From 2536af81e2464e242b4a719473b978d8167fdb6a Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sun, 28 Apr 2024 09:40:05 -0700 Subject: [PATCH 01/50] start building macros for VMObject trait Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- Cargo.lock | 24 ++++++++ ic10emu/Cargo.toml | 2 + ic10emu/src/{vm.rs => vm/mod.rs} | 4 ++ ic10emu/src/vm/object/macros.rs | 94 ++++++++++++++++++++++++++++++++ ic10emu/src/vm/object/mod.rs | 5 ++ 5 files changed, 129 insertions(+) rename ic10emu/src/{vm.rs => vm/mod.rs} (99%) create mode 100644 ic10emu/src/vm/object/macros.rs create mode 100644 ic10emu/src/vm/object/mod.rs diff --git a/Cargo.lock b/Cargo.lock index 3bc6add..68eb93a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -566,6 +566,8 @@ dependencies = [ "convert_case", "getrandom", "itertools", + "macro_rules_attribute", + "paste", "phf 0.11.2", "phf_codegen", "rand", @@ -728,6 +730,22 @@ dependencies = [ "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" @@ -826,6 +844,12 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + [[package]] name = "percent-encoding" version = "2.3.1" diff --git a/ic10emu/Cargo.toml b/ic10emu/Cargo.toml index 60d5dbc..1d20748 100644 --- a/ic10emu/Cargo.toml +++ b/ic10emu/Cargo.toml @@ -12,6 +12,8 @@ crate-type = ["lib", "cdylib"] [dependencies] const-crc32 = "1.3.0" itertools = "0.12.1" +macro_rules_attribute = "0.2.0" +paste = "1.0.14" phf = "0.11.2" rand = "0.8.5" regex = "1.10.3" diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm/mod.rs similarity index 99% rename from ic10emu/src/vm.rs rename to ic10emu/src/vm/mod.rs index f95c5b9..599fa36 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm/mod.rs @@ -1,3 +1,7 @@ + + +mod object; + use crate::{ device::{Device, DeviceTemplate, SlotOccupant, SlotOccupantTemplate}, grammar::{BatchMode, LogicType, SlotLogicType}, diff --git a/ic10emu/src/vm/object/macros.rs b/ic10emu/src/vm/object/macros.rs new file mode 100644 index 0000000..fa003f3 --- /dev/null +++ b/ic10emu/src/vm/object/macros.rs @@ -0,0 +1,94 @@ + +macro_rules! __define_object_interface_for { + ($trt:ident) => { + paste::paste! { + #[allow(missing_docs)] + pub type [<$trt Ref>]<'a, T> = &'a dyn $trt::ID>; + #[allow(missing_docs)] + pub type [<$trt RefMut>]<'a, T> = &'a mut dyn $trt::ID>; + } + }; +} + +macro_rules! object_trait_for { + ( $($trt:ident),*) => { + $( + __define_object_interface_for!{$trt} + )* + pub trait Object { + type ID; + fn id(&self) -> &Self::ID; + + fn as_object(&self) -> &dyn Object; + + fn as_object_mut(&mut self) -> &mut dyn Object; + + paste::paste!{$( + #[inline(always)] + fn [](&self) -> Option<[<$trt Ref>]> { + None + } + + #[inline(always)] + fn [](&mut self) -> Option<[<$trt RefMut>]> { + None + } + )*} + } + }; +} + +macro_rules! __emit_dollar__ { + ($($rules:tt)*) => { + macro_rules! __emit__ { $($rules)* } + __emit__! { $ } + }; +} + +pub(in crate) use __emit_dollar__; + +macro_rules! alias { + ($($name:ident -> $(#[$($stuff:tt)*])+;)* ) => { + $( + $crate::vm::object::macros::__emit_dollar__! { ($_:tt) => ( + #[allow(nonstandard_style)] + macro_rules! $name {($_($item:tt)*) => ( + $( #[$($stuff)*] )+ + $_($item)* + )} + #[allow(unused_imports)] + pub(in crate) use $name; + )} + )* + + }; +} +pub(in crate) use alias; + + + +macro_rules! impl_trait_interfaces { + ( $($trt:ident),*) => { + #[inline(always)] + fn as_object(&self) -> &dyn Object { + self + } + + #[inline(always)] + fn as_object_mut(&mut self) -> &mut dyn Object { + self + } + + paste::paste!{$( + #[inline(always)] + fn [](&self) -> Option<[<$trt Ref>]> { + Some(self) + } + + #[inline(always)] + fn [](&mut self) -> Option<[<$trt RefMut>]> { + Some(self) + } + )*} + }; +} diff --git a/ic10emu/src/vm/object/mod.rs b/ic10emu/src/vm/object/mod.rs new file mode 100644 index 0000000..2f0a526 --- /dev/null +++ b/ic10emu/src/vm/object/mod.rs @@ -0,0 +1,5 @@ +mod macros; + +use macros::alias; + + From a3321636b85c8c97356376aae8a3769ad13fcced Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Mon, 29 Apr 2024 22:18:16 -0700 Subject: [PATCH 02/50] refactor: intorduction of a macro enabled Object trait Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- ic10emu/src/vm/object/macros.rs | 131 ++++++++++++++++++-------------- ic10emu/src/vm/object/mod.rs | 31 +++++++- ic10emu/src/vm/object/traits.rs | 17 +++++ 3 files changed, 121 insertions(+), 58 deletions(-) create mode 100644 ic10emu/src/vm/object/traits.rs diff --git a/ic10emu/src/vm/object/macros.rs b/ic10emu/src/vm/object/macros.rs index fa003f3..7002311 100644 --- a/ic10emu/src/vm/object/macros.rs +++ b/ic10emu/src/vm/object/macros.rs @@ -1,27 +1,24 @@ - -macro_rules! __define_object_interface_for { - ($trt:ident) => { +macro_rules! object_trait { + (@intf $trait_name:ident $trt:path) => { paste::paste! { #[allow(missing_docs)] - pub type [<$trt Ref>]<'a, T> = &'a dyn $trt::ID>; + pub type [<$trt Ref>]<'a, T> = &'a dyn $trt::ID>; #[allow(missing_docs)] - pub type [<$trt RefMut>]<'a, T> = &'a mut dyn $trt::ID>; + pub type [<$trt RefMut>]<'a, T> = &'a mut dyn $trt::ID>; } }; -} - -macro_rules! object_trait_for { - ( $($trt:ident),*) => { + ( $trait_name:ident {$($trt:path),*}) => { $( - __define_object_interface_for!{$trt} + object_trait!{@intf $trait_name $trt} )* - pub trait Object { + + pub trait $trait_name { type ID; fn id(&self) -> &Self::ID; - fn as_object(&self) -> &dyn Object; + fn as_object(&self) -> &dyn $trait_name; - fn as_object_mut(&mut self) -> &mut dyn Object; + fn as_object_mut(&mut self) -> &mut dyn $trait_name; paste::paste!{$( #[inline(always)] @@ -38,57 +35,77 @@ macro_rules! object_trait_for { }; } -macro_rules! __emit_dollar__ { - ($($rules:tt)*) => { - macro_rules! __emit__ { $($rules)* } - __emit__! { $ } - }; -} +pub(in crate) use object_trait; -pub(in crate) use __emit_dollar__; +macro_rules! ObjectInterface { + { + #[custom(implements($trait_name:ident {$($trt:path),*}))] + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $( + $(#[#field1:meta])* + $field1_viz:vis + $field1_name:ident : $field1_ty:ty, + ),* + #[custom(object_id)] + $(#[$id_attr:meta])* + $id_viz:vis $field_id:ident: $id_typ:ty, + $( + $(#[#field2:meta])* + $field2_viz:vis + $field2_name:ident : $field2_ty:ty, + ),* + } + } => { + impl $trait_name for $struct { + type ID = $id_typ; -macro_rules! alias { - ($($name:ident -> $(#[$($stuff:tt)*])+;)* ) => { - $( - $crate::vm::object::macros::__emit_dollar__! { ($_:tt) => ( - #[allow(nonstandard_style)] - macro_rules! $name {($_($item:tt)*) => ( - $( #[$($stuff)*] )+ - $_($item)* - )} - #[allow(unused_imports)] - pub(in crate) use $name; - )} - )* + fn id(&self) -> &Self::ID { + &self.$field_id + } + + #[inline(always)] + fn as_object(&self) -> &dyn $trait_name { + self + } + + #[inline(always)] + fn as_object_mut(&mut self) -> &mut dyn $trait_name { + self + } + + paste::paste!{$( + #[inline(always)] + fn [](&self) -> Option<[<$trt Ref>]> { + Some(self) + } + + #[inline(always)] + fn [](&mut self) -> Option<[<$trt RefMut>]> { + Some(self) + } + )*} + + } }; } -pub(in crate) use alias; +pub(in crate) use ObjectInterface; - - -macro_rules! impl_trait_interfaces { - ( $($trt:ident),*) => { - #[inline(always)] - fn as_object(&self) -> &dyn Object { - self +macro_rules! ObjectTrait { + { + #[custom(object_trait = $trait_name:ident)] + $(#[$attr:meta])* + $viz:vis trait $trt:ident $(: $($bound:path)* )? { + $($tbody:tt)* + } + } => { + $(#[$attr])* + $viz trait $trt: $($($bound)* +)? $trait_name { + $($tbody)* } - #[inline(always)] - fn as_object_mut(&mut self) -> &mut dyn Object { - self - } - - paste::paste!{$( - #[inline(always)] - fn [](&self) -> Option<[<$trt Ref>]> { - Some(self) - } - - #[inline(always)] - fn [](&mut self) -> Option<[<$trt RefMut>]> { - Some(self) - } - )*} }; } + +pub(in crate) use ObjectTrait; diff --git a/ic10emu/src/vm/object/mod.rs b/ic10emu/src/vm/object/mod.rs index 2f0a526..9c23d8b 100644 --- a/ic10emu/src/vm/object/mod.rs +++ b/ic10emu/src/vm/object/mod.rs @@ -1,5 +1,34 @@ +use macro_rules_attribute::derive; + mod macros; +mod traits; -use macros::alias; +use macros::{object_trait, ObjectInterface}; +use traits::Memory; +use crate::vm::object::traits::Test; +object_trait!(VmObject { Memory }); + +#[derive(ObjectInterface!)] +#[custom(implements(VmObject { Memory }))] +pub struct Generic { + mem1: Vec, + + #[custom(object_id)] + id: u32, + + mem2: Vec, +} + +impl Memory for Generic { + fn get_memory(&self) -> &Vec { + &self.mem1 + } + + fn set_memory(&mut self, index: usize, val: u32) { + self.mem2[index] = val; + } +} + +impl Test for Generic {} diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs new file mode 100644 index 0000000..06369e9 --- /dev/null +++ b/ic10emu/src/vm/object/traits.rs @@ -0,0 +1,17 @@ +use macro_rules_attribute::apply; +use crate::vm::object::macros::ObjectTrait; +use crate::vm::object::VmObject; + +#[apply(ObjectTrait!)] +#[custom(object_trait = VmObject)] +pub trait Memory: Test { + fn get_memory(&self) -> &Vec; + fn set_memory(&mut self, index: usize, val: u32); +} + + +pub trait Test { + fn test(&self) { + println!("test!"); + } +} From 6bdc6f210be98bb708901ef1a53784cadaaea2fb Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Tue, 30 Apr 2024 17:57:43 -0700 Subject: [PATCH 03/50] refactor(vm::objects): Establixh base object macros and traits Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- ic10emu/src/vm/mod.rs | 6 ++- ic10emu/src/vm/object/macros.rs | 68 +++++++++++++++++++++++++++++---- ic10emu/src/vm/object/mod.rs | 25 ++++++------ ic10emu/src/vm/object/traits.rs | 64 ++++++++++++++++++++++++------- 4 files changed, 129 insertions(+), 34 deletions(-) diff --git a/ic10emu/src/vm/mod.rs b/ic10emu/src/vm/mod.rs index 599fa36..0c9fabd 100644 --- a/ic10emu/src/vm/mod.rs +++ b/ic10emu/src/vm/mod.rs @@ -54,6 +54,7 @@ pub struct VM { /// list of device id's touched on the last operation operation_modified: RefCell>, + objects: Vec, } impl Default for VM { @@ -64,7 +65,7 @@ impl Default for VM { impl VM { pub fn new() -> Self { - let id_gen = IdSpace::default(); + 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))); @@ -76,10 +77,11 @@ impl VM { devices: BTreeMap::new(), networks, default_network: default_network_key, - id_space: id_gen, + id_space, network_id_space, random: Rc::new(RefCell::new(crate::rand_mscorlib::Random::new())), operation_modified: RefCell::new(Vec::new()), + objects: Vec::new(), }; let _ = vm.add_ic(None); vm diff --git a/ic10emu/src/vm/object/macros.rs b/ic10emu/src/vm/object/macros.rs index 7002311..accde95 100644 --- a/ic10emu/src/vm/object/macros.rs +++ b/ic10emu/src/vm/object/macros.rs @@ -1,5 +1,5 @@ macro_rules! object_trait { - (@intf $trait_name:ident $trt:path) => { + (intf {$trait_name:ident $trt:path}) => { paste::paste! { #[allow(missing_docs)] pub type [<$trt Ref>]<'a, T> = &'a dyn $trt::ID>; @@ -9,7 +9,7 @@ macro_rules! object_trait { }; ( $trait_name:ident {$($trt:path),*}) => { $( - object_trait!{@intf $trait_name $trt} + $crate::vm::object::macros::object_trait!{intf {$trait_name $trt}} )* pub trait $trait_name { @@ -22,12 +22,12 @@ macro_rules! object_trait { paste::paste!{$( #[inline(always)] - fn [](&self) -> Option<[<$trt Ref>]> { + fn [](&self) -> Option<[<$trt Ref>]> { None } #[inline(always)] - fn [](&mut self) -> Option<[<$trt RefMut>]> { + fn [](&mut self) -> Option<[<$trt RefMut>]> { None } )*} @@ -35,7 +35,7 @@ macro_rules! object_trait { }; } -pub(in crate) use object_trait; +pub(crate) use object_trait; macro_rules! ObjectInterface { { @@ -90,13 +90,14 @@ macro_rules! ObjectInterface { }; } -pub(in crate) use ObjectInterface; +pub(crate) use ObjectInterface; +#[allow(unused_macros)] macro_rules! ObjectTrait { { #[custom(object_trait = $trait_name:ident)] $(#[$attr:meta])* - $viz:vis trait $trt:ident $(: $($bound:path)* )? { + $viz:vis trait $trt:ident $(: $($bound:tt)* )? { $($tbody:tt)* } } => { @@ -107,5 +108,56 @@ macro_rules! ObjectTrait { }; } +#[allow(unused_imports)] +pub(crate) use ObjectTrait; -pub(in crate) use ObjectTrait; +macro_rules! tag_object_traits { + { + @tag + tag=$trt_name:ident; + acc={ $($tagged_trt:ident,)* } + $(#[$attr:meta])* + $viz:vis trait $trt:ident $(: $($bound:path)* )? { + $($tbody:tt)* + } + $($used:tt)* + } => { + #[doc = concat!("Autotagged with ", stringify!($trt_name))] + $(#[$attr])* + $viz trait $trt : $($($bound)* +)? $trt_name { + $($tbody)* + } + + $crate::vm::object::macros::tag_object_traits!{ @tag tag=$trt_name; acc={ $trt, $($tagged_trt,)* } $($used)* } + }; + { + @tag + tag=$trt_name:ident; + 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; acc={ $($tagged_trt,)* } $($used)* } + }; + { + @tag + tag=$trt_name:ident; + acc={ $($tagged_trt:ident,)* } + } => { + + // end tagged traits {$trt_name} + + $crate::vm::object::macros::object_trait!($trt_name { $($tagged_trt),* }); + }; + { #![object_trait($trt_name:ident)] $($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/mod.rs b/ic10emu/src/vm/object/mod.rs index 9c23d8b..688a608 100644 --- a/ic10emu/src/vm/object/mod.rs +++ b/ic10emu/src/vm/object/mod.rs @@ -3,32 +3,35 @@ use macro_rules_attribute::derive; mod macros; mod traits; -use macros::{object_trait, ObjectInterface}; -use traits::Memory; +use macros::ObjectInterface; +use traits::*; -use crate::vm::object::traits::Test; +pub type ObjectID = u32; +pub type BoxedObject = Box>; -object_trait!(VmObject { Memory }); #[derive(ObjectInterface!)] -#[custom(implements(VmObject { Memory }))] +#[custom(implements(Object { Memory }))] pub struct Generic { - mem1: Vec, + mem1: Vec, #[custom(object_id)] - id: u32, + id: ObjectID, - mem2: Vec, + mem2: Vec, } impl Memory for Generic { - fn get_memory(&self) -> &Vec { + fn get_memory(&self) -> &Vec { &self.mem1 } - fn set_memory(&mut self, index: usize, val: u32) { + fn set_memory(&mut self, index: usize, val: f64) { self.mem2[index] = val; } + + fn size(&self) -> usize { + self.mem1.len() + } } -impl Test for Generic {} diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index 06369e9..a42130f 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -1,17 +1,55 @@ -use macro_rules_attribute::apply; -use crate::vm::object::macros::ObjectTrait; -use crate::vm::object::VmObject; +use crate::{grammar, vm::{object::{macros::tag_object_traits, ObjectID}, VM}}; -#[apply(ObjectTrait!)] -#[custom(object_trait = VmObject)] -pub trait Memory: Test { - fn get_memory(&self) -> &Vec; - fn set_memory(&mut self, index: usize, val: u32); -} +tag_object_traits! { + #![object_trait(Object)] - -pub trait Test { - fn test(&self) { - println!("test!"); + pub trait Memory { + fn size(&self) -> usize; } + + pub trait MemoryWritable: Memory { + fn set_memory(&mut self, index: usize, val: f64); + fn clear_memory(&mut self); + } + + pub trait MemoryReadable: Memory { + fn get_memory(&self) -> &Vec; + } + + pub trait Logicable { + fn is_logic_readable(&self) -> bool; + fn is_logic_writeable(&self) -> bool; + fn set_logic(&mut self, lt: grammar::LogicType, value: f64); + fn get_logic(&self, lt: grammar::LogicType) -> Option; + + fn slots_count(&self) -> usize; + // fn get_slot(&self, index: usize) -> Slot; + fn set_slot_logic(&mut self, slt: grammar::SlotLogicType, value: f64); + fn get_slot_logic(&self, slt: grammar::SlotLogicType) -> Option; + } + + pub trait CircuitHolder: Logicable { + fn clear_error(&mut self); + fn set_error(&mut self, state: i32); + fn get_logicable_from_index(&self, device: usize, vm: &VM) -> Option>; + fn get_logicable_from_id(&self, device: ObjectID, vm: &VM) -> Option>; + fn get_source_code(&self) -> String; + fn set_source_code(&self, code: String); + } + + pub trait SourceCode { + fn get_source_code(&self) -> String; + fn set_source_code(&self, code: String); + + } + + pub trait Instructable: Memory { + // fn get_instructions(&self) -> Vec + } + + pub trait LogicStack: Memory { + // fn logic_stack(&self) -> LogicStack; + } + } + From c3182035ae4725af03e0905f6d4bebe02b7e504e Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Tue, 30 Apr 2024 21:15:13 -0700 Subject: [PATCH 04/50] refactor(vm): use proper repr on generated enums if possible, generate stationpedia prefab enum Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- ic10emu/build.rs | 261 ++++++++++++++------------ ic10emu/data/enums.txt | 20 ++ ic10emu/data/logictypes.txt | 102 +++++----- ic10emu/data/stationpedia.txt | 18 +- ic10emu/generate_data.py | 2 +- ic10emu/src/grammar.rs | 13 +- ic10emu/src/vm/object/macros.rs | 71 ++++--- ic10emu/src/vm/object/mod.rs | 1 + ic10emu/src/vm/object/stationpedia.rs | 26 +++ ic10emu/src/vm/object/traits.rs | 9 +- 10 files changed, 314 insertions(+), 209 deletions(-) create mode 100644 ic10emu/src/vm/object/stationpedia.rs diff --git a/ic10emu/build.rs b/ic10emu/build.rs index 5dd8cec..bd1a0da 100644 --- a/ic10emu/build.rs +++ b/ic10emu/build.rs @@ -18,11 +18,70 @@ where pub deprecated: bool, } +struct ReprEnumVariant

+where + P: Display + FromStr, +{ + pub value: P, + pub deprecated: bool, + pub props: Vec<(String, String)> +} + 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 { "" }; + let repr = std::any::type_name::

(); + write!( + writer, + "#[derive(Debug, Display, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, EnumString, AsRefStr, EnumProperty, EnumIter, FromRepr, Serialize, Deserialize)]\n\ + {additional_strum}\ + #[repr({repr})]\n\ + pub enum {name} {{\n" + ) + .unwrap(); + for (name, variant) in variants { + let variant_name = name.replace('.', "").to_case(Case::Pascal); + let serialize = vec![name.clone()]; + 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()); + } + for (prop_name, prop_val) in &variant.props { + props.push(format!("{prop_name} = \"{prop_val}\"")); + } + let 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} = {val}{repr}," + ) + .unwrap(); + } + writeln!(writer, "}}").unwrap(); +} + +fn write_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)>, @@ -72,7 +131,7 @@ fn write_logictypes() { let output_file = File::create(dest_path).unwrap(); let mut writer = BufWriter::new(&output_file); - let mut logictypes: Vec<(String, EnumVariant)> = Vec::new(); + let mut logictypes: Vec<(String, ReprEnumVariant)> = Vec::new(); let l_infile = Path::new("data/logictypes.txt"); let l_contents = fs::read_to_string(l_infile).unwrap(); @@ -80,42 +139,26 @@ fn write_logictypes() { 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 value: u16 = val_str.parse().unwrap_or_else(|err| panic!("'{val_str}' not valid u16: {err}")); 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 props = Vec::new(); + if let Some(docs) = docs { + props.push(("docs".to_owned(), docs.to_owned())); } + logictypes.push(( + name.to_string(), + ReprEnumVariant { + value, + deprecated, + props, + }, + )); } - let mut slotlogictypes: Vec<(String, EnumVariant)> = Vec::new(); + let mut slotlogictypes: Vec<(String, ReprEnumVariant)> = Vec::new(); let sl_infile = Path::new("data/slotlogictypes.txt"); let sl_contents = fs::read_to_string(sl_infile).unwrap(); @@ -123,39 +166,23 @@ fn write_logictypes() { 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 value: u8 = val_str.parse().unwrap_or_else(|err| panic!("'{val_str}' not valid u8: {err}")); 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, - }, - )); + let mut props = Vec::new(); + if let Some(docs) = docs { + props.push(("docs".to_owned(), docs.to_owned())); } + slotlogictypes.push(( + name.to_string(), + ReprEnumVariant { + value, + deprecated, + props, + }, + )); } write_repr_enum(&mut writer, "LogicType", &logictypes, true); @@ -198,7 +225,7 @@ fn write_enums() { )); } - write_repr_enum(&mut writer, "LogicEnums", &enums_map, true); + write_enum(&mut writer, "LogicEnums", &enums_map, true); println!("cargo:rerun-if-changed=data/enums.txt"); } @@ -210,7 +237,7 @@ fn write_modes() { let output_file = File::create(dest_path).unwrap(); let mut writer = BufWriter::new(&output_file); - let mut batchmodes: Vec<(String, EnumVariant)> = Vec::new(); + let mut batchmodes: Vec<(String, ReprEnumVariant)> = Vec::new(); let b_infile = Path::new("data/batchmodes.txt"); let b_contents = fs::read_to_string(b_infile).unwrap(); @@ -218,37 +245,19 @@ fn write_modes() { 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 value: u8 = val_str.parse().unwrap_or_else(|err| panic!("'{val_str}' not valid u8: {err}")); - 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, - }, - )); - } + batchmodes.push(( + name.to_string(), + ReprEnumVariant { + value, + deprecated: false, + props: Vec::new(), + }, + )); } - let mut reagentmodes: Vec<(String, EnumVariant)> = Vec::new(); + let mut reagentmodes: Vec<(String, ReprEnumVariant)> = Vec::new(); let r_infile = Path::new("data/reagentmodes.txt"); let r_contents = fs::read_to_string(r_infile).unwrap(); @@ -256,34 +265,16 @@ fn write_modes() { 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 value: u8 = val_str.parse().unwrap_or_else(|err| panic!("'{val_str}' not valid u8: {err}")); + reagentmodes.push(( + name.to_string(), + ReprEnumVariant { + value, + deprecated: false, + props: Vec::new(), + }, + )); - 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); @@ -381,12 +372,50 @@ fn write_instructions_enum() { println!("cargo:rerun-if-changed=data/instructions.txt"); } +fn write_stationpedia() { + let out_dir = env::var_os("OUT_DIR").unwrap(); + + let dest_path = Path::new(&out_dir).join("stationpedia_prefabs.rs"); + let output_file = File::create(dest_path).unwrap(); + let mut writer = BufWriter::new(&output_file); + + let mut prefabs: Vec<(String, ReprEnumVariant)> = Vec::new(); + let l_infile = Path::new("data/stationpedia.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 val_str = it.next().unwrap(); + let value: i32 = val_str.parse().unwrap_or_else(|err| panic!("'{val_str}' not valid i32: {err}")); + let name = it.next().unwrap(); + let title = it.next(); + + let mut props = Vec::new(); + if let Some(title) = title { + props.push(("title".to_owned(), title.to_owned())); + } + + prefabs.push(( + name.to_string(), + ReprEnumVariant { + value, + deprecated: false, + props, + }, + )); + } + + write_repr_enum(&mut writer, "StationpediaPrefab", &prefabs, true); + + println!("cargo:rerun-if-changed=data/stationpdeia.txt"); +} + fn main() { - // write_instructions(); write_logictypes(); write_modes(); write_constants(); write_enums(); write_instructions_enum(); + write_stationpedia(); } diff --git a/ic10emu/data/enums.txt b/ic10emu/data/enums.txt index 46ef9b3..6c492db 100644 --- a/ic10emu/data/enums.txt +++ b/ic10emu/data/enums.txt @@ -81,6 +81,7 @@ 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.BestContactFilter 267 LogicType.Bpm 103 Bpm LogicType.BurnTimeRemaining 225 Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage. LogicType.CelestialHash 242 @@ -346,6 +347,11 @@ PowerMode.Charging 3 PowerMode.Discharged 1 PowerMode.Discharging 2 PowerMode.Idle 0 +ReEntryProfile.High 3 +ReEntryProfile.Max 4 +ReEntryProfile.Medium 2 +ReEntryProfile.None 0 +ReEntryProfile.Optimal 1 RobotMode.Follow 1 RobotMode.MoveToTarget 2 RobotMode.None 0 @@ -353,6 +359,12 @@ RobotMode.PathToTarget 5 RobotMode.Roam 3 RobotMode.StorageFull 6 RobotMode.Unload 4 +RocketMode.Chart 5 +RocketMode.Discover 4 +RocketMode.Invalid 0 +RocketMode.Mine 2 +RocketMode.None 1 +RocketMode.Survey 3 SlotClass.AccessCard 22 SlotClass.Appliance 18 SlotClass.Back 3 @@ -388,10 +400,18 @@ SlotClass.ScanningHead 36 SlotClass.SensorProcessingUnit 30 SlotClass.SoundCartridge 34 SlotClass.Suit 2 +SlotClass.SuitMod 39 SlotClass.Tool 17 SlotClass.Torpedo 20 SlotClass.Uniform 12 SlotClass.Wreckage 33 +SorterInstruction.FilterPrefabHashEquals 1 +SorterInstruction.FilterPrefabHashNotEquals 2 +SorterInstruction.FilterQuantityCompare 5 +SorterInstruction.FilterSlotTypeCompare 4 +SorterInstruction.FilterSortingClassCompare 3 +SorterInstruction.LimitNextExecutionByCount 6 +SorterInstruction.None 0 SortingClass.Appliances 6 SortingClass.Atmospherics 7 SortingClass.Clothing 5 diff --git a/ic10emu/data/logictypes.txt b/ic10emu/data/logictypes.txt index e363bdc..ccd785a 100644 --- a/ic10emu/data/logictypes.txt +++ b/ic10emu/data/logictypes.txt @@ -1,14 +1,15 @@ 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 +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 +BestContactFilter 267 Bpm 103 Bpm BurnTimeRemaining 225 Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage. -CelestialHash 242 -CelestialParentHash 250 +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 @@ -18,10 +19,10 @@ 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 +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 +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. @@ -31,34 +32,34 @@ CombustionOutput 148 The assess atmosphere is on fire. Returns 1 if device's Out 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 +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 +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 +Eccentricity 247 ElevatorLevel 40 Level the elevator is currently at ElevatorSpeed 39 Current speed of the elevator -EntityState 239 +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 +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 +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 +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 @@ -67,30 +68,29 @@ 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 +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 +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 +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 +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 +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 +PassedMoles 234 Plant 68 Performs the planting action for any plant based machinery PlantEfficiency1 52 DEPRECATED PlantEfficiency2 53 DEPRECATED @@ -202,33 +202,31 @@ 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 +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 +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 +ReturnFuelCost 100 +Richness 263 Rpm 155 The number of revolutions per minute that the device's spinning mechanism is doing -SemiMajorAxis 248 +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 +SettingInput 91 The input setting for the device +SettingOutput 92 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 +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 +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 +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 @@ -251,15 +249,15 @@ 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 +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 +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 diff --git a/ic10emu/data/stationpedia.txt b/ic10emu/data/stationpedia.txt index 9250587..7c65011 100644 --- a/ic10emu/data/stationpedia.txt +++ b/ic10emu/data/stationpedia.txt @@ -157,7 +157,7 @@ -746362430 DynamicCrateCableSupplies Crate (Cabling Supplies) 166707648 DynamicCrateConveyorSupplies Crate (Conveyor Supplies) -282237045 DynamicCratePipeSupplies Crate (Pipe Supplies) --2085885850 DynamicGPR Ground Penetrating Radar (GPR) +-2085885850 DynamicGPR -1713611165 DynamicGasCanisterAir Portable Gas Tank (Air) -322413931 DynamicGasCanisterCarbonDioxide Portable Gas Tank (CO2) -1741267161 DynamicGasCanisterEmpty Portable Gas Tank @@ -225,6 +225,7 @@ -626453759 Invar Invar -666742878 Iron Iron -842048328 ItemActiveVent Kit (Active Vent) +1871048978 ItemAdhesiveInsulation Adhesive Insulation 1722785341 ItemAdvancedTablet Advanced Tablet 176446172 ItemAlienMushroom Alien Mushroom -9559091 ItemAmmoBox Ammo Box @@ -500,6 +501,8 @@ 288111533 ItemKitIceCrusher Kit (Ice Crusher) 2067655311 ItemKitInsulatedLiquidPipe Kit (Insulated Liquid Pipe) 452636699 ItemKitInsulatedPipe Kit (Insulated Pipe) +-27284803 ItemKitInsulatedPipeUtility Kit (Insulated Pipe Utility Gas) +-1831558953 ItemKitInsulatedPipeUtilityLiquid Kit (Insulated Pipe Utility Liquid) -1708400347 ItemKitInsulatedWaterPipe Insulated Water Pipe Kit 1935945891 ItemKitInteriorDoors Kit (Interior Doors) 489494578 ItemKitLadder Kit (Ladder) @@ -793,6 +796,13 @@ -2038663432 ItemStelliteGlassSheets Stellite Glass Sheets -1897868623 ItemStelliteIngot Ingot (Stellite) -1335056202 ItemSugarCane Sugar Cane +1447327071 ItemSuitAdvancedAC Advanced AC Suit +711019524 ItemSuitEmergency Emergency Suit +70631292 ItemSuitHard Hard Suit +-2020709888 ItemSuitInsulated Insulated Suit +-1274308304 ItemSuitModCryogenicUpgrade Cryogenic Suit Upgrade +-942170293 ItemSuitNormal Normal Suit +416903029 ItemSuitSpace Space Suit 318109626 ItemSuitStorage Kit (Suit Storage) -229808600 ItemTablet Handheld Tablet -1782380726 ItemTankConnector Kit (Tank Connector) @@ -1342,6 +1352,10 @@ 35149429 StructureInLineTankGas1x2 In-Line Tank Gas 543645499 StructureInLineTankLiquid1x1 In-Line Tank Small Liquid -1183969663 StructureInLineTankLiquid1x2 In-Line Tank Liquid +1818267386 StructureInsulatedInLineTankGas1x1 Insulated In-Line Tank Small Gas +-177610944 StructureInsulatedInLineTankGas1x2 Insulated In-Line Tank Gas +-813426145 StructureInsulatedInLineTankLiquid1x1 Insulated In-Line Tank Small Liquid +1452100517 StructureInsulatedInLineTankLiquid1x2 Insulated In-Line Tank Liquid -1967711059 StructureInsulatedPipeCorner Insulated Pipe (Corner) -92778058 StructureInsulatedPipeCrossJunction Insulated Pipe (Cross Junction) 1328210035 StructureInsulatedPipeCrossJunction3 Insulated Pipe (3-Way Junction) @@ -1422,6 +1436,7 @@ 546002924 StructureLogicRocketUplink Logic Uplink 1822736084 StructureLogicSelect Logic Select -767867194 StructureLogicSlotReader Slot Reader +873418029 StructureLogicSorter Logic Sorter 1220484876 StructureLogicSwitch Lever 321604921 StructureLogicSwitch2 Switch -693235651 StructureLogicTransmitter Logic Transmitter @@ -1638,7 +1653,6 @@ 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) 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/grammar.rs b/ic10emu/src/grammar.rs index 027dc14..b1ff57e 100644 --- a/ic10emu/src/grammar.rs +++ b/ic10emu/src/grammar.rs @@ -11,12 +11,9 @@ pub mod generated { 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; + use strum::{ + AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr, IntoEnumIterator, + }; include!(concat!(env!("OUT_DIR"), "/instructions.rs")); include!(concat!(env!("OUT_DIR"), "/logictypes.rs")); @@ -1081,7 +1078,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, } diff --git a/ic10emu/src/vm/object/macros.rs b/ic10emu/src/vm/object/macros.rs index accde95..cdb3fef 100644 --- a/ic10emu/src/vm/object/macros.rs +++ b/ic10emu/src/vm/object/macros.rs @@ -1,5 +1,5 @@ macro_rules! object_trait { - (intf {$trait_name:ident $trt:path}) => { + (@intf {$trait_name:ident $trt:path}) => { paste::paste! { #[allow(missing_docs)] pub type [<$trt Ref>]<'a, T> = &'a dyn $trt::ID>; @@ -7,30 +7,37 @@ macro_rules! object_trait { pub type [<$trt RefMut>]<'a, T> = &'a mut dyn $trt::ID>; } }; - ( $trait_name:ident {$($trt:path),*}) => { + (@body $trait_name:ident $($trt:path),*) => { + type ID; + fn id(&self) -> &Self::ID; + + fn type_name(&self) -> &str; + + fn as_object(&self) -> &dyn $trait_name; + + fn as_object_mut(&mut self) -> &mut dyn $trait_name; + + + paste::paste!{$( + #[inline(always)] + fn [](&self) -> Option<[<$trt Ref>]> { + None + } + + #[inline(always)] + fn [](&mut self) -> Option<[<$trt RefMut>]> { + None + } + )*} + }; + ( $trait_name:ident $(: $($bound:tt)* )? {$($trt:path),*}) => { $( - $crate::vm::object::macros::object_trait!{intf {$trait_name $trt}} + $crate::vm::object::macros::object_trait!{@intf {$trait_name $trt}} )* - pub trait $trait_name { - type ID; - fn id(&self) -> &Self::ID; + pub trait $trait_name $(: $($bound)* )? { - fn as_object(&self) -> &dyn $trait_name; - - fn as_object_mut(&mut self) -> &mut dyn $trait_name; - - paste::paste!{$( - #[inline(always)] - fn [](&self) -> Option<[<$trt Ref>]> { - None - } - - #[inline(always)] - fn [](&mut self) -> Option<[<$trt RefMut>]> { - None - } - )*} + $crate::vm::object::macros::object_trait!{@body $trait_name $($trt),*} } }; } @@ -64,6 +71,10 @@ macro_rules! ObjectInterface { &self.$field_id } + fn type_name(&self) -> &str { + std::any::type_name::() + } + #[inline(always)] fn as_object(&self) -> &dyn $trait_name { self @@ -114,25 +125,25 @@ pub(crate) use ObjectTrait; macro_rules! tag_object_traits { { @tag - tag=$trt_name:ident; + tag=$trt_name:ident $(: $($obj_bound:tt)* )?; acc={ $($tagged_trt:ident,)* } $(#[$attr:meta])* - $viz:vis trait $trt:ident $(: $($bound:path)* )? { + $viz:vis trait $trt:ident $(: $($trt_bound:path)* )? { $($tbody:tt)* } $($used:tt)* } => { #[doc = concat!("Autotagged with ", stringify!($trt_name))] $(#[$attr])* - $viz trait $trt : $($($bound)* +)? $trt_name { + $viz trait $trt : $($($trt_bound)* +)? $trt_name { $($tbody)* } - $crate::vm::object::macros::tag_object_traits!{ @tag tag=$trt_name; acc={ $trt, $($tagged_trt,)* } $($used)* } + $crate::vm::object::macros::tag_object_traits!{ @tag tag=$trt_name $(: $($obj_bound)* )?; acc={ $trt, $($tagged_trt,)* } $($used)* } }; { @tag - tag=$trt_name:ident; + tag=$trt_name:ident $(: $($obj_bound:tt)* )?; acc={ $($tagged_trt:ident,)* } impl $name:ident for $trt:path { $($body:tt)* @@ -143,19 +154,19 @@ macro_rules! tag_object_traits { impl $name for $trt { $($body)* } - $crate::vm::object::macros::tag_object_traits!{ @tag tag=$trt_name; acc={ $($tagged_trt,)* } $($used)* } + $crate::vm::object::macros::tag_object_traits!{ @tag tag=$trt_name $(: $($obj_bound)* )?; acc={ $($tagged_trt,)* } $($used)* } }; { @tag - tag=$trt_name:ident; + tag=$trt_name:ident $(: $($obj_bound:tt)* )?; acc={ $($tagged_trt:ident,)* } } => { // end tagged traits {$trt_name} - $crate::vm::object::macros::object_trait!($trt_name { $($tagged_trt),* }); + $crate::vm::object::macros::object_trait!($trt_name $(: $($obj_bound)* )? { $($tagged_trt),* }); }; - { #![object_trait($trt_name:ident)] $($tree:tt)* } => { + { #![object_trait($trt_name:ident $(: $($bound:tt)* )? )] $($tree:tt)* } => { $crate::vm::object::macros::tag_object_traits!{ @tag tag=$trt_name; acc={} $($tree)* } }; } diff --git a/ic10emu/src/vm/object/mod.rs b/ic10emu/src/vm/object/mod.rs index 688a608..2dd70d2 100644 --- a/ic10emu/src/vm/object/mod.rs +++ b/ic10emu/src/vm/object/mod.rs @@ -2,6 +2,7 @@ use macro_rules_attribute::derive; mod macros; mod traits; +mod stationpedia; use macros::ObjectInterface; use traits::*; diff --git a/ic10emu/src/vm/object/stationpedia.rs b/ic10emu/src/vm/object/stationpedia.rs new file mode 100644 index 0000000..861f708 --- /dev/null +++ b/ic10emu/src/vm/object/stationpedia.rs @@ -0,0 +1,26 @@ +use std::str::FromStr; + +use serde::{Deserialize, Serialize}; +use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; + +use crate::vm::object::BoxedObject; + +include!(concat!(env!("OUT_DIR"), "/stationpedia_prefabs.rs")); + +pub enum PrefabTemplate { + Hash(i32), + Name(String), +} + +pub fn object_from_prefab_template(template: &PrefabTemplate) -> Option { + let prefab = match template { + PrefabTemplate::Hash(hash) => StationpediaPrefab::from_repr(*hash), + PrefabTemplate::Name(name) => StationpediaPrefab::from_str(name).ok(), + }; + match prefab { + // Some(StationpediaPrefab::ItemIntegratedCircuit10) => Some() + // Some(StationpediaPrefab::StructureCircuitHousing) => Some() + // Some(StationpediaPrefab::StructureRocketCircuitHousing) => Some() + _ => None, + } +} diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index a42130f..d71eb90 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -1,7 +1,9 @@ +use std::fmt::Debug; + use crate::{grammar, vm::{object::{macros::tag_object_traits, ObjectID}, VM}}; tag_object_traits! { - #![object_trait(Object)] + #![object_trait(Object: Debug)] pub trait Memory { fn size(&self) -> usize; @@ -53,3 +55,8 @@ tag_object_traits! { } +impl Debug for dyn Object { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "Object: (ID = {:?}, Type = {})", self.id(), self.type_name()) + } +} From 2d8b35c5b203a5cecc82493b880a582aa5b4f9cd Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Wed, 1 May 2024 16:17:24 -0700 Subject: [PATCH 05/50] refactor(vm): generic impls for generic Objects (not implimented with special logic) Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- ic10emu/src/vm/mod.rs | 1 + ic10emu/src/vm/object/errors.rs | 28 ++ ic10emu/src/vm/object/macros.rs | 177 ++++++++-- ic10emu/src/vm/object/mod.rs | 59 ++-- ic10emu/src/vm/object/stationpedia.rs | 4 + ic10emu/src/vm/object/stationpedia/generic.rs | 323 ++++++++++++++++++ ic10emu/src/vm/object/traits.rs | 34 +- 7 files changed, 573 insertions(+), 53 deletions(-) create mode 100644 ic10emu/src/vm/object/errors.rs create mode 100644 ic10emu/src/vm/object/stationpedia/generic.rs diff --git a/ic10emu/src/vm/mod.rs b/ic10emu/src/vm/mod.rs index 0c9fabd..39f8ce6 100644 --- a/ic10emu/src/vm/mod.rs +++ b/ic10emu/src/vm/mod.rs @@ -54,6 +54,7 @@ pub struct VM { /// list of device id's touched on the last operation operation_modified: RefCell>, + #[allow(unused)] objects: Vec, } diff --git a/ic10emu/src/vm/object/errors.rs b/ic10emu/src/vm/object/errors.rs new file mode 100644 index 0000000..87b73f9 --- /dev/null +++ b/ic10emu/src/vm/object/errors.rs @@ -0,0 +1,28 @@ +use serde::{Deserialize, Serialize}; +use thiserror::Error; + +use crate::grammar::{LogicType, SlotLogicType}; + +#[derive(Error, Debug, Serialize, Deserialize)] +pub enum LogicError { + #[error("can't read LogicType {0}")] + CantRead(LogicType), + #[error("can't read slot {1} SlotLogicType {0}")] + CantSlotRead(SlotLogicType, usize), + #[error("can't write LogicType {0}")] + CantWrite(LogicType), + #[error("can't write slot {1} SlotLogicType {0}")] + CantSlotWrite(SlotLogicType, usize), + #[error("slot id {0} is out of range 0..{1}")] + SlotIndexOutOfRange(usize, usize) +} + +#[derive(Error, Debug, Serialize, Deserialize)] +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 unit not present")] + NotPresent, +} diff --git a/ic10emu/src/vm/object/macros.rs b/ic10emu/src/vm/object/macros.rs index cdb3fef..52278ca 100644 --- a/ic10emu/src/vm/object/macros.rs +++ b/ic10emu/src/vm/object/macros.rs @@ -1,15 +1,16 @@ macro_rules! object_trait { (@intf {$trait_name:ident $trt:path}) => { paste::paste! { - #[allow(missing_docs)] + #[allow(missing_docs, unused)] pub type [<$trt Ref>]<'a, T> = &'a dyn $trt::ID>; - #[allow(missing_docs)] + #[allow(missing_docs, unused)] pub type [<$trt RefMut>]<'a, T> = &'a mut dyn $trt::ID>; } }; (@body $trait_name:ident $($trt:path),*) => { type ID; fn id(&self) -> &Self::ID; + fn prefab(&self) -> &crate::vm::object::Name; fn type_name(&self) -> &str; @@ -46,29 +47,21 @@ pub(crate) use object_trait; macro_rules! ObjectInterface { { - #[custom(implements($trait_name:ident {$($trt:path),*}))] - $( #[$attr:meta] )* - $viz:vis struct $struct:ident { - $( - $(#[#field1:meta])* - $field1_viz:vis - $field1_name:ident : $field1_ty:ty, - ),* - #[custom(object_id)] - $(#[$id_attr:meta])* - $id_viz:vis $field_id:ident: $id_typ:ty, - $( - $(#[#field2:meta])* - $field2_viz:vis - $field2_name:ident : $field2_ty:ty, - ),* - } + @final + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + @id $id_field:ident: $id_typ:ty; + @prefab $prefab_field:ident: $prefab_typ:ty; } => { impl $trait_name for $struct { type ID = $id_typ; fn id(&self) -> &Self::ID { - &self.$field_id + &self.$id_field + } + + fn prefab(&self) -> &crate::vm::object::Name { + &self.$prefab_field } fn type_name(&self) -> &str { @@ -87,18 +80,158 @@ macro_rules! ObjectInterface { paste::paste!{$( #[inline(always)] - fn [](&self) -> Option<[<$trt Ref>]> { + fn [](&self) -> Option<[<$trt Ref>]> { Some(self) } #[inline(always)] - fn [](&mut self) -> Option<[<$trt RefMut>]> { + fn [](&mut self) -> Option<[<$trt RefMut>]> { Some(self) } )*} } + }; + { + @body_id + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + @id $id_field:ident: $id_typ:ty; + #[custom(object_prefab)] + $(#[$prefab_attr:meta])* + $prefab_viz:vis $prefab_field:ident: $prefab_typ:ty, + $( $rest:tt )* + } => { + $crate::vm::object::macros::ObjectInterface!{ + @final + @trt $trait_name; $struct; + @impls $($trt),*; + @id $id_field: $id_typ; + @prefab $prefab_field: $prefab_typ; + } + }; + { + @body_id + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + @id $id_field:ident: $id_typ:ty; + $(#[#field:meta])* + $field_viz:vis + $field_name:ident : $field_ty:ty, + $( $rest:tt )* + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body_id + @trt $trait_name; $struct; + @impls $($trt),*; + @id $id_field: $id_typ; + $( $rest )* + } + }; + { + @body_prefab + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + @prefab $prefab_field:ident: $prefab_typ:ty; + #[custom(object_id)] + $(#[$id_attr:meta])* + $id_viz:vis $id_field:ident: $id_typ:ty, + $( $rest:tt )* + } => { + $crate::vm::object::macros::ObjectInterface!{ + @final + @trt $trait_name; $struct; + @impls $($trt),*; + @id $id_field: $id_typ; + @prefab $prefab_field: $prefab_typ; + } + }; + { + @body_prefab + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + @prefab $prefab_field:ident: $prefab_typ:ty; + $(#[#field:meta])* + $field_viz:vis + $field_name:ident : $field_ty:ty, + $( $rest:tt )* + + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body_prefab + @trt $trait_name; $struct; + @impls $($trt),*; + @prefab $prefab_field: $prefab_typ; + $( $rest )* + } + }; + { + @body + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + #[custom(object_prefab)] + $(#[$prefab_attr:meta])* + $prefab_viz:vis $prefab_field:ident: $prefab_typ:ty, + $( $rest:tt )* + + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body_prefab + @trt $trait_name; $struct; + @impls $($trt),*; + @prefab $prefab_field: $prefab_typ; + $( $rest )* + } + }; + { + @body + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + #[custom(object_id)] + $(#[$id_attr:meta])* + $id_viz:vis $id_field:ident: $id_typ:ty, + $( $rest:tt )* + + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body_id + @trt $trait_name; $struct; + @impls $($trt),*; + @id $id_field: $id_typ; + $( $rest )* + } + }; + { + @body + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + $(#[#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),*; + $( $rest )* + } + }; + { + #[custom(implements($trait_name:ident {$($trt:path),*}))] + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $( $body:tt )* + } + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body + @trt $trait_name; $struct; + @impls $($trt),*; + $( $body )* + } }; } pub(crate) use ObjectInterface; diff --git a/ic10emu/src/vm/object/mod.rs b/ic10emu/src/vm/object/mod.rs index 2dd70d2..3b1b29e 100644 --- a/ic10emu/src/vm/object/mod.rs +++ b/ic10emu/src/vm/object/mod.rs @@ -1,38 +1,55 @@ use macro_rules_attribute::derive; +use serde::{Deserialize, Serialize}; mod macros; mod traits; mod stationpedia; +mod errors; -use macros::ObjectInterface; use traits::*; +use crate::{device::SlotType, grammar::SlotLogicType}; + pub type ObjectID = u32; pub type BoxedObject = Box>; - -#[derive(ObjectInterface!)] -#[custom(implements(Object { Memory }))] -pub struct Generic { - mem1: Vec, - - #[custom(object_id)] - id: ObjectID, - - mem2: Vec, +#[derive(Debug, Default, Clone, Serialize, Deserialize)] +pub struct Name { + pub value: String, + pub hash: i32, } -impl Memory for Generic { - fn get_memory(&self) -> &Vec { - &self.mem1 +#[allow(unused)] +impl Name { + pub fn new(name: &str) -> Self { + Name { + value: name.to_owned(), + hash: const_crc32::crc32(name.as_bytes()) as i32, + } } - - fn set_memory(&mut self, index: usize, val: f64) { - self.mem2[index] = val; - } - - fn size(&self) -> usize { - self.mem1.len() + 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, 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, Default, Clone, Serialize, Deserialize)] +pub struct Slot { + pub typ: SlotType, + pub enabeled_logic: Vec, + pub occupant: Option, +} diff --git a/ic10emu/src/vm/object/stationpedia.rs b/ic10emu/src/vm/object/stationpedia.rs index 861f708..b55bbf6 100644 --- a/ic10emu/src/vm/object/stationpedia.rs +++ b/ic10emu/src/vm/object/stationpedia.rs @@ -7,11 +7,13 @@ use crate::vm::object::BoxedObject; include!(concat!(env!("OUT_DIR"), "/stationpedia_prefabs.rs")); +#[allow(unused)] pub enum PrefabTemplate { Hash(i32), Name(String), } +#[allow(unused)] pub fn object_from_prefab_template(template: &PrefabTemplate) -> Option { let prefab = match template { PrefabTemplate::Hash(hash) => StationpediaPrefab::from_repr(*hash), @@ -24,3 +26,5 @@ pub fn object_from_prefab_template(template: &PrefabTemplate) -> Option None, } } + +mod generic; diff --git a/ic10emu/src/vm/object/stationpedia/generic.rs b/ic10emu/src/vm/object/stationpedia/generic.rs new file mode 100644 index 0000000..b922005 --- /dev/null +++ b/ic10emu/src/vm/object/stationpedia/generic.rs @@ -0,0 +1,323 @@ +use crate::{ + grammar::{LogicType, SlotLogicType}, + vm::{ + object::{ + errors::{LogicError, MemoryError}, + macros::ObjectInterface, + traits::*, + FieldType, LogicField, Name, ObjectID, Slot, + }, + VM, + }, +}; +use macro_rules_attribute::derive; +use std::{collections::BTreeMap, usize}; +use strum::IntoEnumIterator; + +pub trait GWLogicable { + fn name(&self) -> &Option; + fn fields(&self) -> &BTreeMap; + fn fields_mut(&mut self) -> &mut BTreeMap; + fn slots(&self) -> &Vec; + fn slots_mut(&mut self) -> &mut Vec; +} +macro_rules! GWLogicable { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWLogicable for $struct { + fn name(&self) -> &Option { + &self.name + } + fn fields(&self) -> &BTreeMap { + &self.fields + } + fn fields_mut(&mut self) -> &mut BTreeMap { + &mut self.fields + } + fn slots(&self) -> &Vec { + &self.slots + } + fn slots_mut(&mut self) -> &mut Vec { + &mut self.slots + } + } + }; +} +pub trait GWMemory { + fn memory_size(&self) -> usize; +} +macro_rules! GWMemory { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWMemory for $struct { + fn memory_size(&self) -> usize { + self.memory.len() + } + } + }; +} + +pub trait GWMemoryReadable: GWMemory { + fn memory(&self) -> &Vec; +} +macro_rules! GWMemoryReadable { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWMemoryReadable for $struct { + fn memory(&self) -> &Vec { + &self.memory + } + } + }; +} +pub trait GWMemoryWritable: GWMemory + GWMemoryReadable { + fn memory_mut(&mut self) -> &mut Vec; +} +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 trait GWDevice: GWLogicable {} +macro_rules! GWDevice { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWDevice for $struct {} + }; +} + +pub trait GWCircuitHolder: GWLogicable {} + +impl Logicable for T { + fn prefab_hash(&self) -> i32 { + self.prefab().hash + } + fn name_hash(&self) -> i32 { + self.name().as_ref().map(|name| name.hash).unwrap_or(0) + } + fn is_logic_readable(&self) -> bool { + LogicType::iter().any(|lt| self.can_logic_read(lt)) + } + fn is_logic_writeable(&self) -> bool { + LogicType::iter().any(|lt| self.can_logic_write(lt)) + } + fn can_logic_read(&self, lt: LogicType) -> bool { + self.fields() + .get(<) + .map(|field| matches!(field.field_type, FieldType::Read | FieldType::ReadWrite)) + .unwrap_or(false) + } + fn can_logic_write(&self, lt: LogicType) -> bool { + self.fields() + .get(<) + .map(|field| matches!(field.field_type, FieldType::Write | FieldType::ReadWrite)) + .unwrap_or(false) + } + fn get_logic(&self, lt: LogicType) -> Result { + self.fields() + .get(<) + .and_then(|field| match field.field_type { + FieldType::Read | FieldType::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_mut() + .get_mut(<) + .ok_or(LogicError::CantWrite(lt)) + .and_then(|field| match field.field_type { + FieldType::Write | FieldType::ReadWrite => { + field.value = value; + Ok(()) + } + _ if force => { + field.value = value; + Ok(()) + } + _ => Err(LogicError::CantWrite(lt)), + }) + } + fn slots_count(&self) -> usize { + self.slots().len() + } + fn get_slot(&self, index: usize) -> Option<&Slot> { + self.slots().get(index) + } + fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot> { + self.slots_mut().get_mut(index) + } + fn can_slot_logic_read(&self, slt: SlotLogicType, index: usize) -> bool { + self.get_slot(index) + .map(|slot| slot.enabeled_logic.contains(&slt)) + .unwrap_or(false) + } + fn get_slot_logic( + &self, + slt: SlotLogicType, + index: usize, + _vm: &VM, + ) -> Result { + self.get_slot(index) + .ok_or_else(|| LogicError::SlotIndexOutOfRange(index, self.slots().len())) + .and_then(|slot| { + if slot.enabeled_logic.contains(&slt) { + match slot.occupant { + Some(_id) => { + // FIXME: impliment by accessing VM to get occupant + Ok(0.0) + } + None => Ok(0.0), + } + } else { + Err(LogicError::CantSlotRead(slt, index)) + } + }) + } +} + +impl Memory for T { + fn memory_size(&self) -> usize { + self.memory_size() + } +} +impl MemoryReadable for T { + 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]) + } + } +} +impl MemoryWritable for T { + 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_mut()[index as usize] = val; + Ok(()) + } + } + fn clear_memory(&mut self) -> Result<(), MemoryError> { + self.memory_mut().fill(0.0); + Ok(()) + } +} + +impl Device for T {} + +#[derive(ObjectInterface!)] +#[custom(implements(Object { }))] +pub struct Generic { + #[custom(object_id)] + id: ObjectID, + #[custom(object_prefab)] + prefab: Name, +} + +#[derive(ObjectInterface!, GWLogicable!)] +#[custom(implements(Object { Logicable }))] +pub struct GenericLogicable { + #[custom(object_id)] + id: ObjectID, + #[custom(object_prefab)] + prefab: Name, + name: Option, + fields: BTreeMap, + slots: Vec, +} + +#[derive(ObjectInterface!, GWLogicable!, GWDevice!)] +#[custom(implements(Object { Logicable, Device }))] +pub struct GenericLogicableDevice { + #[custom(object_id)] + id: ObjectID, + #[custom(object_prefab)] + prefab: Name, + name: Option, + fields: BTreeMap, + slots: Vec, +} + +#[derive(ObjectInterface!, GWLogicable!, GWMemory!, GWMemoryReadable!)] +#[custom(implements(Object { Logicable, Memory, MemoryReadable }))] +pub struct GenericLogicableMemoryReadable { + #[custom(object_id)] + id: ObjectID, + #[custom(object_prefab)] + prefab: Name, + name: Option, + fields: BTreeMap, + slots: Vec, + memory: Vec, +} + +#[derive(ObjectInterface!, GWLogicable!, GWMemory!, GWMemoryReadable!, GWMemoryWritable!)] +#[custom(implements(Object { Logicable, Memory, MemoryReadable, MemoryWritable }))] +pub struct GenericLogicableMemoryReadWritable { + #[custom(object_id)] + id: ObjectID, + #[custom(object_prefab)] + prefab: Name, + name: Option, + fields: BTreeMap, + slots: Vec, + memory: Vec, +} + +#[derive(ObjectInterface!, GWLogicable!, GWDevice!, GWMemory!, GWMemoryReadable!, GWMemoryWritable!)] +#[custom(implements(Object { Logicable, Device, Memory, MemoryReadable }))] +pub struct GenericLogicableDeviceMemoryReadable { + #[custom(object_id)] + id: ObjectID, + #[custom(object_prefab)] + prefab: Name, + name: Option, + fields: BTreeMap, + slots: Vec, + memory: Vec, +} + +#[derive(ObjectInterface!, GWLogicable!, GWDevice!, GWMemory!, GWMemoryReadable!, GWMemoryWritable!)] +#[custom(implements(Object { Logicable, Device, Memory, MemoryReadable, MemoryWritable }))] +pub struct GenericLogicableDeviceMemoryReadWriteablable { + #[custom(object_id)] + id: ObjectID, + #[custom(object_prefab)] + prefab: Name, + name: Option, + fields: BTreeMap, + slots: Vec, + memory: Vec, +} diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index d71eb90..9569ec7 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -1,42 +1,52 @@ use std::fmt::Debug; -use crate::{grammar, vm::{object::{macros::tag_object_traits, ObjectID}, VM}}; +use crate::{grammar, vm::{object::{errors::{LogicError, MemoryError}, macros::tag_object_traits, ObjectID, Slot}, VM}}; tag_object_traits! { #![object_trait(Object: Debug)] pub trait Memory { - fn size(&self) -> usize; + fn memory_size(&self) -> usize; } pub trait MemoryWritable: Memory { - fn set_memory(&mut self, index: usize, val: f64); - fn clear_memory(&mut self); + fn set_memory(&mut self, index: i32, val: f64) -> Result<(), MemoryError>; + fn clear_memory(&mut self) -> Result<(), MemoryError>; } pub trait MemoryReadable: Memory { - fn get_memory(&self) -> &Vec; + fn get_memory(&self, index: i32) -> Result; } pub trait Logicable { + fn prefab_hash(&self) -> i32; + /// returns 0 if not set + fn name_hash(&self) -> i32; fn is_logic_readable(&self) -> bool; fn is_logic_writeable(&self) -> bool; - fn set_logic(&mut self, lt: grammar::LogicType, value: f64); - fn get_logic(&self, lt: grammar::LogicType) -> Option; + fn can_logic_read(&self, lt: grammar::LogicType) -> bool; + fn can_logic_write(&self, lt: grammar::LogicType) -> bool; + fn set_logic(&mut self, lt: grammar::LogicType, value: f64, force: bool) -> Result<(), LogicError>; + fn get_logic(&self, lt: grammar::LogicType) -> Result; fn slots_count(&self) -> usize; - // fn get_slot(&self, index: usize) -> Slot; - fn set_slot_logic(&mut self, slt: grammar::SlotLogicType, value: f64); - fn get_slot_logic(&self, slt: grammar::SlotLogicType) -> Option; + fn get_slot(&self, index: usize) -> Option<&Slot>; + fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot>; + fn can_slot_logic_read(&self, slt: grammar::SlotLogicType, index: usize) -> bool; + fn get_slot_logic(&self, slt: grammar::SlotLogicType, index: usize, vm: &VM) -> Result; } pub trait CircuitHolder: Logicable { fn clear_error(&mut self); fn set_error(&mut self, state: i32); fn get_logicable_from_index(&self, device: usize, vm: &VM) -> Option>; + fn get_logicable_from_index_mut(&self, device: usize, vm: &VM) -> Option>; fn get_logicable_from_id(&self, device: ObjectID, vm: &VM) -> Option>; + fn get_logicable_from_id_mut(&self, device: ObjectID, vm: &VM) -> Option>; fn get_source_code(&self) -> String; fn set_source_code(&self, code: String); + fn get_batch(&self) -> Vec>; + fn get_batch_mut(&self) -> Vec>; } pub trait SourceCode { @@ -53,6 +63,10 @@ tag_object_traits! { // fn logic_stack(&self) -> LogicStack; } + pub trait Device: Logicable { + + } + } impl Debug for dyn Object { From 5cc935b826ea4ae054744e7771f4f5a5a6af7c61 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Tue, 7 May 2024 21:59:06 -0700 Subject: [PATCH 06/50] refactor(vm) helpful codegen round 1~ --- Cargo.lock | 439 +- Cargo.toml | 4 + data/database.json | 1 + data/instruction_help_patches.json | 12 + ic10emu/Cargo.toml | 2 +- ic10emu/build.rs | 421 - ic10emu/data/Enums.json | 1 - ic10emu/data/batchmodes.txt | 4 - ic10emu/data/constants.txt | 7 - ic10emu/data/enums.txt | 475 - ic10emu/data/instruction_help_patches.json | 14 - ic10emu/data/instructions.txt | 140 - ic10emu/data/instructions_help.txt | 136 - ic10emu/data/logictypes.txt | 267 - ic10emu/data/reagentmodes.txt | 4 - ic10emu/data/slotlogictypes.txt | 27 - ic10emu/data/stationpedia.txt | 1745 --- ic10emu/src/device.rs | 8 +- ic10emu/src/errors.rs | 209 + ic10emu/src/grammar.rs | 517 +- ic10emu/src/interpreter.rs | 214 +- ic10emu/src/lib.rs | 6 +- ic10emu/src/network.rs | 1 - ic10emu/src/vm/enums/basic_enums.rs | 3717 ++++++ ic10emu/src/vm/enums/mod.rs | 3 + ic10emu/src/vm/enums/prefabs.rs | 10103 ++++++++++++++++ ic10emu/src/vm/enums/script_enums.rs | 2275 ++++ ic10emu/src/vm/instructions/enums.rs | 1076 ++ ic10emu/src/vm/instructions/mod.rs | 26 + ic10emu/src/vm/instructions/operands.rs | 302 + ic10emu/src/vm/instructions/traits.rs | 1675 +++ ic10emu/src/vm/mod.rs | 38 +- ic10emu/src/vm/object/errors.rs | 4 +- ic10emu/src/vm/object/mod.rs | 11 +- ic10emu/src/vm/object/stationpedia.rs | 8 +- ic10emu/src/vm/object/stationpedia/generic.rs | 65 +- ic10emu/src/vm/object/traits.rs | 61 +- ic10emu_wasm/build.rs | 3 +- ic10emu_wasm/src/utils.rs | 2 - ic10lsp_wasm/src/lib.rs | 4 +- xtask/Cargo.toml | 18 + xtask/src/enums.rs | 28 + xtask/src/generate.rs | 101 + xtask/src/generate/database.rs | 674 ++ xtask/src/generate/enums.rs | 397 + xtask/src/generate/instructions.rs | 216 + xtask/src/generate/utils.rs | 60 + xtask/src/main.rs | 98 +- xtask/src/stationpedia.rs | 346 + 49 files changed, 21966 insertions(+), 3999 deletions(-) create mode 100644 data/database.json create mode 100644 data/instruction_help_patches.json delete mode 100644 ic10emu/build.rs delete mode 100644 ic10emu/data/Enums.json delete mode 100644 ic10emu/data/batchmodes.txt delete mode 100644 ic10emu/data/constants.txt delete mode 100644 ic10emu/data/enums.txt delete mode 100644 ic10emu/data/instruction_help_patches.json delete mode 100644 ic10emu/data/instructions.txt delete mode 100644 ic10emu/data/instructions_help.txt delete mode 100644 ic10emu/data/logictypes.txt delete mode 100644 ic10emu/data/reagentmodes.txt delete mode 100644 ic10emu/data/slotlogictypes.txt delete mode 100644 ic10emu/data/stationpedia.txt create mode 100644 ic10emu/src/errors.rs create mode 100644 ic10emu/src/vm/enums/basic_enums.rs create mode 100644 ic10emu/src/vm/enums/mod.rs create mode 100644 ic10emu/src/vm/enums/prefabs.rs create mode 100644 ic10emu/src/vm/enums/script_enums.rs create mode 100644 ic10emu/src/vm/instructions/enums.rs create mode 100644 ic10emu/src/vm/instructions/mod.rs create mode 100644 ic10emu/src/vm/instructions/operands.rs create mode 100644 ic10emu/src/vm/instructions/traits.rs create mode 100644 xtask/src/enums.rs create mode 100644 xtask/src/generate.rs create mode 100644 xtask/src/generate/database.rs create mode 100644 xtask/src/generate/enums.rs create mode 100644 xtask/src/generate/instructions.rs create mode 100644 xtask/src/generate/utils.rs create mode 100644 xtask/src/stationpedia.rs diff --git a/Cargo.lock b/Cargo.lock index 68eb93a..ad5c605 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -156,9 +156,31 @@ 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 = "bindgen" +version = "0.64.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "log", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 1.0.109", + "which", +] [[package]] name = "bitflags" @@ -166,6 +188,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" + [[package]] name = "bumpalo" version = "3.15.4" @@ -204,6 +232,15 @@ version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -223,6 +260,17 @@ dependencies = [ "windows-targets 0.52.4", ] +[[package]] +name = "clang-sys" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" +dependencies = [ + "glob", + "libc", + "libloading", +] + [[package]] name = "clap" version = "4.5.4" @@ -263,6 +311,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" @@ -370,6 +445,26 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[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" @@ -493,6 +588,12 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + [[package]] name = "hashbrown" version = "0.12.3" @@ -529,6 +630,15 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "httparse" version = "1.8.0" @@ -649,6 +759,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" @@ -695,12 +811,40 @@ 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 = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + [[package]] name = "libc" version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +[[package]] +name = "libloading" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +dependencies = [ + "cfg-if", + "windows-targets 0.52.4", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + [[package]] name = "lock_api" version = "0.4.11" @@ -723,7 +867,7 @@ 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", @@ -746,12 +890,27 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8dd856d451cc0da70e2ef2ce95a18e39a93b7558bedf10201ad28503f918568" +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + [[package]] name = "memchr" version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.7.2" @@ -772,6 +931,26 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + [[package]] name = "num-conv" version = "0.1.0" @@ -821,6 +1000,39 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[package]] +name = "onig" +version = "6.4.0" +source = "git+https://github.com/rust-onig/rust-onig#fa90c0e97e90a056af89f183b23cd417b59ee6a2" +dependencies = [ + "bitflags 1.3.2", + "libc", + "once_cell", + "onig_sys", +] + +[[package]] +name = "onig_sys" +version = "69.8.1" +source = "git+https://github.com/rust-onig/rust-onig#fa90c0e97e90a056af89f183b23cd417b59ee6a2" +dependencies = [ + "bindgen", + "cc", + "pkg-config", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "owo-colors" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" + [[package]] name = "parking_lot" version = "0.12.1" @@ -850,6 +1062,12 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + [[package]] name = "percent-encoding" version = "2.3.1" @@ -984,6 +1202,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + [[package]] name = "powerfmt" version = "0.2.0" @@ -1056,7 +1280,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -1067,8 +1291,17 @@ checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" dependencies = [ "aho-corasick", "memchr", - "regex-automata", - "regex-syntax", + "regex-automata 0.4.6", + "regex-syntax 0.8.3", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", ] [[package]] @@ -1079,9 +1312,15 @@ checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.3", ] +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + [[package]] name = "regex-syntax" version = "0.8.3" @@ -1094,6 +1333,25 @@ version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.5.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + [[package]] name = "rustversion" version = "1.0.14" @@ -1114,9 +1372,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.197" +version = "1.0.200" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +checksum = "ddc6f9cc94d67c0e21aaf7eda3a010fd3af78ebf6e096aa6e2e13c79749cce4f" dependencies = [ "serde_derive", ] @@ -1145,9 +1403,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.197" +version = "1.0.200" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +checksum = "856f046b9400cee3c8c94ed572ecdb752444c24528c035cd35882aad6f492bcb" dependencies = [ "proc-macro2", "quote", @@ -1166,16 +1424,35 @@ dependencies = [ ] [[package]] -name = "serde_json" -version = "1.0.115" +name = "serde_ignored" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" +checksum = "a8e319a36d1b52126a0d608f24e93b2d81297091818cd70625fcf50a15d84ddf" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_json" +version = "1.0.116" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" 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" @@ -1189,9 +1466,9 @@ dependencies = [ [[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", @@ -1207,9 +1484,9 @@ 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", @@ -1217,6 +1494,21 @@ dependencies = [ "syn 2.0.57", ] +[[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 = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -1314,6 +1606,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "textwrap" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" + [[package]] name = "thiserror" version = "1.0.58" @@ -1334,6 +1632,16 @@ dependencies = [ "syn 2.0.57", ] +[[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" @@ -1517,6 +1825,46 @@ 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-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", ] [[package]] @@ -1629,6 +1977,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" @@ -1725,6 +2079,40 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + [[package]] name = "windows-core" version = "0.52.0" @@ -1871,5 +2259,20 @@ name = "xtask" version = "0.2.3" dependencies = [ "clap", + "color-eyre", + "convert_case", + "indexmap 2.2.6", + "onig", + "phf_codegen", + "regex", + "serde", + "serde_derive", + "serde_ignored", + "serde_json", + "serde_path_to_error", + "serde_with", + "textwrap", "thiserror", + "tracing", + "tracing-subscriber", ] diff --git a/Cargo.toml b/Cargo.toml index 7c969c9..fdc3b4c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,3 +12,7 @@ opt-level = "s" lto = true [profile.dev] opt-level = 1 + + +[patch.crates-io] +onig_sys = { git = "https://github.com/rust-onig/rust-onig", revision = "fa90c0e97e90a056af89f183b23cd417b59ee6a2" } diff --git a/data/database.json b/data/database.json new file mode 100644 index 0000000..58d919a --- /dev/null +++ b/data/database.json @@ -0,0 +1 @@ +{"prefabs":{"AccessCardBlack":{"prefab":{"prefabName":"AccessCardBlack","prefabHash":-1330388999,"desc":"","name":"Access Card (Black)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardBlue":{"prefab":{"prefabName":"AccessCardBlue","prefabHash":-1411327657,"desc":"","name":"Access Card (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardBrown":{"prefab":{"prefabName":"AccessCardBrown","prefabHash":1412428165,"desc":"","name":"Access Card (Brown)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardGray":{"prefab":{"prefabName":"AccessCardGray","prefabHash":-1339479035,"desc":"","name":"Access Card (Gray)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardGreen":{"prefab":{"prefabName":"AccessCardGreen","prefabHash":-374567952,"desc":"","name":"Access Card (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardKhaki":{"prefab":{"prefabName":"AccessCardKhaki","prefabHash":337035771,"desc":"","name":"Access Card (Khaki)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardOrange":{"prefab":{"prefabName":"AccessCardOrange","prefabHash":-332896929,"desc":"","name":"Access Card (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardPink":{"prefab":{"prefabName":"AccessCardPink","prefabHash":431317557,"desc":"","name":"Access Card (Pink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardPurple":{"prefab":{"prefabName":"AccessCardPurple","prefabHash":459843265,"desc":"","name":"Access Card (Purple)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardRed":{"prefab":{"prefabName":"AccessCardRed","prefabHash":-1713748313,"desc":"","name":"Access Card (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardWhite":{"prefab":{"prefabName":"AccessCardWhite","prefabHash":2079959157,"desc":"","name":"Access Card (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardYellow":{"prefab":{"prefabName":"AccessCardYellow","prefabHash":568932536,"desc":"","name":"Access Card (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"ApplianceChemistryStation":{"prefab":{"prefabName":"ApplianceChemistryStation","prefabHash":1365789392,"desc":"","name":"Chemistry Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"ApplianceDeskLampLeft":{"prefab":{"prefabName":"ApplianceDeskLampLeft","prefabHash":-1683849799,"desc":"","name":"Appliance Desk Lamp Left"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"}},"ApplianceDeskLampRight":{"prefab":{"prefabName":"ApplianceDeskLampRight","prefabHash":1174360780,"desc":"","name":"Appliance Desk Lamp Right"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"}},"ApplianceMicrowave":{"prefab":{"prefabName":"ApplianceMicrowave","prefabHash":-1136173965,"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.","name":"Microwave"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"AppliancePackagingMachine":{"prefab":{"prefabName":"AppliancePackagingMachine","prefabHash":-749191906,"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 ","name":"Basic Packaging Machine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Export","typ":"None"}]},"AppliancePaintMixer":{"prefab":{"prefabName":"AppliancePaintMixer","prefabHash":-1339716113,"desc":"","name":"Paint Mixer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"Bottle"}]},"AppliancePlantGeneticAnalyzer":{"prefab":{"prefabName":"AppliancePlantGeneticAnalyzer","prefabHash":-1303038067,"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.","name":"Plant Genetic Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Input","typ":"Tool"}]},"AppliancePlantGeneticSplicer":{"prefab":{"prefabName":"AppliancePlantGeneticSplicer","prefabHash":-1094868323,"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.","name":"Plant Genetic Splicer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Source Plant","typ":"Plant"},{"name":"Target Plant","typ":"Plant"}]},"AppliancePlantGeneticStabilizer":{"prefab":{"prefabName":"AppliancePlantGeneticStabilizer","prefabHash":871432335,"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 ","name":"Plant Genetic Stabilizer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Plant","typ":"Plant"}]},"ApplianceReagentProcessor":{"prefab":{"prefabName":"ApplianceReagentProcessor","prefabHash":1260918085,"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.","name":"Reagent Processor"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Input","typ":"None"},{"name":"Output","typ":"None"}]},"ApplianceSeedTray":{"prefab":{"prefabName":"ApplianceSeedTray","prefabHash":142831994,"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.","name":"Appliance Seed Tray"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"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"}]},"ApplianceTabletDock":{"prefab":{"prefabName":"ApplianceTabletDock","prefabHash":1853941363,"desc":"","name":"Tablet Dock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"","typ":"Tool"}]},"AutolathePrinterMod":{"prefab":{"prefabName":"AutolathePrinterMod","prefabHash":221058307,"desc":"Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Autolathe Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"Battery_Wireless_cell":{"prefab":{"prefabName":"Battery_Wireless_cell","prefabHash":-462415758,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Battery_Wireless_cell_Big":{"prefab":{"prefabName":"Battery_Wireless_cell_Big","prefabHash":-41519077,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell (Big)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"CardboardBox":{"prefab":{"prefabName":"CardboardBox","prefabHash":-1976947556,"desc":"","name":"Cardboard Box"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Storage"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"CartridgeAccessController":{"prefab":{"prefabName":"CartridgeAccessController","prefabHash":-1634532552,"desc":"","name":"Cartridge (Access Controller)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeAtmosAnalyser":{"prefab":{"prefabName":"CartridgeAtmosAnalyser","prefabHash":-1550278665,"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.","name":"Atmos Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeConfiguration":{"prefab":{"prefabName":"CartridgeConfiguration","prefabHash":-932136011,"desc":"","name":"Configuration"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeElectronicReader":{"prefab":{"prefabName":"CartridgeElectronicReader","prefabHash":-1462180176,"desc":"","name":"eReader"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeGPS":{"prefab":{"prefabName":"CartridgeGPS","prefabHash":-1957063345,"desc":"","name":"GPS"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeGuide":{"prefab":{"prefabName":"CartridgeGuide","prefabHash":872720793,"desc":"","name":"Guide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeMedicalAnalyser":{"prefab":{"prefabName":"CartridgeMedicalAnalyser","prefabHash":-1116110181,"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.","name":"Medical Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeNetworkAnalyser":{"prefab":{"prefabName":"CartridgeNetworkAnalyser","prefabHash":1606989119,"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.","name":"Network Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeOreScanner":{"prefab":{"prefabName":"CartridgeOreScanner","prefabHash":-1768732546,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet.","name":"Ore Scanner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeOreScannerColor":{"prefab":{"prefabName":"CartridgeOreScannerColor","prefabHash":1738236580,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground in different colors on the tablet.","name":"Ore Scanner (Color)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgePlantAnalyser":{"prefab":{"prefabName":"CartridgePlantAnalyser","prefabHash":1101328282,"desc":"","name":"Cartridge Plant Analyser"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeTracker":{"prefab":{"prefabName":"CartridgeTracker","prefabHash":81488783,"desc":"","name":"Tracker"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CircuitboardAdvAirlockControl":{"prefab":{"prefabName":"CircuitboardAdvAirlockControl","prefabHash":1633663176,"desc":"","name":"Advanced Airlock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardAirControl":{"prefab":{"prefabName":"CircuitboardAirControl","prefabHash":1618019559,"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. ","name":"Air Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardAirlockControl":{"prefab":{"prefabName":"CircuitboardAirlockControl","prefabHash":912176135,"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.","name":"Airlock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardCameraDisplay":{"prefab":{"prefabName":"CircuitboardCameraDisplay","prefabHash":-412104504,"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.","name":"Camera Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardDoorControl":{"prefab":{"prefabName":"CircuitboardDoorControl","prefabHash":855694771,"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.","name":"Door Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardGasDisplay":{"prefab":{"prefabName":"CircuitboardGasDisplay","prefabHash":-82343730,"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).","name":"Gas Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardGraphDisplay":{"prefab":{"prefabName":"CircuitboardGraphDisplay","prefabHash":1344368806,"desc":"","name":"Graph Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardHashDisplay":{"prefab":{"prefabName":"CircuitboardHashDisplay","prefabHash":1633074601,"desc":"","name":"Hash Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardModeControl":{"prefab":{"prefabName":"CircuitboardModeControl","prefabHash":-1134148135,"desc":"Can't decide which mode you love most? This circuit board allows you to switch any connected device between operation modes.","name":"Mode Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardPowerControl":{"prefab":{"prefabName":"CircuitboardPowerControl","prefabHash":-1923778429,"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. ","name":"Power Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardShipDisplay":{"prefab":{"prefabName":"CircuitboardShipDisplay","prefabHash":-2044446819,"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.","name":"Ship Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardSolarControl":{"prefab":{"prefabName":"CircuitboardSolarControl","prefabHash":2020180320,"desc":"Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel.","name":"Solar Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CompositeRollCover":{"prefab":{"prefabName":"CompositeRollCover","prefabHash":1228794916,"desc":"0.Operate\n1.Logic","name":"Composite Roll Cover"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"CrateMkII":{"prefab":{"prefabName":"CrateMkII","prefabHash":8709219,"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.","name":"Crate Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Storage"},"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"}]},"DecayedFood":{"prefab":{"prefabName":"DecayedFood","prefabHash":1531087544,"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","name":"Decayed Food"},"item":{"consumable":false,"ingredient":false,"maxQuantity":25.0,"slotClass":"None","sortingClass":"Default"}},"DeviceLfoVolume":{"prefab":{"prefabName":"DeviceLfoVolume","prefabHash":-1844430312,"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.","name":"Low frequency oscillator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Power","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"DeviceStepUnit":{"prefab":{"prefabName":"DeviceStepUnit","prefabHash":1762696475,"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","name":"Device Step Unit"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Power","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"DynamicAirConditioner":{"prefab":{"prefabName":"DynamicAirConditioner","prefabHash":519913639,"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.","name":"Portable Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicCrate":{"prefab":{"prefabName":"DynamicCrate","prefabHash":1941079206,"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.","name":"Dynamic Crate"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Storage"},"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"}]},"DynamicGPR":{"prefab":{"prefabName":"DynamicGPR","prefabHash":-2085885850,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicGasCanisterAir":{"prefab":{"prefabName":"DynamicGasCanisterAir","prefabHash":-1713611165,"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.","name":"Portable Gas Tank (Air)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterCarbonDioxide":{"prefab":{"prefabName":"DynamicGasCanisterCarbonDioxide","prefabHash":-322413931,"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.","name":"Portable Gas Tank (CO2)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterEmpty":{"prefab":{"prefabName":"DynamicGasCanisterEmpty","prefabHash":-1741267161,"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.","name":"Portable Gas Tank"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterFuel":{"prefab":{"prefabName":"DynamicGasCanisterFuel","prefabHash":-817051527,"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.","name":"Portable Gas Tank (Fuel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrogen":{"prefab":{"prefabName":"DynamicGasCanisterNitrogen","prefabHash":121951301,"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.","name":"Portable Gas Tank (Nitrogen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrousOxide":{"prefab":{"prefabName":"DynamicGasCanisterNitrousOxide","prefabHash":30727200,"desc":"","name":"Portable Gas Tank (Nitrous Oxide)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterOxygen":{"prefab":{"prefabName":"DynamicGasCanisterOxygen","prefabHash":1360925836,"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.","name":"Portable Gas Tank (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterPollutants":{"prefab":{"prefabName":"DynamicGasCanisterPollutants","prefabHash":396065382,"desc":"","name":"Portable Gas Tank (Pollutants)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterRocketFuel":{"prefab":{"prefabName":"DynamicGasCanisterRocketFuel","prefabHash":-8883951,"desc":"","name":"Dynamic Gas Canister Rocket Fuel"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterVolatiles":{"prefab":{"prefabName":"DynamicGasCanisterVolatiles","prefabHash":108086870,"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.","name":"Portable Gas Tank (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterWater":{"prefab":{"prefabName":"DynamicGasCanisterWater","prefabHash":197293625,"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.","name":"Portable Liquid Tank (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"LiquidCanister"}]},"DynamicGasTankAdvanced":{"prefab":{"prefabName":"DynamicGasTankAdvanced","prefabHash":-386375420,"desc":"0.Mode0\n1.Mode1","name":"Gas Tank Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasTankAdvancedOxygen":{"prefab":{"prefabName":"DynamicGasTankAdvancedOxygen","prefabHash":-1264455519,"desc":"0.Mode0\n1.Mode1","name":"Portable Gas Tank Mk II (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGenerator":{"prefab":{"prefabName":"DynamicGenerator","prefabHash":-82087220,"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.","name":"Portable Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"GasCanister"},{"name":"Battery","typ":"Battery"}]},"DynamicHydroponics":{"prefab":{"prefabName":"DynamicHydroponics","prefabHash":587726607,"desc":"","name":"Portable Hydroponics"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"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"}]},"DynamicLight":{"prefab":{"prefabName":"DynamicLight","prefabHash":-21970188,"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.","name":"Portable Light"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicLiquidCanisterEmpty":{"prefab":{"prefabName":"DynamicLiquidCanisterEmpty","prefabHash":-1939209112,"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.","name":"Portable Liquid Tank"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterEmpty":{"prefab":{"prefabName":"DynamicMKIILiquidCanisterEmpty","prefabHash":2130739600,"desc":"An empty, insulated liquid Gas Canister.","name":"Portable Liquid Tank Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterWater":{"prefab":{"prefabName":"DynamicMKIILiquidCanisterWater","prefabHash":-319510386,"desc":"An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature.","name":"Portable Liquid Tank Mk II (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicScrubber":{"prefab":{"prefabName":"DynamicScrubber","prefabHash":755048589,"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.","name":"Portable Air Scrubber"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"}]},"DynamicSkeleton":{"prefab":{"prefabName":"DynamicSkeleton","prefabHash":106953348,"desc":"","name":"Skeleton"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ElectronicPrinterMod":{"prefab":{"prefabName":"ElectronicPrinterMod","prefabHash":-311170652,"desc":"Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Electronic Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ElevatorCarrage":{"prefab":{"prefabName":"ElevatorCarrage","prefabHash":-110788403,"desc":"","name":"Elevator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"EntityChick":{"prefab":{"prefabName":"EntityChick","prefabHash":1730165908,"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.","name":"Entity Chick"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenBrown":{"prefab":{"prefabName":"EntityChickenBrown","prefabHash":334097180,"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.","name":"Entity Chicken Brown"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenWhite":{"prefab":{"prefabName":"EntityChickenWhite","prefabHash":1010807532,"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.","name":"Entity Chicken White"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBlack":{"prefab":{"prefabName":"EntityRoosterBlack","prefabHash":966959649,"desc":"This is a rooster. It is black. There is dignity in this.","name":"Entity Rooster Black"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBrown":{"prefab":{"prefabName":"EntityRoosterBrown","prefabHash":-583103395,"desc":"The common brown rooster. Don't let it hear you say that.","name":"Entity Rooster Brown"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"Fertilizer":{"prefab":{"prefabName":"Fertilizer","prefabHash":1517856652,"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. ","name":"Fertilizer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Default"}},"FireArmSMG":{"prefab":{"prefabName":"FireArmSMG","prefabHash":-86315541,"desc":"0.Single\n1.Auto","name":"Fire Arm SMG"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"slots":[{"name":"","typ":"Magazine"}]},"Flag_ODA_10m":{"prefab":{"prefabName":"Flag_ODA_10m","prefabHash":1845441951,"desc":"","name":"Flag (ODA 10m)"},"structure":{"smallGrid":true}},"Flag_ODA_4m":{"prefab":{"prefabName":"Flag_ODA_4m","prefabHash":1159126354,"desc":"","name":"Flag (ODA 4m)"},"structure":{"smallGrid":true}},"Flag_ODA_6m":{"prefab":{"prefabName":"Flag_ODA_6m","prefabHash":1998634960,"desc":"","name":"Flag (ODA 6m)"},"structure":{"smallGrid":true}},"Flag_ODA_8m":{"prefab":{"prefabName":"Flag_ODA_8m","prefabHash":-375156130,"desc":"","name":"Flag (ODA 8m)"},"structure":{"smallGrid":true}},"FlareGun":{"prefab":{"prefabName":"FlareGun","prefabHash":118685786,"desc":"","name":"Flare Gun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Magazine","typ":"Flare"},{"name":"","typ":"Blocked"}]},"H2Combustor":{"prefab":{"prefabName":"H2Combustor","prefabHash":1840108251,"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.","name":"H2 Combustor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Pipe","Output"],["Power","None"]],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"Handgun":{"prefab":{"prefabName":"Handgun","prefabHash":247238062,"desc":"","name":"Handgun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"slots":[{"name":"Magazine","typ":"Magazine"}]},"HandgunMagazine":{"prefab":{"prefabName":"HandgunMagazine","prefabHash":1254383185,"desc":"","name":"Handgun Magazine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Magazine","sortingClass":"Default"}},"HumanSkull":{"prefab":{"prefabName":"HumanSkull","prefabHash":-857713709,"desc":"","name":"Human Skull"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ImGuiCircuitboardAirlockControl":{"prefab":{"prefabName":"ImGuiCircuitboardAirlockControl","prefabHash":-73796547,"desc":"","name":"Airlock (Experimental)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"ItemActiveVent":{"prefab":{"prefabName":"ItemActiveVent","prefabHash":-842048328,"desc":"When constructed, this kit places an Active Vent on any support structure.","name":"Kit (Active Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemAdhesiveInsulation":{"prefab":{"prefabName":"ItemAdhesiveInsulation","prefabHash":1871048978,"desc":"","name":"Adhesive Insulation"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemAdvancedTablet":{"prefab":{"prefabName":"ItemAdvancedTablet","prefabHash":1722785341,"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","name":"Advanced Tablet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read","SoundAlert":"ReadWrite","Volume":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"},{"name":"Cartridge1","typ":"Cartridge"},{"name":"Programmable Chip","typ":"ProgrammableChip"}]},"ItemAlienMushroom":{"prefab":{"prefabName":"ItemAlienMushroom","prefabHash":176446172,"desc":"","name":"Alien Mushroom"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Default"}},"ItemAmmoBox":{"prefab":{"prefabName":"ItemAmmoBox","prefabHash":-9559091,"desc":"","name":"Ammo Box"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemAngleGrinder":{"prefab":{"prefabName":"ItemAngleGrinder","prefabHash":201215010,"desc":"Angles-be-gone with the trusty angle grinder.","name":"Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemArcWelder":{"prefab":{"prefabName":"ItemArcWelder","prefabHash":1385062886,"desc":"","name":"Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemAreaPowerControl":{"prefab":{"prefabName":"ItemAreaPowerControl","prefabHash":1757673317,"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.","name":"Kit (Power Controller)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemAstroloyIngot":{"prefab":{"prefabName":"ItemAstroloyIngot","prefabHash":412924554,"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.","name":"Ingot (Astroloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Astroloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemAstroloySheets":{"prefab":{"prefabName":"ItemAstroloySheets","prefabHash":-1662476145,"desc":"","name":"Astroloy Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemAuthoringTool":{"prefab":{"prefabName":"ItemAuthoringTool","prefabHash":789015045,"desc":"","name":"Authoring Tool"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemAuthoringToolRocketNetwork":{"prefab":{"prefabName":"ItemAuthoringToolRocketNetwork","prefabHash":-1731627004,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemBasketBall":{"prefab":{"prefabName":"ItemBasketBall","prefabHash":-1262580790,"desc":"","name":"Basket Ball"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemBatteryCell":{"prefab":{"prefabName":"ItemBatteryCell","prefabHash":700133157,"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.","name":"Battery Cell (Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCellLarge":{"prefab":{"prefabName":"ItemBatteryCellLarge","prefabHash":-459827268,"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","name":"Battery Cell (Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCellNuclear":{"prefab":{"prefabName":"ItemBatteryCellNuclear","prefabHash":544617306,"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.","name":"Battery Cell (Nuclear)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCharger":{"prefab":{"prefabName":"ItemBatteryCharger","prefabHash":-1866880307,"desc":"This kit produces a 5-slot Kit (Battery Charger).","name":"Kit (Battery Charger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemBatteryChargerSmall":{"prefab":{"prefabName":"ItemBatteryChargerSmall","prefabHash":1008295833,"desc":"","name":"Battery Charger Small"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemBeacon":{"prefab":{"prefabName":"ItemBeacon","prefabHash":-869869491,"desc":"","name":"Tracking Beacon"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemBiomass":{"prefab":{"prefabName":"ItemBiomass","prefabHash":-831480639,"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).","name":"Biomass"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100.0,"reagents":{"Biomass":1.0},"slotClass":"Ore","sortingClass":"Resources"}},"ItemBreadLoaf":{"prefab":{"prefabName":"ItemBreadLoaf","prefabHash":893514943,"desc":"","name":"Bread Loaf"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCableAnalyser":{"prefab":{"prefabName":"ItemCableAnalyser","prefabHash":-1792787349,"desc":"","name":"Kit (Cable Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemCableCoil":{"prefab":{"prefabName":"ItemCableCoil","prefabHash":-466050668,"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).","name":"Cable Coil"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Tool","sortingClass":"Resources"}},"ItemCableCoilHeavy":{"prefab":{"prefabName":"ItemCableCoilHeavy","prefabHash":2060134443,"desc":"Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW.","name":"Cable Coil (Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Tool","sortingClass":"Resources"}},"ItemCableFuse":{"prefab":{"prefabName":"ItemCableFuse","prefabHash":195442047,"desc":"","name":"Kit (Cable Fuses)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Resources"}},"ItemCannedCondensedMilk":{"prefab":{"prefabName":"ItemCannedCondensedMilk","prefabHash":-2104175091,"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.","name":"Canned Condensed Milk"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCannedEdamame":{"prefab":{"prefabName":"ItemCannedEdamame","prefabHash":-999714082,"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.","name":"Canned Edamame"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCannedMushroom":{"prefab":{"prefabName":"ItemCannedMushroom","prefabHash":-1344601965,"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.","name":"Canned Mushroom"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCannedPowderedEggs":{"prefab":{"prefabName":"ItemCannedPowderedEggs","prefabHash":1161510063,"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.","name":"Canned Powdered Eggs"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCannedRicePudding":{"prefab":{"prefabName":"ItemCannedRicePudding","prefabHash":-1185552595,"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.","name":"Canned Rice Pudding"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCerealBar":{"prefab":{"prefabName":"ItemCerealBar","prefabHash":791746840,"desc":"Sustains, without decay. If only all our relationships were so well balanced.","name":"Cereal Bar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCharcoal":{"prefab":{"prefabName":"ItemCharcoal","prefabHash":252561409,"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.","name":"Charcoal"},"item":{"consumable":false,"ingredient":true,"maxQuantity":200.0,"reagents":{"Carbon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemChemLightBlue":{"prefab":{"prefabName":"ItemChemLightBlue","prefabHash":-772542081,"desc":"A safe and slightly rave-some source of blue light. Snap to activate.","name":"Chem Light (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightGreen":{"prefab":{"prefabName":"ItemChemLightGreen","prefabHash":-597479390,"desc":"Enliven the dreariest, airless rock with this glowy green light. Snap to activate.","name":"Chem Light (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightRed":{"prefab":{"prefabName":"ItemChemLightRed","prefabHash":-525810132,"desc":"A red glowstick. Snap to activate. Then reach for the lasers.","name":"Chem Light (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightWhite":{"prefab":{"prefabName":"ItemChemLightWhite","prefabHash":1312166823,"desc":"Snap the glowstick to activate a pale radiance that keeps the darkness at bay.","name":"Chem Light (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightYellow":{"prefab":{"prefabName":"ItemChemLightYellow","prefabHash":1224819963,"desc":"Dispel the darkness with this yellow glowstick.","name":"Chem Light (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemCoalOre":{"prefab":{"prefabName":"ItemCoalOre","prefabHash":1724793494,"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).","name":"Ore (Coal)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Hydrocarbon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCobaltOre":{"prefab":{"prefabName":"ItemCobaltOre","prefabHash":-983091249,"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.","name":"Ore (Cobalt)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Cobalt":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCoffeeMug":{"prefab":{"prefabName":"ItemCoffeeMug","prefabHash":1800622698,"desc":"","name":"Coffee Mug"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemConstantanIngot":{"prefab":{"prefabName":"ItemConstantanIngot","prefabHash":1058547521,"desc":"","name":"Ingot (Constantan)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Constantan":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemCookedCondensedMilk":{"prefab":{"prefabName":"ItemCookedCondensedMilk","prefabHash":1715917521,"desc":"A high-nutrient cooked food, which can be canned.","name":"Condensed Milk"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Milk":100.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedCorn":{"prefab":{"prefabName":"ItemCookedCorn","prefabHash":1344773148,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Corn"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Corn":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedMushroom":{"prefab":{"prefabName":"ItemCookedMushroom","prefabHash":-1076892658,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Mushroom"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Mushroom":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedPowderedEggs":{"prefab":{"prefabName":"ItemCookedPowderedEggs","prefabHash":-1712264413,"desc":"A high-nutrient cooked food, which can be canned.","name":"Powdered Eggs"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Egg":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedPumpkin":{"prefab":{"prefabName":"ItemCookedPumpkin","prefabHash":1849281546,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Pumpkin"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Pumpkin":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedRice":{"prefab":{"prefabName":"ItemCookedRice","prefabHash":2013539020,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Rice"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Rice":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedSoybean":{"prefab":{"prefabName":"ItemCookedSoybean","prefabHash":1353449022,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Soybean"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Soy":5.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedTomato":{"prefab":{"prefabName":"ItemCookedTomato","prefabHash":-709086714,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Tomato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Tomato":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCopperIngot":{"prefab":{"prefabName":"ItemCopperIngot","prefabHash":-404336834,"desc":"Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items.","name":"Ingot (Copper)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Copper":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemCopperOre":{"prefab":{"prefabName":"ItemCopperOre","prefabHash":-707307845,"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.","name":"Ore (Copper)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Copper":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCorn":{"prefab":{"prefabName":"ItemCorn","prefabHash":258339687,"desc":"A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light.","name":"Corn"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Corn":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemCornSoup":{"prefab":{"prefabName":"ItemCornSoup","prefabHash":545034114,"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.","name":"Corn Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCreditCard":{"prefab":{"prefabName":"ItemCreditCard","prefabHash":-1756772618,"desc":"","name":"Credit Card"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"CreditCard","sortingClass":"Tools"}},"ItemCropHay":{"prefab":{"prefabName":"ItemCropHay","prefabHash":215486157,"desc":"","name":"Hay"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"None","sortingClass":"Default"}},"ItemCrowbar":{"prefab":{"prefabName":"ItemCrowbar","prefabHash":856108234,"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.","name":"Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemDataDisk":{"prefab":{"prefabName":"ItemDataDisk","prefabHash":1005843700,"desc":"","name":"Data Disk"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"DataDisk","sortingClass":"Default"}},"ItemDirtCanister":{"prefab":{"prefabName":"ItemDirtCanister","prefabHash":902565329,"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.","name":"Dirt Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Ore","sortingClass":"Default"}},"ItemDirtyOre":{"prefab":{"prefabName":"ItemDirtyOre","prefabHash":-1234745580,"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. ","name":"Dirty Ore"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Ores"}},"ItemDisposableBatteryCharger":{"prefab":{"prefabName":"ItemDisposableBatteryCharger","prefabHash":-2124435700,"desc":"Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery.","name":"Disposable Battery Charger"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemDrill":{"prefab":{"prefabName":"ItemDrill","prefabHash":2009673399,"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.","name":"Hand Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemDuctTape":{"prefab":{"prefabName":"ItemDuctTape","prefabHash":-1943134693,"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.","name":"Duct Tape"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemDynamicAirCon":{"prefab":{"prefabName":"ItemDynamicAirCon","prefabHash":1072914031,"desc":"","name":"Kit (Portable Air Conditioner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemDynamicScrubber":{"prefab":{"prefabName":"ItemDynamicScrubber","prefabHash":-971920158,"desc":"","name":"Kit (Portable Scrubber)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemEggCarton":{"prefab":{"prefabName":"ItemEggCarton","prefabHash":-524289310,"desc":"Within, eggs reside in mysterious, marmoreal silence.","name":"Egg Carton"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Storage"},"slots":[{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"}]},"ItemElectronicParts":{"prefab":{"prefabName":"ItemElectronicParts","prefabHash":731250882,"desc":"","name":"Electronic Parts"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Resources"}},"ItemElectrumIngot":{"prefab":{"prefabName":"ItemElectrumIngot","prefabHash":502280180,"desc":"","name":"Ingot (Electrum)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Electrum":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemEmergencyAngleGrinder":{"prefab":{"prefabName":"ItemEmergencyAngleGrinder","prefabHash":-351438780,"desc":"","name":"Emergency Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyArcWelder":{"prefab":{"prefabName":"ItemEmergencyArcWelder","prefabHash":-1056029600,"desc":"","name":"Emergency Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyCrowbar":{"prefab":{"prefabName":"ItemEmergencyCrowbar","prefabHash":976699731,"desc":"","name":"Emergency Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyDrill":{"prefab":{"prefabName":"ItemEmergencyDrill","prefabHash":-2052458905,"desc":"","name":"Emergency Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyEvaSuit":{"prefab":{"prefabName":"ItemEmergencyEvaSuit","prefabHash":1791306431,"desc":"","name":"Emergency Eva Suit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Suit","sortingClass":"Clothing"},"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"}]},"ItemEmergencyPickaxe":{"prefab":{"prefabName":"ItemEmergencyPickaxe","prefabHash":-1061510408,"desc":"","name":"Emergency Pickaxe"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyScrewdriver":{"prefab":{"prefabName":"ItemEmergencyScrewdriver","prefabHash":266099983,"desc":"","name":"Emergency Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencySpaceHelmet":{"prefab":{"prefabName":"ItemEmergencySpaceHelmet","prefabHash":205916793,"desc":"","name":"Emergency Space Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemEmergencyToolBelt":{"prefab":{"prefabName":"ItemEmergencyToolBelt","prefabHash":1661941301,"desc":"","name":"Emergency Tool Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemEmergencyWireCutters":{"prefab":{"prefabName":"ItemEmergencyWireCutters","prefabHash":2102803952,"desc":"","name":"Emergency Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyWrench":{"prefab":{"prefabName":"ItemEmergencyWrench","prefabHash":162553030,"desc":"","name":"Emergency Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmptyCan":{"prefab":{"prefabName":"ItemEmptyCan","prefabHash":1013818348,"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.","name":"Empty Can"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Steel":1.0},"slotClass":"None","sortingClass":"Default"}},"ItemEvaSuit":{"prefab":{"prefabName":"ItemEvaSuit","prefabHash":1677018918,"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.","name":"Eva Suit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Suit","sortingClass":"Clothing"},"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"}]},"ItemExplosive":{"prefab":{"prefabName":"ItemExplosive","prefabHash":235361649,"desc":"","name":"Remote Explosive"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemFern":{"prefab":{"prefabName":"ItemFern","prefabHash":892110467,"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.","name":"Fern"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100.0,"reagents":{"Fenoxitone":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemFertilizedEgg":{"prefab":{"prefabName":"ItemFertilizedEgg","prefabHash":-383972371,"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.","name":"Egg"},"item":{"consumable":false,"ingredient":true,"maxQuantity":1.0,"reagents":{"Egg":1.0},"slotClass":"Egg","sortingClass":"Resources"}},"ItemFilterFern":{"prefab":{"prefabName":"ItemFilterFern","prefabHash":266654416,"desc":"A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant.","name":"Darga Fern"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlagSmall":{"prefab":{"prefabName":"ItemFlagSmall","prefabHash":2011191088,"desc":"","name":"Kit (Small Flag)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemFlashingLight":{"prefab":{"prefabName":"ItemFlashingLight","prefabHash":-2107840748,"desc":"","name":"Kit (Flashing Light)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemFlashlight":{"prefab":{"prefabName":"ItemFlashlight","prefabHash":-838472102,"desc":"A flashlight with a narrow and wide beam options.","name":"Flashlight"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Low Power","1":"High Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemFlour":{"prefab":{"prefabName":"ItemFlour","prefabHash":-665995854,"desc":"Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven).","name":"Flour"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Flour":50.0},"slotClass":"None","sortingClass":"Resources"}},"ItemFlowerBlue":{"prefab":{"prefabName":"ItemFlowerBlue","prefabHash":-1573623434,"desc":"","name":"Flower (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerGreen":{"prefab":{"prefabName":"ItemFlowerGreen","prefabHash":-1513337058,"desc":"","name":"Flower (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerOrange":{"prefab":{"prefabName":"ItemFlowerOrange","prefabHash":-1411986716,"desc":"","name":"Flower (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerRed":{"prefab":{"prefabName":"ItemFlowerRed","prefabHash":-81376085,"desc":"","name":"Flower (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerYellow":{"prefab":{"prefabName":"ItemFlowerYellow","prefabHash":1712822019,"desc":"","name":"Flower (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFrenchFries":{"prefab":{"prefabName":"ItemFrenchFries","prefabHash":-57608687,"desc":"Because space would suck without 'em.","name":"Canned French Fries"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemFries":{"prefab":{"prefabName":"ItemFries","prefabHash":1371786091,"desc":"","name":"French Fries"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemGasCanisterCarbonDioxide":{"prefab":{"prefabName":"ItemGasCanisterCarbonDioxide","prefabHash":-767685874,"desc":"","name":"Canister (CO2)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterEmpty":{"prefab":{"prefabName":"ItemGasCanisterEmpty","prefabHash":42280099,"desc":"","name":"Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterFuel":{"prefab":{"prefabName":"ItemGasCanisterFuel","prefabHash":-1014695176,"desc":"","name":"Canister (Fuel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterNitrogen":{"prefab":{"prefabName":"ItemGasCanisterNitrogen","prefabHash":2145068424,"desc":"","name":"Canister (Nitrogen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterNitrousOxide":{"prefab":{"prefabName":"ItemGasCanisterNitrousOxide","prefabHash":-1712153401,"desc":"","name":"Gas Canister (Sleeping)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterOxygen":{"prefab":{"prefabName":"ItemGasCanisterOxygen","prefabHash":-1152261938,"desc":"","name":"Canister (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterPollutants":{"prefab":{"prefabName":"ItemGasCanisterPollutants","prefabHash":-1552586384,"desc":"","name":"Canister (Pollutants)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterSmart":{"prefab":{"prefabName":"ItemGasCanisterSmart","prefabHash":-668314371,"desc":"0.Mode0\n1.Mode1","name":"Gas Canister (Smart)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterVolatiles":{"prefab":{"prefabName":"ItemGasCanisterVolatiles","prefabHash":-472094806,"desc":"","name":"Canister (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterWater":{"prefab":{"prefabName":"ItemGasCanisterWater","prefabHash":-1854861891,"desc":"","name":"Liquid Canister (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemGasFilterCarbonDioxide":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxide","prefabHash":1635000764,"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.","name":"Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideInfinite":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideInfinite","prefabHash":-185568964,"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.","name":"Catalytic Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideL":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideL","prefabHash":1876847024,"desc":"","name":"Heavy Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideM":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideM","prefabHash":416897318,"desc":"","name":"Medium Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogen":{"prefab":{"prefabName":"ItemGasFilterNitrogen","prefabHash":632853248,"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.","name":"Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenInfinite":{"prefab":{"prefabName":"ItemGasFilterNitrogenInfinite","prefabHash":152751131,"desc":"A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenL":{"prefab":{"prefabName":"ItemGasFilterNitrogenL","prefabHash":-1387439451,"desc":"","name":"Heavy Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenM":{"prefab":{"prefabName":"ItemGasFilterNitrogenM","prefabHash":-632657357,"desc":"","name":"Medium Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxide":{"prefab":{"prefabName":"ItemGasFilterNitrousOxide","prefabHash":-1247674305,"desc":"","name":"Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideInfinite":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideInfinite","prefabHash":-123934842,"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.","name":"Catalytic Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideL":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideL","prefabHash":465267979,"desc":"","name":"Heavy Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideM":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideM","prefabHash":1824284061,"desc":"","name":"Medium Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygen":{"prefab":{"prefabName":"ItemGasFilterOxygen","prefabHash":-721824748,"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).","name":"Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenInfinite":{"prefab":{"prefabName":"ItemGasFilterOxygenInfinite","prefabHash":-1055451111,"desc":"A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenL":{"prefab":{"prefabName":"ItemGasFilterOxygenL","prefabHash":-1217998945,"desc":"","name":"Heavy Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenM":{"prefab":{"prefabName":"ItemGasFilterOxygenM","prefabHash":-1067319543,"desc":"","name":"Medium Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutants":{"prefab":{"prefabName":"ItemGasFilterPollutants","prefabHash":1915566057,"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.","name":"Filter (Pollutant)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsInfinite":{"prefab":{"prefabName":"ItemGasFilterPollutantsInfinite","prefabHash":-503738105,"desc":"A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsL":{"prefab":{"prefabName":"ItemGasFilterPollutantsL","prefabHash":1959564765,"desc":"","name":"Heavy Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsM":{"prefab":{"prefabName":"ItemGasFilterPollutantsM","prefabHash":63677771,"desc":"","name":"Medium Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatiles":{"prefab":{"prefabName":"ItemGasFilterVolatiles","prefabHash":15011598,"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.","name":"Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesInfinite":{"prefab":{"prefabName":"ItemGasFilterVolatilesInfinite","prefabHash":-1916176068,"desc":"A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesL":{"prefab":{"prefabName":"ItemGasFilterVolatilesL","prefabHash":1255156286,"desc":"","name":"Heavy Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesM":{"prefab":{"prefabName":"ItemGasFilterVolatilesM","prefabHash":1037507240,"desc":"","name":"Medium Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWater":{"prefab":{"prefabName":"ItemGasFilterWater","prefabHash":-1993197973,"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)","name":"Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterInfinite":{"prefab":{"prefabName":"ItemGasFilterWaterInfinite","prefabHash":-1678456554,"desc":"A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterL":{"prefab":{"prefabName":"ItemGasFilterWaterL","prefabHash":2004969680,"desc":"","name":"Heavy Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterM":{"prefab":{"prefabName":"ItemGasFilterWaterM","prefabHash":8804422,"desc":"","name":"Medium Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasSensor":{"prefab":{"prefabName":"ItemGasSensor","prefabHash":1717593480,"desc":"","name":"Kit (Gas Sensor)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemGasTankStorage":{"prefab":{"prefabName":"ItemGasTankStorage","prefabHash":-2113012215,"desc":"This kit produces a Kit (Canister Storage) for refilling a Canister.","name":"Kit (Canister Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemGlassSheets":{"prefab":{"prefabName":"ItemGlassSheets","prefabHash":1588896491,"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.","name":"Glass Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemGlasses":{"prefab":{"prefabName":"ItemGlasses","prefabHash":-1068925231,"desc":"","name":"Glasses"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Glasses","sortingClass":"Clothing"}},"ItemGoldIngot":{"prefab":{"prefabName":"ItemGoldIngot","prefabHash":226410516,"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. ","name":"Ingot (Gold)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Gold":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemGoldOre":{"prefab":{"prefabName":"ItemGoldOre","prefabHash":-1348105509,"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.","name":"Ore (Gold)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Gold":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemGrenade":{"prefab":{"prefabName":"ItemGrenade","prefabHash":1544275894,"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.","name":"Hand Grenade"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemHEMDroidRepairKit":{"prefab":{"prefabName":"ItemHEMDroidRepairKit","prefabHash":470636008,"desc":"Repairs damaged HEM-Droids to full health.","name":"HEMDroid Repair Kit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Food"}},"ItemHardBackpack":{"prefab":{"prefabName":"ItemHardBackpack","prefabHash":374891127,"desc":"This backpack can be useful when you are working inside and don't need to fly around.","name":"Hardsuit Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemHardJetpack":{"prefab":{"prefabName":"ItemHardJetpack","prefabHash":-412551656,"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.","name":"Hardsuit Jetpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemHardMiningBackPack":{"prefab":{"prefabName":"ItemHardMiningBackPack","prefabHash":900366130,"desc":"","name":"Hard Mining Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"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"}]},"ItemHardSuit":{"prefab":{"prefabName":"ItemHardSuit","prefabHash":-1758310454,"desc":"Connects to Logic Transmitter","name":"Hardsuit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Suit","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"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"}],"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"ItemHardsuitHelmet":{"prefab":{"prefabName":"ItemHardsuitHelmet","prefabHash":-84573099,"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.","name":"Hardsuit Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemHastelloyIngot":{"prefab":{"prefabName":"ItemHastelloyIngot","prefabHash":1579842814,"desc":"","name":"Ingot (Hastelloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Hastelloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemHat":{"prefab":{"prefabName":"ItemHat","prefabHash":299189339,"desc":"As the name suggests, this is a hat.","name":"Hat"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"}},"ItemHighVolumeGasCanisterEmpty":{"prefab":{"prefabName":"ItemHighVolumeGasCanisterEmpty","prefabHash":998653377,"desc":"","name":"High Volume Gas Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemHorticultureBelt":{"prefab":{"prefabName":"ItemHorticultureBelt","prefabHash":-1117581553,"desc":"","name":"Horticulture Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemHydroponicTray":{"prefab":{"prefabName":"ItemHydroponicTray","prefabHash":-1193543727,"desc":"This kits creates a Hydroponics Tray for growing various plants.","name":"Kit (Hydroponic Tray)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemIce":{"prefab":{"prefabName":"ItemIce","prefabHash":1217489948,"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.","name":"Ice (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemIgniter":{"prefab":{"prefabName":"ItemIgniter","prefabHash":890106742,"desc":"This kit creates an Kit (Igniter) unit.","name":"Kit (Igniter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemInconelIngot":{"prefab":{"prefabName":"ItemInconelIngot","prefabHash":-787796599,"desc":"","name":"Ingot (Inconel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Inconel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemInsulation":{"prefab":{"prefabName":"ItemInsulation","prefabHash":897176943,"desc":"Mysterious in the extreme, the function of this item is lost to the ages.","name":"Insulation"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Resources"}},"ItemIntegratedCircuit10":{"prefab":{"prefabName":"ItemIntegratedCircuit10","prefabHash":-744098481,"desc":"","name":"Integrated Circuit (IC10)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"ProgrammableChip","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"LineNumber":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"memory":{"memoryAccess":"ReadWrite","memorySize":512}},"ItemInvarIngot":{"prefab":{"prefabName":"ItemInvarIngot","prefabHash":-297990285,"desc":"","name":"Ingot (Invar)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Invar":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemIronFrames":{"prefab":{"prefabName":"ItemIronFrames","prefabHash":1225836666,"desc":"","name":"Iron Frames"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemIronIngot":{"prefab":{"prefabName":"ItemIronIngot","prefabHash":-1301215609,"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.","name":"Ingot (Iron)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Iron":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemIronOre":{"prefab":{"prefabName":"ItemIronOre","prefabHash":1758427767,"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.","name":"Ore (Iron)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Iron":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemIronSheets":{"prefab":{"prefabName":"ItemIronSheets","prefabHash":-487378546,"desc":"","name":"Iron Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemJetpackBasic":{"prefab":{"prefabName":"ItemJetpackBasic","prefabHash":1969189000,"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.","name":"Jetpack Basic"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemKitAIMeE":{"prefab":{"prefabName":"ItemKitAIMeE","prefabHash":496830914,"desc":"","name":"Kit (AIMeE)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAccessBridge":{"prefab":{"prefabName":"ItemKitAccessBridge","prefabHash":513258369,"desc":"","name":"Kit (Access Bridge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedComposter":{"prefab":{"prefabName":"ItemKitAdvancedComposter","prefabHash":-1431998347,"desc":"","name":"Kit (Advanced Composter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedFurnace":{"prefab":{"prefabName":"ItemKitAdvancedFurnace","prefabHash":-616758353,"desc":"","name":"Kit (Advanced Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedPackagingMachine":{"prefab":{"prefabName":"ItemKitAdvancedPackagingMachine","prefabHash":-598545233,"desc":"","name":"Kit (Advanced Packaging Machine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAirlock":{"prefab":{"prefabName":"ItemKitAirlock","prefabHash":964043875,"desc":"","name":"Kit (Airlock)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAirlockGate":{"prefab":{"prefabName":"ItemKitAirlockGate","prefabHash":682546947,"desc":"","name":"Kit (Hangar Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitArcFurnace":{"prefab":{"prefabName":"ItemKitArcFurnace","prefabHash":-98995857,"desc":"","name":"Kit (Arc Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAtmospherics":{"prefab":{"prefabName":"ItemKitAtmospherics","prefabHash":1222286371,"desc":"","name":"Kit (Atmospherics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutoMinerSmall":{"prefab":{"prefabName":"ItemKitAutoMinerSmall","prefabHash":1668815415,"desc":"","name":"Kit (Autominer Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutolathe":{"prefab":{"prefabName":"ItemKitAutolathe","prefabHash":-1753893214,"desc":"","name":"Kit (Autolathe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutomatedOven":{"prefab":{"prefabName":"ItemKitAutomatedOven","prefabHash":-1931958659,"desc":"","name":"Kit (Automated Oven)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBasket":{"prefab":{"prefabName":"ItemKitBasket","prefabHash":148305004,"desc":"","name":"Kit (Basket)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBattery":{"prefab":{"prefabName":"ItemKitBattery","prefabHash":1406656973,"desc":"","name":"Kit (Battery)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBatteryLarge":{"prefab":{"prefabName":"ItemKitBatteryLarge","prefabHash":-21225041,"desc":"","name":"Kit (Battery Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBeacon":{"prefab":{"prefabName":"ItemKitBeacon","prefabHash":249073136,"desc":"","name":"Kit (Beacon)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBeds":{"prefab":{"prefabName":"ItemKitBeds","prefabHash":-1241256797,"desc":"","name":"Kit (Beds)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBlastDoor":{"prefab":{"prefabName":"ItemKitBlastDoor","prefabHash":-1755116240,"desc":"","name":"Kit (Blast Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCentrifuge":{"prefab":{"prefabName":"ItemKitCentrifuge","prefabHash":578182956,"desc":"","name":"Kit (Centrifuge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChairs":{"prefab":{"prefabName":"ItemKitChairs","prefabHash":-1394008073,"desc":"","name":"Kit (Chairs)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChute":{"prefab":{"prefabName":"ItemKitChute","prefabHash":1025254665,"desc":"","name":"Kit (Basic Chutes)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChuteUmbilical":{"prefab":{"prefabName":"ItemKitChuteUmbilical","prefabHash":-876560854,"desc":"","name":"Kit (Chute Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCompositeCladding":{"prefab":{"prefabName":"ItemKitCompositeCladding","prefabHash":-1470820996,"desc":"","name":"Kit (Cladding)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCompositeFloorGrating":{"prefab":{"prefabName":"ItemKitCompositeFloorGrating","prefabHash":1182412869,"desc":"","name":"Kit (Floor Grating)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitComputer":{"prefab":{"prefabName":"ItemKitComputer","prefabHash":1990225489,"desc":"","name":"Kit (Computer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitConsole":{"prefab":{"prefabName":"ItemKitConsole","prefabHash":-1241851179,"desc":"","name":"Kit (Consoles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrate":{"prefab":{"prefabName":"ItemKitCrate","prefabHash":429365598,"desc":"","name":"Kit (Crate)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrateMkII":{"prefab":{"prefabName":"ItemKitCrateMkII","prefabHash":-1585956426,"desc":"","name":"Kit (Crate Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrateMount":{"prefab":{"prefabName":"ItemKitCrateMount","prefabHash":-551612946,"desc":"","name":"Kit (Container Mount)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCryoTube":{"prefab":{"prefabName":"ItemKitCryoTube","prefabHash":-545234195,"desc":"","name":"Kit (Cryo Tube)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDeepMiner":{"prefab":{"prefabName":"ItemKitDeepMiner","prefabHash":-1935075707,"desc":"","name":"Kit (Deep Miner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDockingPort":{"prefab":{"prefabName":"ItemKitDockingPort","prefabHash":77421200,"desc":"","name":"Kit (Docking Port)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDoor":{"prefab":{"prefabName":"ItemKitDoor","prefabHash":168615924,"desc":"","name":"Kit (Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDrinkingFountain":{"prefab":{"prefabName":"ItemKitDrinkingFountain","prefabHash":-1743663875,"desc":"","name":"Kit (Drinking Fountain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicCanister":{"prefab":{"prefabName":"ItemKitDynamicCanister","prefabHash":-1061945368,"desc":"","name":"Kit (Portable Gas Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicGasTankAdvanced":{"prefab":{"prefabName":"ItemKitDynamicGasTankAdvanced","prefabHash":1533501495,"desc":"","name":"Kit (Portable Gas Tank Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitDynamicGenerator":{"prefab":{"prefabName":"ItemKitDynamicGenerator","prefabHash":-732720413,"desc":"","name":"Kit (Portable Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicHydroponics":{"prefab":{"prefabName":"ItemKitDynamicHydroponics","prefabHash":-1861154222,"desc":"","name":"Kit (Portable Hydroponics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicLiquidCanister":{"prefab":{"prefabName":"ItemKitDynamicLiquidCanister","prefabHash":375541286,"desc":"","name":"Kit (Portable Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicMKIILiquidCanister":{"prefab":{"prefabName":"ItemKitDynamicMKIILiquidCanister","prefabHash":-638019974,"desc":"","name":"Kit (Portable Liquid Tank Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElectricUmbilical":{"prefab":{"prefabName":"ItemKitElectricUmbilical","prefabHash":1603046970,"desc":"","name":"Kit (Power Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElectronicsPrinter":{"prefab":{"prefabName":"ItemKitElectronicsPrinter","prefabHash":-1181922382,"desc":"","name":"Kit (Electronics Printer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElevator":{"prefab":{"prefabName":"ItemKitElevator","prefabHash":-945806652,"desc":"","name":"Kit (Elevator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineLarge":{"prefab":{"prefabName":"ItemKitEngineLarge","prefabHash":755302726,"desc":"","name":"Kit (Engine Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineMedium":{"prefab":{"prefabName":"ItemKitEngineMedium","prefabHash":1969312177,"desc":"","name":"Kit (Engine Medium)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineSmall":{"prefab":{"prefabName":"ItemKitEngineSmall","prefabHash":19645163,"desc":"","name":"Kit (Engine Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEvaporationChamber":{"prefab":{"prefabName":"ItemKitEvaporationChamber","prefabHash":1587787610,"desc":"","name":"Kit (Phase Change Device)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFlagODA":{"prefab":{"prefabName":"ItemKitFlagODA","prefabHash":1701764190,"desc":"","name":"Kit (ODA Flag)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitFridgeBig":{"prefab":{"prefabName":"ItemKitFridgeBig","prefabHash":-1168199498,"desc":"","name":"Kit (Fridge Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFridgeSmall":{"prefab":{"prefabName":"ItemKitFridgeSmall","prefabHash":1661226524,"desc":"","name":"Kit (Fridge Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFurnace":{"prefab":{"prefabName":"ItemKitFurnace","prefabHash":-806743925,"desc":"","name":"Kit (Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFurniture":{"prefab":{"prefabName":"ItemKitFurniture","prefabHash":1162905029,"desc":"","name":"Kit (Furniture)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFuselage":{"prefab":{"prefabName":"ItemKitFuselage","prefabHash":-366262681,"desc":"","name":"Kit (Fuselage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGasGenerator":{"prefab":{"prefabName":"ItemKitGasGenerator","prefabHash":377745425,"desc":"","name":"Kit (Gas Fuel Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGasUmbilical":{"prefab":{"prefabName":"ItemKitGasUmbilical","prefabHash":-1867280568,"desc":"","name":"Kit (Gas Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGovernedGasRocketEngine":{"prefab":{"prefabName":"ItemKitGovernedGasRocketEngine","prefabHash":206848766,"desc":"","name":"Kit (Pumped Gas Rocket Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGroundTelescope":{"prefab":{"prefabName":"ItemKitGroundTelescope","prefabHash":-2140672772,"desc":"","name":"Kit (Telescope)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGrowLight":{"prefab":{"prefabName":"ItemKitGrowLight","prefabHash":341030083,"desc":"","name":"Kit (Grow Light)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHarvie":{"prefab":{"prefabName":"ItemKitHarvie","prefabHash":-1022693454,"desc":"","name":"Kit (Harvie)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHeatExchanger":{"prefab":{"prefabName":"ItemKitHeatExchanger","prefabHash":-1710540039,"desc":"","name":"Kit Heat Exchanger"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHorizontalAutoMiner":{"prefab":{"prefabName":"ItemKitHorizontalAutoMiner","prefabHash":844391171,"desc":"","name":"Kit (OGRE)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydraulicPipeBender":{"prefab":{"prefabName":"ItemKitHydraulicPipeBender","prefabHash":-2098556089,"desc":"","name":"Kit (Hydraulic Pipe Bender)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydroponicAutomated":{"prefab":{"prefabName":"ItemKitHydroponicAutomated","prefabHash":-927931558,"desc":"","name":"Kit (Automated Hydroponics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydroponicStation":{"prefab":{"prefabName":"ItemKitHydroponicStation","prefabHash":2057179799,"desc":"","name":"Kit (Hydroponic Station)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitIceCrusher":{"prefab":{"prefabName":"ItemKitIceCrusher","prefabHash":288111533,"desc":"","name":"Kit (Ice Crusher)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedLiquidPipe":{"prefab":{"prefabName":"ItemKitInsulatedLiquidPipe","prefabHash":2067655311,"desc":"","name":"Kit (Insulated Liquid Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipe":{"prefab":{"prefabName":"ItemKitInsulatedPipe","prefabHash":452636699,"desc":"","name":"Kit (Insulated Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipeUtility":{"prefab":{"prefabName":"ItemKitInsulatedPipeUtility","prefabHash":-27284803,"desc":"","name":"Kit (Insulated Pipe Utility Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipeUtilityLiquid":{"prefab":{"prefabName":"ItemKitInsulatedPipeUtilityLiquid","prefabHash":-1831558953,"desc":"","name":"Kit (Insulated Pipe Utility Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInteriorDoors":{"prefab":{"prefabName":"ItemKitInteriorDoors","prefabHash":1935945891,"desc":"","name":"Kit (Interior Doors)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLadder":{"prefab":{"prefabName":"ItemKitLadder","prefabHash":489494578,"desc":"","name":"Kit (Ladder)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadAtmos":{"prefab":{"prefabName":"ItemKitLandingPadAtmos","prefabHash":1817007843,"desc":"","name":"Kit (Landing Pad Atmospherics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadBasic":{"prefab":{"prefabName":"ItemKitLandingPadBasic","prefabHash":293581318,"desc":"","name":"Kit (Landing Pad Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadWaypoint":{"prefab":{"prefabName":"ItemKitLandingPadWaypoint","prefabHash":-1267511065,"desc":"","name":"Kit (Landing Pad Runway)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeDirectHeatExchanger":{"prefab":{"prefabName":"ItemKitLargeDirectHeatExchanger","prefabHash":450164077,"desc":"","name":"Kit (Large Direct Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeExtendableRadiator":{"prefab":{"prefabName":"ItemKitLargeExtendableRadiator","prefabHash":847430620,"desc":"","name":"Kit (Large Extendable Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeSatelliteDish":{"prefab":{"prefabName":"ItemKitLargeSatelliteDish","prefabHash":-2039971217,"desc":"","name":"Kit (Large Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLaunchMount":{"prefab":{"prefabName":"ItemKitLaunchMount","prefabHash":-1854167549,"desc":"","name":"Kit (Launch Mount)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLaunchTower":{"prefab":{"prefabName":"ItemKitLaunchTower","prefabHash":-174523552,"desc":"","name":"Kit (Rocket Launch Tower)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidRegulator":{"prefab":{"prefabName":"ItemKitLiquidRegulator","prefabHash":1951126161,"desc":"","name":"Kit (Liquid Regulator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTank":{"prefab":{"prefabName":"ItemKitLiquidTank","prefabHash":-799849305,"desc":"","name":"Kit (Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTankInsulated":{"prefab":{"prefabName":"ItemKitLiquidTankInsulated","prefabHash":617773453,"desc":"","name":"Kit (Insulated Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTurboVolumePump":{"prefab":{"prefabName":"ItemKitLiquidTurboVolumePump","prefabHash":-1805020897,"desc":"","name":"Kit (Turbo Volume Pump - Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidUmbilical":{"prefab":{"prefabName":"ItemKitLiquidUmbilical","prefabHash":1571996765,"desc":"","name":"Kit (Liquid Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLocker":{"prefab":{"prefabName":"ItemKitLocker","prefabHash":882301399,"desc":"","name":"Kit (Locker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicCircuit":{"prefab":{"prefabName":"ItemKitLogicCircuit","prefabHash":1512322581,"desc":"","name":"Kit (IC Housing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicInputOutput":{"prefab":{"prefabName":"ItemKitLogicInputOutput","prefabHash":1997293610,"desc":"","name":"Kit (Logic I/O)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicMemory":{"prefab":{"prefabName":"ItemKitLogicMemory","prefabHash":-2098214189,"desc":"","name":"Kit (Logic Memory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicProcessor":{"prefab":{"prefabName":"ItemKitLogicProcessor","prefabHash":220644373,"desc":"","name":"Kit (Logic Processor)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicSwitch":{"prefab":{"prefabName":"ItemKitLogicSwitch","prefabHash":124499454,"desc":"","name":"Kit (Logic Switch)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicTransmitter":{"prefab":{"prefabName":"ItemKitLogicTransmitter","prefabHash":1005397063,"desc":"","name":"Kit (Logic Transmitter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitMotherShipCore":{"prefab":{"prefabName":"ItemKitMotherShipCore","prefabHash":-344968335,"desc":"","name":"Kit (Mothership)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitMusicMachines":{"prefab":{"prefabName":"ItemKitMusicMachines","prefabHash":-2038889137,"desc":"","name":"Kit (Music Machines)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPassiveLargeRadiatorGas":{"prefab":{"prefabName":"ItemKitPassiveLargeRadiatorGas","prefabHash":-1752768283,"desc":"","name":"Kit (Medium Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitPassiveLargeRadiatorLiquid":{"prefab":{"prefabName":"ItemKitPassiveLargeRadiatorLiquid","prefabHash":1453961898,"desc":"","name":"Kit (Medium Radiator Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPassthroughHeatExchanger":{"prefab":{"prefabName":"ItemKitPassthroughHeatExchanger","prefabHash":636112787,"desc":"","name":"Kit (CounterFlow Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPictureFrame":{"prefab":{"prefabName":"ItemKitPictureFrame","prefabHash":-2062364768,"desc":"","name":"Kit Picture Frame"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipe":{"prefab":{"prefabName":"ItemKitPipe","prefabHash":-1619793705,"desc":"","name":"Kit (Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeLiquid":{"prefab":{"prefabName":"ItemKitPipeLiquid","prefabHash":-1166461357,"desc":"","name":"Kit (Liquid Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeOrgan":{"prefab":{"prefabName":"ItemKitPipeOrgan","prefabHash":-827125300,"desc":"","name":"Kit (Pipe Organ)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeRadiator":{"prefab":{"prefabName":"ItemKitPipeRadiator","prefabHash":920411066,"desc":"","name":"Kit (Pipe Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitPipeRadiatorLiquid":{"prefab":{"prefabName":"ItemKitPipeRadiatorLiquid","prefabHash":-1697302609,"desc":"","name":"Kit (Pipe Radiator Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitPipeUtility":{"prefab":{"prefabName":"ItemKitPipeUtility","prefabHash":1934508338,"desc":"","name":"Kit (Pipe Utility Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeUtilityLiquid":{"prefab":{"prefabName":"ItemKitPipeUtilityLiquid","prefabHash":595478589,"desc":"","name":"Kit (Pipe Utility Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPlanter":{"prefab":{"prefabName":"ItemKitPlanter","prefabHash":119096484,"desc":"","name":"Kit (Planter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPortablesConnector":{"prefab":{"prefabName":"ItemKitPortablesConnector","prefabHash":1041148999,"desc":"","name":"Kit (Portables Connector)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPowerTransmitter":{"prefab":{"prefabName":"ItemKitPowerTransmitter","prefabHash":291368213,"desc":"","name":"Kit (Power Transmitter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPowerTransmitterOmni":{"prefab":{"prefabName":"ItemKitPowerTransmitterOmni","prefabHash":-831211676,"desc":"","name":"Kit (Power Transmitter Omni)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPoweredVent":{"prefab":{"prefabName":"ItemKitPoweredVent","prefabHash":2015439334,"desc":"","name":"Kit (Powered Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressureFedGasEngine":{"prefab":{"prefabName":"ItemKitPressureFedGasEngine","prefabHash":-121514007,"desc":"","name":"Kit (Pressure Fed Gas Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressureFedLiquidEngine":{"prefab":{"prefabName":"ItemKitPressureFedLiquidEngine","prefabHash":-99091572,"desc":"","name":"Kit (Pressure Fed Liquid Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressurePlate":{"prefab":{"prefabName":"ItemKitPressurePlate","prefabHash":123504691,"desc":"","name":"Kit (Trigger Plate)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPumpedLiquidEngine":{"prefab":{"prefabName":"ItemKitPumpedLiquidEngine","prefabHash":1921918951,"desc":"","name":"Kit (Pumped Liquid Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRailing":{"prefab":{"prefabName":"ItemKitRailing","prefabHash":750176282,"desc":"","name":"Kit (Railing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRecycler":{"prefab":{"prefabName":"ItemKitRecycler","prefabHash":849148192,"desc":"","name":"Kit (Recycler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRegulator":{"prefab":{"prefabName":"ItemKitRegulator","prefabHash":1181371795,"desc":"","name":"Kit (Pressure Regulator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitReinforcedWindows":{"prefab":{"prefabName":"ItemKitReinforcedWindows","prefabHash":1459985302,"desc":"","name":"Kit (Reinforced Windows)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitResearchMachine":{"prefab":{"prefabName":"ItemKitResearchMachine","prefabHash":724776762,"desc":"","name":"Kit Research Machine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitRespawnPointWallMounted":{"prefab":{"prefabName":"ItemKitRespawnPointWallMounted","prefabHash":1574688481,"desc":"","name":"Kit (Respawn)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketAvionics":{"prefab":{"prefabName":"ItemKitRocketAvionics","prefabHash":1396305045,"desc":"","name":"Kit (Avionics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketBattery":{"prefab":{"prefabName":"ItemKitRocketBattery","prefabHash":-314072139,"desc":"","name":"Kit (Rocket Battery)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCargoStorage":{"prefab":{"prefabName":"ItemKitRocketCargoStorage","prefabHash":479850239,"desc":"","name":"Kit (Rocket Cargo Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCelestialTracker":{"prefab":{"prefabName":"ItemKitRocketCelestialTracker","prefabHash":-303008602,"desc":"","name":"Kit (Rocket Celestial Tracker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCircuitHousing":{"prefab":{"prefabName":"ItemKitRocketCircuitHousing","prefabHash":721251202,"desc":"","name":"Kit (Rocket Circuit Housing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketDatalink":{"prefab":{"prefabName":"ItemKitRocketDatalink","prefabHash":-1256996603,"desc":"","name":"Kit (Rocket Datalink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketGasFuelTank":{"prefab":{"prefabName":"ItemKitRocketGasFuelTank","prefabHash":-1629347579,"desc":"","name":"Kit (Rocket Gas Fuel Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketLiquidFuelTank":{"prefab":{"prefabName":"ItemKitRocketLiquidFuelTank","prefabHash":2032027950,"desc":"","name":"Kit (Rocket Liquid Fuel Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketManufactory":{"prefab":{"prefabName":"ItemKitRocketManufactory","prefabHash":-636127860,"desc":"","name":"Kit (Rocket Manufactory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketMiner":{"prefab":{"prefabName":"ItemKitRocketMiner","prefabHash":-867969909,"desc":"","name":"Kit (Rocket Miner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketScanner":{"prefab":{"prefabName":"ItemKitRocketScanner","prefabHash":1753647154,"desc":"","name":"Kit (Rocket Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketTransformerSmall":{"prefab":{"prefabName":"ItemKitRocketTransformerSmall","prefabHash":-932335800,"desc":"","name":"Kit (Transformer Small (Rocket))"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRoverFrame":{"prefab":{"prefabName":"ItemKitRoverFrame","prefabHash":1827215803,"desc":"","name":"Kit (Rover Frame)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRoverMKI":{"prefab":{"prefabName":"ItemKitRoverMKI","prefabHash":197243872,"desc":"","name":"Kit (Rover Mk I)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSDBHopper":{"prefab":{"prefabName":"ItemKitSDBHopper","prefabHash":323957548,"desc":"","name":"Kit (SDB Hopper)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSatelliteDish":{"prefab":{"prefabName":"ItemKitSatelliteDish","prefabHash":178422810,"desc":"","name":"Kit (Medium Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSecurityPrinter":{"prefab":{"prefabName":"ItemKitSecurityPrinter","prefabHash":578078533,"desc":"","name":"Kit (Security Printer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSensor":{"prefab":{"prefabName":"ItemKitSensor","prefabHash":-1776897113,"desc":"","name":"Kit (Sensors)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitShower":{"prefab":{"prefabName":"ItemKitShower","prefabHash":735858725,"desc":"","name":"Kit (Shower)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSign":{"prefab":{"prefabName":"ItemKitSign","prefabHash":529996327,"desc":"","name":"Kit (Sign)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSleeper":{"prefab":{"prefabName":"ItemKitSleeper","prefabHash":326752036,"desc":"","name":"Kit (Sleeper)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSmallDirectHeatExchanger":{"prefab":{"prefabName":"ItemKitSmallDirectHeatExchanger","prefabHash":-1332682164,"desc":"","name":"Kit (Small Direct Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitSmallSatelliteDish":{"prefab":{"prefabName":"ItemKitSmallSatelliteDish","prefabHash":1960952220,"desc":"","name":"Kit (Small Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolarPanel":{"prefab":{"prefabName":"ItemKitSolarPanel","prefabHash":-1924492105,"desc":"","name":"Kit (Solar Panel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolarPanelBasic":{"prefab":{"prefabName":"ItemKitSolarPanelBasic","prefabHash":844961456,"desc":"","name":"Kit (Solar Panel Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitSolarPanelBasicReinforced":{"prefab":{"prefabName":"ItemKitSolarPanelBasicReinforced","prefabHash":-528695432,"desc":"","name":"Kit (Solar Panel Basic Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitSolarPanelReinforced":{"prefab":{"prefabName":"ItemKitSolarPanelReinforced","prefabHash":-364868685,"desc":"","name":"Kit (Solar Panel Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolidGenerator":{"prefab":{"prefabName":"ItemKitSolidGenerator","prefabHash":1293995736,"desc":"","name":"Kit (Solid Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSorter":{"prefab":{"prefabName":"ItemKitSorter","prefabHash":969522478,"desc":"","name":"Kit (Sorter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSpeaker":{"prefab":{"prefabName":"ItemKitSpeaker","prefabHash":-126038526,"desc":"","name":"Kit (Speaker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStacker":{"prefab":{"prefabName":"ItemKitStacker","prefabHash":1013244511,"desc":"","name":"Kit (Stacker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStairs":{"prefab":{"prefabName":"ItemKitStairs","prefabHash":170878959,"desc":"","name":"Kit (Stairs)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStairwell":{"prefab":{"prefabName":"ItemKitStairwell","prefabHash":-1868555784,"desc":"","name":"Kit (Stairwell)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStandardChute":{"prefab":{"prefabName":"ItemKitStandardChute","prefabHash":2133035682,"desc":"","name":"Kit (Powered Chutes)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStirlingEngine":{"prefab":{"prefabName":"ItemKitStirlingEngine","prefabHash":-1821571150,"desc":"","name":"Kit (Stirling Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSuitStorage":{"prefab":{"prefabName":"ItemKitSuitStorage","prefabHash":1088892825,"desc":"","name":"Kit (Suit Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTables":{"prefab":{"prefabName":"ItemKitTables","prefabHash":-1361598922,"desc":"","name":"Kit (Tables)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTank":{"prefab":{"prefabName":"ItemKitTank","prefabHash":771439840,"desc":"","name":"Kit (Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTankInsulated":{"prefab":{"prefabName":"ItemKitTankInsulated","prefabHash":1021053608,"desc":"","name":"Kit (Tank Insulated)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitToolManufactory":{"prefab":{"prefabName":"ItemKitToolManufactory","prefabHash":529137748,"desc":"","name":"Kit (Tool Manufactory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTransformer":{"prefab":{"prefabName":"ItemKitTransformer","prefabHash":-453039435,"desc":"","name":"Kit (Transformer Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTransformerSmall":{"prefab":{"prefabName":"ItemKitTransformerSmall","prefabHash":665194284,"desc":"","name":"Kit (Transformer Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTurbineGenerator":{"prefab":{"prefabName":"ItemKitTurbineGenerator","prefabHash":-1590715731,"desc":"","name":"Kit (Turbine Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTurboVolumePump":{"prefab":{"prefabName":"ItemKitTurboVolumePump","prefabHash":-1248429712,"desc":"","name":"Kit (Turbo Volume Pump - Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitUprightWindTurbine":{"prefab":{"prefabName":"ItemKitUprightWindTurbine","prefabHash":-1798044015,"desc":"","name":"Kit (Upright Wind Turbine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitVendingMachine":{"prefab":{"prefabName":"ItemKitVendingMachine","prefabHash":-2038384332,"desc":"","name":"Kit (Vending Machine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitVendingMachineRefrigerated":{"prefab":{"prefabName":"ItemKitVendingMachineRefrigerated","prefabHash":-1867508561,"desc":"","name":"Kit (Vending Machine Refrigerated)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWall":{"prefab":{"prefabName":"ItemKitWall","prefabHash":-1826855889,"desc":"","name":"Kit (Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallArch":{"prefab":{"prefabName":"ItemKitWallArch","prefabHash":1625214531,"desc":"","name":"Kit (Arched Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallFlat":{"prefab":{"prefabName":"ItemKitWallFlat","prefabHash":-846838195,"desc":"","name":"Kit (Flat Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallGeometry":{"prefab":{"prefabName":"ItemKitWallGeometry","prefabHash":-784733231,"desc":"","name":"Kit (Geometric Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallIron":{"prefab":{"prefabName":"ItemKitWallIron","prefabHash":-524546923,"desc":"","name":"Kit (Iron Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallPadded":{"prefab":{"prefabName":"ItemKitWallPadded","prefabHash":-821868990,"desc":"","name":"Kit (Padded Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWaterBottleFiller":{"prefab":{"prefabName":"ItemKitWaterBottleFiller","prefabHash":159886536,"desc":"","name":"Kit (Water Bottle Filler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWaterPurifier":{"prefab":{"prefabName":"ItemKitWaterPurifier","prefabHash":611181283,"desc":"","name":"Kit (Water Purifier)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWeatherStation":{"prefab":{"prefabName":"ItemKitWeatherStation","prefabHash":337505889,"desc":"","name":"Kit (Weather Station)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitWindTurbine":{"prefab":{"prefabName":"ItemKitWindTurbine","prefabHash":-868916503,"desc":"","name":"Kit (Wind Turbine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWindowShutter":{"prefab":{"prefabName":"ItemKitWindowShutter","prefabHash":1779979754,"desc":"","name":"Kit (Window Shutter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemLabeller":{"prefab":{"prefabName":"ItemLabeller","prefabHash":-743968726,"desc":"A labeller lets you set names and values on a variety of devices and structures, including Console and Logic.","name":"Labeller"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemLaptop":{"prefab":{"prefabName":"ItemLaptop","prefabHash":141535121,"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","name":"Laptop"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","PositionX":"Read","PositionY":"Read","PositionZ":"Read","Power":"Read","PressureExternal":"Read","ReferenceId":"Read","TemperatureExternal":"Read"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"},{"name":"Battery","typ":"Battery"},{"name":"Motherboard","typ":"Motherboard"}]},"ItemLeadIngot":{"prefab":{"prefabName":"ItemLeadIngot","prefabHash":2134647745,"desc":"","name":"Ingot (Lead)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Lead":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemLeadOre":{"prefab":{"prefabName":"ItemLeadOre","prefabHash":-190236170,"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.","name":"Ore (Lead)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Lead":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemLightSword":{"prefab":{"prefabName":"ItemLightSword","prefabHash":1949076595,"desc":"A charming, if useless, pseudo-weapon. (Creative only.)","name":"Light Sword"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidCanisterEmpty":{"prefab":{"prefabName":"ItemLiquidCanisterEmpty","prefabHash":-185207387,"desc":"","name":"Liquid Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemLiquidCanisterSmart":{"prefab":{"prefabName":"ItemLiquidCanisterSmart","prefabHash":777684475,"desc":"0.Mode0\n1.Mode1","name":"Liquid Canister (Smart)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemLiquidDrain":{"prefab":{"prefabName":"ItemLiquidDrain","prefabHash":2036225202,"desc":"","name":"Kit (Liquid Drain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidPipeAnalyzer":{"prefab":{"prefabName":"ItemLiquidPipeAnalyzer","prefabHash":226055671,"desc":"","name":"Kit (Liquid Pipe Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidPipeHeater":{"prefab":{"prefabName":"ItemLiquidPipeHeater","prefabHash":-248475032,"desc":"Creates a Pipe Heater (Liquid).","name":"Pipe Heater Kit (Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidPipeValve":{"prefab":{"prefabName":"ItemLiquidPipeValve","prefabHash":-2126113312,"desc":"This kit creates a Liquid Valve.","name":"Kit (Liquid Pipe Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidPipeVolumePump":{"prefab":{"prefabName":"ItemLiquidPipeVolumePump","prefabHash":-2106280569,"desc":"","name":"Kit (Liquid Volume Pump)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidTankStorage":{"prefab":{"prefabName":"ItemLiquidTankStorage","prefabHash":2037427578,"desc":"This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister.","name":"Kit (Liquid Canister Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemMKIIAngleGrinder":{"prefab":{"prefabName":"ItemMKIIAngleGrinder","prefabHash":240174650,"desc":"Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure.","name":"Mk II Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIArcWelder":{"prefab":{"prefabName":"ItemMKIIArcWelder","prefabHash":-2061979347,"desc":"","name":"Mk II Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIICrowbar":{"prefab":{"prefabName":"ItemMKIICrowbar","prefabHash":1440775434,"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.","name":"Mk II Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIDrill":{"prefab":{"prefabName":"ItemMKIIDrill","prefabHash":324791548,"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.","name":"Mk II Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIDuctTape":{"prefab":{"prefabName":"ItemMKIIDuctTape","prefabHash":388774906,"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.","name":"Mk II Duct Tape"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIMiningDrill":{"prefab":{"prefabName":"ItemMKIIMiningDrill","prefabHash":-1875271296,"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.","name":"Mk II Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIScrewdriver":{"prefab":{"prefabName":"ItemMKIIScrewdriver","prefabHash":-2015613246,"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.","name":"Mk II Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIWireCutters":{"prefab":{"prefabName":"ItemMKIIWireCutters","prefabHash":-178893251,"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.","name":"Mk II Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIWrench":{"prefab":{"prefabName":"ItemMKIIWrench","prefabHash":1862001680,"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.","name":"Mk II Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMarineBodyArmor":{"prefab":{"prefabName":"ItemMarineBodyArmor","prefabHash":1399098998,"desc":"","name":"Marine Armor"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Suit","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMarineHelmet":{"prefab":{"prefabName":"ItemMarineHelmet","prefabHash":1073631646,"desc":"","name":"Marine Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMilk":{"prefab":{"prefabName":"ItemMilk","prefabHash":1327248310,"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.","name":"Milk"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"Milk":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemMiningBackPack":{"prefab":{"prefabName":"ItemMiningBackPack","prefabHash":-1650383245,"desc":"","name":"Mining Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"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"}]},"ItemMiningBelt":{"prefab":{"prefabName":"ItemMiningBelt","prefabHash":-676435305,"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.","name":"Mining Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemMiningBeltMKII":{"prefab":{"prefabName":"ItemMiningBeltMKII","prefabHash":1470787934,"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. ","name":"Mining Belt MK II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"}]},"ItemMiningCharge":{"prefab":{"prefabName":"ItemMiningCharge","prefabHash":15829510,"desc":"A low cost, high yield explosive with a 10 second timer.","name":"Mining Charge"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemMiningDrill":{"prefab":{"prefabName":"ItemMiningDrill","prefabHash":1055173191,"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.'","name":"Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillHeavy":{"prefab":{"prefabName":"ItemMiningDrillHeavy","prefabHash":-1663349918,"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.","name":"Mining Drill (Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillPneumatic":{"prefab":{"prefabName":"ItemMiningDrillPneumatic","prefabHash":1258187304,"desc":"0.Default\n1.Flatten","name":"Pneumatic Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemMkIIToolbelt":{"prefab":{"prefabName":"ItemMkIIToolbelt","prefabHash":1467558064,"desc":"A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy.","name":"Tool Belt MK II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"Tool","typ":"Tool"},{"name":"Tool","typ":"Tool"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMuffin":{"prefab":{"prefabName":"ItemMuffin","prefabHash":-1864982322,"desc":"A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin.","name":"Muffin"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemMushroom":{"prefab":{"prefabName":"ItemMushroom","prefabHash":2044798572,"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.","name":"Mushroom"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Mushroom":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemNVG":{"prefab":{"prefabName":"ItemNVG","prefabHash":982514123,"desc":"","name":"Night Vision Goggles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Glasses","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemNickelIngot":{"prefab":{"prefabName":"ItemNickelIngot","prefabHash":-1406385572,"desc":"","name":"Ingot (Nickel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Nickel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemNickelOre":{"prefab":{"prefabName":"ItemNickelOre","prefabHash":1830218956,"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.","name":"Ore (Nickel)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Nickel":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemNitrice":{"prefab":{"prefabName":"ItemNitrice","prefabHash":-1499471529,"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.","name":"Ice (Nitrice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemOxite":{"prefab":{"prefabName":"ItemOxite","prefabHash":-1805394113,"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.","name":"Ice (Oxite)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPassiveVent":{"prefab":{"prefabName":"ItemPassiveVent","prefabHash":238631271,"desc":"This kit creates a Passive Vent among other variants.","name":"Passive Vent"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPassiveVentInsulated":{"prefab":{"prefabName":"ItemPassiveVentInsulated","prefabHash":-1397583760,"desc":"","name":"Kit (Insulated Passive Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPeaceLily":{"prefab":{"prefabName":"ItemPeaceLily","prefabHash":2042955224,"desc":"A fetching lily with greater resistance to cold temperatures.","name":"Peace Lily"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPickaxe":{"prefab":{"prefabName":"ItemPickaxe","prefabHash":-913649823,"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.","name":"Pickaxe"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemPillHeal":{"prefab":{"prefabName":"ItemPillHeal","prefabHash":1118069417,"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.","name":"Pill (Medical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Food"}},"ItemPillStun":{"prefab":{"prefabName":"ItemPillStun","prefabHash":418958601,"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.","name":"Pill (Paralysis)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Food"}},"ItemPipeAnalyizer":{"prefab":{"prefabName":"ItemPipeAnalyizer","prefabHash":-767597887,"desc":"This kit creates a Pipe Analyzer.","name":"Kit (Pipe Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeCowl":{"prefab":{"prefabName":"ItemPipeCowl","prefabHash":-38898376,"desc":"This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres.","name":"Pipe Cowl"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeDigitalValve":{"prefab":{"prefabName":"ItemPipeDigitalValve","prefabHash":-1532448832,"desc":"This kit creates a Digital Valve.","name":"Kit (Digital Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeGasMixer":{"prefab":{"prefabName":"ItemPipeGasMixer","prefabHash":-1134459463,"desc":"This kit creates a Gas Mixer.","name":"Kit (Gas Mixer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeHeater":{"prefab":{"prefabName":"ItemPipeHeater","prefabHash":-1751627006,"desc":"Creates a Pipe Heater (Gas).","name":"Pipe Heater Kit (Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemPipeIgniter":{"prefab":{"prefabName":"ItemPipeIgniter","prefabHash":1366030599,"desc":"","name":"Kit (Pipe Igniter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeLabel":{"prefab":{"prefabName":"ItemPipeLabel","prefabHash":391769637,"desc":"This kit creates a Pipe Label.","name":"Kit (Pipe Label)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeLiquidRadiator":{"prefab":{"prefabName":"ItemPipeLiquidRadiator","prefabHash":-906521320,"desc":"This kit creates a Liquid Pipe Convection Radiator.","name":"Kit (Liquid Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeMeter":{"prefab":{"prefabName":"ItemPipeMeter","prefabHash":1207939683,"desc":"This kit creates a Pipe Meter.","name":"Kit (Pipe Meter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeRadiator":{"prefab":{"prefabName":"ItemPipeRadiator","prefabHash":-1796655088,"desc":"This kit creates a Pipe Convection Radiator.","name":"Kit (Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeValve":{"prefab":{"prefabName":"ItemPipeValve","prefabHash":799323450,"desc":"This kit creates a Valve.","name":"Kit (Pipe Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemPipeVolumePump":{"prefab":{"prefabName":"ItemPipeVolumePump","prefabHash":-1766301997,"desc":"This kit creates a Volume Pump.","name":"Kit (Volume Pump)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPlantEndothermic_Creative":{"prefab":{"prefabName":"ItemPlantEndothermic_Creative","prefabHash":-1159179557,"desc":"","name":"Endothermic Plant Creative"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantEndothermic_Genepool1":{"prefab":{"prefabName":"ItemPlantEndothermic_Genepool1","prefabHash":851290561,"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.","name":"Winterspawn (Alpha variant)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantEndothermic_Genepool2":{"prefab":{"prefabName":"ItemPlantEndothermic_Genepool2","prefabHash":-1414203269,"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.","name":"Winterspawn (Beta variant)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantSampler":{"prefab":{"prefabName":"ItemPlantSampler","prefabHash":173023800,"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.","name":"Plant Sampler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemPlantSwitchGrass":{"prefab":{"prefabName":"ItemPlantSwitchGrass","prefabHash":-532672323,"desc":"","name":"Switch Grass"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Default"}},"ItemPlantThermogenic_Creative":{"prefab":{"prefabName":"ItemPlantThermogenic_Creative","prefabHash":-1208890208,"desc":"","name":"Thermogenic Plant Creative"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantThermogenic_Genepool1":{"prefab":{"prefabName":"ItemPlantThermogenic_Genepool1","prefabHash":-177792789,"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.","name":"Hades Flower (Alpha strain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantThermogenic_Genepool2":{"prefab":{"prefabName":"ItemPlantThermogenic_Genepool2","prefabHash":1819167057,"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.","name":"Hades Flower (Beta strain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlasticSheets":{"prefab":{"prefabName":"ItemPlasticSheets","prefabHash":662053345,"desc":"","name":"Plastic Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemPotato":{"prefab":{"prefabName":"ItemPotato","prefabHash":1929046963,"desc":" Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies.","name":"Potato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Potato":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemPotatoBaked":{"prefab":{"prefabName":"ItemPotatoBaked","prefabHash":-2111886401,"desc":"","name":"Baked Potato"},"item":{"consumable":true,"ingredient":true,"maxQuantity":1.0,"reagents":{"Potato":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemPowerConnector":{"prefab":{"prefabName":"ItemPowerConnector","prefabHash":839924019,"desc":"This kit creates a Power Connector.","name":"Kit (Power Connector)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPumpkin":{"prefab":{"prefabName":"ItemPumpkin","prefabHash":1277828144,"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.","name":"Pumpkin"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Pumpkin":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemPumpkinPie":{"prefab":{"prefabName":"ItemPumpkinPie","prefabHash":62768076,"desc":"","name":"Pumpkin Pie"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemPumpkinSoup":{"prefab":{"prefabName":"ItemPumpkinSoup","prefabHash":1277979876,"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","name":"Pumpkin Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemPureIce":{"prefab":{"prefabName":"ItemPureIce","prefabHash":-1616308158,"desc":"A frozen chunk of pure Water","name":"Pure Ice Water"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceCarbonDioxide":{"prefab":{"prefabName":"ItemPureIceCarbonDioxide","prefabHash":-1251009404,"desc":"A frozen chunk of pure Carbon Dioxide","name":"Pure Ice Carbon Dioxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceHydrogen":{"prefab":{"prefabName":"ItemPureIceHydrogen","prefabHash":944530361,"desc":"A frozen chunk of pure Hydrogen","name":"Pure Ice Hydrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidCarbonDioxide":{"prefab":{"prefabName":"ItemPureIceLiquidCarbonDioxide","prefabHash":-1715945725,"desc":"A frozen chunk of pure Liquid Carbon Dioxide","name":"Pure Ice Liquid Carbon Dioxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidHydrogen":{"prefab":{"prefabName":"ItemPureIceLiquidHydrogen","prefabHash":-1044933269,"desc":"A frozen chunk of pure Liquid Hydrogen","name":"Pure Ice Liquid Hydrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidNitrogen":{"prefab":{"prefabName":"ItemPureIceLiquidNitrogen","prefabHash":1674576569,"desc":"A frozen chunk of pure Liquid Nitrogen","name":"Pure Ice Liquid Nitrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidNitrous":{"prefab":{"prefabName":"ItemPureIceLiquidNitrous","prefabHash":1428477399,"desc":"A frozen chunk of pure Liquid Nitrous Oxide","name":"Pure Ice Liquid Nitrous"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidOxygen":{"prefab":{"prefabName":"ItemPureIceLiquidOxygen","prefabHash":541621589,"desc":"A frozen chunk of pure Liquid Oxygen","name":"Pure Ice Liquid Oxygen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidPollutant":{"prefab":{"prefabName":"ItemPureIceLiquidPollutant","prefabHash":-1748926678,"desc":"A frozen chunk of pure Liquid Pollutant","name":"Pure Ice Liquid Pollutant"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidVolatiles":{"prefab":{"prefabName":"ItemPureIceLiquidVolatiles","prefabHash":-1306628937,"desc":"A frozen chunk of pure Liquid Volatiles","name":"Pure Ice Liquid Volatiles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceNitrogen":{"prefab":{"prefabName":"ItemPureIceNitrogen","prefabHash":-1708395413,"desc":"A frozen chunk of pure Nitrogen","name":"Pure Ice Nitrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceNitrous":{"prefab":{"prefabName":"ItemPureIceNitrous","prefabHash":386754635,"desc":"A frozen chunk of pure Nitrous Oxide","name":"Pure Ice NitrousOxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceOxygen":{"prefab":{"prefabName":"ItemPureIceOxygen","prefabHash":-1150448260,"desc":"A frozen chunk of pure Oxygen","name":"Pure Ice Oxygen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIcePollutant":{"prefab":{"prefabName":"ItemPureIcePollutant","prefabHash":-1755356,"desc":"A frozen chunk of pure Pollutant","name":"Pure Ice Pollutant"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIcePollutedWater":{"prefab":{"prefabName":"ItemPureIcePollutedWater","prefabHash":-2073202179,"desc":"A frozen chunk of Polluted Water","name":"Pure Ice Polluted Water"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceSteam":{"prefab":{"prefabName":"ItemPureIceSteam","prefabHash":-874791066,"desc":"A frozen chunk of pure Steam","name":"Pure Ice Steam"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceVolatiles":{"prefab":{"prefabName":"ItemPureIceVolatiles","prefabHash":-633723719,"desc":"A frozen chunk of pure Volatiles","name":"Pure Ice Volatiles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemRTG":{"prefab":{"prefabName":"ItemRTG","prefabHash":495305053,"desc":"This kit creates that miracle of modern science, a Kit (Creative RTG).","name":"Kit (Creative RTG)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemRTGSurvival":{"prefab":{"prefabName":"ItemRTGSurvival","prefabHash":1817645803,"desc":"This kit creates a Kit (RTG).","name":"Kit (RTG)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemReagentMix":{"prefab":{"prefabName":"ItemReagentMix","prefabHash":-1641500434,"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.","name":"Reagent Mix"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ores"}},"ItemRemoteDetonator":{"prefab":{"prefabName":"ItemRemoteDetonator","prefabHash":678483886,"desc":"","name":"Remote Detonator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemResearchCapsule":{"prefab":{"prefabName":"ItemResearchCapsule","prefabHash":819096942,"desc":"","name":"Research Capsule Blue"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemResearchCapsuleGreen":{"prefab":{"prefabName":"ItemResearchCapsuleGreen","prefabHash":-1352732550,"desc":"","name":"Research Capsule Green"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemResearchCapsuleRed":{"prefab":{"prefabName":"ItemResearchCapsuleRed","prefabHash":954947943,"desc":"","name":"Research Capsule Red"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemResearchCapsuleYellow":{"prefab":{"prefabName":"ItemResearchCapsuleYellow","prefabHash":750952701,"desc":"","name":"Research Capsule Yellow"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemReusableFireExtinguisher":{"prefab":{"prefabName":"ItemReusableFireExtinguisher","prefabHash":-1773192190,"desc":"Requires a canister filled with any inert liquid to opperate.","name":"Fire Extinguisher (Reusable)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"ItemRice":{"prefab":{"prefabName":"ItemRice","prefabHash":658916791,"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.","name":"Rice"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Rice":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemRoadFlare":{"prefab":{"prefabName":"ItemRoadFlare","prefabHash":871811564,"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.","name":"Road Flare"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"Flare","sortingClass":"Default"}},"ItemRocketMiningDrillHead":{"prefab":{"prefabName":"ItemRocketMiningDrillHead","prefabHash":2109945337,"desc":"Replaceable drill head for Rocket Miner","name":"Mining-Drill Head (Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadDurable":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadDurable","prefabHash":1530764483,"desc":"","name":"Mining-Drill Head (Durable)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadHighSpeedIce":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadHighSpeedIce","prefabHash":653461728,"desc":"","name":"Mining-Drill Head (High Speed Ice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadHighSpeedMineral":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadHighSpeedMineral","prefabHash":1440678625,"desc":"","name":"Mining-Drill Head (High Speed Mineral)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadIce":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadIce","prefabHash":-380904592,"desc":"","name":"Mining-Drill Head (Ice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadLongTerm":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadLongTerm","prefabHash":-684020753,"desc":"","name":"Mining-Drill Head (Long Term)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadMineral":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadMineral","prefabHash":1083675581,"desc":"","name":"Mining-Drill Head (Mineral)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketScanningHead":{"prefab":{"prefabName":"ItemRocketScanningHead","prefabHash":-1198702771,"desc":"","name":"Rocket Scanner Head"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"ScanningHead","sortingClass":"Default"}},"ItemScanner":{"prefab":{"prefabName":"ItemScanner","prefabHash":1661270830,"desc":"A mysterious piece of technology, rumored to have Zrillian origins.","name":"Handheld Scanner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemScrewdriver":{"prefab":{"prefabName":"ItemScrewdriver","prefabHash":687940869,"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.","name":"Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemSecurityCamera":{"prefab":{"prefabName":"ItemSecurityCamera","prefabHash":-1981101032,"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.","name":"Security Camera"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemSensorLenses":{"prefab":{"prefabName":"ItemSensorLenses","prefabHash":-1176140051,"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.","name":"Sensor Lenses"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Glasses","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Sensor Processing Unit","typ":"SensorProcessingUnit"}]},"ItemSensorProcessingUnitCelestialScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitCelestialScanner","prefabHash":-1154200014,"desc":"","name":"Sensor Processing Unit (Celestial Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSensorProcessingUnitMesonScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitMesonScanner","prefabHash":-1730464583,"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.","name":"Sensor Processing Unit (T-Ray Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSensorProcessingUnitOreScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitOreScanner","prefabHash":-1219128491,"desc":"The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD.","name":"Sensor Processing Unit (Ore Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSiliconIngot":{"prefab":{"prefabName":"ItemSiliconIngot","prefabHash":-290196476,"desc":"","name":"Ingot (Silicon)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Silicon":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSiliconOre":{"prefab":{"prefabName":"ItemSiliconOre","prefabHash":1103972403,"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.","name":"Ore (Silicon)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Silicon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemSilverIngot":{"prefab":{"prefabName":"ItemSilverIngot","prefabHash":-929742000,"desc":"","name":"Ingot (Silver)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Silver":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSilverOre":{"prefab":{"prefabName":"ItemSilverOre","prefabHash":-916518678,"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.","name":"Ore (Silver)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Silver":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemSolderIngot":{"prefab":{"prefabName":"ItemSolderIngot","prefabHash":-82508479,"desc":"","name":"Ingot (Solder)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Solder":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSolidFuel":{"prefab":{"prefabName":"ItemSolidFuel","prefabHash":-365253871,"desc":"","name":"Solid Fuel (Hydrocarbon)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Hydrocarbon":1.0},"slotClass":"Ore","sortingClass":"Resources"}},"ItemSoundCartridgeBass":{"prefab":{"prefabName":"ItemSoundCartridgeBass","prefabHash":-1883441704,"desc":"","name":"Sound Cartridge Bass"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeDrums":{"prefab":{"prefabName":"ItemSoundCartridgeDrums","prefabHash":-1901500508,"desc":"","name":"Sound Cartridge Drums"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeLeads":{"prefab":{"prefabName":"ItemSoundCartridgeLeads","prefabHash":-1174735962,"desc":"","name":"Sound Cartridge Leads"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeSynth":{"prefab":{"prefabName":"ItemSoundCartridgeSynth","prefabHash":-1971419310,"desc":"","name":"Sound Cartridge Synth"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoyOil":{"prefab":{"prefabName":"ItemSoyOil","prefabHash":1387403148,"desc":"","name":"Soy Oil"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"Oil":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemSoybean":{"prefab":{"prefabName":"ItemSoybean","prefabHash":1924673028,"desc":" Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil","name":"Soybean"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100.0,"reagents":{"Soy":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemSpaceCleaner":{"prefab":{"prefabName":"ItemSpaceCleaner","prefabHash":-1737666461,"desc":"There was a time when humanity really wanted to keep space clean. That time has passed.","name":"Space Cleaner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemSpaceHelmet":{"prefab":{"prefabName":"ItemSpaceHelmet","prefabHash":714830451,"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.","name":"Space Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemSpaceIce":{"prefab":{"prefabName":"ItemSpaceIce","prefabHash":675686937,"desc":"","name":"Space Ice"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Ore","sortingClass":"Ores"}},"ItemSpaceOre":{"prefab":{"prefabName":"ItemSpaceOre","prefabHash":2131916219,"desc":"Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores.","name":"Dirty Ore"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Ore","sortingClass":"Ores"}},"ItemSpacepack":{"prefab":{"prefabName":"ItemSpacepack","prefabHash":-1260618380,"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.","name":"Spacepack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemSprayCanBlack":{"prefab":{"prefabName":"ItemSprayCanBlack","prefabHash":-688107795,"desc":"Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses.","name":"Spray Paint (Black)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanBlue":{"prefab":{"prefabName":"ItemSprayCanBlue","prefabHash":-498464883,"desc":"What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'","name":"Spray Paint (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanBrown":{"prefab":{"prefabName":"ItemSprayCanBrown","prefabHash":845176977,"desc":"In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed.","name":"Spray Paint (Brown)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanGreen":{"prefab":{"prefabName":"ItemSprayCanGreen","prefabHash":-1880941852,"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.","name":"Spray Paint (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanGrey":{"prefab":{"prefabName":"ItemSprayCanGrey","prefabHash":-1645266981,"desc":"Arguably the most popular color in the universe, grey was invented so designers had something to do.","name":"Spray Paint (Grey)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanKhaki":{"prefab":{"prefabName":"ItemSprayCanKhaki","prefabHash":1918456047,"desc":"Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode.","name":"Spray Paint (Khaki)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanOrange":{"prefab":{"prefabName":"ItemSprayCanOrange","prefabHash":-158007629,"desc":"Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove.","name":"Spray Paint (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanPink":{"prefab":{"prefabName":"ItemSprayCanPink","prefabHash":1344257263,"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.","name":"Spray Paint (Pink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanPurple":{"prefab":{"prefabName":"ItemSprayCanPurple","prefabHash":30686509,"desc":"Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong.","name":"Spray Paint (Purple)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanRed":{"prefab":{"prefabName":"ItemSprayCanRed","prefabHash":1514393921,"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.","name":"Spray Paint (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanWhite":{"prefab":{"prefabName":"ItemSprayCanWhite","prefabHash":498481505,"desc":"White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff.","name":"Spray Paint (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanYellow":{"prefab":{"prefabName":"ItemSprayCanYellow","prefabHash":995468116,"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.","name":"Spray Paint (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayGun":{"prefab":{"prefabName":"ItemSprayGun","prefabHash":1289723966,"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.","name":"Spray Gun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Spray Can","typ":"Bottle"}]},"ItemSteelFrames":{"prefab":{"prefabName":"ItemSteelFrames","prefabHash":-1448105779,"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.","name":"Steel Frames"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemSteelIngot":{"prefab":{"prefabName":"ItemSteelIngot","prefabHash":-654790771,"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.","name":"Ingot (Steel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Steel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSteelSheets":{"prefab":{"prefabName":"ItemSteelSheets","prefabHash":38555961,"desc":"An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types.","name":"Steel Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemStelliteGlassSheets":{"prefab":{"prefabName":"ItemStelliteGlassSheets","prefabHash":-2038663432,"desc":"A stronger glass substitute.","name":"Stellite Glass Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemStelliteIngot":{"prefab":{"prefabName":"ItemStelliteIngot","prefabHash":-1897868623,"desc":"","name":"Ingot (Stellite)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Stellite":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSuitModCryogenicUpgrade":{"prefab":{"prefabName":"ItemSuitModCryogenicUpgrade","prefabHash":-1274308304,"desc":"Enables suits with basic cooling functionality to work with cryogenic liquid.","name":"Cryogenic Suit Upgrade"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SuitMod","sortingClass":"Default"}},"ItemTablet":{"prefab":{"prefabName":"ItemTablet","prefabHash":-229808600,"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.","name":"Handheld Tablet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"}]},"ItemTerrainManipulator":{"prefab":{"prefabName":"ItemTerrainManipulator","prefabHash":111280987,"desc":"0.Mode0\n1.Mode1","name":"Terrain Manipulator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Dirt Canister","typ":"Ore"}]},"ItemTomato":{"prefab":{"prefabName":"ItemTomato","prefabHash":-998592080,"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.","name":"Tomato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Tomato":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemTomatoSoup":{"prefab":{"prefabName":"ItemTomatoSoup","prefabHash":688734890,"desc":"Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine.","name":"Tomato Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemToolBelt":{"prefab":{"prefabName":"ItemToolBelt","prefabHash":-355127880,"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.","name":"Tool Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemTropicalPlant":{"prefab":{"prefabName":"ItemTropicalPlant","prefabHash":-800947386,"desc":"An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants.","name":"Tropical Lily"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemUraniumOre":{"prefab":{"prefabName":"ItemUraniumOre","prefabHash":-1516581844,"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.","name":"Ore (Uranium)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Uranium":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemVolatiles":{"prefab":{"prefabName":"ItemVolatiles","prefabHash":1253102035,"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","name":"Ice (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemWallCooler":{"prefab":{"prefabName":"ItemWallCooler","prefabHash":-1567752627,"desc":"This kit creates a Wall Cooler.","name":"Kit (Wall Cooler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWallHeater":{"prefab":{"prefabName":"ItemWallHeater","prefabHash":1880134612,"desc":"This kit creates a Kit (Wall Heater).","name":"Kit (Wall Heater)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWallLight":{"prefab":{"prefabName":"ItemWallLight","prefabHash":1108423476,"desc":"This kit creates any one of ten Kit (Lights) variants.","name":"Kit (Lights)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWaspaloyIngot":{"prefab":{"prefabName":"ItemWaspaloyIngot","prefabHash":156348098,"desc":"","name":"Ingot (Waspaloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Waspaloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemWaterBottle":{"prefab":{"prefabName":"ItemWaterBottle","prefabHash":107741229,"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.","name":"Water Bottle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.5,"slotClass":"LiquidBottle","sortingClass":"Default"}},"ItemWaterPipeDigitalValve":{"prefab":{"prefabName":"ItemWaterPipeDigitalValve","prefabHash":309693520,"desc":"","name":"Kit (Liquid Digital Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWaterPipeMeter":{"prefab":{"prefabName":"ItemWaterPipeMeter","prefabHash":-90898877,"desc":"","name":"Kit (Liquid Pipe Meter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWaterWallCooler":{"prefab":{"prefabName":"ItemWaterWallCooler","prefabHash":-1721846327,"desc":"","name":"Kit (Liquid Wall Cooler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWearLamp":{"prefab":{"prefabName":"ItemWearLamp","prefabHash":-598730959,"desc":"","name":"Headlamp"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemWeldingTorch":{"prefab":{"prefabName":"ItemWeldingTorch","prefabHash":-2066892079,"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.","name":"Welding Torch"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemWheat":{"prefab":{"prefabName":"ItemWheat","prefabHash":-1057658015,"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.","name":"Wheat"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100.0,"reagents":{"Carbon":1.0},"slotClass":"Plant","sortingClass":"Default"}},"ItemWireCutters":{"prefab":{"prefabName":"ItemWireCutters","prefabHash":1535854074,"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.","name":"Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemWirelessBatteryCellExtraLarge":{"prefab":{"prefabName":"ItemWirelessBatteryCellExtraLarge","prefabHash":-504717121,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Wireless Battery Cell Extra Large"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemWreckageAirConditioner1":{"prefab":{"prefabName":"ItemWreckageAirConditioner1","prefabHash":-1826023284,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageAirConditioner2":{"prefab":{"prefabName":"ItemWreckageAirConditioner2","prefabHash":169888054,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageHydroponicsTray1":{"prefab":{"prefabName":"ItemWreckageHydroponicsTray1","prefabHash":-310178617,"desc":"","name":"Wreckage Hydroponics Tray"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageLargeExtendableRadiator01":{"prefab":{"prefabName":"ItemWreckageLargeExtendableRadiator01","prefabHash":-997763,"desc":"","name":"Wreckage Large Extendable Radiator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureRTG1":{"prefab":{"prefabName":"ItemWreckageStructureRTG1","prefabHash":391453348,"desc":"","name":"Wreckage Structure RTG"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation001":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation001","prefabHash":-834664349,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation002":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation002","prefabHash":1464424921,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation003":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation003","prefabHash":542009679,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation004":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation004","prefabHash":-1104478996,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation005":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation005","prefabHash":-919745414,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation006":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation006","prefabHash":1344576960,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation007":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation007","prefabHash":656649558,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation008":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation008","prefabHash":-1214467897,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator1":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator1","prefabHash":-1662394403,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator2":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator2","prefabHash":98602599,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator3":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator3","prefabHash":1927790321,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageWallCooler1":{"prefab":{"prefabName":"ItemWreckageWallCooler1","prefabHash":-1682930158,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageWallCooler2":{"prefab":{"prefabName":"ItemWreckageWallCooler2","prefabHash":45733800,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWrench":{"prefab":{"prefabName":"ItemWrench","prefabHash":-1886261558,"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","name":"Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"KitSDBSilo":{"prefab":{"prefabName":"KitSDBSilo","prefabHash":1932952652,"desc":"This kit creates a SDB Silo.","name":"Kit (SDB Silo)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"KitStructureCombustionCentrifuge":{"prefab":{"prefabName":"KitStructureCombustionCentrifuge","prefabHash":231903234,"desc":"","name":"Kit (Combustion Centrifuge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"KitchenTableShort":{"prefab":{"prefabName":"KitchenTableShort","prefabHash":-1427415566,"desc":"","name":"Kitchen Table (Short)"},"structure":{"smallGrid":true}},"KitchenTableSimpleShort":{"prefab":{"prefabName":"KitchenTableSimpleShort","prefabHash":-78099334,"desc":"","name":"Kitchen Table (Simple Short)"},"structure":{"smallGrid":true}},"KitchenTableSimpleTall":{"prefab":{"prefabName":"KitchenTableSimpleTall","prefabHash":-1068629349,"desc":"","name":"Kitchen Table (Simple Tall)"},"structure":{"smallGrid":true}},"KitchenTableTall":{"prefab":{"prefabName":"KitchenTableTall","prefabHash":-1386237782,"desc":"","name":"Kitchen Table (Tall)"},"structure":{"smallGrid":true}},"Lander":{"prefab":{"prefabName":"Lander","prefabHash":1605130615,"desc":"","name":"Lander"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"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"}]},"Landingpad_2x2CenterPiece01":{"prefab":{"prefabName":"Landingpad_2x2CenterPiece01","prefabHash":-1295222317,"desc":"Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors","name":"Landingpad 2x2 Center Piece"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Landingpad_BlankPiece":{"prefab":{"prefabName":"Landingpad_BlankPiece","prefabHash":912453390,"desc":"","name":"Landingpad"},"structure":{"smallGrid":true}},"Landingpad_CenterPiece01":{"prefab":{"prefabName":"Landingpad_CenterPiece01","prefabHash":1070143159,"desc":"The target point where the trader shuttle will land. Requires a clear view of the sky.","name":"Landingpad Center"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"modes":{"0":"None","1":"NoContact","2":"Moving","3":"Holding","4":"Landed"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Landingpad_CrossPiece":{"prefab":{"prefabName":"Landingpad_CrossPiece","prefabHash":1101296153,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Cross"},"structure":{"smallGrid":true}},"Landingpad_DataConnectionPiece":{"prefab":{"prefabName":"Landingpad_DataConnectionPiece","prefabHash":-2066405918,"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.","name":"Landingpad Data And Power"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"],["LandingPad","Input"],["LandingPad","Input"],["LandingPad","Input"]],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_DiagonalPiece01":{"prefab":{"prefabName":"Landingpad_DiagonalPiece01","prefabHash":977899131,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Diagonal"},"structure":{"smallGrid":true}},"Landingpad_GasConnectorInwardPiece":{"prefab":{"prefabName":"Landingpad_GasConnectorInwardPiece","prefabHash":817945707,"desc":"","name":"Landingpad Gas Input"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["LandingPad","Input"],["LandingPad","Input"],["LandingPad","Input"],["Data","None"],["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_GasConnectorOutwardPiece":{"prefab":{"prefabName":"Landingpad_GasConnectorOutwardPiece","prefabHash":-1100218307,"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.","name":"Landingpad Gas Output"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["LandingPad","Input"],["LandingPad","Input"],["LandingPad","Input"],["Data","None"],["Pipe","Output"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_GasCylinderTankPiece":{"prefab":{"prefabName":"Landingpad_GasCylinderTankPiece","prefabHash":170818567,"desc":"Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders.","name":"Landingpad Gas Storage"},"structure":{"smallGrid":true}},"Landingpad_LiquidConnectorInwardPiece":{"prefab":{"prefabName":"Landingpad_LiquidConnectorInwardPiece","prefabHash":-1216167727,"desc":"","name":"Landingpad Liquid Input"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["LandingPad","Input"],["LandingPad","Input"],["LandingPad","Input"],["Data","None"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_LiquidConnectorOutwardPiece":{"prefab":{"prefabName":"Landingpad_LiquidConnectorOutwardPiece","prefabHash":-1788929869,"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.","name":"Landingpad Liquid Output"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["LandingPad","Input"],["LandingPad","Input"],["LandingPad","Input"],["Data","None"],["PipeLiquid","Output"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_StraightPiece01":{"prefab":{"prefabName":"Landingpad_StraightPiece01","prefabHash":-976273247,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Straight"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceCorner":{"prefab":{"prefabName":"Landingpad_TaxiPieceCorner","prefabHash":-1872345847,"desc":"","name":"Landingpad Taxi Corner"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceHold":{"prefab":{"prefabName":"Landingpad_TaxiPieceHold","prefabHash":146051619,"desc":"","name":"Landingpad Taxi Hold"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceStraight":{"prefab":{"prefabName":"Landingpad_TaxiPieceStraight","prefabHash":-1477941080,"desc":"","name":"Landingpad Taxi Straight"},"structure":{"smallGrid":true}},"Landingpad_ThreshholdPiece":{"prefab":{"prefabName":"Landingpad_ThreshholdPiece","prefabHash":-1514298582,"desc":"","name":"Landingpad Threshhold"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["LandingPad","Input"],["LandingPad","Input"],["LandingPad","Input"],["Data","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"LogicStepSequencer8":{"prefab":{"prefabName":"LogicStepSequencer8","prefabHash":1531272458,"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.","name":"Logic Step Sequencer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Sound Cartridge","typ":"SoundCartridge"}],"device":{"connectionList":[["Data","Input"],["Data","Input"],["Power","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Meteorite":{"prefab":{"prefabName":"Meteorite","prefabHash":-99064335,"desc":"","name":"Meteorite"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"MonsterEgg":{"prefab":{"prefabName":"MonsterEgg","prefabHash":-1667675295,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"MotherboardComms":{"prefab":{"prefabName":"MotherboardComms","prefabHash":-337075633,"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.","name":"Communications Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardLogic":{"prefab":{"prefabName":"MotherboardLogic","prefabHash":502555944,"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.","name":"Logic Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardMissionControl":{"prefab":{"prefabName":"MotherboardMissionControl","prefabHash":-127121474,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardProgrammableChip":{"prefab":{"prefabName":"MotherboardProgrammableChip","prefabHash":-161107071,"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.","name":"IC Editor Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardRockets":{"prefab":{"prefabName":"MotherboardRockets","prefabHash":-806986392,"desc":"","name":"Rocket Control Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardSorter":{"prefab":{"prefabName":"MotherboardSorter","prefabHash":-1908268220,"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.","name":"Sorter Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MothershipCore":{"prefab":{"prefabName":"MothershipCore","prefabHash":-1930442922,"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.","name":"Mothership Core"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"NpcChick":{"prefab":{"prefabName":"NpcChick","prefabHash":155856647,"desc":"","name":"Chick"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"NpcChicken":{"prefab":{"prefabName":"NpcChicken","prefabHash":399074198,"desc":"","name":"Chicken"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"PassiveSpeaker":{"prefab":{"prefabName":"PassiveSpeaker","prefabHash":248893646,"desc":"","name":"Passive Speaker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"ReadWrite","ReferenceId":"ReadWrite","SoundAlert":"ReadWrite","Volume":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"PipeBenderMod":{"prefab":{"prefabName":"PipeBenderMod","prefabHash":443947415,"desc":"Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Pipe Bender Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"PortableComposter":{"prefab":{"prefabName":"PortableComposter","prefabHash":-1958705204,"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","name":"Portable Composter"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"Battery"},{"name":"Liquid Canister","typ":"LiquidCanister"}]},"PortableSolarPanel":{"prefab":{"prefabName":"PortableSolarPanel","prefabHash":2043318949,"desc":"","name":"Portable Solar Panel"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Open":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"RailingElegant01":{"prefab":{"prefabName":"RailingElegant01","prefabHash":399661231,"desc":"","name":"Railing Elegant (Type 1)"},"structure":{"smallGrid":false}},"RailingElegant02":{"prefab":{"prefabName":"RailingElegant02","prefabHash":-1898247915,"desc":"","name":"Railing Elegant (Type 2)"},"structure":{"smallGrid":false}},"RailingIndustrial02":{"prefab":{"prefabName":"RailingIndustrial02","prefabHash":-2072792175,"desc":"","name":"Railing Industrial (Type 2)"},"structure":{"smallGrid":false}},"ReagentColorBlue":{"prefab":{"prefabName":"ReagentColorBlue","prefabHash":980054869,"desc":"","name":"Color Dye (Blue)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorBlue":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorGreen":{"prefab":{"prefabName":"ReagentColorGreen","prefabHash":120807542,"desc":"","name":"Color Dye (Green)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorGreen":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorOrange":{"prefab":{"prefabName":"ReagentColorOrange","prefabHash":-400696159,"desc":"","name":"Color Dye (Orange)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorOrange":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorRed":{"prefab":{"prefabName":"ReagentColorRed","prefabHash":1998377961,"desc":"","name":"Color Dye (Red)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorRed":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorYellow":{"prefab":{"prefabName":"ReagentColorYellow","prefabHash":635208006,"desc":"","name":"Color Dye (Yellow)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorYellow":10.0},"slotClass":"None","sortingClass":"Resources"}},"RespawnPoint":{"prefab":{"prefabName":"RespawnPoint","prefabHash":-788672929,"desc":"Place a respawn point to set a player entry point to your base when loading in, or returning from the dead.","name":"Respawn Point"},"structure":{"smallGrid":true}},"RespawnPointWallMounted":{"prefab":{"prefabName":"RespawnPointWallMounted","prefabHash":-491247370,"desc":"","name":"Respawn Point (Mounted)"},"structure":{"smallGrid":true}},"Robot":{"prefab":{"prefabName":"Robot","prefabHash":434786784,"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","name":"AIMeE Bot"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"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"}]},"RoverCargo":{"prefab":{"prefabName":"RoverCargo","prefabHash":350726273,"desc":"Connects to Logic Transmitter","name":"Rover (Cargo)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"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":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI":{"prefab":{"prefabName":"Rover_MkI","prefabHash":-2049946335,"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","name":"Rover MkI"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"},"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"},"10":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"slots":[{"name":"Entity","typ":"Entity"},{"name":"Entity","typ":"Entity"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI_build_states":{"prefab":{"prefabName":"Rover_MkI_build_states","prefabHash":861674123,"desc":"","name":"Rover MKI"},"structure":{"smallGrid":false}},"SMGMagazine":{"prefab":{"prefabName":"SMGMagazine","prefabHash":-256607540,"desc":"","name":"SMG Magazine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Magazine","sortingClass":"Default"}},"SeedBag_Corn":{"prefab":{"prefabName":"SeedBag_Corn","prefabHash":-1290755415,"desc":"Grow a Corn.","name":"Corn Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Fern":{"prefab":{"prefabName":"SeedBag_Fern","prefabHash":-1990600883,"desc":"Grow a Fern.","name":"Fern Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Mushroom":{"prefab":{"prefabName":"SeedBag_Mushroom","prefabHash":311593418,"desc":"Grow a Mushroom.","name":"Mushroom Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Potato":{"prefab":{"prefabName":"SeedBag_Potato","prefabHash":1005571172,"desc":"Grow a Potato.","name":"Potato Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Pumpkin":{"prefab":{"prefabName":"SeedBag_Pumpkin","prefabHash":1423199840,"desc":"Grow a Pumpkin.","name":"Pumpkin Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Rice":{"prefab":{"prefabName":"SeedBag_Rice","prefabHash":-1691151239,"desc":"Grow some Rice.","name":"Rice Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Soybean":{"prefab":{"prefabName":"SeedBag_Soybean","prefabHash":1783004244,"desc":"Grow some Soybean.","name":"Soybean Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Switchgrass":{"prefab":{"prefabName":"SeedBag_Switchgrass","prefabHash":488360169,"desc":"","name":"Switchgrass Seed"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Tomato":{"prefab":{"prefabName":"SeedBag_Tomato","prefabHash":-1922066841,"desc":"Grow a Tomato.","name":"Tomato Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Wheet":{"prefab":{"prefabName":"SeedBag_Wheet","prefabHash":-654756733,"desc":"Grow some Wheat.","name":"Wheat Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SpaceShuttle":{"prefab":{"prefabName":"SpaceShuttle","prefabHash":-1991297271,"desc":"An antiquated Sinotai transport craft, long since decommissioned.","name":"Space Shuttle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Captain's Seat","typ":"Entity"},{"name":"Passenger Seat Left","typ":"Entity"},{"name":"Passenger Seat Right","typ":"Entity"}]},"StopWatch":{"prefab":{"prefabName":"StopWatch","prefabHash":-1527229051,"desc":"","name":"Stop Watch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Time":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Power","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureAccessBridge":{"prefab":{"prefabName":"StructureAccessBridge","prefabHash":1298920475,"desc":"Extendable bridge that spans three grids","name":"Access Bridge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureActiveVent":{"prefab":{"prefabName":"StructureActiveVent","prefabHash":-1129453144,"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 ...","name":"Active Vent"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[["PowerAndData","None"],["Pipe","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAdvancedComposter":{"prefab":{"prefabName":"StructureAdvancedComposter","prefabHash":446212963,"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","name":"Advanced Composter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Output"],["Data","None"],["PipeLiquid","Input"],["Power","None"],["Chute","Input"],["Chute","Output"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAdvancedFurnace":{"prefab":{"prefabName":"StructureAdvancedFurnace","prefabHash":545937711,"desc":"The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure.","name":"Advanced Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"],["Pipe","Input"],["Pipe","Output"],["PipeLiquid","Output2"]],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureAdvancedPackagingMachine":{"prefab":{"prefabName":"StructureAdvancedPackagingMachine","prefabHash":-463037670,"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.","name":"Advanced Packaging Machine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureAirConditioner":{"prefab":{"prefabName":"StructureAirConditioner","prefabHash":-2087593337,"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.","name":"Air Conditioner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Pipe","Output"],["Pipe","Waste"],["Power","None"]],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAirlock":{"prefab":{"prefabName":"StructureAirlock","prefabHash":-2105052344,"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.","name":"Airlock"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAirlockGate":{"prefab":{"prefabName":"StructureAirlockGate","prefabHash":1736080881,"desc":"1 x 1 modular door piece for building hangar doors.","name":"Small Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAngledBench":{"prefab":{"prefabName":"StructureAngledBench","prefabHash":1811979158,"desc":"","name":"Bench (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureArcFurnace":{"prefab":{"prefabName":"StructureArcFurnace","prefabHash":-247344692,"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.","name":"Arc Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"},{"name":"Export","typ":"Ingot"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureAreaPowerControl":{"prefab":{"prefabName":"StructureAreaPowerControl","prefabHash":1999523701,"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.","name":"Area Power Control"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[["PowerAndData","Input"],["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAreaPowerControlReversed":{"prefab":{"prefabName":"StructureAreaPowerControlReversed","prefabHash":-1032513487,"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.","name":"Area Power Control"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[["PowerAndData","Input"],["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAutoMinerSmall":{"prefab":{"prefabName":"StructureAutoMinerSmall","prefabHash":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":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAutolathe":{"prefab":{"prefabName":"StructureAutolathe","prefabHash":336213101,"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 ","name":"Autolathe"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureAutomatedOven":{"prefab":{"prefabName":"StructureAutomatedOven","prefabHash":-1672404896,"desc":"","name":"Automated Oven"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureBackLiquidPressureRegulator":{"prefab":{"prefabName":"StructureBackLiquidPressureRegulator","prefabHash":2099900163,"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.","name":"Liquid Back Volume Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBackPressureRegulator":{"prefab":{"prefabName":"StructureBackPressureRegulator","prefabHash":-1149857558,"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.","name":"Back Pressure Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBasketHoop":{"prefab":{"prefabName":"StructureBasketHoop","prefabHash":-1613497288,"desc":"","name":"Basket Hoop"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBattery":{"prefab":{"prefabName":"StructureBattery","prefabHash":-400115994,"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).","name":"Station Battery"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","Input"],["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryCharger":{"prefab":{"prefabName":"StructureBatteryCharger","prefabHash":1945930022,"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.","name":"Battery Cell Charger"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryChargerSmall":{"prefab":{"prefabName":"StructureBatteryChargerSmall","prefabHash":-761772413,"desc":"","name":"Battery Charger Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryLarge":{"prefab":{"prefabName":"StructureBatteryLarge","prefabHash":-1388288459,"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). ","name":"Station Battery (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","Input"],["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryMedium":{"prefab":{"prefabName":"StructureBatteryMedium","prefabHash":-1125305264,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","Input"],["Power","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatterySmall":{"prefab":{"prefabName":"StructureBatterySmall","prefabHash":-2123455080,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Auxiliary Rocket Battery "},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","Input"],["Power","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBeacon":{"prefab":{"prefabName":"StructureBeacon","prefabHash":-188177083,"desc":"","name":"Beacon"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench":{"prefab":{"prefabName":"StructureBench","prefabHash":-2042448192,"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.","name":"Powered Bench"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench1":{"prefab":{"prefabName":"StructureBench1","prefabHash":406745009,"desc":"","name":"Bench (Counter Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench2":{"prefab":{"prefabName":"StructureBench2","prefabHash":-2127086069,"desc":"","name":"Bench (High Tech Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench3":{"prefab":{"prefabName":"StructureBench3","prefabHash":-164622691,"desc":"","name":"Bench (Frame Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench4":{"prefab":{"prefabName":"StructureBench4","prefabHash":1750375230,"desc":"","name":"Bench (Workbench Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBlastDoor":{"prefab":{"prefabName":"StructureBlastDoor","prefabHash":337416191,"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.","name":"Blast Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureBlockBed":{"prefab":{"prefabName":"StructureBlockBed","prefabHash":697908419,"desc":"Description coming.","name":"Block Bed"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBlocker":{"prefab":{"prefabName":"StructureBlocker","prefabHash":378084505,"desc":"","name":"Blocker"},"structure":{"smallGrid":false}},"StructureCableAnalysizer":{"prefab":{"prefabName":"StructureCableAnalysizer","prefabHash":1036015121,"desc":"","name":"Cable Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PowerActual":"Read","PowerPotential":"Read","PowerRequired":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableCorner":{"prefab":{"prefabName":"StructureCableCorner","prefabHash":-889269388,"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).","name":"Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3":{"prefab":{"prefabName":"StructureCableCorner3","prefabHash":980469101,"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).","name":"Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3Burnt":{"prefab":{"prefabName":"StructureCableCorner3Burnt","prefabHash":318437449,"desc":"","name":"Burnt Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3HBurnt":{"prefab":{"prefabName":"StructureCableCorner3HBurnt","prefabHash":2393826,"desc":"","name":""},"structure":{"smallGrid":true}},"StructureCableCorner4":{"prefab":{"prefabName":"StructureCableCorner4","prefabHash":-1542172466,"desc":"","name":"Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner4Burnt":{"prefab":{"prefabName":"StructureCableCorner4Burnt","prefabHash":268421361,"desc":"","name":"Burnt Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner4HBurnt":{"prefab":{"prefabName":"StructureCableCorner4HBurnt","prefabHash":-981223316,"desc":"","name":"Burnt Heavy Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerBurnt":{"prefab":{"prefabName":"StructureCableCornerBurnt","prefabHash":-177220914,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH":{"prefab":{"prefabName":"StructureCableCornerH","prefabHash":-39359015,"desc":"","name":"Heavy Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH3":{"prefab":{"prefabName":"StructureCableCornerH3","prefabHash":-1843379322,"desc":"","name":"Heavy Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH4":{"prefab":{"prefabName":"StructureCableCornerH4","prefabHash":205837861,"desc":"","name":"Heavy Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerHBurnt":{"prefab":{"prefabName":"StructureCableCornerHBurnt","prefabHash":1931412811,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableFuse100k":{"prefab":{"prefabName":"StructureCableFuse100k","prefabHash":281380789,"desc":"","name":"Fuse (100kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse1k":{"prefab":{"prefabName":"StructureCableFuse1k","prefabHash":-1103727120,"desc":"","name":"Fuse (1kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse50k":{"prefab":{"prefabName":"StructureCableFuse50k","prefabHash":-349716617,"desc":"","name":"Fuse (50kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse5k":{"prefab":{"prefabName":"StructureCableFuse5k","prefabHash":-631590668,"desc":"","name":"Fuse (5kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableJunction":{"prefab":{"prefabName":"StructureCableJunction","prefabHash":-175342021,"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).","name":"Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4":{"prefab":{"prefabName":"StructureCableJunction4","prefabHash":1112047202,"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).","name":"Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4Burnt":{"prefab":{"prefabName":"StructureCableJunction4Burnt","prefabHash":-1756896811,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4HBurnt":{"prefab":{"prefabName":"StructureCableJunction4HBurnt","prefabHash":-115809132,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction5":{"prefab":{"prefabName":"StructureCableJunction5","prefabHash":894390004,"desc":"","name":"Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction5Burnt":{"prefab":{"prefabName":"StructureCableJunction5Burnt","prefabHash":1545286256,"desc":"","name":"Burnt Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6":{"prefab":{"prefabName":"StructureCableJunction6","prefabHash":-1404690610,"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).","name":"Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6Burnt":{"prefab":{"prefabName":"StructureCableJunction6Burnt","prefabHash":-628145954,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6HBurnt":{"prefab":{"prefabName":"StructureCableJunction6HBurnt","prefabHash":1854404029,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionBurnt":{"prefab":{"prefabName":"StructureCableJunctionBurnt","prefabHash":-1620686196,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH":{"prefab":{"prefabName":"StructureCableJunctionH","prefabHash":469451637,"desc":"","name":"Heavy Cable (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH4":{"prefab":{"prefabName":"StructureCableJunctionH4","prefabHash":-742234680,"desc":"","name":"Heavy Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH5":{"prefab":{"prefabName":"StructureCableJunctionH5","prefabHash":-1530571426,"desc":"","name":"Heavy Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH5Burnt":{"prefab":{"prefabName":"StructureCableJunctionH5Burnt","prefabHash":1701593300,"desc":"","name":"Burnt Heavy Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH6":{"prefab":{"prefabName":"StructureCableJunctionH6","prefabHash":1036780772,"desc":"","name":"Heavy Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionHBurnt":{"prefab":{"prefabName":"StructureCableJunctionHBurnt","prefabHash":-341365649,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableStraight":{"prefab":{"prefabName":"StructureCableStraight","prefabHash":605357050,"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).","name":"Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightBurnt":{"prefab":{"prefabName":"StructureCableStraightBurnt","prefabHash":-1196981113,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightH":{"prefab":{"prefabName":"StructureCableStraightH","prefabHash":-146200530,"desc":"","name":"Heavy Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightHBurnt":{"prefab":{"prefabName":"StructureCableStraightHBurnt","prefabHash":2085762089,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCamera":{"prefab":{"prefabName":"StructureCamera","prefabHash":-342072665,"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.","name":"Camera"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureCapsuleTankGas":{"prefab":{"prefabName":"StructureCapsuleTankGas","prefabHash":-1385712131,"desc":"","name":"Gas Capsule Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCapsuleTankLiquid":{"prefab":{"prefabName":"StructureCapsuleTankLiquid","prefabHash":1415396263,"desc":"","name":"Liquid Capsule Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCargoStorageMedium":{"prefab":{"prefabName":"StructureCargoStorageMedium","prefabHash":1151864003,"desc":"","name":"Cargo Storage (Medium)"},"structure":{"smallGrid":true},"logic":{"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":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[["PowerAndData","None"],["Chute","Output"],["Chute","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCargoStorageSmall":{"prefab":{"prefabName":"StructureCargoStorageSmall","prefabHash":-1493672123,"desc":"","name":"Cargo Storage (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"},"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"},"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"},"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"},"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[["PowerAndData","None"],["Chute","Output"],["Chute","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCentrifuge":{"prefab":{"prefabName":"StructureCentrifuge","prefabHash":690945935,"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.","name":"Centrifuge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureChair":{"prefab":{"prefabName":"StructureChair","prefabHash":1167659360,"desc":"One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs.","name":"Chair"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBacklessDouble":{"prefab":{"prefabName":"StructureChairBacklessDouble","prefabHash":1944858936,"desc":"","name":"Chair (Backless Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBacklessSingle":{"prefab":{"prefabName":"StructureChairBacklessSingle","prefabHash":1672275150,"desc":"","name":"Chair (Backless Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBoothCornerLeft":{"prefab":{"prefabName":"StructureChairBoothCornerLeft","prefabHash":-367720198,"desc":"","name":"Chair (Booth Corner Left)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBoothMiddle":{"prefab":{"prefabName":"StructureChairBoothMiddle","prefabHash":1640720378,"desc":"","name":"Chair (Booth Middle)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairRectangleDouble":{"prefab":{"prefabName":"StructureChairRectangleDouble","prefabHash":-1152812099,"desc":"","name":"Chair (Rectangle Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairRectangleSingle":{"prefab":{"prefabName":"StructureChairRectangleSingle","prefabHash":-1425428917,"desc":"","name":"Chair (Rectangle Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairThickDouble":{"prefab":{"prefabName":"StructureChairThickDouble","prefabHash":-1245724402,"desc":"","name":"Chair (Thick Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairThickSingle":{"prefab":{"prefabName":"StructureChairThickSingle","prefabHash":-1510009608,"desc":"","name":"Chair (Thick Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteBin":{"prefab":{"prefabName":"StructureChuteBin","prefabHash":-850484480,"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.","name":"Chute Bin"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Input","typ":"None"}],"device":{"connectionList":[["Chute","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteCorner":{"prefab":{"prefabName":"StructureChuteCorner","prefabHash":1360330136,"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.","name":"Chute (Corner)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteDigitalFlipFlopSplitterLeft":{"prefab":{"prefabName":"StructureChuteDigitalFlipFlopSplitterLeft","prefabHash":-810874728,"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.","name":"Chute Digital Flip Flop Splitter Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingOutput":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Chute","Output2"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureChuteDigitalFlipFlopSplitterRight":{"prefab":{"prefabName":"StructureChuteDigitalFlipFlopSplitterRight","prefabHash":163728359,"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.","name":"Chute Digital Flip Flop Splitter Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingOutput":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Chute","Output2"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureChuteDigitalValveLeft":{"prefab":{"prefabName":"StructureChuteDigitalValveLeft","prefabHash":648608238,"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.","name":"Chute Digital Valve Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteDigitalValveRight":{"prefab":{"prefabName":"StructureChuteDigitalValveRight","prefabHash":-1337091041,"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.","name":"Chute Digital Valve Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteFlipFlopSplitter":{"prefab":{"prefabName":"StructureChuteFlipFlopSplitter","prefabHash":-1446854725,"desc":"A chute that toggles between two outputs","name":"Chute Flip Flop Splitter"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteInlet":{"prefab":{"prefabName":"StructureChuteInlet","prefabHash":-1469588766,"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.","name":"Chute Inlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[["Chute","Output"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteJunction":{"prefab":{"prefabName":"StructureChuteJunction","prefabHash":-611232514,"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.","name":"Chute (Junction)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteOutlet":{"prefab":{"prefabName":"StructureChuteOutlet","prefabHash":-1022714809,"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.","name":"Chute Outlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteOverflow":{"prefab":{"prefabName":"StructureChuteOverflow","prefabHash":225377225,"desc":"The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied.","name":"Chute Overflow"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteStraight":{"prefab":{"prefabName":"StructureChuteStraight","prefabHash":168307007,"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.","name":"Chute (Straight)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteUmbilicalFemale":{"prefab":{"prefabName":"StructureChuteUmbilicalFemale","prefabHash":-1918892177,"desc":"","name":"Umbilical Socket (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[["Chute","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureChuteUmbilicalFemaleSide","prefabHash":-659093969,"desc":"","name":"Umbilical Socket Angle (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[["Chute","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteUmbilicalMale":{"prefab":{"prefabName":"StructureChuteUmbilicalMale","prefabHash":-958884053,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteValve":{"prefab":{"prefabName":"StructureChuteValve","prefabHash":434875271,"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.","name":"Chute Valve"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteWindow":{"prefab":{"prefabName":"StructureChuteWindow","prefabHash":-607241919,"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.","name":"Chute (Window)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureCircuitHousing":{"prefab":{"prefabName":"StructureCircuitHousing","prefabHash":-128473777,"desc":"","name":"IC Housing"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","LineNumber":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","LineNumber":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[["Data","Input"],["Power","None"]],"devicePinsLength":6,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"StructureCombustionCentrifuge":{"prefab":{"prefabName":"StructureCombustionCentrifuge","prefabHash":1238905683,"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 ","name":"Combustion Centrifuge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"],["Pipe","Input"],["Pipe","Output"]],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureCompositeCladdingAngled":{"prefab":{"prefabName":"StructureCompositeCladdingAngled","prefabHash":-1513030150,"desc":"","name":"Composite Cladding (Angled)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCorner":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCorner","prefabHash":-69685069,"desc":"","name":"Composite Cladding (Angled Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInner":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInner","prefabHash":-1841871763,"desc":"","name":"Composite Cladding (Angled Corner Inner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLong","prefabHash":-1417912632,"desc":"","name":"Composite Cladding (Angled Corner Inner Long)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLongL":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLongL","prefabHash":947705066,"desc":"","name":"Composite Cladding (Angled Corner Inner Long L)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLongR":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLongR","prefabHash":-1032590967,"desc":"","name":"Composite Cladding (Angled Corner Inner Long R)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerLong","prefabHash":850558385,"desc":"","name":"Composite Cladding (Long Angled Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerLongR":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerLongR","prefabHash":-348918222,"desc":"","name":"Composite Cladding (Long Angled Mirrored Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledLong","prefabHash":-387546514,"desc":"","name":"Composite Cladding (Long Angled)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingCylindrical":{"prefab":{"prefabName":"StructureCompositeCladdingCylindrical","prefabHash":212919006,"desc":"","name":"Composite Cladding (Cylindrical)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingCylindricalPanel":{"prefab":{"prefabName":"StructureCompositeCladdingCylindricalPanel","prefabHash":1077151132,"desc":"","name":"Composite Cladding (Cylindrical Panel)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingPanel":{"prefab":{"prefabName":"StructureCompositeCladdingPanel","prefabHash":1997436771,"desc":"","name":"Composite Cladding (Panel)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRounded":{"prefab":{"prefabName":"StructureCompositeCladdingRounded","prefabHash":-259357734,"desc":"","name":"Composite Cladding (Rounded)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRoundedCorner":{"prefab":{"prefabName":"StructureCompositeCladdingRoundedCorner","prefabHash":1951525046,"desc":"","name":"Composite Cladding (Rounded Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRoundedCornerInner":{"prefab":{"prefabName":"StructureCompositeCladdingRoundedCornerInner","prefabHash":110184667,"desc":"","name":"Composite Cladding (Rounded Corner Inner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSpherical":{"prefab":{"prefabName":"StructureCompositeCladdingSpherical","prefabHash":139107321,"desc":"","name":"Composite Cladding (Spherical)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSphericalCap":{"prefab":{"prefabName":"StructureCompositeCladdingSphericalCap","prefabHash":534213209,"desc":"","name":"Composite Cladding (Spherical Cap)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSphericalCorner":{"prefab":{"prefabName":"StructureCompositeCladdingSphericalCorner","prefabHash":1751355139,"desc":"","name":"Composite Cladding (Spherical Corner)"},"structure":{"smallGrid":false}},"StructureCompositeDoor":{"prefab":{"prefabName":"StructureCompositeDoor","prefabHash":-793837322,"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.","name":"Composite Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCompositeFloorGrating":{"prefab":{"prefabName":"StructureCompositeFloorGrating","prefabHash":324868581,"desc":"While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings.","name":"Composite Floor Grating"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating2":{"prefab":{"prefabName":"StructureCompositeFloorGrating2","prefabHash":-895027741,"desc":"","name":"Composite Floor Grating (Type 2)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating3":{"prefab":{"prefabName":"StructureCompositeFloorGrating3","prefabHash":-1113471627,"desc":"","name":"Composite Floor Grating (Type 3)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating4":{"prefab":{"prefabName":"StructureCompositeFloorGrating4","prefabHash":600133846,"desc":"","name":"Composite Floor Grating (Type 4)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGratingOpen":{"prefab":{"prefabName":"StructureCompositeFloorGratingOpen","prefabHash":2109695912,"desc":"","name":"Composite Floor Grating Open"},"structure":{"smallGrid":false}},"StructureCompositeFloorGratingOpenRotated":{"prefab":{"prefabName":"StructureCompositeFloorGratingOpenRotated","prefabHash":882307910,"desc":"","name":"Composite Floor Grating Open Rotated"},"structure":{"smallGrid":false}},"StructureCompositeWall":{"prefab":{"prefabName":"StructureCompositeWall","prefabHash":1237302061,"desc":"Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties.","name":"Composite Wall (Type 1)"},"structure":{"smallGrid":false}},"StructureCompositeWall02":{"prefab":{"prefabName":"StructureCompositeWall02","prefabHash":718343384,"desc":"","name":"Composite Wall (Type 2)"},"structure":{"smallGrid":false}},"StructureCompositeWall03":{"prefab":{"prefabName":"StructureCompositeWall03","prefabHash":1574321230,"desc":"","name":"Composite Wall (Type 3)"},"structure":{"smallGrid":false}},"StructureCompositeWall04":{"prefab":{"prefabName":"StructureCompositeWall04","prefabHash":-1011701267,"desc":"","name":"Composite Wall (Type 4)"},"structure":{"smallGrid":false}},"StructureCompositeWindow":{"prefab":{"prefabName":"StructureCompositeWindow","prefabHash":-2060571986,"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.","name":"Composite Window"},"structure":{"smallGrid":false}},"StructureCompositeWindowIron":{"prefab":{"prefabName":"StructureCompositeWindowIron","prefabHash":-688284639,"desc":"","name":"Iron Window"},"structure":{"smallGrid":false}},"StructureComputer":{"prefab":{"prefabName":"StructureComputer","prefabHash":-626563514,"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","name":"Computer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Data Disk","typ":"DataDisk"},{"name":"Data Disk","typ":"DataDisk"},{"name":"Motherboard","typ":"Motherboard"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCondensationChamber":{"prefab":{"prefabName":"StructureCondensationChamber","prefabHash":1420719315,"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.","name":"Condensation Chamber"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input2"],["Pipe","Input"],["PipeLiquid","Output"],["Data","None"],["Power","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCondensationValve":{"prefab":{"prefabName":"StructureCondensationValve","prefabHash":-965741795,"desc":"Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction.","name":"Condensation Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Output"],["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsole":{"prefab":{"prefabName":"StructureConsole","prefabHash":235638270,"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.","name":"Console"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureConsoleDual":{"prefab":{"prefabName":"StructureConsoleDual","prefabHash":-722284333,"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.","name":"Console Dual"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureConsoleLED1x2":{"prefab":{"prefabName":"StructureConsoleLED1x2","prefabHash":-53151617,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleLED1x3":{"prefab":{"prefabName":"StructureConsoleLED1x3","prefabHash":-1949054743,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleLED5":{"prefab":{"prefabName":"StructureConsoleLED5","prefabHash":-815193061,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleMonitor":{"prefab":{"prefabName":"StructureConsoleMonitor","prefabHash":801677497,"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.","name":"Console Monitor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureControlChair":{"prefab":{"prefabName":"StructureControlChair","prefabHash":-1961153710,"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.","name":"Control Chair"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Entity","typ":"Entity"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureCornerLocker":{"prefab":{"prefabName":"StructureCornerLocker","prefabHash":-1968255729,"desc":"","name":"Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureCrateMount":{"prefab":{"prefabName":"StructureCrateMount","prefabHash":-733500083,"desc":"","name":"Container Mount"},"structure":{"smallGrid":true},"slots":[{"name":"Container Slot","typ":"None"}]},"StructureCryoTube":{"prefab":{"prefabName":"StructureCryoTube","prefabHash":1938254586,"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.","name":"CryoTube"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[["Data","None"],["Pipe","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCryoTubeHorizontal":{"prefab":{"prefabName":"StructureCryoTubeHorizontal","prefabHash":1443059329,"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.","name":"Cryo Tube Horizontal"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCryoTubeVertical":{"prefab":{"prefabName":"StructureCryoTubeVertical","prefabHash":-1381321828,"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.","name":"Cryo Tube Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureDaylightSensor":{"prefab":{"prefabName":"StructureDaylightSensor","prefabHash":1076425094,"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.","name":"Daylight Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDeepMiner":{"prefab":{"prefabName":"StructureDeepMiner","prefabHash":265720906,"desc":"Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s","name":"Deep Miner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDigitalValve":{"prefab":{"prefabName":"StructureDigitalValve","prefabHash":-1280984102,"desc":"The digital valve allows Stationeers to create logic-controlled valves and pipe networks.","name":"Digital Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Output"],["Pipe","Input"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDiode":{"prefab":{"prefabName":"StructureDiode","prefabHash":1944485013,"desc":"","name":"LED"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDiodeSlide":{"prefab":{"prefabName":"StructureDiodeSlide","prefabHash":576516101,"desc":"","name":"Diode Slide"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDockPortSide":{"prefab":{"prefabName":"StructureDockPortSide","prefabHash":-137465079,"desc":"","name":"Dock (Port Side)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureDrinkingFountain":{"prefab":{"prefabName":"StructureDrinkingFountain","prefabHash":1968371847,"desc":"","name":""},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureElectrolyzer":{"prefab":{"prefabName":"StructureElectrolyzer","prefabHash":-1668992663,"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.","name":"Electrolyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"],["Pipe","Output"],["Power","None"]],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElectronicsPrinter":{"prefab":{"prefabName":"StructureElectronicsPrinter","prefabHash":1307165496,"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.","name":"Electronics Printer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureElevatorLevelFront":{"prefab":{"prefabName":"StructureElevatorLevelFront","prefabHash":-827912235,"desc":"","name":"Elevator Level (Cabled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Elevator","None"],["Elevator","None"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElevatorLevelIndustrial":{"prefab":{"prefabName":"StructureElevatorLevelIndustrial","prefabHash":2060648791,"desc":"","name":"Elevator Level"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Elevator","None"],["Elevator","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElevatorShaft":{"prefab":{"prefabName":"StructureElevatorShaft","prefabHash":826144419,"desc":"","name":"Elevator Shaft (Cabled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Elevator","None"],["Elevator","None"],["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureElevatorShaftIndustrial":{"prefab":{"prefabName":"StructureElevatorShaftIndustrial","prefabHash":1998354978,"desc":"","name":"Elevator Shaft"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Elevator","None"],["Elevator","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureEmergencyButton":{"prefab":{"prefabName":"StructureEmergencyButton","prefabHash":1668452680,"desc":"Description coming.","name":"Important Button"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureEngineMountTypeA1":{"prefab":{"prefabName":"StructureEngineMountTypeA1","prefabHash":2035781224,"desc":"","name":"Engine Mount (Type A1)"},"structure":{"smallGrid":false}},"StructureEvaporationChamber":{"prefab":{"prefabName":"StructureEvaporationChamber","prefabHash":-1429782576,"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.","name":"Evaporation Chamber"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input2"],["Pipe","Output"],["PipeLiquid","Input"],["Data","None"],["Power","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureExpansionValve":{"prefab":{"prefabName":"StructureExpansionValve","prefabHash":195298587,"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.","name":"Expansion Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Output"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureFairingTypeA1":{"prefab":{"prefabName":"StructureFairingTypeA1","prefabHash":1622567418,"desc":"","name":"Fairing (Type A1)"},"structure":{"smallGrid":false}},"StructureFairingTypeA2":{"prefab":{"prefabName":"StructureFairingTypeA2","prefabHash":-104908736,"desc":"","name":"Fairing (Type A2)"},"structure":{"smallGrid":false}},"StructureFairingTypeA3":{"prefab":{"prefabName":"StructureFairingTypeA3","prefabHash":-1900541738,"desc":"","name":"Fairing (Type A3)"},"structure":{"smallGrid":false}},"StructureFiltration":{"prefab":{"prefabName":"StructureFiltration","prefabHash":-348054045,"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","name":"Filtration"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Pipe","Output"],["Pipe","Waste"],["Power","None"]],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureFlagSmall":{"prefab":{"prefabName":"StructureFlagSmall","prefabHash":-1529819532,"desc":"","name":"Small Flag"},"structure":{"smallGrid":true}},"StructureFlashingLight":{"prefab":{"prefabName":"StructureFlashingLight","prefabHash":-1535893860,"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'.","name":"Flashing Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureFlatBench":{"prefab":{"prefabName":"StructureFlatBench","prefabHash":839890807,"desc":"","name":"Bench (Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureFloorDrain":{"prefab":{"prefabName":"StructureFloorDrain","prefabHash":1048813293,"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.","name":"Passive Liquid Inlet"},"structure":{"smallGrid":true}},"StructureFrame":{"prefab":{"prefabName":"StructureFrame","prefabHash":1432512808,"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.","name":"Steel Frame"},"structure":{"smallGrid":false}},"StructureFrameCorner":{"prefab":{"prefabName":"StructureFrameCorner","prefabHash":-2112390778,"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.","name":"Steel Frame (Corner)"},"structure":{"smallGrid":false}},"StructureFrameCornerCut":{"prefab":{"prefabName":"StructureFrameCornerCut","prefabHash":271315669,"desc":"0.Mode0\n1.Mode1","name":"Steel Frame (Corner Cut)"},"structure":{"smallGrid":false}},"StructureFrameIron":{"prefab":{"prefabName":"StructureFrameIron","prefabHash":-1240951678,"desc":"","name":"Iron Frame"},"structure":{"smallGrid":false}},"StructureFrameSide":{"prefab":{"prefabName":"StructureFrameSide","prefabHash":-302420053,"desc":"More durable than the Iron Frame, steel frames also provide variations for more ornate constructions.","name":"Steel Frame (Side)"},"structure":{"smallGrid":false}},"StructureFridgeBig":{"prefab":{"prefabName":"StructureFridgeBig","prefabHash":958476921,"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.","name":"Fridge (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureFridgeSmall":{"prefab":{"prefabName":"StructureFridgeSmall","prefabHash":751887598,"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.","name":"Fridge Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureFurnace":{"prefab":{"prefabName":"StructureFurnace","prefabHash":1947944864,"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.","name":"Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Pipe","Input"],["Pipe","Output"],["PipeLiquid","Output2"],["Data","None"]],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":false,"hasOpenState":true,"hasReagents":true}},"StructureFuselageTypeA1":{"prefab":{"prefabName":"StructureFuselageTypeA1","prefabHash":1033024712,"desc":"","name":"Fuselage (Type A1)"},"structure":{"smallGrid":false}},"StructureFuselageTypeA2":{"prefab":{"prefabName":"StructureFuselageTypeA2","prefabHash":-1533287054,"desc":"","name":"Fuselage (Type A2)"},"structure":{"smallGrid":false}},"StructureFuselageTypeA4":{"prefab":{"prefabName":"StructureFuselageTypeA4","prefabHash":1308115015,"desc":"","name":"Fuselage (Type A4)"},"structure":{"smallGrid":false}},"StructureFuselageTypeC5":{"prefab":{"prefabName":"StructureFuselageTypeC5","prefabHash":147395155,"desc":"","name":"Fuselage (Type C5)"},"structure":{"smallGrid":false}},"StructureGasGenerator":{"prefab":{"prefabName":"StructureGasGenerator","prefabHash":1165997963,"desc":"","name":"Gas Fuel Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Pipe","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGasMixer":{"prefab":{"prefabName":"StructureGasMixer","prefabHash":2104106366,"desc":"Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%.","name":"Gas Mixer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Output"],["Pipe","Input2"],["Pipe","Input"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGasSensor":{"prefab":{"prefabName":"StructureGasSensor","prefabHash":-1252983604,"desc":"Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents.","name":"Gas Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasTankStorage":{"prefab":{"prefabName":"StructureGasTankStorage","prefabHash":1632165346,"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.","name":"Gas Tank Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"PrefabHash":"Read","Pressure":"Read","Quantity":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioNitrousOxide":"Read","RatioOxygen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","ReferenceId":"Read","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalFemale":{"prefab":{"prefabName":"StructureGasUmbilicalFemale","prefabHash":-1680477930,"desc":"","name":"Umbilical Socket (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureGasUmbilicalFemaleSide","prefabHash":-648683847,"desc":"","name":"Umbilical Socket Angle (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalMale":{"prefab":{"prefabName":"StructureGasUmbilicalMale","prefabHash":-1814939203,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGlassDoor":{"prefab":{"prefabName":"StructureGlassDoor","prefabHash":-324331872,"desc":"0.Operate\n1.Logic","name":"Glass Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGovernedGasEngine":{"prefab":{"prefabName":"StructureGovernedGasEngine","prefabHash":-214232602,"desc":"The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas.","name":"Pumped Gas Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGroundBasedTelescope":{"prefab":{"prefabName":"StructureGroundBasedTelescope","prefabHash":-619745681,"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.","name":"Telescope"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGrowLight":{"prefab":{"prefabName":"StructureGrowLight","prefabHash":-1758710260,"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. ","name":"Grow Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHarvie":{"prefab":{"prefabName":"StructureHarvie","prefabHash":958056199,"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.","name":"Harvie"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Plant"},{"name":"Export","typ":"None"},{"name":"Hand","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangeLiquidtoGas":{"prefab":{"prefabName":"StructureHeatExchangeLiquidtoGas","prefabHash":944685608,"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.","name":"Heat Exchanger - Liquid + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Output"],["PipeLiquid","Input"],["PipeLiquid","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangerGastoGas":{"prefab":{"prefabName":"StructureHeatExchangerGastoGas","prefabHash":21266291,"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.","name":"Heat Exchanger - Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Input"],["Pipe","Output"],["Pipe","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangerLiquidtoLiquid":{"prefab":{"prefabName":"StructureHeatExchangerLiquidtoLiquid","prefabHash":-613784254,"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","name":"Heat Exchanger - Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Input"],["PipeLiquid","Output"],["PipeLiquid","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHorizontalAutoMiner":{"prefab":{"prefabName":"StructureHorizontalAutoMiner","prefabHash":1070427573,"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","name":"OGRE"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureHydraulicPipeBender":{"prefab":{"prefabName":"StructureHydraulicPipeBender","prefabHash":-1888248335,"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.","name":"Hydraulic Pipe Bender"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureHydroponicsStation":{"prefab":{"prefabName":"StructureHydroponicsStation","prefabHash":1441767298,"desc":"","name":"Hydroponics Station"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[["Data","None"],["Power","None"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHydroponicsTray":{"prefab":{"prefabName":"StructureHydroponicsTray","prefabHash":1464854517,"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.","name":"Hydroponics Tray"},"structure":{"smallGrid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}]},"StructureHydroponicsTrayData":{"prefab":{"prefabName":"StructureHydroponicsTrayData","prefabHash":-1841632400,"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.","name":"Hydroponics Device"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}],"device":{"connectionList":[["PipeLiquid","None"],["PipeLiquid","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureIceCrusher":{"prefab":{"prefabName":"StructureIceCrusher","prefabHash":443849486,"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.","name":"Ice Crusher"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connectionList":[["Data","None"],["Power","None"],["Chute","Input"],["Pipe","Output"],["PipeLiquid","Output2"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureIgniter":{"prefab":{"prefabName":"StructureIgniter","prefabHash":1005491513,"desc":"It gets the party started. Especially if that party is an explosive gas mixture.","name":"Igniter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureInLineTankGas1x1":{"prefab":{"prefabName":"StructureInLineTankGas1x1","prefabHash":-1693382705,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Gas"},"structure":{"smallGrid":true}},"StructureInLineTankGas1x2":{"prefab":{"prefabName":"StructureInLineTankGas1x2","prefabHash":35149429,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Gas"},"structure":{"smallGrid":true}},"StructureInLineTankLiquid1x1":{"prefab":{"prefabName":"StructureInLineTankLiquid1x1","prefabHash":543645499,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Liquid"},"structure":{"smallGrid":true}},"StructureInLineTankLiquid1x2":{"prefab":{"prefabName":"StructureInLineTankLiquid1x2","prefabHash":-1183969663,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankGas1x1":{"prefab":{"prefabName":"StructureInsulatedInLineTankGas1x1","prefabHash":1818267386,"desc":"","name":"Insulated In-Line Tank Small Gas"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankGas1x2":{"prefab":{"prefabName":"StructureInsulatedInLineTankGas1x2","prefabHash":-177610944,"desc":"","name":"Insulated In-Line Tank Gas"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankLiquid1x1":{"prefab":{"prefabName":"StructureInsulatedInLineTankLiquid1x1","prefabHash":-813426145,"desc":"","name":"Insulated In-Line Tank Small Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankLiquid1x2":{"prefab":{"prefabName":"StructureInsulatedInLineTankLiquid1x2","prefabHash":1452100517,"desc":"","name":"Insulated In-Line Tank Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCorner":{"prefab":{"prefabName":"StructureInsulatedPipeCorner","prefabHash":-1967711059,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Corner)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction","prefabHash":-92778058,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction3":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction3","prefabHash":1328210035,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction4":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction4","prefabHash":-783387184,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction5":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction5","prefabHash":-1505147578,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction6":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction6","prefabHash":1061164284,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCorner":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCorner","prefabHash":1713710802,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Corner)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction","prefabHash":1926651727,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction4":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction4","prefabHash":363303270,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction5":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction5","prefabHash":1654694384,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction6":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction6","prefabHash":-72748982,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidStraight":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidStraight","prefabHash":295678685,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Straight)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidTJunction":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidTJunction","prefabHash":-532384855,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeStraight":{"prefab":{"prefabName":"StructureInsulatedPipeStraight","prefabHash":2134172356,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Straight)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeTJunction":{"prefab":{"prefabName":"StructureInsulatedPipeTJunction","prefabHash":-2076086215,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedTankConnector":{"prefab":{"prefabName":"StructureInsulatedTankConnector","prefabHash":-31273349,"desc":"","name":"Insulated Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructureInsulatedTankConnectorLiquid":{"prefab":{"prefabName":"StructureInsulatedTankConnectorLiquid","prefabHash":-1602030414,"desc":"","name":"Insulated Tank Connector Liquid"},"structure":{"smallGrid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureInteriorDoorGlass":{"prefab":{"prefabName":"StructureInteriorDoorGlass","prefabHash":-2096421875,"desc":"0.Operate\n1.Logic","name":"Interior Door Glass"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorPadded":{"prefab":{"prefabName":"StructureInteriorDoorPadded","prefabHash":847461335,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorPaddedThin":{"prefab":{"prefabName":"StructureInteriorDoorPaddedThin","prefabHash":1981698201,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded Thin"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorTriangle":{"prefab":{"prefabName":"StructureInteriorDoorTriangle","prefabHash":-1182923101,"desc":"0.Operate\n1.Logic","name":"Interior Door Triangle"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureKlaxon":{"prefab":{"prefabName":"StructureKlaxon","prefabHash":-828056979,"desc":"Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output.","name":"Klaxon Speaker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLadder":{"prefab":{"prefabName":"StructureLadder","prefabHash":-415420281,"desc":"","name":"Ladder"},"structure":{"smallGrid":true}},"StructureLadderEnd":{"prefab":{"prefabName":"StructureLadderEnd","prefabHash":1541734993,"desc":"","name":"Ladder End"},"structure":{"smallGrid":true}},"StructureLargeDirectHeatExchangeGastoGas":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeGastoGas","prefabHash":-1230658883,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Input2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeDirectHeatExchangeGastoLiquid":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeGastoLiquid","prefabHash":1412338038,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["Pipe","Input2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeLiquidtoLiquid","prefabHash":792686502,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchange - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Input2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeExtendableRadiator":{"prefab":{"prefabName":"StructureLargeExtendableRadiator","prefabHash":-566775170,"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.","name":"Large Extendable Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Horizontal":"ReadWrite","Lock":"ReadWrite","Maximum":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"],["PipeLiquid","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLargeHangerDoor":{"prefab":{"prefabName":"StructureLargeHangerDoor","prefabHash":-1351081801,"desc":"1 x 3 modular door piece for building hangar doors.","name":"Large Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureLargeSatelliteDish":{"prefab":{"prefabName":"StructureLargeSatelliteDish","prefabHash":1913391845,"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.","name":"Large Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLaunchMount":{"prefab":{"prefabName":"StructureLaunchMount","prefabHash":-558953231,"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.","name":"Launch Mount"},"structure":{"smallGrid":false}},"StructureLightLong":{"prefab":{"prefabName":"StructureLightLong","prefabHash":797794350,"desc":"","name":"Wall Light (Long)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightLongAngled":{"prefab":{"prefabName":"StructureLightLongAngled","prefabHash":1847265835,"desc":"","name":"Wall Light (Long Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightLongWide":{"prefab":{"prefabName":"StructureLightLongWide","prefabHash":555215790,"desc":"","name":"Wall Light (Long Wide)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRound":{"prefab":{"prefabName":"StructureLightRound","prefabHash":1514476632,"desc":"Description coming.","name":"Light Round"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRoundAngled":{"prefab":{"prefabName":"StructureLightRoundAngled","prefabHash":1592905386,"desc":"Description coming.","name":"Light Round (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRoundSmall":{"prefab":{"prefabName":"StructureLightRoundSmall","prefabHash":1436121888,"desc":"Description coming.","name":"Light Round (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidDrain":{"prefab":{"prefabName":"StructureLiquidDrain","prefabHash":1687692899,"desc":"When connected to power and activated, it pumps liquid from a liquid network into the world.","name":"Active Liquid Outlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","None"],["Data","Input"],["Power","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeAnalyzer":{"prefab":{"prefabName":"StructureLiquidPipeAnalyzer","prefabHash":-2113838091,"desc":"","name":"Liquid Pipe Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeHeater":{"prefab":{"prefabName":"StructureLiquidPipeHeater","prefabHash":-287495560,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeOneWayValve":{"prefab":{"prefabName":"StructureLiquidPipeOneWayValve","prefabHash":-782453061,"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..","name":"One Way Valve (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeRadiator":{"prefab":{"prefabName":"StructureLiquidPipeRadiator","prefabHash":2072805863,"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.","name":"Liquid Pipe Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPressureRegulator":{"prefab":{"prefabName":"StructureLiquidPressureRegulator","prefabHash":482248766,"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.","name":"Liquid Volume Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankBig":{"prefab":{"prefabName":"StructureLiquidTankBig","prefabHash":1098900430,"desc":"","name":"Liquid Tank Big"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankBigInsulated":{"prefab":{"prefabName":"StructureLiquidTankBigInsulated","prefabHash":-1430440215,"desc":"","name":"Insulated Liquid Tank Big"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankSmall":{"prefab":{"prefabName":"StructureLiquidTankSmall","prefabHash":1988118157,"desc":"","name":"Liquid Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankSmallInsulated":{"prefab":{"prefabName":"StructureLiquidTankSmallInsulated","prefabHash":608607718,"desc":"","name":"Insulated Liquid Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankStorage":{"prefab":{"prefabName":"StructureLiquidTankStorage","prefabHash":1691898022,"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.","name":"Liquid Tank Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"PrefabHash":"Read","Pressure":"Read","Quantity":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioNitrousOxide":"Read","RatioOxygen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","ReferenceId":"Read","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTurboVolumePump":{"prefab":{"prefabName":"StructureLiquidTurboVolumePump","prefabHash":-1051805505,"desc":"Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"],["PipeLiquid","Input"],["PipeLiquid","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalFemale":{"prefab":{"prefabName":"StructureLiquidUmbilicalFemale","prefabHash":1734723642,"desc":"","name":"Umbilical Socket (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureLiquidUmbilicalFemaleSide","prefabHash":1220870319,"desc":"","name":"Umbilical Socket Angle (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalMale":{"prefab":{"prefabName":"StructureLiquidUmbilicalMale","prefabHash":-1798420047,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureLiquidValve":{"prefab":{"prefabName":"StructureLiquidValve","prefabHash":1849974453,"desc":"","name":"Liquid Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","None"],["PipeLiquid","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidVolumePump":{"prefab":{"prefabName":"StructureLiquidVolumePump","prefabHash":-454028979,"desc":"","name":"Liquid Volume Pump"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Output"],["PipeLiquid","Input"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLockerSmall":{"prefab":{"prefabName":"StructureLockerSmall","prefabHash":-647164662,"desc":"","name":"Locker (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicBatchReader":{"prefab":{"prefabName":"StructureLogicBatchReader","prefabHash":264413729,"desc":"","name":"Batch Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicBatchSlotReader":{"prefab":{"prefabName":"StructureLogicBatchSlotReader","prefabHash":436888930,"desc":"","name":"Batch Slot Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicBatchWriter":{"prefab":{"prefabName":"StructureLogicBatchWriter","prefabHash":1415443359,"desc":"","name":"Batch Writer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","ForceWrite":"Write","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicButton":{"prefab":{"prefabName":"StructureLogicButton","prefabHash":491845673,"desc":"","name":"Button"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Data","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicCompare":{"prefab":{"prefabName":"StructureLogicCompare","prefabHash":-1489728908,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Compare"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicDial":{"prefab":{"prefabName":"StructureLogicDial","prefabHash":554524804,"desc":"An assignable dial with up to 1000 modes.","name":"Dial"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicGate":{"prefab":{"prefabName":"StructureLogicGate","prefabHash":1942143074,"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.","name":"Logic Gate"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicHashGen":{"prefab":{"prefabName":"StructureLogicHashGen","prefabHash":2077593121,"desc":"","name":"Logic Hash Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicMath":{"prefab":{"prefabName":"StructureLogicMath","prefabHash":1657691323,"desc":"0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log","name":"Logic Math"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMathUnary":{"prefab":{"prefabName":"StructureLogicMathUnary","prefabHash":-1160020195,"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","name":"Math Unary"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMemory":{"prefab":{"prefabName":"StructureLogicMemory","prefabHash":-851746783,"desc":"","name":"Logic Memory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicMinMax":{"prefab":{"prefabName":"StructureLogicMinMax","prefabHash":929022276,"desc":"0.Greater\n1.Less","name":"Logic Min/Max"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"modes":{"0":"Greater","1":"Less"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMirror":{"prefab":{"prefabName":"StructureLogicMirror","prefabHash":2096189278,"desc":"","name":"Logic Mirror"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicReader":{"prefab":{"prefabName":"StructureLogicReader","prefabHash":-345383640,"desc":"","name":"Logic Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicReagentReader":{"prefab":{"prefabName":"StructureLogicReagentReader","prefabHash":-124308857,"desc":"","name":"Reagent Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicRocketDownlink":{"prefab":{"prefabName":"StructureLogicRocketDownlink","prefabHash":876108549,"desc":"","name":"Logic Rocket Downlink"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicRocketUplink":{"prefab":{"prefabName":"StructureLogicRocketUplink","prefabHash":546002924,"desc":"","name":"Logic Uplink"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSelect":{"prefab":{"prefabName":"StructureLogicSelect","prefabHash":1822736084,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Select"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSlotReader":{"prefab":{"prefabName":"StructureLogicSlotReader","prefabHash":-767867194,"desc":"","name":"Slot Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSorter":{"prefab":{"prefabName":"StructureLogicSorter","prefabHash":873418029,"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.","name":"Logic Sorter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"All","1":"Any","2":"None"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[["Chute","Output2"],["Chute","Input"],["Chute","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"instructions":{"FilterPrefabHashEquals":{"description":"| 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":{"description":"| 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":{"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 |","typ":"SorterInstruction","value":5},"FilterSlotTypeCompare":{"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 |","typ":"SorterInstruction","value":4},"FilterSortingClassCompare":{"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 |","typ":"SorterInstruction","value":3},"LimitNextExecutionByCount":{"description":"| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |","typ":"SorterInstruction","value":6}},"memoryAccess":"ReadWrite","memorySize":32}},"StructureLogicSwitch":{"prefab":{"prefabName":"StructureLogicSwitch","prefabHash":1220484876,"desc":"","name":"Lever"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicSwitch2":{"prefab":{"prefabName":"StructureLogicSwitch2","prefabHash":321604921,"desc":"","name":"Switch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicTransmitter":{"prefab":{"prefabName":"StructureLogicTransmitter","prefabHash":-693235651,"desc":"Connects to Logic Transmitter","name":"Logic Transmitter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"modes":{"0":"Passive","1":"Active"},"transmissionReceiver":true,"wirelessLogic":true,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Input"],["Data","Input"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicWriter":{"prefab":{"prefabName":"StructureLogicWriter","prefabHash":-1326019434,"desc":"","name":"Logic Writer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","ForceWrite":"Write","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicWriterSwitch":{"prefab":{"prefabName":"StructureLogicWriterSwitch","prefabHash":-1321250424,"desc":"","name":"Logic Writer Switch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","ForceWrite":"Write","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureManualHatch":{"prefab":{"prefabName":"StructureManualHatch","prefabHash":-1808154199,"desc":"Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock.","name":"Manual Hatch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureMediumConvectionRadiator":{"prefab":{"prefabName":"StructureMediumConvectionRadiator","prefabHash":-1918215845,"desc":"A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumConvectionRadiatorLiquid":{"prefab":{"prefabName":"StructureMediumConvectionRadiatorLiquid","prefabHash":-1169014183,"desc":"A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumHangerDoor":{"prefab":{"prefabName":"StructureMediumHangerDoor","prefabHash":-566348148,"desc":"1 x 2 modular door piece for building hangar doors.","name":"Medium Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureMediumRadiator":{"prefab":{"prefabName":"StructureMediumRadiator","prefabHash":-975966237,"desc":"A stand-alone radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRadiatorLiquid":{"prefab":{"prefabName":"StructureMediumRadiatorLiquid","prefabHash":-1141760613,"desc":"A stand-alone liquid radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRocketGasFuelTank":{"prefab":{"prefabName":"StructureMediumRocketGasFuelTank","prefabHash":-1093860567,"desc":"","name":"Gas Capsule Tank Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Output"],["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRocketLiquidFuelTank":{"prefab":{"prefabName":"StructureMediumRocketLiquidFuelTank","prefabHash":1143639539,"desc":"","name":"Liquid Capsule Tank Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Output"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMotionSensor":{"prefab":{"prefabName":"StructureMotionSensor","prefabHash":-1713470563,"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.","name":"Motion Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureNitrolyzer":{"prefab":{"prefabName":"StructureNitrolyzer","prefabHash":1898243702,"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.","name":"Nitrolyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Pipe","Input2"],["Pipe","Output"],["Power","None"]],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureOccupancySensor":{"prefab":{"prefabName":"StructureOccupancySensor","prefabHash":322782515,"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.","name":"Occupancy Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureOverheadShortCornerLocker":{"prefab":{"prefabName":"StructureOverheadShortCornerLocker","prefabHash":-1794932560,"desc":"","name":"Overhead Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureOverheadShortLocker":{"prefab":{"prefabName":"StructureOverheadShortLocker","prefabHash":1468249454,"desc":"","name":"Overhead Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePassiveLargeRadiatorGas":{"prefab":{"prefabName":"StructurePassiveLargeRadiatorGas","prefabHash":2066977095,"desc":"Has been replaced by Medium Convection Radiator.","name":"Medium Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveLargeRadiatorLiquid":{"prefab":{"prefabName":"StructurePassiveLargeRadiatorLiquid","prefabHash":24786172,"desc":"Has been replaced by Medium Convection Radiator Liquid.","name":"Medium Convection Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveLiquidDrain":{"prefab":{"prefabName":"StructurePassiveLiquidDrain","prefabHash":1812364811,"desc":"Moves liquids from a pipe network to the world atmosphere.","name":"Passive Liquid Drain"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveVent":{"prefab":{"prefabName":"StructurePassiveVent","prefabHash":335498166,"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. ","name":"Passive Vent"},"structure":{"smallGrid":true}},"StructurePassiveVentInsulated":{"prefab":{"prefabName":"StructurePassiveVentInsulated","prefabHash":1363077139,"desc":"","name":"Insulated Passive Vent"},"structure":{"smallGrid":true}},"StructurePassthroughHeatExchangerGasToGas":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerGasToGas","prefabHash":-1674187440,"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.","name":"CounterFlow Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Input2"],["Pipe","Output"],["Pipe","Output2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassthroughHeatExchangerGasToLiquid":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerGasToLiquid","prefabHash":1928991265,"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.","name":"CounterFlow Heat Exchanger - Gas + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["PipeLiquid","Input2"],["Pipe","Output"],["PipeLiquid","Output2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassthroughHeatExchangerLiquidToLiquid":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerLiquidToLiquid","prefabHash":-1472829583,"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.","name":"CounterFlow Heat Exchanger - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Input2"],["PipeLiquid","Output"],["PipeLiquid","Output2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePictureFrameThickLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThickLandscapeLarge","prefabHash":-1434523206,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThickLandscapeSmall","prefabHash":-2041566697,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThickMountLandscapeLarge","prefabHash":950004659,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThickMountLandscapeSmall","prefabHash":347154462,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThickMountPortraitLarge","prefabHash":-1459641358,"desc":"","name":"Picture Frame Thick Mount Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThickMountPortraitSmall","prefabHash":-2066653089,"desc":"","name":"Picture Frame Thick Mount Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThickPortraitLarge","prefabHash":-1686949570,"desc":"","name":"Picture Frame Thick Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThickPortraitSmall","prefabHash":-1218579821,"desc":"","name":"Picture Frame Thick Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThinLandscapeLarge","prefabHash":-1418288625,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThinLandscapeSmall","prefabHash":-2024250974,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThinMountLandscapeLarge","prefabHash":-1146760430,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThinMountLandscapeSmall","prefabHash":-1752493889,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThinMountPortraitLarge","prefabHash":1094895077,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThinMountPortraitSmall","prefabHash":1835796040,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThinPortraitLarge","prefabHash":1212777087,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThinPortraitSmall","prefabHash":1684488658,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"smallGrid":true}},"StructurePipeAnalysizer":{"prefab":{"prefabName":"StructurePipeAnalysizer","prefabHash":435685051,"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.","name":"Pipe Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePipeCorner":{"prefab":{"prefabName":"StructurePipeCorner","prefabHash":-1785673561,"desc":"You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Corner)"},"structure":{"smallGrid":true}},"StructurePipeCowl":{"prefab":{"prefabName":"StructurePipeCowl","prefabHash":465816159,"desc":"","name":"Pipe Cowl"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction":{"prefab":{"prefabName":"StructurePipeCrossJunction","prefabHash":-1405295588,"desc":"You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction3":{"prefab":{"prefabName":"StructurePipeCrossJunction3","prefabHash":2038427184,"desc":"You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction4":{"prefab":{"prefabName":"StructurePipeCrossJunction4","prefabHash":-417629293,"desc":"You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction5":{"prefab":{"prefabName":"StructurePipeCrossJunction5","prefabHash":-1877193979,"desc":"You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction6":{"prefab":{"prefabName":"StructurePipeCrossJunction6","prefabHash":152378047,"desc":"You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeHeater":{"prefab":{"prefabName":"StructurePipeHeater","prefabHash":-419758574,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePipeIgniter":{"prefab":{"prefabName":"StructurePipeIgniter","prefabHash":1286441942,"desc":"Ignites the atmosphere inside the attached pipe network.","name":"Pipe Igniter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeInsulatedLiquidCrossJunction":{"prefab":{"prefabName":"StructurePipeInsulatedLiquidCrossJunction","prefabHash":-2068497073,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeLabel":{"prefab":{"prefabName":"StructurePipeLabel","prefabHash":-999721119,"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.","name":"Pipe Label"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeLiquidCorner":{"prefab":{"prefabName":"StructurePipeLiquidCorner","prefabHash":-1856720921,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Corner)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction","prefabHash":1848735691,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction3":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction3","prefabHash":1628087508,"desc":"You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction4":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction4","prefabHash":-9555593,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction5":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction5","prefabHash":-2006384159,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction6":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction6","prefabHash":291524699,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidStraight":{"prefab":{"prefabName":"StructurePipeLiquidStraight","prefabHash":667597982,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Straight)"},"structure":{"smallGrid":true}},"StructurePipeLiquidTJunction":{"prefab":{"prefabName":"StructurePipeLiquidTJunction","prefabHash":262616717,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructurePipeMeter":{"prefab":{"prefabName":"StructurePipeMeter","prefabHash":-1798362329,"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\"","name":"Pipe Meter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeOneWayValve":{"prefab":{"prefabName":"StructurePipeOneWayValve","prefabHash":1580412404,"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","name":"One Way Valve (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeOrgan":{"prefab":{"prefabName":"StructurePipeOrgan","prefabHash":1305252611,"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.","name":"Pipe Organ"},"structure":{"smallGrid":true}},"StructurePipeRadiator":{"prefab":{"prefabName":"StructurePipeRadiator","prefabHash":1696603168,"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.","name":"Pipe Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeRadiatorFlat":{"prefab":{"prefabName":"StructurePipeRadiatorFlat","prefabHash":-399883995,"desc":"A pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeRadiatorFlatLiquid":{"prefab":{"prefabName":"StructurePipeRadiatorFlatLiquid","prefabHash":2024754523,"desc":"A liquid pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeStraight":{"prefab":{"prefabName":"StructurePipeStraight","prefabHash":73728932,"desc":"You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Straight)"},"structure":{"smallGrid":true}},"StructurePipeTJunction":{"prefab":{"prefabName":"StructurePipeTJunction","prefabHash":-913817472,"desc":"You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructurePlanter":{"prefab":{"prefabName":"StructurePlanter","prefabHash":-1125641329,"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).","name":"Planter"},"structure":{"smallGrid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Plant","typ":"Plant"}]},"StructurePlatformLadderOpen":{"prefab":{"prefabName":"StructurePlatformLadderOpen","prefabHash":1559586682,"desc":"","name":"Ladder Platform"},"structure":{"smallGrid":false}},"StructurePlinth":{"prefab":{"prefabName":"StructurePlinth","prefabHash":989835703,"desc":"","name":"Plinth"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructurePortablesConnector":{"prefab":{"prefabName":"StructurePortablesConnector","prefabHash":-899013427,"desc":"","name":"Portables Connector"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Maximum":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"}],"device":{"connectionList":[["Pipe","Input"],["PipeLiquid","Input2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePowerConnector":{"prefab":{"prefabName":"StructurePowerConnector","prefabHash":-782951720,"desc":"Attaches a Kit (Portable Generator) to a power network.","name":"Power Connector"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Portable Slot","typ":"None"}],"device":{"connectionList":[["Power","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePowerTransmitter":{"prefab":{"prefabName":"StructurePowerTransmitter","prefabHash":-65087121,"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.","name":"Microwave Power Transmitter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerTransmitterOmni":{"prefab":{"prefabName":"StructurePowerTransmitterOmni","prefabHash":-327468845,"desc":"","name":"Power Transmitter Omni"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerTransmitterReceiver":{"prefab":{"prefabName":"StructurePowerTransmitterReceiver","prefabHash":1195820278,"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","name":"Microwave Power Receiver"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalFemale":{"prefab":{"prefabName":"StructurePowerUmbilicalFemale","prefabHash":101488029,"desc":"","name":"Umbilical Socket (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalFemaleSide":{"prefab":{"prefabName":"StructurePowerUmbilicalFemaleSide","prefabHash":1922506192,"desc":"","name":"Umbilical Socket Angle (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalMale":{"prefab":{"prefabName":"StructurePowerUmbilicalMale","prefabHash":1529453938,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructurePoweredVent":{"prefab":{"prefabName":"StructurePoweredVent","prefabHash":938836756,"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.","name":"Powered Vent"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureExternal":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePoweredVentLarge":{"prefab":{"prefabName":"StructurePoweredVentLarge","prefabHash":-785498334,"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.","name":"Powered Vent Large"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureExternal":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressurantValve":{"prefab":{"prefabName":"StructurePressurantValve","prefabHash":23052817,"desc":"Pumps gas into a liquid pipe in order to raise the pressure","name":"Pressurant Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["PipeLiquid","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressureFedGasEngine":{"prefab":{"prefabName":"StructurePressureFedGasEngine","prefabHash":-624011170,"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.","name":"Pressure Fed Gas Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Input2"],["PowerAndData","Output"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressureFedLiquidEngine":{"prefab":{"prefabName":"StructurePressureFedLiquidEngine","prefabHash":379750958,"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.","name":"Pressure Fed Liquid Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Input2"],["PowerAndData","Output"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateLarge":{"prefab":{"prefabName":"StructurePressurePlateLarge","prefabHash":-2008706143,"desc":"","name":"Trigger Plate (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateMedium":{"prefab":{"prefabName":"StructurePressurePlateMedium","prefabHash":1269458680,"desc":"","name":"Trigger Plate (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateSmall":{"prefab":{"prefabName":"StructurePressurePlateSmall","prefabHash":-1536471028,"desc":"","name":"Trigger Plate (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressureRegulator":{"prefab":{"prefabName":"StructurePressureRegulator","prefabHash":209854039,"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.","name":"Pressure Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureProximitySensor":{"prefab":{"prefabName":"StructureProximitySensor","prefabHash":568800213,"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.","name":"Proximity Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePumpedLiquidEngine":{"prefab":{"prefabName":"StructurePumpedLiquidEngine","prefabHash":-2031440019,"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","name":"Pumped Liquid Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","None"],["PipeLiquid","None"],["PowerAndData","Output"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePurgeValve":{"prefab":{"prefabName":"StructurePurgeValve","prefabHash":-737232128,"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.","name":"Purge Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["Pipe","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRailing":{"prefab":{"prefabName":"StructureRailing","prefabHash":-1756913871,"desc":"\"Safety third.\"","name":"Railing Industrial (Type 1)"},"structure":{"smallGrid":false}},"StructureRecycler":{"prefab":{"prefabName":"StructureRecycler","prefabHash":-1633947337,"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.","name":"Recycler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureRefrigeratedVendingMachine":{"prefab":{"prefabName":"StructureRefrigeratedVendingMachine","prefabHash":-1577831321,"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. ","name":"Refrigerated Vending Machine"},"structure":{"smallGrid":true},"logic":{"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":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureReinforcedCompositeWindow":{"prefab":{"prefabName":"StructureReinforcedCompositeWindow","prefabHash":2027713511,"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.","name":"Reinforced Window (Composite)"},"structure":{"smallGrid":false}},"StructureReinforcedCompositeWindowSteel":{"prefab":{"prefabName":"StructureReinforcedCompositeWindowSteel","prefabHash":-816454272,"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.","name":"Reinforced Window (Composite Steel)"},"structure":{"smallGrid":false}},"StructureReinforcedWallPaddedWindow":{"prefab":{"prefabName":"StructureReinforcedWallPaddedWindow","prefabHash":1939061729,"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.","name":"Reinforced Window (Padded)"},"structure":{"smallGrid":false}},"StructureReinforcedWallPaddedWindowThin":{"prefab":{"prefabName":"StructureReinforcedWallPaddedWindowThin","prefabHash":158502707,"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.","name":"Reinforced Window (Thin)"},"structure":{"smallGrid":false}},"StructureResearchMachine":{"prefab":{"prefabName":"StructureResearchMachine","prefabHash":-796627526,"desc":"","name":"Research Machine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"],["Pipe","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureRocketAvionics":{"prefab":{"prefabName":"StructureRocketAvionics","prefabHash":808389066,"desc":"","name":"Rocket Avionics"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureRocketCelestialTracker":{"prefab":{"prefabName":"StructureRocketCelestialTracker","prefabHash":997453927,"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.","name":"Rocket Celestial Tracker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"CelestialHash":"Read","Error":"Read","Horizontal":"Read","Index":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Vertical":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"instructions":{"BodyOrientation":{"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 |","typ":"CelestialTracking","value":1}},"memoryAccess":"Read","memorySize":12}},"StructureRocketCircuitHousing":{"prefab":{"prefabName":"StructureRocketCircuitHousing","prefabHash":150135861,"desc":"","name":"Rocket Circuit Housing"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","LineNumber":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","LineNumber":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[["PowerAndData","Input"]],"devicePinsLength":6,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"StructureRocketEngineTiny":{"prefab":{"prefabName":"StructureRocketEngineTiny","prefabHash":178472613,"desc":"","name":"Rocket Engine (Tiny)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketManufactory":{"prefab":{"prefabName":"StructureRocketManufactory","prefabHash":1781051034,"desc":"","name":"Rocket Manufactory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureRocketMiner":{"prefab":{"prefabName":"StructureRocketMiner","prefabHash":-2087223687,"desc":"Gathers available resources at the rocket's current space location.","name":"Rocket Miner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"ClearMemory":"Write","DrillCondition":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"},{"name":"Drill Head Slot","typ":"DrillHead"}],"device":{"connectionList":[["Chute","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketScanner":{"prefab":{"prefabName":"StructureRocketScanner","prefabHash":2014252591,"desc":"","name":"Rocket Scanner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Scanner Head Slot","typ":"ScanningHead"}],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketTower":{"prefab":{"prefabName":"StructureRocketTower","prefabHash":-654619479,"desc":"","name":"Launch Tower"},"structure":{"smallGrid":false}},"StructureRocketTransformerSmall":{"prefab":{"prefabName":"StructureRocketTransformerSmall","prefabHash":518925193,"desc":"","name":"Transformer Small (Rocket)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","Input"],["Power","Output"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRover":{"prefab":{"prefabName":"StructureRover","prefabHash":806513938,"desc":"","name":"Rover Frame"},"structure":{"smallGrid":false}},"StructureSDBHopper":{"prefab":{"prefabName":"StructureSDBHopper","prefabHash":-1875856925,"desc":"","name":"SDB Hopper"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSDBHopperAdvanced":{"prefab":{"prefabName":"StructureSDBHopperAdvanced","prefabHash":467225612,"desc":"","name":"SDB Hopper Advanced"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[["Data","None"],["Power","None"],["Chute","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSDBSilo":{"prefab":{"prefabName":"StructureSDBSilo","prefabHash":1155865682,"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.","name":"SDB Silo"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSatelliteDish":{"prefab":{"prefabName":"StructureSatelliteDish","prefabHash":439026183,"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.","name":"Medium Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSecurityPrinter":{"prefab":{"prefabName":"StructureSecurityPrinter","prefabHash":-641491515,"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","name":"Security Printer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureShelf":{"prefab":{"prefabName":"StructureShelf","prefabHash":1172114950,"desc":"","name":"Shelf"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"StructureShelfMedium":{"prefab":{"prefabName":"StructureShelfMedium","prefabHash":182006674,"desc":"A shelf for putting things on, so you can see them.","name":"Shelf Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShortCornerLocker":{"prefab":{"prefabName":"StructureShortCornerLocker","prefabHash":1330754486,"desc":"","name":"Short Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShortLocker":{"prefab":{"prefabName":"StructureShortLocker","prefabHash":-554553467,"desc":"","name":"Short Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShower":{"prefab":{"prefabName":"StructureShower","prefabHash":-775128944,"desc":"","name":"Shower"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Maximum":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Output"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShowerPowered":{"prefab":{"prefabName":"StructureShowerPowered","prefabHash":-1081797501,"desc":"","name":"Shower (Powered)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"],["PipeLiquid","Output"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSign1x1":{"prefab":{"prefabName":"StructureSign1x1","prefabHash":879058460,"desc":"","name":"Sign 1x1"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSign2x1":{"prefab":{"prefabName":"StructureSign2x1","prefabHash":908320837,"desc":"","name":"Sign 2x1"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSingleBed":{"prefab":{"prefabName":"StructureSingleBed","prefabHash":-492611,"desc":"Description coming.","name":"Single Bed"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSleeper":{"prefab":{"prefabName":"StructureSleeper","prefabHash":-1467449329,"desc":"","name":"Sleeper"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperLeft":{"prefab":{"prefabName":"StructureSleeperLeft","prefabHash":1213495833,"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.","name":"Sleeper Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperRight":{"prefab":{"prefabName":"StructureSleeperRight","prefabHash":-1812330717,"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.","name":"Sleeper Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperVertical":{"prefab":{"prefabName":"StructureSleeperVertical","prefabHash":-1300059018,"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.","name":"Sleeper Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperVerticalDroid":{"prefab":{"prefabName":"StructureSleeperVerticalDroid","prefabHash":1382098999,"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.","name":"Droid Sleeper Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSmallDirectHeatExchangeGastoGas":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeGastoGas","prefabHash":1310303582,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Input2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallDirectHeatExchangeLiquidtoGas":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeLiquidtoGas","prefabHash":1825212016,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Gas "},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["Pipe","Input2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeLiquidtoLiquid","prefabHash":-507770416,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Input2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallSatelliteDish":{"prefab":{"prefabName":"StructureSmallSatelliteDish","prefabHash":-2138748650,"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.","name":"Small Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSmallTableBacklessDouble":{"prefab":{"prefabName":"StructureSmallTableBacklessDouble","prefabHash":-1633000411,"desc":"","name":"Small (Table Backless Double)"},"structure":{"smallGrid":true}},"StructureSmallTableBacklessSingle":{"prefab":{"prefabName":"StructureSmallTableBacklessSingle","prefabHash":-1897221677,"desc":"","name":"Small (Table Backless Single)"},"structure":{"smallGrid":true}},"StructureSmallTableDinnerSingle":{"prefab":{"prefabName":"StructureSmallTableDinnerSingle","prefabHash":1260651529,"desc":"","name":"Small (Table Dinner Single)"},"structure":{"smallGrid":true}},"StructureSmallTableRectangleDouble":{"prefab":{"prefabName":"StructureSmallTableRectangleDouble","prefabHash":-660451023,"desc":"","name":"Small (Table Rectangle Double)"},"structure":{"smallGrid":true}},"StructureSmallTableRectangleSingle":{"prefab":{"prefabName":"StructureSmallTableRectangleSingle","prefabHash":-924678969,"desc":"","name":"Small (Table Rectangle Single)"},"structure":{"smallGrid":true}},"StructureSmallTableThickDouble":{"prefab":{"prefabName":"StructureSmallTableThickDouble","prefabHash":-19246131,"desc":"","name":"Small (Table Thick Double)"},"structure":{"smallGrid":true}},"StructureSmallTableThickSingle":{"prefab":{"prefabName":"StructureSmallTableThickSingle","prefabHash":-291862981,"desc":"","name":"Small Table (Thick Single)"},"structure":{"smallGrid":true}},"StructureSolarPanel":{"prefab":{"prefabName":"StructureSolarPanel","prefabHash":-2045627372,"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.","name":"Solar Panel"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanel45":{"prefab":{"prefabName":"StructureSolarPanel45","prefabHash":-1554349863,"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.","name":"Solar Panel (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanel45Reinforced":{"prefab":{"prefabName":"StructureSolarPanel45Reinforced","prefabHash":930865127,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelDual":{"prefab":{"prefabName":"StructureSolarPanelDual","prefabHash":-539224550,"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.","name":"Solar Panel (Dual)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelDualReinforced":{"prefab":{"prefabName":"StructureSolarPanelDualReinforced","prefabHash":-1545574413,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Dual)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelFlat":{"prefab":{"prefabName":"StructureSolarPanelFlat","prefabHash":1968102968,"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.","name":"Solar Panel (Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelFlatReinforced":{"prefab":{"prefabName":"StructureSolarPanelFlatReinforced","prefabHash":1697196770,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelReinforced":{"prefab":{"prefabName":"StructureSolarPanelReinforced","prefabHash":-934345724,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolidFuelGenerator":{"prefab":{"prefabName":"StructureSolidFuelGenerator","prefabHash":813146305,"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.","name":"Generator (Solid Fuel)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","On":"ReadWrite","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"modes":{"0":"Not Generating","1":"Generating"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Input","typ":"Ore"}],"device":{"connectionList":[["Chute","Input"],["Data","None"],["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSorter":{"prefab":{"prefabName":"StructureSorter","prefabHash":-1009150565,"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.","name":"Sorter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[["Chute","Output2"],["Chute","Input"],["Chute","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStacker":{"prefab":{"prefabName":"StructureStacker","prefabHash":-2020231820,"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.","name":"Stacker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Processing","typ":"None"}],"device":{"connectionList":[["PowerAndData","None"],["Chute","Output"],["Chute","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStackerReverse":{"prefab":{"prefabName":"StructureStackerReverse","prefabHash":1585641623,"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.","name":"Stacker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["PowerAndData","None"],["Chute","Output"],["Chute","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStairs4x2":{"prefab":{"prefabName":"StructureStairs4x2","prefabHash":1405018945,"desc":"","name":"Stairs"},"structure":{"smallGrid":false}},"StructureStairs4x2RailL":{"prefab":{"prefabName":"StructureStairs4x2RailL","prefabHash":155214029,"desc":"","name":"Stairs with Rail (Left)"},"structure":{"smallGrid":false}},"StructureStairs4x2RailR":{"prefab":{"prefabName":"StructureStairs4x2RailR","prefabHash":-212902482,"desc":"","name":"Stairs with Rail (Right)"},"structure":{"smallGrid":false}},"StructureStairs4x2Rails":{"prefab":{"prefabName":"StructureStairs4x2Rails","prefabHash":-1088008720,"desc":"","name":"Stairs with Rails"},"structure":{"smallGrid":false}},"StructureStairwellBackLeft":{"prefab":{"prefabName":"StructureStairwellBackLeft","prefabHash":505924160,"desc":"","name":"Stairwell (Back Left)"},"structure":{"smallGrid":false}},"StructureStairwellBackPassthrough":{"prefab":{"prefabName":"StructureStairwellBackPassthrough","prefabHash":-862048392,"desc":"","name":"Stairwell (Back Passthrough)"},"structure":{"smallGrid":false}},"StructureStairwellBackRight":{"prefab":{"prefabName":"StructureStairwellBackRight","prefabHash":-2128896573,"desc":"","name":"Stairwell (Back Right)"},"structure":{"smallGrid":false}},"StructureStairwellFrontLeft":{"prefab":{"prefabName":"StructureStairwellFrontLeft","prefabHash":-37454456,"desc":"","name":"Stairwell (Front Left)"},"structure":{"smallGrid":false}},"StructureStairwellFrontPassthrough":{"prefab":{"prefabName":"StructureStairwellFrontPassthrough","prefabHash":-1625452928,"desc":"","name":"Stairwell (Front Passthrough)"},"structure":{"smallGrid":false}},"StructureStairwellFrontRight":{"prefab":{"prefabName":"StructureStairwellFrontRight","prefabHash":340210934,"desc":"","name":"Stairwell (Front Right)"},"structure":{"smallGrid":false}},"StructureStairwellNoDoors":{"prefab":{"prefabName":"StructureStairwellNoDoors","prefabHash":2049879875,"desc":"","name":"Stairwell (No Doors)"},"structure":{"smallGrid":false}},"StructureStirlingEngine":{"prefab":{"prefabName":"StructureStirlingEngine","prefabHash":-260316435,"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.","name":"Stirling Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Pipe","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStorageLocker":{"prefab":{"prefabName":"StructureStorageLocker","prefabHash":-793623899,"desc":"","name":"Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSuitStorage":{"prefab":{"prefabName":"StructureSuitStorage","prefabHash":255034731,"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.","name":"Suit Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Helmet","typ":"Helmet"},{"name":"Suit","typ":"Suit"},{"name":"Back","typ":"Back"}],"device":{"connectionList":[["Data","None"],["Power","None"],["Pipe","Input"],["Pipe","Input2"],["Pipe","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTankBig":{"prefab":{"prefabName":"StructureTankBig","prefabHash":-1606848156,"desc":"","name":"Large Tank"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankBigInsulated":{"prefab":{"prefabName":"StructureTankBigInsulated","prefabHash":1280378227,"desc":"","name":"Tank Big (Insulated)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankConnector":{"prefab":{"prefabName":"StructureTankConnector","prefabHash":-1276379454,"desc":"Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network.","name":"Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructureTankConnectorLiquid":{"prefab":{"prefabName":"StructureTankConnectorLiquid","prefabHash":1331802518,"desc":"These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network.","name":"Liquid Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureTankSmall":{"prefab":{"prefabName":"StructureTankSmall","prefabHash":1013514688,"desc":"","name":"Small Tank"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallAir":{"prefab":{"prefabName":"StructureTankSmallAir","prefabHash":955744474,"desc":"","name":"Small Tank (Air)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallFuel":{"prefab":{"prefabName":"StructureTankSmallFuel","prefabHash":2102454415,"desc":"","name":"Small Tank (Fuel)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallInsulated":{"prefab":{"prefabName":"StructureTankSmallInsulated","prefabHash":272136332,"desc":"","name":"Tank Small (Insulated)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureToolManufactory":{"prefab":{"prefabName":"StructureToolManufactory","prefabHash":-465741100,"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.","name":"Tool Manufactory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureTorpedoRack":{"prefab":{"prefabName":"StructureTorpedoRack","prefabHash":1473807953,"desc":"","name":"Torpedo Rack"},"structure":{"smallGrid":true},"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"}]},"StructureTraderWaypoint":{"prefab":{"prefabName":"StructureTraderWaypoint","prefabHash":1570931620,"desc":"","name":"Trader Waypoint"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformer":{"prefab":{"prefabName":"StructureTransformer","prefabHash":-1423212473,"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.","name":"Transformer (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","Input"],["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerMedium":{"prefab":{"prefabName":"StructureTransformerMedium","prefabHash":-1065725831,"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.","name":"Transformer (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","Input"],["PowerAndData","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerMediumReversed":{"prefab":{"prefabName":"StructureTransformerMediumReversed","prefabHash":833912764,"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.","name":"Transformer Reversed (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","Output"],["PowerAndData","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerSmall":{"prefab":{"prefabName":"StructureTransformerSmall","prefabHash":-890946730,"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.","name":"Transformer (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","Input"],["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerSmallReversed":{"prefab":{"prefabName":"StructureTransformerSmallReversed","prefabHash":1054059374,"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.","name":"Transformer Reversed (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","Output"],["PowerAndData","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTurbineGenerator":{"prefab":{"prefabName":"StructureTurbineGenerator","prefabHash":1282191063,"desc":"","name":"Turbine Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureTurboVolumePump":{"prefab":{"prefabName":"StructureTurboVolumePump","prefabHash":1310794736,"desc":"Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"],["Pipe","Output"],["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureUnloader":{"prefab":{"prefabName":"StructureUnloader","prefabHash":750118160,"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.","name":"Unloader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["PowerAndData","None"],["Chute","Output"],["Chute","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureUprightWindTurbine":{"prefab":{"prefabName":"StructureUprightWindTurbine","prefabHash":1622183451,"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.","name":"Upright Wind Turbine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureValve":{"prefab":{"prefabName":"StructureValve","prefabHash":-692036078,"desc":"","name":"Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","None"],["Pipe","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureVendingMachine":{"prefab":{"prefabName":"StructureVendingMachine","prefabHash":-443130773,"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.","name":"Vending Machine"},"structure":{"smallGrid":true},"logic":{"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":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureVolumePump":{"prefab":{"prefabName":"StructureVolumePump","prefabHash":-321403609,"desc":"The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks.","name":"Volume Pump"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Output"],["Pipe","Input"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallArch":{"prefab":{"prefabName":"StructureWallArch","prefabHash":-858143148,"desc":"","name":"Wall (Arch)"},"structure":{"smallGrid":false}},"StructureWallArchArrow":{"prefab":{"prefabName":"StructureWallArchArrow","prefabHash":1649708822,"desc":"","name":"Wall (Arch Arrow)"},"structure":{"smallGrid":false}},"StructureWallArchCornerRound":{"prefab":{"prefabName":"StructureWallArchCornerRound","prefabHash":1794588890,"desc":"","name":"Wall (Arch Corner Round)"},"structure":{"smallGrid":true}},"StructureWallArchCornerSquare":{"prefab":{"prefabName":"StructureWallArchCornerSquare","prefabHash":-1963016580,"desc":"","name":"Wall (Arch Corner Square)"},"structure":{"smallGrid":true}},"StructureWallArchCornerTriangle":{"prefab":{"prefabName":"StructureWallArchCornerTriangle","prefabHash":1281911841,"desc":"","name":"Wall (Arch Corner Triangle)"},"structure":{"smallGrid":true}},"StructureWallArchPlating":{"prefab":{"prefabName":"StructureWallArchPlating","prefabHash":1182510648,"desc":"","name":"Wall (Arch Plating)"},"structure":{"smallGrid":false}},"StructureWallArchTwoTone":{"prefab":{"prefabName":"StructureWallArchTwoTone","prefabHash":782529714,"desc":"","name":"Wall (Arch Two Tone)"},"structure":{"smallGrid":false}},"StructureWallCooler":{"prefab":{"prefabName":"StructureWallCooler","prefabHash":-739292323,"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.","name":"Wall Cooler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[["Pipe","None"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallFlat":{"prefab":{"prefabName":"StructureWallFlat","prefabHash":1635864154,"desc":"","name":"Wall (Flat)"},"structure":{"smallGrid":false}},"StructureWallFlatCornerRound":{"prefab":{"prefabName":"StructureWallFlatCornerRound","prefabHash":898708250,"desc":"","name":"Wall (Flat Corner Round)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerSquare":{"prefab":{"prefabName":"StructureWallFlatCornerSquare","prefabHash":298130111,"desc":"","name":"Wall (Flat Corner Square)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerTriangle":{"prefab":{"prefabName":"StructureWallFlatCornerTriangle","prefabHash":2097419366,"desc":"","name":"Wall (Flat Corner Triangle)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerTriangleFlat":{"prefab":{"prefabName":"StructureWallFlatCornerTriangleFlat","prefabHash":-1161662836,"desc":"","name":"Wall (Flat Corner Triangle Flat)"},"structure":{"smallGrid":true}},"StructureWallGeometryCorner":{"prefab":{"prefabName":"StructureWallGeometryCorner","prefabHash":1979212240,"desc":"","name":"Wall (Geometry Corner)"},"structure":{"smallGrid":false}},"StructureWallGeometryStreight":{"prefab":{"prefabName":"StructureWallGeometryStreight","prefabHash":1049735537,"desc":"","name":"Wall (Geometry Straight)"},"structure":{"smallGrid":false}},"StructureWallGeometryT":{"prefab":{"prefabName":"StructureWallGeometryT","prefabHash":1602758612,"desc":"","name":"Wall (Geometry T)"},"structure":{"smallGrid":false}},"StructureWallGeometryTMirrored":{"prefab":{"prefabName":"StructureWallGeometryTMirrored","prefabHash":-1427845483,"desc":"","name":"Wall (Geometry T Mirrored)"},"structure":{"smallGrid":false}},"StructureWallHeater":{"prefab":{"prefabName":"StructureWallHeater","prefabHash":24258244,"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.","name":"Wall Heater"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallIron":{"prefab":{"prefabName":"StructureWallIron","prefabHash":1287324802,"desc":"","name":"Iron Wall (Type 1)"},"structure":{"smallGrid":false}},"StructureWallIron02":{"prefab":{"prefabName":"StructureWallIron02","prefabHash":1485834215,"desc":"","name":"Iron Wall (Type 2)"},"structure":{"smallGrid":false}},"StructureWallIron03":{"prefab":{"prefabName":"StructureWallIron03","prefabHash":798439281,"desc":"","name":"Iron Wall (Type 3)"},"structure":{"smallGrid":false}},"StructureWallIron04":{"prefab":{"prefabName":"StructureWallIron04","prefabHash":-1309433134,"desc":"","name":"Iron Wall (Type 4)"},"structure":{"smallGrid":false}},"StructureWallLargePanel":{"prefab":{"prefabName":"StructureWallLargePanel","prefabHash":1492930217,"desc":"","name":"Wall (Large Panel)"},"structure":{"smallGrid":false}},"StructureWallLargePanelArrow":{"prefab":{"prefabName":"StructureWallLargePanelArrow","prefabHash":-776581573,"desc":"","name":"Wall (Large Panel Arrow)"},"structure":{"smallGrid":false}},"StructureWallLight":{"prefab":{"prefabName":"StructureWallLight","prefabHash":-1860064656,"desc":"","name":"Wall Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallLightBattery":{"prefab":{"prefabName":"StructureWallLightBattery","prefabHash":-1306415132,"desc":"","name":"Wall Light (Battery)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallPaddedArch":{"prefab":{"prefabName":"StructureWallPaddedArch","prefabHash":1590330637,"desc":"","name":"Wall (Padded Arch)"},"structure":{"smallGrid":false}},"StructureWallPaddedArchCorner":{"prefab":{"prefabName":"StructureWallPaddedArchCorner","prefabHash":-1126688298,"desc":"","name":"Wall (Padded Arch Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedArchLightFittingTop":{"prefab":{"prefabName":"StructureWallPaddedArchLightFittingTop","prefabHash":1171987947,"desc":"","name":"Wall (Padded Arch Light Fitting Top)"},"structure":{"smallGrid":false}},"StructureWallPaddedArchLightsFittings":{"prefab":{"prefabName":"StructureWallPaddedArchLightsFittings","prefabHash":-1546743960,"desc":"","name":"Wall (Padded Arch Lights Fittings)"},"structure":{"smallGrid":false}},"StructureWallPaddedCorner":{"prefab":{"prefabName":"StructureWallPaddedCorner","prefabHash":-155945899,"desc":"","name":"Wall (Padded Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedCornerThin":{"prefab":{"prefabName":"StructureWallPaddedCornerThin","prefabHash":1183203913,"desc":"","name":"Wall (Padded Corner Thin)"},"structure":{"smallGrid":true}},"StructureWallPaddedNoBorder":{"prefab":{"prefabName":"StructureWallPaddedNoBorder","prefabHash":8846501,"desc":"","name":"Wall (Padded No Border)"},"structure":{"smallGrid":false}},"StructureWallPaddedNoBorderCorner":{"prefab":{"prefabName":"StructureWallPaddedNoBorderCorner","prefabHash":179694804,"desc":"","name":"Wall (Padded No Border Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedThinNoBorder":{"prefab":{"prefabName":"StructureWallPaddedThinNoBorder","prefabHash":-1611559100,"desc":"","name":"Wall (Padded Thin No Border)"},"structure":{"smallGrid":false}},"StructureWallPaddedThinNoBorderCorner":{"prefab":{"prefabName":"StructureWallPaddedThinNoBorderCorner","prefabHash":1769527556,"desc":"","name":"Wall (Padded Thin No Border Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedWindow":{"prefab":{"prefabName":"StructureWallPaddedWindow","prefabHash":2087628940,"desc":"","name":"Wall (Padded Window)"},"structure":{"smallGrid":false}},"StructureWallPaddedWindowThin":{"prefab":{"prefabName":"StructureWallPaddedWindowThin","prefabHash":-37302931,"desc":"","name":"Wall (Padded Window Thin)"},"structure":{"smallGrid":false}},"StructureWallPadding":{"prefab":{"prefabName":"StructureWallPadding","prefabHash":635995024,"desc":"","name":"Wall (Padding)"},"structure":{"smallGrid":false}},"StructureWallPaddingArchVent":{"prefab":{"prefabName":"StructureWallPaddingArchVent","prefabHash":-1243329828,"desc":"","name":"Wall (Padding Arch Vent)"},"structure":{"smallGrid":false}},"StructureWallPaddingLightFitting":{"prefab":{"prefabName":"StructureWallPaddingLightFitting","prefabHash":2024882687,"desc":"","name":"Wall (Padding Light Fitting)"},"structure":{"smallGrid":false}},"StructureWallPaddingThin":{"prefab":{"prefabName":"StructureWallPaddingThin","prefabHash":-1102403554,"desc":"","name":"Wall (Padding Thin)"},"structure":{"smallGrid":false}},"StructureWallPlating":{"prefab":{"prefabName":"StructureWallPlating","prefabHash":26167457,"desc":"","name":"Wall (Plating)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsAndHatch":{"prefab":{"prefabName":"StructureWallSmallPanelsAndHatch","prefabHash":619828719,"desc":"","name":"Wall (Small Panels And Hatch)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsArrow":{"prefab":{"prefabName":"StructureWallSmallPanelsArrow","prefabHash":-639306697,"desc":"","name":"Wall (Small Panels Arrow)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsMonoChrome":{"prefab":{"prefabName":"StructureWallSmallPanelsMonoChrome","prefabHash":386820253,"desc":"","name":"Wall (Small Panels Mono Chrome)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsOpen":{"prefab":{"prefabName":"StructureWallSmallPanelsOpen","prefabHash":-1407480603,"desc":"","name":"Wall (Small Panels Open)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsTwoTone":{"prefab":{"prefabName":"StructureWallSmallPanelsTwoTone","prefabHash":1709994581,"desc":"","name":"Wall (Small Panels Two Tone)"},"structure":{"smallGrid":false}},"StructureWallVent":{"prefab":{"prefabName":"StructureWallVent","prefabHash":-1177469307,"desc":"Used to mix atmospheres passively between two walls.","name":"Wall Vent"},"structure":{"smallGrid":true}},"StructureWaterBottleFiller":{"prefab":{"prefabName":"StructureWaterBottleFiller","prefabHash":-1178961954,"desc":"","name":"Water Bottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[["PipeLiquid","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerBottom":{"prefab":{"prefabName":"StructureWaterBottleFillerBottom","prefabHash":1433754995,"desc":"","name":"Water Bottle Filler Bottom"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[["PipeLiquid","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerPowered":{"prefab":{"prefabName":"StructureWaterBottleFillerPowered","prefabHash":-756587791,"desc":"","name":"Waterbottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[["PipeLiquid","Input"],["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerPoweredBottom":{"prefab":{"prefabName":"StructureWaterBottleFillerPoweredBottom","prefabHash":1986658780,"desc":"","name":"Waterbottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[["PipeLiquid","None"],["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterDigitalValve":{"prefab":{"prefabName":"StructureWaterDigitalValve","prefabHash":-517628750,"desc":"","name":"Liquid Digital Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Output"],["PipeLiquid","Input"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterPipeMeter":{"prefab":{"prefabName":"StructureWaterPipeMeter","prefabHash":433184168,"desc":"","name":"Liquid Pipe Meter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterPurifier":{"prefab":{"prefabName":"StructureWaterPurifier","prefabHash":887383294,"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.","name":"Water Purifier"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ImportCount":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"],["PipeLiquid","Output"],["Power","None"],["Chute","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterWallCooler":{"prefab":{"prefabName":"StructureWaterWallCooler","prefabHash":-1369060582,"desc":"","name":"Liquid Wall Cooler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[["PipeLiquid","None"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWeatherStation":{"prefab":{"prefabName":"StructureWeatherStation","prefabHash":1997212478,"desc":"0.NoStorm\n1.StormIncoming\n2.InStorm","name":"Weather Station"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWindTurbine":{"prefab":{"prefabName":"StructureWindTurbine","prefabHash":-2082355173,"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.","name":"Wind Turbine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWindowShutter":{"prefab":{"prefabName":"StructureWindowShutter","prefabHash":2056377335,"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.","name":"Window Shutter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"ToolPrinterMod":{"prefab":{"prefabName":"ToolPrinterMod","prefabHash":1700018136,"desc":"Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Tool Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ToyLuna":{"prefab":{"prefabName":"ToyLuna","prefabHash":94730034,"desc":"","name":"Toy Luna"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"UniformCommander":{"prefab":{"prefabName":"UniformCommander","prefabHash":-2083426457,"desc":"","name":"Uniform Commander"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformMarine":{"prefab":{"prefabName":"UniformMarine","prefabHash":-48342840,"desc":"","name":"Marine Uniform"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformOrangeJumpSuit":{"prefab":{"prefabName":"UniformOrangeJumpSuit","prefabHash":810053150,"desc":"","name":"Jump Suit (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"WeaponEnergy":{"prefab":{"prefabName":"WeaponEnergy","prefabHash":789494694,"desc":"","name":"Weapon Energy"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponPistolEnergy":{"prefab":{"prefabName":"WeaponPistolEnergy","prefabHash":-385323479,"desc":"0.Stun\n1.Kill","name":"Energy Pistol"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponRifleEnergy":{"prefab":{"prefabName":"WeaponRifleEnergy","prefabHash":1154745374,"desc":"0.Stun\n1.Kill","name":"Energy Rifle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponTorpedo":{"prefab":{"prefabName":"WeaponTorpedo","prefabHash":-1102977898,"desc":"","name":"Torpedo"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Torpedo","sortingClass":"Default"}}},"reagents":{"Alcohol":{"Hash":1565803737,"Unit":"ml","Sources":null},"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","Sources":null},"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","Sources":null},"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}}},"enums":{"scriptEnums":{"LogicBatchMethod":{"enumName":"LogicBatchMethod","values":{"Average":{"value":0,"deprecated":false,"description":""},"Maximum":{"value":3,"deprecated":false,"description":""},"Minimum":{"value":2,"deprecated":false,"description":""},"Sum":{"value":1,"deprecated":false,"description":""}}},"LogicReagentMode":{"enumName":"LogicReagentMode","values":{"Contents":{"value":0,"deprecated":false,"description":""},"Recipe":{"value":2,"deprecated":false,"description":""},"Required":{"value":1,"deprecated":false,"description":""},"TotalContents":{"value":3,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}}},"basicEnums":{"AirCon":{"enumName":"AirConditioningMode","values":{"Cold":{"value":0,"deprecated":false,"description":""},"Hot":{"value":1,"deprecated":false,"description":""}}},"AirControl":{"enumName":"AirControlMode","values":{"Draught":{"value":4,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Offline":{"value":1,"deprecated":false,"description":""},"Pressure":{"value":2,"deprecated":false,"description":""}}},"Color":{"enumName":"ColorType","values":{"Black":{"value":7,"deprecated":false,"description":""},"Blue":{"value":0,"deprecated":false,"description":""},"Brown":{"value":8,"deprecated":false,"description":""},"Gray":{"value":1,"deprecated":false,"description":""},"Green":{"value":2,"deprecated":false,"description":""},"Khaki":{"value":9,"deprecated":false,"description":""},"Orange":{"value":3,"deprecated":false,"description":""},"Pink":{"value":10,"deprecated":false,"description":""},"Purple":{"value":11,"deprecated":false,"description":""},"Red":{"value":4,"deprecated":false,"description":""},"White":{"value":6,"deprecated":false,"description":""},"Yellow":{"value":5,"deprecated":false,"description":""}}},"DaylightSensorMode":{"enumName":"DaylightSensorMode","values":{"Default":{"value":0,"deprecated":false,"description":""},"Horizontal":{"value":1,"deprecated":false,"description":""},"Vertical":{"value":2,"deprecated":false,"description":""}}},"ElevatorMode":{"enumName":"ElevatorMode","values":{"Downward":{"value":2,"deprecated":false,"description":""},"Stationary":{"value":0,"deprecated":false,"description":""},"Upward":{"value":1,"deprecated":false,"description":""}}},"EntityState":{"enumName":"EntityState","values":{"Alive":{"value":0,"deprecated":false,"description":""},"Dead":{"value":1,"deprecated":false,"description":""},"Decay":{"value":3,"deprecated":false,"description":""},"Unconscious":{"value":2,"deprecated":false,"description":""}}},"GasType":{"enumName":"GasType","values":{"CarbonDioxide":{"value":4,"deprecated":false,"description":""},"Hydrogen":{"value":16384,"deprecated":false,"description":""},"LiquidCarbonDioxide":{"value":2048,"deprecated":false,"description":""},"LiquidHydrogen":{"value":32768,"deprecated":false,"description":""},"LiquidNitrogen":{"value":128,"deprecated":false,"description":""},"LiquidNitrousOxide":{"value":8192,"deprecated":false,"description":""},"LiquidOxygen":{"value":256,"deprecated":false,"description":""},"LiquidPollutant":{"value":4096,"deprecated":false,"description":""},"LiquidVolatiles":{"value":512,"deprecated":false,"description":""},"Nitrogen":{"value":2,"deprecated":false,"description":""},"NitrousOxide":{"value":64,"deprecated":false,"description":""},"Oxygen":{"value":1,"deprecated":false,"description":""},"Pollutant":{"value":16,"deprecated":false,"description":""},"PollutedWater":{"value":65536,"deprecated":false,"description":""},"Steam":{"value":1024,"deprecated":false,"description":""},"Undefined":{"value":0,"deprecated":false,"description":""},"Volatiles":{"value":8,"deprecated":false,"description":""},"Water":{"value":32,"deprecated":false,"description":""}}},"GasType_RocketMode":{"enumName":"RocketMode","values":{"Chart":{"value":5,"deprecated":false,"description":""},"Discover":{"value":4,"deprecated":false,"description":""},"Invalid":{"value":0,"deprecated":false,"description":""},"Mine":{"value":2,"deprecated":false,"description":""},"None":{"value":1,"deprecated":false,"description":""},"Survey":{"value":3,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}},"PowerMode":{"enumName":"PowerMode","values":{"Charged":{"value":4,"deprecated":false,"description":""},"Charging":{"value":3,"deprecated":false,"description":""},"Discharged":{"value":1,"deprecated":false,"description":""},"Discharging":{"value":2,"deprecated":false,"description":""},"Idle":{"value":0,"deprecated":false,"description":""}}},"ReEntryProfile":{"enumName":"ReEntryProfile","values":{"High":{"value":3,"deprecated":false,"description":""},"Max":{"value":4,"deprecated":false,"description":""},"Medium":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Optimal":{"value":1,"deprecated":false,"description":""}}},"RobotMode":{"enumName":"RobotMode","values":{"Follow":{"value":1,"deprecated":false,"description":""},"MoveToTarget":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"PathToTarget":{"value":5,"deprecated":false,"description":""},"Roam":{"value":3,"deprecated":false,"description":""},"StorageFull":{"value":6,"deprecated":false,"description":""},"Unload":{"value":4,"deprecated":false,"description":""}}},"SlotClass":{"enumName":"Class","values":{"AccessCard":{"value":22,"deprecated":false,"description":""},"Appliance":{"value":18,"deprecated":false,"description":""},"Back":{"value":3,"deprecated":false,"description":""},"Battery":{"value":14,"deprecated":false,"description":""},"Belt":{"value":16,"deprecated":false,"description":""},"Blocked":{"value":38,"deprecated":false,"description":""},"Bottle":{"value":25,"deprecated":false,"description":""},"Cartridge":{"value":21,"deprecated":false,"description":""},"Circuit":{"value":24,"deprecated":false,"description":""},"Circuitboard":{"value":7,"deprecated":false,"description":""},"CreditCard":{"value":28,"deprecated":false,"description":""},"DataDisk":{"value":8,"deprecated":false,"description":""},"DirtCanister":{"value":29,"deprecated":false,"description":""},"DrillHead":{"value":35,"deprecated":false,"description":""},"Egg":{"value":15,"deprecated":false,"description":""},"Entity":{"value":13,"deprecated":false,"description":""},"Flare":{"value":37,"deprecated":false,"description":""},"GasCanister":{"value":5,"deprecated":false,"description":""},"GasFilter":{"value":4,"deprecated":false,"description":""},"Glasses":{"value":27,"deprecated":false,"description":""},"Helmet":{"value":1,"deprecated":false,"description":""},"Ingot":{"value":19,"deprecated":false,"description":""},"LiquidBottle":{"value":32,"deprecated":false,"description":""},"LiquidCanister":{"value":31,"deprecated":false,"description":""},"Magazine":{"value":23,"deprecated":false,"description":""},"Motherboard":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Ore":{"value":10,"deprecated":false,"description":""},"Organ":{"value":9,"deprecated":false,"description":""},"Plant":{"value":11,"deprecated":false,"description":""},"ProgrammableChip":{"value":26,"deprecated":false,"description":""},"ScanningHead":{"value":36,"deprecated":false,"description":""},"SensorProcessingUnit":{"value":30,"deprecated":false,"description":""},"SoundCartridge":{"value":34,"deprecated":false,"description":""},"Suit":{"value":2,"deprecated":false,"description":""},"SuitMod":{"value":39,"deprecated":false,"description":""},"Tool":{"value":17,"deprecated":false,"description":""},"Torpedo":{"value":20,"deprecated":false,"description":""},"Uniform":{"value":12,"deprecated":false,"description":""},"Wreckage":{"value":33,"deprecated":false,"description":""}}},"SorterInstruction":{"enumName":"SorterInstruction","values":{"FilterPrefabHashEquals":{"value":1,"deprecated":false,"description":""},"FilterPrefabHashNotEquals":{"value":2,"deprecated":false,"description":""},"FilterQuantityCompare":{"value":5,"deprecated":false,"description":""},"FilterSlotTypeCompare":{"value":4,"deprecated":false,"description":""},"FilterSortingClassCompare":{"value":3,"deprecated":false,"description":""},"LimitNextExecutionByCount":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""}}},"SortingClass":{"enumName":"SortingClass","values":{"Appliances":{"value":6,"deprecated":false,"description":""},"Atmospherics":{"value":7,"deprecated":false,"description":""},"Clothing":{"value":5,"deprecated":false,"description":""},"Default":{"value":0,"deprecated":false,"description":""},"Food":{"value":4,"deprecated":false,"description":""},"Ices":{"value":10,"deprecated":false,"description":""},"Kits":{"value":1,"deprecated":false,"description":""},"Ores":{"value":9,"deprecated":false,"description":""},"Resources":{"value":3,"deprecated":false,"description":""},"Storage":{"value":8,"deprecated":false,"description":""},"Tools":{"value":2,"deprecated":false,"description":""}}},"Sound":{"enumName":"SoundAlert","values":{"AirlockCycling":{"value":22,"deprecated":false,"description":""},"Alarm1":{"value":45,"deprecated":false,"description":""},"Alarm10":{"value":12,"deprecated":false,"description":""},"Alarm11":{"value":13,"deprecated":false,"description":""},"Alarm12":{"value":14,"deprecated":false,"description":""},"Alarm2":{"value":1,"deprecated":false,"description":""},"Alarm3":{"value":2,"deprecated":false,"description":""},"Alarm4":{"value":3,"deprecated":false,"description":""},"Alarm5":{"value":4,"deprecated":false,"description":""},"Alarm6":{"value":5,"deprecated":false,"description":""},"Alarm7":{"value":6,"deprecated":false,"description":""},"Alarm8":{"value":10,"deprecated":false,"description":""},"Alarm9":{"value":11,"deprecated":false,"description":""},"Alert":{"value":17,"deprecated":false,"description":""},"Danger":{"value":15,"deprecated":false,"description":""},"Depressurising":{"value":20,"deprecated":false,"description":""},"FireFireFire":{"value":28,"deprecated":false,"description":""},"Five":{"value":33,"deprecated":false,"description":""},"Floor":{"value":34,"deprecated":false,"description":""},"Four":{"value":32,"deprecated":false,"description":""},"HaltWhoGoesThere":{"value":27,"deprecated":false,"description":""},"HighCarbonDioxide":{"value":44,"deprecated":false,"description":""},"IntruderAlert":{"value":19,"deprecated":false,"description":""},"LiftOff":{"value":36,"deprecated":false,"description":""},"MalfunctionDetected":{"value":26,"deprecated":false,"description":""},"Music1":{"value":7,"deprecated":false,"description":""},"Music2":{"value":8,"deprecated":false,"description":""},"Music3":{"value":9,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"One":{"value":29,"deprecated":false,"description":""},"PollutantsDetected":{"value":43,"deprecated":false,"description":""},"PowerLow":{"value":23,"deprecated":false,"description":""},"PressureHigh":{"value":39,"deprecated":false,"description":""},"PressureLow":{"value":40,"deprecated":false,"description":""},"Pressurising":{"value":21,"deprecated":false,"description":""},"RocketLaunching":{"value":35,"deprecated":false,"description":""},"StormIncoming":{"value":18,"deprecated":false,"description":""},"SystemFailure":{"value":24,"deprecated":false,"description":""},"TemperatureHigh":{"value":41,"deprecated":false,"description":""},"TemperatureLow":{"value":42,"deprecated":false,"description":""},"Three":{"value":31,"deprecated":false,"description":""},"TraderIncoming":{"value":37,"deprecated":false,"description":""},"TraderLanded":{"value":38,"deprecated":false,"description":""},"Two":{"value":30,"deprecated":false,"description":""},"Warning":{"value":16,"deprecated":false,"description":""},"Welcome":{"value":25,"deprecated":false,"description":""}}},"TransmitterMode":{"enumName":"LogicTransmitterMode","values":{"Active":{"value":1,"deprecated":false,"description":""},"Passive":{"value":0,"deprecated":false,"description":""}}},"Vent":{"enumName":"VentDirection","values":{"Inward":{"value":1,"deprecated":false,"description":""},"Outward":{"value":0,"deprecated":false,"description":""}}},"_unnamed":{"enumName":"ConditionOperation","values":{"Equals":{"value":0,"deprecated":false,"description":""},"Greater":{"value":1,"deprecated":false,"description":""},"Less":{"value":2,"deprecated":false,"description":""},"NotEquals":{"value":3,"deprecated":false,"description":""}}}}},"prefabsByHash":{"-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"},"structures":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","Flag_ODA_10m","Flag_ODA_4m","Flag_ODA_6m","Flag_ODA_8m","H2Combustor","KitchenTableShort","KitchenTableSimpleShort","KitchenTableSimpleTall","KitchenTableTall","Landingpad_2x2CenterPiece01","Landingpad_BlankPiece","Landingpad_CenterPiece01","Landingpad_CrossPiece","Landingpad_DataConnectionPiece","Landingpad_DiagonalPiece01","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_GasCylinderTankPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_StraightPiece01","Landingpad_TaxiPieceCorner","Landingpad_TaxiPieceHold","Landingpad_TaxiPieceStraight","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","RailingElegant01","RailingElegant02","RailingIndustrial02","RespawnPoint","RespawnPointWallMounted","Rover_MkI_build_states","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureBlocker","StructureCableAnalysizer","StructureCableCorner","StructureCableCorner3","StructureCableCorner3Burnt","StructureCableCorner3HBurnt","StructureCableCorner4","StructureCableCorner4Burnt","StructureCableCorner4HBurnt","StructureCableCornerBurnt","StructureCableCornerH","StructureCableCornerH3","StructureCableCornerH4","StructureCableCornerHBurnt","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCableJunction","StructureCableJunction4","StructureCableJunction4Burnt","StructureCableJunction4HBurnt","StructureCableJunction5","StructureCableJunction5Burnt","StructureCableJunction6","StructureCableJunction6Burnt","StructureCableJunction6HBurnt","StructureCableJunctionBurnt","StructureCableJunctionH","StructureCableJunctionH4","StructureCableJunctionH5","StructureCableJunctionH5Burnt","StructureCableJunctionH6","StructureCableJunctionHBurnt","StructureCableStraight","StructureCableStraightBurnt","StructureCableStraightH","StructureCableStraightHBurnt","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteCorner","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteFlipFlopSplitter","StructureChuteInlet","StructureChuteJunction","StructureChuteOutlet","StructureChuteOverflow","StructureChuteStraight","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureChuteValve","StructureChuteWindow","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeCladdingAngled","StructureCompositeCladdingAngledCorner","StructureCompositeCladdingAngledCornerInner","StructureCompositeCladdingAngledCornerInnerLong","StructureCompositeCladdingAngledCornerInnerLongL","StructureCompositeCladdingAngledCornerInnerLongR","StructureCompositeCladdingAngledCornerLong","StructureCompositeCladdingAngledCornerLongR","StructureCompositeCladdingAngledLong","StructureCompositeCladdingCylindrical","StructureCompositeCladdingCylindricalPanel","StructureCompositeCladdingPanel","StructureCompositeCladdingRounded","StructureCompositeCladdingRoundedCorner","StructureCompositeCladdingRoundedCornerInner","StructureCompositeCladdingSpherical","StructureCompositeCladdingSphericalCap","StructureCompositeCladdingSphericalCorner","StructureCompositeDoor","StructureCompositeFloorGrating","StructureCompositeFloorGrating2","StructureCompositeFloorGrating3","StructureCompositeFloorGrating4","StructureCompositeFloorGratingOpen","StructureCompositeFloorGratingOpenRotated","StructureCompositeWall","StructureCompositeWall02","StructureCompositeWall03","StructureCompositeWall04","StructureCompositeWindow","StructureCompositeWindowIron","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCrateMount","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEngineMountTypeA1","StructureEvaporationChamber","StructureExpansionValve","StructureFairingTypeA1","StructureFairingTypeA2","StructureFairingTypeA3","StructureFiltration","StructureFlagSmall","StructureFlashingLight","StructureFlatBench","StructureFloorDrain","StructureFrame","StructureFrameCorner","StructureFrameCornerCut","StructureFrameIron","StructureFrameSide","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureFuselageTypeA1","StructureFuselageTypeA2","StructureFuselageTypeA4","StructureFuselageTypeC5","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTray","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInLineTankGas1x1","StructureInLineTankGas1x2","StructureInLineTankLiquid1x1","StructureInLineTankLiquid1x2","StructureInsulatedInLineTankGas1x1","StructureInsulatedInLineTankGas1x2","StructureInsulatedInLineTankLiquid1x1","StructureInsulatedInLineTankLiquid1x2","StructureInsulatedPipeCorner","StructureInsulatedPipeCrossJunction","StructureInsulatedPipeCrossJunction3","StructureInsulatedPipeCrossJunction4","StructureInsulatedPipeCrossJunction5","StructureInsulatedPipeCrossJunction6","StructureInsulatedPipeLiquidCorner","StructureInsulatedPipeLiquidCrossJunction","StructureInsulatedPipeLiquidCrossJunction4","StructureInsulatedPipeLiquidCrossJunction5","StructureInsulatedPipeLiquidCrossJunction6","StructureInsulatedPipeLiquidStraight","StructureInsulatedPipeLiquidTJunction","StructureInsulatedPipeStraight","StructureInsulatedPipeTJunction","StructureInsulatedTankConnector","StructureInsulatedTankConnectorLiquid","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLadder","StructureLadderEnd","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLaunchMount","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassiveVent","StructurePassiveVentInsulated","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePictureFrameThickLandscapeLarge","StructurePictureFrameThickLandscapeSmall","StructurePictureFrameThickMountLandscapeLarge","StructurePictureFrameThickMountLandscapeSmall","StructurePictureFrameThickMountPortraitLarge","StructurePictureFrameThickMountPortraitSmall","StructurePictureFrameThickPortraitLarge","StructurePictureFrameThickPortraitSmall","StructurePictureFrameThinLandscapeLarge","StructurePictureFrameThinLandscapeSmall","StructurePictureFrameThinMountLandscapeLarge","StructurePictureFrameThinMountLandscapeSmall","StructurePictureFrameThinMountPortraitLarge","StructurePictureFrameThinMountPortraitSmall","StructurePictureFrameThinPortraitLarge","StructurePictureFrameThinPortraitSmall","StructurePipeAnalysizer","StructurePipeCorner","StructurePipeCowl","StructurePipeCrossJunction","StructurePipeCrossJunction3","StructurePipeCrossJunction4","StructurePipeCrossJunction5","StructurePipeCrossJunction6","StructurePipeHeater","StructurePipeIgniter","StructurePipeInsulatedLiquidCrossJunction","StructurePipeLabel","StructurePipeLiquidCorner","StructurePipeLiquidCrossJunction","StructurePipeLiquidCrossJunction3","StructurePipeLiquidCrossJunction4","StructurePipeLiquidCrossJunction5","StructurePipeLiquidCrossJunction6","StructurePipeLiquidStraight","StructurePipeLiquidTJunction","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeOrgan","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePipeStraight","StructurePipeTJunction","StructurePlanter","StructurePlatformLadderOpen","StructurePlinth","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRailing","StructureRecycler","StructureRefrigeratedVendingMachine","StructureReinforcedCompositeWindow","StructureReinforcedCompositeWindowSteel","StructureReinforcedWallPaddedWindow","StructureReinforcedWallPaddedWindowThin","StructureResearchMachine","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTower","StructureRocketTransformerSmall","StructureRover","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelf","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSmallTableBacklessDouble","StructureSmallTableBacklessSingle","StructureSmallTableDinnerSingle","StructureSmallTableRectangleDouble","StructureSmallTableRectangleSingle","StructureSmallTableThickDouble","StructureSmallTableThickSingle","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStairs4x2","StructureStairs4x2RailL","StructureStairs4x2RailR","StructureStairs4x2Rails","StructureStairwellBackLeft","StructureStairwellBackPassthrough","StructureStairwellBackRight","StructureStairwellFrontLeft","StructureStairwellFrontPassthrough","StructureStairwellFrontRight","StructureStairwellNoDoors","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankConnector","StructureTankConnectorLiquid","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTorpedoRack","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallArch","StructureWallArchArrow","StructureWallArchCornerRound","StructureWallArchCornerSquare","StructureWallArchCornerTriangle","StructureWallArchPlating","StructureWallArchTwoTone","StructureWallCooler","StructureWallFlat","StructureWallFlatCornerRound","StructureWallFlatCornerSquare","StructureWallFlatCornerTriangle","StructureWallFlatCornerTriangleFlat","StructureWallGeometryCorner","StructureWallGeometryStreight","StructureWallGeometryT","StructureWallGeometryTMirrored","StructureWallHeater","StructureWallIron","StructureWallIron02","StructureWallIron03","StructureWallIron04","StructureWallLargePanel","StructureWallLargePanelArrow","StructureWallLight","StructureWallLightBattery","StructureWallPaddedArch","StructureWallPaddedArchCorner","StructureWallPaddedArchLightFittingTop","StructureWallPaddedArchLightsFittings","StructureWallPaddedCorner","StructureWallPaddedCornerThin","StructureWallPaddedNoBorder","StructureWallPaddedNoBorderCorner","StructureWallPaddedThinNoBorder","StructureWallPaddedThinNoBorderCorner","StructureWallPaddedWindow","StructureWallPaddedWindowThin","StructureWallPadding","StructureWallPaddingArchVent","StructureWallPaddingLightFitting","StructureWallPaddingThin","StructureWallPlating","StructureWallSmallPanelsAndHatch","StructureWallSmallPanelsArrow","StructureWallSmallPanelsMonoChrome","StructureWallSmallPanelsOpen","StructureWallSmallPanelsTwoTone","StructureWallVent","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"devices":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","H2Combustor","Landingpad_DataConnectionPiece","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureCableAnalysizer","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteInlet","StructureChuteOutlet","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeDoor","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEvaporationChamber","StructureExpansionValve","StructureFiltration","StructureFlashingLight","StructureFlatBench","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePipeAnalysizer","StructurePipeHeater","StructurePipeIgniter","StructurePipeLabel","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRecycler","StructureRefrigeratedVendingMachine","StructureResearchMachine","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTransformerSmall","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallCooler","StructureWallHeater","StructureWallLight","StructureWallLightBattery","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"items":["AccessCardBlack","AccessCardBlue","AccessCardBrown","AccessCardGray","AccessCardGreen","AccessCardKhaki","AccessCardOrange","AccessCardPink","AccessCardPurple","AccessCardRed","AccessCardWhite","AccessCardYellow","ApplianceChemistryStation","ApplianceDeskLampLeft","ApplianceDeskLampRight","ApplianceMicrowave","AppliancePackagingMachine","AppliancePaintMixer","AppliancePlantGeneticAnalyzer","AppliancePlantGeneticSplicer","AppliancePlantGeneticStabilizer","ApplianceReagentProcessor","ApplianceSeedTray","ApplianceTabletDock","AutolathePrinterMod","Battery_Wireless_cell","Battery_Wireless_cell_Big","CardboardBox","CartridgeAccessController","CartridgeAtmosAnalyser","CartridgeConfiguration","CartridgeElectronicReader","CartridgeGPS","CartridgeGuide","CartridgeMedicalAnalyser","CartridgeNetworkAnalyser","CartridgeOreScanner","CartridgeOreScannerColor","CartridgePlantAnalyser","CartridgeTracker","CircuitboardAdvAirlockControl","CircuitboardAirControl","CircuitboardAirlockControl","CircuitboardCameraDisplay","CircuitboardDoorControl","CircuitboardGasDisplay","CircuitboardGraphDisplay","CircuitboardHashDisplay","CircuitboardModeControl","CircuitboardPowerControl","CircuitboardShipDisplay","CircuitboardSolarControl","CrateMkII","DecayedFood","DynamicAirConditioner","DynamicCrate","DynamicGPR","DynamicGasCanisterAir","DynamicGasCanisterCarbonDioxide","DynamicGasCanisterEmpty","DynamicGasCanisterFuel","DynamicGasCanisterNitrogen","DynamicGasCanisterNitrousOxide","DynamicGasCanisterOxygen","DynamicGasCanisterPollutants","DynamicGasCanisterRocketFuel","DynamicGasCanisterVolatiles","DynamicGasCanisterWater","DynamicGasTankAdvanced","DynamicGasTankAdvancedOxygen","DynamicGenerator","DynamicHydroponics","DynamicLight","DynamicLiquidCanisterEmpty","DynamicMKIILiquidCanisterEmpty","DynamicMKIILiquidCanisterWater","DynamicScrubber","DynamicSkeleton","ElectronicPrinterMod","ElevatorCarrage","EntityChick","EntityChickenBrown","EntityChickenWhite","EntityRoosterBlack","EntityRoosterBrown","Fertilizer","FireArmSMG","FlareGun","Handgun","HandgunMagazine","HumanSkull","ImGuiCircuitboardAirlockControl","ItemActiveVent","ItemAdhesiveInsulation","ItemAdvancedTablet","ItemAlienMushroom","ItemAmmoBox","ItemAngleGrinder","ItemArcWelder","ItemAreaPowerControl","ItemAstroloyIngot","ItemAstroloySheets","ItemAuthoringTool","ItemAuthoringToolRocketNetwork","ItemBasketBall","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBatteryCharger","ItemBatteryChargerSmall","ItemBeacon","ItemBiomass","ItemBreadLoaf","ItemCableAnalyser","ItemCableCoil","ItemCableCoilHeavy","ItemCableFuse","ItemCannedCondensedMilk","ItemCannedEdamame","ItemCannedMushroom","ItemCannedPowderedEggs","ItemCannedRicePudding","ItemCerealBar","ItemCharcoal","ItemChemLightBlue","ItemChemLightGreen","ItemChemLightRed","ItemChemLightWhite","ItemChemLightYellow","ItemCoalOre","ItemCobaltOre","ItemCoffeeMug","ItemConstantanIngot","ItemCookedCondensedMilk","ItemCookedCorn","ItemCookedMushroom","ItemCookedPowderedEggs","ItemCookedPumpkin","ItemCookedRice","ItemCookedSoybean","ItemCookedTomato","ItemCopperIngot","ItemCopperOre","ItemCorn","ItemCornSoup","ItemCreditCard","ItemCropHay","ItemCrowbar","ItemDataDisk","ItemDirtCanister","ItemDirtyOre","ItemDisposableBatteryCharger","ItemDrill","ItemDuctTape","ItemDynamicAirCon","ItemDynamicScrubber","ItemEggCarton","ItemElectronicParts","ItemElectrumIngot","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyCrowbar","ItemEmergencyDrill","ItemEmergencyEvaSuit","ItemEmergencyPickaxe","ItemEmergencyScrewdriver","ItemEmergencySpaceHelmet","ItemEmergencyToolBelt","ItemEmergencyWireCutters","ItemEmergencyWrench","ItemEmptyCan","ItemEvaSuit","ItemExplosive","ItemFern","ItemFertilizedEgg","ItemFilterFern","ItemFlagSmall","ItemFlashingLight","ItemFlashlight","ItemFlour","ItemFlowerBlue","ItemFlowerGreen","ItemFlowerOrange","ItemFlowerRed","ItemFlowerYellow","ItemFrenchFries","ItemFries","ItemGasCanisterCarbonDioxide","ItemGasCanisterEmpty","ItemGasCanisterFuel","ItemGasCanisterNitrogen","ItemGasCanisterNitrousOxide","ItemGasCanisterOxygen","ItemGasCanisterPollutants","ItemGasCanisterSmart","ItemGasCanisterVolatiles","ItemGasCanisterWater","ItemGasFilterCarbonDioxide","ItemGasFilterCarbonDioxideInfinite","ItemGasFilterCarbonDioxideL","ItemGasFilterCarbonDioxideM","ItemGasFilterNitrogen","ItemGasFilterNitrogenInfinite","ItemGasFilterNitrogenL","ItemGasFilterNitrogenM","ItemGasFilterNitrousOxide","ItemGasFilterNitrousOxideInfinite","ItemGasFilterNitrousOxideL","ItemGasFilterNitrousOxideM","ItemGasFilterOxygen","ItemGasFilterOxygenInfinite","ItemGasFilterOxygenL","ItemGasFilterOxygenM","ItemGasFilterPollutants","ItemGasFilterPollutantsInfinite","ItemGasFilterPollutantsL","ItemGasFilterPollutantsM","ItemGasFilterVolatiles","ItemGasFilterVolatilesInfinite","ItemGasFilterVolatilesL","ItemGasFilterVolatilesM","ItemGasFilterWater","ItemGasFilterWaterInfinite","ItemGasFilterWaterL","ItemGasFilterWaterM","ItemGasSensor","ItemGasTankStorage","ItemGlassSheets","ItemGlasses","ItemGoldIngot","ItemGoldOre","ItemGrenade","ItemHEMDroidRepairKit","ItemHardBackpack","ItemHardJetpack","ItemHardMiningBackPack","ItemHardSuit","ItemHardsuitHelmet","ItemHastelloyIngot","ItemHat","ItemHighVolumeGasCanisterEmpty","ItemHorticultureBelt","ItemHydroponicTray","ItemIce","ItemIgniter","ItemInconelIngot","ItemInsulation","ItemIntegratedCircuit10","ItemInvarIngot","ItemIronFrames","ItemIronIngot","ItemIronOre","ItemIronSheets","ItemJetpackBasic","ItemKitAIMeE","ItemKitAccessBridge","ItemKitAdvancedComposter","ItemKitAdvancedFurnace","ItemKitAdvancedPackagingMachine","ItemKitAirlock","ItemKitAirlockGate","ItemKitArcFurnace","ItemKitAtmospherics","ItemKitAutoMinerSmall","ItemKitAutolathe","ItemKitAutomatedOven","ItemKitBasket","ItemKitBattery","ItemKitBatteryLarge","ItemKitBeacon","ItemKitBeds","ItemKitBlastDoor","ItemKitCentrifuge","ItemKitChairs","ItemKitChute","ItemKitChuteUmbilical","ItemKitCompositeCladding","ItemKitCompositeFloorGrating","ItemKitComputer","ItemKitConsole","ItemKitCrate","ItemKitCrateMkII","ItemKitCrateMount","ItemKitCryoTube","ItemKitDeepMiner","ItemKitDockingPort","ItemKitDoor","ItemKitDrinkingFountain","ItemKitDynamicCanister","ItemKitDynamicGasTankAdvanced","ItemKitDynamicGenerator","ItemKitDynamicHydroponics","ItemKitDynamicLiquidCanister","ItemKitDynamicMKIILiquidCanister","ItemKitElectricUmbilical","ItemKitElectronicsPrinter","ItemKitElevator","ItemKitEngineLarge","ItemKitEngineMedium","ItemKitEngineSmall","ItemKitEvaporationChamber","ItemKitFlagODA","ItemKitFridgeBig","ItemKitFridgeSmall","ItemKitFurnace","ItemKitFurniture","ItemKitFuselage","ItemKitGasGenerator","ItemKitGasUmbilical","ItemKitGovernedGasRocketEngine","ItemKitGroundTelescope","ItemKitGrowLight","ItemKitHarvie","ItemKitHeatExchanger","ItemKitHorizontalAutoMiner","ItemKitHydraulicPipeBender","ItemKitHydroponicAutomated","ItemKitHydroponicStation","ItemKitIceCrusher","ItemKitInsulatedLiquidPipe","ItemKitInsulatedPipe","ItemKitInsulatedPipeUtility","ItemKitInsulatedPipeUtilityLiquid","ItemKitInteriorDoors","ItemKitLadder","ItemKitLandingPadAtmos","ItemKitLandingPadBasic","ItemKitLandingPadWaypoint","ItemKitLargeDirectHeatExchanger","ItemKitLargeExtendableRadiator","ItemKitLargeSatelliteDish","ItemKitLaunchMount","ItemKitLaunchTower","ItemKitLiquidRegulator","ItemKitLiquidTank","ItemKitLiquidTankInsulated","ItemKitLiquidTurboVolumePump","ItemKitLiquidUmbilical","ItemKitLocker","ItemKitLogicCircuit","ItemKitLogicInputOutput","ItemKitLogicMemory","ItemKitLogicProcessor","ItemKitLogicSwitch","ItemKitLogicTransmitter","ItemKitMotherShipCore","ItemKitMusicMachines","ItemKitPassiveLargeRadiatorGas","ItemKitPassiveLargeRadiatorLiquid","ItemKitPassthroughHeatExchanger","ItemKitPictureFrame","ItemKitPipe","ItemKitPipeLiquid","ItemKitPipeOrgan","ItemKitPipeRadiator","ItemKitPipeRadiatorLiquid","ItemKitPipeUtility","ItemKitPipeUtilityLiquid","ItemKitPlanter","ItemKitPortablesConnector","ItemKitPowerTransmitter","ItemKitPowerTransmitterOmni","ItemKitPoweredVent","ItemKitPressureFedGasEngine","ItemKitPressureFedLiquidEngine","ItemKitPressurePlate","ItemKitPumpedLiquidEngine","ItemKitRailing","ItemKitRecycler","ItemKitRegulator","ItemKitReinforcedWindows","ItemKitResearchMachine","ItemKitRespawnPointWallMounted","ItemKitRocketAvionics","ItemKitRocketBattery","ItemKitRocketCargoStorage","ItemKitRocketCelestialTracker","ItemKitRocketCircuitHousing","ItemKitRocketDatalink","ItemKitRocketGasFuelTank","ItemKitRocketLiquidFuelTank","ItemKitRocketManufactory","ItemKitRocketMiner","ItemKitRocketScanner","ItemKitRocketTransformerSmall","ItemKitRoverFrame","ItemKitRoverMKI","ItemKitSDBHopper","ItemKitSatelliteDish","ItemKitSecurityPrinter","ItemKitSensor","ItemKitShower","ItemKitSign","ItemKitSleeper","ItemKitSmallDirectHeatExchanger","ItemKitSmallSatelliteDish","ItemKitSolarPanel","ItemKitSolarPanelBasic","ItemKitSolarPanelBasicReinforced","ItemKitSolarPanelReinforced","ItemKitSolidGenerator","ItemKitSorter","ItemKitSpeaker","ItemKitStacker","ItemKitStairs","ItemKitStairwell","ItemKitStandardChute","ItemKitStirlingEngine","ItemKitSuitStorage","ItemKitTables","ItemKitTank","ItemKitTankInsulated","ItemKitToolManufactory","ItemKitTransformer","ItemKitTransformerSmall","ItemKitTurbineGenerator","ItemKitTurboVolumePump","ItemKitUprightWindTurbine","ItemKitVendingMachine","ItemKitVendingMachineRefrigerated","ItemKitWall","ItemKitWallArch","ItemKitWallFlat","ItemKitWallGeometry","ItemKitWallIron","ItemKitWallPadded","ItemKitWaterBottleFiller","ItemKitWaterPurifier","ItemKitWeatherStation","ItemKitWindTurbine","ItemKitWindowShutter","ItemLabeller","ItemLaptop","ItemLeadIngot","ItemLeadOre","ItemLightSword","ItemLiquidCanisterEmpty","ItemLiquidCanisterSmart","ItemLiquidDrain","ItemLiquidPipeAnalyzer","ItemLiquidPipeHeater","ItemLiquidPipeValve","ItemLiquidPipeVolumePump","ItemLiquidTankStorage","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIICrowbar","ItemMKIIDrill","ItemMKIIDuctTape","ItemMKIIMiningDrill","ItemMKIIScrewdriver","ItemMKIIWireCutters","ItemMKIIWrench","ItemMarineBodyArmor","ItemMarineHelmet","ItemMilk","ItemMiningBackPack","ItemMiningBelt","ItemMiningBeltMKII","ItemMiningCharge","ItemMiningDrill","ItemMiningDrillHeavy","ItemMiningDrillPneumatic","ItemMkIIToolbelt","ItemMuffin","ItemMushroom","ItemNVG","ItemNickelIngot","ItemNickelOre","ItemNitrice","ItemOxite","ItemPassiveVent","ItemPassiveVentInsulated","ItemPeaceLily","ItemPickaxe","ItemPillHeal","ItemPillStun","ItemPipeAnalyizer","ItemPipeCowl","ItemPipeDigitalValve","ItemPipeGasMixer","ItemPipeHeater","ItemPipeIgniter","ItemPipeLabel","ItemPipeLiquidRadiator","ItemPipeMeter","ItemPipeRadiator","ItemPipeValve","ItemPipeVolumePump","ItemPlantEndothermic_Creative","ItemPlantEndothermic_Genepool1","ItemPlantEndothermic_Genepool2","ItemPlantSampler","ItemPlantSwitchGrass","ItemPlantThermogenic_Creative","ItemPlantThermogenic_Genepool1","ItemPlantThermogenic_Genepool2","ItemPlasticSheets","ItemPotato","ItemPotatoBaked","ItemPowerConnector","ItemPumpkin","ItemPumpkinPie","ItemPumpkinSoup","ItemPureIce","ItemPureIceCarbonDioxide","ItemPureIceHydrogen","ItemPureIceLiquidCarbonDioxide","ItemPureIceLiquidHydrogen","ItemPureIceLiquidNitrogen","ItemPureIceLiquidNitrous","ItemPureIceLiquidOxygen","ItemPureIceLiquidPollutant","ItemPureIceLiquidVolatiles","ItemPureIceNitrogen","ItemPureIceNitrous","ItemPureIceOxygen","ItemPureIcePollutant","ItemPureIcePollutedWater","ItemPureIceSteam","ItemPureIceVolatiles","ItemRTG","ItemRTGSurvival","ItemReagentMix","ItemRemoteDetonator","ItemResearchCapsule","ItemResearchCapsuleGreen","ItemResearchCapsuleRed","ItemResearchCapsuleYellow","ItemReusableFireExtinguisher","ItemRice","ItemRoadFlare","ItemRocketMiningDrillHead","ItemRocketMiningDrillHeadDurable","ItemRocketMiningDrillHeadHighSpeedIce","ItemRocketMiningDrillHeadHighSpeedMineral","ItemRocketMiningDrillHeadIce","ItemRocketMiningDrillHeadLongTerm","ItemRocketMiningDrillHeadMineral","ItemRocketScanningHead","ItemScanner","ItemScrewdriver","ItemSecurityCamera","ItemSensorLenses","ItemSensorProcessingUnitCelestialScanner","ItemSensorProcessingUnitMesonScanner","ItemSensorProcessingUnitOreScanner","ItemSiliconIngot","ItemSiliconOre","ItemSilverIngot","ItemSilverOre","ItemSolderIngot","ItemSolidFuel","ItemSoundCartridgeBass","ItemSoundCartridgeDrums","ItemSoundCartridgeLeads","ItemSoundCartridgeSynth","ItemSoyOil","ItemSoybean","ItemSpaceCleaner","ItemSpaceHelmet","ItemSpaceIce","ItemSpaceOre","ItemSpacepack","ItemSprayCanBlack","ItemSprayCanBlue","ItemSprayCanBrown","ItemSprayCanGreen","ItemSprayCanGrey","ItemSprayCanKhaki","ItemSprayCanOrange","ItemSprayCanPink","ItemSprayCanPurple","ItemSprayCanRed","ItemSprayCanWhite","ItemSprayCanYellow","ItemSprayGun","ItemSteelFrames","ItemSteelIngot","ItemSteelSheets","ItemStelliteGlassSheets","ItemStelliteIngot","ItemSuitModCryogenicUpgrade","ItemTablet","ItemTerrainManipulator","ItemTomato","ItemTomatoSoup","ItemToolBelt","ItemTropicalPlant","ItemUraniumOre","ItemVolatiles","ItemWallCooler","ItemWallHeater","ItemWallLight","ItemWaspaloyIngot","ItemWaterBottle","ItemWaterPipeDigitalValve","ItemWaterPipeMeter","ItemWaterWallCooler","ItemWearLamp","ItemWeldingTorch","ItemWheat","ItemWireCutters","ItemWirelessBatteryCellExtraLarge","ItemWreckageAirConditioner1","ItemWreckageAirConditioner2","ItemWreckageHydroponicsTray1","ItemWreckageLargeExtendableRadiator01","ItemWreckageStructureRTG1","ItemWreckageStructureWeatherStation001","ItemWreckageStructureWeatherStation002","ItemWreckageStructureWeatherStation003","ItemWreckageStructureWeatherStation004","ItemWreckageStructureWeatherStation005","ItemWreckageStructureWeatherStation006","ItemWreckageStructureWeatherStation007","ItemWreckageStructureWeatherStation008","ItemWreckageTurbineGenerator1","ItemWreckageTurbineGenerator2","ItemWreckageTurbineGenerator3","ItemWreckageWallCooler1","ItemWreckageWallCooler2","ItemWrench","KitSDBSilo","KitStructureCombustionCentrifuge","Lander","Meteorite","MonsterEgg","MotherboardComms","MotherboardLogic","MotherboardMissionControl","MotherboardProgrammableChip","MotherboardRockets","MotherboardSorter","MothershipCore","NpcChick","NpcChicken","PipeBenderMod","PortableComposter","PortableSolarPanel","ReagentColorBlue","ReagentColorGreen","ReagentColorOrange","ReagentColorRed","ReagentColorYellow","Robot","RoverCargo","Rover_MkI","SMGMagazine","SeedBag_Corn","SeedBag_Fern","SeedBag_Mushroom","SeedBag_Potato","SeedBag_Pumpkin","SeedBag_Rice","SeedBag_Soybean","SeedBag_Switchgrass","SeedBag_Tomato","SeedBag_Wheet","SpaceShuttle","ToolPrinterMod","ToyLuna","UniformCommander","UniformMarine","UniformOrangeJumpSuit","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy","WeaponTorpedo"],"logicableItems":["Battery_Wireless_cell","Battery_Wireless_cell_Big","DynamicGPR","DynamicLight","ItemAdvancedTablet","ItemAngleGrinder","ItemArcWelder","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBeacon","ItemDrill","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyDrill","ItemEmergencySpaceHelmet","ItemFlashlight","ItemHardBackpack","ItemHardJetpack","ItemHardSuit","ItemHardsuitHelmet","ItemIntegratedCircuit10","ItemJetpackBasic","ItemLabeller","ItemLaptop","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIIDrill","ItemMKIIMiningDrill","ItemMiningBeltMKII","ItemMiningDrill","ItemMiningDrillHeavy","ItemMkIIToolbelt","ItemNVG","ItemPlantSampler","ItemRemoteDetonator","ItemSensorLenses","ItemSpaceHelmet","ItemSpacepack","ItemTablet","ItemTerrainManipulator","ItemWearLamp","ItemWirelessBatteryCellExtraLarge","PortableSolarPanel","Robot","RoverCargo","Rover_MkI","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy"]} \ No newline at end of file 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 1d20748..c50a8df 100644 --- a/ic10emu/Cargo.toml +++ b/ic10emu/Cargo.toml @@ -14,7 +14,7 @@ const-crc32 = "1.3.0" itertools = "0.12.1" macro_rules_attribute = "0.2.0" paste = "1.0.14" -phf = "0.11.2" +phf = { version = "0.11.2", features = ["macros"] } rand = "0.8.5" regex = "1.10.3" serde = { version = "1.0.197", features = ["derive"] } diff --git a/ic10emu/build.rs b/ic10emu/build.rs deleted file mode 100644 index bd1a0da..0000000 --- a/ic10emu/build.rs +++ /dev/null @@ -1,421 +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, -} - -struct ReprEnumVariant

-where - P: Display + FromStr, -{ - pub value: P, - pub deprecated: bool, - pub props: Vec<(String, String)> -} - -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 { "" }; - let repr = std::any::type_name::

(); - write!( - writer, - "#[derive(Debug, Display, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, EnumString, AsRefStr, EnumProperty, EnumIter, FromRepr, Serialize, Deserialize)]\n\ - {additional_strum}\ - #[repr({repr})]\n\ - pub enum {name} {{\n" - ) - .unwrap(); - for (name, variant) in variants { - let variant_name = name.replace('.', "").to_case(Case::Pascal); - let serialize = vec![name.clone()]; - 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()); - } - for (prop_name, prop_val) in &variant.props { - props.push(format!("{prop_name} = \"{prop_val}\"")); - } - let 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} = {val}{repr}," - ) - .unwrap(); - } - writeln!(writer, "}}").unwrap(); -} - -fn write_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, ReprEnumVariant)> = 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 value: u16 = val_str.parse().unwrap_or_else(|err| panic!("'{val_str}' not valid u16: {err}")); - let docs = it.next(); - let deprecated = docs - .map(|docs| docs.trim().to_uppercase() == "DEPRECATED") - .unwrap_or(false); - let mut props = Vec::new(); - if let Some(docs) = docs { - props.push(("docs".to_owned(), docs.to_owned())); - } - logictypes.push(( - name.to_string(), - ReprEnumVariant { - value, - deprecated, - props, - }, - )); - } - - let mut slotlogictypes: Vec<(String, ReprEnumVariant)> = 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 value: u8 = val_str.parse().unwrap_or_else(|err| panic!("'{val_str}' not valid u8: {err}")); - let docs = it.next(); - let deprecated = docs - .map(|docs| docs.trim().to_uppercase() == "DEPRECATED") - .unwrap_or(false); - let mut props = Vec::new(); - if let Some(docs) = docs { - props.push(("docs".to_owned(), docs.to_owned())); - } - slotlogictypes.push(( - name.to_string(), - ReprEnumVariant { - value, - deprecated, - props, - }, - )); - } - - 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_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, ReprEnumVariant)> = 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 value: u8 = val_str.parse().unwrap_or_else(|err| panic!("'{val_str}' not valid u8: {err}")); - - batchmodes.push(( - name.to_string(), - ReprEnumVariant { - value, - deprecated: false, - props: Vec::new(), - }, - )); - } - - let mut reagentmodes: Vec<(String, ReprEnumVariant)> = 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 value: u8 = val_str.parse().unwrap_or_else(|err| panic!("'{val_str}' not valid u8: {err}")); - reagentmodes.push(( - name.to_string(), - ReprEnumVariant { - value, - deprecated: false, - props: Vec::new(), - }, - )); - - } - - 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 write_stationpedia() { - let out_dir = env::var_os("OUT_DIR").unwrap(); - - let dest_path = Path::new(&out_dir).join("stationpedia_prefabs.rs"); - let output_file = File::create(dest_path).unwrap(); - let mut writer = BufWriter::new(&output_file); - - let mut prefabs: Vec<(String, ReprEnumVariant)> = Vec::new(); - let l_infile = Path::new("data/stationpedia.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 val_str = it.next().unwrap(); - let value: i32 = val_str.parse().unwrap_or_else(|err| panic!("'{val_str}' not valid i32: {err}")); - let name = it.next().unwrap(); - let title = it.next(); - - let mut props = Vec::new(); - if let Some(title) = title { - props.push(("title".to_owned(), title.to_owned())); - } - - prefabs.push(( - name.to_string(), - ReprEnumVariant { - value, - deprecated: false, - props, - }, - )); - } - - write_repr_enum(&mut writer, "StationpediaPrefab", &prefabs, true); - - println!("cargo:rerun-if-changed=data/stationpdeia.txt"); -} - -fn main() { - write_logictypes(); - write_modes(); - write_constants(); - write_enums(); - - write_instructions_enum(); - write_stationpedia(); -} 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 6c492db..0000000 --- a/ic10emu/data/enums.txt +++ /dev/null @@ -1,475 +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.BestContactFilter 267 -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 -ReEntryProfile.High 3 -ReEntryProfile.Max 4 -ReEntryProfile.Medium 2 -ReEntryProfile.None 0 -ReEntryProfile.Optimal 1 -RobotMode.Follow 1 -RobotMode.MoveToTarget 2 -RobotMode.None 0 -RobotMode.PathToTarget 5 -RobotMode.Roam 3 -RobotMode.StorageFull 6 -RobotMode.Unload 4 -RocketMode.Chart 5 -RocketMode.Discover 4 -RocketMode.Invalid 0 -RocketMode.Mine 2 -RocketMode.None 1 -RocketMode.Survey 3 -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.SuitMod 39 -SlotClass.Tool 17 -SlotClass.Torpedo 20 -SlotClass.Uniform 12 -SlotClass.Wreckage 33 -SorterInstruction.FilterPrefabHashEquals 1 -SorterInstruction.FilterPrefabHashNotEquals 2 -SorterInstruction.FilterQuantityCompare 5 -SorterInstruction.FilterSlotTypeCompare 4 -SorterInstruction.FilterSortingClassCompare 3 -SorterInstruction.LimitNextExecutionByCount 6 -SorterInstruction.None 0 -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 ccd785a..0000000 --- a/ic10emu/data/logictypes.txt +++ /dev/null @@ -1,267 +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 -BestContactFilter 267 -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 -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 The input setting for the device -SettingOutput 92 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 7c65011..0000000 --- a/ic10emu/data/stationpedia.txt +++ /dev/null @@ -1,1745 +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 --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) -1871048978 ItemAdhesiveInsulation Adhesive Insulation -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) --27284803 ItemKitInsulatedPipeUtility Kit (Insulated Pipe Utility Gas) --1831558953 ItemKitInsulatedPipeUtilityLiquid Kit (Insulated Pipe Utility Liquid) --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 -1447327071 ItemSuitAdvancedAC Advanced AC Suit -711019524 ItemSuitEmergency Emergency Suit -70631292 ItemSuitHard Hard Suit --2020709888 ItemSuitInsulated Insulated Suit --1274308304 ItemSuitModCryogenicUpgrade Cryogenic Suit Upgrade --942170293 ItemSuitNormal Normal Suit -416903029 ItemSuitSpace Space Suit -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 -1818267386 StructureInsulatedInLineTankGas1x1 Insulated In-Line Tank Small Gas --177610944 StructureInsulatedInLineTankGas1x2 Insulated In-Line Tank Gas --813426145 StructureInsulatedInLineTankLiquid1x1 Insulated In-Line Tank Small Liquid -1452100517 StructureInsulatedInLineTankLiquid1x2 Insulated 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 -873418029 StructureLogicSorter Logic Sorter -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) -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/src/device.rs b/ic10emu/src/device.rs index 205a984..48b2e3d 100644 --- a/ic10emu/src/device.rs +++ b/ic10emu/src/device.rs @@ -1,7 +1,11 @@ use crate::{ - grammar::{LogicType, ReagentMode, SlotLogicType}, - interpreter::{ICError, ICState}, + errors::ICError, + interpreter::ICState, network::{CableConnectionType, Connection}, + vm::enums::script_enums::{ + LogicBatchMethod as BatchMode, LogicReagentMode as ReagentMode, + LogicSlotType as SlotLogicType, LogicType, + }, vm::VM, }; use std::{collections::BTreeMap, ops::Deref}; diff --git a/ic10emu/src/errors.rs b/ic10emu/src/errors.rs new file mode 100644 index 0000000..23d42c4 --- /dev/null +++ b/ic10emu/src/errors.rs @@ -0,0 +1,209 @@ +use crate::vm::instructions::enums::InstructionOp; +use serde::{Deserialize, Serialize}; +use std::error::Error as StdError; +use std::fmt::Display; +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), +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct LineError { + pub error: ICError, + pub 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 StdError for LineError {} + +#[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 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)] +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: 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) + } + } +} diff --git a/ic10emu/src/grammar.rs b/ic10emu/src/grammar.rs index b1ff57e..0ba5559 100644 --- a/ic10emu/src/grammar.rs +++ b/ic10emu/src/grammar.rs @@ -1,138 +1,62 @@ -use crate::interpreter::{self, ICError}; +use crate::interpreter; use crate::tokens::{SplitConsecutiveIndicesExt, SplitConsecutiveWithIndices}; +use crate::vm::enums::script_enums::{ + LogicBatchMethod, LogicReagentMode, LogicSlotType, LogicType, +}; +use crate::vm::instructions::{ + enums::InstructionOp, + operands::{Device, DeviceSpec, Identifier, Number, Operand, RegisterSpec}, + Instruction, CONSTANTS_LOOKUP, +}; +use crate::{ + errors::{ICError, ParseError}, + vm::enums::basic_enums::BasicEnum, +}; use itertools::Itertools; -use std::error::Error; use std::fmt::Display; use std::str::FromStr; -use strum::EnumProperty; +use strum::{EnumProperty, IntoEnumIterator}; -pub mod generated { - use super::ParseError; - use crate::interpreter::ICError; - use serde::{Deserialize, Serialize}; - use std::str::FromStr; - use strum::{ - AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr, 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)) - } +impl TryFrom for LogicType { + type Error = ICError; + fn try_from(value: f64) -> Result>::Error> { + if let Some(lt) = LogicType::iter().find(|lt| *lt as u16 as f64 == value) { + Ok(lt) + } else { + Err(ICError::UnknownLogicType(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 TryFrom for LogicSlotType { + type Error = ICError; + fn try_from(value: f64) -> Result>::Error> { + if let Some(slt) = LogicSlotType::iter().find(|lt| *lt as u8 as f64 == value) { + Ok(slt) + } else { + Err(ICError::UnknownSlotLogicType(value)) + } } } -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 +impl TryFrom for LogicBatchMethod { + type Error = ICError; + fn try_from(value: f64) -> Result>::Error> { + if let Some(bm) = LogicBatchMethod::iter().find(|lt| *lt as u8 as f64 == value) { + Ok(bm) + } else { + Err(ICError::UnknownBatchMode(value)) } } +} - /// 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 +impl TryFrom for LogicReagentMode { + type Error = ICError; + fn try_from(value: f64) -> Result>::Error> { + if let Some(rm) = LogicReagentMode::iter().find(|lt| *lt as u8 as f64 == value) { + Ok(rm) + } else { + Err(ICError::UnknownReagentMode(value)) } } } @@ -246,12 +170,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 @@ -259,9 +177,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, @@ -320,290 +245,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 @@ -874,15 +515,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 { @@ -1007,11 +646,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 { @@ -1057,16 +691,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 { @@ -1249,7 +873,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 { @@ -1458,9 +1082,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"); @@ -1478,30 +1102,35 @@ mod tests { let value = lt.get_str("value"); assert!(value.is_some()); assert!(value.unwrap().parse::().is_ok()); + assert_eq!(lt as u16, value.unwrap()); } - for slt in SlotLogicType::iter() { + for slt in LogicSlotType::iter() { println!("testing SlotLogicType.{slt}"); let value = slt.get_str("value"); assert!(value.is_some()); assert!(value.unwrap().parse::().is_ok()); + assert_eq!(slt as u8, value.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()); } - 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()); } - 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()); } } diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index 1094b51..0bd5f79 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -18,142 +18,21 @@ use time::format_description; use crate::{ device::SlotType, - grammar::{self, LogicType, ParseError, SlotLogicType}, - vm::VM, + errors::{ICError, LineError, ParseError}, + grammar, + vm::{ + enums::script_enums::{LogicSlotType as SlotLogicType, LogicType}, + instructions::{ + enums::InstructionOp, + operands::{DeviceSpec, Operand, RegisterSpec}, + Instruction, + }, + VM, + }, }; 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) - } - } -} - #[derive(Debug, Clone, Serialize, Deserialize)] pub enum ICState { Start, @@ -195,7 +74,7 @@ pub struct IC { /// Instruction Count since last yield pub ic: Cell, pub stack: RefCell<[f64; 512]>, - pub aliases: RefCell>, + pub aliases: RefCell>, pub defines: RefCell>, pub pins: RefCell<[Option; 6]>, pub code: RefCell, @@ -215,7 +94,7 @@ pub struct FrozenIC { pub ic: u16, #[serde_as(as = "[_; 512]")] pub stack: [f64; 512], - pub aliases: BTreeMap, + pub aliases: BTreeMap, pub defines: BTreeMap, pub pins: [Option; 6], pub state: ICState, @@ -264,7 +143,7 @@ impl From for IC { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Program { - pub instructions: Vec, + pub instructions: Vec, pub errors: Vec, pub labels: BTreeMap, } @@ -293,8 +172,8 @@ 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 { @@ -304,8 +183,8 @@ impl Program { } 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![], }) } @@ -331,8 +210,8 @@ 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 { @@ -343,16 +222,16 @@ impl Program { 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,7 +245,7 @@ impl Program { } } - pub fn get_line(&self, line: u32) -> Result<&grammar::Instruction, ICError> { + pub fn get_line(&self, line: u32) -> Result<&Instruction, ICError> { self.instructions .get(line as usize) .ok_or(ICError::InstructionPointerOutOfRange(line)) @@ -560,14 +439,13 @@ impl IC { } 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::*; + use InstructionOp::*; // force the program borrow to drop let line = { @@ -578,7 +456,9 @@ impl IC { let inst = line.instruction; match inst { Nop => Ok(()), - Hcf => Ok(()), // TODO + Hcf => Ok(()), // TODO + Clr => Ok(()), // TODO + Label => Ok(()), // NOP Sleep => match &operands[..] { [a] => { let a = a.as_value(this, inst, 1)?; @@ -2577,31 +2457,31 @@ impl IC { } #[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, +const CHANNEL_LOGIC_TYPES: [LogicType; 8] = [ + LogicType::Channel0, + LogicType::Channel1, + LogicType::Channel2, + LogicType::Channel3, + LogicType::Channel4, + LogicType::Channel5, + LogicType::Channel6, + LogicType::Channel7, ]; trait LogicTypeExt { fn as_channel(&self) -> Option; } -impl LogicTypeExt for grammar::LogicType { +impl LogicTypeExt for 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), + LogicType::Channel0 => Some(0), + LogicType::Channel1 => Some(1), + LogicType::Channel2 => Some(2), + LogicType::Channel3 => Some(3), + LogicType::Channel4 => Some(4), + LogicType::Channel5 => Some(5), + LogicType::Channel6 => Some(6), + LogicType::Channel7 => Some(7), _ => None, } } diff --git a/ic10emu/src/lib.rs b/ic10emu/src/lib.rs index 92a61f3..cd2f896 100644 --- a/ic10emu/src/lib.rs +++ b/ic10emu/src/lib.rs @@ -1,8 +1,8 @@ +pub mod device; +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..fd8688d 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -131,7 +131,6 @@ pub enum NetworkError { } impl Network { - pub fn new(id: u32) -> Self { Network { id, diff --git a/ic10emu/src/vm/enums/basic_enums.rs b/ic10emu/src/vm/enums/basic_enums.rs new file mode 100644 index 0000000..59d04c0 --- /dev/null +++ b/ic10emu/src/vm/enums/basic_enums.rs @@ -0,0 +1,3717 @@ +// ================================================= +// !! <-----> DO NOT MODIFY <-----> !! +// +// This module was automatically generated by an +// xtask +// +// run `cargo xtask generate` from the workspace +// to regenerate +// +// ================================================= + +use serde::{Deserialize, Serialize}; +use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum AirConditioningMode { + #[strum(serialize = "Cold", props(docs = r#""#, value = "0"))] + Cold = 0u8, + #[strum(serialize = "Hot", props(docs = r#""#, value = "1"))] + Hot = 1u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum AirControlMode { + #[strum(serialize = "Draught", props(docs = r#""#, value = "4"))] + Draught = 4u8, + #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + None = 0u8, + #[strum(serialize = "Offline", props(docs = r#""#, value = "1"))] + Offline = 1u8, + #[strum(serialize = "Pressure", props(docs = r#""#, value = "2"))] + Pressure = 2u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum ColorType { + #[strum(serialize = "Black", props(docs = r#""#, value = "7"))] + Black = 7u8, + #[strum(serialize = "Blue", props(docs = r#""#, value = "0"))] + Blue = 0u8, + #[strum(serialize = "Brown", props(docs = r#""#, value = "8"))] + Brown = 8u8, + #[strum(serialize = "Gray", props(docs = r#""#, value = "1"))] + Gray = 1u8, + #[strum(serialize = "Green", props(docs = r#""#, value = "2"))] + Green = 2u8, + #[strum(serialize = "Khaki", props(docs = r#""#, value = "9"))] + Khaki = 9u8, + #[strum(serialize = "Orange", props(docs = r#""#, value = "3"))] + Orange = 3u8, + #[strum(serialize = "Pink", props(docs = r#""#, value = "10"))] + Pink = 10u8, + #[strum(serialize = "Purple", props(docs = r#""#, value = "11"))] + Purple = 11u8, + #[strum(serialize = "Red", props(docs = r#""#, value = "4"))] + Red = 4u8, + #[strum(serialize = "White", props(docs = r#""#, value = "6"))] + White = 6u8, + #[strum(serialize = "Yellow", props(docs = r#""#, value = "5"))] + Yellow = 5u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum DaylightSensorMode { + #[strum(serialize = "Default", props(docs = r#""#, value = "0"))] + Default = 0u8, + #[strum(serialize = "Horizontal", props(docs = r#""#, value = "1"))] + Horizontal = 1u8, + #[strum(serialize = "Vertical", props(docs = r#""#, value = "2"))] + Vertical = 2u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum ElevatorMode { + #[strum(serialize = "Downward", props(docs = r#""#, value = "2"))] + Downward = 2u8, + #[strum(serialize = "Stationary", props(docs = r#""#, value = "0"))] + Stationary = 0u8, + #[strum(serialize = "Upward", props(docs = r#""#, value = "1"))] + Upward = 1u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum EntityState { + #[strum(serialize = "Alive", props(docs = r#""#, value = "0"))] + Alive = 0u8, + #[strum(serialize = "Dead", props(docs = r#""#, value = "1"))] + Dead = 1u8, + #[strum(serialize = "Decay", props(docs = r#""#, value = "3"))] + Decay = 3u8, + #[strum(serialize = "Unconscious", props(docs = r#""#, value = "2"))] + Unconscious = 2u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u32)] +pub enum GasType { + #[strum(serialize = "CarbonDioxide", props(docs = r#""#, value = "4"))] + CarbonDioxide = 4u32, + #[strum(serialize = "Hydrogen", props(docs = r#""#, value = "16384"))] + Hydrogen = 16384u32, + #[strum(serialize = "LiquidCarbonDioxide", props(docs = r#""#, value = "2048"))] + LiquidCarbonDioxide = 2048u32, + #[strum(serialize = "LiquidHydrogen", props(docs = r#""#, value = "32768"))] + LiquidHydrogen = 32768u32, + #[strum(serialize = "LiquidNitrogen", props(docs = r#""#, value = "128"))] + LiquidNitrogen = 128u32, + #[strum(serialize = "LiquidNitrousOxide", props(docs = r#""#, value = "8192"))] + LiquidNitrousOxide = 8192u32, + #[strum(serialize = "LiquidOxygen", props(docs = r#""#, value = "256"))] + LiquidOxygen = 256u32, + #[strum(serialize = "LiquidPollutant", props(docs = r#""#, value = "4096"))] + LiquidPollutant = 4096u32, + #[strum(serialize = "LiquidVolatiles", props(docs = r#""#, value = "512"))] + LiquidVolatiles = 512u32, + #[strum(serialize = "Nitrogen", props(docs = r#""#, value = "2"))] + Nitrogen = 2u32, + #[strum(serialize = "NitrousOxide", props(docs = r#""#, value = "64"))] + NitrousOxide = 64u32, + #[strum(serialize = "Oxygen", props(docs = r#""#, value = "1"))] + Oxygen = 1u32, + #[strum(serialize = "Pollutant", props(docs = r#""#, value = "16"))] + Pollutant = 16u32, + #[strum(serialize = "PollutedWater", props(docs = r#""#, value = "65536"))] + PollutedWater = 65536u32, + #[strum(serialize = "Steam", props(docs = r#""#, value = "1024"))] + Steam = 1024u32, + #[strum(serialize = "Undefined", props(docs = r#""#, value = "0"))] + Undefined = 0u32, + #[strum(serialize = "Volatiles", props(docs = r#""#, value = "8"))] + Volatiles = 8u32, + #[strum(serialize = "Water", props(docs = r#""#, value = "32"))] + Water = 32u32, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum RocketMode { + #[strum(serialize = "Chart", props(docs = r#""#, value = "5"))] + Chart = 5u8, + #[strum(serialize = "Discover", props(docs = r#""#, value = "4"))] + Discover = 4u8, + #[strum(serialize = "Invalid", props(docs = r#""#, value = "0"))] + Invalid = 0u8, + #[strum(serialize = "Mine", props(docs = r#""#, value = "2"))] + Mine = 2u8, + #[strum(serialize = "None", props(docs = r#""#, value = "1"))] + None = 1u8, + #[strum(serialize = "Survey", props(docs = r#""#, value = "3"))] + Survey = 3u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum LogicSlotType { + #[strum( + serialize = "Charge", + props( + docs = r#"returns current energy charge the slot occupant is holding"#, + value = "10" + ) + )] + Charge = 10u8, + #[strum( + serialize = "ChargeRatio", + props( + docs = r#"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", + props( + docs = r#"returns integer representing the class of object"#, + value = "12" + ) + )] + Class = 12u8, + #[strum( + serialize = "Damage", + props( + docs = r#"returns the damage state of the item in the slot"#, + value = "4" + ) + )] + Damage = 4u8, + #[strum( + serialize = "Efficiency", + props( + docs = r#"returns the growth efficiency of the plant in the slot"#, + value = "5" + ) + )] + Efficiency = 5u8, + #[strum( + serialize = "FilterType", + props(docs = r#"No description available"#, value = "25") + )] + FilterType = 25u8, + #[strum( + serialize = "Growth", + props( + docs = r#"returns the current growth state of the plant in the slot"#, + value = "7" + ) + )] + Growth = 7u8, + #[strum( + serialize = "Health", + props(docs = r#"returns the health of the plant in the slot"#, value = "6") + )] + Health = 6u8, + #[strum( + serialize = "LineNumber", + props( + docs = r#"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 = "Lock", + props(docs = r#"No description available"#, value = "23") + )] + Lock = 23u8, + #[strum( + serialize = "Mature", + props( + docs = r#"returns 1 if the plant in this slot is mature, 0 when it isn't"#, + value = "16" + ) + )] + Mature = 16u8, + #[strum( + serialize = "MaxQuantity", + props( + docs = r#"returns the max stack size of the item in the slot"#, + value = "15" + ) + )] + MaxQuantity = 15u8, + #[strum(serialize = "None", props(docs = r#"No description"#, value = "0"))] + None = 0u8, + #[strum( + serialize = "OccupantHash", + props( + docs = r#"returns the has of the current occupant, the unique identifier of the thing"#, + value = "2" + ) + )] + OccupantHash = 2u8, + #[strum( + serialize = "Occupied", + props( + docs = r#"returns 0 when slot is not occupied, 1 when it is"#, + value = "1" + ) + )] + Occupied = 1u8, + #[strum( + serialize = "On", + props(docs = r#"No description available"#, value = "22") + )] + On = 22u8, + #[strum( + serialize = "Open", + props(docs = r#"No description available"#, value = "21") + )] + Open = 21u8, + #[strum( + serialize = "PrefabHash", + props( + docs = r#"returns the hash of the structure in the slot"#, + value = "17" + ) + )] + PrefabHash = 17u8, + #[strum( + serialize = "Pressure", + props( + docs = r#"returns pressure of the slot occupants internal atmosphere"#, + value = "8" + ) + )] + Pressure = 8u8, + #[strum( + serialize = "PressureAir", + props( + docs = r#"returns pressure in the air tank of the jetpack in this slot"#, + value = "14" + ) + )] + PressureAir = 14u8, + #[strum( + serialize = "PressureWaste", + props( + docs = r#"returns pressure in the waste tank of the jetpack in this slot"#, + value = "13" + ) + )] + PressureWaste = 13u8, + #[strum( + serialize = "Quantity", + props( + docs = r#"returns the current quantity, such as stack size, of the item in the slot"#, + value = "3" + ) + )] + Quantity = 3u8, + #[strum( + serialize = "ReferenceId", + props(docs = r#"Unique Reference Identifier for this object"#, value = "26") + )] + ReferenceId = 26u8, + #[strum( + serialize = "Seeding", + props( + docs = r#"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."#, + value = "18" + ) + )] + Seeding = 18u8, + #[strum( + serialize = "SortingClass", + props(docs = r#"No description available"#, value = "24") + )] + SortingClass = 24u8, + #[strum( + serialize = "Temperature", + props( + docs = r#"returns temperature of the slot occupants internal atmosphere"#, + value = "9" + ) + )] + Temperature = 9u8, + #[strum( + serialize = "Volume", + props(docs = r#"No description available"#, value = "20") + )] + Volume = 20u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u16)] +pub enum LogicType { + #[strum( + serialize = "Acceleration", + props( + docs = r#"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."#, + value = "216" + ) + )] + Acceleration = 216u16, + #[strum( + serialize = "Activate", + props( + docs = r#"1 if device is activated (usually means running), otherwise 0"#, + value = "9" + ) + )] + Activate = 9u16, + #[strum( + serialize = "AirRelease", + props( + docs = r#"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 = "AlignmentError", + props( + docs = r#"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 = "Apex", + props( + docs = r#"The lowest altitude that the rocket will reach before it starts travelling upwards again."#, + value = "238" + ) + )] + Apex = 238u16, + #[strum( + serialize = "AutoLand", + props( + docs = r#"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 = "AutoShutOff", + props( + docs = r#"Turns off all devices in the rocket upon reaching destination"#, + value = "218" + ) + )] + AutoShutOff = 218u16, + #[strum( + serialize = "BestContactFilter", + props( + docs = r#"Filters the satellite's auto selection of targets to a single reference ID."#, + value = "267" + ) + )] + BestContactFilter = 267u16, + #[strum(serialize = "Bpm", props(docs = r#"Bpm"#, value = "103"))] + Bpm = 103u16, + #[strum( + serialize = "BurnTimeRemaining", + props( + docs = r#"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."#, + value = "225" + ) + )] + BurnTimeRemaining = 225u16, + #[strum( + serialize = "CelestialHash", + props( + docs = r#"The current hash of the targeted celestial object."#, + value = "242" + ) + )] + CelestialHash = 242u16, + #[strum( + serialize = "CelestialParentHash", + props( + docs = r#"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 = "Channel0", + props( + docs = r#"Channel on a cable network which should be considered volatile"#, + value = "165" + ) + )] + Channel0 = 165u16, + #[strum( + serialize = "Channel1", + props( + docs = r#"Channel on a cable network which should be considered volatile"#, + value = "166" + ) + )] + Channel1 = 166u16, + #[strum( + serialize = "Channel2", + props( + docs = r#"Channel on a cable network which should be considered volatile"#, + value = "167" + ) + )] + Channel2 = 167u16, + #[strum( + serialize = "Channel3", + props( + docs = r#"Channel on a cable network which should be considered volatile"#, + value = "168" + ) + )] + Channel3 = 168u16, + #[strum( + serialize = "Channel4", + props( + docs = r#"Channel on a cable network which should be considered volatile"#, + value = "169" + ) + )] + Channel4 = 169u16, + #[strum( + serialize = "Channel5", + props( + docs = r#"Channel on a cable network which should be considered volatile"#, + value = "170" + ) + )] + Channel5 = 170u16, + #[strum( + serialize = "Channel6", + props( + docs = r#"Channel on a cable network which should be considered volatile"#, + value = "171" + ) + )] + Channel6 = 171u16, + #[strum( + serialize = "Channel7", + props( + docs = r#"Channel on a cable network which should be considered volatile"#, + value = "172" + ) + )] + Channel7 = 172u16, + #[strum( + serialize = "Charge", + props(docs = r#"The current charge the device has"#, value = "11") + )] + Charge = 11u16, + #[strum( + serialize = "Chart", + props( + docs = r#"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 = "ChartedNavPoints", + props( + docs = r#"The number of charted NavPoints at the rocket's target Space Map Location."#, + value = "259" + ) + )] + ChartedNavPoints = 259u16, + #[strum( + serialize = "ClearMemory", + props( + docs = r#"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 = "CollectableGoods", + props( + docs = r#"Gets the cost of fuel to return the rocket to your current world."#, + value = "101" + ) + )] + CollectableGoods = 101u16, + #[strum( + serialize = "Color", + props( + docs = r#" + 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. + +0: Blue +1: Grey +2: Green +3: Orange +4: Red +5: Yellow +6: White +7: Black +8: Brown +9: Khaki +10: Pink +11: Purple + + 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. + "#, + value = "38" + ) + )] + Color = 38u16, + #[strum( + serialize = "Combustion", + props( + docs = r#"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."#, + value = "98" + ) + )] + Combustion = 98u16, + #[strum( + serialize = "CombustionInput", + props( + docs = r#"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", + props( + docs = r#"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 = "CombustionLimiter", + props( + docs = r#"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 = "CombustionOutput", + props( + docs = r#"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", + props( + docs = r#"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 = "CompletionRatio", + props( + docs = r#"How complete the current production is for this device, between 0 and 1"#, + value = "61" + ) + )] + CompletionRatio = 61u16, + #[strum( + serialize = "ContactTypeId", + props(docs = r#"The type id of the contact."#, value = "198") + )] + ContactTypeId = 198u16, + #[strum( + serialize = "CurrentCode", + props( + docs = r#"The Space Map Address of the rockets current Space Map Location"#, + value = "261" + ) + )] + CurrentCode = 261u16, + #[strum( + serialize = "CurrentResearchPodType", + props(docs = r#""#, value = "93") + )] + CurrentResearchPodType = 93u16, + #[strum( + serialize = "Density", + props( + docs = r#"The density of the rocket's target site's mine-able deposit."#, + value = "262" + ) + )] + Density = 262u16, + #[strum( + serialize = "DestinationCode", + props( + docs = r#"The Space Map Address of the rockets target Space Map Location"#, + value = "215" + ) + )] + DestinationCode = 215u16, + #[strum( + serialize = "Discover", + props( + docs = r#"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 = "DistanceAu", + props( + docs = r#"The current distance to the celestial object, measured in astronomical units."#, + value = "244" + ) + )] + DistanceAu = 244u16, + #[strum( + serialize = "DistanceKm", + props( + docs = r#"The current distance to the celestial object, measured in kilometers."#, + value = "249" + ) + )] + DistanceKm = 249u16, + #[strum( + serialize = "DrillCondition", + props( + docs = r#"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 = "DryMass", + props( + docs = r#"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 = "Eccentricity", + props( + docs = r#"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 = "ElevatorLevel", + props(docs = r#"Level the elevator is currently at"#, value = "40") + )] + ElevatorLevel = 40u16, + #[strum( + serialize = "ElevatorSpeed", + props(docs = r#"Current speed of the elevator"#, value = "39") + )] + ElevatorSpeed = 39u16, + #[strum( + serialize = "EntityState", + props( + docs = r#"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."#, + value = "239" + ) + )] + EntityState = 239u16, + #[strum( + serialize = "EnvironmentEfficiency", + props( + docs = r#"The Environment Efficiency reported by the machine, as a float between 0 and 1"#, + value = "104" + ) + )] + EnvironmentEfficiency = 104u16, + #[strum( + serialize = "Error", + props(docs = r#"1 if device is in error state, otherwise 0"#, value = "4") + )] + Error = 4u16, + #[strum( + serialize = "ExhaustVelocity", + props(docs = r#"The velocity of the exhaust gas in m/s"#, value = "235") + )] + ExhaustVelocity = 235u16, + #[strum( + serialize = "ExportCount", + props( + docs = r#"How many items exported since last ClearMemory"#, + value = "63" + ) + )] + ExportCount = 63u16, + #[strum( + serialize = "ExportQuantity", + props( + deprecated = "true", + docs = r#"Total quantity of items exported by the device"#, + value = "31" + ) + )] + ExportQuantity = 31u16, + #[strum( + serialize = "ExportSlotHash", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "42") + )] + ExportSlotHash = 42u16, + #[strum( + serialize = "ExportSlotOccupant", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "32") + )] + ExportSlotOccupant = 32u16, + #[strum( + serialize = "Filtration", + props( + docs = r#"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"#, + value = "74" + ) + )] + Filtration = 74u16, + #[strum( + serialize = "FlightControlRule", + props( + docs = r#"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 = "Flush", + props( + docs = r#"Set to 1 to activate the flush function on the device"#, + value = "174" + ) + )] + Flush = 174u16, + #[strum( + serialize = "ForceWrite", + props(docs = r#"Forces Logic Writer devices to rewrite value"#, value = "85") + )] + ForceWrite = 85u16, + #[strum( + serialize = "ForwardX", + props( + docs = r#"The direction the entity is facing expressed as a normalized vector"#, + value = "227" + ) + )] + ForwardX = 227u16, + #[strum( + serialize = "ForwardY", + props( + docs = r#"The direction the entity is facing expressed as a normalized vector"#, + value = "228" + ) + )] + ForwardY = 228u16, + #[strum( + serialize = "ForwardZ", + props( + docs = r#"The direction the entity is facing expressed as a normalized vector"#, + value = "229" + ) + )] + ForwardZ = 229u16, + #[strum( + serialize = "Fuel", + props( + docs = r#"Gets the cost of fuel to return the rocket to your current world."#, + value = "99" + ) + )] + Fuel = 99u16, + #[strum( + serialize = "Harvest", + props( + docs = r#"Performs the harvesting action for any plant based machinery"#, + value = "69" + ) + )] + Harvest = 69u16, + #[strum( + serialize = "Horizontal", + props(docs = r#"Horizontal setting of the device"#, value = "20") + )] + Horizontal = 20u16, + #[strum( + serialize = "HorizontalRatio", + props(docs = r#"Radio of horizontal setting for device"#, value = "34") + )] + HorizontalRatio = 34u16, + #[strum( + serialize = "Idle", + props( + docs = r#"Returns 1 if the device is currently idle, otherwise 0"#, + value = "37" + ) + )] + Idle = 37u16, + #[strum( + serialize = "ImportCount", + props( + docs = r#"How many items imported since last ClearMemory"#, + value = "64" + ) + )] + ImportCount = 64u16, + #[strum( + serialize = "ImportQuantity", + props( + deprecated = "true", + docs = r#"Total quantity of items imported by the device"#, + value = "29" + ) + )] + ImportQuantity = 29u16, + #[strum( + serialize = "ImportSlotHash", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "43") + )] + ImportSlotHash = 43u16, + #[strum( + serialize = "ImportSlotOccupant", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "30") + )] + ImportSlotOccupant = 30u16, + #[strum( + serialize = "Inclination", + props( + docs = r#"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 = "Index", + props(docs = r#"The current index for the device."#, value = "241") + )] + Index = 241u16, + #[strum( + serialize = "InterrogationProgress", + props( + docs = r#"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"#, + value = "157" + ) + )] + InterrogationProgress = 157u16, + #[strum( + serialize = "LineNumber", + props( + docs = r#"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 = "Lock", + props( + docs = r#"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 = "ManualResearchRequiredPod", + props( + docs = r#"Sets the pod type to search for a certain pod when breaking down a pods."#, + value = "94" + ) + )] + ManualResearchRequiredPod = 94u16, + #[strum( + serialize = "Mass", + props( + docs = r#"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 = "Maximum", + props(docs = r#"Maximum setting of the device"#, value = "23") + )] + Maximum = 23u16, + #[strum( + serialize = "MineablesInQueue", + props( + docs = r#"Returns the amount of mineables AIMEe has queued up to mine."#, + value = "96" + ) + )] + MineablesInQueue = 96u16, + #[strum( + serialize = "MineablesInVicinity", + props( + docs = r#"Returns the amount of potential mineables within an extended area around AIMEe."#, + value = "95" + ) + )] + MineablesInVicinity = 95u16, + #[strum( + serialize = "MinedQuantity", + props( + docs = r#"The total number of resources that have been mined at the rocket's target Space Map Site."#, + value = "266" + ) + )] + MinedQuantity = 266u16, + #[strum( + serialize = "MinimumWattsToContact", + props( + docs = r#"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"#, + value = "163" + ) + )] + MinimumWattsToContact = 163u16, + #[strum( + serialize = "Mode", + props( + docs = r#"Integer for mode state, different devices will have different mode states available to them"#, + value = "3" + ) + )] + Mode = 3u16, + #[strum( + serialize = "NavPoints", + props( + docs = r#"The number of NavPoints at the rocket's target Space Map Location."#, + value = "258" + ) + )] + NavPoints = 258u16, + #[strum( + serialize = "NextWeatherEventTime", + props( + docs = r#"Returns in seconds when the next weather event is inbound."#, + value = "97" + ) + )] + NextWeatherEventTime = 97u16, + #[strum( + serialize = "None", + props(deprecated = "true", docs = r#"No description"#, value = "0") + )] + None = 0u16, + #[strum( + serialize = "On", + props( + docs = r#"The current state of the device, 0 for off, 1 for on"#, + value = "28" + ) + )] + On = 28u16, + #[strum( + serialize = "Open", + props(docs = r#"1 if device is open, otherwise 0"#, value = "2") + )] + Open = 2u16, + #[strum( + serialize = "OperationalTemperatureEfficiency", + props( + docs = r#"How the input pipe's temperature effects the machines efficiency"#, + value = "150" + ) + )] + OperationalTemperatureEfficiency = 150u16, + #[strum( + serialize = "OrbitPeriod", + props( + docs = r#"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 = "Orientation", + props( + docs = r#"The orientation of the entity in degrees in a plane relative towards the north origin"#, + value = "230" + ) + )] + Orientation = 230u16, + #[strum( + serialize = "Output", + props( + docs = r#"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 = "PassedMoles", + props( + docs = r#"The number of moles that passed through this device on the previous simulation tick"#, + value = "234" + ) + )] + PassedMoles = 234u16, + #[strum( + serialize = "Plant", + props( + docs = r#"Performs the planting action for any plant based machinery"#, + value = "68" + ) + )] + Plant = 68u16, + #[strum( + serialize = "PlantEfficiency1", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "52") + )] + PlantEfficiency1 = 52u16, + #[strum( + serialize = "PlantEfficiency2", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "53") + )] + PlantEfficiency2 = 53u16, + #[strum( + serialize = "PlantEfficiency3", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "54") + )] + PlantEfficiency3 = 54u16, + #[strum( + serialize = "PlantEfficiency4", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "55") + )] + PlantEfficiency4 = 55u16, + #[strum( + serialize = "PlantGrowth1", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "48") + )] + PlantGrowth1 = 48u16, + #[strum( + serialize = "PlantGrowth2", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "49") + )] + PlantGrowth2 = 49u16, + #[strum( + serialize = "PlantGrowth3", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "50") + )] + PlantGrowth3 = 50u16, + #[strum( + serialize = "PlantGrowth4", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "51") + )] + PlantGrowth4 = 51u16, + #[strum( + serialize = "PlantHash1", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "56") + )] + PlantHash1 = 56u16, + #[strum( + serialize = "PlantHash2", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "57") + )] + PlantHash2 = 57u16, + #[strum( + serialize = "PlantHash3", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "58") + )] + PlantHash3 = 58u16, + #[strum( + serialize = "PlantHash4", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "59") + )] + PlantHash4 = 59u16, + #[strum( + serialize = "PlantHealth1", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "44") + )] + PlantHealth1 = 44u16, + #[strum( + serialize = "PlantHealth2", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "45") + )] + PlantHealth2 = 45u16, + #[strum( + serialize = "PlantHealth3", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "46") + )] + PlantHealth3 = 46u16, + #[strum( + serialize = "PlantHealth4", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "47") + )] + PlantHealth4 = 47u16, + #[strum( + serialize = "PositionX", + props( + docs = r#"The current position in X dimension in world coordinates"#, + value = "76" + ) + )] + PositionX = 76u16, + #[strum( + serialize = "PositionY", + props( + docs = r#"The current position in Y dimension in world coordinates"#, + value = "77" + ) + )] + PositionY = 77u16, + #[strum( + serialize = "PositionZ", + props( + docs = r#"The current position in Z dimension in world coordinates"#, + value = "78" + ) + )] + PositionZ = 78u16, + #[strum( + serialize = "Power", + props( + docs = r#"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 = "PowerActual", + props( + docs = r#"How much energy the device or network is actually using"#, + value = "26" + ) + )] + PowerActual = 26u16, + #[strum( + serialize = "PowerGeneration", + props(docs = r#"Returns how much power is being generated"#, value = "65") + )] + PowerGeneration = 65u16, + #[strum( + serialize = "PowerPotential", + props( + docs = r#"How much energy the device or network potentially provides"#, + value = "25" + ) + )] + PowerPotential = 25u16, + #[strum( + serialize = "PowerRequired", + props( + docs = r#"Power requested from the device and/or network"#, + value = "36" + ) + )] + PowerRequired = 36u16, + #[strum( + serialize = "PrefabHash", + props(docs = r#"The hash of the structure"#, value = "84") + )] + PrefabHash = 84u16, + #[strum( + serialize = "Pressure", + props(docs = r#"The current pressure reading of the device"#, value = "5") + )] + Pressure = 5u16, + #[strum( + serialize = "PressureEfficiency", + props( + docs = r#"How the pressure of the input pipe and waste pipe effect the machines efficiency"#, + value = "152" + ) + )] + PressureEfficiency = 152u16, + #[strum( + serialize = "PressureExternal", + props(docs = r#"Setting for external pressure safety, in KPa"#, value = "7") + )] + PressureExternal = 7u16, + #[strum( + serialize = "PressureInput", + props( + docs = r#"The current pressure reading of the device's Input Network"#, + value = "106" + ) + )] + PressureInput = 106u16, + #[strum( + serialize = "PressureInput2", + props( + docs = r#"The current pressure reading of the device's Input2 Network"#, + value = "116" + ) + )] + PressureInput2 = 116u16, + #[strum( + serialize = "PressureInternal", + props(docs = r#"Setting for internal pressure safety, in KPa"#, value = "8") + )] + PressureInternal = 8u16, + #[strum( + serialize = "PressureOutput", + props( + docs = r#"The current pressure reading of the device's Output Network"#, + value = "126" + ) + )] + PressureOutput = 126u16, + #[strum( + serialize = "PressureOutput2", + props( + docs = r#"The current pressure reading of the device's Output2 Network"#, + value = "136" + ) + )] + PressureOutput2 = 136u16, + #[strum( + serialize = "PressureSetting", + props( + docs = r#"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"#, + value = "71" + ) + )] + PressureSetting = 71u16, + #[strum( + serialize = "Progress", + props( + docs = r#"Progress of the rocket to the next node on the map expressed as a value between 0-1."#, + value = "214" + ) + )] + Progress = 214u16, + #[strum( + serialize = "Quantity", + props(docs = r#"Total quantity on the device"#, value = "27") + )] + Quantity = 27u16, + #[strum( + serialize = "Ratio", + props( + docs = r#"Context specific value depending on device, 0 to 1 based ratio"#, + value = "24" + ) + )] + Ratio = 24u16, + #[strum( + serialize = "RatioCarbonDioxide", + props( + docs = r#"The ratio of Carbon Dioxide in device atmosphere"#, + value = "15" + ) + )] + RatioCarbonDioxide = 15u16, + #[strum( + serialize = "RatioCarbonDioxideInput", + props( + docs = r#"The ratio of Carbon Dioxide in device's input network"#, + value = "109" + ) + )] + RatioCarbonDioxideInput = 109u16, + #[strum( + serialize = "RatioCarbonDioxideInput2", + props( + docs = r#"The ratio of Carbon Dioxide in device's Input2 network"#, + value = "119" + ) + )] + RatioCarbonDioxideInput2 = 119u16, + #[strum( + serialize = "RatioCarbonDioxideOutput", + props( + docs = r#"The ratio of Carbon Dioxide in device's Output network"#, + value = "129" + ) + )] + RatioCarbonDioxideOutput = 129u16, + #[strum( + serialize = "RatioCarbonDioxideOutput2", + props( + docs = r#"The ratio of Carbon Dioxide in device's Output2 network"#, + value = "139" + ) + )] + RatioCarbonDioxideOutput2 = 139u16, + #[strum( + serialize = "RatioHydrogen", + props( + docs = r#"The ratio of Hydrogen in device's Atmopshere"#, + value = "252" + ) + )] + RatioHydrogen = 252u16, + #[strum( + serialize = "RatioLiquidCarbonDioxide", + props( + docs = r#"The ratio of Liquid Carbon Dioxide in device's Atmosphere"#, + value = "199" + ) + )] + RatioLiquidCarbonDioxide = 199u16, + #[strum( + serialize = "RatioLiquidCarbonDioxideInput", + props( + docs = r#"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"#, + value = "200" + ) + )] + RatioLiquidCarbonDioxideInput = 200u16, + #[strum( + serialize = "RatioLiquidCarbonDioxideInput2", + props( + docs = r#"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"#, + value = "201" + ) + )] + RatioLiquidCarbonDioxideInput2 = 201u16, + #[strum( + serialize = "RatioLiquidCarbonDioxideOutput", + props( + docs = r#"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"#, + value = "202" + ) + )] + RatioLiquidCarbonDioxideOutput = 202u16, + #[strum( + serialize = "RatioLiquidCarbonDioxideOutput2", + props( + docs = r#"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"#, + value = "203" + ) + )] + RatioLiquidCarbonDioxideOutput2 = 203u16, + #[strum( + serialize = "RatioLiquidHydrogen", + props( + docs = r#"The ratio of Liquid Hydrogen in device's Atmopshere"#, + value = "253" + ) + )] + RatioLiquidHydrogen = 253u16, + #[strum( + serialize = "RatioLiquidNitrogen", + props( + docs = r#"The ratio of Liquid Nitrogen in device atmosphere"#, + value = "177" + ) + )] + RatioLiquidNitrogen = 177u16, + #[strum( + serialize = "RatioLiquidNitrogenInput", + props( + docs = r#"The ratio of Liquid Nitrogen in device's input network"#, + value = "178" + ) + )] + RatioLiquidNitrogenInput = 178u16, + #[strum( + serialize = "RatioLiquidNitrogenInput2", + props( + docs = r#"The ratio of Liquid Nitrogen in device's Input2 network"#, + value = "179" + ) + )] + RatioLiquidNitrogenInput2 = 179u16, + #[strum( + serialize = "RatioLiquidNitrogenOutput", + props( + docs = r#"The ratio of Liquid Nitrogen in device's Output network"#, + value = "180" + ) + )] + RatioLiquidNitrogenOutput = 180u16, + #[strum( + serialize = "RatioLiquidNitrogenOutput2", + props( + docs = r#"The ratio of Liquid Nitrogen in device's Output2 network"#, + value = "181" + ) + )] + RatioLiquidNitrogenOutput2 = 181u16, + #[strum( + serialize = "RatioLiquidNitrousOxide", + props( + docs = r#"The ratio of Liquid Nitrous Oxide in device's Atmosphere"#, + value = "209" + ) + )] + RatioLiquidNitrousOxide = 209u16, + #[strum( + serialize = "RatioLiquidNitrousOxideInput", + props( + docs = r#"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"#, + value = "210" + ) + )] + RatioLiquidNitrousOxideInput = 210u16, + #[strum( + serialize = "RatioLiquidNitrousOxideInput2", + props( + docs = r#"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"#, + value = "211" + ) + )] + RatioLiquidNitrousOxideInput2 = 211u16, + #[strum( + serialize = "RatioLiquidNitrousOxideOutput", + props( + docs = r#"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"#, + value = "212" + ) + )] + RatioLiquidNitrousOxideOutput = 212u16, + #[strum( + serialize = "RatioLiquidNitrousOxideOutput2", + props( + docs = r#"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"#, + value = "213" + ) + )] + RatioLiquidNitrousOxideOutput2 = 213u16, + #[strum( + serialize = "RatioLiquidOxygen", + props( + docs = r#"The ratio of Liquid Oxygen in device's Atmosphere"#, + value = "183" + ) + )] + RatioLiquidOxygen = 183u16, + #[strum( + serialize = "RatioLiquidOxygenInput", + props( + docs = r#"The ratio of Liquid Oxygen in device's Input Atmosphere"#, + value = "184" + ) + )] + RatioLiquidOxygenInput = 184u16, + #[strum( + serialize = "RatioLiquidOxygenInput2", + props( + docs = r#"The ratio of Liquid Oxygen in device's Input2 Atmosphere"#, + value = "185" + ) + )] + RatioLiquidOxygenInput2 = 185u16, + #[strum( + serialize = "RatioLiquidOxygenOutput", + props( + docs = r#"The ratio of Liquid Oxygen in device's device's Output Atmosphere"#, + value = "186" + ) + )] + RatioLiquidOxygenOutput = 186u16, + #[strum( + serialize = "RatioLiquidOxygenOutput2", + props( + docs = r#"The ratio of Liquid Oxygen in device's Output2 Atmopshere"#, + value = "187" + ) + )] + RatioLiquidOxygenOutput2 = 187u16, + #[strum( + serialize = "RatioLiquidPollutant", + props( + docs = r#"The ratio of Liquid Pollutant in device's Atmosphere"#, + value = "204" + ) + )] + RatioLiquidPollutant = 204u16, + #[strum( + serialize = "RatioLiquidPollutantInput", + props( + docs = r#"The ratio of Liquid Pollutant in device's Input Atmosphere"#, + value = "205" + ) + )] + RatioLiquidPollutantInput = 205u16, + #[strum( + serialize = "RatioLiquidPollutantInput2", + props( + docs = r#"The ratio of Liquid Pollutant in device's Input2 Atmosphere"#, + value = "206" + ) + )] + RatioLiquidPollutantInput2 = 206u16, + #[strum( + serialize = "RatioLiquidPollutantOutput", + props( + docs = r#"The ratio of Liquid Pollutant in device's device's Output Atmosphere"#, + value = "207" + ) + )] + RatioLiquidPollutantOutput = 207u16, + #[strum( + serialize = "RatioLiquidPollutantOutput2", + props( + docs = r#"The ratio of Liquid Pollutant in device's Output2 Atmopshere"#, + value = "208" + ) + )] + RatioLiquidPollutantOutput2 = 208u16, + #[strum( + serialize = "RatioLiquidVolatiles", + props( + docs = r#"The ratio of Liquid Volatiles in device's Atmosphere"#, + value = "188" + ) + )] + RatioLiquidVolatiles = 188u16, + #[strum( + serialize = "RatioLiquidVolatilesInput", + props( + docs = r#"The ratio of Liquid Volatiles in device's Input Atmosphere"#, + value = "189" + ) + )] + RatioLiquidVolatilesInput = 189u16, + #[strum( + serialize = "RatioLiquidVolatilesInput2", + props( + docs = r#"The ratio of Liquid Volatiles in device's Input2 Atmosphere"#, + value = "190" + ) + )] + RatioLiquidVolatilesInput2 = 190u16, + #[strum( + serialize = "RatioLiquidVolatilesOutput", + props( + docs = r#"The ratio of Liquid Volatiles in device's device's Output Atmosphere"#, + value = "191" + ) + )] + RatioLiquidVolatilesOutput = 191u16, + #[strum( + serialize = "RatioLiquidVolatilesOutput2", + props( + docs = r#"The ratio of Liquid Volatiles in device's Output2 Atmopshere"#, + value = "192" + ) + )] + RatioLiquidVolatilesOutput2 = 192u16, + #[strum( + serialize = "RatioNitrogen", + props(docs = r#"The ratio of nitrogen in device atmosphere"#, value = "16") + )] + RatioNitrogen = 16u16, + #[strum( + serialize = "RatioNitrogenInput", + props( + docs = r#"The ratio of nitrogen in device's input network"#, + value = "110" + ) + )] + RatioNitrogenInput = 110u16, + #[strum( + serialize = "RatioNitrogenInput2", + props( + docs = r#"The ratio of nitrogen in device's Input2 network"#, + value = "120" + ) + )] + RatioNitrogenInput2 = 120u16, + #[strum( + serialize = "RatioNitrogenOutput", + props( + docs = r#"The ratio of nitrogen in device's Output network"#, + value = "130" + ) + )] + RatioNitrogenOutput = 130u16, + #[strum( + serialize = "RatioNitrogenOutput2", + props( + docs = r#"The ratio of nitrogen in device's Output2 network"#, + value = "140" + ) + )] + RatioNitrogenOutput2 = 140u16, + #[strum( + serialize = "RatioNitrousOxide", + props( + docs = r#"The ratio of Nitrous Oxide in device atmosphere"#, + value = "83" + ) + )] + RatioNitrousOxide = 83u16, + #[strum( + serialize = "RatioNitrousOxideInput", + props( + docs = r#"The ratio of Nitrous Oxide in device's input network"#, + value = "114" + ) + )] + RatioNitrousOxideInput = 114u16, + #[strum( + serialize = "RatioNitrousOxideInput2", + props( + docs = r#"The ratio of Nitrous Oxide in device's Input2 network"#, + value = "124" + ) + )] + RatioNitrousOxideInput2 = 124u16, + #[strum( + serialize = "RatioNitrousOxideOutput", + props( + docs = r#"The ratio of Nitrous Oxide in device's Output network"#, + value = "134" + ) + )] + RatioNitrousOxideOutput = 134u16, + #[strum( + serialize = "RatioNitrousOxideOutput2", + props( + docs = r#"The ratio of Nitrous Oxide in device's Output2 network"#, + value = "144" + ) + )] + RatioNitrousOxideOutput2 = 144u16, + #[strum( + serialize = "RatioOxygen", + props(docs = r#"The ratio of oxygen in device atmosphere"#, value = "14") + )] + RatioOxygen = 14u16, + #[strum( + serialize = "RatioOxygenInput", + props( + docs = r#"The ratio of oxygen in device's input network"#, + value = "108" + ) + )] + RatioOxygenInput = 108u16, + #[strum( + serialize = "RatioOxygenInput2", + props( + docs = r#"The ratio of oxygen in device's Input2 network"#, + value = "118" + ) + )] + RatioOxygenInput2 = 118u16, + #[strum( + serialize = "RatioOxygenOutput", + props( + docs = r#"The ratio of oxygen in device's Output network"#, + value = "128" + ) + )] + RatioOxygenOutput = 128u16, + #[strum( + serialize = "RatioOxygenOutput2", + props( + docs = r#"The ratio of oxygen in device's Output2 network"#, + value = "138" + ) + )] + RatioOxygenOutput2 = 138u16, + #[strum( + serialize = "RatioPollutant", + props(docs = r#"The ratio of pollutant in device atmosphere"#, value = "17") + )] + RatioPollutant = 17u16, + #[strum( + serialize = "RatioPollutantInput", + props( + docs = r#"The ratio of pollutant in device's input network"#, + value = "111" + ) + )] + RatioPollutantInput = 111u16, + #[strum( + serialize = "RatioPollutantInput2", + props( + docs = r#"The ratio of pollutant in device's Input2 network"#, + value = "121" + ) + )] + RatioPollutantInput2 = 121u16, + #[strum( + serialize = "RatioPollutantOutput", + props( + docs = r#"The ratio of pollutant in device's Output network"#, + value = "131" + ) + )] + RatioPollutantOutput = 131u16, + #[strum( + serialize = "RatioPollutantOutput2", + props( + docs = r#"The ratio of pollutant in device's Output2 network"#, + value = "141" + ) + )] + RatioPollutantOutput2 = 141u16, + #[strum( + serialize = "RatioPollutedWater", + props( + docs = r#"The ratio of polluted water in device atmosphere"#, + value = "254" + ) + )] + RatioPollutedWater = 254u16, + #[strum( + serialize = "RatioSteam", + props( + docs = r#"The ratio of Steam in device's Atmosphere"#, + value = "193" + ) + )] + RatioSteam = 193u16, + #[strum( + serialize = "RatioSteamInput", + props( + docs = r#"The ratio of Steam in device's Input Atmosphere"#, + value = "194" + ) + )] + RatioSteamInput = 194u16, + #[strum( + serialize = "RatioSteamInput2", + props( + docs = r#"The ratio of Steam in device's Input2 Atmosphere"#, + value = "195" + ) + )] + RatioSteamInput2 = 195u16, + #[strum( + serialize = "RatioSteamOutput", + props( + docs = r#"The ratio of Steam in device's device's Output Atmosphere"#, + value = "196" + ) + )] + RatioSteamOutput = 196u16, + #[strum( + serialize = "RatioSteamOutput2", + props( + docs = r#"The ratio of Steam in device's Output2 Atmopshere"#, + value = "197" + ) + )] + RatioSteamOutput2 = 197u16, + #[strum( + serialize = "RatioVolatiles", + props(docs = r#"The ratio of volatiles in device atmosphere"#, value = "18") + )] + RatioVolatiles = 18u16, + #[strum( + serialize = "RatioVolatilesInput", + props( + docs = r#"The ratio of volatiles in device's input network"#, + value = "112" + ) + )] + RatioVolatilesInput = 112u16, + #[strum( + serialize = "RatioVolatilesInput2", + props( + docs = r#"The ratio of volatiles in device's Input2 network"#, + value = "122" + ) + )] + RatioVolatilesInput2 = 122u16, + #[strum( + serialize = "RatioVolatilesOutput", + props( + docs = r#"The ratio of volatiles in device's Output network"#, + value = "132" + ) + )] + RatioVolatilesOutput = 132u16, + #[strum( + serialize = "RatioVolatilesOutput2", + props( + docs = r#"The ratio of volatiles in device's Output2 network"#, + value = "142" + ) + )] + RatioVolatilesOutput2 = 142u16, + #[strum( + serialize = "RatioWater", + props(docs = r#"The ratio of water in device atmosphere"#, value = "19") + )] + RatioWater = 19u16, + #[strum( + serialize = "RatioWaterInput", + props( + docs = r#"The ratio of water in device's input network"#, + value = "113" + ) + )] + RatioWaterInput = 113u16, + #[strum( + serialize = "RatioWaterInput2", + props( + docs = r#"The ratio of water in device's Input2 network"#, + value = "123" + ) + )] + RatioWaterInput2 = 123u16, + #[strum( + serialize = "RatioWaterOutput", + props( + docs = r#"The ratio of water in device's Output network"#, + value = "133" + ) + )] + RatioWaterOutput = 133u16, + #[strum( + serialize = "RatioWaterOutput2", + props( + docs = r#"The ratio of water in device's Output2 network"#, + value = "143" + ) + )] + RatioWaterOutput2 = 143u16, + #[strum( + serialize = "ReEntryAltitude", + props( + docs = r#"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"#, + value = "237" + ) + )] + ReEntryAltitude = 237u16, + #[strum( + serialize = "Reagents", + props( + docs = r#"Total number of reagents recorded by the device"#, + value = "13" + ) + )] + Reagents = 13u16, + #[strum( + serialize = "RecipeHash", + props( + docs = r#"Current hash of the recipe the device is set to produce"#, + value = "41" + ) + )] + RecipeHash = 41u16, + #[strum( + serialize = "ReferenceId", + props(docs = r#"Unique Reference Identifier for this object"#, value = "217") + )] + ReferenceId = 217u16, + #[strum( + serialize = "RequestHash", + props( + docs = r#"When set to the unique identifier, requests an item of the provided type from the device"#, + value = "60" + ) + )] + RequestHash = 60u16, + #[strum( + serialize = "RequiredPower", + props( + docs = r#"Idle operating power quantity, does not necessarily include extra demand power"#, + value = "33" + ) + )] + RequiredPower = 33u16, + #[strum( + serialize = "ReturnFuelCost", + props( + docs = r#"Gets the fuel remaining in your rocket's fuel tank."#, + value = "100" + ) + )] + ReturnFuelCost = 100u16, + #[strum( + serialize = "Richness", + props( + docs = r#"The richness of the rocket's target site's mine-able deposit."#, + value = "263" + ) + )] + Richness = 263u16, + #[strum( + serialize = "Rpm", + props( + docs = r#"The number of revolutions per minute that the device's spinning mechanism is doing"#, + value = "155" + ) + )] + Rpm = 155u16, + #[strum( + serialize = "SemiMajorAxis", + props( + docs = r#"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 = "Setting", + props( + docs = r#"A variable setting that can be read or written, depending on the device"#, + value = "12" + ) + )] + Setting = 12u16, + #[strum( + serialize = "SettingInput", + props(docs = r#""#, value = "91") + )] + SettingInput = 91u16, + #[strum( + serialize = "SettingOutput", + props(docs = r#""#, value = "92") + )] + SettingOutput = 92u16, + #[strum( + serialize = "SignalID", + props( + docs = r#"Returns the contact ID of the strongest signal from this Satellite"#, + value = "87" + ) + )] + SignalId = 87u16, + #[strum( + serialize = "SignalStrength", + props( + docs = r#"Returns the degree offset of the strongest contact"#, + value = "86" + ) + )] + SignalStrength = 86u16, + #[strum( + serialize = "Sites", + props( + docs = r#"The number of Sites that have been discovered at the rockets target Space Map location."#, + value = "260" + ) + )] + Sites = 260u16, + #[strum( + serialize = "Size", + props( + docs = r#"The size of the rocket's target site's mine-able deposit."#, + value = "264" + ) + )] + Size = 264u16, + #[strum( + serialize = "SizeX", + props( + docs = r#"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"#, + value = "160" + ) + )] + SizeX = 160u16, + #[strum( + serialize = "SizeY", + props( + docs = r#"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"#, + value = "161" + ) + )] + SizeY = 161u16, + #[strum( + serialize = "SizeZ", + props( + docs = r#"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"#, + value = "162" + ) + )] + SizeZ = 162u16, + #[strum( + serialize = "SolarAngle", + props(docs = r#"Solar angle of the device"#, value = "22") + )] + SolarAngle = 22u16, + #[strum( + serialize = "SolarIrradiance", + props(docs = r#""#, value = "176") + )] + SolarIrradiance = 176u16, + #[strum( + serialize = "SoundAlert", + props(docs = r#"Plays a sound alert on the devices speaker"#, value = "175") + )] + SoundAlert = 175u16, + #[strum( + serialize = "Stress", + props( + docs = r#"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"#, + value = "156" + ) + )] + Stress = 156u16, + #[strum( + serialize = "Survey", + props( + docs = r#"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 = "TargetPadIndex", + props( + docs = r#"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 = "TargetX", + props( + docs = r#"The target position in X dimension in world coordinates"#, + value = "88" + ) + )] + TargetX = 88u16, + #[strum( + serialize = "TargetY", + props( + docs = r#"The target position in Y dimension in world coordinates"#, + value = "89" + ) + )] + TargetY = 89u16, + #[strum( + serialize = "TargetZ", + props( + docs = r#"The target position in Z dimension in world coordinates"#, + value = "90" + ) + )] + TargetZ = 90u16, + #[strum( + serialize = "Temperature", + props(docs = r#"The current temperature reading of the device"#, value = "6") + )] + Temperature = 6u16, + #[strum( + serialize = "TemperatureDifferentialEfficiency", + props( + docs = r#"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"#, + value = "151" + ) + )] + TemperatureDifferentialEfficiency = 151u16, + #[strum( + serialize = "TemperatureExternal", + props( + docs = r#"The temperature of the outside of the device, usually the world atmosphere surrounding it"#, + value = "73" + ) + )] + TemperatureExternal = 73u16, + #[strum( + serialize = "TemperatureInput", + props( + docs = r#"The current temperature reading of the device's Input Network"#, + value = "107" + ) + )] + TemperatureInput = 107u16, + #[strum( + serialize = "TemperatureInput2", + props( + docs = r#"The current temperature reading of the device's Input2 Network"#, + value = "117" + ) + )] + TemperatureInput2 = 117u16, + #[strum( + serialize = "TemperatureOutput", + props( + docs = r#"The current temperature reading of the device's Output Network"#, + value = "127" + ) + )] + TemperatureOutput = 127u16, + #[strum( + serialize = "TemperatureOutput2", + props( + docs = r#"The current temperature reading of the device's Output2 Network"#, + value = "137" + ) + )] + TemperatureOutput2 = 137u16, + #[strum( + serialize = "TemperatureSetting", + props( + docs = r#"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"#, + value = "72" + ) + )] + TemperatureSetting = 72u16, + #[strum( + serialize = "Throttle", + props( + docs = r#"Increases the rate at which the machine works (range: 0-100)"#, + value = "154" + ) + )] + Throttle = 154u16, + #[strum( + serialize = "Thrust", + props( + docs = r#"Total current thrust of all rocket engines on the rocket in Newtons."#, + value = "221" + ) + )] + Thrust = 221u16, + #[strum( + serialize = "ThrustToWeight", + props( + docs = r#"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 = "Time", props(docs = r#"Time"#, value = "102"))] + Time = 102u16, + #[strum( + serialize = "TimeToDestination", + props( + docs = r#"Estimated time in seconds until rocket arrives at target destination."#, + value = "224" + ) + )] + TimeToDestination = 224u16, + #[strum( + serialize = "TotalMoles", + props(docs = r#"Returns the total moles of the device"#, value = "66") + )] + TotalMoles = 66u16, + #[strum( + serialize = "TotalMolesInput", + props( + docs = r#"Returns the total moles of the device's Input Network"#, + value = "115" + ) + )] + TotalMolesInput = 115u16, + #[strum( + serialize = "TotalMolesInput2", + props( + docs = r#"Returns the total moles of the device's Input2 Network"#, + value = "125" + ) + )] + TotalMolesInput2 = 125u16, + #[strum( + serialize = "TotalMolesOutput", + props( + docs = r#"Returns the total moles of the device's Output Network"#, + value = "135" + ) + )] + TotalMolesOutput = 135u16, + #[strum( + serialize = "TotalMolesOutput2", + props( + docs = r#"Returns the total moles of the device's Output2 Network"#, + value = "145" + ) + )] + TotalMolesOutput2 = 145u16, + #[strum( + serialize = "TotalQuantity", + props( + docs = r#"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."#, + value = "265" + ) + )] + TotalQuantity = 265u16, + #[strum( + serialize = "TrueAnomaly", + props( + docs = r#"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 = "VelocityMagnitude", + props(docs = r#"The current magnitude of the velocity vector"#, value = "79") + )] + VelocityMagnitude = 79u16, + #[strum( + serialize = "VelocityRelativeX", + props( + docs = r#"The current velocity X relative to the forward vector of this"#, + value = "80" + ) + )] + VelocityRelativeX = 80u16, + #[strum( + serialize = "VelocityRelativeY", + props( + docs = r#"The current velocity Y relative to the forward vector of this"#, + value = "81" + ) + )] + VelocityRelativeY = 81u16, + #[strum( + serialize = "VelocityRelativeZ", + props( + docs = r#"The current velocity Z relative to the forward vector of this"#, + value = "82" + ) + )] + VelocityRelativeZ = 82u16, + #[strum( + serialize = "VelocityX", + props( + docs = r#"The world velocity of the entity in the X axis"#, + value = "231" + ) + )] + VelocityX = 231u16, + #[strum( + serialize = "VelocityY", + props( + docs = r#"The world velocity of the entity in the Y axis"#, + value = "232" + ) + )] + VelocityY = 232u16, + #[strum( + serialize = "VelocityZ", + props( + docs = r#"The world velocity of the entity in the Z axis"#, + value = "233" + ) + )] + VelocityZ = 233u16, + #[strum( + serialize = "Vertical", + props(docs = r#"Vertical setting of the device"#, value = "21") + )] + Vertical = 21u16, + #[strum( + serialize = "VerticalRatio", + props(docs = r#"Radio of vertical setting for device"#, value = "35") + )] + VerticalRatio = 35u16, + #[strum( + serialize = "Volume", + props(docs = r#"Returns the device atmosphere volume"#, value = "67") + )] + Volume = 67u16, + #[strum( + serialize = "VolumeOfLiquid", + props( + docs = r#"The total volume of all liquids in Liters in the atmosphere"#, + value = "182" + ) + )] + VolumeOfLiquid = 182u16, + #[strum( + serialize = "WattsReachingContact", + props( + docs = r#"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 = "Weight", + props( + docs = r#"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."#, + value = "222" + ) + )] + Weight = 222u16, + #[strum( + serialize = "WorkingGasEfficiency", + props( + docs = r#"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"#, + value = "105" + ) + )] + WorkingGasEfficiency = 105u16, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum PowerMode { + #[strum(serialize = "Charged", props(docs = r#""#, value = "4"))] + Charged = 4u8, + #[strum(serialize = "Charging", props(docs = r#""#, value = "3"))] + Charging = 3u8, + #[strum(serialize = "Discharged", props(docs = r#""#, value = "1"))] + Discharged = 1u8, + #[strum(serialize = "Discharging", props(docs = r#""#, value = "2"))] + Discharging = 2u8, + #[strum(serialize = "Idle", props(docs = r#""#, value = "0"))] + Idle = 0u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum ReEntryProfile { + #[strum(serialize = "High", props(docs = r#""#, value = "3"))] + High = 3u8, + #[strum(serialize = "Max", props(docs = r#""#, value = "4"))] + Max = 4u8, + #[strum(serialize = "Medium", props(docs = r#""#, value = "2"))] + Medium = 2u8, + #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + None = 0u8, + #[strum(serialize = "Optimal", props(docs = r#""#, value = "1"))] + Optimal = 1u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum RobotMode { + #[strum(serialize = "Follow", props(docs = r#""#, value = "1"))] + Follow = 1u8, + #[strum(serialize = "MoveToTarget", props(docs = r#""#, value = "2"))] + MoveToTarget = 2u8, + #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + None = 0u8, + #[strum(serialize = "PathToTarget", props(docs = r#""#, value = "5"))] + PathToTarget = 5u8, + #[strum(serialize = "Roam", props(docs = r#""#, value = "3"))] + Roam = 3u8, + #[strum(serialize = "StorageFull", props(docs = r#""#, value = "6"))] + StorageFull = 6u8, + #[strum(serialize = "Unload", props(docs = r#""#, value = "4"))] + Unload = 4u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum Class { + #[strum(serialize = "AccessCard", props(docs = r#""#, value = "22"))] + AccessCard = 22u8, + #[strum(serialize = "Appliance", props(docs = r#""#, value = "18"))] + Appliance = 18u8, + #[strum(serialize = "Back", props(docs = r#""#, value = "3"))] + Back = 3u8, + #[strum(serialize = "Battery", props(docs = r#""#, value = "14"))] + Battery = 14u8, + #[strum(serialize = "Belt", props(docs = r#""#, value = "16"))] + Belt = 16u8, + #[strum(serialize = "Blocked", props(docs = r#""#, value = "38"))] + Blocked = 38u8, + #[strum(serialize = "Bottle", props(docs = r#""#, value = "25"))] + Bottle = 25u8, + #[strum(serialize = "Cartridge", props(docs = r#""#, value = "21"))] + Cartridge = 21u8, + #[strum(serialize = "Circuit", props(docs = r#""#, value = "24"))] + Circuit = 24u8, + #[strum(serialize = "Circuitboard", props(docs = r#""#, value = "7"))] + Circuitboard = 7u8, + #[strum(serialize = "CreditCard", props(docs = r#""#, value = "28"))] + CreditCard = 28u8, + #[strum(serialize = "DataDisk", props(docs = r#""#, value = "8"))] + DataDisk = 8u8, + #[strum(serialize = "DirtCanister", props(docs = r#""#, value = "29"))] + DirtCanister = 29u8, + #[strum(serialize = "DrillHead", props(docs = r#""#, value = "35"))] + DrillHead = 35u8, + #[strum(serialize = "Egg", props(docs = r#""#, value = "15"))] + Egg = 15u8, + #[strum(serialize = "Entity", props(docs = r#""#, value = "13"))] + Entity = 13u8, + #[strum(serialize = "Flare", props(docs = r#""#, value = "37"))] + Flare = 37u8, + #[strum(serialize = "GasCanister", props(docs = r#""#, value = "5"))] + GasCanister = 5u8, + #[strum(serialize = "GasFilter", props(docs = r#""#, value = "4"))] + GasFilter = 4u8, + #[strum(serialize = "Glasses", props(docs = r#""#, value = "27"))] + Glasses = 27u8, + #[strum(serialize = "Helmet", props(docs = r#""#, value = "1"))] + Helmet = 1u8, + #[strum(serialize = "Ingot", props(docs = r#""#, value = "19"))] + Ingot = 19u8, + #[strum(serialize = "LiquidBottle", props(docs = r#""#, value = "32"))] + LiquidBottle = 32u8, + #[strum(serialize = "LiquidCanister", props(docs = r#""#, value = "31"))] + LiquidCanister = 31u8, + #[strum(serialize = "Magazine", props(docs = r#""#, value = "23"))] + Magazine = 23u8, + #[strum(serialize = "Motherboard", props(docs = r#""#, value = "6"))] + Motherboard = 6u8, + #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + None = 0u8, + #[strum(serialize = "Ore", props(docs = r#""#, value = "10"))] + Ore = 10u8, + #[strum(serialize = "Organ", props(docs = r#""#, value = "9"))] + Organ = 9u8, + #[strum(serialize = "Plant", props(docs = r#""#, value = "11"))] + Plant = 11u8, + #[strum(serialize = "ProgrammableChip", props(docs = r#""#, value = "26"))] + ProgrammableChip = 26u8, + #[strum(serialize = "ScanningHead", props(docs = r#""#, value = "36"))] + ScanningHead = 36u8, + #[strum(serialize = "SensorProcessingUnit", props(docs = r#""#, value = "30"))] + SensorProcessingUnit = 30u8, + #[strum(serialize = "SoundCartridge", props(docs = r#""#, value = "34"))] + SoundCartridge = 34u8, + #[strum(serialize = "Suit", props(docs = r#""#, value = "2"))] + Suit = 2u8, + #[strum(serialize = "SuitMod", props(docs = r#""#, value = "39"))] + SuitMod = 39u8, + #[strum(serialize = "Tool", props(docs = r#""#, value = "17"))] + Tool = 17u8, + #[strum(serialize = "Torpedo", props(docs = r#""#, value = "20"))] + Torpedo = 20u8, + #[strum(serialize = "Uniform", props(docs = r#""#, value = "12"))] + Uniform = 12u8, + #[strum(serialize = "Wreckage", props(docs = r#""#, value = "33"))] + Wreckage = 33u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum SorterInstruction { + #[strum(serialize = "FilterPrefabHashEquals", props(docs = r#""#, value = "1"))] + FilterPrefabHashEquals = 1u8, + #[strum( + serialize = "FilterPrefabHashNotEquals", + props(docs = r#""#, value = "2") + )] + FilterPrefabHashNotEquals = 2u8, + #[strum(serialize = "FilterQuantityCompare", props(docs = r#""#, value = "5"))] + FilterQuantityCompare = 5u8, + #[strum(serialize = "FilterSlotTypeCompare", props(docs = r#""#, value = "4"))] + FilterSlotTypeCompare = 4u8, + #[strum( + serialize = "FilterSortingClassCompare", + props(docs = r#""#, value = "3") + )] + FilterSortingClassCompare = 3u8, + #[strum( + serialize = "LimitNextExecutionByCount", + props(docs = r#""#, value = "6") + )] + LimitNextExecutionByCount = 6u8, + #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + None = 0u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum SortingClass { + #[strum(serialize = "Appliances", props(docs = r#""#, value = "6"))] + Appliances = 6u8, + #[strum(serialize = "Atmospherics", props(docs = r#""#, value = "7"))] + Atmospherics = 7u8, + #[strum(serialize = "Clothing", props(docs = r#""#, value = "5"))] + Clothing = 5u8, + #[strum(serialize = "Default", props(docs = r#""#, value = "0"))] + Default = 0u8, + #[strum(serialize = "Food", props(docs = r#""#, value = "4"))] + Food = 4u8, + #[strum(serialize = "Ices", props(docs = r#""#, value = "10"))] + Ices = 10u8, + #[strum(serialize = "Kits", props(docs = r#""#, value = "1"))] + Kits = 1u8, + #[strum(serialize = "Ores", props(docs = r#""#, value = "9"))] + Ores = 9u8, + #[strum(serialize = "Resources", props(docs = r#""#, value = "3"))] + Resources = 3u8, + #[strum(serialize = "Storage", props(docs = r#""#, value = "8"))] + Storage = 8u8, + #[strum(serialize = "Tools", props(docs = r#""#, value = "2"))] + Tools = 2u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum SoundAlert { + #[strum(serialize = "AirlockCycling", props(docs = r#""#, value = "22"))] + AirlockCycling = 22u8, + #[strum(serialize = "Alarm1", props(docs = r#""#, value = "45"))] + Alarm1 = 45u8, + #[strum(serialize = "Alarm10", props(docs = r#""#, value = "12"))] + Alarm10 = 12u8, + #[strum(serialize = "Alarm11", props(docs = r#""#, value = "13"))] + Alarm11 = 13u8, + #[strum(serialize = "Alarm12", props(docs = r#""#, value = "14"))] + Alarm12 = 14u8, + #[strum(serialize = "Alarm2", props(docs = r#""#, value = "1"))] + Alarm2 = 1u8, + #[strum(serialize = "Alarm3", props(docs = r#""#, value = "2"))] + Alarm3 = 2u8, + #[strum(serialize = "Alarm4", props(docs = r#""#, value = "3"))] + Alarm4 = 3u8, + #[strum(serialize = "Alarm5", props(docs = r#""#, value = "4"))] + Alarm5 = 4u8, + #[strum(serialize = "Alarm6", props(docs = r#""#, value = "5"))] + Alarm6 = 5u8, + #[strum(serialize = "Alarm7", props(docs = r#""#, value = "6"))] + Alarm7 = 6u8, + #[strum(serialize = "Alarm8", props(docs = r#""#, value = "10"))] + Alarm8 = 10u8, + #[strum(serialize = "Alarm9", props(docs = r#""#, value = "11"))] + Alarm9 = 11u8, + #[strum(serialize = "Alert", props(docs = r#""#, value = "17"))] + Alert = 17u8, + #[strum(serialize = "Danger", props(docs = r#""#, value = "15"))] + Danger = 15u8, + #[strum(serialize = "Depressurising", props(docs = r#""#, value = "20"))] + Depressurising = 20u8, + #[strum(serialize = "FireFireFire", props(docs = r#""#, value = "28"))] + FireFireFire = 28u8, + #[strum(serialize = "Five", props(docs = r#""#, value = "33"))] + Five = 33u8, + #[strum(serialize = "Floor", props(docs = r#""#, value = "34"))] + Floor = 34u8, + #[strum(serialize = "Four", props(docs = r#""#, value = "32"))] + Four = 32u8, + #[strum(serialize = "HaltWhoGoesThere", props(docs = r#""#, value = "27"))] + HaltWhoGoesThere = 27u8, + #[strum(serialize = "HighCarbonDioxide", props(docs = r#""#, value = "44"))] + HighCarbonDioxide = 44u8, + #[strum(serialize = "IntruderAlert", props(docs = r#""#, value = "19"))] + IntruderAlert = 19u8, + #[strum(serialize = "LiftOff", props(docs = r#""#, value = "36"))] + LiftOff = 36u8, + #[strum(serialize = "MalfunctionDetected", props(docs = r#""#, value = "26"))] + MalfunctionDetected = 26u8, + #[strum(serialize = "Music1", props(docs = r#""#, value = "7"))] + Music1 = 7u8, + #[strum(serialize = "Music2", props(docs = r#""#, value = "8"))] + Music2 = 8u8, + #[strum(serialize = "Music3", props(docs = r#""#, value = "9"))] + Music3 = 9u8, + #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + None = 0u8, + #[strum(serialize = "One", props(docs = r#""#, value = "29"))] + One = 29u8, + #[strum(serialize = "PollutantsDetected", props(docs = r#""#, value = "43"))] + PollutantsDetected = 43u8, + #[strum(serialize = "PowerLow", props(docs = r#""#, value = "23"))] + PowerLow = 23u8, + #[strum(serialize = "PressureHigh", props(docs = r#""#, value = "39"))] + PressureHigh = 39u8, + #[strum(serialize = "PressureLow", props(docs = r#""#, value = "40"))] + PressureLow = 40u8, + #[strum(serialize = "Pressurising", props(docs = r#""#, value = "21"))] + Pressurising = 21u8, + #[strum(serialize = "RocketLaunching", props(docs = r#""#, value = "35"))] + RocketLaunching = 35u8, + #[strum(serialize = "StormIncoming", props(docs = r#""#, value = "18"))] + StormIncoming = 18u8, + #[strum(serialize = "SystemFailure", props(docs = r#""#, value = "24"))] + SystemFailure = 24u8, + #[strum(serialize = "TemperatureHigh", props(docs = r#""#, value = "41"))] + TemperatureHigh = 41u8, + #[strum(serialize = "TemperatureLow", props(docs = r#""#, value = "42"))] + TemperatureLow = 42u8, + #[strum(serialize = "Three", props(docs = r#""#, value = "31"))] + Three = 31u8, + #[strum(serialize = "TraderIncoming", props(docs = r#""#, value = "37"))] + TraderIncoming = 37u8, + #[strum(serialize = "TraderLanded", props(docs = r#""#, value = "38"))] + TraderLanded = 38u8, + #[strum(serialize = "Two", props(docs = r#""#, value = "30"))] + Two = 30u8, + #[strum(serialize = "Warning", props(docs = r#""#, value = "16"))] + Warning = 16u8, + #[strum(serialize = "Welcome", props(docs = r#""#, value = "25"))] + Welcome = 25u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum LogicTransmitterMode { + #[strum(serialize = "Active", props(docs = r#""#, value = "1"))] + Active = 1u8, + #[strum(serialize = "Passive", props(docs = r#""#, value = "0"))] + Passive = 0u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum VentDirection { + #[strum(serialize = "Inward", props(docs = r#""#, value = "1"))] + Inward = 1u8, + #[strum(serialize = "Outward", props(docs = r#""#, value = "0"))] + Outward = 0u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum ConditionOperation { + #[strum(serialize = "Equals", props(docs = r#""#, value = "0"))] + Equals = 0u8, + #[strum(serialize = "Greater", props(docs = r#""#, value = "1"))] + Greater = 1u8, + #[strum(serialize = "Less", props(docs = r#""#, value = "2"))] + Less = 2u8, + #[strum(serialize = "NotEquals", props(docs = r#""#, value = "3"))] + NotEquals = 3u8, +} +pub enum BasicEnum { + AirCon(AirConditioningMode), + AirControl(AirControlMode), + Color(ColorType), + DaylightSensorMode(DaylightSensorMode), + ElevatorMode(ElevatorMode), + EntityState(EntityState), + GasType(GasType), + GasTypeRocketMode(RocketMode), + LogicSlotType(LogicSlotType), + LogicType(LogicType), + PowerMode(PowerMode), + ReEntryProfile(ReEntryProfile), + RobotMode(RobotMode), + 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::GasTypeRocketMode(enm) => *enm as u32, + Self::LogicSlotType(enm) => *enm as u32, + Self::LogicType(enm) => *enm as u32, + Self::PowerMode(enm) => *enm as u32, + Self::ReEntryProfile(enm) => *enm as u32, + Self::RobotMode(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::GasTypeRocketMode(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::ReEntryProfile(enm) => enm.get_str(prop), + Self::RobotMode(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(|enm| Self::AirCon(enm)) + .chain(AirControlMode::iter().map(|enm| Self::AirControl(enm))) + .chain(ColorType::iter().map(|enm| Self::Color(enm))) + .chain(DaylightSensorMode::iter().map(|enm| Self::DaylightSensorMode(enm))) + .chain(ElevatorMode::iter().map(|enm| Self::ElevatorMode(enm))) + .chain(EntityState::iter().map(|enm| Self::EntityState(enm))) + .chain(GasType::iter().map(|enm| Self::GasType(enm))) + .chain(RocketMode::iter().map(|enm| Self::GasTypeRocketMode(enm))) + .chain(LogicSlotType::iter().map(|enm| Self::LogicSlotType(enm))) + .chain(LogicType::iter().map(|enm| Self::LogicType(enm))) + .chain(PowerMode::iter().map(|enm| Self::PowerMode(enm))) + .chain(ReEntryProfile::iter().map(|enm| Self::ReEntryProfile(enm))) + .chain(RobotMode::iter().map(|enm| Self::RobotMode(enm))) + .chain(Class::iter().map(|enm| Self::SlotClass(enm))) + .chain(SorterInstruction::iter().map(|enm| Self::SorterInstruction(enm))) + .chain(SortingClass::iter().map(|enm| Self::SortingClass(enm))) + .chain(SoundAlert::iter().map(|enm| Self::Sound(enm))) + .chain(LogicTransmitterMode::iter().map(|enm| Self::TransmitterMode(enm))) + .chain(VentDirection::iter().map(|enm| Self::Vent(enm))) + .chain(ConditionOperation::iter().map(|enm| Self::Unnamed(enm))) + } +} +impl std::str::FromStr for BasicEnum { + type Err = crate::errors::ParseError; + fn from_str(s: &str) -> Result { + let end = s.len(); + match s { + "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)), + "gastype_rocketmode.chart" => Ok(Self::GasTypeRocketMode(RocketMode::Chart)), + "gastype_rocketmode.discover" => Ok(Self::GasTypeRocketMode(RocketMode::Discover)), + "gastype_rocketmode.invalid" => Ok(Self::GasTypeRocketMode(RocketMode::Invalid)), + "gastype_rocketmode.mine" => Ok(Self::GasTypeRocketMode(RocketMode::Mine)), + "gastype_rocketmode.none" => Ok(Self::GasTypeRocketMode(RocketMode::None)), + "gastype_rocketmode.survey" => Ok(Self::GasTypeRocketMode(RocketMode::Survey)), + "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.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.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.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)), + "reentryprofile.high" => Ok(Self::ReEntryProfile(ReEntryProfile::High)), + "reentryprofile.max" => Ok(Self::ReEntryProfile(ReEntryProfile::Max)), + "reentryprofile.medium" => Ok(Self::ReEntryProfile(ReEntryProfile::Medium)), + "reentryprofile.none" => Ok(Self::ReEntryProfile(ReEntryProfile::None)), + "reentryprofile.optimal" => Ok(Self::ReEntryProfile(ReEntryProfile::Optimal)), + "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)), + "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.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.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(crate::errors::ParseError { + line: 0, + start: 0, + end, + msg: format!("Unknown enum '{}'", s), + }), + } + } +} +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::GasTypeRocketMode(enm) => write!(f, "GasType_RocketMode.{}", enm), + Self::LogicSlotType(enm) => write!(f, "LogicSlotType.{}", enm), + Self::LogicType(enm) => write!(f, "LogicType.{}", enm), + Self::PowerMode(enm) => write!(f, "PowerMode.{}", enm), + Self::ReEntryProfile(enm) => write!(f, "ReEntryProfile.{}", enm), + Self::RobotMode(enm) => write!(f, "RobotMode.{}", 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, "{}", enm), + } + } +} diff --git a/ic10emu/src/vm/enums/mod.rs b/ic10emu/src/vm/enums/mod.rs new file mode 100644 index 0000000..e408f98 --- /dev/null +++ b/ic10emu/src/vm/enums/mod.rs @@ -0,0 +1,3 @@ +pub mod basic_enums; +pub mod prefabs; +pub mod script_enums; diff --git a/ic10emu/src/vm/enums/prefabs.rs b/ic10emu/src/vm/enums/prefabs.rs new file mode 100644 index 0000000..8fef185 --- /dev/null +++ b/ic10emu/src/vm/enums/prefabs.rs @@ -0,0 +1,10103 @@ +// ================================================= +// !! <-----> DO NOT MODIFY <-----> !! +// +// This module was automatically generated by an +// xtask +// +// run `cargo xtask generate` from the workspace +// to regenerate +// +// ================================================= + +use serde::{Deserialize, Serialize}; +use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(i32)] +pub enum StationpediaPrefab { + #[strum( + serialize = "DynamicGPR", + props( + name = r#""#, + desc = r#""#, + value = "-2085885850" + ) + )] + DynamicGpr = -2085885850i32, + #[strum( + serialize = "ItemAuthoringToolRocketNetwork", + props( + name = r#""#, + desc = r#""#, + value = "-1731627004" + ) + )] + ItemAuthoringToolRocketNetwork = -1731627004i32, + #[strum( + serialize = "MonsterEgg", + props( + name = r#""#, + desc = r#""#, + value = "-1667675295" + ) + )] + MonsterEgg = -1667675295i32, + #[strum( + serialize = "MotherboardMissionControl", + props( + name = r#""#, + desc = r#""#, + value = "-127121474" + ) + )] + MotherboardMissionControl = -127121474i32, + #[strum( + serialize = "StructureCableCorner3HBurnt", + props( + name = r#""#, + desc = r#""#, + value = "2393826" + ) + )] + StructureCableCorner3HBurnt = 2393826i32, + #[strum( + serialize = "StructureDrinkingFountain", + props( + name = r#""#, + desc = r#""#, + value = "1968371847" + ) + )] + StructureDrinkingFountain = 1968371847i32, + #[strum( + serialize = "Robot", + props( + name = r#"AIMeE Bot"#, + desc = r#"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. + +Intended to unearth and retrieve ores automatically, the unit requires basic programming knowledge to operate, and IC Editor Motherboard. + +AIMEe has 7 modes: + +RobotMode.None = 0 = Do nothing +RobotMode.None = 1 = Follow nearest player +RobotMode.None = 2 = Move to target in straight line +RobotMode.None = 3 = Wander around looking for ores in 15 co-ords radius +RobotMode.None = 4 = Unload in chute input or chute bin within 3 meters / 1.5 large grids +RobotMode.None = 5 = Path(find) to target +RobotMode.None = 6 = Automatic assigned state, shows when storage slots are fullConnects to Logic Transmitter"#, + value = "434786784" + ) + )] + Robot = 434786784i32, + #[strum( + serialize = "StructureAccessBridge", + props( + name = r#"Access Bridge"#, + desc = r#"Extendable bridge that spans three grids"#, + value = "1298920475" + ) + )] + StructureAccessBridge = 1298920475i32, + #[strum( + serialize = "AccessCardBlack", + props(name = r#"Access Card (Black)"#, desc = r#""#, value = "-1330388999") + )] + AccessCardBlack = -1330388999i32, + #[strum( + serialize = "AccessCardBlue", + props(name = r#"Access Card (Blue)"#, desc = r#""#, value = "-1411327657") + )] + AccessCardBlue = -1411327657i32, + #[strum( + serialize = "AccessCardBrown", + props(name = r#"Access Card (Brown)"#, desc = r#""#, value = "1412428165") + )] + AccessCardBrown = 1412428165i32, + #[strum( + serialize = "AccessCardGray", + props(name = r#"Access Card (Gray)"#, desc = r#""#, value = "-1339479035") + )] + AccessCardGray = -1339479035i32, + #[strum( + serialize = "AccessCardGreen", + props(name = r#"Access Card (Green)"#, desc = r#""#, value = "-374567952") + )] + AccessCardGreen = -374567952i32, + #[strum( + serialize = "AccessCardKhaki", + props(name = r#"Access Card (Khaki)"#, desc = r#""#, value = "337035771") + )] + AccessCardKhaki = 337035771i32, + #[strum( + serialize = "AccessCardOrange", + props(name = r#"Access Card (Orange)"#, desc = r#""#, value = "-332896929") + )] + AccessCardOrange = -332896929i32, + #[strum( + serialize = "AccessCardPink", + props(name = r#"Access Card (Pink)"#, desc = r#""#, value = "431317557") + )] + AccessCardPink = 431317557i32, + #[strum( + serialize = "AccessCardPurple", + props(name = r#"Access Card (Purple)"#, desc = r#""#, value = "459843265") + )] + AccessCardPurple = 459843265i32, + #[strum( + serialize = "AccessCardRed", + props(name = r#"Access Card (Red)"#, desc = r#""#, value = "-1713748313") + )] + AccessCardRed = -1713748313i32, + #[strum( + serialize = "AccessCardWhite", + props(name = r#"Access Card (White)"#, desc = r#""#, value = "2079959157") + )] + AccessCardWhite = 2079959157i32, + #[strum( + serialize = "AccessCardYellow", + props(name = r#"Access Card (Yellow)"#, desc = r#""#, value = "568932536") + )] + AccessCardYellow = 568932536i32, + #[strum( + serialize = "StructureLiquidDrain", + props( + name = r#"Active Liquid Outlet"#, + desc = r#"When connected to power and activated, it pumps liquid from a liquid network into the world."#, + value = "1687692899" + ) + )] + StructureLiquidDrain = 1687692899i32, + #[strum( + serialize = "StructureActiveVent", + props( + name = r#"Active Vent"#, + desc = r#"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 = "ItemAdhesiveInsulation", + props(name = r#"Adhesive Insulation"#, desc = r#""#, value = "1871048978") + )] + ItemAdhesiveInsulation = 1871048978i32, + #[strum( + serialize = "CircuitboardAdvAirlockControl", + props(name = r#"Advanced Airlock"#, desc = r#""#, value = "1633663176") + )] + CircuitboardAdvAirlockControl = 1633663176i32, + #[strum( + serialize = "StructureAdvancedComposter", + props( + name = r#"Advanced Composter"#, + desc = r#"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. +When processing, it releases nitrogen and volatiles, as well a small amount of heat. + +Compost composition +Fertilizer 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. + +- Food increases PLANT YIELD up to two times +- Decayed Food increases plant GROWTH SPEED up to two times +- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for up to five times +"#, + value = "446212963" + ) + )] + StructureAdvancedComposter = 446212963i32, + #[strum( + serialize = "StructureAdvancedFurnace", + props( + name = r#"Advanced Furnace"#, + desc = r#"The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure."#, + value = "545937711" + ) + )] + StructureAdvancedFurnace = 545937711i32, + #[strum( + serialize = "StructureAdvancedPackagingMachine", + props( + name = r#"Advanced Packaging Machine"#, + desc = r#"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 = "ItemAdvancedTablet", + props( + name = r#"Advanced Tablet"#, + desc = r#"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. + + 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 = "StructureAirConditioner", + props( + name = r#"Air Conditioner"#, + desc = r#"Built using the Kit (Atmospherics), the ExMin-designed air conditioner is used to raise or lower input gas temperature. + +The 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. + +Multiple 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. + +Pipe Convection Radiators may be useful in bringing extreme pipe temperatures back towards normal world temperatures. + +For more information on using the air conditioner, consult the temperature control Guides page."#, + value = "-2087593337" + ) + )] + StructureAirConditioner = -2087593337i32, + #[strum( + serialize = "CircuitboardAirControl", + props( + name = r#"Air Control"#, + desc = r#"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 = "CircuitboardAirlockControl", + props( + name = r#"Airlock"#, + desc = r#"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. + +To 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 = "StructureAirlock", + props( + name = r#"Airlock"#, + desc = r#"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 = "ImGuiCircuitboardAirlockControl", + props(name = r#"Airlock (Experimental)"#, desc = r#""#, value = "-73796547") + )] + ImGuiCircuitboardAirlockControl = -73796547i32, + #[strum( + serialize = "ItemAlienMushroom", + props(name = r#"Alien Mushroom"#, desc = r#""#, value = "176446172") + )] + ItemAlienMushroom = 176446172i32, + #[strum( + serialize = "ItemAmmoBox", + props(name = r#"Ammo Box"#, desc = r#""#, value = "-9559091") + )] + ItemAmmoBox = -9559091i32, + #[strum( + serialize = "ItemAngleGrinder", + props( + name = r#"Angle Grinder"#, + desc = r#"Angles-be-gone with the trusty angle grinder."#, + value = "201215010" + ) + )] + ItemAngleGrinder = 201215010i32, + #[strum( + serialize = "ApplianceDeskLampLeft", + props( + name = r#"Appliance Desk Lamp Left"#, + desc = r#""#, + value = "-1683849799" + ) + )] + ApplianceDeskLampLeft = -1683849799i32, + #[strum( + serialize = "ApplianceDeskLampRight", + props( + name = r#"Appliance Desk Lamp Right"#, + desc = r#""#, + value = "1174360780" + ) + )] + ApplianceDeskLampRight = 1174360780i32, + #[strum( + serialize = "ApplianceSeedTray", + props( + name = r#"Appliance Seed Tray"#, + desc = r#"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 = "StructureArcFurnace", + props( + name = r#"Arc Furnace"#, + desc = r#"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. +Co-opted by the ODA, it now provides Stationeers with a way to produce pure ingots of various resources. +The 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. +Unlike the more advanced Furnace, the arc furnace cannot create alloys."#, + value = "-247344692" + ) + )] + StructureArcFurnace = -247344692i32, + #[strum( + serialize = "ItemArcWelder", + props(name = r#"Arc Welder"#, desc = r#""#, value = "1385062886") + )] + ItemArcWelder = 1385062886i32, + #[strum( + serialize = "StructureAreaPowerControlReversed", + props( + name = r#"Area Power Control"#, + desc = r#"An Area Power Control (APC) has three main functions. +Its primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. +APCs also create sub-networks, as no devices on the far side of an APC are visible on the main network. +Lastly, 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 = "StructureAreaPowerControl", + props( + name = r#"Area Power Control"#, + desc = r#"An Area Power Control (APC) has three main functions: +Its primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. +APCs also create sub-networks, as no devices on the far side of an APC are visible on the main network. +Lastly, 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 = "ItemAstroloySheets", + props(name = r#"Astroloy Sheets"#, desc = r#""#, value = "-1662476145") + )] + ItemAstroloySheets = -1662476145i32, + #[strum( + serialize = "CartridgeAtmosAnalyser", + props( + name = r#"Atmos Analyzer"#, + desc = r#"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 = "ItemAuthoringTool", + props(name = r#"Authoring Tool"#, desc = r#""#, value = "789015045") + )] + ItemAuthoringTool = 789015045i32, + #[strum( + serialize = "StructureAutolathe", + props( + name = r#"Autolathe"#, + desc = r#"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. + "#, + value = "336213101" + ) + )] + StructureAutolathe = 336213101i32, + #[strum( + serialize = "AutolathePrinterMod", + props( + name = r#"Autolathe Printer Mod"#, + desc = r#"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 = "StructureAutomatedOven", + props(name = r#"Automated Oven"#, desc = r#""#, value = "-1672404896") + )] + StructureAutomatedOven = -1672404896i32, + #[strum( + serialize = "StructureAutoMinerSmall", + props( + name = r#"Autominer (Small)"#, + desc = r#"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 = "StructureBatterySmall", + props( + name = r#"Auxiliary Rocket Battery "#, + desc = r#"0.Empty +1.Critical +2.VeryLow +3.Low +4.Medium +5.High +6.Full"#, + value = "-2123455080" + ) + )] + StructureBatterySmall = -2123455080i32, + #[strum( + serialize = "StructureBackPressureRegulator", + props( + name = r#"Back Pressure Regulator"#, + desc = r#"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 = "ItemPotatoBaked", + props(name = r#"Baked Potato"#, desc = r#""#, value = "-2111886401") + )] + ItemPotatoBaked = -2111886401i32, + #[strum( + serialize = "AppliancePackagingMachine", + props( + name = r#"Basic Packaging Machine"#, + desc = r#"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. + +OPERATION + +1. Add the correct ingredients to the device via the hopper in the TOP. + +2. Close the device using the dropdown handle. + +3. Activate the device. + +4. Remove canned goods from the outlet in the FRONT. + +Note: the Cannifier will flash an error on its activation switch if you attempt to activate it before closing it. + + + "#, + value = "-749191906" + ) + )] + AppliancePackagingMachine = -749191906i32, + #[strum( + serialize = "ItemBasketBall", + props(name = r#"Basket Ball"#, desc = r#""#, value = "-1262580790") + )] + ItemBasketBall = -1262580790i32, + #[strum( + serialize = "StructureBasketHoop", + props(name = r#"Basket Hoop"#, desc = r#""#, value = "-1613497288") + )] + StructureBasketHoop = -1613497288i32, + #[strum( + serialize = "StructureLogicBatchReader", + props(name = r#"Batch Reader"#, desc = r#""#, value = "264413729") + )] + StructureLogicBatchReader = 264413729i32, + #[strum( + serialize = "StructureLogicBatchSlotReader", + props(name = r#"Batch Slot Reader"#, desc = r#""#, value = "436888930") + )] + StructureLogicBatchSlotReader = 436888930i32, + #[strum( + serialize = "StructureLogicBatchWriter", + props(name = r#"Batch Writer"#, desc = r#""#, value = "1415443359") + )] + StructureLogicBatchWriter = 1415443359i32, + #[strum( + serialize = "StructureBatteryMedium", + props( + name = r#"Battery (Medium)"#, + desc = r#"0.Empty +1.Critical +2.VeryLow +3.Low +4.Medium +5.High +6.Full"#, + value = "-1125305264" + ) + )] + StructureBatteryMedium = -1125305264i32, + #[strum( + serialize = "ItemBatteryCellLarge", + props( + name = r#"Battery Cell (Large)"#, + desc = r#"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. + +POWER OUTPUT +The large power cell can discharge 288kW of power. +"#, + value = "-459827268" + ) + )] + ItemBatteryCellLarge = -459827268i32, + #[strum( + serialize = "ItemBatteryCellNuclear", + props( + name = r#"Battery Cell (Nuclear)"#, + desc = r#"Illegal on Earth since the Chengdu Event, Norsec nuclear power cells found a new and drastically less safety-conscious market offworld. + +POWER OUTPUT +Pushing 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 = "ItemBatteryCell", + props( + name = r#"Battery Cell (Small)"#, + desc = r#"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. + +POWER OUTPUT +The small cell stores up to 36000 watts of power."#, + value = "700133157" + ) + )] + ItemBatteryCell = 700133157i32, + #[strum( + serialize = "StructureBatteryCharger", + props( + name = r#"Battery Cell Charger"#, + desc = r#"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 = "StructureBatteryChargerSmall", + props(name = r#"Battery Charger Small"#, desc = r#""#, value = "-761772413") + )] + StructureBatteryChargerSmall = -761772413i32, + #[strum( + serialize = "ItemBatteryChargerSmall", + props(name = r#"Battery Charger Small"#, desc = r#""#, value = "1008295833") + )] + ItemBatteryChargerSmall = 1008295833i32, + #[strum( + serialize = "Battery_Wireless_cell", + props( + name = r#"Battery Wireless Cell"#, + desc = r#"0.Empty +1.Critical +2.VeryLow +3.Low +4.Medium +5.High +6.Full"#, + value = "-462415758" + ) + )] + BatteryWirelessCell = -462415758i32, + #[strum( + serialize = "Battery_Wireless_cell_Big", + props( + name = r#"Battery Wireless Cell (Big)"#, + desc = r#"0.Empty +1.Critical +2.VeryLow +3.Low +4.Medium +5.High +6.Full"#, + value = "-41519077" + ) + )] + BatteryWirelessCellBig = -41519077i32, + #[strum( + serialize = "StructureBeacon", + props(name = r#"Beacon"#, desc = r#""#, value = "-188177083") + )] + StructureBeacon = -188177083i32, + #[strum( + serialize = "StructureAngledBench", + props(name = r#"Bench (Angled)"#, desc = r#""#, value = "1811979158") + )] + StructureAngledBench = 1811979158i32, + #[strum( + serialize = "StructureBench1", + props(name = r#"Bench (Counter Style)"#, desc = r#""#, value = "406745009") + )] + StructureBench1 = 406745009i32, + #[strum( + serialize = "StructureFlatBench", + props(name = r#"Bench (Flat)"#, desc = r#""#, value = "839890807") + )] + StructureFlatBench = 839890807i32, + #[strum( + serialize = "StructureBench3", + props(name = r#"Bench (Frame Style)"#, desc = r#""#, value = "-164622691") + )] + StructureBench3 = -164622691i32, + #[strum( + serialize = "StructureBench2", + props( + name = r#"Bench (High Tech Style)"#, + desc = r#""#, + value = "-2127086069" + ) + )] + StructureBench2 = -2127086069i32, + #[strum( + serialize = "StructureBench4", + props( + name = r#"Bench (Workbench Style)"#, + desc = r#""#, + value = "1750375230" + ) + )] + StructureBench4 = 1750375230i32, + #[strum( + serialize = "ItemBiomass", + props( + name = r#"Biomass"#, + desc = r#"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 = "StructureBlastDoor", + props( + name = r#"Blast Door"#, + desc = r#"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. +Short 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 = "StructureBlockBed", + props( + name = r#"Block Bed"#, + desc = r#"Description coming."#, + value = "697908419" + ) + )] + StructureBlockBed = 697908419i32, + #[strum( + serialize = "StructureBlocker", + props(name = r#"Blocker"#, desc = r#""#, value = "378084505") + )] + StructureBlocker = 378084505i32, + #[strum( + serialize = "ItemBreadLoaf", + props(name = r#"Bread Loaf"#, desc = r#""#, value = "893514943") + )] + ItemBreadLoaf = 893514943i32, + #[strum( + serialize = "StructureCableCorner3Burnt", + props( + name = r#"Burnt Cable (3-Way Corner)"#, + desc = r#""#, + value = "318437449" + ) + )] + StructureCableCorner3Burnt = 318437449i32, + #[strum( + serialize = "StructureCableCorner4Burnt", + props( + name = r#"Burnt Cable (4-Way Corner)"#, + desc = r#""#, + value = "268421361" + ) + )] + StructureCableCorner4Burnt = 268421361i32, + #[strum( + serialize = "StructureCableJunction4Burnt", + props( + name = r#"Burnt Cable (4-Way Junction)"#, + desc = r#""#, + value = "-1756896811" + ) + )] + StructureCableJunction4Burnt = -1756896811i32, + #[strum( + serialize = "StructureCableJunction4HBurnt", + props( + name = r#"Burnt Cable (4-Way Junction)"#, + desc = r#""#, + value = "-115809132" + ) + )] + StructureCableJunction4HBurnt = -115809132i32, + #[strum( + serialize = "StructureCableJunction5Burnt", + props( + name = r#"Burnt Cable (5-Way Junction)"#, + desc = r#""#, + value = "1545286256" + ) + )] + StructureCableJunction5Burnt = 1545286256i32, + #[strum( + serialize = "StructureCableJunction6Burnt", + props( + name = r#"Burnt Cable (6-Way Junction)"#, + desc = r#""#, + value = "-628145954" + ) + )] + StructureCableJunction6Burnt = -628145954i32, + #[strum( + serialize = "StructureCableJunction6HBurnt", + props( + name = r#"Burnt Cable (6-Way Junction)"#, + desc = r#""#, + value = "1854404029" + ) + )] + StructureCableJunction6HBurnt = 1854404029i32, + #[strum( + serialize = "StructureCableCornerHBurnt", + props(name = r#"Burnt Cable (Corner)"#, desc = r#""#, value = "1931412811") + )] + StructureCableCornerHBurnt = 1931412811i32, + #[strum( + serialize = "StructureCableCornerBurnt", + props(name = r#"Burnt Cable (Corner)"#, desc = r#""#, value = "-177220914") + )] + StructureCableCornerBurnt = -177220914i32, + #[strum( + serialize = "StructureCableJunctionHBurnt", + props(name = r#"Burnt Cable (Junction)"#, desc = r#""#, value = "-341365649") + )] + StructureCableJunctionHBurnt = -341365649i32, + #[strum( + serialize = "StructureCableJunctionBurnt", + props( + name = r#"Burnt Cable (Junction)"#, + desc = r#""#, + value = "-1620686196" + ) + )] + StructureCableJunctionBurnt = -1620686196i32, + #[strum( + serialize = "StructureCableStraightHBurnt", + props(name = r#"Burnt Cable (Straight)"#, desc = r#""#, value = "2085762089") + )] + StructureCableStraightHBurnt = 2085762089i32, + #[strum( + serialize = "StructureCableStraightBurnt", + props( + name = r#"Burnt Cable (Straight)"#, + desc = r#""#, + value = "-1196981113" + ) + )] + StructureCableStraightBurnt = -1196981113i32, + #[strum( + serialize = "StructureCableCorner4HBurnt", + props( + name = r#"Burnt Heavy Cable (4-Way Corner)"#, + desc = r#""#, + value = "-981223316" + ) + )] + StructureCableCorner4HBurnt = -981223316i32, + #[strum( + serialize = "StructureCableJunctionH5Burnt", + props( + name = r#"Burnt Heavy Cable (5-Way Junction)"#, + desc = r#""#, + value = "1701593300" + ) + )] + StructureCableJunctionH5Burnt = 1701593300i32, + #[strum( + serialize = "StructureLogicButton", + props(name = r#"Button"#, desc = r#""#, value = "491845673") + )] + StructureLogicButton = 491845673i32, + #[strum( + serialize = "StructureCableCorner3", + props( + name = r#"Cable (3-Way Corner)"#, + desc = r#"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. +Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, + value = "980469101" + ) + )] + StructureCableCorner3 = 980469101i32, + #[strum( + serialize = "StructureCableCorner4", + props(name = r#"Cable (4-Way Corner)"#, desc = r#""#, value = "-1542172466") + )] + StructureCableCorner4 = -1542172466i32, + #[strum( + serialize = "StructureCableJunction4", + props( + name = r#"Cable (4-Way Junction)"#, + desc = r#"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. +Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, + value = "1112047202" + ) + )] + StructureCableJunction4 = 1112047202i32, + #[strum( + serialize = "StructureCableJunction5", + props(name = r#"Cable (5-Way Junction)"#, desc = r#""#, value = "894390004") + )] + StructureCableJunction5 = 894390004i32, + #[strum( + serialize = "StructureCableJunction6", + props( + name = r#"Cable (6-Way Junction)"#, + desc = r#"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. +Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, + value = "-1404690610" + ) + )] + StructureCableJunction6 = -1404690610i32, + #[strum( + serialize = "StructureCableCorner", + props( + name = r#"Cable (Corner)"#, + desc = r#"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. +Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, + value = "-889269388" + ) + )] + StructureCableCorner = -889269388i32, + #[strum( + serialize = "StructureCableJunction", + props( + name = r#"Cable (Junction)"#, + desc = r#"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. +Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, + value = "-175342021" + ) + )] + StructureCableJunction = -175342021i32, + #[strum( + serialize = "StructureCableStraight", + props( + name = r#"Cable (Straight)"#, + desc = r#"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'. +Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, + value = "605357050" + ) + )] + StructureCableStraight = 605357050i32, + #[strum( + serialize = "StructureCableAnalysizer", + props(name = r#"Cable Analyzer"#, desc = r#""#, value = "1036015121") + )] + StructureCableAnalysizer = 1036015121i32, + #[strum( + serialize = "ItemCableCoil", + props( + name = r#"Cable Coil"#, + desc = r#"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. +Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, + value = "-466050668" + ) + )] + ItemCableCoil = -466050668i32, + #[strum( + serialize = "ItemCableCoilHeavy", + props( + name = r#"Cable Coil (Heavy)"#, + desc = r#"Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW."#, + value = "2060134443" + ) + )] + ItemCableCoilHeavy = 2060134443i32, + #[strum( + serialize = "StructureCamera", + props( + name = r#"Camera"#, + desc = r#"Nothing says 'I care' like a security camera that's been linked a Motion Sensor and a Console fitted with a Camera Display. +Be there, even when you're not."#, + value = "-342072665" + ) + )] + StructureCamera = -342072665i32, + #[strum( + serialize = "CircuitboardCameraDisplay", + props( + name = r#"Camera Display"#, + desc = r#"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 = "ItemGasCanisterEmpty", + props(name = r#"Canister"#, desc = r#""#, value = "42280099") + )] + ItemGasCanisterEmpty = 42280099i32, + #[strum( + serialize = "ItemGasCanisterCarbonDioxide", + props(name = r#"Canister (CO2)"#, desc = r#""#, value = "-767685874") + )] + ItemGasCanisterCarbonDioxide = -767685874i32, + #[strum( + serialize = "ItemGasCanisterFuel", + props(name = r#"Canister (Fuel)"#, desc = r#""#, value = "-1014695176") + )] + ItemGasCanisterFuel = -1014695176i32, + #[strum( + serialize = "ItemGasCanisterNitrogen", + props(name = r#"Canister (Nitrogen)"#, desc = r#""#, value = "2145068424") + )] + ItemGasCanisterNitrogen = 2145068424i32, + #[strum( + serialize = "ItemGasCanisterOxygen", + props(name = r#"Canister (Oxygen)"#, desc = r#""#, value = "-1152261938") + )] + ItemGasCanisterOxygen = -1152261938i32, + #[strum( + serialize = "ItemGasCanisterPollutants", + props(name = r#"Canister (Pollutants)"#, desc = r#""#, value = "-1552586384") + )] + ItemGasCanisterPollutants = -1552586384i32, + #[strum( + serialize = "ItemGasCanisterVolatiles", + props(name = r#"Canister (Volatiles)"#, desc = r#""#, value = "-472094806") + )] + ItemGasCanisterVolatiles = -472094806i32, + #[strum( + serialize = "ItemCannedCondensedMilk", + props( + name = r#"Canned Condensed Milk"#, + desc = r#"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 = "ItemCannedEdamame", + props( + name = r#"Canned Edamame"#, + desc = r#"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 = "ItemFrenchFries", + props( + name = r#"Canned French Fries"#, + desc = r#"Because space would suck without 'em."#, + value = "-57608687" + ) + )] + ItemFrenchFries = -57608687i32, + #[strum( + serialize = "ItemCannedMushroom", + props( + name = r#"Canned Mushroom"#, + desc = r#"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 = "ItemCannedPowderedEggs", + props( + name = r#"Canned Powdered Eggs"#, + desc = r#"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 = "ItemCannedRicePudding", + props( + name = r#"Canned Rice Pudding"#, + desc = r#"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 = "CardboardBox", + props(name = r#"Cardboard Box"#, desc = r#""#, value = "-1976947556") + )] + CardboardBox = -1976947556i32, + #[strum( + serialize = "StructureCargoStorageMedium", + props(name = r#"Cargo Storage (Medium)"#, desc = r#""#, value = "1151864003") + )] + StructureCargoStorageMedium = 1151864003i32, + #[strum( + serialize = "StructureCargoStorageSmall", + props(name = r#"Cargo Storage (Small)"#, desc = r#""#, value = "-1493672123") + )] + StructureCargoStorageSmall = -1493672123i32, + #[strum( + serialize = "CartridgeAccessController", + props( + name = r#"Cartridge (Access Controller)"#, + desc = r#""#, + value = "-1634532552" + ) + )] + CartridgeAccessController = -1634532552i32, + #[strum( + serialize = "CartridgePlantAnalyser", + props( + name = r#"Cartridge Plant Analyser"#, + desc = r#""#, + value = "1101328282" + ) + )] + CartridgePlantAnalyser = 1101328282i32, + #[strum( + serialize = "ItemGasFilterCarbonDioxideInfinite", + props( + name = r#"Catalytic Filter (Carbon Dioxide)"#, + desc = r#"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 = "ItemGasFilterNitrogenInfinite", + props( + name = r#"Catalytic Filter (Nitrogen)"#, + desc = r#"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 = "ItemGasFilterNitrousOxideInfinite", + props( + name = r#"Catalytic Filter (Nitrous Oxide)"#, + desc = r#"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 = "ItemGasFilterOxygenInfinite", + props( + name = r#"Catalytic Filter (Oxygen)"#, + desc = r#"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 = "ItemGasFilterPollutantsInfinite", + props( + name = r#"Catalytic Filter (Pollutants)"#, + desc = r#"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 = "ItemGasFilterVolatilesInfinite", + props( + name = r#"Catalytic Filter (Volatiles)"#, + desc = r#"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 = "ItemGasFilterWaterInfinite", + props( + name = r#"Catalytic Filter (Water)"#, + desc = r#"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 = "StructureCentrifuge", + props( + name = r#"Centrifuge"#, + desc = r#"If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore. + It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. + Its bigger brother Combustion Centrifuge can be used to process items significantly faster. Items processed by the centrifuge will be de-gassed. + 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 = "ItemCerealBar", + props( + name = r#"Cereal Bar"#, + desc = r#"Sustains, without decay. If only all our relationships were so well balanced."#, + value = "791746840" + ) + )] + ItemCerealBar = 791746840i32, + #[strum( + serialize = "StructureChair", + props( + name = r#"Chair"#, + desc = r#"One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs."#, + value = "1167659360" + ) + )] + StructureChair = 1167659360i32, + #[strum( + serialize = "StructureChairBacklessDouble", + props( + name = r#"Chair (Backless Double)"#, + desc = r#""#, + value = "1944858936" + ) + )] + StructureChairBacklessDouble = 1944858936i32, + #[strum( + serialize = "StructureChairBacklessSingle", + props( + name = r#"Chair (Backless Single)"#, + desc = r#""#, + value = "1672275150" + ) + )] + StructureChairBacklessSingle = 1672275150i32, + #[strum( + serialize = "StructureChairBoothCornerLeft", + props( + name = r#"Chair (Booth Corner Left)"#, + desc = r#""#, + value = "-367720198" + ) + )] + StructureChairBoothCornerLeft = -367720198i32, + #[strum( + serialize = "StructureChairBoothMiddle", + props(name = r#"Chair (Booth Middle)"#, desc = r#""#, value = "1640720378") + )] + StructureChairBoothMiddle = 1640720378i32, + #[strum( + serialize = "StructureChairRectangleDouble", + props( + name = r#"Chair (Rectangle Double)"#, + desc = r#""#, + value = "-1152812099" + ) + )] + StructureChairRectangleDouble = -1152812099i32, + #[strum( + serialize = "StructureChairRectangleSingle", + props( + name = r#"Chair (Rectangle Single)"#, + desc = r#""#, + value = "-1425428917" + ) + )] + StructureChairRectangleSingle = -1425428917i32, + #[strum( + serialize = "StructureChairThickDouble", + props(name = r#"Chair (Thick Double)"#, desc = r#""#, value = "-1245724402") + )] + StructureChairThickDouble = -1245724402i32, + #[strum( + serialize = "StructureChairThickSingle", + props(name = r#"Chair (Thick Single)"#, desc = r#""#, value = "-1510009608") + )] + StructureChairThickSingle = -1510009608i32, + #[strum( + serialize = "ItemCharcoal", + props( + name = r#"Charcoal"#, + desc = r#"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 = "ItemChemLightBlue", + props( + name = r#"Chem Light (Blue)"#, + desc = r#"A safe and slightly rave-some source of blue light. Snap to activate."#, + value = "-772542081" + ) + )] + ItemChemLightBlue = -772542081i32, + #[strum( + serialize = "ItemChemLightGreen", + props( + name = r#"Chem Light (Green)"#, + desc = r#"Enliven the dreariest, airless rock with this glowy green light. Snap to activate."#, + value = "-597479390" + ) + )] + ItemChemLightGreen = -597479390i32, + #[strum( + serialize = "ItemChemLightRed", + props( + name = r#"Chem Light (Red)"#, + desc = r#"A red glowstick. Snap to activate. Then reach for the lasers."#, + value = "-525810132" + ) + )] + ItemChemLightRed = -525810132i32, + #[strum( + serialize = "ItemChemLightWhite", + props( + name = r#"Chem Light (White)"#, + desc = r#"Snap the glowstick to activate a pale radiance that keeps the darkness at bay."#, + value = "1312166823" + ) + )] + ItemChemLightWhite = 1312166823i32, + #[strum( + serialize = "ItemChemLightYellow", + props( + name = r#"Chem Light (Yellow)"#, + desc = r#"Dispel the darkness with this yellow glowstick."#, + value = "1224819963" + ) + )] + ItemChemLightYellow = 1224819963i32, + #[strum( + serialize = "ApplianceChemistryStation", + props(name = r#"Chemistry Station"#, desc = r#""#, value = "1365789392") + )] + ApplianceChemistryStation = 1365789392i32, + #[strum( + serialize = "NpcChick", + props(name = r#"Chick"#, desc = r#""#, value = "155856647") + )] + NpcChick = 155856647i32, + #[strum( + serialize = "NpcChicken", + props(name = r#"Chicken"#, desc = r#""#, value = "399074198") + )] + NpcChicken = 399074198i32, + #[strum( + serialize = "StructureChuteCorner", + props( + name = r#"Chute (Corner)"#, + desc = r#"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. +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. +Chute 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 = "StructureChuteJunction", + props( + name = r#"Chute (Junction)"#, + desc = r#"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. +Chute 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 = "StructureChuteStraight", + props( + name = r#"Chute (Straight)"#, + desc = r#"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. +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. +Chutes 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 = "StructureChuteWindow", + props( + name = r#"Chute (Window)"#, + desc = r#"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 = "StructureChuteBin", + props( + name = r#"Chute Bin"#, + desc = r#"The Stationeer's goal is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps. +Like 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 = "StructureChuteDigitalFlipFlopSplitterLeft", + props( + name = r#"Chute Digital Flip Flop Splitter Left"#, + desc = r#"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 = "StructureChuteDigitalFlipFlopSplitterRight", + props( + name = r#"Chute Digital Flip Flop Splitter Right"#, + desc = r#"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 = "StructureChuteDigitalValveLeft", + props( + name = r#"Chute Digital Valve Left"#, + desc = r#"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 = "StructureChuteDigitalValveRight", + props( + name = r#"Chute Digital Valve Right"#, + desc = r#"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 = "StructureChuteFlipFlopSplitter", + props( + name = r#"Chute Flip Flop Splitter"#, + desc = r#"A chute that toggles between two outputs"#, + value = "-1446854725" + ) + )] + StructureChuteFlipFlopSplitter = -1446854725i32, + #[strum( + serialize = "StructureChuteInlet", + props( + name = r#"Chute Inlet"#, + desc = r#"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. +The 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 = "StructureChuteOutlet", + props( + name = r#"Chute Outlet"#, + desc = r#"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. +The 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 = "StructureChuteOverflow", + props( + name = r#"Chute Overflow"#, + desc = r#"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 = "StructureChuteValve", + props( + name = r#"Chute Valve"#, + desc = r#"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 = "ItemCoffeeMug", + props(name = r#"Coffee Mug"#, desc = r#""#, value = "1800622698") + )] + ItemCoffeeMug = 1800622698i32, + #[strum( + serialize = "ReagentColorBlue", + props(name = r#"Color Dye (Blue)"#, desc = r#""#, value = "980054869") + )] + ReagentColorBlue = 980054869i32, + #[strum( + serialize = "ReagentColorGreen", + props(name = r#"Color Dye (Green)"#, desc = r#""#, value = "120807542") + )] + ReagentColorGreen = 120807542i32, + #[strum( + serialize = "ReagentColorOrange", + props(name = r#"Color Dye (Orange)"#, desc = r#""#, value = "-400696159") + )] + ReagentColorOrange = -400696159i32, + #[strum( + serialize = "ReagentColorRed", + props(name = r#"Color Dye (Red)"#, desc = r#""#, value = "1998377961") + )] + ReagentColorRed = 1998377961i32, + #[strum( + serialize = "ReagentColorYellow", + props(name = r#"Color Dye (Yellow)"#, desc = r#""#, value = "635208006") + )] + ReagentColorYellow = 635208006i32, + #[strum( + serialize = "StructureCombustionCentrifuge", + props( + name = r#"Combustion Centrifuge"#, + desc = r#"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. + 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. + 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. + 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. + 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. + "#, + value = "1238905683" + ) + )] + StructureCombustionCentrifuge = 1238905683i32, + #[strum( + serialize = "MotherboardComms", + props( + name = r#"Communications Motherboard"#, + desc = r#"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."#, + value = "-337075633" + ) + )] + MotherboardComms = -337075633i32, + #[strum( + serialize = "StructureCompositeCladdingAngledCornerInnerLongL", + props( + name = r#"Composite Cladding (Angled Corner Inner Long L)"#, + desc = r#""#, + value = "947705066" + ) + )] + StructureCompositeCladdingAngledCornerInnerLongL = 947705066i32, + #[strum( + serialize = "StructureCompositeCladdingAngledCornerInnerLongR", + props( + name = r#"Composite Cladding (Angled Corner Inner Long R)"#, + desc = r#""#, + value = "-1032590967" + ) + )] + StructureCompositeCladdingAngledCornerInnerLongR = -1032590967i32, + #[strum( + serialize = "StructureCompositeCladdingAngledCornerInnerLong", + props( + name = r#"Composite Cladding (Angled Corner Inner Long)"#, + desc = r#""#, + value = "-1417912632" + ) + )] + StructureCompositeCladdingAngledCornerInnerLong = -1417912632i32, + #[strum( + serialize = "StructureCompositeCladdingAngledCornerInner", + props( + name = r#"Composite Cladding (Angled Corner Inner)"#, + desc = r#""#, + value = "-1841871763" + ) + )] + StructureCompositeCladdingAngledCornerInner = -1841871763i32, + #[strum( + serialize = "StructureCompositeCladdingAngledCorner", + props( + name = r#"Composite Cladding (Angled Corner)"#, + desc = r#""#, + value = "-69685069" + ) + )] + StructureCompositeCladdingAngledCorner = -69685069i32, + #[strum( + serialize = "StructureCompositeCladdingAngled", + props( + name = r#"Composite Cladding (Angled)"#, + desc = r#""#, + value = "-1513030150" + ) + )] + StructureCompositeCladdingAngled = -1513030150i32, + #[strum( + serialize = "StructureCompositeCladdingCylindricalPanel", + props( + name = r#"Composite Cladding (Cylindrical Panel)"#, + desc = r#""#, + value = "1077151132" + ) + )] + StructureCompositeCladdingCylindricalPanel = 1077151132i32, + #[strum( + serialize = "StructureCompositeCladdingCylindrical", + props( + name = r#"Composite Cladding (Cylindrical)"#, + desc = r#""#, + value = "212919006" + ) + )] + StructureCompositeCladdingCylindrical = 212919006i32, + #[strum( + serialize = "StructureCompositeCladdingAngledCornerLong", + props( + name = r#"Composite Cladding (Long Angled Corner)"#, + desc = r#""#, + value = "850558385" + ) + )] + StructureCompositeCladdingAngledCornerLong = 850558385i32, + #[strum( + serialize = "StructureCompositeCladdingAngledCornerLongR", + props( + name = r#"Composite Cladding (Long Angled Mirrored Corner)"#, + desc = r#""#, + value = "-348918222" + ) + )] + StructureCompositeCladdingAngledCornerLongR = -348918222i32, + #[strum( + serialize = "StructureCompositeCladdingAngledLong", + props( + name = r#"Composite Cladding (Long Angled)"#, + desc = r#""#, + value = "-387546514" + ) + )] + StructureCompositeCladdingAngledLong = -387546514i32, + #[strum( + serialize = "StructureCompositeCladdingPanel", + props( + name = r#"Composite Cladding (Panel)"#, + desc = r#""#, + value = "1997436771" + ) + )] + StructureCompositeCladdingPanel = 1997436771i32, + #[strum( + serialize = "StructureCompositeCladdingRoundedCornerInner", + props( + name = r#"Composite Cladding (Rounded Corner Inner)"#, + desc = r#""#, + value = "110184667" + ) + )] + StructureCompositeCladdingRoundedCornerInner = 110184667i32, + #[strum( + serialize = "StructureCompositeCladdingRoundedCorner", + props( + name = r#"Composite Cladding (Rounded Corner)"#, + desc = r#""#, + value = "1951525046" + ) + )] + StructureCompositeCladdingRoundedCorner = 1951525046i32, + #[strum( + serialize = "StructureCompositeCladdingRounded", + props( + name = r#"Composite Cladding (Rounded)"#, + desc = r#""#, + value = "-259357734" + ) + )] + StructureCompositeCladdingRounded = -259357734i32, + #[strum( + serialize = "StructureCompositeCladdingSphericalCap", + props( + name = r#"Composite Cladding (Spherical Cap)"#, + desc = r#""#, + value = "534213209" + ) + )] + StructureCompositeCladdingSphericalCap = 534213209i32, + #[strum( + serialize = "StructureCompositeCladdingSphericalCorner", + props( + name = r#"Composite Cladding (Spherical Corner)"#, + desc = r#""#, + value = "1751355139" + ) + )] + StructureCompositeCladdingSphericalCorner = 1751355139i32, + #[strum( + serialize = "StructureCompositeCladdingSpherical", + props( + name = r#"Composite Cladding (Spherical)"#, + desc = r#""#, + value = "139107321" + ) + )] + StructureCompositeCladdingSpherical = 139107321i32, + #[strum( + serialize = "StructureCompositeDoor", + props( + name = r#"Composite Door"#, + desc = r#"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 = "StructureCompositeFloorGrating", + props( + name = r#"Composite Floor Grating"#, + desc = r#"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 = "StructureCompositeFloorGrating2", + props( + name = r#"Composite Floor Grating (Type 2)"#, + desc = r#""#, + value = "-895027741" + ) + )] + StructureCompositeFloorGrating2 = -895027741i32, + #[strum( + serialize = "StructureCompositeFloorGrating3", + props( + name = r#"Composite Floor Grating (Type 3)"#, + desc = r#""#, + value = "-1113471627" + ) + )] + StructureCompositeFloorGrating3 = -1113471627i32, + #[strum( + serialize = "StructureCompositeFloorGrating4", + props( + name = r#"Composite Floor Grating (Type 4)"#, + desc = r#""#, + value = "600133846" + ) + )] + StructureCompositeFloorGrating4 = 600133846i32, + #[strum( + serialize = "StructureCompositeFloorGratingOpen", + props( + name = r#"Composite Floor Grating Open"#, + desc = r#""#, + value = "2109695912" + ) + )] + StructureCompositeFloorGratingOpen = 2109695912i32, + #[strum( + serialize = "StructureCompositeFloorGratingOpenRotated", + props( + name = r#"Composite Floor Grating Open Rotated"#, + desc = r#""#, + value = "882307910" + ) + )] + StructureCompositeFloorGratingOpenRotated = 882307910i32, + #[strum( + serialize = "CompositeRollCover", + props( + name = r#"Composite Roll Cover"#, + desc = r#"0.Operate +1.Logic"#, + value = "1228794916" + ) + )] + CompositeRollCover = 1228794916i32, + #[strum( + serialize = "StructureCompositeWall", + props( + name = r#"Composite Wall (Type 1)"#, + desc = r#"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 = "StructureCompositeWall02", + props(name = r#"Composite Wall (Type 2)"#, desc = r#""#, value = "718343384") + )] + StructureCompositeWall02 = 718343384i32, + #[strum( + serialize = "StructureCompositeWall03", + props( + name = r#"Composite Wall (Type 3)"#, + desc = r#""#, + value = "1574321230" + ) + )] + StructureCompositeWall03 = 1574321230i32, + #[strum( + serialize = "StructureCompositeWall04", + props( + name = r#"Composite Wall (Type 4)"#, + desc = r#""#, + value = "-1011701267" + ) + )] + StructureCompositeWall04 = -1011701267i32, + #[strum( + serialize = "StructureCompositeWindow", + props( + name = r#"Composite Window"#, + desc = r#"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 = "StructureComputer", + props( + name = r#"Computer"#, + desc = r#"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. +The 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. +Compatible motherboards: +- Logic Motherboard +- Manufacturing Motherboard +- Sorter Motherboard +- Communications Motherboard +- IC Editor Motherboard"#, + value = "-626563514" + ) + )] + StructureComputer = -626563514i32, + #[strum( + serialize = "StructureCondensationChamber", + props( + name = r#"Condensation Chamber"#, + desc = r#"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. + 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. + 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 = "StructureCondensationValve", + props( + name = r#"Condensation Valve"#, + desc = r#"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 = "ItemCookedCondensedMilk", + props( + name = r#"Condensed Milk"#, + desc = r#"A high-nutrient cooked food, which can be canned."#, + value = "1715917521" + ) + )] + ItemCookedCondensedMilk = 1715917521i32, + #[strum( + serialize = "CartridgeConfiguration", + props(name = r#"Configuration"#, desc = r#""#, value = "-932136011") + )] + CartridgeConfiguration = -932136011i32, + #[strum( + serialize = "StructureConsole", + props( + name = r#"Console"#, + desc = r#"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. +A 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 = "StructureConsoleDual", + props( + name = r#"Console Dual"#, + desc = r#"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. +A 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 = "StructureConsoleMonitor", + props( + name = r#"Console Monitor"#, + desc = r#"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. +A 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 = "StructureCrateMount", + props(name = r#"Container Mount"#, desc = r#""#, value = "-733500083") + )] + StructureCrateMount = -733500083i32, + #[strum( + serialize = "StructureControlChair", + props( + name = r#"Control Chair"#, + desc = r#"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 = "ItemCookedCorn", + props( + name = r#"Cooked Corn"#, + desc = r#"A high-nutrient cooked food, which can be canned."#, + value = "1344773148" + ) + )] + ItemCookedCorn = 1344773148i32, + #[strum( + serialize = "ItemCookedMushroom", + props( + name = r#"Cooked Mushroom"#, + desc = r#"A high-nutrient cooked food, which can be canned."#, + value = "-1076892658" + ) + )] + ItemCookedMushroom = -1076892658i32, + #[strum( + serialize = "ItemCookedPumpkin", + props( + name = r#"Cooked Pumpkin"#, + desc = r#"A high-nutrient cooked food, which can be canned."#, + value = "1849281546" + ) + )] + ItemCookedPumpkin = 1849281546i32, + #[strum( + serialize = "ItemCookedRice", + props( + name = r#"Cooked Rice"#, + desc = r#"A high-nutrient cooked food, which can be canned."#, + value = "2013539020" + ) + )] + ItemCookedRice = 2013539020i32, + #[strum( + serialize = "ItemCookedSoybean", + props( + name = r#"Cooked Soybean"#, + desc = r#"A high-nutrient cooked food, which can be canned."#, + value = "1353449022" + ) + )] + ItemCookedSoybean = 1353449022i32, + #[strum( + serialize = "ItemCookedTomato", + props( + name = r#"Cooked Tomato"#, + desc = r#"A high-nutrient cooked food, which can be canned."#, + value = "-709086714" + ) + )] + ItemCookedTomato = -709086714i32, + #[strum( + serialize = "ItemCorn", + props( + name = r#"Corn"#, + desc = r#"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 = "SeedBag_Corn", + props( + name = r#"Corn Seeds"#, + desc = r#"Grow a Corn."#, + value = "-1290755415" + ) + )] + SeedBagCorn = -1290755415i32, + #[strum( + serialize = "ItemCornSoup", + props( + name = r#"Corn Soup"#, + desc = r#"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 = "StructureCornerLocker", + props(name = r#"Corner Locker"#, desc = r#""#, value = "-1968255729") + )] + StructureCornerLocker = -1968255729i32, + #[strum( + serialize = "StructurePassthroughHeatExchangerGasToGas", + props( + name = r#"CounterFlow Heat Exchanger - Gas + Gas"#, + desc = r#"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. + Balancing the throughput of both inputs is key to creating a good exhange of temperatures."#, + value = "-1674187440" + ) + )] + StructurePassthroughHeatExchangerGasToGas = -1674187440i32, + #[strum( + serialize = "StructurePassthroughHeatExchangerGasToLiquid", + props( + name = r#"CounterFlow Heat Exchanger - Gas + Liquid"#, + desc = r#"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. + Balancing the throughput of both inputs is key to creating a good exhange of temperatures."#, + value = "1928991265" + ) + )] + StructurePassthroughHeatExchangerGasToLiquid = 1928991265i32, + #[strum( + serialize = "StructurePassthroughHeatExchangerLiquidToLiquid", + props( + name = r#"CounterFlow Heat Exchanger - Liquid + Liquid"#, + desc = r#"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. + Balancing the throughput of both inputs is key to creating a good exchange of temperatures."#, + value = "-1472829583" + ) + )] + StructurePassthroughHeatExchangerLiquidToLiquid = -1472829583i32, + #[strum( + serialize = "CrateMkII", + props( + name = r#"Crate Mk II"#, + desc = r#"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 = "ItemCreditCard", + props(name = r#"Credit Card"#, desc = r#""#, value = "-1756772618") + )] + ItemCreditCard = -1756772618i32, + #[strum( + serialize = "ItemCrowbar", + props( + name = r#"Crowbar"#, + desc = r#"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 = "StructureCryoTubeHorizontal", + props( + name = r#"Cryo Tube Horizontal"#, + desc = r#"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 = "StructureCryoTubeVertical", + props( + name = r#"Cryo Tube Vertical"#, + desc = r#"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 = "StructureCryoTube", + props( + name = r#"CryoTube"#, + desc = r#"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 = "ItemSuitModCryogenicUpgrade", + props( + name = r#"Cryogenic Suit Upgrade"#, + desc = r#"Enables suits with basic cooling functionality to work with cryogenic liquid."#, + value = "-1274308304" + ) + )] + ItemSuitModCryogenicUpgrade = -1274308304i32, + #[strum( + serialize = "ItemFilterFern", + props( + name = r#"Darga Fern"#, + desc = r#"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 = "ItemDataDisk", + props(name = r#"Data Disk"#, desc = r#""#, value = "1005843700") + )] + ItemDataDisk = 1005843700i32, + #[strum( + serialize = "StructureDaylightSensor", + props( + name = r#"Daylight Sensor"#, + desc = r#"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 = "DecayedFood", + props( + name = r#"Decayed Food"#, + desc = r#"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: + +- 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). + +- FOOD TYPE - Each food type has its own decay properties. Tomato Soup lasts a lot longer than a Tomato, for instance. + +- 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. + +- 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: + +> Oxygen x 1.3 +> Nitrogen x 0.6 +> Carbon Dioxide x 0.8 +> Volatiles x 1 +> Pollutant x 3 +> Nitrous Oxide x 1.5 +> Steam x 2 +> Vacuum (see PRESSURE above) + +"#, + value = "1531087544" + ) + )] + DecayedFood = 1531087544i32, + #[strum( + serialize = "StructureDeepMiner", + props( + name = r#"Deep Miner"#, + desc = r#"Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s"#, + value = "265720906" + ) + )] + StructureDeepMiner = 265720906i32, + #[strum( + serialize = "DeviceStepUnit", + props( + name = r#"Device Step Unit"#, + desc = r#"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"#, + value = "1762696475" + ) + )] + DeviceStepUnit = 1762696475i32, + #[strum( + serialize = "StructureLogicDial", + props( + name = r#"Dial"#, + desc = r#"An assignable dial with up to 1000 modes."#, + value = "554524804" + ) + )] + StructureLogicDial = 554524804i32, + #[strum( + serialize = "StructureDigitalValve", + props( + name = r#"Digital Valve"#, + desc = r#"The digital valve allows Stationeers to create logic-controlled valves and pipe networks."#, + value = "-1280984102" + ) + )] + StructureDigitalValve = -1280984102i32, + #[strum( + serialize = "StructureDiodeSlide", + props(name = r#"Diode Slide"#, desc = r#""#, value = "576516101") + )] + StructureDiodeSlide = 576516101i32, + #[strum( + serialize = "ItemDirtCanister", + props( + name = r#"Dirt Canister"#, + desc = r#"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 = "ItemSpaceOre", + props( + name = r#"Dirty Ore"#, + desc = r#"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 = "ItemDirtyOre", + props( + name = r#"Dirty Ore"#, + desc = r#"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 = "ItemDisposableBatteryCharger", + props( + name = r#"Disposable Battery Charger"#, + desc = r#"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 = "StructureDockPortSide", + props(name = r#"Dock (Port Side)"#, desc = r#""#, value = "-137465079") + )] + StructureDockPortSide = -137465079i32, + #[strum( + serialize = "CircuitboardDoorControl", + props( + name = r#"Door Control"#, + desc = r#"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 = "StructureSleeperVerticalDroid", + props( + name = r#"Droid Sleeper Vertical"#, + desc = r#"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 = "ItemDuctTape", + props( + name = r#"Duct Tape"#, + desc = r#"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. +To use on yourself: put duct tape in your active hand, hold RIGHT MOUSE BUTTON to automatically repair damage."#, + value = "-1943134693" + ) + )] + ItemDuctTape = -1943134693i32, + #[strum( + serialize = "DynamicCrate", + props( + name = r#"Dynamic Crate"#, + desc = r#"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 = "DynamicGasCanisterRocketFuel", + props( + name = r#"Dynamic Gas Canister Rocket Fuel"#, + desc = r#""#, + value = "-8883951" + ) + )] + DynamicGasCanisterRocketFuel = -8883951i32, + #[strum( + serialize = "ItemFertilizedEgg", + props( + name = r#"Egg"#, + desc = r#"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 = "ItemEggCarton", + props( + name = r#"Egg Carton"#, + desc = r#"Within, eggs reside in mysterious, marmoreal silence."#, + value = "-524289310" + ) + )] + ItemEggCarton = -524289310i32, + #[strum( + serialize = "StructureElectrolyzer", + props( + name = r#"Electrolyzer"#, + desc = r#"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 = "ItemElectronicParts", + props(name = r#"Electronic Parts"#, desc = r#""#, value = "731250882") + )] + ItemElectronicParts = 731250882i32, + #[strum( + serialize = "ElectronicPrinterMod", + props( + name = r#"Electronic Printer Mod"#, + desc = r#"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 = "StructureElectronicsPrinter", + props( + name = r#"Electronics Printer"#, + desc = r#"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 = "ElevatorCarrage", + props(name = r#"Elevator"#, desc = r#""#, value = "-110788403") + )] + ElevatorCarrage = -110788403i32, + #[strum( + serialize = "StructureElevatorLevelIndustrial", + props(name = r#"Elevator Level"#, desc = r#""#, value = "2060648791") + )] + StructureElevatorLevelIndustrial = 2060648791i32, + #[strum( + serialize = "StructureElevatorLevelFront", + props( + name = r#"Elevator Level (Cabled)"#, + desc = r#""#, + value = "-827912235" + ) + )] + StructureElevatorLevelFront = -827912235i32, + #[strum( + serialize = "StructureElevatorShaftIndustrial", + props(name = r#"Elevator Shaft"#, desc = r#""#, value = "1998354978") + )] + StructureElevatorShaftIndustrial = 1998354978i32, + #[strum( + serialize = "StructureElevatorShaft", + props(name = r#"Elevator Shaft (Cabled)"#, desc = r#""#, value = "826144419") + )] + StructureElevatorShaft = 826144419i32, + #[strum( + serialize = "ItemEmergencyAngleGrinder", + props( + name = r#"Emergency Angle Grinder"#, + desc = r#""#, + value = "-351438780" + ) + )] + ItemEmergencyAngleGrinder = -351438780i32, + #[strum( + serialize = "ItemEmergencyArcWelder", + props(name = r#"Emergency Arc Welder"#, desc = r#""#, value = "-1056029600") + )] + ItemEmergencyArcWelder = -1056029600i32, + #[strum( + serialize = "ItemEmergencyCrowbar", + props(name = r#"Emergency Crowbar"#, desc = r#""#, value = "976699731") + )] + ItemEmergencyCrowbar = 976699731i32, + #[strum( + serialize = "ItemEmergencyDrill", + props(name = r#"Emergency Drill"#, desc = r#""#, value = "-2052458905") + )] + ItemEmergencyDrill = -2052458905i32, + #[strum( + serialize = "ItemEmergencyEvaSuit", + props(name = r#"Emergency Eva Suit"#, desc = r#""#, value = "1791306431") + )] + ItemEmergencyEvaSuit = 1791306431i32, + #[strum( + serialize = "ItemEmergencyPickaxe", + props(name = r#"Emergency Pickaxe"#, desc = r#""#, value = "-1061510408") + )] + ItemEmergencyPickaxe = -1061510408i32, + #[strum( + serialize = "ItemEmergencyScrewdriver", + props(name = r#"Emergency Screwdriver"#, desc = r#""#, value = "266099983") + )] + ItemEmergencyScrewdriver = 266099983i32, + #[strum( + serialize = "ItemEmergencySpaceHelmet", + props(name = r#"Emergency Space Helmet"#, desc = r#""#, value = "205916793") + )] + ItemEmergencySpaceHelmet = 205916793i32, + #[strum( + serialize = "ItemEmergencyToolBelt", + props(name = r#"Emergency Tool Belt"#, desc = r#""#, value = "1661941301") + )] + ItemEmergencyToolBelt = 1661941301i32, + #[strum( + serialize = "ItemEmergencyWireCutters", + props(name = r#"Emergency Wire Cutters"#, desc = r#""#, value = "2102803952") + )] + ItemEmergencyWireCutters = 2102803952i32, + #[strum( + serialize = "ItemEmergencyWrench", + props(name = r#"Emergency Wrench"#, desc = r#""#, value = "162553030") + )] + ItemEmergencyWrench = 162553030i32, + #[strum( + serialize = "ItemEmptyCan", + props( + name = r#"Empty Can"#, + desc = r#"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 = "ItemPlantEndothermic_Creative", + props( + name = r#"Endothermic Plant Creative"#, + desc = r#""#, + value = "-1159179557" + ) + )] + ItemPlantEndothermicCreative = -1159179557i32, + #[strum( + serialize = "WeaponPistolEnergy", + props( + name = r#"Energy Pistol"#, + desc = r#"0.Stun +1.Kill"#, + value = "-385323479" + ) + )] + WeaponPistolEnergy = -385323479i32, + #[strum( + serialize = "WeaponRifleEnergy", + props( + name = r#"Energy Rifle"#, + desc = r#"0.Stun +1.Kill"#, + value = "1154745374" + ) + )] + WeaponRifleEnergy = 1154745374i32, + #[strum( + serialize = "StructureEngineMountTypeA1", + props(name = r#"Engine Mount (Type A1)"#, desc = r#""#, value = "2035781224") + )] + StructureEngineMountTypeA1 = 2035781224i32, + #[strum( + serialize = "EntityChick", + props( + name = r#"Entity Chick"#, + desc = r#"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 = "EntityChickenBrown", + props( + name = r#"Entity Chicken Brown"#, + desc = r#"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 = "EntityChickenWhite", + props( + name = r#"Entity Chicken White"#, + desc = r#"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 = "EntityRoosterBlack", + props( + name = r#"Entity Rooster Black"#, + desc = r#"This is a rooster. It is black. There is dignity in this."#, + value = "966959649" + ) + )] + EntityRoosterBlack = 966959649i32, + #[strum( + serialize = "EntityRoosterBrown", + props( + name = r#"Entity Rooster Brown"#, + desc = r#"The common brown rooster. Don't let it hear you say that."#, + value = "-583103395" + ) + )] + EntityRoosterBrown = -583103395i32, + #[strum( + serialize = "ItemEvaSuit", + props( + name = r#"Eva Suit"#, + desc = r#"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 = "StructureEvaporationChamber", + props( + name = r#"Evaporation Chamber"#, + desc = r#"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. + 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. + 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 = "StructureExpansionValve", + props( + name = r#"Expansion Valve"#, + desc = r#"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 = "StructureFairingTypeA1", + props(name = r#"Fairing (Type A1)"#, desc = r#""#, value = "1622567418") + )] + StructureFairingTypeA1 = 1622567418i32, + #[strum( + serialize = "StructureFairingTypeA2", + props(name = r#"Fairing (Type A2)"#, desc = r#""#, value = "-104908736") + )] + StructureFairingTypeA2 = -104908736i32, + #[strum( + serialize = "StructureFairingTypeA3", + props(name = r#"Fairing (Type A3)"#, desc = r#""#, value = "-1900541738") + )] + StructureFairingTypeA3 = -1900541738i32, + #[strum( + serialize = "ItemFern", + props( + name = r#"Fern"#, + desc = r#"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 = "SeedBag_Fern", + props( + name = r#"Fern Seeds"#, + desc = r#"Grow a Fern."#, + value = "-1990600883" + ) + )] + SeedBagFern = -1990600883i32, + #[strum( + serialize = "Fertilizer", + props( + name = r#"Fertilizer"#, + desc = r#"Fertilizer alters plant growth processes, and is created by the basic composter and the Advanced Composter using organic matter. +Fertilizer's affects depend on its ingredients: + +- Food increases PLANT YIELD up to two times +- Decayed Food increases plant GROWTH SPEED up to two times +- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for + +The effect of these ingredients depends on their respective proportions in the composter when processing is activated. "#, + value = "1517856652" + ) + )] + Fertilizer = 1517856652i32, + #[strum( + serialize = "ItemGasFilterCarbonDioxide", + props( + name = r#"Filter (Carbon Dioxide)"#, + desc = r#"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 = "ItemGasFilterNitrogen", + props( + name = r#"Filter (Nitrogen)"#, + desc = r#"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 = "ItemGasFilterNitrousOxide", + props( + name = r#"Filter (Nitrous Oxide)"#, + desc = r#""#, + value = "-1247674305" + ) + )] + ItemGasFilterNitrousOxide = -1247674305i32, + #[strum( + serialize = "ItemGasFilterOxygen", + props( + name = r#"Filter (Oxygen)"#, + desc = r#"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 = "ItemGasFilterPollutants", + props( + name = r#"Filter (Pollutant)"#, + desc = r#"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 = "ItemGasFilterVolatiles", + props( + name = r#"Filter (Volatiles)"#, + desc = r#"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 = "ItemGasFilterWater", + props( + name = r#"Filter (Water)"#, + desc = r#"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 = "StructureFiltration", + props( + name = r#"Filtration"#, + desc = r#"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). +The 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. +"#, + value = "-348054045" + ) + )] + StructureFiltration = -348054045i32, + #[strum( + serialize = "FireArmSMG", + props( + name = r#"Fire Arm SMG"#, + desc = r#"0.Single +1.Auto"#, + value = "-86315541" + ) + )] + FireArmSmg = -86315541i32, + #[strum( + serialize = "ItemReusableFireExtinguisher", + props( + name = r#"Fire Extinguisher (Reusable)"#, + desc = r#"Requires a canister filled with any inert liquid to opperate."#, + value = "-1773192190" + ) + )] + ItemReusableFireExtinguisher = -1773192190i32, + #[strum( + serialize = "Flag_ODA_10m", + props(name = r#"Flag (ODA 10m)"#, desc = r#""#, value = "1845441951") + )] + FlagOda10M = 1845441951i32, + #[strum( + serialize = "Flag_ODA_4m", + props(name = r#"Flag (ODA 4m)"#, desc = r#""#, value = "1159126354") + )] + FlagOda4M = 1159126354i32, + #[strum( + serialize = "Flag_ODA_6m", + props(name = r#"Flag (ODA 6m)"#, desc = r#""#, value = "1998634960") + )] + FlagOda6M = 1998634960i32, + #[strum( + serialize = "Flag_ODA_8m", + props(name = r#"Flag (ODA 8m)"#, desc = r#""#, value = "-375156130") + )] + FlagOda8M = -375156130i32, + #[strum( + serialize = "FlareGun", + props(name = r#"Flare Gun"#, desc = r#""#, value = "118685786") + )] + FlareGun = 118685786i32, + #[strum( + serialize = "StructureFlashingLight", + props( + name = r#"Flashing Light"#, + desc = r#"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 = "ItemFlashlight", + props( + name = r#"Flashlight"#, + desc = r#"A flashlight with a narrow and wide beam options."#, + value = "-838472102" + ) + )] + ItemFlashlight = -838472102i32, + #[strum( + serialize = "ItemFlour", + props( + name = r#"Flour"#, + desc = r#"Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven)."#, + value = "-665995854" + ) + )] + ItemFlour = -665995854i32, + #[strum( + serialize = "ItemFlowerBlue", + props(name = r#"Flower (Blue)"#, desc = r#""#, value = "-1573623434") + )] + ItemFlowerBlue = -1573623434i32, + #[strum( + serialize = "ItemFlowerGreen", + props(name = r#"Flower (Green)"#, desc = r#""#, value = "-1513337058") + )] + ItemFlowerGreen = -1513337058i32, + #[strum( + serialize = "ItemFlowerOrange", + props(name = r#"Flower (Orange)"#, desc = r#""#, value = "-1411986716") + )] + ItemFlowerOrange = -1411986716i32, + #[strum( + serialize = "ItemFlowerRed", + props(name = r#"Flower (Red)"#, desc = r#""#, value = "-81376085") + )] + ItemFlowerRed = -81376085i32, + #[strum( + serialize = "ItemFlowerYellow", + props(name = r#"Flower (Yellow)"#, desc = r#""#, value = "1712822019") + )] + ItemFlowerYellow = 1712822019i32, + #[strum( + serialize = "ItemFries", + props(name = r#"French Fries"#, desc = r#""#, value = "1371786091") + )] + ItemFries = 1371786091i32, + #[strum( + serialize = "StructureFridgeBig", + props( + name = r#"Fridge (Large)"#, + desc = r#"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. + +With 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. + +Also, don't leave the door open, as it will equalize with the current world temperature. And maybe start to beep. + +For more information about food preservation, visit the food decay section of the Stationpedia."#, + value = "958476921" + ) + )] + StructureFridgeBig = 958476921i32, + #[strum( + serialize = "StructureFridgeSmall", + props( + name = r#"Fridge Small"#, + desc = r#"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. + + For more information about food preservation, visit the food decay section of the Stationpedia."#, + value = "751887598" + ) + )] + StructureFridgeSmall = 751887598i32, + #[strum( + serialize = "StructureFurnace", + props( + name = r#"Furnace"#, + desc = r#"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. +A 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. +If 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 = "StructureCableFuse100k", + props(name = r#"Fuse (100kW)"#, desc = r#""#, value = "281380789") + )] + StructureCableFuse100K = 281380789i32, + #[strum( + serialize = "StructureCableFuse1k", + props(name = r#"Fuse (1kW)"#, desc = r#""#, value = "-1103727120") + )] + StructureCableFuse1K = -1103727120i32, + #[strum( + serialize = "StructureCableFuse50k", + props(name = r#"Fuse (50kW)"#, desc = r#""#, value = "-349716617") + )] + StructureCableFuse50K = -349716617i32, + #[strum( + serialize = "StructureCableFuse5k", + props(name = r#"Fuse (5kW)"#, desc = r#""#, value = "-631590668") + )] + StructureCableFuse5K = -631590668i32, + #[strum( + serialize = "StructureFuselageTypeA1", + props(name = r#"Fuselage (Type A1)"#, desc = r#""#, value = "1033024712") + )] + StructureFuselageTypeA1 = 1033024712i32, + #[strum( + serialize = "StructureFuselageTypeA2", + props(name = r#"Fuselage (Type A2)"#, desc = r#""#, value = "-1533287054") + )] + StructureFuselageTypeA2 = -1533287054i32, + #[strum( + serialize = "StructureFuselageTypeA4", + props(name = r#"Fuselage (Type A4)"#, desc = r#""#, value = "1308115015") + )] + StructureFuselageTypeA4 = 1308115015i32, + #[strum( + serialize = "StructureFuselageTypeC5", + props(name = r#"Fuselage (Type C5)"#, desc = r#""#, value = "147395155") + )] + StructureFuselageTypeC5 = 147395155i32, + #[strum( + serialize = "CartridgeGPS", + props(name = r#"GPS"#, desc = r#""#, value = "-1957063345") + )] + CartridgeGps = -1957063345i32, + #[strum( + serialize = "ItemGasCanisterNitrousOxide", + props( + name = r#"Gas Canister (Sleeping)"#, + desc = r#""#, + value = "-1712153401" + ) + )] + ItemGasCanisterNitrousOxide = -1712153401i32, + #[strum( + serialize = "ItemGasCanisterSmart", + props( + name = r#"Gas Canister (Smart)"#, + desc = r#"0.Mode0 +1.Mode1"#, + value = "-668314371" + ) + )] + ItemGasCanisterSmart = -668314371i32, + #[strum( + serialize = "StructureMediumRocketGasFuelTank", + props( + name = r#"Gas Capsule Tank Medium"#, + desc = r#""#, + value = "-1093860567" + ) + )] + StructureMediumRocketGasFuelTank = -1093860567i32, + #[strum( + serialize = "StructureCapsuleTankGas", + props( + name = r#"Gas Capsule Tank Small"#, + desc = r#""#, + value = "-1385712131" + ) + )] + StructureCapsuleTankGas = -1385712131i32, + #[strum( + serialize = "CircuitboardGasDisplay", + props( + name = r#"Gas Display"#, + desc = r#"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 = "StructureGasGenerator", + props(name = r#"Gas Fuel Generator"#, desc = r#""#, value = "1165997963") + )] + StructureGasGenerator = 1165997963i32, + #[strum( + serialize = "StructureGasMixer", + props( + name = r#"Gas Mixer"#, + desc = r#"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 = "StructureGasSensor", + props( + name = r#"Gas Sensor"#, + desc = r#"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 = "DynamicGasTankAdvanced", + props( + name = r#"Gas Tank Mk II"#, + desc = r#"0.Mode0 +1.Mode1"#, + value = "-386375420" + ) + )] + DynamicGasTankAdvanced = -386375420i32, + #[strum( + serialize = "StructureGasTankStorage", + props( + name = r#"Gas Tank Storage"#, + desc = r#"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 = "StructureSolidFuelGenerator", + props( + name = r#"Generator (Solid Fuel)"#, + desc = r#"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 = "StructureGlassDoor", + props( + name = r#"Glass Door"#, + desc = r#"0.Operate +1.Logic"#, + value = "-324331872" + ) + )] + StructureGlassDoor = -324331872i32, + #[strum( + serialize = "ItemGlassSheets", + props( + name = r#"Glass Sheets"#, + desc = r#"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 = "ItemGlasses", + props(name = r#"Glasses"#, desc = r#""#, value = "-1068925231") + )] + ItemGlasses = -1068925231i32, + #[strum( + serialize = "CircuitboardGraphDisplay", + props(name = r#"Graph Display"#, desc = r#""#, value = "1344368806") + )] + CircuitboardGraphDisplay = 1344368806i32, + #[strum( + serialize = "StructureGrowLight", + props( + name = r#"Grow Light"#, + desc = r#"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 = "CartridgeGuide", + props(name = r#"Guide"#, desc = r#""#, value = "872720793") + )] + CartridgeGuide = 872720793i32, + #[strum( + serialize = "H2Combustor", + props( + name = r#"H2 Combustor"#, + desc = r#"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 = "ItemHEMDroidRepairKit", + props( + name = r#"HEMDroid Repair Kit"#, + desc = r#"Repairs damaged HEM-Droids to full health."#, + value = "470636008" + ) + )] + ItemHemDroidRepairKit = 470636008i32, + #[strum( + serialize = "ItemPlantThermogenic_Genepool1", + props( + name = r#"Hades Flower (Alpha strain)"#, + desc = r#"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 = "ItemPlantThermogenic_Genepool2", + props( + name = r#"Hades Flower (Beta strain)"#, + desc = r#"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 = "ItemDrill", + props( + name = r#"Hand Drill"#, + desc = r#"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 = "ItemGrenade", + props( + name = r#"Hand Grenade"#, + desc = r#"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 = "Handgun", + props(name = r#"Handgun"#, desc = r#""#, value = "247238062") + )] + Handgun = 247238062i32, + #[strum( + serialize = "HandgunMagazine", + props(name = r#"Handgun Magazine"#, desc = r#""#, value = "1254383185") + )] + HandgunMagazine = 1254383185i32, + #[strum( + serialize = "ItemScanner", + props( + name = r#"Handheld Scanner"#, + desc = r#"A mysterious piece of technology, rumored to have Zrillian origins."#, + value = "1661270830" + ) + )] + ItemScanner = 1661270830i32, + #[strum( + serialize = "ItemTablet", + props( + name = r#"Handheld Tablet"#, + desc = r#"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."#, + value = "-229808600" + ) + )] + ItemTablet = -229808600i32, + #[strum( + serialize = "ItemHardMiningBackPack", + props(name = r#"Hard Mining Backpack"#, desc = r#""#, value = "900366130") + )] + ItemHardMiningBackPack = 900366130i32, + #[strum( + serialize = "ItemHardSuit", + props( + name = r#"Hardsuit"#, + desc = r#"Connects to Logic Transmitter"#, + value = "-1758310454" + ) + )] + ItemHardSuit = -1758310454i32, + #[strum( + serialize = "ItemHardBackpack", + props( + name = r#"Hardsuit Backpack"#, + desc = r#"This backpack can be useful when you are working inside and don't need to fly around."#, + value = "374891127" + ) + )] + ItemHardBackpack = 374891127i32, + #[strum( + serialize = "ItemHardsuitHelmet", + props( + name = r#"Hardsuit Helmet"#, + desc = r#"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 = "ItemHardJetpack", + props( + name = r#"Hardsuit Jetpack"#, + desc = r#"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. +The 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. +USE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move."#, + value = "-412551656" + ) + )] + ItemHardJetpack = -412551656i32, + #[strum( + serialize = "StructureHarvie", + props( + name = r#"Harvie"#, + desc = r#"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 = "CircuitboardHashDisplay", + props(name = r#"Hash Display"#, desc = r#""#, value = "1633074601") + )] + CircuitboardHashDisplay = 1633074601i32, + #[strum( + serialize = "ItemHat", + props( + name = r#"Hat"#, + desc = r#"As the name suggests, this is a hat."#, + value = "299189339" + ) + )] + ItemHat = 299189339i32, + #[strum( + serialize = "ItemCropHay", + props(name = r#"Hay"#, desc = r#""#, value = "215486157") + )] + ItemCropHay = 215486157i32, + #[strum( + serialize = "ItemWearLamp", + props(name = r#"Headlamp"#, desc = r#""#, value = "-598730959") + )] + ItemWearLamp = -598730959i32, + #[strum( + serialize = "StructureHeatExchangerGastoGas", + props( + name = r#"Heat Exchanger - Gas"#, + desc = r#"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. +The '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. +As 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 = "StructureHeatExchangerLiquidtoLiquid", + props( + name = r#"Heat Exchanger - Liquid"#, + desc = r#"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. +The '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. +As 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. +"#, + value = "-613784254" + ) + )] + StructureHeatExchangerLiquidtoLiquid = -613784254i32, + #[strum( + serialize = "StructureHeatExchangeLiquidtoGas", + props( + name = r#"Heat Exchanger - Liquid + Gas"#, + desc = r#"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. +The '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. +As 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 = "StructureCableCornerH3", + props( + name = r#"Heavy Cable (3-Way Corner)"#, + desc = r#""#, + value = "-1843379322" + ) + )] + StructureCableCornerH3 = -1843379322i32, + #[strum( + serialize = "StructureCableJunctionH", + props( + name = r#"Heavy Cable (3-Way Junction)"#, + desc = r#""#, + value = "469451637" + ) + )] + StructureCableJunctionH = 469451637i32, + #[strum( + serialize = "StructureCableCornerH4", + props( + name = r#"Heavy Cable (4-Way Corner)"#, + desc = r#""#, + value = "205837861" + ) + )] + StructureCableCornerH4 = 205837861i32, + #[strum( + serialize = "StructureCableJunctionH4", + props( + name = r#"Heavy Cable (4-Way Junction)"#, + desc = r#""#, + value = "-742234680" + ) + )] + StructureCableJunctionH4 = -742234680i32, + #[strum( + serialize = "StructureCableJunctionH5", + props( + name = r#"Heavy Cable (5-Way Junction)"#, + desc = r#""#, + value = "-1530571426" + ) + )] + StructureCableJunctionH5 = -1530571426i32, + #[strum( + serialize = "StructureCableJunctionH6", + props( + name = r#"Heavy Cable (6-Way Junction)"#, + desc = r#""#, + value = "1036780772" + ) + )] + StructureCableJunctionH6 = 1036780772i32, + #[strum( + serialize = "StructureCableCornerH", + props(name = r#"Heavy Cable (Corner)"#, desc = r#""#, value = "-39359015") + )] + StructureCableCornerH = -39359015i32, + #[strum( + serialize = "StructureCableStraightH", + props(name = r#"Heavy Cable (Straight)"#, desc = r#""#, value = "-146200530") + )] + StructureCableStraightH = -146200530i32, + #[strum( + serialize = "ItemGasFilterCarbonDioxideL", + props( + name = r#"Heavy Filter (Carbon Dioxide)"#, + desc = r#""#, + value = "1876847024" + ) + )] + ItemGasFilterCarbonDioxideL = 1876847024i32, + #[strum( + serialize = "ItemGasFilterNitrogenL", + props( + name = r#"Heavy Filter (Nitrogen)"#, + desc = r#""#, + value = "-1387439451" + ) + )] + ItemGasFilterNitrogenL = -1387439451i32, + #[strum( + serialize = "ItemGasFilterNitrousOxideL", + props( + name = r#"Heavy Filter (Nitrous Oxide)"#, + desc = r#""#, + value = "465267979" + ) + )] + ItemGasFilterNitrousOxideL = 465267979i32, + #[strum( + serialize = "ItemGasFilterOxygenL", + props(name = r#"Heavy Filter (Oxygen)"#, desc = r#""#, value = "-1217998945") + )] + ItemGasFilterOxygenL = -1217998945i32, + #[strum( + serialize = "ItemGasFilterPollutantsL", + props( + name = r#"Heavy Filter (Pollutants)"#, + desc = r#""#, + value = "1959564765" + ) + )] + ItemGasFilterPollutantsL = 1959564765i32, + #[strum( + serialize = "ItemGasFilterVolatilesL", + props( + name = r#"Heavy Filter (Volatiles)"#, + desc = r#""#, + value = "1255156286" + ) + )] + ItemGasFilterVolatilesL = 1255156286i32, + #[strum( + serialize = "ItemGasFilterWaterL", + props(name = r#"Heavy Filter (Water)"#, desc = r#""#, value = "2004969680") + )] + ItemGasFilterWaterL = 2004969680i32, + #[strum( + serialize = "ItemHighVolumeGasCanisterEmpty", + props( + name = r#"High Volume Gas Canister"#, + desc = r#""#, + value = "998653377" + ) + )] + ItemHighVolumeGasCanisterEmpty = 998653377i32, + #[strum( + serialize = "ItemHorticultureBelt", + props(name = r#"Horticulture Belt"#, desc = r#""#, value = "-1117581553") + )] + ItemHorticultureBelt = -1117581553i32, + #[strum( + serialize = "HumanSkull", + props(name = r#"Human Skull"#, desc = r#""#, value = "-857713709") + )] + HumanSkull = -857713709i32, + #[strum( + serialize = "StructureHydraulicPipeBender", + props( + name = r#"Hydraulic Pipe Bender"#, + desc = r#"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 = "StructureHydroponicsTrayData", + props( + name = r#"Hydroponics Device"#, + desc = r#"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. +It 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 = "StructureHydroponicsStation", + props(name = r#"Hydroponics Station"#, desc = r#""#, value = "1441767298") + )] + StructureHydroponicsStation = 1441767298i32, + #[strum( + serialize = "StructureHydroponicsTray", + props( + name = r#"Hydroponics Tray"#, + desc = r#"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. +It can be automated using the Harvie."#, + value = "1464854517" + ) + )] + StructureHydroponicsTray = 1464854517i32, + #[strum( + serialize = "MotherboardProgrammableChip", + props( + name = r#"IC Editor Motherboard"#, + desc = r#"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."#, + value = "-161107071" + ) + )] + MotherboardProgrammableChip = -161107071i32, + #[strum( + serialize = "StructureCircuitHousing", + props(name = r#"IC Housing"#, desc = r#""#, value = "-128473777") + )] + StructureCircuitHousing = -128473777i32, + #[strum( + serialize = "ItemNitrice", + props( + name = r#"Ice (Nitrice)"#, + desc = r#"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. + +Highly 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 = "ItemOxite", + props( + name = r#"Ice (Oxite)"#, + desc = r#"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. + +Highly 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 = "ItemVolatiles", + props( + name = r#"Ice (Volatiles)"#, + desc = r#"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. + +Volatiles 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 + 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. +"#, + value = "1253102035" + ) + )] + ItemVolatiles = 1253102035i32, + #[strum( + serialize = "ItemIce", + props( + name = r#"Ice (Water)"#, + desc = r#"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 = "StructureIceCrusher", + props( + name = r#"Ice Crusher"#, + desc = r#"The Recurso KoolAuger converts various ices into their respective gases and liquids. +A 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. +If 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 = "StructureIgniter", + props( + name = r#"Igniter"#, + desc = r#"It gets the party started. Especially if that party is an explosive gas mixture."#, + value = "1005491513" + ) + )] + StructureIgniter = 1005491513i32, + #[strum( + serialize = "StructureEmergencyButton", + props( + name = r#"Important Button"#, + desc = r#"Description coming."#, + value = "1668452680" + ) + )] + StructureEmergencyButton = 1668452680i32, + #[strum( + serialize = "StructureInLineTankGas1x2", + props( + name = r#"In-Line Tank Gas"#, + desc = r#"A small expansion tank that increases the volume of a pipe network."#, + value = "35149429" + ) + )] + StructureInLineTankGas1X2 = 35149429i32, + #[strum( + serialize = "StructureInLineTankLiquid1x2", + props( + name = r#"In-Line Tank Liquid"#, + desc = r#"A small expansion tank that increases the volume of a pipe network."#, + value = "-1183969663" + ) + )] + StructureInLineTankLiquid1X2 = -1183969663i32, + #[strum( + serialize = "StructureInLineTankGas1x1", + props( + name = r#"In-Line Tank Small Gas"#, + desc = r#"A small expansion tank that increases the volume of a pipe network."#, + value = "-1693382705" + ) + )] + StructureInLineTankGas1X1 = -1693382705i32, + #[strum( + serialize = "StructureInLineTankLiquid1x1", + props( + name = r#"In-Line Tank Small Liquid"#, + desc = r#"A small expansion tank that increases the volume of a pipe network."#, + value = "543645499" + ) + )] + StructureInLineTankLiquid1X1 = 543645499i32, + #[strum( + serialize = "ItemAstroloyIngot", + props( + name = r#"Ingot (Astroloy)"#, + desc = r#"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 = "ItemConstantanIngot", + props(name = r#"Ingot (Constantan)"#, desc = r#""#, value = "1058547521") + )] + ItemConstantanIngot = 1058547521i32, + #[strum( + serialize = "ItemCopperIngot", + props( + name = r#"Ingot (Copper)"#, + desc = r#"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 = "ItemElectrumIngot", + props(name = r#"Ingot (Electrum)"#, desc = r#""#, value = "502280180") + )] + ItemElectrumIngot = 502280180i32, + #[strum( + serialize = "ItemGoldIngot", + props( + name = r#"Ingot (Gold)"#, + desc = r#"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 = "ItemHastelloyIngot", + props(name = r#"Ingot (Hastelloy)"#, desc = r#""#, value = "1579842814") + )] + ItemHastelloyIngot = 1579842814i32, + #[strum( + serialize = "ItemInconelIngot", + props(name = r#"Ingot (Inconel)"#, desc = r#""#, value = "-787796599") + )] + ItemInconelIngot = -787796599i32, + #[strum( + serialize = "ItemInvarIngot", + props(name = r#"Ingot (Invar)"#, desc = r#""#, value = "-297990285") + )] + ItemInvarIngot = -297990285i32, + #[strum( + serialize = "ItemIronIngot", + props( + name = r#"Ingot (Iron)"#, + desc = r#"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 = "ItemLeadIngot", + props(name = r#"Ingot (Lead)"#, desc = r#""#, value = "2134647745") + )] + ItemLeadIngot = 2134647745i32, + #[strum( + serialize = "ItemNickelIngot", + props(name = r#"Ingot (Nickel)"#, desc = r#""#, value = "-1406385572") + )] + ItemNickelIngot = -1406385572i32, + #[strum( + serialize = "ItemSiliconIngot", + props(name = r#"Ingot (Silicon)"#, desc = r#""#, value = "-290196476") + )] + ItemSiliconIngot = -290196476i32, + #[strum( + serialize = "ItemSilverIngot", + props(name = r#"Ingot (Silver)"#, desc = r#""#, value = "-929742000") + )] + ItemSilverIngot = -929742000i32, + #[strum( + serialize = "ItemSolderIngot", + props(name = r#"Ingot (Solder)"#, desc = r#""#, value = "-82508479") + )] + ItemSolderIngot = -82508479i32, + #[strum( + serialize = "ItemSteelIngot", + props( + name = r#"Ingot (Steel)"#, + desc = r#"Steel ingots are a metal alloy, crafted in a Furnace by smelting Ore (Iron) and Ore (Coal) at a ratio of 3:1. +It 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 = "ItemStelliteIngot", + props(name = r#"Ingot (Stellite)"#, desc = r#""#, value = "-1897868623") + )] + ItemStelliteIngot = -1897868623i32, + #[strum( + serialize = "ItemWaspaloyIngot", + props(name = r#"Ingot (Waspaloy)"#, desc = r#""#, value = "156348098") + )] + ItemWaspaloyIngot = 156348098i32, + #[strum( + serialize = "StructureInsulatedInLineTankGas1x2", + props( + name = r#"Insulated In-Line Tank Gas"#, + desc = r#""#, + value = "-177610944" + ) + )] + StructureInsulatedInLineTankGas1X2 = -177610944i32, + #[strum( + serialize = "StructureInsulatedInLineTankLiquid1x2", + props( + name = r#"Insulated In-Line Tank Liquid"#, + desc = r#""#, + value = "1452100517" + ) + )] + StructureInsulatedInLineTankLiquid1X2 = 1452100517i32, + #[strum( + serialize = "StructureInsulatedInLineTankGas1x1", + props( + name = r#"Insulated In-Line Tank Small Gas"#, + desc = r#""#, + value = "1818267386" + ) + )] + StructureInsulatedInLineTankGas1X1 = 1818267386i32, + #[strum( + serialize = "StructureInsulatedInLineTankLiquid1x1", + props( + name = r#"Insulated In-Line Tank Small Liquid"#, + desc = r#""#, + value = "-813426145" + ) + )] + StructureInsulatedInLineTankLiquid1X1 = -813426145i32, + #[strum( + serialize = "StructureInsulatedPipeLiquidCrossJunction", + props( + name = r#"Insulated Liquid Pipe (3-Way Junction)"#, + desc = r#"Liquid piping with very low temperature loss or gain."#, + value = "1926651727" + ) + )] + StructureInsulatedPipeLiquidCrossJunction = 1926651727i32, + #[strum( + serialize = "StructureInsulatedPipeLiquidCrossJunction4", + props( + name = r#"Insulated Liquid Pipe (4-Way Junction)"#, + desc = r#"Liquid piping with very low temperature loss or gain."#, + value = "363303270" + ) + )] + StructureInsulatedPipeLiquidCrossJunction4 = 363303270i32, + #[strum( + serialize = "StructureInsulatedPipeLiquidCrossJunction5", + props( + name = r#"Insulated Liquid Pipe (5-Way Junction)"#, + desc = r#"Liquid piping with very low temperature loss or gain."#, + value = "1654694384" + ) + )] + StructureInsulatedPipeLiquidCrossJunction5 = 1654694384i32, + #[strum( + serialize = "StructureInsulatedPipeLiquidCrossJunction6", + props( + name = r#"Insulated Liquid Pipe (6-Way Junction)"#, + desc = r#"Liquid piping with very low temperature loss or gain."#, + value = "-72748982" + ) + )] + StructureInsulatedPipeLiquidCrossJunction6 = -72748982i32, + #[strum( + serialize = "StructureInsulatedPipeLiquidCorner", + props( + name = r#"Insulated Liquid Pipe (Corner)"#, + desc = r#"Liquid piping with very low temperature loss or gain."#, + value = "1713710802" + ) + )] + StructureInsulatedPipeLiquidCorner = 1713710802i32, + #[strum( + serialize = "StructurePipeInsulatedLiquidCrossJunction", + props( + name = r#"Insulated Liquid Pipe (Cross Junction)"#, + desc = r#"Liquid piping with very low temperature loss or gain."#, + value = "-2068497073" + ) + )] + StructurePipeInsulatedLiquidCrossJunction = -2068497073i32, + #[strum( + serialize = "StructureInsulatedPipeLiquidStraight", + props( + name = r#"Insulated Liquid Pipe (Straight)"#, + desc = r#"Liquid piping with very low temperature loss or gain."#, + value = "295678685" + ) + )] + StructureInsulatedPipeLiquidStraight = 295678685i32, + #[strum( + serialize = "StructureInsulatedPipeLiquidTJunction", + props( + name = r#"Insulated Liquid Pipe (T Junction)"#, + desc = r#"Liquid piping with very low temperature loss or gain."#, + value = "-532384855" + ) + )] + StructureInsulatedPipeLiquidTJunction = -532384855i32, + #[strum( + serialize = "StructureLiquidTankBigInsulated", + props( + name = r#"Insulated Liquid Tank Big"#, + desc = r#""#, + value = "-1430440215" + ) + )] + StructureLiquidTankBigInsulated = -1430440215i32, + #[strum( + serialize = "StructureLiquidTankSmallInsulated", + props( + name = r#"Insulated Liquid Tank Small"#, + desc = r#""#, + value = "608607718" + ) + )] + StructureLiquidTankSmallInsulated = 608607718i32, + #[strum( + serialize = "StructurePassiveVentInsulated", + props(name = r#"Insulated Passive Vent"#, desc = r#""#, value = "1363077139") + )] + StructurePassiveVentInsulated = 1363077139i32, + #[strum( + serialize = "StructureInsulatedPipeCrossJunction3", + props( + name = r#"Insulated Pipe (3-Way Junction)"#, + desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, + value = "1328210035" + ) + )] + StructureInsulatedPipeCrossJunction3 = 1328210035i32, + #[strum( + serialize = "StructureInsulatedPipeCrossJunction4", + props( + name = r#"Insulated Pipe (4-Way Junction)"#, + desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, + value = "-783387184" + ) + )] + StructureInsulatedPipeCrossJunction4 = -783387184i32, + #[strum( + serialize = "StructureInsulatedPipeCrossJunction5", + props( + name = r#"Insulated Pipe (5-Way Junction)"#, + desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, + value = "-1505147578" + ) + )] + StructureInsulatedPipeCrossJunction5 = -1505147578i32, + #[strum( + serialize = "StructureInsulatedPipeCrossJunction6", + props( + name = r#"Insulated Pipe (6-Way Junction)"#, + desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, + value = "1061164284" + ) + )] + StructureInsulatedPipeCrossJunction6 = 1061164284i32, + #[strum( + serialize = "StructureInsulatedPipeCorner", + props( + name = r#"Insulated Pipe (Corner)"#, + desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, + value = "-1967711059" + ) + )] + StructureInsulatedPipeCorner = -1967711059i32, + #[strum( + serialize = "StructureInsulatedPipeCrossJunction", + props( + name = r#"Insulated Pipe (Cross Junction)"#, + desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, + value = "-92778058" + ) + )] + StructureInsulatedPipeCrossJunction = -92778058i32, + #[strum( + serialize = "StructureInsulatedPipeStraight", + props( + name = r#"Insulated Pipe (Straight)"#, + desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, + value = "2134172356" + ) + )] + StructureInsulatedPipeStraight = 2134172356i32, + #[strum( + serialize = "StructureInsulatedPipeTJunction", + props( + name = r#"Insulated Pipe (T Junction)"#, + desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, + value = "-2076086215" + ) + )] + StructureInsulatedPipeTJunction = -2076086215i32, + #[strum( + serialize = "StructureInsulatedTankConnector", + props( + name = r#"Insulated Tank Connector"#, + desc = r#""#, + value = "-31273349" + ) + )] + StructureInsulatedTankConnector = -31273349i32, + #[strum( + serialize = "StructureInsulatedTankConnectorLiquid", + props( + name = r#"Insulated Tank Connector Liquid"#, + desc = r#""#, + value = "-1602030414" + ) + )] + StructureInsulatedTankConnectorLiquid = -1602030414i32, + #[strum( + serialize = "ItemInsulation", + props( + name = r#"Insulation"#, + desc = r#"Mysterious in the extreme, the function of this item is lost to the ages."#, + value = "897176943" + ) + )] + ItemInsulation = 897176943i32, + #[strum( + serialize = "ItemIntegratedCircuit10", + props( + name = r#"Integrated Circuit (IC10)"#, + desc = r#""#, + value = "-744098481" + ) + )] + ItemIntegratedCircuit10 = -744098481i32, + #[strum( + serialize = "StructureInteriorDoorGlass", + props( + name = r#"Interior Door Glass"#, + desc = r#"0.Operate +1.Logic"#, + value = "-2096421875" + ) + )] + StructureInteriorDoorGlass = -2096421875i32, + #[strum( + serialize = "StructureInteriorDoorPadded", + props( + name = r#"Interior Door Padded"#, + desc = r#"0.Operate +1.Logic"#, + value = "847461335" + ) + )] + StructureInteriorDoorPadded = 847461335i32, + #[strum( + serialize = "StructureInteriorDoorPaddedThin", + props( + name = r#"Interior Door Padded Thin"#, + desc = r#"0.Operate +1.Logic"#, + value = "1981698201" + ) + )] + StructureInteriorDoorPaddedThin = 1981698201i32, + #[strum( + serialize = "StructureInteriorDoorTriangle", + props( + name = r#"Interior Door Triangle"#, + desc = r#"0.Operate +1.Logic"#, + value = "-1182923101" + ) + )] + StructureInteriorDoorTriangle = -1182923101i32, + #[strum( + serialize = "StructureFrameIron", + props(name = r#"Iron Frame"#, desc = r#""#, value = "-1240951678") + )] + StructureFrameIron = -1240951678i32, + #[strum( + serialize = "ItemIronFrames", + props(name = r#"Iron Frames"#, desc = r#""#, value = "1225836666") + )] + ItemIronFrames = 1225836666i32, + #[strum( + serialize = "ItemIronSheets", + props(name = r#"Iron Sheets"#, desc = r#""#, value = "-487378546") + )] + ItemIronSheets = -487378546i32, + #[strum( + serialize = "StructureWallIron", + props(name = r#"Iron Wall (Type 1)"#, desc = r#""#, value = "1287324802") + )] + StructureWallIron = 1287324802i32, + #[strum( + serialize = "StructureWallIron02", + props(name = r#"Iron Wall (Type 2)"#, desc = r#""#, value = "1485834215") + )] + StructureWallIron02 = 1485834215i32, + #[strum( + serialize = "StructureWallIron03", + props(name = r#"Iron Wall (Type 3)"#, desc = r#""#, value = "798439281") + )] + StructureWallIron03 = 798439281i32, + #[strum( + serialize = "StructureWallIron04", + props(name = r#"Iron Wall (Type 4)"#, desc = r#""#, value = "-1309433134") + )] + StructureWallIron04 = -1309433134i32, + #[strum( + serialize = "StructureCompositeWindowIron", + props(name = r#"Iron Window"#, desc = r#""#, value = "-688284639") + )] + StructureCompositeWindowIron = -688284639i32, + #[strum( + serialize = "ItemJetpackBasic", + props( + name = r#"Jetpack Basic"#, + desc = r#"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. +Indispensable 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. +USE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move."#, + value = "1969189000" + ) + )] + ItemJetpackBasic = 1969189000i32, + #[strum( + serialize = "UniformOrangeJumpSuit", + props(name = r#"Jump Suit (Orange)"#, desc = r#""#, value = "810053150") + )] + UniformOrangeJumpSuit = 810053150i32, + #[strum( + serialize = "ItemKitAIMeE", + props(name = r#"Kit (AIMeE)"#, desc = r#""#, value = "496830914") + )] + ItemKitAiMeE = 496830914i32, + #[strum( + serialize = "ItemKitAccessBridge", + props(name = r#"Kit (Access Bridge)"#, desc = r#""#, value = "513258369") + )] + ItemKitAccessBridge = 513258369i32, + #[strum( + serialize = "ItemActiveVent", + props( + name = r#"Kit (Active Vent)"#, + desc = r#"When constructed, this kit places an Active Vent on any support structure."#, + value = "-842048328" + ) + )] + ItemActiveVent = -842048328i32, + #[strum( + serialize = "ItemKitAdvancedComposter", + props( + name = r#"Kit (Advanced Composter)"#, + desc = r#""#, + value = "-1431998347" + ) + )] + ItemKitAdvancedComposter = -1431998347i32, + #[strum( + serialize = "ItemKitAdvancedFurnace", + props(name = r#"Kit (Advanced Furnace)"#, desc = r#""#, value = "-616758353") + )] + ItemKitAdvancedFurnace = -616758353i32, + #[strum( + serialize = "ItemKitAdvancedPackagingMachine", + props( + name = r#"Kit (Advanced Packaging Machine)"#, + desc = r#""#, + value = "-598545233" + ) + )] + ItemKitAdvancedPackagingMachine = -598545233i32, + #[strum( + serialize = "ItemKitAirlock", + props(name = r#"Kit (Airlock)"#, desc = r#""#, value = "964043875") + )] + ItemKitAirlock = 964043875i32, + #[strum( + serialize = "ItemKitArcFurnace", + props(name = r#"Kit (Arc Furnace)"#, desc = r#""#, value = "-98995857") + )] + ItemKitArcFurnace = -98995857i32, + #[strum( + serialize = "ItemKitWallArch", + props(name = r#"Kit (Arched Wall)"#, desc = r#""#, value = "1625214531") + )] + ItemKitWallArch = 1625214531i32, + #[strum( + serialize = "ItemKitAtmospherics", + props(name = r#"Kit (Atmospherics)"#, desc = r#""#, value = "1222286371") + )] + ItemKitAtmospherics = 1222286371i32, + #[strum( + serialize = "ItemKitAutolathe", + props(name = r#"Kit (Autolathe)"#, desc = r#""#, value = "-1753893214") + )] + ItemKitAutolathe = -1753893214i32, + #[strum( + serialize = "ItemKitHydroponicAutomated", + props( + name = r#"Kit (Automated Hydroponics)"#, + desc = r#""#, + value = "-927931558" + ) + )] + ItemKitHydroponicAutomated = -927931558i32, + #[strum( + serialize = "ItemKitAutomatedOven", + props(name = r#"Kit (Automated Oven)"#, desc = r#""#, value = "-1931958659") + )] + ItemKitAutomatedOven = -1931958659i32, + #[strum( + serialize = "ItemKitAutoMinerSmall", + props(name = r#"Kit (Autominer Small)"#, desc = r#""#, value = "1668815415") + )] + ItemKitAutoMinerSmall = 1668815415i32, + #[strum( + serialize = "ItemKitRocketAvionics", + props(name = r#"Kit (Avionics)"#, desc = r#""#, value = "1396305045") + )] + ItemKitRocketAvionics = 1396305045i32, + #[strum( + serialize = "ItemKitChute", + props(name = r#"Kit (Basic Chutes)"#, desc = r#""#, value = "1025254665") + )] + ItemKitChute = 1025254665i32, + #[strum( + serialize = "ItemKitBasket", + props(name = r#"Kit (Basket)"#, desc = r#""#, value = "148305004") + )] + ItemKitBasket = 148305004i32, + #[strum( + serialize = "ItemBatteryCharger", + props( + name = r#"Kit (Battery Charger)"#, + desc = r#"This kit produces a 5-slot Kit (Battery Charger)."#, + value = "-1866880307" + ) + )] + ItemBatteryCharger = -1866880307i32, + #[strum( + serialize = "ItemKitBatteryLarge", + props(name = r#"Kit (Battery Large)"#, desc = r#""#, value = "-21225041") + )] + ItemKitBatteryLarge = -21225041i32, + #[strum( + serialize = "ItemKitBattery", + props(name = r#"Kit (Battery)"#, desc = r#""#, value = "1406656973") + )] + ItemKitBattery = 1406656973i32, + #[strum( + serialize = "ItemKitBeacon", + props(name = r#"Kit (Beacon)"#, desc = r#""#, value = "249073136") + )] + ItemKitBeacon = 249073136i32, + #[strum( + serialize = "ItemKitBeds", + props(name = r#"Kit (Beds)"#, desc = r#""#, value = "-1241256797") + )] + ItemKitBeds = -1241256797i32, + #[strum( + serialize = "ItemKitBlastDoor", + props(name = r#"Kit (Blast Door)"#, desc = r#""#, value = "-1755116240") + )] + ItemKitBlastDoor = -1755116240i32, + #[strum( + serialize = "ItemCableAnalyser", + props(name = r#"Kit (Cable Analyzer)"#, desc = r#""#, value = "-1792787349") + )] + ItemCableAnalyser = -1792787349i32, + #[strum( + serialize = "ItemCableFuse", + props(name = r#"Kit (Cable Fuses)"#, desc = r#""#, value = "195442047") + )] + ItemCableFuse = 195442047i32, + #[strum( + serialize = "ItemGasTankStorage", + props( + name = r#"Kit (Canister Storage)"#, + desc = r#"This kit produces a Kit (Canister Storage) for refilling a Canister."#, + value = "-2113012215" + ) + )] + ItemGasTankStorage = -2113012215i32, + #[strum( + serialize = "ItemKitCentrifuge", + props(name = r#"Kit (Centrifuge)"#, desc = r#""#, value = "578182956") + )] + ItemKitCentrifuge = 578182956i32, + #[strum( + serialize = "ItemKitChairs", + props(name = r#"Kit (Chairs)"#, desc = r#""#, value = "-1394008073") + )] + ItemKitChairs = -1394008073i32, + #[strum( + serialize = "ItemKitChuteUmbilical", + props(name = r#"Kit (Chute Umbilical)"#, desc = r#""#, value = "-876560854") + )] + ItemKitChuteUmbilical = -876560854i32, + #[strum( + serialize = "ItemKitCompositeCladding", + props(name = r#"Kit (Cladding)"#, desc = r#""#, value = "-1470820996") + )] + ItemKitCompositeCladding = -1470820996i32, + #[strum( + serialize = "KitStructureCombustionCentrifuge", + props( + name = r#"Kit (Combustion Centrifuge)"#, + desc = r#""#, + value = "231903234" + ) + )] + KitStructureCombustionCentrifuge = 231903234i32, + #[strum( + serialize = "ItemKitComputer", + props(name = r#"Kit (Computer)"#, desc = r#""#, value = "1990225489") + )] + ItemKitComputer = 1990225489i32, + #[strum( + serialize = "ItemKitConsole", + props(name = r#"Kit (Consoles)"#, desc = r#""#, value = "-1241851179") + )] + ItemKitConsole = -1241851179i32, + #[strum( + serialize = "ItemKitCrateMount", + props(name = r#"Kit (Container Mount)"#, desc = r#""#, value = "-551612946") + )] + ItemKitCrateMount = -551612946i32, + #[strum( + serialize = "ItemKitPassthroughHeatExchanger", + props( + name = r#"Kit (CounterFlow Heat Exchanger)"#, + desc = r#""#, + value = "636112787" + ) + )] + ItemKitPassthroughHeatExchanger = 636112787i32, + #[strum( + serialize = "ItemKitCrateMkII", + props(name = r#"Kit (Crate Mk II)"#, desc = r#""#, value = "-1585956426") + )] + ItemKitCrateMkIi = -1585956426i32, + #[strum( + serialize = "ItemKitCrate", + props(name = r#"Kit (Crate)"#, desc = r#""#, value = "429365598") + )] + ItemKitCrate = 429365598i32, + #[strum( + serialize = "ItemRTG", + props( + name = r#"Kit (Creative RTG)"#, + desc = r#"This kit creates that miracle of modern science, a Kit (Creative RTG)."#, + value = "495305053" + ) + )] + ItemRtg = 495305053i32, + #[strum( + serialize = "ItemKitCryoTube", + props(name = r#"Kit (Cryo Tube)"#, desc = r#""#, value = "-545234195") + )] + ItemKitCryoTube = -545234195i32, + #[strum( + serialize = "ItemKitDeepMiner", + props(name = r#"Kit (Deep Miner)"#, desc = r#""#, value = "-1935075707") + )] + ItemKitDeepMiner = -1935075707i32, + #[strum( + serialize = "ItemPipeDigitalValve", + props( + name = r#"Kit (Digital Valve)"#, + desc = r#"This kit creates a Digital Valve."#, + value = "-1532448832" + ) + )] + ItemPipeDigitalValve = -1532448832i32, + #[strum( + serialize = "ItemKitDockingPort", + props(name = r#"Kit (Docking Port)"#, desc = r#""#, value = "77421200") + )] + ItemKitDockingPort = 77421200i32, + #[strum( + serialize = "ItemKitDoor", + props(name = r#"Kit (Door)"#, desc = r#""#, value = "168615924") + )] + ItemKitDoor = 168615924i32, + #[strum( + serialize = "ItemKitDrinkingFountain", + props( + name = r#"Kit (Drinking Fountain)"#, + desc = r#""#, + value = "-1743663875" + ) + )] + ItemKitDrinkingFountain = -1743663875i32, + #[strum( + serialize = "ItemKitElectronicsPrinter", + props( + name = r#"Kit (Electronics Printer)"#, + desc = r#""#, + value = "-1181922382" + ) + )] + ItemKitElectronicsPrinter = -1181922382i32, + #[strum( + serialize = "ItemKitElevator", + props(name = r#"Kit (Elevator)"#, desc = r#""#, value = "-945806652") + )] + ItemKitElevator = -945806652i32, + #[strum( + serialize = "ItemKitEngineLarge", + props(name = r#"Kit (Engine Large)"#, desc = r#""#, value = "755302726") + )] + ItemKitEngineLarge = 755302726i32, + #[strum( + serialize = "ItemKitEngineMedium", + props(name = r#"Kit (Engine Medium)"#, desc = r#""#, value = "1969312177") + )] + ItemKitEngineMedium = 1969312177i32, + #[strum( + serialize = "ItemKitEngineSmall", + props(name = r#"Kit (Engine Small)"#, desc = r#""#, value = "19645163") + )] + ItemKitEngineSmall = 19645163i32, + #[strum( + serialize = "ItemFlashingLight", + props(name = r#"Kit (Flashing Light)"#, desc = r#""#, value = "-2107840748") + )] + ItemFlashingLight = -2107840748i32, + #[strum( + serialize = "ItemKitWallFlat", + props(name = r#"Kit (Flat Wall)"#, desc = r#""#, value = "-846838195") + )] + ItemKitWallFlat = -846838195i32, + #[strum( + serialize = "ItemKitCompositeFloorGrating", + props(name = r#"Kit (Floor Grating)"#, desc = r#""#, value = "1182412869") + )] + ItemKitCompositeFloorGrating = 1182412869i32, + #[strum( + serialize = "ItemKitFridgeBig", + props(name = r#"Kit (Fridge Large)"#, desc = r#""#, value = "-1168199498") + )] + ItemKitFridgeBig = -1168199498i32, + #[strum( + serialize = "ItemKitFridgeSmall", + props(name = r#"Kit (Fridge Small)"#, desc = r#""#, value = "1661226524") + )] + ItemKitFridgeSmall = 1661226524i32, + #[strum( + serialize = "ItemKitFurnace", + props(name = r#"Kit (Furnace)"#, desc = r#""#, value = "-806743925") + )] + ItemKitFurnace = -806743925i32, + #[strum( + serialize = "ItemKitFurniture", + props(name = r#"Kit (Furniture)"#, desc = r#""#, value = "1162905029") + )] + ItemKitFurniture = 1162905029i32, + #[strum( + serialize = "ItemKitFuselage", + props(name = r#"Kit (Fuselage)"#, desc = r#""#, value = "-366262681") + )] + ItemKitFuselage = -366262681i32, + #[strum( + serialize = "ItemKitGasGenerator", + props( + name = r#"Kit (Gas Fuel Generator)"#, + desc = r#""#, + value = "377745425" + ) + )] + ItemKitGasGenerator = 377745425i32, + #[strum( + serialize = "ItemPipeGasMixer", + props( + name = r#"Kit (Gas Mixer)"#, + desc = r#"This kit creates a Gas Mixer."#, + value = "-1134459463" + ) + )] + ItemPipeGasMixer = -1134459463i32, + #[strum( + serialize = "ItemGasSensor", + props(name = r#"Kit (Gas Sensor)"#, desc = r#""#, value = "1717593480") + )] + ItemGasSensor = 1717593480i32, + #[strum( + serialize = "ItemKitGasUmbilical", + props(name = r#"Kit (Gas Umbilical)"#, desc = r#""#, value = "-1867280568") + )] + ItemKitGasUmbilical = -1867280568i32, + #[strum( + serialize = "ItemKitWallGeometry", + props(name = r#"Kit (Geometric Wall)"#, desc = r#""#, value = "-784733231") + )] + ItemKitWallGeometry = -784733231i32, + #[strum( + serialize = "ItemKitGrowLight", + props(name = r#"Kit (Grow Light)"#, desc = r#""#, value = "341030083") + )] + ItemKitGrowLight = 341030083i32, + #[strum( + serialize = "ItemKitAirlockGate", + props(name = r#"Kit (Hangar Door)"#, desc = r#""#, value = "682546947") + )] + ItemKitAirlockGate = 682546947i32, + #[strum( + serialize = "ItemKitHarvie", + props(name = r#"Kit (Harvie)"#, desc = r#""#, value = "-1022693454") + )] + ItemKitHarvie = -1022693454i32, + #[strum( + serialize = "ItemKitHydraulicPipeBender", + props( + name = r#"Kit (Hydraulic Pipe Bender)"#, + desc = r#""#, + value = "-2098556089" + ) + )] + ItemKitHydraulicPipeBender = -2098556089i32, + #[strum( + serialize = "ItemKitHydroponicStation", + props( + name = r#"Kit (Hydroponic Station)"#, + desc = r#""#, + value = "2057179799" + ) + )] + ItemKitHydroponicStation = 2057179799i32, + #[strum( + serialize = "ItemHydroponicTray", + props( + name = r#"Kit (Hydroponic Tray)"#, + desc = r#"This kits creates a Hydroponics Tray for growing various plants."#, + value = "-1193543727" + ) + )] + ItemHydroponicTray = -1193543727i32, + #[strum( + serialize = "ItemKitLogicCircuit", + props(name = r#"Kit (IC Housing)"#, desc = r#""#, value = "1512322581") + )] + ItemKitLogicCircuit = 1512322581i32, + #[strum( + serialize = "ItemKitIceCrusher", + props(name = r#"Kit (Ice Crusher)"#, desc = r#""#, value = "288111533") + )] + ItemKitIceCrusher = 288111533i32, + #[strum( + serialize = "ItemIgniter", + props( + name = r#"Kit (Igniter)"#, + desc = r#"This kit creates an Kit (Igniter) unit."#, + value = "890106742" + ) + )] + ItemIgniter = 890106742i32, + #[strum( + serialize = "ItemKitInsulatedLiquidPipe", + props( + name = r#"Kit (Insulated Liquid Pipe)"#, + desc = r#""#, + value = "2067655311" + ) + )] + ItemKitInsulatedLiquidPipe = 2067655311i32, + #[strum( + serialize = "ItemKitLiquidTankInsulated", + props( + name = r#"Kit (Insulated Liquid Tank)"#, + desc = r#""#, + value = "617773453" + ) + )] + ItemKitLiquidTankInsulated = 617773453i32, + #[strum( + serialize = "ItemPassiveVentInsulated", + props( + name = r#"Kit (Insulated Passive Vent)"#, + desc = r#""#, + value = "-1397583760" + ) + )] + ItemPassiveVentInsulated = -1397583760i32, + #[strum( + serialize = "ItemKitInsulatedPipeUtility", + props( + name = r#"Kit (Insulated Pipe Utility Gas)"#, + desc = r#""#, + value = "-27284803" + ) + )] + ItemKitInsulatedPipeUtility = -27284803i32, + #[strum( + serialize = "ItemKitInsulatedPipeUtilityLiquid", + props( + name = r#"Kit (Insulated Pipe Utility Liquid)"#, + desc = r#""#, + value = "-1831558953" + ) + )] + ItemKitInsulatedPipeUtilityLiquid = -1831558953i32, + #[strum( + serialize = "ItemKitInsulatedPipe", + props(name = r#"Kit (Insulated Pipe)"#, desc = r#""#, value = "452636699") + )] + ItemKitInsulatedPipe = 452636699i32, + #[strum( + serialize = "ItemKitInteriorDoors", + props(name = r#"Kit (Interior Doors)"#, desc = r#""#, value = "1935945891") + )] + ItemKitInteriorDoors = 1935945891i32, + #[strum( + serialize = "ItemKitWallIron", + props(name = r#"Kit (Iron Wall)"#, desc = r#""#, value = "-524546923") + )] + ItemKitWallIron = -524546923i32, + #[strum( + serialize = "ItemKitLadder", + props(name = r#"Kit (Ladder)"#, desc = r#""#, value = "489494578") + )] + ItemKitLadder = 489494578i32, + #[strum( + serialize = "ItemKitLandingPadAtmos", + props( + name = r#"Kit (Landing Pad Atmospherics)"#, + desc = r#""#, + value = "1817007843" + ) + )] + ItemKitLandingPadAtmos = 1817007843i32, + #[strum( + serialize = "ItemKitLandingPadBasic", + props(name = r#"Kit (Landing Pad Basic)"#, desc = r#""#, value = "293581318") + )] + ItemKitLandingPadBasic = 293581318i32, + #[strum( + serialize = "ItemKitLandingPadWaypoint", + props( + name = r#"Kit (Landing Pad Runway)"#, + desc = r#""#, + value = "-1267511065" + ) + )] + ItemKitLandingPadWaypoint = -1267511065i32, + #[strum( + serialize = "ItemKitLargeDirectHeatExchanger", + props( + name = r#"Kit (Large Direct Heat Exchanger)"#, + desc = r#""#, + value = "450164077" + ) + )] + ItemKitLargeDirectHeatExchanger = 450164077i32, + #[strum( + serialize = "ItemKitLargeExtendableRadiator", + props( + name = r#"Kit (Large Extendable Radiator)"#, + desc = r#""#, + value = "847430620" + ) + )] + ItemKitLargeExtendableRadiator = 847430620i32, + #[strum( + serialize = "ItemKitLargeSatelliteDish", + props( + name = r#"Kit (Large Satellite Dish)"#, + desc = r#""#, + value = "-2039971217" + ) + )] + ItemKitLargeSatelliteDish = -2039971217i32, + #[strum( + serialize = "ItemKitLaunchMount", + props(name = r#"Kit (Launch Mount)"#, desc = r#""#, value = "-1854167549") + )] + ItemKitLaunchMount = -1854167549i32, + #[strum( + serialize = "ItemWallLight", + props( + name = r#"Kit (Lights)"#, + desc = r#"This kit creates any one of ten Kit (Lights) variants."#, + value = "1108423476" + ) + )] + ItemWallLight = 1108423476i32, + #[strum( + serialize = "ItemLiquidTankStorage", + props( + name = r#"Kit (Liquid Canister Storage)"#, + desc = r#"This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister."#, + value = "2037427578" + ) + )] + ItemLiquidTankStorage = 2037427578i32, + #[strum( + serialize = "ItemWaterPipeDigitalValve", + props( + name = r#"Kit (Liquid Digital Valve)"#, + desc = r#""#, + value = "309693520" + ) + )] + ItemWaterPipeDigitalValve = 309693520i32, + #[strum( + serialize = "ItemLiquidDrain", + props(name = r#"Kit (Liquid Drain)"#, desc = r#""#, value = "2036225202") + )] + ItemLiquidDrain = 2036225202i32, + #[strum( + serialize = "ItemLiquidPipeAnalyzer", + props( + name = r#"Kit (Liquid Pipe Analyzer)"#, + desc = r#""#, + value = "226055671" + ) + )] + ItemLiquidPipeAnalyzer = 226055671i32, + #[strum( + serialize = "ItemWaterPipeMeter", + props(name = r#"Kit (Liquid Pipe Meter)"#, desc = r#""#, value = "-90898877") + )] + ItemWaterPipeMeter = -90898877i32, + #[strum( + serialize = "ItemLiquidPipeValve", + props( + name = r#"Kit (Liquid Pipe Valve)"#, + desc = r#"This kit creates a Liquid Valve."#, + value = "-2126113312" + ) + )] + ItemLiquidPipeValve = -2126113312i32, + #[strum( + serialize = "ItemKitPipeLiquid", + props(name = r#"Kit (Liquid Pipe)"#, desc = r#""#, value = "-1166461357") + )] + ItemKitPipeLiquid = -1166461357i32, + #[strum( + serialize = "ItemPipeLiquidRadiator", + props( + name = r#"Kit (Liquid Radiator)"#, + desc = r#"This kit creates a Liquid Pipe Convection Radiator."#, + value = "-906521320" + ) + )] + ItemPipeLiquidRadiator = -906521320i32, + #[strum( + serialize = "ItemKitLiquidRegulator", + props(name = r#"Kit (Liquid Regulator)"#, desc = r#""#, value = "1951126161") + )] + ItemKitLiquidRegulator = 1951126161i32, + #[strum( + serialize = "ItemKitLiquidTank", + props(name = r#"Kit (Liquid Tank)"#, desc = r#""#, value = "-799849305") + )] + ItemKitLiquidTank = -799849305i32, + #[strum( + serialize = "ItemKitLiquidUmbilical", + props(name = r#"Kit (Liquid Umbilical)"#, desc = r#""#, value = "1571996765") + )] + ItemKitLiquidUmbilical = 1571996765i32, + #[strum( + serialize = "ItemLiquidPipeVolumePump", + props( + name = r#"Kit (Liquid Volume Pump)"#, + desc = r#""#, + value = "-2106280569" + ) + )] + ItemLiquidPipeVolumePump = -2106280569i32, + #[strum( + serialize = "ItemWaterWallCooler", + props( + name = r#"Kit (Liquid Wall Cooler)"#, + desc = r#""#, + value = "-1721846327" + ) + )] + ItemWaterWallCooler = -1721846327i32, + #[strum( + serialize = "ItemKitLocker", + props(name = r#"Kit (Locker)"#, desc = r#""#, value = "882301399") + )] + ItemKitLocker = 882301399i32, + #[strum( + serialize = "ItemKitLogicInputOutput", + props(name = r#"Kit (Logic I/O)"#, desc = r#""#, value = "1997293610") + )] + ItemKitLogicInputOutput = 1997293610i32, + #[strum( + serialize = "ItemKitLogicMemory", + props(name = r#"Kit (Logic Memory)"#, desc = r#""#, value = "-2098214189") + )] + ItemKitLogicMemory = -2098214189i32, + #[strum( + serialize = "ItemKitLogicProcessor", + props(name = r#"Kit (Logic Processor)"#, desc = r#""#, value = "220644373") + )] + ItemKitLogicProcessor = 220644373i32, + #[strum( + serialize = "ItemKitLogicSwitch", + props(name = r#"Kit (Logic Switch)"#, desc = r#""#, value = "124499454") + )] + ItemKitLogicSwitch = 124499454i32, + #[strum( + serialize = "ItemKitLogicTransmitter", + props( + name = r#"Kit (Logic Transmitter)"#, + desc = r#""#, + value = "1005397063" + ) + )] + ItemKitLogicTransmitter = 1005397063i32, + #[strum( + serialize = "ItemKitPassiveLargeRadiatorLiquid", + props( + name = r#"Kit (Medium Radiator Liquid)"#, + desc = r#""#, + value = "1453961898" + ) + )] + ItemKitPassiveLargeRadiatorLiquid = 1453961898i32, + #[strum( + serialize = "ItemKitPassiveLargeRadiatorGas", + props(name = r#"Kit (Medium Radiator)"#, desc = r#""#, value = "-1752768283") + )] + ItemKitPassiveLargeRadiatorGas = -1752768283i32, + #[strum( + serialize = "ItemKitSatelliteDish", + props( + name = r#"Kit (Medium Satellite Dish)"#, + desc = r#""#, + value = "178422810" + ) + )] + ItemKitSatelliteDish = 178422810i32, + #[strum( + serialize = "ItemKitMotherShipCore", + props(name = r#"Kit (Mothership)"#, desc = r#""#, value = "-344968335") + )] + ItemKitMotherShipCore = -344968335i32, + #[strum( + serialize = "ItemKitMusicMachines", + props(name = r#"Kit (Music Machines)"#, desc = r#""#, value = "-2038889137") + )] + ItemKitMusicMachines = -2038889137i32, + #[strum( + serialize = "ItemKitFlagODA", + props(name = r#"Kit (ODA Flag)"#, desc = r#""#, value = "1701764190") + )] + ItemKitFlagOda = 1701764190i32, + #[strum( + serialize = "ItemKitHorizontalAutoMiner", + props(name = r#"Kit (OGRE)"#, desc = r#""#, value = "844391171") + )] + ItemKitHorizontalAutoMiner = 844391171i32, + #[strum( + serialize = "ItemKitWallPadded", + props(name = r#"Kit (Padded Wall)"#, desc = r#""#, value = "-821868990") + )] + ItemKitWallPadded = -821868990i32, + #[strum( + serialize = "ItemKitEvaporationChamber", + props( + name = r#"Kit (Phase Change Device)"#, + desc = r#""#, + value = "1587787610" + ) + )] + ItemKitEvaporationChamber = 1587787610i32, + #[strum( + serialize = "ItemPipeAnalyizer", + props( + name = r#"Kit (Pipe Analyzer)"#, + desc = r#"This kit creates a Pipe Analyzer."#, + value = "-767597887" + ) + )] + ItemPipeAnalyizer = -767597887i32, + #[strum( + serialize = "ItemPipeIgniter", + props(name = r#"Kit (Pipe Igniter)"#, desc = r#""#, value = "1366030599") + )] + ItemPipeIgniter = 1366030599i32, + #[strum( + serialize = "ItemPipeLabel", + props( + name = r#"Kit (Pipe Label)"#, + desc = r#"This kit creates a Pipe Label."#, + value = "391769637" + ) + )] + ItemPipeLabel = 391769637i32, + #[strum( + serialize = "ItemPipeMeter", + props( + name = r#"Kit (Pipe Meter)"#, + desc = r#"This kit creates a Pipe Meter."#, + value = "1207939683" + ) + )] + ItemPipeMeter = 1207939683i32, + #[strum( + serialize = "ItemKitPipeOrgan", + props(name = r#"Kit (Pipe Organ)"#, desc = r#""#, value = "-827125300") + )] + ItemKitPipeOrgan = -827125300i32, + #[strum( + serialize = "ItemKitPipeRadiatorLiquid", + props( + name = r#"Kit (Pipe Radiator Liquid)"#, + desc = r#""#, + value = "-1697302609" + ) + )] + ItemKitPipeRadiatorLiquid = -1697302609i32, + #[strum( + serialize = "ItemKitPipeRadiator", + props(name = r#"Kit (Pipe Radiator)"#, desc = r#""#, value = "920411066") + )] + ItemKitPipeRadiator = 920411066i32, + #[strum( + serialize = "ItemKitPipeUtility", + props(name = r#"Kit (Pipe Utility Gas)"#, desc = r#""#, value = "1934508338") + )] + ItemKitPipeUtility = 1934508338i32, + #[strum( + serialize = "ItemKitPipeUtilityLiquid", + props( + name = r#"Kit (Pipe Utility Liquid)"#, + desc = r#""#, + value = "595478589" + ) + )] + ItemKitPipeUtilityLiquid = 595478589i32, + #[strum( + serialize = "ItemPipeValve", + props( + name = r#"Kit (Pipe Valve)"#, + desc = r#"This kit creates a Valve."#, + value = "799323450" + ) + )] + ItemPipeValve = 799323450i32, + #[strum( + serialize = "ItemKitPipe", + props(name = r#"Kit (Pipe)"#, desc = r#""#, value = "-1619793705") + )] + ItemKitPipe = -1619793705i32, + #[strum( + serialize = "ItemKitPlanter", + props(name = r#"Kit (Planter)"#, desc = r#""#, value = "119096484") + )] + ItemKitPlanter = 119096484i32, + #[strum( + serialize = "ItemDynamicAirCon", + props( + name = r#"Kit (Portable Air Conditioner)"#, + desc = r#""#, + value = "1072914031" + ) + )] + ItemDynamicAirCon = 1072914031i32, + #[strum( + serialize = "ItemKitDynamicGasTankAdvanced", + props( + name = r#"Kit (Portable Gas Tank Mk II)"#, + desc = r#""#, + value = "1533501495" + ) + )] + ItemKitDynamicGasTankAdvanced = 1533501495i32, + #[strum( + serialize = "ItemKitDynamicCanister", + props( + name = r#"Kit (Portable Gas Tank)"#, + desc = r#""#, + value = "-1061945368" + ) + )] + ItemKitDynamicCanister = -1061945368i32, + #[strum( + serialize = "ItemKitDynamicGenerator", + props( + name = r#"Kit (Portable Generator)"#, + desc = r#""#, + value = "-732720413" + ) + )] + ItemKitDynamicGenerator = -732720413i32, + #[strum( + serialize = "ItemKitDynamicHydroponics", + props( + name = r#"Kit (Portable Hydroponics)"#, + desc = r#""#, + value = "-1861154222" + ) + )] + ItemKitDynamicHydroponics = -1861154222i32, + #[strum( + serialize = "ItemKitDynamicMKIILiquidCanister", + props( + name = r#"Kit (Portable Liquid Tank Mk II)"#, + desc = r#""#, + value = "-638019974" + ) + )] + ItemKitDynamicMkiiLiquidCanister = -638019974i32, + #[strum( + serialize = "ItemKitDynamicLiquidCanister", + props( + name = r#"Kit (Portable Liquid Tank)"#, + desc = r#""#, + value = "375541286" + ) + )] + ItemKitDynamicLiquidCanister = 375541286i32, + #[strum( + serialize = "ItemDynamicScrubber", + props( + name = r#"Kit (Portable Scrubber)"#, + desc = r#""#, + value = "-971920158" + ) + )] + ItemDynamicScrubber = -971920158i32, + #[strum( + serialize = "ItemKitPortablesConnector", + props( + name = r#"Kit (Portables Connector)"#, + desc = r#""#, + value = "1041148999" + ) + )] + ItemKitPortablesConnector = 1041148999i32, + #[strum( + serialize = "ItemPowerConnector", + props( + name = r#"Kit (Power Connector)"#, + desc = r#"This kit creates a Power Connector."#, + value = "839924019" + ) + )] + ItemPowerConnector = 839924019i32, + #[strum( + serialize = "ItemAreaPowerControl", + props( + name = r#"Kit (Power Controller)"#, + desc = r#"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 = "ItemKitPowerTransmitterOmni", + props( + name = r#"Kit (Power Transmitter Omni)"#, + desc = r#""#, + value = "-831211676" + ) + )] + ItemKitPowerTransmitterOmni = -831211676i32, + #[strum( + serialize = "ItemKitPowerTransmitter", + props(name = r#"Kit (Power Transmitter)"#, desc = r#""#, value = "291368213") + )] + ItemKitPowerTransmitter = 291368213i32, + #[strum( + serialize = "ItemKitElectricUmbilical", + props(name = r#"Kit (Power Umbilical)"#, desc = r#""#, value = "1603046970") + )] + ItemKitElectricUmbilical = 1603046970i32, + #[strum( + serialize = "ItemKitStandardChute", + props(name = r#"Kit (Powered Chutes)"#, desc = r#""#, value = "2133035682") + )] + ItemKitStandardChute = 2133035682i32, + #[strum( + serialize = "ItemKitPoweredVent", + props(name = r#"Kit (Powered Vent)"#, desc = r#""#, value = "2015439334") + )] + ItemKitPoweredVent = 2015439334i32, + #[strum( + serialize = "ItemKitPressureFedGasEngine", + props( + name = r#"Kit (Pressure Fed Gas Engine)"#, + desc = r#""#, + value = "-121514007" + ) + )] + ItemKitPressureFedGasEngine = -121514007i32, + #[strum( + serialize = "ItemKitPressureFedLiquidEngine", + props( + name = r#"Kit (Pressure Fed Liquid Engine)"#, + desc = r#""#, + value = "-99091572" + ) + )] + ItemKitPressureFedLiquidEngine = -99091572i32, + #[strum( + serialize = "ItemKitRegulator", + props( + name = r#"Kit (Pressure Regulator)"#, + desc = r#""#, + value = "1181371795" + ) + )] + ItemKitRegulator = 1181371795i32, + #[strum( + serialize = "ItemKitGovernedGasRocketEngine", + props( + name = r#"Kit (Pumped Gas Rocket Engine)"#, + desc = r#""#, + value = "206848766" + ) + )] + ItemKitGovernedGasRocketEngine = 206848766i32, + #[strum( + serialize = "ItemKitPumpedLiquidEngine", + props( + name = r#"Kit (Pumped Liquid Engine)"#, + desc = r#""#, + value = "1921918951" + ) + )] + ItemKitPumpedLiquidEngine = 1921918951i32, + #[strum( + serialize = "ItemRTGSurvival", + props( + name = r#"Kit (RTG)"#, + desc = r#"This kit creates a Kit (RTG)."#, + value = "1817645803" + ) + )] + ItemRtgSurvival = 1817645803i32, + #[strum( + serialize = "ItemPipeRadiator", + props( + name = r#"Kit (Radiator)"#, + desc = r#"This kit creates a Pipe Convection Radiator."#, + value = "-1796655088" + ) + )] + ItemPipeRadiator = -1796655088i32, + #[strum( + serialize = "ItemKitRailing", + props(name = r#"Kit (Railing)"#, desc = r#""#, value = "750176282") + )] + ItemKitRailing = 750176282i32, + #[strum( + serialize = "ItemKitRecycler", + props(name = r#"Kit (Recycler)"#, desc = r#""#, value = "849148192") + )] + ItemKitRecycler = 849148192i32, + #[strum( + serialize = "ItemKitReinforcedWindows", + props( + name = r#"Kit (Reinforced Windows)"#, + desc = r#""#, + value = "1459985302" + ) + )] + ItemKitReinforcedWindows = 1459985302i32, + #[strum( + serialize = "ItemKitRespawnPointWallMounted", + props(name = r#"Kit (Respawn)"#, desc = r#""#, value = "1574688481") + )] + ItemKitRespawnPointWallMounted = 1574688481i32, + #[strum( + serialize = "ItemKitRocketBattery", + props(name = r#"Kit (Rocket Battery)"#, desc = r#""#, value = "-314072139") + )] + ItemKitRocketBattery = -314072139i32, + #[strum( + serialize = "ItemKitRocketCargoStorage", + props( + name = r#"Kit (Rocket Cargo Storage)"#, + desc = r#""#, + value = "479850239" + ) + )] + ItemKitRocketCargoStorage = 479850239i32, + #[strum( + serialize = "ItemKitRocketCelestialTracker", + props( + name = r#"Kit (Rocket Celestial Tracker)"#, + desc = r#""#, + value = "-303008602" + ) + )] + ItemKitRocketCelestialTracker = -303008602i32, + #[strum( + serialize = "ItemKitRocketCircuitHousing", + props( + name = r#"Kit (Rocket Circuit Housing)"#, + desc = r#""#, + value = "721251202" + ) + )] + ItemKitRocketCircuitHousing = 721251202i32, + #[strum( + serialize = "ItemKitRocketDatalink", + props(name = r#"Kit (Rocket Datalink)"#, desc = r#""#, value = "-1256996603") + )] + ItemKitRocketDatalink = -1256996603i32, + #[strum( + serialize = "ItemKitRocketGasFuelTank", + props( + name = r#"Kit (Rocket Gas Fuel Tank)"#, + desc = r#""#, + value = "-1629347579" + ) + )] + ItemKitRocketGasFuelTank = -1629347579i32, + #[strum( + serialize = "ItemKitLaunchTower", + props( + name = r#"Kit (Rocket Launch Tower)"#, + desc = r#""#, + value = "-174523552" + ) + )] + ItemKitLaunchTower = -174523552i32, + #[strum( + serialize = "ItemKitRocketLiquidFuelTank", + props( + name = r#"Kit (Rocket Liquid Fuel Tank)"#, + desc = r#""#, + value = "2032027950" + ) + )] + ItemKitRocketLiquidFuelTank = 2032027950i32, + #[strum( + serialize = "ItemKitRocketManufactory", + props( + name = r#"Kit (Rocket Manufactory)"#, + desc = r#""#, + value = "-636127860" + ) + )] + ItemKitRocketManufactory = -636127860i32, + #[strum( + serialize = "ItemKitRocketMiner", + props(name = r#"Kit (Rocket Miner)"#, desc = r#""#, value = "-867969909") + )] + ItemKitRocketMiner = -867969909i32, + #[strum( + serialize = "ItemKitRocketScanner", + props(name = r#"Kit (Rocket Scanner)"#, desc = r#""#, value = "1753647154") + )] + ItemKitRocketScanner = 1753647154i32, + #[strum( + serialize = "ItemKitRoverFrame", + props(name = r#"Kit (Rover Frame)"#, desc = r#""#, value = "1827215803") + )] + ItemKitRoverFrame = 1827215803i32, + #[strum( + serialize = "ItemKitRoverMKI", + props(name = r#"Kit (Rover Mk I)"#, desc = r#""#, value = "197243872") + )] + ItemKitRoverMki = 197243872i32, + #[strum( + serialize = "ItemKitSDBHopper", + props(name = r#"Kit (SDB Hopper)"#, desc = r#""#, value = "323957548") + )] + ItemKitSdbHopper = 323957548i32, + #[strum( + serialize = "KitSDBSilo", + props( + name = r#"Kit (SDB Silo)"#, + desc = r#"This kit creates a SDB Silo."#, + value = "1932952652" + ) + )] + KitSdbSilo = 1932952652i32, + #[strum( + serialize = "ItemKitSecurityPrinter", + props(name = r#"Kit (Security Printer)"#, desc = r#""#, value = "578078533") + )] + ItemKitSecurityPrinter = 578078533i32, + #[strum( + serialize = "ItemKitSensor", + props(name = r#"Kit (Sensors)"#, desc = r#""#, value = "-1776897113") + )] + ItemKitSensor = -1776897113i32, + #[strum( + serialize = "ItemKitShower", + props(name = r#"Kit (Shower)"#, desc = r#""#, value = "735858725") + )] + ItemKitShower = 735858725i32, + #[strum( + serialize = "ItemKitSign", + props(name = r#"Kit (Sign)"#, desc = r#""#, value = "529996327") + )] + ItemKitSign = 529996327i32, + #[strum( + serialize = "ItemKitSleeper", + props(name = r#"Kit (Sleeper)"#, desc = r#""#, value = "326752036") + )] + ItemKitSleeper = 326752036i32, + #[strum( + serialize = "ItemKitSmallDirectHeatExchanger", + props( + name = r#"Kit (Small Direct Heat Exchanger)"#, + desc = r#""#, + value = "-1332682164" + ) + )] + ItemKitSmallDirectHeatExchanger = -1332682164i32, + #[strum( + serialize = "ItemFlagSmall", + props(name = r#"Kit (Small Flag)"#, desc = r#""#, value = "2011191088") + )] + ItemFlagSmall = 2011191088i32, + #[strum( + serialize = "ItemKitSmallSatelliteDish", + props( + name = r#"Kit (Small Satellite Dish)"#, + desc = r#""#, + value = "1960952220" + ) + )] + ItemKitSmallSatelliteDish = 1960952220i32, + #[strum( + serialize = "ItemKitSolarPanelBasicReinforced", + props( + name = r#"Kit (Solar Panel Basic Heavy)"#, + desc = r#""#, + value = "-528695432" + ) + )] + ItemKitSolarPanelBasicReinforced = -528695432i32, + #[strum( + serialize = "ItemKitSolarPanelBasic", + props(name = r#"Kit (Solar Panel Basic)"#, desc = r#""#, value = "844961456") + )] + ItemKitSolarPanelBasic = 844961456i32, + #[strum( + serialize = "ItemKitSolarPanelReinforced", + props( + name = r#"Kit (Solar Panel Heavy)"#, + desc = r#""#, + value = "-364868685" + ) + )] + ItemKitSolarPanelReinforced = -364868685i32, + #[strum( + serialize = "ItemKitSolarPanel", + props(name = r#"Kit (Solar Panel)"#, desc = r#""#, value = "-1924492105") + )] + ItemKitSolarPanel = -1924492105i32, + #[strum( + serialize = "ItemKitSolidGenerator", + props(name = r#"Kit (Solid Generator)"#, desc = r#""#, value = "1293995736") + )] + ItemKitSolidGenerator = 1293995736i32, + #[strum( + serialize = "ItemKitSorter", + props(name = r#"Kit (Sorter)"#, desc = r#""#, value = "969522478") + )] + ItemKitSorter = 969522478i32, + #[strum( + serialize = "ItemKitSpeaker", + props(name = r#"Kit (Speaker)"#, desc = r#""#, value = "-126038526") + )] + ItemKitSpeaker = -126038526i32, + #[strum( + serialize = "ItemKitStacker", + props(name = r#"Kit (Stacker)"#, desc = r#""#, value = "1013244511") + )] + ItemKitStacker = 1013244511i32, + #[strum( + serialize = "ItemKitStairs", + props(name = r#"Kit (Stairs)"#, desc = r#""#, value = "170878959") + )] + ItemKitStairs = 170878959i32, + #[strum( + serialize = "ItemKitStairwell", + props(name = r#"Kit (Stairwell)"#, desc = r#""#, value = "-1868555784") + )] + ItemKitStairwell = -1868555784i32, + #[strum( + serialize = "ItemKitStirlingEngine", + props(name = r#"Kit (Stirling Engine)"#, desc = r#""#, value = "-1821571150") + )] + ItemKitStirlingEngine = -1821571150i32, + #[strum( + serialize = "ItemKitSuitStorage", + props(name = r#"Kit (Suit Storage)"#, desc = r#""#, value = "1088892825") + )] + ItemKitSuitStorage = 1088892825i32, + #[strum( + serialize = "ItemKitTables", + props(name = r#"Kit (Tables)"#, desc = r#""#, value = "-1361598922") + )] + ItemKitTables = -1361598922i32, + #[strum( + serialize = "ItemKitTankInsulated", + props(name = r#"Kit (Tank Insulated)"#, desc = r#""#, value = "1021053608") + )] + ItemKitTankInsulated = 1021053608i32, + #[strum( + serialize = "ItemKitTank", + props(name = r#"Kit (Tank)"#, desc = r#""#, value = "771439840") + )] + ItemKitTank = 771439840i32, + #[strum( + serialize = "ItemKitGroundTelescope", + props(name = r#"Kit (Telescope)"#, desc = r#""#, value = "-2140672772") + )] + ItemKitGroundTelescope = -2140672772i32, + #[strum( + serialize = "ItemKitToolManufactory", + props(name = r#"Kit (Tool Manufactory)"#, desc = r#""#, value = "529137748") + )] + ItemKitToolManufactory = 529137748i32, + #[strum( + serialize = "ItemKitTransformer", + props( + name = r#"Kit (Transformer Large)"#, + desc = r#""#, + value = "-453039435" + ) + )] + ItemKitTransformer = -453039435i32, + #[strum( + serialize = "ItemKitRocketTransformerSmall", + props( + name = r#"Kit (Transformer Small (Rocket))"#, + desc = r#""#, + value = "-932335800" + ) + )] + ItemKitRocketTransformerSmall = -932335800i32, + #[strum( + serialize = "ItemKitTransformerSmall", + props(name = r#"Kit (Transformer Small)"#, desc = r#""#, value = "665194284") + )] + ItemKitTransformerSmall = 665194284i32, + #[strum( + serialize = "ItemKitPressurePlate", + props(name = r#"Kit (Trigger Plate)"#, desc = r#""#, value = "123504691") + )] + ItemKitPressurePlate = 123504691i32, + #[strum( + serialize = "ItemKitTurbineGenerator", + props( + name = r#"Kit (Turbine Generator)"#, + desc = r#""#, + value = "-1590715731" + ) + )] + ItemKitTurbineGenerator = -1590715731i32, + #[strum( + serialize = "ItemKitTurboVolumePump", + props( + name = r#"Kit (Turbo Volume Pump - Gas)"#, + desc = r#""#, + value = "-1248429712" + ) + )] + ItemKitTurboVolumePump = -1248429712i32, + #[strum( + serialize = "ItemKitLiquidTurboVolumePump", + props( + name = r#"Kit (Turbo Volume Pump - Liquid)"#, + desc = r#""#, + value = "-1805020897" + ) + )] + ItemKitLiquidTurboVolumePump = -1805020897i32, + #[strum( + serialize = "ItemKitUprightWindTurbine", + props( + name = r#"Kit (Upright Wind Turbine)"#, + desc = r#""#, + value = "-1798044015" + ) + )] + ItemKitUprightWindTurbine = -1798044015i32, + #[strum( + serialize = "ItemKitVendingMachineRefrigerated", + props( + name = r#"Kit (Vending Machine Refrigerated)"#, + desc = r#""#, + value = "-1867508561" + ) + )] + ItemKitVendingMachineRefrigerated = -1867508561i32, + #[strum( + serialize = "ItemKitVendingMachine", + props(name = r#"Kit (Vending Machine)"#, desc = r#""#, value = "-2038384332") + )] + ItemKitVendingMachine = -2038384332i32, + #[strum( + serialize = "ItemPipeVolumePump", + props( + name = r#"Kit (Volume Pump)"#, + desc = r#"This kit creates a Volume Pump."#, + value = "-1766301997" + ) + )] + ItemPipeVolumePump = -1766301997i32, + #[strum( + serialize = "ItemWallCooler", + props( + name = r#"Kit (Wall Cooler)"#, + desc = r#"This kit creates a Wall Cooler."#, + value = "-1567752627" + ) + )] + ItemWallCooler = -1567752627i32, + #[strum( + serialize = "ItemWallHeater", + props( + name = r#"Kit (Wall Heater)"#, + desc = r#"This kit creates a Kit (Wall Heater)."#, + value = "1880134612" + ) + )] + ItemWallHeater = 1880134612i32, + #[strum( + serialize = "ItemKitWall", + props(name = r#"Kit (Wall)"#, desc = r#""#, value = "-1826855889") + )] + ItemKitWall = -1826855889i32, + #[strum( + serialize = "ItemKitWaterBottleFiller", + props( + name = r#"Kit (Water Bottle Filler)"#, + desc = r#""#, + value = "159886536" + ) + )] + ItemKitWaterBottleFiller = 159886536i32, + #[strum( + serialize = "ItemKitWaterPurifier", + props(name = r#"Kit (Water Purifier)"#, desc = r#""#, value = "611181283") + )] + ItemKitWaterPurifier = 611181283i32, + #[strum( + serialize = "ItemKitWeatherStation", + props(name = r#"Kit (Weather Station)"#, desc = r#""#, value = "337505889") + )] + ItemKitWeatherStation = 337505889i32, + #[strum( + serialize = "ItemKitWindTurbine", + props(name = r#"Kit (Wind Turbine)"#, desc = r#""#, value = "-868916503") + )] + ItemKitWindTurbine = -868916503i32, + #[strum( + serialize = "ItemKitWindowShutter", + props(name = r#"Kit (Window Shutter)"#, desc = r#""#, value = "1779979754") + )] + ItemKitWindowShutter = 1779979754i32, + #[strum( + serialize = "ItemKitHeatExchanger", + props(name = r#"Kit Heat Exchanger"#, desc = r#""#, value = "-1710540039") + )] + ItemKitHeatExchanger = -1710540039i32, + #[strum( + serialize = "ItemKitPictureFrame", + props(name = r#"Kit Picture Frame"#, desc = r#""#, value = "-2062364768") + )] + ItemKitPictureFrame = -2062364768i32, + #[strum( + serialize = "ItemKitResearchMachine", + props(name = r#"Kit Research Machine"#, desc = r#""#, value = "724776762") + )] + ItemKitResearchMachine = 724776762i32, + #[strum( + serialize = "KitchenTableShort", + props(name = r#"Kitchen Table (Short)"#, desc = r#""#, value = "-1427415566") + )] + KitchenTableShort = -1427415566i32, + #[strum( + serialize = "KitchenTableSimpleShort", + props( + name = r#"Kitchen Table (Simple Short)"#, + desc = r#""#, + value = "-78099334" + ) + )] + KitchenTableSimpleShort = -78099334i32, + #[strum( + serialize = "KitchenTableSimpleTall", + props( + name = r#"Kitchen Table (Simple Tall)"#, + desc = r#""#, + value = "-1068629349" + ) + )] + KitchenTableSimpleTall = -1068629349i32, + #[strum( + serialize = "KitchenTableTall", + props(name = r#"Kitchen Table (Tall)"#, desc = r#""#, value = "-1386237782") + )] + KitchenTableTall = -1386237782i32, + #[strum( + serialize = "StructureKlaxon", + props( + name = r#"Klaxon Speaker"#, + desc = r#"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 = "StructureDiode", + props(name = r#"LED"#, desc = r#""#, value = "1944485013") + )] + StructureDiode = 1944485013i32, + #[strum( + serialize = "StructureConsoleLED1x3", + props( + name = r#"LED Display (Large)"#, + desc = r#"0.Default +1.Percent +2.Power"#, + value = "-1949054743" + ) + )] + StructureConsoleLed1X3 = -1949054743i32, + #[strum( + serialize = "StructureConsoleLED1x2", + props( + name = r#"LED Display (Medium)"#, + desc = r#"0.Default +1.Percent +2.Power"#, + value = "-53151617" + ) + )] + StructureConsoleLed1X2 = -53151617i32, + #[strum( + serialize = "StructureConsoleLED5", + props( + name = r#"LED Display (Small)"#, + desc = r#"0.Default +1.Percent +2.Power"#, + value = "-815193061" + ) + )] + StructureConsoleLed5 = -815193061i32, + #[strum( + serialize = "ItemLabeller", + props( + name = r#"Labeller"#, + desc = r#"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 = "StructureLadder", + props(name = r#"Ladder"#, desc = r#""#, value = "-415420281") + )] + StructureLadder = -415420281i32, + #[strum( + serialize = "StructureLadderEnd", + props(name = r#"Ladder End"#, desc = r#""#, value = "1541734993") + )] + StructureLadderEnd = 1541734993i32, + #[strum( + serialize = "StructurePlatformLadderOpen", + props(name = r#"Ladder Platform"#, desc = r#""#, value = "1559586682") + )] + StructurePlatformLadderOpen = 1559586682i32, + #[strum( + serialize = "Lander", + props(name = r#"Lander"#, desc = r#""#, value = "1605130615") + )] + Lander = 1605130615i32, + #[strum( + serialize = "Landingpad_BlankPiece", + props(name = r#"Landingpad"#, desc = r#""#, value = "912453390") + )] + LandingpadBlankPiece = 912453390i32, + #[strum( + serialize = "Landingpad_2x2CenterPiece01", + props( + name = r#"Landingpad 2x2 Center Piece"#, + desc = r#"Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors"#, + value = "-1295222317" + ) + )] + Landingpad2X2CenterPiece01 = -1295222317i32, + #[strum( + serialize = "Landingpad_CenterPiece01", + props( + name = r#"Landingpad Center"#, + desc = r#"The target point where the trader shuttle will land. Requires a clear view of the sky."#, + value = "1070143159" + ) + )] + LandingpadCenterPiece01 = 1070143159i32, + #[strum( + serialize = "Landingpad_CrossPiece", + props( + name = r#"Landingpad Cross"#, + desc = r#"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area."#, + value = "1101296153" + ) + )] + LandingpadCrossPiece = 1101296153i32, + #[strum( + serialize = "Landingpad_DataConnectionPiece", + props( + name = r#"Landingpad Data And Power"#, + desc = r#"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 = "Landingpad_DiagonalPiece01", + props( + name = r#"Landingpad Diagonal"#, + desc = r#"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area."#, + value = "977899131" + ) + )] + LandingpadDiagonalPiece01 = 977899131i32, + #[strum( + serialize = "Landingpad_GasConnectorInwardPiece", + props(name = r#"Landingpad Gas Input"#, desc = r#""#, value = "817945707") + )] + LandingpadGasConnectorInwardPiece = 817945707i32, + #[strum( + serialize = "Landingpad_GasConnectorOutwardPiece", + props( + name = r#"Landingpad Gas Output"#, + desc = r#"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 = "Landingpad_GasCylinderTankPiece", + props( + name = r#"Landingpad Gas Storage"#, + desc = r#"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 = "Landingpad_LiquidConnectorInwardPiece", + props( + name = r#"Landingpad Liquid Input"#, + desc = r#""#, + value = "-1216167727" + ) + )] + LandingpadLiquidConnectorInwardPiece = -1216167727i32, + #[strum( + serialize = "Landingpad_LiquidConnectorOutwardPiece", + props( + name = r#"Landingpad Liquid Output"#, + desc = r#"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 = "Landingpad_StraightPiece01", + props( + name = r#"Landingpad Straight"#, + desc = r#"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area."#, + value = "-976273247" + ) + )] + LandingpadStraightPiece01 = -976273247i32, + #[strum( + serialize = "Landingpad_TaxiPieceCorner", + props( + name = r#"Landingpad Taxi Corner"#, + desc = r#""#, + value = "-1872345847" + ) + )] + LandingpadTaxiPieceCorner = -1872345847i32, + #[strum( + serialize = "Landingpad_TaxiPieceHold", + props(name = r#"Landingpad Taxi Hold"#, desc = r#""#, value = "146051619") + )] + LandingpadTaxiPieceHold = 146051619i32, + #[strum( + serialize = "Landingpad_TaxiPieceStraight", + props( + name = r#"Landingpad Taxi Straight"#, + desc = r#""#, + value = "-1477941080" + ) + )] + LandingpadTaxiPieceStraight = -1477941080i32, + #[strum( + serialize = "Landingpad_ThreshholdPiece", + props(name = r#"Landingpad Threshhold"#, desc = r#""#, value = "-1514298582") + )] + LandingpadThreshholdPiece = -1514298582i32, + #[strum( + serialize = "ItemLaptop", + props( + name = r#"Laptop"#, + desc = r#"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. + +You must place the laptop down to interact with the onsreen UI. + +Connects to Logic Transmitter"#, + value = "141535121" + ) + )] + ItemLaptop = 141535121i32, + #[strum( + serialize = "StructureLargeDirectHeatExchangeLiquidtoLiquid", + props( + name = r#"Large Direct Heat Exchange - Liquid + Liquid"#, + desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, + value = "792686502" + ) + )] + StructureLargeDirectHeatExchangeLiquidtoLiquid = 792686502i32, + #[strum( + serialize = "StructureLargeDirectHeatExchangeGastoGas", + props( + name = r#"Large Direct Heat Exchanger - Gas + Gas"#, + desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, + value = "-1230658883" + ) + )] + StructureLargeDirectHeatExchangeGastoGas = -1230658883i32, + #[strum( + serialize = "StructureLargeDirectHeatExchangeGastoLiquid", + props( + name = r#"Large Direct Heat Exchanger - Gas + Liquid"#, + desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, + value = "1412338038" + ) + )] + StructureLargeDirectHeatExchangeGastoLiquid = 1412338038i32, + #[strum( + serialize = "StructureLargeExtendableRadiator", + props( + name = r#"Large Extendable Radiator"#, + desc = r#"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 = "StructureLargeHangerDoor", + props( + name = r#"Large Hangar Door"#, + desc = r#"1 x 3 modular door piece for building hangar doors."#, + value = "-1351081801" + ) + )] + StructureLargeHangerDoor = -1351081801i32, + #[strum( + serialize = "StructureLargeSatelliteDish", + props( + name = r#"Large Satellite Dish"#, + desc = r#"This large communications unit can be used to communicate with nearby trade vessels. + + 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."#, + value = "1913391845" + ) + )] + StructureLargeSatelliteDish = 1913391845i32, + #[strum( + serialize = "StructureTankBig", + props(name = r#"Large Tank"#, desc = r#""#, value = "-1606848156") + )] + StructureTankBig = -1606848156i32, + #[strum( + serialize = "StructureLaunchMount", + props( + name = r#"Launch Mount"#, + desc = r#"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 = "StructureRocketTower", + props(name = r#"Launch Tower"#, desc = r#""#, value = "-654619479") + )] + StructureRocketTower = -654619479i32, + #[strum( + serialize = "StructureLogicSwitch", + props(name = r#"Lever"#, desc = r#""#, value = "1220484876") + )] + StructureLogicSwitch = 1220484876i32, + #[strum( + serialize = "StructureLightRound", + props( + name = r#"Light Round"#, + desc = r#"Description coming."#, + value = "1514476632" + ) + )] + StructureLightRound = 1514476632i32, + #[strum( + serialize = "StructureLightRoundAngled", + props( + name = r#"Light Round (Angled)"#, + desc = r#"Description coming."#, + value = "1592905386" + ) + )] + StructureLightRoundAngled = 1592905386i32, + #[strum( + serialize = "StructureLightRoundSmall", + props( + name = r#"Light Round (Small)"#, + desc = r#"Description coming."#, + value = "1436121888" + ) + )] + StructureLightRoundSmall = 1436121888i32, + #[strum( + serialize = "ItemLightSword", + props( + name = r#"Light Sword"#, + desc = r#"A charming, if useless, pseudo-weapon. (Creative only.)"#, + value = "1949076595" + ) + )] + ItemLightSword = 1949076595i32, + #[strum( + serialize = "StructureBackLiquidPressureRegulator", + props( + name = r#"Liquid Back Volume Regulator"#, + desc = r#"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 = "ItemLiquidCanisterEmpty", + props(name = r#"Liquid Canister"#, desc = r#""#, value = "-185207387") + )] + ItemLiquidCanisterEmpty = -185207387i32, + #[strum( + serialize = "ItemLiquidCanisterSmart", + props( + name = r#"Liquid Canister (Smart)"#, + desc = r#"0.Mode0 +1.Mode1"#, + value = "777684475" + ) + )] + ItemLiquidCanisterSmart = 777684475i32, + #[strum( + serialize = "ItemGasCanisterWater", + props( + name = r#"Liquid Canister (Water)"#, + desc = r#""#, + value = "-1854861891" + ) + )] + ItemGasCanisterWater = -1854861891i32, + #[strum( + serialize = "StructureMediumRocketLiquidFuelTank", + props( + name = r#"Liquid Capsule Tank Medium"#, + desc = r#""#, + value = "1143639539" + ) + )] + StructureMediumRocketLiquidFuelTank = 1143639539i32, + #[strum( + serialize = "StructureCapsuleTankLiquid", + props( + name = r#"Liquid Capsule Tank Small"#, + desc = r#""#, + value = "1415396263" + ) + )] + StructureCapsuleTankLiquid = 1415396263i32, + #[strum( + serialize = "StructureWaterDigitalValve", + props(name = r#"Liquid Digital Valve"#, desc = r#""#, value = "-517628750") + )] + StructureWaterDigitalValve = -517628750i32, + #[strum( + serialize = "StructurePipeLiquidCrossJunction3", + props( + name = r#"Liquid Pipe (3-Way Junction)"#, + desc = r#"You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench."#, + value = "1628087508" + ) + )] + StructurePipeLiquidCrossJunction3 = 1628087508i32, + #[strum( + serialize = "StructurePipeLiquidCrossJunction4", + props( + name = r#"Liquid Pipe (4-Way Junction)"#, + desc = r#"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 = "StructurePipeLiquidCrossJunction5", + props( + name = r#"Liquid Pipe (5-Way Junction)"#, + desc = r#"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 = "StructurePipeLiquidCrossJunction6", + props( + name = r#"Liquid Pipe (6-Way Junction)"#, + desc = r#"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 = "StructurePipeLiquidCorner", + props( + name = r#"Liquid Pipe (Corner)"#, + desc = r#"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 = "StructurePipeLiquidCrossJunction", + props( + name = r#"Liquid Pipe (Cross Junction)"#, + desc = r#"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 = "StructurePipeLiquidStraight", + props( + name = r#"Liquid Pipe (Straight)"#, + desc = r#"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 = "StructurePipeLiquidTJunction", + props( + name = r#"Liquid Pipe (T Junction)"#, + desc = r#"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 = "StructureLiquidPipeAnalyzer", + props(name = r#"Liquid Pipe Analyzer"#, desc = r#""#, value = "-2113838091") + )] + StructureLiquidPipeAnalyzer = -2113838091i32, + #[strum( + serialize = "StructureLiquidPipeRadiator", + props( + name = r#"Liquid Pipe Convection Radiator"#, + desc = r#"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. +The 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 = "StructureWaterPipeMeter", + props(name = r#"Liquid Pipe Meter"#, desc = r#""#, value = "433184168") + )] + StructureWaterPipeMeter = 433184168i32, + #[strum( + serialize = "StructureLiquidTankBig", + props(name = r#"Liquid Tank Big"#, desc = r#""#, value = "1098900430") + )] + StructureLiquidTankBig = 1098900430i32, + #[strum( + serialize = "StructureTankConnectorLiquid", + props( + name = r#"Liquid Tank Connector"#, + desc = r#"These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network."#, + value = "1331802518" + ) + )] + StructureTankConnectorLiquid = 1331802518i32, + #[strum( + serialize = "StructureLiquidTankSmall", + props(name = r#"Liquid Tank Small"#, desc = r#""#, value = "1988118157") + )] + StructureLiquidTankSmall = 1988118157i32, + #[strum( + serialize = "StructureLiquidTankStorage", + props( + name = r#"Liquid Tank Storage"#, + desc = r#"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 = "StructureLiquidValve", + props(name = r#"Liquid Valve"#, desc = r#""#, value = "1849974453") + )] + StructureLiquidValve = 1849974453i32, + #[strum( + serialize = "StructureLiquidVolumePump", + props(name = r#"Liquid Volume Pump"#, desc = r#""#, value = "-454028979") + )] + StructureLiquidVolumePump = -454028979i32, + #[strum( + serialize = "StructureLiquidPressureRegulator", + props( + name = r#"Liquid Volume Regulator"#, + desc = r#"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 = "StructureWaterWallCooler", + props(name = r#"Liquid Wall Cooler"#, desc = r#""#, value = "-1369060582") + )] + StructureWaterWallCooler = -1369060582i32, + #[strum( + serialize = "StructureStorageLocker", + props(name = r#"Locker"#, desc = r#""#, value = "-793623899") + )] + StructureStorageLocker = -793623899i32, + #[strum( + serialize = "StructureLockerSmall", + props(name = r#"Locker (Small)"#, desc = r#""#, value = "-647164662") + )] + StructureLockerSmall = -647164662i32, + #[strum( + serialize = "StructureLogicCompare", + props( + name = r#"Logic Compare"#, + desc = r#"0.Equals +1.Greater +2.Less +3.NotEquals"#, + value = "-1489728908" + ) + )] + StructureLogicCompare = -1489728908i32, + #[strum( + serialize = "StructureLogicGate", + props( + name = r#"Logic Gate"#, + desc = r#"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 = "StructureLogicHashGen", + props(name = r#"Logic Hash Generator"#, desc = r#""#, value = "2077593121") + )] + StructureLogicHashGen = 2077593121i32, + #[strum( + serialize = "StructureLogicMath", + props( + name = r#"Logic Math"#, + desc = r#"0.Add +1.Subtract +2.Multiply +3.Divide +4.Mod +5.Atan2 +6.Pow +7.Log"#, + value = "1657691323" + ) + )] + StructureLogicMath = 1657691323i32, + #[strum( + serialize = "StructureLogicMemory", + props(name = r#"Logic Memory"#, desc = r#""#, value = "-851746783") + )] + StructureLogicMemory = -851746783i32, + #[strum( + serialize = "StructureLogicMinMax", + props( + name = r#"Logic Min/Max"#, + desc = r#"0.Greater +1.Less"#, + value = "929022276" + ) + )] + StructureLogicMinMax = 929022276i32, + #[strum( + serialize = "StructureLogicMirror", + props(name = r#"Logic Mirror"#, desc = r#""#, value = "2096189278") + )] + StructureLogicMirror = 2096189278i32, + #[strum( + serialize = "MotherboardLogic", + props( + name = r#"Logic Motherboard"#, + desc = r#"Motherboards are connected to Computers to perform various technical functions. +The Norsec-designed K-cops logic motherboard allows Stationeers to set variables and actions on specific logic-controlled items."#, + value = "502555944" + ) + )] + MotherboardLogic = 502555944i32, + #[strum( + serialize = "StructureLogicReader", + props(name = r#"Logic Reader"#, desc = r#""#, value = "-345383640") + )] + StructureLogicReader = -345383640i32, + #[strum( + serialize = "StructureLogicRocketDownlink", + props(name = r#"Logic Rocket Downlink"#, desc = r#""#, value = "876108549") + )] + StructureLogicRocketDownlink = 876108549i32, + #[strum( + serialize = "StructureLogicSelect", + props( + name = r#"Logic Select"#, + desc = r#"0.Equals +1.Greater +2.Less +3.NotEquals"#, + value = "1822736084" + ) + )] + StructureLogicSelect = 1822736084i32, + #[strum( + serialize = "StructureLogicSorter", + props( + name = r#"Logic Sorter"#, + desc = r#"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 = "LogicStepSequencer8", + props( + name = r#"Logic Step Sequencer"#, + desc = r#"The ODA does not approve of soundtracks or other distractions. +As such, Stationeers have had to create their own musical accompaniment to the demanding labor of building and maintaining off-world infrastructure. +Central to this pastime is the step sequencer, which allows Stationeers to sequence short musical patterns or loops. + +DIY MUSIC - GETTING STARTED + +1: Connect 8 Device Step Units to your step sequencer via the data port on the left hand side. + +2: Label each step unit, then assign step units 1 through 8 on the step sequencer using the screwdriver. + +3: 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. + +4: Place a Stop Watch and use a Logic Reader and Logic Writer to write the time to the time variable on the sequencer. + +5: 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. + +6: 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. + +7: 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). + +8: Get freaky with the Low frequency oscillator. + +9: Finally, activate the sequencer, Vibeoneer."#, + value = "1531272458" + ) + )] + LogicStepSequencer8 = 1531272458i32, + #[strum( + serialize = "StructureLogicTransmitter", + props( + name = r#"Logic Transmitter"#, + desc = r#"Connects to Logic Transmitter"#, + value = "-693235651" + ) + )] + StructureLogicTransmitter = -693235651i32, + #[strum( + serialize = "StructureLogicRocketUplink", + props(name = r#"Logic Uplink"#, desc = r#""#, value = "546002924") + )] + StructureLogicRocketUplink = 546002924i32, + #[strum( + serialize = "StructureLogicWriter", + props(name = r#"Logic Writer"#, desc = r#""#, value = "-1326019434") + )] + StructureLogicWriter = -1326019434i32, + #[strum( + serialize = "StructureLogicWriterSwitch", + props(name = r#"Logic Writer Switch"#, desc = r#""#, value = "-1321250424") + )] + StructureLogicWriterSwitch = -1321250424i32, + #[strum( + serialize = "DeviceLfoVolume", + props( + name = r#"Low frequency oscillator"#, + desc = r#"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. + +To set up an LFO: + +1. Place the LFO unit +2. Set the LFO output to a Passive Speaker +2. Set a sequencers' output to LFO - so the sequencer's signal runs through the LFO to a speaker. +3. Place a Stop Watch or use an existing one, then use a Logic Writer to write it to the LFO. +4. Use another logic writer to write the BPM to the LFO. +5. You are ready. This is the future. You're in space. Make it sound cool. + +For more info, check out the music page."#, + value = "-1844430312" + ) + )] + DeviceLfoVolume = -1844430312i32, + #[strum( + serialize = "StructureManualHatch", + props( + name = r#"Manual Hatch"#, + desc = r#"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 = "ItemMarineBodyArmor", + props(name = r#"Marine Armor"#, desc = r#""#, value = "1399098998") + )] + ItemMarineBodyArmor = 1399098998i32, + #[strum( + serialize = "ItemMarineHelmet", + props(name = r#"Marine Helmet"#, desc = r#""#, value = "1073631646") + )] + ItemMarineHelmet = 1073631646i32, + #[strum( + serialize = "UniformMarine", + props(name = r#"Marine Uniform"#, desc = r#""#, value = "-48342840") + )] + UniformMarine = -48342840i32, + #[strum( + serialize = "StructureLogicMathUnary", + props( + name = r#"Math Unary"#, + desc = r#"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"#, + value = "-1160020195" + ) + )] + StructureLogicMathUnary = -1160020195i32, + #[strum( + serialize = "CartridgeMedicalAnalyser", + props( + name = r#"Medical Analyzer"#, + desc = r#"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 = "StructureMediumConvectionRadiator", + props( + name = r#"Medium Convection Radiator"#, + desc = r#"A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere."#, + value = "-1918215845" + ) + )] + StructureMediumConvectionRadiator = -1918215845i32, + #[strum( + serialize = "StructurePassiveLargeRadiatorGas", + props( + name = r#"Medium Convection Radiator"#, + desc = r#"Has been replaced by Medium Convection Radiator."#, + value = "2066977095" + ) + )] + StructurePassiveLargeRadiatorGas = 2066977095i32, + #[strum( + serialize = "StructureMediumConvectionRadiatorLiquid", + props( + name = r#"Medium Convection Radiator Liquid"#, + desc = r#"A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere."#, + value = "-1169014183" + ) + )] + StructureMediumConvectionRadiatorLiquid = -1169014183i32, + #[strum( + serialize = "StructurePassiveLargeRadiatorLiquid", + props( + name = r#"Medium Convection Radiator Liquid"#, + desc = r#"Has been replaced by Medium Convection Radiator Liquid."#, + value = "24786172" + ) + )] + StructurePassiveLargeRadiatorLiquid = 24786172i32, + #[strum( + serialize = "ItemGasFilterCarbonDioxideM", + props( + name = r#"Medium Filter (Carbon Dioxide)"#, + desc = r#""#, + value = "416897318" + ) + )] + ItemGasFilterCarbonDioxideM = 416897318i32, + #[strum( + serialize = "ItemGasFilterNitrogenM", + props( + name = r#"Medium Filter (Nitrogen)"#, + desc = r#""#, + value = "-632657357" + ) + )] + ItemGasFilterNitrogenM = -632657357i32, + #[strum( + serialize = "ItemGasFilterNitrousOxideM", + props( + name = r#"Medium Filter (Nitrous Oxide)"#, + desc = r#""#, + value = "1824284061" + ) + )] + ItemGasFilterNitrousOxideM = 1824284061i32, + #[strum( + serialize = "ItemGasFilterOxygenM", + props( + name = r#"Medium Filter (Oxygen)"#, + desc = r#""#, + value = "-1067319543" + ) + )] + ItemGasFilterOxygenM = -1067319543i32, + #[strum( + serialize = "ItemGasFilterPollutantsM", + props( + name = r#"Medium Filter (Pollutants)"#, + desc = r#""#, + value = "63677771" + ) + )] + ItemGasFilterPollutantsM = 63677771i32, + #[strum( + serialize = "ItemGasFilterVolatilesM", + props( + name = r#"Medium Filter (Volatiles)"#, + desc = r#""#, + value = "1037507240" + ) + )] + ItemGasFilterVolatilesM = 1037507240i32, + #[strum( + serialize = "ItemGasFilterWaterM", + props(name = r#"Medium Filter (Water)"#, desc = r#""#, value = "8804422") + )] + ItemGasFilterWaterM = 8804422i32, + #[strum( + serialize = "StructureMediumHangerDoor", + props( + name = r#"Medium Hangar Door"#, + desc = r#"1 x 2 modular door piece for building hangar doors."#, + value = "-566348148" + ) + )] + StructureMediumHangerDoor = -566348148i32, + #[strum( + serialize = "StructureMediumRadiator", + props( + name = r#"Medium Radiator"#, + desc = r#"A stand-alone radiator unit optimized for radiating heat in vacuums."#, + value = "-975966237" + ) + )] + StructureMediumRadiator = -975966237i32, + #[strum( + serialize = "StructureMediumRadiatorLiquid", + props( + name = r#"Medium Radiator Liquid"#, + desc = r#"A stand-alone liquid radiator unit optimized for radiating heat in vacuums."#, + value = "-1141760613" + ) + )] + StructureMediumRadiatorLiquid = -1141760613i32, + #[strum( + serialize = "StructureSatelliteDish", + props( + name = r#"Medium Satellite Dish"#, + desc = r#"This medium communications unit can be used to communicate with nearby trade vessels. + +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."#, + value = "439026183" + ) + )] + StructureSatelliteDish = 439026183i32, + #[strum( + serialize = "Meteorite", + props(name = r#"Meteorite"#, desc = r#""#, value = "-99064335") + )] + Meteorite = -99064335i32, + #[strum( + serialize = "ApplianceMicrowave", + props( + name = r#"Microwave"#, + desc = r#"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. +Just 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 = "StructurePowerTransmitterReceiver", + props( + name = r#"Microwave Power Receiver"#, + desc = r#"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. +The 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 = "StructurePowerTransmitter", + props( + name = r#"Microwave Power Transmitter"#, + desc = r#"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. +The 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 = "ItemMilk", + props( + name = r#"Milk"#, + desc = r#"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 = "ItemMiningBackPack", + props(name = r#"Mining Backpack"#, desc = r#""#, value = "-1650383245") + )] + ItemMiningBackPack = -1650383245i32, + #[strum( + serialize = "ItemMiningBelt", + props( + name = r#"Mining Belt"#, + desc = r#"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 = "ItemMiningBeltMKII", + props( + name = r#"Mining Belt MK II"#, + desc = r#"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 = "ItemMiningCharge", + props( + name = r#"Mining Charge"#, + desc = r#"A low cost, high yield explosive with a 10 second timer."#, + value = "15829510" + ) + )] + ItemMiningCharge = 15829510i32, + #[strum( + serialize = "ItemMiningDrill", + props( + name = r#"Mining Drill"#, + desc = r#"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 = "ItemMiningDrillHeavy", + props( + name = r#"Mining Drill (Heavy)"#, + desc = r#"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 = "ItemRocketMiningDrillHead", + props( + name = r#"Mining-Drill Head (Basic)"#, + desc = r#"Replaceable drill head for Rocket Miner"#, + value = "2109945337" + ) + )] + ItemRocketMiningDrillHead = 2109945337i32, + #[strum( + serialize = "ItemRocketMiningDrillHeadDurable", + props( + name = r#"Mining-Drill Head (Durable)"#, + desc = r#""#, + value = "1530764483" + ) + )] + ItemRocketMiningDrillHeadDurable = 1530764483i32, + #[strum( + serialize = "ItemRocketMiningDrillHeadHighSpeedIce", + props( + name = r#"Mining-Drill Head (High Speed Ice)"#, + desc = r#""#, + value = "653461728" + ) + )] + ItemRocketMiningDrillHeadHighSpeedIce = 653461728i32, + #[strum( + serialize = "ItemRocketMiningDrillHeadHighSpeedMineral", + props( + name = r#"Mining-Drill Head (High Speed Mineral)"#, + desc = r#""#, + value = "1440678625" + ) + )] + ItemRocketMiningDrillHeadHighSpeedMineral = 1440678625i32, + #[strum( + serialize = "ItemRocketMiningDrillHeadIce", + props( + name = r#"Mining-Drill Head (Ice)"#, + desc = r#""#, + value = "-380904592" + ) + )] + ItemRocketMiningDrillHeadIce = -380904592i32, + #[strum( + serialize = "ItemRocketMiningDrillHeadLongTerm", + props( + name = r#"Mining-Drill Head (Long Term)"#, + desc = r#""#, + value = "-684020753" + ) + )] + ItemRocketMiningDrillHeadLongTerm = -684020753i32, + #[strum( + serialize = "ItemRocketMiningDrillHeadMineral", + props( + name = r#"Mining-Drill Head (Mineral)"#, + desc = r#""#, + value = "1083675581" + ) + )] + ItemRocketMiningDrillHeadMineral = 1083675581i32, + #[strum( + serialize = "ItemMKIIAngleGrinder", + props( + name = r#"Mk II Angle Grinder"#, + desc = r#"Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure."#, + value = "240174650" + ) + )] + ItemMkiiAngleGrinder = 240174650i32, + #[strum( + serialize = "ItemMKIIArcWelder", + props(name = r#"Mk II Arc Welder"#, desc = r#""#, value = "-2061979347") + )] + ItemMkiiArcWelder = -2061979347i32, + #[strum( + serialize = "ItemMKIICrowbar", + props( + name = r#"Mk II Crowbar"#, + desc = r#"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 = "ItemMKIIDrill", + props( + name = r#"Mk II Drill"#, + desc = r#"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 = "ItemMKIIDuctTape", + props( + name = r#"Mk II Duct Tape"#, + desc = r#"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. +To use on yourself: put duct tape in your active hand, hold RIGHT MOUSE BUTTON to automatically repair damage."#, + value = "388774906" + ) + )] + ItemMkiiDuctTape = 388774906i32, + #[strum( + serialize = "ItemMKIIMiningDrill", + props( + name = r#"Mk II Mining Drill"#, + desc = r#"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 = "ItemMKIIScrewdriver", + props( + name = r#"Mk II Screwdriver"#, + desc = r#"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 = "ItemMKIIWireCutters", + props( + name = r#"Mk II Wire Cutters"#, + desc = r#"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 = "ItemMKIIWrench", + props( + name = r#"Mk II Wrench"#, + desc = r#"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 = "CircuitboardModeControl", + props( + name = r#"Mode Control"#, + desc = r#"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 = "MothershipCore", + props( + name = r#"Mothership Core"#, + desc = r#"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 = "StructureMotionSensor", + props( + name = r#"Motion Sensor"#, + desc = r#"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. +The sensor activates whenever a player enters the grid it is placed on."#, + value = "-1713470563" + ) + )] + StructureMotionSensor = -1713470563i32, + #[strum( + serialize = "ItemMuffin", + props( + name = r#"Muffin"#, + desc = r#"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 = "ItemMushroom", + props( + name = r#"Mushroom"#, + desc = r#"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 = "SeedBag_Mushroom", + props( + name = r#"Mushroom Seeds"#, + desc = r#"Grow a Mushroom."#, + value = "311593418" + ) + )] + SeedBagMushroom = 311593418i32, + #[strum( + serialize = "CartridgeNetworkAnalyser", + props( + name = r#"Network Analyzer"#, + desc = r#"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 = "ItemNVG", + props(name = r#"Night Vision Goggles"#, desc = r#""#, value = "982514123") + )] + ItemNvg = 982514123i32, + #[strum( + serialize = "StructureNitrolyzer", + props( + name = r#"Nitrolyzer"#, + desc = r#"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 = "StructureHorizontalAutoMiner", + props( + name = r#"OGRE"#, + desc = r#"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. + +The 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. + +MODES +Idle - 0 +Mining - 1 +Returning - 2 +DepostingOre - 3 +Finished - 4 +"#, + value = "1070427573" + ) + )] + StructureHorizontalAutoMiner = 1070427573i32, + #[strum( + serialize = "StructureOccupancySensor", + props( + name = r#"Occupancy Sensor"#, + desc = r#"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 = "StructurePipeOneWayValve", + props( + name = r#"One Way Valve (Gas)"#, + desc = r#"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. +"#, + value = "1580412404" + ) + )] + StructurePipeOneWayValve = 1580412404i32, + #[strum( + serialize = "StructureLiquidPipeOneWayValve", + props( + name = r#"One Way Valve (Liquid)"#, + desc = r#"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.."#, + value = "-782453061" + ) + )] + StructureLiquidPipeOneWayValve = -782453061i32, + #[strum( + serialize = "ItemCoalOre", + props( + name = r#"Ore (Coal)"#, + desc = r#"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 = "ItemCobaltOre", + props( + name = r#"Ore (Cobalt)"#, + desc = r#"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 = "ItemCopperOre", + props( + name = r#"Ore (Copper)"#, + desc = r#"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 = "ItemGoldOre", + props( + name = r#"Ore (Gold)"#, + desc = r#"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 = "ItemIronOre", + props( + name = r#"Ore (Iron)"#, + desc = r#"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 = "ItemLeadOre", + props( + name = r#"Ore (Lead)"#, + desc = r#"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 = "ItemNickelOre", + props( + name = r#"Ore (Nickel)"#, + desc = r#"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 = "ItemSiliconOre", + props( + name = r#"Ore (Silicon)"#, + desc = r#"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 = "ItemSilverOre", + props( + name = r#"Ore (Silver)"#, + desc = r#"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 = "ItemUraniumOre", + props( + name = r#"Ore (Uranium)"#, + desc = r#"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 = "CartridgeOreScanner", + props( + name = r#"Ore Scanner"#, + desc = r#"When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet."#, + value = "-1768732546" + ) + )] + CartridgeOreScanner = -1768732546i32, + #[strum( + serialize = "CartridgeOreScannerColor", + props( + name = r#"Ore Scanner (Color)"#, + desc = r#"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 = "StructureOverheadShortCornerLocker", + props( + name = r#"Overhead Corner Locker"#, + desc = r#""#, + value = "-1794932560" + ) + )] + StructureOverheadShortCornerLocker = -1794932560i32, + #[strum( + serialize = "StructureOverheadShortLocker", + props(name = r#"Overhead Locker"#, desc = r#""#, value = "1468249454") + )] + StructureOverheadShortLocker = 1468249454i32, + #[strum( + serialize = "AppliancePaintMixer", + props(name = r#"Paint Mixer"#, desc = r#""#, value = "-1339716113") + )] + AppliancePaintMixer = -1339716113i32, + #[strum( + serialize = "StructurePassiveLiquidDrain", + props( + name = r#"Passive Liquid Drain"#, + desc = r#"Moves liquids from a pipe network to the world atmosphere."#, + value = "1812364811" + ) + )] + StructurePassiveLiquidDrain = 1812364811i32, + #[strum( + serialize = "StructureFloorDrain", + props( + name = r#"Passive Liquid Inlet"#, + desc = r#"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 = "PassiveSpeaker", + props(name = r#"Passive Speaker"#, desc = r#""#, value = "248893646") + )] + PassiveSpeaker = 248893646i32, + #[strum( + serialize = "ItemPassiveVent", + props( + name = r#"Passive Vent"#, + desc = r#"This kit creates a Passive Vent among other variants."#, + value = "238631271" + ) + )] + ItemPassiveVent = 238631271i32, + #[strum( + serialize = "StructurePassiveVent", + props( + name = r#"Passive Vent"#, + desc = r#"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 = "ItemPeaceLily", + props( + name = r#"Peace Lily"#, + desc = r#"A fetching lily with greater resistance to cold temperatures."#, + value = "2042955224" + ) + )] + ItemPeaceLily = 2042955224i32, + #[strum( + serialize = "ItemPickaxe", + props( + name = r#"Pickaxe"#, + desc = r#"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 = "StructurePictureFrameThickLandscapeLarge", + props( + name = r#"Picture Frame Thick Landscape Large"#, + desc = r#""#, + value = "-1434523206" + ) + )] + StructurePictureFrameThickLandscapeLarge = -1434523206i32, + #[strum( + serialize = "StructurePictureFrameThickMountLandscapeLarge", + props( + name = r#"Picture Frame Thick Landscape Large"#, + desc = r#""#, + value = "950004659" + ) + )] + StructurePictureFrameThickMountLandscapeLarge = 950004659i32, + #[strum( + serialize = "StructurePictureFrameThickLandscapeSmall", + props( + name = r#"Picture Frame Thick Landscape Small"#, + desc = r#""#, + value = "-2041566697" + ) + )] + StructurePictureFrameThickLandscapeSmall = -2041566697i32, + #[strum( + serialize = "StructurePictureFrameThickMountLandscapeSmall", + props( + name = r#"Picture Frame Thick Landscape Small"#, + desc = r#""#, + value = "347154462" + ) + )] + StructurePictureFrameThickMountLandscapeSmall = 347154462i32, + #[strum( + serialize = "StructurePictureFrameThickMountPortraitLarge", + props( + name = r#"Picture Frame Thick Mount Portrait Large"#, + desc = r#""#, + value = "-1459641358" + ) + )] + StructurePictureFrameThickMountPortraitLarge = -1459641358i32, + #[strum( + serialize = "StructurePictureFrameThickMountPortraitSmall", + props( + name = r#"Picture Frame Thick Mount Portrait Small"#, + desc = r#""#, + value = "-2066653089" + ) + )] + StructurePictureFrameThickMountPortraitSmall = -2066653089i32, + #[strum( + serialize = "StructurePictureFrameThickPortraitLarge", + props( + name = r#"Picture Frame Thick Portrait Large"#, + desc = r#""#, + value = "-1686949570" + ) + )] + StructurePictureFrameThickPortraitLarge = -1686949570i32, + #[strum( + serialize = "StructurePictureFrameThickPortraitSmall", + props( + name = r#"Picture Frame Thick Portrait Small"#, + desc = r#""#, + value = "-1218579821" + ) + )] + StructurePictureFrameThickPortraitSmall = -1218579821i32, + #[strum( + serialize = "StructurePictureFrameThinLandscapeLarge", + props( + name = r#"Picture Frame Thin Landscape Large"#, + desc = r#""#, + value = "-1418288625" + ) + )] + StructurePictureFrameThinLandscapeLarge = -1418288625i32, + #[strum( + serialize = "StructurePictureFrameThinMountLandscapeLarge", + props( + name = r#"Picture Frame Thin Landscape Large"#, + desc = r#""#, + value = "-1146760430" + ) + )] + StructurePictureFrameThinMountLandscapeLarge = -1146760430i32, + #[strum( + serialize = "StructurePictureFrameThinMountLandscapeSmall", + props( + name = r#"Picture Frame Thin Landscape Small"#, + desc = r#""#, + value = "-1752493889" + ) + )] + StructurePictureFrameThinMountLandscapeSmall = -1752493889i32, + #[strum( + serialize = "StructurePictureFrameThinLandscapeSmall", + props( + name = r#"Picture Frame Thin Landscape Small"#, + desc = r#""#, + value = "-2024250974" + ) + )] + StructurePictureFrameThinLandscapeSmall = -2024250974i32, + #[strum( + serialize = "StructurePictureFrameThinPortraitLarge", + props( + name = r#"Picture Frame Thin Portrait Large"#, + desc = r#""#, + value = "1212777087" + ) + )] + StructurePictureFrameThinPortraitLarge = 1212777087i32, + #[strum( + serialize = "StructurePictureFrameThinMountPortraitLarge", + props( + name = r#"Picture Frame Thin Portrait Large"#, + desc = r#""#, + value = "1094895077" + ) + )] + StructurePictureFrameThinMountPortraitLarge = 1094895077i32, + #[strum( + serialize = "StructurePictureFrameThinMountPortraitSmall", + props( + name = r#"Picture Frame Thin Portrait Small"#, + desc = r#""#, + value = "1835796040" + ) + )] + StructurePictureFrameThinMountPortraitSmall = 1835796040i32, + #[strum( + serialize = "StructurePictureFrameThinPortraitSmall", + props( + name = r#"Picture Frame Thin Portrait Small"#, + desc = r#""#, + value = "1684488658" + ) + )] + StructurePictureFrameThinPortraitSmall = 1684488658i32, + #[strum( + serialize = "ItemPillHeal", + props( + name = r#"Pill (Medical)"#, + desc = r#"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 = "ItemPillStun", + props( + name = r#"Pill (Paralysis)"#, + desc = r#"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 = "StructurePipeCrossJunction3", + props( + name = r#"Pipe (3-Way Junction)"#, + desc = r#"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 = "StructurePipeCrossJunction4", + props( + name = r#"Pipe (4-Way Junction)"#, + desc = r#"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 = "StructurePipeCrossJunction5", + props( + name = r#"Pipe (5-Way Junction)"#, + desc = r#"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 = "StructurePipeCrossJunction6", + props( + name = r#"Pipe (6-Way Junction)"#, + desc = r#"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 = "StructurePipeCorner", + props( + name = r#"Pipe (Corner)"#, + desc = r#"You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench."#, + value = "-1785673561" + ) + )] + StructurePipeCorner = -1785673561i32, + #[strum( + serialize = "StructurePipeCrossJunction", + props( + name = r#"Pipe (Cross Junction)"#, + desc = r#"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 = "StructurePipeStraight", + props( + name = r#"Pipe (Straight)"#, + desc = r#"You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench."#, + value = "73728932" + ) + )] + StructurePipeStraight = 73728932i32, + #[strum( + serialize = "StructurePipeTJunction", + props( + name = r#"Pipe (T Junction)"#, + desc = r#"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 = "StructurePipeAnalysizer", + props( + name = r#"Pipe Analyzer"#, + desc = r#"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. +Displaying 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."#, + value = "435685051" + ) + )] + StructurePipeAnalysizer = 435685051i32, + #[strum( + serialize = "PipeBenderMod", + props( + name = r#"Pipe Bender Mod"#, + desc = r#"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 = "StructurePipeRadiator", + props( + name = r#"Pipe Convection Radiator"#, + desc = r#"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. +The 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 = "StructurePipeCowl", + props(name = r#"Pipe Cowl"#, desc = r#""#, value = "465816159") + )] + StructurePipeCowl = 465816159i32, + #[strum( + serialize = "ItemPipeCowl", + props( + name = r#"Pipe Cowl"#, + desc = r#"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 = "StructurePipeHeater", + props( + name = r#"Pipe Heater (Gas)"#, + desc = r#"Adds 1000 joules of heat per tick to the contents of your pipe network."#, + value = "-419758574" + ) + )] + StructurePipeHeater = -419758574i32, + #[strum( + serialize = "StructureLiquidPipeHeater", + props( + name = r#"Pipe Heater (Liquid)"#, + desc = r#"Adds 1000 joules of heat per tick to the contents of your pipe network."#, + value = "-287495560" + ) + )] + StructureLiquidPipeHeater = -287495560i32, + #[strum( + serialize = "ItemPipeHeater", + props( + name = r#"Pipe Heater Kit (Gas)"#, + desc = r#"Creates a Pipe Heater (Gas)."#, + value = "-1751627006" + ) + )] + ItemPipeHeater = -1751627006i32, + #[strum( + serialize = "ItemLiquidPipeHeater", + props( + name = r#"Pipe Heater Kit (Liquid)"#, + desc = r#"Creates a Pipe Heater (Liquid)."#, + value = "-248475032" + ) + )] + ItemLiquidPipeHeater = -248475032i32, + #[strum( + serialize = "StructurePipeIgniter", + props( + name = r#"Pipe Igniter"#, + desc = r#"Ignites the atmosphere inside the attached pipe network."#, + value = "1286441942" + ) + )] + StructurePipeIgniter = 1286441942i32, + #[strum( + serialize = "StructurePipeLabel", + props( + name = r#"Pipe Label"#, + desc = r#"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 = "StructurePipeMeter", + props( + name = r#"Pipe Meter"#, + desc = r#"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: +"Humble pipe meter +speaks the truth, transmits pressure +within any pipe""#, + value = "-1798362329" + ) + )] + StructurePipeMeter = -1798362329i32, + #[strum( + serialize = "StructurePipeOrgan", + props( + name = r#"Pipe Organ"#, + desc = r#"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 = "StructurePipeRadiatorFlat", + props( + name = r#"Pipe Radiator"#, + desc = r#"A pipe mounted radiator optimized for radiating heat in vacuums."#, + value = "-399883995" + ) + )] + StructurePipeRadiatorFlat = -399883995i32, + #[strum( + serialize = "StructurePipeRadiatorFlatLiquid", + props( + name = r#"Pipe Radiator Liquid"#, + desc = r#"A liquid pipe mounted radiator optimized for radiating heat in vacuums."#, + value = "2024754523" + ) + )] + StructurePipeRadiatorFlatLiquid = 2024754523i32, + #[strum( + serialize = "AppliancePlantGeneticAnalyzer", + props( + name = r#"Plant Genetic Analyzer"#, + desc = r#"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. + +Individual Gene Value Widgets: +Most 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. + +Multiple Gene Value Widgets: +For 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 = "AppliancePlantGeneticSplicer", + props( + name = r#"Plant Genetic Splicer"#, + desc = r#"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. + +To 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 = "AppliancePlantGeneticStabilizer", + props( + name = r#"Plant Genetic Stabilizer"#, + desc = r#"The Genetic Stabilizer can be used to manipulate gene stability on a specific Plants or Seeds. It has two modes Stabilize and Destabilize. +Stabilize: Increases all genes stability by 50%. +Destabilize: Decreases all gene stability by 10% other than a chosen gene which will received decreased stability by 50%. + "#, + value = "871432335" + ) + )] + AppliancePlantGeneticStabilizer = 871432335i32, + #[strum( + serialize = "ItemPlantSampler", + props( + name = r#"Plant Sampler"#, + desc = r#"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 = "StructurePlanter", + props( + name = r#"Planter"#, + desc = r#"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 = "ItemPlasticSheets", + props(name = r#"Plastic Sheets"#, desc = r#""#, value = "662053345") + )] + ItemPlasticSheets = 662053345i32, + #[strum( + serialize = "StructurePlinth", + props(name = r#"Plinth"#, desc = r#""#, value = "989835703") + )] + StructurePlinth = 989835703i32, + #[strum( + serialize = "ItemMiningDrillPneumatic", + props( + name = r#"Pneumatic Mining Drill"#, + desc = r#"0.Default +1.Flatten"#, + value = "1258187304" + ) + )] + ItemMiningDrillPneumatic = 1258187304i32, + #[strum( + serialize = "DynamicAirConditioner", + props( + name = r#"Portable Air Conditioner"#, + desc = r#"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 = "DynamicScrubber", + props( + name = r#"Portable Air Scrubber"#, + desc = r#"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 = "PortableComposter", + props( + name = r#"Portable Composter"#, + desc = r#"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. +When processing, it releases nitrogen and volatiles, as well a small amount of heat. + +Compost composition +Fertilizer 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. + +- food increases PLANT YIELD up to two times +- Decayed Food increases plant GROWTH SPEED up to two times +- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for"#, + value = "-1958705204" + ) + )] + PortableComposter = -1958705204i32, + #[strum( + serialize = "DynamicGasCanisterEmpty", + props( + name = r#"Portable Gas Tank"#, + desc = r#"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 = "DynamicGasCanisterAir", + props( + name = r#"Portable Gas Tank (Air)"#, + desc = r#"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 = "DynamicGasCanisterCarbonDioxide", + props( + name = r#"Portable Gas Tank (CO2)"#, + desc = r#"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 = "DynamicGasCanisterFuel", + props( + name = r#"Portable Gas Tank (Fuel)"#, + desc = r#"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 = "DynamicGasCanisterNitrogen", + props( + name = r#"Portable Gas Tank (Nitrogen)"#, + desc = r#"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 = "DynamicGasCanisterNitrousOxide", + props( + name = r#"Portable Gas Tank (Nitrous Oxide)"#, + desc = r#""#, + value = "30727200" + ) + )] + DynamicGasCanisterNitrousOxide = 30727200i32, + #[strum( + serialize = "DynamicGasCanisterOxygen", + props( + name = r#"Portable Gas Tank (Oxygen)"#, + desc = r#"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 = "DynamicGasCanisterPollutants", + props( + name = r#"Portable Gas Tank (Pollutants)"#, + desc = r#""#, + value = "396065382" + ) + )] + DynamicGasCanisterPollutants = 396065382i32, + #[strum( + serialize = "DynamicGasCanisterVolatiles", + props( + name = r#"Portable Gas Tank (Volatiles)"#, + desc = r#"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 = "DynamicGasTankAdvancedOxygen", + props( + name = r#"Portable Gas Tank Mk II (Oxygen)"#, + desc = r#"0.Mode0 +1.Mode1"#, + value = "-1264455519" + ) + )] + DynamicGasTankAdvancedOxygen = -1264455519i32, + #[strum( + serialize = "DynamicGenerator", + props( + name = r#"Portable Generator"#, + desc = r#"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 = "DynamicHydroponics", + props(name = r#"Portable Hydroponics"#, desc = r#""#, value = "587726607") + )] + DynamicHydroponics = 587726607i32, + #[strum( + serialize = "DynamicLight", + props( + name = r#"Portable Light"#, + desc = r#"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 = "DynamicLiquidCanisterEmpty", + props( + name = r#"Portable Liquid Tank"#, + desc = r#"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 = "DynamicGasCanisterWater", + props( + name = r#"Portable Liquid Tank (Water)"#, + desc = r#"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. +Try to keep pressure under 10 MPa, or you'll end up wet, hurt and sorry, without any of the fun. +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 = "197293625" + ) + )] + DynamicGasCanisterWater = 197293625i32, + #[strum( + serialize = "DynamicMKIILiquidCanisterEmpty", + props( + name = r#"Portable Liquid Tank Mk II"#, + desc = r#"An empty, insulated liquid Gas Canister."#, + value = "2130739600" + ) + )] + DynamicMkiiLiquidCanisterEmpty = 2130739600i32, + #[strum( + serialize = "DynamicMKIILiquidCanisterWater", + props( + name = r#"Portable Liquid Tank Mk II (Water)"#, + desc = r#"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 = "PortableSolarPanel", + props(name = r#"Portable Solar Panel"#, desc = r#""#, value = "2043318949") + )] + PortableSolarPanel = 2043318949i32, + #[strum( + serialize = "StructurePortablesConnector", + props(name = r#"Portables Connector"#, desc = r#""#, value = "-899013427") + )] + StructurePortablesConnector = -899013427i32, + #[strum( + serialize = "ItemPotato", + props( + name = r#"Potato"#, + desc = r#" Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies."#, + value = "1929046963" + ) + )] + ItemPotato = 1929046963i32, + #[strum( + serialize = "SeedBag_Potato", + props( + name = r#"Potato Seeds"#, + desc = r#"Grow a Potato."#, + value = "1005571172" + ) + )] + SeedBagPotato = 1005571172i32, + #[strum( + serialize = "ItemCookedPowderedEggs", + props( + name = r#"Powdered Eggs"#, + desc = r#"A high-nutrient cooked food, which can be canned."#, + value = "-1712264413" + ) + )] + ItemCookedPowderedEggs = -1712264413i32, + #[strum( + serialize = "StructurePowerConnector", + props( + name = r#"Power Connector"#, + desc = r#"Attaches a Kit (Portable Generator) to a power network."#, + value = "-782951720" + ) + )] + StructurePowerConnector = -782951720i32, + #[strum( + serialize = "CircuitboardPowerControl", + props( + name = r#"Power Control"#, + desc = r#"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. + +The 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 = "StructurePowerTransmitterOmni", + props(name = r#"Power Transmitter Omni"#, desc = r#""#, value = "-327468845") + )] + StructurePowerTransmitterOmni = -327468845i32, + #[strum( + serialize = "StructureBench", + props( + name = r#"Powered Bench"#, + desc = r#"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 = "StructurePoweredVent", + props( + name = r#"Powered Vent"#, + desc = r#"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 = "StructurePoweredVentLarge", + props( + name = r#"Powered Vent Large"#, + desc = r#"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 = "StructurePressurantValve", + props( + name = r#"Pressurant Valve"#, + desc = r#"Pumps gas into a liquid pipe in order to raise the pressure"#, + value = "23052817" + ) + )] + StructurePressurantValve = 23052817i32, + #[strum( + serialize = "StructurePressureFedGasEngine", + props( + name = r#"Pressure Fed Gas Engine"#, + desc = r#"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 = "StructurePressureFedLiquidEngine", + props( + name = r#"Pressure Fed Liquid Engine"#, + desc = r#"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 = "StructurePressureRegulator", + props( + name = r#"Pressure Regulator"#, + desc = r#"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 = "StructureProximitySensor", + props( + name = r#"Proximity Sensor"#, + desc = r#"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 = "StructureGovernedGasEngine", + props( + name = r#"Pumped Gas Engine"#, + desc = r#"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 = "StructurePumpedLiquidEngine", + props( + name = r#"Pumped Liquid Engine"#, + desc = r#"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 = "ItemPumpkin", + props( + name = r#"Pumpkin"#, + desc = r#"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 = "ItemPumpkinPie", + props(name = r#"Pumpkin Pie"#, desc = r#""#, value = "62768076") + )] + ItemPumpkinPie = 62768076i32, + #[strum( + serialize = "SeedBag_Pumpkin", + props( + name = r#"Pumpkin Seeds"#, + desc = r#"Grow a Pumpkin."#, + value = "1423199840" + ) + )] + SeedBagPumpkin = 1423199840i32, + #[strum( + serialize = "ItemPumpkinSoup", + props( + name = r#"Pumpkin Soup"#, + desc = r#"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 = "ItemPureIceCarbonDioxide", + props( + name = r#"Pure Ice Carbon Dioxide"#, + desc = r#"A frozen chunk of pure Carbon Dioxide"#, + value = "-1251009404" + ) + )] + ItemPureIceCarbonDioxide = -1251009404i32, + #[strum( + serialize = "ItemPureIceHydrogen", + props( + name = r#"Pure Ice Hydrogen"#, + desc = r#"A frozen chunk of pure Hydrogen"#, + value = "944530361" + ) + )] + ItemPureIceHydrogen = 944530361i32, + #[strum( + serialize = "ItemPureIceLiquidCarbonDioxide", + props( + name = r#"Pure Ice Liquid Carbon Dioxide"#, + desc = r#"A frozen chunk of pure Liquid Carbon Dioxide"#, + value = "-1715945725" + ) + )] + ItemPureIceLiquidCarbonDioxide = -1715945725i32, + #[strum( + serialize = "ItemPureIceLiquidHydrogen", + props( + name = r#"Pure Ice Liquid Hydrogen"#, + desc = r#"A frozen chunk of pure Liquid Hydrogen"#, + value = "-1044933269" + ) + )] + ItemPureIceLiquidHydrogen = -1044933269i32, + #[strum( + serialize = "ItemPureIceLiquidNitrogen", + props( + name = r#"Pure Ice Liquid Nitrogen"#, + desc = r#"A frozen chunk of pure Liquid Nitrogen"#, + value = "1674576569" + ) + )] + ItemPureIceLiquidNitrogen = 1674576569i32, + #[strum( + serialize = "ItemPureIceLiquidNitrous", + props( + name = r#"Pure Ice Liquid Nitrous"#, + desc = r#"A frozen chunk of pure Liquid Nitrous Oxide"#, + value = "1428477399" + ) + )] + ItemPureIceLiquidNitrous = 1428477399i32, + #[strum( + serialize = "ItemPureIceLiquidOxygen", + props( + name = r#"Pure Ice Liquid Oxygen"#, + desc = r#"A frozen chunk of pure Liquid Oxygen"#, + value = "541621589" + ) + )] + ItemPureIceLiquidOxygen = 541621589i32, + #[strum( + serialize = "ItemPureIceLiquidPollutant", + props( + name = r#"Pure Ice Liquid Pollutant"#, + desc = r#"A frozen chunk of pure Liquid Pollutant"#, + value = "-1748926678" + ) + )] + ItemPureIceLiquidPollutant = -1748926678i32, + #[strum( + serialize = "ItemPureIceLiquidVolatiles", + props( + name = r#"Pure Ice Liquid Volatiles"#, + desc = r#"A frozen chunk of pure Liquid Volatiles"#, + value = "-1306628937" + ) + )] + ItemPureIceLiquidVolatiles = -1306628937i32, + #[strum( + serialize = "ItemPureIceNitrogen", + props( + name = r#"Pure Ice Nitrogen"#, + desc = r#"A frozen chunk of pure Nitrogen"#, + value = "-1708395413" + ) + )] + ItemPureIceNitrogen = -1708395413i32, + #[strum( + serialize = "ItemPureIceNitrous", + props( + name = r#"Pure Ice NitrousOxide"#, + desc = r#"A frozen chunk of pure Nitrous Oxide"#, + value = "386754635" + ) + )] + ItemPureIceNitrous = 386754635i32, + #[strum( + serialize = "ItemPureIceOxygen", + props( + name = r#"Pure Ice Oxygen"#, + desc = r#"A frozen chunk of pure Oxygen"#, + value = "-1150448260" + ) + )] + ItemPureIceOxygen = -1150448260i32, + #[strum( + serialize = "ItemPureIcePollutant", + props( + name = r#"Pure Ice Pollutant"#, + desc = r#"A frozen chunk of pure Pollutant"#, + value = "-1755356" + ) + )] + ItemPureIcePollutant = -1755356i32, + #[strum( + serialize = "ItemPureIcePollutedWater", + props( + name = r#"Pure Ice Polluted Water"#, + desc = r#"A frozen chunk of Polluted Water"#, + value = "-2073202179" + ) + )] + ItemPureIcePollutedWater = -2073202179i32, + #[strum( + serialize = "ItemPureIceSteam", + props( + name = r#"Pure Ice Steam"#, + desc = r#"A frozen chunk of pure Steam"#, + value = "-874791066" + ) + )] + ItemPureIceSteam = -874791066i32, + #[strum( + serialize = "ItemPureIceVolatiles", + props( + name = r#"Pure Ice Volatiles"#, + desc = r#"A frozen chunk of pure Volatiles"#, + value = "-633723719" + ) + )] + ItemPureIceVolatiles = -633723719i32, + #[strum( + serialize = "ItemPureIce", + props( + name = r#"Pure Ice Water"#, + desc = r#"A frozen chunk of pure Water"#, + value = "-1616308158" + ) + )] + ItemPureIce = -1616308158i32, + #[strum( + serialize = "StructurePurgeValve", + props( + name = r#"Purge Valve"#, + desc = r#"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 = "RailingElegant01", + props( + name = r#"Railing Elegant (Type 1)"#, + desc = r#""#, + value = "399661231" + ) + )] + RailingElegant01 = 399661231i32, + #[strum( + serialize = "RailingElegant02", + props( + name = r#"Railing Elegant (Type 2)"#, + desc = r#""#, + value = "-1898247915" + ) + )] + RailingElegant02 = -1898247915i32, + #[strum( + serialize = "StructureRailing", + props( + name = r#"Railing Industrial (Type 1)"#, + desc = r#""Safety third.""#, + value = "-1756913871" + ) + )] + StructureRailing = -1756913871i32, + #[strum( + serialize = "RailingIndustrial02", + props( + name = r#"Railing Industrial (Type 2)"#, + desc = r#""#, + value = "-2072792175" + ) + )] + RailingIndustrial02 = -2072792175i32, + #[strum( + serialize = "ItemReagentMix", + props( + name = r#"Reagent Mix"#, + desc = r#"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 = "ApplianceReagentProcessor", + props( + name = r#"Reagent Processor"#, + desc = r#"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 = "StructureLogicReagentReader", + props(name = r#"Reagent Reader"#, desc = r#""#, value = "-124308857") + )] + StructureLogicReagentReader = -124308857i32, + #[strum( + serialize = "StructureRecycler", + props( + name = r#"Recycler"#, + desc = r#"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 = "StructureRefrigeratedVendingMachine", + props( + name = r#"Refrigerated Vending Machine"#, + desc = r#"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. +The 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. +NOTE: altering stack sizes DOES NOT update existing stacks within the machine, only those subsequently added. "#, + value = "-1577831321" + ) + )] + StructureRefrigeratedVendingMachine = -1577831321i32, + #[strum( + serialize = "StructureReinforcedCompositeWindowSteel", + props( + name = r#"Reinforced Window (Composite Steel)"#, + desc = r#"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 = "StructureReinforcedCompositeWindow", + props( + name = r#"Reinforced Window (Composite)"#, + desc = r#"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 = "StructureReinforcedWallPaddedWindow", + props( + name = r#"Reinforced Window (Padded)"#, + desc = r#"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 = "StructureReinforcedWallPaddedWindowThin", + props( + name = r#"Reinforced Window (Thin)"#, + desc = r#"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 = "ItemRemoteDetonator", + props(name = r#"Remote Detonator"#, desc = r#""#, value = "678483886") + )] + ItemRemoteDetonator = 678483886i32, + #[strum( + serialize = "ItemExplosive", + props(name = r#"Remote Explosive"#, desc = r#""#, value = "235361649") + )] + ItemExplosive = 235361649i32, + #[strum( + serialize = "ItemResearchCapsule", + props(name = r#"Research Capsule Blue"#, desc = r#""#, value = "819096942") + )] + ItemResearchCapsule = 819096942i32, + #[strum( + serialize = "ItemResearchCapsuleGreen", + props( + name = r#"Research Capsule Green"#, + desc = r#""#, + value = "-1352732550" + ) + )] + ItemResearchCapsuleGreen = -1352732550i32, + #[strum( + serialize = "ItemResearchCapsuleRed", + props(name = r#"Research Capsule Red"#, desc = r#""#, value = "954947943") + )] + ItemResearchCapsuleRed = 954947943i32, + #[strum( + serialize = "ItemResearchCapsuleYellow", + props(name = r#"Research Capsule Yellow"#, desc = r#""#, value = "750952701") + )] + ItemResearchCapsuleYellow = 750952701i32, + #[strum( + serialize = "StructureResearchMachine", + props(name = r#"Research Machine"#, desc = r#""#, value = "-796627526") + )] + StructureResearchMachine = -796627526i32, + #[strum( + serialize = "RespawnPoint", + props( + name = r#"Respawn Point"#, + desc = r#"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 = "RespawnPointWallMounted", + props( + name = r#"Respawn Point (Mounted)"#, + desc = r#""#, + value = "-491247370" + ) + )] + RespawnPointWallMounted = -491247370i32, + #[strum( + serialize = "ItemRice", + props( + name = r#"Rice"#, + desc = r#"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 = "SeedBag_Rice", + props( + name = r#"Rice Seeds"#, + desc = r#"Grow some Rice."#, + value = "-1691151239" + ) + )] + SeedBagRice = -1691151239i32, + #[strum( + serialize = "ItemRoadFlare", + props( + name = r#"Road Flare"#, + desc = r#"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 = "StructureRocketAvionics", + props(name = r#"Rocket Avionics"#, desc = r#""#, value = "808389066") + )] + StructureRocketAvionics = 808389066i32, + #[strum( + serialize = "StructureRocketCelestialTracker", + props( + name = r#"Rocket Celestial Tracker"#, + desc = r#"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 = "StructureRocketCircuitHousing", + props(name = r#"Rocket Circuit Housing"#, desc = r#""#, value = "150135861") + )] + StructureRocketCircuitHousing = 150135861i32, + #[strum( + serialize = "MotherboardRockets", + props( + name = r#"Rocket Control Motherboard"#, + desc = r#""#, + value = "-806986392" + ) + )] + MotherboardRockets = -806986392i32, + #[strum( + serialize = "StructureRocketEngineTiny", + props(name = r#"Rocket Engine (Tiny)"#, desc = r#""#, value = "178472613") + )] + StructureRocketEngineTiny = 178472613i32, + #[strum( + serialize = "StructureRocketManufactory", + props(name = r#"Rocket Manufactory"#, desc = r#""#, value = "1781051034") + )] + StructureRocketManufactory = 1781051034i32, + #[strum( + serialize = "StructureRocketMiner", + props( + name = r#"Rocket Miner"#, + desc = r#"Gathers available resources at the rocket's current space location."#, + value = "-2087223687" + ) + )] + StructureRocketMiner = -2087223687i32, + #[strum( + serialize = "StructureRocketScanner", + props(name = r#"Rocket Scanner"#, desc = r#""#, value = "2014252591") + )] + StructureRocketScanner = 2014252591i32, + #[strum( + serialize = "ItemRocketScanningHead", + props(name = r#"Rocket Scanner Head"#, desc = r#""#, value = "-1198702771") + )] + ItemRocketScanningHead = -1198702771i32, + #[strum( + serialize = "RoverCargo", + props( + name = r#"Rover (Cargo)"#, + desc = r#"Connects to Logic Transmitter"#, + value = "350726273" + ) + )] + RoverCargo = 350726273i32, + #[strum( + serialize = "StructureRover", + props(name = r#"Rover Frame"#, desc = r#""#, value = "806513938") + )] + StructureRover = 806513938i32, + #[strum( + serialize = "Rover_MkI_build_states", + props(name = r#"Rover MKI"#, desc = r#""#, value = "861674123") + )] + RoverMkIBuildStates = 861674123i32, + #[strum( + serialize = "Rover_MkI", + props( + name = r#"Rover MkI"#, + desc = r#"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). +A 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 = "StructureSDBHopper", + props(name = r#"SDB Hopper"#, desc = r#""#, value = "-1875856925") + )] + StructureSdbHopper = -1875856925i32, + #[strum( + serialize = "StructureSDBHopperAdvanced", + props(name = r#"SDB Hopper Advanced"#, desc = r#""#, value = "467225612") + )] + StructureSdbHopperAdvanced = 467225612i32, + #[strum( + serialize = "StructureSDBSilo", + props( + name = r#"SDB Silo"#, + desc = r#"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 = "SMGMagazine", + props(name = r#"SMG Magazine"#, desc = r#""#, value = "-256607540") + )] + SmgMagazine = -256607540i32, + #[strum( + serialize = "ItemScrewdriver", + props( + name = r#"Screwdriver"#, + desc = r#"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 = "ItemSecurityCamera", + props( + name = r#"Security Camera"#, + desc = r#"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 = "StructureSecurityPrinter", + props( + name = r#"Security Printer"#, + desc = r#"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. +"#, + value = "-641491515" + ) + )] + StructureSecurityPrinter = -641491515i32, + #[strum( + serialize = "ItemSensorLenses", + props( + name = r#"Sensor Lenses"#, + desc = r#"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 = "ItemSensorProcessingUnitCelestialScanner", + props( + name = r#"Sensor Processing Unit (Celestial Scanner)"#, + desc = r#""#, + value = "-1154200014" + ) + )] + ItemSensorProcessingUnitCelestialScanner = -1154200014i32, + #[strum( + serialize = "ItemSensorProcessingUnitOreScanner", + props( + name = r#"Sensor Processing Unit (Ore Scanner)"#, + desc = r#"The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD."#, + value = "-1219128491" + ) + )] + ItemSensorProcessingUnitOreScanner = -1219128491i32, + #[strum( + serialize = "ItemSensorProcessingUnitMesonScanner", + props( + name = r#"Sensor Processing Unit (T-Ray Scanner)"#, + desc = r#"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 = "StructureShelf", + props(name = r#"Shelf"#, desc = r#""#, value = "1172114950") + )] + StructureShelf = 1172114950i32, + #[strum( + serialize = "StructureShelfMedium", + props( + name = r#"Shelf Medium"#, + desc = r#"A shelf for putting things on, so you can see them."#, + value = "182006674" + ) + )] + StructureShelfMedium = 182006674i32, + #[strum( + serialize = "CircuitboardShipDisplay", + props( + name = r#"Ship Display"#, + desc = r#"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 = "StructureShortCornerLocker", + props(name = r#"Short Corner Locker"#, desc = r#""#, value = "1330754486") + )] + StructureShortCornerLocker = 1330754486i32, + #[strum( + serialize = "StructureShortLocker", + props(name = r#"Short Locker"#, desc = r#""#, value = "-554553467") + )] + StructureShortLocker = -554553467i32, + #[strum( + serialize = "StructureShower", + props(name = r#"Shower"#, desc = r#""#, value = "-775128944") + )] + StructureShower = -775128944i32, + #[strum( + serialize = "StructureShowerPowered", + props(name = r#"Shower (Powered)"#, desc = r#""#, value = "-1081797501") + )] + StructureShowerPowered = -1081797501i32, + #[strum( + serialize = "StructureSign1x1", + props(name = r#"Sign 1x1"#, desc = r#""#, value = "879058460") + )] + StructureSign1X1 = 879058460i32, + #[strum( + serialize = "StructureSign2x1", + props(name = r#"Sign 2x1"#, desc = r#""#, value = "908320837") + )] + StructureSign2X1 = 908320837i32, + #[strum( + serialize = "StructureSingleBed", + props( + name = r#"Single Bed"#, + desc = r#"Description coming."#, + value = "-492611" + ) + )] + StructureSingleBed = -492611i32, + #[strum( + serialize = "DynamicSkeleton", + props(name = r#"Skeleton"#, desc = r#""#, value = "106953348") + )] + DynamicSkeleton = 106953348i32, + #[strum( + serialize = "StructureSleeper", + props(name = r#"Sleeper"#, desc = r#""#, value = "-1467449329") + )] + StructureSleeper = -1467449329i32, + #[strum( + serialize = "StructureSleeperLeft", + props( + name = r#"Sleeper Left"#, + desc = r#"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 = "StructureSleeperRight", + props( + name = r#"Sleeper Right"#, + desc = r#"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 = "StructureSleeperVertical", + props( + name = r#"Sleeper Vertical"#, + desc = r#"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 = "StructureLogicSlotReader", + props(name = r#"Slot Reader"#, desc = r#""#, value = "-767867194") + )] + StructureLogicSlotReader = -767867194i32, + #[strum( + serialize = "StructureSmallTableBacklessDouble", + props( + name = r#"Small (Table Backless Double)"#, + desc = r#""#, + value = "-1633000411" + ) + )] + StructureSmallTableBacklessDouble = -1633000411i32, + #[strum( + serialize = "StructureSmallTableBacklessSingle", + props( + name = r#"Small (Table Backless Single)"#, + desc = r#""#, + value = "-1897221677" + ) + )] + StructureSmallTableBacklessSingle = -1897221677i32, + #[strum( + serialize = "StructureSmallTableDinnerSingle", + props( + name = r#"Small (Table Dinner Single)"#, + desc = r#""#, + value = "1260651529" + ) + )] + StructureSmallTableDinnerSingle = 1260651529i32, + #[strum( + serialize = "StructureSmallTableRectangleDouble", + props( + name = r#"Small (Table Rectangle Double)"#, + desc = r#""#, + value = "-660451023" + ) + )] + StructureSmallTableRectangleDouble = -660451023i32, + #[strum( + serialize = "StructureSmallTableRectangleSingle", + props( + name = r#"Small (Table Rectangle Single)"#, + desc = r#""#, + value = "-924678969" + ) + )] + StructureSmallTableRectangleSingle = -924678969i32, + #[strum( + serialize = "StructureSmallTableThickDouble", + props( + name = r#"Small (Table Thick Double)"#, + desc = r#""#, + value = "-19246131" + ) + )] + StructureSmallTableThickDouble = -19246131i32, + #[strum( + serialize = "StructureSmallDirectHeatExchangeGastoGas", + props( + name = r#"Small Direct Heat Exchanger - Gas + Gas"#, + desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, + value = "1310303582" + ) + )] + StructureSmallDirectHeatExchangeGastoGas = 1310303582i32, + #[strum( + serialize = "StructureSmallDirectHeatExchangeLiquidtoGas", + props( + name = r#"Small Direct Heat Exchanger - Liquid + Gas "#, + desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, + value = "1825212016" + ) + )] + StructureSmallDirectHeatExchangeLiquidtoGas = 1825212016i32, + #[strum( + serialize = "StructureSmallDirectHeatExchangeLiquidtoLiquid", + props( + name = r#"Small Direct Heat Exchanger - Liquid + Liquid"#, + desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, + value = "-507770416" + ) + )] + StructureSmallDirectHeatExchangeLiquidtoLiquid = -507770416i32, + #[strum( + serialize = "StructureFlagSmall", + props(name = r#"Small Flag"#, desc = r#""#, value = "-1529819532") + )] + StructureFlagSmall = -1529819532i32, + #[strum( + serialize = "StructureAirlockGate", + props( + name = r#"Small Hangar Door"#, + desc = r#"1 x 1 modular door piece for building hangar doors."#, + value = "1736080881" + ) + )] + StructureAirlockGate = 1736080881i32, + #[strum( + serialize = "StructureSmallSatelliteDish", + props( + name = r#"Small Satellite Dish"#, + desc = r#"This small communications unit can be used to communicate with nearby trade vessels. + + 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."#, + value = "-2138748650" + ) + )] + StructureSmallSatelliteDish = -2138748650i32, + #[strum( + serialize = "StructureSmallTableThickSingle", + props( + name = r#"Small Table (Thick Single)"#, + desc = r#""#, + value = "-291862981" + ) + )] + StructureSmallTableThickSingle = -291862981i32, + #[strum( + serialize = "StructureTankSmall", + props(name = r#"Small Tank"#, desc = r#""#, value = "1013514688") + )] + StructureTankSmall = 1013514688i32, + #[strum( + serialize = "StructureTankSmallAir", + props(name = r#"Small Tank (Air)"#, desc = r#""#, value = "955744474") + )] + StructureTankSmallAir = 955744474i32, + #[strum( + serialize = "StructureTankSmallFuel", + props(name = r#"Small Tank (Fuel)"#, desc = r#""#, value = "2102454415") + )] + StructureTankSmallFuel = 2102454415i32, + #[strum( + serialize = "CircuitboardSolarControl", + props( + name = r#"Solar Control"#, + desc = r#"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 = "StructureSolarPanel", + props( + name = r#"Solar Panel"#, + desc = r#"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 = "StructureSolarPanel45", + props( + name = r#"Solar Panel (Angled)"#, + desc = r#"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 = "StructureSolarPanelDual", + props( + name = r#"Solar Panel (Dual)"#, + desc = r#"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 = "StructureSolarPanelFlat", + props( + name = r#"Solar Panel (Flat)"#, + desc = r#"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 = "StructureSolarPanel45Reinforced", + props( + name = r#"Solar Panel (Heavy Angled)"#, + desc = r#"This solar panel is resistant to storm damage."#, + value = "930865127" + ) + )] + StructureSolarPanel45Reinforced = 930865127i32, + #[strum( + serialize = "StructureSolarPanelDualReinforced", + props( + name = r#"Solar Panel (Heavy Dual)"#, + desc = r#"This solar panel is resistant to storm damage."#, + value = "-1545574413" + ) + )] + StructureSolarPanelDualReinforced = -1545574413i32, + #[strum( + serialize = "StructureSolarPanelFlatReinforced", + props( + name = r#"Solar Panel (Heavy Flat)"#, + desc = r#"This solar panel is resistant to storm damage."#, + value = "1697196770" + ) + )] + StructureSolarPanelFlatReinforced = 1697196770i32, + #[strum( + serialize = "StructureSolarPanelReinforced", + props( + name = r#"Solar Panel (Heavy)"#, + desc = r#"This solar panel is resistant to storm damage."#, + value = "-934345724" + ) + )] + StructureSolarPanelReinforced = -934345724i32, + #[strum( + serialize = "ItemSolidFuel", + props( + name = r#"Solid Fuel (Hydrocarbon)"#, + desc = r#""#, + value = "-365253871" + ) + )] + ItemSolidFuel = -365253871i32, + #[strum( + serialize = "StructureSorter", + props( + name = r#"Sorter"#, + desc = r#"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 = "MotherboardSorter", + props( + name = r#"Sorter Motherboard"#, + desc = r#"Motherboards are connected to Computers to perform various technical functions. +The 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 = "ItemSoundCartridgeBass", + props(name = r#"Sound Cartridge Bass"#, desc = r#""#, value = "-1883441704") + )] + ItemSoundCartridgeBass = -1883441704i32, + #[strum( + serialize = "ItemSoundCartridgeDrums", + props(name = r#"Sound Cartridge Drums"#, desc = r#""#, value = "-1901500508") + )] + ItemSoundCartridgeDrums = -1901500508i32, + #[strum( + serialize = "ItemSoundCartridgeLeads", + props(name = r#"Sound Cartridge Leads"#, desc = r#""#, value = "-1174735962") + )] + ItemSoundCartridgeLeads = -1174735962i32, + #[strum( + serialize = "ItemSoundCartridgeSynth", + props(name = r#"Sound Cartridge Synth"#, desc = r#""#, value = "-1971419310") + )] + ItemSoundCartridgeSynth = -1971419310i32, + #[strum( + serialize = "ItemSoyOil", + props(name = r#"Soy Oil"#, desc = r#""#, value = "1387403148") + )] + ItemSoyOil = 1387403148i32, + #[strum( + serialize = "ItemSoybean", + props( + name = r#"Soybean"#, + desc = r#" 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 = "SeedBag_Soybean", + props( + name = r#"Soybean Seeds"#, + desc = r#"Grow some Soybean."#, + value = "1783004244" + ) + )] + SeedBagSoybean = 1783004244i32, + #[strum( + serialize = "ItemSpaceCleaner", + props( + name = r#"Space Cleaner"#, + desc = r#"There was a time when humanity really wanted to keep space clean. That time has passed."#, + value = "-1737666461" + ) + )] + ItemSpaceCleaner = -1737666461i32, + #[strum( + serialize = "ItemSpaceHelmet", + props( + name = r#"Space Helmet"#, + desc = r#"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). +It 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 = "ItemSpaceIce", + props(name = r#"Space Ice"#, desc = r#""#, value = "675686937") + )] + ItemSpaceIce = 675686937i32, + #[strum( + serialize = "SpaceShuttle", + props( + name = r#"Space Shuttle"#, + desc = r#"An antiquated Sinotai transport craft, long since decommissioned."#, + value = "-1991297271" + ) + )] + SpaceShuttle = -1991297271i32, + #[strum( + serialize = "ItemSpacepack", + props( + name = r#"Spacepack"#, + desc = r#"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. +Indispensable 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. +USE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move."#, + value = "-1260618380" + ) + )] + ItemSpacepack = -1260618380i32, + #[strum( + serialize = "ItemSprayGun", + props( + name = r#"Spray Gun"#, + desc = r#"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 = "ItemSprayCanBlack", + props( + name = r#"Spray Paint (Black)"#, + desc = r#"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 = "ItemSprayCanBlue", + props( + name = r#"Spray Paint (Blue)"#, + desc = r#"What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'"#, + value = "-498464883" + ) + )] + ItemSprayCanBlue = -498464883i32, + #[strum( + serialize = "ItemSprayCanBrown", + props( + name = r#"Spray Paint (Brown)"#, + desc = r#"In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed."#, + value = "845176977" + ) + )] + ItemSprayCanBrown = 845176977i32, + #[strum( + serialize = "ItemSprayCanGreen", + props( + name = r#"Spray Paint (Green)"#, + desc = r#"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 = "ItemSprayCanGrey", + props( + name = r#"Spray Paint (Grey)"#, + desc = r#"Arguably the most popular color in the universe, grey was invented so designers had something to do."#, + value = "-1645266981" + ) + )] + ItemSprayCanGrey = -1645266981i32, + #[strum( + serialize = "ItemSprayCanKhaki", + props( + name = r#"Spray Paint (Khaki)"#, + desc = r#"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 = "ItemSprayCanOrange", + props( + name = r#"Spray Paint (Orange)"#, + desc = r#"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 = "ItemSprayCanPink", + props( + name = r#"Spray Paint (Pink)"#, + desc = r#"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 = "ItemSprayCanPurple", + props( + name = r#"Spray Paint (Purple)"#, + desc = r#"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 = "ItemSprayCanRed", + props( + name = r#"Spray Paint (Red)"#, + desc = r#"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 = "ItemSprayCanWhite", + props( + name = r#"Spray Paint (White)"#, + desc = r#"White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff."#, + value = "498481505" + ) + )] + ItemSprayCanWhite = 498481505i32, + #[strum( + serialize = "ItemSprayCanYellow", + props( + name = r#"Spray Paint (Yellow)"#, + desc = r#"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 = "StructureStackerReverse", + props( + name = r#"Stacker"#, + desc = r#"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. +The 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 = "StructureStacker", + props( + name = r#"Stacker"#, + desc = r#"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 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 = "StructureStairs4x2", + props(name = r#"Stairs"#, desc = r#""#, value = "1405018945") + )] + StructureStairs4X2 = 1405018945i32, + #[strum( + serialize = "StructureStairs4x2RailL", + props(name = r#"Stairs with Rail (Left)"#, desc = r#""#, value = "155214029") + )] + StructureStairs4X2RailL = 155214029i32, + #[strum( + serialize = "StructureStairs4x2RailR", + props( + name = r#"Stairs with Rail (Right)"#, + desc = r#""#, + value = "-212902482" + ) + )] + StructureStairs4X2RailR = -212902482i32, + #[strum( + serialize = "StructureStairs4x2Rails", + props(name = r#"Stairs with Rails"#, desc = r#""#, value = "-1088008720") + )] + StructureStairs4X2Rails = -1088008720i32, + #[strum( + serialize = "StructureStairwellBackLeft", + props(name = r#"Stairwell (Back Left)"#, desc = r#""#, value = "505924160") + )] + StructureStairwellBackLeft = 505924160i32, + #[strum( + serialize = "StructureStairwellBackPassthrough", + props( + name = r#"Stairwell (Back Passthrough)"#, + desc = r#""#, + value = "-862048392" + ) + )] + StructureStairwellBackPassthrough = -862048392i32, + #[strum( + serialize = "StructureStairwellBackRight", + props( + name = r#"Stairwell (Back Right)"#, + desc = r#""#, + value = "-2128896573" + ) + )] + StructureStairwellBackRight = -2128896573i32, + #[strum( + serialize = "StructureStairwellFrontLeft", + props(name = r#"Stairwell (Front Left)"#, desc = r#""#, value = "-37454456") + )] + StructureStairwellFrontLeft = -37454456i32, + #[strum( + serialize = "StructureStairwellFrontPassthrough", + props( + name = r#"Stairwell (Front Passthrough)"#, + desc = r#""#, + value = "-1625452928" + ) + )] + StructureStairwellFrontPassthrough = -1625452928i32, + #[strum( + serialize = "StructureStairwellFrontRight", + props(name = r#"Stairwell (Front Right)"#, desc = r#""#, value = "340210934") + )] + StructureStairwellFrontRight = 340210934i32, + #[strum( + serialize = "StructureStairwellNoDoors", + props(name = r#"Stairwell (No Doors)"#, desc = r#""#, value = "2049879875") + )] + StructureStairwellNoDoors = 2049879875i32, + #[strum( + serialize = "StructureBattery", + props( + name = r#"Station Battery"#, + desc = r#"Providing large-scale, reliable power storage, the Sinotai 'Dianzi' station battery is the heart of most Stationeer bases. +There 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.' +POWER OUTPUT +Able 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 = "StructureBatteryLarge", + props( + name = r#"Station Battery (Large)"#, + desc = r#"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. +There 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.' +POWER OUTPUT +Able 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 = "StructureFrame", + props( + name = r#"Steel Frame"#, + desc = r#"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 = "StructureFrameCornerCut", + props( + name = r#"Steel Frame (Corner Cut)"#, + desc = r#"0.Mode0 +1.Mode1"#, + value = "271315669" + ) + )] + StructureFrameCornerCut = 271315669i32, + #[strum( + serialize = "StructureFrameCorner", + props( + name = r#"Steel Frame (Corner)"#, + desc = r#"More durable than the Iron Frame, steel frames also offer several variations for more complex lattice constructions. +With 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 = "StructureFrameSide", + props( + name = r#"Steel Frame (Side)"#, + desc = r#"More durable than the Iron Frame, steel frames also provide variations for more ornate constructions."#, + value = "-302420053" + ) + )] + StructureFrameSide = -302420053i32, + #[strum( + serialize = "ItemSteelFrames", + props( + name = r#"Steel Frames"#, + desc = r#"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 = "ItemSteelSheets", + props( + name = r#"Steel Sheets"#, + desc = r#"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 = "ItemStelliteGlassSheets", + props( + name = r#"Stellite Glass Sheets"#, + desc = r#"A stronger glass substitute."#, + value = "-2038663432" + ) + )] + ItemStelliteGlassSheets = -2038663432i32, + #[strum( + serialize = "StructureStirlingEngine", + props( + name = r#"Stirling Engine"#, + desc = r#"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. + +When 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. + +Gases 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 = "StopWatch", + props(name = r#"Stop Watch"#, desc = r#""#, value = "-1527229051") + )] + StopWatch = -1527229051i32, + #[strum( + serialize = "StructureSuitStorage", + props( + name = r#"Suit Storage"#, + desc = r#"As tidy as it is useful, the suit storage rack holds an Eva Suit, Space Helmet and a Jetpack Basic. +When 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. +All 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 = "StructureLogicSwitch2", + props(name = r#"Switch"#, desc = r#""#, value = "321604921") + )] + StructureLogicSwitch2 = 321604921i32, + #[strum( + serialize = "ItemPlantSwitchGrass", + props(name = r#"Switch Grass"#, desc = r#""#, value = "-532672323") + )] + ItemPlantSwitchGrass = -532672323i32, + #[strum( + serialize = "SeedBag_Switchgrass", + props(name = r#"Switchgrass Seed"#, desc = r#""#, value = "488360169") + )] + SeedBagSwitchgrass = 488360169i32, + #[strum( + serialize = "ApplianceTabletDock", + props(name = r#"Tablet Dock"#, desc = r#""#, value = "1853941363") + )] + ApplianceTabletDock = 1853941363i32, + #[strum( + serialize = "StructureTankBigInsulated", + props(name = r#"Tank Big (Insulated)"#, desc = r#""#, value = "1280378227") + )] + StructureTankBigInsulated = 1280378227i32, + #[strum( + serialize = "StructureTankConnector", + props( + name = r#"Tank Connector"#, + desc = r#"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 = "StructureTankSmallInsulated", + props(name = r#"Tank Small (Insulated)"#, desc = r#""#, value = "272136332") + )] + StructureTankSmallInsulated = 272136332i32, + #[strum( + serialize = "StructureGroundBasedTelescope", + props( + name = r#"Telescope"#, + desc = r#"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 = "ItemTerrainManipulator", + props( + name = r#"Terrain Manipulator"#, + desc = r#"0.Mode0 +1.Mode1"#, + value = "111280987" + ) + )] + ItemTerrainManipulator = 111280987i32, + #[strum( + serialize = "ItemPlantThermogenic_Creative", + props( + name = r#"Thermogenic Plant Creative"#, + desc = r#""#, + value = "-1208890208" + ) + )] + ItemPlantThermogenicCreative = -1208890208i32, + #[strum( + serialize = "ItemTomato", + props( + name = r#"Tomato"#, + desc = r#"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 = "SeedBag_Tomato", + props( + name = r#"Tomato Seeds"#, + desc = r#"Grow a Tomato."#, + value = "-1922066841" + ) + )] + SeedBagTomato = -1922066841i32, + #[strum( + serialize = "ItemTomatoSoup", + props( + name = r#"Tomato Soup"#, + desc = r#"Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine."#, + value = "688734890" + ) + )] + ItemTomatoSoup = 688734890i32, + #[strum( + serialize = "ItemToolBelt", + props( + name = r#"Tool Belt"#, + desc = r#"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). +Designed 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 = "ItemMkIIToolbelt", + props( + name = r#"Tool Belt MK II"#, + desc = r#"A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy."#, + value = "1467558064" + ) + )] + ItemMkIiToolbelt = 1467558064i32, + #[strum( + serialize = "StructureToolManufactory", + props( + name = r#"Tool Manufactory"#, + desc = r#"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. +Upgrade the device using a Tool Printer Mod for additional recipes and faster processing speeds."#, + value = "-465741100" + ) + )] + StructureToolManufactory = -465741100i32, + #[strum( + serialize = "ToolPrinterMod", + props( + name = r#"Tool Printer Mod"#, + desc = r#"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 = "WeaponTorpedo", + props(name = r#"Torpedo"#, desc = r#""#, value = "-1102977898") + )] + WeaponTorpedo = -1102977898i32, + #[strum( + serialize = "StructureTorpedoRack", + props(name = r#"Torpedo Rack"#, desc = r#""#, value = "1473807953") + )] + StructureTorpedoRack = 1473807953i32, + #[strum( + serialize = "ToyLuna", + props(name = r#"Toy Luna"#, desc = r#""#, value = "94730034") + )] + ToyLuna = 94730034i32, + #[strum( + serialize = "CartridgeTracker", + props(name = r#"Tracker"#, desc = r#""#, value = "81488783") + )] + CartridgeTracker = 81488783i32, + #[strum( + serialize = "ItemBeacon", + props(name = r#"Tracking Beacon"#, desc = r#""#, value = "-869869491") + )] + ItemBeacon = -869869491i32, + #[strum( + serialize = "StructureTraderWaypoint", + props(name = r#"Trader Waypoint"#, desc = r#""#, value = "1570931620") + )] + StructureTraderWaypoint = 1570931620i32, + #[strum( + serialize = "StructureTransformer", + props( + name = r#"Transformer (Large)"#, + desc = r#"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. +Note that transformers operate as data isolators, preventing data flowing into any network beyond it."#, + value = "-1423212473" + ) + )] + StructureTransformer = -1423212473i32, + #[strum( + serialize = "StructureTransformerMedium", + props( + name = r#"Transformer (Medium)"#, + desc = r#"Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. +Medium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W. +Note that transformers also operate as data isolators, preventing data flowing into any network beyond it."#, + value = "-1065725831" + ) + )] + StructureTransformerMedium = -1065725831i32, + #[strum( + serialize = "StructureTransformerSmall", + props( + name = r#"Transformer (Small)"#, + desc = r#"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. +Note that transformers operate as data isolators, preventing data flowing into any network beyond it."#, + value = "-890946730" + ) + )] + StructureTransformerSmall = -890946730i32, + #[strum( + serialize = "StructureTransformerMediumReversed", + props( + name = r#"Transformer Reversed (Medium)"#, + desc = r#"Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. +Medium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W. +Note that transformers also operate as data isolators, preventing data flowing into any network beyond it."#, + value = "833912764" + ) + )] + StructureTransformerMediumReversed = 833912764i32, + #[strum( + serialize = "StructureTransformerSmallReversed", + props( + name = r#"Transformer Reversed (Small)"#, + desc = r#"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. +Note that transformers operate as data isolators, preventing data flowing into any network beyond it."#, + value = "1054059374" + ) + )] + StructureTransformerSmallReversed = 1054059374i32, + #[strum( + serialize = "StructureRocketTransformerSmall", + props( + name = r#"Transformer Small (Rocket)"#, + desc = r#""#, + value = "518925193" + ) + )] + StructureRocketTransformerSmall = 518925193i32, + #[strum( + serialize = "StructurePressurePlateLarge", + props(name = r#"Trigger Plate (Large)"#, desc = r#""#, value = "-2008706143") + )] + StructurePressurePlateLarge = -2008706143i32, + #[strum( + serialize = "StructurePressurePlateMedium", + props(name = r#"Trigger Plate (Medium)"#, desc = r#""#, value = "1269458680") + )] + StructurePressurePlateMedium = 1269458680i32, + #[strum( + serialize = "StructurePressurePlateSmall", + props(name = r#"Trigger Plate (Small)"#, desc = r#""#, value = "-1536471028") + )] + StructurePressurePlateSmall = -1536471028i32, + #[strum( + serialize = "ItemTropicalPlant", + props( + name = r#"Tropical Lily"#, + desc = r#"An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants."#, + value = "-800947386" + ) + )] + ItemTropicalPlant = -800947386i32, + #[strum( + serialize = "StructureTurbineGenerator", + props(name = r#"Turbine Generator"#, desc = r#""#, value = "1282191063") + )] + StructureTurbineGenerator = 1282191063i32, + #[strum( + serialize = "StructureTurboVolumePump", + props( + name = r#"Turbo Volume Pump (Gas)"#, + desc = r#"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 = "StructureLiquidTurboVolumePump", + props( + name = r#"Turbo Volume Pump (Liquid)"#, + desc = r#"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 = "StructureChuteUmbilicalMale", + props( + name = r#"Umbilical (Chute)"#, + desc = r#"0.Left +1.Center +2.Right"#, + value = "-958884053" + ) + )] + StructureChuteUmbilicalMale = -958884053i32, + #[strum( + serialize = "StructureGasUmbilicalMale", + props( + name = r#"Umbilical (Gas)"#, + desc = r#"0.Left +1.Center +2.Right"#, + value = "-1814939203" + ) + )] + StructureGasUmbilicalMale = -1814939203i32, + #[strum( + serialize = "StructureLiquidUmbilicalMale", + props( + name = r#"Umbilical (Liquid)"#, + desc = r#"0.Left +1.Center +2.Right"#, + value = "-1798420047" + ) + )] + StructureLiquidUmbilicalMale = -1798420047i32, + #[strum( + serialize = "StructurePowerUmbilicalMale", + props( + name = r#"Umbilical (Power)"#, + desc = r#"0.Left +1.Center +2.Right"#, + value = "1529453938" + ) + )] + StructurePowerUmbilicalMale = 1529453938i32, + #[strum( + serialize = "StructureChuteUmbilicalFemale", + props( + name = r#"Umbilical Socket (Chute)"#, + desc = r#""#, + value = "-1918892177" + ) + )] + StructureChuteUmbilicalFemale = -1918892177i32, + #[strum( + serialize = "StructureGasUmbilicalFemale", + props( + name = r#"Umbilical Socket (Gas)"#, + desc = r#""#, + value = "-1680477930" + ) + )] + StructureGasUmbilicalFemale = -1680477930i32, + #[strum( + serialize = "StructureLiquidUmbilicalFemale", + props( + name = r#"Umbilical Socket (Liquid)"#, + desc = r#""#, + value = "1734723642" + ) + )] + StructureLiquidUmbilicalFemale = 1734723642i32, + #[strum( + serialize = "StructurePowerUmbilicalFemale", + props( + name = r#"Umbilical Socket (Power)"#, + desc = r#""#, + value = "101488029" + ) + )] + StructurePowerUmbilicalFemale = 101488029i32, + #[strum( + serialize = "StructureChuteUmbilicalFemaleSide", + props( + name = r#"Umbilical Socket Angle (Chute)"#, + desc = r#""#, + value = "-659093969" + ) + )] + StructureChuteUmbilicalFemaleSide = -659093969i32, + #[strum( + serialize = "StructureGasUmbilicalFemaleSide", + props( + name = r#"Umbilical Socket Angle (Gas)"#, + desc = r#""#, + value = "-648683847" + ) + )] + StructureGasUmbilicalFemaleSide = -648683847i32, + #[strum( + serialize = "StructureLiquidUmbilicalFemaleSide", + props( + name = r#"Umbilical Socket Angle (Liquid)"#, + desc = r#""#, + value = "1220870319" + ) + )] + StructureLiquidUmbilicalFemaleSide = 1220870319i32, + #[strum( + serialize = "StructurePowerUmbilicalFemaleSide", + props( + name = r#"Umbilical Socket Angle (Power)"#, + desc = r#""#, + value = "1922506192" + ) + )] + StructurePowerUmbilicalFemaleSide = 1922506192i32, + #[strum( + serialize = "UniformCommander", + props(name = r#"Uniform Commander"#, desc = r#""#, value = "-2083426457") + )] + UniformCommander = -2083426457i32, + #[strum( + serialize = "StructureUnloader", + props( + name = r#"Unloader"#, + desc = r#"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. + +Output = 0 exporting the main item +Output = 1 exporting items inside and eventually the main item."#, + value = "750118160" + ) + )] + StructureUnloader = 750118160i32, + #[strum( + serialize = "StructureUprightWindTurbine", + props( + name = r#"Upright Wind Turbine"#, + desc = r#"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. +While 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 = "StructureValve", + props(name = r#"Valve"#, desc = r#""#, value = "-692036078") + )] + StructureValve = -692036078i32, + #[strum( + serialize = "StructureVendingMachine", + props( + name = r#"Vending Machine"#, + desc = r#"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 = "StructureVolumePump", + props( + name = r#"Volume Pump"#, + desc = r#"The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks."#, + value = "-321403609" + ) + )] + StructureVolumePump = -321403609i32, + #[strum( + serialize = "StructureWallArchArrow", + props(name = r#"Wall (Arch Arrow)"#, desc = r#""#, value = "1649708822") + )] + StructureWallArchArrow = 1649708822i32, + #[strum( + serialize = "StructureWallArchCornerRound", + props( + name = r#"Wall (Arch Corner Round)"#, + desc = r#""#, + value = "1794588890" + ) + )] + StructureWallArchCornerRound = 1794588890i32, + #[strum( + serialize = "StructureWallArchCornerSquare", + props( + name = r#"Wall (Arch Corner Square)"#, + desc = r#""#, + value = "-1963016580" + ) + )] + StructureWallArchCornerSquare = -1963016580i32, + #[strum( + serialize = "StructureWallArchCornerTriangle", + props( + name = r#"Wall (Arch Corner Triangle)"#, + desc = r#""#, + value = "1281911841" + ) + )] + StructureWallArchCornerTriangle = 1281911841i32, + #[strum( + serialize = "StructureWallArchPlating", + props(name = r#"Wall (Arch Plating)"#, desc = r#""#, value = "1182510648") + )] + StructureWallArchPlating = 1182510648i32, + #[strum( + serialize = "StructureWallArchTwoTone", + props(name = r#"Wall (Arch Two Tone)"#, desc = r#""#, value = "782529714") + )] + StructureWallArchTwoTone = 782529714i32, + #[strum( + serialize = "StructureWallArch", + props(name = r#"Wall (Arch)"#, desc = r#""#, value = "-858143148") + )] + StructureWallArch = -858143148i32, + #[strum( + serialize = "StructureWallFlatCornerRound", + props( + name = r#"Wall (Flat Corner Round)"#, + desc = r#""#, + value = "898708250" + ) + )] + StructureWallFlatCornerRound = 898708250i32, + #[strum( + serialize = "StructureWallFlatCornerSquare", + props( + name = r#"Wall (Flat Corner Square)"#, + desc = r#""#, + value = "298130111" + ) + )] + StructureWallFlatCornerSquare = 298130111i32, + #[strum( + serialize = "StructureWallFlatCornerTriangleFlat", + props( + name = r#"Wall (Flat Corner Triangle Flat)"#, + desc = r#""#, + value = "-1161662836" + ) + )] + StructureWallFlatCornerTriangleFlat = -1161662836i32, + #[strum( + serialize = "StructureWallFlatCornerTriangle", + props( + name = r#"Wall (Flat Corner Triangle)"#, + desc = r#""#, + value = "2097419366" + ) + )] + StructureWallFlatCornerTriangle = 2097419366i32, + #[strum( + serialize = "StructureWallFlat", + props(name = r#"Wall (Flat)"#, desc = r#""#, value = "1635864154") + )] + StructureWallFlat = 1635864154i32, + #[strum( + serialize = "StructureWallGeometryCorner", + props(name = r#"Wall (Geometry Corner)"#, desc = r#""#, value = "1979212240") + )] + StructureWallGeometryCorner = 1979212240i32, + #[strum( + serialize = "StructureWallGeometryStreight", + props( + name = r#"Wall (Geometry Straight)"#, + desc = r#""#, + value = "1049735537" + ) + )] + StructureWallGeometryStreight = 1049735537i32, + #[strum( + serialize = "StructureWallGeometryTMirrored", + props( + name = r#"Wall (Geometry T Mirrored)"#, + desc = r#""#, + value = "-1427845483" + ) + )] + StructureWallGeometryTMirrored = -1427845483i32, + #[strum( + serialize = "StructureWallGeometryT", + props(name = r#"Wall (Geometry T)"#, desc = r#""#, value = "1602758612") + )] + StructureWallGeometryT = 1602758612i32, + #[strum( + serialize = "StructureWallLargePanelArrow", + props( + name = r#"Wall (Large Panel Arrow)"#, + desc = r#""#, + value = "-776581573" + ) + )] + StructureWallLargePanelArrow = -776581573i32, + #[strum( + serialize = "StructureWallLargePanel", + props(name = r#"Wall (Large Panel)"#, desc = r#""#, value = "1492930217") + )] + StructureWallLargePanel = 1492930217i32, + #[strum( + serialize = "StructureWallPaddedArchCorner", + props( + name = r#"Wall (Padded Arch Corner)"#, + desc = r#""#, + value = "-1126688298" + ) + )] + StructureWallPaddedArchCorner = -1126688298i32, + #[strum( + serialize = "StructureWallPaddedArchLightFittingTop", + props( + name = r#"Wall (Padded Arch Light Fitting Top)"#, + desc = r#""#, + value = "1171987947" + ) + )] + StructureWallPaddedArchLightFittingTop = 1171987947i32, + #[strum( + serialize = "StructureWallPaddedArchLightsFittings", + props( + name = r#"Wall (Padded Arch Lights Fittings)"#, + desc = r#""#, + value = "-1546743960" + ) + )] + StructureWallPaddedArchLightsFittings = -1546743960i32, + #[strum( + serialize = "StructureWallPaddedArch", + props(name = r#"Wall (Padded Arch)"#, desc = r#""#, value = "1590330637") + )] + StructureWallPaddedArch = 1590330637i32, + #[strum( + serialize = "StructureWallPaddedCornerThin", + props( + name = r#"Wall (Padded Corner Thin)"#, + desc = r#""#, + value = "1183203913" + ) + )] + StructureWallPaddedCornerThin = 1183203913i32, + #[strum( + serialize = "StructureWallPaddedCorner", + props(name = r#"Wall (Padded Corner)"#, desc = r#""#, value = "-155945899") + )] + StructureWallPaddedCorner = -155945899i32, + #[strum( + serialize = "StructureWallPaddedNoBorderCorner", + props( + name = r#"Wall (Padded No Border Corner)"#, + desc = r#""#, + value = "179694804" + ) + )] + StructureWallPaddedNoBorderCorner = 179694804i32, + #[strum( + serialize = "StructureWallPaddedNoBorder", + props(name = r#"Wall (Padded No Border)"#, desc = r#""#, value = "8846501") + )] + StructureWallPaddedNoBorder = 8846501i32, + #[strum( + serialize = "StructureWallPaddedThinNoBorderCorner", + props( + name = r#"Wall (Padded Thin No Border Corner)"#, + desc = r#""#, + value = "1769527556" + ) + )] + StructureWallPaddedThinNoBorderCorner = 1769527556i32, + #[strum( + serialize = "StructureWallPaddedThinNoBorder", + props( + name = r#"Wall (Padded Thin No Border)"#, + desc = r#""#, + value = "-1611559100" + ) + )] + StructureWallPaddedThinNoBorder = -1611559100i32, + #[strum( + serialize = "StructureWallPaddedWindowThin", + props( + name = r#"Wall (Padded Window Thin)"#, + desc = r#""#, + value = "-37302931" + ) + )] + StructureWallPaddedWindowThin = -37302931i32, + #[strum( + serialize = "StructureWallPaddedWindow", + props(name = r#"Wall (Padded Window)"#, desc = r#""#, value = "2087628940") + )] + StructureWallPaddedWindow = 2087628940i32, + #[strum( + serialize = "StructureWallPaddingArchVent", + props( + name = r#"Wall (Padding Arch Vent)"#, + desc = r#""#, + value = "-1243329828" + ) + )] + StructureWallPaddingArchVent = -1243329828i32, + #[strum( + serialize = "StructureWallPaddingLightFitting", + props( + name = r#"Wall (Padding Light Fitting)"#, + desc = r#""#, + value = "2024882687" + ) + )] + StructureWallPaddingLightFitting = 2024882687i32, + #[strum( + serialize = "StructureWallPaddingThin", + props(name = r#"Wall (Padding Thin)"#, desc = r#""#, value = "-1102403554") + )] + StructureWallPaddingThin = -1102403554i32, + #[strum( + serialize = "StructureWallPadding", + props(name = r#"Wall (Padding)"#, desc = r#""#, value = "635995024") + )] + StructureWallPadding = 635995024i32, + #[strum( + serialize = "StructureWallPlating", + props(name = r#"Wall (Plating)"#, desc = r#""#, value = "26167457") + )] + StructureWallPlating = 26167457i32, + #[strum( + serialize = "StructureWallSmallPanelsAndHatch", + props( + name = r#"Wall (Small Panels And Hatch)"#, + desc = r#""#, + value = "619828719" + ) + )] + StructureWallSmallPanelsAndHatch = 619828719i32, + #[strum( + serialize = "StructureWallSmallPanelsArrow", + props( + name = r#"Wall (Small Panels Arrow)"#, + desc = r#""#, + value = "-639306697" + ) + )] + StructureWallSmallPanelsArrow = -639306697i32, + #[strum( + serialize = "StructureWallSmallPanelsMonoChrome", + props( + name = r#"Wall (Small Panels Mono Chrome)"#, + desc = r#""#, + value = "386820253" + ) + )] + StructureWallSmallPanelsMonoChrome = 386820253i32, + #[strum( + serialize = "StructureWallSmallPanelsOpen", + props( + name = r#"Wall (Small Panels Open)"#, + desc = r#""#, + value = "-1407480603" + ) + )] + StructureWallSmallPanelsOpen = -1407480603i32, + #[strum( + serialize = "StructureWallSmallPanelsTwoTone", + props( + name = r#"Wall (Small Panels Two Tone)"#, + desc = r#""#, + value = "1709994581" + ) + )] + StructureWallSmallPanelsTwoTone = 1709994581i32, + #[strum( + serialize = "StructureWallCooler", + props( + name = r#"Wall Cooler"#, + desc = r#"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. +In 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. + +EFFICIENCY +The 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. +The 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. +ERRORS +If the wall cooler is flashing an error then it is missing one of the following: + +- Pipe connection to the wall cooler. +- Gas in the connected pipes, or pressure is too low. +- Atmosphere in the surrounding environment or pressure is too low. + +For more information about how to control temperatures, consult the temperature control Guides page."#, + value = "-739292323" + ) + )] + StructureWallCooler = -739292323i32, + #[strum( + serialize = "StructureWallHeater", + props( + name = r#"Wall Heater"#, + desc = r#"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 = "StructureWallLight", + props(name = r#"Wall Light"#, desc = r#""#, value = "-1860064656") + )] + StructureWallLight = -1860064656i32, + #[strum( + serialize = "StructureWallLightBattery", + props(name = r#"Wall Light (Battery)"#, desc = r#""#, value = "-1306415132") + )] + StructureWallLightBattery = -1306415132i32, + #[strum( + serialize = "StructureLightLongAngled", + props( + name = r#"Wall Light (Long Angled)"#, + desc = r#""#, + value = "1847265835" + ) + )] + StructureLightLongAngled = 1847265835i32, + #[strum( + serialize = "StructureLightLongWide", + props(name = r#"Wall Light (Long Wide)"#, desc = r#""#, value = "555215790") + )] + StructureLightLongWide = 555215790i32, + #[strum( + serialize = "StructureLightLong", + props(name = r#"Wall Light (Long)"#, desc = r#""#, value = "797794350") + )] + StructureLightLong = 797794350i32, + #[strum( + serialize = "StructureWallVent", + props( + name = r#"Wall Vent"#, + desc = r#"Used to mix atmospheres passively between two walls."#, + value = "-1177469307" + ) + )] + StructureWallVent = -1177469307i32, + #[strum( + serialize = "ItemWaterBottle", + props( + name = r#"Water Bottle"#, + desc = r#"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 = "StructureWaterBottleFiller", + props(name = r#"Water Bottle Filler"#, desc = r#""#, value = "-1178961954") + )] + StructureWaterBottleFiller = -1178961954i32, + #[strum( + serialize = "StructureWaterBottleFillerBottom", + props( + name = r#"Water Bottle Filler Bottom"#, + desc = r#""#, + value = "1433754995" + ) + )] + StructureWaterBottleFillerBottom = 1433754995i32, + #[strum( + serialize = "StructureWaterPurifier", + props( + name = r#"Water Purifier"#, + desc = r#"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 = "StructureWaterBottleFillerPowered", + props(name = r#"Waterbottle Filler"#, desc = r#""#, value = "-756587791") + )] + StructureWaterBottleFillerPowered = -756587791i32, + #[strum( + serialize = "StructureWaterBottleFillerPoweredBottom", + props(name = r#"Waterbottle Filler"#, desc = r#""#, value = "1986658780") + )] + StructureWaterBottleFillerPoweredBottom = 1986658780i32, + #[strum( + serialize = "WeaponEnergy", + props(name = r#"Weapon Energy"#, desc = r#""#, value = "789494694") + )] + WeaponEnergy = 789494694i32, + #[strum( + serialize = "StructureWeatherStation", + props( + name = r#"Weather Station"#, + desc = r#"0.NoStorm +1.StormIncoming +2.InStorm"#, + value = "1997212478" + ) + )] + StructureWeatherStation = 1997212478i32, + #[strum( + serialize = "ItemWeldingTorch", + props( + name = r#"Welding Torch"#, + desc = r#"Stored in the standard issue Stationeers Tool Belt, the Arlite welding torch is used to construct a range of essential structures. +An 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 = "ItemWheat", + props( + name = r#"Wheat"#, + desc = r#"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 = "SeedBag_Wheet", + props( + name = r#"Wheat Seeds"#, + desc = r#"Grow some Wheat."#, + value = "-654756733" + ) + )] + SeedBagWheet = -654756733i32, + #[strum( + serialize = "StructureWindTurbine", + props( + name = r#"Wind Turbine"#, + desc = r#"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. +While 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 = "StructureWindowShutter", + props( + name = r#"Window Shutter"#, + desc = r#"For those special, private moments, a window that can be closed to prying eyes. + +When closed, has the heat transfer characteristics of a basic wall. Requires power, and can be connected to logic systems."#, + value = "2056377335" + ) + )] + StructureWindowShutter = 2056377335i32, + #[strum( + serialize = "ItemPlantEndothermic_Genepool1", + props( + name = r#"Winterspawn (Alpha variant)"#, + desc = r#"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 = "ItemPlantEndothermic_Genepool2", + props( + name = r#"Winterspawn (Beta variant)"#, + desc = r#"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 = "ItemWireCutters", + props( + name = r#"Wire Cutters"#, + desc = r#"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 = "ItemWirelessBatteryCellExtraLarge", + props( + name = r#"Wireless Battery Cell Extra Large"#, + desc = r#"0.Empty +1.Critical +2.VeryLow +3.Low +4.Medium +5.High +6.Full"#, + value = "-504717121" + ) + )] + ItemWirelessBatteryCellExtraLarge = -504717121i32, + #[strum( + serialize = "ItemWreckageAirConditioner2", + props( + name = r#"Wreckage Air Conditioner"#, + desc = r#""#, + value = "169888054" + ) + )] + ItemWreckageAirConditioner2 = 169888054i32, + #[strum( + serialize = "ItemWreckageAirConditioner1", + props( + name = r#"Wreckage Air Conditioner"#, + desc = r#""#, + value = "-1826023284" + ) + )] + ItemWreckageAirConditioner1 = -1826023284i32, + #[strum( + serialize = "ItemWreckageHydroponicsTray1", + props( + name = r#"Wreckage Hydroponics Tray"#, + desc = r#""#, + value = "-310178617" + ) + )] + ItemWreckageHydroponicsTray1 = -310178617i32, + #[strum( + serialize = "ItemWreckageLargeExtendableRadiator01", + props( + name = r#"Wreckage Large Extendable Radiator"#, + desc = r#""#, + value = "-997763" + ) + )] + ItemWreckageLargeExtendableRadiator01 = -997763i32, + #[strum( + serialize = "ItemWreckageStructureRTG1", + props(name = r#"Wreckage Structure RTG"#, desc = r#""#, value = "391453348") + )] + ItemWreckageStructureRtg1 = 391453348i32, + #[strum( + serialize = "ItemWreckageStructureWeatherStation003", + props( + name = r#"Wreckage Structure Weather Station"#, + desc = r#""#, + value = "542009679" + ) + )] + ItemWreckageStructureWeatherStation003 = 542009679i32, + #[strum( + serialize = "ItemWreckageStructureWeatherStation002", + props( + name = r#"Wreckage Structure Weather Station"#, + desc = r#""#, + value = "1464424921" + ) + )] + ItemWreckageStructureWeatherStation002 = 1464424921i32, + #[strum( + serialize = "ItemWreckageStructureWeatherStation005", + props( + name = r#"Wreckage Structure Weather Station"#, + desc = r#""#, + value = "-919745414" + ) + )] + ItemWreckageStructureWeatherStation005 = -919745414i32, + #[strum( + serialize = "ItemWreckageStructureWeatherStation007", + props( + name = r#"Wreckage Structure Weather Station"#, + desc = r#""#, + value = "656649558" + ) + )] + ItemWreckageStructureWeatherStation007 = 656649558i32, + #[strum( + serialize = "ItemWreckageStructureWeatherStation001", + props( + name = r#"Wreckage Structure Weather Station"#, + desc = r#""#, + value = "-834664349" + ) + )] + ItemWreckageStructureWeatherStation001 = -834664349i32, + #[strum( + serialize = "ItemWreckageStructureWeatherStation006", + props( + name = r#"Wreckage Structure Weather Station"#, + desc = r#""#, + value = "1344576960" + ) + )] + ItemWreckageStructureWeatherStation006 = 1344576960i32, + #[strum( + serialize = "ItemWreckageStructureWeatherStation004", + props( + name = r#"Wreckage Structure Weather Station"#, + desc = r#""#, + value = "-1104478996" + ) + )] + ItemWreckageStructureWeatherStation004 = -1104478996i32, + #[strum( + serialize = "ItemWreckageStructureWeatherStation008", + props( + name = r#"Wreckage Structure Weather Station"#, + desc = r#""#, + value = "-1214467897" + ) + )] + ItemWreckageStructureWeatherStation008 = -1214467897i32, + #[strum( + serialize = "ItemWreckageTurbineGenerator1", + props( + name = r#"Wreckage Turbine Generator"#, + desc = r#""#, + value = "-1662394403" + ) + )] + ItemWreckageTurbineGenerator1 = -1662394403i32, + #[strum( + serialize = "ItemWreckageTurbineGenerator2", + props( + name = r#"Wreckage Turbine Generator"#, + desc = r#""#, + value = "98602599" + ) + )] + ItemWreckageTurbineGenerator2 = 98602599i32, + #[strum( + serialize = "ItemWreckageTurbineGenerator3", + props( + name = r#"Wreckage Turbine Generator"#, + desc = r#""#, + value = "1927790321" + ) + )] + ItemWreckageTurbineGenerator3 = 1927790321i32, + #[strum( + serialize = "ItemWreckageWallCooler1", + props(name = r#"Wreckage Wall Cooler"#, desc = r#""#, value = "-1682930158") + )] + ItemWreckageWallCooler1 = -1682930158i32, + #[strum( + serialize = "ItemWreckageWallCooler2", + props(name = r#"Wreckage Wall Cooler"#, desc = r#""#, value = "45733800") + )] + ItemWreckageWallCooler2 = 45733800i32, + #[strum( + serialize = "ItemWrench", + props( + name = r#"Wrench"#, + desc = r#"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 = "CartridgeElectronicReader", + props(name = r#"eReader"#, desc = r#""#, value = "-1462180176") + )] + CartridgeElectronicReader = -1462180176i32, +} diff --git a/ic10emu/src/vm/enums/script_enums.rs b/ic10emu/src/vm/enums/script_enums.rs new file mode 100644 index 0000000..fc6f05f --- /dev/null +++ b/ic10emu/src/vm/enums/script_enums.rs @@ -0,0 +1,2275 @@ +// ================================================= +// !! <-----> DO NOT MODIFY <-----> !! +// +// This module was automatically generated by an +// xtask +// +// run `cargo xtask generate` from the workspace +// to regenerate +// +// ================================================= + +use serde::{Deserialize, Serialize}; +use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum LogicBatchMethod { + #[strum(serialize = "Average", props(docs = r#""#, value = "0"))] + Average = 0u8, + #[strum(serialize = "Maximum", props(docs = r#""#, value = "3"))] + Maximum = 3u8, + #[strum(serialize = "Minimum", props(docs = r#""#, value = "2"))] + Minimum = 2u8, + #[strum(serialize = "Sum", props(docs = r#""#, value = "1"))] + Sum = 1u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum LogicReagentMode { + #[strum(serialize = "Contents", props(docs = r#""#, value = "0"))] + Contents = 0u8, + #[strum(serialize = "Recipe", props(docs = r#""#, value = "2"))] + Recipe = 2u8, + #[strum(serialize = "Required", props(docs = r#""#, value = "1"))] + Required = 1u8, + #[strum(serialize = "TotalContents", props(docs = r#""#, value = "3"))] + TotalContents = 3u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] +pub enum LogicSlotType { + #[strum( + serialize = "Charge", + props( + docs = r#"returns current energy charge the slot occupant is holding"#, + value = "10" + ) + )] + Charge = 10u8, + #[strum( + serialize = "ChargeRatio", + props( + docs = r#"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", + props( + docs = r#"returns integer representing the class of object"#, + value = "12" + ) + )] + Class = 12u8, + #[strum( + serialize = "Damage", + props( + docs = r#"returns the damage state of the item in the slot"#, + value = "4" + ) + )] + Damage = 4u8, + #[strum( + serialize = "Efficiency", + props( + docs = r#"returns the growth efficiency of the plant in the slot"#, + value = "5" + ) + )] + Efficiency = 5u8, + #[strum( + serialize = "FilterType", + props(docs = r#"No description available"#, value = "25") + )] + FilterType = 25u8, + #[strum( + serialize = "Growth", + props( + docs = r#"returns the current growth state of the plant in the slot"#, + value = "7" + ) + )] + Growth = 7u8, + #[strum( + serialize = "Health", + props(docs = r#"returns the health of the plant in the slot"#, value = "6") + )] + Health = 6u8, + #[strum( + serialize = "LineNumber", + props( + docs = r#"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 = "Lock", + props(docs = r#"No description available"#, value = "23") + )] + Lock = 23u8, + #[strum( + serialize = "Mature", + props( + docs = r#"returns 1 if the plant in this slot is mature, 0 when it isn't"#, + value = "16" + ) + )] + Mature = 16u8, + #[strum( + serialize = "MaxQuantity", + props( + docs = r#"returns the max stack size of the item in the slot"#, + value = "15" + ) + )] + MaxQuantity = 15u8, + #[strum(serialize = "None", props(docs = r#"No description"#, value = "0"))] + None = 0u8, + #[strum( + serialize = "OccupantHash", + props( + docs = r#"returns the has of the current occupant, the unique identifier of the thing"#, + value = "2" + ) + )] + OccupantHash = 2u8, + #[strum( + serialize = "Occupied", + props( + docs = r#"returns 0 when slot is not occupied, 1 when it is"#, + value = "1" + ) + )] + Occupied = 1u8, + #[strum( + serialize = "On", + props(docs = r#"No description available"#, value = "22") + )] + On = 22u8, + #[strum( + serialize = "Open", + props(docs = r#"No description available"#, value = "21") + )] + Open = 21u8, + #[strum( + serialize = "PrefabHash", + props( + docs = r#"returns the hash of the structure in the slot"#, + value = "17" + ) + )] + PrefabHash = 17u8, + #[strum( + serialize = "Pressure", + props( + docs = r#"returns pressure of the slot occupants internal atmosphere"#, + value = "8" + ) + )] + Pressure = 8u8, + #[strum( + serialize = "PressureAir", + props( + docs = r#"returns pressure in the air tank of the jetpack in this slot"#, + value = "14" + ) + )] + PressureAir = 14u8, + #[strum( + serialize = "PressureWaste", + props( + docs = r#"returns pressure in the waste tank of the jetpack in this slot"#, + value = "13" + ) + )] + PressureWaste = 13u8, + #[strum( + serialize = "Quantity", + props( + docs = r#"returns the current quantity, such as stack size, of the item in the slot"#, + value = "3" + ) + )] + Quantity = 3u8, + #[strum( + serialize = "ReferenceId", + props(docs = r#"Unique Reference Identifier for this object"#, value = "26") + )] + ReferenceId = 26u8, + #[strum( + serialize = "Seeding", + props( + docs = r#"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."#, + value = "18" + ) + )] + Seeding = 18u8, + #[strum( + serialize = "SortingClass", + props(docs = r#"No description available"#, value = "24") + )] + SortingClass = 24u8, + #[strum( + serialize = "Temperature", + props( + docs = r#"returns temperature of the slot occupants internal atmosphere"#, + value = "9" + ) + )] + Temperature = 9u8, + #[strum( + serialize = "Volume", + props(docs = r#"No description available"#, value = "20") + )] + Volume = 20u8, +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u16)] +pub enum LogicType { + #[strum( + serialize = "Acceleration", + props( + docs = r#"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."#, + value = "216" + ) + )] + Acceleration = 216u16, + #[strum( + serialize = "Activate", + props( + docs = r#"1 if device is activated (usually means running), otherwise 0"#, + value = "9" + ) + )] + Activate = 9u16, + #[strum( + serialize = "AirRelease", + props( + docs = r#"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 = "AlignmentError", + props( + docs = r#"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 = "Apex", + props( + docs = r#"The lowest altitude that the rocket will reach before it starts travelling upwards again."#, + value = "238" + ) + )] + Apex = 238u16, + #[strum( + serialize = "AutoLand", + props( + docs = r#"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 = "AutoShutOff", + props( + docs = r#"Turns off all devices in the rocket upon reaching destination"#, + value = "218" + ) + )] + AutoShutOff = 218u16, + #[strum( + serialize = "BestContactFilter", + props( + docs = r#"Filters the satellite's auto selection of targets to a single reference ID."#, + value = "267" + ) + )] + BestContactFilter = 267u16, + #[strum(serialize = "Bpm", props(docs = r#"Bpm"#, value = "103"))] + Bpm = 103u16, + #[strum( + serialize = "BurnTimeRemaining", + props( + docs = r#"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."#, + value = "225" + ) + )] + BurnTimeRemaining = 225u16, + #[strum( + serialize = "CelestialHash", + props( + docs = r#"The current hash of the targeted celestial object."#, + value = "242" + ) + )] + CelestialHash = 242u16, + #[strum( + serialize = "CelestialParentHash", + props( + docs = r#"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 = "Channel0", + props( + docs = r#"Channel on a cable network which should be considered volatile"#, + value = "165" + ) + )] + Channel0 = 165u16, + #[strum( + serialize = "Channel1", + props( + docs = r#"Channel on a cable network which should be considered volatile"#, + value = "166" + ) + )] + Channel1 = 166u16, + #[strum( + serialize = "Channel2", + props( + docs = r#"Channel on a cable network which should be considered volatile"#, + value = "167" + ) + )] + Channel2 = 167u16, + #[strum( + serialize = "Channel3", + props( + docs = r#"Channel on a cable network which should be considered volatile"#, + value = "168" + ) + )] + Channel3 = 168u16, + #[strum( + serialize = "Channel4", + props( + docs = r#"Channel on a cable network which should be considered volatile"#, + value = "169" + ) + )] + Channel4 = 169u16, + #[strum( + serialize = "Channel5", + props( + docs = r#"Channel on a cable network which should be considered volatile"#, + value = "170" + ) + )] + Channel5 = 170u16, + #[strum( + serialize = "Channel6", + props( + docs = r#"Channel on a cable network which should be considered volatile"#, + value = "171" + ) + )] + Channel6 = 171u16, + #[strum( + serialize = "Channel7", + props( + docs = r#"Channel on a cable network which should be considered volatile"#, + value = "172" + ) + )] + Channel7 = 172u16, + #[strum( + serialize = "Charge", + props(docs = r#"The current charge the device has"#, value = "11") + )] + Charge = 11u16, + #[strum( + serialize = "Chart", + props( + docs = r#"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 = "ChartedNavPoints", + props( + docs = r#"The number of charted NavPoints at the rocket's target Space Map Location."#, + value = "259" + ) + )] + ChartedNavPoints = 259u16, + #[strum( + serialize = "ClearMemory", + props( + docs = r#"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 = "CollectableGoods", + props( + docs = r#"Gets the cost of fuel to return the rocket to your current world."#, + value = "101" + ) + )] + CollectableGoods = 101u16, + #[strum( + serialize = "Color", + props( + docs = r#" + 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. + +0: Blue +1: Grey +2: Green +3: Orange +4: Red +5: Yellow +6: White +7: Black +8: Brown +9: Khaki +10: Pink +11: Purple + + 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. + "#, + value = "38" + ) + )] + Color = 38u16, + #[strum( + serialize = "Combustion", + props( + docs = r#"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."#, + value = "98" + ) + )] + Combustion = 98u16, + #[strum( + serialize = "CombustionInput", + props( + docs = r#"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", + props( + docs = r#"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 = "CombustionLimiter", + props( + docs = r#"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 = "CombustionOutput", + props( + docs = r#"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", + props( + docs = r#"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 = "CompletionRatio", + props( + docs = r#"How complete the current production is for this device, between 0 and 1"#, + value = "61" + ) + )] + CompletionRatio = 61u16, + #[strum( + serialize = "ContactTypeId", + props(docs = r#"The type id of the contact."#, value = "198") + )] + ContactTypeId = 198u16, + #[strum( + serialize = "CurrentCode", + props( + docs = r#"The Space Map Address of the rockets current Space Map Location"#, + value = "261" + ) + )] + CurrentCode = 261u16, + #[strum( + serialize = "CurrentResearchPodType", + props(docs = r#""#, value = "93") + )] + CurrentResearchPodType = 93u16, + #[strum( + serialize = "Density", + props( + docs = r#"The density of the rocket's target site's mine-able deposit."#, + value = "262" + ) + )] + Density = 262u16, + #[strum( + serialize = "DestinationCode", + props( + docs = r#"The Space Map Address of the rockets target Space Map Location"#, + value = "215" + ) + )] + DestinationCode = 215u16, + #[strum( + serialize = "Discover", + props( + docs = r#"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 = "DistanceAu", + props( + docs = r#"The current distance to the celestial object, measured in astronomical units."#, + value = "244" + ) + )] + DistanceAu = 244u16, + #[strum( + serialize = "DistanceKm", + props( + docs = r#"The current distance to the celestial object, measured in kilometers."#, + value = "249" + ) + )] + DistanceKm = 249u16, + #[strum( + serialize = "DrillCondition", + props( + docs = r#"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 = "DryMass", + props( + docs = r#"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 = "Eccentricity", + props( + docs = r#"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 = "ElevatorLevel", + props(docs = r#"Level the elevator is currently at"#, value = "40") + )] + ElevatorLevel = 40u16, + #[strum( + serialize = "ElevatorSpeed", + props(docs = r#"Current speed of the elevator"#, value = "39") + )] + ElevatorSpeed = 39u16, + #[strum( + serialize = "EntityState", + props( + docs = r#"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."#, + value = "239" + ) + )] + EntityState = 239u16, + #[strum( + serialize = "EnvironmentEfficiency", + props( + docs = r#"The Environment Efficiency reported by the machine, as a float between 0 and 1"#, + value = "104" + ) + )] + EnvironmentEfficiency = 104u16, + #[strum( + serialize = "Error", + props(docs = r#"1 if device is in error state, otherwise 0"#, value = "4") + )] + Error = 4u16, + #[strum( + serialize = "ExhaustVelocity", + props(docs = r#"The velocity of the exhaust gas in m/s"#, value = "235") + )] + ExhaustVelocity = 235u16, + #[strum( + serialize = "ExportCount", + props( + docs = r#"How many items exported since last ClearMemory"#, + value = "63" + ) + )] + ExportCount = 63u16, + #[strum( + serialize = "ExportQuantity", + props( + deprecated = "true", + docs = r#"Total quantity of items exported by the device"#, + value = "31" + ) + )] + ExportQuantity = 31u16, + #[strum( + serialize = "ExportSlotHash", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "42") + )] + ExportSlotHash = 42u16, + #[strum( + serialize = "ExportSlotOccupant", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "32") + )] + ExportSlotOccupant = 32u16, + #[strum( + serialize = "Filtration", + props( + docs = r#"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"#, + value = "74" + ) + )] + Filtration = 74u16, + #[strum( + serialize = "FlightControlRule", + props( + docs = r#"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 = "Flush", + props( + docs = r#"Set to 1 to activate the flush function on the device"#, + value = "174" + ) + )] + Flush = 174u16, + #[strum( + serialize = "ForceWrite", + props(docs = r#"Forces Logic Writer devices to rewrite value"#, value = "85") + )] + ForceWrite = 85u16, + #[strum( + serialize = "ForwardX", + props( + docs = r#"The direction the entity is facing expressed as a normalized vector"#, + value = "227" + ) + )] + ForwardX = 227u16, + #[strum( + serialize = "ForwardY", + props( + docs = r#"The direction the entity is facing expressed as a normalized vector"#, + value = "228" + ) + )] + ForwardY = 228u16, + #[strum( + serialize = "ForwardZ", + props( + docs = r#"The direction the entity is facing expressed as a normalized vector"#, + value = "229" + ) + )] + ForwardZ = 229u16, + #[strum( + serialize = "Fuel", + props( + docs = r#"Gets the cost of fuel to return the rocket to your current world."#, + value = "99" + ) + )] + Fuel = 99u16, + #[strum( + serialize = "Harvest", + props( + docs = r#"Performs the harvesting action for any plant based machinery"#, + value = "69" + ) + )] + Harvest = 69u16, + #[strum( + serialize = "Horizontal", + props(docs = r#"Horizontal setting of the device"#, value = "20") + )] + Horizontal = 20u16, + #[strum( + serialize = "HorizontalRatio", + props(docs = r#"Radio of horizontal setting for device"#, value = "34") + )] + HorizontalRatio = 34u16, + #[strum( + serialize = "Idle", + props( + docs = r#"Returns 1 if the device is currently idle, otherwise 0"#, + value = "37" + ) + )] + Idle = 37u16, + #[strum( + serialize = "ImportCount", + props( + docs = r#"How many items imported since last ClearMemory"#, + value = "64" + ) + )] + ImportCount = 64u16, + #[strum( + serialize = "ImportQuantity", + props( + deprecated = "true", + docs = r#"Total quantity of items imported by the device"#, + value = "29" + ) + )] + ImportQuantity = 29u16, + #[strum( + serialize = "ImportSlotHash", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "43") + )] + ImportSlotHash = 43u16, + #[strum( + serialize = "ImportSlotOccupant", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "30") + )] + ImportSlotOccupant = 30u16, + #[strum( + serialize = "Inclination", + props( + docs = r#"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 = "Index", + props(docs = r#"The current index for the device."#, value = "241") + )] + Index = 241u16, + #[strum( + serialize = "InterrogationProgress", + props( + docs = r#"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"#, + value = "157" + ) + )] + InterrogationProgress = 157u16, + #[strum( + serialize = "LineNumber", + props( + docs = r#"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 = "Lock", + props( + docs = r#"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 = "ManualResearchRequiredPod", + props( + docs = r#"Sets the pod type to search for a certain pod when breaking down a pods."#, + value = "94" + ) + )] + ManualResearchRequiredPod = 94u16, + #[strum( + serialize = "Mass", + props( + docs = r#"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 = "Maximum", + props(docs = r#"Maximum setting of the device"#, value = "23") + )] + Maximum = 23u16, + #[strum( + serialize = "MineablesInQueue", + props( + docs = r#"Returns the amount of mineables AIMEe has queued up to mine."#, + value = "96" + ) + )] + MineablesInQueue = 96u16, + #[strum( + serialize = "MineablesInVicinity", + props( + docs = r#"Returns the amount of potential mineables within an extended area around AIMEe."#, + value = "95" + ) + )] + MineablesInVicinity = 95u16, + #[strum( + serialize = "MinedQuantity", + props( + docs = r#"The total number of resources that have been mined at the rocket's target Space Map Site."#, + value = "266" + ) + )] + MinedQuantity = 266u16, + #[strum( + serialize = "MinimumWattsToContact", + props( + docs = r#"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"#, + value = "163" + ) + )] + MinimumWattsToContact = 163u16, + #[strum( + serialize = "Mode", + props( + docs = r#"Integer for mode state, different devices will have different mode states available to them"#, + value = "3" + ) + )] + Mode = 3u16, + #[strum( + serialize = "NavPoints", + props( + docs = r#"The number of NavPoints at the rocket's target Space Map Location."#, + value = "258" + ) + )] + NavPoints = 258u16, + #[strum( + serialize = "NextWeatherEventTime", + props( + docs = r#"Returns in seconds when the next weather event is inbound."#, + value = "97" + ) + )] + NextWeatherEventTime = 97u16, + #[strum( + serialize = "None", + props(deprecated = "true", docs = r#"No description"#, value = "0") + )] + None = 0u16, + #[strum( + serialize = "On", + props( + docs = r#"The current state of the device, 0 for off, 1 for on"#, + value = "28" + ) + )] + On = 28u16, + #[strum( + serialize = "Open", + props(docs = r#"1 if device is open, otherwise 0"#, value = "2") + )] + Open = 2u16, + #[strum( + serialize = "OperationalTemperatureEfficiency", + props( + docs = r#"How the input pipe's temperature effects the machines efficiency"#, + value = "150" + ) + )] + OperationalTemperatureEfficiency = 150u16, + #[strum( + serialize = "OrbitPeriod", + props( + docs = r#"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 = "Orientation", + props( + docs = r#"The orientation of the entity in degrees in a plane relative towards the north origin"#, + value = "230" + ) + )] + Orientation = 230u16, + #[strum( + serialize = "Output", + props( + docs = r#"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 = "PassedMoles", + props( + docs = r#"The number of moles that passed through this device on the previous simulation tick"#, + value = "234" + ) + )] + PassedMoles = 234u16, + #[strum( + serialize = "Plant", + props( + docs = r#"Performs the planting action for any plant based machinery"#, + value = "68" + ) + )] + Plant = 68u16, + #[strum( + serialize = "PlantEfficiency1", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "52") + )] + PlantEfficiency1 = 52u16, + #[strum( + serialize = "PlantEfficiency2", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "53") + )] + PlantEfficiency2 = 53u16, + #[strum( + serialize = "PlantEfficiency3", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "54") + )] + PlantEfficiency3 = 54u16, + #[strum( + serialize = "PlantEfficiency4", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "55") + )] + PlantEfficiency4 = 55u16, + #[strum( + serialize = "PlantGrowth1", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "48") + )] + PlantGrowth1 = 48u16, + #[strum( + serialize = "PlantGrowth2", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "49") + )] + PlantGrowth2 = 49u16, + #[strum( + serialize = "PlantGrowth3", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "50") + )] + PlantGrowth3 = 50u16, + #[strum( + serialize = "PlantGrowth4", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "51") + )] + PlantGrowth4 = 51u16, + #[strum( + serialize = "PlantHash1", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "56") + )] + PlantHash1 = 56u16, + #[strum( + serialize = "PlantHash2", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "57") + )] + PlantHash2 = 57u16, + #[strum( + serialize = "PlantHash3", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "58") + )] + PlantHash3 = 58u16, + #[strum( + serialize = "PlantHash4", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "59") + )] + PlantHash4 = 59u16, + #[strum( + serialize = "PlantHealth1", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "44") + )] + PlantHealth1 = 44u16, + #[strum( + serialize = "PlantHealth2", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "45") + )] + PlantHealth2 = 45u16, + #[strum( + serialize = "PlantHealth3", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "46") + )] + PlantHealth3 = 46u16, + #[strum( + serialize = "PlantHealth4", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "47") + )] + PlantHealth4 = 47u16, + #[strum( + serialize = "PositionX", + props( + docs = r#"The current position in X dimension in world coordinates"#, + value = "76" + ) + )] + PositionX = 76u16, + #[strum( + serialize = "PositionY", + props( + docs = r#"The current position in Y dimension in world coordinates"#, + value = "77" + ) + )] + PositionY = 77u16, + #[strum( + serialize = "PositionZ", + props( + docs = r#"The current position in Z dimension in world coordinates"#, + value = "78" + ) + )] + PositionZ = 78u16, + #[strum( + serialize = "Power", + props( + docs = r#"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 = "PowerActual", + props( + docs = r#"How much energy the device or network is actually using"#, + value = "26" + ) + )] + PowerActual = 26u16, + #[strum( + serialize = "PowerGeneration", + props(docs = r#"Returns how much power is being generated"#, value = "65") + )] + PowerGeneration = 65u16, + #[strum( + serialize = "PowerPotential", + props( + docs = r#"How much energy the device or network potentially provides"#, + value = "25" + ) + )] + PowerPotential = 25u16, + #[strum( + serialize = "PowerRequired", + props( + docs = r#"Power requested from the device and/or network"#, + value = "36" + ) + )] + PowerRequired = 36u16, + #[strum( + serialize = "PrefabHash", + props(docs = r#"The hash of the structure"#, value = "84") + )] + PrefabHash = 84u16, + #[strum( + serialize = "Pressure", + props(docs = r#"The current pressure reading of the device"#, value = "5") + )] + Pressure = 5u16, + #[strum( + serialize = "PressureEfficiency", + props( + docs = r#"How the pressure of the input pipe and waste pipe effect the machines efficiency"#, + value = "152" + ) + )] + PressureEfficiency = 152u16, + #[strum( + serialize = "PressureExternal", + props(docs = r#"Setting for external pressure safety, in KPa"#, value = "7") + )] + PressureExternal = 7u16, + #[strum( + serialize = "PressureInput", + props( + docs = r#"The current pressure reading of the device's Input Network"#, + value = "106" + ) + )] + PressureInput = 106u16, + #[strum( + serialize = "PressureInput2", + props( + docs = r#"The current pressure reading of the device's Input2 Network"#, + value = "116" + ) + )] + PressureInput2 = 116u16, + #[strum( + serialize = "PressureInternal", + props(docs = r#"Setting for internal pressure safety, in KPa"#, value = "8") + )] + PressureInternal = 8u16, + #[strum( + serialize = "PressureOutput", + props( + docs = r#"The current pressure reading of the device's Output Network"#, + value = "126" + ) + )] + PressureOutput = 126u16, + #[strum( + serialize = "PressureOutput2", + props( + docs = r#"The current pressure reading of the device's Output2 Network"#, + value = "136" + ) + )] + PressureOutput2 = 136u16, + #[strum( + serialize = "PressureSetting", + props( + docs = r#"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"#, + value = "71" + ) + )] + PressureSetting = 71u16, + #[strum( + serialize = "Progress", + props( + docs = r#"Progress of the rocket to the next node on the map expressed as a value between 0-1."#, + value = "214" + ) + )] + Progress = 214u16, + #[strum( + serialize = "Quantity", + props(docs = r#"Total quantity on the device"#, value = "27") + )] + Quantity = 27u16, + #[strum( + serialize = "Ratio", + props( + docs = r#"Context specific value depending on device, 0 to 1 based ratio"#, + value = "24" + ) + )] + Ratio = 24u16, + #[strum( + serialize = "RatioCarbonDioxide", + props( + docs = r#"The ratio of Carbon Dioxide in device atmosphere"#, + value = "15" + ) + )] + RatioCarbonDioxide = 15u16, + #[strum( + serialize = "RatioCarbonDioxideInput", + props( + docs = r#"The ratio of Carbon Dioxide in device's input network"#, + value = "109" + ) + )] + RatioCarbonDioxideInput = 109u16, + #[strum( + serialize = "RatioCarbonDioxideInput2", + props( + docs = r#"The ratio of Carbon Dioxide in device's Input2 network"#, + value = "119" + ) + )] + RatioCarbonDioxideInput2 = 119u16, + #[strum( + serialize = "RatioCarbonDioxideOutput", + props( + docs = r#"The ratio of Carbon Dioxide in device's Output network"#, + value = "129" + ) + )] + RatioCarbonDioxideOutput = 129u16, + #[strum( + serialize = "RatioCarbonDioxideOutput2", + props( + docs = r#"The ratio of Carbon Dioxide in device's Output2 network"#, + value = "139" + ) + )] + RatioCarbonDioxideOutput2 = 139u16, + #[strum( + serialize = "RatioHydrogen", + props( + docs = r#"The ratio of Hydrogen in device's Atmopshere"#, + value = "252" + ) + )] + RatioHydrogen = 252u16, + #[strum( + serialize = "RatioLiquidCarbonDioxide", + props( + docs = r#"The ratio of Liquid Carbon Dioxide in device's Atmosphere"#, + value = "199" + ) + )] + RatioLiquidCarbonDioxide = 199u16, + #[strum( + serialize = "RatioLiquidCarbonDioxideInput", + props( + docs = r#"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"#, + value = "200" + ) + )] + RatioLiquidCarbonDioxideInput = 200u16, + #[strum( + serialize = "RatioLiquidCarbonDioxideInput2", + props( + docs = r#"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"#, + value = "201" + ) + )] + RatioLiquidCarbonDioxideInput2 = 201u16, + #[strum( + serialize = "RatioLiquidCarbonDioxideOutput", + props( + docs = r#"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"#, + value = "202" + ) + )] + RatioLiquidCarbonDioxideOutput = 202u16, + #[strum( + serialize = "RatioLiquidCarbonDioxideOutput2", + props( + docs = r#"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"#, + value = "203" + ) + )] + RatioLiquidCarbonDioxideOutput2 = 203u16, + #[strum( + serialize = "RatioLiquidHydrogen", + props( + docs = r#"The ratio of Liquid Hydrogen in device's Atmopshere"#, + value = "253" + ) + )] + RatioLiquidHydrogen = 253u16, + #[strum( + serialize = "RatioLiquidNitrogen", + props( + docs = r#"The ratio of Liquid Nitrogen in device atmosphere"#, + value = "177" + ) + )] + RatioLiquidNitrogen = 177u16, + #[strum( + serialize = "RatioLiquidNitrogenInput", + props( + docs = r#"The ratio of Liquid Nitrogen in device's input network"#, + value = "178" + ) + )] + RatioLiquidNitrogenInput = 178u16, + #[strum( + serialize = "RatioLiquidNitrogenInput2", + props( + docs = r#"The ratio of Liquid Nitrogen in device's Input2 network"#, + value = "179" + ) + )] + RatioLiquidNitrogenInput2 = 179u16, + #[strum( + serialize = "RatioLiquidNitrogenOutput", + props( + docs = r#"The ratio of Liquid Nitrogen in device's Output network"#, + value = "180" + ) + )] + RatioLiquidNitrogenOutput = 180u16, + #[strum( + serialize = "RatioLiquidNitrogenOutput2", + props( + docs = r#"The ratio of Liquid Nitrogen in device's Output2 network"#, + value = "181" + ) + )] + RatioLiquidNitrogenOutput2 = 181u16, + #[strum( + serialize = "RatioLiquidNitrousOxide", + props( + docs = r#"The ratio of Liquid Nitrous Oxide in device's Atmosphere"#, + value = "209" + ) + )] + RatioLiquidNitrousOxide = 209u16, + #[strum( + serialize = "RatioLiquidNitrousOxideInput", + props( + docs = r#"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"#, + value = "210" + ) + )] + RatioLiquidNitrousOxideInput = 210u16, + #[strum( + serialize = "RatioLiquidNitrousOxideInput2", + props( + docs = r#"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"#, + value = "211" + ) + )] + RatioLiquidNitrousOxideInput2 = 211u16, + #[strum( + serialize = "RatioLiquidNitrousOxideOutput", + props( + docs = r#"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"#, + value = "212" + ) + )] + RatioLiquidNitrousOxideOutput = 212u16, + #[strum( + serialize = "RatioLiquidNitrousOxideOutput2", + props( + docs = r#"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"#, + value = "213" + ) + )] + RatioLiquidNitrousOxideOutput2 = 213u16, + #[strum( + serialize = "RatioLiquidOxygen", + props( + docs = r#"The ratio of Liquid Oxygen in device's Atmosphere"#, + value = "183" + ) + )] + RatioLiquidOxygen = 183u16, + #[strum( + serialize = "RatioLiquidOxygenInput", + props( + docs = r#"The ratio of Liquid Oxygen in device's Input Atmosphere"#, + value = "184" + ) + )] + RatioLiquidOxygenInput = 184u16, + #[strum( + serialize = "RatioLiquidOxygenInput2", + props( + docs = r#"The ratio of Liquid Oxygen in device's Input2 Atmosphere"#, + value = "185" + ) + )] + RatioLiquidOxygenInput2 = 185u16, + #[strum( + serialize = "RatioLiquidOxygenOutput", + props( + docs = r#"The ratio of Liquid Oxygen in device's device's Output Atmosphere"#, + value = "186" + ) + )] + RatioLiquidOxygenOutput = 186u16, + #[strum( + serialize = "RatioLiquidOxygenOutput2", + props( + docs = r#"The ratio of Liquid Oxygen in device's Output2 Atmopshere"#, + value = "187" + ) + )] + RatioLiquidOxygenOutput2 = 187u16, + #[strum( + serialize = "RatioLiquidPollutant", + props( + docs = r#"The ratio of Liquid Pollutant in device's Atmosphere"#, + value = "204" + ) + )] + RatioLiquidPollutant = 204u16, + #[strum( + serialize = "RatioLiquidPollutantInput", + props( + docs = r#"The ratio of Liquid Pollutant in device's Input Atmosphere"#, + value = "205" + ) + )] + RatioLiquidPollutantInput = 205u16, + #[strum( + serialize = "RatioLiquidPollutantInput2", + props( + docs = r#"The ratio of Liquid Pollutant in device's Input2 Atmosphere"#, + value = "206" + ) + )] + RatioLiquidPollutantInput2 = 206u16, + #[strum( + serialize = "RatioLiquidPollutantOutput", + props( + docs = r#"The ratio of Liquid Pollutant in device's device's Output Atmosphere"#, + value = "207" + ) + )] + RatioLiquidPollutantOutput = 207u16, + #[strum( + serialize = "RatioLiquidPollutantOutput2", + props( + docs = r#"The ratio of Liquid Pollutant in device's Output2 Atmopshere"#, + value = "208" + ) + )] + RatioLiquidPollutantOutput2 = 208u16, + #[strum( + serialize = "RatioLiquidVolatiles", + props( + docs = r#"The ratio of Liquid Volatiles in device's Atmosphere"#, + value = "188" + ) + )] + RatioLiquidVolatiles = 188u16, + #[strum( + serialize = "RatioLiquidVolatilesInput", + props( + docs = r#"The ratio of Liquid Volatiles in device's Input Atmosphere"#, + value = "189" + ) + )] + RatioLiquidVolatilesInput = 189u16, + #[strum( + serialize = "RatioLiquidVolatilesInput2", + props( + docs = r#"The ratio of Liquid Volatiles in device's Input2 Atmosphere"#, + value = "190" + ) + )] + RatioLiquidVolatilesInput2 = 190u16, + #[strum( + serialize = "RatioLiquidVolatilesOutput", + props( + docs = r#"The ratio of Liquid Volatiles in device's device's Output Atmosphere"#, + value = "191" + ) + )] + RatioLiquidVolatilesOutput = 191u16, + #[strum( + serialize = "RatioLiquidVolatilesOutput2", + props( + docs = r#"The ratio of Liquid Volatiles in device's Output2 Atmopshere"#, + value = "192" + ) + )] + RatioLiquidVolatilesOutput2 = 192u16, + #[strum( + serialize = "RatioNitrogen", + props(docs = r#"The ratio of nitrogen in device atmosphere"#, value = "16") + )] + RatioNitrogen = 16u16, + #[strum( + serialize = "RatioNitrogenInput", + props( + docs = r#"The ratio of nitrogen in device's input network"#, + value = "110" + ) + )] + RatioNitrogenInput = 110u16, + #[strum( + serialize = "RatioNitrogenInput2", + props( + docs = r#"The ratio of nitrogen in device's Input2 network"#, + value = "120" + ) + )] + RatioNitrogenInput2 = 120u16, + #[strum( + serialize = "RatioNitrogenOutput", + props( + docs = r#"The ratio of nitrogen in device's Output network"#, + value = "130" + ) + )] + RatioNitrogenOutput = 130u16, + #[strum( + serialize = "RatioNitrogenOutput2", + props( + docs = r#"The ratio of nitrogen in device's Output2 network"#, + value = "140" + ) + )] + RatioNitrogenOutput2 = 140u16, + #[strum( + serialize = "RatioNitrousOxide", + props( + docs = r#"The ratio of Nitrous Oxide in device atmosphere"#, + value = "83" + ) + )] + RatioNitrousOxide = 83u16, + #[strum( + serialize = "RatioNitrousOxideInput", + props( + docs = r#"The ratio of Nitrous Oxide in device's input network"#, + value = "114" + ) + )] + RatioNitrousOxideInput = 114u16, + #[strum( + serialize = "RatioNitrousOxideInput2", + props( + docs = r#"The ratio of Nitrous Oxide in device's Input2 network"#, + value = "124" + ) + )] + RatioNitrousOxideInput2 = 124u16, + #[strum( + serialize = "RatioNitrousOxideOutput", + props( + docs = r#"The ratio of Nitrous Oxide in device's Output network"#, + value = "134" + ) + )] + RatioNitrousOxideOutput = 134u16, + #[strum( + serialize = "RatioNitrousOxideOutput2", + props( + docs = r#"The ratio of Nitrous Oxide in device's Output2 network"#, + value = "144" + ) + )] + RatioNitrousOxideOutput2 = 144u16, + #[strum( + serialize = "RatioOxygen", + props(docs = r#"The ratio of oxygen in device atmosphere"#, value = "14") + )] + RatioOxygen = 14u16, + #[strum( + serialize = "RatioOxygenInput", + props( + docs = r#"The ratio of oxygen in device's input network"#, + value = "108" + ) + )] + RatioOxygenInput = 108u16, + #[strum( + serialize = "RatioOxygenInput2", + props( + docs = r#"The ratio of oxygen in device's Input2 network"#, + value = "118" + ) + )] + RatioOxygenInput2 = 118u16, + #[strum( + serialize = "RatioOxygenOutput", + props( + docs = r#"The ratio of oxygen in device's Output network"#, + value = "128" + ) + )] + RatioOxygenOutput = 128u16, + #[strum( + serialize = "RatioOxygenOutput2", + props( + docs = r#"The ratio of oxygen in device's Output2 network"#, + value = "138" + ) + )] + RatioOxygenOutput2 = 138u16, + #[strum( + serialize = "RatioPollutant", + props(docs = r#"The ratio of pollutant in device atmosphere"#, value = "17") + )] + RatioPollutant = 17u16, + #[strum( + serialize = "RatioPollutantInput", + props( + docs = r#"The ratio of pollutant in device's input network"#, + value = "111" + ) + )] + RatioPollutantInput = 111u16, + #[strum( + serialize = "RatioPollutantInput2", + props( + docs = r#"The ratio of pollutant in device's Input2 network"#, + value = "121" + ) + )] + RatioPollutantInput2 = 121u16, + #[strum( + serialize = "RatioPollutantOutput", + props( + docs = r#"The ratio of pollutant in device's Output network"#, + value = "131" + ) + )] + RatioPollutantOutput = 131u16, + #[strum( + serialize = "RatioPollutantOutput2", + props( + docs = r#"The ratio of pollutant in device's Output2 network"#, + value = "141" + ) + )] + RatioPollutantOutput2 = 141u16, + #[strum( + serialize = "RatioPollutedWater", + props( + docs = r#"The ratio of polluted water in device atmosphere"#, + value = "254" + ) + )] + RatioPollutedWater = 254u16, + #[strum( + serialize = "RatioSteam", + props( + docs = r#"The ratio of Steam in device's Atmosphere"#, + value = "193" + ) + )] + RatioSteam = 193u16, + #[strum( + serialize = "RatioSteamInput", + props( + docs = r#"The ratio of Steam in device's Input Atmosphere"#, + value = "194" + ) + )] + RatioSteamInput = 194u16, + #[strum( + serialize = "RatioSteamInput2", + props( + docs = r#"The ratio of Steam in device's Input2 Atmosphere"#, + value = "195" + ) + )] + RatioSteamInput2 = 195u16, + #[strum( + serialize = "RatioSteamOutput", + props( + docs = r#"The ratio of Steam in device's device's Output Atmosphere"#, + value = "196" + ) + )] + RatioSteamOutput = 196u16, + #[strum( + serialize = "RatioSteamOutput2", + props( + docs = r#"The ratio of Steam in device's Output2 Atmopshere"#, + value = "197" + ) + )] + RatioSteamOutput2 = 197u16, + #[strum( + serialize = "RatioVolatiles", + props(docs = r#"The ratio of volatiles in device atmosphere"#, value = "18") + )] + RatioVolatiles = 18u16, + #[strum( + serialize = "RatioVolatilesInput", + props( + docs = r#"The ratio of volatiles in device's input network"#, + value = "112" + ) + )] + RatioVolatilesInput = 112u16, + #[strum( + serialize = "RatioVolatilesInput2", + props( + docs = r#"The ratio of volatiles in device's Input2 network"#, + value = "122" + ) + )] + RatioVolatilesInput2 = 122u16, + #[strum( + serialize = "RatioVolatilesOutput", + props( + docs = r#"The ratio of volatiles in device's Output network"#, + value = "132" + ) + )] + RatioVolatilesOutput = 132u16, + #[strum( + serialize = "RatioVolatilesOutput2", + props( + docs = r#"The ratio of volatiles in device's Output2 network"#, + value = "142" + ) + )] + RatioVolatilesOutput2 = 142u16, + #[strum( + serialize = "RatioWater", + props(docs = r#"The ratio of water in device atmosphere"#, value = "19") + )] + RatioWater = 19u16, + #[strum( + serialize = "RatioWaterInput", + props( + docs = r#"The ratio of water in device's input network"#, + value = "113" + ) + )] + RatioWaterInput = 113u16, + #[strum( + serialize = "RatioWaterInput2", + props( + docs = r#"The ratio of water in device's Input2 network"#, + value = "123" + ) + )] + RatioWaterInput2 = 123u16, + #[strum( + serialize = "RatioWaterOutput", + props( + docs = r#"The ratio of water in device's Output network"#, + value = "133" + ) + )] + RatioWaterOutput = 133u16, + #[strum( + serialize = "RatioWaterOutput2", + props( + docs = r#"The ratio of water in device's Output2 network"#, + value = "143" + ) + )] + RatioWaterOutput2 = 143u16, + #[strum( + serialize = "ReEntryAltitude", + props( + docs = r#"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"#, + value = "237" + ) + )] + ReEntryAltitude = 237u16, + #[strum( + serialize = "Reagents", + props( + docs = r#"Total number of reagents recorded by the device"#, + value = "13" + ) + )] + Reagents = 13u16, + #[strum( + serialize = "RecipeHash", + props( + docs = r#"Current hash of the recipe the device is set to produce"#, + value = "41" + ) + )] + RecipeHash = 41u16, + #[strum( + serialize = "ReferenceId", + props(docs = r#"Unique Reference Identifier for this object"#, value = "217") + )] + ReferenceId = 217u16, + #[strum( + serialize = "RequestHash", + props( + docs = r#"When set to the unique identifier, requests an item of the provided type from the device"#, + value = "60" + ) + )] + RequestHash = 60u16, + #[strum( + serialize = "RequiredPower", + props( + docs = r#"Idle operating power quantity, does not necessarily include extra demand power"#, + value = "33" + ) + )] + RequiredPower = 33u16, + #[strum( + serialize = "ReturnFuelCost", + props( + docs = r#"Gets the fuel remaining in your rocket's fuel tank."#, + value = "100" + ) + )] + ReturnFuelCost = 100u16, + #[strum( + serialize = "Richness", + props( + docs = r#"The richness of the rocket's target site's mine-able deposit."#, + value = "263" + ) + )] + Richness = 263u16, + #[strum( + serialize = "Rpm", + props( + docs = r#"The number of revolutions per minute that the device's spinning mechanism is doing"#, + value = "155" + ) + )] + Rpm = 155u16, + #[strum( + serialize = "SemiMajorAxis", + props( + docs = r#"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 = "Setting", + props( + docs = r#"A variable setting that can be read or written, depending on the device"#, + value = "12" + ) + )] + Setting = 12u16, + #[strum( + serialize = "SettingInput", + props(docs = r#""#, value = "91") + )] + SettingInput = 91u16, + #[strum( + serialize = "SettingOutput", + props(docs = r#""#, value = "92") + )] + SettingOutput = 92u16, + #[strum( + serialize = "SignalID", + props( + docs = r#"Returns the contact ID of the strongest signal from this Satellite"#, + value = "87" + ) + )] + SignalId = 87u16, + #[strum( + serialize = "SignalStrength", + props( + docs = r#"Returns the degree offset of the strongest contact"#, + value = "86" + ) + )] + SignalStrength = 86u16, + #[strum( + serialize = "Sites", + props( + docs = r#"The number of Sites that have been discovered at the rockets target Space Map location."#, + value = "260" + ) + )] + Sites = 260u16, + #[strum( + serialize = "Size", + props( + docs = r#"The size of the rocket's target site's mine-able deposit."#, + value = "264" + ) + )] + Size = 264u16, + #[strum( + serialize = "SizeX", + props( + docs = r#"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"#, + value = "160" + ) + )] + SizeX = 160u16, + #[strum( + serialize = "SizeY", + props( + docs = r#"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"#, + value = "161" + ) + )] + SizeY = 161u16, + #[strum( + serialize = "SizeZ", + props( + docs = r#"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"#, + value = "162" + ) + )] + SizeZ = 162u16, + #[strum( + serialize = "SolarAngle", + props(docs = r#"Solar angle of the device"#, value = "22") + )] + SolarAngle = 22u16, + #[strum( + serialize = "SolarIrradiance", + props(docs = r#""#, value = "176") + )] + SolarIrradiance = 176u16, + #[strum( + serialize = "SoundAlert", + props(docs = r#"Plays a sound alert on the devices speaker"#, value = "175") + )] + SoundAlert = 175u16, + #[strum( + serialize = "Stress", + props( + docs = r#"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"#, + value = "156" + ) + )] + Stress = 156u16, + #[strum( + serialize = "Survey", + props( + docs = r#"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 = "TargetPadIndex", + props( + docs = r#"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 = "TargetX", + props( + docs = r#"The target position in X dimension in world coordinates"#, + value = "88" + ) + )] + TargetX = 88u16, + #[strum( + serialize = "TargetY", + props( + docs = r#"The target position in Y dimension in world coordinates"#, + value = "89" + ) + )] + TargetY = 89u16, + #[strum( + serialize = "TargetZ", + props( + docs = r#"The target position in Z dimension in world coordinates"#, + value = "90" + ) + )] + TargetZ = 90u16, + #[strum( + serialize = "Temperature", + props(docs = r#"The current temperature reading of the device"#, value = "6") + )] + Temperature = 6u16, + #[strum( + serialize = "TemperatureDifferentialEfficiency", + props( + docs = r#"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"#, + value = "151" + ) + )] + TemperatureDifferentialEfficiency = 151u16, + #[strum( + serialize = "TemperatureExternal", + props( + docs = r#"The temperature of the outside of the device, usually the world atmosphere surrounding it"#, + value = "73" + ) + )] + TemperatureExternal = 73u16, + #[strum( + serialize = "TemperatureInput", + props( + docs = r#"The current temperature reading of the device's Input Network"#, + value = "107" + ) + )] + TemperatureInput = 107u16, + #[strum( + serialize = "TemperatureInput2", + props( + docs = r#"The current temperature reading of the device's Input2 Network"#, + value = "117" + ) + )] + TemperatureInput2 = 117u16, + #[strum( + serialize = "TemperatureOutput", + props( + docs = r#"The current temperature reading of the device's Output Network"#, + value = "127" + ) + )] + TemperatureOutput = 127u16, + #[strum( + serialize = "TemperatureOutput2", + props( + docs = r#"The current temperature reading of the device's Output2 Network"#, + value = "137" + ) + )] + TemperatureOutput2 = 137u16, + #[strum( + serialize = "TemperatureSetting", + props( + docs = r#"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"#, + value = "72" + ) + )] + TemperatureSetting = 72u16, + #[strum( + serialize = "Throttle", + props( + docs = r#"Increases the rate at which the machine works (range: 0-100)"#, + value = "154" + ) + )] + Throttle = 154u16, + #[strum( + serialize = "Thrust", + props( + docs = r#"Total current thrust of all rocket engines on the rocket in Newtons."#, + value = "221" + ) + )] + Thrust = 221u16, + #[strum( + serialize = "ThrustToWeight", + props( + docs = r#"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 = "Time", props(docs = r#"Time"#, value = "102"))] + Time = 102u16, + #[strum( + serialize = "TimeToDestination", + props( + docs = r#"Estimated time in seconds until rocket arrives at target destination."#, + value = "224" + ) + )] + TimeToDestination = 224u16, + #[strum( + serialize = "TotalMoles", + props(docs = r#"Returns the total moles of the device"#, value = "66") + )] + TotalMoles = 66u16, + #[strum( + serialize = "TotalMolesInput", + props( + docs = r#"Returns the total moles of the device's Input Network"#, + value = "115" + ) + )] + TotalMolesInput = 115u16, + #[strum( + serialize = "TotalMolesInput2", + props( + docs = r#"Returns the total moles of the device's Input2 Network"#, + value = "125" + ) + )] + TotalMolesInput2 = 125u16, + #[strum( + serialize = "TotalMolesOutput", + props( + docs = r#"Returns the total moles of the device's Output Network"#, + value = "135" + ) + )] + TotalMolesOutput = 135u16, + #[strum( + serialize = "TotalMolesOutput2", + props( + docs = r#"Returns the total moles of the device's Output2 Network"#, + value = "145" + ) + )] + TotalMolesOutput2 = 145u16, + #[strum( + serialize = "TotalQuantity", + props( + docs = r#"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."#, + value = "265" + ) + )] + TotalQuantity = 265u16, + #[strum( + serialize = "TrueAnomaly", + props( + docs = r#"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 = "VelocityMagnitude", + props(docs = r#"The current magnitude of the velocity vector"#, value = "79") + )] + VelocityMagnitude = 79u16, + #[strum( + serialize = "VelocityRelativeX", + props( + docs = r#"The current velocity X relative to the forward vector of this"#, + value = "80" + ) + )] + VelocityRelativeX = 80u16, + #[strum( + serialize = "VelocityRelativeY", + props( + docs = r#"The current velocity Y relative to the forward vector of this"#, + value = "81" + ) + )] + VelocityRelativeY = 81u16, + #[strum( + serialize = "VelocityRelativeZ", + props( + docs = r#"The current velocity Z relative to the forward vector of this"#, + value = "82" + ) + )] + VelocityRelativeZ = 82u16, + #[strum( + serialize = "VelocityX", + props( + docs = r#"The world velocity of the entity in the X axis"#, + value = "231" + ) + )] + VelocityX = 231u16, + #[strum( + serialize = "VelocityY", + props( + docs = r#"The world velocity of the entity in the Y axis"#, + value = "232" + ) + )] + VelocityY = 232u16, + #[strum( + serialize = "VelocityZ", + props( + docs = r#"The world velocity of the entity in the Z axis"#, + value = "233" + ) + )] + VelocityZ = 233u16, + #[strum( + serialize = "Vertical", + props(docs = r#"Vertical setting of the device"#, value = "21") + )] + Vertical = 21u16, + #[strum( + serialize = "VerticalRatio", + props(docs = r#"Radio of vertical setting for device"#, value = "35") + )] + VerticalRatio = 35u16, + #[strum( + serialize = "Volume", + props(docs = r#"Returns the device atmosphere volume"#, value = "67") + )] + Volume = 67u16, + #[strum( + serialize = "VolumeOfLiquid", + props( + docs = r#"The total volume of all liquids in Liters in the atmosphere"#, + value = "182" + ) + )] + VolumeOfLiquid = 182u16, + #[strum( + serialize = "WattsReachingContact", + props( + docs = r#"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 = "Weight", + props( + docs = r#"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."#, + value = "222" + ) + )] + Weight = 222u16, + #[strum( + serialize = "WorkingGasEfficiency", + props( + docs = r#"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"#, + value = "105" + ) + )] + WorkingGasEfficiency = 105u16, +} diff --git a/ic10emu/src/vm/instructions/enums.rs b/ic10emu/src/vm/instructions/enums.rs new file mode 100644 index 0000000..f3a66cf --- /dev/null +++ b/ic10emu/src/vm/instructions/enums.rs @@ -0,0 +1,1076 @@ +// ================================================= +// !! <-----> DO NOT MODIFY <-----> !! +// +// This module was automatically generated by an +// xtask +// +// run `cargo xtask generate` from the workspace +// to regenerate +// +// ================================================= + +use serde::{Deserialize, Serialize}; +use strum::{Display, EnumIter, EnumProperty, EnumString, FromRepr}; + +use crate::vm::instructions::traits::*; +use crate::vm::object::traits::Programmable; +#[derive( + Debug, + Display, + PartialEq, + Eq, + PartialOrd, + Ord, + Clone, + Copy, + Serialize, + Deserialize, + EnumIter, + EnumString, + EnumProperty, + FromRepr, +)] +#[strum(use_phf, serialize_all = "lowercase")] +#[serde(rename_all = "lowercase")] +pub enum InstructionOp { + 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 = "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 = "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, + vm: &crate::vm::VM, + 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(vm, &operands[0], &operands[1]), + Self::Acos => ic.execute_acos(vm, &operands[0], &operands[1]), + Self::Add => ic.execute_add(vm, &operands[0], &operands[1], &operands[2]), + Self::Alias => ic.execute_alias(vm, &operands[0], &operands[1]), + Self::And => ic.execute_and(vm, &operands[0], &operands[1], &operands[2]), + Self::Asin => ic.execute_asin(vm, &operands[0], &operands[1]), + Self::Atan => ic.execute_atan(vm, &operands[0], &operands[1]), + Self::Atan2 => ic.execute_atan2(vm, &operands[0], &operands[1], &operands[2]), + Self::Bap => ic.execute_bap(vm, &operands[0], &operands[1], &operands[2], &operands[3]), + Self::Bapal => { + ic.execute_bapal(vm, &operands[0], &operands[1], &operands[2], &operands[3]) + } + Self::Bapz => ic.execute_bapz(vm, &operands[0], &operands[1], &operands[2]), + Self::Bapzal => ic.execute_bapzal(vm, &operands[0], &operands[1], &operands[2]), + Self::Bdns => ic.execute_bdns(vm, &operands[0], &operands[1]), + Self::Bdnsal => ic.execute_bdnsal(vm, &operands[0], &operands[1]), + Self::Bdse => ic.execute_bdse(vm, &operands[0], &operands[1]), + Self::Bdseal => ic.execute_bdseal(vm, &operands[0], &operands[1]), + Self::Beq => ic.execute_beq(vm, &operands[0], &operands[1], &operands[2]), + Self::Beqal => ic.execute_beqal(vm, &operands[0], &operands[1], &operands[2]), + Self::Beqz => ic.execute_beqz(vm, &operands[0], &operands[1]), + Self::Beqzal => ic.execute_beqzal(vm, &operands[0], &operands[1]), + Self::Bge => ic.execute_bge(vm, &operands[0], &operands[1], &operands[2]), + Self::Bgeal => ic.execute_bgeal(vm, &operands[0], &operands[1], &operands[2]), + Self::Bgez => ic.execute_bgez(vm, &operands[0], &operands[1]), + Self::Bgezal => ic.execute_bgezal(vm, &operands[0], &operands[1]), + Self::Bgt => ic.execute_bgt(vm, &operands[0], &operands[1], &operands[2]), + Self::Bgtal => ic.execute_bgtal(vm, &operands[0], &operands[1], &operands[2]), + Self::Bgtz => ic.execute_bgtz(vm, &operands[0], &operands[1]), + Self::Bgtzal => ic.execute_bgtzal(vm, &operands[0], &operands[1]), + Self::Ble => ic.execute_ble(vm, &operands[0], &operands[1], &operands[2]), + Self::Bleal => ic.execute_bleal(vm, &operands[0], &operands[1], &operands[2]), + Self::Blez => ic.execute_blez(vm, &operands[0], &operands[1]), + Self::Blezal => ic.execute_blezal(vm, &operands[0], &operands[1]), + Self::Blt => ic.execute_blt(vm, &operands[0], &operands[1], &operands[2]), + Self::Bltal => ic.execute_bltal(vm, &operands[0], &operands[1], &operands[2]), + Self::Bltz => ic.execute_bltz(vm, &operands[0], &operands[1]), + Self::Bltzal => ic.execute_bltzal(vm, &operands[0], &operands[1]), + Self::Bna => ic.execute_bna(vm, &operands[0], &operands[1], &operands[2], &operands[3]), + Self::Bnaal => { + ic.execute_bnaal(vm, &operands[0], &operands[1], &operands[2], &operands[3]) + } + Self::Bnan => ic.execute_bnan(vm, &operands[0], &operands[1]), + Self::Bnaz => ic.execute_bnaz(vm, &operands[0], &operands[1], &operands[2]), + Self::Bnazal => ic.execute_bnazal(vm, &operands[0], &operands[1], &operands[2]), + Self::Bne => ic.execute_bne(vm, &operands[0], &operands[1], &operands[2]), + Self::Bneal => ic.execute_bneal(vm, &operands[0], &operands[1], &operands[2]), + Self::Bnez => ic.execute_bnez(vm, &operands[0], &operands[1]), + Self::Bnezal => ic.execute_bnezal(vm, &operands[0], &operands[1]), + Self::Brap => { + ic.execute_brap(vm, &operands[0], &operands[1], &operands[2], &operands[3]) + } + Self::Brapz => ic.execute_brapz(vm, &operands[0], &operands[1], &operands[2]), + Self::Brdns => ic.execute_brdns(vm, &operands[0], &operands[1]), + Self::Brdse => ic.execute_brdse(vm, &operands[0], &operands[1]), + Self::Breq => ic.execute_breq(vm, &operands[0], &operands[1], &operands[2]), + Self::Breqz => ic.execute_breqz(vm, &operands[0], &operands[1]), + Self::Brge => ic.execute_brge(vm, &operands[0], &operands[1], &operands[2]), + Self::Brgez => ic.execute_brgez(vm, &operands[0], &operands[1]), + Self::Brgt => ic.execute_brgt(vm, &operands[0], &operands[1], &operands[2]), + Self::Brgtz => ic.execute_brgtz(vm, &operands[0], &operands[1]), + Self::Brle => ic.execute_brle(vm, &operands[0], &operands[1], &operands[2]), + Self::Brlez => ic.execute_brlez(vm, &operands[0], &operands[1]), + Self::Brlt => ic.execute_brlt(vm, &operands[0], &operands[1], &operands[2]), + Self::Brltz => ic.execute_brltz(vm, &operands[0], &operands[1]), + Self::Brna => { + ic.execute_brna(vm, &operands[0], &operands[1], &operands[2], &operands[3]) + } + Self::Brnan => ic.execute_brnan(vm, &operands[0], &operands[1]), + Self::Brnaz => ic.execute_brnaz(vm, &operands[0], &operands[1], &operands[2]), + Self::Brne => ic.execute_brne(vm, &operands[0], &operands[1], &operands[2]), + Self::Brnez => ic.execute_brnez(vm, &operands[0], &operands[1]), + Self::Ceil => ic.execute_ceil(vm, &operands[0], &operands[1]), + Self::Clr => ic.execute_clr(vm, &operands[0]), + Self::Cos => ic.execute_cos(vm, &operands[0], &operands[1]), + Self::Define => ic.execute_define(vm, &operands[0], &operands[1]), + Self::Div => ic.execute_div(vm, &operands[0], &operands[1], &operands[2]), + Self::Exp => ic.execute_exp(vm, &operands[0], &operands[1]), + Self::Floor => ic.execute_floor(vm, &operands[0], &operands[1]), + Self::Get => ic.execute_get(vm, &operands[0], &operands[1], &operands[2]), + Self::Getd => ic.execute_getd(vm, &operands[0], &operands[1], &operands[2]), + Self::Hcf => ic.execute_hcf(vm), + Self::J => ic.execute_j(vm, &operands[0]), + Self::Jal => ic.execute_jal(vm, &operands[0]), + Self::Jr => ic.execute_jr(vm, &operands[0]), + Self::L => ic.execute_l(vm, &operands[0], &operands[1], &operands[2]), + Self::Label => ic.execute_label(vm, &operands[0], &operands[1]), + Self::Lb => ic.execute_lb(vm, &operands[0], &operands[1], &operands[2], &operands[3]), + Self::Lbn => ic.execute_lbn( + vm, + &operands[0], + &operands[1], + &operands[2], + &operands[3], + &operands[4], + ), + Self::Lbns => ic.execute_lbns( + vm, + &operands[0], + &operands[1], + &operands[2], + &operands[3], + &operands[4], + &operands[5], + ), + Self::Lbs => ic.execute_lbs( + vm, + &operands[0], + &operands[1], + &operands[2], + &operands[3], + &operands[4], + ), + Self::Ld => ic.execute_ld(vm, &operands[0], &operands[1], &operands[2]), + Self::Log => ic.execute_log(vm, &operands[0], &operands[1]), + Self::Lr => ic.execute_lr(vm, &operands[0], &operands[1], &operands[2], &operands[3]), + Self::Ls => ic.execute_ls(vm, &operands[0], &operands[1], &operands[2], &operands[3]), + Self::Max => ic.execute_max(vm, &operands[0], &operands[1], &operands[2]), + Self::Min => ic.execute_min(vm, &operands[0], &operands[1], &operands[2]), + Self::Mod => ic.execute_mod(vm, &operands[0], &operands[1], &operands[2]), + Self::Move => ic.execute_move(vm, &operands[0], &operands[1]), + Self::Mul => ic.execute_mul(vm, &operands[0], &operands[1], &operands[2]), + Self::Nor => ic.execute_nor(vm, &operands[0], &operands[1], &operands[2]), + Self::Not => ic.execute_not(vm, &operands[0], &operands[1]), + Self::Or => ic.execute_or(vm, &operands[0], &operands[1], &operands[2]), + Self::Peek => ic.execute_peek(vm, &operands[0]), + Self::Poke => ic.execute_poke(vm, &operands[0], &operands[1]), + Self::Pop => ic.execute_pop(vm, &operands[0]), + Self::Push => ic.execute_push(vm, &operands[0]), + Self::Put => ic.execute_put(vm, &operands[0], &operands[1], &operands[2]), + Self::Putd => ic.execute_putd(vm, &operands[0], &operands[1], &operands[2]), + Self::Rand => ic.execute_rand(vm, &operands[0]), + Self::Round => ic.execute_round(vm, &operands[0], &operands[1]), + Self::S => ic.execute_s(vm, &operands[0], &operands[1], &operands[2]), + Self::Sap => ic.execute_sap(vm, &operands[0], &operands[1], &operands[2], &operands[3]), + Self::Sapz => ic.execute_sapz(vm, &operands[0], &operands[1], &operands[2]), + Self::Sb => ic.execute_sb(vm, &operands[0], &operands[1], &operands[2]), + Self::Sbn => ic.execute_sbn(vm, &operands[0], &operands[1], &operands[2], &operands[3]), + Self::Sbs => ic.execute_sbs(vm, &operands[0], &operands[1], &operands[2], &operands[3]), + Self::Sd => ic.execute_sd(vm, &operands[0], &operands[1], &operands[2]), + Self::Sdns => ic.execute_sdns(vm, &operands[0], &operands[1]), + Self::Sdse => ic.execute_sdse(vm, &operands[0], &operands[1]), + Self::Select => { + ic.execute_select(vm, &operands[0], &operands[1], &operands[2], &operands[3]) + } + Self::Seq => ic.execute_seq(vm, &operands[0], &operands[1], &operands[2]), + Self::Seqz => ic.execute_seqz(vm, &operands[0], &operands[1]), + Self::Sge => ic.execute_sge(vm, &operands[0], &operands[1], &operands[2]), + Self::Sgez => ic.execute_sgez(vm, &operands[0], &operands[1]), + Self::Sgt => ic.execute_sgt(vm, &operands[0], &operands[1], &operands[2]), + Self::Sgtz => ic.execute_sgtz(vm, &operands[0], &operands[1]), + Self::Sin => ic.execute_sin(vm, &operands[0], &operands[1]), + Self::Sla => ic.execute_sla(vm, &operands[0], &operands[1], &operands[2]), + Self::Sle => ic.execute_sle(vm, &operands[0], &operands[1], &operands[2]), + Self::Sleep => ic.execute_sleep(vm, &operands[0]), + Self::Slez => ic.execute_slez(vm, &operands[0], &operands[1]), + Self::Sll => ic.execute_sll(vm, &operands[0], &operands[1], &operands[2]), + Self::Slt => ic.execute_slt(vm, &operands[0], &operands[1], &operands[2]), + Self::Sltz => ic.execute_sltz(vm, &operands[0], &operands[1]), + Self::Sna => ic.execute_sna(vm, &operands[0], &operands[1], &operands[2], &operands[3]), + Self::Snan => ic.execute_snan(vm, &operands[0], &operands[1]), + Self::Snanz => ic.execute_snanz(vm, &operands[0], &operands[1]), + Self::Snaz => ic.execute_snaz(vm, &operands[0], &operands[1], &operands[2]), + Self::Sne => ic.execute_sne(vm, &operands[0], &operands[1], &operands[2]), + Self::Snez => ic.execute_snez(vm, &operands[0], &operands[1]), + Self::Sqrt => ic.execute_sqrt(vm, &operands[0], &operands[1]), + Self::Sra => ic.execute_sra(vm, &operands[0], &operands[1], &operands[2]), + Self::Srl => ic.execute_srl(vm, &operands[0], &operands[1], &operands[2]), + Self::Ss => ic.execute_ss(vm, &operands[0], &operands[1], &operands[2], &operands[3]), + Self::Sub => ic.execute_sub(vm, &operands[0], &operands[1], &operands[2]), + Self::Tan => ic.execute_tan(vm, &operands[0], &operands[1]), + Self::Trunc => ic.execute_trunc(vm, &operands[0], &operands[1]), + Self::Xor => ic.execute_xor(vm, &operands[0], &operands[1], &operands[2]), + Self::Yield => ic.execute_yield(vm), + } + } +} diff --git a/ic10emu/src/vm/instructions/mod.rs b/ic10emu/src/vm/instructions/mod.rs new file mode 100644 index 0000000..b09437f --- /dev/null +++ b/ic10emu/src/vm/instructions/mod.rs @@ -0,0 +1,26 @@ +pub mod enums; +pub mod operands; +pub mod traits; + +use enums::InstructionOp; +use operands::Operand; +use serde::{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/operands.rs b/ic10emu/src/vm/instructions/operands.rs new file mode 100644 index 0000000..a70b8c5 --- /dev/null +++ b/ic10emu/src/vm/instructions/operands.rs @@ -0,0 +1,302 @@ +use crate::errors::ICError; +use crate::interpreter; +use crate::vm::enums::script_enums::{ + LogicBatchMethod as BatchMode, LogicReagentMode as ReagentMode, LogicSlotType as SlotLogicType, + LogicType, +}; +use crate::vm::instructions::enums::InstructionOp; +use serde::{Deserialize, Serialize}; +use strum::EnumProperty; + +#[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, Eq, Debug, Clone, Serialize, Deserialize)] +pub struct Identifier { + pub name: String, +} + +#[derive(PartialEq, Debug, Clone, Serialize, Deserialize)] +pub enum Number { + Float(f64), + Binary(i64), + Hexadecimal(i64), + Constant(f64), + String(String), + Enum(f64), +} + +#[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(ICError::TypeValueNotKnown) + } + } + Operand::Identifier(id) => Err(ICError::UnknownIdentifier(id.name.to_string())), + Operand::DeviceSpec { .. } => Err(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(ICError::ShiftUnderflowI64) + } else if val <= 9.223_372_036_854_776E18 { + Ok(interpreter::f64_to_i64(val, signed)) + } else { + Err(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(ICError::ShiftUnderflowI32) + } else if val <= 2147483647.0 { + Ok(val as i32) + } else { + Err(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(ICError::UnknownIdentifier(id.name.to_string())), + _ => Err(ICError::IncorrectOperandType { + inst, + index, + desired: "Register".to_owned(), + }), + } + } + + pub fn as_device( + &self, + ic: &interpreter::IC, + inst: InstructionOp, + index: u32, + ) -> Result<(Option, Option), 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(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(ICError::DeviceIndexOutOfRange(val)) + .copied()?; + Ok((dp, connection)) + } + }, + Operand::Identifier(id) => Err(ICError::UnknownIdentifier(id.name.to_string())), + _ => Err(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(), + } + } +} diff --git a/ic10emu/src/vm/instructions/traits.rs b/ic10emu/src/vm/instructions/traits.rs new file mode 100644 index 0000000..c31e4eb --- /dev/null +++ b/ic10emu/src/vm/instructions/traits.rs @@ -0,0 +1,1675 @@ +// ================================================= +// !! <-----> DO NOT MODIFY <-----> !! +// +// This module was automatically generated by an +// xtask +// +// run `cargo xtask generate` from the workspace +// to regenerate +// +// ================================================= + +use crate::errors::ICError; +use crate::vm::object::traits::{Logicable, MemoryWritable, SourceCode}; +use std::collections::BTreeMap; +pub trait IntegratedCircuit: Logicable + MemoryWritable + SourceCode { + fn get_instruciton_pointer(&self) -> usize; + fn set_next_instruction(&mut self, next_instruction: usize); + fn reset(&mut self); + fn get_real_target(&self, indirection: u32, target: u32) -> Result; + fn get_register(&self, indirection: u32, target: u32) -> Result; + fn set_register(&mut self, indirection: u32, target: u32, val: f64) -> Result; + fn set_return_address(&mut self, addr: f64); + fn push_stack(&mut self, val: f64) -> Result; + fn pop_stack(&mut self) -> Result; + fn peek_stack(&self) -> Result; + fn get_aliases(&self) -> &BTreeMap; + fn get_defines(&self) -> &BTreeMap; + fn get_lables(&self) -> &BTreeMap; +} +pub trait AbsInstruction: IntegratedCircuit { + /// abs r? a(r?|num) + fn execute_abs( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait AcosInstruction: IntegratedCircuit { + /// acos r? a(r?|num) + fn execute_acos( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait AddInstruction: IntegratedCircuit { + /// add r? a(r?|num) b(r?|num) + fn execute_add( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait AliasInstruction: IntegratedCircuit { + /// alias str r?|d? + fn execute_alias( + &mut self, + vm: &crate::vm::VM, + str: &crate::vm::instructions::operands::Operand, + r: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait AndInstruction: IntegratedCircuit { + /// and r? a(r?|num) b(r?|num) + fn execute_and( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait AsinInstruction: IntegratedCircuit { + /// asin r? a(r?|num) + fn execute_asin( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait AtanInstruction: IntegratedCircuit { + /// atan r? a(r?|num) + fn execute_atan( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait Atan2Instruction: IntegratedCircuit { + /// atan2 r? a(r?|num) b(r?|num) + fn execute_atan2( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> 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, + vm: &crate::vm::VM, + 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>; +} +pub trait BapalInstruction: IntegratedCircuit { + /// bapal a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_bapal( + &mut self, + vm: &crate::vm::VM, + 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>; +} +pub trait BapzInstruction: IntegratedCircuit { + /// bapz a(r?|num) b(r?|num) c(r?|num) + fn execute_bapz( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BapzalInstruction: IntegratedCircuit { + /// bapzal a(r?|num) b(r?|num) c(r?|num) + fn execute_bapzal( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BdnsInstruction: IntegratedCircuit { + /// bdns d? a(r?|num) + fn execute_bdns( + &mut self, + vm: &crate::vm::VM, + d: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BdnsalInstruction: IntegratedCircuit { + /// bdnsal d? a(r?|num) + fn execute_bdnsal( + &mut self, + vm: &crate::vm::VM, + d: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BdseInstruction: IntegratedCircuit { + /// bdse d? a(r?|num) + fn execute_bdse( + &mut self, + vm: &crate::vm::VM, + d: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BdsealInstruction: IntegratedCircuit { + /// bdseal d? a(r?|num) + fn execute_bdseal( + &mut self, + vm: &crate::vm::VM, + d: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BeqInstruction: IntegratedCircuit { + /// beq a(r?|num) b(r?|num) c(r?|num) + fn execute_beq( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BeqalInstruction: IntegratedCircuit { + /// beqal a(r?|num) b(r?|num) c(r?|num) + fn execute_beqal( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BeqzInstruction: IntegratedCircuit { + /// beqz a(r?|num) b(r?|num) + fn execute_beqz( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BeqzalInstruction: IntegratedCircuit { + /// beqzal a(r?|num) b(r?|num) + fn execute_beqzal( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BgeInstruction: IntegratedCircuit { + /// bge a(r?|num) b(r?|num) c(r?|num) + fn execute_bge( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BgealInstruction: IntegratedCircuit { + /// bgeal a(r?|num) b(r?|num) c(r?|num) + fn execute_bgeal( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BgezInstruction: IntegratedCircuit { + /// bgez a(r?|num) b(r?|num) + fn execute_bgez( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BgezalInstruction: IntegratedCircuit { + /// bgezal a(r?|num) b(r?|num) + fn execute_bgezal( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BgtInstruction: IntegratedCircuit { + /// bgt a(r?|num) b(r?|num) c(r?|num) + fn execute_bgt( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BgtalInstruction: IntegratedCircuit { + /// bgtal a(r?|num) b(r?|num) c(r?|num) + fn execute_bgtal( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BgtzInstruction: IntegratedCircuit { + /// bgtz a(r?|num) b(r?|num) + fn execute_bgtz( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BgtzalInstruction: IntegratedCircuit { + /// bgtzal a(r?|num) b(r?|num) + fn execute_bgtzal( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BleInstruction: IntegratedCircuit { + /// ble a(r?|num) b(r?|num) c(r?|num) + fn execute_ble( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BlealInstruction: IntegratedCircuit { + /// bleal a(r?|num) b(r?|num) c(r?|num) + fn execute_bleal( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BlezInstruction: IntegratedCircuit { + /// blez a(r?|num) b(r?|num) + fn execute_blez( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BlezalInstruction: IntegratedCircuit { + /// blezal a(r?|num) b(r?|num) + fn execute_blezal( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BltInstruction: IntegratedCircuit { + /// blt a(r?|num) b(r?|num) c(r?|num) + fn execute_blt( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BltalInstruction: IntegratedCircuit { + /// bltal a(r?|num) b(r?|num) c(r?|num) + fn execute_bltal( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BltzInstruction: IntegratedCircuit { + /// bltz a(r?|num) b(r?|num) + fn execute_bltz( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BltzalInstruction: IntegratedCircuit { + /// bltzal a(r?|num) b(r?|num) + fn execute_bltzal( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> 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, + vm: &crate::vm::VM, + 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>; +} +pub trait BnaalInstruction: IntegratedCircuit { + /// bnaal a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_bnaal( + &mut self, + vm: &crate::vm::VM, + 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>; +} +pub trait BnanInstruction: IntegratedCircuit { + /// bnan a(r?|num) b(r?|num) + fn execute_bnan( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BnazInstruction: IntegratedCircuit { + /// bnaz a(r?|num) b(r?|num) c(r?|num) + fn execute_bnaz( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BnazalInstruction: IntegratedCircuit { + /// bnazal a(r?|num) b(r?|num) c(r?|num) + fn execute_bnazal( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BneInstruction: IntegratedCircuit { + /// bne a(r?|num) b(r?|num) c(r?|num) + fn execute_bne( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BnealInstruction: IntegratedCircuit { + /// bneal a(r?|num) b(r?|num) c(r?|num) + fn execute_bneal( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BnezInstruction: IntegratedCircuit { + /// bnez a(r?|num) b(r?|num) + fn execute_bnez( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BnezalInstruction: IntegratedCircuit { + /// bnezal a(r?|num) b(r?|num) + fn execute_bnezal( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> 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, + vm: &crate::vm::VM, + 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>; +} +pub trait BrapzInstruction: IntegratedCircuit { + /// brapz a(r?|num) b(r?|num) c(r?|num) + fn execute_brapz( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrdnsInstruction: IntegratedCircuit { + /// brdns d? a(r?|num) + fn execute_brdns( + &mut self, + vm: &crate::vm::VM, + d: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrdseInstruction: IntegratedCircuit { + /// brdse d? a(r?|num) + fn execute_brdse( + &mut self, + vm: &crate::vm::VM, + d: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BreqInstruction: IntegratedCircuit { + /// breq a(r?|num) b(r?|num) c(r?|num) + fn execute_breq( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BreqzInstruction: IntegratedCircuit { + /// breqz a(r?|num) b(r?|num) + fn execute_breqz( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrgeInstruction: IntegratedCircuit { + /// brge a(r?|num) b(r?|num) c(r?|num) + fn execute_brge( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrgezInstruction: IntegratedCircuit { + /// brgez a(r?|num) b(r?|num) + fn execute_brgez( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrgtInstruction: IntegratedCircuit { + /// brgt a(r?|num) b(r?|num) c(r?|num) + fn execute_brgt( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrgtzInstruction: IntegratedCircuit { + /// brgtz a(r?|num) b(r?|num) + fn execute_brgtz( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrleInstruction: IntegratedCircuit { + /// brle a(r?|num) b(r?|num) c(r?|num) + fn execute_brle( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrlezInstruction: IntegratedCircuit { + /// brlez a(r?|num) b(r?|num) + fn execute_brlez( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrltInstruction: IntegratedCircuit { + /// brlt a(r?|num) b(r?|num) c(r?|num) + fn execute_brlt( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrltzInstruction: IntegratedCircuit { + /// brltz a(r?|num) b(r?|num) + fn execute_brltz( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> 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, + vm: &crate::vm::VM, + 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>; +} +pub trait BrnanInstruction: IntegratedCircuit { + /// brnan a(r?|num) b(r?|num) + fn execute_brnan( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrnazInstruction: IntegratedCircuit { + /// brnaz a(r?|num) b(r?|num) c(r?|num) + fn execute_brnaz( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrneInstruction: IntegratedCircuit { + /// brne a(r?|num) b(r?|num) c(r?|num) + fn execute_brne( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrnezInstruction: IntegratedCircuit { + /// brnez a(r?|num) b(r?|num) + fn execute_brnez( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait CeilInstruction: IntegratedCircuit { + /// ceil r? a(r?|num) + fn execute_ceil( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait ClrInstruction: IntegratedCircuit { + /// clr d? + fn execute_clr( + &mut self, + vm: &crate::vm::VM, + d: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait CosInstruction: IntegratedCircuit { + /// cos r? a(r?|num) + fn execute_cos( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait DefineInstruction: IntegratedCircuit { + /// define str num + fn execute_define( + &mut self, + vm: &crate::vm::VM, + str: &crate::vm::instructions::operands::Operand, + num: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait DivInstruction: IntegratedCircuit { + /// div r? a(r?|num) b(r?|num) + fn execute_div( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait ExpInstruction: IntegratedCircuit { + /// exp r? a(r?|num) + fn execute_exp( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait FloorInstruction: IntegratedCircuit { + /// floor r? a(r?|num) + fn execute_floor( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait GetInstruction: IntegratedCircuit { + /// get r? d? address(r?|num) + fn execute_get( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + d: &crate::vm::instructions::operands::Operand, + address: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait GetdInstruction: IntegratedCircuit { + /// getd r? id(r?|num) address(r?|num) + fn execute_getd( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + id: &crate::vm::instructions::operands::Operand, + address: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait HcfInstruction: IntegratedCircuit { + /// hcf + fn execute_hcf(&mut self, vm: &crate::vm::VM) -> Result<(), crate::errors::ICError>; +} +pub trait JInstruction: IntegratedCircuit { + /// j int + fn execute_j( + &mut self, + vm: &crate::vm::VM, + int: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait JalInstruction: IntegratedCircuit { + /// jal int + fn execute_jal( + &mut self, + vm: &crate::vm::VM, + int: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait JrInstruction: IntegratedCircuit { + /// jr int + fn execute_jr( + &mut self, + vm: &crate::vm::VM, + int: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait LInstruction: IntegratedCircuit { + /// l r? d? logicType + fn execute_l( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + d: &crate::vm::instructions::operands::Operand, + logic_type: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait LabelInstruction: IntegratedCircuit { + /// label d? str + fn execute_label( + &mut self, + vm: &crate::vm::VM, + d: &crate::vm::instructions::operands::Operand, + str: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait LbInstruction: IntegratedCircuit { + /// lb r? deviceHash logicType batchMode + fn execute_lb( + &mut self, + vm: &crate::vm::VM, + 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>; +} +pub trait LbnInstruction: IntegratedCircuit { + /// lbn r? deviceHash nameHash logicType batchMode + fn execute_lbn( + &mut self, + vm: &crate::vm::VM, + 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>; +} +pub trait LbnsInstruction: IntegratedCircuit { + /// lbns r? deviceHash nameHash slotIndex logicSlotType batchMode + fn execute_lbns( + &mut self, + vm: &crate::vm::VM, + 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>; +} +pub trait LbsInstruction: IntegratedCircuit { + /// lbs r? deviceHash slotIndex logicSlotType batchMode + fn execute_lbs( + &mut self, + vm: &crate::vm::VM, + 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>; +} +pub trait LdInstruction: IntegratedCircuit { + /// ld r? id(r?|num) logicType + fn execute_ld( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + id: &crate::vm::instructions::operands::Operand, + logic_type: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait LogInstruction: IntegratedCircuit { + /// log r? a(r?|num) + fn execute_log( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait LrInstruction: IntegratedCircuit { + /// lr r? d? reagentMode int + fn execute_lr( + &mut self, + vm: &crate::vm::VM, + 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>; +} +pub trait LsInstruction: IntegratedCircuit { + /// ls r? d? slotIndex logicSlotType + fn execute_ls( + &mut self, + vm: &crate::vm::VM, + 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>; +} +pub trait MaxInstruction: IntegratedCircuit { + /// max r? a(r?|num) b(r?|num) + fn execute_max( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait MinInstruction: IntegratedCircuit { + /// min r? a(r?|num) b(r?|num) + fn execute_min( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait ModInstruction: IntegratedCircuit { + /// mod r? a(r?|num) b(r?|num) + fn execute_mod( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait MoveInstruction: IntegratedCircuit { + /// move r? a(r?|num) + fn execute_move( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait MulInstruction: IntegratedCircuit { + /// mul r? a(r?|num) b(r?|num) + fn execute_mul( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait NorInstruction: IntegratedCircuit { + /// nor r? a(r?|num) b(r?|num) + fn execute_nor( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait NotInstruction: IntegratedCircuit { + /// not r? a(r?|num) + fn execute_not( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait OrInstruction: IntegratedCircuit { + /// or r? a(r?|num) b(r?|num) + fn execute_or( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait PeekInstruction: IntegratedCircuit { + /// peek r? + fn execute_peek( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait PokeInstruction: IntegratedCircuit { + /// poke address(r?|num) value(r?|num) + fn execute_poke( + &mut self, + vm: &crate::vm::VM, + address: &crate::vm::instructions::operands::Operand, + value: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait PopInstruction: IntegratedCircuit { + /// pop r? + fn execute_pop( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait PushInstruction: IntegratedCircuit { + /// push a(r?|num) + fn execute_push( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait PutInstruction: IntegratedCircuit { + /// put d? address(r?|num) value(r?|num) + fn execute_put( + &mut self, + vm: &crate::vm::VM, + d: &crate::vm::instructions::operands::Operand, + address: &crate::vm::instructions::operands::Operand, + value: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait PutdInstruction: IntegratedCircuit { + /// putd id(r?|num) address(r?|num) value(r?|num) + fn execute_putd( + &mut self, + vm: &crate::vm::VM, + id: &crate::vm::instructions::operands::Operand, + address: &crate::vm::instructions::operands::Operand, + value: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait RandInstruction: IntegratedCircuit { + /// rand r? + fn execute_rand( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait RoundInstruction: IntegratedCircuit { + /// round r? a(r?|num) + fn execute_round( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SInstruction: IntegratedCircuit { + /// s d? logicType r? + fn execute_s( + &mut self, + vm: &crate::vm::VM, + d: &crate::vm::instructions::operands::Operand, + logic_type: &crate::vm::instructions::operands::Operand, + r: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SapInstruction: IntegratedCircuit { + /// sap r? a(r?|num) b(r?|num) c(r?|num) + fn execute_sap( + &mut self, + vm: &crate::vm::VM, + 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>; +} +pub trait SapzInstruction: IntegratedCircuit { + /// sapz r? a(r?|num) b(r?|num) + fn execute_sapz( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SbInstruction: IntegratedCircuit { + /// sb deviceHash logicType r? + fn execute_sb( + &mut self, + vm: &crate::vm::VM, + device_hash: &crate::vm::instructions::operands::Operand, + logic_type: &crate::vm::instructions::operands::Operand, + r: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SbnInstruction: IntegratedCircuit { + /// sbn deviceHash nameHash logicType r? + fn execute_sbn( + &mut self, + vm: &crate::vm::VM, + 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>; +} +pub trait SbsInstruction: IntegratedCircuit { + /// sbs deviceHash slotIndex logicSlotType r? + fn execute_sbs( + &mut self, + vm: &crate::vm::VM, + 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>; +} +pub trait SdInstruction: IntegratedCircuit { + /// sd id(r?|num) logicType r? + fn execute_sd( + &mut self, + vm: &crate::vm::VM, + id: &crate::vm::instructions::operands::Operand, + logic_type: &crate::vm::instructions::operands::Operand, + r: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SdnsInstruction: IntegratedCircuit { + /// sdns r? d? + fn execute_sdns( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + d: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SdseInstruction: IntegratedCircuit { + /// sdse r? d? + fn execute_sdse( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + d: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SelectInstruction: IntegratedCircuit { + /// select r? a(r?|num) b(r?|num) c(r?|num) + fn execute_select( + &mut self, + vm: &crate::vm::VM, + 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>; +} +pub trait SeqInstruction: IntegratedCircuit { + /// seq r? a(r?|num) b(r?|num) + fn execute_seq( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SeqzInstruction: IntegratedCircuit { + /// seqz r? a(r?|num) + fn execute_seqz( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SgeInstruction: IntegratedCircuit { + /// sge r? a(r?|num) b(r?|num) + fn execute_sge( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SgezInstruction: IntegratedCircuit { + /// sgez r? a(r?|num) + fn execute_sgez( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SgtInstruction: IntegratedCircuit { + /// sgt r? a(r?|num) b(r?|num) + fn execute_sgt( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SgtzInstruction: IntegratedCircuit { + /// sgtz r? a(r?|num) + fn execute_sgtz( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SinInstruction: IntegratedCircuit { + /// sin r? a(r?|num) + fn execute_sin( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SlaInstruction: IntegratedCircuit { + /// sla r? a(r?|num) b(r?|num) + fn execute_sla( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SleInstruction: IntegratedCircuit { + /// sle r? a(r?|num) b(r?|num) + fn execute_sle( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SleepInstruction: IntegratedCircuit { + /// sleep a(r?|num) + fn execute_sleep( + &mut self, + vm: &crate::vm::VM, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SlezInstruction: IntegratedCircuit { + /// slez r? a(r?|num) + fn execute_slez( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SllInstruction: IntegratedCircuit { + /// sll r? a(r?|num) b(r?|num) + fn execute_sll( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SltInstruction: IntegratedCircuit { + /// slt r? a(r?|num) b(r?|num) + fn execute_slt( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SltzInstruction: IntegratedCircuit { + /// sltz r? a(r?|num) + fn execute_sltz( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SnaInstruction: IntegratedCircuit { + /// sna r? a(r?|num) b(r?|num) c(r?|num) + fn execute_sna( + &mut self, + vm: &crate::vm::VM, + 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>; +} +pub trait SnanInstruction: IntegratedCircuit { + /// snan r? a(r?|num) + fn execute_snan( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SnanzInstruction: IntegratedCircuit { + /// snanz r? a(r?|num) + fn execute_snanz( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SnazInstruction: IntegratedCircuit { + /// snaz r? a(r?|num) b(r?|num) + fn execute_snaz( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SneInstruction: IntegratedCircuit { + /// sne r? a(r?|num) b(r?|num) + fn execute_sne( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SnezInstruction: IntegratedCircuit { + /// snez r? a(r?|num) + fn execute_snez( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SqrtInstruction: IntegratedCircuit { + /// sqrt r? a(r?|num) + fn execute_sqrt( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SraInstruction: IntegratedCircuit { + /// sra r? a(r?|num) b(r?|num) + fn execute_sra( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SrlInstruction: IntegratedCircuit { + /// srl r? a(r?|num) b(r?|num) + fn execute_srl( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SsInstruction: IntegratedCircuit { + /// ss d? slotIndex logicSlotType r? + fn execute_ss( + &mut self, + vm: &crate::vm::VM, + 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>; +} +pub trait SubInstruction: IntegratedCircuit { + /// sub r? a(r?|num) b(r?|num) + fn execute_sub( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait TanInstruction: IntegratedCircuit { + /// tan r? a(r?|num) + fn execute_tan( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait TruncInstruction: IntegratedCircuit { + /// trunc r? a(r?|num) + fn execute_trunc( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait XorInstruction: IntegratedCircuit { + /// xor r? a(r?|num) b(r?|num) + fn execute_xor( + &mut self, + vm: &crate::vm::VM, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait YieldInstruction: IntegratedCircuit { + /// yield + fn execute_yield(&mut self, vm: &crate::vm::VM) -> 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 + + 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 + + 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 + + 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 + + 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/mod.rs b/ic10emu/src/vm/mod.rs index 39f8ce6..611d13f 100644 --- a/ic10emu/src/vm/mod.rs +++ b/ic10emu/src/vm/mod.rs @@ -1,12 +1,15 @@ - - -mod object; +pub mod enums; +pub mod instructions; +pub mod object; use crate::{ device::{Device, DeviceTemplate, SlotOccupant, SlotOccupantTemplate}, - grammar::{BatchMode, LogicType, SlotLogicType}, - interpreter::{self, FrozenIC, ICError, LineError}, + errors::{ICError, VMError}, + interpreter::{self, FrozenIC}, network::{CableConnectionType, Connection, FrozenNetwork, Network}, + vm::enums::script_enums::{ + LogicBatchMethod as BatchMode, LogicSlotType as SlotLogicType, LogicType, + }, }; use std::{ cell::RefCell, @@ -16,31 +19,6 @@ use std::{ 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), -} #[derive(Debug)] pub struct VM { diff --git a/ic10emu/src/vm/object/errors.rs b/ic10emu/src/vm/object/errors.rs index 87b73f9..daf7ba9 100644 --- a/ic10emu/src/vm/object/errors.rs +++ b/ic10emu/src/vm/object/errors.rs @@ -1,7 +1,7 @@ use serde::{Deserialize, Serialize}; use thiserror::Error; -use crate::grammar::{LogicType, SlotLogicType}; +use crate::vm::enums::script_enums::{LogicSlotType as SlotLogicType, LogicType}; #[derive(Error, Debug, Serialize, Deserialize)] pub enum LogicError { @@ -14,7 +14,7 @@ pub enum LogicError { #[error("can't write slot {1} SlotLogicType {0}")] CantSlotWrite(SlotLogicType, usize), #[error("slot id {0} is out of range 0..{1}")] - SlotIndexOutOfRange(usize, usize) + SlotIndexOutOfRange(usize, usize), } #[derive(Error, Debug, Serialize, Deserialize)] diff --git a/ic10emu/src/vm/object/mod.rs b/ic10emu/src/vm/object/mod.rs index 3b1b29e..571a937 100644 --- a/ic10emu/src/vm/object/mod.rs +++ b/ic10emu/src/vm/object/mod.rs @@ -1,14 +1,14 @@ use macro_rules_attribute::derive; use serde::{Deserialize, Serialize}; -mod macros; -mod traits; -mod stationpedia; -mod errors; +pub mod errors; +pub mod macros; +pub mod stationpedia; +pub mod traits; use traits::*; -use crate::{device::SlotType, grammar::SlotLogicType}; +use crate::{device::SlotType, vm::enums::script_enums::LogicSlotType as SlotLogicType}; pub type ObjectID = u32; pub type BoxedObject = Box>; @@ -46,7 +46,6 @@ pub struct LogicField { pub value: f64, } - #[derive(Debug, Default, Clone, Serialize, Deserialize)] pub struct Slot { pub typ: SlotType, diff --git a/ic10emu/src/vm/object/stationpedia.rs b/ic10emu/src/vm/object/stationpedia.rs index b55bbf6..d47c765 100644 --- a/ic10emu/src/vm/object/stationpedia.rs +++ b/ic10emu/src/vm/object/stationpedia.rs @@ -1,12 +1,8 @@ use std::str::FromStr; -use serde::{Deserialize, Serialize}; -use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; - +use crate::vm::enums::prefabs::StationpediaPrefab; use crate::vm::object::BoxedObject; -include!(concat!(env!("OUT_DIR"), "/stationpedia_prefabs.rs")); - #[allow(unused)] pub enum PrefabTemplate { Hash(i32), @@ -27,4 +23,4 @@ pub fn object_from_prefab_template(template: &PrefabTemplate) -> Option usize; -} -macro_rules! GWMemory { - ( - $( #[$attr:meta] )* - $viz:vis struct $struct:ident { - $($body:tt)* - } - ) => { - impl GWMemory for $struct { - fn memory_size(&self) -> usize { - self.memory.len() - } - } - }; -} -pub trait GWMemoryReadable: GWMemory { +pub trait GWMemoryReadable { + fn memory_size(&self) -> usize; fn memory(&self) -> &Vec; } macro_rules! GWMemoryReadable { @@ -76,13 +58,16 @@ macro_rules! GWMemoryReadable { } ) => { impl GWMemoryReadable for $struct { + fn memory_size(&self) -> usize { + self.memory.len() + } fn memory(&self) -> &Vec { &self.memory } } }; } -pub trait GWMemoryWritable: GWMemory + GWMemoryReadable { +pub trait GWMemoryWritable: GWMemoryReadable { fn memory_mut(&mut self) -> &mut Vec; } macro_rules! GWMemoryWritable { @@ -202,12 +187,10 @@ impl Logicable for T { } } -impl Memory for T { +impl MemoryReadable for T { fn memory_size(&self) -> usize { self.memory_size() } -} -impl MemoryReadable for T { fn get_memory(&self, index: i32) -> Result { if index < 0 { Err(MemoryError::StackUnderflow(index, self.memory().len())) @@ -218,7 +201,7 @@ impl MemoryReadable for T { } } } -impl MemoryWritable for T { +impl MemoryWritable for T { fn set_memory(&mut self, index: i32, val: f64) -> Result<(), MemoryError> { if index < 0 { Err(MemoryError::StackUnderflow(index, self.memory().len())) @@ -270,8 +253,8 @@ pub struct GenericLogicableDevice { slots: Vec, } -#[derive(ObjectInterface!, GWLogicable!, GWMemory!, GWMemoryReadable!)] -#[custom(implements(Object { Logicable, Memory, MemoryReadable }))] +#[derive(ObjectInterface!, GWLogicable!, GWMemoryReadable!)] +#[custom(implements(Object { Logicable, MemoryReadable }))] pub struct GenericLogicableMemoryReadable { #[custom(object_id)] id: ObjectID, @@ -283,8 +266,8 @@ pub struct GenericLogicableMemoryReadable { memory: Vec, } -#[derive(ObjectInterface!, GWLogicable!, GWMemory!, GWMemoryReadable!, GWMemoryWritable!)] -#[custom(implements(Object { Logicable, Memory, MemoryReadable, MemoryWritable }))] +#[derive(ObjectInterface!, GWLogicable!, GWMemoryReadable!, GWMemoryWritable!)] +#[custom(implements(Object { Logicable, MemoryReadable, MemoryWritable }))] pub struct GenericLogicableMemoryReadWritable { #[custom(object_id)] id: ObjectID, @@ -296,8 +279,8 @@ pub struct GenericLogicableMemoryReadWritable { memory: Vec, } -#[derive(ObjectInterface!, GWLogicable!, GWDevice!, GWMemory!, GWMemoryReadable!, GWMemoryWritable!)] -#[custom(implements(Object { Logicable, Device, Memory, MemoryReadable }))] +#[derive(ObjectInterface!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] +#[custom(implements(Object { Logicable, Device, MemoryReadable }))] pub struct GenericLogicableDeviceMemoryReadable { #[custom(object_id)] id: ObjectID, @@ -309,8 +292,8 @@ pub struct GenericLogicableDeviceMemoryReadable { memory: Vec, } -#[derive(ObjectInterface!, GWLogicable!, GWDevice!, GWMemory!, GWMemoryReadable!, GWMemoryWritable!)] -#[custom(implements(Object { Logicable, Device, Memory, MemoryReadable, MemoryWritable }))] +#[derive(ObjectInterface!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] +#[custom(implements(Object { Logicable, Device, MemoryReadable, MemoryWritable }))] pub struct GenericLogicableDeviceMemoryReadWriteablable { #[custom(object_id)] id: ObjectID, diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index 9569ec7..4b19ebc 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -1,39 +1,55 @@ -use std::fmt::Debug; +use crate::{ + errors::ICError, + vm::{ + enums::script_enums::{LogicSlotType, LogicType}, + instructions::Instruction, + object::{ + errors::{LogicError, MemoryError}, + macros::tag_object_traits, + ObjectID, Slot, + }, + VM, + }, +}; -use crate::{grammar, vm::{object::{errors::{LogicError, MemoryError}, macros::tag_object_traits, ObjectID, Slot}, VM}}; +use std::fmt::Debug; tag_object_traits! { #![object_trait(Object: Debug)] - pub trait Memory { + pub trait MemoryReadable { fn memory_size(&self) -> usize; + fn get_memory(&self, index: i32) -> Result; } - pub trait MemoryWritable: Memory { + pub trait MemoryWritable: MemoryReadable { fn set_memory(&mut self, index: i32, val: f64) -> Result<(), MemoryError>; fn clear_memory(&mut self) -> Result<(), MemoryError>; } - pub trait MemoryReadable: Memory { - fn get_memory(&self, index: i32) -> Result; - } - pub trait Logicable { fn prefab_hash(&self) -> i32; /// returns 0 if not set fn name_hash(&self) -> i32; fn is_logic_readable(&self) -> bool; fn is_logic_writeable(&self) -> bool; - fn can_logic_read(&self, lt: grammar::LogicType) -> bool; - fn can_logic_write(&self, lt: grammar::LogicType) -> bool; - fn set_logic(&mut self, lt: grammar::LogicType, value: f64, force: bool) -> Result<(), LogicError>; - fn get_logic(&self, lt: grammar::LogicType) -> Result; + fn can_logic_read(&self, lt: LogicType) -> bool; + fn can_logic_write(&self, lt: LogicType) -> bool; + fn set_logic(&mut self, lt: LogicType, value: f64, force: bool) -> Result<(), LogicError>; + fn get_logic(&self, lt: LogicType) -> Result; fn slots_count(&self) -> usize; fn get_slot(&self, index: usize) -> Option<&Slot>; fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot>; - fn can_slot_logic_read(&self, slt: grammar::SlotLogicType, index: usize) -> bool; - fn get_slot_logic(&self, slt: grammar::SlotLogicType, index: usize, vm: &VM) -> Result; + fn can_slot_logic_read(&self, slt: LogicSlotType, index: usize) -> bool; + fn get_slot_logic(&self, slt: LogicSlotType, index: usize, vm: &VM) -> Result; + } + + pub trait SourceCode { + fn set_source_code(&mut self, code: &str) -> Result<(), ICError>; + fn set_source_code_with_invalid(&mut self, code: &str); + fn get_source_code(&self) -> String; + fn get_line(&self, line: usize) -> Result<&Instruction, ICError>; } pub trait CircuitHolder: Logicable { @@ -49,17 +65,17 @@ tag_object_traits! { fn get_batch_mut(&self) -> Vec>; } - pub trait SourceCode { + pub trait Programmable: crate::vm::instructions::traits::ICInstructable { fn get_source_code(&self) -> String; fn set_source_code(&self, code: String); - + fn step(&mut self) -> Result<(), crate::errors::ICError>; } - pub trait Instructable: Memory { + pub trait Instructable: MemoryWritable { // fn get_instructions(&self) -> Vec } - pub trait LogicStack: Memory { + pub trait LogicStack: MemoryWritable { // fn logic_stack(&self) -> LogicStack; } @@ -67,10 +83,17 @@ tag_object_traits! { } + + } impl Debug for dyn Object { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "Object: (ID = {:?}, Type = {})", self.id(), self.type_name()) + write!( + f, + "Object: (ID = {:?}, Type = {})", + self.id(), + self.type_name() + ) } } diff --git a/ic10emu_wasm/build.rs b/ic10emu_wasm/build.rs index a2dda24..e069e78 100644 --- a/ic10emu_wasm/build.rs +++ b/ic10emu_wasm/build.rs @@ -25,7 +25,8 @@ fn main() { ts_types.push_str(<_tstype); let slt_tsunion: String = Itertools::intersperse( - ic10emu::grammar::generated::SlotLogicType::iter().map(|slt| format!("\"{}\"", slt.as_ref())), + ic10emu::grammar::generated::SlotLogicType::iter() + .map(|slt| format!("\"{}\"", slt.as_ref())), "\n | ".to_owned(), ) .collect(); diff --git a/ic10emu_wasm/src/utils.rs b/ic10emu_wasm/src/utils.rs index 745f704..ead4cd6 100644 --- a/ic10emu_wasm/src/utils.rs +++ b/ic10emu_wasm/src/utils.rs @@ -10,10 +10,8 @@ pub fn set_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. diff --git a/ic10lsp_wasm/src/lib.rs b/ic10lsp_wasm/src/lib.rs index c0f224b..b300c60 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; @@ -60,7 +60,7 @@ 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())), diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml index bc66fb2..fcc1dad 100644 --- a/xtask/Cargo.toml +++ b/xtask/Cargo.toml @@ -5,4 +5,22 @@ edition.workspace = true [dependencies] clap = { version = "4.5.4", features = ["derive", "env"] } +color-eyre = "0.6.3" +convert_case = "0.6.0" +indexmap = { version = "2.2.6", features = ["serde"] } +# onig = "6.4.0" +phf_codegen = "0.11.2" +regex = "1.10.4" +serde = "1.0.200" +serde_derive = "1.0.200" +serde_ignored = "0.1.10" +serde_json = "1.0.116" +serde_path_to_error = "0.1.16" +serde_with = "3.8.1" +textwrap = { version = "0.16.1", default-features = false } thiserror = "1.0.58" +tracing = "0.1.40" +tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } + +onig = { git = "https://github.com/rust-onig/rust-onig", revision = "fa90c0e97e90a056af89f183b23cd417b59ee6a2" } + diff --git a/xtask/src/enums.rs b/xtask/src/enums.rs new file mode 100644 index 0000000..6948a5b --- /dev/null +++ b/xtask/src/enums.rs @@ -0,0 +1,28 @@ +use std::collections::BTreeMap; + +use serde_derive::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(rename = "Enums")] +pub struct Enums { + #[serde(rename = "scriptEnums")] + pub script_enums: BTreeMap, + #[serde(rename = "basicEnums")] + pub basic_enums: BTreeMap, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(rename = "EnumListing")] +pub struct EnumListing { + #[serde(rename = "enumName")] + pub enum_name: String, + pub values: BTreeMap, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(rename = "EnumEntry")] +pub struct EnumEntry { + pub value: i64, + pub deprecated: bool, + pub description: String, +} diff --git a/xtask/src/generate.rs b/xtask/src/generate.rs new file mode 100644 index 0000000..7181883 --- /dev/null +++ b/xtask/src/generate.rs @@ -0,0 +1,101 @@ +use color_eyre::eyre; + +use std::{collections::BTreeMap, process::Command}; + +use crate::{enums::Enums, stationpedia::Stationpedia}; + +mod database; +mod enums; +mod instructions; +mod utils; + +pub fn generate( + stationpedia_path: &std::path::Path, + workspace: &std::path::Path, +) -> color_eyre::Result<()> { + let mut pedia: Stationpedia = parse_json(&mut serde_json::Deserializer::from_reader( + std::io::BufReader::new(std::fs::File::open( + stationpedia_path.join("Stationpedia.json"), + )?), + ))?; + + let instruction_help_patches: BTreeMap = parse_json( + &mut serde_json::Deserializer::from_reader(std::io::BufReader::new(std::fs::File::open( + workspace.join("data").join("instruction_help_patches.json"), + )?)), + )?; + + for (inst, patch) in instruction_help_patches { + if let Some(cmd) = pedia.script_commands.get_mut(&inst) { + cmd.desc = patch; + } else { + eprintln!("Warning: can find instruction '{inst}' to patch help!"); + } + } + + let enums: Enums = parse_json(&mut serde_json::Deserializer::from_reader( + std::io::BufReader::new(std::fs::File::open(stationpedia_path.join("Enums.json"))?), + ))?; + + database::generate_database(&pedia, &enums, workspace)?; + let enums_files = enums::generate_enums(&pedia, &enums, workspace)?; + let inst_files = instructions::generate_instructions(&pedia, workspace)?; + + let generated_files = [enums_files.as_slice(), inst_files.as_slice()].concat(); + + eprintln!("Formatting generated files..."); + for file in &generated_files { + prepend_genereated_comment(file)?; + } + let mut cmd = Command::new("cargo"); + cmd.current_dir(workspace); + cmd.arg("fmt").arg("--"); + cmd.args(&generated_files); + cmd.status()?; + Ok(()) +} + +pub fn parse_json<'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!(key=%path,"Found ignored key"); + }; + serde_ignored::deserialize(path, &mut fun).map_err(|e| { + eyre::eyre!( + "path: {track} | error = {e}", + track = track.path().to_string(), + ) + }) +} + +fn prepend_genereated_comment(file_path: &std::path::Path) -> color_eyre::Result<()> { + use std::io::Write; + let tmp_path = file_path.with_extension("rs.tmp"); + { + let mut tmp = std::fs::File::create(&tmp_path)?; + let mut src = std::fs::File::open(file_path)?; + write!( + &mut tmp, + "// ================================================= \n\ + // !! <-----> DO NOT MODIFY <-----> !! \n\ + // \n\ + // This module was automatically generated by an + // xtask \n\ + // \n\ + // run `cargo xtask generate` from the workspace \n\ + // to regenerate \n\ + // \n\ + // ================================================= \n\ + \n\ + \n\ + " + )?; + std::io::copy(&mut src, &mut tmp)?; + } + std::fs::remove_file(file_path)?; + std::fs::rename(&tmp_path, file_path)?; + Ok(()) +} diff --git a/xtask/src/generate/database.rs b/xtask/src/generate/database.rs new file mode 100644 index 0000000..b32eee2 --- /dev/null +++ b/xtask/src/generate/database.rs @@ -0,0 +1,674 @@ +use std::{collections::BTreeMap, io::Write}; + +use serde_derive::{Deserialize, Serialize}; + +use crate::{ + enums, + stationpedia::{self, Page, Stationpedia}, +}; + +pub fn generate_database( + stationpedia: &stationpedia::Stationpedia, + enums: &enums::Enums, + workspace: &std::path::Path, +) -> color_eyre::Result<()> { + let templates = generate_templates(stationpedia)?; + + println!("Writing prefab database ..."); + + let prefabs: BTreeMap = templates + .into_iter() + .map(|obj| (obj.prefab().prefab_name.clone(), obj)) + .collect(); + let prefabs_by_hash: BTreeMap = prefabs + .iter() + .map(|(key, val)| (val.prefab().prefab_hash, key.clone())) + .collect(); + + let structures = prefabs + .iter() + .filter_map(|(_, val)| { + use ObjectTemplate::*; + match val { + Structure(_) + | StructureSlots(_) + | StructureLogic(_) + | StructureLogicDevice(_) + | StructureLogicDeviceMemory(_) => Some(val.prefab().prefab_name.clone()), + Item(_) | ItemSlots(_) | ItemLogic(_) | ItemLogicMemory(_) => None, + } + }) + .collect(); + let items = prefabs + .iter() + .filter_map(|(_, val)| { + use ObjectTemplate::*; + match val { + Structure(_) + | StructureSlots(_) + | StructureLogic(_) + | StructureLogicDevice(_) + | StructureLogicDeviceMemory(_) => None, + Item(_) | ItemSlots(_) | ItemLogic(_) | ItemLogicMemory(_) => { + Some(val.prefab().prefab_name.clone()) + } + } + }) + .collect(); + let logicable_items = prefabs + .iter() + .filter_map(|(_, val)| { + use ObjectTemplate::*; + match val { + Structure(_) + | StructureSlots(_) + | StructureLogic(_) + | StructureLogicDevice(_) + | StructureLogicDeviceMemory(_) + | Item(_) + | ItemSlots(_) => None, + ItemLogic(_) | ItemLogicMemory(_) => Some(val.prefab().prefab_name.clone()), + } + }) + .collect(); + + let devices = prefabs + .iter() + .filter_map(|(_, val)| { + use ObjectTemplate::*; + match val { + Structure(_) | StructureSlots(_) | StructureLogic(_) | Item(_) | ItemSlots(_) + | ItemLogic(_) | ItemLogicMemory(_) => None, + StructureLogicDevice(_) | StructureLogicDeviceMemory(_) => { + Some(val.prefab().prefab_name.clone()) + } + } + }) + .collect(); + let db: ObjectDatabase = ObjectDatabase { + prefabs, + reagents: stationpedia.reagents.clone(), + enums: enums.clone(), + prefabs_by_hash, + structures, + devices, + items, + logicable_items, + }; + + let data_path = workspace.join("data"); + if !data_path.exists() { + std::fs::create_dir(&data_path)?; + } + let database_path = data_path.join("database.json"); + let mut database_file = std::io::BufWriter::new(std::fs::File::create(database_path)?); + serde_json::to_writer(&mut database_file, &db)?; + database_file.flush()?; + Ok(()) +} + +fn generate_templates(pedia: &Stationpedia) -> color_eyre::Result> { + println!("Generating templates ..."); + let mut templates: Vec = Vec::new(); + for page in pedia.pages.iter() { + let prefab = PrefabInfo { + prefab_name: page.prefab_name.clone(), + prefab_hash: page.prefab_hash, + desc: page.description.clone(), + name: page.title.clone(), + }; + // every page should either by a item or a structure + // in theory every device is logicable + // in theory everything with memory is logicable + match page { + Page { + item: Some(item), + structure: None, + logic_info: None, + slot_inserts, + memory: None, + device: None, + transmission_receiver: None, + wireless_logic: None, + circuit_holder: None, + .. + } if slot_inserts.is_empty() => { + templates.push(ObjectTemplate::Item(ItemTemplate { + prefab, + item: item.into(), + })); + } + Page { + item: Some(item), + structure: None, + logic_info: None, + slot_inserts, + memory: None, + device: None, + transmission_receiver: None, + wireless_logic: None, + circuit_holder: None, + .. + } => { + templates.push(ObjectTemplate::ItemSlots(ItemSlotsTemplate { + prefab, + item: item.into(), + slots: slot_inserts_to_info(slot_inserts), + })); + } + Page { + item: Some(item), + structure: None, + logic_info: Some(logic), + slot_inserts, + memory: None, + device: None, + transmission_receiver, + wireless_logic, + circuit_holder, + .. + } => { + let mut logic: LogicInfo = logic.into(); + if !page.mode_insert.is_empty() { + logic.modes = Some(mode_inserts_to_info(&page.mode_insert)); + } + logic.transmission_receiver = transmission_receiver.unwrap_or(false); + logic.wireless_logic = wireless_logic.unwrap_or(false); + logic.circuit_holder = circuit_holder.unwrap_or(false); + + templates.push(ObjectTemplate::ItemLogic(ItemLogicTemplate { + prefab, + item: item.into(), + logic, + slots: slot_inserts_to_info(slot_inserts), + })); + } + Page { + item: Some(item), + structure: None, + logic_info: Some(logic), + slot_inserts, + memory: Some(memory), + device: None, + transmission_receiver, + wireless_logic, + circuit_holder, + .. + } => { + let mut logic: LogicInfo = logic.into(); + if !page.mode_insert.is_empty() { + logic.modes = Some(mode_inserts_to_info(&page.mode_insert)); + } + logic.transmission_receiver = transmission_receiver.unwrap_or(false); + logic.wireless_logic = wireless_logic.unwrap_or(false); + logic.circuit_holder = circuit_holder.unwrap_or(false); + + templates.push(ObjectTemplate::ItemLogicMemory(ItemLogicMemoryTemplate { + prefab, + item: item.into(), + logic, + slots: slot_inserts_to_info(slot_inserts), + memory: memory.into(), + })); + } + Page { + item: None, + structure: Some(structure), + slot_inserts, + logic_info: None, + memory: None, + device: None, + transmission_receiver: None, + wireless_logic: None, + circuit_holder: None, + .. + } if slot_inserts.is_empty() => { + templates.push(ObjectTemplate::Structure(StructureTemplate { + prefab, + structure: structure.into(), + })); + // println!("Structure") + } + Page { + item: None, + structure: Some(structure), + slot_inserts, + logic_info: None, + memory: None, + device: None, + transmission_receiver: None, + wireless_logic: None, + circuit_holder: None, + .. + } => { + templates.push(ObjectTemplate::StructureSlots(StructureSlotsTemplate { + prefab, + structure: structure.into(), + slots: slot_inserts_to_info(slot_inserts), + })); + // println!("Structure") + } + Page { + item: None, + structure: Some(structure), + logic_info: Some(logic), + slot_inserts, + memory: None, + device: None, + transmission_receiver, + wireless_logic, + circuit_holder, + .. + } => { + let mut logic: LogicInfo = logic.into(); + if !page.mode_insert.is_empty() { + logic.modes = Some(mode_inserts_to_info(&page.mode_insert)); + } + logic.transmission_receiver = transmission_receiver.unwrap_or(false); + logic.wireless_logic = wireless_logic.unwrap_or(false); + logic.circuit_holder = circuit_holder.unwrap_or(false); + + templates.push(ObjectTemplate::StructureLogic(StructureLogicTemplate { + prefab, + structure: structure.into(), + logic, + slots: slot_inserts_to_info(slot_inserts), + })); + // println!("Structure") + } + Page { + item: None, + structure: Some(structure), + logic_info: Some(logic), + slot_inserts, + memory: None, + device: Some(device), + transmission_receiver, + wireless_logic, + circuit_holder, + .. + } => { + let mut logic: LogicInfo = logic.into(); + if !page.mode_insert.is_empty() { + logic.modes = Some(mode_inserts_to_info(&page.mode_insert)); + } + logic.transmission_receiver = transmission_receiver.unwrap_or(false); + logic.wireless_logic = wireless_logic.unwrap_or(false); + logic.circuit_holder = circuit_holder.unwrap_or(false); + + templates.push(ObjectTemplate::StructureLogicDevice( + StructureLogicDeviceTemplate { + prefab, + structure: structure.into(), + logic, + slots: slot_inserts_to_info(slot_inserts), + device: device.into(), + }, + )); + // println!("Structure") + } + Page { + item: None, + structure: Some(structure), + logic_info: Some(logic), + slot_inserts, + memory: Some(memory), + device: Some(device), + transmission_receiver, + wireless_logic, + circuit_holder, + .. + } => { + let mut logic: LogicInfo = logic.into(); + if !page.mode_insert.is_empty() { + logic.modes = Some(mode_inserts_to_info(&page.mode_insert)); + } + logic.transmission_receiver = transmission_receiver.unwrap_or(false); + logic.wireless_logic = wireless_logic.unwrap_or(false); + logic.circuit_holder = circuit_holder.unwrap_or(false); + templates.push(ObjectTemplate::StructureLogicDeviceMemory( + StructureLogicDeviceMemoryTemplate { + prefab, + structure: structure.into(), + logic, + slots: slot_inserts_to_info(slot_inserts), + device: device.into(), + memory: memory.into(), + }, + )); + // println!("Structure") + } + _ => panic!( + "Non conforming: {:?} \n\titem: {:?}\n\tstructure: {:?}\n\tlogic_info: {:?}\n\tslot_inserts: {:?}\n\tslot_logic: {:?}\n\tmemory: {:?}\n\tdevice: {:?}", + page.key, + page.item, + page.structure, + page.logic_info, + page.slot_inserts, + page.logic_slot_insert, + page.memory, + page.device, + ), + } + } + Ok(templates) +} + +fn slot_inserts_to_info(slots: &[stationpedia::SlotInsert]) -> Vec { + let mut tmp: Vec<_> = slots.into(); + tmp.sort_by(|a, b| a.slot_index.cmp(&b.slot_index)); + tmp.iter() + .map(|slot| SlotInfo { + name: slot.slot_name.clone(), + typ: slot.slot_type.clone(), + }) + .collect() +} + +fn mode_inserts_to_info(modes: &[stationpedia::ModeInsert]) -> BTreeMap { + modes + .iter() + .map(|mode| (mode.logic_access_types, mode.logic_name.clone())) + .collect() +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +#[serde(rename_all = "camelCase")] +pub struct ObjectDatabase { + pub prefabs: BTreeMap, + pub reagents: BTreeMap, + pub enums: enums::Enums, + pub prefabs_by_hash: BTreeMap, + pub structures: Vec, + pub devices: Vec, + pub items: Vec, + pub logicable_items: Vec, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(untagged)] +pub enum ObjectTemplate { + Structure(StructureTemplate), + StructureSlots(StructureSlotsTemplate), + StructureLogic(StructureLogicTemplate), + StructureLogicDevice(StructureLogicDeviceTemplate), + StructureLogicDeviceMemory(StructureLogicDeviceMemoryTemplate), + Item(ItemTemplate), + ItemSlots(ItemSlotsTemplate), + ItemLogic(ItemLogicTemplate), + ItemLogicMemory(ItemLogicMemoryTemplate), +} + +impl ObjectTemplate { + fn prefab(&self) -> &PrefabInfo { + use ObjectTemplate::*; + match self { + Structure(s) => &s.prefab, + StructureSlots(s) => &s.prefab, + StructureLogic(s) => &s.prefab, + StructureLogicDevice(s) => &s.prefab, + StructureLogicDeviceMemory(s) => &s.prefab, + Item(i) => &i.prefab, + ItemSlots(i) => &i.prefab, + ItemLogic(i) => &i.prefab, + ItemLogicMemory(i) => &i.prefab, + } + } +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +#[serde(rename_all = "camelCase")] +pub struct PrefabInfo { + pub prefab_name: String, + pub prefab_hash: i32, + pub desc: String, + pub name: String, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +#[serde(rename_all = "camelCase")] +pub struct SlotInfo { + pub name: String, + pub typ: String, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +#[serde(rename_all = "camelCase")] +pub struct LogicInfo { + pub logic_slot_types: BTreeMap, + pub logic_types: stationpedia::LogicTypes, + #[serde(skip_serializing_if = "Option::is_none")] + pub modes: Option>, + pub transmission_receiver: bool, + pub wireless_logic: bool, + pub circuit_holder: bool, +} + +impl From<&stationpedia::LogicInfo> for LogicInfo { + fn from(value: &stationpedia::LogicInfo) -> Self { + LogicInfo { + logic_slot_types: value.logic_slot_types.clone(), + logic_types: value.logic_types.clone(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + } + } +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +#[serde(rename_all = "camelCase")] +pub struct ItemInfo { + pub consumable: bool, + #[serde(skip_serializing_if = "Option::is_none")] + pub filter_type: Option, + pub ingredient: bool, + pub max_quantity: f64, + #[serde(skip_serializing_if = "Option::is_none")] + pub reagents: Option>, + pub slot_class: String, + pub sorting_class: String, +} + +impl From<&stationpedia::Item> for ItemInfo { + fn from(item: &stationpedia::Item) -> Self { + ItemInfo { + consumable: item.consumable.unwrap_or(false), + filter_type: item.filter_type.clone(), + ingredient: item.ingredient.unwrap_or(false), + max_quantity: item.max_quantity.unwrap_or(1.0), + reagents: item + .reagents + .as_ref() + .map(|map| map.iter().map(|(key, val)| (key.clone(), *val)).collect()), + slot_class: item.slot_class.clone(), + sorting_class: item.sorting_class.clone(), + } + } +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +#[serde(rename_all = "camelCase")] +pub struct DeviceInfo { + pub connection_list: Vec<(String, String)>, + #[serde(skip_serializing_if = "Option::is_none")] + 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, +} + +impl From<&stationpedia::Device> for DeviceInfo { + fn from(value: &stationpedia::Device) -> Self { + DeviceInfo { + connection_list: value.connection_list.clone(), + device_pins_length: value.devices_length, + has_activate_state: value.has_activate_state, + has_atmosphere: value.has_atmosphere, + has_color_state: value.has_color_state, + has_lock_state: value.has_lock_state, + has_mode_state: value.has_mode_state, + has_on_off_state: value.has_on_off_state, + has_open_state: value.has_open_state, + has_reagents: value.has_reagents, + } + } +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +#[serde(rename_all = "camelCase")] +pub struct StructureInfo { + pub small_grid: bool, +} + +impl From<&stationpedia::Structure> for StructureInfo { + fn from(value: &stationpedia::Structure) -> Self { + StructureInfo { + small_grid: value.small_grid, + } + } +} +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +#[serde(rename_all = "camelCase")] +pub struct Instruction { + pub description: String, + pub typ: String, + pub value: i64, +} + +impl From<&stationpedia::Instruction> for Instruction { + fn from(value: &stationpedia::Instruction) -> Self { + Instruction { + description: value.description.clone(), + typ: value.type_.clone(), + value: value.value, + } + } +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +#[serde(rename_all = "camelCase")] +pub struct MemoryInfo { + #[serde(skip_serializing_if = "Option::is_none")] + pub instructions: Option>, + pub memory_access: String, + pub memory_size: i64, +} + +impl From<&stationpedia::Memory> for MemoryInfo { + fn from(value: &stationpedia::Memory) -> Self { + MemoryInfo { + instructions: value.instructions.as_ref().map(|insts| { + insts + .iter() + .map(|(key, value)| (key.clone(), value.into())) + .collect() + }), + memory_access: value.memory_access.clone(), + memory_size: value.memory_size, + } + } +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +#[serde(rename_all = "camelCase")] +pub struct StructureTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +#[serde(rename_all = "camelCase")] +pub struct StructureSlotsTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, + pub slots: Vec, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +#[serde(rename_all = "camelCase")] +pub struct StructureLogicTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, + pub logic: LogicInfo, + pub slots: Vec, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +#[serde(rename_all = "camelCase")] +pub struct StructureLogicDeviceTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, + pub logic: LogicInfo, + pub slots: Vec, + pub device: DeviceInfo, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +#[serde(rename_all = "camelCase")] +pub struct StructureLogicDeviceMemoryTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, + pub logic: LogicInfo, + pub slots: Vec, + pub device: DeviceInfo, + pub memory: MemoryInfo, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +#[serde(rename_all = "camelCase")] +pub struct ItemTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +#[serde(rename_all = "camelCase")] +pub struct ItemSlotsTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + pub slots: Vec, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +#[serde(rename_all = "camelCase")] +pub struct ItemLogicTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + pub logic: LogicInfo, + pub slots: Vec, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +#[serde(rename_all = "camelCase")] +pub struct ItemLogicMemoryTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + pub logic: LogicInfo, + pub slots: Vec, + pub memory: MemoryInfo, +} diff --git a/xtask/src/generate/enums.rs b/xtask/src/generate/enums.rs new file mode 100644 index 0000000..315ab5b --- /dev/null +++ b/xtask/src/generate/enums.rs @@ -0,0 +1,397 @@ +use convert_case::{Case, Casing}; +use std::collections::BTreeMap; +use std::{ + fmt::Display, + io::{BufWriter, Write}, + path::PathBuf, + str::FromStr, +}; +pub fn generate_enums( + stationpedia: &crate::stationpedia::Stationpedia, + enums: &crate::enums::Enums, + workspace: &std::path::Path, +) -> color_eyre::Result> { + println!("Writing Enum Listings ..."); + let enums_path = workspace + .join("ic10emu") + .join("src") + .join("vm") + .join("enums"); + if !enums_path.exists() { + std::fs::create_dir(&enums_path)?; + } + + let mut writer = + std::io::BufWriter::new(std::fs::File::create(enums_path.join("script_enums.rs"))?); + write_repr_enum_use_header(&mut writer)?; + for enm in enums.script_enums.values() { + write_enum_listing(&mut writer, enm)?; + } + + let mut writer = + std::io::BufWriter::new(std::fs::File::create(enums_path.join("basic_enums.rs"))?); + write_repr_enum_use_header(&mut writer)?; + for enm in enums.basic_enums.values() { + write_enum_listing(&mut writer, enm)?; + } + write_enum_aggragate_mod(&mut writer, &enums.basic_enums)?; + + let mut writer = std::io::BufWriter::new(std::fs::File::create(enums_path.join("prefabs.rs"))?); + write_repr_enum_use_header(&mut writer)?; + let prefabs = stationpedia + .pages + .iter() + .map(|page| { + let variant = ReprEnumVariant { + value: page.prefab_hash, + deprecated: false, + props: vec![ + ("name".to_owned(), page.title.clone()), + ("desc".to_owned(), page.description.clone()), + ], + }; + (page.prefab_name.clone(), variant) + }) + .collect::>(); + write_repr_enum(&mut writer, "StationpediaPrefab", &prefabs, true)?; + + Ok(vec![ + enums_path.join("script_enums.rs"), + enums_path.join("basic_enums.rs"), + enums_path.join("prefabs.rs"), + ]) +} + +fn write_enum_aggragate_mod( + writer: &mut BufWriter, + enums: &BTreeMap, +) -> color_eyre::Result<()> { + let variant_lines = enums + .iter() + .map(|(name, listing)| { + let name = if name.is_empty() || name == "_unnamed" { + "Unnamed" + } else { + name + }; + format!( + " {}({}),", + name.to_case(Case::Pascal), + listing.enum_name.to_case(Case::Pascal) + ) + }) + .collect::>() + .join("\n"); + let value_arms = enums + .keys() + .map(|name| { + let variant_name = (if name.is_empty() || name == "_unnamed" { + "Unnamed" + } else { + name + }) + .to_case(Case::Pascal); + format!(" Self::{variant_name}(enm) => *enm as u32,",) + }) + .collect::>() + .join("\n"); + + let get_str_arms = enums + .keys() + .map(|name| { + let variant_name = (if name.is_empty() || name == "_unnamed" { + "Unnamed" + } else { + name + }) + .to_case(Case::Pascal); + format!(" Self::{variant_name}(enm) => enm.get_str(prop),",) + }) + .collect::>() + .join("\n"); + let iter_chain = enums + .iter() + .enumerate() + .map(|(index, (name, listing))| { + let variant_name = (if name.is_empty() || name == "_unnamed" { + "Unnamed" + } else { + name + }) + .to_case(Case::Pascal); + let enum_name = listing.enum_name.to_case(Case::Pascal); + if index == 0 { + format!("{enum_name}::iter().map(|enm| Self::{variant_name}(enm))") + } else { + format!(".chain({enum_name}::iter().map(|enm| Self::{variant_name}(enm)))") + } + }) + .collect::>() + .join("\n"); + write!( + writer, + "pub enum BasicEnum {{\n\ + {variant_lines} + }}\n\ + impl BasicEnum {{\n \ + pub fn get_value(&self) -> u32 {{\n \ + match self {{\n \ + {value_arms}\n \ + }}\n \ + }}\n\ + pub fn get_str(&self, prop: &str) -> Option<&'static str> {{\n \ + match self {{\n \ + {get_str_arms}\n \ + }}\n \ + }}\n\ + pub fn iter() -> impl std::iter::Iterator {{\n \ + use strum::IntoEnumIterator;\n \ + {iter_chain}\n \ + }} + }}\n\ + " + )?; + let arms = enums + .iter() + .flat_map(|(name, listing)| { + let variant_name = (if name.is_empty() || name == "_unnamed" { + "Unnamed" + } else { + name + }) + .to_case(Case::Pascal); + let name = if name == "_unnamed" { + "".to_string() + } else { + name.clone() + }; + let enum_name = listing.enum_name.to_case(Case::Pascal); + listing.values.keys().map(move |variant| { + let sep = if name.is_empty() { "" } else { "." }; + let pat = format!("{name}{sep}{variant}").to_lowercase(); + let variant = variant.to_case(Case::Pascal); + format!("\"{pat}\" => Ok(Self::{variant_name}({enum_name}::{variant})),") + }) + }) + .collect::>() + .join("\n "); + write!( + writer, + "\ + impl std::str::FromStr for BasicEnum {{\n \ + type Err = crate::errors::ParseError;\n \ + fn from_str(s: &str) -> Result {{\n \ + let end = s.len();\n \ + match s {{\n \ + {arms}\n \ + _ => Err(crate::errors::ParseError{{ line: 0, start: 0, end, msg: format!(\"Unknown enum '{{}}'\", s) }})\n \ + }}\n \ + }}\n\ + }}\ + " + )?; + let display_arms = enums + .keys() + .map(|name| { + let variant_name = (if name.is_empty() || name == "_unnamed" { + "Unnamed" + } else { + name + }) + .to_case(Case::Pascal); + let name = if name == "_unnamed" { + "".to_string() + } else { + name.clone() + }; + let sep = if name.is_empty() || name == "_unnamed" { + "" + } else { + "." + }; + let pat = format!("{name}{sep}{{}}"); + format!(" Self::{variant_name}(enm) => write!(f, \"{pat}\", enm),",) + }) + .collect::>() + .join("\n "); + write!( + writer, + "\ + impl std::fmt::Display for BasicEnum {{\n \ + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {{\n \ + match self {{\n \ + {display_arms}\n \ + }}\n \ + }}\n\ + }}\ + " + )?; + Ok(()) +} +pub fn write_enum_listing( + writer: &mut BufWriter, + enm: &crate::enums::EnumListing, +) -> color_eyre::Result<()> { + let max = enm + .values + .values() + .map(|var| var.value) + .max() + .expect("enum should have max value"); + let min = enm + .values + .values() + .map(|var| var.value) + .min() + .expect("enum should have min value"); + + if max < u8::MAX as i64 && min >= u8::MIN as i64 { + let variants: Vec<_> = enm + .values + .iter() + .map(|(n, var)| { + let variant = ReprEnumVariant { + value: var.value as u8, + deprecated: var.deprecated, + props: vec![("docs".to_owned(), var.description.to_owned())], + }; + (n.clone(), variant) + }) + .collect(); + write_repr_enum( + writer, + &enm.enum_name.to_case(Case::Pascal), + &variants, + true, + )?; + } else if max < u16::MAX as i64 && min >= u16::MIN as i64 { + let variants: Vec<_> = enm + .values + .iter() + .map(|(n, var)| { + let variant = ReprEnumVariant { + value: var.value as u16, + deprecated: var.deprecated, + props: vec![("docs".to_owned(), var.description.to_owned())], + }; + (n.clone(), variant) + }) + .collect(); + write_repr_enum(writer, &enm.enum_name, &variants, true)?; + } else if max < u32::MAX as i64 && min >= u32::MIN as i64 { + let variants: Vec<_> = enm + .values + .iter() + .map(|(n, var)| { + let variant = ReprEnumVariant { + value: var.value as u32, + deprecated: var.deprecated, + props: vec![("docs".to_owned(), var.description.to_owned())], + }; + (n.clone(), variant) + }) + .collect(); + write_repr_enum(writer, &enm.enum_name, &variants, true)?; + } else if max < i32::MAX as i64 && min >= i32::MIN as i64 { + let variants: Vec<_> = enm + .values + .iter() + .map(|(n, var)| { + let variant = ReprEnumVariant { + value: var.value as i32, + deprecated: var.deprecated, + props: vec![("docs".to_owned(), var.description.to_owned())], + }; + (n.clone(), variant) + }) + .collect(); + write_repr_enum(writer, &enm.enum_name, &variants, true)?; + } else { + let variants: Vec<_> = enm + .values + .iter() + .map(|(n, var)| { + let variant = ReprEnumVariant { + value: var.value as i32, + deprecated: var.deprecated, + props: vec![("docs".to_owned(), var.description.to_owned())], + }; + (n.clone(), variant) + }) + .collect(); + write_repr_enum(writer, &enm.enum_name, &variants, true)?; + } + Ok(()) +} + +struct ReprEnumVariant

+where + P: Display + FromStr, +{ + pub value: P, + pub deprecated: bool, + pub props: Vec<(String, String)>, +} + +fn write_repr_enum_use_header( + writer: &mut BufWriter, +) -> color_eyre::Result<()> { + write!( + writer, + "use serde::{{Deserialize, Serialize}};\n\ + use strum::{{\n \ + AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr,\n\ + }};\n" + )?; + Ok(()) +} + +fn write_repr_enum<'a, T: std::io::Write, I, P>( + writer: &mut BufWriter, + name: &str, + variants: I, + use_phf: bool, +) -> color_eyre::Result<()> +where + P: Display + FromStr + 'a, + I: IntoIterator)>, +{ + let additional_strum = if use_phf { "#[strum(use_phf)]\n" } else { "" }; + let repr = std::any::type_name::

(); + write!( + writer, + "#[derive(Debug, Display, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, EnumString, AsRefStr, EnumProperty, EnumIter, FromRepr, Serialize, Deserialize)]\n\ + {additional_strum}\ + #[repr({repr})]\n\ + pub enum {name} {{\n" + )?; + for (name, variant) in variants { + let variant_name = name.replace('.', "").to_case(Case::Pascal); + let serialize = vec![name.clone()]; + 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()); + } + for (prop_name, prop_val) in &variant.props { + props.push(format!("{prop_name} = r#\"{prop_val}\"#")); + } + let 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} = {val}{repr}," + )?; + } + writeln!(writer, "}}")?; + Ok(()) +} diff --git a/xtask/src/generate/instructions.rs b/xtask/src/generate/instructions.rs new file mode 100644 index 0000000..095e83a --- /dev/null +++ b/xtask/src/generate/instructions.rs @@ -0,0 +1,216 @@ +use convert_case::{Case, Casing}; +use std::{collections::BTreeMap, path::PathBuf}; + +use crate::{generate::utils, stationpedia}; + +pub fn generate_instructions( + stationpedia: &stationpedia::Stationpedia, + workspace: &std::path::Path, +) -> color_eyre::Result> { + let instructions_path = workspace + .join("ic10emu") + .join("src") + .join("vm") + .join("instructions"); + if !instructions_path.exists() { + std::fs::create_dir(&instructions_path)?; + } + let mut writer = + std::io::BufWriter::new(std::fs::File::create(instructions_path.join("enums.rs"))?); + write_instructions_enum(&mut writer, &stationpedia.script_commands)?; + + let mut writer = + std::io::BufWriter::new(std::fs::File::create(instructions_path.join("traits.rs"))?); + + write_instruction_interface_trait(&mut writer)?; + for (typ, info) in &stationpedia.script_commands { + write_instruction_trait(&mut writer, (typ, info))?; + } + write_instruction_super_trait(&mut writer, &stationpedia.script_commands)?; + + Ok(vec![ + instructions_path.join("enums.rs"), + instructions_path.join("traits.rs"), + ]) +} + +fn write_instructions_enum( + writer: &mut T, + instructions: &BTreeMap, +) -> color_eyre::Result<()> { + println!("Writing instruction Listings ..."); + + let mut instructions = instructions.clone(); + for (_, ref mut info) in instructions.iter_mut() { + info.example = utils::strip_color(&info.example); + } + + write!( + writer, + "use serde::{{Deserialize, Serialize}};\n\ + use strum::{{\n \ + Display, EnumIter, EnumProperty, EnumString, FromRepr,\n\ + }};\n + use crate::vm::object::traits::Programmable;\n\ + use crate::vm::instructions::traits::*;\n\ + " + )?; + + write!( + writer, + "#[derive(Debug, Display, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Serialize, Deserialize)]\n\ + #[derive(EnumIter, EnumString, EnumProperty, FromRepr)]\n\ + #[strum(use_phf, serialize_all = \"lowercase\")]\n\ + #[serde(rename_all = \"lowercase\")]\n\ + pub enum InstructionOp {{\n\ + " + )?; + writeln!(writer, " Nop,")?; + for (name, info) in &instructions { + let props_str = format!( + "props( example = \"{}\", desc = \"{}\", operands = \"{}\" )", + &info.example, + &info.desc, + count_operands(&info.example) + ); + writeln!( + writer, + " #[strum({props_str})] {},", + name.to_case(Case::Pascal) + )?; + } + writeln!(writer, "}}")?; + + write!( + writer, + "impl InstructionOp {{\n \ + pub fn num_operands(&self) -> usize {{\n \ + self.get_str(\"operands\").expect(\"instruction without operand property\").parse::().expect(\"invalid instruction operand property\")\n \ + }}\n\ + \n \ + pub fn execute(\n \ + &self,\n \ + ic: &mut T,\n \ + vm: &crate::vm::VM,\n \ + operands: &[crate::vm::instructions::operands::Operand],\n \ + ) -> Result<(), crate::errors::ICError>\n \ + where\n \ + T: Programmable,\n\ + {{\n \ + let num_operands = self.num_operands();\n \ + if operands.len() != num_operands {{\n \ + return Err(crate::errors::ICError::mismatch_operands(operands.len(), num_operands as u32));\n \ + }}\n \ + match self {{\n \ + Self::Nop => Ok(()),\n \ + " + )?; + + for (name, info) in instructions { + let num_operands = count_operands(&info.example); + let operands = (0..num_operands) + .map(|i| format!("&operands[{}]", i)) + .collect::>() + .join(", "); + let trait_name = name.to_case(Case::Pascal); + writeln!( + writer, + " Self::{trait_name} => ic.execute_{name}(vm, {operands}),", + )?; + } + + write!( + writer, + " }}\ + }}\n\ + }} + " + )?; + + Ok(()) +} + +fn write_instruction_trait( + writer: &mut T, + instruction: (&str, &stationpedia::Command), +) -> color_eyre::Result<()> { + let (name, info) = instruction; + let trait_name = format!("{}Instruction", name.to_case(Case::Pascal)); + let operands = operand_names(&info.example) + .iter() + .map(|name| { + format!( + "{}: &crate::vm::instructions::operands::Operand", + name.to_case(Case::Snake) + ) + }) + .collect::>() + .join(", "); + let example = utils::strip_color(&info.example); + write!( + writer, + "pub trait {trait_name}: IntegratedCircuit {{\n \ + /// {example} \n \ + fn execute_{name}(&mut self, vm: &crate::vm::VM, {operands}) -> Result<(), crate::errors::ICError>;\n\ + }}" + )?; + Ok(()) +} + +fn count_operands(example: &str) -> usize { + example.split(' ').count() - 1 +} + +fn operand_names(example: &str) -> Vec { + utils::strip_color(example) + .split(' ') + .skip(1) + .map(|name| name.split(['?', '(']).next().unwrap().to_string()) + .collect() +} + +fn write_instruction_interface_trait(writer: &mut T) -> color_eyre::Result<()> { + write!( + writer, + "\ + use std::collections::BTreeMap;\n\ + use crate::vm::object::traits::{{Logicable, MemoryWritable, SourceCode}};\n\ + use crate::errors::ICError; \n\ + pub trait IntegratedCircuit: Logicable + MemoryWritable + SourceCode {{\n \ + fn get_instruciton_pointer(&self) -> usize;\n \ + fn set_next_instruction(&mut self, next_instruction: usize);\n \ + fn reset(&mut self);\n \ + fn get_real_target(&self, indirection: u32, target: u32) -> Result;\n \ + fn get_register(&self, indirection: u32, target: u32) -> Result;\n \ + fn set_register(&mut self, indirection: u32, target: u32, val: f64) -> Result;\n \ + fn set_return_address(&mut self, addr: f64);\n \ + fn push_stack(&mut self, val: f64) -> Result;\n \ + fn pop_stack(&mut self) -> Result;\n \ + fn peek_stack(&self) -> Result;\n \ + fn get_aliases(&self) -> &BTreeMap;\n \ + fn get_defines(&self) -> &BTreeMap;\n \ + fn get_lables(&self) -> &BTreeMap;\n\ + }}\n\ + " + )?; + Ok(()) +} + +fn write_instruction_super_trait( + writer: &mut T, + instructions: &BTreeMap, +) -> color_eyre::Result<()> { + let traits = instructions + .keys() + .map(|name| format!("{}Instruction", name.to_case(Case::Pascal))) + .collect::>() + .join(" + "); + write!( + writer, + "\ + pub trait ICInstructable: {traits} {{}}\n\ + impl ICInstructable for T where T: {traits} {{}} + " + )?; + Ok(()) +} diff --git a/xtask/src/generate/utils.rs b/xtask/src/generate/utils.rs new file mode 100644 index 0000000..f39d85f --- /dev/null +++ b/xtask/src/generate/utils.rs @@ -0,0 +1,60 @@ +use onig::{Captures, Regex, RegexOptions, Syntax}; + +pub fn strip_color(s: &str) -> String { + let color_regex = Regex::with_options( + r#"((:?(?!).)+?)"#, + RegexOptions::REGEX_OPTION_MULTILINE | RegexOptions::REGEX_OPTION_CAPTURE_GROUP, + Syntax::default(), + ) + .unwrap(); + let mut new = s.to_owned(); + loop { + new = color_regex.replace_all(&new, |caps: &Captures| caps.at(2).unwrap_or("").to_string()); + if !color_regex.is_match(&new) { + break; + } + } + new +} + +#[allow(dead_code)] +pub fn color_to_heml(s: &str) -> String { + let color_regex = Regex::with_options( + r#"((:?(?!).)+?)"#, + RegexOptions::REGEX_OPTION_MULTILINE | RegexOptions::REGEX_OPTION_CAPTURE_GROUP, + Syntax::default(), + ) + .unwrap(); + let mut new = s.to_owned(); + loop { + new = color_regex.replace_all(&new, |caps: &Captures| { + format!( + r#"

{}
"#, + caps.at(1).unwrap_or(""), + caps.at(2).unwrap_or("") + ) + }); + if !color_regex.is_match(&new) { + break; + } + } + new +} + +#[allow(dead_code)] +pub fn strip_link(s: &str) -> String { + let link_regex = Regex::with_options( + r#"(.+?)"#, + RegexOptions::REGEX_OPTION_MULTILINE | RegexOptions::REGEX_OPTION_CAPTURE_GROUP, + Syntax::default(), + ) + .unwrap(); + let mut new = s.to_owned(); + loop { + new = link_regex.replace_all(&new, |caps: &Captures| caps.at(2).unwrap_or("").to_string()); + if !link_regex.is_match(&new) { + break; + } + } + new +} diff --git a/xtask/src/main.rs b/xtask/src/main.rs index ab9d2d0..be64af4 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -2,6 +2,10 @@ use std::process::{Command, ExitStatus}; use clap::{Parser, Subcommand}; +mod enums; +mod generate; +mod stationpedia; + /// Helper program to start ic10emu and website. /// /// Can be invoked as `cargo xtask ` @@ -44,11 +48,19 @@ enum Task { Deploy {}, /// bump the cargo.toml and package,json versions Version { - #[arg(last = true, default_value = "patch", value_parser = clap::builder::PossibleValuesParser::new(VALID_VERSION_TYPE))] + #[arg(default_value = "patch", value_parser = clap::builder::PossibleValuesParser::new(VALID_VERSION_TYPE))] version: String, }, /// update changelog Changelog {}, + Generate { + #[arg()] + /// Path to Stationeers installation. Used to locate "Stationpedia.json" and "Enums.json" + /// generated by https://github.com/Ryex/StationeersStationpediaExtractor + /// Otherwise looks for both files in `` or `/data`. + /// Can also point directly at a folder containing the two files. + path: Option, + }, } #[derive(thiserror::Error)] @@ -57,6 +69,8 @@ enum Error { BuildFailed(String, String, std::process::ExitStatus), #[error("failed to run command `{0}`")] Command(String, #[source] std::io::Error), + #[error("can not find `Stationpedia.json` and/or `Enums.json` at `{0}`")] + BadStationeresPath(std::path::PathBuf), } impl std::fmt::Debug for Error { @@ -75,7 +89,8 @@ impl std::fmt::Debug for Error { } const VERSION: Option<&str> = option_env!("CARGO_PKG_VERSION"); -fn main() -> Result<(), Error> { +fn main() -> color_eyre::Result<()> { + color_eyre::install()?; let args = Args::parse(); let workspace = { let out = Command::new("cargo") @@ -132,21 +147,78 @@ fn main() -> Result<(), Error> { cmd.args(["version", &version]).status().map_err(|e| { Error::Command(format!("{}", cmd.get_program().to_string_lossy()), e) })?; - }, - Task::Changelog { } => { + } + Task::Changelog {} => { let mut cmd = Command::new("git-changelog"); cmd.current_dir(&workspace); cmd.args([ - "-io", "CHANGELOG.md", - "-t", "path:CHANGELOG.md.jinja", - "-c", "conventional", - "--bump", VERSION.unwrap_or("auto"), + "-io", + "CHANGELOG.md", + "-t", + "path:CHANGELOG.md.jinja", + "-c", + "conventional", + "--bump", + VERSION.unwrap_or("auto"), "--parse-refs", - "--trailers" - ]).status().map_err(|e| { - Error::Command(format!("{}", cmd.get_program().to_string_lossy()), e) - })?; - }, + "--trailers", + ]) + .status() + .map_err(|e| Error::Command(format!("{}", cmd.get_program().to_string_lossy()), e))?; + } + Task::Generate { path } => { + let path = match path { + Some(path) => { + let mut path = std::path::PathBuf::from(path); + if path.exists() + && path + .parent() + .and_then(|p| p.file_name()) + .is_some_and(|p| p == "Stationeers") + && path.file_name().is_some_and(|name| { + (std::env::consts::OS == "windows" && name == "rocketstation.exe") + || (name == "rocketstation") + || (name == "rocketstation_Data") + }) + { + path = path.parent().unwrap().to_path_buf(); + } + if path.is_dir() + && path.file_name().is_some_and(|name| name == "Stationeers") + && path.join("Stationpedia").join("Stationpedia.json").exists() + { + path = path.join("Stationpedia"); + } + if path.is_file() + && path + .file_name() + .is_some_and(|name| name == "Stationpedia.json") + { + path = path.parent().unwrap().to_path_buf(); + } + path + } + None => { + let mut path = workspace.clone(); + if path.join("data").join("Stationpedia.json").exists() + && path.join("data").join("Enums.json").exists() + { + path = path.join("data") + } + + path + } + }; + + if path.is_dir() + && path.join("Stationpedia.json").exists() + && path.join("Enums.json").exists() + { + generate::generate(&path, &workspace)?; + } else { + return Err(Error::BadStationeresPath(path).into()); + } + } } Ok(()) } diff --git a/xtask/src/stationpedia.rs b/xtask/src/stationpedia.rs new file mode 100644 index 0000000..c862d89 --- /dev/null +++ b/xtask/src/stationpedia.rs @@ -0,0 +1,346 @@ +use serde_derive::{Deserialize, Serialize}; +use serde_with::{serde_as, DisplayFromStr}; +use std::collections::BTreeMap; + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename = "Stationpedia", deny_unknown_fields)] +pub struct Stationpedia { + pub pages: Vec, + pub reagents: BTreeMap, + #[serde(rename = "scriptCommands")] + pub script_commands: BTreeMap, +} + +#[allow(dead_code)] +impl Stationpedia { + pub fn lookup_prefab_name(&self, prefab_name: &'_ str) -> Option<&Page> { + self.pages.iter().find(|p| p.prefab_name == prefab_name) + } + + pub fn lookup_key(&self, key: &str) -> Option<&Page> { + self.pages.iter().find(|p| p.key == key) + } + + pub fn lookup_hash(&self, hash: i32) -> Option<&Page> { + self.pages.iter().find(|p| p.prefab_hash == hash) + } +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Reagent { + #[serde(rename = "Hash")] + pub hash: i64, + #[serde(rename = "Unit")] + pub unit: String, + #[serde(rename = "Sources")] + pub sources: Option>, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Command { + pub desc: String, + pub example: String, +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Page { + #[serde(rename = "ConnectionInsert")] + pub connection_insert: Vec, + #[serde(rename = "ConstructedByKits")] + pub constructs: Vec, + #[serde(rename = "Description")] + pub description: String, + #[serde(rename = "Device")] + pub device: Option, + /// the item , if none then deprecated + #[serde(rename = "Item")] + pub item: Option, + #[serde(rename = "Structure")] + pub structure: Option, + #[serde(rename = "Key")] + pub key: String, + #[serde(rename = "LogicInfo")] + pub logic_info: Option, + #[serde(rename = "LogicInsert")] + pub logic_insert: Vec, + #[serde(rename = "LogicSlotInsert")] + pub logic_slot_insert: Vec, + #[serde(rename = "Memory")] + pub memory: Option, + #[serde(rename = "ModeInsert")] + pub mode_insert: Vec, + #[serde(rename = "PrefabHash")] + pub prefab_hash: i32, + #[serde(rename = "PrefabName")] + pub prefab_name: String, + #[serde(rename = "SlotInserts")] + pub slot_inserts: Vec, + #[serde(rename = "Title")] + pub title: String, + #[serde(rename = "TransmissionReceiver")] + pub transmission_receiver: Option, + #[serde(rename = "WirelessLogic")] + pub wireless_logic: Option, + #[serde(rename = "CircuitHolder")] + pub circuit_holder: Option, + #[serde(rename = "BasePowerDraw")] + pub base_power_draw: Option, + #[serde(rename = "MaxPressure")] + pub max_pressure: Option, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Constructs { + #[serde(rename = "NameOfThing")] + pub name_of_thing: String, + #[serde(rename = "PageLink")] + pub page_link: String, + #[serde(rename = "PrefabHash")] + pub prefab_hash: i32, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Structure { + #[serde(rename = "SmallGrid")] + pub small_grid: bool, + #[serde(rename = "BuildStates")] + pub build_states: BuildStates, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +pub struct BuildStates(pub Vec); + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct BuildState { + #[serde(rename = "Tool")] + pub tool: Option>, + #[serde(rename = "ToolExit")] + pub tool_exit: Option>, + #[serde(rename = "CanManufacture", default)] + pub can_manufacture: bool, + #[serde(rename = "MachineTier")] + pub machine_tier: Option, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +pub enum MachineTier { + Undefined, + TierOne, + TierTwo, + TierThree, + Max, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Tool { + #[serde(rename = "IsTool", default)] + pub is_tool: bool, + #[serde(rename = "PrefabName")] + pub prefab_name: String, + #[serde(rename = "Quantity")] + pub quantity: Option, +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct SlotInsert { + #[serde(rename = "SlotIndex")] + #[serde_as(as = "DisplayFromStr")] + pub slot_index: u32, + #[serde(rename = "SlotName")] + pub slot_name: String, + #[serde(rename = "SlotType")] + pub slot_type: String, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct LogicInsert { + #[serde(rename = "LogicAccessTypes")] + pub logic_access_types: String, + #[serde(rename = "LogicName")] + pub logic_name: String, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct LogicSlotInsert { + #[serde(rename = "LogicAccessTypes")] + pub logic_access_types: String, + #[serde(rename = "LogicName")] + pub logic_name: String, +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct ModeInsert { + #[serde(rename = "LogicAccessTypes")] + #[serde_as(as = "DisplayFromStr")] + pub logic_access_types: u32, + #[serde(rename = "LogicName")] + pub logic_name: String, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct ConnectionInsert { + #[serde(rename = "LogicAccessTypes")] + pub logic_access_types: String, + #[serde(rename = "LogicName")] + pub logic_name: String, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct LogicInfo { + #[serde(rename = "LogicSlotTypes")] + pub logic_slot_types: BTreeMap, + #[serde(rename = "LogicTypes")] + pub logic_types: LogicTypes, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +pub struct LogicSlotTypes { + #[serde(flatten)] + pub slot_types: BTreeMap, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +pub struct LogicTypes { + #[serde(flatten)] + pub types: BTreeMap, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Memory { + #[serde(rename = "Instructions")] + pub instructions: Option>, + #[serde(rename = "MemoryAccess")] + pub memory_access: String, + #[serde(rename = "MemorySize")] + pub memory_size: i64, + #[serde(rename = "MemorySizeReadable")] + pub memory_size_readable: String, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Instruction { + #[serde(rename = "Description")] + pub description: String, + #[serde(rename = "Type")] + pub type_: String, + #[serde(rename = "Value")] + pub value: i64, +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Item { + #[serde(rename = "Consumable")] + pub consumable: Option, + #[serde(rename = "FilterType")] + pub filter_type: Option, + #[serde(rename = "Ingredient")] + pub ingredient: Option, + #[serde(rename = "MaxQuantity")] + pub max_quantity: Option, + #[serde(rename = "Reagents")] + pub reagents: Option>, + #[serde(rename = "SlotClass")] + pub slot_class: String, + #[serde(rename = "SortingClass")] + pub sorting_class: String, + #[serde(rename = "Recipes", default)] + pub recipes: Vec, +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +pub struct Recipe { + #[serde(rename = "CreatorPrefabName")] + pub creator_prefab_name: String, + #[serde(rename = "TierName")] + pub tier_name: String, + #[serde(rename = "Time")] + pub time: f64, + #[serde(rename = "Energy")] + pub energy: f64, + #[serde(rename = "Temperature")] + pub temperature: RecipeTemperature, + #[serde(rename = "Pressure")] + pub pressure: RecipePressure, + #[serde(rename = "RequiredMix")] + pub required_mix: RecipeGasMix, + #[serde(rename = "CountTypes")] + pub count_types: i64, + #[serde(flatten)] + pub reagents: indexmap::IndexMap, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct RecipeTemperature { + #[serde(rename = "Start")] + pub start: f64, + #[serde(rename = "Stop")] + pub stop: f64, + #[serde(rename = "IsValid")] + pub is_valid: bool, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct RecipePressure { + #[serde(rename = "Start")] + pub start: f64, + #[serde(rename = "Stop")] + pub stop: f64, + #[serde(rename = "IsValid")] + pub is_valid: bool, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct RecipeGasMix { + #[serde(rename = "Rule")] + pub rule: i64, + #[serde(rename = "IsAny")] + pub is_any: bool, + #[serde(rename = "IsAnyToRemove")] + pub is_any_to_remove: bool, + #[serde(flatten)] + pub reagents: BTreeMap, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +pub struct Device { + #[serde(rename = "ConnectionList")] + pub connection_list: Vec<(String, String)>, + #[serde(rename = "DevicesLength")] + pub devices_length: Option, + #[serde(rename = "HasActivateState")] + pub has_activate_state: bool, + #[serde(rename = "HasAtmosphere")] + pub has_atmosphere: bool, + #[serde(rename = "HasColorState")] + pub has_color_state: bool, + #[serde(rename = "HasLockState")] + pub has_lock_state: bool, + #[serde(rename = "HasModeState")] + pub has_mode_state: bool, + #[serde(rename = "HasOnOffState")] + pub has_on_off_state: bool, + #[serde(rename = "HasOpenState")] + pub has_open_state: bool, + #[serde(rename = "HasReagents")] + pub has_reagents: bool, +} From 48fbe671ff101e08fc8c4d4afc7451038c4694e9 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Tue, 7 May 2024 23:09:08 -0700 Subject: [PATCH 07/50] refactor(vm) cleanup errors --- ic10emu/src/device.rs | 3 +-- ic10emu/src/grammar.rs | 39 ++++++++++++++-------------- ic10emu/src/interpreter.rs | 5 ++-- ic10emu/src/vm/enums/basic_enums.rs | 2 +- ic10emu/src/vm/instructions/enums.rs | 1 - xtask/src/generate/enums.rs | 2 +- xtask/src/generate/instructions.rs | 1 - 7 files changed, 25 insertions(+), 28 deletions(-) diff --git a/ic10emu/src/device.rs b/ic10emu/src/device.rs index 48b2e3d..06a4f06 100644 --- a/ic10emu/src/device.rs +++ b/ic10emu/src/device.rs @@ -3,8 +3,7 @@ use crate::{ interpreter::ICState, network::{CableConnectionType, Connection}, vm::enums::script_enums::{ - LogicBatchMethod as BatchMode, LogicReagentMode as ReagentMode, - LogicSlotType as SlotLogicType, LogicType, + LogicReagentMode as ReagentMode, LogicSlotType as SlotLogicType, LogicType, }, vm::VM, }; diff --git a/ic10emu/src/grammar.rs b/ic10emu/src/grammar.rs index 0ba5559..41e582e 100644 --- a/ic10emu/src/grammar.rs +++ b/ic10emu/src/grammar.rs @@ -1,21 +1,22 @@ -use crate::interpreter; -use crate::tokens::{SplitConsecutiveIndicesExt, SplitConsecutiveWithIndices}; -use crate::vm::enums::script_enums::{ - LogicBatchMethod, LogicReagentMode, LogicSlotType, LogicType, -}; -use crate::vm::instructions::{ - enums::InstructionOp, - operands::{Device, DeviceSpec, Identifier, Number, Operand, RegisterSpec}, - Instruction, CONSTANTS_LOOKUP, -}; use crate::{ errors::{ICError, ParseError}, - vm::enums::basic_enums::BasicEnum, + interpreter, + tokens::{SplitConsecutiveIndicesExt, SplitConsecutiveWithIndices}, + vm::{ + enums::{ + basic_enums::BasicEnum, + script_enums::{LogicBatchMethod, LogicReagentMode, LogicSlotType, LogicType}, + }, + instructions::{ + enums::InstructionOp, + operands::{Device, DeviceSpec, Identifier, Number, Operand, RegisterSpec}, + Instruction, CONSTANTS_LOOKUP, + }, + }, }; use itertools::Itertools; -use std::fmt::Display; -use std::str::FromStr; -use strum::{EnumProperty, IntoEnumIterator}; +use std::{fmt::Display, str::FromStr}; +use strum::IntoEnumIterator; impl TryFrom for LogicType { type Error = ICError; @@ -1102,35 +1103,35 @@ mod tests { let value = lt.get_str("value"); assert!(value.is_some()); assert!(value.unwrap().parse::().is_ok()); - assert_eq!(lt as u16, value.unwrap()); + assert_eq!(lt as u16, value.unwrap().parse::().unwrap()); } for slt in LogicSlotType::iter() { println!("testing SlotLogicType.{slt}"); let value = slt.get_str("value"); assert!(value.is_some()); assert!(value.unwrap().parse::().is_ok()); - assert_eq!(slt as u8, value.unwrap()); + assert_eq!(slt as u8, value.unwrap().parse::().unwrap()); } 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()); + assert_eq!(bm as u8, value.unwrap().parse::().unwrap()); } 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()); + assert_eq!(rm as u8, value.unwrap().parse::().unwrap()); } 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()); + assert_eq!(le.get_value(), value.unwrap().parse::().unwrap()); } } diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index 0bd5f79..2676a4d 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -7,7 +7,6 @@ use std::{ }; use std::{ collections::{BTreeMap, HashSet}, - error::Error, fmt::Display, u32, }; @@ -18,7 +17,7 @@ use time::format_description; use crate::{ device::SlotType, - errors::{ICError, LineError, ParseError}, + errors::{ICError, LineError}, grammar, vm::{ enums::script_enums::{LogicSlotType as SlotLogicType, LogicType}, @@ -2506,7 +2505,7 @@ pub fn i64_to_f64(i: i64) -> f64 { #[cfg(test)] mod tests { - use crate::vm::VMError; + use crate::errors::VMError; use super::*; diff --git a/ic10emu/src/vm/enums/basic_enums.rs b/ic10emu/src/vm/enums/basic_enums.rs index 59d04c0..0d0d7af 100644 --- a/ic10emu/src/vm/enums/basic_enums.rs +++ b/ic10emu/src/vm/enums/basic_enums.rs @@ -3080,7 +3080,7 @@ impl std::str::FromStr for BasicEnum { type Err = crate::errors::ParseError; fn from_str(s: &str) -> Result { let end = s.len(); - match s { + 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)), diff --git a/ic10emu/src/vm/instructions/enums.rs b/ic10emu/src/vm/instructions/enums.rs index f3a66cf..7495baa 100644 --- a/ic10emu/src/vm/instructions/enums.rs +++ b/ic10emu/src/vm/instructions/enums.rs @@ -12,7 +12,6 @@ use serde::{Deserialize, Serialize}; use strum::{Display, EnumIter, EnumProperty, EnumString, FromRepr}; -use crate::vm::instructions::traits::*; use crate::vm::object::traits::Programmable; #[derive( Debug, diff --git a/xtask/src/generate/enums.rs b/xtask/src/generate/enums.rs index 315ab5b..a6d37b8 100644 --- a/xtask/src/generate/enums.rs +++ b/xtask/src/generate/enums.rs @@ -182,7 +182,7 @@ fn write_enum_aggragate_mod( type Err = crate::errors::ParseError;\n \ fn from_str(s: &str) -> Result {{\n \ let end = s.len();\n \ - match s {{\n \ + match s.to_lowercase().as_str() {{\n \ {arms}\n \ _ => Err(crate::errors::ParseError{{ line: 0, start: 0, end, msg: format!(\"Unknown enum '{{}}'\", s) }})\n \ }}\n \ diff --git a/xtask/src/generate/instructions.rs b/xtask/src/generate/instructions.rs index 095e83a..778f9a4 100644 --- a/xtask/src/generate/instructions.rs +++ b/xtask/src/generate/instructions.rs @@ -52,7 +52,6 @@ fn write_instructions_enum( Display, EnumIter, EnumProperty, EnumString, FromRepr,\n\ }};\n use crate::vm::object::traits::Programmable;\n\ - use crate::vm::instructions::traits::*;\n\ " )?; From 371167db455616070562353d3473e947245d3fe4 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Thu, 9 May 2024 09:49:26 -0700 Subject: [PATCH 08/50] refactor(vm) cleanup serde_derive usage --- Cargo.lock | 104 ++------------- ic10emu/Cargo.toml | 10 +- ic10emu/src/device.rs | 2 +- ic10emu/src/errors.rs | 2 +- ic10emu/src/grammar.rs | 2 +- ic10emu/src/interpreter.rs | 4 +- ic10emu/src/network.rs | 2 +- ic10emu/src/{vm/mod.rs => vm.rs} | 2 +- ic10emu/src/vm/{enums/mod.rs => enums.rs} | 0 ic10emu/src/vm/enums/basic_enums.rs | 2 +- ic10emu/src/vm/enums/prefabs.rs | 122 +++++++++--------- ic10emu/src/vm/enums/script_enums.rs | 2 +- .../{instructions/mod.rs => instructions.rs} | 2 +- ic10emu/src/vm/instructions/enums.rs | 2 +- ic10emu/src/vm/instructions/operands.rs | 2 +- ic10emu/src/vm/{object/mod.rs => object.rs} | 4 +- ic10emu/src/vm/object/errors.rs | 2 +- ic10emu/src/vm/object/stationpedia/generic.rs | 4 +- ic10emu_wasm/src/lib.rs | 2 +- ic10emu_wasm/src/types.rs | 2 +- xtask/Cargo.toml | 2 - xtask/src/generate.rs | 4 +- xtask/src/generate/database.rs | 2 +- xtask/src/generate/enums.rs | 2 +- xtask/src/generate/instructions.rs | 4 +- xtask/src/main.rs | 2 +- xtask/src/stationpedia.rs | 1 - 27 files changed, 102 insertions(+), 189 deletions(-) rename ic10emu/src/{vm/mod.rs => vm.rs} (99%) rename ic10emu/src/vm/{enums/mod.rs => enums.rs} (100%) rename ic10emu/src/vm/{instructions/mod.rs => instructions.rs} (93%) rename ic10emu/src/vm/{object/mod.rs => object.rs} (92%) diff --git a/Cargo.lock b/Cargo.lock index ad5c605..20727f4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -673,16 +673,16 @@ name = "ic10emu" version = "0.2.3" dependencies = [ "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", "strum", "strum_macros", @@ -890,15 +890,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8dd856d451cc0da70e2ef2ce95a18e39a93b7558bedf10201ad28503f918568" -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata 0.1.10", -] - [[package]] name = "memchr" version = "2.7.2" @@ -941,16 +932,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - [[package]] name = "num-conv" version = "0.1.0" @@ -1021,12 +1002,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "owo-colors" version = "3.5.0" @@ -1291,17 +1266,8 @@ checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", + "regex-automata", + "regex-syntax", ] [[package]] @@ -1312,15 +1278,9 @@ checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.3", + "regex-syntax", ] -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - [[package]] name = "regex-syntax" version = "0.8.3" @@ -1372,9 +1332,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.200" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc6f9cc94d67c0e21aaf7eda3a010fd3af78ebf6e096aa6e2e13c79749cce4f" +checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" dependencies = [ "serde_derive", ] @@ -1403,9 +1363,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.200" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "856f046b9400cee3c8c94ed572ecdb752444c24528c035cd35882aad6f492bcb" +checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" dependencies = [ "proc-macro2", "quote", @@ -1434,9 +1394,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.116" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" dependencies = [ "itoa", "ryu", @@ -1838,33 +1798,15 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - [[package]] name = "tracing-subscriber" version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", "sharded-slab", - "smallvec", "thread_local", - "tracing", "tracing-core", - "tracing-log", ] [[package]] @@ -2091,28 +2033,6 @@ dependencies = [ "rustix", ] -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - [[package]] name = "windows-core" version = "0.52.0" @@ -2273,6 +2193,4 @@ dependencies = [ "serde_with", "textwrap", "thiserror", - "tracing", - "tracing-subscriber", ] diff --git a/ic10emu/Cargo.toml b/ic10emu/Cargo.toml index c50a8df..cdeab67 100644 --- a/ic10emu/Cargo.toml +++ b/ic10emu/Cargo.toml @@ -17,7 +17,8 @@ paste = "1.0.14" phf = { version = "0.11.2", features = ["macros"] } rand = "0.8.5" regex = "1.10.3" -serde = { version = "1.0.197", features = ["derive"] } +serde = "1.0.201" +serde_derive = "1.0.201" serde_with = "3.7.0" strum = { version = "0.26.2", features = ["derive", "phf", "strum_macros"] } strum_macros = "0.26.2" @@ -37,8 +38,5 @@ time = { version = "0.3.34", features = [ "wasm-bindgen", ] } - -[build-dependencies] -convert_case = "0.6.0" -phf_codegen = "0.11.2" -regex = "1.10.3" +[dev-dependencies] +serde_json = "1.0.117" diff --git a/ic10emu/src/device.rs b/ic10emu/src/device.rs index 06a4f06..89adb6d 100644 --- a/ic10emu/src/device.rs +++ b/ic10emu/src/device.rs @@ -11,7 +11,7 @@ use std::{collections::BTreeMap, ops::Deref}; use itertools::Itertools; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use strum_macros::{AsRefStr, EnumIter, EnumString}; #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] diff --git a/ic10emu/src/errors.rs b/ic10emu/src/errors.rs index 23d42c4..53db639 100644 --- a/ic10emu/src/errors.rs +++ b/ic10emu/src/errors.rs @@ -1,5 +1,5 @@ use crate::vm::instructions::enums::InstructionOp; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::error::Error as StdError; use std::fmt::Display; use thiserror::Error; diff --git a/ic10emu/src/grammar.rs b/ic10emu/src/grammar.rs index 41e582e..49e7789 100644 --- a/ic10emu/src/grammar.rs +++ b/ic10emu/src/grammar.rs @@ -70,7 +70,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)) diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index 2676a4d..1e23988 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -1,5 +1,5 @@ use core::f64; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::{ cell::{Cell, RefCell}, ops::Deref, @@ -201,7 +201,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(); diff --git a/ic10emu/src/network.rs b/ic10emu/src/network.rs index fd8688d..fdb071b 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -1,6 +1,6 @@ use std::{collections::HashSet, ops::Deref}; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use strum_macros::{AsRefStr, EnumIter}; use thiserror::Error; diff --git a/ic10emu/src/vm/mod.rs b/ic10emu/src/vm.rs similarity index 99% rename from ic10emu/src/vm/mod.rs rename to ic10emu/src/vm.rs index 611d13f..e86e49e 100644 --- a/ic10emu/src/vm/mod.rs +++ b/ic10emu/src/vm.rs @@ -18,7 +18,7 @@ use std::{ }; use itertools::Itertools; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; #[derive(Debug)] pub struct VM { diff --git a/ic10emu/src/vm/enums/mod.rs b/ic10emu/src/vm/enums.rs similarity index 100% rename from ic10emu/src/vm/enums/mod.rs rename to ic10emu/src/vm/enums.rs diff --git a/ic10emu/src/vm/enums/basic_enums.rs b/ic10emu/src/vm/enums/basic_enums.rs index 0d0d7af..6e1d1c8 100644 --- a/ic10emu/src/vm/enums/basic_enums.rs +++ b/ic10emu/src/vm/enums/basic_enums.rs @@ -9,7 +9,7 @@ // // ================================================= -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; #[derive( Debug, diff --git a/ic10emu/src/vm/enums/prefabs.rs b/ic10emu/src/vm/enums/prefabs.rs index 8fef185..657236e 100644 --- a/ic10emu/src/vm/enums/prefabs.rs +++ b/ic10emu/src/vm/enums/prefabs.rs @@ -9,7 +9,7 @@ // // ================================================= -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; #[derive( Debug, @@ -90,8 +90,8 @@ pub enum StationpediaPrefab { serialize = "Robot", props( name = r#"AIMeE Bot"#, - desc = r#"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. - + desc = r#"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. + Intended to unearth and retrieve ores automatically, the unit requires basic programming knowledge to operate, and IC Editor Motherboard. AIMEe has 7 modes: @@ -209,7 +209,7 @@ RobotMode.None = 6 = Automatic assigned state, shows when storage slots are full props( name = r#"Advanced Composter"#, desc = r#"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. -When processing, it releases nitrogen and volatiles, as well a small amount of heat. +When processing, it releases nitrogen and volatiles, as well a small amount of heat. Compost composition Fertilizer 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. @@ -245,7 +245,7 @@ Fertilizer is produced at a 1:3 ratio of fertilizer to ingredients. The fertiliz props( name = r#"Advanced Tablet"#, desc = r#"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. - + 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" ) @@ -256,13 +256,13 @@ Fertilizer is produced at a 1:3 ratio of fertilizer to ingredients. The fertiliz props( name = r#"Air Conditioner"#, desc = r#"Built using the Kit (Atmospherics), the ExMin-designed air conditioner is used to raise or lower input gas temperature. - + The 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. Multiple 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. -Pipe Convection Radiators may be useful in bringing extreme pipe temperatures back towards normal world temperatures. - +Pipe Convection Radiators may be useful in bringing extreme pipe temperatures back towards normal world temperatures. + For more information on using the air conditioner, consult the temperature control Guides page."#, value = "-2087593337" ) @@ -281,7 +281,7 @@ For more information on using the air conditioner, consult the 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. + desc = r#"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. To 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" @@ -354,7 +354,7 @@ To enter setup mode, insert the board into a 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. Co-opted by the ODA, it now provides Stationeers with a way to produce pure ingots of various resources. -The 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. +The 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. Unlike the more advanced Furnace, the arc furnace cannot create alloys."#, value = "-247344692" ) @@ -369,9 +369,9 @@ Unlike the more advanced FurnaceXigo in 2155 on the basis of a unattributed prototype, the classic silicon anode solid-state design extends its optimum temperature range. POWER OUTPUT -The large power cell can discharge 288kW of power. +The large power cell can discharge 288kW of power. "#, value = "-459827268" ) @@ -904,7 +904,7 @@ Normal coil has a maximum wattage of 5kW. For higher-current applications, use < serialize = "ItemCableCoil", props( name = r#"Cable Coil"#, - desc = r#"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. + desc = r#"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. Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, value = "-466050668" ) @@ -1127,9 +1127,9 @@ Be there, even when you're not."#, serialize = "StructureCentrifuge", props( name = r#"Centrifuge"#, - desc = r#"If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore. - It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. - Its bigger brother Combustion Centrifuge can be used to process items significantly faster. Items processed by the centrifuge will be de-gassed. + desc = r#"If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore. + It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. + Its bigger brother Combustion Centrifuge can be used to process items significantly faster. Items processed by the centrifuge will be de-gassed. 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" ) @@ -1451,9 +1451,9 @@ The chute outlet is an aperture for exiting items from Centrifuge. If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore. - 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. - 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. - 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. + 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. + 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. + 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. 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. "#, value = "1238905683" @@ -2047,7 +2047,7 @@ A completed console displays all devices connected to the current power network. - FOOD TYPE - Each food type has its own decay properties. Tomato Soup lasts a lot longer than a Tomato, for instance. -- 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. +- 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. - 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: @@ -2169,7 +2169,7 @@ A completed console displays all devices connected to the current power network. 88.E5 89.F5 90.F#5 -91.G5 +91.G5 92.G#5 93.A5 94.A#5 @@ -2560,7 +2560,7 @@ To use on yourself: put duct tape in your active hand, hold RIGHT MOUSE BUTTON t props( name = r#"Evaporation Chamber"#, desc = r#"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. - 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. + 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. Paired with Condensation Chamber Stationeers can exploit the phase change properties of gases to build a DIY air conditioner."#, value = "-1429782576" ) @@ -2804,9 +2804,9 @@ The device has nonetheless proven indispensable for 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. - + With 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. - + Also, don't leave the door open, as it will equalize with the current world temperature. And maybe start to beep. For more information about food preservation, visit the food decay section of the Stationpedia."#, @@ -2819,7 +2819,7 @@ For more information about food preservation, visit 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. - + For more information about food preservation, visit the food decay section of the Stationpedia."#, value = "751887598" ) @@ -3364,7 +3364,7 @@ As the N Flow-P is a passive system, it equalizes pressure across the entire of serialize = "StructureHydroponicsTrayData", props( name = r#"Hydroponics Device"#, - desc = r#"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. + desc = r#"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. It 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" ) @@ -3379,7 +3379,7 @@ It can be automated using the HarvieAgrizero 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. + desc = r#"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. It can be automated using the Harvie."#, value = "1464854517" ) @@ -3414,7 +3414,7 @@ Highly sensitive to temperature, nitrice will begin to melt as soon as it is min serialize = "ItemOxite", props( name = r#"Ice (Oxite)"#, - desc = r#"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. + desc = r#"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. Highly 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" @@ -3426,7 +3426,7 @@ Highly sensitive to temperature, oxite will begin to melt as soon as it is mined props( name = r#"Ice (Volatiles)"#, desc = r#"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. - + Volatiles 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 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. "#, @@ -5629,7 +5629,7 @@ USE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to m desc = r#"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. You must place the laptop down to interact with the onsreen UI. - + Connects to Logic Transmitter"#, value = "141535121" ) @@ -5888,7 +5888,7 @@ Connects to Logic Tra serialize = "StructureLiquidPipeRadiator", props( name = r#"Liquid Pipe Convection Radiator"#, - desc = r#"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. + desc = r#"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. The speed of heat gain or loss will depend on the liquid in question. Adding multiple radiators will speed up heat transfer."#, value = "2072805863" ) @@ -6070,7 +6070,7 @@ The Norsec-designed K-cops logic mo name = r#"Logic Step Sequencer"#, desc = r#"The ODA does not approve of soundtracks or other distractions. As such, Stationeers have had to create their own musical accompaniment to the demanding labor of building and maintaining off-world infrastructure. -Central to this pastime is the step sequencer, which allows Stationeers to sequence short musical patterns or loops. +Central to this pastime is the step sequencer, which allows Stationeers to sequence short musical patterns or loops. DIY MUSIC - GETTING STARTED @@ -6082,7 +6082,7 @@ Central to this pastime is the step sequencer, which allows Stationeers to seque 4: Place a Stop Watch and use a Logic Reader and Logic Writer to write the time to the time variable on the sequencer. -5: 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. +5: 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. 6: 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. @@ -6124,7 +6124,7 @@ Central to this pastime is the step sequencer, which allows Stationeers to seque props( name = r#"Low frequency oscillator"#, desc = r#"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. - + To set up an LFO: 1. Place the LFO unit @@ -6322,7 +6322,7 @@ For more info, check out the music page props( name = r#"Medium Satellite Dish"#, desc = r#"This medium communications unit can be used to communicate with nearby trade vessels. - + 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."#, value = "439026183" ) @@ -6337,7 +6337,7 @@ When connected to a ComputerFood 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. + desc = r#"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. Just bolt it to a Powered Bench using a Wrench to power it, follow the recipe, and you're cooking."#, value = "-1136173965" ) @@ -6646,7 +6646,7 @@ The sensor activates whenever a player enters the grid it is placed on."#, props( name = r#"OGRE"#, desc = r#"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. - + The 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. MODES @@ -7131,7 +7131,7 @@ Displaying the internal pressure of pipe networks, it also reads out temperatur serialize = "StructurePipeRadiator", props( name = r#"Pipe Convection Radiator"#, - desc = r#"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. + desc = r#"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. The speed of heat gain or loss will depend on the gas in question. Adding multiple radiators will speed up heat transfer."#, value = "1696603168" ) @@ -7250,10 +7250,10 @@ within any pipe""#, name = r#"Plant Genetic Analyzer"#, desc = r#"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. -Individual Gene Value Widgets: +Individual Gene Value Widgets: Most 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. -Multiple Gene Value Widgets: +Multiple Gene Value Widgets: For 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" ) @@ -7264,7 +7264,7 @@ For temperature and pressure ranges, four genes appear on the same widget. The o props( name = r#"Plant Genetic Splicer"#, desc = r#"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. - + To 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" ) @@ -7482,7 +7482,7 @@ Fertilizer is produced at a 1:3 ratio of fertilizer to ingredients. The fertiliz serialize = "DynamicGasCanisterWater", props( name = r#"Portable Liquid Tank (Water)"#, - desc = r#"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. + desc = r#"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. Try to keep pressure under 10 MPa, or you'll end up wet, hurt and sorry, without any of the fun. 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 = "197293625" @@ -7557,8 +7557,8 @@ You can refill a Liquid Canister (W serialize = "CircuitboardPowerControl", props( name = r#"Power Control"#, - desc = r#"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. - + desc = r#"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. + The circuit board has two modes: 'Link' switches all devices on or off; 'Toggle' switches each device to their alternate state. "#, value = "-1923778429" ) @@ -8868,8 +8868,8 @@ The ProKompile can stack a wide variety of things such as Sinotai 'Dianzi' station battery is the heart of most Stationeer bases. -There 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.' + desc = r#"Providing large-scale, reliable power storage, the Sinotai 'Dianzi' station battery is the heart of most Stationeer bases. +There 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.' POWER OUTPUT Able 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" @@ -8880,8 +8880,8 @@ Able to store up to 3600000W of power, there are no practical limits to its thro serialize = "StructureBatteryLarge", props( name = r#"Station Battery (Large)"#, - desc = r#"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. -There 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.' + desc = r#"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. +There 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.' POWER OUTPUT Able 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" @@ -8911,7 +8911,7 @@ Able to store up to 9000001 watts of power, there are no practical limits to its serialize = "StructureFrameCorner", props( name = r#"Steel Frame (Corner)"#, - desc = r#"More durable than the Iron Frame, steel frames also offer several variations for more complex lattice constructions. + desc = r#"More durable than the Iron Frame, steel frames also offer several variations for more complex lattice constructions. With 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" ) @@ -8958,9 +8958,9 @@ With a little patience and maneuvering, the corner frame's Gothic-inspired silho props( name = r#"Stirling Engine"#, desc = r#"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. - + When 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. - + Gases 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" ) @@ -9148,7 +9148,7 @@ Upgrade the device using a Tool Printer M serialize = "StructureTransformer", props( name = r#"Transformer (Large)"#, - desc = r#"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. + desc = r#"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. Note that transformers operate as data isolators, preventing data flowing into any network beyond it."#, value = "-1423212473" ) @@ -9158,7 +9158,7 @@ Note that transformers operate as data isolators, preventing data flowing into a serialize = "StructureTransformerMedium", props( name = r#"Transformer (Medium)"#, - desc = r#"Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. + desc = r#"Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. Medium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W. Note that transformers also operate as data isolators, preventing data flowing into any network beyond it."#, value = "-1065725831" @@ -9179,7 +9179,7 @@ Note that transformers operate as data isolators, preventing data flowing into a serialize = "StructureTransformerMediumReversed", props( name = r#"Transformer Reversed (Medium)"#, - desc = r#"Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. + desc = r#"Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. Medium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W. Note that transformers also operate as data isolators, preventing data flowing into any network beyond it."#, value = "833912764" @@ -9389,7 +9389,7 @@ Output = 1 exporting items inside and eventually the main item."#, serialize = "StructureUprightWindTurbine", props( name = r#"Upright Wind Turbine"#, - desc = r#"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. + desc = r#"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. While 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" ) @@ -9887,8 +9887,8 @@ While the wind turbine is optimized to produce power (up to 500W) even on low at serialize = "StructureWindowShutter", props( name = r#"Window Shutter"#, - desc = r#"For those special, private moments, a window that can be closed to prying eyes. - + desc = r#"For those special, private moments, a window that can be closed to prying eyes. + When closed, has the heat transfer characteristics of a basic wall. Requires power, and can be connected to logic systems."#, value = "2056377335" ) diff --git a/ic10emu/src/vm/enums/script_enums.rs b/ic10emu/src/vm/enums/script_enums.rs index fc6f05f..331ffb2 100644 --- a/ic10emu/src/vm/enums/script_enums.rs +++ b/ic10emu/src/vm/enums/script_enums.rs @@ -9,7 +9,7 @@ // // ================================================= -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; #[derive( Debug, diff --git a/ic10emu/src/vm/instructions/mod.rs b/ic10emu/src/vm/instructions.rs similarity index 93% rename from ic10emu/src/vm/instructions/mod.rs rename to ic10emu/src/vm/instructions.rs index b09437f..a980117 100644 --- a/ic10emu/src/vm/instructions/mod.rs +++ b/ic10emu/src/vm/instructions.rs @@ -4,7 +4,7 @@ pub mod traits; use enums::InstructionOp; use operands::Operand; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use phf::phf_map; diff --git a/ic10emu/src/vm/instructions/enums.rs b/ic10emu/src/vm/instructions/enums.rs index 7495baa..52fb183 100644 --- a/ic10emu/src/vm/instructions/enums.rs +++ b/ic10emu/src/vm/instructions/enums.rs @@ -9,7 +9,7 @@ // // ================================================= -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use strum::{Display, EnumIter, EnumProperty, EnumString, FromRepr}; use crate::vm::object::traits::Programmable; diff --git a/ic10emu/src/vm/instructions/operands.rs b/ic10emu/src/vm/instructions/operands.rs index a70b8c5..9e4a0b9 100644 --- a/ic10emu/src/vm/instructions/operands.rs +++ b/ic10emu/src/vm/instructions/operands.rs @@ -5,7 +5,7 @@ use crate::vm::enums::script_enums::{ LogicType, }; use crate::vm::instructions::enums::InstructionOp; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use strum::EnumProperty; #[derive(PartialEq, Eq, Debug, Clone, Copy, Serialize, Deserialize)] diff --git a/ic10emu/src/vm/object/mod.rs b/ic10emu/src/vm/object.rs similarity index 92% rename from ic10emu/src/vm/object/mod.rs rename to ic10emu/src/vm/object.rs index 571a937..5b78928 100644 --- a/ic10emu/src/vm/object/mod.rs +++ b/ic10emu/src/vm/object.rs @@ -1,5 +1,5 @@ use macro_rules_attribute::derive; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; pub mod errors; pub mod macros; @@ -49,6 +49,6 @@ pub struct LogicField { #[derive(Debug, Default, Clone, Serialize, Deserialize)] pub struct Slot { pub typ: SlotType, - pub enabeled_logic: Vec, + pub enabled_logic: Vec, pub occupant: Option, } diff --git a/ic10emu/src/vm/object/errors.rs b/ic10emu/src/vm/object/errors.rs index daf7ba9..06966cb 100644 --- a/ic10emu/src/vm/object/errors.rs +++ b/ic10emu/src/vm/object/errors.rs @@ -1,4 +1,4 @@ -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use thiserror::Error; use crate::vm::enums::script_enums::{LogicSlotType as SlotLogicType, LogicType}; diff --git a/ic10emu/src/vm/object/stationpedia/generic.rs b/ic10emu/src/vm/object/stationpedia/generic.rs index 86c20df..bd90fa7 100644 --- a/ic10emu/src/vm/object/stationpedia/generic.rs +++ b/ic10emu/src/vm/object/stationpedia/generic.rs @@ -160,7 +160,7 @@ impl Logicable for T { } fn can_slot_logic_read(&self, slt: SlotLogicType, index: usize) -> bool { self.get_slot(index) - .map(|slot| slot.enabeled_logic.contains(&slt)) + .map(|slot| slot.enabled_logic.contains(&slt)) .unwrap_or(false) } fn get_slot_logic( @@ -172,7 +172,7 @@ impl Logicable for T { self.get_slot(index) .ok_or_else(|| LogicError::SlotIndexOutOfRange(index, self.slots().len())) .and_then(|slot| { - if slot.enabeled_logic.contains(&slt) { + if slot.enabled_logic.contains(&slt) { match slot.occupant { Some(_id) => { // FIXME: impliment by accessing VM to get occupant diff --git a/ic10emu_wasm/src/lib.rs b/ic10emu_wasm/src/lib.rs index 4204bb2..3f79d4e 100644 --- a/ic10emu_wasm/src/lib.rs +++ b/ic10emu_wasm/src/lib.rs @@ -7,7 +7,7 @@ use ic10emu::{ grammar::{LogicType, SlotLogicType}, vm::{FrozenVM, VMError, VM}, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use types::{Registers, Stack}; use std::{cell::RefCell, rc::Rc, str::FromStr}; diff --git a/ic10emu_wasm/src/types.rs b/ic10emu_wasm/src/types.rs index 20a406f..6a7ed54 100644 --- a/ic10emu_wasm/src/types.rs +++ b/ic10emu_wasm/src/types.rs @@ -3,7 +3,7 @@ use std::collections::BTreeMap; use itertools::Itertools; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use serde_with::serde_as; use tsify::Tsify; use wasm_bindgen::prelude::*; diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml index fcc1dad..19e4aa1 100644 --- a/xtask/Cargo.toml +++ b/xtask/Cargo.toml @@ -19,8 +19,6 @@ serde_path_to_error = "0.1.16" serde_with = "3.8.1" textwrap = { version = "0.16.1", default-features = false } thiserror = "1.0.58" -tracing = "0.1.40" -tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } onig = { git = "https://github.com/rust-onig/rust-onig", revision = "fa90c0e97e90a056af89f183b23cd417b59ee6a2" } diff --git a/xtask/src/generate.rs b/xtask/src/generate.rs index 7181883..a571fd1 100644 --- a/xtask/src/generate.rs +++ b/xtask/src/generate.rs @@ -45,7 +45,7 @@ pub fn generate( eprintln!("Formatting generated files..."); for file in &generated_files { - prepend_genereated_comment(file)?; + prepend_generated_comment(file)?; } let mut cmd = Command::new("cargo"); cmd.current_dir(workspace); @@ -71,7 +71,7 @@ pub fn parse_json<'a, T: serde::Deserialize<'a>>( }) } -fn prepend_genereated_comment(file_path: &std::path::Path) -> color_eyre::Result<()> { +fn prepend_generated_comment(file_path: &std::path::Path) -> color_eyre::Result<()> { use std::io::Write; let tmp_path = file_path.with_extension("rs.tmp"); { diff --git a/xtask/src/generate/database.rs b/xtask/src/generate/database.rs index b32eee2..7aa8acd 100644 --- a/xtask/src/generate/database.rs +++ b/xtask/src/generate/database.rs @@ -14,7 +14,7 @@ pub fn generate_database( ) -> color_eyre::Result<()> { let templates = generate_templates(stationpedia)?; - println!("Writing prefab database ..."); + eprintln!("Writing prefab database ..."); let prefabs: BTreeMap = templates .into_iter() diff --git a/xtask/src/generate/enums.rs b/xtask/src/generate/enums.rs index a6d37b8..db4c0af 100644 --- a/xtask/src/generate/enums.rs +++ b/xtask/src/generate/enums.rs @@ -338,7 +338,7 @@ fn write_repr_enum_use_header( ) -> color_eyre::Result<()> { write!( writer, - "use serde::{{Deserialize, Serialize}};\n\ + "use serde_derive::{{Deserialize, Serialize}};\n\ use strum::{{\n \ AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr,\n\ }};\n" diff --git a/xtask/src/generate/instructions.rs b/xtask/src/generate/instructions.rs index 778f9a4..0f5670b 100644 --- a/xtask/src/generate/instructions.rs +++ b/xtask/src/generate/instructions.rs @@ -38,7 +38,7 @@ fn write_instructions_enum( writer: &mut T, instructions: &BTreeMap, ) -> color_eyre::Result<()> { - println!("Writing instruction Listings ..."); + eprintln!("Writing instruction Listings ..."); let mut instructions = instructions.clone(); for (_, ref mut info) in instructions.iter_mut() { @@ -47,7 +47,7 @@ fn write_instructions_enum( write!( writer, - "use serde::{{Deserialize, Serialize}};\n\ + "use serde_derive::{{Deserialize, Serialize}};\n\ use strum::{{\n \ Display, EnumIter, EnumProperty, EnumString, FromRepr,\n\ }};\n diff --git a/xtask/src/main.rs b/xtask/src/main.rs index be64af4..7dbafbc 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -70,7 +70,7 @@ enum Error { #[error("failed to run command `{0}`")] Command(String, #[source] std::io::Error), #[error("can not find `Stationpedia.json` and/or `Enums.json` at `{0}`")] - BadStationeresPath(std::path::PathBuf), + BadStationeersPath(std::path::PathBuf), } impl std::fmt::Debug for Error { diff --git a/xtask/src/stationpedia.rs b/xtask/src/stationpedia.rs index c862d89..be02e5e 100644 --- a/xtask/src/stationpedia.rs +++ b/xtask/src/stationpedia.rs @@ -55,7 +55,6 @@ pub struct Page { pub description: String, #[serde(rename = "Device")] pub device: Option, - /// the item , if none then deprecated #[serde(rename = "Item")] pub item: Option, #[serde(rename = "Structure")] From 096e272b07e556fdef864144e46f2c430605abd1 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Thu, 9 May 2024 13:58:28 -0700 Subject: [PATCH 09/50] refactor(vm) use generated enums wherever possible --- Cargo.lock | 1 + cspell.json | 2 +- data/database.json | 2 +- ic10emu/src/device.rs | 342 +- ic10emu/src/errors.rs | 2 +- ic10emu/src/grammar.rs | 4 +- ic10emu/src/interpreter.rs | 16 +- ic10emu/src/network.rs | 28 +- ic10emu/src/vm.rs | 10 +- ic10emu/src/vm/enums/basic_enums.rs | 3786 ++-- ic10emu/src/vm/enums/prefabs.rs | 18468 ++++++++-------- ic10emu/src/vm/enums/script_enums.rs | 3312 +-- ic10emu/src/vm/instructions/operands.rs | 9 +- ic10emu/src/vm/object.rs | 38 +- ic10emu/src/vm/object/errors.rs | 10 +- ic10emu/src/vm/object/generic.rs | 3 + ic10emu/src/vm/object/generic/macros.rs | 75 + ic10emu/src/vm/object/generic/structs.rs | 93 + ic10emu/src/vm/object/generic/traits.rs | 162 + ic10emu/src/vm/object/stationpedia.rs | 6 +- ic10emu/src/vm/object/stationpedia/generic.rs | 306 - ic10emu/src/vm/object/templates.rs | 247 + ic10emu_wasm/build.rs | 4 +- ic10emu_wasm/src/lib.rs | 6 +- ic10emu_wasm/src/types.rs | 4 +- ic10emu_wasm/src/types.ts | 16 +- www/cspell.json | 4 +- www/src/ts/virtual_machine/device/slot.ts | 4 +- .../virtual_machine/device/slot_add_dialog.ts | 6 +- www/src/ts/virtual_machine/device_db.ts | 8 +- www/src/ts/virtual_machine/index.ts | 4 +- xtask/Cargo.toml | 1 + xtask/src/generate/database.rs | 19 +- xtask/src/generate/enums.rs | 26 +- xtask/src/main.rs | 2 +- xtask/src/stationpedia.rs | 17 - 36 files changed, 13655 insertions(+), 13388 deletions(-) create mode 100644 ic10emu/src/vm/object/generic.rs create mode 100644 ic10emu/src/vm/object/generic/macros.rs create mode 100644 ic10emu/src/vm/object/generic/structs.rs create mode 100644 ic10emu/src/vm/object/generic/traits.rs delete mode 100644 ic10emu/src/vm/object/stationpedia/generic.rs create mode 100644 ic10emu/src/vm/object/templates.rs diff --git a/Cargo.lock b/Cargo.lock index 20727f4..082a122 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2193,4 +2193,5 @@ dependencies = [ "serde_with", "textwrap", "thiserror", + "tracing", ] diff --git a/cspell.json b/cspell.json index ec86b48..104950d 100644 --- a/cspell.json +++ b/cspell.json @@ -1 +1 @@ -{"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":["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","LogicSlotType","LogicSlotTypes","slottype","sltz","snan","snanz","snaz","snez","splitn","Stationeers","stationpedia","stdweb","thiserror","tokentype","trunc","Tsify","whos","Depressurising","Pressurising","logicslottypes","lparen","rparen","hstack","dylib"]} diff --git a/data/database.json b/data/database.json index 58d919a..921e78c 100644 --- a/data/database.json +++ b/data/database.json @@ -1 +1 @@ -{"prefabs":{"AccessCardBlack":{"prefab":{"prefabName":"AccessCardBlack","prefabHash":-1330388999,"desc":"","name":"Access Card (Black)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardBlue":{"prefab":{"prefabName":"AccessCardBlue","prefabHash":-1411327657,"desc":"","name":"Access Card (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardBrown":{"prefab":{"prefabName":"AccessCardBrown","prefabHash":1412428165,"desc":"","name":"Access Card (Brown)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardGray":{"prefab":{"prefabName":"AccessCardGray","prefabHash":-1339479035,"desc":"","name":"Access Card (Gray)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardGreen":{"prefab":{"prefabName":"AccessCardGreen","prefabHash":-374567952,"desc":"","name":"Access Card (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardKhaki":{"prefab":{"prefabName":"AccessCardKhaki","prefabHash":337035771,"desc":"","name":"Access Card (Khaki)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardOrange":{"prefab":{"prefabName":"AccessCardOrange","prefabHash":-332896929,"desc":"","name":"Access Card (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardPink":{"prefab":{"prefabName":"AccessCardPink","prefabHash":431317557,"desc":"","name":"Access Card (Pink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardPurple":{"prefab":{"prefabName":"AccessCardPurple","prefabHash":459843265,"desc":"","name":"Access Card (Purple)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardRed":{"prefab":{"prefabName":"AccessCardRed","prefabHash":-1713748313,"desc":"","name":"Access Card (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardWhite":{"prefab":{"prefabName":"AccessCardWhite","prefabHash":2079959157,"desc":"","name":"Access Card (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardYellow":{"prefab":{"prefabName":"AccessCardYellow","prefabHash":568932536,"desc":"","name":"Access Card (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"ApplianceChemistryStation":{"prefab":{"prefabName":"ApplianceChemistryStation","prefabHash":1365789392,"desc":"","name":"Chemistry Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"ApplianceDeskLampLeft":{"prefab":{"prefabName":"ApplianceDeskLampLeft","prefabHash":-1683849799,"desc":"","name":"Appliance Desk Lamp Left"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"}},"ApplianceDeskLampRight":{"prefab":{"prefabName":"ApplianceDeskLampRight","prefabHash":1174360780,"desc":"","name":"Appliance Desk Lamp Right"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"}},"ApplianceMicrowave":{"prefab":{"prefabName":"ApplianceMicrowave","prefabHash":-1136173965,"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.","name":"Microwave"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"AppliancePackagingMachine":{"prefab":{"prefabName":"AppliancePackagingMachine","prefabHash":-749191906,"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 ","name":"Basic Packaging Machine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Export","typ":"None"}]},"AppliancePaintMixer":{"prefab":{"prefabName":"AppliancePaintMixer","prefabHash":-1339716113,"desc":"","name":"Paint Mixer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"Bottle"}]},"AppliancePlantGeneticAnalyzer":{"prefab":{"prefabName":"AppliancePlantGeneticAnalyzer","prefabHash":-1303038067,"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.","name":"Plant Genetic Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Input","typ":"Tool"}]},"AppliancePlantGeneticSplicer":{"prefab":{"prefabName":"AppliancePlantGeneticSplicer","prefabHash":-1094868323,"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.","name":"Plant Genetic Splicer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Source Plant","typ":"Plant"},{"name":"Target Plant","typ":"Plant"}]},"AppliancePlantGeneticStabilizer":{"prefab":{"prefabName":"AppliancePlantGeneticStabilizer","prefabHash":871432335,"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 ","name":"Plant Genetic Stabilizer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Plant","typ":"Plant"}]},"ApplianceReagentProcessor":{"prefab":{"prefabName":"ApplianceReagentProcessor","prefabHash":1260918085,"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.","name":"Reagent Processor"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Input","typ":"None"},{"name":"Output","typ":"None"}]},"ApplianceSeedTray":{"prefab":{"prefabName":"ApplianceSeedTray","prefabHash":142831994,"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.","name":"Appliance Seed Tray"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"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"}]},"ApplianceTabletDock":{"prefab":{"prefabName":"ApplianceTabletDock","prefabHash":1853941363,"desc":"","name":"Tablet Dock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"","typ":"Tool"}]},"AutolathePrinterMod":{"prefab":{"prefabName":"AutolathePrinterMod","prefabHash":221058307,"desc":"Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Autolathe Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"Battery_Wireless_cell":{"prefab":{"prefabName":"Battery_Wireless_cell","prefabHash":-462415758,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Battery_Wireless_cell_Big":{"prefab":{"prefabName":"Battery_Wireless_cell_Big","prefabHash":-41519077,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell (Big)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"CardboardBox":{"prefab":{"prefabName":"CardboardBox","prefabHash":-1976947556,"desc":"","name":"Cardboard Box"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Storage"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"CartridgeAccessController":{"prefab":{"prefabName":"CartridgeAccessController","prefabHash":-1634532552,"desc":"","name":"Cartridge (Access Controller)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeAtmosAnalyser":{"prefab":{"prefabName":"CartridgeAtmosAnalyser","prefabHash":-1550278665,"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.","name":"Atmos Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeConfiguration":{"prefab":{"prefabName":"CartridgeConfiguration","prefabHash":-932136011,"desc":"","name":"Configuration"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeElectronicReader":{"prefab":{"prefabName":"CartridgeElectronicReader","prefabHash":-1462180176,"desc":"","name":"eReader"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeGPS":{"prefab":{"prefabName":"CartridgeGPS","prefabHash":-1957063345,"desc":"","name":"GPS"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeGuide":{"prefab":{"prefabName":"CartridgeGuide","prefabHash":872720793,"desc":"","name":"Guide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeMedicalAnalyser":{"prefab":{"prefabName":"CartridgeMedicalAnalyser","prefabHash":-1116110181,"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.","name":"Medical Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeNetworkAnalyser":{"prefab":{"prefabName":"CartridgeNetworkAnalyser","prefabHash":1606989119,"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.","name":"Network Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeOreScanner":{"prefab":{"prefabName":"CartridgeOreScanner","prefabHash":-1768732546,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet.","name":"Ore Scanner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeOreScannerColor":{"prefab":{"prefabName":"CartridgeOreScannerColor","prefabHash":1738236580,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground in different colors on the tablet.","name":"Ore Scanner (Color)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgePlantAnalyser":{"prefab":{"prefabName":"CartridgePlantAnalyser","prefabHash":1101328282,"desc":"","name":"Cartridge Plant Analyser"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeTracker":{"prefab":{"prefabName":"CartridgeTracker","prefabHash":81488783,"desc":"","name":"Tracker"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CircuitboardAdvAirlockControl":{"prefab":{"prefabName":"CircuitboardAdvAirlockControl","prefabHash":1633663176,"desc":"","name":"Advanced Airlock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardAirControl":{"prefab":{"prefabName":"CircuitboardAirControl","prefabHash":1618019559,"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. ","name":"Air Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardAirlockControl":{"prefab":{"prefabName":"CircuitboardAirlockControl","prefabHash":912176135,"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.","name":"Airlock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardCameraDisplay":{"prefab":{"prefabName":"CircuitboardCameraDisplay","prefabHash":-412104504,"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.","name":"Camera Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardDoorControl":{"prefab":{"prefabName":"CircuitboardDoorControl","prefabHash":855694771,"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.","name":"Door Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardGasDisplay":{"prefab":{"prefabName":"CircuitboardGasDisplay","prefabHash":-82343730,"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).","name":"Gas Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardGraphDisplay":{"prefab":{"prefabName":"CircuitboardGraphDisplay","prefabHash":1344368806,"desc":"","name":"Graph Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardHashDisplay":{"prefab":{"prefabName":"CircuitboardHashDisplay","prefabHash":1633074601,"desc":"","name":"Hash Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardModeControl":{"prefab":{"prefabName":"CircuitboardModeControl","prefabHash":-1134148135,"desc":"Can't decide which mode you love most? This circuit board allows you to switch any connected device between operation modes.","name":"Mode Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardPowerControl":{"prefab":{"prefabName":"CircuitboardPowerControl","prefabHash":-1923778429,"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. ","name":"Power Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardShipDisplay":{"prefab":{"prefabName":"CircuitboardShipDisplay","prefabHash":-2044446819,"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.","name":"Ship Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardSolarControl":{"prefab":{"prefabName":"CircuitboardSolarControl","prefabHash":2020180320,"desc":"Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel.","name":"Solar Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CompositeRollCover":{"prefab":{"prefabName":"CompositeRollCover","prefabHash":1228794916,"desc":"0.Operate\n1.Logic","name":"Composite Roll Cover"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"CrateMkII":{"prefab":{"prefabName":"CrateMkII","prefabHash":8709219,"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.","name":"Crate Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Storage"},"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"}]},"DecayedFood":{"prefab":{"prefabName":"DecayedFood","prefabHash":1531087544,"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","name":"Decayed Food"},"item":{"consumable":false,"ingredient":false,"maxQuantity":25.0,"slotClass":"None","sortingClass":"Default"}},"DeviceLfoVolume":{"prefab":{"prefabName":"DeviceLfoVolume","prefabHash":-1844430312,"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.","name":"Low frequency oscillator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Power","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"DeviceStepUnit":{"prefab":{"prefabName":"DeviceStepUnit","prefabHash":1762696475,"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","name":"Device Step Unit"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Power","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"DynamicAirConditioner":{"prefab":{"prefabName":"DynamicAirConditioner","prefabHash":519913639,"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.","name":"Portable Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicCrate":{"prefab":{"prefabName":"DynamicCrate","prefabHash":1941079206,"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.","name":"Dynamic Crate"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Storage"},"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"}]},"DynamicGPR":{"prefab":{"prefabName":"DynamicGPR","prefabHash":-2085885850,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicGasCanisterAir":{"prefab":{"prefabName":"DynamicGasCanisterAir","prefabHash":-1713611165,"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.","name":"Portable Gas Tank (Air)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterCarbonDioxide":{"prefab":{"prefabName":"DynamicGasCanisterCarbonDioxide","prefabHash":-322413931,"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.","name":"Portable Gas Tank (CO2)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterEmpty":{"prefab":{"prefabName":"DynamicGasCanisterEmpty","prefabHash":-1741267161,"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.","name":"Portable Gas Tank"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterFuel":{"prefab":{"prefabName":"DynamicGasCanisterFuel","prefabHash":-817051527,"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.","name":"Portable Gas Tank (Fuel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrogen":{"prefab":{"prefabName":"DynamicGasCanisterNitrogen","prefabHash":121951301,"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.","name":"Portable Gas Tank (Nitrogen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrousOxide":{"prefab":{"prefabName":"DynamicGasCanisterNitrousOxide","prefabHash":30727200,"desc":"","name":"Portable Gas Tank (Nitrous Oxide)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterOxygen":{"prefab":{"prefabName":"DynamicGasCanisterOxygen","prefabHash":1360925836,"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.","name":"Portable Gas Tank (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterPollutants":{"prefab":{"prefabName":"DynamicGasCanisterPollutants","prefabHash":396065382,"desc":"","name":"Portable Gas Tank (Pollutants)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterRocketFuel":{"prefab":{"prefabName":"DynamicGasCanisterRocketFuel","prefabHash":-8883951,"desc":"","name":"Dynamic Gas Canister Rocket Fuel"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterVolatiles":{"prefab":{"prefabName":"DynamicGasCanisterVolatiles","prefabHash":108086870,"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.","name":"Portable Gas Tank (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterWater":{"prefab":{"prefabName":"DynamicGasCanisterWater","prefabHash":197293625,"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.","name":"Portable Liquid Tank (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"LiquidCanister"}]},"DynamicGasTankAdvanced":{"prefab":{"prefabName":"DynamicGasTankAdvanced","prefabHash":-386375420,"desc":"0.Mode0\n1.Mode1","name":"Gas Tank Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasTankAdvancedOxygen":{"prefab":{"prefabName":"DynamicGasTankAdvancedOxygen","prefabHash":-1264455519,"desc":"0.Mode0\n1.Mode1","name":"Portable Gas Tank Mk II (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGenerator":{"prefab":{"prefabName":"DynamicGenerator","prefabHash":-82087220,"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.","name":"Portable Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"GasCanister"},{"name":"Battery","typ":"Battery"}]},"DynamicHydroponics":{"prefab":{"prefabName":"DynamicHydroponics","prefabHash":587726607,"desc":"","name":"Portable Hydroponics"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"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"}]},"DynamicLight":{"prefab":{"prefabName":"DynamicLight","prefabHash":-21970188,"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.","name":"Portable Light"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicLiquidCanisterEmpty":{"prefab":{"prefabName":"DynamicLiquidCanisterEmpty","prefabHash":-1939209112,"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.","name":"Portable Liquid Tank"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterEmpty":{"prefab":{"prefabName":"DynamicMKIILiquidCanisterEmpty","prefabHash":2130739600,"desc":"An empty, insulated liquid Gas Canister.","name":"Portable Liquid Tank Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterWater":{"prefab":{"prefabName":"DynamicMKIILiquidCanisterWater","prefabHash":-319510386,"desc":"An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature.","name":"Portable Liquid Tank Mk II (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicScrubber":{"prefab":{"prefabName":"DynamicScrubber","prefabHash":755048589,"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.","name":"Portable Air Scrubber"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"}]},"DynamicSkeleton":{"prefab":{"prefabName":"DynamicSkeleton","prefabHash":106953348,"desc":"","name":"Skeleton"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ElectronicPrinterMod":{"prefab":{"prefabName":"ElectronicPrinterMod","prefabHash":-311170652,"desc":"Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Electronic Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ElevatorCarrage":{"prefab":{"prefabName":"ElevatorCarrage","prefabHash":-110788403,"desc":"","name":"Elevator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"EntityChick":{"prefab":{"prefabName":"EntityChick","prefabHash":1730165908,"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.","name":"Entity Chick"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenBrown":{"prefab":{"prefabName":"EntityChickenBrown","prefabHash":334097180,"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.","name":"Entity Chicken Brown"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenWhite":{"prefab":{"prefabName":"EntityChickenWhite","prefabHash":1010807532,"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.","name":"Entity Chicken White"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBlack":{"prefab":{"prefabName":"EntityRoosterBlack","prefabHash":966959649,"desc":"This is a rooster. It is black. There is dignity in this.","name":"Entity Rooster Black"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBrown":{"prefab":{"prefabName":"EntityRoosterBrown","prefabHash":-583103395,"desc":"The common brown rooster. Don't let it hear you say that.","name":"Entity Rooster Brown"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"Fertilizer":{"prefab":{"prefabName":"Fertilizer","prefabHash":1517856652,"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. ","name":"Fertilizer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Default"}},"FireArmSMG":{"prefab":{"prefabName":"FireArmSMG","prefabHash":-86315541,"desc":"0.Single\n1.Auto","name":"Fire Arm SMG"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"slots":[{"name":"","typ":"Magazine"}]},"Flag_ODA_10m":{"prefab":{"prefabName":"Flag_ODA_10m","prefabHash":1845441951,"desc":"","name":"Flag (ODA 10m)"},"structure":{"smallGrid":true}},"Flag_ODA_4m":{"prefab":{"prefabName":"Flag_ODA_4m","prefabHash":1159126354,"desc":"","name":"Flag (ODA 4m)"},"structure":{"smallGrid":true}},"Flag_ODA_6m":{"prefab":{"prefabName":"Flag_ODA_6m","prefabHash":1998634960,"desc":"","name":"Flag (ODA 6m)"},"structure":{"smallGrid":true}},"Flag_ODA_8m":{"prefab":{"prefabName":"Flag_ODA_8m","prefabHash":-375156130,"desc":"","name":"Flag (ODA 8m)"},"structure":{"smallGrid":true}},"FlareGun":{"prefab":{"prefabName":"FlareGun","prefabHash":118685786,"desc":"","name":"Flare Gun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Magazine","typ":"Flare"},{"name":"","typ":"Blocked"}]},"H2Combustor":{"prefab":{"prefabName":"H2Combustor","prefabHash":1840108251,"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.","name":"H2 Combustor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Pipe","Output"],["Power","None"]],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"Handgun":{"prefab":{"prefabName":"Handgun","prefabHash":247238062,"desc":"","name":"Handgun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"slots":[{"name":"Magazine","typ":"Magazine"}]},"HandgunMagazine":{"prefab":{"prefabName":"HandgunMagazine","prefabHash":1254383185,"desc":"","name":"Handgun Magazine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Magazine","sortingClass":"Default"}},"HumanSkull":{"prefab":{"prefabName":"HumanSkull","prefabHash":-857713709,"desc":"","name":"Human Skull"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ImGuiCircuitboardAirlockControl":{"prefab":{"prefabName":"ImGuiCircuitboardAirlockControl","prefabHash":-73796547,"desc":"","name":"Airlock (Experimental)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"ItemActiveVent":{"prefab":{"prefabName":"ItemActiveVent","prefabHash":-842048328,"desc":"When constructed, this kit places an Active Vent on any support structure.","name":"Kit (Active Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemAdhesiveInsulation":{"prefab":{"prefabName":"ItemAdhesiveInsulation","prefabHash":1871048978,"desc":"","name":"Adhesive Insulation"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemAdvancedTablet":{"prefab":{"prefabName":"ItemAdvancedTablet","prefabHash":1722785341,"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","name":"Advanced Tablet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read","SoundAlert":"ReadWrite","Volume":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"},{"name":"Cartridge1","typ":"Cartridge"},{"name":"Programmable Chip","typ":"ProgrammableChip"}]},"ItemAlienMushroom":{"prefab":{"prefabName":"ItemAlienMushroom","prefabHash":176446172,"desc":"","name":"Alien Mushroom"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Default"}},"ItemAmmoBox":{"prefab":{"prefabName":"ItemAmmoBox","prefabHash":-9559091,"desc":"","name":"Ammo Box"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemAngleGrinder":{"prefab":{"prefabName":"ItemAngleGrinder","prefabHash":201215010,"desc":"Angles-be-gone with the trusty angle grinder.","name":"Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemArcWelder":{"prefab":{"prefabName":"ItemArcWelder","prefabHash":1385062886,"desc":"","name":"Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemAreaPowerControl":{"prefab":{"prefabName":"ItemAreaPowerControl","prefabHash":1757673317,"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.","name":"Kit (Power Controller)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemAstroloyIngot":{"prefab":{"prefabName":"ItemAstroloyIngot","prefabHash":412924554,"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.","name":"Ingot (Astroloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Astroloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemAstroloySheets":{"prefab":{"prefabName":"ItemAstroloySheets","prefabHash":-1662476145,"desc":"","name":"Astroloy Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemAuthoringTool":{"prefab":{"prefabName":"ItemAuthoringTool","prefabHash":789015045,"desc":"","name":"Authoring Tool"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemAuthoringToolRocketNetwork":{"prefab":{"prefabName":"ItemAuthoringToolRocketNetwork","prefabHash":-1731627004,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemBasketBall":{"prefab":{"prefabName":"ItemBasketBall","prefabHash":-1262580790,"desc":"","name":"Basket Ball"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemBatteryCell":{"prefab":{"prefabName":"ItemBatteryCell","prefabHash":700133157,"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.","name":"Battery Cell (Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCellLarge":{"prefab":{"prefabName":"ItemBatteryCellLarge","prefabHash":-459827268,"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","name":"Battery Cell (Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCellNuclear":{"prefab":{"prefabName":"ItemBatteryCellNuclear","prefabHash":544617306,"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.","name":"Battery Cell (Nuclear)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCharger":{"prefab":{"prefabName":"ItemBatteryCharger","prefabHash":-1866880307,"desc":"This kit produces a 5-slot Kit (Battery Charger).","name":"Kit (Battery Charger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemBatteryChargerSmall":{"prefab":{"prefabName":"ItemBatteryChargerSmall","prefabHash":1008295833,"desc":"","name":"Battery Charger Small"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemBeacon":{"prefab":{"prefabName":"ItemBeacon","prefabHash":-869869491,"desc":"","name":"Tracking Beacon"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemBiomass":{"prefab":{"prefabName":"ItemBiomass","prefabHash":-831480639,"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).","name":"Biomass"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100.0,"reagents":{"Biomass":1.0},"slotClass":"Ore","sortingClass":"Resources"}},"ItemBreadLoaf":{"prefab":{"prefabName":"ItemBreadLoaf","prefabHash":893514943,"desc":"","name":"Bread Loaf"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCableAnalyser":{"prefab":{"prefabName":"ItemCableAnalyser","prefabHash":-1792787349,"desc":"","name":"Kit (Cable Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemCableCoil":{"prefab":{"prefabName":"ItemCableCoil","prefabHash":-466050668,"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).","name":"Cable Coil"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Tool","sortingClass":"Resources"}},"ItemCableCoilHeavy":{"prefab":{"prefabName":"ItemCableCoilHeavy","prefabHash":2060134443,"desc":"Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW.","name":"Cable Coil (Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Tool","sortingClass":"Resources"}},"ItemCableFuse":{"prefab":{"prefabName":"ItemCableFuse","prefabHash":195442047,"desc":"","name":"Kit (Cable Fuses)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Resources"}},"ItemCannedCondensedMilk":{"prefab":{"prefabName":"ItemCannedCondensedMilk","prefabHash":-2104175091,"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.","name":"Canned Condensed Milk"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCannedEdamame":{"prefab":{"prefabName":"ItemCannedEdamame","prefabHash":-999714082,"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.","name":"Canned Edamame"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCannedMushroom":{"prefab":{"prefabName":"ItemCannedMushroom","prefabHash":-1344601965,"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.","name":"Canned Mushroom"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCannedPowderedEggs":{"prefab":{"prefabName":"ItemCannedPowderedEggs","prefabHash":1161510063,"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.","name":"Canned Powdered Eggs"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCannedRicePudding":{"prefab":{"prefabName":"ItemCannedRicePudding","prefabHash":-1185552595,"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.","name":"Canned Rice Pudding"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCerealBar":{"prefab":{"prefabName":"ItemCerealBar","prefabHash":791746840,"desc":"Sustains, without decay. If only all our relationships were so well balanced.","name":"Cereal Bar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCharcoal":{"prefab":{"prefabName":"ItemCharcoal","prefabHash":252561409,"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.","name":"Charcoal"},"item":{"consumable":false,"ingredient":true,"maxQuantity":200.0,"reagents":{"Carbon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemChemLightBlue":{"prefab":{"prefabName":"ItemChemLightBlue","prefabHash":-772542081,"desc":"A safe and slightly rave-some source of blue light. Snap to activate.","name":"Chem Light (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightGreen":{"prefab":{"prefabName":"ItemChemLightGreen","prefabHash":-597479390,"desc":"Enliven the dreariest, airless rock with this glowy green light. Snap to activate.","name":"Chem Light (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightRed":{"prefab":{"prefabName":"ItemChemLightRed","prefabHash":-525810132,"desc":"A red glowstick. Snap to activate. Then reach for the lasers.","name":"Chem Light (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightWhite":{"prefab":{"prefabName":"ItemChemLightWhite","prefabHash":1312166823,"desc":"Snap the glowstick to activate a pale radiance that keeps the darkness at bay.","name":"Chem Light (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightYellow":{"prefab":{"prefabName":"ItemChemLightYellow","prefabHash":1224819963,"desc":"Dispel the darkness with this yellow glowstick.","name":"Chem Light (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemCoalOre":{"prefab":{"prefabName":"ItemCoalOre","prefabHash":1724793494,"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).","name":"Ore (Coal)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Hydrocarbon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCobaltOre":{"prefab":{"prefabName":"ItemCobaltOre","prefabHash":-983091249,"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.","name":"Ore (Cobalt)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Cobalt":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCoffeeMug":{"prefab":{"prefabName":"ItemCoffeeMug","prefabHash":1800622698,"desc":"","name":"Coffee Mug"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemConstantanIngot":{"prefab":{"prefabName":"ItemConstantanIngot","prefabHash":1058547521,"desc":"","name":"Ingot (Constantan)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Constantan":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemCookedCondensedMilk":{"prefab":{"prefabName":"ItemCookedCondensedMilk","prefabHash":1715917521,"desc":"A high-nutrient cooked food, which can be canned.","name":"Condensed Milk"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Milk":100.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedCorn":{"prefab":{"prefabName":"ItemCookedCorn","prefabHash":1344773148,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Corn"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Corn":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedMushroom":{"prefab":{"prefabName":"ItemCookedMushroom","prefabHash":-1076892658,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Mushroom"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Mushroom":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedPowderedEggs":{"prefab":{"prefabName":"ItemCookedPowderedEggs","prefabHash":-1712264413,"desc":"A high-nutrient cooked food, which can be canned.","name":"Powdered Eggs"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Egg":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedPumpkin":{"prefab":{"prefabName":"ItemCookedPumpkin","prefabHash":1849281546,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Pumpkin"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Pumpkin":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedRice":{"prefab":{"prefabName":"ItemCookedRice","prefabHash":2013539020,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Rice"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Rice":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedSoybean":{"prefab":{"prefabName":"ItemCookedSoybean","prefabHash":1353449022,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Soybean"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Soy":5.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedTomato":{"prefab":{"prefabName":"ItemCookedTomato","prefabHash":-709086714,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Tomato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Tomato":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCopperIngot":{"prefab":{"prefabName":"ItemCopperIngot","prefabHash":-404336834,"desc":"Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items.","name":"Ingot (Copper)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Copper":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemCopperOre":{"prefab":{"prefabName":"ItemCopperOre","prefabHash":-707307845,"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.","name":"Ore (Copper)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Copper":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCorn":{"prefab":{"prefabName":"ItemCorn","prefabHash":258339687,"desc":"A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light.","name":"Corn"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Corn":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemCornSoup":{"prefab":{"prefabName":"ItemCornSoup","prefabHash":545034114,"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.","name":"Corn Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCreditCard":{"prefab":{"prefabName":"ItemCreditCard","prefabHash":-1756772618,"desc":"","name":"Credit Card"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"CreditCard","sortingClass":"Tools"}},"ItemCropHay":{"prefab":{"prefabName":"ItemCropHay","prefabHash":215486157,"desc":"","name":"Hay"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"None","sortingClass":"Default"}},"ItemCrowbar":{"prefab":{"prefabName":"ItemCrowbar","prefabHash":856108234,"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.","name":"Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemDataDisk":{"prefab":{"prefabName":"ItemDataDisk","prefabHash":1005843700,"desc":"","name":"Data Disk"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"DataDisk","sortingClass":"Default"}},"ItemDirtCanister":{"prefab":{"prefabName":"ItemDirtCanister","prefabHash":902565329,"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.","name":"Dirt Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Ore","sortingClass":"Default"}},"ItemDirtyOre":{"prefab":{"prefabName":"ItemDirtyOre","prefabHash":-1234745580,"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. ","name":"Dirty Ore"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Ores"}},"ItemDisposableBatteryCharger":{"prefab":{"prefabName":"ItemDisposableBatteryCharger","prefabHash":-2124435700,"desc":"Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery.","name":"Disposable Battery Charger"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemDrill":{"prefab":{"prefabName":"ItemDrill","prefabHash":2009673399,"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.","name":"Hand Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemDuctTape":{"prefab":{"prefabName":"ItemDuctTape","prefabHash":-1943134693,"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.","name":"Duct Tape"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemDynamicAirCon":{"prefab":{"prefabName":"ItemDynamicAirCon","prefabHash":1072914031,"desc":"","name":"Kit (Portable Air Conditioner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemDynamicScrubber":{"prefab":{"prefabName":"ItemDynamicScrubber","prefabHash":-971920158,"desc":"","name":"Kit (Portable Scrubber)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemEggCarton":{"prefab":{"prefabName":"ItemEggCarton","prefabHash":-524289310,"desc":"Within, eggs reside in mysterious, marmoreal silence.","name":"Egg Carton"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Storage"},"slots":[{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"}]},"ItemElectronicParts":{"prefab":{"prefabName":"ItemElectronicParts","prefabHash":731250882,"desc":"","name":"Electronic Parts"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Resources"}},"ItemElectrumIngot":{"prefab":{"prefabName":"ItemElectrumIngot","prefabHash":502280180,"desc":"","name":"Ingot (Electrum)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Electrum":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemEmergencyAngleGrinder":{"prefab":{"prefabName":"ItemEmergencyAngleGrinder","prefabHash":-351438780,"desc":"","name":"Emergency Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyArcWelder":{"prefab":{"prefabName":"ItemEmergencyArcWelder","prefabHash":-1056029600,"desc":"","name":"Emergency Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyCrowbar":{"prefab":{"prefabName":"ItemEmergencyCrowbar","prefabHash":976699731,"desc":"","name":"Emergency Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyDrill":{"prefab":{"prefabName":"ItemEmergencyDrill","prefabHash":-2052458905,"desc":"","name":"Emergency Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyEvaSuit":{"prefab":{"prefabName":"ItemEmergencyEvaSuit","prefabHash":1791306431,"desc":"","name":"Emergency Eva Suit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Suit","sortingClass":"Clothing"},"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"}]},"ItemEmergencyPickaxe":{"prefab":{"prefabName":"ItemEmergencyPickaxe","prefabHash":-1061510408,"desc":"","name":"Emergency Pickaxe"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyScrewdriver":{"prefab":{"prefabName":"ItemEmergencyScrewdriver","prefabHash":266099983,"desc":"","name":"Emergency Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencySpaceHelmet":{"prefab":{"prefabName":"ItemEmergencySpaceHelmet","prefabHash":205916793,"desc":"","name":"Emergency Space Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemEmergencyToolBelt":{"prefab":{"prefabName":"ItemEmergencyToolBelt","prefabHash":1661941301,"desc":"","name":"Emergency Tool Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemEmergencyWireCutters":{"prefab":{"prefabName":"ItemEmergencyWireCutters","prefabHash":2102803952,"desc":"","name":"Emergency Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyWrench":{"prefab":{"prefabName":"ItemEmergencyWrench","prefabHash":162553030,"desc":"","name":"Emergency Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmptyCan":{"prefab":{"prefabName":"ItemEmptyCan","prefabHash":1013818348,"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.","name":"Empty Can"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Steel":1.0},"slotClass":"None","sortingClass":"Default"}},"ItemEvaSuit":{"prefab":{"prefabName":"ItemEvaSuit","prefabHash":1677018918,"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.","name":"Eva Suit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Suit","sortingClass":"Clothing"},"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"}]},"ItemExplosive":{"prefab":{"prefabName":"ItemExplosive","prefabHash":235361649,"desc":"","name":"Remote Explosive"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemFern":{"prefab":{"prefabName":"ItemFern","prefabHash":892110467,"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.","name":"Fern"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100.0,"reagents":{"Fenoxitone":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemFertilizedEgg":{"prefab":{"prefabName":"ItemFertilizedEgg","prefabHash":-383972371,"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.","name":"Egg"},"item":{"consumable":false,"ingredient":true,"maxQuantity":1.0,"reagents":{"Egg":1.0},"slotClass":"Egg","sortingClass":"Resources"}},"ItemFilterFern":{"prefab":{"prefabName":"ItemFilterFern","prefabHash":266654416,"desc":"A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant.","name":"Darga Fern"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlagSmall":{"prefab":{"prefabName":"ItemFlagSmall","prefabHash":2011191088,"desc":"","name":"Kit (Small Flag)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemFlashingLight":{"prefab":{"prefabName":"ItemFlashingLight","prefabHash":-2107840748,"desc":"","name":"Kit (Flashing Light)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemFlashlight":{"prefab":{"prefabName":"ItemFlashlight","prefabHash":-838472102,"desc":"A flashlight with a narrow and wide beam options.","name":"Flashlight"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Low Power","1":"High Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemFlour":{"prefab":{"prefabName":"ItemFlour","prefabHash":-665995854,"desc":"Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven).","name":"Flour"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Flour":50.0},"slotClass":"None","sortingClass":"Resources"}},"ItemFlowerBlue":{"prefab":{"prefabName":"ItemFlowerBlue","prefabHash":-1573623434,"desc":"","name":"Flower (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerGreen":{"prefab":{"prefabName":"ItemFlowerGreen","prefabHash":-1513337058,"desc":"","name":"Flower (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerOrange":{"prefab":{"prefabName":"ItemFlowerOrange","prefabHash":-1411986716,"desc":"","name":"Flower (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerRed":{"prefab":{"prefabName":"ItemFlowerRed","prefabHash":-81376085,"desc":"","name":"Flower (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerYellow":{"prefab":{"prefabName":"ItemFlowerYellow","prefabHash":1712822019,"desc":"","name":"Flower (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFrenchFries":{"prefab":{"prefabName":"ItemFrenchFries","prefabHash":-57608687,"desc":"Because space would suck without 'em.","name":"Canned French Fries"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemFries":{"prefab":{"prefabName":"ItemFries","prefabHash":1371786091,"desc":"","name":"French Fries"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemGasCanisterCarbonDioxide":{"prefab":{"prefabName":"ItemGasCanisterCarbonDioxide","prefabHash":-767685874,"desc":"","name":"Canister (CO2)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterEmpty":{"prefab":{"prefabName":"ItemGasCanisterEmpty","prefabHash":42280099,"desc":"","name":"Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterFuel":{"prefab":{"prefabName":"ItemGasCanisterFuel","prefabHash":-1014695176,"desc":"","name":"Canister (Fuel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterNitrogen":{"prefab":{"prefabName":"ItemGasCanisterNitrogen","prefabHash":2145068424,"desc":"","name":"Canister (Nitrogen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterNitrousOxide":{"prefab":{"prefabName":"ItemGasCanisterNitrousOxide","prefabHash":-1712153401,"desc":"","name":"Gas Canister (Sleeping)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterOxygen":{"prefab":{"prefabName":"ItemGasCanisterOxygen","prefabHash":-1152261938,"desc":"","name":"Canister (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterPollutants":{"prefab":{"prefabName":"ItemGasCanisterPollutants","prefabHash":-1552586384,"desc":"","name":"Canister (Pollutants)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterSmart":{"prefab":{"prefabName":"ItemGasCanisterSmart","prefabHash":-668314371,"desc":"0.Mode0\n1.Mode1","name":"Gas Canister (Smart)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterVolatiles":{"prefab":{"prefabName":"ItemGasCanisterVolatiles","prefabHash":-472094806,"desc":"","name":"Canister (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterWater":{"prefab":{"prefabName":"ItemGasCanisterWater","prefabHash":-1854861891,"desc":"","name":"Liquid Canister (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemGasFilterCarbonDioxide":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxide","prefabHash":1635000764,"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.","name":"Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideInfinite":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideInfinite","prefabHash":-185568964,"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.","name":"Catalytic Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideL":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideL","prefabHash":1876847024,"desc":"","name":"Heavy Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideM":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideM","prefabHash":416897318,"desc":"","name":"Medium Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogen":{"prefab":{"prefabName":"ItemGasFilterNitrogen","prefabHash":632853248,"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.","name":"Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenInfinite":{"prefab":{"prefabName":"ItemGasFilterNitrogenInfinite","prefabHash":152751131,"desc":"A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenL":{"prefab":{"prefabName":"ItemGasFilterNitrogenL","prefabHash":-1387439451,"desc":"","name":"Heavy Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenM":{"prefab":{"prefabName":"ItemGasFilterNitrogenM","prefabHash":-632657357,"desc":"","name":"Medium Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxide":{"prefab":{"prefabName":"ItemGasFilterNitrousOxide","prefabHash":-1247674305,"desc":"","name":"Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideInfinite":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideInfinite","prefabHash":-123934842,"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.","name":"Catalytic Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideL":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideL","prefabHash":465267979,"desc":"","name":"Heavy Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideM":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideM","prefabHash":1824284061,"desc":"","name":"Medium Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygen":{"prefab":{"prefabName":"ItemGasFilterOxygen","prefabHash":-721824748,"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).","name":"Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenInfinite":{"prefab":{"prefabName":"ItemGasFilterOxygenInfinite","prefabHash":-1055451111,"desc":"A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenL":{"prefab":{"prefabName":"ItemGasFilterOxygenL","prefabHash":-1217998945,"desc":"","name":"Heavy Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenM":{"prefab":{"prefabName":"ItemGasFilterOxygenM","prefabHash":-1067319543,"desc":"","name":"Medium Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutants":{"prefab":{"prefabName":"ItemGasFilterPollutants","prefabHash":1915566057,"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.","name":"Filter (Pollutant)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsInfinite":{"prefab":{"prefabName":"ItemGasFilterPollutantsInfinite","prefabHash":-503738105,"desc":"A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsL":{"prefab":{"prefabName":"ItemGasFilterPollutantsL","prefabHash":1959564765,"desc":"","name":"Heavy Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsM":{"prefab":{"prefabName":"ItemGasFilterPollutantsM","prefabHash":63677771,"desc":"","name":"Medium Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatiles":{"prefab":{"prefabName":"ItemGasFilterVolatiles","prefabHash":15011598,"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.","name":"Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesInfinite":{"prefab":{"prefabName":"ItemGasFilterVolatilesInfinite","prefabHash":-1916176068,"desc":"A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesL":{"prefab":{"prefabName":"ItemGasFilterVolatilesL","prefabHash":1255156286,"desc":"","name":"Heavy Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesM":{"prefab":{"prefabName":"ItemGasFilterVolatilesM","prefabHash":1037507240,"desc":"","name":"Medium Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWater":{"prefab":{"prefabName":"ItemGasFilterWater","prefabHash":-1993197973,"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)","name":"Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterInfinite":{"prefab":{"prefabName":"ItemGasFilterWaterInfinite","prefabHash":-1678456554,"desc":"A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterL":{"prefab":{"prefabName":"ItemGasFilterWaterL","prefabHash":2004969680,"desc":"","name":"Heavy Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterM":{"prefab":{"prefabName":"ItemGasFilterWaterM","prefabHash":8804422,"desc":"","name":"Medium Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasSensor":{"prefab":{"prefabName":"ItemGasSensor","prefabHash":1717593480,"desc":"","name":"Kit (Gas Sensor)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemGasTankStorage":{"prefab":{"prefabName":"ItemGasTankStorage","prefabHash":-2113012215,"desc":"This kit produces a Kit (Canister Storage) for refilling a Canister.","name":"Kit (Canister Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemGlassSheets":{"prefab":{"prefabName":"ItemGlassSheets","prefabHash":1588896491,"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.","name":"Glass Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemGlasses":{"prefab":{"prefabName":"ItemGlasses","prefabHash":-1068925231,"desc":"","name":"Glasses"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Glasses","sortingClass":"Clothing"}},"ItemGoldIngot":{"prefab":{"prefabName":"ItemGoldIngot","prefabHash":226410516,"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. ","name":"Ingot (Gold)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Gold":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemGoldOre":{"prefab":{"prefabName":"ItemGoldOre","prefabHash":-1348105509,"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.","name":"Ore (Gold)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Gold":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemGrenade":{"prefab":{"prefabName":"ItemGrenade","prefabHash":1544275894,"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.","name":"Hand Grenade"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemHEMDroidRepairKit":{"prefab":{"prefabName":"ItemHEMDroidRepairKit","prefabHash":470636008,"desc":"Repairs damaged HEM-Droids to full health.","name":"HEMDroid Repair Kit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Food"}},"ItemHardBackpack":{"prefab":{"prefabName":"ItemHardBackpack","prefabHash":374891127,"desc":"This backpack can be useful when you are working inside and don't need to fly around.","name":"Hardsuit Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemHardJetpack":{"prefab":{"prefabName":"ItemHardJetpack","prefabHash":-412551656,"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.","name":"Hardsuit Jetpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemHardMiningBackPack":{"prefab":{"prefabName":"ItemHardMiningBackPack","prefabHash":900366130,"desc":"","name":"Hard Mining Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"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"}]},"ItemHardSuit":{"prefab":{"prefabName":"ItemHardSuit","prefabHash":-1758310454,"desc":"Connects to Logic Transmitter","name":"Hardsuit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Suit","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"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"}],"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"ItemHardsuitHelmet":{"prefab":{"prefabName":"ItemHardsuitHelmet","prefabHash":-84573099,"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.","name":"Hardsuit Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemHastelloyIngot":{"prefab":{"prefabName":"ItemHastelloyIngot","prefabHash":1579842814,"desc":"","name":"Ingot (Hastelloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Hastelloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemHat":{"prefab":{"prefabName":"ItemHat","prefabHash":299189339,"desc":"As the name suggests, this is a hat.","name":"Hat"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"}},"ItemHighVolumeGasCanisterEmpty":{"prefab":{"prefabName":"ItemHighVolumeGasCanisterEmpty","prefabHash":998653377,"desc":"","name":"High Volume Gas Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemHorticultureBelt":{"prefab":{"prefabName":"ItemHorticultureBelt","prefabHash":-1117581553,"desc":"","name":"Horticulture Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemHydroponicTray":{"prefab":{"prefabName":"ItemHydroponicTray","prefabHash":-1193543727,"desc":"This kits creates a Hydroponics Tray for growing various plants.","name":"Kit (Hydroponic Tray)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemIce":{"prefab":{"prefabName":"ItemIce","prefabHash":1217489948,"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.","name":"Ice (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemIgniter":{"prefab":{"prefabName":"ItemIgniter","prefabHash":890106742,"desc":"This kit creates an Kit (Igniter) unit.","name":"Kit (Igniter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemInconelIngot":{"prefab":{"prefabName":"ItemInconelIngot","prefabHash":-787796599,"desc":"","name":"Ingot (Inconel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Inconel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemInsulation":{"prefab":{"prefabName":"ItemInsulation","prefabHash":897176943,"desc":"Mysterious in the extreme, the function of this item is lost to the ages.","name":"Insulation"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Resources"}},"ItemIntegratedCircuit10":{"prefab":{"prefabName":"ItemIntegratedCircuit10","prefabHash":-744098481,"desc":"","name":"Integrated Circuit (IC10)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"ProgrammableChip","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"LineNumber":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"memory":{"memoryAccess":"ReadWrite","memorySize":512}},"ItemInvarIngot":{"prefab":{"prefabName":"ItemInvarIngot","prefabHash":-297990285,"desc":"","name":"Ingot (Invar)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Invar":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemIronFrames":{"prefab":{"prefabName":"ItemIronFrames","prefabHash":1225836666,"desc":"","name":"Iron Frames"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemIronIngot":{"prefab":{"prefabName":"ItemIronIngot","prefabHash":-1301215609,"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.","name":"Ingot (Iron)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Iron":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemIronOre":{"prefab":{"prefabName":"ItemIronOre","prefabHash":1758427767,"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.","name":"Ore (Iron)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Iron":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemIronSheets":{"prefab":{"prefabName":"ItemIronSheets","prefabHash":-487378546,"desc":"","name":"Iron Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemJetpackBasic":{"prefab":{"prefabName":"ItemJetpackBasic","prefabHash":1969189000,"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.","name":"Jetpack Basic"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemKitAIMeE":{"prefab":{"prefabName":"ItemKitAIMeE","prefabHash":496830914,"desc":"","name":"Kit (AIMeE)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAccessBridge":{"prefab":{"prefabName":"ItemKitAccessBridge","prefabHash":513258369,"desc":"","name":"Kit (Access Bridge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedComposter":{"prefab":{"prefabName":"ItemKitAdvancedComposter","prefabHash":-1431998347,"desc":"","name":"Kit (Advanced Composter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedFurnace":{"prefab":{"prefabName":"ItemKitAdvancedFurnace","prefabHash":-616758353,"desc":"","name":"Kit (Advanced Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedPackagingMachine":{"prefab":{"prefabName":"ItemKitAdvancedPackagingMachine","prefabHash":-598545233,"desc":"","name":"Kit (Advanced Packaging Machine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAirlock":{"prefab":{"prefabName":"ItemKitAirlock","prefabHash":964043875,"desc":"","name":"Kit (Airlock)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAirlockGate":{"prefab":{"prefabName":"ItemKitAirlockGate","prefabHash":682546947,"desc":"","name":"Kit (Hangar Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitArcFurnace":{"prefab":{"prefabName":"ItemKitArcFurnace","prefabHash":-98995857,"desc":"","name":"Kit (Arc Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAtmospherics":{"prefab":{"prefabName":"ItemKitAtmospherics","prefabHash":1222286371,"desc":"","name":"Kit (Atmospherics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutoMinerSmall":{"prefab":{"prefabName":"ItemKitAutoMinerSmall","prefabHash":1668815415,"desc":"","name":"Kit (Autominer Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutolathe":{"prefab":{"prefabName":"ItemKitAutolathe","prefabHash":-1753893214,"desc":"","name":"Kit (Autolathe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutomatedOven":{"prefab":{"prefabName":"ItemKitAutomatedOven","prefabHash":-1931958659,"desc":"","name":"Kit (Automated Oven)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBasket":{"prefab":{"prefabName":"ItemKitBasket","prefabHash":148305004,"desc":"","name":"Kit (Basket)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBattery":{"prefab":{"prefabName":"ItemKitBattery","prefabHash":1406656973,"desc":"","name":"Kit (Battery)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBatteryLarge":{"prefab":{"prefabName":"ItemKitBatteryLarge","prefabHash":-21225041,"desc":"","name":"Kit (Battery Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBeacon":{"prefab":{"prefabName":"ItemKitBeacon","prefabHash":249073136,"desc":"","name":"Kit (Beacon)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBeds":{"prefab":{"prefabName":"ItemKitBeds","prefabHash":-1241256797,"desc":"","name":"Kit (Beds)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBlastDoor":{"prefab":{"prefabName":"ItemKitBlastDoor","prefabHash":-1755116240,"desc":"","name":"Kit (Blast Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCentrifuge":{"prefab":{"prefabName":"ItemKitCentrifuge","prefabHash":578182956,"desc":"","name":"Kit (Centrifuge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChairs":{"prefab":{"prefabName":"ItemKitChairs","prefabHash":-1394008073,"desc":"","name":"Kit (Chairs)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChute":{"prefab":{"prefabName":"ItemKitChute","prefabHash":1025254665,"desc":"","name":"Kit (Basic Chutes)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChuteUmbilical":{"prefab":{"prefabName":"ItemKitChuteUmbilical","prefabHash":-876560854,"desc":"","name":"Kit (Chute Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCompositeCladding":{"prefab":{"prefabName":"ItemKitCompositeCladding","prefabHash":-1470820996,"desc":"","name":"Kit (Cladding)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCompositeFloorGrating":{"prefab":{"prefabName":"ItemKitCompositeFloorGrating","prefabHash":1182412869,"desc":"","name":"Kit (Floor Grating)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitComputer":{"prefab":{"prefabName":"ItemKitComputer","prefabHash":1990225489,"desc":"","name":"Kit (Computer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitConsole":{"prefab":{"prefabName":"ItemKitConsole","prefabHash":-1241851179,"desc":"","name":"Kit (Consoles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrate":{"prefab":{"prefabName":"ItemKitCrate","prefabHash":429365598,"desc":"","name":"Kit (Crate)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrateMkII":{"prefab":{"prefabName":"ItemKitCrateMkII","prefabHash":-1585956426,"desc":"","name":"Kit (Crate Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrateMount":{"prefab":{"prefabName":"ItemKitCrateMount","prefabHash":-551612946,"desc":"","name":"Kit (Container Mount)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCryoTube":{"prefab":{"prefabName":"ItemKitCryoTube","prefabHash":-545234195,"desc":"","name":"Kit (Cryo Tube)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDeepMiner":{"prefab":{"prefabName":"ItemKitDeepMiner","prefabHash":-1935075707,"desc":"","name":"Kit (Deep Miner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDockingPort":{"prefab":{"prefabName":"ItemKitDockingPort","prefabHash":77421200,"desc":"","name":"Kit (Docking Port)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDoor":{"prefab":{"prefabName":"ItemKitDoor","prefabHash":168615924,"desc":"","name":"Kit (Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDrinkingFountain":{"prefab":{"prefabName":"ItemKitDrinkingFountain","prefabHash":-1743663875,"desc":"","name":"Kit (Drinking Fountain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicCanister":{"prefab":{"prefabName":"ItemKitDynamicCanister","prefabHash":-1061945368,"desc":"","name":"Kit (Portable Gas Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicGasTankAdvanced":{"prefab":{"prefabName":"ItemKitDynamicGasTankAdvanced","prefabHash":1533501495,"desc":"","name":"Kit (Portable Gas Tank Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitDynamicGenerator":{"prefab":{"prefabName":"ItemKitDynamicGenerator","prefabHash":-732720413,"desc":"","name":"Kit (Portable Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicHydroponics":{"prefab":{"prefabName":"ItemKitDynamicHydroponics","prefabHash":-1861154222,"desc":"","name":"Kit (Portable Hydroponics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicLiquidCanister":{"prefab":{"prefabName":"ItemKitDynamicLiquidCanister","prefabHash":375541286,"desc":"","name":"Kit (Portable Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicMKIILiquidCanister":{"prefab":{"prefabName":"ItemKitDynamicMKIILiquidCanister","prefabHash":-638019974,"desc":"","name":"Kit (Portable Liquid Tank Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElectricUmbilical":{"prefab":{"prefabName":"ItemKitElectricUmbilical","prefabHash":1603046970,"desc":"","name":"Kit (Power Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElectronicsPrinter":{"prefab":{"prefabName":"ItemKitElectronicsPrinter","prefabHash":-1181922382,"desc":"","name":"Kit (Electronics Printer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElevator":{"prefab":{"prefabName":"ItemKitElevator","prefabHash":-945806652,"desc":"","name":"Kit (Elevator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineLarge":{"prefab":{"prefabName":"ItemKitEngineLarge","prefabHash":755302726,"desc":"","name":"Kit (Engine Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineMedium":{"prefab":{"prefabName":"ItemKitEngineMedium","prefabHash":1969312177,"desc":"","name":"Kit (Engine Medium)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineSmall":{"prefab":{"prefabName":"ItemKitEngineSmall","prefabHash":19645163,"desc":"","name":"Kit (Engine Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEvaporationChamber":{"prefab":{"prefabName":"ItemKitEvaporationChamber","prefabHash":1587787610,"desc":"","name":"Kit (Phase Change Device)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFlagODA":{"prefab":{"prefabName":"ItemKitFlagODA","prefabHash":1701764190,"desc":"","name":"Kit (ODA Flag)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitFridgeBig":{"prefab":{"prefabName":"ItemKitFridgeBig","prefabHash":-1168199498,"desc":"","name":"Kit (Fridge Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFridgeSmall":{"prefab":{"prefabName":"ItemKitFridgeSmall","prefabHash":1661226524,"desc":"","name":"Kit (Fridge Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFurnace":{"prefab":{"prefabName":"ItemKitFurnace","prefabHash":-806743925,"desc":"","name":"Kit (Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFurniture":{"prefab":{"prefabName":"ItemKitFurniture","prefabHash":1162905029,"desc":"","name":"Kit (Furniture)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFuselage":{"prefab":{"prefabName":"ItemKitFuselage","prefabHash":-366262681,"desc":"","name":"Kit (Fuselage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGasGenerator":{"prefab":{"prefabName":"ItemKitGasGenerator","prefabHash":377745425,"desc":"","name":"Kit (Gas Fuel Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGasUmbilical":{"prefab":{"prefabName":"ItemKitGasUmbilical","prefabHash":-1867280568,"desc":"","name":"Kit (Gas Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGovernedGasRocketEngine":{"prefab":{"prefabName":"ItemKitGovernedGasRocketEngine","prefabHash":206848766,"desc":"","name":"Kit (Pumped Gas Rocket Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGroundTelescope":{"prefab":{"prefabName":"ItemKitGroundTelescope","prefabHash":-2140672772,"desc":"","name":"Kit (Telescope)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGrowLight":{"prefab":{"prefabName":"ItemKitGrowLight","prefabHash":341030083,"desc":"","name":"Kit (Grow Light)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHarvie":{"prefab":{"prefabName":"ItemKitHarvie","prefabHash":-1022693454,"desc":"","name":"Kit (Harvie)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHeatExchanger":{"prefab":{"prefabName":"ItemKitHeatExchanger","prefabHash":-1710540039,"desc":"","name":"Kit Heat Exchanger"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHorizontalAutoMiner":{"prefab":{"prefabName":"ItemKitHorizontalAutoMiner","prefabHash":844391171,"desc":"","name":"Kit (OGRE)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydraulicPipeBender":{"prefab":{"prefabName":"ItemKitHydraulicPipeBender","prefabHash":-2098556089,"desc":"","name":"Kit (Hydraulic Pipe Bender)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydroponicAutomated":{"prefab":{"prefabName":"ItemKitHydroponicAutomated","prefabHash":-927931558,"desc":"","name":"Kit (Automated Hydroponics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydroponicStation":{"prefab":{"prefabName":"ItemKitHydroponicStation","prefabHash":2057179799,"desc":"","name":"Kit (Hydroponic Station)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitIceCrusher":{"prefab":{"prefabName":"ItemKitIceCrusher","prefabHash":288111533,"desc":"","name":"Kit (Ice Crusher)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedLiquidPipe":{"prefab":{"prefabName":"ItemKitInsulatedLiquidPipe","prefabHash":2067655311,"desc":"","name":"Kit (Insulated Liquid Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipe":{"prefab":{"prefabName":"ItemKitInsulatedPipe","prefabHash":452636699,"desc":"","name":"Kit (Insulated Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipeUtility":{"prefab":{"prefabName":"ItemKitInsulatedPipeUtility","prefabHash":-27284803,"desc":"","name":"Kit (Insulated Pipe Utility Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipeUtilityLiquid":{"prefab":{"prefabName":"ItemKitInsulatedPipeUtilityLiquid","prefabHash":-1831558953,"desc":"","name":"Kit (Insulated Pipe Utility Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInteriorDoors":{"prefab":{"prefabName":"ItemKitInteriorDoors","prefabHash":1935945891,"desc":"","name":"Kit (Interior Doors)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLadder":{"prefab":{"prefabName":"ItemKitLadder","prefabHash":489494578,"desc":"","name":"Kit (Ladder)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadAtmos":{"prefab":{"prefabName":"ItemKitLandingPadAtmos","prefabHash":1817007843,"desc":"","name":"Kit (Landing Pad Atmospherics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadBasic":{"prefab":{"prefabName":"ItemKitLandingPadBasic","prefabHash":293581318,"desc":"","name":"Kit (Landing Pad Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadWaypoint":{"prefab":{"prefabName":"ItemKitLandingPadWaypoint","prefabHash":-1267511065,"desc":"","name":"Kit (Landing Pad Runway)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeDirectHeatExchanger":{"prefab":{"prefabName":"ItemKitLargeDirectHeatExchanger","prefabHash":450164077,"desc":"","name":"Kit (Large Direct Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeExtendableRadiator":{"prefab":{"prefabName":"ItemKitLargeExtendableRadiator","prefabHash":847430620,"desc":"","name":"Kit (Large Extendable Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeSatelliteDish":{"prefab":{"prefabName":"ItemKitLargeSatelliteDish","prefabHash":-2039971217,"desc":"","name":"Kit (Large Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLaunchMount":{"prefab":{"prefabName":"ItemKitLaunchMount","prefabHash":-1854167549,"desc":"","name":"Kit (Launch Mount)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLaunchTower":{"prefab":{"prefabName":"ItemKitLaunchTower","prefabHash":-174523552,"desc":"","name":"Kit (Rocket Launch Tower)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidRegulator":{"prefab":{"prefabName":"ItemKitLiquidRegulator","prefabHash":1951126161,"desc":"","name":"Kit (Liquid Regulator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTank":{"prefab":{"prefabName":"ItemKitLiquidTank","prefabHash":-799849305,"desc":"","name":"Kit (Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTankInsulated":{"prefab":{"prefabName":"ItemKitLiquidTankInsulated","prefabHash":617773453,"desc":"","name":"Kit (Insulated Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTurboVolumePump":{"prefab":{"prefabName":"ItemKitLiquidTurboVolumePump","prefabHash":-1805020897,"desc":"","name":"Kit (Turbo Volume Pump - Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidUmbilical":{"prefab":{"prefabName":"ItemKitLiquidUmbilical","prefabHash":1571996765,"desc":"","name":"Kit (Liquid Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLocker":{"prefab":{"prefabName":"ItemKitLocker","prefabHash":882301399,"desc":"","name":"Kit (Locker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicCircuit":{"prefab":{"prefabName":"ItemKitLogicCircuit","prefabHash":1512322581,"desc":"","name":"Kit (IC Housing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicInputOutput":{"prefab":{"prefabName":"ItemKitLogicInputOutput","prefabHash":1997293610,"desc":"","name":"Kit (Logic I/O)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicMemory":{"prefab":{"prefabName":"ItemKitLogicMemory","prefabHash":-2098214189,"desc":"","name":"Kit (Logic Memory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicProcessor":{"prefab":{"prefabName":"ItemKitLogicProcessor","prefabHash":220644373,"desc":"","name":"Kit (Logic Processor)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicSwitch":{"prefab":{"prefabName":"ItemKitLogicSwitch","prefabHash":124499454,"desc":"","name":"Kit (Logic Switch)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicTransmitter":{"prefab":{"prefabName":"ItemKitLogicTransmitter","prefabHash":1005397063,"desc":"","name":"Kit (Logic Transmitter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitMotherShipCore":{"prefab":{"prefabName":"ItemKitMotherShipCore","prefabHash":-344968335,"desc":"","name":"Kit (Mothership)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitMusicMachines":{"prefab":{"prefabName":"ItemKitMusicMachines","prefabHash":-2038889137,"desc":"","name":"Kit (Music Machines)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPassiveLargeRadiatorGas":{"prefab":{"prefabName":"ItemKitPassiveLargeRadiatorGas","prefabHash":-1752768283,"desc":"","name":"Kit (Medium Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitPassiveLargeRadiatorLiquid":{"prefab":{"prefabName":"ItemKitPassiveLargeRadiatorLiquid","prefabHash":1453961898,"desc":"","name":"Kit (Medium Radiator Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPassthroughHeatExchanger":{"prefab":{"prefabName":"ItemKitPassthroughHeatExchanger","prefabHash":636112787,"desc":"","name":"Kit (CounterFlow Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPictureFrame":{"prefab":{"prefabName":"ItemKitPictureFrame","prefabHash":-2062364768,"desc":"","name":"Kit Picture Frame"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipe":{"prefab":{"prefabName":"ItemKitPipe","prefabHash":-1619793705,"desc":"","name":"Kit (Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeLiquid":{"prefab":{"prefabName":"ItemKitPipeLiquid","prefabHash":-1166461357,"desc":"","name":"Kit (Liquid Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeOrgan":{"prefab":{"prefabName":"ItemKitPipeOrgan","prefabHash":-827125300,"desc":"","name":"Kit (Pipe Organ)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeRadiator":{"prefab":{"prefabName":"ItemKitPipeRadiator","prefabHash":920411066,"desc":"","name":"Kit (Pipe Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitPipeRadiatorLiquid":{"prefab":{"prefabName":"ItemKitPipeRadiatorLiquid","prefabHash":-1697302609,"desc":"","name":"Kit (Pipe Radiator Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitPipeUtility":{"prefab":{"prefabName":"ItemKitPipeUtility","prefabHash":1934508338,"desc":"","name":"Kit (Pipe Utility Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeUtilityLiquid":{"prefab":{"prefabName":"ItemKitPipeUtilityLiquid","prefabHash":595478589,"desc":"","name":"Kit (Pipe Utility Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPlanter":{"prefab":{"prefabName":"ItemKitPlanter","prefabHash":119096484,"desc":"","name":"Kit (Planter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPortablesConnector":{"prefab":{"prefabName":"ItemKitPortablesConnector","prefabHash":1041148999,"desc":"","name":"Kit (Portables Connector)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPowerTransmitter":{"prefab":{"prefabName":"ItemKitPowerTransmitter","prefabHash":291368213,"desc":"","name":"Kit (Power Transmitter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPowerTransmitterOmni":{"prefab":{"prefabName":"ItemKitPowerTransmitterOmni","prefabHash":-831211676,"desc":"","name":"Kit (Power Transmitter Omni)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPoweredVent":{"prefab":{"prefabName":"ItemKitPoweredVent","prefabHash":2015439334,"desc":"","name":"Kit (Powered Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressureFedGasEngine":{"prefab":{"prefabName":"ItemKitPressureFedGasEngine","prefabHash":-121514007,"desc":"","name":"Kit (Pressure Fed Gas Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressureFedLiquidEngine":{"prefab":{"prefabName":"ItemKitPressureFedLiquidEngine","prefabHash":-99091572,"desc":"","name":"Kit (Pressure Fed Liquid Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressurePlate":{"prefab":{"prefabName":"ItemKitPressurePlate","prefabHash":123504691,"desc":"","name":"Kit (Trigger Plate)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPumpedLiquidEngine":{"prefab":{"prefabName":"ItemKitPumpedLiquidEngine","prefabHash":1921918951,"desc":"","name":"Kit (Pumped Liquid Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRailing":{"prefab":{"prefabName":"ItemKitRailing","prefabHash":750176282,"desc":"","name":"Kit (Railing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRecycler":{"prefab":{"prefabName":"ItemKitRecycler","prefabHash":849148192,"desc":"","name":"Kit (Recycler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRegulator":{"prefab":{"prefabName":"ItemKitRegulator","prefabHash":1181371795,"desc":"","name":"Kit (Pressure Regulator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitReinforcedWindows":{"prefab":{"prefabName":"ItemKitReinforcedWindows","prefabHash":1459985302,"desc":"","name":"Kit (Reinforced Windows)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitResearchMachine":{"prefab":{"prefabName":"ItemKitResearchMachine","prefabHash":724776762,"desc":"","name":"Kit Research Machine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitRespawnPointWallMounted":{"prefab":{"prefabName":"ItemKitRespawnPointWallMounted","prefabHash":1574688481,"desc":"","name":"Kit (Respawn)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketAvionics":{"prefab":{"prefabName":"ItemKitRocketAvionics","prefabHash":1396305045,"desc":"","name":"Kit (Avionics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketBattery":{"prefab":{"prefabName":"ItemKitRocketBattery","prefabHash":-314072139,"desc":"","name":"Kit (Rocket Battery)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCargoStorage":{"prefab":{"prefabName":"ItemKitRocketCargoStorage","prefabHash":479850239,"desc":"","name":"Kit (Rocket Cargo Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCelestialTracker":{"prefab":{"prefabName":"ItemKitRocketCelestialTracker","prefabHash":-303008602,"desc":"","name":"Kit (Rocket Celestial Tracker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCircuitHousing":{"prefab":{"prefabName":"ItemKitRocketCircuitHousing","prefabHash":721251202,"desc":"","name":"Kit (Rocket Circuit Housing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketDatalink":{"prefab":{"prefabName":"ItemKitRocketDatalink","prefabHash":-1256996603,"desc":"","name":"Kit (Rocket Datalink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketGasFuelTank":{"prefab":{"prefabName":"ItemKitRocketGasFuelTank","prefabHash":-1629347579,"desc":"","name":"Kit (Rocket Gas Fuel Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketLiquidFuelTank":{"prefab":{"prefabName":"ItemKitRocketLiquidFuelTank","prefabHash":2032027950,"desc":"","name":"Kit (Rocket Liquid Fuel Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketManufactory":{"prefab":{"prefabName":"ItemKitRocketManufactory","prefabHash":-636127860,"desc":"","name":"Kit (Rocket Manufactory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketMiner":{"prefab":{"prefabName":"ItemKitRocketMiner","prefabHash":-867969909,"desc":"","name":"Kit (Rocket Miner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketScanner":{"prefab":{"prefabName":"ItemKitRocketScanner","prefabHash":1753647154,"desc":"","name":"Kit (Rocket Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketTransformerSmall":{"prefab":{"prefabName":"ItemKitRocketTransformerSmall","prefabHash":-932335800,"desc":"","name":"Kit (Transformer Small (Rocket))"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRoverFrame":{"prefab":{"prefabName":"ItemKitRoverFrame","prefabHash":1827215803,"desc":"","name":"Kit (Rover Frame)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRoverMKI":{"prefab":{"prefabName":"ItemKitRoverMKI","prefabHash":197243872,"desc":"","name":"Kit (Rover Mk I)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSDBHopper":{"prefab":{"prefabName":"ItemKitSDBHopper","prefabHash":323957548,"desc":"","name":"Kit (SDB Hopper)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSatelliteDish":{"prefab":{"prefabName":"ItemKitSatelliteDish","prefabHash":178422810,"desc":"","name":"Kit (Medium Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSecurityPrinter":{"prefab":{"prefabName":"ItemKitSecurityPrinter","prefabHash":578078533,"desc":"","name":"Kit (Security Printer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSensor":{"prefab":{"prefabName":"ItemKitSensor","prefabHash":-1776897113,"desc":"","name":"Kit (Sensors)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitShower":{"prefab":{"prefabName":"ItemKitShower","prefabHash":735858725,"desc":"","name":"Kit (Shower)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSign":{"prefab":{"prefabName":"ItemKitSign","prefabHash":529996327,"desc":"","name":"Kit (Sign)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSleeper":{"prefab":{"prefabName":"ItemKitSleeper","prefabHash":326752036,"desc":"","name":"Kit (Sleeper)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSmallDirectHeatExchanger":{"prefab":{"prefabName":"ItemKitSmallDirectHeatExchanger","prefabHash":-1332682164,"desc":"","name":"Kit (Small Direct Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitSmallSatelliteDish":{"prefab":{"prefabName":"ItemKitSmallSatelliteDish","prefabHash":1960952220,"desc":"","name":"Kit (Small Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolarPanel":{"prefab":{"prefabName":"ItemKitSolarPanel","prefabHash":-1924492105,"desc":"","name":"Kit (Solar Panel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolarPanelBasic":{"prefab":{"prefabName":"ItemKitSolarPanelBasic","prefabHash":844961456,"desc":"","name":"Kit (Solar Panel Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitSolarPanelBasicReinforced":{"prefab":{"prefabName":"ItemKitSolarPanelBasicReinforced","prefabHash":-528695432,"desc":"","name":"Kit (Solar Panel Basic Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitSolarPanelReinforced":{"prefab":{"prefabName":"ItemKitSolarPanelReinforced","prefabHash":-364868685,"desc":"","name":"Kit (Solar Panel Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolidGenerator":{"prefab":{"prefabName":"ItemKitSolidGenerator","prefabHash":1293995736,"desc":"","name":"Kit (Solid Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSorter":{"prefab":{"prefabName":"ItemKitSorter","prefabHash":969522478,"desc":"","name":"Kit (Sorter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSpeaker":{"prefab":{"prefabName":"ItemKitSpeaker","prefabHash":-126038526,"desc":"","name":"Kit (Speaker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStacker":{"prefab":{"prefabName":"ItemKitStacker","prefabHash":1013244511,"desc":"","name":"Kit (Stacker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStairs":{"prefab":{"prefabName":"ItemKitStairs","prefabHash":170878959,"desc":"","name":"Kit (Stairs)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStairwell":{"prefab":{"prefabName":"ItemKitStairwell","prefabHash":-1868555784,"desc":"","name":"Kit (Stairwell)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStandardChute":{"prefab":{"prefabName":"ItemKitStandardChute","prefabHash":2133035682,"desc":"","name":"Kit (Powered Chutes)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStirlingEngine":{"prefab":{"prefabName":"ItemKitStirlingEngine","prefabHash":-1821571150,"desc":"","name":"Kit (Stirling Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSuitStorage":{"prefab":{"prefabName":"ItemKitSuitStorage","prefabHash":1088892825,"desc":"","name":"Kit (Suit Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTables":{"prefab":{"prefabName":"ItemKitTables","prefabHash":-1361598922,"desc":"","name":"Kit (Tables)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTank":{"prefab":{"prefabName":"ItemKitTank","prefabHash":771439840,"desc":"","name":"Kit (Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTankInsulated":{"prefab":{"prefabName":"ItemKitTankInsulated","prefabHash":1021053608,"desc":"","name":"Kit (Tank Insulated)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitToolManufactory":{"prefab":{"prefabName":"ItemKitToolManufactory","prefabHash":529137748,"desc":"","name":"Kit (Tool Manufactory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTransformer":{"prefab":{"prefabName":"ItemKitTransformer","prefabHash":-453039435,"desc":"","name":"Kit (Transformer Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTransformerSmall":{"prefab":{"prefabName":"ItemKitTransformerSmall","prefabHash":665194284,"desc":"","name":"Kit (Transformer Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTurbineGenerator":{"prefab":{"prefabName":"ItemKitTurbineGenerator","prefabHash":-1590715731,"desc":"","name":"Kit (Turbine Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTurboVolumePump":{"prefab":{"prefabName":"ItemKitTurboVolumePump","prefabHash":-1248429712,"desc":"","name":"Kit (Turbo Volume Pump - Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitUprightWindTurbine":{"prefab":{"prefabName":"ItemKitUprightWindTurbine","prefabHash":-1798044015,"desc":"","name":"Kit (Upright Wind Turbine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitVendingMachine":{"prefab":{"prefabName":"ItemKitVendingMachine","prefabHash":-2038384332,"desc":"","name":"Kit (Vending Machine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitVendingMachineRefrigerated":{"prefab":{"prefabName":"ItemKitVendingMachineRefrigerated","prefabHash":-1867508561,"desc":"","name":"Kit (Vending Machine Refrigerated)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWall":{"prefab":{"prefabName":"ItemKitWall","prefabHash":-1826855889,"desc":"","name":"Kit (Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallArch":{"prefab":{"prefabName":"ItemKitWallArch","prefabHash":1625214531,"desc":"","name":"Kit (Arched Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallFlat":{"prefab":{"prefabName":"ItemKitWallFlat","prefabHash":-846838195,"desc":"","name":"Kit (Flat Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallGeometry":{"prefab":{"prefabName":"ItemKitWallGeometry","prefabHash":-784733231,"desc":"","name":"Kit (Geometric Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallIron":{"prefab":{"prefabName":"ItemKitWallIron","prefabHash":-524546923,"desc":"","name":"Kit (Iron Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallPadded":{"prefab":{"prefabName":"ItemKitWallPadded","prefabHash":-821868990,"desc":"","name":"Kit (Padded Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWaterBottleFiller":{"prefab":{"prefabName":"ItemKitWaterBottleFiller","prefabHash":159886536,"desc":"","name":"Kit (Water Bottle Filler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWaterPurifier":{"prefab":{"prefabName":"ItemKitWaterPurifier","prefabHash":611181283,"desc":"","name":"Kit (Water Purifier)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWeatherStation":{"prefab":{"prefabName":"ItemKitWeatherStation","prefabHash":337505889,"desc":"","name":"Kit (Weather Station)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitWindTurbine":{"prefab":{"prefabName":"ItemKitWindTurbine","prefabHash":-868916503,"desc":"","name":"Kit (Wind Turbine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWindowShutter":{"prefab":{"prefabName":"ItemKitWindowShutter","prefabHash":1779979754,"desc":"","name":"Kit (Window Shutter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemLabeller":{"prefab":{"prefabName":"ItemLabeller","prefabHash":-743968726,"desc":"A labeller lets you set names and values on a variety of devices and structures, including Console and Logic.","name":"Labeller"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemLaptop":{"prefab":{"prefabName":"ItemLaptop","prefabHash":141535121,"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","name":"Laptop"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","PositionX":"Read","PositionY":"Read","PositionZ":"Read","Power":"Read","PressureExternal":"Read","ReferenceId":"Read","TemperatureExternal":"Read"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"},{"name":"Battery","typ":"Battery"},{"name":"Motherboard","typ":"Motherboard"}]},"ItemLeadIngot":{"prefab":{"prefabName":"ItemLeadIngot","prefabHash":2134647745,"desc":"","name":"Ingot (Lead)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Lead":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemLeadOre":{"prefab":{"prefabName":"ItemLeadOre","prefabHash":-190236170,"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.","name":"Ore (Lead)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Lead":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemLightSword":{"prefab":{"prefabName":"ItemLightSword","prefabHash":1949076595,"desc":"A charming, if useless, pseudo-weapon. (Creative only.)","name":"Light Sword"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidCanisterEmpty":{"prefab":{"prefabName":"ItemLiquidCanisterEmpty","prefabHash":-185207387,"desc":"","name":"Liquid Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemLiquidCanisterSmart":{"prefab":{"prefabName":"ItemLiquidCanisterSmart","prefabHash":777684475,"desc":"0.Mode0\n1.Mode1","name":"Liquid Canister (Smart)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemLiquidDrain":{"prefab":{"prefabName":"ItemLiquidDrain","prefabHash":2036225202,"desc":"","name":"Kit (Liquid Drain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidPipeAnalyzer":{"prefab":{"prefabName":"ItemLiquidPipeAnalyzer","prefabHash":226055671,"desc":"","name":"Kit (Liquid Pipe Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidPipeHeater":{"prefab":{"prefabName":"ItemLiquidPipeHeater","prefabHash":-248475032,"desc":"Creates a Pipe Heater (Liquid).","name":"Pipe Heater Kit (Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidPipeValve":{"prefab":{"prefabName":"ItemLiquidPipeValve","prefabHash":-2126113312,"desc":"This kit creates a Liquid Valve.","name":"Kit (Liquid Pipe Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidPipeVolumePump":{"prefab":{"prefabName":"ItemLiquidPipeVolumePump","prefabHash":-2106280569,"desc":"","name":"Kit (Liquid Volume Pump)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidTankStorage":{"prefab":{"prefabName":"ItemLiquidTankStorage","prefabHash":2037427578,"desc":"This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister.","name":"Kit (Liquid Canister Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemMKIIAngleGrinder":{"prefab":{"prefabName":"ItemMKIIAngleGrinder","prefabHash":240174650,"desc":"Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure.","name":"Mk II Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIArcWelder":{"prefab":{"prefabName":"ItemMKIIArcWelder","prefabHash":-2061979347,"desc":"","name":"Mk II Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIICrowbar":{"prefab":{"prefabName":"ItemMKIICrowbar","prefabHash":1440775434,"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.","name":"Mk II Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIDrill":{"prefab":{"prefabName":"ItemMKIIDrill","prefabHash":324791548,"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.","name":"Mk II Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIDuctTape":{"prefab":{"prefabName":"ItemMKIIDuctTape","prefabHash":388774906,"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.","name":"Mk II Duct Tape"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIMiningDrill":{"prefab":{"prefabName":"ItemMKIIMiningDrill","prefabHash":-1875271296,"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.","name":"Mk II Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIScrewdriver":{"prefab":{"prefabName":"ItemMKIIScrewdriver","prefabHash":-2015613246,"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.","name":"Mk II Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIWireCutters":{"prefab":{"prefabName":"ItemMKIIWireCutters","prefabHash":-178893251,"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.","name":"Mk II Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIWrench":{"prefab":{"prefabName":"ItemMKIIWrench","prefabHash":1862001680,"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.","name":"Mk II Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMarineBodyArmor":{"prefab":{"prefabName":"ItemMarineBodyArmor","prefabHash":1399098998,"desc":"","name":"Marine Armor"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Suit","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMarineHelmet":{"prefab":{"prefabName":"ItemMarineHelmet","prefabHash":1073631646,"desc":"","name":"Marine Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMilk":{"prefab":{"prefabName":"ItemMilk","prefabHash":1327248310,"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.","name":"Milk"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"Milk":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemMiningBackPack":{"prefab":{"prefabName":"ItemMiningBackPack","prefabHash":-1650383245,"desc":"","name":"Mining Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"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"}]},"ItemMiningBelt":{"prefab":{"prefabName":"ItemMiningBelt","prefabHash":-676435305,"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.","name":"Mining Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemMiningBeltMKII":{"prefab":{"prefabName":"ItemMiningBeltMKII","prefabHash":1470787934,"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. ","name":"Mining Belt MK II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"}]},"ItemMiningCharge":{"prefab":{"prefabName":"ItemMiningCharge","prefabHash":15829510,"desc":"A low cost, high yield explosive with a 10 second timer.","name":"Mining Charge"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemMiningDrill":{"prefab":{"prefabName":"ItemMiningDrill","prefabHash":1055173191,"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.'","name":"Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillHeavy":{"prefab":{"prefabName":"ItemMiningDrillHeavy","prefabHash":-1663349918,"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.","name":"Mining Drill (Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillPneumatic":{"prefab":{"prefabName":"ItemMiningDrillPneumatic","prefabHash":1258187304,"desc":"0.Default\n1.Flatten","name":"Pneumatic Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemMkIIToolbelt":{"prefab":{"prefabName":"ItemMkIIToolbelt","prefabHash":1467558064,"desc":"A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy.","name":"Tool Belt MK II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"Tool","typ":"Tool"},{"name":"Tool","typ":"Tool"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMuffin":{"prefab":{"prefabName":"ItemMuffin","prefabHash":-1864982322,"desc":"A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin.","name":"Muffin"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemMushroom":{"prefab":{"prefabName":"ItemMushroom","prefabHash":2044798572,"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.","name":"Mushroom"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Mushroom":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemNVG":{"prefab":{"prefabName":"ItemNVG","prefabHash":982514123,"desc":"","name":"Night Vision Goggles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Glasses","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemNickelIngot":{"prefab":{"prefabName":"ItemNickelIngot","prefabHash":-1406385572,"desc":"","name":"Ingot (Nickel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Nickel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemNickelOre":{"prefab":{"prefabName":"ItemNickelOre","prefabHash":1830218956,"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.","name":"Ore (Nickel)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Nickel":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemNitrice":{"prefab":{"prefabName":"ItemNitrice","prefabHash":-1499471529,"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.","name":"Ice (Nitrice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemOxite":{"prefab":{"prefabName":"ItemOxite","prefabHash":-1805394113,"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.","name":"Ice (Oxite)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPassiveVent":{"prefab":{"prefabName":"ItemPassiveVent","prefabHash":238631271,"desc":"This kit creates a Passive Vent among other variants.","name":"Passive Vent"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPassiveVentInsulated":{"prefab":{"prefabName":"ItemPassiveVentInsulated","prefabHash":-1397583760,"desc":"","name":"Kit (Insulated Passive Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPeaceLily":{"prefab":{"prefabName":"ItemPeaceLily","prefabHash":2042955224,"desc":"A fetching lily with greater resistance to cold temperatures.","name":"Peace Lily"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPickaxe":{"prefab":{"prefabName":"ItemPickaxe","prefabHash":-913649823,"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.","name":"Pickaxe"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemPillHeal":{"prefab":{"prefabName":"ItemPillHeal","prefabHash":1118069417,"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.","name":"Pill (Medical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Food"}},"ItemPillStun":{"prefab":{"prefabName":"ItemPillStun","prefabHash":418958601,"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.","name":"Pill (Paralysis)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Food"}},"ItemPipeAnalyizer":{"prefab":{"prefabName":"ItemPipeAnalyizer","prefabHash":-767597887,"desc":"This kit creates a Pipe Analyzer.","name":"Kit (Pipe Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeCowl":{"prefab":{"prefabName":"ItemPipeCowl","prefabHash":-38898376,"desc":"This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres.","name":"Pipe Cowl"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeDigitalValve":{"prefab":{"prefabName":"ItemPipeDigitalValve","prefabHash":-1532448832,"desc":"This kit creates a Digital Valve.","name":"Kit (Digital Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeGasMixer":{"prefab":{"prefabName":"ItemPipeGasMixer","prefabHash":-1134459463,"desc":"This kit creates a Gas Mixer.","name":"Kit (Gas Mixer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeHeater":{"prefab":{"prefabName":"ItemPipeHeater","prefabHash":-1751627006,"desc":"Creates a Pipe Heater (Gas).","name":"Pipe Heater Kit (Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemPipeIgniter":{"prefab":{"prefabName":"ItemPipeIgniter","prefabHash":1366030599,"desc":"","name":"Kit (Pipe Igniter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeLabel":{"prefab":{"prefabName":"ItemPipeLabel","prefabHash":391769637,"desc":"This kit creates a Pipe Label.","name":"Kit (Pipe Label)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeLiquidRadiator":{"prefab":{"prefabName":"ItemPipeLiquidRadiator","prefabHash":-906521320,"desc":"This kit creates a Liquid Pipe Convection Radiator.","name":"Kit (Liquid Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeMeter":{"prefab":{"prefabName":"ItemPipeMeter","prefabHash":1207939683,"desc":"This kit creates a Pipe Meter.","name":"Kit (Pipe Meter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeRadiator":{"prefab":{"prefabName":"ItemPipeRadiator","prefabHash":-1796655088,"desc":"This kit creates a Pipe Convection Radiator.","name":"Kit (Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeValve":{"prefab":{"prefabName":"ItemPipeValve","prefabHash":799323450,"desc":"This kit creates a Valve.","name":"Kit (Pipe Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemPipeVolumePump":{"prefab":{"prefabName":"ItemPipeVolumePump","prefabHash":-1766301997,"desc":"This kit creates a Volume Pump.","name":"Kit (Volume Pump)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPlantEndothermic_Creative":{"prefab":{"prefabName":"ItemPlantEndothermic_Creative","prefabHash":-1159179557,"desc":"","name":"Endothermic Plant Creative"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantEndothermic_Genepool1":{"prefab":{"prefabName":"ItemPlantEndothermic_Genepool1","prefabHash":851290561,"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.","name":"Winterspawn (Alpha variant)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantEndothermic_Genepool2":{"prefab":{"prefabName":"ItemPlantEndothermic_Genepool2","prefabHash":-1414203269,"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.","name":"Winterspawn (Beta variant)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantSampler":{"prefab":{"prefabName":"ItemPlantSampler","prefabHash":173023800,"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.","name":"Plant Sampler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemPlantSwitchGrass":{"prefab":{"prefabName":"ItemPlantSwitchGrass","prefabHash":-532672323,"desc":"","name":"Switch Grass"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Default"}},"ItemPlantThermogenic_Creative":{"prefab":{"prefabName":"ItemPlantThermogenic_Creative","prefabHash":-1208890208,"desc":"","name":"Thermogenic Plant Creative"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantThermogenic_Genepool1":{"prefab":{"prefabName":"ItemPlantThermogenic_Genepool1","prefabHash":-177792789,"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.","name":"Hades Flower (Alpha strain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantThermogenic_Genepool2":{"prefab":{"prefabName":"ItemPlantThermogenic_Genepool2","prefabHash":1819167057,"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.","name":"Hades Flower (Beta strain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlasticSheets":{"prefab":{"prefabName":"ItemPlasticSheets","prefabHash":662053345,"desc":"","name":"Plastic Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemPotato":{"prefab":{"prefabName":"ItemPotato","prefabHash":1929046963,"desc":" Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies.","name":"Potato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Potato":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemPotatoBaked":{"prefab":{"prefabName":"ItemPotatoBaked","prefabHash":-2111886401,"desc":"","name":"Baked Potato"},"item":{"consumable":true,"ingredient":true,"maxQuantity":1.0,"reagents":{"Potato":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemPowerConnector":{"prefab":{"prefabName":"ItemPowerConnector","prefabHash":839924019,"desc":"This kit creates a Power Connector.","name":"Kit (Power Connector)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPumpkin":{"prefab":{"prefabName":"ItemPumpkin","prefabHash":1277828144,"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.","name":"Pumpkin"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Pumpkin":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemPumpkinPie":{"prefab":{"prefabName":"ItemPumpkinPie","prefabHash":62768076,"desc":"","name":"Pumpkin Pie"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemPumpkinSoup":{"prefab":{"prefabName":"ItemPumpkinSoup","prefabHash":1277979876,"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","name":"Pumpkin Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemPureIce":{"prefab":{"prefabName":"ItemPureIce","prefabHash":-1616308158,"desc":"A frozen chunk of pure Water","name":"Pure Ice Water"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceCarbonDioxide":{"prefab":{"prefabName":"ItemPureIceCarbonDioxide","prefabHash":-1251009404,"desc":"A frozen chunk of pure Carbon Dioxide","name":"Pure Ice Carbon Dioxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceHydrogen":{"prefab":{"prefabName":"ItemPureIceHydrogen","prefabHash":944530361,"desc":"A frozen chunk of pure Hydrogen","name":"Pure Ice Hydrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidCarbonDioxide":{"prefab":{"prefabName":"ItemPureIceLiquidCarbonDioxide","prefabHash":-1715945725,"desc":"A frozen chunk of pure Liquid Carbon Dioxide","name":"Pure Ice Liquid Carbon Dioxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidHydrogen":{"prefab":{"prefabName":"ItemPureIceLiquidHydrogen","prefabHash":-1044933269,"desc":"A frozen chunk of pure Liquid Hydrogen","name":"Pure Ice Liquid Hydrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidNitrogen":{"prefab":{"prefabName":"ItemPureIceLiquidNitrogen","prefabHash":1674576569,"desc":"A frozen chunk of pure Liquid Nitrogen","name":"Pure Ice Liquid Nitrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidNitrous":{"prefab":{"prefabName":"ItemPureIceLiquidNitrous","prefabHash":1428477399,"desc":"A frozen chunk of pure Liquid Nitrous Oxide","name":"Pure Ice Liquid Nitrous"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidOxygen":{"prefab":{"prefabName":"ItemPureIceLiquidOxygen","prefabHash":541621589,"desc":"A frozen chunk of pure Liquid Oxygen","name":"Pure Ice Liquid Oxygen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidPollutant":{"prefab":{"prefabName":"ItemPureIceLiquidPollutant","prefabHash":-1748926678,"desc":"A frozen chunk of pure Liquid Pollutant","name":"Pure Ice Liquid Pollutant"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidVolatiles":{"prefab":{"prefabName":"ItemPureIceLiquidVolatiles","prefabHash":-1306628937,"desc":"A frozen chunk of pure Liquid Volatiles","name":"Pure Ice Liquid Volatiles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceNitrogen":{"prefab":{"prefabName":"ItemPureIceNitrogen","prefabHash":-1708395413,"desc":"A frozen chunk of pure Nitrogen","name":"Pure Ice Nitrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceNitrous":{"prefab":{"prefabName":"ItemPureIceNitrous","prefabHash":386754635,"desc":"A frozen chunk of pure Nitrous Oxide","name":"Pure Ice NitrousOxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceOxygen":{"prefab":{"prefabName":"ItemPureIceOxygen","prefabHash":-1150448260,"desc":"A frozen chunk of pure Oxygen","name":"Pure Ice Oxygen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIcePollutant":{"prefab":{"prefabName":"ItemPureIcePollutant","prefabHash":-1755356,"desc":"A frozen chunk of pure Pollutant","name":"Pure Ice Pollutant"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIcePollutedWater":{"prefab":{"prefabName":"ItemPureIcePollutedWater","prefabHash":-2073202179,"desc":"A frozen chunk of Polluted Water","name":"Pure Ice Polluted Water"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceSteam":{"prefab":{"prefabName":"ItemPureIceSteam","prefabHash":-874791066,"desc":"A frozen chunk of pure Steam","name":"Pure Ice Steam"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceVolatiles":{"prefab":{"prefabName":"ItemPureIceVolatiles","prefabHash":-633723719,"desc":"A frozen chunk of pure Volatiles","name":"Pure Ice Volatiles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemRTG":{"prefab":{"prefabName":"ItemRTG","prefabHash":495305053,"desc":"This kit creates that miracle of modern science, a Kit (Creative RTG).","name":"Kit (Creative RTG)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemRTGSurvival":{"prefab":{"prefabName":"ItemRTGSurvival","prefabHash":1817645803,"desc":"This kit creates a Kit (RTG).","name":"Kit (RTG)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemReagentMix":{"prefab":{"prefabName":"ItemReagentMix","prefabHash":-1641500434,"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.","name":"Reagent Mix"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ores"}},"ItemRemoteDetonator":{"prefab":{"prefabName":"ItemRemoteDetonator","prefabHash":678483886,"desc":"","name":"Remote Detonator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemResearchCapsule":{"prefab":{"prefabName":"ItemResearchCapsule","prefabHash":819096942,"desc":"","name":"Research Capsule Blue"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemResearchCapsuleGreen":{"prefab":{"prefabName":"ItemResearchCapsuleGreen","prefabHash":-1352732550,"desc":"","name":"Research Capsule Green"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemResearchCapsuleRed":{"prefab":{"prefabName":"ItemResearchCapsuleRed","prefabHash":954947943,"desc":"","name":"Research Capsule Red"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemResearchCapsuleYellow":{"prefab":{"prefabName":"ItemResearchCapsuleYellow","prefabHash":750952701,"desc":"","name":"Research Capsule Yellow"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemReusableFireExtinguisher":{"prefab":{"prefabName":"ItemReusableFireExtinguisher","prefabHash":-1773192190,"desc":"Requires a canister filled with any inert liquid to opperate.","name":"Fire Extinguisher (Reusable)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"ItemRice":{"prefab":{"prefabName":"ItemRice","prefabHash":658916791,"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.","name":"Rice"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Rice":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemRoadFlare":{"prefab":{"prefabName":"ItemRoadFlare","prefabHash":871811564,"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.","name":"Road Flare"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"Flare","sortingClass":"Default"}},"ItemRocketMiningDrillHead":{"prefab":{"prefabName":"ItemRocketMiningDrillHead","prefabHash":2109945337,"desc":"Replaceable drill head for Rocket Miner","name":"Mining-Drill Head (Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadDurable":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadDurable","prefabHash":1530764483,"desc":"","name":"Mining-Drill Head (Durable)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadHighSpeedIce":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadHighSpeedIce","prefabHash":653461728,"desc":"","name":"Mining-Drill Head (High Speed Ice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadHighSpeedMineral":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadHighSpeedMineral","prefabHash":1440678625,"desc":"","name":"Mining-Drill Head (High Speed Mineral)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadIce":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadIce","prefabHash":-380904592,"desc":"","name":"Mining-Drill Head (Ice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadLongTerm":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadLongTerm","prefabHash":-684020753,"desc":"","name":"Mining-Drill Head (Long Term)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadMineral":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadMineral","prefabHash":1083675581,"desc":"","name":"Mining-Drill Head (Mineral)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketScanningHead":{"prefab":{"prefabName":"ItemRocketScanningHead","prefabHash":-1198702771,"desc":"","name":"Rocket Scanner Head"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"ScanningHead","sortingClass":"Default"}},"ItemScanner":{"prefab":{"prefabName":"ItemScanner","prefabHash":1661270830,"desc":"A mysterious piece of technology, rumored to have Zrillian origins.","name":"Handheld Scanner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemScrewdriver":{"prefab":{"prefabName":"ItemScrewdriver","prefabHash":687940869,"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.","name":"Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemSecurityCamera":{"prefab":{"prefabName":"ItemSecurityCamera","prefabHash":-1981101032,"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.","name":"Security Camera"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemSensorLenses":{"prefab":{"prefabName":"ItemSensorLenses","prefabHash":-1176140051,"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.","name":"Sensor Lenses"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Glasses","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Sensor Processing Unit","typ":"SensorProcessingUnit"}]},"ItemSensorProcessingUnitCelestialScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitCelestialScanner","prefabHash":-1154200014,"desc":"","name":"Sensor Processing Unit (Celestial Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSensorProcessingUnitMesonScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitMesonScanner","prefabHash":-1730464583,"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.","name":"Sensor Processing Unit (T-Ray Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSensorProcessingUnitOreScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitOreScanner","prefabHash":-1219128491,"desc":"The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD.","name":"Sensor Processing Unit (Ore Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSiliconIngot":{"prefab":{"prefabName":"ItemSiliconIngot","prefabHash":-290196476,"desc":"","name":"Ingot (Silicon)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Silicon":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSiliconOre":{"prefab":{"prefabName":"ItemSiliconOre","prefabHash":1103972403,"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.","name":"Ore (Silicon)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Silicon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemSilverIngot":{"prefab":{"prefabName":"ItemSilverIngot","prefabHash":-929742000,"desc":"","name":"Ingot (Silver)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Silver":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSilverOre":{"prefab":{"prefabName":"ItemSilverOre","prefabHash":-916518678,"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.","name":"Ore (Silver)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Silver":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemSolderIngot":{"prefab":{"prefabName":"ItemSolderIngot","prefabHash":-82508479,"desc":"","name":"Ingot (Solder)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Solder":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSolidFuel":{"prefab":{"prefabName":"ItemSolidFuel","prefabHash":-365253871,"desc":"","name":"Solid Fuel (Hydrocarbon)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Hydrocarbon":1.0},"slotClass":"Ore","sortingClass":"Resources"}},"ItemSoundCartridgeBass":{"prefab":{"prefabName":"ItemSoundCartridgeBass","prefabHash":-1883441704,"desc":"","name":"Sound Cartridge Bass"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeDrums":{"prefab":{"prefabName":"ItemSoundCartridgeDrums","prefabHash":-1901500508,"desc":"","name":"Sound Cartridge Drums"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeLeads":{"prefab":{"prefabName":"ItemSoundCartridgeLeads","prefabHash":-1174735962,"desc":"","name":"Sound Cartridge Leads"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeSynth":{"prefab":{"prefabName":"ItemSoundCartridgeSynth","prefabHash":-1971419310,"desc":"","name":"Sound Cartridge Synth"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoyOil":{"prefab":{"prefabName":"ItemSoyOil","prefabHash":1387403148,"desc":"","name":"Soy Oil"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"Oil":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemSoybean":{"prefab":{"prefabName":"ItemSoybean","prefabHash":1924673028,"desc":" Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil","name":"Soybean"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100.0,"reagents":{"Soy":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemSpaceCleaner":{"prefab":{"prefabName":"ItemSpaceCleaner","prefabHash":-1737666461,"desc":"There was a time when humanity really wanted to keep space clean. That time has passed.","name":"Space Cleaner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemSpaceHelmet":{"prefab":{"prefabName":"ItemSpaceHelmet","prefabHash":714830451,"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.","name":"Space Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemSpaceIce":{"prefab":{"prefabName":"ItemSpaceIce","prefabHash":675686937,"desc":"","name":"Space Ice"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Ore","sortingClass":"Ores"}},"ItemSpaceOre":{"prefab":{"prefabName":"ItemSpaceOre","prefabHash":2131916219,"desc":"Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores.","name":"Dirty Ore"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Ore","sortingClass":"Ores"}},"ItemSpacepack":{"prefab":{"prefabName":"ItemSpacepack","prefabHash":-1260618380,"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.","name":"Spacepack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemSprayCanBlack":{"prefab":{"prefabName":"ItemSprayCanBlack","prefabHash":-688107795,"desc":"Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses.","name":"Spray Paint (Black)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanBlue":{"prefab":{"prefabName":"ItemSprayCanBlue","prefabHash":-498464883,"desc":"What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'","name":"Spray Paint (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanBrown":{"prefab":{"prefabName":"ItemSprayCanBrown","prefabHash":845176977,"desc":"In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed.","name":"Spray Paint (Brown)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanGreen":{"prefab":{"prefabName":"ItemSprayCanGreen","prefabHash":-1880941852,"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.","name":"Spray Paint (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanGrey":{"prefab":{"prefabName":"ItemSprayCanGrey","prefabHash":-1645266981,"desc":"Arguably the most popular color in the universe, grey was invented so designers had something to do.","name":"Spray Paint (Grey)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanKhaki":{"prefab":{"prefabName":"ItemSprayCanKhaki","prefabHash":1918456047,"desc":"Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode.","name":"Spray Paint (Khaki)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanOrange":{"prefab":{"prefabName":"ItemSprayCanOrange","prefabHash":-158007629,"desc":"Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove.","name":"Spray Paint (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanPink":{"prefab":{"prefabName":"ItemSprayCanPink","prefabHash":1344257263,"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.","name":"Spray Paint (Pink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanPurple":{"prefab":{"prefabName":"ItemSprayCanPurple","prefabHash":30686509,"desc":"Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong.","name":"Spray Paint (Purple)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanRed":{"prefab":{"prefabName":"ItemSprayCanRed","prefabHash":1514393921,"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.","name":"Spray Paint (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanWhite":{"prefab":{"prefabName":"ItemSprayCanWhite","prefabHash":498481505,"desc":"White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff.","name":"Spray Paint (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanYellow":{"prefab":{"prefabName":"ItemSprayCanYellow","prefabHash":995468116,"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.","name":"Spray Paint (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayGun":{"prefab":{"prefabName":"ItemSprayGun","prefabHash":1289723966,"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.","name":"Spray Gun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Spray Can","typ":"Bottle"}]},"ItemSteelFrames":{"prefab":{"prefabName":"ItemSteelFrames","prefabHash":-1448105779,"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.","name":"Steel Frames"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemSteelIngot":{"prefab":{"prefabName":"ItemSteelIngot","prefabHash":-654790771,"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.","name":"Ingot (Steel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Steel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSteelSheets":{"prefab":{"prefabName":"ItemSteelSheets","prefabHash":38555961,"desc":"An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types.","name":"Steel Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemStelliteGlassSheets":{"prefab":{"prefabName":"ItemStelliteGlassSheets","prefabHash":-2038663432,"desc":"A stronger glass substitute.","name":"Stellite Glass Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemStelliteIngot":{"prefab":{"prefabName":"ItemStelliteIngot","prefabHash":-1897868623,"desc":"","name":"Ingot (Stellite)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Stellite":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSuitModCryogenicUpgrade":{"prefab":{"prefabName":"ItemSuitModCryogenicUpgrade","prefabHash":-1274308304,"desc":"Enables suits with basic cooling functionality to work with cryogenic liquid.","name":"Cryogenic Suit Upgrade"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SuitMod","sortingClass":"Default"}},"ItemTablet":{"prefab":{"prefabName":"ItemTablet","prefabHash":-229808600,"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.","name":"Handheld Tablet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"}]},"ItemTerrainManipulator":{"prefab":{"prefabName":"ItemTerrainManipulator","prefabHash":111280987,"desc":"0.Mode0\n1.Mode1","name":"Terrain Manipulator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Dirt Canister","typ":"Ore"}]},"ItemTomato":{"prefab":{"prefabName":"ItemTomato","prefabHash":-998592080,"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.","name":"Tomato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Tomato":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemTomatoSoup":{"prefab":{"prefabName":"ItemTomatoSoup","prefabHash":688734890,"desc":"Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine.","name":"Tomato Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemToolBelt":{"prefab":{"prefabName":"ItemToolBelt","prefabHash":-355127880,"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.","name":"Tool Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemTropicalPlant":{"prefab":{"prefabName":"ItemTropicalPlant","prefabHash":-800947386,"desc":"An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants.","name":"Tropical Lily"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemUraniumOre":{"prefab":{"prefabName":"ItemUraniumOre","prefabHash":-1516581844,"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.","name":"Ore (Uranium)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Uranium":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemVolatiles":{"prefab":{"prefabName":"ItemVolatiles","prefabHash":1253102035,"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","name":"Ice (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemWallCooler":{"prefab":{"prefabName":"ItemWallCooler","prefabHash":-1567752627,"desc":"This kit creates a Wall Cooler.","name":"Kit (Wall Cooler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWallHeater":{"prefab":{"prefabName":"ItemWallHeater","prefabHash":1880134612,"desc":"This kit creates a Kit (Wall Heater).","name":"Kit (Wall Heater)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWallLight":{"prefab":{"prefabName":"ItemWallLight","prefabHash":1108423476,"desc":"This kit creates any one of ten Kit (Lights) variants.","name":"Kit (Lights)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWaspaloyIngot":{"prefab":{"prefabName":"ItemWaspaloyIngot","prefabHash":156348098,"desc":"","name":"Ingot (Waspaloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Waspaloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemWaterBottle":{"prefab":{"prefabName":"ItemWaterBottle","prefabHash":107741229,"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.","name":"Water Bottle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.5,"slotClass":"LiquidBottle","sortingClass":"Default"}},"ItemWaterPipeDigitalValve":{"prefab":{"prefabName":"ItemWaterPipeDigitalValve","prefabHash":309693520,"desc":"","name":"Kit (Liquid Digital Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWaterPipeMeter":{"prefab":{"prefabName":"ItemWaterPipeMeter","prefabHash":-90898877,"desc":"","name":"Kit (Liquid Pipe Meter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWaterWallCooler":{"prefab":{"prefabName":"ItemWaterWallCooler","prefabHash":-1721846327,"desc":"","name":"Kit (Liquid Wall Cooler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWearLamp":{"prefab":{"prefabName":"ItemWearLamp","prefabHash":-598730959,"desc":"","name":"Headlamp"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemWeldingTorch":{"prefab":{"prefabName":"ItemWeldingTorch","prefabHash":-2066892079,"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.","name":"Welding Torch"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemWheat":{"prefab":{"prefabName":"ItemWheat","prefabHash":-1057658015,"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.","name":"Wheat"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100.0,"reagents":{"Carbon":1.0},"slotClass":"Plant","sortingClass":"Default"}},"ItemWireCutters":{"prefab":{"prefabName":"ItemWireCutters","prefabHash":1535854074,"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.","name":"Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemWirelessBatteryCellExtraLarge":{"prefab":{"prefabName":"ItemWirelessBatteryCellExtraLarge","prefabHash":-504717121,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Wireless Battery Cell Extra Large"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemWreckageAirConditioner1":{"prefab":{"prefabName":"ItemWreckageAirConditioner1","prefabHash":-1826023284,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageAirConditioner2":{"prefab":{"prefabName":"ItemWreckageAirConditioner2","prefabHash":169888054,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageHydroponicsTray1":{"prefab":{"prefabName":"ItemWreckageHydroponicsTray1","prefabHash":-310178617,"desc":"","name":"Wreckage Hydroponics Tray"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageLargeExtendableRadiator01":{"prefab":{"prefabName":"ItemWreckageLargeExtendableRadiator01","prefabHash":-997763,"desc":"","name":"Wreckage Large Extendable Radiator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureRTG1":{"prefab":{"prefabName":"ItemWreckageStructureRTG1","prefabHash":391453348,"desc":"","name":"Wreckage Structure RTG"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation001":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation001","prefabHash":-834664349,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation002":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation002","prefabHash":1464424921,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation003":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation003","prefabHash":542009679,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation004":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation004","prefabHash":-1104478996,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation005":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation005","prefabHash":-919745414,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation006":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation006","prefabHash":1344576960,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation007":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation007","prefabHash":656649558,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation008":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation008","prefabHash":-1214467897,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator1":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator1","prefabHash":-1662394403,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator2":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator2","prefabHash":98602599,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator3":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator3","prefabHash":1927790321,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageWallCooler1":{"prefab":{"prefabName":"ItemWreckageWallCooler1","prefabHash":-1682930158,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageWallCooler2":{"prefab":{"prefabName":"ItemWreckageWallCooler2","prefabHash":45733800,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWrench":{"prefab":{"prefabName":"ItemWrench","prefabHash":-1886261558,"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","name":"Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"KitSDBSilo":{"prefab":{"prefabName":"KitSDBSilo","prefabHash":1932952652,"desc":"This kit creates a SDB Silo.","name":"Kit (SDB Silo)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"KitStructureCombustionCentrifuge":{"prefab":{"prefabName":"KitStructureCombustionCentrifuge","prefabHash":231903234,"desc":"","name":"Kit (Combustion Centrifuge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"KitchenTableShort":{"prefab":{"prefabName":"KitchenTableShort","prefabHash":-1427415566,"desc":"","name":"Kitchen Table (Short)"},"structure":{"smallGrid":true}},"KitchenTableSimpleShort":{"prefab":{"prefabName":"KitchenTableSimpleShort","prefabHash":-78099334,"desc":"","name":"Kitchen Table (Simple Short)"},"structure":{"smallGrid":true}},"KitchenTableSimpleTall":{"prefab":{"prefabName":"KitchenTableSimpleTall","prefabHash":-1068629349,"desc":"","name":"Kitchen Table (Simple Tall)"},"structure":{"smallGrid":true}},"KitchenTableTall":{"prefab":{"prefabName":"KitchenTableTall","prefabHash":-1386237782,"desc":"","name":"Kitchen Table (Tall)"},"structure":{"smallGrid":true}},"Lander":{"prefab":{"prefabName":"Lander","prefabHash":1605130615,"desc":"","name":"Lander"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"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"}]},"Landingpad_2x2CenterPiece01":{"prefab":{"prefabName":"Landingpad_2x2CenterPiece01","prefabHash":-1295222317,"desc":"Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors","name":"Landingpad 2x2 Center Piece"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Landingpad_BlankPiece":{"prefab":{"prefabName":"Landingpad_BlankPiece","prefabHash":912453390,"desc":"","name":"Landingpad"},"structure":{"smallGrid":true}},"Landingpad_CenterPiece01":{"prefab":{"prefabName":"Landingpad_CenterPiece01","prefabHash":1070143159,"desc":"The target point where the trader shuttle will land. Requires a clear view of the sky.","name":"Landingpad Center"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"modes":{"0":"None","1":"NoContact","2":"Moving","3":"Holding","4":"Landed"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Landingpad_CrossPiece":{"prefab":{"prefabName":"Landingpad_CrossPiece","prefabHash":1101296153,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Cross"},"structure":{"smallGrid":true}},"Landingpad_DataConnectionPiece":{"prefab":{"prefabName":"Landingpad_DataConnectionPiece","prefabHash":-2066405918,"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.","name":"Landingpad Data And Power"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"],["LandingPad","Input"],["LandingPad","Input"],["LandingPad","Input"]],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_DiagonalPiece01":{"prefab":{"prefabName":"Landingpad_DiagonalPiece01","prefabHash":977899131,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Diagonal"},"structure":{"smallGrid":true}},"Landingpad_GasConnectorInwardPiece":{"prefab":{"prefabName":"Landingpad_GasConnectorInwardPiece","prefabHash":817945707,"desc":"","name":"Landingpad Gas Input"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["LandingPad","Input"],["LandingPad","Input"],["LandingPad","Input"],["Data","None"],["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_GasConnectorOutwardPiece":{"prefab":{"prefabName":"Landingpad_GasConnectorOutwardPiece","prefabHash":-1100218307,"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.","name":"Landingpad Gas Output"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["LandingPad","Input"],["LandingPad","Input"],["LandingPad","Input"],["Data","None"],["Pipe","Output"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_GasCylinderTankPiece":{"prefab":{"prefabName":"Landingpad_GasCylinderTankPiece","prefabHash":170818567,"desc":"Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders.","name":"Landingpad Gas Storage"},"structure":{"smallGrid":true}},"Landingpad_LiquidConnectorInwardPiece":{"prefab":{"prefabName":"Landingpad_LiquidConnectorInwardPiece","prefabHash":-1216167727,"desc":"","name":"Landingpad Liquid Input"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["LandingPad","Input"],["LandingPad","Input"],["LandingPad","Input"],["Data","None"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_LiquidConnectorOutwardPiece":{"prefab":{"prefabName":"Landingpad_LiquidConnectorOutwardPiece","prefabHash":-1788929869,"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.","name":"Landingpad Liquid Output"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["LandingPad","Input"],["LandingPad","Input"],["LandingPad","Input"],["Data","None"],["PipeLiquid","Output"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_StraightPiece01":{"prefab":{"prefabName":"Landingpad_StraightPiece01","prefabHash":-976273247,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Straight"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceCorner":{"prefab":{"prefabName":"Landingpad_TaxiPieceCorner","prefabHash":-1872345847,"desc":"","name":"Landingpad Taxi Corner"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceHold":{"prefab":{"prefabName":"Landingpad_TaxiPieceHold","prefabHash":146051619,"desc":"","name":"Landingpad Taxi Hold"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceStraight":{"prefab":{"prefabName":"Landingpad_TaxiPieceStraight","prefabHash":-1477941080,"desc":"","name":"Landingpad Taxi Straight"},"structure":{"smallGrid":true}},"Landingpad_ThreshholdPiece":{"prefab":{"prefabName":"Landingpad_ThreshholdPiece","prefabHash":-1514298582,"desc":"","name":"Landingpad Threshhold"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["LandingPad","Input"],["LandingPad","Input"],["LandingPad","Input"],["Data","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"LogicStepSequencer8":{"prefab":{"prefabName":"LogicStepSequencer8","prefabHash":1531272458,"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.","name":"Logic Step Sequencer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Sound Cartridge","typ":"SoundCartridge"}],"device":{"connectionList":[["Data","Input"],["Data","Input"],["Power","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Meteorite":{"prefab":{"prefabName":"Meteorite","prefabHash":-99064335,"desc":"","name":"Meteorite"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"MonsterEgg":{"prefab":{"prefabName":"MonsterEgg","prefabHash":-1667675295,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"MotherboardComms":{"prefab":{"prefabName":"MotherboardComms","prefabHash":-337075633,"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.","name":"Communications Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardLogic":{"prefab":{"prefabName":"MotherboardLogic","prefabHash":502555944,"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.","name":"Logic Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardMissionControl":{"prefab":{"prefabName":"MotherboardMissionControl","prefabHash":-127121474,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardProgrammableChip":{"prefab":{"prefabName":"MotherboardProgrammableChip","prefabHash":-161107071,"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.","name":"IC Editor Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardRockets":{"prefab":{"prefabName":"MotherboardRockets","prefabHash":-806986392,"desc":"","name":"Rocket Control Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardSorter":{"prefab":{"prefabName":"MotherboardSorter","prefabHash":-1908268220,"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.","name":"Sorter Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MothershipCore":{"prefab":{"prefabName":"MothershipCore","prefabHash":-1930442922,"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.","name":"Mothership Core"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"NpcChick":{"prefab":{"prefabName":"NpcChick","prefabHash":155856647,"desc":"","name":"Chick"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"NpcChicken":{"prefab":{"prefabName":"NpcChicken","prefabHash":399074198,"desc":"","name":"Chicken"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"PassiveSpeaker":{"prefab":{"prefabName":"PassiveSpeaker","prefabHash":248893646,"desc":"","name":"Passive Speaker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"ReadWrite","ReferenceId":"ReadWrite","SoundAlert":"ReadWrite","Volume":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"PipeBenderMod":{"prefab":{"prefabName":"PipeBenderMod","prefabHash":443947415,"desc":"Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Pipe Bender Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"PortableComposter":{"prefab":{"prefabName":"PortableComposter","prefabHash":-1958705204,"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","name":"Portable Composter"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"Battery"},{"name":"Liquid Canister","typ":"LiquidCanister"}]},"PortableSolarPanel":{"prefab":{"prefabName":"PortableSolarPanel","prefabHash":2043318949,"desc":"","name":"Portable Solar Panel"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Open":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"RailingElegant01":{"prefab":{"prefabName":"RailingElegant01","prefabHash":399661231,"desc":"","name":"Railing Elegant (Type 1)"},"structure":{"smallGrid":false}},"RailingElegant02":{"prefab":{"prefabName":"RailingElegant02","prefabHash":-1898247915,"desc":"","name":"Railing Elegant (Type 2)"},"structure":{"smallGrid":false}},"RailingIndustrial02":{"prefab":{"prefabName":"RailingIndustrial02","prefabHash":-2072792175,"desc":"","name":"Railing Industrial (Type 2)"},"structure":{"smallGrid":false}},"ReagentColorBlue":{"prefab":{"prefabName":"ReagentColorBlue","prefabHash":980054869,"desc":"","name":"Color Dye (Blue)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorBlue":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorGreen":{"prefab":{"prefabName":"ReagentColorGreen","prefabHash":120807542,"desc":"","name":"Color Dye (Green)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorGreen":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorOrange":{"prefab":{"prefabName":"ReagentColorOrange","prefabHash":-400696159,"desc":"","name":"Color Dye (Orange)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorOrange":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorRed":{"prefab":{"prefabName":"ReagentColorRed","prefabHash":1998377961,"desc":"","name":"Color Dye (Red)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorRed":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorYellow":{"prefab":{"prefabName":"ReagentColorYellow","prefabHash":635208006,"desc":"","name":"Color Dye (Yellow)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorYellow":10.0},"slotClass":"None","sortingClass":"Resources"}},"RespawnPoint":{"prefab":{"prefabName":"RespawnPoint","prefabHash":-788672929,"desc":"Place a respawn point to set a player entry point to your base when loading in, or returning from the dead.","name":"Respawn Point"},"structure":{"smallGrid":true}},"RespawnPointWallMounted":{"prefab":{"prefabName":"RespawnPointWallMounted","prefabHash":-491247370,"desc":"","name":"Respawn Point (Mounted)"},"structure":{"smallGrid":true}},"Robot":{"prefab":{"prefabName":"Robot","prefabHash":434786784,"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","name":"AIMeE Bot"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"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"}]},"RoverCargo":{"prefab":{"prefabName":"RoverCargo","prefabHash":350726273,"desc":"Connects to Logic Transmitter","name":"Rover (Cargo)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"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":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI":{"prefab":{"prefabName":"Rover_MkI","prefabHash":-2049946335,"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","name":"Rover MkI"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"},"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"},"10":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"slots":[{"name":"Entity","typ":"Entity"},{"name":"Entity","typ":"Entity"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI_build_states":{"prefab":{"prefabName":"Rover_MkI_build_states","prefabHash":861674123,"desc":"","name":"Rover MKI"},"structure":{"smallGrid":false}},"SMGMagazine":{"prefab":{"prefabName":"SMGMagazine","prefabHash":-256607540,"desc":"","name":"SMG Magazine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Magazine","sortingClass":"Default"}},"SeedBag_Corn":{"prefab":{"prefabName":"SeedBag_Corn","prefabHash":-1290755415,"desc":"Grow a Corn.","name":"Corn Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Fern":{"prefab":{"prefabName":"SeedBag_Fern","prefabHash":-1990600883,"desc":"Grow a Fern.","name":"Fern Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Mushroom":{"prefab":{"prefabName":"SeedBag_Mushroom","prefabHash":311593418,"desc":"Grow a Mushroom.","name":"Mushroom Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Potato":{"prefab":{"prefabName":"SeedBag_Potato","prefabHash":1005571172,"desc":"Grow a Potato.","name":"Potato Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Pumpkin":{"prefab":{"prefabName":"SeedBag_Pumpkin","prefabHash":1423199840,"desc":"Grow a Pumpkin.","name":"Pumpkin Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Rice":{"prefab":{"prefabName":"SeedBag_Rice","prefabHash":-1691151239,"desc":"Grow some Rice.","name":"Rice Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Soybean":{"prefab":{"prefabName":"SeedBag_Soybean","prefabHash":1783004244,"desc":"Grow some Soybean.","name":"Soybean Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Switchgrass":{"prefab":{"prefabName":"SeedBag_Switchgrass","prefabHash":488360169,"desc":"","name":"Switchgrass Seed"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Tomato":{"prefab":{"prefabName":"SeedBag_Tomato","prefabHash":-1922066841,"desc":"Grow a Tomato.","name":"Tomato Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Wheet":{"prefab":{"prefabName":"SeedBag_Wheet","prefabHash":-654756733,"desc":"Grow some Wheat.","name":"Wheat Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SpaceShuttle":{"prefab":{"prefabName":"SpaceShuttle","prefabHash":-1991297271,"desc":"An antiquated Sinotai transport craft, long since decommissioned.","name":"Space Shuttle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Captain's Seat","typ":"Entity"},{"name":"Passenger Seat Left","typ":"Entity"},{"name":"Passenger Seat Right","typ":"Entity"}]},"StopWatch":{"prefab":{"prefabName":"StopWatch","prefabHash":-1527229051,"desc":"","name":"Stop Watch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Time":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Power","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureAccessBridge":{"prefab":{"prefabName":"StructureAccessBridge","prefabHash":1298920475,"desc":"Extendable bridge that spans three grids","name":"Access Bridge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureActiveVent":{"prefab":{"prefabName":"StructureActiveVent","prefabHash":-1129453144,"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 ...","name":"Active Vent"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[["PowerAndData","None"],["Pipe","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAdvancedComposter":{"prefab":{"prefabName":"StructureAdvancedComposter","prefabHash":446212963,"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","name":"Advanced Composter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Output"],["Data","None"],["PipeLiquid","Input"],["Power","None"],["Chute","Input"],["Chute","Output"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAdvancedFurnace":{"prefab":{"prefabName":"StructureAdvancedFurnace","prefabHash":545937711,"desc":"The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure.","name":"Advanced Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"],["Pipe","Input"],["Pipe","Output"],["PipeLiquid","Output2"]],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureAdvancedPackagingMachine":{"prefab":{"prefabName":"StructureAdvancedPackagingMachine","prefabHash":-463037670,"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.","name":"Advanced Packaging Machine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureAirConditioner":{"prefab":{"prefabName":"StructureAirConditioner","prefabHash":-2087593337,"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.","name":"Air Conditioner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Pipe","Output"],["Pipe","Waste"],["Power","None"]],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAirlock":{"prefab":{"prefabName":"StructureAirlock","prefabHash":-2105052344,"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.","name":"Airlock"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAirlockGate":{"prefab":{"prefabName":"StructureAirlockGate","prefabHash":1736080881,"desc":"1 x 1 modular door piece for building hangar doors.","name":"Small Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAngledBench":{"prefab":{"prefabName":"StructureAngledBench","prefabHash":1811979158,"desc":"","name":"Bench (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureArcFurnace":{"prefab":{"prefabName":"StructureArcFurnace","prefabHash":-247344692,"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.","name":"Arc Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"},{"name":"Export","typ":"Ingot"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureAreaPowerControl":{"prefab":{"prefabName":"StructureAreaPowerControl","prefabHash":1999523701,"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.","name":"Area Power Control"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[["PowerAndData","Input"],["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAreaPowerControlReversed":{"prefab":{"prefabName":"StructureAreaPowerControlReversed","prefabHash":-1032513487,"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.","name":"Area Power Control"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[["PowerAndData","Input"],["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAutoMinerSmall":{"prefab":{"prefabName":"StructureAutoMinerSmall","prefabHash":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":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAutolathe":{"prefab":{"prefabName":"StructureAutolathe","prefabHash":336213101,"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 ","name":"Autolathe"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureAutomatedOven":{"prefab":{"prefabName":"StructureAutomatedOven","prefabHash":-1672404896,"desc":"","name":"Automated Oven"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureBackLiquidPressureRegulator":{"prefab":{"prefabName":"StructureBackLiquidPressureRegulator","prefabHash":2099900163,"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.","name":"Liquid Back Volume Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBackPressureRegulator":{"prefab":{"prefabName":"StructureBackPressureRegulator","prefabHash":-1149857558,"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.","name":"Back Pressure Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBasketHoop":{"prefab":{"prefabName":"StructureBasketHoop","prefabHash":-1613497288,"desc":"","name":"Basket Hoop"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBattery":{"prefab":{"prefabName":"StructureBattery","prefabHash":-400115994,"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).","name":"Station Battery"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","Input"],["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryCharger":{"prefab":{"prefabName":"StructureBatteryCharger","prefabHash":1945930022,"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.","name":"Battery Cell Charger"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryChargerSmall":{"prefab":{"prefabName":"StructureBatteryChargerSmall","prefabHash":-761772413,"desc":"","name":"Battery Charger Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryLarge":{"prefab":{"prefabName":"StructureBatteryLarge","prefabHash":-1388288459,"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). ","name":"Station Battery (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","Input"],["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryMedium":{"prefab":{"prefabName":"StructureBatteryMedium","prefabHash":-1125305264,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","Input"],["Power","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatterySmall":{"prefab":{"prefabName":"StructureBatterySmall","prefabHash":-2123455080,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Auxiliary Rocket Battery "},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","Input"],["Power","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBeacon":{"prefab":{"prefabName":"StructureBeacon","prefabHash":-188177083,"desc":"","name":"Beacon"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench":{"prefab":{"prefabName":"StructureBench","prefabHash":-2042448192,"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.","name":"Powered Bench"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench1":{"prefab":{"prefabName":"StructureBench1","prefabHash":406745009,"desc":"","name":"Bench (Counter Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench2":{"prefab":{"prefabName":"StructureBench2","prefabHash":-2127086069,"desc":"","name":"Bench (High Tech Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench3":{"prefab":{"prefabName":"StructureBench3","prefabHash":-164622691,"desc":"","name":"Bench (Frame Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench4":{"prefab":{"prefabName":"StructureBench4","prefabHash":1750375230,"desc":"","name":"Bench (Workbench Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBlastDoor":{"prefab":{"prefabName":"StructureBlastDoor","prefabHash":337416191,"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.","name":"Blast Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureBlockBed":{"prefab":{"prefabName":"StructureBlockBed","prefabHash":697908419,"desc":"Description coming.","name":"Block Bed"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBlocker":{"prefab":{"prefabName":"StructureBlocker","prefabHash":378084505,"desc":"","name":"Blocker"},"structure":{"smallGrid":false}},"StructureCableAnalysizer":{"prefab":{"prefabName":"StructureCableAnalysizer","prefabHash":1036015121,"desc":"","name":"Cable Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PowerActual":"Read","PowerPotential":"Read","PowerRequired":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableCorner":{"prefab":{"prefabName":"StructureCableCorner","prefabHash":-889269388,"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).","name":"Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3":{"prefab":{"prefabName":"StructureCableCorner3","prefabHash":980469101,"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).","name":"Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3Burnt":{"prefab":{"prefabName":"StructureCableCorner3Burnt","prefabHash":318437449,"desc":"","name":"Burnt Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3HBurnt":{"prefab":{"prefabName":"StructureCableCorner3HBurnt","prefabHash":2393826,"desc":"","name":""},"structure":{"smallGrid":true}},"StructureCableCorner4":{"prefab":{"prefabName":"StructureCableCorner4","prefabHash":-1542172466,"desc":"","name":"Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner4Burnt":{"prefab":{"prefabName":"StructureCableCorner4Burnt","prefabHash":268421361,"desc":"","name":"Burnt Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner4HBurnt":{"prefab":{"prefabName":"StructureCableCorner4HBurnt","prefabHash":-981223316,"desc":"","name":"Burnt Heavy Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerBurnt":{"prefab":{"prefabName":"StructureCableCornerBurnt","prefabHash":-177220914,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH":{"prefab":{"prefabName":"StructureCableCornerH","prefabHash":-39359015,"desc":"","name":"Heavy Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH3":{"prefab":{"prefabName":"StructureCableCornerH3","prefabHash":-1843379322,"desc":"","name":"Heavy Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH4":{"prefab":{"prefabName":"StructureCableCornerH4","prefabHash":205837861,"desc":"","name":"Heavy Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerHBurnt":{"prefab":{"prefabName":"StructureCableCornerHBurnt","prefabHash":1931412811,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableFuse100k":{"prefab":{"prefabName":"StructureCableFuse100k","prefabHash":281380789,"desc":"","name":"Fuse (100kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse1k":{"prefab":{"prefabName":"StructureCableFuse1k","prefabHash":-1103727120,"desc":"","name":"Fuse (1kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse50k":{"prefab":{"prefabName":"StructureCableFuse50k","prefabHash":-349716617,"desc":"","name":"Fuse (50kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse5k":{"prefab":{"prefabName":"StructureCableFuse5k","prefabHash":-631590668,"desc":"","name":"Fuse (5kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableJunction":{"prefab":{"prefabName":"StructureCableJunction","prefabHash":-175342021,"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).","name":"Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4":{"prefab":{"prefabName":"StructureCableJunction4","prefabHash":1112047202,"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).","name":"Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4Burnt":{"prefab":{"prefabName":"StructureCableJunction4Burnt","prefabHash":-1756896811,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4HBurnt":{"prefab":{"prefabName":"StructureCableJunction4HBurnt","prefabHash":-115809132,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction5":{"prefab":{"prefabName":"StructureCableJunction5","prefabHash":894390004,"desc":"","name":"Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction5Burnt":{"prefab":{"prefabName":"StructureCableJunction5Burnt","prefabHash":1545286256,"desc":"","name":"Burnt Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6":{"prefab":{"prefabName":"StructureCableJunction6","prefabHash":-1404690610,"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).","name":"Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6Burnt":{"prefab":{"prefabName":"StructureCableJunction6Burnt","prefabHash":-628145954,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6HBurnt":{"prefab":{"prefabName":"StructureCableJunction6HBurnt","prefabHash":1854404029,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionBurnt":{"prefab":{"prefabName":"StructureCableJunctionBurnt","prefabHash":-1620686196,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH":{"prefab":{"prefabName":"StructureCableJunctionH","prefabHash":469451637,"desc":"","name":"Heavy Cable (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH4":{"prefab":{"prefabName":"StructureCableJunctionH4","prefabHash":-742234680,"desc":"","name":"Heavy Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH5":{"prefab":{"prefabName":"StructureCableJunctionH5","prefabHash":-1530571426,"desc":"","name":"Heavy Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH5Burnt":{"prefab":{"prefabName":"StructureCableJunctionH5Burnt","prefabHash":1701593300,"desc":"","name":"Burnt Heavy Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH6":{"prefab":{"prefabName":"StructureCableJunctionH6","prefabHash":1036780772,"desc":"","name":"Heavy Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionHBurnt":{"prefab":{"prefabName":"StructureCableJunctionHBurnt","prefabHash":-341365649,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableStraight":{"prefab":{"prefabName":"StructureCableStraight","prefabHash":605357050,"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).","name":"Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightBurnt":{"prefab":{"prefabName":"StructureCableStraightBurnt","prefabHash":-1196981113,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightH":{"prefab":{"prefabName":"StructureCableStraightH","prefabHash":-146200530,"desc":"","name":"Heavy Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightHBurnt":{"prefab":{"prefabName":"StructureCableStraightHBurnt","prefabHash":2085762089,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCamera":{"prefab":{"prefabName":"StructureCamera","prefabHash":-342072665,"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.","name":"Camera"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureCapsuleTankGas":{"prefab":{"prefabName":"StructureCapsuleTankGas","prefabHash":-1385712131,"desc":"","name":"Gas Capsule Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCapsuleTankLiquid":{"prefab":{"prefabName":"StructureCapsuleTankLiquid","prefabHash":1415396263,"desc":"","name":"Liquid Capsule Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCargoStorageMedium":{"prefab":{"prefabName":"StructureCargoStorageMedium","prefabHash":1151864003,"desc":"","name":"Cargo Storage (Medium)"},"structure":{"smallGrid":true},"logic":{"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":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[["PowerAndData","None"],["Chute","Output"],["Chute","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCargoStorageSmall":{"prefab":{"prefabName":"StructureCargoStorageSmall","prefabHash":-1493672123,"desc":"","name":"Cargo Storage (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"},"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"},"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"},"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"},"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[["PowerAndData","None"],["Chute","Output"],["Chute","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCentrifuge":{"prefab":{"prefabName":"StructureCentrifuge","prefabHash":690945935,"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.","name":"Centrifuge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureChair":{"prefab":{"prefabName":"StructureChair","prefabHash":1167659360,"desc":"One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs.","name":"Chair"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBacklessDouble":{"prefab":{"prefabName":"StructureChairBacklessDouble","prefabHash":1944858936,"desc":"","name":"Chair (Backless Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBacklessSingle":{"prefab":{"prefabName":"StructureChairBacklessSingle","prefabHash":1672275150,"desc":"","name":"Chair (Backless Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBoothCornerLeft":{"prefab":{"prefabName":"StructureChairBoothCornerLeft","prefabHash":-367720198,"desc":"","name":"Chair (Booth Corner Left)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBoothMiddle":{"prefab":{"prefabName":"StructureChairBoothMiddle","prefabHash":1640720378,"desc":"","name":"Chair (Booth Middle)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairRectangleDouble":{"prefab":{"prefabName":"StructureChairRectangleDouble","prefabHash":-1152812099,"desc":"","name":"Chair (Rectangle Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairRectangleSingle":{"prefab":{"prefabName":"StructureChairRectangleSingle","prefabHash":-1425428917,"desc":"","name":"Chair (Rectangle Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairThickDouble":{"prefab":{"prefabName":"StructureChairThickDouble","prefabHash":-1245724402,"desc":"","name":"Chair (Thick Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairThickSingle":{"prefab":{"prefabName":"StructureChairThickSingle","prefabHash":-1510009608,"desc":"","name":"Chair (Thick Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteBin":{"prefab":{"prefabName":"StructureChuteBin","prefabHash":-850484480,"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.","name":"Chute Bin"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Input","typ":"None"}],"device":{"connectionList":[["Chute","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteCorner":{"prefab":{"prefabName":"StructureChuteCorner","prefabHash":1360330136,"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.","name":"Chute (Corner)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteDigitalFlipFlopSplitterLeft":{"prefab":{"prefabName":"StructureChuteDigitalFlipFlopSplitterLeft","prefabHash":-810874728,"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.","name":"Chute Digital Flip Flop Splitter Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingOutput":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Chute","Output2"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureChuteDigitalFlipFlopSplitterRight":{"prefab":{"prefabName":"StructureChuteDigitalFlipFlopSplitterRight","prefabHash":163728359,"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.","name":"Chute Digital Flip Flop Splitter Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingOutput":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Chute","Output2"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureChuteDigitalValveLeft":{"prefab":{"prefabName":"StructureChuteDigitalValveLeft","prefabHash":648608238,"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.","name":"Chute Digital Valve Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteDigitalValveRight":{"prefab":{"prefabName":"StructureChuteDigitalValveRight","prefabHash":-1337091041,"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.","name":"Chute Digital Valve Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteFlipFlopSplitter":{"prefab":{"prefabName":"StructureChuteFlipFlopSplitter","prefabHash":-1446854725,"desc":"A chute that toggles between two outputs","name":"Chute Flip Flop Splitter"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteInlet":{"prefab":{"prefabName":"StructureChuteInlet","prefabHash":-1469588766,"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.","name":"Chute Inlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[["Chute","Output"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteJunction":{"prefab":{"prefabName":"StructureChuteJunction","prefabHash":-611232514,"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.","name":"Chute (Junction)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteOutlet":{"prefab":{"prefabName":"StructureChuteOutlet","prefabHash":-1022714809,"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.","name":"Chute Outlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteOverflow":{"prefab":{"prefabName":"StructureChuteOverflow","prefabHash":225377225,"desc":"The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied.","name":"Chute Overflow"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteStraight":{"prefab":{"prefabName":"StructureChuteStraight","prefabHash":168307007,"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.","name":"Chute (Straight)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteUmbilicalFemale":{"prefab":{"prefabName":"StructureChuteUmbilicalFemale","prefabHash":-1918892177,"desc":"","name":"Umbilical Socket (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[["Chute","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureChuteUmbilicalFemaleSide","prefabHash":-659093969,"desc":"","name":"Umbilical Socket Angle (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[["Chute","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteUmbilicalMale":{"prefab":{"prefabName":"StructureChuteUmbilicalMale","prefabHash":-958884053,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteValve":{"prefab":{"prefabName":"StructureChuteValve","prefabHash":434875271,"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.","name":"Chute Valve"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteWindow":{"prefab":{"prefabName":"StructureChuteWindow","prefabHash":-607241919,"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.","name":"Chute (Window)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureCircuitHousing":{"prefab":{"prefabName":"StructureCircuitHousing","prefabHash":-128473777,"desc":"","name":"IC Housing"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","LineNumber":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","LineNumber":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[["Data","Input"],["Power","None"]],"devicePinsLength":6,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"StructureCombustionCentrifuge":{"prefab":{"prefabName":"StructureCombustionCentrifuge","prefabHash":1238905683,"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 ","name":"Combustion Centrifuge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"],["Pipe","Input"],["Pipe","Output"]],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureCompositeCladdingAngled":{"prefab":{"prefabName":"StructureCompositeCladdingAngled","prefabHash":-1513030150,"desc":"","name":"Composite Cladding (Angled)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCorner":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCorner","prefabHash":-69685069,"desc":"","name":"Composite Cladding (Angled Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInner":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInner","prefabHash":-1841871763,"desc":"","name":"Composite Cladding (Angled Corner Inner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLong","prefabHash":-1417912632,"desc":"","name":"Composite Cladding (Angled Corner Inner Long)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLongL":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLongL","prefabHash":947705066,"desc":"","name":"Composite Cladding (Angled Corner Inner Long L)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLongR":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLongR","prefabHash":-1032590967,"desc":"","name":"Composite Cladding (Angled Corner Inner Long R)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerLong","prefabHash":850558385,"desc":"","name":"Composite Cladding (Long Angled Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerLongR":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerLongR","prefabHash":-348918222,"desc":"","name":"Composite Cladding (Long Angled Mirrored Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledLong","prefabHash":-387546514,"desc":"","name":"Composite Cladding (Long Angled)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingCylindrical":{"prefab":{"prefabName":"StructureCompositeCladdingCylindrical","prefabHash":212919006,"desc":"","name":"Composite Cladding (Cylindrical)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingCylindricalPanel":{"prefab":{"prefabName":"StructureCompositeCladdingCylindricalPanel","prefabHash":1077151132,"desc":"","name":"Composite Cladding (Cylindrical Panel)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingPanel":{"prefab":{"prefabName":"StructureCompositeCladdingPanel","prefabHash":1997436771,"desc":"","name":"Composite Cladding (Panel)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRounded":{"prefab":{"prefabName":"StructureCompositeCladdingRounded","prefabHash":-259357734,"desc":"","name":"Composite Cladding (Rounded)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRoundedCorner":{"prefab":{"prefabName":"StructureCompositeCladdingRoundedCorner","prefabHash":1951525046,"desc":"","name":"Composite Cladding (Rounded Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRoundedCornerInner":{"prefab":{"prefabName":"StructureCompositeCladdingRoundedCornerInner","prefabHash":110184667,"desc":"","name":"Composite Cladding (Rounded Corner Inner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSpherical":{"prefab":{"prefabName":"StructureCompositeCladdingSpherical","prefabHash":139107321,"desc":"","name":"Composite Cladding (Spherical)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSphericalCap":{"prefab":{"prefabName":"StructureCompositeCladdingSphericalCap","prefabHash":534213209,"desc":"","name":"Composite Cladding (Spherical Cap)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSphericalCorner":{"prefab":{"prefabName":"StructureCompositeCladdingSphericalCorner","prefabHash":1751355139,"desc":"","name":"Composite Cladding (Spherical Corner)"},"structure":{"smallGrid":false}},"StructureCompositeDoor":{"prefab":{"prefabName":"StructureCompositeDoor","prefabHash":-793837322,"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.","name":"Composite Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCompositeFloorGrating":{"prefab":{"prefabName":"StructureCompositeFloorGrating","prefabHash":324868581,"desc":"While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings.","name":"Composite Floor Grating"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating2":{"prefab":{"prefabName":"StructureCompositeFloorGrating2","prefabHash":-895027741,"desc":"","name":"Composite Floor Grating (Type 2)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating3":{"prefab":{"prefabName":"StructureCompositeFloorGrating3","prefabHash":-1113471627,"desc":"","name":"Composite Floor Grating (Type 3)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating4":{"prefab":{"prefabName":"StructureCompositeFloorGrating4","prefabHash":600133846,"desc":"","name":"Composite Floor Grating (Type 4)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGratingOpen":{"prefab":{"prefabName":"StructureCompositeFloorGratingOpen","prefabHash":2109695912,"desc":"","name":"Composite Floor Grating Open"},"structure":{"smallGrid":false}},"StructureCompositeFloorGratingOpenRotated":{"prefab":{"prefabName":"StructureCompositeFloorGratingOpenRotated","prefabHash":882307910,"desc":"","name":"Composite Floor Grating Open Rotated"},"structure":{"smallGrid":false}},"StructureCompositeWall":{"prefab":{"prefabName":"StructureCompositeWall","prefabHash":1237302061,"desc":"Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties.","name":"Composite Wall (Type 1)"},"structure":{"smallGrid":false}},"StructureCompositeWall02":{"prefab":{"prefabName":"StructureCompositeWall02","prefabHash":718343384,"desc":"","name":"Composite Wall (Type 2)"},"structure":{"smallGrid":false}},"StructureCompositeWall03":{"prefab":{"prefabName":"StructureCompositeWall03","prefabHash":1574321230,"desc":"","name":"Composite Wall (Type 3)"},"structure":{"smallGrid":false}},"StructureCompositeWall04":{"prefab":{"prefabName":"StructureCompositeWall04","prefabHash":-1011701267,"desc":"","name":"Composite Wall (Type 4)"},"structure":{"smallGrid":false}},"StructureCompositeWindow":{"prefab":{"prefabName":"StructureCompositeWindow","prefabHash":-2060571986,"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.","name":"Composite Window"},"structure":{"smallGrid":false}},"StructureCompositeWindowIron":{"prefab":{"prefabName":"StructureCompositeWindowIron","prefabHash":-688284639,"desc":"","name":"Iron Window"},"structure":{"smallGrid":false}},"StructureComputer":{"prefab":{"prefabName":"StructureComputer","prefabHash":-626563514,"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","name":"Computer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Data Disk","typ":"DataDisk"},{"name":"Data Disk","typ":"DataDisk"},{"name":"Motherboard","typ":"Motherboard"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCondensationChamber":{"prefab":{"prefabName":"StructureCondensationChamber","prefabHash":1420719315,"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.","name":"Condensation Chamber"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input2"],["Pipe","Input"],["PipeLiquid","Output"],["Data","None"],["Power","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCondensationValve":{"prefab":{"prefabName":"StructureCondensationValve","prefabHash":-965741795,"desc":"Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction.","name":"Condensation Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Output"],["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsole":{"prefab":{"prefabName":"StructureConsole","prefabHash":235638270,"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.","name":"Console"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureConsoleDual":{"prefab":{"prefabName":"StructureConsoleDual","prefabHash":-722284333,"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.","name":"Console Dual"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureConsoleLED1x2":{"prefab":{"prefabName":"StructureConsoleLED1x2","prefabHash":-53151617,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleLED1x3":{"prefab":{"prefabName":"StructureConsoleLED1x3","prefabHash":-1949054743,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleLED5":{"prefab":{"prefabName":"StructureConsoleLED5","prefabHash":-815193061,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleMonitor":{"prefab":{"prefabName":"StructureConsoleMonitor","prefabHash":801677497,"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.","name":"Console Monitor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureControlChair":{"prefab":{"prefabName":"StructureControlChair","prefabHash":-1961153710,"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.","name":"Control Chair"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Entity","typ":"Entity"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureCornerLocker":{"prefab":{"prefabName":"StructureCornerLocker","prefabHash":-1968255729,"desc":"","name":"Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureCrateMount":{"prefab":{"prefabName":"StructureCrateMount","prefabHash":-733500083,"desc":"","name":"Container Mount"},"structure":{"smallGrid":true},"slots":[{"name":"Container Slot","typ":"None"}]},"StructureCryoTube":{"prefab":{"prefabName":"StructureCryoTube","prefabHash":1938254586,"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.","name":"CryoTube"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[["Data","None"],["Pipe","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCryoTubeHorizontal":{"prefab":{"prefabName":"StructureCryoTubeHorizontal","prefabHash":1443059329,"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.","name":"Cryo Tube Horizontal"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCryoTubeVertical":{"prefab":{"prefabName":"StructureCryoTubeVertical","prefabHash":-1381321828,"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.","name":"Cryo Tube Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureDaylightSensor":{"prefab":{"prefabName":"StructureDaylightSensor","prefabHash":1076425094,"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.","name":"Daylight Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDeepMiner":{"prefab":{"prefabName":"StructureDeepMiner","prefabHash":265720906,"desc":"Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s","name":"Deep Miner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDigitalValve":{"prefab":{"prefabName":"StructureDigitalValve","prefabHash":-1280984102,"desc":"The digital valve allows Stationeers to create logic-controlled valves and pipe networks.","name":"Digital Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Output"],["Pipe","Input"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDiode":{"prefab":{"prefabName":"StructureDiode","prefabHash":1944485013,"desc":"","name":"LED"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDiodeSlide":{"prefab":{"prefabName":"StructureDiodeSlide","prefabHash":576516101,"desc":"","name":"Diode Slide"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDockPortSide":{"prefab":{"prefabName":"StructureDockPortSide","prefabHash":-137465079,"desc":"","name":"Dock (Port Side)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureDrinkingFountain":{"prefab":{"prefabName":"StructureDrinkingFountain","prefabHash":1968371847,"desc":"","name":""},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureElectrolyzer":{"prefab":{"prefabName":"StructureElectrolyzer","prefabHash":-1668992663,"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.","name":"Electrolyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"],["Pipe","Output"],["Power","None"]],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElectronicsPrinter":{"prefab":{"prefabName":"StructureElectronicsPrinter","prefabHash":1307165496,"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.","name":"Electronics Printer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureElevatorLevelFront":{"prefab":{"prefabName":"StructureElevatorLevelFront","prefabHash":-827912235,"desc":"","name":"Elevator Level (Cabled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Elevator","None"],["Elevator","None"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElevatorLevelIndustrial":{"prefab":{"prefabName":"StructureElevatorLevelIndustrial","prefabHash":2060648791,"desc":"","name":"Elevator Level"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Elevator","None"],["Elevator","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElevatorShaft":{"prefab":{"prefabName":"StructureElevatorShaft","prefabHash":826144419,"desc":"","name":"Elevator Shaft (Cabled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Elevator","None"],["Elevator","None"],["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureElevatorShaftIndustrial":{"prefab":{"prefabName":"StructureElevatorShaftIndustrial","prefabHash":1998354978,"desc":"","name":"Elevator Shaft"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Elevator","None"],["Elevator","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureEmergencyButton":{"prefab":{"prefabName":"StructureEmergencyButton","prefabHash":1668452680,"desc":"Description coming.","name":"Important Button"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureEngineMountTypeA1":{"prefab":{"prefabName":"StructureEngineMountTypeA1","prefabHash":2035781224,"desc":"","name":"Engine Mount (Type A1)"},"structure":{"smallGrid":false}},"StructureEvaporationChamber":{"prefab":{"prefabName":"StructureEvaporationChamber","prefabHash":-1429782576,"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.","name":"Evaporation Chamber"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input2"],["Pipe","Output"],["PipeLiquid","Input"],["Data","None"],["Power","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureExpansionValve":{"prefab":{"prefabName":"StructureExpansionValve","prefabHash":195298587,"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.","name":"Expansion Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Output"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureFairingTypeA1":{"prefab":{"prefabName":"StructureFairingTypeA1","prefabHash":1622567418,"desc":"","name":"Fairing (Type A1)"},"structure":{"smallGrid":false}},"StructureFairingTypeA2":{"prefab":{"prefabName":"StructureFairingTypeA2","prefabHash":-104908736,"desc":"","name":"Fairing (Type A2)"},"structure":{"smallGrid":false}},"StructureFairingTypeA3":{"prefab":{"prefabName":"StructureFairingTypeA3","prefabHash":-1900541738,"desc":"","name":"Fairing (Type A3)"},"structure":{"smallGrid":false}},"StructureFiltration":{"prefab":{"prefabName":"StructureFiltration","prefabHash":-348054045,"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","name":"Filtration"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Pipe","Output"],["Pipe","Waste"],["Power","None"]],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureFlagSmall":{"prefab":{"prefabName":"StructureFlagSmall","prefabHash":-1529819532,"desc":"","name":"Small Flag"},"structure":{"smallGrid":true}},"StructureFlashingLight":{"prefab":{"prefabName":"StructureFlashingLight","prefabHash":-1535893860,"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'.","name":"Flashing Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureFlatBench":{"prefab":{"prefabName":"StructureFlatBench","prefabHash":839890807,"desc":"","name":"Bench (Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureFloorDrain":{"prefab":{"prefabName":"StructureFloorDrain","prefabHash":1048813293,"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.","name":"Passive Liquid Inlet"},"structure":{"smallGrid":true}},"StructureFrame":{"prefab":{"prefabName":"StructureFrame","prefabHash":1432512808,"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.","name":"Steel Frame"},"structure":{"smallGrid":false}},"StructureFrameCorner":{"prefab":{"prefabName":"StructureFrameCorner","prefabHash":-2112390778,"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.","name":"Steel Frame (Corner)"},"structure":{"smallGrid":false}},"StructureFrameCornerCut":{"prefab":{"prefabName":"StructureFrameCornerCut","prefabHash":271315669,"desc":"0.Mode0\n1.Mode1","name":"Steel Frame (Corner Cut)"},"structure":{"smallGrid":false}},"StructureFrameIron":{"prefab":{"prefabName":"StructureFrameIron","prefabHash":-1240951678,"desc":"","name":"Iron Frame"},"structure":{"smallGrid":false}},"StructureFrameSide":{"prefab":{"prefabName":"StructureFrameSide","prefabHash":-302420053,"desc":"More durable than the Iron Frame, steel frames also provide variations for more ornate constructions.","name":"Steel Frame (Side)"},"structure":{"smallGrid":false}},"StructureFridgeBig":{"prefab":{"prefabName":"StructureFridgeBig","prefabHash":958476921,"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.","name":"Fridge (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureFridgeSmall":{"prefab":{"prefabName":"StructureFridgeSmall","prefabHash":751887598,"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.","name":"Fridge Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureFurnace":{"prefab":{"prefabName":"StructureFurnace","prefabHash":1947944864,"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.","name":"Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Pipe","Input"],["Pipe","Output"],["PipeLiquid","Output2"],["Data","None"]],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":false,"hasOpenState":true,"hasReagents":true}},"StructureFuselageTypeA1":{"prefab":{"prefabName":"StructureFuselageTypeA1","prefabHash":1033024712,"desc":"","name":"Fuselage (Type A1)"},"structure":{"smallGrid":false}},"StructureFuselageTypeA2":{"prefab":{"prefabName":"StructureFuselageTypeA2","prefabHash":-1533287054,"desc":"","name":"Fuselage (Type A2)"},"structure":{"smallGrid":false}},"StructureFuselageTypeA4":{"prefab":{"prefabName":"StructureFuselageTypeA4","prefabHash":1308115015,"desc":"","name":"Fuselage (Type A4)"},"structure":{"smallGrid":false}},"StructureFuselageTypeC5":{"prefab":{"prefabName":"StructureFuselageTypeC5","prefabHash":147395155,"desc":"","name":"Fuselage (Type C5)"},"structure":{"smallGrid":false}},"StructureGasGenerator":{"prefab":{"prefabName":"StructureGasGenerator","prefabHash":1165997963,"desc":"","name":"Gas Fuel Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Pipe","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGasMixer":{"prefab":{"prefabName":"StructureGasMixer","prefabHash":2104106366,"desc":"Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%.","name":"Gas Mixer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Output"],["Pipe","Input2"],["Pipe","Input"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGasSensor":{"prefab":{"prefabName":"StructureGasSensor","prefabHash":-1252983604,"desc":"Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents.","name":"Gas Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasTankStorage":{"prefab":{"prefabName":"StructureGasTankStorage","prefabHash":1632165346,"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.","name":"Gas Tank Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"PrefabHash":"Read","Pressure":"Read","Quantity":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioNitrousOxide":"Read","RatioOxygen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","ReferenceId":"Read","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalFemale":{"prefab":{"prefabName":"StructureGasUmbilicalFemale","prefabHash":-1680477930,"desc":"","name":"Umbilical Socket (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureGasUmbilicalFemaleSide","prefabHash":-648683847,"desc":"","name":"Umbilical Socket Angle (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalMale":{"prefab":{"prefabName":"StructureGasUmbilicalMale","prefabHash":-1814939203,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGlassDoor":{"prefab":{"prefabName":"StructureGlassDoor","prefabHash":-324331872,"desc":"0.Operate\n1.Logic","name":"Glass Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGovernedGasEngine":{"prefab":{"prefabName":"StructureGovernedGasEngine","prefabHash":-214232602,"desc":"The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas.","name":"Pumped Gas Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGroundBasedTelescope":{"prefab":{"prefabName":"StructureGroundBasedTelescope","prefabHash":-619745681,"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.","name":"Telescope"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGrowLight":{"prefab":{"prefabName":"StructureGrowLight","prefabHash":-1758710260,"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. ","name":"Grow Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHarvie":{"prefab":{"prefabName":"StructureHarvie","prefabHash":958056199,"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.","name":"Harvie"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Plant"},{"name":"Export","typ":"None"},{"name":"Hand","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangeLiquidtoGas":{"prefab":{"prefabName":"StructureHeatExchangeLiquidtoGas","prefabHash":944685608,"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.","name":"Heat Exchanger - Liquid + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Output"],["PipeLiquid","Input"],["PipeLiquid","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangerGastoGas":{"prefab":{"prefabName":"StructureHeatExchangerGastoGas","prefabHash":21266291,"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.","name":"Heat Exchanger - Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Input"],["Pipe","Output"],["Pipe","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangerLiquidtoLiquid":{"prefab":{"prefabName":"StructureHeatExchangerLiquidtoLiquid","prefabHash":-613784254,"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","name":"Heat Exchanger - Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Input"],["PipeLiquid","Output"],["PipeLiquid","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHorizontalAutoMiner":{"prefab":{"prefabName":"StructureHorizontalAutoMiner","prefabHash":1070427573,"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","name":"OGRE"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureHydraulicPipeBender":{"prefab":{"prefabName":"StructureHydraulicPipeBender","prefabHash":-1888248335,"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.","name":"Hydraulic Pipe Bender"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureHydroponicsStation":{"prefab":{"prefabName":"StructureHydroponicsStation","prefabHash":1441767298,"desc":"","name":"Hydroponics Station"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[["Data","None"],["Power","None"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHydroponicsTray":{"prefab":{"prefabName":"StructureHydroponicsTray","prefabHash":1464854517,"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.","name":"Hydroponics Tray"},"structure":{"smallGrid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}]},"StructureHydroponicsTrayData":{"prefab":{"prefabName":"StructureHydroponicsTrayData","prefabHash":-1841632400,"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.","name":"Hydroponics Device"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}],"device":{"connectionList":[["PipeLiquid","None"],["PipeLiquid","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureIceCrusher":{"prefab":{"prefabName":"StructureIceCrusher","prefabHash":443849486,"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.","name":"Ice Crusher"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connectionList":[["Data","None"],["Power","None"],["Chute","Input"],["Pipe","Output"],["PipeLiquid","Output2"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureIgniter":{"prefab":{"prefabName":"StructureIgniter","prefabHash":1005491513,"desc":"It gets the party started. Especially if that party is an explosive gas mixture.","name":"Igniter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureInLineTankGas1x1":{"prefab":{"prefabName":"StructureInLineTankGas1x1","prefabHash":-1693382705,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Gas"},"structure":{"smallGrid":true}},"StructureInLineTankGas1x2":{"prefab":{"prefabName":"StructureInLineTankGas1x2","prefabHash":35149429,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Gas"},"structure":{"smallGrid":true}},"StructureInLineTankLiquid1x1":{"prefab":{"prefabName":"StructureInLineTankLiquid1x1","prefabHash":543645499,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Liquid"},"structure":{"smallGrid":true}},"StructureInLineTankLiquid1x2":{"prefab":{"prefabName":"StructureInLineTankLiquid1x2","prefabHash":-1183969663,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankGas1x1":{"prefab":{"prefabName":"StructureInsulatedInLineTankGas1x1","prefabHash":1818267386,"desc":"","name":"Insulated In-Line Tank Small Gas"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankGas1x2":{"prefab":{"prefabName":"StructureInsulatedInLineTankGas1x2","prefabHash":-177610944,"desc":"","name":"Insulated In-Line Tank Gas"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankLiquid1x1":{"prefab":{"prefabName":"StructureInsulatedInLineTankLiquid1x1","prefabHash":-813426145,"desc":"","name":"Insulated In-Line Tank Small Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankLiquid1x2":{"prefab":{"prefabName":"StructureInsulatedInLineTankLiquid1x2","prefabHash":1452100517,"desc":"","name":"Insulated In-Line Tank Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCorner":{"prefab":{"prefabName":"StructureInsulatedPipeCorner","prefabHash":-1967711059,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Corner)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction","prefabHash":-92778058,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction3":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction3","prefabHash":1328210035,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction4":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction4","prefabHash":-783387184,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction5":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction5","prefabHash":-1505147578,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction6":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction6","prefabHash":1061164284,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCorner":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCorner","prefabHash":1713710802,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Corner)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction","prefabHash":1926651727,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction4":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction4","prefabHash":363303270,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction5":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction5","prefabHash":1654694384,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction6":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction6","prefabHash":-72748982,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidStraight":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidStraight","prefabHash":295678685,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Straight)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidTJunction":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidTJunction","prefabHash":-532384855,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeStraight":{"prefab":{"prefabName":"StructureInsulatedPipeStraight","prefabHash":2134172356,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Straight)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeTJunction":{"prefab":{"prefabName":"StructureInsulatedPipeTJunction","prefabHash":-2076086215,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedTankConnector":{"prefab":{"prefabName":"StructureInsulatedTankConnector","prefabHash":-31273349,"desc":"","name":"Insulated Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructureInsulatedTankConnectorLiquid":{"prefab":{"prefabName":"StructureInsulatedTankConnectorLiquid","prefabHash":-1602030414,"desc":"","name":"Insulated Tank Connector Liquid"},"structure":{"smallGrid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureInteriorDoorGlass":{"prefab":{"prefabName":"StructureInteriorDoorGlass","prefabHash":-2096421875,"desc":"0.Operate\n1.Logic","name":"Interior Door Glass"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorPadded":{"prefab":{"prefabName":"StructureInteriorDoorPadded","prefabHash":847461335,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorPaddedThin":{"prefab":{"prefabName":"StructureInteriorDoorPaddedThin","prefabHash":1981698201,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded Thin"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorTriangle":{"prefab":{"prefabName":"StructureInteriorDoorTriangle","prefabHash":-1182923101,"desc":"0.Operate\n1.Logic","name":"Interior Door Triangle"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureKlaxon":{"prefab":{"prefabName":"StructureKlaxon","prefabHash":-828056979,"desc":"Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output.","name":"Klaxon Speaker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLadder":{"prefab":{"prefabName":"StructureLadder","prefabHash":-415420281,"desc":"","name":"Ladder"},"structure":{"smallGrid":true}},"StructureLadderEnd":{"prefab":{"prefabName":"StructureLadderEnd","prefabHash":1541734993,"desc":"","name":"Ladder End"},"structure":{"smallGrid":true}},"StructureLargeDirectHeatExchangeGastoGas":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeGastoGas","prefabHash":-1230658883,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Input2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeDirectHeatExchangeGastoLiquid":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeGastoLiquid","prefabHash":1412338038,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["Pipe","Input2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeLiquidtoLiquid","prefabHash":792686502,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchange - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Input2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeExtendableRadiator":{"prefab":{"prefabName":"StructureLargeExtendableRadiator","prefabHash":-566775170,"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.","name":"Large Extendable Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Horizontal":"ReadWrite","Lock":"ReadWrite","Maximum":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"],["PipeLiquid","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLargeHangerDoor":{"prefab":{"prefabName":"StructureLargeHangerDoor","prefabHash":-1351081801,"desc":"1 x 3 modular door piece for building hangar doors.","name":"Large Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureLargeSatelliteDish":{"prefab":{"prefabName":"StructureLargeSatelliteDish","prefabHash":1913391845,"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.","name":"Large Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLaunchMount":{"prefab":{"prefabName":"StructureLaunchMount","prefabHash":-558953231,"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.","name":"Launch Mount"},"structure":{"smallGrid":false}},"StructureLightLong":{"prefab":{"prefabName":"StructureLightLong","prefabHash":797794350,"desc":"","name":"Wall Light (Long)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightLongAngled":{"prefab":{"prefabName":"StructureLightLongAngled","prefabHash":1847265835,"desc":"","name":"Wall Light (Long Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightLongWide":{"prefab":{"prefabName":"StructureLightLongWide","prefabHash":555215790,"desc":"","name":"Wall Light (Long Wide)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRound":{"prefab":{"prefabName":"StructureLightRound","prefabHash":1514476632,"desc":"Description coming.","name":"Light Round"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRoundAngled":{"prefab":{"prefabName":"StructureLightRoundAngled","prefabHash":1592905386,"desc":"Description coming.","name":"Light Round (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRoundSmall":{"prefab":{"prefabName":"StructureLightRoundSmall","prefabHash":1436121888,"desc":"Description coming.","name":"Light Round (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidDrain":{"prefab":{"prefabName":"StructureLiquidDrain","prefabHash":1687692899,"desc":"When connected to power and activated, it pumps liquid from a liquid network into the world.","name":"Active Liquid Outlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","None"],["Data","Input"],["Power","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeAnalyzer":{"prefab":{"prefabName":"StructureLiquidPipeAnalyzer","prefabHash":-2113838091,"desc":"","name":"Liquid Pipe Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeHeater":{"prefab":{"prefabName":"StructureLiquidPipeHeater","prefabHash":-287495560,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeOneWayValve":{"prefab":{"prefabName":"StructureLiquidPipeOneWayValve","prefabHash":-782453061,"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..","name":"One Way Valve (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeRadiator":{"prefab":{"prefabName":"StructureLiquidPipeRadiator","prefabHash":2072805863,"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.","name":"Liquid Pipe Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPressureRegulator":{"prefab":{"prefabName":"StructureLiquidPressureRegulator","prefabHash":482248766,"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.","name":"Liquid Volume Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankBig":{"prefab":{"prefabName":"StructureLiquidTankBig","prefabHash":1098900430,"desc":"","name":"Liquid Tank Big"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankBigInsulated":{"prefab":{"prefabName":"StructureLiquidTankBigInsulated","prefabHash":-1430440215,"desc":"","name":"Insulated Liquid Tank Big"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankSmall":{"prefab":{"prefabName":"StructureLiquidTankSmall","prefabHash":1988118157,"desc":"","name":"Liquid Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankSmallInsulated":{"prefab":{"prefabName":"StructureLiquidTankSmallInsulated","prefabHash":608607718,"desc":"","name":"Insulated Liquid Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankStorage":{"prefab":{"prefabName":"StructureLiquidTankStorage","prefabHash":1691898022,"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.","name":"Liquid Tank Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"PrefabHash":"Read","Pressure":"Read","Quantity":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioNitrousOxide":"Read","RatioOxygen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","ReferenceId":"Read","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTurboVolumePump":{"prefab":{"prefabName":"StructureLiquidTurboVolumePump","prefabHash":-1051805505,"desc":"Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"],["PipeLiquid","Input"],["PipeLiquid","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalFemale":{"prefab":{"prefabName":"StructureLiquidUmbilicalFemale","prefabHash":1734723642,"desc":"","name":"Umbilical Socket (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureLiquidUmbilicalFemaleSide","prefabHash":1220870319,"desc":"","name":"Umbilical Socket Angle (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalMale":{"prefab":{"prefabName":"StructureLiquidUmbilicalMale","prefabHash":-1798420047,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureLiquidValve":{"prefab":{"prefabName":"StructureLiquidValve","prefabHash":1849974453,"desc":"","name":"Liquid Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","None"],["PipeLiquid","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidVolumePump":{"prefab":{"prefabName":"StructureLiquidVolumePump","prefabHash":-454028979,"desc":"","name":"Liquid Volume Pump"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Output"],["PipeLiquid","Input"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLockerSmall":{"prefab":{"prefabName":"StructureLockerSmall","prefabHash":-647164662,"desc":"","name":"Locker (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicBatchReader":{"prefab":{"prefabName":"StructureLogicBatchReader","prefabHash":264413729,"desc":"","name":"Batch Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicBatchSlotReader":{"prefab":{"prefabName":"StructureLogicBatchSlotReader","prefabHash":436888930,"desc":"","name":"Batch Slot Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicBatchWriter":{"prefab":{"prefabName":"StructureLogicBatchWriter","prefabHash":1415443359,"desc":"","name":"Batch Writer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","ForceWrite":"Write","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicButton":{"prefab":{"prefabName":"StructureLogicButton","prefabHash":491845673,"desc":"","name":"Button"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Data","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicCompare":{"prefab":{"prefabName":"StructureLogicCompare","prefabHash":-1489728908,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Compare"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicDial":{"prefab":{"prefabName":"StructureLogicDial","prefabHash":554524804,"desc":"An assignable dial with up to 1000 modes.","name":"Dial"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicGate":{"prefab":{"prefabName":"StructureLogicGate","prefabHash":1942143074,"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.","name":"Logic Gate"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicHashGen":{"prefab":{"prefabName":"StructureLogicHashGen","prefabHash":2077593121,"desc":"","name":"Logic Hash Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicMath":{"prefab":{"prefabName":"StructureLogicMath","prefabHash":1657691323,"desc":"0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log","name":"Logic Math"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMathUnary":{"prefab":{"prefabName":"StructureLogicMathUnary","prefabHash":-1160020195,"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","name":"Math Unary"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMemory":{"prefab":{"prefabName":"StructureLogicMemory","prefabHash":-851746783,"desc":"","name":"Logic Memory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicMinMax":{"prefab":{"prefabName":"StructureLogicMinMax","prefabHash":929022276,"desc":"0.Greater\n1.Less","name":"Logic Min/Max"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"modes":{"0":"Greater","1":"Less"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMirror":{"prefab":{"prefabName":"StructureLogicMirror","prefabHash":2096189278,"desc":"","name":"Logic Mirror"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicReader":{"prefab":{"prefabName":"StructureLogicReader","prefabHash":-345383640,"desc":"","name":"Logic Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicReagentReader":{"prefab":{"prefabName":"StructureLogicReagentReader","prefabHash":-124308857,"desc":"","name":"Reagent Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicRocketDownlink":{"prefab":{"prefabName":"StructureLogicRocketDownlink","prefabHash":876108549,"desc":"","name":"Logic Rocket Downlink"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicRocketUplink":{"prefab":{"prefabName":"StructureLogicRocketUplink","prefabHash":546002924,"desc":"","name":"Logic Uplink"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSelect":{"prefab":{"prefabName":"StructureLogicSelect","prefabHash":1822736084,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Select"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSlotReader":{"prefab":{"prefabName":"StructureLogicSlotReader","prefabHash":-767867194,"desc":"","name":"Slot Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSorter":{"prefab":{"prefabName":"StructureLogicSorter","prefabHash":873418029,"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.","name":"Logic Sorter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"All","1":"Any","2":"None"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[["Chute","Output2"],["Chute","Input"],["Chute","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"instructions":{"FilterPrefabHashEquals":{"description":"| 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":{"description":"| 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":{"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 |","typ":"SorterInstruction","value":5},"FilterSlotTypeCompare":{"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 |","typ":"SorterInstruction","value":4},"FilterSortingClassCompare":{"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 |","typ":"SorterInstruction","value":3},"LimitNextExecutionByCount":{"description":"| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |","typ":"SorterInstruction","value":6}},"memoryAccess":"ReadWrite","memorySize":32}},"StructureLogicSwitch":{"prefab":{"prefabName":"StructureLogicSwitch","prefabHash":1220484876,"desc":"","name":"Lever"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicSwitch2":{"prefab":{"prefabName":"StructureLogicSwitch2","prefabHash":321604921,"desc":"","name":"Switch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicTransmitter":{"prefab":{"prefabName":"StructureLogicTransmitter","prefabHash":-693235651,"desc":"Connects to Logic Transmitter","name":"Logic Transmitter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"modes":{"0":"Passive","1":"Active"},"transmissionReceiver":true,"wirelessLogic":true,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Input"],["Data","Input"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicWriter":{"prefab":{"prefabName":"StructureLogicWriter","prefabHash":-1326019434,"desc":"","name":"Logic Writer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","ForceWrite":"Write","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicWriterSwitch":{"prefab":{"prefabName":"StructureLogicWriterSwitch","prefabHash":-1321250424,"desc":"","name":"Logic Writer Switch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","ForceWrite":"Write","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Input"],["Data","Output"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureManualHatch":{"prefab":{"prefabName":"StructureManualHatch","prefabHash":-1808154199,"desc":"Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock.","name":"Manual Hatch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureMediumConvectionRadiator":{"prefab":{"prefabName":"StructureMediumConvectionRadiator","prefabHash":-1918215845,"desc":"A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumConvectionRadiatorLiquid":{"prefab":{"prefabName":"StructureMediumConvectionRadiatorLiquid","prefabHash":-1169014183,"desc":"A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumHangerDoor":{"prefab":{"prefabName":"StructureMediumHangerDoor","prefabHash":-566348148,"desc":"1 x 2 modular door piece for building hangar doors.","name":"Medium Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureMediumRadiator":{"prefab":{"prefabName":"StructureMediumRadiator","prefabHash":-975966237,"desc":"A stand-alone radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRadiatorLiquid":{"prefab":{"prefabName":"StructureMediumRadiatorLiquid","prefabHash":-1141760613,"desc":"A stand-alone liquid radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRocketGasFuelTank":{"prefab":{"prefabName":"StructureMediumRocketGasFuelTank","prefabHash":-1093860567,"desc":"","name":"Gas Capsule Tank Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Output"],["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRocketLiquidFuelTank":{"prefab":{"prefabName":"StructureMediumRocketLiquidFuelTank","prefabHash":1143639539,"desc":"","name":"Liquid Capsule Tank Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","Output"],["PipeLiquid","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMotionSensor":{"prefab":{"prefabName":"StructureMotionSensor","prefabHash":-1713470563,"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.","name":"Motion Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureNitrolyzer":{"prefab":{"prefabName":"StructureNitrolyzer","prefabHash":1898243702,"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.","name":"Nitrolyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Pipe","Input2"],["Pipe","Output"],["Power","None"]],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureOccupancySensor":{"prefab":{"prefabName":"StructureOccupancySensor","prefabHash":322782515,"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.","name":"Occupancy Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureOverheadShortCornerLocker":{"prefab":{"prefabName":"StructureOverheadShortCornerLocker","prefabHash":-1794932560,"desc":"","name":"Overhead Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureOverheadShortLocker":{"prefab":{"prefabName":"StructureOverheadShortLocker","prefabHash":1468249454,"desc":"","name":"Overhead Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePassiveLargeRadiatorGas":{"prefab":{"prefabName":"StructurePassiveLargeRadiatorGas","prefabHash":2066977095,"desc":"Has been replaced by Medium Convection Radiator.","name":"Medium Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveLargeRadiatorLiquid":{"prefab":{"prefabName":"StructurePassiveLargeRadiatorLiquid","prefabHash":24786172,"desc":"Has been replaced by Medium Convection Radiator Liquid.","name":"Medium Convection Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveLiquidDrain":{"prefab":{"prefabName":"StructurePassiveLiquidDrain","prefabHash":1812364811,"desc":"Moves liquids from a pipe network to the world atmosphere.","name":"Passive Liquid Drain"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveVent":{"prefab":{"prefabName":"StructurePassiveVent","prefabHash":335498166,"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. ","name":"Passive Vent"},"structure":{"smallGrid":true}},"StructurePassiveVentInsulated":{"prefab":{"prefabName":"StructurePassiveVentInsulated","prefabHash":1363077139,"desc":"","name":"Insulated Passive Vent"},"structure":{"smallGrid":true}},"StructurePassthroughHeatExchangerGasToGas":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerGasToGas","prefabHash":-1674187440,"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.","name":"CounterFlow Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Input2"],["Pipe","Output"],["Pipe","Output2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassthroughHeatExchangerGasToLiquid":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerGasToLiquid","prefabHash":1928991265,"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.","name":"CounterFlow Heat Exchanger - Gas + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["PipeLiquid","Input2"],["Pipe","Output"],["PipeLiquid","Output2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassthroughHeatExchangerLiquidToLiquid":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerLiquidToLiquid","prefabHash":-1472829583,"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.","name":"CounterFlow Heat Exchanger - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Input2"],["PipeLiquid","Output"],["PipeLiquid","Output2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePictureFrameThickLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThickLandscapeLarge","prefabHash":-1434523206,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThickLandscapeSmall","prefabHash":-2041566697,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThickMountLandscapeLarge","prefabHash":950004659,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThickMountLandscapeSmall","prefabHash":347154462,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThickMountPortraitLarge","prefabHash":-1459641358,"desc":"","name":"Picture Frame Thick Mount Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThickMountPortraitSmall","prefabHash":-2066653089,"desc":"","name":"Picture Frame Thick Mount Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThickPortraitLarge","prefabHash":-1686949570,"desc":"","name":"Picture Frame Thick Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThickPortraitSmall","prefabHash":-1218579821,"desc":"","name":"Picture Frame Thick Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThinLandscapeLarge","prefabHash":-1418288625,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThinLandscapeSmall","prefabHash":-2024250974,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThinMountLandscapeLarge","prefabHash":-1146760430,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThinMountLandscapeSmall","prefabHash":-1752493889,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThinMountPortraitLarge","prefabHash":1094895077,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThinMountPortraitSmall","prefabHash":1835796040,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThinPortraitLarge","prefabHash":1212777087,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThinPortraitSmall","prefabHash":1684488658,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"smallGrid":true}},"StructurePipeAnalysizer":{"prefab":{"prefabName":"StructurePipeAnalysizer","prefabHash":435685051,"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.","name":"Pipe Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePipeCorner":{"prefab":{"prefabName":"StructurePipeCorner","prefabHash":-1785673561,"desc":"You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Corner)"},"structure":{"smallGrid":true}},"StructurePipeCowl":{"prefab":{"prefabName":"StructurePipeCowl","prefabHash":465816159,"desc":"","name":"Pipe Cowl"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction":{"prefab":{"prefabName":"StructurePipeCrossJunction","prefabHash":-1405295588,"desc":"You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction3":{"prefab":{"prefabName":"StructurePipeCrossJunction3","prefabHash":2038427184,"desc":"You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction4":{"prefab":{"prefabName":"StructurePipeCrossJunction4","prefabHash":-417629293,"desc":"You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction5":{"prefab":{"prefabName":"StructurePipeCrossJunction5","prefabHash":-1877193979,"desc":"You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction6":{"prefab":{"prefabName":"StructurePipeCrossJunction6","prefabHash":152378047,"desc":"You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeHeater":{"prefab":{"prefabName":"StructurePipeHeater","prefabHash":-419758574,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePipeIgniter":{"prefab":{"prefabName":"StructurePipeIgniter","prefabHash":1286441942,"desc":"Ignites the atmosphere inside the attached pipe network.","name":"Pipe Igniter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeInsulatedLiquidCrossJunction":{"prefab":{"prefabName":"StructurePipeInsulatedLiquidCrossJunction","prefabHash":-2068497073,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeLabel":{"prefab":{"prefabName":"StructurePipeLabel","prefabHash":-999721119,"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.","name":"Pipe Label"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeLiquidCorner":{"prefab":{"prefabName":"StructurePipeLiquidCorner","prefabHash":-1856720921,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Corner)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction","prefabHash":1848735691,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction3":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction3","prefabHash":1628087508,"desc":"You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction4":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction4","prefabHash":-9555593,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction5":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction5","prefabHash":-2006384159,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction6":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction6","prefabHash":291524699,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidStraight":{"prefab":{"prefabName":"StructurePipeLiquidStraight","prefabHash":667597982,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Straight)"},"structure":{"smallGrid":true}},"StructurePipeLiquidTJunction":{"prefab":{"prefabName":"StructurePipeLiquidTJunction","prefabHash":262616717,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructurePipeMeter":{"prefab":{"prefabName":"StructurePipeMeter","prefabHash":-1798362329,"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\"","name":"Pipe Meter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeOneWayValve":{"prefab":{"prefabName":"StructurePipeOneWayValve","prefabHash":1580412404,"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","name":"One Way Valve (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeOrgan":{"prefab":{"prefabName":"StructurePipeOrgan","prefabHash":1305252611,"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.","name":"Pipe Organ"},"structure":{"smallGrid":true}},"StructurePipeRadiator":{"prefab":{"prefabName":"StructurePipeRadiator","prefabHash":1696603168,"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.","name":"Pipe Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeRadiatorFlat":{"prefab":{"prefabName":"StructurePipeRadiatorFlat","prefabHash":-399883995,"desc":"A pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeRadiatorFlatLiquid":{"prefab":{"prefabName":"StructurePipeRadiatorFlatLiquid","prefabHash":2024754523,"desc":"A liquid pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeStraight":{"prefab":{"prefabName":"StructurePipeStraight","prefabHash":73728932,"desc":"You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Straight)"},"structure":{"smallGrid":true}},"StructurePipeTJunction":{"prefab":{"prefabName":"StructurePipeTJunction","prefabHash":-913817472,"desc":"You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructurePlanter":{"prefab":{"prefabName":"StructurePlanter","prefabHash":-1125641329,"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).","name":"Planter"},"structure":{"smallGrid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Plant","typ":"Plant"}]},"StructurePlatformLadderOpen":{"prefab":{"prefabName":"StructurePlatformLadderOpen","prefabHash":1559586682,"desc":"","name":"Ladder Platform"},"structure":{"smallGrid":false}},"StructurePlinth":{"prefab":{"prefabName":"StructurePlinth","prefabHash":989835703,"desc":"","name":"Plinth"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructurePortablesConnector":{"prefab":{"prefabName":"StructurePortablesConnector","prefabHash":-899013427,"desc":"","name":"Portables Connector"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Maximum":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"}],"device":{"connectionList":[["Pipe","Input"],["PipeLiquid","Input2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePowerConnector":{"prefab":{"prefabName":"StructurePowerConnector","prefabHash":-782951720,"desc":"Attaches a Kit (Portable Generator) to a power network.","name":"Power Connector"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Portable Slot","typ":"None"}],"device":{"connectionList":[["Power","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePowerTransmitter":{"prefab":{"prefabName":"StructurePowerTransmitter","prefabHash":-65087121,"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.","name":"Microwave Power Transmitter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerTransmitterOmni":{"prefab":{"prefabName":"StructurePowerTransmitterOmni","prefabHash":-327468845,"desc":"","name":"Power Transmitter Omni"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerTransmitterReceiver":{"prefab":{"prefabName":"StructurePowerTransmitterReceiver","prefabHash":1195820278,"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","name":"Microwave Power Receiver"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalFemale":{"prefab":{"prefabName":"StructurePowerUmbilicalFemale","prefabHash":101488029,"desc":"","name":"Umbilical Socket (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalFemaleSide":{"prefab":{"prefabName":"StructurePowerUmbilicalFemaleSide","prefabHash":1922506192,"desc":"","name":"Umbilical Socket Angle (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalMale":{"prefab":{"prefabName":"StructurePowerUmbilicalMale","prefabHash":1529453938,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructurePoweredVent":{"prefab":{"prefabName":"StructurePoweredVent","prefabHash":938836756,"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.","name":"Powered Vent"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureExternal":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePoweredVentLarge":{"prefab":{"prefabName":"StructurePoweredVentLarge","prefabHash":-785498334,"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.","name":"Powered Vent Large"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureExternal":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressurantValve":{"prefab":{"prefabName":"StructurePressurantValve","prefabHash":23052817,"desc":"Pumps gas into a liquid pipe in order to raise the pressure","name":"Pressurant Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["PipeLiquid","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressureFedGasEngine":{"prefab":{"prefabName":"StructurePressureFedGasEngine","prefabHash":-624011170,"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.","name":"Pressure Fed Gas Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Input2"],["PowerAndData","Output"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressureFedLiquidEngine":{"prefab":{"prefabName":"StructurePressureFedLiquidEngine","prefabHash":379750958,"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.","name":"Pressure Fed Liquid Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Input2"],["PowerAndData","Output"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateLarge":{"prefab":{"prefabName":"StructurePressurePlateLarge","prefabHash":-2008706143,"desc":"","name":"Trigger Plate (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateMedium":{"prefab":{"prefabName":"StructurePressurePlateMedium","prefabHash":1269458680,"desc":"","name":"Trigger Plate (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateSmall":{"prefab":{"prefabName":"StructurePressurePlateSmall","prefabHash":-1536471028,"desc":"","name":"Trigger Plate (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressureRegulator":{"prefab":{"prefabName":"StructurePressureRegulator","prefabHash":209854039,"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.","name":"Pressure Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureProximitySensor":{"prefab":{"prefabName":"StructureProximitySensor","prefabHash":568800213,"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.","name":"Proximity Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePumpedLiquidEngine":{"prefab":{"prefabName":"StructurePumpedLiquidEngine","prefabHash":-2031440019,"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","name":"Pumped Liquid Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","None"],["PipeLiquid","None"],["PowerAndData","Output"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePurgeValve":{"prefab":{"prefabName":"StructurePurgeValve","prefabHash":-737232128,"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.","name":"Purge Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["Pipe","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRailing":{"prefab":{"prefabName":"StructureRailing","prefabHash":-1756913871,"desc":"\"Safety third.\"","name":"Railing Industrial (Type 1)"},"structure":{"smallGrid":false}},"StructureRecycler":{"prefab":{"prefabName":"StructureRecycler","prefabHash":-1633947337,"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.","name":"Recycler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureRefrigeratedVendingMachine":{"prefab":{"prefabName":"StructureRefrigeratedVendingMachine","prefabHash":-1577831321,"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. ","name":"Refrigerated Vending Machine"},"structure":{"smallGrid":true},"logic":{"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":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureReinforcedCompositeWindow":{"prefab":{"prefabName":"StructureReinforcedCompositeWindow","prefabHash":2027713511,"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.","name":"Reinforced Window (Composite)"},"structure":{"smallGrid":false}},"StructureReinforcedCompositeWindowSteel":{"prefab":{"prefabName":"StructureReinforcedCompositeWindowSteel","prefabHash":-816454272,"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.","name":"Reinforced Window (Composite Steel)"},"structure":{"smallGrid":false}},"StructureReinforcedWallPaddedWindow":{"prefab":{"prefabName":"StructureReinforcedWallPaddedWindow","prefabHash":1939061729,"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.","name":"Reinforced Window (Padded)"},"structure":{"smallGrid":false}},"StructureReinforcedWallPaddedWindowThin":{"prefab":{"prefabName":"StructureReinforcedWallPaddedWindowThin","prefabHash":158502707,"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.","name":"Reinforced Window (Thin)"},"structure":{"smallGrid":false}},"StructureResearchMachine":{"prefab":{"prefabName":"StructureResearchMachine","prefabHash":-796627526,"desc":"","name":"Research Machine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"],["Pipe","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureRocketAvionics":{"prefab":{"prefabName":"StructureRocketAvionics","prefabHash":808389066,"desc":"","name":"Rocket Avionics"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureRocketCelestialTracker":{"prefab":{"prefabName":"StructureRocketCelestialTracker","prefabHash":997453927,"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.","name":"Rocket Celestial Tracker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"CelestialHash":"Read","Error":"Read","Horizontal":"Read","Index":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Vertical":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"instructions":{"BodyOrientation":{"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 |","typ":"CelestialTracking","value":1}},"memoryAccess":"Read","memorySize":12}},"StructureRocketCircuitHousing":{"prefab":{"prefabName":"StructureRocketCircuitHousing","prefabHash":150135861,"desc":"","name":"Rocket Circuit Housing"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","LineNumber":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","LineNumber":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[["PowerAndData","Input"]],"devicePinsLength":6,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"StructureRocketEngineTiny":{"prefab":{"prefabName":"StructureRocketEngineTiny","prefabHash":178472613,"desc":"","name":"Rocket Engine (Tiny)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketManufactory":{"prefab":{"prefabName":"StructureRocketManufactory","prefabHash":1781051034,"desc":"","name":"Rocket Manufactory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureRocketMiner":{"prefab":{"prefabName":"StructureRocketMiner","prefabHash":-2087223687,"desc":"Gathers available resources at the rocket's current space location.","name":"Rocket Miner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"ClearMemory":"Write","DrillCondition":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"},{"name":"Drill Head Slot","typ":"DrillHead"}],"device":{"connectionList":[["Chute","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketScanner":{"prefab":{"prefabName":"StructureRocketScanner","prefabHash":2014252591,"desc":"","name":"Rocket Scanner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Scanner Head Slot","typ":"ScanningHead"}],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketTower":{"prefab":{"prefabName":"StructureRocketTower","prefabHash":-654619479,"desc":"","name":"Launch Tower"},"structure":{"smallGrid":false}},"StructureRocketTransformerSmall":{"prefab":{"prefabName":"StructureRocketTransformerSmall","prefabHash":518925193,"desc":"","name":"Transformer Small (Rocket)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","Input"],["Power","Output"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRover":{"prefab":{"prefabName":"StructureRover","prefabHash":806513938,"desc":"","name":"Rover Frame"},"structure":{"smallGrid":false}},"StructureSDBHopper":{"prefab":{"prefabName":"StructureSDBHopper","prefabHash":-1875856925,"desc":"","name":"SDB Hopper"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSDBHopperAdvanced":{"prefab":{"prefabName":"StructureSDBHopperAdvanced","prefabHash":467225612,"desc":"","name":"SDB Hopper Advanced"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[["Data","None"],["Power","None"],["Chute","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSDBSilo":{"prefab":{"prefabName":"StructureSDBSilo","prefabHash":1155865682,"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.","name":"SDB Silo"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSatelliteDish":{"prefab":{"prefabName":"StructureSatelliteDish","prefabHash":439026183,"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.","name":"Medium Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSecurityPrinter":{"prefab":{"prefabName":"StructureSecurityPrinter","prefabHash":-641491515,"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","name":"Security Printer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureShelf":{"prefab":{"prefabName":"StructureShelf","prefabHash":1172114950,"desc":"","name":"Shelf"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"StructureShelfMedium":{"prefab":{"prefabName":"StructureShelfMedium","prefabHash":182006674,"desc":"A shelf for putting things on, so you can see them.","name":"Shelf Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShortCornerLocker":{"prefab":{"prefabName":"StructureShortCornerLocker","prefabHash":1330754486,"desc":"","name":"Short Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShortLocker":{"prefab":{"prefabName":"StructureShortLocker","prefabHash":-554553467,"desc":"","name":"Short Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShower":{"prefab":{"prefabName":"StructureShower","prefabHash":-775128944,"desc":"","name":"Shower"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Maximum":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Output"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShowerPowered":{"prefab":{"prefabName":"StructureShowerPowered","prefabHash":-1081797501,"desc":"","name":"Shower (Powered)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"],["PipeLiquid","Output"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSign1x1":{"prefab":{"prefabName":"StructureSign1x1","prefabHash":879058460,"desc":"","name":"Sign 1x1"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSign2x1":{"prefab":{"prefabName":"StructureSign2x1","prefabHash":908320837,"desc":"","name":"Sign 2x1"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSingleBed":{"prefab":{"prefabName":"StructureSingleBed","prefabHash":-492611,"desc":"Description coming.","name":"Single Bed"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSleeper":{"prefab":{"prefabName":"StructureSleeper","prefabHash":-1467449329,"desc":"","name":"Sleeper"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperLeft":{"prefab":{"prefabName":"StructureSleeperLeft","prefabHash":1213495833,"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.","name":"Sleeper Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperRight":{"prefab":{"prefabName":"StructureSleeperRight","prefabHash":-1812330717,"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.","name":"Sleeper Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperVertical":{"prefab":{"prefabName":"StructureSleeperVertical","prefabHash":-1300059018,"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.","name":"Sleeper Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperVerticalDroid":{"prefab":{"prefabName":"StructureSleeperVerticalDroid","prefabHash":1382098999,"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.","name":"Droid Sleeper Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSmallDirectHeatExchangeGastoGas":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeGastoGas","prefabHash":1310303582,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Input"],["Pipe","Input2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallDirectHeatExchangeLiquidtoGas":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeLiquidtoGas","prefabHash":1825212016,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Gas "},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["Pipe","Input2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeLiquidtoLiquid","prefabHash":-507770416,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Input"],["PipeLiquid","Input2"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallSatelliteDish":{"prefab":{"prefabName":"StructureSmallSatelliteDish","prefabHash":-2138748650,"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.","name":"Small Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSmallTableBacklessDouble":{"prefab":{"prefabName":"StructureSmallTableBacklessDouble","prefabHash":-1633000411,"desc":"","name":"Small (Table Backless Double)"},"structure":{"smallGrid":true}},"StructureSmallTableBacklessSingle":{"prefab":{"prefabName":"StructureSmallTableBacklessSingle","prefabHash":-1897221677,"desc":"","name":"Small (Table Backless Single)"},"structure":{"smallGrid":true}},"StructureSmallTableDinnerSingle":{"prefab":{"prefabName":"StructureSmallTableDinnerSingle","prefabHash":1260651529,"desc":"","name":"Small (Table Dinner Single)"},"structure":{"smallGrid":true}},"StructureSmallTableRectangleDouble":{"prefab":{"prefabName":"StructureSmallTableRectangleDouble","prefabHash":-660451023,"desc":"","name":"Small (Table Rectangle Double)"},"structure":{"smallGrid":true}},"StructureSmallTableRectangleSingle":{"prefab":{"prefabName":"StructureSmallTableRectangleSingle","prefabHash":-924678969,"desc":"","name":"Small (Table Rectangle Single)"},"structure":{"smallGrid":true}},"StructureSmallTableThickDouble":{"prefab":{"prefabName":"StructureSmallTableThickDouble","prefabHash":-19246131,"desc":"","name":"Small (Table Thick Double)"},"structure":{"smallGrid":true}},"StructureSmallTableThickSingle":{"prefab":{"prefabName":"StructureSmallTableThickSingle","prefabHash":-291862981,"desc":"","name":"Small Table (Thick Single)"},"structure":{"smallGrid":true}},"StructureSolarPanel":{"prefab":{"prefabName":"StructureSolarPanel","prefabHash":-2045627372,"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.","name":"Solar Panel"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanel45":{"prefab":{"prefabName":"StructureSolarPanel45","prefabHash":-1554349863,"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.","name":"Solar Panel (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanel45Reinforced":{"prefab":{"prefabName":"StructureSolarPanel45Reinforced","prefabHash":930865127,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelDual":{"prefab":{"prefabName":"StructureSolarPanelDual","prefabHash":-539224550,"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.","name":"Solar Panel (Dual)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelDualReinforced":{"prefab":{"prefabName":"StructureSolarPanelDualReinforced","prefabHash":-1545574413,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Dual)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelFlat":{"prefab":{"prefabName":"StructureSolarPanelFlat","prefabHash":1968102968,"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.","name":"Solar Panel (Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelFlatReinforced":{"prefab":{"prefabName":"StructureSolarPanelFlatReinforced","prefabHash":1697196770,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelReinforced":{"prefab":{"prefabName":"StructureSolarPanelReinforced","prefabHash":-934345724,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolidFuelGenerator":{"prefab":{"prefabName":"StructureSolidFuelGenerator","prefabHash":813146305,"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.","name":"Generator (Solid Fuel)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","On":"ReadWrite","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"modes":{"0":"Not Generating","1":"Generating"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Input","typ":"Ore"}],"device":{"connectionList":[["Chute","Input"],["Data","None"],["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSorter":{"prefab":{"prefabName":"StructureSorter","prefabHash":-1009150565,"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.","name":"Sorter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[["Chute","Output2"],["Chute","Input"],["Chute","Output"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStacker":{"prefab":{"prefabName":"StructureStacker","prefabHash":-2020231820,"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.","name":"Stacker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Processing","typ":"None"}],"device":{"connectionList":[["PowerAndData","None"],["Chute","Output"],["Chute","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStackerReverse":{"prefab":{"prefabName":"StructureStackerReverse","prefabHash":1585641623,"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.","name":"Stacker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["PowerAndData","None"],["Chute","Output"],["Chute","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStairs4x2":{"prefab":{"prefabName":"StructureStairs4x2","prefabHash":1405018945,"desc":"","name":"Stairs"},"structure":{"smallGrid":false}},"StructureStairs4x2RailL":{"prefab":{"prefabName":"StructureStairs4x2RailL","prefabHash":155214029,"desc":"","name":"Stairs with Rail (Left)"},"structure":{"smallGrid":false}},"StructureStairs4x2RailR":{"prefab":{"prefabName":"StructureStairs4x2RailR","prefabHash":-212902482,"desc":"","name":"Stairs with Rail (Right)"},"structure":{"smallGrid":false}},"StructureStairs4x2Rails":{"prefab":{"prefabName":"StructureStairs4x2Rails","prefabHash":-1088008720,"desc":"","name":"Stairs with Rails"},"structure":{"smallGrid":false}},"StructureStairwellBackLeft":{"prefab":{"prefabName":"StructureStairwellBackLeft","prefabHash":505924160,"desc":"","name":"Stairwell (Back Left)"},"structure":{"smallGrid":false}},"StructureStairwellBackPassthrough":{"prefab":{"prefabName":"StructureStairwellBackPassthrough","prefabHash":-862048392,"desc":"","name":"Stairwell (Back Passthrough)"},"structure":{"smallGrid":false}},"StructureStairwellBackRight":{"prefab":{"prefabName":"StructureStairwellBackRight","prefabHash":-2128896573,"desc":"","name":"Stairwell (Back Right)"},"structure":{"smallGrid":false}},"StructureStairwellFrontLeft":{"prefab":{"prefabName":"StructureStairwellFrontLeft","prefabHash":-37454456,"desc":"","name":"Stairwell (Front Left)"},"structure":{"smallGrid":false}},"StructureStairwellFrontPassthrough":{"prefab":{"prefabName":"StructureStairwellFrontPassthrough","prefabHash":-1625452928,"desc":"","name":"Stairwell (Front Passthrough)"},"structure":{"smallGrid":false}},"StructureStairwellFrontRight":{"prefab":{"prefabName":"StructureStairwellFrontRight","prefabHash":340210934,"desc":"","name":"Stairwell (Front Right)"},"structure":{"smallGrid":false}},"StructureStairwellNoDoors":{"prefab":{"prefabName":"StructureStairwellNoDoors","prefabHash":2049879875,"desc":"","name":"Stairwell (No Doors)"},"structure":{"smallGrid":false}},"StructureStirlingEngine":{"prefab":{"prefabName":"StructureStirlingEngine","prefabHash":-260316435,"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.","name":"Stirling Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connectionList":[["Data","None"],["Pipe","Input"],["Pipe","Output"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStorageLocker":{"prefab":{"prefabName":"StructureStorageLocker","prefabHash":-793623899,"desc":"","name":"Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSuitStorage":{"prefab":{"prefabName":"StructureSuitStorage","prefabHash":255034731,"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.","name":"Suit Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Helmet","typ":"Helmet"},{"name":"Suit","typ":"Suit"},{"name":"Back","typ":"Back"}],"device":{"connectionList":[["Data","None"],["Power","None"],["Pipe","Input"],["Pipe","Input2"],["Pipe","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTankBig":{"prefab":{"prefabName":"StructureTankBig","prefabHash":-1606848156,"desc":"","name":"Large Tank"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankBigInsulated":{"prefab":{"prefabName":"StructureTankBigInsulated","prefabHash":1280378227,"desc":"","name":"Tank Big (Insulated)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankConnector":{"prefab":{"prefabName":"StructureTankConnector","prefabHash":-1276379454,"desc":"Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network.","name":"Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructureTankConnectorLiquid":{"prefab":{"prefabName":"StructureTankConnectorLiquid","prefabHash":1331802518,"desc":"These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network.","name":"Liquid Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureTankSmall":{"prefab":{"prefabName":"StructureTankSmall","prefabHash":1013514688,"desc":"","name":"Small Tank"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallAir":{"prefab":{"prefabName":"StructureTankSmallAir","prefabHash":955744474,"desc":"","name":"Small Tank (Air)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallFuel":{"prefab":{"prefabName":"StructureTankSmallFuel","prefabHash":2102454415,"desc":"","name":"Small Tank (Fuel)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","None"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallInsulated":{"prefab":{"prefabName":"StructureTankSmallInsulated","prefabHash":272136332,"desc":"","name":"Tank Small (Insulated)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureToolManufactory":{"prefab":{"prefabName":"StructureToolManufactory","prefabHash":-465741100,"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.","name":"Tool Manufactory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureTorpedoRack":{"prefab":{"prefabName":"StructureTorpedoRack","prefabHash":1473807953,"desc":"","name":"Torpedo Rack"},"structure":{"smallGrid":true},"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"}]},"StructureTraderWaypoint":{"prefab":{"prefabName":"StructureTraderWaypoint","prefabHash":1570931620,"desc":"","name":"Trader Waypoint"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformer":{"prefab":{"prefabName":"StructureTransformer","prefabHash":-1423212473,"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.","name":"Transformer (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","Input"],["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerMedium":{"prefab":{"prefabName":"StructureTransformerMedium","prefabHash":-1065725831,"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.","name":"Transformer (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","Input"],["PowerAndData","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerMediumReversed":{"prefab":{"prefabName":"StructureTransformerMediumReversed","prefabHash":833912764,"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.","name":"Transformer Reversed (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","Output"],["PowerAndData","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerSmall":{"prefab":{"prefabName":"StructureTransformerSmall","prefabHash":-890946730,"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.","name":"Transformer (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","Input"],["Power","Output"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerSmallReversed":{"prefab":{"prefabName":"StructureTransformerSmallReversed","prefabHash":1054059374,"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.","name":"Transformer Reversed (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","Output"],["PowerAndData","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTurbineGenerator":{"prefab":{"prefabName":"StructureTurbineGenerator","prefabHash":1282191063,"desc":"","name":"Turbine Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureTurboVolumePump":{"prefab":{"prefabName":"StructureTurboVolumePump","prefabHash":1310794736,"desc":"Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"],["Pipe","Output"],["Pipe","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureUnloader":{"prefab":{"prefabName":"StructureUnloader","prefabHash":750118160,"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.","name":"Unloader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[["PowerAndData","None"],["Chute","Output"],["Chute","Input"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureUprightWindTurbine":{"prefab":{"prefabName":"StructureUprightWindTurbine","prefabHash":1622183451,"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.","name":"Upright Wind Turbine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureValve":{"prefab":{"prefabName":"StructureValve","prefabHash":-692036078,"desc":"","name":"Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","None"],["Pipe","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureVendingMachine":{"prefab":{"prefabName":"StructureVendingMachine","prefabHash":-443130773,"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.","name":"Vending Machine"},"structure":{"smallGrid":true},"logic":{"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":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[["Chute","Input"],["Chute","Output"],["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureVolumePump":{"prefab":{"prefabName":"StructureVolumePump","prefabHash":-321403609,"desc":"The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks.","name":"Volume Pump"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Pipe","Output"],["Pipe","Input"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallArch":{"prefab":{"prefabName":"StructureWallArch","prefabHash":-858143148,"desc":"","name":"Wall (Arch)"},"structure":{"smallGrid":false}},"StructureWallArchArrow":{"prefab":{"prefabName":"StructureWallArchArrow","prefabHash":1649708822,"desc":"","name":"Wall (Arch Arrow)"},"structure":{"smallGrid":false}},"StructureWallArchCornerRound":{"prefab":{"prefabName":"StructureWallArchCornerRound","prefabHash":1794588890,"desc":"","name":"Wall (Arch Corner Round)"},"structure":{"smallGrid":true}},"StructureWallArchCornerSquare":{"prefab":{"prefabName":"StructureWallArchCornerSquare","prefabHash":-1963016580,"desc":"","name":"Wall (Arch Corner Square)"},"structure":{"smallGrid":true}},"StructureWallArchCornerTriangle":{"prefab":{"prefabName":"StructureWallArchCornerTriangle","prefabHash":1281911841,"desc":"","name":"Wall (Arch Corner Triangle)"},"structure":{"smallGrid":true}},"StructureWallArchPlating":{"prefab":{"prefabName":"StructureWallArchPlating","prefabHash":1182510648,"desc":"","name":"Wall (Arch Plating)"},"structure":{"smallGrid":false}},"StructureWallArchTwoTone":{"prefab":{"prefabName":"StructureWallArchTwoTone","prefabHash":782529714,"desc":"","name":"Wall (Arch Two Tone)"},"structure":{"smallGrid":false}},"StructureWallCooler":{"prefab":{"prefabName":"StructureWallCooler","prefabHash":-739292323,"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.","name":"Wall Cooler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[["Pipe","None"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallFlat":{"prefab":{"prefabName":"StructureWallFlat","prefabHash":1635864154,"desc":"","name":"Wall (Flat)"},"structure":{"smallGrid":false}},"StructureWallFlatCornerRound":{"prefab":{"prefabName":"StructureWallFlatCornerRound","prefabHash":898708250,"desc":"","name":"Wall (Flat Corner Round)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerSquare":{"prefab":{"prefabName":"StructureWallFlatCornerSquare","prefabHash":298130111,"desc":"","name":"Wall (Flat Corner Square)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerTriangle":{"prefab":{"prefabName":"StructureWallFlatCornerTriangle","prefabHash":2097419366,"desc":"","name":"Wall (Flat Corner Triangle)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerTriangleFlat":{"prefab":{"prefabName":"StructureWallFlatCornerTriangleFlat","prefabHash":-1161662836,"desc":"","name":"Wall (Flat Corner Triangle Flat)"},"structure":{"smallGrid":true}},"StructureWallGeometryCorner":{"prefab":{"prefabName":"StructureWallGeometryCorner","prefabHash":1979212240,"desc":"","name":"Wall (Geometry Corner)"},"structure":{"smallGrid":false}},"StructureWallGeometryStreight":{"prefab":{"prefabName":"StructureWallGeometryStreight","prefabHash":1049735537,"desc":"","name":"Wall (Geometry Straight)"},"structure":{"smallGrid":false}},"StructureWallGeometryT":{"prefab":{"prefabName":"StructureWallGeometryT","prefabHash":1602758612,"desc":"","name":"Wall (Geometry T)"},"structure":{"smallGrid":false}},"StructureWallGeometryTMirrored":{"prefab":{"prefabName":"StructureWallGeometryTMirrored","prefabHash":-1427845483,"desc":"","name":"Wall (Geometry T Mirrored)"},"structure":{"smallGrid":false}},"StructureWallHeater":{"prefab":{"prefabName":"StructureWallHeater","prefabHash":24258244,"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.","name":"Wall Heater"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallIron":{"prefab":{"prefabName":"StructureWallIron","prefabHash":1287324802,"desc":"","name":"Iron Wall (Type 1)"},"structure":{"smallGrid":false}},"StructureWallIron02":{"prefab":{"prefabName":"StructureWallIron02","prefabHash":1485834215,"desc":"","name":"Iron Wall (Type 2)"},"structure":{"smallGrid":false}},"StructureWallIron03":{"prefab":{"prefabName":"StructureWallIron03","prefabHash":798439281,"desc":"","name":"Iron Wall (Type 3)"},"structure":{"smallGrid":false}},"StructureWallIron04":{"prefab":{"prefabName":"StructureWallIron04","prefabHash":-1309433134,"desc":"","name":"Iron Wall (Type 4)"},"structure":{"smallGrid":false}},"StructureWallLargePanel":{"prefab":{"prefabName":"StructureWallLargePanel","prefabHash":1492930217,"desc":"","name":"Wall (Large Panel)"},"structure":{"smallGrid":false}},"StructureWallLargePanelArrow":{"prefab":{"prefabName":"StructureWallLargePanelArrow","prefabHash":-776581573,"desc":"","name":"Wall (Large Panel Arrow)"},"structure":{"smallGrid":false}},"StructureWallLight":{"prefab":{"prefabName":"StructureWallLight","prefabHash":-1860064656,"desc":"","name":"Wall Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallLightBattery":{"prefab":{"prefabName":"StructureWallLightBattery","prefabHash":-1306415132,"desc":"","name":"Wall Light (Battery)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallPaddedArch":{"prefab":{"prefabName":"StructureWallPaddedArch","prefabHash":1590330637,"desc":"","name":"Wall (Padded Arch)"},"structure":{"smallGrid":false}},"StructureWallPaddedArchCorner":{"prefab":{"prefabName":"StructureWallPaddedArchCorner","prefabHash":-1126688298,"desc":"","name":"Wall (Padded Arch Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedArchLightFittingTop":{"prefab":{"prefabName":"StructureWallPaddedArchLightFittingTop","prefabHash":1171987947,"desc":"","name":"Wall (Padded Arch Light Fitting Top)"},"structure":{"smallGrid":false}},"StructureWallPaddedArchLightsFittings":{"prefab":{"prefabName":"StructureWallPaddedArchLightsFittings","prefabHash":-1546743960,"desc":"","name":"Wall (Padded Arch Lights Fittings)"},"structure":{"smallGrid":false}},"StructureWallPaddedCorner":{"prefab":{"prefabName":"StructureWallPaddedCorner","prefabHash":-155945899,"desc":"","name":"Wall (Padded Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedCornerThin":{"prefab":{"prefabName":"StructureWallPaddedCornerThin","prefabHash":1183203913,"desc":"","name":"Wall (Padded Corner Thin)"},"structure":{"smallGrid":true}},"StructureWallPaddedNoBorder":{"prefab":{"prefabName":"StructureWallPaddedNoBorder","prefabHash":8846501,"desc":"","name":"Wall (Padded No Border)"},"structure":{"smallGrid":false}},"StructureWallPaddedNoBorderCorner":{"prefab":{"prefabName":"StructureWallPaddedNoBorderCorner","prefabHash":179694804,"desc":"","name":"Wall (Padded No Border Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedThinNoBorder":{"prefab":{"prefabName":"StructureWallPaddedThinNoBorder","prefabHash":-1611559100,"desc":"","name":"Wall (Padded Thin No Border)"},"structure":{"smallGrid":false}},"StructureWallPaddedThinNoBorderCorner":{"prefab":{"prefabName":"StructureWallPaddedThinNoBorderCorner","prefabHash":1769527556,"desc":"","name":"Wall (Padded Thin No Border Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedWindow":{"prefab":{"prefabName":"StructureWallPaddedWindow","prefabHash":2087628940,"desc":"","name":"Wall (Padded Window)"},"structure":{"smallGrid":false}},"StructureWallPaddedWindowThin":{"prefab":{"prefabName":"StructureWallPaddedWindowThin","prefabHash":-37302931,"desc":"","name":"Wall (Padded Window Thin)"},"structure":{"smallGrid":false}},"StructureWallPadding":{"prefab":{"prefabName":"StructureWallPadding","prefabHash":635995024,"desc":"","name":"Wall (Padding)"},"structure":{"smallGrid":false}},"StructureWallPaddingArchVent":{"prefab":{"prefabName":"StructureWallPaddingArchVent","prefabHash":-1243329828,"desc":"","name":"Wall (Padding Arch Vent)"},"structure":{"smallGrid":false}},"StructureWallPaddingLightFitting":{"prefab":{"prefabName":"StructureWallPaddingLightFitting","prefabHash":2024882687,"desc":"","name":"Wall (Padding Light Fitting)"},"structure":{"smallGrid":false}},"StructureWallPaddingThin":{"prefab":{"prefabName":"StructureWallPaddingThin","prefabHash":-1102403554,"desc":"","name":"Wall (Padding Thin)"},"structure":{"smallGrid":false}},"StructureWallPlating":{"prefab":{"prefabName":"StructureWallPlating","prefabHash":26167457,"desc":"","name":"Wall (Plating)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsAndHatch":{"prefab":{"prefabName":"StructureWallSmallPanelsAndHatch","prefabHash":619828719,"desc":"","name":"Wall (Small Panels And Hatch)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsArrow":{"prefab":{"prefabName":"StructureWallSmallPanelsArrow","prefabHash":-639306697,"desc":"","name":"Wall (Small Panels Arrow)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsMonoChrome":{"prefab":{"prefabName":"StructureWallSmallPanelsMonoChrome","prefabHash":386820253,"desc":"","name":"Wall (Small Panels Mono Chrome)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsOpen":{"prefab":{"prefabName":"StructureWallSmallPanelsOpen","prefabHash":-1407480603,"desc":"","name":"Wall (Small Panels Open)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsTwoTone":{"prefab":{"prefabName":"StructureWallSmallPanelsTwoTone","prefabHash":1709994581,"desc":"","name":"Wall (Small Panels Two Tone)"},"structure":{"smallGrid":false}},"StructureWallVent":{"prefab":{"prefabName":"StructureWallVent","prefabHash":-1177469307,"desc":"Used to mix atmospheres passively between two walls.","name":"Wall Vent"},"structure":{"smallGrid":true}},"StructureWaterBottleFiller":{"prefab":{"prefabName":"StructureWaterBottleFiller","prefabHash":-1178961954,"desc":"","name":"Water Bottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[["PipeLiquid","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerBottom":{"prefab":{"prefabName":"StructureWaterBottleFillerBottom","prefabHash":1433754995,"desc":"","name":"Water Bottle Filler Bottom"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[["PipeLiquid","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerPowered":{"prefab":{"prefabName":"StructureWaterBottleFillerPowered","prefabHash":-756587791,"desc":"","name":"Waterbottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[["PipeLiquid","Input"],["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerPoweredBottom":{"prefab":{"prefabName":"StructureWaterBottleFillerPoweredBottom","prefabHash":1986658780,"desc":"","name":"Waterbottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[["PipeLiquid","None"],["PowerAndData","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterDigitalValve":{"prefab":{"prefabName":"StructureWaterDigitalValve","prefabHash":-517628750,"desc":"","name":"Liquid Digital Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["PipeLiquid","Output"],["PipeLiquid","Input"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterPipeMeter":{"prefab":{"prefabName":"StructureWaterPipeMeter","prefabHash":433184168,"desc":"","name":"Liquid Pipe Meter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterPurifier":{"prefab":{"prefabName":"StructureWaterPurifier","prefabHash":887383294,"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.","name":"Water Purifier"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ImportCount":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connectionList":[["Data","None"],["PipeLiquid","Input"],["PipeLiquid","Output"],["Power","None"],["Chute","Input"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterWallCooler":{"prefab":{"prefabName":"StructureWaterWallCooler","prefabHash":-1369060582,"desc":"","name":"Liquid Wall Cooler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[["PipeLiquid","None"],["PowerAndData","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWeatherStation":{"prefab":{"prefabName":"StructureWeatherStation","prefabHash":1997212478,"desc":"0.NoStorm\n1.StormIncoming\n2.InStorm","name":"Weather Station"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWindTurbine":{"prefab":{"prefabName":"StructureWindTurbine","prefabHash":-2082355173,"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.","name":"Wind Turbine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Power","None"],["Data","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWindowShutter":{"prefab":{"prefabName":"StructureWindowShutter","prefabHash":2056377335,"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.","name":"Window Shutter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[["Data","None"],["Power","None"]],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"ToolPrinterMod":{"prefab":{"prefabName":"ToolPrinterMod","prefabHash":1700018136,"desc":"Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Tool Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ToyLuna":{"prefab":{"prefabName":"ToyLuna","prefabHash":94730034,"desc":"","name":"Toy Luna"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"UniformCommander":{"prefab":{"prefabName":"UniformCommander","prefabHash":-2083426457,"desc":"","name":"Uniform Commander"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformMarine":{"prefab":{"prefabName":"UniformMarine","prefabHash":-48342840,"desc":"","name":"Marine Uniform"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformOrangeJumpSuit":{"prefab":{"prefabName":"UniformOrangeJumpSuit","prefabHash":810053150,"desc":"","name":"Jump Suit (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"WeaponEnergy":{"prefab":{"prefabName":"WeaponEnergy","prefabHash":789494694,"desc":"","name":"Weapon Energy"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponPistolEnergy":{"prefab":{"prefabName":"WeaponPistolEnergy","prefabHash":-385323479,"desc":"0.Stun\n1.Kill","name":"Energy Pistol"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponRifleEnergy":{"prefab":{"prefabName":"WeaponRifleEnergy","prefabHash":1154745374,"desc":"0.Stun\n1.Kill","name":"Energy Rifle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponTorpedo":{"prefab":{"prefabName":"WeaponTorpedo","prefabHash":-1102977898,"desc":"","name":"Torpedo"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Torpedo","sortingClass":"Default"}}},"reagents":{"Alcohol":{"Hash":1565803737,"Unit":"ml","Sources":null},"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","Sources":null},"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","Sources":null},"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}}},"enums":{"scriptEnums":{"LogicBatchMethod":{"enumName":"LogicBatchMethod","values":{"Average":{"value":0,"deprecated":false,"description":""},"Maximum":{"value":3,"deprecated":false,"description":""},"Minimum":{"value":2,"deprecated":false,"description":""},"Sum":{"value":1,"deprecated":false,"description":""}}},"LogicReagentMode":{"enumName":"LogicReagentMode","values":{"Contents":{"value":0,"deprecated":false,"description":""},"Recipe":{"value":2,"deprecated":false,"description":""},"Required":{"value":1,"deprecated":false,"description":""},"TotalContents":{"value":3,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}}},"basicEnums":{"AirCon":{"enumName":"AirConditioningMode","values":{"Cold":{"value":0,"deprecated":false,"description":""},"Hot":{"value":1,"deprecated":false,"description":""}}},"AirControl":{"enumName":"AirControlMode","values":{"Draught":{"value":4,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Offline":{"value":1,"deprecated":false,"description":""},"Pressure":{"value":2,"deprecated":false,"description":""}}},"Color":{"enumName":"ColorType","values":{"Black":{"value":7,"deprecated":false,"description":""},"Blue":{"value":0,"deprecated":false,"description":""},"Brown":{"value":8,"deprecated":false,"description":""},"Gray":{"value":1,"deprecated":false,"description":""},"Green":{"value":2,"deprecated":false,"description":""},"Khaki":{"value":9,"deprecated":false,"description":""},"Orange":{"value":3,"deprecated":false,"description":""},"Pink":{"value":10,"deprecated":false,"description":""},"Purple":{"value":11,"deprecated":false,"description":""},"Red":{"value":4,"deprecated":false,"description":""},"White":{"value":6,"deprecated":false,"description":""},"Yellow":{"value":5,"deprecated":false,"description":""}}},"DaylightSensorMode":{"enumName":"DaylightSensorMode","values":{"Default":{"value":0,"deprecated":false,"description":""},"Horizontal":{"value":1,"deprecated":false,"description":""},"Vertical":{"value":2,"deprecated":false,"description":""}}},"ElevatorMode":{"enumName":"ElevatorMode","values":{"Downward":{"value":2,"deprecated":false,"description":""},"Stationary":{"value":0,"deprecated":false,"description":""},"Upward":{"value":1,"deprecated":false,"description":""}}},"EntityState":{"enumName":"EntityState","values":{"Alive":{"value":0,"deprecated":false,"description":""},"Dead":{"value":1,"deprecated":false,"description":""},"Decay":{"value":3,"deprecated":false,"description":""},"Unconscious":{"value":2,"deprecated":false,"description":""}}},"GasType":{"enumName":"GasType","values":{"CarbonDioxide":{"value":4,"deprecated":false,"description":""},"Hydrogen":{"value":16384,"deprecated":false,"description":""},"LiquidCarbonDioxide":{"value":2048,"deprecated":false,"description":""},"LiquidHydrogen":{"value":32768,"deprecated":false,"description":""},"LiquidNitrogen":{"value":128,"deprecated":false,"description":""},"LiquidNitrousOxide":{"value":8192,"deprecated":false,"description":""},"LiquidOxygen":{"value":256,"deprecated":false,"description":""},"LiquidPollutant":{"value":4096,"deprecated":false,"description":""},"LiquidVolatiles":{"value":512,"deprecated":false,"description":""},"Nitrogen":{"value":2,"deprecated":false,"description":""},"NitrousOxide":{"value":64,"deprecated":false,"description":""},"Oxygen":{"value":1,"deprecated":false,"description":""},"Pollutant":{"value":16,"deprecated":false,"description":""},"PollutedWater":{"value":65536,"deprecated":false,"description":""},"Steam":{"value":1024,"deprecated":false,"description":""},"Undefined":{"value":0,"deprecated":false,"description":""},"Volatiles":{"value":8,"deprecated":false,"description":""},"Water":{"value":32,"deprecated":false,"description":""}}},"GasType_RocketMode":{"enumName":"RocketMode","values":{"Chart":{"value":5,"deprecated":false,"description":""},"Discover":{"value":4,"deprecated":false,"description":""},"Invalid":{"value":0,"deprecated":false,"description":""},"Mine":{"value":2,"deprecated":false,"description":""},"None":{"value":1,"deprecated":false,"description":""},"Survey":{"value":3,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}},"PowerMode":{"enumName":"PowerMode","values":{"Charged":{"value":4,"deprecated":false,"description":""},"Charging":{"value":3,"deprecated":false,"description":""},"Discharged":{"value":1,"deprecated":false,"description":""},"Discharging":{"value":2,"deprecated":false,"description":""},"Idle":{"value":0,"deprecated":false,"description":""}}},"ReEntryProfile":{"enumName":"ReEntryProfile","values":{"High":{"value":3,"deprecated":false,"description":""},"Max":{"value":4,"deprecated":false,"description":""},"Medium":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Optimal":{"value":1,"deprecated":false,"description":""}}},"RobotMode":{"enumName":"RobotMode","values":{"Follow":{"value":1,"deprecated":false,"description":""},"MoveToTarget":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"PathToTarget":{"value":5,"deprecated":false,"description":""},"Roam":{"value":3,"deprecated":false,"description":""},"StorageFull":{"value":6,"deprecated":false,"description":""},"Unload":{"value":4,"deprecated":false,"description":""}}},"SlotClass":{"enumName":"Class","values":{"AccessCard":{"value":22,"deprecated":false,"description":""},"Appliance":{"value":18,"deprecated":false,"description":""},"Back":{"value":3,"deprecated":false,"description":""},"Battery":{"value":14,"deprecated":false,"description":""},"Belt":{"value":16,"deprecated":false,"description":""},"Blocked":{"value":38,"deprecated":false,"description":""},"Bottle":{"value":25,"deprecated":false,"description":""},"Cartridge":{"value":21,"deprecated":false,"description":""},"Circuit":{"value":24,"deprecated":false,"description":""},"Circuitboard":{"value":7,"deprecated":false,"description":""},"CreditCard":{"value":28,"deprecated":false,"description":""},"DataDisk":{"value":8,"deprecated":false,"description":""},"DirtCanister":{"value":29,"deprecated":false,"description":""},"DrillHead":{"value":35,"deprecated":false,"description":""},"Egg":{"value":15,"deprecated":false,"description":""},"Entity":{"value":13,"deprecated":false,"description":""},"Flare":{"value":37,"deprecated":false,"description":""},"GasCanister":{"value":5,"deprecated":false,"description":""},"GasFilter":{"value":4,"deprecated":false,"description":""},"Glasses":{"value":27,"deprecated":false,"description":""},"Helmet":{"value":1,"deprecated":false,"description":""},"Ingot":{"value":19,"deprecated":false,"description":""},"LiquidBottle":{"value":32,"deprecated":false,"description":""},"LiquidCanister":{"value":31,"deprecated":false,"description":""},"Magazine":{"value":23,"deprecated":false,"description":""},"Motherboard":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Ore":{"value":10,"deprecated":false,"description":""},"Organ":{"value":9,"deprecated":false,"description":""},"Plant":{"value":11,"deprecated":false,"description":""},"ProgrammableChip":{"value":26,"deprecated":false,"description":""},"ScanningHead":{"value":36,"deprecated":false,"description":""},"SensorProcessingUnit":{"value":30,"deprecated":false,"description":""},"SoundCartridge":{"value":34,"deprecated":false,"description":""},"Suit":{"value":2,"deprecated":false,"description":""},"SuitMod":{"value":39,"deprecated":false,"description":""},"Tool":{"value":17,"deprecated":false,"description":""},"Torpedo":{"value":20,"deprecated":false,"description":""},"Uniform":{"value":12,"deprecated":false,"description":""},"Wreckage":{"value":33,"deprecated":false,"description":""}}},"SorterInstruction":{"enumName":"SorterInstruction","values":{"FilterPrefabHashEquals":{"value":1,"deprecated":false,"description":""},"FilterPrefabHashNotEquals":{"value":2,"deprecated":false,"description":""},"FilterQuantityCompare":{"value":5,"deprecated":false,"description":""},"FilterSlotTypeCompare":{"value":4,"deprecated":false,"description":""},"FilterSortingClassCompare":{"value":3,"deprecated":false,"description":""},"LimitNextExecutionByCount":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""}}},"SortingClass":{"enumName":"SortingClass","values":{"Appliances":{"value":6,"deprecated":false,"description":""},"Atmospherics":{"value":7,"deprecated":false,"description":""},"Clothing":{"value":5,"deprecated":false,"description":""},"Default":{"value":0,"deprecated":false,"description":""},"Food":{"value":4,"deprecated":false,"description":""},"Ices":{"value":10,"deprecated":false,"description":""},"Kits":{"value":1,"deprecated":false,"description":""},"Ores":{"value":9,"deprecated":false,"description":""},"Resources":{"value":3,"deprecated":false,"description":""},"Storage":{"value":8,"deprecated":false,"description":""},"Tools":{"value":2,"deprecated":false,"description":""}}},"Sound":{"enumName":"SoundAlert","values":{"AirlockCycling":{"value":22,"deprecated":false,"description":""},"Alarm1":{"value":45,"deprecated":false,"description":""},"Alarm10":{"value":12,"deprecated":false,"description":""},"Alarm11":{"value":13,"deprecated":false,"description":""},"Alarm12":{"value":14,"deprecated":false,"description":""},"Alarm2":{"value":1,"deprecated":false,"description":""},"Alarm3":{"value":2,"deprecated":false,"description":""},"Alarm4":{"value":3,"deprecated":false,"description":""},"Alarm5":{"value":4,"deprecated":false,"description":""},"Alarm6":{"value":5,"deprecated":false,"description":""},"Alarm7":{"value":6,"deprecated":false,"description":""},"Alarm8":{"value":10,"deprecated":false,"description":""},"Alarm9":{"value":11,"deprecated":false,"description":""},"Alert":{"value":17,"deprecated":false,"description":""},"Danger":{"value":15,"deprecated":false,"description":""},"Depressurising":{"value":20,"deprecated":false,"description":""},"FireFireFire":{"value":28,"deprecated":false,"description":""},"Five":{"value":33,"deprecated":false,"description":""},"Floor":{"value":34,"deprecated":false,"description":""},"Four":{"value":32,"deprecated":false,"description":""},"HaltWhoGoesThere":{"value":27,"deprecated":false,"description":""},"HighCarbonDioxide":{"value":44,"deprecated":false,"description":""},"IntruderAlert":{"value":19,"deprecated":false,"description":""},"LiftOff":{"value":36,"deprecated":false,"description":""},"MalfunctionDetected":{"value":26,"deprecated":false,"description":""},"Music1":{"value":7,"deprecated":false,"description":""},"Music2":{"value":8,"deprecated":false,"description":""},"Music3":{"value":9,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"One":{"value":29,"deprecated":false,"description":""},"PollutantsDetected":{"value":43,"deprecated":false,"description":""},"PowerLow":{"value":23,"deprecated":false,"description":""},"PressureHigh":{"value":39,"deprecated":false,"description":""},"PressureLow":{"value":40,"deprecated":false,"description":""},"Pressurising":{"value":21,"deprecated":false,"description":""},"RocketLaunching":{"value":35,"deprecated":false,"description":""},"StormIncoming":{"value":18,"deprecated":false,"description":""},"SystemFailure":{"value":24,"deprecated":false,"description":""},"TemperatureHigh":{"value":41,"deprecated":false,"description":""},"TemperatureLow":{"value":42,"deprecated":false,"description":""},"Three":{"value":31,"deprecated":false,"description":""},"TraderIncoming":{"value":37,"deprecated":false,"description":""},"TraderLanded":{"value":38,"deprecated":false,"description":""},"Two":{"value":30,"deprecated":false,"description":""},"Warning":{"value":16,"deprecated":false,"description":""},"Welcome":{"value":25,"deprecated":false,"description":""}}},"TransmitterMode":{"enumName":"LogicTransmitterMode","values":{"Active":{"value":1,"deprecated":false,"description":""},"Passive":{"value":0,"deprecated":false,"description":""}}},"Vent":{"enumName":"VentDirection","values":{"Inward":{"value":1,"deprecated":false,"description":""},"Outward":{"value":0,"deprecated":false,"description":""}}},"_unnamed":{"enumName":"ConditionOperation","values":{"Equals":{"value":0,"deprecated":false,"description":""},"Greater":{"value":1,"deprecated":false,"description":""},"Less":{"value":2,"deprecated":false,"description":""},"NotEquals":{"value":3,"deprecated":false,"description":""}}}}},"prefabsByHash":{"-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"},"structures":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","Flag_ODA_10m","Flag_ODA_4m","Flag_ODA_6m","Flag_ODA_8m","H2Combustor","KitchenTableShort","KitchenTableSimpleShort","KitchenTableSimpleTall","KitchenTableTall","Landingpad_2x2CenterPiece01","Landingpad_BlankPiece","Landingpad_CenterPiece01","Landingpad_CrossPiece","Landingpad_DataConnectionPiece","Landingpad_DiagonalPiece01","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_GasCylinderTankPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_StraightPiece01","Landingpad_TaxiPieceCorner","Landingpad_TaxiPieceHold","Landingpad_TaxiPieceStraight","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","RailingElegant01","RailingElegant02","RailingIndustrial02","RespawnPoint","RespawnPointWallMounted","Rover_MkI_build_states","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureBlocker","StructureCableAnalysizer","StructureCableCorner","StructureCableCorner3","StructureCableCorner3Burnt","StructureCableCorner3HBurnt","StructureCableCorner4","StructureCableCorner4Burnt","StructureCableCorner4HBurnt","StructureCableCornerBurnt","StructureCableCornerH","StructureCableCornerH3","StructureCableCornerH4","StructureCableCornerHBurnt","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCableJunction","StructureCableJunction4","StructureCableJunction4Burnt","StructureCableJunction4HBurnt","StructureCableJunction5","StructureCableJunction5Burnt","StructureCableJunction6","StructureCableJunction6Burnt","StructureCableJunction6HBurnt","StructureCableJunctionBurnt","StructureCableJunctionH","StructureCableJunctionH4","StructureCableJunctionH5","StructureCableJunctionH5Burnt","StructureCableJunctionH6","StructureCableJunctionHBurnt","StructureCableStraight","StructureCableStraightBurnt","StructureCableStraightH","StructureCableStraightHBurnt","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteCorner","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteFlipFlopSplitter","StructureChuteInlet","StructureChuteJunction","StructureChuteOutlet","StructureChuteOverflow","StructureChuteStraight","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureChuteValve","StructureChuteWindow","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeCladdingAngled","StructureCompositeCladdingAngledCorner","StructureCompositeCladdingAngledCornerInner","StructureCompositeCladdingAngledCornerInnerLong","StructureCompositeCladdingAngledCornerInnerLongL","StructureCompositeCladdingAngledCornerInnerLongR","StructureCompositeCladdingAngledCornerLong","StructureCompositeCladdingAngledCornerLongR","StructureCompositeCladdingAngledLong","StructureCompositeCladdingCylindrical","StructureCompositeCladdingCylindricalPanel","StructureCompositeCladdingPanel","StructureCompositeCladdingRounded","StructureCompositeCladdingRoundedCorner","StructureCompositeCladdingRoundedCornerInner","StructureCompositeCladdingSpherical","StructureCompositeCladdingSphericalCap","StructureCompositeCladdingSphericalCorner","StructureCompositeDoor","StructureCompositeFloorGrating","StructureCompositeFloorGrating2","StructureCompositeFloorGrating3","StructureCompositeFloorGrating4","StructureCompositeFloorGratingOpen","StructureCompositeFloorGratingOpenRotated","StructureCompositeWall","StructureCompositeWall02","StructureCompositeWall03","StructureCompositeWall04","StructureCompositeWindow","StructureCompositeWindowIron","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCrateMount","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEngineMountTypeA1","StructureEvaporationChamber","StructureExpansionValve","StructureFairingTypeA1","StructureFairingTypeA2","StructureFairingTypeA3","StructureFiltration","StructureFlagSmall","StructureFlashingLight","StructureFlatBench","StructureFloorDrain","StructureFrame","StructureFrameCorner","StructureFrameCornerCut","StructureFrameIron","StructureFrameSide","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureFuselageTypeA1","StructureFuselageTypeA2","StructureFuselageTypeA4","StructureFuselageTypeC5","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTray","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInLineTankGas1x1","StructureInLineTankGas1x2","StructureInLineTankLiquid1x1","StructureInLineTankLiquid1x2","StructureInsulatedInLineTankGas1x1","StructureInsulatedInLineTankGas1x2","StructureInsulatedInLineTankLiquid1x1","StructureInsulatedInLineTankLiquid1x2","StructureInsulatedPipeCorner","StructureInsulatedPipeCrossJunction","StructureInsulatedPipeCrossJunction3","StructureInsulatedPipeCrossJunction4","StructureInsulatedPipeCrossJunction5","StructureInsulatedPipeCrossJunction6","StructureInsulatedPipeLiquidCorner","StructureInsulatedPipeLiquidCrossJunction","StructureInsulatedPipeLiquidCrossJunction4","StructureInsulatedPipeLiquidCrossJunction5","StructureInsulatedPipeLiquidCrossJunction6","StructureInsulatedPipeLiquidStraight","StructureInsulatedPipeLiquidTJunction","StructureInsulatedPipeStraight","StructureInsulatedPipeTJunction","StructureInsulatedTankConnector","StructureInsulatedTankConnectorLiquid","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLadder","StructureLadderEnd","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLaunchMount","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassiveVent","StructurePassiveVentInsulated","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePictureFrameThickLandscapeLarge","StructurePictureFrameThickLandscapeSmall","StructurePictureFrameThickMountLandscapeLarge","StructurePictureFrameThickMountLandscapeSmall","StructurePictureFrameThickMountPortraitLarge","StructurePictureFrameThickMountPortraitSmall","StructurePictureFrameThickPortraitLarge","StructurePictureFrameThickPortraitSmall","StructurePictureFrameThinLandscapeLarge","StructurePictureFrameThinLandscapeSmall","StructurePictureFrameThinMountLandscapeLarge","StructurePictureFrameThinMountLandscapeSmall","StructurePictureFrameThinMountPortraitLarge","StructurePictureFrameThinMountPortraitSmall","StructurePictureFrameThinPortraitLarge","StructurePictureFrameThinPortraitSmall","StructurePipeAnalysizer","StructurePipeCorner","StructurePipeCowl","StructurePipeCrossJunction","StructurePipeCrossJunction3","StructurePipeCrossJunction4","StructurePipeCrossJunction5","StructurePipeCrossJunction6","StructurePipeHeater","StructurePipeIgniter","StructurePipeInsulatedLiquidCrossJunction","StructurePipeLabel","StructurePipeLiquidCorner","StructurePipeLiquidCrossJunction","StructurePipeLiquidCrossJunction3","StructurePipeLiquidCrossJunction4","StructurePipeLiquidCrossJunction5","StructurePipeLiquidCrossJunction6","StructurePipeLiquidStraight","StructurePipeLiquidTJunction","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeOrgan","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePipeStraight","StructurePipeTJunction","StructurePlanter","StructurePlatformLadderOpen","StructurePlinth","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRailing","StructureRecycler","StructureRefrigeratedVendingMachine","StructureReinforcedCompositeWindow","StructureReinforcedCompositeWindowSteel","StructureReinforcedWallPaddedWindow","StructureReinforcedWallPaddedWindowThin","StructureResearchMachine","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTower","StructureRocketTransformerSmall","StructureRover","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelf","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSmallTableBacklessDouble","StructureSmallTableBacklessSingle","StructureSmallTableDinnerSingle","StructureSmallTableRectangleDouble","StructureSmallTableRectangleSingle","StructureSmallTableThickDouble","StructureSmallTableThickSingle","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStairs4x2","StructureStairs4x2RailL","StructureStairs4x2RailR","StructureStairs4x2Rails","StructureStairwellBackLeft","StructureStairwellBackPassthrough","StructureStairwellBackRight","StructureStairwellFrontLeft","StructureStairwellFrontPassthrough","StructureStairwellFrontRight","StructureStairwellNoDoors","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankConnector","StructureTankConnectorLiquid","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTorpedoRack","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallArch","StructureWallArchArrow","StructureWallArchCornerRound","StructureWallArchCornerSquare","StructureWallArchCornerTriangle","StructureWallArchPlating","StructureWallArchTwoTone","StructureWallCooler","StructureWallFlat","StructureWallFlatCornerRound","StructureWallFlatCornerSquare","StructureWallFlatCornerTriangle","StructureWallFlatCornerTriangleFlat","StructureWallGeometryCorner","StructureWallGeometryStreight","StructureWallGeometryT","StructureWallGeometryTMirrored","StructureWallHeater","StructureWallIron","StructureWallIron02","StructureWallIron03","StructureWallIron04","StructureWallLargePanel","StructureWallLargePanelArrow","StructureWallLight","StructureWallLightBattery","StructureWallPaddedArch","StructureWallPaddedArchCorner","StructureWallPaddedArchLightFittingTop","StructureWallPaddedArchLightsFittings","StructureWallPaddedCorner","StructureWallPaddedCornerThin","StructureWallPaddedNoBorder","StructureWallPaddedNoBorderCorner","StructureWallPaddedThinNoBorder","StructureWallPaddedThinNoBorderCorner","StructureWallPaddedWindow","StructureWallPaddedWindowThin","StructureWallPadding","StructureWallPaddingArchVent","StructureWallPaddingLightFitting","StructureWallPaddingThin","StructureWallPlating","StructureWallSmallPanelsAndHatch","StructureWallSmallPanelsArrow","StructureWallSmallPanelsMonoChrome","StructureWallSmallPanelsOpen","StructureWallSmallPanelsTwoTone","StructureWallVent","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"devices":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","H2Combustor","Landingpad_DataConnectionPiece","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureCableAnalysizer","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteInlet","StructureChuteOutlet","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeDoor","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEvaporationChamber","StructureExpansionValve","StructureFiltration","StructureFlashingLight","StructureFlatBench","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePipeAnalysizer","StructurePipeHeater","StructurePipeIgniter","StructurePipeLabel","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRecycler","StructureRefrigeratedVendingMachine","StructureResearchMachine","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTransformerSmall","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallCooler","StructureWallHeater","StructureWallLight","StructureWallLightBattery","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"items":["AccessCardBlack","AccessCardBlue","AccessCardBrown","AccessCardGray","AccessCardGreen","AccessCardKhaki","AccessCardOrange","AccessCardPink","AccessCardPurple","AccessCardRed","AccessCardWhite","AccessCardYellow","ApplianceChemistryStation","ApplianceDeskLampLeft","ApplianceDeskLampRight","ApplianceMicrowave","AppliancePackagingMachine","AppliancePaintMixer","AppliancePlantGeneticAnalyzer","AppliancePlantGeneticSplicer","AppliancePlantGeneticStabilizer","ApplianceReagentProcessor","ApplianceSeedTray","ApplianceTabletDock","AutolathePrinterMod","Battery_Wireless_cell","Battery_Wireless_cell_Big","CardboardBox","CartridgeAccessController","CartridgeAtmosAnalyser","CartridgeConfiguration","CartridgeElectronicReader","CartridgeGPS","CartridgeGuide","CartridgeMedicalAnalyser","CartridgeNetworkAnalyser","CartridgeOreScanner","CartridgeOreScannerColor","CartridgePlantAnalyser","CartridgeTracker","CircuitboardAdvAirlockControl","CircuitboardAirControl","CircuitboardAirlockControl","CircuitboardCameraDisplay","CircuitboardDoorControl","CircuitboardGasDisplay","CircuitboardGraphDisplay","CircuitboardHashDisplay","CircuitboardModeControl","CircuitboardPowerControl","CircuitboardShipDisplay","CircuitboardSolarControl","CrateMkII","DecayedFood","DynamicAirConditioner","DynamicCrate","DynamicGPR","DynamicGasCanisterAir","DynamicGasCanisterCarbonDioxide","DynamicGasCanisterEmpty","DynamicGasCanisterFuel","DynamicGasCanisterNitrogen","DynamicGasCanisterNitrousOxide","DynamicGasCanisterOxygen","DynamicGasCanisterPollutants","DynamicGasCanisterRocketFuel","DynamicGasCanisterVolatiles","DynamicGasCanisterWater","DynamicGasTankAdvanced","DynamicGasTankAdvancedOxygen","DynamicGenerator","DynamicHydroponics","DynamicLight","DynamicLiquidCanisterEmpty","DynamicMKIILiquidCanisterEmpty","DynamicMKIILiquidCanisterWater","DynamicScrubber","DynamicSkeleton","ElectronicPrinterMod","ElevatorCarrage","EntityChick","EntityChickenBrown","EntityChickenWhite","EntityRoosterBlack","EntityRoosterBrown","Fertilizer","FireArmSMG","FlareGun","Handgun","HandgunMagazine","HumanSkull","ImGuiCircuitboardAirlockControl","ItemActiveVent","ItemAdhesiveInsulation","ItemAdvancedTablet","ItemAlienMushroom","ItemAmmoBox","ItemAngleGrinder","ItemArcWelder","ItemAreaPowerControl","ItemAstroloyIngot","ItemAstroloySheets","ItemAuthoringTool","ItemAuthoringToolRocketNetwork","ItemBasketBall","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBatteryCharger","ItemBatteryChargerSmall","ItemBeacon","ItemBiomass","ItemBreadLoaf","ItemCableAnalyser","ItemCableCoil","ItemCableCoilHeavy","ItemCableFuse","ItemCannedCondensedMilk","ItemCannedEdamame","ItemCannedMushroom","ItemCannedPowderedEggs","ItemCannedRicePudding","ItemCerealBar","ItemCharcoal","ItemChemLightBlue","ItemChemLightGreen","ItemChemLightRed","ItemChemLightWhite","ItemChemLightYellow","ItemCoalOre","ItemCobaltOre","ItemCoffeeMug","ItemConstantanIngot","ItemCookedCondensedMilk","ItemCookedCorn","ItemCookedMushroom","ItemCookedPowderedEggs","ItemCookedPumpkin","ItemCookedRice","ItemCookedSoybean","ItemCookedTomato","ItemCopperIngot","ItemCopperOre","ItemCorn","ItemCornSoup","ItemCreditCard","ItemCropHay","ItemCrowbar","ItemDataDisk","ItemDirtCanister","ItemDirtyOre","ItemDisposableBatteryCharger","ItemDrill","ItemDuctTape","ItemDynamicAirCon","ItemDynamicScrubber","ItemEggCarton","ItemElectronicParts","ItemElectrumIngot","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyCrowbar","ItemEmergencyDrill","ItemEmergencyEvaSuit","ItemEmergencyPickaxe","ItemEmergencyScrewdriver","ItemEmergencySpaceHelmet","ItemEmergencyToolBelt","ItemEmergencyWireCutters","ItemEmergencyWrench","ItemEmptyCan","ItemEvaSuit","ItemExplosive","ItemFern","ItemFertilizedEgg","ItemFilterFern","ItemFlagSmall","ItemFlashingLight","ItemFlashlight","ItemFlour","ItemFlowerBlue","ItemFlowerGreen","ItemFlowerOrange","ItemFlowerRed","ItemFlowerYellow","ItemFrenchFries","ItemFries","ItemGasCanisterCarbonDioxide","ItemGasCanisterEmpty","ItemGasCanisterFuel","ItemGasCanisterNitrogen","ItemGasCanisterNitrousOxide","ItemGasCanisterOxygen","ItemGasCanisterPollutants","ItemGasCanisterSmart","ItemGasCanisterVolatiles","ItemGasCanisterWater","ItemGasFilterCarbonDioxide","ItemGasFilterCarbonDioxideInfinite","ItemGasFilterCarbonDioxideL","ItemGasFilterCarbonDioxideM","ItemGasFilterNitrogen","ItemGasFilterNitrogenInfinite","ItemGasFilterNitrogenL","ItemGasFilterNitrogenM","ItemGasFilterNitrousOxide","ItemGasFilterNitrousOxideInfinite","ItemGasFilterNitrousOxideL","ItemGasFilterNitrousOxideM","ItemGasFilterOxygen","ItemGasFilterOxygenInfinite","ItemGasFilterOxygenL","ItemGasFilterOxygenM","ItemGasFilterPollutants","ItemGasFilterPollutantsInfinite","ItemGasFilterPollutantsL","ItemGasFilterPollutantsM","ItemGasFilterVolatiles","ItemGasFilterVolatilesInfinite","ItemGasFilterVolatilesL","ItemGasFilterVolatilesM","ItemGasFilterWater","ItemGasFilterWaterInfinite","ItemGasFilterWaterL","ItemGasFilterWaterM","ItemGasSensor","ItemGasTankStorage","ItemGlassSheets","ItemGlasses","ItemGoldIngot","ItemGoldOre","ItemGrenade","ItemHEMDroidRepairKit","ItemHardBackpack","ItemHardJetpack","ItemHardMiningBackPack","ItemHardSuit","ItemHardsuitHelmet","ItemHastelloyIngot","ItemHat","ItemHighVolumeGasCanisterEmpty","ItemHorticultureBelt","ItemHydroponicTray","ItemIce","ItemIgniter","ItemInconelIngot","ItemInsulation","ItemIntegratedCircuit10","ItemInvarIngot","ItemIronFrames","ItemIronIngot","ItemIronOre","ItemIronSheets","ItemJetpackBasic","ItemKitAIMeE","ItemKitAccessBridge","ItemKitAdvancedComposter","ItemKitAdvancedFurnace","ItemKitAdvancedPackagingMachine","ItemKitAirlock","ItemKitAirlockGate","ItemKitArcFurnace","ItemKitAtmospherics","ItemKitAutoMinerSmall","ItemKitAutolathe","ItemKitAutomatedOven","ItemKitBasket","ItemKitBattery","ItemKitBatteryLarge","ItemKitBeacon","ItemKitBeds","ItemKitBlastDoor","ItemKitCentrifuge","ItemKitChairs","ItemKitChute","ItemKitChuteUmbilical","ItemKitCompositeCladding","ItemKitCompositeFloorGrating","ItemKitComputer","ItemKitConsole","ItemKitCrate","ItemKitCrateMkII","ItemKitCrateMount","ItemKitCryoTube","ItemKitDeepMiner","ItemKitDockingPort","ItemKitDoor","ItemKitDrinkingFountain","ItemKitDynamicCanister","ItemKitDynamicGasTankAdvanced","ItemKitDynamicGenerator","ItemKitDynamicHydroponics","ItemKitDynamicLiquidCanister","ItemKitDynamicMKIILiquidCanister","ItemKitElectricUmbilical","ItemKitElectronicsPrinter","ItemKitElevator","ItemKitEngineLarge","ItemKitEngineMedium","ItemKitEngineSmall","ItemKitEvaporationChamber","ItemKitFlagODA","ItemKitFridgeBig","ItemKitFridgeSmall","ItemKitFurnace","ItemKitFurniture","ItemKitFuselage","ItemKitGasGenerator","ItemKitGasUmbilical","ItemKitGovernedGasRocketEngine","ItemKitGroundTelescope","ItemKitGrowLight","ItemKitHarvie","ItemKitHeatExchanger","ItemKitHorizontalAutoMiner","ItemKitHydraulicPipeBender","ItemKitHydroponicAutomated","ItemKitHydroponicStation","ItemKitIceCrusher","ItemKitInsulatedLiquidPipe","ItemKitInsulatedPipe","ItemKitInsulatedPipeUtility","ItemKitInsulatedPipeUtilityLiquid","ItemKitInteriorDoors","ItemKitLadder","ItemKitLandingPadAtmos","ItemKitLandingPadBasic","ItemKitLandingPadWaypoint","ItemKitLargeDirectHeatExchanger","ItemKitLargeExtendableRadiator","ItemKitLargeSatelliteDish","ItemKitLaunchMount","ItemKitLaunchTower","ItemKitLiquidRegulator","ItemKitLiquidTank","ItemKitLiquidTankInsulated","ItemKitLiquidTurboVolumePump","ItemKitLiquidUmbilical","ItemKitLocker","ItemKitLogicCircuit","ItemKitLogicInputOutput","ItemKitLogicMemory","ItemKitLogicProcessor","ItemKitLogicSwitch","ItemKitLogicTransmitter","ItemKitMotherShipCore","ItemKitMusicMachines","ItemKitPassiveLargeRadiatorGas","ItemKitPassiveLargeRadiatorLiquid","ItemKitPassthroughHeatExchanger","ItemKitPictureFrame","ItemKitPipe","ItemKitPipeLiquid","ItemKitPipeOrgan","ItemKitPipeRadiator","ItemKitPipeRadiatorLiquid","ItemKitPipeUtility","ItemKitPipeUtilityLiquid","ItemKitPlanter","ItemKitPortablesConnector","ItemKitPowerTransmitter","ItemKitPowerTransmitterOmni","ItemKitPoweredVent","ItemKitPressureFedGasEngine","ItemKitPressureFedLiquidEngine","ItemKitPressurePlate","ItemKitPumpedLiquidEngine","ItemKitRailing","ItemKitRecycler","ItemKitRegulator","ItemKitReinforcedWindows","ItemKitResearchMachine","ItemKitRespawnPointWallMounted","ItemKitRocketAvionics","ItemKitRocketBattery","ItemKitRocketCargoStorage","ItemKitRocketCelestialTracker","ItemKitRocketCircuitHousing","ItemKitRocketDatalink","ItemKitRocketGasFuelTank","ItemKitRocketLiquidFuelTank","ItemKitRocketManufactory","ItemKitRocketMiner","ItemKitRocketScanner","ItemKitRocketTransformerSmall","ItemKitRoverFrame","ItemKitRoverMKI","ItemKitSDBHopper","ItemKitSatelliteDish","ItemKitSecurityPrinter","ItemKitSensor","ItemKitShower","ItemKitSign","ItemKitSleeper","ItemKitSmallDirectHeatExchanger","ItemKitSmallSatelliteDish","ItemKitSolarPanel","ItemKitSolarPanelBasic","ItemKitSolarPanelBasicReinforced","ItemKitSolarPanelReinforced","ItemKitSolidGenerator","ItemKitSorter","ItemKitSpeaker","ItemKitStacker","ItemKitStairs","ItemKitStairwell","ItemKitStandardChute","ItemKitStirlingEngine","ItemKitSuitStorage","ItemKitTables","ItemKitTank","ItemKitTankInsulated","ItemKitToolManufactory","ItemKitTransformer","ItemKitTransformerSmall","ItemKitTurbineGenerator","ItemKitTurboVolumePump","ItemKitUprightWindTurbine","ItemKitVendingMachine","ItemKitVendingMachineRefrigerated","ItemKitWall","ItemKitWallArch","ItemKitWallFlat","ItemKitWallGeometry","ItemKitWallIron","ItemKitWallPadded","ItemKitWaterBottleFiller","ItemKitWaterPurifier","ItemKitWeatherStation","ItemKitWindTurbine","ItemKitWindowShutter","ItemLabeller","ItemLaptop","ItemLeadIngot","ItemLeadOre","ItemLightSword","ItemLiquidCanisterEmpty","ItemLiquidCanisterSmart","ItemLiquidDrain","ItemLiquidPipeAnalyzer","ItemLiquidPipeHeater","ItemLiquidPipeValve","ItemLiquidPipeVolumePump","ItemLiquidTankStorage","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIICrowbar","ItemMKIIDrill","ItemMKIIDuctTape","ItemMKIIMiningDrill","ItemMKIIScrewdriver","ItemMKIIWireCutters","ItemMKIIWrench","ItemMarineBodyArmor","ItemMarineHelmet","ItemMilk","ItemMiningBackPack","ItemMiningBelt","ItemMiningBeltMKII","ItemMiningCharge","ItemMiningDrill","ItemMiningDrillHeavy","ItemMiningDrillPneumatic","ItemMkIIToolbelt","ItemMuffin","ItemMushroom","ItemNVG","ItemNickelIngot","ItemNickelOre","ItemNitrice","ItemOxite","ItemPassiveVent","ItemPassiveVentInsulated","ItemPeaceLily","ItemPickaxe","ItemPillHeal","ItemPillStun","ItemPipeAnalyizer","ItemPipeCowl","ItemPipeDigitalValve","ItemPipeGasMixer","ItemPipeHeater","ItemPipeIgniter","ItemPipeLabel","ItemPipeLiquidRadiator","ItemPipeMeter","ItemPipeRadiator","ItemPipeValve","ItemPipeVolumePump","ItemPlantEndothermic_Creative","ItemPlantEndothermic_Genepool1","ItemPlantEndothermic_Genepool2","ItemPlantSampler","ItemPlantSwitchGrass","ItemPlantThermogenic_Creative","ItemPlantThermogenic_Genepool1","ItemPlantThermogenic_Genepool2","ItemPlasticSheets","ItemPotato","ItemPotatoBaked","ItemPowerConnector","ItemPumpkin","ItemPumpkinPie","ItemPumpkinSoup","ItemPureIce","ItemPureIceCarbonDioxide","ItemPureIceHydrogen","ItemPureIceLiquidCarbonDioxide","ItemPureIceLiquidHydrogen","ItemPureIceLiquidNitrogen","ItemPureIceLiquidNitrous","ItemPureIceLiquidOxygen","ItemPureIceLiquidPollutant","ItemPureIceLiquidVolatiles","ItemPureIceNitrogen","ItemPureIceNitrous","ItemPureIceOxygen","ItemPureIcePollutant","ItemPureIcePollutedWater","ItemPureIceSteam","ItemPureIceVolatiles","ItemRTG","ItemRTGSurvival","ItemReagentMix","ItemRemoteDetonator","ItemResearchCapsule","ItemResearchCapsuleGreen","ItemResearchCapsuleRed","ItemResearchCapsuleYellow","ItemReusableFireExtinguisher","ItemRice","ItemRoadFlare","ItemRocketMiningDrillHead","ItemRocketMiningDrillHeadDurable","ItemRocketMiningDrillHeadHighSpeedIce","ItemRocketMiningDrillHeadHighSpeedMineral","ItemRocketMiningDrillHeadIce","ItemRocketMiningDrillHeadLongTerm","ItemRocketMiningDrillHeadMineral","ItemRocketScanningHead","ItemScanner","ItemScrewdriver","ItemSecurityCamera","ItemSensorLenses","ItemSensorProcessingUnitCelestialScanner","ItemSensorProcessingUnitMesonScanner","ItemSensorProcessingUnitOreScanner","ItemSiliconIngot","ItemSiliconOre","ItemSilverIngot","ItemSilverOre","ItemSolderIngot","ItemSolidFuel","ItemSoundCartridgeBass","ItemSoundCartridgeDrums","ItemSoundCartridgeLeads","ItemSoundCartridgeSynth","ItemSoyOil","ItemSoybean","ItemSpaceCleaner","ItemSpaceHelmet","ItemSpaceIce","ItemSpaceOre","ItemSpacepack","ItemSprayCanBlack","ItemSprayCanBlue","ItemSprayCanBrown","ItemSprayCanGreen","ItemSprayCanGrey","ItemSprayCanKhaki","ItemSprayCanOrange","ItemSprayCanPink","ItemSprayCanPurple","ItemSprayCanRed","ItemSprayCanWhite","ItemSprayCanYellow","ItemSprayGun","ItemSteelFrames","ItemSteelIngot","ItemSteelSheets","ItemStelliteGlassSheets","ItemStelliteIngot","ItemSuitModCryogenicUpgrade","ItemTablet","ItemTerrainManipulator","ItemTomato","ItemTomatoSoup","ItemToolBelt","ItemTropicalPlant","ItemUraniumOre","ItemVolatiles","ItemWallCooler","ItemWallHeater","ItemWallLight","ItemWaspaloyIngot","ItemWaterBottle","ItemWaterPipeDigitalValve","ItemWaterPipeMeter","ItemWaterWallCooler","ItemWearLamp","ItemWeldingTorch","ItemWheat","ItemWireCutters","ItemWirelessBatteryCellExtraLarge","ItemWreckageAirConditioner1","ItemWreckageAirConditioner2","ItemWreckageHydroponicsTray1","ItemWreckageLargeExtendableRadiator01","ItemWreckageStructureRTG1","ItemWreckageStructureWeatherStation001","ItemWreckageStructureWeatherStation002","ItemWreckageStructureWeatherStation003","ItemWreckageStructureWeatherStation004","ItemWreckageStructureWeatherStation005","ItemWreckageStructureWeatherStation006","ItemWreckageStructureWeatherStation007","ItemWreckageStructureWeatherStation008","ItemWreckageTurbineGenerator1","ItemWreckageTurbineGenerator2","ItemWreckageTurbineGenerator3","ItemWreckageWallCooler1","ItemWreckageWallCooler2","ItemWrench","KitSDBSilo","KitStructureCombustionCentrifuge","Lander","Meteorite","MonsterEgg","MotherboardComms","MotherboardLogic","MotherboardMissionControl","MotherboardProgrammableChip","MotherboardRockets","MotherboardSorter","MothershipCore","NpcChick","NpcChicken","PipeBenderMod","PortableComposter","PortableSolarPanel","ReagentColorBlue","ReagentColorGreen","ReagentColorOrange","ReagentColorRed","ReagentColorYellow","Robot","RoverCargo","Rover_MkI","SMGMagazine","SeedBag_Corn","SeedBag_Fern","SeedBag_Mushroom","SeedBag_Potato","SeedBag_Pumpkin","SeedBag_Rice","SeedBag_Soybean","SeedBag_Switchgrass","SeedBag_Tomato","SeedBag_Wheet","SpaceShuttle","ToolPrinterMod","ToyLuna","UniformCommander","UniformMarine","UniformOrangeJumpSuit","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy","WeaponTorpedo"],"logicableItems":["Battery_Wireless_cell","Battery_Wireless_cell_Big","DynamicGPR","DynamicLight","ItemAdvancedTablet","ItemAngleGrinder","ItemArcWelder","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBeacon","ItemDrill","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyDrill","ItemEmergencySpaceHelmet","ItemFlashlight","ItemHardBackpack","ItemHardJetpack","ItemHardSuit","ItemHardsuitHelmet","ItemIntegratedCircuit10","ItemJetpackBasic","ItemLabeller","ItemLaptop","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIIDrill","ItemMKIIMiningDrill","ItemMiningBeltMKII","ItemMiningDrill","ItemMiningDrillHeavy","ItemMkIIToolbelt","ItemNVG","ItemPlantSampler","ItemRemoteDetonator","ItemSensorLenses","ItemSpaceHelmet","ItemSpacepack","ItemTablet","ItemTerrainManipulator","ItemWearLamp","ItemWirelessBatteryCellExtraLarge","PortableSolarPanel","Robot","RoverCargo","Rover_MkI","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy"]} \ No newline at end of file +{"prefabs":{"AccessCardBlack":{"prefab":{"prefabName":"AccessCardBlack","prefabHash":-1330388999,"desc":"","name":"Access Card (Black)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardBlue":{"prefab":{"prefabName":"AccessCardBlue","prefabHash":-1411327657,"desc":"","name":"Access Card (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardBrown":{"prefab":{"prefabName":"AccessCardBrown","prefabHash":1412428165,"desc":"","name":"Access Card (Brown)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardGray":{"prefab":{"prefabName":"AccessCardGray","prefabHash":-1339479035,"desc":"","name":"Access Card (Gray)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardGreen":{"prefab":{"prefabName":"AccessCardGreen","prefabHash":-374567952,"desc":"","name":"Access Card (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardKhaki":{"prefab":{"prefabName":"AccessCardKhaki","prefabHash":337035771,"desc":"","name":"Access Card (Khaki)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardOrange":{"prefab":{"prefabName":"AccessCardOrange","prefabHash":-332896929,"desc":"","name":"Access Card (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardPink":{"prefab":{"prefabName":"AccessCardPink","prefabHash":431317557,"desc":"","name":"Access Card (Pink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardPurple":{"prefab":{"prefabName":"AccessCardPurple","prefabHash":459843265,"desc":"","name":"Access Card (Purple)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardRed":{"prefab":{"prefabName":"AccessCardRed","prefabHash":-1713748313,"desc":"","name":"Access Card (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardWhite":{"prefab":{"prefabName":"AccessCardWhite","prefabHash":2079959157,"desc":"","name":"Access Card (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardYellow":{"prefab":{"prefabName":"AccessCardYellow","prefabHash":568932536,"desc":"","name":"Access Card (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"ApplianceChemistryStation":{"prefab":{"prefabName":"ApplianceChemistryStation","prefabHash":1365789392,"desc":"","name":"Chemistry Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"ApplianceDeskLampLeft":{"prefab":{"prefabName":"ApplianceDeskLampLeft","prefabHash":-1683849799,"desc":"","name":"Appliance Desk Lamp Left"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"}},"ApplianceDeskLampRight":{"prefab":{"prefabName":"ApplianceDeskLampRight","prefabHash":1174360780,"desc":"","name":"Appliance Desk Lamp Right"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"}},"ApplianceMicrowave":{"prefab":{"prefabName":"ApplianceMicrowave","prefabHash":-1136173965,"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.","name":"Microwave"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"AppliancePackagingMachine":{"prefab":{"prefabName":"AppliancePackagingMachine","prefabHash":-749191906,"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 ","name":"Basic Packaging Machine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Export","typ":"None"}]},"AppliancePaintMixer":{"prefab":{"prefabName":"AppliancePaintMixer","prefabHash":-1339716113,"desc":"","name":"Paint Mixer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"Bottle"}]},"AppliancePlantGeneticAnalyzer":{"prefab":{"prefabName":"AppliancePlantGeneticAnalyzer","prefabHash":-1303038067,"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.","name":"Plant Genetic Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Input","typ":"Tool"}]},"AppliancePlantGeneticSplicer":{"prefab":{"prefabName":"AppliancePlantGeneticSplicer","prefabHash":-1094868323,"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.","name":"Plant Genetic Splicer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Source Plant","typ":"Plant"},{"name":"Target Plant","typ":"Plant"}]},"AppliancePlantGeneticStabilizer":{"prefab":{"prefabName":"AppliancePlantGeneticStabilizer","prefabHash":871432335,"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 ","name":"Plant Genetic Stabilizer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Plant","typ":"Plant"}]},"ApplianceReagentProcessor":{"prefab":{"prefabName":"ApplianceReagentProcessor","prefabHash":1260918085,"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.","name":"Reagent Processor"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Input","typ":"None"},{"name":"Output","typ":"None"}]},"ApplianceSeedTray":{"prefab":{"prefabName":"ApplianceSeedTray","prefabHash":142831994,"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.","name":"Appliance Seed Tray"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"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"}]},"ApplianceTabletDock":{"prefab":{"prefabName":"ApplianceTabletDock","prefabHash":1853941363,"desc":"","name":"Tablet Dock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"","typ":"Tool"}]},"AutolathePrinterMod":{"prefab":{"prefabName":"AutolathePrinterMod","prefabHash":221058307,"desc":"Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Autolathe Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"Battery_Wireless_cell":{"prefab":{"prefabName":"Battery_Wireless_cell","prefabHash":-462415758,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Battery_Wireless_cell_Big":{"prefab":{"prefabName":"Battery_Wireless_cell_Big","prefabHash":-41519077,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell (Big)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"CardboardBox":{"prefab":{"prefabName":"CardboardBox","prefabHash":-1976947556,"desc":"","name":"Cardboard Box"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Storage"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"CartridgeAccessController":{"prefab":{"prefabName":"CartridgeAccessController","prefabHash":-1634532552,"desc":"","name":"Cartridge (Access Controller)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeAtmosAnalyser":{"prefab":{"prefabName":"CartridgeAtmosAnalyser","prefabHash":-1550278665,"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.","name":"Atmos Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeConfiguration":{"prefab":{"prefabName":"CartridgeConfiguration","prefabHash":-932136011,"desc":"","name":"Configuration"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeElectronicReader":{"prefab":{"prefabName":"CartridgeElectronicReader","prefabHash":-1462180176,"desc":"","name":"eReader"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeGPS":{"prefab":{"prefabName":"CartridgeGPS","prefabHash":-1957063345,"desc":"","name":"GPS"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeGuide":{"prefab":{"prefabName":"CartridgeGuide","prefabHash":872720793,"desc":"","name":"Guide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeMedicalAnalyser":{"prefab":{"prefabName":"CartridgeMedicalAnalyser","prefabHash":-1116110181,"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.","name":"Medical Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeNetworkAnalyser":{"prefab":{"prefabName":"CartridgeNetworkAnalyser","prefabHash":1606989119,"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.","name":"Network Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeOreScanner":{"prefab":{"prefabName":"CartridgeOreScanner","prefabHash":-1768732546,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet.","name":"Ore Scanner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeOreScannerColor":{"prefab":{"prefabName":"CartridgeOreScannerColor","prefabHash":1738236580,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground in different colors on the tablet.","name":"Ore Scanner (Color)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgePlantAnalyser":{"prefab":{"prefabName":"CartridgePlantAnalyser","prefabHash":1101328282,"desc":"","name":"Cartridge Plant Analyser"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeTracker":{"prefab":{"prefabName":"CartridgeTracker","prefabHash":81488783,"desc":"","name":"Tracker"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CircuitboardAdvAirlockControl":{"prefab":{"prefabName":"CircuitboardAdvAirlockControl","prefabHash":1633663176,"desc":"","name":"Advanced Airlock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardAirControl":{"prefab":{"prefabName":"CircuitboardAirControl","prefabHash":1618019559,"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. ","name":"Air Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardAirlockControl":{"prefab":{"prefabName":"CircuitboardAirlockControl","prefabHash":912176135,"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.","name":"Airlock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardCameraDisplay":{"prefab":{"prefabName":"CircuitboardCameraDisplay","prefabHash":-412104504,"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.","name":"Camera Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardDoorControl":{"prefab":{"prefabName":"CircuitboardDoorControl","prefabHash":855694771,"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.","name":"Door Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardGasDisplay":{"prefab":{"prefabName":"CircuitboardGasDisplay","prefabHash":-82343730,"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).","name":"Gas Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardGraphDisplay":{"prefab":{"prefabName":"CircuitboardGraphDisplay","prefabHash":1344368806,"desc":"","name":"Graph Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardHashDisplay":{"prefab":{"prefabName":"CircuitboardHashDisplay","prefabHash":1633074601,"desc":"","name":"Hash Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardModeControl":{"prefab":{"prefabName":"CircuitboardModeControl","prefabHash":-1134148135,"desc":"Can't decide which mode you love most? This circuit board allows you to switch any connected device between operation modes.","name":"Mode Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardPowerControl":{"prefab":{"prefabName":"CircuitboardPowerControl","prefabHash":-1923778429,"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. ","name":"Power Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardShipDisplay":{"prefab":{"prefabName":"CircuitboardShipDisplay","prefabHash":-2044446819,"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.","name":"Ship Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardSolarControl":{"prefab":{"prefabName":"CircuitboardSolarControl","prefabHash":2020180320,"desc":"Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel.","name":"Solar Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CompositeRollCover":{"prefab":{"prefabName":"CompositeRollCover","prefabHash":1228794916,"desc":"0.Operate\n1.Logic","name":"Composite Roll Cover"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"CrateMkII":{"prefab":{"prefabName":"CrateMkII","prefabHash":8709219,"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.","name":"Crate Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Storage"},"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"}]},"DecayedFood":{"prefab":{"prefabName":"DecayedFood","prefabHash":1531087544,"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","name":"Decayed Food"},"item":{"consumable":false,"ingredient":false,"maxQuantity":25.0,"slotClass":"None","sortingClass":"Default"}},"DeviceLfoVolume":{"prefab":{"prefabName":"DeviceLfoVolume","prefabHash":-1844430312,"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.","name":"Low frequency oscillator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"DeviceStepUnit":{"prefab":{"prefabName":"DeviceStepUnit","prefabHash":1762696475,"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","name":"Device Step Unit"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"DynamicAirConditioner":{"prefab":{"prefabName":"DynamicAirConditioner","prefabHash":519913639,"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.","name":"Portable Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicCrate":{"prefab":{"prefabName":"DynamicCrate","prefabHash":1941079206,"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.","name":"Dynamic Crate"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Storage"},"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"}]},"DynamicGPR":{"prefab":{"prefabName":"DynamicGPR","prefabHash":-2085885850,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicGasCanisterAir":{"prefab":{"prefabName":"DynamicGasCanisterAir","prefabHash":-1713611165,"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.","name":"Portable Gas Tank (Air)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterCarbonDioxide":{"prefab":{"prefabName":"DynamicGasCanisterCarbonDioxide","prefabHash":-322413931,"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.","name":"Portable Gas Tank (CO2)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterEmpty":{"prefab":{"prefabName":"DynamicGasCanisterEmpty","prefabHash":-1741267161,"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.","name":"Portable Gas Tank"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterFuel":{"prefab":{"prefabName":"DynamicGasCanisterFuel","prefabHash":-817051527,"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.","name":"Portable Gas Tank (Fuel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrogen":{"prefab":{"prefabName":"DynamicGasCanisterNitrogen","prefabHash":121951301,"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.","name":"Portable Gas Tank (Nitrogen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrousOxide":{"prefab":{"prefabName":"DynamicGasCanisterNitrousOxide","prefabHash":30727200,"desc":"","name":"Portable Gas Tank (Nitrous Oxide)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterOxygen":{"prefab":{"prefabName":"DynamicGasCanisterOxygen","prefabHash":1360925836,"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.","name":"Portable Gas Tank (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterPollutants":{"prefab":{"prefabName":"DynamicGasCanisterPollutants","prefabHash":396065382,"desc":"","name":"Portable Gas Tank (Pollutants)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterRocketFuel":{"prefab":{"prefabName":"DynamicGasCanisterRocketFuel","prefabHash":-8883951,"desc":"","name":"Dynamic Gas Canister Rocket Fuel"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterVolatiles":{"prefab":{"prefabName":"DynamicGasCanisterVolatiles","prefabHash":108086870,"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.","name":"Portable Gas Tank (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterWater":{"prefab":{"prefabName":"DynamicGasCanisterWater","prefabHash":197293625,"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.","name":"Portable Liquid Tank (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"LiquidCanister"}]},"DynamicGasTankAdvanced":{"prefab":{"prefabName":"DynamicGasTankAdvanced","prefabHash":-386375420,"desc":"0.Mode0\n1.Mode1","name":"Gas Tank Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasTankAdvancedOxygen":{"prefab":{"prefabName":"DynamicGasTankAdvancedOxygen","prefabHash":-1264455519,"desc":"0.Mode0\n1.Mode1","name":"Portable Gas Tank Mk II (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGenerator":{"prefab":{"prefabName":"DynamicGenerator","prefabHash":-82087220,"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.","name":"Portable Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"GasCanister"},{"name":"Battery","typ":"Battery"}]},"DynamicHydroponics":{"prefab":{"prefabName":"DynamicHydroponics","prefabHash":587726607,"desc":"","name":"Portable Hydroponics"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"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"}]},"DynamicLight":{"prefab":{"prefabName":"DynamicLight","prefabHash":-21970188,"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.","name":"Portable Light"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicLiquidCanisterEmpty":{"prefab":{"prefabName":"DynamicLiquidCanisterEmpty","prefabHash":-1939209112,"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.","name":"Portable Liquid Tank"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterEmpty":{"prefab":{"prefabName":"DynamicMKIILiquidCanisterEmpty","prefabHash":2130739600,"desc":"An empty, insulated liquid Gas Canister.","name":"Portable Liquid Tank Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterWater":{"prefab":{"prefabName":"DynamicMKIILiquidCanisterWater","prefabHash":-319510386,"desc":"An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature.","name":"Portable Liquid Tank Mk II (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicScrubber":{"prefab":{"prefabName":"DynamicScrubber","prefabHash":755048589,"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.","name":"Portable Air Scrubber"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"}]},"DynamicSkeleton":{"prefab":{"prefabName":"DynamicSkeleton","prefabHash":106953348,"desc":"","name":"Skeleton"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ElectronicPrinterMod":{"prefab":{"prefabName":"ElectronicPrinterMod","prefabHash":-311170652,"desc":"Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Electronic Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ElevatorCarrage":{"prefab":{"prefabName":"ElevatorCarrage","prefabHash":-110788403,"desc":"","name":"Elevator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"EntityChick":{"prefab":{"prefabName":"EntityChick","prefabHash":1730165908,"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.","name":"Entity Chick"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenBrown":{"prefab":{"prefabName":"EntityChickenBrown","prefabHash":334097180,"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.","name":"Entity Chicken Brown"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenWhite":{"prefab":{"prefabName":"EntityChickenWhite","prefabHash":1010807532,"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.","name":"Entity Chicken White"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBlack":{"prefab":{"prefabName":"EntityRoosterBlack","prefabHash":966959649,"desc":"This is a rooster. It is black. There is dignity in this.","name":"Entity Rooster Black"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBrown":{"prefab":{"prefabName":"EntityRoosterBrown","prefabHash":-583103395,"desc":"The common brown rooster. Don't let it hear you say that.","name":"Entity Rooster Brown"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"Fertilizer":{"prefab":{"prefabName":"Fertilizer","prefabHash":1517856652,"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. ","name":"Fertilizer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Default"}},"FireArmSMG":{"prefab":{"prefabName":"FireArmSMG","prefabHash":-86315541,"desc":"0.Single\n1.Auto","name":"Fire Arm SMG"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"slots":[{"name":"","typ":"Magazine"}]},"Flag_ODA_10m":{"prefab":{"prefabName":"Flag_ODA_10m","prefabHash":1845441951,"desc":"","name":"Flag (ODA 10m)"},"structure":{"smallGrid":true}},"Flag_ODA_4m":{"prefab":{"prefabName":"Flag_ODA_4m","prefabHash":1159126354,"desc":"","name":"Flag (ODA 4m)"},"structure":{"smallGrid":true}},"Flag_ODA_6m":{"prefab":{"prefabName":"Flag_ODA_6m","prefabHash":1998634960,"desc":"","name":"Flag (ODA 6m)"},"structure":{"smallGrid":true}},"Flag_ODA_8m":{"prefab":{"prefabName":"Flag_ODA_8m","prefabHash":-375156130,"desc":"","name":"Flag (ODA 8m)"},"structure":{"smallGrid":true}},"FlareGun":{"prefab":{"prefabName":"FlareGun","prefabHash":118685786,"desc":"","name":"Flare Gun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Magazine","typ":"Flare"},{"name":"","typ":"Blocked"}]},"H2Combustor":{"prefab":{"prefabName":"H2Combustor","prefabHash":1840108251,"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.","name":"H2 Combustor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"Handgun":{"prefab":{"prefabName":"Handgun","prefabHash":247238062,"desc":"","name":"Handgun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"slots":[{"name":"Magazine","typ":"Magazine"}]},"HandgunMagazine":{"prefab":{"prefabName":"HandgunMagazine","prefabHash":1254383185,"desc":"","name":"Handgun Magazine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Magazine","sortingClass":"Default"}},"HumanSkull":{"prefab":{"prefabName":"HumanSkull","prefabHash":-857713709,"desc":"","name":"Human Skull"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ImGuiCircuitboardAirlockControl":{"prefab":{"prefabName":"ImGuiCircuitboardAirlockControl","prefabHash":-73796547,"desc":"","name":"Airlock (Experimental)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"ItemActiveVent":{"prefab":{"prefabName":"ItemActiveVent","prefabHash":-842048328,"desc":"When constructed, this kit places an Active Vent on any support structure.","name":"Kit (Active Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemAdhesiveInsulation":{"prefab":{"prefabName":"ItemAdhesiveInsulation","prefabHash":1871048978,"desc":"","name":"Adhesive Insulation"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemAdvancedTablet":{"prefab":{"prefabName":"ItemAdvancedTablet","prefabHash":1722785341,"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","name":"Advanced Tablet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read","SoundAlert":"ReadWrite","Volume":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"},{"name":"Cartridge1","typ":"Cartridge"},{"name":"Programmable Chip","typ":"ProgrammableChip"}]},"ItemAlienMushroom":{"prefab":{"prefabName":"ItemAlienMushroom","prefabHash":176446172,"desc":"","name":"Alien Mushroom"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Default"}},"ItemAmmoBox":{"prefab":{"prefabName":"ItemAmmoBox","prefabHash":-9559091,"desc":"","name":"Ammo Box"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemAngleGrinder":{"prefab":{"prefabName":"ItemAngleGrinder","prefabHash":201215010,"desc":"Angles-be-gone with the trusty angle grinder.","name":"Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemArcWelder":{"prefab":{"prefabName":"ItemArcWelder","prefabHash":1385062886,"desc":"","name":"Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemAreaPowerControl":{"prefab":{"prefabName":"ItemAreaPowerControl","prefabHash":1757673317,"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.","name":"Kit (Power Controller)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemAstroloyIngot":{"prefab":{"prefabName":"ItemAstroloyIngot","prefabHash":412924554,"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.","name":"Ingot (Astroloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Astroloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemAstroloySheets":{"prefab":{"prefabName":"ItemAstroloySheets","prefabHash":-1662476145,"desc":"","name":"Astroloy Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemAuthoringTool":{"prefab":{"prefabName":"ItemAuthoringTool","prefabHash":789015045,"desc":"","name":"Authoring Tool"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemAuthoringToolRocketNetwork":{"prefab":{"prefabName":"ItemAuthoringToolRocketNetwork","prefabHash":-1731627004,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemBasketBall":{"prefab":{"prefabName":"ItemBasketBall","prefabHash":-1262580790,"desc":"","name":"Basket Ball"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemBatteryCell":{"prefab":{"prefabName":"ItemBatteryCell","prefabHash":700133157,"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.","name":"Battery Cell (Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCellLarge":{"prefab":{"prefabName":"ItemBatteryCellLarge","prefabHash":-459827268,"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","name":"Battery Cell (Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCellNuclear":{"prefab":{"prefabName":"ItemBatteryCellNuclear","prefabHash":544617306,"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.","name":"Battery Cell (Nuclear)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCharger":{"prefab":{"prefabName":"ItemBatteryCharger","prefabHash":-1866880307,"desc":"This kit produces a 5-slot Kit (Battery Charger).","name":"Kit (Battery Charger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemBatteryChargerSmall":{"prefab":{"prefabName":"ItemBatteryChargerSmall","prefabHash":1008295833,"desc":"","name":"Battery Charger Small"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemBeacon":{"prefab":{"prefabName":"ItemBeacon","prefabHash":-869869491,"desc":"","name":"Tracking Beacon"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemBiomass":{"prefab":{"prefabName":"ItemBiomass","prefabHash":-831480639,"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).","name":"Biomass"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100.0,"reagents":{"Biomass":1.0},"slotClass":"Ore","sortingClass":"Resources"}},"ItemBreadLoaf":{"prefab":{"prefabName":"ItemBreadLoaf","prefabHash":893514943,"desc":"","name":"Bread Loaf"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCableAnalyser":{"prefab":{"prefabName":"ItemCableAnalyser","prefabHash":-1792787349,"desc":"","name":"Kit (Cable Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemCableCoil":{"prefab":{"prefabName":"ItemCableCoil","prefabHash":-466050668,"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).","name":"Cable Coil"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Tool","sortingClass":"Resources"}},"ItemCableCoilHeavy":{"prefab":{"prefabName":"ItemCableCoilHeavy","prefabHash":2060134443,"desc":"Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW.","name":"Cable Coil (Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Tool","sortingClass":"Resources"}},"ItemCableFuse":{"prefab":{"prefabName":"ItemCableFuse","prefabHash":195442047,"desc":"","name":"Kit (Cable Fuses)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Resources"}},"ItemCannedCondensedMilk":{"prefab":{"prefabName":"ItemCannedCondensedMilk","prefabHash":-2104175091,"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.","name":"Canned Condensed Milk"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCannedEdamame":{"prefab":{"prefabName":"ItemCannedEdamame","prefabHash":-999714082,"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.","name":"Canned Edamame"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCannedMushroom":{"prefab":{"prefabName":"ItemCannedMushroom","prefabHash":-1344601965,"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.","name":"Canned Mushroom"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCannedPowderedEggs":{"prefab":{"prefabName":"ItemCannedPowderedEggs","prefabHash":1161510063,"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.","name":"Canned Powdered Eggs"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCannedRicePudding":{"prefab":{"prefabName":"ItemCannedRicePudding","prefabHash":-1185552595,"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.","name":"Canned Rice Pudding"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCerealBar":{"prefab":{"prefabName":"ItemCerealBar","prefabHash":791746840,"desc":"Sustains, without decay. If only all our relationships were so well balanced.","name":"Cereal Bar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCharcoal":{"prefab":{"prefabName":"ItemCharcoal","prefabHash":252561409,"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.","name":"Charcoal"},"item":{"consumable":false,"ingredient":true,"maxQuantity":200.0,"reagents":{"Carbon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemChemLightBlue":{"prefab":{"prefabName":"ItemChemLightBlue","prefabHash":-772542081,"desc":"A safe and slightly rave-some source of blue light. Snap to activate.","name":"Chem Light (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightGreen":{"prefab":{"prefabName":"ItemChemLightGreen","prefabHash":-597479390,"desc":"Enliven the dreariest, airless rock with this glowy green light. Snap to activate.","name":"Chem Light (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightRed":{"prefab":{"prefabName":"ItemChemLightRed","prefabHash":-525810132,"desc":"A red glowstick. Snap to activate. Then reach for the lasers.","name":"Chem Light (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightWhite":{"prefab":{"prefabName":"ItemChemLightWhite","prefabHash":1312166823,"desc":"Snap the glowstick to activate a pale radiance that keeps the darkness at bay.","name":"Chem Light (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightYellow":{"prefab":{"prefabName":"ItemChemLightYellow","prefabHash":1224819963,"desc":"Dispel the darkness with this yellow glowstick.","name":"Chem Light (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemCoalOre":{"prefab":{"prefabName":"ItemCoalOre","prefabHash":1724793494,"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).","name":"Ore (Coal)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Hydrocarbon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCobaltOre":{"prefab":{"prefabName":"ItemCobaltOre","prefabHash":-983091249,"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.","name":"Ore (Cobalt)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Cobalt":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCoffeeMug":{"prefab":{"prefabName":"ItemCoffeeMug","prefabHash":1800622698,"desc":"","name":"Coffee Mug"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemConstantanIngot":{"prefab":{"prefabName":"ItemConstantanIngot","prefabHash":1058547521,"desc":"","name":"Ingot (Constantan)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Constantan":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemCookedCondensedMilk":{"prefab":{"prefabName":"ItemCookedCondensedMilk","prefabHash":1715917521,"desc":"A high-nutrient cooked food, which can be canned.","name":"Condensed Milk"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Milk":100.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedCorn":{"prefab":{"prefabName":"ItemCookedCorn","prefabHash":1344773148,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Corn"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Corn":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedMushroom":{"prefab":{"prefabName":"ItemCookedMushroom","prefabHash":-1076892658,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Mushroom"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Mushroom":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedPowderedEggs":{"prefab":{"prefabName":"ItemCookedPowderedEggs","prefabHash":-1712264413,"desc":"A high-nutrient cooked food, which can be canned.","name":"Powdered Eggs"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Egg":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedPumpkin":{"prefab":{"prefabName":"ItemCookedPumpkin","prefabHash":1849281546,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Pumpkin"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Pumpkin":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedRice":{"prefab":{"prefabName":"ItemCookedRice","prefabHash":2013539020,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Rice"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Rice":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedSoybean":{"prefab":{"prefabName":"ItemCookedSoybean","prefabHash":1353449022,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Soybean"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Soy":5.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedTomato":{"prefab":{"prefabName":"ItemCookedTomato","prefabHash":-709086714,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Tomato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Tomato":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCopperIngot":{"prefab":{"prefabName":"ItemCopperIngot","prefabHash":-404336834,"desc":"Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items.","name":"Ingot (Copper)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Copper":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemCopperOre":{"prefab":{"prefabName":"ItemCopperOre","prefabHash":-707307845,"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.","name":"Ore (Copper)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Copper":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCorn":{"prefab":{"prefabName":"ItemCorn","prefabHash":258339687,"desc":"A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light.","name":"Corn"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Corn":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemCornSoup":{"prefab":{"prefabName":"ItemCornSoup","prefabHash":545034114,"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.","name":"Corn Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCreditCard":{"prefab":{"prefabName":"ItemCreditCard","prefabHash":-1756772618,"desc":"","name":"Credit Card"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"CreditCard","sortingClass":"Tools"}},"ItemCropHay":{"prefab":{"prefabName":"ItemCropHay","prefabHash":215486157,"desc":"","name":"Hay"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"None","sortingClass":"Default"}},"ItemCrowbar":{"prefab":{"prefabName":"ItemCrowbar","prefabHash":856108234,"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.","name":"Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemDataDisk":{"prefab":{"prefabName":"ItemDataDisk","prefabHash":1005843700,"desc":"","name":"Data Disk"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"DataDisk","sortingClass":"Default"}},"ItemDirtCanister":{"prefab":{"prefabName":"ItemDirtCanister","prefabHash":902565329,"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.","name":"Dirt Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Ore","sortingClass":"Default"}},"ItemDirtyOre":{"prefab":{"prefabName":"ItemDirtyOre","prefabHash":-1234745580,"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. ","name":"Dirty Ore"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Ores"}},"ItemDisposableBatteryCharger":{"prefab":{"prefabName":"ItemDisposableBatteryCharger","prefabHash":-2124435700,"desc":"Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery.","name":"Disposable Battery Charger"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemDrill":{"prefab":{"prefabName":"ItemDrill","prefabHash":2009673399,"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.","name":"Hand Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemDuctTape":{"prefab":{"prefabName":"ItemDuctTape","prefabHash":-1943134693,"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.","name":"Duct Tape"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemDynamicAirCon":{"prefab":{"prefabName":"ItemDynamicAirCon","prefabHash":1072914031,"desc":"","name":"Kit (Portable Air Conditioner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemDynamicScrubber":{"prefab":{"prefabName":"ItemDynamicScrubber","prefabHash":-971920158,"desc":"","name":"Kit (Portable Scrubber)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemEggCarton":{"prefab":{"prefabName":"ItemEggCarton","prefabHash":-524289310,"desc":"Within, eggs reside in mysterious, marmoreal silence.","name":"Egg Carton"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Storage"},"slots":[{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"}]},"ItemElectronicParts":{"prefab":{"prefabName":"ItemElectronicParts","prefabHash":731250882,"desc":"","name":"Electronic Parts"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Resources"}},"ItemElectrumIngot":{"prefab":{"prefabName":"ItemElectrumIngot","prefabHash":502280180,"desc":"","name":"Ingot (Electrum)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Electrum":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemEmergencyAngleGrinder":{"prefab":{"prefabName":"ItemEmergencyAngleGrinder","prefabHash":-351438780,"desc":"","name":"Emergency Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyArcWelder":{"prefab":{"prefabName":"ItemEmergencyArcWelder","prefabHash":-1056029600,"desc":"","name":"Emergency Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyCrowbar":{"prefab":{"prefabName":"ItemEmergencyCrowbar","prefabHash":976699731,"desc":"","name":"Emergency Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyDrill":{"prefab":{"prefabName":"ItemEmergencyDrill","prefabHash":-2052458905,"desc":"","name":"Emergency Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyEvaSuit":{"prefab":{"prefabName":"ItemEmergencyEvaSuit","prefabHash":1791306431,"desc":"","name":"Emergency Eva Suit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Suit","sortingClass":"Clothing"},"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"}]},"ItemEmergencyPickaxe":{"prefab":{"prefabName":"ItemEmergencyPickaxe","prefabHash":-1061510408,"desc":"","name":"Emergency Pickaxe"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyScrewdriver":{"prefab":{"prefabName":"ItemEmergencyScrewdriver","prefabHash":266099983,"desc":"","name":"Emergency Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencySpaceHelmet":{"prefab":{"prefabName":"ItemEmergencySpaceHelmet","prefabHash":205916793,"desc":"","name":"Emergency Space Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemEmergencyToolBelt":{"prefab":{"prefabName":"ItemEmergencyToolBelt","prefabHash":1661941301,"desc":"","name":"Emergency Tool Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemEmergencyWireCutters":{"prefab":{"prefabName":"ItemEmergencyWireCutters","prefabHash":2102803952,"desc":"","name":"Emergency Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyWrench":{"prefab":{"prefabName":"ItemEmergencyWrench","prefabHash":162553030,"desc":"","name":"Emergency Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmptyCan":{"prefab":{"prefabName":"ItemEmptyCan","prefabHash":1013818348,"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.","name":"Empty Can"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Steel":1.0},"slotClass":"None","sortingClass":"Default"}},"ItemEvaSuit":{"prefab":{"prefabName":"ItemEvaSuit","prefabHash":1677018918,"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.","name":"Eva Suit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Suit","sortingClass":"Clothing"},"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"}]},"ItemExplosive":{"prefab":{"prefabName":"ItemExplosive","prefabHash":235361649,"desc":"","name":"Remote Explosive"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemFern":{"prefab":{"prefabName":"ItemFern","prefabHash":892110467,"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.","name":"Fern"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100.0,"reagents":{"Fenoxitone":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemFertilizedEgg":{"prefab":{"prefabName":"ItemFertilizedEgg","prefabHash":-383972371,"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.","name":"Egg"},"item":{"consumable":false,"ingredient":true,"maxQuantity":1.0,"reagents":{"Egg":1.0},"slotClass":"Egg","sortingClass":"Resources"}},"ItemFilterFern":{"prefab":{"prefabName":"ItemFilterFern","prefabHash":266654416,"desc":"A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant.","name":"Darga Fern"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlagSmall":{"prefab":{"prefabName":"ItemFlagSmall","prefabHash":2011191088,"desc":"","name":"Kit (Small Flag)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemFlashingLight":{"prefab":{"prefabName":"ItemFlashingLight","prefabHash":-2107840748,"desc":"","name":"Kit (Flashing Light)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemFlashlight":{"prefab":{"prefabName":"ItemFlashlight","prefabHash":-838472102,"desc":"A flashlight with a narrow and wide beam options.","name":"Flashlight"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Low Power","1":"High Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemFlour":{"prefab":{"prefabName":"ItemFlour","prefabHash":-665995854,"desc":"Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven).","name":"Flour"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Flour":50.0},"slotClass":"None","sortingClass":"Resources"}},"ItemFlowerBlue":{"prefab":{"prefabName":"ItemFlowerBlue","prefabHash":-1573623434,"desc":"","name":"Flower (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerGreen":{"prefab":{"prefabName":"ItemFlowerGreen","prefabHash":-1513337058,"desc":"","name":"Flower (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerOrange":{"prefab":{"prefabName":"ItemFlowerOrange","prefabHash":-1411986716,"desc":"","name":"Flower (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerRed":{"prefab":{"prefabName":"ItemFlowerRed","prefabHash":-81376085,"desc":"","name":"Flower (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerYellow":{"prefab":{"prefabName":"ItemFlowerYellow","prefabHash":1712822019,"desc":"","name":"Flower (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFrenchFries":{"prefab":{"prefabName":"ItemFrenchFries","prefabHash":-57608687,"desc":"Because space would suck without 'em.","name":"Canned French Fries"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemFries":{"prefab":{"prefabName":"ItemFries","prefabHash":1371786091,"desc":"","name":"French Fries"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemGasCanisterCarbonDioxide":{"prefab":{"prefabName":"ItemGasCanisterCarbonDioxide","prefabHash":-767685874,"desc":"","name":"Canister (CO2)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterEmpty":{"prefab":{"prefabName":"ItemGasCanisterEmpty","prefabHash":42280099,"desc":"","name":"Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterFuel":{"prefab":{"prefabName":"ItemGasCanisterFuel","prefabHash":-1014695176,"desc":"","name":"Canister (Fuel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterNitrogen":{"prefab":{"prefabName":"ItemGasCanisterNitrogen","prefabHash":2145068424,"desc":"","name":"Canister (Nitrogen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterNitrousOxide":{"prefab":{"prefabName":"ItemGasCanisterNitrousOxide","prefabHash":-1712153401,"desc":"","name":"Gas Canister (Sleeping)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterOxygen":{"prefab":{"prefabName":"ItemGasCanisterOxygen","prefabHash":-1152261938,"desc":"","name":"Canister (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterPollutants":{"prefab":{"prefabName":"ItemGasCanisterPollutants","prefabHash":-1552586384,"desc":"","name":"Canister (Pollutants)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterSmart":{"prefab":{"prefabName":"ItemGasCanisterSmart","prefabHash":-668314371,"desc":"0.Mode0\n1.Mode1","name":"Gas Canister (Smart)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterVolatiles":{"prefab":{"prefabName":"ItemGasCanisterVolatiles","prefabHash":-472094806,"desc":"","name":"Canister (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterWater":{"prefab":{"prefabName":"ItemGasCanisterWater","prefabHash":-1854861891,"desc":"","name":"Liquid Canister (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemGasFilterCarbonDioxide":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxide","prefabHash":1635000764,"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.","name":"Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideInfinite":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideInfinite","prefabHash":-185568964,"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.","name":"Catalytic Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideL":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideL","prefabHash":1876847024,"desc":"","name":"Heavy Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideM":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideM","prefabHash":416897318,"desc":"","name":"Medium Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogen":{"prefab":{"prefabName":"ItemGasFilterNitrogen","prefabHash":632853248,"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.","name":"Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenInfinite":{"prefab":{"prefabName":"ItemGasFilterNitrogenInfinite","prefabHash":152751131,"desc":"A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenL":{"prefab":{"prefabName":"ItemGasFilterNitrogenL","prefabHash":-1387439451,"desc":"","name":"Heavy Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenM":{"prefab":{"prefabName":"ItemGasFilterNitrogenM","prefabHash":-632657357,"desc":"","name":"Medium Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxide":{"prefab":{"prefabName":"ItemGasFilterNitrousOxide","prefabHash":-1247674305,"desc":"","name":"Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideInfinite":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideInfinite","prefabHash":-123934842,"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.","name":"Catalytic Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideL":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideL","prefabHash":465267979,"desc":"","name":"Heavy Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideM":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideM","prefabHash":1824284061,"desc":"","name":"Medium Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygen":{"prefab":{"prefabName":"ItemGasFilterOxygen","prefabHash":-721824748,"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).","name":"Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenInfinite":{"prefab":{"prefabName":"ItemGasFilterOxygenInfinite","prefabHash":-1055451111,"desc":"A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenL":{"prefab":{"prefabName":"ItemGasFilterOxygenL","prefabHash":-1217998945,"desc":"","name":"Heavy Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenM":{"prefab":{"prefabName":"ItemGasFilterOxygenM","prefabHash":-1067319543,"desc":"","name":"Medium Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutants":{"prefab":{"prefabName":"ItemGasFilterPollutants","prefabHash":1915566057,"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.","name":"Filter (Pollutant)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsInfinite":{"prefab":{"prefabName":"ItemGasFilterPollutantsInfinite","prefabHash":-503738105,"desc":"A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsL":{"prefab":{"prefabName":"ItemGasFilterPollutantsL","prefabHash":1959564765,"desc":"","name":"Heavy Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsM":{"prefab":{"prefabName":"ItemGasFilterPollutantsM","prefabHash":63677771,"desc":"","name":"Medium Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatiles":{"prefab":{"prefabName":"ItemGasFilterVolatiles","prefabHash":15011598,"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.","name":"Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesInfinite":{"prefab":{"prefabName":"ItemGasFilterVolatilesInfinite","prefabHash":-1916176068,"desc":"A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesL":{"prefab":{"prefabName":"ItemGasFilterVolatilesL","prefabHash":1255156286,"desc":"","name":"Heavy Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesM":{"prefab":{"prefabName":"ItemGasFilterVolatilesM","prefabHash":1037507240,"desc":"","name":"Medium Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWater":{"prefab":{"prefabName":"ItemGasFilterWater","prefabHash":-1993197973,"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)","name":"Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterInfinite":{"prefab":{"prefabName":"ItemGasFilterWaterInfinite","prefabHash":-1678456554,"desc":"A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterL":{"prefab":{"prefabName":"ItemGasFilterWaterL","prefabHash":2004969680,"desc":"","name":"Heavy Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterM":{"prefab":{"prefabName":"ItemGasFilterWaterM","prefabHash":8804422,"desc":"","name":"Medium Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasSensor":{"prefab":{"prefabName":"ItemGasSensor","prefabHash":1717593480,"desc":"","name":"Kit (Gas Sensor)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemGasTankStorage":{"prefab":{"prefabName":"ItemGasTankStorage","prefabHash":-2113012215,"desc":"This kit produces a Kit (Canister Storage) for refilling a Canister.","name":"Kit (Canister Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemGlassSheets":{"prefab":{"prefabName":"ItemGlassSheets","prefabHash":1588896491,"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.","name":"Glass Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemGlasses":{"prefab":{"prefabName":"ItemGlasses","prefabHash":-1068925231,"desc":"","name":"Glasses"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Glasses","sortingClass":"Clothing"}},"ItemGoldIngot":{"prefab":{"prefabName":"ItemGoldIngot","prefabHash":226410516,"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. ","name":"Ingot (Gold)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Gold":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemGoldOre":{"prefab":{"prefabName":"ItemGoldOre","prefabHash":-1348105509,"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.","name":"Ore (Gold)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Gold":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemGrenade":{"prefab":{"prefabName":"ItemGrenade","prefabHash":1544275894,"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.","name":"Hand Grenade"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemHEMDroidRepairKit":{"prefab":{"prefabName":"ItemHEMDroidRepairKit","prefabHash":470636008,"desc":"Repairs damaged HEM-Droids to full health.","name":"HEMDroid Repair Kit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Food"}},"ItemHardBackpack":{"prefab":{"prefabName":"ItemHardBackpack","prefabHash":374891127,"desc":"This backpack can be useful when you are working inside and don't need to fly around.","name":"Hardsuit Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemHardJetpack":{"prefab":{"prefabName":"ItemHardJetpack","prefabHash":-412551656,"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.","name":"Hardsuit Jetpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemHardMiningBackPack":{"prefab":{"prefabName":"ItemHardMiningBackPack","prefabHash":900366130,"desc":"","name":"Hard Mining Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"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"}]},"ItemHardSuit":{"prefab":{"prefabName":"ItemHardSuit","prefabHash":-1758310454,"desc":"Connects to Logic Transmitter","name":"Hardsuit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Suit","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"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"}],"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"ItemHardsuitHelmet":{"prefab":{"prefabName":"ItemHardsuitHelmet","prefabHash":-84573099,"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.","name":"Hardsuit Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemHastelloyIngot":{"prefab":{"prefabName":"ItemHastelloyIngot","prefabHash":1579842814,"desc":"","name":"Ingot (Hastelloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Hastelloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemHat":{"prefab":{"prefabName":"ItemHat","prefabHash":299189339,"desc":"As the name suggests, this is a hat.","name":"Hat"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"}},"ItemHighVolumeGasCanisterEmpty":{"prefab":{"prefabName":"ItemHighVolumeGasCanisterEmpty","prefabHash":998653377,"desc":"","name":"High Volume Gas Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemHorticultureBelt":{"prefab":{"prefabName":"ItemHorticultureBelt","prefabHash":-1117581553,"desc":"","name":"Horticulture Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemHydroponicTray":{"prefab":{"prefabName":"ItemHydroponicTray","prefabHash":-1193543727,"desc":"This kits creates a Hydroponics Tray for growing various plants.","name":"Kit (Hydroponic Tray)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemIce":{"prefab":{"prefabName":"ItemIce","prefabHash":1217489948,"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.","name":"Ice (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemIgniter":{"prefab":{"prefabName":"ItemIgniter","prefabHash":890106742,"desc":"This kit creates an Kit (Igniter) unit.","name":"Kit (Igniter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemInconelIngot":{"prefab":{"prefabName":"ItemInconelIngot","prefabHash":-787796599,"desc":"","name":"Ingot (Inconel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Inconel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemInsulation":{"prefab":{"prefabName":"ItemInsulation","prefabHash":897176943,"desc":"Mysterious in the extreme, the function of this item is lost to the ages.","name":"Insulation"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Resources"}},"ItemIntegratedCircuit10":{"prefab":{"prefabName":"ItemIntegratedCircuit10","prefabHash":-744098481,"desc":"","name":"Integrated Circuit (IC10)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"ProgrammableChip","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"LineNumber":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"memory":{"memoryAccess":"ReadWrite","memorySize":512}},"ItemInvarIngot":{"prefab":{"prefabName":"ItemInvarIngot","prefabHash":-297990285,"desc":"","name":"Ingot (Invar)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Invar":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemIronFrames":{"prefab":{"prefabName":"ItemIronFrames","prefabHash":1225836666,"desc":"","name":"Iron Frames"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemIronIngot":{"prefab":{"prefabName":"ItemIronIngot","prefabHash":-1301215609,"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.","name":"Ingot (Iron)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Iron":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemIronOre":{"prefab":{"prefabName":"ItemIronOre","prefabHash":1758427767,"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.","name":"Ore (Iron)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Iron":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemIronSheets":{"prefab":{"prefabName":"ItemIronSheets","prefabHash":-487378546,"desc":"","name":"Iron Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemJetpackBasic":{"prefab":{"prefabName":"ItemJetpackBasic","prefabHash":1969189000,"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.","name":"Jetpack Basic"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemKitAIMeE":{"prefab":{"prefabName":"ItemKitAIMeE","prefabHash":496830914,"desc":"","name":"Kit (AIMeE)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAccessBridge":{"prefab":{"prefabName":"ItemKitAccessBridge","prefabHash":513258369,"desc":"","name":"Kit (Access Bridge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedComposter":{"prefab":{"prefabName":"ItemKitAdvancedComposter","prefabHash":-1431998347,"desc":"","name":"Kit (Advanced Composter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedFurnace":{"prefab":{"prefabName":"ItemKitAdvancedFurnace","prefabHash":-616758353,"desc":"","name":"Kit (Advanced Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedPackagingMachine":{"prefab":{"prefabName":"ItemKitAdvancedPackagingMachine","prefabHash":-598545233,"desc":"","name":"Kit (Advanced Packaging Machine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAirlock":{"prefab":{"prefabName":"ItemKitAirlock","prefabHash":964043875,"desc":"","name":"Kit (Airlock)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAirlockGate":{"prefab":{"prefabName":"ItemKitAirlockGate","prefabHash":682546947,"desc":"","name":"Kit (Hangar Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitArcFurnace":{"prefab":{"prefabName":"ItemKitArcFurnace","prefabHash":-98995857,"desc":"","name":"Kit (Arc Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAtmospherics":{"prefab":{"prefabName":"ItemKitAtmospherics","prefabHash":1222286371,"desc":"","name":"Kit (Atmospherics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutoMinerSmall":{"prefab":{"prefabName":"ItemKitAutoMinerSmall","prefabHash":1668815415,"desc":"","name":"Kit (Autominer Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutolathe":{"prefab":{"prefabName":"ItemKitAutolathe","prefabHash":-1753893214,"desc":"","name":"Kit (Autolathe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutomatedOven":{"prefab":{"prefabName":"ItemKitAutomatedOven","prefabHash":-1931958659,"desc":"","name":"Kit (Automated Oven)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBasket":{"prefab":{"prefabName":"ItemKitBasket","prefabHash":148305004,"desc":"","name":"Kit (Basket)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBattery":{"prefab":{"prefabName":"ItemKitBattery","prefabHash":1406656973,"desc":"","name":"Kit (Battery)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBatteryLarge":{"prefab":{"prefabName":"ItemKitBatteryLarge","prefabHash":-21225041,"desc":"","name":"Kit (Battery Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBeacon":{"prefab":{"prefabName":"ItemKitBeacon","prefabHash":249073136,"desc":"","name":"Kit (Beacon)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBeds":{"prefab":{"prefabName":"ItemKitBeds","prefabHash":-1241256797,"desc":"","name":"Kit (Beds)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBlastDoor":{"prefab":{"prefabName":"ItemKitBlastDoor","prefabHash":-1755116240,"desc":"","name":"Kit (Blast Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCentrifuge":{"prefab":{"prefabName":"ItemKitCentrifuge","prefabHash":578182956,"desc":"","name":"Kit (Centrifuge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChairs":{"prefab":{"prefabName":"ItemKitChairs","prefabHash":-1394008073,"desc":"","name":"Kit (Chairs)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChute":{"prefab":{"prefabName":"ItemKitChute","prefabHash":1025254665,"desc":"","name":"Kit (Basic Chutes)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChuteUmbilical":{"prefab":{"prefabName":"ItemKitChuteUmbilical","prefabHash":-876560854,"desc":"","name":"Kit (Chute Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCompositeCladding":{"prefab":{"prefabName":"ItemKitCompositeCladding","prefabHash":-1470820996,"desc":"","name":"Kit (Cladding)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCompositeFloorGrating":{"prefab":{"prefabName":"ItemKitCompositeFloorGrating","prefabHash":1182412869,"desc":"","name":"Kit (Floor Grating)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitComputer":{"prefab":{"prefabName":"ItemKitComputer","prefabHash":1990225489,"desc":"","name":"Kit (Computer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitConsole":{"prefab":{"prefabName":"ItemKitConsole","prefabHash":-1241851179,"desc":"","name":"Kit (Consoles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrate":{"prefab":{"prefabName":"ItemKitCrate","prefabHash":429365598,"desc":"","name":"Kit (Crate)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrateMkII":{"prefab":{"prefabName":"ItemKitCrateMkII","prefabHash":-1585956426,"desc":"","name":"Kit (Crate Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrateMount":{"prefab":{"prefabName":"ItemKitCrateMount","prefabHash":-551612946,"desc":"","name":"Kit (Container Mount)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCryoTube":{"prefab":{"prefabName":"ItemKitCryoTube","prefabHash":-545234195,"desc":"","name":"Kit (Cryo Tube)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDeepMiner":{"prefab":{"prefabName":"ItemKitDeepMiner","prefabHash":-1935075707,"desc":"","name":"Kit (Deep Miner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDockingPort":{"prefab":{"prefabName":"ItemKitDockingPort","prefabHash":77421200,"desc":"","name":"Kit (Docking Port)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDoor":{"prefab":{"prefabName":"ItemKitDoor","prefabHash":168615924,"desc":"","name":"Kit (Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDrinkingFountain":{"prefab":{"prefabName":"ItemKitDrinkingFountain","prefabHash":-1743663875,"desc":"","name":"Kit (Drinking Fountain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicCanister":{"prefab":{"prefabName":"ItemKitDynamicCanister","prefabHash":-1061945368,"desc":"","name":"Kit (Portable Gas Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicGasTankAdvanced":{"prefab":{"prefabName":"ItemKitDynamicGasTankAdvanced","prefabHash":1533501495,"desc":"","name":"Kit (Portable Gas Tank Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitDynamicGenerator":{"prefab":{"prefabName":"ItemKitDynamicGenerator","prefabHash":-732720413,"desc":"","name":"Kit (Portable Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicHydroponics":{"prefab":{"prefabName":"ItemKitDynamicHydroponics","prefabHash":-1861154222,"desc":"","name":"Kit (Portable Hydroponics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicLiquidCanister":{"prefab":{"prefabName":"ItemKitDynamicLiquidCanister","prefabHash":375541286,"desc":"","name":"Kit (Portable Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicMKIILiquidCanister":{"prefab":{"prefabName":"ItemKitDynamicMKIILiquidCanister","prefabHash":-638019974,"desc":"","name":"Kit (Portable Liquid Tank Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElectricUmbilical":{"prefab":{"prefabName":"ItemKitElectricUmbilical","prefabHash":1603046970,"desc":"","name":"Kit (Power Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElectronicsPrinter":{"prefab":{"prefabName":"ItemKitElectronicsPrinter","prefabHash":-1181922382,"desc":"","name":"Kit (Electronics Printer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElevator":{"prefab":{"prefabName":"ItemKitElevator","prefabHash":-945806652,"desc":"","name":"Kit (Elevator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineLarge":{"prefab":{"prefabName":"ItemKitEngineLarge","prefabHash":755302726,"desc":"","name":"Kit (Engine Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineMedium":{"prefab":{"prefabName":"ItemKitEngineMedium","prefabHash":1969312177,"desc":"","name":"Kit (Engine Medium)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineSmall":{"prefab":{"prefabName":"ItemKitEngineSmall","prefabHash":19645163,"desc":"","name":"Kit (Engine Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEvaporationChamber":{"prefab":{"prefabName":"ItemKitEvaporationChamber","prefabHash":1587787610,"desc":"","name":"Kit (Phase Change Device)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFlagODA":{"prefab":{"prefabName":"ItemKitFlagODA","prefabHash":1701764190,"desc":"","name":"Kit (ODA Flag)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitFridgeBig":{"prefab":{"prefabName":"ItemKitFridgeBig","prefabHash":-1168199498,"desc":"","name":"Kit (Fridge Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFridgeSmall":{"prefab":{"prefabName":"ItemKitFridgeSmall","prefabHash":1661226524,"desc":"","name":"Kit (Fridge Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFurnace":{"prefab":{"prefabName":"ItemKitFurnace","prefabHash":-806743925,"desc":"","name":"Kit (Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFurniture":{"prefab":{"prefabName":"ItemKitFurniture","prefabHash":1162905029,"desc":"","name":"Kit (Furniture)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFuselage":{"prefab":{"prefabName":"ItemKitFuselage","prefabHash":-366262681,"desc":"","name":"Kit (Fuselage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGasGenerator":{"prefab":{"prefabName":"ItemKitGasGenerator","prefabHash":377745425,"desc":"","name":"Kit (Gas Fuel Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGasUmbilical":{"prefab":{"prefabName":"ItemKitGasUmbilical","prefabHash":-1867280568,"desc":"","name":"Kit (Gas Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGovernedGasRocketEngine":{"prefab":{"prefabName":"ItemKitGovernedGasRocketEngine","prefabHash":206848766,"desc":"","name":"Kit (Pumped Gas Rocket Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGroundTelescope":{"prefab":{"prefabName":"ItemKitGroundTelescope","prefabHash":-2140672772,"desc":"","name":"Kit (Telescope)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGrowLight":{"prefab":{"prefabName":"ItemKitGrowLight","prefabHash":341030083,"desc":"","name":"Kit (Grow Light)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHarvie":{"prefab":{"prefabName":"ItemKitHarvie","prefabHash":-1022693454,"desc":"","name":"Kit (Harvie)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHeatExchanger":{"prefab":{"prefabName":"ItemKitHeatExchanger","prefabHash":-1710540039,"desc":"","name":"Kit Heat Exchanger"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHorizontalAutoMiner":{"prefab":{"prefabName":"ItemKitHorizontalAutoMiner","prefabHash":844391171,"desc":"","name":"Kit (OGRE)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydraulicPipeBender":{"prefab":{"prefabName":"ItemKitHydraulicPipeBender","prefabHash":-2098556089,"desc":"","name":"Kit (Hydraulic Pipe Bender)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydroponicAutomated":{"prefab":{"prefabName":"ItemKitHydroponicAutomated","prefabHash":-927931558,"desc":"","name":"Kit (Automated Hydroponics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydroponicStation":{"prefab":{"prefabName":"ItemKitHydroponicStation","prefabHash":2057179799,"desc":"","name":"Kit (Hydroponic Station)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitIceCrusher":{"prefab":{"prefabName":"ItemKitIceCrusher","prefabHash":288111533,"desc":"","name":"Kit (Ice Crusher)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedLiquidPipe":{"prefab":{"prefabName":"ItemKitInsulatedLiquidPipe","prefabHash":2067655311,"desc":"","name":"Kit (Insulated Liquid Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipe":{"prefab":{"prefabName":"ItemKitInsulatedPipe","prefabHash":452636699,"desc":"","name":"Kit (Insulated Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipeUtility":{"prefab":{"prefabName":"ItemKitInsulatedPipeUtility","prefabHash":-27284803,"desc":"","name":"Kit (Insulated Pipe Utility Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipeUtilityLiquid":{"prefab":{"prefabName":"ItemKitInsulatedPipeUtilityLiquid","prefabHash":-1831558953,"desc":"","name":"Kit (Insulated Pipe Utility Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInteriorDoors":{"prefab":{"prefabName":"ItemKitInteriorDoors","prefabHash":1935945891,"desc":"","name":"Kit (Interior Doors)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLadder":{"prefab":{"prefabName":"ItemKitLadder","prefabHash":489494578,"desc":"","name":"Kit (Ladder)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadAtmos":{"prefab":{"prefabName":"ItemKitLandingPadAtmos","prefabHash":1817007843,"desc":"","name":"Kit (Landing Pad Atmospherics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadBasic":{"prefab":{"prefabName":"ItemKitLandingPadBasic","prefabHash":293581318,"desc":"","name":"Kit (Landing Pad Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadWaypoint":{"prefab":{"prefabName":"ItemKitLandingPadWaypoint","prefabHash":-1267511065,"desc":"","name":"Kit (Landing Pad Runway)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeDirectHeatExchanger":{"prefab":{"prefabName":"ItemKitLargeDirectHeatExchanger","prefabHash":450164077,"desc":"","name":"Kit (Large Direct Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeExtendableRadiator":{"prefab":{"prefabName":"ItemKitLargeExtendableRadiator","prefabHash":847430620,"desc":"","name":"Kit (Large Extendable Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeSatelliteDish":{"prefab":{"prefabName":"ItemKitLargeSatelliteDish","prefabHash":-2039971217,"desc":"","name":"Kit (Large Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLaunchMount":{"prefab":{"prefabName":"ItemKitLaunchMount","prefabHash":-1854167549,"desc":"","name":"Kit (Launch Mount)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLaunchTower":{"prefab":{"prefabName":"ItemKitLaunchTower","prefabHash":-174523552,"desc":"","name":"Kit (Rocket Launch Tower)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidRegulator":{"prefab":{"prefabName":"ItemKitLiquidRegulator","prefabHash":1951126161,"desc":"","name":"Kit (Liquid Regulator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTank":{"prefab":{"prefabName":"ItemKitLiquidTank","prefabHash":-799849305,"desc":"","name":"Kit (Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTankInsulated":{"prefab":{"prefabName":"ItemKitLiquidTankInsulated","prefabHash":617773453,"desc":"","name":"Kit (Insulated Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTurboVolumePump":{"prefab":{"prefabName":"ItemKitLiquidTurboVolumePump","prefabHash":-1805020897,"desc":"","name":"Kit (Turbo Volume Pump - Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidUmbilical":{"prefab":{"prefabName":"ItemKitLiquidUmbilical","prefabHash":1571996765,"desc":"","name":"Kit (Liquid Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLocker":{"prefab":{"prefabName":"ItemKitLocker","prefabHash":882301399,"desc":"","name":"Kit (Locker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicCircuit":{"prefab":{"prefabName":"ItemKitLogicCircuit","prefabHash":1512322581,"desc":"","name":"Kit (IC Housing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicInputOutput":{"prefab":{"prefabName":"ItemKitLogicInputOutput","prefabHash":1997293610,"desc":"","name":"Kit (Logic I/O)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicMemory":{"prefab":{"prefabName":"ItemKitLogicMemory","prefabHash":-2098214189,"desc":"","name":"Kit (Logic Memory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicProcessor":{"prefab":{"prefabName":"ItemKitLogicProcessor","prefabHash":220644373,"desc":"","name":"Kit (Logic Processor)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicSwitch":{"prefab":{"prefabName":"ItemKitLogicSwitch","prefabHash":124499454,"desc":"","name":"Kit (Logic Switch)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicTransmitter":{"prefab":{"prefabName":"ItemKitLogicTransmitter","prefabHash":1005397063,"desc":"","name":"Kit (Logic Transmitter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitMotherShipCore":{"prefab":{"prefabName":"ItemKitMotherShipCore","prefabHash":-344968335,"desc":"","name":"Kit (Mothership)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitMusicMachines":{"prefab":{"prefabName":"ItemKitMusicMachines","prefabHash":-2038889137,"desc":"","name":"Kit (Music Machines)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPassiveLargeRadiatorGas":{"prefab":{"prefabName":"ItemKitPassiveLargeRadiatorGas","prefabHash":-1752768283,"desc":"","name":"Kit (Medium Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitPassiveLargeRadiatorLiquid":{"prefab":{"prefabName":"ItemKitPassiveLargeRadiatorLiquid","prefabHash":1453961898,"desc":"","name":"Kit (Medium Radiator Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPassthroughHeatExchanger":{"prefab":{"prefabName":"ItemKitPassthroughHeatExchanger","prefabHash":636112787,"desc":"","name":"Kit (CounterFlow Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPictureFrame":{"prefab":{"prefabName":"ItemKitPictureFrame","prefabHash":-2062364768,"desc":"","name":"Kit Picture Frame"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipe":{"prefab":{"prefabName":"ItemKitPipe","prefabHash":-1619793705,"desc":"","name":"Kit (Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeLiquid":{"prefab":{"prefabName":"ItemKitPipeLiquid","prefabHash":-1166461357,"desc":"","name":"Kit (Liquid Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeOrgan":{"prefab":{"prefabName":"ItemKitPipeOrgan","prefabHash":-827125300,"desc":"","name":"Kit (Pipe Organ)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeRadiator":{"prefab":{"prefabName":"ItemKitPipeRadiator","prefabHash":920411066,"desc":"","name":"Kit (Pipe Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitPipeRadiatorLiquid":{"prefab":{"prefabName":"ItemKitPipeRadiatorLiquid","prefabHash":-1697302609,"desc":"","name":"Kit (Pipe Radiator Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitPipeUtility":{"prefab":{"prefabName":"ItemKitPipeUtility","prefabHash":1934508338,"desc":"","name":"Kit (Pipe Utility Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeUtilityLiquid":{"prefab":{"prefabName":"ItemKitPipeUtilityLiquid","prefabHash":595478589,"desc":"","name":"Kit (Pipe Utility Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPlanter":{"prefab":{"prefabName":"ItemKitPlanter","prefabHash":119096484,"desc":"","name":"Kit (Planter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPortablesConnector":{"prefab":{"prefabName":"ItemKitPortablesConnector","prefabHash":1041148999,"desc":"","name":"Kit (Portables Connector)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPowerTransmitter":{"prefab":{"prefabName":"ItemKitPowerTransmitter","prefabHash":291368213,"desc":"","name":"Kit (Power Transmitter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPowerTransmitterOmni":{"prefab":{"prefabName":"ItemKitPowerTransmitterOmni","prefabHash":-831211676,"desc":"","name":"Kit (Power Transmitter Omni)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPoweredVent":{"prefab":{"prefabName":"ItemKitPoweredVent","prefabHash":2015439334,"desc":"","name":"Kit (Powered Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressureFedGasEngine":{"prefab":{"prefabName":"ItemKitPressureFedGasEngine","prefabHash":-121514007,"desc":"","name":"Kit (Pressure Fed Gas Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressureFedLiquidEngine":{"prefab":{"prefabName":"ItemKitPressureFedLiquidEngine","prefabHash":-99091572,"desc":"","name":"Kit (Pressure Fed Liquid Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressurePlate":{"prefab":{"prefabName":"ItemKitPressurePlate","prefabHash":123504691,"desc":"","name":"Kit (Trigger Plate)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPumpedLiquidEngine":{"prefab":{"prefabName":"ItemKitPumpedLiquidEngine","prefabHash":1921918951,"desc":"","name":"Kit (Pumped Liquid Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRailing":{"prefab":{"prefabName":"ItemKitRailing","prefabHash":750176282,"desc":"","name":"Kit (Railing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRecycler":{"prefab":{"prefabName":"ItemKitRecycler","prefabHash":849148192,"desc":"","name":"Kit (Recycler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRegulator":{"prefab":{"prefabName":"ItemKitRegulator","prefabHash":1181371795,"desc":"","name":"Kit (Pressure Regulator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitReinforcedWindows":{"prefab":{"prefabName":"ItemKitReinforcedWindows","prefabHash":1459985302,"desc":"","name":"Kit (Reinforced Windows)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitResearchMachine":{"prefab":{"prefabName":"ItemKitResearchMachine","prefabHash":724776762,"desc":"","name":"Kit Research Machine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitRespawnPointWallMounted":{"prefab":{"prefabName":"ItemKitRespawnPointWallMounted","prefabHash":1574688481,"desc":"","name":"Kit (Respawn)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketAvionics":{"prefab":{"prefabName":"ItemKitRocketAvionics","prefabHash":1396305045,"desc":"","name":"Kit (Avionics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketBattery":{"prefab":{"prefabName":"ItemKitRocketBattery","prefabHash":-314072139,"desc":"","name":"Kit (Rocket Battery)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCargoStorage":{"prefab":{"prefabName":"ItemKitRocketCargoStorage","prefabHash":479850239,"desc":"","name":"Kit (Rocket Cargo Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCelestialTracker":{"prefab":{"prefabName":"ItemKitRocketCelestialTracker","prefabHash":-303008602,"desc":"","name":"Kit (Rocket Celestial Tracker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCircuitHousing":{"prefab":{"prefabName":"ItemKitRocketCircuitHousing","prefabHash":721251202,"desc":"","name":"Kit (Rocket Circuit Housing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketDatalink":{"prefab":{"prefabName":"ItemKitRocketDatalink","prefabHash":-1256996603,"desc":"","name":"Kit (Rocket Datalink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketGasFuelTank":{"prefab":{"prefabName":"ItemKitRocketGasFuelTank","prefabHash":-1629347579,"desc":"","name":"Kit (Rocket Gas Fuel Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketLiquidFuelTank":{"prefab":{"prefabName":"ItemKitRocketLiquidFuelTank","prefabHash":2032027950,"desc":"","name":"Kit (Rocket Liquid Fuel Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketManufactory":{"prefab":{"prefabName":"ItemKitRocketManufactory","prefabHash":-636127860,"desc":"","name":"Kit (Rocket Manufactory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketMiner":{"prefab":{"prefabName":"ItemKitRocketMiner","prefabHash":-867969909,"desc":"","name":"Kit (Rocket Miner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketScanner":{"prefab":{"prefabName":"ItemKitRocketScanner","prefabHash":1753647154,"desc":"","name":"Kit (Rocket Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketTransformerSmall":{"prefab":{"prefabName":"ItemKitRocketTransformerSmall","prefabHash":-932335800,"desc":"","name":"Kit (Transformer Small (Rocket))"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRoverFrame":{"prefab":{"prefabName":"ItemKitRoverFrame","prefabHash":1827215803,"desc":"","name":"Kit (Rover Frame)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRoverMKI":{"prefab":{"prefabName":"ItemKitRoverMKI","prefabHash":197243872,"desc":"","name":"Kit (Rover Mk I)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSDBHopper":{"prefab":{"prefabName":"ItemKitSDBHopper","prefabHash":323957548,"desc":"","name":"Kit (SDB Hopper)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSatelliteDish":{"prefab":{"prefabName":"ItemKitSatelliteDish","prefabHash":178422810,"desc":"","name":"Kit (Medium Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSecurityPrinter":{"prefab":{"prefabName":"ItemKitSecurityPrinter","prefabHash":578078533,"desc":"","name":"Kit (Security Printer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSensor":{"prefab":{"prefabName":"ItemKitSensor","prefabHash":-1776897113,"desc":"","name":"Kit (Sensors)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitShower":{"prefab":{"prefabName":"ItemKitShower","prefabHash":735858725,"desc":"","name":"Kit (Shower)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSign":{"prefab":{"prefabName":"ItemKitSign","prefabHash":529996327,"desc":"","name":"Kit (Sign)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSleeper":{"prefab":{"prefabName":"ItemKitSleeper","prefabHash":326752036,"desc":"","name":"Kit (Sleeper)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSmallDirectHeatExchanger":{"prefab":{"prefabName":"ItemKitSmallDirectHeatExchanger","prefabHash":-1332682164,"desc":"","name":"Kit (Small Direct Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitSmallSatelliteDish":{"prefab":{"prefabName":"ItemKitSmallSatelliteDish","prefabHash":1960952220,"desc":"","name":"Kit (Small Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolarPanel":{"prefab":{"prefabName":"ItemKitSolarPanel","prefabHash":-1924492105,"desc":"","name":"Kit (Solar Panel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolarPanelBasic":{"prefab":{"prefabName":"ItemKitSolarPanelBasic","prefabHash":844961456,"desc":"","name":"Kit (Solar Panel Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitSolarPanelBasicReinforced":{"prefab":{"prefabName":"ItemKitSolarPanelBasicReinforced","prefabHash":-528695432,"desc":"","name":"Kit (Solar Panel Basic Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitSolarPanelReinforced":{"prefab":{"prefabName":"ItemKitSolarPanelReinforced","prefabHash":-364868685,"desc":"","name":"Kit (Solar Panel Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolidGenerator":{"prefab":{"prefabName":"ItemKitSolidGenerator","prefabHash":1293995736,"desc":"","name":"Kit (Solid Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSorter":{"prefab":{"prefabName":"ItemKitSorter","prefabHash":969522478,"desc":"","name":"Kit (Sorter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSpeaker":{"prefab":{"prefabName":"ItemKitSpeaker","prefabHash":-126038526,"desc":"","name":"Kit (Speaker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStacker":{"prefab":{"prefabName":"ItemKitStacker","prefabHash":1013244511,"desc":"","name":"Kit (Stacker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStairs":{"prefab":{"prefabName":"ItemKitStairs","prefabHash":170878959,"desc":"","name":"Kit (Stairs)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStairwell":{"prefab":{"prefabName":"ItemKitStairwell","prefabHash":-1868555784,"desc":"","name":"Kit (Stairwell)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStandardChute":{"prefab":{"prefabName":"ItemKitStandardChute","prefabHash":2133035682,"desc":"","name":"Kit (Powered Chutes)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStirlingEngine":{"prefab":{"prefabName":"ItemKitStirlingEngine","prefabHash":-1821571150,"desc":"","name":"Kit (Stirling Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSuitStorage":{"prefab":{"prefabName":"ItemKitSuitStorage","prefabHash":1088892825,"desc":"","name":"Kit (Suit Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTables":{"prefab":{"prefabName":"ItemKitTables","prefabHash":-1361598922,"desc":"","name":"Kit (Tables)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTank":{"prefab":{"prefabName":"ItemKitTank","prefabHash":771439840,"desc":"","name":"Kit (Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTankInsulated":{"prefab":{"prefabName":"ItemKitTankInsulated","prefabHash":1021053608,"desc":"","name":"Kit (Tank Insulated)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitToolManufactory":{"prefab":{"prefabName":"ItemKitToolManufactory","prefabHash":529137748,"desc":"","name":"Kit (Tool Manufactory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTransformer":{"prefab":{"prefabName":"ItemKitTransformer","prefabHash":-453039435,"desc":"","name":"Kit (Transformer Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTransformerSmall":{"prefab":{"prefabName":"ItemKitTransformerSmall","prefabHash":665194284,"desc":"","name":"Kit (Transformer Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTurbineGenerator":{"prefab":{"prefabName":"ItemKitTurbineGenerator","prefabHash":-1590715731,"desc":"","name":"Kit (Turbine Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTurboVolumePump":{"prefab":{"prefabName":"ItemKitTurboVolumePump","prefabHash":-1248429712,"desc":"","name":"Kit (Turbo Volume Pump - Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitUprightWindTurbine":{"prefab":{"prefabName":"ItemKitUprightWindTurbine","prefabHash":-1798044015,"desc":"","name":"Kit (Upright Wind Turbine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitVendingMachine":{"prefab":{"prefabName":"ItemKitVendingMachine","prefabHash":-2038384332,"desc":"","name":"Kit (Vending Machine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitVendingMachineRefrigerated":{"prefab":{"prefabName":"ItemKitVendingMachineRefrigerated","prefabHash":-1867508561,"desc":"","name":"Kit (Vending Machine Refrigerated)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWall":{"prefab":{"prefabName":"ItemKitWall","prefabHash":-1826855889,"desc":"","name":"Kit (Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallArch":{"prefab":{"prefabName":"ItemKitWallArch","prefabHash":1625214531,"desc":"","name":"Kit (Arched Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallFlat":{"prefab":{"prefabName":"ItemKitWallFlat","prefabHash":-846838195,"desc":"","name":"Kit (Flat Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallGeometry":{"prefab":{"prefabName":"ItemKitWallGeometry","prefabHash":-784733231,"desc":"","name":"Kit (Geometric Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallIron":{"prefab":{"prefabName":"ItemKitWallIron","prefabHash":-524546923,"desc":"","name":"Kit (Iron Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallPadded":{"prefab":{"prefabName":"ItemKitWallPadded","prefabHash":-821868990,"desc":"","name":"Kit (Padded Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWaterBottleFiller":{"prefab":{"prefabName":"ItemKitWaterBottleFiller","prefabHash":159886536,"desc":"","name":"Kit (Water Bottle Filler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWaterPurifier":{"prefab":{"prefabName":"ItemKitWaterPurifier","prefabHash":611181283,"desc":"","name":"Kit (Water Purifier)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWeatherStation":{"prefab":{"prefabName":"ItemKitWeatherStation","prefabHash":337505889,"desc":"","name":"Kit (Weather Station)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitWindTurbine":{"prefab":{"prefabName":"ItemKitWindTurbine","prefabHash":-868916503,"desc":"","name":"Kit (Wind Turbine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWindowShutter":{"prefab":{"prefabName":"ItemKitWindowShutter","prefabHash":1779979754,"desc":"","name":"Kit (Window Shutter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemLabeller":{"prefab":{"prefabName":"ItemLabeller","prefabHash":-743968726,"desc":"A labeller lets you set names and values on a variety of devices and structures, including Console and Logic.","name":"Labeller"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemLaptop":{"prefab":{"prefabName":"ItemLaptop","prefabHash":141535121,"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","name":"Laptop"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","PositionX":"Read","PositionY":"Read","PositionZ":"Read","Power":"Read","PressureExternal":"Read","ReferenceId":"Read","TemperatureExternal":"Read"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"},{"name":"Battery","typ":"Battery"},{"name":"Motherboard","typ":"Motherboard"}]},"ItemLeadIngot":{"prefab":{"prefabName":"ItemLeadIngot","prefabHash":2134647745,"desc":"","name":"Ingot (Lead)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Lead":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemLeadOre":{"prefab":{"prefabName":"ItemLeadOre","prefabHash":-190236170,"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.","name":"Ore (Lead)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Lead":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemLightSword":{"prefab":{"prefabName":"ItemLightSword","prefabHash":1949076595,"desc":"A charming, if useless, pseudo-weapon. (Creative only.)","name":"Light Sword"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidCanisterEmpty":{"prefab":{"prefabName":"ItemLiquidCanisterEmpty","prefabHash":-185207387,"desc":"","name":"Liquid Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemLiquidCanisterSmart":{"prefab":{"prefabName":"ItemLiquidCanisterSmart","prefabHash":777684475,"desc":"0.Mode0\n1.Mode1","name":"Liquid Canister (Smart)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemLiquidDrain":{"prefab":{"prefabName":"ItemLiquidDrain","prefabHash":2036225202,"desc":"","name":"Kit (Liquid Drain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidPipeAnalyzer":{"prefab":{"prefabName":"ItemLiquidPipeAnalyzer","prefabHash":226055671,"desc":"","name":"Kit (Liquid Pipe Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidPipeHeater":{"prefab":{"prefabName":"ItemLiquidPipeHeater","prefabHash":-248475032,"desc":"Creates a Pipe Heater (Liquid).","name":"Pipe Heater Kit (Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidPipeValve":{"prefab":{"prefabName":"ItemLiquidPipeValve","prefabHash":-2126113312,"desc":"This kit creates a Liquid Valve.","name":"Kit (Liquid Pipe Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidPipeVolumePump":{"prefab":{"prefabName":"ItemLiquidPipeVolumePump","prefabHash":-2106280569,"desc":"","name":"Kit (Liquid Volume Pump)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidTankStorage":{"prefab":{"prefabName":"ItemLiquidTankStorage","prefabHash":2037427578,"desc":"This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister.","name":"Kit (Liquid Canister Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemMKIIAngleGrinder":{"prefab":{"prefabName":"ItemMKIIAngleGrinder","prefabHash":240174650,"desc":"Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure.","name":"Mk II Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIArcWelder":{"prefab":{"prefabName":"ItemMKIIArcWelder","prefabHash":-2061979347,"desc":"","name":"Mk II Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIICrowbar":{"prefab":{"prefabName":"ItemMKIICrowbar","prefabHash":1440775434,"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.","name":"Mk II Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIDrill":{"prefab":{"prefabName":"ItemMKIIDrill","prefabHash":324791548,"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.","name":"Mk II Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIDuctTape":{"prefab":{"prefabName":"ItemMKIIDuctTape","prefabHash":388774906,"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.","name":"Mk II Duct Tape"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIMiningDrill":{"prefab":{"prefabName":"ItemMKIIMiningDrill","prefabHash":-1875271296,"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.","name":"Mk II Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIScrewdriver":{"prefab":{"prefabName":"ItemMKIIScrewdriver","prefabHash":-2015613246,"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.","name":"Mk II Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIWireCutters":{"prefab":{"prefabName":"ItemMKIIWireCutters","prefabHash":-178893251,"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.","name":"Mk II Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIWrench":{"prefab":{"prefabName":"ItemMKIIWrench","prefabHash":1862001680,"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.","name":"Mk II Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMarineBodyArmor":{"prefab":{"prefabName":"ItemMarineBodyArmor","prefabHash":1399098998,"desc":"","name":"Marine Armor"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Suit","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMarineHelmet":{"prefab":{"prefabName":"ItemMarineHelmet","prefabHash":1073631646,"desc":"","name":"Marine Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMilk":{"prefab":{"prefabName":"ItemMilk","prefabHash":1327248310,"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.","name":"Milk"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"Milk":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemMiningBackPack":{"prefab":{"prefabName":"ItemMiningBackPack","prefabHash":-1650383245,"desc":"","name":"Mining Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"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"}]},"ItemMiningBelt":{"prefab":{"prefabName":"ItemMiningBelt","prefabHash":-676435305,"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.","name":"Mining Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemMiningBeltMKII":{"prefab":{"prefabName":"ItemMiningBeltMKII","prefabHash":1470787934,"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. ","name":"Mining Belt MK II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"}]},"ItemMiningCharge":{"prefab":{"prefabName":"ItemMiningCharge","prefabHash":15829510,"desc":"A low cost, high yield explosive with a 10 second timer.","name":"Mining Charge"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemMiningDrill":{"prefab":{"prefabName":"ItemMiningDrill","prefabHash":1055173191,"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.'","name":"Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillHeavy":{"prefab":{"prefabName":"ItemMiningDrillHeavy","prefabHash":-1663349918,"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.","name":"Mining Drill (Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillPneumatic":{"prefab":{"prefabName":"ItemMiningDrillPneumatic","prefabHash":1258187304,"desc":"0.Default\n1.Flatten","name":"Pneumatic Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemMkIIToolbelt":{"prefab":{"prefabName":"ItemMkIIToolbelt","prefabHash":1467558064,"desc":"A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy.","name":"Tool Belt MK II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"Tool","typ":"Tool"},{"name":"Tool","typ":"Tool"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMuffin":{"prefab":{"prefabName":"ItemMuffin","prefabHash":-1864982322,"desc":"A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin.","name":"Muffin"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemMushroom":{"prefab":{"prefabName":"ItemMushroom","prefabHash":2044798572,"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.","name":"Mushroom"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Mushroom":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemNVG":{"prefab":{"prefabName":"ItemNVG","prefabHash":982514123,"desc":"","name":"Night Vision Goggles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Glasses","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemNickelIngot":{"prefab":{"prefabName":"ItemNickelIngot","prefabHash":-1406385572,"desc":"","name":"Ingot (Nickel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Nickel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemNickelOre":{"prefab":{"prefabName":"ItemNickelOre","prefabHash":1830218956,"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.","name":"Ore (Nickel)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Nickel":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemNitrice":{"prefab":{"prefabName":"ItemNitrice","prefabHash":-1499471529,"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.","name":"Ice (Nitrice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemOxite":{"prefab":{"prefabName":"ItemOxite","prefabHash":-1805394113,"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.","name":"Ice (Oxite)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPassiveVent":{"prefab":{"prefabName":"ItemPassiveVent","prefabHash":238631271,"desc":"This kit creates a Passive Vent among other variants.","name":"Passive Vent"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPassiveVentInsulated":{"prefab":{"prefabName":"ItemPassiveVentInsulated","prefabHash":-1397583760,"desc":"","name":"Kit (Insulated Passive Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPeaceLily":{"prefab":{"prefabName":"ItemPeaceLily","prefabHash":2042955224,"desc":"A fetching lily with greater resistance to cold temperatures.","name":"Peace Lily"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPickaxe":{"prefab":{"prefabName":"ItemPickaxe","prefabHash":-913649823,"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.","name":"Pickaxe"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemPillHeal":{"prefab":{"prefabName":"ItemPillHeal","prefabHash":1118069417,"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.","name":"Pill (Medical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Food"}},"ItemPillStun":{"prefab":{"prefabName":"ItemPillStun","prefabHash":418958601,"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.","name":"Pill (Paralysis)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Food"}},"ItemPipeAnalyizer":{"prefab":{"prefabName":"ItemPipeAnalyizer","prefabHash":-767597887,"desc":"This kit creates a Pipe Analyzer.","name":"Kit (Pipe Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeCowl":{"prefab":{"prefabName":"ItemPipeCowl","prefabHash":-38898376,"desc":"This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres.","name":"Pipe Cowl"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeDigitalValve":{"prefab":{"prefabName":"ItemPipeDigitalValve","prefabHash":-1532448832,"desc":"This kit creates a Digital Valve.","name":"Kit (Digital Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeGasMixer":{"prefab":{"prefabName":"ItemPipeGasMixer","prefabHash":-1134459463,"desc":"This kit creates a Gas Mixer.","name":"Kit (Gas Mixer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeHeater":{"prefab":{"prefabName":"ItemPipeHeater","prefabHash":-1751627006,"desc":"Creates a Pipe Heater (Gas).","name":"Pipe Heater Kit (Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemPipeIgniter":{"prefab":{"prefabName":"ItemPipeIgniter","prefabHash":1366030599,"desc":"","name":"Kit (Pipe Igniter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeLabel":{"prefab":{"prefabName":"ItemPipeLabel","prefabHash":391769637,"desc":"This kit creates a Pipe Label.","name":"Kit (Pipe Label)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeLiquidRadiator":{"prefab":{"prefabName":"ItemPipeLiquidRadiator","prefabHash":-906521320,"desc":"This kit creates a Liquid Pipe Convection Radiator.","name":"Kit (Liquid Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeMeter":{"prefab":{"prefabName":"ItemPipeMeter","prefabHash":1207939683,"desc":"This kit creates a Pipe Meter.","name":"Kit (Pipe Meter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeRadiator":{"prefab":{"prefabName":"ItemPipeRadiator","prefabHash":-1796655088,"desc":"This kit creates a Pipe Convection Radiator.","name":"Kit (Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeValve":{"prefab":{"prefabName":"ItemPipeValve","prefabHash":799323450,"desc":"This kit creates a Valve.","name":"Kit (Pipe Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemPipeVolumePump":{"prefab":{"prefabName":"ItemPipeVolumePump","prefabHash":-1766301997,"desc":"This kit creates a Volume Pump.","name":"Kit (Volume Pump)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPlantEndothermic_Creative":{"prefab":{"prefabName":"ItemPlantEndothermic_Creative","prefabHash":-1159179557,"desc":"","name":"Endothermic Plant Creative"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantEndothermic_Genepool1":{"prefab":{"prefabName":"ItemPlantEndothermic_Genepool1","prefabHash":851290561,"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.","name":"Winterspawn (Alpha variant)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantEndothermic_Genepool2":{"prefab":{"prefabName":"ItemPlantEndothermic_Genepool2","prefabHash":-1414203269,"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.","name":"Winterspawn (Beta variant)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantSampler":{"prefab":{"prefabName":"ItemPlantSampler","prefabHash":173023800,"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.","name":"Plant Sampler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemPlantSwitchGrass":{"prefab":{"prefabName":"ItemPlantSwitchGrass","prefabHash":-532672323,"desc":"","name":"Switch Grass"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Default"}},"ItemPlantThermogenic_Creative":{"prefab":{"prefabName":"ItemPlantThermogenic_Creative","prefabHash":-1208890208,"desc":"","name":"Thermogenic Plant Creative"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantThermogenic_Genepool1":{"prefab":{"prefabName":"ItemPlantThermogenic_Genepool1","prefabHash":-177792789,"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.","name":"Hades Flower (Alpha strain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantThermogenic_Genepool2":{"prefab":{"prefabName":"ItemPlantThermogenic_Genepool2","prefabHash":1819167057,"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.","name":"Hades Flower (Beta strain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlasticSheets":{"prefab":{"prefabName":"ItemPlasticSheets","prefabHash":662053345,"desc":"","name":"Plastic Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemPotato":{"prefab":{"prefabName":"ItemPotato","prefabHash":1929046963,"desc":" Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies.","name":"Potato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Potato":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemPotatoBaked":{"prefab":{"prefabName":"ItemPotatoBaked","prefabHash":-2111886401,"desc":"","name":"Baked Potato"},"item":{"consumable":true,"ingredient":true,"maxQuantity":1.0,"reagents":{"Potato":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemPowerConnector":{"prefab":{"prefabName":"ItemPowerConnector","prefabHash":839924019,"desc":"This kit creates a Power Connector.","name":"Kit (Power Connector)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPumpkin":{"prefab":{"prefabName":"ItemPumpkin","prefabHash":1277828144,"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.","name":"Pumpkin"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Pumpkin":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemPumpkinPie":{"prefab":{"prefabName":"ItemPumpkinPie","prefabHash":62768076,"desc":"","name":"Pumpkin Pie"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemPumpkinSoup":{"prefab":{"prefabName":"ItemPumpkinSoup","prefabHash":1277979876,"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","name":"Pumpkin Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemPureIce":{"prefab":{"prefabName":"ItemPureIce","prefabHash":-1616308158,"desc":"A frozen chunk of pure Water","name":"Pure Ice Water"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceCarbonDioxide":{"prefab":{"prefabName":"ItemPureIceCarbonDioxide","prefabHash":-1251009404,"desc":"A frozen chunk of pure Carbon Dioxide","name":"Pure Ice Carbon Dioxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceHydrogen":{"prefab":{"prefabName":"ItemPureIceHydrogen","prefabHash":944530361,"desc":"A frozen chunk of pure Hydrogen","name":"Pure Ice Hydrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidCarbonDioxide":{"prefab":{"prefabName":"ItemPureIceLiquidCarbonDioxide","prefabHash":-1715945725,"desc":"A frozen chunk of pure Liquid Carbon Dioxide","name":"Pure Ice Liquid Carbon Dioxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidHydrogen":{"prefab":{"prefabName":"ItemPureIceLiquidHydrogen","prefabHash":-1044933269,"desc":"A frozen chunk of pure Liquid Hydrogen","name":"Pure Ice Liquid Hydrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidNitrogen":{"prefab":{"prefabName":"ItemPureIceLiquidNitrogen","prefabHash":1674576569,"desc":"A frozen chunk of pure Liquid Nitrogen","name":"Pure Ice Liquid Nitrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidNitrous":{"prefab":{"prefabName":"ItemPureIceLiquidNitrous","prefabHash":1428477399,"desc":"A frozen chunk of pure Liquid Nitrous Oxide","name":"Pure Ice Liquid Nitrous"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidOxygen":{"prefab":{"prefabName":"ItemPureIceLiquidOxygen","prefabHash":541621589,"desc":"A frozen chunk of pure Liquid Oxygen","name":"Pure Ice Liquid Oxygen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidPollutant":{"prefab":{"prefabName":"ItemPureIceLiquidPollutant","prefabHash":-1748926678,"desc":"A frozen chunk of pure Liquid Pollutant","name":"Pure Ice Liquid Pollutant"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidVolatiles":{"prefab":{"prefabName":"ItemPureIceLiquidVolatiles","prefabHash":-1306628937,"desc":"A frozen chunk of pure Liquid Volatiles","name":"Pure Ice Liquid Volatiles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceNitrogen":{"prefab":{"prefabName":"ItemPureIceNitrogen","prefabHash":-1708395413,"desc":"A frozen chunk of pure Nitrogen","name":"Pure Ice Nitrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceNitrous":{"prefab":{"prefabName":"ItemPureIceNitrous","prefabHash":386754635,"desc":"A frozen chunk of pure Nitrous Oxide","name":"Pure Ice NitrousOxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceOxygen":{"prefab":{"prefabName":"ItemPureIceOxygen","prefabHash":-1150448260,"desc":"A frozen chunk of pure Oxygen","name":"Pure Ice Oxygen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIcePollutant":{"prefab":{"prefabName":"ItemPureIcePollutant","prefabHash":-1755356,"desc":"A frozen chunk of pure Pollutant","name":"Pure Ice Pollutant"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIcePollutedWater":{"prefab":{"prefabName":"ItemPureIcePollutedWater","prefabHash":-2073202179,"desc":"A frozen chunk of Polluted Water","name":"Pure Ice Polluted Water"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceSteam":{"prefab":{"prefabName":"ItemPureIceSteam","prefabHash":-874791066,"desc":"A frozen chunk of pure Steam","name":"Pure Ice Steam"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceVolatiles":{"prefab":{"prefabName":"ItemPureIceVolatiles","prefabHash":-633723719,"desc":"A frozen chunk of pure Volatiles","name":"Pure Ice Volatiles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemRTG":{"prefab":{"prefabName":"ItemRTG","prefabHash":495305053,"desc":"This kit creates that miracle of modern science, a Kit (Creative RTG).","name":"Kit (Creative RTG)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemRTGSurvival":{"prefab":{"prefabName":"ItemRTGSurvival","prefabHash":1817645803,"desc":"This kit creates a Kit (RTG).","name":"Kit (RTG)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemReagentMix":{"prefab":{"prefabName":"ItemReagentMix","prefabHash":-1641500434,"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.","name":"Reagent Mix"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ores"}},"ItemRemoteDetonator":{"prefab":{"prefabName":"ItemRemoteDetonator","prefabHash":678483886,"desc":"","name":"Remote Detonator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemResearchCapsule":{"prefab":{"prefabName":"ItemResearchCapsule","prefabHash":819096942,"desc":"","name":"Research Capsule Blue"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemResearchCapsuleGreen":{"prefab":{"prefabName":"ItemResearchCapsuleGreen","prefabHash":-1352732550,"desc":"","name":"Research Capsule Green"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemResearchCapsuleRed":{"prefab":{"prefabName":"ItemResearchCapsuleRed","prefabHash":954947943,"desc":"","name":"Research Capsule Red"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemResearchCapsuleYellow":{"prefab":{"prefabName":"ItemResearchCapsuleYellow","prefabHash":750952701,"desc":"","name":"Research Capsule Yellow"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemReusableFireExtinguisher":{"prefab":{"prefabName":"ItemReusableFireExtinguisher","prefabHash":-1773192190,"desc":"Requires a canister filled with any inert liquid to opperate.","name":"Fire Extinguisher (Reusable)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"ItemRice":{"prefab":{"prefabName":"ItemRice","prefabHash":658916791,"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.","name":"Rice"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Rice":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemRoadFlare":{"prefab":{"prefabName":"ItemRoadFlare","prefabHash":871811564,"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.","name":"Road Flare"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"Flare","sortingClass":"Default"}},"ItemRocketMiningDrillHead":{"prefab":{"prefabName":"ItemRocketMiningDrillHead","prefabHash":2109945337,"desc":"Replaceable drill head for Rocket Miner","name":"Mining-Drill Head (Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadDurable":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadDurable","prefabHash":1530764483,"desc":"","name":"Mining-Drill Head (Durable)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadHighSpeedIce":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadHighSpeedIce","prefabHash":653461728,"desc":"","name":"Mining-Drill Head (High Speed Ice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadHighSpeedMineral":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadHighSpeedMineral","prefabHash":1440678625,"desc":"","name":"Mining-Drill Head (High Speed Mineral)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadIce":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadIce","prefabHash":-380904592,"desc":"","name":"Mining-Drill Head (Ice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadLongTerm":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadLongTerm","prefabHash":-684020753,"desc":"","name":"Mining-Drill Head (Long Term)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadMineral":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadMineral","prefabHash":1083675581,"desc":"","name":"Mining-Drill Head (Mineral)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketScanningHead":{"prefab":{"prefabName":"ItemRocketScanningHead","prefabHash":-1198702771,"desc":"","name":"Rocket Scanner Head"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"ScanningHead","sortingClass":"Default"}},"ItemScanner":{"prefab":{"prefabName":"ItemScanner","prefabHash":1661270830,"desc":"A mysterious piece of technology, rumored to have Zrillian origins.","name":"Handheld Scanner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemScrewdriver":{"prefab":{"prefabName":"ItemScrewdriver","prefabHash":687940869,"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.","name":"Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemSecurityCamera":{"prefab":{"prefabName":"ItemSecurityCamera","prefabHash":-1981101032,"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.","name":"Security Camera"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemSensorLenses":{"prefab":{"prefabName":"ItemSensorLenses","prefabHash":-1176140051,"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.","name":"Sensor Lenses"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Glasses","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Sensor Processing Unit","typ":"SensorProcessingUnit"}]},"ItemSensorProcessingUnitCelestialScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitCelestialScanner","prefabHash":-1154200014,"desc":"","name":"Sensor Processing Unit (Celestial Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSensorProcessingUnitMesonScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitMesonScanner","prefabHash":-1730464583,"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.","name":"Sensor Processing Unit (T-Ray Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSensorProcessingUnitOreScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitOreScanner","prefabHash":-1219128491,"desc":"The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD.","name":"Sensor Processing Unit (Ore Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSiliconIngot":{"prefab":{"prefabName":"ItemSiliconIngot","prefabHash":-290196476,"desc":"","name":"Ingot (Silicon)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Silicon":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSiliconOre":{"prefab":{"prefabName":"ItemSiliconOre","prefabHash":1103972403,"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.","name":"Ore (Silicon)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Silicon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemSilverIngot":{"prefab":{"prefabName":"ItemSilverIngot","prefabHash":-929742000,"desc":"","name":"Ingot (Silver)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Silver":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSilverOre":{"prefab":{"prefabName":"ItemSilverOre","prefabHash":-916518678,"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.","name":"Ore (Silver)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Silver":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemSolderIngot":{"prefab":{"prefabName":"ItemSolderIngot","prefabHash":-82508479,"desc":"","name":"Ingot (Solder)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Solder":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSolidFuel":{"prefab":{"prefabName":"ItemSolidFuel","prefabHash":-365253871,"desc":"","name":"Solid Fuel (Hydrocarbon)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Hydrocarbon":1.0},"slotClass":"Ore","sortingClass":"Resources"}},"ItemSoundCartridgeBass":{"prefab":{"prefabName":"ItemSoundCartridgeBass","prefabHash":-1883441704,"desc":"","name":"Sound Cartridge Bass"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeDrums":{"prefab":{"prefabName":"ItemSoundCartridgeDrums","prefabHash":-1901500508,"desc":"","name":"Sound Cartridge Drums"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeLeads":{"prefab":{"prefabName":"ItemSoundCartridgeLeads","prefabHash":-1174735962,"desc":"","name":"Sound Cartridge Leads"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeSynth":{"prefab":{"prefabName":"ItemSoundCartridgeSynth","prefabHash":-1971419310,"desc":"","name":"Sound Cartridge Synth"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoyOil":{"prefab":{"prefabName":"ItemSoyOil","prefabHash":1387403148,"desc":"","name":"Soy Oil"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"Oil":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemSoybean":{"prefab":{"prefabName":"ItemSoybean","prefabHash":1924673028,"desc":" Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil","name":"Soybean"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100.0,"reagents":{"Soy":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemSpaceCleaner":{"prefab":{"prefabName":"ItemSpaceCleaner","prefabHash":-1737666461,"desc":"There was a time when humanity really wanted to keep space clean. That time has passed.","name":"Space Cleaner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemSpaceHelmet":{"prefab":{"prefabName":"ItemSpaceHelmet","prefabHash":714830451,"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.","name":"Space Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemSpaceIce":{"prefab":{"prefabName":"ItemSpaceIce","prefabHash":675686937,"desc":"","name":"Space Ice"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Ore","sortingClass":"Ores"}},"ItemSpaceOre":{"prefab":{"prefabName":"ItemSpaceOre","prefabHash":2131916219,"desc":"Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores.","name":"Dirty Ore"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Ore","sortingClass":"Ores"}},"ItemSpacepack":{"prefab":{"prefabName":"ItemSpacepack","prefabHash":-1260618380,"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.","name":"Spacepack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemSprayCanBlack":{"prefab":{"prefabName":"ItemSprayCanBlack","prefabHash":-688107795,"desc":"Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses.","name":"Spray Paint (Black)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanBlue":{"prefab":{"prefabName":"ItemSprayCanBlue","prefabHash":-498464883,"desc":"What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'","name":"Spray Paint (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanBrown":{"prefab":{"prefabName":"ItemSprayCanBrown","prefabHash":845176977,"desc":"In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed.","name":"Spray Paint (Brown)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanGreen":{"prefab":{"prefabName":"ItemSprayCanGreen","prefabHash":-1880941852,"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.","name":"Spray Paint (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanGrey":{"prefab":{"prefabName":"ItemSprayCanGrey","prefabHash":-1645266981,"desc":"Arguably the most popular color in the universe, grey was invented so designers had something to do.","name":"Spray Paint (Grey)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanKhaki":{"prefab":{"prefabName":"ItemSprayCanKhaki","prefabHash":1918456047,"desc":"Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode.","name":"Spray Paint (Khaki)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanOrange":{"prefab":{"prefabName":"ItemSprayCanOrange","prefabHash":-158007629,"desc":"Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove.","name":"Spray Paint (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanPink":{"prefab":{"prefabName":"ItemSprayCanPink","prefabHash":1344257263,"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.","name":"Spray Paint (Pink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanPurple":{"prefab":{"prefabName":"ItemSprayCanPurple","prefabHash":30686509,"desc":"Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong.","name":"Spray Paint (Purple)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanRed":{"prefab":{"prefabName":"ItemSprayCanRed","prefabHash":1514393921,"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.","name":"Spray Paint (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanWhite":{"prefab":{"prefabName":"ItemSprayCanWhite","prefabHash":498481505,"desc":"White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff.","name":"Spray Paint (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanYellow":{"prefab":{"prefabName":"ItemSprayCanYellow","prefabHash":995468116,"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.","name":"Spray Paint (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayGun":{"prefab":{"prefabName":"ItemSprayGun","prefabHash":1289723966,"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.","name":"Spray Gun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Spray Can","typ":"Bottle"}]},"ItemSteelFrames":{"prefab":{"prefabName":"ItemSteelFrames","prefabHash":-1448105779,"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.","name":"Steel Frames"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemSteelIngot":{"prefab":{"prefabName":"ItemSteelIngot","prefabHash":-654790771,"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.","name":"Ingot (Steel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Steel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSteelSheets":{"prefab":{"prefabName":"ItemSteelSheets","prefabHash":38555961,"desc":"An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types.","name":"Steel Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemStelliteGlassSheets":{"prefab":{"prefabName":"ItemStelliteGlassSheets","prefabHash":-2038663432,"desc":"A stronger glass substitute.","name":"Stellite Glass Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemStelliteIngot":{"prefab":{"prefabName":"ItemStelliteIngot","prefabHash":-1897868623,"desc":"","name":"Ingot (Stellite)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Stellite":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSuitModCryogenicUpgrade":{"prefab":{"prefabName":"ItemSuitModCryogenicUpgrade","prefabHash":-1274308304,"desc":"Enables suits with basic cooling functionality to work with cryogenic liquid.","name":"Cryogenic Suit Upgrade"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SuitMod","sortingClass":"Default"}},"ItemTablet":{"prefab":{"prefabName":"ItemTablet","prefabHash":-229808600,"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.","name":"Handheld Tablet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"}]},"ItemTerrainManipulator":{"prefab":{"prefabName":"ItemTerrainManipulator","prefabHash":111280987,"desc":"0.Mode0\n1.Mode1","name":"Terrain Manipulator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Dirt Canister","typ":"Ore"}]},"ItemTomato":{"prefab":{"prefabName":"ItemTomato","prefabHash":-998592080,"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.","name":"Tomato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Tomato":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemTomatoSoup":{"prefab":{"prefabName":"ItemTomatoSoup","prefabHash":688734890,"desc":"Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine.","name":"Tomato Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemToolBelt":{"prefab":{"prefabName":"ItemToolBelt","prefabHash":-355127880,"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.","name":"Tool Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemTropicalPlant":{"prefab":{"prefabName":"ItemTropicalPlant","prefabHash":-800947386,"desc":"An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants.","name":"Tropical Lily"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemUraniumOre":{"prefab":{"prefabName":"ItemUraniumOre","prefabHash":-1516581844,"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.","name":"Ore (Uranium)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Uranium":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemVolatiles":{"prefab":{"prefabName":"ItemVolatiles","prefabHash":1253102035,"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","name":"Ice (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemWallCooler":{"prefab":{"prefabName":"ItemWallCooler","prefabHash":-1567752627,"desc":"This kit creates a Wall Cooler.","name":"Kit (Wall Cooler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWallHeater":{"prefab":{"prefabName":"ItemWallHeater","prefabHash":1880134612,"desc":"This kit creates a Kit (Wall Heater).","name":"Kit (Wall Heater)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWallLight":{"prefab":{"prefabName":"ItemWallLight","prefabHash":1108423476,"desc":"This kit creates any one of ten Kit (Lights) variants.","name":"Kit (Lights)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWaspaloyIngot":{"prefab":{"prefabName":"ItemWaspaloyIngot","prefabHash":156348098,"desc":"","name":"Ingot (Waspaloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Waspaloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemWaterBottle":{"prefab":{"prefabName":"ItemWaterBottle","prefabHash":107741229,"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.","name":"Water Bottle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.5,"slotClass":"LiquidBottle","sortingClass":"Default"}},"ItemWaterPipeDigitalValve":{"prefab":{"prefabName":"ItemWaterPipeDigitalValve","prefabHash":309693520,"desc":"","name":"Kit (Liquid Digital Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWaterPipeMeter":{"prefab":{"prefabName":"ItemWaterPipeMeter","prefabHash":-90898877,"desc":"","name":"Kit (Liquid Pipe Meter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWaterWallCooler":{"prefab":{"prefabName":"ItemWaterWallCooler","prefabHash":-1721846327,"desc":"","name":"Kit (Liquid Wall Cooler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWearLamp":{"prefab":{"prefabName":"ItemWearLamp","prefabHash":-598730959,"desc":"","name":"Headlamp"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemWeldingTorch":{"prefab":{"prefabName":"ItemWeldingTorch","prefabHash":-2066892079,"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.","name":"Welding Torch"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemWheat":{"prefab":{"prefabName":"ItemWheat","prefabHash":-1057658015,"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.","name":"Wheat"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100.0,"reagents":{"Carbon":1.0},"slotClass":"Plant","sortingClass":"Default"}},"ItemWireCutters":{"prefab":{"prefabName":"ItemWireCutters","prefabHash":1535854074,"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.","name":"Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemWirelessBatteryCellExtraLarge":{"prefab":{"prefabName":"ItemWirelessBatteryCellExtraLarge","prefabHash":-504717121,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Wireless Battery Cell Extra Large"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemWreckageAirConditioner1":{"prefab":{"prefabName":"ItemWreckageAirConditioner1","prefabHash":-1826023284,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageAirConditioner2":{"prefab":{"prefabName":"ItemWreckageAirConditioner2","prefabHash":169888054,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageHydroponicsTray1":{"prefab":{"prefabName":"ItemWreckageHydroponicsTray1","prefabHash":-310178617,"desc":"","name":"Wreckage Hydroponics Tray"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageLargeExtendableRadiator01":{"prefab":{"prefabName":"ItemWreckageLargeExtendableRadiator01","prefabHash":-997763,"desc":"","name":"Wreckage Large Extendable Radiator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureRTG1":{"prefab":{"prefabName":"ItemWreckageStructureRTG1","prefabHash":391453348,"desc":"","name":"Wreckage Structure RTG"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation001":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation001","prefabHash":-834664349,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation002":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation002","prefabHash":1464424921,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation003":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation003","prefabHash":542009679,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation004":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation004","prefabHash":-1104478996,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation005":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation005","prefabHash":-919745414,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation006":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation006","prefabHash":1344576960,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation007":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation007","prefabHash":656649558,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation008":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation008","prefabHash":-1214467897,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator1":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator1","prefabHash":-1662394403,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator2":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator2","prefabHash":98602599,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator3":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator3","prefabHash":1927790321,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageWallCooler1":{"prefab":{"prefabName":"ItemWreckageWallCooler1","prefabHash":-1682930158,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageWallCooler2":{"prefab":{"prefabName":"ItemWreckageWallCooler2","prefabHash":45733800,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWrench":{"prefab":{"prefabName":"ItemWrench","prefabHash":-1886261558,"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","name":"Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"KitSDBSilo":{"prefab":{"prefabName":"KitSDBSilo","prefabHash":1932952652,"desc":"This kit creates a SDB Silo.","name":"Kit (SDB Silo)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"KitStructureCombustionCentrifuge":{"prefab":{"prefabName":"KitStructureCombustionCentrifuge","prefabHash":231903234,"desc":"","name":"Kit (Combustion Centrifuge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"KitchenTableShort":{"prefab":{"prefabName":"KitchenTableShort","prefabHash":-1427415566,"desc":"","name":"Kitchen Table (Short)"},"structure":{"smallGrid":true}},"KitchenTableSimpleShort":{"prefab":{"prefabName":"KitchenTableSimpleShort","prefabHash":-78099334,"desc":"","name":"Kitchen Table (Simple Short)"},"structure":{"smallGrid":true}},"KitchenTableSimpleTall":{"prefab":{"prefabName":"KitchenTableSimpleTall","prefabHash":-1068629349,"desc":"","name":"Kitchen Table (Simple Tall)"},"structure":{"smallGrid":true}},"KitchenTableTall":{"prefab":{"prefabName":"KitchenTableTall","prefabHash":-1386237782,"desc":"","name":"Kitchen Table (Tall)"},"structure":{"smallGrid":true}},"Lander":{"prefab":{"prefabName":"Lander","prefabHash":1605130615,"desc":"","name":"Lander"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"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"}]},"Landingpad_2x2CenterPiece01":{"prefab":{"prefabName":"Landingpad_2x2CenterPiece01","prefabHash":-1295222317,"desc":"Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors","name":"Landingpad 2x2 Center Piece"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Landingpad_BlankPiece":{"prefab":{"prefabName":"Landingpad_BlankPiece","prefabHash":912453390,"desc":"","name":"Landingpad"},"structure":{"smallGrid":true}},"Landingpad_CenterPiece01":{"prefab":{"prefabName":"Landingpad_CenterPiece01","prefabHash":1070143159,"desc":"The target point where the trader shuttle will land. Requires a clear view of the sky.","name":"Landingpad Center"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"modes":{"0":"None","1":"NoContact","2":"Moving","3":"Holding","4":"Landed"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Landingpad_CrossPiece":{"prefab":{"prefabName":"Landingpad_CrossPiece","prefabHash":1101296153,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Cross"},"structure":{"smallGrid":true}},"Landingpad_DataConnectionPiece":{"prefab":{"prefabName":"Landingpad_DataConnectionPiece","prefabHash":-2066405918,"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.","name":"Landingpad Data And Power"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_DiagonalPiece01":{"prefab":{"prefabName":"Landingpad_DiagonalPiece01","prefabHash":977899131,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Diagonal"},"structure":{"smallGrid":true}},"Landingpad_GasConnectorInwardPiece":{"prefab":{"prefabName":"Landingpad_GasConnectorInwardPiece","prefabHash":817945707,"desc":"","name":"Landingpad Gas Input"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_GasConnectorOutwardPiece":{"prefab":{"prefabName":"Landingpad_GasConnectorOutwardPiece","prefabHash":-1100218307,"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.","name":"Landingpad Gas Output"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_GasCylinderTankPiece":{"prefab":{"prefabName":"Landingpad_GasCylinderTankPiece","prefabHash":170818567,"desc":"Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders.","name":"Landingpad Gas Storage"},"structure":{"smallGrid":true}},"Landingpad_LiquidConnectorInwardPiece":{"prefab":{"prefabName":"Landingpad_LiquidConnectorInwardPiece","prefabHash":-1216167727,"desc":"","name":"Landingpad Liquid Input"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_LiquidConnectorOutwardPiece":{"prefab":{"prefabName":"Landingpad_LiquidConnectorOutwardPiece","prefabHash":-1788929869,"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.","name":"Landingpad Liquid Output"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_StraightPiece01":{"prefab":{"prefabName":"Landingpad_StraightPiece01","prefabHash":-976273247,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Straight"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceCorner":{"prefab":{"prefabName":"Landingpad_TaxiPieceCorner","prefabHash":-1872345847,"desc":"","name":"Landingpad Taxi Corner"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceHold":{"prefab":{"prefabName":"Landingpad_TaxiPieceHold","prefabHash":146051619,"desc":"","name":"Landingpad Taxi Hold"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceStraight":{"prefab":{"prefabName":"Landingpad_TaxiPieceStraight","prefabHash":-1477941080,"desc":"","name":"Landingpad Taxi Straight"},"structure":{"smallGrid":true}},"Landingpad_ThreshholdPiece":{"prefab":{"prefabName":"Landingpad_ThreshholdPiece","prefabHash":-1514298582,"desc":"","name":"Landingpad Threshhold"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"LogicStepSequencer8":{"prefab":{"prefabName":"LogicStepSequencer8","prefabHash":1531272458,"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.","name":"Logic Step Sequencer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Sound Cartridge","typ":"SoundCartridge"}],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Meteorite":{"prefab":{"prefabName":"Meteorite","prefabHash":-99064335,"desc":"","name":"Meteorite"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"MonsterEgg":{"prefab":{"prefabName":"MonsterEgg","prefabHash":-1667675295,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"MotherboardComms":{"prefab":{"prefabName":"MotherboardComms","prefabHash":-337075633,"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.","name":"Communications Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardLogic":{"prefab":{"prefabName":"MotherboardLogic","prefabHash":502555944,"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.","name":"Logic Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardMissionControl":{"prefab":{"prefabName":"MotherboardMissionControl","prefabHash":-127121474,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardProgrammableChip":{"prefab":{"prefabName":"MotherboardProgrammableChip","prefabHash":-161107071,"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.","name":"IC Editor Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardRockets":{"prefab":{"prefabName":"MotherboardRockets","prefabHash":-806986392,"desc":"","name":"Rocket Control Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardSorter":{"prefab":{"prefabName":"MotherboardSorter","prefabHash":-1908268220,"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.","name":"Sorter Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MothershipCore":{"prefab":{"prefabName":"MothershipCore","prefabHash":-1930442922,"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.","name":"Mothership Core"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"NpcChick":{"prefab":{"prefabName":"NpcChick","prefabHash":155856647,"desc":"","name":"Chick"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"NpcChicken":{"prefab":{"prefabName":"NpcChicken","prefabHash":399074198,"desc":"","name":"Chicken"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"PassiveSpeaker":{"prefab":{"prefabName":"PassiveSpeaker","prefabHash":248893646,"desc":"","name":"Passive Speaker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"ReadWrite","ReferenceId":"ReadWrite","SoundAlert":"ReadWrite","Volume":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"PipeBenderMod":{"prefab":{"prefabName":"PipeBenderMod","prefabHash":443947415,"desc":"Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Pipe Bender Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"PortableComposter":{"prefab":{"prefabName":"PortableComposter","prefabHash":-1958705204,"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","name":"Portable Composter"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"Battery"},{"name":"Liquid Canister","typ":"LiquidCanister"}]},"PortableSolarPanel":{"prefab":{"prefabName":"PortableSolarPanel","prefabHash":2043318949,"desc":"","name":"Portable Solar Panel"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Open":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"RailingElegant01":{"prefab":{"prefabName":"RailingElegant01","prefabHash":399661231,"desc":"","name":"Railing Elegant (Type 1)"},"structure":{"smallGrid":false}},"RailingElegant02":{"prefab":{"prefabName":"RailingElegant02","prefabHash":-1898247915,"desc":"","name":"Railing Elegant (Type 2)"},"structure":{"smallGrid":false}},"RailingIndustrial02":{"prefab":{"prefabName":"RailingIndustrial02","prefabHash":-2072792175,"desc":"","name":"Railing Industrial (Type 2)"},"structure":{"smallGrid":false}},"ReagentColorBlue":{"prefab":{"prefabName":"ReagentColorBlue","prefabHash":980054869,"desc":"","name":"Color Dye (Blue)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorBlue":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorGreen":{"prefab":{"prefabName":"ReagentColorGreen","prefabHash":120807542,"desc":"","name":"Color Dye (Green)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorGreen":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorOrange":{"prefab":{"prefabName":"ReagentColorOrange","prefabHash":-400696159,"desc":"","name":"Color Dye (Orange)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorOrange":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorRed":{"prefab":{"prefabName":"ReagentColorRed","prefabHash":1998377961,"desc":"","name":"Color Dye (Red)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorRed":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorYellow":{"prefab":{"prefabName":"ReagentColorYellow","prefabHash":635208006,"desc":"","name":"Color Dye (Yellow)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorYellow":10.0},"slotClass":"None","sortingClass":"Resources"}},"RespawnPoint":{"prefab":{"prefabName":"RespawnPoint","prefabHash":-788672929,"desc":"Place a respawn point to set a player entry point to your base when loading in, or returning from the dead.","name":"Respawn Point"},"structure":{"smallGrid":true}},"RespawnPointWallMounted":{"prefab":{"prefabName":"RespawnPointWallMounted","prefabHash":-491247370,"desc":"","name":"Respawn Point (Mounted)"},"structure":{"smallGrid":true}},"Robot":{"prefab":{"prefabName":"Robot","prefabHash":434786784,"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","name":"AIMeE Bot"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"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"}]},"RoverCargo":{"prefab":{"prefabName":"RoverCargo","prefabHash":350726273,"desc":"Connects to Logic Transmitter","name":"Rover (Cargo)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"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":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI":{"prefab":{"prefabName":"Rover_MkI","prefabHash":-2049946335,"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","name":"Rover MkI"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"},"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"},"10":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"slots":[{"name":"Entity","typ":"Entity"},{"name":"Entity","typ":"Entity"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI_build_states":{"prefab":{"prefabName":"Rover_MkI_build_states","prefabHash":861674123,"desc":"","name":"Rover MKI"},"structure":{"smallGrid":false}},"SMGMagazine":{"prefab":{"prefabName":"SMGMagazine","prefabHash":-256607540,"desc":"","name":"SMG Magazine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Magazine","sortingClass":"Default"}},"SeedBag_Corn":{"prefab":{"prefabName":"SeedBag_Corn","prefabHash":-1290755415,"desc":"Grow a Corn.","name":"Corn Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Fern":{"prefab":{"prefabName":"SeedBag_Fern","prefabHash":-1990600883,"desc":"Grow a Fern.","name":"Fern Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Mushroom":{"prefab":{"prefabName":"SeedBag_Mushroom","prefabHash":311593418,"desc":"Grow a Mushroom.","name":"Mushroom Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Potato":{"prefab":{"prefabName":"SeedBag_Potato","prefabHash":1005571172,"desc":"Grow a Potato.","name":"Potato Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Pumpkin":{"prefab":{"prefabName":"SeedBag_Pumpkin","prefabHash":1423199840,"desc":"Grow a Pumpkin.","name":"Pumpkin Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Rice":{"prefab":{"prefabName":"SeedBag_Rice","prefabHash":-1691151239,"desc":"Grow some Rice.","name":"Rice Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Soybean":{"prefab":{"prefabName":"SeedBag_Soybean","prefabHash":1783004244,"desc":"Grow some Soybean.","name":"Soybean Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Switchgrass":{"prefab":{"prefabName":"SeedBag_Switchgrass","prefabHash":488360169,"desc":"","name":"Switchgrass Seed"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Tomato":{"prefab":{"prefabName":"SeedBag_Tomato","prefabHash":-1922066841,"desc":"Grow a Tomato.","name":"Tomato Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Wheet":{"prefab":{"prefabName":"SeedBag_Wheet","prefabHash":-654756733,"desc":"Grow some Wheat.","name":"Wheat Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SpaceShuttle":{"prefab":{"prefabName":"SpaceShuttle","prefabHash":-1991297271,"desc":"An antiquated Sinotai transport craft, long since decommissioned.","name":"Space Shuttle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Captain's Seat","typ":"Entity"},{"name":"Passenger Seat Left","typ":"Entity"},{"name":"Passenger Seat Right","typ":"Entity"}]},"StopWatch":{"prefab":{"prefabName":"StopWatch","prefabHash":-1527229051,"desc":"","name":"Stop Watch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Time":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureAccessBridge":{"prefab":{"prefabName":"StructureAccessBridge","prefabHash":1298920475,"desc":"Extendable bridge that spans three grids","name":"Access Bridge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureActiveVent":{"prefab":{"prefabName":"StructureActiveVent","prefabHash":-1129453144,"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 ...","name":"Active Vent"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAdvancedComposter":{"prefab":{"prefabName":"StructureAdvancedComposter","prefabHash":446212963,"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","name":"Advanced Composter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAdvancedFurnace":{"prefab":{"prefabName":"StructureAdvancedFurnace","prefabHash":545937711,"desc":"The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure.","name":"Advanced Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureAdvancedPackagingMachine":{"prefab":{"prefabName":"StructureAdvancedPackagingMachine","prefabHash":-463037670,"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.","name":"Advanced Packaging Machine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureAirConditioner":{"prefab":{"prefabName":"StructureAirConditioner","prefabHash":-2087593337,"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.","name":"Air Conditioner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Waste"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAirlock":{"prefab":{"prefabName":"StructureAirlock","prefabHash":-2105052344,"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.","name":"Airlock"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAirlockGate":{"prefab":{"prefabName":"StructureAirlockGate","prefabHash":1736080881,"desc":"1 x 1 modular door piece for building hangar doors.","name":"Small Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAngledBench":{"prefab":{"prefabName":"StructureAngledBench","prefabHash":1811979158,"desc":"","name":"Bench (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureArcFurnace":{"prefab":{"prefabName":"StructureArcFurnace","prefabHash":-247344692,"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.","name":"Arc Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"},{"name":"Export","typ":"Ingot"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureAreaPowerControl":{"prefab":{"prefabName":"StructureAreaPowerControl","prefabHash":1999523701,"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.","name":"Area Power Control"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAreaPowerControlReversed":{"prefab":{"prefabName":"StructureAreaPowerControlReversed","prefabHash":-1032513487,"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.","name":"Area Power Control"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAutoMinerSmall":{"prefab":{"prefabName":"StructureAutoMinerSmall","prefabHash":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":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAutolathe":{"prefab":{"prefabName":"StructureAutolathe","prefabHash":336213101,"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 ","name":"Autolathe"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureAutomatedOven":{"prefab":{"prefabName":"StructureAutomatedOven","prefabHash":-1672404896,"desc":"","name":"Automated Oven"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureBackLiquidPressureRegulator":{"prefab":{"prefabName":"StructureBackLiquidPressureRegulator","prefabHash":2099900163,"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.","name":"Liquid Back Volume Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBackPressureRegulator":{"prefab":{"prefabName":"StructureBackPressureRegulator","prefabHash":-1149857558,"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.","name":"Back Pressure Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBasketHoop":{"prefab":{"prefabName":"StructureBasketHoop","prefabHash":-1613497288,"desc":"","name":"Basket Hoop"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBattery":{"prefab":{"prefabName":"StructureBattery","prefabHash":-400115994,"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).","name":"Station Battery"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryCharger":{"prefab":{"prefabName":"StructureBatteryCharger","prefabHash":1945930022,"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.","name":"Battery Cell Charger"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryChargerSmall":{"prefab":{"prefabName":"StructureBatteryChargerSmall","prefabHash":-761772413,"desc":"","name":"Battery Charger Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryLarge":{"prefab":{"prefabName":"StructureBatteryLarge","prefabHash":-1388288459,"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). ","name":"Station Battery (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryMedium":{"prefab":{"prefabName":"StructureBatteryMedium","prefabHash":-1125305264,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatterySmall":{"prefab":{"prefabName":"StructureBatterySmall","prefabHash":-2123455080,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Auxiliary Rocket Battery "},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBeacon":{"prefab":{"prefabName":"StructureBeacon","prefabHash":-188177083,"desc":"","name":"Beacon"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench":{"prefab":{"prefabName":"StructureBench","prefabHash":-2042448192,"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.","name":"Powered Bench"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench1":{"prefab":{"prefabName":"StructureBench1","prefabHash":406745009,"desc":"","name":"Bench (Counter Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench2":{"prefab":{"prefabName":"StructureBench2","prefabHash":-2127086069,"desc":"","name":"Bench (High Tech Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench3":{"prefab":{"prefabName":"StructureBench3","prefabHash":-164622691,"desc":"","name":"Bench (Frame Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench4":{"prefab":{"prefabName":"StructureBench4","prefabHash":1750375230,"desc":"","name":"Bench (Workbench Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBlastDoor":{"prefab":{"prefabName":"StructureBlastDoor","prefabHash":337416191,"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.","name":"Blast Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureBlockBed":{"prefab":{"prefabName":"StructureBlockBed","prefabHash":697908419,"desc":"Description coming.","name":"Block Bed"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBlocker":{"prefab":{"prefabName":"StructureBlocker","prefabHash":378084505,"desc":"","name":"Blocker"},"structure":{"smallGrid":false}},"StructureCableAnalysizer":{"prefab":{"prefabName":"StructureCableAnalysizer","prefabHash":1036015121,"desc":"","name":"Cable Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PowerActual":"Read","PowerPotential":"Read","PowerRequired":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableCorner":{"prefab":{"prefabName":"StructureCableCorner","prefabHash":-889269388,"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).","name":"Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3":{"prefab":{"prefabName":"StructureCableCorner3","prefabHash":980469101,"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).","name":"Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3Burnt":{"prefab":{"prefabName":"StructureCableCorner3Burnt","prefabHash":318437449,"desc":"","name":"Burnt Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3HBurnt":{"prefab":{"prefabName":"StructureCableCorner3HBurnt","prefabHash":2393826,"desc":"","name":""},"structure":{"smallGrid":true}},"StructureCableCorner4":{"prefab":{"prefabName":"StructureCableCorner4","prefabHash":-1542172466,"desc":"","name":"Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner4Burnt":{"prefab":{"prefabName":"StructureCableCorner4Burnt","prefabHash":268421361,"desc":"","name":"Burnt Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner4HBurnt":{"prefab":{"prefabName":"StructureCableCorner4HBurnt","prefabHash":-981223316,"desc":"","name":"Burnt Heavy Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerBurnt":{"prefab":{"prefabName":"StructureCableCornerBurnt","prefabHash":-177220914,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH":{"prefab":{"prefabName":"StructureCableCornerH","prefabHash":-39359015,"desc":"","name":"Heavy Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH3":{"prefab":{"prefabName":"StructureCableCornerH3","prefabHash":-1843379322,"desc":"","name":"Heavy Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH4":{"prefab":{"prefabName":"StructureCableCornerH4","prefabHash":205837861,"desc":"","name":"Heavy Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerHBurnt":{"prefab":{"prefabName":"StructureCableCornerHBurnt","prefabHash":1931412811,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableFuse100k":{"prefab":{"prefabName":"StructureCableFuse100k","prefabHash":281380789,"desc":"","name":"Fuse (100kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse1k":{"prefab":{"prefabName":"StructureCableFuse1k","prefabHash":-1103727120,"desc":"","name":"Fuse (1kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse50k":{"prefab":{"prefabName":"StructureCableFuse50k","prefabHash":-349716617,"desc":"","name":"Fuse (50kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse5k":{"prefab":{"prefabName":"StructureCableFuse5k","prefabHash":-631590668,"desc":"","name":"Fuse (5kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableJunction":{"prefab":{"prefabName":"StructureCableJunction","prefabHash":-175342021,"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).","name":"Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4":{"prefab":{"prefabName":"StructureCableJunction4","prefabHash":1112047202,"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).","name":"Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4Burnt":{"prefab":{"prefabName":"StructureCableJunction4Burnt","prefabHash":-1756896811,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4HBurnt":{"prefab":{"prefabName":"StructureCableJunction4HBurnt","prefabHash":-115809132,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction5":{"prefab":{"prefabName":"StructureCableJunction5","prefabHash":894390004,"desc":"","name":"Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction5Burnt":{"prefab":{"prefabName":"StructureCableJunction5Burnt","prefabHash":1545286256,"desc":"","name":"Burnt Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6":{"prefab":{"prefabName":"StructureCableJunction6","prefabHash":-1404690610,"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).","name":"Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6Burnt":{"prefab":{"prefabName":"StructureCableJunction6Burnt","prefabHash":-628145954,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6HBurnt":{"prefab":{"prefabName":"StructureCableJunction6HBurnt","prefabHash":1854404029,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionBurnt":{"prefab":{"prefabName":"StructureCableJunctionBurnt","prefabHash":-1620686196,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH":{"prefab":{"prefabName":"StructureCableJunctionH","prefabHash":469451637,"desc":"","name":"Heavy Cable (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH4":{"prefab":{"prefabName":"StructureCableJunctionH4","prefabHash":-742234680,"desc":"","name":"Heavy Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH5":{"prefab":{"prefabName":"StructureCableJunctionH5","prefabHash":-1530571426,"desc":"","name":"Heavy Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH5Burnt":{"prefab":{"prefabName":"StructureCableJunctionH5Burnt","prefabHash":1701593300,"desc":"","name":"Burnt Heavy Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH6":{"prefab":{"prefabName":"StructureCableJunctionH6","prefabHash":1036780772,"desc":"","name":"Heavy Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionHBurnt":{"prefab":{"prefabName":"StructureCableJunctionHBurnt","prefabHash":-341365649,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableStraight":{"prefab":{"prefabName":"StructureCableStraight","prefabHash":605357050,"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).","name":"Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightBurnt":{"prefab":{"prefabName":"StructureCableStraightBurnt","prefabHash":-1196981113,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightH":{"prefab":{"prefabName":"StructureCableStraightH","prefabHash":-146200530,"desc":"","name":"Heavy Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightHBurnt":{"prefab":{"prefabName":"StructureCableStraightHBurnt","prefabHash":2085762089,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCamera":{"prefab":{"prefabName":"StructureCamera","prefabHash":-342072665,"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.","name":"Camera"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureCapsuleTankGas":{"prefab":{"prefabName":"StructureCapsuleTankGas","prefabHash":-1385712131,"desc":"","name":"Gas Capsule Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCapsuleTankLiquid":{"prefab":{"prefabName":"StructureCapsuleTankLiquid","prefabHash":1415396263,"desc":"","name":"Liquid Capsule Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCargoStorageMedium":{"prefab":{"prefabName":"StructureCargoStorageMedium","prefabHash":1151864003,"desc":"","name":"Cargo Storage (Medium)"},"structure":{"smallGrid":true},"logic":{"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":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCargoStorageSmall":{"prefab":{"prefabName":"StructureCargoStorageSmall","prefabHash":-1493672123,"desc":"","name":"Cargo Storage (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"},"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"},"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"},"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"},"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCentrifuge":{"prefab":{"prefabName":"StructureCentrifuge","prefabHash":690945935,"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.","name":"Centrifuge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureChair":{"prefab":{"prefabName":"StructureChair","prefabHash":1167659360,"desc":"One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs.","name":"Chair"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBacklessDouble":{"prefab":{"prefabName":"StructureChairBacklessDouble","prefabHash":1944858936,"desc":"","name":"Chair (Backless Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBacklessSingle":{"prefab":{"prefabName":"StructureChairBacklessSingle","prefabHash":1672275150,"desc":"","name":"Chair (Backless Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBoothCornerLeft":{"prefab":{"prefabName":"StructureChairBoothCornerLeft","prefabHash":-367720198,"desc":"","name":"Chair (Booth Corner Left)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBoothMiddle":{"prefab":{"prefabName":"StructureChairBoothMiddle","prefabHash":1640720378,"desc":"","name":"Chair (Booth Middle)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairRectangleDouble":{"prefab":{"prefabName":"StructureChairRectangleDouble","prefabHash":-1152812099,"desc":"","name":"Chair (Rectangle Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairRectangleSingle":{"prefab":{"prefabName":"StructureChairRectangleSingle","prefabHash":-1425428917,"desc":"","name":"Chair (Rectangle Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairThickDouble":{"prefab":{"prefabName":"StructureChairThickDouble","prefabHash":-1245724402,"desc":"","name":"Chair (Thick Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairThickSingle":{"prefab":{"prefabName":"StructureChairThickSingle","prefabHash":-1510009608,"desc":"","name":"Chair (Thick Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteBin":{"prefab":{"prefabName":"StructureChuteBin","prefabHash":-850484480,"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.","name":"Chute Bin"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Input","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteCorner":{"prefab":{"prefabName":"StructureChuteCorner","prefabHash":1360330136,"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.","name":"Chute (Corner)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteDigitalFlipFlopSplitterLeft":{"prefab":{"prefabName":"StructureChuteDigitalFlipFlopSplitterLeft","prefabHash":-810874728,"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.","name":"Chute Digital Flip Flop Splitter Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingOutput":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Output2"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureChuteDigitalFlipFlopSplitterRight":{"prefab":{"prefabName":"StructureChuteDigitalFlipFlopSplitterRight","prefabHash":163728359,"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.","name":"Chute Digital Flip Flop Splitter Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingOutput":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Output2"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureChuteDigitalValveLeft":{"prefab":{"prefabName":"StructureChuteDigitalValveLeft","prefabHash":648608238,"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.","name":"Chute Digital Valve Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteDigitalValveRight":{"prefab":{"prefabName":"StructureChuteDigitalValveRight","prefabHash":-1337091041,"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.","name":"Chute Digital Valve Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteFlipFlopSplitter":{"prefab":{"prefabName":"StructureChuteFlipFlopSplitter","prefabHash":-1446854725,"desc":"A chute that toggles between two outputs","name":"Chute Flip Flop Splitter"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteInlet":{"prefab":{"prefabName":"StructureChuteInlet","prefabHash":-1469588766,"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.","name":"Chute Inlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteJunction":{"prefab":{"prefabName":"StructureChuteJunction","prefabHash":-611232514,"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.","name":"Chute (Junction)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteOutlet":{"prefab":{"prefabName":"StructureChuteOutlet","prefabHash":-1022714809,"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.","name":"Chute Outlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteOverflow":{"prefab":{"prefabName":"StructureChuteOverflow","prefabHash":225377225,"desc":"The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied.","name":"Chute Overflow"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteStraight":{"prefab":{"prefabName":"StructureChuteStraight","prefabHash":168307007,"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.","name":"Chute (Straight)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteUmbilicalFemale":{"prefab":{"prefabName":"StructureChuteUmbilicalFemale","prefabHash":-1918892177,"desc":"","name":"Umbilical Socket (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureChuteUmbilicalFemaleSide","prefabHash":-659093969,"desc":"","name":"Umbilical Socket Angle (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteUmbilicalMale":{"prefab":{"prefabName":"StructureChuteUmbilicalMale","prefabHash":-958884053,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteValve":{"prefab":{"prefabName":"StructureChuteValve","prefabHash":434875271,"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.","name":"Chute Valve"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteWindow":{"prefab":{"prefabName":"StructureChuteWindow","prefabHash":-607241919,"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.","name":"Chute (Window)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureCircuitHousing":{"prefab":{"prefabName":"StructureCircuitHousing","prefabHash":-128473777,"desc":"","name":"IC Housing"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","LineNumber":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","LineNumber":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"devicePinsLength":6,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"StructureCombustionCentrifuge":{"prefab":{"prefabName":"StructureCombustionCentrifuge","prefabHash":1238905683,"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 ","name":"Combustion Centrifuge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureCompositeCladdingAngled":{"prefab":{"prefabName":"StructureCompositeCladdingAngled","prefabHash":-1513030150,"desc":"","name":"Composite Cladding (Angled)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCorner":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCorner","prefabHash":-69685069,"desc":"","name":"Composite Cladding (Angled Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInner":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInner","prefabHash":-1841871763,"desc":"","name":"Composite Cladding (Angled Corner Inner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLong","prefabHash":-1417912632,"desc":"","name":"Composite Cladding (Angled Corner Inner Long)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLongL":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLongL","prefabHash":947705066,"desc":"","name":"Composite Cladding (Angled Corner Inner Long L)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLongR":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLongR","prefabHash":-1032590967,"desc":"","name":"Composite Cladding (Angled Corner Inner Long R)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerLong","prefabHash":850558385,"desc":"","name":"Composite Cladding (Long Angled Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerLongR":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerLongR","prefabHash":-348918222,"desc":"","name":"Composite Cladding (Long Angled Mirrored Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledLong","prefabHash":-387546514,"desc":"","name":"Composite Cladding (Long Angled)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingCylindrical":{"prefab":{"prefabName":"StructureCompositeCladdingCylindrical","prefabHash":212919006,"desc":"","name":"Composite Cladding (Cylindrical)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingCylindricalPanel":{"prefab":{"prefabName":"StructureCompositeCladdingCylindricalPanel","prefabHash":1077151132,"desc":"","name":"Composite Cladding (Cylindrical Panel)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingPanel":{"prefab":{"prefabName":"StructureCompositeCladdingPanel","prefabHash":1997436771,"desc":"","name":"Composite Cladding (Panel)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRounded":{"prefab":{"prefabName":"StructureCompositeCladdingRounded","prefabHash":-259357734,"desc":"","name":"Composite Cladding (Rounded)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRoundedCorner":{"prefab":{"prefabName":"StructureCompositeCladdingRoundedCorner","prefabHash":1951525046,"desc":"","name":"Composite Cladding (Rounded Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRoundedCornerInner":{"prefab":{"prefabName":"StructureCompositeCladdingRoundedCornerInner","prefabHash":110184667,"desc":"","name":"Composite Cladding (Rounded Corner Inner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSpherical":{"prefab":{"prefabName":"StructureCompositeCladdingSpherical","prefabHash":139107321,"desc":"","name":"Composite Cladding (Spherical)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSphericalCap":{"prefab":{"prefabName":"StructureCompositeCladdingSphericalCap","prefabHash":534213209,"desc":"","name":"Composite Cladding (Spherical Cap)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSphericalCorner":{"prefab":{"prefabName":"StructureCompositeCladdingSphericalCorner","prefabHash":1751355139,"desc":"","name":"Composite Cladding (Spherical Corner)"},"structure":{"smallGrid":false}},"StructureCompositeDoor":{"prefab":{"prefabName":"StructureCompositeDoor","prefabHash":-793837322,"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.","name":"Composite Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCompositeFloorGrating":{"prefab":{"prefabName":"StructureCompositeFloorGrating","prefabHash":324868581,"desc":"While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings.","name":"Composite Floor Grating"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating2":{"prefab":{"prefabName":"StructureCompositeFloorGrating2","prefabHash":-895027741,"desc":"","name":"Composite Floor Grating (Type 2)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating3":{"prefab":{"prefabName":"StructureCompositeFloorGrating3","prefabHash":-1113471627,"desc":"","name":"Composite Floor Grating (Type 3)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating4":{"prefab":{"prefabName":"StructureCompositeFloorGrating4","prefabHash":600133846,"desc":"","name":"Composite Floor Grating (Type 4)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGratingOpen":{"prefab":{"prefabName":"StructureCompositeFloorGratingOpen","prefabHash":2109695912,"desc":"","name":"Composite Floor Grating Open"},"structure":{"smallGrid":false}},"StructureCompositeFloorGratingOpenRotated":{"prefab":{"prefabName":"StructureCompositeFloorGratingOpenRotated","prefabHash":882307910,"desc":"","name":"Composite Floor Grating Open Rotated"},"structure":{"smallGrid":false}},"StructureCompositeWall":{"prefab":{"prefabName":"StructureCompositeWall","prefabHash":1237302061,"desc":"Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties.","name":"Composite Wall (Type 1)"},"structure":{"smallGrid":false}},"StructureCompositeWall02":{"prefab":{"prefabName":"StructureCompositeWall02","prefabHash":718343384,"desc":"","name":"Composite Wall (Type 2)"},"structure":{"smallGrid":false}},"StructureCompositeWall03":{"prefab":{"prefabName":"StructureCompositeWall03","prefabHash":1574321230,"desc":"","name":"Composite Wall (Type 3)"},"structure":{"smallGrid":false}},"StructureCompositeWall04":{"prefab":{"prefabName":"StructureCompositeWall04","prefabHash":-1011701267,"desc":"","name":"Composite Wall (Type 4)"},"structure":{"smallGrid":false}},"StructureCompositeWindow":{"prefab":{"prefabName":"StructureCompositeWindow","prefabHash":-2060571986,"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.","name":"Composite Window"},"structure":{"smallGrid":false}},"StructureCompositeWindowIron":{"prefab":{"prefabName":"StructureCompositeWindowIron","prefabHash":-688284639,"desc":"","name":"Iron Window"},"structure":{"smallGrid":false}},"StructureComputer":{"prefab":{"prefabName":"StructureComputer","prefabHash":-626563514,"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","name":"Computer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Data Disk","typ":"DataDisk"},{"name":"Data Disk","typ":"DataDisk"},{"name":"Motherboard","typ":"Motherboard"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCondensationChamber":{"prefab":{"prefabName":"StructureCondensationChamber","prefabHash":1420719315,"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.","name":"Condensation Chamber"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCondensationValve":{"prefab":{"prefabName":"StructureCondensationValve","prefabHash":-965741795,"desc":"Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction.","name":"Condensation Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Output"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsole":{"prefab":{"prefabName":"StructureConsole","prefabHash":235638270,"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.","name":"Console"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureConsoleDual":{"prefab":{"prefabName":"StructureConsoleDual","prefabHash":-722284333,"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.","name":"Console Dual"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureConsoleLED1x2":{"prefab":{"prefabName":"StructureConsoleLED1x2","prefabHash":-53151617,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleLED1x3":{"prefab":{"prefabName":"StructureConsoleLED1x3","prefabHash":-1949054743,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleLED5":{"prefab":{"prefabName":"StructureConsoleLED5","prefabHash":-815193061,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleMonitor":{"prefab":{"prefabName":"StructureConsoleMonitor","prefabHash":801677497,"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.","name":"Console Monitor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureControlChair":{"prefab":{"prefabName":"StructureControlChair","prefabHash":-1961153710,"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.","name":"Control Chair"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Entity","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureCornerLocker":{"prefab":{"prefabName":"StructureCornerLocker","prefabHash":-1968255729,"desc":"","name":"Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureCrateMount":{"prefab":{"prefabName":"StructureCrateMount","prefabHash":-733500083,"desc":"","name":"Container Mount"},"structure":{"smallGrid":true},"slots":[{"name":"Container Slot","typ":"None"}]},"StructureCryoTube":{"prefab":{"prefabName":"StructureCryoTube","prefabHash":1938254586,"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.","name":"CryoTube"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCryoTubeHorizontal":{"prefab":{"prefabName":"StructureCryoTubeHorizontal","prefabHash":1443059329,"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.","name":"Cryo Tube Horizontal"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCryoTubeVertical":{"prefab":{"prefabName":"StructureCryoTubeVertical","prefabHash":-1381321828,"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.","name":"Cryo Tube Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureDaylightSensor":{"prefab":{"prefabName":"StructureDaylightSensor","prefabHash":1076425094,"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.","name":"Daylight Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDeepMiner":{"prefab":{"prefabName":"StructureDeepMiner","prefabHash":265720906,"desc":"Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s","name":"Deep Miner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDigitalValve":{"prefab":{"prefabName":"StructureDigitalValve","prefabHash":-1280984102,"desc":"The digital valve allows Stationeers to create logic-controlled valves and pipe networks.","name":"Digital Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDiode":{"prefab":{"prefabName":"StructureDiode","prefabHash":1944485013,"desc":"","name":"LED"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDiodeSlide":{"prefab":{"prefabName":"StructureDiodeSlide","prefabHash":576516101,"desc":"","name":"Diode Slide"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDockPortSide":{"prefab":{"prefabName":"StructureDockPortSide","prefabHash":-137465079,"desc":"","name":"Dock (Port Side)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureDrinkingFountain":{"prefab":{"prefabName":"StructureDrinkingFountain","prefabHash":1968371847,"desc":"","name":""},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureElectrolyzer":{"prefab":{"prefabName":"StructureElectrolyzer","prefabHash":-1668992663,"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.","name":"Electrolyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElectronicsPrinter":{"prefab":{"prefabName":"StructureElectronicsPrinter","prefabHash":1307165496,"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.","name":"Electronics Printer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureElevatorLevelFront":{"prefab":{"prefabName":"StructureElevatorLevelFront","prefabHash":-827912235,"desc":"","name":"Elevator Level (Cabled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElevatorLevelIndustrial":{"prefab":{"prefabName":"StructureElevatorLevelIndustrial","prefabHash":2060648791,"desc":"","name":"Elevator Level"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElevatorShaft":{"prefab":{"prefabName":"StructureElevatorShaft","prefabHash":826144419,"desc":"","name":"Elevator Shaft (Cabled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureElevatorShaftIndustrial":{"prefab":{"prefabName":"StructureElevatorShaftIndustrial","prefabHash":1998354978,"desc":"","name":"Elevator Shaft"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureEmergencyButton":{"prefab":{"prefabName":"StructureEmergencyButton","prefabHash":1668452680,"desc":"Description coming.","name":"Important Button"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureEngineMountTypeA1":{"prefab":{"prefabName":"StructureEngineMountTypeA1","prefabHash":2035781224,"desc":"","name":"Engine Mount (Type A1)"},"structure":{"smallGrid":false}},"StructureEvaporationChamber":{"prefab":{"prefabName":"StructureEvaporationChamber","prefabHash":-1429782576,"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.","name":"Evaporation Chamber"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureExpansionValve":{"prefab":{"prefabName":"StructureExpansionValve","prefabHash":195298587,"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.","name":"Expansion Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureFairingTypeA1":{"prefab":{"prefabName":"StructureFairingTypeA1","prefabHash":1622567418,"desc":"","name":"Fairing (Type A1)"},"structure":{"smallGrid":false}},"StructureFairingTypeA2":{"prefab":{"prefabName":"StructureFairingTypeA2","prefabHash":-104908736,"desc":"","name":"Fairing (Type A2)"},"structure":{"smallGrid":false}},"StructureFairingTypeA3":{"prefab":{"prefabName":"StructureFairingTypeA3","prefabHash":-1900541738,"desc":"","name":"Fairing (Type A3)"},"structure":{"smallGrid":false}},"StructureFiltration":{"prefab":{"prefabName":"StructureFiltration","prefabHash":-348054045,"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","name":"Filtration"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Waste"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureFlagSmall":{"prefab":{"prefabName":"StructureFlagSmall","prefabHash":-1529819532,"desc":"","name":"Small Flag"},"structure":{"smallGrid":true}},"StructureFlashingLight":{"prefab":{"prefabName":"StructureFlashingLight","prefabHash":-1535893860,"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'.","name":"Flashing Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureFlatBench":{"prefab":{"prefabName":"StructureFlatBench","prefabHash":839890807,"desc":"","name":"Bench (Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureFloorDrain":{"prefab":{"prefabName":"StructureFloorDrain","prefabHash":1048813293,"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.","name":"Passive Liquid Inlet"},"structure":{"smallGrid":true}},"StructureFrame":{"prefab":{"prefabName":"StructureFrame","prefabHash":1432512808,"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.","name":"Steel Frame"},"structure":{"smallGrid":false}},"StructureFrameCorner":{"prefab":{"prefabName":"StructureFrameCorner","prefabHash":-2112390778,"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.","name":"Steel Frame (Corner)"},"structure":{"smallGrid":false}},"StructureFrameCornerCut":{"prefab":{"prefabName":"StructureFrameCornerCut","prefabHash":271315669,"desc":"0.Mode0\n1.Mode1","name":"Steel Frame (Corner Cut)"},"structure":{"smallGrid":false}},"StructureFrameIron":{"prefab":{"prefabName":"StructureFrameIron","prefabHash":-1240951678,"desc":"","name":"Iron Frame"},"structure":{"smallGrid":false}},"StructureFrameSide":{"prefab":{"prefabName":"StructureFrameSide","prefabHash":-302420053,"desc":"More durable than the Iron Frame, steel frames also provide variations for more ornate constructions.","name":"Steel Frame (Side)"},"structure":{"smallGrid":false}},"StructureFridgeBig":{"prefab":{"prefabName":"StructureFridgeBig","prefabHash":958476921,"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.","name":"Fridge (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureFridgeSmall":{"prefab":{"prefabName":"StructureFridgeSmall","prefabHash":751887598,"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.","name":"Fridge Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureFurnace":{"prefab":{"prefabName":"StructureFurnace","prefabHash":1947944864,"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.","name":"Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"},{"typ":"Data","role":"None"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":false,"hasOpenState":true,"hasReagents":true}},"StructureFuselageTypeA1":{"prefab":{"prefabName":"StructureFuselageTypeA1","prefabHash":1033024712,"desc":"","name":"Fuselage (Type A1)"},"structure":{"smallGrid":false}},"StructureFuselageTypeA2":{"prefab":{"prefabName":"StructureFuselageTypeA2","prefabHash":-1533287054,"desc":"","name":"Fuselage (Type A2)"},"structure":{"smallGrid":false}},"StructureFuselageTypeA4":{"prefab":{"prefabName":"StructureFuselageTypeA4","prefabHash":1308115015,"desc":"","name":"Fuselage (Type A4)"},"structure":{"smallGrid":false}},"StructureFuselageTypeC5":{"prefab":{"prefabName":"StructureFuselageTypeC5","prefabHash":147395155,"desc":"","name":"Fuselage (Type C5)"},"structure":{"smallGrid":false}},"StructureGasGenerator":{"prefab":{"prefabName":"StructureGasGenerator","prefabHash":1165997963,"desc":"","name":"Gas Fuel Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGasMixer":{"prefab":{"prefabName":"StructureGasMixer","prefabHash":2104106366,"desc":"Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%.","name":"Gas Mixer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGasSensor":{"prefab":{"prefabName":"StructureGasSensor","prefabHash":-1252983604,"desc":"Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents.","name":"Gas Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasTankStorage":{"prefab":{"prefabName":"StructureGasTankStorage","prefabHash":1632165346,"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.","name":"Gas Tank Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"PrefabHash":"Read","Pressure":"Read","Quantity":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioNitrousOxide":"Read","RatioOxygen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","ReferenceId":"Read","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalFemale":{"prefab":{"prefabName":"StructureGasUmbilicalFemale","prefabHash":-1680477930,"desc":"","name":"Umbilical Socket (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureGasUmbilicalFemaleSide","prefabHash":-648683847,"desc":"","name":"Umbilical Socket Angle (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalMale":{"prefab":{"prefabName":"StructureGasUmbilicalMale","prefabHash":-1814939203,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGlassDoor":{"prefab":{"prefabName":"StructureGlassDoor","prefabHash":-324331872,"desc":"0.Operate\n1.Logic","name":"Glass Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGovernedGasEngine":{"prefab":{"prefabName":"StructureGovernedGasEngine","prefabHash":-214232602,"desc":"The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas.","name":"Pumped Gas Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGroundBasedTelescope":{"prefab":{"prefabName":"StructureGroundBasedTelescope","prefabHash":-619745681,"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.","name":"Telescope"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGrowLight":{"prefab":{"prefabName":"StructureGrowLight","prefabHash":-1758710260,"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. ","name":"Grow Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHarvie":{"prefab":{"prefabName":"StructureHarvie","prefabHash":958056199,"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.","name":"Harvie"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Plant"},{"name":"Export","typ":"None"},{"name":"Hand","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangeLiquidtoGas":{"prefab":{"prefabName":"StructureHeatExchangeLiquidtoGas","prefabHash":944685608,"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.","name":"Heat Exchanger - Liquid + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangerGastoGas":{"prefab":{"prefabName":"StructureHeatExchangerGastoGas","prefabHash":21266291,"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.","name":"Heat Exchanger - Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangerLiquidtoLiquid":{"prefab":{"prefabName":"StructureHeatExchangerLiquidtoLiquid","prefabHash":-613784254,"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","name":"Heat Exchanger - Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHorizontalAutoMiner":{"prefab":{"prefabName":"StructureHorizontalAutoMiner","prefabHash":1070427573,"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","name":"OGRE"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureHydraulicPipeBender":{"prefab":{"prefabName":"StructureHydraulicPipeBender","prefabHash":-1888248335,"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.","name":"Hydraulic Pipe Bender"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureHydroponicsStation":{"prefab":{"prefabName":"StructureHydroponicsStation","prefabHash":1441767298,"desc":"","name":"Hydroponics Station"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHydroponicsTray":{"prefab":{"prefabName":"StructureHydroponicsTray","prefabHash":1464854517,"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.","name":"Hydroponics Tray"},"structure":{"smallGrid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}]},"StructureHydroponicsTrayData":{"prefab":{"prefabName":"StructureHydroponicsTrayData","prefabHash":-1841632400,"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.","name":"Hydroponics Device"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureIceCrusher":{"prefab":{"prefabName":"StructureIceCrusher","prefabHash":443849486,"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.","name":"Ice Crusher"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureIgniter":{"prefab":{"prefabName":"StructureIgniter","prefabHash":1005491513,"desc":"It gets the party started. Especially if that party is an explosive gas mixture.","name":"Igniter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureInLineTankGas1x1":{"prefab":{"prefabName":"StructureInLineTankGas1x1","prefabHash":-1693382705,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Gas"},"structure":{"smallGrid":true}},"StructureInLineTankGas1x2":{"prefab":{"prefabName":"StructureInLineTankGas1x2","prefabHash":35149429,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Gas"},"structure":{"smallGrid":true}},"StructureInLineTankLiquid1x1":{"prefab":{"prefabName":"StructureInLineTankLiquid1x1","prefabHash":543645499,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Liquid"},"structure":{"smallGrid":true}},"StructureInLineTankLiquid1x2":{"prefab":{"prefabName":"StructureInLineTankLiquid1x2","prefabHash":-1183969663,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankGas1x1":{"prefab":{"prefabName":"StructureInsulatedInLineTankGas1x1","prefabHash":1818267386,"desc":"","name":"Insulated In-Line Tank Small Gas"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankGas1x2":{"prefab":{"prefabName":"StructureInsulatedInLineTankGas1x2","prefabHash":-177610944,"desc":"","name":"Insulated In-Line Tank Gas"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankLiquid1x1":{"prefab":{"prefabName":"StructureInsulatedInLineTankLiquid1x1","prefabHash":-813426145,"desc":"","name":"Insulated In-Line Tank Small Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankLiquid1x2":{"prefab":{"prefabName":"StructureInsulatedInLineTankLiquid1x2","prefabHash":1452100517,"desc":"","name":"Insulated In-Line Tank Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCorner":{"prefab":{"prefabName":"StructureInsulatedPipeCorner","prefabHash":-1967711059,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Corner)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction","prefabHash":-92778058,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction3":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction3","prefabHash":1328210035,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction4":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction4","prefabHash":-783387184,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction5":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction5","prefabHash":-1505147578,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction6":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction6","prefabHash":1061164284,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCorner":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCorner","prefabHash":1713710802,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Corner)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction","prefabHash":1926651727,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction4":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction4","prefabHash":363303270,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction5":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction5","prefabHash":1654694384,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction6":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction6","prefabHash":-72748982,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidStraight":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidStraight","prefabHash":295678685,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Straight)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidTJunction":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidTJunction","prefabHash":-532384855,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeStraight":{"prefab":{"prefabName":"StructureInsulatedPipeStraight","prefabHash":2134172356,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Straight)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeTJunction":{"prefab":{"prefabName":"StructureInsulatedPipeTJunction","prefabHash":-2076086215,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedTankConnector":{"prefab":{"prefabName":"StructureInsulatedTankConnector","prefabHash":-31273349,"desc":"","name":"Insulated Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructureInsulatedTankConnectorLiquid":{"prefab":{"prefabName":"StructureInsulatedTankConnectorLiquid","prefabHash":-1602030414,"desc":"","name":"Insulated Tank Connector Liquid"},"structure":{"smallGrid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureInteriorDoorGlass":{"prefab":{"prefabName":"StructureInteriorDoorGlass","prefabHash":-2096421875,"desc":"0.Operate\n1.Logic","name":"Interior Door Glass"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorPadded":{"prefab":{"prefabName":"StructureInteriorDoorPadded","prefabHash":847461335,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorPaddedThin":{"prefab":{"prefabName":"StructureInteriorDoorPaddedThin","prefabHash":1981698201,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded Thin"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorTriangle":{"prefab":{"prefabName":"StructureInteriorDoorTriangle","prefabHash":-1182923101,"desc":"0.Operate\n1.Logic","name":"Interior Door Triangle"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureKlaxon":{"prefab":{"prefabName":"StructureKlaxon","prefabHash":-828056979,"desc":"Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output.","name":"Klaxon Speaker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLadder":{"prefab":{"prefabName":"StructureLadder","prefabHash":-415420281,"desc":"","name":"Ladder"},"structure":{"smallGrid":true}},"StructureLadderEnd":{"prefab":{"prefabName":"StructureLadderEnd","prefabHash":1541734993,"desc":"","name":"Ladder End"},"structure":{"smallGrid":true}},"StructureLargeDirectHeatExchangeGastoGas":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeGastoGas","prefabHash":-1230658883,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeDirectHeatExchangeGastoLiquid":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeGastoLiquid","prefabHash":1412338038,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeLiquidtoLiquid","prefabHash":792686502,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchange - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeExtendableRadiator":{"prefab":{"prefabName":"StructureLargeExtendableRadiator","prefabHash":-566775170,"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.","name":"Large Extendable Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Horizontal":"ReadWrite","Lock":"ReadWrite","Maximum":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLargeHangerDoor":{"prefab":{"prefabName":"StructureLargeHangerDoor","prefabHash":-1351081801,"desc":"1 x 3 modular door piece for building hangar doors.","name":"Large Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureLargeSatelliteDish":{"prefab":{"prefabName":"StructureLargeSatelliteDish","prefabHash":1913391845,"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.","name":"Large Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLaunchMount":{"prefab":{"prefabName":"StructureLaunchMount","prefabHash":-558953231,"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.","name":"Launch Mount"},"structure":{"smallGrid":false}},"StructureLightLong":{"prefab":{"prefabName":"StructureLightLong","prefabHash":797794350,"desc":"","name":"Wall Light (Long)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightLongAngled":{"prefab":{"prefabName":"StructureLightLongAngled","prefabHash":1847265835,"desc":"","name":"Wall Light (Long Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightLongWide":{"prefab":{"prefabName":"StructureLightLongWide","prefabHash":555215790,"desc":"","name":"Wall Light (Long Wide)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRound":{"prefab":{"prefabName":"StructureLightRound","prefabHash":1514476632,"desc":"Description coming.","name":"Light Round"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRoundAngled":{"prefab":{"prefabName":"StructureLightRoundAngled","prefabHash":1592905386,"desc":"Description coming.","name":"Light Round (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRoundSmall":{"prefab":{"prefabName":"StructureLightRoundSmall","prefabHash":1436121888,"desc":"Description coming.","name":"Light Round (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidDrain":{"prefab":{"prefabName":"StructureLiquidDrain","prefabHash":1687692899,"desc":"When connected to power and activated, it pumps liquid from a liquid network into the world.","name":"Active Liquid Outlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeAnalyzer":{"prefab":{"prefabName":"StructureLiquidPipeAnalyzer","prefabHash":-2113838091,"desc":"","name":"Liquid Pipe Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeHeater":{"prefab":{"prefabName":"StructureLiquidPipeHeater","prefabHash":-287495560,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeOneWayValve":{"prefab":{"prefabName":"StructureLiquidPipeOneWayValve","prefabHash":-782453061,"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..","name":"One Way Valve (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeRadiator":{"prefab":{"prefabName":"StructureLiquidPipeRadiator","prefabHash":2072805863,"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.","name":"Liquid Pipe Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPressureRegulator":{"prefab":{"prefabName":"StructureLiquidPressureRegulator","prefabHash":482248766,"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.","name":"Liquid Volume Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankBig":{"prefab":{"prefabName":"StructureLiquidTankBig","prefabHash":1098900430,"desc":"","name":"Liquid Tank Big"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankBigInsulated":{"prefab":{"prefabName":"StructureLiquidTankBigInsulated","prefabHash":-1430440215,"desc":"","name":"Insulated Liquid Tank Big"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankSmall":{"prefab":{"prefabName":"StructureLiquidTankSmall","prefabHash":1988118157,"desc":"","name":"Liquid Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankSmallInsulated":{"prefab":{"prefabName":"StructureLiquidTankSmallInsulated","prefabHash":608607718,"desc":"","name":"Insulated Liquid Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankStorage":{"prefab":{"prefabName":"StructureLiquidTankStorage","prefabHash":1691898022,"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.","name":"Liquid Tank Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"PrefabHash":"Read","Pressure":"Read","Quantity":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioNitrousOxide":"Read","RatioOxygen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","ReferenceId":"Read","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTurboVolumePump":{"prefab":{"prefabName":"StructureLiquidTurboVolumePump","prefabHash":-1051805505,"desc":"Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalFemale":{"prefab":{"prefabName":"StructureLiquidUmbilicalFemale","prefabHash":1734723642,"desc":"","name":"Umbilical Socket (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureLiquidUmbilicalFemaleSide","prefabHash":1220870319,"desc":"","name":"Umbilical Socket Angle (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalMale":{"prefab":{"prefabName":"StructureLiquidUmbilicalMale","prefabHash":-1798420047,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureLiquidValve":{"prefab":{"prefabName":"StructureLiquidValve","prefabHash":1849974453,"desc":"","name":"Liquid Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidVolumePump":{"prefab":{"prefabName":"StructureLiquidVolumePump","prefabHash":-454028979,"desc":"","name":"Liquid Volume Pump"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLockerSmall":{"prefab":{"prefabName":"StructureLockerSmall","prefabHash":-647164662,"desc":"","name":"Locker (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicBatchReader":{"prefab":{"prefabName":"StructureLogicBatchReader","prefabHash":264413729,"desc":"","name":"Batch Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicBatchSlotReader":{"prefab":{"prefabName":"StructureLogicBatchSlotReader","prefabHash":436888930,"desc":"","name":"Batch Slot Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicBatchWriter":{"prefab":{"prefabName":"StructureLogicBatchWriter","prefabHash":1415443359,"desc":"","name":"Batch Writer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","ForceWrite":"Write","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicButton":{"prefab":{"prefabName":"StructureLogicButton","prefabHash":491845673,"desc":"","name":"Button"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicCompare":{"prefab":{"prefabName":"StructureLogicCompare","prefabHash":-1489728908,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Compare"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicDial":{"prefab":{"prefabName":"StructureLogicDial","prefabHash":554524804,"desc":"An assignable dial with up to 1000 modes.","name":"Dial"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicGate":{"prefab":{"prefabName":"StructureLogicGate","prefabHash":1942143074,"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.","name":"Logic Gate"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicHashGen":{"prefab":{"prefabName":"StructureLogicHashGen","prefabHash":2077593121,"desc":"","name":"Logic Hash Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicMath":{"prefab":{"prefabName":"StructureLogicMath","prefabHash":1657691323,"desc":"0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log","name":"Logic Math"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMathUnary":{"prefab":{"prefabName":"StructureLogicMathUnary","prefabHash":-1160020195,"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","name":"Math Unary"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMemory":{"prefab":{"prefabName":"StructureLogicMemory","prefabHash":-851746783,"desc":"","name":"Logic Memory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicMinMax":{"prefab":{"prefabName":"StructureLogicMinMax","prefabHash":929022276,"desc":"0.Greater\n1.Less","name":"Logic Min/Max"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"modes":{"0":"Greater","1":"Less"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMirror":{"prefab":{"prefabName":"StructureLogicMirror","prefabHash":2096189278,"desc":"","name":"Logic Mirror"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicReader":{"prefab":{"prefabName":"StructureLogicReader","prefabHash":-345383640,"desc":"","name":"Logic Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicReagentReader":{"prefab":{"prefabName":"StructureLogicReagentReader","prefabHash":-124308857,"desc":"","name":"Reagent Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicRocketDownlink":{"prefab":{"prefabName":"StructureLogicRocketDownlink","prefabHash":876108549,"desc":"","name":"Logic Rocket Downlink"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicRocketUplink":{"prefab":{"prefabName":"StructureLogicRocketUplink","prefabHash":546002924,"desc":"","name":"Logic Uplink"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSelect":{"prefab":{"prefabName":"StructureLogicSelect","prefabHash":1822736084,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Select"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSlotReader":{"prefab":{"prefabName":"StructureLogicSlotReader","prefabHash":-767867194,"desc":"","name":"Slot Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSorter":{"prefab":{"prefabName":"StructureLogicSorter","prefabHash":873418029,"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.","name":"Logic Sorter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"All","1":"Any","2":"None"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Chute","role":"Output2"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"instructions":{"FilterPrefabHashEquals":{"description":"| 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":{"description":"| 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":{"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 |","typ":"SorterInstruction","value":5},"FilterSlotTypeCompare":{"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 |","typ":"SorterInstruction","value":4},"FilterSortingClassCompare":{"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 |","typ":"SorterInstruction","value":3},"LimitNextExecutionByCount":{"description":"| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |","typ":"SorterInstruction","value":6}},"memoryAccess":"ReadWrite","memorySize":32}},"StructureLogicSwitch":{"prefab":{"prefabName":"StructureLogicSwitch","prefabHash":1220484876,"desc":"","name":"Lever"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicSwitch2":{"prefab":{"prefabName":"StructureLogicSwitch2","prefabHash":321604921,"desc":"","name":"Switch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicTransmitter":{"prefab":{"prefabName":"StructureLogicTransmitter","prefabHash":-693235651,"desc":"Connects to Logic Transmitter","name":"Logic Transmitter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"modes":{"0":"Passive","1":"Active"},"transmissionReceiver":true,"wirelessLogic":true,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicWriter":{"prefab":{"prefabName":"StructureLogicWriter","prefabHash":-1326019434,"desc":"","name":"Logic Writer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","ForceWrite":"Write","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicWriterSwitch":{"prefab":{"prefabName":"StructureLogicWriterSwitch","prefabHash":-1321250424,"desc":"","name":"Logic Writer Switch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","ForceWrite":"Write","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureManualHatch":{"prefab":{"prefabName":"StructureManualHatch","prefabHash":-1808154199,"desc":"Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock.","name":"Manual Hatch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureMediumConvectionRadiator":{"prefab":{"prefabName":"StructureMediumConvectionRadiator","prefabHash":-1918215845,"desc":"A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumConvectionRadiatorLiquid":{"prefab":{"prefabName":"StructureMediumConvectionRadiatorLiquid","prefabHash":-1169014183,"desc":"A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumHangerDoor":{"prefab":{"prefabName":"StructureMediumHangerDoor","prefabHash":-566348148,"desc":"1 x 2 modular door piece for building hangar doors.","name":"Medium Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureMediumRadiator":{"prefab":{"prefabName":"StructureMediumRadiator","prefabHash":-975966237,"desc":"A stand-alone radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRadiatorLiquid":{"prefab":{"prefabName":"StructureMediumRadiatorLiquid","prefabHash":-1141760613,"desc":"A stand-alone liquid radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRocketGasFuelTank":{"prefab":{"prefabName":"StructureMediumRocketGasFuelTank","prefabHash":-1093860567,"desc":"","name":"Gas Capsule Tank Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Output"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRocketLiquidFuelTank":{"prefab":{"prefabName":"StructureMediumRocketLiquidFuelTank","prefabHash":1143639539,"desc":"","name":"Liquid Capsule Tank Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Output"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMotionSensor":{"prefab":{"prefabName":"StructureMotionSensor","prefabHash":-1713470563,"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.","name":"Motion Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureNitrolyzer":{"prefab":{"prefabName":"StructureNitrolyzer","prefabHash":1898243702,"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.","name":"Nitrolyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureOccupancySensor":{"prefab":{"prefabName":"StructureOccupancySensor","prefabHash":322782515,"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.","name":"Occupancy Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureOverheadShortCornerLocker":{"prefab":{"prefabName":"StructureOverheadShortCornerLocker","prefabHash":-1794932560,"desc":"","name":"Overhead Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureOverheadShortLocker":{"prefab":{"prefabName":"StructureOverheadShortLocker","prefabHash":1468249454,"desc":"","name":"Overhead Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePassiveLargeRadiatorGas":{"prefab":{"prefabName":"StructurePassiveLargeRadiatorGas","prefabHash":2066977095,"desc":"Has been replaced by Medium Convection Radiator.","name":"Medium Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveLargeRadiatorLiquid":{"prefab":{"prefabName":"StructurePassiveLargeRadiatorLiquid","prefabHash":24786172,"desc":"Has been replaced by Medium Convection Radiator Liquid.","name":"Medium Convection Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveLiquidDrain":{"prefab":{"prefabName":"StructurePassiveLiquidDrain","prefabHash":1812364811,"desc":"Moves liquids from a pipe network to the world atmosphere.","name":"Passive Liquid Drain"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveVent":{"prefab":{"prefabName":"StructurePassiveVent","prefabHash":335498166,"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. ","name":"Passive Vent"},"structure":{"smallGrid":true}},"StructurePassiveVentInsulated":{"prefab":{"prefabName":"StructurePassiveVentInsulated","prefabHash":1363077139,"desc":"","name":"Insulated Passive Vent"},"structure":{"smallGrid":true}},"StructurePassthroughHeatExchangerGasToGas":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerGasToGas","prefabHash":-1674187440,"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.","name":"CounterFlow Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Output2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassthroughHeatExchangerGasToLiquid":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerGasToLiquid","prefabHash":1928991265,"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.","name":"CounterFlow Heat Exchanger - Gas + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassthroughHeatExchangerLiquidToLiquid":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerLiquidToLiquid","prefabHash":-1472829583,"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.","name":"CounterFlow Heat Exchanger - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePictureFrameThickLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThickLandscapeLarge","prefabHash":-1434523206,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThickLandscapeSmall","prefabHash":-2041566697,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThickMountLandscapeLarge","prefabHash":950004659,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThickMountLandscapeSmall","prefabHash":347154462,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThickMountPortraitLarge","prefabHash":-1459641358,"desc":"","name":"Picture Frame Thick Mount Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThickMountPortraitSmall","prefabHash":-2066653089,"desc":"","name":"Picture Frame Thick Mount Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThickPortraitLarge","prefabHash":-1686949570,"desc":"","name":"Picture Frame Thick Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThickPortraitSmall","prefabHash":-1218579821,"desc":"","name":"Picture Frame Thick Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThinLandscapeLarge","prefabHash":-1418288625,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThinLandscapeSmall","prefabHash":-2024250974,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThinMountLandscapeLarge","prefabHash":-1146760430,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThinMountLandscapeSmall","prefabHash":-1752493889,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThinMountPortraitLarge","prefabHash":1094895077,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThinMountPortraitSmall","prefabHash":1835796040,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThinPortraitLarge","prefabHash":1212777087,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThinPortraitSmall","prefabHash":1684488658,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"smallGrid":true}},"StructurePipeAnalysizer":{"prefab":{"prefabName":"StructurePipeAnalysizer","prefabHash":435685051,"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.","name":"Pipe Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePipeCorner":{"prefab":{"prefabName":"StructurePipeCorner","prefabHash":-1785673561,"desc":"You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Corner)"},"structure":{"smallGrid":true}},"StructurePipeCowl":{"prefab":{"prefabName":"StructurePipeCowl","prefabHash":465816159,"desc":"","name":"Pipe Cowl"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction":{"prefab":{"prefabName":"StructurePipeCrossJunction","prefabHash":-1405295588,"desc":"You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction3":{"prefab":{"prefabName":"StructurePipeCrossJunction3","prefabHash":2038427184,"desc":"You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction4":{"prefab":{"prefabName":"StructurePipeCrossJunction4","prefabHash":-417629293,"desc":"You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction5":{"prefab":{"prefabName":"StructurePipeCrossJunction5","prefabHash":-1877193979,"desc":"You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction6":{"prefab":{"prefabName":"StructurePipeCrossJunction6","prefabHash":152378047,"desc":"You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeHeater":{"prefab":{"prefabName":"StructurePipeHeater","prefabHash":-419758574,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePipeIgniter":{"prefab":{"prefabName":"StructurePipeIgniter","prefabHash":1286441942,"desc":"Ignites the atmosphere inside the attached pipe network.","name":"Pipe Igniter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeInsulatedLiquidCrossJunction":{"prefab":{"prefabName":"StructurePipeInsulatedLiquidCrossJunction","prefabHash":-2068497073,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeLabel":{"prefab":{"prefabName":"StructurePipeLabel","prefabHash":-999721119,"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.","name":"Pipe Label"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeLiquidCorner":{"prefab":{"prefabName":"StructurePipeLiquidCorner","prefabHash":-1856720921,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Corner)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction","prefabHash":1848735691,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction3":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction3","prefabHash":1628087508,"desc":"You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction4":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction4","prefabHash":-9555593,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction5":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction5","prefabHash":-2006384159,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction6":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction6","prefabHash":291524699,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidStraight":{"prefab":{"prefabName":"StructurePipeLiquidStraight","prefabHash":667597982,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Straight)"},"structure":{"smallGrid":true}},"StructurePipeLiquidTJunction":{"prefab":{"prefabName":"StructurePipeLiquidTJunction","prefabHash":262616717,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructurePipeMeter":{"prefab":{"prefabName":"StructurePipeMeter","prefabHash":-1798362329,"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\"","name":"Pipe Meter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeOneWayValve":{"prefab":{"prefabName":"StructurePipeOneWayValve","prefabHash":1580412404,"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","name":"One Way Valve (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeOrgan":{"prefab":{"prefabName":"StructurePipeOrgan","prefabHash":1305252611,"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.","name":"Pipe Organ"},"structure":{"smallGrid":true}},"StructurePipeRadiator":{"prefab":{"prefabName":"StructurePipeRadiator","prefabHash":1696603168,"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.","name":"Pipe Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeRadiatorFlat":{"prefab":{"prefabName":"StructurePipeRadiatorFlat","prefabHash":-399883995,"desc":"A pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeRadiatorFlatLiquid":{"prefab":{"prefabName":"StructurePipeRadiatorFlatLiquid","prefabHash":2024754523,"desc":"A liquid pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeStraight":{"prefab":{"prefabName":"StructurePipeStraight","prefabHash":73728932,"desc":"You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Straight)"},"structure":{"smallGrid":true}},"StructurePipeTJunction":{"prefab":{"prefabName":"StructurePipeTJunction","prefabHash":-913817472,"desc":"You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructurePlanter":{"prefab":{"prefabName":"StructurePlanter","prefabHash":-1125641329,"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).","name":"Planter"},"structure":{"smallGrid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Plant","typ":"Plant"}]},"StructurePlatformLadderOpen":{"prefab":{"prefabName":"StructurePlatformLadderOpen","prefabHash":1559586682,"desc":"","name":"Ladder Platform"},"structure":{"smallGrid":false}},"StructurePlinth":{"prefab":{"prefabName":"StructurePlinth","prefabHash":989835703,"desc":"","name":"Plinth"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructurePortablesConnector":{"prefab":{"prefabName":"StructurePortablesConnector","prefabHash":-899013427,"desc":"","name":"Portables Connector"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Maximum":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePowerConnector":{"prefab":{"prefabName":"StructurePowerConnector","prefabHash":-782951720,"desc":"Attaches a Kit (Portable Generator) to a power network.","name":"Power Connector"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Portable Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePowerTransmitter":{"prefab":{"prefabName":"StructurePowerTransmitter","prefabHash":-65087121,"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.","name":"Microwave Power Transmitter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerTransmitterOmni":{"prefab":{"prefabName":"StructurePowerTransmitterOmni","prefabHash":-327468845,"desc":"","name":"Power Transmitter Omni"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerTransmitterReceiver":{"prefab":{"prefabName":"StructurePowerTransmitterReceiver","prefabHash":1195820278,"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","name":"Microwave Power Receiver"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalFemale":{"prefab":{"prefabName":"StructurePowerUmbilicalFemale","prefabHash":101488029,"desc":"","name":"Umbilical Socket (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalFemaleSide":{"prefab":{"prefabName":"StructurePowerUmbilicalFemaleSide","prefabHash":1922506192,"desc":"","name":"Umbilical Socket Angle (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalMale":{"prefab":{"prefabName":"StructurePowerUmbilicalMale","prefabHash":1529453938,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructurePoweredVent":{"prefab":{"prefabName":"StructurePoweredVent","prefabHash":938836756,"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.","name":"Powered Vent"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureExternal":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePoweredVentLarge":{"prefab":{"prefabName":"StructurePoweredVentLarge","prefabHash":-785498334,"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.","name":"Powered Vent Large"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureExternal":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressurantValve":{"prefab":{"prefabName":"StructurePressurantValve","prefabHash":23052817,"desc":"Pumps gas into a liquid pipe in order to raise the pressure","name":"Pressurant Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressureFedGasEngine":{"prefab":{"prefabName":"StructurePressureFedGasEngine","prefabHash":-624011170,"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.","name":"Pressure Fed Gas Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressureFedLiquidEngine":{"prefab":{"prefabName":"StructurePressureFedLiquidEngine","prefabHash":379750958,"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.","name":"Pressure Fed Liquid Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateLarge":{"prefab":{"prefabName":"StructurePressurePlateLarge","prefabHash":-2008706143,"desc":"","name":"Trigger Plate (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateMedium":{"prefab":{"prefabName":"StructurePressurePlateMedium","prefabHash":1269458680,"desc":"","name":"Trigger Plate (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateSmall":{"prefab":{"prefabName":"StructurePressurePlateSmall","prefabHash":-1536471028,"desc":"","name":"Trigger Plate (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressureRegulator":{"prefab":{"prefabName":"StructurePressureRegulator","prefabHash":209854039,"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.","name":"Pressure Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureProximitySensor":{"prefab":{"prefabName":"StructureProximitySensor","prefabHash":568800213,"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.","name":"Proximity Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePumpedLiquidEngine":{"prefab":{"prefabName":"StructurePumpedLiquidEngine","prefabHash":-2031440019,"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","name":"Pumped Liquid Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePurgeValve":{"prefab":{"prefabName":"StructurePurgeValve","prefabHash":-737232128,"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.","name":"Purge Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRailing":{"prefab":{"prefabName":"StructureRailing","prefabHash":-1756913871,"desc":"\"Safety third.\"","name":"Railing Industrial (Type 1)"},"structure":{"smallGrid":false}},"StructureRecycler":{"prefab":{"prefabName":"StructureRecycler","prefabHash":-1633947337,"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.","name":"Recycler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureRefrigeratedVendingMachine":{"prefab":{"prefabName":"StructureRefrigeratedVendingMachine","prefabHash":-1577831321,"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. ","name":"Refrigerated Vending Machine"},"structure":{"smallGrid":true},"logic":{"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":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureReinforcedCompositeWindow":{"prefab":{"prefabName":"StructureReinforcedCompositeWindow","prefabHash":2027713511,"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.","name":"Reinforced Window (Composite)"},"structure":{"smallGrid":false}},"StructureReinforcedCompositeWindowSteel":{"prefab":{"prefabName":"StructureReinforcedCompositeWindowSteel","prefabHash":-816454272,"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.","name":"Reinforced Window (Composite Steel)"},"structure":{"smallGrid":false}},"StructureReinforcedWallPaddedWindow":{"prefab":{"prefabName":"StructureReinforcedWallPaddedWindow","prefabHash":1939061729,"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.","name":"Reinforced Window (Padded)"},"structure":{"smallGrid":false}},"StructureReinforcedWallPaddedWindowThin":{"prefab":{"prefabName":"StructureReinforcedWallPaddedWindowThin","prefabHash":158502707,"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.","name":"Reinforced Window (Thin)"},"structure":{"smallGrid":false}},"StructureResearchMachine":{"prefab":{"prefabName":"StructureResearchMachine","prefabHash":-796627526,"desc":"","name":"Research Machine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureRocketAvionics":{"prefab":{"prefabName":"StructureRocketAvionics","prefabHash":808389066,"desc":"","name":"Rocket Avionics"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureRocketCelestialTracker":{"prefab":{"prefabName":"StructureRocketCelestialTracker","prefabHash":997453927,"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.","name":"Rocket Celestial Tracker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"CelestialHash":"Read","Error":"Read","Horizontal":"Read","Index":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Vertical":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"instructions":{"BodyOrientation":{"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 |","typ":"CelestialTracking","value":1}},"memoryAccess":"Read","memorySize":12}},"StructureRocketCircuitHousing":{"prefab":{"prefabName":"StructureRocketCircuitHousing","prefabHash":150135861,"desc":"","name":"Rocket Circuit Housing"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","LineNumber":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","LineNumber":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"}],"devicePinsLength":6,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"StructureRocketEngineTiny":{"prefab":{"prefabName":"StructureRocketEngineTiny","prefabHash":178472613,"desc":"","name":"Rocket Engine (Tiny)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketManufactory":{"prefab":{"prefabName":"StructureRocketManufactory","prefabHash":1781051034,"desc":"","name":"Rocket Manufactory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureRocketMiner":{"prefab":{"prefabName":"StructureRocketMiner","prefabHash":-2087223687,"desc":"Gathers available resources at the rocket's current space location.","name":"Rocket Miner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"ClearMemory":"Write","DrillCondition":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"},{"name":"Drill Head Slot","typ":"DrillHead"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketScanner":{"prefab":{"prefabName":"StructureRocketScanner","prefabHash":2014252591,"desc":"","name":"Rocket Scanner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Scanner Head Slot","typ":"ScanningHead"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketTower":{"prefab":{"prefabName":"StructureRocketTower","prefabHash":-654619479,"desc":"","name":"Launch Tower"},"structure":{"smallGrid":false}},"StructureRocketTransformerSmall":{"prefab":{"prefabName":"StructureRocketTransformerSmall","prefabHash":518925193,"desc":"","name":"Transformer Small (Rocket)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRover":{"prefab":{"prefabName":"StructureRover","prefabHash":806513938,"desc":"","name":"Rover Frame"},"structure":{"smallGrid":false}},"StructureSDBHopper":{"prefab":{"prefabName":"StructureSDBHopper","prefabHash":-1875856925,"desc":"","name":"SDB Hopper"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSDBHopperAdvanced":{"prefab":{"prefabName":"StructureSDBHopperAdvanced","prefabHash":467225612,"desc":"","name":"SDB Hopper Advanced"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSDBSilo":{"prefab":{"prefabName":"StructureSDBSilo","prefabHash":1155865682,"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.","name":"SDB Silo"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSatelliteDish":{"prefab":{"prefabName":"StructureSatelliteDish","prefabHash":439026183,"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.","name":"Medium Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSecurityPrinter":{"prefab":{"prefabName":"StructureSecurityPrinter","prefabHash":-641491515,"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","name":"Security Printer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureShelf":{"prefab":{"prefabName":"StructureShelf","prefabHash":1172114950,"desc":"","name":"Shelf"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"StructureShelfMedium":{"prefab":{"prefabName":"StructureShelfMedium","prefabHash":182006674,"desc":"A shelf for putting things on, so you can see them.","name":"Shelf Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShortCornerLocker":{"prefab":{"prefabName":"StructureShortCornerLocker","prefabHash":1330754486,"desc":"","name":"Short Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShortLocker":{"prefab":{"prefabName":"StructureShortLocker","prefabHash":-554553467,"desc":"","name":"Short Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShower":{"prefab":{"prefabName":"StructureShower","prefabHash":-775128944,"desc":"","name":"Shower"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Maximum":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShowerPowered":{"prefab":{"prefabName":"StructureShowerPowered","prefabHash":-1081797501,"desc":"","name":"Shower (Powered)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSign1x1":{"prefab":{"prefabName":"StructureSign1x1","prefabHash":879058460,"desc":"","name":"Sign 1x1"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSign2x1":{"prefab":{"prefabName":"StructureSign2x1","prefabHash":908320837,"desc":"","name":"Sign 2x1"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSingleBed":{"prefab":{"prefabName":"StructureSingleBed","prefabHash":-492611,"desc":"Description coming.","name":"Single Bed"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSleeper":{"prefab":{"prefabName":"StructureSleeper","prefabHash":-1467449329,"desc":"","name":"Sleeper"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperLeft":{"prefab":{"prefabName":"StructureSleeperLeft","prefabHash":1213495833,"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.","name":"Sleeper Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperRight":{"prefab":{"prefabName":"StructureSleeperRight","prefabHash":-1812330717,"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.","name":"Sleeper Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperVertical":{"prefab":{"prefabName":"StructureSleeperVertical","prefabHash":-1300059018,"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.","name":"Sleeper Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperVerticalDroid":{"prefab":{"prefabName":"StructureSleeperVerticalDroid","prefabHash":1382098999,"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.","name":"Droid Sleeper Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSmallDirectHeatExchangeGastoGas":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeGastoGas","prefabHash":1310303582,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallDirectHeatExchangeLiquidtoGas":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeLiquidtoGas","prefabHash":1825212016,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Gas "},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeLiquidtoLiquid","prefabHash":-507770416,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallSatelliteDish":{"prefab":{"prefabName":"StructureSmallSatelliteDish","prefabHash":-2138748650,"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.","name":"Small Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSmallTableBacklessDouble":{"prefab":{"prefabName":"StructureSmallTableBacklessDouble","prefabHash":-1633000411,"desc":"","name":"Small (Table Backless Double)"},"structure":{"smallGrid":true}},"StructureSmallTableBacklessSingle":{"prefab":{"prefabName":"StructureSmallTableBacklessSingle","prefabHash":-1897221677,"desc":"","name":"Small (Table Backless Single)"},"structure":{"smallGrid":true}},"StructureSmallTableDinnerSingle":{"prefab":{"prefabName":"StructureSmallTableDinnerSingle","prefabHash":1260651529,"desc":"","name":"Small (Table Dinner Single)"},"structure":{"smallGrid":true}},"StructureSmallTableRectangleDouble":{"prefab":{"prefabName":"StructureSmallTableRectangleDouble","prefabHash":-660451023,"desc":"","name":"Small (Table Rectangle Double)"},"structure":{"smallGrid":true}},"StructureSmallTableRectangleSingle":{"prefab":{"prefabName":"StructureSmallTableRectangleSingle","prefabHash":-924678969,"desc":"","name":"Small (Table Rectangle Single)"},"structure":{"smallGrid":true}},"StructureSmallTableThickDouble":{"prefab":{"prefabName":"StructureSmallTableThickDouble","prefabHash":-19246131,"desc":"","name":"Small (Table Thick Double)"},"structure":{"smallGrid":true}},"StructureSmallTableThickSingle":{"prefab":{"prefabName":"StructureSmallTableThickSingle","prefabHash":-291862981,"desc":"","name":"Small Table (Thick Single)"},"structure":{"smallGrid":true}},"StructureSolarPanel":{"prefab":{"prefabName":"StructureSolarPanel","prefabHash":-2045627372,"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.","name":"Solar Panel"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanel45":{"prefab":{"prefabName":"StructureSolarPanel45","prefabHash":-1554349863,"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.","name":"Solar Panel (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanel45Reinforced":{"prefab":{"prefabName":"StructureSolarPanel45Reinforced","prefabHash":930865127,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelDual":{"prefab":{"prefabName":"StructureSolarPanelDual","prefabHash":-539224550,"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.","name":"Solar Panel (Dual)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelDualReinforced":{"prefab":{"prefabName":"StructureSolarPanelDualReinforced","prefabHash":-1545574413,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Dual)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelFlat":{"prefab":{"prefabName":"StructureSolarPanelFlat","prefabHash":1968102968,"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.","name":"Solar Panel (Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelFlatReinforced":{"prefab":{"prefabName":"StructureSolarPanelFlatReinforced","prefabHash":1697196770,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelReinforced":{"prefab":{"prefabName":"StructureSolarPanelReinforced","prefabHash":-934345724,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolidFuelGenerator":{"prefab":{"prefabName":"StructureSolidFuelGenerator","prefabHash":813146305,"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.","name":"Generator (Solid Fuel)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","On":"ReadWrite","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"modes":{"0":"Not Generating","1":"Generating"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Input","typ":"Ore"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSorter":{"prefab":{"prefabName":"StructureSorter","prefabHash":-1009150565,"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.","name":"Sorter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Chute","role":"Output2"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStacker":{"prefab":{"prefabName":"StructureStacker","prefabHash":-2020231820,"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.","name":"Stacker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Processing","typ":"None"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStackerReverse":{"prefab":{"prefabName":"StructureStackerReverse","prefabHash":1585641623,"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.","name":"Stacker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStairs4x2":{"prefab":{"prefabName":"StructureStairs4x2","prefabHash":1405018945,"desc":"","name":"Stairs"},"structure":{"smallGrid":false}},"StructureStairs4x2RailL":{"prefab":{"prefabName":"StructureStairs4x2RailL","prefabHash":155214029,"desc":"","name":"Stairs with Rail (Left)"},"structure":{"smallGrid":false}},"StructureStairs4x2RailR":{"prefab":{"prefabName":"StructureStairs4x2RailR","prefabHash":-212902482,"desc":"","name":"Stairs with Rail (Right)"},"structure":{"smallGrid":false}},"StructureStairs4x2Rails":{"prefab":{"prefabName":"StructureStairs4x2Rails","prefabHash":-1088008720,"desc":"","name":"Stairs with Rails"},"structure":{"smallGrid":false}},"StructureStairwellBackLeft":{"prefab":{"prefabName":"StructureStairwellBackLeft","prefabHash":505924160,"desc":"","name":"Stairwell (Back Left)"},"structure":{"smallGrid":false}},"StructureStairwellBackPassthrough":{"prefab":{"prefabName":"StructureStairwellBackPassthrough","prefabHash":-862048392,"desc":"","name":"Stairwell (Back Passthrough)"},"structure":{"smallGrid":false}},"StructureStairwellBackRight":{"prefab":{"prefabName":"StructureStairwellBackRight","prefabHash":-2128896573,"desc":"","name":"Stairwell (Back Right)"},"structure":{"smallGrid":false}},"StructureStairwellFrontLeft":{"prefab":{"prefabName":"StructureStairwellFrontLeft","prefabHash":-37454456,"desc":"","name":"Stairwell (Front Left)"},"structure":{"smallGrid":false}},"StructureStairwellFrontPassthrough":{"prefab":{"prefabName":"StructureStairwellFrontPassthrough","prefabHash":-1625452928,"desc":"","name":"Stairwell (Front Passthrough)"},"structure":{"smallGrid":false}},"StructureStairwellFrontRight":{"prefab":{"prefabName":"StructureStairwellFrontRight","prefabHash":340210934,"desc":"","name":"Stairwell (Front Right)"},"structure":{"smallGrid":false}},"StructureStairwellNoDoors":{"prefab":{"prefabName":"StructureStairwellNoDoors","prefabHash":2049879875,"desc":"","name":"Stairwell (No Doors)"},"structure":{"smallGrid":false}},"StructureStirlingEngine":{"prefab":{"prefabName":"StructureStirlingEngine","prefabHash":-260316435,"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.","name":"Stirling Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStorageLocker":{"prefab":{"prefabName":"StructureStorageLocker","prefabHash":-793623899,"desc":"","name":"Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSuitStorage":{"prefab":{"prefabName":"StructureSuitStorage","prefabHash":255034731,"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.","name":"Suit Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Helmet","typ":"Helmet"},{"name":"Suit","typ":"Suit"},{"name":"Back","typ":"Back"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTankBig":{"prefab":{"prefabName":"StructureTankBig","prefabHash":-1606848156,"desc":"","name":"Large Tank"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankBigInsulated":{"prefab":{"prefabName":"StructureTankBigInsulated","prefabHash":1280378227,"desc":"","name":"Tank Big (Insulated)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankConnector":{"prefab":{"prefabName":"StructureTankConnector","prefabHash":-1276379454,"desc":"Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network.","name":"Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructureTankConnectorLiquid":{"prefab":{"prefabName":"StructureTankConnectorLiquid","prefabHash":1331802518,"desc":"These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network.","name":"Liquid Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureTankSmall":{"prefab":{"prefabName":"StructureTankSmall","prefabHash":1013514688,"desc":"","name":"Small Tank"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallAir":{"prefab":{"prefabName":"StructureTankSmallAir","prefabHash":955744474,"desc":"","name":"Small Tank (Air)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallFuel":{"prefab":{"prefabName":"StructureTankSmallFuel","prefabHash":2102454415,"desc":"","name":"Small Tank (Fuel)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallInsulated":{"prefab":{"prefabName":"StructureTankSmallInsulated","prefabHash":272136332,"desc":"","name":"Tank Small (Insulated)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureToolManufactory":{"prefab":{"prefabName":"StructureToolManufactory","prefabHash":-465741100,"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.","name":"Tool Manufactory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureTorpedoRack":{"prefab":{"prefabName":"StructureTorpedoRack","prefabHash":1473807953,"desc":"","name":"Torpedo Rack"},"structure":{"smallGrid":true},"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"}]},"StructureTraderWaypoint":{"prefab":{"prefabName":"StructureTraderWaypoint","prefabHash":1570931620,"desc":"","name":"Trader Waypoint"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformer":{"prefab":{"prefabName":"StructureTransformer","prefabHash":-1423212473,"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.","name":"Transformer (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerMedium":{"prefab":{"prefabName":"StructureTransformerMedium","prefabHash":-1065725831,"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.","name":"Transformer (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerMediumReversed":{"prefab":{"prefabName":"StructureTransformerMediumReversed","prefabHash":833912764,"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.","name":"Transformer Reversed (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerSmall":{"prefab":{"prefabName":"StructureTransformerSmall","prefabHash":-890946730,"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.","name":"Transformer (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerSmallReversed":{"prefab":{"prefabName":"StructureTransformerSmallReversed","prefabHash":1054059374,"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.","name":"Transformer Reversed (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTurbineGenerator":{"prefab":{"prefabName":"StructureTurbineGenerator","prefabHash":1282191063,"desc":"","name":"Turbine Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureTurboVolumePump":{"prefab":{"prefabName":"StructureTurboVolumePump","prefabHash":1310794736,"desc":"Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureUnloader":{"prefab":{"prefabName":"StructureUnloader","prefabHash":750118160,"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.","name":"Unloader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureUprightWindTurbine":{"prefab":{"prefabName":"StructureUprightWindTurbine","prefabHash":1622183451,"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.","name":"Upright Wind Turbine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureValve":{"prefab":{"prefabName":"StructureValve","prefabHash":-692036078,"desc":"","name":"Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureVendingMachine":{"prefab":{"prefabName":"StructureVendingMachine","prefabHash":-443130773,"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.","name":"Vending Machine"},"structure":{"smallGrid":true},"logic":{"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":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureVolumePump":{"prefab":{"prefabName":"StructureVolumePump","prefabHash":-321403609,"desc":"The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks.","name":"Volume Pump"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallArch":{"prefab":{"prefabName":"StructureWallArch","prefabHash":-858143148,"desc":"","name":"Wall (Arch)"},"structure":{"smallGrid":false}},"StructureWallArchArrow":{"prefab":{"prefabName":"StructureWallArchArrow","prefabHash":1649708822,"desc":"","name":"Wall (Arch Arrow)"},"structure":{"smallGrid":false}},"StructureWallArchCornerRound":{"prefab":{"prefabName":"StructureWallArchCornerRound","prefabHash":1794588890,"desc":"","name":"Wall (Arch Corner Round)"},"structure":{"smallGrid":true}},"StructureWallArchCornerSquare":{"prefab":{"prefabName":"StructureWallArchCornerSquare","prefabHash":-1963016580,"desc":"","name":"Wall (Arch Corner Square)"},"structure":{"smallGrid":true}},"StructureWallArchCornerTriangle":{"prefab":{"prefabName":"StructureWallArchCornerTriangle","prefabHash":1281911841,"desc":"","name":"Wall (Arch Corner Triangle)"},"structure":{"smallGrid":true}},"StructureWallArchPlating":{"prefab":{"prefabName":"StructureWallArchPlating","prefabHash":1182510648,"desc":"","name":"Wall (Arch Plating)"},"structure":{"smallGrid":false}},"StructureWallArchTwoTone":{"prefab":{"prefabName":"StructureWallArchTwoTone","prefabHash":782529714,"desc":"","name":"Wall (Arch Two Tone)"},"structure":{"smallGrid":false}},"StructureWallCooler":{"prefab":{"prefabName":"StructureWallCooler","prefabHash":-739292323,"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.","name":"Wall Cooler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Pipe","role":"None"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallFlat":{"prefab":{"prefabName":"StructureWallFlat","prefabHash":1635864154,"desc":"","name":"Wall (Flat)"},"structure":{"smallGrid":false}},"StructureWallFlatCornerRound":{"prefab":{"prefabName":"StructureWallFlatCornerRound","prefabHash":898708250,"desc":"","name":"Wall (Flat Corner Round)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerSquare":{"prefab":{"prefabName":"StructureWallFlatCornerSquare","prefabHash":298130111,"desc":"","name":"Wall (Flat Corner Square)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerTriangle":{"prefab":{"prefabName":"StructureWallFlatCornerTriangle","prefabHash":2097419366,"desc":"","name":"Wall (Flat Corner Triangle)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerTriangleFlat":{"prefab":{"prefabName":"StructureWallFlatCornerTriangleFlat","prefabHash":-1161662836,"desc":"","name":"Wall (Flat Corner Triangle Flat)"},"structure":{"smallGrid":true}},"StructureWallGeometryCorner":{"prefab":{"prefabName":"StructureWallGeometryCorner","prefabHash":1979212240,"desc":"","name":"Wall (Geometry Corner)"},"structure":{"smallGrid":false}},"StructureWallGeometryStreight":{"prefab":{"prefabName":"StructureWallGeometryStreight","prefabHash":1049735537,"desc":"","name":"Wall (Geometry Straight)"},"structure":{"smallGrid":false}},"StructureWallGeometryT":{"prefab":{"prefabName":"StructureWallGeometryT","prefabHash":1602758612,"desc":"","name":"Wall (Geometry T)"},"structure":{"smallGrid":false}},"StructureWallGeometryTMirrored":{"prefab":{"prefabName":"StructureWallGeometryTMirrored","prefabHash":-1427845483,"desc":"","name":"Wall (Geometry T Mirrored)"},"structure":{"smallGrid":false}},"StructureWallHeater":{"prefab":{"prefabName":"StructureWallHeater","prefabHash":24258244,"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.","name":"Wall Heater"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallIron":{"prefab":{"prefabName":"StructureWallIron","prefabHash":1287324802,"desc":"","name":"Iron Wall (Type 1)"},"structure":{"smallGrid":false}},"StructureWallIron02":{"prefab":{"prefabName":"StructureWallIron02","prefabHash":1485834215,"desc":"","name":"Iron Wall (Type 2)"},"structure":{"smallGrid":false}},"StructureWallIron03":{"prefab":{"prefabName":"StructureWallIron03","prefabHash":798439281,"desc":"","name":"Iron Wall (Type 3)"},"structure":{"smallGrid":false}},"StructureWallIron04":{"prefab":{"prefabName":"StructureWallIron04","prefabHash":-1309433134,"desc":"","name":"Iron Wall (Type 4)"},"structure":{"smallGrid":false}},"StructureWallLargePanel":{"prefab":{"prefabName":"StructureWallLargePanel","prefabHash":1492930217,"desc":"","name":"Wall (Large Panel)"},"structure":{"smallGrid":false}},"StructureWallLargePanelArrow":{"prefab":{"prefabName":"StructureWallLargePanelArrow","prefabHash":-776581573,"desc":"","name":"Wall (Large Panel Arrow)"},"structure":{"smallGrid":false}},"StructureWallLight":{"prefab":{"prefabName":"StructureWallLight","prefabHash":-1860064656,"desc":"","name":"Wall Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallLightBattery":{"prefab":{"prefabName":"StructureWallLightBattery","prefabHash":-1306415132,"desc":"","name":"Wall Light (Battery)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallPaddedArch":{"prefab":{"prefabName":"StructureWallPaddedArch","prefabHash":1590330637,"desc":"","name":"Wall (Padded Arch)"},"structure":{"smallGrid":false}},"StructureWallPaddedArchCorner":{"prefab":{"prefabName":"StructureWallPaddedArchCorner","prefabHash":-1126688298,"desc":"","name":"Wall (Padded Arch Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedArchLightFittingTop":{"prefab":{"prefabName":"StructureWallPaddedArchLightFittingTop","prefabHash":1171987947,"desc":"","name":"Wall (Padded Arch Light Fitting Top)"},"structure":{"smallGrid":false}},"StructureWallPaddedArchLightsFittings":{"prefab":{"prefabName":"StructureWallPaddedArchLightsFittings","prefabHash":-1546743960,"desc":"","name":"Wall (Padded Arch Lights Fittings)"},"structure":{"smallGrid":false}},"StructureWallPaddedCorner":{"prefab":{"prefabName":"StructureWallPaddedCorner","prefabHash":-155945899,"desc":"","name":"Wall (Padded Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedCornerThin":{"prefab":{"prefabName":"StructureWallPaddedCornerThin","prefabHash":1183203913,"desc":"","name":"Wall (Padded Corner Thin)"},"structure":{"smallGrid":true}},"StructureWallPaddedNoBorder":{"prefab":{"prefabName":"StructureWallPaddedNoBorder","prefabHash":8846501,"desc":"","name":"Wall (Padded No Border)"},"structure":{"smallGrid":false}},"StructureWallPaddedNoBorderCorner":{"prefab":{"prefabName":"StructureWallPaddedNoBorderCorner","prefabHash":179694804,"desc":"","name":"Wall (Padded No Border Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedThinNoBorder":{"prefab":{"prefabName":"StructureWallPaddedThinNoBorder","prefabHash":-1611559100,"desc":"","name":"Wall (Padded Thin No Border)"},"structure":{"smallGrid":false}},"StructureWallPaddedThinNoBorderCorner":{"prefab":{"prefabName":"StructureWallPaddedThinNoBorderCorner","prefabHash":1769527556,"desc":"","name":"Wall (Padded Thin No Border Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedWindow":{"prefab":{"prefabName":"StructureWallPaddedWindow","prefabHash":2087628940,"desc":"","name":"Wall (Padded Window)"},"structure":{"smallGrid":false}},"StructureWallPaddedWindowThin":{"prefab":{"prefabName":"StructureWallPaddedWindowThin","prefabHash":-37302931,"desc":"","name":"Wall (Padded Window Thin)"},"structure":{"smallGrid":false}},"StructureWallPadding":{"prefab":{"prefabName":"StructureWallPadding","prefabHash":635995024,"desc":"","name":"Wall (Padding)"},"structure":{"smallGrid":false}},"StructureWallPaddingArchVent":{"prefab":{"prefabName":"StructureWallPaddingArchVent","prefabHash":-1243329828,"desc":"","name":"Wall (Padding Arch Vent)"},"structure":{"smallGrid":false}},"StructureWallPaddingLightFitting":{"prefab":{"prefabName":"StructureWallPaddingLightFitting","prefabHash":2024882687,"desc":"","name":"Wall (Padding Light Fitting)"},"structure":{"smallGrid":false}},"StructureWallPaddingThin":{"prefab":{"prefabName":"StructureWallPaddingThin","prefabHash":-1102403554,"desc":"","name":"Wall (Padding Thin)"},"structure":{"smallGrid":false}},"StructureWallPlating":{"prefab":{"prefabName":"StructureWallPlating","prefabHash":26167457,"desc":"","name":"Wall (Plating)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsAndHatch":{"prefab":{"prefabName":"StructureWallSmallPanelsAndHatch","prefabHash":619828719,"desc":"","name":"Wall (Small Panels And Hatch)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsArrow":{"prefab":{"prefabName":"StructureWallSmallPanelsArrow","prefabHash":-639306697,"desc":"","name":"Wall (Small Panels Arrow)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsMonoChrome":{"prefab":{"prefabName":"StructureWallSmallPanelsMonoChrome","prefabHash":386820253,"desc":"","name":"Wall (Small Panels Mono Chrome)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsOpen":{"prefab":{"prefabName":"StructureWallSmallPanelsOpen","prefabHash":-1407480603,"desc":"","name":"Wall (Small Panels Open)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsTwoTone":{"prefab":{"prefabName":"StructureWallSmallPanelsTwoTone","prefabHash":1709994581,"desc":"","name":"Wall (Small Panels Two Tone)"},"structure":{"smallGrid":false}},"StructureWallVent":{"prefab":{"prefabName":"StructureWallVent","prefabHash":-1177469307,"desc":"Used to mix atmospheres passively between two walls.","name":"Wall Vent"},"structure":{"smallGrid":true}},"StructureWaterBottleFiller":{"prefab":{"prefabName":"StructureWaterBottleFiller","prefabHash":-1178961954,"desc":"","name":"Water Bottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerBottom":{"prefab":{"prefabName":"StructureWaterBottleFillerBottom","prefabHash":1433754995,"desc":"","name":"Water Bottle Filler Bottom"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerPowered":{"prefab":{"prefabName":"StructureWaterBottleFillerPowered","prefabHash":-756587791,"desc":"","name":"Waterbottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerPoweredBottom":{"prefab":{"prefabName":"StructureWaterBottleFillerPoweredBottom","prefabHash":1986658780,"desc":"","name":"Waterbottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterDigitalValve":{"prefab":{"prefabName":"StructureWaterDigitalValve","prefabHash":-517628750,"desc":"","name":"Liquid Digital Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterPipeMeter":{"prefab":{"prefabName":"StructureWaterPipeMeter","prefabHash":433184168,"desc":"","name":"Liquid Pipe Meter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterPurifier":{"prefab":{"prefabName":"StructureWaterPurifier","prefabHash":887383294,"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.","name":"Water Purifier"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ImportCount":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterWallCooler":{"prefab":{"prefabName":"StructureWaterWallCooler","prefabHash":-1369060582,"desc":"","name":"Liquid Wall Cooler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWeatherStation":{"prefab":{"prefabName":"StructureWeatherStation","prefabHash":1997212478,"desc":"0.NoStorm\n1.StormIncoming\n2.InStorm","name":"Weather Station"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWindTurbine":{"prefab":{"prefabName":"StructureWindTurbine","prefabHash":-2082355173,"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.","name":"Wind Turbine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWindowShutter":{"prefab":{"prefabName":"StructureWindowShutter","prefabHash":2056377335,"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.","name":"Window Shutter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"ToolPrinterMod":{"prefab":{"prefabName":"ToolPrinterMod","prefabHash":1700018136,"desc":"Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Tool Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ToyLuna":{"prefab":{"prefabName":"ToyLuna","prefabHash":94730034,"desc":"","name":"Toy Luna"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"UniformCommander":{"prefab":{"prefabName":"UniformCommander","prefabHash":-2083426457,"desc":"","name":"Uniform Commander"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformMarine":{"prefab":{"prefabName":"UniformMarine","prefabHash":-48342840,"desc":"","name":"Marine Uniform"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformOrangeJumpSuit":{"prefab":{"prefabName":"UniformOrangeJumpSuit","prefabHash":810053150,"desc":"","name":"Jump Suit (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"WeaponEnergy":{"prefab":{"prefabName":"WeaponEnergy","prefabHash":789494694,"desc":"","name":"Weapon Energy"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponPistolEnergy":{"prefab":{"prefabName":"WeaponPistolEnergy","prefabHash":-385323479,"desc":"0.Stun\n1.Kill","name":"Energy Pistol"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponRifleEnergy":{"prefab":{"prefabName":"WeaponRifleEnergy","prefabHash":1154745374,"desc":"0.Stun\n1.Kill","name":"Energy Rifle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponTorpedo":{"prefab":{"prefabName":"WeaponTorpedo","prefabHash":-1102977898,"desc":"","name":"Torpedo"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Torpedo","sortingClass":"Default"}}},"reagents":{"Alcohol":{"Hash":1565803737,"Unit":"ml","Sources":null},"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","Sources":null},"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","Sources":null},"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}}},"enums":{"scriptEnums":{"LogicBatchMethod":{"enumName":"LogicBatchMethod","values":{"Average":{"value":0,"deprecated":false,"description":""},"Maximum":{"value":3,"deprecated":false,"description":""},"Minimum":{"value":2,"deprecated":false,"description":""},"Sum":{"value":1,"deprecated":false,"description":""}}},"LogicReagentMode":{"enumName":"LogicReagentMode","values":{"Contents":{"value":0,"deprecated":false,"description":""},"Recipe":{"value":2,"deprecated":false,"description":""},"Required":{"value":1,"deprecated":false,"description":""},"TotalContents":{"value":3,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}}},"basicEnums":{"AirCon":{"enumName":"AirConditioningMode","values":{"Cold":{"value":0,"deprecated":false,"description":""},"Hot":{"value":1,"deprecated":false,"description":""}}},"AirControl":{"enumName":"AirControlMode","values":{"Draught":{"value":4,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Offline":{"value":1,"deprecated":false,"description":""},"Pressure":{"value":2,"deprecated":false,"description":""}}},"Color":{"enumName":"ColorType","values":{"Black":{"value":7,"deprecated":false,"description":""},"Blue":{"value":0,"deprecated":false,"description":""},"Brown":{"value":8,"deprecated":false,"description":""},"Gray":{"value":1,"deprecated":false,"description":""},"Green":{"value":2,"deprecated":false,"description":""},"Khaki":{"value":9,"deprecated":false,"description":""},"Orange":{"value":3,"deprecated":false,"description":""},"Pink":{"value":10,"deprecated":false,"description":""},"Purple":{"value":11,"deprecated":false,"description":""},"Red":{"value":4,"deprecated":false,"description":""},"White":{"value":6,"deprecated":false,"description":""},"Yellow":{"value":5,"deprecated":false,"description":""}}},"DaylightSensorMode":{"enumName":"DaylightSensorMode","values":{"Default":{"value":0,"deprecated":false,"description":""},"Horizontal":{"value":1,"deprecated":false,"description":""},"Vertical":{"value":2,"deprecated":false,"description":""}}},"ElevatorMode":{"enumName":"ElevatorMode","values":{"Downward":{"value":2,"deprecated":false,"description":""},"Stationary":{"value":0,"deprecated":false,"description":""},"Upward":{"value":1,"deprecated":false,"description":""}}},"EntityState":{"enumName":"EntityState","values":{"Alive":{"value":0,"deprecated":false,"description":""},"Dead":{"value":1,"deprecated":false,"description":""},"Decay":{"value":3,"deprecated":false,"description":""},"Unconscious":{"value":2,"deprecated":false,"description":""}}},"GasType":{"enumName":"GasType","values":{"CarbonDioxide":{"value":4,"deprecated":false,"description":""},"Hydrogen":{"value":16384,"deprecated":false,"description":""},"LiquidCarbonDioxide":{"value":2048,"deprecated":false,"description":""},"LiquidHydrogen":{"value":32768,"deprecated":false,"description":""},"LiquidNitrogen":{"value":128,"deprecated":false,"description":""},"LiquidNitrousOxide":{"value":8192,"deprecated":false,"description":""},"LiquidOxygen":{"value":256,"deprecated":false,"description":""},"LiquidPollutant":{"value":4096,"deprecated":false,"description":""},"LiquidVolatiles":{"value":512,"deprecated":false,"description":""},"Nitrogen":{"value":2,"deprecated":false,"description":""},"NitrousOxide":{"value":64,"deprecated":false,"description":""},"Oxygen":{"value":1,"deprecated":false,"description":""},"Pollutant":{"value":16,"deprecated":false,"description":""},"PollutedWater":{"value":65536,"deprecated":false,"description":""},"Steam":{"value":1024,"deprecated":false,"description":""},"Undefined":{"value":0,"deprecated":false,"description":""},"Volatiles":{"value":8,"deprecated":false,"description":""},"Water":{"value":32,"deprecated":false,"description":""}}},"GasType_RocketMode":{"enumName":"RocketMode","values":{"Chart":{"value":5,"deprecated":false,"description":""},"Discover":{"value":4,"deprecated":false,"description":""},"Invalid":{"value":0,"deprecated":false,"description":""},"Mine":{"value":2,"deprecated":false,"description":""},"None":{"value":1,"deprecated":false,"description":""},"Survey":{"value":3,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}},"PowerMode":{"enumName":"PowerMode","values":{"Charged":{"value":4,"deprecated":false,"description":""},"Charging":{"value":3,"deprecated":false,"description":""},"Discharged":{"value":1,"deprecated":false,"description":""},"Discharging":{"value":2,"deprecated":false,"description":""},"Idle":{"value":0,"deprecated":false,"description":""}}},"ReEntryProfile":{"enumName":"ReEntryProfile","values":{"High":{"value":3,"deprecated":false,"description":""},"Max":{"value":4,"deprecated":false,"description":""},"Medium":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Optimal":{"value":1,"deprecated":false,"description":""}}},"RobotMode":{"enumName":"RobotMode","values":{"Follow":{"value":1,"deprecated":false,"description":""},"MoveToTarget":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"PathToTarget":{"value":5,"deprecated":false,"description":""},"Roam":{"value":3,"deprecated":false,"description":""},"StorageFull":{"value":6,"deprecated":false,"description":""},"Unload":{"value":4,"deprecated":false,"description":""}}},"SlotClass":{"enumName":"Class","values":{"AccessCard":{"value":22,"deprecated":false,"description":""},"Appliance":{"value":18,"deprecated":false,"description":""},"Back":{"value":3,"deprecated":false,"description":""},"Battery":{"value":14,"deprecated":false,"description":""},"Belt":{"value":16,"deprecated":false,"description":""},"Blocked":{"value":38,"deprecated":false,"description":""},"Bottle":{"value":25,"deprecated":false,"description":""},"Cartridge":{"value":21,"deprecated":false,"description":""},"Circuit":{"value":24,"deprecated":false,"description":""},"Circuitboard":{"value":7,"deprecated":false,"description":""},"CreditCard":{"value":28,"deprecated":false,"description":""},"DataDisk":{"value":8,"deprecated":false,"description":""},"DirtCanister":{"value":29,"deprecated":false,"description":""},"DrillHead":{"value":35,"deprecated":false,"description":""},"Egg":{"value":15,"deprecated":false,"description":""},"Entity":{"value":13,"deprecated":false,"description":""},"Flare":{"value":37,"deprecated":false,"description":""},"GasCanister":{"value":5,"deprecated":false,"description":""},"GasFilter":{"value":4,"deprecated":false,"description":""},"Glasses":{"value":27,"deprecated":false,"description":""},"Helmet":{"value":1,"deprecated":false,"description":""},"Ingot":{"value":19,"deprecated":false,"description":""},"LiquidBottle":{"value":32,"deprecated":false,"description":""},"LiquidCanister":{"value":31,"deprecated":false,"description":""},"Magazine":{"value":23,"deprecated":false,"description":""},"Motherboard":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Ore":{"value":10,"deprecated":false,"description":""},"Organ":{"value":9,"deprecated":false,"description":""},"Plant":{"value":11,"deprecated":false,"description":""},"ProgrammableChip":{"value":26,"deprecated":false,"description":""},"ScanningHead":{"value":36,"deprecated":false,"description":""},"SensorProcessingUnit":{"value":30,"deprecated":false,"description":""},"SoundCartridge":{"value":34,"deprecated":false,"description":""},"Suit":{"value":2,"deprecated":false,"description":""},"SuitMod":{"value":39,"deprecated":false,"description":""},"Tool":{"value":17,"deprecated":false,"description":""},"Torpedo":{"value":20,"deprecated":false,"description":""},"Uniform":{"value":12,"deprecated":false,"description":""},"Wreckage":{"value":33,"deprecated":false,"description":""}}},"SorterInstruction":{"enumName":"SorterInstruction","values":{"FilterPrefabHashEquals":{"value":1,"deprecated":false,"description":""},"FilterPrefabHashNotEquals":{"value":2,"deprecated":false,"description":""},"FilterQuantityCompare":{"value":5,"deprecated":false,"description":""},"FilterSlotTypeCompare":{"value":4,"deprecated":false,"description":""},"FilterSortingClassCompare":{"value":3,"deprecated":false,"description":""},"LimitNextExecutionByCount":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""}}},"SortingClass":{"enumName":"SortingClass","values":{"Appliances":{"value":6,"deprecated":false,"description":""},"Atmospherics":{"value":7,"deprecated":false,"description":""},"Clothing":{"value":5,"deprecated":false,"description":""},"Default":{"value":0,"deprecated":false,"description":""},"Food":{"value":4,"deprecated":false,"description":""},"Ices":{"value":10,"deprecated":false,"description":""},"Kits":{"value":1,"deprecated":false,"description":""},"Ores":{"value":9,"deprecated":false,"description":""},"Resources":{"value":3,"deprecated":false,"description":""},"Storage":{"value":8,"deprecated":false,"description":""},"Tools":{"value":2,"deprecated":false,"description":""}}},"Sound":{"enumName":"SoundAlert","values":{"AirlockCycling":{"value":22,"deprecated":false,"description":""},"Alarm1":{"value":45,"deprecated":false,"description":""},"Alarm10":{"value":12,"deprecated":false,"description":""},"Alarm11":{"value":13,"deprecated":false,"description":""},"Alarm12":{"value":14,"deprecated":false,"description":""},"Alarm2":{"value":1,"deprecated":false,"description":""},"Alarm3":{"value":2,"deprecated":false,"description":""},"Alarm4":{"value":3,"deprecated":false,"description":""},"Alarm5":{"value":4,"deprecated":false,"description":""},"Alarm6":{"value":5,"deprecated":false,"description":""},"Alarm7":{"value":6,"deprecated":false,"description":""},"Alarm8":{"value":10,"deprecated":false,"description":""},"Alarm9":{"value":11,"deprecated":false,"description":""},"Alert":{"value":17,"deprecated":false,"description":""},"Danger":{"value":15,"deprecated":false,"description":""},"Depressurising":{"value":20,"deprecated":false,"description":""},"FireFireFire":{"value":28,"deprecated":false,"description":""},"Five":{"value":33,"deprecated":false,"description":""},"Floor":{"value":34,"deprecated":false,"description":""},"Four":{"value":32,"deprecated":false,"description":""},"HaltWhoGoesThere":{"value":27,"deprecated":false,"description":""},"HighCarbonDioxide":{"value":44,"deprecated":false,"description":""},"IntruderAlert":{"value":19,"deprecated":false,"description":""},"LiftOff":{"value":36,"deprecated":false,"description":""},"MalfunctionDetected":{"value":26,"deprecated":false,"description":""},"Music1":{"value":7,"deprecated":false,"description":""},"Music2":{"value":8,"deprecated":false,"description":""},"Music3":{"value":9,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"One":{"value":29,"deprecated":false,"description":""},"PollutantsDetected":{"value":43,"deprecated":false,"description":""},"PowerLow":{"value":23,"deprecated":false,"description":""},"PressureHigh":{"value":39,"deprecated":false,"description":""},"PressureLow":{"value":40,"deprecated":false,"description":""},"Pressurising":{"value":21,"deprecated":false,"description":""},"RocketLaunching":{"value":35,"deprecated":false,"description":""},"StormIncoming":{"value":18,"deprecated":false,"description":""},"SystemFailure":{"value":24,"deprecated":false,"description":""},"TemperatureHigh":{"value":41,"deprecated":false,"description":""},"TemperatureLow":{"value":42,"deprecated":false,"description":""},"Three":{"value":31,"deprecated":false,"description":""},"TraderIncoming":{"value":37,"deprecated":false,"description":""},"TraderLanded":{"value":38,"deprecated":false,"description":""},"Two":{"value":30,"deprecated":false,"description":""},"Warning":{"value":16,"deprecated":false,"description":""},"Welcome":{"value":25,"deprecated":false,"description":""}}},"TransmitterMode":{"enumName":"LogicTransmitterMode","values":{"Active":{"value":1,"deprecated":false,"description":""},"Passive":{"value":0,"deprecated":false,"description":""}}},"Vent":{"enumName":"VentDirection","values":{"Inward":{"value":1,"deprecated":false,"description":""},"Outward":{"value":0,"deprecated":false,"description":""}}},"_unnamed":{"enumName":"ConditionOperation","values":{"Equals":{"value":0,"deprecated":false,"description":""},"Greater":{"value":1,"deprecated":false,"description":""},"Less":{"value":2,"deprecated":false,"description":""},"NotEquals":{"value":3,"deprecated":false,"description":""}}}}},"prefabsByHash":{"-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"},"structures":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","Flag_ODA_10m","Flag_ODA_4m","Flag_ODA_6m","Flag_ODA_8m","H2Combustor","KitchenTableShort","KitchenTableSimpleShort","KitchenTableSimpleTall","KitchenTableTall","Landingpad_2x2CenterPiece01","Landingpad_BlankPiece","Landingpad_CenterPiece01","Landingpad_CrossPiece","Landingpad_DataConnectionPiece","Landingpad_DiagonalPiece01","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_GasCylinderTankPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_StraightPiece01","Landingpad_TaxiPieceCorner","Landingpad_TaxiPieceHold","Landingpad_TaxiPieceStraight","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","RailingElegant01","RailingElegant02","RailingIndustrial02","RespawnPoint","RespawnPointWallMounted","Rover_MkI_build_states","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureBlocker","StructureCableAnalysizer","StructureCableCorner","StructureCableCorner3","StructureCableCorner3Burnt","StructureCableCorner3HBurnt","StructureCableCorner4","StructureCableCorner4Burnt","StructureCableCorner4HBurnt","StructureCableCornerBurnt","StructureCableCornerH","StructureCableCornerH3","StructureCableCornerH4","StructureCableCornerHBurnt","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCableJunction","StructureCableJunction4","StructureCableJunction4Burnt","StructureCableJunction4HBurnt","StructureCableJunction5","StructureCableJunction5Burnt","StructureCableJunction6","StructureCableJunction6Burnt","StructureCableJunction6HBurnt","StructureCableJunctionBurnt","StructureCableJunctionH","StructureCableJunctionH4","StructureCableJunctionH5","StructureCableJunctionH5Burnt","StructureCableJunctionH6","StructureCableJunctionHBurnt","StructureCableStraight","StructureCableStraightBurnt","StructureCableStraightH","StructureCableStraightHBurnt","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteCorner","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteFlipFlopSplitter","StructureChuteInlet","StructureChuteJunction","StructureChuteOutlet","StructureChuteOverflow","StructureChuteStraight","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureChuteValve","StructureChuteWindow","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeCladdingAngled","StructureCompositeCladdingAngledCorner","StructureCompositeCladdingAngledCornerInner","StructureCompositeCladdingAngledCornerInnerLong","StructureCompositeCladdingAngledCornerInnerLongL","StructureCompositeCladdingAngledCornerInnerLongR","StructureCompositeCladdingAngledCornerLong","StructureCompositeCladdingAngledCornerLongR","StructureCompositeCladdingAngledLong","StructureCompositeCladdingCylindrical","StructureCompositeCladdingCylindricalPanel","StructureCompositeCladdingPanel","StructureCompositeCladdingRounded","StructureCompositeCladdingRoundedCorner","StructureCompositeCladdingRoundedCornerInner","StructureCompositeCladdingSpherical","StructureCompositeCladdingSphericalCap","StructureCompositeCladdingSphericalCorner","StructureCompositeDoor","StructureCompositeFloorGrating","StructureCompositeFloorGrating2","StructureCompositeFloorGrating3","StructureCompositeFloorGrating4","StructureCompositeFloorGratingOpen","StructureCompositeFloorGratingOpenRotated","StructureCompositeWall","StructureCompositeWall02","StructureCompositeWall03","StructureCompositeWall04","StructureCompositeWindow","StructureCompositeWindowIron","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCrateMount","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEngineMountTypeA1","StructureEvaporationChamber","StructureExpansionValve","StructureFairingTypeA1","StructureFairingTypeA2","StructureFairingTypeA3","StructureFiltration","StructureFlagSmall","StructureFlashingLight","StructureFlatBench","StructureFloorDrain","StructureFrame","StructureFrameCorner","StructureFrameCornerCut","StructureFrameIron","StructureFrameSide","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureFuselageTypeA1","StructureFuselageTypeA2","StructureFuselageTypeA4","StructureFuselageTypeC5","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTray","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInLineTankGas1x1","StructureInLineTankGas1x2","StructureInLineTankLiquid1x1","StructureInLineTankLiquid1x2","StructureInsulatedInLineTankGas1x1","StructureInsulatedInLineTankGas1x2","StructureInsulatedInLineTankLiquid1x1","StructureInsulatedInLineTankLiquid1x2","StructureInsulatedPipeCorner","StructureInsulatedPipeCrossJunction","StructureInsulatedPipeCrossJunction3","StructureInsulatedPipeCrossJunction4","StructureInsulatedPipeCrossJunction5","StructureInsulatedPipeCrossJunction6","StructureInsulatedPipeLiquidCorner","StructureInsulatedPipeLiquidCrossJunction","StructureInsulatedPipeLiquidCrossJunction4","StructureInsulatedPipeLiquidCrossJunction5","StructureInsulatedPipeLiquidCrossJunction6","StructureInsulatedPipeLiquidStraight","StructureInsulatedPipeLiquidTJunction","StructureInsulatedPipeStraight","StructureInsulatedPipeTJunction","StructureInsulatedTankConnector","StructureInsulatedTankConnectorLiquid","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLadder","StructureLadderEnd","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLaunchMount","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassiveVent","StructurePassiveVentInsulated","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePictureFrameThickLandscapeLarge","StructurePictureFrameThickLandscapeSmall","StructurePictureFrameThickMountLandscapeLarge","StructurePictureFrameThickMountLandscapeSmall","StructurePictureFrameThickMountPortraitLarge","StructurePictureFrameThickMountPortraitSmall","StructurePictureFrameThickPortraitLarge","StructurePictureFrameThickPortraitSmall","StructurePictureFrameThinLandscapeLarge","StructurePictureFrameThinLandscapeSmall","StructurePictureFrameThinMountLandscapeLarge","StructurePictureFrameThinMountLandscapeSmall","StructurePictureFrameThinMountPortraitLarge","StructurePictureFrameThinMountPortraitSmall","StructurePictureFrameThinPortraitLarge","StructurePictureFrameThinPortraitSmall","StructurePipeAnalysizer","StructurePipeCorner","StructurePipeCowl","StructurePipeCrossJunction","StructurePipeCrossJunction3","StructurePipeCrossJunction4","StructurePipeCrossJunction5","StructurePipeCrossJunction6","StructurePipeHeater","StructurePipeIgniter","StructurePipeInsulatedLiquidCrossJunction","StructurePipeLabel","StructurePipeLiquidCorner","StructurePipeLiquidCrossJunction","StructurePipeLiquidCrossJunction3","StructurePipeLiquidCrossJunction4","StructurePipeLiquidCrossJunction5","StructurePipeLiquidCrossJunction6","StructurePipeLiquidStraight","StructurePipeLiquidTJunction","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeOrgan","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePipeStraight","StructurePipeTJunction","StructurePlanter","StructurePlatformLadderOpen","StructurePlinth","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRailing","StructureRecycler","StructureRefrigeratedVendingMachine","StructureReinforcedCompositeWindow","StructureReinforcedCompositeWindowSteel","StructureReinforcedWallPaddedWindow","StructureReinforcedWallPaddedWindowThin","StructureResearchMachine","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTower","StructureRocketTransformerSmall","StructureRover","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelf","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSmallTableBacklessDouble","StructureSmallTableBacklessSingle","StructureSmallTableDinnerSingle","StructureSmallTableRectangleDouble","StructureSmallTableRectangleSingle","StructureSmallTableThickDouble","StructureSmallTableThickSingle","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStairs4x2","StructureStairs4x2RailL","StructureStairs4x2RailR","StructureStairs4x2Rails","StructureStairwellBackLeft","StructureStairwellBackPassthrough","StructureStairwellBackRight","StructureStairwellFrontLeft","StructureStairwellFrontPassthrough","StructureStairwellFrontRight","StructureStairwellNoDoors","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankConnector","StructureTankConnectorLiquid","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTorpedoRack","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallArch","StructureWallArchArrow","StructureWallArchCornerRound","StructureWallArchCornerSquare","StructureWallArchCornerTriangle","StructureWallArchPlating","StructureWallArchTwoTone","StructureWallCooler","StructureWallFlat","StructureWallFlatCornerRound","StructureWallFlatCornerSquare","StructureWallFlatCornerTriangle","StructureWallFlatCornerTriangleFlat","StructureWallGeometryCorner","StructureWallGeometryStreight","StructureWallGeometryT","StructureWallGeometryTMirrored","StructureWallHeater","StructureWallIron","StructureWallIron02","StructureWallIron03","StructureWallIron04","StructureWallLargePanel","StructureWallLargePanelArrow","StructureWallLight","StructureWallLightBattery","StructureWallPaddedArch","StructureWallPaddedArchCorner","StructureWallPaddedArchLightFittingTop","StructureWallPaddedArchLightsFittings","StructureWallPaddedCorner","StructureWallPaddedCornerThin","StructureWallPaddedNoBorder","StructureWallPaddedNoBorderCorner","StructureWallPaddedThinNoBorder","StructureWallPaddedThinNoBorderCorner","StructureWallPaddedWindow","StructureWallPaddedWindowThin","StructureWallPadding","StructureWallPaddingArchVent","StructureWallPaddingLightFitting","StructureWallPaddingThin","StructureWallPlating","StructureWallSmallPanelsAndHatch","StructureWallSmallPanelsArrow","StructureWallSmallPanelsMonoChrome","StructureWallSmallPanelsOpen","StructureWallSmallPanelsTwoTone","StructureWallVent","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"devices":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","H2Combustor","Landingpad_DataConnectionPiece","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureCableAnalysizer","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteInlet","StructureChuteOutlet","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeDoor","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEvaporationChamber","StructureExpansionValve","StructureFiltration","StructureFlashingLight","StructureFlatBench","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePipeAnalysizer","StructurePipeHeater","StructurePipeIgniter","StructurePipeLabel","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRecycler","StructureRefrigeratedVendingMachine","StructureResearchMachine","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTransformerSmall","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallCooler","StructureWallHeater","StructureWallLight","StructureWallLightBattery","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"items":["AccessCardBlack","AccessCardBlue","AccessCardBrown","AccessCardGray","AccessCardGreen","AccessCardKhaki","AccessCardOrange","AccessCardPink","AccessCardPurple","AccessCardRed","AccessCardWhite","AccessCardYellow","ApplianceChemistryStation","ApplianceDeskLampLeft","ApplianceDeskLampRight","ApplianceMicrowave","AppliancePackagingMachine","AppliancePaintMixer","AppliancePlantGeneticAnalyzer","AppliancePlantGeneticSplicer","AppliancePlantGeneticStabilizer","ApplianceReagentProcessor","ApplianceSeedTray","ApplianceTabletDock","AutolathePrinterMod","Battery_Wireless_cell","Battery_Wireless_cell_Big","CardboardBox","CartridgeAccessController","CartridgeAtmosAnalyser","CartridgeConfiguration","CartridgeElectronicReader","CartridgeGPS","CartridgeGuide","CartridgeMedicalAnalyser","CartridgeNetworkAnalyser","CartridgeOreScanner","CartridgeOreScannerColor","CartridgePlantAnalyser","CartridgeTracker","CircuitboardAdvAirlockControl","CircuitboardAirControl","CircuitboardAirlockControl","CircuitboardCameraDisplay","CircuitboardDoorControl","CircuitboardGasDisplay","CircuitboardGraphDisplay","CircuitboardHashDisplay","CircuitboardModeControl","CircuitboardPowerControl","CircuitboardShipDisplay","CircuitboardSolarControl","CrateMkII","DecayedFood","DynamicAirConditioner","DynamicCrate","DynamicGPR","DynamicGasCanisterAir","DynamicGasCanisterCarbonDioxide","DynamicGasCanisterEmpty","DynamicGasCanisterFuel","DynamicGasCanisterNitrogen","DynamicGasCanisterNitrousOxide","DynamicGasCanisterOxygen","DynamicGasCanisterPollutants","DynamicGasCanisterRocketFuel","DynamicGasCanisterVolatiles","DynamicGasCanisterWater","DynamicGasTankAdvanced","DynamicGasTankAdvancedOxygen","DynamicGenerator","DynamicHydroponics","DynamicLight","DynamicLiquidCanisterEmpty","DynamicMKIILiquidCanisterEmpty","DynamicMKIILiquidCanisterWater","DynamicScrubber","DynamicSkeleton","ElectronicPrinterMod","ElevatorCarrage","EntityChick","EntityChickenBrown","EntityChickenWhite","EntityRoosterBlack","EntityRoosterBrown","Fertilizer","FireArmSMG","FlareGun","Handgun","HandgunMagazine","HumanSkull","ImGuiCircuitboardAirlockControl","ItemActiveVent","ItemAdhesiveInsulation","ItemAdvancedTablet","ItemAlienMushroom","ItemAmmoBox","ItemAngleGrinder","ItemArcWelder","ItemAreaPowerControl","ItemAstroloyIngot","ItemAstroloySheets","ItemAuthoringTool","ItemAuthoringToolRocketNetwork","ItemBasketBall","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBatteryCharger","ItemBatteryChargerSmall","ItemBeacon","ItemBiomass","ItemBreadLoaf","ItemCableAnalyser","ItemCableCoil","ItemCableCoilHeavy","ItemCableFuse","ItemCannedCondensedMilk","ItemCannedEdamame","ItemCannedMushroom","ItemCannedPowderedEggs","ItemCannedRicePudding","ItemCerealBar","ItemCharcoal","ItemChemLightBlue","ItemChemLightGreen","ItemChemLightRed","ItemChemLightWhite","ItemChemLightYellow","ItemCoalOre","ItemCobaltOre","ItemCoffeeMug","ItemConstantanIngot","ItemCookedCondensedMilk","ItemCookedCorn","ItemCookedMushroom","ItemCookedPowderedEggs","ItemCookedPumpkin","ItemCookedRice","ItemCookedSoybean","ItemCookedTomato","ItemCopperIngot","ItemCopperOre","ItemCorn","ItemCornSoup","ItemCreditCard","ItemCropHay","ItemCrowbar","ItemDataDisk","ItemDirtCanister","ItemDirtyOre","ItemDisposableBatteryCharger","ItemDrill","ItemDuctTape","ItemDynamicAirCon","ItemDynamicScrubber","ItemEggCarton","ItemElectronicParts","ItemElectrumIngot","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyCrowbar","ItemEmergencyDrill","ItemEmergencyEvaSuit","ItemEmergencyPickaxe","ItemEmergencyScrewdriver","ItemEmergencySpaceHelmet","ItemEmergencyToolBelt","ItemEmergencyWireCutters","ItemEmergencyWrench","ItemEmptyCan","ItemEvaSuit","ItemExplosive","ItemFern","ItemFertilizedEgg","ItemFilterFern","ItemFlagSmall","ItemFlashingLight","ItemFlashlight","ItemFlour","ItemFlowerBlue","ItemFlowerGreen","ItemFlowerOrange","ItemFlowerRed","ItemFlowerYellow","ItemFrenchFries","ItemFries","ItemGasCanisterCarbonDioxide","ItemGasCanisterEmpty","ItemGasCanisterFuel","ItemGasCanisterNitrogen","ItemGasCanisterNitrousOxide","ItemGasCanisterOxygen","ItemGasCanisterPollutants","ItemGasCanisterSmart","ItemGasCanisterVolatiles","ItemGasCanisterWater","ItemGasFilterCarbonDioxide","ItemGasFilterCarbonDioxideInfinite","ItemGasFilterCarbonDioxideL","ItemGasFilterCarbonDioxideM","ItemGasFilterNitrogen","ItemGasFilterNitrogenInfinite","ItemGasFilterNitrogenL","ItemGasFilterNitrogenM","ItemGasFilterNitrousOxide","ItemGasFilterNitrousOxideInfinite","ItemGasFilterNitrousOxideL","ItemGasFilterNitrousOxideM","ItemGasFilterOxygen","ItemGasFilterOxygenInfinite","ItemGasFilterOxygenL","ItemGasFilterOxygenM","ItemGasFilterPollutants","ItemGasFilterPollutantsInfinite","ItemGasFilterPollutantsL","ItemGasFilterPollutantsM","ItemGasFilterVolatiles","ItemGasFilterVolatilesInfinite","ItemGasFilterVolatilesL","ItemGasFilterVolatilesM","ItemGasFilterWater","ItemGasFilterWaterInfinite","ItemGasFilterWaterL","ItemGasFilterWaterM","ItemGasSensor","ItemGasTankStorage","ItemGlassSheets","ItemGlasses","ItemGoldIngot","ItemGoldOre","ItemGrenade","ItemHEMDroidRepairKit","ItemHardBackpack","ItemHardJetpack","ItemHardMiningBackPack","ItemHardSuit","ItemHardsuitHelmet","ItemHastelloyIngot","ItemHat","ItemHighVolumeGasCanisterEmpty","ItemHorticultureBelt","ItemHydroponicTray","ItemIce","ItemIgniter","ItemInconelIngot","ItemInsulation","ItemIntegratedCircuit10","ItemInvarIngot","ItemIronFrames","ItemIronIngot","ItemIronOre","ItemIronSheets","ItemJetpackBasic","ItemKitAIMeE","ItemKitAccessBridge","ItemKitAdvancedComposter","ItemKitAdvancedFurnace","ItemKitAdvancedPackagingMachine","ItemKitAirlock","ItemKitAirlockGate","ItemKitArcFurnace","ItemKitAtmospherics","ItemKitAutoMinerSmall","ItemKitAutolathe","ItemKitAutomatedOven","ItemKitBasket","ItemKitBattery","ItemKitBatteryLarge","ItemKitBeacon","ItemKitBeds","ItemKitBlastDoor","ItemKitCentrifuge","ItemKitChairs","ItemKitChute","ItemKitChuteUmbilical","ItemKitCompositeCladding","ItemKitCompositeFloorGrating","ItemKitComputer","ItemKitConsole","ItemKitCrate","ItemKitCrateMkII","ItemKitCrateMount","ItemKitCryoTube","ItemKitDeepMiner","ItemKitDockingPort","ItemKitDoor","ItemKitDrinkingFountain","ItemKitDynamicCanister","ItemKitDynamicGasTankAdvanced","ItemKitDynamicGenerator","ItemKitDynamicHydroponics","ItemKitDynamicLiquidCanister","ItemKitDynamicMKIILiquidCanister","ItemKitElectricUmbilical","ItemKitElectronicsPrinter","ItemKitElevator","ItemKitEngineLarge","ItemKitEngineMedium","ItemKitEngineSmall","ItemKitEvaporationChamber","ItemKitFlagODA","ItemKitFridgeBig","ItemKitFridgeSmall","ItemKitFurnace","ItemKitFurniture","ItemKitFuselage","ItemKitGasGenerator","ItemKitGasUmbilical","ItemKitGovernedGasRocketEngine","ItemKitGroundTelescope","ItemKitGrowLight","ItemKitHarvie","ItemKitHeatExchanger","ItemKitHorizontalAutoMiner","ItemKitHydraulicPipeBender","ItemKitHydroponicAutomated","ItemKitHydroponicStation","ItemKitIceCrusher","ItemKitInsulatedLiquidPipe","ItemKitInsulatedPipe","ItemKitInsulatedPipeUtility","ItemKitInsulatedPipeUtilityLiquid","ItemKitInteriorDoors","ItemKitLadder","ItemKitLandingPadAtmos","ItemKitLandingPadBasic","ItemKitLandingPadWaypoint","ItemKitLargeDirectHeatExchanger","ItemKitLargeExtendableRadiator","ItemKitLargeSatelliteDish","ItemKitLaunchMount","ItemKitLaunchTower","ItemKitLiquidRegulator","ItemKitLiquidTank","ItemKitLiquidTankInsulated","ItemKitLiquidTurboVolumePump","ItemKitLiquidUmbilical","ItemKitLocker","ItemKitLogicCircuit","ItemKitLogicInputOutput","ItemKitLogicMemory","ItemKitLogicProcessor","ItemKitLogicSwitch","ItemKitLogicTransmitter","ItemKitMotherShipCore","ItemKitMusicMachines","ItemKitPassiveLargeRadiatorGas","ItemKitPassiveLargeRadiatorLiquid","ItemKitPassthroughHeatExchanger","ItemKitPictureFrame","ItemKitPipe","ItemKitPipeLiquid","ItemKitPipeOrgan","ItemKitPipeRadiator","ItemKitPipeRadiatorLiquid","ItemKitPipeUtility","ItemKitPipeUtilityLiquid","ItemKitPlanter","ItemKitPortablesConnector","ItemKitPowerTransmitter","ItemKitPowerTransmitterOmni","ItemKitPoweredVent","ItemKitPressureFedGasEngine","ItemKitPressureFedLiquidEngine","ItemKitPressurePlate","ItemKitPumpedLiquidEngine","ItemKitRailing","ItemKitRecycler","ItemKitRegulator","ItemKitReinforcedWindows","ItemKitResearchMachine","ItemKitRespawnPointWallMounted","ItemKitRocketAvionics","ItemKitRocketBattery","ItemKitRocketCargoStorage","ItemKitRocketCelestialTracker","ItemKitRocketCircuitHousing","ItemKitRocketDatalink","ItemKitRocketGasFuelTank","ItemKitRocketLiquidFuelTank","ItemKitRocketManufactory","ItemKitRocketMiner","ItemKitRocketScanner","ItemKitRocketTransformerSmall","ItemKitRoverFrame","ItemKitRoverMKI","ItemKitSDBHopper","ItemKitSatelliteDish","ItemKitSecurityPrinter","ItemKitSensor","ItemKitShower","ItemKitSign","ItemKitSleeper","ItemKitSmallDirectHeatExchanger","ItemKitSmallSatelliteDish","ItemKitSolarPanel","ItemKitSolarPanelBasic","ItemKitSolarPanelBasicReinforced","ItemKitSolarPanelReinforced","ItemKitSolidGenerator","ItemKitSorter","ItemKitSpeaker","ItemKitStacker","ItemKitStairs","ItemKitStairwell","ItemKitStandardChute","ItemKitStirlingEngine","ItemKitSuitStorage","ItemKitTables","ItemKitTank","ItemKitTankInsulated","ItemKitToolManufactory","ItemKitTransformer","ItemKitTransformerSmall","ItemKitTurbineGenerator","ItemKitTurboVolumePump","ItemKitUprightWindTurbine","ItemKitVendingMachine","ItemKitVendingMachineRefrigerated","ItemKitWall","ItemKitWallArch","ItemKitWallFlat","ItemKitWallGeometry","ItemKitWallIron","ItemKitWallPadded","ItemKitWaterBottleFiller","ItemKitWaterPurifier","ItemKitWeatherStation","ItemKitWindTurbine","ItemKitWindowShutter","ItemLabeller","ItemLaptop","ItemLeadIngot","ItemLeadOre","ItemLightSword","ItemLiquidCanisterEmpty","ItemLiquidCanisterSmart","ItemLiquidDrain","ItemLiquidPipeAnalyzer","ItemLiquidPipeHeater","ItemLiquidPipeValve","ItemLiquidPipeVolumePump","ItemLiquidTankStorage","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIICrowbar","ItemMKIIDrill","ItemMKIIDuctTape","ItemMKIIMiningDrill","ItemMKIIScrewdriver","ItemMKIIWireCutters","ItemMKIIWrench","ItemMarineBodyArmor","ItemMarineHelmet","ItemMilk","ItemMiningBackPack","ItemMiningBelt","ItemMiningBeltMKII","ItemMiningCharge","ItemMiningDrill","ItemMiningDrillHeavy","ItemMiningDrillPneumatic","ItemMkIIToolbelt","ItemMuffin","ItemMushroom","ItemNVG","ItemNickelIngot","ItemNickelOre","ItemNitrice","ItemOxite","ItemPassiveVent","ItemPassiveVentInsulated","ItemPeaceLily","ItemPickaxe","ItemPillHeal","ItemPillStun","ItemPipeAnalyizer","ItemPipeCowl","ItemPipeDigitalValve","ItemPipeGasMixer","ItemPipeHeater","ItemPipeIgniter","ItemPipeLabel","ItemPipeLiquidRadiator","ItemPipeMeter","ItemPipeRadiator","ItemPipeValve","ItemPipeVolumePump","ItemPlantEndothermic_Creative","ItemPlantEndothermic_Genepool1","ItemPlantEndothermic_Genepool2","ItemPlantSampler","ItemPlantSwitchGrass","ItemPlantThermogenic_Creative","ItemPlantThermogenic_Genepool1","ItemPlantThermogenic_Genepool2","ItemPlasticSheets","ItemPotato","ItemPotatoBaked","ItemPowerConnector","ItemPumpkin","ItemPumpkinPie","ItemPumpkinSoup","ItemPureIce","ItemPureIceCarbonDioxide","ItemPureIceHydrogen","ItemPureIceLiquidCarbonDioxide","ItemPureIceLiquidHydrogen","ItemPureIceLiquidNitrogen","ItemPureIceLiquidNitrous","ItemPureIceLiquidOxygen","ItemPureIceLiquidPollutant","ItemPureIceLiquidVolatiles","ItemPureIceNitrogen","ItemPureIceNitrous","ItemPureIceOxygen","ItemPureIcePollutant","ItemPureIcePollutedWater","ItemPureIceSteam","ItemPureIceVolatiles","ItemRTG","ItemRTGSurvival","ItemReagentMix","ItemRemoteDetonator","ItemResearchCapsule","ItemResearchCapsuleGreen","ItemResearchCapsuleRed","ItemResearchCapsuleYellow","ItemReusableFireExtinguisher","ItemRice","ItemRoadFlare","ItemRocketMiningDrillHead","ItemRocketMiningDrillHeadDurable","ItemRocketMiningDrillHeadHighSpeedIce","ItemRocketMiningDrillHeadHighSpeedMineral","ItemRocketMiningDrillHeadIce","ItemRocketMiningDrillHeadLongTerm","ItemRocketMiningDrillHeadMineral","ItemRocketScanningHead","ItemScanner","ItemScrewdriver","ItemSecurityCamera","ItemSensorLenses","ItemSensorProcessingUnitCelestialScanner","ItemSensorProcessingUnitMesonScanner","ItemSensorProcessingUnitOreScanner","ItemSiliconIngot","ItemSiliconOre","ItemSilverIngot","ItemSilverOre","ItemSolderIngot","ItemSolidFuel","ItemSoundCartridgeBass","ItemSoundCartridgeDrums","ItemSoundCartridgeLeads","ItemSoundCartridgeSynth","ItemSoyOil","ItemSoybean","ItemSpaceCleaner","ItemSpaceHelmet","ItemSpaceIce","ItemSpaceOre","ItemSpacepack","ItemSprayCanBlack","ItemSprayCanBlue","ItemSprayCanBrown","ItemSprayCanGreen","ItemSprayCanGrey","ItemSprayCanKhaki","ItemSprayCanOrange","ItemSprayCanPink","ItemSprayCanPurple","ItemSprayCanRed","ItemSprayCanWhite","ItemSprayCanYellow","ItemSprayGun","ItemSteelFrames","ItemSteelIngot","ItemSteelSheets","ItemStelliteGlassSheets","ItemStelliteIngot","ItemSuitModCryogenicUpgrade","ItemTablet","ItemTerrainManipulator","ItemTomato","ItemTomatoSoup","ItemToolBelt","ItemTropicalPlant","ItemUraniumOre","ItemVolatiles","ItemWallCooler","ItemWallHeater","ItemWallLight","ItemWaspaloyIngot","ItemWaterBottle","ItemWaterPipeDigitalValve","ItemWaterPipeMeter","ItemWaterWallCooler","ItemWearLamp","ItemWeldingTorch","ItemWheat","ItemWireCutters","ItemWirelessBatteryCellExtraLarge","ItemWreckageAirConditioner1","ItemWreckageAirConditioner2","ItemWreckageHydroponicsTray1","ItemWreckageLargeExtendableRadiator01","ItemWreckageStructureRTG1","ItemWreckageStructureWeatherStation001","ItemWreckageStructureWeatherStation002","ItemWreckageStructureWeatherStation003","ItemWreckageStructureWeatherStation004","ItemWreckageStructureWeatherStation005","ItemWreckageStructureWeatherStation006","ItemWreckageStructureWeatherStation007","ItemWreckageStructureWeatherStation008","ItemWreckageTurbineGenerator1","ItemWreckageTurbineGenerator2","ItemWreckageTurbineGenerator3","ItemWreckageWallCooler1","ItemWreckageWallCooler2","ItemWrench","KitSDBSilo","KitStructureCombustionCentrifuge","Lander","Meteorite","MonsterEgg","MotherboardComms","MotherboardLogic","MotherboardMissionControl","MotherboardProgrammableChip","MotherboardRockets","MotherboardSorter","MothershipCore","NpcChick","NpcChicken","PipeBenderMod","PortableComposter","PortableSolarPanel","ReagentColorBlue","ReagentColorGreen","ReagentColorOrange","ReagentColorRed","ReagentColorYellow","Robot","RoverCargo","Rover_MkI","SMGMagazine","SeedBag_Corn","SeedBag_Fern","SeedBag_Mushroom","SeedBag_Potato","SeedBag_Pumpkin","SeedBag_Rice","SeedBag_Soybean","SeedBag_Switchgrass","SeedBag_Tomato","SeedBag_Wheet","SpaceShuttle","ToolPrinterMod","ToyLuna","UniformCommander","UniformMarine","UniformOrangeJumpSuit","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy","WeaponTorpedo"],"logicableItems":["Battery_Wireless_cell","Battery_Wireless_cell_Big","DynamicGPR","DynamicLight","ItemAdvancedTablet","ItemAngleGrinder","ItemArcWelder","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBeacon","ItemDrill","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyDrill","ItemEmergencySpaceHelmet","ItemFlashlight","ItemHardBackpack","ItemHardJetpack","ItemHardSuit","ItemHardsuitHelmet","ItemIntegratedCircuit10","ItemJetpackBasic","ItemLabeller","ItemLaptop","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIIDrill","ItemMKIIMiningDrill","ItemMiningBeltMKII","ItemMiningDrill","ItemMiningDrillHeavy","ItemMkIIToolbelt","ItemNVG","ItemPlantSampler","ItemRemoteDetonator","ItemSensorLenses","ItemSpaceHelmet","ItemSpacepack","ItemTablet","ItemTerrainManipulator","ItemWearLamp","ItemWirelessBatteryCellExtraLarge","PortableSolarPanel","Robot","RoverCargo","Rover_MkI","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy"]} \ No newline at end of file diff --git a/ic10emu/src/device.rs b/ic10emu/src/device.rs index 89adb6d..4c5bba1 100644 --- a/ic10emu/src/device.rs +++ b/ic10emu/src/device.rs @@ -2,8 +2,9 @@ use crate::{ errors::ICError, interpreter::ICState, network::{CableConnectionType, Connection}, - vm::enums::script_enums::{ - LogicReagentMode as ReagentMode, LogicSlotType as SlotLogicType, LogicType, + vm::enums::{ + script_enums::{LogicReagentMode as ReagentMode, LogicSlotType, LogicType}, + basic_enums::{Class as SlotClass, SortingClass}, }, vm::VM, }; @@ -12,10 +13,9 @@ use std::{collections::BTreeMap, ops::Deref}; use itertools::Itertools; use serde_derive::{Deserialize, Serialize}; -use strum_macros::{AsRefStr, EnumIter, EnumString}; #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] -pub enum FieldType { +pub enum MemoryAccess { Read, Write, ReadWrite, @@ -23,7 +23,7 @@ pub enum FieldType { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct LogicField { - pub field_type: FieldType, + pub field_type: MemoryAccess, pub value: f64, } @@ -35,7 +35,7 @@ pub struct SlotOccupant { pub max_quantity: u32, pub sorting_class: SortingClass, pub damage: f64, - fields: BTreeMap, + fields: BTreeMap, } impl SlotOccupant { @@ -47,24 +47,25 @@ impl SlotOccupant { SlotOccupant { id: template.id.unwrap_or_else(id_fn), prefab_hash: fields - .remove(&SlotLogicType::PrefabHash) + .remove(&LogicSlotType::PrefabHash) .map(|field| field.value as i32) .unwrap_or(0), quantity: fields - .remove(&SlotLogicType::Quantity) + .remove(&LogicSlotType::Quantity) .map(|field| field.value as u32) .unwrap_or(1), max_quantity: fields - .remove(&SlotLogicType::MaxQuantity) + .remove(&LogicSlotType::MaxQuantity) .map(|field| field.value as u32) .unwrap_or(1), damage: fields - .remove(&SlotLogicType::Damage) + .remove(&LogicSlotType::Damage) .map(|field| field.value) .unwrap_or(0.0), sorting_class: fields - .remove(&SlotLogicType::SortingClass) - .map(|field| (field.value as u32).into()) + .remove(&LogicSlotType::SortingClass) + .map(|field| SortingClass::from_repr(field.value as u8)) + .flatten() .unwrap_or(SortingClass::Default), fields, } @@ -74,7 +75,7 @@ impl SlotOccupant { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct SlotOccupantTemplate { pub id: Option, - pub fields: BTreeMap, + pub fields: BTreeMap, } impl SlotOccupant { @@ -109,65 +110,65 @@ impl SlotOccupant { } /// chainable constructor - pub fn with_fields(mut self, fields: BTreeMap) -> Self { + pub fn with_fields(mut self, fields: BTreeMap) -> Self { self.fields.extend(fields); self } /// chainable constructor - pub fn get_fields(&self) -> BTreeMap { + pub fn get_fields(&self) -> BTreeMap { let mut copy = self.fields.clone(); copy.insert( - SlotLogicType::PrefabHash, + LogicSlotType::PrefabHash, LogicField { - field_type: FieldType::Read, + field_type: MemoryAccess::Read, value: self.prefab_hash as f64, }, ); copy.insert( - SlotLogicType::SortingClass, + LogicSlotType::SortingClass, LogicField { - field_type: FieldType::Read, + field_type: MemoryAccess::Read, value: self.sorting_class as u32 as f64, }, ); copy.insert( - SlotLogicType::Quantity, + LogicSlotType::Quantity, LogicField { - field_type: FieldType::Read, + field_type: MemoryAccess::Read, value: self.quantity as f64, }, ); copy.insert( - SlotLogicType::MaxQuantity, + LogicSlotType::MaxQuantity, LogicField { - field_type: FieldType::Read, + field_type: MemoryAccess::Read, value: self.max_quantity as f64, }, ); copy.insert( - SlotLogicType::Damage, + LogicSlotType::Damage, LogicField { - field_type: FieldType::Read, + field_type: MemoryAccess::Read, value: self.damage, }, ); copy } - pub fn set_field(&mut self, typ: SlotLogicType, val: f64, force: bool) -> Result<(), ICError> { - if (typ == SlotLogicType::Quantity) && force { + pub fn set_field(&mut self, typ: LogicSlotType, val: f64, force: bool) -> Result<(), ICError> { + if (typ == LogicSlotType::Quantity) && force { self.quantity = val as u32; Ok(()) - } else if (typ == SlotLogicType::MaxQuantity) && force { + } else if (typ == LogicSlotType::MaxQuantity) && force { self.max_quantity = val as u32; Ok(()) - } else if (typ == SlotLogicType::Damage) && force { + } else if (typ == LogicSlotType::Damage) && force { self.damage = val; Ok(()) } else if let Some(logic) = self.fields.get_mut(&typ) { match logic.field_type { - FieldType::ReadWrite | FieldType::Write => { + MemoryAccess::ReadWrite | MemoryAccess::Write => { logic.value = val; Ok(()) } @@ -184,7 +185,7 @@ impl SlotOccupant { self.fields.insert( typ, LogicField { - field_type: FieldType::ReadWrite, + field_type: MemoryAccess::ReadWrite, value: val, }, ); @@ -194,17 +195,23 @@ impl SlotOccupant { } } - pub fn can_logic_read(&self, field: SlotLogicType) -> bool { + pub fn can_logic_read(&self, field: LogicSlotType) -> bool { if let Some(logic) = self.fields.get(&field) { - matches!(logic.field_type, FieldType::Read | FieldType::ReadWrite) + matches!( + logic.field_type, + MemoryAccess::Read | MemoryAccess::ReadWrite + ) } else { false } } - pub fn can_logic_write(&self, field: SlotLogicType) -> bool { + pub fn can_logic_write(&self, field: LogicSlotType) -> bool { if let Some(logic) = self.fields.get(&field) { - matches!(logic.field_type, FieldType::Write | FieldType::ReadWrite) + matches!( + logic.field_type, + MemoryAccess::Write | MemoryAccess::ReadWrite + ) } else { false } @@ -213,47 +220,47 @@ impl SlotOccupant { #[derive(Debug, Default, Clone, Serialize, Deserialize)] pub struct Slot { - pub typ: SlotType, + pub typ: SlotClass, pub occupant: Option, } #[derive(Debug, Default, Clone, Serialize, Deserialize)] pub struct SlotTemplate { - pub typ: SlotType, + pub typ: SlotClass, pub occupant: Option, } impl Slot { - pub fn new(typ: SlotType) -> Self { + pub fn new(typ: SlotClass) -> Self { Slot { typ, occupant: None, } } - pub fn with_occupant(typ: SlotType, occupant: SlotOccupant) -> Self { + pub fn with_occupant(typ: SlotClass, occupant: SlotOccupant) -> Self { Slot { typ, occupant: Some(occupant), } } - pub fn get_fields(&self) -> BTreeMap { + 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, + LogicSlotType::Occupied, LogicField { - field_type: FieldType::Read, + field_type: MemoryAccess::Read, value: if self.occupant.is_some() { 1.0 } else { 0.0 }, }, ); copy.insert( - SlotLogicType::OccupantHash, + LogicSlotType::OccupantHash, LogicField { - field_type: FieldType::Read, + field_type: MemoryAccess::Read, value: self .occupant .as_ref() @@ -262,9 +269,9 @@ impl Slot { }, ); copy.insert( - SlotLogicType::Quantity, + LogicSlotType::Quantity, LogicField { - field_type: FieldType::Read, + field_type: MemoryAccess::Read, value: self .occupant .as_ref() @@ -273,9 +280,9 @@ impl Slot { }, ); copy.insert( - SlotLogicType::Damage, + LogicSlotType::Damage, LogicField { - field_type: FieldType::Read, + field_type: MemoryAccess::Read, value: self .occupant .as_ref() @@ -284,16 +291,16 @@ impl Slot { }, ); copy.insert( - SlotLogicType::Class, + LogicSlotType::Class, LogicField { - field_type: FieldType::Read, + field_type: MemoryAccess::Read, value: self.typ as u32 as f64, }, ); copy.insert( - SlotLogicType::MaxQuantity, + LogicSlotType::MaxQuantity, LogicField { - field_type: FieldType::Read, + field_type: MemoryAccess::Read, value: self .occupant .as_ref() @@ -302,9 +309,9 @@ impl Slot { }, ); copy.insert( - SlotLogicType::PrefabHash, + LogicSlotType::PrefabHash, LogicField { - field_type: FieldType::Read, + field_type: MemoryAccess::Read, value: self .occupant .as_ref() @@ -313,9 +320,9 @@ impl Slot { }, ); copy.insert( - SlotLogicType::SortingClass, + LogicSlotType::SortingClass, LogicField { - field_type: FieldType::Read, + field_type: MemoryAccess::Read, value: self .occupant .as_ref() @@ -324,9 +331,9 @@ impl Slot { }, ); copy.insert( - SlotLogicType::ReferenceId, + LogicSlotType::ReferenceId, LogicField { - field_type: FieldType::Read, + field_type: MemoryAccess::Read, value: self .occupant .as_ref() @@ -337,34 +344,34 @@ impl Slot { copy } - pub fn get_field(&self, field: SlotLogicType) -> f64 { + pub fn get_field(&self, field: LogicSlotType) -> f64 { let fields = self.get_fields(); fields .get(&field) .map(|field| match field.field_type { - FieldType::Read | FieldType::ReadWrite => field.value, + MemoryAccess::Read | MemoryAccess::ReadWrite => field.value, _ => 0.0, }) .unwrap_or(0.0) } - pub fn can_logic_read(&self, field: SlotLogicType) -> bool { + pub fn can_logic_read(&self, field: LogicSlotType) -> bool { match field { - SlotLogicType::Pressure | SlotLogicType::Temperature | SlotLogicType::Volume => { + LogicSlotType::Pressure | LogicSlotType::Temperature | LogicSlotType::Volume => { matches!( self.typ, - SlotType::GasCanister | SlotType::LiquidCanister | SlotType::LiquidBottle + SlotClass::GasCanister | SlotClass::LiquidCanister | SlotClass::LiquidBottle ) } - SlotLogicType::Charge | SlotLogicType::ChargeRatio => { - matches!(self.typ, SlotType::Battery) + LogicSlotType::Charge | LogicSlotType::ChargeRatio => { + matches!(self.typ, SlotClass::Battery) } - SlotLogicType::Open => matches!( + LogicSlotType::Open => matches!( self.typ, - SlotType::Helmet | SlotType::Tool | SlotType::Appliance + SlotClass::Helmet | SlotClass::Tool | SlotClass::Appliance ), - SlotLogicType::Lock => matches!(self.typ, SlotType::Helmet), - SlotLogicType::FilterType => matches!(self.typ, SlotType::GasFilter), + LogicSlotType::Lock => matches!(self.typ, SlotClass::Helmet), + LogicSlotType::FilterType => matches!(self.typ, SlotClass::GasFilter), _ => { if let Some(occupant) = self.occupant.as_ref() { occupant.can_logic_read(field) @@ -375,20 +382,20 @@ impl Slot { } } - pub fn can_logic_write(&self, field: SlotLogicType) -> bool { + pub fn can_logic_write(&self, field: LogicSlotType) -> bool { match field { - SlotLogicType::Open => matches!( + LogicSlotType::Open => matches!( self.typ, - SlotType::Helmet - | SlotType::GasCanister - | SlotType::LiquidCanister - | SlotType::LiquidBottle + SlotClass::Helmet + | SlotClass::GasCanister + | SlotClass::LiquidCanister + | SlotClass::LiquidBottle ), - SlotLogicType::On => matches!( + LogicSlotType::On => matches!( self.typ, - SlotType::Helmet | SlotType::Tool | SlotType::Appliance + SlotClass::Helmet | SlotClass::Tool | SlotClass::Appliance ), - SlotLogicType::Lock => matches!(self.typ, SlotType::Helmet), + LogicSlotType::Lock => matches!(self.typ, SlotClass::Helmet), _ => { if let Some(occupant) = self.occupant.as_ref() { occupant.can_logic_write(field) @@ -399,15 +406,15 @@ impl Slot { } } - pub fn set_field(&mut self, typ: SlotLogicType, val: f64, force: bool) -> Result<(), ICError> { + pub fn set_field(&mut self, typ: LogicSlotType, val: f64, force: bool) -> Result<(), ICError> { if matches!( typ, - SlotLogicType::Occupied - | SlotLogicType::OccupantHash - | SlotLogicType::Class - | SlotLogicType::PrefabHash - | SlotLogicType::SortingClass - | SlotLogicType::ReferenceId + LogicSlotType::Occupied + | LogicSlotType::OccupantHash + | LogicSlotType::Class + | LogicSlotType::PrefabHash + | LogicSlotType::SortingClass + | LogicSlotType::ReferenceId ) { return Err(ICError::ReadOnlyField(typ.to_string())); } @@ -419,114 +426,6 @@ impl Slot { } } -#[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, @@ -591,28 +490,28 @@ impl Device { ( LogicType::Setting, LogicField { - field_type: FieldType::ReadWrite, + field_type: MemoryAccess::ReadWrite, value: 0.0, }, ), ( LogicType::RequiredPower, LogicField { - field_type: FieldType::Read, + field_type: MemoryAccess::Read, value: 0.0, }, ), ( LogicType::PrefabHash, LogicField { - field_type: FieldType::Read, + field_type: MemoryAccess::Read, value: -128473777.0, }, ), ]); let occupant = SlotOccupant::new(ic, -744098481); device.slots.push(Slot::with_occupant( - SlotType::ProgrammableChip, + SlotClass::ProgrammableChip, // -744098481 = ItemIntegratedCircuit10 occupant, )); @@ -627,14 +526,14 @@ impl Device { copy.insert( LogicType::LineNumber, LogicField { - field_type: FieldType::ReadWrite, + field_type: MemoryAccess::ReadWrite, value: ic.ip() as f64, }, ); copy.insert( LogicType::Error, LogicField { - field_type: FieldType::Read, + field_type: MemoryAccess::Read, value: match *ic.state.borrow() { ICState::Error(_) => 1.0, _ => 0.0, @@ -646,7 +545,7 @@ impl Device { copy.insert( LogicType::Power, LogicField { - field_type: FieldType::Read, + field_type: MemoryAccess::Read, value: if self.has_power_connection() { 1.0 } else { @@ -658,7 +557,7 @@ impl Device { copy.insert( LogicType::ReferenceId, LogicField { - field_type: FieldType::Read, + field_type: MemoryAccess::Read, value: self.id as f64, }, ); @@ -692,7 +591,10 @@ impl Device { LogicType::Power if self.has_power_state() => true, _ => { if let Some(logic) = self.fields.get(&field) { - matches!(logic.field_type, FieldType::Read | FieldType::ReadWrite) + matches!( + logic.field_type, + MemoryAccess::Read | MemoryAccess::ReadWrite + ) } else { false } @@ -706,7 +608,10 @@ impl Device { LogicType::LineNumber if self.ic.is_some() => true, _ => { if let Some(logic) = self.fields.get(&field) { - matches!(logic.field_type, FieldType::Write | FieldType::ReadWrite) + matches!( + logic.field_type, + MemoryAccess::Write | MemoryAccess::ReadWrite + ) } else { false } @@ -714,7 +619,7 @@ impl Device { } } - pub fn can_slot_logic_read(&self, field: SlotLogicType, slot: usize) -> bool { + pub fn can_slot_logic_read(&self, field: LogicSlotType, slot: usize) -> bool { if self.slots.is_empty() { return false; } @@ -724,7 +629,7 @@ impl Device { slot.can_logic_read(field) } - pub fn can_slot_logic_write(&self, field: SlotLogicType, slot: usize) -> bool { + pub fn can_slot_logic_write(&self, field: LogicSlotType, slot: usize) -> bool { if self.slots.is_empty() { return false; } @@ -743,7 +648,8 @@ impl Device { .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 { + if field.field_type == MemoryAccess::Read || field.field_type == MemoryAccess::ReadWrite + { Ok(field.value) } else { Err(ICError::WriteOnlyField(typ.to_string())) @@ -774,8 +680,8 @@ impl Device { 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 + if field.field_type == MemoryAccess::Write + || field.field_type == MemoryAccess::ReadWrite || force { field.value = val; @@ -787,7 +693,7 @@ impl Device { self.fields.insert( typ, LogicField { - field_type: FieldType::ReadWrite, + field_type: MemoryAccess::ReadWrite, value: val, }, ); @@ -797,15 +703,15 @@ impl Device { } } - pub fn get_slot_field(&self, index: f64, typ: SlotLogicType, vm: &VM) -> Result { + pub fn get_slot_field(&self, index: f64, typ: LogicSlotType, vm: &VM) -> Result { let slot = self .slots .get(index as usize) .ok_or(ICError::SlotIndexOutOfRange(index))?; - if slot.typ == SlotType::ProgrammableChip + if slot.typ == SlotClass::ProgrammableChip && slot.occupant.is_some() && self.ic.is_some() - && typ == SlotLogicType::LineNumber + && typ == LogicSlotType::LineNumber { let ic = vm .ics @@ -822,22 +728,22 @@ impl Device { &self, index: f64, vm: &VM, - ) -> Result, ICError> { + ) -> 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() { + if slot.typ == SlotClass::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, + LogicSlotType::LineNumber, LogicField { - field_type: FieldType::ReadWrite, + field_type: MemoryAccess::ReadWrite, value: ic.ip() as f64, }, ); @@ -848,7 +754,7 @@ impl Device { pub fn set_slot_field( &mut self, index: f64, - typ: SlotLogicType, + typ: LogicSlotType, val: f64, _vm: &VM, force: bool, @@ -945,7 +851,7 @@ impl Device { let ic = slots .iter() .find_map(|slot| { - if slot.typ == SlotType::ProgrammableChip && slot.occupant.is_some() { + if slot.typ == SlotClass::ProgrammableChip && slot.occupant.is_some() { Some(slot.occupant.clone()).flatten() } else { None diff --git a/ic10emu/src/errors.rs b/ic10emu/src/errors.rs index 53db639..4cd5573 100644 --- a/ic10emu/src/errors.rs +++ b/ic10emu/src/errors.rs @@ -157,7 +157,7 @@ pub enum ICError { #[error("unknown logic type '{0}'")] UnknownLogicType(f64), #[error("unknown slot logic type '{0}'")] - UnknownSlotLogicType(f64), + UnknownLogicSlotType(f64), #[error("unknown batch mode '{0}'")] UnknownBatchMode(f64), #[error("unknown reagent mode '{0}'")] diff --git a/ic10emu/src/grammar.rs b/ic10emu/src/grammar.rs index 49e7789..0a72b65 100644 --- a/ic10emu/src/grammar.rs +++ b/ic10emu/src/grammar.rs @@ -35,7 +35,7 @@ impl TryFrom for LogicSlotType { if let Some(slt) = LogicSlotType::iter().find(|lt| *lt as u8 as f64 == value) { Ok(slt) } else { - Err(ICError::UnknownSlotLogicType(value)) + Err(ICError::UnknownLogicSlotType(value)) } } } @@ -1106,7 +1106,7 @@ mod tests { assert_eq!(lt as u16, value.unwrap().parse::().unwrap()); } for slt in LogicSlotType::iter() { - println!("testing SlotLogicType.{slt}"); + println!("testing LogicSlotType.{slt}"); let value = slt.get_str("value"); assert!(value.is_some()); assert!(value.unwrap().parse::().is_ok()); diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index 1e23988..e6f1d32 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -16,11 +16,13 @@ use itertools::Itertools; use time::format_description; use crate::{ - device::SlotType, errors::{ICError, LineError}, grammar, vm::{ - enums::script_enums::{LogicSlotType as SlotLogicType, LogicType}, + enums::{ + basic_enums::Class as SlotClass, + script_enums::{LogicSlotType, LogicType}, + }, instructions::{ enums::InstructionOp, operands::{DeviceSpec, Operand, RegisterSpec}, @@ -400,16 +402,16 @@ impl IC { } } - pub fn propgate_line_number(&self, vm: &VM) { + pub fn propagate_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) + .find(|slot| slot.typ == SlotClass::ProgrammableChip) { - let _ = slot.set_field(SlotLogicType::LineNumber, self.ip.get() as f64, true); + let _ = slot.set_field(LogicSlotType::LineNumber, self.ip.get() as f64, true); } } } @@ -2327,7 +2329,7 @@ impl IC { return Err(DeviceNotSet); }; let slt = slt.as_slot_logic_type(this, inst, 4)?; - if slt == SlotLogicType::LineNumber && this.device == device_id { + if slt == LogicSlotType::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)?; @@ -2449,7 +2451,7 @@ impl IC { 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); + self.propagate_line_number(vm); } result } diff --git a/ic10emu/src/network.rs b/ic10emu/src/network.rs index fdb071b..831fa8c 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -25,7 +25,19 @@ pub enum Connection { } #[derive( - Debug, Default, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, EnumIter, AsRefStr, + Debug, + Default, + Clone, + Copy, + PartialEq, + PartialOrd, + Eq, + Ord, + Hash, + Serialize, + Deserialize, + EnumIter, + AsRefStr, )] pub enum ConnectionType { Pipe, @@ -43,7 +55,19 @@ pub enum ConnectionType { } #[derive( - Debug, Default, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, EnumIter, AsRefStr, + Debug, + Default, + Clone, + Copy, + PartialEq, + PartialOrd, + Eq, + Ord, + Hash, + Serialize, + Deserialize, + EnumIter, + AsRefStr, )] pub enum ConnectionRole { Input, diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index e86e49e..302b2ad 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -7,9 +7,7 @@ use crate::{ errors::{ICError, VMError}, interpreter::{self, FrozenIC}, network::{CableConnectionType, Connection, FrozenNetwork, Network}, - vm::enums::script_enums::{ - LogicBatchMethod as BatchMode, LogicSlotType as SlotLogicType, LogicType, - }, + vm::enums::script_enums::{LogicBatchMethod as BatchMode, LogicSlotType, LogicType}, }; use std::{ cell::RefCell, @@ -620,7 +618,7 @@ impl VM { source: u32, prefab: f64, index: f64, - typ: SlotLogicType, + typ: LogicSlotType, val: f64, write_readonly: bool, ) -> Result<(), ICError> { @@ -690,7 +688,7 @@ impl VM { prefab: f64, name: f64, index: f64, - typ: SlotLogicType, + typ: LogicSlotType, mode: BatchMode, ) -> Result { let samples = self @@ -706,7 +704,7 @@ impl VM { source: u32, prefab: f64, index: f64, - typ: SlotLogicType, + typ: LogicSlotType, mode: BatchMode, ) -> Result { let samples = self diff --git a/ic10emu/src/vm/enums/basic_enums.rs b/ic10emu/src/vm/enums/basic_enums.rs index 6e1d1c8..610c7d8 100644 --- a/ic10emu/src/vm/enums/basic_enums.rs +++ b/ic10emu/src/vm/enums/basic_enums.rs @@ -39,6 +39,7 @@ pub enum AirConditioningMode { } #[derive( Debug, + Default, Display, Clone, Copy, @@ -58,14 +59,15 @@ pub enum AirConditioningMode { #[strum(use_phf)] #[repr(u8)] pub enum AirControlMode { - #[strum(serialize = "Draught", props(docs = r#""#, value = "4"))] - Draught = 4u8, #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + #[default] None = 0u8, #[strum(serialize = "Offline", props(docs = r#""#, value = "1"))] Offline = 1u8, #[strum(serialize = "Pressure", props(docs = r#""#, value = "2"))] Pressure = 2u8, + #[strum(serialize = "Draught", props(docs = r#""#, value = "4"))] + Draught = 4u8, } #[derive( Debug, @@ -88,33 +90,34 @@ pub enum AirControlMode { #[strum(use_phf)] #[repr(u8)] pub enum ColorType { - #[strum(serialize = "Black", props(docs = r#""#, value = "7"))] - Black = 7u8, #[strum(serialize = "Blue", props(docs = r#""#, value = "0"))] Blue = 0u8, - #[strum(serialize = "Brown", props(docs = r#""#, value = "8"))] - Brown = 8u8, #[strum(serialize = "Gray", props(docs = r#""#, value = "1"))] Gray = 1u8, #[strum(serialize = "Green", props(docs = r#""#, value = "2"))] Green = 2u8, - #[strum(serialize = "Khaki", props(docs = r#""#, value = "9"))] - Khaki = 9u8, #[strum(serialize = "Orange", props(docs = r#""#, value = "3"))] Orange = 3u8, + #[strum(serialize = "Red", props(docs = r#""#, value = "4"))] + Red = 4u8, + #[strum(serialize = "Yellow", props(docs = r#""#, value = "5"))] + Yellow = 5u8, + #[strum(serialize = "White", props(docs = r#""#, value = "6"))] + White = 6u8, + #[strum(serialize = "Black", props(docs = r#""#, value = "7"))] + Black = 7u8, + #[strum(serialize = "Brown", props(docs = r#""#, value = "8"))] + Brown = 8u8, + #[strum(serialize = "Khaki", props(docs = r#""#, value = "9"))] + Khaki = 9u8, #[strum(serialize = "Pink", props(docs = r#""#, value = "10"))] Pink = 10u8, #[strum(serialize = "Purple", props(docs = r#""#, value = "11"))] Purple = 11u8, - #[strum(serialize = "Red", props(docs = r#""#, value = "4"))] - Red = 4u8, - #[strum(serialize = "White", props(docs = r#""#, value = "6"))] - White = 6u8, - #[strum(serialize = "Yellow", props(docs = r#""#, value = "5"))] - Yellow = 5u8, } #[derive( Debug, + Default, Display, Clone, Copy, @@ -135,6 +138,7 @@ pub enum ColorType { #[repr(u8)] pub enum DaylightSensorMode { #[strum(serialize = "Default", props(docs = r#""#, value = "0"))] + #[default] Default = 0u8, #[strum(serialize = "Horizontal", props(docs = r#""#, value = "1"))] Horizontal = 1u8, @@ -162,12 +166,12 @@ pub enum DaylightSensorMode { #[strum(use_phf)] #[repr(u8)] pub enum ElevatorMode { - #[strum(serialize = "Downward", props(docs = r#""#, value = "2"))] - Downward = 2u8, #[strum(serialize = "Stationary", props(docs = r#""#, value = "0"))] Stationary = 0u8, #[strum(serialize = "Upward", props(docs = r#""#, value = "1"))] Upward = 1u8, + #[strum(serialize = "Downward", props(docs = r#""#, value = "2"))] + Downward = 2u8, } #[derive( Debug, @@ -194,10 +198,10 @@ pub enum EntityState { Alive = 0u8, #[strum(serialize = "Dead", props(docs = r#""#, value = "1"))] Dead = 1u8, - #[strum(serialize = "Decay", props(docs = r#""#, value = "3"))] - Decay = 3u8, #[strum(serialize = "Unconscious", props(docs = r#""#, value = "2"))] Unconscious = 2u8, + #[strum(serialize = "Decay", props(docs = r#""#, value = "3"))] + Decay = 3u8, } #[derive( Debug, @@ -220,45 +224,46 @@ pub enum EntityState { #[strum(use_phf)] #[repr(u32)] pub enum GasType { - #[strum(serialize = "CarbonDioxide", props(docs = r#""#, value = "4"))] - CarbonDioxide = 4u32, - #[strum(serialize = "Hydrogen", props(docs = r#""#, value = "16384"))] - Hydrogen = 16384u32, - #[strum(serialize = "LiquidCarbonDioxide", props(docs = r#""#, value = "2048"))] - LiquidCarbonDioxide = 2048u32, - #[strum(serialize = "LiquidHydrogen", props(docs = r#""#, value = "32768"))] - LiquidHydrogen = 32768u32, - #[strum(serialize = "LiquidNitrogen", props(docs = r#""#, value = "128"))] - LiquidNitrogen = 128u32, - #[strum(serialize = "LiquidNitrousOxide", props(docs = r#""#, value = "8192"))] - LiquidNitrousOxide = 8192u32, - #[strum(serialize = "LiquidOxygen", props(docs = r#""#, value = "256"))] - LiquidOxygen = 256u32, - #[strum(serialize = "LiquidPollutant", props(docs = r#""#, value = "4096"))] - LiquidPollutant = 4096u32, - #[strum(serialize = "LiquidVolatiles", props(docs = r#""#, value = "512"))] - LiquidVolatiles = 512u32, - #[strum(serialize = "Nitrogen", props(docs = r#""#, value = "2"))] - Nitrogen = 2u32, - #[strum(serialize = "NitrousOxide", props(docs = r#""#, value = "64"))] - NitrousOxide = 64u32, - #[strum(serialize = "Oxygen", props(docs = r#""#, value = "1"))] - Oxygen = 1u32, - #[strum(serialize = "Pollutant", props(docs = r#""#, value = "16"))] - Pollutant = 16u32, - #[strum(serialize = "PollutedWater", props(docs = r#""#, value = "65536"))] - PollutedWater = 65536u32, - #[strum(serialize = "Steam", props(docs = r#""#, value = "1024"))] - Steam = 1024u32, #[strum(serialize = "Undefined", props(docs = r#""#, value = "0"))] Undefined = 0u32, + #[strum(serialize = "Oxygen", props(docs = r#""#, value = "1"))] + Oxygen = 1u32, + #[strum(serialize = "Nitrogen", props(docs = r#""#, value = "2"))] + Nitrogen = 2u32, + #[strum(serialize = "CarbonDioxide", props(docs = r#""#, value = "4"))] + CarbonDioxide = 4u32, #[strum(serialize = "Volatiles", props(docs = r#""#, value = "8"))] Volatiles = 8u32, + #[strum(serialize = "Pollutant", props(docs = r#""#, value = "16"))] + Pollutant = 16u32, #[strum(serialize = "Water", props(docs = r#""#, value = "32"))] Water = 32u32, + #[strum(serialize = "NitrousOxide", props(docs = r#""#, value = "64"))] + NitrousOxide = 64u32, + #[strum(serialize = "LiquidNitrogen", props(docs = r#""#, value = "128"))] + LiquidNitrogen = 128u32, + #[strum(serialize = "LiquidOxygen", props(docs = r#""#, value = "256"))] + LiquidOxygen = 256u32, + #[strum(serialize = "LiquidVolatiles", props(docs = r#""#, value = "512"))] + LiquidVolatiles = 512u32, + #[strum(serialize = "Steam", props(docs = r#""#, value = "1024"))] + Steam = 1024u32, + #[strum(serialize = "LiquidCarbonDioxide", props(docs = r#""#, value = "2048"))] + LiquidCarbonDioxide = 2048u32, + #[strum(serialize = "LiquidPollutant", props(docs = r#""#, value = "4096"))] + LiquidPollutant = 4096u32, + #[strum(serialize = "LiquidNitrousOxide", props(docs = r#""#, value = "8192"))] + LiquidNitrousOxide = 8192u32, + #[strum(serialize = "Hydrogen", props(docs = r#""#, value = "16384"))] + Hydrogen = 16384u32, + #[strum(serialize = "LiquidHydrogen", props(docs = r#""#, value = "32768"))] + LiquidHydrogen = 32768u32, + #[strum(serialize = "PollutedWater", props(docs = r#""#, value = "65536"))] + PollutedWater = 65536u32, } #[derive( Debug, + Default, Display, Clone, Copy, @@ -278,21 +283,23 @@ pub enum GasType { #[strum(use_phf)] #[repr(u8)] pub enum RocketMode { - #[strum(serialize = "Chart", props(docs = r#""#, value = "5"))] - Chart = 5u8, - #[strum(serialize = "Discover", props(docs = r#""#, value = "4"))] - Discover = 4u8, #[strum(serialize = "Invalid", props(docs = r#""#, value = "0"))] Invalid = 0u8, + #[strum(serialize = "None", props(docs = r#""#, value = "1"))] + #[default] + None = 1u8, #[strum(serialize = "Mine", props(docs = r#""#, value = "2"))] Mine = 2u8, - #[strum(serialize = "None", props(docs = r#""#, value = "1"))] - None = 1u8, #[strum(serialize = "Survey", props(docs = r#""#, value = "3"))] Survey = 3u8, + #[strum(serialize = "Discover", props(docs = r#""#, value = "4"))] + Discover = 4u8, + #[strum(serialize = "Chart", props(docs = r#""#, value = "5"))] + Chart = 5u8, } #[derive( Debug, + Default, Display, Clone, Copy, @@ -312,6 +319,78 @@ pub enum RocketMode { #[strum(use_phf)] #[repr(u8)] pub enum LogicSlotType { + #[strum(serialize = "None", props(docs = r#"No description"#, value = "0"))] + #[default] + None = 0u8, + #[strum( + serialize = "Occupied", + props( + docs = r#"returns 0 when slot is not occupied, 1 when it is"#, + value = "1" + ) + )] + Occupied = 1u8, + #[strum( + serialize = "OccupantHash", + props( + docs = r#"returns the has of the current occupant, the unique identifier of the thing"#, + value = "2" + ) + )] + OccupantHash = 2u8, + #[strum( + serialize = "Quantity", + props( + docs = r#"returns the current quantity, such as stack size, of the item in the slot"#, + value = "3" + ) + )] + Quantity = 3u8, + #[strum( + serialize = "Damage", + props( + docs = r#"returns the damage state of the item in the slot"#, + value = "4" + ) + )] + Damage = 4u8, + #[strum( + serialize = "Efficiency", + props( + docs = r#"returns the growth efficiency of the plant in the slot"#, + value = "5" + ) + )] + Efficiency = 5u8, + #[strum( + serialize = "Health", + props(docs = r#"returns the health of the plant in the slot"#, value = "6") + )] + Health = 6u8, + #[strum( + serialize = "Growth", + props( + docs = r#"returns the current growth state of the plant in the slot"#, + value = "7" + ) + )] + Growth = 7u8, + #[strum( + serialize = "Pressure", + props( + docs = r#"returns pressure of the slot occupants internal atmosphere"#, + value = "8" + ) + )] + Pressure = 8u8, + #[strum( + serialize = "Temperature", + props( + docs = r#"returns temperature of the slot occupants internal atmosphere"#, + value = "9" + ) + )] + Temperature = 9u8, #[strum( serialize = "Charge", props( @@ -337,112 +416,13 @@ pub enum LogicSlotType { )] Class = 12u8, #[strum( - serialize = "Damage", + serialize = "PressureWaste", props( - docs = r#"returns the damage state of the item in the slot"#, - value = "4" + docs = r#"returns pressure in the waste tank of the jetpack in this slot"#, + value = "13" ) )] - Damage = 4u8, - #[strum( - serialize = "Efficiency", - props( - docs = r#"returns the growth efficiency of the plant in the slot"#, - value = "5" - ) - )] - Efficiency = 5u8, - #[strum( - serialize = "FilterType", - props(docs = r#"No description available"#, value = "25") - )] - FilterType = 25u8, - #[strum( - serialize = "Growth", - props( - docs = r#"returns the current growth state of the plant in the slot"#, - value = "7" - ) - )] - Growth = 7u8, - #[strum( - serialize = "Health", - props(docs = r#"returns the health of the plant in the slot"#, value = "6") - )] - Health = 6u8, - #[strum( - serialize = "LineNumber", - props( - docs = r#"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 = "Lock", - props(docs = r#"No description available"#, value = "23") - )] - Lock = 23u8, - #[strum( - serialize = "Mature", - props( - docs = r#"returns 1 if the plant in this slot is mature, 0 when it isn't"#, - value = "16" - ) - )] - Mature = 16u8, - #[strum( - serialize = "MaxQuantity", - props( - docs = r#"returns the max stack size of the item in the slot"#, - value = "15" - ) - )] - MaxQuantity = 15u8, - #[strum(serialize = "None", props(docs = r#"No description"#, value = "0"))] - None = 0u8, - #[strum( - serialize = "OccupantHash", - props( - docs = r#"returns the has of the current occupant, the unique identifier of the thing"#, - value = "2" - ) - )] - OccupantHash = 2u8, - #[strum( - serialize = "Occupied", - props( - docs = r#"returns 0 when slot is not occupied, 1 when it is"#, - value = "1" - ) - )] - Occupied = 1u8, - #[strum( - serialize = "On", - props(docs = r#"No description available"#, value = "22") - )] - On = 22u8, - #[strum( - serialize = "Open", - props(docs = r#"No description available"#, value = "21") - )] - Open = 21u8, - #[strum( - serialize = "PrefabHash", - props( - docs = r#"returns the hash of the structure in the slot"#, - value = "17" - ) - )] - PrefabHash = 17u8, - #[strum( - serialize = "Pressure", - props( - docs = r#"returns pressure of the slot occupants internal atmosphere"#, - value = "8" - ) - )] - Pressure = 8u8, + PressureWaste = 13u8, #[strum( serialize = "PressureAir", props( @@ -452,26 +432,29 @@ pub enum LogicSlotType { )] PressureAir = 14u8, #[strum( - serialize = "PressureWaste", + serialize = "MaxQuantity", props( - docs = r#"returns pressure in the waste tank of the jetpack in this slot"#, - value = "13" + docs = r#"returns the max stack size of the item in the slot"#, + value = "15" ) )] - PressureWaste = 13u8, + MaxQuantity = 15u8, #[strum( - serialize = "Quantity", + serialize = "Mature", props( - docs = r#"returns the current quantity, such as stack size, of the item in the slot"#, - value = "3" + docs = r#"returns 1 if the plant in this slot is mature, 0 when it isn't"#, + value = "16" ) )] - Quantity = 3u8, + Mature = 16u8, #[strum( - serialize = "ReferenceId", - props(docs = r#"Unique Reference Identifier for this object"#, value = "26") + serialize = "PrefabHash", + props( + docs = r#"returns the hash of the structure in the slot"#, + value = "17" + ) )] - ReferenceId = 26u8, + PrefabHash = 17u8, #[strum( serialize = "Seeding", props( @@ -481,26 +464,52 @@ pub enum LogicSlotType { )] Seeding = 18u8, #[strum( - serialize = "SortingClass", - props(docs = r#"No description available"#, value = "24") - )] - SortingClass = 24u8, - #[strum( - serialize = "Temperature", + serialize = "LineNumber", props( - docs = r#"returns temperature of the slot occupants internal atmosphere"#, - value = "9" + docs = r#"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" ) )] - Temperature = 9u8, + LineNumber = 19u8, #[strum( serialize = "Volume", props(docs = r#"No description available"#, value = "20") )] Volume = 20u8, + #[strum( + serialize = "Open", + props(docs = r#"No description available"#, value = "21") + )] + Open = 21u8, + #[strum( + serialize = "On", + props(docs = r#"No description available"#, value = "22") + )] + On = 22u8, + #[strum( + serialize = "Lock", + props(docs = r#"No description available"#, value = "23") + )] + Lock = 23u8, + #[strum( + serialize = "SortingClass", + props(docs = r#"No description available"#, value = "24") + )] + SortingClass = 24u8, + #[strum( + serialize = "FilterType", + props(docs = r#"No description available"#, value = "25") + )] + FilterType = 25u8, + #[strum( + serialize = "ReferenceId", + props(docs = r#"Unique Reference Identifier for this object"#, value = "26") + )] + ReferenceId = 26u8, } #[derive( Debug, + Default, Display, Clone, Copy, @@ -521,13 +530,57 @@ pub enum LogicSlotType { #[repr(u16)] pub enum LogicType { #[strum( - serialize = "Acceleration", + serialize = "None", + props(deprecated = "true", docs = r#"No description"#, value = "0") + )] + #[default] + None = 0u16, + #[strum( + serialize = "Power", props( - docs = r#"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."#, - value = "216" + docs = r#"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" ) )] - Acceleration = 216u16, + Power = 1u16, + #[strum( + serialize = "Open", + props(docs = r#"1 if device is open, otherwise 0"#, value = "2") + )] + Open = 2u16, + #[strum( + serialize = "Mode", + props( + docs = r#"Integer for mode state, different devices will have different mode states available to them"#, + value = "3" + ) + )] + Mode = 3u16, + #[strum( + serialize = "Error", + props(docs = r#"1 if device is in error state, otherwise 0"#, value = "4") + )] + Error = 4u16, + #[strum( + serialize = "Pressure", + props(docs = r#"The current pressure reading of the device"#, value = "5") + )] + Pressure = 5u16, + #[strum( + serialize = "Temperature", + props(docs = r#"The current temperature reading of the device"#, value = "6") + )] + Temperature = 6u16, + #[strum( + serialize = "PressureExternal", + props(docs = r#"Setting for external pressure safety, in KPa"#, value = "7") + )] + PressureExternal = 7u16, + #[strum( + serialize = "PressureInternal", + props(docs = r#"Setting for internal pressure safety, in KPa"#, value = "8") + )] + PressureInternal = 8u16, #[strum( serialize = "Activate", props( @@ -536,6 +589,431 @@ pub enum LogicType { ) )] Activate = 9u16, + #[strum( + serialize = "Lock", + props( + docs = r#"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", + props(docs = r#"The current charge the device has"#, value = "11") + )] + Charge = 11u16, + #[strum( + serialize = "Setting", + props( + docs = r#"A variable setting that can be read or written, depending on the device"#, + value = "12" + ) + )] + Setting = 12u16, + #[strum( + serialize = "Reagents", + props( + docs = r#"Total number of reagents recorded by the device"#, + value = "13" + ) + )] + Reagents = 13u16, + #[strum( + serialize = "RatioOxygen", + props(docs = r#"The ratio of oxygen in device atmosphere"#, value = "14") + )] + RatioOxygen = 14u16, + #[strum( + serialize = "RatioCarbonDioxide", + props( + docs = r#"The ratio of Carbon Dioxide in device atmosphere"#, + value = "15" + ) + )] + RatioCarbonDioxide = 15u16, + #[strum( + serialize = "RatioNitrogen", + props(docs = r#"The ratio of nitrogen in device atmosphere"#, value = "16") + )] + RatioNitrogen = 16u16, + #[strum( + serialize = "RatioPollutant", + props(docs = r#"The ratio of pollutant in device atmosphere"#, value = "17") + )] + RatioPollutant = 17u16, + #[strum( + serialize = "RatioVolatiles", + props(docs = r#"The ratio of volatiles in device atmosphere"#, value = "18") + )] + RatioVolatiles = 18u16, + #[strum( + serialize = "RatioWater", + props(docs = r#"The ratio of water in device atmosphere"#, value = "19") + )] + RatioWater = 19u16, + #[strum( + serialize = "Horizontal", + props(docs = r#"Horizontal setting of the device"#, value = "20") + )] + Horizontal = 20u16, + #[strum( + serialize = "Vertical", + props(docs = r#"Vertical setting of the device"#, value = "21") + )] + Vertical = 21u16, + #[strum( + serialize = "SolarAngle", + props(docs = r#"Solar angle of the device"#, value = "22") + )] + SolarAngle = 22u16, + #[strum( + serialize = "Maximum", + props(docs = r#"Maximum setting of the device"#, value = "23") + )] + Maximum = 23u16, + #[strum( + serialize = "Ratio", + props( + docs = r#"Context specific value depending on device, 0 to 1 based ratio"#, + value = "24" + ) + )] + Ratio = 24u16, + #[strum( + serialize = "PowerPotential", + props( + docs = r#"How much energy the device or network potentially provides"#, + value = "25" + ) + )] + PowerPotential = 25u16, + #[strum( + serialize = "PowerActual", + props( + docs = r#"How much energy the device or network is actually using"#, + value = "26" + ) + )] + PowerActual = 26u16, + #[strum( + serialize = "Quantity", + props(docs = r#"Total quantity on the device"#, value = "27") + )] + Quantity = 27u16, + #[strum( + serialize = "On", + props( + docs = r#"The current state of the device, 0 for off, 1 for on"#, + value = "28" + ) + )] + On = 28u16, + #[strum( + serialize = "ImportQuantity", + props( + deprecated = "true", + docs = r#"Total quantity of items imported by the device"#, + value = "29" + ) + )] + ImportQuantity = 29u16, + #[strum( + serialize = "ImportSlotOccupant", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "30") + )] + ImportSlotOccupant = 30u16, + #[strum( + serialize = "ExportQuantity", + props( + deprecated = "true", + docs = r#"Total quantity of items exported by the device"#, + value = "31" + ) + )] + ExportQuantity = 31u16, + #[strum( + serialize = "ExportSlotOccupant", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "32") + )] + ExportSlotOccupant = 32u16, + #[strum( + serialize = "RequiredPower", + props( + docs = r#"Idle operating power quantity, does not necessarily include extra demand power"#, + value = "33" + ) + )] + RequiredPower = 33u16, + #[strum( + serialize = "HorizontalRatio", + props(docs = r#"Radio of horizontal setting for device"#, value = "34") + )] + HorizontalRatio = 34u16, + #[strum( + serialize = "VerticalRatio", + props(docs = r#"Radio of vertical setting for device"#, value = "35") + )] + VerticalRatio = 35u16, + #[strum( + serialize = "PowerRequired", + props( + docs = r#"Power requested from the device and/or network"#, + value = "36" + ) + )] + PowerRequired = 36u16, + #[strum( + serialize = "Idle", + props( + docs = r#"Returns 1 if the device is currently idle, otherwise 0"#, + value = "37" + ) + )] + Idle = 37u16, + #[strum( + serialize = "Color", + props( + docs = r#" + 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. + +0: Blue +1: Grey +2: Green +3: Orange +4: Red +5: Yellow +6: White +7: Black +8: Brown +9: Khaki +10: Pink +11: Purple + + 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. + "#, + value = "38" + ) + )] + Color = 38u16, + #[strum( + serialize = "ElevatorSpeed", + props(docs = r#"Current speed of the elevator"#, value = "39") + )] + ElevatorSpeed = 39u16, + #[strum( + serialize = "ElevatorLevel", + props(docs = r#"Level the elevator is currently at"#, value = "40") + )] + ElevatorLevel = 40u16, + #[strum( + serialize = "RecipeHash", + props( + docs = r#"Current hash of the recipe the device is set to produce"#, + value = "41" + ) + )] + RecipeHash = 41u16, + #[strum( + serialize = "ExportSlotHash", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "42") + )] + ExportSlotHash = 42u16, + #[strum( + serialize = "ImportSlotHash", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "43") + )] + ImportSlotHash = 43u16, + #[strum( + serialize = "PlantHealth1", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "44") + )] + PlantHealth1 = 44u16, + #[strum( + serialize = "PlantHealth2", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "45") + )] + PlantHealth2 = 45u16, + #[strum( + serialize = "PlantHealth3", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "46") + )] + PlantHealth3 = 46u16, + #[strum( + serialize = "PlantHealth4", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "47") + )] + PlantHealth4 = 47u16, + #[strum( + serialize = "PlantGrowth1", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "48") + )] + PlantGrowth1 = 48u16, + #[strum( + serialize = "PlantGrowth2", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "49") + )] + PlantGrowth2 = 49u16, + #[strum( + serialize = "PlantGrowth3", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "50") + )] + PlantGrowth3 = 50u16, + #[strum( + serialize = "PlantGrowth4", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "51") + )] + PlantGrowth4 = 51u16, + #[strum( + serialize = "PlantEfficiency1", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "52") + )] + PlantEfficiency1 = 52u16, + #[strum( + serialize = "PlantEfficiency2", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "53") + )] + PlantEfficiency2 = 53u16, + #[strum( + serialize = "PlantEfficiency3", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "54") + )] + PlantEfficiency3 = 54u16, + #[strum( + serialize = "PlantEfficiency4", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "55") + )] + PlantEfficiency4 = 55u16, + #[strum( + serialize = "PlantHash1", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "56") + )] + PlantHash1 = 56u16, + #[strum( + serialize = "PlantHash2", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "57") + )] + PlantHash2 = 57u16, + #[strum( + serialize = "PlantHash3", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "58") + )] + PlantHash3 = 58u16, + #[strum( + serialize = "PlantHash4", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "59") + )] + PlantHash4 = 59u16, + #[strum( + serialize = "RequestHash", + props( + docs = r#"When set to the unique identifier, requests an item of the provided type from the device"#, + value = "60" + ) + )] + RequestHash = 60u16, + #[strum( + serialize = "CompletionRatio", + props( + docs = r#"How complete the current production is for this device, between 0 and 1"#, + value = "61" + ) + )] + CompletionRatio = 61u16, + #[strum( + serialize = "ClearMemory", + props( + docs = r#"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", + props( + docs = r#"How many items exported since last ClearMemory"#, + value = "63" + ) + )] + ExportCount = 63u16, + #[strum( + serialize = "ImportCount", + props( + docs = r#"How many items imported since last ClearMemory"#, + value = "64" + ) + )] + ImportCount = 64u16, + #[strum( + serialize = "PowerGeneration", + props(docs = r#"Returns how much power is being generated"#, value = "65") + )] + PowerGeneration = 65u16, + #[strum( + serialize = "TotalMoles", + props(docs = r#"Returns the total moles of the device"#, value = "66") + )] + TotalMoles = 66u16, + #[strum( + serialize = "Volume", + props(docs = r#"Returns the device atmosphere volume"#, value = "67") + )] + Volume = 67u16, + #[strum( + serialize = "Plant", + props( + docs = r#"Performs the planting action for any plant based machinery"#, + value = "68" + ) + )] + Plant = 68u16, + #[strum( + serialize = "Harvest", + props( + docs = r#"Performs the harvesting action for any plant based machinery"#, + value = "69" + ) + )] + Harvest = 69u16, + #[strum( + serialize = "Output", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"#, + value = "72" + ) + )] + TemperatureSetting = 72u16, + #[strum( + serialize = "TemperatureExternal", + props( + docs = r#"The temperature of the outside of the device, usually the world atmosphere surrounding it"#, + value = "73" + ) + )] + TemperatureExternal = 73u16, + #[strum( + serialize = "Filtration", + props( + docs = r#"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", props( @@ -545,71 +1023,679 @@ pub enum LogicType { )] AirRelease = 75u16, #[strum( - serialize = "AlignmentError", + serialize = "PositionX", props( - docs = r#"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" + docs = r#"The current position in X dimension in world coordinates"#, + value = "76" ) )] - AlignmentError = 243u16, + PositionX = 76u16, #[strum( - serialize = "Apex", + serialize = "PositionY", props( - docs = r#"The lowest altitude that the rocket will reach before it starts travelling upwards again."#, - value = "238" + docs = r#"The current position in Y dimension in world coordinates"#, + value = "77" ) )] - Apex = 238u16, + PositionY = 77u16, #[strum( - serialize = "AutoLand", + serialize = "PositionZ", props( - docs = r#"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."#, - value = "226" + docs = r#"The current position in Z dimension in world coordinates"#, + value = "78" ) )] - AutoLand = 226u16, + PositionZ = 78u16, #[strum( - serialize = "AutoShutOff", - props( - docs = r#"Turns off all devices in the rocket upon reaching destination"#, - value = "218" - ) + serialize = "VelocityMagnitude", + props(docs = r#"The current magnitude of the velocity vector"#, value = "79") )] - AutoShutOff = 218u16, + VelocityMagnitude = 79u16, #[strum( - serialize = "BestContactFilter", + serialize = "VelocityRelativeX", props( - docs = r#"Filters the satellite's auto selection of targets to a single reference ID."#, - value = "267" + docs = r#"The current velocity X relative to the forward vector of this"#, + value = "80" ) )] - BestContactFilter = 267u16, + VelocityRelativeX = 80u16, + #[strum( + serialize = "VelocityRelativeY", + props( + docs = r#"The current velocity Y relative to the forward vector of this"#, + value = "81" + ) + )] + VelocityRelativeY = 81u16, + #[strum( + serialize = "VelocityRelativeZ", + props( + docs = r#"The current velocity Z relative to the forward vector of this"#, + value = "82" + ) + )] + VelocityRelativeZ = 82u16, + #[strum( + serialize = "RatioNitrousOxide", + props( + docs = r#"The ratio of Nitrous Oxide in device atmosphere"#, + value = "83" + ) + )] + RatioNitrousOxide = 83u16, + #[strum( + serialize = "PrefabHash", + props(docs = r#"The hash of the structure"#, value = "84") + )] + PrefabHash = 84u16, + #[strum( + serialize = "ForceWrite", + props(docs = r#"Forces Logic Writer devices to rewrite value"#, value = "85") + )] + ForceWrite = 85u16, + #[strum( + serialize = "SignalStrength", + props( + docs = r#"Returns the degree offset of the strongest contact"#, + value = "86" + ) + )] + SignalStrength = 86u16, + #[strum( + serialize = "SignalID", + props( + docs = r#"Returns the contact ID of the strongest signal from this Satellite"#, + value = "87" + ) + )] + SignalId = 87u16, + #[strum( + serialize = "TargetX", + props( + docs = r#"The target position in X dimension in world coordinates"#, + value = "88" + ) + )] + TargetX = 88u16, + #[strum( + serialize = "TargetY", + props( + docs = r#"The target position in Y dimension in world coordinates"#, + value = "89" + ) + )] + TargetY = 89u16, + #[strum( + serialize = "TargetZ", + props( + docs = r#"The target position in Z dimension in world coordinates"#, + value = "90" + ) + )] + TargetZ = 90u16, + #[strum( + serialize = "SettingInput", + props(docs = r#""#, value = "91") + )] + SettingInput = 91u16, + #[strum( + serialize = "SettingOutput", + props(docs = r#""#, value = "92") + )] + SettingOutput = 92u16, + #[strum( + serialize = "CurrentResearchPodType", + props(docs = r#""#, value = "93") + )] + CurrentResearchPodType = 93u16, + #[strum( + serialize = "ManualResearchRequiredPod", + props( + docs = r#"Sets the pod type to search for a certain pod when breaking down a pods."#, + value = "94" + ) + )] + ManualResearchRequiredPod = 94u16, + #[strum( + serialize = "MineablesInVicinity", + props( + docs = r#"Returns the amount of potential mineables within an extended area around AIMEe."#, + value = "95" + ) + )] + MineablesInVicinity = 95u16, + #[strum( + serialize = "MineablesInQueue", + props( + docs = r#"Returns the amount of mineables AIMEe has queued up to mine."#, + value = "96" + ) + )] + MineablesInQueue = 96u16, + #[strum( + serialize = "NextWeatherEventTime", + props( + docs = r#"Returns in seconds when the next weather event is inbound."#, + value = "97" + ) + )] + NextWeatherEventTime = 97u16, + #[strum( + serialize = "Combustion", + props( + docs = r#"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."#, + value = "98" + ) + )] + Combustion = 98u16, + #[strum( + serialize = "Fuel", + props( + docs = r#"Gets the cost of fuel to return the rocket to your current world."#, + value = "99" + ) + )] + Fuel = 99u16, + #[strum( + serialize = "ReturnFuelCost", + props( + docs = r#"Gets the fuel remaining in your rocket's fuel tank."#, + value = "100" + ) + )] + ReturnFuelCost = 100u16, + #[strum( + serialize = "CollectableGoods", + props( + docs = r#"Gets the cost of fuel to return the rocket to your current world."#, + value = "101" + ) + )] + CollectableGoods = 101u16, + #[strum(serialize = "Time", props(docs = r#"Time"#, value = "102"))] + Time = 102u16, #[strum(serialize = "Bpm", props(docs = r#"Bpm"#, value = "103"))] Bpm = 103u16, #[strum( - serialize = "BurnTimeRemaining", + serialize = "EnvironmentEfficiency", props( - docs = r#"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."#, - value = "225" + docs = r#"The Environment Efficiency reported by the machine, as a float between 0 and 1"#, + value = "104" ) )] - BurnTimeRemaining = 225u16, + EnvironmentEfficiency = 104u16, #[strum( - serialize = "CelestialHash", + serialize = "WorkingGasEfficiency", props( - docs = r#"The current hash of the targeted celestial object."#, - value = "242" + docs = r#"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"#, + value = "105" ) )] - CelestialHash = 242u16, + WorkingGasEfficiency = 105u16, #[strum( - serialize = "CelestialParentHash", + serialize = "PressureInput", props( - docs = r#"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."#, - value = "250" + docs = r#"The current pressure reading of the device's Input Network"#, + value = "106" ) )] - CelestialParentHash = 250u16, + PressureInput = 106u16, + #[strum( + serialize = "TemperatureInput", + props( + docs = r#"The current temperature reading of the device's Input Network"#, + value = "107" + ) + )] + TemperatureInput = 107u16, + #[strum( + serialize = "RatioOxygenInput", + props( + docs = r#"The ratio of oxygen in device's input network"#, + value = "108" + ) + )] + RatioOxygenInput = 108u16, + #[strum( + serialize = "RatioCarbonDioxideInput", + props( + docs = r#"The ratio of Carbon Dioxide in device's input network"#, + value = "109" + ) + )] + RatioCarbonDioxideInput = 109u16, + #[strum( + serialize = "RatioNitrogenInput", + props( + docs = r#"The ratio of nitrogen in device's input network"#, + value = "110" + ) + )] + RatioNitrogenInput = 110u16, + #[strum( + serialize = "RatioPollutantInput", + props( + docs = r#"The ratio of pollutant in device's input network"#, + value = "111" + ) + )] + RatioPollutantInput = 111u16, + #[strum( + serialize = "RatioVolatilesInput", + props( + docs = r#"The ratio of volatiles in device's input network"#, + value = "112" + ) + )] + RatioVolatilesInput = 112u16, + #[strum( + serialize = "RatioWaterInput", + props( + docs = r#"The ratio of water in device's input network"#, + value = "113" + ) + )] + RatioWaterInput = 113u16, + #[strum( + serialize = "RatioNitrousOxideInput", + props( + docs = r#"The ratio of Nitrous Oxide in device's input network"#, + value = "114" + ) + )] + RatioNitrousOxideInput = 114u16, + #[strum( + serialize = "TotalMolesInput", + props( + docs = r#"Returns the total moles of the device's Input Network"#, + value = "115" + ) + )] + TotalMolesInput = 115u16, + #[strum( + serialize = "PressureInput2", + props( + docs = r#"The current pressure reading of the device's Input2 Network"#, + value = "116" + ) + )] + PressureInput2 = 116u16, + #[strum( + serialize = "TemperatureInput2", + props( + docs = r#"The current temperature reading of the device's Input2 Network"#, + value = "117" + ) + )] + TemperatureInput2 = 117u16, + #[strum( + serialize = "RatioOxygenInput2", + props( + docs = r#"The ratio of oxygen in device's Input2 network"#, + value = "118" + ) + )] + RatioOxygenInput2 = 118u16, + #[strum( + serialize = "RatioCarbonDioxideInput2", + props( + docs = r#"The ratio of Carbon Dioxide in device's Input2 network"#, + value = "119" + ) + )] + RatioCarbonDioxideInput2 = 119u16, + #[strum( + serialize = "RatioNitrogenInput2", + props( + docs = r#"The ratio of nitrogen in device's Input2 network"#, + value = "120" + ) + )] + RatioNitrogenInput2 = 120u16, + #[strum( + serialize = "RatioPollutantInput2", + props( + docs = r#"The ratio of pollutant in device's Input2 network"#, + value = "121" + ) + )] + RatioPollutantInput2 = 121u16, + #[strum( + serialize = "RatioVolatilesInput2", + props( + docs = r#"The ratio of volatiles in device's Input2 network"#, + value = "122" + ) + )] + RatioVolatilesInput2 = 122u16, + #[strum( + serialize = "RatioWaterInput2", + props( + docs = r#"The ratio of water in device's Input2 network"#, + value = "123" + ) + )] + RatioWaterInput2 = 123u16, + #[strum( + serialize = "RatioNitrousOxideInput2", + props( + docs = r#"The ratio of Nitrous Oxide in device's Input2 network"#, + value = "124" + ) + )] + RatioNitrousOxideInput2 = 124u16, + #[strum( + serialize = "TotalMolesInput2", + props( + docs = r#"Returns the total moles of the device's Input2 Network"#, + value = "125" + ) + )] + TotalMolesInput2 = 125u16, + #[strum( + serialize = "PressureOutput", + props( + docs = r#"The current pressure reading of the device's Output Network"#, + value = "126" + ) + )] + PressureOutput = 126u16, + #[strum( + serialize = "TemperatureOutput", + props( + docs = r#"The current temperature reading of the device's Output Network"#, + value = "127" + ) + )] + TemperatureOutput = 127u16, + #[strum( + serialize = "RatioOxygenOutput", + props( + docs = r#"The ratio of oxygen in device's Output network"#, + value = "128" + ) + )] + RatioOxygenOutput = 128u16, + #[strum( + serialize = "RatioCarbonDioxideOutput", + props( + docs = r#"The ratio of Carbon Dioxide in device's Output network"#, + value = "129" + ) + )] + RatioCarbonDioxideOutput = 129u16, + #[strum( + serialize = "RatioNitrogenOutput", + props( + docs = r#"The ratio of nitrogen in device's Output network"#, + value = "130" + ) + )] + RatioNitrogenOutput = 130u16, + #[strum( + serialize = "RatioPollutantOutput", + props( + docs = r#"The ratio of pollutant in device's Output network"#, + value = "131" + ) + )] + RatioPollutantOutput = 131u16, + #[strum( + serialize = "RatioVolatilesOutput", + props( + docs = r#"The ratio of volatiles in device's Output network"#, + value = "132" + ) + )] + RatioVolatilesOutput = 132u16, + #[strum( + serialize = "RatioWaterOutput", + props( + docs = r#"The ratio of water in device's Output network"#, + value = "133" + ) + )] + RatioWaterOutput = 133u16, + #[strum( + serialize = "RatioNitrousOxideOutput", + props( + docs = r#"The ratio of Nitrous Oxide in device's Output network"#, + value = "134" + ) + )] + RatioNitrousOxideOutput = 134u16, + #[strum( + serialize = "TotalMolesOutput", + props( + docs = r#"Returns the total moles of the device's Output Network"#, + value = "135" + ) + )] + TotalMolesOutput = 135u16, + #[strum( + serialize = "PressureOutput2", + props( + docs = r#"The current pressure reading of the device's Output2 Network"#, + value = "136" + ) + )] + PressureOutput2 = 136u16, + #[strum( + serialize = "TemperatureOutput2", + props( + docs = r#"The current temperature reading of the device's Output2 Network"#, + value = "137" + ) + )] + TemperatureOutput2 = 137u16, + #[strum( + serialize = "RatioOxygenOutput2", + props( + docs = r#"The ratio of oxygen in device's Output2 network"#, + value = "138" + ) + )] + RatioOxygenOutput2 = 138u16, + #[strum( + serialize = "RatioCarbonDioxideOutput2", + props( + docs = r#"The ratio of Carbon Dioxide in device's Output2 network"#, + value = "139" + ) + )] + RatioCarbonDioxideOutput2 = 139u16, + #[strum( + serialize = "RatioNitrogenOutput2", + props( + docs = r#"The ratio of nitrogen in device's Output2 network"#, + value = "140" + ) + )] + RatioNitrogenOutput2 = 140u16, + #[strum( + serialize = "RatioPollutantOutput2", + props( + docs = r#"The ratio of pollutant in device's Output2 network"#, + value = "141" + ) + )] + RatioPollutantOutput2 = 141u16, + #[strum( + serialize = "RatioVolatilesOutput2", + props( + docs = r#"The ratio of volatiles in device's Output2 network"#, + value = "142" + ) + )] + RatioVolatilesOutput2 = 142u16, + #[strum( + serialize = "RatioWaterOutput2", + props( + docs = r#"The ratio of water in device's Output2 network"#, + value = "143" + ) + )] + RatioWaterOutput2 = 143u16, + #[strum( + serialize = "RatioNitrousOxideOutput2", + props( + docs = r#"The ratio of Nitrous Oxide in device's Output2 network"#, + value = "144" + ) + )] + RatioNitrousOxideOutput2 = 144u16, + #[strum( + serialize = "TotalMolesOutput2", + props( + docs = r#"Returns the total moles of the device's Output2 Network"#, + value = "145" + ) + )] + TotalMolesOutput2 = 145u16, + #[strum( + serialize = "CombustionInput", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"How the input pipe's temperature effects the machines efficiency"#, + value = "150" + ) + )] + OperationalTemperatureEfficiency = 150u16, + #[strum( + serialize = "TemperatureDifferentialEfficiency", + props( + docs = r#"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"#, + value = "151" + ) + )] + TemperatureDifferentialEfficiency = 151u16, + #[strum( + serialize = "PressureEfficiency", + props( + docs = r#"How the pressure of the input pipe and waste pipe effect the machines efficiency"#, + value = "152" + ) + )] + PressureEfficiency = 152u16, + #[strum( + serialize = "CombustionLimiter", + props( + docs = r#"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", + props( + docs = r#"Increases the rate at which the machine works (range: 0-100)"#, + value = "154" + ) + )] + Throttle = 154u16, + #[strum( + serialize = "Rpm", + props( + docs = r#"The number of revolutions per minute that the device's spinning mechanism is doing"#, + value = "155" + ) + )] + Rpm = 155u16, + #[strum( + serialize = "Stress", + props( + docs = r#"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"#, + value = "156" + ) + )] + Stress = 156u16, + #[strum( + serialize = "InterrogationProgress", + props( + docs = r#"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"#, + value = "157" + ) + )] + InterrogationProgress = 157u16, + #[strum( + serialize = "TargetPadIndex", + props( + docs = r#"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", + props( + docs = r#"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"#, + value = "160" + ) + )] + SizeX = 160u16, + #[strum( + serialize = "SizeY", + props( + docs = r#"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"#, + value = "161" + ) + )] + SizeY = 161u16, + #[strum( + serialize = "SizeZ", + props( + docs = r#"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"#, + value = "162" + ) + )] + SizeZ = 162u16, + #[strum( + serialize = "MinimumWattsToContact", + props( + docs = r#"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", + props( + docs = r#"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", props( @@ -675,284 +1761,13 @@ pub enum LogicType { )] Channel7 = 172u16, #[strum( - serialize = "Charge", - props(docs = r#"The current charge the device has"#, value = "11") - )] - Charge = 11u16, - #[strum( - serialize = "Chart", + serialize = "LineNumber", props( - docs = r#"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" + docs = r#"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" ) )] - Chart = 256u16, - #[strum( - serialize = "ChartedNavPoints", - props( - docs = r#"The number of charted NavPoints at the rocket's target Space Map Location."#, - value = "259" - ) - )] - ChartedNavPoints = 259u16, - #[strum( - serialize = "ClearMemory", - props( - docs = r#"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 = "CollectableGoods", - props( - docs = r#"Gets the cost of fuel to return the rocket to your current world."#, - value = "101" - ) - )] - CollectableGoods = 101u16, - #[strum( - serialize = "Color", - props( - docs = r#" - 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. - -0: Blue -1: Grey -2: Green -3: Orange -4: Red -5: Yellow -6: White -7: Black -8: Brown -9: Khaki -10: Pink -11: Purple - - 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. - "#, - value = "38" - ) - )] - Color = 38u16, - #[strum( - serialize = "Combustion", - props( - docs = r#"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."#, - value = "98" - ) - )] - Combustion = 98u16, - #[strum( - serialize = "CombustionInput", - props( - docs = r#"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", - props( - docs = r#"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 = "CombustionLimiter", - props( - docs = r#"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 = "CombustionOutput", - props( - docs = r#"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", - props( - docs = r#"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 = "CompletionRatio", - props( - docs = r#"How complete the current production is for this device, between 0 and 1"#, - value = "61" - ) - )] - CompletionRatio = 61u16, - #[strum( - serialize = "ContactTypeId", - props(docs = r#"The type id of the contact."#, value = "198") - )] - ContactTypeId = 198u16, - #[strum( - serialize = "CurrentCode", - props( - docs = r#"The Space Map Address of the rockets current Space Map Location"#, - value = "261" - ) - )] - CurrentCode = 261u16, - #[strum( - serialize = "CurrentResearchPodType", - props(docs = r#""#, value = "93") - )] - CurrentResearchPodType = 93u16, - #[strum( - serialize = "Density", - props( - docs = r#"The density of the rocket's target site's mine-able deposit."#, - value = "262" - ) - )] - Density = 262u16, - #[strum( - serialize = "DestinationCode", - props( - docs = r#"The Space Map Address of the rockets target Space Map Location"#, - value = "215" - ) - )] - DestinationCode = 215u16, - #[strum( - serialize = "Discover", - props( - docs = r#"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 = "DistanceAu", - props( - docs = r#"The current distance to the celestial object, measured in astronomical units."#, - value = "244" - ) - )] - DistanceAu = 244u16, - #[strum( - serialize = "DistanceKm", - props( - docs = r#"The current distance to the celestial object, measured in kilometers."#, - value = "249" - ) - )] - DistanceKm = 249u16, - #[strum( - serialize = "DrillCondition", - props( - docs = r#"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 = "DryMass", - props( - docs = r#"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 = "Eccentricity", - props( - docs = r#"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 = "ElevatorLevel", - props(docs = r#"Level the elevator is currently at"#, value = "40") - )] - ElevatorLevel = 40u16, - #[strum( - serialize = "ElevatorSpeed", - props(docs = r#"Current speed of the elevator"#, value = "39") - )] - ElevatorSpeed = 39u16, - #[strum( - serialize = "EntityState", - props( - docs = r#"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."#, - value = "239" - ) - )] - EntityState = 239u16, - #[strum( - serialize = "EnvironmentEfficiency", - props( - docs = r#"The Environment Efficiency reported by the machine, as a float between 0 and 1"#, - value = "104" - ) - )] - EnvironmentEfficiency = 104u16, - #[strum( - serialize = "Error", - props(docs = r#"1 if device is in error state, otherwise 0"#, value = "4") - )] - Error = 4u16, - #[strum( - serialize = "ExhaustVelocity", - props(docs = r#"The velocity of the exhaust gas in m/s"#, value = "235") - )] - ExhaustVelocity = 235u16, - #[strum( - serialize = "ExportCount", - props( - docs = r#"How many items exported since last ClearMemory"#, - value = "63" - ) - )] - ExportCount = 63u16, - #[strum( - serialize = "ExportQuantity", - props( - deprecated = "true", - docs = r#"Total quantity of items exported by the device"#, - value = "31" - ) - )] - ExportQuantity = 31u16, - #[strum( - serialize = "ExportSlotHash", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "42") - )] - ExportSlotHash = 42u16, - #[strum( - serialize = "ExportSlotOccupant", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "32") - )] - ExportSlotOccupant = 32u16, - #[strum( - serialize = "Filtration", - props( - docs = r#"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"#, - value = "74" - ) - )] - Filtration = 74u16, - #[strum( - serialize = "FlightControlRule", - props( - docs = r#"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, + LineNumber = 173u16, #[strum( serialize = "Flush", props( @@ -962,601 +1777,15 @@ pub enum LogicType { )] Flush = 174u16, #[strum( - serialize = "ForceWrite", - props(docs = r#"Forces Logic Writer devices to rewrite value"#, value = "85") + serialize = "SoundAlert", + props(docs = r#"Plays a sound alert on the devices speaker"#, value = "175") )] - ForceWrite = 85u16, + SoundAlert = 175u16, #[strum( - serialize = "ForwardX", - props( - docs = r#"The direction the entity is facing expressed as a normalized vector"#, - value = "227" - ) + serialize = "SolarIrradiance", + props(docs = r#""#, value = "176") )] - ForwardX = 227u16, - #[strum( - serialize = "ForwardY", - props( - docs = r#"The direction the entity is facing expressed as a normalized vector"#, - value = "228" - ) - )] - ForwardY = 228u16, - #[strum( - serialize = "ForwardZ", - props( - docs = r#"The direction the entity is facing expressed as a normalized vector"#, - value = "229" - ) - )] - ForwardZ = 229u16, - #[strum( - serialize = "Fuel", - props( - docs = r#"Gets the cost of fuel to return the rocket to your current world."#, - value = "99" - ) - )] - Fuel = 99u16, - #[strum( - serialize = "Harvest", - props( - docs = r#"Performs the harvesting action for any plant based machinery"#, - value = "69" - ) - )] - Harvest = 69u16, - #[strum( - serialize = "Horizontal", - props(docs = r#"Horizontal setting of the device"#, value = "20") - )] - Horizontal = 20u16, - #[strum( - serialize = "HorizontalRatio", - props(docs = r#"Radio of horizontal setting for device"#, value = "34") - )] - HorizontalRatio = 34u16, - #[strum( - serialize = "Idle", - props( - docs = r#"Returns 1 if the device is currently idle, otherwise 0"#, - value = "37" - ) - )] - Idle = 37u16, - #[strum( - serialize = "ImportCount", - props( - docs = r#"How many items imported since last ClearMemory"#, - value = "64" - ) - )] - ImportCount = 64u16, - #[strum( - serialize = "ImportQuantity", - props( - deprecated = "true", - docs = r#"Total quantity of items imported by the device"#, - value = "29" - ) - )] - ImportQuantity = 29u16, - #[strum( - serialize = "ImportSlotHash", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "43") - )] - ImportSlotHash = 43u16, - #[strum( - serialize = "ImportSlotOccupant", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "30") - )] - ImportSlotOccupant = 30u16, - #[strum( - serialize = "Inclination", - props( - docs = r#"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 = "Index", - props(docs = r#"The current index for the device."#, value = "241") - )] - Index = 241u16, - #[strum( - serialize = "InterrogationProgress", - props( - docs = r#"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"#, - value = "157" - ) - )] - InterrogationProgress = 157u16, - #[strum( - serialize = "LineNumber", - props( - docs = r#"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 = "Lock", - props( - docs = r#"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 = "ManualResearchRequiredPod", - props( - docs = r#"Sets the pod type to search for a certain pod when breaking down a pods."#, - value = "94" - ) - )] - ManualResearchRequiredPod = 94u16, - #[strum( - serialize = "Mass", - props( - docs = r#"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 = "Maximum", - props(docs = r#"Maximum setting of the device"#, value = "23") - )] - Maximum = 23u16, - #[strum( - serialize = "MineablesInQueue", - props( - docs = r#"Returns the amount of mineables AIMEe has queued up to mine."#, - value = "96" - ) - )] - MineablesInQueue = 96u16, - #[strum( - serialize = "MineablesInVicinity", - props( - docs = r#"Returns the amount of potential mineables within an extended area around AIMEe."#, - value = "95" - ) - )] - MineablesInVicinity = 95u16, - #[strum( - serialize = "MinedQuantity", - props( - docs = r#"The total number of resources that have been mined at the rocket's target Space Map Site."#, - value = "266" - ) - )] - MinedQuantity = 266u16, - #[strum( - serialize = "MinimumWattsToContact", - props( - docs = r#"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"#, - value = "163" - ) - )] - MinimumWattsToContact = 163u16, - #[strum( - serialize = "Mode", - props( - docs = r#"Integer for mode state, different devices will have different mode states available to them"#, - value = "3" - ) - )] - Mode = 3u16, - #[strum( - serialize = "NavPoints", - props( - docs = r#"The number of NavPoints at the rocket's target Space Map Location."#, - value = "258" - ) - )] - NavPoints = 258u16, - #[strum( - serialize = "NextWeatherEventTime", - props( - docs = r#"Returns in seconds when the next weather event is inbound."#, - value = "97" - ) - )] - NextWeatherEventTime = 97u16, - #[strum( - serialize = "None", - props(deprecated = "true", docs = r#"No description"#, value = "0") - )] - None = 0u16, - #[strum( - serialize = "On", - props( - docs = r#"The current state of the device, 0 for off, 1 for on"#, - value = "28" - ) - )] - On = 28u16, - #[strum( - serialize = "Open", - props(docs = r#"1 if device is open, otherwise 0"#, value = "2") - )] - Open = 2u16, - #[strum( - serialize = "OperationalTemperatureEfficiency", - props( - docs = r#"How the input pipe's temperature effects the machines efficiency"#, - value = "150" - ) - )] - OperationalTemperatureEfficiency = 150u16, - #[strum( - serialize = "OrbitPeriod", - props( - docs = r#"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 = "Orientation", - props( - docs = r#"The orientation of the entity in degrees in a plane relative towards the north origin"#, - value = "230" - ) - )] - Orientation = 230u16, - #[strum( - serialize = "Output", - props( - docs = r#"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 = "PassedMoles", - props( - docs = r#"The number of moles that passed through this device on the previous simulation tick"#, - value = "234" - ) - )] - PassedMoles = 234u16, - #[strum( - serialize = "Plant", - props( - docs = r#"Performs the planting action for any plant based machinery"#, - value = "68" - ) - )] - Plant = 68u16, - #[strum( - serialize = "PlantEfficiency1", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "52") - )] - PlantEfficiency1 = 52u16, - #[strum( - serialize = "PlantEfficiency2", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "53") - )] - PlantEfficiency2 = 53u16, - #[strum( - serialize = "PlantEfficiency3", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "54") - )] - PlantEfficiency3 = 54u16, - #[strum( - serialize = "PlantEfficiency4", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "55") - )] - PlantEfficiency4 = 55u16, - #[strum( - serialize = "PlantGrowth1", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "48") - )] - PlantGrowth1 = 48u16, - #[strum( - serialize = "PlantGrowth2", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "49") - )] - PlantGrowth2 = 49u16, - #[strum( - serialize = "PlantGrowth3", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "50") - )] - PlantGrowth3 = 50u16, - #[strum( - serialize = "PlantGrowth4", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "51") - )] - PlantGrowth4 = 51u16, - #[strum( - serialize = "PlantHash1", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "56") - )] - PlantHash1 = 56u16, - #[strum( - serialize = "PlantHash2", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "57") - )] - PlantHash2 = 57u16, - #[strum( - serialize = "PlantHash3", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "58") - )] - PlantHash3 = 58u16, - #[strum( - serialize = "PlantHash4", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "59") - )] - PlantHash4 = 59u16, - #[strum( - serialize = "PlantHealth1", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "44") - )] - PlantHealth1 = 44u16, - #[strum( - serialize = "PlantHealth2", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "45") - )] - PlantHealth2 = 45u16, - #[strum( - serialize = "PlantHealth3", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "46") - )] - PlantHealth3 = 46u16, - #[strum( - serialize = "PlantHealth4", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "47") - )] - PlantHealth4 = 47u16, - #[strum( - serialize = "PositionX", - props( - docs = r#"The current position in X dimension in world coordinates"#, - value = "76" - ) - )] - PositionX = 76u16, - #[strum( - serialize = "PositionY", - props( - docs = r#"The current position in Y dimension in world coordinates"#, - value = "77" - ) - )] - PositionY = 77u16, - #[strum( - serialize = "PositionZ", - props( - docs = r#"The current position in Z dimension in world coordinates"#, - value = "78" - ) - )] - PositionZ = 78u16, - #[strum( - serialize = "Power", - props( - docs = r#"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 = "PowerActual", - props( - docs = r#"How much energy the device or network is actually using"#, - value = "26" - ) - )] - PowerActual = 26u16, - #[strum( - serialize = "PowerGeneration", - props(docs = r#"Returns how much power is being generated"#, value = "65") - )] - PowerGeneration = 65u16, - #[strum( - serialize = "PowerPotential", - props( - docs = r#"How much energy the device or network potentially provides"#, - value = "25" - ) - )] - PowerPotential = 25u16, - #[strum( - serialize = "PowerRequired", - props( - docs = r#"Power requested from the device and/or network"#, - value = "36" - ) - )] - PowerRequired = 36u16, - #[strum( - serialize = "PrefabHash", - props(docs = r#"The hash of the structure"#, value = "84") - )] - PrefabHash = 84u16, - #[strum( - serialize = "Pressure", - props(docs = r#"The current pressure reading of the device"#, value = "5") - )] - Pressure = 5u16, - #[strum( - serialize = "PressureEfficiency", - props( - docs = r#"How the pressure of the input pipe and waste pipe effect the machines efficiency"#, - value = "152" - ) - )] - PressureEfficiency = 152u16, - #[strum( - serialize = "PressureExternal", - props(docs = r#"Setting for external pressure safety, in KPa"#, value = "7") - )] - PressureExternal = 7u16, - #[strum( - serialize = "PressureInput", - props( - docs = r#"The current pressure reading of the device's Input Network"#, - value = "106" - ) - )] - PressureInput = 106u16, - #[strum( - serialize = "PressureInput2", - props( - docs = r#"The current pressure reading of the device's Input2 Network"#, - value = "116" - ) - )] - PressureInput2 = 116u16, - #[strum( - serialize = "PressureInternal", - props(docs = r#"Setting for internal pressure safety, in KPa"#, value = "8") - )] - PressureInternal = 8u16, - #[strum( - serialize = "PressureOutput", - props( - docs = r#"The current pressure reading of the device's Output Network"#, - value = "126" - ) - )] - PressureOutput = 126u16, - #[strum( - serialize = "PressureOutput2", - props( - docs = r#"The current pressure reading of the device's Output2 Network"#, - value = "136" - ) - )] - PressureOutput2 = 136u16, - #[strum( - serialize = "PressureSetting", - props( - docs = r#"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"#, - value = "71" - ) - )] - PressureSetting = 71u16, - #[strum( - serialize = "Progress", - props( - docs = r#"Progress of the rocket to the next node on the map expressed as a value between 0-1."#, - value = "214" - ) - )] - Progress = 214u16, - #[strum( - serialize = "Quantity", - props(docs = r#"Total quantity on the device"#, value = "27") - )] - Quantity = 27u16, - #[strum( - serialize = "Ratio", - props( - docs = r#"Context specific value depending on device, 0 to 1 based ratio"#, - value = "24" - ) - )] - Ratio = 24u16, - #[strum( - serialize = "RatioCarbonDioxide", - props( - docs = r#"The ratio of Carbon Dioxide in device atmosphere"#, - value = "15" - ) - )] - RatioCarbonDioxide = 15u16, - #[strum( - serialize = "RatioCarbonDioxideInput", - props( - docs = r#"The ratio of Carbon Dioxide in device's input network"#, - value = "109" - ) - )] - RatioCarbonDioxideInput = 109u16, - #[strum( - serialize = "RatioCarbonDioxideInput2", - props( - docs = r#"The ratio of Carbon Dioxide in device's Input2 network"#, - value = "119" - ) - )] - RatioCarbonDioxideInput2 = 119u16, - #[strum( - serialize = "RatioCarbonDioxideOutput", - props( - docs = r#"The ratio of Carbon Dioxide in device's Output network"#, - value = "129" - ) - )] - RatioCarbonDioxideOutput = 129u16, - #[strum( - serialize = "RatioCarbonDioxideOutput2", - props( - docs = r#"The ratio of Carbon Dioxide in device's Output2 network"#, - value = "139" - ) - )] - RatioCarbonDioxideOutput2 = 139u16, - #[strum( - serialize = "RatioHydrogen", - props( - docs = r#"The ratio of Hydrogen in device's Atmopshere"#, - value = "252" - ) - )] - RatioHydrogen = 252u16, - #[strum( - serialize = "RatioLiquidCarbonDioxide", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's Atmosphere"#, - value = "199" - ) - )] - RatioLiquidCarbonDioxide = 199u16, - #[strum( - serialize = "RatioLiquidCarbonDioxideInput", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"#, - value = "200" - ) - )] - RatioLiquidCarbonDioxideInput = 200u16, - #[strum( - serialize = "RatioLiquidCarbonDioxideInput2", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"#, - value = "201" - ) - )] - RatioLiquidCarbonDioxideInput2 = 201u16, - #[strum( - serialize = "RatioLiquidCarbonDioxideOutput", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"#, - value = "202" - ) - )] - RatioLiquidCarbonDioxideOutput = 202u16, - #[strum( - serialize = "RatioLiquidCarbonDioxideOutput2", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"#, - value = "203" - ) - )] - RatioLiquidCarbonDioxideOutput2 = 203u16, - #[strum( - serialize = "RatioLiquidHydrogen", - props( - docs = r#"The ratio of Liquid Hydrogen in device's Atmopshere"#, - value = "253" - ) - )] - RatioLiquidHydrogen = 253u16, + SolarIrradiance = 176u16, #[strum( serialize = "RatioLiquidNitrogen", props( @@ -1598,45 +1827,13 @@ pub enum LogicType { )] RatioLiquidNitrogenOutput2 = 181u16, #[strum( - serialize = "RatioLiquidNitrousOxide", + serialize = "VolumeOfLiquid", props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's Atmosphere"#, - value = "209" + docs = r#"The total volume of all liquids in Liters in the atmosphere"#, + value = "182" ) )] - RatioLiquidNitrousOxide = 209u16, - #[strum( - serialize = "RatioLiquidNitrousOxideInput", - props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"#, - value = "210" - ) - )] - RatioLiquidNitrousOxideInput = 210u16, - #[strum( - serialize = "RatioLiquidNitrousOxideInput2", - props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"#, - value = "211" - ) - )] - RatioLiquidNitrousOxideInput2 = 211u16, - #[strum( - serialize = "RatioLiquidNitrousOxideOutput", - props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"#, - value = "212" - ) - )] - RatioLiquidNitrousOxideOutput = 212u16, - #[strum( - serialize = "RatioLiquidNitrousOxideOutput2", - props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"#, - value = "213" - ) - )] - RatioLiquidNitrousOxideOutput2 = 213u16, + VolumeOfLiquid = 182u16, #[strum( serialize = "RatioLiquidOxygen", props( @@ -1677,46 +1874,6 @@ pub enum LogicType { ) )] RatioLiquidOxygenOutput2 = 187u16, - #[strum( - serialize = "RatioLiquidPollutant", - props( - docs = r#"The ratio of Liquid Pollutant in device's Atmosphere"#, - value = "204" - ) - )] - RatioLiquidPollutant = 204u16, - #[strum( - serialize = "RatioLiquidPollutantInput", - props( - docs = r#"The ratio of Liquid Pollutant in device's Input Atmosphere"#, - value = "205" - ) - )] - RatioLiquidPollutantInput = 205u16, - #[strum( - serialize = "RatioLiquidPollutantInput2", - props( - docs = r#"The ratio of Liquid Pollutant in device's Input2 Atmosphere"#, - value = "206" - ) - )] - RatioLiquidPollutantInput2 = 206u16, - #[strum( - serialize = "RatioLiquidPollutantOutput", - props( - docs = r#"The ratio of Liquid Pollutant in device's device's Output Atmosphere"#, - value = "207" - ) - )] - RatioLiquidPollutantOutput = 207u16, - #[strum( - serialize = "RatioLiquidPollutantOutput2", - props( - docs = r#"The ratio of Liquid Pollutant in device's Output2 Atmopshere"#, - value = "208" - ) - )] - RatioLiquidPollutantOutput2 = 208u16, #[strum( serialize = "RatioLiquidVolatiles", props( @@ -1757,165 +1914,6 @@ pub enum LogicType { ) )] RatioLiquidVolatilesOutput2 = 192u16, - #[strum( - serialize = "RatioNitrogen", - props(docs = r#"The ratio of nitrogen in device atmosphere"#, value = "16") - )] - RatioNitrogen = 16u16, - #[strum( - serialize = "RatioNitrogenInput", - props( - docs = r#"The ratio of nitrogen in device's input network"#, - value = "110" - ) - )] - RatioNitrogenInput = 110u16, - #[strum( - serialize = "RatioNitrogenInput2", - props( - docs = r#"The ratio of nitrogen in device's Input2 network"#, - value = "120" - ) - )] - RatioNitrogenInput2 = 120u16, - #[strum( - serialize = "RatioNitrogenOutput", - props( - docs = r#"The ratio of nitrogen in device's Output network"#, - value = "130" - ) - )] - RatioNitrogenOutput = 130u16, - #[strum( - serialize = "RatioNitrogenOutput2", - props( - docs = r#"The ratio of nitrogen in device's Output2 network"#, - value = "140" - ) - )] - RatioNitrogenOutput2 = 140u16, - #[strum( - serialize = "RatioNitrousOxide", - props( - docs = r#"The ratio of Nitrous Oxide in device atmosphere"#, - value = "83" - ) - )] - RatioNitrousOxide = 83u16, - #[strum( - serialize = "RatioNitrousOxideInput", - props( - docs = r#"The ratio of Nitrous Oxide in device's input network"#, - value = "114" - ) - )] - RatioNitrousOxideInput = 114u16, - #[strum( - serialize = "RatioNitrousOxideInput2", - props( - docs = r#"The ratio of Nitrous Oxide in device's Input2 network"#, - value = "124" - ) - )] - RatioNitrousOxideInput2 = 124u16, - #[strum( - serialize = "RatioNitrousOxideOutput", - props( - docs = r#"The ratio of Nitrous Oxide in device's Output network"#, - value = "134" - ) - )] - RatioNitrousOxideOutput = 134u16, - #[strum( - serialize = "RatioNitrousOxideOutput2", - props( - docs = r#"The ratio of Nitrous Oxide in device's Output2 network"#, - value = "144" - ) - )] - RatioNitrousOxideOutput2 = 144u16, - #[strum( - serialize = "RatioOxygen", - props(docs = r#"The ratio of oxygen in device atmosphere"#, value = "14") - )] - RatioOxygen = 14u16, - #[strum( - serialize = "RatioOxygenInput", - props( - docs = r#"The ratio of oxygen in device's input network"#, - value = "108" - ) - )] - RatioOxygenInput = 108u16, - #[strum( - serialize = "RatioOxygenInput2", - props( - docs = r#"The ratio of oxygen in device's Input2 network"#, - value = "118" - ) - )] - RatioOxygenInput2 = 118u16, - #[strum( - serialize = "RatioOxygenOutput", - props( - docs = r#"The ratio of oxygen in device's Output network"#, - value = "128" - ) - )] - RatioOxygenOutput = 128u16, - #[strum( - serialize = "RatioOxygenOutput2", - props( - docs = r#"The ratio of oxygen in device's Output2 network"#, - value = "138" - ) - )] - RatioOxygenOutput2 = 138u16, - #[strum( - serialize = "RatioPollutant", - props(docs = r#"The ratio of pollutant in device atmosphere"#, value = "17") - )] - RatioPollutant = 17u16, - #[strum( - serialize = "RatioPollutantInput", - props( - docs = r#"The ratio of pollutant in device's input network"#, - value = "111" - ) - )] - RatioPollutantInput = 111u16, - #[strum( - serialize = "RatioPollutantInput2", - props( - docs = r#"The ratio of pollutant in device's Input2 network"#, - value = "121" - ) - )] - RatioPollutantInput2 = 121u16, - #[strum( - serialize = "RatioPollutantOutput", - props( - docs = r#"The ratio of pollutant in device's Output network"#, - value = "131" - ) - )] - RatioPollutantOutput = 131u16, - #[strum( - serialize = "RatioPollutantOutput2", - props( - docs = r#"The ratio of pollutant in device's Output2 network"#, - value = "141" - ) - )] - RatioPollutantOutput2 = 141u16, - #[strum( - serialize = "RatioPollutedWater", - props( - docs = r#"The ratio of polluted water in device atmosphere"#, - value = "254" - ) - )] - RatioPollutedWater = 254u16, #[strum( serialize = "RatioSteam", props( @@ -1957,362 +1955,183 @@ pub enum LogicType { )] RatioSteamOutput2 = 197u16, #[strum( - serialize = "RatioVolatiles", - props(docs = r#"The ratio of volatiles in device atmosphere"#, value = "18") + serialize = "ContactTypeId", + props(docs = r#"The type id of the contact."#, value = "198") )] - RatioVolatiles = 18u16, + ContactTypeId = 198u16, #[strum( - serialize = "RatioVolatilesInput", + serialize = "RatioLiquidCarbonDioxide", props( - docs = r#"The ratio of volatiles in device's input network"#, - value = "112" + docs = r#"The ratio of Liquid Carbon Dioxide in device's Atmosphere"#, + value = "199" ) )] - RatioVolatilesInput = 112u16, + RatioLiquidCarbonDioxide = 199u16, #[strum( - serialize = "RatioVolatilesInput2", + serialize = "RatioLiquidCarbonDioxideInput", props( - docs = r#"The ratio of volatiles in device's Input2 network"#, - value = "122" + docs = r#"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"#, + value = "200" ) )] - RatioVolatilesInput2 = 122u16, + RatioLiquidCarbonDioxideInput = 200u16, #[strum( - serialize = "RatioVolatilesOutput", + serialize = "RatioLiquidCarbonDioxideInput2", props( - docs = r#"The ratio of volatiles in device's Output network"#, - value = "132" + docs = r#"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"#, + value = "201" ) )] - RatioVolatilesOutput = 132u16, + RatioLiquidCarbonDioxideInput2 = 201u16, #[strum( - serialize = "RatioVolatilesOutput2", + serialize = "RatioLiquidCarbonDioxideOutput", props( - docs = r#"The ratio of volatiles in device's Output2 network"#, - value = "142" + docs = r#"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"#, + value = "202" ) )] - RatioVolatilesOutput2 = 142u16, + RatioLiquidCarbonDioxideOutput = 202u16, #[strum( - serialize = "RatioWater", - props(docs = r#"The ratio of water in device atmosphere"#, value = "19") - )] - RatioWater = 19u16, - #[strum( - serialize = "RatioWaterInput", + serialize = "RatioLiquidCarbonDioxideOutput2", props( - docs = r#"The ratio of water in device's input network"#, - value = "113" + docs = r#"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"#, + value = "203" ) )] - RatioWaterInput = 113u16, + RatioLiquidCarbonDioxideOutput2 = 203u16, #[strum( - serialize = "RatioWaterInput2", + serialize = "RatioLiquidPollutant", props( - docs = r#"The ratio of water in device's Input2 network"#, - value = "123" + docs = r#"The ratio of Liquid Pollutant in device's Atmosphere"#, + value = "204" ) )] - RatioWaterInput2 = 123u16, + RatioLiquidPollutant = 204u16, #[strum( - serialize = "RatioWaterOutput", + serialize = "RatioLiquidPollutantInput", props( - docs = r#"The ratio of water in device's Output network"#, - value = "133" + docs = r#"The ratio of Liquid Pollutant in device's Input Atmosphere"#, + value = "205" ) )] - RatioWaterOutput = 133u16, + RatioLiquidPollutantInput = 205u16, #[strum( - serialize = "RatioWaterOutput2", + serialize = "RatioLiquidPollutantInput2", props( - docs = r#"The ratio of water in device's Output2 network"#, - value = "143" + docs = r#"The ratio of Liquid Pollutant in device's Input2 Atmosphere"#, + value = "206" ) )] - RatioWaterOutput2 = 143u16, + RatioLiquidPollutantInput2 = 206u16, #[strum( - serialize = "ReEntryAltitude", + serialize = "RatioLiquidPollutantOutput", props( - docs = r#"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"#, - value = "237" + docs = r#"The ratio of Liquid Pollutant in device's device's Output Atmosphere"#, + value = "207" ) )] - ReEntryAltitude = 237u16, + RatioLiquidPollutantOutput = 207u16, #[strum( - serialize = "Reagents", + serialize = "RatioLiquidPollutantOutput2", props( - docs = r#"Total number of reagents recorded by the device"#, - value = "13" + docs = r#"The ratio of Liquid Pollutant in device's Output2 Atmopshere"#, + value = "208" ) )] - Reagents = 13u16, + RatioLiquidPollutantOutput2 = 208u16, #[strum( - serialize = "RecipeHash", + serialize = "RatioLiquidNitrousOxide", props( - docs = r#"Current hash of the recipe the device is set to produce"#, - value = "41" + docs = r#"The ratio of Liquid Nitrous Oxide in device's Atmosphere"#, + value = "209" ) )] - RecipeHash = 41u16, + RatioLiquidNitrousOxide = 209u16, + #[strum( + serialize = "RatioLiquidNitrousOxideInput", + props( + docs = r#"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"#, + value = "210" + ) + )] + RatioLiquidNitrousOxideInput = 210u16, + #[strum( + serialize = "RatioLiquidNitrousOxideInput2", + props( + docs = r#"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"#, + value = "211" + ) + )] + RatioLiquidNitrousOxideInput2 = 211u16, + #[strum( + serialize = "RatioLiquidNitrousOxideOutput", + props( + docs = r#"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"#, + value = "212" + ) + )] + RatioLiquidNitrousOxideOutput = 212u16, + #[strum( + serialize = "RatioLiquidNitrousOxideOutput2", + props( + docs = r#"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"#, + value = "213" + ) + )] + RatioLiquidNitrousOxideOutput2 = 213u16, + #[strum( + serialize = "Progress", + props( + docs = r#"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", + props( + docs = r#"The Space Map Address of the rockets target Space Map Location"#, + value = "215" + ) + )] + DestinationCode = 215u16, + #[strum( + serialize = "Acceleration", + props( + docs = r#"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."#, + value = "216" + ) + )] + Acceleration = 216u16, #[strum( serialize = "ReferenceId", props(docs = r#"Unique Reference Identifier for this object"#, value = "217") )] ReferenceId = 217u16, #[strum( - serialize = "RequestHash", + serialize = "AutoShutOff", props( - docs = r#"When set to the unique identifier, requests an item of the provided type from the device"#, - value = "60" + docs = r#"Turns off all devices in the rocket upon reaching destination"#, + value = "218" ) )] - RequestHash = 60u16, + AutoShutOff = 218u16, #[strum( - serialize = "RequiredPower", + serialize = "Mass", props( - docs = r#"Idle operating power quantity, does not necessarily include extra demand power"#, - value = "33" + docs = r#"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" ) )] - RequiredPower = 33u16, + Mass = 219u16, #[strum( - serialize = "ReturnFuelCost", + serialize = "DryMass", props( - docs = r#"Gets the fuel remaining in your rocket's fuel tank."#, - value = "100" + docs = r#"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" ) )] - ReturnFuelCost = 100u16, - #[strum( - serialize = "Richness", - props( - docs = r#"The richness of the rocket's target site's mine-able deposit."#, - value = "263" - ) - )] - Richness = 263u16, - #[strum( - serialize = "Rpm", - props( - docs = r#"The number of revolutions per minute that the device's spinning mechanism is doing"#, - value = "155" - ) - )] - Rpm = 155u16, - #[strum( - serialize = "SemiMajorAxis", - props( - docs = r#"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 = "Setting", - props( - docs = r#"A variable setting that can be read or written, depending on the device"#, - value = "12" - ) - )] - Setting = 12u16, - #[strum( - serialize = "SettingInput", - props(docs = r#""#, value = "91") - )] - SettingInput = 91u16, - #[strum( - serialize = "SettingOutput", - props(docs = r#""#, value = "92") - )] - SettingOutput = 92u16, - #[strum( - serialize = "SignalID", - props( - docs = r#"Returns the contact ID of the strongest signal from this Satellite"#, - value = "87" - ) - )] - SignalId = 87u16, - #[strum( - serialize = "SignalStrength", - props( - docs = r#"Returns the degree offset of the strongest contact"#, - value = "86" - ) - )] - SignalStrength = 86u16, - #[strum( - serialize = "Sites", - props( - docs = r#"The number of Sites that have been discovered at the rockets target Space Map location."#, - value = "260" - ) - )] - Sites = 260u16, - #[strum( - serialize = "Size", - props( - docs = r#"The size of the rocket's target site's mine-able deposit."#, - value = "264" - ) - )] - Size = 264u16, - #[strum( - serialize = "SizeX", - props( - docs = r#"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"#, - value = "160" - ) - )] - SizeX = 160u16, - #[strum( - serialize = "SizeY", - props( - docs = r#"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"#, - value = "161" - ) - )] - SizeY = 161u16, - #[strum( - serialize = "SizeZ", - props( - docs = r#"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"#, - value = "162" - ) - )] - SizeZ = 162u16, - #[strum( - serialize = "SolarAngle", - props(docs = r#"Solar angle of the device"#, value = "22") - )] - SolarAngle = 22u16, - #[strum( - serialize = "SolarIrradiance", - props(docs = r#""#, value = "176") - )] - SolarIrradiance = 176u16, - #[strum( - serialize = "SoundAlert", - props(docs = r#"Plays a sound alert on the devices speaker"#, value = "175") - )] - SoundAlert = 175u16, - #[strum( - serialize = "Stress", - props( - docs = r#"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"#, - value = "156" - ) - )] - Stress = 156u16, - #[strum( - serialize = "Survey", - props( - docs = r#"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 = "TargetPadIndex", - props( - docs = r#"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 = "TargetX", - props( - docs = r#"The target position in X dimension in world coordinates"#, - value = "88" - ) - )] - TargetX = 88u16, - #[strum( - serialize = "TargetY", - props( - docs = r#"The target position in Y dimension in world coordinates"#, - value = "89" - ) - )] - TargetY = 89u16, - #[strum( - serialize = "TargetZ", - props( - docs = r#"The target position in Z dimension in world coordinates"#, - value = "90" - ) - )] - TargetZ = 90u16, - #[strum( - serialize = "Temperature", - props(docs = r#"The current temperature reading of the device"#, value = "6") - )] - Temperature = 6u16, - #[strum( - serialize = "TemperatureDifferentialEfficiency", - props( - docs = r#"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"#, - value = "151" - ) - )] - TemperatureDifferentialEfficiency = 151u16, - #[strum( - serialize = "TemperatureExternal", - props( - docs = r#"The temperature of the outside of the device, usually the world atmosphere surrounding it"#, - value = "73" - ) - )] - TemperatureExternal = 73u16, - #[strum( - serialize = "TemperatureInput", - props( - docs = r#"The current temperature reading of the device's Input Network"#, - value = "107" - ) - )] - TemperatureInput = 107u16, - #[strum( - serialize = "TemperatureInput2", - props( - docs = r#"The current temperature reading of the device's Input2 Network"#, - value = "117" - ) - )] - TemperatureInput2 = 117u16, - #[strum( - serialize = "TemperatureOutput", - props( - docs = r#"The current temperature reading of the device's Output Network"#, - value = "127" - ) - )] - TemperatureOutput = 127u16, - #[strum( - serialize = "TemperatureOutput2", - props( - docs = r#"The current temperature reading of the device's Output2 Network"#, - value = "137" - ) - )] - TemperatureOutput2 = 137u16, - #[strum( - serialize = "TemperatureSetting", - props( - docs = r#"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"#, - value = "72" - ) - )] - TemperatureSetting = 72u16, - #[strum( - serialize = "Throttle", - props( - docs = r#"Increases the rate at which the machine works (range: 0-100)"#, - value = "154" - ) - )] - Throttle = 154u16, + DryMass = 220u16, #[strum( serialize = "Thrust", props( @@ -2321,6 +2140,14 @@ pub enum LogicType { ) )] Thrust = 221u16, + #[strum( + serialize = "Weight", + props( + docs = r#"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."#, + value = "222" + ) + )] + Weight = 222u16, #[strum( serialize = "ThrustToWeight", props( @@ -2329,8 +2156,6 @@ pub enum LogicType { ) )] ThrustToWeight = 223u16, - #[strum(serialize = "Time", props(docs = r#"Time"#, value = "102"))] - Time = 102u16, #[strum( serialize = "TimeToDestination", props( @@ -2340,87 +2165,53 @@ pub enum LogicType { )] TimeToDestination = 224u16, #[strum( - serialize = "TotalMoles", - props(docs = r#"Returns the total moles of the device"#, value = "66") - )] - TotalMoles = 66u16, - #[strum( - serialize = "TotalMolesInput", + serialize = "BurnTimeRemaining", props( - docs = r#"Returns the total moles of the device's Input Network"#, - value = "115" + docs = r#"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."#, + value = "225" ) )] - TotalMolesInput = 115u16, + BurnTimeRemaining = 225u16, #[strum( - serialize = "TotalMolesInput2", + serialize = "AutoLand", props( - docs = r#"Returns the total moles of the device's Input2 Network"#, - value = "125" + docs = r#"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."#, + value = "226" ) )] - TotalMolesInput2 = 125u16, + AutoLand = 226u16, #[strum( - serialize = "TotalMolesOutput", + serialize = "ForwardX", props( - docs = r#"Returns the total moles of the device's Output Network"#, - value = "135" + docs = r#"The direction the entity is facing expressed as a normalized vector"#, + value = "227" ) )] - TotalMolesOutput = 135u16, + ForwardX = 227u16, #[strum( - serialize = "TotalMolesOutput2", + serialize = "ForwardY", props( - docs = r#"Returns the total moles of the device's Output2 Network"#, - value = "145" + docs = r#"The direction the entity is facing expressed as a normalized vector"#, + value = "228" ) )] - TotalMolesOutput2 = 145u16, + ForwardY = 228u16, #[strum( - serialize = "TotalQuantity", + serialize = "ForwardZ", props( - docs = r#"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."#, - value = "265" + docs = r#"The direction the entity is facing expressed as a normalized vector"#, + value = "229" ) )] - TotalQuantity = 265u16, + ForwardZ = 229u16, #[strum( - serialize = "TrueAnomaly", + serialize = "Orientation", props( - docs = r#"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" + docs = r#"The orientation of the entity in degrees in a plane relative towards the north origin"#, + value = "230" ) )] - TrueAnomaly = 251u16, - #[strum( - serialize = "VelocityMagnitude", - props(docs = r#"The current magnitude of the velocity vector"#, value = "79") - )] - VelocityMagnitude = 79u16, - #[strum( - serialize = "VelocityRelativeX", - props( - docs = r#"The current velocity X relative to the forward vector of this"#, - value = "80" - ) - )] - VelocityRelativeX = 80u16, - #[strum( - serialize = "VelocityRelativeY", - props( - docs = r#"The current velocity Y relative to the forward vector of this"#, - value = "81" - ) - )] - VelocityRelativeY = 81u16, - #[strum( - serialize = "VelocityRelativeZ", - props( - docs = r#"The current velocity Z relative to the forward vector of this"#, - value = "82" - ) - )] - VelocityRelativeZ = 82u16, + Orientation = 230u16, #[strum( serialize = "VelocityX", props( @@ -2446,52 +2237,271 @@ pub enum LogicType { )] VelocityZ = 233u16, #[strum( - serialize = "Vertical", - props(docs = r#"Vertical setting of the device"#, value = "21") - )] - Vertical = 21u16, - #[strum( - serialize = "VerticalRatio", - props(docs = r#"Radio of vertical setting for device"#, value = "35") - )] - VerticalRatio = 35u16, - #[strum( - serialize = "Volume", - props(docs = r#"Returns the device atmosphere volume"#, value = "67") - )] - Volume = 67u16, - #[strum( - serialize = "VolumeOfLiquid", + serialize = "PassedMoles", props( - docs = r#"The total volume of all liquids in Liters in the atmosphere"#, - value = "182" + docs = r#"The number of moles that passed through this device on the previous simulation tick"#, + value = "234" ) )] - VolumeOfLiquid = 182u16, + PassedMoles = 234u16, #[strum( - serialize = "WattsReachingContact", + serialize = "ExhaustVelocity", + props(docs = r#"The velocity of the exhaust gas in m/s"#, value = "235") + )] + ExhaustVelocity = 235u16, + #[strum( + serialize = "FlightControlRule", props( - docs = r#"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" + docs = r#"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" ) )] - WattsReachingContact = 164u16, + FlightControlRule = 236u16, #[strum( - serialize = "Weight", + serialize = "ReEntryAltitude", props( - docs = r#"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."#, - value = "222" + docs = r#"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"#, + value = "237" ) )] - Weight = 222u16, + ReEntryAltitude = 237u16, #[strum( - serialize = "WorkingGasEfficiency", + serialize = "Apex", props( - docs = r#"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"#, - value = "105" + docs = r#"The lowest altitude that the rocket will reach before it starts travelling upwards again."#, + value = "238" ) )] - WorkingGasEfficiency = 105u16, + Apex = 238u16, + #[strum( + serialize = "EntityState", + props( + docs = r#"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", + props( + docs = r#"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", + props(docs = r#"The current index for the device."#, value = "241") + )] + Index = 241u16, + #[strum( + serialize = "CelestialHash", + props( + docs = r#"The current hash of the targeted celestial object."#, + value = "242" + ) + )] + CelestialHash = 242u16, + #[strum( + serialize = "AlignmentError", + props( + docs = r#"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", + props( + docs = r#"The current distance to the celestial object, measured in astronomical units."#, + value = "244" + ) + )] + DistanceAu = 244u16, + #[strum( + serialize = "OrbitPeriod", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"The current distance to the celestial object, measured in kilometers."#, + value = "249" + ) + )] + DistanceKm = 249u16, + #[strum( + serialize = "CelestialParentHash", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"The ratio of Hydrogen in device's Atmopshere"#, + value = "252" + ) + )] + RatioHydrogen = 252u16, + #[strum( + serialize = "RatioLiquidHydrogen", + props( + docs = r#"The ratio of Liquid Hydrogen in device's Atmopshere"#, + value = "253" + ) + )] + RatioLiquidHydrogen = 253u16, + #[strum( + serialize = "RatioPollutedWater", + props( + docs = r#"The ratio of polluted water in device atmosphere"#, + value = "254" + ) + )] + RatioPollutedWater = 254u16, + #[strum( + serialize = "Discover", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"The number of NavPoints at the rocket's target Space Map Location."#, + value = "258" + ) + )] + NavPoints = 258u16, + #[strum( + serialize = "ChartedNavPoints", + props( + docs = r#"The number of charted NavPoints at the rocket's target Space Map Location."#, + value = "259" + ) + )] + ChartedNavPoints = 259u16, + #[strum( + serialize = "Sites", + props( + docs = r#"The number of Sites that have been discovered at the rockets target Space Map location."#, + value = "260" + ) + )] + Sites = 260u16, + #[strum( + serialize = "CurrentCode", + props( + docs = r#"The Space Map Address of the rockets current Space Map Location"#, + value = "261" + ) + )] + CurrentCode = 261u16, + #[strum( + serialize = "Density", + props( + docs = r#"The density of the rocket's target site's mine-able deposit."#, + value = "262" + ) + )] + Density = 262u16, + #[strum( + serialize = "Richness", + props( + docs = r#"The richness of the rocket's target site's mine-able deposit."#, + value = "263" + ) + )] + Richness = 263u16, + #[strum( + serialize = "Size", + props( + docs = r#"The size of the rocket's target site's mine-able deposit."#, + value = "264" + ) + )] + Size = 264u16, + #[strum( + serialize = "TotalQuantity", + props( + docs = r#"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."#, + value = "265" + ) + )] + TotalQuantity = 265u16, + #[strum( + serialize = "MinedQuantity", + props( + docs = r#"The total number of resources that have been mined at the rocket's target Space Map Site."#, + value = "266" + ) + )] + MinedQuantity = 266u16, + #[strum( + serialize = "BestContactFilter", + props( + docs = r#"Filters the satellite's auto selection of targets to a single reference ID."#, + value = "267" + ) + )] + BestContactFilter = 267u16, } #[derive( Debug, @@ -2514,19 +2524,20 @@ pub enum LogicType { #[strum(use_phf)] #[repr(u8)] pub enum PowerMode { - #[strum(serialize = "Charged", props(docs = r#""#, value = "4"))] - Charged = 4u8, - #[strum(serialize = "Charging", props(docs = r#""#, value = "3"))] - Charging = 3u8, + #[strum(serialize = "Idle", props(docs = r#""#, value = "0"))] + Idle = 0u8, #[strum(serialize = "Discharged", props(docs = r#""#, value = "1"))] Discharged = 1u8, #[strum(serialize = "Discharging", props(docs = r#""#, value = "2"))] Discharging = 2u8, - #[strum(serialize = "Idle", props(docs = r#""#, value = "0"))] - Idle = 0u8, + #[strum(serialize = "Charging", props(docs = r#""#, value = "3"))] + Charging = 3u8, + #[strum(serialize = "Charged", props(docs = r#""#, value = "4"))] + Charged = 4u8, } #[derive( Debug, + Default, Display, Clone, Copy, @@ -2546,19 +2557,21 @@ pub enum PowerMode { #[strum(use_phf)] #[repr(u8)] pub enum ReEntryProfile { + #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + #[default] + None = 0u8, + #[strum(serialize = "Optimal", props(docs = r#""#, value = "1"))] + Optimal = 1u8, + #[strum(serialize = "Medium", props(docs = r#""#, value = "2"))] + Medium = 2u8, #[strum(serialize = "High", props(docs = r#""#, value = "3"))] High = 3u8, #[strum(serialize = "Max", props(docs = r#""#, value = "4"))] Max = 4u8, - #[strum(serialize = "Medium", props(docs = r#""#, value = "2"))] - Medium = 2u8, - #[strum(serialize = "None", props(docs = r#""#, value = "0"))] - None = 0u8, - #[strum(serialize = "Optimal", props(docs = r#""#, value = "1"))] - Optimal = 1u8, } #[derive( Debug, + Default, Display, Clone, Copy, @@ -2578,23 +2591,25 @@ pub enum ReEntryProfile { #[strum(use_phf)] #[repr(u8)] pub enum RobotMode { + #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + #[default] + None = 0u8, #[strum(serialize = "Follow", props(docs = r#""#, value = "1"))] Follow = 1u8, #[strum(serialize = "MoveToTarget", props(docs = r#""#, value = "2"))] MoveToTarget = 2u8, - #[strum(serialize = "None", props(docs = r#""#, value = "0"))] - None = 0u8, - #[strum(serialize = "PathToTarget", props(docs = r#""#, value = "5"))] - PathToTarget = 5u8, #[strum(serialize = "Roam", props(docs = r#""#, value = "3"))] Roam = 3u8, - #[strum(serialize = "StorageFull", props(docs = r#""#, value = "6"))] - StorageFull = 6u8, #[strum(serialize = "Unload", props(docs = r#""#, value = "4"))] Unload = 4u8, + #[strum(serialize = "PathToTarget", props(docs = r#""#, value = "5"))] + PathToTarget = 5u8, + #[strum(serialize = "StorageFull", props(docs = r#""#, value = "6"))] + StorageFull = 6u8, } #[derive( Debug, + Default, Display, Clone, Copy, @@ -2614,89 +2629,91 @@ pub enum RobotMode { #[strum(use_phf)] #[repr(u8)] pub enum Class { - #[strum(serialize = "AccessCard", props(docs = r#""#, value = "22"))] - AccessCard = 22u8, - #[strum(serialize = "Appliance", props(docs = r#""#, value = "18"))] - Appliance = 18u8, - #[strum(serialize = "Back", props(docs = r#""#, value = "3"))] - Back = 3u8, - #[strum(serialize = "Battery", props(docs = r#""#, value = "14"))] - Battery = 14u8, - #[strum(serialize = "Belt", props(docs = r#""#, value = "16"))] - Belt = 16u8, - #[strum(serialize = "Blocked", props(docs = r#""#, value = "38"))] - Blocked = 38u8, - #[strum(serialize = "Bottle", props(docs = r#""#, value = "25"))] - Bottle = 25u8, - #[strum(serialize = "Cartridge", props(docs = r#""#, value = "21"))] - Cartridge = 21u8, - #[strum(serialize = "Circuit", props(docs = r#""#, value = "24"))] - Circuit = 24u8, - #[strum(serialize = "Circuitboard", props(docs = r#""#, value = "7"))] - Circuitboard = 7u8, - #[strum(serialize = "CreditCard", props(docs = r#""#, value = "28"))] - CreditCard = 28u8, - #[strum(serialize = "DataDisk", props(docs = r#""#, value = "8"))] - DataDisk = 8u8, - #[strum(serialize = "DirtCanister", props(docs = r#""#, value = "29"))] - DirtCanister = 29u8, - #[strum(serialize = "DrillHead", props(docs = r#""#, value = "35"))] - DrillHead = 35u8, - #[strum(serialize = "Egg", props(docs = r#""#, value = "15"))] - Egg = 15u8, - #[strum(serialize = "Entity", props(docs = r#""#, value = "13"))] - Entity = 13u8, - #[strum(serialize = "Flare", props(docs = r#""#, value = "37"))] - Flare = 37u8, - #[strum(serialize = "GasCanister", props(docs = r#""#, value = "5"))] - GasCanister = 5u8, - #[strum(serialize = "GasFilter", props(docs = r#""#, value = "4"))] - GasFilter = 4u8, - #[strum(serialize = "Glasses", props(docs = r#""#, value = "27"))] - Glasses = 27u8, + #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + #[default] + None = 0u8, #[strum(serialize = "Helmet", props(docs = r#""#, value = "1"))] Helmet = 1u8, - #[strum(serialize = "Ingot", props(docs = r#""#, value = "19"))] - Ingot = 19u8, - #[strum(serialize = "LiquidBottle", props(docs = r#""#, value = "32"))] - LiquidBottle = 32u8, - #[strum(serialize = "LiquidCanister", props(docs = r#""#, value = "31"))] - LiquidCanister = 31u8, - #[strum(serialize = "Magazine", props(docs = r#""#, value = "23"))] - Magazine = 23u8, - #[strum(serialize = "Motherboard", props(docs = r#""#, value = "6"))] - Motherboard = 6u8, - #[strum(serialize = "None", props(docs = r#""#, value = "0"))] - None = 0u8, - #[strum(serialize = "Ore", props(docs = r#""#, value = "10"))] - Ore = 10u8, - #[strum(serialize = "Organ", props(docs = r#""#, value = "9"))] - Organ = 9u8, - #[strum(serialize = "Plant", props(docs = r#""#, value = "11"))] - Plant = 11u8, - #[strum(serialize = "ProgrammableChip", props(docs = r#""#, value = "26"))] - ProgrammableChip = 26u8, - #[strum(serialize = "ScanningHead", props(docs = r#""#, value = "36"))] - ScanningHead = 36u8, - #[strum(serialize = "SensorProcessingUnit", props(docs = r#""#, value = "30"))] - SensorProcessingUnit = 30u8, - #[strum(serialize = "SoundCartridge", props(docs = r#""#, value = "34"))] - SoundCartridge = 34u8, #[strum(serialize = "Suit", props(docs = r#""#, value = "2"))] Suit = 2u8, - #[strum(serialize = "SuitMod", props(docs = r#""#, value = "39"))] - SuitMod = 39u8, - #[strum(serialize = "Tool", props(docs = r#""#, value = "17"))] - Tool = 17u8, - #[strum(serialize = "Torpedo", props(docs = r#""#, value = "20"))] - Torpedo = 20u8, + #[strum(serialize = "Back", props(docs = r#""#, value = "3"))] + Back = 3u8, + #[strum(serialize = "GasFilter", props(docs = r#""#, value = "4"))] + GasFilter = 4u8, + #[strum(serialize = "GasCanister", props(docs = r#""#, value = "5"))] + GasCanister = 5u8, + #[strum(serialize = "Motherboard", props(docs = r#""#, value = "6"))] + Motherboard = 6u8, + #[strum(serialize = "Circuitboard", props(docs = r#""#, value = "7"))] + Circuitboard = 7u8, + #[strum(serialize = "DataDisk", props(docs = r#""#, value = "8"))] + DataDisk = 8u8, + #[strum(serialize = "Organ", props(docs = r#""#, value = "9"))] + Organ = 9u8, + #[strum(serialize = "Ore", props(docs = r#""#, value = "10"))] + Ore = 10u8, + #[strum(serialize = "Plant", props(docs = r#""#, value = "11"))] + Plant = 11u8, #[strum(serialize = "Uniform", props(docs = r#""#, value = "12"))] Uniform = 12u8, + #[strum(serialize = "Entity", props(docs = r#""#, value = "13"))] + Entity = 13u8, + #[strum(serialize = "Battery", props(docs = r#""#, value = "14"))] + Battery = 14u8, + #[strum(serialize = "Egg", props(docs = r#""#, value = "15"))] + Egg = 15u8, + #[strum(serialize = "Belt", props(docs = r#""#, value = "16"))] + Belt = 16u8, + #[strum(serialize = "Tool", props(docs = r#""#, value = "17"))] + Tool = 17u8, + #[strum(serialize = "Appliance", props(docs = r#""#, value = "18"))] + Appliance = 18u8, + #[strum(serialize = "Ingot", props(docs = r#""#, value = "19"))] + Ingot = 19u8, + #[strum(serialize = "Torpedo", props(docs = r#""#, value = "20"))] + Torpedo = 20u8, + #[strum(serialize = "Cartridge", props(docs = r#""#, value = "21"))] + Cartridge = 21u8, + #[strum(serialize = "AccessCard", props(docs = r#""#, value = "22"))] + AccessCard = 22u8, + #[strum(serialize = "Magazine", props(docs = r#""#, value = "23"))] + Magazine = 23u8, + #[strum(serialize = "Circuit", props(docs = r#""#, value = "24"))] + Circuit = 24u8, + #[strum(serialize = "Bottle", props(docs = r#""#, value = "25"))] + Bottle = 25u8, + #[strum(serialize = "ProgrammableChip", props(docs = r#""#, value = "26"))] + ProgrammableChip = 26u8, + #[strum(serialize = "Glasses", props(docs = r#""#, value = "27"))] + Glasses = 27u8, + #[strum(serialize = "CreditCard", props(docs = r#""#, value = "28"))] + CreditCard = 28u8, + #[strum(serialize = "DirtCanister", props(docs = r#""#, value = "29"))] + DirtCanister = 29u8, + #[strum(serialize = "SensorProcessingUnit", props(docs = r#""#, value = "30"))] + SensorProcessingUnit = 30u8, + #[strum(serialize = "LiquidCanister", props(docs = r#""#, value = "31"))] + LiquidCanister = 31u8, + #[strum(serialize = "LiquidBottle", props(docs = r#""#, value = "32"))] + LiquidBottle = 32u8, #[strum(serialize = "Wreckage", props(docs = r#""#, value = "33"))] Wreckage = 33u8, + #[strum(serialize = "SoundCartridge", props(docs = r#""#, value = "34"))] + SoundCartridge = 34u8, + #[strum(serialize = "DrillHead", props(docs = r#""#, value = "35"))] + DrillHead = 35u8, + #[strum(serialize = "ScanningHead", props(docs = r#""#, value = "36"))] + ScanningHead = 36u8, + #[strum(serialize = "Flare", props(docs = r#""#, value = "37"))] + Flare = 37u8, + #[strum(serialize = "Blocked", props(docs = r#""#, value = "38"))] + Blocked = 38u8, + #[strum(serialize = "SuitMod", props(docs = r#""#, value = "39"))] + SuitMod = 39u8, } #[derive( Debug, + Default, Display, Clone, Copy, @@ -2716,6 +2733,9 @@ pub enum Class { #[strum(use_phf)] #[repr(u8)] pub enum SorterInstruction { + #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + #[default] + None = 0u8, #[strum(serialize = "FilterPrefabHashEquals", props(docs = r#""#, value = "1"))] FilterPrefabHashEquals = 1u8, #[strum( @@ -2723,25 +2743,24 @@ pub enum SorterInstruction { props(docs = r#""#, value = "2") )] FilterPrefabHashNotEquals = 2u8, - #[strum(serialize = "FilterQuantityCompare", props(docs = r#""#, value = "5"))] - FilterQuantityCompare = 5u8, - #[strum(serialize = "FilterSlotTypeCompare", props(docs = r#""#, value = "4"))] - FilterSlotTypeCompare = 4u8, #[strum( serialize = "FilterSortingClassCompare", props(docs = r#""#, value = "3") )] FilterSortingClassCompare = 3u8, + #[strum(serialize = "FilterSlotTypeCompare", props(docs = r#""#, value = "4"))] + FilterSlotTypeCompare = 4u8, + #[strum(serialize = "FilterQuantityCompare", props(docs = r#""#, value = "5"))] + FilterQuantityCompare = 5u8, #[strum( serialize = "LimitNextExecutionByCount", props(docs = r#""#, value = "6") )] LimitNextExecutionByCount = 6u8, - #[strum(serialize = "None", props(docs = r#""#, value = "0"))] - None = 0u8, } #[derive( Debug, + Default, Display, Clone, Copy, @@ -2761,31 +2780,33 @@ pub enum SorterInstruction { #[strum(use_phf)] #[repr(u8)] pub enum SortingClass { + #[strum(serialize = "Default", props(docs = r#""#, value = "0"))] + #[default] + Default = 0u8, + #[strum(serialize = "Kits", props(docs = r#""#, value = "1"))] + Kits = 1u8, + #[strum(serialize = "Tools", props(docs = r#""#, value = "2"))] + Tools = 2u8, + #[strum(serialize = "Resources", props(docs = r#""#, value = "3"))] + Resources = 3u8, + #[strum(serialize = "Food", props(docs = r#""#, value = "4"))] + Food = 4u8, + #[strum(serialize = "Clothing", props(docs = r#""#, value = "5"))] + Clothing = 5u8, #[strum(serialize = "Appliances", props(docs = r#""#, value = "6"))] Appliances = 6u8, #[strum(serialize = "Atmospherics", props(docs = r#""#, value = "7"))] Atmospherics = 7u8, - #[strum(serialize = "Clothing", props(docs = r#""#, value = "5"))] - Clothing = 5u8, - #[strum(serialize = "Default", props(docs = r#""#, value = "0"))] - Default = 0u8, - #[strum(serialize = "Food", props(docs = r#""#, value = "4"))] - Food = 4u8, - #[strum(serialize = "Ices", props(docs = r#""#, value = "10"))] - Ices = 10u8, - #[strum(serialize = "Kits", props(docs = r#""#, value = "1"))] - Kits = 1u8, - #[strum(serialize = "Ores", props(docs = r#""#, value = "9"))] - Ores = 9u8, - #[strum(serialize = "Resources", props(docs = r#""#, value = "3"))] - Resources = 3u8, #[strum(serialize = "Storage", props(docs = r#""#, value = "8"))] Storage = 8u8, - #[strum(serialize = "Tools", props(docs = r#""#, value = "2"))] - Tools = 2u8, + #[strum(serialize = "Ores", props(docs = r#""#, value = "9"))] + Ores = 9u8, + #[strum(serialize = "Ices", props(docs = r#""#, value = "10"))] + Ices = 10u8, } #[derive( Debug, + Default, Display, Clone, Copy, @@ -2805,16 +2826,9 @@ pub enum SortingClass { #[strum(use_phf)] #[repr(u8)] pub enum SoundAlert { - #[strum(serialize = "AirlockCycling", props(docs = r#""#, value = "22"))] - AirlockCycling = 22u8, - #[strum(serialize = "Alarm1", props(docs = r#""#, value = "45"))] - Alarm1 = 45u8, - #[strum(serialize = "Alarm10", props(docs = r#""#, value = "12"))] - Alarm10 = 12u8, - #[strum(serialize = "Alarm11", props(docs = r#""#, value = "13"))] - Alarm11 = 13u8, - #[strum(serialize = "Alarm12", props(docs = r#""#, value = "14"))] - Alarm12 = 14u8, + #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + #[default] + None = 0u8, #[strum(serialize = "Alarm2", props(docs = r#""#, value = "1"))] Alarm2 = 1u8, #[strum(serialize = "Alarm3", props(docs = r#""#, value = "2"))] @@ -2827,76 +2841,84 @@ pub enum SoundAlert { Alarm6 = 5u8, #[strum(serialize = "Alarm7", props(docs = r#""#, value = "6"))] Alarm7 = 6u8, - #[strum(serialize = "Alarm8", props(docs = r#""#, value = "10"))] - Alarm8 = 10u8, - #[strum(serialize = "Alarm9", props(docs = r#""#, value = "11"))] - Alarm9 = 11u8, - #[strum(serialize = "Alert", props(docs = r#""#, value = "17"))] - Alert = 17u8, - #[strum(serialize = "Danger", props(docs = r#""#, value = "15"))] - Danger = 15u8, - #[strum(serialize = "Depressurising", props(docs = r#""#, value = "20"))] - Depressurising = 20u8, - #[strum(serialize = "FireFireFire", props(docs = r#""#, value = "28"))] - FireFireFire = 28u8, - #[strum(serialize = "Five", props(docs = r#""#, value = "33"))] - Five = 33u8, - #[strum(serialize = "Floor", props(docs = r#""#, value = "34"))] - Floor = 34u8, - #[strum(serialize = "Four", props(docs = r#""#, value = "32"))] - Four = 32u8, - #[strum(serialize = "HaltWhoGoesThere", props(docs = r#""#, value = "27"))] - HaltWhoGoesThere = 27u8, - #[strum(serialize = "HighCarbonDioxide", props(docs = r#""#, value = "44"))] - HighCarbonDioxide = 44u8, - #[strum(serialize = "IntruderAlert", props(docs = r#""#, value = "19"))] - IntruderAlert = 19u8, - #[strum(serialize = "LiftOff", props(docs = r#""#, value = "36"))] - LiftOff = 36u8, - #[strum(serialize = "MalfunctionDetected", props(docs = r#""#, value = "26"))] - MalfunctionDetected = 26u8, #[strum(serialize = "Music1", props(docs = r#""#, value = "7"))] Music1 = 7u8, #[strum(serialize = "Music2", props(docs = r#""#, value = "8"))] Music2 = 8u8, #[strum(serialize = "Music3", props(docs = r#""#, value = "9"))] Music3 = 9u8, - #[strum(serialize = "None", props(docs = r#""#, value = "0"))] - None = 0u8, - #[strum(serialize = "One", props(docs = r#""#, value = "29"))] - One = 29u8, - #[strum(serialize = "PollutantsDetected", props(docs = r#""#, value = "43"))] - PollutantsDetected = 43u8, - #[strum(serialize = "PowerLow", props(docs = r#""#, value = "23"))] - PowerLow = 23u8, - #[strum(serialize = "PressureHigh", props(docs = r#""#, value = "39"))] - PressureHigh = 39u8, - #[strum(serialize = "PressureLow", props(docs = r#""#, value = "40"))] - PressureLow = 40u8, - #[strum(serialize = "Pressurising", props(docs = r#""#, value = "21"))] - Pressurising = 21u8, - #[strum(serialize = "RocketLaunching", props(docs = r#""#, value = "35"))] - RocketLaunching = 35u8, + #[strum(serialize = "Alarm8", props(docs = r#""#, value = "10"))] + Alarm8 = 10u8, + #[strum(serialize = "Alarm9", props(docs = r#""#, value = "11"))] + Alarm9 = 11u8, + #[strum(serialize = "Alarm10", props(docs = r#""#, value = "12"))] + Alarm10 = 12u8, + #[strum(serialize = "Alarm11", props(docs = r#""#, value = "13"))] + Alarm11 = 13u8, + #[strum(serialize = "Alarm12", props(docs = r#""#, value = "14"))] + Alarm12 = 14u8, + #[strum(serialize = "Danger", props(docs = r#""#, value = "15"))] + Danger = 15u8, + #[strum(serialize = "Warning", props(docs = r#""#, value = "16"))] + Warning = 16u8, + #[strum(serialize = "Alert", props(docs = r#""#, value = "17"))] + Alert = 17u8, #[strum(serialize = "StormIncoming", props(docs = r#""#, value = "18"))] StormIncoming = 18u8, + #[strum(serialize = "IntruderAlert", props(docs = r#""#, value = "19"))] + IntruderAlert = 19u8, + #[strum(serialize = "Depressurising", props(docs = r#""#, value = "20"))] + Depressurising = 20u8, + #[strum(serialize = "Pressurising", props(docs = r#""#, value = "21"))] + Pressurising = 21u8, + #[strum(serialize = "AirlockCycling", props(docs = r#""#, value = "22"))] + AirlockCycling = 22u8, + #[strum(serialize = "PowerLow", props(docs = r#""#, value = "23"))] + PowerLow = 23u8, #[strum(serialize = "SystemFailure", props(docs = r#""#, value = "24"))] SystemFailure = 24u8, - #[strum(serialize = "TemperatureHigh", props(docs = r#""#, value = "41"))] - TemperatureHigh = 41u8, - #[strum(serialize = "TemperatureLow", props(docs = r#""#, value = "42"))] - TemperatureLow = 42u8, + #[strum(serialize = "Welcome", props(docs = r#""#, value = "25"))] + Welcome = 25u8, + #[strum(serialize = "MalfunctionDetected", props(docs = r#""#, value = "26"))] + MalfunctionDetected = 26u8, + #[strum(serialize = "HaltWhoGoesThere", props(docs = r#""#, value = "27"))] + HaltWhoGoesThere = 27u8, + #[strum(serialize = "FireFireFire", props(docs = r#""#, value = "28"))] + FireFireFire = 28u8, + #[strum(serialize = "One", props(docs = r#""#, value = "29"))] + One = 29u8, + #[strum(serialize = "Two", props(docs = r#""#, value = "30"))] + Two = 30u8, #[strum(serialize = "Three", props(docs = r#""#, value = "31"))] Three = 31u8, + #[strum(serialize = "Four", props(docs = r#""#, value = "32"))] + Four = 32u8, + #[strum(serialize = "Five", props(docs = r#""#, value = "33"))] + Five = 33u8, + #[strum(serialize = "Floor", props(docs = r#""#, value = "34"))] + Floor = 34u8, + #[strum(serialize = "RocketLaunching", props(docs = r#""#, value = "35"))] + RocketLaunching = 35u8, + #[strum(serialize = "LiftOff", props(docs = r#""#, value = "36"))] + LiftOff = 36u8, #[strum(serialize = "TraderIncoming", props(docs = r#""#, value = "37"))] TraderIncoming = 37u8, #[strum(serialize = "TraderLanded", props(docs = r#""#, value = "38"))] TraderLanded = 38u8, - #[strum(serialize = "Two", props(docs = r#""#, value = "30"))] - Two = 30u8, - #[strum(serialize = "Warning", props(docs = r#""#, value = "16"))] - Warning = 16u8, - #[strum(serialize = "Welcome", props(docs = r#""#, value = "25"))] - Welcome = 25u8, + #[strum(serialize = "PressureHigh", props(docs = r#""#, value = "39"))] + PressureHigh = 39u8, + #[strum(serialize = "PressureLow", props(docs = r#""#, value = "40"))] + PressureLow = 40u8, + #[strum(serialize = "TemperatureHigh", props(docs = r#""#, value = "41"))] + TemperatureHigh = 41u8, + #[strum(serialize = "TemperatureLow", props(docs = r#""#, value = "42"))] + TemperatureLow = 42u8, + #[strum(serialize = "PollutantsDetected", props(docs = r#""#, value = "43"))] + PollutantsDetected = 43u8, + #[strum(serialize = "HighCarbonDioxide", props(docs = r#""#, value = "44"))] + HighCarbonDioxide = 44u8, + #[strum(serialize = "Alarm1", props(docs = r#""#, value = "45"))] + Alarm1 = 45u8, } #[derive( Debug, @@ -2919,10 +2941,10 @@ pub enum SoundAlert { #[strum(use_phf)] #[repr(u8)] pub enum LogicTransmitterMode { - #[strum(serialize = "Active", props(docs = r#""#, value = "1"))] - Active = 1u8, #[strum(serialize = "Passive", props(docs = r#""#, value = "0"))] Passive = 0u8, + #[strum(serialize = "Active", props(docs = r#""#, value = "1"))] + Active = 1u8, } #[derive( Debug, @@ -2945,10 +2967,10 @@ pub enum LogicTransmitterMode { #[strum(use_phf)] #[repr(u8)] pub enum VentDirection { - #[strum(serialize = "Inward", props(docs = r#""#, value = "1"))] - Inward = 1u8, #[strum(serialize = "Outward", props(docs = r#""#, value = "0"))] Outward = 0u8, + #[strum(serialize = "Inward", props(docs = r#""#, value = "1"))] + Inward = 1u8, } #[derive( Debug, diff --git a/ic10emu/src/vm/enums/prefabs.rs b/ic10emu/src/vm/enums/prefabs.rs index 657236e..57788fb 100644 --- a/ic10emu/src/vm/enums/prefabs.rs +++ b/ic10emu/src/vm/enums/prefabs.rs @@ -33,414 +33,57 @@ use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; #[repr(i32)] pub enum StationpediaPrefab { #[strum( - serialize = "DynamicGPR", - props( - name = r#""#, - desc = r#""#, - value = "-2085885850" - ) + serialize = "ItemKitGroundTelescope", + props(name = r#"Kit (Telescope)"#, desc = r#""#, value = "-2140672772") )] - DynamicGpr = -2085885850i32, + ItemKitGroundTelescope = -2140672772i32, #[strum( - serialize = "ItemAuthoringToolRocketNetwork", + serialize = "StructureSmallSatelliteDish", props( - name = r#""#, - desc = r#""#, - value = "-1731627004" - ) - )] - ItemAuthoringToolRocketNetwork = -1731627004i32, - #[strum( - serialize = "MonsterEgg", - props( - name = r#""#, - desc = r#""#, - value = "-1667675295" - ) - )] - MonsterEgg = -1667675295i32, - #[strum( - serialize = "MotherboardMissionControl", - props( - name = r#""#, - desc = r#""#, - value = "-127121474" - ) - )] - MotherboardMissionControl = -127121474i32, - #[strum( - serialize = "StructureCableCorner3HBurnt", - props( - name = r#""#, - desc = r#""#, - value = "2393826" - ) - )] - StructureCableCorner3HBurnt = 2393826i32, - #[strum( - serialize = "StructureDrinkingFountain", - props( - name = r#""#, - desc = r#""#, - value = "1968371847" - ) - )] - StructureDrinkingFountain = 1968371847i32, - #[strum( - serialize = "Robot", - props( - name = r#"AIMeE Bot"#, - desc = r#"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. + name = r#"Small Satellite Dish"#, + desc = r#"This small communications unit can be used to communicate with nearby trade vessels. -Intended to unearth and retrieve ores automatically, the unit requires basic programming knowledge to operate, and IC Editor Motherboard. - -AIMEe has 7 modes: - -RobotMode.None = 0 = Do nothing -RobotMode.None = 1 = Follow nearest player -RobotMode.None = 2 = Move to target in straight line -RobotMode.None = 3 = Wander around looking for ores in 15 co-ords radius -RobotMode.None = 4 = Unload in chute input or chute bin within 3 meters / 1.5 large grids -RobotMode.None = 5 = Path(find) to target -RobotMode.None = 6 = Automatic assigned state, shows when storage slots are fullConnects to Logic Transmitter"#, - value = "434786784" + 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."#, + value = "-2138748650" ) )] - Robot = 434786784i32, + StructureSmallSatelliteDish = -2138748650i32, #[strum( - serialize = "StructureAccessBridge", + serialize = "StructureStairwellBackRight", props( - name = r#"Access Bridge"#, - desc = r#"Extendable bridge that spans three grids"#, - value = "1298920475" - ) - )] - StructureAccessBridge = 1298920475i32, - #[strum( - serialize = "AccessCardBlack", - props(name = r#"Access Card (Black)"#, desc = r#""#, value = "-1330388999") - )] - AccessCardBlack = -1330388999i32, - #[strum( - serialize = "AccessCardBlue", - props(name = r#"Access Card (Blue)"#, desc = r#""#, value = "-1411327657") - )] - AccessCardBlue = -1411327657i32, - #[strum( - serialize = "AccessCardBrown", - props(name = r#"Access Card (Brown)"#, desc = r#""#, value = "1412428165") - )] - AccessCardBrown = 1412428165i32, - #[strum( - serialize = "AccessCardGray", - props(name = r#"Access Card (Gray)"#, desc = r#""#, value = "-1339479035") - )] - AccessCardGray = -1339479035i32, - #[strum( - serialize = "AccessCardGreen", - props(name = r#"Access Card (Green)"#, desc = r#""#, value = "-374567952") - )] - AccessCardGreen = -374567952i32, - #[strum( - serialize = "AccessCardKhaki", - props(name = r#"Access Card (Khaki)"#, desc = r#""#, value = "337035771") - )] - AccessCardKhaki = 337035771i32, - #[strum( - serialize = "AccessCardOrange", - props(name = r#"Access Card (Orange)"#, desc = r#""#, value = "-332896929") - )] - AccessCardOrange = -332896929i32, - #[strum( - serialize = "AccessCardPink", - props(name = r#"Access Card (Pink)"#, desc = r#""#, value = "431317557") - )] - AccessCardPink = 431317557i32, - #[strum( - serialize = "AccessCardPurple", - props(name = r#"Access Card (Purple)"#, desc = r#""#, value = "459843265") - )] - AccessCardPurple = 459843265i32, - #[strum( - serialize = "AccessCardRed", - props(name = r#"Access Card (Red)"#, desc = r#""#, value = "-1713748313") - )] - AccessCardRed = -1713748313i32, - #[strum( - serialize = "AccessCardWhite", - props(name = r#"Access Card (White)"#, desc = r#""#, value = "2079959157") - )] - AccessCardWhite = 2079959157i32, - #[strum( - serialize = "AccessCardYellow", - props(name = r#"Access Card (Yellow)"#, desc = r#""#, value = "568932536") - )] - AccessCardYellow = 568932536i32, - #[strum( - serialize = "StructureLiquidDrain", - props( - name = r#"Active Liquid Outlet"#, - desc = r#"When connected to power and activated, it pumps liquid from a liquid network into the world."#, - value = "1687692899" - ) - )] - StructureLiquidDrain = 1687692899i32, - #[strum( - serialize = "StructureActiveVent", - props( - name = r#"Active Vent"#, - desc = r#"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 = "ItemAdhesiveInsulation", - props(name = r#"Adhesive Insulation"#, desc = r#""#, value = "1871048978") - )] - ItemAdhesiveInsulation = 1871048978i32, - #[strum( - serialize = "CircuitboardAdvAirlockControl", - props(name = r#"Advanced Airlock"#, desc = r#""#, value = "1633663176") - )] - CircuitboardAdvAirlockControl = 1633663176i32, - #[strum( - serialize = "StructureAdvancedComposter", - props( - name = r#"Advanced Composter"#, - desc = r#"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. -When processing, it releases nitrogen and volatiles, as well a small amount of heat. - -Compost composition -Fertilizer 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. - -- Food increases PLANT YIELD up to two times -- Decayed Food increases plant GROWTH SPEED up to two times -- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for up to five times -"#, - value = "446212963" - ) - )] - StructureAdvancedComposter = 446212963i32, - #[strum( - serialize = "StructureAdvancedFurnace", - props( - name = r#"Advanced Furnace"#, - desc = r#"The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure."#, - value = "545937711" - ) - )] - StructureAdvancedFurnace = 545937711i32, - #[strum( - serialize = "StructureAdvancedPackagingMachine", - props( - name = r#"Advanced Packaging Machine"#, - desc = r#"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 = "ItemAdvancedTablet", - props( - name = r#"Advanced Tablet"#, - desc = r#"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. - - 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 = "StructureAirConditioner", - props( - name = r#"Air Conditioner"#, - desc = r#"Built using the Kit (Atmospherics), the ExMin-designed air conditioner is used to raise or lower input gas temperature. - -The 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. - -Multiple 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. - -Pipe Convection Radiators may be useful in bringing extreme pipe temperatures back towards normal world temperatures. - -For more information on using the air conditioner, consult the temperature control Guides page."#, - value = "-2087593337" - ) - )] - StructureAirConditioner = -2087593337i32, - #[strum( - serialize = "CircuitboardAirControl", - props( - name = r#"Air Control"#, - desc = r#"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 = "CircuitboardAirlockControl", - props( - name = r#"Airlock"#, - desc = r#"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. - -To 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 = "StructureAirlock", - props( - name = r#"Airlock"#, - desc = r#"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 = "ImGuiCircuitboardAirlockControl", - props(name = r#"Airlock (Experimental)"#, desc = r#""#, value = "-73796547") - )] - ImGuiCircuitboardAirlockControl = -73796547i32, - #[strum( - serialize = "ItemAlienMushroom", - props(name = r#"Alien Mushroom"#, desc = r#""#, value = "176446172") - )] - ItemAlienMushroom = 176446172i32, - #[strum( - serialize = "ItemAmmoBox", - props(name = r#"Ammo Box"#, desc = r#""#, value = "-9559091") - )] - ItemAmmoBox = -9559091i32, - #[strum( - serialize = "ItemAngleGrinder", - props( - name = r#"Angle Grinder"#, - desc = r#"Angles-be-gone with the trusty angle grinder."#, - value = "201215010" - ) - )] - ItemAngleGrinder = 201215010i32, - #[strum( - serialize = "ApplianceDeskLampLeft", - props( - name = r#"Appliance Desk Lamp Left"#, + name = r#"Stairwell (Back Right)"#, desc = r#""#, - value = "-1683849799" + value = "-2128896573" ) )] - ApplianceDeskLampLeft = -1683849799i32, + StructureStairwellBackRight = -2128896573i32, #[strum( - serialize = "ApplianceDeskLampRight", + serialize = "StructureBench2", props( - name = r#"Appliance Desk Lamp Right"#, + name = r#"Bench (High Tech Style)"#, desc = r#""#, - value = "1174360780" + value = "-2127086069" ) )] - ApplianceDeskLampRight = 1174360780i32, + StructureBench2 = -2127086069i32, #[strum( - serialize = "ApplianceSeedTray", + serialize = "ItemLiquidPipeValve", props( - name = r#"Appliance Seed Tray"#, - desc = r#"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" + name = r#"Kit (Liquid Pipe Valve)"#, + desc = r#"This kit creates a Liquid Valve."#, + value = "-2126113312" ) )] - ApplianceSeedTray = 142831994i32, + ItemLiquidPipeValve = -2126113312i32, #[strum( - serialize = "StructureArcFurnace", + serialize = "ItemDisposableBatteryCharger", props( - name = r#"Arc Furnace"#, - desc = r#"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. -Co-opted by the ODA, it now provides Stationeers with a way to produce pure ingots of various resources. -The 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. -Unlike the more advanced Furnace, the arc furnace cannot create alloys."#, - value = "-247344692" + name = r#"Disposable Battery Charger"#, + desc = r#"Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery."#, + value = "-2124435700" ) )] - StructureArcFurnace = -247344692i32, - #[strum( - serialize = "ItemArcWelder", - props(name = r#"Arc Welder"#, desc = r#""#, value = "1385062886") - )] - ItemArcWelder = 1385062886i32, - #[strum( - serialize = "StructureAreaPowerControlReversed", - props( - name = r#"Area Power Control"#, - desc = r#"An Area Power Control (APC) has three main functions. -Its primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. -APCs also create sub-networks, as no devices on the far side of an APC are visible on the main network. -Lastly, 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 = "StructureAreaPowerControl", - props( - name = r#"Area Power Control"#, - desc = r#"An Area Power Control (APC) has three main functions: -Its primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. -APCs also create sub-networks, as no devices on the far side of an APC are visible on the main network. -Lastly, 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 = "ItemAstroloySheets", - props(name = r#"Astroloy Sheets"#, desc = r#""#, value = "-1662476145") - )] - ItemAstroloySheets = -1662476145i32, - #[strum( - serialize = "CartridgeAtmosAnalyser", - props( - name = r#"Atmos Analyzer"#, - desc = r#"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 = "ItemAuthoringTool", - props(name = r#"Authoring Tool"#, desc = r#""#, value = "789015045") - )] - ItemAuthoringTool = 789015045i32, - #[strum( - serialize = "StructureAutolathe", - props( - name = r#"Autolathe"#, - desc = r#"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. - "#, - value = "336213101" - ) - )] - StructureAutolathe = 336213101i32, - #[strum( - serialize = "AutolathePrinterMod", - props( - name = r#"Autolathe Printer Mod"#, - desc = r#"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 = "StructureAutomatedOven", - props(name = r#"Automated Oven"#, desc = r#""#, value = "-1672404896") - )] - StructureAutomatedOven = -1672404896i32, - #[strum( - serialize = "StructureAutoMinerSmall", - props( - name = r#"Autominer (Small)"#, - desc = r#"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, + ItemDisposableBatteryCharger = -2124435700i32, #[strum( serialize = "StructureBatterySmall", props( @@ -456,6 +99,2422 @@ Lastly, an APC charges batteries, which can provide backup power to the sub-netw ) )] StructureBatterySmall = -2123455080i32, + #[strum( + serialize = "StructureLiquidPipeAnalyzer", + props(name = r#"Liquid Pipe Analyzer"#, desc = r#""#, value = "-2113838091") + )] + StructureLiquidPipeAnalyzer = -2113838091i32, + #[strum( + serialize = "ItemGasTankStorage", + props( + name = r#"Kit (Canister Storage)"#, + desc = r#"This kit produces a Kit (Canister Storage) for refilling a Canister."#, + value = "-2113012215" + ) + )] + ItemGasTankStorage = -2113012215i32, + #[strum( + serialize = "StructureFrameCorner", + props( + name = r#"Steel Frame (Corner)"#, + desc = r#"More durable than the Iron Frame, steel frames also offer several variations for more complex lattice constructions. +With 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", + props(name = r#"Baked Potato"#, desc = r#""#, value = "-2111886401") + )] + ItemPotatoBaked = -2111886401i32, + #[strum( + serialize = "ItemFlashingLight", + props(name = r#"Kit (Flashing Light)"#, desc = r#""#, value = "-2107840748") + )] + ItemFlashingLight = -2107840748i32, + #[strum( + serialize = "ItemLiquidPipeVolumePump", + props( + name = r#"Kit (Liquid Volume Pump)"#, + desc = r#""#, + value = "-2106280569" + ) + )] + ItemLiquidPipeVolumePump = -2106280569i32, + #[strum( + serialize = "StructureAirlock", + props( + name = r#"Airlock"#, + desc = r#"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", + props( + name = r#"Canned Condensed Milk"#, + desc = r#"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", + props( + name = r#"Kit (Hydraulic Pipe Bender)"#, + desc = r#""#, + value = "-2098556089" + ) + )] + ItemKitHydraulicPipeBender = -2098556089i32, + #[strum( + serialize = "ItemKitLogicMemory", + props(name = r#"Kit (Logic Memory)"#, desc = r#""#, value = "-2098214189") + )] + ItemKitLogicMemory = -2098214189i32, + #[strum( + serialize = "StructureInteriorDoorGlass", + props( + name = r#"Interior Door Glass"#, + desc = r#"0.Operate +1.Logic"#, + value = "-2096421875" + ) + )] + StructureInteriorDoorGlass = -2096421875i32, + #[strum( + serialize = "StructureAirConditioner", + props( + name = r#"Air Conditioner"#, + desc = r#"Built using the Kit (Atmospherics), the ExMin-designed air conditioner is used to raise or lower input gas temperature. + +The 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. + +Multiple 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. + +Pipe Convection Radiators may be useful in bringing extreme pipe temperatures back towards normal world temperatures. + +For more information on using the air conditioner, consult the temperature control Guides page."#, + value = "-2087593337" + ) + )] + StructureAirConditioner = -2087593337i32, + #[strum( + serialize = "StructureRocketMiner", + props( + name = r#"Rocket Miner"#, + desc = r#"Gathers available resources at the rocket's current space location."#, + value = "-2087223687" + ) + )] + StructureRocketMiner = -2087223687i32, + #[strum( + serialize = "DynamicGPR", + props( + name = r#""#, + desc = r#""#, + value = "-2085885850" + ) + )] + DynamicGpr = -2085885850i32, + #[strum( + serialize = "UniformCommander", + props(name = r#"Uniform Commander"#, desc = r#""#, value = "-2083426457") + )] + UniformCommander = -2083426457i32, + #[strum( + serialize = "StructureWindTurbine", + props( + name = r#"Wind Turbine"#, + desc = r#"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. +While 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 = "StructureInsulatedPipeTJunction", + props( + name = r#"Insulated Pipe (T Junction)"#, + desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, + value = "-2076086215" + ) + )] + StructureInsulatedPipeTJunction = -2076086215i32, + #[strum( + serialize = "ItemPureIcePollutedWater", + props( + name = r#"Pure Ice Polluted Water"#, + desc = r#"A frozen chunk of Polluted Water"#, + value = "-2073202179" + ) + )] + ItemPureIcePollutedWater = -2073202179i32, + #[strum( + serialize = "RailingIndustrial02", + props( + name = r#"Railing Industrial (Type 2)"#, + desc = r#""#, + value = "-2072792175" + ) + )] + RailingIndustrial02 = -2072792175i32, + #[strum( + serialize = "StructurePipeInsulatedLiquidCrossJunction", + props( + name = r#"Insulated Liquid Pipe (Cross Junction)"#, + desc = r#"Liquid piping with very low temperature loss or gain."#, + value = "-2068497073" + ) + )] + StructurePipeInsulatedLiquidCrossJunction = -2068497073i32, + #[strum( + serialize = "ItemWeldingTorch", + props( + name = r#"Welding Torch"#, + desc = r#"Stored in the standard issue Stationeers Tool Belt, the Arlite welding torch is used to construct a range of essential structures. +An 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", + props( + name = r#"Picture Frame Thick Mount Portrait Small"#, + desc = r#""#, + value = "-2066653089" + ) + )] + StructurePictureFrameThickMountPortraitSmall = -2066653089i32, + #[strum( + serialize = "Landingpad_DataConnectionPiece", + props( + name = r#"Landingpad Data And Power"#, + desc = r#"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", + props(name = r#"Kit Picture Frame"#, desc = r#""#, value = "-2062364768") + )] + ItemKitPictureFrame = -2062364768i32, + #[strum( + serialize = "ItemMKIIArcWelder", + props(name = r#"Mk II Arc Welder"#, desc = r#""#, value = "-2061979347") + )] + ItemMkiiArcWelder = -2061979347i32, + #[strum( + serialize = "StructureCompositeWindow", + props( + name = r#"Composite Window"#, + desc = r#"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", + props(name = r#"Emergency Drill"#, desc = r#""#, value = "-2052458905") + )] + ItemEmergencyDrill = -2052458905i32, + #[strum( + serialize = "Rover_MkI", + props( + name = r#"Rover MkI"#, + desc = r#"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). +A 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", + props( + name = r#"Solar Panel"#, + desc = r#"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", + props( + name = r#"Ship Display"#, + desc = r#"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", + props( + name = r#"Powered Bench"#, + desc = r#"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", + props( + name = r#"Picture Frame Thick Landscape Small"#, + desc = r#""#, + value = "-2041566697" + ) + )] + StructurePictureFrameThickLandscapeSmall = -2041566697i32, + #[strum( + serialize = "ItemKitLargeSatelliteDish", + props( + name = r#"Kit (Large Satellite Dish)"#, + desc = r#""#, + value = "-2039971217" + ) + )] + ItemKitLargeSatelliteDish = -2039971217i32, + #[strum( + serialize = "ItemKitMusicMachines", + props(name = r#"Kit (Music Machines)"#, desc = r#""#, value = "-2038889137") + )] + ItemKitMusicMachines = -2038889137i32, + #[strum( + serialize = "ItemStelliteGlassSheets", + props( + name = r#"Stellite Glass Sheets"#, + desc = r#"A stronger glass substitute."#, + value = "-2038663432" + ) + )] + ItemStelliteGlassSheets = -2038663432i32, + #[strum( + serialize = "ItemKitVendingMachine", + props(name = r#"Kit (Vending Machine)"#, desc = r#""#, value = "-2038384332") + )] + ItemKitVendingMachine = -2038384332i32, + #[strum( + serialize = "StructurePumpedLiquidEngine", + props( + name = r#"Pumped Liquid Engine"#, + desc = r#"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", + props( + name = r#"Picture Frame Thin Landscape Small"#, + desc = r#""#, + value = "-2024250974" + ) + )] + StructurePictureFrameThinLandscapeSmall = -2024250974i32, + #[strum( + serialize = "StructureStacker", + props( + name = r#"Stacker"#, + desc = r#"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 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", + props( + name = r#"Mk II Screwdriver"#, + desc = r#"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", + props(name = r#"Trigger Plate (Large)"#, desc = r#""#, value = "-2008706143") + )] + StructurePressurePlateLarge = -2008706143i32, + #[strum( + serialize = "StructurePipeLiquidCrossJunction5", + props( + name = r#"Liquid Pipe (5-Way Junction)"#, + desc = r#"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", + props( + name = r#"Filter (Water)"#, + desc = r#"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", + props( + name = r#"Space Shuttle"#, + desc = r#"An antiquated Sinotai transport craft, long since decommissioned."#, + value = "-1991297271" + ) + )] + SpaceShuttle = -1991297271i32, + #[strum( + serialize = "SeedBag_Fern", + props( + name = r#"Fern Seeds"#, + desc = r#"Grow a Fern."#, + value = "-1990600883" + ) + )] + SeedBagFern = -1990600883i32, + #[strum( + serialize = "ItemSecurityCamera", + props( + name = r#"Security Camera"#, + desc = r#"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", + props(name = r#"Cardboard Box"#, desc = r#""#, value = "-1976947556") + )] + CardboardBox = -1976947556i32, + #[strum( + serialize = "ItemSoundCartridgeSynth", + props(name = r#"Sound Cartridge Synth"#, desc = r#""#, value = "-1971419310") + )] + ItemSoundCartridgeSynth = -1971419310i32, + #[strum( + serialize = "StructureCornerLocker", + props(name = r#"Corner Locker"#, desc = r#""#, value = "-1968255729") + )] + StructureCornerLocker = -1968255729i32, + #[strum( + serialize = "StructureInsulatedPipeCorner", + props( + name = r#"Insulated Pipe (Corner)"#, + desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, + value = "-1967711059" + ) + )] + StructureInsulatedPipeCorner = -1967711059i32, + #[strum( + serialize = "StructureWallArchCornerSquare", + props( + name = r#"Wall (Arch Corner Square)"#, + desc = r#""#, + value = "-1963016580" + ) + )] + StructureWallArchCornerSquare = -1963016580i32, + #[strum( + serialize = "StructureControlChair", + props( + name = r#"Control Chair"#, + desc = r#"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", + props( + name = r#"Portable Composter"#, + desc = r#"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. +When processing, it releases nitrogen and volatiles, as well a small amount of heat. + +Compost composition +Fertilizer 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. + +- food increases PLANT YIELD up to two times +- Decayed Food increases plant GROWTH SPEED up to two times +- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for"#, + value = "-1958705204" + ) + )] + PortableComposter = -1958705204i32, + #[strum( + serialize = "CartridgeGPS", + props(name = r#"GPS"#, desc = r#""#, value = "-1957063345") + )] + CartridgeGps = -1957063345i32, + #[strum( + serialize = "StructureConsoleLED1x3", + props( + name = r#"LED Display (Large)"#, + desc = r#"0.Default +1.Percent +2.Power"#, + value = "-1949054743" + ) + )] + StructureConsoleLed1X3 = -1949054743i32, + #[strum( + serialize = "ItemDuctTape", + props( + name = r#"Duct Tape"#, + desc = r#"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. +To 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", + props( + name = r#"Portable Liquid Tank"#, + desc = r#"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", + props(name = r#"Kit (Deep Miner)"#, desc = r#""#, value = "-1935075707") + )] + ItemKitDeepMiner = -1935075707i32, + #[strum( + serialize = "ItemKitAutomatedOven", + props(name = r#"Kit (Automated Oven)"#, desc = r#""#, value = "-1931958659") + )] + ItemKitAutomatedOven = -1931958659i32, + #[strum( + serialize = "MothershipCore", + props( + name = r#"Mothership Core"#, + desc = r#"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", + props(name = r#"Kit (Solar Panel)"#, desc = r#""#, value = "-1924492105") + )] + ItemKitSolarPanel = -1924492105i32, + #[strum( + serialize = "CircuitboardPowerControl", + props( + name = r#"Power Control"#, + desc = r#"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. + +The 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", + props( + name = r#"Tomato Seeds"#, + desc = r#"Grow a Tomato."#, + value = "-1922066841" + ) + )] + SeedBagTomato = -1922066841i32, + #[strum( + serialize = "StructureChuteUmbilicalFemale", + props( + name = r#"Umbilical Socket (Chute)"#, + desc = r#""#, + value = "-1918892177" + ) + )] + StructureChuteUmbilicalFemale = -1918892177i32, + #[strum( + serialize = "StructureMediumConvectionRadiator", + props( + name = r#"Medium Convection Radiator"#, + desc = r#"A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere."#, + value = "-1918215845" + ) + )] + StructureMediumConvectionRadiator = -1918215845i32, + #[strum( + serialize = "ItemGasFilterVolatilesInfinite", + props( + name = r#"Catalytic Filter (Volatiles)"#, + desc = r#"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", + props( + name = r#"Sorter Motherboard"#, + desc = r#"Motherboards are connected to Computers to perform various technical functions. +The 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", + props(name = r#"Sound Cartridge Drums"#, desc = r#""#, value = "-1901500508") + )] + ItemSoundCartridgeDrums = -1901500508i32, + #[strum( + serialize = "StructureFairingTypeA3", + props(name = r#"Fairing (Type A3)"#, desc = r#""#, value = "-1900541738") + )] + StructureFairingTypeA3 = -1900541738i32, + #[strum( + serialize = "RailingElegant02", + props( + name = r#"Railing Elegant (Type 2)"#, + desc = r#""#, + value = "-1898247915" + ) + )] + RailingElegant02 = -1898247915i32, + #[strum( + serialize = "ItemStelliteIngot", + props(name = r#"Ingot (Stellite)"#, desc = r#""#, value = "-1897868623") + )] + ItemStelliteIngot = -1897868623i32, + #[strum( + serialize = "StructureSmallTableBacklessSingle", + props( + name = r#"Small (Table Backless Single)"#, + desc = r#""#, + value = "-1897221677" + ) + )] + StructureSmallTableBacklessSingle = -1897221677i32, + #[strum( + serialize = "StructureHydraulicPipeBender", + props( + name = r#"Hydraulic Pipe Bender"#, + desc = r#"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", + props( + name = r#"Wrench"#, + desc = r#"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 = "ItemSoundCartridgeBass", + props(name = r#"Sound Cartridge Bass"#, desc = r#""#, value = "-1883441704") + )] + ItemSoundCartridgeBass = -1883441704i32, + #[strum( + serialize = "ItemSprayCanGreen", + props( + name = r#"Spray Paint (Green)"#, + desc = r#"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", + props( + name = r#"Pipe (5-Way Junction)"#, + desc = r#"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", + props(name = r#"SDB Hopper"#, desc = r#""#, value = "-1875856925") + )] + StructureSdbHopper = -1875856925i32, + #[strum( + serialize = "ItemMKIIMiningDrill", + props( + name = r#"Mk II Mining Drill"#, + desc = r#"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", + props( + name = r#"Landingpad Taxi Corner"#, + desc = r#""#, + value = "-1872345847" + ) + )] + LandingpadTaxiPieceCorner = -1872345847i32, + #[strum( + serialize = "ItemKitStairwell", + props(name = r#"Kit (Stairwell)"#, desc = r#""#, value = "-1868555784") + )] + ItemKitStairwell = -1868555784i32, + #[strum( + serialize = "ItemKitVendingMachineRefrigerated", + props( + name = r#"Kit (Vending Machine Refrigerated)"#, + desc = r#""#, + value = "-1867508561" + ) + )] + ItemKitVendingMachineRefrigerated = -1867508561i32, + #[strum( + serialize = "ItemKitGasUmbilical", + props(name = r#"Kit (Gas Umbilical)"#, desc = r#""#, value = "-1867280568") + )] + ItemKitGasUmbilical = -1867280568i32, + #[strum( + serialize = "ItemBatteryCharger", + props( + name = r#"Kit (Battery Charger)"#, + desc = r#"This kit produces a 5-slot Kit (Battery Charger)."#, + value = "-1866880307" + ) + )] + ItemBatteryCharger = -1866880307i32, + #[strum( + serialize = "ItemMuffin", + props( + name = r#"Muffin"#, + desc = r#"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", + props( + name = r#"Kit (Portable Hydroponics)"#, + desc = r#""#, + value = "-1861154222" + ) + )] + ItemKitDynamicHydroponics = -1861154222i32, + #[strum( + serialize = "StructureWallLight", + props(name = r#"Wall Light"#, desc = r#""#, value = "-1860064656") + )] + StructureWallLight = -1860064656i32, + #[strum( + serialize = "StructurePipeLiquidCorner", + props( + name = r#"Liquid Pipe (Corner)"#, + desc = r#"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", + props( + name = r#"Liquid Canister (Water)"#, + desc = r#""#, + value = "-1854861891" + ) + )] + ItemGasCanisterWater = -1854861891i32, + #[strum( + serialize = "ItemKitLaunchMount", + props(name = r#"Kit (Launch Mount)"#, desc = r#""#, value = "-1854167549") + )] + ItemKitLaunchMount = -1854167549i32, + #[strum( + serialize = "DeviceLfoVolume", + props( + name = r#"Low frequency oscillator"#, + desc = r#"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. + +To set up an LFO: + +1. Place the LFO unit +2. Set the LFO output to a Passive Speaker +2. Set a sequencers' output to LFO - so the sequencer's signal runs through the LFO to a speaker. +3. Place a Stop Watch or use an existing one, then use a Logic Writer to write it to the LFO. +4. Use another logic writer to write the BPM to the LFO. +5. You are ready. This is the future. You're in space. Make it sound cool. + +For more info, check out the music page."#, + value = "-1844430312" + ) + )] + DeviceLfoVolume = -1844430312i32, + #[strum( + serialize = "StructureCableCornerH3", + props( + name = r#"Heavy Cable (3-Way Corner)"#, + desc = r#""#, + value = "-1843379322" + ) + )] + StructureCableCornerH3 = -1843379322i32, + #[strum( + serialize = "StructureCompositeCladdingAngledCornerInner", + props( + name = r#"Composite Cladding (Angled Corner Inner)"#, + desc = r#""#, + value = "-1841871763" + ) + )] + StructureCompositeCladdingAngledCornerInner = -1841871763i32, + #[strum( + serialize = "StructureHydroponicsTrayData", + props( + name = r#"Hydroponics Device"#, + desc = r#"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. +It 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", + props( + name = r#"Kit (Insulated Pipe Utility Liquid)"#, + desc = r#""#, + value = "-1831558953" + ) + )] + ItemKitInsulatedPipeUtilityLiquid = -1831558953i32, + #[strum( + serialize = "ItemKitWall", + props(name = r#"Kit (Wall)"#, desc = r#""#, value = "-1826855889") + )] + ItemKitWall = -1826855889i32, + #[strum( + serialize = "ItemWreckageAirConditioner1", + props( + name = r#"Wreckage Air Conditioner"#, + desc = r#""#, + value = "-1826023284" + ) + )] + ItemWreckageAirConditioner1 = -1826023284i32, + #[strum( + serialize = "ItemKitStirlingEngine", + props(name = r#"Kit (Stirling Engine)"#, desc = r#""#, value = "-1821571150") + )] + ItemKitStirlingEngine = -1821571150i32, + #[strum( + serialize = "StructureGasUmbilicalMale", + props( + name = r#"Umbilical (Gas)"#, + desc = r#"0.Left +1.Center +2.Right"#, + value = "-1814939203" + ) + )] + StructureGasUmbilicalMale = -1814939203i32, + #[strum( + serialize = "StructureSleeperRight", + props( + name = r#"Sleeper Right"#, + desc = r#"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", + props( + name = r#"Manual Hatch"#, + desc = r#"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", + props( + name = r#"Ice (Oxite)"#, + desc = r#"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. + +Highly 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", + props( + name = r#"Kit (Turbo Volume Pump - Liquid)"#, + desc = r#""#, + value = "-1805020897" + ) + )] + ItemKitLiquidTurboVolumePump = -1805020897i32, + #[strum( + serialize = "StructureLiquidUmbilicalMale", + props( + name = r#"Umbilical (Liquid)"#, + desc = r#"0.Left +1.Center +2.Right"#, + value = "-1798420047" + ) + )] + StructureLiquidUmbilicalMale = -1798420047i32, + #[strum( + serialize = "StructurePipeMeter", + props( + name = r#"Pipe Meter"#, + desc = r#"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: +"Humble pipe meter +speaks the truth, transmits pressure +within any pipe""#, + value = "-1798362329" + ) + )] + StructurePipeMeter = -1798362329i32, + #[strum( + serialize = "ItemKitUprightWindTurbine", + props( + name = r#"Kit (Upright Wind Turbine)"#, + desc = r#""#, + value = "-1798044015" + ) + )] + ItemKitUprightWindTurbine = -1798044015i32, + #[strum( + serialize = "ItemPipeRadiator", + props( + name = r#"Kit (Radiator)"#, + desc = r#"This kit creates a Pipe Convection Radiator."#, + value = "-1796655088" + ) + )] + ItemPipeRadiator = -1796655088i32, + #[strum( + serialize = "StructureOverheadShortCornerLocker", + props( + name = r#"Overhead Corner Locker"#, + desc = r#""#, + value = "-1794932560" + ) + )] + StructureOverheadShortCornerLocker = -1794932560i32, + #[strum( + serialize = "ItemCableAnalyser", + props(name = r#"Kit (Cable Analyzer)"#, desc = r#""#, value = "-1792787349") + )] + ItemCableAnalyser = -1792787349i32, + #[strum( + serialize = "Landingpad_LiquidConnectorOutwardPiece", + props( + name = r#"Landingpad Liquid Output"#, + desc = r#"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 = "StructurePipeCorner", + props( + name = r#"Pipe (Corner)"#, + desc = r#"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", + props(name = r#"Kit (Sensors)"#, desc = r#""#, value = "-1776897113") + )] + ItemKitSensor = -1776897113i32, + #[strum( + serialize = "ItemReusableFireExtinguisher", + props( + name = r#"Fire Extinguisher (Reusable)"#, + desc = r#"Requires a canister filled with any inert liquid to opperate."#, + value = "-1773192190" + ) + )] + ItemReusableFireExtinguisher = -1773192190i32, + #[strum( + serialize = "CartridgeOreScanner", + props( + name = r#"Ore Scanner"#, + desc = r#"When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet."#, + value = "-1768732546" + ) + )] + CartridgeOreScanner = -1768732546i32, + #[strum( + serialize = "ItemPipeVolumePump", + props( + name = r#"Kit (Volume Pump)"#, + desc = r#"This kit creates a Volume Pump."#, + value = "-1766301997" + ) + )] + ItemPipeVolumePump = -1766301997i32, + #[strum( + serialize = "StructureGrowLight", + props( + name = r#"Grow Light"#, + desc = r#"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", + props( + name = r#"Hardsuit"#, + desc = r#"Connects to Logic Transmitter"#, + value = "-1758310454" + ) + )] + ItemHardSuit = -1758310454i32, + #[strum( + serialize = "StructureRailing", + props( + name = r#"Railing Industrial (Type 1)"#, + desc = r#""Safety third.""#, + value = "-1756913871" + ) + )] + StructureRailing = -1756913871i32, + #[strum( + serialize = "StructureCableJunction4Burnt", + props( + name = r#"Burnt Cable (4-Way Junction)"#, + desc = r#""#, + value = "-1756896811" + ) + )] + StructureCableJunction4Burnt = -1756896811i32, + #[strum( + serialize = "ItemCreditCard", + props(name = r#"Credit Card"#, desc = r#""#, value = "-1756772618") + )] + ItemCreditCard = -1756772618i32, + #[strum( + serialize = "ItemKitBlastDoor", + props(name = r#"Kit (Blast Door)"#, desc = r#""#, value = "-1755116240") + )] + ItemKitBlastDoor = -1755116240i32, + #[strum( + serialize = "ItemKitAutolathe", + props(name = r#"Kit (Autolathe)"#, desc = r#""#, value = "-1753893214") + )] + ItemKitAutolathe = -1753893214i32, + #[strum( + serialize = "ItemKitPassiveLargeRadiatorGas", + props(name = r#"Kit (Medium Radiator)"#, desc = r#""#, value = "-1752768283") + )] + ItemKitPassiveLargeRadiatorGas = -1752768283i32, + #[strum( + serialize = "StructurePictureFrameThinMountLandscapeSmall", + props( + name = r#"Picture Frame Thin Landscape Small"#, + desc = r#""#, + value = "-1752493889" + ) + )] + StructurePictureFrameThinMountLandscapeSmall = -1752493889i32, + #[strum( + serialize = "ItemPipeHeater", + props( + name = r#"Pipe Heater Kit (Gas)"#, + desc = r#"Creates a Pipe Heater (Gas)."#, + value = "-1751627006" + ) + )] + ItemPipeHeater = -1751627006i32, + #[strum( + serialize = "ItemPureIceLiquidPollutant", + props( + name = r#"Pure Ice Liquid Pollutant"#, + desc = r#"A frozen chunk of pure Liquid Pollutant"#, + value = "-1748926678" + ) + )] + ItemPureIceLiquidPollutant = -1748926678i32, + #[strum( + serialize = "ItemKitDrinkingFountain", + props( + name = r#"Kit (Drinking Fountain)"#, + desc = r#""#, + value = "-1743663875" + ) + )] + ItemKitDrinkingFountain = -1743663875i32, + #[strum( + serialize = "DynamicGasCanisterEmpty", + props( + name = r#"Portable Gas Tank"#, + desc = r#"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", + props( + name = r#"Space Cleaner"#, + desc = r#"There was a time when humanity really wanted to keep space clean. That time has passed."#, + value = "-1737666461" + ) + )] + ItemSpaceCleaner = -1737666461i32, + #[strum( + serialize = "ItemAuthoringToolRocketNetwork", + props( + name = r#""#, + desc = r#""#, + value = "-1731627004" + ) + )] + ItemAuthoringToolRocketNetwork = -1731627004i32, + #[strum( + serialize = "ItemSensorProcessingUnitMesonScanner", + props( + name = r#"Sensor Processing Unit (T-Ray Scanner)"#, + desc = r#"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", + props( + name = r#"Kit (Liquid Wall Cooler)"#, + desc = r#""#, + value = "-1721846327" + ) + )] + ItemWaterWallCooler = -1721846327i32, + #[strum( + serialize = "ItemPureIceLiquidCarbonDioxide", + props( + name = r#"Pure Ice Liquid Carbon Dioxide"#, + desc = r#"A frozen chunk of pure Liquid Carbon Dioxide"#, + value = "-1715945725" + ) + )] + ItemPureIceLiquidCarbonDioxide = -1715945725i32, + #[strum( + serialize = "AccessCardRed", + props(name = r#"Access Card (Red)"#, desc = r#""#, value = "-1713748313") + )] + AccessCardRed = -1713748313i32, + #[strum( + serialize = "DynamicGasCanisterAir", + props( + name = r#"Portable Gas Tank (Air)"#, + desc = r#"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", + props( + name = r#"Motion Sensor"#, + desc = r#"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. +The sensor activates whenever a player enters the grid it is placed on."#, + value = "-1713470563" + ) + )] + StructureMotionSensor = -1713470563i32, + #[strum( + serialize = "ItemCookedPowderedEggs", + props( + name = r#"Powdered Eggs"#, + desc = r#"A high-nutrient cooked food, which can be canned."#, + value = "-1712264413" + ) + )] + ItemCookedPowderedEggs = -1712264413i32, + #[strum( + serialize = "ItemGasCanisterNitrousOxide", + props( + name = r#"Gas Canister (Sleeping)"#, + desc = r#""#, + value = "-1712153401" + ) + )] + ItemGasCanisterNitrousOxide = -1712153401i32, + #[strum( + serialize = "ItemKitHeatExchanger", + props(name = r#"Kit Heat Exchanger"#, desc = r#""#, value = "-1710540039") + )] + ItemKitHeatExchanger = -1710540039i32, + #[strum( + serialize = "ItemPureIceNitrogen", + props( + name = r#"Pure Ice Nitrogen"#, + desc = r#"A frozen chunk of pure Nitrogen"#, + value = "-1708395413" + ) + )] + ItemPureIceNitrogen = -1708395413i32, + #[strum( + serialize = "ItemKitPipeRadiatorLiquid", + props( + name = r#"Kit (Pipe Radiator Liquid)"#, + desc = r#""#, + value = "-1697302609" + ) + )] + ItemKitPipeRadiatorLiquid = -1697302609i32, + #[strum( + serialize = "StructureInLineTankGas1x1", + props( + name = r#"In-Line Tank Small Gas"#, + desc = r#"A small expansion tank that increases the volume of a pipe network."#, + value = "-1693382705" + ) + )] + StructureInLineTankGas1X1 = -1693382705i32, + #[strum( + serialize = "SeedBag_Rice", + props( + name = r#"Rice Seeds"#, + desc = r#"Grow some Rice."#, + value = "-1691151239" + ) + )] + SeedBagRice = -1691151239i32, + #[strum( + serialize = "StructurePictureFrameThickPortraitLarge", + props( + name = r#"Picture Frame Thick Portrait Large"#, + desc = r#""#, + value = "-1686949570" + ) + )] + StructurePictureFrameThickPortraitLarge = -1686949570i32, + #[strum( + serialize = "ApplianceDeskLampLeft", + props( + name = r#"Appliance Desk Lamp Left"#, + desc = r#""#, + value = "-1683849799" + ) + )] + ApplianceDeskLampLeft = -1683849799i32, + #[strum( + serialize = "ItemWreckageWallCooler1", + props(name = r#"Wreckage Wall Cooler"#, desc = r#""#, value = "-1682930158") + )] + ItemWreckageWallCooler1 = -1682930158i32, + #[strum( + serialize = "StructureGasUmbilicalFemale", + props( + name = r#"Umbilical Socket (Gas)"#, + desc = r#""#, + value = "-1680477930" + ) + )] + StructureGasUmbilicalFemale = -1680477930i32, + #[strum( + serialize = "ItemGasFilterWaterInfinite", + props( + name = r#"Catalytic Filter (Water)"#, + desc = r#"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", + props( + name = r#"CounterFlow Heat Exchanger - Gas + Gas"#, + desc = r#"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. + Balancing the throughput of both inputs is key to creating a good exhange of temperatures."#, + value = "-1674187440" + ) + )] + StructurePassthroughHeatExchangerGasToGas = -1674187440i32, + #[strum( + serialize = "StructureAutomatedOven", + props(name = r#"Automated Oven"#, desc = r#""#, value = "-1672404896") + )] + StructureAutomatedOven = -1672404896i32, + #[strum( + serialize = "StructureElectrolyzer", + props( + name = r#"Electrolyzer"#, + desc = r#"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", + props( + name = r#""#, + desc = r#""#, + value = "-1667675295" + ) + )] + MonsterEgg = -1667675295i32, + #[strum( + serialize = "ItemMiningDrillHeavy", + props( + name = r#"Mining Drill (Heavy)"#, + desc = r#"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", + props(name = r#"Astroloy Sheets"#, desc = r#""#, value = "-1662476145") + )] + ItemAstroloySheets = -1662476145i32, + #[strum( + serialize = "ItemWreckageTurbineGenerator1", + props( + name = r#"Wreckage Turbine Generator"#, + desc = r#""#, + value = "-1662394403" + ) + )] + ItemWreckageTurbineGenerator1 = -1662394403i32, + #[strum( + serialize = "ItemMiningBackPack", + props(name = r#"Mining Backpack"#, desc = r#""#, value = "-1650383245") + )] + ItemMiningBackPack = -1650383245i32, + #[strum( + serialize = "ItemSprayCanGrey", + props( + name = r#"Spray Paint (Grey)"#, + desc = r#"Arguably the most popular color in the universe, grey was invented so designers had something to do."#, + value = "-1645266981" + ) + )] + ItemSprayCanGrey = -1645266981i32, + #[strum( + serialize = "ItemReagentMix", + props( + name = r#"Reagent Mix"#, + desc = r#"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", + props( + name = r#"Cartridge (Access Controller)"#, + desc = r#""#, + value = "-1634532552" + ) + )] + CartridgeAccessController = -1634532552i32, + #[strum( + serialize = "StructureRecycler", + props( + name = r#"Recycler"#, + desc = r#"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", + props( + name = r#"Small (Table Backless Double)"#, + desc = r#""#, + value = "-1633000411" + ) + )] + StructureSmallTableBacklessDouble = -1633000411i32, + #[strum( + serialize = "ItemKitRocketGasFuelTank", + props( + name = r#"Kit (Rocket Gas Fuel Tank)"#, + desc = r#""#, + value = "-1629347579" + ) + )] + ItemKitRocketGasFuelTank = -1629347579i32, + #[strum( + serialize = "StructureStairwellFrontPassthrough", + props( + name = r#"Stairwell (Front Passthrough)"#, + desc = r#""#, + value = "-1625452928" + ) + )] + StructureStairwellFrontPassthrough = -1625452928i32, + #[strum( + serialize = "StructureCableJunctionBurnt", + props( + name = r#"Burnt Cable (Junction)"#, + desc = r#""#, + value = "-1620686196" + ) + )] + StructureCableJunctionBurnt = -1620686196i32, + #[strum( + serialize = "ItemKitPipe", + props(name = r#"Kit (Pipe)"#, desc = r#""#, value = "-1619793705") + )] + ItemKitPipe = -1619793705i32, + #[strum( + serialize = "ItemPureIce", + props( + name = r#"Pure Ice Water"#, + desc = r#"A frozen chunk of pure Water"#, + value = "-1616308158" + ) + )] + ItemPureIce = -1616308158i32, + #[strum( + serialize = "StructureBasketHoop", + props(name = r#"Basket Hoop"#, desc = r#""#, value = "-1613497288") + )] + StructureBasketHoop = -1613497288i32, + #[strum( + serialize = "StructureWallPaddedThinNoBorder", + props( + name = r#"Wall (Padded Thin No Border)"#, + desc = r#""#, + value = "-1611559100" + ) + )] + StructureWallPaddedThinNoBorder = -1611559100i32, + #[strum( + serialize = "StructureTankBig", + props(name = r#"Large Tank"#, desc = r#""#, value = "-1606848156") + )] + StructureTankBig = -1606848156i32, + #[strum( + serialize = "StructureInsulatedTankConnectorLiquid", + props( + name = r#"Insulated Tank Connector Liquid"#, + desc = r#""#, + value = "-1602030414" + ) + )] + StructureInsulatedTankConnectorLiquid = -1602030414i32, + #[strum( + serialize = "ItemKitTurbineGenerator", + props( + name = r#"Kit (Turbine Generator)"#, + desc = r#""#, + value = "-1590715731" + ) + )] + ItemKitTurbineGenerator = -1590715731i32, + #[strum( + serialize = "ItemKitCrateMkII", + props(name = r#"Kit (Crate Mk II)"#, desc = r#""#, value = "-1585956426") + )] + ItemKitCrateMkIi = -1585956426i32, + #[strum( + serialize = "StructureRefrigeratedVendingMachine", + props( + name = r#"Refrigerated Vending Machine"#, + desc = r#"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. +The 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. +NOTE: altering stack sizes DOES NOT update existing stacks within the machine, only those subsequently added. "#, + value = "-1577831321" + ) + )] + StructureRefrigeratedVendingMachine = -1577831321i32, + #[strum( + serialize = "ItemFlowerBlue", + props(name = r#"Flower (Blue)"#, desc = r#""#, value = "-1573623434") + )] + ItemFlowerBlue = -1573623434i32, + #[strum( + serialize = "ItemWallCooler", + props( + name = r#"Kit (Wall Cooler)"#, + desc = r#"This kit creates a Wall Cooler."#, + value = "-1567752627" + ) + )] + ItemWallCooler = -1567752627i32, + #[strum( + serialize = "StructureSolarPanel45", + props( + name = r#"Solar Panel (Angled)"#, + desc = r#"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", + props(name = r#"Canister (Pollutants)"#, desc = r#""#, value = "-1552586384") + )] + ItemGasCanisterPollutants = -1552586384i32, + #[strum( + serialize = "CartridgeAtmosAnalyser", + props( + name = r#"Atmos Analyzer"#, + desc = r#"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", + props( + name = r#"Wall (Padded Arch Lights Fittings)"#, + desc = r#""#, + value = "-1546743960" + ) + )] + StructureWallPaddedArchLightsFittings = -1546743960i32, + #[strum( + serialize = "StructureSolarPanelDualReinforced", + props( + name = r#"Solar Panel (Heavy Dual)"#, + desc = r#"This solar panel is resistant to storm damage."#, + value = "-1545574413" + ) + )] + StructureSolarPanelDualReinforced = -1545574413i32, + #[strum( + serialize = "StructureCableCorner4", + props(name = r#"Cable (4-Way Corner)"#, desc = r#""#, value = "-1542172466") + )] + StructureCableCorner4 = -1542172466i32, + #[strum( + serialize = "StructurePressurePlateSmall", + props(name = r#"Trigger Plate (Small)"#, desc = r#""#, value = "-1536471028") + )] + StructurePressurePlateSmall = -1536471028i32, + #[strum( + serialize = "StructureFlashingLight", + props( + name = r#"Flashing Light"#, + desc = r#"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", + props(name = r#"Fuselage (Type A2)"#, desc = r#""#, value = "-1533287054") + )] + StructureFuselageTypeA2 = -1533287054i32, + #[strum( + serialize = "ItemPipeDigitalValve", + props( + name = r#"Kit (Digital Valve)"#, + desc = r#"This kit creates a Digital Valve."#, + value = "-1532448832" + ) + )] + ItemPipeDigitalValve = -1532448832i32, + #[strum( + serialize = "StructureCableJunctionH5", + props( + name = r#"Heavy Cable (5-Way Junction)"#, + desc = r#""#, + value = "-1530571426" + ) + )] + StructureCableJunctionH5 = -1530571426i32, + #[strum( + serialize = "StructureFlagSmall", + props(name = r#"Small Flag"#, desc = r#""#, value = "-1529819532") + )] + StructureFlagSmall = -1529819532i32, + #[strum( + serialize = "StopWatch", + props(name = r#"Stop Watch"#, desc = r#""#, value = "-1527229051") + )] + StopWatch = -1527229051i32, + #[strum( + serialize = "ItemUraniumOre", + props( + name = r#"Ore (Uranium)"#, + desc = r#"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", + props(name = r#"Landingpad Threshhold"#, desc = r#""#, value = "-1514298582") + )] + LandingpadThreshholdPiece = -1514298582i32, + #[strum( + serialize = "ItemFlowerGreen", + props(name = r#"Flower (Green)"#, desc = r#""#, value = "-1513337058") + )] + ItemFlowerGreen = -1513337058i32, + #[strum( + serialize = "StructureCompositeCladdingAngled", + props( + name = r#"Composite Cladding (Angled)"#, + desc = r#""#, + value = "-1513030150" + ) + )] + StructureCompositeCladdingAngled = -1513030150i32, + #[strum( + serialize = "StructureChairThickSingle", + props(name = r#"Chair (Thick Single)"#, desc = r#""#, value = "-1510009608") + )] + StructureChairThickSingle = -1510009608i32, + #[strum( + serialize = "StructureInsulatedPipeCrossJunction5", + props( + name = r#"Insulated Pipe (5-Way Junction)"#, + desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, + value = "-1505147578" + ) + )] + StructureInsulatedPipeCrossJunction5 = -1505147578i32, + #[strum( + serialize = "ItemNitrice", + props( + name = r#"Ice (Nitrice)"#, + desc = r#"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. + +Highly 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", + props(name = r#"Cargo Storage (Small)"#, desc = r#""#, value = "-1493672123") + )] + StructureCargoStorageSmall = -1493672123i32, + #[strum( + serialize = "StructureLogicCompare", + props( + name = r#"Logic Compare"#, + desc = r#"0.Equals +1.Greater +2.Less +3.NotEquals"#, + value = "-1489728908" + ) + )] + StructureLogicCompare = -1489728908i32, + #[strum( + serialize = "Landingpad_TaxiPieceStraight", + props( + name = r#"Landingpad Taxi Straight"#, + desc = r#""#, + value = "-1477941080" + ) + )] + LandingpadTaxiPieceStraight = -1477941080i32, + #[strum( + serialize = "StructurePassthroughHeatExchangerLiquidToLiquid", + props( + name = r#"CounterFlow Heat Exchanger - Liquid + Liquid"#, + desc = r#"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. + Balancing the throughput of both inputs is key to creating a good exchange of temperatures."#, + value = "-1472829583" + ) + )] + StructurePassthroughHeatExchangerLiquidToLiquid = -1472829583i32, + #[strum( + serialize = "ItemKitCompositeCladding", + props(name = r#"Kit (Cladding)"#, desc = r#""#, value = "-1470820996") + )] + ItemKitCompositeCladding = -1470820996i32, + #[strum( + serialize = "StructureChuteInlet", + props( + name = r#"Chute Inlet"#, + desc = r#"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. +The 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", + props(name = r#"Sleeper"#, desc = r#""#, value = "-1467449329") + )] + StructureSleeper = -1467449329i32, + #[strum( + serialize = "CartridgeElectronicReader", + props(name = r#"eReader"#, desc = r#""#, value = "-1462180176") + )] + CartridgeElectronicReader = -1462180176i32, + #[strum( + serialize = "StructurePictureFrameThickMountPortraitLarge", + props( + name = r#"Picture Frame Thick Mount Portrait Large"#, + desc = r#""#, + value = "-1459641358" + ) + )] + StructurePictureFrameThickMountPortraitLarge = -1459641358i32, + #[strum( + serialize = "ItemSteelFrames", + props( + name = r#"Steel Frames"#, + desc = r#"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", + props( + name = r#"Chute Flip Flop Splitter"#, + desc = r#"A chute that toggles between two outputs"#, + value = "-1446854725" + ) + )] + StructureChuteFlipFlopSplitter = -1446854725i32, + #[strum( + serialize = "StructurePictureFrameThickLandscapeLarge", + props( + name = r#"Picture Frame Thick Landscape Large"#, + desc = r#""#, + value = "-1434523206" + ) + )] + StructurePictureFrameThickLandscapeLarge = -1434523206i32, + #[strum( + serialize = "ItemKitAdvancedComposter", + props( + name = r#"Kit (Advanced Composter)"#, + desc = r#""#, + value = "-1431998347" + ) + )] + ItemKitAdvancedComposter = -1431998347i32, + #[strum( + serialize = "StructureLiquidTankBigInsulated", + props( + name = r#"Insulated Liquid Tank Big"#, + desc = r#""#, + value = "-1430440215" + ) + )] + StructureLiquidTankBigInsulated = -1430440215i32, + #[strum( + serialize = "StructureEvaporationChamber", + props( + name = r#"Evaporation Chamber"#, + desc = r#"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. + 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. + 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", + props( + name = r#"Wall (Geometry T Mirrored)"#, + desc = r#""#, + value = "-1427845483" + ) + )] + StructureWallGeometryTMirrored = -1427845483i32, + #[strum( + serialize = "KitchenTableShort", + props(name = r#"Kitchen Table (Short)"#, desc = r#""#, value = "-1427415566") + )] + KitchenTableShort = -1427415566i32, + #[strum( + serialize = "StructureChairRectangleSingle", + props( + name = r#"Chair (Rectangle Single)"#, + desc = r#""#, + value = "-1425428917" + ) + )] + StructureChairRectangleSingle = -1425428917i32, + #[strum( + serialize = "StructureTransformer", + props( + name = r#"Transformer (Large)"#, + desc = r#"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. +Note that transformers operate as data isolators, preventing data flowing into any network beyond it."#, + value = "-1423212473" + ) + )] + StructureTransformer = -1423212473i32, + #[strum( + serialize = "StructurePictureFrameThinLandscapeLarge", + props( + name = r#"Picture Frame Thin Landscape Large"#, + desc = r#""#, + value = "-1418288625" + ) + )] + StructurePictureFrameThinLandscapeLarge = -1418288625i32, + #[strum( + serialize = "StructureCompositeCladdingAngledCornerInnerLong", + props( + name = r#"Composite Cladding (Angled Corner Inner Long)"#, + desc = r#""#, + value = "-1417912632" + ) + )] + StructureCompositeCladdingAngledCornerInnerLong = -1417912632i32, + #[strum( + serialize = "ItemPlantEndothermic_Genepool2", + props( + name = r#"Winterspawn (Beta variant)"#, + desc = r#"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", + props(name = r#"Flower (Orange)"#, desc = r#""#, value = "-1411986716") + )] + ItemFlowerOrange = -1411986716i32, + #[strum( + serialize = "AccessCardBlue", + props(name = r#"Access Card (Blue)"#, desc = r#""#, value = "-1411327657") + )] + AccessCardBlue = -1411327657i32, + #[strum( + serialize = "StructureWallSmallPanelsOpen", + props( + name = r#"Wall (Small Panels Open)"#, + desc = r#""#, + value = "-1407480603" + ) + )] + StructureWallSmallPanelsOpen = -1407480603i32, + #[strum( + serialize = "ItemNickelIngot", + props(name = r#"Ingot (Nickel)"#, desc = r#""#, value = "-1406385572") + )] + ItemNickelIngot = -1406385572i32, + #[strum( + serialize = "StructurePipeCrossJunction", + props( + name = r#"Pipe (Cross Junction)"#, + desc = r#"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", + props( + name = r#"Cable (6-Way Junction)"#, + desc = r#"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. +Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, + value = "-1404690610" + ) + )] + StructureCableJunction6 = -1404690610i32, + #[strum( + serialize = "ItemPassiveVentInsulated", + props( + name = r#"Kit (Insulated Passive Vent)"#, + desc = r#""#, + value = "-1397583760" + ) + )] + ItemPassiveVentInsulated = -1397583760i32, + #[strum( + serialize = "ItemKitChairs", + props(name = r#"Kit (Chairs)"#, desc = r#""#, value = "-1394008073") + )] + ItemKitChairs = -1394008073i32, + #[strum( + serialize = "StructureBatteryLarge", + props( + name = r#"Station Battery (Large)"#, + desc = r#"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. +There 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.' +POWER OUTPUT +Able 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", + props( + name = r#"Heavy Filter (Nitrogen)"#, + desc = r#""#, + value = "-1387439451" + ) + )] + ItemGasFilterNitrogenL = -1387439451i32, + #[strum( + serialize = "KitchenTableTall", + props(name = r#"Kitchen Table (Tall)"#, desc = r#""#, value = "-1386237782") + )] + KitchenTableTall = -1386237782i32, + #[strum( + serialize = "StructureCapsuleTankGas", + props( + name = r#"Gas Capsule Tank Small"#, + desc = r#""#, + value = "-1385712131" + ) + )] + StructureCapsuleTankGas = -1385712131i32, + #[strum( + serialize = "StructureCryoTubeVertical", + props( + name = r#"Cryo Tube Vertical"#, + desc = r#"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", + props(name = r#"Liquid Wall Cooler"#, desc = r#""#, value = "-1369060582") + )] + StructureWaterWallCooler = -1369060582i32, + #[strum( + serialize = "ItemKitTables", + props(name = r#"Kit (Tables)"#, desc = r#""#, value = "-1361598922") + )] + ItemKitTables = -1361598922i32, + #[strum( + serialize = "ItemResearchCapsuleGreen", + props( + name = r#"Research Capsule Green"#, + desc = r#""#, + value = "-1352732550" + ) + )] + ItemResearchCapsuleGreen = -1352732550i32, + #[strum( + serialize = "StructureLargeHangerDoor", + props( + name = r#"Large Hangar Door"#, + desc = r#"1 x 3 modular door piece for building hangar doors."#, + value = "-1351081801" + ) + )] + StructureLargeHangerDoor = -1351081801i32, + #[strum( + serialize = "ItemGoldOre", + props( + name = r#"Ore (Gold)"#, + desc = r#"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", + props( + name = r#"Canned Mushroom"#, + desc = r#"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", + props(name = r#"Paint Mixer"#, desc = r#""#, value = "-1339716113") + )] + AppliancePaintMixer = -1339716113i32, + #[strum( + serialize = "AccessCardGray", + props(name = r#"Access Card (Gray)"#, desc = r#""#, value = "-1339479035") + )] + AccessCardGray = -1339479035i32, + #[strum( + serialize = "StructureChuteDigitalValveRight", + props( + name = r#"Chute Digital Valve Right"#, + desc = r#"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 = "ItemKitSmallDirectHeatExchanger", + props( + name = r#"Kit (Small Direct Heat Exchanger)"#, + desc = r#""#, + value = "-1332682164" + ) + )] + ItemKitSmallDirectHeatExchanger = -1332682164i32, + #[strum( + serialize = "AccessCardBlack", + props(name = r#"Access Card (Black)"#, desc = r#""#, value = "-1330388999") + )] + AccessCardBlack = -1330388999i32, + #[strum( + serialize = "StructureLogicWriter", + props(name = r#"Logic Writer"#, desc = r#""#, value = "-1326019434") + )] + StructureLogicWriter = -1326019434i32, + #[strum( + serialize = "StructureLogicWriterSwitch", + props(name = r#"Logic Writer Switch"#, desc = r#""#, value = "-1321250424") + )] + StructureLogicWriterSwitch = -1321250424i32, + #[strum( + serialize = "StructureWallIron04", + props(name = r#"Iron Wall (Type 4)"#, desc = r#""#, value = "-1309433134") + )] + StructureWallIron04 = -1309433134i32, + #[strum( + serialize = "ItemPureIceLiquidVolatiles", + props( + name = r#"Pure Ice Liquid Volatiles"#, + desc = r#"A frozen chunk of pure Liquid Volatiles"#, + value = "-1306628937" + ) + )] + ItemPureIceLiquidVolatiles = -1306628937i32, + #[strum( + serialize = "StructureWallLightBattery", + props(name = r#"Wall Light (Battery)"#, desc = r#""#, value = "-1306415132") + )] + StructureWallLightBattery = -1306415132i32, + #[strum( + serialize = "AppliancePlantGeneticAnalyzer", + props( + name = r#"Plant Genetic Analyzer"#, + desc = r#"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. + +Individual Gene Value Widgets: +Most 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. + +Multiple Gene Value Widgets: +For 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", + props( + name = r#"Ingot (Iron)"#, + desc = r#"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", + props( + name = r#"Sleeper Vertical"#, + desc = r#"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", + props( + name = r#"Landingpad 2x2 Center Piece"#, + desc = r#"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", + props( + name = r#"Corn Seeds"#, + desc = r#"Grow a Corn."#, + value = "-1290755415" + ) + )] + SeedBagCorn = -1290755415i32, + #[strum( + serialize = "StructureDigitalValve", + props( + name = r#"Digital Valve"#, + desc = r#"The digital valve allows Stationeers to create logic-controlled valves and pipe networks."#, + value = "-1280984102" + ) + )] + StructureDigitalValve = -1280984102i32, + #[strum( + serialize = "StructureTankConnector", + props( + name = r#"Tank Connector"#, + desc = r#"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", + props( + name = r#"Cryogenic Suit Upgrade"#, + desc = r#"Enables suits with basic cooling functionality to work with cryogenic liquid."#, + value = "-1274308304" + ) + )] + ItemSuitModCryogenicUpgrade = -1274308304i32, + #[strum( + serialize = "ItemKitLandingPadWaypoint", + props( + name = r#"Kit (Landing Pad Runway)"#, + desc = r#""#, + value = "-1267511065" + ) + )] + ItemKitLandingPadWaypoint = -1267511065i32, + #[strum( + serialize = "DynamicGasTankAdvancedOxygen", + props( + name = r#"Portable Gas Tank Mk II (Oxygen)"#, + desc = r#"0.Mode0 +1.Mode1"#, + value = "-1264455519" + ) + )] + DynamicGasTankAdvancedOxygen = -1264455519i32, + #[strum( + serialize = "ItemBasketBall", + props(name = r#"Basket Ball"#, desc = r#""#, value = "-1262580790") + )] + ItemBasketBall = -1262580790i32, + #[strum( + serialize = "ItemSpacepack", + props( + name = r#"Spacepack"#, + desc = r#"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. +Indispensable 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. +USE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move."#, + value = "-1260618380" + ) + )] + ItemSpacepack = -1260618380i32, + #[strum( + serialize = "ItemKitRocketDatalink", + props(name = r#"Kit (Rocket Datalink)"#, desc = r#""#, value = "-1256996603") + )] + ItemKitRocketDatalink = -1256996603i32, + #[strum( + serialize = "StructureGasSensor", + props( + name = r#"Gas Sensor"#, + desc = r#"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", + props( + name = r#"Pure Ice Carbon Dioxide"#, + desc = r#"A frozen chunk of pure Carbon Dioxide"#, + value = "-1251009404" + ) + )] + ItemPureIceCarbonDioxide = -1251009404i32, + #[strum( + serialize = "ItemKitTurboVolumePump", + props( + name = r#"Kit (Turbo Volume Pump - Gas)"#, + desc = r#""#, + value = "-1248429712" + ) + )] + ItemKitTurboVolumePump = -1248429712i32, + #[strum( + serialize = "ItemGasFilterNitrousOxide", + props( + name = r#"Filter (Nitrous Oxide)"#, + desc = r#""#, + value = "-1247674305" + ) + )] + ItemGasFilterNitrousOxide = -1247674305i32, + #[strum( + serialize = "StructureChairThickDouble", + props(name = r#"Chair (Thick Double)"#, desc = r#""#, value = "-1245724402") + )] + StructureChairThickDouble = -1245724402i32, + #[strum( + serialize = "StructureWallPaddingArchVent", + props( + name = r#"Wall (Padding Arch Vent)"#, + desc = r#""#, + value = "-1243329828" + ) + )] + StructureWallPaddingArchVent = -1243329828i32, + #[strum( + serialize = "ItemKitConsole", + props(name = r#"Kit (Consoles)"#, desc = r#""#, value = "-1241851179") + )] + ItemKitConsole = -1241851179i32, + #[strum( + serialize = "ItemKitBeds", + props(name = r#"Kit (Beds)"#, desc = r#""#, value = "-1241256797") + )] + ItemKitBeds = -1241256797i32, + #[strum( + serialize = "StructureFrameIron", + props(name = r#"Iron Frame"#, desc = r#""#, value = "-1240951678") + )] + StructureFrameIron = -1240951678i32, + #[strum( + serialize = "ItemDirtyOre", + props( + name = r#"Dirty Ore"#, + desc = r#"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", + props( + name = r#"Large Direct Heat Exchanger - Gas + Gas"#, + desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, + value = "-1230658883" + ) + )] + StructureLargeDirectHeatExchangeGastoGas = -1230658883i32, + #[strum( + serialize = "ItemSensorProcessingUnitOreScanner", + props( + name = r#"Sensor Processing Unit (Ore Scanner)"#, + desc = r#"The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD."#, + value = "-1219128491" + ) + )] + ItemSensorProcessingUnitOreScanner = -1219128491i32, + #[strum( + serialize = "StructurePictureFrameThickPortraitSmall", + props( + name = r#"Picture Frame Thick Portrait Small"#, + desc = r#""#, + value = "-1218579821" + ) + )] + StructurePictureFrameThickPortraitSmall = -1218579821i32, + #[strum( + serialize = "ItemGasFilterOxygenL", + props(name = r#"Heavy Filter (Oxygen)"#, desc = r#""#, value = "-1217998945") + )] + ItemGasFilterOxygenL = -1217998945i32, + #[strum( + serialize = "Landingpad_LiquidConnectorInwardPiece", + props( + name = r#"Landingpad Liquid Input"#, + desc = r#""#, + value = "-1216167727" + ) + )] + LandingpadLiquidConnectorInwardPiece = -1216167727i32, + #[strum( + serialize = "ItemWreckageStructureWeatherStation008", + props( + name = r#"Wreckage Structure Weather Station"#, + desc = r#""#, + value = "-1214467897" + ) + )] + ItemWreckageStructureWeatherStation008 = -1214467897i32, + #[strum( + serialize = "ItemPlantThermogenic_Creative", + props( + name = r#"Thermogenic Plant Creative"#, + desc = r#""#, + value = "-1208890208" + ) + )] + ItemPlantThermogenicCreative = -1208890208i32, + #[strum( + serialize = "ItemRocketScanningHead", + props(name = r#"Rocket Scanner Head"#, desc = r#""#, value = "-1198702771") + )] + ItemRocketScanningHead = -1198702771i32, + #[strum( + serialize = "StructureCableStraightBurnt", + props( + name = r#"Burnt Cable (Straight)"#, + desc = r#""#, + value = "-1196981113" + ) + )] + StructureCableStraightBurnt = -1196981113i32, + #[strum( + serialize = "ItemHydroponicTray", + props( + name = r#"Kit (Hydroponic Tray)"#, + desc = r#"This kits creates a Hydroponics Tray for growing various plants."#, + value = "-1193543727" + ) + )] + ItemHydroponicTray = -1193543727i32, + #[strum( + serialize = "ItemCannedRicePudding", + props( + name = r#"Canned Rice Pudding"#, + desc = r#"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", + props( + name = r#"In-Line Tank Liquid"#, + desc = r#"A small expansion tank that increases the volume of a pipe network."#, + value = "-1183969663" + ) + )] + StructureInLineTankLiquid1X2 = -1183969663i32, + #[strum( + serialize = "StructureInteriorDoorTriangle", + props( + name = r#"Interior Door Triangle"#, + desc = r#"0.Operate +1.Logic"#, + value = "-1182923101" + ) + )] + StructureInteriorDoorTriangle = -1182923101i32, + #[strum( + serialize = "ItemKitElectronicsPrinter", + props( + name = r#"Kit (Electronics Printer)"#, + desc = r#""#, + value = "-1181922382" + ) + )] + ItemKitElectronicsPrinter = -1181922382i32, + #[strum( + serialize = "StructureWaterBottleFiller", + props(name = r#"Water Bottle Filler"#, desc = r#""#, value = "-1178961954") + )] + StructureWaterBottleFiller = -1178961954i32, + #[strum( + serialize = "StructureWallVent", + props( + name = r#"Wall Vent"#, + desc = r#"Used to mix atmospheres passively between two walls."#, + value = "-1177469307" + ) + )] + StructureWallVent = -1177469307i32, + #[strum( + serialize = "ItemSensorLenses", + props( + name = r#"Sensor Lenses"#, + desc = r#"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", + props(name = r#"Sound Cartridge Leads"#, desc = r#""#, value = "-1174735962") + )] + ItemSoundCartridgeLeads = -1174735962i32, + #[strum( + serialize = "StructureMediumConvectionRadiatorLiquid", + props( + name = r#"Medium Convection Radiator Liquid"#, + desc = r#"A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere."#, + value = "-1169014183" + ) + )] + StructureMediumConvectionRadiatorLiquid = -1169014183i32, + #[strum( + serialize = "ItemKitFridgeBig", + props(name = r#"Kit (Fridge Large)"#, desc = r#""#, value = "-1168199498") + )] + ItemKitFridgeBig = -1168199498i32, + #[strum( + serialize = "ItemKitPipeLiquid", + props(name = r#"Kit (Liquid Pipe)"#, desc = r#""#, value = "-1166461357") + )] + ItemKitPipeLiquid = -1166461357i32, + #[strum( + serialize = "StructureWallFlatCornerTriangleFlat", + props( + name = r#"Wall (Flat Corner Triangle Flat)"#, + desc = r#""#, + value = "-1161662836" + ) + )] + StructureWallFlatCornerTriangleFlat = -1161662836i32, + #[strum( + serialize = "StructureLogicMathUnary", + props( + name = r#"Math Unary"#, + desc = r#"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"#, + value = "-1160020195" + ) + )] + StructureLogicMathUnary = -1160020195i32, + #[strum( + serialize = "ItemPlantEndothermic_Creative", + props( + name = r#"Endothermic Plant Creative"#, + desc = r#""#, + value = "-1159179557" + ) + )] + ItemPlantEndothermicCreative = -1159179557i32, + #[strum( + serialize = "ItemSensorProcessingUnitCelestialScanner", + props( + name = r#"Sensor Processing Unit (Celestial Scanner)"#, + desc = r#""#, + value = "-1154200014" + ) + )] + ItemSensorProcessingUnitCelestialScanner = -1154200014i32, + #[strum( + serialize = "StructureChairRectangleDouble", + props( + name = r#"Chair (Rectangle Double)"#, + desc = r#""#, + value = "-1152812099" + ) + )] + StructureChairRectangleDouble = -1152812099i32, + #[strum( + serialize = "ItemGasCanisterOxygen", + props(name = r#"Canister (Oxygen)"#, desc = r#""#, value = "-1152261938") + )] + ItemGasCanisterOxygen = -1152261938i32, + #[strum( + serialize = "ItemPureIceOxygen", + props( + name = r#"Pure Ice Oxygen"#, + desc = r#"A frozen chunk of pure Oxygen"#, + value = "-1150448260" + ) + )] + ItemPureIceOxygen = -1150448260i32, #[strum( serialize = "StructureBackPressureRegulator", props( @@ -466,10 +2525,900 @@ Lastly, an APC charges batteries, which can provide backup power to the sub-netw )] StructureBackPressureRegulator = -1149857558i32, #[strum( - serialize = "ItemPotatoBaked", - props(name = r#"Baked Potato"#, desc = r#""#, value = "-2111886401") + serialize = "StructurePictureFrameThinMountLandscapeLarge", + props( + name = r#"Picture Frame Thin Landscape Large"#, + desc = r#""#, + value = "-1146760430" + ) )] - ItemPotatoBaked = -2111886401i32, + StructurePictureFrameThinMountLandscapeLarge = -1146760430i32, + #[strum( + serialize = "StructureMediumRadiatorLiquid", + props( + name = r#"Medium Radiator Liquid"#, + desc = r#"A stand-alone liquid radiator unit optimized for radiating heat in vacuums."#, + value = "-1141760613" + ) + )] + StructureMediumRadiatorLiquid = -1141760613i32, + #[strum( + serialize = "ApplianceMicrowave", + props( + name = r#"Microwave"#, + desc = r#"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. +Just 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", + props( + name = r#"Kit (Gas Mixer)"#, + desc = r#"This kit creates a Gas Mixer."#, + value = "-1134459463" + ) + )] + ItemPipeGasMixer = -1134459463i32, + #[strum( + serialize = "CircuitboardModeControl", + props( + name = r#"Mode Control"#, + desc = r#"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", + props( + name = r#"Active Vent"#, + desc = r#"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", + props( + name = r#"Wall (Padded Arch Corner)"#, + desc = r#""#, + value = "-1126688298" + ) + )] + StructureWallPaddedArchCorner = -1126688298i32, + #[strum( + serialize = "StructurePlanter", + props( + name = r#"Planter"#, + desc = r#"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", + props( + name = r#"Battery (Medium)"#, + desc = r#"0.Empty +1.Critical +2.VeryLow +3.Low +4.Medium +5.High +6.Full"#, + value = "-1125305264" + ) + )] + StructureBatteryMedium = -1125305264i32, + #[strum( + serialize = "ItemHorticultureBelt", + props(name = r#"Horticulture Belt"#, desc = r#""#, value = "-1117581553") + )] + ItemHorticultureBelt = -1117581553i32, + #[strum( + serialize = "CartridgeMedicalAnalyser", + props( + name = r#"Medical Analyzer"#, + desc = r#"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", + props( + name = r#"Composite Floor Grating (Type 3)"#, + desc = r#""#, + value = "-1113471627" + ) + )] + StructureCompositeFloorGrating3 = -1113471627i32, + #[strum( + serialize = "ItemWreckageStructureWeatherStation004", + props( + name = r#"Wreckage Structure Weather Station"#, + desc = r#""#, + value = "-1104478996" + ) + )] + ItemWreckageStructureWeatherStation004 = -1104478996i32, + #[strum( + serialize = "StructureCableFuse1k", + props(name = r#"Fuse (1kW)"#, desc = r#""#, value = "-1103727120") + )] + StructureCableFuse1K = -1103727120i32, + #[strum( + serialize = "WeaponTorpedo", + props(name = r#"Torpedo"#, desc = r#""#, value = "-1102977898") + )] + WeaponTorpedo = -1102977898i32, + #[strum( + serialize = "StructureWallPaddingThin", + props(name = r#"Wall (Padding Thin)"#, desc = r#""#, value = "-1102403554") + )] + StructureWallPaddingThin = -1102403554i32, + #[strum( + serialize = "Landingpad_GasConnectorOutwardPiece", + props( + name = r#"Landingpad Gas Output"#, + desc = r#"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", + props( + name = r#"Plant Genetic Splicer"#, + desc = r#"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. + +To 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", + props( + name = r#"Gas Capsule Tank Medium"#, + desc = r#""#, + value = "-1093860567" + ) + )] + StructureMediumRocketGasFuelTank = -1093860567i32, + #[strum( + serialize = "StructureStairs4x2Rails", + props(name = r#"Stairs with Rails"#, desc = r#""#, value = "-1088008720") + )] + StructureStairs4X2Rails = -1088008720i32, + #[strum( + serialize = "StructureShowerPowered", + props(name = r#"Shower (Powered)"#, desc = r#""#, value = "-1081797501") + )] + StructureShowerPowered = -1081797501i32, + #[strum( + serialize = "ItemCookedMushroom", + props( + name = r#"Cooked Mushroom"#, + desc = r#"A high-nutrient cooked food, which can be canned."#, + value = "-1076892658" + ) + )] + ItemCookedMushroom = -1076892658i32, + #[strum( + serialize = "ItemGlasses", + props(name = r#"Glasses"#, desc = r#""#, value = "-1068925231") + )] + ItemGlasses = -1068925231i32, + #[strum( + serialize = "KitchenTableSimpleTall", + props( + name = r#"Kitchen Table (Simple Tall)"#, + desc = r#""#, + value = "-1068629349" + ) + )] + KitchenTableSimpleTall = -1068629349i32, + #[strum( + serialize = "ItemGasFilterOxygenM", + props( + name = r#"Medium Filter (Oxygen)"#, + desc = r#""#, + value = "-1067319543" + ) + )] + ItemGasFilterOxygenM = -1067319543i32, + #[strum( + serialize = "StructureTransformerMedium", + props( + name = r#"Transformer (Medium)"#, + desc = r#"Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. +Medium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W. +Note that transformers also operate as data isolators, preventing data flowing into any network beyond it."#, + value = "-1065725831" + ) + )] + StructureTransformerMedium = -1065725831i32, + #[strum( + serialize = "ItemKitDynamicCanister", + props( + name = r#"Kit (Portable Gas Tank)"#, + desc = r#""#, + value = "-1061945368" + ) + )] + ItemKitDynamicCanister = -1061945368i32, + #[strum( + serialize = "ItemEmergencyPickaxe", + props(name = r#"Emergency Pickaxe"#, desc = r#""#, value = "-1061510408") + )] + ItemEmergencyPickaxe = -1061510408i32, + #[strum( + serialize = "ItemWheat", + props( + name = r#"Wheat"#, + desc = r#"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", + props(name = r#"Emergency Arc Welder"#, desc = r#""#, value = "-1056029600") + )] + ItemEmergencyArcWelder = -1056029600i32, + #[strum( + serialize = "ItemGasFilterOxygenInfinite", + props( + name = r#"Catalytic Filter (Oxygen)"#, + desc = r#"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", + props( + name = r#"Turbo Volume Pump (Liquid)"#, + desc = r#"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", + props( + name = r#"Pure Ice Liquid Hydrogen"#, + desc = r#"A frozen chunk of pure Liquid Hydrogen"#, + value = "-1044933269" + ) + )] + ItemPureIceLiquidHydrogen = -1044933269i32, + #[strum( + serialize = "StructureCompositeCladdingAngledCornerInnerLongR", + props( + name = r#"Composite Cladding (Angled Corner Inner Long R)"#, + desc = r#""#, + value = "-1032590967" + ) + )] + StructureCompositeCladdingAngledCornerInnerLongR = -1032590967i32, + #[strum( + serialize = "StructureAreaPowerControlReversed", + props( + name = r#"Area Power Control"#, + desc = r#"An Area Power Control (APC) has three main functions. +Its primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. +APCs also create sub-networks, as no devices on the far side of an APC are visible on the main network. +Lastly, 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", + props( + name = r#"Chute Outlet"#, + desc = r#"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. +The 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", + props(name = r#"Kit (Harvie)"#, desc = r#""#, value = "-1022693454") + )] + ItemKitHarvie = -1022693454i32, + #[strum( + serialize = "ItemGasCanisterFuel", + props(name = r#"Canister (Fuel)"#, desc = r#""#, value = "-1014695176") + )] + ItemGasCanisterFuel = -1014695176i32, + #[strum( + serialize = "StructureCompositeWall04", + props( + name = r#"Composite Wall (Type 4)"#, + desc = r#""#, + value = "-1011701267" + ) + )] + StructureCompositeWall04 = -1011701267i32, + #[strum( + serialize = "StructureSorter", + props( + name = r#"Sorter"#, + desc = r#"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", + props( + name = r#"Pipe Label"#, + desc = r#"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", + props( + name = r#"Canned Edamame"#, + desc = r#"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", + props( + name = r#"Tomato"#, + desc = r#"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", + props( + name = r#"Ore (Cobalt)"#, + desc = r#"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", + props( + name = r#"Burnt Heavy Cable (4-Way Corner)"#, + desc = r#""#, + value = "-981223316" + ) + )] + StructureCableCorner4HBurnt = -981223316i32, + #[strum( + serialize = "Landingpad_StraightPiece01", + props( + name = r#"Landingpad Straight"#, + desc = r#"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", + props( + name = r#"Medium Radiator"#, + desc = r#"A stand-alone radiator unit optimized for radiating heat in vacuums."#, + value = "-975966237" + ) + )] + StructureMediumRadiator = -975966237i32, + #[strum( + serialize = "ItemDynamicScrubber", + props( + name = r#"Kit (Portable Scrubber)"#, + desc = r#""#, + value = "-971920158" + ) + )] + ItemDynamicScrubber = -971920158i32, + #[strum( + serialize = "StructureCondensationValve", + props( + name = r#"Condensation Valve"#, + desc = r#"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", + props( + name = r#"Umbilical (Chute)"#, + desc = r#"0.Left +1.Center +2.Right"#, + value = "-958884053" + ) + )] + StructureChuteUmbilicalMale = -958884053i32, + #[strum( + serialize = "ItemKitElevator", + props(name = r#"Kit (Elevator)"#, desc = r#""#, value = "-945806652") + )] + ItemKitElevator = -945806652i32, + #[strum( + serialize = "StructureSolarPanelReinforced", + props( + name = r#"Solar Panel (Heavy)"#, + desc = r#"This solar panel is resistant to storm damage."#, + value = "-934345724" + ) + )] + StructureSolarPanelReinforced = -934345724i32, + #[strum( + serialize = "ItemKitRocketTransformerSmall", + props( + name = r#"Kit (Transformer Small (Rocket))"#, + desc = r#""#, + value = "-932335800" + ) + )] + ItemKitRocketTransformerSmall = -932335800i32, + #[strum( + serialize = "CartridgeConfiguration", + props(name = r#"Configuration"#, desc = r#""#, value = "-932136011") + )] + CartridgeConfiguration = -932136011i32, + #[strum( + serialize = "ItemSilverIngot", + props(name = r#"Ingot (Silver)"#, desc = r#""#, value = "-929742000") + )] + ItemSilverIngot = -929742000i32, + #[strum( + serialize = "ItemKitHydroponicAutomated", + props( + name = r#"Kit (Automated Hydroponics)"#, + desc = r#""#, + value = "-927931558" + ) + )] + ItemKitHydroponicAutomated = -927931558i32, + #[strum( + serialize = "StructureSmallTableRectangleSingle", + props( + name = r#"Small (Table Rectangle Single)"#, + desc = r#""#, + value = "-924678969" + ) + )] + StructureSmallTableRectangleSingle = -924678969i32, + #[strum( + serialize = "ItemWreckageStructureWeatherStation005", + props( + name = r#"Wreckage Structure Weather Station"#, + desc = r#""#, + value = "-919745414" + ) + )] + ItemWreckageStructureWeatherStation005 = -919745414i32, + #[strum( + serialize = "ItemSilverOre", + props( + name = r#"Ore (Silver)"#, + desc = r#"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", + props( + name = r#"Pipe (T Junction)"#, + desc = r#"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", + props( + name = r#"Pickaxe"#, + desc = r#"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", + props( + name = r#"Kit (Liquid Radiator)"#, + desc = r#"This kit creates a Liquid Pipe Convection Radiator."#, + value = "-906521320" + ) + )] + ItemPipeLiquidRadiator = -906521320i32, + #[strum( + serialize = "StructurePortablesConnector", + props(name = r#"Portables Connector"#, desc = r#""#, value = "-899013427") + )] + StructurePortablesConnector = -899013427i32, + #[strum( + serialize = "StructureCompositeFloorGrating2", + props( + name = r#"Composite Floor Grating (Type 2)"#, + desc = r#""#, + value = "-895027741" + ) + )] + StructureCompositeFloorGrating2 = -895027741i32, + #[strum( + serialize = "StructureTransformerSmall", + props( + name = r#"Transformer (Small)"#, + desc = r#"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. +Note that transformers operate as data isolators, preventing data flowing into any network beyond it."#, + value = "-890946730" + ) + )] + StructureTransformerSmall = -890946730i32, + #[strum( + serialize = "StructureCableCorner", + props( + name = r#"Cable (Corner)"#, + desc = r#"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. +Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, + value = "-889269388" + ) + )] + StructureCableCorner = -889269388i32, + #[strum( + serialize = "ItemKitChuteUmbilical", + props(name = r#"Kit (Chute Umbilical)"#, desc = r#""#, value = "-876560854") + )] + ItemKitChuteUmbilical = -876560854i32, + #[strum( + serialize = "ItemPureIceSteam", + props( + name = r#"Pure Ice Steam"#, + desc = r#"A frozen chunk of pure Steam"#, + value = "-874791066" + ) + )] + ItemPureIceSteam = -874791066i32, + #[strum( + serialize = "ItemBeacon", + props(name = r#"Tracking Beacon"#, desc = r#""#, value = "-869869491") + )] + ItemBeacon = -869869491i32, + #[strum( + serialize = "ItemKitWindTurbine", + props(name = r#"Kit (Wind Turbine)"#, desc = r#""#, value = "-868916503") + )] + ItemKitWindTurbine = -868916503i32, + #[strum( + serialize = "ItemKitRocketMiner", + props(name = r#"Kit (Rocket Miner)"#, desc = r#""#, value = "-867969909") + )] + ItemKitRocketMiner = -867969909i32, + #[strum( + serialize = "StructureStairwellBackPassthrough", + props( + name = r#"Stairwell (Back Passthrough)"#, + desc = r#""#, + value = "-862048392" + ) + )] + StructureStairwellBackPassthrough = -862048392i32, + #[strum( + serialize = "StructureWallArch", + props(name = r#"Wall (Arch)"#, desc = r#""#, value = "-858143148") + )] + StructureWallArch = -858143148i32, + #[strum( + serialize = "HumanSkull", + props(name = r#"Human Skull"#, desc = r#""#, value = "-857713709") + )] + HumanSkull = -857713709i32, + #[strum( + serialize = "StructureLogicMemory", + props(name = r#"Logic Memory"#, desc = r#""#, value = "-851746783") + )] + StructureLogicMemory = -851746783i32, + #[strum( + serialize = "StructureChuteBin", + props( + name = r#"Chute Bin"#, + desc = r#"The Stationeer's goal is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps. +Like 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", + props(name = r#"Kit (Flat Wall)"#, desc = r#""#, value = "-846838195") + )] + ItemKitWallFlat = -846838195i32, + #[strum( + serialize = "ItemActiveVent", + props( + name = r#"Kit (Active Vent)"#, + desc = r#"When constructed, this kit places an Active Vent on any support structure."#, + value = "-842048328" + ) + )] + ItemActiveVent = -842048328i32, + #[strum( + serialize = "ItemFlashlight", + props( + name = r#"Flashlight"#, + desc = r#"A flashlight with a narrow and wide beam options."#, + value = "-838472102" + ) + )] + ItemFlashlight = -838472102i32, + #[strum( + serialize = "ItemWreckageStructureWeatherStation001", + props( + name = r#"Wreckage Structure Weather Station"#, + desc = r#""#, + value = "-834664349" + ) + )] + ItemWreckageStructureWeatherStation001 = -834664349i32, + #[strum( + serialize = "ItemBiomass", + props( + name = r#"Biomass"#, + desc = r#"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", + props( + name = r#"Kit (Power Transmitter Omni)"#, + desc = r#""#, + value = "-831211676" + ) + )] + ItemKitPowerTransmitterOmni = -831211676i32, + #[strum( + serialize = "StructureKlaxon", + props( + name = r#"Klaxon Speaker"#, + desc = r#"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", + props( + name = r#"Elevator Level (Cabled)"#, + desc = r#""#, + value = "-827912235" + ) + )] + StructureElevatorLevelFront = -827912235i32, + #[strum( + serialize = "ItemKitPipeOrgan", + props(name = r#"Kit (Pipe Organ)"#, desc = r#""#, value = "-827125300") + )] + ItemKitPipeOrgan = -827125300i32, + #[strum( + serialize = "ItemKitWallPadded", + props(name = r#"Kit (Padded Wall)"#, desc = r#""#, value = "-821868990") + )] + ItemKitWallPadded = -821868990i32, + #[strum( + serialize = "DynamicGasCanisterFuel", + props( + name = r#"Portable Gas Tank (Fuel)"#, + desc = r#"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", + props( + name = r#"Reinforced Window (Composite Steel)"#, + desc = r#"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", + props( + name = r#"LED Display (Small)"#, + desc = r#"0.Default +1.Percent +2.Power"#, + value = "-815193061" + ) + )] + StructureConsoleLed5 = -815193061i32, + #[strum( + serialize = "StructureInsulatedInLineTankLiquid1x1", + props( + name = r#"Insulated In-Line Tank Small Liquid"#, + desc = r#""#, + value = "-813426145" + ) + )] + StructureInsulatedInLineTankLiquid1X1 = -813426145i32, + #[strum( + serialize = "StructureChuteDigitalFlipFlopSplitterLeft", + props( + name = r#"Chute Digital Flip Flop Splitter Left"#, + desc = r#"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", + props( + name = r#"Rocket Control Motherboard"#, + desc = r#""#, + value = "-806986392" + ) + )] + MotherboardRockets = -806986392i32, + #[strum( + serialize = "ItemKitFurnace", + props(name = r#"Kit (Furnace)"#, desc = r#""#, value = "-806743925") + )] + ItemKitFurnace = -806743925i32, + #[strum( + serialize = "ItemTropicalPlant", + props( + name = r#"Tropical Lily"#, + desc = r#"An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants."#, + value = "-800947386" + ) + )] + ItemTropicalPlant = -800947386i32, + #[strum( + serialize = "ItemKitLiquidTank", + props(name = r#"Kit (Liquid Tank)"#, desc = r#""#, value = "-799849305") + )] + ItemKitLiquidTank = -799849305i32, + #[strum( + serialize = "StructureResearchMachine", + props(name = r#"Research Machine"#, desc = r#""#, value = "-796627526") + )] + StructureResearchMachine = -796627526i32, + #[strum( + serialize = "StructureCompositeDoor", + props( + name = r#"Composite Door"#, + desc = r#"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", + props(name = r#"Locker"#, desc = r#""#, value = "-793623899") + )] + StructureStorageLocker = -793623899i32, + #[strum( + serialize = "RespawnPoint", + props( + name = r#"Respawn Point"#, + desc = r#"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", + props(name = r#"Ingot (Inconel)"#, desc = r#""#, value = "-787796599") + )] + ItemInconelIngot = -787796599i32, + #[strum( + serialize = "StructurePoweredVentLarge", + props( + name = r#"Powered Vent Large"#, + desc = r#"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", + props(name = r#"Kit (Geometric Wall)"#, desc = r#""#, value = "-784733231") + )] + ItemKitWallGeometry = -784733231i32, + #[strum( + serialize = "StructureInsulatedPipeCrossJunction4", + props( + name = r#"Insulated Pipe (4-Way Junction)"#, + desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, + value = "-783387184" + ) + )] + StructureInsulatedPipeCrossJunction4 = -783387184i32, + #[strum( + serialize = "StructurePowerConnector", + props( + name = r#"Power Connector"#, + desc = r#"Attaches a Kit (Portable Generator) to a power network."#, + value = "-782951720" + ) + )] + StructurePowerConnector = -782951720i32, + #[strum( + serialize = "StructureLiquidPipeOneWayValve", + props( + name = r#"One Way Valve (Liquid)"#, + desc = r#"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.."#, + value = "-782453061" + ) + )] + StructureLiquidPipeOneWayValve = -782453061i32, + #[strum( + serialize = "StructureWallLargePanelArrow", + props( + name = r#"Wall (Large Panel Arrow)"#, + desc = r#""#, + value = "-776581573" + ) + )] + StructureWallLargePanelArrow = -776581573i32, + #[strum( + serialize = "StructureShower", + props(name = r#"Shower"#, desc = r#""#, value = "-775128944") + )] + StructureShower = -775128944i32, + #[strum( + serialize = "ItemChemLightBlue", + props( + name = r#"Chem Light (Blue)"#, + desc = r#"A safe and slightly rave-some source of blue light. Snap to activate."#, + value = "-772542081" + ) + )] + ItemChemLightBlue = -772542081i32, + #[strum( + serialize = "StructureLogicSlotReader", + props(name = r#"Slot Reader"#, desc = r#""#, value = "-767867194") + )] + StructureLogicSlotReader = -767867194i32, + #[strum( + serialize = "ItemGasCanisterCarbonDioxide", + props(name = r#"Canister (CO2)"#, desc = r#""#, value = "-767685874") + )] + ItemGasCanisterCarbonDioxide = -767685874i32, + #[strum( + serialize = "ItemPipeAnalyizer", + props( + name = r#"Kit (Pipe Analyzer)"#, + desc = r#"This kit creates a Pipe Analyzer."#, + value = "-767597887" + ) + )] + ItemPipeAnalyizer = -767597887i32, + #[strum( + serialize = "StructureBatteryChargerSmall", + props(name = r#"Battery Charger Small"#, desc = r#""#, value = "-761772413") + )] + StructureBatteryChargerSmall = -761772413i32, + #[strum( + serialize = "StructureWaterBottleFillerPowered", + props(name = r#"Waterbottle Filler"#, desc = r#""#, value = "-756587791") + )] + StructureWaterBottleFillerPowered = -756587791i32, #[strum( serialize = "AppliancePackagingMachine", props( @@ -495,34 +3444,521 @@ Note: the Cannifier will flash an error on its activation switch if you attempt )] AppliancePackagingMachine = -749191906i32, #[strum( - serialize = "ItemBasketBall", - props(name = r#"Basket Ball"#, desc = r#""#, value = "-1262580790") - )] - ItemBasketBall = -1262580790i32, - #[strum( - serialize = "StructureBasketHoop", - props(name = r#"Basket Hoop"#, desc = r#""#, value = "-1613497288") - )] - StructureBasketHoop = -1613497288i32, - #[strum( - serialize = "StructureLogicBatchReader", - props(name = r#"Batch Reader"#, desc = r#""#, value = "264413729") - )] - StructureLogicBatchReader = 264413729i32, - #[strum( - serialize = "StructureLogicBatchSlotReader", - props(name = r#"Batch Slot Reader"#, desc = r#""#, value = "436888930") - )] - StructureLogicBatchSlotReader = 436888930i32, - #[strum( - serialize = "StructureLogicBatchWriter", - props(name = r#"Batch Writer"#, desc = r#""#, value = "1415443359") - )] - StructureLogicBatchWriter = 1415443359i32, - #[strum( - serialize = "StructureBatteryMedium", + serialize = "ItemIntegratedCircuit10", props( - name = r#"Battery (Medium)"#, + name = r#"Integrated Circuit (IC10)"#, + desc = r#""#, + value = "-744098481" + ) + )] + ItemIntegratedCircuit10 = -744098481i32, + #[strum( + serialize = "ItemLabeller", + props( + name = r#"Labeller"#, + desc = r#"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", + props( + name = r#"Heavy Cable (4-Way Junction)"#, + desc = r#""#, + value = "-742234680" + ) + )] + StructureCableJunctionH4 = -742234680i32, + #[strum( + serialize = "StructureWallCooler", + props( + name = r#"Wall Cooler"#, + desc = r#"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. +In 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. + +EFFICIENCY +The 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. +The 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. +ERRORS +If the wall cooler is flashing an error then it is missing one of the following: + +- Pipe connection to the wall cooler. +- Gas in the connected pipes, or pressure is too low. +- Atmosphere in the surrounding environment or pressure is too low. + +For more information about how to control temperatures, consult the temperature control Guides page."#, + value = "-739292323" + ) + )] + StructureWallCooler = -739292323i32, + #[strum( + serialize = "StructurePurgeValve", + props( + name = r#"Purge Valve"#, + desc = r#"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", + props(name = r#"Container Mount"#, desc = r#""#, value = "-733500083") + )] + StructureCrateMount = -733500083i32, + #[strum( + serialize = "ItemKitDynamicGenerator", + props( + name = r#"Kit (Portable Generator)"#, + desc = r#""#, + value = "-732720413" + ) + )] + ItemKitDynamicGenerator = -732720413i32, + #[strum( + serialize = "StructureConsoleDual", + props( + name = r#"Console Dual"#, + desc = r#"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. +A 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", + props( + name = r#"Filter (Oxygen)"#, + desc = r#"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", + props( + name = r#"Cooked Tomato"#, + desc = r#"A high-nutrient cooked food, which can be canned."#, + value = "-709086714" + ) + )] + ItemCookedTomato = -709086714i32, + #[strum( + serialize = "ItemCopperOre", + props( + name = r#"Ore (Copper)"#, + desc = r#"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", + props( + name = r#"Logic Transmitter"#, + desc = r#"Connects to Logic Transmitter"#, + value = "-693235651" + ) + )] + StructureLogicTransmitter = -693235651i32, + #[strum( + serialize = "StructureValve", + props(name = r#"Valve"#, desc = r#""#, value = "-692036078") + )] + StructureValve = -692036078i32, + #[strum( + serialize = "StructureCompositeWindowIron", + props(name = r#"Iron Window"#, desc = r#""#, value = "-688284639") + )] + StructureCompositeWindowIron = -688284639i32, + #[strum( + serialize = "ItemSprayCanBlack", + props( + name = r#"Spray Paint (Black)"#, + desc = r#"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", + props( + name = r#"Mining-Drill Head (Long Term)"#, + desc = r#""#, + value = "-684020753" + ) + )] + ItemRocketMiningDrillHeadLongTerm = -684020753i32, + #[strum( + serialize = "ItemMiningBelt", + props( + name = r#"Mining Belt"#, + desc = r#"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", + props( + name = r#"Gas Canister (Smart)"#, + desc = r#"0.Mode0 +1.Mode1"#, + value = "-668314371" + ) + )] + ItemGasCanisterSmart = -668314371i32, + #[strum( + serialize = "ItemFlour", + props( + name = r#"Flour"#, + desc = r#"Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven)."#, + value = "-665995854" + ) + )] + ItemFlour = -665995854i32, + #[strum( + serialize = "StructureSmallTableRectangleDouble", + props( + name = r#"Small (Table Rectangle Double)"#, + desc = r#""#, + value = "-660451023" + ) + )] + StructureSmallTableRectangleDouble = -660451023i32, + #[strum( + serialize = "StructureChuteUmbilicalFemaleSide", + props( + name = r#"Umbilical Socket Angle (Chute)"#, + desc = r#""#, + value = "-659093969" + ) + )] + StructureChuteUmbilicalFemaleSide = -659093969i32, + #[strum( + serialize = "ItemSteelIngot", + props( + name = r#"Ingot (Steel)"#, + desc = r#"Steel ingots are a metal alloy, crafted in a Furnace by smelting Ore (Iron) and Ore (Coal) at a ratio of 3:1. +It 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", + props( + name = r#"Wheat Seeds"#, + desc = r#"Grow some Wheat."#, + value = "-654756733" + ) + )] + SeedBagWheet = -654756733i32, + #[strum( + serialize = "StructureRocketTower", + props(name = r#"Launch Tower"#, desc = r#""#, value = "-654619479") + )] + StructureRocketTower = -654619479i32, + #[strum( + serialize = "StructureGasUmbilicalFemaleSide", + props( + name = r#"Umbilical Socket Angle (Gas)"#, + desc = r#""#, + value = "-648683847" + ) + )] + StructureGasUmbilicalFemaleSide = -648683847i32, + #[strum( + serialize = "StructureLockerSmall", + props(name = r#"Locker (Small)"#, desc = r#""#, value = "-647164662") + )] + StructureLockerSmall = -647164662i32, + #[strum( + serialize = "StructureSecurityPrinter", + props( + name = r#"Security Printer"#, + desc = r#"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. +"#, + value = "-641491515" + ) + )] + StructureSecurityPrinter = -641491515i32, + #[strum( + serialize = "StructureWallSmallPanelsArrow", + props( + name = r#"Wall (Small Panels Arrow)"#, + desc = r#""#, + value = "-639306697" + ) + )] + StructureWallSmallPanelsArrow = -639306697i32, + #[strum( + serialize = "ItemKitDynamicMKIILiquidCanister", + props( + name = r#"Kit (Portable Liquid Tank Mk II)"#, + desc = r#""#, + value = "-638019974" + ) + )] + ItemKitDynamicMkiiLiquidCanister = -638019974i32, + #[strum( + serialize = "ItemKitRocketManufactory", + props( + name = r#"Kit (Rocket Manufactory)"#, + desc = r#""#, + value = "-636127860" + ) + )] + ItemKitRocketManufactory = -636127860i32, + #[strum( + serialize = "ItemPureIceVolatiles", + props( + name = r#"Pure Ice Volatiles"#, + desc = r#"A frozen chunk of pure Volatiles"#, + value = "-633723719" + ) + )] + ItemPureIceVolatiles = -633723719i32, + #[strum( + serialize = "ItemGasFilterNitrogenM", + props( + name = r#"Medium Filter (Nitrogen)"#, + desc = r#""#, + value = "-632657357" + ) + )] + ItemGasFilterNitrogenM = -632657357i32, + #[strum( + serialize = "StructureCableFuse5k", + props(name = r#"Fuse (5kW)"#, desc = r#""#, value = "-631590668") + )] + StructureCableFuse5K = -631590668i32, + #[strum( + serialize = "StructureCableJunction6Burnt", + props( + name = r#"Burnt Cable (6-Way Junction)"#, + desc = r#""#, + value = "-628145954" + ) + )] + StructureCableJunction6Burnt = -628145954i32, + #[strum( + serialize = "StructureComputer", + props( + name = r#"Computer"#, + desc = r#"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. +The 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. +Compatible motherboards: +- Logic Motherboard +- Manufacturing Motherboard +- Sorter Motherboard +- Communications Motherboard +- IC Editor Motherboard"#, + value = "-626563514" + ) + )] + StructureComputer = -626563514i32, + #[strum( + serialize = "StructurePressureFedGasEngine", + props( + name = r#"Pressure Fed Gas Engine"#, + desc = r#"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", + props( + name = r#"Telescope"#, + desc = r#"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", + props(name = r#"Kit (Advanced Furnace)"#, desc = r#""#, value = "-616758353") + )] + ItemKitAdvancedFurnace = -616758353i32, + #[strum( + serialize = "StructureHeatExchangerLiquidtoLiquid", + props( + name = r#"Heat Exchanger - Liquid"#, + desc = r#"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. +The '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. +As 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. +"#, + value = "-613784254" + ) + )] + StructureHeatExchangerLiquidtoLiquid = -613784254i32, + #[strum( + serialize = "StructureChuteJunction", + props( + name = r#"Chute (Junction)"#, + desc = r#"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. +Chute 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", + props( + name = r#"Chute (Window)"#, + desc = r#"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", + props(name = r#"Headlamp"#, desc = r#""#, value = "-598730959") + )] + ItemWearLamp = -598730959i32, + #[strum( + serialize = "ItemKitAdvancedPackagingMachine", + props( + name = r#"Kit (Advanced Packaging Machine)"#, + desc = r#""#, + value = "-598545233" + ) + )] + ItemKitAdvancedPackagingMachine = -598545233i32, + #[strum( + serialize = "ItemChemLightGreen", + props( + name = r#"Chem Light (Green)"#, + desc = r#"Enliven the dreariest, airless rock with this glowy green light. Snap to activate."#, + value = "-597479390" + ) + )] + ItemChemLightGreen = -597479390i32, + #[strum( + serialize = "EntityRoosterBrown", + props( + name = r#"Entity Rooster Brown"#, + desc = r#"The common brown rooster. Don't let it hear you say that."#, + value = "-583103395" + ) + )] + EntityRoosterBrown = -583103395i32, + #[strum( + serialize = "StructureLargeExtendableRadiator", + props( + name = r#"Large Extendable Radiator"#, + desc = r#"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", + props( + name = r#"Medium Hangar Door"#, + desc = r#"1 x 2 modular door piece for building hangar doors."#, + value = "-566348148" + ) + )] + StructureMediumHangerDoor = -566348148i32, + #[strum( + serialize = "StructureLaunchMount", + props( + name = r#"Launch Mount"#, + desc = r#"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", + props(name = r#"Short Locker"#, desc = r#""#, value = "-554553467") + )] + StructureShortLocker = -554553467i32, + #[strum( + serialize = "ItemKitCrateMount", + props(name = r#"Kit (Container Mount)"#, desc = r#""#, value = "-551612946") + )] + ItemKitCrateMount = -551612946i32, + #[strum( + serialize = "ItemKitCryoTube", + props(name = r#"Kit (Cryo Tube)"#, desc = r#""#, value = "-545234195") + )] + ItemKitCryoTube = -545234195i32, + #[strum( + serialize = "StructureSolarPanelDual", + props( + name = r#"Solar Panel (Dual)"#, + desc = r#"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", + props(name = r#"Switch Grass"#, desc = r#""#, value = "-532672323") + )] + ItemPlantSwitchGrass = -532672323i32, + #[strum( + serialize = "StructureInsulatedPipeLiquidTJunction", + props( + name = r#"Insulated Liquid Pipe (T Junction)"#, + desc = r#"Liquid piping with very low temperature loss or gain."#, + value = "-532384855" + ) + )] + StructureInsulatedPipeLiquidTJunction = -532384855i32, + #[strum( + serialize = "ItemKitSolarPanelBasicReinforced", + props( + name = r#"Kit (Solar Panel Basic Heavy)"#, + desc = r#""#, + value = "-528695432" + ) + )] + ItemKitSolarPanelBasicReinforced = -528695432i32, + #[strum( + serialize = "ItemChemLightRed", + props( + name = r#"Chem Light (Red)"#, + desc = r#"A red glowstick. Snap to activate. Then reach for the lasers."#, + value = "-525810132" + ) + )] + ItemChemLightRed = -525810132i32, + #[strum( + serialize = "ItemKitWallIron", + props(name = r#"Kit (Iron Wall)"#, desc = r#""#, value = "-524546923") + )] + ItemKitWallIron = -524546923i32, + #[strum( + serialize = "ItemEggCarton", + props( + name = r#"Egg Carton"#, + desc = r#"Within, eggs reside in mysterious, marmoreal silence."#, + value = "-524289310" + ) + )] + ItemEggCarton = -524289310i32, + #[strum( + serialize = "StructureWaterDigitalValve", + props(name = r#"Liquid Digital Valve"#, desc = r#""#, value = "-517628750") + )] + StructureWaterDigitalValve = -517628750i32, + #[strum( + serialize = "StructureSmallDirectHeatExchangeLiquidtoLiquid", + props( + name = r#"Small Direct Heat Exchanger - Liquid + Liquid"#, + desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, + value = "-507770416" + ) + )] + StructureSmallDirectHeatExchangeLiquidtoLiquid = -507770416i32, + #[strum( + serialize = "ItemWirelessBatteryCellExtraLarge", + props( + name = r#"Wireless Battery Cell Extra Large"#, desc = r#"0.Empty 1.Critical 2.VeryLow @@ -530,66 +3966,76 @@ Note: the Cannifier will flash an error on its activation switch if you attempt 4.Medium 5.High 6.Full"#, - value = "-1125305264" + value = "-504717121" ) )] - StructureBatteryMedium = -1125305264i32, + ItemWirelessBatteryCellExtraLarge = -504717121i32, #[strum( - serialize = "ItemBatteryCellLarge", + serialize = "ItemGasFilterPollutantsInfinite", props( - name = r#"Battery Cell (Large)"#, - desc = r#"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. - -POWER OUTPUT -The large power cell can discharge 288kW of power. -"#, - value = "-459827268" + name = r#"Catalytic Filter (Pollutants)"#, + desc = r#"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" ) )] - ItemBatteryCellLarge = -459827268i32, + ItemGasFilterPollutantsInfinite = -503738105i32, #[strum( - serialize = "ItemBatteryCellNuclear", + serialize = "ItemSprayCanBlue", props( - name = r#"Battery Cell (Nuclear)"#, - desc = r#"Illegal on Earth since the Chengdu Event, Norsec nuclear power cells found a new and drastically less safety-conscious market offworld. - -POWER OUTPUT -Pushing the power-weight balance to its limits, the 'nuke' has a 2.3 megawatt charge (2304000W), reflecting its reliance on exotic superalloys."#, - value = "544617306" + name = r#"Spray Paint (Blue)"#, + desc = r#"What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'"#, + value = "-498464883" ) )] - ItemBatteryCellNuclear = 544617306i32, + ItemSprayCanBlue = -498464883i32, #[strum( - serialize = "ItemBatteryCell", + serialize = "RespawnPointWallMounted", props( - name = r#"Battery Cell (Small)"#, - desc = r#"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. - -POWER OUTPUT -The small cell stores up to 36000 watts of power."#, - value = "700133157" + name = r#"Respawn Point (Mounted)"#, + desc = r#""#, + value = "-491247370" ) )] - ItemBatteryCell = 700133157i32, + RespawnPointWallMounted = -491247370i32, #[strum( - serialize = "StructureBatteryCharger", + serialize = "ItemIronSheets", + props(name = r#"Iron Sheets"#, desc = r#""#, value = "-487378546") + )] + ItemIronSheets = -487378546i32, + #[strum( + serialize = "ItemGasCanisterVolatiles", + props(name = r#"Canister (Volatiles)"#, desc = r#""#, value = "-472094806") + )] + ItemGasCanisterVolatiles = -472094806i32, + #[strum( + serialize = "ItemCableCoil", props( - name = r#"Battery Cell Charger"#, - desc = r#"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" + name = r#"Cable Coil"#, + desc = r#"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. +Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, + value = "-466050668" ) )] - StructureBatteryCharger = 1945930022i32, + ItemCableCoil = -466050668i32, #[strum( - serialize = "StructureBatteryChargerSmall", - props(name = r#"Battery Charger Small"#, desc = r#""#, value = "-761772413") + serialize = "StructureToolManufactory", + props( + name = r#"Tool Manufactory"#, + desc = r#"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. +Upgrade the device using a Tool Printer Mod for additional recipes and faster processing speeds."#, + value = "-465741100" + ) )] - StructureBatteryChargerSmall = -761772413i32, + StructureToolManufactory = -465741100i32, #[strum( - serialize = "ItemBatteryChargerSmall", - props(name = r#"Battery Charger Small"#, desc = r#""#, value = "1008295833") + serialize = "StructureAdvancedPackagingMachine", + props( + name = r#"Advanced Packaging Machine"#, + desc = r#"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" + ) )] - ItemBatteryChargerSmall = 1008295833i32, + StructureAdvancedPackagingMachine = -463037670i32, #[strum( serialize = "Battery_Wireless_cell", props( @@ -605,6 +4051,803 @@ The small cell stores up to 36000 watts of power."#, ) )] BatteryWirelessCell = -462415758i32, + #[strum( + serialize = "ItemBatteryCellLarge", + props( + name = r#"Battery Cell (Large)"#, + desc = r#"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. + +POWER OUTPUT +The large power cell can discharge 288kW of power. +"#, + value = "-459827268" + ) + )] + ItemBatteryCellLarge = -459827268i32, + #[strum( + serialize = "StructureLiquidVolumePump", + props(name = r#"Liquid Volume Pump"#, desc = r#""#, value = "-454028979") + )] + StructureLiquidVolumePump = -454028979i32, + #[strum( + serialize = "ItemKitTransformer", + props( + name = r#"Kit (Transformer Large)"#, + desc = r#""#, + value = "-453039435" + ) + )] + ItemKitTransformer = -453039435i32, + #[strum( + serialize = "StructureVendingMachine", + props( + name = r#"Vending Machine"#, + desc = r#"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 = "StructurePipeHeater", + props( + name = r#"Pipe Heater (Gas)"#, + desc = r#"Adds 1000 joules of heat per tick to the contents of your pipe network."#, + value = "-419758574" + ) + )] + StructurePipeHeater = -419758574i32, + #[strum( + serialize = "StructurePipeCrossJunction4", + props( + name = r#"Pipe (4-Way Junction)"#, + desc = r#"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", + props(name = r#"Ladder"#, desc = r#""#, value = "-415420281") + )] + StructureLadder = -415420281i32, + #[strum( + serialize = "ItemHardJetpack", + props( + name = r#"Hardsuit Jetpack"#, + desc = r#"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. +The 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. +USE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move."#, + value = "-412551656" + ) + )] + ItemHardJetpack = -412551656i32, + #[strum( + serialize = "CircuitboardCameraDisplay", + props( + name = r#"Camera Display"#, + desc = r#"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 = "ItemCopperIngot", + props( + name = r#"Ingot (Copper)"#, + desc = r#"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 = "ReagentColorOrange", + props(name = r#"Color Dye (Orange)"#, desc = r#""#, value = "-400696159") + )] + ReagentColorOrange = -400696159i32, + #[strum( + serialize = "StructureBattery", + props( + name = r#"Station Battery"#, + desc = r#"Providing large-scale, reliable power storage, the Sinotai 'Dianzi' station battery is the heart of most Stationeer bases. +There 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.' +POWER OUTPUT +Able 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", + props( + name = r#"Pipe Radiator"#, + desc = r#"A pipe mounted radiator optimized for radiating heat in vacuums."#, + value = "-399883995" + ) + )] + StructurePipeRadiatorFlat = -399883995i32, + #[strum( + serialize = "StructureCompositeCladdingAngledLong", + props( + name = r#"Composite Cladding (Long Angled)"#, + desc = r#""#, + value = "-387546514" + ) + )] + StructureCompositeCladdingAngledLong = -387546514i32, + #[strum( + serialize = "DynamicGasTankAdvanced", + props( + name = r#"Gas Tank Mk II"#, + desc = r#"0.Mode0 +1.Mode1"#, + value = "-386375420" + ) + )] + DynamicGasTankAdvanced = -386375420i32, + #[strum( + serialize = "WeaponPistolEnergy", + props( + name = r#"Energy Pistol"#, + desc = r#"0.Stun +1.Kill"#, + value = "-385323479" + ) + )] + WeaponPistolEnergy = -385323479i32, + #[strum( + serialize = "ItemFertilizedEgg", + props( + name = r#"Egg"#, + desc = r#"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", + props( + name = r#"Mining-Drill Head (Ice)"#, + desc = r#""#, + value = "-380904592" + ) + )] + ItemRocketMiningDrillHeadIce = -380904592i32, + #[strum( + serialize = "Flag_ODA_8m", + props(name = r#"Flag (ODA 8m)"#, desc = r#""#, value = "-375156130") + )] + FlagOda8M = -375156130i32, + #[strum( + serialize = "AccessCardGreen", + props(name = r#"Access Card (Green)"#, desc = r#""#, value = "-374567952") + )] + AccessCardGreen = -374567952i32, + #[strum( + serialize = "StructureChairBoothCornerLeft", + props( + name = r#"Chair (Booth Corner Left)"#, + desc = r#""#, + value = "-367720198" + ) + )] + StructureChairBoothCornerLeft = -367720198i32, + #[strum( + serialize = "ItemKitFuselage", + props(name = r#"Kit (Fuselage)"#, desc = r#""#, value = "-366262681") + )] + ItemKitFuselage = -366262681i32, + #[strum( + serialize = "ItemSolidFuel", + props( + name = r#"Solid Fuel (Hydrocarbon)"#, + desc = r#""#, + value = "-365253871" + ) + )] + ItemSolidFuel = -365253871i32, + #[strum( + serialize = "ItemKitSolarPanelReinforced", + props( + name = r#"Kit (Solar Panel Heavy)"#, + desc = r#""#, + value = "-364868685" + ) + )] + ItemKitSolarPanelReinforced = -364868685i32, + #[strum( + serialize = "ItemToolBelt", + props( + name = r#"Tool Belt"#, + desc = r#"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). +Designed 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", + props( + name = r#"Emergency Angle Grinder"#, + desc = r#""#, + value = "-351438780" + ) + )] + ItemEmergencyAngleGrinder = -351438780i32, + #[strum( + serialize = "StructureCableFuse50k", + props(name = r#"Fuse (50kW)"#, desc = r#""#, value = "-349716617") + )] + StructureCableFuse50K = -349716617i32, + #[strum( + serialize = "StructureCompositeCladdingAngledCornerLongR", + props( + name = r#"Composite Cladding (Long Angled Mirrored Corner)"#, + desc = r#""#, + value = "-348918222" + ) + )] + StructureCompositeCladdingAngledCornerLongR = -348918222i32, + #[strum( + serialize = "StructureFiltration", + props( + name = r#"Filtration"#, + desc = r#"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). +The 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. +"#, + value = "-348054045" + ) + )] + StructureFiltration = -348054045i32, + #[strum( + serialize = "StructureLogicReader", + props(name = r#"Logic Reader"#, desc = r#""#, value = "-345383640") + )] + StructureLogicReader = -345383640i32, + #[strum( + serialize = "ItemKitMotherShipCore", + props(name = r#"Kit (Mothership)"#, desc = r#""#, value = "-344968335") + )] + ItemKitMotherShipCore = -344968335i32, + #[strum( + serialize = "StructureCamera", + props( + name = r#"Camera"#, + desc = r#"Nothing says 'I care' like a security camera that's been linked a Motion Sensor and a Console fitted with a Camera Display. +Be there, even when you're not."#, + value = "-342072665" + ) + )] + StructureCamera = -342072665i32, + #[strum( + serialize = "StructureCableJunctionHBurnt", + props(name = r#"Burnt Cable (Junction)"#, desc = r#""#, value = "-341365649") + )] + StructureCableJunctionHBurnt = -341365649i32, + #[strum( + serialize = "MotherboardComms", + props( + name = r#"Communications Motherboard"#, + desc = r#"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."#, + value = "-337075633" + ) + )] + MotherboardComms = -337075633i32, + #[strum( + serialize = "AccessCardOrange", + props(name = r#"Access Card (Orange)"#, desc = r#""#, value = "-332896929") + )] + AccessCardOrange = -332896929i32, + #[strum( + serialize = "StructurePowerTransmitterOmni", + props(name = r#"Power Transmitter Omni"#, desc = r#""#, value = "-327468845") + )] + StructurePowerTransmitterOmni = -327468845i32, + #[strum( + serialize = "StructureGlassDoor", + props( + name = r#"Glass Door"#, + desc = r#"0.Operate +1.Logic"#, + value = "-324331872" + ) + )] + StructureGlassDoor = -324331872i32, + #[strum( + serialize = "DynamicGasCanisterCarbonDioxide", + props( + name = r#"Portable Gas Tank (CO2)"#, + desc = r#"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", + props( + name = r#"Volume Pump"#, + desc = r#"The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks."#, + value = "-321403609" + ) + )] + StructureVolumePump = -321403609i32, + #[strum( + serialize = "DynamicMKIILiquidCanisterWater", + props( + name = r#"Portable Liquid Tank Mk II (Water)"#, + desc = r#"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", + props(name = r#"Kit (Rocket Battery)"#, desc = r#""#, value = "-314072139") + )] + ItemKitRocketBattery = -314072139i32, + #[strum( + serialize = "ElectronicPrinterMod", + props( + name = r#"Electronic Printer Mod"#, + desc = r#"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", + props( + name = r#"Wreckage Hydroponics Tray"#, + desc = r#""#, + value = "-310178617" + ) + )] + ItemWreckageHydroponicsTray1 = -310178617i32, + #[strum( + serialize = "ItemKitRocketCelestialTracker", + props( + name = r#"Kit (Rocket Celestial Tracker)"#, + desc = r#""#, + value = "-303008602" + ) + )] + ItemKitRocketCelestialTracker = -303008602i32, + #[strum( + serialize = "StructureFrameSide", + props( + name = r#"Steel Frame (Side)"#, + desc = r#"More durable than the Iron Frame, steel frames also provide variations for more ornate constructions."#, + value = "-302420053" + ) + )] + StructureFrameSide = -302420053i32, + #[strum( + serialize = "ItemInvarIngot", + props(name = r#"Ingot (Invar)"#, desc = r#""#, value = "-297990285") + )] + ItemInvarIngot = -297990285i32, + #[strum( + serialize = "StructureSmallTableThickSingle", + props( + name = r#"Small Table (Thick Single)"#, + desc = r#""#, + value = "-291862981" + ) + )] + StructureSmallTableThickSingle = -291862981i32, + #[strum( + serialize = "ItemSiliconIngot", + props(name = r#"Ingot (Silicon)"#, desc = r#""#, value = "-290196476") + )] + ItemSiliconIngot = -290196476i32, + #[strum( + serialize = "StructureLiquidPipeHeater", + props( + name = r#"Pipe Heater (Liquid)"#, + desc = r#"Adds 1000 joules of heat per tick to the contents of your pipe network."#, + value = "-287495560" + ) + )] + StructureLiquidPipeHeater = -287495560i32, + #[strum( + serialize = "StructureStirlingEngine", + props( + name = r#"Stirling Engine"#, + desc = r#"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. + +When 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. + +Gases 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", + props( + name = r#"Composite Cladding (Rounded)"#, + desc = r#""#, + value = "-259357734" + ) + )] + StructureCompositeCladdingRounded = -259357734i32, + #[strum( + serialize = "SMGMagazine", + props(name = r#"SMG Magazine"#, desc = r#""#, value = "-256607540") + )] + SmgMagazine = -256607540i32, + #[strum( + serialize = "ItemLiquidPipeHeater", + props( + name = r#"Pipe Heater Kit (Liquid)"#, + desc = r#"Creates a Pipe Heater (Liquid)."#, + value = "-248475032" + ) + )] + ItemLiquidPipeHeater = -248475032i32, + #[strum( + serialize = "StructureArcFurnace", + props( + name = r#"Arc Furnace"#, + desc = r#"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. +Co-opted by the ODA, it now provides Stationeers with a way to produce pure ingots of various resources. +The 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. +Unlike the more advanced Furnace, the arc furnace cannot create alloys."#, + value = "-247344692" + ) + )] + StructureArcFurnace = -247344692i32, + #[strum( + serialize = "ItemTablet", + props( + name = r#"Handheld Tablet"#, + desc = r#"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."#, + value = "-229808600" + ) + )] + ItemTablet = -229808600i32, + #[strum( + serialize = "StructureGovernedGasEngine", + props( + name = r#"Pumped Gas Engine"#, + desc = r#"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", + props( + name = r#"Stairs with Rail (Right)"#, + desc = r#""#, + value = "-212902482" + ) + )] + StructureStairs4X2RailR = -212902482i32, + #[strum( + serialize = "ItemLeadOre", + props( + name = r#"Ore (Lead)"#, + desc = r#"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", + props(name = r#"Beacon"#, desc = r#""#, value = "-188177083") + )] + StructureBeacon = -188177083i32, + #[strum( + serialize = "ItemGasFilterCarbonDioxideInfinite", + props( + name = r#"Catalytic Filter (Carbon Dioxide)"#, + desc = r#"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", + props(name = r#"Liquid Canister"#, desc = r#""#, value = "-185207387") + )] + ItemLiquidCanisterEmpty = -185207387i32, + #[strum( + serialize = "ItemMKIIWireCutters", + props( + name = r#"Mk II Wire Cutters"#, + desc = r#"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", + props( + name = r#"Hades Flower (Alpha strain)"#, + desc = r#"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", + props( + name = r#"Insulated In-Line Tank Gas"#, + desc = r#""#, + value = "-177610944" + ) + )] + StructureInsulatedInLineTankGas1X2 = -177610944i32, + #[strum( + serialize = "StructureCableCornerBurnt", + props(name = r#"Burnt Cable (Corner)"#, desc = r#""#, value = "-177220914") + )] + StructureCableCornerBurnt = -177220914i32, + #[strum( + serialize = "StructureCableJunction", + props( + name = r#"Cable (Junction)"#, + desc = r#"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. +Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, + value = "-175342021" + ) + )] + StructureCableJunction = -175342021i32, + #[strum( + serialize = "ItemKitLaunchTower", + props( + name = r#"Kit (Rocket Launch Tower)"#, + desc = r#""#, + value = "-174523552" + ) + )] + ItemKitLaunchTower = -174523552i32, + #[strum( + serialize = "StructureBench3", + props(name = r#"Bench (Frame Style)"#, desc = r#""#, value = "-164622691") + )] + StructureBench3 = -164622691i32, + #[strum( + serialize = "MotherboardProgrammableChip", + props( + name = r#"IC Editor Motherboard"#, + desc = r#"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."#, + value = "-161107071" + ) + )] + MotherboardProgrammableChip = -161107071i32, + #[strum( + serialize = "ItemSprayCanOrange", + props( + name = r#"Spray Paint (Orange)"#, + desc = r#"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", + props(name = r#"Wall (Padded Corner)"#, desc = r#""#, value = "-155945899") + )] + StructureWallPaddedCorner = -155945899i32, + #[strum( + serialize = "StructureCableStraightH", + props(name = r#"Heavy Cable (Straight)"#, desc = r#""#, value = "-146200530") + )] + StructureCableStraightH = -146200530i32, + #[strum( + serialize = "StructureDockPortSide", + props(name = r#"Dock (Port Side)"#, desc = r#""#, value = "-137465079") + )] + StructureDockPortSide = -137465079i32, + #[strum( + serialize = "StructureCircuitHousing", + props(name = r#"IC Housing"#, desc = r#""#, value = "-128473777") + )] + StructureCircuitHousing = -128473777i32, + #[strum( + serialize = "MotherboardMissionControl", + props( + name = r#""#, + desc = r#""#, + value = "-127121474" + ) + )] + MotherboardMissionControl = -127121474i32, + #[strum( + serialize = "ItemKitSpeaker", + props(name = r#"Kit (Speaker)"#, desc = r#""#, value = "-126038526") + )] + ItemKitSpeaker = -126038526i32, + #[strum( + serialize = "StructureLogicReagentReader", + props(name = r#"Reagent Reader"#, desc = r#""#, value = "-124308857") + )] + StructureLogicReagentReader = -124308857i32, + #[strum( + serialize = "ItemGasFilterNitrousOxideInfinite", + props( + name = r#"Catalytic Filter (Nitrous Oxide)"#, + desc = r#"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", + props( + name = r#"Kit (Pressure Fed Gas Engine)"#, + desc = r#""#, + value = "-121514007" + ) + )] + ItemKitPressureFedGasEngine = -121514007i32, + #[strum( + serialize = "StructureCableJunction4HBurnt", + props( + name = r#"Burnt Cable (4-Way Junction)"#, + desc = r#""#, + value = "-115809132" + ) + )] + StructureCableJunction4HBurnt = -115809132i32, + #[strum( + serialize = "ElevatorCarrage", + props(name = r#"Elevator"#, desc = r#""#, value = "-110788403") + )] + ElevatorCarrage = -110788403i32, + #[strum( + serialize = "StructureFairingTypeA2", + props(name = r#"Fairing (Type A2)"#, desc = r#""#, value = "-104908736") + )] + StructureFairingTypeA2 = -104908736i32, + #[strum( + serialize = "ItemKitPressureFedLiquidEngine", + props( + name = r#"Kit (Pressure Fed Liquid Engine)"#, + desc = r#""#, + value = "-99091572" + ) + )] + ItemKitPressureFedLiquidEngine = -99091572i32, + #[strum( + serialize = "Meteorite", + props(name = r#"Meteorite"#, desc = r#""#, value = "-99064335") + )] + Meteorite = -99064335i32, + #[strum( + serialize = "ItemKitArcFurnace", + props(name = r#"Kit (Arc Furnace)"#, desc = r#""#, value = "-98995857") + )] + ItemKitArcFurnace = -98995857i32, + #[strum( + serialize = "StructureInsulatedPipeCrossJunction", + props( + name = r#"Insulated Pipe (Cross Junction)"#, + desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, + value = "-92778058" + ) + )] + StructureInsulatedPipeCrossJunction = -92778058i32, + #[strum( + serialize = "ItemWaterPipeMeter", + props(name = r#"Kit (Liquid Pipe Meter)"#, desc = r#""#, value = "-90898877") + )] + ItemWaterPipeMeter = -90898877i32, + #[strum( + serialize = "FireArmSMG", + props( + name = r#"Fire Arm SMG"#, + desc = r#"0.Single +1.Auto"#, + value = "-86315541" + ) + )] + FireArmSmg = -86315541i32, + #[strum( + serialize = "ItemHardsuitHelmet", + props( + name = r#"Hardsuit Helmet"#, + desc = r#"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", + props(name = r#"Ingot (Solder)"#, desc = r#""#, value = "-82508479") + )] + ItemSolderIngot = -82508479i32, + #[strum( + serialize = "CircuitboardGasDisplay", + props( + name = r#"Gas Display"#, + desc = r#"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", + props( + name = r#"Portable Generator"#, + desc = r#"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", + props(name = r#"Flower (Red)"#, desc = r#""#, value = "-81376085") + )] + ItemFlowerRed = -81376085i32, + #[strum( + serialize = "KitchenTableSimpleShort", + props( + name = r#"Kitchen Table (Simple Short)"#, + desc = r#""#, + value = "-78099334" + ) + )] + KitchenTableSimpleShort = -78099334i32, + #[strum( + serialize = "ImGuiCircuitboardAirlockControl", + props(name = r#"Airlock (Experimental)"#, desc = r#""#, value = "-73796547") + )] + ImGuiCircuitboardAirlockControl = -73796547i32, + #[strum( + serialize = "StructureInsulatedPipeLiquidCrossJunction6", + props( + name = r#"Insulated Liquid Pipe (6-Way Junction)"#, + desc = r#"Liquid piping with very low temperature loss or gain."#, + value = "-72748982" + ) + )] + StructureInsulatedPipeLiquidCrossJunction6 = -72748982i32, + #[strum( + serialize = "StructureCompositeCladdingAngledCorner", + props( + name = r#"Composite Cladding (Angled Corner)"#, + desc = r#""#, + value = "-69685069" + ) + )] + StructureCompositeCladdingAngledCorner = -69685069i32, + #[strum( + serialize = "StructurePowerTransmitter", + props( + name = r#"Microwave Power Transmitter"#, + desc = r#"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. +The 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", + props( + name = r#"Canned French Fries"#, + desc = r#"Because space would suck without 'em."#, + value = "-57608687" + ) + )] + ItemFrenchFries = -57608687i32, + #[strum( + serialize = "StructureConsoleLED1x2", + props( + name = r#"LED Display (Medium)"#, + desc = r#"0.Default +1.Percent +2.Power"#, + value = "-53151617" + ) + )] + StructureConsoleLed1X2 = -53151617i32, + #[strum( + serialize = "UniformMarine", + props(name = r#"Marine Uniform"#, desc = r#""#, value = "-48342840") + )] + UniformMarine = -48342840i32, #[strum( serialize = "Battery_Wireless_cell_Big", props( @@ -621,454 +4864,465 @@ The small cell stores up to 36000 watts of power."#, )] BatteryWirelessCellBig = -41519077i32, #[strum( - serialize = "StructureBeacon", - props(name = r#"Beacon"#, desc = r#""#, value = "-188177083") + serialize = "StructureCableCornerH", + props(name = r#"Heavy Cable (Corner)"#, desc = r#""#, value = "-39359015") )] - StructureBeacon = -188177083i32, + StructureCableCornerH = -39359015i32, #[strum( - serialize = "StructureAngledBench", - props(name = r#"Bench (Angled)"#, desc = r#""#, value = "1811979158") - )] - StructureAngledBench = 1811979158i32, - #[strum( - serialize = "StructureBench1", - props(name = r#"Bench (Counter Style)"#, desc = r#""#, value = "406745009") - )] - StructureBench1 = 406745009i32, - #[strum( - serialize = "StructureFlatBench", - props(name = r#"Bench (Flat)"#, desc = r#""#, value = "839890807") - )] - StructureFlatBench = 839890807i32, - #[strum( - serialize = "StructureBench3", - props(name = r#"Bench (Frame Style)"#, desc = r#""#, value = "-164622691") - )] - StructureBench3 = -164622691i32, - #[strum( - serialize = "StructureBench2", + serialize = "ItemPipeCowl", props( - name = r#"Bench (High Tech Style)"#, + name = r#"Pipe Cowl"#, + desc = r#"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", + props(name = r#"Stairwell (Front Left)"#, desc = r#""#, value = "-37454456") + )] + StructureStairwellFrontLeft = -37454456i32, + #[strum( + serialize = "StructureWallPaddedWindowThin", + props( + name = r#"Wall (Padded Window Thin)"#, desc = r#""#, - value = "-2127086069" + value = "-37302931" ) )] - StructureBench2 = -2127086069i32, + StructureWallPaddedWindowThin = -37302931i32, #[strum( - serialize = "StructureBench4", + serialize = "StructureInsulatedTankConnector", props( - name = r#"Bench (Workbench Style)"#, + name = r#"Insulated Tank Connector"#, desc = r#""#, - value = "1750375230" + value = "-31273349" ) )] - StructureBench4 = 1750375230i32, + StructureInsulatedTankConnector = -31273349i32, #[strum( - serialize = "ItemBiomass", + serialize = "ItemKitInsulatedPipeUtility", props( - name = r#"Biomass"#, - desc = r#"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" + name = r#"Kit (Insulated Pipe Utility Gas)"#, + desc = r#""#, + value = "-27284803" ) )] - ItemBiomass = -831480639i32, + ItemKitInsulatedPipeUtility = -27284803i32, #[strum( - serialize = "StructureBlastDoor", + serialize = "DynamicLight", props( - name = r#"Blast Door"#, - desc = r#"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. -Short 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" + name = r#"Portable Light"#, + desc = r#"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" ) )] - StructureBlastDoor = 337416191i32, + DynamicLight = -21970188i32, #[strum( - serialize = "StructureBlockBed", + serialize = "ItemKitBatteryLarge", + props(name = r#"Kit (Battery Large)"#, desc = r#""#, value = "-21225041") + )] + ItemKitBatteryLarge = -21225041i32, + #[strum( + serialize = "StructureSmallTableThickDouble", props( - name = r#"Block Bed"#, + name = r#"Small (Table Thick Double)"#, + desc = r#""#, + value = "-19246131" + ) + )] + StructureSmallTableThickDouble = -19246131i32, + #[strum( + serialize = "ItemAmmoBox", + props(name = r#"Ammo Box"#, desc = r#""#, value = "-9559091") + )] + ItemAmmoBox = -9559091i32, + #[strum( + serialize = "StructurePipeLiquidCrossJunction4", + props( + name = r#"Liquid Pipe (4-Way Junction)"#, + desc = r#"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", + props( + name = r#"Dynamic Gas Canister Rocket Fuel"#, + desc = r#""#, + value = "-8883951" + ) + )] + DynamicGasCanisterRocketFuel = -8883951i32, + #[strum( + serialize = "ItemPureIcePollutant", + props( + name = r#"Pure Ice Pollutant"#, + desc = r#"A frozen chunk of pure Pollutant"#, + value = "-1755356" + ) + )] + ItemPureIcePollutant = -1755356i32, + #[strum( + serialize = "ItemWreckageLargeExtendableRadiator01", + props( + name = r#"Wreckage Large Extendable Radiator"#, + desc = r#""#, + value = "-997763" + ) + )] + ItemWreckageLargeExtendableRadiator01 = -997763i32, + #[strum( + serialize = "StructureSingleBed", + props( + name = r#"Single Bed"#, desc = r#"Description coming."#, - value = "697908419" + value = "-492611" ) )] - StructureBlockBed = 697908419i32, + StructureSingleBed = -492611i32, #[strum( - serialize = "StructureBlocker", - props(name = r#"Blocker"#, desc = r#""#, value = "378084505") - )] - StructureBlocker = 378084505i32, - #[strum( - serialize = "ItemBreadLoaf", - props(name = r#"Bread Loaf"#, desc = r#""#, value = "893514943") - )] - ItemBreadLoaf = 893514943i32, - #[strum( - serialize = "StructureCableCorner3Burnt", + serialize = "StructureCableCorner3HBurnt", props( - name = r#"Burnt Cable (3-Way Corner)"#, + name = r#""#, + desc = r#""#, + value = "2393826" + ) + )] + StructureCableCorner3HBurnt = 2393826i32, + #[strum( + serialize = "StructureAutoMinerSmall", + props( + name = r#"Autominer (Small)"#, + desc = r#"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", + props( + name = r#"Crate Mk II"#, + desc = r#"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", + props(name = r#"Medium Filter (Water)"#, desc = r#""#, value = "8804422") + )] + ItemGasFilterWaterM = 8804422i32, + #[strum( + serialize = "StructureWallPaddedNoBorder", + props(name = r#"Wall (Padded No Border)"#, desc = r#""#, value = "8846501") + )] + StructureWallPaddedNoBorder = 8846501i32, + #[strum( + serialize = "ItemGasFilterVolatiles", + props( + name = r#"Filter (Volatiles)"#, + desc = r#"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", + props( + name = r#"Mining Charge"#, + desc = r#"A low cost, high yield explosive with a 10 second timer."#, + value = "15829510" + ) + )] + ItemMiningCharge = 15829510i32, + #[strum( + serialize = "ItemKitEngineSmall", + props(name = r#"Kit (Engine Small)"#, desc = r#""#, value = "19645163") + )] + ItemKitEngineSmall = 19645163i32, + #[strum( + serialize = "StructureHeatExchangerGastoGas", + props( + name = r#"Heat Exchanger - Gas"#, + desc = r#"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. +The '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. +As 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", + props( + name = r#"Pressurant Valve"#, + desc = r#"Pumps gas into a liquid pipe in order to raise the pressure"#, + value = "23052817" + ) + )] + StructurePressurantValve = 23052817i32, + #[strum( + serialize = "StructureWallHeater", + props( + name = r#"Wall Heater"#, + desc = r#"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", + props( + name = r#"Medium Convection Radiator Liquid"#, + desc = r#"Has been replaced by Medium Convection Radiator Liquid."#, + value = "24786172" + ) + )] + StructurePassiveLargeRadiatorLiquid = 24786172i32, + #[strum( + serialize = "StructureWallPlating", + props(name = r#"Wall (Plating)"#, desc = r#""#, value = "26167457") + )] + StructureWallPlating = 26167457i32, + #[strum( + serialize = "ItemSprayCanPurple", + props( + name = r#"Spray Paint (Purple)"#, + desc = r#"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", + props( + name = r#"Portable Gas Tank (Nitrous Oxide)"#, desc = r#""#, - value = "318437449" + value = "30727200" ) )] - StructureCableCorner3Burnt = 318437449i32, + DynamicGasCanisterNitrousOxide = 30727200i32, #[strum( - serialize = "StructureCableCorner4Burnt", + serialize = "StructureInLineTankGas1x2", props( - name = r#"Burnt Cable (4-Way Corner)"#, - desc = r#""#, - value = "268421361" + name = r#"In-Line Tank Gas"#, + desc = r#"A small expansion tank that increases the volume of a pipe network."#, + value = "35149429" ) )] - StructureCableCorner4Burnt = 268421361i32, + StructureInLineTankGas1X2 = 35149429i32, #[strum( - serialize = "StructureCableJunction4Burnt", + serialize = "ItemSteelSheets", props( - name = r#"Burnt Cable (4-Way Junction)"#, - desc = r#""#, - value = "-1756896811" + name = r#"Steel Sheets"#, + desc = r#"An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types."#, + value = "38555961" ) )] - StructureCableJunction4Burnt = -1756896811i32, - #[strum( - serialize = "StructureCableJunction4HBurnt", - props( - name = r#"Burnt Cable (4-Way Junction)"#, - desc = r#""#, - value = "-115809132" - ) - )] - StructureCableJunction4HBurnt = -115809132i32, - #[strum( - serialize = "StructureCableJunction5Burnt", - props( - name = r#"Burnt Cable (5-Way Junction)"#, - desc = r#""#, - value = "1545286256" - ) - )] - StructureCableJunction5Burnt = 1545286256i32, - #[strum( - serialize = "StructureCableJunction6Burnt", - props( - name = r#"Burnt Cable (6-Way Junction)"#, - desc = r#""#, - value = "-628145954" - ) - )] - StructureCableJunction6Burnt = -628145954i32, - #[strum( - serialize = "StructureCableJunction6HBurnt", - props( - name = r#"Burnt Cable (6-Way Junction)"#, - desc = r#""#, - value = "1854404029" - ) - )] - StructureCableJunction6HBurnt = 1854404029i32, - #[strum( - serialize = "StructureCableCornerHBurnt", - props(name = r#"Burnt Cable (Corner)"#, desc = r#""#, value = "1931412811") - )] - StructureCableCornerHBurnt = 1931412811i32, - #[strum( - serialize = "StructureCableCornerBurnt", - props(name = r#"Burnt Cable (Corner)"#, desc = r#""#, value = "-177220914") - )] - StructureCableCornerBurnt = -177220914i32, - #[strum( - serialize = "StructureCableJunctionHBurnt", - props(name = r#"Burnt Cable (Junction)"#, desc = r#""#, value = "-341365649") - )] - StructureCableJunctionHBurnt = -341365649i32, - #[strum( - serialize = "StructureCableJunctionBurnt", - props( - name = r#"Burnt Cable (Junction)"#, - desc = r#""#, - value = "-1620686196" - ) - )] - StructureCableJunctionBurnt = -1620686196i32, - #[strum( - serialize = "StructureCableStraightHBurnt", - props(name = r#"Burnt Cable (Straight)"#, desc = r#""#, value = "2085762089") - )] - StructureCableStraightHBurnt = 2085762089i32, - #[strum( - serialize = "StructureCableStraightBurnt", - props( - name = r#"Burnt Cable (Straight)"#, - desc = r#""#, - value = "-1196981113" - ) - )] - StructureCableStraightBurnt = -1196981113i32, - #[strum( - serialize = "StructureCableCorner4HBurnt", - props( - name = r#"Burnt Heavy Cable (4-Way Corner)"#, - desc = r#""#, - value = "-981223316" - ) - )] - StructureCableCorner4HBurnt = -981223316i32, - #[strum( - serialize = "StructureCableJunctionH5Burnt", - props( - name = r#"Burnt Heavy Cable (5-Way Junction)"#, - desc = r#""#, - value = "1701593300" - ) - )] - StructureCableJunctionH5Burnt = 1701593300i32, - #[strum( - serialize = "StructureLogicButton", - props(name = r#"Button"#, desc = r#""#, value = "491845673") - )] - StructureLogicButton = 491845673i32, - #[strum( - serialize = "StructureCableCorner3", - props( - name = r#"Cable (3-Way Corner)"#, - desc = r#"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. -Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, - value = "980469101" - ) - )] - StructureCableCorner3 = 980469101i32, - #[strum( - serialize = "StructureCableCorner4", - props(name = r#"Cable (4-Way Corner)"#, desc = r#""#, value = "-1542172466") - )] - StructureCableCorner4 = -1542172466i32, - #[strum( - serialize = "StructureCableJunction4", - props( - name = r#"Cable (4-Way Junction)"#, - desc = r#"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. -Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, - value = "1112047202" - ) - )] - StructureCableJunction4 = 1112047202i32, - #[strum( - serialize = "StructureCableJunction5", - props(name = r#"Cable (5-Way Junction)"#, desc = r#""#, value = "894390004") - )] - StructureCableJunction5 = 894390004i32, - #[strum( - serialize = "StructureCableJunction6", - props( - name = r#"Cable (6-Way Junction)"#, - desc = r#"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. -Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, - value = "-1404690610" - ) - )] - StructureCableJunction6 = -1404690610i32, - #[strum( - serialize = "StructureCableCorner", - props( - name = r#"Cable (Corner)"#, - desc = r#"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. -Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, - value = "-889269388" - ) - )] - StructureCableCorner = -889269388i32, - #[strum( - serialize = "StructureCableJunction", - props( - name = r#"Cable (Junction)"#, - desc = r#"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. -Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, - value = "-175342021" - ) - )] - StructureCableJunction = -175342021i32, - #[strum( - serialize = "StructureCableStraight", - props( - name = r#"Cable (Straight)"#, - desc = r#"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'. -Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, - value = "605357050" - ) - )] - StructureCableStraight = 605357050i32, - #[strum( - serialize = "StructureCableAnalysizer", - props(name = r#"Cable Analyzer"#, desc = r#""#, value = "1036015121") - )] - StructureCableAnalysizer = 1036015121i32, - #[strum( - serialize = "ItemCableCoil", - props( - name = r#"Cable Coil"#, - desc = r#"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. -Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, - value = "-466050668" - ) - )] - ItemCableCoil = -466050668i32, - #[strum( - serialize = "ItemCableCoilHeavy", - props( - name = r#"Cable Coil (Heavy)"#, - desc = r#"Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW."#, - value = "2060134443" - ) - )] - ItemCableCoilHeavy = 2060134443i32, - #[strum( - serialize = "StructureCamera", - props( - name = r#"Camera"#, - desc = r#"Nothing says 'I care' like a security camera that's been linked a Motion Sensor and a Console fitted with a Camera Display. -Be there, even when you're not."#, - value = "-342072665" - ) - )] - StructureCamera = -342072665i32, - #[strum( - serialize = "CircuitboardCameraDisplay", - props( - name = r#"Camera Display"#, - desc = r#"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, + ItemSteelSheets = 38555961i32, #[strum( serialize = "ItemGasCanisterEmpty", props(name = r#"Canister"#, desc = r#""#, value = "42280099") )] ItemGasCanisterEmpty = 42280099i32, #[strum( - serialize = "ItemGasCanisterCarbonDioxide", - props(name = r#"Canister (CO2)"#, desc = r#""#, value = "-767685874") + serialize = "ItemWreckageWallCooler2", + props(name = r#"Wreckage Wall Cooler"#, desc = r#""#, value = "45733800") )] - ItemGasCanisterCarbonDioxide = -767685874i32, + ItemWreckageWallCooler2 = 45733800i32, #[strum( - serialize = "ItemGasCanisterFuel", - props(name = r#"Canister (Fuel)"#, desc = r#""#, value = "-1014695176") + serialize = "ItemPumpkinPie", + props(name = r#"Pumpkin Pie"#, desc = r#""#, value = "62768076") )] - ItemGasCanisterFuel = -1014695176i32, + ItemPumpkinPie = 62768076i32, #[strum( - serialize = "ItemGasCanisterNitrogen", - props(name = r#"Canister (Nitrogen)"#, desc = r#""#, value = "2145068424") - )] - ItemGasCanisterNitrogen = 2145068424i32, - #[strum( - serialize = "ItemGasCanisterOxygen", - props(name = r#"Canister (Oxygen)"#, desc = r#""#, value = "-1152261938") - )] - ItemGasCanisterOxygen = -1152261938i32, - #[strum( - serialize = "ItemGasCanisterPollutants", - props(name = r#"Canister (Pollutants)"#, desc = r#""#, value = "-1552586384") - )] - ItemGasCanisterPollutants = -1552586384i32, - #[strum( - serialize = "ItemGasCanisterVolatiles", - props(name = r#"Canister (Volatiles)"#, desc = r#""#, value = "-472094806") - )] - ItemGasCanisterVolatiles = -472094806i32, - #[strum( - serialize = "ItemCannedCondensedMilk", + serialize = "ItemGasFilterPollutantsM", props( - name = r#"Canned Condensed Milk"#, - desc = r#"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 = "ItemCannedEdamame", - props( - name = r#"Canned Edamame"#, - desc = r#"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 = "ItemFrenchFries", - props( - name = r#"Canned French Fries"#, - desc = r#"Because space would suck without 'em."#, - value = "-57608687" - ) - )] - ItemFrenchFries = -57608687i32, - #[strum( - serialize = "ItemCannedMushroom", - props( - name = r#"Canned Mushroom"#, - desc = r#"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 = "ItemCannedPowderedEggs", - props( - name = r#"Canned Powdered Eggs"#, - desc = r#"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 = "ItemCannedRicePudding", - props( - name = r#"Canned Rice Pudding"#, - desc = r#"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 = "CardboardBox", - props(name = r#"Cardboard Box"#, desc = r#""#, value = "-1976947556") - )] - CardboardBox = -1976947556i32, - #[strum( - serialize = "StructureCargoStorageMedium", - props(name = r#"Cargo Storage (Medium)"#, desc = r#""#, value = "1151864003") - )] - StructureCargoStorageMedium = 1151864003i32, - #[strum( - serialize = "StructureCargoStorageSmall", - props(name = r#"Cargo Storage (Small)"#, desc = r#""#, value = "-1493672123") - )] - StructureCargoStorageSmall = -1493672123i32, - #[strum( - serialize = "CartridgeAccessController", - props( - name = r#"Cartridge (Access Controller)"#, + name = r#"Medium Filter (Pollutants)"#, desc = r#""#, - value = "-1634532552" + value = "63677771" ) )] - CartridgeAccessController = -1634532552i32, + ItemGasFilterPollutantsM = 63677771i32, #[strum( - serialize = "CartridgePlantAnalyser", + serialize = "StructurePipeStraight", props( - name = r#"Cartridge Plant Analyser"#, + name = r#"Pipe (Straight)"#, + desc = r#"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", + props(name = r#"Kit (Docking Port)"#, desc = r#""#, value = "77421200") + )] + ItemKitDockingPort = 77421200i32, + #[strum( + serialize = "CartridgeTracker", + props(name = r#"Tracker"#, desc = r#""#, value = "81488783") + )] + CartridgeTracker = 81488783i32, + #[strum( + serialize = "ToyLuna", + props(name = r#"Toy Luna"#, desc = r#""#, value = "94730034") + )] + ToyLuna = 94730034i32, + #[strum( + serialize = "ItemWreckageTurbineGenerator2", + props( + name = r#"Wreckage Turbine Generator"#, desc = r#""#, - value = "1101328282" + value = "98602599" ) )] - CartridgePlantAnalyser = 1101328282i32, + ItemWreckageTurbineGenerator2 = 98602599i32, #[strum( - serialize = "ItemGasFilterCarbonDioxideInfinite", + serialize = "StructurePowerUmbilicalFemale", props( - name = r#"Catalytic Filter (Carbon Dioxide)"#, - desc = r#"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" + name = r#"Umbilical Socket (Power)"#, + desc = r#""#, + value = "101488029" ) )] - ItemGasFilterCarbonDioxideInfinite = -185568964i32, + StructurePowerUmbilicalFemale = 101488029i32, + #[strum( + serialize = "DynamicSkeleton", + props(name = r#"Skeleton"#, desc = r#""#, value = "106953348") + )] + DynamicSkeleton = 106953348i32, + #[strum( + serialize = "ItemWaterBottle", + props( + name = r#"Water Bottle"#, + desc = r#"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", + props( + name = r#"Portable Gas Tank (Volatiles)"#, + desc = r#"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", + props( + name = r#"Composite Cladding (Rounded Corner Inner)"#, + desc = r#""#, + value = "110184667" + ) + )] + StructureCompositeCladdingRoundedCornerInner = 110184667i32, + #[strum( + serialize = "ItemTerrainManipulator", + props( + name = r#"Terrain Manipulator"#, + desc = r#"0.Mode0 +1.Mode1"#, + value = "111280987" + ) + )] + ItemTerrainManipulator = 111280987i32, + #[strum( + serialize = "FlareGun", + props(name = r#"Flare Gun"#, desc = r#""#, value = "118685786") + )] + FlareGun = 118685786i32, + #[strum( + serialize = "ItemKitPlanter", + props(name = r#"Kit (Planter)"#, desc = r#""#, value = "119096484") + )] + ItemKitPlanter = 119096484i32, + #[strum( + serialize = "ReagentColorGreen", + props(name = r#"Color Dye (Green)"#, desc = r#""#, value = "120807542") + )] + ReagentColorGreen = 120807542i32, + #[strum( + serialize = "DynamicGasCanisterNitrogen", + props( + name = r#"Portable Gas Tank (Nitrogen)"#, + desc = r#"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", + props(name = r#"Kit (Trigger Plate)"#, desc = r#""#, value = "123504691") + )] + ItemKitPressurePlate = 123504691i32, + #[strum( + serialize = "ItemKitLogicSwitch", + props(name = r#"Kit (Logic Switch)"#, desc = r#""#, value = "124499454") + )] + ItemKitLogicSwitch = 124499454i32, + #[strum( + serialize = "StructureCompositeCladdingSpherical", + props( + name = r#"Composite Cladding (Spherical)"#, + desc = r#""#, + value = "139107321" + ) + )] + StructureCompositeCladdingSpherical = 139107321i32, + #[strum( + serialize = "ItemLaptop", + props( + name = r#"Laptop"#, + desc = r#"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. + +You must place the laptop down to interact with the onsreen UI. + +Connects to Logic Transmitter"#, + value = "141535121" + ) + )] + ItemLaptop = 141535121i32, + #[strum( + serialize = "ApplianceSeedTray", + props( + name = r#"Appliance Seed Tray"#, + desc = r#"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", + props(name = r#"Landingpad Taxi Hold"#, desc = r#""#, value = "146051619") + )] + LandingpadTaxiPieceHold = 146051619i32, + #[strum( + serialize = "StructureFuselageTypeC5", + props(name = r#"Fuselage (Type C5)"#, desc = r#""#, value = "147395155") + )] + StructureFuselageTypeC5 = 147395155i32, + #[strum( + serialize = "ItemKitBasket", + props(name = r#"Kit (Basket)"#, desc = r#""#, value = "148305004") + )] + ItemKitBasket = 148305004i32, + #[strum( + serialize = "StructureRocketCircuitHousing", + props(name = r#"Rocket Circuit Housing"#, desc = r#""#, value = "150135861") + )] + StructureRocketCircuitHousing = 150135861i32, + #[strum( + serialize = "StructurePipeCrossJunction6", + props( + name = r#"Pipe (6-Way Junction)"#, + desc = r#"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", props( @@ -1079,230 +5333,52 @@ Be there, even when you're not."#, )] ItemGasFilterNitrogenInfinite = 152751131i32, #[strum( - serialize = "ItemGasFilterNitrousOxideInfinite", - props( - name = r#"Catalytic Filter (Nitrous Oxide)"#, - desc = r#"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" - ) + serialize = "StructureStairs4x2RailL", + props(name = r#"Stairs with Rail (Left)"#, desc = r#""#, value = "155214029") )] - ItemGasFilterNitrousOxideInfinite = -123934842i32, - #[strum( - serialize = "ItemGasFilterOxygenInfinite", - props( - name = r#"Catalytic Filter (Oxygen)"#, - desc = r#"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 = "ItemGasFilterPollutantsInfinite", - props( - name = r#"Catalytic Filter (Pollutants)"#, - desc = r#"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 = "ItemGasFilterVolatilesInfinite", - props( - name = r#"Catalytic Filter (Volatiles)"#, - desc = r#"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 = "ItemGasFilterWaterInfinite", - props( - name = r#"Catalytic Filter (Water)"#, - desc = r#"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 = "StructureCentrifuge", - props( - name = r#"Centrifuge"#, - desc = r#"If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore. - It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. - Its bigger brother Combustion Centrifuge can be used to process items significantly faster. Items processed by the centrifuge will be de-gassed. - 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 = "ItemCerealBar", - props( - name = r#"Cereal Bar"#, - desc = r#"Sustains, without decay. If only all our relationships were so well balanced."#, - value = "791746840" - ) - )] - ItemCerealBar = 791746840i32, - #[strum( - serialize = "StructureChair", - props( - name = r#"Chair"#, - desc = r#"One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs."#, - value = "1167659360" - ) - )] - StructureChair = 1167659360i32, - #[strum( - serialize = "StructureChairBacklessDouble", - props( - name = r#"Chair (Backless Double)"#, - desc = r#""#, - value = "1944858936" - ) - )] - StructureChairBacklessDouble = 1944858936i32, - #[strum( - serialize = "StructureChairBacklessSingle", - props( - name = r#"Chair (Backless Single)"#, - desc = r#""#, - value = "1672275150" - ) - )] - StructureChairBacklessSingle = 1672275150i32, - #[strum( - serialize = "StructureChairBoothCornerLeft", - props( - name = r#"Chair (Booth Corner Left)"#, - desc = r#""#, - value = "-367720198" - ) - )] - StructureChairBoothCornerLeft = -367720198i32, - #[strum( - serialize = "StructureChairBoothMiddle", - props(name = r#"Chair (Booth Middle)"#, desc = r#""#, value = "1640720378") - )] - StructureChairBoothMiddle = 1640720378i32, - #[strum( - serialize = "StructureChairRectangleDouble", - props( - name = r#"Chair (Rectangle Double)"#, - desc = r#""#, - value = "-1152812099" - ) - )] - StructureChairRectangleDouble = -1152812099i32, - #[strum( - serialize = "StructureChairRectangleSingle", - props( - name = r#"Chair (Rectangle Single)"#, - desc = r#""#, - value = "-1425428917" - ) - )] - StructureChairRectangleSingle = -1425428917i32, - #[strum( - serialize = "StructureChairThickDouble", - props(name = r#"Chair (Thick Double)"#, desc = r#""#, value = "-1245724402") - )] - StructureChairThickDouble = -1245724402i32, - #[strum( - serialize = "StructureChairThickSingle", - props(name = r#"Chair (Thick Single)"#, desc = r#""#, value = "-1510009608") - )] - StructureChairThickSingle = -1510009608i32, - #[strum( - serialize = "ItemCharcoal", - props( - name = r#"Charcoal"#, - desc = r#"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 = "ItemChemLightBlue", - props( - name = r#"Chem Light (Blue)"#, - desc = r#"A safe and slightly rave-some source of blue light. Snap to activate."#, - value = "-772542081" - ) - )] - ItemChemLightBlue = -772542081i32, - #[strum( - serialize = "ItemChemLightGreen", - props( - name = r#"Chem Light (Green)"#, - desc = r#"Enliven the dreariest, airless rock with this glowy green light. Snap to activate."#, - value = "-597479390" - ) - )] - ItemChemLightGreen = -597479390i32, - #[strum( - serialize = "ItemChemLightRed", - props( - name = r#"Chem Light (Red)"#, - desc = r#"A red glowstick. Snap to activate. Then reach for the lasers."#, - value = "-525810132" - ) - )] - ItemChemLightRed = -525810132i32, - #[strum( - serialize = "ItemChemLightWhite", - props( - name = r#"Chem Light (White)"#, - desc = r#"Snap the glowstick to activate a pale radiance that keeps the darkness at bay."#, - value = "1312166823" - ) - )] - ItemChemLightWhite = 1312166823i32, - #[strum( - serialize = "ItemChemLightYellow", - props( - name = r#"Chem Light (Yellow)"#, - desc = r#"Dispel the darkness with this yellow glowstick."#, - value = "1224819963" - ) - )] - ItemChemLightYellow = 1224819963i32, - #[strum( - serialize = "ApplianceChemistryStation", - props(name = r#"Chemistry Station"#, desc = r#""#, value = "1365789392") - )] - ApplianceChemistryStation = 1365789392i32, + StructureStairs4X2RailL = 155214029i32, #[strum( serialize = "NpcChick", props(name = r#"Chick"#, desc = r#""#, value = "155856647") )] NpcChick = 155856647i32, #[strum( - serialize = "NpcChicken", - props(name = r#"Chicken"#, desc = r#""#, value = "399074198") + serialize = "ItemWaspaloyIngot", + props(name = r#"Ingot (Waspaloy)"#, desc = r#""#, value = "156348098") )] - NpcChicken = 399074198i32, + ItemWaspaloyIngot = 156348098i32, #[strum( - serialize = "StructureChuteCorner", + serialize = "StructureReinforcedWallPaddedWindowThin", props( - name = r#"Chute (Corner)"#, - desc = r#"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. -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. -Chute 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" + name = r#"Reinforced Window (Thin)"#, + desc = r#"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" ) )] - StructureChuteCorner = 1360330136i32, + StructureReinforcedWallPaddedWindowThin = 158502707i32, #[strum( - serialize = "StructureChuteJunction", + serialize = "ItemKitWaterBottleFiller", props( - name = r#"Chute (Junction)"#, - desc = r#"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. -Chute 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" + name = r#"Kit (Water Bottle Filler)"#, + desc = r#""#, + value = "159886536" ) )] - StructureChuteJunction = -611232514i32, + ItemKitWaterBottleFiller = 159886536i32, + #[strum( + serialize = "ItemEmergencyWrench", + props(name = r#"Emergency Wrench"#, desc = r#""#, value = "162553030") + )] + ItemEmergencyWrench = 162553030i32, + #[strum( + serialize = "StructureChuteDigitalFlipFlopSplitterRight", + props( + name = r#"Chute Digital Flip Flop Splitter Right"#, + desc = r#"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", props( @@ -1315,223 +5391,150 @@ Chutes are fundamental components of chute networks, which allow the transport o )] StructureChuteStraight = 168307007i32, #[strum( - serialize = "StructureChuteWindow", + serialize = "ItemKitDoor", + props(name = r#"Kit (Door)"#, desc = r#""#, value = "168615924") + )] + ItemKitDoor = 168615924i32, + #[strum( + serialize = "ItemWreckageAirConditioner2", props( - name = r#"Chute (Window)"#, - desc = r#"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 = "StructureChuteBin", - props( - name = r#"Chute Bin"#, - desc = r#"The Stationeer's goal is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps. -Like 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 = "StructureChuteDigitalFlipFlopSplitterLeft", - props( - name = r#"Chute Digital Flip Flop Splitter Left"#, - desc = r#"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 = "StructureChuteDigitalFlipFlopSplitterRight", - props( - name = r#"Chute Digital Flip Flop Splitter Right"#, - desc = r#"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 = "StructureChuteDigitalValveLeft", - props( - name = r#"Chute Digital Valve Left"#, - desc = r#"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 = "StructureChuteDigitalValveRight", - props( - name = r#"Chute Digital Valve Right"#, - desc = r#"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 = "StructureChuteFlipFlopSplitter", - props( - name = r#"Chute Flip Flop Splitter"#, - desc = r#"A chute that toggles between two outputs"#, - value = "-1446854725" - ) - )] - StructureChuteFlipFlopSplitter = -1446854725i32, - #[strum( - serialize = "StructureChuteInlet", - props( - name = r#"Chute Inlet"#, - desc = r#"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. -The 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 = "StructureChuteOutlet", - props( - name = r#"Chute Outlet"#, - desc = r#"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. -The 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 = "StructureChuteOverflow", - props( - name = r#"Chute Overflow"#, - desc = r#"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 = "StructureChuteValve", - props( - name = r#"Chute Valve"#, - desc = r#"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 = "ItemCoffeeMug", - props(name = r#"Coffee Mug"#, desc = r#""#, value = "1800622698") - )] - ItemCoffeeMug = 1800622698i32, - #[strum( - serialize = "ReagentColorBlue", - props(name = r#"Color Dye (Blue)"#, desc = r#""#, value = "980054869") - )] - ReagentColorBlue = 980054869i32, - #[strum( - serialize = "ReagentColorGreen", - props(name = r#"Color Dye (Green)"#, desc = r#""#, value = "120807542") - )] - ReagentColorGreen = 120807542i32, - #[strum( - serialize = "ReagentColorOrange", - props(name = r#"Color Dye (Orange)"#, desc = r#""#, value = "-400696159") - )] - ReagentColorOrange = -400696159i32, - #[strum( - serialize = "ReagentColorRed", - props(name = r#"Color Dye (Red)"#, desc = r#""#, value = "1998377961") - )] - ReagentColorRed = 1998377961i32, - #[strum( - serialize = "ReagentColorYellow", - props(name = r#"Color Dye (Yellow)"#, desc = r#""#, value = "635208006") - )] - ReagentColorYellow = 635208006i32, - #[strum( - serialize = "StructureCombustionCentrifuge", - props( - name = r#"Combustion Centrifuge"#, - desc = r#"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. - 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. - 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. - 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. - 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. - "#, - value = "1238905683" - ) - )] - StructureCombustionCentrifuge = 1238905683i32, - #[strum( - serialize = "MotherboardComms", - props( - name = r#"Communications Motherboard"#, - desc = r#"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."#, - value = "-337075633" - ) - )] - MotherboardComms = -337075633i32, - #[strum( - serialize = "StructureCompositeCladdingAngledCornerInnerLongL", - props( - name = r#"Composite Cladding (Angled Corner Inner Long L)"#, + name = r#"Wreckage Air Conditioner"#, desc = r#""#, - value = "947705066" + value = "169888054" ) )] - StructureCompositeCladdingAngledCornerInnerLongL = 947705066i32, + ItemWreckageAirConditioner2 = 169888054i32, #[strum( - serialize = "StructureCompositeCladdingAngledCornerInnerLongR", + serialize = "Landingpad_GasCylinderTankPiece", props( - name = r#"Composite Cladding (Angled Corner Inner Long R)"#, - desc = r#""#, - value = "-1032590967" + name = r#"Landingpad Gas Storage"#, + desc = r#"Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders."#, + value = "170818567" ) )] - StructureCompositeCladdingAngledCornerInnerLongR = -1032590967i32, + LandingpadGasCylinderTankPiece = 170818567i32, #[strum( - serialize = "StructureCompositeCladdingAngledCornerInnerLong", - props( - name = r#"Composite Cladding (Angled Corner Inner Long)"#, - desc = r#""#, - value = "-1417912632" - ) + serialize = "ItemKitStairs", + props(name = r#"Kit (Stairs)"#, desc = r#""#, value = "170878959") )] - StructureCompositeCladdingAngledCornerInnerLong = -1417912632i32, + ItemKitStairs = 170878959i32, #[strum( - serialize = "StructureCompositeCladdingAngledCornerInner", + serialize = "ItemPlantSampler", props( - name = r#"Composite Cladding (Angled Corner Inner)"#, - desc = r#""#, - value = "-1841871763" + name = r#"Plant Sampler"#, + desc = r#"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" ) )] - StructureCompositeCladdingAngledCornerInner = -1841871763i32, + ItemPlantSampler = 173023800i32, #[strum( - serialize = "StructureCompositeCladdingAngledCorner", - props( - name = r#"Composite Cladding (Angled Corner)"#, - desc = r#""#, - value = "-69685069" - ) + serialize = "ItemAlienMushroom", + props(name = r#"Alien Mushroom"#, desc = r#""#, value = "176446172") )] - StructureCompositeCladdingAngledCorner = -69685069i32, + ItemAlienMushroom = 176446172i32, #[strum( - serialize = "StructureCompositeCladdingAngled", + serialize = "ItemKitSatelliteDish", props( - name = r#"Composite Cladding (Angled)"#, + name = r#"Kit (Medium Satellite Dish)"#, desc = r#""#, - value = "-1513030150" + value = "178422810" ) )] - StructureCompositeCladdingAngled = -1513030150i32, + ItemKitSatelliteDish = 178422810i32, #[strum( - serialize = "StructureCompositeCladdingCylindricalPanel", + serialize = "StructureRocketEngineTiny", + props(name = r#"Rocket Engine (Tiny)"#, desc = r#""#, value = "178472613") + )] + StructureRocketEngineTiny = 178472613i32, + #[strum( + serialize = "StructureWallPaddedNoBorderCorner", props( - name = r#"Composite Cladding (Cylindrical Panel)"#, + name = r#"Wall (Padded No Border Corner)"#, desc = r#""#, - value = "1077151132" + value = "179694804" ) )] - StructureCompositeCladdingCylindricalPanel = 1077151132i32, + StructureWallPaddedNoBorderCorner = 179694804i32, + #[strum( + serialize = "StructureShelfMedium", + props( + name = r#"Shelf Medium"#, + desc = r#"A shelf for putting things on, so you can see them."#, + value = "182006674" + ) + )] + StructureShelfMedium = 182006674i32, + #[strum( + serialize = "StructureExpansionValve", + props( + name = r#"Expansion Valve"#, + desc = r#"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", + props(name = r#"Kit (Cable Fuses)"#, desc = r#""#, value = "195442047") + )] + ItemCableFuse = 195442047i32, + #[strum( + serialize = "ItemKitRoverMKI", + props(name = r#"Kit (Rover Mk I)"#, desc = r#""#, value = "197243872") + )] + ItemKitRoverMki = 197243872i32, + #[strum( + serialize = "DynamicGasCanisterWater", + props( + name = r#"Portable Liquid Tank (Water)"#, + desc = r#"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. +Try to keep pressure under 10 MPa, or you'll end up wet, hurt and sorry, without any of the fun. +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 = "197293625" + ) + )] + DynamicGasCanisterWater = 197293625i32, + #[strum( + serialize = "ItemAngleGrinder", + props( + name = r#"Angle Grinder"#, + desc = r#"Angles-be-gone with the trusty angle grinder."#, + value = "201215010" + ) + )] + ItemAngleGrinder = 201215010i32, + #[strum( + serialize = "StructureCableCornerH4", + props( + name = r#"Heavy Cable (4-Way Corner)"#, + desc = r#""#, + value = "205837861" + ) + )] + StructureCableCornerH4 = 205837861i32, + #[strum( + serialize = "ItemEmergencySpaceHelmet", + props(name = r#"Emergency Space Helmet"#, desc = r#""#, value = "205916793") + )] + ItemEmergencySpaceHelmet = 205916793i32, + #[strum( + serialize = "ItemKitGovernedGasRocketEngine", + props( + name = r#"Kit (Pumped Gas Rocket Engine)"#, + desc = r#""#, + value = "206848766" + ) + )] + ItemKitGovernedGasRocketEngine = 206848766i32, + #[strum( + serialize = "StructurePressureRegulator", + props( + name = r#"Pressure Regulator"#, + desc = r#"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", props( @@ -1542,104 +5545,309 @@ The chute outlet is an aperture for exiting items from Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options."#, + value = "221058307" ) )] - StructureCompositeCladdingAngledLong = -387546514i32, + AutolathePrinterMod = 221058307i32, #[strum( - serialize = "StructureCompositeCladdingPanel", + serialize = "StructureChuteOverflow", props( - name = r#"Composite Cladding (Panel)"#, - desc = r#""#, - value = "1997436771" + name = r#"Chute Overflow"#, + desc = r#"The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied."#, + value = "225377225" ) )] - StructureCompositeCladdingPanel = 1997436771i32, + StructureChuteOverflow = 225377225i32, #[strum( - serialize = "StructureCompositeCladdingRoundedCornerInner", + serialize = "ItemLiquidPipeAnalyzer", props( - name = r#"Composite Cladding (Rounded Corner Inner)"#, + name = r#"Kit (Liquid Pipe Analyzer)"#, desc = r#""#, - value = "110184667" + value = "226055671" ) )] - StructureCompositeCladdingRoundedCornerInner = 110184667i32, + ItemLiquidPipeAnalyzer = 226055671i32, #[strum( - serialize = "StructureCompositeCladdingRoundedCorner", + serialize = "ItemGoldIngot", props( - name = r#"Composite Cladding (Rounded Corner)"#, + name = r#"Ingot (Gold)"#, + desc = r#"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", + props( + name = r#"Kit (Combustion Centrifuge)"#, desc = r#""#, - value = "1951525046" + value = "231903234" ) )] - StructureCompositeCladdingRoundedCorner = 1951525046i32, + KitStructureCombustionCentrifuge = 231903234i32, #[strum( - serialize = "StructureCompositeCladdingRounded", + serialize = "ItemExplosive", + props(name = r#"Remote Explosive"#, desc = r#""#, value = "235361649") + )] + ItemExplosive = 235361649i32, + #[strum( + serialize = "StructureConsole", props( - name = r#"Composite Cladding (Rounded)"#, + name = r#"Console"#, + desc = r#"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. +A 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", + props( + name = r#"Passive Vent"#, + desc = r#"This kit creates a Passive Vent among other variants."#, + value = "238631271" + ) + )] + ItemPassiveVent = 238631271i32, + #[strum( + serialize = "ItemMKIIAngleGrinder", + props( + name = r#"Mk II Angle Grinder"#, + desc = r#"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", + props(name = r#"Handgun"#, desc = r#""#, value = "247238062") + )] + Handgun = 247238062i32, + #[strum( + serialize = "PassiveSpeaker", + props(name = r#"Passive Speaker"#, desc = r#""#, value = "248893646") + )] + PassiveSpeaker = 248893646i32, + #[strum( + serialize = "ItemKitBeacon", + props(name = r#"Kit (Beacon)"#, desc = r#""#, value = "249073136") + )] + ItemKitBeacon = 249073136i32, + #[strum( + serialize = "ItemCharcoal", + props( + name = r#"Charcoal"#, + desc = r#"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", + props( + name = r#"Suit Storage"#, + desc = r#"As tidy as it is useful, the suit storage rack holds an Eva Suit, Space Helmet and a Jetpack Basic. +When 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. +All 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", + props( + name = r#"Corn"#, + desc = r#"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", + props( + name = r#"Liquid Pipe (T Junction)"#, + desc = r#"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", + props(name = r#"Batch Reader"#, desc = r#""#, value = "264413729") + )] + StructureLogicBatchReader = 264413729i32, + #[strum( + serialize = "StructureDeepMiner", + props( + name = r#"Deep Miner"#, + desc = r#"Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s"#, + value = "265720906" + ) + )] + StructureDeepMiner = 265720906i32, + #[strum( + serialize = "ItemEmergencyScrewdriver", + props(name = r#"Emergency Screwdriver"#, desc = r#""#, value = "266099983") + )] + ItemEmergencyScrewdriver = 266099983i32, + #[strum( + serialize = "ItemFilterFern", + props( + name = r#"Darga Fern"#, + desc = r#"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", + props( + name = r#"Burnt Cable (4-Way Corner)"#, desc = r#""#, - value = "-259357734" + value = "268421361" ) )] - StructureCompositeCladdingRounded = -259357734i32, + StructureCableCorner4Burnt = 268421361i32, #[strum( - serialize = "StructureCompositeCladdingSphericalCap", + serialize = "StructureFrameCornerCut", props( - name = r#"Composite Cladding (Spherical Cap)"#, + name = r#"Steel Frame (Corner Cut)"#, + desc = r#"0.Mode0 +1.Mode1"#, + value = "271315669" + ) + )] + StructureFrameCornerCut = 271315669i32, + #[strum( + serialize = "StructureTankSmallInsulated", + props(name = r#"Tank Small (Insulated)"#, desc = r#""#, value = "272136332") + )] + StructureTankSmallInsulated = 272136332i32, + #[strum( + serialize = "StructureCableFuse100k", + props(name = r#"Fuse (100kW)"#, desc = r#""#, value = "281380789") + )] + StructureCableFuse100K = 281380789i32, + #[strum( + serialize = "ItemKitIceCrusher", + props(name = r#"Kit (Ice Crusher)"#, desc = r#""#, value = "288111533") + )] + ItemKitIceCrusher = 288111533i32, + #[strum( + serialize = "ItemKitPowerTransmitter", + props(name = r#"Kit (Power Transmitter)"#, desc = r#""#, value = "291368213") + )] + ItemKitPowerTransmitter = 291368213i32, + #[strum( + serialize = "StructurePipeLiquidCrossJunction6", + props( + name = r#"Liquid Pipe (6-Way Junction)"#, + desc = r#"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", + props(name = r#"Kit (Landing Pad Basic)"#, desc = r#""#, value = "293581318") + )] + ItemKitLandingPadBasic = 293581318i32, + #[strum( + serialize = "StructureInsulatedPipeLiquidStraight", + props( + name = r#"Insulated Liquid Pipe (Straight)"#, + desc = r#"Liquid piping with very low temperature loss or gain."#, + value = "295678685" + ) + )] + StructureInsulatedPipeLiquidStraight = 295678685i32, + #[strum( + serialize = "StructureWallFlatCornerSquare", + props( + name = r#"Wall (Flat Corner Square)"#, desc = r#""#, - value = "534213209" + value = "298130111" ) )] - StructureCompositeCladdingSphericalCap = 534213209i32, + StructureWallFlatCornerSquare = 298130111i32, #[strum( - serialize = "StructureCompositeCladdingSphericalCorner", + serialize = "ItemHat", props( - name = r#"Composite Cladding (Spherical Corner)"#, + name = r#"Hat"#, + desc = r#"As the name suggests, this is a hat."#, + value = "299189339" + ) + )] + ItemHat = 299189339i32, + #[strum( + serialize = "ItemWaterPipeDigitalValve", + props( + name = r#"Kit (Liquid Digital Valve)"#, desc = r#""#, - value = "1751355139" + value = "309693520" ) )] - StructureCompositeCladdingSphericalCorner = 1751355139i32, + ItemWaterPipeDigitalValve = 309693520i32, #[strum( - serialize = "StructureCompositeCladdingSpherical", + serialize = "SeedBag_Mushroom", props( - name = r#"Composite Cladding (Spherical)"#, + name = r#"Mushroom Seeds"#, + desc = r#"Grow a Mushroom."#, + value = "311593418" + ) + )] + SeedBagMushroom = 311593418i32, + #[strum( + serialize = "StructureCableCorner3Burnt", + props( + name = r#"Burnt Cable (3-Way Corner)"#, desc = r#""#, - value = "139107321" + value = "318437449" ) )] - StructureCompositeCladdingSpherical = 139107321i32, + StructureCableCorner3Burnt = 318437449i32, #[strum( - serialize = "StructureCompositeDoor", + serialize = "StructureLogicSwitch2", + props(name = r#"Switch"#, desc = r#""#, value = "321604921") + )] + StructureLogicSwitch2 = 321604921i32, + #[strum( + serialize = "StructureOccupancySensor", props( - name = r#"Composite Door"#, - desc = r#"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" + name = r#"Occupancy Sensor"#, + desc = r#"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" ) )] - StructureCompositeDoor = -793837322i32, + StructureOccupancySensor = 322782515i32, + #[strum( + serialize = "ItemKitSDBHopper", + props(name = r#"Kit (SDB Hopper)"#, desc = r#""#, value = "323957548") + )] + ItemKitSdbHopper = 323957548i32, + #[strum( + serialize = "ItemMKIIDrill", + props( + name = r#"Mk II Drill"#, + desc = r#"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", props( @@ -1650,23 +5858,635 @@ The chute outlet is an aperture for exiting items from 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. + "#, + value = "336213101" + ) + )] + StructureAutolathe = 336213101i32, + #[strum( + serialize = "AccessCardKhaki", + props(name = r#"Access Card (Khaki)"#, desc = r#""#, value = "337035771") + )] + AccessCardKhaki = 337035771i32, + #[strum( + serialize = "StructureBlastDoor", + props( + name = r#"Blast Door"#, + desc = r#"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. +Short 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", + props(name = r#"Kit (Weather Station)"#, desc = r#""#, value = "337505889") + )] + ItemKitWeatherStation = 337505889i32, + #[strum( + serialize = "StructureStairwellFrontRight", + props(name = r#"Stairwell (Front Right)"#, desc = r#""#, value = "340210934") + )] + StructureStairwellFrontRight = 340210934i32, + #[strum( + serialize = "ItemKitGrowLight", + props(name = r#"Kit (Grow Light)"#, desc = r#""#, value = "341030083") + )] + ItemKitGrowLight = 341030083i32, + #[strum( + serialize = "StructurePictureFrameThickMountLandscapeSmall", + props( + name = r#"Picture Frame Thick Landscape Small"#, + desc = r#""#, + value = "347154462" + ) + )] + StructurePictureFrameThickMountLandscapeSmall = 347154462i32, + #[strum( + serialize = "RoverCargo", + props( + name = r#"Rover (Cargo)"#, + desc = r#"Connects to Logic Transmitter"#, + value = "350726273" + ) + )] + RoverCargo = 350726273i32, + #[strum( + serialize = "StructureInsulatedPipeLiquidCrossJunction4", + props( + name = r#"Insulated Liquid Pipe (4-Way Junction)"#, + desc = r#"Liquid piping with very low temperature loss or gain."#, + value = "363303270" + ) + )] + StructureInsulatedPipeLiquidCrossJunction4 = 363303270i32, + #[strum( + serialize = "ItemHardBackpack", + props( + name = r#"Hardsuit Backpack"#, + desc = r#"This backpack can be useful when you are working inside and don't need to fly around."#, + value = "374891127" + ) + )] + ItemHardBackpack = 374891127i32, + #[strum( + serialize = "ItemKitDynamicLiquidCanister", + props( + name = r#"Kit (Portable Liquid Tank)"#, + desc = r#""#, + value = "375541286" + ) + )] + ItemKitDynamicLiquidCanister = 375541286i32, + #[strum( + serialize = "ItemKitGasGenerator", + props( + name = r#"Kit (Gas Fuel Generator)"#, + desc = r#""#, + value = "377745425" + ) + )] + ItemKitGasGenerator = 377745425i32, + #[strum( + serialize = "StructureBlocker", + props(name = r#"Blocker"#, desc = r#""#, value = "378084505") + )] + StructureBlocker = 378084505i32, + #[strum( + serialize = "StructurePressureFedLiquidEngine", + props( + name = r#"Pressure Fed Liquid Engine"#, + desc = r#"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 = "ItemPureIceNitrous", + props( + name = r#"Pure Ice NitrousOxide"#, + desc = r#"A frozen chunk of pure Nitrous Oxide"#, + value = "386754635" + ) + )] + ItemPureIceNitrous = 386754635i32, + #[strum( + serialize = "StructureWallSmallPanelsMonoChrome", + props( + name = r#"Wall (Small Panels Mono Chrome)"#, + desc = r#""#, + value = "386820253" + ) + )] + StructureWallSmallPanelsMonoChrome = 386820253i32, + #[strum( + serialize = "ItemMKIIDuctTape", + props( + name = r#"Mk II Duct Tape"#, + desc = r#"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. +To 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", + props(name = r#"Wreckage Structure RTG"#, desc = r#""#, value = "391453348") + )] + ItemWreckageStructureRtg1 = 391453348i32, + #[strum( + serialize = "ItemPipeLabel", + props( + name = r#"Kit (Pipe Label)"#, + desc = r#"This kit creates a Pipe Label."#, + value = "391769637" + ) + )] + ItemPipeLabel = 391769637i32, + #[strum( + serialize = "DynamicGasCanisterPollutants", + props( + name = r#"Portable Gas Tank (Pollutants)"#, + desc = r#""#, + value = "396065382" + ) + )] + DynamicGasCanisterPollutants = 396065382i32, + #[strum( + serialize = "NpcChicken", + props(name = r#"Chicken"#, desc = r#""#, value = "399074198") + )] + NpcChicken = 399074198i32, + #[strum( + serialize = "RailingElegant01", + props( + name = r#"Railing Elegant (Type 1)"#, + desc = r#""#, + value = "399661231" + ) + )] + RailingElegant01 = 399661231i32, + #[strum( + serialize = "StructureBench1", + props(name = r#"Bench (Counter Style)"#, desc = r#""#, value = "406745009") + )] + StructureBench1 = 406745009i32, + #[strum( + serialize = "ItemAstroloyIngot", + props( + name = r#"Ingot (Astroloy)"#, + desc = r#"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", + props( + name = r#"Medium Filter (Carbon Dioxide)"#, + desc = r#""#, + value = "416897318" + ) + )] + ItemGasFilterCarbonDioxideM = 416897318i32, + #[strum( + serialize = "ItemPillStun", + props( + name = r#"Pill (Paralysis)"#, + desc = r#"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", + props(name = r#"Kit (Crate)"#, desc = r#""#, value = "429365598") + )] + ItemKitCrate = 429365598i32, + #[strum( + serialize = "AccessCardPink", + props(name = r#"Access Card (Pink)"#, desc = r#""#, value = "431317557") + )] + AccessCardPink = 431317557i32, + #[strum( + serialize = "StructureWaterPipeMeter", + props(name = r#"Liquid Pipe Meter"#, desc = r#""#, value = "433184168") + )] + StructureWaterPipeMeter = 433184168i32, + #[strum( + serialize = "Robot", + props( + name = r#"AIMeE Bot"#, + desc = r#"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. + +Intended to unearth and retrieve ores automatically, the unit requires basic programming knowledge to operate, and IC Editor Motherboard. + +AIMEe has 7 modes: + +RobotMode.None = 0 = Do nothing +RobotMode.None = 1 = Follow nearest player +RobotMode.None = 2 = Move to target in straight line +RobotMode.None = 3 = Wander around looking for ores in 15 co-ords radius +RobotMode.None = 4 = Unload in chute input or chute bin within 3 meters / 1.5 large grids +RobotMode.None = 5 = Path(find) to target +RobotMode.None = 6 = Automatic assigned state, shows when storage slots are fullConnects to Logic Transmitter"#, + value = "434786784" + ) + )] + Robot = 434786784i32, + #[strum( + serialize = "StructureChuteValve", + props( + name = r#"Chute Valve"#, + desc = r#"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", + props( + name = r#"Pipe Analyzer"#, + desc = r#"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. +Displaying 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."#, + value = "435685051" + ) + )] + StructurePipeAnalysizer = 435685051i32, + #[strum( + serialize = "StructureLogicBatchSlotReader", + props(name = r#"Batch Slot Reader"#, desc = r#""#, value = "436888930") + )] + StructureLogicBatchSlotReader = 436888930i32, + #[strum( + serialize = "StructureSatelliteDish", + props( + name = r#"Medium Satellite Dish"#, + desc = r#"This medium communications unit can be used to communicate with nearby trade vessels. + +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."#, + value = "439026183" + ) + )] + StructureSatelliteDish = 439026183i32, + #[strum( + serialize = "StructureIceCrusher", + props( + name = r#"Ice Crusher"#, + desc = r#"The Recurso KoolAuger converts various ices into their respective gases and liquids. +A 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. +If 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", + props( + name = r#"Pipe Bender Mod"#, + desc = r#"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", + props( + name = r#"Advanced Composter"#, + desc = r#"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. +When processing, it releases nitrogen and volatiles, as well a small amount of heat. + +Compost composition +Fertilizer 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. + +- Food increases PLANT YIELD up to two times +- Decayed Food increases plant GROWTH SPEED up to two times +- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for up to five times +"#, + value = "446212963" + ) + )] + StructureAdvancedComposter = 446212963i32, + #[strum( + serialize = "ItemKitLargeDirectHeatExchanger", + props( + name = r#"Kit (Large Direct Heat Exchanger)"#, + desc = r#""#, + value = "450164077" + ) + )] + ItemKitLargeDirectHeatExchanger = 450164077i32, + #[strum( + serialize = "ItemKitInsulatedPipe", + props(name = r#"Kit (Insulated Pipe)"#, desc = r#""#, value = "452636699") + )] + ItemKitInsulatedPipe = 452636699i32, + #[strum( + serialize = "AccessCardPurple", + props(name = r#"Access Card (Purple)"#, desc = r#""#, value = "459843265") + )] + AccessCardPurple = 459843265i32, + #[strum( + serialize = "ItemGasFilterNitrousOxideL", + props( + name = r#"Heavy Filter (Nitrous Oxide)"#, + desc = r#""#, + value = "465267979" + ) + )] + ItemGasFilterNitrousOxideL = 465267979i32, + #[strum( + serialize = "StructurePipeCowl", + props(name = r#"Pipe Cowl"#, desc = r#""#, value = "465816159") + )] + StructurePipeCowl = 465816159i32, + #[strum( + serialize = "StructureSDBHopperAdvanced", + props(name = r#"SDB Hopper Advanced"#, desc = r#""#, value = "467225612") + )] + StructureSdbHopperAdvanced = 467225612i32, + #[strum( + serialize = "StructureCableJunctionH", + props( + name = r#"Heavy Cable (3-Way Junction)"#, + desc = r#""#, + value = "469451637" + ) + )] + StructureCableJunctionH = 469451637i32, + #[strum( + serialize = "ItemHEMDroidRepairKit", + props( + name = r#"HEMDroid Repair Kit"#, + desc = r#"Repairs damaged HEM-Droids to full health."#, + value = "470636008" + ) + )] + ItemHemDroidRepairKit = 470636008i32, + #[strum( + serialize = "ItemKitRocketCargoStorage", + props( + name = r#"Kit (Rocket Cargo Storage)"#, + desc = r#""#, + value = "479850239" + ) + )] + ItemKitRocketCargoStorage = 479850239i32, + #[strum( + serialize = "StructureLiquidPressureRegulator", + props( + name = r#"Liquid Volume Regulator"#, + desc = r#"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", + props(name = r#"Switchgrass Seed"#, desc = r#""#, value = "488360169") + )] + SeedBagSwitchgrass = 488360169i32, + #[strum( + serialize = "ItemKitLadder", + props(name = r#"Kit (Ladder)"#, desc = r#""#, value = "489494578") + )] + ItemKitLadder = 489494578i32, + #[strum( + serialize = "StructureLogicButton", + props(name = r#"Button"#, desc = r#""#, value = "491845673") + )] + StructureLogicButton = 491845673i32, + #[strum( + serialize = "ItemRTG", + props( + name = r#"Kit (Creative RTG)"#, + desc = r#"This kit creates that miracle of modern science, a Kit (Creative RTG)."#, + value = "495305053" + ) + )] + ItemRtg = 495305053i32, + #[strum( + serialize = "ItemKitAIMeE", + props(name = r#"Kit (AIMeE)"#, desc = r#""#, value = "496830914") + )] + ItemKitAiMeE = 496830914i32, + #[strum( + serialize = "ItemSprayCanWhite", + props( + name = r#"Spray Paint (White)"#, + desc = r#"White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff."#, + value = "498481505" + ) + )] + ItemSprayCanWhite = 498481505i32, + #[strum( + serialize = "ItemElectrumIngot", + props(name = r#"Ingot (Electrum)"#, desc = r#""#, value = "502280180") + )] + ItemElectrumIngot = 502280180i32, + #[strum( + serialize = "MotherboardLogic", + props( + name = r#"Logic Motherboard"#, + desc = r#"Motherboards are connected to Computers to perform various technical functions. +The 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", + props(name = r#"Stairwell (Back Left)"#, desc = r#""#, value = "505924160") + )] + StructureStairwellBackLeft = 505924160i32, + #[strum( + serialize = "ItemKitAccessBridge", + props(name = r#"Kit (Access Bridge)"#, desc = r#""#, value = "513258369") + )] + ItemKitAccessBridge = 513258369i32, + #[strum( + serialize = "StructureRocketTransformerSmall", + props( + name = r#"Transformer Small (Rocket)"#, + desc = r#""#, + value = "518925193" + ) + )] + StructureRocketTransformerSmall = 518925193i32, + #[strum( + serialize = "DynamicAirConditioner", + props( + name = r#"Portable Air Conditioner"#, + desc = r#"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", + props(name = r#"Kit (Tool Manufactory)"#, desc = r#""#, value = "529137748") + )] + ItemKitToolManufactory = 529137748i32, + #[strum( + serialize = "ItemKitSign", + props(name = r#"Kit (Sign)"#, desc = r#""#, value = "529996327") + )] + ItemKitSign = 529996327i32, + #[strum( + serialize = "StructureCompositeCladdingSphericalCap", + props( + name = r#"Composite Cladding (Spherical Cap)"#, + desc = r#""#, + value = "534213209" + ) + )] + StructureCompositeCladdingSphericalCap = 534213209i32, + #[strum( + serialize = "ItemPureIceLiquidOxygen", + props( + name = r#"Pure Ice Liquid Oxygen"#, + desc = r#"A frozen chunk of pure Liquid Oxygen"#, + value = "541621589" + ) + )] + ItemPureIceLiquidOxygen = 541621589i32, + #[strum( + serialize = "ItemWreckageStructureWeatherStation003", + props( + name = r#"Wreckage Structure Weather Station"#, + desc = r#""#, + value = "542009679" + ) + )] + ItemWreckageStructureWeatherStation003 = 542009679i32, + #[strum( + serialize = "StructureInLineTankLiquid1x1", + props( + name = r#"In-Line Tank Small Liquid"#, + desc = r#"A small expansion tank that increases the volume of a pipe network."#, + value = "543645499" + ) + )] + StructureInLineTankLiquid1X1 = 543645499i32, + #[strum( + serialize = "ItemBatteryCellNuclear", + props( + name = r#"Battery Cell (Nuclear)"#, + desc = r#"Illegal on Earth since the Chengdu Event, Norsec nuclear power cells found a new and drastically less safety-conscious market offworld. + +POWER OUTPUT +Pushing 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", + props( + name = r#"Corn Soup"#, + desc = r#"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", + props( + name = r#"Advanced Furnace"#, + desc = r#"The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure."#, + value = "545937711" + ) + )] + StructureAdvancedFurnace = 545937711i32, + #[strum( + serialize = "StructureLogicRocketUplink", + props(name = r#"Logic Uplink"#, desc = r#""#, value = "546002924") + )] + StructureLogicRocketUplink = 546002924i32, + #[strum( + serialize = "StructureLogicDial", + props( + name = r#"Dial"#, + desc = r#"An assignable dial with up to 1000 modes."#, + value = "554524804" + ) + )] + StructureLogicDial = 554524804i32, + #[strum( + serialize = "StructureLightLongWide", + props(name = r#"Wall Light (Long Wide)"#, desc = r#""#, value = "555215790") + )] + StructureLightLongWide = 555215790i32, + #[strum( + serialize = "StructureProximitySensor", + props( + name = r#"Proximity Sensor"#, + desc = r#"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", + props(name = r#"Access Card (Yellow)"#, desc = r#""#, value = "568932536") + )] + AccessCardYellow = 568932536i32, + #[strum( + serialize = "StructureDiodeSlide", + props(name = r#"Diode Slide"#, desc = r#""#, value = "576516101") + )] + StructureDiodeSlide = 576516101i32, + #[strum( + serialize = "ItemKitSecurityPrinter", + props(name = r#"Kit (Security Printer)"#, desc = r#""#, value = "578078533") + )] + ItemKitSecurityPrinter = 578078533i32, + #[strum( + serialize = "ItemKitCentrifuge", + props(name = r#"Kit (Centrifuge)"#, desc = r#""#, value = "578182956") + )] + ItemKitCentrifuge = 578182956i32, + #[strum( + serialize = "DynamicHydroponics", + props(name = r#"Portable Hydroponics"#, desc = r#""#, value = "587726607") + )] + DynamicHydroponics = 587726607i32, + #[strum( + serialize = "ItemKitPipeUtilityLiquid", + props( + name = r#"Kit (Pipe Utility Liquid)"#, + desc = r#""#, + value = "595478589" + ) + )] + ItemKitPipeUtilityLiquid = 595478589i32, #[strum( serialize = "StructureCompositeFloorGrating4", props( @@ -1677,14 +6497,557 @@ The chute outlet is an aperture for exiting items from Stationeer life - so much so, the ODA designated it an official 'tool'. +Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, + value = "605357050" ) )] - StructureCompositeFloorGratingOpen = 2109695912i32, + StructureCableStraight = 605357050i32, + #[strum( + serialize = "StructureLiquidTankSmallInsulated", + props( + name = r#"Insulated Liquid Tank Small"#, + desc = r#""#, + value = "608607718" + ) + )] + StructureLiquidTankSmallInsulated = 608607718i32, + #[strum( + serialize = "ItemKitWaterPurifier", + props(name = r#"Kit (Water Purifier)"#, desc = r#""#, value = "611181283") + )] + ItemKitWaterPurifier = 611181283i32, + #[strum( + serialize = "ItemKitLiquidTankInsulated", + props( + name = r#"Kit (Insulated Liquid Tank)"#, + desc = r#""#, + value = "617773453" + ) + )] + ItemKitLiquidTankInsulated = 617773453i32, + #[strum( + serialize = "StructureWallSmallPanelsAndHatch", + props( + name = r#"Wall (Small Panels And Hatch)"#, + desc = r#""#, + value = "619828719" + ) + )] + StructureWallSmallPanelsAndHatch = 619828719i32, + #[strum( + serialize = "ItemGasFilterNitrogen", + props( + name = r#"Filter (Nitrogen)"#, + desc = r#"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", + props(name = r#"Color Dye (Yellow)"#, desc = r#""#, value = "635208006") + )] + ReagentColorYellow = 635208006i32, + #[strum( + serialize = "StructureWallPadding", + props(name = r#"Wall (Padding)"#, desc = r#""#, value = "635995024") + )] + StructureWallPadding = 635995024i32, + #[strum( + serialize = "ItemKitPassthroughHeatExchanger", + props( + name = r#"Kit (CounterFlow Heat Exchanger)"#, + desc = r#""#, + value = "636112787" + ) + )] + ItemKitPassthroughHeatExchanger = 636112787i32, + #[strum( + serialize = "StructureChuteDigitalValveLeft", + props( + name = r#"Chute Digital Valve Left"#, + desc = r#"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", + props( + name = r#"Mining-Drill Head (High Speed Ice)"#, + desc = r#""#, + value = "653461728" + ) + )] + ItemRocketMiningDrillHeadHighSpeedIce = 653461728i32, + #[strum( + serialize = "ItemWreckageStructureWeatherStation007", + props( + name = r#"Wreckage Structure Weather Station"#, + desc = r#""#, + value = "656649558" + ) + )] + ItemWreckageStructureWeatherStation007 = 656649558i32, + #[strum( + serialize = "ItemRice", + props( + name = r#"Rice"#, + desc = r#"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", + props(name = r#"Plastic Sheets"#, desc = r#""#, value = "662053345") + )] + ItemPlasticSheets = 662053345i32, + #[strum( + serialize = "ItemKitTransformerSmall", + props(name = r#"Kit (Transformer Small)"#, desc = r#""#, value = "665194284") + )] + ItemKitTransformerSmall = 665194284i32, + #[strum( + serialize = "StructurePipeLiquidStraight", + props( + name = r#"Liquid Pipe (Straight)"#, + desc = r#"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", + props(name = r#"Space Ice"#, desc = r#""#, value = "675686937") + )] + ItemSpaceIce = 675686937i32, + #[strum( + serialize = "ItemRemoteDetonator", + props(name = r#"Remote Detonator"#, desc = r#""#, value = "678483886") + )] + ItemRemoteDetonator = 678483886i32, + #[strum( + serialize = "ItemKitAirlockGate", + props(name = r#"Kit (Hangar Door)"#, desc = r#""#, value = "682546947") + )] + ItemKitAirlockGate = 682546947i32, + #[strum( + serialize = "ItemScrewdriver", + props( + name = r#"Screwdriver"#, + desc = r#"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", + props( + name = r#"Tomato Soup"#, + desc = r#"Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine."#, + value = "688734890" + ) + )] + ItemTomatoSoup = 688734890i32, + #[strum( + serialize = "StructureCentrifuge", + props( + name = r#"Centrifuge"#, + desc = r#"If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore. + It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. + Its bigger brother Combustion Centrifuge can be used to process items significantly faster. Items processed by the centrifuge will be de-gassed. + 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", + props( + name = r#"Block Bed"#, + desc = r#"Description coming."#, + value = "697908419" + ) + )] + StructureBlockBed = 697908419i32, + #[strum( + serialize = "ItemBatteryCell", + props( + name = r#"Battery Cell (Small)"#, + desc = r#"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. + +POWER OUTPUT +The small cell stores up to 36000 watts of power."#, + value = "700133157" + ) + )] + ItemBatteryCell = 700133157i32, + #[strum( + serialize = "ItemSpaceHelmet", + props( + name = r#"Space Helmet"#, + desc = r#"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). +It 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", + props(name = r#"Composite Wall (Type 2)"#, desc = r#""#, value = "718343384") + )] + StructureCompositeWall02 = 718343384i32, + #[strum( + serialize = "ItemKitRocketCircuitHousing", + props( + name = r#"Kit (Rocket Circuit Housing)"#, + desc = r#""#, + value = "721251202" + ) + )] + ItemKitRocketCircuitHousing = 721251202i32, + #[strum( + serialize = "ItemKitResearchMachine", + props(name = r#"Kit Research Machine"#, desc = r#""#, value = "724776762") + )] + ItemKitResearchMachine = 724776762i32, + #[strum( + serialize = "ItemElectronicParts", + props(name = r#"Electronic Parts"#, desc = r#""#, value = "731250882") + )] + ItemElectronicParts = 731250882i32, + #[strum( + serialize = "ItemKitShower", + props(name = r#"Kit (Shower)"#, desc = r#""#, value = "735858725") + )] + ItemKitShower = 735858725i32, + #[strum( + serialize = "StructureUnloader", + props( + name = r#"Unloader"#, + desc = r#"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. + +Output = 0 exporting the main item +Output = 1 exporting items inside and eventually the main item."#, + value = "750118160" + ) + )] + StructureUnloader = 750118160i32, + #[strum( + serialize = "ItemKitRailing", + props(name = r#"Kit (Railing)"#, desc = r#""#, value = "750176282") + )] + ItemKitRailing = 750176282i32, + #[strum( + serialize = "ItemResearchCapsuleYellow", + props(name = r#"Research Capsule Yellow"#, desc = r#""#, value = "750952701") + )] + ItemResearchCapsuleYellow = 750952701i32, + #[strum( + serialize = "StructureFridgeSmall", + props( + name = r#"Fridge Small"#, + desc = r#"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. + + For more information about food preservation, visit the food decay section of the Stationpedia."#, + value = "751887598" + ) + )] + StructureFridgeSmall = 751887598i32, + #[strum( + serialize = "DynamicScrubber", + props( + name = r#"Portable Air Scrubber"#, + desc = r#"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", + props(name = r#"Kit (Engine Large)"#, desc = r#""#, value = "755302726") + )] + ItemKitEngineLarge = 755302726i32, + #[strum( + serialize = "ItemKitTank", + props(name = r#"Kit (Tank)"#, desc = r#""#, value = "771439840") + )] + ItemKitTank = 771439840i32, + #[strum( + serialize = "ItemLiquidCanisterSmart", + props( + name = r#"Liquid Canister (Smart)"#, + desc = r#"0.Mode0 +1.Mode1"#, + value = "777684475" + ) + )] + ItemLiquidCanisterSmart = 777684475i32, + #[strum( + serialize = "StructureWallArchTwoTone", + props(name = r#"Wall (Arch Two Tone)"#, desc = r#""#, value = "782529714") + )] + StructureWallArchTwoTone = 782529714i32, + #[strum( + serialize = "ItemAuthoringTool", + props(name = r#"Authoring Tool"#, desc = r#""#, value = "789015045") + )] + ItemAuthoringTool = 789015045i32, + #[strum( + serialize = "WeaponEnergy", + props(name = r#"Weapon Energy"#, desc = r#""#, value = "789494694") + )] + WeaponEnergy = 789494694i32, + #[strum( + serialize = "ItemCerealBar", + props( + name = r#"Cereal Bar"#, + desc = r#"Sustains, without decay. If only all our relationships were so well balanced."#, + value = "791746840" + ) + )] + ItemCerealBar = 791746840i32, + #[strum( + serialize = "StructureLargeDirectHeatExchangeLiquidtoLiquid", + props( + name = r#"Large Direct Heat Exchange - Liquid + Liquid"#, + desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, + value = "792686502" + ) + )] + StructureLargeDirectHeatExchangeLiquidtoLiquid = 792686502i32, + #[strum( + serialize = "StructureLightLong", + props(name = r#"Wall Light (Long)"#, desc = r#""#, value = "797794350") + )] + StructureLightLong = 797794350i32, + #[strum( + serialize = "StructureWallIron03", + props(name = r#"Iron Wall (Type 3)"#, desc = r#""#, value = "798439281") + )] + StructureWallIron03 = 798439281i32, + #[strum( + serialize = "ItemPipeValve", + props( + name = r#"Kit (Pipe Valve)"#, + desc = r#"This kit creates a Valve."#, + value = "799323450" + ) + )] + ItemPipeValve = 799323450i32, + #[strum( + serialize = "StructureConsoleMonitor", + props( + name = r#"Console Monitor"#, + desc = r#"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. +A 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", + props(name = r#"Rover Frame"#, desc = r#""#, value = "806513938") + )] + StructureRover = 806513938i32, + #[strum( + serialize = "StructureRocketAvionics", + props(name = r#"Rocket Avionics"#, desc = r#""#, value = "808389066") + )] + StructureRocketAvionics = 808389066i32, + #[strum( + serialize = "UniformOrangeJumpSuit", + props(name = r#"Jump Suit (Orange)"#, desc = r#""#, value = "810053150") + )] + UniformOrangeJumpSuit = 810053150i32, + #[strum( + serialize = "StructureSolidFuelGenerator", + props( + name = r#"Generator (Solid Fuel)"#, + desc = r#"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", + props(name = r#"Landingpad Gas Input"#, desc = r#""#, value = "817945707") + )] + LandingpadGasConnectorInwardPiece = 817945707i32, + #[strum( + serialize = "ItemResearchCapsule", + props(name = r#"Research Capsule Blue"#, desc = r#""#, value = "819096942") + )] + ItemResearchCapsule = 819096942i32, + #[strum( + serialize = "StructureElevatorShaft", + props(name = r#"Elevator Shaft (Cabled)"#, desc = r#""#, value = "826144419") + )] + StructureElevatorShaft = 826144419i32, + #[strum( + serialize = "StructureTransformerMediumReversed", + props( + name = r#"Transformer Reversed (Medium)"#, + desc = r#"Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. +Medium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W. +Note that transformers also operate as data isolators, preventing data flowing into any network beyond it."#, + value = "833912764" + ) + )] + StructureTransformerMediumReversed = 833912764i32, + #[strum( + serialize = "StructureFlatBench", + props(name = r#"Bench (Flat)"#, desc = r#""#, value = "839890807") + )] + StructureFlatBench = 839890807i32, + #[strum( + serialize = "ItemPowerConnector", + props( + name = r#"Kit (Power Connector)"#, + desc = r#"This kit creates a Power Connector."#, + value = "839924019" + ) + )] + ItemPowerConnector = 839924019i32, + #[strum( + serialize = "ItemKitHorizontalAutoMiner", + props(name = r#"Kit (OGRE)"#, desc = r#""#, value = "844391171") + )] + ItemKitHorizontalAutoMiner = 844391171i32, + #[strum( + serialize = "ItemKitSolarPanelBasic", + props(name = r#"Kit (Solar Panel Basic)"#, desc = r#""#, value = "844961456") + )] + ItemKitSolarPanelBasic = 844961456i32, + #[strum( + serialize = "ItemSprayCanBrown", + props( + name = r#"Spray Paint (Brown)"#, + desc = r#"In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed."#, + value = "845176977" + ) + )] + ItemSprayCanBrown = 845176977i32, + #[strum( + serialize = "ItemKitLargeExtendableRadiator", + props( + name = r#"Kit (Large Extendable Radiator)"#, + desc = r#""#, + value = "847430620" + ) + )] + ItemKitLargeExtendableRadiator = 847430620i32, + #[strum( + serialize = "StructureInteriorDoorPadded", + props( + name = r#"Interior Door Padded"#, + desc = r#"0.Operate +1.Logic"#, + value = "847461335" + ) + )] + StructureInteriorDoorPadded = 847461335i32, + #[strum( + serialize = "ItemKitRecycler", + props(name = r#"Kit (Recycler)"#, desc = r#""#, value = "849148192") + )] + ItemKitRecycler = 849148192i32, + #[strum( + serialize = "StructureCompositeCladdingAngledCornerLong", + props( + name = r#"Composite Cladding (Long Angled Corner)"#, + desc = r#""#, + value = "850558385" + ) + )] + StructureCompositeCladdingAngledCornerLong = 850558385i32, + #[strum( + serialize = "ItemPlantEndothermic_Genepool1", + props( + name = r#"Winterspawn (Alpha variant)"#, + desc = r#"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", + props( + name = r#"Door Control"#, + desc = r#"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", + props( + name = r#"Crowbar"#, + desc = r#"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 = "Rover_MkI_build_states", + props(name = r#"Rover MKI"#, desc = r#""#, value = "861674123") + )] + RoverMkIBuildStates = 861674123i32, + #[strum( + serialize = "AppliancePlantGeneticStabilizer", + props( + name = r#"Plant Genetic Stabilizer"#, + desc = r#"The Genetic Stabilizer can be used to manipulate gene stability on a specific Plants or Seeds. It has two modes Stabilize and Destabilize. +Stabilize: Increases all genes stability by 50%. +Destabilize: Decreases all gene stability by 10% other than a chosen gene which will received decreased stability by 50%. + "#, + value = "871432335" + ) + )] + AppliancePlantGeneticStabilizer = 871432335i32, + #[strum( + serialize = "ItemRoadFlare", + props( + name = r#"Road Flare"#, + desc = r#"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", + props(name = r#"Guide"#, desc = r#""#, value = "872720793") + )] + CartridgeGuide = 872720793i32, + #[strum( + serialize = "StructureLogicSorter", + props( + name = r#"Logic Sorter"#, + desc = r#"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", + props(name = r#"Logic Rocket Downlink"#, desc = r#""#, value = "876108549") + )] + StructureLogicRocketDownlink = 876108549i32, + #[strum( + serialize = "StructureSign1x1", + props(name = r#"Sign 1x1"#, desc = r#""#, value = "879058460") + )] + StructureSign1X1 = 879058460i32, + #[strum( + serialize = "ItemKitLocker", + props(name = r#"Kit (Locker)"#, desc = r#""#, value = "882301399") + )] + ItemKitLocker = 882301399i32, #[strum( serialize = "StructureCompositeFloorGratingOpenRotated", props( @@ -1694,6 +7057,788 @@ The chute outlet is an aperture for exiting items from 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", + props( + name = r#"Kit (Igniter)"#, + desc = r#"This kit creates an Kit (Igniter) unit."#, + value = "890106742" + ) + )] + ItemIgniter = 890106742i32, + #[strum( + serialize = "ItemFern", + props( + name = r#"Fern"#, + desc = r#"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", + props(name = r#"Bread Loaf"#, desc = r#""#, value = "893514943") + )] + ItemBreadLoaf = 893514943i32, + #[strum( + serialize = "StructureCableJunction5", + props(name = r#"Cable (5-Way Junction)"#, desc = r#""#, value = "894390004") + )] + StructureCableJunction5 = 894390004i32, + #[strum( + serialize = "ItemInsulation", + props( + name = r#"Insulation"#, + desc = r#"Mysterious in the extreme, the function of this item is lost to the ages."#, + value = "897176943" + ) + )] + ItemInsulation = 897176943i32, + #[strum( + serialize = "StructureWallFlatCornerRound", + props( + name = r#"Wall (Flat Corner Round)"#, + desc = r#""#, + value = "898708250" + ) + )] + StructureWallFlatCornerRound = 898708250i32, + #[strum( + serialize = "ItemHardMiningBackPack", + props(name = r#"Hard Mining Backpack"#, desc = r#""#, value = "900366130") + )] + ItemHardMiningBackPack = 900366130i32, + #[strum( + serialize = "ItemDirtCanister", + props( + name = r#"Dirt Canister"#, + desc = r#"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", + props(name = r#"Sign 2x1"#, desc = r#""#, value = "908320837") + )] + StructureSign2X1 = 908320837i32, + #[strum( + serialize = "CircuitboardAirlockControl", + props( + name = r#"Airlock"#, + desc = r#"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. + +To 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", + props(name = r#"Landingpad"#, desc = r#""#, value = "912453390") + )] + LandingpadBlankPiece = 912453390i32, + #[strum( + serialize = "ItemKitPipeRadiator", + props(name = r#"Kit (Pipe Radiator)"#, desc = r#""#, value = "920411066") + )] + ItemKitPipeRadiator = 920411066i32, + #[strum( + serialize = "StructureLogicMinMax", + props( + name = r#"Logic Min/Max"#, + desc = r#"0.Greater +1.Less"#, + value = "929022276" + ) + )] + StructureLogicMinMax = 929022276i32, + #[strum( + serialize = "StructureSolarPanel45Reinforced", + props( + name = r#"Solar Panel (Heavy Angled)"#, + desc = r#"This solar panel is resistant to storm damage."#, + value = "930865127" + ) + )] + StructureSolarPanel45Reinforced = 930865127i32, + #[strum( + serialize = "StructurePoweredVent", + props( + name = r#"Powered Vent"#, + desc = r#"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", + props( + name = r#"Pure Ice Hydrogen"#, + desc = r#"A frozen chunk of pure Hydrogen"#, + value = "944530361" + ) + )] + ItemPureIceHydrogen = 944530361i32, + #[strum( + serialize = "StructureHeatExchangeLiquidtoGas", + props( + name = r#"Heat Exchanger - Liquid + Gas"#, + desc = r#"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. +The '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. +As 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", + props( + name = r#"Composite Cladding (Angled Corner Inner Long L)"#, + desc = r#""#, + value = "947705066" + ) + )] + StructureCompositeCladdingAngledCornerInnerLongL = 947705066i32, + #[strum( + serialize = "StructurePictureFrameThickMountLandscapeLarge", + props( + name = r#"Picture Frame Thick Landscape Large"#, + desc = r#""#, + value = "950004659" + ) + )] + StructurePictureFrameThickMountLandscapeLarge = 950004659i32, + #[strum( + serialize = "ItemResearchCapsuleRed", + props(name = r#"Research Capsule Red"#, desc = r#""#, value = "954947943") + )] + ItemResearchCapsuleRed = 954947943i32, + #[strum( + serialize = "StructureTankSmallAir", + props(name = r#"Small Tank (Air)"#, desc = r#""#, value = "955744474") + )] + StructureTankSmallAir = 955744474i32, + #[strum( + serialize = "StructureHarvie", + props( + name = r#"Harvie"#, + desc = r#"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", + props( + name = r#"Fridge (Large)"#, + desc = r#"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. + +With 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. + +Also, don't leave the door open, as it will equalize with the current world temperature. And maybe start to beep. + +For more information about food preservation, visit the food decay section of the Stationpedia."#, + value = "958476921" + ) + )] + StructureFridgeBig = 958476921i32, + #[strum( + serialize = "ItemKitAirlock", + props(name = r#"Kit (Airlock)"#, desc = r#""#, value = "964043875") + )] + ItemKitAirlock = 964043875i32, + #[strum( + serialize = "EntityRoosterBlack", + props( + name = r#"Entity Rooster Black"#, + desc = r#"This is a rooster. It is black. There is dignity in this."#, + value = "966959649" + ) + )] + EntityRoosterBlack = 966959649i32, + #[strum( + serialize = "ItemKitSorter", + props(name = r#"Kit (Sorter)"#, desc = r#""#, value = "969522478") + )] + ItemKitSorter = 969522478i32, + #[strum( + serialize = "ItemEmergencyCrowbar", + props(name = r#"Emergency Crowbar"#, desc = r#""#, value = "976699731") + )] + ItemEmergencyCrowbar = 976699731i32, + #[strum( + serialize = "Landingpad_DiagonalPiece01", + props( + name = r#"Landingpad Diagonal"#, + desc = r#"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", + props(name = r#"Color Dye (Blue)"#, desc = r#""#, value = "980054869") + )] + ReagentColorBlue = 980054869i32, + #[strum( + serialize = "StructureCableCorner3", + props( + name = r#"Cable (3-Way Corner)"#, + desc = r#"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. +Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, + value = "980469101" + ) + )] + StructureCableCorner3 = 980469101i32, + #[strum( + serialize = "ItemNVG", + props(name = r#"Night Vision Goggles"#, desc = r#""#, value = "982514123") + )] + ItemNvg = 982514123i32, + #[strum( + serialize = "StructurePlinth", + props(name = r#"Plinth"#, desc = r#""#, value = "989835703") + )] + StructurePlinth = 989835703i32, + #[strum( + serialize = "ItemSprayCanYellow", + props( + name = r#"Spray Paint (Yellow)"#, + desc = r#"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", + props( + name = r#"Rocket Celestial Tracker"#, + desc = r#"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", + props( + name = r#"High Volume Gas Canister"#, + desc = r#""#, + value = "998653377" + ) + )] + ItemHighVolumeGasCanisterEmpty = 998653377i32, + #[strum( + serialize = "ItemKitLogicTransmitter", + props( + name = r#"Kit (Logic Transmitter)"#, + desc = r#""#, + value = "1005397063" + ) + )] + ItemKitLogicTransmitter = 1005397063i32, + #[strum( + serialize = "StructureIgniter", + props( + name = r#"Igniter"#, + desc = r#"It gets the party started. Especially if that party is an explosive gas mixture."#, + value = "1005491513" + ) + )] + StructureIgniter = 1005491513i32, + #[strum( + serialize = "SeedBag_Potato", + props( + name = r#"Potato Seeds"#, + desc = r#"Grow a Potato."#, + value = "1005571172" + ) + )] + SeedBagPotato = 1005571172i32, + #[strum( + serialize = "ItemDataDisk", + props(name = r#"Data Disk"#, desc = r#""#, value = "1005843700") + )] + ItemDataDisk = 1005843700i32, + #[strum( + serialize = "ItemBatteryChargerSmall", + props(name = r#"Battery Charger Small"#, desc = r#""#, value = "1008295833") + )] + ItemBatteryChargerSmall = 1008295833i32, + #[strum( + serialize = "EntityChickenWhite", + props( + name = r#"Entity Chicken White"#, + desc = r#"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 = "ItemKitStacker", + props(name = r#"Kit (Stacker)"#, desc = r#""#, value = "1013244511") + )] + ItemKitStacker = 1013244511i32, + #[strum( + serialize = "StructureTankSmall", + props(name = r#"Small Tank"#, desc = r#""#, value = "1013514688") + )] + StructureTankSmall = 1013514688i32, + #[strum( + serialize = "ItemEmptyCan", + props( + name = r#"Empty Can"#, + desc = r#"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", + props(name = r#"Kit (Tank Insulated)"#, desc = r#""#, value = "1021053608") + )] + ItemKitTankInsulated = 1021053608i32, + #[strum( + serialize = "ItemKitChute", + props(name = r#"Kit (Basic Chutes)"#, desc = r#""#, value = "1025254665") + )] + ItemKitChute = 1025254665i32, + #[strum( + serialize = "StructureFuselageTypeA1", + props(name = r#"Fuselage (Type A1)"#, desc = r#""#, value = "1033024712") + )] + StructureFuselageTypeA1 = 1033024712i32, + #[strum( + serialize = "StructureCableAnalysizer", + props(name = r#"Cable Analyzer"#, desc = r#""#, value = "1036015121") + )] + StructureCableAnalysizer = 1036015121i32, + #[strum( + serialize = "StructureCableJunctionH6", + props( + name = r#"Heavy Cable (6-Way Junction)"#, + desc = r#""#, + value = "1036780772" + ) + )] + StructureCableJunctionH6 = 1036780772i32, + #[strum( + serialize = "ItemGasFilterVolatilesM", + props( + name = r#"Medium Filter (Volatiles)"#, + desc = r#""#, + value = "1037507240" + ) + )] + ItemGasFilterVolatilesM = 1037507240i32, + #[strum( + serialize = "ItemKitPortablesConnector", + props( + name = r#"Kit (Portables Connector)"#, + desc = r#""#, + value = "1041148999" + ) + )] + ItemKitPortablesConnector = 1041148999i32, + #[strum( + serialize = "StructureFloorDrain", + props( + name = r#"Passive Liquid Inlet"#, + desc = r#"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", + props( + name = r#"Wall (Geometry Straight)"#, + desc = r#""#, + value = "1049735537" + ) + )] + StructureWallGeometryStreight = 1049735537i32, + #[strum( + serialize = "StructureTransformerSmallReversed", + props( + name = r#"Transformer Reversed (Small)"#, + desc = r#"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. +Note that transformers operate as data isolators, preventing data flowing into any network beyond it."#, + value = "1054059374" + ) + )] + StructureTransformerSmallReversed = 1054059374i32, + #[strum( + serialize = "ItemMiningDrill", + props( + name = r#"Mining Drill"#, + desc = r#"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", + props(name = r#"Ingot (Constantan)"#, desc = r#""#, value = "1058547521") + )] + ItemConstantanIngot = 1058547521i32, + #[strum( + serialize = "StructureInsulatedPipeCrossJunction6", + props( + name = r#"Insulated Pipe (6-Way Junction)"#, + desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, + value = "1061164284" + ) + )] + StructureInsulatedPipeCrossJunction6 = 1061164284i32, + #[strum( + serialize = "Landingpad_CenterPiece01", + props( + name = r#"Landingpad Center"#, + desc = r#"The target point where the trader shuttle will land. Requires a clear view of the sky."#, + value = "1070143159" + ) + )] + LandingpadCenterPiece01 = 1070143159i32, + #[strum( + serialize = "StructureHorizontalAutoMiner", + props( + name = r#"OGRE"#, + desc = r#"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. + +The 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. + +MODES +Idle - 0 +Mining - 1 +Returning - 2 +DepostingOre - 3 +Finished - 4 +"#, + value = "1070427573" + ) + )] + StructureHorizontalAutoMiner = 1070427573i32, + #[strum( + serialize = "ItemDynamicAirCon", + props( + name = r#"Kit (Portable Air Conditioner)"#, + desc = r#""#, + value = "1072914031" + ) + )] + ItemDynamicAirCon = 1072914031i32, + #[strum( + serialize = "ItemMarineHelmet", + props(name = r#"Marine Helmet"#, desc = r#""#, value = "1073631646") + )] + ItemMarineHelmet = 1073631646i32, + #[strum( + serialize = "StructureDaylightSensor", + props( + name = r#"Daylight Sensor"#, + desc = r#"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", + props( + name = r#"Composite Cladding (Cylindrical Panel)"#, + desc = r#""#, + value = "1077151132" + ) + )] + StructureCompositeCladdingCylindricalPanel = 1077151132i32, + #[strum( + serialize = "ItemRocketMiningDrillHeadMineral", + props( + name = r#"Mining-Drill Head (Mineral)"#, + desc = r#""#, + value = "1083675581" + ) + )] + ItemRocketMiningDrillHeadMineral = 1083675581i32, + #[strum( + serialize = "ItemKitSuitStorage", + props(name = r#"Kit (Suit Storage)"#, desc = r#""#, value = "1088892825") + )] + ItemKitSuitStorage = 1088892825i32, + #[strum( + serialize = "StructurePictureFrameThinMountPortraitLarge", + props( + name = r#"Picture Frame Thin Portrait Large"#, + desc = r#""#, + value = "1094895077" + ) + )] + StructurePictureFrameThinMountPortraitLarge = 1094895077i32, + #[strum( + serialize = "StructureLiquidTankBig", + props(name = r#"Liquid Tank Big"#, desc = r#""#, value = "1098900430") + )] + StructureLiquidTankBig = 1098900430i32, + #[strum( + serialize = "Landingpad_CrossPiece", + props( + name = r#"Landingpad Cross"#, + desc = r#"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", + props( + name = r#"Cartridge Plant Analyser"#, + desc = r#""#, + value = "1101328282" + ) + )] + CartridgePlantAnalyser = 1101328282i32, + #[strum( + serialize = "ItemSiliconOre", + props( + name = r#"Ore (Silicon)"#, + desc = r#"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", + props( + name = r#"Kit (Lights)"#, + desc = r#"This kit creates any one of ten Kit (Lights) variants."#, + value = "1108423476" + ) + )] + ItemWallLight = 1108423476i32, + #[strum( + serialize = "StructureCableJunction4", + props( + name = r#"Cable (4-Way Junction)"#, + desc = r#"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. +Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, + value = "1112047202" + ) + )] + StructureCableJunction4 = 1112047202i32, + #[strum( + serialize = "ItemPillHeal", + props( + name = r#"Pill (Medical)"#, + desc = r#"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 = "StructureMediumRocketLiquidFuelTank", + props( + name = r#"Liquid Capsule Tank Medium"#, + desc = r#""#, + value = "1143639539" + ) + )] + StructureMediumRocketLiquidFuelTank = 1143639539i32, + #[strum( + serialize = "StructureCargoStorageMedium", + props(name = r#"Cargo Storage (Medium)"#, desc = r#""#, value = "1151864003") + )] + StructureCargoStorageMedium = 1151864003i32, + #[strum( + serialize = "WeaponRifleEnergy", + props( + name = r#"Energy Rifle"#, + desc = r#"0.Stun +1.Kill"#, + value = "1154745374" + ) + )] + WeaponRifleEnergy = 1154745374i32, + #[strum( + serialize = "StructureSDBSilo", + props( + name = r#"SDB Silo"#, + desc = r#"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", + props(name = r#"Flag (ODA 4m)"#, desc = r#""#, value = "1159126354") + )] + FlagOda4M = 1159126354i32, + #[strum( + serialize = "ItemCannedPowderedEggs", + props( + name = r#"Canned Powdered Eggs"#, + desc = r#"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", + props(name = r#"Kit (Furniture)"#, desc = r#""#, value = "1162905029") + )] + ItemKitFurniture = 1162905029i32, + #[strum( + serialize = "StructureGasGenerator", + props(name = r#"Gas Fuel Generator"#, desc = r#""#, value = "1165997963") + )] + StructureGasGenerator = 1165997963i32, + #[strum( + serialize = "StructureChair", + props( + name = r#"Chair"#, + desc = r#"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", + props( + name = r#"Wall (Padded Arch Light Fitting Top)"#, + desc = r#""#, + value = "1171987947" + ) + )] + StructureWallPaddedArchLightFittingTop = 1171987947i32, + #[strum( + serialize = "StructureShelf", + props(name = r#"Shelf"#, desc = r#""#, value = "1172114950") + )] + StructureShelf = 1172114950i32, + #[strum( + serialize = "ApplianceDeskLampRight", + props( + name = r#"Appliance Desk Lamp Right"#, + desc = r#""#, + value = "1174360780" + ) + )] + ApplianceDeskLampRight = 1174360780i32, + #[strum( + serialize = "ItemKitRegulator", + props( + name = r#"Kit (Pressure Regulator)"#, + desc = r#""#, + value = "1181371795" + ) + )] + ItemKitRegulator = 1181371795i32, + #[strum( + serialize = "ItemKitCompositeFloorGrating", + props(name = r#"Kit (Floor Grating)"#, desc = r#""#, value = "1182412869") + )] + ItemKitCompositeFloorGrating = 1182412869i32, + #[strum( + serialize = "StructureWallArchPlating", + props(name = r#"Wall (Arch Plating)"#, desc = r#""#, value = "1182510648") + )] + StructureWallArchPlating = 1182510648i32, + #[strum( + serialize = "StructureWallPaddedCornerThin", + props( + name = r#"Wall (Padded Corner Thin)"#, + desc = r#""#, + value = "1183203913" + ) + )] + StructureWallPaddedCornerThin = 1183203913i32, + #[strum( + serialize = "StructurePowerTransmitterReceiver", + props( + name = r#"Microwave Power Receiver"#, + desc = r#"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. +The 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", + props( + name = r#"Kit (Pipe Meter)"#, + desc = r#"This kit creates a Pipe Meter."#, + value = "1207939683" + ) + )] + ItemPipeMeter = 1207939683i32, + #[strum( + serialize = "StructurePictureFrameThinPortraitLarge", + props( + name = r#"Picture Frame Thin Portrait Large"#, + desc = r#""#, + value = "1212777087" + ) + )] + StructurePictureFrameThinPortraitLarge = 1212777087i32, + #[strum( + serialize = "StructureSleeperLeft", + props( + name = r#"Sleeper Left"#, + desc = r#"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", + props( + name = r#"Ice (Water)"#, + desc = r#"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", + props(name = r#"Lever"#, desc = r#""#, value = "1220484876") + )] + StructureLogicSwitch = 1220484876i32, + #[strum( + serialize = "StructureLiquidUmbilicalFemaleSide", + props( + name = r#"Umbilical Socket Angle (Liquid)"#, + desc = r#""#, + value = "1220870319" + ) + )] + StructureLiquidUmbilicalFemaleSide = 1220870319i32, + #[strum( + serialize = "ItemKitAtmospherics", + props(name = r#"Kit (Atmospherics)"#, desc = r#""#, value = "1222286371") + )] + ItemKitAtmospherics = 1222286371i32, + #[strum( + serialize = "ItemChemLightYellow", + props( + name = r#"Chem Light (Yellow)"#, + desc = r#"Dispel the darkness with this yellow glowstick."#, + value = "1224819963" + ) + )] + ItemChemLightYellow = 1224819963i32, + #[strum( + serialize = "ItemIronFrames", + props(name = r#"Iron Frames"#, desc = r#""#, value = "1225836666") + )] + ItemIronFrames = 1225836666i32, #[strum( serialize = "CompositeRollCover", props( @@ -1714,53 +7859,383 @@ The chute outlet is an aperture for exiting items from Centrifuge. If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore. + 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. + 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. + 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. + 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. + "#, + value = "1238905683" + ) + )] + StructureCombustionCentrifuge = 1238905683i32, + #[strum( + serialize = "ItemVolatiles", + props( + name = r#"Ice (Volatiles)"#, + desc = r#"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. + +Volatiles 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 + 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. +"#, + value = "1253102035" + ) + )] + ItemVolatiles = 1253102035i32, + #[strum( + serialize = "HandgunMagazine", + props(name = r#"Handgun Magazine"#, desc = r#""#, value = "1254383185") + )] + HandgunMagazine = 1254383185i32, + #[strum( + serialize = "ItemGasFilterVolatilesL", + props( + name = r#"Heavy Filter (Volatiles)"#, desc = r#""#, - value = "1574321230" + value = "1255156286" ) )] - StructureCompositeWall03 = 1574321230i32, + ItemGasFilterVolatilesL = 1255156286i32, #[strum( - serialize = "StructureCompositeWall04", + serialize = "ItemMiningDrillPneumatic", props( - name = r#"Composite Wall (Type 4)"#, + name = r#"Pneumatic Mining Drill"#, + desc = r#"0.Default +1.Flatten"#, + value = "1258187304" + ) + )] + ItemMiningDrillPneumatic = 1258187304i32, + #[strum( + serialize = "StructureSmallTableDinnerSingle", + props( + name = r#"Small (Table Dinner Single)"#, desc = r#""#, - value = "-1011701267" + value = "1260651529" ) )] - StructureCompositeWall04 = -1011701267i32, + StructureSmallTableDinnerSingle = 1260651529i32, #[strum( - serialize = "StructureCompositeWindow", + serialize = "ApplianceReagentProcessor", props( - name = r#"Composite Window"#, - desc = r#"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" + name = r#"Reagent Processor"#, + desc = r#"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" ) )] - StructureCompositeWindow = -2060571986i32, + ApplianceReagentProcessor = 1260918085i32, #[strum( - serialize = "StructureComputer", + serialize = "StructurePressurePlateMedium", + props(name = r#"Trigger Plate (Medium)"#, desc = r#""#, value = "1269458680") + )] + StructurePressurePlateMedium = 1269458680i32, + #[strum( + serialize = "ItemPumpkin", props( - name = r#"Computer"#, - desc = r#"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. -The 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. -Compatible motherboards: -- Logic Motherboard -- Manufacturing Motherboard -- Sorter Motherboard -- Communications Motherboard -- IC Editor Motherboard"#, - value = "-626563514" + name = r#"Pumpkin"#, + desc = r#"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" ) )] - StructureComputer = -626563514i32, + ItemPumpkin = 1277828144i32, + #[strum( + serialize = "ItemPumpkinSoup", + props( + name = r#"Pumpkin Soup"#, + desc = r#"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", + props(name = r#"Tank Big (Insulated)"#, desc = r#""#, value = "1280378227") + )] + StructureTankBigInsulated = 1280378227i32, + #[strum( + serialize = "StructureWallArchCornerTriangle", + props( + name = r#"Wall (Arch Corner Triangle)"#, + desc = r#""#, + value = "1281911841" + ) + )] + StructureWallArchCornerTriangle = 1281911841i32, + #[strum( + serialize = "StructureTurbineGenerator", + props(name = r#"Turbine Generator"#, desc = r#""#, value = "1282191063") + )] + StructureTurbineGenerator = 1282191063i32, + #[strum( + serialize = "StructurePipeIgniter", + props( + name = r#"Pipe Igniter"#, + desc = r#"Ignites the atmosphere inside the attached pipe network."#, + value = "1286441942" + ) + )] + StructurePipeIgniter = 1286441942i32, + #[strum( + serialize = "StructureWallIron", + props(name = r#"Iron Wall (Type 1)"#, desc = r#""#, value = "1287324802") + )] + StructureWallIron = 1287324802i32, + #[strum( + serialize = "ItemSprayGun", + props( + name = r#"Spray Gun"#, + desc = r#"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", + props(name = r#"Kit (Solid Generator)"#, desc = r#""#, value = "1293995736") + )] + ItemKitSolidGenerator = 1293995736i32, + #[strum( + serialize = "StructureAccessBridge", + props( + name = r#"Access Bridge"#, + desc = r#"Extendable bridge that spans three grids"#, + value = "1298920475" + ) + )] + StructureAccessBridge = 1298920475i32, + #[strum( + serialize = "StructurePipeOrgan", + props( + name = r#"Pipe Organ"#, + desc = r#"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", + props( + name = r#"Electronics Printer"#, + desc = r#"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", + props(name = r#"Fuselage (Type A4)"#, desc = r#""#, value = "1308115015") + )] + StructureFuselageTypeA4 = 1308115015i32, + #[strum( + serialize = "StructureSmallDirectHeatExchangeGastoGas", + props( + name = r#"Small Direct Heat Exchanger - Gas + Gas"#, + desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, + value = "1310303582" + ) + )] + StructureSmallDirectHeatExchangeGastoGas = 1310303582i32, + #[strum( + serialize = "StructureTurboVolumePump", + props( + name = r#"Turbo Volume Pump (Gas)"#, + desc = r#"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", + props( + name = r#"Chem Light (White)"#, + desc = r#"Snap the glowstick to activate a pale radiance that keeps the darkness at bay."#, + value = "1312166823" + ) + )] + ItemChemLightWhite = 1312166823i32, + #[strum( + serialize = "ItemMilk", + props( + name = r#"Milk"#, + desc = r#"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", + props( + name = r#"Insulated Pipe (3-Way Junction)"#, + desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, + value = "1328210035" + ) + )] + StructureInsulatedPipeCrossJunction3 = 1328210035i32, + #[strum( + serialize = "StructureShortCornerLocker", + props(name = r#"Short Corner Locker"#, desc = r#""#, value = "1330754486") + )] + StructureShortCornerLocker = 1330754486i32, + #[strum( + serialize = "StructureTankConnectorLiquid", + props( + name = r#"Liquid Tank Connector"#, + desc = r#"These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network."#, + value = "1331802518" + ) + )] + StructureTankConnectorLiquid = 1331802518i32, + #[strum( + serialize = "ItemSprayCanPink", + props( + name = r#"Spray Paint (Pink)"#, + desc = r#"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", + props(name = r#"Graph Display"#, desc = r#""#, value = "1344368806") + )] + CircuitboardGraphDisplay = 1344368806i32, + #[strum( + serialize = "ItemWreckageStructureWeatherStation006", + props( + name = r#"Wreckage Structure Weather Station"#, + desc = r#""#, + value = "1344576960" + ) + )] + ItemWreckageStructureWeatherStation006 = 1344576960i32, + #[strum( + serialize = "ItemCookedCorn", + props( + name = r#"Cooked Corn"#, + desc = r#"A high-nutrient cooked food, which can be canned."#, + value = "1344773148" + ) + )] + ItemCookedCorn = 1344773148i32, + #[strum( + serialize = "ItemCookedSoybean", + props( + name = r#"Cooked Soybean"#, + desc = r#"A high-nutrient cooked food, which can be canned."#, + value = "1353449022" + ) + )] + ItemCookedSoybean = 1353449022i32, + #[strum( + serialize = "StructureChuteCorner", + props( + name = r#"Chute (Corner)"#, + desc = r#"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. +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. +Chute 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", + props( + name = r#"Portable Gas Tank (Oxygen)"#, + desc = r#"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", + props(name = r#"Insulated Passive Vent"#, desc = r#""#, value = "1363077139") + )] + StructurePassiveVentInsulated = 1363077139i32, + #[strum( + serialize = "ApplianceChemistryStation", + props(name = r#"Chemistry Station"#, desc = r#""#, value = "1365789392") + )] + ApplianceChemistryStation = 1365789392i32, + #[strum( + serialize = "ItemPipeIgniter", + props(name = r#"Kit (Pipe Igniter)"#, desc = r#""#, value = "1366030599") + )] + ItemPipeIgniter = 1366030599i32, + #[strum( + serialize = "ItemFries", + props(name = r#"French Fries"#, desc = r#""#, value = "1371786091") + )] + ItemFries = 1371786091i32, + #[strum( + serialize = "StructureSleeperVerticalDroid", + props( + name = r#"Droid Sleeper Vertical"#, + desc = r#"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", + props(name = r#"Arc Welder"#, desc = r#""#, value = "1385062886") + )] + ItemArcWelder = 1385062886i32, + #[strum( + serialize = "ItemSoyOil", + props(name = r#"Soy Oil"#, desc = r#""#, value = "1387403148") + )] + ItemSoyOil = 1387403148i32, + #[strum( + serialize = "ItemKitRocketAvionics", + props(name = r#"Kit (Avionics)"#, desc = r#""#, value = "1396305045") + )] + ItemKitRocketAvionics = 1396305045i32, + #[strum( + serialize = "ItemMarineBodyArmor", + props(name = r#"Marine Armor"#, desc = r#""#, value = "1399098998") + )] + ItemMarineBodyArmor = 1399098998i32, + #[strum( + serialize = "StructureStairs4x2", + props(name = r#"Stairs"#, desc = r#""#, value = "1405018945") + )] + StructureStairs4X2 = 1405018945i32, + #[strum( + serialize = "ItemKitBattery", + props(name = r#"Kit (Battery)"#, desc = r#""#, value = "1406656973") + )] + ItemKitBattery = 1406656973i32, + #[strum( + serialize = "StructureLargeDirectHeatExchangeGastoLiquid", + props( + name = r#"Large Direct Heat Exchanger - Gas + Liquid"#, + desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, + value = "1412338038" + ) + )] + StructureLargeDirectHeatExchangeGastoLiquid = 1412338038i32, + #[strum( + serialize = "AccessCardBrown", + props(name = r#"Access Card (Brown)"#, desc = r#""#, value = "1412428165") + )] + AccessCardBrown = 1412428165i32, + #[strum( + serialize = "StructureCapsuleTankLiquid", + props( + name = r#"Liquid Capsule Tank Small"#, + desc = r#""#, + value = "1415396263" + ) + )] + StructureCapsuleTankLiquid = 1415396263i32, + #[strum( + serialize = "StructureLogicBatchWriter", + props(name = r#"Batch Writer"#, desc = r#""#, value = "1415443359") + )] + StructureLogicBatchWriter = 1415443359i32, #[strum( serialize = "StructureCondensationChamber", props( @@ -1773,211 +8248,73 @@ Compatible motherboards: )] StructureCondensationChamber = 1420719315i32, #[strum( - serialize = "StructureCondensationValve", + serialize = "SeedBag_Pumpkin", props( - name = r#"Condensation Valve"#, - desc = r#"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" + name = r#"Pumpkin Seeds"#, + desc = r#"Grow a Pumpkin."#, + value = "1423199840" ) )] - StructureCondensationValve = -965741795i32, + SeedBagPumpkin = 1423199840i32, #[strum( - serialize = "ItemCookedCondensedMilk", + serialize = "ItemPureIceLiquidNitrous", props( - name = r#"Condensed Milk"#, - desc = r#"A high-nutrient cooked food, which can be canned."#, - value = "1715917521" + name = r#"Pure Ice Liquid Nitrous"#, + desc = r#"A frozen chunk of pure Liquid Nitrous Oxide"#, + value = "1428477399" ) )] - ItemCookedCondensedMilk = 1715917521i32, + ItemPureIceLiquidNitrous = 1428477399i32, #[strum( - serialize = "CartridgeConfiguration", - props(name = r#"Configuration"#, desc = r#""#, value = "-932136011") - )] - CartridgeConfiguration = -932136011i32, - #[strum( - serialize = "StructureConsole", + serialize = "StructureFrame", props( - name = r#"Console"#, - desc = r#"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. -A 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" + name = r#"Steel Frame"#, + desc = r#"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" ) )] - StructureConsole = 235638270i32, + StructureFrame = 1432512808i32, #[strum( - serialize = "StructureConsoleDual", + serialize = "StructureWaterBottleFillerBottom", props( - name = r#"Console Dual"#, - desc = r#"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. -A 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" + name = r#"Water Bottle Filler Bottom"#, + desc = r#""#, + value = "1433754995" ) )] - StructureConsoleDual = -722284333i32, + StructureWaterBottleFillerBottom = 1433754995i32, #[strum( - serialize = "StructureConsoleMonitor", + serialize = "StructureLightRoundSmall", props( - name = r#"Console Monitor"#, - desc = r#"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. -A 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" + name = r#"Light Round (Small)"#, + desc = r#"Description coming."#, + value = "1436121888" ) )] - StructureConsoleMonitor = 801677497i32, + StructureLightRoundSmall = 1436121888i32, #[strum( - serialize = "StructureCrateMount", - props(name = r#"Container Mount"#, desc = r#""#, value = "-733500083") - )] - StructureCrateMount = -733500083i32, - #[strum( - serialize = "StructureControlChair", + serialize = "ItemRocketMiningDrillHeadHighSpeedMineral", props( - name = r#"Control Chair"#, - desc = r#"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" + name = r#"Mining-Drill Head (High Speed Mineral)"#, + desc = r#""#, + value = "1440678625" ) )] - StructureControlChair = -1961153710i32, + ItemRocketMiningDrillHeadHighSpeedMineral = 1440678625i32, #[strum( - serialize = "ItemCookedCorn", + serialize = "ItemMKIICrowbar", props( - name = r#"Cooked Corn"#, - desc = r#"A high-nutrient cooked food, which can be canned."#, - value = "1344773148" + name = r#"Mk II Crowbar"#, + desc = r#"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" ) )] - ItemCookedCorn = 1344773148i32, + ItemMkiiCrowbar = 1440775434i32, #[strum( - serialize = "ItemCookedMushroom", - props( - name = r#"Cooked Mushroom"#, - desc = r#"A high-nutrient cooked food, which can be canned."#, - value = "-1076892658" - ) + serialize = "StructureHydroponicsStation", + props(name = r#"Hydroponics Station"#, desc = r#""#, value = "1441767298") )] - ItemCookedMushroom = -1076892658i32, - #[strum( - serialize = "ItemCookedPumpkin", - props( - name = r#"Cooked Pumpkin"#, - desc = r#"A high-nutrient cooked food, which can be canned."#, - value = "1849281546" - ) - )] - ItemCookedPumpkin = 1849281546i32, - #[strum( - serialize = "ItemCookedRice", - props( - name = r#"Cooked Rice"#, - desc = r#"A high-nutrient cooked food, which can be canned."#, - value = "2013539020" - ) - )] - ItemCookedRice = 2013539020i32, - #[strum( - serialize = "ItemCookedSoybean", - props( - name = r#"Cooked Soybean"#, - desc = r#"A high-nutrient cooked food, which can be canned."#, - value = "1353449022" - ) - )] - ItemCookedSoybean = 1353449022i32, - #[strum( - serialize = "ItemCookedTomato", - props( - name = r#"Cooked Tomato"#, - desc = r#"A high-nutrient cooked food, which can be canned."#, - value = "-709086714" - ) - )] - ItemCookedTomato = -709086714i32, - #[strum( - serialize = "ItemCorn", - props( - name = r#"Corn"#, - desc = r#"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 = "SeedBag_Corn", - props( - name = r#"Corn Seeds"#, - desc = r#"Grow a Corn."#, - value = "-1290755415" - ) - )] - SeedBagCorn = -1290755415i32, - #[strum( - serialize = "ItemCornSoup", - props( - name = r#"Corn Soup"#, - desc = r#"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 = "StructureCornerLocker", - props(name = r#"Corner Locker"#, desc = r#""#, value = "-1968255729") - )] - StructureCornerLocker = -1968255729i32, - #[strum( - serialize = "StructurePassthroughHeatExchangerGasToGas", - props( - name = r#"CounterFlow Heat Exchanger - Gas + Gas"#, - desc = r#"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. - Balancing the throughput of both inputs is key to creating a good exhange of temperatures."#, - value = "-1674187440" - ) - )] - StructurePassthroughHeatExchangerGasToGas = -1674187440i32, - #[strum( - serialize = "StructurePassthroughHeatExchangerGasToLiquid", - props( - name = r#"CounterFlow Heat Exchanger - Gas + Liquid"#, - desc = r#"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. - Balancing the throughput of both inputs is key to creating a good exhange of temperatures."#, - value = "1928991265" - ) - )] - StructurePassthroughHeatExchangerGasToLiquid = 1928991265i32, - #[strum( - serialize = "StructurePassthroughHeatExchangerLiquidToLiquid", - props( - name = r#"CounterFlow Heat Exchanger - Liquid + Liquid"#, - desc = r#"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. - Balancing the throughput of both inputs is key to creating a good exchange of temperatures."#, - value = "-1472829583" - ) - )] - StructurePassthroughHeatExchangerLiquidToLiquid = -1472829583i32, - #[strum( - serialize = "CrateMkII", - props( - name = r#"Crate Mk II"#, - desc = r#"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 = "ItemCreditCard", - props(name = r#"Credit Card"#, desc = r#""#, value = "-1756772618") - )] - ItemCreditCard = -1756772618i32, - #[strum( - serialize = "ItemCrowbar", - props( - name = r#"Crowbar"#, - desc = r#"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, + StructureHydroponicsStation = 1441767298i32, #[strum( serialize = "StructureCryoTubeHorizontal", props( @@ -1988,55 +8325,148 @@ A completed console displays all devices connected to the current power network. )] StructureCryoTubeHorizontal = 1443059329i32, #[strum( - serialize = "StructureCryoTubeVertical", + serialize = "StructureInsulatedInLineTankLiquid1x2", props( - name = r#"Cryo Tube Vertical"#, - desc = r#"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" + name = r#"Insulated In-Line Tank Liquid"#, + desc = r#""#, + value = "1452100517" ) )] - StructureCryoTubeVertical = -1381321828i32, + StructureInsulatedInLineTankLiquid1X2 = 1452100517i32, #[strum( - serialize = "StructureCryoTube", + serialize = "ItemKitPassiveLargeRadiatorLiquid", props( - name = r#"CryoTube"#, - desc = r#"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" + name = r#"Kit (Medium Radiator Liquid)"#, + desc = r#""#, + value = "1453961898" ) )] - StructureCryoTube = 1938254586i32, + ItemKitPassiveLargeRadiatorLiquid = 1453961898i32, #[strum( - serialize = "ItemSuitModCryogenicUpgrade", + serialize = "ItemKitReinforcedWindows", props( - name = r#"Cryogenic Suit Upgrade"#, - desc = r#"Enables suits with basic cooling functionality to work with cryogenic liquid."#, - value = "-1274308304" + name = r#"Kit (Reinforced Windows)"#, + desc = r#""#, + value = "1459985302" ) )] - ItemSuitModCryogenicUpgrade = -1274308304i32, + ItemKitReinforcedWindows = 1459985302i32, #[strum( - serialize = "ItemFilterFern", + serialize = "ItemWreckageStructureWeatherStation002", props( - name = r#"Darga Fern"#, - desc = r#"A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant."#, - value = "266654416" + name = r#"Wreckage Structure Weather Station"#, + desc = r#""#, + value = "1464424921" ) )] - ItemFilterFern = 266654416i32, + ItemWreckageStructureWeatherStation002 = 1464424921i32, #[strum( - serialize = "ItemDataDisk", - props(name = r#"Data Disk"#, desc = r#""#, value = "1005843700") - )] - ItemDataDisk = 1005843700i32, - #[strum( - serialize = "StructureDaylightSensor", + serialize = "StructureHydroponicsTray", props( - name = r#"Daylight Sensor"#, - desc = r#"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" + name = r#"Hydroponics Tray"#, + desc = r#"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. +It can be automated using the Harvie."#, + value = "1464854517" ) )] - StructureDaylightSensor = 1076425094i32, + StructureHydroponicsTray = 1464854517i32, + #[strum( + serialize = "ItemMkIIToolbelt", + props( + name = r#"Tool Belt MK II"#, + desc = r#"A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy."#, + value = "1467558064" + ) + )] + ItemMkIiToolbelt = 1467558064i32, + #[strum( + serialize = "StructureOverheadShortLocker", + props(name = r#"Overhead Locker"#, desc = r#""#, value = "1468249454") + )] + StructureOverheadShortLocker = 1468249454i32, + #[strum( + serialize = "ItemMiningBeltMKII", + props( + name = r#"Mining Belt MK II"#, + desc = r#"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", + props(name = r#"Torpedo Rack"#, desc = r#""#, value = "1473807953") + )] + StructureTorpedoRack = 1473807953i32, + #[strum( + serialize = "StructureWallIron02", + props(name = r#"Iron Wall (Type 2)"#, desc = r#""#, value = "1485834215") + )] + StructureWallIron02 = 1485834215i32, + #[strum( + serialize = "StructureWallLargePanel", + props(name = r#"Wall (Large Panel)"#, desc = r#""#, value = "1492930217") + )] + StructureWallLargePanel = 1492930217i32, + #[strum( + serialize = "ItemKitLogicCircuit", + props(name = r#"Kit (IC Housing)"#, desc = r#""#, value = "1512322581") + )] + ItemKitLogicCircuit = 1512322581i32, + #[strum( + serialize = "ItemSprayCanRed", + props( + name = r#"Spray Paint (Red)"#, + desc = r#"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", + props( + name = r#"Light Round"#, + desc = r#"Description coming."#, + value = "1514476632" + ) + )] + StructureLightRound = 1514476632i32, + #[strum( + serialize = "Fertilizer", + props( + name = r#"Fertilizer"#, + desc = r#"Fertilizer alters plant growth processes, and is created by the basic composter and the Advanced Composter using organic matter. +Fertilizer's affects depend on its ingredients: + +- Food increases PLANT YIELD up to two times +- Decayed Food increases plant GROWTH SPEED up to two times +- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for + +The effect of these ingredients depends on their respective proportions in the composter when processing is activated. "#, + value = "1517856652" + ) + )] + Fertilizer = 1517856652i32, + #[strum( + serialize = "StructurePowerUmbilicalMale", + props( + name = r#"Umbilical (Power)"#, + desc = r#"0.Left +1.Center +2.Right"#, + value = "1529453938" + ) + )] + StructurePowerUmbilicalMale = 1529453938i32, + #[strum( + serialize = "ItemRocketMiningDrillHeadDurable", + props( + name = r#"Mining-Drill Head (Durable)"#, + desc = r#""#, + value = "1530764483" + ) + )] + ItemRocketMiningDrillHeadDurable = 1530764483i32, #[strum( serialize = "DecayedFood", props( @@ -2047,7 +8477,7 @@ A completed console displays all devices connected to the current power network. - FOOD TYPE - Each food type has its own decay properties. Tomato Soup lasts a lot longer than a Tomato, for instance. -- 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. +- 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. - 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: @@ -2066,14 +8496,556 @@ A completed console displays all devices connected to the current power network. )] DecayedFood = 1531087544i32, #[strum( - serialize = "StructureDeepMiner", + serialize = "LogicStepSequencer8", props( - name = r#"Deep Miner"#, - desc = r#"Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s"#, - value = "265720906" + name = r#"Logic Step Sequencer"#, + desc = r#"The ODA does not approve of soundtracks or other distractions. +As such, Stationeers have had to create their own musical accompaniment to the demanding labor of building and maintaining off-world infrastructure. +Central to this pastime is the step sequencer, which allows Stationeers to sequence short musical patterns or loops. + +DIY MUSIC - GETTING STARTED + +1: Connect 8 Device Step Units to your step sequencer via the data port on the left hand side. + +2: Label each step unit, then assign step units 1 through 8 on the step sequencer using the screwdriver. + +3: 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. + +4: Place a Stop Watch and use a Logic Reader and Logic Writer to write the time to the time variable on the sequencer. + +5: 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. + +6: 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. + +7: 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). + +8: Get freaky with the Low frequency oscillator. + +9: Finally, activate the sequencer, Vibeoneer."#, + value = "1531272458" ) )] - StructureDeepMiner = 265720906i32, + LogicStepSequencer8 = 1531272458i32, + #[strum( + serialize = "ItemKitDynamicGasTankAdvanced", + props( + name = r#"Kit (Portable Gas Tank Mk II)"#, + desc = r#""#, + value = "1533501495" + ) + )] + ItemKitDynamicGasTankAdvanced = 1533501495i32, + #[strum( + serialize = "ItemWireCutters", + props( + name = r#"Wire Cutters"#, + desc = r#"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", + props(name = r#"Ladder End"#, desc = r#""#, value = "1541734993") + )] + StructureLadderEnd = 1541734993i32, + #[strum( + serialize = "ItemGrenade", + props( + name = r#"Hand Grenade"#, + desc = r#"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", + props( + name = r#"Burnt Cable (5-Way Junction)"#, + desc = r#""#, + value = "1545286256" + ) + )] + StructureCableJunction5Burnt = 1545286256i32, + #[strum( + serialize = "StructurePlatformLadderOpen", + props(name = r#"Ladder Platform"#, desc = r#""#, value = "1559586682") + )] + StructurePlatformLadderOpen = 1559586682i32, + #[strum( + serialize = "StructureTraderWaypoint", + props(name = r#"Trader Waypoint"#, desc = r#""#, value = "1570931620") + )] + StructureTraderWaypoint = 1570931620i32, + #[strum( + serialize = "ItemKitLiquidUmbilical", + props(name = r#"Kit (Liquid Umbilical)"#, desc = r#""#, value = "1571996765") + )] + ItemKitLiquidUmbilical = 1571996765i32, + #[strum( + serialize = "StructureCompositeWall03", + props( + name = r#"Composite Wall (Type 3)"#, + desc = r#""#, + value = "1574321230" + ) + )] + StructureCompositeWall03 = 1574321230i32, + #[strum( + serialize = "ItemKitRespawnPointWallMounted", + props(name = r#"Kit (Respawn)"#, desc = r#""#, value = "1574688481") + )] + ItemKitRespawnPointWallMounted = 1574688481i32, + #[strum( + serialize = "ItemHastelloyIngot", + props(name = r#"Ingot (Hastelloy)"#, desc = r#""#, value = "1579842814") + )] + ItemHastelloyIngot = 1579842814i32, + #[strum( + serialize = "StructurePipeOneWayValve", + props( + name = r#"One Way Valve (Gas)"#, + desc = r#"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. +"#, + value = "1580412404" + ) + )] + StructurePipeOneWayValve = 1580412404i32, + #[strum( + serialize = "StructureStackerReverse", + props( + name = r#"Stacker"#, + desc = r#"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. +The 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", + props( + name = r#"Kit (Phase Change Device)"#, + desc = r#""#, + value = "1587787610" + ) + )] + ItemKitEvaporationChamber = 1587787610i32, + #[strum( + serialize = "ItemGlassSheets", + props( + name = r#"Glass Sheets"#, + desc = r#"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", + props(name = r#"Wall (Padded Arch)"#, desc = r#""#, value = "1590330637") + )] + StructureWallPaddedArch = 1590330637i32, + #[strum( + serialize = "StructureLightRoundAngled", + props( + name = r#"Light Round (Angled)"#, + desc = r#"Description coming."#, + value = "1592905386" + ) + )] + StructureLightRoundAngled = 1592905386i32, + #[strum( + serialize = "StructureWallGeometryT", + props(name = r#"Wall (Geometry T)"#, desc = r#""#, value = "1602758612") + )] + StructureWallGeometryT = 1602758612i32, + #[strum( + serialize = "ItemKitElectricUmbilical", + props(name = r#"Kit (Power Umbilical)"#, desc = r#""#, value = "1603046970") + )] + ItemKitElectricUmbilical = 1603046970i32, + #[strum( + serialize = "Lander", + props(name = r#"Lander"#, desc = r#""#, value = "1605130615") + )] + Lander = 1605130615i32, + #[strum( + serialize = "CartridgeNetworkAnalyser", + props( + name = r#"Network Analyzer"#, + desc = r#"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", + props( + name = r#"Air Control"#, + desc = r#"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", + props( + name = r#"Upright Wind Turbine"#, + desc = r#"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. +While 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", + props(name = r#"Fairing (Type A1)"#, desc = r#""#, value = "1622567418") + )] + StructureFairingTypeA1 = 1622567418i32, + #[strum( + serialize = "ItemKitWallArch", + props(name = r#"Kit (Arched Wall)"#, desc = r#""#, value = "1625214531") + )] + ItemKitWallArch = 1625214531i32, + #[strum( + serialize = "StructurePipeLiquidCrossJunction3", + props( + name = r#"Liquid Pipe (3-Way Junction)"#, + desc = r#"You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench."#, + value = "1628087508" + ) + )] + StructurePipeLiquidCrossJunction3 = 1628087508i32, + #[strum( + serialize = "StructureGasTankStorage", + props( + name = r#"Gas Tank Storage"#, + desc = r#"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", + props(name = r#"Hash Display"#, desc = r#""#, value = "1633074601") + )] + CircuitboardHashDisplay = 1633074601i32, + #[strum( + serialize = "CircuitboardAdvAirlockControl", + props(name = r#"Advanced Airlock"#, desc = r#""#, value = "1633663176") + )] + CircuitboardAdvAirlockControl = 1633663176i32, + #[strum( + serialize = "ItemGasFilterCarbonDioxide", + props( + name = r#"Filter (Carbon Dioxide)"#, + desc = r#"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", + props(name = r#"Wall (Flat)"#, desc = r#""#, value = "1635864154") + )] + StructureWallFlat = 1635864154i32, + #[strum( + serialize = "StructureChairBoothMiddle", + props(name = r#"Chair (Booth Middle)"#, desc = r#""#, value = "1640720378") + )] + StructureChairBoothMiddle = 1640720378i32, + #[strum( + serialize = "StructureWallArchArrow", + props(name = r#"Wall (Arch Arrow)"#, desc = r#""#, value = "1649708822") + )] + StructureWallArchArrow = 1649708822i32, + #[strum( + serialize = "StructureInsulatedPipeLiquidCrossJunction5", + props( + name = r#"Insulated Liquid Pipe (5-Way Junction)"#, + desc = r#"Liquid piping with very low temperature loss or gain."#, + value = "1654694384" + ) + )] + StructureInsulatedPipeLiquidCrossJunction5 = 1654694384i32, + #[strum( + serialize = "StructureLogicMath", + props( + name = r#"Logic Math"#, + desc = r#"0.Add +1.Subtract +2.Multiply +3.Divide +4.Mod +5.Atan2 +6.Pow +7.Log"#, + value = "1657691323" + ) + )] + StructureLogicMath = 1657691323i32, + #[strum( + serialize = "ItemKitFridgeSmall", + props(name = r#"Kit (Fridge Small)"#, desc = r#""#, value = "1661226524") + )] + ItemKitFridgeSmall = 1661226524i32, + #[strum( + serialize = "ItemScanner", + props( + name = r#"Handheld Scanner"#, + desc = r#"A mysterious piece of technology, rumored to have Zrillian origins."#, + value = "1661270830" + ) + )] + ItemScanner = 1661270830i32, + #[strum( + serialize = "ItemEmergencyToolBelt", + props(name = r#"Emergency Tool Belt"#, desc = r#""#, value = "1661941301") + )] + ItemEmergencyToolBelt = 1661941301i32, + #[strum( + serialize = "StructureEmergencyButton", + props( + name = r#"Important Button"#, + desc = r#"Description coming."#, + value = "1668452680" + ) + )] + StructureEmergencyButton = 1668452680i32, + #[strum( + serialize = "ItemKitAutoMinerSmall", + props(name = r#"Kit (Autominer Small)"#, desc = r#""#, value = "1668815415") + )] + ItemKitAutoMinerSmall = 1668815415i32, + #[strum( + serialize = "StructureChairBacklessSingle", + props( + name = r#"Chair (Backless Single)"#, + desc = r#""#, + value = "1672275150" + ) + )] + StructureChairBacklessSingle = 1672275150i32, + #[strum( + serialize = "ItemPureIceLiquidNitrogen", + props( + name = r#"Pure Ice Liquid Nitrogen"#, + desc = r#"A frozen chunk of pure Liquid Nitrogen"#, + value = "1674576569" + ) + )] + ItemPureIceLiquidNitrogen = 1674576569i32, + #[strum( + serialize = "ItemEvaSuit", + props( + name = r#"Eva Suit"#, + desc = r#"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", + props( + name = r#"Picture Frame Thin Portrait Small"#, + desc = r#""#, + value = "1684488658" + ) + )] + StructurePictureFrameThinPortraitSmall = 1684488658i32, + #[strum( + serialize = "StructureLiquidDrain", + props( + name = r#"Active Liquid Outlet"#, + desc = r#"When connected to power and activated, it pumps liquid from a liquid network into the world."#, + value = "1687692899" + ) + )] + StructureLiquidDrain = 1687692899i32, + #[strum( + serialize = "StructureLiquidTankStorage", + props( + name = r#"Liquid Tank Storage"#, + desc = r#"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", + props( + name = r#"Pipe Convection Radiator"#, + desc = r#"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. +The 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", + props( + name = r#"Solar Panel (Heavy Flat)"#, + desc = r#"This solar panel is resistant to storm damage."#, + value = "1697196770" + ) + )] + StructureSolarPanelFlatReinforced = 1697196770i32, + #[strum( + serialize = "ToolPrinterMod", + props( + name = r#"Tool Printer Mod"#, + desc = r#"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", + props( + name = r#"Burnt Heavy Cable (5-Way Junction)"#, + desc = r#""#, + value = "1701593300" + ) + )] + StructureCableJunctionH5Burnt = 1701593300i32, + #[strum( + serialize = "ItemKitFlagODA", + props(name = r#"Kit (ODA Flag)"#, desc = r#""#, value = "1701764190") + )] + ItemKitFlagOda = 1701764190i32, + #[strum( + serialize = "StructureWallSmallPanelsTwoTone", + props( + name = r#"Wall (Small Panels Two Tone)"#, + desc = r#""#, + value = "1709994581" + ) + )] + StructureWallSmallPanelsTwoTone = 1709994581i32, + #[strum( + serialize = "ItemFlowerYellow", + props(name = r#"Flower (Yellow)"#, desc = r#""#, value = "1712822019") + )] + ItemFlowerYellow = 1712822019i32, + #[strum( + serialize = "StructureInsulatedPipeLiquidCorner", + props( + name = r#"Insulated Liquid Pipe (Corner)"#, + desc = r#"Liquid piping with very low temperature loss or gain."#, + value = "1713710802" + ) + )] + StructureInsulatedPipeLiquidCorner = 1713710802i32, + #[strum( + serialize = "ItemCookedCondensedMilk", + props( + name = r#"Condensed Milk"#, + desc = r#"A high-nutrient cooked food, which can be canned."#, + value = "1715917521" + ) + )] + ItemCookedCondensedMilk = 1715917521i32, + #[strum( + serialize = "ItemGasSensor", + props(name = r#"Kit (Gas Sensor)"#, desc = r#""#, value = "1717593480") + )] + ItemGasSensor = 1717593480i32, + #[strum( + serialize = "ItemAdvancedTablet", + props( + name = r#"Advanced Tablet"#, + desc = r#"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. + + 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", + props( + name = r#"Ore (Coal)"#, + desc = r#"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", + props( + name = r#"Entity Chick"#, + desc = r#"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", + props( + name = r#"Umbilical Socket (Liquid)"#, + desc = r#""#, + value = "1734723642" + ) + )] + StructureLiquidUmbilicalFemale = 1734723642i32, + #[strum( + serialize = "StructureAirlockGate", + props( + name = r#"Small Hangar Door"#, + desc = r#"1 x 1 modular door piece for building hangar doors."#, + value = "1736080881" + ) + )] + StructureAirlockGate = 1736080881i32, + #[strum( + serialize = "CartridgeOreScannerColor", + props( + name = r#"Ore Scanner (Color)"#, + desc = r#"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", + props( + name = r#"Bench (Workbench Style)"#, + desc = r#""#, + value = "1750375230" + ) + )] + StructureBench4 = 1750375230i32, + #[strum( + serialize = "StructureCompositeCladdingSphericalCorner", + props( + name = r#"Composite Cladding (Spherical Corner)"#, + desc = r#""#, + value = "1751355139" + ) + )] + StructureCompositeCladdingSphericalCorner = 1751355139i32, + #[strum( + serialize = "ItemKitRocketScanner", + props(name = r#"Kit (Rocket Scanner)"#, desc = r#""#, value = "1753647154") + )] + ItemKitRocketScanner = 1753647154i32, + #[strum( + serialize = "ItemAreaPowerControl", + props( + name = r#"Kit (Power Controller)"#, + desc = r#"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", + props( + name = r#"Ore (Iron)"#, + desc = r#"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", props( @@ -2169,7 +9141,7 @@ A completed console displays all devices connected to the current power network. 88.E5 89.F5 90.F#5 -91.G5 +91.G5 92.G#5 93.A5 94.A#5 @@ -2211,2236 +9183,66 @@ A completed console displays all devices connected to the current power network. )] DeviceStepUnit = 1762696475i32, #[strum( - serialize = "StructureLogicDial", + serialize = "StructureWallPaddedThinNoBorderCorner", props( - name = r#"Dial"#, - desc = r#"An assignable dial with up to 1000 modes."#, - value = "554524804" - ) - )] - StructureLogicDial = 554524804i32, - #[strum( - serialize = "StructureDigitalValve", - props( - name = r#"Digital Valve"#, - desc = r#"The digital valve allows Stationeers to create logic-controlled valves and pipe networks."#, - value = "-1280984102" - ) - )] - StructureDigitalValve = -1280984102i32, - #[strum( - serialize = "StructureDiodeSlide", - props(name = r#"Diode Slide"#, desc = r#""#, value = "576516101") - )] - StructureDiodeSlide = 576516101i32, - #[strum( - serialize = "ItemDirtCanister", - props( - name = r#"Dirt Canister"#, - desc = r#"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 = "ItemSpaceOre", - props( - name = r#"Dirty Ore"#, - desc = r#"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 = "ItemDirtyOre", - props( - name = r#"Dirty Ore"#, - desc = r#"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 = "ItemDisposableBatteryCharger", - props( - name = r#"Disposable Battery Charger"#, - desc = r#"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 = "StructureDockPortSide", - props(name = r#"Dock (Port Side)"#, desc = r#""#, value = "-137465079") - )] - StructureDockPortSide = -137465079i32, - #[strum( - serialize = "CircuitboardDoorControl", - props( - name = r#"Door Control"#, - desc = r#"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 = "StructureSleeperVerticalDroid", - props( - name = r#"Droid Sleeper Vertical"#, - desc = r#"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 = "ItemDuctTape", - props( - name = r#"Duct Tape"#, - desc = r#"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. -To use on yourself: put duct tape in your active hand, hold RIGHT MOUSE BUTTON to automatically repair damage."#, - value = "-1943134693" - ) - )] - ItemDuctTape = -1943134693i32, - #[strum( - serialize = "DynamicCrate", - props( - name = r#"Dynamic Crate"#, - desc = r#"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 = "DynamicGasCanisterRocketFuel", - props( - name = r#"Dynamic Gas Canister Rocket Fuel"#, + name = r#"Wall (Padded Thin No Border Corner)"#, desc = r#""#, - value = "-8883951" + value = "1769527556" ) )] - DynamicGasCanisterRocketFuel = -8883951i32, + StructureWallPaddedThinNoBorderCorner = 1769527556i32, #[strum( - serialize = "ItemFertilizedEgg", + serialize = "ItemKitWindowShutter", + props(name = r#"Kit (Window Shutter)"#, desc = r#""#, value = "1779979754") + )] + ItemKitWindowShutter = 1779979754i32, + #[strum( + serialize = "StructureRocketManufactory", + props(name = r#"Rocket Manufactory"#, desc = r#""#, value = "1781051034") + )] + StructureRocketManufactory = 1781051034i32, + #[strum( + serialize = "SeedBag_Soybean", props( - name = r#"Egg"#, - desc = r#"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" + name = r#"Soybean Seeds"#, + desc = r#"Grow some Soybean."#, + value = "1783004244" ) )] - ItemFertilizedEgg = -383972371i32, - #[strum( - serialize = "ItemEggCarton", - props( - name = r#"Egg Carton"#, - desc = r#"Within, eggs reside in mysterious, marmoreal silence."#, - value = "-524289310" - ) - )] - ItemEggCarton = -524289310i32, - #[strum( - serialize = "StructureElectrolyzer", - props( - name = r#"Electrolyzer"#, - desc = r#"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 = "ItemElectronicParts", - props(name = r#"Electronic Parts"#, desc = r#""#, value = "731250882") - )] - ItemElectronicParts = 731250882i32, - #[strum( - serialize = "ElectronicPrinterMod", - props( - name = r#"Electronic Printer Mod"#, - desc = r#"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 = "StructureElectronicsPrinter", - props( - name = r#"Electronics Printer"#, - desc = r#"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 = "ElevatorCarrage", - props(name = r#"Elevator"#, desc = r#""#, value = "-110788403") - )] - ElevatorCarrage = -110788403i32, - #[strum( - serialize = "StructureElevatorLevelIndustrial", - props(name = r#"Elevator Level"#, desc = r#""#, value = "2060648791") - )] - StructureElevatorLevelIndustrial = 2060648791i32, - #[strum( - serialize = "StructureElevatorLevelFront", - props( - name = r#"Elevator Level (Cabled)"#, - desc = r#""#, - value = "-827912235" - ) - )] - StructureElevatorLevelFront = -827912235i32, - #[strum( - serialize = "StructureElevatorShaftIndustrial", - props(name = r#"Elevator Shaft"#, desc = r#""#, value = "1998354978") - )] - StructureElevatorShaftIndustrial = 1998354978i32, - #[strum( - serialize = "StructureElevatorShaft", - props(name = r#"Elevator Shaft (Cabled)"#, desc = r#""#, value = "826144419") - )] - StructureElevatorShaft = 826144419i32, - #[strum( - serialize = "ItemEmergencyAngleGrinder", - props( - name = r#"Emergency Angle Grinder"#, - desc = r#""#, - value = "-351438780" - ) - )] - ItemEmergencyAngleGrinder = -351438780i32, - #[strum( - serialize = "ItemEmergencyArcWelder", - props(name = r#"Emergency Arc Welder"#, desc = r#""#, value = "-1056029600") - )] - ItemEmergencyArcWelder = -1056029600i32, - #[strum( - serialize = "ItemEmergencyCrowbar", - props(name = r#"Emergency Crowbar"#, desc = r#""#, value = "976699731") - )] - ItemEmergencyCrowbar = 976699731i32, - #[strum( - serialize = "ItemEmergencyDrill", - props(name = r#"Emergency Drill"#, desc = r#""#, value = "-2052458905") - )] - ItemEmergencyDrill = -2052458905i32, + SeedBagSoybean = 1783004244i32, #[strum( serialize = "ItemEmergencyEvaSuit", props(name = r#"Emergency Eva Suit"#, desc = r#""#, value = "1791306431") )] ItemEmergencyEvaSuit = 1791306431i32, #[strum( - serialize = "ItemEmergencyPickaxe", - props(name = r#"Emergency Pickaxe"#, desc = r#""#, value = "-1061510408") - )] - ItemEmergencyPickaxe = -1061510408i32, - #[strum( - serialize = "ItemEmergencyScrewdriver", - props(name = r#"Emergency Screwdriver"#, desc = r#""#, value = "266099983") - )] - ItemEmergencyScrewdriver = 266099983i32, - #[strum( - serialize = "ItemEmergencySpaceHelmet", - props(name = r#"Emergency Space Helmet"#, desc = r#""#, value = "205916793") - )] - ItemEmergencySpaceHelmet = 205916793i32, - #[strum( - serialize = "ItemEmergencyToolBelt", - props(name = r#"Emergency Tool Belt"#, desc = r#""#, value = "1661941301") - )] - ItemEmergencyToolBelt = 1661941301i32, - #[strum( - serialize = "ItemEmergencyWireCutters", - props(name = r#"Emergency Wire Cutters"#, desc = r#""#, value = "2102803952") - )] - ItemEmergencyWireCutters = 2102803952i32, - #[strum( - serialize = "ItemEmergencyWrench", - props(name = r#"Emergency Wrench"#, desc = r#""#, value = "162553030") - )] - ItemEmergencyWrench = 162553030i32, - #[strum( - serialize = "ItemEmptyCan", + serialize = "StructureWallArchCornerRound", props( - name = r#"Empty Can"#, - desc = r#"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 = "ItemPlantEndothermic_Creative", - props( - name = r#"Endothermic Plant Creative"#, + name = r#"Wall (Arch Corner Round)"#, desc = r#""#, - value = "-1159179557" + value = "1794588890" ) )] - ItemPlantEndothermicCreative = -1159179557i32, + StructureWallArchCornerRound = 1794588890i32, #[strum( - serialize = "WeaponPistolEnergy", - props( - name = r#"Energy Pistol"#, - desc = r#"0.Stun -1.Kill"#, - value = "-385323479" - ) - )] - WeaponPistolEnergy = -385323479i32, - #[strum( - serialize = "WeaponRifleEnergy", - props( - name = r#"Energy Rifle"#, - desc = r#"0.Stun -1.Kill"#, - value = "1154745374" - ) - )] - WeaponRifleEnergy = 1154745374i32, - #[strum( - serialize = "StructureEngineMountTypeA1", - props(name = r#"Engine Mount (Type A1)"#, desc = r#""#, value = "2035781224") - )] - StructureEngineMountTypeA1 = 2035781224i32, - #[strum( - serialize = "EntityChick", - props( - name = r#"Entity Chick"#, - desc = r#"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 = "EntityChickenBrown", - props( - name = r#"Entity Chicken Brown"#, - desc = r#"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 = "EntityChickenWhite", - props( - name = r#"Entity Chicken White"#, - desc = r#"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 = "EntityRoosterBlack", - props( - name = r#"Entity Rooster Black"#, - desc = r#"This is a rooster. It is black. There is dignity in this."#, - value = "966959649" - ) - )] - EntityRoosterBlack = 966959649i32, - #[strum( - serialize = "EntityRoosterBrown", - props( - name = r#"Entity Rooster Brown"#, - desc = r#"The common brown rooster. Don't let it hear you say that."#, - value = "-583103395" - ) - )] - EntityRoosterBrown = -583103395i32, - #[strum( - serialize = "ItemEvaSuit", - props( - name = r#"Eva Suit"#, - desc = r#"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 = "StructureEvaporationChamber", - props( - name = r#"Evaporation Chamber"#, - desc = r#"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. - 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. - 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 = "StructureExpansionValve", - props( - name = r#"Expansion Valve"#, - desc = r#"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 = "StructureFairingTypeA1", - props(name = r#"Fairing (Type A1)"#, desc = r#""#, value = "1622567418") - )] - StructureFairingTypeA1 = 1622567418i32, - #[strum( - serialize = "StructureFairingTypeA2", - props(name = r#"Fairing (Type A2)"#, desc = r#""#, value = "-104908736") - )] - StructureFairingTypeA2 = -104908736i32, - #[strum( - serialize = "StructureFairingTypeA3", - props(name = r#"Fairing (Type A3)"#, desc = r#""#, value = "-1900541738") - )] - StructureFairingTypeA3 = -1900541738i32, - #[strum( - serialize = "ItemFern", - props( - name = r#"Fern"#, - desc = r#"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 = "SeedBag_Fern", - props( - name = r#"Fern Seeds"#, - desc = r#"Grow a Fern."#, - value = "-1990600883" - ) - )] - SeedBagFern = -1990600883i32, - #[strum( - serialize = "Fertilizer", - props( - name = r#"Fertilizer"#, - desc = r#"Fertilizer alters plant growth processes, and is created by the basic composter and the Advanced Composter using organic matter. -Fertilizer's affects depend on its ingredients: - -- Food increases PLANT YIELD up to two times -- Decayed Food increases plant GROWTH SPEED up to two times -- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for - -The effect of these ingredients depends on their respective proportions in the composter when processing is activated. "#, - value = "1517856652" - ) - )] - Fertilizer = 1517856652i32, - #[strum( - serialize = "ItemGasFilterCarbonDioxide", - props( - name = r#"Filter (Carbon Dioxide)"#, - desc = r#"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 = "ItemGasFilterNitrogen", - props( - name = r#"Filter (Nitrogen)"#, - desc = r#"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 = "ItemGasFilterNitrousOxide", - props( - name = r#"Filter (Nitrous Oxide)"#, - desc = r#""#, - value = "-1247674305" - ) - )] - ItemGasFilterNitrousOxide = -1247674305i32, - #[strum( - serialize = "ItemGasFilterOxygen", - props( - name = r#"Filter (Oxygen)"#, - desc = r#"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 = "ItemGasFilterPollutants", - props( - name = r#"Filter (Pollutant)"#, - desc = r#"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 = "ItemGasFilterVolatiles", - props( - name = r#"Filter (Volatiles)"#, - desc = r#"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 = "ItemGasFilterWater", - props( - name = r#"Filter (Water)"#, - desc = r#"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 = "StructureFiltration", - props( - name = r#"Filtration"#, - desc = r#"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). -The 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. -"#, - value = "-348054045" - ) - )] - StructureFiltration = -348054045i32, - #[strum( - serialize = "FireArmSMG", - props( - name = r#"Fire Arm SMG"#, - desc = r#"0.Single -1.Auto"#, - value = "-86315541" - ) - )] - FireArmSmg = -86315541i32, - #[strum( - serialize = "ItemReusableFireExtinguisher", - props( - name = r#"Fire Extinguisher (Reusable)"#, - desc = r#"Requires a canister filled with any inert liquid to opperate."#, - value = "-1773192190" - ) - )] - ItemReusableFireExtinguisher = -1773192190i32, - #[strum( - serialize = "Flag_ODA_10m", - props(name = r#"Flag (ODA 10m)"#, desc = r#""#, value = "1845441951") - )] - FlagOda10M = 1845441951i32, - #[strum( - serialize = "Flag_ODA_4m", - props(name = r#"Flag (ODA 4m)"#, desc = r#""#, value = "1159126354") - )] - FlagOda4M = 1159126354i32, - #[strum( - serialize = "Flag_ODA_6m", - props(name = r#"Flag (ODA 6m)"#, desc = r#""#, value = "1998634960") - )] - FlagOda6M = 1998634960i32, - #[strum( - serialize = "Flag_ODA_8m", - props(name = r#"Flag (ODA 8m)"#, desc = r#""#, value = "-375156130") - )] - FlagOda8M = -375156130i32, - #[strum( - serialize = "FlareGun", - props(name = r#"Flare Gun"#, desc = r#""#, value = "118685786") - )] - FlareGun = 118685786i32, - #[strum( - serialize = "StructureFlashingLight", - props( - name = r#"Flashing Light"#, - desc = r#"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 = "ItemFlashlight", - props( - name = r#"Flashlight"#, - desc = r#"A flashlight with a narrow and wide beam options."#, - value = "-838472102" - ) - )] - ItemFlashlight = -838472102i32, - #[strum( - serialize = "ItemFlour", - props( - name = r#"Flour"#, - desc = r#"Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven)."#, - value = "-665995854" - ) - )] - ItemFlour = -665995854i32, - #[strum( - serialize = "ItemFlowerBlue", - props(name = r#"Flower (Blue)"#, desc = r#""#, value = "-1573623434") - )] - ItemFlowerBlue = -1573623434i32, - #[strum( - serialize = "ItemFlowerGreen", - props(name = r#"Flower (Green)"#, desc = r#""#, value = "-1513337058") - )] - ItemFlowerGreen = -1513337058i32, - #[strum( - serialize = "ItemFlowerOrange", - props(name = r#"Flower (Orange)"#, desc = r#""#, value = "-1411986716") - )] - ItemFlowerOrange = -1411986716i32, - #[strum( - serialize = "ItemFlowerRed", - props(name = r#"Flower (Red)"#, desc = r#""#, value = "-81376085") - )] - ItemFlowerRed = -81376085i32, - #[strum( - serialize = "ItemFlowerYellow", - props(name = r#"Flower (Yellow)"#, desc = r#""#, value = "1712822019") - )] - ItemFlowerYellow = 1712822019i32, - #[strum( - serialize = "ItemFries", - props(name = r#"French Fries"#, desc = r#""#, value = "1371786091") - )] - ItemFries = 1371786091i32, - #[strum( - serialize = "StructureFridgeBig", - props( - name = r#"Fridge (Large)"#, - desc = r#"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. - -With 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. - -Also, don't leave the door open, as it will equalize with the current world temperature. And maybe start to beep. - -For more information about food preservation, visit the food decay section of the Stationpedia."#, - value = "958476921" - ) - )] - StructureFridgeBig = 958476921i32, - #[strum( - serialize = "StructureFridgeSmall", - props( - name = r#"Fridge Small"#, - desc = r#"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. - - For more information about food preservation, visit the food decay section of the Stationpedia."#, - value = "751887598" - ) - )] - StructureFridgeSmall = 751887598i32, - #[strum( - serialize = "StructureFurnace", - props( - name = r#"Furnace"#, - desc = r#"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. -A 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. -If 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 = "StructureCableFuse100k", - props(name = r#"Fuse (100kW)"#, desc = r#""#, value = "281380789") - )] - StructureCableFuse100K = 281380789i32, - #[strum( - serialize = "StructureCableFuse1k", - props(name = r#"Fuse (1kW)"#, desc = r#""#, value = "-1103727120") - )] - StructureCableFuse1K = -1103727120i32, - #[strum( - serialize = "StructureCableFuse50k", - props(name = r#"Fuse (50kW)"#, desc = r#""#, value = "-349716617") - )] - StructureCableFuse50K = -349716617i32, - #[strum( - serialize = "StructureCableFuse5k", - props(name = r#"Fuse (5kW)"#, desc = r#""#, value = "-631590668") - )] - StructureCableFuse5K = -631590668i32, - #[strum( - serialize = "StructureFuselageTypeA1", - props(name = r#"Fuselage (Type A1)"#, desc = r#""#, value = "1033024712") - )] - StructureFuselageTypeA1 = 1033024712i32, - #[strum( - serialize = "StructureFuselageTypeA2", - props(name = r#"Fuselage (Type A2)"#, desc = r#""#, value = "-1533287054") - )] - StructureFuselageTypeA2 = -1533287054i32, - #[strum( - serialize = "StructureFuselageTypeA4", - props(name = r#"Fuselage (Type A4)"#, desc = r#""#, value = "1308115015") - )] - StructureFuselageTypeA4 = 1308115015i32, - #[strum( - serialize = "StructureFuselageTypeC5", - props(name = r#"Fuselage (Type C5)"#, desc = r#""#, value = "147395155") - )] - StructureFuselageTypeC5 = 147395155i32, - #[strum( - serialize = "CartridgeGPS", - props(name = r#"GPS"#, desc = r#""#, value = "-1957063345") - )] - CartridgeGps = -1957063345i32, - #[strum( - serialize = "ItemGasCanisterNitrousOxide", - props( - name = r#"Gas Canister (Sleeping)"#, - desc = r#""#, - value = "-1712153401" - ) - )] - ItemGasCanisterNitrousOxide = -1712153401i32, - #[strum( - serialize = "ItemGasCanisterSmart", - props( - name = r#"Gas Canister (Smart)"#, - desc = r#"0.Mode0 -1.Mode1"#, - value = "-668314371" - ) - )] - ItemGasCanisterSmart = -668314371i32, - #[strum( - serialize = "StructureMediumRocketGasFuelTank", - props( - name = r#"Gas Capsule Tank Medium"#, - desc = r#""#, - value = "-1093860567" - ) - )] - StructureMediumRocketGasFuelTank = -1093860567i32, - #[strum( - serialize = "StructureCapsuleTankGas", - props( - name = r#"Gas Capsule Tank Small"#, - desc = r#""#, - value = "-1385712131" - ) - )] - StructureCapsuleTankGas = -1385712131i32, - #[strum( - serialize = "CircuitboardGasDisplay", - props( - name = r#"Gas Display"#, - desc = r#"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 = "StructureGasGenerator", - props(name = r#"Gas Fuel Generator"#, desc = r#""#, value = "1165997963") - )] - StructureGasGenerator = 1165997963i32, - #[strum( - serialize = "StructureGasMixer", - props( - name = r#"Gas Mixer"#, - desc = r#"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 = "StructureGasSensor", - props( - name = r#"Gas Sensor"#, - desc = r#"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 = "DynamicGasTankAdvanced", - props( - name = r#"Gas Tank Mk II"#, - desc = r#"0.Mode0 -1.Mode1"#, - value = "-386375420" - ) - )] - DynamicGasTankAdvanced = -386375420i32, - #[strum( - serialize = "StructureGasTankStorage", - props( - name = r#"Gas Tank Storage"#, - desc = r#"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 = "StructureSolidFuelGenerator", - props( - name = r#"Generator (Solid Fuel)"#, - desc = r#"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 = "StructureGlassDoor", - props( - name = r#"Glass Door"#, - desc = r#"0.Operate -1.Logic"#, - value = "-324331872" - ) - )] - StructureGlassDoor = -324331872i32, - #[strum( - serialize = "ItemGlassSheets", - props( - name = r#"Glass Sheets"#, - desc = r#"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 = "ItemGlasses", - props(name = r#"Glasses"#, desc = r#""#, value = "-1068925231") - )] - ItemGlasses = -1068925231i32, - #[strum( - serialize = "CircuitboardGraphDisplay", - props(name = r#"Graph Display"#, desc = r#""#, value = "1344368806") - )] - CircuitboardGraphDisplay = 1344368806i32, - #[strum( - serialize = "StructureGrowLight", - props( - name = r#"Grow Light"#, - desc = r#"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 = "CartridgeGuide", - props(name = r#"Guide"#, desc = r#""#, value = "872720793") - )] - CartridgeGuide = 872720793i32, - #[strum( - serialize = "H2Combustor", - props( - name = r#"H2 Combustor"#, - desc = r#"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 = "ItemHEMDroidRepairKit", - props( - name = r#"HEMDroid Repair Kit"#, - desc = r#"Repairs damaged HEM-Droids to full health."#, - value = "470636008" - ) - )] - ItemHemDroidRepairKit = 470636008i32, - #[strum( - serialize = "ItemPlantThermogenic_Genepool1", - props( - name = r#"Hades Flower (Alpha strain)"#, - desc = r#"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 = "ItemPlantThermogenic_Genepool2", - props( - name = r#"Hades Flower (Beta strain)"#, - desc = r#"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 = "ItemDrill", - props( - name = r#"Hand Drill"#, - desc = r#"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 = "ItemGrenade", - props( - name = r#"Hand Grenade"#, - desc = r#"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 = "Handgun", - props(name = r#"Handgun"#, desc = r#""#, value = "247238062") - )] - Handgun = 247238062i32, - #[strum( - serialize = "HandgunMagazine", - props(name = r#"Handgun Magazine"#, desc = r#""#, value = "1254383185") - )] - HandgunMagazine = 1254383185i32, - #[strum( - serialize = "ItemScanner", - props( - name = r#"Handheld Scanner"#, - desc = r#"A mysterious piece of technology, rumored to have Zrillian origins."#, - value = "1661270830" - ) - )] - ItemScanner = 1661270830i32, - #[strum( - serialize = "ItemTablet", - props( - name = r#"Handheld Tablet"#, - desc = r#"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."#, - value = "-229808600" - ) - )] - ItemTablet = -229808600i32, - #[strum( - serialize = "ItemHardMiningBackPack", - props(name = r#"Hard Mining Backpack"#, desc = r#""#, value = "900366130") - )] - ItemHardMiningBackPack = 900366130i32, - #[strum( - serialize = "ItemHardSuit", - props( - name = r#"Hardsuit"#, - desc = r#"Connects to Logic Transmitter"#, - value = "-1758310454" - ) - )] - ItemHardSuit = -1758310454i32, - #[strum( - serialize = "ItemHardBackpack", - props( - name = r#"Hardsuit Backpack"#, - desc = r#"This backpack can be useful when you are working inside and don't need to fly around."#, - value = "374891127" - ) - )] - ItemHardBackpack = 374891127i32, - #[strum( - serialize = "ItemHardsuitHelmet", - props( - name = r#"Hardsuit Helmet"#, - desc = r#"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 = "ItemHardJetpack", - props( - name = r#"Hardsuit Jetpack"#, - desc = r#"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. -The 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. -USE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move."#, - value = "-412551656" - ) - )] - ItemHardJetpack = -412551656i32, - #[strum( - serialize = "StructureHarvie", - props( - name = r#"Harvie"#, - desc = r#"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 = "CircuitboardHashDisplay", - props(name = r#"Hash Display"#, desc = r#""#, value = "1633074601") - )] - CircuitboardHashDisplay = 1633074601i32, - #[strum( - serialize = "ItemHat", - props( - name = r#"Hat"#, - desc = r#"As the name suggests, this is a hat."#, - value = "299189339" - ) - )] - ItemHat = 299189339i32, - #[strum( - serialize = "ItemCropHay", - props(name = r#"Hay"#, desc = r#""#, value = "215486157") - )] - ItemCropHay = 215486157i32, - #[strum( - serialize = "ItemWearLamp", - props(name = r#"Headlamp"#, desc = r#""#, value = "-598730959") - )] - ItemWearLamp = -598730959i32, - #[strum( - serialize = "StructureHeatExchangerGastoGas", - props( - name = r#"Heat Exchanger - Gas"#, - desc = r#"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. -The '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. -As 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 = "StructureHeatExchangerLiquidtoLiquid", - props( - name = r#"Heat Exchanger - Liquid"#, - desc = r#"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. -The '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. -As 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. -"#, - value = "-613784254" - ) - )] - StructureHeatExchangerLiquidtoLiquid = -613784254i32, - #[strum( - serialize = "StructureHeatExchangeLiquidtoGas", - props( - name = r#"Heat Exchanger - Liquid + Gas"#, - desc = r#"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. -The '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. -As 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 = "StructureCableCornerH3", - props( - name = r#"Heavy Cable (3-Way Corner)"#, - desc = r#""#, - value = "-1843379322" - ) - )] - StructureCableCornerH3 = -1843379322i32, - #[strum( - serialize = "StructureCableJunctionH", - props( - name = r#"Heavy Cable (3-Way Junction)"#, - desc = r#""#, - value = "469451637" - ) - )] - StructureCableJunctionH = 469451637i32, - #[strum( - serialize = "StructureCableCornerH4", - props( - name = r#"Heavy Cable (4-Way Corner)"#, - desc = r#""#, - value = "205837861" - ) - )] - StructureCableCornerH4 = 205837861i32, - #[strum( - serialize = "StructureCableJunctionH4", - props( - name = r#"Heavy Cable (4-Way Junction)"#, - desc = r#""#, - value = "-742234680" - ) - )] - StructureCableJunctionH4 = -742234680i32, - #[strum( - serialize = "StructureCableJunctionH5", - props( - name = r#"Heavy Cable (5-Way Junction)"#, - desc = r#""#, - value = "-1530571426" - ) - )] - StructureCableJunctionH5 = -1530571426i32, - #[strum( - serialize = "StructureCableJunctionH6", - props( - name = r#"Heavy Cable (6-Way Junction)"#, - desc = r#""#, - value = "1036780772" - ) - )] - StructureCableJunctionH6 = 1036780772i32, - #[strum( - serialize = "StructureCableCornerH", - props(name = r#"Heavy Cable (Corner)"#, desc = r#""#, value = "-39359015") - )] - StructureCableCornerH = -39359015i32, - #[strum( - serialize = "StructureCableStraightH", - props(name = r#"Heavy Cable (Straight)"#, desc = r#""#, value = "-146200530") - )] - StructureCableStraightH = -146200530i32, - #[strum( - serialize = "ItemGasFilterCarbonDioxideL", - props( - name = r#"Heavy Filter (Carbon Dioxide)"#, - desc = r#""#, - value = "1876847024" - ) - )] - ItemGasFilterCarbonDioxideL = 1876847024i32, - #[strum( - serialize = "ItemGasFilterNitrogenL", - props( - name = r#"Heavy Filter (Nitrogen)"#, - desc = r#""#, - value = "-1387439451" - ) - )] - ItemGasFilterNitrogenL = -1387439451i32, - #[strum( - serialize = "ItemGasFilterNitrousOxideL", - props( - name = r#"Heavy Filter (Nitrous Oxide)"#, - desc = r#""#, - value = "465267979" - ) - )] - ItemGasFilterNitrousOxideL = 465267979i32, - #[strum( - serialize = "ItemGasFilterOxygenL", - props(name = r#"Heavy Filter (Oxygen)"#, desc = r#""#, value = "-1217998945") - )] - ItemGasFilterOxygenL = -1217998945i32, - #[strum( - serialize = "ItemGasFilterPollutantsL", - props( - name = r#"Heavy Filter (Pollutants)"#, - desc = r#""#, - value = "1959564765" - ) - )] - ItemGasFilterPollutantsL = 1959564765i32, - #[strum( - serialize = "ItemGasFilterVolatilesL", - props( - name = r#"Heavy Filter (Volatiles)"#, - desc = r#""#, - value = "1255156286" - ) - )] - ItemGasFilterVolatilesL = 1255156286i32, - #[strum( - serialize = "ItemGasFilterWaterL", - props(name = r#"Heavy Filter (Water)"#, desc = r#""#, value = "2004969680") - )] - ItemGasFilterWaterL = 2004969680i32, - #[strum( - serialize = "ItemHighVolumeGasCanisterEmpty", - props( - name = r#"High Volume Gas Canister"#, - desc = r#""#, - value = "998653377" - ) - )] - ItemHighVolumeGasCanisterEmpty = 998653377i32, - #[strum( - serialize = "ItemHorticultureBelt", - props(name = r#"Horticulture Belt"#, desc = r#""#, value = "-1117581553") - )] - ItemHorticultureBelt = -1117581553i32, - #[strum( - serialize = "HumanSkull", - props(name = r#"Human Skull"#, desc = r#""#, value = "-857713709") - )] - HumanSkull = -857713709i32, - #[strum( - serialize = "StructureHydraulicPipeBender", - props( - name = r#"Hydraulic Pipe Bender"#, - desc = r#"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 = "StructureHydroponicsTrayData", - props( - name = r#"Hydroponics Device"#, - desc = r#"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. -It 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 = "StructureHydroponicsStation", - props(name = r#"Hydroponics Station"#, desc = r#""#, value = "1441767298") - )] - StructureHydroponicsStation = 1441767298i32, - #[strum( - serialize = "StructureHydroponicsTray", - props( - name = r#"Hydroponics Tray"#, - desc = r#"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. -It can be automated using the Harvie."#, - value = "1464854517" - ) - )] - StructureHydroponicsTray = 1464854517i32, - #[strum( - serialize = "MotherboardProgrammableChip", - props( - name = r#"IC Editor Motherboard"#, - desc = r#"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."#, - value = "-161107071" - ) - )] - MotherboardProgrammableChip = -161107071i32, - #[strum( - serialize = "StructureCircuitHousing", - props(name = r#"IC Housing"#, desc = r#""#, value = "-128473777") - )] - StructureCircuitHousing = -128473777i32, - #[strum( - serialize = "ItemNitrice", - props( - name = r#"Ice (Nitrice)"#, - desc = r#"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. - -Highly 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 = "ItemOxite", - props( - name = r#"Ice (Oxite)"#, - desc = r#"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. - -Highly 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 = "ItemVolatiles", - props( - name = r#"Ice (Volatiles)"#, - desc = r#"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. - -Volatiles 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 - 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. -"#, - value = "1253102035" - ) - )] - ItemVolatiles = 1253102035i32, - #[strum( - serialize = "ItemIce", - props( - name = r#"Ice (Water)"#, - desc = r#"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 = "StructureIceCrusher", - props( - name = r#"Ice Crusher"#, - desc = r#"The Recurso KoolAuger converts various ices into their respective gases and liquids. -A 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. -If 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 = "StructureIgniter", - props( - name = r#"Igniter"#, - desc = r#"It gets the party started. Especially if that party is an explosive gas mixture."#, - value = "1005491513" - ) - )] - StructureIgniter = 1005491513i32, - #[strum( - serialize = "StructureEmergencyButton", - props( - name = r#"Important Button"#, - desc = r#"Description coming."#, - value = "1668452680" - ) - )] - StructureEmergencyButton = 1668452680i32, - #[strum( - serialize = "StructureInLineTankGas1x2", - props( - name = r#"In-Line Tank Gas"#, - desc = r#"A small expansion tank that increases the volume of a pipe network."#, - value = "35149429" - ) - )] - StructureInLineTankGas1X2 = 35149429i32, - #[strum( - serialize = "StructureInLineTankLiquid1x2", - props( - name = r#"In-Line Tank Liquid"#, - desc = r#"A small expansion tank that increases the volume of a pipe network."#, - value = "-1183969663" - ) - )] - StructureInLineTankLiquid1X2 = -1183969663i32, - #[strum( - serialize = "StructureInLineTankGas1x1", - props( - name = r#"In-Line Tank Small Gas"#, - desc = r#"A small expansion tank that increases the volume of a pipe network."#, - value = "-1693382705" - ) - )] - StructureInLineTankGas1X1 = -1693382705i32, - #[strum( - serialize = "StructureInLineTankLiquid1x1", - props( - name = r#"In-Line Tank Small Liquid"#, - desc = r#"A small expansion tank that increases the volume of a pipe network."#, - value = "543645499" - ) - )] - StructureInLineTankLiquid1X1 = 543645499i32, - #[strum( - serialize = "ItemAstroloyIngot", - props( - name = r#"Ingot (Astroloy)"#, - desc = r#"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 = "ItemConstantanIngot", - props(name = r#"Ingot (Constantan)"#, desc = r#""#, value = "1058547521") - )] - ItemConstantanIngot = 1058547521i32, - #[strum( - serialize = "ItemCopperIngot", - props( - name = r#"Ingot (Copper)"#, - desc = r#"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 = "ItemElectrumIngot", - props(name = r#"Ingot (Electrum)"#, desc = r#""#, value = "502280180") - )] - ItemElectrumIngot = 502280180i32, - #[strum( - serialize = "ItemGoldIngot", - props( - name = r#"Ingot (Gold)"#, - desc = r#"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 = "ItemHastelloyIngot", - props(name = r#"Ingot (Hastelloy)"#, desc = r#""#, value = "1579842814") - )] - ItemHastelloyIngot = 1579842814i32, - #[strum( - serialize = "ItemInconelIngot", - props(name = r#"Ingot (Inconel)"#, desc = r#""#, value = "-787796599") - )] - ItemInconelIngot = -787796599i32, - #[strum( - serialize = "ItemInvarIngot", - props(name = r#"Ingot (Invar)"#, desc = r#""#, value = "-297990285") - )] - ItemInvarIngot = -297990285i32, - #[strum( - serialize = "ItemIronIngot", - props( - name = r#"Ingot (Iron)"#, - desc = r#"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 = "ItemLeadIngot", - props(name = r#"Ingot (Lead)"#, desc = r#""#, value = "2134647745") - )] - ItemLeadIngot = 2134647745i32, - #[strum( - serialize = "ItemNickelIngot", - props(name = r#"Ingot (Nickel)"#, desc = r#""#, value = "-1406385572") - )] - ItemNickelIngot = -1406385572i32, - #[strum( - serialize = "ItemSiliconIngot", - props(name = r#"Ingot (Silicon)"#, desc = r#""#, value = "-290196476") - )] - ItemSiliconIngot = -290196476i32, - #[strum( - serialize = "ItemSilverIngot", - props(name = r#"Ingot (Silver)"#, desc = r#""#, value = "-929742000") - )] - ItemSilverIngot = -929742000i32, - #[strum( - serialize = "ItemSolderIngot", - props(name = r#"Ingot (Solder)"#, desc = r#""#, value = "-82508479") - )] - ItemSolderIngot = -82508479i32, - #[strum( - serialize = "ItemSteelIngot", - props( - name = r#"Ingot (Steel)"#, - desc = r#"Steel ingots are a metal alloy, crafted in a Furnace by smelting Ore (Iron) and Ore (Coal) at a ratio of 3:1. -It 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 = "ItemStelliteIngot", - props(name = r#"Ingot (Stellite)"#, desc = r#""#, value = "-1897868623") - )] - ItemStelliteIngot = -1897868623i32, - #[strum( - serialize = "ItemWaspaloyIngot", - props(name = r#"Ingot (Waspaloy)"#, desc = r#""#, value = "156348098") - )] - ItemWaspaloyIngot = 156348098i32, - #[strum( - serialize = "StructureInsulatedInLineTankGas1x2", - props( - name = r#"Insulated In-Line Tank Gas"#, - desc = r#""#, - value = "-177610944" - ) - )] - StructureInsulatedInLineTankGas1X2 = -177610944i32, - #[strum( - serialize = "StructureInsulatedInLineTankLiquid1x2", - props( - name = r#"Insulated In-Line Tank Liquid"#, - desc = r#""#, - value = "1452100517" - ) - )] - StructureInsulatedInLineTankLiquid1X2 = 1452100517i32, - #[strum( - serialize = "StructureInsulatedInLineTankGas1x1", - props( - name = r#"Insulated In-Line Tank Small Gas"#, - desc = r#""#, - value = "1818267386" - ) - )] - StructureInsulatedInLineTankGas1X1 = 1818267386i32, - #[strum( - serialize = "StructureInsulatedInLineTankLiquid1x1", - props( - name = r#"Insulated In-Line Tank Small Liquid"#, - desc = r#""#, - value = "-813426145" - ) - )] - StructureInsulatedInLineTankLiquid1X1 = -813426145i32, - #[strum( - serialize = "StructureInsulatedPipeLiquidCrossJunction", - props( - name = r#"Insulated Liquid Pipe (3-Way Junction)"#, - desc = r#"Liquid piping with very low temperature loss or gain."#, - value = "1926651727" - ) - )] - StructureInsulatedPipeLiquidCrossJunction = 1926651727i32, - #[strum( - serialize = "StructureInsulatedPipeLiquidCrossJunction4", - props( - name = r#"Insulated Liquid Pipe (4-Way Junction)"#, - desc = r#"Liquid piping with very low temperature loss or gain."#, - value = "363303270" - ) - )] - StructureInsulatedPipeLiquidCrossJunction4 = 363303270i32, - #[strum( - serialize = "StructureInsulatedPipeLiquidCrossJunction5", - props( - name = r#"Insulated Liquid Pipe (5-Way Junction)"#, - desc = r#"Liquid piping with very low temperature loss or gain."#, - value = "1654694384" - ) - )] - StructureInsulatedPipeLiquidCrossJunction5 = 1654694384i32, - #[strum( - serialize = "StructureInsulatedPipeLiquidCrossJunction6", - props( - name = r#"Insulated Liquid Pipe (6-Way Junction)"#, - desc = r#"Liquid piping with very low temperature loss or gain."#, - value = "-72748982" - ) - )] - StructureInsulatedPipeLiquidCrossJunction6 = -72748982i32, - #[strum( - serialize = "StructureInsulatedPipeLiquidCorner", - props( - name = r#"Insulated Liquid Pipe (Corner)"#, - desc = r#"Liquid piping with very low temperature loss or gain."#, - value = "1713710802" - ) - )] - StructureInsulatedPipeLiquidCorner = 1713710802i32, - #[strum( - serialize = "StructurePipeInsulatedLiquidCrossJunction", - props( - name = r#"Insulated Liquid Pipe (Cross Junction)"#, - desc = r#"Liquid piping with very low temperature loss or gain."#, - value = "-2068497073" - ) - )] - StructurePipeInsulatedLiquidCrossJunction = -2068497073i32, - #[strum( - serialize = "StructureInsulatedPipeLiquidStraight", - props( - name = r#"Insulated Liquid Pipe (Straight)"#, - desc = r#"Liquid piping with very low temperature loss or gain."#, - value = "295678685" - ) - )] - StructureInsulatedPipeLiquidStraight = 295678685i32, - #[strum( - serialize = "StructureInsulatedPipeLiquidTJunction", - props( - name = r#"Insulated Liquid Pipe (T Junction)"#, - desc = r#"Liquid piping with very low temperature loss or gain."#, - value = "-532384855" - ) - )] - StructureInsulatedPipeLiquidTJunction = -532384855i32, - #[strum( - serialize = "StructureLiquidTankBigInsulated", - props( - name = r#"Insulated Liquid Tank Big"#, - desc = r#""#, - value = "-1430440215" - ) - )] - StructureLiquidTankBigInsulated = -1430440215i32, - #[strum( - serialize = "StructureLiquidTankSmallInsulated", - props( - name = r#"Insulated Liquid Tank Small"#, - desc = r#""#, - value = "608607718" - ) - )] - StructureLiquidTankSmallInsulated = 608607718i32, - #[strum( - serialize = "StructurePassiveVentInsulated", - props(name = r#"Insulated Passive Vent"#, desc = r#""#, value = "1363077139") - )] - StructurePassiveVentInsulated = 1363077139i32, - #[strum( - serialize = "StructureInsulatedPipeCrossJunction3", - props( - name = r#"Insulated Pipe (3-Way Junction)"#, - desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, - value = "1328210035" - ) - )] - StructureInsulatedPipeCrossJunction3 = 1328210035i32, - #[strum( - serialize = "StructureInsulatedPipeCrossJunction4", - props( - name = r#"Insulated Pipe (4-Way Junction)"#, - desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, - value = "-783387184" - ) - )] - StructureInsulatedPipeCrossJunction4 = -783387184i32, - #[strum( - serialize = "StructureInsulatedPipeCrossJunction5", - props( - name = r#"Insulated Pipe (5-Way Junction)"#, - desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, - value = "-1505147578" - ) - )] - StructureInsulatedPipeCrossJunction5 = -1505147578i32, - #[strum( - serialize = "StructureInsulatedPipeCrossJunction6", - props( - name = r#"Insulated Pipe (6-Way Junction)"#, - desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, - value = "1061164284" - ) - )] - StructureInsulatedPipeCrossJunction6 = 1061164284i32, - #[strum( - serialize = "StructureInsulatedPipeCorner", - props( - name = r#"Insulated Pipe (Corner)"#, - desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, - value = "-1967711059" - ) - )] - StructureInsulatedPipeCorner = -1967711059i32, - #[strum( - serialize = "StructureInsulatedPipeCrossJunction", - props( - name = r#"Insulated Pipe (Cross Junction)"#, - desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, - value = "-92778058" - ) - )] - StructureInsulatedPipeCrossJunction = -92778058i32, - #[strum( - serialize = "StructureInsulatedPipeStraight", - props( - name = r#"Insulated Pipe (Straight)"#, - desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, - value = "2134172356" - ) - )] - StructureInsulatedPipeStraight = 2134172356i32, - #[strum( - serialize = "StructureInsulatedPipeTJunction", - props( - name = r#"Insulated Pipe (T Junction)"#, - desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, - value = "-2076086215" - ) - )] - StructureInsulatedPipeTJunction = -2076086215i32, - #[strum( - serialize = "StructureInsulatedTankConnector", - props( - name = r#"Insulated Tank Connector"#, - desc = r#""#, - value = "-31273349" - ) - )] - StructureInsulatedTankConnector = -31273349i32, - #[strum( - serialize = "StructureInsulatedTankConnectorLiquid", - props( - name = r#"Insulated Tank Connector Liquid"#, - desc = r#""#, - value = "-1602030414" - ) - )] - StructureInsulatedTankConnectorLiquid = -1602030414i32, - #[strum( - serialize = "ItemInsulation", - props( - name = r#"Insulation"#, - desc = r#"Mysterious in the extreme, the function of this item is lost to the ages."#, - value = "897176943" - ) - )] - ItemInsulation = 897176943i32, - #[strum( - serialize = "ItemIntegratedCircuit10", - props( - name = r#"Integrated Circuit (IC10)"#, - desc = r#""#, - value = "-744098481" - ) - )] - ItemIntegratedCircuit10 = -744098481i32, - #[strum( - serialize = "StructureInteriorDoorGlass", - props( - name = r#"Interior Door Glass"#, - desc = r#"0.Operate -1.Logic"#, - value = "-2096421875" - ) - )] - StructureInteriorDoorGlass = -2096421875i32, - #[strum( - serialize = "StructureInteriorDoorPadded", - props( - name = r#"Interior Door Padded"#, - desc = r#"0.Operate -1.Logic"#, - value = "847461335" - ) - )] - StructureInteriorDoorPadded = 847461335i32, - #[strum( - serialize = "StructureInteriorDoorPaddedThin", - props( - name = r#"Interior Door Padded Thin"#, - desc = r#"0.Operate -1.Logic"#, - value = "1981698201" - ) - )] - StructureInteriorDoorPaddedThin = 1981698201i32, - #[strum( - serialize = "StructureInteriorDoorTriangle", - props( - name = r#"Interior Door Triangle"#, - desc = r#"0.Operate -1.Logic"#, - value = "-1182923101" - ) - )] - StructureInteriorDoorTriangle = -1182923101i32, - #[strum( - serialize = "StructureFrameIron", - props(name = r#"Iron Frame"#, desc = r#""#, value = "-1240951678") - )] - StructureFrameIron = -1240951678i32, - #[strum( - serialize = "ItemIronFrames", - props(name = r#"Iron Frames"#, desc = r#""#, value = "1225836666") - )] - ItemIronFrames = 1225836666i32, - #[strum( - serialize = "ItemIronSheets", - props(name = r#"Iron Sheets"#, desc = r#""#, value = "-487378546") - )] - ItemIronSheets = -487378546i32, - #[strum( - serialize = "StructureWallIron", - props(name = r#"Iron Wall (Type 1)"#, desc = r#""#, value = "1287324802") - )] - StructureWallIron = 1287324802i32, - #[strum( - serialize = "StructureWallIron02", - props(name = r#"Iron Wall (Type 2)"#, desc = r#""#, value = "1485834215") - )] - StructureWallIron02 = 1485834215i32, - #[strum( - serialize = "StructureWallIron03", - props(name = r#"Iron Wall (Type 3)"#, desc = r#""#, value = "798439281") - )] - StructureWallIron03 = 798439281i32, - #[strum( - serialize = "StructureWallIron04", - props(name = r#"Iron Wall (Type 4)"#, desc = r#""#, value = "-1309433134") - )] - StructureWallIron04 = -1309433134i32, - #[strum( - serialize = "StructureCompositeWindowIron", - props(name = r#"Iron Window"#, desc = r#""#, value = "-688284639") - )] - StructureCompositeWindowIron = -688284639i32, - #[strum( - serialize = "ItemJetpackBasic", - props( - name = r#"Jetpack Basic"#, - desc = r#"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. -Indispensable 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. -USE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move."#, - value = "1969189000" - ) - )] - ItemJetpackBasic = 1969189000i32, - #[strum( - serialize = "UniformOrangeJumpSuit", - props(name = r#"Jump Suit (Orange)"#, desc = r#""#, value = "810053150") - )] - UniformOrangeJumpSuit = 810053150i32, - #[strum( - serialize = "ItemKitAIMeE", - props(name = r#"Kit (AIMeE)"#, desc = r#""#, value = "496830914") - )] - ItemKitAiMeE = 496830914i32, - #[strum( - serialize = "ItemKitAccessBridge", - props(name = r#"Kit (Access Bridge)"#, desc = r#""#, value = "513258369") - )] - ItemKitAccessBridge = 513258369i32, - #[strum( - serialize = "ItemActiveVent", - props( - name = r#"Kit (Active Vent)"#, - desc = r#"When constructed, this kit places an Active Vent on any support structure."#, - value = "-842048328" - ) - )] - ItemActiveVent = -842048328i32, - #[strum( - serialize = "ItemKitAdvancedComposter", - props( - name = r#"Kit (Advanced Composter)"#, - desc = r#""#, - value = "-1431998347" - ) - )] - ItemKitAdvancedComposter = -1431998347i32, - #[strum( - serialize = "ItemKitAdvancedFurnace", - props(name = r#"Kit (Advanced Furnace)"#, desc = r#""#, value = "-616758353") - )] - ItemKitAdvancedFurnace = -616758353i32, - #[strum( - serialize = "ItemKitAdvancedPackagingMachine", - props( - name = r#"Kit (Advanced Packaging Machine)"#, - desc = r#""#, - value = "-598545233" - ) - )] - ItemKitAdvancedPackagingMachine = -598545233i32, - #[strum( - serialize = "ItemKitAirlock", - props(name = r#"Kit (Airlock)"#, desc = r#""#, value = "964043875") - )] - ItemKitAirlock = 964043875i32, - #[strum( - serialize = "ItemKitArcFurnace", - props(name = r#"Kit (Arc Furnace)"#, desc = r#""#, value = "-98995857") - )] - ItemKitArcFurnace = -98995857i32, - #[strum( - serialize = "ItemKitWallArch", - props(name = r#"Kit (Arched Wall)"#, desc = r#""#, value = "1625214531") - )] - ItemKitWallArch = 1625214531i32, - #[strum( - serialize = "ItemKitAtmospherics", - props(name = r#"Kit (Atmospherics)"#, desc = r#""#, value = "1222286371") - )] - ItemKitAtmospherics = 1222286371i32, - #[strum( - serialize = "ItemKitAutolathe", - props(name = r#"Kit (Autolathe)"#, desc = r#""#, value = "-1753893214") - )] - ItemKitAutolathe = -1753893214i32, - #[strum( - serialize = "ItemKitHydroponicAutomated", - props( - name = r#"Kit (Automated Hydroponics)"#, - desc = r#""#, - value = "-927931558" - ) - )] - ItemKitHydroponicAutomated = -927931558i32, - #[strum( - serialize = "ItemKitAutomatedOven", - props(name = r#"Kit (Automated Oven)"#, desc = r#""#, value = "-1931958659") - )] - ItemKitAutomatedOven = -1931958659i32, - #[strum( - serialize = "ItemKitAutoMinerSmall", - props(name = r#"Kit (Autominer Small)"#, desc = r#""#, value = "1668815415") - )] - ItemKitAutoMinerSmall = 1668815415i32, - #[strum( - serialize = "ItemKitRocketAvionics", - props(name = r#"Kit (Avionics)"#, desc = r#""#, value = "1396305045") - )] - ItemKitRocketAvionics = 1396305045i32, - #[strum( - serialize = "ItemKitChute", - props(name = r#"Kit (Basic Chutes)"#, desc = r#""#, value = "1025254665") - )] - ItemKitChute = 1025254665i32, - #[strum( - serialize = "ItemKitBasket", - props(name = r#"Kit (Basket)"#, desc = r#""#, value = "148305004") - )] - ItemKitBasket = 148305004i32, - #[strum( - serialize = "ItemBatteryCharger", - props( - name = r#"Kit (Battery Charger)"#, - desc = r#"This kit produces a 5-slot Kit (Battery Charger)."#, - value = "-1866880307" - ) - )] - ItemBatteryCharger = -1866880307i32, - #[strum( - serialize = "ItemKitBatteryLarge", - props(name = r#"Kit (Battery Large)"#, desc = r#""#, value = "-21225041") - )] - ItemKitBatteryLarge = -21225041i32, - #[strum( - serialize = "ItemKitBattery", - props(name = r#"Kit (Battery)"#, desc = r#""#, value = "1406656973") - )] - ItemKitBattery = 1406656973i32, - #[strum( - serialize = "ItemKitBeacon", - props(name = r#"Kit (Beacon)"#, desc = r#""#, value = "249073136") - )] - ItemKitBeacon = 249073136i32, - #[strum( - serialize = "ItemKitBeds", - props(name = r#"Kit (Beds)"#, desc = r#""#, value = "-1241256797") - )] - ItemKitBeds = -1241256797i32, - #[strum( - serialize = "ItemKitBlastDoor", - props(name = r#"Kit (Blast Door)"#, desc = r#""#, value = "-1755116240") - )] - ItemKitBlastDoor = -1755116240i32, - #[strum( - serialize = "ItemCableAnalyser", - props(name = r#"Kit (Cable Analyzer)"#, desc = r#""#, value = "-1792787349") - )] - ItemCableAnalyser = -1792787349i32, - #[strum( - serialize = "ItemCableFuse", - props(name = r#"Kit (Cable Fuses)"#, desc = r#""#, value = "195442047") - )] - ItemCableFuse = 195442047i32, - #[strum( - serialize = "ItemGasTankStorage", - props( - name = r#"Kit (Canister Storage)"#, - desc = r#"This kit produces a Kit (Canister Storage) for refilling a Canister."#, - value = "-2113012215" - ) - )] - ItemGasTankStorage = -2113012215i32, - #[strum( - serialize = "ItemKitCentrifuge", - props(name = r#"Kit (Centrifuge)"#, desc = r#""#, value = "578182956") - )] - ItemKitCentrifuge = 578182956i32, - #[strum( - serialize = "ItemKitChairs", - props(name = r#"Kit (Chairs)"#, desc = r#""#, value = "-1394008073") - )] - ItemKitChairs = -1394008073i32, - #[strum( - serialize = "ItemKitChuteUmbilical", - props(name = r#"Kit (Chute Umbilical)"#, desc = r#""#, value = "-876560854") - )] - ItemKitChuteUmbilical = -876560854i32, - #[strum( - serialize = "ItemKitCompositeCladding", - props(name = r#"Kit (Cladding)"#, desc = r#""#, value = "-1470820996") + serialize = "ItemCoffeeMug", + props(name = r#"Coffee Mug"#, desc = r#""#, value = "1800622698") )] - ItemKitCompositeCladding = -1470820996i32, + ItemCoffeeMug = 1800622698i32, #[strum( - serialize = "KitStructureCombustionCentrifuge", - props( - name = r#"Kit (Combustion Centrifuge)"#, - desc = r#""#, - value = "231903234" - ) - )] - KitStructureCombustionCentrifuge = 231903234i32, - #[strum( - serialize = "ItemKitComputer", - props(name = r#"Kit (Computer)"#, desc = r#""#, value = "1990225489") - )] - ItemKitComputer = 1990225489i32, - #[strum( - serialize = "ItemKitConsole", - props(name = r#"Kit (Consoles)"#, desc = r#""#, value = "-1241851179") - )] - ItemKitConsole = -1241851179i32, - #[strum( - serialize = "ItemKitCrateMount", - props(name = r#"Kit (Container Mount)"#, desc = r#""#, value = "-551612946") - )] - ItemKitCrateMount = -551612946i32, - #[strum( - serialize = "ItemKitPassthroughHeatExchanger", - props( - name = r#"Kit (CounterFlow Heat Exchanger)"#, - desc = r#""#, - value = "636112787" - ) - )] - ItemKitPassthroughHeatExchanger = 636112787i32, - #[strum( - serialize = "ItemKitCrateMkII", - props(name = r#"Kit (Crate Mk II)"#, desc = r#""#, value = "-1585956426") - )] - ItemKitCrateMkIi = -1585956426i32, - #[strum( - serialize = "ItemKitCrate", - props(name = r#"Kit (Crate)"#, desc = r#""#, value = "429365598") - )] - ItemKitCrate = 429365598i32, - #[strum( - serialize = "ItemRTG", - props( - name = r#"Kit (Creative RTG)"#, - desc = r#"This kit creates that miracle of modern science, a Kit (Creative RTG)."#, - value = "495305053" - ) - )] - ItemRtg = 495305053i32, - #[strum( - serialize = "ItemKitCryoTube", - props(name = r#"Kit (Cryo Tube)"#, desc = r#""#, value = "-545234195") - )] - ItemKitCryoTube = -545234195i32, - #[strum( - serialize = "ItemKitDeepMiner", - props(name = r#"Kit (Deep Miner)"#, desc = r#""#, value = "-1935075707") - )] - ItemKitDeepMiner = -1935075707i32, - #[strum( - serialize = "ItemPipeDigitalValve", - props( - name = r#"Kit (Digital Valve)"#, - desc = r#"This kit creates a Digital Valve."#, - value = "-1532448832" - ) - )] - ItemPipeDigitalValve = -1532448832i32, - #[strum( - serialize = "ItemKitDockingPort", - props(name = r#"Kit (Docking Port)"#, desc = r#""#, value = "77421200") - )] - ItemKitDockingPort = 77421200i32, - #[strum( - serialize = "ItemKitDoor", - props(name = r#"Kit (Door)"#, desc = r#""#, value = "168615924") - )] - ItemKitDoor = 168615924i32, - #[strum( - serialize = "ItemKitDrinkingFountain", - props( - name = r#"Kit (Drinking Fountain)"#, - desc = r#""#, - value = "-1743663875" - ) - )] - ItemKitDrinkingFountain = -1743663875i32, - #[strum( - serialize = "ItemKitElectronicsPrinter", - props( - name = r#"Kit (Electronics Printer)"#, - desc = r#""#, - value = "-1181922382" - ) - )] - ItemKitElectronicsPrinter = -1181922382i32, - #[strum( - serialize = "ItemKitElevator", - props(name = r#"Kit (Elevator)"#, desc = r#""#, value = "-945806652") - )] - ItemKitElevator = -945806652i32, - #[strum( - serialize = "ItemKitEngineLarge", - props(name = r#"Kit (Engine Large)"#, desc = r#""#, value = "755302726") - )] - ItemKitEngineLarge = 755302726i32, - #[strum( - serialize = "ItemKitEngineMedium", - props(name = r#"Kit (Engine Medium)"#, desc = r#""#, value = "1969312177") - )] - ItemKitEngineMedium = 1969312177i32, - #[strum( - serialize = "ItemKitEngineSmall", - props(name = r#"Kit (Engine Small)"#, desc = r#""#, value = "19645163") - )] - ItemKitEngineSmall = 19645163i32, - #[strum( - serialize = "ItemFlashingLight", - props(name = r#"Kit (Flashing Light)"#, desc = r#""#, value = "-2107840748") - )] - ItemFlashingLight = -2107840748i32, - #[strum( - serialize = "ItemKitWallFlat", - props(name = r#"Kit (Flat Wall)"#, desc = r#""#, value = "-846838195") - )] - ItemKitWallFlat = -846838195i32, - #[strum( - serialize = "ItemKitCompositeFloorGrating", - props(name = r#"Kit (Floor Grating)"#, desc = r#""#, value = "1182412869") - )] - ItemKitCompositeFloorGrating = 1182412869i32, - #[strum( - serialize = "ItemKitFridgeBig", - props(name = r#"Kit (Fridge Large)"#, desc = r#""#, value = "-1168199498") - )] - ItemKitFridgeBig = -1168199498i32, - #[strum( - serialize = "ItemKitFridgeSmall", - props(name = r#"Kit (Fridge Small)"#, desc = r#""#, value = "1661226524") - )] - ItemKitFridgeSmall = 1661226524i32, - #[strum( - serialize = "ItemKitFurnace", - props(name = r#"Kit (Furnace)"#, desc = r#""#, value = "-806743925") - )] - ItemKitFurnace = -806743925i32, - #[strum( - serialize = "ItemKitFurniture", - props(name = r#"Kit (Furniture)"#, desc = r#""#, value = "1162905029") - )] - ItemKitFurniture = 1162905029i32, - #[strum( - serialize = "ItemKitFuselage", - props(name = r#"Kit (Fuselage)"#, desc = r#""#, value = "-366262681") + serialize = "StructureAngledBench", + props(name = r#"Bench (Angled)"#, desc = r#""#, value = "1811979158") )] - ItemKitFuselage = -366262681i32, + StructureAngledBench = 1811979158i32, #[strum( - serialize = "ItemKitGasGenerator", + serialize = "StructurePassiveLiquidDrain", props( - name = r#"Kit (Gas Fuel Generator)"#, - desc = r#""#, - value = "377745425" + name = r#"Passive Liquid Drain"#, + desc = r#"Moves liquids from a pipe network to the world atmosphere."#, + value = "1812364811" ) )] - ItemKitGasGenerator = 377745425i32, - #[strum( - serialize = "ItemPipeGasMixer", - props( - name = r#"Kit (Gas Mixer)"#, - desc = r#"This kit creates a Gas Mixer."#, - value = "-1134459463" - ) - )] - ItemPipeGasMixer = -1134459463i32, - #[strum( - serialize = "ItemGasSensor", - props(name = r#"Kit (Gas Sensor)"#, desc = r#""#, value = "1717593480") - )] - ItemGasSensor = 1717593480i32, - #[strum( - serialize = "ItemKitGasUmbilical", - props(name = r#"Kit (Gas Umbilical)"#, desc = r#""#, value = "-1867280568") - )] - ItemKitGasUmbilical = -1867280568i32, - #[strum( - serialize = "ItemKitWallGeometry", - props(name = r#"Kit (Geometric Wall)"#, desc = r#""#, value = "-784733231") - )] - ItemKitWallGeometry = -784733231i32, - #[strum( - serialize = "ItemKitGrowLight", - props(name = r#"Kit (Grow Light)"#, desc = r#""#, value = "341030083") - )] - ItemKitGrowLight = 341030083i32, - #[strum( - serialize = "ItemKitAirlockGate", - props(name = r#"Kit (Hangar Door)"#, desc = r#""#, value = "682546947") - )] - ItemKitAirlockGate = 682546947i32, - #[strum( - serialize = "ItemKitHarvie", - props(name = r#"Kit (Harvie)"#, desc = r#""#, value = "-1022693454") - )] - ItemKitHarvie = -1022693454i32, - #[strum( - serialize = "ItemKitHydraulicPipeBender", - props( - name = r#"Kit (Hydraulic Pipe Bender)"#, - desc = r#""#, - value = "-2098556089" - ) - )] - ItemKitHydraulicPipeBender = -2098556089i32, - #[strum( - serialize = "ItemKitHydroponicStation", - props( - name = r#"Kit (Hydroponic Station)"#, - desc = r#""#, - value = "2057179799" - ) - )] - ItemKitHydroponicStation = 2057179799i32, - #[strum( - serialize = "ItemHydroponicTray", - props( - name = r#"Kit (Hydroponic Tray)"#, - desc = r#"This kits creates a Hydroponics Tray for growing various plants."#, - value = "-1193543727" - ) - )] - ItemHydroponicTray = -1193543727i32, - #[strum( - serialize = "ItemKitLogicCircuit", - props(name = r#"Kit (IC Housing)"#, desc = r#""#, value = "1512322581") - )] - ItemKitLogicCircuit = 1512322581i32, - #[strum( - serialize = "ItemKitIceCrusher", - props(name = r#"Kit (Ice Crusher)"#, desc = r#""#, value = "288111533") - )] - ItemKitIceCrusher = 288111533i32, - #[strum( - serialize = "ItemIgniter", - props( - name = r#"Kit (Igniter)"#, - desc = r#"This kit creates an Kit (Igniter) unit."#, - value = "890106742" - ) - )] - ItemIgniter = 890106742i32, - #[strum( - serialize = "ItemKitInsulatedLiquidPipe", - props( - name = r#"Kit (Insulated Liquid Pipe)"#, - desc = r#""#, - value = "2067655311" - ) - )] - ItemKitInsulatedLiquidPipe = 2067655311i32, - #[strum( - serialize = "ItemKitLiquidTankInsulated", - props( - name = r#"Kit (Insulated Liquid Tank)"#, - desc = r#""#, - value = "617773453" - ) - )] - ItemKitLiquidTankInsulated = 617773453i32, - #[strum( - serialize = "ItemPassiveVentInsulated", - props( - name = r#"Kit (Insulated Passive Vent)"#, - desc = r#""#, - value = "-1397583760" - ) - )] - ItemPassiveVentInsulated = -1397583760i32, - #[strum( - serialize = "ItemKitInsulatedPipeUtility", - props( - name = r#"Kit (Insulated Pipe Utility Gas)"#, - desc = r#""#, - value = "-27284803" - ) - )] - ItemKitInsulatedPipeUtility = -27284803i32, - #[strum( - serialize = "ItemKitInsulatedPipeUtilityLiquid", - props( - name = r#"Kit (Insulated Pipe Utility Liquid)"#, - desc = r#""#, - value = "-1831558953" - ) - )] - ItemKitInsulatedPipeUtilityLiquid = -1831558953i32, - #[strum( - serialize = "ItemKitInsulatedPipe", - props(name = r#"Kit (Insulated Pipe)"#, desc = r#""#, value = "452636699") - )] - ItemKitInsulatedPipe = 452636699i32, - #[strum( - serialize = "ItemKitInteriorDoors", - props(name = r#"Kit (Interior Doors)"#, desc = r#""#, value = "1935945891") - )] - ItemKitInteriorDoors = 1935945891i32, - #[strum( - serialize = "ItemKitWallIron", - props(name = r#"Kit (Iron Wall)"#, desc = r#""#, value = "-524546923") - )] - ItemKitWallIron = -524546923i32, - #[strum( - serialize = "ItemKitLadder", - props(name = r#"Kit (Ladder)"#, desc = r#""#, value = "489494578") - )] - ItemKitLadder = 489494578i32, + StructurePassiveLiquidDrain = 1812364811i32, #[strum( serialize = "ItemKitLandingPadAtmos", props( @@ -4450,502 +9252,6 @@ USE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to m ) )] ItemKitLandingPadAtmos = 1817007843i32, - #[strum( - serialize = "ItemKitLandingPadBasic", - props(name = r#"Kit (Landing Pad Basic)"#, desc = r#""#, value = "293581318") - )] - ItemKitLandingPadBasic = 293581318i32, - #[strum( - serialize = "ItemKitLandingPadWaypoint", - props( - name = r#"Kit (Landing Pad Runway)"#, - desc = r#""#, - value = "-1267511065" - ) - )] - ItemKitLandingPadWaypoint = -1267511065i32, - #[strum( - serialize = "ItemKitLargeDirectHeatExchanger", - props( - name = r#"Kit (Large Direct Heat Exchanger)"#, - desc = r#""#, - value = "450164077" - ) - )] - ItemKitLargeDirectHeatExchanger = 450164077i32, - #[strum( - serialize = "ItemKitLargeExtendableRadiator", - props( - name = r#"Kit (Large Extendable Radiator)"#, - desc = r#""#, - value = "847430620" - ) - )] - ItemKitLargeExtendableRadiator = 847430620i32, - #[strum( - serialize = "ItemKitLargeSatelliteDish", - props( - name = r#"Kit (Large Satellite Dish)"#, - desc = r#""#, - value = "-2039971217" - ) - )] - ItemKitLargeSatelliteDish = -2039971217i32, - #[strum( - serialize = "ItemKitLaunchMount", - props(name = r#"Kit (Launch Mount)"#, desc = r#""#, value = "-1854167549") - )] - ItemKitLaunchMount = -1854167549i32, - #[strum( - serialize = "ItemWallLight", - props( - name = r#"Kit (Lights)"#, - desc = r#"This kit creates any one of ten Kit (Lights) variants."#, - value = "1108423476" - ) - )] - ItemWallLight = 1108423476i32, - #[strum( - serialize = "ItemLiquidTankStorage", - props( - name = r#"Kit (Liquid Canister Storage)"#, - desc = r#"This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister."#, - value = "2037427578" - ) - )] - ItemLiquidTankStorage = 2037427578i32, - #[strum( - serialize = "ItemWaterPipeDigitalValve", - props( - name = r#"Kit (Liquid Digital Valve)"#, - desc = r#""#, - value = "309693520" - ) - )] - ItemWaterPipeDigitalValve = 309693520i32, - #[strum( - serialize = "ItemLiquidDrain", - props(name = r#"Kit (Liquid Drain)"#, desc = r#""#, value = "2036225202") - )] - ItemLiquidDrain = 2036225202i32, - #[strum( - serialize = "ItemLiquidPipeAnalyzer", - props( - name = r#"Kit (Liquid Pipe Analyzer)"#, - desc = r#""#, - value = "226055671" - ) - )] - ItemLiquidPipeAnalyzer = 226055671i32, - #[strum( - serialize = "ItemWaterPipeMeter", - props(name = r#"Kit (Liquid Pipe Meter)"#, desc = r#""#, value = "-90898877") - )] - ItemWaterPipeMeter = -90898877i32, - #[strum( - serialize = "ItemLiquidPipeValve", - props( - name = r#"Kit (Liquid Pipe Valve)"#, - desc = r#"This kit creates a Liquid Valve."#, - value = "-2126113312" - ) - )] - ItemLiquidPipeValve = -2126113312i32, - #[strum( - serialize = "ItemKitPipeLiquid", - props(name = r#"Kit (Liquid Pipe)"#, desc = r#""#, value = "-1166461357") - )] - ItemKitPipeLiquid = -1166461357i32, - #[strum( - serialize = "ItemPipeLiquidRadiator", - props( - name = r#"Kit (Liquid Radiator)"#, - desc = r#"This kit creates a Liquid Pipe Convection Radiator."#, - value = "-906521320" - ) - )] - ItemPipeLiquidRadiator = -906521320i32, - #[strum( - serialize = "ItemKitLiquidRegulator", - props(name = r#"Kit (Liquid Regulator)"#, desc = r#""#, value = "1951126161") - )] - ItemKitLiquidRegulator = 1951126161i32, - #[strum( - serialize = "ItemKitLiquidTank", - props(name = r#"Kit (Liquid Tank)"#, desc = r#""#, value = "-799849305") - )] - ItemKitLiquidTank = -799849305i32, - #[strum( - serialize = "ItemKitLiquidUmbilical", - props(name = r#"Kit (Liquid Umbilical)"#, desc = r#""#, value = "1571996765") - )] - ItemKitLiquidUmbilical = 1571996765i32, - #[strum( - serialize = "ItemLiquidPipeVolumePump", - props( - name = r#"Kit (Liquid Volume Pump)"#, - desc = r#""#, - value = "-2106280569" - ) - )] - ItemLiquidPipeVolumePump = -2106280569i32, - #[strum( - serialize = "ItemWaterWallCooler", - props( - name = r#"Kit (Liquid Wall Cooler)"#, - desc = r#""#, - value = "-1721846327" - ) - )] - ItemWaterWallCooler = -1721846327i32, - #[strum( - serialize = "ItemKitLocker", - props(name = r#"Kit (Locker)"#, desc = r#""#, value = "882301399") - )] - ItemKitLocker = 882301399i32, - #[strum( - serialize = "ItemKitLogicInputOutput", - props(name = r#"Kit (Logic I/O)"#, desc = r#""#, value = "1997293610") - )] - ItemKitLogicInputOutput = 1997293610i32, - #[strum( - serialize = "ItemKitLogicMemory", - props(name = r#"Kit (Logic Memory)"#, desc = r#""#, value = "-2098214189") - )] - ItemKitLogicMemory = -2098214189i32, - #[strum( - serialize = "ItemKitLogicProcessor", - props(name = r#"Kit (Logic Processor)"#, desc = r#""#, value = "220644373") - )] - ItemKitLogicProcessor = 220644373i32, - #[strum( - serialize = "ItemKitLogicSwitch", - props(name = r#"Kit (Logic Switch)"#, desc = r#""#, value = "124499454") - )] - ItemKitLogicSwitch = 124499454i32, - #[strum( - serialize = "ItemKitLogicTransmitter", - props( - name = r#"Kit (Logic Transmitter)"#, - desc = r#""#, - value = "1005397063" - ) - )] - ItemKitLogicTransmitter = 1005397063i32, - #[strum( - serialize = "ItemKitPassiveLargeRadiatorLiquid", - props( - name = r#"Kit (Medium Radiator Liquid)"#, - desc = r#""#, - value = "1453961898" - ) - )] - ItemKitPassiveLargeRadiatorLiquid = 1453961898i32, - #[strum( - serialize = "ItemKitPassiveLargeRadiatorGas", - props(name = r#"Kit (Medium Radiator)"#, desc = r#""#, value = "-1752768283") - )] - ItemKitPassiveLargeRadiatorGas = -1752768283i32, - #[strum( - serialize = "ItemKitSatelliteDish", - props( - name = r#"Kit (Medium Satellite Dish)"#, - desc = r#""#, - value = "178422810" - ) - )] - ItemKitSatelliteDish = 178422810i32, - #[strum( - serialize = "ItemKitMotherShipCore", - props(name = r#"Kit (Mothership)"#, desc = r#""#, value = "-344968335") - )] - ItemKitMotherShipCore = -344968335i32, - #[strum( - serialize = "ItemKitMusicMachines", - props(name = r#"Kit (Music Machines)"#, desc = r#""#, value = "-2038889137") - )] - ItemKitMusicMachines = -2038889137i32, - #[strum( - serialize = "ItemKitFlagODA", - props(name = r#"Kit (ODA Flag)"#, desc = r#""#, value = "1701764190") - )] - ItemKitFlagOda = 1701764190i32, - #[strum( - serialize = "ItemKitHorizontalAutoMiner", - props(name = r#"Kit (OGRE)"#, desc = r#""#, value = "844391171") - )] - ItemKitHorizontalAutoMiner = 844391171i32, - #[strum( - serialize = "ItemKitWallPadded", - props(name = r#"Kit (Padded Wall)"#, desc = r#""#, value = "-821868990") - )] - ItemKitWallPadded = -821868990i32, - #[strum( - serialize = "ItemKitEvaporationChamber", - props( - name = r#"Kit (Phase Change Device)"#, - desc = r#""#, - value = "1587787610" - ) - )] - ItemKitEvaporationChamber = 1587787610i32, - #[strum( - serialize = "ItemPipeAnalyizer", - props( - name = r#"Kit (Pipe Analyzer)"#, - desc = r#"This kit creates a Pipe Analyzer."#, - value = "-767597887" - ) - )] - ItemPipeAnalyizer = -767597887i32, - #[strum( - serialize = "ItemPipeIgniter", - props(name = r#"Kit (Pipe Igniter)"#, desc = r#""#, value = "1366030599") - )] - ItemPipeIgniter = 1366030599i32, - #[strum( - serialize = "ItemPipeLabel", - props( - name = r#"Kit (Pipe Label)"#, - desc = r#"This kit creates a Pipe Label."#, - value = "391769637" - ) - )] - ItemPipeLabel = 391769637i32, - #[strum( - serialize = "ItemPipeMeter", - props( - name = r#"Kit (Pipe Meter)"#, - desc = r#"This kit creates a Pipe Meter."#, - value = "1207939683" - ) - )] - ItemPipeMeter = 1207939683i32, - #[strum( - serialize = "ItemKitPipeOrgan", - props(name = r#"Kit (Pipe Organ)"#, desc = r#""#, value = "-827125300") - )] - ItemKitPipeOrgan = -827125300i32, - #[strum( - serialize = "ItemKitPipeRadiatorLiquid", - props( - name = r#"Kit (Pipe Radiator Liquid)"#, - desc = r#""#, - value = "-1697302609" - ) - )] - ItemKitPipeRadiatorLiquid = -1697302609i32, - #[strum( - serialize = "ItemKitPipeRadiator", - props(name = r#"Kit (Pipe Radiator)"#, desc = r#""#, value = "920411066") - )] - ItemKitPipeRadiator = 920411066i32, - #[strum( - serialize = "ItemKitPipeUtility", - props(name = r#"Kit (Pipe Utility Gas)"#, desc = r#""#, value = "1934508338") - )] - ItemKitPipeUtility = 1934508338i32, - #[strum( - serialize = "ItemKitPipeUtilityLiquid", - props( - name = r#"Kit (Pipe Utility Liquid)"#, - desc = r#""#, - value = "595478589" - ) - )] - ItemKitPipeUtilityLiquid = 595478589i32, - #[strum( - serialize = "ItemPipeValve", - props( - name = r#"Kit (Pipe Valve)"#, - desc = r#"This kit creates a Valve."#, - value = "799323450" - ) - )] - ItemPipeValve = 799323450i32, - #[strum( - serialize = "ItemKitPipe", - props(name = r#"Kit (Pipe)"#, desc = r#""#, value = "-1619793705") - )] - ItemKitPipe = -1619793705i32, - #[strum( - serialize = "ItemKitPlanter", - props(name = r#"Kit (Planter)"#, desc = r#""#, value = "119096484") - )] - ItemKitPlanter = 119096484i32, - #[strum( - serialize = "ItemDynamicAirCon", - props( - name = r#"Kit (Portable Air Conditioner)"#, - desc = r#""#, - value = "1072914031" - ) - )] - ItemDynamicAirCon = 1072914031i32, - #[strum( - serialize = "ItemKitDynamicGasTankAdvanced", - props( - name = r#"Kit (Portable Gas Tank Mk II)"#, - desc = r#""#, - value = "1533501495" - ) - )] - ItemKitDynamicGasTankAdvanced = 1533501495i32, - #[strum( - serialize = "ItemKitDynamicCanister", - props( - name = r#"Kit (Portable Gas Tank)"#, - desc = r#""#, - value = "-1061945368" - ) - )] - ItemKitDynamicCanister = -1061945368i32, - #[strum( - serialize = "ItemKitDynamicGenerator", - props( - name = r#"Kit (Portable Generator)"#, - desc = r#""#, - value = "-732720413" - ) - )] - ItemKitDynamicGenerator = -732720413i32, - #[strum( - serialize = "ItemKitDynamicHydroponics", - props( - name = r#"Kit (Portable Hydroponics)"#, - desc = r#""#, - value = "-1861154222" - ) - )] - ItemKitDynamicHydroponics = -1861154222i32, - #[strum( - serialize = "ItemKitDynamicMKIILiquidCanister", - props( - name = r#"Kit (Portable Liquid Tank Mk II)"#, - desc = r#""#, - value = "-638019974" - ) - )] - ItemKitDynamicMkiiLiquidCanister = -638019974i32, - #[strum( - serialize = "ItemKitDynamicLiquidCanister", - props( - name = r#"Kit (Portable Liquid Tank)"#, - desc = r#""#, - value = "375541286" - ) - )] - ItemKitDynamicLiquidCanister = 375541286i32, - #[strum( - serialize = "ItemDynamicScrubber", - props( - name = r#"Kit (Portable Scrubber)"#, - desc = r#""#, - value = "-971920158" - ) - )] - ItemDynamicScrubber = -971920158i32, - #[strum( - serialize = "ItemKitPortablesConnector", - props( - name = r#"Kit (Portables Connector)"#, - desc = r#""#, - value = "1041148999" - ) - )] - ItemKitPortablesConnector = 1041148999i32, - #[strum( - serialize = "ItemPowerConnector", - props( - name = r#"Kit (Power Connector)"#, - desc = r#"This kit creates a Power Connector."#, - value = "839924019" - ) - )] - ItemPowerConnector = 839924019i32, - #[strum( - serialize = "ItemAreaPowerControl", - props( - name = r#"Kit (Power Controller)"#, - desc = r#"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 = "ItemKitPowerTransmitterOmni", - props( - name = r#"Kit (Power Transmitter Omni)"#, - desc = r#""#, - value = "-831211676" - ) - )] - ItemKitPowerTransmitterOmni = -831211676i32, - #[strum( - serialize = "ItemKitPowerTransmitter", - props(name = r#"Kit (Power Transmitter)"#, desc = r#""#, value = "291368213") - )] - ItemKitPowerTransmitter = 291368213i32, - #[strum( - serialize = "ItemKitElectricUmbilical", - props(name = r#"Kit (Power Umbilical)"#, desc = r#""#, value = "1603046970") - )] - ItemKitElectricUmbilical = 1603046970i32, - #[strum( - serialize = "ItemKitStandardChute", - props(name = r#"Kit (Powered Chutes)"#, desc = r#""#, value = "2133035682") - )] - ItemKitStandardChute = 2133035682i32, - #[strum( - serialize = "ItemKitPoweredVent", - props(name = r#"Kit (Powered Vent)"#, desc = r#""#, value = "2015439334") - )] - ItemKitPoweredVent = 2015439334i32, - #[strum( - serialize = "ItemKitPressureFedGasEngine", - props( - name = r#"Kit (Pressure Fed Gas Engine)"#, - desc = r#""#, - value = "-121514007" - ) - )] - ItemKitPressureFedGasEngine = -121514007i32, - #[strum( - serialize = "ItemKitPressureFedLiquidEngine", - props( - name = r#"Kit (Pressure Fed Liquid Engine)"#, - desc = r#""#, - value = "-99091572" - ) - )] - ItemKitPressureFedLiquidEngine = -99091572i32, - #[strum( - serialize = "ItemKitRegulator", - props( - name = r#"Kit (Pressure Regulator)"#, - desc = r#""#, - value = "1181371795" - ) - )] - ItemKitRegulator = 1181371795i32, - #[strum( - serialize = "ItemKitGovernedGasRocketEngine", - props( - name = r#"Kit (Pumped Gas Rocket Engine)"#, - desc = r#""#, - value = "206848766" - ) - )] - ItemKitGovernedGasRocketEngine = 206848766i32, - #[strum( - serialize = "ItemKitPumpedLiquidEngine", - props( - name = r#"Kit (Pumped Liquid Engine)"#, - desc = r#""#, - value = "1921918951" - ) - )] - ItemKitPumpedLiquidEngine = 1921918951i32, #[strum( serialize = "ItemRTGSurvival", props( @@ -4956,1093 +9262,23 @@ USE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to m )] ItemRtgSurvival = 1817645803i32, #[strum( - serialize = "ItemPipeRadiator", + serialize = "StructureInsulatedInLineTankGas1x1", props( - name = r#"Kit (Radiator)"#, - desc = r#"This kit creates a Pipe Convection Radiator."#, - value = "-1796655088" - ) - )] - ItemPipeRadiator = -1796655088i32, - #[strum( - serialize = "ItemKitRailing", - props(name = r#"Kit (Railing)"#, desc = r#""#, value = "750176282") - )] - ItemKitRailing = 750176282i32, - #[strum( - serialize = "ItemKitRecycler", - props(name = r#"Kit (Recycler)"#, desc = r#""#, value = "849148192") - )] - ItemKitRecycler = 849148192i32, - #[strum( - serialize = "ItemKitReinforcedWindows", - props( - name = r#"Kit (Reinforced Windows)"#, + name = r#"Insulated In-Line Tank Small Gas"#, desc = r#""#, - value = "1459985302" + value = "1818267386" ) )] - ItemKitReinforcedWindows = 1459985302i32, + StructureInsulatedInLineTankGas1X1 = 1818267386i32, #[strum( - serialize = "ItemKitRespawnPointWallMounted", - props(name = r#"Kit (Respawn)"#, desc = r#""#, value = "1574688481") - )] - ItemKitRespawnPointWallMounted = 1574688481i32, - #[strum( - serialize = "ItemKitRocketBattery", - props(name = r#"Kit (Rocket Battery)"#, desc = r#""#, value = "-314072139") - )] - ItemKitRocketBattery = -314072139i32, - #[strum( - serialize = "ItemKitRocketCargoStorage", - props( - name = r#"Kit (Rocket Cargo Storage)"#, - desc = r#""#, - value = "479850239" - ) - )] - ItemKitRocketCargoStorage = 479850239i32, - #[strum( - serialize = "ItemKitRocketCelestialTracker", - props( - name = r#"Kit (Rocket Celestial Tracker)"#, - desc = r#""#, - value = "-303008602" - ) - )] - ItemKitRocketCelestialTracker = -303008602i32, - #[strum( - serialize = "ItemKitRocketCircuitHousing", - props( - name = r#"Kit (Rocket Circuit Housing)"#, - desc = r#""#, - value = "721251202" - ) - )] - ItemKitRocketCircuitHousing = 721251202i32, - #[strum( - serialize = "ItemKitRocketDatalink", - props(name = r#"Kit (Rocket Datalink)"#, desc = r#""#, value = "-1256996603") - )] - ItemKitRocketDatalink = -1256996603i32, - #[strum( - serialize = "ItemKitRocketGasFuelTank", - props( - name = r#"Kit (Rocket Gas Fuel Tank)"#, - desc = r#""#, - value = "-1629347579" - ) - )] - ItemKitRocketGasFuelTank = -1629347579i32, - #[strum( - serialize = "ItemKitLaunchTower", - props( - name = r#"Kit (Rocket Launch Tower)"#, - desc = r#""#, - value = "-174523552" - ) - )] - ItemKitLaunchTower = -174523552i32, - #[strum( - serialize = "ItemKitRocketLiquidFuelTank", - props( - name = r#"Kit (Rocket Liquid Fuel Tank)"#, - desc = r#""#, - value = "2032027950" - ) - )] - ItemKitRocketLiquidFuelTank = 2032027950i32, - #[strum( - serialize = "ItemKitRocketManufactory", - props( - name = r#"Kit (Rocket Manufactory)"#, - desc = r#""#, - value = "-636127860" - ) - )] - ItemKitRocketManufactory = -636127860i32, - #[strum( - serialize = "ItemKitRocketMiner", - props(name = r#"Kit (Rocket Miner)"#, desc = r#""#, value = "-867969909") - )] - ItemKitRocketMiner = -867969909i32, - #[strum( - serialize = "ItemKitRocketScanner", - props(name = r#"Kit (Rocket Scanner)"#, desc = r#""#, value = "1753647154") - )] - ItemKitRocketScanner = 1753647154i32, - #[strum( - serialize = "ItemKitRoverFrame", - props(name = r#"Kit (Rover Frame)"#, desc = r#""#, value = "1827215803") - )] - ItemKitRoverFrame = 1827215803i32, - #[strum( - serialize = "ItemKitRoverMKI", - props(name = r#"Kit (Rover Mk I)"#, desc = r#""#, value = "197243872") - )] - ItemKitRoverMki = 197243872i32, - #[strum( - serialize = "ItemKitSDBHopper", - props(name = r#"Kit (SDB Hopper)"#, desc = r#""#, value = "323957548") - )] - ItemKitSdbHopper = 323957548i32, - #[strum( - serialize = "KitSDBSilo", - props( - name = r#"Kit (SDB Silo)"#, - desc = r#"This kit creates a SDB Silo."#, - value = "1932952652" - ) - )] - KitSdbSilo = 1932952652i32, - #[strum( - serialize = "ItemKitSecurityPrinter", - props(name = r#"Kit (Security Printer)"#, desc = r#""#, value = "578078533") - )] - ItemKitSecurityPrinter = 578078533i32, - #[strum( - serialize = "ItemKitSensor", - props(name = r#"Kit (Sensors)"#, desc = r#""#, value = "-1776897113") - )] - ItemKitSensor = -1776897113i32, - #[strum( - serialize = "ItemKitShower", - props(name = r#"Kit (Shower)"#, desc = r#""#, value = "735858725") - )] - ItemKitShower = 735858725i32, - #[strum( - serialize = "ItemKitSign", - props(name = r#"Kit (Sign)"#, desc = r#""#, value = "529996327") - )] - ItemKitSign = 529996327i32, - #[strum( - serialize = "ItemKitSleeper", - props(name = r#"Kit (Sleeper)"#, desc = r#""#, value = "326752036") - )] - ItemKitSleeper = 326752036i32, - #[strum( - serialize = "ItemKitSmallDirectHeatExchanger", - props( - name = r#"Kit (Small Direct Heat Exchanger)"#, - desc = r#""#, - value = "-1332682164" - ) - )] - ItemKitSmallDirectHeatExchanger = -1332682164i32, - #[strum( - serialize = "ItemFlagSmall", - props(name = r#"Kit (Small Flag)"#, desc = r#""#, value = "2011191088") - )] - ItemFlagSmall = 2011191088i32, - #[strum( - serialize = "ItemKitSmallSatelliteDish", - props( - name = r#"Kit (Small Satellite Dish)"#, - desc = r#""#, - value = "1960952220" - ) - )] - ItemKitSmallSatelliteDish = 1960952220i32, - #[strum( - serialize = "ItemKitSolarPanelBasicReinforced", - props( - name = r#"Kit (Solar Panel Basic Heavy)"#, - desc = r#""#, - value = "-528695432" - ) - )] - ItemKitSolarPanelBasicReinforced = -528695432i32, - #[strum( - serialize = "ItemKitSolarPanelBasic", - props(name = r#"Kit (Solar Panel Basic)"#, desc = r#""#, value = "844961456") - )] - ItemKitSolarPanelBasic = 844961456i32, - #[strum( - serialize = "ItemKitSolarPanelReinforced", - props( - name = r#"Kit (Solar Panel Heavy)"#, - desc = r#""#, - value = "-364868685" - ) - )] - ItemKitSolarPanelReinforced = -364868685i32, - #[strum( - serialize = "ItemKitSolarPanel", - props(name = r#"Kit (Solar Panel)"#, desc = r#""#, value = "-1924492105") - )] - ItemKitSolarPanel = -1924492105i32, - #[strum( - serialize = "ItemKitSolidGenerator", - props(name = r#"Kit (Solid Generator)"#, desc = r#""#, value = "1293995736") - )] - ItemKitSolidGenerator = 1293995736i32, - #[strum( - serialize = "ItemKitSorter", - props(name = r#"Kit (Sorter)"#, desc = r#""#, value = "969522478") - )] - ItemKitSorter = 969522478i32, - #[strum( - serialize = "ItemKitSpeaker", - props(name = r#"Kit (Speaker)"#, desc = r#""#, value = "-126038526") - )] - ItemKitSpeaker = -126038526i32, - #[strum( - serialize = "ItemKitStacker", - props(name = r#"Kit (Stacker)"#, desc = r#""#, value = "1013244511") - )] - ItemKitStacker = 1013244511i32, - #[strum( - serialize = "ItemKitStairs", - props(name = r#"Kit (Stairs)"#, desc = r#""#, value = "170878959") - )] - ItemKitStairs = 170878959i32, - #[strum( - serialize = "ItemKitStairwell", - props(name = r#"Kit (Stairwell)"#, desc = r#""#, value = "-1868555784") - )] - ItemKitStairwell = -1868555784i32, - #[strum( - serialize = "ItemKitStirlingEngine", - props(name = r#"Kit (Stirling Engine)"#, desc = r#""#, value = "-1821571150") - )] - ItemKitStirlingEngine = -1821571150i32, - #[strum( - serialize = "ItemKitSuitStorage", - props(name = r#"Kit (Suit Storage)"#, desc = r#""#, value = "1088892825") - )] - ItemKitSuitStorage = 1088892825i32, - #[strum( - serialize = "ItemKitTables", - props(name = r#"Kit (Tables)"#, desc = r#""#, value = "-1361598922") - )] - ItemKitTables = -1361598922i32, - #[strum( - serialize = "ItemKitTankInsulated", - props(name = r#"Kit (Tank Insulated)"#, desc = r#""#, value = "1021053608") - )] - ItemKitTankInsulated = 1021053608i32, - #[strum( - serialize = "ItemKitTank", - props(name = r#"Kit (Tank)"#, desc = r#""#, value = "771439840") - )] - ItemKitTank = 771439840i32, - #[strum( - serialize = "ItemKitGroundTelescope", - props(name = r#"Kit (Telescope)"#, desc = r#""#, value = "-2140672772") - )] - ItemKitGroundTelescope = -2140672772i32, - #[strum( - serialize = "ItemKitToolManufactory", - props(name = r#"Kit (Tool Manufactory)"#, desc = r#""#, value = "529137748") - )] - ItemKitToolManufactory = 529137748i32, - #[strum( - serialize = "ItemKitTransformer", - props( - name = r#"Kit (Transformer Large)"#, - desc = r#""#, - value = "-453039435" - ) - )] - ItemKitTransformer = -453039435i32, - #[strum( - serialize = "ItemKitRocketTransformerSmall", - props( - name = r#"Kit (Transformer Small (Rocket))"#, - desc = r#""#, - value = "-932335800" - ) - )] - ItemKitRocketTransformerSmall = -932335800i32, - #[strum( - serialize = "ItemKitTransformerSmall", - props(name = r#"Kit (Transformer Small)"#, desc = r#""#, value = "665194284") - )] - ItemKitTransformerSmall = 665194284i32, - #[strum( - serialize = "ItemKitPressurePlate", - props(name = r#"Kit (Trigger Plate)"#, desc = r#""#, value = "123504691") - )] - ItemKitPressurePlate = 123504691i32, - #[strum( - serialize = "ItemKitTurbineGenerator", - props( - name = r#"Kit (Turbine Generator)"#, - desc = r#""#, - value = "-1590715731" - ) - )] - ItemKitTurbineGenerator = -1590715731i32, - #[strum( - serialize = "ItemKitTurboVolumePump", - props( - name = r#"Kit (Turbo Volume Pump - Gas)"#, - desc = r#""#, - value = "-1248429712" - ) - )] - ItemKitTurboVolumePump = -1248429712i32, - #[strum( - serialize = "ItemKitLiquidTurboVolumePump", - props( - name = r#"Kit (Turbo Volume Pump - Liquid)"#, - desc = r#""#, - value = "-1805020897" - ) - )] - ItemKitLiquidTurboVolumePump = -1805020897i32, - #[strum( - serialize = "ItemKitUprightWindTurbine", - props( - name = r#"Kit (Upright Wind Turbine)"#, - desc = r#""#, - value = "-1798044015" - ) - )] - ItemKitUprightWindTurbine = -1798044015i32, - #[strum( - serialize = "ItemKitVendingMachineRefrigerated", - props( - name = r#"Kit (Vending Machine Refrigerated)"#, - desc = r#""#, - value = "-1867508561" - ) - )] - ItemKitVendingMachineRefrigerated = -1867508561i32, - #[strum( - serialize = "ItemKitVendingMachine", - props(name = r#"Kit (Vending Machine)"#, desc = r#""#, value = "-2038384332") - )] - ItemKitVendingMachine = -2038384332i32, - #[strum( - serialize = "ItemPipeVolumePump", - props( - name = r#"Kit (Volume Pump)"#, - desc = r#"This kit creates a Volume Pump."#, - value = "-1766301997" - ) - )] - ItemPipeVolumePump = -1766301997i32, - #[strum( - serialize = "ItemWallCooler", - props( - name = r#"Kit (Wall Cooler)"#, - desc = r#"This kit creates a Wall Cooler."#, - value = "-1567752627" - ) - )] - ItemWallCooler = -1567752627i32, - #[strum( - serialize = "ItemWallHeater", - props( - name = r#"Kit (Wall Heater)"#, - desc = r#"This kit creates a Kit (Wall Heater)."#, - value = "1880134612" - ) - )] - ItemWallHeater = 1880134612i32, - #[strum( - serialize = "ItemKitWall", - props(name = r#"Kit (Wall)"#, desc = r#""#, value = "-1826855889") - )] - ItemKitWall = -1826855889i32, - #[strum( - serialize = "ItemKitWaterBottleFiller", - props( - name = r#"Kit (Water Bottle Filler)"#, - desc = r#""#, - value = "159886536" - ) - )] - ItemKitWaterBottleFiller = 159886536i32, - #[strum( - serialize = "ItemKitWaterPurifier", - props(name = r#"Kit (Water Purifier)"#, desc = r#""#, value = "611181283") - )] - ItemKitWaterPurifier = 611181283i32, - #[strum( - serialize = "ItemKitWeatherStation", - props(name = r#"Kit (Weather Station)"#, desc = r#""#, value = "337505889") - )] - ItemKitWeatherStation = 337505889i32, - #[strum( - serialize = "ItemKitWindTurbine", - props(name = r#"Kit (Wind Turbine)"#, desc = r#""#, value = "-868916503") - )] - ItemKitWindTurbine = -868916503i32, - #[strum( - serialize = "ItemKitWindowShutter", - props(name = r#"Kit (Window Shutter)"#, desc = r#""#, value = "1779979754") - )] - ItemKitWindowShutter = 1779979754i32, - #[strum( - serialize = "ItemKitHeatExchanger", - props(name = r#"Kit Heat Exchanger"#, desc = r#""#, value = "-1710540039") - )] - ItemKitHeatExchanger = -1710540039i32, - #[strum( - serialize = "ItemKitPictureFrame", - props(name = r#"Kit Picture Frame"#, desc = r#""#, value = "-2062364768") - )] - ItemKitPictureFrame = -2062364768i32, - #[strum( - serialize = "ItemKitResearchMachine", - props(name = r#"Kit Research Machine"#, desc = r#""#, value = "724776762") - )] - ItemKitResearchMachine = 724776762i32, - #[strum( - serialize = "KitchenTableShort", - props(name = r#"Kitchen Table (Short)"#, desc = r#""#, value = "-1427415566") - )] - KitchenTableShort = -1427415566i32, - #[strum( - serialize = "KitchenTableSimpleShort", - props( - name = r#"Kitchen Table (Simple Short)"#, - desc = r#""#, - value = "-78099334" - ) - )] - KitchenTableSimpleShort = -78099334i32, - #[strum( - serialize = "KitchenTableSimpleTall", - props( - name = r#"Kitchen Table (Simple Tall)"#, - desc = r#""#, - value = "-1068629349" - ) - )] - KitchenTableSimpleTall = -1068629349i32, - #[strum( - serialize = "KitchenTableTall", - props(name = r#"Kitchen Table (Tall)"#, desc = r#""#, value = "-1386237782") - )] - KitchenTableTall = -1386237782i32, - #[strum( - serialize = "StructureKlaxon", - props( - name = r#"Klaxon Speaker"#, - desc = r#"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 = "StructureDiode", - props(name = r#"LED"#, desc = r#""#, value = "1944485013") - )] - StructureDiode = 1944485013i32, - #[strum( - serialize = "StructureConsoleLED1x3", - props( - name = r#"LED Display (Large)"#, - desc = r#"0.Default -1.Percent -2.Power"#, - value = "-1949054743" - ) - )] - StructureConsoleLed1X3 = -1949054743i32, - #[strum( - serialize = "StructureConsoleLED1x2", - props( - name = r#"LED Display (Medium)"#, - desc = r#"0.Default -1.Percent -2.Power"#, - value = "-53151617" - ) - )] - StructureConsoleLed1X2 = -53151617i32, - #[strum( - serialize = "StructureConsoleLED5", - props( - name = r#"LED Display (Small)"#, - desc = r#"0.Default -1.Percent -2.Power"#, - value = "-815193061" - ) - )] - StructureConsoleLed5 = -815193061i32, - #[strum( - serialize = "ItemLabeller", - props( - name = r#"Labeller"#, - desc = r#"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 = "StructureLadder", - props(name = r#"Ladder"#, desc = r#""#, value = "-415420281") - )] - StructureLadder = -415420281i32, - #[strum( - serialize = "StructureLadderEnd", - props(name = r#"Ladder End"#, desc = r#""#, value = "1541734993") - )] - StructureLadderEnd = 1541734993i32, - #[strum( - serialize = "StructurePlatformLadderOpen", - props(name = r#"Ladder Platform"#, desc = r#""#, value = "1559586682") - )] - StructurePlatformLadderOpen = 1559586682i32, - #[strum( - serialize = "Lander", - props(name = r#"Lander"#, desc = r#""#, value = "1605130615") - )] - Lander = 1605130615i32, - #[strum( - serialize = "Landingpad_BlankPiece", - props(name = r#"Landingpad"#, desc = r#""#, value = "912453390") - )] - LandingpadBlankPiece = 912453390i32, - #[strum( - serialize = "Landingpad_2x2CenterPiece01", - props( - name = r#"Landingpad 2x2 Center Piece"#, - desc = r#"Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors"#, - value = "-1295222317" - ) - )] - Landingpad2X2CenterPiece01 = -1295222317i32, - #[strum( - serialize = "Landingpad_CenterPiece01", + serialize = "ItemPlantThermogenic_Genepool2", props( - name = r#"Landingpad Center"#, - desc = r#"The target point where the trader shuttle will land. Requires a clear view of the sky."#, - value = "1070143159" + name = r#"Hades Flower (Beta strain)"#, + desc = r#"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" ) )] - LandingpadCenterPiece01 = 1070143159i32, - #[strum( - serialize = "Landingpad_CrossPiece", - props( - name = r#"Landingpad Cross"#, - desc = r#"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area."#, - value = "1101296153" - ) - )] - LandingpadCrossPiece = 1101296153i32, - #[strum( - serialize = "Landingpad_DataConnectionPiece", - props( - name = r#"Landingpad Data And Power"#, - desc = r#"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 = "Landingpad_DiagonalPiece01", - props( - name = r#"Landingpad Diagonal"#, - desc = r#"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area."#, - value = "977899131" - ) - )] - LandingpadDiagonalPiece01 = 977899131i32, - #[strum( - serialize = "Landingpad_GasConnectorInwardPiece", - props(name = r#"Landingpad Gas Input"#, desc = r#""#, value = "817945707") - )] - LandingpadGasConnectorInwardPiece = 817945707i32, - #[strum( - serialize = "Landingpad_GasConnectorOutwardPiece", - props( - name = r#"Landingpad Gas Output"#, - desc = r#"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 = "Landingpad_GasCylinderTankPiece", - props( - name = r#"Landingpad Gas Storage"#, - desc = r#"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 = "Landingpad_LiquidConnectorInwardPiece", - props( - name = r#"Landingpad Liquid Input"#, - desc = r#""#, - value = "-1216167727" - ) - )] - LandingpadLiquidConnectorInwardPiece = -1216167727i32, - #[strum( - serialize = "Landingpad_LiquidConnectorOutwardPiece", - props( - name = r#"Landingpad Liquid Output"#, - desc = r#"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 = "Landingpad_StraightPiece01", - props( - name = r#"Landingpad Straight"#, - desc = r#"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area."#, - value = "-976273247" - ) - )] - LandingpadStraightPiece01 = -976273247i32, - #[strum( - serialize = "Landingpad_TaxiPieceCorner", - props( - name = r#"Landingpad Taxi Corner"#, - desc = r#""#, - value = "-1872345847" - ) - )] - LandingpadTaxiPieceCorner = -1872345847i32, - #[strum( - serialize = "Landingpad_TaxiPieceHold", - props(name = r#"Landingpad Taxi Hold"#, desc = r#""#, value = "146051619") - )] - LandingpadTaxiPieceHold = 146051619i32, - #[strum( - serialize = "Landingpad_TaxiPieceStraight", - props( - name = r#"Landingpad Taxi Straight"#, - desc = r#""#, - value = "-1477941080" - ) - )] - LandingpadTaxiPieceStraight = -1477941080i32, - #[strum( - serialize = "Landingpad_ThreshholdPiece", - props(name = r#"Landingpad Threshhold"#, desc = r#""#, value = "-1514298582") - )] - LandingpadThreshholdPiece = -1514298582i32, - #[strum( - serialize = "ItemLaptop", - props( - name = r#"Laptop"#, - desc = r#"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. - -You must place the laptop down to interact with the onsreen UI. - -Connects to Logic Transmitter"#, - value = "141535121" - ) - )] - ItemLaptop = 141535121i32, - #[strum( - serialize = "StructureLargeDirectHeatExchangeLiquidtoLiquid", - props( - name = r#"Large Direct Heat Exchange - Liquid + Liquid"#, - desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, - value = "792686502" - ) - )] - StructureLargeDirectHeatExchangeLiquidtoLiquid = 792686502i32, - #[strum( - serialize = "StructureLargeDirectHeatExchangeGastoGas", - props( - name = r#"Large Direct Heat Exchanger - Gas + Gas"#, - desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, - value = "-1230658883" - ) - )] - StructureLargeDirectHeatExchangeGastoGas = -1230658883i32, - #[strum( - serialize = "StructureLargeDirectHeatExchangeGastoLiquid", - props( - name = r#"Large Direct Heat Exchanger - Gas + Liquid"#, - desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, - value = "1412338038" - ) - )] - StructureLargeDirectHeatExchangeGastoLiquid = 1412338038i32, - #[strum( - serialize = "StructureLargeExtendableRadiator", - props( - name = r#"Large Extendable Radiator"#, - desc = r#"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 = "StructureLargeHangerDoor", - props( - name = r#"Large Hangar Door"#, - desc = r#"1 x 3 modular door piece for building hangar doors."#, - value = "-1351081801" - ) - )] - StructureLargeHangerDoor = -1351081801i32, - #[strum( - serialize = "StructureLargeSatelliteDish", - props( - name = r#"Large Satellite Dish"#, - desc = r#"This large communications unit can be used to communicate with nearby trade vessels. - - 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."#, - value = "1913391845" - ) - )] - StructureLargeSatelliteDish = 1913391845i32, - #[strum( - serialize = "StructureTankBig", - props(name = r#"Large Tank"#, desc = r#""#, value = "-1606848156") - )] - StructureTankBig = -1606848156i32, - #[strum( - serialize = "StructureLaunchMount", - props( - name = r#"Launch Mount"#, - desc = r#"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 = "StructureRocketTower", - props(name = r#"Launch Tower"#, desc = r#""#, value = "-654619479") - )] - StructureRocketTower = -654619479i32, - #[strum( - serialize = "StructureLogicSwitch", - props(name = r#"Lever"#, desc = r#""#, value = "1220484876") - )] - StructureLogicSwitch = 1220484876i32, - #[strum( - serialize = "StructureLightRound", - props( - name = r#"Light Round"#, - desc = r#"Description coming."#, - value = "1514476632" - ) - )] - StructureLightRound = 1514476632i32, - #[strum( - serialize = "StructureLightRoundAngled", - props( - name = r#"Light Round (Angled)"#, - desc = r#"Description coming."#, - value = "1592905386" - ) - )] - StructureLightRoundAngled = 1592905386i32, - #[strum( - serialize = "StructureLightRoundSmall", - props( - name = r#"Light Round (Small)"#, - desc = r#"Description coming."#, - value = "1436121888" - ) - )] - StructureLightRoundSmall = 1436121888i32, - #[strum( - serialize = "ItemLightSword", - props( - name = r#"Light Sword"#, - desc = r#"A charming, if useless, pseudo-weapon. (Creative only.)"#, - value = "1949076595" - ) - )] - ItemLightSword = 1949076595i32, - #[strum( - serialize = "StructureBackLiquidPressureRegulator", - props( - name = r#"Liquid Back Volume Regulator"#, - desc = r#"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 = "ItemLiquidCanisterEmpty", - props(name = r#"Liquid Canister"#, desc = r#""#, value = "-185207387") - )] - ItemLiquidCanisterEmpty = -185207387i32, - #[strum( - serialize = "ItemLiquidCanisterSmart", - props( - name = r#"Liquid Canister (Smart)"#, - desc = r#"0.Mode0 -1.Mode1"#, - value = "777684475" - ) - )] - ItemLiquidCanisterSmart = 777684475i32, - #[strum( - serialize = "ItemGasCanisterWater", - props( - name = r#"Liquid Canister (Water)"#, - desc = r#""#, - value = "-1854861891" - ) - )] - ItemGasCanisterWater = -1854861891i32, - #[strum( - serialize = "StructureMediumRocketLiquidFuelTank", - props( - name = r#"Liquid Capsule Tank Medium"#, - desc = r#""#, - value = "1143639539" - ) - )] - StructureMediumRocketLiquidFuelTank = 1143639539i32, - #[strum( - serialize = "StructureCapsuleTankLiquid", - props( - name = r#"Liquid Capsule Tank Small"#, - desc = r#""#, - value = "1415396263" - ) - )] - StructureCapsuleTankLiquid = 1415396263i32, - #[strum( - serialize = "StructureWaterDigitalValve", - props(name = r#"Liquid Digital Valve"#, desc = r#""#, value = "-517628750") - )] - StructureWaterDigitalValve = -517628750i32, - #[strum( - serialize = "StructurePipeLiquidCrossJunction3", - props( - name = r#"Liquid Pipe (3-Way Junction)"#, - desc = r#"You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench."#, - value = "1628087508" - ) - )] - StructurePipeLiquidCrossJunction3 = 1628087508i32, - #[strum( - serialize = "StructurePipeLiquidCrossJunction4", - props( - name = r#"Liquid Pipe (4-Way Junction)"#, - desc = r#"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 = "StructurePipeLiquidCrossJunction5", - props( - name = r#"Liquid Pipe (5-Way Junction)"#, - desc = r#"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 = "StructurePipeLiquidCrossJunction6", - props( - name = r#"Liquid Pipe (6-Way Junction)"#, - desc = r#"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 = "StructurePipeLiquidCorner", - props( - name = r#"Liquid Pipe (Corner)"#, - desc = r#"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 = "StructurePipeLiquidCrossJunction", - props( - name = r#"Liquid Pipe (Cross Junction)"#, - desc = r#"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 = "StructurePipeLiquidStraight", - props( - name = r#"Liquid Pipe (Straight)"#, - desc = r#"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 = "StructurePipeLiquidTJunction", - props( - name = r#"Liquid Pipe (T Junction)"#, - desc = r#"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 = "StructureLiquidPipeAnalyzer", - props(name = r#"Liquid Pipe Analyzer"#, desc = r#""#, value = "-2113838091") - )] - StructureLiquidPipeAnalyzer = -2113838091i32, - #[strum( - serialize = "StructureLiquidPipeRadiator", - props( - name = r#"Liquid Pipe Convection Radiator"#, - desc = r#"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. -The 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 = "StructureWaterPipeMeter", - props(name = r#"Liquid Pipe Meter"#, desc = r#""#, value = "433184168") - )] - StructureWaterPipeMeter = 433184168i32, - #[strum( - serialize = "StructureLiquidTankBig", - props(name = r#"Liquid Tank Big"#, desc = r#""#, value = "1098900430") - )] - StructureLiquidTankBig = 1098900430i32, - #[strum( - serialize = "StructureTankConnectorLiquid", - props( - name = r#"Liquid Tank Connector"#, - desc = r#"These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network."#, - value = "1331802518" - ) - )] - StructureTankConnectorLiquid = 1331802518i32, - #[strum( - serialize = "StructureLiquidTankSmall", - props(name = r#"Liquid Tank Small"#, desc = r#""#, value = "1988118157") - )] - StructureLiquidTankSmall = 1988118157i32, - #[strum( - serialize = "StructureLiquidTankStorage", - props( - name = r#"Liquid Tank Storage"#, - desc = r#"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 = "StructureLiquidValve", - props(name = r#"Liquid Valve"#, desc = r#""#, value = "1849974453") - )] - StructureLiquidValve = 1849974453i32, - #[strum( - serialize = "StructureLiquidVolumePump", - props(name = r#"Liquid Volume Pump"#, desc = r#""#, value = "-454028979") - )] - StructureLiquidVolumePump = -454028979i32, - #[strum( - serialize = "StructureLiquidPressureRegulator", - props( - name = r#"Liquid Volume Regulator"#, - desc = r#"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 = "StructureWaterWallCooler", - props(name = r#"Liquid Wall Cooler"#, desc = r#""#, value = "-1369060582") - )] - StructureWaterWallCooler = -1369060582i32, - #[strum( - serialize = "StructureStorageLocker", - props(name = r#"Locker"#, desc = r#""#, value = "-793623899") - )] - StructureStorageLocker = -793623899i32, - #[strum( - serialize = "StructureLockerSmall", - props(name = r#"Locker (Small)"#, desc = r#""#, value = "-647164662") - )] - StructureLockerSmall = -647164662i32, - #[strum( - serialize = "StructureLogicCompare", - props( - name = r#"Logic Compare"#, - desc = r#"0.Equals -1.Greater -2.Less -3.NotEquals"#, - value = "-1489728908" - ) - )] - StructureLogicCompare = -1489728908i32, - #[strum( - serialize = "StructureLogicGate", - props( - name = r#"Logic Gate"#, - desc = r#"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 = "StructureLogicHashGen", - props(name = r#"Logic Hash Generator"#, desc = r#""#, value = "2077593121") - )] - StructureLogicHashGen = 2077593121i32, - #[strum( - serialize = "StructureLogicMath", - props( - name = r#"Logic Math"#, - desc = r#"0.Add -1.Subtract -2.Multiply -3.Divide -4.Mod -5.Atan2 -6.Pow -7.Log"#, - value = "1657691323" - ) - )] - StructureLogicMath = 1657691323i32, - #[strum( - serialize = "StructureLogicMemory", - props(name = r#"Logic Memory"#, desc = r#""#, value = "-851746783") - )] - StructureLogicMemory = -851746783i32, - #[strum( - serialize = "StructureLogicMinMax", - props( - name = r#"Logic Min/Max"#, - desc = r#"0.Greater -1.Less"#, - value = "929022276" - ) - )] - StructureLogicMinMax = 929022276i32, - #[strum( - serialize = "StructureLogicMirror", - props(name = r#"Logic Mirror"#, desc = r#""#, value = "2096189278") - )] - StructureLogicMirror = 2096189278i32, - #[strum( - serialize = "MotherboardLogic", - props( - name = r#"Logic Motherboard"#, - desc = r#"Motherboards are connected to Computers to perform various technical functions. -The Norsec-designed K-cops logic motherboard allows Stationeers to set variables and actions on specific logic-controlled items."#, - value = "502555944" - ) - )] - MotherboardLogic = 502555944i32, - #[strum( - serialize = "StructureLogicReader", - props(name = r#"Logic Reader"#, desc = r#""#, value = "-345383640") - )] - StructureLogicReader = -345383640i32, - #[strum( - serialize = "StructureLogicRocketDownlink", - props(name = r#"Logic Rocket Downlink"#, desc = r#""#, value = "876108549") - )] - StructureLogicRocketDownlink = 876108549i32, + ItemPlantThermogenicGenepool2 = 1819167057i32, #[strum( serialize = "StructureLogicSelect", props( @@ -6055,200 +9291,6 @@ The Norsec-designed K-cops logic mo ) )] StructureLogicSelect = 1822736084i32, - #[strum( - serialize = "StructureLogicSorter", - props( - name = r#"Logic Sorter"#, - desc = r#"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 = "LogicStepSequencer8", - props( - name = r#"Logic Step Sequencer"#, - desc = r#"The ODA does not approve of soundtracks or other distractions. -As such, Stationeers have had to create their own musical accompaniment to the demanding labor of building and maintaining off-world infrastructure. -Central to this pastime is the step sequencer, which allows Stationeers to sequence short musical patterns or loops. - -DIY MUSIC - GETTING STARTED - -1: Connect 8 Device Step Units to your step sequencer via the data port on the left hand side. - -2: Label each step unit, then assign step units 1 through 8 on the step sequencer using the screwdriver. - -3: 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. - -4: Place a Stop Watch and use a Logic Reader and Logic Writer to write the time to the time variable on the sequencer. - -5: 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. - -6: 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. - -7: 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). - -8: Get freaky with the Low frequency oscillator. - -9: Finally, activate the sequencer, Vibeoneer."#, - value = "1531272458" - ) - )] - LogicStepSequencer8 = 1531272458i32, - #[strum( - serialize = "StructureLogicTransmitter", - props( - name = r#"Logic Transmitter"#, - desc = r#"Connects to Logic Transmitter"#, - value = "-693235651" - ) - )] - StructureLogicTransmitter = -693235651i32, - #[strum( - serialize = "StructureLogicRocketUplink", - props(name = r#"Logic Uplink"#, desc = r#""#, value = "546002924") - )] - StructureLogicRocketUplink = 546002924i32, - #[strum( - serialize = "StructureLogicWriter", - props(name = r#"Logic Writer"#, desc = r#""#, value = "-1326019434") - )] - StructureLogicWriter = -1326019434i32, - #[strum( - serialize = "StructureLogicWriterSwitch", - props(name = r#"Logic Writer Switch"#, desc = r#""#, value = "-1321250424") - )] - StructureLogicWriterSwitch = -1321250424i32, - #[strum( - serialize = "DeviceLfoVolume", - props( - name = r#"Low frequency oscillator"#, - desc = r#"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. - -To set up an LFO: - -1. Place the LFO unit -2. Set the LFO output to a Passive Speaker -2. Set a sequencers' output to LFO - so the sequencer's signal runs through the LFO to a speaker. -3. Place a Stop Watch or use an existing one, then use a Logic Writer to write it to the LFO. -4. Use another logic writer to write the BPM to the LFO. -5. You are ready. This is the future. You're in space. Make it sound cool. - -For more info, check out the music page."#, - value = "-1844430312" - ) - )] - DeviceLfoVolume = -1844430312i32, - #[strum( - serialize = "StructureManualHatch", - props( - name = r#"Manual Hatch"#, - desc = r#"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 = "ItemMarineBodyArmor", - props(name = r#"Marine Armor"#, desc = r#""#, value = "1399098998") - )] - ItemMarineBodyArmor = 1399098998i32, - #[strum( - serialize = "ItemMarineHelmet", - props(name = r#"Marine Helmet"#, desc = r#""#, value = "1073631646") - )] - ItemMarineHelmet = 1073631646i32, - #[strum( - serialize = "UniformMarine", - props(name = r#"Marine Uniform"#, desc = r#""#, value = "-48342840") - )] - UniformMarine = -48342840i32, - #[strum( - serialize = "StructureLogicMathUnary", - props( - name = r#"Math Unary"#, - desc = r#"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"#, - value = "-1160020195" - ) - )] - StructureLogicMathUnary = -1160020195i32, - #[strum( - serialize = "CartridgeMedicalAnalyser", - props( - name = r#"Medical Analyzer"#, - desc = r#"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 = "StructureMediumConvectionRadiator", - props( - name = r#"Medium Convection Radiator"#, - desc = r#"A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere."#, - value = "-1918215845" - ) - )] - StructureMediumConvectionRadiator = -1918215845i32, - #[strum( - serialize = "StructurePassiveLargeRadiatorGas", - props( - name = r#"Medium Convection Radiator"#, - desc = r#"Has been replaced by Medium Convection Radiator."#, - value = "2066977095" - ) - )] - StructurePassiveLargeRadiatorGas = 2066977095i32, - #[strum( - serialize = "StructureMediumConvectionRadiatorLiquid", - props( - name = r#"Medium Convection Radiator Liquid"#, - desc = r#"A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere."#, - value = "-1169014183" - ) - )] - StructureMediumConvectionRadiatorLiquid = -1169014183i32, - #[strum( - serialize = "StructurePassiveLargeRadiatorLiquid", - props( - name = r#"Medium Convection Radiator Liquid"#, - desc = r#"Has been replaced by Medium Convection Radiator Liquid."#, - value = "24786172" - ) - )] - StructurePassiveLargeRadiatorLiquid = 24786172i32, - #[strum( - serialize = "ItemGasFilterCarbonDioxideM", - props( - name = r#"Medium Filter (Carbon Dioxide)"#, - desc = r#""#, - value = "416897318" - ) - )] - ItemGasFilterCarbonDioxideM = 416897318i32, - #[strum( - serialize = "ItemGasFilterNitrogenM", - props( - name = r#"Medium Filter (Nitrogen)"#, - desc = r#""#, - value = "-632657357" - ) - )] - ItemGasFilterNitrogenM = -632657357i32, #[strum( serialize = "ItemGasFilterNitrousOxideM", props( @@ -6258,2141 +9300,6 @@ For more info, check out the music page ) )] ItemGasFilterNitrousOxideM = 1824284061i32, - #[strum( - serialize = "ItemGasFilterOxygenM", - props( - name = r#"Medium Filter (Oxygen)"#, - desc = r#""#, - value = "-1067319543" - ) - )] - ItemGasFilterOxygenM = -1067319543i32, - #[strum( - serialize = "ItemGasFilterPollutantsM", - props( - name = r#"Medium Filter (Pollutants)"#, - desc = r#""#, - value = "63677771" - ) - )] - ItemGasFilterPollutantsM = 63677771i32, - #[strum( - serialize = "ItemGasFilterVolatilesM", - props( - name = r#"Medium Filter (Volatiles)"#, - desc = r#""#, - value = "1037507240" - ) - )] - ItemGasFilterVolatilesM = 1037507240i32, - #[strum( - serialize = "ItemGasFilterWaterM", - props(name = r#"Medium Filter (Water)"#, desc = r#""#, value = "8804422") - )] - ItemGasFilterWaterM = 8804422i32, - #[strum( - serialize = "StructureMediumHangerDoor", - props( - name = r#"Medium Hangar Door"#, - desc = r#"1 x 2 modular door piece for building hangar doors."#, - value = "-566348148" - ) - )] - StructureMediumHangerDoor = -566348148i32, - #[strum( - serialize = "StructureMediumRadiator", - props( - name = r#"Medium Radiator"#, - desc = r#"A stand-alone radiator unit optimized for radiating heat in vacuums."#, - value = "-975966237" - ) - )] - StructureMediumRadiator = -975966237i32, - #[strum( - serialize = "StructureMediumRadiatorLiquid", - props( - name = r#"Medium Radiator Liquid"#, - desc = r#"A stand-alone liquid radiator unit optimized for radiating heat in vacuums."#, - value = "-1141760613" - ) - )] - StructureMediumRadiatorLiquid = -1141760613i32, - #[strum( - serialize = "StructureSatelliteDish", - props( - name = r#"Medium Satellite Dish"#, - desc = r#"This medium communications unit can be used to communicate with nearby trade vessels. - -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."#, - value = "439026183" - ) - )] - StructureSatelliteDish = 439026183i32, - #[strum( - serialize = "Meteorite", - props(name = r#"Meteorite"#, desc = r#""#, value = "-99064335") - )] - Meteorite = -99064335i32, - #[strum( - serialize = "ApplianceMicrowave", - props( - name = r#"Microwave"#, - desc = r#"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. -Just 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 = "StructurePowerTransmitterReceiver", - props( - name = r#"Microwave Power Receiver"#, - desc = r#"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. -The 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 = "StructurePowerTransmitter", - props( - name = r#"Microwave Power Transmitter"#, - desc = r#"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. -The 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 = "ItemMilk", - props( - name = r#"Milk"#, - desc = r#"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 = "ItemMiningBackPack", - props(name = r#"Mining Backpack"#, desc = r#""#, value = "-1650383245") - )] - ItemMiningBackPack = -1650383245i32, - #[strum( - serialize = "ItemMiningBelt", - props( - name = r#"Mining Belt"#, - desc = r#"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 = "ItemMiningBeltMKII", - props( - name = r#"Mining Belt MK II"#, - desc = r#"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 = "ItemMiningCharge", - props( - name = r#"Mining Charge"#, - desc = r#"A low cost, high yield explosive with a 10 second timer."#, - value = "15829510" - ) - )] - ItemMiningCharge = 15829510i32, - #[strum( - serialize = "ItemMiningDrill", - props( - name = r#"Mining Drill"#, - desc = r#"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 = "ItemMiningDrillHeavy", - props( - name = r#"Mining Drill (Heavy)"#, - desc = r#"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 = "ItemRocketMiningDrillHead", - props( - name = r#"Mining-Drill Head (Basic)"#, - desc = r#"Replaceable drill head for Rocket Miner"#, - value = "2109945337" - ) - )] - ItemRocketMiningDrillHead = 2109945337i32, - #[strum( - serialize = "ItemRocketMiningDrillHeadDurable", - props( - name = r#"Mining-Drill Head (Durable)"#, - desc = r#""#, - value = "1530764483" - ) - )] - ItemRocketMiningDrillHeadDurable = 1530764483i32, - #[strum( - serialize = "ItemRocketMiningDrillHeadHighSpeedIce", - props( - name = r#"Mining-Drill Head (High Speed Ice)"#, - desc = r#""#, - value = "653461728" - ) - )] - ItemRocketMiningDrillHeadHighSpeedIce = 653461728i32, - #[strum( - serialize = "ItemRocketMiningDrillHeadHighSpeedMineral", - props( - name = r#"Mining-Drill Head (High Speed Mineral)"#, - desc = r#""#, - value = "1440678625" - ) - )] - ItemRocketMiningDrillHeadHighSpeedMineral = 1440678625i32, - #[strum( - serialize = "ItemRocketMiningDrillHeadIce", - props( - name = r#"Mining-Drill Head (Ice)"#, - desc = r#""#, - value = "-380904592" - ) - )] - ItemRocketMiningDrillHeadIce = -380904592i32, - #[strum( - serialize = "ItemRocketMiningDrillHeadLongTerm", - props( - name = r#"Mining-Drill Head (Long Term)"#, - desc = r#""#, - value = "-684020753" - ) - )] - ItemRocketMiningDrillHeadLongTerm = -684020753i32, - #[strum( - serialize = "ItemRocketMiningDrillHeadMineral", - props( - name = r#"Mining-Drill Head (Mineral)"#, - desc = r#""#, - value = "1083675581" - ) - )] - ItemRocketMiningDrillHeadMineral = 1083675581i32, - #[strum( - serialize = "ItemMKIIAngleGrinder", - props( - name = r#"Mk II Angle Grinder"#, - desc = r#"Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure."#, - value = "240174650" - ) - )] - ItemMkiiAngleGrinder = 240174650i32, - #[strum( - serialize = "ItemMKIIArcWelder", - props(name = r#"Mk II Arc Welder"#, desc = r#""#, value = "-2061979347") - )] - ItemMkiiArcWelder = -2061979347i32, - #[strum( - serialize = "ItemMKIICrowbar", - props( - name = r#"Mk II Crowbar"#, - desc = r#"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 = "ItemMKIIDrill", - props( - name = r#"Mk II Drill"#, - desc = r#"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 = "ItemMKIIDuctTape", - props( - name = r#"Mk II Duct Tape"#, - desc = r#"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. -To use on yourself: put duct tape in your active hand, hold RIGHT MOUSE BUTTON to automatically repair damage."#, - value = "388774906" - ) - )] - ItemMkiiDuctTape = 388774906i32, - #[strum( - serialize = "ItemMKIIMiningDrill", - props( - name = r#"Mk II Mining Drill"#, - desc = r#"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 = "ItemMKIIScrewdriver", - props( - name = r#"Mk II Screwdriver"#, - desc = r#"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 = "ItemMKIIWireCutters", - props( - name = r#"Mk II Wire Cutters"#, - desc = r#"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 = "ItemMKIIWrench", - props( - name = r#"Mk II Wrench"#, - desc = r#"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 = "CircuitboardModeControl", - props( - name = r#"Mode Control"#, - desc = r#"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 = "MothershipCore", - props( - name = r#"Mothership Core"#, - desc = r#"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 = "StructureMotionSensor", - props( - name = r#"Motion Sensor"#, - desc = r#"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. -The sensor activates whenever a player enters the grid it is placed on."#, - value = "-1713470563" - ) - )] - StructureMotionSensor = -1713470563i32, - #[strum( - serialize = "ItemMuffin", - props( - name = r#"Muffin"#, - desc = r#"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 = "ItemMushroom", - props( - name = r#"Mushroom"#, - desc = r#"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 = "SeedBag_Mushroom", - props( - name = r#"Mushroom Seeds"#, - desc = r#"Grow a Mushroom."#, - value = "311593418" - ) - )] - SeedBagMushroom = 311593418i32, - #[strum( - serialize = "CartridgeNetworkAnalyser", - props( - name = r#"Network Analyzer"#, - desc = r#"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 = "ItemNVG", - props(name = r#"Night Vision Goggles"#, desc = r#""#, value = "982514123") - )] - ItemNvg = 982514123i32, - #[strum( - serialize = "StructureNitrolyzer", - props( - name = r#"Nitrolyzer"#, - desc = r#"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 = "StructureHorizontalAutoMiner", - props( - name = r#"OGRE"#, - desc = r#"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. - -The 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. - -MODES -Idle - 0 -Mining - 1 -Returning - 2 -DepostingOre - 3 -Finished - 4 -"#, - value = "1070427573" - ) - )] - StructureHorizontalAutoMiner = 1070427573i32, - #[strum( - serialize = "StructureOccupancySensor", - props( - name = r#"Occupancy Sensor"#, - desc = r#"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 = "StructurePipeOneWayValve", - props( - name = r#"One Way Valve (Gas)"#, - desc = r#"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. -"#, - value = "1580412404" - ) - )] - StructurePipeOneWayValve = 1580412404i32, - #[strum( - serialize = "StructureLiquidPipeOneWayValve", - props( - name = r#"One Way Valve (Liquid)"#, - desc = r#"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.."#, - value = "-782453061" - ) - )] - StructureLiquidPipeOneWayValve = -782453061i32, - #[strum( - serialize = "ItemCoalOre", - props( - name = r#"Ore (Coal)"#, - desc = r#"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 = "ItemCobaltOre", - props( - name = r#"Ore (Cobalt)"#, - desc = r#"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 = "ItemCopperOre", - props( - name = r#"Ore (Copper)"#, - desc = r#"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 = "ItemGoldOre", - props( - name = r#"Ore (Gold)"#, - desc = r#"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 = "ItemIronOre", - props( - name = r#"Ore (Iron)"#, - desc = r#"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 = "ItemLeadOre", - props( - name = r#"Ore (Lead)"#, - desc = r#"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 = "ItemNickelOre", - props( - name = r#"Ore (Nickel)"#, - desc = r#"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 = "ItemSiliconOre", - props( - name = r#"Ore (Silicon)"#, - desc = r#"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 = "ItemSilverOre", - props( - name = r#"Ore (Silver)"#, - desc = r#"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 = "ItemUraniumOre", - props( - name = r#"Ore (Uranium)"#, - desc = r#"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 = "CartridgeOreScanner", - props( - name = r#"Ore Scanner"#, - desc = r#"When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet."#, - value = "-1768732546" - ) - )] - CartridgeOreScanner = -1768732546i32, - #[strum( - serialize = "CartridgeOreScannerColor", - props( - name = r#"Ore Scanner (Color)"#, - desc = r#"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 = "StructureOverheadShortCornerLocker", - props( - name = r#"Overhead Corner Locker"#, - desc = r#""#, - value = "-1794932560" - ) - )] - StructureOverheadShortCornerLocker = -1794932560i32, - #[strum( - serialize = "StructureOverheadShortLocker", - props(name = r#"Overhead Locker"#, desc = r#""#, value = "1468249454") - )] - StructureOverheadShortLocker = 1468249454i32, - #[strum( - serialize = "AppliancePaintMixer", - props(name = r#"Paint Mixer"#, desc = r#""#, value = "-1339716113") - )] - AppliancePaintMixer = -1339716113i32, - #[strum( - serialize = "StructurePassiveLiquidDrain", - props( - name = r#"Passive Liquid Drain"#, - desc = r#"Moves liquids from a pipe network to the world atmosphere."#, - value = "1812364811" - ) - )] - StructurePassiveLiquidDrain = 1812364811i32, - #[strum( - serialize = "StructureFloorDrain", - props( - name = r#"Passive Liquid Inlet"#, - desc = r#"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 = "PassiveSpeaker", - props(name = r#"Passive Speaker"#, desc = r#""#, value = "248893646") - )] - PassiveSpeaker = 248893646i32, - #[strum( - serialize = "ItemPassiveVent", - props( - name = r#"Passive Vent"#, - desc = r#"This kit creates a Passive Vent among other variants."#, - value = "238631271" - ) - )] - ItemPassiveVent = 238631271i32, - #[strum( - serialize = "StructurePassiveVent", - props( - name = r#"Passive Vent"#, - desc = r#"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 = "ItemPeaceLily", - props( - name = r#"Peace Lily"#, - desc = r#"A fetching lily with greater resistance to cold temperatures."#, - value = "2042955224" - ) - )] - ItemPeaceLily = 2042955224i32, - #[strum( - serialize = "ItemPickaxe", - props( - name = r#"Pickaxe"#, - desc = r#"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 = "StructurePictureFrameThickLandscapeLarge", - props( - name = r#"Picture Frame Thick Landscape Large"#, - desc = r#""#, - value = "-1434523206" - ) - )] - StructurePictureFrameThickLandscapeLarge = -1434523206i32, - #[strum( - serialize = "StructurePictureFrameThickMountLandscapeLarge", - props( - name = r#"Picture Frame Thick Landscape Large"#, - desc = r#""#, - value = "950004659" - ) - )] - StructurePictureFrameThickMountLandscapeLarge = 950004659i32, - #[strum( - serialize = "StructurePictureFrameThickLandscapeSmall", - props( - name = r#"Picture Frame Thick Landscape Small"#, - desc = r#""#, - value = "-2041566697" - ) - )] - StructurePictureFrameThickLandscapeSmall = -2041566697i32, - #[strum( - serialize = "StructurePictureFrameThickMountLandscapeSmall", - props( - name = r#"Picture Frame Thick Landscape Small"#, - desc = r#""#, - value = "347154462" - ) - )] - StructurePictureFrameThickMountLandscapeSmall = 347154462i32, - #[strum( - serialize = "StructurePictureFrameThickMountPortraitLarge", - props( - name = r#"Picture Frame Thick Mount Portrait Large"#, - desc = r#""#, - value = "-1459641358" - ) - )] - StructurePictureFrameThickMountPortraitLarge = -1459641358i32, - #[strum( - serialize = "StructurePictureFrameThickMountPortraitSmall", - props( - name = r#"Picture Frame Thick Mount Portrait Small"#, - desc = r#""#, - value = "-2066653089" - ) - )] - StructurePictureFrameThickMountPortraitSmall = -2066653089i32, - #[strum( - serialize = "StructurePictureFrameThickPortraitLarge", - props( - name = r#"Picture Frame Thick Portrait Large"#, - desc = r#""#, - value = "-1686949570" - ) - )] - StructurePictureFrameThickPortraitLarge = -1686949570i32, - #[strum( - serialize = "StructurePictureFrameThickPortraitSmall", - props( - name = r#"Picture Frame Thick Portrait Small"#, - desc = r#""#, - value = "-1218579821" - ) - )] - StructurePictureFrameThickPortraitSmall = -1218579821i32, - #[strum( - serialize = "StructurePictureFrameThinLandscapeLarge", - props( - name = r#"Picture Frame Thin Landscape Large"#, - desc = r#""#, - value = "-1418288625" - ) - )] - StructurePictureFrameThinLandscapeLarge = -1418288625i32, - #[strum( - serialize = "StructurePictureFrameThinMountLandscapeLarge", - props( - name = r#"Picture Frame Thin Landscape Large"#, - desc = r#""#, - value = "-1146760430" - ) - )] - StructurePictureFrameThinMountLandscapeLarge = -1146760430i32, - #[strum( - serialize = "StructurePictureFrameThinMountLandscapeSmall", - props( - name = r#"Picture Frame Thin Landscape Small"#, - desc = r#""#, - value = "-1752493889" - ) - )] - StructurePictureFrameThinMountLandscapeSmall = -1752493889i32, - #[strum( - serialize = "StructurePictureFrameThinLandscapeSmall", - props( - name = r#"Picture Frame Thin Landscape Small"#, - desc = r#""#, - value = "-2024250974" - ) - )] - StructurePictureFrameThinLandscapeSmall = -2024250974i32, - #[strum( - serialize = "StructurePictureFrameThinPortraitLarge", - props( - name = r#"Picture Frame Thin Portrait Large"#, - desc = r#""#, - value = "1212777087" - ) - )] - StructurePictureFrameThinPortraitLarge = 1212777087i32, - #[strum( - serialize = "StructurePictureFrameThinMountPortraitLarge", - props( - name = r#"Picture Frame Thin Portrait Large"#, - desc = r#""#, - value = "1094895077" - ) - )] - StructurePictureFrameThinMountPortraitLarge = 1094895077i32, - #[strum( - serialize = "StructurePictureFrameThinMountPortraitSmall", - props( - name = r#"Picture Frame Thin Portrait Small"#, - desc = r#""#, - value = "1835796040" - ) - )] - StructurePictureFrameThinMountPortraitSmall = 1835796040i32, - #[strum( - serialize = "StructurePictureFrameThinPortraitSmall", - props( - name = r#"Picture Frame Thin Portrait Small"#, - desc = r#""#, - value = "1684488658" - ) - )] - StructurePictureFrameThinPortraitSmall = 1684488658i32, - #[strum( - serialize = "ItemPillHeal", - props( - name = r#"Pill (Medical)"#, - desc = r#"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 = "ItemPillStun", - props( - name = r#"Pill (Paralysis)"#, - desc = r#"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 = "StructurePipeCrossJunction3", - props( - name = r#"Pipe (3-Way Junction)"#, - desc = r#"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 = "StructurePipeCrossJunction4", - props( - name = r#"Pipe (4-Way Junction)"#, - desc = r#"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 = "StructurePipeCrossJunction5", - props( - name = r#"Pipe (5-Way Junction)"#, - desc = r#"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 = "StructurePipeCrossJunction6", - props( - name = r#"Pipe (6-Way Junction)"#, - desc = r#"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 = "StructurePipeCorner", - props( - name = r#"Pipe (Corner)"#, - desc = r#"You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench."#, - value = "-1785673561" - ) - )] - StructurePipeCorner = -1785673561i32, - #[strum( - serialize = "StructurePipeCrossJunction", - props( - name = r#"Pipe (Cross Junction)"#, - desc = r#"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 = "StructurePipeStraight", - props( - name = r#"Pipe (Straight)"#, - desc = r#"You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench."#, - value = "73728932" - ) - )] - StructurePipeStraight = 73728932i32, - #[strum( - serialize = "StructurePipeTJunction", - props( - name = r#"Pipe (T Junction)"#, - desc = r#"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 = "StructurePipeAnalysizer", - props( - name = r#"Pipe Analyzer"#, - desc = r#"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. -Displaying 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."#, - value = "435685051" - ) - )] - StructurePipeAnalysizer = 435685051i32, - #[strum( - serialize = "PipeBenderMod", - props( - name = r#"Pipe Bender Mod"#, - desc = r#"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 = "StructurePipeRadiator", - props( - name = r#"Pipe Convection Radiator"#, - desc = r#"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. -The 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 = "StructurePipeCowl", - props(name = r#"Pipe Cowl"#, desc = r#""#, value = "465816159") - )] - StructurePipeCowl = 465816159i32, - #[strum( - serialize = "ItemPipeCowl", - props( - name = r#"Pipe Cowl"#, - desc = r#"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 = "StructurePipeHeater", - props( - name = r#"Pipe Heater (Gas)"#, - desc = r#"Adds 1000 joules of heat per tick to the contents of your pipe network."#, - value = "-419758574" - ) - )] - StructurePipeHeater = -419758574i32, - #[strum( - serialize = "StructureLiquidPipeHeater", - props( - name = r#"Pipe Heater (Liquid)"#, - desc = r#"Adds 1000 joules of heat per tick to the contents of your pipe network."#, - value = "-287495560" - ) - )] - StructureLiquidPipeHeater = -287495560i32, - #[strum( - serialize = "ItemPipeHeater", - props( - name = r#"Pipe Heater Kit (Gas)"#, - desc = r#"Creates a Pipe Heater (Gas)."#, - value = "-1751627006" - ) - )] - ItemPipeHeater = -1751627006i32, - #[strum( - serialize = "ItemLiquidPipeHeater", - props( - name = r#"Pipe Heater Kit (Liquid)"#, - desc = r#"Creates a Pipe Heater (Liquid)."#, - value = "-248475032" - ) - )] - ItemLiquidPipeHeater = -248475032i32, - #[strum( - serialize = "StructurePipeIgniter", - props( - name = r#"Pipe Igniter"#, - desc = r#"Ignites the atmosphere inside the attached pipe network."#, - value = "1286441942" - ) - )] - StructurePipeIgniter = 1286441942i32, - #[strum( - serialize = "StructurePipeLabel", - props( - name = r#"Pipe Label"#, - desc = r#"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 = "StructurePipeMeter", - props( - name = r#"Pipe Meter"#, - desc = r#"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: -"Humble pipe meter -speaks the truth, transmits pressure -within any pipe""#, - value = "-1798362329" - ) - )] - StructurePipeMeter = -1798362329i32, - #[strum( - serialize = "StructurePipeOrgan", - props( - name = r#"Pipe Organ"#, - desc = r#"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 = "StructurePipeRadiatorFlat", - props( - name = r#"Pipe Radiator"#, - desc = r#"A pipe mounted radiator optimized for radiating heat in vacuums."#, - value = "-399883995" - ) - )] - StructurePipeRadiatorFlat = -399883995i32, - #[strum( - serialize = "StructurePipeRadiatorFlatLiquid", - props( - name = r#"Pipe Radiator Liquid"#, - desc = r#"A liquid pipe mounted radiator optimized for radiating heat in vacuums."#, - value = "2024754523" - ) - )] - StructurePipeRadiatorFlatLiquid = 2024754523i32, - #[strum( - serialize = "AppliancePlantGeneticAnalyzer", - props( - name = r#"Plant Genetic Analyzer"#, - desc = r#"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. - -Individual Gene Value Widgets: -Most 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. - -Multiple Gene Value Widgets: -For 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 = "AppliancePlantGeneticSplicer", - props( - name = r#"Plant Genetic Splicer"#, - desc = r#"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. - -To 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 = "AppliancePlantGeneticStabilizer", - props( - name = r#"Plant Genetic Stabilizer"#, - desc = r#"The Genetic Stabilizer can be used to manipulate gene stability on a specific Plants or Seeds. It has two modes Stabilize and Destabilize. -Stabilize: Increases all genes stability by 50%. -Destabilize: Decreases all gene stability by 10% other than a chosen gene which will received decreased stability by 50%. - "#, - value = "871432335" - ) - )] - AppliancePlantGeneticStabilizer = 871432335i32, - #[strum( - serialize = "ItemPlantSampler", - props( - name = r#"Plant Sampler"#, - desc = r#"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 = "StructurePlanter", - props( - name = r#"Planter"#, - desc = r#"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 = "ItemPlasticSheets", - props(name = r#"Plastic Sheets"#, desc = r#""#, value = "662053345") - )] - ItemPlasticSheets = 662053345i32, - #[strum( - serialize = "StructurePlinth", - props(name = r#"Plinth"#, desc = r#""#, value = "989835703") - )] - StructurePlinth = 989835703i32, - #[strum( - serialize = "ItemMiningDrillPneumatic", - props( - name = r#"Pneumatic Mining Drill"#, - desc = r#"0.Default -1.Flatten"#, - value = "1258187304" - ) - )] - ItemMiningDrillPneumatic = 1258187304i32, - #[strum( - serialize = "DynamicAirConditioner", - props( - name = r#"Portable Air Conditioner"#, - desc = r#"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 = "DynamicScrubber", - props( - name = r#"Portable Air Scrubber"#, - desc = r#"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 = "PortableComposter", - props( - name = r#"Portable Composter"#, - desc = r#"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. -When processing, it releases nitrogen and volatiles, as well a small amount of heat. - -Compost composition -Fertilizer 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. - -- food increases PLANT YIELD up to two times -- Decayed Food increases plant GROWTH SPEED up to two times -- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for"#, - value = "-1958705204" - ) - )] - PortableComposter = -1958705204i32, - #[strum( - serialize = "DynamicGasCanisterEmpty", - props( - name = r#"Portable Gas Tank"#, - desc = r#"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 = "DynamicGasCanisterAir", - props( - name = r#"Portable Gas Tank (Air)"#, - desc = r#"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 = "DynamicGasCanisterCarbonDioxide", - props( - name = r#"Portable Gas Tank (CO2)"#, - desc = r#"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 = "DynamicGasCanisterFuel", - props( - name = r#"Portable Gas Tank (Fuel)"#, - desc = r#"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 = "DynamicGasCanisterNitrogen", - props( - name = r#"Portable Gas Tank (Nitrogen)"#, - desc = r#"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 = "DynamicGasCanisterNitrousOxide", - props( - name = r#"Portable Gas Tank (Nitrous Oxide)"#, - desc = r#""#, - value = "30727200" - ) - )] - DynamicGasCanisterNitrousOxide = 30727200i32, - #[strum( - serialize = "DynamicGasCanisterOxygen", - props( - name = r#"Portable Gas Tank (Oxygen)"#, - desc = r#"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 = "DynamicGasCanisterPollutants", - props( - name = r#"Portable Gas Tank (Pollutants)"#, - desc = r#""#, - value = "396065382" - ) - )] - DynamicGasCanisterPollutants = 396065382i32, - #[strum( - serialize = "DynamicGasCanisterVolatiles", - props( - name = r#"Portable Gas Tank (Volatiles)"#, - desc = r#"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 = "DynamicGasTankAdvancedOxygen", - props( - name = r#"Portable Gas Tank Mk II (Oxygen)"#, - desc = r#"0.Mode0 -1.Mode1"#, - value = "-1264455519" - ) - )] - DynamicGasTankAdvancedOxygen = -1264455519i32, - #[strum( - serialize = "DynamicGenerator", - props( - name = r#"Portable Generator"#, - desc = r#"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 = "DynamicHydroponics", - props(name = r#"Portable Hydroponics"#, desc = r#""#, value = "587726607") - )] - DynamicHydroponics = 587726607i32, - #[strum( - serialize = "DynamicLight", - props( - name = r#"Portable Light"#, - desc = r#"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 = "DynamicLiquidCanisterEmpty", - props( - name = r#"Portable Liquid Tank"#, - desc = r#"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 = "DynamicGasCanisterWater", - props( - name = r#"Portable Liquid Tank (Water)"#, - desc = r#"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. -Try to keep pressure under 10 MPa, or you'll end up wet, hurt and sorry, without any of the fun. -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 = "197293625" - ) - )] - DynamicGasCanisterWater = 197293625i32, - #[strum( - serialize = "DynamicMKIILiquidCanisterEmpty", - props( - name = r#"Portable Liquid Tank Mk II"#, - desc = r#"An empty, insulated liquid Gas Canister."#, - value = "2130739600" - ) - )] - DynamicMkiiLiquidCanisterEmpty = 2130739600i32, - #[strum( - serialize = "DynamicMKIILiquidCanisterWater", - props( - name = r#"Portable Liquid Tank Mk II (Water)"#, - desc = r#"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 = "PortableSolarPanel", - props(name = r#"Portable Solar Panel"#, desc = r#""#, value = "2043318949") - )] - PortableSolarPanel = 2043318949i32, - #[strum( - serialize = "StructurePortablesConnector", - props(name = r#"Portables Connector"#, desc = r#""#, value = "-899013427") - )] - StructurePortablesConnector = -899013427i32, - #[strum( - serialize = "ItemPotato", - props( - name = r#"Potato"#, - desc = r#" Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies."#, - value = "1929046963" - ) - )] - ItemPotato = 1929046963i32, - #[strum( - serialize = "SeedBag_Potato", - props( - name = r#"Potato Seeds"#, - desc = r#"Grow a Potato."#, - value = "1005571172" - ) - )] - SeedBagPotato = 1005571172i32, - #[strum( - serialize = "ItemCookedPowderedEggs", - props( - name = r#"Powdered Eggs"#, - desc = r#"A high-nutrient cooked food, which can be canned."#, - value = "-1712264413" - ) - )] - ItemCookedPowderedEggs = -1712264413i32, - #[strum( - serialize = "StructurePowerConnector", - props( - name = r#"Power Connector"#, - desc = r#"Attaches a Kit (Portable Generator) to a power network."#, - value = "-782951720" - ) - )] - StructurePowerConnector = -782951720i32, - #[strum( - serialize = "CircuitboardPowerControl", - props( - name = r#"Power Control"#, - desc = r#"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. - -The 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 = "StructurePowerTransmitterOmni", - props(name = r#"Power Transmitter Omni"#, desc = r#""#, value = "-327468845") - )] - StructurePowerTransmitterOmni = -327468845i32, - #[strum( - serialize = "StructureBench", - props( - name = r#"Powered Bench"#, - desc = r#"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 = "StructurePoweredVent", - props( - name = r#"Powered Vent"#, - desc = r#"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 = "StructurePoweredVentLarge", - props( - name = r#"Powered Vent Large"#, - desc = r#"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 = "StructurePressurantValve", - props( - name = r#"Pressurant Valve"#, - desc = r#"Pumps gas into a liquid pipe in order to raise the pressure"#, - value = "23052817" - ) - )] - StructurePressurantValve = 23052817i32, - #[strum( - serialize = "StructurePressureFedGasEngine", - props( - name = r#"Pressure Fed Gas Engine"#, - desc = r#"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 = "StructurePressureFedLiquidEngine", - props( - name = r#"Pressure Fed Liquid Engine"#, - desc = r#"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 = "StructurePressureRegulator", - props( - name = r#"Pressure Regulator"#, - desc = r#"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 = "StructureProximitySensor", - props( - name = r#"Proximity Sensor"#, - desc = r#"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 = "StructureGovernedGasEngine", - props( - name = r#"Pumped Gas Engine"#, - desc = r#"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 = "StructurePumpedLiquidEngine", - props( - name = r#"Pumped Liquid Engine"#, - desc = r#"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 = "ItemPumpkin", - props( - name = r#"Pumpkin"#, - desc = r#"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 = "ItemPumpkinPie", - props(name = r#"Pumpkin Pie"#, desc = r#""#, value = "62768076") - )] - ItemPumpkinPie = 62768076i32, - #[strum( - serialize = "SeedBag_Pumpkin", - props( - name = r#"Pumpkin Seeds"#, - desc = r#"Grow a Pumpkin."#, - value = "1423199840" - ) - )] - SeedBagPumpkin = 1423199840i32, - #[strum( - serialize = "ItemPumpkinSoup", - props( - name = r#"Pumpkin Soup"#, - desc = r#"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 = "ItemPureIceCarbonDioxide", - props( - name = r#"Pure Ice Carbon Dioxide"#, - desc = r#"A frozen chunk of pure Carbon Dioxide"#, - value = "-1251009404" - ) - )] - ItemPureIceCarbonDioxide = -1251009404i32, - #[strum( - serialize = "ItemPureIceHydrogen", - props( - name = r#"Pure Ice Hydrogen"#, - desc = r#"A frozen chunk of pure Hydrogen"#, - value = "944530361" - ) - )] - ItemPureIceHydrogen = 944530361i32, - #[strum( - serialize = "ItemPureIceLiquidCarbonDioxide", - props( - name = r#"Pure Ice Liquid Carbon Dioxide"#, - desc = r#"A frozen chunk of pure Liquid Carbon Dioxide"#, - value = "-1715945725" - ) - )] - ItemPureIceLiquidCarbonDioxide = -1715945725i32, - #[strum( - serialize = "ItemPureIceLiquidHydrogen", - props( - name = r#"Pure Ice Liquid Hydrogen"#, - desc = r#"A frozen chunk of pure Liquid Hydrogen"#, - value = "-1044933269" - ) - )] - ItemPureIceLiquidHydrogen = -1044933269i32, - #[strum( - serialize = "ItemPureIceLiquidNitrogen", - props( - name = r#"Pure Ice Liquid Nitrogen"#, - desc = r#"A frozen chunk of pure Liquid Nitrogen"#, - value = "1674576569" - ) - )] - ItemPureIceLiquidNitrogen = 1674576569i32, - #[strum( - serialize = "ItemPureIceLiquidNitrous", - props( - name = r#"Pure Ice Liquid Nitrous"#, - desc = r#"A frozen chunk of pure Liquid Nitrous Oxide"#, - value = "1428477399" - ) - )] - ItemPureIceLiquidNitrous = 1428477399i32, - #[strum( - serialize = "ItemPureIceLiquidOxygen", - props( - name = r#"Pure Ice Liquid Oxygen"#, - desc = r#"A frozen chunk of pure Liquid Oxygen"#, - value = "541621589" - ) - )] - ItemPureIceLiquidOxygen = 541621589i32, - #[strum( - serialize = "ItemPureIceLiquidPollutant", - props( - name = r#"Pure Ice Liquid Pollutant"#, - desc = r#"A frozen chunk of pure Liquid Pollutant"#, - value = "-1748926678" - ) - )] - ItemPureIceLiquidPollutant = -1748926678i32, - #[strum( - serialize = "ItemPureIceLiquidVolatiles", - props( - name = r#"Pure Ice Liquid Volatiles"#, - desc = r#"A frozen chunk of pure Liquid Volatiles"#, - value = "-1306628937" - ) - )] - ItemPureIceLiquidVolatiles = -1306628937i32, - #[strum( - serialize = "ItemPureIceNitrogen", - props( - name = r#"Pure Ice Nitrogen"#, - desc = r#"A frozen chunk of pure Nitrogen"#, - value = "-1708395413" - ) - )] - ItemPureIceNitrogen = -1708395413i32, - #[strum( - serialize = "ItemPureIceNitrous", - props( - name = r#"Pure Ice NitrousOxide"#, - desc = r#"A frozen chunk of pure Nitrous Oxide"#, - value = "386754635" - ) - )] - ItemPureIceNitrous = 386754635i32, - #[strum( - serialize = "ItemPureIceOxygen", - props( - name = r#"Pure Ice Oxygen"#, - desc = r#"A frozen chunk of pure Oxygen"#, - value = "-1150448260" - ) - )] - ItemPureIceOxygen = -1150448260i32, - #[strum( - serialize = "ItemPureIcePollutant", - props( - name = r#"Pure Ice Pollutant"#, - desc = r#"A frozen chunk of pure Pollutant"#, - value = "-1755356" - ) - )] - ItemPureIcePollutant = -1755356i32, - #[strum( - serialize = "ItemPureIcePollutedWater", - props( - name = r#"Pure Ice Polluted Water"#, - desc = r#"A frozen chunk of Polluted Water"#, - value = "-2073202179" - ) - )] - ItemPureIcePollutedWater = -2073202179i32, - #[strum( - serialize = "ItemPureIceSteam", - props( - name = r#"Pure Ice Steam"#, - desc = r#"A frozen chunk of pure Steam"#, - value = "-874791066" - ) - )] - ItemPureIceSteam = -874791066i32, - #[strum( - serialize = "ItemPureIceVolatiles", - props( - name = r#"Pure Ice Volatiles"#, - desc = r#"A frozen chunk of pure Volatiles"#, - value = "-633723719" - ) - )] - ItemPureIceVolatiles = -633723719i32, - #[strum( - serialize = "ItemPureIce", - props( - name = r#"Pure Ice Water"#, - desc = r#"A frozen chunk of pure Water"#, - value = "-1616308158" - ) - )] - ItemPureIce = -1616308158i32, - #[strum( - serialize = "StructurePurgeValve", - props( - name = r#"Purge Valve"#, - desc = r#"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 = "RailingElegant01", - props( - name = r#"Railing Elegant (Type 1)"#, - desc = r#""#, - value = "399661231" - ) - )] - RailingElegant01 = 399661231i32, - #[strum( - serialize = "RailingElegant02", - props( - name = r#"Railing Elegant (Type 2)"#, - desc = r#""#, - value = "-1898247915" - ) - )] - RailingElegant02 = -1898247915i32, - #[strum( - serialize = "StructureRailing", - props( - name = r#"Railing Industrial (Type 1)"#, - desc = r#""Safety third.""#, - value = "-1756913871" - ) - )] - StructureRailing = -1756913871i32, - #[strum( - serialize = "RailingIndustrial02", - props( - name = r#"Railing Industrial (Type 2)"#, - desc = r#""#, - value = "-2072792175" - ) - )] - RailingIndustrial02 = -2072792175i32, - #[strum( - serialize = "ItemReagentMix", - props( - name = r#"Reagent Mix"#, - desc = r#"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 = "ApplianceReagentProcessor", - props( - name = r#"Reagent Processor"#, - desc = r#"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 = "StructureLogicReagentReader", - props(name = r#"Reagent Reader"#, desc = r#""#, value = "-124308857") - )] - StructureLogicReagentReader = -124308857i32, - #[strum( - serialize = "StructureRecycler", - props( - name = r#"Recycler"#, - desc = r#"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 = "StructureRefrigeratedVendingMachine", - props( - name = r#"Refrigerated Vending Machine"#, - desc = r#"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. -The 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. -NOTE: altering stack sizes DOES NOT update existing stacks within the machine, only those subsequently added. "#, - value = "-1577831321" - ) - )] - StructureRefrigeratedVendingMachine = -1577831321i32, - #[strum( - serialize = "StructureReinforcedCompositeWindowSteel", - props( - name = r#"Reinforced Window (Composite Steel)"#, - desc = r#"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 = "StructureReinforcedCompositeWindow", - props( - name = r#"Reinforced Window (Composite)"#, - desc = r#"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 = "StructureReinforcedWallPaddedWindow", - props( - name = r#"Reinforced Window (Padded)"#, - desc = r#"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 = "StructureReinforcedWallPaddedWindowThin", - props( - name = r#"Reinforced Window (Thin)"#, - desc = r#"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 = "ItemRemoteDetonator", - props(name = r#"Remote Detonator"#, desc = r#""#, value = "678483886") - )] - ItemRemoteDetonator = 678483886i32, - #[strum( - serialize = "ItemExplosive", - props(name = r#"Remote Explosive"#, desc = r#""#, value = "235361649") - )] - ItemExplosive = 235361649i32, - #[strum( - serialize = "ItemResearchCapsule", - props(name = r#"Research Capsule Blue"#, desc = r#""#, value = "819096942") - )] - ItemResearchCapsule = 819096942i32, - #[strum( - serialize = "ItemResearchCapsuleGreen", - props( - name = r#"Research Capsule Green"#, - desc = r#""#, - value = "-1352732550" - ) - )] - ItemResearchCapsuleGreen = -1352732550i32, - #[strum( - serialize = "ItemResearchCapsuleRed", - props(name = r#"Research Capsule Red"#, desc = r#""#, value = "954947943") - )] - ItemResearchCapsuleRed = 954947943i32, - #[strum( - serialize = "ItemResearchCapsuleYellow", - props(name = r#"Research Capsule Yellow"#, desc = r#""#, value = "750952701") - )] - ItemResearchCapsuleYellow = 750952701i32, - #[strum( - serialize = "StructureResearchMachine", - props(name = r#"Research Machine"#, desc = r#""#, value = "-796627526") - )] - StructureResearchMachine = -796627526i32, - #[strum( - serialize = "RespawnPoint", - props( - name = r#"Respawn Point"#, - desc = r#"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 = "RespawnPointWallMounted", - props( - name = r#"Respawn Point (Mounted)"#, - desc = r#""#, - value = "-491247370" - ) - )] - RespawnPointWallMounted = -491247370i32, - #[strum( - serialize = "ItemRice", - props( - name = r#"Rice"#, - desc = r#"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 = "SeedBag_Rice", - props( - name = r#"Rice Seeds"#, - desc = r#"Grow some Rice."#, - value = "-1691151239" - ) - )] - SeedBagRice = -1691151239i32, - #[strum( - serialize = "ItemRoadFlare", - props( - name = r#"Road Flare"#, - desc = r#"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 = "StructureRocketAvionics", - props(name = r#"Rocket Avionics"#, desc = r#""#, value = "808389066") - )] - StructureRocketAvionics = 808389066i32, - #[strum( - serialize = "StructureRocketCelestialTracker", - props( - name = r#"Rocket Celestial Tracker"#, - desc = r#"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 = "StructureRocketCircuitHousing", - props(name = r#"Rocket Circuit Housing"#, desc = r#""#, value = "150135861") - )] - StructureRocketCircuitHousing = 150135861i32, - #[strum( - serialize = "MotherboardRockets", - props( - name = r#"Rocket Control Motherboard"#, - desc = r#""#, - value = "-806986392" - ) - )] - MotherboardRockets = -806986392i32, - #[strum( - serialize = "StructureRocketEngineTiny", - props(name = r#"Rocket Engine (Tiny)"#, desc = r#""#, value = "178472613") - )] - StructureRocketEngineTiny = 178472613i32, - #[strum( - serialize = "StructureRocketManufactory", - props(name = r#"Rocket Manufactory"#, desc = r#""#, value = "1781051034") - )] - StructureRocketManufactory = 1781051034i32, - #[strum( - serialize = "StructureRocketMiner", - props( - name = r#"Rocket Miner"#, - desc = r#"Gathers available resources at the rocket's current space location."#, - value = "-2087223687" - ) - )] - StructureRocketMiner = -2087223687i32, - #[strum( - serialize = "StructureRocketScanner", - props(name = r#"Rocket Scanner"#, desc = r#""#, value = "2014252591") - )] - StructureRocketScanner = 2014252591i32, - #[strum( - serialize = "ItemRocketScanningHead", - props(name = r#"Rocket Scanner Head"#, desc = r#""#, value = "-1198702771") - )] - ItemRocketScanningHead = -1198702771i32, - #[strum( - serialize = "RoverCargo", - props( - name = r#"Rover (Cargo)"#, - desc = r#"Connects to Logic Transmitter"#, - value = "350726273" - ) - )] - RoverCargo = 350726273i32, - #[strum( - serialize = "StructureRover", - props(name = r#"Rover Frame"#, desc = r#""#, value = "806513938") - )] - StructureRover = 806513938i32, - #[strum( - serialize = "Rover_MkI_build_states", - props(name = r#"Rover MKI"#, desc = r#""#, value = "861674123") - )] - RoverMkIBuildStates = 861674123i32, - #[strum( - serialize = "Rover_MkI", - props( - name = r#"Rover MkI"#, - desc = r#"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). -A 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 = "StructureSDBHopper", - props(name = r#"SDB Hopper"#, desc = r#""#, value = "-1875856925") - )] - StructureSdbHopper = -1875856925i32, - #[strum( - serialize = "StructureSDBHopperAdvanced", - props(name = r#"SDB Hopper Advanced"#, desc = r#""#, value = "467225612") - )] - StructureSdbHopperAdvanced = 467225612i32, - #[strum( - serialize = "StructureSDBSilo", - props( - name = r#"SDB Silo"#, - desc = r#"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 = "SMGMagazine", - props(name = r#"SMG Magazine"#, desc = r#""#, value = "-256607540") - )] - SmgMagazine = -256607540i32, - #[strum( - serialize = "ItemScrewdriver", - props( - name = r#"Screwdriver"#, - desc = r#"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 = "ItemSecurityCamera", - props( - name = r#"Security Camera"#, - desc = r#"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 = "StructureSecurityPrinter", - props( - name = r#"Security Printer"#, - desc = r#"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. -"#, - value = "-641491515" - ) - )] - StructureSecurityPrinter = -641491515i32, - #[strum( - serialize = "ItemSensorLenses", - props( - name = r#"Sensor Lenses"#, - desc = r#"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 = "ItemSensorProcessingUnitCelestialScanner", - props( - name = r#"Sensor Processing Unit (Celestial Scanner)"#, - desc = r#""#, - value = "-1154200014" - ) - )] - ItemSensorProcessingUnitCelestialScanner = -1154200014i32, - #[strum( - serialize = "ItemSensorProcessingUnitOreScanner", - props( - name = r#"Sensor Processing Unit (Ore Scanner)"#, - desc = r#"The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD."#, - value = "-1219128491" - ) - )] - ItemSensorProcessingUnitOreScanner = -1219128491i32, - #[strum( - serialize = "ItemSensorProcessingUnitMesonScanner", - props( - name = r#"Sensor Processing Unit (T-Ray Scanner)"#, - desc = r#"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 = "StructureShelf", - props(name = r#"Shelf"#, desc = r#""#, value = "1172114950") - )] - StructureShelf = 1172114950i32, - #[strum( - serialize = "StructureShelfMedium", - props( - name = r#"Shelf Medium"#, - desc = r#"A shelf for putting things on, so you can see them."#, - value = "182006674" - ) - )] - StructureShelfMedium = 182006674i32, - #[strum( - serialize = "CircuitboardShipDisplay", - props( - name = r#"Ship Display"#, - desc = r#"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 = "StructureShortCornerLocker", - props(name = r#"Short Corner Locker"#, desc = r#""#, value = "1330754486") - )] - StructureShortCornerLocker = 1330754486i32, - #[strum( - serialize = "StructureShortLocker", - props(name = r#"Short Locker"#, desc = r#""#, value = "-554553467") - )] - StructureShortLocker = -554553467i32, - #[strum( - serialize = "StructureShower", - props(name = r#"Shower"#, desc = r#""#, value = "-775128944") - )] - StructureShower = -775128944i32, - #[strum( - serialize = "StructureShowerPowered", - props(name = r#"Shower (Powered)"#, desc = r#""#, value = "-1081797501") - )] - StructureShowerPowered = -1081797501i32, - #[strum( - serialize = "StructureSign1x1", - props(name = r#"Sign 1x1"#, desc = r#""#, value = "879058460") - )] - StructureSign1X1 = 879058460i32, - #[strum( - serialize = "StructureSign2x1", - props(name = r#"Sign 2x1"#, desc = r#""#, value = "908320837") - )] - StructureSign2X1 = 908320837i32, - #[strum( - serialize = "StructureSingleBed", - props( - name = r#"Single Bed"#, - desc = r#"Description coming."#, - value = "-492611" - ) - )] - StructureSingleBed = -492611i32, - #[strum( - serialize = "DynamicSkeleton", - props(name = r#"Skeleton"#, desc = r#""#, value = "106953348") - )] - DynamicSkeleton = 106953348i32, - #[strum( - serialize = "StructureSleeper", - props(name = r#"Sleeper"#, desc = r#""#, value = "-1467449329") - )] - StructureSleeper = -1467449329i32, - #[strum( - serialize = "StructureSleeperLeft", - props( - name = r#"Sleeper Left"#, - desc = r#"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 = "StructureSleeperRight", - props( - name = r#"Sleeper Right"#, - desc = r#"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 = "StructureSleeperVertical", - props( - name = r#"Sleeper Vertical"#, - desc = r#"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 = "StructureLogicSlotReader", - props(name = r#"Slot Reader"#, desc = r#""#, value = "-767867194") - )] - StructureLogicSlotReader = -767867194i32, - #[strum( - serialize = "StructureSmallTableBacklessDouble", - props( - name = r#"Small (Table Backless Double)"#, - desc = r#""#, - value = "-1633000411" - ) - )] - StructureSmallTableBacklessDouble = -1633000411i32, - #[strum( - serialize = "StructureSmallTableBacklessSingle", - props( - name = r#"Small (Table Backless Single)"#, - desc = r#""#, - value = "-1897221677" - ) - )] - StructureSmallTableBacklessSingle = -1897221677i32, - #[strum( - serialize = "StructureSmallTableDinnerSingle", - props( - name = r#"Small (Table Dinner Single)"#, - desc = r#""#, - value = "1260651529" - ) - )] - StructureSmallTableDinnerSingle = 1260651529i32, - #[strum( - serialize = "StructureSmallTableRectangleDouble", - props( - name = r#"Small (Table Rectangle Double)"#, - desc = r#""#, - value = "-660451023" - ) - )] - StructureSmallTableRectangleDouble = -660451023i32, - #[strum( - serialize = "StructureSmallTableRectangleSingle", - props( - name = r#"Small (Table Rectangle Single)"#, - desc = r#""#, - value = "-924678969" - ) - )] - StructureSmallTableRectangleSingle = -924678969i32, - #[strum( - serialize = "StructureSmallTableThickDouble", - props( - name = r#"Small (Table Thick Double)"#, - desc = r#""#, - value = "-19246131" - ) - )] - StructureSmallTableThickDouble = -19246131i32, - #[strum( - serialize = "StructureSmallDirectHeatExchangeGastoGas", - props( - name = r#"Small Direct Heat Exchanger - Gas + Gas"#, - desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, - value = "1310303582" - ) - )] - StructureSmallDirectHeatExchangeGastoGas = 1310303582i32, #[strum( serialize = "StructureSmallDirectHeatExchangeLiquidtoGas", props( @@ -8403,1362 +9310,42 @@ A quad-array of hub-mounted electric engines propels the reinforced aluminium fr )] StructureSmallDirectHeatExchangeLiquidtoGas = 1825212016i32, #[strum( - serialize = "StructureSmallDirectHeatExchangeLiquidtoLiquid", + serialize = "ItemKitRoverFrame", + props(name = r#"Kit (Rover Frame)"#, desc = r#""#, value = "1827215803") + )] + ItemKitRoverFrame = 1827215803i32, + #[strum( + serialize = "ItemNickelOre", props( - name = r#"Small Direct Heat Exchanger - Liquid + Liquid"#, - desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, - value = "-507770416" + name = r#"Ore (Nickel)"#, + desc = r#"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" ) )] - StructureSmallDirectHeatExchangeLiquidtoLiquid = -507770416i32, + ItemNickelOre = 1830218956i32, #[strum( - serialize = "StructureFlagSmall", - props(name = r#"Small Flag"#, desc = r#""#, value = "-1529819532") - )] - StructureFlagSmall = -1529819532i32, - #[strum( - serialize = "StructureAirlockGate", + serialize = "StructurePictureFrameThinMountPortraitSmall", props( - name = r#"Small Hangar Door"#, - desc = r#"1 x 1 modular door piece for building hangar doors."#, - value = "1736080881" - ) - )] - StructureAirlockGate = 1736080881i32, - #[strum( - serialize = "StructureSmallSatelliteDish", - props( - name = r#"Small Satellite Dish"#, - desc = r#"This small communications unit can be used to communicate with nearby trade vessels. - - 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."#, - value = "-2138748650" - ) - )] - StructureSmallSatelliteDish = -2138748650i32, - #[strum( - serialize = "StructureSmallTableThickSingle", - props( - name = r#"Small Table (Thick Single)"#, + name = r#"Picture Frame Thin Portrait Small"#, desc = r#""#, - value = "-291862981" + value = "1835796040" ) )] - StructureSmallTableThickSingle = -291862981i32, + StructurePictureFrameThinMountPortraitSmall = 1835796040i32, #[strum( - serialize = "StructureTankSmall", - props(name = r#"Small Tank"#, desc = r#""#, value = "1013514688") - )] - StructureTankSmall = 1013514688i32, - #[strum( - serialize = "StructureTankSmallAir", - props(name = r#"Small Tank (Air)"#, desc = r#""#, value = "955744474") - )] - StructureTankSmallAir = 955744474i32, - #[strum( - serialize = "StructureTankSmallFuel", - props(name = r#"Small Tank (Fuel)"#, desc = r#""#, value = "2102454415") - )] - StructureTankSmallFuel = 2102454415i32, - #[strum( - serialize = "CircuitboardSolarControl", - props( - name = r#"Solar Control"#, - desc = r#"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 = "StructureSolarPanel", - props( - name = r#"Solar Panel"#, - desc = r#"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 = "StructureSolarPanel45", - props( - name = r#"Solar Panel (Angled)"#, - desc = r#"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 = "StructureSolarPanelDual", - props( - name = r#"Solar Panel (Dual)"#, - desc = r#"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 = "StructureSolarPanelFlat", - props( - name = r#"Solar Panel (Flat)"#, - desc = r#"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 = "StructureSolarPanel45Reinforced", - props( - name = r#"Solar Panel (Heavy Angled)"#, - desc = r#"This solar panel is resistant to storm damage."#, - value = "930865127" - ) - )] - StructureSolarPanel45Reinforced = 930865127i32, - #[strum( - serialize = "StructureSolarPanelDualReinforced", - props( - name = r#"Solar Panel (Heavy Dual)"#, - desc = r#"This solar panel is resistant to storm damage."#, - value = "-1545574413" - ) - )] - StructureSolarPanelDualReinforced = -1545574413i32, - #[strum( - serialize = "StructureSolarPanelFlatReinforced", - props( - name = r#"Solar Panel (Heavy Flat)"#, - desc = r#"This solar panel is resistant to storm damage."#, - value = "1697196770" - ) - )] - StructureSolarPanelFlatReinforced = 1697196770i32, - #[strum( - serialize = "StructureSolarPanelReinforced", - props( - name = r#"Solar Panel (Heavy)"#, - desc = r#"This solar panel is resistant to storm damage."#, - value = "-934345724" - ) - )] - StructureSolarPanelReinforced = -934345724i32, - #[strum( - serialize = "ItemSolidFuel", - props( - name = r#"Solid Fuel (Hydrocarbon)"#, - desc = r#""#, - value = "-365253871" - ) - )] - ItemSolidFuel = -365253871i32, - #[strum( - serialize = "StructureSorter", - props( - name = r#"Sorter"#, - desc = r#"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 = "MotherboardSorter", - props( - name = r#"Sorter Motherboard"#, - desc = r#"Motherboards are connected to Computers to perform various technical functions. -The 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 = "ItemSoundCartridgeBass", - props(name = r#"Sound Cartridge Bass"#, desc = r#""#, value = "-1883441704") - )] - ItemSoundCartridgeBass = -1883441704i32, - #[strum( - serialize = "ItemSoundCartridgeDrums", - props(name = r#"Sound Cartridge Drums"#, desc = r#""#, value = "-1901500508") - )] - ItemSoundCartridgeDrums = -1901500508i32, - #[strum( - serialize = "ItemSoundCartridgeLeads", - props(name = r#"Sound Cartridge Leads"#, desc = r#""#, value = "-1174735962") - )] - ItemSoundCartridgeLeads = -1174735962i32, - #[strum( - serialize = "ItemSoundCartridgeSynth", - props(name = r#"Sound Cartridge Synth"#, desc = r#""#, value = "-1971419310") - )] - ItemSoundCartridgeSynth = -1971419310i32, - #[strum( - serialize = "ItemSoyOil", - props(name = r#"Soy Oil"#, desc = r#""#, value = "1387403148") - )] - ItemSoyOil = 1387403148i32, - #[strum( - serialize = "ItemSoybean", - props( - name = r#"Soybean"#, - desc = r#" 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 = "SeedBag_Soybean", - props( - name = r#"Soybean Seeds"#, - desc = r#"Grow some Soybean."#, - value = "1783004244" - ) - )] - SeedBagSoybean = 1783004244i32, - #[strum( - serialize = "ItemSpaceCleaner", - props( - name = r#"Space Cleaner"#, - desc = r#"There was a time when humanity really wanted to keep space clean. That time has passed."#, - value = "-1737666461" - ) - )] - ItemSpaceCleaner = -1737666461i32, - #[strum( - serialize = "ItemSpaceHelmet", - props( - name = r#"Space Helmet"#, - desc = r#"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). -It 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 = "ItemSpaceIce", - props(name = r#"Space Ice"#, desc = r#""#, value = "675686937") - )] - ItemSpaceIce = 675686937i32, - #[strum( - serialize = "SpaceShuttle", - props( - name = r#"Space Shuttle"#, - desc = r#"An antiquated Sinotai transport craft, long since decommissioned."#, - value = "-1991297271" - ) - )] - SpaceShuttle = -1991297271i32, - #[strum( - serialize = "ItemSpacepack", - props( - name = r#"Spacepack"#, - desc = r#"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. -Indispensable 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. -USE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move."#, - value = "-1260618380" - ) - )] - ItemSpacepack = -1260618380i32, - #[strum( - serialize = "ItemSprayGun", - props( - name = r#"Spray Gun"#, - desc = r#"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 = "ItemSprayCanBlack", - props( - name = r#"Spray Paint (Black)"#, - desc = r#"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 = "ItemSprayCanBlue", - props( - name = r#"Spray Paint (Blue)"#, - desc = r#"What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'"#, - value = "-498464883" - ) - )] - ItemSprayCanBlue = -498464883i32, - #[strum( - serialize = "ItemSprayCanBrown", - props( - name = r#"Spray Paint (Brown)"#, - desc = r#"In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed."#, - value = "845176977" - ) - )] - ItemSprayCanBrown = 845176977i32, - #[strum( - serialize = "ItemSprayCanGreen", - props( - name = r#"Spray Paint (Green)"#, - desc = r#"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 = "ItemSprayCanGrey", - props( - name = r#"Spray Paint (Grey)"#, - desc = r#"Arguably the most popular color in the universe, grey was invented so designers had something to do."#, - value = "-1645266981" - ) - )] - ItemSprayCanGrey = -1645266981i32, - #[strum( - serialize = "ItemSprayCanKhaki", - props( - name = r#"Spray Paint (Khaki)"#, - desc = r#"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 = "ItemSprayCanOrange", - props( - name = r#"Spray Paint (Orange)"#, - desc = r#"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 = "ItemSprayCanPink", - props( - name = r#"Spray Paint (Pink)"#, - desc = r#"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 = "ItemSprayCanPurple", - props( - name = r#"Spray Paint (Purple)"#, - desc = r#"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 = "ItemSprayCanRed", - props( - name = r#"Spray Paint (Red)"#, - desc = r#"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 = "ItemSprayCanWhite", - props( - name = r#"Spray Paint (White)"#, - desc = r#"White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff."#, - value = "498481505" - ) - )] - ItemSprayCanWhite = 498481505i32, - #[strum( - serialize = "ItemSprayCanYellow", - props( - name = r#"Spray Paint (Yellow)"#, - desc = r#"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 = "StructureStackerReverse", - props( - name = r#"Stacker"#, - desc = r#"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. -The 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 = "StructureStacker", - props( - name = r#"Stacker"#, - desc = r#"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 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 = "StructureStairs4x2", - props(name = r#"Stairs"#, desc = r#""#, value = "1405018945") - )] - StructureStairs4X2 = 1405018945i32, - #[strum( - serialize = "StructureStairs4x2RailL", - props(name = r#"Stairs with Rail (Left)"#, desc = r#""#, value = "155214029") - )] - StructureStairs4X2RailL = 155214029i32, - #[strum( - serialize = "StructureStairs4x2RailR", - props( - name = r#"Stairs with Rail (Right)"#, - desc = r#""#, - value = "-212902482" - ) - )] - StructureStairs4X2RailR = -212902482i32, - #[strum( - serialize = "StructureStairs4x2Rails", - props(name = r#"Stairs with Rails"#, desc = r#""#, value = "-1088008720") - )] - StructureStairs4X2Rails = -1088008720i32, - #[strum( - serialize = "StructureStairwellBackLeft", - props(name = r#"Stairwell (Back Left)"#, desc = r#""#, value = "505924160") - )] - StructureStairwellBackLeft = 505924160i32, - #[strum( - serialize = "StructureStairwellBackPassthrough", - props( - name = r#"Stairwell (Back Passthrough)"#, - desc = r#""#, - value = "-862048392" - ) - )] - StructureStairwellBackPassthrough = -862048392i32, - #[strum( - serialize = "StructureStairwellBackRight", - props( - name = r#"Stairwell (Back Right)"#, - desc = r#""#, - value = "-2128896573" - ) - )] - StructureStairwellBackRight = -2128896573i32, - #[strum( - serialize = "StructureStairwellFrontLeft", - props(name = r#"Stairwell (Front Left)"#, desc = r#""#, value = "-37454456") - )] - StructureStairwellFrontLeft = -37454456i32, - #[strum( - serialize = "StructureStairwellFrontPassthrough", - props( - name = r#"Stairwell (Front Passthrough)"#, - desc = r#""#, - value = "-1625452928" - ) - )] - StructureStairwellFrontPassthrough = -1625452928i32, - #[strum( - serialize = "StructureStairwellFrontRight", - props(name = r#"Stairwell (Front Right)"#, desc = r#""#, value = "340210934") - )] - StructureStairwellFrontRight = 340210934i32, - #[strum( - serialize = "StructureStairwellNoDoors", - props(name = r#"Stairwell (No Doors)"#, desc = r#""#, value = "2049879875") - )] - StructureStairwellNoDoors = 2049879875i32, - #[strum( - serialize = "StructureBattery", - props( - name = r#"Station Battery"#, - desc = r#"Providing large-scale, reliable power storage, the Sinotai 'Dianzi' station battery is the heart of most Stationeer bases. -There 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.' -POWER OUTPUT -Able 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 = "StructureBatteryLarge", - props( - name = r#"Station Battery (Large)"#, - desc = r#"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. -There 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.' -POWER OUTPUT -Able 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 = "StructureFrame", - props( - name = r#"Steel Frame"#, - desc = r#"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 = "StructureFrameCornerCut", - props( - name = r#"Steel Frame (Corner Cut)"#, - desc = r#"0.Mode0 -1.Mode1"#, - value = "271315669" - ) - )] - StructureFrameCornerCut = 271315669i32, - #[strum( - serialize = "StructureFrameCorner", - props( - name = r#"Steel Frame (Corner)"#, - desc = r#"More durable than the Iron Frame, steel frames also offer several variations for more complex lattice constructions. -With 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 = "StructureFrameSide", - props( - name = r#"Steel Frame (Side)"#, - desc = r#"More durable than the Iron Frame, steel frames also provide variations for more ornate constructions."#, - value = "-302420053" - ) - )] - StructureFrameSide = -302420053i32, - #[strum( - serialize = "ItemSteelFrames", - props( - name = r#"Steel Frames"#, - desc = r#"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 = "ItemSteelSheets", - props( - name = r#"Steel Sheets"#, - desc = r#"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 = "ItemStelliteGlassSheets", - props( - name = r#"Stellite Glass Sheets"#, - desc = r#"A stronger glass substitute."#, - value = "-2038663432" - ) - )] - ItemStelliteGlassSheets = -2038663432i32, - #[strum( - serialize = "StructureStirlingEngine", - props( - name = r#"Stirling Engine"#, - desc = r#"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. - -When 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. - -Gases 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 = "StopWatch", - props(name = r#"Stop Watch"#, desc = r#""#, value = "-1527229051") - )] - StopWatch = -1527229051i32, - #[strum( - serialize = "StructureSuitStorage", - props( - name = r#"Suit Storage"#, - desc = r#"As tidy as it is useful, the suit storage rack holds an Eva Suit, Space Helmet and a Jetpack Basic. -When 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. -All 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 = "StructureLogicSwitch2", - props(name = r#"Switch"#, desc = r#""#, value = "321604921") - )] - StructureLogicSwitch2 = 321604921i32, - #[strum( - serialize = "ItemPlantSwitchGrass", - props(name = r#"Switch Grass"#, desc = r#""#, value = "-532672323") - )] - ItemPlantSwitchGrass = -532672323i32, - #[strum( - serialize = "SeedBag_Switchgrass", - props(name = r#"Switchgrass Seed"#, desc = r#""#, value = "488360169") - )] - SeedBagSwitchgrass = 488360169i32, - #[strum( - serialize = "ApplianceTabletDock", - props(name = r#"Tablet Dock"#, desc = r#""#, value = "1853941363") - )] - ApplianceTabletDock = 1853941363i32, - #[strum( - serialize = "StructureTankBigInsulated", - props(name = r#"Tank Big (Insulated)"#, desc = r#""#, value = "1280378227") - )] - StructureTankBigInsulated = 1280378227i32, - #[strum( - serialize = "StructureTankConnector", - props( - name = r#"Tank Connector"#, - desc = r#"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 = "StructureTankSmallInsulated", - props(name = r#"Tank Small (Insulated)"#, desc = r#""#, value = "272136332") - )] - StructureTankSmallInsulated = 272136332i32, - #[strum( - serialize = "StructureGroundBasedTelescope", - props( - name = r#"Telescope"#, - desc = r#"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 = "ItemTerrainManipulator", - props( - name = r#"Terrain Manipulator"#, - desc = r#"0.Mode0 -1.Mode1"#, - value = "111280987" - ) - )] - ItemTerrainManipulator = 111280987i32, - #[strum( - serialize = "ItemPlantThermogenic_Creative", - props( - name = r#"Thermogenic Plant Creative"#, - desc = r#""#, - value = "-1208890208" - ) - )] - ItemPlantThermogenicCreative = -1208890208i32, - #[strum( - serialize = "ItemTomato", - props( - name = r#"Tomato"#, - desc = r#"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 = "SeedBag_Tomato", - props( - name = r#"Tomato Seeds"#, - desc = r#"Grow a Tomato."#, - value = "-1922066841" - ) - )] - SeedBagTomato = -1922066841i32, - #[strum( - serialize = "ItemTomatoSoup", - props( - name = r#"Tomato Soup"#, - desc = r#"Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine."#, - value = "688734890" - ) - )] - ItemTomatoSoup = 688734890i32, - #[strum( - serialize = "ItemToolBelt", - props( - name = r#"Tool Belt"#, - desc = r#"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). -Designed 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 = "ItemMkIIToolbelt", - props( - name = r#"Tool Belt MK II"#, - desc = r#"A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy."#, - value = "1467558064" - ) - )] - ItemMkIiToolbelt = 1467558064i32, - #[strum( - serialize = "StructureToolManufactory", - props( - name = r#"Tool Manufactory"#, - desc = r#"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. -Upgrade the device using a Tool Printer Mod for additional recipes and faster processing speeds."#, - value = "-465741100" - ) - )] - StructureToolManufactory = -465741100i32, - #[strum( - serialize = "ToolPrinterMod", - props( - name = r#"Tool Printer Mod"#, - desc = r#"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 = "WeaponTorpedo", - props(name = r#"Torpedo"#, desc = r#""#, value = "-1102977898") - )] - WeaponTorpedo = -1102977898i32, - #[strum( - serialize = "StructureTorpedoRack", - props(name = r#"Torpedo Rack"#, desc = r#""#, value = "1473807953") - )] - StructureTorpedoRack = 1473807953i32, - #[strum( - serialize = "ToyLuna", - props(name = r#"Toy Luna"#, desc = r#""#, value = "94730034") - )] - ToyLuna = 94730034i32, - #[strum( - serialize = "CartridgeTracker", - props(name = r#"Tracker"#, desc = r#""#, value = "81488783") - )] - CartridgeTracker = 81488783i32, - #[strum( - serialize = "ItemBeacon", - props(name = r#"Tracking Beacon"#, desc = r#""#, value = "-869869491") - )] - ItemBeacon = -869869491i32, - #[strum( - serialize = "StructureTraderWaypoint", - props(name = r#"Trader Waypoint"#, desc = r#""#, value = "1570931620") - )] - StructureTraderWaypoint = 1570931620i32, - #[strum( - serialize = "StructureTransformer", - props( - name = r#"Transformer (Large)"#, - desc = r#"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. -Note that transformers operate as data isolators, preventing data flowing into any network beyond it."#, - value = "-1423212473" - ) - )] - StructureTransformer = -1423212473i32, - #[strum( - serialize = "StructureTransformerMedium", - props( - name = r#"Transformer (Medium)"#, - desc = r#"Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. -Medium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W. -Note that transformers also operate as data isolators, preventing data flowing into any network beyond it."#, - value = "-1065725831" - ) - )] - StructureTransformerMedium = -1065725831i32, - #[strum( - serialize = "StructureTransformerSmall", - props( - name = r#"Transformer (Small)"#, - desc = r#"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. -Note that transformers operate as data isolators, preventing data flowing into any network beyond it."#, - value = "-890946730" - ) - )] - StructureTransformerSmall = -890946730i32, - #[strum( - serialize = "StructureTransformerMediumReversed", - props( - name = r#"Transformer Reversed (Medium)"#, - desc = r#"Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. -Medium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W. -Note that transformers also operate as data isolators, preventing data flowing into any network beyond it."#, - value = "833912764" - ) - )] - StructureTransformerMediumReversed = 833912764i32, - #[strum( - serialize = "StructureTransformerSmallReversed", - props( - name = r#"Transformer Reversed (Small)"#, - desc = r#"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. -Note that transformers operate as data isolators, preventing data flowing into any network beyond it."#, - value = "1054059374" - ) - )] - StructureTransformerSmallReversed = 1054059374i32, - #[strum( - serialize = "StructureRocketTransformerSmall", - props( - name = r#"Transformer Small (Rocket)"#, - desc = r#""#, - value = "518925193" - ) - )] - StructureRocketTransformerSmall = 518925193i32, - #[strum( - serialize = "StructurePressurePlateLarge", - props(name = r#"Trigger Plate (Large)"#, desc = r#""#, value = "-2008706143") - )] - StructurePressurePlateLarge = -2008706143i32, - #[strum( - serialize = "StructurePressurePlateMedium", - props(name = r#"Trigger Plate (Medium)"#, desc = r#""#, value = "1269458680") - )] - StructurePressurePlateMedium = 1269458680i32, - #[strum( - serialize = "StructurePressurePlateSmall", - props(name = r#"Trigger Plate (Small)"#, desc = r#""#, value = "-1536471028") - )] - StructurePressurePlateSmall = -1536471028i32, - #[strum( - serialize = "ItemTropicalPlant", - props( - name = r#"Tropical Lily"#, - desc = r#"An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants."#, - value = "-800947386" - ) - )] - ItemTropicalPlant = -800947386i32, - #[strum( - serialize = "StructureTurbineGenerator", - props(name = r#"Turbine Generator"#, desc = r#""#, value = "1282191063") - )] - StructureTurbineGenerator = 1282191063i32, - #[strum( - serialize = "StructureTurboVolumePump", - props( - name = r#"Turbo Volume Pump (Gas)"#, - desc = r#"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 = "StructureLiquidTurboVolumePump", - props( - name = r#"Turbo Volume Pump (Liquid)"#, - desc = r#"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 = "StructureChuteUmbilicalMale", - props( - name = r#"Umbilical (Chute)"#, - desc = r#"0.Left -1.Center -2.Right"#, - value = "-958884053" - ) - )] - StructureChuteUmbilicalMale = -958884053i32, - #[strum( - serialize = "StructureGasUmbilicalMale", - props( - name = r#"Umbilical (Gas)"#, - desc = r#"0.Left -1.Center -2.Right"#, - value = "-1814939203" - ) - )] - StructureGasUmbilicalMale = -1814939203i32, - #[strum( - serialize = "StructureLiquidUmbilicalMale", - props( - name = r#"Umbilical (Liquid)"#, - desc = r#"0.Left -1.Center -2.Right"#, - value = "-1798420047" - ) - )] - StructureLiquidUmbilicalMale = -1798420047i32, - #[strum( - serialize = "StructurePowerUmbilicalMale", - props( - name = r#"Umbilical (Power)"#, - desc = r#"0.Left -1.Center -2.Right"#, - value = "1529453938" - ) - )] - StructurePowerUmbilicalMale = 1529453938i32, - #[strum( - serialize = "StructureChuteUmbilicalFemale", - props( - name = r#"Umbilical Socket (Chute)"#, - desc = r#""#, - value = "-1918892177" - ) - )] - StructureChuteUmbilicalFemale = -1918892177i32, - #[strum( - serialize = "StructureGasUmbilicalFemale", - props( - name = r#"Umbilical Socket (Gas)"#, - desc = r#""#, - value = "-1680477930" - ) - )] - StructureGasUmbilicalFemale = -1680477930i32, - #[strum( - serialize = "StructureLiquidUmbilicalFemale", - props( - name = r#"Umbilical Socket (Liquid)"#, - desc = r#""#, - value = "1734723642" - ) - )] - StructureLiquidUmbilicalFemale = 1734723642i32, - #[strum( - serialize = "StructurePowerUmbilicalFemale", - props( - name = r#"Umbilical Socket (Power)"#, - desc = r#""#, - value = "101488029" - ) - )] - StructurePowerUmbilicalFemale = 101488029i32, - #[strum( - serialize = "StructureChuteUmbilicalFemaleSide", - props( - name = r#"Umbilical Socket Angle (Chute)"#, - desc = r#""#, - value = "-659093969" - ) - )] - StructureChuteUmbilicalFemaleSide = -659093969i32, - #[strum( - serialize = "StructureGasUmbilicalFemaleSide", - props( - name = r#"Umbilical Socket Angle (Gas)"#, - desc = r#""#, - value = "-648683847" - ) - )] - StructureGasUmbilicalFemaleSide = -648683847i32, - #[strum( - serialize = "StructureLiquidUmbilicalFemaleSide", - props( - name = r#"Umbilical Socket Angle (Liquid)"#, - desc = r#""#, - value = "1220870319" - ) - )] - StructureLiquidUmbilicalFemaleSide = 1220870319i32, - #[strum( - serialize = "StructurePowerUmbilicalFemaleSide", - props( - name = r#"Umbilical Socket Angle (Power)"#, - desc = r#""#, - value = "1922506192" - ) - )] - StructurePowerUmbilicalFemaleSide = 1922506192i32, - #[strum( - serialize = "UniformCommander", - props(name = r#"Uniform Commander"#, desc = r#""#, value = "-2083426457") - )] - UniformCommander = -2083426457i32, - #[strum( - serialize = "StructureUnloader", - props( - name = r#"Unloader"#, - desc = r#"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. - -Output = 0 exporting the main item -Output = 1 exporting items inside and eventually the main item."#, - value = "750118160" - ) - )] - StructureUnloader = 750118160i32, - #[strum( - serialize = "StructureUprightWindTurbine", - props( - name = r#"Upright Wind Turbine"#, - desc = r#"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. -While 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 = "StructureValve", - props(name = r#"Valve"#, desc = r#""#, value = "-692036078") - )] - StructureValve = -692036078i32, - #[strum( - serialize = "StructureVendingMachine", - props( - name = r#"Vending Machine"#, - desc = r#"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 = "StructureVolumePump", - props( - name = r#"Volume Pump"#, - desc = r#"The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks."#, - value = "-321403609" - ) - )] - StructureVolumePump = -321403609i32, - #[strum( - serialize = "StructureWallArchArrow", - props(name = r#"Wall (Arch Arrow)"#, desc = r#""#, value = "1649708822") - )] - StructureWallArchArrow = 1649708822i32, - #[strum( - serialize = "StructureWallArchCornerRound", - props( - name = r#"Wall (Arch Corner Round)"#, - desc = r#""#, - value = "1794588890" - ) - )] - StructureWallArchCornerRound = 1794588890i32, - #[strum( - serialize = "StructureWallArchCornerSquare", - props( - name = r#"Wall (Arch Corner Square)"#, - desc = r#""#, - value = "-1963016580" - ) - )] - StructureWallArchCornerSquare = -1963016580i32, - #[strum( - serialize = "StructureWallArchCornerTriangle", - props( - name = r#"Wall (Arch Corner Triangle)"#, - desc = r#""#, - value = "1281911841" - ) - )] - StructureWallArchCornerTriangle = 1281911841i32, - #[strum( - serialize = "StructureWallArchPlating", - props(name = r#"Wall (Arch Plating)"#, desc = r#""#, value = "1182510648") - )] - StructureWallArchPlating = 1182510648i32, - #[strum( - serialize = "StructureWallArchTwoTone", - props(name = r#"Wall (Arch Two Tone)"#, desc = r#""#, value = "782529714") - )] - StructureWallArchTwoTone = 782529714i32, - #[strum( - serialize = "StructureWallArch", - props(name = r#"Wall (Arch)"#, desc = r#""#, value = "-858143148") - )] - StructureWallArch = -858143148i32, - #[strum( - serialize = "StructureWallFlatCornerRound", - props( - name = r#"Wall (Flat Corner Round)"#, - desc = r#""#, - value = "898708250" - ) - )] - StructureWallFlatCornerRound = 898708250i32, - #[strum( - serialize = "StructureWallFlatCornerSquare", - props( - name = r#"Wall (Flat Corner Square)"#, - desc = r#""#, - value = "298130111" - ) - )] - StructureWallFlatCornerSquare = 298130111i32, - #[strum( - serialize = "StructureWallFlatCornerTriangleFlat", - props( - name = r#"Wall (Flat Corner Triangle Flat)"#, - desc = r#""#, - value = "-1161662836" - ) - )] - StructureWallFlatCornerTriangleFlat = -1161662836i32, - #[strum( - serialize = "StructureWallFlatCornerTriangle", - props( - name = r#"Wall (Flat Corner Triangle)"#, - desc = r#""#, - value = "2097419366" - ) - )] - StructureWallFlatCornerTriangle = 2097419366i32, - #[strum( - serialize = "StructureWallFlat", - props(name = r#"Wall (Flat)"#, desc = r#""#, value = "1635864154") - )] - StructureWallFlat = 1635864154i32, - #[strum( - serialize = "StructureWallGeometryCorner", - props(name = r#"Wall (Geometry Corner)"#, desc = r#""#, value = "1979212240") - )] - StructureWallGeometryCorner = 1979212240i32, - #[strum( - serialize = "StructureWallGeometryStreight", - props( - name = r#"Wall (Geometry Straight)"#, - desc = r#""#, - value = "1049735537" - ) - )] - StructureWallGeometryStreight = 1049735537i32, - #[strum( - serialize = "StructureWallGeometryTMirrored", - props( - name = r#"Wall (Geometry T Mirrored)"#, - desc = r#""#, - value = "-1427845483" - ) - )] - StructureWallGeometryTMirrored = -1427845483i32, - #[strum( - serialize = "StructureWallGeometryT", - props(name = r#"Wall (Geometry T)"#, desc = r#""#, value = "1602758612") - )] - StructureWallGeometryT = 1602758612i32, - #[strum( - serialize = "StructureWallLargePanelArrow", - props( - name = r#"Wall (Large Panel Arrow)"#, - desc = r#""#, - value = "-776581573" - ) - )] - StructureWallLargePanelArrow = -776581573i32, - #[strum( - serialize = "StructureWallLargePanel", - props(name = r#"Wall (Large Panel)"#, desc = r#""#, value = "1492930217") - )] - StructureWallLargePanel = 1492930217i32, - #[strum( - serialize = "StructureWallPaddedArchCorner", - props( - name = r#"Wall (Padded Arch Corner)"#, - desc = r#""#, - value = "-1126688298" - ) - )] - StructureWallPaddedArchCorner = -1126688298i32, - #[strum( - serialize = "StructureWallPaddedArchLightFittingTop", - props( - name = r#"Wall (Padded Arch Light Fitting Top)"#, - desc = r#""#, - value = "1171987947" - ) - )] - StructureWallPaddedArchLightFittingTop = 1171987947i32, - #[strum( - serialize = "StructureWallPaddedArchLightsFittings", - props( - name = r#"Wall (Padded Arch Lights Fittings)"#, - desc = r#""#, - value = "-1546743960" - ) - )] - StructureWallPaddedArchLightsFittings = -1546743960i32, - #[strum( - serialize = "StructureWallPaddedArch", - props(name = r#"Wall (Padded Arch)"#, desc = r#""#, value = "1590330637") - )] - StructureWallPaddedArch = 1590330637i32, - #[strum( - serialize = "StructureWallPaddedCornerThin", - props( - name = r#"Wall (Padded Corner Thin)"#, - desc = r#""#, - value = "1183203913" - ) - )] - StructureWallPaddedCornerThin = 1183203913i32, - #[strum( - serialize = "StructureWallPaddedCorner", - props(name = r#"Wall (Padded Corner)"#, desc = r#""#, value = "-155945899") - )] - StructureWallPaddedCorner = -155945899i32, - #[strum( - serialize = "StructureWallPaddedNoBorderCorner", - props( - name = r#"Wall (Padded No Border Corner)"#, - desc = r#""#, - value = "179694804" - ) - )] - StructureWallPaddedNoBorderCorner = 179694804i32, - #[strum( - serialize = "StructureWallPaddedNoBorder", - props(name = r#"Wall (Padded No Border)"#, desc = r#""#, value = "8846501") - )] - StructureWallPaddedNoBorder = 8846501i32, - #[strum( - serialize = "StructureWallPaddedThinNoBorderCorner", - props( - name = r#"Wall (Padded Thin No Border Corner)"#, - desc = r#""#, - value = "1769527556" - ) - )] - StructureWallPaddedThinNoBorderCorner = 1769527556i32, - #[strum( - serialize = "StructureWallPaddedThinNoBorder", - props( - name = r#"Wall (Padded Thin No Border)"#, - desc = r#""#, - value = "-1611559100" - ) - )] - StructureWallPaddedThinNoBorder = -1611559100i32, - #[strum( - serialize = "StructureWallPaddedWindowThin", - props( - name = r#"Wall (Padded Window Thin)"#, - desc = r#""#, - value = "-37302931" - ) - )] - StructureWallPaddedWindowThin = -37302931i32, - #[strum( - serialize = "StructureWallPaddedWindow", - props(name = r#"Wall (Padded Window)"#, desc = r#""#, value = "2087628940") - )] - StructureWallPaddedWindow = 2087628940i32, - #[strum( - serialize = "StructureWallPaddingArchVent", - props( - name = r#"Wall (Padding Arch Vent)"#, - desc = r#""#, - value = "-1243329828" - ) - )] - StructureWallPaddingArchVent = -1243329828i32, - #[strum( - serialize = "StructureWallPaddingLightFitting", - props( - name = r#"Wall (Padding Light Fitting)"#, - desc = r#""#, - value = "2024882687" - ) - )] - StructureWallPaddingLightFitting = 2024882687i32, - #[strum( - serialize = "StructureWallPaddingThin", - props(name = r#"Wall (Padding Thin)"#, desc = r#""#, value = "-1102403554") - )] - StructureWallPaddingThin = -1102403554i32, - #[strum( - serialize = "StructureWallPadding", - props(name = r#"Wall (Padding)"#, desc = r#""#, value = "635995024") - )] - StructureWallPadding = 635995024i32, - #[strum( - serialize = "StructureWallPlating", - props(name = r#"Wall (Plating)"#, desc = r#""#, value = "26167457") - )] - StructureWallPlating = 26167457i32, - #[strum( - serialize = "StructureWallSmallPanelsAndHatch", - props( - name = r#"Wall (Small Panels And Hatch)"#, - desc = r#""#, - value = "619828719" - ) - )] - StructureWallSmallPanelsAndHatch = 619828719i32, - #[strum( - serialize = "StructureWallSmallPanelsArrow", - props( - name = r#"Wall (Small Panels Arrow)"#, - desc = r#""#, - value = "-639306697" - ) - )] - StructureWallSmallPanelsArrow = -639306697i32, - #[strum( - serialize = "StructureWallSmallPanelsMonoChrome", - props( - name = r#"Wall (Small Panels Mono Chrome)"#, - desc = r#""#, - value = "386820253" - ) - )] - StructureWallSmallPanelsMonoChrome = 386820253i32, - #[strum( - serialize = "StructureWallSmallPanelsOpen", - props( - name = r#"Wall (Small Panels Open)"#, - desc = r#""#, - value = "-1407480603" - ) - )] - StructureWallSmallPanelsOpen = -1407480603i32, - #[strum( - serialize = "StructureWallSmallPanelsTwoTone", - props( - name = r#"Wall (Small Panels Two Tone)"#, - desc = r#""#, - value = "1709994581" - ) - )] - StructureWallSmallPanelsTwoTone = 1709994581i32, - #[strum( - serialize = "StructureWallCooler", - props( - name = r#"Wall Cooler"#, - desc = r#"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. -In 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. - -EFFICIENCY -The 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. -The 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. -ERRORS -If the wall cooler is flashing an error then it is missing one of the following: - -- Pipe connection to the wall cooler. -- Gas in the connected pipes, or pressure is too low. -- Atmosphere in the surrounding environment or pressure is too low. - -For more information about how to control temperatures, consult the temperature control Guides page."#, - value = "-739292323" - ) - )] - StructureWallCooler = -739292323i32, - #[strum( - serialize = "StructureWallHeater", + serialize = "H2Combustor", props( - name = r#"Wall Heater"#, - desc = r#"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" + name = r#"H2 Combustor"#, + desc = r#"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" ) )] - StructureWallHeater = 24258244i32, - #[strum( - serialize = "StructureWallLight", - props(name = r#"Wall Light"#, desc = r#""#, value = "-1860064656") - )] - StructureWallLight = -1860064656i32, + H2Combustor = 1840108251i32, #[strum( - serialize = "StructureWallLightBattery", - props(name = r#"Wall Light (Battery)"#, desc = r#""#, value = "-1306415132") + serialize = "Flag_ODA_10m", + props(name = r#"Flag (ODA 10m)"#, desc = r#""#, value = "1845441951") )] - StructureWallLightBattery = -1306415132i32, + FlagOda10M = 1845441951i32, #[strum( serialize = "StructureLightLongAngled", props( @@ -9769,71 +9356,375 @@ For more information about how to control temperatures, consult the Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench."#, + value = "1848735691" ) )] - StructureWallVent = -1177469307i32, + StructurePipeLiquidCrossJunction = 1848735691i32, #[strum( - serialize = "ItemWaterBottle", + serialize = "ItemCookedPumpkin", props( - name = r#"Water Bottle"#, - desc = r#"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" + name = r#"Cooked Pumpkin"#, + desc = r#"A high-nutrient cooked food, which can be canned."#, + value = "1849281546" ) )] - ItemWaterBottle = 107741229i32, + ItemCookedPumpkin = 1849281546i32, #[strum( - serialize = "StructureWaterBottleFiller", - props(name = r#"Water Bottle Filler"#, desc = r#""#, value = "-1178961954") + serialize = "StructureLiquidValve", + props(name = r#"Liquid Valve"#, desc = r#""#, value = "1849974453") )] - StructureWaterBottleFiller = -1178961954i32, + StructureLiquidValve = 1849974453i32, #[strum( - serialize = "StructureWaterBottleFillerBottom", + serialize = "ApplianceTabletDock", + props(name = r#"Tablet Dock"#, desc = r#""#, value = "1853941363") + )] + ApplianceTabletDock = 1853941363i32, + #[strum( + serialize = "StructureCableJunction6HBurnt", props( - name = r#"Water Bottle Filler Bottom"#, + name = r#"Burnt Cable (6-Way Junction)"#, desc = r#""#, - value = "1433754995" + value = "1854404029" ) )] - StructureWaterBottleFillerBottom = 1433754995i32, + StructureCableJunction6HBurnt = 1854404029i32, #[strum( - serialize = "StructureWaterPurifier", + serialize = "ItemMKIIWrench", props( - name = r#"Water Purifier"#, - desc = r#"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" + name = r#"Mk II Wrench"#, + desc = r#"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" ) )] - StructureWaterPurifier = 887383294i32, + ItemMkiiWrench = 1862001680i32, #[strum( - serialize = "StructureWaterBottleFillerPowered", - props(name = r#"Waterbottle Filler"#, desc = r#""#, value = "-756587791") + serialize = "ItemAdhesiveInsulation", + props(name = r#"Adhesive Insulation"#, desc = r#""#, value = "1871048978") )] - StructureWaterBottleFillerPowered = -756587791i32, + ItemAdhesiveInsulation = 1871048978i32, + #[strum( + serialize = "ItemGasFilterCarbonDioxideL", + props( + name = r#"Heavy Filter (Carbon Dioxide)"#, + desc = r#""#, + value = "1876847024" + ) + )] + ItemGasFilterCarbonDioxideL = 1876847024i32, + #[strum( + serialize = "ItemWallHeater", + props( + name = r#"Kit (Wall Heater)"#, + desc = r#"This kit creates a Kit (Wall Heater)."#, + value = "1880134612" + ) + )] + ItemWallHeater = 1880134612i32, + #[strum( + serialize = "StructureNitrolyzer", + props( + name = r#"Nitrolyzer"#, + desc = r#"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", + props( + name = r#"Large Satellite Dish"#, + desc = r#"This large communications unit can be used to communicate with nearby trade vessels. + + 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."#, + value = "1913391845" + ) + )] + StructureLargeSatelliteDish = 1913391845i32, + #[strum( + serialize = "ItemGasFilterPollutants", + props( + name = r#"Filter (Pollutant)"#, + desc = r#"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", + props( + name = r#"Spray Paint (Khaki)"#, + desc = r#"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", + props( + name = r#"Kit (Pumped Liquid Engine)"#, + desc = r#""#, + value = "1921918951" + ) + )] + ItemKitPumpedLiquidEngine = 1921918951i32, + #[strum( + serialize = "StructurePowerUmbilicalFemaleSide", + props( + name = r#"Umbilical Socket Angle (Power)"#, + desc = r#""#, + value = "1922506192" + ) + )] + StructurePowerUmbilicalFemaleSide = 1922506192i32, + #[strum( + serialize = "ItemSoybean", + props( + name = r#"Soybean"#, + desc = r#" 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", + props( + name = r#"Insulated Liquid Pipe (3-Way Junction)"#, + desc = r#"Liquid piping with very low temperature loss or gain."#, + value = "1926651727" + ) + )] + StructureInsulatedPipeLiquidCrossJunction = 1926651727i32, + #[strum( + serialize = "ItemWreckageTurbineGenerator3", + props( + name = r#"Wreckage Turbine Generator"#, + desc = r#""#, + value = "1927790321" + ) + )] + ItemWreckageTurbineGenerator3 = 1927790321i32, + #[strum( + serialize = "StructurePassthroughHeatExchangerGasToLiquid", + props( + name = r#"CounterFlow Heat Exchanger - Gas + Liquid"#, + desc = r#"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. + Balancing the throughput of both inputs is key to creating a good exhange of temperatures."#, + value = "1928991265" + ) + )] + StructurePassthroughHeatExchangerGasToLiquid = 1928991265i32, + #[strum( + serialize = "ItemPotato", + props( + name = r#"Potato"#, + desc = r#" Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies."#, + value = "1929046963" + ) + )] + ItemPotato = 1929046963i32, + #[strum( + serialize = "StructureCableCornerHBurnt", + props(name = r#"Burnt Cable (Corner)"#, desc = r#""#, value = "1931412811") + )] + StructureCableCornerHBurnt = 1931412811i32, + #[strum( + serialize = "KitSDBSilo", + props( + name = r#"Kit (SDB Silo)"#, + desc = r#"This kit creates a SDB Silo."#, + value = "1932952652" + ) + )] + KitSdbSilo = 1932952652i32, + #[strum( + serialize = "ItemKitPipeUtility", + props(name = r#"Kit (Pipe Utility Gas)"#, desc = r#""#, value = "1934508338") + )] + ItemKitPipeUtility = 1934508338i32, + #[strum( + serialize = "ItemKitInteriorDoors", + props(name = r#"Kit (Interior Doors)"#, desc = r#""#, value = "1935945891") + )] + ItemKitInteriorDoors = 1935945891i32, + #[strum( + serialize = "StructureCryoTube", + props( + name = r#"CryoTube"#, + desc = r#"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", + props( + name = r#"Reinforced Window (Padded)"#, + desc = r#"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", + props( + name = r#"Dynamic Crate"#, + desc = r#"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", + props( + name = r#"Logic Gate"#, + desc = r#"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", + props(name = r#"LED"#, desc = r#""#, value = "1944485013") + )] + StructureDiode = 1944485013i32, + #[strum( + serialize = "StructureChairBacklessDouble", + props( + name = r#"Chair (Backless Double)"#, + desc = r#""#, + value = "1944858936" + ) + )] + StructureChairBacklessDouble = 1944858936i32, + #[strum( + serialize = "StructureBatteryCharger", + props( + name = r#"Battery Cell Charger"#, + desc = r#"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", + props( + name = r#"Furnace"#, + desc = r#"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. +A 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. +If 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", + props( + name = r#"Light Sword"#, + desc = r#"A charming, if useless, pseudo-weapon. (Creative only.)"#, + value = "1949076595" + ) + )] + ItemLightSword = 1949076595i32, + #[strum( + serialize = "ItemKitLiquidRegulator", + props(name = r#"Kit (Liquid Regulator)"#, desc = r#""#, value = "1951126161") + )] + ItemKitLiquidRegulator = 1951126161i32, + #[strum( + serialize = "StructureCompositeCladdingRoundedCorner", + props( + name = r#"Composite Cladding (Rounded Corner)"#, + desc = r#""#, + value = "1951525046" + ) + )] + StructureCompositeCladdingRoundedCorner = 1951525046i32, + #[strum( + serialize = "ItemGasFilterPollutantsL", + props( + name = r#"Heavy Filter (Pollutants)"#, + desc = r#""#, + value = "1959564765" + ) + )] + ItemGasFilterPollutantsL = 1959564765i32, + #[strum( + serialize = "ItemKitSmallSatelliteDish", + props( + name = r#"Kit (Small Satellite Dish)"#, + desc = r#""#, + value = "1960952220" + ) + )] + ItemKitSmallSatelliteDish = 1960952220i32, + #[strum( + serialize = "StructureSolarPanelFlat", + props( + name = r#"Solar Panel (Flat)"#, + desc = r#"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", + props( + name = r#""#, + desc = r#""#, + value = "1968371847" + ) + )] + StructureDrinkingFountain = 1968371847i32, + #[strum( + serialize = "ItemJetpackBasic", + props( + name = r#"Jetpack Basic"#, + desc = r#"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. +Indispensable 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. +USE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move."#, + value = "1969189000" + ) + )] + ItemJetpackBasic = 1969189000i32, + #[strum( + serialize = "ItemKitEngineMedium", + props(name = r#"Kit (Engine Medium)"#, desc = r#""#, value = "1969312177") + )] + ItemKitEngineMedium = 1969312177i32, + #[strum( + serialize = "StructureWallGeometryCorner", + props(name = r#"Wall (Geometry Corner)"#, desc = r#""#, value = "1979212240") + )] + StructureWallGeometryCorner = 1979212240i32, + #[strum( + serialize = "StructureInteriorDoorPaddedThin", + props( + name = r#"Interior Door Padded Thin"#, + desc = r#"0.Operate +1.Logic"#, + value = "1981698201" + ) + )] + StructureInteriorDoorPaddedThin = 1981698201i32, #[strum( serialize = "StructureWaterBottleFillerPoweredBottom", props(name = r#"Waterbottle Filler"#, desc = r#""#, value = "1986658780") )] StructureWaterBottleFillerPoweredBottom = 1986658780i32, #[strum( - serialize = "WeaponEnergy", - props(name = r#"Weapon Energy"#, desc = r#""#, value = "789494694") + serialize = "StructureLiquidTankSmall", + props(name = r#"Liquid Tank Small"#, desc = r#""#, value = "1988118157") )] - WeaponEnergy = 789494694i32, + StructureLiquidTankSmall = 1988118157i32, + #[strum( + serialize = "ItemKitComputer", + props(name = r#"Kit (Computer)"#, desc = r#""#, value = "1990225489") + )] + ItemKitComputer = 1990225489i32, #[strum( serialize = "StructureWeatherStation", props( @@ -9846,258 +9737,367 @@ For more information about how to control temperatures, consult the Stationeers Tool Belt, the Arlite welding torch is used to construct a range of essential structures. -An 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" - ) + serialize = "ItemKitLogicInputOutput", + props(name = r#"Kit (Logic I/O)"#, desc = r#""#, value = "1997293610") )] - ItemWeldingTorch = -2066892079i32, + ItemKitLogicInputOutput = 1997293610i32, #[strum( - serialize = "ItemWheat", + serialize = "StructureCompositeCladdingPanel", props( - name = r#"Wheat"#, - desc = r#"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" + name = r#"Composite Cladding (Panel)"#, + desc = r#""#, + value = "1997436771" ) )] - ItemWheat = -1057658015i32, + StructureCompositeCladdingPanel = 1997436771i32, #[strum( - serialize = "SeedBag_Wheet", - props( - name = r#"Wheat Seeds"#, - desc = r#"Grow some Wheat."#, - value = "-654756733" - ) + serialize = "StructureElevatorShaftIndustrial", + props(name = r#"Elevator Shaft"#, desc = r#""#, value = "1998354978") )] - SeedBagWheet = -654756733i32, + StructureElevatorShaftIndustrial = 1998354978i32, #[strum( - serialize = "StructureWindTurbine", + serialize = "ReagentColorRed", + props(name = r#"Color Dye (Red)"#, desc = r#""#, value = "1998377961") + )] + ReagentColorRed = 1998377961i32, + #[strum( + serialize = "Flag_ODA_6m", + props(name = r#"Flag (ODA 6m)"#, desc = r#""#, value = "1998634960") + )] + FlagOda6M = 1998634960i32, + #[strum( + serialize = "StructureAreaPowerControl", props( - name = r#"Wind Turbine"#, - desc = r#"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. -While 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" + name = r#"Area Power Control"#, + desc = r#"An Area Power Control (APC) has three main functions: +Its primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. +APCs also create sub-networks, as no devices on the far side of an APC are visible on the main network. +Lastly, 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" ) )] - StructureWindTurbine = -2082355173i32, + StructureAreaPowerControl = 1999523701i32, + #[strum( + serialize = "ItemGasFilterWaterL", + props(name = r#"Heavy Filter (Water)"#, desc = r#""#, value = "2004969680") + )] + ItemGasFilterWaterL = 2004969680i32, + #[strum( + serialize = "ItemDrill", + props( + name = r#"Hand Drill"#, + desc = r#"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", + props(name = r#"Kit (Small Flag)"#, desc = r#""#, value = "2011191088") + )] + ItemFlagSmall = 2011191088i32, + #[strum( + serialize = "ItemCookedRice", + props( + name = r#"Cooked Rice"#, + desc = r#"A high-nutrient cooked food, which can be canned."#, + value = "2013539020" + ) + )] + ItemCookedRice = 2013539020i32, + #[strum( + serialize = "StructureRocketScanner", + props(name = r#"Rocket Scanner"#, desc = r#""#, value = "2014252591") + )] + StructureRocketScanner = 2014252591i32, + #[strum( + serialize = "ItemKitPoweredVent", + props(name = r#"Kit (Powered Vent)"#, desc = r#""#, value = "2015439334") + )] + ItemKitPoweredVent = 2015439334i32, + #[strum( + serialize = "CircuitboardSolarControl", + props( + name = r#"Solar Control"#, + desc = r#"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", + props( + name = r#"Pipe Radiator Liquid"#, + desc = r#"A liquid pipe mounted radiator optimized for radiating heat in vacuums."#, + value = "2024754523" + ) + )] + StructurePipeRadiatorFlatLiquid = 2024754523i32, + #[strum( + serialize = "StructureWallPaddingLightFitting", + props( + name = r#"Wall (Padding Light Fitting)"#, + desc = r#""#, + value = "2024882687" + ) + )] + StructureWallPaddingLightFitting = 2024882687i32, + #[strum( + serialize = "StructureReinforcedCompositeWindow", + props( + name = r#"Reinforced Window (Composite)"#, + desc = r#"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", + props( + name = r#"Kit (Rocket Liquid Fuel Tank)"#, + desc = r#""#, + value = "2032027950" + ) + )] + ItemKitRocketLiquidFuelTank = 2032027950i32, + #[strum( + serialize = "StructureEngineMountTypeA1", + props(name = r#"Engine Mount (Type A1)"#, desc = r#""#, value = "2035781224") + )] + StructureEngineMountTypeA1 = 2035781224i32, + #[strum( + serialize = "ItemLiquidDrain", + props(name = r#"Kit (Liquid Drain)"#, desc = r#""#, value = "2036225202") + )] + ItemLiquidDrain = 2036225202i32, + #[strum( + serialize = "ItemLiquidTankStorage", + props( + name = r#"Kit (Liquid Canister Storage)"#, + desc = r#"This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister."#, + value = "2037427578" + ) + )] + ItemLiquidTankStorage = 2037427578i32, + #[strum( + serialize = "StructurePipeCrossJunction3", + props( + name = r#"Pipe (3-Way Junction)"#, + desc = r#"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", + props( + name = r#"Peace Lily"#, + desc = r#"A fetching lily with greater resistance to cold temperatures."#, + value = "2042955224" + ) + )] + ItemPeaceLily = 2042955224i32, + #[strum( + serialize = "PortableSolarPanel", + props(name = r#"Portable Solar Panel"#, desc = r#""#, value = "2043318949") + )] + PortableSolarPanel = 2043318949i32, + #[strum( + serialize = "ItemMushroom", + props( + name = r#"Mushroom"#, + desc = r#"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", + props(name = r#"Stairwell (No Doors)"#, desc = r#""#, value = "2049879875") + )] + StructureStairwellNoDoors = 2049879875i32, #[strum( serialize = "StructureWindowShutter", props( name = r#"Window Shutter"#, - desc = r#"For those special, private moments, a window that can be closed to prying eyes. - + desc = r#"For those special, private moments, a window that can be closed to prying eyes. + When closed, has the heat transfer characteristics of a basic wall. Requires power, and can be connected to logic systems."#, value = "2056377335" ) )] StructureWindowShutter = 2056377335i32, #[strum( - serialize = "ItemPlantEndothermic_Genepool1", + serialize = "ItemKitHydroponicStation", props( - name = r#"Winterspawn (Alpha variant)"#, - desc = r#"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 = "ItemPlantEndothermic_Genepool2", - props( - name = r#"Winterspawn (Beta variant)"#, - desc = r#"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 = "ItemWireCutters", - props( - name = r#"Wire Cutters"#, - desc = r#"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 = "ItemWirelessBatteryCellExtraLarge", - props( - name = r#"Wireless Battery Cell Extra Large"#, - desc = r#"0.Empty -1.Critical -2.VeryLow -3.Low -4.Medium -5.High -6.Full"#, - value = "-504717121" - ) - )] - ItemWirelessBatteryCellExtraLarge = -504717121i32, - #[strum( - serialize = "ItemWreckageAirConditioner2", - props( - name = r#"Wreckage Air Conditioner"#, + name = r#"Kit (Hydroponic Station)"#, desc = r#""#, - value = "169888054" + value = "2057179799" ) )] - ItemWreckageAirConditioner2 = 169888054i32, + ItemKitHydroponicStation = 2057179799i32, #[strum( - serialize = "ItemWreckageAirConditioner1", + serialize = "ItemCableCoilHeavy", props( - name = r#"Wreckage Air Conditioner"#, + name = r#"Cable Coil (Heavy)"#, + desc = r#"Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW."#, + value = "2060134443" + ) + )] + ItemCableCoilHeavy = 2060134443i32, + #[strum( + serialize = "StructureElevatorLevelIndustrial", + props(name = r#"Elevator Level"#, desc = r#""#, value = "2060648791") + )] + StructureElevatorLevelIndustrial = 2060648791i32, + #[strum( + serialize = "StructurePassiveLargeRadiatorGas", + props( + name = r#"Medium Convection Radiator"#, + desc = r#"Has been replaced by Medium Convection Radiator."#, + value = "2066977095" + ) + )] + StructurePassiveLargeRadiatorGas = 2066977095i32, + #[strum( + serialize = "ItemKitInsulatedLiquidPipe", + props( + name = r#"Kit (Insulated Liquid Pipe)"#, desc = r#""#, - value = "-1826023284" + value = "2067655311" ) )] - ItemWreckageAirConditioner1 = -1826023284i32, + ItemKitInsulatedLiquidPipe = 2067655311i32, #[strum( - serialize = "ItemWreckageHydroponicsTray1", + serialize = "StructureLiquidPipeRadiator", props( - name = r#"Wreckage Hydroponics Tray"#, + name = r#"Liquid Pipe Convection Radiator"#, + desc = r#"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. +The 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", + props(name = r#"Logic Hash Generator"#, desc = r#""#, value = "2077593121") + )] + StructureLogicHashGen = 2077593121i32, + #[strum( + serialize = "AccessCardWhite", + props(name = r#"Access Card (White)"#, desc = r#""#, value = "2079959157") + )] + AccessCardWhite = 2079959157i32, + #[strum( + serialize = "StructureCableStraightHBurnt", + props(name = r#"Burnt Cable (Straight)"#, desc = r#""#, value = "2085762089") + )] + StructureCableStraightHBurnt = 2085762089i32, + #[strum( + serialize = "StructureWallPaddedWindow", + props(name = r#"Wall (Padded Window)"#, desc = r#""#, value = "2087628940") + )] + StructureWallPaddedWindow = 2087628940i32, + #[strum( + serialize = "StructureLogicMirror", + props(name = r#"Logic Mirror"#, desc = r#""#, value = "2096189278") + )] + StructureLogicMirror = 2096189278i32, + #[strum( + serialize = "StructureWallFlatCornerTriangle", + props( + name = r#"Wall (Flat Corner Triangle)"#, desc = r#""#, - value = "-310178617" + value = "2097419366" ) )] - ItemWreckageHydroponicsTray1 = -310178617i32, + StructureWallFlatCornerTriangle = 2097419366i32, #[strum( - serialize = "ItemWreckageLargeExtendableRadiator01", + serialize = "StructureBackLiquidPressureRegulator", props( - name = r#"Wreckage Large Extendable Radiator"#, + name = r#"Liquid Back Volume Regulator"#, + desc = r#"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", + props(name = r#"Small Tank (Fuel)"#, desc = r#""#, value = "2102454415") + )] + StructureTankSmallFuel = 2102454415i32, + #[strum( + serialize = "ItemEmergencyWireCutters", + props(name = r#"Emergency Wire Cutters"#, desc = r#""#, value = "2102803952") + )] + ItemEmergencyWireCutters = 2102803952i32, + #[strum( + serialize = "StructureGasMixer", + props( + name = r#"Gas Mixer"#, + desc = r#"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", + props( + name = r#"Composite Floor Grating Open"#, desc = r#""#, - value = "-997763" + value = "2109695912" ) )] - ItemWreckageLargeExtendableRadiator01 = -997763i32, + StructureCompositeFloorGratingOpen = 2109695912i32, #[strum( - serialize = "ItemWreckageStructureRTG1", - props(name = r#"Wreckage Structure RTG"#, desc = r#""#, value = "391453348") - )] - ItemWreckageStructureRtg1 = 391453348i32, - #[strum( - serialize = "ItemWreckageStructureWeatherStation003", + serialize = "ItemRocketMiningDrillHead", props( - name = r#"Wreckage Structure Weather Station"#, - desc = r#""#, - value = "542009679" + name = r#"Mining-Drill Head (Basic)"#, + desc = r#"Replaceable drill head for Rocket Miner"#, + value = "2109945337" ) )] - ItemWreckageStructureWeatherStation003 = 542009679i32, + ItemRocketMiningDrillHead = 2109945337i32, #[strum( - serialize = "ItemWreckageStructureWeatherStation002", + serialize = "DynamicMKIILiquidCanisterEmpty", props( - name = r#"Wreckage Structure Weather Station"#, - desc = r#""#, - value = "1464424921" + name = r#"Portable Liquid Tank Mk II"#, + desc = r#"An empty, insulated liquid Gas Canister."#, + value = "2130739600" ) )] - ItemWreckageStructureWeatherStation002 = 1464424921i32, + DynamicMkiiLiquidCanisterEmpty = 2130739600i32, #[strum( - serialize = "ItemWreckageStructureWeatherStation005", + serialize = "ItemSpaceOre", props( - name = r#"Wreckage Structure Weather Station"#, - desc = r#""#, - value = "-919745414" + name = r#"Dirty Ore"#, + desc = r#"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" ) )] - ItemWreckageStructureWeatherStation005 = -919745414i32, + ItemSpaceOre = 2131916219i32, #[strum( - serialize = "ItemWreckageStructureWeatherStation007", + serialize = "ItemKitStandardChute", + props(name = r#"Kit (Powered Chutes)"#, desc = r#""#, value = "2133035682") + )] + ItemKitStandardChute = 2133035682i32, + #[strum( + serialize = "StructureInsulatedPipeStraight", props( - name = r#"Wreckage Structure Weather Station"#, - desc = r#""#, - value = "656649558" + name = r#"Insulated Pipe (Straight)"#, + desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, + value = "2134172356" ) )] - ItemWreckageStructureWeatherStation007 = 656649558i32, + StructureInsulatedPipeStraight = 2134172356i32, #[strum( - serialize = "ItemWreckageStructureWeatherStation001", - props( - name = r#"Wreckage Structure Weather Station"#, - desc = r#""#, - value = "-834664349" - ) + serialize = "ItemLeadIngot", + props(name = r#"Ingot (Lead)"#, desc = r#""#, value = "2134647745") )] - ItemWreckageStructureWeatherStation001 = -834664349i32, + ItemLeadIngot = 2134647745i32, #[strum( - serialize = "ItemWreckageStructureWeatherStation006", - props( - name = r#"Wreckage Structure Weather Station"#, - desc = r#""#, - value = "1344576960" - ) + serialize = "ItemGasCanisterNitrogen", + props(name = r#"Canister (Nitrogen)"#, desc = r#""#, value = "2145068424") )] - ItemWreckageStructureWeatherStation006 = 1344576960i32, - #[strum( - serialize = "ItemWreckageStructureWeatherStation004", - props( - name = r#"Wreckage Structure Weather Station"#, - desc = r#""#, - value = "-1104478996" - ) - )] - ItemWreckageStructureWeatherStation004 = -1104478996i32, - #[strum( - serialize = "ItemWreckageStructureWeatherStation008", - props( - name = r#"Wreckage Structure Weather Station"#, - desc = r#""#, - value = "-1214467897" - ) - )] - ItemWreckageStructureWeatherStation008 = -1214467897i32, - #[strum( - serialize = "ItemWreckageTurbineGenerator1", - props( - name = r#"Wreckage Turbine Generator"#, - desc = r#""#, - value = "-1662394403" - ) - )] - ItemWreckageTurbineGenerator1 = -1662394403i32, - #[strum( - serialize = "ItemWreckageTurbineGenerator2", - props( - name = r#"Wreckage Turbine Generator"#, - desc = r#""#, - value = "98602599" - ) - )] - ItemWreckageTurbineGenerator2 = 98602599i32, - #[strum( - serialize = "ItemWreckageTurbineGenerator3", - props( - name = r#"Wreckage Turbine Generator"#, - desc = r#""#, - value = "1927790321" - ) - )] - ItemWreckageTurbineGenerator3 = 1927790321i32, - #[strum( - serialize = "ItemWreckageWallCooler1", - props(name = r#"Wreckage Wall Cooler"#, desc = r#""#, value = "-1682930158") - )] - ItemWreckageWallCooler1 = -1682930158i32, - #[strum( - serialize = "ItemWreckageWallCooler2", - props(name = r#"Wreckage Wall Cooler"#, desc = r#""#, value = "45733800") - )] - ItemWreckageWallCooler2 = 45733800i32, - #[strum( - serialize = "ItemWrench", - props( - name = r#"Wrench"#, - desc = r#"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 = "CartridgeElectronicReader", - props(name = r#"eReader"#, desc = r#""#, value = "-1462180176") - )] - CartridgeElectronicReader = -1462180176i32, + ItemGasCanisterNitrogen = 2145068424i32, } diff --git a/ic10emu/src/vm/enums/script_enums.rs b/ic10emu/src/vm/enums/script_enums.rs index 331ffb2..1330e25 100644 --- a/ic10emu/src/vm/enums/script_enums.rs +++ b/ic10emu/src/vm/enums/script_enums.rs @@ -34,12 +34,12 @@ use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; pub enum LogicBatchMethod { #[strum(serialize = "Average", props(docs = r#""#, value = "0"))] Average = 0u8, - #[strum(serialize = "Maximum", props(docs = r#""#, value = "3"))] - Maximum = 3u8, - #[strum(serialize = "Minimum", props(docs = r#""#, value = "2"))] - Minimum = 2u8, #[strum(serialize = "Sum", props(docs = r#""#, value = "1"))] Sum = 1u8, + #[strum(serialize = "Minimum", props(docs = r#""#, value = "2"))] + Minimum = 2u8, + #[strum(serialize = "Maximum", props(docs = r#""#, value = "3"))] + Maximum = 3u8, } #[derive( Debug, @@ -64,15 +64,16 @@ pub enum LogicBatchMethod { pub enum LogicReagentMode { #[strum(serialize = "Contents", props(docs = r#""#, value = "0"))] Contents = 0u8, - #[strum(serialize = "Recipe", props(docs = r#""#, value = "2"))] - Recipe = 2u8, #[strum(serialize = "Required", props(docs = r#""#, value = "1"))] Required = 1u8, + #[strum(serialize = "Recipe", props(docs = r#""#, value = "2"))] + Recipe = 2u8, #[strum(serialize = "TotalContents", props(docs = r#""#, value = "3"))] TotalContents = 3u8, } #[derive( Debug, + Default, Display, Clone, Copy, @@ -92,6 +93,78 @@ pub enum LogicReagentMode { #[strum(use_phf)] #[repr(u8)] pub enum LogicSlotType { + #[strum(serialize = "None", props(docs = r#"No description"#, value = "0"))] + #[default] + None = 0u8, + #[strum( + serialize = "Occupied", + props( + docs = r#"returns 0 when slot is not occupied, 1 when it is"#, + value = "1" + ) + )] + Occupied = 1u8, + #[strum( + serialize = "OccupantHash", + props( + docs = r#"returns the has of the current occupant, the unique identifier of the thing"#, + value = "2" + ) + )] + OccupantHash = 2u8, + #[strum( + serialize = "Quantity", + props( + docs = r#"returns the current quantity, such as stack size, of the item in the slot"#, + value = "3" + ) + )] + Quantity = 3u8, + #[strum( + serialize = "Damage", + props( + docs = r#"returns the damage state of the item in the slot"#, + value = "4" + ) + )] + Damage = 4u8, + #[strum( + serialize = "Efficiency", + props( + docs = r#"returns the growth efficiency of the plant in the slot"#, + value = "5" + ) + )] + Efficiency = 5u8, + #[strum( + serialize = "Health", + props(docs = r#"returns the health of the plant in the slot"#, value = "6") + )] + Health = 6u8, + #[strum( + serialize = "Growth", + props( + docs = r#"returns the current growth state of the plant in the slot"#, + value = "7" + ) + )] + Growth = 7u8, + #[strum( + serialize = "Pressure", + props( + docs = r#"returns pressure of the slot occupants internal atmosphere"#, + value = "8" + ) + )] + Pressure = 8u8, + #[strum( + serialize = "Temperature", + props( + docs = r#"returns temperature of the slot occupants internal atmosphere"#, + value = "9" + ) + )] + Temperature = 9u8, #[strum( serialize = "Charge", props( @@ -117,112 +190,13 @@ pub enum LogicSlotType { )] Class = 12u8, #[strum( - serialize = "Damage", + serialize = "PressureWaste", props( - docs = r#"returns the damage state of the item in the slot"#, - value = "4" + docs = r#"returns pressure in the waste tank of the jetpack in this slot"#, + value = "13" ) )] - Damage = 4u8, - #[strum( - serialize = "Efficiency", - props( - docs = r#"returns the growth efficiency of the plant in the slot"#, - value = "5" - ) - )] - Efficiency = 5u8, - #[strum( - serialize = "FilterType", - props(docs = r#"No description available"#, value = "25") - )] - FilterType = 25u8, - #[strum( - serialize = "Growth", - props( - docs = r#"returns the current growth state of the plant in the slot"#, - value = "7" - ) - )] - Growth = 7u8, - #[strum( - serialize = "Health", - props(docs = r#"returns the health of the plant in the slot"#, value = "6") - )] - Health = 6u8, - #[strum( - serialize = "LineNumber", - props( - docs = r#"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 = "Lock", - props(docs = r#"No description available"#, value = "23") - )] - Lock = 23u8, - #[strum( - serialize = "Mature", - props( - docs = r#"returns 1 if the plant in this slot is mature, 0 when it isn't"#, - value = "16" - ) - )] - Mature = 16u8, - #[strum( - serialize = "MaxQuantity", - props( - docs = r#"returns the max stack size of the item in the slot"#, - value = "15" - ) - )] - MaxQuantity = 15u8, - #[strum(serialize = "None", props(docs = r#"No description"#, value = "0"))] - None = 0u8, - #[strum( - serialize = "OccupantHash", - props( - docs = r#"returns the has of the current occupant, the unique identifier of the thing"#, - value = "2" - ) - )] - OccupantHash = 2u8, - #[strum( - serialize = "Occupied", - props( - docs = r#"returns 0 when slot is not occupied, 1 when it is"#, - value = "1" - ) - )] - Occupied = 1u8, - #[strum( - serialize = "On", - props(docs = r#"No description available"#, value = "22") - )] - On = 22u8, - #[strum( - serialize = "Open", - props(docs = r#"No description available"#, value = "21") - )] - Open = 21u8, - #[strum( - serialize = "PrefabHash", - props( - docs = r#"returns the hash of the structure in the slot"#, - value = "17" - ) - )] - PrefabHash = 17u8, - #[strum( - serialize = "Pressure", - props( - docs = r#"returns pressure of the slot occupants internal atmosphere"#, - value = "8" - ) - )] - Pressure = 8u8, + PressureWaste = 13u8, #[strum( serialize = "PressureAir", props( @@ -232,26 +206,29 @@ pub enum LogicSlotType { )] PressureAir = 14u8, #[strum( - serialize = "PressureWaste", + serialize = "MaxQuantity", props( - docs = r#"returns pressure in the waste tank of the jetpack in this slot"#, - value = "13" + docs = r#"returns the max stack size of the item in the slot"#, + value = "15" ) )] - PressureWaste = 13u8, + MaxQuantity = 15u8, #[strum( - serialize = "Quantity", + serialize = "Mature", props( - docs = r#"returns the current quantity, such as stack size, of the item in the slot"#, - value = "3" + docs = r#"returns 1 if the plant in this slot is mature, 0 when it isn't"#, + value = "16" ) )] - Quantity = 3u8, + Mature = 16u8, #[strum( - serialize = "ReferenceId", - props(docs = r#"Unique Reference Identifier for this object"#, value = "26") + serialize = "PrefabHash", + props( + docs = r#"returns the hash of the structure in the slot"#, + value = "17" + ) )] - ReferenceId = 26u8, + PrefabHash = 17u8, #[strum( serialize = "Seeding", props( @@ -261,26 +238,52 @@ pub enum LogicSlotType { )] Seeding = 18u8, #[strum( - serialize = "SortingClass", - props(docs = r#"No description available"#, value = "24") - )] - SortingClass = 24u8, - #[strum( - serialize = "Temperature", + serialize = "LineNumber", props( - docs = r#"returns temperature of the slot occupants internal atmosphere"#, - value = "9" + docs = r#"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" ) )] - Temperature = 9u8, + LineNumber = 19u8, #[strum( serialize = "Volume", props(docs = r#"No description available"#, value = "20") )] Volume = 20u8, + #[strum( + serialize = "Open", + props(docs = r#"No description available"#, value = "21") + )] + Open = 21u8, + #[strum( + serialize = "On", + props(docs = r#"No description available"#, value = "22") + )] + On = 22u8, + #[strum( + serialize = "Lock", + props(docs = r#"No description available"#, value = "23") + )] + Lock = 23u8, + #[strum( + serialize = "SortingClass", + props(docs = r#"No description available"#, value = "24") + )] + SortingClass = 24u8, + #[strum( + serialize = "FilterType", + props(docs = r#"No description available"#, value = "25") + )] + FilterType = 25u8, + #[strum( + serialize = "ReferenceId", + props(docs = r#"Unique Reference Identifier for this object"#, value = "26") + )] + ReferenceId = 26u8, } #[derive( Debug, + Default, Display, Clone, Copy, @@ -301,13 +304,57 @@ pub enum LogicSlotType { #[repr(u16)] pub enum LogicType { #[strum( - serialize = "Acceleration", + serialize = "None", + props(deprecated = "true", docs = r#"No description"#, value = "0") + )] + #[default] + None = 0u16, + #[strum( + serialize = "Power", props( - docs = r#"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."#, - value = "216" + docs = r#"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" ) )] - Acceleration = 216u16, + Power = 1u16, + #[strum( + serialize = "Open", + props(docs = r#"1 if device is open, otherwise 0"#, value = "2") + )] + Open = 2u16, + #[strum( + serialize = "Mode", + props( + docs = r#"Integer for mode state, different devices will have different mode states available to them"#, + value = "3" + ) + )] + Mode = 3u16, + #[strum( + serialize = "Error", + props(docs = r#"1 if device is in error state, otherwise 0"#, value = "4") + )] + Error = 4u16, + #[strum( + serialize = "Pressure", + props(docs = r#"The current pressure reading of the device"#, value = "5") + )] + Pressure = 5u16, + #[strum( + serialize = "Temperature", + props(docs = r#"The current temperature reading of the device"#, value = "6") + )] + Temperature = 6u16, + #[strum( + serialize = "PressureExternal", + props(docs = r#"Setting for external pressure safety, in KPa"#, value = "7") + )] + PressureExternal = 7u16, + #[strum( + serialize = "PressureInternal", + props(docs = r#"Setting for internal pressure safety, in KPa"#, value = "8") + )] + PressureInternal = 8u16, #[strum( serialize = "Activate", props( @@ -316,6 +363,431 @@ pub enum LogicType { ) )] Activate = 9u16, + #[strum( + serialize = "Lock", + props( + docs = r#"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", + props(docs = r#"The current charge the device has"#, value = "11") + )] + Charge = 11u16, + #[strum( + serialize = "Setting", + props( + docs = r#"A variable setting that can be read or written, depending on the device"#, + value = "12" + ) + )] + Setting = 12u16, + #[strum( + serialize = "Reagents", + props( + docs = r#"Total number of reagents recorded by the device"#, + value = "13" + ) + )] + Reagents = 13u16, + #[strum( + serialize = "RatioOxygen", + props(docs = r#"The ratio of oxygen in device atmosphere"#, value = "14") + )] + RatioOxygen = 14u16, + #[strum( + serialize = "RatioCarbonDioxide", + props( + docs = r#"The ratio of Carbon Dioxide in device atmosphere"#, + value = "15" + ) + )] + RatioCarbonDioxide = 15u16, + #[strum( + serialize = "RatioNitrogen", + props(docs = r#"The ratio of nitrogen in device atmosphere"#, value = "16") + )] + RatioNitrogen = 16u16, + #[strum( + serialize = "RatioPollutant", + props(docs = r#"The ratio of pollutant in device atmosphere"#, value = "17") + )] + RatioPollutant = 17u16, + #[strum( + serialize = "RatioVolatiles", + props(docs = r#"The ratio of volatiles in device atmosphere"#, value = "18") + )] + RatioVolatiles = 18u16, + #[strum( + serialize = "RatioWater", + props(docs = r#"The ratio of water in device atmosphere"#, value = "19") + )] + RatioWater = 19u16, + #[strum( + serialize = "Horizontal", + props(docs = r#"Horizontal setting of the device"#, value = "20") + )] + Horizontal = 20u16, + #[strum( + serialize = "Vertical", + props(docs = r#"Vertical setting of the device"#, value = "21") + )] + Vertical = 21u16, + #[strum( + serialize = "SolarAngle", + props(docs = r#"Solar angle of the device"#, value = "22") + )] + SolarAngle = 22u16, + #[strum( + serialize = "Maximum", + props(docs = r#"Maximum setting of the device"#, value = "23") + )] + Maximum = 23u16, + #[strum( + serialize = "Ratio", + props( + docs = r#"Context specific value depending on device, 0 to 1 based ratio"#, + value = "24" + ) + )] + Ratio = 24u16, + #[strum( + serialize = "PowerPotential", + props( + docs = r#"How much energy the device or network potentially provides"#, + value = "25" + ) + )] + PowerPotential = 25u16, + #[strum( + serialize = "PowerActual", + props( + docs = r#"How much energy the device or network is actually using"#, + value = "26" + ) + )] + PowerActual = 26u16, + #[strum( + serialize = "Quantity", + props(docs = r#"Total quantity on the device"#, value = "27") + )] + Quantity = 27u16, + #[strum( + serialize = "On", + props( + docs = r#"The current state of the device, 0 for off, 1 for on"#, + value = "28" + ) + )] + On = 28u16, + #[strum( + serialize = "ImportQuantity", + props( + deprecated = "true", + docs = r#"Total quantity of items imported by the device"#, + value = "29" + ) + )] + ImportQuantity = 29u16, + #[strum( + serialize = "ImportSlotOccupant", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "30") + )] + ImportSlotOccupant = 30u16, + #[strum( + serialize = "ExportQuantity", + props( + deprecated = "true", + docs = r#"Total quantity of items exported by the device"#, + value = "31" + ) + )] + ExportQuantity = 31u16, + #[strum( + serialize = "ExportSlotOccupant", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "32") + )] + ExportSlotOccupant = 32u16, + #[strum( + serialize = "RequiredPower", + props( + docs = r#"Idle operating power quantity, does not necessarily include extra demand power"#, + value = "33" + ) + )] + RequiredPower = 33u16, + #[strum( + serialize = "HorizontalRatio", + props(docs = r#"Radio of horizontal setting for device"#, value = "34") + )] + HorizontalRatio = 34u16, + #[strum( + serialize = "VerticalRatio", + props(docs = r#"Radio of vertical setting for device"#, value = "35") + )] + VerticalRatio = 35u16, + #[strum( + serialize = "PowerRequired", + props( + docs = r#"Power requested from the device and/or network"#, + value = "36" + ) + )] + PowerRequired = 36u16, + #[strum( + serialize = "Idle", + props( + docs = r#"Returns 1 if the device is currently idle, otherwise 0"#, + value = "37" + ) + )] + Idle = 37u16, + #[strum( + serialize = "Color", + props( + docs = r#" + 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. + +0: Blue +1: Grey +2: Green +3: Orange +4: Red +5: Yellow +6: White +7: Black +8: Brown +9: Khaki +10: Pink +11: Purple + + 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. + "#, + value = "38" + ) + )] + Color = 38u16, + #[strum( + serialize = "ElevatorSpeed", + props(docs = r#"Current speed of the elevator"#, value = "39") + )] + ElevatorSpeed = 39u16, + #[strum( + serialize = "ElevatorLevel", + props(docs = r#"Level the elevator is currently at"#, value = "40") + )] + ElevatorLevel = 40u16, + #[strum( + serialize = "RecipeHash", + props( + docs = r#"Current hash of the recipe the device is set to produce"#, + value = "41" + ) + )] + RecipeHash = 41u16, + #[strum( + serialize = "ExportSlotHash", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "42") + )] + ExportSlotHash = 42u16, + #[strum( + serialize = "ImportSlotHash", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "43") + )] + ImportSlotHash = 43u16, + #[strum( + serialize = "PlantHealth1", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "44") + )] + PlantHealth1 = 44u16, + #[strum( + serialize = "PlantHealth2", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "45") + )] + PlantHealth2 = 45u16, + #[strum( + serialize = "PlantHealth3", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "46") + )] + PlantHealth3 = 46u16, + #[strum( + serialize = "PlantHealth4", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "47") + )] + PlantHealth4 = 47u16, + #[strum( + serialize = "PlantGrowth1", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "48") + )] + PlantGrowth1 = 48u16, + #[strum( + serialize = "PlantGrowth2", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "49") + )] + PlantGrowth2 = 49u16, + #[strum( + serialize = "PlantGrowth3", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "50") + )] + PlantGrowth3 = 50u16, + #[strum( + serialize = "PlantGrowth4", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "51") + )] + PlantGrowth4 = 51u16, + #[strum( + serialize = "PlantEfficiency1", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "52") + )] + PlantEfficiency1 = 52u16, + #[strum( + serialize = "PlantEfficiency2", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "53") + )] + PlantEfficiency2 = 53u16, + #[strum( + serialize = "PlantEfficiency3", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "54") + )] + PlantEfficiency3 = 54u16, + #[strum( + serialize = "PlantEfficiency4", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "55") + )] + PlantEfficiency4 = 55u16, + #[strum( + serialize = "PlantHash1", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "56") + )] + PlantHash1 = 56u16, + #[strum( + serialize = "PlantHash2", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "57") + )] + PlantHash2 = 57u16, + #[strum( + serialize = "PlantHash3", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "58") + )] + PlantHash3 = 58u16, + #[strum( + serialize = "PlantHash4", + props(deprecated = "true", docs = r#"DEPRECATED"#, value = "59") + )] + PlantHash4 = 59u16, + #[strum( + serialize = "RequestHash", + props( + docs = r#"When set to the unique identifier, requests an item of the provided type from the device"#, + value = "60" + ) + )] + RequestHash = 60u16, + #[strum( + serialize = "CompletionRatio", + props( + docs = r#"How complete the current production is for this device, between 0 and 1"#, + value = "61" + ) + )] + CompletionRatio = 61u16, + #[strum( + serialize = "ClearMemory", + props( + docs = r#"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", + props( + docs = r#"How many items exported since last ClearMemory"#, + value = "63" + ) + )] + ExportCount = 63u16, + #[strum( + serialize = "ImportCount", + props( + docs = r#"How many items imported since last ClearMemory"#, + value = "64" + ) + )] + ImportCount = 64u16, + #[strum( + serialize = "PowerGeneration", + props(docs = r#"Returns how much power is being generated"#, value = "65") + )] + PowerGeneration = 65u16, + #[strum( + serialize = "TotalMoles", + props(docs = r#"Returns the total moles of the device"#, value = "66") + )] + TotalMoles = 66u16, + #[strum( + serialize = "Volume", + props(docs = r#"Returns the device atmosphere volume"#, value = "67") + )] + Volume = 67u16, + #[strum( + serialize = "Plant", + props( + docs = r#"Performs the planting action for any plant based machinery"#, + value = "68" + ) + )] + Plant = 68u16, + #[strum( + serialize = "Harvest", + props( + docs = r#"Performs the harvesting action for any plant based machinery"#, + value = "69" + ) + )] + Harvest = 69u16, + #[strum( + serialize = "Output", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"#, + value = "72" + ) + )] + TemperatureSetting = 72u16, + #[strum( + serialize = "TemperatureExternal", + props( + docs = r#"The temperature of the outside of the device, usually the world atmosphere surrounding it"#, + value = "73" + ) + )] + TemperatureExternal = 73u16, + #[strum( + serialize = "Filtration", + props( + docs = r#"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", props( @@ -325,71 +797,679 @@ pub enum LogicType { )] AirRelease = 75u16, #[strum( - serialize = "AlignmentError", + serialize = "PositionX", props( - docs = r#"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" + docs = r#"The current position in X dimension in world coordinates"#, + value = "76" ) )] - AlignmentError = 243u16, + PositionX = 76u16, #[strum( - serialize = "Apex", + serialize = "PositionY", props( - docs = r#"The lowest altitude that the rocket will reach before it starts travelling upwards again."#, - value = "238" + docs = r#"The current position in Y dimension in world coordinates"#, + value = "77" ) )] - Apex = 238u16, + PositionY = 77u16, #[strum( - serialize = "AutoLand", + serialize = "PositionZ", props( - docs = r#"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."#, - value = "226" + docs = r#"The current position in Z dimension in world coordinates"#, + value = "78" ) )] - AutoLand = 226u16, + PositionZ = 78u16, #[strum( - serialize = "AutoShutOff", - props( - docs = r#"Turns off all devices in the rocket upon reaching destination"#, - value = "218" - ) + serialize = "VelocityMagnitude", + props(docs = r#"The current magnitude of the velocity vector"#, value = "79") )] - AutoShutOff = 218u16, + VelocityMagnitude = 79u16, #[strum( - serialize = "BestContactFilter", + serialize = "VelocityRelativeX", props( - docs = r#"Filters the satellite's auto selection of targets to a single reference ID."#, - value = "267" + docs = r#"The current velocity X relative to the forward vector of this"#, + value = "80" ) )] - BestContactFilter = 267u16, + VelocityRelativeX = 80u16, + #[strum( + serialize = "VelocityRelativeY", + props( + docs = r#"The current velocity Y relative to the forward vector of this"#, + value = "81" + ) + )] + VelocityRelativeY = 81u16, + #[strum( + serialize = "VelocityRelativeZ", + props( + docs = r#"The current velocity Z relative to the forward vector of this"#, + value = "82" + ) + )] + VelocityRelativeZ = 82u16, + #[strum( + serialize = "RatioNitrousOxide", + props( + docs = r#"The ratio of Nitrous Oxide in device atmosphere"#, + value = "83" + ) + )] + RatioNitrousOxide = 83u16, + #[strum( + serialize = "PrefabHash", + props(docs = r#"The hash of the structure"#, value = "84") + )] + PrefabHash = 84u16, + #[strum( + serialize = "ForceWrite", + props(docs = r#"Forces Logic Writer devices to rewrite value"#, value = "85") + )] + ForceWrite = 85u16, + #[strum( + serialize = "SignalStrength", + props( + docs = r#"Returns the degree offset of the strongest contact"#, + value = "86" + ) + )] + SignalStrength = 86u16, + #[strum( + serialize = "SignalID", + props( + docs = r#"Returns the contact ID of the strongest signal from this Satellite"#, + value = "87" + ) + )] + SignalId = 87u16, + #[strum( + serialize = "TargetX", + props( + docs = r#"The target position in X dimension in world coordinates"#, + value = "88" + ) + )] + TargetX = 88u16, + #[strum( + serialize = "TargetY", + props( + docs = r#"The target position in Y dimension in world coordinates"#, + value = "89" + ) + )] + TargetY = 89u16, + #[strum( + serialize = "TargetZ", + props( + docs = r#"The target position in Z dimension in world coordinates"#, + value = "90" + ) + )] + TargetZ = 90u16, + #[strum( + serialize = "SettingInput", + props(docs = r#""#, value = "91") + )] + SettingInput = 91u16, + #[strum( + serialize = "SettingOutput", + props(docs = r#""#, value = "92") + )] + SettingOutput = 92u16, + #[strum( + serialize = "CurrentResearchPodType", + props(docs = r#""#, value = "93") + )] + CurrentResearchPodType = 93u16, + #[strum( + serialize = "ManualResearchRequiredPod", + props( + docs = r#"Sets the pod type to search for a certain pod when breaking down a pods."#, + value = "94" + ) + )] + ManualResearchRequiredPod = 94u16, + #[strum( + serialize = "MineablesInVicinity", + props( + docs = r#"Returns the amount of potential mineables within an extended area around AIMEe."#, + value = "95" + ) + )] + MineablesInVicinity = 95u16, + #[strum( + serialize = "MineablesInQueue", + props( + docs = r#"Returns the amount of mineables AIMEe has queued up to mine."#, + value = "96" + ) + )] + MineablesInQueue = 96u16, + #[strum( + serialize = "NextWeatherEventTime", + props( + docs = r#"Returns in seconds when the next weather event is inbound."#, + value = "97" + ) + )] + NextWeatherEventTime = 97u16, + #[strum( + serialize = "Combustion", + props( + docs = r#"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."#, + value = "98" + ) + )] + Combustion = 98u16, + #[strum( + serialize = "Fuel", + props( + docs = r#"Gets the cost of fuel to return the rocket to your current world."#, + value = "99" + ) + )] + Fuel = 99u16, + #[strum( + serialize = "ReturnFuelCost", + props( + docs = r#"Gets the fuel remaining in your rocket's fuel tank."#, + value = "100" + ) + )] + ReturnFuelCost = 100u16, + #[strum( + serialize = "CollectableGoods", + props( + docs = r#"Gets the cost of fuel to return the rocket to your current world."#, + value = "101" + ) + )] + CollectableGoods = 101u16, + #[strum(serialize = "Time", props(docs = r#"Time"#, value = "102"))] + Time = 102u16, #[strum(serialize = "Bpm", props(docs = r#"Bpm"#, value = "103"))] Bpm = 103u16, #[strum( - serialize = "BurnTimeRemaining", + serialize = "EnvironmentEfficiency", props( - docs = r#"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."#, - value = "225" + docs = r#"The Environment Efficiency reported by the machine, as a float between 0 and 1"#, + value = "104" ) )] - BurnTimeRemaining = 225u16, + EnvironmentEfficiency = 104u16, #[strum( - serialize = "CelestialHash", + serialize = "WorkingGasEfficiency", props( - docs = r#"The current hash of the targeted celestial object."#, - value = "242" + docs = r#"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"#, + value = "105" ) )] - CelestialHash = 242u16, + WorkingGasEfficiency = 105u16, #[strum( - serialize = "CelestialParentHash", + serialize = "PressureInput", props( - docs = r#"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."#, - value = "250" + docs = r#"The current pressure reading of the device's Input Network"#, + value = "106" ) )] - CelestialParentHash = 250u16, + PressureInput = 106u16, + #[strum( + serialize = "TemperatureInput", + props( + docs = r#"The current temperature reading of the device's Input Network"#, + value = "107" + ) + )] + TemperatureInput = 107u16, + #[strum( + serialize = "RatioOxygenInput", + props( + docs = r#"The ratio of oxygen in device's input network"#, + value = "108" + ) + )] + RatioOxygenInput = 108u16, + #[strum( + serialize = "RatioCarbonDioxideInput", + props( + docs = r#"The ratio of Carbon Dioxide in device's input network"#, + value = "109" + ) + )] + RatioCarbonDioxideInput = 109u16, + #[strum( + serialize = "RatioNitrogenInput", + props( + docs = r#"The ratio of nitrogen in device's input network"#, + value = "110" + ) + )] + RatioNitrogenInput = 110u16, + #[strum( + serialize = "RatioPollutantInput", + props( + docs = r#"The ratio of pollutant in device's input network"#, + value = "111" + ) + )] + RatioPollutantInput = 111u16, + #[strum( + serialize = "RatioVolatilesInput", + props( + docs = r#"The ratio of volatiles in device's input network"#, + value = "112" + ) + )] + RatioVolatilesInput = 112u16, + #[strum( + serialize = "RatioWaterInput", + props( + docs = r#"The ratio of water in device's input network"#, + value = "113" + ) + )] + RatioWaterInput = 113u16, + #[strum( + serialize = "RatioNitrousOxideInput", + props( + docs = r#"The ratio of Nitrous Oxide in device's input network"#, + value = "114" + ) + )] + RatioNitrousOxideInput = 114u16, + #[strum( + serialize = "TotalMolesInput", + props( + docs = r#"Returns the total moles of the device's Input Network"#, + value = "115" + ) + )] + TotalMolesInput = 115u16, + #[strum( + serialize = "PressureInput2", + props( + docs = r#"The current pressure reading of the device's Input2 Network"#, + value = "116" + ) + )] + PressureInput2 = 116u16, + #[strum( + serialize = "TemperatureInput2", + props( + docs = r#"The current temperature reading of the device's Input2 Network"#, + value = "117" + ) + )] + TemperatureInput2 = 117u16, + #[strum( + serialize = "RatioOxygenInput2", + props( + docs = r#"The ratio of oxygen in device's Input2 network"#, + value = "118" + ) + )] + RatioOxygenInput2 = 118u16, + #[strum( + serialize = "RatioCarbonDioxideInput2", + props( + docs = r#"The ratio of Carbon Dioxide in device's Input2 network"#, + value = "119" + ) + )] + RatioCarbonDioxideInput2 = 119u16, + #[strum( + serialize = "RatioNitrogenInput2", + props( + docs = r#"The ratio of nitrogen in device's Input2 network"#, + value = "120" + ) + )] + RatioNitrogenInput2 = 120u16, + #[strum( + serialize = "RatioPollutantInput2", + props( + docs = r#"The ratio of pollutant in device's Input2 network"#, + value = "121" + ) + )] + RatioPollutantInput2 = 121u16, + #[strum( + serialize = "RatioVolatilesInput2", + props( + docs = r#"The ratio of volatiles in device's Input2 network"#, + value = "122" + ) + )] + RatioVolatilesInput2 = 122u16, + #[strum( + serialize = "RatioWaterInput2", + props( + docs = r#"The ratio of water in device's Input2 network"#, + value = "123" + ) + )] + RatioWaterInput2 = 123u16, + #[strum( + serialize = "RatioNitrousOxideInput2", + props( + docs = r#"The ratio of Nitrous Oxide in device's Input2 network"#, + value = "124" + ) + )] + RatioNitrousOxideInput2 = 124u16, + #[strum( + serialize = "TotalMolesInput2", + props( + docs = r#"Returns the total moles of the device's Input2 Network"#, + value = "125" + ) + )] + TotalMolesInput2 = 125u16, + #[strum( + serialize = "PressureOutput", + props( + docs = r#"The current pressure reading of the device's Output Network"#, + value = "126" + ) + )] + PressureOutput = 126u16, + #[strum( + serialize = "TemperatureOutput", + props( + docs = r#"The current temperature reading of the device's Output Network"#, + value = "127" + ) + )] + TemperatureOutput = 127u16, + #[strum( + serialize = "RatioOxygenOutput", + props( + docs = r#"The ratio of oxygen in device's Output network"#, + value = "128" + ) + )] + RatioOxygenOutput = 128u16, + #[strum( + serialize = "RatioCarbonDioxideOutput", + props( + docs = r#"The ratio of Carbon Dioxide in device's Output network"#, + value = "129" + ) + )] + RatioCarbonDioxideOutput = 129u16, + #[strum( + serialize = "RatioNitrogenOutput", + props( + docs = r#"The ratio of nitrogen in device's Output network"#, + value = "130" + ) + )] + RatioNitrogenOutput = 130u16, + #[strum( + serialize = "RatioPollutantOutput", + props( + docs = r#"The ratio of pollutant in device's Output network"#, + value = "131" + ) + )] + RatioPollutantOutput = 131u16, + #[strum( + serialize = "RatioVolatilesOutput", + props( + docs = r#"The ratio of volatiles in device's Output network"#, + value = "132" + ) + )] + RatioVolatilesOutput = 132u16, + #[strum( + serialize = "RatioWaterOutput", + props( + docs = r#"The ratio of water in device's Output network"#, + value = "133" + ) + )] + RatioWaterOutput = 133u16, + #[strum( + serialize = "RatioNitrousOxideOutput", + props( + docs = r#"The ratio of Nitrous Oxide in device's Output network"#, + value = "134" + ) + )] + RatioNitrousOxideOutput = 134u16, + #[strum( + serialize = "TotalMolesOutput", + props( + docs = r#"Returns the total moles of the device's Output Network"#, + value = "135" + ) + )] + TotalMolesOutput = 135u16, + #[strum( + serialize = "PressureOutput2", + props( + docs = r#"The current pressure reading of the device's Output2 Network"#, + value = "136" + ) + )] + PressureOutput2 = 136u16, + #[strum( + serialize = "TemperatureOutput2", + props( + docs = r#"The current temperature reading of the device's Output2 Network"#, + value = "137" + ) + )] + TemperatureOutput2 = 137u16, + #[strum( + serialize = "RatioOxygenOutput2", + props( + docs = r#"The ratio of oxygen in device's Output2 network"#, + value = "138" + ) + )] + RatioOxygenOutput2 = 138u16, + #[strum( + serialize = "RatioCarbonDioxideOutput2", + props( + docs = r#"The ratio of Carbon Dioxide in device's Output2 network"#, + value = "139" + ) + )] + RatioCarbonDioxideOutput2 = 139u16, + #[strum( + serialize = "RatioNitrogenOutput2", + props( + docs = r#"The ratio of nitrogen in device's Output2 network"#, + value = "140" + ) + )] + RatioNitrogenOutput2 = 140u16, + #[strum( + serialize = "RatioPollutantOutput2", + props( + docs = r#"The ratio of pollutant in device's Output2 network"#, + value = "141" + ) + )] + RatioPollutantOutput2 = 141u16, + #[strum( + serialize = "RatioVolatilesOutput2", + props( + docs = r#"The ratio of volatiles in device's Output2 network"#, + value = "142" + ) + )] + RatioVolatilesOutput2 = 142u16, + #[strum( + serialize = "RatioWaterOutput2", + props( + docs = r#"The ratio of water in device's Output2 network"#, + value = "143" + ) + )] + RatioWaterOutput2 = 143u16, + #[strum( + serialize = "RatioNitrousOxideOutput2", + props( + docs = r#"The ratio of Nitrous Oxide in device's Output2 network"#, + value = "144" + ) + )] + RatioNitrousOxideOutput2 = 144u16, + #[strum( + serialize = "TotalMolesOutput2", + props( + docs = r#"Returns the total moles of the device's Output2 Network"#, + value = "145" + ) + )] + TotalMolesOutput2 = 145u16, + #[strum( + serialize = "CombustionInput", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"How the input pipe's temperature effects the machines efficiency"#, + value = "150" + ) + )] + OperationalTemperatureEfficiency = 150u16, + #[strum( + serialize = "TemperatureDifferentialEfficiency", + props( + docs = r#"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"#, + value = "151" + ) + )] + TemperatureDifferentialEfficiency = 151u16, + #[strum( + serialize = "PressureEfficiency", + props( + docs = r#"How the pressure of the input pipe and waste pipe effect the machines efficiency"#, + value = "152" + ) + )] + PressureEfficiency = 152u16, + #[strum( + serialize = "CombustionLimiter", + props( + docs = r#"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", + props( + docs = r#"Increases the rate at which the machine works (range: 0-100)"#, + value = "154" + ) + )] + Throttle = 154u16, + #[strum( + serialize = "Rpm", + props( + docs = r#"The number of revolutions per minute that the device's spinning mechanism is doing"#, + value = "155" + ) + )] + Rpm = 155u16, + #[strum( + serialize = "Stress", + props( + docs = r#"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"#, + value = "156" + ) + )] + Stress = 156u16, + #[strum( + serialize = "InterrogationProgress", + props( + docs = r#"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"#, + value = "157" + ) + )] + InterrogationProgress = 157u16, + #[strum( + serialize = "TargetPadIndex", + props( + docs = r#"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", + props( + docs = r#"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"#, + value = "160" + ) + )] + SizeX = 160u16, + #[strum( + serialize = "SizeY", + props( + docs = r#"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"#, + value = "161" + ) + )] + SizeY = 161u16, + #[strum( + serialize = "SizeZ", + props( + docs = r#"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"#, + value = "162" + ) + )] + SizeZ = 162u16, + #[strum( + serialize = "MinimumWattsToContact", + props( + docs = r#"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", + props( + docs = r#"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", props( @@ -455,284 +1535,13 @@ pub enum LogicType { )] Channel7 = 172u16, #[strum( - serialize = "Charge", - props(docs = r#"The current charge the device has"#, value = "11") - )] - Charge = 11u16, - #[strum( - serialize = "Chart", + serialize = "LineNumber", props( - docs = r#"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" + docs = r#"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" ) )] - Chart = 256u16, - #[strum( - serialize = "ChartedNavPoints", - props( - docs = r#"The number of charted NavPoints at the rocket's target Space Map Location."#, - value = "259" - ) - )] - ChartedNavPoints = 259u16, - #[strum( - serialize = "ClearMemory", - props( - docs = r#"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 = "CollectableGoods", - props( - docs = r#"Gets the cost of fuel to return the rocket to your current world."#, - value = "101" - ) - )] - CollectableGoods = 101u16, - #[strum( - serialize = "Color", - props( - docs = r#" - 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. - -0: Blue -1: Grey -2: Green -3: Orange -4: Red -5: Yellow -6: White -7: Black -8: Brown -9: Khaki -10: Pink -11: Purple - - 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. - "#, - value = "38" - ) - )] - Color = 38u16, - #[strum( - serialize = "Combustion", - props( - docs = r#"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."#, - value = "98" - ) - )] - Combustion = 98u16, - #[strum( - serialize = "CombustionInput", - props( - docs = r#"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", - props( - docs = r#"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 = "CombustionLimiter", - props( - docs = r#"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 = "CombustionOutput", - props( - docs = r#"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", - props( - docs = r#"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 = "CompletionRatio", - props( - docs = r#"How complete the current production is for this device, between 0 and 1"#, - value = "61" - ) - )] - CompletionRatio = 61u16, - #[strum( - serialize = "ContactTypeId", - props(docs = r#"The type id of the contact."#, value = "198") - )] - ContactTypeId = 198u16, - #[strum( - serialize = "CurrentCode", - props( - docs = r#"The Space Map Address of the rockets current Space Map Location"#, - value = "261" - ) - )] - CurrentCode = 261u16, - #[strum( - serialize = "CurrentResearchPodType", - props(docs = r#""#, value = "93") - )] - CurrentResearchPodType = 93u16, - #[strum( - serialize = "Density", - props( - docs = r#"The density of the rocket's target site's mine-able deposit."#, - value = "262" - ) - )] - Density = 262u16, - #[strum( - serialize = "DestinationCode", - props( - docs = r#"The Space Map Address of the rockets target Space Map Location"#, - value = "215" - ) - )] - DestinationCode = 215u16, - #[strum( - serialize = "Discover", - props( - docs = r#"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 = "DistanceAu", - props( - docs = r#"The current distance to the celestial object, measured in astronomical units."#, - value = "244" - ) - )] - DistanceAu = 244u16, - #[strum( - serialize = "DistanceKm", - props( - docs = r#"The current distance to the celestial object, measured in kilometers."#, - value = "249" - ) - )] - DistanceKm = 249u16, - #[strum( - serialize = "DrillCondition", - props( - docs = r#"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 = "DryMass", - props( - docs = r#"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 = "Eccentricity", - props( - docs = r#"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 = "ElevatorLevel", - props(docs = r#"Level the elevator is currently at"#, value = "40") - )] - ElevatorLevel = 40u16, - #[strum( - serialize = "ElevatorSpeed", - props(docs = r#"Current speed of the elevator"#, value = "39") - )] - ElevatorSpeed = 39u16, - #[strum( - serialize = "EntityState", - props( - docs = r#"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."#, - value = "239" - ) - )] - EntityState = 239u16, - #[strum( - serialize = "EnvironmentEfficiency", - props( - docs = r#"The Environment Efficiency reported by the machine, as a float between 0 and 1"#, - value = "104" - ) - )] - EnvironmentEfficiency = 104u16, - #[strum( - serialize = "Error", - props(docs = r#"1 if device is in error state, otherwise 0"#, value = "4") - )] - Error = 4u16, - #[strum( - serialize = "ExhaustVelocity", - props(docs = r#"The velocity of the exhaust gas in m/s"#, value = "235") - )] - ExhaustVelocity = 235u16, - #[strum( - serialize = "ExportCount", - props( - docs = r#"How many items exported since last ClearMemory"#, - value = "63" - ) - )] - ExportCount = 63u16, - #[strum( - serialize = "ExportQuantity", - props( - deprecated = "true", - docs = r#"Total quantity of items exported by the device"#, - value = "31" - ) - )] - ExportQuantity = 31u16, - #[strum( - serialize = "ExportSlotHash", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "42") - )] - ExportSlotHash = 42u16, - #[strum( - serialize = "ExportSlotOccupant", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "32") - )] - ExportSlotOccupant = 32u16, - #[strum( - serialize = "Filtration", - props( - docs = r#"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"#, - value = "74" - ) - )] - Filtration = 74u16, - #[strum( - serialize = "FlightControlRule", - props( - docs = r#"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, + LineNumber = 173u16, #[strum( serialize = "Flush", props( @@ -742,601 +1551,15 @@ pub enum LogicType { )] Flush = 174u16, #[strum( - serialize = "ForceWrite", - props(docs = r#"Forces Logic Writer devices to rewrite value"#, value = "85") + serialize = "SoundAlert", + props(docs = r#"Plays a sound alert on the devices speaker"#, value = "175") )] - ForceWrite = 85u16, + SoundAlert = 175u16, #[strum( - serialize = "ForwardX", - props( - docs = r#"The direction the entity is facing expressed as a normalized vector"#, - value = "227" - ) + serialize = "SolarIrradiance", + props(docs = r#""#, value = "176") )] - ForwardX = 227u16, - #[strum( - serialize = "ForwardY", - props( - docs = r#"The direction the entity is facing expressed as a normalized vector"#, - value = "228" - ) - )] - ForwardY = 228u16, - #[strum( - serialize = "ForwardZ", - props( - docs = r#"The direction the entity is facing expressed as a normalized vector"#, - value = "229" - ) - )] - ForwardZ = 229u16, - #[strum( - serialize = "Fuel", - props( - docs = r#"Gets the cost of fuel to return the rocket to your current world."#, - value = "99" - ) - )] - Fuel = 99u16, - #[strum( - serialize = "Harvest", - props( - docs = r#"Performs the harvesting action for any plant based machinery"#, - value = "69" - ) - )] - Harvest = 69u16, - #[strum( - serialize = "Horizontal", - props(docs = r#"Horizontal setting of the device"#, value = "20") - )] - Horizontal = 20u16, - #[strum( - serialize = "HorizontalRatio", - props(docs = r#"Radio of horizontal setting for device"#, value = "34") - )] - HorizontalRatio = 34u16, - #[strum( - serialize = "Idle", - props( - docs = r#"Returns 1 if the device is currently idle, otherwise 0"#, - value = "37" - ) - )] - Idle = 37u16, - #[strum( - serialize = "ImportCount", - props( - docs = r#"How many items imported since last ClearMemory"#, - value = "64" - ) - )] - ImportCount = 64u16, - #[strum( - serialize = "ImportQuantity", - props( - deprecated = "true", - docs = r#"Total quantity of items imported by the device"#, - value = "29" - ) - )] - ImportQuantity = 29u16, - #[strum( - serialize = "ImportSlotHash", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "43") - )] - ImportSlotHash = 43u16, - #[strum( - serialize = "ImportSlotOccupant", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "30") - )] - ImportSlotOccupant = 30u16, - #[strum( - serialize = "Inclination", - props( - docs = r#"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 = "Index", - props(docs = r#"The current index for the device."#, value = "241") - )] - Index = 241u16, - #[strum( - serialize = "InterrogationProgress", - props( - docs = r#"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"#, - value = "157" - ) - )] - InterrogationProgress = 157u16, - #[strum( - serialize = "LineNumber", - props( - docs = r#"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 = "Lock", - props( - docs = r#"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 = "ManualResearchRequiredPod", - props( - docs = r#"Sets the pod type to search for a certain pod when breaking down a pods."#, - value = "94" - ) - )] - ManualResearchRequiredPod = 94u16, - #[strum( - serialize = "Mass", - props( - docs = r#"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 = "Maximum", - props(docs = r#"Maximum setting of the device"#, value = "23") - )] - Maximum = 23u16, - #[strum( - serialize = "MineablesInQueue", - props( - docs = r#"Returns the amount of mineables AIMEe has queued up to mine."#, - value = "96" - ) - )] - MineablesInQueue = 96u16, - #[strum( - serialize = "MineablesInVicinity", - props( - docs = r#"Returns the amount of potential mineables within an extended area around AIMEe."#, - value = "95" - ) - )] - MineablesInVicinity = 95u16, - #[strum( - serialize = "MinedQuantity", - props( - docs = r#"The total number of resources that have been mined at the rocket's target Space Map Site."#, - value = "266" - ) - )] - MinedQuantity = 266u16, - #[strum( - serialize = "MinimumWattsToContact", - props( - docs = r#"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"#, - value = "163" - ) - )] - MinimumWattsToContact = 163u16, - #[strum( - serialize = "Mode", - props( - docs = r#"Integer for mode state, different devices will have different mode states available to them"#, - value = "3" - ) - )] - Mode = 3u16, - #[strum( - serialize = "NavPoints", - props( - docs = r#"The number of NavPoints at the rocket's target Space Map Location."#, - value = "258" - ) - )] - NavPoints = 258u16, - #[strum( - serialize = "NextWeatherEventTime", - props( - docs = r#"Returns in seconds when the next weather event is inbound."#, - value = "97" - ) - )] - NextWeatherEventTime = 97u16, - #[strum( - serialize = "None", - props(deprecated = "true", docs = r#"No description"#, value = "0") - )] - None = 0u16, - #[strum( - serialize = "On", - props( - docs = r#"The current state of the device, 0 for off, 1 for on"#, - value = "28" - ) - )] - On = 28u16, - #[strum( - serialize = "Open", - props(docs = r#"1 if device is open, otherwise 0"#, value = "2") - )] - Open = 2u16, - #[strum( - serialize = "OperationalTemperatureEfficiency", - props( - docs = r#"How the input pipe's temperature effects the machines efficiency"#, - value = "150" - ) - )] - OperationalTemperatureEfficiency = 150u16, - #[strum( - serialize = "OrbitPeriod", - props( - docs = r#"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 = "Orientation", - props( - docs = r#"The orientation of the entity in degrees in a plane relative towards the north origin"#, - value = "230" - ) - )] - Orientation = 230u16, - #[strum( - serialize = "Output", - props( - docs = r#"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 = "PassedMoles", - props( - docs = r#"The number of moles that passed through this device on the previous simulation tick"#, - value = "234" - ) - )] - PassedMoles = 234u16, - #[strum( - serialize = "Plant", - props( - docs = r#"Performs the planting action for any plant based machinery"#, - value = "68" - ) - )] - Plant = 68u16, - #[strum( - serialize = "PlantEfficiency1", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "52") - )] - PlantEfficiency1 = 52u16, - #[strum( - serialize = "PlantEfficiency2", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "53") - )] - PlantEfficiency2 = 53u16, - #[strum( - serialize = "PlantEfficiency3", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "54") - )] - PlantEfficiency3 = 54u16, - #[strum( - serialize = "PlantEfficiency4", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "55") - )] - PlantEfficiency4 = 55u16, - #[strum( - serialize = "PlantGrowth1", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "48") - )] - PlantGrowth1 = 48u16, - #[strum( - serialize = "PlantGrowth2", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "49") - )] - PlantGrowth2 = 49u16, - #[strum( - serialize = "PlantGrowth3", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "50") - )] - PlantGrowth3 = 50u16, - #[strum( - serialize = "PlantGrowth4", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "51") - )] - PlantGrowth4 = 51u16, - #[strum( - serialize = "PlantHash1", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "56") - )] - PlantHash1 = 56u16, - #[strum( - serialize = "PlantHash2", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "57") - )] - PlantHash2 = 57u16, - #[strum( - serialize = "PlantHash3", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "58") - )] - PlantHash3 = 58u16, - #[strum( - serialize = "PlantHash4", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "59") - )] - PlantHash4 = 59u16, - #[strum( - serialize = "PlantHealth1", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "44") - )] - PlantHealth1 = 44u16, - #[strum( - serialize = "PlantHealth2", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "45") - )] - PlantHealth2 = 45u16, - #[strum( - serialize = "PlantHealth3", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "46") - )] - PlantHealth3 = 46u16, - #[strum( - serialize = "PlantHealth4", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "47") - )] - PlantHealth4 = 47u16, - #[strum( - serialize = "PositionX", - props( - docs = r#"The current position in X dimension in world coordinates"#, - value = "76" - ) - )] - PositionX = 76u16, - #[strum( - serialize = "PositionY", - props( - docs = r#"The current position in Y dimension in world coordinates"#, - value = "77" - ) - )] - PositionY = 77u16, - #[strum( - serialize = "PositionZ", - props( - docs = r#"The current position in Z dimension in world coordinates"#, - value = "78" - ) - )] - PositionZ = 78u16, - #[strum( - serialize = "Power", - props( - docs = r#"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 = "PowerActual", - props( - docs = r#"How much energy the device or network is actually using"#, - value = "26" - ) - )] - PowerActual = 26u16, - #[strum( - serialize = "PowerGeneration", - props(docs = r#"Returns how much power is being generated"#, value = "65") - )] - PowerGeneration = 65u16, - #[strum( - serialize = "PowerPotential", - props( - docs = r#"How much energy the device or network potentially provides"#, - value = "25" - ) - )] - PowerPotential = 25u16, - #[strum( - serialize = "PowerRequired", - props( - docs = r#"Power requested from the device and/or network"#, - value = "36" - ) - )] - PowerRequired = 36u16, - #[strum( - serialize = "PrefabHash", - props(docs = r#"The hash of the structure"#, value = "84") - )] - PrefabHash = 84u16, - #[strum( - serialize = "Pressure", - props(docs = r#"The current pressure reading of the device"#, value = "5") - )] - Pressure = 5u16, - #[strum( - serialize = "PressureEfficiency", - props( - docs = r#"How the pressure of the input pipe and waste pipe effect the machines efficiency"#, - value = "152" - ) - )] - PressureEfficiency = 152u16, - #[strum( - serialize = "PressureExternal", - props(docs = r#"Setting for external pressure safety, in KPa"#, value = "7") - )] - PressureExternal = 7u16, - #[strum( - serialize = "PressureInput", - props( - docs = r#"The current pressure reading of the device's Input Network"#, - value = "106" - ) - )] - PressureInput = 106u16, - #[strum( - serialize = "PressureInput2", - props( - docs = r#"The current pressure reading of the device's Input2 Network"#, - value = "116" - ) - )] - PressureInput2 = 116u16, - #[strum( - serialize = "PressureInternal", - props(docs = r#"Setting for internal pressure safety, in KPa"#, value = "8") - )] - PressureInternal = 8u16, - #[strum( - serialize = "PressureOutput", - props( - docs = r#"The current pressure reading of the device's Output Network"#, - value = "126" - ) - )] - PressureOutput = 126u16, - #[strum( - serialize = "PressureOutput2", - props( - docs = r#"The current pressure reading of the device's Output2 Network"#, - value = "136" - ) - )] - PressureOutput2 = 136u16, - #[strum( - serialize = "PressureSetting", - props( - docs = r#"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"#, - value = "71" - ) - )] - PressureSetting = 71u16, - #[strum( - serialize = "Progress", - props( - docs = r#"Progress of the rocket to the next node on the map expressed as a value between 0-1."#, - value = "214" - ) - )] - Progress = 214u16, - #[strum( - serialize = "Quantity", - props(docs = r#"Total quantity on the device"#, value = "27") - )] - Quantity = 27u16, - #[strum( - serialize = "Ratio", - props( - docs = r#"Context specific value depending on device, 0 to 1 based ratio"#, - value = "24" - ) - )] - Ratio = 24u16, - #[strum( - serialize = "RatioCarbonDioxide", - props( - docs = r#"The ratio of Carbon Dioxide in device atmosphere"#, - value = "15" - ) - )] - RatioCarbonDioxide = 15u16, - #[strum( - serialize = "RatioCarbonDioxideInput", - props( - docs = r#"The ratio of Carbon Dioxide in device's input network"#, - value = "109" - ) - )] - RatioCarbonDioxideInput = 109u16, - #[strum( - serialize = "RatioCarbonDioxideInput2", - props( - docs = r#"The ratio of Carbon Dioxide in device's Input2 network"#, - value = "119" - ) - )] - RatioCarbonDioxideInput2 = 119u16, - #[strum( - serialize = "RatioCarbonDioxideOutput", - props( - docs = r#"The ratio of Carbon Dioxide in device's Output network"#, - value = "129" - ) - )] - RatioCarbonDioxideOutput = 129u16, - #[strum( - serialize = "RatioCarbonDioxideOutput2", - props( - docs = r#"The ratio of Carbon Dioxide in device's Output2 network"#, - value = "139" - ) - )] - RatioCarbonDioxideOutput2 = 139u16, - #[strum( - serialize = "RatioHydrogen", - props( - docs = r#"The ratio of Hydrogen in device's Atmopshere"#, - value = "252" - ) - )] - RatioHydrogen = 252u16, - #[strum( - serialize = "RatioLiquidCarbonDioxide", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's Atmosphere"#, - value = "199" - ) - )] - RatioLiquidCarbonDioxide = 199u16, - #[strum( - serialize = "RatioLiquidCarbonDioxideInput", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"#, - value = "200" - ) - )] - RatioLiquidCarbonDioxideInput = 200u16, - #[strum( - serialize = "RatioLiquidCarbonDioxideInput2", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"#, - value = "201" - ) - )] - RatioLiquidCarbonDioxideInput2 = 201u16, - #[strum( - serialize = "RatioLiquidCarbonDioxideOutput", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"#, - value = "202" - ) - )] - RatioLiquidCarbonDioxideOutput = 202u16, - #[strum( - serialize = "RatioLiquidCarbonDioxideOutput2", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"#, - value = "203" - ) - )] - RatioLiquidCarbonDioxideOutput2 = 203u16, - #[strum( - serialize = "RatioLiquidHydrogen", - props( - docs = r#"The ratio of Liquid Hydrogen in device's Atmopshere"#, - value = "253" - ) - )] - RatioLiquidHydrogen = 253u16, + SolarIrradiance = 176u16, #[strum( serialize = "RatioLiquidNitrogen", props( @@ -1378,45 +1601,13 @@ pub enum LogicType { )] RatioLiquidNitrogenOutput2 = 181u16, #[strum( - serialize = "RatioLiquidNitrousOxide", + serialize = "VolumeOfLiquid", props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's Atmosphere"#, - value = "209" + docs = r#"The total volume of all liquids in Liters in the atmosphere"#, + value = "182" ) )] - RatioLiquidNitrousOxide = 209u16, - #[strum( - serialize = "RatioLiquidNitrousOxideInput", - props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"#, - value = "210" - ) - )] - RatioLiquidNitrousOxideInput = 210u16, - #[strum( - serialize = "RatioLiquidNitrousOxideInput2", - props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"#, - value = "211" - ) - )] - RatioLiquidNitrousOxideInput2 = 211u16, - #[strum( - serialize = "RatioLiquidNitrousOxideOutput", - props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"#, - value = "212" - ) - )] - RatioLiquidNitrousOxideOutput = 212u16, - #[strum( - serialize = "RatioLiquidNitrousOxideOutput2", - props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"#, - value = "213" - ) - )] - RatioLiquidNitrousOxideOutput2 = 213u16, + VolumeOfLiquid = 182u16, #[strum( serialize = "RatioLiquidOxygen", props( @@ -1457,46 +1648,6 @@ pub enum LogicType { ) )] RatioLiquidOxygenOutput2 = 187u16, - #[strum( - serialize = "RatioLiquidPollutant", - props( - docs = r#"The ratio of Liquid Pollutant in device's Atmosphere"#, - value = "204" - ) - )] - RatioLiquidPollutant = 204u16, - #[strum( - serialize = "RatioLiquidPollutantInput", - props( - docs = r#"The ratio of Liquid Pollutant in device's Input Atmosphere"#, - value = "205" - ) - )] - RatioLiquidPollutantInput = 205u16, - #[strum( - serialize = "RatioLiquidPollutantInput2", - props( - docs = r#"The ratio of Liquid Pollutant in device's Input2 Atmosphere"#, - value = "206" - ) - )] - RatioLiquidPollutantInput2 = 206u16, - #[strum( - serialize = "RatioLiquidPollutantOutput", - props( - docs = r#"The ratio of Liquid Pollutant in device's device's Output Atmosphere"#, - value = "207" - ) - )] - RatioLiquidPollutantOutput = 207u16, - #[strum( - serialize = "RatioLiquidPollutantOutput2", - props( - docs = r#"The ratio of Liquid Pollutant in device's Output2 Atmopshere"#, - value = "208" - ) - )] - RatioLiquidPollutantOutput2 = 208u16, #[strum( serialize = "RatioLiquidVolatiles", props( @@ -1537,165 +1688,6 @@ pub enum LogicType { ) )] RatioLiquidVolatilesOutput2 = 192u16, - #[strum( - serialize = "RatioNitrogen", - props(docs = r#"The ratio of nitrogen in device atmosphere"#, value = "16") - )] - RatioNitrogen = 16u16, - #[strum( - serialize = "RatioNitrogenInput", - props( - docs = r#"The ratio of nitrogen in device's input network"#, - value = "110" - ) - )] - RatioNitrogenInput = 110u16, - #[strum( - serialize = "RatioNitrogenInput2", - props( - docs = r#"The ratio of nitrogen in device's Input2 network"#, - value = "120" - ) - )] - RatioNitrogenInput2 = 120u16, - #[strum( - serialize = "RatioNitrogenOutput", - props( - docs = r#"The ratio of nitrogen in device's Output network"#, - value = "130" - ) - )] - RatioNitrogenOutput = 130u16, - #[strum( - serialize = "RatioNitrogenOutput2", - props( - docs = r#"The ratio of nitrogen in device's Output2 network"#, - value = "140" - ) - )] - RatioNitrogenOutput2 = 140u16, - #[strum( - serialize = "RatioNitrousOxide", - props( - docs = r#"The ratio of Nitrous Oxide in device atmosphere"#, - value = "83" - ) - )] - RatioNitrousOxide = 83u16, - #[strum( - serialize = "RatioNitrousOxideInput", - props( - docs = r#"The ratio of Nitrous Oxide in device's input network"#, - value = "114" - ) - )] - RatioNitrousOxideInput = 114u16, - #[strum( - serialize = "RatioNitrousOxideInput2", - props( - docs = r#"The ratio of Nitrous Oxide in device's Input2 network"#, - value = "124" - ) - )] - RatioNitrousOxideInput2 = 124u16, - #[strum( - serialize = "RatioNitrousOxideOutput", - props( - docs = r#"The ratio of Nitrous Oxide in device's Output network"#, - value = "134" - ) - )] - RatioNitrousOxideOutput = 134u16, - #[strum( - serialize = "RatioNitrousOxideOutput2", - props( - docs = r#"The ratio of Nitrous Oxide in device's Output2 network"#, - value = "144" - ) - )] - RatioNitrousOxideOutput2 = 144u16, - #[strum( - serialize = "RatioOxygen", - props(docs = r#"The ratio of oxygen in device atmosphere"#, value = "14") - )] - RatioOxygen = 14u16, - #[strum( - serialize = "RatioOxygenInput", - props( - docs = r#"The ratio of oxygen in device's input network"#, - value = "108" - ) - )] - RatioOxygenInput = 108u16, - #[strum( - serialize = "RatioOxygenInput2", - props( - docs = r#"The ratio of oxygen in device's Input2 network"#, - value = "118" - ) - )] - RatioOxygenInput2 = 118u16, - #[strum( - serialize = "RatioOxygenOutput", - props( - docs = r#"The ratio of oxygen in device's Output network"#, - value = "128" - ) - )] - RatioOxygenOutput = 128u16, - #[strum( - serialize = "RatioOxygenOutput2", - props( - docs = r#"The ratio of oxygen in device's Output2 network"#, - value = "138" - ) - )] - RatioOxygenOutput2 = 138u16, - #[strum( - serialize = "RatioPollutant", - props(docs = r#"The ratio of pollutant in device atmosphere"#, value = "17") - )] - RatioPollutant = 17u16, - #[strum( - serialize = "RatioPollutantInput", - props( - docs = r#"The ratio of pollutant in device's input network"#, - value = "111" - ) - )] - RatioPollutantInput = 111u16, - #[strum( - serialize = "RatioPollutantInput2", - props( - docs = r#"The ratio of pollutant in device's Input2 network"#, - value = "121" - ) - )] - RatioPollutantInput2 = 121u16, - #[strum( - serialize = "RatioPollutantOutput", - props( - docs = r#"The ratio of pollutant in device's Output network"#, - value = "131" - ) - )] - RatioPollutantOutput = 131u16, - #[strum( - serialize = "RatioPollutantOutput2", - props( - docs = r#"The ratio of pollutant in device's Output2 network"#, - value = "141" - ) - )] - RatioPollutantOutput2 = 141u16, - #[strum( - serialize = "RatioPollutedWater", - props( - docs = r#"The ratio of polluted water in device atmosphere"#, - value = "254" - ) - )] - RatioPollutedWater = 254u16, #[strum( serialize = "RatioSteam", props( @@ -1737,362 +1729,183 @@ pub enum LogicType { )] RatioSteamOutput2 = 197u16, #[strum( - serialize = "RatioVolatiles", - props(docs = r#"The ratio of volatiles in device atmosphere"#, value = "18") + serialize = "ContactTypeId", + props(docs = r#"The type id of the contact."#, value = "198") )] - RatioVolatiles = 18u16, + ContactTypeId = 198u16, #[strum( - serialize = "RatioVolatilesInput", + serialize = "RatioLiquidCarbonDioxide", props( - docs = r#"The ratio of volatiles in device's input network"#, - value = "112" + docs = r#"The ratio of Liquid Carbon Dioxide in device's Atmosphere"#, + value = "199" ) )] - RatioVolatilesInput = 112u16, + RatioLiquidCarbonDioxide = 199u16, #[strum( - serialize = "RatioVolatilesInput2", + serialize = "RatioLiquidCarbonDioxideInput", props( - docs = r#"The ratio of volatiles in device's Input2 network"#, - value = "122" + docs = r#"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"#, + value = "200" ) )] - RatioVolatilesInput2 = 122u16, + RatioLiquidCarbonDioxideInput = 200u16, #[strum( - serialize = "RatioVolatilesOutput", + serialize = "RatioLiquidCarbonDioxideInput2", props( - docs = r#"The ratio of volatiles in device's Output network"#, - value = "132" + docs = r#"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"#, + value = "201" ) )] - RatioVolatilesOutput = 132u16, + RatioLiquidCarbonDioxideInput2 = 201u16, #[strum( - serialize = "RatioVolatilesOutput2", + serialize = "RatioLiquidCarbonDioxideOutput", props( - docs = r#"The ratio of volatiles in device's Output2 network"#, - value = "142" + docs = r#"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"#, + value = "202" ) )] - RatioVolatilesOutput2 = 142u16, + RatioLiquidCarbonDioxideOutput = 202u16, #[strum( - serialize = "RatioWater", - props(docs = r#"The ratio of water in device atmosphere"#, value = "19") - )] - RatioWater = 19u16, - #[strum( - serialize = "RatioWaterInput", + serialize = "RatioLiquidCarbonDioxideOutput2", props( - docs = r#"The ratio of water in device's input network"#, - value = "113" + docs = r#"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"#, + value = "203" ) )] - RatioWaterInput = 113u16, + RatioLiquidCarbonDioxideOutput2 = 203u16, #[strum( - serialize = "RatioWaterInput2", + serialize = "RatioLiquidPollutant", props( - docs = r#"The ratio of water in device's Input2 network"#, - value = "123" + docs = r#"The ratio of Liquid Pollutant in device's Atmosphere"#, + value = "204" ) )] - RatioWaterInput2 = 123u16, + RatioLiquidPollutant = 204u16, #[strum( - serialize = "RatioWaterOutput", + serialize = "RatioLiquidPollutantInput", props( - docs = r#"The ratio of water in device's Output network"#, - value = "133" + docs = r#"The ratio of Liquid Pollutant in device's Input Atmosphere"#, + value = "205" ) )] - RatioWaterOutput = 133u16, + RatioLiquidPollutantInput = 205u16, #[strum( - serialize = "RatioWaterOutput2", + serialize = "RatioLiquidPollutantInput2", props( - docs = r#"The ratio of water in device's Output2 network"#, - value = "143" + docs = r#"The ratio of Liquid Pollutant in device's Input2 Atmosphere"#, + value = "206" ) )] - RatioWaterOutput2 = 143u16, + RatioLiquidPollutantInput2 = 206u16, #[strum( - serialize = "ReEntryAltitude", + serialize = "RatioLiquidPollutantOutput", props( - docs = r#"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"#, - value = "237" + docs = r#"The ratio of Liquid Pollutant in device's device's Output Atmosphere"#, + value = "207" ) )] - ReEntryAltitude = 237u16, + RatioLiquidPollutantOutput = 207u16, #[strum( - serialize = "Reagents", + serialize = "RatioLiquidPollutantOutput2", props( - docs = r#"Total number of reagents recorded by the device"#, - value = "13" + docs = r#"The ratio of Liquid Pollutant in device's Output2 Atmopshere"#, + value = "208" ) )] - Reagents = 13u16, + RatioLiquidPollutantOutput2 = 208u16, #[strum( - serialize = "RecipeHash", + serialize = "RatioLiquidNitrousOxide", props( - docs = r#"Current hash of the recipe the device is set to produce"#, - value = "41" + docs = r#"The ratio of Liquid Nitrous Oxide in device's Atmosphere"#, + value = "209" ) )] - RecipeHash = 41u16, + RatioLiquidNitrousOxide = 209u16, + #[strum( + serialize = "RatioLiquidNitrousOxideInput", + props( + docs = r#"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"#, + value = "210" + ) + )] + RatioLiquidNitrousOxideInput = 210u16, + #[strum( + serialize = "RatioLiquidNitrousOxideInput2", + props( + docs = r#"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"#, + value = "211" + ) + )] + RatioLiquidNitrousOxideInput2 = 211u16, + #[strum( + serialize = "RatioLiquidNitrousOxideOutput", + props( + docs = r#"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"#, + value = "212" + ) + )] + RatioLiquidNitrousOxideOutput = 212u16, + #[strum( + serialize = "RatioLiquidNitrousOxideOutput2", + props( + docs = r#"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"#, + value = "213" + ) + )] + RatioLiquidNitrousOxideOutput2 = 213u16, + #[strum( + serialize = "Progress", + props( + docs = r#"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", + props( + docs = r#"The Space Map Address of the rockets target Space Map Location"#, + value = "215" + ) + )] + DestinationCode = 215u16, + #[strum( + serialize = "Acceleration", + props( + docs = r#"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."#, + value = "216" + ) + )] + Acceleration = 216u16, #[strum( serialize = "ReferenceId", props(docs = r#"Unique Reference Identifier for this object"#, value = "217") )] ReferenceId = 217u16, #[strum( - serialize = "RequestHash", + serialize = "AutoShutOff", props( - docs = r#"When set to the unique identifier, requests an item of the provided type from the device"#, - value = "60" + docs = r#"Turns off all devices in the rocket upon reaching destination"#, + value = "218" ) )] - RequestHash = 60u16, + AutoShutOff = 218u16, #[strum( - serialize = "RequiredPower", + serialize = "Mass", props( - docs = r#"Idle operating power quantity, does not necessarily include extra demand power"#, - value = "33" + docs = r#"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" ) )] - RequiredPower = 33u16, + Mass = 219u16, #[strum( - serialize = "ReturnFuelCost", + serialize = "DryMass", props( - docs = r#"Gets the fuel remaining in your rocket's fuel tank."#, - value = "100" + docs = r#"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" ) )] - ReturnFuelCost = 100u16, - #[strum( - serialize = "Richness", - props( - docs = r#"The richness of the rocket's target site's mine-able deposit."#, - value = "263" - ) - )] - Richness = 263u16, - #[strum( - serialize = "Rpm", - props( - docs = r#"The number of revolutions per minute that the device's spinning mechanism is doing"#, - value = "155" - ) - )] - Rpm = 155u16, - #[strum( - serialize = "SemiMajorAxis", - props( - docs = r#"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 = "Setting", - props( - docs = r#"A variable setting that can be read or written, depending on the device"#, - value = "12" - ) - )] - Setting = 12u16, - #[strum( - serialize = "SettingInput", - props(docs = r#""#, value = "91") - )] - SettingInput = 91u16, - #[strum( - serialize = "SettingOutput", - props(docs = r#""#, value = "92") - )] - SettingOutput = 92u16, - #[strum( - serialize = "SignalID", - props( - docs = r#"Returns the contact ID of the strongest signal from this Satellite"#, - value = "87" - ) - )] - SignalId = 87u16, - #[strum( - serialize = "SignalStrength", - props( - docs = r#"Returns the degree offset of the strongest contact"#, - value = "86" - ) - )] - SignalStrength = 86u16, - #[strum( - serialize = "Sites", - props( - docs = r#"The number of Sites that have been discovered at the rockets target Space Map location."#, - value = "260" - ) - )] - Sites = 260u16, - #[strum( - serialize = "Size", - props( - docs = r#"The size of the rocket's target site's mine-able deposit."#, - value = "264" - ) - )] - Size = 264u16, - #[strum( - serialize = "SizeX", - props( - docs = r#"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"#, - value = "160" - ) - )] - SizeX = 160u16, - #[strum( - serialize = "SizeY", - props( - docs = r#"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"#, - value = "161" - ) - )] - SizeY = 161u16, - #[strum( - serialize = "SizeZ", - props( - docs = r#"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"#, - value = "162" - ) - )] - SizeZ = 162u16, - #[strum( - serialize = "SolarAngle", - props(docs = r#"Solar angle of the device"#, value = "22") - )] - SolarAngle = 22u16, - #[strum( - serialize = "SolarIrradiance", - props(docs = r#""#, value = "176") - )] - SolarIrradiance = 176u16, - #[strum( - serialize = "SoundAlert", - props(docs = r#"Plays a sound alert on the devices speaker"#, value = "175") - )] - SoundAlert = 175u16, - #[strum( - serialize = "Stress", - props( - docs = r#"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"#, - value = "156" - ) - )] - Stress = 156u16, - #[strum( - serialize = "Survey", - props( - docs = r#"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 = "TargetPadIndex", - props( - docs = r#"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 = "TargetX", - props( - docs = r#"The target position in X dimension in world coordinates"#, - value = "88" - ) - )] - TargetX = 88u16, - #[strum( - serialize = "TargetY", - props( - docs = r#"The target position in Y dimension in world coordinates"#, - value = "89" - ) - )] - TargetY = 89u16, - #[strum( - serialize = "TargetZ", - props( - docs = r#"The target position in Z dimension in world coordinates"#, - value = "90" - ) - )] - TargetZ = 90u16, - #[strum( - serialize = "Temperature", - props(docs = r#"The current temperature reading of the device"#, value = "6") - )] - Temperature = 6u16, - #[strum( - serialize = "TemperatureDifferentialEfficiency", - props( - docs = r#"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"#, - value = "151" - ) - )] - TemperatureDifferentialEfficiency = 151u16, - #[strum( - serialize = "TemperatureExternal", - props( - docs = r#"The temperature of the outside of the device, usually the world atmosphere surrounding it"#, - value = "73" - ) - )] - TemperatureExternal = 73u16, - #[strum( - serialize = "TemperatureInput", - props( - docs = r#"The current temperature reading of the device's Input Network"#, - value = "107" - ) - )] - TemperatureInput = 107u16, - #[strum( - serialize = "TemperatureInput2", - props( - docs = r#"The current temperature reading of the device's Input2 Network"#, - value = "117" - ) - )] - TemperatureInput2 = 117u16, - #[strum( - serialize = "TemperatureOutput", - props( - docs = r#"The current temperature reading of the device's Output Network"#, - value = "127" - ) - )] - TemperatureOutput = 127u16, - #[strum( - serialize = "TemperatureOutput2", - props( - docs = r#"The current temperature reading of the device's Output2 Network"#, - value = "137" - ) - )] - TemperatureOutput2 = 137u16, - #[strum( - serialize = "TemperatureSetting", - props( - docs = r#"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"#, - value = "72" - ) - )] - TemperatureSetting = 72u16, - #[strum( - serialize = "Throttle", - props( - docs = r#"Increases the rate at which the machine works (range: 0-100)"#, - value = "154" - ) - )] - Throttle = 154u16, + DryMass = 220u16, #[strum( serialize = "Thrust", props( @@ -2101,6 +1914,14 @@ pub enum LogicType { ) )] Thrust = 221u16, + #[strum( + serialize = "Weight", + props( + docs = r#"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."#, + value = "222" + ) + )] + Weight = 222u16, #[strum( serialize = "ThrustToWeight", props( @@ -2109,8 +1930,6 @@ pub enum LogicType { ) )] ThrustToWeight = 223u16, - #[strum(serialize = "Time", props(docs = r#"Time"#, value = "102"))] - Time = 102u16, #[strum( serialize = "TimeToDestination", props( @@ -2120,87 +1939,53 @@ pub enum LogicType { )] TimeToDestination = 224u16, #[strum( - serialize = "TotalMoles", - props(docs = r#"Returns the total moles of the device"#, value = "66") - )] - TotalMoles = 66u16, - #[strum( - serialize = "TotalMolesInput", + serialize = "BurnTimeRemaining", props( - docs = r#"Returns the total moles of the device's Input Network"#, - value = "115" + docs = r#"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."#, + value = "225" ) )] - TotalMolesInput = 115u16, + BurnTimeRemaining = 225u16, #[strum( - serialize = "TotalMolesInput2", + serialize = "AutoLand", props( - docs = r#"Returns the total moles of the device's Input2 Network"#, - value = "125" + docs = r#"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."#, + value = "226" ) )] - TotalMolesInput2 = 125u16, + AutoLand = 226u16, #[strum( - serialize = "TotalMolesOutput", + serialize = "ForwardX", props( - docs = r#"Returns the total moles of the device's Output Network"#, - value = "135" + docs = r#"The direction the entity is facing expressed as a normalized vector"#, + value = "227" ) )] - TotalMolesOutput = 135u16, + ForwardX = 227u16, #[strum( - serialize = "TotalMolesOutput2", + serialize = "ForwardY", props( - docs = r#"Returns the total moles of the device's Output2 Network"#, - value = "145" + docs = r#"The direction the entity is facing expressed as a normalized vector"#, + value = "228" ) )] - TotalMolesOutput2 = 145u16, + ForwardY = 228u16, #[strum( - serialize = "TotalQuantity", + serialize = "ForwardZ", props( - docs = r#"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."#, - value = "265" + docs = r#"The direction the entity is facing expressed as a normalized vector"#, + value = "229" ) )] - TotalQuantity = 265u16, + ForwardZ = 229u16, #[strum( - serialize = "TrueAnomaly", + serialize = "Orientation", props( - docs = r#"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" + docs = r#"The orientation of the entity in degrees in a plane relative towards the north origin"#, + value = "230" ) )] - TrueAnomaly = 251u16, - #[strum( - serialize = "VelocityMagnitude", - props(docs = r#"The current magnitude of the velocity vector"#, value = "79") - )] - VelocityMagnitude = 79u16, - #[strum( - serialize = "VelocityRelativeX", - props( - docs = r#"The current velocity X relative to the forward vector of this"#, - value = "80" - ) - )] - VelocityRelativeX = 80u16, - #[strum( - serialize = "VelocityRelativeY", - props( - docs = r#"The current velocity Y relative to the forward vector of this"#, - value = "81" - ) - )] - VelocityRelativeY = 81u16, - #[strum( - serialize = "VelocityRelativeZ", - props( - docs = r#"The current velocity Z relative to the forward vector of this"#, - value = "82" - ) - )] - VelocityRelativeZ = 82u16, + Orientation = 230u16, #[strum( serialize = "VelocityX", props( @@ -2226,50 +2011,269 @@ pub enum LogicType { )] VelocityZ = 233u16, #[strum( - serialize = "Vertical", - props(docs = r#"Vertical setting of the device"#, value = "21") - )] - Vertical = 21u16, - #[strum( - serialize = "VerticalRatio", - props(docs = r#"Radio of vertical setting for device"#, value = "35") - )] - VerticalRatio = 35u16, - #[strum( - serialize = "Volume", - props(docs = r#"Returns the device atmosphere volume"#, value = "67") - )] - Volume = 67u16, - #[strum( - serialize = "VolumeOfLiquid", + serialize = "PassedMoles", props( - docs = r#"The total volume of all liquids in Liters in the atmosphere"#, - value = "182" + docs = r#"The number of moles that passed through this device on the previous simulation tick"#, + value = "234" ) )] - VolumeOfLiquid = 182u16, + PassedMoles = 234u16, #[strum( - serialize = "WattsReachingContact", + serialize = "ExhaustVelocity", + props(docs = r#"The velocity of the exhaust gas in m/s"#, value = "235") + )] + ExhaustVelocity = 235u16, + #[strum( + serialize = "FlightControlRule", props( - docs = r#"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" + docs = r#"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" ) )] - WattsReachingContact = 164u16, + FlightControlRule = 236u16, #[strum( - serialize = "Weight", + serialize = "ReEntryAltitude", props( - docs = r#"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."#, - value = "222" + docs = r#"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"#, + value = "237" ) )] - Weight = 222u16, + ReEntryAltitude = 237u16, #[strum( - serialize = "WorkingGasEfficiency", + serialize = "Apex", props( - docs = r#"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"#, - value = "105" + docs = r#"The lowest altitude that the rocket will reach before it starts travelling upwards again."#, + value = "238" ) )] - WorkingGasEfficiency = 105u16, + Apex = 238u16, + #[strum( + serialize = "EntityState", + props( + docs = r#"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", + props( + docs = r#"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", + props(docs = r#"The current index for the device."#, value = "241") + )] + Index = 241u16, + #[strum( + serialize = "CelestialHash", + props( + docs = r#"The current hash of the targeted celestial object."#, + value = "242" + ) + )] + CelestialHash = 242u16, + #[strum( + serialize = "AlignmentError", + props( + docs = r#"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", + props( + docs = r#"The current distance to the celestial object, measured in astronomical units."#, + value = "244" + ) + )] + DistanceAu = 244u16, + #[strum( + serialize = "OrbitPeriod", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"The current distance to the celestial object, measured in kilometers."#, + value = "249" + ) + )] + DistanceKm = 249u16, + #[strum( + serialize = "CelestialParentHash", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"The ratio of Hydrogen in device's Atmopshere"#, + value = "252" + ) + )] + RatioHydrogen = 252u16, + #[strum( + serialize = "RatioLiquidHydrogen", + props( + docs = r#"The ratio of Liquid Hydrogen in device's Atmopshere"#, + value = "253" + ) + )] + RatioLiquidHydrogen = 253u16, + #[strum( + serialize = "RatioPollutedWater", + props( + docs = r#"The ratio of polluted water in device atmosphere"#, + value = "254" + ) + )] + RatioPollutedWater = 254u16, + #[strum( + serialize = "Discover", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"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", + props( + docs = r#"The number of NavPoints at the rocket's target Space Map Location."#, + value = "258" + ) + )] + NavPoints = 258u16, + #[strum( + serialize = "ChartedNavPoints", + props( + docs = r#"The number of charted NavPoints at the rocket's target Space Map Location."#, + value = "259" + ) + )] + ChartedNavPoints = 259u16, + #[strum( + serialize = "Sites", + props( + docs = r#"The number of Sites that have been discovered at the rockets target Space Map location."#, + value = "260" + ) + )] + Sites = 260u16, + #[strum( + serialize = "CurrentCode", + props( + docs = r#"The Space Map Address of the rockets current Space Map Location"#, + value = "261" + ) + )] + CurrentCode = 261u16, + #[strum( + serialize = "Density", + props( + docs = r#"The density of the rocket's target site's mine-able deposit."#, + value = "262" + ) + )] + Density = 262u16, + #[strum( + serialize = "Richness", + props( + docs = r#"The richness of the rocket's target site's mine-able deposit."#, + value = "263" + ) + )] + Richness = 263u16, + #[strum( + serialize = "Size", + props( + docs = r#"The size of the rocket's target site's mine-able deposit."#, + value = "264" + ) + )] + Size = 264u16, + #[strum( + serialize = "TotalQuantity", + props( + docs = r#"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."#, + value = "265" + ) + )] + TotalQuantity = 265u16, + #[strum( + serialize = "MinedQuantity", + props( + docs = r#"The total number of resources that have been mined at the rocket's target Space Map Site."#, + value = "266" + ) + )] + MinedQuantity = 266u16, + #[strum( + serialize = "BestContactFilter", + props( + docs = r#"Filters the satellite's auto selection of targets to a single reference ID."#, + value = "267" + ) + )] + BestContactFilter = 267u16, } diff --git a/ic10emu/src/vm/instructions/operands.rs b/ic10emu/src/vm/instructions/operands.rs index 9e4a0b9..4f10033 100644 --- a/ic10emu/src/vm/instructions/operands.rs +++ b/ic10emu/src/vm/instructions/operands.rs @@ -1,8 +1,7 @@ use crate::errors::ICError; use crate::interpreter; use crate::vm::enums::script_enums::{ - LogicBatchMethod as BatchMode, LogicReagentMode as ReagentMode, LogicSlotType as SlotLogicType, - LogicType, + LogicBatchMethod as BatchMode, LogicReagentMode as ReagentMode, LogicSlotType, LogicType, }; use crate::vm::instructions::enums::InstructionOp; use serde_derive::{Deserialize, Serialize}; @@ -49,7 +48,7 @@ pub enum Operand { Number(Number), Type { logic_type: Option, - slot_logic_type: Option, + slot_logic_type: Option, batch_mode: Option, reagent_mode: Option, identifier: Identifier, @@ -243,13 +242,13 @@ impl Operand { ic: &interpreter::IC, inst: InstructionOp, index: u32, - ) -> Result { + ) -> Result { match &self { Operand::Type { slot_logic_type: Some(slt), .. } => Ok(*slt), - _ => SlotLogicType::try_from(self.as_value(ic, inst, index)?), + _ => LogicSlotType::try_from(self.as_value(ic, inst, index)?), } } diff --git a/ic10emu/src/vm/object.rs b/ic10emu/src/vm/object.rs index 5b78928..94c2e2d 100644 --- a/ic10emu/src/vm/object.rs +++ b/ic10emu/src/vm/object.rs @@ -1,17 +1,41 @@ +use std::{cell::RefCell, ops::Deref, rc::Rc}; + use macro_rules_attribute::derive; use serde_derive::{Deserialize, Serialize}; pub mod errors; +pub mod generic; pub mod macros; pub mod stationpedia; +pub mod templates; pub mod traits; use traits::*; -use crate::{device::SlotType, vm::enums::script_enums::LogicSlotType as SlotLogicType}; +use crate::vm::enums::{basic_enums::Class as SlotClass, script_enums::LogicSlotType}; pub type ObjectID = u32; -pub type BoxedObject = Box>; +pub type BoxedObject = Rc>>; + +pub struct VMObject(BoxedObject); + +impl Deref for VMObject { + type Target = BoxedObject; + + #[inline(always)] + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl VMObject { + pub fn new(val: T) -> Self + where + T: Object + 'static, + { + VMObject(Rc::new(RefCell::new(val))) + } +} #[derive(Debug, Default, Clone, Serialize, Deserialize)] pub struct Name { @@ -33,8 +57,8 @@ impl Name { } } -#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] -pub enum FieldType { +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] +pub enum MemoryAccess { Read, Write, ReadWrite, @@ -42,13 +66,13 @@ pub enum FieldType { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct LogicField { - pub field_type: FieldType, + pub field_type: MemoryAccess, pub value: f64, } #[derive(Debug, Default, Clone, Serialize, Deserialize)] pub struct Slot { - pub typ: SlotType, - pub enabled_logic: Vec, + pub typ: SlotClass, + pub enabled_logic: Vec, pub occupant: Option, } diff --git a/ic10emu/src/vm/object/errors.rs b/ic10emu/src/vm/object/errors.rs index 06966cb..777764f 100644 --- a/ic10emu/src/vm/object/errors.rs +++ b/ic10emu/src/vm/object/errors.rs @@ -1,18 +1,18 @@ use serde_derive::{Deserialize, Serialize}; use thiserror::Error; -use crate::vm::enums::script_enums::{LogicSlotType as SlotLogicType, LogicType}; +use crate::vm::enums::script_enums::{LogicSlotType, LogicType}; #[derive(Error, Debug, Serialize, Deserialize)] pub enum LogicError { #[error("can't read LogicType {0}")] CantRead(LogicType), - #[error("can't read slot {1} SlotLogicType {0}")] - CantSlotRead(SlotLogicType, usize), + #[error("can't read slot {1} LogicSlotType {0}")] + CantSlotRead(LogicSlotType, usize), #[error("can't write LogicType {0}")] CantWrite(LogicType), - #[error("can't write slot {1} SlotLogicType {0}")] - CantSlotWrite(SlotLogicType, usize), + #[error("can't write slot {1} LogicSlotType {0}")] + CantSlotWrite(LogicSlotType, usize), #[error("slot id {0} is out of range 0..{1}")] SlotIndexOutOfRange(usize, usize), } 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..57d5e10 --- /dev/null +++ b/ic10emu/src/vm/object/generic/macros.rs @@ -0,0 +1,75 @@ +macro_rules! GWLogicable { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWLogicable for $struct { + fn name(&self) -> &Option { + &self.name + } + fn fields(&self) -> &BTreeMap { + &self.fields + } + fn fields_mut(&mut self) -> &mut BTreeMap { + &mut self.fields + } + fn slots(&self) -> &Vec { + &self.slots + } + fn slots_mut(&mut self) -> &mut Vec { + &mut self.slots + } + } + }; +} +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 {} + }; +} +pub(crate) use GWDevice; diff --git a/ic10emu/src/vm/object/generic/structs.rs b/ic10emu/src/vm/object/generic/structs.rs new file mode 100644 index 0000000..e894731 --- /dev/null +++ b/ic10emu/src/vm/object/generic/structs.rs @@ -0,0 +1,93 @@ +use super::{macros::*, traits::*}; + +use crate::vm::{ + enums::script_enums::LogicType, + object::{macros::ObjectInterface, traits::*, LogicField, Name, ObjectID, Slot}, +}; +use macro_rules_attribute::derive; +use std::{collections::BTreeMap, usize}; + +#[derive(ObjectInterface!)] +#[custom(implements(Object { }))] +pub struct Generic { + #[custom(object_id)] + id: ObjectID, + #[custom(object_prefab)] + prefab: Name, +} + +#[derive(ObjectInterface!, GWLogicable!)] +#[custom(implements(Object { Logicable }))] +pub struct GenericLogicable { + #[custom(object_id)] + id: ObjectID, + #[custom(object_prefab)] + prefab: Name, + name: Option, + fields: BTreeMap, + slots: Vec, +} + +#[derive(ObjectInterface!, GWLogicable!, GWDevice!)] +#[custom(implements(Object { Logicable, Device }))] +pub struct GenericLogicableDevice { + #[custom(object_id)] + id: ObjectID, + #[custom(object_prefab)] + prefab: Name, + name: Option, + fields: BTreeMap, + slots: Vec, +} + +#[derive(ObjectInterface!, GWLogicable!, GWMemoryReadable!)] +#[custom(implements(Object { Logicable, MemoryReadable }))] +pub struct GenericLogicableMemoryReadable { + #[custom(object_id)] + id: ObjectID, + #[custom(object_prefab)] + prefab: Name, + name: Option, + fields: BTreeMap, + slots: Vec, + memory: Vec, +} + +#[derive(ObjectInterface!, GWLogicable!, GWMemoryReadable!, GWMemoryWritable!)] +#[custom(implements(Object { Logicable, MemoryReadable, MemoryWritable }))] +pub struct GenericLogicableMemoryReadWritable { + #[custom(object_id)] + id: ObjectID, + #[custom(object_prefab)] + prefab: Name, + name: Option, + fields: BTreeMap, + slots: Vec, + memory: Vec, +} + +#[derive(ObjectInterface!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] +#[custom(implements(Object { Logicable, Device, MemoryReadable }))] +pub struct GenericLogicableDeviceMemoryReadable { + #[custom(object_id)] + id: ObjectID, + #[custom(object_prefab)] + prefab: Name, + name: Option, + fields: BTreeMap, + slots: Vec, + memory: Vec, +} + +#[derive(ObjectInterface!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] +#[custom(implements(Object { Logicable, Device, MemoryReadable, MemoryWritable }))] +pub struct GenericLogicableDeviceMemoryReadWriteablable { + #[custom(object_id)] + id: ObjectID, + #[custom(object_prefab)] + prefab: Name, + name: Option, + fields: BTreeMap, + slots: Vec, + memory: Vec, +} diff --git a/ic10emu/src/vm/object/generic/traits.rs b/ic10emu/src/vm/object/generic/traits.rs new file mode 100644 index 0000000..87e8353 --- /dev/null +++ b/ic10emu/src/vm/object/generic/traits.rs @@ -0,0 +1,162 @@ +use crate::vm::{ + enums::script_enums::{LogicSlotType, LogicType}, + object::{ + errors::{LogicError, MemoryError}, + traits::*, + LogicField, MemoryAccess, Name, Slot, + }, + VM, +}; +use std::{collections::BTreeMap, usize}; +use strum::IntoEnumIterator; + +pub trait GWLogicable { + fn name(&self) -> &Option; + fn fields(&self) -> &BTreeMap; + fn fields_mut(&mut self) -> &mut BTreeMap; + fn slots(&self) -> &Vec; + fn slots_mut(&mut self) -> &mut Vec; +} + +pub trait GWMemoryReadable { + fn memory_size(&self) -> usize; + fn memory(&self) -> &Vec; +} +pub trait GWMemoryWritable: GWMemoryReadable { + fn memory_mut(&mut self) -> &mut Vec; +} + +pub trait GWDevice: GWLogicable {} + +pub trait GWCircuitHolder: GWLogicable {} + +impl Logicable for T { + fn prefab_hash(&self) -> i32 { + self.prefab().hash + } + fn name_hash(&self) -> i32 { + self.name().as_ref().map(|name| name.hash).unwrap_or(0) + } + fn is_logic_readable(&self) -> bool { + LogicType::iter().any(|lt| self.can_logic_read(lt)) + } + fn is_logic_writeable(&self) -> bool { + LogicType::iter().any(|lt| self.can_logic_write(lt)) + } + 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_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 slots_count(&self) -> usize { + self.slots().len() + } + fn get_slot(&self, index: usize) -> Option<&Slot> { + self.slots().get(index) + } + fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot> { + self.slots_mut().get_mut(index) + } + fn can_slot_logic_read(&self, slt: LogicSlotType, index: usize) -> bool { + self.get_slot(index) + .map(|slot| slot.enabled_logic.contains(&slt)) + .unwrap_or(false) + } + fn get_slot_logic( + &self, + slt: LogicSlotType, + index: usize, + _vm: &VM, + ) -> Result { + self.get_slot(index) + .ok_or_else(|| LogicError::SlotIndexOutOfRange(index, self.slots().len())) + .and_then(|slot| { + if slot.enabled_logic.contains(&slt) { + match slot.occupant { + Some(_id) => { + // FIXME: impliment by accessing VM to get occupant + Ok(0.0) + } + None => Ok(0.0), + } + } else { + Err(LogicError::CantSlotRead(slt, index)) + } + }) + } +} + +impl MemoryReadable for T { + 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]) + } + } +} +impl MemoryWritable for T { + 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_mut()[index as usize] = val; + Ok(()) + } + } + fn clear_memory(&mut self) -> Result<(), MemoryError> { + self.memory_mut().fill(0.0); + Ok(()) + } +} + +impl Device for T {} diff --git a/ic10emu/src/vm/object/stationpedia.rs b/ic10emu/src/vm/object/stationpedia.rs index d47c765..98c4dfe 100644 --- a/ic10emu/src/vm/object/stationpedia.rs +++ b/ic10emu/src/vm/object/stationpedia.rs @@ -1,7 +1,7 @@ use std::str::FromStr; use crate::vm::enums::prefabs::StationpediaPrefab; -use crate::vm::object::BoxedObject; +use crate::vm::object::VMObject; #[allow(unused)] pub enum PrefabTemplate { @@ -10,7 +10,7 @@ pub enum PrefabTemplate { } #[allow(unused)] -pub fn object_from_prefab_template(template: &PrefabTemplate) -> Option { +pub fn object_from_prefab_template(template: &PrefabTemplate) -> Option { let prefab = match template { PrefabTemplate::Hash(hash) => StationpediaPrefab::from_repr(*hash), PrefabTemplate::Name(name) => StationpediaPrefab::from_str(name).ok(), @@ -22,5 +22,3 @@ pub fn object_from_prefab_template(template: &PrefabTemplate) -> Option None, } } - -pub mod generic; diff --git a/ic10emu/src/vm/object/stationpedia/generic.rs b/ic10emu/src/vm/object/stationpedia/generic.rs deleted file mode 100644 index bd90fa7..0000000 --- a/ic10emu/src/vm/object/stationpedia/generic.rs +++ /dev/null @@ -1,306 +0,0 @@ -use crate::vm::{ - enums::script_enums::{LogicSlotType as SlotLogicType, LogicType}, - object::{ - errors::{LogicError, MemoryError}, - macros::ObjectInterface, - traits::*, - FieldType, LogicField, Name, ObjectID, Slot, - }, - VM, -}; -use macro_rules_attribute::derive; -use std::{collections::BTreeMap, usize}; -use strum::IntoEnumIterator; - -pub trait GWLogicable { - fn name(&self) -> &Option; - fn fields(&self) -> &BTreeMap; - fn fields_mut(&mut self) -> &mut BTreeMap; - fn slots(&self) -> &Vec; - fn slots_mut(&mut self) -> &mut Vec; -} -macro_rules! GWLogicable { - ( - $( #[$attr:meta] )* - $viz:vis struct $struct:ident { - $($body:tt)* - } - ) => { - impl GWLogicable for $struct { - fn name(&self) -> &Option { - &self.name - } - fn fields(&self) -> &BTreeMap { - &self.fields - } - fn fields_mut(&mut self) -> &mut BTreeMap { - &mut self.fields - } - fn slots(&self) -> &Vec { - &self.slots - } - fn slots_mut(&mut self) -> &mut Vec { - &mut self.slots - } - } - }; -} - -pub trait GWMemoryReadable { - fn memory_size(&self) -> usize; - fn memory(&self) -> &Vec; -} -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 trait GWMemoryWritable: GWMemoryReadable { - fn memory_mut(&mut self) -> &mut Vec; -} -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 trait GWDevice: GWLogicable {} -macro_rules! GWDevice { - ( - $( #[$attr:meta] )* - $viz:vis struct $struct:ident { - $($body:tt)* - } - ) => { - impl GWDevice for $struct {} - }; -} - -pub trait GWCircuitHolder: GWLogicable {} - -impl Logicable for T { - fn prefab_hash(&self) -> i32 { - self.prefab().hash - } - fn name_hash(&self) -> i32 { - self.name().as_ref().map(|name| name.hash).unwrap_or(0) - } - fn is_logic_readable(&self) -> bool { - LogicType::iter().any(|lt| self.can_logic_read(lt)) - } - fn is_logic_writeable(&self) -> bool { - LogicType::iter().any(|lt| self.can_logic_write(lt)) - } - fn can_logic_read(&self, lt: LogicType) -> bool { - self.fields() - .get(<) - .map(|field| matches!(field.field_type, FieldType::Read | FieldType::ReadWrite)) - .unwrap_or(false) - } - fn can_logic_write(&self, lt: LogicType) -> bool { - self.fields() - .get(<) - .map(|field| matches!(field.field_type, FieldType::Write | FieldType::ReadWrite)) - .unwrap_or(false) - } - fn get_logic(&self, lt: LogicType) -> Result { - self.fields() - .get(<) - .and_then(|field| match field.field_type { - FieldType::Read | FieldType::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_mut() - .get_mut(<) - .ok_or(LogicError::CantWrite(lt)) - .and_then(|field| match field.field_type { - FieldType::Write | FieldType::ReadWrite => { - field.value = value; - Ok(()) - } - _ if force => { - field.value = value; - Ok(()) - } - _ => Err(LogicError::CantWrite(lt)), - }) - } - fn slots_count(&self) -> usize { - self.slots().len() - } - fn get_slot(&self, index: usize) -> Option<&Slot> { - self.slots().get(index) - } - fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot> { - self.slots_mut().get_mut(index) - } - fn can_slot_logic_read(&self, slt: SlotLogicType, index: usize) -> bool { - self.get_slot(index) - .map(|slot| slot.enabled_logic.contains(&slt)) - .unwrap_or(false) - } - fn get_slot_logic( - &self, - slt: SlotLogicType, - index: usize, - _vm: &VM, - ) -> Result { - self.get_slot(index) - .ok_or_else(|| LogicError::SlotIndexOutOfRange(index, self.slots().len())) - .and_then(|slot| { - if slot.enabled_logic.contains(&slt) { - match slot.occupant { - Some(_id) => { - // FIXME: impliment by accessing VM to get occupant - Ok(0.0) - } - None => Ok(0.0), - } - } else { - Err(LogicError::CantSlotRead(slt, index)) - } - }) - } -} - -impl MemoryReadable for T { - 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]) - } - } -} -impl MemoryWritable for T { - 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_mut()[index as usize] = val; - Ok(()) - } - } - fn clear_memory(&mut self) -> Result<(), MemoryError> { - self.memory_mut().fill(0.0); - Ok(()) - } -} - -impl Device for T {} - -#[derive(ObjectInterface!)] -#[custom(implements(Object { }))] -pub struct Generic { - #[custom(object_id)] - id: ObjectID, - #[custom(object_prefab)] - prefab: Name, -} - -#[derive(ObjectInterface!, GWLogicable!)] -#[custom(implements(Object { Logicable }))] -pub struct GenericLogicable { - #[custom(object_id)] - id: ObjectID, - #[custom(object_prefab)] - prefab: Name, - name: Option, - fields: BTreeMap, - slots: Vec, -} - -#[derive(ObjectInterface!, GWLogicable!, GWDevice!)] -#[custom(implements(Object { Logicable, Device }))] -pub struct GenericLogicableDevice { - #[custom(object_id)] - id: ObjectID, - #[custom(object_prefab)] - prefab: Name, - name: Option, - fields: BTreeMap, - slots: Vec, -} - -#[derive(ObjectInterface!, GWLogicable!, GWMemoryReadable!)] -#[custom(implements(Object { Logicable, MemoryReadable }))] -pub struct GenericLogicableMemoryReadable { - #[custom(object_id)] - id: ObjectID, - #[custom(object_prefab)] - prefab: Name, - name: Option, - fields: BTreeMap, - slots: Vec, - memory: Vec, -} - -#[derive(ObjectInterface!, GWLogicable!, GWMemoryReadable!, GWMemoryWritable!)] -#[custom(implements(Object { Logicable, MemoryReadable, MemoryWritable }))] -pub struct GenericLogicableMemoryReadWritable { - #[custom(object_id)] - id: ObjectID, - #[custom(object_prefab)] - prefab: Name, - name: Option, - fields: BTreeMap, - slots: Vec, - memory: Vec, -} - -#[derive(ObjectInterface!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] -#[custom(implements(Object { Logicable, Device, MemoryReadable }))] -pub struct GenericLogicableDeviceMemoryReadable { - #[custom(object_id)] - id: ObjectID, - #[custom(object_prefab)] - prefab: Name, - name: Option, - fields: BTreeMap, - slots: Vec, - memory: Vec, -} - -#[derive(ObjectInterface!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] -#[custom(implements(Object { Logicable, Device, MemoryReadable, MemoryWritable }))] -pub struct GenericLogicableDeviceMemoryReadWriteablable { - #[custom(object_id)] - id: ObjectID, - #[custom(object_prefab)] - prefab: Name, - name: Option, - fields: BTreeMap, - slots: Vec, - memory: Vec, -} diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs new file mode 100644 index 0000000..1926939 --- /dev/null +++ b/ic10emu/src/vm/object/templates.rs @@ -0,0 +1,247 @@ +use std::collections::BTreeMap; + +use crate::{ + network::{ConnectionRole, ConnectionType}, + vm::enums::{ + basic_enums::{Class as SlotClass, GasType, SortingClass}, + script_enums::{LogicSlotType, LogicType}, + }, +}; +use serde_derive::{Deserialize, Serialize}; + +use super::{MemoryAccess, ObjectID}; + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(untagged)] +pub enum ObjectTemplate { + Structure(StructureTemplate), + StructureSlots(StructureSlotsTemplate), + StructureLogic(StructureLogicTemplate), + StructureLogicDevice(StructureLogicDeviceTemplate), + StructureLogicDeviceMemory(StructureLogicDeviceMemoryTemplate), + Item(ItemTemplate), + ItemSlots(ItemSlotsTemplate), + ItemLogic(ItemLogicTemplate), + ItemLogicMemory(ItemLogicMemoryTemplate), +} + +impl ObjectTemplate { + fn prefab(&self) -> &PrefabInfo { + use ObjectTemplate::*; + match self { + Structure(s) => &s.prefab, + StructureSlots(s) => &s.prefab, + StructureLogic(s) => &s.prefab, + StructureLogicDevice(s) => &s.prefab, + StructureLogicDeviceMemory(s) => &s.prefab, + Item(i) => &i.prefab, + ItemSlots(i) => &i.prefab, + ItemLogic(i) => &i.prefab, + ItemLogicMemory(i) => &i.prefab, + } + } +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct PrefabInfo { + pub prefab_name: String, + pub prefab_hash: i32, + pub desc: String, + pub name: String, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ObjectInfo { + pub name: Option, + pub id: Option, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct SlotInfo { + pub name: String, + pub typ: String, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +pub struct LogicSlotTypes { + #[serde(flatten)] + pub slot_types: BTreeMap, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +pub struct LogicTypes { + #[serde(flatten)] + pub types: BTreeMap, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct LogicInfo { + pub logic_slot_types: BTreeMap, + pub logic_types: LogicTypes, + #[serde(skip_serializing_if = "Option::is_none")] + pub modes: Option>, + pub transmission_receiver: bool, + pub wireless_logic: bool, + pub circuit_holder: bool, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ItemInfo { + pub consumable: bool, + #[serde(skip_serializing_if = "Option::is_none")] + pub filter_type: Option, + pub ingredient: bool, + pub max_quantity: f64, + #[serde(skip_serializing_if = "Option::is_none")] + pub reagents: Option>, + pub slot_class: SlotClass, + pub sorting_class: SortingClass, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ConnectionInfo { + pub typ: ConnectionType, + pub role: ConnectionRole, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct DeviceInfo { + pub connection_list: Vec, + #[serde(skip_serializing_if = "Option::is_none")] + 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, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct StructureInfo { + pub small_grid: bool, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct Instruction { + pub description: String, + pub typ: String, + pub value: i64, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct MemoryInfo { + #[serde(skip_serializing_if = "Option::is_none")] + pub instructions: Option>, + pub memory_access: MemoryAccess, + pub memory_size: i64, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct StructureTemplate { + #[serde(skip_serializing_if = "Option::is_none")] + pub object: Option, + pub prefab: PrefabInfo, + pub structure: StructureInfo, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct StructureSlotsTemplate { + #[serde(skip_serializing_if = "Option::is_none")] + pub object: Option, + pub prefab: PrefabInfo, + pub structure: StructureInfo, + pub slots: Vec, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct StructureLogicTemplate { + #[serde(skip_serializing_if = "Option::is_none")] + pub object: Option, + pub prefab: PrefabInfo, + pub structure: StructureInfo, + pub logic: LogicInfo, + pub slots: Vec, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct StructureLogicDeviceTemplate { + #[serde(skip_serializing_if = "Option::is_none")] + pub object: Option, + pub prefab: PrefabInfo, + pub structure: StructureInfo, + pub logic: LogicInfo, + pub slots: Vec, + pub device: DeviceInfo, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct StructureLogicDeviceMemoryTemplate { + #[serde(skip_serializing_if = "Option::is_none")] + pub object: Option, + pub prefab: PrefabInfo, + pub structure: StructureInfo, + pub logic: LogicInfo, + pub slots: Vec, + pub device: DeviceInfo, + pub memory: MemoryInfo, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ItemTemplate { + #[serde(skip_serializing_if = "Option::is_none")] + pub object: Option, + pub prefab: PrefabInfo, + pub item: ItemInfo, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ItemSlotsTemplate { + #[serde(skip_serializing_if = "Option::is_none")] + pub object: Option, + pub prefab: PrefabInfo, + pub item: ItemInfo, + pub slots: Vec, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ItemLogicTemplate { + #[serde(skip_serializing_if = "Option::is_none")] + pub object: Option, + pub prefab: PrefabInfo, + pub item: ItemInfo, + pub logic: LogicInfo, + pub slots: Vec, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ItemLogicMemoryTemplate { + #[serde(skip_serializing_if = "Option::is_none")] + pub object: Option, + pub prefab: PrefabInfo, + pub item: ItemInfo, + pub logic: LogicInfo, + pub slots: Vec, + pub memory: MemoryInfo, +} diff --git a/ic10emu_wasm/build.rs b/ic10emu_wasm/build.rs index e069e78..422bcaa 100644 --- a/ic10emu_wasm/build.rs +++ b/ic10emu_wasm/build.rs @@ -25,12 +25,12 @@ fn main() { ts_types.push_str(<_tstype); let slt_tsunion: String = Itertools::intersperse( - ic10emu::grammar::generated::SlotLogicType::iter() + ic10emu::grammar::generated::LogicSlotType::iter() .map(|slt| format!("\"{}\"", slt.as_ref())), "\n | ".to_owned(), ) .collect(); - let slt_tstype = format!("\nexport type SlotLogicType = {};", slt_tsunion); + let slt_tstype = format!("\nexport type LogicSlotType = {};", slt_tsunion); ts_types.push_str(&slt_tstype); let bm_tsunion: String = Itertools::intersperse( diff --git a/ic10emu_wasm/src/lib.rs b/ic10emu_wasm/src/lib.rs index 3f79d4e..c50fca1 100644 --- a/ic10emu_wasm/src/lib.rs +++ b/ic10emu_wasm/src/lib.rs @@ -4,7 +4,7 @@ mod types; use ic10emu::{ device::{Device, DeviceTemplate, SlotOccupantTemplate}, - grammar::{LogicType, SlotLogicType}, + grammar::{LogicSlotType, LogicType}, vm::{FrozenVM, VMError, VM}, }; use serde_derive::{Deserialize, Serialize}; @@ -308,7 +308,7 @@ impl DeviceRef { value: f64, force: bool, ) -> Result<(), JsError> { - let logic_typ = SlotLogicType::from_str(field)?; + let logic_typ = LogicSlotType::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(()) @@ -316,7 +316,7 @@ impl DeviceRef { #[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 logic_typ = LogicSlotType::from_str(field)?; let device_ref = self.device.borrow_mut(); Ok(device_ref.get_slot_field(slot, logic_typ, &self.vm.borrow())?) } diff --git a/ic10emu_wasm/src/types.rs b/ic10emu_wasm/src/types.rs index 6a7ed54..954f698 100644 --- a/ic10emu_wasm/src/types.rs +++ b/ic10emu_wasm/src/types.rs @@ -27,7 +27,7 @@ pub struct SlotOccupant { pub quantity: u32, pub max_quantity: u32, pub damage: f64, - pub fields: BTreeMap, + pub fields: BTreeMap, } impl From<&ic10emu::device::SlotOccupant> for SlotOccupant { @@ -49,7 +49,7 @@ impl From<&ic10emu::device::SlotOccupant> for SlotOccupant { pub struct Slot { pub typ: ic10emu::device::SlotType, pub occupant: Option, - pub fields: BTreeMap, + pub fields: BTreeMap, } impl From<&ic10emu::device::Slot> for Slot { diff --git a/ic10emu_wasm/src/types.ts b/ic10emu_wasm/src/types.ts index 5455bb9..dade7d4 100644 --- a/ic10emu_wasm/src/types.ts +++ b/ic10emu_wasm/src/types.ts @@ -1,11 +1,11 @@ -export type FieldType = "Read" | "Write" | "ReadWrite"; +export type MemoryAccess = "Read" | "Write" | "ReadWrite"; export interface LogicField { - field_type: FieldType; + field_type: MemoryAccess; value: number; } export type LogicFields = Map; -export type SlotLogicFields = Map; +export type SlotLogicFields = Map; export type Reagents = Map>; @@ -39,7 +39,7 @@ export type DeviceSpec = { readonly connection: number | undefined; }; export type OperandLogicType = { readonly LogicType: string }; -export type OperandSlotLogicType = { readonly SlotLogicType: string }; +export type OperandLogicSlotType = { readonly LogicSlotType: string }; export type OperandBatchMode = { readonly BatchMode: string }; export type OperandReagentMode = { readonly ReagentMode: string }; export type Identifier = { readonly Identifier: { name: string } }; @@ -65,7 +65,7 @@ export type Operand = | DeviceSpec | NumberOperand | OperandLogicType - | OperandSlotLogicType + | OperandLogicSlotType | OperandBatchMode | OperandReagentMode | Identifier; @@ -109,13 +109,13 @@ export interface DeviceRef { 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; + setSlotField(slot: number, field: LogicSlotType, value: number, force: boolean): void; + getSlotField(slot: number, field: LogicSlotType): number; } export interface SlotOccupantTemplate { id?: number; - fields: { [key in SlotLogicType]?: LogicField }; + fields: { [key in LogicSlotType]?: LogicField }; } export interface SlotTemplate { diff --git a/www/cspell.json b/www/cspell.json index 1fc3cc1..2f5b439 100644 --- a/www/cspell.json +++ b/www/cspell.json @@ -103,8 +103,8 @@ "slotclass", "slotlogic", "slotlogicable", - "slotlogictype", - "slotlogictypes", + "LogicSlotType", + "LogicSlotTypes", "slottype", "sltz", "snan", diff --git a/www/src/ts/virtual_machine/device/slot.ts b/www/src/ts/virtual_machine/device/slot.ts index d976a95..fa16e0c 100644 --- a/www/src/ts/virtual_machine/device/slot.ts +++ b/www/src/ts/virtual_machine/device/slot.ts @@ -8,7 +8,7 @@ import { parseNumber, } from "utils"; import { - SlotLogicType, + LogicSlotType, SlotType, } from "ic10emu_wasm"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; @@ -265,7 +265,7 @@ export class VMDeviceSlot extends VMDeviceMixin(VMDeviceDBMixin(BaseElement)) { _handleChangeSlotField(e: CustomEvent) { const input = e.target as SlInput; - const field = input.getAttribute("key")! as SlotLogicType; + const field = input.getAttribute("key")! as LogicSlotType; let val = parseNumber(input.value); if (field === "Quantity") { const slot = this.slots[this.slotIndex]; diff --git a/www/src/ts/virtual_machine/device/slot_add_dialog.ts b/www/src/ts/virtual_machine/device/slot_add_dialog.ts index ecb744f..393f101 100644 --- a/www/src/ts/virtual_machine/device/slot_add_dialog.ts +++ b/www/src/ts/virtual_machine/device/slot_add_dialog.ts @@ -8,7 +8,7 @@ import SlDialog from "@shoelace-style/shoelace/dist/components/dialog/dialog.com import { VMDeviceCard } from "./card"; import { when } from "lit/directives/when.js"; import uFuzzy from "@leeoniya/ufuzzy"; -import { LogicField, SlotLogicType, SlotOccupantTemplate } from "ic10emu_wasm"; +import { LogicField, LogicSlotType, SlotOccupantTemplate } from "ic10emu_wasm"; @customElement("vm-slot-add-dialog") export class VMSlotAddDialog extends VMDeviceDBMixin(BaseElement) { @@ -169,10 +169,10 @@ export class VMSlotAddDialog extends VMDeviceDBMixin(BaseElement) { const dbDevice = this.deviceDB.db[device.prefabName] const sorting = this.deviceDB.enums["SortingClass"][entry.item.sorting ?? "Default"] ?? 0; console.log("using entry", dbDevice); - const fields: { [key in SlotLogicType]?: LogicField } = Object.fromEntries( + const fields: { [key in LogicSlotType]?: LogicField } = Object.fromEntries( Object.entries(dbDevice.slotlogic[this.slotIndex] ?? {}) .map(([slt_s, field_type]) => { - let slt = slt_s as SlotLogicType; + let slt = slt_s as LogicSlotType; let value = 0.0 if (slt === "FilterType") { value = this.deviceDB.enums["GasType"][entry.item.filtertype] diff --git a/www/src/ts/virtual_machine/device_db.ts b/www/src/ts/virtual_machine/device_db.ts index e72ae1c..770966c 100644 --- a/www/src/ts/virtual_machine/device_db.ts +++ b/www/src/ts/virtual_machine/device_db.ts @@ -1,9 +1,9 @@ import { LogicType, - SlotLogicType, + LogicSlotType, SortingClass, SlotType, - FieldType, + MemoryAccess, ReagentMode, BatchMode, ConnectionType, @@ -54,8 +54,8 @@ export interface DeviceDBEntry { title: string; desc: string; slots?: { name: string; typ: SlotType }[]; - logic?: { [key in LogicType]?: FieldType }; - slotlogic?: { [key: number]: {[key in SlotLogicType]?: FieldType } }; + logic?: { [key in LogicType]?: MemoryAccess }; + slotlogic?: { [key: number]: {[key in LogicSlotType]?: MemoryAccess } }; modes?: { [key: number]: string }; conn?: { [key: number]: DeviceDBConnection } item?: DeviceDBItem; diff --git a/www/src/ts/virtual_machine/index.ts b/www/src/ts/virtual_machine/index.ts index 65375ca..b487c51 100644 --- a/www/src/ts/virtual_machine/index.ts +++ b/www/src/ts/virtual_machine/index.ts @@ -3,7 +3,7 @@ import { DeviceTemplate, FrozenVM, LogicType, - SlotLogicType, + LogicSlotType, SlotOccupantTemplate, Slots, VMRef, @@ -365,7 +365,7 @@ class VirtualMachine extends EventTarget { setDeviceSlotField( id: number, slot: number, - field: SlotLogicType, + field: LogicSlotType, val: number, force?: boolean, ): boolean { diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml index 19e4aa1..1ce6807 100644 --- a/xtask/Cargo.toml +++ b/xtask/Cargo.toml @@ -21,4 +21,5 @@ textwrap = { version = "0.16.1", default-features = false } thiserror = "1.0.58" onig = { git = "https://github.com/rust-onig/rust-onig", revision = "fa90c0e97e90a056af89f183b23cd417b59ee6a2" } +tracing = "0.1.40" diff --git a/xtask/src/generate/database.rs b/xtask/src/generate/database.rs index 7aa8acd..0d91420 100644 --- a/xtask/src/generate/database.rs +++ b/xtask/src/generate/database.rs @@ -493,11 +493,19 @@ impl From<&stationpedia::Item> for ItemInfo { } } +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +#[serde(rename_all = "camelCase")] +pub struct ConnectionInfo { + pub typ: String, + pub role: String, +} + #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] #[serde(deny_unknown_fields)] #[serde(rename_all = "camelCase")] pub struct DeviceInfo { - pub connection_list: Vec<(String, String)>, + pub connection_list: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub device_pins_length: Option, pub has_activate_state: bool, @@ -513,7 +521,14 @@ pub struct DeviceInfo { impl From<&stationpedia::Device> for DeviceInfo { fn from(value: &stationpedia::Device) -> Self { DeviceInfo { - connection_list: value.connection_list.clone(), + connection_list: value + .connection_list + .iter() + .map(|(typ, role)| ConnectionInfo { + typ: typ.to_string(), + role: role.to_string(), + }) + .collect(), device_pins_length: value.devices_length, has_activate_state: value.has_activate_state, has_atmosphere: value.has_atmosphere, diff --git a/xtask/src/generate/enums.rs b/xtask/src/generate/enums.rs index db4c0af..b27cf8a 100644 --- a/xtask/src/generate/enums.rs +++ b/xtask/src/generate/enums.rs @@ -326,7 +326,7 @@ pub fn write_enum_listing( struct ReprEnumVariant

where - P: Display + FromStr, + P: Display + FromStr + Ord, { pub value: P, pub deprecated: bool, @@ -353,19 +353,30 @@ fn write_repr_enum<'a, T: std::io::Write, I, P>( use_phf: bool, ) -> color_eyre::Result<()> where - P: Display + FromStr + 'a, + P: Display + FromStr + Ord + 'a, I: IntoIterator)>, { let additional_strum = if use_phf { "#[strum(use_phf)]\n" } else { "" }; let repr = std::any::type_name::

(); + let mut sorted: Vec<_> = variants.into_iter().collect::>(); + sorted.sort_by_key(|(_, variant)| &variant.value); + let default_derive = if sorted + .iter() + .find(|(name, _)| name == "None" || name == "Default") + .is_some() + { + "Default, " + } else { + "" + }; write!( writer, - "#[derive(Debug, Display, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, EnumString, AsRefStr, EnumProperty, EnumIter, FromRepr, Serialize, Deserialize)]\n\ + "#[derive(Debug, {default_derive}Display, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, EnumString, AsRefStr, EnumProperty, EnumIter, FromRepr, Serialize, Deserialize)]\n\ {additional_strum}\ #[repr({repr})]\n\ pub enum {name} {{\n" )?; - for (name, variant) in variants { + for (name, variant) in sorted { let variant_name = name.replace('.', "").to_case(Case::Pascal); let serialize = vec![name.clone()]; let serialize_str = serialize @@ -387,9 +398,14 @@ where } else { "".to_owned() }; + let default = if variant_name == "None" || variant_name == "Default" { + "#[default]" + } else { + "" + }; writeln!( writer, - " #[strum({serialize_str}{props_str})] {variant_name} = {val}{repr}," + " #[strum({serialize_str}{props_str})]{default} {variant_name} = {val}{repr}," )?; } writeln!(writer, "}}")?; diff --git a/xtask/src/main.rs b/xtask/src/main.rs index 7dbafbc..812b5f8 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -216,7 +216,7 @@ fn main() -> color_eyre::Result<()> { { generate::generate(&path, &workspace)?; } else { - return Err(Error::BadStationeresPath(path).into()); + return Err(Error::BadStationeersPath(path).into()); } } } diff --git a/xtask/src/stationpedia.rs b/xtask/src/stationpedia.rs index be02e5e..a3e0757 100644 --- a/xtask/src/stationpedia.rs +++ b/xtask/src/stationpedia.rs @@ -38,14 +38,12 @@ pub struct Reagent { } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] pub struct Command { pub desc: String, pub example: String, } #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] pub struct Page { #[serde(rename = "ConnectionInsert")] pub connection_insert: Vec, @@ -92,7 +90,6 @@ pub struct Page { } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] pub struct Constructs { #[serde(rename = "NameOfThing")] pub name_of_thing: String, @@ -103,7 +100,6 @@ pub struct Constructs { } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] pub struct Structure { #[serde(rename = "SmallGrid")] pub small_grid: bool, @@ -115,7 +111,6 @@ pub struct Structure { pub struct BuildStates(pub Vec); #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] pub struct BuildState { #[serde(rename = "Tool")] pub tool: Option>, @@ -137,7 +132,6 @@ pub enum MachineTier { } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] pub struct Tool { #[serde(rename = "IsTool", default)] pub is_tool: bool, @@ -149,7 +143,6 @@ pub struct Tool { #[serde_as] #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] pub struct SlotInsert { #[serde(rename = "SlotIndex")] #[serde_as(as = "DisplayFromStr")] @@ -161,7 +154,6 @@ pub struct SlotInsert { } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] pub struct LogicInsert { #[serde(rename = "LogicAccessTypes")] pub logic_access_types: String, @@ -170,7 +162,6 @@ pub struct LogicInsert { } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] pub struct LogicSlotInsert { #[serde(rename = "LogicAccessTypes")] pub logic_access_types: String, @@ -180,7 +171,6 @@ pub struct LogicSlotInsert { #[serde_as] #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] pub struct ModeInsert { #[serde(rename = "LogicAccessTypes")] #[serde_as(as = "DisplayFromStr")] @@ -190,7 +180,6 @@ pub struct ModeInsert { } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] pub struct ConnectionInsert { #[serde(rename = "LogicAccessTypes")] pub logic_access_types: String, @@ -199,7 +188,6 @@ pub struct ConnectionInsert { } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] pub struct LogicInfo { #[serde(rename = "LogicSlotTypes")] pub logic_slot_types: BTreeMap, @@ -220,7 +208,6 @@ pub struct LogicTypes { } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] pub struct Memory { #[serde(rename = "Instructions")] pub instructions: Option>, @@ -233,7 +220,6 @@ pub struct Memory { } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] pub struct Instruction { #[serde(rename = "Description")] pub description: String, @@ -244,7 +230,6 @@ pub struct Instruction { } #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] pub struct Item { #[serde(rename = "Consumable")] pub consumable: Option, @@ -287,7 +272,6 @@ pub struct Recipe { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] pub struct RecipeTemperature { #[serde(rename = "Start")] pub start: f64, @@ -298,7 +282,6 @@ pub struct RecipeTemperature { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] pub struct RecipePressure { #[serde(rename = "Start")] pub start: f64, From 095e17a4fb907b796b5f2e6f20b2a707f2184012 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Thu, 9 May 2024 14:41:32 -0700 Subject: [PATCH 10/50] refactor(vm) checkup - ensure tests pass --- Cargo.lock | 1 + ic10emu/Cargo.toml | 1 + ic10emu/src/grammar.rs | 37 +++++++++++++++++++++++----- ic10emu/src/interpreter.rs | 16 ++++++++++-- ic10emu/src/vm/object/templates.rs | 39 ++++++++++++++++++++++++++++++ 5 files changed, 86 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 082a122..8a204c4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -672,6 +672,7 @@ dependencies = [ name = "ic10emu" version = "0.2.3" dependencies = [ + "color-eyre", "const-crc32", "getrandom", "itertools", diff --git a/ic10emu/Cargo.toml b/ic10emu/Cargo.toml index cdeab67..a533408 100644 --- a/ic10emu/Cargo.toml +++ b/ic10emu/Cargo.toml @@ -39,4 +39,5 @@ time = { version = "0.3.34", features = [ ] } [dev-dependencies] +color-eyre = "0.6.3" serde_json = "1.0.117" diff --git a/ic10emu/src/grammar.rs b/ic10emu/src/grammar.rs index 0a72b65..8c51bd7 100644 --- a/ic10emu/src/grammar.rs +++ b/ic10emu/src/grammar.rs @@ -714,10 +714,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(), @@ -725,10 +737,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!( @@ -776,10 +790,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\ @@ -1049,15 +1065,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"); @@ -1093,10 +1113,12 @@ 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}"); @@ -1133,13 +1155,16 @@ mod tests { 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 e6f1d32..6749348 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -2511,8 +2511,19 @@ mod tests { use super::*; + use color_eyre::eyre::Ok; + + static INIT: std::sync::Once = std::sync::Once::new(); + + fn setup() { + INIT.call_once(|| { + let _ = color_eyre::install(); + }) + } + #[test] - fn batch_modes() -> Result<(), VMError> { + fn batch_modes() -> color_eyre::Result<()> { + setup(); let mut vm = VM::new(); let ic = vm.add_ic(None).unwrap(); let ic_id = { @@ -2540,7 +2551,8 @@ mod tests { } #[test] - fn stack() -> Result<(), VMError> { + fn stack() -> color_eyre::Result<()> { + setup(); let mut vm = VM::new(); let ic = vm.add_ic(None).unwrap(); let ic_id = { diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index 1926939..615679a 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -245,3 +245,42 @@ pub struct ItemLogicMemoryTemplate { pub slots: Vec, pub memory: MemoryInfo, } + +#[cfg(test)] +mod tests { + + use serde_derive::Deserialize; + use serde_json; + use std::collections::BTreeMap; + use std::fs::File; + use std::io::BufReader; + use std::path::PathBuf; + + use super::ObjectTemplate; + + static INIT: std::sync::Once = std::sync::Once::new(); + + fn setup() { + INIT.call_once(|| { + let _ = color_eyre::install(); + }) + } + + #[derive(Debug, Deserialize)] + struct Database { + pub prefabs: BTreeMap, + } + + + #[test] + fn all_database_prefabs_parse() -> color_eyre::Result<()> { + setup(); + let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + d = d.parent().unwrap().join("data").join("database.json"); + println!("loading database from {}", d.display()); + + let database: Database = serde_json::from_reader(BufReader::new(File::open(d)?))?; + + Ok(()) + } +} From 17bde04c86d887d709fb92d54fa817bea51fb5d3 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Fri, 10 May 2024 13:57:51 -0700 Subject: [PATCH 11/50] refactor(vm) start impl of IC trait function --- data/database.json | 2 +- ic10emu/src/device.rs | 2 +- ic10emu/src/errors.rs | 2 +- ic10emu/src/grammar.rs | 2 +- ic10emu/src/interpreter.rs | 3 +- ic10emu/src/vm/enums/basic_enums.rs | 180 +- ic10emu/src/vm/enums/prefabs.rs | 84 +- ic10emu/src/vm/enums/script_enums.rs | 8 + ic10emu/src/vm/instructions/enums.rs | 7 + ic10emu/src/vm/instructions/operands.rs | 44 +- ic10emu/src/vm/instructions/traits.rs | 30 +- ic10emu/src/vm/object.rs | 25 +- ic10emu/src/vm/object/generic/macros.rs | 47 +- ic10emu/src/vm/object/generic/structs.rs | 190 +- ic10emu/src/vm/object/generic/traits.rs | 101 +- ic10emu/src/vm/object/macros.rs | 257 ++- ic10emu/src/vm/object/stationpedia.rs | 22 +- ic10emu/src/vm/object/stationpedia/structs.rs | 3 + .../structs/integrated_circuit.rs | 1762 +++++++++++++++++ ic10emu/src/vm/object/templates.rs | 375 +++- ic10emu/src/vm/object/traits.rs | 37 +- xtask/src/generate/database.rs | 4 +- xtask/src/generate/instructions.rs | 20 +- 23 files changed, 2961 insertions(+), 246 deletions(-) create mode 100644 ic10emu/src/vm/object/stationpedia/structs.rs create mode 100644 ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs diff --git a/data/database.json b/data/database.json index 921e78c..bdbc2eb 100644 --- a/data/database.json +++ b/data/database.json @@ -1 +1 @@ -{"prefabs":{"AccessCardBlack":{"prefab":{"prefabName":"AccessCardBlack","prefabHash":-1330388999,"desc":"","name":"Access Card (Black)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardBlue":{"prefab":{"prefabName":"AccessCardBlue","prefabHash":-1411327657,"desc":"","name":"Access Card (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardBrown":{"prefab":{"prefabName":"AccessCardBrown","prefabHash":1412428165,"desc":"","name":"Access Card (Brown)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardGray":{"prefab":{"prefabName":"AccessCardGray","prefabHash":-1339479035,"desc":"","name":"Access Card (Gray)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardGreen":{"prefab":{"prefabName":"AccessCardGreen","prefabHash":-374567952,"desc":"","name":"Access Card (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardKhaki":{"prefab":{"prefabName":"AccessCardKhaki","prefabHash":337035771,"desc":"","name":"Access Card (Khaki)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardOrange":{"prefab":{"prefabName":"AccessCardOrange","prefabHash":-332896929,"desc":"","name":"Access Card (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardPink":{"prefab":{"prefabName":"AccessCardPink","prefabHash":431317557,"desc":"","name":"Access Card (Pink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardPurple":{"prefab":{"prefabName":"AccessCardPurple","prefabHash":459843265,"desc":"","name":"Access Card (Purple)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardRed":{"prefab":{"prefabName":"AccessCardRed","prefabHash":-1713748313,"desc":"","name":"Access Card (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardWhite":{"prefab":{"prefabName":"AccessCardWhite","prefabHash":2079959157,"desc":"","name":"Access Card (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardYellow":{"prefab":{"prefabName":"AccessCardYellow","prefabHash":568932536,"desc":"","name":"Access Card (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"AccessCard","sortingClass":"Default"}},"ApplianceChemistryStation":{"prefab":{"prefabName":"ApplianceChemistryStation","prefabHash":1365789392,"desc":"","name":"Chemistry Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"ApplianceDeskLampLeft":{"prefab":{"prefabName":"ApplianceDeskLampLeft","prefabHash":-1683849799,"desc":"","name":"Appliance Desk Lamp Left"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"}},"ApplianceDeskLampRight":{"prefab":{"prefabName":"ApplianceDeskLampRight","prefabHash":1174360780,"desc":"","name":"Appliance Desk Lamp Right"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"}},"ApplianceMicrowave":{"prefab":{"prefabName":"ApplianceMicrowave","prefabHash":-1136173965,"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.","name":"Microwave"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"AppliancePackagingMachine":{"prefab":{"prefabName":"AppliancePackagingMachine","prefabHash":-749191906,"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 ","name":"Basic Packaging Machine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Export","typ":"None"}]},"AppliancePaintMixer":{"prefab":{"prefabName":"AppliancePaintMixer","prefabHash":-1339716113,"desc":"","name":"Paint Mixer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"Bottle"}]},"AppliancePlantGeneticAnalyzer":{"prefab":{"prefabName":"AppliancePlantGeneticAnalyzer","prefabHash":-1303038067,"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.","name":"Plant Genetic Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Input","typ":"Tool"}]},"AppliancePlantGeneticSplicer":{"prefab":{"prefabName":"AppliancePlantGeneticSplicer","prefabHash":-1094868323,"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.","name":"Plant Genetic Splicer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Source Plant","typ":"Plant"},{"name":"Target Plant","typ":"Plant"}]},"AppliancePlantGeneticStabilizer":{"prefab":{"prefabName":"AppliancePlantGeneticStabilizer","prefabHash":871432335,"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 ","name":"Plant Genetic Stabilizer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Plant","typ":"Plant"}]},"ApplianceReagentProcessor":{"prefab":{"prefabName":"ApplianceReagentProcessor","prefabHash":1260918085,"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.","name":"Reagent Processor"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Input","typ":"None"},{"name":"Output","typ":"None"}]},"ApplianceSeedTray":{"prefab":{"prefabName":"ApplianceSeedTray","prefabHash":142831994,"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.","name":"Appliance Seed Tray"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"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"}]},"ApplianceTabletDock":{"prefab":{"prefabName":"ApplianceTabletDock","prefabHash":1853941363,"desc":"","name":"Tablet Dock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"","typ":"Tool"}]},"AutolathePrinterMod":{"prefab":{"prefabName":"AutolathePrinterMod","prefabHash":221058307,"desc":"Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Autolathe Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"Battery_Wireless_cell":{"prefab":{"prefabName":"Battery_Wireless_cell","prefabHash":-462415758,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Battery_Wireless_cell_Big":{"prefab":{"prefabName":"Battery_Wireless_cell_Big","prefabHash":-41519077,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell (Big)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"CardboardBox":{"prefab":{"prefabName":"CardboardBox","prefabHash":-1976947556,"desc":"","name":"Cardboard Box"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Storage"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"CartridgeAccessController":{"prefab":{"prefabName":"CartridgeAccessController","prefabHash":-1634532552,"desc":"","name":"Cartridge (Access Controller)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeAtmosAnalyser":{"prefab":{"prefabName":"CartridgeAtmosAnalyser","prefabHash":-1550278665,"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.","name":"Atmos Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeConfiguration":{"prefab":{"prefabName":"CartridgeConfiguration","prefabHash":-932136011,"desc":"","name":"Configuration"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeElectronicReader":{"prefab":{"prefabName":"CartridgeElectronicReader","prefabHash":-1462180176,"desc":"","name":"eReader"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeGPS":{"prefab":{"prefabName":"CartridgeGPS","prefabHash":-1957063345,"desc":"","name":"GPS"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeGuide":{"prefab":{"prefabName":"CartridgeGuide","prefabHash":872720793,"desc":"","name":"Guide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeMedicalAnalyser":{"prefab":{"prefabName":"CartridgeMedicalAnalyser","prefabHash":-1116110181,"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.","name":"Medical Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeNetworkAnalyser":{"prefab":{"prefabName":"CartridgeNetworkAnalyser","prefabHash":1606989119,"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.","name":"Network Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeOreScanner":{"prefab":{"prefabName":"CartridgeOreScanner","prefabHash":-1768732546,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet.","name":"Ore Scanner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeOreScannerColor":{"prefab":{"prefabName":"CartridgeOreScannerColor","prefabHash":1738236580,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground in different colors on the tablet.","name":"Ore Scanner (Color)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgePlantAnalyser":{"prefab":{"prefabName":"CartridgePlantAnalyser","prefabHash":1101328282,"desc":"","name":"Cartridge Plant Analyser"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeTracker":{"prefab":{"prefabName":"CartridgeTracker","prefabHash":81488783,"desc":"","name":"Tracker"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Cartridge","sortingClass":"Default"}},"CircuitboardAdvAirlockControl":{"prefab":{"prefabName":"CircuitboardAdvAirlockControl","prefabHash":1633663176,"desc":"","name":"Advanced Airlock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardAirControl":{"prefab":{"prefabName":"CircuitboardAirControl","prefabHash":1618019559,"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. ","name":"Air Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardAirlockControl":{"prefab":{"prefabName":"CircuitboardAirlockControl","prefabHash":912176135,"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.","name":"Airlock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardCameraDisplay":{"prefab":{"prefabName":"CircuitboardCameraDisplay","prefabHash":-412104504,"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.","name":"Camera Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardDoorControl":{"prefab":{"prefabName":"CircuitboardDoorControl","prefabHash":855694771,"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.","name":"Door Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardGasDisplay":{"prefab":{"prefabName":"CircuitboardGasDisplay","prefabHash":-82343730,"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).","name":"Gas Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardGraphDisplay":{"prefab":{"prefabName":"CircuitboardGraphDisplay","prefabHash":1344368806,"desc":"","name":"Graph Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardHashDisplay":{"prefab":{"prefabName":"CircuitboardHashDisplay","prefabHash":1633074601,"desc":"","name":"Hash Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardModeControl":{"prefab":{"prefabName":"CircuitboardModeControl","prefabHash":-1134148135,"desc":"Can't decide which mode you love most? This circuit board allows you to switch any connected device between operation modes.","name":"Mode Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardPowerControl":{"prefab":{"prefabName":"CircuitboardPowerControl","prefabHash":-1923778429,"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. ","name":"Power Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardShipDisplay":{"prefab":{"prefabName":"CircuitboardShipDisplay","prefabHash":-2044446819,"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.","name":"Ship Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardSolarControl":{"prefab":{"prefabName":"CircuitboardSolarControl","prefabHash":2020180320,"desc":"Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel.","name":"Solar Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"CompositeRollCover":{"prefab":{"prefabName":"CompositeRollCover","prefabHash":1228794916,"desc":"0.Operate\n1.Logic","name":"Composite Roll Cover"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"CrateMkII":{"prefab":{"prefabName":"CrateMkII","prefabHash":8709219,"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.","name":"Crate Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Storage"},"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"}]},"DecayedFood":{"prefab":{"prefabName":"DecayedFood","prefabHash":1531087544,"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","name":"Decayed Food"},"item":{"consumable":false,"ingredient":false,"maxQuantity":25.0,"slotClass":"None","sortingClass":"Default"}},"DeviceLfoVolume":{"prefab":{"prefabName":"DeviceLfoVolume","prefabHash":-1844430312,"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.","name":"Low frequency oscillator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"DeviceStepUnit":{"prefab":{"prefabName":"DeviceStepUnit","prefabHash":1762696475,"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","name":"Device Step Unit"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"DynamicAirConditioner":{"prefab":{"prefabName":"DynamicAirConditioner","prefabHash":519913639,"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.","name":"Portable Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicCrate":{"prefab":{"prefabName":"DynamicCrate","prefabHash":1941079206,"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.","name":"Dynamic Crate"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Storage"},"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"}]},"DynamicGPR":{"prefab":{"prefabName":"DynamicGPR","prefabHash":-2085885850,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicGasCanisterAir":{"prefab":{"prefabName":"DynamicGasCanisterAir","prefabHash":-1713611165,"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.","name":"Portable Gas Tank (Air)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterCarbonDioxide":{"prefab":{"prefabName":"DynamicGasCanisterCarbonDioxide","prefabHash":-322413931,"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.","name":"Portable Gas Tank (CO2)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterEmpty":{"prefab":{"prefabName":"DynamicGasCanisterEmpty","prefabHash":-1741267161,"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.","name":"Portable Gas Tank"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterFuel":{"prefab":{"prefabName":"DynamicGasCanisterFuel","prefabHash":-817051527,"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.","name":"Portable Gas Tank (Fuel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrogen":{"prefab":{"prefabName":"DynamicGasCanisterNitrogen","prefabHash":121951301,"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.","name":"Portable Gas Tank (Nitrogen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrousOxide":{"prefab":{"prefabName":"DynamicGasCanisterNitrousOxide","prefabHash":30727200,"desc":"","name":"Portable Gas Tank (Nitrous Oxide)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterOxygen":{"prefab":{"prefabName":"DynamicGasCanisterOxygen","prefabHash":1360925836,"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.","name":"Portable Gas Tank (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterPollutants":{"prefab":{"prefabName":"DynamicGasCanisterPollutants","prefabHash":396065382,"desc":"","name":"Portable Gas Tank (Pollutants)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterRocketFuel":{"prefab":{"prefabName":"DynamicGasCanisterRocketFuel","prefabHash":-8883951,"desc":"","name":"Dynamic Gas Canister Rocket Fuel"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterVolatiles":{"prefab":{"prefabName":"DynamicGasCanisterVolatiles","prefabHash":108086870,"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.","name":"Portable Gas Tank (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterWater":{"prefab":{"prefabName":"DynamicGasCanisterWater","prefabHash":197293625,"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.","name":"Portable Liquid Tank (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"LiquidCanister"}]},"DynamicGasTankAdvanced":{"prefab":{"prefabName":"DynamicGasTankAdvanced","prefabHash":-386375420,"desc":"0.Mode0\n1.Mode1","name":"Gas Tank Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasTankAdvancedOxygen":{"prefab":{"prefabName":"DynamicGasTankAdvancedOxygen","prefabHash":-1264455519,"desc":"0.Mode0\n1.Mode1","name":"Portable Gas Tank Mk II (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGenerator":{"prefab":{"prefabName":"DynamicGenerator","prefabHash":-82087220,"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.","name":"Portable Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"GasCanister"},{"name":"Battery","typ":"Battery"}]},"DynamicHydroponics":{"prefab":{"prefabName":"DynamicHydroponics","prefabHash":587726607,"desc":"","name":"Portable Hydroponics"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"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"}]},"DynamicLight":{"prefab":{"prefabName":"DynamicLight","prefabHash":-21970188,"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.","name":"Portable Light"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicLiquidCanisterEmpty":{"prefab":{"prefabName":"DynamicLiquidCanisterEmpty","prefabHash":-1939209112,"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.","name":"Portable Liquid Tank"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterEmpty":{"prefab":{"prefabName":"DynamicMKIILiquidCanisterEmpty","prefabHash":2130739600,"desc":"An empty, insulated liquid Gas Canister.","name":"Portable Liquid Tank Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterWater":{"prefab":{"prefabName":"DynamicMKIILiquidCanisterWater","prefabHash":-319510386,"desc":"An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature.","name":"Portable Liquid Tank Mk II (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicScrubber":{"prefab":{"prefabName":"DynamicScrubber","prefabHash":755048589,"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.","name":"Portable Air Scrubber"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"}]},"DynamicSkeleton":{"prefab":{"prefabName":"DynamicSkeleton","prefabHash":106953348,"desc":"","name":"Skeleton"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ElectronicPrinterMod":{"prefab":{"prefabName":"ElectronicPrinterMod","prefabHash":-311170652,"desc":"Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Electronic Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ElevatorCarrage":{"prefab":{"prefabName":"ElevatorCarrage","prefabHash":-110788403,"desc":"","name":"Elevator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"EntityChick":{"prefab":{"prefabName":"EntityChick","prefabHash":1730165908,"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.","name":"Entity Chick"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenBrown":{"prefab":{"prefabName":"EntityChickenBrown","prefabHash":334097180,"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.","name":"Entity Chicken Brown"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenWhite":{"prefab":{"prefabName":"EntityChickenWhite","prefabHash":1010807532,"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.","name":"Entity Chicken White"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBlack":{"prefab":{"prefabName":"EntityRoosterBlack","prefabHash":966959649,"desc":"This is a rooster. It is black. There is dignity in this.","name":"Entity Rooster Black"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBrown":{"prefab":{"prefabName":"EntityRoosterBrown","prefabHash":-583103395,"desc":"The common brown rooster. Don't let it hear you say that.","name":"Entity Rooster Brown"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"Fertilizer":{"prefab":{"prefabName":"Fertilizer","prefabHash":1517856652,"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. ","name":"Fertilizer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Default"}},"FireArmSMG":{"prefab":{"prefabName":"FireArmSMG","prefabHash":-86315541,"desc":"0.Single\n1.Auto","name":"Fire Arm SMG"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"slots":[{"name":"","typ":"Magazine"}]},"Flag_ODA_10m":{"prefab":{"prefabName":"Flag_ODA_10m","prefabHash":1845441951,"desc":"","name":"Flag (ODA 10m)"},"structure":{"smallGrid":true}},"Flag_ODA_4m":{"prefab":{"prefabName":"Flag_ODA_4m","prefabHash":1159126354,"desc":"","name":"Flag (ODA 4m)"},"structure":{"smallGrid":true}},"Flag_ODA_6m":{"prefab":{"prefabName":"Flag_ODA_6m","prefabHash":1998634960,"desc":"","name":"Flag (ODA 6m)"},"structure":{"smallGrid":true}},"Flag_ODA_8m":{"prefab":{"prefabName":"Flag_ODA_8m","prefabHash":-375156130,"desc":"","name":"Flag (ODA 8m)"},"structure":{"smallGrid":true}},"FlareGun":{"prefab":{"prefabName":"FlareGun","prefabHash":118685786,"desc":"","name":"Flare Gun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Magazine","typ":"Flare"},{"name":"","typ":"Blocked"}]},"H2Combustor":{"prefab":{"prefabName":"H2Combustor","prefabHash":1840108251,"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.","name":"H2 Combustor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"Handgun":{"prefab":{"prefabName":"Handgun","prefabHash":247238062,"desc":"","name":"Handgun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"slots":[{"name":"Magazine","typ":"Magazine"}]},"HandgunMagazine":{"prefab":{"prefabName":"HandgunMagazine","prefabHash":1254383185,"desc":"","name":"Handgun Magazine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Magazine","sortingClass":"Default"}},"HumanSkull":{"prefab":{"prefabName":"HumanSkull","prefabHash":-857713709,"desc":"","name":"Human Skull"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ImGuiCircuitboardAirlockControl":{"prefab":{"prefabName":"ImGuiCircuitboardAirlockControl","prefabHash":-73796547,"desc":"","name":"Airlock (Experimental)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Circuitboard","sortingClass":"Default"}},"ItemActiveVent":{"prefab":{"prefabName":"ItemActiveVent","prefabHash":-842048328,"desc":"When constructed, this kit places an Active Vent on any support structure.","name":"Kit (Active Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemAdhesiveInsulation":{"prefab":{"prefabName":"ItemAdhesiveInsulation","prefabHash":1871048978,"desc":"","name":"Adhesive Insulation"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemAdvancedTablet":{"prefab":{"prefabName":"ItemAdvancedTablet","prefabHash":1722785341,"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","name":"Advanced Tablet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read","SoundAlert":"ReadWrite","Volume":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"},{"name":"Cartridge1","typ":"Cartridge"},{"name":"Programmable Chip","typ":"ProgrammableChip"}]},"ItemAlienMushroom":{"prefab":{"prefabName":"ItemAlienMushroom","prefabHash":176446172,"desc":"","name":"Alien Mushroom"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Default"}},"ItemAmmoBox":{"prefab":{"prefabName":"ItemAmmoBox","prefabHash":-9559091,"desc":"","name":"Ammo Box"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemAngleGrinder":{"prefab":{"prefabName":"ItemAngleGrinder","prefabHash":201215010,"desc":"Angles-be-gone with the trusty angle grinder.","name":"Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemArcWelder":{"prefab":{"prefabName":"ItemArcWelder","prefabHash":1385062886,"desc":"","name":"Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemAreaPowerControl":{"prefab":{"prefabName":"ItemAreaPowerControl","prefabHash":1757673317,"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.","name":"Kit (Power Controller)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemAstroloyIngot":{"prefab":{"prefabName":"ItemAstroloyIngot","prefabHash":412924554,"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.","name":"Ingot (Astroloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Astroloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemAstroloySheets":{"prefab":{"prefabName":"ItemAstroloySheets","prefabHash":-1662476145,"desc":"","name":"Astroloy Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemAuthoringTool":{"prefab":{"prefabName":"ItemAuthoringTool","prefabHash":789015045,"desc":"","name":"Authoring Tool"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemAuthoringToolRocketNetwork":{"prefab":{"prefabName":"ItemAuthoringToolRocketNetwork","prefabHash":-1731627004,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemBasketBall":{"prefab":{"prefabName":"ItemBasketBall","prefabHash":-1262580790,"desc":"","name":"Basket Ball"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemBatteryCell":{"prefab":{"prefabName":"ItemBatteryCell","prefabHash":700133157,"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.","name":"Battery Cell (Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCellLarge":{"prefab":{"prefabName":"ItemBatteryCellLarge","prefabHash":-459827268,"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","name":"Battery Cell (Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCellNuclear":{"prefab":{"prefabName":"ItemBatteryCellNuclear","prefabHash":544617306,"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.","name":"Battery Cell (Nuclear)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCharger":{"prefab":{"prefabName":"ItemBatteryCharger","prefabHash":-1866880307,"desc":"This kit produces a 5-slot Kit (Battery Charger).","name":"Kit (Battery Charger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemBatteryChargerSmall":{"prefab":{"prefabName":"ItemBatteryChargerSmall","prefabHash":1008295833,"desc":"","name":"Battery Charger Small"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemBeacon":{"prefab":{"prefabName":"ItemBeacon","prefabHash":-869869491,"desc":"","name":"Tracking Beacon"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemBiomass":{"prefab":{"prefabName":"ItemBiomass","prefabHash":-831480639,"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).","name":"Biomass"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100.0,"reagents":{"Biomass":1.0},"slotClass":"Ore","sortingClass":"Resources"}},"ItemBreadLoaf":{"prefab":{"prefabName":"ItemBreadLoaf","prefabHash":893514943,"desc":"","name":"Bread Loaf"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCableAnalyser":{"prefab":{"prefabName":"ItemCableAnalyser","prefabHash":-1792787349,"desc":"","name":"Kit (Cable Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemCableCoil":{"prefab":{"prefabName":"ItemCableCoil","prefabHash":-466050668,"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).","name":"Cable Coil"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Tool","sortingClass":"Resources"}},"ItemCableCoilHeavy":{"prefab":{"prefabName":"ItemCableCoilHeavy","prefabHash":2060134443,"desc":"Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW.","name":"Cable Coil (Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Tool","sortingClass":"Resources"}},"ItemCableFuse":{"prefab":{"prefabName":"ItemCableFuse","prefabHash":195442047,"desc":"","name":"Kit (Cable Fuses)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Resources"}},"ItemCannedCondensedMilk":{"prefab":{"prefabName":"ItemCannedCondensedMilk","prefabHash":-2104175091,"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.","name":"Canned Condensed Milk"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCannedEdamame":{"prefab":{"prefabName":"ItemCannedEdamame","prefabHash":-999714082,"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.","name":"Canned Edamame"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCannedMushroom":{"prefab":{"prefabName":"ItemCannedMushroom","prefabHash":-1344601965,"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.","name":"Canned Mushroom"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCannedPowderedEggs":{"prefab":{"prefabName":"ItemCannedPowderedEggs","prefabHash":1161510063,"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.","name":"Canned Powdered Eggs"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCannedRicePudding":{"prefab":{"prefabName":"ItemCannedRicePudding","prefabHash":-1185552595,"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.","name":"Canned Rice Pudding"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCerealBar":{"prefab":{"prefabName":"ItemCerealBar","prefabHash":791746840,"desc":"Sustains, without decay. If only all our relationships were so well balanced.","name":"Cereal Bar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCharcoal":{"prefab":{"prefabName":"ItemCharcoal","prefabHash":252561409,"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.","name":"Charcoal"},"item":{"consumable":false,"ingredient":true,"maxQuantity":200.0,"reagents":{"Carbon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemChemLightBlue":{"prefab":{"prefabName":"ItemChemLightBlue","prefabHash":-772542081,"desc":"A safe and slightly rave-some source of blue light. Snap to activate.","name":"Chem Light (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightGreen":{"prefab":{"prefabName":"ItemChemLightGreen","prefabHash":-597479390,"desc":"Enliven the dreariest, airless rock with this glowy green light. Snap to activate.","name":"Chem Light (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightRed":{"prefab":{"prefabName":"ItemChemLightRed","prefabHash":-525810132,"desc":"A red glowstick. Snap to activate. Then reach for the lasers.","name":"Chem Light (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightWhite":{"prefab":{"prefabName":"ItemChemLightWhite","prefabHash":1312166823,"desc":"Snap the glowstick to activate a pale radiance that keeps the darkness at bay.","name":"Chem Light (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightYellow":{"prefab":{"prefabName":"ItemChemLightYellow","prefabHash":1224819963,"desc":"Dispel the darkness with this yellow glowstick.","name":"Chem Light (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemCoalOre":{"prefab":{"prefabName":"ItemCoalOre","prefabHash":1724793494,"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).","name":"Ore (Coal)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Hydrocarbon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCobaltOre":{"prefab":{"prefabName":"ItemCobaltOre","prefabHash":-983091249,"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.","name":"Ore (Cobalt)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Cobalt":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCoffeeMug":{"prefab":{"prefabName":"ItemCoffeeMug","prefabHash":1800622698,"desc":"","name":"Coffee Mug"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemConstantanIngot":{"prefab":{"prefabName":"ItemConstantanIngot","prefabHash":1058547521,"desc":"","name":"Ingot (Constantan)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Constantan":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemCookedCondensedMilk":{"prefab":{"prefabName":"ItemCookedCondensedMilk","prefabHash":1715917521,"desc":"A high-nutrient cooked food, which can be canned.","name":"Condensed Milk"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Milk":100.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedCorn":{"prefab":{"prefabName":"ItemCookedCorn","prefabHash":1344773148,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Corn"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Corn":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedMushroom":{"prefab":{"prefabName":"ItemCookedMushroom","prefabHash":-1076892658,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Mushroom"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Mushroom":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedPowderedEggs":{"prefab":{"prefabName":"ItemCookedPowderedEggs","prefabHash":-1712264413,"desc":"A high-nutrient cooked food, which can be canned.","name":"Powdered Eggs"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Egg":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedPumpkin":{"prefab":{"prefabName":"ItemCookedPumpkin","prefabHash":1849281546,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Pumpkin"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Pumpkin":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedRice":{"prefab":{"prefabName":"ItemCookedRice","prefabHash":2013539020,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Rice"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Rice":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedSoybean":{"prefab":{"prefabName":"ItemCookedSoybean","prefabHash":1353449022,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Soybean"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Soy":5.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedTomato":{"prefab":{"prefabName":"ItemCookedTomato","prefabHash":-709086714,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Tomato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Tomato":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCopperIngot":{"prefab":{"prefabName":"ItemCopperIngot","prefabHash":-404336834,"desc":"Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items.","name":"Ingot (Copper)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Copper":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemCopperOre":{"prefab":{"prefabName":"ItemCopperOre","prefabHash":-707307845,"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.","name":"Ore (Copper)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Copper":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCorn":{"prefab":{"prefabName":"ItemCorn","prefabHash":258339687,"desc":"A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light.","name":"Corn"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Corn":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemCornSoup":{"prefab":{"prefabName":"ItemCornSoup","prefabHash":545034114,"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.","name":"Corn Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemCreditCard":{"prefab":{"prefabName":"ItemCreditCard","prefabHash":-1756772618,"desc":"","name":"Credit Card"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"CreditCard","sortingClass":"Tools"}},"ItemCropHay":{"prefab":{"prefabName":"ItemCropHay","prefabHash":215486157,"desc":"","name":"Hay"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"None","sortingClass":"Default"}},"ItemCrowbar":{"prefab":{"prefabName":"ItemCrowbar","prefabHash":856108234,"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.","name":"Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemDataDisk":{"prefab":{"prefabName":"ItemDataDisk","prefabHash":1005843700,"desc":"","name":"Data Disk"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"DataDisk","sortingClass":"Default"}},"ItemDirtCanister":{"prefab":{"prefabName":"ItemDirtCanister","prefabHash":902565329,"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.","name":"Dirt Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Ore","sortingClass":"Default"}},"ItemDirtyOre":{"prefab":{"prefabName":"ItemDirtyOre","prefabHash":-1234745580,"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. ","name":"Dirty Ore"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Ores"}},"ItemDisposableBatteryCharger":{"prefab":{"prefabName":"ItemDisposableBatteryCharger","prefabHash":-2124435700,"desc":"Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery.","name":"Disposable Battery Charger"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemDrill":{"prefab":{"prefabName":"ItemDrill","prefabHash":2009673399,"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.","name":"Hand Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemDuctTape":{"prefab":{"prefabName":"ItemDuctTape","prefabHash":-1943134693,"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.","name":"Duct Tape"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemDynamicAirCon":{"prefab":{"prefabName":"ItemDynamicAirCon","prefabHash":1072914031,"desc":"","name":"Kit (Portable Air Conditioner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemDynamicScrubber":{"prefab":{"prefabName":"ItemDynamicScrubber","prefabHash":-971920158,"desc":"","name":"Kit (Portable Scrubber)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemEggCarton":{"prefab":{"prefabName":"ItemEggCarton","prefabHash":-524289310,"desc":"Within, eggs reside in mysterious, marmoreal silence.","name":"Egg Carton"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Storage"},"slots":[{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"}]},"ItemElectronicParts":{"prefab":{"prefabName":"ItemElectronicParts","prefabHash":731250882,"desc":"","name":"Electronic Parts"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Resources"}},"ItemElectrumIngot":{"prefab":{"prefabName":"ItemElectrumIngot","prefabHash":502280180,"desc":"","name":"Ingot (Electrum)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Electrum":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemEmergencyAngleGrinder":{"prefab":{"prefabName":"ItemEmergencyAngleGrinder","prefabHash":-351438780,"desc":"","name":"Emergency Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyArcWelder":{"prefab":{"prefabName":"ItemEmergencyArcWelder","prefabHash":-1056029600,"desc":"","name":"Emergency Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyCrowbar":{"prefab":{"prefabName":"ItemEmergencyCrowbar","prefabHash":976699731,"desc":"","name":"Emergency Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyDrill":{"prefab":{"prefabName":"ItemEmergencyDrill","prefabHash":-2052458905,"desc":"","name":"Emergency Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyEvaSuit":{"prefab":{"prefabName":"ItemEmergencyEvaSuit","prefabHash":1791306431,"desc":"","name":"Emergency Eva Suit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Suit","sortingClass":"Clothing"},"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"}]},"ItemEmergencyPickaxe":{"prefab":{"prefabName":"ItemEmergencyPickaxe","prefabHash":-1061510408,"desc":"","name":"Emergency Pickaxe"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyScrewdriver":{"prefab":{"prefabName":"ItemEmergencyScrewdriver","prefabHash":266099983,"desc":"","name":"Emergency Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencySpaceHelmet":{"prefab":{"prefabName":"ItemEmergencySpaceHelmet","prefabHash":205916793,"desc":"","name":"Emergency Space Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemEmergencyToolBelt":{"prefab":{"prefabName":"ItemEmergencyToolBelt","prefabHash":1661941301,"desc":"","name":"Emergency Tool Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemEmergencyWireCutters":{"prefab":{"prefabName":"ItemEmergencyWireCutters","prefabHash":2102803952,"desc":"","name":"Emergency Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyWrench":{"prefab":{"prefabName":"ItemEmergencyWrench","prefabHash":162553030,"desc":"","name":"Emergency Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmptyCan":{"prefab":{"prefabName":"ItemEmptyCan","prefabHash":1013818348,"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.","name":"Empty Can"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10.0,"reagents":{"Steel":1.0},"slotClass":"None","sortingClass":"Default"}},"ItemEvaSuit":{"prefab":{"prefabName":"ItemEvaSuit","prefabHash":1677018918,"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.","name":"Eva Suit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Suit","sortingClass":"Clothing"},"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"}]},"ItemExplosive":{"prefab":{"prefabName":"ItemExplosive","prefabHash":235361649,"desc":"","name":"Remote Explosive"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemFern":{"prefab":{"prefabName":"ItemFern","prefabHash":892110467,"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.","name":"Fern"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100.0,"reagents":{"Fenoxitone":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemFertilizedEgg":{"prefab":{"prefabName":"ItemFertilizedEgg","prefabHash":-383972371,"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.","name":"Egg"},"item":{"consumable":false,"ingredient":true,"maxQuantity":1.0,"reagents":{"Egg":1.0},"slotClass":"Egg","sortingClass":"Resources"}},"ItemFilterFern":{"prefab":{"prefabName":"ItemFilterFern","prefabHash":266654416,"desc":"A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant.","name":"Darga Fern"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlagSmall":{"prefab":{"prefabName":"ItemFlagSmall","prefabHash":2011191088,"desc":"","name":"Kit (Small Flag)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemFlashingLight":{"prefab":{"prefabName":"ItemFlashingLight","prefabHash":-2107840748,"desc":"","name":"Kit (Flashing Light)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemFlashlight":{"prefab":{"prefabName":"ItemFlashlight","prefabHash":-838472102,"desc":"A flashlight with a narrow and wide beam options.","name":"Flashlight"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Low Power","1":"High Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemFlour":{"prefab":{"prefabName":"ItemFlour","prefabHash":-665995854,"desc":"Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven).","name":"Flour"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Flour":50.0},"slotClass":"None","sortingClass":"Resources"}},"ItemFlowerBlue":{"prefab":{"prefabName":"ItemFlowerBlue","prefabHash":-1573623434,"desc":"","name":"Flower (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerGreen":{"prefab":{"prefabName":"ItemFlowerGreen","prefabHash":-1513337058,"desc":"","name":"Flower (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerOrange":{"prefab":{"prefabName":"ItemFlowerOrange","prefabHash":-1411986716,"desc":"","name":"Flower (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerRed":{"prefab":{"prefabName":"ItemFlowerRed","prefabHash":-81376085,"desc":"","name":"Flower (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerYellow":{"prefab":{"prefabName":"ItemFlowerYellow","prefabHash":1712822019,"desc":"","name":"Flower (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFrenchFries":{"prefab":{"prefabName":"ItemFrenchFries","prefabHash":-57608687,"desc":"Because space would suck without 'em.","name":"Canned French Fries"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemFries":{"prefab":{"prefabName":"ItemFries","prefabHash":1371786091,"desc":"","name":"French Fries"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemGasCanisterCarbonDioxide":{"prefab":{"prefabName":"ItemGasCanisterCarbonDioxide","prefabHash":-767685874,"desc":"","name":"Canister (CO2)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterEmpty":{"prefab":{"prefabName":"ItemGasCanisterEmpty","prefabHash":42280099,"desc":"","name":"Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterFuel":{"prefab":{"prefabName":"ItemGasCanisterFuel","prefabHash":-1014695176,"desc":"","name":"Canister (Fuel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterNitrogen":{"prefab":{"prefabName":"ItemGasCanisterNitrogen","prefabHash":2145068424,"desc":"","name":"Canister (Nitrogen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterNitrousOxide":{"prefab":{"prefabName":"ItemGasCanisterNitrousOxide","prefabHash":-1712153401,"desc":"","name":"Gas Canister (Sleeping)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterOxygen":{"prefab":{"prefabName":"ItemGasCanisterOxygen","prefabHash":-1152261938,"desc":"","name":"Canister (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterPollutants":{"prefab":{"prefabName":"ItemGasCanisterPollutants","prefabHash":-1552586384,"desc":"","name":"Canister (Pollutants)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterSmart":{"prefab":{"prefabName":"ItemGasCanisterSmart","prefabHash":-668314371,"desc":"0.Mode0\n1.Mode1","name":"Gas Canister (Smart)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterVolatiles":{"prefab":{"prefabName":"ItemGasCanisterVolatiles","prefabHash":-472094806,"desc":"","name":"Canister (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterWater":{"prefab":{"prefabName":"ItemGasCanisterWater","prefabHash":-1854861891,"desc":"","name":"Liquid Canister (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemGasFilterCarbonDioxide":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxide","prefabHash":1635000764,"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.","name":"Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideInfinite":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideInfinite","prefabHash":-185568964,"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.","name":"Catalytic Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideL":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideL","prefabHash":1876847024,"desc":"","name":"Heavy Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideM":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideM","prefabHash":416897318,"desc":"","name":"Medium Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogen":{"prefab":{"prefabName":"ItemGasFilterNitrogen","prefabHash":632853248,"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.","name":"Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenInfinite":{"prefab":{"prefabName":"ItemGasFilterNitrogenInfinite","prefabHash":152751131,"desc":"A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenL":{"prefab":{"prefabName":"ItemGasFilterNitrogenL","prefabHash":-1387439451,"desc":"","name":"Heavy Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenM":{"prefab":{"prefabName":"ItemGasFilterNitrogenM","prefabHash":-632657357,"desc":"","name":"Medium Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxide":{"prefab":{"prefabName":"ItemGasFilterNitrousOxide","prefabHash":-1247674305,"desc":"","name":"Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideInfinite":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideInfinite","prefabHash":-123934842,"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.","name":"Catalytic Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideL":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideL","prefabHash":465267979,"desc":"","name":"Heavy Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideM":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideM","prefabHash":1824284061,"desc":"","name":"Medium Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygen":{"prefab":{"prefabName":"ItemGasFilterOxygen","prefabHash":-721824748,"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).","name":"Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenInfinite":{"prefab":{"prefabName":"ItemGasFilterOxygenInfinite","prefabHash":-1055451111,"desc":"A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenL":{"prefab":{"prefabName":"ItemGasFilterOxygenL","prefabHash":-1217998945,"desc":"","name":"Heavy Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenM":{"prefab":{"prefabName":"ItemGasFilterOxygenM","prefabHash":-1067319543,"desc":"","name":"Medium Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutants":{"prefab":{"prefabName":"ItemGasFilterPollutants","prefabHash":1915566057,"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.","name":"Filter (Pollutant)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsInfinite":{"prefab":{"prefabName":"ItemGasFilterPollutantsInfinite","prefabHash":-503738105,"desc":"A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsL":{"prefab":{"prefabName":"ItemGasFilterPollutantsL","prefabHash":1959564765,"desc":"","name":"Heavy Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsM":{"prefab":{"prefabName":"ItemGasFilterPollutantsM","prefabHash":63677771,"desc":"","name":"Medium Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatiles":{"prefab":{"prefabName":"ItemGasFilterVolatiles","prefabHash":15011598,"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.","name":"Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesInfinite":{"prefab":{"prefabName":"ItemGasFilterVolatilesInfinite","prefabHash":-1916176068,"desc":"A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesL":{"prefab":{"prefabName":"ItemGasFilterVolatilesL","prefabHash":1255156286,"desc":"","name":"Heavy Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesM":{"prefab":{"prefabName":"ItemGasFilterVolatilesM","prefabHash":1037507240,"desc":"","name":"Medium Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWater":{"prefab":{"prefabName":"ItemGasFilterWater","prefabHash":-1993197973,"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)","name":"Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterInfinite":{"prefab":{"prefabName":"ItemGasFilterWaterInfinite","prefabHash":-1678456554,"desc":"A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterL":{"prefab":{"prefabName":"ItemGasFilterWaterL","prefabHash":2004969680,"desc":"","name":"Heavy Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterM":{"prefab":{"prefabName":"ItemGasFilterWaterM","prefabHash":8804422,"desc":"","name":"Medium Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100.0,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasSensor":{"prefab":{"prefabName":"ItemGasSensor","prefabHash":1717593480,"desc":"","name":"Kit (Gas Sensor)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemGasTankStorage":{"prefab":{"prefabName":"ItemGasTankStorage","prefabHash":-2113012215,"desc":"This kit produces a Kit (Canister Storage) for refilling a Canister.","name":"Kit (Canister Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemGlassSheets":{"prefab":{"prefabName":"ItemGlassSheets","prefabHash":1588896491,"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.","name":"Glass Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemGlasses":{"prefab":{"prefabName":"ItemGlasses","prefabHash":-1068925231,"desc":"","name":"Glasses"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Glasses","sortingClass":"Clothing"}},"ItemGoldIngot":{"prefab":{"prefabName":"ItemGoldIngot","prefabHash":226410516,"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. ","name":"Ingot (Gold)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Gold":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemGoldOre":{"prefab":{"prefabName":"ItemGoldOre","prefabHash":-1348105509,"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.","name":"Ore (Gold)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Gold":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemGrenade":{"prefab":{"prefabName":"ItemGrenade","prefabHash":1544275894,"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.","name":"Hand Grenade"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemHEMDroidRepairKit":{"prefab":{"prefabName":"ItemHEMDroidRepairKit","prefabHash":470636008,"desc":"Repairs damaged HEM-Droids to full health.","name":"HEMDroid Repair Kit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Food"}},"ItemHardBackpack":{"prefab":{"prefabName":"ItemHardBackpack","prefabHash":374891127,"desc":"This backpack can be useful when you are working inside and don't need to fly around.","name":"Hardsuit Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemHardJetpack":{"prefab":{"prefabName":"ItemHardJetpack","prefabHash":-412551656,"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.","name":"Hardsuit Jetpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemHardMiningBackPack":{"prefab":{"prefabName":"ItemHardMiningBackPack","prefabHash":900366130,"desc":"","name":"Hard Mining Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"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"}]},"ItemHardSuit":{"prefab":{"prefabName":"ItemHardSuit","prefabHash":-1758310454,"desc":"Connects to Logic Transmitter","name":"Hardsuit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Suit","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"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"}],"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"ItemHardsuitHelmet":{"prefab":{"prefabName":"ItemHardsuitHelmet","prefabHash":-84573099,"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.","name":"Hardsuit Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemHastelloyIngot":{"prefab":{"prefabName":"ItemHastelloyIngot","prefabHash":1579842814,"desc":"","name":"Ingot (Hastelloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Hastelloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemHat":{"prefab":{"prefabName":"ItemHat","prefabHash":299189339,"desc":"As the name suggests, this is a hat.","name":"Hat"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"}},"ItemHighVolumeGasCanisterEmpty":{"prefab":{"prefabName":"ItemHighVolumeGasCanisterEmpty","prefabHash":998653377,"desc":"","name":"High Volume Gas Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemHorticultureBelt":{"prefab":{"prefabName":"ItemHorticultureBelt","prefabHash":-1117581553,"desc":"","name":"Horticulture Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemHydroponicTray":{"prefab":{"prefabName":"ItemHydroponicTray","prefabHash":-1193543727,"desc":"This kits creates a Hydroponics Tray for growing various plants.","name":"Kit (Hydroponic Tray)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemIce":{"prefab":{"prefabName":"ItemIce","prefabHash":1217489948,"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.","name":"Ice (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemIgniter":{"prefab":{"prefabName":"ItemIgniter","prefabHash":890106742,"desc":"This kit creates an Kit (Igniter) unit.","name":"Kit (Igniter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemInconelIngot":{"prefab":{"prefabName":"ItemInconelIngot","prefabHash":-787796599,"desc":"","name":"Ingot (Inconel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Inconel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemInsulation":{"prefab":{"prefabName":"ItemInsulation","prefabHash":897176943,"desc":"Mysterious in the extreme, the function of this item is lost to the ages.","name":"Insulation"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Resources"}},"ItemIntegratedCircuit10":{"prefab":{"prefabName":"ItemIntegratedCircuit10","prefabHash":-744098481,"desc":"","name":"Integrated Circuit (IC10)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"ProgrammableChip","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"LineNumber":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"memory":{"memoryAccess":"ReadWrite","memorySize":512}},"ItemInvarIngot":{"prefab":{"prefabName":"ItemInvarIngot","prefabHash":-297990285,"desc":"","name":"Ingot (Invar)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Invar":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemIronFrames":{"prefab":{"prefabName":"ItemIronFrames","prefabHash":1225836666,"desc":"","name":"Iron Frames"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemIronIngot":{"prefab":{"prefabName":"ItemIronIngot","prefabHash":-1301215609,"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.","name":"Ingot (Iron)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Iron":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemIronOre":{"prefab":{"prefabName":"ItemIronOre","prefabHash":1758427767,"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.","name":"Ore (Iron)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Iron":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemIronSheets":{"prefab":{"prefabName":"ItemIronSheets","prefabHash":-487378546,"desc":"","name":"Iron Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemJetpackBasic":{"prefab":{"prefabName":"ItemJetpackBasic","prefabHash":1969189000,"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.","name":"Jetpack Basic"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemKitAIMeE":{"prefab":{"prefabName":"ItemKitAIMeE","prefabHash":496830914,"desc":"","name":"Kit (AIMeE)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAccessBridge":{"prefab":{"prefabName":"ItemKitAccessBridge","prefabHash":513258369,"desc":"","name":"Kit (Access Bridge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedComposter":{"prefab":{"prefabName":"ItemKitAdvancedComposter","prefabHash":-1431998347,"desc":"","name":"Kit (Advanced Composter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedFurnace":{"prefab":{"prefabName":"ItemKitAdvancedFurnace","prefabHash":-616758353,"desc":"","name":"Kit (Advanced Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedPackagingMachine":{"prefab":{"prefabName":"ItemKitAdvancedPackagingMachine","prefabHash":-598545233,"desc":"","name":"Kit (Advanced Packaging Machine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAirlock":{"prefab":{"prefabName":"ItemKitAirlock","prefabHash":964043875,"desc":"","name":"Kit (Airlock)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAirlockGate":{"prefab":{"prefabName":"ItemKitAirlockGate","prefabHash":682546947,"desc":"","name":"Kit (Hangar Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitArcFurnace":{"prefab":{"prefabName":"ItemKitArcFurnace","prefabHash":-98995857,"desc":"","name":"Kit (Arc Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAtmospherics":{"prefab":{"prefabName":"ItemKitAtmospherics","prefabHash":1222286371,"desc":"","name":"Kit (Atmospherics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutoMinerSmall":{"prefab":{"prefabName":"ItemKitAutoMinerSmall","prefabHash":1668815415,"desc":"","name":"Kit (Autominer Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutolathe":{"prefab":{"prefabName":"ItemKitAutolathe","prefabHash":-1753893214,"desc":"","name":"Kit (Autolathe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutomatedOven":{"prefab":{"prefabName":"ItemKitAutomatedOven","prefabHash":-1931958659,"desc":"","name":"Kit (Automated Oven)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBasket":{"prefab":{"prefabName":"ItemKitBasket","prefabHash":148305004,"desc":"","name":"Kit (Basket)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBattery":{"prefab":{"prefabName":"ItemKitBattery","prefabHash":1406656973,"desc":"","name":"Kit (Battery)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBatteryLarge":{"prefab":{"prefabName":"ItemKitBatteryLarge","prefabHash":-21225041,"desc":"","name":"Kit (Battery Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBeacon":{"prefab":{"prefabName":"ItemKitBeacon","prefabHash":249073136,"desc":"","name":"Kit (Beacon)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBeds":{"prefab":{"prefabName":"ItemKitBeds","prefabHash":-1241256797,"desc":"","name":"Kit (Beds)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBlastDoor":{"prefab":{"prefabName":"ItemKitBlastDoor","prefabHash":-1755116240,"desc":"","name":"Kit (Blast Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCentrifuge":{"prefab":{"prefabName":"ItemKitCentrifuge","prefabHash":578182956,"desc":"","name":"Kit (Centrifuge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChairs":{"prefab":{"prefabName":"ItemKitChairs","prefabHash":-1394008073,"desc":"","name":"Kit (Chairs)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChute":{"prefab":{"prefabName":"ItemKitChute","prefabHash":1025254665,"desc":"","name":"Kit (Basic Chutes)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChuteUmbilical":{"prefab":{"prefabName":"ItemKitChuteUmbilical","prefabHash":-876560854,"desc":"","name":"Kit (Chute Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCompositeCladding":{"prefab":{"prefabName":"ItemKitCompositeCladding","prefabHash":-1470820996,"desc":"","name":"Kit (Cladding)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCompositeFloorGrating":{"prefab":{"prefabName":"ItemKitCompositeFloorGrating","prefabHash":1182412869,"desc":"","name":"Kit (Floor Grating)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitComputer":{"prefab":{"prefabName":"ItemKitComputer","prefabHash":1990225489,"desc":"","name":"Kit (Computer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitConsole":{"prefab":{"prefabName":"ItemKitConsole","prefabHash":-1241851179,"desc":"","name":"Kit (Consoles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrate":{"prefab":{"prefabName":"ItemKitCrate","prefabHash":429365598,"desc":"","name":"Kit (Crate)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrateMkII":{"prefab":{"prefabName":"ItemKitCrateMkII","prefabHash":-1585956426,"desc":"","name":"Kit (Crate Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrateMount":{"prefab":{"prefabName":"ItemKitCrateMount","prefabHash":-551612946,"desc":"","name":"Kit (Container Mount)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCryoTube":{"prefab":{"prefabName":"ItemKitCryoTube","prefabHash":-545234195,"desc":"","name":"Kit (Cryo Tube)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDeepMiner":{"prefab":{"prefabName":"ItemKitDeepMiner","prefabHash":-1935075707,"desc":"","name":"Kit (Deep Miner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDockingPort":{"prefab":{"prefabName":"ItemKitDockingPort","prefabHash":77421200,"desc":"","name":"Kit (Docking Port)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDoor":{"prefab":{"prefabName":"ItemKitDoor","prefabHash":168615924,"desc":"","name":"Kit (Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDrinkingFountain":{"prefab":{"prefabName":"ItemKitDrinkingFountain","prefabHash":-1743663875,"desc":"","name":"Kit (Drinking Fountain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicCanister":{"prefab":{"prefabName":"ItemKitDynamicCanister","prefabHash":-1061945368,"desc":"","name":"Kit (Portable Gas Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicGasTankAdvanced":{"prefab":{"prefabName":"ItemKitDynamicGasTankAdvanced","prefabHash":1533501495,"desc":"","name":"Kit (Portable Gas Tank Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitDynamicGenerator":{"prefab":{"prefabName":"ItemKitDynamicGenerator","prefabHash":-732720413,"desc":"","name":"Kit (Portable Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicHydroponics":{"prefab":{"prefabName":"ItemKitDynamicHydroponics","prefabHash":-1861154222,"desc":"","name":"Kit (Portable Hydroponics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicLiquidCanister":{"prefab":{"prefabName":"ItemKitDynamicLiquidCanister","prefabHash":375541286,"desc":"","name":"Kit (Portable Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicMKIILiquidCanister":{"prefab":{"prefabName":"ItemKitDynamicMKIILiquidCanister","prefabHash":-638019974,"desc":"","name":"Kit (Portable Liquid Tank Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElectricUmbilical":{"prefab":{"prefabName":"ItemKitElectricUmbilical","prefabHash":1603046970,"desc":"","name":"Kit (Power Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElectronicsPrinter":{"prefab":{"prefabName":"ItemKitElectronicsPrinter","prefabHash":-1181922382,"desc":"","name":"Kit (Electronics Printer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElevator":{"prefab":{"prefabName":"ItemKitElevator","prefabHash":-945806652,"desc":"","name":"Kit (Elevator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineLarge":{"prefab":{"prefabName":"ItemKitEngineLarge","prefabHash":755302726,"desc":"","name":"Kit (Engine Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineMedium":{"prefab":{"prefabName":"ItemKitEngineMedium","prefabHash":1969312177,"desc":"","name":"Kit (Engine Medium)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineSmall":{"prefab":{"prefabName":"ItemKitEngineSmall","prefabHash":19645163,"desc":"","name":"Kit (Engine Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEvaporationChamber":{"prefab":{"prefabName":"ItemKitEvaporationChamber","prefabHash":1587787610,"desc":"","name":"Kit (Phase Change Device)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFlagODA":{"prefab":{"prefabName":"ItemKitFlagODA","prefabHash":1701764190,"desc":"","name":"Kit (ODA Flag)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitFridgeBig":{"prefab":{"prefabName":"ItemKitFridgeBig","prefabHash":-1168199498,"desc":"","name":"Kit (Fridge Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFridgeSmall":{"prefab":{"prefabName":"ItemKitFridgeSmall","prefabHash":1661226524,"desc":"","name":"Kit (Fridge Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFurnace":{"prefab":{"prefabName":"ItemKitFurnace","prefabHash":-806743925,"desc":"","name":"Kit (Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFurniture":{"prefab":{"prefabName":"ItemKitFurniture","prefabHash":1162905029,"desc":"","name":"Kit (Furniture)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFuselage":{"prefab":{"prefabName":"ItemKitFuselage","prefabHash":-366262681,"desc":"","name":"Kit (Fuselage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGasGenerator":{"prefab":{"prefabName":"ItemKitGasGenerator","prefabHash":377745425,"desc":"","name":"Kit (Gas Fuel Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGasUmbilical":{"prefab":{"prefabName":"ItemKitGasUmbilical","prefabHash":-1867280568,"desc":"","name":"Kit (Gas Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGovernedGasRocketEngine":{"prefab":{"prefabName":"ItemKitGovernedGasRocketEngine","prefabHash":206848766,"desc":"","name":"Kit (Pumped Gas Rocket Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGroundTelescope":{"prefab":{"prefabName":"ItemKitGroundTelescope","prefabHash":-2140672772,"desc":"","name":"Kit (Telescope)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGrowLight":{"prefab":{"prefabName":"ItemKitGrowLight","prefabHash":341030083,"desc":"","name":"Kit (Grow Light)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHarvie":{"prefab":{"prefabName":"ItemKitHarvie","prefabHash":-1022693454,"desc":"","name":"Kit (Harvie)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHeatExchanger":{"prefab":{"prefabName":"ItemKitHeatExchanger","prefabHash":-1710540039,"desc":"","name":"Kit Heat Exchanger"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHorizontalAutoMiner":{"prefab":{"prefabName":"ItemKitHorizontalAutoMiner","prefabHash":844391171,"desc":"","name":"Kit (OGRE)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydraulicPipeBender":{"prefab":{"prefabName":"ItemKitHydraulicPipeBender","prefabHash":-2098556089,"desc":"","name":"Kit (Hydraulic Pipe Bender)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydroponicAutomated":{"prefab":{"prefabName":"ItemKitHydroponicAutomated","prefabHash":-927931558,"desc":"","name":"Kit (Automated Hydroponics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydroponicStation":{"prefab":{"prefabName":"ItemKitHydroponicStation","prefabHash":2057179799,"desc":"","name":"Kit (Hydroponic Station)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitIceCrusher":{"prefab":{"prefabName":"ItemKitIceCrusher","prefabHash":288111533,"desc":"","name":"Kit (Ice Crusher)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedLiquidPipe":{"prefab":{"prefabName":"ItemKitInsulatedLiquidPipe","prefabHash":2067655311,"desc":"","name":"Kit (Insulated Liquid Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipe":{"prefab":{"prefabName":"ItemKitInsulatedPipe","prefabHash":452636699,"desc":"","name":"Kit (Insulated Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipeUtility":{"prefab":{"prefabName":"ItemKitInsulatedPipeUtility","prefabHash":-27284803,"desc":"","name":"Kit (Insulated Pipe Utility Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipeUtilityLiquid":{"prefab":{"prefabName":"ItemKitInsulatedPipeUtilityLiquid","prefabHash":-1831558953,"desc":"","name":"Kit (Insulated Pipe Utility Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInteriorDoors":{"prefab":{"prefabName":"ItemKitInteriorDoors","prefabHash":1935945891,"desc":"","name":"Kit (Interior Doors)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLadder":{"prefab":{"prefabName":"ItemKitLadder","prefabHash":489494578,"desc":"","name":"Kit (Ladder)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadAtmos":{"prefab":{"prefabName":"ItemKitLandingPadAtmos","prefabHash":1817007843,"desc":"","name":"Kit (Landing Pad Atmospherics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadBasic":{"prefab":{"prefabName":"ItemKitLandingPadBasic","prefabHash":293581318,"desc":"","name":"Kit (Landing Pad Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadWaypoint":{"prefab":{"prefabName":"ItemKitLandingPadWaypoint","prefabHash":-1267511065,"desc":"","name":"Kit (Landing Pad Runway)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeDirectHeatExchanger":{"prefab":{"prefabName":"ItemKitLargeDirectHeatExchanger","prefabHash":450164077,"desc":"","name":"Kit (Large Direct Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeExtendableRadiator":{"prefab":{"prefabName":"ItemKitLargeExtendableRadiator","prefabHash":847430620,"desc":"","name":"Kit (Large Extendable Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeSatelliteDish":{"prefab":{"prefabName":"ItemKitLargeSatelliteDish","prefabHash":-2039971217,"desc":"","name":"Kit (Large Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLaunchMount":{"prefab":{"prefabName":"ItemKitLaunchMount","prefabHash":-1854167549,"desc":"","name":"Kit (Launch Mount)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLaunchTower":{"prefab":{"prefabName":"ItemKitLaunchTower","prefabHash":-174523552,"desc":"","name":"Kit (Rocket Launch Tower)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidRegulator":{"prefab":{"prefabName":"ItemKitLiquidRegulator","prefabHash":1951126161,"desc":"","name":"Kit (Liquid Regulator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTank":{"prefab":{"prefabName":"ItemKitLiquidTank","prefabHash":-799849305,"desc":"","name":"Kit (Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTankInsulated":{"prefab":{"prefabName":"ItemKitLiquidTankInsulated","prefabHash":617773453,"desc":"","name":"Kit (Insulated Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTurboVolumePump":{"prefab":{"prefabName":"ItemKitLiquidTurboVolumePump","prefabHash":-1805020897,"desc":"","name":"Kit (Turbo Volume Pump - Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidUmbilical":{"prefab":{"prefabName":"ItemKitLiquidUmbilical","prefabHash":1571996765,"desc":"","name":"Kit (Liquid Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLocker":{"prefab":{"prefabName":"ItemKitLocker","prefabHash":882301399,"desc":"","name":"Kit (Locker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicCircuit":{"prefab":{"prefabName":"ItemKitLogicCircuit","prefabHash":1512322581,"desc":"","name":"Kit (IC Housing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicInputOutput":{"prefab":{"prefabName":"ItemKitLogicInputOutput","prefabHash":1997293610,"desc":"","name":"Kit (Logic I/O)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicMemory":{"prefab":{"prefabName":"ItemKitLogicMemory","prefabHash":-2098214189,"desc":"","name":"Kit (Logic Memory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicProcessor":{"prefab":{"prefabName":"ItemKitLogicProcessor","prefabHash":220644373,"desc":"","name":"Kit (Logic Processor)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicSwitch":{"prefab":{"prefabName":"ItemKitLogicSwitch","prefabHash":124499454,"desc":"","name":"Kit (Logic Switch)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicTransmitter":{"prefab":{"prefabName":"ItemKitLogicTransmitter","prefabHash":1005397063,"desc":"","name":"Kit (Logic Transmitter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitMotherShipCore":{"prefab":{"prefabName":"ItemKitMotherShipCore","prefabHash":-344968335,"desc":"","name":"Kit (Mothership)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitMusicMachines":{"prefab":{"prefabName":"ItemKitMusicMachines","prefabHash":-2038889137,"desc":"","name":"Kit (Music Machines)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPassiveLargeRadiatorGas":{"prefab":{"prefabName":"ItemKitPassiveLargeRadiatorGas","prefabHash":-1752768283,"desc":"","name":"Kit (Medium Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitPassiveLargeRadiatorLiquid":{"prefab":{"prefabName":"ItemKitPassiveLargeRadiatorLiquid","prefabHash":1453961898,"desc":"","name":"Kit (Medium Radiator Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPassthroughHeatExchanger":{"prefab":{"prefabName":"ItemKitPassthroughHeatExchanger","prefabHash":636112787,"desc":"","name":"Kit (CounterFlow Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPictureFrame":{"prefab":{"prefabName":"ItemKitPictureFrame","prefabHash":-2062364768,"desc":"","name":"Kit Picture Frame"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipe":{"prefab":{"prefabName":"ItemKitPipe","prefabHash":-1619793705,"desc":"","name":"Kit (Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeLiquid":{"prefab":{"prefabName":"ItemKitPipeLiquid","prefabHash":-1166461357,"desc":"","name":"Kit (Liquid Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeOrgan":{"prefab":{"prefabName":"ItemKitPipeOrgan","prefabHash":-827125300,"desc":"","name":"Kit (Pipe Organ)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeRadiator":{"prefab":{"prefabName":"ItemKitPipeRadiator","prefabHash":920411066,"desc":"","name":"Kit (Pipe Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitPipeRadiatorLiquid":{"prefab":{"prefabName":"ItemKitPipeRadiatorLiquid","prefabHash":-1697302609,"desc":"","name":"Kit (Pipe Radiator Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitPipeUtility":{"prefab":{"prefabName":"ItemKitPipeUtility","prefabHash":1934508338,"desc":"","name":"Kit (Pipe Utility Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeUtilityLiquid":{"prefab":{"prefabName":"ItemKitPipeUtilityLiquid","prefabHash":595478589,"desc":"","name":"Kit (Pipe Utility Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPlanter":{"prefab":{"prefabName":"ItemKitPlanter","prefabHash":119096484,"desc":"","name":"Kit (Planter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPortablesConnector":{"prefab":{"prefabName":"ItemKitPortablesConnector","prefabHash":1041148999,"desc":"","name":"Kit (Portables Connector)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPowerTransmitter":{"prefab":{"prefabName":"ItemKitPowerTransmitter","prefabHash":291368213,"desc":"","name":"Kit (Power Transmitter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPowerTransmitterOmni":{"prefab":{"prefabName":"ItemKitPowerTransmitterOmni","prefabHash":-831211676,"desc":"","name":"Kit (Power Transmitter Omni)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPoweredVent":{"prefab":{"prefabName":"ItemKitPoweredVent","prefabHash":2015439334,"desc":"","name":"Kit (Powered Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressureFedGasEngine":{"prefab":{"prefabName":"ItemKitPressureFedGasEngine","prefabHash":-121514007,"desc":"","name":"Kit (Pressure Fed Gas Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressureFedLiquidEngine":{"prefab":{"prefabName":"ItemKitPressureFedLiquidEngine","prefabHash":-99091572,"desc":"","name":"Kit (Pressure Fed Liquid Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressurePlate":{"prefab":{"prefabName":"ItemKitPressurePlate","prefabHash":123504691,"desc":"","name":"Kit (Trigger Plate)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPumpedLiquidEngine":{"prefab":{"prefabName":"ItemKitPumpedLiquidEngine","prefabHash":1921918951,"desc":"","name":"Kit (Pumped Liquid Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRailing":{"prefab":{"prefabName":"ItemKitRailing","prefabHash":750176282,"desc":"","name":"Kit (Railing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRecycler":{"prefab":{"prefabName":"ItemKitRecycler","prefabHash":849148192,"desc":"","name":"Kit (Recycler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRegulator":{"prefab":{"prefabName":"ItemKitRegulator","prefabHash":1181371795,"desc":"","name":"Kit (Pressure Regulator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitReinforcedWindows":{"prefab":{"prefabName":"ItemKitReinforcedWindows","prefabHash":1459985302,"desc":"","name":"Kit (Reinforced Windows)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitResearchMachine":{"prefab":{"prefabName":"ItemKitResearchMachine","prefabHash":724776762,"desc":"","name":"Kit Research Machine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitRespawnPointWallMounted":{"prefab":{"prefabName":"ItemKitRespawnPointWallMounted","prefabHash":1574688481,"desc":"","name":"Kit (Respawn)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketAvionics":{"prefab":{"prefabName":"ItemKitRocketAvionics","prefabHash":1396305045,"desc":"","name":"Kit (Avionics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketBattery":{"prefab":{"prefabName":"ItemKitRocketBattery","prefabHash":-314072139,"desc":"","name":"Kit (Rocket Battery)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCargoStorage":{"prefab":{"prefabName":"ItemKitRocketCargoStorage","prefabHash":479850239,"desc":"","name":"Kit (Rocket Cargo Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCelestialTracker":{"prefab":{"prefabName":"ItemKitRocketCelestialTracker","prefabHash":-303008602,"desc":"","name":"Kit (Rocket Celestial Tracker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCircuitHousing":{"prefab":{"prefabName":"ItemKitRocketCircuitHousing","prefabHash":721251202,"desc":"","name":"Kit (Rocket Circuit Housing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketDatalink":{"prefab":{"prefabName":"ItemKitRocketDatalink","prefabHash":-1256996603,"desc":"","name":"Kit (Rocket Datalink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketGasFuelTank":{"prefab":{"prefabName":"ItemKitRocketGasFuelTank","prefabHash":-1629347579,"desc":"","name":"Kit (Rocket Gas Fuel Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketLiquidFuelTank":{"prefab":{"prefabName":"ItemKitRocketLiquidFuelTank","prefabHash":2032027950,"desc":"","name":"Kit (Rocket Liquid Fuel Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketManufactory":{"prefab":{"prefabName":"ItemKitRocketManufactory","prefabHash":-636127860,"desc":"","name":"Kit (Rocket Manufactory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketMiner":{"prefab":{"prefabName":"ItemKitRocketMiner","prefabHash":-867969909,"desc":"","name":"Kit (Rocket Miner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketScanner":{"prefab":{"prefabName":"ItemKitRocketScanner","prefabHash":1753647154,"desc":"","name":"Kit (Rocket Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketTransformerSmall":{"prefab":{"prefabName":"ItemKitRocketTransformerSmall","prefabHash":-932335800,"desc":"","name":"Kit (Transformer Small (Rocket))"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRoverFrame":{"prefab":{"prefabName":"ItemKitRoverFrame","prefabHash":1827215803,"desc":"","name":"Kit (Rover Frame)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRoverMKI":{"prefab":{"prefabName":"ItemKitRoverMKI","prefabHash":197243872,"desc":"","name":"Kit (Rover Mk I)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSDBHopper":{"prefab":{"prefabName":"ItemKitSDBHopper","prefabHash":323957548,"desc":"","name":"Kit (SDB Hopper)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSatelliteDish":{"prefab":{"prefabName":"ItemKitSatelliteDish","prefabHash":178422810,"desc":"","name":"Kit (Medium Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSecurityPrinter":{"prefab":{"prefabName":"ItemKitSecurityPrinter","prefabHash":578078533,"desc":"","name":"Kit (Security Printer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSensor":{"prefab":{"prefabName":"ItemKitSensor","prefabHash":-1776897113,"desc":"","name":"Kit (Sensors)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitShower":{"prefab":{"prefabName":"ItemKitShower","prefabHash":735858725,"desc":"","name":"Kit (Shower)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSign":{"prefab":{"prefabName":"ItemKitSign","prefabHash":529996327,"desc":"","name":"Kit (Sign)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSleeper":{"prefab":{"prefabName":"ItemKitSleeper","prefabHash":326752036,"desc":"","name":"Kit (Sleeper)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSmallDirectHeatExchanger":{"prefab":{"prefabName":"ItemKitSmallDirectHeatExchanger","prefabHash":-1332682164,"desc":"","name":"Kit (Small Direct Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitSmallSatelliteDish":{"prefab":{"prefabName":"ItemKitSmallSatelliteDish","prefabHash":1960952220,"desc":"","name":"Kit (Small Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolarPanel":{"prefab":{"prefabName":"ItemKitSolarPanel","prefabHash":-1924492105,"desc":"","name":"Kit (Solar Panel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolarPanelBasic":{"prefab":{"prefabName":"ItemKitSolarPanelBasic","prefabHash":844961456,"desc":"","name":"Kit (Solar Panel Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitSolarPanelBasicReinforced":{"prefab":{"prefabName":"ItemKitSolarPanelBasicReinforced","prefabHash":-528695432,"desc":"","name":"Kit (Solar Panel Basic Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitSolarPanelReinforced":{"prefab":{"prefabName":"ItemKitSolarPanelReinforced","prefabHash":-364868685,"desc":"","name":"Kit (Solar Panel Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolidGenerator":{"prefab":{"prefabName":"ItemKitSolidGenerator","prefabHash":1293995736,"desc":"","name":"Kit (Solid Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSorter":{"prefab":{"prefabName":"ItemKitSorter","prefabHash":969522478,"desc":"","name":"Kit (Sorter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSpeaker":{"prefab":{"prefabName":"ItemKitSpeaker","prefabHash":-126038526,"desc":"","name":"Kit (Speaker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStacker":{"prefab":{"prefabName":"ItemKitStacker","prefabHash":1013244511,"desc":"","name":"Kit (Stacker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStairs":{"prefab":{"prefabName":"ItemKitStairs","prefabHash":170878959,"desc":"","name":"Kit (Stairs)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStairwell":{"prefab":{"prefabName":"ItemKitStairwell","prefabHash":-1868555784,"desc":"","name":"Kit (Stairwell)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStandardChute":{"prefab":{"prefabName":"ItemKitStandardChute","prefabHash":2133035682,"desc":"","name":"Kit (Powered Chutes)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStirlingEngine":{"prefab":{"prefabName":"ItemKitStirlingEngine","prefabHash":-1821571150,"desc":"","name":"Kit (Stirling Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSuitStorage":{"prefab":{"prefabName":"ItemKitSuitStorage","prefabHash":1088892825,"desc":"","name":"Kit (Suit Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTables":{"prefab":{"prefabName":"ItemKitTables","prefabHash":-1361598922,"desc":"","name":"Kit (Tables)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTank":{"prefab":{"prefabName":"ItemKitTank","prefabHash":771439840,"desc":"","name":"Kit (Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTankInsulated":{"prefab":{"prefabName":"ItemKitTankInsulated","prefabHash":1021053608,"desc":"","name":"Kit (Tank Insulated)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitToolManufactory":{"prefab":{"prefabName":"ItemKitToolManufactory","prefabHash":529137748,"desc":"","name":"Kit (Tool Manufactory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTransformer":{"prefab":{"prefabName":"ItemKitTransformer","prefabHash":-453039435,"desc":"","name":"Kit (Transformer Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTransformerSmall":{"prefab":{"prefabName":"ItemKitTransformerSmall","prefabHash":665194284,"desc":"","name":"Kit (Transformer Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTurbineGenerator":{"prefab":{"prefabName":"ItemKitTurbineGenerator","prefabHash":-1590715731,"desc":"","name":"Kit (Turbine Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTurboVolumePump":{"prefab":{"prefabName":"ItemKitTurboVolumePump","prefabHash":-1248429712,"desc":"","name":"Kit (Turbo Volume Pump - Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitUprightWindTurbine":{"prefab":{"prefabName":"ItemKitUprightWindTurbine","prefabHash":-1798044015,"desc":"","name":"Kit (Upright Wind Turbine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitVendingMachine":{"prefab":{"prefabName":"ItemKitVendingMachine","prefabHash":-2038384332,"desc":"","name":"Kit (Vending Machine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitVendingMachineRefrigerated":{"prefab":{"prefabName":"ItemKitVendingMachineRefrigerated","prefabHash":-1867508561,"desc":"","name":"Kit (Vending Machine Refrigerated)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWall":{"prefab":{"prefabName":"ItemKitWall","prefabHash":-1826855889,"desc":"","name":"Kit (Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallArch":{"prefab":{"prefabName":"ItemKitWallArch","prefabHash":1625214531,"desc":"","name":"Kit (Arched Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallFlat":{"prefab":{"prefabName":"ItemKitWallFlat","prefabHash":-846838195,"desc":"","name":"Kit (Flat Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallGeometry":{"prefab":{"prefabName":"ItemKitWallGeometry","prefabHash":-784733231,"desc":"","name":"Kit (Geometric Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallIron":{"prefab":{"prefabName":"ItemKitWallIron","prefabHash":-524546923,"desc":"","name":"Kit (Iron Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallPadded":{"prefab":{"prefabName":"ItemKitWallPadded","prefabHash":-821868990,"desc":"","name":"Kit (Padded Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWaterBottleFiller":{"prefab":{"prefabName":"ItemKitWaterBottleFiller","prefabHash":159886536,"desc":"","name":"Kit (Water Bottle Filler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWaterPurifier":{"prefab":{"prefabName":"ItemKitWaterPurifier","prefabHash":611181283,"desc":"","name":"Kit (Water Purifier)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWeatherStation":{"prefab":{"prefabName":"ItemKitWeatherStation","prefabHash":337505889,"desc":"","name":"Kit (Weather Station)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemKitWindTurbine":{"prefab":{"prefabName":"ItemKitWindTurbine","prefabHash":-868916503,"desc":"","name":"Kit (Wind Turbine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWindowShutter":{"prefab":{"prefabName":"ItemKitWindowShutter","prefabHash":1779979754,"desc":"","name":"Kit (Window Shutter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemLabeller":{"prefab":{"prefabName":"ItemLabeller","prefabHash":-743968726,"desc":"A labeller lets you set names and values on a variety of devices and structures, including Console and Logic.","name":"Labeller"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemLaptop":{"prefab":{"prefabName":"ItemLaptop","prefabHash":141535121,"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","name":"Laptop"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","PositionX":"Read","PositionY":"Read","PositionZ":"Read","Power":"Read","PressureExternal":"Read","ReferenceId":"Read","TemperatureExternal":"Read"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"},{"name":"Battery","typ":"Battery"},{"name":"Motherboard","typ":"Motherboard"}]},"ItemLeadIngot":{"prefab":{"prefabName":"ItemLeadIngot","prefabHash":2134647745,"desc":"","name":"Ingot (Lead)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Lead":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemLeadOre":{"prefab":{"prefabName":"ItemLeadOre","prefabHash":-190236170,"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.","name":"Ore (Lead)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Lead":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemLightSword":{"prefab":{"prefabName":"ItemLightSword","prefabHash":1949076595,"desc":"A charming, if useless, pseudo-weapon. (Creative only.)","name":"Light Sword"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidCanisterEmpty":{"prefab":{"prefabName":"ItemLiquidCanisterEmpty","prefabHash":-185207387,"desc":"","name":"Liquid Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemLiquidCanisterSmart":{"prefab":{"prefabName":"ItemLiquidCanisterSmart","prefabHash":777684475,"desc":"0.Mode0\n1.Mode1","name":"Liquid Canister (Smart)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemLiquidDrain":{"prefab":{"prefabName":"ItemLiquidDrain","prefabHash":2036225202,"desc":"","name":"Kit (Liquid Drain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidPipeAnalyzer":{"prefab":{"prefabName":"ItemLiquidPipeAnalyzer","prefabHash":226055671,"desc":"","name":"Kit (Liquid Pipe Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidPipeHeater":{"prefab":{"prefabName":"ItemLiquidPipeHeater","prefabHash":-248475032,"desc":"Creates a Pipe Heater (Liquid).","name":"Pipe Heater Kit (Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidPipeValve":{"prefab":{"prefabName":"ItemLiquidPipeValve","prefabHash":-2126113312,"desc":"This kit creates a Liquid Valve.","name":"Kit (Liquid Pipe Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidPipeVolumePump":{"prefab":{"prefabName":"ItemLiquidPipeVolumePump","prefabHash":-2106280569,"desc":"","name":"Kit (Liquid Volume Pump)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidTankStorage":{"prefab":{"prefabName":"ItemLiquidTankStorage","prefabHash":2037427578,"desc":"This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister.","name":"Kit (Liquid Canister Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemMKIIAngleGrinder":{"prefab":{"prefabName":"ItemMKIIAngleGrinder","prefabHash":240174650,"desc":"Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure.","name":"Mk II Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIArcWelder":{"prefab":{"prefabName":"ItemMKIIArcWelder","prefabHash":-2061979347,"desc":"","name":"Mk II Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIICrowbar":{"prefab":{"prefabName":"ItemMKIICrowbar","prefabHash":1440775434,"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.","name":"Mk II Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIDrill":{"prefab":{"prefabName":"ItemMKIIDrill","prefabHash":324791548,"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.","name":"Mk II Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIDuctTape":{"prefab":{"prefabName":"ItemMKIIDuctTape","prefabHash":388774906,"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.","name":"Mk II Duct Tape"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIMiningDrill":{"prefab":{"prefabName":"ItemMKIIMiningDrill","prefabHash":-1875271296,"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.","name":"Mk II Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIScrewdriver":{"prefab":{"prefabName":"ItemMKIIScrewdriver","prefabHash":-2015613246,"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.","name":"Mk II Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIWireCutters":{"prefab":{"prefabName":"ItemMKIIWireCutters","prefabHash":-178893251,"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.","name":"Mk II Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIWrench":{"prefab":{"prefabName":"ItemMKIIWrench","prefabHash":1862001680,"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.","name":"Mk II Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMarineBodyArmor":{"prefab":{"prefabName":"ItemMarineBodyArmor","prefabHash":1399098998,"desc":"","name":"Marine Armor"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Suit","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMarineHelmet":{"prefab":{"prefabName":"ItemMarineHelmet","prefabHash":1073631646,"desc":"","name":"Marine Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMilk":{"prefab":{"prefabName":"ItemMilk","prefabHash":1327248310,"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.","name":"Milk"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"Milk":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemMiningBackPack":{"prefab":{"prefabName":"ItemMiningBackPack","prefabHash":-1650383245,"desc":"","name":"Mining Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"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"}]},"ItemMiningBelt":{"prefab":{"prefabName":"ItemMiningBelt","prefabHash":-676435305,"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.","name":"Mining Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemMiningBeltMKII":{"prefab":{"prefabName":"ItemMiningBeltMKII","prefabHash":1470787934,"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. ","name":"Mining Belt MK II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"}]},"ItemMiningCharge":{"prefab":{"prefabName":"ItemMiningCharge","prefabHash":15829510,"desc":"A low cost, high yield explosive with a 10 second timer.","name":"Mining Charge"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemMiningDrill":{"prefab":{"prefabName":"ItemMiningDrill","prefabHash":1055173191,"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.'","name":"Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillHeavy":{"prefab":{"prefabName":"ItemMiningDrillHeavy","prefabHash":-1663349918,"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.","name":"Mining Drill (Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillPneumatic":{"prefab":{"prefabName":"ItemMiningDrillPneumatic","prefabHash":1258187304,"desc":"0.Default\n1.Flatten","name":"Pneumatic Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemMkIIToolbelt":{"prefab":{"prefabName":"ItemMkIIToolbelt","prefabHash":1467558064,"desc":"A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy.","name":"Tool Belt MK II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"Tool","typ":"Tool"},{"name":"Tool","typ":"Tool"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMuffin":{"prefab":{"prefabName":"ItemMuffin","prefabHash":-1864982322,"desc":"A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin.","name":"Muffin"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemMushroom":{"prefab":{"prefabName":"ItemMushroom","prefabHash":2044798572,"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.","name":"Mushroom"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Mushroom":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemNVG":{"prefab":{"prefabName":"ItemNVG","prefabHash":982514123,"desc":"","name":"Night Vision Goggles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Glasses","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemNickelIngot":{"prefab":{"prefabName":"ItemNickelIngot","prefabHash":-1406385572,"desc":"","name":"Ingot (Nickel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Nickel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemNickelOre":{"prefab":{"prefabName":"ItemNickelOre","prefabHash":1830218956,"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.","name":"Ore (Nickel)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Nickel":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemNitrice":{"prefab":{"prefabName":"ItemNitrice","prefabHash":-1499471529,"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.","name":"Ice (Nitrice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemOxite":{"prefab":{"prefabName":"ItemOxite","prefabHash":-1805394113,"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.","name":"Ice (Oxite)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPassiveVent":{"prefab":{"prefabName":"ItemPassiveVent","prefabHash":238631271,"desc":"This kit creates a Passive Vent among other variants.","name":"Passive Vent"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPassiveVentInsulated":{"prefab":{"prefabName":"ItemPassiveVentInsulated","prefabHash":-1397583760,"desc":"","name":"Kit (Insulated Passive Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPeaceLily":{"prefab":{"prefabName":"ItemPeaceLily","prefabHash":2042955224,"desc":"A fetching lily with greater resistance to cold temperatures.","name":"Peace Lily"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPickaxe":{"prefab":{"prefabName":"ItemPickaxe","prefabHash":-913649823,"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.","name":"Pickaxe"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemPillHeal":{"prefab":{"prefabName":"ItemPillHeal","prefabHash":1118069417,"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.","name":"Pill (Medical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Food"}},"ItemPillStun":{"prefab":{"prefabName":"ItemPillStun","prefabHash":418958601,"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.","name":"Pill (Paralysis)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Food"}},"ItemPipeAnalyizer":{"prefab":{"prefabName":"ItemPipeAnalyizer","prefabHash":-767597887,"desc":"This kit creates a Pipe Analyzer.","name":"Kit (Pipe Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeCowl":{"prefab":{"prefabName":"ItemPipeCowl","prefabHash":-38898376,"desc":"This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres.","name":"Pipe Cowl"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeDigitalValve":{"prefab":{"prefabName":"ItemPipeDigitalValve","prefabHash":-1532448832,"desc":"This kit creates a Digital Valve.","name":"Kit (Digital Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeGasMixer":{"prefab":{"prefabName":"ItemPipeGasMixer","prefabHash":-1134459463,"desc":"This kit creates a Gas Mixer.","name":"Kit (Gas Mixer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeHeater":{"prefab":{"prefabName":"ItemPipeHeater","prefabHash":-1751627006,"desc":"Creates a Pipe Heater (Gas).","name":"Pipe Heater Kit (Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemPipeIgniter":{"prefab":{"prefabName":"ItemPipeIgniter","prefabHash":1366030599,"desc":"","name":"Kit (Pipe Igniter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeLabel":{"prefab":{"prefabName":"ItemPipeLabel","prefabHash":391769637,"desc":"This kit creates a Pipe Label.","name":"Kit (Pipe Label)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeLiquidRadiator":{"prefab":{"prefabName":"ItemPipeLiquidRadiator","prefabHash":-906521320,"desc":"This kit creates a Liquid Pipe Convection Radiator.","name":"Kit (Liquid Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeMeter":{"prefab":{"prefabName":"ItemPipeMeter","prefabHash":1207939683,"desc":"This kit creates a Pipe Meter.","name":"Kit (Pipe Meter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeRadiator":{"prefab":{"prefabName":"ItemPipeRadiator","prefabHash":-1796655088,"desc":"This kit creates a Pipe Convection Radiator.","name":"Kit (Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeValve":{"prefab":{"prefabName":"ItemPipeValve","prefabHash":799323450,"desc":"This kit creates a Valve.","name":"Kit (Pipe Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemPipeVolumePump":{"prefab":{"prefabName":"ItemPipeVolumePump","prefabHash":-1766301997,"desc":"This kit creates a Volume Pump.","name":"Kit (Volume Pump)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPlantEndothermic_Creative":{"prefab":{"prefabName":"ItemPlantEndothermic_Creative","prefabHash":-1159179557,"desc":"","name":"Endothermic Plant Creative"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantEndothermic_Genepool1":{"prefab":{"prefabName":"ItemPlantEndothermic_Genepool1","prefabHash":851290561,"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.","name":"Winterspawn (Alpha variant)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantEndothermic_Genepool2":{"prefab":{"prefabName":"ItemPlantEndothermic_Genepool2","prefabHash":-1414203269,"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.","name":"Winterspawn (Beta variant)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantSampler":{"prefab":{"prefabName":"ItemPlantSampler","prefabHash":173023800,"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.","name":"Plant Sampler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemPlantSwitchGrass":{"prefab":{"prefabName":"ItemPlantSwitchGrass","prefabHash":-532672323,"desc":"","name":"Switch Grass"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Default"}},"ItemPlantThermogenic_Creative":{"prefab":{"prefabName":"ItemPlantThermogenic_Creative","prefabHash":-1208890208,"desc":"","name":"Thermogenic Plant Creative"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantThermogenic_Genepool1":{"prefab":{"prefabName":"ItemPlantThermogenic_Genepool1","prefabHash":-177792789,"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.","name":"Hades Flower (Alpha strain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantThermogenic_Genepool2":{"prefab":{"prefabName":"ItemPlantThermogenic_Genepool2","prefabHash":1819167057,"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.","name":"Hades Flower (Beta strain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlasticSheets":{"prefab":{"prefabName":"ItemPlasticSheets","prefabHash":662053345,"desc":"","name":"Plastic Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemPotato":{"prefab":{"prefabName":"ItemPotato","prefabHash":1929046963,"desc":" Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies.","name":"Potato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Potato":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemPotatoBaked":{"prefab":{"prefabName":"ItemPotatoBaked","prefabHash":-2111886401,"desc":"","name":"Baked Potato"},"item":{"consumable":true,"ingredient":true,"maxQuantity":1.0,"reagents":{"Potato":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemPowerConnector":{"prefab":{"prefabName":"ItemPowerConnector","prefabHash":839924019,"desc":"This kit creates a Power Connector.","name":"Kit (Power Connector)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemPumpkin":{"prefab":{"prefabName":"ItemPumpkin","prefabHash":1277828144,"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.","name":"Pumpkin"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Pumpkin":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemPumpkinPie":{"prefab":{"prefabName":"ItemPumpkinPie","prefabHash":62768076,"desc":"","name":"Pumpkin Pie"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemPumpkinSoup":{"prefab":{"prefabName":"ItemPumpkinSoup","prefabHash":1277979876,"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","name":"Pumpkin Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemPureIce":{"prefab":{"prefabName":"ItemPureIce","prefabHash":-1616308158,"desc":"A frozen chunk of pure Water","name":"Pure Ice Water"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceCarbonDioxide":{"prefab":{"prefabName":"ItemPureIceCarbonDioxide","prefabHash":-1251009404,"desc":"A frozen chunk of pure Carbon Dioxide","name":"Pure Ice Carbon Dioxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceHydrogen":{"prefab":{"prefabName":"ItemPureIceHydrogen","prefabHash":944530361,"desc":"A frozen chunk of pure Hydrogen","name":"Pure Ice Hydrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidCarbonDioxide":{"prefab":{"prefabName":"ItemPureIceLiquidCarbonDioxide","prefabHash":-1715945725,"desc":"A frozen chunk of pure Liquid Carbon Dioxide","name":"Pure Ice Liquid Carbon Dioxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidHydrogen":{"prefab":{"prefabName":"ItemPureIceLiquidHydrogen","prefabHash":-1044933269,"desc":"A frozen chunk of pure Liquid Hydrogen","name":"Pure Ice Liquid Hydrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidNitrogen":{"prefab":{"prefabName":"ItemPureIceLiquidNitrogen","prefabHash":1674576569,"desc":"A frozen chunk of pure Liquid Nitrogen","name":"Pure Ice Liquid Nitrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidNitrous":{"prefab":{"prefabName":"ItemPureIceLiquidNitrous","prefabHash":1428477399,"desc":"A frozen chunk of pure Liquid Nitrous Oxide","name":"Pure Ice Liquid Nitrous"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidOxygen":{"prefab":{"prefabName":"ItemPureIceLiquidOxygen","prefabHash":541621589,"desc":"A frozen chunk of pure Liquid Oxygen","name":"Pure Ice Liquid Oxygen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidPollutant":{"prefab":{"prefabName":"ItemPureIceLiquidPollutant","prefabHash":-1748926678,"desc":"A frozen chunk of pure Liquid Pollutant","name":"Pure Ice Liquid Pollutant"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidVolatiles":{"prefab":{"prefabName":"ItemPureIceLiquidVolatiles","prefabHash":-1306628937,"desc":"A frozen chunk of pure Liquid Volatiles","name":"Pure Ice Liquid Volatiles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceNitrogen":{"prefab":{"prefabName":"ItemPureIceNitrogen","prefabHash":-1708395413,"desc":"A frozen chunk of pure Nitrogen","name":"Pure Ice Nitrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceNitrous":{"prefab":{"prefabName":"ItemPureIceNitrous","prefabHash":386754635,"desc":"A frozen chunk of pure Nitrous Oxide","name":"Pure Ice NitrousOxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceOxygen":{"prefab":{"prefabName":"ItemPureIceOxygen","prefabHash":-1150448260,"desc":"A frozen chunk of pure Oxygen","name":"Pure Ice Oxygen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIcePollutant":{"prefab":{"prefabName":"ItemPureIcePollutant","prefabHash":-1755356,"desc":"A frozen chunk of pure Pollutant","name":"Pure Ice Pollutant"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIcePollutedWater":{"prefab":{"prefabName":"ItemPureIcePollutedWater","prefabHash":-2073202179,"desc":"A frozen chunk of Polluted Water","name":"Pure Ice Polluted Water"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceSteam":{"prefab":{"prefabName":"ItemPureIceSteam","prefabHash":-874791066,"desc":"A frozen chunk of pure Steam","name":"Pure Ice Steam"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceVolatiles":{"prefab":{"prefabName":"ItemPureIceVolatiles","prefabHash":-633723719,"desc":"A frozen chunk of pure Volatiles","name":"Pure Ice Volatiles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemRTG":{"prefab":{"prefabName":"ItemRTG","prefabHash":495305053,"desc":"This kit creates that miracle of modern science, a Kit (Creative RTG).","name":"Kit (Creative RTG)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemRTGSurvival":{"prefab":{"prefabName":"ItemRTGSurvival","prefabHash":1817645803,"desc":"This kit creates a Kit (RTG).","name":"Kit (RTG)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"ItemReagentMix":{"prefab":{"prefabName":"ItemReagentMix","prefabHash":-1641500434,"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.","name":"Reagent Mix"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ores"}},"ItemRemoteDetonator":{"prefab":{"prefabName":"ItemRemoteDetonator","prefabHash":678483886,"desc":"","name":"Remote Detonator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemResearchCapsule":{"prefab":{"prefabName":"ItemResearchCapsule","prefabHash":819096942,"desc":"","name":"Research Capsule Blue"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemResearchCapsuleGreen":{"prefab":{"prefabName":"ItemResearchCapsuleGreen","prefabHash":-1352732550,"desc":"","name":"Research Capsule Green"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemResearchCapsuleRed":{"prefab":{"prefabName":"ItemResearchCapsuleRed","prefabHash":954947943,"desc":"","name":"Research Capsule Red"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemResearchCapsuleYellow":{"prefab":{"prefabName":"ItemResearchCapsuleYellow","prefabHash":750952701,"desc":"","name":"Research Capsule Yellow"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Default"}},"ItemReusableFireExtinguisher":{"prefab":{"prefabName":"ItemReusableFireExtinguisher","prefabHash":-1773192190,"desc":"Requires a canister filled with any inert liquid to opperate.","name":"Fire Extinguisher (Reusable)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"ItemRice":{"prefab":{"prefabName":"ItemRice","prefabHash":658916791,"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.","name":"Rice"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Rice":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemRoadFlare":{"prefab":{"prefabName":"ItemRoadFlare","prefabHash":871811564,"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.","name":"Road Flare"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20.0,"slotClass":"Flare","sortingClass":"Default"}},"ItemRocketMiningDrillHead":{"prefab":{"prefabName":"ItemRocketMiningDrillHead","prefabHash":2109945337,"desc":"Replaceable drill head for Rocket Miner","name":"Mining-Drill Head (Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadDurable":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadDurable","prefabHash":1530764483,"desc":"","name":"Mining-Drill Head (Durable)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadHighSpeedIce":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadHighSpeedIce","prefabHash":653461728,"desc":"","name":"Mining-Drill Head (High Speed Ice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadHighSpeedMineral":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadHighSpeedMineral","prefabHash":1440678625,"desc":"","name":"Mining-Drill Head (High Speed Mineral)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadIce":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadIce","prefabHash":-380904592,"desc":"","name":"Mining-Drill Head (Ice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadLongTerm":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadLongTerm","prefabHash":-684020753,"desc":"","name":"Mining-Drill Head (Long Term)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadMineral":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadMineral","prefabHash":1083675581,"desc":"","name":"Mining-Drill Head (Mineral)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketScanningHead":{"prefab":{"prefabName":"ItemRocketScanningHead","prefabHash":-1198702771,"desc":"","name":"Rocket Scanner Head"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"ScanningHead","sortingClass":"Default"}},"ItemScanner":{"prefab":{"prefabName":"ItemScanner","prefabHash":1661270830,"desc":"A mysterious piece of technology, rumored to have Zrillian origins.","name":"Handheld Scanner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemScrewdriver":{"prefab":{"prefabName":"ItemScrewdriver","prefabHash":687940869,"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.","name":"Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemSecurityCamera":{"prefab":{"prefabName":"ItemSecurityCamera","prefabHash":-1981101032,"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.","name":"Security Camera"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Default"}},"ItemSensorLenses":{"prefab":{"prefabName":"ItemSensorLenses","prefabHash":-1176140051,"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.","name":"Sensor Lenses"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Glasses","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Sensor Processing Unit","typ":"SensorProcessingUnit"}]},"ItemSensorProcessingUnitCelestialScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitCelestialScanner","prefabHash":-1154200014,"desc":"","name":"Sensor Processing Unit (Celestial Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSensorProcessingUnitMesonScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitMesonScanner","prefabHash":-1730464583,"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.","name":"Sensor Processing Unit (T-Ray Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSensorProcessingUnitOreScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitOreScanner","prefabHash":-1219128491,"desc":"The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD.","name":"Sensor Processing Unit (Ore Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSiliconIngot":{"prefab":{"prefabName":"ItemSiliconIngot","prefabHash":-290196476,"desc":"","name":"Ingot (Silicon)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Silicon":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSiliconOre":{"prefab":{"prefabName":"ItemSiliconOre","prefabHash":1103972403,"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.","name":"Ore (Silicon)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Silicon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemSilverIngot":{"prefab":{"prefabName":"ItemSilverIngot","prefabHash":-929742000,"desc":"","name":"Ingot (Silver)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Silver":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSilverOre":{"prefab":{"prefabName":"ItemSilverOre","prefabHash":-916518678,"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.","name":"Ore (Silver)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Silver":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemSolderIngot":{"prefab":{"prefabName":"ItemSolderIngot","prefabHash":-82508479,"desc":"","name":"Ingot (Solder)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Solder":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSolidFuel":{"prefab":{"prefabName":"ItemSolidFuel","prefabHash":-365253871,"desc":"","name":"Solid Fuel (Hydrocarbon)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Hydrocarbon":1.0},"slotClass":"Ore","sortingClass":"Resources"}},"ItemSoundCartridgeBass":{"prefab":{"prefabName":"ItemSoundCartridgeBass","prefabHash":-1883441704,"desc":"","name":"Sound Cartridge Bass"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeDrums":{"prefab":{"prefabName":"ItemSoundCartridgeDrums","prefabHash":-1901500508,"desc":"","name":"Sound Cartridge Drums"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeLeads":{"prefab":{"prefabName":"ItemSoundCartridgeLeads","prefabHash":-1174735962,"desc":"","name":"Sound Cartridge Leads"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeSynth":{"prefab":{"prefabName":"ItemSoundCartridgeSynth","prefabHash":-1971419310,"desc":"","name":"Sound Cartridge Synth"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoyOil":{"prefab":{"prefabName":"ItemSoyOil","prefabHash":1387403148,"desc":"","name":"Soy Oil"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"Oil":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemSoybean":{"prefab":{"prefabName":"ItemSoybean","prefabHash":1924673028,"desc":" Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil","name":"Soybean"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100.0,"reagents":{"Soy":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemSpaceCleaner":{"prefab":{"prefabName":"ItemSpaceCleaner","prefabHash":-1737666461,"desc":"There was a time when humanity really wanted to keep space clean. That time has passed.","name":"Space Cleaner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ItemSpaceHelmet":{"prefab":{"prefabName":"ItemSpaceHelmet","prefabHash":714830451,"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.","name":"Space Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemSpaceIce":{"prefab":{"prefabName":"ItemSpaceIce","prefabHash":675686937,"desc":"","name":"Space Ice"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Ore","sortingClass":"Ores"}},"ItemSpaceOre":{"prefab":{"prefabName":"ItemSpaceOre","prefabHash":2131916219,"desc":"Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores.","name":"Dirty Ore"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100.0,"slotClass":"Ore","sortingClass":"Ores"}},"ItemSpacepack":{"prefab":{"prefabName":"ItemSpacepack","prefabHash":-1260618380,"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.","name":"Spacepack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemSprayCanBlack":{"prefab":{"prefabName":"ItemSprayCanBlack","prefabHash":-688107795,"desc":"Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses.","name":"Spray Paint (Black)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanBlue":{"prefab":{"prefabName":"ItemSprayCanBlue","prefabHash":-498464883,"desc":"What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'","name":"Spray Paint (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanBrown":{"prefab":{"prefabName":"ItemSprayCanBrown","prefabHash":845176977,"desc":"In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed.","name":"Spray Paint (Brown)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanGreen":{"prefab":{"prefabName":"ItemSprayCanGreen","prefabHash":-1880941852,"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.","name":"Spray Paint (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanGrey":{"prefab":{"prefabName":"ItemSprayCanGrey","prefabHash":-1645266981,"desc":"Arguably the most popular color in the universe, grey was invented so designers had something to do.","name":"Spray Paint (Grey)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanKhaki":{"prefab":{"prefabName":"ItemSprayCanKhaki","prefabHash":1918456047,"desc":"Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode.","name":"Spray Paint (Khaki)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanOrange":{"prefab":{"prefabName":"ItemSprayCanOrange","prefabHash":-158007629,"desc":"Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove.","name":"Spray Paint (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanPink":{"prefab":{"prefabName":"ItemSprayCanPink","prefabHash":1344257263,"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.","name":"Spray Paint (Pink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanPurple":{"prefab":{"prefabName":"ItemSprayCanPurple","prefabHash":30686509,"desc":"Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong.","name":"Spray Paint (Purple)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanRed":{"prefab":{"prefabName":"ItemSprayCanRed","prefabHash":1514393921,"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.","name":"Spray Paint (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanWhite":{"prefab":{"prefabName":"ItemSprayCanWhite","prefabHash":498481505,"desc":"White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff.","name":"Spray Paint (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanYellow":{"prefab":{"prefabName":"ItemSprayCanYellow","prefabHash":995468116,"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.","name":"Spray Paint (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayGun":{"prefab":{"prefabName":"ItemSprayGun","prefabHash":1289723966,"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.","name":"Spray Gun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Spray Can","typ":"Bottle"}]},"ItemSteelFrames":{"prefab":{"prefabName":"ItemSteelFrames","prefabHash":-1448105779,"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.","name":"Steel Frames"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30.0,"slotClass":"None","sortingClass":"Kits"}},"ItemSteelIngot":{"prefab":{"prefabName":"ItemSteelIngot","prefabHash":-654790771,"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.","name":"Ingot (Steel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Steel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSteelSheets":{"prefab":{"prefabName":"ItemSteelSheets","prefabHash":38555961,"desc":"An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types.","name":"Steel Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemStelliteGlassSheets":{"prefab":{"prefabName":"ItemStelliteGlassSheets","prefabHash":-2038663432,"desc":"A stronger glass substitute.","name":"Stellite Glass Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"None","sortingClass":"Resources"}},"ItemStelliteIngot":{"prefab":{"prefabName":"ItemStelliteIngot","prefabHash":-1897868623,"desc":"","name":"Ingot (Stellite)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Stellite":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSuitModCryogenicUpgrade":{"prefab":{"prefabName":"ItemSuitModCryogenicUpgrade","prefabHash":-1274308304,"desc":"Enables suits with basic cooling functionality to work with cryogenic liquid.","name":"Cryogenic Suit Upgrade"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"SuitMod","sortingClass":"Default"}},"ItemTablet":{"prefab":{"prefabName":"ItemTablet","prefabHash":-229808600,"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.","name":"Handheld Tablet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"}]},"ItemTerrainManipulator":{"prefab":{"prefabName":"ItemTerrainManipulator","prefabHash":111280987,"desc":"0.Mode0\n1.Mode1","name":"Terrain Manipulator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Dirt Canister","typ":"Ore"}]},"ItemTomato":{"prefab":{"prefabName":"ItemTomato","prefabHash":-998592080,"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.","name":"Tomato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20.0,"reagents":{"Tomato":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemTomatoSoup":{"prefab":{"prefabName":"ItemTomatoSoup","prefabHash":688734890,"desc":"Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine.","name":"Tomato Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Food"}},"ItemToolBelt":{"prefab":{"prefabName":"ItemToolBelt","prefabHash":-355127880,"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.","name":"Tool Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemTropicalPlant":{"prefab":{"prefabName":"ItemTropicalPlant","prefabHash":-800947386,"desc":"An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants.","name":"Tropical Lily"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Resources"}},"ItemUraniumOre":{"prefab":{"prefabName":"ItemUraniumOre","prefabHash":-1516581844,"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.","name":"Ore (Uranium)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50.0,"reagents":{"Uranium":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemVolatiles":{"prefab":{"prefabName":"ItemVolatiles","prefabHash":1253102035,"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","name":"Ice (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50.0,"slotClass":"Ore","sortingClass":"Ices"}},"ItemWallCooler":{"prefab":{"prefabName":"ItemWallCooler","prefabHash":-1567752627,"desc":"This kit creates a Wall Cooler.","name":"Kit (Wall Cooler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWallHeater":{"prefab":{"prefabName":"ItemWallHeater","prefabHash":1880134612,"desc":"This kit creates a Kit (Wall Heater).","name":"Kit (Wall Heater)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWallLight":{"prefab":{"prefabName":"ItemWallLight","prefabHash":1108423476,"desc":"This kit creates any one of ten Kit (Lights) variants.","name":"Kit (Lights)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWaspaloyIngot":{"prefab":{"prefabName":"ItemWaspaloyIngot","prefabHash":156348098,"desc":"","name":"Ingot (Waspaloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500.0,"reagents":{"Waspaloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemWaterBottle":{"prefab":{"prefabName":"ItemWaterBottle","prefabHash":107741229,"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.","name":"Water Bottle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.5,"slotClass":"LiquidBottle","sortingClass":"Default"}},"ItemWaterPipeDigitalValve":{"prefab":{"prefabName":"ItemWaterPipeDigitalValve","prefabHash":309693520,"desc":"","name":"Kit (Liquid Digital Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWaterPipeMeter":{"prefab":{"prefabName":"ItemWaterPipeMeter","prefabHash":-90898877,"desc":"","name":"Kit (Liquid Pipe Meter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWaterWallCooler":{"prefab":{"prefabName":"ItemWaterWallCooler","prefabHash":-1721846327,"desc":"","name":"Kit (Liquid Wall Cooler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5.0,"slotClass":"None","sortingClass":"Kits"}},"ItemWearLamp":{"prefab":{"prefabName":"ItemWearLamp","prefabHash":-598730959,"desc":"","name":"Headlamp"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemWeldingTorch":{"prefab":{"prefabName":"ItemWeldingTorch","prefabHash":-2066892079,"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.","name":"Welding Torch"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemWheat":{"prefab":{"prefabName":"ItemWheat","prefabHash":-1057658015,"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.","name":"Wheat"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100.0,"reagents":{"Carbon":1.0},"slotClass":"Plant","sortingClass":"Default"}},"ItemWireCutters":{"prefab":{"prefabName":"ItemWireCutters","prefabHash":1535854074,"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.","name":"Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"ItemWirelessBatteryCellExtraLarge":{"prefab":{"prefabName":"ItemWirelessBatteryCellExtraLarge","prefabHash":-504717121,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Wireless Battery Cell Extra Large"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemWreckageAirConditioner1":{"prefab":{"prefabName":"ItemWreckageAirConditioner1","prefabHash":-1826023284,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageAirConditioner2":{"prefab":{"prefabName":"ItemWreckageAirConditioner2","prefabHash":169888054,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageHydroponicsTray1":{"prefab":{"prefabName":"ItemWreckageHydroponicsTray1","prefabHash":-310178617,"desc":"","name":"Wreckage Hydroponics Tray"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageLargeExtendableRadiator01":{"prefab":{"prefabName":"ItemWreckageLargeExtendableRadiator01","prefabHash":-997763,"desc":"","name":"Wreckage Large Extendable Radiator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureRTG1":{"prefab":{"prefabName":"ItemWreckageStructureRTG1","prefabHash":391453348,"desc":"","name":"Wreckage Structure RTG"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation001":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation001","prefabHash":-834664349,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation002":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation002","prefabHash":1464424921,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation003":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation003","prefabHash":542009679,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation004":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation004","prefabHash":-1104478996,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation005":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation005","prefabHash":-919745414,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation006":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation006","prefabHash":1344576960,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation007":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation007","prefabHash":656649558,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation008":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation008","prefabHash":-1214467897,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator1":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator1","prefabHash":-1662394403,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator2":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator2","prefabHash":98602599,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator3":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator3","prefabHash":1927790321,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageWallCooler1":{"prefab":{"prefabName":"ItemWreckageWallCooler1","prefabHash":-1682930158,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageWallCooler2":{"prefab":{"prefabName":"ItemWreckageWallCooler2","prefabHash":45733800,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWrench":{"prefab":{"prefabName":"ItemWrench","prefabHash":-1886261558,"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","name":"Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Tool","sortingClass":"Tools"}},"KitSDBSilo":{"prefab":{"prefabName":"KitSDBSilo","prefabHash":1932952652,"desc":"This kit creates a SDB Silo.","name":"Kit (SDB Silo)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"None","sortingClass":"Kits"}},"KitStructureCombustionCentrifuge":{"prefab":{"prefabName":"KitStructureCombustionCentrifuge","prefabHash":231903234,"desc":"","name":"Kit (Combustion Centrifuge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Kits"}},"KitchenTableShort":{"prefab":{"prefabName":"KitchenTableShort","prefabHash":-1427415566,"desc":"","name":"Kitchen Table (Short)"},"structure":{"smallGrid":true}},"KitchenTableSimpleShort":{"prefab":{"prefabName":"KitchenTableSimpleShort","prefabHash":-78099334,"desc":"","name":"Kitchen Table (Simple Short)"},"structure":{"smallGrid":true}},"KitchenTableSimpleTall":{"prefab":{"prefabName":"KitchenTableSimpleTall","prefabHash":-1068629349,"desc":"","name":"Kitchen Table (Simple Tall)"},"structure":{"smallGrid":true}},"KitchenTableTall":{"prefab":{"prefabName":"KitchenTableTall","prefabHash":-1386237782,"desc":"","name":"Kitchen Table (Tall)"},"structure":{"smallGrid":true}},"Lander":{"prefab":{"prefabName":"Lander","prefabHash":1605130615,"desc":"","name":"Lander"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"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"}]},"Landingpad_2x2CenterPiece01":{"prefab":{"prefabName":"Landingpad_2x2CenterPiece01","prefabHash":-1295222317,"desc":"Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors","name":"Landingpad 2x2 Center Piece"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Landingpad_BlankPiece":{"prefab":{"prefabName":"Landingpad_BlankPiece","prefabHash":912453390,"desc":"","name":"Landingpad"},"structure":{"smallGrid":true}},"Landingpad_CenterPiece01":{"prefab":{"prefabName":"Landingpad_CenterPiece01","prefabHash":1070143159,"desc":"The target point where the trader shuttle will land. Requires a clear view of the sky.","name":"Landingpad Center"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"modes":{"0":"None","1":"NoContact","2":"Moving","3":"Holding","4":"Landed"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Landingpad_CrossPiece":{"prefab":{"prefabName":"Landingpad_CrossPiece","prefabHash":1101296153,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Cross"},"structure":{"smallGrid":true}},"Landingpad_DataConnectionPiece":{"prefab":{"prefabName":"Landingpad_DataConnectionPiece","prefabHash":-2066405918,"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.","name":"Landingpad Data And Power"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_DiagonalPiece01":{"prefab":{"prefabName":"Landingpad_DiagonalPiece01","prefabHash":977899131,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Diagonal"},"structure":{"smallGrid":true}},"Landingpad_GasConnectorInwardPiece":{"prefab":{"prefabName":"Landingpad_GasConnectorInwardPiece","prefabHash":817945707,"desc":"","name":"Landingpad Gas Input"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_GasConnectorOutwardPiece":{"prefab":{"prefabName":"Landingpad_GasConnectorOutwardPiece","prefabHash":-1100218307,"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.","name":"Landingpad Gas Output"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_GasCylinderTankPiece":{"prefab":{"prefabName":"Landingpad_GasCylinderTankPiece","prefabHash":170818567,"desc":"Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders.","name":"Landingpad Gas Storage"},"structure":{"smallGrid":true}},"Landingpad_LiquidConnectorInwardPiece":{"prefab":{"prefabName":"Landingpad_LiquidConnectorInwardPiece","prefabHash":-1216167727,"desc":"","name":"Landingpad Liquid Input"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_LiquidConnectorOutwardPiece":{"prefab":{"prefabName":"Landingpad_LiquidConnectorOutwardPiece","prefabHash":-1788929869,"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.","name":"Landingpad Liquid Output"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_StraightPiece01":{"prefab":{"prefabName":"Landingpad_StraightPiece01","prefabHash":-976273247,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Straight"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceCorner":{"prefab":{"prefabName":"Landingpad_TaxiPieceCorner","prefabHash":-1872345847,"desc":"","name":"Landingpad Taxi Corner"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceHold":{"prefab":{"prefabName":"Landingpad_TaxiPieceHold","prefabHash":146051619,"desc":"","name":"Landingpad Taxi Hold"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceStraight":{"prefab":{"prefabName":"Landingpad_TaxiPieceStraight","prefabHash":-1477941080,"desc":"","name":"Landingpad Taxi Straight"},"structure":{"smallGrid":true}},"Landingpad_ThreshholdPiece":{"prefab":{"prefabName":"Landingpad_ThreshholdPiece","prefabHash":-1514298582,"desc":"","name":"Landingpad Threshhold"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"LogicStepSequencer8":{"prefab":{"prefabName":"LogicStepSequencer8","prefabHash":1531272458,"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.","name":"Logic Step Sequencer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Sound Cartridge","typ":"SoundCartridge"}],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Meteorite":{"prefab":{"prefabName":"Meteorite","prefabHash":-99064335,"desc":"","name":"Meteorite"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"MonsterEgg":{"prefab":{"prefabName":"MonsterEgg","prefabHash":-1667675295,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"MotherboardComms":{"prefab":{"prefabName":"MotherboardComms","prefabHash":-337075633,"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.","name":"Communications Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardLogic":{"prefab":{"prefabName":"MotherboardLogic","prefabHash":502555944,"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.","name":"Logic Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardMissionControl":{"prefab":{"prefabName":"MotherboardMissionControl","prefabHash":-127121474,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardProgrammableChip":{"prefab":{"prefabName":"MotherboardProgrammableChip","prefabHash":-161107071,"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.","name":"IC Editor Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardRockets":{"prefab":{"prefabName":"MotherboardRockets","prefabHash":-806986392,"desc":"","name":"Rocket Control Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardSorter":{"prefab":{"prefabName":"MotherboardSorter","prefabHash":-1908268220,"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.","name":"Sorter Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Motherboard","sortingClass":"Default"}},"MothershipCore":{"prefab":{"prefabName":"MothershipCore","prefabHash":-1930442922,"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.","name":"Mothership Core"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"NpcChick":{"prefab":{"prefabName":"NpcChick","prefabHash":155856647,"desc":"","name":"Chick"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"NpcChicken":{"prefab":{"prefabName":"NpcChicken","prefabHash":399074198,"desc":"","name":"Chicken"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"PassiveSpeaker":{"prefab":{"prefabName":"PassiveSpeaker","prefabHash":248893646,"desc":"","name":"Passive Speaker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"ReadWrite","ReferenceId":"ReadWrite","SoundAlert":"ReadWrite","Volume":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"PipeBenderMod":{"prefab":{"prefabName":"PipeBenderMod","prefabHash":443947415,"desc":"Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Pipe Bender Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"PortableComposter":{"prefab":{"prefabName":"PortableComposter","prefabHash":-1958705204,"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","name":"Portable Composter"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"Battery"},{"name":"Liquid Canister","typ":"LiquidCanister"}]},"PortableSolarPanel":{"prefab":{"prefabName":"PortableSolarPanel","prefabHash":2043318949,"desc":"","name":"Portable Solar Panel"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Open":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"RailingElegant01":{"prefab":{"prefabName":"RailingElegant01","prefabHash":399661231,"desc":"","name":"Railing Elegant (Type 1)"},"structure":{"smallGrid":false}},"RailingElegant02":{"prefab":{"prefabName":"RailingElegant02","prefabHash":-1898247915,"desc":"","name":"Railing Elegant (Type 2)"},"structure":{"smallGrid":false}},"RailingIndustrial02":{"prefab":{"prefabName":"RailingIndustrial02","prefabHash":-2072792175,"desc":"","name":"Railing Industrial (Type 2)"},"structure":{"smallGrid":false}},"ReagentColorBlue":{"prefab":{"prefabName":"ReagentColorBlue","prefabHash":980054869,"desc":"","name":"Color Dye (Blue)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorBlue":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorGreen":{"prefab":{"prefabName":"ReagentColorGreen","prefabHash":120807542,"desc":"","name":"Color Dye (Green)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorGreen":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorOrange":{"prefab":{"prefabName":"ReagentColorOrange","prefabHash":-400696159,"desc":"","name":"Color Dye (Orange)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorOrange":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorRed":{"prefab":{"prefabName":"ReagentColorRed","prefabHash":1998377961,"desc":"","name":"Color Dye (Red)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorRed":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorYellow":{"prefab":{"prefabName":"ReagentColorYellow","prefabHash":635208006,"desc":"","name":"Color Dye (Yellow)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100.0,"reagents":{"ColorYellow":10.0},"slotClass":"None","sortingClass":"Resources"}},"RespawnPoint":{"prefab":{"prefabName":"RespawnPoint","prefabHash":-788672929,"desc":"Place a respawn point to set a player entry point to your base when loading in, or returning from the dead.","name":"Respawn Point"},"structure":{"smallGrid":true}},"RespawnPointWallMounted":{"prefab":{"prefabName":"RespawnPointWallMounted","prefabHash":-491247370,"desc":"","name":"Respawn Point (Mounted)"},"structure":{"smallGrid":true}},"Robot":{"prefab":{"prefabName":"Robot","prefabHash":434786784,"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","name":"AIMeE Bot"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"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"}]},"RoverCargo":{"prefab":{"prefabName":"RoverCargo","prefabHash":350726273,"desc":"Connects to Logic Transmitter","name":"Rover (Cargo)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"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":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI":{"prefab":{"prefabName":"Rover_MkI","prefabHash":-2049946335,"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","name":"Rover MkI"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"},"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"},"10":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"slots":[{"name":"Entity","typ":"Entity"},{"name":"Entity","typ":"Entity"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI_build_states":{"prefab":{"prefabName":"Rover_MkI_build_states","prefabHash":861674123,"desc":"","name":"Rover MKI"},"structure":{"smallGrid":false}},"SMGMagazine":{"prefab":{"prefabName":"SMGMagazine","prefabHash":-256607540,"desc":"","name":"SMG Magazine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Magazine","sortingClass":"Default"}},"SeedBag_Corn":{"prefab":{"prefabName":"SeedBag_Corn","prefabHash":-1290755415,"desc":"Grow a Corn.","name":"Corn Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Fern":{"prefab":{"prefabName":"SeedBag_Fern","prefabHash":-1990600883,"desc":"Grow a Fern.","name":"Fern Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Mushroom":{"prefab":{"prefabName":"SeedBag_Mushroom","prefabHash":311593418,"desc":"Grow a Mushroom.","name":"Mushroom Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Potato":{"prefab":{"prefabName":"SeedBag_Potato","prefabHash":1005571172,"desc":"Grow a Potato.","name":"Potato Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Pumpkin":{"prefab":{"prefabName":"SeedBag_Pumpkin","prefabHash":1423199840,"desc":"Grow a Pumpkin.","name":"Pumpkin Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Rice":{"prefab":{"prefabName":"SeedBag_Rice","prefabHash":-1691151239,"desc":"Grow some Rice.","name":"Rice Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Soybean":{"prefab":{"prefabName":"SeedBag_Soybean","prefabHash":1783004244,"desc":"Grow some Soybean.","name":"Soybean Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Switchgrass":{"prefab":{"prefabName":"SeedBag_Switchgrass","prefabHash":488360169,"desc":"","name":"Switchgrass Seed"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Tomato":{"prefab":{"prefabName":"SeedBag_Tomato","prefabHash":-1922066841,"desc":"Grow a Tomato.","name":"Tomato Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Wheet":{"prefab":{"prefabName":"SeedBag_Wheet","prefabHash":-654756733,"desc":"Grow some Wheat.","name":"Wheat Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10.0,"slotClass":"Plant","sortingClass":"Food"}},"SpaceShuttle":{"prefab":{"prefabName":"SpaceShuttle","prefabHash":-1991297271,"desc":"An antiquated Sinotai transport craft, long since decommissioned.","name":"Space Shuttle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Captain's Seat","typ":"Entity"},{"name":"Passenger Seat Left","typ":"Entity"},{"name":"Passenger Seat Right","typ":"Entity"}]},"StopWatch":{"prefab":{"prefabName":"StopWatch","prefabHash":-1527229051,"desc":"","name":"Stop Watch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Time":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureAccessBridge":{"prefab":{"prefabName":"StructureAccessBridge","prefabHash":1298920475,"desc":"Extendable bridge that spans three grids","name":"Access Bridge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureActiveVent":{"prefab":{"prefabName":"StructureActiveVent","prefabHash":-1129453144,"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 ...","name":"Active Vent"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAdvancedComposter":{"prefab":{"prefabName":"StructureAdvancedComposter","prefabHash":446212963,"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","name":"Advanced Composter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAdvancedFurnace":{"prefab":{"prefabName":"StructureAdvancedFurnace","prefabHash":545937711,"desc":"The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure.","name":"Advanced Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureAdvancedPackagingMachine":{"prefab":{"prefabName":"StructureAdvancedPackagingMachine","prefabHash":-463037670,"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.","name":"Advanced Packaging Machine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureAirConditioner":{"prefab":{"prefabName":"StructureAirConditioner","prefabHash":-2087593337,"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.","name":"Air Conditioner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Waste"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAirlock":{"prefab":{"prefabName":"StructureAirlock","prefabHash":-2105052344,"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.","name":"Airlock"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAirlockGate":{"prefab":{"prefabName":"StructureAirlockGate","prefabHash":1736080881,"desc":"1 x 1 modular door piece for building hangar doors.","name":"Small Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAngledBench":{"prefab":{"prefabName":"StructureAngledBench","prefabHash":1811979158,"desc":"","name":"Bench (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureArcFurnace":{"prefab":{"prefabName":"StructureArcFurnace","prefabHash":-247344692,"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.","name":"Arc Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"},{"name":"Export","typ":"Ingot"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureAreaPowerControl":{"prefab":{"prefabName":"StructureAreaPowerControl","prefabHash":1999523701,"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.","name":"Area Power Control"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAreaPowerControlReversed":{"prefab":{"prefabName":"StructureAreaPowerControlReversed","prefabHash":-1032513487,"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.","name":"Area Power Control"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAutoMinerSmall":{"prefab":{"prefabName":"StructureAutoMinerSmall","prefabHash":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":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAutolathe":{"prefab":{"prefabName":"StructureAutolathe","prefabHash":336213101,"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 ","name":"Autolathe"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureAutomatedOven":{"prefab":{"prefabName":"StructureAutomatedOven","prefabHash":-1672404896,"desc":"","name":"Automated Oven"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureBackLiquidPressureRegulator":{"prefab":{"prefabName":"StructureBackLiquidPressureRegulator","prefabHash":2099900163,"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.","name":"Liquid Back Volume Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBackPressureRegulator":{"prefab":{"prefabName":"StructureBackPressureRegulator","prefabHash":-1149857558,"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.","name":"Back Pressure Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBasketHoop":{"prefab":{"prefabName":"StructureBasketHoop","prefabHash":-1613497288,"desc":"","name":"Basket Hoop"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBattery":{"prefab":{"prefabName":"StructureBattery","prefabHash":-400115994,"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).","name":"Station Battery"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryCharger":{"prefab":{"prefabName":"StructureBatteryCharger","prefabHash":1945930022,"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.","name":"Battery Cell Charger"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryChargerSmall":{"prefab":{"prefabName":"StructureBatteryChargerSmall","prefabHash":-761772413,"desc":"","name":"Battery Charger Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryLarge":{"prefab":{"prefabName":"StructureBatteryLarge","prefabHash":-1388288459,"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). ","name":"Station Battery (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryMedium":{"prefab":{"prefabName":"StructureBatteryMedium","prefabHash":-1125305264,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatterySmall":{"prefab":{"prefabName":"StructureBatterySmall","prefabHash":-2123455080,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Auxiliary Rocket Battery "},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBeacon":{"prefab":{"prefabName":"StructureBeacon","prefabHash":-188177083,"desc":"","name":"Beacon"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench":{"prefab":{"prefabName":"StructureBench","prefabHash":-2042448192,"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.","name":"Powered Bench"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench1":{"prefab":{"prefabName":"StructureBench1","prefabHash":406745009,"desc":"","name":"Bench (Counter Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench2":{"prefab":{"prefabName":"StructureBench2","prefabHash":-2127086069,"desc":"","name":"Bench (High Tech Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench3":{"prefab":{"prefabName":"StructureBench3","prefabHash":-164622691,"desc":"","name":"Bench (Frame Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench4":{"prefab":{"prefabName":"StructureBench4","prefabHash":1750375230,"desc":"","name":"Bench (Workbench Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBlastDoor":{"prefab":{"prefabName":"StructureBlastDoor","prefabHash":337416191,"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.","name":"Blast Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureBlockBed":{"prefab":{"prefabName":"StructureBlockBed","prefabHash":697908419,"desc":"Description coming.","name":"Block Bed"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBlocker":{"prefab":{"prefabName":"StructureBlocker","prefabHash":378084505,"desc":"","name":"Blocker"},"structure":{"smallGrid":false}},"StructureCableAnalysizer":{"prefab":{"prefabName":"StructureCableAnalysizer","prefabHash":1036015121,"desc":"","name":"Cable Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PowerActual":"Read","PowerPotential":"Read","PowerRequired":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableCorner":{"prefab":{"prefabName":"StructureCableCorner","prefabHash":-889269388,"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).","name":"Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3":{"prefab":{"prefabName":"StructureCableCorner3","prefabHash":980469101,"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).","name":"Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3Burnt":{"prefab":{"prefabName":"StructureCableCorner3Burnt","prefabHash":318437449,"desc":"","name":"Burnt Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3HBurnt":{"prefab":{"prefabName":"StructureCableCorner3HBurnt","prefabHash":2393826,"desc":"","name":""},"structure":{"smallGrid":true}},"StructureCableCorner4":{"prefab":{"prefabName":"StructureCableCorner4","prefabHash":-1542172466,"desc":"","name":"Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner4Burnt":{"prefab":{"prefabName":"StructureCableCorner4Burnt","prefabHash":268421361,"desc":"","name":"Burnt Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner4HBurnt":{"prefab":{"prefabName":"StructureCableCorner4HBurnt","prefabHash":-981223316,"desc":"","name":"Burnt Heavy Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerBurnt":{"prefab":{"prefabName":"StructureCableCornerBurnt","prefabHash":-177220914,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH":{"prefab":{"prefabName":"StructureCableCornerH","prefabHash":-39359015,"desc":"","name":"Heavy Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH3":{"prefab":{"prefabName":"StructureCableCornerH3","prefabHash":-1843379322,"desc":"","name":"Heavy Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH4":{"prefab":{"prefabName":"StructureCableCornerH4","prefabHash":205837861,"desc":"","name":"Heavy Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerHBurnt":{"prefab":{"prefabName":"StructureCableCornerHBurnt","prefabHash":1931412811,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableFuse100k":{"prefab":{"prefabName":"StructureCableFuse100k","prefabHash":281380789,"desc":"","name":"Fuse (100kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse1k":{"prefab":{"prefabName":"StructureCableFuse1k","prefabHash":-1103727120,"desc":"","name":"Fuse (1kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse50k":{"prefab":{"prefabName":"StructureCableFuse50k","prefabHash":-349716617,"desc":"","name":"Fuse (50kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse5k":{"prefab":{"prefabName":"StructureCableFuse5k","prefabHash":-631590668,"desc":"","name":"Fuse (5kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableJunction":{"prefab":{"prefabName":"StructureCableJunction","prefabHash":-175342021,"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).","name":"Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4":{"prefab":{"prefabName":"StructureCableJunction4","prefabHash":1112047202,"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).","name":"Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4Burnt":{"prefab":{"prefabName":"StructureCableJunction4Burnt","prefabHash":-1756896811,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4HBurnt":{"prefab":{"prefabName":"StructureCableJunction4HBurnt","prefabHash":-115809132,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction5":{"prefab":{"prefabName":"StructureCableJunction5","prefabHash":894390004,"desc":"","name":"Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction5Burnt":{"prefab":{"prefabName":"StructureCableJunction5Burnt","prefabHash":1545286256,"desc":"","name":"Burnt Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6":{"prefab":{"prefabName":"StructureCableJunction6","prefabHash":-1404690610,"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).","name":"Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6Burnt":{"prefab":{"prefabName":"StructureCableJunction6Burnt","prefabHash":-628145954,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6HBurnt":{"prefab":{"prefabName":"StructureCableJunction6HBurnt","prefabHash":1854404029,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionBurnt":{"prefab":{"prefabName":"StructureCableJunctionBurnt","prefabHash":-1620686196,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH":{"prefab":{"prefabName":"StructureCableJunctionH","prefabHash":469451637,"desc":"","name":"Heavy Cable (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH4":{"prefab":{"prefabName":"StructureCableJunctionH4","prefabHash":-742234680,"desc":"","name":"Heavy Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH5":{"prefab":{"prefabName":"StructureCableJunctionH5","prefabHash":-1530571426,"desc":"","name":"Heavy Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH5Burnt":{"prefab":{"prefabName":"StructureCableJunctionH5Burnt","prefabHash":1701593300,"desc":"","name":"Burnt Heavy Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH6":{"prefab":{"prefabName":"StructureCableJunctionH6","prefabHash":1036780772,"desc":"","name":"Heavy Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionHBurnt":{"prefab":{"prefabName":"StructureCableJunctionHBurnt","prefabHash":-341365649,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableStraight":{"prefab":{"prefabName":"StructureCableStraight","prefabHash":605357050,"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).","name":"Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightBurnt":{"prefab":{"prefabName":"StructureCableStraightBurnt","prefabHash":-1196981113,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightH":{"prefab":{"prefabName":"StructureCableStraightH","prefabHash":-146200530,"desc":"","name":"Heavy Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightHBurnt":{"prefab":{"prefabName":"StructureCableStraightHBurnt","prefabHash":2085762089,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCamera":{"prefab":{"prefabName":"StructureCamera","prefabHash":-342072665,"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.","name":"Camera"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureCapsuleTankGas":{"prefab":{"prefabName":"StructureCapsuleTankGas","prefabHash":-1385712131,"desc":"","name":"Gas Capsule Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCapsuleTankLiquid":{"prefab":{"prefabName":"StructureCapsuleTankLiquid","prefabHash":1415396263,"desc":"","name":"Liquid Capsule Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCargoStorageMedium":{"prefab":{"prefabName":"StructureCargoStorageMedium","prefabHash":1151864003,"desc":"","name":"Cargo Storage (Medium)"},"structure":{"smallGrid":true},"logic":{"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":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCargoStorageSmall":{"prefab":{"prefabName":"StructureCargoStorageSmall","prefabHash":-1493672123,"desc":"","name":"Cargo Storage (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"},"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"},"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"},"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"},"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCentrifuge":{"prefab":{"prefabName":"StructureCentrifuge","prefabHash":690945935,"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.","name":"Centrifuge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureChair":{"prefab":{"prefabName":"StructureChair","prefabHash":1167659360,"desc":"One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs.","name":"Chair"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBacklessDouble":{"prefab":{"prefabName":"StructureChairBacklessDouble","prefabHash":1944858936,"desc":"","name":"Chair (Backless Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBacklessSingle":{"prefab":{"prefabName":"StructureChairBacklessSingle","prefabHash":1672275150,"desc":"","name":"Chair (Backless Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBoothCornerLeft":{"prefab":{"prefabName":"StructureChairBoothCornerLeft","prefabHash":-367720198,"desc":"","name":"Chair (Booth Corner Left)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBoothMiddle":{"prefab":{"prefabName":"StructureChairBoothMiddle","prefabHash":1640720378,"desc":"","name":"Chair (Booth Middle)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairRectangleDouble":{"prefab":{"prefabName":"StructureChairRectangleDouble","prefabHash":-1152812099,"desc":"","name":"Chair (Rectangle Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairRectangleSingle":{"prefab":{"prefabName":"StructureChairRectangleSingle","prefabHash":-1425428917,"desc":"","name":"Chair (Rectangle Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairThickDouble":{"prefab":{"prefabName":"StructureChairThickDouble","prefabHash":-1245724402,"desc":"","name":"Chair (Thick Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairThickSingle":{"prefab":{"prefabName":"StructureChairThickSingle","prefabHash":-1510009608,"desc":"","name":"Chair (Thick Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteBin":{"prefab":{"prefabName":"StructureChuteBin","prefabHash":-850484480,"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.","name":"Chute Bin"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Input","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteCorner":{"prefab":{"prefabName":"StructureChuteCorner","prefabHash":1360330136,"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.","name":"Chute (Corner)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteDigitalFlipFlopSplitterLeft":{"prefab":{"prefabName":"StructureChuteDigitalFlipFlopSplitterLeft","prefabHash":-810874728,"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.","name":"Chute Digital Flip Flop Splitter Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingOutput":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Output2"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureChuteDigitalFlipFlopSplitterRight":{"prefab":{"prefabName":"StructureChuteDigitalFlipFlopSplitterRight","prefabHash":163728359,"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.","name":"Chute Digital Flip Flop Splitter Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingOutput":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Output2"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureChuteDigitalValveLeft":{"prefab":{"prefabName":"StructureChuteDigitalValveLeft","prefabHash":648608238,"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.","name":"Chute Digital Valve Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteDigitalValveRight":{"prefab":{"prefabName":"StructureChuteDigitalValveRight","prefabHash":-1337091041,"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.","name":"Chute Digital Valve Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteFlipFlopSplitter":{"prefab":{"prefabName":"StructureChuteFlipFlopSplitter","prefabHash":-1446854725,"desc":"A chute that toggles between two outputs","name":"Chute Flip Flop Splitter"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteInlet":{"prefab":{"prefabName":"StructureChuteInlet","prefabHash":-1469588766,"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.","name":"Chute Inlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteJunction":{"prefab":{"prefabName":"StructureChuteJunction","prefabHash":-611232514,"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.","name":"Chute (Junction)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteOutlet":{"prefab":{"prefabName":"StructureChuteOutlet","prefabHash":-1022714809,"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.","name":"Chute Outlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteOverflow":{"prefab":{"prefabName":"StructureChuteOverflow","prefabHash":225377225,"desc":"The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied.","name":"Chute Overflow"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteStraight":{"prefab":{"prefabName":"StructureChuteStraight","prefabHash":168307007,"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.","name":"Chute (Straight)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteUmbilicalFemale":{"prefab":{"prefabName":"StructureChuteUmbilicalFemale","prefabHash":-1918892177,"desc":"","name":"Umbilical Socket (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureChuteUmbilicalFemaleSide","prefabHash":-659093969,"desc":"","name":"Umbilical Socket Angle (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteUmbilicalMale":{"prefab":{"prefabName":"StructureChuteUmbilicalMale","prefabHash":-958884053,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteValve":{"prefab":{"prefabName":"StructureChuteValve","prefabHash":434875271,"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.","name":"Chute Valve"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteWindow":{"prefab":{"prefabName":"StructureChuteWindow","prefabHash":-607241919,"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.","name":"Chute (Window)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureCircuitHousing":{"prefab":{"prefabName":"StructureCircuitHousing","prefabHash":-128473777,"desc":"","name":"IC Housing"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","LineNumber":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","LineNumber":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"devicePinsLength":6,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"StructureCombustionCentrifuge":{"prefab":{"prefabName":"StructureCombustionCentrifuge","prefabHash":1238905683,"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 ","name":"Combustion Centrifuge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureCompositeCladdingAngled":{"prefab":{"prefabName":"StructureCompositeCladdingAngled","prefabHash":-1513030150,"desc":"","name":"Composite Cladding (Angled)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCorner":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCorner","prefabHash":-69685069,"desc":"","name":"Composite Cladding (Angled Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInner":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInner","prefabHash":-1841871763,"desc":"","name":"Composite Cladding (Angled Corner Inner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLong","prefabHash":-1417912632,"desc":"","name":"Composite Cladding (Angled Corner Inner Long)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLongL":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLongL","prefabHash":947705066,"desc":"","name":"Composite Cladding (Angled Corner Inner Long L)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLongR":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLongR","prefabHash":-1032590967,"desc":"","name":"Composite Cladding (Angled Corner Inner Long R)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerLong","prefabHash":850558385,"desc":"","name":"Composite Cladding (Long Angled Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerLongR":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerLongR","prefabHash":-348918222,"desc":"","name":"Composite Cladding (Long Angled Mirrored Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledLong","prefabHash":-387546514,"desc":"","name":"Composite Cladding (Long Angled)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingCylindrical":{"prefab":{"prefabName":"StructureCompositeCladdingCylindrical","prefabHash":212919006,"desc":"","name":"Composite Cladding (Cylindrical)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingCylindricalPanel":{"prefab":{"prefabName":"StructureCompositeCladdingCylindricalPanel","prefabHash":1077151132,"desc":"","name":"Composite Cladding (Cylindrical Panel)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingPanel":{"prefab":{"prefabName":"StructureCompositeCladdingPanel","prefabHash":1997436771,"desc":"","name":"Composite Cladding (Panel)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRounded":{"prefab":{"prefabName":"StructureCompositeCladdingRounded","prefabHash":-259357734,"desc":"","name":"Composite Cladding (Rounded)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRoundedCorner":{"prefab":{"prefabName":"StructureCompositeCladdingRoundedCorner","prefabHash":1951525046,"desc":"","name":"Composite Cladding (Rounded Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRoundedCornerInner":{"prefab":{"prefabName":"StructureCompositeCladdingRoundedCornerInner","prefabHash":110184667,"desc":"","name":"Composite Cladding (Rounded Corner Inner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSpherical":{"prefab":{"prefabName":"StructureCompositeCladdingSpherical","prefabHash":139107321,"desc":"","name":"Composite Cladding (Spherical)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSphericalCap":{"prefab":{"prefabName":"StructureCompositeCladdingSphericalCap","prefabHash":534213209,"desc":"","name":"Composite Cladding (Spherical Cap)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSphericalCorner":{"prefab":{"prefabName":"StructureCompositeCladdingSphericalCorner","prefabHash":1751355139,"desc":"","name":"Composite Cladding (Spherical Corner)"},"structure":{"smallGrid":false}},"StructureCompositeDoor":{"prefab":{"prefabName":"StructureCompositeDoor","prefabHash":-793837322,"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.","name":"Composite Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCompositeFloorGrating":{"prefab":{"prefabName":"StructureCompositeFloorGrating","prefabHash":324868581,"desc":"While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings.","name":"Composite Floor Grating"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating2":{"prefab":{"prefabName":"StructureCompositeFloorGrating2","prefabHash":-895027741,"desc":"","name":"Composite Floor Grating (Type 2)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating3":{"prefab":{"prefabName":"StructureCompositeFloorGrating3","prefabHash":-1113471627,"desc":"","name":"Composite Floor Grating (Type 3)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating4":{"prefab":{"prefabName":"StructureCompositeFloorGrating4","prefabHash":600133846,"desc":"","name":"Composite Floor Grating (Type 4)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGratingOpen":{"prefab":{"prefabName":"StructureCompositeFloorGratingOpen","prefabHash":2109695912,"desc":"","name":"Composite Floor Grating Open"},"structure":{"smallGrid":false}},"StructureCompositeFloorGratingOpenRotated":{"prefab":{"prefabName":"StructureCompositeFloorGratingOpenRotated","prefabHash":882307910,"desc":"","name":"Composite Floor Grating Open Rotated"},"structure":{"smallGrid":false}},"StructureCompositeWall":{"prefab":{"prefabName":"StructureCompositeWall","prefabHash":1237302061,"desc":"Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties.","name":"Composite Wall (Type 1)"},"structure":{"smallGrid":false}},"StructureCompositeWall02":{"prefab":{"prefabName":"StructureCompositeWall02","prefabHash":718343384,"desc":"","name":"Composite Wall (Type 2)"},"structure":{"smallGrid":false}},"StructureCompositeWall03":{"prefab":{"prefabName":"StructureCompositeWall03","prefabHash":1574321230,"desc":"","name":"Composite Wall (Type 3)"},"structure":{"smallGrid":false}},"StructureCompositeWall04":{"prefab":{"prefabName":"StructureCompositeWall04","prefabHash":-1011701267,"desc":"","name":"Composite Wall (Type 4)"},"structure":{"smallGrid":false}},"StructureCompositeWindow":{"prefab":{"prefabName":"StructureCompositeWindow","prefabHash":-2060571986,"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.","name":"Composite Window"},"structure":{"smallGrid":false}},"StructureCompositeWindowIron":{"prefab":{"prefabName":"StructureCompositeWindowIron","prefabHash":-688284639,"desc":"","name":"Iron Window"},"structure":{"smallGrid":false}},"StructureComputer":{"prefab":{"prefabName":"StructureComputer","prefabHash":-626563514,"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","name":"Computer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Data Disk","typ":"DataDisk"},{"name":"Data Disk","typ":"DataDisk"},{"name":"Motherboard","typ":"Motherboard"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCondensationChamber":{"prefab":{"prefabName":"StructureCondensationChamber","prefabHash":1420719315,"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.","name":"Condensation Chamber"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCondensationValve":{"prefab":{"prefabName":"StructureCondensationValve","prefabHash":-965741795,"desc":"Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction.","name":"Condensation Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Output"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsole":{"prefab":{"prefabName":"StructureConsole","prefabHash":235638270,"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.","name":"Console"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureConsoleDual":{"prefab":{"prefabName":"StructureConsoleDual","prefabHash":-722284333,"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.","name":"Console Dual"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureConsoleLED1x2":{"prefab":{"prefabName":"StructureConsoleLED1x2","prefabHash":-53151617,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleLED1x3":{"prefab":{"prefabName":"StructureConsoleLED1x3","prefabHash":-1949054743,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleLED5":{"prefab":{"prefabName":"StructureConsoleLED5","prefabHash":-815193061,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleMonitor":{"prefab":{"prefabName":"StructureConsoleMonitor","prefabHash":801677497,"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.","name":"Console Monitor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureControlChair":{"prefab":{"prefabName":"StructureControlChair","prefabHash":-1961153710,"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.","name":"Control Chair"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Entity","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureCornerLocker":{"prefab":{"prefabName":"StructureCornerLocker","prefabHash":-1968255729,"desc":"","name":"Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureCrateMount":{"prefab":{"prefabName":"StructureCrateMount","prefabHash":-733500083,"desc":"","name":"Container Mount"},"structure":{"smallGrid":true},"slots":[{"name":"Container Slot","typ":"None"}]},"StructureCryoTube":{"prefab":{"prefabName":"StructureCryoTube","prefabHash":1938254586,"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.","name":"CryoTube"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCryoTubeHorizontal":{"prefab":{"prefabName":"StructureCryoTubeHorizontal","prefabHash":1443059329,"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.","name":"Cryo Tube Horizontal"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCryoTubeVertical":{"prefab":{"prefabName":"StructureCryoTubeVertical","prefabHash":-1381321828,"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.","name":"Cryo Tube Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureDaylightSensor":{"prefab":{"prefabName":"StructureDaylightSensor","prefabHash":1076425094,"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.","name":"Daylight Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDeepMiner":{"prefab":{"prefabName":"StructureDeepMiner","prefabHash":265720906,"desc":"Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s","name":"Deep Miner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDigitalValve":{"prefab":{"prefabName":"StructureDigitalValve","prefabHash":-1280984102,"desc":"The digital valve allows Stationeers to create logic-controlled valves and pipe networks.","name":"Digital Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDiode":{"prefab":{"prefabName":"StructureDiode","prefabHash":1944485013,"desc":"","name":"LED"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDiodeSlide":{"prefab":{"prefabName":"StructureDiodeSlide","prefabHash":576516101,"desc":"","name":"Diode Slide"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDockPortSide":{"prefab":{"prefabName":"StructureDockPortSide","prefabHash":-137465079,"desc":"","name":"Dock (Port Side)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureDrinkingFountain":{"prefab":{"prefabName":"StructureDrinkingFountain","prefabHash":1968371847,"desc":"","name":""},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureElectrolyzer":{"prefab":{"prefabName":"StructureElectrolyzer","prefabHash":-1668992663,"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.","name":"Electrolyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElectronicsPrinter":{"prefab":{"prefabName":"StructureElectronicsPrinter","prefabHash":1307165496,"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.","name":"Electronics Printer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureElevatorLevelFront":{"prefab":{"prefabName":"StructureElevatorLevelFront","prefabHash":-827912235,"desc":"","name":"Elevator Level (Cabled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElevatorLevelIndustrial":{"prefab":{"prefabName":"StructureElevatorLevelIndustrial","prefabHash":2060648791,"desc":"","name":"Elevator Level"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElevatorShaft":{"prefab":{"prefabName":"StructureElevatorShaft","prefabHash":826144419,"desc":"","name":"Elevator Shaft (Cabled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureElevatorShaftIndustrial":{"prefab":{"prefabName":"StructureElevatorShaftIndustrial","prefabHash":1998354978,"desc":"","name":"Elevator Shaft"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureEmergencyButton":{"prefab":{"prefabName":"StructureEmergencyButton","prefabHash":1668452680,"desc":"Description coming.","name":"Important Button"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureEngineMountTypeA1":{"prefab":{"prefabName":"StructureEngineMountTypeA1","prefabHash":2035781224,"desc":"","name":"Engine Mount (Type A1)"},"structure":{"smallGrid":false}},"StructureEvaporationChamber":{"prefab":{"prefabName":"StructureEvaporationChamber","prefabHash":-1429782576,"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.","name":"Evaporation Chamber"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureExpansionValve":{"prefab":{"prefabName":"StructureExpansionValve","prefabHash":195298587,"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.","name":"Expansion Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureFairingTypeA1":{"prefab":{"prefabName":"StructureFairingTypeA1","prefabHash":1622567418,"desc":"","name":"Fairing (Type A1)"},"structure":{"smallGrid":false}},"StructureFairingTypeA2":{"prefab":{"prefabName":"StructureFairingTypeA2","prefabHash":-104908736,"desc":"","name":"Fairing (Type A2)"},"structure":{"smallGrid":false}},"StructureFairingTypeA3":{"prefab":{"prefabName":"StructureFairingTypeA3","prefabHash":-1900541738,"desc":"","name":"Fairing (Type A3)"},"structure":{"smallGrid":false}},"StructureFiltration":{"prefab":{"prefabName":"StructureFiltration","prefabHash":-348054045,"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","name":"Filtration"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Waste"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureFlagSmall":{"prefab":{"prefabName":"StructureFlagSmall","prefabHash":-1529819532,"desc":"","name":"Small Flag"},"structure":{"smallGrid":true}},"StructureFlashingLight":{"prefab":{"prefabName":"StructureFlashingLight","prefabHash":-1535893860,"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'.","name":"Flashing Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureFlatBench":{"prefab":{"prefabName":"StructureFlatBench","prefabHash":839890807,"desc":"","name":"Bench (Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureFloorDrain":{"prefab":{"prefabName":"StructureFloorDrain","prefabHash":1048813293,"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.","name":"Passive Liquid Inlet"},"structure":{"smallGrid":true}},"StructureFrame":{"prefab":{"prefabName":"StructureFrame","prefabHash":1432512808,"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.","name":"Steel Frame"},"structure":{"smallGrid":false}},"StructureFrameCorner":{"prefab":{"prefabName":"StructureFrameCorner","prefabHash":-2112390778,"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.","name":"Steel Frame (Corner)"},"structure":{"smallGrid":false}},"StructureFrameCornerCut":{"prefab":{"prefabName":"StructureFrameCornerCut","prefabHash":271315669,"desc":"0.Mode0\n1.Mode1","name":"Steel Frame (Corner Cut)"},"structure":{"smallGrid":false}},"StructureFrameIron":{"prefab":{"prefabName":"StructureFrameIron","prefabHash":-1240951678,"desc":"","name":"Iron Frame"},"structure":{"smallGrid":false}},"StructureFrameSide":{"prefab":{"prefabName":"StructureFrameSide","prefabHash":-302420053,"desc":"More durable than the Iron Frame, steel frames also provide variations for more ornate constructions.","name":"Steel Frame (Side)"},"structure":{"smallGrid":false}},"StructureFridgeBig":{"prefab":{"prefabName":"StructureFridgeBig","prefabHash":958476921,"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.","name":"Fridge (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureFridgeSmall":{"prefab":{"prefabName":"StructureFridgeSmall","prefabHash":751887598,"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.","name":"Fridge Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureFurnace":{"prefab":{"prefabName":"StructureFurnace","prefabHash":1947944864,"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.","name":"Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"},{"typ":"Data","role":"None"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":false,"hasOpenState":true,"hasReagents":true}},"StructureFuselageTypeA1":{"prefab":{"prefabName":"StructureFuselageTypeA1","prefabHash":1033024712,"desc":"","name":"Fuselage (Type A1)"},"structure":{"smallGrid":false}},"StructureFuselageTypeA2":{"prefab":{"prefabName":"StructureFuselageTypeA2","prefabHash":-1533287054,"desc":"","name":"Fuselage (Type A2)"},"structure":{"smallGrid":false}},"StructureFuselageTypeA4":{"prefab":{"prefabName":"StructureFuselageTypeA4","prefabHash":1308115015,"desc":"","name":"Fuselage (Type A4)"},"structure":{"smallGrid":false}},"StructureFuselageTypeC5":{"prefab":{"prefabName":"StructureFuselageTypeC5","prefabHash":147395155,"desc":"","name":"Fuselage (Type C5)"},"structure":{"smallGrid":false}},"StructureGasGenerator":{"prefab":{"prefabName":"StructureGasGenerator","prefabHash":1165997963,"desc":"","name":"Gas Fuel Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGasMixer":{"prefab":{"prefabName":"StructureGasMixer","prefabHash":2104106366,"desc":"Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%.","name":"Gas Mixer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGasSensor":{"prefab":{"prefabName":"StructureGasSensor","prefabHash":-1252983604,"desc":"Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents.","name":"Gas Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasTankStorage":{"prefab":{"prefabName":"StructureGasTankStorage","prefabHash":1632165346,"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.","name":"Gas Tank Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"PrefabHash":"Read","Pressure":"Read","Quantity":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioNitrousOxide":"Read","RatioOxygen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","ReferenceId":"Read","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalFemale":{"prefab":{"prefabName":"StructureGasUmbilicalFemale","prefabHash":-1680477930,"desc":"","name":"Umbilical Socket (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureGasUmbilicalFemaleSide","prefabHash":-648683847,"desc":"","name":"Umbilical Socket Angle (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalMale":{"prefab":{"prefabName":"StructureGasUmbilicalMale","prefabHash":-1814939203,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGlassDoor":{"prefab":{"prefabName":"StructureGlassDoor","prefabHash":-324331872,"desc":"0.Operate\n1.Logic","name":"Glass Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGovernedGasEngine":{"prefab":{"prefabName":"StructureGovernedGasEngine","prefabHash":-214232602,"desc":"The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas.","name":"Pumped Gas Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGroundBasedTelescope":{"prefab":{"prefabName":"StructureGroundBasedTelescope","prefabHash":-619745681,"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.","name":"Telescope"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGrowLight":{"prefab":{"prefabName":"StructureGrowLight","prefabHash":-1758710260,"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. ","name":"Grow Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHarvie":{"prefab":{"prefabName":"StructureHarvie","prefabHash":958056199,"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.","name":"Harvie"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Plant"},{"name":"Export","typ":"None"},{"name":"Hand","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangeLiquidtoGas":{"prefab":{"prefabName":"StructureHeatExchangeLiquidtoGas","prefabHash":944685608,"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.","name":"Heat Exchanger - Liquid + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangerGastoGas":{"prefab":{"prefabName":"StructureHeatExchangerGastoGas","prefabHash":21266291,"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.","name":"Heat Exchanger - Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangerLiquidtoLiquid":{"prefab":{"prefabName":"StructureHeatExchangerLiquidtoLiquid","prefabHash":-613784254,"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","name":"Heat Exchanger - Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHorizontalAutoMiner":{"prefab":{"prefabName":"StructureHorizontalAutoMiner","prefabHash":1070427573,"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","name":"OGRE"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureHydraulicPipeBender":{"prefab":{"prefabName":"StructureHydraulicPipeBender","prefabHash":-1888248335,"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.","name":"Hydraulic Pipe Bender"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureHydroponicsStation":{"prefab":{"prefabName":"StructureHydroponicsStation","prefabHash":1441767298,"desc":"","name":"Hydroponics Station"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHydroponicsTray":{"prefab":{"prefabName":"StructureHydroponicsTray","prefabHash":1464854517,"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.","name":"Hydroponics Tray"},"structure":{"smallGrid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}]},"StructureHydroponicsTrayData":{"prefab":{"prefabName":"StructureHydroponicsTrayData","prefabHash":-1841632400,"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.","name":"Hydroponics Device"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureIceCrusher":{"prefab":{"prefabName":"StructureIceCrusher","prefabHash":443849486,"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.","name":"Ice Crusher"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureIgniter":{"prefab":{"prefabName":"StructureIgniter","prefabHash":1005491513,"desc":"It gets the party started. Especially if that party is an explosive gas mixture.","name":"Igniter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureInLineTankGas1x1":{"prefab":{"prefabName":"StructureInLineTankGas1x1","prefabHash":-1693382705,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Gas"},"structure":{"smallGrid":true}},"StructureInLineTankGas1x2":{"prefab":{"prefabName":"StructureInLineTankGas1x2","prefabHash":35149429,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Gas"},"structure":{"smallGrid":true}},"StructureInLineTankLiquid1x1":{"prefab":{"prefabName":"StructureInLineTankLiquid1x1","prefabHash":543645499,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Liquid"},"structure":{"smallGrid":true}},"StructureInLineTankLiquid1x2":{"prefab":{"prefabName":"StructureInLineTankLiquid1x2","prefabHash":-1183969663,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankGas1x1":{"prefab":{"prefabName":"StructureInsulatedInLineTankGas1x1","prefabHash":1818267386,"desc":"","name":"Insulated In-Line Tank Small Gas"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankGas1x2":{"prefab":{"prefabName":"StructureInsulatedInLineTankGas1x2","prefabHash":-177610944,"desc":"","name":"Insulated In-Line Tank Gas"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankLiquid1x1":{"prefab":{"prefabName":"StructureInsulatedInLineTankLiquid1x1","prefabHash":-813426145,"desc":"","name":"Insulated In-Line Tank Small Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankLiquid1x2":{"prefab":{"prefabName":"StructureInsulatedInLineTankLiquid1x2","prefabHash":1452100517,"desc":"","name":"Insulated In-Line Tank Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCorner":{"prefab":{"prefabName":"StructureInsulatedPipeCorner","prefabHash":-1967711059,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Corner)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction","prefabHash":-92778058,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction3":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction3","prefabHash":1328210035,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction4":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction4","prefabHash":-783387184,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction5":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction5","prefabHash":-1505147578,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction6":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction6","prefabHash":1061164284,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCorner":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCorner","prefabHash":1713710802,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Corner)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction","prefabHash":1926651727,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction4":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction4","prefabHash":363303270,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction5":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction5","prefabHash":1654694384,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction6":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction6","prefabHash":-72748982,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidStraight":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidStraight","prefabHash":295678685,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Straight)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidTJunction":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidTJunction","prefabHash":-532384855,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeStraight":{"prefab":{"prefabName":"StructureInsulatedPipeStraight","prefabHash":2134172356,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Straight)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeTJunction":{"prefab":{"prefabName":"StructureInsulatedPipeTJunction","prefabHash":-2076086215,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedTankConnector":{"prefab":{"prefabName":"StructureInsulatedTankConnector","prefabHash":-31273349,"desc":"","name":"Insulated Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructureInsulatedTankConnectorLiquid":{"prefab":{"prefabName":"StructureInsulatedTankConnectorLiquid","prefabHash":-1602030414,"desc":"","name":"Insulated Tank Connector Liquid"},"structure":{"smallGrid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureInteriorDoorGlass":{"prefab":{"prefabName":"StructureInteriorDoorGlass","prefabHash":-2096421875,"desc":"0.Operate\n1.Logic","name":"Interior Door Glass"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorPadded":{"prefab":{"prefabName":"StructureInteriorDoorPadded","prefabHash":847461335,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorPaddedThin":{"prefab":{"prefabName":"StructureInteriorDoorPaddedThin","prefabHash":1981698201,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded Thin"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorTriangle":{"prefab":{"prefabName":"StructureInteriorDoorTriangle","prefabHash":-1182923101,"desc":"0.Operate\n1.Logic","name":"Interior Door Triangle"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureKlaxon":{"prefab":{"prefabName":"StructureKlaxon","prefabHash":-828056979,"desc":"Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output.","name":"Klaxon Speaker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLadder":{"prefab":{"prefabName":"StructureLadder","prefabHash":-415420281,"desc":"","name":"Ladder"},"structure":{"smallGrid":true}},"StructureLadderEnd":{"prefab":{"prefabName":"StructureLadderEnd","prefabHash":1541734993,"desc":"","name":"Ladder End"},"structure":{"smallGrid":true}},"StructureLargeDirectHeatExchangeGastoGas":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeGastoGas","prefabHash":-1230658883,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeDirectHeatExchangeGastoLiquid":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeGastoLiquid","prefabHash":1412338038,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeLiquidtoLiquid","prefabHash":792686502,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchange - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeExtendableRadiator":{"prefab":{"prefabName":"StructureLargeExtendableRadiator","prefabHash":-566775170,"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.","name":"Large Extendable Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Horizontal":"ReadWrite","Lock":"ReadWrite","Maximum":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLargeHangerDoor":{"prefab":{"prefabName":"StructureLargeHangerDoor","prefabHash":-1351081801,"desc":"1 x 3 modular door piece for building hangar doors.","name":"Large Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureLargeSatelliteDish":{"prefab":{"prefabName":"StructureLargeSatelliteDish","prefabHash":1913391845,"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.","name":"Large Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLaunchMount":{"prefab":{"prefabName":"StructureLaunchMount","prefabHash":-558953231,"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.","name":"Launch Mount"},"structure":{"smallGrid":false}},"StructureLightLong":{"prefab":{"prefabName":"StructureLightLong","prefabHash":797794350,"desc":"","name":"Wall Light (Long)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightLongAngled":{"prefab":{"prefabName":"StructureLightLongAngled","prefabHash":1847265835,"desc":"","name":"Wall Light (Long Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightLongWide":{"prefab":{"prefabName":"StructureLightLongWide","prefabHash":555215790,"desc":"","name":"Wall Light (Long Wide)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRound":{"prefab":{"prefabName":"StructureLightRound","prefabHash":1514476632,"desc":"Description coming.","name":"Light Round"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRoundAngled":{"prefab":{"prefabName":"StructureLightRoundAngled","prefabHash":1592905386,"desc":"Description coming.","name":"Light Round (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRoundSmall":{"prefab":{"prefabName":"StructureLightRoundSmall","prefabHash":1436121888,"desc":"Description coming.","name":"Light Round (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidDrain":{"prefab":{"prefabName":"StructureLiquidDrain","prefabHash":1687692899,"desc":"When connected to power and activated, it pumps liquid from a liquid network into the world.","name":"Active Liquid Outlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeAnalyzer":{"prefab":{"prefabName":"StructureLiquidPipeAnalyzer","prefabHash":-2113838091,"desc":"","name":"Liquid Pipe Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeHeater":{"prefab":{"prefabName":"StructureLiquidPipeHeater","prefabHash":-287495560,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeOneWayValve":{"prefab":{"prefabName":"StructureLiquidPipeOneWayValve","prefabHash":-782453061,"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..","name":"One Way Valve (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeRadiator":{"prefab":{"prefabName":"StructureLiquidPipeRadiator","prefabHash":2072805863,"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.","name":"Liquid Pipe Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPressureRegulator":{"prefab":{"prefabName":"StructureLiquidPressureRegulator","prefabHash":482248766,"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.","name":"Liquid Volume Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankBig":{"prefab":{"prefabName":"StructureLiquidTankBig","prefabHash":1098900430,"desc":"","name":"Liquid Tank Big"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankBigInsulated":{"prefab":{"prefabName":"StructureLiquidTankBigInsulated","prefabHash":-1430440215,"desc":"","name":"Insulated Liquid Tank Big"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankSmall":{"prefab":{"prefabName":"StructureLiquidTankSmall","prefabHash":1988118157,"desc":"","name":"Liquid Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankSmallInsulated":{"prefab":{"prefabName":"StructureLiquidTankSmallInsulated","prefabHash":608607718,"desc":"","name":"Insulated Liquid Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankStorage":{"prefab":{"prefabName":"StructureLiquidTankStorage","prefabHash":1691898022,"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.","name":"Liquid Tank Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"PrefabHash":"Read","Pressure":"Read","Quantity":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioNitrousOxide":"Read","RatioOxygen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","ReferenceId":"Read","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTurboVolumePump":{"prefab":{"prefabName":"StructureLiquidTurboVolumePump","prefabHash":-1051805505,"desc":"Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalFemale":{"prefab":{"prefabName":"StructureLiquidUmbilicalFemale","prefabHash":1734723642,"desc":"","name":"Umbilical Socket (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureLiquidUmbilicalFemaleSide","prefabHash":1220870319,"desc":"","name":"Umbilical Socket Angle (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalMale":{"prefab":{"prefabName":"StructureLiquidUmbilicalMale","prefabHash":-1798420047,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureLiquidValve":{"prefab":{"prefabName":"StructureLiquidValve","prefabHash":1849974453,"desc":"","name":"Liquid Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidVolumePump":{"prefab":{"prefabName":"StructureLiquidVolumePump","prefabHash":-454028979,"desc":"","name":"Liquid Volume Pump"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLockerSmall":{"prefab":{"prefabName":"StructureLockerSmall","prefabHash":-647164662,"desc":"","name":"Locker (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicBatchReader":{"prefab":{"prefabName":"StructureLogicBatchReader","prefabHash":264413729,"desc":"","name":"Batch Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicBatchSlotReader":{"prefab":{"prefabName":"StructureLogicBatchSlotReader","prefabHash":436888930,"desc":"","name":"Batch Slot Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicBatchWriter":{"prefab":{"prefabName":"StructureLogicBatchWriter","prefabHash":1415443359,"desc":"","name":"Batch Writer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","ForceWrite":"Write","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicButton":{"prefab":{"prefabName":"StructureLogicButton","prefabHash":491845673,"desc":"","name":"Button"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicCompare":{"prefab":{"prefabName":"StructureLogicCompare","prefabHash":-1489728908,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Compare"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicDial":{"prefab":{"prefabName":"StructureLogicDial","prefabHash":554524804,"desc":"An assignable dial with up to 1000 modes.","name":"Dial"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicGate":{"prefab":{"prefabName":"StructureLogicGate","prefabHash":1942143074,"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.","name":"Logic Gate"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicHashGen":{"prefab":{"prefabName":"StructureLogicHashGen","prefabHash":2077593121,"desc":"","name":"Logic Hash Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicMath":{"prefab":{"prefabName":"StructureLogicMath","prefabHash":1657691323,"desc":"0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log","name":"Logic Math"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMathUnary":{"prefab":{"prefabName":"StructureLogicMathUnary","prefabHash":-1160020195,"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","name":"Math Unary"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMemory":{"prefab":{"prefabName":"StructureLogicMemory","prefabHash":-851746783,"desc":"","name":"Logic Memory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicMinMax":{"prefab":{"prefabName":"StructureLogicMinMax","prefabHash":929022276,"desc":"0.Greater\n1.Less","name":"Logic Min/Max"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"modes":{"0":"Greater","1":"Less"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMirror":{"prefab":{"prefabName":"StructureLogicMirror","prefabHash":2096189278,"desc":"","name":"Logic Mirror"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicReader":{"prefab":{"prefabName":"StructureLogicReader","prefabHash":-345383640,"desc":"","name":"Logic Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicReagentReader":{"prefab":{"prefabName":"StructureLogicReagentReader","prefabHash":-124308857,"desc":"","name":"Reagent Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicRocketDownlink":{"prefab":{"prefabName":"StructureLogicRocketDownlink","prefabHash":876108549,"desc":"","name":"Logic Rocket Downlink"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicRocketUplink":{"prefab":{"prefabName":"StructureLogicRocketUplink","prefabHash":546002924,"desc":"","name":"Logic Uplink"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSelect":{"prefab":{"prefabName":"StructureLogicSelect","prefabHash":1822736084,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Select"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSlotReader":{"prefab":{"prefabName":"StructureLogicSlotReader","prefabHash":-767867194,"desc":"","name":"Slot Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSorter":{"prefab":{"prefabName":"StructureLogicSorter","prefabHash":873418029,"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.","name":"Logic Sorter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"All","1":"Any","2":"None"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Chute","role":"Output2"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"instructions":{"FilterPrefabHashEquals":{"description":"| 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":{"description":"| 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":{"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 |","typ":"SorterInstruction","value":5},"FilterSlotTypeCompare":{"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 |","typ":"SorterInstruction","value":4},"FilterSortingClassCompare":{"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 |","typ":"SorterInstruction","value":3},"LimitNextExecutionByCount":{"description":"| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |","typ":"SorterInstruction","value":6}},"memoryAccess":"ReadWrite","memorySize":32}},"StructureLogicSwitch":{"prefab":{"prefabName":"StructureLogicSwitch","prefabHash":1220484876,"desc":"","name":"Lever"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicSwitch2":{"prefab":{"prefabName":"StructureLogicSwitch2","prefabHash":321604921,"desc":"","name":"Switch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicTransmitter":{"prefab":{"prefabName":"StructureLogicTransmitter","prefabHash":-693235651,"desc":"Connects to Logic Transmitter","name":"Logic Transmitter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"modes":{"0":"Passive","1":"Active"},"transmissionReceiver":true,"wirelessLogic":true,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicWriter":{"prefab":{"prefabName":"StructureLogicWriter","prefabHash":-1326019434,"desc":"","name":"Logic Writer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","ForceWrite":"Write","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicWriterSwitch":{"prefab":{"prefabName":"StructureLogicWriterSwitch","prefabHash":-1321250424,"desc":"","name":"Logic Writer Switch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","ForceWrite":"Write","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureManualHatch":{"prefab":{"prefabName":"StructureManualHatch","prefabHash":-1808154199,"desc":"Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock.","name":"Manual Hatch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureMediumConvectionRadiator":{"prefab":{"prefabName":"StructureMediumConvectionRadiator","prefabHash":-1918215845,"desc":"A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumConvectionRadiatorLiquid":{"prefab":{"prefabName":"StructureMediumConvectionRadiatorLiquid","prefabHash":-1169014183,"desc":"A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumHangerDoor":{"prefab":{"prefabName":"StructureMediumHangerDoor","prefabHash":-566348148,"desc":"1 x 2 modular door piece for building hangar doors.","name":"Medium Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureMediumRadiator":{"prefab":{"prefabName":"StructureMediumRadiator","prefabHash":-975966237,"desc":"A stand-alone radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRadiatorLiquid":{"prefab":{"prefabName":"StructureMediumRadiatorLiquid","prefabHash":-1141760613,"desc":"A stand-alone liquid radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRocketGasFuelTank":{"prefab":{"prefabName":"StructureMediumRocketGasFuelTank","prefabHash":-1093860567,"desc":"","name":"Gas Capsule Tank Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Output"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRocketLiquidFuelTank":{"prefab":{"prefabName":"StructureMediumRocketLiquidFuelTank","prefabHash":1143639539,"desc":"","name":"Liquid Capsule Tank Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Output"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMotionSensor":{"prefab":{"prefabName":"StructureMotionSensor","prefabHash":-1713470563,"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.","name":"Motion Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureNitrolyzer":{"prefab":{"prefabName":"StructureNitrolyzer","prefabHash":1898243702,"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.","name":"Nitrolyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureOccupancySensor":{"prefab":{"prefabName":"StructureOccupancySensor","prefabHash":322782515,"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.","name":"Occupancy Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureOverheadShortCornerLocker":{"prefab":{"prefabName":"StructureOverheadShortCornerLocker","prefabHash":-1794932560,"desc":"","name":"Overhead Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureOverheadShortLocker":{"prefab":{"prefabName":"StructureOverheadShortLocker","prefabHash":1468249454,"desc":"","name":"Overhead Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePassiveLargeRadiatorGas":{"prefab":{"prefabName":"StructurePassiveLargeRadiatorGas","prefabHash":2066977095,"desc":"Has been replaced by Medium Convection Radiator.","name":"Medium Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveLargeRadiatorLiquid":{"prefab":{"prefabName":"StructurePassiveLargeRadiatorLiquid","prefabHash":24786172,"desc":"Has been replaced by Medium Convection Radiator Liquid.","name":"Medium Convection Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveLiquidDrain":{"prefab":{"prefabName":"StructurePassiveLiquidDrain","prefabHash":1812364811,"desc":"Moves liquids from a pipe network to the world atmosphere.","name":"Passive Liquid Drain"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveVent":{"prefab":{"prefabName":"StructurePassiveVent","prefabHash":335498166,"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. ","name":"Passive Vent"},"structure":{"smallGrid":true}},"StructurePassiveVentInsulated":{"prefab":{"prefabName":"StructurePassiveVentInsulated","prefabHash":1363077139,"desc":"","name":"Insulated Passive Vent"},"structure":{"smallGrid":true}},"StructurePassthroughHeatExchangerGasToGas":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerGasToGas","prefabHash":-1674187440,"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.","name":"CounterFlow Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Output2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassthroughHeatExchangerGasToLiquid":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerGasToLiquid","prefabHash":1928991265,"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.","name":"CounterFlow Heat Exchanger - Gas + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassthroughHeatExchangerLiquidToLiquid":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerLiquidToLiquid","prefabHash":-1472829583,"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.","name":"CounterFlow Heat Exchanger - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePictureFrameThickLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThickLandscapeLarge","prefabHash":-1434523206,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThickLandscapeSmall","prefabHash":-2041566697,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThickMountLandscapeLarge","prefabHash":950004659,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThickMountLandscapeSmall","prefabHash":347154462,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThickMountPortraitLarge","prefabHash":-1459641358,"desc":"","name":"Picture Frame Thick Mount Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThickMountPortraitSmall","prefabHash":-2066653089,"desc":"","name":"Picture Frame Thick Mount Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThickPortraitLarge","prefabHash":-1686949570,"desc":"","name":"Picture Frame Thick Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThickPortraitSmall","prefabHash":-1218579821,"desc":"","name":"Picture Frame Thick Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThinLandscapeLarge","prefabHash":-1418288625,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThinLandscapeSmall","prefabHash":-2024250974,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThinMountLandscapeLarge","prefabHash":-1146760430,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThinMountLandscapeSmall","prefabHash":-1752493889,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThinMountPortraitLarge","prefabHash":1094895077,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThinMountPortraitSmall","prefabHash":1835796040,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThinPortraitLarge","prefabHash":1212777087,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThinPortraitSmall","prefabHash":1684488658,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"smallGrid":true}},"StructurePipeAnalysizer":{"prefab":{"prefabName":"StructurePipeAnalysizer","prefabHash":435685051,"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.","name":"Pipe Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePipeCorner":{"prefab":{"prefabName":"StructurePipeCorner","prefabHash":-1785673561,"desc":"You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Corner)"},"structure":{"smallGrid":true}},"StructurePipeCowl":{"prefab":{"prefabName":"StructurePipeCowl","prefabHash":465816159,"desc":"","name":"Pipe Cowl"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction":{"prefab":{"prefabName":"StructurePipeCrossJunction","prefabHash":-1405295588,"desc":"You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction3":{"prefab":{"prefabName":"StructurePipeCrossJunction3","prefabHash":2038427184,"desc":"You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction4":{"prefab":{"prefabName":"StructurePipeCrossJunction4","prefabHash":-417629293,"desc":"You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction5":{"prefab":{"prefabName":"StructurePipeCrossJunction5","prefabHash":-1877193979,"desc":"You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction6":{"prefab":{"prefabName":"StructurePipeCrossJunction6","prefabHash":152378047,"desc":"You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeHeater":{"prefab":{"prefabName":"StructurePipeHeater","prefabHash":-419758574,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePipeIgniter":{"prefab":{"prefabName":"StructurePipeIgniter","prefabHash":1286441942,"desc":"Ignites the atmosphere inside the attached pipe network.","name":"Pipe Igniter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeInsulatedLiquidCrossJunction":{"prefab":{"prefabName":"StructurePipeInsulatedLiquidCrossJunction","prefabHash":-2068497073,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeLabel":{"prefab":{"prefabName":"StructurePipeLabel","prefabHash":-999721119,"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.","name":"Pipe Label"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeLiquidCorner":{"prefab":{"prefabName":"StructurePipeLiquidCorner","prefabHash":-1856720921,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Corner)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction","prefabHash":1848735691,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction3":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction3","prefabHash":1628087508,"desc":"You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction4":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction4","prefabHash":-9555593,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction5":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction5","prefabHash":-2006384159,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction6":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction6","prefabHash":291524699,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidStraight":{"prefab":{"prefabName":"StructurePipeLiquidStraight","prefabHash":667597982,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Straight)"},"structure":{"smallGrid":true}},"StructurePipeLiquidTJunction":{"prefab":{"prefabName":"StructurePipeLiquidTJunction","prefabHash":262616717,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructurePipeMeter":{"prefab":{"prefabName":"StructurePipeMeter","prefabHash":-1798362329,"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\"","name":"Pipe Meter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeOneWayValve":{"prefab":{"prefabName":"StructurePipeOneWayValve","prefabHash":1580412404,"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","name":"One Way Valve (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeOrgan":{"prefab":{"prefabName":"StructurePipeOrgan","prefabHash":1305252611,"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.","name":"Pipe Organ"},"structure":{"smallGrid":true}},"StructurePipeRadiator":{"prefab":{"prefabName":"StructurePipeRadiator","prefabHash":1696603168,"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.","name":"Pipe Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeRadiatorFlat":{"prefab":{"prefabName":"StructurePipeRadiatorFlat","prefabHash":-399883995,"desc":"A pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeRadiatorFlatLiquid":{"prefab":{"prefabName":"StructurePipeRadiatorFlatLiquid","prefabHash":2024754523,"desc":"A liquid pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeStraight":{"prefab":{"prefabName":"StructurePipeStraight","prefabHash":73728932,"desc":"You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Straight)"},"structure":{"smallGrid":true}},"StructurePipeTJunction":{"prefab":{"prefabName":"StructurePipeTJunction","prefabHash":-913817472,"desc":"You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructurePlanter":{"prefab":{"prefabName":"StructurePlanter","prefabHash":-1125641329,"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).","name":"Planter"},"structure":{"smallGrid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Plant","typ":"Plant"}]},"StructurePlatformLadderOpen":{"prefab":{"prefabName":"StructurePlatformLadderOpen","prefabHash":1559586682,"desc":"","name":"Ladder Platform"},"structure":{"smallGrid":false}},"StructurePlinth":{"prefab":{"prefabName":"StructurePlinth","prefabHash":989835703,"desc":"","name":"Plinth"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructurePortablesConnector":{"prefab":{"prefabName":"StructurePortablesConnector","prefabHash":-899013427,"desc":"","name":"Portables Connector"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Maximum":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePowerConnector":{"prefab":{"prefabName":"StructurePowerConnector","prefabHash":-782951720,"desc":"Attaches a Kit (Portable Generator) to a power network.","name":"Power Connector"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Portable Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePowerTransmitter":{"prefab":{"prefabName":"StructurePowerTransmitter","prefabHash":-65087121,"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.","name":"Microwave Power Transmitter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerTransmitterOmni":{"prefab":{"prefabName":"StructurePowerTransmitterOmni","prefabHash":-327468845,"desc":"","name":"Power Transmitter Omni"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerTransmitterReceiver":{"prefab":{"prefabName":"StructurePowerTransmitterReceiver","prefabHash":1195820278,"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","name":"Microwave Power Receiver"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalFemale":{"prefab":{"prefabName":"StructurePowerUmbilicalFemale","prefabHash":101488029,"desc":"","name":"Umbilical Socket (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalFemaleSide":{"prefab":{"prefabName":"StructurePowerUmbilicalFemaleSide","prefabHash":1922506192,"desc":"","name":"Umbilical Socket Angle (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalMale":{"prefab":{"prefabName":"StructurePowerUmbilicalMale","prefabHash":1529453938,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructurePoweredVent":{"prefab":{"prefabName":"StructurePoweredVent","prefabHash":938836756,"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.","name":"Powered Vent"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureExternal":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePoweredVentLarge":{"prefab":{"prefabName":"StructurePoweredVentLarge","prefabHash":-785498334,"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.","name":"Powered Vent Large"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureExternal":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressurantValve":{"prefab":{"prefabName":"StructurePressurantValve","prefabHash":23052817,"desc":"Pumps gas into a liquid pipe in order to raise the pressure","name":"Pressurant Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressureFedGasEngine":{"prefab":{"prefabName":"StructurePressureFedGasEngine","prefabHash":-624011170,"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.","name":"Pressure Fed Gas Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressureFedLiquidEngine":{"prefab":{"prefabName":"StructurePressureFedLiquidEngine","prefabHash":379750958,"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.","name":"Pressure Fed Liquid Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateLarge":{"prefab":{"prefabName":"StructurePressurePlateLarge","prefabHash":-2008706143,"desc":"","name":"Trigger Plate (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateMedium":{"prefab":{"prefabName":"StructurePressurePlateMedium","prefabHash":1269458680,"desc":"","name":"Trigger Plate (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateSmall":{"prefab":{"prefabName":"StructurePressurePlateSmall","prefabHash":-1536471028,"desc":"","name":"Trigger Plate (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressureRegulator":{"prefab":{"prefabName":"StructurePressureRegulator","prefabHash":209854039,"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.","name":"Pressure Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureProximitySensor":{"prefab":{"prefabName":"StructureProximitySensor","prefabHash":568800213,"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.","name":"Proximity Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePumpedLiquidEngine":{"prefab":{"prefabName":"StructurePumpedLiquidEngine","prefabHash":-2031440019,"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","name":"Pumped Liquid Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePurgeValve":{"prefab":{"prefabName":"StructurePurgeValve","prefabHash":-737232128,"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.","name":"Purge Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRailing":{"prefab":{"prefabName":"StructureRailing","prefabHash":-1756913871,"desc":"\"Safety third.\"","name":"Railing Industrial (Type 1)"},"structure":{"smallGrid":false}},"StructureRecycler":{"prefab":{"prefabName":"StructureRecycler","prefabHash":-1633947337,"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.","name":"Recycler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureRefrigeratedVendingMachine":{"prefab":{"prefabName":"StructureRefrigeratedVendingMachine","prefabHash":-1577831321,"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. ","name":"Refrigerated Vending Machine"},"structure":{"smallGrid":true},"logic":{"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":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureReinforcedCompositeWindow":{"prefab":{"prefabName":"StructureReinforcedCompositeWindow","prefabHash":2027713511,"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.","name":"Reinforced Window (Composite)"},"structure":{"smallGrid":false}},"StructureReinforcedCompositeWindowSteel":{"prefab":{"prefabName":"StructureReinforcedCompositeWindowSteel","prefabHash":-816454272,"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.","name":"Reinforced Window (Composite Steel)"},"structure":{"smallGrid":false}},"StructureReinforcedWallPaddedWindow":{"prefab":{"prefabName":"StructureReinforcedWallPaddedWindow","prefabHash":1939061729,"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.","name":"Reinforced Window (Padded)"},"structure":{"smallGrid":false}},"StructureReinforcedWallPaddedWindowThin":{"prefab":{"prefabName":"StructureReinforcedWallPaddedWindowThin","prefabHash":158502707,"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.","name":"Reinforced Window (Thin)"},"structure":{"smallGrid":false}},"StructureResearchMachine":{"prefab":{"prefabName":"StructureResearchMachine","prefabHash":-796627526,"desc":"","name":"Research Machine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureRocketAvionics":{"prefab":{"prefabName":"StructureRocketAvionics","prefabHash":808389066,"desc":"","name":"Rocket Avionics"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureRocketCelestialTracker":{"prefab":{"prefabName":"StructureRocketCelestialTracker","prefabHash":997453927,"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.","name":"Rocket Celestial Tracker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"CelestialHash":"Read","Error":"Read","Horizontal":"Read","Index":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Vertical":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"instructions":{"BodyOrientation":{"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 |","typ":"CelestialTracking","value":1}},"memoryAccess":"Read","memorySize":12}},"StructureRocketCircuitHousing":{"prefab":{"prefabName":"StructureRocketCircuitHousing","prefabHash":150135861,"desc":"","name":"Rocket Circuit Housing"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","LineNumber":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","LineNumber":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"}],"devicePinsLength":6,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"StructureRocketEngineTiny":{"prefab":{"prefabName":"StructureRocketEngineTiny","prefabHash":178472613,"desc":"","name":"Rocket Engine (Tiny)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketManufactory":{"prefab":{"prefabName":"StructureRocketManufactory","prefabHash":1781051034,"desc":"","name":"Rocket Manufactory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureRocketMiner":{"prefab":{"prefabName":"StructureRocketMiner","prefabHash":-2087223687,"desc":"Gathers available resources at the rocket's current space location.","name":"Rocket Miner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"ClearMemory":"Write","DrillCondition":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"},{"name":"Drill Head Slot","typ":"DrillHead"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketScanner":{"prefab":{"prefabName":"StructureRocketScanner","prefabHash":2014252591,"desc":"","name":"Rocket Scanner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Scanner Head Slot","typ":"ScanningHead"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketTower":{"prefab":{"prefabName":"StructureRocketTower","prefabHash":-654619479,"desc":"","name":"Launch Tower"},"structure":{"smallGrid":false}},"StructureRocketTransformerSmall":{"prefab":{"prefabName":"StructureRocketTransformerSmall","prefabHash":518925193,"desc":"","name":"Transformer Small (Rocket)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRover":{"prefab":{"prefabName":"StructureRover","prefabHash":806513938,"desc":"","name":"Rover Frame"},"structure":{"smallGrid":false}},"StructureSDBHopper":{"prefab":{"prefabName":"StructureSDBHopper","prefabHash":-1875856925,"desc":"","name":"SDB Hopper"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSDBHopperAdvanced":{"prefab":{"prefabName":"StructureSDBHopperAdvanced","prefabHash":467225612,"desc":"","name":"SDB Hopper Advanced"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSDBSilo":{"prefab":{"prefabName":"StructureSDBSilo","prefabHash":1155865682,"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.","name":"SDB Silo"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSatelliteDish":{"prefab":{"prefabName":"StructureSatelliteDish","prefabHash":439026183,"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.","name":"Medium Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSecurityPrinter":{"prefab":{"prefabName":"StructureSecurityPrinter","prefabHash":-641491515,"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","name":"Security Printer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureShelf":{"prefab":{"prefabName":"StructureShelf","prefabHash":1172114950,"desc":"","name":"Shelf"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"StructureShelfMedium":{"prefab":{"prefabName":"StructureShelfMedium","prefabHash":182006674,"desc":"A shelf for putting things on, so you can see them.","name":"Shelf Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShortCornerLocker":{"prefab":{"prefabName":"StructureShortCornerLocker","prefabHash":1330754486,"desc":"","name":"Short Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShortLocker":{"prefab":{"prefabName":"StructureShortLocker","prefabHash":-554553467,"desc":"","name":"Short Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShower":{"prefab":{"prefabName":"StructureShower","prefabHash":-775128944,"desc":"","name":"Shower"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Maximum":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShowerPowered":{"prefab":{"prefabName":"StructureShowerPowered","prefabHash":-1081797501,"desc":"","name":"Shower (Powered)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSign1x1":{"prefab":{"prefabName":"StructureSign1x1","prefabHash":879058460,"desc":"","name":"Sign 1x1"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSign2x1":{"prefab":{"prefabName":"StructureSign2x1","prefabHash":908320837,"desc":"","name":"Sign 2x1"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSingleBed":{"prefab":{"prefabName":"StructureSingleBed","prefabHash":-492611,"desc":"Description coming.","name":"Single Bed"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSleeper":{"prefab":{"prefabName":"StructureSleeper","prefabHash":-1467449329,"desc":"","name":"Sleeper"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperLeft":{"prefab":{"prefabName":"StructureSleeperLeft","prefabHash":1213495833,"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.","name":"Sleeper Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperRight":{"prefab":{"prefabName":"StructureSleeperRight","prefabHash":-1812330717,"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.","name":"Sleeper Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperVertical":{"prefab":{"prefabName":"StructureSleeperVertical","prefabHash":-1300059018,"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.","name":"Sleeper Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperVerticalDroid":{"prefab":{"prefabName":"StructureSleeperVerticalDroid","prefabHash":1382098999,"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.","name":"Droid Sleeper Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSmallDirectHeatExchangeGastoGas":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeGastoGas","prefabHash":1310303582,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallDirectHeatExchangeLiquidtoGas":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeLiquidtoGas","prefabHash":1825212016,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Gas "},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeLiquidtoLiquid","prefabHash":-507770416,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallSatelliteDish":{"prefab":{"prefabName":"StructureSmallSatelliteDish","prefabHash":-2138748650,"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.","name":"Small Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSmallTableBacklessDouble":{"prefab":{"prefabName":"StructureSmallTableBacklessDouble","prefabHash":-1633000411,"desc":"","name":"Small (Table Backless Double)"},"structure":{"smallGrid":true}},"StructureSmallTableBacklessSingle":{"prefab":{"prefabName":"StructureSmallTableBacklessSingle","prefabHash":-1897221677,"desc":"","name":"Small (Table Backless Single)"},"structure":{"smallGrid":true}},"StructureSmallTableDinnerSingle":{"prefab":{"prefabName":"StructureSmallTableDinnerSingle","prefabHash":1260651529,"desc":"","name":"Small (Table Dinner Single)"},"structure":{"smallGrid":true}},"StructureSmallTableRectangleDouble":{"prefab":{"prefabName":"StructureSmallTableRectangleDouble","prefabHash":-660451023,"desc":"","name":"Small (Table Rectangle Double)"},"structure":{"smallGrid":true}},"StructureSmallTableRectangleSingle":{"prefab":{"prefabName":"StructureSmallTableRectangleSingle","prefabHash":-924678969,"desc":"","name":"Small (Table Rectangle Single)"},"structure":{"smallGrid":true}},"StructureSmallTableThickDouble":{"prefab":{"prefabName":"StructureSmallTableThickDouble","prefabHash":-19246131,"desc":"","name":"Small (Table Thick Double)"},"structure":{"smallGrid":true}},"StructureSmallTableThickSingle":{"prefab":{"prefabName":"StructureSmallTableThickSingle","prefabHash":-291862981,"desc":"","name":"Small Table (Thick Single)"},"structure":{"smallGrid":true}},"StructureSolarPanel":{"prefab":{"prefabName":"StructureSolarPanel","prefabHash":-2045627372,"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.","name":"Solar Panel"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanel45":{"prefab":{"prefabName":"StructureSolarPanel45","prefabHash":-1554349863,"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.","name":"Solar Panel (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanel45Reinforced":{"prefab":{"prefabName":"StructureSolarPanel45Reinforced","prefabHash":930865127,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelDual":{"prefab":{"prefabName":"StructureSolarPanelDual","prefabHash":-539224550,"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.","name":"Solar Panel (Dual)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelDualReinforced":{"prefab":{"prefabName":"StructureSolarPanelDualReinforced","prefabHash":-1545574413,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Dual)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelFlat":{"prefab":{"prefabName":"StructureSolarPanelFlat","prefabHash":1968102968,"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.","name":"Solar Panel (Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelFlatReinforced":{"prefab":{"prefabName":"StructureSolarPanelFlatReinforced","prefabHash":1697196770,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelReinforced":{"prefab":{"prefabName":"StructureSolarPanelReinforced","prefabHash":-934345724,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolidFuelGenerator":{"prefab":{"prefabName":"StructureSolidFuelGenerator","prefabHash":813146305,"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.","name":"Generator (Solid Fuel)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","On":"ReadWrite","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"modes":{"0":"Not Generating","1":"Generating"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Input","typ":"Ore"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSorter":{"prefab":{"prefabName":"StructureSorter","prefabHash":-1009150565,"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.","name":"Sorter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Chute","role":"Output2"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStacker":{"prefab":{"prefabName":"StructureStacker","prefabHash":-2020231820,"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.","name":"Stacker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Processing","typ":"None"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStackerReverse":{"prefab":{"prefabName":"StructureStackerReverse","prefabHash":1585641623,"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.","name":"Stacker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStairs4x2":{"prefab":{"prefabName":"StructureStairs4x2","prefabHash":1405018945,"desc":"","name":"Stairs"},"structure":{"smallGrid":false}},"StructureStairs4x2RailL":{"prefab":{"prefabName":"StructureStairs4x2RailL","prefabHash":155214029,"desc":"","name":"Stairs with Rail (Left)"},"structure":{"smallGrid":false}},"StructureStairs4x2RailR":{"prefab":{"prefabName":"StructureStairs4x2RailR","prefabHash":-212902482,"desc":"","name":"Stairs with Rail (Right)"},"structure":{"smallGrid":false}},"StructureStairs4x2Rails":{"prefab":{"prefabName":"StructureStairs4x2Rails","prefabHash":-1088008720,"desc":"","name":"Stairs with Rails"},"structure":{"smallGrid":false}},"StructureStairwellBackLeft":{"prefab":{"prefabName":"StructureStairwellBackLeft","prefabHash":505924160,"desc":"","name":"Stairwell (Back Left)"},"structure":{"smallGrid":false}},"StructureStairwellBackPassthrough":{"prefab":{"prefabName":"StructureStairwellBackPassthrough","prefabHash":-862048392,"desc":"","name":"Stairwell (Back Passthrough)"},"structure":{"smallGrid":false}},"StructureStairwellBackRight":{"prefab":{"prefabName":"StructureStairwellBackRight","prefabHash":-2128896573,"desc":"","name":"Stairwell (Back Right)"},"structure":{"smallGrid":false}},"StructureStairwellFrontLeft":{"prefab":{"prefabName":"StructureStairwellFrontLeft","prefabHash":-37454456,"desc":"","name":"Stairwell (Front Left)"},"structure":{"smallGrid":false}},"StructureStairwellFrontPassthrough":{"prefab":{"prefabName":"StructureStairwellFrontPassthrough","prefabHash":-1625452928,"desc":"","name":"Stairwell (Front Passthrough)"},"structure":{"smallGrid":false}},"StructureStairwellFrontRight":{"prefab":{"prefabName":"StructureStairwellFrontRight","prefabHash":340210934,"desc":"","name":"Stairwell (Front Right)"},"structure":{"smallGrid":false}},"StructureStairwellNoDoors":{"prefab":{"prefabName":"StructureStairwellNoDoors","prefabHash":2049879875,"desc":"","name":"Stairwell (No Doors)"},"structure":{"smallGrid":false}},"StructureStirlingEngine":{"prefab":{"prefabName":"StructureStirlingEngine","prefabHash":-260316435,"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.","name":"Stirling Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStorageLocker":{"prefab":{"prefabName":"StructureStorageLocker","prefabHash":-793623899,"desc":"","name":"Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"Lock":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSuitStorage":{"prefab":{"prefabName":"StructureSuitStorage","prefabHash":255034731,"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.","name":"Suit Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Helmet","typ":"Helmet"},{"name":"Suit","typ":"Suit"},{"name":"Back","typ":"Back"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTankBig":{"prefab":{"prefabName":"StructureTankBig","prefabHash":-1606848156,"desc":"","name":"Large Tank"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankBigInsulated":{"prefab":{"prefabName":"StructureTankBigInsulated","prefabHash":1280378227,"desc":"","name":"Tank Big (Insulated)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankConnector":{"prefab":{"prefabName":"StructureTankConnector","prefabHash":-1276379454,"desc":"Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network.","name":"Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructureTankConnectorLiquid":{"prefab":{"prefabName":"StructureTankConnectorLiquid","prefabHash":1331802518,"desc":"These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network.","name":"Liquid Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureTankSmall":{"prefab":{"prefabName":"StructureTankSmall","prefabHash":1013514688,"desc":"","name":"Small Tank"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallAir":{"prefab":{"prefabName":"StructureTankSmallAir","prefabHash":955744474,"desc":"","name":"Small Tank (Air)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallFuel":{"prefab":{"prefabName":"StructureTankSmallFuel","prefabHash":2102454415,"desc":"","name":"Small Tank (Fuel)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallInsulated":{"prefab":{"prefabName":"StructureTankSmallInsulated","prefabHash":272136332,"desc":"","name":"Tank Small (Insulated)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureToolManufactory":{"prefab":{"prefabName":"StructureToolManufactory","prefabHash":-465741100,"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.","name":"Tool Manufactory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureTorpedoRack":{"prefab":{"prefabName":"StructureTorpedoRack","prefabHash":1473807953,"desc":"","name":"Torpedo Rack"},"structure":{"smallGrid":true},"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"}]},"StructureTraderWaypoint":{"prefab":{"prefabName":"StructureTraderWaypoint","prefabHash":1570931620,"desc":"","name":"Trader Waypoint"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformer":{"prefab":{"prefabName":"StructureTransformer","prefabHash":-1423212473,"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.","name":"Transformer (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerMedium":{"prefab":{"prefabName":"StructureTransformerMedium","prefabHash":-1065725831,"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.","name":"Transformer (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerMediumReversed":{"prefab":{"prefabName":"StructureTransformerMediumReversed","prefabHash":833912764,"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.","name":"Transformer Reversed (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerSmall":{"prefab":{"prefabName":"StructureTransformerSmall","prefabHash":-890946730,"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.","name":"Transformer (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerSmallReversed":{"prefab":{"prefabName":"StructureTransformerSmallReversed","prefabHash":1054059374,"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.","name":"Transformer Reversed (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTurbineGenerator":{"prefab":{"prefabName":"StructureTurbineGenerator","prefabHash":1282191063,"desc":"","name":"Turbine Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureTurboVolumePump":{"prefab":{"prefabName":"StructureTurboVolumePump","prefabHash":1310794736,"desc":"Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureUnloader":{"prefab":{"prefabName":"StructureUnloader","prefabHash":750118160,"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.","name":"Unloader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureUprightWindTurbine":{"prefab":{"prefabName":"StructureUprightWindTurbine","prefabHash":1622183451,"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.","name":"Upright Wind Turbine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureValve":{"prefab":{"prefabName":"StructureValve","prefabHash":-692036078,"desc":"","name":"Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureVendingMachine":{"prefab":{"prefabName":"StructureVendingMachine","prefabHash":-443130773,"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.","name":"Vending Machine"},"structure":{"smallGrid":true},"logic":{"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":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureVolumePump":{"prefab":{"prefabName":"StructureVolumePump","prefabHash":-321403609,"desc":"The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks.","name":"Volume Pump"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallArch":{"prefab":{"prefabName":"StructureWallArch","prefabHash":-858143148,"desc":"","name":"Wall (Arch)"},"structure":{"smallGrid":false}},"StructureWallArchArrow":{"prefab":{"prefabName":"StructureWallArchArrow","prefabHash":1649708822,"desc":"","name":"Wall (Arch Arrow)"},"structure":{"smallGrid":false}},"StructureWallArchCornerRound":{"prefab":{"prefabName":"StructureWallArchCornerRound","prefabHash":1794588890,"desc":"","name":"Wall (Arch Corner Round)"},"structure":{"smallGrid":true}},"StructureWallArchCornerSquare":{"prefab":{"prefabName":"StructureWallArchCornerSquare","prefabHash":-1963016580,"desc":"","name":"Wall (Arch Corner Square)"},"structure":{"smallGrid":true}},"StructureWallArchCornerTriangle":{"prefab":{"prefabName":"StructureWallArchCornerTriangle","prefabHash":1281911841,"desc":"","name":"Wall (Arch Corner Triangle)"},"structure":{"smallGrid":true}},"StructureWallArchPlating":{"prefab":{"prefabName":"StructureWallArchPlating","prefabHash":1182510648,"desc":"","name":"Wall (Arch Plating)"},"structure":{"smallGrid":false}},"StructureWallArchTwoTone":{"prefab":{"prefabName":"StructureWallArchTwoTone","prefabHash":782529714,"desc":"","name":"Wall (Arch Two Tone)"},"structure":{"smallGrid":false}},"StructureWallCooler":{"prefab":{"prefabName":"StructureWallCooler","prefabHash":-739292323,"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.","name":"Wall Cooler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Pipe","role":"None"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallFlat":{"prefab":{"prefabName":"StructureWallFlat","prefabHash":1635864154,"desc":"","name":"Wall (Flat)"},"structure":{"smallGrid":false}},"StructureWallFlatCornerRound":{"prefab":{"prefabName":"StructureWallFlatCornerRound","prefabHash":898708250,"desc":"","name":"Wall (Flat Corner Round)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerSquare":{"prefab":{"prefabName":"StructureWallFlatCornerSquare","prefabHash":298130111,"desc":"","name":"Wall (Flat Corner Square)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerTriangle":{"prefab":{"prefabName":"StructureWallFlatCornerTriangle","prefabHash":2097419366,"desc":"","name":"Wall (Flat Corner Triangle)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerTriangleFlat":{"prefab":{"prefabName":"StructureWallFlatCornerTriangleFlat","prefabHash":-1161662836,"desc":"","name":"Wall (Flat Corner Triangle Flat)"},"structure":{"smallGrid":true}},"StructureWallGeometryCorner":{"prefab":{"prefabName":"StructureWallGeometryCorner","prefabHash":1979212240,"desc":"","name":"Wall (Geometry Corner)"},"structure":{"smallGrid":false}},"StructureWallGeometryStreight":{"prefab":{"prefabName":"StructureWallGeometryStreight","prefabHash":1049735537,"desc":"","name":"Wall (Geometry Straight)"},"structure":{"smallGrid":false}},"StructureWallGeometryT":{"prefab":{"prefabName":"StructureWallGeometryT","prefabHash":1602758612,"desc":"","name":"Wall (Geometry T)"},"structure":{"smallGrid":false}},"StructureWallGeometryTMirrored":{"prefab":{"prefabName":"StructureWallGeometryTMirrored","prefabHash":-1427845483,"desc":"","name":"Wall (Geometry T Mirrored)"},"structure":{"smallGrid":false}},"StructureWallHeater":{"prefab":{"prefabName":"StructureWallHeater","prefabHash":24258244,"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.","name":"Wall Heater"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallIron":{"prefab":{"prefabName":"StructureWallIron","prefabHash":1287324802,"desc":"","name":"Iron Wall (Type 1)"},"structure":{"smallGrid":false}},"StructureWallIron02":{"prefab":{"prefabName":"StructureWallIron02","prefabHash":1485834215,"desc":"","name":"Iron Wall (Type 2)"},"structure":{"smallGrid":false}},"StructureWallIron03":{"prefab":{"prefabName":"StructureWallIron03","prefabHash":798439281,"desc":"","name":"Iron Wall (Type 3)"},"structure":{"smallGrid":false}},"StructureWallIron04":{"prefab":{"prefabName":"StructureWallIron04","prefabHash":-1309433134,"desc":"","name":"Iron Wall (Type 4)"},"structure":{"smallGrid":false}},"StructureWallLargePanel":{"prefab":{"prefabName":"StructureWallLargePanel","prefabHash":1492930217,"desc":"","name":"Wall (Large Panel)"},"structure":{"smallGrid":false}},"StructureWallLargePanelArrow":{"prefab":{"prefabName":"StructureWallLargePanelArrow","prefabHash":-776581573,"desc":"","name":"Wall (Large Panel Arrow)"},"structure":{"smallGrid":false}},"StructureWallLight":{"prefab":{"prefabName":"StructureWallLight","prefabHash":-1860064656,"desc":"","name":"Wall Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallLightBattery":{"prefab":{"prefabName":"StructureWallLightBattery","prefabHash":-1306415132,"desc":"","name":"Wall Light (Battery)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallPaddedArch":{"prefab":{"prefabName":"StructureWallPaddedArch","prefabHash":1590330637,"desc":"","name":"Wall (Padded Arch)"},"structure":{"smallGrid":false}},"StructureWallPaddedArchCorner":{"prefab":{"prefabName":"StructureWallPaddedArchCorner","prefabHash":-1126688298,"desc":"","name":"Wall (Padded Arch Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedArchLightFittingTop":{"prefab":{"prefabName":"StructureWallPaddedArchLightFittingTop","prefabHash":1171987947,"desc":"","name":"Wall (Padded Arch Light Fitting Top)"},"structure":{"smallGrid":false}},"StructureWallPaddedArchLightsFittings":{"prefab":{"prefabName":"StructureWallPaddedArchLightsFittings","prefabHash":-1546743960,"desc":"","name":"Wall (Padded Arch Lights Fittings)"},"structure":{"smallGrid":false}},"StructureWallPaddedCorner":{"prefab":{"prefabName":"StructureWallPaddedCorner","prefabHash":-155945899,"desc":"","name":"Wall (Padded Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedCornerThin":{"prefab":{"prefabName":"StructureWallPaddedCornerThin","prefabHash":1183203913,"desc":"","name":"Wall (Padded Corner Thin)"},"structure":{"smallGrid":true}},"StructureWallPaddedNoBorder":{"prefab":{"prefabName":"StructureWallPaddedNoBorder","prefabHash":8846501,"desc":"","name":"Wall (Padded No Border)"},"structure":{"smallGrid":false}},"StructureWallPaddedNoBorderCorner":{"prefab":{"prefabName":"StructureWallPaddedNoBorderCorner","prefabHash":179694804,"desc":"","name":"Wall (Padded No Border Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedThinNoBorder":{"prefab":{"prefabName":"StructureWallPaddedThinNoBorder","prefabHash":-1611559100,"desc":"","name":"Wall (Padded Thin No Border)"},"structure":{"smallGrid":false}},"StructureWallPaddedThinNoBorderCorner":{"prefab":{"prefabName":"StructureWallPaddedThinNoBorderCorner","prefabHash":1769527556,"desc":"","name":"Wall (Padded Thin No Border Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedWindow":{"prefab":{"prefabName":"StructureWallPaddedWindow","prefabHash":2087628940,"desc":"","name":"Wall (Padded Window)"},"structure":{"smallGrid":false}},"StructureWallPaddedWindowThin":{"prefab":{"prefabName":"StructureWallPaddedWindowThin","prefabHash":-37302931,"desc":"","name":"Wall (Padded Window Thin)"},"structure":{"smallGrid":false}},"StructureWallPadding":{"prefab":{"prefabName":"StructureWallPadding","prefabHash":635995024,"desc":"","name":"Wall (Padding)"},"structure":{"smallGrid":false}},"StructureWallPaddingArchVent":{"prefab":{"prefabName":"StructureWallPaddingArchVent","prefabHash":-1243329828,"desc":"","name":"Wall (Padding Arch Vent)"},"structure":{"smallGrid":false}},"StructureWallPaddingLightFitting":{"prefab":{"prefabName":"StructureWallPaddingLightFitting","prefabHash":2024882687,"desc":"","name":"Wall (Padding Light Fitting)"},"structure":{"smallGrid":false}},"StructureWallPaddingThin":{"prefab":{"prefabName":"StructureWallPaddingThin","prefabHash":-1102403554,"desc":"","name":"Wall (Padding Thin)"},"structure":{"smallGrid":false}},"StructureWallPlating":{"prefab":{"prefabName":"StructureWallPlating","prefabHash":26167457,"desc":"","name":"Wall (Plating)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsAndHatch":{"prefab":{"prefabName":"StructureWallSmallPanelsAndHatch","prefabHash":619828719,"desc":"","name":"Wall (Small Panels And Hatch)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsArrow":{"prefab":{"prefabName":"StructureWallSmallPanelsArrow","prefabHash":-639306697,"desc":"","name":"Wall (Small Panels Arrow)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsMonoChrome":{"prefab":{"prefabName":"StructureWallSmallPanelsMonoChrome","prefabHash":386820253,"desc":"","name":"Wall (Small Panels Mono Chrome)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsOpen":{"prefab":{"prefabName":"StructureWallSmallPanelsOpen","prefabHash":-1407480603,"desc":"","name":"Wall (Small Panels Open)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsTwoTone":{"prefab":{"prefabName":"StructureWallSmallPanelsTwoTone","prefabHash":1709994581,"desc":"","name":"Wall (Small Panels Two Tone)"},"structure":{"smallGrid":false}},"StructureWallVent":{"prefab":{"prefabName":"StructureWallVent","prefabHash":-1177469307,"desc":"Used to mix atmospheres passively between two walls.","name":"Wall Vent"},"structure":{"smallGrid":true}},"StructureWaterBottleFiller":{"prefab":{"prefabName":"StructureWaterBottleFiller","prefabHash":-1178961954,"desc":"","name":"Water Bottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerBottom":{"prefab":{"prefabName":"StructureWaterBottleFillerBottom","prefabHash":1433754995,"desc":"","name":"Water Bottle Filler Bottom"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerPowered":{"prefab":{"prefabName":"StructureWaterBottleFillerPowered","prefabHash":-756587791,"desc":"","name":"Waterbottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerPoweredBottom":{"prefab":{"prefabName":"StructureWaterBottleFillerPoweredBottom","prefabHash":1986658780,"desc":"","name":"Waterbottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterDigitalValve":{"prefab":{"prefabName":"StructureWaterDigitalValve","prefabHash":-517628750,"desc":"","name":"Liquid Digital Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterPipeMeter":{"prefab":{"prefabName":"StructureWaterPipeMeter","prefabHash":433184168,"desc":"","name":"Liquid Pipe Meter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterPurifier":{"prefab":{"prefabName":"StructureWaterPurifier","prefabHash":887383294,"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.","name":"Water Purifier"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ImportCount":"Read","Lock":"ReadWrite","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterWallCooler":{"prefab":{"prefabName":"StructureWaterWallCooler","prefabHash":-1369060582,"desc":"","name":"Liquid Wall Cooler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWeatherStation":{"prefab":{"prefabName":"StructureWeatherStation","prefabHash":1997212478,"desc":"0.NoStorm\n1.StormIncoming\n2.InStorm","name":"Weather Station"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWindTurbine":{"prefab":{"prefabName":"StructureWindTurbine","prefabHash":-2082355173,"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.","name":"Wind Turbine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWindowShutter":{"prefab":{"prefabName":"StructureWindowShutter","prefabHash":2056377335,"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.","name":"Window Shutter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"ToolPrinterMod":{"prefab":{"prefabName":"ToolPrinterMod","prefabHash":1700018136,"desc":"Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Tool Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"ToyLuna":{"prefab":{"prefabName":"ToyLuna","prefabHash":94730034,"desc":"","name":"Toy Luna"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Default"}},"UniformCommander":{"prefab":{"prefabName":"UniformCommander","prefabHash":-2083426457,"desc":"","name":"Uniform Commander"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformMarine":{"prefab":{"prefabName":"UniformMarine","prefabHash":-48342840,"desc":"","name":"Marine Uniform"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformOrangeJumpSuit":{"prefab":{"prefabName":"UniformOrangeJumpSuit","prefabHash":810053150,"desc":"","name":"Jump Suit (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"WeaponEnergy":{"prefab":{"prefabName":"WeaponEnergy","prefabHash":789494694,"desc":"","name":"Weapon Energy"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponPistolEnergy":{"prefab":{"prefabName":"WeaponPistolEnergy","prefabHash":-385323479,"desc":"0.Stun\n1.Kill","name":"Energy Pistol"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponRifleEnergy":{"prefab":{"prefabName":"WeaponRifleEnergy","prefabHash":1154745374,"desc":"0.Stun\n1.Kill","name":"Energy Rifle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponTorpedo":{"prefab":{"prefabName":"WeaponTorpedo","prefabHash":-1102977898,"desc":"","name":"Torpedo"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1.0,"slotClass":"Torpedo","sortingClass":"Default"}}},"reagents":{"Alcohol":{"Hash":1565803737,"Unit":"ml","Sources":null},"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","Sources":null},"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","Sources":null},"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}}},"enums":{"scriptEnums":{"LogicBatchMethod":{"enumName":"LogicBatchMethod","values":{"Average":{"value":0,"deprecated":false,"description":""},"Maximum":{"value":3,"deprecated":false,"description":""},"Minimum":{"value":2,"deprecated":false,"description":""},"Sum":{"value":1,"deprecated":false,"description":""}}},"LogicReagentMode":{"enumName":"LogicReagentMode","values":{"Contents":{"value":0,"deprecated":false,"description":""},"Recipe":{"value":2,"deprecated":false,"description":""},"Required":{"value":1,"deprecated":false,"description":""},"TotalContents":{"value":3,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}}},"basicEnums":{"AirCon":{"enumName":"AirConditioningMode","values":{"Cold":{"value":0,"deprecated":false,"description":""},"Hot":{"value":1,"deprecated":false,"description":""}}},"AirControl":{"enumName":"AirControlMode","values":{"Draught":{"value":4,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Offline":{"value":1,"deprecated":false,"description":""},"Pressure":{"value":2,"deprecated":false,"description":""}}},"Color":{"enumName":"ColorType","values":{"Black":{"value":7,"deprecated":false,"description":""},"Blue":{"value":0,"deprecated":false,"description":""},"Brown":{"value":8,"deprecated":false,"description":""},"Gray":{"value":1,"deprecated":false,"description":""},"Green":{"value":2,"deprecated":false,"description":""},"Khaki":{"value":9,"deprecated":false,"description":""},"Orange":{"value":3,"deprecated":false,"description":""},"Pink":{"value":10,"deprecated":false,"description":""},"Purple":{"value":11,"deprecated":false,"description":""},"Red":{"value":4,"deprecated":false,"description":""},"White":{"value":6,"deprecated":false,"description":""},"Yellow":{"value":5,"deprecated":false,"description":""}}},"DaylightSensorMode":{"enumName":"DaylightSensorMode","values":{"Default":{"value":0,"deprecated":false,"description":""},"Horizontal":{"value":1,"deprecated":false,"description":""},"Vertical":{"value":2,"deprecated":false,"description":""}}},"ElevatorMode":{"enumName":"ElevatorMode","values":{"Downward":{"value":2,"deprecated":false,"description":""},"Stationary":{"value":0,"deprecated":false,"description":""},"Upward":{"value":1,"deprecated":false,"description":""}}},"EntityState":{"enumName":"EntityState","values":{"Alive":{"value":0,"deprecated":false,"description":""},"Dead":{"value":1,"deprecated":false,"description":""},"Decay":{"value":3,"deprecated":false,"description":""},"Unconscious":{"value":2,"deprecated":false,"description":""}}},"GasType":{"enumName":"GasType","values":{"CarbonDioxide":{"value":4,"deprecated":false,"description":""},"Hydrogen":{"value":16384,"deprecated":false,"description":""},"LiquidCarbonDioxide":{"value":2048,"deprecated":false,"description":""},"LiquidHydrogen":{"value":32768,"deprecated":false,"description":""},"LiquidNitrogen":{"value":128,"deprecated":false,"description":""},"LiquidNitrousOxide":{"value":8192,"deprecated":false,"description":""},"LiquidOxygen":{"value":256,"deprecated":false,"description":""},"LiquidPollutant":{"value":4096,"deprecated":false,"description":""},"LiquidVolatiles":{"value":512,"deprecated":false,"description":""},"Nitrogen":{"value":2,"deprecated":false,"description":""},"NitrousOxide":{"value":64,"deprecated":false,"description":""},"Oxygen":{"value":1,"deprecated":false,"description":""},"Pollutant":{"value":16,"deprecated":false,"description":""},"PollutedWater":{"value":65536,"deprecated":false,"description":""},"Steam":{"value":1024,"deprecated":false,"description":""},"Undefined":{"value":0,"deprecated":false,"description":""},"Volatiles":{"value":8,"deprecated":false,"description":""},"Water":{"value":32,"deprecated":false,"description":""}}},"GasType_RocketMode":{"enumName":"RocketMode","values":{"Chart":{"value":5,"deprecated":false,"description":""},"Discover":{"value":4,"deprecated":false,"description":""},"Invalid":{"value":0,"deprecated":false,"description":""},"Mine":{"value":2,"deprecated":false,"description":""},"None":{"value":1,"deprecated":false,"description":""},"Survey":{"value":3,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}},"PowerMode":{"enumName":"PowerMode","values":{"Charged":{"value":4,"deprecated":false,"description":""},"Charging":{"value":3,"deprecated":false,"description":""},"Discharged":{"value":1,"deprecated":false,"description":""},"Discharging":{"value":2,"deprecated":false,"description":""},"Idle":{"value":0,"deprecated":false,"description":""}}},"ReEntryProfile":{"enumName":"ReEntryProfile","values":{"High":{"value":3,"deprecated":false,"description":""},"Max":{"value":4,"deprecated":false,"description":""},"Medium":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Optimal":{"value":1,"deprecated":false,"description":""}}},"RobotMode":{"enumName":"RobotMode","values":{"Follow":{"value":1,"deprecated":false,"description":""},"MoveToTarget":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"PathToTarget":{"value":5,"deprecated":false,"description":""},"Roam":{"value":3,"deprecated":false,"description":""},"StorageFull":{"value":6,"deprecated":false,"description":""},"Unload":{"value":4,"deprecated":false,"description":""}}},"SlotClass":{"enumName":"Class","values":{"AccessCard":{"value":22,"deprecated":false,"description":""},"Appliance":{"value":18,"deprecated":false,"description":""},"Back":{"value":3,"deprecated":false,"description":""},"Battery":{"value":14,"deprecated":false,"description":""},"Belt":{"value":16,"deprecated":false,"description":""},"Blocked":{"value":38,"deprecated":false,"description":""},"Bottle":{"value":25,"deprecated":false,"description":""},"Cartridge":{"value":21,"deprecated":false,"description":""},"Circuit":{"value":24,"deprecated":false,"description":""},"Circuitboard":{"value":7,"deprecated":false,"description":""},"CreditCard":{"value":28,"deprecated":false,"description":""},"DataDisk":{"value":8,"deprecated":false,"description":""},"DirtCanister":{"value":29,"deprecated":false,"description":""},"DrillHead":{"value":35,"deprecated":false,"description":""},"Egg":{"value":15,"deprecated":false,"description":""},"Entity":{"value":13,"deprecated":false,"description":""},"Flare":{"value":37,"deprecated":false,"description":""},"GasCanister":{"value":5,"deprecated":false,"description":""},"GasFilter":{"value":4,"deprecated":false,"description":""},"Glasses":{"value":27,"deprecated":false,"description":""},"Helmet":{"value":1,"deprecated":false,"description":""},"Ingot":{"value":19,"deprecated":false,"description":""},"LiquidBottle":{"value":32,"deprecated":false,"description":""},"LiquidCanister":{"value":31,"deprecated":false,"description":""},"Magazine":{"value":23,"deprecated":false,"description":""},"Motherboard":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Ore":{"value":10,"deprecated":false,"description":""},"Organ":{"value":9,"deprecated":false,"description":""},"Plant":{"value":11,"deprecated":false,"description":""},"ProgrammableChip":{"value":26,"deprecated":false,"description":""},"ScanningHead":{"value":36,"deprecated":false,"description":""},"SensorProcessingUnit":{"value":30,"deprecated":false,"description":""},"SoundCartridge":{"value":34,"deprecated":false,"description":""},"Suit":{"value":2,"deprecated":false,"description":""},"SuitMod":{"value":39,"deprecated":false,"description":""},"Tool":{"value":17,"deprecated":false,"description":""},"Torpedo":{"value":20,"deprecated":false,"description":""},"Uniform":{"value":12,"deprecated":false,"description":""},"Wreckage":{"value":33,"deprecated":false,"description":""}}},"SorterInstruction":{"enumName":"SorterInstruction","values":{"FilterPrefabHashEquals":{"value":1,"deprecated":false,"description":""},"FilterPrefabHashNotEquals":{"value":2,"deprecated":false,"description":""},"FilterQuantityCompare":{"value":5,"deprecated":false,"description":""},"FilterSlotTypeCompare":{"value":4,"deprecated":false,"description":""},"FilterSortingClassCompare":{"value":3,"deprecated":false,"description":""},"LimitNextExecutionByCount":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""}}},"SortingClass":{"enumName":"SortingClass","values":{"Appliances":{"value":6,"deprecated":false,"description":""},"Atmospherics":{"value":7,"deprecated":false,"description":""},"Clothing":{"value":5,"deprecated":false,"description":""},"Default":{"value":0,"deprecated":false,"description":""},"Food":{"value":4,"deprecated":false,"description":""},"Ices":{"value":10,"deprecated":false,"description":""},"Kits":{"value":1,"deprecated":false,"description":""},"Ores":{"value":9,"deprecated":false,"description":""},"Resources":{"value":3,"deprecated":false,"description":""},"Storage":{"value":8,"deprecated":false,"description":""},"Tools":{"value":2,"deprecated":false,"description":""}}},"Sound":{"enumName":"SoundAlert","values":{"AirlockCycling":{"value":22,"deprecated":false,"description":""},"Alarm1":{"value":45,"deprecated":false,"description":""},"Alarm10":{"value":12,"deprecated":false,"description":""},"Alarm11":{"value":13,"deprecated":false,"description":""},"Alarm12":{"value":14,"deprecated":false,"description":""},"Alarm2":{"value":1,"deprecated":false,"description":""},"Alarm3":{"value":2,"deprecated":false,"description":""},"Alarm4":{"value":3,"deprecated":false,"description":""},"Alarm5":{"value":4,"deprecated":false,"description":""},"Alarm6":{"value":5,"deprecated":false,"description":""},"Alarm7":{"value":6,"deprecated":false,"description":""},"Alarm8":{"value":10,"deprecated":false,"description":""},"Alarm9":{"value":11,"deprecated":false,"description":""},"Alert":{"value":17,"deprecated":false,"description":""},"Danger":{"value":15,"deprecated":false,"description":""},"Depressurising":{"value":20,"deprecated":false,"description":""},"FireFireFire":{"value":28,"deprecated":false,"description":""},"Five":{"value":33,"deprecated":false,"description":""},"Floor":{"value":34,"deprecated":false,"description":""},"Four":{"value":32,"deprecated":false,"description":""},"HaltWhoGoesThere":{"value":27,"deprecated":false,"description":""},"HighCarbonDioxide":{"value":44,"deprecated":false,"description":""},"IntruderAlert":{"value":19,"deprecated":false,"description":""},"LiftOff":{"value":36,"deprecated":false,"description":""},"MalfunctionDetected":{"value":26,"deprecated":false,"description":""},"Music1":{"value":7,"deprecated":false,"description":""},"Music2":{"value":8,"deprecated":false,"description":""},"Music3":{"value":9,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"One":{"value":29,"deprecated":false,"description":""},"PollutantsDetected":{"value":43,"deprecated":false,"description":""},"PowerLow":{"value":23,"deprecated":false,"description":""},"PressureHigh":{"value":39,"deprecated":false,"description":""},"PressureLow":{"value":40,"deprecated":false,"description":""},"Pressurising":{"value":21,"deprecated":false,"description":""},"RocketLaunching":{"value":35,"deprecated":false,"description":""},"StormIncoming":{"value":18,"deprecated":false,"description":""},"SystemFailure":{"value":24,"deprecated":false,"description":""},"TemperatureHigh":{"value":41,"deprecated":false,"description":""},"TemperatureLow":{"value":42,"deprecated":false,"description":""},"Three":{"value":31,"deprecated":false,"description":""},"TraderIncoming":{"value":37,"deprecated":false,"description":""},"TraderLanded":{"value":38,"deprecated":false,"description":""},"Two":{"value":30,"deprecated":false,"description":""},"Warning":{"value":16,"deprecated":false,"description":""},"Welcome":{"value":25,"deprecated":false,"description":""}}},"TransmitterMode":{"enumName":"LogicTransmitterMode","values":{"Active":{"value":1,"deprecated":false,"description":""},"Passive":{"value":0,"deprecated":false,"description":""}}},"Vent":{"enumName":"VentDirection","values":{"Inward":{"value":1,"deprecated":false,"description":""},"Outward":{"value":0,"deprecated":false,"description":""}}},"_unnamed":{"enumName":"ConditionOperation","values":{"Equals":{"value":0,"deprecated":false,"description":""},"Greater":{"value":1,"deprecated":false,"description":""},"Less":{"value":2,"deprecated":false,"description":""},"NotEquals":{"value":3,"deprecated":false,"description":""}}}}},"prefabsByHash":{"-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"},"structures":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","Flag_ODA_10m","Flag_ODA_4m","Flag_ODA_6m","Flag_ODA_8m","H2Combustor","KitchenTableShort","KitchenTableSimpleShort","KitchenTableSimpleTall","KitchenTableTall","Landingpad_2x2CenterPiece01","Landingpad_BlankPiece","Landingpad_CenterPiece01","Landingpad_CrossPiece","Landingpad_DataConnectionPiece","Landingpad_DiagonalPiece01","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_GasCylinderTankPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_StraightPiece01","Landingpad_TaxiPieceCorner","Landingpad_TaxiPieceHold","Landingpad_TaxiPieceStraight","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","RailingElegant01","RailingElegant02","RailingIndustrial02","RespawnPoint","RespawnPointWallMounted","Rover_MkI_build_states","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureBlocker","StructureCableAnalysizer","StructureCableCorner","StructureCableCorner3","StructureCableCorner3Burnt","StructureCableCorner3HBurnt","StructureCableCorner4","StructureCableCorner4Burnt","StructureCableCorner4HBurnt","StructureCableCornerBurnt","StructureCableCornerH","StructureCableCornerH3","StructureCableCornerH4","StructureCableCornerHBurnt","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCableJunction","StructureCableJunction4","StructureCableJunction4Burnt","StructureCableJunction4HBurnt","StructureCableJunction5","StructureCableJunction5Burnt","StructureCableJunction6","StructureCableJunction6Burnt","StructureCableJunction6HBurnt","StructureCableJunctionBurnt","StructureCableJunctionH","StructureCableJunctionH4","StructureCableJunctionH5","StructureCableJunctionH5Burnt","StructureCableJunctionH6","StructureCableJunctionHBurnt","StructureCableStraight","StructureCableStraightBurnt","StructureCableStraightH","StructureCableStraightHBurnt","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteCorner","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteFlipFlopSplitter","StructureChuteInlet","StructureChuteJunction","StructureChuteOutlet","StructureChuteOverflow","StructureChuteStraight","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureChuteValve","StructureChuteWindow","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeCladdingAngled","StructureCompositeCladdingAngledCorner","StructureCompositeCladdingAngledCornerInner","StructureCompositeCladdingAngledCornerInnerLong","StructureCompositeCladdingAngledCornerInnerLongL","StructureCompositeCladdingAngledCornerInnerLongR","StructureCompositeCladdingAngledCornerLong","StructureCompositeCladdingAngledCornerLongR","StructureCompositeCladdingAngledLong","StructureCompositeCladdingCylindrical","StructureCompositeCladdingCylindricalPanel","StructureCompositeCladdingPanel","StructureCompositeCladdingRounded","StructureCompositeCladdingRoundedCorner","StructureCompositeCladdingRoundedCornerInner","StructureCompositeCladdingSpherical","StructureCompositeCladdingSphericalCap","StructureCompositeCladdingSphericalCorner","StructureCompositeDoor","StructureCompositeFloorGrating","StructureCompositeFloorGrating2","StructureCompositeFloorGrating3","StructureCompositeFloorGrating4","StructureCompositeFloorGratingOpen","StructureCompositeFloorGratingOpenRotated","StructureCompositeWall","StructureCompositeWall02","StructureCompositeWall03","StructureCompositeWall04","StructureCompositeWindow","StructureCompositeWindowIron","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCrateMount","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEngineMountTypeA1","StructureEvaporationChamber","StructureExpansionValve","StructureFairingTypeA1","StructureFairingTypeA2","StructureFairingTypeA3","StructureFiltration","StructureFlagSmall","StructureFlashingLight","StructureFlatBench","StructureFloorDrain","StructureFrame","StructureFrameCorner","StructureFrameCornerCut","StructureFrameIron","StructureFrameSide","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureFuselageTypeA1","StructureFuselageTypeA2","StructureFuselageTypeA4","StructureFuselageTypeC5","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTray","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInLineTankGas1x1","StructureInLineTankGas1x2","StructureInLineTankLiquid1x1","StructureInLineTankLiquid1x2","StructureInsulatedInLineTankGas1x1","StructureInsulatedInLineTankGas1x2","StructureInsulatedInLineTankLiquid1x1","StructureInsulatedInLineTankLiquid1x2","StructureInsulatedPipeCorner","StructureInsulatedPipeCrossJunction","StructureInsulatedPipeCrossJunction3","StructureInsulatedPipeCrossJunction4","StructureInsulatedPipeCrossJunction5","StructureInsulatedPipeCrossJunction6","StructureInsulatedPipeLiquidCorner","StructureInsulatedPipeLiquidCrossJunction","StructureInsulatedPipeLiquidCrossJunction4","StructureInsulatedPipeLiquidCrossJunction5","StructureInsulatedPipeLiquidCrossJunction6","StructureInsulatedPipeLiquidStraight","StructureInsulatedPipeLiquidTJunction","StructureInsulatedPipeStraight","StructureInsulatedPipeTJunction","StructureInsulatedTankConnector","StructureInsulatedTankConnectorLiquid","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLadder","StructureLadderEnd","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLaunchMount","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassiveVent","StructurePassiveVentInsulated","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePictureFrameThickLandscapeLarge","StructurePictureFrameThickLandscapeSmall","StructurePictureFrameThickMountLandscapeLarge","StructurePictureFrameThickMountLandscapeSmall","StructurePictureFrameThickMountPortraitLarge","StructurePictureFrameThickMountPortraitSmall","StructurePictureFrameThickPortraitLarge","StructurePictureFrameThickPortraitSmall","StructurePictureFrameThinLandscapeLarge","StructurePictureFrameThinLandscapeSmall","StructurePictureFrameThinMountLandscapeLarge","StructurePictureFrameThinMountLandscapeSmall","StructurePictureFrameThinMountPortraitLarge","StructurePictureFrameThinMountPortraitSmall","StructurePictureFrameThinPortraitLarge","StructurePictureFrameThinPortraitSmall","StructurePipeAnalysizer","StructurePipeCorner","StructurePipeCowl","StructurePipeCrossJunction","StructurePipeCrossJunction3","StructurePipeCrossJunction4","StructurePipeCrossJunction5","StructurePipeCrossJunction6","StructurePipeHeater","StructurePipeIgniter","StructurePipeInsulatedLiquidCrossJunction","StructurePipeLabel","StructurePipeLiquidCorner","StructurePipeLiquidCrossJunction","StructurePipeLiquidCrossJunction3","StructurePipeLiquidCrossJunction4","StructurePipeLiquidCrossJunction5","StructurePipeLiquidCrossJunction6","StructurePipeLiquidStraight","StructurePipeLiquidTJunction","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeOrgan","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePipeStraight","StructurePipeTJunction","StructurePlanter","StructurePlatformLadderOpen","StructurePlinth","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRailing","StructureRecycler","StructureRefrigeratedVendingMachine","StructureReinforcedCompositeWindow","StructureReinforcedCompositeWindowSteel","StructureReinforcedWallPaddedWindow","StructureReinforcedWallPaddedWindowThin","StructureResearchMachine","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTower","StructureRocketTransformerSmall","StructureRover","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelf","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSmallTableBacklessDouble","StructureSmallTableBacklessSingle","StructureSmallTableDinnerSingle","StructureSmallTableRectangleDouble","StructureSmallTableRectangleSingle","StructureSmallTableThickDouble","StructureSmallTableThickSingle","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStairs4x2","StructureStairs4x2RailL","StructureStairs4x2RailR","StructureStairs4x2Rails","StructureStairwellBackLeft","StructureStairwellBackPassthrough","StructureStairwellBackRight","StructureStairwellFrontLeft","StructureStairwellFrontPassthrough","StructureStairwellFrontRight","StructureStairwellNoDoors","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankConnector","StructureTankConnectorLiquid","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTorpedoRack","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallArch","StructureWallArchArrow","StructureWallArchCornerRound","StructureWallArchCornerSquare","StructureWallArchCornerTriangle","StructureWallArchPlating","StructureWallArchTwoTone","StructureWallCooler","StructureWallFlat","StructureWallFlatCornerRound","StructureWallFlatCornerSquare","StructureWallFlatCornerTriangle","StructureWallFlatCornerTriangleFlat","StructureWallGeometryCorner","StructureWallGeometryStreight","StructureWallGeometryT","StructureWallGeometryTMirrored","StructureWallHeater","StructureWallIron","StructureWallIron02","StructureWallIron03","StructureWallIron04","StructureWallLargePanel","StructureWallLargePanelArrow","StructureWallLight","StructureWallLightBattery","StructureWallPaddedArch","StructureWallPaddedArchCorner","StructureWallPaddedArchLightFittingTop","StructureWallPaddedArchLightsFittings","StructureWallPaddedCorner","StructureWallPaddedCornerThin","StructureWallPaddedNoBorder","StructureWallPaddedNoBorderCorner","StructureWallPaddedThinNoBorder","StructureWallPaddedThinNoBorderCorner","StructureWallPaddedWindow","StructureWallPaddedWindowThin","StructureWallPadding","StructureWallPaddingArchVent","StructureWallPaddingLightFitting","StructureWallPaddingThin","StructureWallPlating","StructureWallSmallPanelsAndHatch","StructureWallSmallPanelsArrow","StructureWallSmallPanelsMonoChrome","StructureWallSmallPanelsOpen","StructureWallSmallPanelsTwoTone","StructureWallVent","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"devices":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","H2Combustor","Landingpad_DataConnectionPiece","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureCableAnalysizer","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteInlet","StructureChuteOutlet","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeDoor","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEvaporationChamber","StructureExpansionValve","StructureFiltration","StructureFlashingLight","StructureFlatBench","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePipeAnalysizer","StructurePipeHeater","StructurePipeIgniter","StructurePipeLabel","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRecycler","StructureRefrigeratedVendingMachine","StructureResearchMachine","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTransformerSmall","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallCooler","StructureWallHeater","StructureWallLight","StructureWallLightBattery","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"items":["AccessCardBlack","AccessCardBlue","AccessCardBrown","AccessCardGray","AccessCardGreen","AccessCardKhaki","AccessCardOrange","AccessCardPink","AccessCardPurple","AccessCardRed","AccessCardWhite","AccessCardYellow","ApplianceChemistryStation","ApplianceDeskLampLeft","ApplianceDeskLampRight","ApplianceMicrowave","AppliancePackagingMachine","AppliancePaintMixer","AppliancePlantGeneticAnalyzer","AppliancePlantGeneticSplicer","AppliancePlantGeneticStabilizer","ApplianceReagentProcessor","ApplianceSeedTray","ApplianceTabletDock","AutolathePrinterMod","Battery_Wireless_cell","Battery_Wireless_cell_Big","CardboardBox","CartridgeAccessController","CartridgeAtmosAnalyser","CartridgeConfiguration","CartridgeElectronicReader","CartridgeGPS","CartridgeGuide","CartridgeMedicalAnalyser","CartridgeNetworkAnalyser","CartridgeOreScanner","CartridgeOreScannerColor","CartridgePlantAnalyser","CartridgeTracker","CircuitboardAdvAirlockControl","CircuitboardAirControl","CircuitboardAirlockControl","CircuitboardCameraDisplay","CircuitboardDoorControl","CircuitboardGasDisplay","CircuitboardGraphDisplay","CircuitboardHashDisplay","CircuitboardModeControl","CircuitboardPowerControl","CircuitboardShipDisplay","CircuitboardSolarControl","CrateMkII","DecayedFood","DynamicAirConditioner","DynamicCrate","DynamicGPR","DynamicGasCanisterAir","DynamicGasCanisterCarbonDioxide","DynamicGasCanisterEmpty","DynamicGasCanisterFuel","DynamicGasCanisterNitrogen","DynamicGasCanisterNitrousOxide","DynamicGasCanisterOxygen","DynamicGasCanisterPollutants","DynamicGasCanisterRocketFuel","DynamicGasCanisterVolatiles","DynamicGasCanisterWater","DynamicGasTankAdvanced","DynamicGasTankAdvancedOxygen","DynamicGenerator","DynamicHydroponics","DynamicLight","DynamicLiquidCanisterEmpty","DynamicMKIILiquidCanisterEmpty","DynamicMKIILiquidCanisterWater","DynamicScrubber","DynamicSkeleton","ElectronicPrinterMod","ElevatorCarrage","EntityChick","EntityChickenBrown","EntityChickenWhite","EntityRoosterBlack","EntityRoosterBrown","Fertilizer","FireArmSMG","FlareGun","Handgun","HandgunMagazine","HumanSkull","ImGuiCircuitboardAirlockControl","ItemActiveVent","ItemAdhesiveInsulation","ItemAdvancedTablet","ItemAlienMushroom","ItemAmmoBox","ItemAngleGrinder","ItemArcWelder","ItemAreaPowerControl","ItemAstroloyIngot","ItemAstroloySheets","ItemAuthoringTool","ItemAuthoringToolRocketNetwork","ItemBasketBall","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBatteryCharger","ItemBatteryChargerSmall","ItemBeacon","ItemBiomass","ItemBreadLoaf","ItemCableAnalyser","ItemCableCoil","ItemCableCoilHeavy","ItemCableFuse","ItemCannedCondensedMilk","ItemCannedEdamame","ItemCannedMushroom","ItemCannedPowderedEggs","ItemCannedRicePudding","ItemCerealBar","ItemCharcoal","ItemChemLightBlue","ItemChemLightGreen","ItemChemLightRed","ItemChemLightWhite","ItemChemLightYellow","ItemCoalOre","ItemCobaltOre","ItemCoffeeMug","ItemConstantanIngot","ItemCookedCondensedMilk","ItemCookedCorn","ItemCookedMushroom","ItemCookedPowderedEggs","ItemCookedPumpkin","ItemCookedRice","ItemCookedSoybean","ItemCookedTomato","ItemCopperIngot","ItemCopperOre","ItemCorn","ItemCornSoup","ItemCreditCard","ItemCropHay","ItemCrowbar","ItemDataDisk","ItemDirtCanister","ItemDirtyOre","ItemDisposableBatteryCharger","ItemDrill","ItemDuctTape","ItemDynamicAirCon","ItemDynamicScrubber","ItemEggCarton","ItemElectronicParts","ItemElectrumIngot","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyCrowbar","ItemEmergencyDrill","ItemEmergencyEvaSuit","ItemEmergencyPickaxe","ItemEmergencyScrewdriver","ItemEmergencySpaceHelmet","ItemEmergencyToolBelt","ItemEmergencyWireCutters","ItemEmergencyWrench","ItemEmptyCan","ItemEvaSuit","ItemExplosive","ItemFern","ItemFertilizedEgg","ItemFilterFern","ItemFlagSmall","ItemFlashingLight","ItemFlashlight","ItemFlour","ItemFlowerBlue","ItemFlowerGreen","ItemFlowerOrange","ItemFlowerRed","ItemFlowerYellow","ItemFrenchFries","ItemFries","ItemGasCanisterCarbonDioxide","ItemGasCanisterEmpty","ItemGasCanisterFuel","ItemGasCanisterNitrogen","ItemGasCanisterNitrousOxide","ItemGasCanisterOxygen","ItemGasCanisterPollutants","ItemGasCanisterSmart","ItemGasCanisterVolatiles","ItemGasCanisterWater","ItemGasFilterCarbonDioxide","ItemGasFilterCarbonDioxideInfinite","ItemGasFilterCarbonDioxideL","ItemGasFilterCarbonDioxideM","ItemGasFilterNitrogen","ItemGasFilterNitrogenInfinite","ItemGasFilterNitrogenL","ItemGasFilterNitrogenM","ItemGasFilterNitrousOxide","ItemGasFilterNitrousOxideInfinite","ItemGasFilterNitrousOxideL","ItemGasFilterNitrousOxideM","ItemGasFilterOxygen","ItemGasFilterOxygenInfinite","ItemGasFilterOxygenL","ItemGasFilterOxygenM","ItemGasFilterPollutants","ItemGasFilterPollutantsInfinite","ItemGasFilterPollutantsL","ItemGasFilterPollutantsM","ItemGasFilterVolatiles","ItemGasFilterVolatilesInfinite","ItemGasFilterVolatilesL","ItemGasFilterVolatilesM","ItemGasFilterWater","ItemGasFilterWaterInfinite","ItemGasFilterWaterL","ItemGasFilterWaterM","ItemGasSensor","ItemGasTankStorage","ItemGlassSheets","ItemGlasses","ItemGoldIngot","ItemGoldOre","ItemGrenade","ItemHEMDroidRepairKit","ItemHardBackpack","ItemHardJetpack","ItemHardMiningBackPack","ItemHardSuit","ItemHardsuitHelmet","ItemHastelloyIngot","ItemHat","ItemHighVolumeGasCanisterEmpty","ItemHorticultureBelt","ItemHydroponicTray","ItemIce","ItemIgniter","ItemInconelIngot","ItemInsulation","ItemIntegratedCircuit10","ItemInvarIngot","ItemIronFrames","ItemIronIngot","ItemIronOre","ItemIronSheets","ItemJetpackBasic","ItemKitAIMeE","ItemKitAccessBridge","ItemKitAdvancedComposter","ItemKitAdvancedFurnace","ItemKitAdvancedPackagingMachine","ItemKitAirlock","ItemKitAirlockGate","ItemKitArcFurnace","ItemKitAtmospherics","ItemKitAutoMinerSmall","ItemKitAutolathe","ItemKitAutomatedOven","ItemKitBasket","ItemKitBattery","ItemKitBatteryLarge","ItemKitBeacon","ItemKitBeds","ItemKitBlastDoor","ItemKitCentrifuge","ItemKitChairs","ItemKitChute","ItemKitChuteUmbilical","ItemKitCompositeCladding","ItemKitCompositeFloorGrating","ItemKitComputer","ItemKitConsole","ItemKitCrate","ItemKitCrateMkII","ItemKitCrateMount","ItemKitCryoTube","ItemKitDeepMiner","ItemKitDockingPort","ItemKitDoor","ItemKitDrinkingFountain","ItemKitDynamicCanister","ItemKitDynamicGasTankAdvanced","ItemKitDynamicGenerator","ItemKitDynamicHydroponics","ItemKitDynamicLiquidCanister","ItemKitDynamicMKIILiquidCanister","ItemKitElectricUmbilical","ItemKitElectronicsPrinter","ItemKitElevator","ItemKitEngineLarge","ItemKitEngineMedium","ItemKitEngineSmall","ItemKitEvaporationChamber","ItemKitFlagODA","ItemKitFridgeBig","ItemKitFridgeSmall","ItemKitFurnace","ItemKitFurniture","ItemKitFuselage","ItemKitGasGenerator","ItemKitGasUmbilical","ItemKitGovernedGasRocketEngine","ItemKitGroundTelescope","ItemKitGrowLight","ItemKitHarvie","ItemKitHeatExchanger","ItemKitHorizontalAutoMiner","ItemKitHydraulicPipeBender","ItemKitHydroponicAutomated","ItemKitHydroponicStation","ItemKitIceCrusher","ItemKitInsulatedLiquidPipe","ItemKitInsulatedPipe","ItemKitInsulatedPipeUtility","ItemKitInsulatedPipeUtilityLiquid","ItemKitInteriorDoors","ItemKitLadder","ItemKitLandingPadAtmos","ItemKitLandingPadBasic","ItemKitLandingPadWaypoint","ItemKitLargeDirectHeatExchanger","ItemKitLargeExtendableRadiator","ItemKitLargeSatelliteDish","ItemKitLaunchMount","ItemKitLaunchTower","ItemKitLiquidRegulator","ItemKitLiquidTank","ItemKitLiquidTankInsulated","ItemKitLiquidTurboVolumePump","ItemKitLiquidUmbilical","ItemKitLocker","ItemKitLogicCircuit","ItemKitLogicInputOutput","ItemKitLogicMemory","ItemKitLogicProcessor","ItemKitLogicSwitch","ItemKitLogicTransmitter","ItemKitMotherShipCore","ItemKitMusicMachines","ItemKitPassiveLargeRadiatorGas","ItemKitPassiveLargeRadiatorLiquid","ItemKitPassthroughHeatExchanger","ItemKitPictureFrame","ItemKitPipe","ItemKitPipeLiquid","ItemKitPipeOrgan","ItemKitPipeRadiator","ItemKitPipeRadiatorLiquid","ItemKitPipeUtility","ItemKitPipeUtilityLiquid","ItemKitPlanter","ItemKitPortablesConnector","ItemKitPowerTransmitter","ItemKitPowerTransmitterOmni","ItemKitPoweredVent","ItemKitPressureFedGasEngine","ItemKitPressureFedLiquidEngine","ItemKitPressurePlate","ItemKitPumpedLiquidEngine","ItemKitRailing","ItemKitRecycler","ItemKitRegulator","ItemKitReinforcedWindows","ItemKitResearchMachine","ItemKitRespawnPointWallMounted","ItemKitRocketAvionics","ItemKitRocketBattery","ItemKitRocketCargoStorage","ItemKitRocketCelestialTracker","ItemKitRocketCircuitHousing","ItemKitRocketDatalink","ItemKitRocketGasFuelTank","ItemKitRocketLiquidFuelTank","ItemKitRocketManufactory","ItemKitRocketMiner","ItemKitRocketScanner","ItemKitRocketTransformerSmall","ItemKitRoverFrame","ItemKitRoverMKI","ItemKitSDBHopper","ItemKitSatelliteDish","ItemKitSecurityPrinter","ItemKitSensor","ItemKitShower","ItemKitSign","ItemKitSleeper","ItemKitSmallDirectHeatExchanger","ItemKitSmallSatelliteDish","ItemKitSolarPanel","ItemKitSolarPanelBasic","ItemKitSolarPanelBasicReinforced","ItemKitSolarPanelReinforced","ItemKitSolidGenerator","ItemKitSorter","ItemKitSpeaker","ItemKitStacker","ItemKitStairs","ItemKitStairwell","ItemKitStandardChute","ItemKitStirlingEngine","ItemKitSuitStorage","ItemKitTables","ItemKitTank","ItemKitTankInsulated","ItemKitToolManufactory","ItemKitTransformer","ItemKitTransformerSmall","ItemKitTurbineGenerator","ItemKitTurboVolumePump","ItemKitUprightWindTurbine","ItemKitVendingMachine","ItemKitVendingMachineRefrigerated","ItemKitWall","ItemKitWallArch","ItemKitWallFlat","ItemKitWallGeometry","ItemKitWallIron","ItemKitWallPadded","ItemKitWaterBottleFiller","ItemKitWaterPurifier","ItemKitWeatherStation","ItemKitWindTurbine","ItemKitWindowShutter","ItemLabeller","ItemLaptop","ItemLeadIngot","ItemLeadOre","ItemLightSword","ItemLiquidCanisterEmpty","ItemLiquidCanisterSmart","ItemLiquidDrain","ItemLiquidPipeAnalyzer","ItemLiquidPipeHeater","ItemLiquidPipeValve","ItemLiquidPipeVolumePump","ItemLiquidTankStorage","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIICrowbar","ItemMKIIDrill","ItemMKIIDuctTape","ItemMKIIMiningDrill","ItemMKIIScrewdriver","ItemMKIIWireCutters","ItemMKIIWrench","ItemMarineBodyArmor","ItemMarineHelmet","ItemMilk","ItemMiningBackPack","ItemMiningBelt","ItemMiningBeltMKII","ItemMiningCharge","ItemMiningDrill","ItemMiningDrillHeavy","ItemMiningDrillPneumatic","ItemMkIIToolbelt","ItemMuffin","ItemMushroom","ItemNVG","ItemNickelIngot","ItemNickelOre","ItemNitrice","ItemOxite","ItemPassiveVent","ItemPassiveVentInsulated","ItemPeaceLily","ItemPickaxe","ItemPillHeal","ItemPillStun","ItemPipeAnalyizer","ItemPipeCowl","ItemPipeDigitalValve","ItemPipeGasMixer","ItemPipeHeater","ItemPipeIgniter","ItemPipeLabel","ItemPipeLiquidRadiator","ItemPipeMeter","ItemPipeRadiator","ItemPipeValve","ItemPipeVolumePump","ItemPlantEndothermic_Creative","ItemPlantEndothermic_Genepool1","ItemPlantEndothermic_Genepool2","ItemPlantSampler","ItemPlantSwitchGrass","ItemPlantThermogenic_Creative","ItemPlantThermogenic_Genepool1","ItemPlantThermogenic_Genepool2","ItemPlasticSheets","ItemPotato","ItemPotatoBaked","ItemPowerConnector","ItemPumpkin","ItemPumpkinPie","ItemPumpkinSoup","ItemPureIce","ItemPureIceCarbonDioxide","ItemPureIceHydrogen","ItemPureIceLiquidCarbonDioxide","ItemPureIceLiquidHydrogen","ItemPureIceLiquidNitrogen","ItemPureIceLiquidNitrous","ItemPureIceLiquidOxygen","ItemPureIceLiquidPollutant","ItemPureIceLiquidVolatiles","ItemPureIceNitrogen","ItemPureIceNitrous","ItemPureIceOxygen","ItemPureIcePollutant","ItemPureIcePollutedWater","ItemPureIceSteam","ItemPureIceVolatiles","ItemRTG","ItemRTGSurvival","ItemReagentMix","ItemRemoteDetonator","ItemResearchCapsule","ItemResearchCapsuleGreen","ItemResearchCapsuleRed","ItemResearchCapsuleYellow","ItemReusableFireExtinguisher","ItemRice","ItemRoadFlare","ItemRocketMiningDrillHead","ItemRocketMiningDrillHeadDurable","ItemRocketMiningDrillHeadHighSpeedIce","ItemRocketMiningDrillHeadHighSpeedMineral","ItemRocketMiningDrillHeadIce","ItemRocketMiningDrillHeadLongTerm","ItemRocketMiningDrillHeadMineral","ItemRocketScanningHead","ItemScanner","ItemScrewdriver","ItemSecurityCamera","ItemSensorLenses","ItemSensorProcessingUnitCelestialScanner","ItemSensorProcessingUnitMesonScanner","ItemSensorProcessingUnitOreScanner","ItemSiliconIngot","ItemSiliconOre","ItemSilverIngot","ItemSilverOre","ItemSolderIngot","ItemSolidFuel","ItemSoundCartridgeBass","ItemSoundCartridgeDrums","ItemSoundCartridgeLeads","ItemSoundCartridgeSynth","ItemSoyOil","ItemSoybean","ItemSpaceCleaner","ItemSpaceHelmet","ItemSpaceIce","ItemSpaceOre","ItemSpacepack","ItemSprayCanBlack","ItemSprayCanBlue","ItemSprayCanBrown","ItemSprayCanGreen","ItemSprayCanGrey","ItemSprayCanKhaki","ItemSprayCanOrange","ItemSprayCanPink","ItemSprayCanPurple","ItemSprayCanRed","ItemSprayCanWhite","ItemSprayCanYellow","ItemSprayGun","ItemSteelFrames","ItemSteelIngot","ItemSteelSheets","ItemStelliteGlassSheets","ItemStelliteIngot","ItemSuitModCryogenicUpgrade","ItemTablet","ItemTerrainManipulator","ItemTomato","ItemTomatoSoup","ItemToolBelt","ItemTropicalPlant","ItemUraniumOre","ItemVolatiles","ItemWallCooler","ItemWallHeater","ItemWallLight","ItemWaspaloyIngot","ItemWaterBottle","ItemWaterPipeDigitalValve","ItemWaterPipeMeter","ItemWaterWallCooler","ItemWearLamp","ItemWeldingTorch","ItemWheat","ItemWireCutters","ItemWirelessBatteryCellExtraLarge","ItemWreckageAirConditioner1","ItemWreckageAirConditioner2","ItemWreckageHydroponicsTray1","ItemWreckageLargeExtendableRadiator01","ItemWreckageStructureRTG1","ItemWreckageStructureWeatherStation001","ItemWreckageStructureWeatherStation002","ItemWreckageStructureWeatherStation003","ItemWreckageStructureWeatherStation004","ItemWreckageStructureWeatherStation005","ItemWreckageStructureWeatherStation006","ItemWreckageStructureWeatherStation007","ItemWreckageStructureWeatherStation008","ItemWreckageTurbineGenerator1","ItemWreckageTurbineGenerator2","ItemWreckageTurbineGenerator3","ItemWreckageWallCooler1","ItemWreckageWallCooler2","ItemWrench","KitSDBSilo","KitStructureCombustionCentrifuge","Lander","Meteorite","MonsterEgg","MotherboardComms","MotherboardLogic","MotherboardMissionControl","MotherboardProgrammableChip","MotherboardRockets","MotherboardSorter","MothershipCore","NpcChick","NpcChicken","PipeBenderMod","PortableComposter","PortableSolarPanel","ReagentColorBlue","ReagentColorGreen","ReagentColorOrange","ReagentColorRed","ReagentColorYellow","Robot","RoverCargo","Rover_MkI","SMGMagazine","SeedBag_Corn","SeedBag_Fern","SeedBag_Mushroom","SeedBag_Potato","SeedBag_Pumpkin","SeedBag_Rice","SeedBag_Soybean","SeedBag_Switchgrass","SeedBag_Tomato","SeedBag_Wheet","SpaceShuttle","ToolPrinterMod","ToyLuna","UniformCommander","UniformMarine","UniformOrangeJumpSuit","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy","WeaponTorpedo"],"logicableItems":["Battery_Wireless_cell","Battery_Wireless_cell_Big","DynamicGPR","DynamicLight","ItemAdvancedTablet","ItemAngleGrinder","ItemArcWelder","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBeacon","ItemDrill","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyDrill","ItemEmergencySpaceHelmet","ItemFlashlight","ItemHardBackpack","ItemHardJetpack","ItemHardSuit","ItemHardsuitHelmet","ItemIntegratedCircuit10","ItemJetpackBasic","ItemLabeller","ItemLaptop","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIIDrill","ItemMKIIMiningDrill","ItemMiningBeltMKII","ItemMiningDrill","ItemMiningDrillHeavy","ItemMkIIToolbelt","ItemNVG","ItemPlantSampler","ItemRemoteDetonator","ItemSensorLenses","ItemSpaceHelmet","ItemSpacepack","ItemTablet","ItemTerrainManipulator","ItemWearLamp","ItemWirelessBatteryCellExtraLarge","PortableSolarPanel","Robot","RoverCargo","Rover_MkI","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy"]} \ No newline at end of file +{"prefabs":{"AccessCardBlack":{"prefab":{"prefabName":"AccessCardBlack","prefabHash":-1330388999,"desc":"","name":"Access Card (Black)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardBlue":{"prefab":{"prefabName":"AccessCardBlue","prefabHash":-1411327657,"desc":"","name":"Access Card (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardBrown":{"prefab":{"prefabName":"AccessCardBrown","prefabHash":1412428165,"desc":"","name":"Access Card (Brown)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardGray":{"prefab":{"prefabName":"AccessCardGray","prefabHash":-1339479035,"desc":"","name":"Access Card (Gray)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardGreen":{"prefab":{"prefabName":"AccessCardGreen","prefabHash":-374567952,"desc":"","name":"Access Card (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardKhaki":{"prefab":{"prefabName":"AccessCardKhaki","prefabHash":337035771,"desc":"","name":"Access Card (Khaki)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardOrange":{"prefab":{"prefabName":"AccessCardOrange","prefabHash":-332896929,"desc":"","name":"Access Card (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardPink":{"prefab":{"prefabName":"AccessCardPink","prefabHash":431317557,"desc":"","name":"Access Card (Pink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardPurple":{"prefab":{"prefabName":"AccessCardPurple","prefabHash":459843265,"desc":"","name":"Access Card (Purple)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardRed":{"prefab":{"prefabName":"AccessCardRed","prefabHash":-1713748313,"desc":"","name":"Access Card (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardWhite":{"prefab":{"prefabName":"AccessCardWhite","prefabHash":2079959157,"desc":"","name":"Access Card (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardYellow":{"prefab":{"prefabName":"AccessCardYellow","prefabHash":568932536,"desc":"","name":"Access Card (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"ApplianceChemistryStation":{"prefab":{"prefabName":"ApplianceChemistryStation","prefabHash":1365789392,"desc":"","name":"Chemistry Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"ApplianceDeskLampLeft":{"prefab":{"prefabName":"ApplianceDeskLampLeft","prefabHash":-1683849799,"desc":"","name":"Appliance Desk Lamp Left"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"}},"ApplianceDeskLampRight":{"prefab":{"prefabName":"ApplianceDeskLampRight","prefabHash":1174360780,"desc":"","name":"Appliance Desk Lamp Right"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"}},"ApplianceMicrowave":{"prefab":{"prefabName":"ApplianceMicrowave","prefabHash":-1136173965,"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.","name":"Microwave"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"AppliancePackagingMachine":{"prefab":{"prefabName":"AppliancePackagingMachine","prefabHash":-749191906,"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 ","name":"Basic Packaging Machine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Export","typ":"None"}]},"AppliancePaintMixer":{"prefab":{"prefabName":"AppliancePaintMixer","prefabHash":-1339716113,"desc":"","name":"Paint Mixer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"Bottle"}]},"AppliancePlantGeneticAnalyzer":{"prefab":{"prefabName":"AppliancePlantGeneticAnalyzer","prefabHash":-1303038067,"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.","name":"Plant Genetic Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Input","typ":"Tool"}]},"AppliancePlantGeneticSplicer":{"prefab":{"prefabName":"AppliancePlantGeneticSplicer","prefabHash":-1094868323,"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.","name":"Plant Genetic Splicer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Source Plant","typ":"Plant"},{"name":"Target Plant","typ":"Plant"}]},"AppliancePlantGeneticStabilizer":{"prefab":{"prefabName":"AppliancePlantGeneticStabilizer","prefabHash":871432335,"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 ","name":"Plant Genetic Stabilizer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Plant","typ":"Plant"}]},"ApplianceReagentProcessor":{"prefab":{"prefabName":"ApplianceReagentProcessor","prefabHash":1260918085,"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.","name":"Reagent Processor"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Input","typ":"None"},{"name":"Output","typ":"None"}]},"ApplianceSeedTray":{"prefab":{"prefabName":"ApplianceSeedTray","prefabHash":142831994,"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.","name":"Appliance Seed Tray"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"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"}]},"ApplianceTabletDock":{"prefab":{"prefabName":"ApplianceTabletDock","prefabHash":1853941363,"desc":"","name":"Tablet Dock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"","typ":"Tool"}]},"AutolathePrinterMod":{"prefab":{"prefabName":"AutolathePrinterMod","prefabHash":221058307,"desc":"Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Autolathe Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"Battery_Wireless_cell":{"prefab":{"prefabName":"Battery_Wireless_cell","prefabHash":-462415758,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Battery_Wireless_cell_Big":{"prefab":{"prefabName":"Battery_Wireless_cell_Big","prefabHash":-41519077,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell (Big)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"CardboardBox":{"prefab":{"prefabName":"CardboardBox","prefabHash":-1976947556,"desc":"","name":"Cardboard Box"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Storage"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"CartridgeAccessController":{"prefab":{"prefabName":"CartridgeAccessController","prefabHash":-1634532552,"desc":"","name":"Cartridge (Access Controller)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeAtmosAnalyser":{"prefab":{"prefabName":"CartridgeAtmosAnalyser","prefabHash":-1550278665,"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.","name":"Atmos Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeConfiguration":{"prefab":{"prefabName":"CartridgeConfiguration","prefabHash":-932136011,"desc":"","name":"Configuration"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeElectronicReader":{"prefab":{"prefabName":"CartridgeElectronicReader","prefabHash":-1462180176,"desc":"","name":"eReader"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeGPS":{"prefab":{"prefabName":"CartridgeGPS","prefabHash":-1957063345,"desc":"","name":"GPS"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeGuide":{"prefab":{"prefabName":"CartridgeGuide","prefabHash":872720793,"desc":"","name":"Guide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeMedicalAnalyser":{"prefab":{"prefabName":"CartridgeMedicalAnalyser","prefabHash":-1116110181,"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.","name":"Medical Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeNetworkAnalyser":{"prefab":{"prefabName":"CartridgeNetworkAnalyser","prefabHash":1606989119,"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.","name":"Network Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeOreScanner":{"prefab":{"prefabName":"CartridgeOreScanner","prefabHash":-1768732546,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet.","name":"Ore Scanner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeOreScannerColor":{"prefab":{"prefabName":"CartridgeOreScannerColor","prefabHash":1738236580,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground in different colors on the tablet.","name":"Ore Scanner (Color)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgePlantAnalyser":{"prefab":{"prefabName":"CartridgePlantAnalyser","prefabHash":1101328282,"desc":"","name":"Cartridge Plant Analyser"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeTracker":{"prefab":{"prefabName":"CartridgeTracker","prefabHash":81488783,"desc":"","name":"Tracker"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CircuitboardAdvAirlockControl":{"prefab":{"prefabName":"CircuitboardAdvAirlockControl","prefabHash":1633663176,"desc":"","name":"Advanced Airlock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardAirControl":{"prefab":{"prefabName":"CircuitboardAirControl","prefabHash":1618019559,"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. ","name":"Air Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardAirlockControl":{"prefab":{"prefabName":"CircuitboardAirlockControl","prefabHash":912176135,"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.","name":"Airlock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardCameraDisplay":{"prefab":{"prefabName":"CircuitboardCameraDisplay","prefabHash":-412104504,"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.","name":"Camera Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardDoorControl":{"prefab":{"prefabName":"CircuitboardDoorControl","prefabHash":855694771,"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.","name":"Door Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardGasDisplay":{"prefab":{"prefabName":"CircuitboardGasDisplay","prefabHash":-82343730,"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).","name":"Gas Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardGraphDisplay":{"prefab":{"prefabName":"CircuitboardGraphDisplay","prefabHash":1344368806,"desc":"","name":"Graph Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardHashDisplay":{"prefab":{"prefabName":"CircuitboardHashDisplay","prefabHash":1633074601,"desc":"","name":"Hash Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardModeControl":{"prefab":{"prefabName":"CircuitboardModeControl","prefabHash":-1134148135,"desc":"Can't decide which mode you love most? This circuit board allows you to switch any connected device between operation modes.","name":"Mode Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardPowerControl":{"prefab":{"prefabName":"CircuitboardPowerControl","prefabHash":-1923778429,"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. ","name":"Power Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardShipDisplay":{"prefab":{"prefabName":"CircuitboardShipDisplay","prefabHash":-2044446819,"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.","name":"Ship Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardSolarControl":{"prefab":{"prefabName":"CircuitboardSolarControl","prefabHash":2020180320,"desc":"Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel.","name":"Solar Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CompositeRollCover":{"prefab":{"prefabName":"CompositeRollCover","prefabHash":1228794916,"desc":"0.Operate\n1.Logic","name":"Composite Roll Cover"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"CrateMkII":{"prefab":{"prefabName":"CrateMkII","prefabHash":8709219,"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.","name":"Crate Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Storage"},"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"}]},"DecayedFood":{"prefab":{"prefabName":"DecayedFood","prefabHash":1531087544,"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","name":"Decayed Food"},"item":{"consumable":false,"ingredient":false,"maxQuantity":25,"slotClass":"None","sortingClass":"Default"}},"DeviceLfoVolume":{"prefab":{"prefabName":"DeviceLfoVolume","prefabHash":-1844430312,"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.","name":"Low frequency oscillator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Bpm":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"DeviceStepUnit":{"prefab":{"prefabName":"DeviceStepUnit","prefabHash":1762696475,"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","name":"Device Step Unit"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"DynamicAirConditioner":{"prefab":{"prefabName":"DynamicAirConditioner","prefabHash":519913639,"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.","name":"Portable Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicCrate":{"prefab":{"prefabName":"DynamicCrate","prefabHash":1941079206,"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.","name":"Dynamic Crate"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Storage"},"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"}]},"DynamicGPR":{"prefab":{"prefabName":"DynamicGPR","prefabHash":-2085885850,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicGasCanisterAir":{"prefab":{"prefabName":"DynamicGasCanisterAir","prefabHash":-1713611165,"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.","name":"Portable Gas Tank (Air)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterCarbonDioxide":{"prefab":{"prefabName":"DynamicGasCanisterCarbonDioxide","prefabHash":-322413931,"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.","name":"Portable Gas Tank (CO2)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterEmpty":{"prefab":{"prefabName":"DynamicGasCanisterEmpty","prefabHash":-1741267161,"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.","name":"Portable Gas Tank"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterFuel":{"prefab":{"prefabName":"DynamicGasCanisterFuel","prefabHash":-817051527,"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.","name":"Portable Gas Tank (Fuel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrogen":{"prefab":{"prefabName":"DynamicGasCanisterNitrogen","prefabHash":121951301,"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.","name":"Portable Gas Tank (Nitrogen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrousOxide":{"prefab":{"prefabName":"DynamicGasCanisterNitrousOxide","prefabHash":30727200,"desc":"","name":"Portable Gas Tank (Nitrous Oxide)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterOxygen":{"prefab":{"prefabName":"DynamicGasCanisterOxygen","prefabHash":1360925836,"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.","name":"Portable Gas Tank (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterPollutants":{"prefab":{"prefabName":"DynamicGasCanisterPollutants","prefabHash":396065382,"desc":"","name":"Portable Gas Tank (Pollutants)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterRocketFuel":{"prefab":{"prefabName":"DynamicGasCanisterRocketFuel","prefabHash":-8883951,"desc":"","name":"Dynamic Gas Canister Rocket Fuel"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterVolatiles":{"prefab":{"prefabName":"DynamicGasCanisterVolatiles","prefabHash":108086870,"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.","name":"Portable Gas Tank (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterWater":{"prefab":{"prefabName":"DynamicGasCanisterWater","prefabHash":197293625,"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.","name":"Portable Liquid Tank (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"LiquidCanister"}]},"DynamicGasTankAdvanced":{"prefab":{"prefabName":"DynamicGasTankAdvanced","prefabHash":-386375420,"desc":"0.Mode0\n1.Mode1","name":"Gas Tank Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasTankAdvancedOxygen":{"prefab":{"prefabName":"DynamicGasTankAdvancedOxygen","prefabHash":-1264455519,"desc":"0.Mode0\n1.Mode1","name":"Portable Gas Tank Mk II (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGenerator":{"prefab":{"prefabName":"DynamicGenerator","prefabHash":-82087220,"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.","name":"Portable Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"GasCanister"},{"name":"Battery","typ":"Battery"}]},"DynamicHydroponics":{"prefab":{"prefabName":"DynamicHydroponics","prefabHash":587726607,"desc":"","name":"Portable Hydroponics"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"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"}]},"DynamicLight":{"prefab":{"prefabName":"DynamicLight","prefabHash":-21970188,"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.","name":"Portable Light"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicLiquidCanisterEmpty":{"prefab":{"prefabName":"DynamicLiquidCanisterEmpty","prefabHash":-1939209112,"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.","name":"Portable Liquid Tank"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterEmpty":{"prefab":{"prefabName":"DynamicMKIILiquidCanisterEmpty","prefabHash":2130739600,"desc":"An empty, insulated liquid Gas Canister.","name":"Portable Liquid Tank Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterWater":{"prefab":{"prefabName":"DynamicMKIILiquidCanisterWater","prefabHash":-319510386,"desc":"An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature.","name":"Portable Liquid Tank Mk II (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicScrubber":{"prefab":{"prefabName":"DynamicScrubber","prefabHash":755048589,"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.","name":"Portable Air Scrubber"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"}]},"DynamicSkeleton":{"prefab":{"prefabName":"DynamicSkeleton","prefabHash":106953348,"desc":"","name":"Skeleton"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ElectronicPrinterMod":{"prefab":{"prefabName":"ElectronicPrinterMod","prefabHash":-311170652,"desc":"Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Electronic Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ElevatorCarrage":{"prefab":{"prefabName":"ElevatorCarrage","prefabHash":-110788403,"desc":"","name":"Elevator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"EntityChick":{"prefab":{"prefabName":"EntityChick","prefabHash":1730165908,"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.","name":"Entity Chick"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenBrown":{"prefab":{"prefabName":"EntityChickenBrown","prefabHash":334097180,"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.","name":"Entity Chicken Brown"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenWhite":{"prefab":{"prefabName":"EntityChickenWhite","prefabHash":1010807532,"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.","name":"Entity Chicken White"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBlack":{"prefab":{"prefabName":"EntityRoosterBlack","prefabHash":966959649,"desc":"This is a rooster. It is black. There is dignity in this.","name":"Entity Rooster Black"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBrown":{"prefab":{"prefabName":"EntityRoosterBrown","prefabHash":-583103395,"desc":"The common brown rooster. Don't let it hear you say that.","name":"Entity Rooster Brown"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"Fertilizer":{"prefab":{"prefabName":"Fertilizer","prefabHash":1517856652,"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. ","name":"Fertilizer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Default"}},"FireArmSMG":{"prefab":{"prefabName":"FireArmSMG","prefabHash":-86315541,"desc":"0.Single\n1.Auto","name":"Fire Arm SMG"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"slots":[{"name":"","typ":"Magazine"}]},"Flag_ODA_10m":{"prefab":{"prefabName":"Flag_ODA_10m","prefabHash":1845441951,"desc":"","name":"Flag (ODA 10m)"},"structure":{"smallGrid":true}},"Flag_ODA_4m":{"prefab":{"prefabName":"Flag_ODA_4m","prefabHash":1159126354,"desc":"","name":"Flag (ODA 4m)"},"structure":{"smallGrid":true}},"Flag_ODA_6m":{"prefab":{"prefabName":"Flag_ODA_6m","prefabHash":1998634960,"desc":"","name":"Flag (ODA 6m)"},"structure":{"smallGrid":true}},"Flag_ODA_8m":{"prefab":{"prefabName":"Flag_ODA_8m","prefabHash":-375156130,"desc":"","name":"Flag (ODA 8m)"},"structure":{"smallGrid":true}},"FlareGun":{"prefab":{"prefabName":"FlareGun","prefabHash":118685786,"desc":"","name":"Flare Gun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Magazine","typ":"Flare"},{"name":"","typ":"Blocked"}]},"H2Combustor":{"prefab":{"prefabName":"H2Combustor","prefabHash":1840108251,"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.","name":"H2 Combustor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","Combustion":"Read","CombustionInput":"Read","CombustionOutput":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidHydrogen":"Read","RatioLiquidNitrogen":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"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","RatioSteamInput":"Read","RatioSteamOutput":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"Handgun":{"prefab":{"prefabName":"Handgun","prefabHash":247238062,"desc":"","name":"Handgun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"slots":[{"name":"Magazine","typ":"Magazine"}]},"HandgunMagazine":{"prefab":{"prefabName":"HandgunMagazine","prefabHash":1254383185,"desc":"","name":"Handgun Magazine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Magazine","sortingClass":"Default"}},"HumanSkull":{"prefab":{"prefabName":"HumanSkull","prefabHash":-857713709,"desc":"","name":"Human Skull"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ImGuiCircuitboardAirlockControl":{"prefab":{"prefabName":"ImGuiCircuitboardAirlockControl","prefabHash":-73796547,"desc":"","name":"Airlock (Experimental)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"ItemActiveVent":{"prefab":{"prefabName":"ItemActiveVent","prefabHash":-842048328,"desc":"When constructed, this kit places an Active Vent on any support structure.","name":"Kit (Active Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemAdhesiveInsulation":{"prefab":{"prefabName":"ItemAdhesiveInsulation","prefabHash":1871048978,"desc":"","name":"Adhesive Insulation"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"Tool","sortingClass":"Tools"}},"ItemAdvancedTablet":{"prefab":{"prefabName":"ItemAdvancedTablet","prefabHash":1722785341,"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","name":"Advanced Tablet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read","SoundAlert":"ReadWrite","Volume":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"},{"name":"Cartridge1","typ":"Cartridge"},{"name":"Programmable Chip","typ":"ProgrammableChip"}]},"ItemAlienMushroom":{"prefab":{"prefabName":"ItemAlienMushroom","prefabHash":176446172,"desc":"","name":"Alien Mushroom"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Default"}},"ItemAmmoBox":{"prefab":{"prefabName":"ItemAmmoBox","prefabHash":-9559091,"desc":"","name":"Ammo Box"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemAngleGrinder":{"prefab":{"prefabName":"ItemAngleGrinder","prefabHash":201215010,"desc":"Angles-be-gone with the trusty angle grinder.","name":"Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemArcWelder":{"prefab":{"prefabName":"ItemArcWelder","prefabHash":1385062886,"desc":"","name":"Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemAreaPowerControl":{"prefab":{"prefabName":"ItemAreaPowerControl","prefabHash":1757673317,"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.","name":"Kit (Power Controller)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemAstroloyIngot":{"prefab":{"prefabName":"ItemAstroloyIngot","prefabHash":412924554,"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.","name":"Ingot (Astroloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Astroloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemAstroloySheets":{"prefab":{"prefabName":"ItemAstroloySheets","prefabHash":-1662476145,"desc":"","name":"Astroloy Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemAuthoringTool":{"prefab":{"prefabName":"ItemAuthoringTool","prefabHash":789015045,"desc":"","name":"Authoring Tool"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemAuthoringToolRocketNetwork":{"prefab":{"prefabName":"ItemAuthoringToolRocketNetwork","prefabHash":-1731627004,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemBasketBall":{"prefab":{"prefabName":"ItemBasketBall","prefabHash":-1262580790,"desc":"","name":"Basket Ball"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemBatteryCell":{"prefab":{"prefabName":"ItemBatteryCell","prefabHash":700133157,"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.","name":"Battery Cell (Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCellLarge":{"prefab":{"prefabName":"ItemBatteryCellLarge","prefabHash":-459827268,"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","name":"Battery Cell (Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCellNuclear":{"prefab":{"prefabName":"ItemBatteryCellNuclear","prefabHash":544617306,"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.","name":"Battery Cell (Nuclear)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCharger":{"prefab":{"prefabName":"ItemBatteryCharger","prefabHash":-1866880307,"desc":"This kit produces a 5-slot Kit (Battery Charger).","name":"Kit (Battery Charger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemBatteryChargerSmall":{"prefab":{"prefabName":"ItemBatteryChargerSmall","prefabHash":1008295833,"desc":"","name":"Battery Charger Small"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemBeacon":{"prefab":{"prefabName":"ItemBeacon","prefabHash":-869869491,"desc":"","name":"Tracking Beacon"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemBiomass":{"prefab":{"prefabName":"ItemBiomass","prefabHash":-831480639,"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).","name":"Biomass"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Biomass":1.0},"slotClass":"Ore","sortingClass":"Resources"}},"ItemBreadLoaf":{"prefab":{"prefabName":"ItemBreadLoaf","prefabHash":893514943,"desc":"","name":"Bread Loaf"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCableAnalyser":{"prefab":{"prefabName":"ItemCableAnalyser","prefabHash":-1792787349,"desc":"","name":"Kit (Cable Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemCableCoil":{"prefab":{"prefabName":"ItemCableCoil","prefabHash":-466050668,"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).","name":"Cable Coil"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Tool","sortingClass":"Resources"}},"ItemCableCoilHeavy":{"prefab":{"prefabName":"ItemCableCoilHeavy","prefabHash":2060134443,"desc":"Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW.","name":"Cable Coil (Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Tool","sortingClass":"Resources"}},"ItemCableFuse":{"prefab":{"prefabName":"ItemCableFuse","prefabHash":195442047,"desc":"","name":"Kit (Cable Fuses)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Resources"}},"ItemCannedCondensedMilk":{"prefab":{"prefabName":"ItemCannedCondensedMilk","prefabHash":-2104175091,"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.","name":"Canned Condensed Milk"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCannedEdamame":{"prefab":{"prefabName":"ItemCannedEdamame","prefabHash":-999714082,"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.","name":"Canned Edamame"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCannedMushroom":{"prefab":{"prefabName":"ItemCannedMushroom","prefabHash":-1344601965,"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.","name":"Canned Mushroom"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCannedPowderedEggs":{"prefab":{"prefabName":"ItemCannedPowderedEggs","prefabHash":1161510063,"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.","name":"Canned Powdered Eggs"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCannedRicePudding":{"prefab":{"prefabName":"ItemCannedRicePudding","prefabHash":-1185552595,"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.","name":"Canned Rice Pudding"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCerealBar":{"prefab":{"prefabName":"ItemCerealBar","prefabHash":791746840,"desc":"Sustains, without decay. If only all our relationships were so well balanced.","name":"Cereal Bar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCharcoal":{"prefab":{"prefabName":"ItemCharcoal","prefabHash":252561409,"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.","name":"Charcoal"},"item":{"consumable":false,"ingredient":true,"maxQuantity":200,"reagents":{"Carbon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemChemLightBlue":{"prefab":{"prefabName":"ItemChemLightBlue","prefabHash":-772542081,"desc":"A safe and slightly rave-some source of blue light. Snap to activate.","name":"Chem Light (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightGreen":{"prefab":{"prefabName":"ItemChemLightGreen","prefabHash":-597479390,"desc":"Enliven the dreariest, airless rock with this glowy green light. Snap to activate.","name":"Chem Light (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightRed":{"prefab":{"prefabName":"ItemChemLightRed","prefabHash":-525810132,"desc":"A red glowstick. Snap to activate. Then reach for the lasers.","name":"Chem Light (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightWhite":{"prefab":{"prefabName":"ItemChemLightWhite","prefabHash":1312166823,"desc":"Snap the glowstick to activate a pale radiance that keeps the darkness at bay.","name":"Chem Light (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightYellow":{"prefab":{"prefabName":"ItemChemLightYellow","prefabHash":1224819963,"desc":"Dispel the darkness with this yellow glowstick.","name":"Chem Light (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChocolateBar":{"prefab":{"prefabName":"ItemChocolateBar","prefabHash":234601764,"desc":"","name":"Chocolate Bar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemChocolateCake":{"prefab":{"prefabName":"ItemChocolateCake","prefabHash":-261575861,"desc":"","name":"Chocolate Cake"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemChocolateCerealBar":{"prefab":{"prefabName":"ItemChocolateCerealBar","prefabHash":860793245,"desc":"","name":"Chocolate Cereal Bar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCoalOre":{"prefab":{"prefabName":"ItemCoalOre","prefabHash":1724793494,"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).","name":"Ore (Coal)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Hydrocarbon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCobaltOre":{"prefab":{"prefabName":"ItemCobaltOre","prefabHash":-983091249,"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.","name":"Ore (Cobalt)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Cobalt":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCocoaPowder":{"prefab":{"prefabName":"ItemCocoaPowder","prefabHash":457286516,"desc":"","name":"Cocoa Powder"},"item":{"consumable":true,"ingredient":true,"maxQuantity":20,"reagents":{"Cocoa":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemCocoaTree":{"prefab":{"prefabName":"ItemCocoaTree","prefabHash":680051921,"desc":"","name":"Cocoa"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Cocoa":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemCoffeeMug":{"prefab":{"prefabName":"ItemCoffeeMug","prefabHash":1800622698,"desc":"","name":"Coffee Mug"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemConstantanIngot":{"prefab":{"prefabName":"ItemConstantanIngot","prefabHash":1058547521,"desc":"","name":"Ingot (Constantan)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Constantan":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemCookedCondensedMilk":{"prefab":{"prefabName":"ItemCookedCondensedMilk","prefabHash":1715917521,"desc":"A high-nutrient cooked food, which can be canned.","name":"Condensed Milk"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Milk":100.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedCorn":{"prefab":{"prefabName":"ItemCookedCorn","prefabHash":1344773148,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Corn"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Corn":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedMushroom":{"prefab":{"prefabName":"ItemCookedMushroom","prefabHash":-1076892658,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Mushroom"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Mushroom":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedPowderedEggs":{"prefab":{"prefabName":"ItemCookedPowderedEggs","prefabHash":-1712264413,"desc":"A high-nutrient cooked food, which can be canned.","name":"Powdered Eggs"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Egg":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedPumpkin":{"prefab":{"prefabName":"ItemCookedPumpkin","prefabHash":1849281546,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Pumpkin"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Pumpkin":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedRice":{"prefab":{"prefabName":"ItemCookedRice","prefabHash":2013539020,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Rice"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Rice":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedSoybean":{"prefab":{"prefabName":"ItemCookedSoybean","prefabHash":1353449022,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Soybean"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Soy":5.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedTomato":{"prefab":{"prefabName":"ItemCookedTomato","prefabHash":-709086714,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Tomato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Tomato":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCopperIngot":{"prefab":{"prefabName":"ItemCopperIngot","prefabHash":-404336834,"desc":"Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items.","name":"Ingot (Copper)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Copper":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemCopperOre":{"prefab":{"prefabName":"ItemCopperOre","prefabHash":-707307845,"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.","name":"Ore (Copper)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Copper":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCorn":{"prefab":{"prefabName":"ItemCorn","prefabHash":258339687,"desc":"A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light.","name":"Corn"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Corn":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemCornSoup":{"prefab":{"prefabName":"ItemCornSoup","prefabHash":545034114,"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.","name":"Corn Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCreditCard":{"prefab":{"prefabName":"ItemCreditCard","prefabHash":-1756772618,"desc":"","name":"Credit Card"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100000,"slotClass":"CreditCard","sortingClass":"Tools"}},"ItemCropHay":{"prefab":{"prefabName":"ItemCropHay","prefabHash":215486157,"desc":"","name":"Hay"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"None","sortingClass":"Default"}},"ItemCrowbar":{"prefab":{"prefabName":"ItemCrowbar","prefabHash":856108234,"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.","name":"Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemDataDisk":{"prefab":{"prefabName":"ItemDataDisk","prefabHash":1005843700,"desc":"","name":"Data Disk"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"DataDisk","sortingClass":"Default"}},"ItemDirtCanister":{"prefab":{"prefabName":"ItemDirtCanister","prefabHash":902565329,"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.","name":"Dirt Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Ore","sortingClass":"Default"}},"ItemDirtyOre":{"prefab":{"prefabName":"ItemDirtyOre","prefabHash":-1234745580,"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. ","name":"Dirty Ore"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Ores"}},"ItemDisposableBatteryCharger":{"prefab":{"prefabName":"ItemDisposableBatteryCharger","prefabHash":-2124435700,"desc":"Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery.","name":"Disposable Battery Charger"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemDrill":{"prefab":{"prefabName":"ItemDrill","prefabHash":2009673399,"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.","name":"Hand Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemDuctTape":{"prefab":{"prefabName":"ItemDuctTape","prefabHash":-1943134693,"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.","name":"Duct Tape"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemDynamicAirCon":{"prefab":{"prefabName":"ItemDynamicAirCon","prefabHash":1072914031,"desc":"","name":"Kit (Portable Air Conditioner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemDynamicScrubber":{"prefab":{"prefabName":"ItemDynamicScrubber","prefabHash":-971920158,"desc":"","name":"Kit (Portable Scrubber)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemEggCarton":{"prefab":{"prefabName":"ItemEggCarton","prefabHash":-524289310,"desc":"Within, eggs reside in mysterious, marmoreal silence.","name":"Egg Carton"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Storage"},"slots":[{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"}]},"ItemElectronicParts":{"prefab":{"prefabName":"ItemElectronicParts","prefabHash":731250882,"desc":"","name":"Electronic Parts"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Resources"}},"ItemElectrumIngot":{"prefab":{"prefabName":"ItemElectrumIngot","prefabHash":502280180,"desc":"","name":"Ingot (Electrum)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Electrum":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemEmergencyAngleGrinder":{"prefab":{"prefabName":"ItemEmergencyAngleGrinder","prefabHash":-351438780,"desc":"","name":"Emergency Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyArcWelder":{"prefab":{"prefabName":"ItemEmergencyArcWelder","prefabHash":-1056029600,"desc":"","name":"Emergency Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyCrowbar":{"prefab":{"prefabName":"ItemEmergencyCrowbar","prefabHash":976699731,"desc":"","name":"Emergency Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyDrill":{"prefab":{"prefabName":"ItemEmergencyDrill","prefabHash":-2052458905,"desc":"","name":"Emergency Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyEvaSuit":{"prefab":{"prefabName":"ItemEmergencyEvaSuit","prefabHash":1791306431,"desc":"","name":"Emergency Eva Suit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Suit","sortingClass":"Clothing"},"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"}]},"ItemEmergencyPickaxe":{"prefab":{"prefabName":"ItemEmergencyPickaxe","prefabHash":-1061510408,"desc":"","name":"Emergency Pickaxe"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyScrewdriver":{"prefab":{"prefabName":"ItemEmergencyScrewdriver","prefabHash":266099983,"desc":"","name":"Emergency Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencySpaceHelmet":{"prefab":{"prefabName":"ItemEmergencySpaceHelmet","prefabHash":205916793,"desc":"","name":"Emergency Space Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemEmergencyToolBelt":{"prefab":{"prefabName":"ItemEmergencyToolBelt","prefabHash":1661941301,"desc":"","name":"Emergency Tool Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemEmergencyWireCutters":{"prefab":{"prefabName":"ItemEmergencyWireCutters","prefabHash":2102803952,"desc":"","name":"Emergency Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyWrench":{"prefab":{"prefabName":"ItemEmergencyWrench","prefabHash":162553030,"desc":"","name":"Emergency Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmptyCan":{"prefab":{"prefabName":"ItemEmptyCan","prefabHash":1013818348,"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.","name":"Empty Can"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Steel":1.0},"slotClass":"None","sortingClass":"Default"}},"ItemEvaSuit":{"prefab":{"prefabName":"ItemEvaSuit","prefabHash":1677018918,"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.","name":"Eva Suit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Suit","sortingClass":"Clothing"},"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"}]},"ItemExplosive":{"prefab":{"prefabName":"ItemExplosive","prefabHash":235361649,"desc":"","name":"Remote Explosive"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemFern":{"prefab":{"prefabName":"ItemFern","prefabHash":892110467,"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.","name":"Fern"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Fenoxitone":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemFertilizedEgg":{"prefab":{"prefabName":"ItemFertilizedEgg","prefabHash":-383972371,"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.","name":"Egg"},"item":{"consumable":false,"ingredient":true,"maxQuantity":1,"reagents":{"Egg":1.0},"slotClass":"Egg","sortingClass":"Resources"}},"ItemFilterFern":{"prefab":{"prefabName":"ItemFilterFern","prefabHash":266654416,"desc":"A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant.","name":"Darga Fern"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlagSmall":{"prefab":{"prefabName":"ItemFlagSmall","prefabHash":2011191088,"desc":"","name":"Kit (Small Flag)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemFlashingLight":{"prefab":{"prefabName":"ItemFlashingLight","prefabHash":-2107840748,"desc":"","name":"Kit (Flashing Light)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemFlashlight":{"prefab":{"prefabName":"ItemFlashlight","prefabHash":-838472102,"desc":"A flashlight with a narrow and wide beam options.","name":"Flashlight"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Low Power","1":"High Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemFlour":{"prefab":{"prefabName":"ItemFlour","prefabHash":-665995854,"desc":"Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven).","name":"Flour"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Flour":50.0},"slotClass":"None","sortingClass":"Resources"}},"ItemFlowerBlue":{"prefab":{"prefabName":"ItemFlowerBlue","prefabHash":-1573623434,"desc":"","name":"Flower (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerGreen":{"prefab":{"prefabName":"ItemFlowerGreen","prefabHash":-1513337058,"desc":"","name":"Flower (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerOrange":{"prefab":{"prefabName":"ItemFlowerOrange","prefabHash":-1411986716,"desc":"","name":"Flower (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerRed":{"prefab":{"prefabName":"ItemFlowerRed","prefabHash":-81376085,"desc":"","name":"Flower (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerYellow":{"prefab":{"prefabName":"ItemFlowerYellow","prefabHash":1712822019,"desc":"","name":"Flower (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFrenchFries":{"prefab":{"prefabName":"ItemFrenchFries","prefabHash":-57608687,"desc":"Because space would suck without 'em.","name":"Canned French Fries"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemFries":{"prefab":{"prefabName":"ItemFries","prefabHash":1371786091,"desc":"","name":"French Fries"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemGasCanisterCarbonDioxide":{"prefab":{"prefabName":"ItemGasCanisterCarbonDioxide","prefabHash":-767685874,"desc":"","name":"Canister (CO2)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterEmpty":{"prefab":{"prefabName":"ItemGasCanisterEmpty","prefabHash":42280099,"desc":"","name":"Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterFuel":{"prefab":{"prefabName":"ItemGasCanisterFuel","prefabHash":-1014695176,"desc":"","name":"Canister (Fuel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterNitrogen":{"prefab":{"prefabName":"ItemGasCanisterNitrogen","prefabHash":2145068424,"desc":"","name":"Canister (Nitrogen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterNitrousOxide":{"prefab":{"prefabName":"ItemGasCanisterNitrousOxide","prefabHash":-1712153401,"desc":"","name":"Gas Canister (Sleeping)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterOxygen":{"prefab":{"prefabName":"ItemGasCanisterOxygen","prefabHash":-1152261938,"desc":"","name":"Canister (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterPollutants":{"prefab":{"prefabName":"ItemGasCanisterPollutants","prefabHash":-1552586384,"desc":"","name":"Canister (Pollutants)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterSmart":{"prefab":{"prefabName":"ItemGasCanisterSmart","prefabHash":-668314371,"desc":"0.Mode0\n1.Mode1","name":"Gas Canister (Smart)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterVolatiles":{"prefab":{"prefabName":"ItemGasCanisterVolatiles","prefabHash":-472094806,"desc":"","name":"Canister (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterWater":{"prefab":{"prefabName":"ItemGasCanisterWater","prefabHash":-1854861891,"desc":"","name":"Liquid Canister (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemGasFilterCarbonDioxide":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxide","prefabHash":1635000764,"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.","name":"Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideInfinite":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideInfinite","prefabHash":-185568964,"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.","name":"Catalytic Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideL":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideL","prefabHash":1876847024,"desc":"","name":"Heavy Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideM":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideM","prefabHash":416897318,"desc":"","name":"Medium Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogen":{"prefab":{"prefabName":"ItemGasFilterNitrogen","prefabHash":632853248,"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.","name":"Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenInfinite":{"prefab":{"prefabName":"ItemGasFilterNitrogenInfinite","prefabHash":152751131,"desc":"A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenL":{"prefab":{"prefabName":"ItemGasFilterNitrogenL","prefabHash":-1387439451,"desc":"","name":"Heavy Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenM":{"prefab":{"prefabName":"ItemGasFilterNitrogenM","prefabHash":-632657357,"desc":"","name":"Medium Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxide":{"prefab":{"prefabName":"ItemGasFilterNitrousOxide","prefabHash":-1247674305,"desc":"","name":"Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideInfinite":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideInfinite","prefabHash":-123934842,"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.","name":"Catalytic Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideL":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideL","prefabHash":465267979,"desc":"","name":"Heavy Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideM":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideM","prefabHash":1824284061,"desc":"","name":"Medium Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygen":{"prefab":{"prefabName":"ItemGasFilterOxygen","prefabHash":-721824748,"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).","name":"Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenInfinite":{"prefab":{"prefabName":"ItemGasFilterOxygenInfinite","prefabHash":-1055451111,"desc":"A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenL":{"prefab":{"prefabName":"ItemGasFilterOxygenL","prefabHash":-1217998945,"desc":"","name":"Heavy Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenM":{"prefab":{"prefabName":"ItemGasFilterOxygenM","prefabHash":-1067319543,"desc":"","name":"Medium Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutants":{"prefab":{"prefabName":"ItemGasFilterPollutants","prefabHash":1915566057,"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.","name":"Filter (Pollutant)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsInfinite":{"prefab":{"prefabName":"ItemGasFilterPollutantsInfinite","prefabHash":-503738105,"desc":"A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsL":{"prefab":{"prefabName":"ItemGasFilterPollutantsL","prefabHash":1959564765,"desc":"","name":"Heavy Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsM":{"prefab":{"prefabName":"ItemGasFilterPollutantsM","prefabHash":63677771,"desc":"","name":"Medium Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatiles":{"prefab":{"prefabName":"ItemGasFilterVolatiles","prefabHash":15011598,"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.","name":"Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesInfinite":{"prefab":{"prefabName":"ItemGasFilterVolatilesInfinite","prefabHash":-1916176068,"desc":"A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesL":{"prefab":{"prefabName":"ItemGasFilterVolatilesL","prefabHash":1255156286,"desc":"","name":"Heavy Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesM":{"prefab":{"prefabName":"ItemGasFilterVolatilesM","prefabHash":1037507240,"desc":"","name":"Medium Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWater":{"prefab":{"prefabName":"ItemGasFilterWater","prefabHash":-1993197973,"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)","name":"Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterInfinite":{"prefab":{"prefabName":"ItemGasFilterWaterInfinite","prefabHash":-1678456554,"desc":"A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterL":{"prefab":{"prefabName":"ItemGasFilterWaterL","prefabHash":2004969680,"desc":"","name":"Heavy Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterM":{"prefab":{"prefabName":"ItemGasFilterWaterM","prefabHash":8804422,"desc":"","name":"Medium Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasSensor":{"prefab":{"prefabName":"ItemGasSensor","prefabHash":1717593480,"desc":"","name":"Kit (Gas Sensor)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemGasTankStorage":{"prefab":{"prefabName":"ItemGasTankStorage","prefabHash":-2113012215,"desc":"This kit produces a Kit (Canister Storage) for refilling a Canister.","name":"Kit (Canister Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemGlassSheets":{"prefab":{"prefabName":"ItemGlassSheets","prefabHash":1588896491,"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.","name":"Glass Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemGlasses":{"prefab":{"prefabName":"ItemGlasses","prefabHash":-1068925231,"desc":"","name":"Glasses"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Glasses","sortingClass":"Clothing"}},"ItemGoldIngot":{"prefab":{"prefabName":"ItemGoldIngot","prefabHash":226410516,"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. ","name":"Ingot (Gold)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Gold":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemGoldOre":{"prefab":{"prefabName":"ItemGoldOre","prefabHash":-1348105509,"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.","name":"Ore (Gold)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Gold":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemGrenade":{"prefab":{"prefabName":"ItemGrenade","prefabHash":1544275894,"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.","name":"Hand Grenade"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemHEMDroidRepairKit":{"prefab":{"prefabName":"ItemHEMDroidRepairKit","prefabHash":470636008,"desc":"Repairs damaged HEM-Droids to full health.","name":"HEMDroid Repair Kit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Food"}},"ItemHardBackpack":{"prefab":{"prefabName":"ItemHardBackpack","prefabHash":374891127,"desc":"This backpack can be useful when you are working inside and don't need to fly around.","name":"Hardsuit Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemHardJetpack":{"prefab":{"prefabName":"ItemHardJetpack","prefabHash":-412551656,"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.","name":"Hardsuit Jetpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemHardMiningBackPack":{"prefab":{"prefabName":"ItemHardMiningBackPack","prefabHash":900366130,"desc":"","name":"Hard Mining Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"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"}]},"ItemHardSuit":{"prefab":{"prefabName":"ItemHardSuit","prefabHash":-1758310454,"desc":"Connects to Logic Transmitter","name":"Hardsuit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Suit","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"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"}],"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"ItemHardsuitHelmet":{"prefab":{"prefabName":"ItemHardsuitHelmet","prefabHash":-84573099,"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.","name":"Hardsuit Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemHastelloyIngot":{"prefab":{"prefabName":"ItemHastelloyIngot","prefabHash":1579842814,"desc":"","name":"Ingot (Hastelloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Hastelloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemHat":{"prefab":{"prefabName":"ItemHat","prefabHash":299189339,"desc":"As the name suggests, this is a hat.","name":"Hat"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"}},"ItemHighVolumeGasCanisterEmpty":{"prefab":{"prefabName":"ItemHighVolumeGasCanisterEmpty","prefabHash":998653377,"desc":"","name":"High Volume Gas Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemHorticultureBelt":{"prefab":{"prefabName":"ItemHorticultureBelt","prefabHash":-1117581553,"desc":"","name":"Horticulture Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemHydroponicTray":{"prefab":{"prefabName":"ItemHydroponicTray","prefabHash":-1193543727,"desc":"This kits creates a Hydroponics Tray for growing various plants.","name":"Kit (Hydroponic Tray)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemIce":{"prefab":{"prefabName":"ItemIce","prefabHash":1217489948,"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.","name":"Ice (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemIgniter":{"prefab":{"prefabName":"ItemIgniter","prefabHash":890106742,"desc":"This kit creates an Kit (Igniter) unit.","name":"Kit (Igniter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemInconelIngot":{"prefab":{"prefabName":"ItemInconelIngot","prefabHash":-787796599,"desc":"","name":"Ingot (Inconel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Inconel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemInsulation":{"prefab":{"prefabName":"ItemInsulation","prefabHash":897176943,"desc":"Mysterious in the extreme, the function of this item is lost to the ages.","name":"Insulation"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Resources"}},"ItemIntegratedCircuit10":{"prefab":{"prefabName":"ItemIntegratedCircuit10","prefabHash":-744098481,"desc":"","name":"Integrated Circuit (IC10)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"ProgrammableChip","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"LineNumber":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"memory":{"memoryAccess":"ReadWrite","memorySize":512}},"ItemInvarIngot":{"prefab":{"prefabName":"ItemInvarIngot","prefabHash":-297990285,"desc":"","name":"Ingot (Invar)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Invar":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemIronFrames":{"prefab":{"prefabName":"ItemIronFrames","prefabHash":1225836666,"desc":"","name":"Iron Frames"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemIronIngot":{"prefab":{"prefabName":"ItemIronIngot","prefabHash":-1301215609,"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.","name":"Ingot (Iron)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Iron":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemIronOre":{"prefab":{"prefabName":"ItemIronOre","prefabHash":1758427767,"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.","name":"Ore (Iron)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Iron":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemIronSheets":{"prefab":{"prefabName":"ItemIronSheets","prefabHash":-487378546,"desc":"","name":"Iron Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemJetpackBasic":{"prefab":{"prefabName":"ItemJetpackBasic","prefabHash":1969189000,"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.","name":"Jetpack Basic"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemJetpackTurbine":{"prefab":{"prefabName":"ItemJetpackTurbine","prefabHash":1604261183,"desc":"","name":"Turbine Jetpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"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"}]},"ItemKitAIMeE":{"prefab":{"prefabName":"ItemKitAIMeE","prefabHash":496830914,"desc":"","name":"Kit (AIMeE)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAccessBridge":{"prefab":{"prefabName":"ItemKitAccessBridge","prefabHash":513258369,"desc":"","name":"Kit (Access Bridge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedComposter":{"prefab":{"prefabName":"ItemKitAdvancedComposter","prefabHash":-1431998347,"desc":"","name":"Kit (Advanced Composter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedFurnace":{"prefab":{"prefabName":"ItemKitAdvancedFurnace","prefabHash":-616758353,"desc":"","name":"Kit (Advanced Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedPackagingMachine":{"prefab":{"prefabName":"ItemKitAdvancedPackagingMachine","prefabHash":-598545233,"desc":"","name":"Kit (Advanced Packaging Machine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAirlock":{"prefab":{"prefabName":"ItemKitAirlock","prefabHash":964043875,"desc":"","name":"Kit (Airlock)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAirlockGate":{"prefab":{"prefabName":"ItemKitAirlockGate","prefabHash":682546947,"desc":"","name":"Kit (Hangar Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitArcFurnace":{"prefab":{"prefabName":"ItemKitArcFurnace","prefabHash":-98995857,"desc":"","name":"Kit (Arc Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAtmospherics":{"prefab":{"prefabName":"ItemKitAtmospherics","prefabHash":1222286371,"desc":"","name":"Kit (Atmospherics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutoMinerSmall":{"prefab":{"prefabName":"ItemKitAutoMinerSmall","prefabHash":1668815415,"desc":"","name":"Kit (Autominer Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutolathe":{"prefab":{"prefabName":"ItemKitAutolathe","prefabHash":-1753893214,"desc":"","name":"Kit (Autolathe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutomatedOven":{"prefab":{"prefabName":"ItemKitAutomatedOven","prefabHash":-1931958659,"desc":"","name":"Kit (Automated Oven)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBasket":{"prefab":{"prefabName":"ItemKitBasket","prefabHash":148305004,"desc":"","name":"Kit (Basket)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBattery":{"prefab":{"prefabName":"ItemKitBattery","prefabHash":1406656973,"desc":"","name":"Kit (Battery)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBatteryLarge":{"prefab":{"prefabName":"ItemKitBatteryLarge","prefabHash":-21225041,"desc":"","name":"Kit (Battery Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBeacon":{"prefab":{"prefabName":"ItemKitBeacon","prefabHash":249073136,"desc":"","name":"Kit (Beacon)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBeds":{"prefab":{"prefabName":"ItemKitBeds","prefabHash":-1241256797,"desc":"","name":"Kit (Beds)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBlastDoor":{"prefab":{"prefabName":"ItemKitBlastDoor","prefabHash":-1755116240,"desc":"","name":"Kit (Blast Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCentrifuge":{"prefab":{"prefabName":"ItemKitCentrifuge","prefabHash":578182956,"desc":"","name":"Kit (Centrifuge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChairs":{"prefab":{"prefabName":"ItemKitChairs","prefabHash":-1394008073,"desc":"","name":"Kit (Chairs)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChute":{"prefab":{"prefabName":"ItemKitChute","prefabHash":1025254665,"desc":"","name":"Kit (Basic Chutes)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChuteUmbilical":{"prefab":{"prefabName":"ItemKitChuteUmbilical","prefabHash":-876560854,"desc":"","name":"Kit (Chute Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCompositeCladding":{"prefab":{"prefabName":"ItemKitCompositeCladding","prefabHash":-1470820996,"desc":"","name":"Kit (Cladding)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCompositeFloorGrating":{"prefab":{"prefabName":"ItemKitCompositeFloorGrating","prefabHash":1182412869,"desc":"","name":"Kit (Floor Grating)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitComputer":{"prefab":{"prefabName":"ItemKitComputer","prefabHash":1990225489,"desc":"","name":"Kit (Computer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitConsole":{"prefab":{"prefabName":"ItemKitConsole","prefabHash":-1241851179,"desc":"","name":"Kit (Consoles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrate":{"prefab":{"prefabName":"ItemKitCrate","prefabHash":429365598,"desc":"","name":"Kit (Crate)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrateMkII":{"prefab":{"prefabName":"ItemKitCrateMkII","prefabHash":-1585956426,"desc":"","name":"Kit (Crate Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrateMount":{"prefab":{"prefabName":"ItemKitCrateMount","prefabHash":-551612946,"desc":"","name":"Kit (Container Mount)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCryoTube":{"prefab":{"prefabName":"ItemKitCryoTube","prefabHash":-545234195,"desc":"","name":"Kit (Cryo Tube)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDeepMiner":{"prefab":{"prefabName":"ItemKitDeepMiner","prefabHash":-1935075707,"desc":"","name":"Kit (Deep Miner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDockingPort":{"prefab":{"prefabName":"ItemKitDockingPort","prefabHash":77421200,"desc":"","name":"Kit (Docking Port)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDoor":{"prefab":{"prefabName":"ItemKitDoor","prefabHash":168615924,"desc":"","name":"Kit (Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDrinkingFountain":{"prefab":{"prefabName":"ItemKitDrinkingFountain","prefabHash":-1743663875,"desc":"","name":"Kit (Drinking Fountain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicCanister":{"prefab":{"prefabName":"ItemKitDynamicCanister","prefabHash":-1061945368,"desc":"","name":"Kit (Portable Gas Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicGasTankAdvanced":{"prefab":{"prefabName":"ItemKitDynamicGasTankAdvanced","prefabHash":1533501495,"desc":"","name":"Kit (Portable Gas Tank Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitDynamicGenerator":{"prefab":{"prefabName":"ItemKitDynamicGenerator","prefabHash":-732720413,"desc":"","name":"Kit (Portable Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicHydroponics":{"prefab":{"prefabName":"ItemKitDynamicHydroponics","prefabHash":-1861154222,"desc":"","name":"Kit (Portable Hydroponics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicLiquidCanister":{"prefab":{"prefabName":"ItemKitDynamicLiquidCanister","prefabHash":375541286,"desc":"","name":"Kit (Portable Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicMKIILiquidCanister":{"prefab":{"prefabName":"ItemKitDynamicMKIILiquidCanister","prefabHash":-638019974,"desc":"","name":"Kit (Portable Liquid Tank Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElectricUmbilical":{"prefab":{"prefabName":"ItemKitElectricUmbilical","prefabHash":1603046970,"desc":"","name":"Kit (Power Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElectronicsPrinter":{"prefab":{"prefabName":"ItemKitElectronicsPrinter","prefabHash":-1181922382,"desc":"","name":"Kit (Electronics Printer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElevator":{"prefab":{"prefabName":"ItemKitElevator","prefabHash":-945806652,"desc":"","name":"Kit (Elevator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineLarge":{"prefab":{"prefabName":"ItemKitEngineLarge","prefabHash":755302726,"desc":"","name":"Kit (Engine Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineMedium":{"prefab":{"prefabName":"ItemKitEngineMedium","prefabHash":1969312177,"desc":"","name":"Kit (Engine Medium)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineSmall":{"prefab":{"prefabName":"ItemKitEngineSmall","prefabHash":19645163,"desc":"","name":"Kit (Engine Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEvaporationChamber":{"prefab":{"prefabName":"ItemKitEvaporationChamber","prefabHash":1587787610,"desc":"","name":"Kit (Phase Change Device)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFlagODA":{"prefab":{"prefabName":"ItemKitFlagODA","prefabHash":1701764190,"desc":"","name":"Kit (ODA Flag)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitFridgeBig":{"prefab":{"prefabName":"ItemKitFridgeBig","prefabHash":-1168199498,"desc":"","name":"Kit (Fridge Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFridgeSmall":{"prefab":{"prefabName":"ItemKitFridgeSmall","prefabHash":1661226524,"desc":"","name":"Kit (Fridge Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFurnace":{"prefab":{"prefabName":"ItemKitFurnace","prefabHash":-806743925,"desc":"","name":"Kit (Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFurniture":{"prefab":{"prefabName":"ItemKitFurniture","prefabHash":1162905029,"desc":"","name":"Kit (Furniture)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFuselage":{"prefab":{"prefabName":"ItemKitFuselage","prefabHash":-366262681,"desc":"","name":"Kit (Fuselage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGasGenerator":{"prefab":{"prefabName":"ItemKitGasGenerator","prefabHash":377745425,"desc":"","name":"Kit (Gas Fuel Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGasUmbilical":{"prefab":{"prefabName":"ItemKitGasUmbilical","prefabHash":-1867280568,"desc":"","name":"Kit (Gas Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGovernedGasRocketEngine":{"prefab":{"prefabName":"ItemKitGovernedGasRocketEngine","prefabHash":206848766,"desc":"","name":"Kit (Pumped Gas Rocket Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGroundTelescope":{"prefab":{"prefabName":"ItemKitGroundTelescope","prefabHash":-2140672772,"desc":"","name":"Kit (Telescope)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGrowLight":{"prefab":{"prefabName":"ItemKitGrowLight","prefabHash":341030083,"desc":"","name":"Kit (Grow Light)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHarvie":{"prefab":{"prefabName":"ItemKitHarvie","prefabHash":-1022693454,"desc":"","name":"Kit (Harvie)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHeatExchanger":{"prefab":{"prefabName":"ItemKitHeatExchanger","prefabHash":-1710540039,"desc":"","name":"Kit Heat Exchanger"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHorizontalAutoMiner":{"prefab":{"prefabName":"ItemKitHorizontalAutoMiner","prefabHash":844391171,"desc":"","name":"Kit (OGRE)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydraulicPipeBender":{"prefab":{"prefabName":"ItemKitHydraulicPipeBender","prefabHash":-2098556089,"desc":"","name":"Kit (Hydraulic Pipe Bender)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydroponicAutomated":{"prefab":{"prefabName":"ItemKitHydroponicAutomated","prefabHash":-927931558,"desc":"","name":"Kit (Automated Hydroponics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydroponicStation":{"prefab":{"prefabName":"ItemKitHydroponicStation","prefabHash":2057179799,"desc":"","name":"Kit (Hydroponic Station)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitIceCrusher":{"prefab":{"prefabName":"ItemKitIceCrusher","prefabHash":288111533,"desc":"","name":"Kit (Ice Crusher)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedLiquidPipe":{"prefab":{"prefabName":"ItemKitInsulatedLiquidPipe","prefabHash":2067655311,"desc":"","name":"Kit (Insulated Liquid Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipe":{"prefab":{"prefabName":"ItemKitInsulatedPipe","prefabHash":452636699,"desc":"","name":"Kit (Insulated Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipeUtility":{"prefab":{"prefabName":"ItemKitInsulatedPipeUtility","prefabHash":-27284803,"desc":"","name":"Kit (Insulated Pipe Utility Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipeUtilityLiquid":{"prefab":{"prefabName":"ItemKitInsulatedPipeUtilityLiquid","prefabHash":-1831558953,"desc":"","name":"Kit (Insulated Pipe Utility Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInteriorDoors":{"prefab":{"prefabName":"ItemKitInteriorDoors","prefabHash":1935945891,"desc":"","name":"Kit (Interior Doors)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLadder":{"prefab":{"prefabName":"ItemKitLadder","prefabHash":489494578,"desc":"","name":"Kit (Ladder)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadAtmos":{"prefab":{"prefabName":"ItemKitLandingPadAtmos","prefabHash":1817007843,"desc":"","name":"Kit (Landing Pad Atmospherics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadBasic":{"prefab":{"prefabName":"ItemKitLandingPadBasic","prefabHash":293581318,"desc":"","name":"Kit (Landing Pad Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadWaypoint":{"prefab":{"prefabName":"ItemKitLandingPadWaypoint","prefabHash":-1267511065,"desc":"","name":"Kit (Landing Pad Runway)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeDirectHeatExchanger":{"prefab":{"prefabName":"ItemKitLargeDirectHeatExchanger","prefabHash":450164077,"desc":"","name":"Kit (Large Direct Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeExtendableRadiator":{"prefab":{"prefabName":"ItemKitLargeExtendableRadiator","prefabHash":847430620,"desc":"","name":"Kit (Large Extendable Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeSatelliteDish":{"prefab":{"prefabName":"ItemKitLargeSatelliteDish","prefabHash":-2039971217,"desc":"","name":"Kit (Large Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLaunchMount":{"prefab":{"prefabName":"ItemKitLaunchMount","prefabHash":-1854167549,"desc":"","name":"Kit (Launch Mount)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLaunchTower":{"prefab":{"prefabName":"ItemKitLaunchTower","prefabHash":-174523552,"desc":"","name":"Kit (Rocket Launch Tower)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidRegulator":{"prefab":{"prefabName":"ItemKitLiquidRegulator","prefabHash":1951126161,"desc":"","name":"Kit (Liquid Regulator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTank":{"prefab":{"prefabName":"ItemKitLiquidTank","prefabHash":-799849305,"desc":"","name":"Kit (Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTankInsulated":{"prefab":{"prefabName":"ItemKitLiquidTankInsulated","prefabHash":617773453,"desc":"","name":"Kit (Insulated Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTurboVolumePump":{"prefab":{"prefabName":"ItemKitLiquidTurboVolumePump","prefabHash":-1805020897,"desc":"","name":"Kit (Turbo Volume Pump - Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidUmbilical":{"prefab":{"prefabName":"ItemKitLiquidUmbilical","prefabHash":1571996765,"desc":"","name":"Kit (Liquid Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLocker":{"prefab":{"prefabName":"ItemKitLocker","prefabHash":882301399,"desc":"","name":"Kit (Locker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicCircuit":{"prefab":{"prefabName":"ItemKitLogicCircuit","prefabHash":1512322581,"desc":"","name":"Kit (IC Housing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicInputOutput":{"prefab":{"prefabName":"ItemKitLogicInputOutput","prefabHash":1997293610,"desc":"","name":"Kit (Logic I/O)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicMemory":{"prefab":{"prefabName":"ItemKitLogicMemory","prefabHash":-2098214189,"desc":"","name":"Kit (Logic Memory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicProcessor":{"prefab":{"prefabName":"ItemKitLogicProcessor","prefabHash":220644373,"desc":"","name":"Kit (Logic Processor)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicSwitch":{"prefab":{"prefabName":"ItemKitLogicSwitch","prefabHash":124499454,"desc":"","name":"Kit (Logic Switch)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicTransmitter":{"prefab":{"prefabName":"ItemKitLogicTransmitter","prefabHash":1005397063,"desc":"","name":"Kit (Logic Transmitter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitMotherShipCore":{"prefab":{"prefabName":"ItemKitMotherShipCore","prefabHash":-344968335,"desc":"","name":"Kit (Mothership)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitMusicMachines":{"prefab":{"prefabName":"ItemKitMusicMachines","prefabHash":-2038889137,"desc":"","name":"Kit (Music Machines)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPassiveLargeRadiatorGas":{"prefab":{"prefabName":"ItemKitPassiveLargeRadiatorGas","prefabHash":-1752768283,"desc":"","name":"Kit (Medium Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemKitPassiveLargeRadiatorLiquid":{"prefab":{"prefabName":"ItemKitPassiveLargeRadiatorLiquid","prefabHash":1453961898,"desc":"","name":"Kit (Medium Radiator Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPassthroughHeatExchanger":{"prefab":{"prefabName":"ItemKitPassthroughHeatExchanger","prefabHash":636112787,"desc":"","name":"Kit (CounterFlow Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPictureFrame":{"prefab":{"prefabName":"ItemKitPictureFrame","prefabHash":-2062364768,"desc":"","name":"Kit Picture Frame"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipe":{"prefab":{"prefabName":"ItemKitPipe","prefabHash":-1619793705,"desc":"","name":"Kit (Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeLiquid":{"prefab":{"prefabName":"ItemKitPipeLiquid","prefabHash":-1166461357,"desc":"","name":"Kit (Liquid Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeOrgan":{"prefab":{"prefabName":"ItemKitPipeOrgan","prefabHash":-827125300,"desc":"","name":"Kit (Pipe Organ)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeRadiator":{"prefab":{"prefabName":"ItemKitPipeRadiator","prefabHash":920411066,"desc":"","name":"Kit (Pipe Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitPipeRadiatorLiquid":{"prefab":{"prefabName":"ItemKitPipeRadiatorLiquid","prefabHash":-1697302609,"desc":"","name":"Kit (Pipe Radiator Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitPipeUtility":{"prefab":{"prefabName":"ItemKitPipeUtility","prefabHash":1934508338,"desc":"","name":"Kit (Pipe Utility Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeUtilityLiquid":{"prefab":{"prefabName":"ItemKitPipeUtilityLiquid","prefabHash":595478589,"desc":"","name":"Kit (Pipe Utility Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPlanter":{"prefab":{"prefabName":"ItemKitPlanter","prefabHash":119096484,"desc":"","name":"Kit (Planter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPortablesConnector":{"prefab":{"prefabName":"ItemKitPortablesConnector","prefabHash":1041148999,"desc":"","name":"Kit (Portables Connector)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPowerTransmitter":{"prefab":{"prefabName":"ItemKitPowerTransmitter","prefabHash":291368213,"desc":"","name":"Kit (Power Transmitter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPowerTransmitterOmni":{"prefab":{"prefabName":"ItemKitPowerTransmitterOmni","prefabHash":-831211676,"desc":"","name":"Kit (Power Transmitter Omni)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPoweredVent":{"prefab":{"prefabName":"ItemKitPoweredVent","prefabHash":2015439334,"desc":"","name":"Kit (Powered Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressureFedGasEngine":{"prefab":{"prefabName":"ItemKitPressureFedGasEngine","prefabHash":-121514007,"desc":"","name":"Kit (Pressure Fed Gas Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressureFedLiquidEngine":{"prefab":{"prefabName":"ItemKitPressureFedLiquidEngine","prefabHash":-99091572,"desc":"","name":"Kit (Pressure Fed Liquid Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressurePlate":{"prefab":{"prefabName":"ItemKitPressurePlate","prefabHash":123504691,"desc":"","name":"Kit (Trigger Plate)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPumpedLiquidEngine":{"prefab":{"prefabName":"ItemKitPumpedLiquidEngine","prefabHash":1921918951,"desc":"","name":"Kit (Pumped Liquid Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRailing":{"prefab":{"prefabName":"ItemKitRailing","prefabHash":750176282,"desc":"","name":"Kit (Railing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRecycler":{"prefab":{"prefabName":"ItemKitRecycler","prefabHash":849148192,"desc":"","name":"Kit (Recycler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRegulator":{"prefab":{"prefabName":"ItemKitRegulator","prefabHash":1181371795,"desc":"","name":"Kit (Pressure Regulator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitReinforcedWindows":{"prefab":{"prefabName":"ItemKitReinforcedWindows","prefabHash":1459985302,"desc":"","name":"Kit (Reinforced Windows)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitResearchMachine":{"prefab":{"prefabName":"ItemKitResearchMachine","prefabHash":724776762,"desc":"","name":"Kit Research Machine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitRespawnPointWallMounted":{"prefab":{"prefabName":"ItemKitRespawnPointWallMounted","prefabHash":1574688481,"desc":"","name":"Kit (Respawn)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketAvionics":{"prefab":{"prefabName":"ItemKitRocketAvionics","prefabHash":1396305045,"desc":"","name":"Kit (Avionics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketBattery":{"prefab":{"prefabName":"ItemKitRocketBattery","prefabHash":-314072139,"desc":"","name":"Kit (Rocket Battery)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCargoStorage":{"prefab":{"prefabName":"ItemKitRocketCargoStorage","prefabHash":479850239,"desc":"","name":"Kit (Rocket Cargo Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCelestialTracker":{"prefab":{"prefabName":"ItemKitRocketCelestialTracker","prefabHash":-303008602,"desc":"","name":"Kit (Rocket Celestial Tracker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCircuitHousing":{"prefab":{"prefabName":"ItemKitRocketCircuitHousing","prefabHash":721251202,"desc":"","name":"Kit (Rocket Circuit Housing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketDatalink":{"prefab":{"prefabName":"ItemKitRocketDatalink","prefabHash":-1256996603,"desc":"","name":"Kit (Rocket Datalink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketGasFuelTank":{"prefab":{"prefabName":"ItemKitRocketGasFuelTank","prefabHash":-1629347579,"desc":"","name":"Kit (Rocket Gas Fuel Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketLiquidFuelTank":{"prefab":{"prefabName":"ItemKitRocketLiquidFuelTank","prefabHash":2032027950,"desc":"","name":"Kit (Rocket Liquid Fuel Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketManufactory":{"prefab":{"prefabName":"ItemKitRocketManufactory","prefabHash":-636127860,"desc":"","name":"Kit (Rocket Manufactory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketMiner":{"prefab":{"prefabName":"ItemKitRocketMiner","prefabHash":-867969909,"desc":"","name":"Kit (Rocket Miner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketScanner":{"prefab":{"prefabName":"ItemKitRocketScanner","prefabHash":1753647154,"desc":"","name":"Kit (Rocket Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketTransformerSmall":{"prefab":{"prefabName":"ItemKitRocketTransformerSmall","prefabHash":-932335800,"desc":"","name":"Kit (Transformer Small (Rocket))"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRoverFrame":{"prefab":{"prefabName":"ItemKitRoverFrame","prefabHash":1827215803,"desc":"","name":"Kit (Rover Frame)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRoverMKI":{"prefab":{"prefabName":"ItemKitRoverMKI","prefabHash":197243872,"desc":"","name":"Kit (Rover Mk I)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSDBHopper":{"prefab":{"prefabName":"ItemKitSDBHopper","prefabHash":323957548,"desc":"","name":"Kit (SDB Hopper)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSatelliteDish":{"prefab":{"prefabName":"ItemKitSatelliteDish","prefabHash":178422810,"desc":"","name":"Kit (Medium Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSecurityPrinter":{"prefab":{"prefabName":"ItemKitSecurityPrinter","prefabHash":578078533,"desc":"","name":"Kit (Security Printer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSensor":{"prefab":{"prefabName":"ItemKitSensor","prefabHash":-1776897113,"desc":"","name":"Kit (Sensors)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitShower":{"prefab":{"prefabName":"ItemKitShower","prefabHash":735858725,"desc":"","name":"Kit (Shower)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSign":{"prefab":{"prefabName":"ItemKitSign","prefabHash":529996327,"desc":"","name":"Kit (Sign)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSleeper":{"prefab":{"prefabName":"ItemKitSleeper","prefabHash":326752036,"desc":"","name":"Kit (Sleeper)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSmallDirectHeatExchanger":{"prefab":{"prefabName":"ItemKitSmallDirectHeatExchanger","prefabHash":-1332682164,"desc":"","name":"Kit (Small Direct Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitSmallSatelliteDish":{"prefab":{"prefabName":"ItemKitSmallSatelliteDish","prefabHash":1960952220,"desc":"","name":"Kit (Small Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolarPanel":{"prefab":{"prefabName":"ItemKitSolarPanel","prefabHash":-1924492105,"desc":"","name":"Kit (Solar Panel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolarPanelBasic":{"prefab":{"prefabName":"ItemKitSolarPanelBasic","prefabHash":844961456,"desc":"","name":"Kit (Solar Panel Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemKitSolarPanelBasicReinforced":{"prefab":{"prefabName":"ItemKitSolarPanelBasicReinforced","prefabHash":-528695432,"desc":"","name":"Kit (Solar Panel Basic Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemKitSolarPanelReinforced":{"prefab":{"prefabName":"ItemKitSolarPanelReinforced","prefabHash":-364868685,"desc":"","name":"Kit (Solar Panel Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolidGenerator":{"prefab":{"prefabName":"ItemKitSolidGenerator","prefabHash":1293995736,"desc":"","name":"Kit (Solid Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSorter":{"prefab":{"prefabName":"ItemKitSorter","prefabHash":969522478,"desc":"","name":"Kit (Sorter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSpeaker":{"prefab":{"prefabName":"ItemKitSpeaker","prefabHash":-126038526,"desc":"","name":"Kit (Speaker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStacker":{"prefab":{"prefabName":"ItemKitStacker","prefabHash":1013244511,"desc":"","name":"Kit (Stacker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStairs":{"prefab":{"prefabName":"ItemKitStairs","prefabHash":170878959,"desc":"","name":"Kit (Stairs)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStairwell":{"prefab":{"prefabName":"ItemKitStairwell","prefabHash":-1868555784,"desc":"","name":"Kit (Stairwell)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStandardChute":{"prefab":{"prefabName":"ItemKitStandardChute","prefabHash":2133035682,"desc":"","name":"Kit (Powered Chutes)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStirlingEngine":{"prefab":{"prefabName":"ItemKitStirlingEngine","prefabHash":-1821571150,"desc":"","name":"Kit (Stirling Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSuitStorage":{"prefab":{"prefabName":"ItemKitSuitStorage","prefabHash":1088892825,"desc":"","name":"Kit (Suit Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTables":{"prefab":{"prefabName":"ItemKitTables","prefabHash":-1361598922,"desc":"","name":"Kit (Tables)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTank":{"prefab":{"prefabName":"ItemKitTank","prefabHash":771439840,"desc":"","name":"Kit (Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTankInsulated":{"prefab":{"prefabName":"ItemKitTankInsulated","prefabHash":1021053608,"desc":"","name":"Kit (Tank Insulated)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemKitToolManufactory":{"prefab":{"prefabName":"ItemKitToolManufactory","prefabHash":529137748,"desc":"","name":"Kit (Tool Manufactory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTransformer":{"prefab":{"prefabName":"ItemKitTransformer","prefabHash":-453039435,"desc":"","name":"Kit (Transformer Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTransformerSmall":{"prefab":{"prefabName":"ItemKitTransformerSmall","prefabHash":665194284,"desc":"","name":"Kit (Transformer Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTurbineGenerator":{"prefab":{"prefabName":"ItemKitTurbineGenerator","prefabHash":-1590715731,"desc":"","name":"Kit (Turbine Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTurboVolumePump":{"prefab":{"prefabName":"ItemKitTurboVolumePump","prefabHash":-1248429712,"desc":"","name":"Kit (Turbo Volume Pump - Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitUprightWindTurbine":{"prefab":{"prefabName":"ItemKitUprightWindTurbine","prefabHash":-1798044015,"desc":"","name":"Kit (Upright Wind Turbine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitVendingMachine":{"prefab":{"prefabName":"ItemKitVendingMachine","prefabHash":-2038384332,"desc":"","name":"Kit (Vending Machine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitVendingMachineRefrigerated":{"prefab":{"prefabName":"ItemKitVendingMachineRefrigerated","prefabHash":-1867508561,"desc":"","name":"Kit (Vending Machine Refrigerated)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWall":{"prefab":{"prefabName":"ItemKitWall","prefabHash":-1826855889,"desc":"","name":"Kit (Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallArch":{"prefab":{"prefabName":"ItemKitWallArch","prefabHash":1625214531,"desc":"","name":"Kit (Arched Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallFlat":{"prefab":{"prefabName":"ItemKitWallFlat","prefabHash":-846838195,"desc":"","name":"Kit (Flat Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallGeometry":{"prefab":{"prefabName":"ItemKitWallGeometry","prefabHash":-784733231,"desc":"","name":"Kit (Geometric Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallIron":{"prefab":{"prefabName":"ItemKitWallIron","prefabHash":-524546923,"desc":"","name":"Kit (Iron Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallPadded":{"prefab":{"prefabName":"ItemKitWallPadded","prefabHash":-821868990,"desc":"","name":"Kit (Padded Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWaterBottleFiller":{"prefab":{"prefabName":"ItemKitWaterBottleFiller","prefabHash":159886536,"desc":"","name":"Kit (Water Bottle Filler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWaterPurifier":{"prefab":{"prefabName":"ItemKitWaterPurifier","prefabHash":611181283,"desc":"","name":"Kit (Water Purifier)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWeatherStation":{"prefab":{"prefabName":"ItemKitWeatherStation","prefabHash":337505889,"desc":"","name":"Kit (Weather Station)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemKitWindTurbine":{"prefab":{"prefabName":"ItemKitWindTurbine","prefabHash":-868916503,"desc":"","name":"Kit (Wind Turbine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWindowShutter":{"prefab":{"prefabName":"ItemKitWindowShutter","prefabHash":1779979754,"desc":"","name":"Kit (Window Shutter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemLabeller":{"prefab":{"prefabName":"ItemLabeller","prefabHash":-743968726,"desc":"A labeller lets you set names and values on a variety of devices and structures, including Console and Logic.","name":"Labeller"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemLaptop":{"prefab":{"prefabName":"ItemLaptop","prefabHash":141535121,"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","name":"Laptop"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","PositionX":"Read","PositionY":"Read","PositionZ":"Read","Power":"Read","PressureExternal":"Read","ReferenceId":"Read","TemperatureExternal":"Read"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"},{"name":"Battery","typ":"Battery"},{"name":"Motherboard","typ":"Motherboard"}]},"ItemLeadIngot":{"prefab":{"prefabName":"ItemLeadIngot","prefabHash":2134647745,"desc":"","name":"Ingot (Lead)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Lead":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemLeadOre":{"prefab":{"prefabName":"ItemLeadOre","prefabHash":-190236170,"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.","name":"Ore (Lead)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Lead":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemLightSword":{"prefab":{"prefabName":"ItemLightSword","prefabHash":1949076595,"desc":"A charming, if useless, pseudo-weapon. (Creative only.)","name":"Light Sword"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidCanisterEmpty":{"prefab":{"prefabName":"ItemLiquidCanisterEmpty","prefabHash":-185207387,"desc":"","name":"Liquid Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemLiquidCanisterSmart":{"prefab":{"prefabName":"ItemLiquidCanisterSmart","prefabHash":777684475,"desc":"0.Mode0\n1.Mode1","name":"Liquid Canister (Smart)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemLiquidDrain":{"prefab":{"prefabName":"ItemLiquidDrain","prefabHash":2036225202,"desc":"","name":"Kit (Liquid Drain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidPipeAnalyzer":{"prefab":{"prefabName":"ItemLiquidPipeAnalyzer","prefabHash":226055671,"desc":"","name":"Kit (Liquid Pipe Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidPipeHeater":{"prefab":{"prefabName":"ItemLiquidPipeHeater","prefabHash":-248475032,"desc":"Creates a Pipe Heater (Liquid).","name":"Pipe Heater Kit (Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidPipeValve":{"prefab":{"prefabName":"ItemLiquidPipeValve","prefabHash":-2126113312,"desc":"This kit creates a Liquid Valve.","name":"Kit (Liquid Pipe Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidPipeVolumePump":{"prefab":{"prefabName":"ItemLiquidPipeVolumePump","prefabHash":-2106280569,"desc":"","name":"Kit (Liquid Volume Pump)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidTankStorage":{"prefab":{"prefabName":"ItemLiquidTankStorage","prefabHash":2037427578,"desc":"This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister.","name":"Kit (Liquid Canister Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemMKIIAngleGrinder":{"prefab":{"prefabName":"ItemMKIIAngleGrinder","prefabHash":240174650,"desc":"Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure.","name":"Mk II Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIArcWelder":{"prefab":{"prefabName":"ItemMKIIArcWelder","prefabHash":-2061979347,"desc":"","name":"Mk II Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIICrowbar":{"prefab":{"prefabName":"ItemMKIICrowbar","prefabHash":1440775434,"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.","name":"Mk II Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIDrill":{"prefab":{"prefabName":"ItemMKIIDrill","prefabHash":324791548,"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.","name":"Mk II Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIDuctTape":{"prefab":{"prefabName":"ItemMKIIDuctTape","prefabHash":388774906,"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.","name":"Mk II Duct Tape"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIMiningDrill":{"prefab":{"prefabName":"ItemMKIIMiningDrill","prefabHash":-1875271296,"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.","name":"Mk II Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIScrewdriver":{"prefab":{"prefabName":"ItemMKIIScrewdriver","prefabHash":-2015613246,"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.","name":"Mk II Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIWireCutters":{"prefab":{"prefabName":"ItemMKIIWireCutters","prefabHash":-178893251,"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.","name":"Mk II Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIWrench":{"prefab":{"prefabName":"ItemMKIIWrench","prefabHash":1862001680,"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.","name":"Mk II Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMarineBodyArmor":{"prefab":{"prefabName":"ItemMarineBodyArmor","prefabHash":1399098998,"desc":"","name":"Marine Armor"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Suit","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMarineHelmet":{"prefab":{"prefabName":"ItemMarineHelmet","prefabHash":1073631646,"desc":"","name":"Marine Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMilk":{"prefab":{"prefabName":"ItemMilk","prefabHash":1327248310,"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.","name":"Milk"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"Milk":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemMiningBackPack":{"prefab":{"prefabName":"ItemMiningBackPack","prefabHash":-1650383245,"desc":"","name":"Mining Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"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"}]},"ItemMiningBelt":{"prefab":{"prefabName":"ItemMiningBelt","prefabHash":-676435305,"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.","name":"Mining Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemMiningBeltMKII":{"prefab":{"prefabName":"ItemMiningBeltMKII","prefabHash":1470787934,"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. ","name":"Mining Belt MK II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"}]},"ItemMiningCharge":{"prefab":{"prefabName":"ItemMiningCharge","prefabHash":15829510,"desc":"A low cost, high yield explosive with a 10 second timer.","name":"Mining Charge"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemMiningDrill":{"prefab":{"prefabName":"ItemMiningDrill","prefabHash":1055173191,"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.'","name":"Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillHeavy":{"prefab":{"prefabName":"ItemMiningDrillHeavy","prefabHash":-1663349918,"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.","name":"Mining Drill (Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillPneumatic":{"prefab":{"prefabName":"ItemMiningDrillPneumatic","prefabHash":1258187304,"desc":"0.Default\n1.Flatten","name":"Pneumatic Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemMkIIToolbelt":{"prefab":{"prefabName":"ItemMkIIToolbelt","prefabHash":1467558064,"desc":"A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy.","name":"Tool Belt MK II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"Tool","typ":"Tool"},{"name":"Tool","typ":"Tool"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMuffin":{"prefab":{"prefabName":"ItemMuffin","prefabHash":-1864982322,"desc":"A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin.","name":"Muffin"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemMushroom":{"prefab":{"prefabName":"ItemMushroom","prefabHash":2044798572,"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.","name":"Mushroom"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Mushroom":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemNVG":{"prefab":{"prefabName":"ItemNVG","prefabHash":982514123,"desc":"","name":"Night Vision Goggles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Glasses","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemNickelIngot":{"prefab":{"prefabName":"ItemNickelIngot","prefabHash":-1406385572,"desc":"","name":"Ingot (Nickel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Nickel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemNickelOre":{"prefab":{"prefabName":"ItemNickelOre","prefabHash":1830218956,"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.","name":"Ore (Nickel)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Nickel":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemNitrice":{"prefab":{"prefabName":"ItemNitrice","prefabHash":-1499471529,"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.","name":"Ice (Nitrice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemOxite":{"prefab":{"prefabName":"ItemOxite","prefabHash":-1805394113,"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.","name":"Ice (Oxite)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPassiveVent":{"prefab":{"prefabName":"ItemPassiveVent","prefabHash":238631271,"desc":"This kit creates a Passive Vent among other variants.","name":"Passive Vent"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPassiveVentInsulated":{"prefab":{"prefabName":"ItemPassiveVentInsulated","prefabHash":-1397583760,"desc":"","name":"Kit (Insulated Passive Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPeaceLily":{"prefab":{"prefabName":"ItemPeaceLily","prefabHash":2042955224,"desc":"A fetching lily with greater resistance to cold temperatures.","name":"Peace Lily"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPickaxe":{"prefab":{"prefabName":"ItemPickaxe","prefabHash":-913649823,"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.","name":"Pickaxe"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemPillHeal":{"prefab":{"prefabName":"ItemPillHeal","prefabHash":1118069417,"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.","name":"Pill (Medical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Food"}},"ItemPillStun":{"prefab":{"prefabName":"ItemPillStun","prefabHash":418958601,"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.","name":"Pill (Paralysis)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Food"}},"ItemPipeAnalyizer":{"prefab":{"prefabName":"ItemPipeAnalyizer","prefabHash":-767597887,"desc":"This kit creates a Pipe Analyzer.","name":"Kit (Pipe Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeCowl":{"prefab":{"prefabName":"ItemPipeCowl","prefabHash":-38898376,"desc":"This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres.","name":"Pipe Cowl"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeDigitalValve":{"prefab":{"prefabName":"ItemPipeDigitalValve","prefabHash":-1532448832,"desc":"This kit creates a Digital Valve.","name":"Kit (Digital Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeGasMixer":{"prefab":{"prefabName":"ItemPipeGasMixer","prefabHash":-1134459463,"desc":"This kit creates a Gas Mixer.","name":"Kit (Gas Mixer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeHeater":{"prefab":{"prefabName":"ItemPipeHeater","prefabHash":-1751627006,"desc":"Creates a Pipe Heater (Gas).","name":"Pipe Heater Kit (Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemPipeIgniter":{"prefab":{"prefabName":"ItemPipeIgniter","prefabHash":1366030599,"desc":"","name":"Kit (Pipe Igniter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeLabel":{"prefab":{"prefabName":"ItemPipeLabel","prefabHash":391769637,"desc":"This kit creates a Pipe Label.","name":"Kit (Pipe Label)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeLiquidRadiator":{"prefab":{"prefabName":"ItemPipeLiquidRadiator","prefabHash":-906521320,"desc":"This kit creates a Liquid Pipe Convection Radiator.","name":"Kit (Liquid Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeMeter":{"prefab":{"prefabName":"ItemPipeMeter","prefabHash":1207939683,"desc":"This kit creates a Pipe Meter.","name":"Kit (Pipe Meter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeRadiator":{"prefab":{"prefabName":"ItemPipeRadiator","prefabHash":-1796655088,"desc":"This kit creates a Pipe Convection Radiator.","name":"Kit (Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeValve":{"prefab":{"prefabName":"ItemPipeValve","prefabHash":799323450,"desc":"This kit creates a Valve.","name":"Kit (Pipe Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemPipeVolumePump":{"prefab":{"prefabName":"ItemPipeVolumePump","prefabHash":-1766301997,"desc":"This kit creates a Volume Pump.","name":"Kit (Volume Pump)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPlainCake":{"prefab":{"prefabName":"ItemPlainCake","prefabHash":-1108244510,"desc":"","name":"Cake"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemPlantEndothermic_Creative":{"prefab":{"prefabName":"ItemPlantEndothermic_Creative","prefabHash":-1159179557,"desc":"","name":"Endothermic Plant Creative"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantEndothermic_Genepool1":{"prefab":{"prefabName":"ItemPlantEndothermic_Genepool1","prefabHash":851290561,"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.","name":"Winterspawn (Alpha variant)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantEndothermic_Genepool2":{"prefab":{"prefabName":"ItemPlantEndothermic_Genepool2","prefabHash":-1414203269,"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.","name":"Winterspawn (Beta variant)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantSampler":{"prefab":{"prefabName":"ItemPlantSampler","prefabHash":173023800,"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.","name":"Plant Sampler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemPlantSwitchGrass":{"prefab":{"prefabName":"ItemPlantSwitchGrass","prefabHash":-532672323,"desc":"","name":"Switch Grass"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Default"}},"ItemPlantThermogenic_Creative":{"prefab":{"prefabName":"ItemPlantThermogenic_Creative","prefabHash":-1208890208,"desc":"","name":"Thermogenic Plant Creative"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantThermogenic_Genepool1":{"prefab":{"prefabName":"ItemPlantThermogenic_Genepool1","prefabHash":-177792789,"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.","name":"Hades Flower (Alpha strain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantThermogenic_Genepool2":{"prefab":{"prefabName":"ItemPlantThermogenic_Genepool2","prefabHash":1819167057,"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.","name":"Hades Flower (Beta strain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlasticSheets":{"prefab":{"prefabName":"ItemPlasticSheets","prefabHash":662053345,"desc":"","name":"Plastic Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemPotato":{"prefab":{"prefabName":"ItemPotato","prefabHash":1929046963,"desc":" Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies.","name":"Potato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Potato":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemPotatoBaked":{"prefab":{"prefabName":"ItemPotatoBaked","prefabHash":-2111886401,"desc":"","name":"Baked Potato"},"item":{"consumable":true,"ingredient":true,"maxQuantity":1,"reagents":{"Potato":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemPowerConnector":{"prefab":{"prefabName":"ItemPowerConnector","prefabHash":839924019,"desc":"This kit creates a Power Connector.","name":"Kit (Power Connector)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemPumpkin":{"prefab":{"prefabName":"ItemPumpkin","prefabHash":1277828144,"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.","name":"Pumpkin"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Pumpkin":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemPumpkinPie":{"prefab":{"prefabName":"ItemPumpkinPie","prefabHash":62768076,"desc":"","name":"Pumpkin Pie"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemPumpkinSoup":{"prefab":{"prefabName":"ItemPumpkinSoup","prefabHash":1277979876,"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","name":"Pumpkin Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemPureIce":{"prefab":{"prefabName":"ItemPureIce","prefabHash":-1616308158,"desc":"A frozen chunk of pure Water","name":"Pure Ice Water"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceCarbonDioxide":{"prefab":{"prefabName":"ItemPureIceCarbonDioxide","prefabHash":-1251009404,"desc":"A frozen chunk of pure Carbon Dioxide","name":"Pure Ice Carbon Dioxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceHydrogen":{"prefab":{"prefabName":"ItemPureIceHydrogen","prefabHash":944530361,"desc":"A frozen chunk of pure Hydrogen","name":"Pure Ice Hydrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidCarbonDioxide":{"prefab":{"prefabName":"ItemPureIceLiquidCarbonDioxide","prefabHash":-1715945725,"desc":"A frozen chunk of pure Liquid Carbon Dioxide","name":"Pure Ice Liquid Carbon Dioxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidHydrogen":{"prefab":{"prefabName":"ItemPureIceLiquidHydrogen","prefabHash":-1044933269,"desc":"A frozen chunk of pure Liquid Hydrogen","name":"Pure Ice Liquid Hydrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidNitrogen":{"prefab":{"prefabName":"ItemPureIceLiquidNitrogen","prefabHash":1674576569,"desc":"A frozen chunk of pure Liquid Nitrogen","name":"Pure Ice Liquid Nitrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidNitrous":{"prefab":{"prefabName":"ItemPureIceLiquidNitrous","prefabHash":1428477399,"desc":"A frozen chunk of pure Liquid Nitrous Oxide","name":"Pure Ice Liquid Nitrous"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidOxygen":{"prefab":{"prefabName":"ItemPureIceLiquidOxygen","prefabHash":541621589,"desc":"A frozen chunk of pure Liquid Oxygen","name":"Pure Ice Liquid Oxygen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidPollutant":{"prefab":{"prefabName":"ItemPureIceLiquidPollutant","prefabHash":-1748926678,"desc":"A frozen chunk of pure Liquid Pollutant","name":"Pure Ice Liquid Pollutant"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidVolatiles":{"prefab":{"prefabName":"ItemPureIceLiquidVolatiles","prefabHash":-1306628937,"desc":"A frozen chunk of pure Liquid Volatiles","name":"Pure Ice Liquid Volatiles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceNitrogen":{"prefab":{"prefabName":"ItemPureIceNitrogen","prefabHash":-1708395413,"desc":"A frozen chunk of pure Nitrogen","name":"Pure Ice Nitrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceNitrous":{"prefab":{"prefabName":"ItemPureIceNitrous","prefabHash":386754635,"desc":"A frozen chunk of pure Nitrous Oxide","name":"Pure Ice NitrousOxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceOxygen":{"prefab":{"prefabName":"ItemPureIceOxygen","prefabHash":-1150448260,"desc":"A frozen chunk of pure Oxygen","name":"Pure Ice Oxygen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIcePollutant":{"prefab":{"prefabName":"ItemPureIcePollutant","prefabHash":-1755356,"desc":"A frozen chunk of pure Pollutant","name":"Pure Ice Pollutant"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIcePollutedWater":{"prefab":{"prefabName":"ItemPureIcePollutedWater","prefabHash":-2073202179,"desc":"A frozen chunk of Polluted Water","name":"Pure Ice Polluted Water"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceSteam":{"prefab":{"prefabName":"ItemPureIceSteam","prefabHash":-874791066,"desc":"A frozen chunk of pure Steam","name":"Pure Ice Steam"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceVolatiles":{"prefab":{"prefabName":"ItemPureIceVolatiles","prefabHash":-633723719,"desc":"A frozen chunk of pure Volatiles","name":"Pure Ice Volatiles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemRTG":{"prefab":{"prefabName":"ItemRTG","prefabHash":495305053,"desc":"This kit creates that miracle of modern science, a Kit (Creative RTG).","name":"Kit (Creative RTG)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemRTGSurvival":{"prefab":{"prefabName":"ItemRTGSurvival","prefabHash":1817645803,"desc":"This kit creates a Kit (RTG).","name":"Kit (RTG)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemReagentMix":{"prefab":{"prefabName":"ItemReagentMix","prefabHash":-1641500434,"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.","name":"Reagent Mix"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ores"}},"ItemRemoteDetonator":{"prefab":{"prefabName":"ItemRemoteDetonator","prefabHash":678483886,"desc":"","name":"Remote Detonator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemReusableFireExtinguisher":{"prefab":{"prefabName":"ItemReusableFireExtinguisher","prefabHash":-1773192190,"desc":"Requires a canister filled with any inert liquid to opperate.","name":"Fire Extinguisher (Reusable)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"ItemRice":{"prefab":{"prefabName":"ItemRice","prefabHash":658916791,"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.","name":"Rice"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Rice":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemRoadFlare":{"prefab":{"prefabName":"ItemRoadFlare","prefabHash":871811564,"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.","name":"Road Flare"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"Flare","sortingClass":"Default"}},"ItemRocketMiningDrillHead":{"prefab":{"prefabName":"ItemRocketMiningDrillHead","prefabHash":2109945337,"desc":"Replaceable drill head for Rocket Miner","name":"Mining-Drill Head (Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadDurable":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadDurable","prefabHash":1530764483,"desc":"","name":"Mining-Drill Head (Durable)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadHighSpeedIce":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadHighSpeedIce","prefabHash":653461728,"desc":"","name":"Mining-Drill Head (High Speed Ice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadHighSpeedMineral":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadHighSpeedMineral","prefabHash":1440678625,"desc":"","name":"Mining-Drill Head (High Speed Mineral)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadIce":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadIce","prefabHash":-380904592,"desc":"","name":"Mining-Drill Head (Ice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadLongTerm":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadLongTerm","prefabHash":-684020753,"desc":"","name":"Mining-Drill Head (Long Term)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadMineral":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadMineral","prefabHash":1083675581,"desc":"","name":"Mining-Drill Head (Mineral)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketScanningHead":{"prefab":{"prefabName":"ItemRocketScanningHead","prefabHash":-1198702771,"desc":"","name":"Rocket Scanner Head"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"ScanningHead","sortingClass":"Default"}},"ItemScanner":{"prefab":{"prefabName":"ItemScanner","prefabHash":1661270830,"desc":"A mysterious piece of technology, rumored to have Zrillian origins.","name":"Handheld Scanner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemScrewdriver":{"prefab":{"prefabName":"ItemScrewdriver","prefabHash":687940869,"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.","name":"Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemSecurityCamera":{"prefab":{"prefabName":"ItemSecurityCamera","prefabHash":-1981101032,"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.","name":"Security Camera"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemSensorLenses":{"prefab":{"prefabName":"ItemSensorLenses","prefabHash":-1176140051,"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.","name":"Sensor Lenses"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Glasses","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Sensor Processing Unit","typ":"SensorProcessingUnit"}]},"ItemSensorProcessingUnitCelestialScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitCelestialScanner","prefabHash":-1154200014,"desc":"","name":"Sensor Processing Unit (Celestial Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSensorProcessingUnitMesonScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitMesonScanner","prefabHash":-1730464583,"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.","name":"Sensor Processing Unit (T-Ray Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSensorProcessingUnitOreScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitOreScanner","prefabHash":-1219128491,"desc":"The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD.","name":"Sensor Processing Unit (Ore Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSiliconIngot":{"prefab":{"prefabName":"ItemSiliconIngot","prefabHash":-290196476,"desc":"","name":"Ingot (Silicon)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Silicon":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSiliconOre":{"prefab":{"prefabName":"ItemSiliconOre","prefabHash":1103972403,"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.","name":"Ore (Silicon)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Silicon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemSilverIngot":{"prefab":{"prefabName":"ItemSilverIngot","prefabHash":-929742000,"desc":"","name":"Ingot (Silver)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Silver":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSilverOre":{"prefab":{"prefabName":"ItemSilverOre","prefabHash":-916518678,"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.","name":"Ore (Silver)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Silver":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemSolderIngot":{"prefab":{"prefabName":"ItemSolderIngot","prefabHash":-82508479,"desc":"","name":"Ingot (Solder)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Solder":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSolidFuel":{"prefab":{"prefabName":"ItemSolidFuel","prefabHash":-365253871,"desc":"","name":"Solid Fuel (Hydrocarbon)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Hydrocarbon":1.0},"slotClass":"Ore","sortingClass":"Resources"}},"ItemSoundCartridgeBass":{"prefab":{"prefabName":"ItemSoundCartridgeBass","prefabHash":-1883441704,"desc":"","name":"Sound Cartridge Bass"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeDrums":{"prefab":{"prefabName":"ItemSoundCartridgeDrums","prefabHash":-1901500508,"desc":"","name":"Sound Cartridge Drums"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeLeads":{"prefab":{"prefabName":"ItemSoundCartridgeLeads","prefabHash":-1174735962,"desc":"","name":"Sound Cartridge Leads"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeSynth":{"prefab":{"prefabName":"ItemSoundCartridgeSynth","prefabHash":-1971419310,"desc":"","name":"Sound Cartridge Synth"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoyOil":{"prefab":{"prefabName":"ItemSoyOil","prefabHash":1387403148,"desc":"","name":"Soy Oil"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"Oil":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemSoybean":{"prefab":{"prefabName":"ItemSoybean","prefabHash":1924673028,"desc":" Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil","name":"Soybean"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Soy":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemSpaceCleaner":{"prefab":{"prefabName":"ItemSpaceCleaner","prefabHash":-1737666461,"desc":"There was a time when humanity really wanted to keep space clean. That time has passed.","name":"Space Cleaner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemSpaceHelmet":{"prefab":{"prefabName":"ItemSpaceHelmet","prefabHash":714830451,"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.","name":"Space Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemSpaceIce":{"prefab":{"prefabName":"ItemSpaceIce","prefabHash":675686937,"desc":"","name":"Space Ice"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Ore","sortingClass":"Ores"}},"ItemSpaceOre":{"prefab":{"prefabName":"ItemSpaceOre","prefabHash":2131916219,"desc":"Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores.","name":"Dirty Ore"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Ore","sortingClass":"Ores"}},"ItemSpacepack":{"prefab":{"prefabName":"ItemSpacepack","prefabHash":-1260618380,"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.","name":"Spacepack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemSprayCanBlack":{"prefab":{"prefabName":"ItemSprayCanBlack","prefabHash":-688107795,"desc":"Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses.","name":"Spray Paint (Black)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanBlue":{"prefab":{"prefabName":"ItemSprayCanBlue","prefabHash":-498464883,"desc":"What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'","name":"Spray Paint (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanBrown":{"prefab":{"prefabName":"ItemSprayCanBrown","prefabHash":845176977,"desc":"In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed.","name":"Spray Paint (Brown)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanGreen":{"prefab":{"prefabName":"ItemSprayCanGreen","prefabHash":-1880941852,"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.","name":"Spray Paint (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanGrey":{"prefab":{"prefabName":"ItemSprayCanGrey","prefabHash":-1645266981,"desc":"Arguably the most popular color in the universe, grey was invented so designers had something to do.","name":"Spray Paint (Grey)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanKhaki":{"prefab":{"prefabName":"ItemSprayCanKhaki","prefabHash":1918456047,"desc":"Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode.","name":"Spray Paint (Khaki)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanOrange":{"prefab":{"prefabName":"ItemSprayCanOrange","prefabHash":-158007629,"desc":"Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove.","name":"Spray Paint (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanPink":{"prefab":{"prefabName":"ItemSprayCanPink","prefabHash":1344257263,"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.","name":"Spray Paint (Pink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanPurple":{"prefab":{"prefabName":"ItemSprayCanPurple","prefabHash":30686509,"desc":"Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong.","name":"Spray Paint (Purple)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanRed":{"prefab":{"prefabName":"ItemSprayCanRed","prefabHash":1514393921,"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.","name":"Spray Paint (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanWhite":{"prefab":{"prefabName":"ItemSprayCanWhite","prefabHash":498481505,"desc":"White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff.","name":"Spray Paint (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanYellow":{"prefab":{"prefabName":"ItemSprayCanYellow","prefabHash":995468116,"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.","name":"Spray Paint (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayGun":{"prefab":{"prefabName":"ItemSprayGun","prefabHash":1289723966,"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.","name":"Spray Gun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Spray Can","typ":"Bottle"}]},"ItemSteelFrames":{"prefab":{"prefabName":"ItemSteelFrames","prefabHash":-1448105779,"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.","name":"Steel Frames"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemSteelIngot":{"prefab":{"prefabName":"ItemSteelIngot","prefabHash":-654790771,"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.","name":"Ingot (Steel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Steel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSteelSheets":{"prefab":{"prefabName":"ItemSteelSheets","prefabHash":38555961,"desc":"An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types.","name":"Steel Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemStelliteGlassSheets":{"prefab":{"prefabName":"ItemStelliteGlassSheets","prefabHash":-2038663432,"desc":"A stronger glass substitute.","name":"Stellite Glass Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemStelliteIngot":{"prefab":{"prefabName":"ItemStelliteIngot","prefabHash":-1897868623,"desc":"","name":"Ingot (Stellite)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Stellite":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSugar":{"prefab":{"prefabName":"ItemSugar","prefabHash":2111910840,"desc":"","name":"Sugar"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Sugar":10.0},"slotClass":"None","sortingClass":"Resources"}},"ItemSugarCane":{"prefab":{"prefabName":"ItemSugarCane","prefabHash":-1335056202,"desc":"","name":"Sugarcane"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Sugar":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemSuitModCryogenicUpgrade":{"prefab":{"prefabName":"ItemSuitModCryogenicUpgrade","prefabHash":-1274308304,"desc":"Enables suits with basic cooling functionality to work with cryogenic liquid.","name":"Cryogenic Suit Upgrade"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SuitMod","sortingClass":"Default"}},"ItemTablet":{"prefab":{"prefabName":"ItemTablet","prefabHash":-229808600,"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.","name":"Handheld Tablet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"}]},"ItemTerrainManipulator":{"prefab":{"prefabName":"ItemTerrainManipulator","prefabHash":111280987,"desc":"0.Mode0\n1.Mode1","name":"Terrain Manipulator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Dirt Canister","typ":"Ore"}]},"ItemTomato":{"prefab":{"prefabName":"ItemTomato","prefabHash":-998592080,"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.","name":"Tomato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Tomato":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemTomatoSoup":{"prefab":{"prefabName":"ItemTomatoSoup","prefabHash":688734890,"desc":"Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine.","name":"Tomato Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemToolBelt":{"prefab":{"prefabName":"ItemToolBelt","prefabHash":-355127880,"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.","name":"Tool Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemTropicalPlant":{"prefab":{"prefabName":"ItemTropicalPlant","prefabHash":-800947386,"desc":"An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants.","name":"Tropical Lily"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemUraniumOre":{"prefab":{"prefabName":"ItemUraniumOre","prefabHash":-1516581844,"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.","name":"Ore (Uranium)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Uranium":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemVolatiles":{"prefab":{"prefabName":"ItemVolatiles","prefabHash":1253102035,"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","name":"Ice (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemWallCooler":{"prefab":{"prefabName":"ItemWallCooler","prefabHash":-1567752627,"desc":"This kit creates a Wall Cooler.","name":"Kit (Wall Cooler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWallHeater":{"prefab":{"prefabName":"ItemWallHeater","prefabHash":1880134612,"desc":"This kit creates a Kit (Wall Heater).","name":"Kit (Wall Heater)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWallLight":{"prefab":{"prefabName":"ItemWallLight","prefabHash":1108423476,"desc":"This kit creates any one of ten Kit (Lights) variants.","name":"Kit (Lights)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemWaspaloyIngot":{"prefab":{"prefabName":"ItemWaspaloyIngot","prefabHash":156348098,"desc":"","name":"Ingot (Waspaloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Waspaloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemWaterBottle":{"prefab":{"prefabName":"ItemWaterBottle","prefabHash":107741229,"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.","name":"Water Bottle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"LiquidBottle","sortingClass":"Default"}},"ItemWaterPipeDigitalValve":{"prefab":{"prefabName":"ItemWaterPipeDigitalValve","prefabHash":309693520,"desc":"","name":"Kit (Liquid Digital Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWaterPipeMeter":{"prefab":{"prefabName":"ItemWaterPipeMeter","prefabHash":-90898877,"desc":"","name":"Kit (Liquid Pipe Meter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWaterWallCooler":{"prefab":{"prefabName":"ItemWaterWallCooler","prefabHash":-1721846327,"desc":"","name":"Kit (Liquid Wall Cooler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWearLamp":{"prefab":{"prefabName":"ItemWearLamp","prefabHash":-598730959,"desc":"","name":"Headlamp"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemWeldingTorch":{"prefab":{"prefabName":"ItemWeldingTorch","prefabHash":-2066892079,"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.","name":"Welding Torch"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemWheat":{"prefab":{"prefabName":"ItemWheat","prefabHash":-1057658015,"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.","name":"Wheat"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Carbon":1.0},"slotClass":"Plant","sortingClass":"Default"}},"ItemWireCutters":{"prefab":{"prefabName":"ItemWireCutters","prefabHash":1535854074,"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.","name":"Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemWirelessBatteryCellExtraLarge":{"prefab":{"prefabName":"ItemWirelessBatteryCellExtraLarge","prefabHash":-504717121,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Wireless Battery Cell Extra Large"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemWreckageAirConditioner1":{"prefab":{"prefabName":"ItemWreckageAirConditioner1","prefabHash":-1826023284,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageAirConditioner2":{"prefab":{"prefabName":"ItemWreckageAirConditioner2","prefabHash":169888054,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageHydroponicsTray1":{"prefab":{"prefabName":"ItemWreckageHydroponicsTray1","prefabHash":-310178617,"desc":"","name":"Wreckage Hydroponics Tray"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageLargeExtendableRadiator01":{"prefab":{"prefabName":"ItemWreckageLargeExtendableRadiator01","prefabHash":-997763,"desc":"","name":"Wreckage Large Extendable Radiator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureRTG1":{"prefab":{"prefabName":"ItemWreckageStructureRTG1","prefabHash":391453348,"desc":"","name":"Wreckage Structure RTG"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation001":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation001","prefabHash":-834664349,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation002":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation002","prefabHash":1464424921,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation003":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation003","prefabHash":542009679,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation004":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation004","prefabHash":-1104478996,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation005":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation005","prefabHash":-919745414,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation006":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation006","prefabHash":1344576960,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation007":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation007","prefabHash":656649558,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation008":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation008","prefabHash":-1214467897,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator1":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator1","prefabHash":-1662394403,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator2":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator2","prefabHash":98602599,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator3":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator3","prefabHash":1927790321,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageWallCooler1":{"prefab":{"prefabName":"ItemWreckageWallCooler1","prefabHash":-1682930158,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageWallCooler2":{"prefab":{"prefabName":"ItemWreckageWallCooler2","prefabHash":45733800,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWrench":{"prefab":{"prefabName":"ItemWrench","prefabHash":-1886261558,"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","name":"Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"KitSDBSilo":{"prefab":{"prefabName":"KitSDBSilo","prefabHash":1932952652,"desc":"This kit creates a SDB Silo.","name":"Kit (SDB Silo)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"KitStructureCombustionCentrifuge":{"prefab":{"prefabName":"KitStructureCombustionCentrifuge","prefabHash":231903234,"desc":"","name":"Kit (Combustion Centrifuge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"KitchenTableShort":{"prefab":{"prefabName":"KitchenTableShort","prefabHash":-1427415566,"desc":"","name":"Kitchen Table (Short)"},"structure":{"smallGrid":true}},"KitchenTableSimpleShort":{"prefab":{"prefabName":"KitchenTableSimpleShort","prefabHash":-78099334,"desc":"","name":"Kitchen Table (Simple Short)"},"structure":{"smallGrid":true}},"KitchenTableSimpleTall":{"prefab":{"prefabName":"KitchenTableSimpleTall","prefabHash":-1068629349,"desc":"","name":"Kitchen Table (Simple Tall)"},"structure":{"smallGrid":true}},"KitchenTableTall":{"prefab":{"prefabName":"KitchenTableTall","prefabHash":-1386237782,"desc":"","name":"Kitchen Table (Tall)"},"structure":{"smallGrid":true}},"Lander":{"prefab":{"prefabName":"Lander","prefabHash":1605130615,"desc":"","name":"Lander"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"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"}]},"Landingpad_2x2CenterPiece01":{"prefab":{"prefabName":"Landingpad_2x2CenterPiece01","prefabHash":-1295222317,"desc":"Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors","name":"Landingpad 2x2 Center Piece"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Landingpad_BlankPiece":{"prefab":{"prefabName":"Landingpad_BlankPiece","prefabHash":912453390,"desc":"","name":"Landingpad"},"structure":{"smallGrid":true}},"Landingpad_CenterPiece01":{"prefab":{"prefabName":"Landingpad_CenterPiece01","prefabHash":1070143159,"desc":"The target point where the trader shuttle will land. Requires a clear view of the sky.","name":"Landingpad Center"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"modes":{"0":"None","1":"NoContact","2":"Moving","3":"Holding","4":"Landed"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Landingpad_CrossPiece":{"prefab":{"prefabName":"Landingpad_CrossPiece","prefabHash":1101296153,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Cross"},"structure":{"smallGrid":true}},"Landingpad_DataConnectionPiece":{"prefab":{"prefabName":"Landingpad_DataConnectionPiece","prefabHash":-2066405918,"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.","name":"Landingpad Data And Power"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Combustion":"Read","ContactTypeId":"Read","Error":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_DiagonalPiece01":{"prefab":{"prefabName":"Landingpad_DiagonalPiece01","prefabHash":977899131,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Diagonal"},"structure":{"smallGrid":true}},"Landingpad_GasConnectorInwardPiece":{"prefab":{"prefabName":"Landingpad_GasConnectorInwardPiece","prefabHash":817945707,"desc":"","name":"Landingpad Gas Input"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_GasConnectorOutwardPiece":{"prefab":{"prefabName":"Landingpad_GasConnectorOutwardPiece","prefabHash":-1100218307,"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.","name":"Landingpad Gas Output"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_GasCylinderTankPiece":{"prefab":{"prefabName":"Landingpad_GasCylinderTankPiece","prefabHash":170818567,"desc":"Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders.","name":"Landingpad Gas Storage"},"structure":{"smallGrid":true}},"Landingpad_LiquidConnectorInwardPiece":{"prefab":{"prefabName":"Landingpad_LiquidConnectorInwardPiece","prefabHash":-1216167727,"desc":"","name":"Landingpad Liquid Input"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_LiquidConnectorOutwardPiece":{"prefab":{"prefabName":"Landingpad_LiquidConnectorOutwardPiece","prefabHash":-1788929869,"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.","name":"Landingpad Liquid Output"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_StraightPiece01":{"prefab":{"prefabName":"Landingpad_StraightPiece01","prefabHash":-976273247,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Straight"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceCorner":{"prefab":{"prefabName":"Landingpad_TaxiPieceCorner","prefabHash":-1872345847,"desc":"","name":"Landingpad Taxi Corner"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceHold":{"prefab":{"prefabName":"Landingpad_TaxiPieceHold","prefabHash":146051619,"desc":"","name":"Landingpad Taxi Hold"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceStraight":{"prefab":{"prefabName":"Landingpad_TaxiPieceStraight","prefabHash":-1477941080,"desc":"","name":"Landingpad Taxi Straight"},"structure":{"smallGrid":true}},"Landingpad_ThreshholdPiece":{"prefab":{"prefabName":"Landingpad_ThreshholdPiece","prefabHash":-1514298582,"desc":"","name":"Landingpad Threshhold"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"LogicStepSequencer8":{"prefab":{"prefabName":"LogicStepSequencer8","prefabHash":1531272458,"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.","name":"Logic Step Sequencer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","Bpm":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Sound Cartridge","typ":"SoundCartridge"}],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Meteorite":{"prefab":{"prefabName":"Meteorite","prefabHash":-99064335,"desc":"","name":"Meteorite"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"MonsterEgg":{"prefab":{"prefabName":"MonsterEgg","prefabHash":-1667675295,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"MotherboardComms":{"prefab":{"prefabName":"MotherboardComms","prefabHash":-337075633,"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.","name":"Communications Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardLogic":{"prefab":{"prefabName":"MotherboardLogic","prefabHash":502555944,"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.","name":"Logic Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardMissionControl":{"prefab":{"prefabName":"MotherboardMissionControl","prefabHash":-127121474,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardProgrammableChip":{"prefab":{"prefabName":"MotherboardProgrammableChip","prefabHash":-161107071,"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.","name":"IC Editor Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardRockets":{"prefab":{"prefabName":"MotherboardRockets","prefabHash":-806986392,"desc":"","name":"Rocket Control Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardSorter":{"prefab":{"prefabName":"MotherboardSorter","prefabHash":-1908268220,"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.","name":"Sorter Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MothershipCore":{"prefab":{"prefabName":"MothershipCore","prefabHash":-1930442922,"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.","name":"Mothership Core"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"NpcChick":{"prefab":{"prefabName":"NpcChick","prefabHash":155856647,"desc":"","name":"Chick"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"NpcChicken":{"prefab":{"prefabName":"NpcChicken","prefabHash":399074198,"desc":"","name":"Chicken"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"PassiveSpeaker":{"prefab":{"prefabName":"PassiveSpeaker","prefabHash":248893646,"desc":"","name":"Passive Speaker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"ReadWrite","PrefabHash":"ReadWrite","ReferenceId":"ReadWrite","SoundAlert":"ReadWrite","Volume":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"PipeBenderMod":{"prefab":{"prefabName":"PipeBenderMod","prefabHash":443947415,"desc":"Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Pipe Bender Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"PortableComposter":{"prefab":{"prefabName":"PortableComposter","prefabHash":-1958705204,"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","name":"Portable Composter"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"Battery"},{"name":"Liquid Canister","typ":"LiquidCanister"}]},"PortableSolarPanel":{"prefab":{"prefabName":"PortableSolarPanel","prefabHash":2043318949,"desc":"","name":"Portable Solar Panel"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Open":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"RailingElegant01":{"prefab":{"prefabName":"RailingElegant01","prefabHash":399661231,"desc":"","name":"Railing Elegant (Type 1)"},"structure":{"smallGrid":false}},"RailingElegant02":{"prefab":{"prefabName":"RailingElegant02","prefabHash":-1898247915,"desc":"","name":"Railing Elegant (Type 2)"},"structure":{"smallGrid":false}},"RailingIndustrial02":{"prefab":{"prefabName":"RailingIndustrial02","prefabHash":-2072792175,"desc":"","name":"Railing Industrial (Type 2)"},"structure":{"smallGrid":false}},"ReagentColorBlue":{"prefab":{"prefabName":"ReagentColorBlue","prefabHash":980054869,"desc":"","name":"Color Dye (Blue)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorBlue":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorGreen":{"prefab":{"prefabName":"ReagentColorGreen","prefabHash":120807542,"desc":"","name":"Color Dye (Green)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorGreen":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorOrange":{"prefab":{"prefabName":"ReagentColorOrange","prefabHash":-400696159,"desc":"","name":"Color Dye (Orange)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorOrange":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorRed":{"prefab":{"prefabName":"ReagentColorRed","prefabHash":1998377961,"desc":"","name":"Color Dye (Red)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorRed":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorYellow":{"prefab":{"prefabName":"ReagentColorYellow","prefabHash":635208006,"desc":"","name":"Color Dye (Yellow)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorYellow":10.0},"slotClass":"None","sortingClass":"Resources"}},"RespawnPoint":{"prefab":{"prefabName":"RespawnPoint","prefabHash":-788672929,"desc":"Place a respawn point to set a player entry point to your base when loading in, or returning from the dead.","name":"Respawn Point"},"structure":{"smallGrid":true}},"RespawnPointWallMounted":{"prefab":{"prefabName":"RespawnPointWallMounted","prefabHash":-491247370,"desc":"","name":"Respawn Point (Mounted)"},"structure":{"smallGrid":true}},"Robot":{"prefab":{"prefabName":"Robot","prefabHash":434786784,"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","name":"AIMeE Bot"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"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"}]},"RoverCargo":{"prefab":{"prefabName":"RoverCargo","prefabHash":350726273,"desc":"Connects to Logic Transmitter","name":"Rover (Cargo)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"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":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI":{"prefab":{"prefabName":"Rover_MkI","prefabHash":-2049946335,"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","name":"Rover MkI"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"},"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"},"10":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"slots":[{"name":"Entity","typ":"Entity"},{"name":"Entity","typ":"Entity"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI_build_states":{"prefab":{"prefabName":"Rover_MkI_build_states","prefabHash":861674123,"desc":"","name":"Rover MKI"},"structure":{"smallGrid":false}},"SMGMagazine":{"prefab":{"prefabName":"SMGMagazine","prefabHash":-256607540,"desc":"","name":"SMG Magazine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Magazine","sortingClass":"Default"}},"SeedBag_Cocoa":{"prefab":{"prefabName":"SeedBag_Cocoa","prefabHash":1139887531,"desc":"","name":"Cocoa Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Corn":{"prefab":{"prefabName":"SeedBag_Corn","prefabHash":-1290755415,"desc":"Grow a Corn.","name":"Corn Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Fern":{"prefab":{"prefabName":"SeedBag_Fern","prefabHash":-1990600883,"desc":"Grow a Fern.","name":"Fern Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Mushroom":{"prefab":{"prefabName":"SeedBag_Mushroom","prefabHash":311593418,"desc":"Grow a Mushroom.","name":"Mushroom Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Potato":{"prefab":{"prefabName":"SeedBag_Potato","prefabHash":1005571172,"desc":"Grow a Potato.","name":"Potato Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Pumpkin":{"prefab":{"prefabName":"SeedBag_Pumpkin","prefabHash":1423199840,"desc":"Grow a Pumpkin.","name":"Pumpkin Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Rice":{"prefab":{"prefabName":"SeedBag_Rice","prefabHash":-1691151239,"desc":"Grow some Rice.","name":"Rice Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Soybean":{"prefab":{"prefabName":"SeedBag_Soybean","prefabHash":1783004244,"desc":"Grow some Soybean.","name":"Soybean Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_SugarCane":{"prefab":{"prefabName":"SeedBag_SugarCane","prefabHash":-1884103228,"desc":"","name":"Sugarcane Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Switchgrass":{"prefab":{"prefabName":"SeedBag_Switchgrass","prefabHash":488360169,"desc":"","name":"Switchgrass Seed"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Tomato":{"prefab":{"prefabName":"SeedBag_Tomato","prefabHash":-1922066841,"desc":"Grow a Tomato.","name":"Tomato Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Wheet":{"prefab":{"prefabName":"SeedBag_Wheet","prefabHash":-654756733,"desc":"Grow some Wheat.","name":"Wheat Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SpaceShuttle":{"prefab":{"prefabName":"SpaceShuttle","prefabHash":-1991297271,"desc":"An antiquated Sinotai transport craft, long since decommissioned.","name":"Space Shuttle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Captain's Seat","typ":"Entity"},{"name":"Passenger Seat Left","typ":"Entity"},{"name":"Passenger Seat Right","typ":"Entity"}]},"StopWatch":{"prefab":{"prefabName":"StopWatch","prefabHash":-1527229051,"desc":"","name":"Stop Watch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Time":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureAccessBridge":{"prefab":{"prefabName":"StructureAccessBridge","prefabHash":1298920475,"desc":"Extendable bridge that spans three grids","name":"Access Bridge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureActiveVent":{"prefab":{"prefabName":"StructureActiveVent","prefabHash":-1129453144,"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 ...","name":"Active Vent"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAdvancedComposter":{"prefab":{"prefabName":"StructureAdvancedComposter","prefabHash":446212963,"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","name":"Advanced Composter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAdvancedFurnace":{"prefab":{"prefabName":"StructureAdvancedFurnace","prefabHash":545937711,"desc":"The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure.","name":"Advanced Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Combustion":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"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","Reagents":"Read","RecipeHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingInput":"ReadWrite","SettingOutput":"ReadWrite","Temperature":"Read","TotalMoles":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureAdvancedPackagingMachine":{"prefab":{"prefabName":"StructureAdvancedPackagingMachine","prefabHash":-463037670,"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.","name":"Advanced Packaging Machine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureAirConditioner":{"prefab":{"prefabName":"StructureAirConditioner","prefabHash":-2087593337,"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.","name":"Air Conditioner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"CombustionInput":"Read","CombustionOutput":"Read","CombustionOutput2":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidCarbonDioxideOutput2":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrogenOutput2":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidNitrousOxideOutput2":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidOxygenOutput2":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidPollutantOutput2":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"Read","RatioLiquidVolatilesOutput2":"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","RatioSteamInput":"Read","RatioSteamOutput":"Read","RatioSteamOutput2":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Waste"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAirlock":{"prefab":{"prefabName":"StructureAirlock","prefabHash":-2105052344,"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.","name":"Airlock"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAirlockGate":{"prefab":{"prefabName":"StructureAirlockGate","prefabHash":1736080881,"desc":"1 x 1 modular door piece for building hangar doors.","name":"Small Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAngledBench":{"prefab":{"prefabName":"StructureAngledBench","prefabHash":1811979158,"desc":"","name":"Bench (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureArcFurnace":{"prefab":{"prefabName":"StructureArcFurnace","prefabHash":-247344692,"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.","name":"Arc Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","Idle":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"},{"name":"Export","typ":"Ingot"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureAreaPowerControl":{"prefab":{"prefabName":"StructureAreaPowerControl","prefabHash":1999523701,"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.","name":"Area Power Control"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Charge":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAreaPowerControlReversed":{"prefab":{"prefabName":"StructureAreaPowerControlReversed","prefabHash":-1032513487,"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.","name":"Area Power Control"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Charge":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAutoMinerSmall":{"prefab":{"prefabName":"StructureAutoMinerSmall","prefabHash":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":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAutolathe":{"prefab":{"prefabName":"StructureAutolathe","prefabHash":336213101,"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 ","name":"Autolathe"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureAutomatedOven":{"prefab":{"prefabName":"StructureAutomatedOven","prefabHash":-1672404896,"desc":"","name":"Automated Oven"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureBackLiquidPressureRegulator":{"prefab":{"prefabName":"StructureBackLiquidPressureRegulator","prefabHash":2099900163,"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.","name":"Liquid Back Volume Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBackPressureRegulator":{"prefab":{"prefabName":"StructureBackPressureRegulator","prefabHash":-1149857558,"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.","name":"Back Pressure Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBasketHoop":{"prefab":{"prefabName":"StructureBasketHoop","prefabHash":-1613497288,"desc":"","name":"Basket Hoop"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBattery":{"prefab":{"prefabName":"StructureBattery","prefabHash":-400115994,"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).","name":"Station Battery"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryCharger":{"prefab":{"prefabName":"StructureBatteryCharger","prefabHash":1945930022,"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.","name":"Battery Cell Charger"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryChargerSmall":{"prefab":{"prefabName":"StructureBatteryChargerSmall","prefabHash":-761772413,"desc":"","name":"Battery Charger Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryLarge":{"prefab":{"prefabName":"StructureBatteryLarge","prefabHash":-1388288459,"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). ","name":"Station Battery (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryMedium":{"prefab":{"prefabName":"StructureBatteryMedium","prefabHash":-1125305264,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Maximum":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatterySmall":{"prefab":{"prefabName":"StructureBatterySmall","prefabHash":-2123455080,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Auxiliary Rocket Battery "},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Maximum":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBeacon":{"prefab":{"prefabName":"StructureBeacon","prefabHash":-188177083,"desc":"","name":"Beacon"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench":{"prefab":{"prefabName":"StructureBench","prefabHash":-2042448192,"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.","name":"Powered Bench"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench1":{"prefab":{"prefabName":"StructureBench1","prefabHash":406745009,"desc":"","name":"Bench (Counter Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench2":{"prefab":{"prefabName":"StructureBench2","prefabHash":-2127086069,"desc":"","name":"Bench (High Tech Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench3":{"prefab":{"prefabName":"StructureBench3","prefabHash":-164622691,"desc":"","name":"Bench (Frame Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench4":{"prefab":{"prefabName":"StructureBench4","prefabHash":1750375230,"desc":"","name":"Bench (Workbench Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBlastDoor":{"prefab":{"prefabName":"StructureBlastDoor","prefabHash":337416191,"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.","name":"Blast Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureBlockBed":{"prefab":{"prefabName":"StructureBlockBed","prefabHash":697908419,"desc":"Description coming.","name":"Block Bed"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBlocker":{"prefab":{"prefabName":"StructureBlocker","prefabHash":378084505,"desc":"","name":"Blocker"},"structure":{"smallGrid":false}},"StructureCableAnalysizer":{"prefab":{"prefabName":"StructureCableAnalysizer","prefabHash":1036015121,"desc":"","name":"Cable Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PowerActual":"Read","PowerPotential":"Read","PowerRequired":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableCorner":{"prefab":{"prefabName":"StructureCableCorner","prefabHash":-889269388,"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).","name":"Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3":{"prefab":{"prefabName":"StructureCableCorner3","prefabHash":980469101,"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).","name":"Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3Burnt":{"prefab":{"prefabName":"StructureCableCorner3Burnt","prefabHash":318437449,"desc":"","name":"Burnt Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3HBurnt":{"prefab":{"prefabName":"StructureCableCorner3HBurnt","prefabHash":2393826,"desc":"","name":""},"structure":{"smallGrid":true}},"StructureCableCorner4":{"prefab":{"prefabName":"StructureCableCorner4","prefabHash":-1542172466,"desc":"","name":"Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner4Burnt":{"prefab":{"prefabName":"StructureCableCorner4Burnt","prefabHash":268421361,"desc":"","name":"Burnt Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner4HBurnt":{"prefab":{"prefabName":"StructureCableCorner4HBurnt","prefabHash":-981223316,"desc":"","name":"Burnt Heavy Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerBurnt":{"prefab":{"prefabName":"StructureCableCornerBurnt","prefabHash":-177220914,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH":{"prefab":{"prefabName":"StructureCableCornerH","prefabHash":-39359015,"desc":"","name":"Heavy Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH3":{"prefab":{"prefabName":"StructureCableCornerH3","prefabHash":-1843379322,"desc":"","name":"Heavy Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH4":{"prefab":{"prefabName":"StructureCableCornerH4","prefabHash":205837861,"desc":"","name":"Heavy Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerHBurnt":{"prefab":{"prefabName":"StructureCableCornerHBurnt","prefabHash":1931412811,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableFuse100k":{"prefab":{"prefabName":"StructureCableFuse100k","prefabHash":281380789,"desc":"","name":"Fuse (100kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse1k":{"prefab":{"prefabName":"StructureCableFuse1k","prefabHash":-1103727120,"desc":"","name":"Fuse (1kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse50k":{"prefab":{"prefabName":"StructureCableFuse50k","prefabHash":-349716617,"desc":"","name":"Fuse (50kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse5k":{"prefab":{"prefabName":"StructureCableFuse5k","prefabHash":-631590668,"desc":"","name":"Fuse (5kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableJunction":{"prefab":{"prefabName":"StructureCableJunction","prefabHash":-175342021,"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).","name":"Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4":{"prefab":{"prefabName":"StructureCableJunction4","prefabHash":1112047202,"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).","name":"Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4Burnt":{"prefab":{"prefabName":"StructureCableJunction4Burnt","prefabHash":-1756896811,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4HBurnt":{"prefab":{"prefabName":"StructureCableJunction4HBurnt","prefabHash":-115809132,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction5":{"prefab":{"prefabName":"StructureCableJunction5","prefabHash":894390004,"desc":"","name":"Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction5Burnt":{"prefab":{"prefabName":"StructureCableJunction5Burnt","prefabHash":1545286256,"desc":"","name":"Burnt Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6":{"prefab":{"prefabName":"StructureCableJunction6","prefabHash":-1404690610,"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).","name":"Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6Burnt":{"prefab":{"prefabName":"StructureCableJunction6Burnt","prefabHash":-628145954,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6HBurnt":{"prefab":{"prefabName":"StructureCableJunction6HBurnt","prefabHash":1854404029,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionBurnt":{"prefab":{"prefabName":"StructureCableJunctionBurnt","prefabHash":-1620686196,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH":{"prefab":{"prefabName":"StructureCableJunctionH","prefabHash":469451637,"desc":"","name":"Heavy Cable (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH4":{"prefab":{"prefabName":"StructureCableJunctionH4","prefabHash":-742234680,"desc":"","name":"Heavy Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH5":{"prefab":{"prefabName":"StructureCableJunctionH5","prefabHash":-1530571426,"desc":"","name":"Heavy Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH5Burnt":{"prefab":{"prefabName":"StructureCableJunctionH5Burnt","prefabHash":1701593300,"desc":"","name":"Burnt Heavy Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH6":{"prefab":{"prefabName":"StructureCableJunctionH6","prefabHash":1036780772,"desc":"","name":"Heavy Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionHBurnt":{"prefab":{"prefabName":"StructureCableJunctionHBurnt","prefabHash":-341365649,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableStraight":{"prefab":{"prefabName":"StructureCableStraight","prefabHash":605357050,"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).","name":"Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightBurnt":{"prefab":{"prefabName":"StructureCableStraightBurnt","prefabHash":-1196981113,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightH":{"prefab":{"prefabName":"StructureCableStraightH","prefabHash":-146200530,"desc":"","name":"Heavy Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightHBurnt":{"prefab":{"prefabName":"StructureCableStraightHBurnt","prefabHash":2085762089,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCamera":{"prefab":{"prefabName":"StructureCamera","prefabHash":-342072665,"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.","name":"Camera"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureCapsuleTankGas":{"prefab":{"prefabName":"StructureCapsuleTankGas","prefabHash":-1385712131,"desc":"","name":"Gas Capsule Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCapsuleTankLiquid":{"prefab":{"prefabName":"StructureCapsuleTankLiquid","prefabHash":1415396263,"desc":"","name":"Liquid Capsule Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCargoStorageMedium":{"prefab":{"prefabName":"StructureCargoStorageMedium","prefabHash":1151864003,"desc":"","name":"Cargo Storage (Medium)"},"structure":{"smallGrid":true},"logic":{"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":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCargoStorageSmall":{"prefab":{"prefabName":"StructureCargoStorageSmall","prefabHash":-1493672123,"desc":"","name":"Cargo Storage (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"},"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"},"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"},"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"},"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCentrifuge":{"prefab":{"prefabName":"StructureCentrifuge","prefabHash":690945935,"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.","name":"Centrifuge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureChair":{"prefab":{"prefabName":"StructureChair","prefabHash":1167659360,"desc":"One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs.","name":"Chair"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBacklessDouble":{"prefab":{"prefabName":"StructureChairBacklessDouble","prefabHash":1944858936,"desc":"","name":"Chair (Backless Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBacklessSingle":{"prefab":{"prefabName":"StructureChairBacklessSingle","prefabHash":1672275150,"desc":"","name":"Chair (Backless Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBoothCornerLeft":{"prefab":{"prefabName":"StructureChairBoothCornerLeft","prefabHash":-367720198,"desc":"","name":"Chair (Booth Corner Left)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBoothMiddle":{"prefab":{"prefabName":"StructureChairBoothMiddle","prefabHash":1640720378,"desc":"","name":"Chair (Booth Middle)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairRectangleDouble":{"prefab":{"prefabName":"StructureChairRectangleDouble","prefabHash":-1152812099,"desc":"","name":"Chair (Rectangle Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairRectangleSingle":{"prefab":{"prefabName":"StructureChairRectangleSingle","prefabHash":-1425428917,"desc":"","name":"Chair (Rectangle Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairThickDouble":{"prefab":{"prefabName":"StructureChairThickDouble","prefabHash":-1245724402,"desc":"","name":"Chair (Thick Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairThickSingle":{"prefab":{"prefabName":"StructureChairThickSingle","prefabHash":-1510009608,"desc":"","name":"Chair (Thick Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteBin":{"prefab":{"prefabName":"StructureChuteBin","prefabHash":-850484480,"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.","name":"Chute Bin"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Input","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteCorner":{"prefab":{"prefabName":"StructureChuteCorner","prefabHash":1360330136,"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.","name":"Chute (Corner)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteDigitalFlipFlopSplitterLeft":{"prefab":{"prefabName":"StructureChuteDigitalFlipFlopSplitterLeft","prefabHash":-810874728,"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.","name":"Chute Digital Flip Flop Splitter Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingOutput":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Output2"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureChuteDigitalFlipFlopSplitterRight":{"prefab":{"prefabName":"StructureChuteDigitalFlipFlopSplitterRight","prefabHash":163728359,"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.","name":"Chute Digital Flip Flop Splitter Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingOutput":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Output2"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureChuteDigitalValveLeft":{"prefab":{"prefabName":"StructureChuteDigitalValveLeft","prefabHash":648608238,"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.","name":"Chute Digital Valve Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteDigitalValveRight":{"prefab":{"prefabName":"StructureChuteDigitalValveRight","prefabHash":-1337091041,"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.","name":"Chute Digital Valve Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteFlipFlopSplitter":{"prefab":{"prefabName":"StructureChuteFlipFlopSplitter","prefabHash":-1446854725,"desc":"A chute that toggles between two outputs","name":"Chute Flip Flop Splitter"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteInlet":{"prefab":{"prefabName":"StructureChuteInlet","prefabHash":-1469588766,"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.","name":"Chute Inlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteJunction":{"prefab":{"prefabName":"StructureChuteJunction","prefabHash":-611232514,"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.","name":"Chute (Junction)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteOutlet":{"prefab":{"prefabName":"StructureChuteOutlet","prefabHash":-1022714809,"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.","name":"Chute Outlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteOverflow":{"prefab":{"prefabName":"StructureChuteOverflow","prefabHash":225377225,"desc":"The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied.","name":"Chute Overflow"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteStraight":{"prefab":{"prefabName":"StructureChuteStraight","prefabHash":168307007,"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.","name":"Chute (Straight)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteUmbilicalFemale":{"prefab":{"prefabName":"StructureChuteUmbilicalFemale","prefabHash":-1918892177,"desc":"","name":"Umbilical Socket (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureChuteUmbilicalFemaleSide","prefabHash":-659093969,"desc":"","name":"Umbilical Socket Angle (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteUmbilicalMale":{"prefab":{"prefabName":"StructureChuteUmbilicalMale","prefabHash":-958884053,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteValve":{"prefab":{"prefabName":"StructureChuteValve","prefabHash":434875271,"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.","name":"Chute Valve"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteWindow":{"prefab":{"prefabName":"StructureChuteWindow","prefabHash":-607241919,"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.","name":"Chute (Window)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureCircuitHousing":{"prefab":{"prefabName":"StructureCircuitHousing","prefabHash":-128473777,"desc":"","name":"IC Housing"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","LineNumber":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","LineNumber":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"devicePinsLength":6,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"StructureCombustionCentrifuge":{"prefab":{"prefabName":"StructureCombustionCentrifuge","prefabHash":1238905683,"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 ","name":"Combustion Centrifuge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"ClearMemory":"Write","Combustion":"Read","CombustionInput":"Read","CombustionLimiter":"ReadWrite","CombustionOutput":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Pressure":"Read","PressureInput":"Read","PressureOutput":"Read","RatioCarbonDioxide":"Read","RatioCarbonDioxideInput":"Read","RatioCarbonDioxideOutput":"Read","RatioHydrogen":"Read","RatioLiquidCarbonDioxide":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidHydrogen":"Read","RatioLiquidNitrogen":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"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","RatioSteamInput":"Read","RatioSteamOutput":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureCompositeCladdingAngled":{"prefab":{"prefabName":"StructureCompositeCladdingAngled","prefabHash":-1513030150,"desc":"","name":"Composite Cladding (Angled)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCorner":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCorner","prefabHash":-69685069,"desc":"","name":"Composite Cladding (Angled Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInner":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInner","prefabHash":-1841871763,"desc":"","name":"Composite Cladding (Angled Corner Inner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLong","prefabHash":-1417912632,"desc":"","name":"Composite Cladding (Angled Corner Inner Long)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLongL":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLongL","prefabHash":947705066,"desc":"","name":"Composite Cladding (Angled Corner Inner Long L)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLongR":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLongR","prefabHash":-1032590967,"desc":"","name":"Composite Cladding (Angled Corner Inner Long R)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerLong","prefabHash":850558385,"desc":"","name":"Composite Cladding (Long Angled Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerLongR":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerLongR","prefabHash":-348918222,"desc":"","name":"Composite Cladding (Long Angled Mirrored Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledLong","prefabHash":-387546514,"desc":"","name":"Composite Cladding (Long Angled)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingCylindrical":{"prefab":{"prefabName":"StructureCompositeCladdingCylindrical","prefabHash":212919006,"desc":"","name":"Composite Cladding (Cylindrical)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingCylindricalPanel":{"prefab":{"prefabName":"StructureCompositeCladdingCylindricalPanel","prefabHash":1077151132,"desc":"","name":"Composite Cladding (Cylindrical Panel)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingPanel":{"prefab":{"prefabName":"StructureCompositeCladdingPanel","prefabHash":1997436771,"desc":"","name":"Composite Cladding (Panel)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRounded":{"prefab":{"prefabName":"StructureCompositeCladdingRounded","prefabHash":-259357734,"desc":"","name":"Composite Cladding (Rounded)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRoundedCorner":{"prefab":{"prefabName":"StructureCompositeCladdingRoundedCorner","prefabHash":1951525046,"desc":"","name":"Composite Cladding (Rounded Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRoundedCornerInner":{"prefab":{"prefabName":"StructureCompositeCladdingRoundedCornerInner","prefabHash":110184667,"desc":"","name":"Composite Cladding (Rounded Corner Inner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSpherical":{"prefab":{"prefabName":"StructureCompositeCladdingSpherical","prefabHash":139107321,"desc":"","name":"Composite Cladding (Spherical)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSphericalCap":{"prefab":{"prefabName":"StructureCompositeCladdingSphericalCap","prefabHash":534213209,"desc":"","name":"Composite Cladding (Spherical Cap)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSphericalCorner":{"prefab":{"prefabName":"StructureCompositeCladdingSphericalCorner","prefabHash":1751355139,"desc":"","name":"Composite Cladding (Spherical Corner)"},"structure":{"smallGrid":false}},"StructureCompositeDoor":{"prefab":{"prefabName":"StructureCompositeDoor","prefabHash":-793837322,"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.","name":"Composite Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCompositeFloorGrating":{"prefab":{"prefabName":"StructureCompositeFloorGrating","prefabHash":324868581,"desc":"While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings.","name":"Composite Floor Grating"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating2":{"prefab":{"prefabName":"StructureCompositeFloorGrating2","prefabHash":-895027741,"desc":"","name":"Composite Floor Grating (Type 2)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating3":{"prefab":{"prefabName":"StructureCompositeFloorGrating3","prefabHash":-1113471627,"desc":"","name":"Composite Floor Grating (Type 3)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating4":{"prefab":{"prefabName":"StructureCompositeFloorGrating4","prefabHash":600133846,"desc":"","name":"Composite Floor Grating (Type 4)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGratingOpen":{"prefab":{"prefabName":"StructureCompositeFloorGratingOpen","prefabHash":2109695912,"desc":"","name":"Composite Floor Grating Open"},"structure":{"smallGrid":false}},"StructureCompositeFloorGratingOpenRotated":{"prefab":{"prefabName":"StructureCompositeFloorGratingOpenRotated","prefabHash":882307910,"desc":"","name":"Composite Floor Grating Open Rotated"},"structure":{"smallGrid":false}},"StructureCompositeWall":{"prefab":{"prefabName":"StructureCompositeWall","prefabHash":1237302061,"desc":"Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties.","name":"Composite Wall (Type 1)"},"structure":{"smallGrid":false}},"StructureCompositeWall02":{"prefab":{"prefabName":"StructureCompositeWall02","prefabHash":718343384,"desc":"","name":"Composite Wall (Type 2)"},"structure":{"smallGrid":false}},"StructureCompositeWall03":{"prefab":{"prefabName":"StructureCompositeWall03","prefabHash":1574321230,"desc":"","name":"Composite Wall (Type 3)"},"structure":{"smallGrid":false}},"StructureCompositeWall04":{"prefab":{"prefabName":"StructureCompositeWall04","prefabHash":-1011701267,"desc":"","name":"Composite Wall (Type 4)"},"structure":{"smallGrid":false}},"StructureCompositeWindow":{"prefab":{"prefabName":"StructureCompositeWindow","prefabHash":-2060571986,"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.","name":"Composite Window"},"structure":{"smallGrid":false}},"StructureCompositeWindowIron":{"prefab":{"prefabName":"StructureCompositeWindowIron","prefabHash":-688284639,"desc":"","name":"Iron Window"},"structure":{"smallGrid":false}},"StructureComputer":{"prefab":{"prefabName":"StructureComputer","prefabHash":-626563514,"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","name":"Computer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Data Disk","typ":"DataDisk"},{"name":"Data Disk","typ":"DataDisk"},{"name":"Motherboard","typ":"Motherboard"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCondensationChamber":{"prefab":{"prefabName":"StructureCondensationChamber","prefabHash":1420719315,"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.","name":"Condensation Chamber"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCondensationValve":{"prefab":{"prefabName":"StructureCondensationValve","prefabHash":-965741795,"desc":"Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction.","name":"Condensation Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Output"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsole":{"prefab":{"prefabName":"StructureConsole","prefabHash":235638270,"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.","name":"Console"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureConsoleDual":{"prefab":{"prefabName":"StructureConsoleDual","prefabHash":-722284333,"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.","name":"Console Dual"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureConsoleLED1x2":{"prefab":{"prefabName":"StructureConsoleLED1x2","prefabHash":-53151617,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Default","1":"Percent","2":"Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleLED1x3":{"prefab":{"prefabName":"StructureConsoleLED1x3","prefabHash":-1949054743,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Default","1":"Percent","2":"Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleLED5":{"prefab":{"prefabName":"StructureConsoleLED5","prefabHash":-815193061,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Default","1":"Percent","2":"Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleMonitor":{"prefab":{"prefabName":"StructureConsoleMonitor","prefabHash":801677497,"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.","name":"Console Monitor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureControlChair":{"prefab":{"prefabName":"StructureControlChair","prefabHash":-1961153710,"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.","name":"Control Chair"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Entity","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureCornerLocker":{"prefab":{"prefabName":"StructureCornerLocker","prefabHash":-1968255729,"desc":"","name":"Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureCrateMount":{"prefab":{"prefabName":"StructureCrateMount","prefabHash":-733500083,"desc":"","name":"Container Mount"},"structure":{"smallGrid":true},"slots":[{"name":"Container Slot","typ":"None"}]},"StructureCryoTube":{"prefab":{"prefabName":"StructureCryoTube","prefabHash":1938254586,"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.","name":"CryoTube"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Pressure":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCryoTubeHorizontal":{"prefab":{"prefabName":"StructureCryoTubeHorizontal","prefabHash":1443059329,"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.","name":"Cryo Tube Horizontal"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Pressure":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCryoTubeVertical":{"prefab":{"prefabName":"StructureCryoTubeVertical","prefabHash":-1381321828,"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.","name":"Cryo Tube Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Pressure":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureDaylightSensor":{"prefab":{"prefabName":"StructureDaylightSensor","prefabHash":1076425094,"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.","name":"Daylight Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Horizontal":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","SolarAngle":"Read","SolarIrradiance":"Read","Vertical":"Read"},"modes":{"0":"Default","1":"Horizontal","2":"Vertical"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDeepMiner":{"prefab":{"prefabName":"StructureDeepMiner","prefabHash":265720906,"desc":"Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s","name":"Deep Miner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDigitalValve":{"prefab":{"prefabName":"StructureDigitalValve","prefabHash":-1280984102,"desc":"The digital valve allows Stationeers to create logic-controlled valves and pipe networks.","name":"Digital Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDiode":{"prefab":{"prefabName":"StructureDiode","prefabHash":1944485013,"desc":"","name":"LED"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDiodeSlide":{"prefab":{"prefabName":"StructureDiodeSlide","prefabHash":576516101,"desc":"","name":"Diode Slide"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDockPortSide":{"prefab":{"prefabName":"StructureDockPortSide","prefabHash":-137465079,"desc":"","name":"Dock (Port Side)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureDrinkingFountain":{"prefab":{"prefabName":"StructureDrinkingFountain","prefabHash":1968371847,"desc":"","name":""},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureElectrolyzer":{"prefab":{"prefabName":"StructureElectrolyzer","prefabHash":-1668992663,"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.","name":"Electrolyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","Combustion":"Read","CombustionInput":"Read","CombustionOutput":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidHydrogen":"Read","RatioLiquidNitrogen":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"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","RatioSteamInput":"Read","RatioSteamOutput":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElectronicsPrinter":{"prefab":{"prefabName":"StructureElectronicsPrinter","prefabHash":1307165496,"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.","name":"Electronics Printer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureElevatorLevelFront":{"prefab":{"prefabName":"StructureElevatorLevelFront","prefabHash":-827912235,"desc":"","name":"Elevator Level (Cabled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElevatorLevelIndustrial":{"prefab":{"prefabName":"StructureElevatorLevelIndustrial","prefabHash":2060648791,"desc":"","name":"Elevator Level"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElevatorShaft":{"prefab":{"prefabName":"StructureElevatorShaft","prefabHash":826144419,"desc":"","name":"Elevator Shaft (Cabled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureElevatorShaftIndustrial":{"prefab":{"prefabName":"StructureElevatorShaftIndustrial","prefabHash":1998354978,"desc":"","name":"Elevator Shaft"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureEmergencyButton":{"prefab":{"prefabName":"StructureEmergencyButton","prefabHash":1668452680,"desc":"Description coming.","name":"Important Button"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureEngineMountTypeA1":{"prefab":{"prefabName":"StructureEngineMountTypeA1","prefabHash":2035781224,"desc":"","name":"Engine Mount (Type A1)"},"structure":{"smallGrid":false}},"StructureEvaporationChamber":{"prefab":{"prefabName":"StructureEvaporationChamber","prefabHash":-1429782576,"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.","name":"Evaporation Chamber"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureExpansionValve":{"prefab":{"prefabName":"StructureExpansionValve","prefabHash":195298587,"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.","name":"Expansion Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureFairingTypeA1":{"prefab":{"prefabName":"StructureFairingTypeA1","prefabHash":1622567418,"desc":"","name":"Fairing (Type A1)"},"structure":{"smallGrid":false}},"StructureFairingTypeA2":{"prefab":{"prefabName":"StructureFairingTypeA2","prefabHash":-104908736,"desc":"","name":"Fairing (Type A2)"},"structure":{"smallGrid":false}},"StructureFairingTypeA3":{"prefab":{"prefabName":"StructureFairingTypeA3","prefabHash":-1900541738,"desc":"","name":"Fairing (Type A3)"},"structure":{"smallGrid":false}},"StructureFiltration":{"prefab":{"prefabName":"StructureFiltration","prefabHash":-348054045,"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","name":"Filtration"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"CombustionInput":"Read","CombustionOutput":"Read","CombustionOutput2":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureInput":"Read","PressureOutput":"Read","PressureOutput2":"Read","Ratio":"Read","RatioCarbonDioxideInput":"Read","RatioCarbonDioxideOutput":"Read","RatioCarbonDioxideOutput2":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidCarbonDioxideOutput2":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrogenOutput2":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidNitrousOxideOutput2":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidOxygenOutput2":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidPollutantOutput2":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"Read","RatioLiquidVolatilesOutput2":"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","RatioSteamInput":"Read","RatioSteamOutput":"Read","RatioSteamOutput2":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Waste"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureFlagSmall":{"prefab":{"prefabName":"StructureFlagSmall","prefabHash":-1529819532,"desc":"","name":"Small Flag"},"structure":{"smallGrid":true}},"StructureFlashingLight":{"prefab":{"prefabName":"StructureFlashingLight","prefabHash":-1535893860,"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'.","name":"Flashing Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureFlatBench":{"prefab":{"prefabName":"StructureFlatBench","prefabHash":839890807,"desc":"","name":"Bench (Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureFloorDrain":{"prefab":{"prefabName":"StructureFloorDrain","prefabHash":1048813293,"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.","name":"Passive Liquid Inlet"},"structure":{"smallGrid":true}},"StructureFrame":{"prefab":{"prefabName":"StructureFrame","prefabHash":1432512808,"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.","name":"Steel Frame"},"structure":{"smallGrid":false}},"StructureFrameCorner":{"prefab":{"prefabName":"StructureFrameCorner","prefabHash":-2112390778,"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.","name":"Steel Frame (Corner)"},"structure":{"smallGrid":false}},"StructureFrameCornerCut":{"prefab":{"prefabName":"StructureFrameCornerCut","prefabHash":271315669,"desc":"0.Mode0\n1.Mode1","name":"Steel Frame (Corner Cut)"},"structure":{"smallGrid":false}},"StructureFrameIron":{"prefab":{"prefabName":"StructureFrameIron","prefabHash":-1240951678,"desc":"","name":"Iron Frame"},"structure":{"smallGrid":false}},"StructureFrameSide":{"prefab":{"prefabName":"StructureFrameSide","prefabHash":-302420053,"desc":"More durable than the Iron Frame, steel frames also provide variations for more ornate constructions.","name":"Steel Frame (Side)"},"structure":{"smallGrid":false}},"StructureFridgeBig":{"prefab":{"prefabName":"StructureFridgeBig","prefabHash":958476921,"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.","name":"Fridge (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureFridgeSmall":{"prefab":{"prefabName":"StructureFridgeSmall","prefabHash":751887598,"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.","name":"Fridge Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureFurnace":{"prefab":{"prefabName":"StructureFurnace","prefabHash":1947944864,"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.","name":"Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Combustion":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"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","Reagents":"Read","RecipeHash":"Read","ReferenceId":"Read","Setting":"ReadWrite","Temperature":"Read","TotalMoles":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"},{"typ":"Data","role":"None"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":false,"hasOpenState":true,"hasReagents":true}},"StructureFuselageTypeA1":{"prefab":{"prefabName":"StructureFuselageTypeA1","prefabHash":1033024712,"desc":"","name":"Fuselage (Type A1)"},"structure":{"smallGrid":false}},"StructureFuselageTypeA2":{"prefab":{"prefabName":"StructureFuselageTypeA2","prefabHash":-1533287054,"desc":"","name":"Fuselage (Type A2)"},"structure":{"smallGrid":false}},"StructureFuselageTypeA4":{"prefab":{"prefabName":"StructureFuselageTypeA4","prefabHash":1308115015,"desc":"","name":"Fuselage (Type A4)"},"structure":{"smallGrid":false}},"StructureFuselageTypeC5":{"prefab":{"prefabName":"StructureFuselageTypeC5","prefabHash":147395155,"desc":"","name":"Fuselage (Type C5)"},"structure":{"smallGrid":false}},"StructureGasGenerator":{"prefab":{"prefabName":"StructureGasGenerator","prefabHash":1165997963,"desc":"","name":"Gas Fuel Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGasMixer":{"prefab":{"prefabName":"StructureGasMixer","prefabHash":2104106366,"desc":"Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%.","name":"Gas Mixer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGasSensor":{"prefab":{"prefabName":"StructureGasSensor","prefabHash":-1252983604,"desc":"Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents.","name":"Gas Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasTankStorage":{"prefab":{"prefabName":"StructureGasTankStorage","prefabHash":1632165346,"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.","name":"Gas Tank Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","Pressure":"Read","Quantity":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioNitrousOxide":"Read","RatioOxygen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","ReferenceId":"Read","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalFemale":{"prefab":{"prefabName":"StructureGasUmbilicalFemale","prefabHash":-1680477930,"desc":"","name":"Umbilical Socket (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureGasUmbilicalFemaleSide","prefabHash":-648683847,"desc":"","name":"Umbilical Socket Angle (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalMale":{"prefab":{"prefabName":"StructureGasUmbilicalMale","prefabHash":-1814939203,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGlassDoor":{"prefab":{"prefabName":"StructureGlassDoor","prefabHash":-324331872,"desc":"0.Operate\n1.Logic","name":"Glass Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGovernedGasEngine":{"prefab":{"prefabName":"StructureGovernedGasEngine","prefabHash":-214232602,"desc":"The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas.","name":"Pumped Gas Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGroundBasedTelescope":{"prefab":{"prefabName":"StructureGroundBasedTelescope","prefabHash":-619745681,"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.","name":"Telescope"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","AlignmentError":"Read","CelestialHash":"Read","CelestialParentHash":"Read","DistanceAu":"Read","DistanceKm":"Read","Eccentricity":"Read","Error":"Read","Horizontal":"ReadWrite","HorizontalRatio":"ReadWrite","Inclination":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","OrbitPeriod":"Read","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","SemiMajorAxis":"Read","TrueAnomaly":"Read","Vertical":"ReadWrite","VerticalRatio":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGrowLight":{"prefab":{"prefabName":"StructureGrowLight","prefabHash":-1758710260,"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. ","name":"Grow Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHarvie":{"prefab":{"prefabName":"StructureHarvie","prefabHash":958056199,"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.","name":"Harvie"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","Harvest":"Write","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Plant":"Write","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Idle","1":"Happy","2":"UnHappy","3":"Dead"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Plant"},{"name":"Export","typ":"None"},{"name":"Hand","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangeLiquidtoGas":{"prefab":{"prefabName":"StructureHeatExchangeLiquidtoGas","prefabHash":944685608,"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.","name":"Heat Exchanger - Liquid + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangerGastoGas":{"prefab":{"prefabName":"StructureHeatExchangerGastoGas","prefabHash":21266291,"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.","name":"Heat Exchanger - Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangerLiquidtoLiquid":{"prefab":{"prefabName":"StructureHeatExchangerLiquidtoLiquid","prefabHash":-613784254,"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","name":"Heat Exchanger - Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHorizontalAutoMiner":{"prefab":{"prefabName":"StructureHorizontalAutoMiner","prefabHash":1070427573,"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","name":"OGRE"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureHydraulicPipeBender":{"prefab":{"prefabName":"StructureHydraulicPipeBender","prefabHash":-1888248335,"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.","name":"Hydraulic Pipe Bender"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureHydroponicsStation":{"prefab":{"prefabName":"StructureHydroponicsStation","prefabHash":1441767298,"desc":"","name":"Hydroponics Station"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHydroponicsTray":{"prefab":{"prefabName":"StructureHydroponicsTray","prefabHash":1464854517,"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.","name":"Hydroponics Tray"},"structure":{"smallGrid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}]},"StructureHydroponicsTrayData":{"prefab":{"prefabName":"StructureHydroponicsTrayData","prefabHash":-1841632400,"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.","name":"Hydroponics Device"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Combustion":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureIceCrusher":{"prefab":{"prefabName":"StructureIceCrusher","prefabHash":443849486,"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.","name":"Ice Crusher"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ImportCount":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureIgniter":{"prefab":{"prefabName":"StructureIgniter","prefabHash":1005491513,"desc":"It gets the party started. Especially if that party is an explosive gas mixture.","name":"Igniter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureInLineTankGas1x1":{"prefab":{"prefabName":"StructureInLineTankGas1x1","prefabHash":-1693382705,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Gas"},"structure":{"smallGrid":true}},"StructureInLineTankGas1x2":{"prefab":{"prefabName":"StructureInLineTankGas1x2","prefabHash":35149429,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Gas"},"structure":{"smallGrid":true}},"StructureInLineTankLiquid1x1":{"prefab":{"prefabName":"StructureInLineTankLiquid1x1","prefabHash":543645499,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Liquid"},"structure":{"smallGrid":true}},"StructureInLineTankLiquid1x2":{"prefab":{"prefabName":"StructureInLineTankLiquid1x2","prefabHash":-1183969663,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankGas1x1":{"prefab":{"prefabName":"StructureInsulatedInLineTankGas1x1","prefabHash":1818267386,"desc":"","name":"Insulated In-Line Tank Small Gas"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankGas1x2":{"prefab":{"prefabName":"StructureInsulatedInLineTankGas1x2","prefabHash":-177610944,"desc":"","name":"Insulated In-Line Tank Gas"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankLiquid1x1":{"prefab":{"prefabName":"StructureInsulatedInLineTankLiquid1x1","prefabHash":-813426145,"desc":"","name":"Insulated In-Line Tank Small Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankLiquid1x2":{"prefab":{"prefabName":"StructureInsulatedInLineTankLiquid1x2","prefabHash":1452100517,"desc":"","name":"Insulated In-Line Tank Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCorner":{"prefab":{"prefabName":"StructureInsulatedPipeCorner","prefabHash":-1967711059,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Corner)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction","prefabHash":-92778058,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction3":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction3","prefabHash":1328210035,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction4":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction4","prefabHash":-783387184,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction5":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction5","prefabHash":-1505147578,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction6":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction6","prefabHash":1061164284,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCorner":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCorner","prefabHash":1713710802,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Corner)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction","prefabHash":1926651727,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction4":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction4","prefabHash":363303270,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction5":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction5","prefabHash":1654694384,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction6":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction6","prefabHash":-72748982,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidStraight":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidStraight","prefabHash":295678685,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Straight)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidTJunction":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidTJunction","prefabHash":-532384855,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeStraight":{"prefab":{"prefabName":"StructureInsulatedPipeStraight","prefabHash":2134172356,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Straight)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeTJunction":{"prefab":{"prefabName":"StructureInsulatedPipeTJunction","prefabHash":-2076086215,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedTankConnector":{"prefab":{"prefabName":"StructureInsulatedTankConnector","prefabHash":-31273349,"desc":"","name":"Insulated Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructureInsulatedTankConnectorLiquid":{"prefab":{"prefabName":"StructureInsulatedTankConnectorLiquid","prefabHash":-1602030414,"desc":"","name":"Insulated Tank Connector Liquid"},"structure":{"smallGrid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureInteriorDoorGlass":{"prefab":{"prefabName":"StructureInteriorDoorGlass","prefabHash":-2096421875,"desc":"0.Operate\n1.Logic","name":"Interior Door Glass"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorPadded":{"prefab":{"prefabName":"StructureInteriorDoorPadded","prefabHash":847461335,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorPaddedThin":{"prefab":{"prefabName":"StructureInteriorDoorPaddedThin","prefabHash":1981698201,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded Thin"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorTriangle":{"prefab":{"prefabName":"StructureInteriorDoorTriangle","prefabHash":-1182923101,"desc":"0.Operate\n1.Logic","name":"Interior Door Triangle"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureKlaxon":{"prefab":{"prefabName":"StructureKlaxon","prefabHash":-828056979,"desc":"Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output.","name":"Klaxon Speaker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLadder":{"prefab":{"prefabName":"StructureLadder","prefabHash":-415420281,"desc":"","name":"Ladder"},"structure":{"smallGrid":true}},"StructureLadderEnd":{"prefab":{"prefabName":"StructureLadderEnd","prefabHash":1541734993,"desc":"","name":"Ladder End"},"structure":{"smallGrid":true}},"StructureLargeDirectHeatExchangeGastoGas":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeGastoGas","prefabHash":-1230658883,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeDirectHeatExchangeGastoLiquid":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeGastoLiquid","prefabHash":1412338038,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeLiquidtoLiquid","prefabHash":792686502,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchange - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeExtendableRadiator":{"prefab":{"prefabName":"StructureLargeExtendableRadiator","prefabHash":-566775170,"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.","name":"Large Extendable Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Horizontal":"ReadWrite","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLargeHangerDoor":{"prefab":{"prefabName":"StructureLargeHangerDoor","prefabHash":-1351081801,"desc":"1 x 3 modular door piece for building hangar doors.","name":"Large Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureLargeSatelliteDish":{"prefab":{"prefabName":"StructureLargeSatelliteDish","prefabHash":1913391845,"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.","name":"Large Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","BestContactFilter":"ReadWrite","ContactTypeId":"Read","Error":"Read","Horizontal":"ReadWrite","Idle":"Read","InterrogationProgress":"Read","MinimumWattsToContact":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLaunchMount":{"prefab":{"prefabName":"StructureLaunchMount","prefabHash":-558953231,"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.","name":"Launch Mount"},"structure":{"smallGrid":false}},"StructureLightLong":{"prefab":{"prefabName":"StructureLightLong","prefabHash":797794350,"desc":"","name":"Wall Light (Long)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightLongAngled":{"prefab":{"prefabName":"StructureLightLongAngled","prefabHash":1847265835,"desc":"","name":"Wall Light (Long Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightLongWide":{"prefab":{"prefabName":"StructureLightLongWide","prefabHash":555215790,"desc":"","name":"Wall Light (Long Wide)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRound":{"prefab":{"prefabName":"StructureLightRound","prefabHash":1514476632,"desc":"Description coming.","name":"Light Round"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRoundAngled":{"prefab":{"prefabName":"StructureLightRoundAngled","prefabHash":1592905386,"desc":"Description coming.","name":"Light Round (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRoundSmall":{"prefab":{"prefabName":"StructureLightRoundSmall","prefabHash":1436121888,"desc":"Description coming.","name":"Light Round (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidDrain":{"prefab":{"prefabName":"StructureLiquidDrain","prefabHash":1687692899,"desc":"When connected to power and activated, it pumps liquid from a liquid network into the world.","name":"Active Liquid Outlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeAnalyzer":{"prefab":{"prefabName":"StructureLiquidPipeAnalyzer","prefabHash":-2113838091,"desc":"","name":"Liquid Pipe Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","NameHash":"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","Volume":"Read","VolumeOfLiquid":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeHeater":{"prefab":{"prefabName":"StructureLiquidPipeHeater","prefabHash":-287495560,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeOneWayValve":{"prefab":{"prefabName":"StructureLiquidPipeOneWayValve","prefabHash":-782453061,"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..","name":"One Way Valve (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeRadiator":{"prefab":{"prefabName":"StructureLiquidPipeRadiator","prefabHash":2072805863,"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.","name":"Liquid Pipe Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPressureRegulator":{"prefab":{"prefabName":"StructureLiquidPressureRegulator","prefabHash":482248766,"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.","name":"Liquid Volume Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankBig":{"prefab":{"prefabName":"StructureLiquidTankBig","prefabHash":1098900430,"desc":"","name":"Liquid Tank Big"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankBigInsulated":{"prefab":{"prefabName":"StructureLiquidTankBigInsulated","prefabHash":-1430440215,"desc":"","name":"Insulated Liquid Tank Big"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankSmall":{"prefab":{"prefabName":"StructureLiquidTankSmall","prefabHash":1988118157,"desc":"","name":"Liquid Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankSmallInsulated":{"prefab":{"prefabName":"StructureLiquidTankSmallInsulated","prefabHash":608607718,"desc":"","name":"Insulated Liquid Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankStorage":{"prefab":{"prefabName":"StructureLiquidTankStorage","prefabHash":1691898022,"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.","name":"Liquid Tank Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","Pressure":"Read","Quantity":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioNitrousOxide":"Read","RatioOxygen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","ReferenceId":"Read","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTurboVolumePump":{"prefab":{"prefabName":"StructureLiquidTurboVolumePump","prefabHash":-1051805505,"desc":"Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Right","1":"Left"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalFemale":{"prefab":{"prefabName":"StructureLiquidUmbilicalFemale","prefabHash":1734723642,"desc":"","name":"Umbilical Socket (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureLiquidUmbilicalFemaleSide","prefabHash":1220870319,"desc":"","name":"Umbilical Socket Angle (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalMale":{"prefab":{"prefabName":"StructureLiquidUmbilicalMale","prefabHash":-1798420047,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureLiquidValve":{"prefab":{"prefabName":"StructureLiquidValve","prefabHash":1849974453,"desc":"","name":"Liquid Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidVolumePump":{"prefab":{"prefabName":"StructureLiquidVolumePump","prefabHash":-454028979,"desc":"","name":"Liquid Volume Pump"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLockerSmall":{"prefab":{"prefabName":"StructureLockerSmall","prefabHash":-647164662,"desc":"","name":"Locker (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicBatchReader":{"prefab":{"prefabName":"StructureLogicBatchReader","prefabHash":264413729,"desc":"","name":"Batch Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicBatchSlotReader":{"prefab":{"prefabName":"StructureLogicBatchSlotReader","prefabHash":436888930,"desc":"","name":"Batch Slot Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicBatchWriter":{"prefab":{"prefabName":"StructureLogicBatchWriter","prefabHash":1415443359,"desc":"","name":"Batch Writer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","ForceWrite":"Write","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicButton":{"prefab":{"prefabName":"StructureLogicButton","prefabHash":491845673,"desc":"","name":"Button"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Lock":"ReadWrite","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicCompare":{"prefab":{"prefabName":"StructureLogicCompare","prefabHash":-1489728908,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Compare"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"modes":{"0":"Equals","1":"Greater","2":"Less","3":"NotEquals"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicDial":{"prefab":{"prefabName":"StructureLogicDial","prefabHash":554524804,"desc":"An assignable dial with up to 1000 modes.","name":"Dial"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicGate":{"prefab":{"prefabName":"StructureLogicGate","prefabHash":1942143074,"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.","name":"Logic Gate"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicHashGen":{"prefab":{"prefabName":"StructureLogicHashGen","prefabHash":2077593121,"desc":"","name":"Logic Hash Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicMath":{"prefab":{"prefabName":"StructureLogicMath","prefabHash":1657691323,"desc":"0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log","name":"Logic Math"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMathUnary":{"prefab":{"prefabName":"StructureLogicMathUnary","prefabHash":-1160020195,"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","name":"Math Unary"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMemory":{"prefab":{"prefabName":"StructureLogicMemory","prefabHash":-851746783,"desc":"","name":"Logic Memory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicMinMax":{"prefab":{"prefabName":"StructureLogicMinMax","prefabHash":929022276,"desc":"0.Greater\n1.Less","name":"Logic Min/Max"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"modes":{"0":"Greater","1":"Less"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMirror":{"prefab":{"prefabName":"StructureLogicMirror","prefabHash":2096189278,"desc":"","name":"Logic Mirror"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicReader":{"prefab":{"prefabName":"StructureLogicReader","prefabHash":-345383640,"desc":"","name":"Logic Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicReagentReader":{"prefab":{"prefabName":"StructureLogicReagentReader","prefabHash":-124308857,"desc":"","name":"Reagent Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicRocketDownlink":{"prefab":{"prefabName":"StructureLogicRocketDownlink","prefabHash":876108549,"desc":"","name":"Logic Rocket Downlink"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicRocketUplink":{"prefab":{"prefabName":"StructureLogicRocketUplink","prefabHash":546002924,"desc":"","name":"Logic Uplink"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSelect":{"prefab":{"prefabName":"StructureLogicSelect","prefabHash":1822736084,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Select"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"modes":{"0":"Equals","1":"Greater","2":"Less","3":"NotEquals"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSlotReader":{"prefab":{"prefabName":"StructureLogicSlotReader","prefabHash":-767867194,"desc":"","name":"Slot Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSorter":{"prefab":{"prefabName":"StructureLogicSorter","prefabHash":873418029,"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.","name":"Logic Sorter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"All","1":"Any","2":"None"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Chute","role":"Output2"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"instructions":{"FilterPrefabHashEquals":{"description":"| 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":{"description":"| 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":{"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 |","typ":"SorterInstruction","value":5},"FilterSlotTypeCompare":{"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 |","typ":"SorterInstruction","value":4},"FilterSortingClassCompare":{"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 |","typ":"SorterInstruction","value":3},"LimitNextExecutionByCount":{"description":"| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |","typ":"SorterInstruction","value":6}},"memoryAccess":"ReadWrite","memorySize":32}},"StructureLogicSwitch":{"prefab":{"prefabName":"StructureLogicSwitch","prefabHash":1220484876,"desc":"","name":"Lever"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicSwitch2":{"prefab":{"prefabName":"StructureLogicSwitch2","prefabHash":321604921,"desc":"","name":"Switch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicTransmitter":{"prefab":{"prefabName":"StructureLogicTransmitter","prefabHash":-693235651,"desc":"Connects to Logic Transmitter","name":"Logic Transmitter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"modes":{"0":"Passive","1":"Active"},"transmissionReceiver":true,"wirelessLogic":true,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicWriter":{"prefab":{"prefabName":"StructureLogicWriter","prefabHash":-1326019434,"desc":"","name":"Logic Writer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","ForceWrite":"Write","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicWriterSwitch":{"prefab":{"prefabName":"StructureLogicWriterSwitch","prefabHash":-1321250424,"desc":"","name":"Logic Writer Switch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","ForceWrite":"Write","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureManualHatch":{"prefab":{"prefabName":"StructureManualHatch","prefabHash":-1808154199,"desc":"Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock.","name":"Manual Hatch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureMediumConvectionRadiator":{"prefab":{"prefabName":"StructureMediumConvectionRadiator","prefabHash":-1918215845,"desc":"A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumConvectionRadiatorLiquid":{"prefab":{"prefabName":"StructureMediumConvectionRadiatorLiquid","prefabHash":-1169014183,"desc":"A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumHangerDoor":{"prefab":{"prefabName":"StructureMediumHangerDoor","prefabHash":-566348148,"desc":"1 x 2 modular door piece for building hangar doors.","name":"Medium Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureMediumRadiator":{"prefab":{"prefabName":"StructureMediumRadiator","prefabHash":-975966237,"desc":"A stand-alone radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRadiatorLiquid":{"prefab":{"prefabName":"StructureMediumRadiatorLiquid","prefabHash":-1141760613,"desc":"A stand-alone liquid radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRocketGasFuelTank":{"prefab":{"prefabName":"StructureMediumRocketGasFuelTank","prefabHash":-1093860567,"desc":"","name":"Gas Capsule Tank Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Output"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRocketLiquidFuelTank":{"prefab":{"prefabName":"StructureMediumRocketLiquidFuelTank","prefabHash":1143639539,"desc":"","name":"Liquid Capsule Tank Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Output"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMotionSensor":{"prefab":{"prefabName":"StructureMotionSensor","prefabHash":-1713470563,"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.","name":"Motion Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureNitrolyzer":{"prefab":{"prefabName":"StructureNitrolyzer","prefabHash":1898243702,"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.","name":"Nitrolyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","Combustion":"Read","CombustionInput":"Read","CombustionInput2":"Read","CombustionOutput":"Read","Error":"Read","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideInput2":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidHydrogen":"Read","RatioLiquidNitrogen":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenInput2":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideInput2":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenInput2":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantInput2":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesInput2":"Read","RatioLiquidVolatilesOutput":"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","RatioSteamInput":"Read","RatioSteamInput2":"Read","RatioSteamOutput":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureOccupancySensor":{"prefab":{"prefabName":"StructureOccupancySensor","prefabHash":322782515,"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.","name":"Occupancy Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"Read","NameHash":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureOverheadShortCornerLocker":{"prefab":{"prefabName":"StructureOverheadShortCornerLocker","prefabHash":-1794932560,"desc":"","name":"Overhead Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureOverheadShortLocker":{"prefab":{"prefabName":"StructureOverheadShortLocker","prefabHash":1468249454,"desc":"","name":"Overhead Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePassiveLargeRadiatorGas":{"prefab":{"prefabName":"StructurePassiveLargeRadiatorGas","prefabHash":2066977095,"desc":"Has been replaced by Medium Convection Radiator.","name":"Medium Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveLargeRadiatorLiquid":{"prefab":{"prefabName":"StructurePassiveLargeRadiatorLiquid","prefabHash":24786172,"desc":"Has been replaced by Medium Convection Radiator Liquid.","name":"Medium Convection Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveLiquidDrain":{"prefab":{"prefabName":"StructurePassiveLiquidDrain","prefabHash":1812364811,"desc":"Moves liquids from a pipe network to the world atmosphere.","name":"Passive Liquid Drain"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveVent":{"prefab":{"prefabName":"StructurePassiveVent","prefabHash":335498166,"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. ","name":"Passive Vent"},"structure":{"smallGrid":true}},"StructurePassiveVentInsulated":{"prefab":{"prefabName":"StructurePassiveVentInsulated","prefabHash":1363077139,"desc":"","name":"Insulated Passive Vent"},"structure":{"smallGrid":true}},"StructurePassthroughHeatExchangerGasToGas":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerGasToGas","prefabHash":-1674187440,"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.","name":"CounterFlow Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Output2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassthroughHeatExchangerGasToLiquid":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerGasToLiquid","prefabHash":1928991265,"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.","name":"CounterFlow Heat Exchanger - Gas + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassthroughHeatExchangerLiquidToLiquid":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerLiquidToLiquid","prefabHash":-1472829583,"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.","name":"CounterFlow Heat Exchanger - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePictureFrameThickLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThickLandscapeLarge","prefabHash":-1434523206,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThickLandscapeSmall","prefabHash":-2041566697,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThickMountLandscapeLarge","prefabHash":950004659,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThickMountLandscapeSmall","prefabHash":347154462,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThickMountPortraitLarge","prefabHash":-1459641358,"desc":"","name":"Picture Frame Thick Mount Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThickMountPortraitSmall","prefabHash":-2066653089,"desc":"","name":"Picture Frame Thick Mount Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThickPortraitLarge","prefabHash":-1686949570,"desc":"","name":"Picture Frame Thick Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThickPortraitSmall","prefabHash":-1218579821,"desc":"","name":"Picture Frame Thick Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThinLandscapeLarge","prefabHash":-1418288625,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThinLandscapeSmall","prefabHash":-2024250974,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThinMountLandscapeLarge","prefabHash":-1146760430,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThinMountLandscapeSmall","prefabHash":-1752493889,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThinMountPortraitLarge","prefabHash":1094895077,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThinMountPortraitSmall","prefabHash":1835796040,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThinPortraitLarge","prefabHash":1212777087,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThinPortraitSmall","prefabHash":1684488658,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"smallGrid":true}},"StructurePipeAnalysizer":{"prefab":{"prefabName":"StructurePipeAnalysizer","prefabHash":435685051,"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.","name":"Pipe Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","NameHash":"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","Volume":"Read","VolumeOfLiquid":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePipeCorner":{"prefab":{"prefabName":"StructurePipeCorner","prefabHash":-1785673561,"desc":"You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Corner)"},"structure":{"smallGrid":true}},"StructurePipeCowl":{"prefab":{"prefabName":"StructurePipeCowl","prefabHash":465816159,"desc":"","name":"Pipe Cowl"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction":{"prefab":{"prefabName":"StructurePipeCrossJunction","prefabHash":-1405295588,"desc":"You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction3":{"prefab":{"prefabName":"StructurePipeCrossJunction3","prefabHash":2038427184,"desc":"You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction4":{"prefab":{"prefabName":"StructurePipeCrossJunction4","prefabHash":-417629293,"desc":"You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction5":{"prefab":{"prefabName":"StructurePipeCrossJunction5","prefabHash":-1877193979,"desc":"You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction6":{"prefab":{"prefabName":"StructurePipeCrossJunction6","prefabHash":152378047,"desc":"You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeHeater":{"prefab":{"prefabName":"StructurePipeHeater","prefabHash":-419758574,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePipeIgniter":{"prefab":{"prefabName":"StructurePipeIgniter","prefabHash":1286441942,"desc":"Ignites the atmosphere inside the attached pipe network.","name":"Pipe Igniter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeInsulatedLiquidCrossJunction":{"prefab":{"prefabName":"StructurePipeInsulatedLiquidCrossJunction","prefabHash":-2068497073,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeLabel":{"prefab":{"prefabName":"StructurePipeLabel","prefabHash":-999721119,"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.","name":"Pipe Label"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeLiquidCorner":{"prefab":{"prefabName":"StructurePipeLiquidCorner","prefabHash":-1856720921,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Corner)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction","prefabHash":1848735691,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction3":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction3","prefabHash":1628087508,"desc":"You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction4":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction4","prefabHash":-9555593,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction5":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction5","prefabHash":-2006384159,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction6":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction6","prefabHash":291524699,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidStraight":{"prefab":{"prefabName":"StructurePipeLiquidStraight","prefabHash":667597982,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Straight)"},"structure":{"smallGrid":true}},"StructurePipeLiquidTJunction":{"prefab":{"prefabName":"StructurePipeLiquidTJunction","prefabHash":262616717,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructurePipeMeter":{"prefab":{"prefabName":"StructurePipeMeter","prefabHash":-1798362329,"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\"","name":"Pipe Meter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeOneWayValve":{"prefab":{"prefabName":"StructurePipeOneWayValve","prefabHash":1580412404,"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","name":"One Way Valve (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeOrgan":{"prefab":{"prefabName":"StructurePipeOrgan","prefabHash":1305252611,"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.","name":"Pipe Organ"},"structure":{"smallGrid":true}},"StructurePipeRadiator":{"prefab":{"prefabName":"StructurePipeRadiator","prefabHash":1696603168,"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.","name":"Pipe Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeRadiatorFlat":{"prefab":{"prefabName":"StructurePipeRadiatorFlat","prefabHash":-399883995,"desc":"A pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeRadiatorFlatLiquid":{"prefab":{"prefabName":"StructurePipeRadiatorFlatLiquid","prefabHash":2024754523,"desc":"A liquid pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeStraight":{"prefab":{"prefabName":"StructurePipeStraight","prefabHash":73728932,"desc":"You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Straight)"},"structure":{"smallGrid":true}},"StructurePipeTJunction":{"prefab":{"prefabName":"StructurePipeTJunction","prefabHash":-913817472,"desc":"You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructurePlanter":{"prefab":{"prefabName":"StructurePlanter","prefabHash":-1125641329,"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).","name":"Planter"},"structure":{"smallGrid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Plant","typ":"Plant"}]},"StructurePlatformLadderOpen":{"prefab":{"prefabName":"StructurePlatformLadderOpen","prefabHash":1559586682,"desc":"","name":"Ladder Platform"},"structure":{"smallGrid":false}},"StructurePlinth":{"prefab":{"prefabName":"StructurePlinth","prefabHash":989835703,"desc":"","name":"Plinth"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructurePortablesConnector":{"prefab":{"prefabName":"StructurePortablesConnector","prefabHash":-899013427,"desc":"","name":"Portables Connector"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Maximum":"Read","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePowerConnector":{"prefab":{"prefabName":"StructurePowerConnector","prefabHash":-782951720,"desc":"Attaches a Kit (Portable Generator) to a power network.","name":"Power Connector"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Portable Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePowerTransmitter":{"prefab":{"prefabName":"StructurePowerTransmitter","prefabHash":-65087121,"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.","name":"Microwave Power Transmitter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Error":"Read","Horizontal":"ReadWrite","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerTransmitterOmni":{"prefab":{"prefabName":"StructurePowerTransmitterOmni","prefabHash":-327468845,"desc":"","name":"Power Transmitter Omni"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerTransmitterReceiver":{"prefab":{"prefabName":"StructurePowerTransmitterReceiver","prefabHash":1195820278,"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","name":"Microwave Power Receiver"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Error":"Read","Horizontal":"ReadWrite","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalFemale":{"prefab":{"prefabName":"StructurePowerUmbilicalFemale","prefabHash":101488029,"desc":"","name":"Umbilical Socket (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalFemaleSide":{"prefab":{"prefabName":"StructurePowerUmbilicalFemaleSide","prefabHash":1922506192,"desc":"","name":"Umbilical Socket Angle (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalMale":{"prefab":{"prefabName":"StructurePowerUmbilicalMale","prefabHash":1529453938,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructurePoweredVent":{"prefab":{"prefabName":"StructurePoweredVent","prefabHash":938836756,"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.","name":"Powered Vent"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureExternal":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePoweredVentLarge":{"prefab":{"prefabName":"StructurePoweredVentLarge","prefabHash":-785498334,"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.","name":"Powered Vent Large"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureExternal":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressurantValve":{"prefab":{"prefabName":"StructurePressurantValve","prefabHash":23052817,"desc":"Pumps gas into a liquid pipe in order to raise the pressure","name":"Pressurant Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressureFedGasEngine":{"prefab":{"prefabName":"StructurePressureFedGasEngine","prefabHash":-624011170,"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.","name":"Pressure Fed Gas Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressureFedLiquidEngine":{"prefab":{"prefabName":"StructurePressureFedLiquidEngine","prefabHash":379750958,"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.","name":"Pressure Fed Liquid Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateLarge":{"prefab":{"prefabName":"StructurePressurePlateLarge","prefabHash":-2008706143,"desc":"","name":"Trigger Plate (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateMedium":{"prefab":{"prefabName":"StructurePressurePlateMedium","prefabHash":1269458680,"desc":"","name":"Trigger Plate (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateSmall":{"prefab":{"prefabName":"StructurePressurePlateSmall","prefabHash":-1536471028,"desc":"","name":"Trigger Plate (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressureRegulator":{"prefab":{"prefabName":"StructurePressureRegulator","prefabHash":209854039,"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.","name":"Pressure Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureProximitySensor":{"prefab":{"prefabName":"StructureProximitySensor","prefabHash":568800213,"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.","name":"Proximity Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"Read","NameHash":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePumpedLiquidEngine":{"prefab":{"prefabName":"StructurePumpedLiquidEngine","prefabHash":-2031440019,"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","name":"Pumped Liquid Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePurgeValve":{"prefab":{"prefabName":"StructurePurgeValve","prefabHash":-737232128,"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.","name":"Purge Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRailing":{"prefab":{"prefabName":"StructureRailing","prefabHash":-1756913871,"desc":"\"Safety third.\"","name":"Railing Industrial (Type 1)"},"structure":{"smallGrid":false}},"StructureRecycler":{"prefab":{"prefabName":"StructureRecycler","prefabHash":-1633947337,"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.","name":"Recycler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureRefrigeratedVendingMachine":{"prefab":{"prefabName":"StructureRefrigeratedVendingMachine","prefabHash":-1577831321,"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. ","name":"Refrigerated Vending Machine"},"structure":{"smallGrid":true},"logic":{"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":{"Activate":"ReadWrite","ClearMemory":"Write","Combustion":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureReinforcedCompositeWindow":{"prefab":{"prefabName":"StructureReinforcedCompositeWindow","prefabHash":2027713511,"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.","name":"Reinforced Window (Composite)"},"structure":{"smallGrid":false}},"StructureReinforcedCompositeWindowSteel":{"prefab":{"prefabName":"StructureReinforcedCompositeWindowSteel","prefabHash":-816454272,"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.","name":"Reinforced Window (Composite Steel)"},"structure":{"smallGrid":false}},"StructureReinforcedWallPaddedWindow":{"prefab":{"prefabName":"StructureReinforcedWallPaddedWindow","prefabHash":1939061729,"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.","name":"Reinforced Window (Padded)"},"structure":{"smallGrid":false}},"StructureReinforcedWallPaddedWindowThin":{"prefab":{"prefabName":"StructureReinforcedWallPaddedWindowThin","prefabHash":158502707,"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.","name":"Reinforced Window (Thin)"},"structure":{"smallGrid":false}},"StructureRocketAvionics":{"prefab":{"prefabName":"StructureRocketAvionics","prefabHash":808389066,"desc":"","name":"Rocket Avionics"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureRocketCelestialTracker":{"prefab":{"prefabName":"StructureRocketCelestialTracker","prefabHash":997453927,"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.","name":"Rocket Celestial Tracker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"CelestialHash":"Read","Error":"Read","Horizontal":"Read","Index":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Vertical":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"instructions":{"BodyOrientation":{"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 |","typ":"CelestialTracking","value":1}},"memoryAccess":"Read","memorySize":12}},"StructureRocketCircuitHousing":{"prefab":{"prefabName":"StructureRocketCircuitHousing","prefabHash":150135861,"desc":"","name":"Rocket Circuit Housing"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","LineNumber":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","LineNumber":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"}],"devicePinsLength":6,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"StructureRocketEngineTiny":{"prefab":{"prefabName":"StructureRocketEngineTiny","prefabHash":178472613,"desc":"","name":"Rocket Engine (Tiny)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketManufactory":{"prefab":{"prefabName":"StructureRocketManufactory","prefabHash":1781051034,"desc":"","name":"Rocket Manufactory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureRocketMiner":{"prefab":{"prefabName":"StructureRocketMiner","prefabHash":-2087223687,"desc":"Gathers available resources at the rocket's current space location.","name":"Rocket Miner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"ClearMemory":"Write","DrillCondition":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"},{"name":"Drill Head Slot","typ":"DrillHead"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketScanner":{"prefab":{"prefabName":"StructureRocketScanner","prefabHash":2014252591,"desc":"","name":"Rocket Scanner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Scanner Head Slot","typ":"ScanningHead"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketTower":{"prefab":{"prefabName":"StructureRocketTower","prefabHash":-654619479,"desc":"","name":"Launch Tower"},"structure":{"smallGrid":false}},"StructureRocketTransformerSmall":{"prefab":{"prefabName":"StructureRocketTransformerSmall","prefabHash":518925193,"desc":"","name":"Transformer Small (Rocket)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRover":{"prefab":{"prefabName":"StructureRover","prefabHash":806513938,"desc":"","name":"Rover Frame"},"structure":{"smallGrid":false}},"StructureSDBHopper":{"prefab":{"prefabName":"StructureSDBHopper","prefabHash":-1875856925,"desc":"","name":"SDB Hopper"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSDBHopperAdvanced":{"prefab":{"prefabName":"StructureSDBHopperAdvanced","prefabHash":467225612,"desc":"","name":"SDB Hopper Advanced"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSDBSilo":{"prefab":{"prefabName":"StructureSDBSilo","prefabHash":1155865682,"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.","name":"SDB Silo"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSatelliteDish":{"prefab":{"prefabName":"StructureSatelliteDish","prefabHash":439026183,"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.","name":"Medium Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","BestContactFilter":"ReadWrite","ContactTypeId":"Read","Error":"Read","Horizontal":"ReadWrite","Idle":"Read","InterrogationProgress":"Read","MinimumWattsToContact":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSecurityPrinter":{"prefab":{"prefabName":"StructureSecurityPrinter","prefabHash":-641491515,"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","name":"Security Printer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureShelf":{"prefab":{"prefabName":"StructureShelf","prefabHash":1172114950,"desc":"","name":"Shelf"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"StructureShelfMedium":{"prefab":{"prefabName":"StructureShelfMedium","prefabHash":182006674,"desc":"A shelf for putting things on, so you can see them.","name":"Shelf Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShortCornerLocker":{"prefab":{"prefabName":"StructureShortCornerLocker","prefabHash":1330754486,"desc":"","name":"Short Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShortLocker":{"prefab":{"prefabName":"StructureShortLocker","prefabHash":-554553467,"desc":"","name":"Short Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShower":{"prefab":{"prefabName":"StructureShower","prefabHash":-775128944,"desc":"","name":"Shower"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Maximum":"Read","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShowerPowered":{"prefab":{"prefabName":"StructureShowerPowered","prefabHash":-1081797501,"desc":"","name":"Shower (Powered)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSign1x1":{"prefab":{"prefabName":"StructureSign1x1","prefabHash":879058460,"desc":"","name":"Sign 1x1"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSign2x1":{"prefab":{"prefabName":"StructureSign2x1","prefabHash":908320837,"desc":"","name":"Sign 2x1"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSingleBed":{"prefab":{"prefabName":"StructureSingleBed","prefabHash":-492611,"desc":"Description coming.","name":"Single Bed"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSleeper":{"prefab":{"prefabName":"StructureSleeper","prefabHash":-1467449329,"desc":"","name":"Sleeper"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperLeft":{"prefab":{"prefabName":"StructureSleeperLeft","prefabHash":1213495833,"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.","name":"Sleeper Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Safe","1":"Unsafe","2":"Unpowered"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperRight":{"prefab":{"prefabName":"StructureSleeperRight","prefabHash":-1812330717,"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.","name":"Sleeper Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Safe","1":"Unsafe","2":"Unpowered"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperVertical":{"prefab":{"prefabName":"StructureSleeperVertical","prefabHash":-1300059018,"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.","name":"Sleeper Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Safe","1":"Unsafe","2":"Unpowered"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperVerticalDroid":{"prefab":{"prefabName":"StructureSleeperVerticalDroid","prefabHash":1382098999,"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.","name":"Droid Sleeper Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSmallDirectHeatExchangeGastoGas":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeGastoGas","prefabHash":1310303582,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallDirectHeatExchangeLiquidtoGas":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeLiquidtoGas","prefabHash":1825212016,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Gas "},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeLiquidtoLiquid","prefabHash":-507770416,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallSatelliteDish":{"prefab":{"prefabName":"StructureSmallSatelliteDish","prefabHash":-2138748650,"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.","name":"Small Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","BestContactFilter":"ReadWrite","ContactTypeId":"Read","Error":"Read","Horizontal":"ReadWrite","Idle":"Read","InterrogationProgress":"Read","MinimumWattsToContact":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSmallTableBacklessDouble":{"prefab":{"prefabName":"StructureSmallTableBacklessDouble","prefabHash":-1633000411,"desc":"","name":"Small (Table Backless Double)"},"structure":{"smallGrid":true}},"StructureSmallTableBacklessSingle":{"prefab":{"prefabName":"StructureSmallTableBacklessSingle","prefabHash":-1897221677,"desc":"","name":"Small (Table Backless Single)"},"structure":{"smallGrid":true}},"StructureSmallTableDinnerSingle":{"prefab":{"prefabName":"StructureSmallTableDinnerSingle","prefabHash":1260651529,"desc":"","name":"Small (Table Dinner Single)"},"structure":{"smallGrid":true}},"StructureSmallTableRectangleDouble":{"prefab":{"prefabName":"StructureSmallTableRectangleDouble","prefabHash":-660451023,"desc":"","name":"Small (Table Rectangle Double)"},"structure":{"smallGrid":true}},"StructureSmallTableRectangleSingle":{"prefab":{"prefabName":"StructureSmallTableRectangleSingle","prefabHash":-924678969,"desc":"","name":"Small (Table Rectangle Single)"},"structure":{"smallGrid":true}},"StructureSmallTableThickDouble":{"prefab":{"prefabName":"StructureSmallTableThickDouble","prefabHash":-19246131,"desc":"","name":"Small (Table Thick Double)"},"structure":{"smallGrid":true}},"StructureSmallTableThickSingle":{"prefab":{"prefabName":"StructureSmallTableThickSingle","prefabHash":-291862981,"desc":"","name":"Small Table (Thick Single)"},"structure":{"smallGrid":true}},"StructureSolarPanel":{"prefab":{"prefabName":"StructureSolarPanel","prefabHash":-2045627372,"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.","name":"Solar Panel"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanel45":{"prefab":{"prefabName":"StructureSolarPanel45","prefabHash":-1554349863,"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.","name":"Solar Panel (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanel45Reinforced":{"prefab":{"prefabName":"StructureSolarPanel45Reinforced","prefabHash":930865127,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelDual":{"prefab":{"prefabName":"StructureSolarPanelDual","prefabHash":-539224550,"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.","name":"Solar Panel (Dual)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelDualReinforced":{"prefab":{"prefabName":"StructureSolarPanelDualReinforced","prefabHash":-1545574413,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Dual)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelFlat":{"prefab":{"prefabName":"StructureSolarPanelFlat","prefabHash":1968102968,"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.","name":"Solar Panel (Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelFlatReinforced":{"prefab":{"prefabName":"StructureSolarPanelFlatReinforced","prefabHash":1697196770,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelReinforced":{"prefab":{"prefabName":"StructureSolarPanelReinforced","prefabHash":-934345724,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolidFuelGenerator":{"prefab":{"prefabName":"StructureSolidFuelGenerator","prefabHash":813146305,"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.","name":"Generator (Solid Fuel)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"modes":{"0":"Not Generating","1":"Generating"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Input","typ":"Ore"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSorter":{"prefab":{"prefabName":"StructureSorter","prefabHash":-1009150565,"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.","name":"Sorter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Output":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Split","1":"Filter","2":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Chute","role":"Output2"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStacker":{"prefab":{"prefabName":"StructureStacker","prefabHash":-2020231820,"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.","name":"Stacker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Output":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Automatic","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Processing","typ":"None"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStackerReverse":{"prefab":{"prefabName":"StructureStackerReverse","prefabHash":1585641623,"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.","name":"Stacker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Output":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Automatic","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStairs4x2":{"prefab":{"prefabName":"StructureStairs4x2","prefabHash":1405018945,"desc":"","name":"Stairs"},"structure":{"smallGrid":false}},"StructureStairs4x2RailL":{"prefab":{"prefabName":"StructureStairs4x2RailL","prefabHash":155214029,"desc":"","name":"Stairs with Rail (Left)"},"structure":{"smallGrid":false}},"StructureStairs4x2RailR":{"prefab":{"prefabName":"StructureStairs4x2RailR","prefabHash":-212902482,"desc":"","name":"Stairs with Rail (Right)"},"structure":{"smallGrid":false}},"StructureStairs4x2Rails":{"prefab":{"prefabName":"StructureStairs4x2Rails","prefabHash":-1088008720,"desc":"","name":"Stairs with Rails"},"structure":{"smallGrid":false}},"StructureStairwellBackLeft":{"prefab":{"prefabName":"StructureStairwellBackLeft","prefabHash":505924160,"desc":"","name":"Stairwell (Back Left)"},"structure":{"smallGrid":false}},"StructureStairwellBackPassthrough":{"prefab":{"prefabName":"StructureStairwellBackPassthrough","prefabHash":-862048392,"desc":"","name":"Stairwell (Back Passthrough)"},"structure":{"smallGrid":false}},"StructureStairwellBackRight":{"prefab":{"prefabName":"StructureStairwellBackRight","prefabHash":-2128896573,"desc":"","name":"Stairwell (Back Right)"},"structure":{"smallGrid":false}},"StructureStairwellFrontLeft":{"prefab":{"prefabName":"StructureStairwellFrontLeft","prefabHash":-37454456,"desc":"","name":"Stairwell (Front Left)"},"structure":{"smallGrid":false}},"StructureStairwellFrontPassthrough":{"prefab":{"prefabName":"StructureStairwellFrontPassthrough","prefabHash":-1625452928,"desc":"","name":"Stairwell (Front Passthrough)"},"structure":{"smallGrid":false}},"StructureStairwellFrontRight":{"prefab":{"prefabName":"StructureStairwellFrontRight","prefabHash":340210934,"desc":"","name":"Stairwell (Front Right)"},"structure":{"smallGrid":false}},"StructureStairwellNoDoors":{"prefab":{"prefabName":"StructureStairwellNoDoors","prefabHash":2049879875,"desc":"","name":"Stairwell (No Doors)"},"structure":{"smallGrid":false}},"StructureStirlingEngine":{"prefab":{"prefabName":"StructureStirlingEngine","prefabHash":-260316435,"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.","name":"Stirling Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Combustion":"Read","EnvironmentEfficiency":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStorageLocker":{"prefab":{"prefabName":"StructureStorageLocker","prefabHash":-793623899,"desc":"","name":"Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSuitStorage":{"prefab":{"prefabName":"StructureSuitStorage","prefabHash":255034731,"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.","name":"Suit Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Helmet","typ":"Helmet"},{"name":"Suit","typ":"Suit"},{"name":"Back","typ":"Back"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTankBig":{"prefab":{"prefabName":"StructureTankBig","prefabHash":-1606848156,"desc":"","name":"Large Tank"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankBigInsulated":{"prefab":{"prefabName":"StructureTankBigInsulated","prefabHash":1280378227,"desc":"","name":"Tank Big (Insulated)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankConnector":{"prefab":{"prefabName":"StructureTankConnector","prefabHash":-1276379454,"desc":"Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network.","name":"Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructureTankConnectorLiquid":{"prefab":{"prefabName":"StructureTankConnectorLiquid","prefabHash":1331802518,"desc":"These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network.","name":"Liquid Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureTankSmall":{"prefab":{"prefabName":"StructureTankSmall","prefabHash":1013514688,"desc":"","name":"Small Tank"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallAir":{"prefab":{"prefabName":"StructureTankSmallAir","prefabHash":955744474,"desc":"","name":"Small Tank (Air)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallFuel":{"prefab":{"prefabName":"StructureTankSmallFuel","prefabHash":2102454415,"desc":"","name":"Small Tank (Fuel)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallInsulated":{"prefab":{"prefabName":"StructureTankSmallInsulated","prefabHash":272136332,"desc":"","name":"Tank Small (Insulated)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureToolManufactory":{"prefab":{"prefabName":"StructureToolManufactory","prefabHash":-465741100,"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.","name":"Tool Manufactory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureTorpedoRack":{"prefab":{"prefabName":"StructureTorpedoRack","prefabHash":1473807953,"desc":"","name":"Torpedo Rack"},"structure":{"smallGrid":true},"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"}]},"StructureTraderWaypoint":{"prefab":{"prefabName":"StructureTraderWaypoint","prefabHash":1570931620,"desc":"","name":"Trader Waypoint"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformer":{"prefab":{"prefabName":"StructureTransformer","prefabHash":-1423212473,"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.","name":"Transformer (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerMedium":{"prefab":{"prefabName":"StructureTransformerMedium","prefabHash":-1065725831,"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.","name":"Transformer (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerMediumReversed":{"prefab":{"prefabName":"StructureTransformerMediumReversed","prefabHash":833912764,"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.","name":"Transformer Reversed (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerSmall":{"prefab":{"prefabName":"StructureTransformerSmall","prefabHash":-890946730,"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.","name":"Transformer (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerSmallReversed":{"prefab":{"prefabName":"StructureTransformerSmallReversed","prefabHash":1054059374,"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.","name":"Transformer Reversed (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTurbineGenerator":{"prefab":{"prefabName":"StructureTurbineGenerator","prefabHash":1282191063,"desc":"","name":"Turbine Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureTurboVolumePump":{"prefab":{"prefabName":"StructureTurboVolumePump","prefabHash":1310794736,"desc":"Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Right","1":"Left"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureUnloader":{"prefab":{"prefabName":"StructureUnloader","prefabHash":750118160,"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.","name":"Unloader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Output":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Automatic","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureUprightWindTurbine":{"prefab":{"prefabName":"StructureUprightWindTurbine","prefabHash":1622183451,"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.","name":"Upright Wind Turbine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureValve":{"prefab":{"prefabName":"StructureValve","prefabHash":-692036078,"desc":"","name":"Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureVendingMachine":{"prefab":{"prefabName":"StructureVendingMachine","prefabHash":-443130773,"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.","name":"Vending Machine"},"structure":{"smallGrid":true},"logic":{"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":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","Ratio":"Read","ReferenceId":"Read","RequestHash":"ReadWrite","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureVolumePump":{"prefab":{"prefabName":"StructureVolumePump","prefabHash":-321403609,"desc":"The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks.","name":"Volume Pump"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallArch":{"prefab":{"prefabName":"StructureWallArch","prefabHash":-858143148,"desc":"","name":"Wall (Arch)"},"structure":{"smallGrid":false}},"StructureWallArchArrow":{"prefab":{"prefabName":"StructureWallArchArrow","prefabHash":1649708822,"desc":"","name":"Wall (Arch Arrow)"},"structure":{"smallGrid":false}},"StructureWallArchCornerRound":{"prefab":{"prefabName":"StructureWallArchCornerRound","prefabHash":1794588890,"desc":"","name":"Wall (Arch Corner Round)"},"structure":{"smallGrid":true}},"StructureWallArchCornerSquare":{"prefab":{"prefabName":"StructureWallArchCornerSquare","prefabHash":-1963016580,"desc":"","name":"Wall (Arch Corner Square)"},"structure":{"smallGrid":true}},"StructureWallArchCornerTriangle":{"prefab":{"prefabName":"StructureWallArchCornerTriangle","prefabHash":1281911841,"desc":"","name":"Wall (Arch Corner Triangle)"},"structure":{"smallGrid":true}},"StructureWallArchPlating":{"prefab":{"prefabName":"StructureWallArchPlating","prefabHash":1182510648,"desc":"","name":"Wall (Arch Plating)"},"structure":{"smallGrid":false}},"StructureWallArchTwoTone":{"prefab":{"prefabName":"StructureWallArchTwoTone","prefabHash":782529714,"desc":"","name":"Wall (Arch Two Tone)"},"structure":{"smallGrid":false}},"StructureWallCooler":{"prefab":{"prefabName":"StructureWallCooler","prefabHash":-739292323,"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.","name":"Wall Cooler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Pipe","role":"None"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallFlat":{"prefab":{"prefabName":"StructureWallFlat","prefabHash":1635864154,"desc":"","name":"Wall (Flat)"},"structure":{"smallGrid":false}},"StructureWallFlatCornerRound":{"prefab":{"prefabName":"StructureWallFlatCornerRound","prefabHash":898708250,"desc":"","name":"Wall (Flat Corner Round)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerSquare":{"prefab":{"prefabName":"StructureWallFlatCornerSquare","prefabHash":298130111,"desc":"","name":"Wall (Flat Corner Square)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerTriangle":{"prefab":{"prefabName":"StructureWallFlatCornerTriangle","prefabHash":2097419366,"desc":"","name":"Wall (Flat Corner Triangle)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerTriangleFlat":{"prefab":{"prefabName":"StructureWallFlatCornerTriangleFlat","prefabHash":-1161662836,"desc":"","name":"Wall (Flat Corner Triangle Flat)"},"structure":{"smallGrid":true}},"StructureWallGeometryCorner":{"prefab":{"prefabName":"StructureWallGeometryCorner","prefabHash":1979212240,"desc":"","name":"Wall (Geometry Corner)"},"structure":{"smallGrid":false}},"StructureWallGeometryStreight":{"prefab":{"prefabName":"StructureWallGeometryStreight","prefabHash":1049735537,"desc":"","name":"Wall (Geometry Straight)"},"structure":{"smallGrid":false}},"StructureWallGeometryT":{"prefab":{"prefabName":"StructureWallGeometryT","prefabHash":1602758612,"desc":"","name":"Wall (Geometry T)"},"structure":{"smallGrid":false}},"StructureWallGeometryTMirrored":{"prefab":{"prefabName":"StructureWallGeometryTMirrored","prefabHash":-1427845483,"desc":"","name":"Wall (Geometry T Mirrored)"},"structure":{"smallGrid":false}},"StructureWallHeater":{"prefab":{"prefabName":"StructureWallHeater","prefabHash":24258244,"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.","name":"Wall Heater"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallIron":{"prefab":{"prefabName":"StructureWallIron","prefabHash":1287324802,"desc":"","name":"Iron Wall (Type 1)"},"structure":{"smallGrid":false}},"StructureWallIron02":{"prefab":{"prefabName":"StructureWallIron02","prefabHash":1485834215,"desc":"","name":"Iron Wall (Type 2)"},"structure":{"smallGrid":false}},"StructureWallIron03":{"prefab":{"prefabName":"StructureWallIron03","prefabHash":798439281,"desc":"","name":"Iron Wall (Type 3)"},"structure":{"smallGrid":false}},"StructureWallIron04":{"prefab":{"prefabName":"StructureWallIron04","prefabHash":-1309433134,"desc":"","name":"Iron Wall (Type 4)"},"structure":{"smallGrid":false}},"StructureWallLargePanel":{"prefab":{"prefabName":"StructureWallLargePanel","prefabHash":1492930217,"desc":"","name":"Wall (Large Panel)"},"structure":{"smallGrid":false}},"StructureWallLargePanelArrow":{"prefab":{"prefabName":"StructureWallLargePanelArrow","prefabHash":-776581573,"desc":"","name":"Wall (Large Panel Arrow)"},"structure":{"smallGrid":false}},"StructureWallLight":{"prefab":{"prefabName":"StructureWallLight","prefabHash":-1860064656,"desc":"","name":"Wall Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallLightBattery":{"prefab":{"prefabName":"StructureWallLightBattery","prefabHash":-1306415132,"desc":"","name":"Wall Light (Battery)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallPaddedArch":{"prefab":{"prefabName":"StructureWallPaddedArch","prefabHash":1590330637,"desc":"","name":"Wall (Padded Arch)"},"structure":{"smallGrid":false}},"StructureWallPaddedArchCorner":{"prefab":{"prefabName":"StructureWallPaddedArchCorner","prefabHash":-1126688298,"desc":"","name":"Wall (Padded Arch Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedArchLightFittingTop":{"prefab":{"prefabName":"StructureWallPaddedArchLightFittingTop","prefabHash":1171987947,"desc":"","name":"Wall (Padded Arch Light Fitting Top)"},"structure":{"smallGrid":false}},"StructureWallPaddedArchLightsFittings":{"prefab":{"prefabName":"StructureWallPaddedArchLightsFittings","prefabHash":-1546743960,"desc":"","name":"Wall (Padded Arch Lights Fittings)"},"structure":{"smallGrid":false}},"StructureWallPaddedCorner":{"prefab":{"prefabName":"StructureWallPaddedCorner","prefabHash":-155945899,"desc":"","name":"Wall (Padded Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedCornerThin":{"prefab":{"prefabName":"StructureWallPaddedCornerThin","prefabHash":1183203913,"desc":"","name":"Wall (Padded Corner Thin)"},"structure":{"smallGrid":true}},"StructureWallPaddedNoBorder":{"prefab":{"prefabName":"StructureWallPaddedNoBorder","prefabHash":8846501,"desc":"","name":"Wall (Padded No Border)"},"structure":{"smallGrid":false}},"StructureWallPaddedNoBorderCorner":{"prefab":{"prefabName":"StructureWallPaddedNoBorderCorner","prefabHash":179694804,"desc":"","name":"Wall (Padded No Border Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedThinNoBorder":{"prefab":{"prefabName":"StructureWallPaddedThinNoBorder","prefabHash":-1611559100,"desc":"","name":"Wall (Padded Thin No Border)"},"structure":{"smallGrid":false}},"StructureWallPaddedThinNoBorderCorner":{"prefab":{"prefabName":"StructureWallPaddedThinNoBorderCorner","prefabHash":1769527556,"desc":"","name":"Wall (Padded Thin No Border Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedWindow":{"prefab":{"prefabName":"StructureWallPaddedWindow","prefabHash":2087628940,"desc":"","name":"Wall (Padded Window)"},"structure":{"smallGrid":false}},"StructureWallPaddedWindowThin":{"prefab":{"prefabName":"StructureWallPaddedWindowThin","prefabHash":-37302931,"desc":"","name":"Wall (Padded Window Thin)"},"structure":{"smallGrid":false}},"StructureWallPadding":{"prefab":{"prefabName":"StructureWallPadding","prefabHash":635995024,"desc":"","name":"Wall (Padding)"},"structure":{"smallGrid":false}},"StructureWallPaddingArchVent":{"prefab":{"prefabName":"StructureWallPaddingArchVent","prefabHash":-1243329828,"desc":"","name":"Wall (Padding Arch Vent)"},"structure":{"smallGrid":false}},"StructureWallPaddingLightFitting":{"prefab":{"prefabName":"StructureWallPaddingLightFitting","prefabHash":2024882687,"desc":"","name":"Wall (Padding Light Fitting)"},"structure":{"smallGrid":false}},"StructureWallPaddingThin":{"prefab":{"prefabName":"StructureWallPaddingThin","prefabHash":-1102403554,"desc":"","name":"Wall (Padding Thin)"},"structure":{"smallGrid":false}},"StructureWallPlating":{"prefab":{"prefabName":"StructureWallPlating","prefabHash":26167457,"desc":"","name":"Wall (Plating)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsAndHatch":{"prefab":{"prefabName":"StructureWallSmallPanelsAndHatch","prefabHash":619828719,"desc":"","name":"Wall (Small Panels And Hatch)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsArrow":{"prefab":{"prefabName":"StructureWallSmallPanelsArrow","prefabHash":-639306697,"desc":"","name":"Wall (Small Panels Arrow)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsMonoChrome":{"prefab":{"prefabName":"StructureWallSmallPanelsMonoChrome","prefabHash":386820253,"desc":"","name":"Wall (Small Panels Mono Chrome)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsOpen":{"prefab":{"prefabName":"StructureWallSmallPanelsOpen","prefabHash":-1407480603,"desc":"","name":"Wall (Small Panels Open)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsTwoTone":{"prefab":{"prefabName":"StructureWallSmallPanelsTwoTone","prefabHash":1709994581,"desc":"","name":"Wall (Small Panels Two Tone)"},"structure":{"smallGrid":false}},"StructureWallVent":{"prefab":{"prefabName":"StructureWallVent","prefabHash":-1177469307,"desc":"Used to mix atmospheres passively between two walls.","name":"Wall Vent"},"structure":{"smallGrid":true}},"StructureWaterBottleFiller":{"prefab":{"prefabName":"StructureWaterBottleFiller","prefabHash":-1178961954,"desc":"","name":"Water Bottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerBottom":{"prefab":{"prefabName":"StructureWaterBottleFillerBottom","prefabHash":1433754995,"desc":"","name":"Water Bottle Filler Bottom"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerPowered":{"prefab":{"prefabName":"StructureWaterBottleFillerPowered","prefabHash":-756587791,"desc":"","name":"Waterbottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerPoweredBottom":{"prefab":{"prefabName":"StructureWaterBottleFillerPoweredBottom","prefabHash":1986658780,"desc":"","name":"Waterbottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterDigitalValve":{"prefab":{"prefabName":"StructureWaterDigitalValve","prefabHash":-517628750,"desc":"","name":"Liquid Digital Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterPipeMeter":{"prefab":{"prefabName":"StructureWaterPipeMeter","prefabHash":433184168,"desc":"","name":"Liquid Pipe Meter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterPurifier":{"prefab":{"prefabName":"StructureWaterPurifier","prefabHash":887383294,"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.","name":"Water Purifier"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterWallCooler":{"prefab":{"prefabName":"StructureWaterWallCooler","prefabHash":-1369060582,"desc":"","name":"Liquid Wall Cooler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWeatherStation":{"prefab":{"prefabName":"StructureWeatherStation","prefabHash":1997212478,"desc":"0.NoStorm\n1.StormIncoming\n2.InStorm","name":"Weather Station"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","Mode":"Read","NameHash":"Read","NextWeatherEventTime":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"NoStorm","1":"StormIncoming","2":"InStorm"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWindTurbine":{"prefab":{"prefabName":"StructureWindTurbine","prefabHash":-2082355173,"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.","name":"Wind Turbine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWindowShutter":{"prefab":{"prefabName":"StructureWindowShutter","prefabHash":2056377335,"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.","name":"Window Shutter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Idle":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"ToolPrinterMod":{"prefab":{"prefabName":"ToolPrinterMod","prefabHash":1700018136,"desc":"Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Tool Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ToyLuna":{"prefab":{"prefabName":"ToyLuna","prefabHash":94730034,"desc":"","name":"Toy Luna"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"UniformCommander":{"prefab":{"prefabName":"UniformCommander","prefabHash":-2083426457,"desc":"","name":"Uniform Commander"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformMarine":{"prefab":{"prefabName":"UniformMarine","prefabHash":-48342840,"desc":"","name":"Marine Uniform"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformOrangeJumpSuit":{"prefab":{"prefabName":"UniformOrangeJumpSuit","prefabHash":810053150,"desc":"","name":"Jump Suit (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"WeaponEnergy":{"prefab":{"prefabName":"WeaponEnergy","prefabHash":789494694,"desc":"","name":"Weapon Energy"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponPistolEnergy":{"prefab":{"prefabName":"WeaponPistolEnergy","prefabHash":-385323479,"desc":"0.Stun\n1.Kill","name":"Energy Pistol"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponRifleEnergy":{"prefab":{"prefabName":"WeaponRifleEnergy","prefabHash":1154745374,"desc":"0.Stun\n1.Kill","name":"Energy Rifle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponTorpedo":{"prefab":{"prefabName":"WeaponTorpedo","prefabHash":-1102977898,"desc":"","name":"Torpedo"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Torpedo","sortingClass":"Default"}}},"reagents":{"Alcohol":{"Hash":1565803737,"Unit":"ml","Sources":null},"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}},"Cocoa":{"Hash":678781198,"Unit":"g","Sources":{"ItemCocoaPowder":1.0,"ItemCocoaTree":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","Sources":null},"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","Sources":null},"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}},"Sugar":{"Hash":1778746875,"Unit":"g","Sources":{"ItemSugar":10.0,"ItemSugarCane":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}}},"enums":{"scriptEnums":{"LogicBatchMethod":{"enumName":"LogicBatchMethod","values":{"Average":{"value":0,"deprecated":false,"description":""},"Maximum":{"value":3,"deprecated":false,"description":""},"Minimum":{"value":2,"deprecated":false,"description":""},"Sum":{"value":1,"deprecated":false,"description":""}}},"LogicReagentMode":{"enumName":"LogicReagentMode","values":{"Contents":{"value":0,"deprecated":false,"description":""},"Recipe":{"value":2,"deprecated":false,"description":""},"Required":{"value":1,"deprecated":false,"description":""},"TotalContents":{"value":3,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NameHash":{"value":268,"deprecated":false,"description":"Provides the hash value for the name of the object as a 32 bit integer."},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}}},"basicEnums":{"AirCon":{"enumName":"AirConditioningMode","values":{"Cold":{"value":0,"deprecated":false,"description":""},"Hot":{"value":1,"deprecated":false,"description":""}}},"AirControl":{"enumName":"AirControlMode","values":{"Draught":{"value":4,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Offline":{"value":1,"deprecated":false,"description":""},"Pressure":{"value":2,"deprecated":false,"description":""}}},"Color":{"enumName":"ColorType","values":{"Black":{"value":7,"deprecated":false,"description":""},"Blue":{"value":0,"deprecated":false,"description":""},"Brown":{"value":8,"deprecated":false,"description":""},"Gray":{"value":1,"deprecated":false,"description":""},"Green":{"value":2,"deprecated":false,"description":""},"Khaki":{"value":9,"deprecated":false,"description":""},"Orange":{"value":3,"deprecated":false,"description":""},"Pink":{"value":10,"deprecated":false,"description":""},"Purple":{"value":11,"deprecated":false,"description":""},"Red":{"value":4,"deprecated":false,"description":""},"White":{"value":6,"deprecated":false,"description":""},"Yellow":{"value":5,"deprecated":false,"description":""}}},"DaylightSensorMode":{"enumName":"DaylightSensorMode","values":{"Default":{"value":0,"deprecated":false,"description":""},"Horizontal":{"value":1,"deprecated":false,"description":""},"Vertical":{"value":2,"deprecated":false,"description":""}}},"ElevatorMode":{"enumName":"ElevatorMode","values":{"Downward":{"value":2,"deprecated":false,"description":""},"Stationary":{"value":0,"deprecated":false,"description":""},"Upward":{"value":1,"deprecated":false,"description":""}}},"EntityState":{"enumName":"EntityState","values":{"Alive":{"value":0,"deprecated":false,"description":""},"Dead":{"value":1,"deprecated":false,"description":""},"Decay":{"value":3,"deprecated":false,"description":""},"Unconscious":{"value":2,"deprecated":false,"description":""}}},"GasType":{"enumName":"GasType","values":{"CarbonDioxide":{"value":4,"deprecated":false,"description":""},"Hydrogen":{"value":16384,"deprecated":false,"description":""},"LiquidCarbonDioxide":{"value":2048,"deprecated":false,"description":""},"LiquidHydrogen":{"value":32768,"deprecated":false,"description":""},"LiquidNitrogen":{"value":128,"deprecated":false,"description":""},"LiquidNitrousOxide":{"value":8192,"deprecated":false,"description":""},"LiquidOxygen":{"value":256,"deprecated":false,"description":""},"LiquidPollutant":{"value":4096,"deprecated":false,"description":""},"LiquidVolatiles":{"value":512,"deprecated":false,"description":""},"Nitrogen":{"value":2,"deprecated":false,"description":""},"NitrousOxide":{"value":64,"deprecated":false,"description":""},"Oxygen":{"value":1,"deprecated":false,"description":""},"Pollutant":{"value":16,"deprecated":false,"description":""},"PollutedWater":{"value":65536,"deprecated":false,"description":""},"Steam":{"value":1024,"deprecated":false,"description":""},"Undefined":{"value":0,"deprecated":false,"description":""},"Volatiles":{"value":8,"deprecated":false,"description":""},"Water":{"value":32,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NameHash":{"value":268,"deprecated":false,"description":"Provides the hash value for the name of the object as a 32 bit integer."},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}},"PowerMode":{"enumName":"PowerMode","values":{"Charged":{"value":4,"deprecated":false,"description":""},"Charging":{"value":3,"deprecated":false,"description":""},"Discharged":{"value":1,"deprecated":false,"description":""},"Discharging":{"value":2,"deprecated":false,"description":""},"Idle":{"value":0,"deprecated":false,"description":""}}},"PrinterInstruction":{"enumName":"PrinterInstruction","values":{"DeviceSetLock":{"value":6,"deprecated":false,"description":""},"EjectAllReagents":{"value":8,"deprecated":false,"description":""},"EjectReagent":{"value":7,"deprecated":false,"description":""},"ExecuteRecipe":{"value":2,"deprecated":false,"description":""},"JumpIfNextInvalid":{"value":4,"deprecated":false,"description":""},"JumpToAddress":{"value":5,"deprecated":false,"description":""},"MissingRecipeReagent":{"value":9,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"StackPointer":{"value":1,"deprecated":false,"description":""},"WaitUntilNextValid":{"value":3,"deprecated":false,"description":""}}},"ReEntryProfile":{"enumName":"ReEntryProfile","values":{"High":{"value":3,"deprecated":false,"description":""},"Max":{"value":4,"deprecated":false,"description":""},"Medium":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Optimal":{"value":1,"deprecated":false,"description":""}}},"RobotMode":{"enumName":"RobotMode","values":{"Follow":{"value":1,"deprecated":false,"description":""},"MoveToTarget":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"PathToTarget":{"value":5,"deprecated":false,"description":""},"Roam":{"value":3,"deprecated":false,"description":""},"StorageFull":{"value":6,"deprecated":false,"description":""},"Unload":{"value":4,"deprecated":false,"description":""}}},"RocketMode":{"enumName":"RocketMode","values":{"Chart":{"value":5,"deprecated":false,"description":""},"Discover":{"value":4,"deprecated":false,"description":""},"Invalid":{"value":0,"deprecated":false,"description":""},"Mine":{"value":2,"deprecated":false,"description":""},"None":{"value":1,"deprecated":false,"description":""},"Survey":{"value":3,"deprecated":false,"description":""}}},"SlotClass":{"enumName":"Class","values":{"AccessCard":{"value":22,"deprecated":false,"description":""},"Appliance":{"value":18,"deprecated":false,"description":""},"Back":{"value":3,"deprecated":false,"description":""},"Battery":{"value":14,"deprecated":false,"description":""},"Belt":{"value":16,"deprecated":false,"description":""},"Blocked":{"value":38,"deprecated":false,"description":""},"Bottle":{"value":25,"deprecated":false,"description":""},"Cartridge":{"value":21,"deprecated":false,"description":""},"Circuit":{"value":24,"deprecated":false,"description":""},"Circuitboard":{"value":7,"deprecated":false,"description":""},"CreditCard":{"value":28,"deprecated":false,"description":""},"DataDisk":{"value":8,"deprecated":false,"description":""},"DirtCanister":{"value":29,"deprecated":false,"description":""},"DrillHead":{"value":35,"deprecated":false,"description":""},"Egg":{"value":15,"deprecated":false,"description":""},"Entity":{"value":13,"deprecated":false,"description":""},"Flare":{"value":37,"deprecated":false,"description":""},"GasCanister":{"value":5,"deprecated":false,"description":""},"GasFilter":{"value":4,"deprecated":false,"description":""},"Glasses":{"value":27,"deprecated":false,"description":""},"Helmet":{"value":1,"deprecated":false,"description":""},"Ingot":{"value":19,"deprecated":false,"description":""},"LiquidBottle":{"value":32,"deprecated":false,"description":""},"LiquidCanister":{"value":31,"deprecated":false,"description":""},"Magazine":{"value":23,"deprecated":false,"description":""},"Motherboard":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Ore":{"value":10,"deprecated":false,"description":""},"Organ":{"value":9,"deprecated":false,"description":""},"Plant":{"value":11,"deprecated":false,"description":""},"ProgrammableChip":{"value":26,"deprecated":false,"description":""},"ScanningHead":{"value":36,"deprecated":false,"description":""},"SensorProcessingUnit":{"value":30,"deprecated":false,"description":""},"SoundCartridge":{"value":34,"deprecated":false,"description":""},"Suit":{"value":2,"deprecated":false,"description":""},"SuitMod":{"value":39,"deprecated":false,"description":""},"Tool":{"value":17,"deprecated":false,"description":""},"Torpedo":{"value":20,"deprecated":false,"description":""},"Uniform":{"value":12,"deprecated":false,"description":""},"Wreckage":{"value":33,"deprecated":false,"description":""}}},"SorterInstruction":{"enumName":"SorterInstruction","values":{"FilterPrefabHashEquals":{"value":1,"deprecated":false,"description":""},"FilterPrefabHashNotEquals":{"value":2,"deprecated":false,"description":""},"FilterQuantityCompare":{"value":5,"deprecated":false,"description":""},"FilterSlotTypeCompare":{"value":4,"deprecated":false,"description":""},"FilterSortingClassCompare":{"value":3,"deprecated":false,"description":""},"LimitNextExecutionByCount":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""}}},"SortingClass":{"enumName":"SortingClass","values":{"Appliances":{"value":6,"deprecated":false,"description":""},"Atmospherics":{"value":7,"deprecated":false,"description":""},"Clothing":{"value":5,"deprecated":false,"description":""},"Default":{"value":0,"deprecated":false,"description":""},"Food":{"value":4,"deprecated":false,"description":""},"Ices":{"value":10,"deprecated":false,"description":""},"Kits":{"value":1,"deprecated":false,"description":""},"Ores":{"value":9,"deprecated":false,"description":""},"Resources":{"value":3,"deprecated":false,"description":""},"Storage":{"value":8,"deprecated":false,"description":""},"Tools":{"value":2,"deprecated":false,"description":""}}},"Sound":{"enumName":"SoundAlert","values":{"AirlockCycling":{"value":22,"deprecated":false,"description":""},"Alarm1":{"value":45,"deprecated":false,"description":""},"Alarm10":{"value":12,"deprecated":false,"description":""},"Alarm11":{"value":13,"deprecated":false,"description":""},"Alarm12":{"value":14,"deprecated":false,"description":""},"Alarm2":{"value":1,"deprecated":false,"description":""},"Alarm3":{"value":2,"deprecated":false,"description":""},"Alarm4":{"value":3,"deprecated":false,"description":""},"Alarm5":{"value":4,"deprecated":false,"description":""},"Alarm6":{"value":5,"deprecated":false,"description":""},"Alarm7":{"value":6,"deprecated":false,"description":""},"Alarm8":{"value":10,"deprecated":false,"description":""},"Alarm9":{"value":11,"deprecated":false,"description":""},"Alert":{"value":17,"deprecated":false,"description":""},"Danger":{"value":15,"deprecated":false,"description":""},"Depressurising":{"value":20,"deprecated":false,"description":""},"FireFireFire":{"value":28,"deprecated":false,"description":""},"Five":{"value":33,"deprecated":false,"description":""},"Floor":{"value":34,"deprecated":false,"description":""},"Four":{"value":32,"deprecated":false,"description":""},"HaltWhoGoesThere":{"value":27,"deprecated":false,"description":""},"HighCarbonDioxide":{"value":44,"deprecated":false,"description":""},"IntruderAlert":{"value":19,"deprecated":false,"description":""},"LiftOff":{"value":36,"deprecated":false,"description":""},"MalfunctionDetected":{"value":26,"deprecated":false,"description":""},"Music1":{"value":7,"deprecated":false,"description":""},"Music2":{"value":8,"deprecated":false,"description":""},"Music3":{"value":9,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"One":{"value":29,"deprecated":false,"description":""},"PollutantsDetected":{"value":43,"deprecated":false,"description":""},"PowerLow":{"value":23,"deprecated":false,"description":""},"PressureHigh":{"value":39,"deprecated":false,"description":""},"PressureLow":{"value":40,"deprecated":false,"description":""},"Pressurising":{"value":21,"deprecated":false,"description":""},"RocketLaunching":{"value":35,"deprecated":false,"description":""},"StormIncoming":{"value":18,"deprecated":false,"description":""},"SystemFailure":{"value":24,"deprecated":false,"description":""},"TemperatureHigh":{"value":41,"deprecated":false,"description":""},"TemperatureLow":{"value":42,"deprecated":false,"description":""},"Three":{"value":31,"deprecated":false,"description":""},"TraderIncoming":{"value":37,"deprecated":false,"description":""},"TraderLanded":{"value":38,"deprecated":false,"description":""},"Two":{"value":30,"deprecated":false,"description":""},"Warning":{"value":16,"deprecated":false,"description":""},"Welcome":{"value":25,"deprecated":false,"description":""}}},"TransmitterMode":{"enumName":"LogicTransmitterMode","values":{"Active":{"value":1,"deprecated":false,"description":""},"Passive":{"value":0,"deprecated":false,"description":""}}},"Vent":{"enumName":"VentDirection","values":{"Inward":{"value":1,"deprecated":false,"description":""},"Outward":{"value":0,"deprecated":false,"description":""}}},"_unnamed":{"enumName":"ConditionOperation","values":{"Equals":{"value":0,"deprecated":false,"description":""},"Greater":{"value":1,"deprecated":false,"description":""},"Less":{"value":2,"deprecated":false,"description":""},"NotEquals":{"value":3,"deprecated":false,"description":""}}}}},"prefabsByHash":{"-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","-1884103228":"SeedBag_SugarCane","-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","-1351081801":"StructureLargeHangerDoor","-1348105509":"ItemGoldOre","-1344601965":"ItemCannedMushroom","-1339716113":"AppliancePaintMixer","-1339479035":"AccessCardGray","-1337091041":"StructureChuteDigitalValveRight","-1335056202":"ItemSugarCane","-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","-1108244510":"ItemPlainCake","-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","-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","-261575861":"ItemChocolateCake","-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","234601764":"ItemChocolateBar","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","457286516":"ItemCocoaPowder","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","680051921":"ItemCocoaTree","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","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","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","860793245":"ItemChocolateCerealBar","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","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","1139887531":"SeedBag_Cocoa","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","1604261183":"ItemJetpackTurbine","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","2111910840":"ItemSugar","2130739600":"DynamicMKIILiquidCanisterEmpty","2131916219":"ItemSpaceOre","2133035682":"ItemKitStandardChute","2134172356":"StructureInsulatedPipeStraight","2134647745":"ItemLeadIngot","2145068424":"ItemGasCanisterNitrogen"},"structures":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","Flag_ODA_10m","Flag_ODA_4m","Flag_ODA_6m","Flag_ODA_8m","H2Combustor","KitchenTableShort","KitchenTableSimpleShort","KitchenTableSimpleTall","KitchenTableTall","Landingpad_2x2CenterPiece01","Landingpad_BlankPiece","Landingpad_CenterPiece01","Landingpad_CrossPiece","Landingpad_DataConnectionPiece","Landingpad_DiagonalPiece01","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_GasCylinderTankPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_StraightPiece01","Landingpad_TaxiPieceCorner","Landingpad_TaxiPieceHold","Landingpad_TaxiPieceStraight","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","RailingElegant01","RailingElegant02","RailingIndustrial02","RespawnPoint","RespawnPointWallMounted","Rover_MkI_build_states","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureBlocker","StructureCableAnalysizer","StructureCableCorner","StructureCableCorner3","StructureCableCorner3Burnt","StructureCableCorner3HBurnt","StructureCableCorner4","StructureCableCorner4Burnt","StructureCableCorner4HBurnt","StructureCableCornerBurnt","StructureCableCornerH","StructureCableCornerH3","StructureCableCornerH4","StructureCableCornerHBurnt","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCableJunction","StructureCableJunction4","StructureCableJunction4Burnt","StructureCableJunction4HBurnt","StructureCableJunction5","StructureCableJunction5Burnt","StructureCableJunction6","StructureCableJunction6Burnt","StructureCableJunction6HBurnt","StructureCableJunctionBurnt","StructureCableJunctionH","StructureCableJunctionH4","StructureCableJunctionH5","StructureCableJunctionH5Burnt","StructureCableJunctionH6","StructureCableJunctionHBurnt","StructureCableStraight","StructureCableStraightBurnt","StructureCableStraightH","StructureCableStraightHBurnt","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteCorner","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteFlipFlopSplitter","StructureChuteInlet","StructureChuteJunction","StructureChuteOutlet","StructureChuteOverflow","StructureChuteStraight","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureChuteValve","StructureChuteWindow","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeCladdingAngled","StructureCompositeCladdingAngledCorner","StructureCompositeCladdingAngledCornerInner","StructureCompositeCladdingAngledCornerInnerLong","StructureCompositeCladdingAngledCornerInnerLongL","StructureCompositeCladdingAngledCornerInnerLongR","StructureCompositeCladdingAngledCornerLong","StructureCompositeCladdingAngledCornerLongR","StructureCompositeCladdingAngledLong","StructureCompositeCladdingCylindrical","StructureCompositeCladdingCylindricalPanel","StructureCompositeCladdingPanel","StructureCompositeCladdingRounded","StructureCompositeCladdingRoundedCorner","StructureCompositeCladdingRoundedCornerInner","StructureCompositeCladdingSpherical","StructureCompositeCladdingSphericalCap","StructureCompositeCladdingSphericalCorner","StructureCompositeDoor","StructureCompositeFloorGrating","StructureCompositeFloorGrating2","StructureCompositeFloorGrating3","StructureCompositeFloorGrating4","StructureCompositeFloorGratingOpen","StructureCompositeFloorGratingOpenRotated","StructureCompositeWall","StructureCompositeWall02","StructureCompositeWall03","StructureCompositeWall04","StructureCompositeWindow","StructureCompositeWindowIron","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCrateMount","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEngineMountTypeA1","StructureEvaporationChamber","StructureExpansionValve","StructureFairingTypeA1","StructureFairingTypeA2","StructureFairingTypeA3","StructureFiltration","StructureFlagSmall","StructureFlashingLight","StructureFlatBench","StructureFloorDrain","StructureFrame","StructureFrameCorner","StructureFrameCornerCut","StructureFrameIron","StructureFrameSide","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureFuselageTypeA1","StructureFuselageTypeA2","StructureFuselageTypeA4","StructureFuselageTypeC5","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTray","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInLineTankGas1x1","StructureInLineTankGas1x2","StructureInLineTankLiquid1x1","StructureInLineTankLiquid1x2","StructureInsulatedInLineTankGas1x1","StructureInsulatedInLineTankGas1x2","StructureInsulatedInLineTankLiquid1x1","StructureInsulatedInLineTankLiquid1x2","StructureInsulatedPipeCorner","StructureInsulatedPipeCrossJunction","StructureInsulatedPipeCrossJunction3","StructureInsulatedPipeCrossJunction4","StructureInsulatedPipeCrossJunction5","StructureInsulatedPipeCrossJunction6","StructureInsulatedPipeLiquidCorner","StructureInsulatedPipeLiquidCrossJunction","StructureInsulatedPipeLiquidCrossJunction4","StructureInsulatedPipeLiquidCrossJunction5","StructureInsulatedPipeLiquidCrossJunction6","StructureInsulatedPipeLiquidStraight","StructureInsulatedPipeLiquidTJunction","StructureInsulatedPipeStraight","StructureInsulatedPipeTJunction","StructureInsulatedTankConnector","StructureInsulatedTankConnectorLiquid","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLadder","StructureLadderEnd","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLaunchMount","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassiveVent","StructurePassiveVentInsulated","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePictureFrameThickLandscapeLarge","StructurePictureFrameThickLandscapeSmall","StructurePictureFrameThickMountLandscapeLarge","StructurePictureFrameThickMountLandscapeSmall","StructurePictureFrameThickMountPortraitLarge","StructurePictureFrameThickMountPortraitSmall","StructurePictureFrameThickPortraitLarge","StructurePictureFrameThickPortraitSmall","StructurePictureFrameThinLandscapeLarge","StructurePictureFrameThinLandscapeSmall","StructurePictureFrameThinMountLandscapeLarge","StructurePictureFrameThinMountLandscapeSmall","StructurePictureFrameThinMountPortraitLarge","StructurePictureFrameThinMountPortraitSmall","StructurePictureFrameThinPortraitLarge","StructurePictureFrameThinPortraitSmall","StructurePipeAnalysizer","StructurePipeCorner","StructurePipeCowl","StructurePipeCrossJunction","StructurePipeCrossJunction3","StructurePipeCrossJunction4","StructurePipeCrossJunction5","StructurePipeCrossJunction6","StructurePipeHeater","StructurePipeIgniter","StructurePipeInsulatedLiquidCrossJunction","StructurePipeLabel","StructurePipeLiquidCorner","StructurePipeLiquidCrossJunction","StructurePipeLiquidCrossJunction3","StructurePipeLiquidCrossJunction4","StructurePipeLiquidCrossJunction5","StructurePipeLiquidCrossJunction6","StructurePipeLiquidStraight","StructurePipeLiquidTJunction","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeOrgan","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePipeStraight","StructurePipeTJunction","StructurePlanter","StructurePlatformLadderOpen","StructurePlinth","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRailing","StructureRecycler","StructureRefrigeratedVendingMachine","StructureReinforcedCompositeWindow","StructureReinforcedCompositeWindowSteel","StructureReinforcedWallPaddedWindow","StructureReinforcedWallPaddedWindowThin","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTower","StructureRocketTransformerSmall","StructureRover","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelf","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSmallTableBacklessDouble","StructureSmallTableBacklessSingle","StructureSmallTableDinnerSingle","StructureSmallTableRectangleDouble","StructureSmallTableRectangleSingle","StructureSmallTableThickDouble","StructureSmallTableThickSingle","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStairs4x2","StructureStairs4x2RailL","StructureStairs4x2RailR","StructureStairs4x2Rails","StructureStairwellBackLeft","StructureStairwellBackPassthrough","StructureStairwellBackRight","StructureStairwellFrontLeft","StructureStairwellFrontPassthrough","StructureStairwellFrontRight","StructureStairwellNoDoors","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankConnector","StructureTankConnectorLiquid","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTorpedoRack","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallArch","StructureWallArchArrow","StructureWallArchCornerRound","StructureWallArchCornerSquare","StructureWallArchCornerTriangle","StructureWallArchPlating","StructureWallArchTwoTone","StructureWallCooler","StructureWallFlat","StructureWallFlatCornerRound","StructureWallFlatCornerSquare","StructureWallFlatCornerTriangle","StructureWallFlatCornerTriangleFlat","StructureWallGeometryCorner","StructureWallGeometryStreight","StructureWallGeometryT","StructureWallGeometryTMirrored","StructureWallHeater","StructureWallIron","StructureWallIron02","StructureWallIron03","StructureWallIron04","StructureWallLargePanel","StructureWallLargePanelArrow","StructureWallLight","StructureWallLightBattery","StructureWallPaddedArch","StructureWallPaddedArchCorner","StructureWallPaddedArchLightFittingTop","StructureWallPaddedArchLightsFittings","StructureWallPaddedCorner","StructureWallPaddedCornerThin","StructureWallPaddedNoBorder","StructureWallPaddedNoBorderCorner","StructureWallPaddedThinNoBorder","StructureWallPaddedThinNoBorderCorner","StructureWallPaddedWindow","StructureWallPaddedWindowThin","StructureWallPadding","StructureWallPaddingArchVent","StructureWallPaddingLightFitting","StructureWallPaddingThin","StructureWallPlating","StructureWallSmallPanelsAndHatch","StructureWallSmallPanelsArrow","StructureWallSmallPanelsMonoChrome","StructureWallSmallPanelsOpen","StructureWallSmallPanelsTwoTone","StructureWallVent","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"devices":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","H2Combustor","Landingpad_DataConnectionPiece","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureCableAnalysizer","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteInlet","StructureChuteOutlet","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeDoor","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEvaporationChamber","StructureExpansionValve","StructureFiltration","StructureFlashingLight","StructureFlatBench","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePipeAnalysizer","StructurePipeHeater","StructurePipeIgniter","StructurePipeLabel","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRecycler","StructureRefrigeratedVendingMachine","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTransformerSmall","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallCooler","StructureWallHeater","StructureWallLight","StructureWallLightBattery","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"items":["AccessCardBlack","AccessCardBlue","AccessCardBrown","AccessCardGray","AccessCardGreen","AccessCardKhaki","AccessCardOrange","AccessCardPink","AccessCardPurple","AccessCardRed","AccessCardWhite","AccessCardYellow","ApplianceChemistryStation","ApplianceDeskLampLeft","ApplianceDeskLampRight","ApplianceMicrowave","AppliancePackagingMachine","AppliancePaintMixer","AppliancePlantGeneticAnalyzer","AppliancePlantGeneticSplicer","AppliancePlantGeneticStabilizer","ApplianceReagentProcessor","ApplianceSeedTray","ApplianceTabletDock","AutolathePrinterMod","Battery_Wireless_cell","Battery_Wireless_cell_Big","CardboardBox","CartridgeAccessController","CartridgeAtmosAnalyser","CartridgeConfiguration","CartridgeElectronicReader","CartridgeGPS","CartridgeGuide","CartridgeMedicalAnalyser","CartridgeNetworkAnalyser","CartridgeOreScanner","CartridgeOreScannerColor","CartridgePlantAnalyser","CartridgeTracker","CircuitboardAdvAirlockControl","CircuitboardAirControl","CircuitboardAirlockControl","CircuitboardCameraDisplay","CircuitboardDoorControl","CircuitboardGasDisplay","CircuitboardGraphDisplay","CircuitboardHashDisplay","CircuitboardModeControl","CircuitboardPowerControl","CircuitboardShipDisplay","CircuitboardSolarControl","CrateMkII","DecayedFood","DynamicAirConditioner","DynamicCrate","DynamicGPR","DynamicGasCanisterAir","DynamicGasCanisterCarbonDioxide","DynamicGasCanisterEmpty","DynamicGasCanisterFuel","DynamicGasCanisterNitrogen","DynamicGasCanisterNitrousOxide","DynamicGasCanisterOxygen","DynamicGasCanisterPollutants","DynamicGasCanisterRocketFuel","DynamicGasCanisterVolatiles","DynamicGasCanisterWater","DynamicGasTankAdvanced","DynamicGasTankAdvancedOxygen","DynamicGenerator","DynamicHydroponics","DynamicLight","DynamicLiquidCanisterEmpty","DynamicMKIILiquidCanisterEmpty","DynamicMKIILiquidCanisterWater","DynamicScrubber","DynamicSkeleton","ElectronicPrinterMod","ElevatorCarrage","EntityChick","EntityChickenBrown","EntityChickenWhite","EntityRoosterBlack","EntityRoosterBrown","Fertilizer","FireArmSMG","FlareGun","Handgun","HandgunMagazine","HumanSkull","ImGuiCircuitboardAirlockControl","ItemActiveVent","ItemAdhesiveInsulation","ItemAdvancedTablet","ItemAlienMushroom","ItemAmmoBox","ItemAngleGrinder","ItemArcWelder","ItemAreaPowerControl","ItemAstroloyIngot","ItemAstroloySheets","ItemAuthoringTool","ItemAuthoringToolRocketNetwork","ItemBasketBall","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBatteryCharger","ItemBatteryChargerSmall","ItemBeacon","ItemBiomass","ItemBreadLoaf","ItemCableAnalyser","ItemCableCoil","ItemCableCoilHeavy","ItemCableFuse","ItemCannedCondensedMilk","ItemCannedEdamame","ItemCannedMushroom","ItemCannedPowderedEggs","ItemCannedRicePudding","ItemCerealBar","ItemCharcoal","ItemChemLightBlue","ItemChemLightGreen","ItemChemLightRed","ItemChemLightWhite","ItemChemLightYellow","ItemChocolateBar","ItemChocolateCake","ItemChocolateCerealBar","ItemCoalOre","ItemCobaltOre","ItemCocoaPowder","ItemCocoaTree","ItemCoffeeMug","ItemConstantanIngot","ItemCookedCondensedMilk","ItemCookedCorn","ItemCookedMushroom","ItemCookedPowderedEggs","ItemCookedPumpkin","ItemCookedRice","ItemCookedSoybean","ItemCookedTomato","ItemCopperIngot","ItemCopperOre","ItemCorn","ItemCornSoup","ItemCreditCard","ItemCropHay","ItemCrowbar","ItemDataDisk","ItemDirtCanister","ItemDirtyOre","ItemDisposableBatteryCharger","ItemDrill","ItemDuctTape","ItemDynamicAirCon","ItemDynamicScrubber","ItemEggCarton","ItemElectronicParts","ItemElectrumIngot","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyCrowbar","ItemEmergencyDrill","ItemEmergencyEvaSuit","ItemEmergencyPickaxe","ItemEmergencyScrewdriver","ItemEmergencySpaceHelmet","ItemEmergencyToolBelt","ItemEmergencyWireCutters","ItemEmergencyWrench","ItemEmptyCan","ItemEvaSuit","ItemExplosive","ItemFern","ItemFertilizedEgg","ItemFilterFern","ItemFlagSmall","ItemFlashingLight","ItemFlashlight","ItemFlour","ItemFlowerBlue","ItemFlowerGreen","ItemFlowerOrange","ItemFlowerRed","ItemFlowerYellow","ItemFrenchFries","ItemFries","ItemGasCanisterCarbonDioxide","ItemGasCanisterEmpty","ItemGasCanisterFuel","ItemGasCanisterNitrogen","ItemGasCanisterNitrousOxide","ItemGasCanisterOxygen","ItemGasCanisterPollutants","ItemGasCanisterSmart","ItemGasCanisterVolatiles","ItemGasCanisterWater","ItemGasFilterCarbonDioxide","ItemGasFilterCarbonDioxideInfinite","ItemGasFilterCarbonDioxideL","ItemGasFilterCarbonDioxideM","ItemGasFilterNitrogen","ItemGasFilterNitrogenInfinite","ItemGasFilterNitrogenL","ItemGasFilterNitrogenM","ItemGasFilterNitrousOxide","ItemGasFilterNitrousOxideInfinite","ItemGasFilterNitrousOxideL","ItemGasFilterNitrousOxideM","ItemGasFilterOxygen","ItemGasFilterOxygenInfinite","ItemGasFilterOxygenL","ItemGasFilterOxygenM","ItemGasFilterPollutants","ItemGasFilterPollutantsInfinite","ItemGasFilterPollutantsL","ItemGasFilterPollutantsM","ItemGasFilterVolatiles","ItemGasFilterVolatilesInfinite","ItemGasFilterVolatilesL","ItemGasFilterVolatilesM","ItemGasFilterWater","ItemGasFilterWaterInfinite","ItemGasFilterWaterL","ItemGasFilterWaterM","ItemGasSensor","ItemGasTankStorage","ItemGlassSheets","ItemGlasses","ItemGoldIngot","ItemGoldOre","ItemGrenade","ItemHEMDroidRepairKit","ItemHardBackpack","ItemHardJetpack","ItemHardMiningBackPack","ItemHardSuit","ItemHardsuitHelmet","ItemHastelloyIngot","ItemHat","ItemHighVolumeGasCanisterEmpty","ItemHorticultureBelt","ItemHydroponicTray","ItemIce","ItemIgniter","ItemInconelIngot","ItemInsulation","ItemIntegratedCircuit10","ItemInvarIngot","ItemIronFrames","ItemIronIngot","ItemIronOre","ItemIronSheets","ItemJetpackBasic","ItemJetpackTurbine","ItemKitAIMeE","ItemKitAccessBridge","ItemKitAdvancedComposter","ItemKitAdvancedFurnace","ItemKitAdvancedPackagingMachine","ItemKitAirlock","ItemKitAirlockGate","ItemKitArcFurnace","ItemKitAtmospherics","ItemKitAutoMinerSmall","ItemKitAutolathe","ItemKitAutomatedOven","ItemKitBasket","ItemKitBattery","ItemKitBatteryLarge","ItemKitBeacon","ItemKitBeds","ItemKitBlastDoor","ItemKitCentrifuge","ItemKitChairs","ItemKitChute","ItemKitChuteUmbilical","ItemKitCompositeCladding","ItemKitCompositeFloorGrating","ItemKitComputer","ItemKitConsole","ItemKitCrate","ItemKitCrateMkII","ItemKitCrateMount","ItemKitCryoTube","ItemKitDeepMiner","ItemKitDockingPort","ItemKitDoor","ItemKitDrinkingFountain","ItemKitDynamicCanister","ItemKitDynamicGasTankAdvanced","ItemKitDynamicGenerator","ItemKitDynamicHydroponics","ItemKitDynamicLiquidCanister","ItemKitDynamicMKIILiquidCanister","ItemKitElectricUmbilical","ItemKitElectronicsPrinter","ItemKitElevator","ItemKitEngineLarge","ItemKitEngineMedium","ItemKitEngineSmall","ItemKitEvaporationChamber","ItemKitFlagODA","ItemKitFridgeBig","ItemKitFridgeSmall","ItemKitFurnace","ItemKitFurniture","ItemKitFuselage","ItemKitGasGenerator","ItemKitGasUmbilical","ItemKitGovernedGasRocketEngine","ItemKitGroundTelescope","ItemKitGrowLight","ItemKitHarvie","ItemKitHeatExchanger","ItemKitHorizontalAutoMiner","ItemKitHydraulicPipeBender","ItemKitHydroponicAutomated","ItemKitHydroponicStation","ItemKitIceCrusher","ItemKitInsulatedLiquidPipe","ItemKitInsulatedPipe","ItemKitInsulatedPipeUtility","ItemKitInsulatedPipeUtilityLiquid","ItemKitInteriorDoors","ItemKitLadder","ItemKitLandingPadAtmos","ItemKitLandingPadBasic","ItemKitLandingPadWaypoint","ItemKitLargeDirectHeatExchanger","ItemKitLargeExtendableRadiator","ItemKitLargeSatelliteDish","ItemKitLaunchMount","ItemKitLaunchTower","ItemKitLiquidRegulator","ItemKitLiquidTank","ItemKitLiquidTankInsulated","ItemKitLiquidTurboVolumePump","ItemKitLiquidUmbilical","ItemKitLocker","ItemKitLogicCircuit","ItemKitLogicInputOutput","ItemKitLogicMemory","ItemKitLogicProcessor","ItemKitLogicSwitch","ItemKitLogicTransmitter","ItemKitMotherShipCore","ItemKitMusicMachines","ItemKitPassiveLargeRadiatorGas","ItemKitPassiveLargeRadiatorLiquid","ItemKitPassthroughHeatExchanger","ItemKitPictureFrame","ItemKitPipe","ItemKitPipeLiquid","ItemKitPipeOrgan","ItemKitPipeRadiator","ItemKitPipeRadiatorLiquid","ItemKitPipeUtility","ItemKitPipeUtilityLiquid","ItemKitPlanter","ItemKitPortablesConnector","ItemKitPowerTransmitter","ItemKitPowerTransmitterOmni","ItemKitPoweredVent","ItemKitPressureFedGasEngine","ItemKitPressureFedLiquidEngine","ItemKitPressurePlate","ItemKitPumpedLiquidEngine","ItemKitRailing","ItemKitRecycler","ItemKitRegulator","ItemKitReinforcedWindows","ItemKitResearchMachine","ItemKitRespawnPointWallMounted","ItemKitRocketAvionics","ItemKitRocketBattery","ItemKitRocketCargoStorage","ItemKitRocketCelestialTracker","ItemKitRocketCircuitHousing","ItemKitRocketDatalink","ItemKitRocketGasFuelTank","ItemKitRocketLiquidFuelTank","ItemKitRocketManufactory","ItemKitRocketMiner","ItemKitRocketScanner","ItemKitRocketTransformerSmall","ItemKitRoverFrame","ItemKitRoverMKI","ItemKitSDBHopper","ItemKitSatelliteDish","ItemKitSecurityPrinter","ItemKitSensor","ItemKitShower","ItemKitSign","ItemKitSleeper","ItemKitSmallDirectHeatExchanger","ItemKitSmallSatelliteDish","ItemKitSolarPanel","ItemKitSolarPanelBasic","ItemKitSolarPanelBasicReinforced","ItemKitSolarPanelReinforced","ItemKitSolidGenerator","ItemKitSorter","ItemKitSpeaker","ItemKitStacker","ItemKitStairs","ItemKitStairwell","ItemKitStandardChute","ItemKitStirlingEngine","ItemKitSuitStorage","ItemKitTables","ItemKitTank","ItemKitTankInsulated","ItemKitToolManufactory","ItemKitTransformer","ItemKitTransformerSmall","ItemKitTurbineGenerator","ItemKitTurboVolumePump","ItemKitUprightWindTurbine","ItemKitVendingMachine","ItemKitVendingMachineRefrigerated","ItemKitWall","ItemKitWallArch","ItemKitWallFlat","ItemKitWallGeometry","ItemKitWallIron","ItemKitWallPadded","ItemKitWaterBottleFiller","ItemKitWaterPurifier","ItemKitWeatherStation","ItemKitWindTurbine","ItemKitWindowShutter","ItemLabeller","ItemLaptop","ItemLeadIngot","ItemLeadOre","ItemLightSword","ItemLiquidCanisterEmpty","ItemLiquidCanisterSmart","ItemLiquidDrain","ItemLiquidPipeAnalyzer","ItemLiquidPipeHeater","ItemLiquidPipeValve","ItemLiquidPipeVolumePump","ItemLiquidTankStorage","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIICrowbar","ItemMKIIDrill","ItemMKIIDuctTape","ItemMKIIMiningDrill","ItemMKIIScrewdriver","ItemMKIIWireCutters","ItemMKIIWrench","ItemMarineBodyArmor","ItemMarineHelmet","ItemMilk","ItemMiningBackPack","ItemMiningBelt","ItemMiningBeltMKII","ItemMiningCharge","ItemMiningDrill","ItemMiningDrillHeavy","ItemMiningDrillPneumatic","ItemMkIIToolbelt","ItemMuffin","ItemMushroom","ItemNVG","ItemNickelIngot","ItemNickelOre","ItemNitrice","ItemOxite","ItemPassiveVent","ItemPassiveVentInsulated","ItemPeaceLily","ItemPickaxe","ItemPillHeal","ItemPillStun","ItemPipeAnalyizer","ItemPipeCowl","ItemPipeDigitalValve","ItemPipeGasMixer","ItemPipeHeater","ItemPipeIgniter","ItemPipeLabel","ItemPipeLiquidRadiator","ItemPipeMeter","ItemPipeRadiator","ItemPipeValve","ItemPipeVolumePump","ItemPlainCake","ItemPlantEndothermic_Creative","ItemPlantEndothermic_Genepool1","ItemPlantEndothermic_Genepool2","ItemPlantSampler","ItemPlantSwitchGrass","ItemPlantThermogenic_Creative","ItemPlantThermogenic_Genepool1","ItemPlantThermogenic_Genepool2","ItemPlasticSheets","ItemPotato","ItemPotatoBaked","ItemPowerConnector","ItemPumpkin","ItemPumpkinPie","ItemPumpkinSoup","ItemPureIce","ItemPureIceCarbonDioxide","ItemPureIceHydrogen","ItemPureIceLiquidCarbonDioxide","ItemPureIceLiquidHydrogen","ItemPureIceLiquidNitrogen","ItemPureIceLiquidNitrous","ItemPureIceLiquidOxygen","ItemPureIceLiquidPollutant","ItemPureIceLiquidVolatiles","ItemPureIceNitrogen","ItemPureIceNitrous","ItemPureIceOxygen","ItemPureIcePollutant","ItemPureIcePollutedWater","ItemPureIceSteam","ItemPureIceVolatiles","ItemRTG","ItemRTGSurvival","ItemReagentMix","ItemRemoteDetonator","ItemReusableFireExtinguisher","ItemRice","ItemRoadFlare","ItemRocketMiningDrillHead","ItemRocketMiningDrillHeadDurable","ItemRocketMiningDrillHeadHighSpeedIce","ItemRocketMiningDrillHeadHighSpeedMineral","ItemRocketMiningDrillHeadIce","ItemRocketMiningDrillHeadLongTerm","ItemRocketMiningDrillHeadMineral","ItemRocketScanningHead","ItemScanner","ItemScrewdriver","ItemSecurityCamera","ItemSensorLenses","ItemSensorProcessingUnitCelestialScanner","ItemSensorProcessingUnitMesonScanner","ItemSensorProcessingUnitOreScanner","ItemSiliconIngot","ItemSiliconOre","ItemSilverIngot","ItemSilverOre","ItemSolderIngot","ItemSolidFuel","ItemSoundCartridgeBass","ItemSoundCartridgeDrums","ItemSoundCartridgeLeads","ItemSoundCartridgeSynth","ItemSoyOil","ItemSoybean","ItemSpaceCleaner","ItemSpaceHelmet","ItemSpaceIce","ItemSpaceOre","ItemSpacepack","ItemSprayCanBlack","ItemSprayCanBlue","ItemSprayCanBrown","ItemSprayCanGreen","ItemSprayCanGrey","ItemSprayCanKhaki","ItemSprayCanOrange","ItemSprayCanPink","ItemSprayCanPurple","ItemSprayCanRed","ItemSprayCanWhite","ItemSprayCanYellow","ItemSprayGun","ItemSteelFrames","ItemSteelIngot","ItemSteelSheets","ItemStelliteGlassSheets","ItemStelliteIngot","ItemSugar","ItemSugarCane","ItemSuitModCryogenicUpgrade","ItemTablet","ItemTerrainManipulator","ItemTomato","ItemTomatoSoup","ItemToolBelt","ItemTropicalPlant","ItemUraniumOre","ItemVolatiles","ItemWallCooler","ItemWallHeater","ItemWallLight","ItemWaspaloyIngot","ItemWaterBottle","ItemWaterPipeDigitalValve","ItemWaterPipeMeter","ItemWaterWallCooler","ItemWearLamp","ItemWeldingTorch","ItemWheat","ItemWireCutters","ItemWirelessBatteryCellExtraLarge","ItemWreckageAirConditioner1","ItemWreckageAirConditioner2","ItemWreckageHydroponicsTray1","ItemWreckageLargeExtendableRadiator01","ItemWreckageStructureRTG1","ItemWreckageStructureWeatherStation001","ItemWreckageStructureWeatherStation002","ItemWreckageStructureWeatherStation003","ItemWreckageStructureWeatherStation004","ItemWreckageStructureWeatherStation005","ItemWreckageStructureWeatherStation006","ItemWreckageStructureWeatherStation007","ItemWreckageStructureWeatherStation008","ItemWreckageTurbineGenerator1","ItemWreckageTurbineGenerator2","ItemWreckageTurbineGenerator3","ItemWreckageWallCooler1","ItemWreckageWallCooler2","ItemWrench","KitSDBSilo","KitStructureCombustionCentrifuge","Lander","Meteorite","MonsterEgg","MotherboardComms","MotherboardLogic","MotherboardMissionControl","MotherboardProgrammableChip","MotherboardRockets","MotherboardSorter","MothershipCore","NpcChick","NpcChicken","PipeBenderMod","PortableComposter","PortableSolarPanel","ReagentColorBlue","ReagentColorGreen","ReagentColorOrange","ReagentColorRed","ReagentColorYellow","Robot","RoverCargo","Rover_MkI","SMGMagazine","SeedBag_Cocoa","SeedBag_Corn","SeedBag_Fern","SeedBag_Mushroom","SeedBag_Potato","SeedBag_Pumpkin","SeedBag_Rice","SeedBag_Soybean","SeedBag_SugarCane","SeedBag_Switchgrass","SeedBag_Tomato","SeedBag_Wheet","SpaceShuttle","ToolPrinterMod","ToyLuna","UniformCommander","UniformMarine","UniformOrangeJumpSuit","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy","WeaponTorpedo"],"logicableItems":["Battery_Wireless_cell","Battery_Wireless_cell_Big","DynamicGPR","DynamicLight","ItemAdvancedTablet","ItemAngleGrinder","ItemArcWelder","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBeacon","ItemDrill","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyDrill","ItemEmergencySpaceHelmet","ItemFlashlight","ItemHardBackpack","ItemHardJetpack","ItemHardSuit","ItemHardsuitHelmet","ItemIntegratedCircuit10","ItemJetpackBasic","ItemJetpackTurbine","ItemLabeller","ItemLaptop","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIIDrill","ItemMKIIMiningDrill","ItemMiningBeltMKII","ItemMiningDrill","ItemMiningDrillHeavy","ItemMkIIToolbelt","ItemNVG","ItemPlantSampler","ItemRemoteDetonator","ItemSensorLenses","ItemSpaceHelmet","ItemSpacepack","ItemTablet","ItemTerrainManipulator","ItemWearLamp","ItemWirelessBatteryCellExtraLarge","PortableSolarPanel","Robot","RoverCargo","Rover_MkI","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy"]} \ No newline at end of file diff --git a/ic10emu/src/device.rs b/ic10emu/src/device.rs index 4c5bba1..87ac742 100644 --- a/ic10emu/src/device.rs +++ b/ic10emu/src/device.rs @@ -3,8 +3,8 @@ use crate::{ interpreter::ICState, network::{CableConnectionType, Connection}, vm::enums::{ - script_enums::{LogicReagentMode as ReagentMode, LogicSlotType, LogicType}, basic_enums::{Class as SlotClass, SortingClass}, + script_enums::{LogicReagentMode as ReagentMode, LogicSlotType, LogicType}, }, vm::VM, }; diff --git a/ic10emu/src/errors.rs b/ic10emu/src/errors.rs index 4cd5573..c9d3a8e 100644 --- a/ic10emu/src/errors.rs +++ b/ic10emu/src/errors.rs @@ -101,7 +101,7 @@ pub enum ICError { #[error("duplicate label {0}")] DuplicateLabel(String), #[error("instruction pointer out of range: '{0}'")] - InstructionPointerOutOfRange(u32), + InstructionPointerOutOfRange(usize), #[error("register pointer out of range: '{0}'")] RegisterIndexOutOfRange(f64), #[error("device pointer out of range: '{0}'")] diff --git a/ic10emu/src/grammar.rs b/ic10emu/src/grammar.rs index 8c51bd7..b2daa49 100644 --- a/ic10emu/src/grammar.rs +++ b/ic10emu/src/grammar.rs @@ -721,7 +721,7 @@ mod tests { static INIT: std::sync::Once = std::sync::Once::new(); - fn setup() { + fn setup() { INIT.call_once(|| { let _ = color_eyre::install(); }) diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index 6749348..181fe6d 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -459,6 +459,7 @@ impl IC { Nop => Ok(()), Hcf => Ok(()), // TODO Clr => Ok(()), // TODO + Clrd => Ok(()), // TODO Label => Ok(()), // NOP Sleep => match &operands[..] { [a] => { @@ -2515,7 +2516,7 @@ mod tests { static INIT: std::sync::Once = std::sync::Once::new(); - fn setup() { + fn setup() { INIT.call_once(|| { let _ = color_eyre::install(); }) diff --git a/ic10emu/src/vm/enums/basic_enums.rs b/ic10emu/src/vm/enums/basic_enums.rs index 610c7d8..2a6f66f 100644 --- a/ic10emu/src/vm/enums/basic_enums.rs +++ b/ic10emu/src/vm/enums/basic_enums.rs @@ -282,42 +282,6 @@ pub enum GasType { )] #[strum(use_phf)] #[repr(u8)] -pub enum RocketMode { - #[strum(serialize = "Invalid", props(docs = r#""#, value = "0"))] - Invalid = 0u8, - #[strum(serialize = "None", props(docs = r#""#, value = "1"))] - #[default] - None = 1u8, - #[strum(serialize = "Mine", props(docs = r#""#, value = "2"))] - Mine = 2u8, - #[strum(serialize = "Survey", props(docs = r#""#, value = "3"))] - Survey = 3u8, - #[strum(serialize = "Discover", props(docs = r#""#, value = "4"))] - Discover = 4u8, - #[strum(serialize = "Chart", props(docs = r#""#, value = "5"))] - Chart = 5u8, -} -#[derive( - Debug, - Default, - Display, - Clone, - Copy, - PartialEq, - Eq, - PartialOrd, - Ord, - Hash, - EnumString, - AsRefStr, - EnumProperty, - EnumIter, - FromRepr, - Serialize, - Deserialize, -)] -#[strum(use_phf)] -#[repr(u8)] pub enum LogicSlotType { #[strum(serialize = "None", props(docs = r#"No description"#, value = "0"))] #[default] @@ -2502,6 +2466,14 @@ pub enum LogicType { ) )] BestContactFilter = 267u16, + #[strum( + serialize = "NameHash", + props( + docs = r#"Provides the hash value for the name of the object as a 32 bit integer."#, + value = "268" + ) + )] + NameHash = 268u16, } #[derive( Debug, @@ -2556,6 +2528,50 @@ pub enum PowerMode { )] #[strum(use_phf)] #[repr(u8)] +pub enum PrinterInstruction { + #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + #[default] + None = 0u8, + #[strum(serialize = "StackPointer", props(docs = r#""#, value = "1"))] + StackPointer = 1u8, + #[strum(serialize = "ExecuteRecipe", props(docs = r#""#, value = "2"))] + ExecuteRecipe = 2u8, + #[strum(serialize = "WaitUntilNextValid", props(docs = r#""#, value = "3"))] + WaitUntilNextValid = 3u8, + #[strum(serialize = "JumpIfNextInvalid", props(docs = r#""#, value = "4"))] + JumpIfNextInvalid = 4u8, + #[strum(serialize = "JumpToAddress", props(docs = r#""#, value = "5"))] + JumpToAddress = 5u8, + #[strum(serialize = "DeviceSetLock", props(docs = r#""#, value = "6"))] + DeviceSetLock = 6u8, + #[strum(serialize = "EjectReagent", props(docs = r#""#, value = "7"))] + EjectReagent = 7u8, + #[strum(serialize = "EjectAllReagents", props(docs = r#""#, value = "8"))] + EjectAllReagents = 8u8, + #[strum(serialize = "MissingRecipeReagent", props(docs = r#""#, value = "9"))] + MissingRecipeReagent = 9u8, +} +#[derive( + Debug, + Default, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] pub enum ReEntryProfile { #[strum(serialize = "None", props(docs = r#""#, value = "0"))] #[default] @@ -2628,6 +2644,42 @@ pub enum RobotMode { )] #[strum(use_phf)] #[repr(u8)] +pub enum RocketMode { + #[strum(serialize = "Invalid", props(docs = r#""#, value = "0"))] + Invalid = 0u8, + #[strum(serialize = "None", props(docs = r#""#, value = "1"))] + #[default] + None = 1u8, + #[strum(serialize = "Mine", props(docs = r#""#, value = "2"))] + Mine = 2u8, + #[strum(serialize = "Survey", props(docs = r#""#, value = "3"))] + Survey = 3u8, + #[strum(serialize = "Discover", props(docs = r#""#, value = "4"))] + Discover = 4u8, + #[strum(serialize = "Chart", props(docs = r#""#, value = "5"))] + Chart = 5u8, +} +#[derive( + Debug, + Default, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[strum(use_phf)] +#[repr(u8)] pub enum Class { #[strum(serialize = "None", props(docs = r#""#, value = "0"))] #[default] @@ -3010,12 +3062,13 @@ pub enum BasicEnum { ElevatorMode(ElevatorMode), EntityState(EntityState), GasType(GasType), - GasTypeRocketMode(RocketMode), LogicSlotType(LogicSlotType), LogicType(LogicType), PowerMode(PowerMode), + PrinterInstruction(PrinterInstruction), ReEntryProfile(ReEntryProfile), RobotMode(RobotMode), + RocketMode(RocketMode), SlotClass(Class), SorterInstruction(SorterInstruction), SortingClass(SortingClass), @@ -3034,12 +3087,13 @@ impl BasicEnum { Self::ElevatorMode(enm) => *enm as u32, Self::EntityState(enm) => *enm as u32, Self::GasType(enm) => *enm as u32, - Self::GasTypeRocketMode(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, @@ -3058,12 +3112,13 @@ impl BasicEnum { Self::ElevatorMode(enm) => enm.get_str(prop), Self::EntityState(enm) => enm.get_str(prop), Self::GasType(enm) => enm.get_str(prop), - Self::GasTypeRocketMode(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), @@ -3083,12 +3138,13 @@ impl BasicEnum { .chain(ElevatorMode::iter().map(|enm| Self::ElevatorMode(enm))) .chain(EntityState::iter().map(|enm| Self::EntityState(enm))) .chain(GasType::iter().map(|enm| Self::GasType(enm))) - .chain(RocketMode::iter().map(|enm| Self::GasTypeRocketMode(enm))) .chain(LogicSlotType::iter().map(|enm| Self::LogicSlotType(enm))) .chain(LogicType::iter().map(|enm| Self::LogicType(enm))) .chain(PowerMode::iter().map(|enm| Self::PowerMode(enm))) + .chain(PrinterInstruction::iter().map(|enm| Self::PrinterInstruction(enm))) .chain(ReEntryProfile::iter().map(|enm| Self::ReEntryProfile(enm))) .chain(RobotMode::iter().map(|enm| Self::RobotMode(enm))) + .chain(RocketMode::iter().map(|enm| Self::RocketMode(enm))) .chain(Class::iter().map(|enm| Self::SlotClass(enm))) .chain(SorterInstruction::iter().map(|enm| Self::SorterInstruction(enm))) .chain(SortingClass::iter().map(|enm| Self::SortingClass(enm))) @@ -3155,12 +3211,6 @@ impl std::str::FromStr for BasicEnum { "gastype.undefined" => Ok(Self::GasType(GasType::Undefined)), "gastype.volatiles" => Ok(Self::GasType(GasType::Volatiles)), "gastype.water" => Ok(Self::GasType(GasType::Water)), - "gastype_rocketmode.chart" => Ok(Self::GasTypeRocketMode(RocketMode::Chart)), - "gastype_rocketmode.discover" => Ok(Self::GasTypeRocketMode(RocketMode::Discover)), - "gastype_rocketmode.invalid" => Ok(Self::GasTypeRocketMode(RocketMode::Invalid)), - "gastype_rocketmode.mine" => Ok(Self::GasTypeRocketMode(RocketMode::Mine)), - "gastype_rocketmode.none" => Ok(Self::GasTypeRocketMode(RocketMode::None)), - "gastype_rocketmode.survey" => Ok(Self::GasTypeRocketMode(RocketMode::Survey)), "logicslottype.charge" => Ok(Self::LogicSlotType(LogicSlotType::Charge)), "logicslottype.chargeratio" => Ok(Self::LogicSlotType(LogicSlotType::ChargeRatio)), "logicslottype.class" => Ok(Self::LogicSlotType(LogicSlotType::Class)), @@ -3281,6 +3331,7 @@ impl std::str::FromStr for BasicEnum { 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)) @@ -3566,6 +3617,34 @@ impl std::str::FromStr for BasicEnum { "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.max" => Ok(Self::ReEntryProfile(ReEntryProfile::Max)), "reentryprofile.medium" => Ok(Self::ReEntryProfile(ReEntryProfile::Medium)), @@ -3578,6 +3657,12 @@ impl std::str::FromStr for BasicEnum { "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)), @@ -3721,12 +3806,13 @@ impl std::fmt::Display for BasicEnum { Self::ElevatorMode(enm) => write!(f, "ElevatorMode.{}", enm), Self::EntityState(enm) => write!(f, "EntityState.{}", enm), Self::GasType(enm) => write!(f, "GasType.{}", enm), - Self::GasTypeRocketMode(enm) => write!(f, "GasType_RocketMode.{}", 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), diff --git a/ic10emu/src/vm/enums/prefabs.rs b/ic10emu/src/vm/enums/prefabs.rs index 57788fb..3fbe1e2 100644 --- a/ic10emu/src/vm/enums/prefabs.rs +++ b/ic10emu/src/vm/enums/prefabs.rs @@ -709,6 +709,11 @@ The Norsec-designed K-cops 10-10 so ) )] ItemWrench = -1886261558i32, + #[strum( + serialize = "SeedBag_SugarCane", + props(name = r#"Sugarcane Seeds"#, desc = r#""#, value = "-1884103228") + )] + SeedBagSugarCane = -1884103228i32, #[strum( serialize = "ItemSoundCartridgeBass", props(name = r#"Sound Cartridge Bass"#, desc = r#""#, value = "-1883441704") @@ -1986,15 +1991,6 @@ Able to store up to 9000001 watts of power, there are no practical limits to its props(name = r#"Kit (Tables)"#, desc = r#""#, value = "-1361598922") )] ItemKitTables = -1361598922i32, - #[strum( - serialize = "ItemResearchCapsuleGreen", - props( - name = r#"Research Capsule Green"#, - desc = r#""#, - value = "-1352732550" - ) - )] - ItemResearchCapsuleGreen = -1352732550i32, #[strum( serialize = "StructureLargeHangerDoor", props( @@ -2041,6 +2037,11 @@ Able to store up to 9000001 watts of power, there are no practical limits to its ) )] StructureChuteDigitalValveRight = -1337091041i32, + #[strum( + serialize = "ItemSugarCane", + props(name = r#"Sugarcane"#, desc = r#""#, value = "-1335056202") + )] + ItemSugarCane = -1335056202i32, #[strum( serialize = "ItemKitSmallDirectHeatExchanger", props( @@ -2635,6 +2636,11 @@ Just bolt it to a Powered BenchRecurso-designed systems props(name = r#"Kit (Liquid Tank)"#, desc = r#""#, value = "-799849305") )] ItemKitLiquidTank = -799849305i32, - #[strum( - serialize = "StructureResearchMachine", - props(name = r#"Research Machine"#, desc = r#""#, value = "-796627526") - )] - StructureResearchMachine = -796627526i32, #[strum( serialize = "StructureCompositeDoor", props( @@ -4448,6 +4449,11 @@ Be there, even when you're not."#, ) )] StructureLiquidPipeHeater = -287495560i32, + #[strum( + serialize = "ItemChocolateCake", + props(name = r#"Chocolate Cake"#, desc = r#""#, value = "-261575861") + )] + ItemChocolateCake = -261575861i32, #[strum( serialize = "StructureStirlingEngine", props( @@ -5599,6 +5605,11 @@ You can refill a Liquid Canister (W ) )] KitStructureCombustionCentrifuge = 231903234i32, + #[strum( + serialize = "ItemChocolateBar", + props(name = r#"Chocolate Bar"#, desc = r#""#, value = "234601764") + )] + ItemChocolateBar = 234601764i32, #[strum( serialize = "ItemExplosive", props(name = r#"Remote Explosive"#, desc = r#""#, value = "235361649") @@ -6208,6 +6219,11 @@ Fertilizer is produced at a 1:3 ratio of fertilizer to ingredients. The fertiliz props(name = r#"Kit (Insulated Pipe)"#, desc = r#""#, value = "452636699") )] ItemKitInsulatedPipe = 452636699i32, + #[strum( + serialize = "ItemCocoaPowder", + props(name = r#"Cocoa Powder"#, desc = r#""#, value = "457286516") + )] + ItemCocoaPowder = 457286516i32, #[strum( serialize = "AccessCardPurple", props(name = r#"Access Card (Purple)"#, desc = r#""#, value = "459843265") @@ -6631,6 +6647,11 @@ Normal coil has a maximum wattage of 5kW. For higher-current applications, use < props(name = r#"Remote Detonator"#, desc = r#""#, value = "678483886") )] ItemRemoteDetonator = 678483886i32, + #[strum( + serialize = "ItemCocoaTree", + props(name = r#"Cocoa"#, desc = r#""#, value = "680051921") + )] + ItemCocoaTree = 680051921i32, #[strum( serialize = "ItemKitAirlockGate", props(name = r#"Kit (Hangar Door)"#, desc = r#""#, value = "682546947") @@ -6743,11 +6764,6 @@ Output = 1 exporting items inside and eventually the main item."#, props(name = r#"Kit (Railing)"#, desc = r#""#, value = "750176282") )] ItemKitRailing = 750176282i32, - #[strum( - serialize = "ItemResearchCapsuleYellow", - props(name = r#"Research Capsule Yellow"#, desc = r#""#, value = "750952701") - )] - ItemResearchCapsuleYellow = 750952701i32, #[strum( serialize = "StructureFridgeSmall", props( @@ -6879,11 +6895,6 @@ A completed console displays all devices connected to the current power network. props(name = r#"Landingpad Gas Input"#, desc = r#""#, value = "817945707") )] LandingpadGasConnectorInwardPiece = 817945707i32, - #[strum( - serialize = "ItemResearchCapsule", - props(name = r#"Research Capsule Blue"#, desc = r#""#, value = "819096942") - )] - ItemResearchCapsule = 819096942i32, #[strum( serialize = "StructureElevatorShaft", props(name = r#"Elevator Shaft (Cabled)"#, desc = r#""#, value = "826144419") @@ -6993,6 +7004,11 @@ Note that transformers also operate as data isolators, preventing data flowing i ) )] ItemCrowbar = 856108234i32, + #[strum( + serialize = "ItemChocolateCerealBar", + props(name = r#"Chocolate Cereal Bar"#, desc = r#""#, value = "860793245") + )] + ItemChocolateCerealBar = 860793245i32, #[strum( serialize = "Rover_MkI_build_states", props(name = r#"Rover MKI"#, desc = r#""#, value = "861674123") @@ -7218,11 +7234,6 @@ As the N Flow-P is a passive system, it equalizes pressure across the entire of ) )] StructurePictureFrameThickMountLandscapeLarge = 950004659i32, - #[strum( - serialize = "ItemResearchCapsuleRed", - props(name = r#"Research Capsule Red"#, desc = r#""#, value = "954947943") - )] - ItemResearchCapsuleRed = 954947943i32, #[strum( serialize = "StructureTankSmallAir", props(name = r#"Small Tank (Air)"#, desc = r#""#, value = "955744474") @@ -7643,6 +7654,11 @@ Normal coil has a maximum wattage of 5kW. For higher-current applications, use < ) )] ItemPillHeal = 1118069417i32, + #[strum( + serialize = "SeedBag_Cocoa", + props(name = r#"Cocoa Seeds"#, desc = r#""#, value = "1139887531") + )] + SeedBagCocoa = 1139887531i32, #[strum( serialize = "StructureMediumRocketLiquidFuelTank", props( @@ -8663,6 +8679,11 @@ The ProKompile can stack a wide variety of things such as ic.execute_brnez(vm, &operands[0], &operands[1]), Self::Ceil => ic.execute_ceil(vm, &operands[0], &operands[1]), Self::Clr => ic.execute_clr(vm, &operands[0]), + Self::Clrd => ic.execute_clrd(vm, &operands[0]), Self::Cos => ic.execute_cos(vm, &operands[0], &operands[1]), Self::Define => ic.execute_define(vm, &operands[0], &operands[1]), Self::Div => ic.execute_div(vm, &operands[0], &operands[1], &operands[2]), diff --git a/ic10emu/src/vm/instructions/operands.rs b/ic10emu/src/vm/instructions/operands.rs index 4f10033..9da8199 100644 --- a/ic10emu/src/vm/instructions/operands.rs +++ b/ic10emu/src/vm/instructions/operands.rs @@ -7,6 +7,8 @@ use crate::vm::instructions::enums::InstructionOp; use serde_derive::{Deserialize, Serialize}; use strum::EnumProperty; +use super::traits::IntegratedCircuit; + #[derive(PartialEq, Eq, Debug, Clone, Copy, Serialize, Deserialize)] pub enum Device { Db, @@ -57,9 +59,9 @@ pub enum Operand { } impl Operand { - pub fn as_value( + pub fn as_value( &self, - ic: &interpreter::IC, + ic: &IC, inst: InstructionOp, index: u32, ) -> Result { @@ -121,9 +123,9 @@ impl Operand { } } - pub fn as_value_i64( + pub fn as_value_i64( &self, - ic: &interpreter::IC, + ic: &IC, signed: bool, inst: InstructionOp, index: u32, @@ -142,9 +144,9 @@ impl Operand { } } } - pub fn as_value_i32( + pub fn as_value_i32( &self, - ic: &interpreter::IC, + ic: &IC, signed: bool, inst: InstructionOp, index: u32, @@ -153,9 +155,9 @@ impl Operand { Self::Number(num) => Ok(num.value_i64(signed) as i32), _ => { let val = self.as_value(ic, inst, index)?; - if val < -2147483648.0 { + if val < i32::MIN as f64 { Err(ICError::ShiftUnderflowI32) - } else if val <= 2147483647.0 { + } else if val <= i32::MAX as f64 { Ok(val as i32) } else { Err(ICError::ShiftOverflowI32) @@ -164,9 +166,9 @@ impl Operand { } } - pub fn as_register( + pub fn as_register( &self, - ic: &interpreter::IC, + ic: &IC, inst: InstructionOp, index: u32, ) -> Result { @@ -181,9 +183,9 @@ impl Operand { } } - pub fn as_device( + pub fn as_device( &self, - ic: &interpreter::IC, + ic: &IC, inst: InstructionOp, index: u32, ) -> Result<(Option, Option), ICError> { @@ -222,9 +224,9 @@ impl Operand { } } - pub fn as_logic_type( + pub fn as_logic_type( &self, - ic: &interpreter::IC, + ic: &IC, inst: InstructionOp, index: u32, ) -> Result { @@ -237,9 +239,9 @@ impl Operand { } } - pub fn as_slot_logic_type( + pub fn as_slot_logic_type( &self, - ic: &interpreter::IC, + ic: &IC, inst: InstructionOp, index: u32, ) -> Result { @@ -252,9 +254,9 @@ impl Operand { } } - pub fn as_batch_mode( + pub fn as_batch_mode( &self, - ic: &interpreter::IC, + ic: &IC, inst: InstructionOp, index: u32, ) -> Result { @@ -267,9 +269,9 @@ impl Operand { } } - pub fn as_reagent_mode( + pub fn as_reagent_mode( &self, - ic: &interpreter::IC, + ic: &IC, inst: InstructionOp, index: u32, ) -> Result { @@ -282,7 +284,7 @@ impl Operand { } } - pub fn translate_alias(&self, ic: &interpreter::IC) -> Self { + pub fn translate_alias(&self, ic: &IC) -> Self { match &self { Operand::Identifier(id) | Operand::Type { identifier: id, .. } => { if let Some(alias) = ic.aliases.borrow().get(&id.name) { diff --git a/ic10emu/src/vm/instructions/traits.rs b/ic10emu/src/vm/instructions/traits.rs index c31e4eb..bb9fe67 100644 --- a/ic10emu/src/vm/instructions/traits.rs +++ b/ic10emu/src/vm/instructions/traits.rs @@ -13,19 +13,27 @@ use crate::errors::ICError; use crate::vm::object::traits::{Logicable, MemoryWritable, SourceCode}; use std::collections::BTreeMap; pub trait IntegratedCircuit: Logicable + MemoryWritable + SourceCode { - fn get_instruciton_pointer(&self) -> usize; - fn set_next_instruction(&mut self, next_instruction: usize); + fn get_instruction_pointer(&self) -> f64; + fn set_next_instruction(&mut self, next_instruction: f64); + fn set_next_instruction_relative(&mut self, offset: f64) { + self.set_next_instruction(self.get_instruction_pointer() + offset); + } fn reset(&mut self); fn get_real_target(&self, indirection: u32, target: u32) -> Result; fn get_register(&self, indirection: u32, target: u32) -> Result; fn set_register(&mut self, indirection: u32, target: u32, val: f64) -> Result; fn set_return_address(&mut self, addr: f64); + fn al(&mut self) { + self.set_return_address(self.get_instruction_pointer() + 1.0); + } fn push_stack(&mut self, val: f64) -> Result; fn pop_stack(&mut self) -> Result; fn peek_stack(&self) -> Result; + fn get_stack(&self, addr: f64) -> Result; + fn put_stack(&self, addr: f64, val: f64) -> Result; fn get_aliases(&self) -> &BTreeMap; fn get_defines(&self) -> &BTreeMap; - fn get_lables(&self) -> &BTreeMap; + fn get_labels(&self) -> &BTreeMap; } pub trait AbsInstruction: IntegratedCircuit { /// abs r? a(r?|num) @@ -60,7 +68,7 @@ pub trait AliasInstruction: IntegratedCircuit { fn execute_alias( &mut self, vm: &crate::vm::VM, - str: &crate::vm::instructions::operands::Operand, + string: &crate::vm::instructions::operands::Operand, r: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; } @@ -659,6 +667,14 @@ pub trait ClrInstruction: IntegratedCircuit { d: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; } +pub trait ClrdInstruction: IntegratedCircuit { + /// clrd id(r?|num) + fn execute_clrd( + &mut self, + vm: &crate::vm::VM, + id: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError>; +} pub trait CosInstruction: IntegratedCircuit { /// cos r? a(r?|num) fn execute_cos( @@ -673,7 +689,7 @@ pub trait DefineInstruction: IntegratedCircuit { fn execute_define( &mut self, vm: &crate::vm::VM, - str: &crate::vm::instructions::operands::Operand, + string: &crate::vm::instructions::operands::Operand, num: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; } @@ -769,7 +785,7 @@ pub trait LabelInstruction: IntegratedCircuit { &mut self, vm: &crate::vm::VM, d: &crate::vm::instructions::operands::Operand, - str: &crate::vm::instructions::operands::Operand, + string: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; } pub trait LbInstruction: IntegratedCircuit { @@ -1450,6 +1466,7 @@ pub trait ICInstructable: + BrnezInstruction + CeilInstruction + ClrInstruction + + ClrdInstruction + CosInstruction + DefineInstruction + DivInstruction @@ -1595,6 +1612,7 @@ impl ICInstructable for T where + BrnezInstruction + CeilInstruction + ClrInstruction + + ClrdInstruction + CosInstruction + DefineInstruction + DivInstruction diff --git a/ic10emu/src/vm/object.rs b/ic10emu/src/vm/object.rs index 94c2e2d..f36b081 100644 --- a/ic10emu/src/vm/object.rs +++ b/ic10emu/src/vm/object.rs @@ -1,4 +1,4 @@ -use std::{cell::RefCell, ops::Deref, rc::Rc}; +use std::{cell::RefCell, ops::Deref, rc::Rc, str::FromStr}; use macro_rules_attribute::derive; use serde_derive::{Deserialize, Serialize}; @@ -14,6 +14,8 @@ use traits::*; use crate::vm::enums::{basic_enums::Class as SlotClass, script_enums::LogicSlotType}; +use super::enums::prefabs::StationpediaPrefab; + pub type ObjectID = u32; pub type BoxedObject = Rc>>; @@ -51,6 +53,24 @@ impl Name { hash: const_crc32::crc32(name.as_bytes()) as i32, } } + pub fn from_prefab_name(name: &str) -> Self { + Name { + value: name.to_string(), + hash: StationpediaPrefab::from_str(name) + .map(|prefab| prefab as i32) + .unwrap_or_else(|_| const_crc32::crc32(name.as_bytes()) as i32), + } + } + pub fn from_prefab_hash(hash: i32) -> Option { + if let Some(prefab) = StationpediaPrefab::from_repr(hash) { + Some(Name { + value: prefab.to_string(), + hash: hash, + }) + } else { + None + } + } pub fn set(&mut self, name: &str) { self.value = name.to_owned(); self.hash = const_crc32::crc32(name.as_bytes()) as i32; @@ -72,6 +92,9 @@ pub struct LogicField { #[derive(Debug, Default, Clone, Serialize, Deserialize)] pub struct Slot { + pub parent: ObjectID, + pub index: usize, + pub name: String, pub typ: SlotClass, pub enabled_logic: Vec, pub occupant: Option, diff --git a/ic10emu/src/vm/object/generic/macros.rs b/ic10emu/src/vm/object/generic/macros.rs index 57d5e10..741a9ef 100644 --- a/ic10emu/src/vm/object/generic/macros.rs +++ b/ic10emu/src/vm/object/generic/macros.rs @@ -1,3 +1,22 @@ +macro_rules! GWStorage { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWStorage for $struct { + fn slots(&self) -> &Vec { + &self.slots + } + fn slots_mut(&mut self) -> &mut Vec { + &mut self.slots + } + } + }; +} +pub(crate) use GWStorage; + macro_rules! GWLogicable { ( $( #[$attr:meta] )* @@ -6,21 +25,12 @@ macro_rules! GWLogicable { } ) => { impl GWLogicable for $struct { - fn name(&self) -> &Option { - &self.name - } fn fields(&self) -> &BTreeMap { &self.fields } fn fields_mut(&mut self) -> &mut BTreeMap { &mut self.fields } - fn slots(&self) -> &Vec { - &self.slots - } - fn slots_mut(&mut self) -> &mut Vec { - &mut self.slots - } } }; } @@ -73,3 +83,22 @@ macro_rules! GWDevice { }; } 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 + } + } + }; +} +pub(crate) use GWItem; diff --git a/ic10emu/src/vm/object/generic/structs.rs b/ic10emu/src/vm/object/generic/structs.rs index e894731..03a0883 100644 --- a/ic10emu/src/vm/object/generic/structs.rs +++ b/ic10emu/src/vm/object/generic/structs.rs @@ -2,92 +2,160 @@ use super::{macros::*, traits::*}; use crate::vm::{ enums::script_enums::LogicType, - object::{macros::ObjectInterface, traits::*, LogicField, Name, ObjectID, Slot}, + object::{ + macros::ObjectInterface, templates::ItemInfo, traits::*, LogicField, Name, ObjectID, Slot, + }, }; use macro_rules_attribute::derive; -use std::{collections::BTreeMap, usize}; +use std::collections::BTreeMap; #[derive(ObjectInterface!)] #[custom(implements(Object { }))] pub struct Generic { #[custom(object_id)] - id: ObjectID, + pub id: ObjectID, #[custom(object_prefab)] - prefab: Name, + pub prefab: Name, + #[custom(object_name)] + pub name: Name, } -#[derive(ObjectInterface!, GWLogicable!)] -#[custom(implements(Object { Logicable }))] +#[derive(ObjectInterface!, GWStorage!)] +#[custom(implements(Object { Storage }))] +pub struct GenericStorage { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + pub slots: Vec, +} + +#[derive(ObjectInterface!, GWStorage!, GWLogicable!)] +#[custom(implements(Object { Storage, Logicable }))] pub struct GenericLogicable { #[custom(object_id)] - id: ObjectID, + pub id: ObjectID, #[custom(object_prefab)] - prefab: Name, - name: Option, - fields: BTreeMap, - slots: Vec, + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + pub fields: BTreeMap, + pub slots: Vec, } -#[derive(ObjectInterface!, GWLogicable!, GWDevice!)] -#[custom(implements(Object { Logicable, Device }))] +#[derive(ObjectInterface!, GWStorage!, GWLogicable!, GWDevice!)] +#[custom(implements(Object { Storage, Logicable, Device }))] pub struct GenericLogicableDevice { #[custom(object_id)] - id: ObjectID, + pub id: ObjectID, #[custom(object_prefab)] - prefab: Name, - name: Option, - fields: BTreeMap, - slots: Vec, + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + pub fields: BTreeMap, + pub slots: Vec, } -#[derive(ObjectInterface!, GWLogicable!, GWMemoryReadable!)] -#[custom(implements(Object { Logicable, MemoryReadable }))] -pub struct GenericLogicableMemoryReadable { - #[custom(object_id)] - id: ObjectID, - #[custom(object_prefab)] - prefab: Name, - name: Option, - fields: BTreeMap, - slots: Vec, - memory: Vec, -} - -#[derive(ObjectInterface!, GWLogicable!, GWMemoryReadable!, GWMemoryWritable!)] -#[custom(implements(Object { Logicable, MemoryReadable, MemoryWritable }))] -pub struct GenericLogicableMemoryReadWritable { - #[custom(object_id)] - id: ObjectID, - #[custom(object_prefab)] - prefab: Name, - name: Option, - fields: BTreeMap, - slots: Vec, - memory: Vec, -} - -#[derive(ObjectInterface!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] -#[custom(implements(Object { Logicable, Device, MemoryReadable }))] +#[derive(ObjectInterface!, GWStorage!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] +#[custom(implements(Object { Storage, Logicable, Device, MemoryReadable }))] pub struct GenericLogicableDeviceMemoryReadable { #[custom(object_id)] - id: ObjectID, + pub id: ObjectID, #[custom(object_prefab)] - prefab: Name, - name: Option, - fields: BTreeMap, - slots: Vec, - memory: Vec, + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + pub fields: BTreeMap, + pub slots: Vec, + pub memory: Vec, } -#[derive(ObjectInterface!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] -#[custom(implements(Object { Logicable, Device, MemoryReadable, MemoryWritable }))] -pub struct GenericLogicableDeviceMemoryReadWriteablable { +#[derive(ObjectInterface!, GWStorage!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] +#[custom(implements(Object { Storage, Logicable, Device, MemoryReadable, MemoryWritable }))] +pub struct GenericLogicableDeviceMemoryReadWriteable { #[custom(object_id)] - id: ObjectID, + pub id: ObjectID, #[custom(object_prefab)] - prefab: Name, - name: Option, - fields: BTreeMap, - slots: Vec, - memory: Vec, + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + pub fields: BTreeMap, + pub slots: Vec, + pub memory: Vec, +} + +#[derive(ObjectInterface!, GWItem!)] +#[custom(implements(Object { Item }))] +pub struct GenericItem { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + pub item_info: ItemInfo, + pub parent_slot: Option, +} + +#[derive(ObjectInterface!, GWItem!, GWStorage! )] +#[custom(implements(Object { Item, Storage }))] +pub struct GenericItemStorage { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + pub item_info: ItemInfo, + pub parent_slot: Option, + pub slots: Vec, +} + +#[derive(ObjectInterface!, GWItem!, GWStorage!, GWLogicable! )] +#[custom(implements(Object { Item, Storage, Logicable }))] +pub struct GenericItemLogicable { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + pub item_info: ItemInfo, + pub parent_slot: Option, + pub fields: BTreeMap, + pub slots: Vec, +} + +#[derive(ObjectInterface!, GWItem!, GWStorage!, GWLogicable!, GWMemoryReadable! )] +#[custom(implements(Object { 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, + pub item_info: ItemInfo, + pub parent_slot: Option, + pub fields: BTreeMap, + pub slots: Vec, + pub memory: Vec, +} + +#[derive(ObjectInterface!, GWItem!, GWStorage!, GWLogicable!, GWMemoryReadable!, GWMemoryWritable! )] +#[custom(implements(Object { 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, + pub item_info: ItemInfo, + pub parent_slot: Option, + pub fields: BTreeMap, + pub slots: Vec, + pub memory: Vec, } diff --git a/ic10emu/src/vm/object/generic/traits.rs b/ic10emu/src/vm/object/generic/traits.rs index 87e8353..3e3cd91 100644 --- a/ic10emu/src/vm/object/generic/traits.rs +++ b/ic10emu/src/vm/object/generic/traits.rs @@ -1,41 +1,47 @@ use crate::vm::{ - enums::script_enums::{LogicSlotType, LogicType}, + enums::{ + basic_enums::{Class as SlotClass, GasType, SortingClass}, + script_enums::{LogicSlotType, LogicType}, + }, object::{ errors::{LogicError, MemoryError}, + templates::ItemInfo, traits::*, - LogicField, MemoryAccess, Name, Slot, + LogicField, MemoryAccess, Slot, }, VM, }; use std::{collections::BTreeMap, usize}; use strum::IntoEnumIterator; -pub trait GWLogicable { - fn name(&self) -> &Option; - fn fields(&self) -> &BTreeMap; - fn fields_mut(&mut self) -> &mut BTreeMap; +pub trait GWStorage { fn slots(&self) -> &Vec; fn slots_mut(&mut self) -> &mut Vec; } -pub trait GWMemoryReadable { - fn memory_size(&self) -> usize; - fn memory(&self) -> &Vec; -} -pub trait GWMemoryWritable: GWMemoryReadable { - fn memory_mut(&mut self) -> &mut Vec; +impl Storage for T { + fn slots_count(&self) -> usize { + self.slots().len() + } + fn get_slot(&self, index: usize) -> Option<&Slot> { + self.slots().get(index) + } + fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot> { + self.slots_mut().get_mut(index) + } } -pub trait GWDevice: GWLogicable {} - -pub trait GWCircuitHolder: GWLogicable {} +pub trait GWLogicable: Storage { + fn fields(&self) -> &BTreeMap; + fn fields_mut(&mut self) -> &mut BTreeMap; +} impl Logicable for T { fn prefab_hash(&self) -> i32 { self.prefab().hash } fn name_hash(&self) -> i32 { - self.name().as_ref().map(|name| name.hash).unwrap_or(0) + self.name().hash } fn is_logic_readable(&self) -> bool { LogicType::iter().any(|lt| self.can_logic_read(lt)) @@ -90,15 +96,6 @@ impl Logicable for T { _ => Err(LogicError::CantWrite(lt)), }) } - fn slots_count(&self) -> usize { - self.slots().len() - } - fn get_slot(&self, index: usize) -> Option<&Slot> { - self.slots().get(index) - } - fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot> { - self.slots_mut().get_mut(index) - } fn can_slot_logic_read(&self, slt: LogicSlotType, index: usize) -> bool { self.get_slot(index) .map(|slot| slot.enabled_logic.contains(&slt)) @@ -111,7 +108,7 @@ impl Logicable for T { _vm: &VM, ) -> Result { self.get_slot(index) - .ok_or_else(|| LogicError::SlotIndexOutOfRange(index, self.slots().len())) + .ok_or_else(|| LogicError::SlotIndexOutOfRange(index, self.slots_count())) .and_then(|slot| { if slot.enabled_logic.contains(&slt) { match slot.occupant { @@ -128,6 +125,11 @@ impl Logicable for T { } } +pub trait GWMemoryReadable { + fn memory_size(&self) -> usize; + fn memory(&self) -> &Vec; +} + impl MemoryReadable for T { fn memory_size(&self) -> usize { self.memory_size() @@ -142,12 +144,17 @@ impl MemoryReadable for T { } } } + +pub trait GWMemoryWritable: MemoryReadable { + fn memory_mut(&mut self) -> &mut Vec; +} + impl MemoryWritable for T { 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())) + 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(()) @@ -159,4 +166,40 @@ impl MemoryWritable for T { } } +pub trait GWDevice: Logicable {} + impl Device for T {} + +pub trait GWItem { + fn item_info(&self) -> &ItemInfo; + fn parent_slot(&self) -> Option; +} + +impl Item for T { + 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) -> SlotClass { + self.item_info().slot_class + } + fn sorting_class(&self) -> SortingClass { + self.item_info().sorting_class + } + fn parent_slot(&self) -> Option { + self.parent_slot() + } +} + +pub trait GWCircuitHolder: Logicable {} diff --git a/ic10emu/src/vm/object/macros.rs b/ic10emu/src/vm/object/macros.rs index 52278ca..c2e1c31 100644 --- a/ic10emu/src/vm/object/macros.rs +++ b/ic10emu/src/vm/object/macros.rs @@ -11,6 +11,7 @@ macro_rules! object_trait { type ID; fn id(&self) -> &Self::ID; fn prefab(&self) -> &crate::vm::object::Name; + fn name(&self) -> &crate::vm::object::Name; fn type_name(&self) -> &str; @@ -47,11 +48,12 @@ pub(crate) use object_trait; macro_rules! ObjectInterface { { - @final + @body_id_prefab_name @trt $trait_name:ident; $struct:ident; @impls $($trt:path),*; @id $id_field:ident: $id_typ:ty; @prefab $prefab_field:ident: $prefab_typ:ty; + @name $name_field:ident: $name_typ:ty; } => { impl $trait_name for $struct { type ID = $id_typ; @@ -60,10 +62,14 @@ macro_rules! ObjectInterface { &self.$id_field } - fn prefab(&self) -> &crate::vm::object::Name { + fn prefab(&self) -> &$prefab_typ { &self.$prefab_field } + fn name(&self) -> &$name_typ { + &self.$name_field + } + fn type_name(&self) -> &str { std::any::type_name::() } @@ -92,6 +98,209 @@ macro_rules! ObjectInterface { } }; + { + @body_id_name + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + @id $id_field:ident: $id_typ:ty; + @name $name_field:ident: $name_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_id_prefab_name + @trt $trait_name; $struct; + @impls $($trt),*; + @id $id_field: $id_typ; + @prefab $prefab_field: $prefab_typ; + @name $name_field: $name_typ; + } + }; + { + @body_id_name + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + @id $id_field:ident: $id_typ:ty; + @name $name_field:ident: $name_typ:ty; + $(#[#field:meta])* + $field_viz:vis + $field_name:ident : $field_ty:ty, + $( $rest:tt )* + + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body_id_name + @trt $trait_name; $struct; + @impls $($trt),*; + @id $id_field: $id_typ; + @name $name_field: $name_typ; + $( $rest )* + } + }; + { + @body_id_prefab + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + @id $id_field:ident: $id_typ:ty; + @prefab $prefab_field:ident: $prefab_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_id_prefab_name + @trt $trait_name; $struct; + @impls $($trt),*; + @id $id_field: $id_typ; + @prefab $prefab_field: $prefab_typ; + @name $name_field: $name_typ; + } + }; + { + @body_id_prefab + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + @id $id_field:ident: $id_typ:ty; + @prefab $prefab_field:ident: $prefab_typ:ty; + $(#[#field:meta])* + $field_viz:vis + $field_name:ident : $field_ty:ty, + $( $rest:tt )* + + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body_id_prefab + @trt $trait_name; $struct; + @impls $($trt),*; + @id $id_field: $id_typ; + @prefab $prefab_field: $prefab_typ; + $( $rest )* + } + }; + { + @body_prefab_name + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + @prefab $prefab_field:ident: $prefab_typ:ty; + @name $name_field:ident: $name_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_id_prefab_name + @trt $trait_name; $struct; + @impls $($trt),*; + @prefab $prefab_field: $prefab_typ; + @name $name_field: $name_typ; + } + }; + { + @body_prefab_name + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + @prefab $prefab_field:ident: $prefab_typ:ty; + @name $name_field:ident: $name_typ:ty; + $(#[#field:meta])* + $field_viz:vis + $field_name:ident : $field_ty:ty, + $( $rest:tt )* + + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body_prefab_name + @trt $trait_name; $struct; + @impls $($trt),*; + @prefab $prefab_field: $prefab_typ; + @name $name_field: $name_typ; + $( $rest )* + } + }; + { + @body_name + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + @name $name_field:ident: $name_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_prefab_name + @trt $trait_name; $struct; + @impls $($trt),*; + @prefab $prefab_field: $prefab_typ; + @name $name_field: $name_typ; + $( $rest )* + } + }; + { + @body_name + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + @name $name_field:ident: $name_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_id_name + @trt $trait_name; $struct; + @impls $($trt),*; + @id $id_field: $id_typ; + @name $name_field: $name_typ; + $( $rest )* + } + }; + { + @body_name + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + @name $name_field:ident: $name_typ:ty; + $(#[#field:meta])* + $field_viz:vis + $field_name:ident : $field_ty:ty, + $( $rest:tt )* + + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body_name + @trt $trait_name; $struct; + @impls $($trt),*; + @name $name_field: $name_typ; + $( $rest )* + } + }; + { + @body_id + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + @id $id_field:ident: $id_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_id_name + @trt $trait_name; $struct; + @impls $($trt),*; + @id $id_field: $id_typ; + @name $name_field: $name_typ; + $( $rest )* + } + }; { @body_id @trt $trait_name:ident; $struct:ident; @@ -103,11 +312,12 @@ macro_rules! ObjectInterface { $( $rest:tt )* } => { $crate::vm::object::macros::ObjectInterface!{ - @final + @body_id_prefab @trt $trait_name; $struct; @impls $($trt),*; @id $id_field: $id_typ; @prefab $prefab_field: $prefab_typ; + $( $rest )* } }; { @@ -128,6 +338,26 @@ macro_rules! ObjectInterface { $( $rest )* } }; + { + @body_prefab + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + @prefab $prefab_field:ident: $prefab_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_prefab_name + @trt $trait_name; $struct; + @impls $($trt),*; + @prefab $prefab_field: $prefab_typ; + @name $name_field: $name_typ; + $( $rest )* + } + }; { @body_prefab @trt $trait_name:ident; $struct:ident; @@ -140,11 +370,12 @@ macro_rules! ObjectInterface { } => { $crate::vm::object::macros::ObjectInterface!{ - @final + @body_id_prefab @trt $trait_name; $struct; @impls $($trt),*; @id $id_field: $id_typ; @prefab $prefab_field: $prefab_typ; + $( $rest )* } }; { @@ -166,6 +397,24 @@ macro_rules! ObjectInterface { $( $rest )* } }; + { + @body + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + #[custom(object_name)] + $(#[$name_attr:meta])* + $name_viz:vis $name_field:ident: $name_typ:ty, + $( $rest:tt )* + + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body_name + @trt $trait_name; $struct; + @impls $($trt),*; + @name $name_field: $name_typ; + $( $rest )* + } + }; { @body @trt $trait_name:ident; $struct:ident; diff --git a/ic10emu/src/vm/object/stationpedia.rs b/ic10emu/src/vm/object/stationpedia.rs index 98c4dfe..06880de 100644 --- a/ic10emu/src/vm/object/stationpedia.rs +++ b/ic10emu/src/vm/object/stationpedia.rs @@ -1,22 +1,18 @@ -use std::str::FromStr; - use crate::vm::enums::prefabs::StationpediaPrefab; use crate::vm::object::VMObject; -#[allow(unused)] -pub enum PrefabTemplate { - Hash(i32), - Name(String), -} +use super::templates::ObjectTemplate; +use super::ObjectID; + +pub mod structs; #[allow(unused)] -pub fn object_from_prefab_template(template: &PrefabTemplate) -> Option { - let prefab = match template { - PrefabTemplate::Hash(hash) => StationpediaPrefab::from_repr(*hash), - PrefabTemplate::Name(name) => StationpediaPrefab::from_str(name).ok(), - }; +pub fn object_from_prefab_template(template: &ObjectTemplate, id: ObjectID) -> Option { + let prefab = StationpediaPrefab::from_repr(template.prefab().prefab_hash); match prefab { - // Some(StationpediaPrefab::ItemIntegratedCircuit10) => Some() + Some(StationpediaPrefab::ItemIntegratedCircuit10) => { + Some(VMObject::new(structs::ItemIntegratedCircuit10)) + } // Some(StationpediaPrefab::StructureCircuitHousing) => Some() // Some(StationpediaPrefab::StructureRocketCircuitHousing) => Some() _ => 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..a51cd85 --- /dev/null +++ b/ic10emu/src/vm/object/stationpedia/structs.rs @@ -0,0 +1,3 @@ +mod integrated_circuit; + +pub use integrated_circuit::ItemIntegratedCircuit10; 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..95bdba0 --- /dev/null +++ b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs @@ -0,0 +1,1762 @@ +use crate::{ + errors::{ICError, LineError}, + grammar, + vm::{ + enums::{ + basic_enums::{Class as SlotClass, GasType, SortingClass}, + script_enums::LogicType, + }, + instructions::{ + enums::InstructionOp, + operands::{DeviceSpec, Operand, RegisterSpec}, + traits::*, + Instruction, + }, + object::{ + errors::MemoryError, + generic::{macros::GWLogicable, traits::GWLogicable}, + macros::ObjectInterface, + traits::*, + LogicField, Name, ObjectID, Slot, + }, + VM, + }, +}; +use itertools::Itertools; +use macro_rules_attribute::derive; +use serde_derive::{Deserialize, Serialize}; +use std::collections::{BTreeMap, HashSet}; +use ICError::*; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Program { + pub instructions: Vec, + pub errors: Vec, + pub labels: BTreeMap, +} + +impl Default for Program { + fn default() -> Self { + Program::new() + } +} + +impl Program { + pub fn new() -> Self { + Program { + instructions: Vec::new(), + errors: Vec::new(), + labels: BTreeMap::new(), + } + } + + pub fn try_from_code(code: &str) -> Result { + let parse_tree = grammar::parse(code)?; + let mut labels_set = HashSet::new(); + let mut labels = BTreeMap::new(); + let errors = Vec::new(); + let instructions = parse_tree + .into_iter() + .enumerate() + .map(|(line_number, line)| match line.code { + 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)) + } else { + labels_set.insert(label.id.name.clone()); + labels.insert(label.id.name, line_number as u32); + Ok(Instruction { + instruction: InstructionOp::Nop, + operands: vec![], + }) + } + } + grammar::Code::Instruction(instruction) => Ok(instruction), + grammar::Code::Invalid(err) => Err(err.into()), + }, + }) + .try_collect()?; + Ok(Program { + instructions, + errors, + labels, + }) + } + + pub fn from_code_with_invalid(code: &str) -> Self { + let parse_tree = grammar::parse_with_invalid(code); + let mut labels_set = HashSet::new(); + let mut labels = BTreeMap::new(); + let mut errors = Vec::new(); + let instructions = parse_tree + .into_iter() + .enumerate() + .map(|(line_number, line)| match line.code { + 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)); + } else { + labels_set.insert(label.id.name.clone()); + labels.insert(label.id.name, line_number as u32); + } + Instruction { + instruction: InstructionOp::Nop, + operands: vec![], + } + } + grammar::Code::Instruction(instruction) => instruction, + grammar::Code::Invalid(err) => { + errors.push(err.into()); + Instruction { + instruction: InstructionOp::Nop, + operands: vec![], + } + } + }, + }) + .collect_vec(); + Program { + instructions, + errors, + labels, + } + } + + pub fn get_line(&self, line: usize) -> Result<&Instruction, ICError> { + self.instructions + .get(line) + .ok_or(ICError::InstructionPointerOutOfRange(line)) + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum ICState { + Start, + Running, + Yield, + Sleep(time::OffsetDateTime, f64), + HasCaughtFire, + Error(LineError), +} + +static RETURN_ADDRESS_INDEX: usize = 17; +static STACK_POINTER_INDEX: usize = 16; + +#[derive(ObjectInterface!, GWLogicable!)] +#[custom(implements(Object { Item, Storage, Logicable, MemoryReadable, MemoryWritable }))] +pub struct ItemIntegratedCircuit10 { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + 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, +} + +impl Item for ItemIntegratedCircuit10 { + 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) -> SlotClass { + SlotClass::ProgrammableChip + } + fn sorting_class(&self) -> SortingClass { + SortingClass::Default + } + fn parent_slot(&self) -> Option { + self.parent_slot + } +} + +impl Storage for ItemIntegratedCircuit10 { + 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 + } +} + +impl MemoryReadable for ItemIntegratedCircuit10 { + 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]) + } + } +} + +impl MemoryWritable for ItemIntegratedCircuit10 { + 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) -> Result<(), MemoryError> { + self.memory.fill(0.0); + Ok(()) + } +} + +impl SourceCode for ItemIntegratedCircuit10 { + 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<&Instruction, ICError> { + self.program.get_line(line) + } +} + +impl IntegratedCircuit for ItemIntegratedCircuit10 { + fn get_instruction_pointer(&self) -> f64 { + self.ip as f64 + } + fn set_next_instruction(&mut self, next_instruction: f64) { + self.next_ip = next_instruction 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 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(ICError::StackUnderflow) + } else if sp as usize >= self.memory.len() { + Err(ICError::StackOverflow) + } 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(ICError::StackUnderflow) + } else if sp as usize >= self.memory.len() { + Err(ICError::StackOverflow) + } 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(ICError::StackUnderflow) + } else if sp as usize >= self.memory.len() { + Err(ICError::StackOverflow) + } 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(&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_defines(&self) -> &BTreeMap { + &self.defines + } + fn get_labels(&self) -> &BTreeMap { + &self.program.labels + } +} + +impl SleepInstruction for ItemIntegratedCircuit10 { + /// sleep a(r?|num) + fn execute_sleep(&mut self, vm: &VM, a: &Operand) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Sleep, 1)?; + let now = + time::OffsetDateTime::now_local().unwrap_or_else(|_| time::OffsetDateTime::now_utc()); + self.state = ICState::Sleep(now, a); + Ok(()) + } +} + +impl YieldInstruction for ItemIntegratedCircuit10 { + /// yield + fn execute_yield(&mut self, vm: &VM) -> Result<(), ICError> { + self.state = ICState::Yield; + Ok(()) + } +} + +impl DefineInstruction for ItemIntegratedCircuit10 { + /// define str num + fn execute_define(&mut self, vm: &VM, string: &Operand, num: &Operand) -> Result<(), ICError> { + let &Operand::Identifier(ident) = &string else { + return Err(IncorrectOperandType { + inst: InstructionOp::Define, + index: 1, + desired: "Name".to_owned(), + }); + }; + let &Operand::Number(num) = &num else { + return Err(IncorrectOperandType { + inst: InstructionOp::Define, + index: 2, + desired: "Number".to_owned(), + }); + }; + if self.defines.contains_key(&ident.name) { + Err(DuplicateDefine(ident.name.clone())) + } else { + self.defines.insert(ident.name.clone(), num.value()); + Ok(()) + } + } +} + +impl AliasInstruction for ItemIntegratedCircuit10 { + /// alias str r?|d? + fn execute_alias(&mut self, vm: &VM, string: &Operand, r: &Operand) -> Result<(), ICError> { + let &Operand::Identifier(ident) = &string else { + return Err(IncorrectOperandType { + inst: InstructionOp::Alias, + index: 1, + desired: "Name".to_owned(), + }); + }; + let alias = match &r { + 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: InstructionOp::Alias, + index: 2, + desired: "Device Or Register".to_owned(), + }) + } + }; + self.aliases.insert(ident.name.clone(), alias); + Ok(()) + } +} + +impl MoveInstruction for ItemIntegratedCircuit10 { + /// move r? a(r?|num) + fn execute_move(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self, InstructionOp::Move, 1)?; + + let val = a.as_value(self, InstructionOp::Move, 2)?; + self.set_register(indirection, target, val)?; + Ok(()) + } +} + +impl BeqInstruction for ItemIntegratedCircuit10 { + /// beq a(r?|num) b(r?|num) c(r?|num) + fn execute_beq( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Beq, 1)?; + let b = b.as_value(self, InstructionOp::Beq, 2)?; + let c = c.as_value(self, InstructionOp::Beq, 3)?; + if a == b { + self.set_next_instruction(c); + } + Ok(()) + } +} +impl BeqalInstruction for ItemIntegratedCircuit10 { + /// beqal a(r?|num) b(r?|num) c(r?|num) + fn execute_beqal( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Beqal, 1)?; + let b = b.as_value(self, InstructionOp::Beqal, 2)?; + let c = c.as_value(self, InstructionOp::Beqal, 3)?; + if a == b { + self.set_next_instruction(c); + self.al(); + } + Ok(()) + } +} + +impl BreqInstruction for ItemIntegratedCircuit10 { + /// breq a(r?|num) b(r?|num) c(r?|num) + fn execute_breq( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Breq, 1)?; + let b = b.as_value(self, InstructionOp::Breq, 2)?; + let c = c.as_value(self, InstructionOp::Breq, 3)?; + if a == b { + self.set_next_instruction_relative(c); + } + Ok(()) + } +} + +impl BeqzInstruction for ItemIntegratedCircuit10 { + /// beqz a(r?|num) b(r?|num) + fn execute_beqz(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Beqz, 1)?; + let b = b.as_value(self, InstructionOp::Beqz, 2)?; + if a == 0.0 { + self.set_next_instruction(b) + } + Ok(()) + } +} + +impl BeqzalInstruction for ItemIntegratedCircuit10 { + /// beqzal a(r?|num) b(r?|num) + fn execute_beqzal(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Beqzal, 1)?; + let b = b.as_value(self, InstructionOp::Beqzal, 2)?; + if a == 0.0 { + self.set_next_instruction(b); + self.al(); + } + Ok(()) + } +} + +impl BreqzInstruction for ItemIntegratedCircuit10 { + /// breqz a(r?|num) b(r?|num) + fn execute_breqz(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Breqz, 1)?; + let b = b.as_value(self, InstructionOp::Breqz, 2)?; + if a == 0.0 { + self.set_next_instruction_relative(b); + } + Ok(()) + } +} + +impl BneInstruction for ItemIntegratedCircuit10 { + /// bne a(r?|num) b(r?|num) c(r?|num) + fn execute_bne( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bne, 1)?; + let b = b.as_value(self, InstructionOp::Bne, 2)?; + let c = c.as_value(self, InstructionOp::Bne, 3)?; + if a != b { + self.set_next_instruction(c); + } + Ok(()) + } +} + +impl BnealInstruction for ItemIntegratedCircuit10 { + /// bneal a(r?|num) b(r?|num) c(r?|num) + fn execute_bneal( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bneal, 1)?; + let b = b.as_value(self, InstructionOp::Bneal, 2)?; + let c = c.as_value(self, InstructionOp::Bneal, 3)?; + if a != b { + self.set_next_instruction(c); + self.al(); + } + Ok(()) + } +} + +impl BrneInstruction for ItemIntegratedCircuit10 { + /// brne a(r?|num) b(r?|num) c(r?|num) + fn execute_brne( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Brne, 1)?; + let b = b.as_value(self, InstructionOp::Brne, 2)?; + let c = c.as_value(self, InstructionOp::Brne, 3)?; + if a != b { + self.set_next_instruction_relative(c); + } + Ok(()) + } +} + +impl BnezInstruction for ItemIntegratedCircuit10 { + /// bnez a(r?|num) b(r?|num) + fn execute_bnez(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bnez, 1)?; + let b = b.as_value(self, InstructionOp::Bnez, 2)?; + if a != 0.0 { + self.set_next_instruction(b) + } + Ok(()) + } +} + +impl BnezalInstruction for ItemIntegratedCircuit10 { + /// bnezal a(r?|num) b(r?|num) + fn execute_bnezal(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bnezal, 1)?; + let b = b.as_value(self, InstructionOp::Bnezal, 2)?; + if a != 0.0 { + self.set_next_instruction(b); + self.al(); + } + Ok(()) + } +} + +impl BrnezInstruction for ItemIntegratedCircuit10 { + /// brnez a(r?|num) b(r?|num) + fn execute_brnez(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Brnez, 1)?; + let b = b.as_value(self, InstructionOp::Brnez, 2)?; + if a != 0.0 { + self.set_next_instruction_relative(b) + } + Ok(()) + } +} + +impl BltInstruction for ItemIntegratedCircuit10 { + /// blt a(r?|num) b(r?|num) c(r?|num) + fn execute_blt( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Blt, 1)?; + let b = b.as_value(self, InstructionOp::Blt, 2)?; + let c = c.as_value(self, InstructionOp::Blt, 3)?; + if a < b { + self.set_next_instruction(c); + } + Ok(()) + } +} + +impl BltalInstruction for ItemIntegratedCircuit10 { + /// bltal a(r?|num) b(r?|num) c(r?|num) + fn execute_bltal( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bltal, 1)?; + let b = b.as_value(self, InstructionOp::Bltal, 2)?; + let c = c.as_value(self, InstructionOp::Bltal, 3)?; + if a < b { + self.set_next_instruction(c); + self.al(); + } + Ok(()) + } +} + +impl BrltInstruction for ItemIntegratedCircuit10 { + /// brlt a(r?|num) b(r?|num) c(r?|num) + fn execute_brlt( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Brlt, 1)?; + let b = b.as_value(self, InstructionOp::Brlt, 2)?; + let c = c.as_value(self, InstructionOp::Brlt, 3)?; + if a < b { + self.set_next_instruction_relative(c); + } + Ok(()) + } +} + +impl BltzInstruction for ItemIntegratedCircuit10 { + /// bltz a(r?|num) b(r?|num) + fn execute_bltz(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bltz, 1)?; + let b = b.as_value(self, InstructionOp::Bltz, 2)?; + if a < 0.0 { + self.set_next_instruction(b); + } + Ok(()) + } +} + +impl BltzalInstruction for ItemIntegratedCircuit10 { + /// bltzal a(r?|num) b(r?|num) + fn execute_bltzal(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bltzal, 1)?; + let b = b.as_value(self, InstructionOp::Bltzal, 2)?; + if a < 0.0 { + self.set_next_instruction(b); + self.al(); + } + Ok(()) + } +} + +impl BrltzInstruction for ItemIntegratedCircuit10 { + /// brltz a(r?|num) b(r?|num) + fn execute_brltz(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Brltz, 1)?; + let b = b.as_value(self, InstructionOp::Brltz, 2)?; + if a < 0.0 { + self.set_next_instruction_relative(b); + } + Ok(()) + } +} + +impl BleInstruction for ItemIntegratedCircuit10 { + /// ble a(r?|num) b(r?|num) c(r?|num) + fn execute_ble( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Ble, 1)?; + let b = b.as_value(self, InstructionOp::Ble, 2)?; + let c = c.as_value(self, InstructionOp::Ble, 3)?; + if a <= b { + self.set_next_instruction(c); + } + Ok(()) + } +} +impl BlealInstruction for ItemIntegratedCircuit10 { + /// bleal a(r?|num) b(r?|num) c(r?|num) + fn execute_bleal( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bleal, 1)?; + let b = b.as_value(self, InstructionOp::Bleal, 2)?; + let c = c.as_value(self, InstructionOp::Bleal, 3)?; + if a <= b { + self.set_next_instruction(c); + self.al(); + } + Ok(()) + } +} + +impl BrleInstruction for ItemIntegratedCircuit10 { + /// brle a(r?|num) b(r?|num) c(r?|num) + fn execute_brle( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Brle, 1)?; + let b = b.as_value(self, InstructionOp::Brle, 2)?; + let c = c.as_value(self, InstructionOp::Brle, 3)?; + if a <= b { + self.set_next_instruction_relative(c); + } + Ok(()) + } +} + +impl BlezInstruction for ItemIntegratedCircuit10 { + /// blez a(r?|num) b(r?|num) + fn execute_blez(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Blez, 1)?; + let b = b.as_value(self, InstructionOp::Blez, 2)?; + if a <= 0.0 { + self.set_next_instruction(b); + } + Ok(()) + } +} + +impl BlezalInstruction for ItemIntegratedCircuit10 { + /// blezal a(r?|num) b(r?|num) + fn execute_blezal(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Blezal, 1)?; + let b = b.as_value(self, InstructionOp::Blezal, 2)?; + if a <= 0.0 { + self.set_next_instruction(b); + self.al(); + } + Ok(()) + } +} + +impl BrlezInstruction for ItemIntegratedCircuit10 { + /// brlez a(r?|num) b(r?|num) + fn execute_brlez(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Brlez, 1)?; + let b = b.as_value(self, InstructionOp::Brlez, 2)?; + if a <= 0.0 { + self.set_next_instruction_relative(b); + } + Ok(()) + } +} + +impl BgtInstruction for ItemIntegratedCircuit10 { + /// bgt a(r?|num) b(r?|num) c(r?|num) + fn execute_bgt( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bgt, 1)?; + let b = b.as_value(self, InstructionOp::Bgt, 2)?; + let c = c.as_value(self, InstructionOp::Bgt, 3)?; + if a > b { + self.set_next_instruction(c); + } + Ok(()) + } +} +impl BgtalInstruction for ItemIntegratedCircuit10 { + /// bgtal a(r?|num) b(r?|num) c(r?|num) + fn execute_bgtal( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bgtal, 1)?; + let b = b.as_value(self, InstructionOp::Bgtal, 2)?; + let c = c.as_value(self, InstructionOp::Bgtal, 3)?; + if a > b { + self.set_next_instruction(c); + self.al(); + } + Ok(()) + } +} + +impl BrgtInstruction for ItemIntegratedCircuit10 { + /// brgt a(r?|num) b(r?|num) c(r?|num) + fn execute_brgt( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Brgt, 1)?; + let b = b.as_value(self, InstructionOp::Brgt, 2)?; + let c = c.as_value(self, InstructionOp::Brgt, 3)?; + if a > b { + self.set_next_instruction_relative(c); + } + Ok(()) + } +} + +impl BgtzInstruction for ItemIntegratedCircuit10 { + /// bgtz a(r?|num) b(r?|num) + fn execute_bgtz(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bgtz, 1)?; + let b = b.as_value(self, InstructionOp::Bgtz, 2)?; + if a > 0.0 { + self.set_next_instruction(b); + } + Ok(()) + } +} + +impl BgtzalInstruction for ItemIntegratedCircuit10 { + /// bgtzal a(r?|num) b(r?|num) + fn execute_bgtzal(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bgtzal, 1)?; + let b = b.as_value(self, InstructionOp::Bgtzal, 2)?; + if a > 0.0 { + self.set_next_instruction(b); + self.al(); + } + Ok(()) + } +} + +impl BrgtzInstruction for ItemIntegratedCircuit10 { + /// brgtz a(r?|num) b(r?|num) + fn execute_brgtz(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Brgtz, 1)?; + let b = b.as_value(self, InstructionOp::Brgtz, 2)?; + if a > 0.0 { + self.set_next_instruction_relative(b); + } + Ok(()) + } +} + +impl AbsInstruction for ItemIntegratedCircuit10 { + /// abs r? a(r?|num) + fn execute_abs(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} + +impl AcosInstruction for ItemIntegratedCircuit10 { + /// acos r? a(r?|num) + fn execute_acos(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl AddInstruction for ItemIntegratedCircuit10 { + /// add r? a(r?|num) b(r?|num) + fn execute_add( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl AndInstruction for ItemIntegratedCircuit10 { + /// and r? a(r?|num) b(r?|num) + fn execute_and( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl AsinInstruction for ItemIntegratedCircuit10 { + /// asin r? a(r?|num) + fn execute_asin(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl AtanInstruction for ItemIntegratedCircuit10 { + /// atan r? a(r?|num) + fn execute_atan(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl Atan2Instruction for ItemIntegratedCircuit10 { + /// atan2 r? a(r?|num) b(r?|num) + fn execute_atan2( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl BapInstruction for ItemIntegratedCircuit10 { + /// bap a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_bap( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + d: &Operand, + ) -> Result<(), ICError>; +} +impl BapalInstruction for ItemIntegratedCircuit10 { + /// bapal a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_bapal( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + d: &Operand, + ) -> Result<(), ICError>; +} +impl BapzInstruction for ItemIntegratedCircuit10 { + /// bapz a(r?|num) b(r?|num) c(r?|num) + fn execute_bapz( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError>; +} +impl BapzalInstruction for ItemIntegratedCircuit10 { + /// bapzal a(r?|num) b(r?|num) c(r?|num) + fn execute_bapzal( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError>; +} +impl BdnsInstruction for ItemIntegratedCircuit10 { + /// bdns d? a(r?|num) + fn execute_bdns(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl BdnsalInstruction for ItemIntegratedCircuit10 { + /// bdnsal d? a(r?|num) + fn execute_bdnsal(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl BdseInstruction for ItemIntegratedCircuit10 { + /// bdse d? a(r?|num) + fn execute_bdse(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl BdsealInstruction for ItemIntegratedCircuit10 { + /// bdseal d? a(r?|num) + fn execute_bdseal(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl BgeInstruction for ItemIntegratedCircuit10 { + /// bge a(r?|num) b(r?|num) c(r?|num) + fn execute_bge( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError>; +} +impl BgealInstruction for ItemIntegratedCircuit10 { + /// bgeal a(r?|num) b(r?|num) c(r?|num) + fn execute_bgeal( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError>; +} +impl BgezInstruction for ItemIntegratedCircuit10 { + /// bgez a(r?|num) b(r?|num) + fn execute_bgez(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError>; +} +impl BgezalInstruction for ItemIntegratedCircuit10 { + /// bgezal a(r?|num) b(r?|num) + fn execute_bgezal(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError>; +} +impl BnaInstruction for ItemIntegratedCircuit10 { + /// bna a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_bna( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + d: &Operand, + ) -> Result<(), ICError>; +} +impl BnaalInstruction for ItemIntegratedCircuit10 { + /// bnaal a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_bnaal( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + d: &Operand, + ) -> Result<(), ICError>; +} +impl BnanInstruction for ItemIntegratedCircuit10 { + /// bnan a(r?|num) b(r?|num) + fn execute_bnan(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError>; +} +impl BnazInstruction for ItemIntegratedCircuit10 { + /// bnaz a(r?|num) b(r?|num) c(r?|num) + fn execute_bnaz( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError>; +} +impl BnazalInstruction for ItemIntegratedCircuit10 { + /// bnazal a(r?|num) b(r?|num) c(r?|num) + fn execute_bnazal( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError>; +} +impl BrapInstruction for ItemIntegratedCircuit10 { + /// brap a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_brap( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + d: &Operand, + ) -> Result<(), ICError>; +} +impl BrapzInstruction for ItemIntegratedCircuit10 { + /// brapz a(r?|num) b(r?|num) c(r?|num) + fn execute_brapz( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError>; +} +impl BrdnsInstruction for ItemIntegratedCircuit10 { + /// brdns d? a(r?|num) + fn execute_brdns(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl BrdseInstruction for ItemIntegratedCircuit10 { + /// brdse d? a(r?|num) + fn execute_brdse(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl BrgeInstruction for ItemIntegratedCircuit10 { + /// brge a(r?|num) b(r?|num) c(r?|num) + fn execute_brge( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError>; +} +impl BrgezInstruction for ItemIntegratedCircuit10 { + /// brgez a(r?|num) b(r?|num) + fn execute_brgez(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError>; +} +impl BrnaInstruction for ItemIntegratedCircuit10 { + /// brna a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_brna( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + d: &Operand, + ) -> Result<(), ICError>; +} +impl BrnanInstruction for ItemIntegratedCircuit10 { + /// brnan a(r?|num) b(r?|num) + fn execute_brnan(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError>; +} +impl BrnazInstruction for ItemIntegratedCircuit10 { + /// brnaz a(r?|num) b(r?|num) c(r?|num) + fn execute_brnaz( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError>; +} +impl CeilInstruction for ItemIntegratedCircuit10 { + /// ceil r? a(r?|num) + fn execute_ceil(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl ClrInstruction for ItemIntegratedCircuit10 { + /// clr d? + fn execute_clr(&mut self, vm: &VM, d: &Operand) -> Result<(), ICError>; +} +impl ClrdInstruction for ItemIntegratedCircuit10 { + /// clrd id(r?|num) + fn execute_clrd(&mut self, vm: &VM, id: &Operand) -> Result<(), ICError>; +} +impl CosInstruction for ItemIntegratedCircuit10 { + /// cos r? a(r?|num) + fn execute_cos(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl DivInstruction for ItemIntegratedCircuit10 { + /// div r? a(r?|num) b(r?|num) + fn execute_div( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl ExpInstruction for ItemIntegratedCircuit10 { + /// exp r? a(r?|num) + fn execute_exp(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl FloorInstruction for ItemIntegratedCircuit10 { + /// floor r? a(r?|num) + fn execute_floor(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl GetInstruction for ItemIntegratedCircuit10 { + /// get r? d? address(r?|num) + fn execute_get( + &mut self, + vm: &VM, + r: &Operand, + d: &Operand, + address: &Operand, + ) -> Result<(), ICError>; +} +impl GetdInstruction for ItemIntegratedCircuit10 { + /// getd r? id(r?|num) address(r?|num) + fn execute_getd( + &mut self, + vm: &VM, + r: &Operand, + id: &Operand, + address: &Operand, + ) -> Result<(), ICError>; +} +impl HcfInstruction for ItemIntegratedCircuit10 { + /// hcf + fn execute_hcf(&mut self, vm: &VM) -> Result<(), ICError>; +} +impl JInstruction for ItemIntegratedCircuit10 { + /// j int + fn execute_j(&mut self, vm: &VM, int: &Operand) -> Result<(), ICError>; +} +impl JalInstruction for ItemIntegratedCircuit10 { + /// jal int + fn execute_jal(&mut self, vm: &VM, int: &Operand) -> Result<(), ICError>; +} +impl JrInstruction for ItemIntegratedCircuit10 { + /// jr int + fn execute_jr(&mut self, vm: &VM, int: &Operand) -> Result<(), ICError>; +} +impl LInstruction for ItemIntegratedCircuit10 { + /// l r? d? logicType + fn execute_l( + &mut self, + vm: &VM, + r: &Operand, + d: &Operand, + logic_type: &Operand, + ) -> Result<(), ICError>; +} +impl LabelInstruction for ItemIntegratedCircuit10 { + /// label d? str + fn execute_label(&mut self, vm: &VM, d: &Operand, str: &Operand) -> Result<(), ICError>; +} +impl LbInstruction for ItemIntegratedCircuit10 { + /// lb r? deviceHash logicType batchMode + fn execute_lb( + &mut self, + vm: &VM, + r: &Operand, + device_hash: &Operand, + logic_type: &Operand, + batch_mode: &Operand, + ) -> Result<(), ICError>; +} +impl LbnInstruction for ItemIntegratedCircuit10 { + /// lbn r? deviceHash nameHash logicType batchMode + fn execute_lbn( + &mut self, + vm: &VM, + r: &Operand, + device_hash: &Operand, + name_hash: &Operand, + logic_type: &Operand, + batch_mode: &Operand, + ) -> Result<(), ICError>; +} +impl LbnsInstruction for ItemIntegratedCircuit10 { + /// lbns r? deviceHash nameHash slotIndex logicSlotType batchMode + fn execute_lbns( + &mut self, + vm: &VM, + r: &Operand, + device_hash: &Operand, + name_hash: &Operand, + slot_index: &Operand, + logic_slot_type: &Operand, + batch_mode: &Operand, + ) -> Result<(), ICError>; +} +impl LbsInstruction for ItemIntegratedCircuit10 { + /// lbs r? deviceHash slotIndex logicSlotType batchMode + fn execute_lbs( + &mut self, + vm: &VM, + r: &Operand, + device_hash: &Operand, + slot_index: &Operand, + logic_slot_type: &Operand, + batch_mode: &Operand, + ) -> Result<(), ICError>; +} +impl LdInstruction for ItemIntegratedCircuit10 { + /// ld r? id(r?|num) logicType + fn execute_ld( + &mut self, + vm: &VM, + r: &Operand, + id: &Operand, + logic_type: &Operand, + ) -> Result<(), ICError>; +} +impl LogInstruction for ItemIntegratedCircuit10 { + /// log r? a(r?|num) + fn execute_log(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl LrInstruction for ItemIntegratedCircuit10 { + /// lr r? d? reagentMode int + fn execute_lr( + &mut self, + vm: &VM, + r: &Operand, + d: &Operand, + reagent_mode: &Operand, + int: &Operand, + ) -> Result<(), ICError>; +} +impl LsInstruction for ItemIntegratedCircuit10 { + /// ls r? d? slotIndex logicSlotType + fn execute_ls( + &mut self, + vm: &VM, + r: &Operand, + d: &Operand, + slot_index: &Operand, + logic_slot_type: &Operand, + ) -> Result<(), ICError>; +} +impl MaxInstruction for ItemIntegratedCircuit10 { + /// max r? a(r?|num) b(r?|num) + fn execute_max( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl MinInstruction for ItemIntegratedCircuit10 { + /// min r? a(r?|num) b(r?|num) + fn execute_min( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl ModInstruction for ItemIntegratedCircuit10 { + /// mod r? a(r?|num) b(r?|num) + fn execute_mod( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl MulInstruction for ItemIntegratedCircuit10 { + /// mul r? a(r?|num) b(r?|num) + fn execute_mul( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl NorInstruction for ItemIntegratedCircuit10 { + /// nor r? a(r?|num) b(r?|num) + fn execute_nor( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl NotInstruction for ItemIntegratedCircuit10 { + /// not r? a(r?|num) + fn execute_not(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl OrInstruction for ItemIntegratedCircuit10 { + /// or r? a(r?|num) b(r?|num) + fn execute_or(&mut self, vm: &VM, r: &Operand, a: &Operand, b: &Operand) + -> Result<(), ICError>; +} +impl PeekInstruction for ItemIntegratedCircuit10 { + /// peek r? + fn execute_peek(&mut self, vm: &VM, r: &Operand) -> Result<(), ICError>; +} +impl PokeInstruction for ItemIntegratedCircuit10 { + /// poke address(r?|num) value(r?|num) + fn execute_poke(&mut self, vm: &VM, address: &Operand, value: &Operand) -> Result<(), ICError>; +} +impl PopInstruction for ItemIntegratedCircuit10 { + /// pop r? + fn execute_pop(&mut self, vm: &VM, r: &Operand) -> Result<(), ICError>; +} +impl PushInstruction for ItemIntegratedCircuit10 { + /// push a(r?|num) + fn execute_push(&mut self, vm: &VM, a: &Operand) -> Result<(), ICError>; +} +impl PutInstruction for ItemIntegratedCircuit10 { + /// put d? address(r?|num) value(r?|num) + fn execute_put( + &mut self, + vm: &VM, + d: &Operand, + address: &Operand, + value: &Operand, + ) -> Result<(), ICError>; +} +impl PutdInstruction for ItemIntegratedCircuit10 { + /// putd id(r?|num) address(r?|num) value(r?|num) + fn execute_putd( + &mut self, + vm: &VM, + id: &Operand, + address: &Operand, + value: &Operand, + ) -> Result<(), ICError>; +} +impl RandInstruction for ItemIntegratedCircuit10 { + /// rand r? + fn execute_rand(&mut self, vm: &VM, r: &Operand) -> Result<(), ICError>; +} +impl RoundInstruction for ItemIntegratedCircuit10 { + /// round r? a(r?|num) + fn execute_round(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl SInstruction for ItemIntegratedCircuit10 { + /// s d? logicType r? + fn execute_s( + &mut self, + vm: &VM, + d: &Operand, + logic_type: &Operand, + r: &Operand, + ) -> Result<(), ICError>; +} +impl SapInstruction for ItemIntegratedCircuit10 { + /// sap r? a(r?|num) b(r?|num) c(r?|num) + fn execute_sap( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError>; +} +impl SapzInstruction for ItemIntegratedCircuit10 { + /// sapz r? a(r?|num) b(r?|num) + fn execute_sapz( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl SbInstruction for ItemIntegratedCircuit10 { + /// sb deviceHash logicType r? + fn execute_sb( + &mut self, + vm: &VM, + device_hash: &Operand, + logic_type: &Operand, + r: &Operand, + ) -> Result<(), ICError>; +} +impl SbnInstruction for ItemIntegratedCircuit10 { + /// sbn deviceHash nameHash logicType r? + fn execute_sbn( + &mut self, + vm: &VM, + device_hash: &Operand, + name_hash: &Operand, + logic_type: &Operand, + r: &Operand, + ) -> Result<(), ICError>; +} +impl SbsInstruction for ItemIntegratedCircuit10 { + /// sbs deviceHash slotIndex logicSlotType r? + fn execute_sbs( + &mut self, + vm: &VM, + device_hash: &Operand, + slot_index: &Operand, + logic_slot_type: &Operand, + r: &Operand, + ) -> Result<(), ICError>; +} +impl SdInstruction for ItemIntegratedCircuit10 { + /// sd id(r?|num) logicType r? + fn execute_sd( + &mut self, + vm: &VM, + id: &Operand, + logic_type: &Operand, + r: &Operand, + ) -> Result<(), ICError>; +} +impl SdnsInstruction for ItemIntegratedCircuit10 { + /// sdns r? d? + fn execute_sdns(&mut self, vm: &VM, r: &Operand, d: &Operand) -> Result<(), ICError>; +} +impl SdseInstruction for ItemIntegratedCircuit10 { + /// sdse r? d? + fn execute_sdse(&mut self, vm: &VM, r: &Operand, d: &Operand) -> Result<(), ICError>; +} +impl SelectInstruction for ItemIntegratedCircuit10 { + /// select r? a(r?|num) b(r?|num) c(r?|num) + fn execute_select( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError>; +} +impl SeqInstruction for ItemIntegratedCircuit10 { + /// seq r? a(r?|num) b(r?|num) + fn execute_seq( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl SeqzInstruction for ItemIntegratedCircuit10 { + /// seqz r? a(r?|num) + fn execute_seqz(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl SgeInstruction for ItemIntegratedCircuit10 { + /// sge r? a(r?|num) b(r?|num) + fn execute_sge( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl SgezInstruction for ItemIntegratedCircuit10 { + /// sgez r? a(r?|num) + fn execute_sgez(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl SgtInstruction for ItemIntegratedCircuit10 { + /// sgt r? a(r?|num) b(r?|num) + fn execute_sgt( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl SgtzInstruction for ItemIntegratedCircuit10 { + /// sgtz r? a(r?|num) + fn execute_sgtz(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl SinInstruction for ItemIntegratedCircuit10 { + /// sin r? a(r?|num) + fn execute_sin(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl SlaInstruction for ItemIntegratedCircuit10 { + /// sla r? a(r?|num) b(r?|num) + fn execute_sla( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl SleInstruction for ItemIntegratedCircuit10 { + /// sle r? a(r?|num) b(r?|num) + fn execute_sle( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl SlezInstruction for ItemIntegratedCircuit10 { + /// slez r? a(r?|num) + fn execute_slez(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl SllInstruction for ItemIntegratedCircuit10 { + /// sll r? a(r?|num) b(r?|num) + fn execute_sll( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl SltInstruction for ItemIntegratedCircuit10 { + /// slt r? a(r?|num) b(r?|num) + fn execute_slt( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl SltzInstruction for ItemIntegratedCircuit10 { + /// sltz r? a(r?|num) + fn execute_sltz(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl SnaInstruction for ItemIntegratedCircuit10 { + /// sna r? a(r?|num) b(r?|num) c(r?|num) + fn execute_sna( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError>; +} +impl SnanInstruction for ItemIntegratedCircuit10 { + /// snan r? a(r?|num) + fn execute_snan(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl SnanzInstruction for ItemIntegratedCircuit10 { + /// snanz r? a(r?|num) + fn execute_snanz(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl SnazInstruction for ItemIntegratedCircuit10 { + /// snaz r? a(r?|num) b(r?|num) + fn execute_snaz( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl SneInstruction for ItemIntegratedCircuit10 { + /// sne r? a(r?|num) b(r?|num) + fn execute_sne( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl SnezInstruction for ItemIntegratedCircuit10 { + /// snez r? a(r?|num) + fn execute_snez(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl SqrtInstruction for ItemIntegratedCircuit10 { + /// sqrt r? a(r?|num) + fn execute_sqrt(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl SraInstruction for ItemIntegratedCircuit10 { + /// sra r? a(r?|num) b(r?|num) + fn execute_sra( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl SrlInstruction for ItemIntegratedCircuit10 { + /// srl r? a(r?|num) b(r?|num) + fn execute_srl( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl SsInstruction for ItemIntegratedCircuit10 { + /// ss d? slotIndex logicSlotType r? + fn execute_ss( + &mut self, + vm: &VM, + d: &Operand, + slot_index: &Operand, + logic_slot_type: &Operand, + r: &Operand, + ) -> Result<(), ICError>; +} +impl SubInstruction for ItemIntegratedCircuit10 { + /// sub r? a(r?|num) b(r?|num) + fn execute_sub( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} +impl TanInstruction for ItemIntegratedCircuit10 { + /// tan r? a(r?|num) + fn execute_tan(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl TruncInstruction for ItemIntegratedCircuit10 { + /// trunc r? a(r?|num) + fn execute_trunc(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl XorInstruction for ItemIntegratedCircuit10 { + /// xor r? a(r?|num) b(r?|num) + fn execute_xor( + &mut self, + vm: &VM, + r: &Operand, + a: &Operand, + b: &Operand, + ) -> Result<(), ICError>; +} diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index 615679a..0a643f4 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -2,14 +2,26 @@ use std::collections::BTreeMap; use crate::{ network::{ConnectionRole, ConnectionType}, - vm::enums::{ - basic_enums::{Class as SlotClass, GasType, SortingClass}, - script_enums::{LogicSlotType, LogicType}, + vm::{ + enums::{ + basic_enums::{Class as SlotClass, GasType, SortingClass}, + script_enums::{LogicSlotType, LogicType}, + }, + object::{ + generic::structs::{ + Generic, GenericItem, GenericItemLogicable, + GenericItemLogicableMemoryReadWriteable, GenericItemLogicableMemoryReadable, + GenericItemStorage, GenericLogicable, GenericLogicableDevice, + GenericLogicableDeviceMemoryReadWriteable, GenericLogicableDeviceMemoryReadable, + GenericStorage, + }, + LogicField, Name, Slot, + }, }, }; use serde_derive::{Deserialize, Serialize}; -use super::{MemoryAccess, ObjectID}; +use super::{stationpedia, MemoryAccess, ObjectID, VMObject}; #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] #[serde(untagged)] @@ -26,7 +38,7 @@ pub enum ObjectTemplate { } impl ObjectTemplate { - fn prefab(&self) -> &PrefabInfo { + pub fn prefab(&self) -> &PrefabInfo { use ObjectTemplate::*; match self { Structure(s) => &s.prefab, @@ -40,6 +52,354 @@ impl ObjectTemplate { ItemLogicMemory(i) => &i.prefab, } } + + fn build(&self, id: ObjectID) -> VMObject { + if let Some(obj) = stationpedia::object_from_prefab_template(&self, id) { + obj + } else { + self.build_generic(id) + } + } + + fn build_generic(&self, id: ObjectID) -> VMObject { + use ObjectTemplate::*; + match self { + Structure(s) => VMObject::new(Generic { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&s.prefab.name), + }), + StructureSlots(s) => VMObject::new(GenericStorage { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&s.prefab.name), + slots: s + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + enabled_logic: Vec::new(), + occupant: None, + }) + .collect(), + }), + StructureLogic(s) => VMObject::new(GenericLogicable { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&s.prefab.name), + fields: s + .logic + .logic_types + .types + .iter() + .map(|(key, access)| { + ( + *key, + LogicField { + field_type: *access, + value: 0.0, + }, + ) + }) + .collect(), + slots: s + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + enabled_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| s_info.slot_types.keys().copied().collect::>()) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), + }), + StructureLogicDevice(s) => VMObject::new(GenericLogicableDevice { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&s.prefab.name), + fields: s + .logic + .logic_types + .types + .iter() + .map(|(key, access)| { + ( + *key, + LogicField { + field_type: *access, + value: 0.0, + }, + ) + }) + .collect(), + slots: s + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + enabled_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| s_info.slot_types.keys().copied().collect::>()) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), + }), + StructureLogicDeviceMemory(s) + if matches!(s.memory.memory_access, MemoryAccess::Read) => + { + VMObject::new(GenericLogicableDeviceMemoryReadable { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&s.prefab.name), + fields: s + .logic + .logic_types + .types + .iter() + .map(|(key, access)| { + ( + *key, + LogicField { + field_type: *access, + value: 0.0, + }, + ) + }) + .collect(), + slots: s + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + enabled_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| s_info.slot_types.keys().copied().collect::>()) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), + memory: vec![0.0; s.memory.memory_size as usize], + }) + } + StructureLogicDeviceMemory(s) => { + VMObject::new(GenericLogicableDeviceMemoryReadWriteable { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&s.prefab.name), + fields: s + .logic + .logic_types + .types + .iter() + .map(|(key, access)| { + ( + *key, + LogicField { + field_type: *access, + value: 0.0, + }, + ) + }) + .collect(), + slots: s + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + enabled_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| s_info.slot_types.keys().copied().collect::>()) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), + memory: vec![0.0; s.memory.memory_size as usize], + }) + } + Item(i) => VMObject::new(GenericItem { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&i.prefab.name), + item_info: i.item.clone(), + parent_slot: None, + }), + ItemSlots(i) => VMObject::new(GenericItemStorage { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&i.prefab.name), + item_info: i.item.clone(), + parent_slot: None, + slots: i + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + enabled_logic: Vec::new(), + occupant: None, + }) + .collect(), + }), + ItemLogic(i) => VMObject::new(GenericItemLogicable { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&i.prefab.name), + item_info: i.item.clone(), + parent_slot: None, + fields: i + .logic + .logic_types + .types + .iter() + .map(|(key, access)| { + ( + *key, + LogicField { + field_type: *access, + value: 0.0, + }, + ) + }) + .collect(), + slots: i + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + enabled_logic: i + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| s_info.slot_types.keys().copied().collect::>()) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), + }), + ItemLogicMemory(i) if matches!(i.memory.memory_access, MemoryAccess::Read) => { + VMObject::new(GenericItemLogicableMemoryReadable { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&i.prefab.name), + item_info: i.item.clone(), + parent_slot: None, + fields: i + .logic + .logic_types + .types + .iter() + .map(|(key, access)| { + ( + *key, + LogicField { + field_type: *access, + value: 0.0, + }, + ) + }) + .collect(), + slots: i + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + enabled_logic: i + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| s_info.slot_types.keys().copied().collect::>()) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), + memory: vec![0.0; i.memory.memory_size as usize], + }) + } + ItemLogicMemory(i) => VMObject::new(GenericItemLogicableMemoryReadWriteable { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&i.prefab.name), + item_info: i.item.clone(), + parent_slot: None, + fields: i + .logic + .logic_types + .types + .iter() + .map(|(key, access)| { + ( + *key, + LogicField { + field_type: *access, + value: 0.0, + }, + ) + }) + .collect(), + slots: i + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + enabled_logic: i + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| s_info.slot_types.keys().copied().collect::>()) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), + memory: vec![0.0; i.memory.memory_size as usize], + }), + } + } } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] @@ -62,7 +422,7 @@ pub struct ObjectInfo { #[serde(rename_all = "camelCase")] pub struct SlotInfo { pub name: String, - pub typ: String, + pub typ: SlotClass, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] @@ -96,7 +456,7 @@ pub struct ItemInfo { #[serde(skip_serializing_if = "Option::is_none")] pub filter_type: Option, pub ingredient: bool, - pub max_quantity: f64, + pub max_quantity: u32, #[serde(skip_serializing_if = "Option::is_none")] pub reagents: Option>, pub slot_class: SlotClass, @@ -271,7 +631,6 @@ mod tests { pub prefabs: BTreeMap, } - #[test] fn all_database_prefabs_parse() -> color_eyre::Result<()> { setup(); diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index 4b19ebc..02295bc 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -1,7 +1,12 @@ +use serde_derive::{Deserialize, Serialize}; + use crate::{ errors::ICError, vm::{ - enums::script_enums::{LogicSlotType, LogicType}, + enums::{ + basic_enums::{Class as SlotClass, GasType, SortingClass}, + script_enums::{LogicSlotType, LogicType}, + }, instructions::Instruction, object::{ errors::{LogicError, MemoryError}, @@ -12,7 +17,13 @@ use crate::{ }, }; -use std::fmt::Debug; +use std::{collections::BTreeMap, fmt::Debug}; + +#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] +pub struct ParentSlotInfo { + pub parent: ObjectID, + pub slot: usize, +} tag_object_traits! { #![object_trait(Object: Debug)] @@ -27,7 +38,13 @@ tag_object_traits! { fn clear_memory(&mut self) -> Result<(), MemoryError>; } - pub trait Logicable { + pub trait Storage { + fn slots_count(&self) -> usize; + fn get_slot(&self, index: usize) -> Option<&Slot>; + fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot>; + } + + pub trait Logicable: Storage { fn prefab_hash(&self) -> i32; /// returns 0 if not set fn name_hash(&self) -> i32; @@ -38,9 +55,6 @@ tag_object_traits! { fn set_logic(&mut self, lt: LogicType, value: f64, force: bool) -> Result<(), LogicError>; fn get_logic(&self, lt: LogicType) -> Result; - fn slots_count(&self) -> usize; - fn get_slot(&self, index: usize) -> Option<&Slot>; - fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot>; fn can_slot_logic_read(&self, slt: LogicSlotType, index: usize) -> bool; fn get_slot_logic(&self, slt: LogicSlotType, index: usize, vm: &VM) -> Result; } @@ -83,7 +97,16 @@ tag_object_traits! { } - + pub trait Item { + fn consumable(&self) -> bool; + fn filter_type(&self) -> Option; + fn ingredient(&self) -> bool; + fn max_quantity(&self) -> u32; + fn reagents(&self) -> Option<&BTreeMap>; + fn slot_class(&self) -> SlotClass; + fn sorting_class(&self) -> SortingClass; + fn parent_slot(&self) -> Option; + } } diff --git a/xtask/src/generate/database.rs b/xtask/src/generate/database.rs index 0d91420..709bfde 100644 --- a/xtask/src/generate/database.rs +++ b/xtask/src/generate/database.rs @@ -469,7 +469,7 @@ pub struct ItemInfo { #[serde(skip_serializing_if = "Option::is_none")] pub filter_type: Option, pub ingredient: bool, - pub max_quantity: f64, + pub max_quantity: u32, #[serde(skip_serializing_if = "Option::is_none")] pub reagents: Option>, pub slot_class: String, @@ -482,7 +482,7 @@ impl From<&stationpedia::Item> for ItemInfo { consumable: item.consumable.unwrap_or(false), filter_type: item.filter_type.clone(), ingredient: item.ingredient.unwrap_or(false), - max_quantity: item.max_quantity.unwrap_or(1.0), + max_quantity: item.max_quantity.unwrap_or(1.0) as u32, reagents: item .reagents .as_ref() diff --git a/xtask/src/generate/instructions.rs b/xtask/src/generate/instructions.rs index 0f5670b..2661f33 100644 --- a/xtask/src/generate/instructions.rs +++ b/xtask/src/generate/instructions.rs @@ -138,9 +138,13 @@ fn write_instruction_trait( let operands = operand_names(&info.example) .iter() .map(|name| { + let mut n: &str = name; + if n == "str" { + n = "string"; + } format!( "{}: &crate::vm::instructions::operands::Operand", - name.to_case(Case::Snake) + n.to_case(Case::Snake) ) }) .collect::>() @@ -176,19 +180,27 @@ fn write_instruction_interface_trait(writer: &mut T) -> color use crate::vm::object::traits::{{Logicable, MemoryWritable, SourceCode}};\n\ use crate::errors::ICError; \n\ pub trait IntegratedCircuit: Logicable + MemoryWritable + SourceCode {{\n \ - fn get_instruciton_pointer(&self) -> usize;\n \ - fn set_next_instruction(&mut self, next_instruction: usize);\n \ + fn get_instruction_pointer(&self) -> f64;\n \ + fn set_next_instruction(&mut self, next_instruction: f64);\n \ + fn set_next_instruction_relative(&mut self, offset: f64) {{\n \ + self.set_next_instruction(self.get_instruction_pointer() + offset);\n \ + }}\n \ fn reset(&mut self);\n \ fn get_real_target(&self, indirection: u32, target: u32) -> Result;\n \ fn get_register(&self, indirection: u32, target: u32) -> Result;\n \ fn set_register(&mut self, indirection: u32, target: u32, val: f64) -> Result;\n \ fn set_return_address(&mut self, addr: f64);\n \ + fn al(&mut self) {{\n \ + self.set_return_address(self.get_instruction_pointer() + 1.0);\n \ + }}\n \ fn push_stack(&mut self, val: f64) -> Result;\n \ fn pop_stack(&mut self) -> Result;\n \ fn peek_stack(&self) -> Result;\n \ + fn get_stack(&self, addr: f64) -> Result;\n \ + fn put_stack(&self, addr: f64, val: f64) -> Result;\n \ fn get_aliases(&self) -> &BTreeMap;\n \ fn get_defines(&self) -> &BTreeMap;\n \ - fn get_lables(&self) -> &BTreeMap;\n\ + fn get_labels(&self) -> &BTreeMap;\n\ }}\n\ " )?; From 8288d8ae6fd5a7a57f0c7943891a6276c3c9d133 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sun, 12 May 2024 02:08:25 -0700 Subject: [PATCH 12/50] refactor(vm) start reimpl of VM struct using object trait --- ic10emu/src/device.rs | 10 +- ic10emu/src/errors.rs | 18 +- ic10emu/src/interpreter.rs | 12 +- ic10emu/src/network.rs | 244 ++++-- ic10emu/src/vm.rs | 756 ++++++++++-------- ic10emu/src/vm/instructions/operands.rs | 37 +- ic10emu/src/vm/instructions/traits.rs | 27 +- ic10emu/src/vm/object.rs | 13 +- ic10emu/src/vm/object/errors.rs | 4 +- ic10emu/src/vm/object/generic/macros.rs | 18 +- ic10emu/src/vm/object/generic/structs.rs | 15 +- ic10emu/src/vm/object/generic/traits.rs | 50 +- ic10emu/src/vm/object/macros.rs | 47 +- .../structs/integrated_circuit.rs | 544 ++++++++----- ic10emu/src/vm/object/templates.rs | 145 +++- ic10emu/src/vm/object/traits.rs | 97 ++- ic10emu_wasm/src/lib.rs | 34 +- xtask/src/generate/instructions.rs | 31 +- 18 files changed, 1362 insertions(+), 740 deletions(-) diff --git a/ic10emu/src/device.rs b/ic10emu/src/device.rs index 87ac742..7219b52 100644 --- a/ic10emu/src/device.rs +++ b/ic10emu/src/device.rs @@ -522,7 +522,7 @@ impl 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(); + let ic = vm.ic_holders.get(ic_id).expect("our own ic to exist").borrow(); copy.insert( LogicType::LineNumber, LogicField { @@ -642,7 +642,7 @@ impl Device { pub fn get_field(&self, typ: LogicType, vm: &VM) -> Result { if typ == LogicType::LineNumber && self.ic.is_some() { let ic = vm - .ics + .ic_holders .get(&self.ic.unwrap()) .ok_or_else(|| ICError::UnknownDeviceID(self.ic.unwrap() as f64))? .borrow(); @@ -673,7 +673,7 @@ impl Device { Err(ICError::ReadOnlyField(typ.to_string())) } else if typ == LogicType::LineNumber && self.ic.is_some() { let ic = vm - .ics + .ic_holders .get(&self.ic.unwrap()) .ok_or_else(|| ICError::UnknownDeviceID(self.ic.unwrap() as f64))? .borrow(); @@ -714,7 +714,7 @@ impl Device { && typ == LogicSlotType::LineNumber { let ic = vm - .ics + .ic_holders .get(&self.ic.unwrap()) .ok_or_else(|| ICError::UnknownDeviceID(self.ic.unwrap() as f64))? .borrow(); @@ -736,7 +736,7 @@ impl Device { let mut fields = slot.get_fields(); if slot.typ == SlotClass::ProgrammableChip && slot.occupant.is_some() && self.ic.is_some() { let ic = vm - .ics + .ic_holders .get(&self.ic.unwrap()) .ok_or_else(|| ICError::UnknownDeviceID(self.ic.unwrap() as f64))? .borrow(); diff --git a/ic10emu/src/errors.rs b/ic10emu/src/errors.rs index c9d3a8e..da49f27 100644 --- a/ic10emu/src/errors.rs +++ b/ic10emu/src/errors.rs @@ -1,4 +1,4 @@ -use crate::vm::instructions::enums::InstructionOp; +use crate::vm::{instructions::enums::InstructionOp, object::{errors::{LogicError, MemoryError}, ObjectID}}; use serde_derive::{Deserialize, Serialize}; use std::error::Error as StdError; use std::fmt::Display; @@ -17,7 +17,7 @@ pub enum VMError { #[error("ic encountered an error: {0}")] LineError(#[from] LineError), #[error("invalid network id {0}")] - InvalidNetwork(u32), + 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")] @@ -26,6 +26,12 @@ pub enum VMError { IdsInUse(Vec), #[error("atempt to use a set of id's with duplicates: id(s) {0:?} exsist 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), } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -98,6 +104,10 @@ impl ParseError { pub enum ICError { #[error("error compiling code: {0}")] ParseError(#[from] ParseError), + #[error("{0}")] + LogicError(#[from] LogicError), + #[error("{0}")] + MemoryError(#[from] MemoryError), #[error("duplicate label {0}")] DuplicateLabel(String), #[error("instruction pointer out of range: '{0}'")] @@ -138,10 +148,6 @@ pub enum ICError { 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}'")] diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index 181fe6d..b774506 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -2030,7 +2030,7 @@ impl IC { if ic_id == &this.id { this.peek_addr(addr) } else { - let ic = vm.ics.get(ic_id).unwrap().borrow(); + let ic = vm.ic_holders.get(ic_id).unwrap().borrow(); ic.peek_addr(addr) } }?; @@ -2063,7 +2063,7 @@ impl IC { if ic_id == &this.id { this.peek_addr(addr) } else { - let ic = vm.ics.get(ic_id).unwrap().borrow(); + let ic = vm.ic_holders.get(ic_id).unwrap().borrow(); ic.peek_addr(addr) } }?; @@ -2092,7 +2092,7 @@ impl IC { if ic_id == &this.id { this.poke(addr, val)?; } else { - let ic = vm.ics.get(ic_id).unwrap().borrow(); + let ic = vm.ic_holders.get(ic_id).unwrap().borrow(); ic.poke(addr, val)?; } vm.set_modified(device_id); @@ -2120,7 +2120,7 @@ impl IC { if ic_id == &this.id { this.poke(addr, val)?; } else { - let ic = vm.ics.get(ic_id).unwrap().borrow(); + let ic = vm.ic_holders.get(ic_id).unwrap().borrow(); ic.poke(addr, val)?; } vm.set_modified(device_id as u32); @@ -2532,7 +2532,7 @@ mod tests { let device_ref = device.borrow(); device_ref.ic.unwrap() }; - let ic_chip = vm.ics.get(&ic_id).unwrap().borrow(); + let ic_chip = vm.ic_holders.get(&ic_id).unwrap().borrow(); vm.set_code( ic, r#"lb r0 HASH("ItemActiveVent") On Sum @@ -2561,7 +2561,7 @@ mod tests { let device_ref = device.borrow(); device_ref.ic.unwrap() }; - let ic_chip = vm.ics.get(&ic_id).unwrap().borrow(); + let ic_chip = vm.ic_holders.get(&ic_id).unwrap().borrow(); vm.set_code( ic, r#"push 100 diff --git a/ic10emu/src/network.rs b/ic10emu/src/network.rs index 831fa8c..41230b9 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -1,11 +1,15 @@ use std::{collections::HashSet, ops::Deref}; +use crate::vm::{ + enums::script_enums::LogicType, + object::{errors::LogicError, macros::ObjectInterface, traits::*, Name, ObjectID}, +}; +use itertools::Itertools; +use macro_rules_attribute::derive; use serde_derive::{Deserialize, Serialize}; use strum_macros::{AsRefStr, EnumIter}; use thiserror::Error; -use itertools::Itertools; - #[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)] pub enum CableConnectionType { Power, @@ -107,14 +111,171 @@ impl Connection { } } -#[derive(Debug, Serialize, Deserialize)] -pub struct Network { - pub id: u32, - pub devices: HashSet, - pub power_only: HashSet, +#[derive(ObjectInterface!, Debug, Serialize, Deserialize)] +#[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, + /// data enabled objects (must be devices) + pub devices: HashSet, + /// power only connections + pub power_only: HashSet, + /// channel data pub channels: [f64; 8], } +impl Storage for CableNetwork { + 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 + } +} + +impl Logicable for CableNetwork { + 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::*; + match lt { + Channel0 | Channel1 | Channel2 | Channel3 | Channel4 | Channel5 | Channel6 + | Channel7 => true, + _ => false, + } + } + fn can_logic_write(&self, lt: LogicType) -> bool { + use LogicType::*; + match lt { + Channel0 | Channel1 | Channel2 | Channel3 | Channel4 | Channel5 | Channel6 + | Channel7 => true, + _ => false, + } + } + 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: crate::vm::enums::script_enums::LogicSlotType, + index: usize, + ) -> bool { + false + } + fn get_slot_logic( + &self, + slt: crate::vm::enums::script_enums::LogicSlotType, + index: usize, + vm: &crate::vm::VM, + ) -> Result { + Err(LogicError::CantSlotRead(slt, index)) + } +} + +impl Network for CableNetwork { + fn contains(&self, id: &ObjectID) -> bool { + self.devices.contains(id) || self.power_only.contains(id) + } + + fn contains_all(&self, ids: &[ObjectID]) -> bool { + ids.iter().all(|id| self.contains(id)) + } + + fn contains_data(&self, id: &ObjectID) -> bool { + self.devices.contains(id) + } + + fn contains_all_data(&self, ids: &[ObjectID]) -> bool { + ids.iter().all(|id| self.contains_data(id)) + } + + fn contains_power(&self, id: &ObjectID) -> bool { + self.power_only.contains(id) + } + + fn contains_all_power(&self, ids: &[ObjectID]) -> bool { + ids.iter().all(|id| self.contains_power(id)) + } + + fn data_visible(&self, source: &ObjectID) -> Vec { + if self.contains_data(source) { + self.devices + .iter() + .filter(|id| id != &source) + .copied() + .collect_vec() + } else { + Vec::new() + } + } + + fn add_data(&mut self, id: ObjectID) -> bool { + self.devices.insert(id) + } + + fn add_power(&mut self, id: ObjectID) -> bool { + self.power_only.insert(id) + } + + fn remove_all(&mut self, id: ObjectID) -> bool { + self.devices.remove(&id) || self.power_only.remove(&id) + } + fn remove_data(&mut self, id: ObjectID) -> bool { + self.devices.remove(&id) + } + + fn remove_power(&mut self, id: ObjectID) -> bool { + self.devices.remove(&id) + } +} + #[derive(Debug, Clone, Serialize, Deserialize)] pub struct FrozenNetwork { pub id: u32, @@ -125,7 +286,7 @@ pub struct FrozenNetwork { impl From for FrozenNetwork where - T: Deref, + T: Deref, { fn from(value: T) -> Self { FrozenNetwork { @@ -137,10 +298,12 @@ where } } -impl From for Network { +impl From for CableNetwork { fn from(value: FrozenNetwork) -> Self { - Network { + CableNetwork { id: value.id, + prefab: Name::new(""), + name: Name::new(""), devices: value.devices.into_iter().collect(), power_only: value.power_only.into_iter().collect(), channels: value.channels, @@ -154,71 +317,18 @@ pub enum NetworkError { ChannelIndexOutOfRange, } -impl Network { +impl CableNetwork { pub fn new(id: u32) -> Self { - Network { + CableNetwork { id, + prefab: Name::new(""), + name: Name::new(""), devices: HashSet::new(), power_only: HashSet::new(), channels: [f64::NAN; 8], } } - pub fn contains(&self, id: &u32) -> bool { - self.devices.contains(id) || self.power_only.contains(id) - } - - pub fn contains_all(&self, ids: &[u32]) -> bool { - ids.iter().all(|id| self.contains(id)) - } - - pub fn contains_data(&self, id: &u32) -> bool { - self.devices.contains(id) - } - - pub fn contains_all_data(&self, ids: &[u32]) -> bool { - ids.iter().all(|id| self.contains_data(id)) - } - - pub fn contains_power(&self, id: &u32) -> bool { - self.power_only.contains(id) - } - - pub fn contains_all_power(&self, ids: &[u32]) -> bool { - ids.iter().all(|id| self.contains_power(id)) - } - - pub fn data_visible(&self, source: &u32) -> Vec { - if self.contains_data(source) { - self.devices - .iter() - .filter(|id| id != &source) - .copied() - .collect_vec() - } else { - Vec::new() - } - } - - pub fn add_data(&mut self, id: u32) -> bool { - self.devices.insert(id) - } - - pub fn add_power(&mut self, id: u32) -> bool { - self.power_only.insert(id) - } - - pub fn remove_all(&mut self, id: u32) -> bool { - self.devices.remove(&id) || self.power_only.remove(&id) - } - pub fn remove_data(&mut self, id: u32) -> bool { - self.devices.remove(&id) - } - - pub fn remove_power(&mut self, id: u32) -> bool { - self.devices.remove(&id) - } - 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 302b2ad..da5ca04 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -6,8 +6,11 @@ use crate::{ device::{Device, DeviceTemplate, SlotOccupant, SlotOccupantTemplate}, errors::{ICError, VMError}, interpreter::{self, FrozenIC}, - network::{CableConnectionType, Connection, FrozenNetwork, Network}, - vm::enums::script_enums::{LogicBatchMethod as BatchMode, LogicSlotType, LogicType}, + network::{CableConnectionType, CableNetwork, Connection, FrozenNetwork}, + vm::{ + enums::script_enums::{LogicBatchMethod as BatchMode, LogicSlotType, LogicType}, + object::{templates::ObjectTemplate, traits::*, BoxedObject, ObjectID, VMObject}, + }, }; use std::{ cell::RefCell, @@ -20,18 +23,37 @@ use serde_derive::{Deserialize, Serialize}; #[derive(Debug)] pub struct VM { - pub ics: BTreeMap>>, - pub devices: BTreeMap>>, - pub networks: BTreeMap>>, - pub default_network: u32, + pub objects: BTreeMap, + pub ic_holders: RefCell>, + pub networks: BTreeMap, + pub default_network_key: ObjectID, + pub wireless_transmitters: RefCell>, + pub wireless_receivers: RefCell>, id_space: IdSpace, network_id_space: IdSpace, random: Rc>, - /// list of device id's touched on the last operation - operation_modified: RefCell>, - #[allow(unused)] - objects: Vec, + /// list of object id's touched on the last operation + operation_modified: RefCell>, +} + +#[derive(Debug, Default)] +pub struct VMTransationNetwork { + pub objects: Vec, + pub power_only: Vec, +} + +#[derive(Debug)] +/// used as a temp structure to add objects in case +/// there are errors on nested templates +pub struct VMTransation { + pub objects: BTreeMap, + pub ic_holders: Vec, + pub default_network_key: ObjectID, + pub wireless_transmitters: Vec, + pub wireless_receivers: Vec, + pub id_space: IdSpace, + pub networks: BTreeMap, } impl Default for VM { @@ -45,216 +67,82 @@ impl VM { 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 default_network = VMObject::new(CableNetwork::new(default_network_key)); let mut networks = BTreeMap::new(); networks.insert(default_network_key, default_network); let mut vm = VM { - ics: BTreeMap::new(), - devices: BTreeMap::new(), + objects: BTreeMap::new(), + ic_holders: RefCell::new(Vec::new()), networks, - default_network: default_network_key, + default_network_key, + wireless_transmitters: RefCell::new(Vec::new()), + wireless_receivers: RefCell::new(Vec::new()), id_space, network_id_space, random: Rc::new(RefCell::new(crate::rand_mscorlib::Random::new())), operation_modified: RefCell::new(Vec::new()), - objects: Vec::new(), }; - let _ = vm.add_ic(None); vm } - fn new_device(&mut self) -> Device { - Device::new(self.id_space.next()) - } + pub fn add_device_from_template(&mut self, template: ObjectTemplate) -> Result { + let mut transaction = VMTransation::new(self); - 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) - } + let obj_id = transaction.add_device_from_template(template)?; - pub fn random_f64(&self) -> f64 { - self.random.borrow_mut().next_f64() - } + let transation_ids = transaction.id_space.in_use_ids(); + self.id_space.use_new_ids(&transation_ids); - 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)); + self.objects.extend(transaction.objects); + self.wireless_transmitters + .borrow_mut() + .extend(transaction.wireless_transmitters); + self.wireless_receivers + .borrow_mut() + .extend(transaction.wireless_receivers); + self.ic_holders.borrow_mut().extend(transaction.ic_holders); + for (net_id, trans_net) in transaction.networks.into_iter() { + let net = self + .networks + .get(&net_id) + .expect(&format!( + "desync between vm and transation networks: {net_id}" + )) + .borrow_mut() + .as_mut_network() + .expect(&format!("non network network: {net_id}")); + for id in trans_net.objects { + net.add_data(id); } - } - 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; - - 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) - } else { - Some(self.default_network) - }, - ); - } - Ok(id) - } - - 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) - } else { - Some(self.default_network) - }, - ); - } - Ok(id) - } - - 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)); - } + for id in trans_net.power_only { + net.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_id) } 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)))); + .insert(next_id, Rc::new(RefCell::new(CableNetwork::new(next_id)))); next_id } - pub fn get_default_network(&self) -> Rc> { - self.networks.get(&self.default_network).cloned().unwrap() + pub fn get_default_network(&self) -> Rc> { + self.networks + .get(&self.default_network_key) + .cloned() + .unwrap() } - pub fn get_network(&self, id: u32) -> Option>> { + pub fn get_network(&self, id: u32) -> Option>> { self.networks.get(&id).cloned() } pub fn remove_ic(&mut self, id: u32) { - if self.ics.remove(&id).is_some() { + if self.ic_holders.remove(&id).is_some() { self.devices.remove(&id); } } @@ -267,7 +155,7 @@ impl VM { .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)| { + self.ic_holders.iter().for_each(|(_id, ic)| { let mut ic_ref = ic.borrow_mut(); if ic_ref.device == old_id { ic_ref.device = new_id; @@ -298,7 +186,7 @@ impl VM { .borrow(); let ic_id = *device.ic.as_ref().ok_or(VMError::NoIC(id))?; let ic = self - .ics + .ic_holders .get(&ic_id) .ok_or(VMError::UnknownIcId(ic_id))? .borrow(); @@ -317,7 +205,7 @@ impl VM { .borrow(); let ic_id = *device.ic.as_ref().ok_or(VMError::NoIC(id))?; let ic = self - .ics + .ic_holders .get(&ic_id) .ok_or(VMError::UnknownIcId(ic_id))? .borrow_mut(); @@ -342,7 +230,7 @@ impl VM { }; self.set_modified(id); let ic = self - .ics + .ic_holders .get(&ic_id) .ok_or(VMError::UnknownIcId(ic_id))? .clone(); @@ -357,7 +245,7 @@ impl VM { 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 + .ic_holders .get(&ic_id) .ok_or(VMError::UnknownIcId(ic_id))? .clone(); @@ -381,51 +269,56 @@ impl VM { Ok(true) } - pub fn set_modified(&self, id: u32) { + pub fn set_modified(&self, 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))?; + pub fn reset_ic(&self, id: ObjectID) -> Result { + let obj = self.objects.get(&id).ok_or(VMError::UnknownId(id))?.clone(); + let ic_id = obj + .borrow() + .as_mut_circuit_holder() + .map(|holder| holder.get_ic()) + .flatten() + .ok_or(VMError::NoIC(id))?; let ic = self - .ics + .objects .get(&ic_id) .ok_or(VMError::UnknownIcId(ic_id))? - .clone(); - ic.borrow().ic.replace(0); - ic.borrow().reset(); + .borrow_mut() + .as_mut_programmable() + .ok_or(VMError::UnknownIcId(ic_id))?; + ic.reset(); Ok(true) } - pub fn get_device(&self, id: u32) -> Option>> { - self.devices.get(&id).cloned() + pub fn get_object(&self, id: ObjectID) -> Option { + self.objects.get(&id).cloned() } pub fn batch_device( &self, - source: u32, + source: ObjectID, prefab_hash: f64, name: Option, - ) -> impl Iterator>> { - self.devices + ) -> impl Iterator { + self.objects .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)) + 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().name().hash as f64)) && self.devices_on_same_network(&[source, **id]) }) .map(|(_, d)| d) } - pub fn get_device_same_network(&self, source: u32, other: u32) -> Option>> { + pub fn get_device_same_network(&self, source: ObjectID, other: ObjectID) -> Option { if self.devices_on_same_network(&[source, other]) { - self.get_device(other) + self.get_object(other) } else { None } @@ -436,36 +329,60 @@ impl VM { 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 val = network + .borrow_mut() + .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> { + pub fn set_network_channel( + &self, + id: ObjectID, + channel: usize, + val: f64, + ) -> Result<(), ICError> { let network = self.networks.get(&(id)).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 { + pub fn devices_on_same_network(&self, ids: &[ObjectID]) -> bool { for net in self.networks.values() { - if net.borrow().contains_all_data(ids) { + 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 + pub fn visible_devices(&self, source: ObjectID) -> Vec { self.networks .values() .filter_map(|net| { - if net.borrow().contains_data(&source) { - Some(net.borrow().data_visible(&source)) + let net_ref = net.borrow().as_network().expect("non-network network"); + if net_ref.contains_data(&source) { + Some(net_ref.data_visible(&source)) } else { None } @@ -473,82 +390,92 @@ impl VM { .concat() } - pub fn set_pin(&self, id: u32, pin: usize, val: Option) -> Result { - let Some(device) = self.devices.get(&id) else { + pub fn set_pin(&self, id: u32, pin: usize, val: Option) -> Result { + let Some(obj) = self.objects.get(&id) else { return Err(VMError::UnknownId(id)); }; if let Some(other_device) = val { - if !self.devices.contains_key(&other_device) { + if !self.objects.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 Some(device) = obj.borrow_mut().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) } } pub fn set_device_connection( &self, - id: u32, + id: ObjectID, connection: usize, - target_net: Option, + target_net: Option, ) -> Result { - let Some(device) = self.devices.get(&id) else { + let Some(obj) = self.objects.get(&id) else { return Err(VMError::UnknownId(id)); }; - if connection >= device.borrow().connections.len() { - let conn_len = device.borrow().connections.len(); + let Some(device) = obj.borrow_mut().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(connection, 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.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() + .expect("non-network network") + .remove_power(id); + } + _ => { + network + .borrow_mut() + .as_mut_network() + .expect("non-network network") + .remove_data(id); } } } } } - let mut device_ref = device.borrow_mut(); - let connections = &mut device_ref.connections; + let Connection::CableNetwork { ref mut net, ref typ, @@ -560,10 +487,18 @@ impl VM { if let Some(network) = self.networks.get(&target_net) { match typ { CableConnectionType::Power => { - network.borrow_mut().add_power(id); + network + .borrow_mut() + .as_mut_network() + .expect("non-network network") + .add_power(id); } _ => { - network.borrow_mut().add_data(id); + network + .borrow_mut() + .as_mut_network() + .expect("non-network network") + .add_data(id); } } } else { @@ -574,21 +509,31 @@ impl VM { Ok(true) } - pub fn remove_device_from_network(&self, id: u32, network_id: u32) -> Result { + pub fn remove_device_from_network( + &self, + id: ObjectID, + network_id: ObjectID, + ) -> Result { if let Some(network) = self.networks.get(&network_id) { - let Some(device) = self.devices.get(&id) else { + let Some(obj) = self.objects.get(&id) else { return Err(VMError::UnknownId(id)); }; - let mut device_ref = device.borrow_mut(); + let Some(device) = obj.borrow_mut().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() + .expect("non-network network") + .remove_all(id); Ok(true) } else { Err(VMError::InvalidNetwork(network_id)) @@ -597,7 +542,7 @@ impl VM { pub fn set_batch_device_field( &self, - source: u32, + source: ObjectID, prefab: f64, typ: LogicType, val: f64, @@ -605,17 +550,20 @@ impl VM { ) -> Result<(), ICError> { self.batch_device(source, prefab, None) .map(|device| { - self.set_modified(device.borrow().id); + self.set_modified(*device.borrow().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() } pub fn set_batch_device_slot_field( &self, - source: u32, + source: ObjectID, prefab: f64, index: f64, typ: LogicSlotType, @@ -624,17 +572,20 @@ impl VM { ) -> Result<(), ICError> { self.batch_device(source, prefab, None) .map(|device| { - self.set_modified(device.borrow().id); + self.set_modified(*device.borrow().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, self, write_readonly) + .map_err(Into::into) }) .try_collect() } pub fn set_batch_name_device_field( &self, - source: u32, + source: ObjectID, prefab: f64, name: f64, typ: LogicType, @@ -643,24 +594,34 @@ impl VM { ) -> Result<(), ICError> { self.batch_device(source, prefab, Some(name)) .map(|device| { - self.set_modified(device.borrow().id); + self.set_modified(*device.borrow().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() } pub fn get_batch_device_field( &self, - source: u32, + source: ObjectID, prefab: f64, typ: LogicType, mode: BatchMode, ) -> 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)) @@ -668,7 +629,7 @@ impl VM { pub fn get_batch_name_device_field( &self, - source: u32, + source: ObjectID, prefab: f64, name: f64, typ: LogicType, @@ -676,7 +637,14 @@ impl VM { ) -> 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)) @@ -684,7 +652,7 @@ impl VM { pub fn get_batch_name_device_slot_field( &self, - source: u32, + source: ObjectID, prefab: f64, name: f64, index: f64, @@ -693,7 +661,14 @@ impl VM { ) -> 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, self) + .map_err(Into::into) + }) .filter_ok(|val| !val.is_nan()) .collect::, ICError>>()?; Ok(mode.apply(&samples)) @@ -701,7 +676,7 @@ impl VM { pub fn get_batch_device_slot_field( &self, - source: u32, + source: ObjectID, prefab: f64, index: f64, typ: LogicSlotType, @@ -709,52 +684,72 @@ impl VM { ) -> 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, self) + .map_err(Into::into) + }) .filter_ok(|val| !val.is_nan()) .collect::, ICError>>()?; Ok(mode.apply(&samples)) } - pub fn remove_device(&mut self, id: u32) -> Result<(), VMError> { - let Some(device) = self.devices.remove(&id) else { + pub fn remove_object(&mut self, id: ObjectID) -> Result<(), VMError> { + let Some(obj) = self.objects.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.get(net) { + network + .borrow_mut() + .as_mut_network() + .expect("non-network network") + .remove_all(id); + } } } - } - if let Some(ic_id) = device.borrow().ic { - let _ = self.ics.remove(&ic_id); + if let Some(_) = device.as_circuit_holder() { + self.ic_holders.borrow_mut().retain(|a| *a != id); + } } self.id_space.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 pub fn set_slot_occupant( &mut self, - id: u32, + id: ObjectID, index: usize, - template: SlotOccupantTemplate, - ) -> Result<(), VMError> { - let Some(device) = self.devices.get(&id) else { + target: Option, + quantity: u32, + ) -> Result, VMError> { + let Some(obj) = self.objects.get(&id) else { return Err(VMError::UnknownId(id)); }; - let mut device_ref = device.borrow_mut(); - let slot = device_ref - .slots - .get_mut(index) + // FIXME: check that object has storage and object to be added is an item + // need to move parentage and remove object from it former slot if it has one + + let Some(storage) = obj.borrow_mut().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(id) = template.id.as_ref() { - self.id_space.use_id(*id)?; - } + if + - 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); } @@ -782,7 +777,11 @@ impl VM { pub fn save_vm_state(&self) -> FrozenVM { FrozenVM { - ics: self.ics.values().map(|ic| ic.borrow().into()).collect(), + ics: self + .ic_holders + .values() + .map(|ic| ic.borrow().into()) + .collect(), devices: self .devices .values() @@ -793,12 +792,12 @@ impl VM { .values() .map(|network| network.borrow().into()) .collect(), - default_network: self.default_network, + default_network: self.default_network_key, } } pub fn restore_vm_state(&mut self, state: FrozenVM) -> Result<(), VMError> { - self.ics.clear(); + self.ic_holders.clear(); self.devices.clear(); self.networks.clear(); self.id_space.reset(); @@ -825,7 +824,7 @@ impl VM { self.network_id_space .use_ids(&state.networks.iter().map(|net| net.id).collect_vec())?; - self.ics = state + self.ic_holders = state .ics .into_iter() .map(|ic| (ic.id, Rc::new(RefCell::new(ic.into())))) @@ -843,11 +842,95 @@ impl VM { .into_iter() .map(|network| (network.id, Rc::new(RefCell::new(network.into())))) .collect(); - self.default_network = state.default_network; + self.default_network_key = state.default_network; Ok(()) } } +impl VMTransation { + pub fn new(vm: &VM) -> Self { + VMTransation { + objects: BTreeMap::new(), + ic_holders: Vec::new(), + default_network_key: vm.default_network_key, + wireless_transmitters: Vec::new(), + wireless_receivers: Vec::new(), + id_space: vm.id_space.clone(), + networks: vm + .networks + .keys() + .map(|net_id| (*net_id, VMTransationNetwork::default())) + .collect(), + } + } + + pub fn add_device_from_template( + &mut self, + template: ObjectTemplate, + ) -> Result { + for net_id in &template.connected_networks() { + if !self.networks.contains_key(net_id) { + return Err(VMError::InvalidNetwork(*net_id)); + } + } + + let obj_id = if let Some(obj_id) = template.object().map(|info| info.id).flatten() { + self.id_space.use_id(obj_id)?; + obj_id + } else { + self.id_space.next() + }; + + let obj = template.build(obj_id); + + if let Some(storage) = obj.borrow_mut().as_mut_storage() { + for (slot_index, occupant_template) in + template.templates_from_slots().into_iter().enumerate() + { + if let Some(occupant_template) = occupant_template { + let occupant_id = self.add_device_from_template(occupant_template)?; + storage + .get_slot_mut(slot_index) + .expect(&format!("object storage slots out of sync with template which built it: {slot_index}")) + .occupant = Some(occupant_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.ic_holders.push(obj_id); + } + if let Some(device) = obj.borrow_mut().as_mut_device() { + for conn in device.connection_list().iter() { + if let Connection::CableNetwork { + net: Some(net_id), + typ, + } = conn + { + if let Some(net) = self.networks.get_mut(net_id) { + match typ { + CableConnectionType::Power => net.power_only.push(obj_id), + _ => net.objects.push(obj_id), + } + } else { + return Err(VMError::InvalidNetwork(*net_id)); + } + } + } + } + + self.objects.insert(obj_id, obj); + + Ok(obj_id) + } +} + #[derive(Debug, Clone, Serialize, Deserialize)] pub struct FrozenVM { pub ics: Vec, @@ -876,10 +959,10 @@ impl BatchMode { } } -#[derive(Debug)] +#[derive(Debug, Clone)] struct IdSpace { - next: u32, - in_use: HashSet, + next: ObjectID, + in_use: HashSet, } impl Default for IdSpace { @@ -896,14 +979,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 { @@ -914,10 +1005,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 @@ -938,7 +1029,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); } diff --git a/ic10emu/src/vm/instructions/operands.rs b/ic10emu/src/vm/instructions/operands.rs index 9da8199..ac270e2 100644 --- a/ic10emu/src/vm/instructions/operands.rs +++ b/ic10emu/src/vm/instructions/operands.rs @@ -1,14 +1,15 @@ use crate::errors::ICError; use crate::interpreter; -use crate::vm::enums::script_enums::{ - LogicBatchMethod as BatchMode, LogicReagentMode as ReagentMode, LogicSlotType, LogicType, +use crate::vm::{ + enums::script_enums::{ + LogicBatchMethod as BatchMode, LogicReagentMode as ReagentMode, LogicSlotType, LogicType, + }, + instructions::enums::InstructionOp, + object::traits::IntegratedCircuit, }; -use crate::vm::instructions::enums::InstructionOp; use serde_derive::{Deserialize, Serialize}; use strum::EnumProperty; -use super::traits::IntegratedCircuit; - #[derive(PartialEq, Eq, Debug, Clone, Copy, Serialize, Deserialize)] pub enum Device { Db, @@ -191,28 +192,14 @@ impl Operand { ) -> Result<(Option, Option), 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(ICError::DeviceIndexOutOfRange(p as f64)) - .copied()?; - Ok((dp, connection)) - } + Device::Db => Ok((Some(0), connection)), + Device::Numbered(p) => Ok((Some(p), connection)), Device::Indirect { indirection, target, } => { let val = ic.get_register(indirection, target)?; - let dp = ic - .pins - .borrow() - .get(val as usize) - .ok_or(ICError::DeviceIndexOutOfRange(val)) - .copied()?; - Ok((dp, connection)) + Ok((Some(val as u32), connection)) } }, Operand::Identifier(id) => Err(ICError::UnknownIdentifier(id.name.to_string())), @@ -287,11 +274,11 @@ impl Operand { pub fn translate_alias(&self, ic: &IC) -> Self { match &self { Operand::Identifier(id) | Operand::Type { identifier: id, .. } => { - if let Some(alias) = ic.aliases.borrow().get(&id.name) { + if let Some(alias) = ic.get_aliases().get(&id.name) { alias.clone() - } else if let Some(define) = ic.defines.borrow().get(&id.name) { + } else if let Some(define) = ic.get_defines().get(&id.name) { Operand::Number(Number::Float(*define)) - } else if let Some(label) = ic.program.borrow().labels.get(&id.name) { + } else if let Some(label) = ic.get_labels().get(&id.name) { Operand::Number(Number::Float(*label as f64)) } else { self.clone() diff --git a/ic10emu/src/vm/instructions/traits.rs b/ic10emu/src/vm/instructions/traits.rs index bb9fe67..e7bc54d 100644 --- a/ic10emu/src/vm/instructions/traits.rs +++ b/ic10emu/src/vm/instructions/traits.rs @@ -9,32 +9,7 @@ // // ================================================= -use crate::errors::ICError; -use crate::vm::object::traits::{Logicable, MemoryWritable, SourceCode}; -use std::collections::BTreeMap; -pub trait IntegratedCircuit: Logicable + MemoryWritable + SourceCode { - fn get_instruction_pointer(&self) -> f64; - fn set_next_instruction(&mut self, next_instruction: f64); - fn set_next_instruction_relative(&mut self, offset: f64) { - self.set_next_instruction(self.get_instruction_pointer() + offset); - } - fn reset(&mut self); - fn get_real_target(&self, indirection: u32, target: u32) -> Result; - fn get_register(&self, indirection: u32, target: u32) -> Result; - fn set_register(&mut self, indirection: u32, target: u32, val: f64) -> Result; - fn set_return_address(&mut self, addr: f64); - fn al(&mut self) { - self.set_return_address(self.get_instruction_pointer() + 1.0); - } - fn push_stack(&mut self, val: f64) -> Result; - fn pop_stack(&mut self) -> Result; - fn peek_stack(&self) -> Result; - fn get_stack(&self, addr: f64) -> Result; - fn put_stack(&self, addr: f64, val: f64) -> Result; - fn get_aliases(&self) -> &BTreeMap; - fn get_defines(&self) -> &BTreeMap; - fn get_labels(&self) -> &BTreeMap; -} +use crate::vm::object::traits::IntegratedCircuit; pub trait AbsInstruction: IntegratedCircuit { /// abs r? a(r?|num) fn execute_abs( diff --git a/ic10emu/src/vm/object.rs b/ic10emu/src/vm/object.rs index f36b081..8f9590a 100644 --- a/ic10emu/src/vm/object.rs +++ b/ic10emu/src/vm/object.rs @@ -1,4 +1,4 @@ -use std::{cell::RefCell, ops::Deref, rc::Rc, str::FromStr}; +use std::{cell::RefCell, ops::{Deref, DerefMut}, rc::Rc, str::FromStr}; use macro_rules_attribute::derive; use serde_derive::{Deserialize, Serialize}; @@ -19,6 +19,7 @@ use super::enums::prefabs::StationpediaPrefab; pub type ObjectID = u32; pub type BoxedObject = Rc>>; +#[derive(Debug, Clone)] pub struct VMObject(BoxedObject); impl Deref for VMObject { @@ -30,6 +31,14 @@ impl Deref for VMObject { } } +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 @@ -65,7 +74,7 @@ impl Name { if let Some(prefab) = StationpediaPrefab::from_repr(hash) { Some(Name { value: prefab.to_string(), - hash: hash, + hash, }) } else { None diff --git a/ic10emu/src/vm/object/errors.rs b/ic10emu/src/vm/object/errors.rs index 777764f..c028fc0 100644 --- a/ic10emu/src/vm/object/errors.rs +++ b/ic10emu/src/vm/object/errors.rs @@ -3,7 +3,7 @@ use thiserror::Error; use crate::vm::enums::script_enums::{LogicSlotType, LogicType}; -#[derive(Error, Debug, Serialize, Deserialize)] +#[derive(Error, Debug, Clone, Serialize, Deserialize)] pub enum LogicError { #[error("can't read LogicType {0}")] CantRead(LogicType), @@ -17,7 +17,7 @@ pub enum LogicError { SlotIndexOutOfRange(usize, usize), } -#[derive(Error, Debug, Serialize, Deserialize)] +#[derive(Error, Debug, Clone, Serialize, Deserialize)] pub enum MemoryError { #[error("stack underflow: {0} < range [0..{1})")] StackUnderflow(i32, usize), diff --git a/ic10emu/src/vm/object/generic/macros.rs b/ic10emu/src/vm/object/generic/macros.rs index 741a9ef..e4b7d84 100644 --- a/ic10emu/src/vm/object/generic/macros.rs +++ b/ic10emu/src/vm/object/generic/macros.rs @@ -79,7 +79,23 @@ macro_rules! GWDevice { $($body:tt)* } ) => { - impl GWDevice for $struct {} + impl GWDevice for $struct { + fn device_info(&self) -> &DeviceInfo { + &self.device_info + } + fn device_connections(&self) -> &[Connection] { + self.connections.as_slice() + } + fn device_connections_mut(&mut self) -> &mut [Connection] { + self.connections.as_mut_slice() + } + fn device_pins(&self) -> Option<&[Option]> { + self.pins.as_ref().map(|pins| pins.as_slice()) + } + fn device_pins_mut(&mut self) -> Option<&mut [Option]> { + self.pins.as_mut().map(|pins| pins.as_mut_slice()) + } + } }; } pub(crate) use GWDevice; diff --git a/ic10emu/src/vm/object/generic/structs.rs b/ic10emu/src/vm/object/generic/structs.rs index 03a0883..bb7fdc6 100644 --- a/ic10emu/src/vm/object/generic/structs.rs +++ b/ic10emu/src/vm/object/generic/structs.rs @@ -1,11 +1,11 @@ use super::{macros::*, traits::*}; -use crate::vm::{ +use crate::{network::Connection, vm::{ enums::script_enums::LogicType, object::{ - macros::ObjectInterface, templates::ItemInfo, traits::*, LogicField, Name, ObjectID, Slot, + macros::ObjectInterface, templates::{DeviceInfo, ItemInfo}, traits::*, LogicField, Name, ObjectID, Slot, }, -}; +}}; use macro_rules_attribute::derive; use std::collections::BTreeMap; @@ -56,6 +56,9 @@ pub struct GenericLogicableDevice { pub name: Name, pub fields: BTreeMap, pub slots: Vec, + pub device_info: DeviceInfo, + pub connections: Vec, + pub pins: Option>>, } #[derive(ObjectInterface!, GWStorage!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] @@ -69,6 +72,9 @@ pub struct GenericLogicableDeviceMemoryReadable { pub name: Name, pub fields: BTreeMap, pub slots: Vec, + pub device_info: DeviceInfo, + pub connections: Vec, + pub pins: Option>>, pub memory: Vec, } @@ -83,6 +89,9 @@ pub struct GenericLogicableDeviceMemoryReadWriteable { pub name: Name, pub fields: BTreeMap, pub slots: Vec, + pub device_info: DeviceInfo, + pub connections: Vec, + pub pins: Option>>, pub memory: Vec, } diff --git a/ic10emu/src/vm/object/generic/traits.rs b/ic10emu/src/vm/object/generic/traits.rs index 3e3cd91..0a3885a 100644 --- a/ic10emu/src/vm/object/generic/traits.rs +++ b/ic10emu/src/vm/object/generic/traits.rs @@ -1,16 +1,13 @@ -use crate::vm::{ +use crate::{network::Connection, vm::{ enums::{ basic_enums::{Class as SlotClass, GasType, SortingClass}, script_enums::{LogicSlotType, LogicType}, }, object::{ - errors::{LogicError, MemoryError}, - templates::ItemInfo, - traits::*, - LogicField, MemoryAccess, Slot, + errors::{LogicError, MemoryError}, templates::{DeviceInfo, ItemInfo}, traits::*, LogicField, MemoryAccess, ObjectID, Slot }, VM, -}; +}}; use std::{collections::BTreeMap, usize}; use strum::IntoEnumIterator; @@ -166,9 +163,46 @@ impl MemoryWritable for T { } } -pub trait GWDevice: Logicable {} +pub trait GWDevice: Logicable { + fn device_info(&self) -> &DeviceInfo; + fn device_connections(&self) -> &[Connection]; + fn device_connections_mut(&mut self) -> &mut [Connection]; + fn device_pins(&self) -> Option<&[Option]>; + fn device_pins_mut(&mut self) -> Option<&mut [Option]>; +} -impl Device for T {} +impl Device for T { + fn connection_list(&self) -> &[crate::network::Connection] { + self.device_connections() + } + fn connection_list_mut(&mut self) -> &mut[Connection] { + self.device_connections_mut() + } + fn device_pins(&self) -> Option<&[Option]> { + self.device_pins() + } + fn device_pins_mut(&self) -> Option<&mut[Option]> { + self.device_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_activate_state(&self) -> bool { + self.device_info().has_activate_state + } +} pub trait GWItem { fn item_info(&self) -> &ItemInfo; diff --git a/ic10emu/src/vm/object/macros.rs b/ic10emu/src/vm/object/macros.rs index c2e1c31..2b1f708 100644 --- a/ic10emu/src/vm/object/macros.rs +++ b/ic10emu/src/vm/object/macros.rs @@ -1,5 +1,5 @@ macro_rules! object_trait { - (@intf {$trait_name:ident $trt:path}) => { + (@intf {$trait_name:ident $trt:ident}) => { paste::paste! { #[allow(missing_docs, unused)] pub type [<$trt Ref>]<'a, T> = &'a dyn $trt::ID>; @@ -7,7 +7,7 @@ macro_rules! object_trait { pub type [<$trt RefMut>]<'a, T> = &'a mut dyn $trt::ID>; } }; - (@body $trait_name:ident $($trt:path),*) => { + (@body $trait_name:ident { $($trt:ident),* }; ) => { type ID; fn id(&self) -> &Self::ID; fn prefab(&self) -> &crate::vm::object::Name; @@ -19,27 +19,30 @@ macro_rules! object_trait { fn as_object_mut(&mut self) -> &mut dyn $trait_name; - - paste::paste!{$( + $( + paste::paste! { #[inline(always)] fn [](&self) -> Option<[<$trt Ref>]> { None } #[inline(always)] - fn [](&mut self) -> Option<[<$trt RefMut>]> { + fn [](&mut self) -> Option<[<$trt RefMut>]> { None } - )*} + } + )* }; - ( $trait_name:ident $(: $($bound:tt)* )? {$($trt:path),*}) => { + ( $trait_name:ident $(: $($bound:tt)* )? {$($trt:ident),*}) => { $( $crate::vm::object::macros::object_trait!{@intf {$trait_name $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!{@body $trait_name {$($trt),*}; } } }; } @@ -91,7 +94,7 @@ macro_rules! ObjectInterface { } #[inline(always)] - fn [](&mut self) -> Option<[<$trt RefMut>]> { + fn [](&mut self) -> Option<[<$trt RefMut>]> { Some(self) } )*} @@ -508,25 +511,30 @@ macro_rules! tag_object_traits { { @tag tag=$trt_name:ident $(: $($obj_bound:tt)* )?; - acc={ $($tagged_trt:ident,)* } + acc={ $($tagged_trt:ident,)* }; $(#[$attr:meta])* - $viz:vis trait $trt:ident $(: $($trt_bound:path)* )? { + $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)* +)? $trt_name { + $viz trait $trt : $( $trt_bound_first $(+ $trt_bound_others)* +)? $trt_name { $($tbody)* } - $crate::vm::object::macros::tag_object_traits!{ @tag tag=$trt_name $(: $($obj_bound)* )?; acc={ $trt, $($tagged_trt,)* } $($used)* } + $crate::vm::object::macros::tag_object_traits!{ + @tag + tag=$trt_name $(: $($obj_bound)* )?; + acc={ $trt, $($tagged_trt,)* }; + $($used)* + } }; { @tag tag=$trt_name:ident $(: $($obj_bound:tt)* )?; - acc={ $($tagged_trt:ident,)* } + acc={ $($tagged_trt:ident,)* }; impl $name:ident for $trt:path { $($body:tt)* } @@ -536,12 +544,17 @@ macro_rules! tag_object_traits { impl $name for $trt { $($body)* } - $crate::vm::object::macros::tag_object_traits!{ @tag tag=$trt_name $(: $($obj_bound)* )?; acc={ $($tagged_trt,)* } $($used)* } + $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,)* } + acc={ $($tagged_trt:ident,)* }; } => { // end tagged traits {$trt_name} @@ -549,7 +562,7 @@ macro_rules! tag_object_traits { $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)* } + $crate::vm::object::macros::tag_object_traits!{ @tag tag=$trt_name; acc={}; $($tree)* } }; } diff --git a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs index 95bdba0..34e4d15 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs @@ -268,6 +268,12 @@ impl SourceCode for ItemIntegratedCircuit10 { } impl IntegratedCircuit for ItemIntegratedCircuit10 { + fn get_circuit_holder(&self, vm: &VM) -> Option { + // FIXME: implement correctly + self.parent_slot().map(|parent_slot| { + parent_slot.parent + }) + } fn get_instruction_pointer(&self) -> f64 { self.ip as f64 } @@ -950,6 +956,364 @@ impl BrgtzInstruction for ItemIntegratedCircuit10 { } } +impl BgeInstruction for ItemIntegratedCircuit10 { + /// bge a(r?|num) b(r?|num) c(r?|num) + fn execute_bge( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bge, 1)?; + let b = b.as_value(self, InstructionOp::Bge, 2)?; + let c = c.as_value(self, InstructionOp::Bge, 3)?; + if a >= b { + self.set_next_instruction(c); + } + Ok(()) + } +} + +impl BgealInstruction for ItemIntegratedCircuit10 { + /// bgeal a(r?|num) b(r?|num) c(r?|num) + fn execute_bgeal( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bgeal, 1)?; + let b = b.as_value(self, InstructionOp::Bgeal, 2)?; + let c = c.as_value(self, InstructionOp::Bgeal, 3)?; + if a >= b { + self.set_next_instruction(c); + self.al(); + } + Ok(()) + } +} + +impl BrgeInstruction for ItemIntegratedCircuit10 { + /// brge a(r?|num) b(r?|num) c(r?|num) + fn execute_brge( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Brge, 1)?; + let b = b.as_value(self, InstructionOp::Brge, 2)?; + let c = c.as_value(self, InstructionOp::Brge, 3)?; + if a >= b { + self.set_next_instruction_relative(c); + } + Ok(()) + } +} + +impl BgezInstruction for ItemIntegratedCircuit10 { + /// bgez a(r?|num) b(r?|num) + fn execute_bgez(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bgez, 1)?; + let b = b.as_value(self, InstructionOp::Bgez, 2)?; + if a >= 0.0 { + self.set_next_instruction(b); + } + Ok(()) + } +} + +impl BgezalInstruction for ItemIntegratedCircuit10 { + /// bgezal a(r?|num) b(r?|num) + fn execute_bgezal(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bgeal, 1)?; + let b = b.as_value(self, InstructionOp::Bgeal, 2)?; + if a >= 0.0 { + self.set_next_instruction(b); + self.al(); + } + Ok(()) + } +} + +impl BrgezInstruction for ItemIntegratedCircuit10 { + /// brgez a(r?|num) b(r?|num) + fn execute_brgez(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Brgez, 1)?; + let b = b.as_value(self, InstructionOp::Brgez, 2)?; + if a >= 0.0 { + self.set_next_instruction_relative(b); + } + Ok(()) + } +} + +impl BapInstruction for ItemIntegratedCircuit10 { + /// bap a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_bap( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + d: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bap, 1)?; + let b = b.as_value(self, InstructionOp::Bap, 2)?; + let c = c.as_value(self, InstructionOp::Bap, 3)?; + let d = d.as_value(self, InstructionOp::Bap, 4)?; + 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 ItemIntegratedCircuit10 { + /// bapal a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_bapal( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + d: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bapal, 1)?; + let b = b.as_value(self, InstructionOp::Bapal, 2)?; + let c = c.as_value(self, InstructionOp::Bapal, 3)?; + let d = d.as_value(self, InstructionOp::Bapal, 4)?; + 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 ItemIntegratedCircuit10 { + /// brap a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_brap( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + d: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Brap, 1)?; + let b = b.as_value(self, InstructionOp::Brap, 2)?; + let c = c.as_value(self, InstructionOp::Brap, 3)?; + let d = d.as_value(self, InstructionOp::Brap, 4)?; + 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 ItemIntegratedCircuit10 { + /// bapz a(r?|num) b(r?|num) c(r?|num) + fn execute_bapz( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bapz, 1)?; + let b = b.as_value(self, InstructionOp::Bapz, 2)?; + let c = c.as_value(self, InstructionOp::Bapz, 3)?; + if a.abs() <= f64::max(b * a.abs(), f64::EPSILON * 8.0) { + } else { + self.set_next_instruction(c); + } + Ok(()) + } +} + +impl BapzalInstruction for ItemIntegratedCircuit10 { + /// bapzal a(r?|num) b(r?|num) c(r?|num) + fn execute_bapzal( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bapzal, 1)?; + let b = b.as_value(self, InstructionOp::Bapzal, 2)?; + let c = c.as_value(self, InstructionOp::Bapzal, 3)?; + if a.abs() <= f64::max(b * a.abs(), f64::EPSILON * 8.0) { + } else { + self.set_next_instruction(c); + self.al(); + } + Ok(()) + } +} + +impl BrapzInstruction for ItemIntegratedCircuit10 { + /// brapz a(r?|num) b(r?|num) c(r?|num) + fn execute_brapz( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Brapz, 1)?; + let b = b.as_value(self, InstructionOp::Brapz, 2)?; + let c = c.as_value(self, InstructionOp::Brapz, 3)?; + if a.abs() <= f64::max(b * a.abs(), f64::EPSILON * 8.0) { + } else { + self.set_next_instruction_relative(c); + } + Ok(()) + } +} + +impl BnaInstruction for ItemIntegratedCircuit10 { + /// bna a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_bna( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + d: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bna, 1)?; + let b = b.as_value(self, InstructionOp::Bna, 2)?; + let c = c.as_value(self, InstructionOp::Bna, 3)?; + let d = d.as_value(self, InstructionOp::Bna, 4)?; + 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 ItemIntegratedCircuit10 { + /// bnaal a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_bnaal( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + d: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bnaal, 1)?; + let b = b.as_value(self, InstructionOp::Bnaal, 2)?; + let c = c.as_value(self, InstructionOp::Bnaal, 3)?; + let d = d.as_value(self, InstructionOp::Bnaal, 4)?; + 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 ItemIntegratedCircuit10 { + /// brna a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_brna( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + d: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Brna, 1)?; + let b = b.as_value(self, InstructionOp::Brna, 2)?; + let c = c.as_value(self, InstructionOp::Brna, 3)?; + let d = d.as_value(self, InstructionOp::Brna, 4)?; + 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 ItemIntegratedCircuit10 { + /// bnaz a(r?|num) b(r?|num) c(r?|num) + fn execute_bnaz( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bnaz, 1)?; + let b = b.as_value(self, InstructionOp::Bnaz, 2)?; + let c = c.as_value(self, InstructionOp::Bnaz, 3)?; + if a.abs() > f64::max(b * a.abs(), f64::EPSILON * 8.0) { + self.set_next_instruction(c); + } + Ok(()) + } +} +impl BnazalInstruction for ItemIntegratedCircuit10 { + /// bnazal a(r?|num) b(r?|num) c(r?|num) + fn execute_bnazal( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Bnazal, 1)?; + let b = b.as_value(self, InstructionOp::Bnazal, 2)?; + let c = c.as_value(self, InstructionOp::Bnazal, 3)?; + if a.abs() > f64::max(b * a.abs(), f64::EPSILON * 8.0) { + self.set_next_instruction(c); + self.al(); + } + Ok(()) + } +} +impl BrnazInstruction for ItemIntegratedCircuit10 { + /// brnaz a(r?|num) b(r?|num) c(r?|num) + fn execute_brnaz( + &mut self, + vm: &VM, + a: &Operand, + b: &Operand, + c: &Operand, + ) -> Result<(), ICError> { + let a = a.as_value(self, InstructionOp::Brnaz, 1)?; + let b = b.as_value(self, InstructionOp::Brnaz, 2)?; + let c = c.as_value(self, InstructionOp::Brnaz, 3)?; + if a.abs() > f64::max(b * a.abs(), f64::EPSILON * 8.0) { + self.set_next_instruction_relative(c); + } + Ok(()) + } +} +impl BdseInstruction for ItemIntegratedCircuit10 { + /// bdse d? a(r?|num) + fn execute_bdse(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError> { + let (device, _connection) = d.as_device(self, InstructionOp::Bdse, 1)?; + let a = a.as_value(self, InstructionOp::Bdse, 2)?; + if device.is_some() { + // FIXME: collect device and get logicable + self.set_next_instruction(a); + } + Ok(()) + } +} +impl BdsealInstruction for ItemIntegratedCircuit10 { + /// bdseal d? a(r?|num) + fn execute_bdseal(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; +} +impl BrdseInstruction for ItemIntegratedCircuit10 { + /// brdse d? a(r?|num) + fn execute_brdse(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; +} + impl AbsInstruction for ItemIntegratedCircuit10 { /// abs r? a(r?|num) fn execute_abs(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; @@ -997,48 +1361,6 @@ impl Atan2Instruction for ItemIntegratedCircuit10 { b: &Operand, ) -> Result<(), ICError>; } -impl BapInstruction for ItemIntegratedCircuit10 { - /// bap a(r?|num) b(r?|num) c(r?|num) d(r?|num) - fn execute_bap( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - d: &Operand, - ) -> Result<(), ICError>; -} -impl BapalInstruction for ItemIntegratedCircuit10 { - /// bapal a(r?|num) b(r?|num) c(r?|num) d(r?|num) - fn execute_bapal( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - d: &Operand, - ) -> Result<(), ICError>; -} -impl BapzInstruction for ItemIntegratedCircuit10 { - /// bapz a(r?|num) b(r?|num) c(r?|num) - fn execute_bapz( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError>; -} -impl BapzalInstruction for ItemIntegratedCircuit10 { - /// bapzal a(r?|num) b(r?|num) c(r?|num) - fn execute_bapzal( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError>; -} impl BdnsInstruction for ItemIntegratedCircuit10 { /// bdns d? a(r?|num) fn execute_bdns(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; @@ -1047,156 +1369,18 @@ impl BdnsalInstruction for ItemIntegratedCircuit10 { /// bdnsal d? a(r?|num) fn execute_bdnsal(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; } -impl BdseInstruction for ItemIntegratedCircuit10 { - /// bdse d? a(r?|num) - fn execute_bdse(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl BdsealInstruction for ItemIntegratedCircuit10 { - /// bdseal d? a(r?|num) - fn execute_bdseal(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl BgeInstruction for ItemIntegratedCircuit10 { - /// bge a(r?|num) b(r?|num) c(r?|num) - fn execute_bge( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError>; -} -impl BgealInstruction for ItemIntegratedCircuit10 { - /// bgeal a(r?|num) b(r?|num) c(r?|num) - fn execute_bgeal( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError>; -} -impl BgezInstruction for ItemIntegratedCircuit10 { - /// bgez a(r?|num) b(r?|num) - fn execute_bgez(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError>; -} -impl BgezalInstruction for ItemIntegratedCircuit10 { - /// bgezal a(r?|num) b(r?|num) - fn execute_bgezal(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError>; -} -impl BnaInstruction for ItemIntegratedCircuit10 { - /// bna a(r?|num) b(r?|num) c(r?|num) d(r?|num) - fn execute_bna( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - d: &Operand, - ) -> Result<(), ICError>; -} -impl BnaalInstruction for ItemIntegratedCircuit10 { - /// bnaal a(r?|num) b(r?|num) c(r?|num) d(r?|num) - fn execute_bnaal( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - d: &Operand, - ) -> Result<(), ICError>; -} impl BnanInstruction for ItemIntegratedCircuit10 { /// bnan a(r?|num) b(r?|num) fn execute_bnan(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError>; } -impl BnazInstruction for ItemIntegratedCircuit10 { - /// bnaz a(r?|num) b(r?|num) c(r?|num) - fn execute_bnaz( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError>; -} -impl BnazalInstruction for ItemIntegratedCircuit10 { - /// bnazal a(r?|num) b(r?|num) c(r?|num) - fn execute_bnazal( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError>; -} -impl BrapInstruction for ItemIntegratedCircuit10 { - /// brap a(r?|num) b(r?|num) c(r?|num) d(r?|num) - fn execute_brap( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - d: &Operand, - ) -> Result<(), ICError>; -} -impl BrapzInstruction for ItemIntegratedCircuit10 { - /// brapz a(r?|num) b(r?|num) c(r?|num) - fn execute_brapz( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError>; -} impl BrdnsInstruction for ItemIntegratedCircuit10 { /// brdns d? a(r?|num) fn execute_brdns(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; } -impl BrdseInstruction for ItemIntegratedCircuit10 { - /// brdse d? a(r?|num) - fn execute_brdse(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl BrgeInstruction for ItemIntegratedCircuit10 { - /// brge a(r?|num) b(r?|num) c(r?|num) - fn execute_brge( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError>; -} -impl BrgezInstruction for ItemIntegratedCircuit10 { - /// brgez a(r?|num) b(r?|num) - fn execute_brgez(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError>; -} -impl BrnaInstruction for ItemIntegratedCircuit10 { - /// brna a(r?|num) b(r?|num) c(r?|num) d(r?|num) - fn execute_brna( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - d: &Operand, - ) -> Result<(), ICError>; -} impl BrnanInstruction for ItemIntegratedCircuit10 { /// brnan a(r?|num) b(r?|num) fn execute_brnan(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError>; } -impl BrnazInstruction for ItemIntegratedCircuit10 { - /// brnaz a(r?|num) b(r?|num) c(r?|num) - fn execute_brnaz( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError>; -} impl CeilInstruction for ItemIntegratedCircuit10 { /// ceil r? a(r?|num) fn execute_ceil(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index 0a643f4..1f38b4e 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -53,7 +53,22 @@ impl ObjectTemplate { } } - fn build(&self, id: ObjectID) -> VMObject { + pub fn object(&self) -> Option<&ObjectInfo> { + use ObjectTemplate::*; + match self { + Structure(s) => s.object.as_ref(), + StructureSlots(s) => s.object.as_ref(), + StructureLogic(s) => s.object.as_ref(), + StructureLogicDevice(s) => s.object.as_ref(), + StructureLogicDeviceMemory(s) => s.object.as_ref(), + Item(i) => i.object.as_ref(), + ItemSlots(i) => i.object.as_ref(), + ItemLogic(i) => i.object.as_ref(), + ItemLogicMemory(i) => i.object.as_ref(), + } + } + + pub fn build(&self, id: ObjectID) -> VMObject { if let Some(obj) = stationpedia::object_from_prefab_template(&self, id) { obj } else { @@ -61,6 +76,120 @@ impl ObjectTemplate { } } + pub fn connected_networks(&self) -> Vec { + use ObjectTemplate::*; + match self { + StructureLogicDevice(s) => s + .device + .connection_list + .iter() + .filter_map(|conn| conn.network.as_ref()) + .copied() + .collect(), + StructureLogicDeviceMemory(s) => s + .device + .connection_list + .iter() + .filter_map(|conn| conn.network.as_ref()) + .copied() + .collect(), + _ => vec![], + } + } + + pub fn contained_object_ids(&self) -> Vec { + use ObjectTemplate::*; + match self { + StructureSlots(s) => s + .slots + .iter() + .filter_map(|info| { + info.occupant + .as_ref() + .map(|obj| obj.object().map(|obj_info| obj_info.id).flatten()) + }) + .flatten() + .collect(), + StructureLogic(s) => s + .slots + .iter() + .filter_map(|info| { + info.occupant + .as_ref() + .map(|obj| obj.object().map(|obj_info| obj_info.id).flatten()) + }) + .flatten() + .collect(), + StructureLogicDevice(s) => s + .slots + .iter() + .filter_map(|info| { + info.occupant + .as_ref() + .map(|obj| obj.object().map(|obj_info| obj_info.id).flatten()) + }) + .flatten() + .collect(), + StructureLogicDeviceMemory(s) => s + .slots + .iter() + .filter_map(|info| { + info.occupant + .as_ref() + .map(|obj| obj.object().map(|obj_info| obj_info.id).flatten()) + }) + .flatten() + .collect(), + ItemSlots(i) => i + .slots + .iter() + .filter_map(|info| { + info.occupant + .as_ref() + .map(|obj| obj.object().map(|obj_info| obj_info.id).flatten()) + }) + .flatten() + .collect(), + ItemLogic(i) => i + .slots + .iter() + .filter_map(|info| { + info.occupant + .as_ref() + .map(|obj| obj.object().map(|obj_info| obj_info.id).flatten()) + }) + .flatten() + .collect(), + ItemLogicMemory(i) => i + .slots + .iter() + .filter_map(|info| { + info.occupant + .as_ref() + .map(|obj| obj.object().map(|obj_info| obj_info.id).flatten()) + }) + .flatten() + .collect(), + _ => vec![], + } + } + + pub fn templates_from_slots(&self) -> Vec> { + use ObjectTemplate::*; + match self { + StructureSlots(s) => s.slots.iter().map(|info| info.occupant.clone()).collect(), + StructureLogic(s) => s.slots.iter().map(|info| info.occupant.clone()).collect(), + StructureLogicDevice(s) => s.slots.iter().map(|info| info.occupant.clone()).collect(), + StructureLogicDeviceMemory(s) => { + s.slots.iter().map(|info| info.occupant.clone()).collect() + } + ItemSlots(i) => i.slots.iter().map(|info| info.occupant.clone()).collect(), + ItemLogic(i) => i.slots.iter().map(|info| info.occupant.clone()).collect(), + ItemLogicMemory(i) => i.slots.iter().map(|info| info.occupant.clone()).collect(), + _ => vec![], + } + } + fn build_generic(&self, id: ObjectID) -> VMObject { use ObjectTemplate::*; match self { @@ -411,18 +540,20 @@ pub struct PrefabInfo { pub name: String, } -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ObjectInfo { pub name: Option, pub id: Option, } -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SlotInfo { pub name: String, pub typ: SlotClass, + #[serde(skip_serializing_if = "Option::is_none")] + pub occupant: Option, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] @@ -437,13 +568,15 @@ pub struct LogicTypes { pub types: BTreeMap, } -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct LogicInfo { pub logic_slot_types: BTreeMap, pub logic_types: LogicTypes, #[serde(skip_serializing_if = "Option::is_none")] pub modes: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + pub logic_values: Option>, pub transmission_receiver: bool, pub wireless_logic: bool, pub circuit_holder: bool, @@ -468,6 +601,8 @@ pub struct ItemInfo { pub struct ConnectionInfo { pub typ: ConnectionType, pub role: ConnectionRole, + #[serde(skip_serializing_if = "Option::is_none")] + pub network: Option, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] @@ -476,6 +611,8 @@ pub struct DeviceInfo { pub connection_list: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub device_pins_length: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub device_pins: Option>>, pub has_activate_state: bool, pub has_atmosphere: bool, pub has_color_state: bool, diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index 02295bc..30b0c0d 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -2,12 +2,13 @@ use serde_derive::{Deserialize, Serialize}; use crate::{ errors::ICError, + network::Connection, vm::{ enums::{ basic_enums::{Class as SlotClass, GasType, SortingClass}, script_enums::{LogicSlotType, LogicType}, }, - instructions::Instruction, + instructions::{traits::ICInstructable, Instruction}, object::{ errors::{LogicError, MemoryError}, macros::tag_object_traits, @@ -16,7 +17,6 @@ use crate::{ VM, }, }; - use std::{collections::BTreeMap, fmt::Debug}; #[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] @@ -55,8 +55,8 @@ tag_object_traits! { fn set_logic(&mut self, lt: LogicType, value: f64, force: bool) -> Result<(), LogicError>; fn get_logic(&self, lt: LogicType) -> Result; - fn can_slot_logic_read(&self, slt: LogicSlotType, index: usize) -> bool; - fn get_slot_logic(&self, slt: LogicSlotType, index: usize, vm: &VM) -> Result; + fn can_slot_logic_read(&self, slt: LogicSlotType, index: f64) -> bool; + fn get_slot_logic(&self, slt: LogicSlotType, index: f64, vm: &VM) -> Result; } pub trait SourceCode { @@ -66,7 +66,7 @@ tag_object_traits! { fn get_line(&self, line: usize) -> Result<&Instruction, ICError>; } - pub trait CircuitHolder: Logicable { + pub trait CircuitHolder: Logicable + Storage { fn clear_error(&mut self); fn set_error(&mut self, state: i32); fn get_logicable_from_index(&self, device: usize, vm: &VM) -> Option>; @@ -77,9 +77,46 @@ tag_object_traits! { fn set_source_code(&self, code: String); fn get_batch(&self) -> Vec>; fn get_batch_mut(&self) -> Vec>; + fn get_ic(&self) -> Option; } - pub trait Programmable: crate::vm::instructions::traits::ICInstructable { + pub trait Item { + fn consumable(&self) -> bool; + fn filter_type(&self) -> Option; + fn ingredient(&self) -> bool; + fn max_quantity(&self) -> u32; + fn reagents(&self) -> Option<&BTreeMap>; + fn slot_class(&self) -> SlotClass; + fn sorting_class(&self) -> SortingClass; + fn parent_slot(&self) -> Option; + } + + pub trait IntegratedCircuit: Logicable + MemoryWritable + SourceCode + Item { + fn get_circuit_holder(&self, vm: &VM) -> Option>; + fn get_instruction_pointer(&self) -> f64; + fn set_next_instruction(&mut self, next_instruction: f64); + fn set_next_instruction_relative(&mut self, offset: f64) { + self.set_next_instruction(self.get_instruction_pointer() + offset); + } + fn reset(&mut self); + fn get_real_target(&self, indirection: u32, target: u32) -> Result; + fn get_register(&self, indirection: u32, target: u32) -> Result; + fn set_register(&mut self, indirection: u32, target: u32, val: f64) -> Result; + fn set_return_address(&mut self, addr: f64); + fn al(&mut self) { + self.set_return_address(self.get_instruction_pointer() + 1.0); + } + fn push_stack(&mut self, val: f64) -> Result; + fn pop_stack(&mut self) -> Result; + fn peek_stack(&self) -> Result; + fn get_stack(&self, addr: f64) -> Result; + fn put_stack(&self, addr: f64, val: f64) -> Result; + fn get_aliases(&self) -> &BTreeMap; + fn get_defines(&self) -> &BTreeMap; + fn get_labels(&self) -> &BTreeMap; + } + + pub trait Programmable: ICInstructable { fn get_source_code(&self) -> String; fn set_source_code(&self, code: String); fn step(&mut self) -> Result<(), crate::errors::ICError>; @@ -94,20 +131,50 @@ tag_object_traits! { } pub trait Device: Logicable { + fn set_slot_logic( + &mut self, + slt: LogicSlotType, + index: f64, + value: f64, + vm: &VM, + force: bool + ) -> Result<(), LogicError>; + fn connection_list(&self) -> &[Connection]; + fn connection_list_mut(&mut self) -> &mut [Connection]; + fn device_pins(&self) -> Option<&[Option]>; + fn device_pins_mut(&self) -> Option<&mut [Option]>; + fn has_activate_state(&self) -> bool; + fn has_lock_state(&self) -> bool; + fn has_mode_state(&self) -> bool; + fn has_on_off_state(&self) -> bool; + fn has_open_state(&self) -> bool; + fn has_reagents(&self) -> bool; + } + + pub trait WirelessTransmit: Logicable { } - pub trait Item { - fn consumable(&self) -> bool; - fn filter_type(&self) -> Option; - fn ingredient(&self) -> bool; - fn max_quantity(&self) -> u32; - fn reagents(&self) -> Option<&BTreeMap>; - fn slot_class(&self) -> SlotClass; - fn sorting_class(&self) -> SortingClass; - fn parent_slot(&self) -> Option; + pub trait WirelessReceive: Logicable { + } + pub trait Network: Logicable { + fn contains(&self, id: &ObjectID) -> bool; + fn contains_all(&self, ids: &[ObjectID]) -> bool; + fn contains_data(&self, id: &ObjectID) -> bool; + fn contains_all_data(&self, ids: &[ObjectID]) -> bool; + fn contains_power(&self, id: &ObjectID) -> bool; + fn contains_all_power(&self, ids: &[ObjectID]) -> bool; + fn data_visible(&self, source: &ObjectID) -> Vec; + fn add_data(&mut self, id: ObjectID) -> bool; + fn add_power(&mut self, id: ObjectID) -> bool; + fn remove_all(&mut self, id: ObjectID) -> bool; + fn remove_data(&mut self, id: ObjectID) -> bool; + fn remove_power(&mut self, id: ObjectID) -> bool; + } + + } impl Debug for dyn Object { diff --git a/ic10emu_wasm/src/lib.rs b/ic10emu_wasm/src/lib.rs index c50fca1..b667ec2 100644 --- a/ic10emu_wasm/src/lib.rs +++ b/ic10emu_wasm/src/lib.rs @@ -107,7 +107,7 @@ impl DeviceRef { self.device.borrow().ic.as_ref().and_then(|ic| { self.vm .borrow() - .ics + .ic_holders .get(ic) .map(|ic| ic.as_ref().borrow().ip()) }) @@ -118,7 +118,7 @@ impl DeviceRef { self.device.borrow().ic.as_ref().and_then(|ic| { self.vm .borrow() - .ics + .ic_holders .get(ic) .map(|ic| ic.as_ref().borrow().ic.get()) }) @@ -129,7 +129,7 @@ impl DeviceRef { self.device.borrow().ic.as_ref().and_then(|ic| { self.vm .borrow() - .ics + .ic_holders .get(ic) .map(|ic| Stack(*ic.as_ref().borrow().stack.borrow())) }) @@ -140,7 +140,7 @@ impl DeviceRef { self.device.borrow().ic.as_ref().and_then(|ic| { self.vm .borrow() - .ics + .ic_holders .get(ic) .map(|ic| Registers(*ic.as_ref().borrow().registers.borrow())) }) @@ -151,7 +151,7 @@ impl DeviceRef { let aliases = &self.device.borrow().ic.as_ref().and_then(|ic| { self.vm .borrow() - .ics + .ic_holders .get(ic) .map(|ic| ic.as_ref().borrow().aliases.borrow().clone()) }); @@ -163,7 +163,7 @@ impl DeviceRef { let defines = &self.device.borrow().ic.as_ref().and_then(|ic| { self.vm .borrow() - .ics + .ic_holders .get(ic) .map(|ic| ic.as_ref().borrow().defines.borrow().clone()) }); @@ -175,7 +175,7 @@ impl DeviceRef { let pins = &self.device.borrow().ic.as_ref().and_then(|ic| { self.vm .borrow() - .ics + .ic_holders .get(ic) .map(|ic| *ic.as_ref().borrow().pins.borrow()) }); @@ -191,7 +191,7 @@ impl DeviceRef { .and_then(|ic| { self.vm .borrow() - .ics + .ic_holders .get(ic) .map(|ic| ic.borrow().state.clone()) }) @@ -203,7 +203,7 @@ impl DeviceRef { let prog = &self.device.borrow().ic.as_ref().and_then(|ic| { self.vm .borrow() - .ics + .ic_holders .get(ic) .map(|ic| ic.borrow().program.borrow().clone()) }); @@ -215,7 +215,7 @@ impl DeviceRef { self.device.borrow().ic.as_ref().and_then(|ic| { self.vm .borrow() - .ics + .ic_holders .get(ic) .map(|ic| ic.borrow().code.borrow().clone()) }) @@ -263,7 +263,7 @@ impl DeviceRef { .ok_or(VMError::NoIC(self.device.borrow().id))?; let vm_borrow = self.vm.borrow(); let ic = vm_borrow - .ics + .ic_holders .get(&ic_id) .ok_or(VMError::NoIC(self.device.borrow().id))?; let result = ic.borrow_mut().set_register(0, index, val)?; @@ -280,7 +280,7 @@ impl DeviceRef { .ok_or(VMError::NoIC(self.device.borrow().id))?; let vm_borrow = self.vm.borrow(); let ic = vm_borrow - .ics + .ic_holders .get(&ic_id) .ok_or(VMError::NoIC(self.device.borrow().id))?; let result = ic.borrow_mut().poke(address, val)?; @@ -370,7 +370,7 @@ impl VMRef { #[wasm_bindgen(js_name = "addDevice")] pub fn add_device(&self, network: Option) -> Result { - Ok(self.vm.borrow_mut().add_device(network)?) + Ok(self.vm.borrow_mut().add_object(network)?) } #[wasm_bindgen(js_name = "addDeviceFromTemplate", skip_typescript)] @@ -385,7 +385,7 @@ impl VMRef { #[wasm_bindgen(js_name = "getDevice")] pub fn get_device(&self, id: u32) -> Option { - let device = self.vm.borrow().get_device(id); + let device = self.vm.borrow().get_object(id); device.map(|d| DeviceRef::from_device(d.clone(), self.vm.clone())) } @@ -418,7 +418,7 @@ impl VMRef { #[wasm_bindgen(getter, js_name = "defaultNetwork")] pub fn default_network(&self) -> u32 { - self.vm.borrow().default_network + self.vm.borrow().default_network_key } #[wasm_bindgen(getter)] @@ -433,7 +433,7 @@ impl VMRef { #[wasm_bindgen(getter)] pub fn ics(&self) -> Vec { - self.vm.borrow().ics.keys().copied().collect_vec() + self.vm.borrow().ic_holders.keys().copied().collect_vec() } #[wasm_bindgen(getter, js_name = "lastOperationModified")] @@ -479,7 +479,7 @@ impl VMRef { #[wasm_bindgen(js_name = "removeDevice")] pub fn remove_device(&self, id: u32) -> Result<(), JsError> { - Ok(self.vm.borrow_mut().remove_device(id)?) + Ok(self.vm.borrow_mut().remove_object(id)?) } #[wasm_bindgen(js_name = "setSlotOccupant", skip_typescript)] diff --git a/xtask/src/generate/instructions.rs b/xtask/src/generate/instructions.rs index 2661f33..b359e13 100644 --- a/xtask/src/generate/instructions.rs +++ b/xtask/src/generate/instructions.rs @@ -22,7 +22,7 @@ pub fn generate_instructions( let mut writer = std::io::BufWriter::new(std::fs::File::create(instructions_path.join("traits.rs"))?); - write_instruction_interface_trait(&mut writer)?; + write_instruction_trait_use(&mut writer)?; for (typ, info) in &stationpedia.script_commands { write_instruction_trait(&mut writer, (typ, info))?; } @@ -172,36 +172,11 @@ fn operand_names(example: &str) -> Vec { .collect() } -fn write_instruction_interface_trait(writer: &mut T) -> color_eyre::Result<()> { +fn write_instruction_trait_use(writer: &mut T) -> color_eyre::Result<()> { write!( writer, "\ - use std::collections::BTreeMap;\n\ - use crate::vm::object::traits::{{Logicable, MemoryWritable, SourceCode}};\n\ - use crate::errors::ICError; \n\ - pub trait IntegratedCircuit: Logicable + MemoryWritable + SourceCode {{\n \ - fn get_instruction_pointer(&self) -> f64;\n \ - fn set_next_instruction(&mut self, next_instruction: f64);\n \ - fn set_next_instruction_relative(&mut self, offset: f64) {{\n \ - self.set_next_instruction(self.get_instruction_pointer() + offset);\n \ - }}\n \ - fn reset(&mut self);\n \ - fn get_real_target(&self, indirection: u32, target: u32) -> Result;\n \ - fn get_register(&self, indirection: u32, target: u32) -> Result;\n \ - fn set_register(&mut self, indirection: u32, target: u32, val: f64) -> Result;\n \ - fn set_return_address(&mut self, addr: f64);\n \ - fn al(&mut self) {{\n \ - self.set_return_address(self.get_instruction_pointer() + 1.0);\n \ - }}\n \ - fn push_stack(&mut self, val: f64) -> Result;\n \ - fn pop_stack(&mut self) -> Result;\n \ - fn peek_stack(&self) -> Result;\n \ - fn get_stack(&self, addr: f64) -> Result;\n \ - fn put_stack(&self, addr: f64, val: f64) -> Result;\n \ - fn get_aliases(&self) -> &BTreeMap;\n \ - fn get_defines(&self) -> &BTreeMap;\n \ - fn get_labels(&self) -> &BTreeMap;\n\ - }}\n\ + use crate::vm::object::traits::IntegratedCircuit;\n\ " )?; Ok(()) From 347f5f1d59c72a8292cab6766682efd2a8724f0c Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sun, 12 May 2024 23:44:28 -0700 Subject: [PATCH 13/50] refactor(vm): start freezeing objects impl --- ic10emu/src/device.rs | 10 +- ic10emu/src/errors.rs | 11 + ic10emu/src/interpreter.rs | 12 +- ic10emu/src/network.rs | 76 +- ic10emu/src/vm.rs | 337 ++--- ic10emu/src/vm/instructions.rs | 1 + ic10emu/src/vm/object.rs | 5 +- ic10emu/src/vm/object/errors.rs | 6 +- ic10emu/src/vm/object/generic/macros.rs | 22 + ic10emu/src/vm/object/generic/structs.rs | 51 +- ic10emu/src/vm/object/generic/traits.rs | 136 +- ic10emu/src/vm/object/macros.rs | 79 +- ic10emu/src/vm/object/stationpedia.rs | 2 +- .../structs/integrated_circuit.rs | 9 +- ic10emu/src/vm/object/templates.rs | 1195 +++++++++++++++-- ic10emu/src/vm/object/traits.rs | 44 +- ic10emu_wasm/src/lib.rs | 26 +- rust-analyzer.json | 3 + 18 files changed, 1608 insertions(+), 417 deletions(-) create mode 100644 rust-analyzer.json diff --git a/ic10emu/src/device.rs b/ic10emu/src/device.rs index 7219b52..b3adf0c 100644 --- a/ic10emu/src/device.rs +++ b/ic10emu/src/device.rs @@ -522,7 +522,7 @@ impl 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.ic_holders.get(ic_id).expect("our own ic to exist").borrow(); + let ic = vm.circuit_holders.get(ic_id).expect("our own ic to exist").borrow(); copy.insert( LogicType::LineNumber, LogicField { @@ -642,7 +642,7 @@ impl Device { pub fn get_field(&self, typ: LogicType, vm: &VM) -> Result { if typ == LogicType::LineNumber && self.ic.is_some() { let ic = vm - .ic_holders + .circuit_holders .get(&self.ic.unwrap()) .ok_or_else(|| ICError::UnknownDeviceID(self.ic.unwrap() as f64))? .borrow(); @@ -673,7 +673,7 @@ impl Device { Err(ICError::ReadOnlyField(typ.to_string())) } else if typ == LogicType::LineNumber && self.ic.is_some() { let ic = vm - .ic_holders + .circuit_holders .get(&self.ic.unwrap()) .ok_or_else(|| ICError::UnknownDeviceID(self.ic.unwrap() as f64))? .borrow(); @@ -714,7 +714,7 @@ impl Device { && typ == LogicSlotType::LineNumber { let ic = vm - .ic_holders + .circuit_holders .get(&self.ic.unwrap()) .ok_or_else(|| ICError::UnknownDeviceID(self.ic.unwrap() as f64))? .borrow(); @@ -736,7 +736,7 @@ impl Device { let mut fields = slot.get_fields(); if slot.typ == SlotClass::ProgrammableChip && slot.occupant.is_some() && self.ic.is_some() { let ic = vm - .ic_holders + .circuit_holders .get(&self.ic.unwrap()) .ok_or_else(|| ICError::UnknownDeviceID(self.ic.unwrap() as f64))? .borrow(); diff --git a/ic10emu/src/errors.rs b/ic10emu/src/errors.rs index da49f27..ea4f240 100644 --- a/ic10emu/src/errors.rs +++ b/ic10emu/src/errors.rs @@ -32,6 +32,17 @@ pub enum VMError { 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), +} + + +#[derive(Error, Debug, Serialize, Deserialize)] +pub enum TemplateError { + #[error("")] + NonConformingObject(ObjectID) } #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index b774506..962102e 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -2030,7 +2030,7 @@ impl IC { if ic_id == &this.id { this.peek_addr(addr) } else { - let ic = vm.ic_holders.get(ic_id).unwrap().borrow(); + let ic = vm.circuit_holders.get(ic_id).unwrap().borrow(); ic.peek_addr(addr) } }?; @@ -2063,7 +2063,7 @@ impl IC { if ic_id == &this.id { this.peek_addr(addr) } else { - let ic = vm.ic_holders.get(ic_id).unwrap().borrow(); + let ic = vm.circuit_holders.get(ic_id).unwrap().borrow(); ic.peek_addr(addr) } }?; @@ -2092,7 +2092,7 @@ impl IC { if ic_id == &this.id { this.poke(addr, val)?; } else { - let ic = vm.ic_holders.get(ic_id).unwrap().borrow(); + let ic = vm.circuit_holders.get(ic_id).unwrap().borrow(); ic.poke(addr, val)?; } vm.set_modified(device_id); @@ -2120,7 +2120,7 @@ impl IC { if ic_id == &this.id { this.poke(addr, val)?; } else { - let ic = vm.ic_holders.get(ic_id).unwrap().borrow(); + let ic = vm.circuit_holders.get(ic_id).unwrap().borrow(); ic.poke(addr, val)?; } vm.set_modified(device_id as u32); @@ -2532,7 +2532,7 @@ mod tests { let device_ref = device.borrow(); device_ref.ic.unwrap() }; - let ic_chip = vm.ic_holders.get(&ic_id).unwrap().borrow(); + let ic_chip = vm.circuit_holders.get(&ic_id).unwrap().borrow(); vm.set_code( ic, r#"lb r0 HASH("ItemActiveVent") On Sum @@ -2561,7 +2561,7 @@ mod tests { let device_ref = device.borrow(); device_ref.ic.unwrap() }; - let ic_chip = vm.ic_holders.get(&ic_id).unwrap().borrow(); + let ic_chip = vm.circuit_holders.get(&ic_id).unwrap().borrow(); vm.set_code( ic, r#"push 100 diff --git a/ic10emu/src/network.rs b/ic10emu/src/network.rs index 41230b9..47fb45b 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -2,7 +2,7 @@ use std::{collections::HashSet, ops::Deref}; use crate::vm::{ enums::script_enums::LogicType, - object::{errors::LogicError, macros::ObjectInterface, traits::*, Name, ObjectID}, + object::{errors::LogicError, macros::ObjectInterface, templates::ConnectionInfo, traits::*, Name, ObjectID}, }; use itertools::Itertools; use macro_rules_attribute::derive; @@ -23,9 +23,28 @@ pub enum Connection { CableNetwork { net: Option, typ: CableConnectionType, + role: ConnectionRole, + }, + Chute { + role: ConnectionRole, + }, + Pipe { + role: ConnectionRole, + }, + Elevator { + role: ConnectionRole, + }, + LandingPad { + role: ConnectionRole, + }, + LaunchPad { + role: ConnectionRole, + }, + PipeLiquid { + role: ConnectionRole, }, #[default] - Other, + None, } #[derive( @@ -86,27 +105,45 @@ pub enum ConnectionRole { impl Connection { #[allow(dead_code)] - fn from(typ: ConnectionType, _role: ConnectionRole) -> Self { + pub fn from_info(typ: ConnectionType, role: ConnectionRole) -> 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, typ: CableConnectionType::Data, + role, }, ConnectionType::Power => Self::CableNetwork { net: None, typ: CableConnectionType::Power, + role, }, ConnectionType::PowerAndData => Self::CableNetwork { net: None, 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 }, + } + } + + pub fn to_info(&self) -> ConnectionInfo { + match self { + Self::None => ConnectionInfo { typ:ConnectionType::None, role: ConnectionRole::None, network: None }, + Self::CableNetwork { net, typ: CableConnectionType::Data, role } => ConnectionInfo { typ: ConnectionType::Data, role, network: net }, + Self::CableNetwork { net, typ: CableConnectionType::Power, role } => ConnectionInfo { typ: ConnectionType::Power, role, network: net }, + Self::CableNetwork { net, typ: CableConnectionType::PowerAndData, role } => ConnectionInfo { typ: ConnectionType::PowerAndData, role, network: net }, + Self::Chute { role } => ConnectionInfo { typ: ConnectionType::Chute, role, network: None }, + Self::Pipe { role } => ConnectionInfo { typ: ConnectionType::Pipe, role, network: None }, + Self::PipeLiquid { role } => ConnectionInfo { typ: ConnectionType::PipeLiquid, role, network: None }, + Self::Elevator { role } => ConnectionInfo { typ: ConnectionType::Elevator, role, network: None }, + Self::LandingPad { role } => ConnectionInfo { typ: ConnectionType::LandingPad, role, network: None }, + Self::LaunchPad { role } => ConnectionInfo { typ: ConnectionType::LaunchPad, role, network: None }, } } } @@ -140,6 +177,12 @@ impl Storage for CableNetwork { fn get_slot_mut(&mut self, index: usize) -> Option<&mut crate::vm::object::Slot> { None } + fn get_slots(&self) -> &[crate::vm::object::Slot] { + &vec![] + } + fn get_slots_mut(&mut self) -> &mut[crate::vm::object::Slot] { + &mut vec![] + } } impl Logicable for CableNetwork { @@ -205,17 +248,24 @@ impl Logicable for CableNetwork { fn can_slot_logic_read( &self, slt: crate::vm::enums::script_enums::LogicSlotType, - index: usize, + index: f64, ) -> bool { false } fn get_slot_logic( &self, slt: crate::vm::enums::script_enums::LogicSlotType, - index: usize, + index: f64, vm: &crate::vm::VM, ) -> Result { - Err(LogicError::CantSlotRead(slt, index)) + Err(LogicError::CantSlotRead(slt, index as usize)) + } + fn valid_logic_types(&self) -> Vec { + use LogicType::*; + vec![Channel0, Channel1, Channel2, Channel3, Channel4, Channel5, Channel6, Channel7] + } + fn known_modes(&self) -> Option> { + None } } diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index da5ca04..c196402 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -5,11 +5,15 @@ pub mod object; use crate::{ device::{Device, DeviceTemplate, SlotOccupant, SlotOccupantTemplate}, errors::{ICError, VMError}, - interpreter::{self, FrozenIC}, + interpreter::{self, FrozenIC, ICState, IC}, network::{CableConnectionType, CableNetwork, Connection, FrozenNetwork}, vm::{ enums::script_enums::{LogicBatchMethod as BatchMode, LogicSlotType, LogicType}, - object::{templates::ObjectTemplate, traits::*, BoxedObject, ObjectID, VMObject}, + object::{ + templates::ObjectTemplate, + traits::{Object, ParentSlotInfo}, + BoxedObject, ObjectID, VMObject, + }, }, }; use std::{ @@ -24,7 +28,8 @@ use serde_derive::{Deserialize, Serialize}; #[derive(Debug)] pub struct VM { pub objects: BTreeMap, - pub ic_holders: RefCell>, + pub circuit_holders: RefCell>, + pub program_holders: RefCell>, pub networks: BTreeMap, pub default_network_key: ObjectID, pub wireless_transmitters: RefCell>, @@ -48,7 +53,8 @@ pub struct VMTransationNetwork { /// there are errors on nested templates pub struct VMTransation { pub objects: BTreeMap, - pub ic_holders: Vec, + pub circuit_holders: Vec, + pub program_holders: Vec, pub default_network_key: ObjectID, pub wireless_transmitters: Vec, pub wireless_receivers: Vec, @@ -73,7 +79,8 @@ impl VM { let mut vm = VM { objects: BTreeMap::new(), - ic_holders: RefCell::new(Vec::new()), + circuit_holders: RefCell::new(Vec::new()), + program_holders: RefCell::new(Vec::new()), networks, default_network_key, wireless_transmitters: RefCell::new(Vec::new()), @@ -101,7 +108,12 @@ impl VM { self.wireless_receivers .borrow_mut() .extend(transaction.wireless_receivers); - self.ic_holders.borrow_mut().extend(transaction.ic_holders); + 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 @@ -126,51 +138,72 @@ impl VM { pub fn add_network(&mut self) -> u32 { let next_id = self.network_id_space.next(); self.networks - .insert(next_id, Rc::new(RefCell::new(CableNetwork::new(next_id)))); + .insert(next_id, VMObject::new(CableNetwork::new(next_id))); next_id } - pub fn get_default_network(&self) -> Rc> { + pub fn get_default_network(&self) -> VMObject { self.networks .get(&self.default_network_key) .cloned() - .unwrap() + .expect("default network not present") } - pub fn get_network(&self, id: u32) -> Option>> { + pub fn get_network(&self, id: u32) -> Option { self.networks.get(&id).cloned() } - pub fn remove_ic(&mut self, id: u32) { - if self.ic_holders.remove(&id).is_some() { - self.devices.remove(&id); - } - } - + /// iterate over all object borrowing them mutably, never call unless VM is not currently + /// stepping 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 + if self.id_space.has_id(&new_id) { + return Err(VMError::IdInUse(new_id)); + } + let obj = self + .objects .remove(&old_id) .ok_or(VMError::UnknownId(old_id))?; - device.borrow_mut().id = new_id; - self.devices.insert(new_id, device); - self.ic_holders.iter().for_each(|(_id, ic)| { - let mut ic_ref = ic.borrow_mut(); - if ic_ref.device == old_id { - ic_ref.device = 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.id_space.use_id(new_id)?; + obj.borrow_mut().set_id(new_id); + self.objects.insert(new_id, obj); + + self.objects + .iter_mut() + .filter_map(|(_obj_id, obj)| obj.borrow_mut().as_mut_device()) + .for_each(|device| { + device.get_slots_mut().iter_mut().for_each(|slot| { + if slot.parent == old_id { + slot.parent = new_id; + } + if slot + .occupant + .is_some_and(|occupant_id| occupant_id == old_id) + { + slot.occupant = Some(new_id); + } + }); }); + + self.circuit_holders.borrow_mut().iter_mut().for_each(|id| { + if *id == old_id { + *id = new_id + } + }); + self.program_holders.borrow_mut().iter_mut().for_each(|id| { + if *id == old_id { + *id = 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); - } + let net_ref = net + .borrow_mut() + .as_mut_network() + .expect("non-network network"); + if net_ref.remove_data(old_id) { + net_ref.add_data(new_id); + } + if net_ref.remove_power(old_id) { + net_ref.add_power(new_id); } }); self.id_space.free_id(old_id); @@ -179,39 +212,27 @@ impl VM { /// Set program code if it's valid pub fn set_code(&self, id: u32, code: &str) -> Result { - let device = self - .devices + let programmable = self + .objects .get(&id) .ok_or(VMError::UnknownId(id))? - .borrow(); - let ic_id = *device.ic.as_ref().ok_or(VMError::NoIC(id))?; - let ic = self - .ic_holders - .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()); + .borrow_mut() + .as_mut_programmable() + .ok_or(VMError::NotProgrammable(id))?; + programmable.set_source_code(code)?; Ok(true) } /// 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 + let programmable = self + .objects .get(&id) .ok_or(VMError::UnknownId(id))? - .borrow(); - let ic_id = *device.ic.as_ref().ok_or(VMError::NoIC(id))?; - let ic = self - .ic_holders - .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()); + .borrow_mut() + .as_mut_programmable() + .ok_or(VMError::NotProgrammable(id))?; + programmable.set_source_code_with_invalid(code); Ok(true) } @@ -220,52 +241,46 @@ impl VM { self.operation_modified.borrow().clone() } - pub fn step_ic(&self, id: u32, advance_ip_on_err: bool) -> Result { + pub fn step_programmable(&self, id: u32, advance_ip_on_err: bool) -> Result<(), VMError> { + let programmable = self + .objects + .get(&id) + .ok_or(VMError::UnknownId(id))? + .borrow_mut() + .as_mut_programmable() + .ok_or(VMError::NotProgrammable(id))?; 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 - }; self.set_modified(id); - let ic = self - .ic_holders - .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) + programmable.step(self, advance_ip_on_err)?; + Ok(()) } /// returns true if executed 128 lines, false if returned early. - pub fn run_ic(&self, id: u32, ignore_errors: bool) -> Result { + pub fn run_programmable(&self, id: u32, ignore_errors: bool) -> Result { + let programmable = self + .objects + .get(&id) + .ok_or(VMError::UnknownId(id))? + .borrow_mut() + .as_mut_programmable() + .ok_or(VMError::NotProgrammable(id))?; 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 - .ic_holders - .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 let Err(err) = programmable.step(self, ignore_errors) { if !ignore_errors { return Err(err.into()); } } - 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); + 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), + _ => {} } } - ic.borrow().state.replace(interpreter::ICState::Yield); + programmable.set_state(ICState::Yield); Ok(true) } @@ -273,22 +288,15 @@ impl VM { self.operation_modified.borrow_mut().push(id); } - pub fn reset_ic(&self, id: ObjectID) -> Result { - let obj = self.objects.get(&id).ok_or(VMError::UnknownId(id))?.clone(); - let ic_id = obj - .borrow() - .as_mut_circuit_holder() - .map(|holder| holder.get_ic()) - .flatten() - .ok_or(VMError::NoIC(id))?; - let ic = self + pub fn reset_programmable(&self, id: ObjectID) -> Result { + let programmable = self .objects - .get(&ic_id) - .ok_or(VMError::UnknownIcId(ic_id))? + .get(&id) + .ok_or(VMError::UnknownId(id))? .borrow_mut() .as_mut_programmable() - .ok_or(VMError::UnknownIcId(ic_id))?; - ic.reset(); + .ok_or(VMError::NotProgrammable(id))?; + programmable.reset(); Ok(true) } @@ -310,7 +318,7 @@ impl VM { .get_logic(LogicType::PrefabHash) .is_ok_and(|f| f == prefab_hash) }) && (name.is_none() - || name.is_some_and(|name| name == device.borrow().name().hash as f64)) + || name.is_some_and(|name| name == device.borrow().get_name().hash as f64)) && self.devices_on_same_network(&[source, **id]) }) .map(|(_, d)| d) @@ -550,7 +558,7 @@ 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() .as_mut_device() @@ -572,7 +580,7 @@ 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() .as_mut_device() @@ -594,7 +602,7 @@ 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() .as_mut_device() @@ -705,7 +713,7 @@ impl VM { 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.get(net) { + if let Some(network) = self.networks.get(&net) { network .borrow_mut() .as_mut_network() @@ -715,7 +723,7 @@ impl VM { } } if let Some(_) = device.as_circuit_holder() { - self.ic_holders.borrow_mut().retain(|a| *a != id); + self.circuit_holders.borrow_mut().retain(|a| *a != id); } } self.id_space.free_id(id); @@ -736,10 +744,45 @@ impl VM { let Some(obj) = self.objects.get(&id) else { return Err(VMError::UnknownId(id)); }; + let Some(storage) = obj.borrow_mut().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 { + let Some(item_obj) = self.objects.get(&target) else { + return Err(VMError::UnknownId(id)); + }; + let Some(item) = item_obj.borrow_mut().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; + slot.occupant = Some(target); + Ok(last) + } else { + let last = slot.occupant; + slot.occupant = None; + Ok(last) + } + } - // FIXME: check that object has storage and object to be added is an item - // need to move parentage and remove object from it former slot if it has one - + /// returns former occupant id if any + pub fn remove_slot_occupant( + &mut self, + id: ObjectID, + index: usize, + ) -> Result, VMError> { + let Some(obj) = self.objects.get(&id) else { + return Err(VMError::UnknownId(id)); + }; let Some(storage) = obj.borrow_mut().as_mut_storage() else { return Err(VMError::NotStorage(id)); }; @@ -747,38 +790,15 @@ impl VM { .get_slot_mut(index) .ok_or(ICError::SlotIndexOutOfRange(index as f64))?; - if - - - 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); - } + let last = slot.occupant; slot.occupant = None; - Ok(()) + Ok(last) } pub fn save_vm_state(&self) -> FrozenVM { FrozenVM { ics: self - .ic_holders + .circuit_holders .values() .map(|ic| ic.borrow().into()) .collect(), @@ -797,7 +817,7 @@ impl VM { } pub fn restore_vm_state(&mut self, state: FrozenVM) -> Result<(), VMError> { - self.ic_holders.clear(); + self.circuit_holders.clear(); self.devices.clear(); self.networks.clear(); self.id_space.reset(); @@ -824,7 +844,7 @@ impl VM { self.network_id_space .use_ids(&state.networks.iter().map(|net| net.id).collect_vec())?; - self.ic_holders = state + self.circuit_holders = state .ics .into_iter() .map(|ic| (ic.id, Rc::new(RefCell::new(ic.into())))) @@ -851,7 +871,8 @@ impl VMTransation { pub fn new(vm: &VM) -> Self { VMTransation { objects: BTreeMap::new(), - ic_holders: Vec::new(), + circuit_holders: Vec::new(), + program_holders: Vec::new(), default_network_key: vm.default_network_key, wireless_transmitters: Vec::new(), wireless_receivers: Vec::new(), @@ -874,7 +895,7 @@ impl VMTransation { } } - let obj_id = if let Some(obj_id) = template.object().map(|info| info.id).flatten() { + let obj_id = if let Some(obj_id) = template.object_info().map(|info| info.id).flatten() { self.id_space.use_id(obj_id)?; obj_id } else { @@ -904,7 +925,10 @@ impl VMTransation { self.wireless_receivers.push(obj_id); } if let Some(circuit_holder) = obj.borrow().as_circuit_holder() { - self.ic_holders.push(obj_id); + 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().iter() { @@ -931,14 +955,6 @@ impl VMTransation { } } -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct FrozenVM { - pub ics: Vec, - pub devices: Vec, - pub networks: Vec, - pub default_network: u32, -} - impl BatchMode { pub fn apply(&self, samples: &[f64]) -> f64 { match self { @@ -1046,3 +1062,22 @@ impl IdSpace { self.in_use.clear(); } } + + +#[derive(Debug, Clone, Serialize, Deserialize)] +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, +} + +impl FrozenVM { + pub fn from_vm(vm: &VM) -> Self { + let objects = vm.objects.iter().map() + + } +} diff --git a/ic10emu/src/vm/instructions.rs b/ic10emu/src/vm/instructions.rs index a980117..d4367fa 100644 --- a/ic10emu/src/vm/instructions.rs +++ b/ic10emu/src/vm/instructions.rs @@ -24,3 +24,4 @@ pub static CONSTANTS_LOOKUP: phf::Map<&'static str, f64> = phf_map! { "pinf" => f64::INFINITY, "pi" => 3.141592653589793f64, }; + diff --git a/ic10emu/src/vm/object.rs b/ic10emu/src/vm/object.rs index 8f9590a..d49ae72 100644 --- a/ic10emu/src/vm/object.rs +++ b/ic10emu/src/vm/object.rs @@ -10,7 +10,7 @@ pub mod stationpedia; pub mod templates; pub mod traits; -use traits::*; +use traits::Object; use crate::vm::enums::{basic_enums::Class as SlotClass, script_enums::LogicSlotType}; @@ -105,6 +105,7 @@ pub struct Slot { pub index: usize, pub name: String, pub typ: SlotClass, - pub enabled_logic: Vec, + pub readable_logic: Vec, + pub writeable_logic: Vec, pub occupant: Option, } diff --git a/ic10emu/src/vm/object/errors.rs b/ic10emu/src/vm/object/errors.rs index c028fc0..3360eb6 100644 --- a/ic10emu/src/vm/object/errors.rs +++ b/ic10emu/src/vm/object/errors.rs @@ -8,13 +8,13 @@ pub enum LogicError { #[error("can't read LogicType {0}")] CantRead(LogicType), #[error("can't read slot {1} LogicSlotType {0}")] - CantSlotRead(LogicSlotType, usize), + CantSlotRead(LogicSlotType, f64), #[error("can't write LogicType {0}")] CantWrite(LogicType), #[error("can't write slot {1} LogicSlotType {0}")] - CantSlotWrite(LogicSlotType, usize), + CantSlotWrite(LogicSlotType, f64), #[error("slot id {0} is out of range 0..{1}")] - SlotIndexOutOfRange(usize, usize), + SlotIndexOutOfRange(f64, usize), } #[derive(Error, Debug, Clone, Serialize, Deserialize)] diff --git a/ic10emu/src/vm/object/generic/macros.rs b/ic10emu/src/vm/object/generic/macros.rs index e4b7d84..0de9aff 100644 --- a/ic10emu/src/vm/object/generic/macros.rs +++ b/ic10emu/src/vm/object/generic/macros.rs @@ -1,3 +1,19 @@ +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] )* @@ -31,6 +47,9 @@ macro_rules! GWLogicable { fn fields_mut(&mut self) -> &mut BTreeMap { &mut self.fields } + fn modes(&self) -> Option<&BTreeMap> { + self.modes.as_ref() + } } }; } @@ -114,6 +133,9 @@ macro_rules! GWItem { fn parent_slot(&self) -> Option { self.parent_slot } + fn set_parent_slot(&mut self, info: Option) { + self.parent_slot = info; + } } }; } diff --git a/ic10emu/src/vm/object/generic/structs.rs b/ic10emu/src/vm/object/generic/structs.rs index bb7fdc6..d97f703 100644 --- a/ic10emu/src/vm/object/generic/structs.rs +++ b/ic10emu/src/vm/object/generic/structs.rs @@ -9,8 +9,8 @@ use crate::{network::Connection, vm::{ use macro_rules_attribute::derive; use std::collections::BTreeMap; -#[derive(ObjectInterface!)] -#[custom(implements(Object { }))] +#[derive(ObjectInterface!, GWStructure!)] +#[custom(implements(Object { Structure }))] pub struct Generic { #[custom(object_id)] pub id: ObjectID, @@ -18,10 +18,11 @@ pub struct Generic { pub prefab: Name, #[custom(object_name)] pub name: Name, + pub small_grid: bool, } -#[derive(ObjectInterface!, GWStorage!)] -#[custom(implements(Object { Storage }))] +#[derive(ObjectInterface!, GWStructure!, GWStorage!)] +#[custom(implements(Object { Structure, Storage }))] pub struct GenericStorage { #[custom(object_id)] pub id: ObjectID, @@ -29,11 +30,12 @@ pub struct GenericStorage { pub prefab: Name, #[custom(object_name)] pub name: Name, + pub small_grid: bool, pub slots: Vec, } -#[derive(ObjectInterface!, GWStorage!, GWLogicable!)] -#[custom(implements(Object { Storage, Logicable }))] +#[derive(ObjectInterface!, GWStructure!, GWStorage!, GWLogicable!)] +#[custom(implements(Object { Structure, Storage, Logicable }))] pub struct GenericLogicable { #[custom(object_id)] pub id: ObjectID, @@ -41,12 +43,14 @@ pub struct GenericLogicable { pub prefab: Name, #[custom(object_name)] pub name: Name, - pub fields: BTreeMap, + pub small_grid: bool, pub slots: Vec, + pub fields: BTreeMap, + pub modes: Option>, } -#[derive(ObjectInterface!, GWStorage!, GWLogicable!, GWDevice!)] -#[custom(implements(Object { Storage, Logicable, Device }))] +#[derive(ObjectInterface!, GWStructure!, GWStorage!, GWLogicable!, GWDevice!)] +#[custom(implements(Object { Structure, Storage, Logicable, Device }))] pub struct GenericLogicableDevice { #[custom(object_id)] pub id: ObjectID, @@ -54,15 +58,17 @@ pub struct GenericLogicableDevice { pub prefab: Name, #[custom(object_name)] pub name: Name, - pub fields: BTreeMap, + pub small_grid: bool, pub slots: Vec, + pub fields: BTreeMap, + pub modes: Option>, pub device_info: DeviceInfo, pub connections: Vec, pub pins: Option>>, } -#[derive(ObjectInterface!, GWStorage!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] -#[custom(implements(Object { Storage, Logicable, Device, MemoryReadable }))] +#[derive(ObjectInterface!, GWStructure!, GWStorage!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] +#[custom(implements(Object { Structure, Storage, Logicable, Device, MemoryReadable }))] pub struct GenericLogicableDeviceMemoryReadable { #[custom(object_id)] pub id: ObjectID, @@ -70,16 +76,18 @@ pub struct GenericLogicableDeviceMemoryReadable { pub prefab: Name, #[custom(object_name)] pub name: Name, - pub fields: BTreeMap, + pub small_grid: bool pub slots: Vec, + pub fields: BTreeMap, + pub modes: Option>, pub device_info: DeviceInfo, pub connections: Vec, pub pins: Option>>, pub memory: Vec, } -#[derive(ObjectInterface!, GWStorage!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] -#[custom(implements(Object { Storage, Logicable, Device, MemoryReadable, MemoryWritable }))] +#[derive(ObjectInterface!, GWStructure!, GWStorage!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] +#[custom(implements(Object { Structure, Storage, Logicable, Device, MemoryReadable, MemoryWritable }))] pub struct GenericLogicableDeviceMemoryReadWriteable { #[custom(object_id)] pub id: ObjectID, @@ -87,8 +95,10 @@ pub struct GenericLogicableDeviceMemoryReadWriteable { pub prefab: Name, #[custom(object_name)] pub name: Name, - pub fields: BTreeMap, + pub small_grid: bool, pub slots: Vec, + pub fields: BTreeMap, + pub modes: Option>, pub device_info: DeviceInfo, pub connections: Vec, pub pins: Option>>, @@ -133,8 +143,9 @@ pub struct GenericItemLogicable { pub name: Name, pub item_info: ItemInfo, pub parent_slot: Option, - pub fields: BTreeMap, pub slots: Vec, + pub fields: BTreeMap, + pub modes: Option>, } #[derive(ObjectInterface!, GWItem!, GWStorage!, GWLogicable!, GWMemoryReadable! )] @@ -148,8 +159,9 @@ pub struct GenericItemLogicableMemoryReadable { pub name: Name, pub item_info: ItemInfo, pub parent_slot: Option, - pub fields: BTreeMap, pub slots: Vec, + pub fields: BTreeMap, + pub modes: Option>, pub memory: Vec, } @@ -164,7 +176,8 @@ pub struct GenericItemLogicableMemoryReadWriteable { pub name: Name, pub item_info: ItemInfo, pub parent_slot: Option, - pub fields: BTreeMap, pub slots: Vec, + pub fields: BTreeMap, + pub modes: Option>, pub memory: Vec, } diff --git a/ic10emu/src/vm/object/generic/traits.rs b/ic10emu/src/vm/object/generic/traits.rs index 0a3885a..f92763f 100644 --- a/ic10emu/src/vm/object/generic/traits.rs +++ b/ic10emu/src/vm/object/generic/traits.rs @@ -1,16 +1,32 @@ -use crate::{network::Connection, vm::{ - enums::{ - basic_enums::{Class as SlotClass, GasType, SortingClass}, - script_enums::{LogicSlotType, LogicType}, +use crate::{ + network::Connection, + vm::{ + enums::{ + basic_enums::{Class as SlotClass, GasType, SortingClass}, + script_enums::{LogicSlotType, LogicType}, + }, + object::{ + errors::{LogicError, MemoryError}, + templates::{DeviceInfo, ItemInfo}, + traits::*, + LogicField, MemoryAccess, ObjectID, Slot, + }, + VM, }, - object::{ - errors::{LogicError, MemoryError}, templates::{DeviceInfo, ItemInfo}, traits::*, LogicField, MemoryAccess, ObjectID, Slot - }, - VM, -}}; +}; use std::{collections::BTreeMap, usize}; use strum::IntoEnumIterator; +pub trait GWStructure { + fn small_grid(&self) -> bool; +} + +impl Structure for T { + fn is_small_grid(&self) -> bool { + self.small_grid() + } +} + pub trait GWStorage { fn slots(&self) -> &Vec; fn slots_mut(&mut self) -> &mut Vec; @@ -26,19 +42,26 @@ impl Storage for T { fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot> { self.slots_mut().get_mut(index) } + fn get_slots(&self) -> &[Slot] { + self.slots() + } + fn get_slots_mut(&mut self) -> &mut [Slot] { + self.slots_mut() + } } pub trait GWLogicable: Storage { fn fields(&self) -> &BTreeMap; fn fields_mut(&mut self) -> &mut BTreeMap; + fn modes(&self) -> Option<&BTreeMap>; } impl Logicable for T { fn prefab_hash(&self) -> i32 { - self.prefab().hash + self.get_prefab().hash } fn name_hash(&self) -> i32 { - self.name().hash + self.get_name().hash } fn is_logic_readable(&self) -> bool { LogicType::iter().any(|lt| self.can_logic_read(lt)) @@ -93,21 +116,23 @@ impl Logicable for T { _ => Err(LogicError::CantWrite(lt)), }) } - fn can_slot_logic_read(&self, slt: LogicSlotType, index: usize) -> bool { - self.get_slot(index) - .map(|slot| slot.enabled_logic.contains(&slt)) - .unwrap_or(false) + fn can_slot_logic_read(&self, slt: LogicSlotType, index: f64) -> bool { + if index < 0.0 { + false + } else { + self.get_slot(index as usize) + .map(|slot| slot.readable_logic.contains(&slt)) + .unwrap_or(false) + } } - fn get_slot_logic( - &self, - slt: LogicSlotType, - index: usize, - _vm: &VM, - ) -> Result { - self.get_slot(index) + fn get_slot_logic(&self, slt: LogicSlotType, index: f64, _vm: &VM) -> 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| { - if slot.enabled_logic.contains(&slt) { + if slot.readable_logic.contains(&slt) { match slot.occupant { Some(_id) => { // FIXME: impliment by accessing VM to get occupant @@ -120,6 +145,12 @@ impl Logicable for T { } }) } + fn valid_logic_types(&self) -> Vec { + self.fields().keys().copied().collect() + } + fn known_modes(&self) -> Option> { + self.modes().map(|modes| modes.iter().collect()) + } } pub trait GWMemoryReadable { @@ -140,6 +171,9 @@ impl MemoryReadable for T { Ok(self.memory()[index as usize]) } } + fn get_memory_slice(&self) -> &[f64] { + self.memory() + } } pub trait GWMemoryWritable: MemoryReadable { @@ -163,7 +197,7 @@ impl MemoryWritable for T { } } -pub trait GWDevice: Logicable { +pub trait GWDevice: GWLogicable + Logicable { fn device_info(&self) -> &DeviceInfo; fn device_connections(&self) -> &[Connection]; fn device_connections_mut(&mut self) -> &mut [Connection]; @@ -172,16 +206,52 @@ pub trait GWDevice: Logicable { } impl Device for T { - fn connection_list(&self) -> &[crate::network::Connection] { + fn can_slot_logic_write(&self, slt: LogicSlotType, index: f64) -> bool { + if index < 0.0 { + return 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, + vm: &VM, + force: bool, + ) -> Result<(), LogicError> { + if index < 0.0 { + return Err(LogicError::SlotIndexOutOfRange(index, self.slots_count())); + } + self.get_slot_mut(index as usize) + .ok_or_else(|| LogicError::SlotIndexOutOfRange(index, self.slots_count())) + .and_then(|slot| { + if slot.writeable_logic.contains(&slt) { + match slot.occupant { + Some(_id) => { + // FIXME: impliment by accessing VM to get occupant + Ok(()) + } + None => Ok(()), + } + } else { + Err(LogicError::CantSlotWrite(slt, index)) + } + }) + } + fn connection_list(&self) -> &[crate::network::Connection] { self.device_connections() } - fn connection_list_mut(&mut self) -> &mut[Connection] { + fn connection_list_mut(&mut self) -> &mut [Connection] { self.device_connections_mut() } fn device_pins(&self) -> Option<&[Option]> { self.device_pins() } - fn device_pins_mut(&self) -> Option<&mut[Option]> { + fn device_pins_mut(&self) -> Option<&mut [Option]> { self.device_pins_mut() } fn has_reagents(&self) -> bool { @@ -199,14 +269,21 @@ impl Device for T { 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 + } } pub trait GWItem { fn item_info(&self) -> &ItemInfo; fn parent_slot(&self) -> Option; + fn set_parent_slot(&mut self, info: Option); } impl Item for T { @@ -231,9 +308,12 @@ impl Item for T { fn sorting_class(&self) -> SortingClass { self.item_info().sorting_class } - fn parent_slot(&self) -> Option { + fn get_parent_slot(&self) -> Option { self.parent_slot() } + fn set_parent_slot(&mut self, info: Option) { + self.set_parent_slot(info); + } } pub trait GWCircuitHolder: Logicable {} diff --git a/ic10emu/src/vm/object/macros.rs b/ic10emu/src/vm/object/macros.rs index 2b1f708..c5bf977 100644 --- a/ic10emu/src/vm/object/macros.rs +++ b/ic10emu/src/vm/object/macros.rs @@ -8,30 +8,51 @@ macro_rules! object_trait { } }; (@body $trait_name:ident { $($trt:ident),* }; ) => { - type ID; - fn id(&self) -> &Self::ID; - fn prefab(&self) -> &crate::vm::object::Name; - fn name(&self) -> &crate::vm::object::Name; - + type ID: std::cmp::Ord + std::cmp::Eq + std::hash::Hash; + fn get_id(&self) -> &Self::ID; + fn set_id(&mut self, id: Self::ID); + 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 type_name(&self) -> &str; - fn as_object(&self) -> &dyn $trait_name; + fn as_mut_object(&mut self) -> &mut dyn $trait_name; - fn as_object_mut(&mut self) -> &mut dyn $trait_name; - - $( paste::paste! { - #[inline(always)] - fn [](&self) -> Option<[<$trt Ref>]> { - None - } + $( + #[inline(always)] + fn [](&self) -> Option<[<$trt Ref>]> { + None + } - #[inline(always)] - fn [](&mut self) -> Option<[<$trt RefMut>]> { - None + #[inline(always)] + fn [](&mut self) -> Option<[<$trt RefMut>]> { + None + } + )* } + }; + (@intf_struct $trait_name:ident { $($trt:ident),* };) => { + paste::paste! { + pub struct [<$trait_name Interfaces>]<'a, T: $trait_name> { + $( + pub [<$trt:snake>]: Option<[<$trt Ref>]<'a, T>>, + )* + } + + impl<'a, T: $trait_name> [<$trait_name Interfaces>]<'a, T> { + + pub fn [](obj: &'a dyn $trait_name) -> [<$trait_name Interfaces>]<'a, T> { + [<$trait_name Interfaces>] { + $( + [<$trt:snake>]: obj.[](), + )* + } + } + } + } - )* }; ( $trait_name:ident $(: $($bound:tt)* )? {$($trt:ident),*}) => { $( @@ -44,6 +65,8 @@ macro_rules! object_trait { $crate::vm::object::macros::object_trait!{@body $trait_name {$($trt),*}; } } + + $crate::vm::object::macros::object_trait!{@intf_struct $trait_name {$($trt),*}; } }; } @@ -61,18 +84,30 @@ macro_rules! ObjectInterface { impl $trait_name for $struct { type ID = $id_typ; - fn id(&self) -> &Self::ID { + fn get_id(&self) -> &Self::ID { &self.$id_field } - fn prefab(&self) -> &$prefab_typ { + fn set_id(&mut self, id: Self::ID) { + self.$id_field = id; + } + + fn get_prefab(&self) -> &$prefab_typ { &self.$prefab_field } - fn name(&self) -> &$name_typ { + 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 type_name(&self) -> &str { std::any::type_name::() } @@ -83,7 +118,7 @@ macro_rules! ObjectInterface { } #[inline(always)] - fn as_object_mut(&mut self) -> &mut dyn $trait_name { + fn as_mut_object(&mut self) -> &mut dyn $trait_name { self } @@ -527,7 +562,7 @@ macro_rules! tag_object_traits { $crate::vm::object::macros::tag_object_traits!{ @tag tag=$trt_name $(: $($obj_bound)* )?; - acc={ $trt, $($tagged_trt,)* }; + acc={ $($tagged_trt,)* $trt, }; $($used)* } }; diff --git a/ic10emu/src/vm/object/stationpedia.rs b/ic10emu/src/vm/object/stationpedia.rs index 06880de..d6713fb 100644 --- a/ic10emu/src/vm/object/stationpedia.rs +++ b/ic10emu/src/vm/object/stationpedia.rs @@ -8,7 +8,7 @@ pub mod structs; #[allow(unused)] pub fn object_from_prefab_template(template: &ObjectTemplate, id: ObjectID) -> Option { - let prefab = StationpediaPrefab::from_repr(template.prefab().prefab_hash); + let prefab = StationpediaPrefab::from_repr(template.prefab_info().prefab_hash); match prefab { Some(StationpediaPrefab::ItemIntegratedCircuit10) => { Some(VMObject::new(structs::ItemIntegratedCircuit10)) diff --git a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs index 34e4d15..9ee4b99 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs @@ -200,9 +200,12 @@ impl Item for ItemIntegratedCircuit10 { fn sorting_class(&self) -> SortingClass { SortingClass::Default } - fn parent_slot(&self) -> Option { + fn get_parent_slot(&self) -> Option { self.parent_slot } + fn set_parent_slot(&mut self, info: Option) { + self.parent_slot = info; + } } impl Storage for ItemIntegratedCircuit10 { @@ -270,9 +273,7 @@ impl SourceCode for ItemIntegratedCircuit10 { impl IntegratedCircuit for ItemIntegratedCircuit10 { fn get_circuit_holder(&self, vm: &VM) -> Option { // FIXME: implement correctly - self.parent_slot().map(|parent_slot| { - parent_slot.parent - }) + self.get_parent_slot().map(|parent_slot| parent_slot.parent) } fn get_instruction_pointer(&self) -> f64 { self.ip as f64 diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index 1f38b4e..32f9bfa 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -1,10 +1,12 @@ use std::collections::BTreeMap; use crate::{ - network::{ConnectionRole, ConnectionType}, + errors::TemplateError, + network::{Connection, ConnectionRole, ConnectionType}, vm::{ enums::{ basic_enums::{Class as SlotClass, GasType, SortingClass}, + prefabs::StationpediaPrefab, script_enums::{LogicSlotType, LogicType}, }, object::{ @@ -15,11 +17,13 @@ use crate::{ GenericLogicableDeviceMemoryReadWriteable, GenericLogicableDeviceMemoryReadable, GenericStorage, }, + traits::*, LogicField, Name, Slot, }, }, }; use serde_derive::{Deserialize, Serialize}; +use strum::IntoEnumIterator; use super::{stationpedia, MemoryAccess, ObjectID, VMObject}; @@ -38,7 +42,7 @@ pub enum ObjectTemplate { } impl ObjectTemplate { - pub fn prefab(&self) -> &PrefabInfo { + pub fn prefab_info(&self) -> &PrefabInfo { use ObjectTemplate::*; match self { Structure(s) => &s.prefab, @@ -53,7 +57,7 @@ impl ObjectTemplate { } } - pub fn object(&self) -> Option<&ObjectInfo> { + pub fn object_info(&self) -> Option<&ObjectInfo> { use ObjectTemplate::*; match self { Structure(s) => s.object.as_ref(), @@ -106,7 +110,7 @@ impl ObjectTemplate { .filter_map(|info| { info.occupant .as_ref() - .map(|obj| obj.object().map(|obj_info| obj_info.id).flatten()) + .map(|obj| obj.object_info().map(|obj_info| obj_info.id).flatten()) }) .flatten() .collect(), @@ -116,7 +120,7 @@ impl ObjectTemplate { .filter_map(|info| { info.occupant .as_ref() - .map(|obj| obj.object().map(|obj_info| obj_info.id).flatten()) + .map(|obj| obj.object_info().map(|obj_info| obj_info.id).flatten()) }) .flatten() .collect(), @@ -126,7 +130,7 @@ impl ObjectTemplate { .filter_map(|info| { info.occupant .as_ref() - .map(|obj| obj.object().map(|obj_info| obj_info.id).flatten()) + .map(|obj| obj.object_info().map(|obj_info| obj_info.id).flatten()) }) .flatten() .collect(), @@ -136,7 +140,7 @@ impl ObjectTemplate { .filter_map(|info| { info.occupant .as_ref() - .map(|obj| obj.object().map(|obj_info| obj_info.id).flatten()) + .map(|obj| obj.object_info().map(|obj_info| obj_info.id).flatten()) }) .flatten() .collect(), @@ -146,7 +150,7 @@ impl ObjectTemplate { .filter_map(|info| { info.occupant .as_ref() - .map(|obj| obj.object().map(|obj_info| obj_info.id).flatten()) + .map(|obj| obj.object_info().map(|obj_info| obj_info.id).flatten()) }) .flatten() .collect(), @@ -156,7 +160,7 @@ impl ObjectTemplate { .filter_map(|info| { info.occupant .as_ref() - .map(|obj| obj.object().map(|obj_info| obj_info.id).flatten()) + .map(|obj| obj.object_info().map(|obj_info| obj_info.id).flatten()) }) .flatten() .collect(), @@ -166,7 +170,7 @@ impl ObjectTemplate { .filter_map(|info| { info.occupant .as_ref() - .map(|obj| obj.object().map(|obj_info| obj_info.id).flatten()) + .map(|obj| obj.object_info().map(|obj_info| obj_info.id).flatten()) }) .flatten() .collect(), @@ -197,11 +201,13 @@ impl ObjectTemplate { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), name: Name::new(&s.prefab.name), + small_grid: s.structure.small_grid, }), StructureSlots(s) => VMObject::new(GenericStorage { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), name: Name::new(&s.prefab.name), + small_grid: s.structure.small_grid, slots: s .slots .iter() @@ -211,7 +217,8 @@ impl ObjectTemplate { index, name: info.name.clone(), typ: info.typ, - enabled_logic: Vec::new(), + readable_logic: Vec::new(), + writeable_logic: Vec::new(), occupant: None, }) .collect(), @@ -220,6 +227,51 @@ impl ObjectTemplate { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), name: Name::new(&s.prefab.name), + small_grid: s.structure.small_grid, + slots: s + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Read | MemoryAccess::ReadWrite => Some(key), + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + writeable_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Write | MemoryAccess::ReadWrite => Some(key), + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), fields: s .logic .logic_types @@ -235,29 +287,57 @@ impl ObjectTemplate { ) }) .collect(), - slots: s - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - enabled_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| s_info.slot_types.keys().copied().collect::>()) - .unwrap_or_else(|| Vec::new()), - occupant: None, - }) - .collect(), + modes: s.logic.modes.clone(), }), StructureLogicDevice(s) => VMObject::new(GenericLogicableDevice { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), name: Name::new(&s.prefab.name), + small_grid: s.structure.small_grid, + slots: s + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Read | MemoryAccess::ReadWrite => Some(key), + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + writeable_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Write | MemoryAccess::ReadWrite => Some(key), + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), fields: s .logic .logic_types @@ -273,24 +353,18 @@ impl ObjectTemplate { ) }) .collect(), - slots: s - .slots + modes: s.logic.modes.clone(), + connections: s + .device + .connection_list .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - enabled_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| s_info.slot_types.keys().copied().collect::>()) - .unwrap_or_else(|| Vec::new()), - occupant: None, - }) + .map(|conn_info| Connection::from_info(conn_info.typ, conn_info.role)) .collect(), + pins: s + .device + .device_pins_length + .map(|pins_len| vec![None; pins_len]), + device_info: s.device.clone(), }), StructureLogicDeviceMemory(s) if matches!(s.memory.memory_access, MemoryAccess::Read) => @@ -299,6 +373,55 @@ impl ObjectTemplate { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), name: Name::new(&s.prefab.name), + small_grid: s.structure.small_grid, + slots: s + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Read | MemoryAccess::ReadWrite => { + Some(key) + } + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + writeable_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Write | MemoryAccess::ReadWrite => { + Some(key) + } + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), fields: s .logic .logic_types @@ -314,24 +437,18 @@ impl ObjectTemplate { ) }) .collect(), - slots: s - .slots + modes: s.logic.modes.clone(), + connections: s + .device + .connection_list .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - enabled_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| s_info.slot_types.keys().copied().collect::>()) - .unwrap_or_else(|| Vec::new()), - occupant: None, - }) + .map(|conn_info| Connection::from_info(conn_info.typ, conn_info.role)) .collect(), + pins: s + .device + .device_pins_length + .map(|pins_len| vec![None; pins_len]), + device_info: s.device.clone(), memory: vec![0.0; s.memory.memory_size as usize], }) } @@ -340,6 +457,55 @@ impl ObjectTemplate { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), name: Name::new(&s.prefab.name), + small_grid: s.structure.small_grid, + slots: s + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Read | MemoryAccess::ReadWrite => { + Some(key) + } + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + writeable_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Write | MemoryAccess::ReadWrite => { + Some(key) + } + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), fields: s .logic .logic_types @@ -355,24 +521,18 @@ impl ObjectTemplate { ) }) .collect(), - slots: s - .slots + modes: s.logic.modes.clone(), + connections: s + .device + .connection_list .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - enabled_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| s_info.slot_types.keys().copied().collect::>()) - .unwrap_or_else(|| Vec::new()), - occupant: None, - }) + .map(|conn_info| Connection::from_info(conn_info.typ, conn_info.role)) .collect(), + pins: s + .device + .device_pins_length + .map(|pins_len| vec![None; pins_len]), + device_info: s.device.clone(), memory: vec![0.0; s.memory.memory_size as usize], }) } @@ -398,7 +558,8 @@ impl ObjectTemplate { index, name: info.name.clone(), typ: info.typ, - enabled_logic: Vec::new(), + readable_logic: Vec::new(), + writeable_logic: Vec::new(), occupant: None, }) .collect(), @@ -409,6 +570,50 @@ impl ObjectTemplate { name: Name::new(&i.prefab.name), item_info: i.item.clone(), parent_slot: None, + slots: i + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: i + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Read | MemoryAccess::ReadWrite => Some(key), + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + writeable_logic: i + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Write | MemoryAccess::ReadWrite => Some(key), + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), fields: i .logic .logic_types @@ -424,24 +629,7 @@ impl ObjectTemplate { ) }) .collect(), - slots: i - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - enabled_logic: i - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| s_info.slot_types.keys().copied().collect::>()) - .unwrap_or_else(|| Vec::new()), - occupant: None, - }) - .collect(), + modes: i.logic.modes.clone(), }), ItemLogicMemory(i) if matches!(i.memory.memory_access, MemoryAccess::Read) => { VMObject::new(GenericItemLogicableMemoryReadable { @@ -450,6 +638,54 @@ impl ObjectTemplate { name: Name::new(&i.prefab.name), item_info: i.item.clone(), parent_slot: None, + slots: i + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: i + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Read | MemoryAccess::ReadWrite => { + Some(key) + } + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + writeable_logic: i + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Write | MemoryAccess::ReadWrite => { + Some(key) + } + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), fields: i .logic .logic_types @@ -465,24 +701,7 @@ impl ObjectTemplate { ) }) .collect(), - slots: i - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - enabled_logic: i - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| s_info.slot_types.keys().copied().collect::>()) - .unwrap_or_else(|| Vec::new()), - occupant: None, - }) - .collect(), + modes: i.logic.modes.clone(), memory: vec![0.0; i.memory.memory_size as usize], }) } @@ -492,6 +711,50 @@ impl ObjectTemplate { name: Name::new(&i.prefab.name), item_info: i.item.clone(), parent_slot: None, + slots: i + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: i + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Read | MemoryAccess::ReadWrite => Some(key), + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + writeable_logic: i + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Write | MemoryAccess::ReadWrite => Some(key), + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), fields: i .logic .logic_types @@ -507,28 +770,690 @@ impl ObjectTemplate { ) }) .collect(), - slots: i - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - enabled_logic: i - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| s_info.slot_types.keys().copied().collect::>()) - .unwrap_or_else(|| Vec::new()), - occupant: None, - }) - .collect(), + modes: i.logic.modes.clone(), memory: vec![0.0; i.memory.memory_size as usize], }), } } + + pub fn freeze_object(obj: &VMObject) -> Result { + let obj_ref = obj.borrow(); + let interfaces = ObjectInterfaces::from_object(&*obj_ref); + match interfaces { + ObjectInterfaces { + structure: Some(stru), + 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, + } => { + let prefab_lookup = StationpediaPrefab::from_repr(obj_ref.get_prefab().hash); + // completely generic structure? not sure how this got created but it technically + // valid in the data model + Ok(ObjectTemplate::Structure(StructureTemplate { + object: Some(ObjectInfo { + name: Some(obj_ref.get_name().value()), + id: Some(*obj_ref.get_id()), + }), + prefab: PrefabInfo { + prefab_name: obj_ref.get_prefab().value, + prefab_hash: obj_ref.get_prefab().hash, + name: prefab_lookup + .map(|prefab| prefab.get_str("name")) + .flatten() + .unwrap_or("") + .to_string(), + desc: prefab_lookup + .map(|prefab| prefab.get_str("desc")) + .flatten() + .unwrap_or("") + .to_string(), + }, + structure: StructureInfo { + small_grid: stru.is_small_grid(), + }, + })) + } + ObjectInterfaces { + structure: Some(stru), + 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, + } => { + let prefab_lookup = StationpediaPrefab::from_repr(obj_ref.get_prefab().hash); + Ok(ObjectTemplate::StructureSlots(StructureSlotsTemplate { + object: Some(ObjectInfo { + name: Some(obj_ref.get_name().value()), + id: Some(*obj_ref.get_id()), + }), + prefab: PrefabInfo { + prefab_name: obj_ref.get_prefab().value, + prefab_hash: obj_ref.get_prefab().hash, + name: prefab_lookup + .map(|prefab| prefab.get_str("name")) + .flatten() + .unwrap_or("") + .to_string(), + desc: prefab_lookup + .map(|prefab| prefab.get_str("desc")) + .flatten() + .unwrap_or("") + .to_string(), + }, + structure: StructureInfo { + small_grid: stru.is_small_grid(), + }, + slots: storage + .get_slots() + .iter() + .map(|slot| { + Ok(SlotInfo { + name: slot.name.clone(), + typ: slot.typ, + occupant: slot + .occupant + .map(|occupant| ObjectTemplate::freeze_object(occupant)) + .map_or(Ok(None), |v| v.map(Some))?, + }) + }) + .collect::, _>>()?, + })) + } + ObjectInterfaces { + structure: Some(stru), + storage: Some(storage), + memory_readable: None, + memory_writable: None, + logicable: Some(logic), + 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, + } => { + let prefab_lookup = StationpediaPrefab::from_repr(obj_ref.get_prefab().hash); + Ok(ObjectTemplate::StructureLogic(StructureLogicTemplate { + object: Some(ObjectInfo { + name: Some(obj_ref.get_name().value()), + id: Some(*obj_ref.get_id()), + }), + prefab: PrefabInfo { + prefab_name: obj_ref.get_prefab().value, + prefab_hash: obj_ref.get_prefab().hash, + name: prefab_lookup + .map(|prefab| prefab.get_str("name")) + .flatten() + .unwrap_or("") + .to_string(), + desc: prefab_lookup + .map(|prefab| prefab.get_str("desc")) + .flatten() + .unwrap_or("") + .to_string(), + }, + structure: StructureInfo { + small_grid: stru.is_small_grid(), + }, + slots: storage + .get_slots() + .iter() + .map(|slot| { + Ok(SlotInfo { + name: slot.name.clone(), + typ: slot.typ, + occupant: slot + .occupant + .map(|occupant| ObjectTemplate::freeze_object(occupant)) + .map_or(Ok(None), |v| v.map(Some))?, + }) + }) + .collect::, _>>()?, + logic: LogicInfo { + logic_slot_types: storage + .get_slots() + .iter() + .enumerate() + .map(|(index, slot)| { + ( + index as u32, + LogicSlotTypes { + slot_types: 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: LogicTypes { + 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().collect()), + logic_values: logic + .valid_logic_types() + .iter() + .filter_map(|lt| logic.get_logic(lt).ok()), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + })) + } + ObjectInterfaces { + structure: Some(stru), + storage: Some(storage), + memory_readable: None, + memory_writable: None, + logicable: Some(logic), + source_code: None, + circuit_holder: None, + item: None, + integrated_circuit: None, + programmable: None, + instructable: None, + logic_stack: None, + device: Some(device), + wireless_transmit: None, + wireless_receive: None, + network: None, + } => { + let prefab_lookup = StationpediaPrefab::from_repr(obj_ref.get_prefab().hash); + Ok(ObjectTemplate::StructureLogicDevice( + StructureLogicDeviceTemplate { + object: Some(ObjectInfo { + name: Some(obj_ref.get_name().value()), + id: Some(*obj_ref.get_id()), + }), + prefab: PrefabInfo { + prefab_name: obj_ref.get_prefab().value, + prefab_hash: obj_ref.get_prefab().hash, + name: prefab_lookup + .map(|prefab| prefab.get_str("name")) + .flatten() + .unwrap_or("") + .to_string(), + desc: prefab_lookup + .map(|prefab| prefab.get_str("desc")) + .flatten() + .unwrap_or("") + .to_string(), + }, + structure: StructureInfo { + small_grid: stru.is_small_grid(), + }, + slots: storage + .get_slots() + .iter() + .map(|slot| { + Ok(SlotInfo { + name: slot.name.clone(), + typ: slot.typ, + occupant: slot + .occupant + .map(|occupant| ObjectTemplate::freeze_object(occupant)) + .map_or(Ok(None), |v| v.map(Some))?, + }) + }) + .collect::, _>>()?, + logic: LogicInfo { + logic_slot_types: storage + .get_slots() + .iter() + .enumerate() + .map(|(index, slot)| { + ( + index as u32, + LogicSlotTypes { + slot_types: 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: LogicTypes { + 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().collect()), + logic_values: logic + .valid_logic_types() + .iter() + .filter_map(|lt| logic.get_logic(lt).ok()), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + device: DeviceInfo { + connection_list: device + .connection_list() + .iter() + .map(|conn| conn.to_info()), + device_pins_length: device.device_pins().map(|pins| pins.len()), + device_pins: device.device_pins().map(|pins| pins.iter().collect()), + 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(), + }, + }, + )) + } + ObjectInterfaces { + structure: Some(stru), + storage: Some(storage), + memory_readable: Some(mem_r), + memory_writable: mem_w, + logicable: Some(logic), + source_code: None, + circuit_holder: None, + item: None, + integrated_circuit: None, + programmable: None, + instructable: inst, + logic_stack: None, + device: Some(device), + wireless_transmit: None, + wireless_receive: None, + network: None, + } => { + let prefab_lookup = StationpediaPrefab::from_repr(obj_ref.get_prefab().hash); + Ok(ObjectTemplate::StructureLogicDeviceMemory( + StructureLogicDeviceMemoryTemplate { + object: Some(ObjectInfo { + name: Some(obj_ref.get_name().value()), + id: Some(*obj_ref.get_id()), + }), + prefab: PrefabInfo { + prefab_name: obj_ref.get_prefab().value, + prefab_hash: obj_ref.get_prefab().hash, + name: prefab_lookup + .map(|prefab| prefab.get_str("name")) + .flatten() + .unwrap_or("") + .to_string(), + desc: prefab_lookup + .map(|prefab| prefab.get_str("desc")) + .flatten() + .unwrap_or("") + .to_string(), + }, + structure: StructureInfo { + small_grid: stru.is_small_grid(), + }, + slots: storage + .get_slots() + .iter() + .map(|slot| { + Ok(SlotInfo { + name: slot.name.clone(), + typ: slot.typ, + occupant: slot + .occupant + .map(|occupant| ObjectTemplate::freeze_object(occupant)) + .map_or(Ok(None), |v| v.map(Some))?, + }) + }) + .collect::, _>>()?, + logic: LogicInfo { + logic_slot_types: storage + .get_slots() + .iter() + .enumerate() + .map(|(index, slot)| { + ( + index as u32, + LogicSlotTypes { + slot_types: 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: LogicTypes { + 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().collect()), + logic_values: logic + .valid_logic_types() + .iter() + .filter_map(|lt| logic.get_logic(lt).ok()), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + device: DeviceInfo { + connection_list: device + .connection_list() + .iter() + .map(|conn| conn.to_info()), + device_pins_length: device.device_pins().map(|pins| pins.len()), + device_pins: device.device_pins().map(|pins| pins.iter().collect()), + 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(), + }, + memory: MemoryInfo { + instructions: None, // TODO: map info from `Instructable` trait + memory_access: if mem_w.is_some() { + MemoryAccess::ReadWrite + } else { + MemoryAccess::Read + }, + memory_size: mem_r.memory_size(), + values: Some(mem_r.get_memory_slice().iter().collect()), + }, + }, + )) + } + + // 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, + } => { + let prefab_lookup = StationpediaPrefab::from_repr(obj_ref.get_prefab().hash); + Ok(ObjectTemplate::Item(ItemTemplate { + object: Some(ObjectInfo { + name: Some(obj_ref.get_name().value()), + id: Some(*obj_ref.get_id()), + }), + prefab: PrefabInfo { + prefab_name: obj_ref.get_prefab().value, + prefab_hash: obj_ref.get_prefab().hash, + name: prefab_lookup + .map(|prefab| prefab.get_str("name")) + .flatten() + .unwrap_or("") + .to_string(), + desc: prefab_lookup + .map(|prefab| prefab.get_str("desc")) + .flatten() + .unwrap_or("") + .to_string(), + }, + item: ItemInfo { + consumable: item.consumable(), + filter_type: item.filter_type(), + ingredient: item.ingredient(), + max_quantity: item.max_quantity(), + reagents: item.reagents(), + slot_class: item.slot_class(), + sorting_class: item.sorting_class(), + }, + })) + } + 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, + } => { + let prefab_lookup = StationpediaPrefab::from_repr(obj_ref.get_prefab().hash); + Ok(ObjectTemplate::ItemSlots(ItemSlotsTemplate { + object: Some(ObjectInfo { + name: Some(obj_ref.get_name().value()), + id: Some(*obj_ref.get_id()), + }), + prefab: PrefabInfo { + prefab_name: obj_ref.get_prefab().value, + prefab_hash: obj_ref.get_prefab().hash, + name: prefab_lookup + .map(|prefab| prefab.get_str("name")) + .flatten() + .unwrap_or("") + .to_string(), + desc: prefab_lookup + .map(|prefab| prefab.get_str("desc")) + .flatten() + .unwrap_or("") + .to_string(), + }, + item: ItemInfo { + consumable: item.consumable(), + filter_type: item.filter_type(), + ingredient: item.ingredient(), + max_quantity: item.max_quantity(), + reagents: item.reagents(), + slot_class: item.slot_class(), + sorting_class: item.sorting_class(), + }, + slots: storage + .get_slots() + .iter() + .map(|slot| { + Ok(SlotInfo { + name: slot.name.clone(), + typ: slot.typ, + occupant: slot + .occupant + .map(|occupant| ObjectTemplate::freeze_object(occupant)) + .map_or(Ok(None), |v| v.map(Some))?, + }) + }) + .collect::, _>>()?, + })) + } + + ObjectInterfaces { + structure: None, + storage: Some(storage), + memory_readable: None, + memory_writable: None, + logicable: Some(logic), + source_code: None, + circuit_holder: None, + item: Some(item), + integrated_circuit: None, + programmable: None, + instructable: None, + logic_stack: None, + device: None, + wireless_transmit: wt, + wireless_receive: wr, + network: None, + } => { + let prefab_lookup = StationpediaPrefab::from_repr(obj_ref.get_prefab().hash); + Ok(ObjectTemplate::ItemLogic(ItemLogicTemplate { + object: Some(ObjectInfo { + name: Some(obj_ref.get_name().value()), + id: Some(*obj_ref.get_id()), + }), + prefab: PrefabInfo { + prefab_name: obj_ref.get_prefab().value, + prefab_hash: obj_ref.get_prefab().hash, + name: prefab_lookup + .map(|prefab| prefab.get_str("name")) + .flatten() + .unwrap_or("") + .to_string(), + desc: prefab_lookup + .map(|prefab| prefab.get_str("desc")) + .flatten() + .unwrap_or("") + .to_string(), + }, + item: ItemInfo { + consumable: item.consumable(), + filter_type: item.filter_type(), + ingredient: item.ingredient(), + max_quantity: item.max_quantity(), + reagents: item.reagents(), + slot_class: item.slot_class(), + sorting_class: item.sorting_class(), + }, + slots: storage + .get_slots() + .iter() + .map(|slot| { + Ok(SlotInfo { + name: slot.name.clone(), + typ: slot.typ, + occupant: slot + .occupant + .map(|occupant| ObjectTemplate::freeze_object(occupant)) + .map_or(Ok(None), |v| v.map(Some))?, + }) + }) + .collect::, _>>()?, + })) + } + _ => { + Err(TemplateError::NonConformingObject(obj_ref.get_id())) + } + } + } } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] @@ -610,7 +1535,7 @@ pub struct ConnectionInfo { pub struct DeviceInfo { pub connection_list: Vec, #[serde(skip_serializing_if = "Option::is_none")] - pub device_pins_length: Option, + pub device_pins_length: Option, #[serde(skip_serializing_if = "Option::is_none")] pub device_pins: Option>>, pub has_activate_state: bool, @@ -643,7 +1568,9 @@ pub struct MemoryInfo { #[serde(skip_serializing_if = "Option::is_none")] pub instructions: Option>, pub memory_access: MemoryAccess, - pub memory_size: i64, + pub memory_size: usize, + #[serde(skip_serializing_if = "Option::is_none")] + pub values: Option>, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index 30b0c0d..1869611 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -1,9 +1,7 @@ use serde_derive::{Deserialize, Serialize}; use crate::{ - errors::ICError, - network::Connection, - vm::{ + errors::ICError, interpreter::ICState, network::Connection, vm::{ enums::{ basic_enums::{Class as SlotClass, GasType, SortingClass}, script_enums::{LogicSlotType, LogicType}, @@ -15,7 +13,7 @@ use crate::{ ObjectID, Slot, }, VM, - }, + } }; use std::{collections::BTreeMap, fmt::Debug}; @@ -28,20 +26,27 @@ pub struct ParentSlotInfo { tag_object_traits! { #![object_trait(Object: Debug)] - pub trait MemoryReadable { - fn memory_size(&self) -> usize; - fn get_memory(&self, index: i32) -> Result; - } - - pub trait MemoryWritable: MemoryReadable { - fn set_memory(&mut self, index: i32, val: f64) -> Result<(), MemoryError>; - fn clear_memory(&mut self) -> Result<(), MemoryError>; + pub trait Structure { + fn is_small_grid(&self) -> bool; } pub trait Storage { fn slots_count(&self) -> usize; fn get_slot(&self, index: usize) -> Option<&Slot>; fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot>; + fn get_slots(&self) -> &[Slot]; + fn get_slots_mut(&mut self) -> &mut [Slot]; + } + + pub trait MemoryReadable { + fn memory_size(&self) -> usize; + fn get_memory(&self, index: i32) -> Result; + fn get_memory_slice(&self) -> &[f64]; + } + + pub trait MemoryWritable: MemoryReadable { + fn set_memory(&mut self, index: i32, val: f64) -> Result<(), MemoryError>; + fn clear_memory(&mut self) -> Result<(), MemoryError>; } pub trait Logicable: Storage { @@ -54,9 +59,10 @@ tag_object_traits! { fn can_logic_write(&self, lt: LogicType) -> bool; fn set_logic(&mut self, lt: LogicType, value: f64, force: bool) -> Result<(), LogicError>; fn get_logic(&self, lt: LogicType) -> Result; - fn can_slot_logic_read(&self, slt: LogicSlotType, index: f64) -> bool; fn get_slot_logic(&self, slt: LogicSlotType, index: f64, vm: &VM) -> Result; + fn valid_logic_types(&self) -> Vec; + fn known_modes(&self) -> Option>; } pub trait SourceCode { @@ -88,7 +94,8 @@ tag_object_traits! { fn reagents(&self) -> Option<&BTreeMap>; fn slot_class(&self) -> SlotClass; fn sorting_class(&self) -> SortingClass; - fn parent_slot(&self) -> Option; + fn get_parent_slot(&self) -> Option; + fn set_parent_slot(&mut self, info: Option); } pub trait IntegratedCircuit: Logicable + MemoryWritable + SourceCode + Item { @@ -114,12 +121,14 @@ tag_object_traits! { fn get_aliases(&self) -> &BTreeMap; fn get_defines(&self) -> &BTreeMap; fn get_labels(&self) -> &BTreeMap; + fn get_state(&self) -> ICState; + fn set_state(&mut self, state: ICState); } pub trait Programmable: ICInstructable { fn get_source_code(&self) -> String; fn set_source_code(&self, code: String); - fn step(&mut self) -> Result<(), crate::errors::ICError>; + fn step(&mut self, vm: &VM, advance_ip_on_err: bool) -> Result<(), crate::errors::ICError>; } pub trait Instructable: MemoryWritable { @@ -131,6 +140,7 @@ tag_object_traits! { } pub trait Device: Logicable { + fn can_slot_logic_write(&self, slt: LogicSlotType, index: f64) -> bool; fn set_slot_logic( &mut self, slt: LogicSlotType, @@ -144,6 +154,8 @@ tag_object_traits! { fn device_pins(&self) -> Option<&[Option]>; fn device_pins_mut(&self) -> Option<&mut [Option]>; fn has_activate_state(&self) -> bool; + fn has_atmosphere(&self) -> bool; + fn has_color_state(&self) -> bool; fn has_lock_state(&self) -> bool; fn has_mode_state(&self) -> bool; fn has_on_off_state(&self) -> bool; @@ -182,7 +194,7 @@ impl Debug for dyn Object { write!( f, "Object: (ID = {:?}, Type = {})", - self.id(), + self.get_id(), self.type_name() ) } diff --git a/ic10emu_wasm/src/lib.rs b/ic10emu_wasm/src/lib.rs index b667ec2..aa91a4f 100644 --- a/ic10emu_wasm/src/lib.rs +++ b/ic10emu_wasm/src/lib.rs @@ -107,7 +107,7 @@ impl DeviceRef { self.device.borrow().ic.as_ref().and_then(|ic| { self.vm .borrow() - .ic_holders + .circuit_holders .get(ic) .map(|ic| ic.as_ref().borrow().ip()) }) @@ -118,7 +118,7 @@ impl DeviceRef { self.device.borrow().ic.as_ref().and_then(|ic| { self.vm .borrow() - .ic_holders + .circuit_holders .get(ic) .map(|ic| ic.as_ref().borrow().ic.get()) }) @@ -129,7 +129,7 @@ impl DeviceRef { self.device.borrow().ic.as_ref().and_then(|ic| { self.vm .borrow() - .ic_holders + .circuit_holders .get(ic) .map(|ic| Stack(*ic.as_ref().borrow().stack.borrow())) }) @@ -140,7 +140,7 @@ impl DeviceRef { self.device.borrow().ic.as_ref().and_then(|ic| { self.vm .borrow() - .ic_holders + .circuit_holders .get(ic) .map(|ic| Registers(*ic.as_ref().borrow().registers.borrow())) }) @@ -151,7 +151,7 @@ impl DeviceRef { let aliases = &self.device.borrow().ic.as_ref().and_then(|ic| { self.vm .borrow() - .ic_holders + .circuit_holders .get(ic) .map(|ic| ic.as_ref().borrow().aliases.borrow().clone()) }); @@ -163,7 +163,7 @@ impl DeviceRef { let defines = &self.device.borrow().ic.as_ref().and_then(|ic| { self.vm .borrow() - .ic_holders + .circuit_holders .get(ic) .map(|ic| ic.as_ref().borrow().defines.borrow().clone()) }); @@ -175,7 +175,7 @@ impl DeviceRef { let pins = &self.device.borrow().ic.as_ref().and_then(|ic| { self.vm .borrow() - .ic_holders + .circuit_holders .get(ic) .map(|ic| *ic.as_ref().borrow().pins.borrow()) }); @@ -191,7 +191,7 @@ impl DeviceRef { .and_then(|ic| { self.vm .borrow() - .ic_holders + .circuit_holders .get(ic) .map(|ic| ic.borrow().state.clone()) }) @@ -203,7 +203,7 @@ impl DeviceRef { let prog = &self.device.borrow().ic.as_ref().and_then(|ic| { self.vm .borrow() - .ic_holders + .circuit_holders .get(ic) .map(|ic| ic.borrow().program.borrow().clone()) }); @@ -215,7 +215,7 @@ impl DeviceRef { self.device.borrow().ic.as_ref().and_then(|ic| { self.vm .borrow() - .ic_holders + .circuit_holders .get(ic) .map(|ic| ic.borrow().code.borrow().clone()) }) @@ -263,7 +263,7 @@ impl DeviceRef { .ok_or(VMError::NoIC(self.device.borrow().id))?; let vm_borrow = self.vm.borrow(); let ic = vm_borrow - .ic_holders + .circuit_holders .get(&ic_id) .ok_or(VMError::NoIC(self.device.borrow().id))?; let result = ic.borrow_mut().set_register(0, index, val)?; @@ -280,7 +280,7 @@ impl DeviceRef { .ok_or(VMError::NoIC(self.device.borrow().id))?; let vm_borrow = self.vm.borrow(); let ic = vm_borrow - .ic_holders + .circuit_holders .get(&ic_id) .ok_or(VMError::NoIC(self.device.borrow().id))?; let result = ic.borrow_mut().poke(address, val)?; @@ -433,7 +433,7 @@ impl VMRef { #[wasm_bindgen(getter)] pub fn ics(&self) -> Vec { - self.vm.borrow().ic_holders.keys().copied().collect_vec() + self.vm.borrow().circuit_holders.keys().copied().collect_vec() } #[wasm_bindgen(getter, js_name = "lastOperationModified")] diff --git a/rust-analyzer.json b/rust-analyzer.json new file mode 100644 index 0000000..2e62bd7 --- /dev/null +++ b/rust-analyzer.json @@ -0,0 +1,3 @@ +{ + "rust-analyzer.cargo.target": "wasm32-unknown-unknown" +} From d6ebbcf7e0a6778950d704d448b0e1d17f8f8cab Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Tue, 14 May 2024 00:10:48 -0700 Subject: [PATCH 14/50] refactor(vm): use From in freeze object --- ic10emu/src/errors.rs | 6 +- ic10emu/src/network.rs | 8 +- ic10emu/src/vm.rs | 249 +-- ic10emu/src/vm/object.rs | 41 +- ic10emu/src/vm/object/generic/structs.rs | 2 +- ic10emu/src/vm/object/generic/traits.rs | 2 +- ic10emu/src/vm/object/macros.rs | 44 +- ic10emu/src/vm/object/stationpedia.rs | 12 +- .../structs/integrated_circuit.rs | 1294 ++++++------ ic10emu/src/vm/object/templates.rs | 1814 ++++++++--------- ic10emu/src/vm/object/traits.rs | 16 +- 11 files changed, 1709 insertions(+), 1779 deletions(-) diff --git a/ic10emu/src/errors.rs b/ic10emu/src/errors.rs index ea4f240..e0faacf 100644 --- a/ic10emu/src/errors.rs +++ b/ic10emu/src/errors.rs @@ -41,8 +41,10 @@ pub enum VMError { #[derive(Error, Debug, Serialize, Deserialize)] pub enum TemplateError { - #[error("")] - NonConformingObject(ObjectID) + #[error("object id {0} has a non conforming set of interfaces")] + NonConformingObject(ObjectID), + #[error("ObjectID {0} is missing fomr the VM")] + MissingVMObject(ObjectID), } #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/ic10emu/src/network.rs b/ic10emu/src/network.rs index 47fb45b..58fa0ef 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -105,21 +105,21 @@ pub enum ConnectionRole { impl Connection { #[allow(dead_code)] - pub fn from_info(typ: ConnectionType, role: ConnectionRole) -> Self { + pub fn from_info(typ: ConnectionType, role: ConnectionRole, net: Option) -> Self { match typ { 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, }, diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index c196402..631628c 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -3,16 +3,16 @@ pub mod instructions; pub mod object; use crate::{ - device::{Device, DeviceTemplate, SlotOccupant, SlotOccupantTemplate}, + device::Device, errors::{ICError, VMError}, - interpreter::{self, FrozenIC, ICState, IC}, - network::{CableConnectionType, CableNetwork, Connection, FrozenNetwork}, + interpreter::ICState, + network::{CableConnectionType, CableNetwork, Connection, ConnectionRole, FrozenNetwork}, vm::{ - enums::script_enums::{LogicBatchMethod as BatchMode, LogicSlotType, LogicType}, + enums::script_enums::{LogicBatchMethod, LogicSlotType, LogicType}, object::{ templates::ObjectTemplate, traits::{Object, ParentSlotInfo}, - BoxedObject, ObjectID, VMObject, + ObjectID, VMObject, }, }, }; @@ -27,15 +27,15 @@ use serde_derive::{Deserialize, Serialize}; #[derive(Debug)] pub struct VM { - pub objects: BTreeMap, + pub objects: RefCell>, pub circuit_holders: RefCell>, pub program_holders: RefCell>, - pub networks: BTreeMap, - pub default_network_key: ObjectID, + pub networks: RefCell>, + pub default_network_key: RefCell, pub wireless_transmitters: RefCell>, pub wireless_receivers: RefCell>, - id_space: IdSpace, - network_id_space: IdSpace, + id_space: RefCell, + network_id_space: RefCell, random: Rc>, /// list of object id's touched on the last operation @@ -60,48 +60,48 @@ pub struct VMTransation { pub wireless_receivers: Vec, pub id_space: IdSpace, pub networks: BTreeMap, -} - -impl Default for VM { - fn default() -> Self { - Self::new() - } + vm: Rc, } impl VM { - pub fn new() -> Self { + 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 = VMObject::new(CableNetwork::new(default_network_key)); - let mut networks = BTreeMap::new(); - networks.insert(default_network_key, default_network); + let networks = BTreeMap::new(); - let mut vm = VM { - objects: BTreeMap::new(), + let mut vm = Rc::new(VM { + objects: RefCell::new(BTreeMap::new()), circuit_holders: RefCell::new(Vec::new()), program_holders: RefCell::new(Vec::new()), - networks, - default_network_key, + 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, - network_id_space, + 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 default_network = VMObject::new(CableNetwork::new(default_network_key), vm.clone()); + vm.networks.borrow_mut().insert(default_network_key, default_network); + vm } - pub fn add_device_from_template(&mut self, template: ObjectTemplate) -> Result { + pub fn add_device_from_template( + self: &Rc, + template: ObjectTemplate, + ) -> Result { let mut transaction = VMTransation::new(self); let obj_id = transaction.add_device_from_template(template)?; let transation_ids = transaction.id_space.in_use_ids(); - self.id_space.use_new_ids(&transation_ids); + self.id_space.borrow_mut().use_new_ids(&transation_ids); - self.objects.extend(transaction.objects); + self.objects.borrow_mut().extend(transaction.objects); self.wireless_transmitters .borrow_mut() .extend(transaction.wireless_transmitters); @@ -117,6 +117,7 @@ impl VM { for (net_id, trans_net) in transaction.networks.into_iter() { let net = self .networks + .borrow() .get(&net_id) .expect(&format!( "desync between vm and transation networks: {net_id}" @@ -135,39 +136,43 @@ impl VM { Ok(obj_id) } - pub fn add_network(&mut self) -> u32 { - let next_id = self.network_id_space.next(); + pub fn add_network(self: &Rc) -> u32 { + let next_id = self.network_id_space.borrow_mut().next(); self.networks - .insert(next_id, VMObject::new(CableNetwork::new(next_id))); + .borrow_mut() + .insert(next_id, VMObject::new(CableNetwork::new(next_id), self.clone())); next_id } - pub fn get_default_network(&self) -> VMObject { + pub fn get_default_network(self: &Rc) -> VMObject { self.networks - .get(&self.default_network_key) + .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() + pub fn get_network(self: &Rc, id: u32) -> Option { + self.networks.borrow().get(&id).cloned() } /// iterate over all object borrowing them mutably, never call unless VM is not currently /// stepping - pub fn change_device_id(&mut self, old_id: u32, new_id: u32) -> Result<(), VMError> { - if self.id_space.has_id(&new_id) { + pub fn change_device_id(self: &Rc, old_id: u32, new_id: u32) -> Result<(), VMError> { + if self.id_space.borrow().has_id(&new_id) { return Err(VMError::IdInUse(new_id)); } let obj = self .objects + .borrow_mut() .remove(&old_id) .ok_or(VMError::UnknownId(old_id))?; - self.id_space.use_id(new_id)?; + self.id_space.borrow_mut().use_id(new_id)?; obj.borrow_mut().set_id(new_id); - self.objects.insert(new_id, obj); + self.objects.borrow_mut().insert(new_id, obj); self.objects + .borrow_mut() .iter_mut() .filter_map(|(_obj_id, obj)| obj.borrow_mut().as_mut_device()) .for_each(|device| { @@ -194,7 +199,7 @@ impl VM { *id = new_id } }); - self.networks.iter().for_each(|(_net_id, net)| { + self.networks.borrow().iter().for_each(|(_net_id, net)| { let net_ref = net .borrow_mut() .as_mut_network() @@ -206,14 +211,15 @@ impl VM { net_ref.add_power(new_id); } }); - self.id_space.free_id(old_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 { + pub fn set_code(self: &Rc, id: u32, code: &str) -> Result { let programmable = self .objects + .borrow() .get(&id) .ok_or(VMError::UnknownId(id))? .borrow_mut() @@ -224,9 +230,10 @@ impl VM { } /// Set program code and translate invalid lines to Nop, collecting errors - pub fn set_code_invalid(&self, id: u32, code: &str) -> Result { + pub fn set_code_invalid(self: &Rc, id: u32, code: &str) -> Result { let programmable = self .objects + .borrow() .get(&id) .ok_or(VMError::UnknownId(id))? .borrow_mut() @@ -237,13 +244,14 @@ impl VM { } /// 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_programmable(&self, id: u32, advance_ip_on_err: bool) -> Result<(), VMError> { + pub fn step_programmable(self: &Rc, id: u32, advance_ip_on_err: bool) -> Result<(), VMError> { let programmable = self .objects + .borrow() .get(&id) .ok_or(VMError::UnknownId(id))? .borrow_mut() @@ -256,9 +264,10 @@ impl VM { } /// returns true if executed 128 lines, false if returned early. - pub fn run_programmable(&self, id: u32, ignore_errors: bool) -> Result { + pub fn run_programmable(self: &Rc, id: u32, ignore_errors: bool) -> Result { let programmable = self .objects + .borrow() .get(&id) .ok_or(VMError::UnknownId(id))? .borrow_mut() @@ -284,13 +293,14 @@ impl VM { Ok(true) } - pub fn set_modified(&self, id: ObjectID) { + pub fn set_modified(self: &Rc, id: ObjectID) { self.operation_modified.borrow_mut().push(id); } - pub fn reset_programmable(&self, id: ObjectID) -> Result { + pub fn reset_programmable(self: &Rc, id: ObjectID) -> Result { let programmable = self .objects + .borrow() .get(&id) .ok_or(VMError::UnknownId(id))? .borrow_mut() @@ -300,17 +310,18 @@ impl VM { Ok(true) } - pub fn get_object(&self, id: ObjectID) -> Option { - self.objects.get(&id).cloned() + pub fn get_object(self: &Rc, id: ObjectID) -> Option { + self.objects.borrow().get(&id).cloned() } pub fn batch_device( - &self, + self: &Rc, source: ObjectID, prefab_hash: f64, name: Option, - ) -> impl Iterator { + ) -> impl Iterator { self.objects + .borrow() .iter() .filter(move |(id, device)| { device.borrow().as_device().is_some_and(|device| { @@ -322,9 +333,12 @@ impl VM { && self.devices_on_same_network(&[source, **id]) }) .map(|(_, d)| d) + .cloned() + .collect::>() + .into_iter() } - pub fn get_device_same_network(&self, source: ObjectID, other: ObjectID) -> Option { + pub fn get_device_same_network(self: &Rc, source: ObjectID, other: ObjectID) -> Option { if self.devices_on_same_network(&[source, other]) { self.get_object(other) } else { @@ -332,8 +346,8 @@ impl VM { } } - pub fn get_network_channel(&self, id: u32, channel: usize) -> Result { - let network = self.networks.get(&id).ok_or(ICError::BadNetworkId(id))?; + pub fn get_network_channel(self: &Rc, id: u32, channel: usize) -> Result { + let network = self.networks.borrow().get(&id).ok_or(ICError::BadNetworkId(id))?; if !(0..8).contains(&channel) { Err(ICError::ChannelIndexOutOfRange(channel)) } else { @@ -349,12 +363,12 @@ impl VM { } pub fn set_network_channel( - &self, + self: &Rc, id: ObjectID, channel: usize, val: f64, ) -> Result<(), ICError> { - let network = self.networks.get(&(id)).ok_or(ICError::BadNetworkId(id))?; + let network = self.networks.borrow().get(&(id)).ok_or(ICError::BadNetworkId(id))?; if !(0..8).contains(&channel) { Err(ICError::ChannelIndexOutOfRange(channel)) } else { @@ -369,8 +383,8 @@ impl VM { } } - pub fn devices_on_same_network(&self, ids: &[ObjectID]) -> bool { - for net in self.networks.values() { + pub fn devices_on_same_network(self: &Rc, ids: &[ObjectID]) -> bool { + for net in self.networks.borrow().values() { if net .borrow() .as_network() @@ -384,8 +398,8 @@ impl VM { } /// return a vector with the device ids the source id can see via it's connected networks - pub fn visible_devices(&self, source: ObjectID) -> Vec { - self.networks + pub fn visible_devices(self: &Rc, source: ObjectID) -> Vec { + self.networks.borrow() .values() .filter_map(|net| { let net_ref = net.borrow().as_network().expect("non-network network"); @@ -398,12 +412,12 @@ impl VM { .concat() } - pub fn set_pin(&self, id: u32, pin: usize, val: Option) -> Result { - let Some(obj) = self.objects.get(&id) else { + pub fn set_pin(self: &Rc, id: u32, pin: usize, val: Option) -> Result { + let Some(obj) = self.objects.borrow().get(&id) else { return Err(VMError::UnknownId(id)); }; if let Some(other_device) = val { - if !self.objects.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]) { @@ -425,12 +439,12 @@ impl VM { } pub fn set_device_connection( - &self, + self: &Rc, id: ObjectID, connection: usize, target_net: Option, ) -> Result { - let Some(obj) = self.objects.get(&id) else { + let Some(obj) = self.objects.borrow().get(&id) else { return Err(VMError::UnknownId(id)); }; let Some(device) = obj.borrow_mut().as_mut_device() else { @@ -443,19 +457,20 @@ impl VM { } // scope this borrow - let Connection::CableNetwork { net, typ } = &connections[connection] else { + 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 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 + typ: other_typ, + .. } if other_net == net && ( !matches!(typ, CableConnectionType::Power) || matches!(other_typ, CableConnectionType::Data | CableConnectionType::PowerAndData)) @@ -487,12 +502,13 @@ impl VM { 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 @@ -518,12 +534,12 @@ impl VM { } pub fn remove_device_from_network( - &self, + self: &Rc, id: ObjectID, network_id: ObjectID, ) -> Result { - if let Some(network) = self.networks.get(&network_id) { - let Some(obj) = self.objects.get(&id) else { + if let Some(network) = self.networks.borrow().get(&network_id) { + let Some(obj) = self.objects.borrow().get(&id) else { return Err(VMError::UnknownId(id)); }; let Some(device) = obj.borrow_mut().as_mut_device() else { @@ -549,7 +565,7 @@ impl VM { } pub fn set_batch_device_field( - &self, + self: &Rc, source: ObjectID, prefab: f64, typ: LogicType, @@ -558,7 +574,7 @@ impl VM { ) -> Result<(), ICError> { self.batch_device(source, prefab, None) .map(|device| { - self.set_modified(*device.borrow().get_id()); + self.set_modified(device.borrow().get_id()); device .borrow_mut() .as_mut_device() @@ -570,7 +586,7 @@ impl VM { } pub fn set_batch_device_slot_field( - &self, + self: &Rc, source: ObjectID, prefab: f64, index: f64, @@ -580,7 +596,7 @@ impl VM { ) -> Result<(), ICError> { self.batch_device(source, prefab, None) .map(|device| { - self.set_modified(*device.borrow().get_id()); + self.set_modified(device.borrow().get_id()); device .borrow_mut() .as_mut_device() @@ -592,7 +608,7 @@ impl VM { } pub fn set_batch_name_device_field( - &self, + self: &Rc, source: ObjectID, prefab: f64, name: f64, @@ -602,7 +618,7 @@ impl VM { ) -> Result<(), ICError> { self.batch_device(source, prefab, Some(name)) .map(|device| { - self.set_modified(*device.borrow().get_id()); + self.set_modified(device.borrow().get_id()); device .borrow_mut() .as_mut_device() @@ -614,11 +630,11 @@ impl VM { } pub fn get_batch_device_field( - &self, + self: &Rc, source: ObjectID, prefab: f64, typ: LogicType, - mode: BatchMode, + mode: LogicBatchMethod, ) -> Result { let samples = self .batch_device(source, prefab, None) @@ -636,12 +652,12 @@ impl VM { } pub fn get_batch_name_device_field( - &self, + self: &Rc, source: ObjectID, prefab: f64, name: f64, typ: LogicType, - mode: BatchMode, + mode: LogicBatchMethod, ) -> Result { let samples = self .batch_device(source, prefab, Some(name)) @@ -659,13 +675,13 @@ impl VM { } pub fn get_batch_name_device_slot_field( - &self, + self: &Rc, source: ObjectID, prefab: f64, name: f64, index: f64, typ: LogicSlotType, - mode: BatchMode, + mode: LogicBatchMethod, ) -> Result { let samples = self .batch_device(source, prefab, Some(name)) @@ -683,12 +699,12 @@ impl VM { } pub fn get_batch_device_slot_field( - &self, + self: &Rc, source: ObjectID, prefab: f64, index: f64, typ: LogicSlotType, - mode: BatchMode, + mode: LogicBatchMethod, ) -> Result { let samples = self .batch_device(source, prefab, None) @@ -705,15 +721,15 @@ impl VM { Ok(mode.apply(&samples)) } - pub fn remove_object(&mut self, id: ObjectID) -> Result<(), VMError> { - let Some(obj) = self.objects.remove(&id) else { + 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)); }; 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.get(&net) { + if let Some(network) = self.networks.borrow().get(&net) { network .borrow_mut() .as_mut_network() @@ -726,7 +742,7 @@ impl VM { self.circuit_holders.borrow_mut().retain(|a| *a != id); } } - self.id_space.free_id(id); + self.id_space.borrow_mut().free_id(id); Ok(()) } @@ -735,13 +751,13 @@ impl VM { /// does not clean up previous object /// returns the id of any former occupant pub fn set_slot_occupant( - &mut self, + self: &Rc, id: ObjectID, index: usize, target: Option, quantity: u32, ) -> Result, VMError> { - let Some(obj) = self.objects.get(&id) else { + let Some(obj) = self.objects.borrow().get(&id) else { return Err(VMError::UnknownId(id)); }; let Some(storage) = obj.borrow_mut().as_mut_storage() else { @@ -751,7 +767,7 @@ impl VM { .get_slot_mut(index) .ok_or(ICError::SlotIndexOutOfRange(index as f64))?; if let Some(target) = target { - let Some(item_obj) = self.objects.get(&target) else { + let Some(item_obj) = self.objects.borrow().get(&target) else { return Err(VMError::UnknownId(id)); }; let Some(item) = item_obj.borrow_mut().as_mut_item() else { @@ -776,11 +792,11 @@ impl VM { /// returns former occupant id if any pub fn remove_slot_occupant( - &mut self, + self: &Rc, id: ObjectID, index: usize, ) -> Result, VMError> { - let Some(obj) = self.objects.get(&id) else { + let Some(obj) = self.objects.borrow().get(&id) else { return Err(VMError::UnknownId(id)); }; let Some(storage) = obj.borrow_mut().as_mut_storage() else { @@ -795,7 +811,7 @@ impl VM { Ok(last) } - pub fn save_vm_state(&self) -> FrozenVM { + pub fn save_vm_state(self: &Rc) -> FrozenVM { FrozenVM { ics: self .circuit_holders @@ -816,7 +832,7 @@ impl VM { } } - pub fn restore_vm_state(&mut self, state: FrozenVM) -> Result<(), VMError> { + pub fn restore_vm_state(self: &Rc, state: FrozenVM) -> Result<(), VMError> { self.circuit_holders.clear(); self.devices.clear(); self.networks.clear(); @@ -868,20 +884,22 @@ impl VM { } impl VMTransation { - pub fn new(vm: &VM) -> Self { + pub fn new(vm: &Rc) -> Self { VMTransation { objects: BTreeMap::new(), circuit_holders: Vec::new(), program_holders: Vec::new(), - default_network_key: vm.default_network_key, + default_network_key: *vm.default_network_key.borrow(), wireless_transmitters: Vec::new(), wireless_receivers: Vec::new(), - id_space: vm.id_space.clone(), + id_space: vm.id_space.borrow().clone(), networks: vm .networks + .borrow() .keys() .map(|net_id| (*net_id, VMTransationNetwork::default())) .collect(), + vm: vm.clone() } } @@ -902,7 +920,7 @@ impl VMTransation { self.id_space.next() }; - let obj = template.build(obj_id); + let obj = template.build(obj_id, self.vm); if let Some(storage) = obj.borrow_mut().as_mut_storage() { for (slot_index, occupant_template) in @@ -935,15 +953,16 @@ impl VMTransation { if let Connection::CableNetwork { net: Some(net_id), typ, + role: ConnectionRole::None, } = conn { - if let Some(net) = self.networks.get_mut(net_id) { + if let Some(net) = self.networks.get_mut(&net_id) { match typ { CableConnectionType::Power => net.power_only.push(obj_id), _ => net.objects.push(obj_id), } } else { - return Err(VMError::InvalidNetwork(*net_id)); + return Err(VMError::InvalidNetwork(net_id)); } } } @@ -955,19 +974,21 @@ impl VMTransation { } } -impl BatchMode { +impl LogicBatchMethod { pub fn apply(&self, samples: &[f64]) -> f64 { match self { - BatchMode::Sum => samples.iter().sum(), + LogicBatchMethod::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, + 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), @@ -1063,10 +1084,9 @@ impl IdSpace { } } - #[derive(Debug, Clone, Serialize, Deserialize)] pub struct FrozenVM { - pub objects Vec, + pub objects: Vec, pub circuit_holders: Vec, pub program_holders: Vec, pub default_network_key: ObjectID, @@ -1077,7 +1097,6 @@ pub struct FrozenVM { impl FrozenVM { pub fn from_vm(vm: &VM) -> Self { - let objects = vm.objects.iter().map() - + let objects = vm.objects.iter().map(); } } diff --git a/ic10emu/src/vm/object.rs b/ic10emu/src/vm/object.rs index d49ae72..c0b3831 100644 --- a/ic10emu/src/vm/object.rs +++ b/ic10emu/src/vm/object.rs @@ -1,4 +1,9 @@ -use std::{cell::RefCell, ops::{Deref, DerefMut}, rc::Rc, str::FromStr}; +use std::{ + cell::RefCell, + ops::{Deref, DerefMut}, + rc::Rc, + str::FromStr, +}; use macro_rules_attribute::derive; use serde_derive::{Deserialize, Serialize}; @@ -12,39 +17,55 @@ pub mod traits; use traits::Object; -use crate::vm::enums::{basic_enums::Class as SlotClass, script_enums::LogicSlotType}; +use crate::vm::{ + enums::{basic_enums::Class as SlotClass, script_enums::LogicSlotType}, + VM, +}; use super::enums::prefabs::StationpediaPrefab; pub type ObjectID = u32; -pub type BoxedObject = Rc>>; +pub type BoxedObject = Rc>; #[derive(Debug, Clone)] -pub struct VMObject(BoxedObject); +pub struct VMObject { + obj: BoxedObject, + vm: Rc, +} impl Deref for VMObject { type Target = BoxedObject; #[inline(always)] fn deref(&self) -> &Self::Target { - &self.0 + &self.obj } } impl DerefMut for VMObject { - #[inline(always)] fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 + &mut self.obj } } impl VMObject { - pub fn new(val: T) -> Self + pub fn new(val: T, vm: Rc) -> Self where - T: Object + 'static, + T: Object + 'static, { - VMObject(Rc::new(RefCell::new(val))) + VMObject { + obj: Rc::new(RefCell::new(val)), + vm, + } + } + + pub fn set_vm(&mut self, vm: Rc) { + self.vm = vm; + } + + pub fn get_vm(&self) -> &Rc { + &self.vm } } diff --git a/ic10emu/src/vm/object/generic/structs.rs b/ic10emu/src/vm/object/generic/structs.rs index d97f703..9a5260c 100644 --- a/ic10emu/src/vm/object/generic/structs.rs +++ b/ic10emu/src/vm/object/generic/structs.rs @@ -76,7 +76,7 @@ pub struct GenericLogicableDeviceMemoryReadable { pub prefab: Name, #[custom(object_name)] pub name: Name, - pub small_grid: bool + pub small_grid: bool, pub slots: Vec, pub fields: BTreeMap, pub modes: Option>, diff --git a/ic10emu/src/vm/object/generic/traits.rs b/ic10emu/src/vm/object/generic/traits.rs index f92763f..84b6789 100644 --- a/ic10emu/src/vm/object/generic/traits.rs +++ b/ic10emu/src/vm/object/generic/traits.rs @@ -21,7 +21,7 @@ pub trait GWStructure { fn small_grid(&self) -> bool; } -impl Structure for T { +impl Structure for T { fn is_small_grid(&self) -> bool { self.small_grid() } diff --git a/ic10emu/src/vm/object/macros.rs b/ic10emu/src/vm/object/macros.rs index c5bf977..ce9a691 100644 --- a/ic10emu/src/vm/object/macros.rs +++ b/ic10emu/src/vm/object/macros.rs @@ -1,33 +1,32 @@ macro_rules! object_trait { - (@intf {$trait_name:ident $trt:ident}) => { + (@intf {$trt:ident}) => { paste::paste! { #[allow(missing_docs, unused)] - pub type [<$trt Ref>]<'a, T> = &'a dyn $trt::ID>; + pub type [<$trt Ref>]<'a> = &'a dyn $trt; #[allow(missing_docs, unused)] - pub type [<$trt RefMut>]<'a, T> = &'a mut dyn $trt::ID>; + pub type [<$trt RefMut>]<'a> = &'a mut dyn $trt; } }; (@body $trait_name:ident { $($trt:ident),* }; ) => { - type ID: std::cmp::Ord + std::cmp::Eq + std::hash::Hash; - fn get_id(&self) -> &Self::ID; - fn set_id(&mut self, id: Self::ID); + 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 type_name(&self) -> &str; - fn as_object(&self) -> &dyn $trait_name; - fn as_mut_object(&mut self) -> &mut dyn $trait_name; + fn as_object(&self) -> &dyn $trait_name; + fn as_mut_object(&mut self) -> &mut dyn $trait_name; paste::paste! { $( #[inline(always)] - fn [](&self) -> Option<[<$trt Ref>]> { + fn [](&self) -> Option<[<$trt Ref>]> { None } #[inline(always)] - fn [](&mut self) -> Option<[<$trt RefMut>]> { + fn [](&mut self) -> Option<[<$trt RefMut>]> { None } )* @@ -35,15 +34,15 @@ macro_rules! object_trait { }; (@intf_struct $trait_name:ident { $($trt:ident),* };) => { paste::paste! { - pub struct [<$trait_name Interfaces>]<'a, T: $trait_name> { + pub struct [<$trait_name Interfaces>]<'a> { $( - pub [<$trt:snake>]: Option<[<$trt Ref>]<'a, T>>, + pub [<$trt:snake>]: Option<[<$trt Ref>]<'a>>, )* } - impl<'a, T: $trait_name> [<$trait_name Interfaces>]<'a, T> { + impl<'a> [<$trait_name Interfaces>]<'a> { - pub fn [](obj: &'a dyn $trait_name) -> [<$trait_name Interfaces>]<'a, T> { + pub fn [](obj: &'a dyn $trait_name) -> [<$trait_name Interfaces>]<'a> { [<$trait_name Interfaces>] { $( [<$trt:snake>]: obj.[](), @@ -56,7 +55,7 @@ macro_rules! object_trait { }; ( $trait_name:ident $(: $($bound:tt)* )? {$($trt:ident),*}) => { $( - $crate::vm::object::macros::object_trait!{@intf {$trait_name $trt}} + $crate::vm::object::macros::object_trait!{@intf {$trt}} )* @@ -82,13 +81,12 @@ macro_rules! ObjectInterface { @name $name_field:ident: $name_typ:ty; } => { impl $trait_name for $struct { - type ID = $id_typ; - fn get_id(&self) -> &Self::ID { - &self.$id_field + fn get_id(&self) -> crate::vm::object::ObjectID { + self.$id_field } - fn set_id(&mut self, id: Self::ID) { + fn set_id(&mut self, id: crate::vm::object::ObjectID) { self.$id_field = id; } @@ -113,23 +111,23 @@ macro_rules! ObjectInterface { } #[inline(always)] - fn as_object(&self) -> &dyn $trait_name { + fn as_object(&self) -> &dyn $trait_name { self } #[inline(always)] - fn as_mut_object(&mut self) -> &mut dyn $trait_name { + fn as_mut_object(&mut self) -> &mut dyn $trait_name { self } paste::paste!{$( #[inline(always)] - fn [](&self) -> Option<[<$trt Ref>]> { + fn [](&self) -> Option<[<$trt Ref>]> { Some(self) } #[inline(always)] - fn [](&mut self) -> Option<[<$trt RefMut>]> { + fn [](&mut self) -> Option<[<$trt RefMut>]> { Some(self) } )*} diff --git a/ic10emu/src/vm/object/stationpedia.rs b/ic10emu/src/vm/object/stationpedia.rs index d6713fb..f6b2b2d 100644 --- a/ic10emu/src/vm/object/stationpedia.rs +++ b/ic10emu/src/vm/object/stationpedia.rs @@ -1,4 +1,6 @@ -use crate::vm::enums::prefabs::StationpediaPrefab; +use std::rc::Rc; + +use crate::vm::{enums::prefabs::StationpediaPrefab, VM}; use crate::vm::object::VMObject; use super::templates::ObjectTemplate; @@ -7,12 +9,12 @@ use super::ObjectID; pub mod structs; #[allow(unused)] -pub fn object_from_prefab_template(template: &ObjectTemplate, id: ObjectID) -> Option { +pub fn object_from_prefab_template(template: &ObjectTemplate, id: ObjectID, vm: &Rc) -> Option { let prefab = StationpediaPrefab::from_repr(template.prefab_info().prefab_hash); match prefab { - Some(StationpediaPrefab::ItemIntegratedCircuit10) => { - Some(VMObject::new(structs::ItemIntegratedCircuit10)) - } + // Some(StationpediaPrefab::ItemIntegratedCircuit10) => { + // Some(VMObject::new(structs::ItemIntegratedCircuit10)) + // } // Some(StationpediaPrefab::StructureCircuitHousing) => Some() // Some(StationpediaPrefab::StructureRocketCircuitHousing) => Some() _ => None, diff --git a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs index 9ee4b99..8496eea 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs @@ -218,6 +218,12 @@ impl Storage for ItemIntegratedCircuit10 { fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot> { None } + fn get_slots(&self) -> &[Slot] { + &[] + } + fn get_slots_mut(&mut self) -> &mut[Slot] { + &mut [] + } } impl MemoryReadable for ItemIntegratedCircuit10 { @@ -233,6 +239,9 @@ impl MemoryReadable for ItemIntegratedCircuit10 { Ok(self.memory[index as usize]) } } + fn get_memory_slice(&self) -> &[f64] { + &self.memory + } } impl MemoryWritable for ItemIntegratedCircuit10 { @@ -281,6 +290,9 @@ impl IntegratedCircuit for ItemIntegratedCircuit10 { 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; @@ -387,6 +399,12 @@ impl IntegratedCircuit for ItemIntegratedCircuit10 { fn get_labels(&self) -> &BTreeMap { &self.program.labels } + fn get_state(&self) -> crate::interpreter::ICState { + self.state + } + fn set_state(&mut self, state: crate::interpreter::ICState) { + self.state = state; + } } impl SleepInstruction for ItemIntegratedCircuit10 { @@ -1306,642 +1324,644 @@ impl BdseInstruction for ItemIntegratedCircuit10 { Ok(()) } } -impl BdsealInstruction for ItemIntegratedCircuit10 { - /// bdseal d? a(r?|num) - fn execute_bdseal(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl BrdseInstruction for ItemIntegratedCircuit10 { - /// brdse d? a(r?|num) - fn execute_brdse(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl AbsInstruction for ItemIntegratedCircuit10 { - /// abs r? a(r?|num) - fn execute_abs(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl AcosInstruction for ItemIntegratedCircuit10 { - /// acos r? a(r?|num) - fn execute_acos(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl AddInstruction for ItemIntegratedCircuit10 { - /// add r? a(r?|num) b(r?|num) - fn execute_add( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl AndInstruction for ItemIntegratedCircuit10 { - /// and r? a(r?|num) b(r?|num) - fn execute_and( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl AsinInstruction for ItemIntegratedCircuit10 { - /// asin r? a(r?|num) - fn execute_asin(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl AtanInstruction for ItemIntegratedCircuit10 { - /// atan r? a(r?|num) - fn execute_atan(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl Atan2Instruction for ItemIntegratedCircuit10 { - /// atan2 r? a(r?|num) b(r?|num) - fn execute_atan2( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl BdnsInstruction for ItemIntegratedCircuit10 { - /// bdns d? a(r?|num) - fn execute_bdns(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl BdnsalInstruction for ItemIntegratedCircuit10 { - /// bdnsal d? a(r?|num) - fn execute_bdnsal(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl BnanInstruction for ItemIntegratedCircuit10 { - /// bnan a(r?|num) b(r?|num) - fn execute_bnan(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError>; -} -impl BrdnsInstruction for ItemIntegratedCircuit10 { - /// brdns d? a(r?|num) - fn execute_brdns(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl BrnanInstruction for ItemIntegratedCircuit10 { - /// brnan a(r?|num) b(r?|num) - fn execute_brnan(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError>; -} -impl CeilInstruction for ItemIntegratedCircuit10 { - /// ceil r? a(r?|num) - fn execute_ceil(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl ClrInstruction for ItemIntegratedCircuit10 { - /// clr d? - fn execute_clr(&mut self, vm: &VM, d: &Operand) -> Result<(), ICError>; -} -impl ClrdInstruction for ItemIntegratedCircuit10 { - /// clrd id(r?|num) - fn execute_clrd(&mut self, vm: &VM, id: &Operand) -> Result<(), ICError>; -} -impl CosInstruction for ItemIntegratedCircuit10 { - /// cos r? a(r?|num) - fn execute_cos(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl DivInstruction for ItemIntegratedCircuit10 { - /// div r? a(r?|num) b(r?|num) - fn execute_div( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl ExpInstruction for ItemIntegratedCircuit10 { - /// exp r? a(r?|num) - fn execute_exp(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl FloorInstruction for ItemIntegratedCircuit10 { - /// floor r? a(r?|num) - fn execute_floor(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl GetInstruction for ItemIntegratedCircuit10 { - /// get r? d? address(r?|num) - fn execute_get( - &mut self, - vm: &VM, - r: &Operand, - d: &Operand, - address: &Operand, - ) -> Result<(), ICError>; -} -impl GetdInstruction for ItemIntegratedCircuit10 { - /// getd r? id(r?|num) address(r?|num) - fn execute_getd( - &mut self, - vm: &VM, - r: &Operand, - id: &Operand, - address: &Operand, - ) -> Result<(), ICError>; -} -impl HcfInstruction for ItemIntegratedCircuit10 { - /// hcf - fn execute_hcf(&mut self, vm: &VM) -> Result<(), ICError>; -} -impl JInstruction for ItemIntegratedCircuit10 { - /// j int - fn execute_j(&mut self, vm: &VM, int: &Operand) -> Result<(), ICError>; -} -impl JalInstruction for ItemIntegratedCircuit10 { - /// jal int - fn execute_jal(&mut self, vm: &VM, int: &Operand) -> Result<(), ICError>; -} -impl JrInstruction for ItemIntegratedCircuit10 { - /// jr int - fn execute_jr(&mut self, vm: &VM, int: &Operand) -> Result<(), ICError>; -} -impl LInstruction for ItemIntegratedCircuit10 { - /// l r? d? logicType - fn execute_l( - &mut self, - vm: &VM, - r: &Operand, - d: &Operand, - logic_type: &Operand, - ) -> Result<(), ICError>; -} -impl LabelInstruction for ItemIntegratedCircuit10 { - /// label d? str - fn execute_label(&mut self, vm: &VM, d: &Operand, str: &Operand) -> Result<(), ICError>; -} -impl LbInstruction for ItemIntegratedCircuit10 { - /// lb r? deviceHash logicType batchMode - fn execute_lb( - &mut self, - vm: &VM, - r: &Operand, - device_hash: &Operand, - logic_type: &Operand, - batch_mode: &Operand, - ) -> Result<(), ICError>; -} -impl LbnInstruction for ItemIntegratedCircuit10 { - /// lbn r? deviceHash nameHash logicType batchMode - fn execute_lbn( - &mut self, - vm: &VM, - r: &Operand, - device_hash: &Operand, - name_hash: &Operand, - logic_type: &Operand, - batch_mode: &Operand, - ) -> Result<(), ICError>; -} -impl LbnsInstruction for ItemIntegratedCircuit10 { - /// lbns r? deviceHash nameHash slotIndex logicSlotType batchMode - fn execute_lbns( - &mut self, - vm: &VM, - r: &Operand, - device_hash: &Operand, - name_hash: &Operand, - slot_index: &Operand, - logic_slot_type: &Operand, - batch_mode: &Operand, - ) -> Result<(), ICError>; -} -impl LbsInstruction for ItemIntegratedCircuit10 { - /// lbs r? deviceHash slotIndex logicSlotType batchMode - fn execute_lbs( - &mut self, - vm: &VM, - r: &Operand, - device_hash: &Operand, - slot_index: &Operand, - logic_slot_type: &Operand, - batch_mode: &Operand, - ) -> Result<(), ICError>; -} -impl LdInstruction for ItemIntegratedCircuit10 { - /// ld r? id(r?|num) logicType - fn execute_ld( - &mut self, - vm: &VM, - r: &Operand, - id: &Operand, - logic_type: &Operand, - ) -> Result<(), ICError>; -} -impl LogInstruction for ItemIntegratedCircuit10 { - /// log r? a(r?|num) - fn execute_log(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl LrInstruction for ItemIntegratedCircuit10 { - /// lr r? d? reagentMode int - fn execute_lr( - &mut self, - vm: &VM, - r: &Operand, - d: &Operand, - reagent_mode: &Operand, - int: &Operand, - ) -> Result<(), ICError>; -} -impl LsInstruction for ItemIntegratedCircuit10 { - /// ls r? d? slotIndex logicSlotType - fn execute_ls( - &mut self, - vm: &VM, - r: &Operand, - d: &Operand, - slot_index: &Operand, - logic_slot_type: &Operand, - ) -> Result<(), ICError>; -} -impl MaxInstruction for ItemIntegratedCircuit10 { - /// max r? a(r?|num) b(r?|num) - fn execute_max( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl MinInstruction for ItemIntegratedCircuit10 { - /// min r? a(r?|num) b(r?|num) - fn execute_min( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl ModInstruction for ItemIntegratedCircuit10 { - /// mod r? a(r?|num) b(r?|num) - fn execute_mod( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl MulInstruction for ItemIntegratedCircuit10 { - /// mul r? a(r?|num) b(r?|num) - fn execute_mul( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl NorInstruction for ItemIntegratedCircuit10 { - /// nor r? a(r?|num) b(r?|num) - fn execute_nor( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl NotInstruction for ItemIntegratedCircuit10 { - /// not r? a(r?|num) - fn execute_not(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl OrInstruction for ItemIntegratedCircuit10 { - /// or r? a(r?|num) b(r?|num) - fn execute_or(&mut self, vm: &VM, r: &Operand, a: &Operand, b: &Operand) - -> Result<(), ICError>; -} -impl PeekInstruction for ItemIntegratedCircuit10 { - /// peek r? - fn execute_peek(&mut self, vm: &VM, r: &Operand) -> Result<(), ICError>; -} -impl PokeInstruction for ItemIntegratedCircuit10 { - /// poke address(r?|num) value(r?|num) - fn execute_poke(&mut self, vm: &VM, address: &Operand, value: &Operand) -> Result<(), ICError>; -} -impl PopInstruction for ItemIntegratedCircuit10 { - /// pop r? - fn execute_pop(&mut self, vm: &VM, r: &Operand) -> Result<(), ICError>; -} -impl PushInstruction for ItemIntegratedCircuit10 { - /// push a(r?|num) - fn execute_push(&mut self, vm: &VM, a: &Operand) -> Result<(), ICError>; -} -impl PutInstruction for ItemIntegratedCircuit10 { - /// put d? address(r?|num) value(r?|num) - fn execute_put( - &mut self, - vm: &VM, - d: &Operand, - address: &Operand, - value: &Operand, - ) -> Result<(), ICError>; -} -impl PutdInstruction for ItemIntegratedCircuit10 { - /// putd id(r?|num) address(r?|num) value(r?|num) - fn execute_putd( - &mut self, - vm: &VM, - id: &Operand, - address: &Operand, - value: &Operand, - ) -> Result<(), ICError>; -} -impl RandInstruction for ItemIntegratedCircuit10 { - /// rand r? - fn execute_rand(&mut self, vm: &VM, r: &Operand) -> Result<(), ICError>; -} -impl RoundInstruction for ItemIntegratedCircuit10 { - /// round r? a(r?|num) - fn execute_round(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl SInstruction for ItemIntegratedCircuit10 { - /// s d? logicType r? - fn execute_s( - &mut self, - vm: &VM, - d: &Operand, - logic_type: &Operand, - r: &Operand, - ) -> Result<(), ICError>; -} -impl SapInstruction for ItemIntegratedCircuit10 { - /// sap r? a(r?|num) b(r?|num) c(r?|num) - fn execute_sap( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError>; -} -impl SapzInstruction for ItemIntegratedCircuit10 { - /// sapz r? a(r?|num) b(r?|num) - fn execute_sapz( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl SbInstruction for ItemIntegratedCircuit10 { - /// sb deviceHash logicType r? - fn execute_sb( - &mut self, - vm: &VM, - device_hash: &Operand, - logic_type: &Operand, - r: &Operand, - ) -> Result<(), ICError>; -} -impl SbnInstruction for ItemIntegratedCircuit10 { - /// sbn deviceHash nameHash logicType r? - fn execute_sbn( - &mut self, - vm: &VM, - device_hash: &Operand, - name_hash: &Operand, - logic_type: &Operand, - r: &Operand, - ) -> Result<(), ICError>; -} -impl SbsInstruction for ItemIntegratedCircuit10 { - /// sbs deviceHash slotIndex logicSlotType r? - fn execute_sbs( - &mut self, - vm: &VM, - device_hash: &Operand, - slot_index: &Operand, - logic_slot_type: &Operand, - r: &Operand, - ) -> Result<(), ICError>; -} -impl SdInstruction for ItemIntegratedCircuit10 { - /// sd id(r?|num) logicType r? - fn execute_sd( - &mut self, - vm: &VM, - id: &Operand, - logic_type: &Operand, - r: &Operand, - ) -> Result<(), ICError>; -} -impl SdnsInstruction for ItemIntegratedCircuit10 { - /// sdns r? d? - fn execute_sdns(&mut self, vm: &VM, r: &Operand, d: &Operand) -> Result<(), ICError>; -} -impl SdseInstruction for ItemIntegratedCircuit10 { - /// sdse r? d? - fn execute_sdse(&mut self, vm: &VM, r: &Operand, d: &Operand) -> Result<(), ICError>; -} -impl SelectInstruction for ItemIntegratedCircuit10 { - /// select r? a(r?|num) b(r?|num) c(r?|num) - fn execute_select( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError>; -} -impl SeqInstruction for ItemIntegratedCircuit10 { - /// seq r? a(r?|num) b(r?|num) - fn execute_seq( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl SeqzInstruction for ItemIntegratedCircuit10 { - /// seqz r? a(r?|num) - fn execute_seqz(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl SgeInstruction for ItemIntegratedCircuit10 { - /// sge r? a(r?|num) b(r?|num) - fn execute_sge( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl SgezInstruction for ItemIntegratedCircuit10 { - /// sgez r? a(r?|num) - fn execute_sgez(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl SgtInstruction for ItemIntegratedCircuit10 { - /// sgt r? a(r?|num) b(r?|num) - fn execute_sgt( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl SgtzInstruction for ItemIntegratedCircuit10 { - /// sgtz r? a(r?|num) - fn execute_sgtz(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl SinInstruction for ItemIntegratedCircuit10 { - /// sin r? a(r?|num) - fn execute_sin(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl SlaInstruction for ItemIntegratedCircuit10 { - /// sla r? a(r?|num) b(r?|num) - fn execute_sla( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl SleInstruction for ItemIntegratedCircuit10 { - /// sle r? a(r?|num) b(r?|num) - fn execute_sle( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl SlezInstruction for ItemIntegratedCircuit10 { - /// slez r? a(r?|num) - fn execute_slez(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl SllInstruction for ItemIntegratedCircuit10 { - /// sll r? a(r?|num) b(r?|num) - fn execute_sll( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl SltInstruction for ItemIntegratedCircuit10 { - /// slt r? a(r?|num) b(r?|num) - fn execute_slt( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl SltzInstruction for ItemIntegratedCircuit10 { - /// sltz r? a(r?|num) - fn execute_sltz(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl SnaInstruction for ItemIntegratedCircuit10 { - /// sna r? a(r?|num) b(r?|num) c(r?|num) - fn execute_sna( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError>; -} -impl SnanInstruction for ItemIntegratedCircuit10 { - /// snan r? a(r?|num) - fn execute_snan(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl SnanzInstruction for ItemIntegratedCircuit10 { - /// snanz r? a(r?|num) - fn execute_snanz(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl SnazInstruction for ItemIntegratedCircuit10 { - /// snaz r? a(r?|num) b(r?|num) - fn execute_snaz( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl SneInstruction for ItemIntegratedCircuit10 { - /// sne r? a(r?|num) b(r?|num) - fn execute_sne( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl SnezInstruction for ItemIntegratedCircuit10 { - /// snez r? a(r?|num) - fn execute_snez(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl SqrtInstruction for ItemIntegratedCircuit10 { - /// sqrt r? a(r?|num) - fn execute_sqrt(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl SraInstruction for ItemIntegratedCircuit10 { - /// sra r? a(r?|num) b(r?|num) - fn execute_sra( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl SrlInstruction for ItemIntegratedCircuit10 { - /// srl r? a(r?|num) b(r?|num) - fn execute_srl( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl SsInstruction for ItemIntegratedCircuit10 { - /// ss d? slotIndex logicSlotType r? - fn execute_ss( - &mut self, - vm: &VM, - d: &Operand, - slot_index: &Operand, - logic_slot_type: &Operand, - r: &Operand, - ) -> Result<(), ICError>; -} -impl SubInstruction for ItemIntegratedCircuit10 { - /// sub r? a(r?|num) b(r?|num) - fn execute_sub( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} -impl TanInstruction for ItemIntegratedCircuit10 { - /// tan r? a(r?|num) - fn execute_tan(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl TruncInstruction for ItemIntegratedCircuit10 { - /// trunc r? a(r?|num) - fn execute_trunc(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -} -impl XorInstruction for ItemIntegratedCircuit10 { - /// xor r? a(r?|num) b(r?|num) - fn execute_xor( - &mut self, - vm: &VM, - r: &Operand, - a: &Operand, - b: &Operand, - ) -> Result<(), ICError>; -} +// impl BdsealInstruction for ItemIntegratedCircuit10 { +// /// bdseal d? a(r?|num) +// fn execute_bdseal(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl BrdseInstruction for ItemIntegratedCircuit10 { +// /// brdse d? a(r?|num) +// fn execute_brdse(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// +// impl AbsInstruction for ItemIntegratedCircuit10 { +// /// abs r? a(r?|num) +// fn execute_abs(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// +// impl AcosInstruction for ItemIntegratedCircuit10 { +// /// acos r? a(r?|num) +// fn execute_acos(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl AddInstruction for ItemIntegratedCircuit10 { +// /// add r? a(r?|num) b(r?|num) +// fn execute_add( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl AndInstruction for ItemIntegratedCircuit10 { +// /// and r? a(r?|num) b(r?|num) +// fn execute_and( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl AsinInstruction for ItemIntegratedCircuit10 { +// /// asin r? a(r?|num) +// fn execute_asin(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl AtanInstruction for ItemIntegratedCircuit10 { +// /// atan r? a(r?|num) +// fn execute_atan(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl Atan2Instruction for ItemIntegratedCircuit10 { +// /// atan2 r? a(r?|num) b(r?|num) +// fn execute_atan2( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl BdnsInstruction for ItemIntegratedCircuit10 { +// /// bdns d? a(r?|num) +// fn execute_bdns(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl BdnsalInstruction for ItemIntegratedCircuit10 { +// /// bdnsal d? a(r?|num) +// fn execute_bdnsal(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl BnanInstruction for ItemIntegratedCircuit10 { +// /// bnan a(r?|num) b(r?|num) +// fn execute_bnan(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError>; +// } +// impl BrdnsInstruction for ItemIntegratedCircuit10 { +// /// brdns d? a(r?|num) +// fn execute_brdns(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl BrnanInstruction for ItemIntegratedCircuit10 { +// /// brnan a(r?|num) b(r?|num) +// fn execute_brnan(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError>; +// } +// impl CeilInstruction for ItemIntegratedCircuit10 { +// /// ceil r? a(r?|num) +// fn execute_ceil(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl ClrInstruction for ItemIntegratedCircuit10 { +// /// clr d? +// fn execute_clr(&mut self, vm: &VM, d: &Operand) -> Result<(), ICError>; +// } +// impl ClrdInstruction for ItemIntegratedCircuit10 { +// /// clrd id(r?|num) +// fn execute_clrd(&mut self, vm: &VM, id: &Operand) -> Result<(), ICError>; +// } +// impl CosInstruction for ItemIntegratedCircuit10 { +// /// cos r? a(r?|num) +// fn execute_cos(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl DivInstruction for ItemIntegratedCircuit10 { +// /// div r? a(r?|num) b(r?|num) +// fn execute_div( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl ExpInstruction for ItemIntegratedCircuit10 { +// /// exp r? a(r?|num) +// fn execute_exp(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl FloorInstruction for ItemIntegratedCircuit10 { +// /// floor r? a(r?|num) +// fn execute_floor(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl GetInstruction for ItemIntegratedCircuit10 { +// /// get r? d? address(r?|num) +// fn execute_get( +// &mut self, +// vm: &VM, +// r: &Operand, +// d: &Operand, +// address: &Operand, +// ) -> Result<(), ICError>; +// } +// impl GetdInstruction for ItemIntegratedCircuit10 { +// /// getd r? id(r?|num) address(r?|num) +// fn execute_getd( +// &mut self, +// vm: &VM, +// r: &Operand, +// id: &Operand, +// address: &Operand, +// ) -> Result<(), ICError>; +// } +// impl HcfInstruction for ItemIntegratedCircuit10 { +// /// hcf +// fn execute_hcf(&mut self, vm: &VM) -> Result<(), ICError>; +// } +// impl JInstruction for ItemIntegratedCircuit10 { +// /// j int +// fn execute_j(&mut self, vm: &VM, int: &Operand) -> Result<(), ICError>; +// } +// impl JalInstruction for ItemIntegratedCircuit10 { +// /// jal int +// fn execute_jal(&mut self, vm: &VM, int: &Operand) -> Result<(), ICError>; +// } +// impl JrInstruction for ItemIntegratedCircuit10 { +// /// jr int +// fn execute_jr(&mut self, vm: &VM, int: &Operand) -> Result<(), ICError>; +// } +// impl LInstruction for ItemIntegratedCircuit10 { +// /// l r? d? logicType +// fn execute_l( +// &mut self, +// vm: &VM, +// r: &Operand, +// d: &Operand, +// logic_type: &Operand, +// ) -> Result<(), ICError>; +// } +// impl LabelInstruction for ItemIntegratedCircuit10 { +// /// label d? str +// fn execute_label(&mut self, vm: &VM, d: &Operand, str: &Operand) -> Result<(), ICError>; +// } +// impl LbInstruction for ItemIntegratedCircuit10 { +// /// lb r? deviceHash logicType batchMode +// fn execute_lb( +// &mut self, +// vm: &VM, +// r: &Operand, +// device_hash: &Operand, +// logic_type: &Operand, +// batch_mode: &Operand, +// ) -> Result<(), ICError>; +// } +// impl LbnInstruction for ItemIntegratedCircuit10 { +// /// lbn r? deviceHash nameHash logicType batchMode +// fn execute_lbn( +// &mut self, +// vm: &VM, +// r: &Operand, +// device_hash: &Operand, +// name_hash: &Operand, +// logic_type: &Operand, +// batch_mode: &Operand, +// ) -> Result<(), ICError>; +// } +// impl LbnsInstruction for ItemIntegratedCircuit10 { +// /// lbns r? deviceHash nameHash slotIndex logicSlotType batchMode +// fn execute_lbns( +// &mut self, +// vm: &VM, +// r: &Operand, +// device_hash: &Operand, +// name_hash: &Operand, +// slot_index: &Operand, +// logic_slot_type: &Operand, +// batch_mode: &Operand, +// ) -> Result<(), ICError>; +// } +// impl LbsInstruction for ItemIntegratedCircuit10 { +// /// lbs r? deviceHash slotIndex logicSlotType batchMode +// fn execute_lbs( +// &mut self, +// vm: &VM, +// r: &Operand, +// device_hash: &Operand, +// slot_index: &Operand, +// logic_slot_type: &Operand, +// batch_mode: &Operand, +// ) -> Result<(), ICError>; +// } +// impl LdInstruction for ItemIntegratedCircuit10 { +// /// ld r? id(r?|num) logicType +// fn execute_ld( +// &mut self, +// vm: &VM, +// r: &Operand, +// id: &Operand, +// logic_type: &Operand, +// ) -> Result<(), ICError>; +// } +// impl LogInstruction for ItemIntegratedCircuit10 { +// /// log r? a(r?|num) +// fn execute_log(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl LrInstruction for ItemIntegratedCircuit10 { +// /// lr r? d? reagentMode int +// fn execute_lr( +// &mut self, +// vm: &VM, +// r: &Operand, +// d: &Operand, +// reagent_mode: &Operand, +// int: &Operand, +// ) -> Result<(), ICError>; +// } +// impl LsInstruction for ItemIntegratedCircuit10 { +// /// ls r? d? slotIndex logicSlotType +// fn execute_ls( +// &mut self, +// vm: &VM, +// r: &Operand, +// d: &Operand, +// slot_index: &Operand, +// logic_slot_type: &Operand, +// ) -> Result<(), ICError>; +// } +// impl MaxInstruction for ItemIntegratedCircuit10 { +// /// max r? a(r?|num) b(r?|num) +// fn execute_max( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl MinInstruction for ItemIntegratedCircuit10 { +// /// min r? a(r?|num) b(r?|num) +// fn execute_min( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl ModInstruction for ItemIntegratedCircuit10 { +// /// mod r? a(r?|num) b(r?|num) +// fn execute_mod( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl MulInstruction for ItemIntegratedCircuit10 { +// /// mul r? a(r?|num) b(r?|num) +// fn execute_mul( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl NorInstruction for ItemIntegratedCircuit10 { +// /// nor r? a(r?|num) b(r?|num) +// fn execute_nor( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl NotInstruction for ItemIntegratedCircuit10 { +// /// not r? a(r?|num) +// fn execute_not(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl OrInstruction for ItemIntegratedCircuit10 { +// /// or r? a(r?|num) b(r?|num) +// fn execute_or(&mut self, vm: &VM, r: &Operand, a: &Operand, b: &Operand) +// -> Result<(), ICError>; +// } +// impl PeekInstruction for ItemIntegratedCircuit10 { +// /// peek r? +// fn execute_peek(&mut self, vm: &VM, r: &Operand) -> Result<(), ICError>; +// } +// impl PokeInstruction for ItemIntegratedCircuit10 { +// /// poke address(r?|num) value(r?|num) +// fn execute_poke(&mut self, vm: &VM, address: &Operand, value: &Operand) -> Result<(), ICError>; +// } +// impl PopInstruction for ItemIntegratedCircuit10 { +// /// pop r? +// fn execute_pop(&mut self, vm: &VM, r: &Operand) -> Result<(), ICError>; +// } +// impl PushInstruction for ItemIntegratedCircuit10 { +// /// push a(r?|num) +// fn execute_push(&mut self, vm: &VM, a: &Operand) -> Result<(), ICError>; +// } +// impl PutInstruction for ItemIntegratedCircuit10 { +// /// put d? address(r?|num) value(r?|num) +// fn execute_put( +// &mut self, +// vm: &VM, +// d: &Operand, +// address: &Operand, +// value: &Operand, +// ) -> Result<(), ICError>; +// } +// impl PutdInstruction for ItemIntegratedCircuit10 { +// /// putd id(r?|num) address(r?|num) value(r?|num) +// fn execute_putd( +// &mut self, +// vm: &VM, +// id: &Operand, +// address: &Operand, +// value: &Operand, +// ) -> Result<(), ICError>; +// } +// impl RandInstruction for ItemIntegratedCircuit10 { +// /// rand r? +// fn execute_rand(&mut self, vm: &VM, r: &Operand) -> Result<(), ICError>; +// } +// impl RoundInstruction for ItemIntegratedCircuit10 { +// /// round r? a(r?|num) +// fn execute_round(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl SInstruction for ItemIntegratedCircuit10 { +// /// s d? logicType r? +// fn execute_s( +// &mut self, +// vm: &VM, +// d: &Operand, +// logic_type: &Operand, +// r: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SapInstruction for ItemIntegratedCircuit10 { +// /// sap r? a(r?|num) b(r?|num) c(r?|num) +// fn execute_sap( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// c: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SapzInstruction for ItemIntegratedCircuit10 { +// /// sapz r? a(r?|num) b(r?|num) +// fn execute_sapz( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SbInstruction for ItemIntegratedCircuit10 { +// /// sb deviceHash logicType r? +// fn execute_sb( +// &mut self, +// vm: &VM, +// device_hash: &Operand, +// logic_type: &Operand, +// r: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SbnInstruction for ItemIntegratedCircuit10 { +// /// sbn deviceHash nameHash logicType r? +// fn execute_sbn( +// &mut self, +// vm: &VM, +// device_hash: &Operand, +// name_hash: &Operand, +// logic_type: &Operand, +// r: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SbsInstruction for ItemIntegratedCircuit10 { +// /// sbs deviceHash slotIndex logicSlotType r? +// fn execute_sbs( +// &mut self, +// vm: &VM, +// device_hash: &Operand, +// slot_index: &Operand, +// logic_slot_type: &Operand, +// r: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SdInstruction for ItemIntegratedCircuit10 { +// /// sd id(r?|num) logicType r? +// fn execute_sd( +// &mut self, +// vm: &VM, +// id: &Operand, +// logic_type: &Operand, +// r: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SdnsInstruction for ItemIntegratedCircuit10 { +// /// sdns r? d? +// fn execute_sdns(&mut self, vm: &VM, r: &Operand, d: &Operand) -> Result<(), ICError>; +// } +// impl SdseInstruction for ItemIntegratedCircuit10 { +// /// sdse r? d? +// fn execute_sdse(&mut self, vm: &VM, r: &Operand, d: &Operand) -> Result<(), ICError>; +// } +// impl SelectInstruction for ItemIntegratedCircuit10 { +// /// select r? a(r?|num) b(r?|num) c(r?|num) +// fn execute_select( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// c: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SeqInstruction for ItemIntegratedCircuit10 { +// /// seq r? a(r?|num) b(r?|num) +// fn execute_seq( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SeqzInstruction for ItemIntegratedCircuit10 { +// /// seqz r? a(r?|num) +// fn execute_seqz(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl SgeInstruction for ItemIntegratedCircuit10 { +// /// sge r? a(r?|num) b(r?|num) +// fn execute_sge( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SgezInstruction for ItemIntegratedCircuit10 { +// /// sgez r? a(r?|num) +// fn execute_sgez(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl SgtInstruction for ItemIntegratedCircuit10 { +// /// sgt r? a(r?|num) b(r?|num) +// fn execute_sgt( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SgtzInstruction for ItemIntegratedCircuit10 { +// /// sgtz r? a(r?|num) +// fn execute_sgtz(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl SinInstruction for ItemIntegratedCircuit10 { +// /// sin r? a(r?|num) +// fn execute_sin(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl SlaInstruction for ItemIntegratedCircuit10 { +// /// sla r? a(r?|num) b(r?|num) +// fn execute_sla( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SleInstruction for ItemIntegratedCircuit10 { +// /// sle r? a(r?|num) b(r?|num) +// fn execute_sle( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SlezInstruction for ItemIntegratedCircuit10 { +// /// slez r? a(r?|num) +// fn execute_slez(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl SllInstruction for ItemIntegratedCircuit10 { +// /// sll r? a(r?|num) b(r?|num) +// fn execute_sll( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SltInstruction for ItemIntegratedCircuit10 { +// /// slt r? a(r?|num) b(r?|num) +// fn execute_slt( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SltzInstruction for ItemIntegratedCircuit10 { +// /// sltz r? a(r?|num) +// fn execute_sltz(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl SnaInstruction for ItemIntegratedCircuit10 { +// /// sna r? a(r?|num) b(r?|num) c(r?|num) +// fn execute_sna( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// c: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SnanInstruction for ItemIntegratedCircuit10 { +// /// snan r? a(r?|num) +// fn execute_snan(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl SnanzInstruction for ItemIntegratedCircuit10 { +// /// snanz r? a(r?|num) +// fn execute_snanz(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl SnazInstruction for ItemIntegratedCircuit10 { +// /// snaz r? a(r?|num) b(r?|num) +// fn execute_snaz( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SneInstruction for ItemIntegratedCircuit10 { +// /// sne r? a(r?|num) b(r?|num) +// fn execute_sne( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SnezInstruction for ItemIntegratedCircuit10 { +// /// snez r? a(r?|num) +// fn execute_snez(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl SqrtInstruction for ItemIntegratedCircuit10 { +// /// sqrt r? a(r?|num) +// fn execute_sqrt(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl SraInstruction for ItemIntegratedCircuit10 { +// /// sra r? a(r?|num) b(r?|num) +// fn execute_sra( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SrlInstruction for ItemIntegratedCircuit10 { +// /// srl r? a(r?|num) b(r?|num) +// fn execute_srl( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SsInstruction for ItemIntegratedCircuit10 { +// /// ss d? slotIndex logicSlotType r? +// fn execute_ss( +// &mut self, +// vm: &VM, +// d: &Operand, +// slot_index: &Operand, +// logic_slot_type: &Operand, +// r: &Operand, +// ) -> Result<(), ICError>; +// } +// impl SubInstruction for ItemIntegratedCircuit10 { +// /// sub r? a(r?|num) b(r?|num) +// fn execute_sub( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } +// impl TanInstruction for ItemIntegratedCircuit10 { +// /// tan r? a(r?|num) +// fn execute_tan(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl TruncInstruction for ItemIntegratedCircuit10 { +// /// trunc r? a(r?|num) +// fn execute_trunc(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; +// } +// impl XorInstruction for ItemIntegratedCircuit10 { +// /// xor r? a(r?|num) b(r?|num) +// fn execute_xor( +// &mut self, +// vm: &VM, +// r: &Operand, +// a: &Operand, +// b: &Operand, +// ) -> Result<(), ICError>; +// } diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index 32f9bfa..19abf69 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -1,4 +1,4 @@ -use std::collections::BTreeMap; +use std::{collections::BTreeMap, rc::Rc}; use crate::{ errors::TemplateError, @@ -20,10 +20,11 @@ use crate::{ traits::*, LogicField, Name, Slot, }, + VM, }, }; use serde_derive::{Deserialize, Serialize}; -use strum::IntoEnumIterator; +use strum::{EnumProperty, IntoEnumIterator}; use super::{stationpedia, MemoryAccess, ObjectID, VMObject}; @@ -72,11 +73,11 @@ impl ObjectTemplate { } } - pub fn build(&self, id: ObjectID) -> VMObject { - if let Some(obj) = stationpedia::object_from_prefab_template(&self, id) { + pub fn build(&self, id: ObjectID, vm: &Rc) -> VMObject { + if let Some(obj) = stationpedia::object_from_prefab_template(&self, id, vm) { obj } else { - self.build_generic(id) + self.build_generic(id, vm) } } @@ -194,182 +195,329 @@ impl ObjectTemplate { } } - fn build_generic(&self, id: ObjectID) -> VMObject { + fn build_generic(&self, id: ObjectID, vm: &Rc) -> VMObject { use ObjectTemplate::*; match self { - Structure(s) => VMObject::new(Generic { - id, - prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.prefab.name), - small_grid: s.structure.small_grid, - }), - StructureSlots(s) => VMObject::new(GenericStorage { - id, - prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.prefab.name), - small_grid: s.structure.small_grid, - slots: s - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: Vec::new(), - writeable_logic: Vec::new(), - occupant: None, - }) - .collect(), - }), - StructureLogic(s) => VMObject::new(GenericLogicable { - id, - prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.prefab.name), - small_grid: s.structure.small_grid, - slots: s - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Read | MemoryAccess::ReadWrite => Some(key), - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(|| Vec::new()), - writeable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Write | MemoryAccess::ReadWrite => Some(key), - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(|| Vec::new()), - occupant: None, - }) - .collect(), - fields: s - .logic - .logic_types - .types - .iter() - .map(|(key, access)| { - ( - *key, - LogicField { - field_type: *access, - value: 0.0, - }, - ) - }) - .collect(), - modes: s.logic.modes.clone(), - }), - StructureLogicDevice(s) => VMObject::new(GenericLogicableDevice { - id, - prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.prefab.name), - small_grid: s.structure.small_grid, - slots: s - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Read | MemoryAccess::ReadWrite => Some(key), - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(|| Vec::new()), - writeable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Write | MemoryAccess::ReadWrite => Some(key), - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(|| Vec::new()), - occupant: None, - }) - .collect(), - fields: s - .logic - .logic_types - .types - .iter() - .map(|(key, access)| { - ( - *key, - LogicField { - field_type: *access, - value: 0.0, - }, - ) - }) - .collect(), - modes: s.logic.modes.clone(), - connections: s - .device - .connection_list - .iter() - .map(|conn_info| Connection::from_info(conn_info.typ, conn_info.role)) - .collect(), - pins: s - .device - .device_pins_length - .map(|pins_len| vec![None; pins_len]), - device_info: s.device.clone(), - }), + Structure(s) => VMObject::new( + Generic { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&s.prefab.name), + small_grid: s.structure.small_grid, + }, + vm.clone(), + ), + StructureSlots(s) => VMObject::new( + GenericStorage { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&s.prefab.name), + small_grid: s.structure.small_grid, + slots: s + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: Vec::new(), + writeable_logic: Vec::new(), + occupant: None, + }) + .collect(), + }, + vm.clone(), + ), + StructureLogic(s) => VMObject::new( + GenericLogicable { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&s.prefab.name), + small_grid: s.structure.small_grid, + slots: s + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Read | MemoryAccess::ReadWrite => { + Some(key) + } + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + writeable_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Write | MemoryAccess::ReadWrite => { + Some(key) + } + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), + fields: s + .logic + .logic_types + .types + .iter() + .map(|(key, access)| { + ( + *key, + LogicField { + field_type: *access, + value: s + .logic + .logic_values + .map(|values| values.get(key)) + .flatten() + .copied() + .unwrap_or(0.0), + }, + ) + }) + .collect(), + modes: s.logic.modes.clone(), + }, + vm.clone(), + ), + StructureLogicDevice(s) => VMObject::new( + GenericLogicableDevice { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&s.prefab.name), + small_grid: s.structure.small_grid, + slots: s + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Read | MemoryAccess::ReadWrite => { + Some(key) + } + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + writeable_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Write | MemoryAccess::ReadWrite => { + Some(key) + } + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), + fields: s + .logic + .logic_types + .types + .iter() + .map(|(key, access)| { + ( + *key, + LogicField { + field_type: *access, + value: s + .logic + .logic_values + .map(|values| values.get(key)) + .flatten() + .copied() + .unwrap_or(0.0), + }, + ) + }) + .collect(), + modes: s.logic.modes.clone(), + connections: s + .device + .connection_list + .iter() + .map(|conn_info| { + Connection::from_info(conn_info.typ, conn_info.role, conn_info.network) + }) + .collect(), + pins: s + .device + .device_pins + .map(|pins| Some(pins.clone())) + .unwrap_or_else(|| { + s.device + .device_pins_length + .map(|pins_len| vec![None; pins_len]) + }), + device_info: s.device.clone(), + }, + vm.clone(), + ), StructureLogicDeviceMemory(s) if matches!(s.memory.memory_access, MemoryAccess::Read) => { - VMObject::new(GenericLogicableDeviceMemoryReadable { + VMObject::new( + GenericLogicableDeviceMemoryReadable { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&s.prefab.name), + small_grid: s.structure.small_grid, + slots: s + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Read | MemoryAccess::ReadWrite => { + Some(key) + } + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + writeable_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Write | MemoryAccess::ReadWrite => { + Some(key) + } + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), + fields: s + .logic + .logic_types + .types + .iter() + .map(|(key, access)| { + ( + *key, + LogicField { + field_type: *access, + value: s + .logic + .logic_values + .map(|values| values.get(key)) + .flatten() + .copied() + .unwrap_or(0.0), + }, + ) + }) + .collect(), + modes: s.logic.modes.clone(), + connections: s + .device + .connection_list + .iter() + .map(|conn_info| { + Connection::from_info( + conn_info.typ, + conn_info.role, + conn_info.network, + ) + }) + .collect(), + pins: s + .device + .device_pins + .map(|pins| Some(pins.clone())) + .unwrap_or_else(|| { + s.device + .device_pins_length + .map(|pins_len| vec![None; pins_len]) + }), + device_info: s.device.clone(), + memory: s + .memory + .values + .clone() + .unwrap_or_else(|| vec![0.0; s.memory.memory_size as usize]), + }, + vm.clone(), + ) + } + StructureLogicDeviceMemory(s) => VMObject::new( + GenericLogicableDeviceMemoryReadWriteable { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), name: Name::new(&s.prefab.name), @@ -432,7 +580,13 @@ impl ObjectTemplate { *key, LogicField { field_type: *access, - value: 0.0, + value: s + .logic + .logic_values + .map(|values| values.get(key)) + .flatten() + .copied() + .unwrap_or(0.0), }, ) }) @@ -442,23 +596,46 @@ impl ObjectTemplate { .device .connection_list .iter() - .map(|conn_info| Connection::from_info(conn_info.typ, conn_info.role)) + .map(|conn_info| { + Connection::from_info(conn_info.typ, conn_info.role, conn_info.network) + }) .collect(), pins: s .device - .device_pins_length - .map(|pins_len| vec![None; pins_len]), + .device_pins + .map(|pins| Some(pins.clone())) + .unwrap_or_else(|| { + s.device + .device_pins_length + .map(|pins_len| vec![None; pins_len]) + }), device_info: s.device.clone(), - memory: vec![0.0; s.memory.memory_size as usize], - }) - } - StructureLogicDeviceMemory(s) => { - VMObject::new(GenericLogicableDeviceMemoryReadWriteable { + memory: s + .memory + .values + .clone() + .unwrap_or_else(|| vec![0.0; s.memory.memory_size as usize]), + }, + vm.clone(), + ), + Item(i) => VMObject::new( + GenericItem { id, - prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.prefab.name), - small_grid: s.structure.small_grid, - slots: s + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&i.prefab.name), + item_info: i.item.clone(), + parent_slot: None, + }, + vm.clone(), + ), + ItemSlots(i) => VMObject::new( + GenericItemStorage { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&i.prefab.name), + item_info: i.item.clone(), + parent_slot: None, + slots: i .slots .iter() .enumerate() @@ -467,172 +644,16 @@ impl ObjectTemplate { index, name: info.name.clone(), typ: info.typ, - readable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Read | MemoryAccess::ReadWrite => { - Some(key) - } - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(|| Vec::new()), - writeable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Write | MemoryAccess::ReadWrite => { - Some(key) - } - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(|| Vec::new()), + readable_logic: Vec::new(), + writeable_logic: Vec::new(), occupant: None, }) .collect(), - fields: s - .logic - .logic_types - .types - .iter() - .map(|(key, access)| { - ( - *key, - LogicField { - field_type: *access, - value: 0.0, - }, - ) - }) - .collect(), - modes: s.logic.modes.clone(), - connections: s - .device - .connection_list - .iter() - .map(|conn_info| Connection::from_info(conn_info.typ, conn_info.role)) - .collect(), - pins: s - .device - .device_pins_length - .map(|pins_len| vec![None; pins_len]), - device_info: s.device.clone(), - memory: vec![0.0; s.memory.memory_size as usize], - }) - } - Item(i) => VMObject::new(GenericItem { - id, - prefab: Name::from_prefab_name(&i.prefab.prefab_name), - name: Name::new(&i.prefab.name), - item_info: i.item.clone(), - parent_slot: None, - }), - ItemSlots(i) => VMObject::new(GenericItemStorage { - id, - prefab: Name::from_prefab_name(&i.prefab.prefab_name), - name: Name::new(&i.prefab.name), - item_info: i.item.clone(), - parent_slot: None, - slots: i - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: Vec::new(), - writeable_logic: Vec::new(), - occupant: None, - }) - .collect(), - }), - ItemLogic(i) => VMObject::new(GenericItemLogicable { - id, - prefab: Name::from_prefab_name(&i.prefab.prefab_name), - name: Name::new(&i.prefab.name), - item_info: i.item.clone(), - parent_slot: None, - slots: i - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: i - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Read | MemoryAccess::ReadWrite => Some(key), - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(|| Vec::new()), - writeable_logic: i - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Write | MemoryAccess::ReadWrite => Some(key), - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(|| Vec::new()), - occupant: None, - }) - .collect(), - fields: i - .logic - .logic_types - .types - .iter() - .map(|(key, access)| { - ( - *key, - LogicField { - field_type: *access, - value: 0.0, - }, - ) - }) - .collect(), - modes: i.logic.modes.clone(), - }), - ItemLogicMemory(i) if matches!(i.memory.memory_access, MemoryAccess::Read) => { - VMObject::new(GenericItemLogicableMemoryReadable { + }, + vm.clone(), + ), + ItemLogic(i) => VMObject::new( + GenericItemLogicable { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), name: Name::new(&i.prefab.name), @@ -696,92 +717,202 @@ impl ObjectTemplate { *key, LogicField { field_type: *access, - value: 0.0, + value: i + .logic + .logic_values + .map(|values| values.get(key)) + .flatten() + .copied() + .unwrap_or(0.0), }, ) }) .collect(), modes: i.logic.modes.clone(), - memory: vec![0.0; i.memory.memory_size as usize], - }) + }, + vm.clone(), + ), + ItemLogicMemory(i) if matches!(i.memory.memory_access, MemoryAccess::Read) => { + VMObject::new( + GenericItemLogicableMemoryReadable { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&i.prefab.name), + item_info: i.item.clone(), + parent_slot: None, + slots: i + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: i + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Read | MemoryAccess::ReadWrite => { + Some(key) + } + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + writeable_logic: i + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Write | MemoryAccess::ReadWrite => { + Some(key) + } + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), + fields: i + .logic + .logic_types + .types + .iter() + .map(|(key, access)| { + ( + *key, + LogicField { + field_type: *access, + value: i + .logic + .logic_values + .map(|values| values.get(key)) + .flatten() + .copied() + .unwrap_or(0.0), + }, + ) + }) + .collect(), + modes: i.logic.modes.clone(), + memory: i + .memory + .values + .clone() + .unwrap_or_else(|| vec![0.0; i.memory.memory_size as usize]), + }, + vm.clone(), + ) } - ItemLogicMemory(i) => VMObject::new(GenericItemLogicableMemoryReadWriteable { - id, - prefab: Name::from_prefab_name(&i.prefab.prefab_name), - name: Name::new(&i.prefab.name), - item_info: i.item.clone(), - parent_slot: None, - slots: i - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: i - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Read | MemoryAccess::ReadWrite => Some(key), - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(|| Vec::new()), - writeable_logic: i - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Write | MemoryAccess::ReadWrite => Some(key), - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(|| Vec::new()), - occupant: None, - }) - .collect(), - fields: i - .logic - .logic_types - .types - .iter() - .map(|(key, access)| { - ( - *key, - LogicField { - field_type: *access, - value: 0.0, - }, - ) - }) - .collect(), - modes: i.logic.modes.clone(), - memory: vec![0.0; i.memory.memory_size as usize], - }), + ItemLogicMemory(i) => VMObject::new( + GenericItemLogicableMemoryReadWriteable { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&i.prefab.name), + item_info: i.item.clone(), + parent_slot: None, + slots: i + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: i + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Read | MemoryAccess::ReadWrite => { + Some(key) + } + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + writeable_logic: i + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Write | MemoryAccess::ReadWrite => { + Some(key) + } + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), + fields: i + .logic + .logic_types + .types + .iter() + .map(|(key, access)| { + ( + *key, + LogicField { + field_type: *access, + value: i + .logic + .logic_values + .map(|values| values.get(key)) + .flatten() + .copied() + .unwrap_or(0.0), + }, + ) + }) + .collect(), + modes: i.logic.modes.clone(), + memory: i + .memory + .values + .clone() + .unwrap_or_else(|| vec![0.0; i.memory.memory_size as usize]), + }, + vm.clone(), + ), } } - pub fn freeze_object(obj: &VMObject) -> Result { + pub fn freeze_object(obj: &VMObject, vm: &Rc) -> Result { let obj_ref = obj.borrow(); let interfaces = ObjectInterfaces::from_object(&*obj_ref); match interfaces { ObjectInterfaces { - structure: Some(stru), + structure: Some(structure), storage: None, memory_readable: None, memory_writable: None, @@ -798,35 +929,16 @@ impl ObjectTemplate { wireless_receive: None, network: None, } => { - let prefab_lookup = StationpediaPrefab::from_repr(obj_ref.get_prefab().hash); // completely generic structure? not sure how this got created but it technically // valid in the data model Ok(ObjectTemplate::Structure(StructureTemplate { - object: Some(ObjectInfo { - name: Some(obj_ref.get_name().value()), - id: Some(*obj_ref.get_id()), - }), - prefab: PrefabInfo { - prefab_name: obj_ref.get_prefab().value, - prefab_hash: obj_ref.get_prefab().hash, - name: prefab_lookup - .map(|prefab| prefab.get_str("name")) - .flatten() - .unwrap_or("") - .to_string(), - desc: prefab_lookup - .map(|prefab| prefab.get_str("desc")) - .flatten() - .unwrap_or("") - .to_string(), - }, - structure: StructureInfo { - small_grid: stru.is_small_grid(), - }, + object: Some(obj.into()), + prefab: obj.into(), + structure: structure.into(), })) } ObjectInterfaces { - structure: Some(stru), + structure: Some(structure), storage: Some(storage), memory_readable: None, memory_writable: None, @@ -842,435 +954,91 @@ impl ObjectTemplate { wireless_transmit: None, wireless_receive: None, network: None, - } => { - let prefab_lookup = StationpediaPrefab::from_repr(obj_ref.get_prefab().hash); - Ok(ObjectTemplate::StructureSlots(StructureSlotsTemplate { - object: Some(ObjectInfo { - name: Some(obj_ref.get_name().value()), - id: Some(*obj_ref.get_id()), - }), - prefab: PrefabInfo { - prefab_name: obj_ref.get_prefab().value, - prefab_hash: obj_ref.get_prefab().hash, - name: prefab_lookup - .map(|prefab| prefab.get_str("name")) - .flatten() - .unwrap_or("") - .to_string(), - desc: prefab_lookup - .map(|prefab| prefab.get_str("desc")) - .flatten() - .unwrap_or("") - .to_string(), - }, - structure: StructureInfo { - small_grid: stru.is_small_grid(), - }, - slots: storage - .get_slots() - .iter() - .map(|slot| { - Ok(SlotInfo { - name: slot.name.clone(), - typ: slot.typ, - occupant: slot - .occupant - .map(|occupant| ObjectTemplate::freeze_object(occupant)) - .map_or(Ok(None), |v| v.map(Some))?, - }) - }) - .collect::, _>>()?, - })) - } + } => Ok(ObjectTemplate::StructureSlots(StructureSlotsTemplate { + object: Some(obj.into()), + prefab: obj.into(), + structure: structure.into(), + slots: freeze_storage(storage, vm)?, + })), ObjectInterfaces { - structure: Some(stru), + structure: Some(structure), storage: Some(storage), memory_readable: None, memory_writable: None, logicable: Some(logic), source_code: None, - circuit_holder: None, + circuit_holder: _ch, item: None, integrated_circuit: None, programmable: None, instructable: None, logic_stack: None, device: None, - wireless_transmit: None, - wireless_receive: None, + wireless_transmit: _wt, + wireless_receive: _wr, network: None, - } => { - let prefab_lookup = StationpediaPrefab::from_repr(obj_ref.get_prefab().hash); - Ok(ObjectTemplate::StructureLogic(StructureLogicTemplate { - object: Some(ObjectInfo { - name: Some(obj_ref.get_name().value()), - id: Some(*obj_ref.get_id()), - }), - prefab: PrefabInfo { - prefab_name: obj_ref.get_prefab().value, - prefab_hash: obj_ref.get_prefab().hash, - name: prefab_lookup - .map(|prefab| prefab.get_str("name")) - .flatten() - .unwrap_or("") - .to_string(), - desc: prefab_lookup - .map(|prefab| prefab.get_str("desc")) - .flatten() - .unwrap_or("") - .to_string(), - }, - structure: StructureInfo { - small_grid: stru.is_small_grid(), - }, - slots: storage - .get_slots() - .iter() - .map(|slot| { - Ok(SlotInfo { - name: slot.name.clone(), - typ: slot.typ, - occupant: slot - .occupant - .map(|occupant| ObjectTemplate::freeze_object(occupant)) - .map_or(Ok(None), |v| v.map(Some))?, - }) - }) - .collect::, _>>()?, - logic: LogicInfo { - logic_slot_types: storage - .get_slots() - .iter() - .enumerate() - .map(|(index, slot)| { - ( - index as u32, - LogicSlotTypes { - slot_types: 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: LogicTypes { - 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().collect()), - logic_values: logic - .valid_logic_types() - .iter() - .filter_map(|lt| logic.get_logic(lt).ok()), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - })) - } + } => Ok(ObjectTemplate::StructureLogic(StructureLogicTemplate { + object: Some(obj.into()), + prefab: obj.into(), + structure: structure.into(), + slots: freeze_storage(storage, vm)?, + logic: logic.into(), + })), ObjectInterfaces { - structure: Some(stru), + structure: Some(structure), storage: Some(storage), memory_readable: None, memory_writable: None, logicable: Some(logic), source_code: None, - circuit_holder: None, + circuit_holder: _ch, item: None, integrated_circuit: None, programmable: None, instructable: None, logic_stack: None, device: Some(device), - wireless_transmit: None, - wireless_receive: None, + wireless_transmit: _wt, + wireless_receive: _wr, network: None, - } => { - let prefab_lookup = StationpediaPrefab::from_repr(obj_ref.get_prefab().hash); - Ok(ObjectTemplate::StructureLogicDevice( - StructureLogicDeviceTemplate { - object: Some(ObjectInfo { - name: Some(obj_ref.get_name().value()), - id: Some(*obj_ref.get_id()), - }), - prefab: PrefabInfo { - prefab_name: obj_ref.get_prefab().value, - prefab_hash: obj_ref.get_prefab().hash, - name: prefab_lookup - .map(|prefab| prefab.get_str("name")) - .flatten() - .unwrap_or("") - .to_string(), - desc: prefab_lookup - .map(|prefab| prefab.get_str("desc")) - .flatten() - .unwrap_or("") - .to_string(), - }, - structure: StructureInfo { - small_grid: stru.is_small_grid(), - }, - slots: storage - .get_slots() - .iter() - .map(|slot| { - Ok(SlotInfo { - name: slot.name.clone(), - typ: slot.typ, - occupant: slot - .occupant - .map(|occupant| ObjectTemplate::freeze_object(occupant)) - .map_or(Ok(None), |v| v.map(Some))?, - }) - }) - .collect::, _>>()?, - logic: LogicInfo { - logic_slot_types: storage - .get_slots() - .iter() - .enumerate() - .map(|(index, slot)| { - ( - index as u32, - LogicSlotTypes { - slot_types: 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: LogicTypes { - 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().collect()), - logic_values: logic - .valid_logic_types() - .iter() - .filter_map(|lt| logic.get_logic(lt).ok()), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - device: DeviceInfo { - connection_list: device - .connection_list() - .iter() - .map(|conn| conn.to_info()), - device_pins_length: device.device_pins().map(|pins| pins.len()), - device_pins: device.device_pins().map(|pins| pins.iter().collect()), - 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(), - }, - }, - )) - } + } => Ok(ObjectTemplate::StructureLogicDevice( + StructureLogicDeviceTemplate { + object: Some(obj.into()), + prefab: obj.into(), + structure: structure.into(), + slots: freeze_storage(storage, vm)?, + logic: logic.into(), + device: device.into(), + }, + )), ObjectInterfaces { - structure: Some(stru), + structure: Some(structure), storage: Some(storage), memory_readable: Some(mem_r), - memory_writable: mem_w, + memory_writable: _mem_w, logicable: Some(logic), source_code: None, - circuit_holder: None, + circuit_holder: _ch, item: None, integrated_circuit: None, programmable: None, - instructable: inst, - logic_stack: None, + instructable: _inst, + logic_stack: _logic_stack, device: Some(device), - wireless_transmit: None, - wireless_receive: None, + wireless_transmit: _wt, + wireless_receive: _wr, network: None, - } => { - let prefab_lookup = StationpediaPrefab::from_repr(obj_ref.get_prefab().hash); - Ok(ObjectTemplate::StructureLogicDeviceMemory( - StructureLogicDeviceMemoryTemplate { - object: Some(ObjectInfo { - name: Some(obj_ref.get_name().value()), - id: Some(*obj_ref.get_id()), - }), - prefab: PrefabInfo { - prefab_name: obj_ref.get_prefab().value, - prefab_hash: obj_ref.get_prefab().hash, - name: prefab_lookup - .map(|prefab| prefab.get_str("name")) - .flatten() - .unwrap_or("") - .to_string(), - desc: prefab_lookup - .map(|prefab| prefab.get_str("desc")) - .flatten() - .unwrap_or("") - .to_string(), - }, - structure: StructureInfo { - small_grid: stru.is_small_grid(), - }, - slots: storage - .get_slots() - .iter() - .map(|slot| { - Ok(SlotInfo { - name: slot.name.clone(), - typ: slot.typ, - occupant: slot - .occupant - .map(|occupant| ObjectTemplate::freeze_object(occupant)) - .map_or(Ok(None), |v| v.map(Some))?, - }) - }) - .collect::, _>>()?, - logic: LogicInfo { - logic_slot_types: storage - .get_slots() - .iter() - .enumerate() - .map(|(index, slot)| { - ( - index as u32, - LogicSlotTypes { - slot_types: 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: LogicTypes { - 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().collect()), - logic_values: logic - .valid_logic_types() - .iter() - .filter_map(|lt| logic.get_logic(lt).ok()), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - device: DeviceInfo { - connection_list: device - .connection_list() - .iter() - .map(|conn| conn.to_info()), - device_pins_length: device.device_pins().map(|pins| pins.len()), - device_pins: device.device_pins().map(|pins| pins.iter().collect()), - 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(), - }, - memory: MemoryInfo { - instructions: None, // TODO: map info from `Instructable` trait - memory_access: if mem_w.is_some() { - MemoryAccess::ReadWrite - } else { - MemoryAccess::Read - }, - memory_size: mem_r.memory_size(), - values: Some(mem_r.get_memory_slice().iter().collect()), - }, - }, - )) - } + } => Ok(ObjectTemplate::StructureLogicDeviceMemory( + StructureLogicDeviceMemoryTemplate { + object: Some(obj.into()), + prefab: obj.into(), + structure: structure.into(), + slots: freeze_storage(storage, vm)?, + logic: logic.into(), + device: device.into(), + memory: mem_r.into(), + }, + )), // Item Objects ObjectInterfaces { @@ -1290,38 +1058,11 @@ impl ObjectTemplate { wireless_transmit: None, wireless_receive: None, network: None, - } => { - let prefab_lookup = StationpediaPrefab::from_repr(obj_ref.get_prefab().hash); - Ok(ObjectTemplate::Item(ItemTemplate { - object: Some(ObjectInfo { - name: Some(obj_ref.get_name().value()), - id: Some(*obj_ref.get_id()), - }), - prefab: PrefabInfo { - prefab_name: obj_ref.get_prefab().value, - prefab_hash: obj_ref.get_prefab().hash, - name: prefab_lookup - .map(|prefab| prefab.get_str("name")) - .flatten() - .unwrap_or("") - .to_string(), - desc: prefab_lookup - .map(|prefab| prefab.get_str("desc")) - .flatten() - .unwrap_or("") - .to_string(), - }, - item: ItemInfo { - consumable: item.consumable(), - filter_type: item.filter_type(), - ingredient: item.ingredient(), - max_quantity: item.max_quantity(), - reagents: item.reagents(), - slot_class: item.slot_class(), - sorting_class: item.sorting_class(), - }, - })) - } + } => Ok(ObjectTemplate::Item(ItemTemplate { + object: Some(obj.into()), + prefab: obj.into(), + item: item.into(), + })), ObjectInterfaces { structure: None, storage: Some(storage), @@ -1339,53 +1080,12 @@ impl ObjectTemplate { wireless_transmit: None, wireless_receive: None, network: None, - } => { - let prefab_lookup = StationpediaPrefab::from_repr(obj_ref.get_prefab().hash); - Ok(ObjectTemplate::ItemSlots(ItemSlotsTemplate { - object: Some(ObjectInfo { - name: Some(obj_ref.get_name().value()), - id: Some(*obj_ref.get_id()), - }), - prefab: PrefabInfo { - prefab_name: obj_ref.get_prefab().value, - prefab_hash: obj_ref.get_prefab().hash, - name: prefab_lookup - .map(|prefab| prefab.get_str("name")) - .flatten() - .unwrap_or("") - .to_string(), - desc: prefab_lookup - .map(|prefab| prefab.get_str("desc")) - .flatten() - .unwrap_or("") - .to_string(), - }, - item: ItemInfo { - consumable: item.consumable(), - filter_type: item.filter_type(), - ingredient: item.ingredient(), - max_quantity: item.max_quantity(), - reagents: item.reagents(), - slot_class: item.slot_class(), - sorting_class: item.sorting_class(), - }, - slots: storage - .get_slots() - .iter() - .map(|slot| { - Ok(SlotInfo { - name: slot.name.clone(), - typ: slot.typ, - occupant: slot - .occupant - .map(|occupant| ObjectTemplate::freeze_object(occupant)) - .map_or(Ok(None), |v| v.map(Some))?, - }) - }) - .collect::, _>>()?, - })) - } - + } => Ok(ObjectTemplate::ItemSlots(ItemSlotsTemplate { + object: Some(obj.into()), + prefab: obj.into(), + item: item.into(), + slots: freeze_storage(storage, vm)?, + })), ObjectInterfaces { structure: None, storage: Some(storage), @@ -1393,69 +1093,76 @@ impl ObjectTemplate { memory_writable: None, logicable: Some(logic), source_code: None, - circuit_holder: None, + circuit_holder: _ch, item: Some(item), integrated_circuit: None, programmable: None, instructable: None, logic_stack: None, device: None, - wireless_transmit: wt, - wireless_receive: wr, + wireless_transmit: _wt, + wireless_receive: _wr, network: None, - } => { - let prefab_lookup = StationpediaPrefab::from_repr(obj_ref.get_prefab().hash); - Ok(ObjectTemplate::ItemLogic(ItemLogicTemplate { - object: Some(ObjectInfo { - name: Some(obj_ref.get_name().value()), - id: Some(*obj_ref.get_id()), - }), - prefab: PrefabInfo { - prefab_name: obj_ref.get_prefab().value, - prefab_hash: obj_ref.get_prefab().hash, - name: prefab_lookup - .map(|prefab| prefab.get_str("name")) - .flatten() - .unwrap_or("") - .to_string(), - desc: prefab_lookup - .map(|prefab| prefab.get_str("desc")) - .flatten() - .unwrap_or("") - .to_string(), - }, - item: ItemInfo { - consumable: item.consumable(), - filter_type: item.filter_type(), - ingredient: item.ingredient(), - max_quantity: item.max_quantity(), - reagents: item.reagents(), - slot_class: item.slot_class(), - sorting_class: item.sorting_class(), - }, - slots: storage - .get_slots() - .iter() - .map(|slot| { - Ok(SlotInfo { - name: slot.name.clone(), - typ: slot.typ, - occupant: slot - .occupant - .map(|occupant| ObjectTemplate::freeze_object(occupant)) - .map_or(Ok(None), |v| v.map(Some))?, - }) - }) - .collect::, _>>()?, - })) - } - _ => { - Err(TemplateError::NonConformingObject(obj_ref.get_id())) - } + } => Ok(ObjectTemplate::ItemLogic(ItemLogicTemplate { + object: Some(obj.into()), + prefab: obj.into(), + item: item.into(), + slots: freeze_storage(storage, vm)?, + logic: logic.into(), + })), + ObjectInterfaces { + structure: None, + storage: Some(storage), + memory_readable: Some(mem_r), + memory_writable: _mem_w, + logicable: Some(logic), + source_code: None, + circuit_holder: _ch, + item: Some(item), + integrated_circuit: None, + programmable: None, + instructable: _inst, + logic_stack: _logic_stack, + device: None, + wireless_transmit: _wt, + wireless_receive: _wr, + network: None, + } => Ok(ObjectTemplate::ItemLogicMemory(ItemLogicMemoryTemplate { + object: Some(obj.into()), + prefab: obj.into(), + item: item.into(), + slots: freeze_storage(storage, vm)?, + logic: logic.into(), + memory: mem_r.into(), + })), + _ => Err(TemplateError::NonConformingObject(obj_ref.get_id())), } } } +fn freeze_storage(storage: StorageRef<'_>, vm: &Rc) -> Result, TemplateError> { + let slots = storage + .get_slots() + .iter() + .map(|slot| { + Ok(SlotInfo { + name: slot.name.clone(), + typ: slot.typ, + occupant: slot + .occupant + .map(|occupant| { + let occupant = vm + .get_object(occupant) + .ok_or(TemplateError::MissingVMObject(occupant))?; + ObjectTemplate::freeze_object(&occupant, vm) + }) + .map_or(Ok(None), |v| v.map(Some))?, + }) + }) + .collect::, _>>()?; + Ok(slots) +} + #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct PrefabInfo { @@ -1465,6 +1172,27 @@ pub struct PrefabInfo { pub name: String, } +impl From<&VMObject> for PrefabInfo { + fn from(obj: &VMObject) -> Self { + let obj_prefab = obj.borrow().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 + .map(|prefab| prefab.get_str("name")) + .flatten() + .unwrap_or("") + .to_string(), + desc: prefab_lookup + .map(|prefab| prefab.get_str("desc")) + .flatten() + .unwrap_or("") + .to_string(), + } + } +} + #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ObjectInfo { @@ -1472,6 +1200,16 @@ pub struct ObjectInfo { pub id: 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()), + } + } +} + #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SlotInfo { @@ -1507,6 +1245,80 @@ pub struct LogicInfo { pub circuit_holder: bool, } +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() + .enumerate() + .map(|(index, slot)| { + ( + index as u32, + LogicSlotTypes { + slot_types: 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: LogicTypes { + 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()), + logic_values: Some( + logic + .valid_logic_types() + .iter() + .filter_map(|lt| match logic.get_logic(*lt) { + Ok(val) => Some((*lt, val)), + _ => None + }) + .collect(), + ), + transmission_receiver: wr.is_some(), + wireless_logic: wt.is_some(), + circuit_holder: circuit_holder.is_some(), + } + } +} + #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ItemInfo { @@ -1521,6 +1333,20 @@ pub struct ItemInfo { pub sorting_class: SortingClass, } +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(), + } + } +} + #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ConnectionInfo { @@ -1548,12 +1374,38 @@ pub struct DeviceInfo { pub has_reagents: bool, } +impl From> for DeviceInfo { + fn from(device: DeviceRef) -> Self { + DeviceInfo { + connection_list: device.connection_list().iter().map(|conn| conn.to_info()).collect(), + device_pins_length: device.device_pins().map(|pins| pins.len()), + device_pins: device.device_pins().map(|pins| pins.iter().copied().collect()), + 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(), + } + } +} + #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct StructureInfo { pub small_grid: bool, } +impl From> for StructureInfo { + fn from(value: StructureRef) -> Self { + StructureInfo { + small_grid: value.is_small_grid(), + } + } +} + #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct Instruction { @@ -1562,7 +1414,7 @@ pub struct Instruction { pub value: i64, } -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct MemoryInfo { #[serde(skip_serializing_if = "Option::is_none")] @@ -1573,6 +1425,22 @@ pub struct MemoryInfo { pub values: Option>, } +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(), + values: Some(mem_r.get_memory_slice().iter().copied().collect()), + } + } +} + #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct StructureTemplate { diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index 1869611..b209fb1 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -75,14 +75,14 @@ tag_object_traits! { pub trait CircuitHolder: Logicable + Storage { fn clear_error(&mut self); fn set_error(&mut self, state: i32); - fn get_logicable_from_index(&self, device: usize, vm: &VM) -> Option>; - fn get_logicable_from_index_mut(&self, device: usize, vm: &VM) -> Option>; - fn get_logicable_from_id(&self, device: ObjectID, vm: &VM) -> Option>; - fn get_logicable_from_id_mut(&self, device: ObjectID, vm: &VM) -> Option>; + fn get_logicable_from_index(&self, device: usize, vm: &VM) -> Option; + fn get_logicable_from_index_mut(&self, device: usize, vm: &VM) -> Option; + fn get_logicable_from_id(&self, device: ObjectID, vm: &VM) -> Option; + fn get_logicable_from_id_mut(&self, device: ObjectID, vm: &VM) -> Option; fn get_source_code(&self) -> String; fn set_source_code(&self, code: String); - fn get_batch(&self) -> Vec>; - fn get_batch_mut(&self) -> Vec>; + fn get_batch(&self) -> Vec; + fn get_batch_mut(&self) -> Vec; fn get_ic(&self) -> Option; } @@ -99,7 +99,7 @@ tag_object_traits! { } pub trait IntegratedCircuit: Logicable + MemoryWritable + SourceCode + Item { - fn get_circuit_holder(&self, vm: &VM) -> Option>; + fn get_circuit_holder(&self, vm: &VM) -> Option; fn get_instruction_pointer(&self) -> f64; fn set_next_instruction(&mut self, next_instruction: f64); fn set_next_instruction_relative(&mut self, offset: f64) { @@ -189,7 +189,7 @@ tag_object_traits! { } -impl Debug for dyn Object { +impl Debug for dyn Object { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!( f, From de2698c2e23c8530a49270b3881af9b1349ae1f8 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Tue, 14 May 2024 05:13:12 -0700 Subject: [PATCH 15/50] refactor(vm): VMObjects should carry around a VM reference --- ic10emu/src/network.rs | 97 ++++- ic10emu/src/vm/object.rs | 26 +- ic10emu/src/vm/object/generic/macros.rs | 2 +- ic10emu/src/vm/object/generic/structs.rs | 26 +- ic10emu/src/vm/object/generic/traits.rs | 13 +- ic10emu/src/vm/object/macros.rs | 372 ++++++------------ .../structs/integrated_circuit.rs | 130 ++++-- ic10emu/src/vm/object/templates.rs | 23 +- ic10emu/src/vm/object/traits.rs | 4 +- 9 files changed, 370 insertions(+), 323 deletions(-) diff --git a/ic10emu/src/network.rs b/ic10emu/src/network.rs index 58fa0ef..ae87965 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -1,8 +1,12 @@ -use std::{collections::HashSet, ops::Deref}; +use std::{collections::HashSet, ops::Deref, rc::Rc}; use crate::vm::{ enums::script_enums::LogicType, - object::{errors::LogicError, macros::ObjectInterface, templates::ConnectionInfo, traits::*, Name, ObjectID}, + object::{ + errors::LogicError, macros::ObjectInterface, templates::ConnectionInfo, traits::*, Name, + ObjectID, + }, + VM, }; use itertools::Itertools; use macro_rules_attribute::derive; @@ -134,16 +138,68 @@ impl Connection { pub fn to_info(&self) -> ConnectionInfo { match self { - Self::None => ConnectionInfo { typ:ConnectionType::None, role: ConnectionRole::None, network: None }, - Self::CableNetwork { net, typ: CableConnectionType::Data, role } => ConnectionInfo { typ: ConnectionType::Data, role, network: net }, - Self::CableNetwork { net, typ: CableConnectionType::Power, role } => ConnectionInfo { typ: ConnectionType::Power, role, network: net }, - Self::CableNetwork { net, typ: CableConnectionType::PowerAndData, role } => ConnectionInfo { typ: ConnectionType::PowerAndData, role, network: net }, - Self::Chute { role } => ConnectionInfo { typ: ConnectionType::Chute, role, network: None }, - Self::Pipe { role } => ConnectionInfo { typ: ConnectionType::Pipe, role, network: None }, - Self::PipeLiquid { role } => ConnectionInfo { typ: ConnectionType::PipeLiquid, role, network: None }, - Self::Elevator { role } => ConnectionInfo { typ: ConnectionType::Elevator, role, network: None }, - Self::LandingPad { role } => ConnectionInfo { typ: ConnectionType::LandingPad, role, network: None }, - Self::LaunchPad { role } => ConnectionInfo { typ: ConnectionType::LaunchPad, role, network: None }, + Self::None => ConnectionInfo { + typ: ConnectionType::None, + role: ConnectionRole::None, + network: None, + }, + Self::CableNetwork { + net, + typ: CableConnectionType::Data, + role, + } => ConnectionInfo { + typ: ConnectionType::Data, + role: *role, + network: *net, + }, + Self::CableNetwork { + net, + typ: CableConnectionType::Power, + role, + } => ConnectionInfo { + typ: ConnectionType::Power, + role: *role, + network: *net, + }, + Self::CableNetwork { + net, + typ: CableConnectionType::PowerAndData, + role, + } => ConnectionInfo { + typ: ConnectionType::PowerAndData, + role: *role, + network: *net, + }, + Self::Chute { role } => ConnectionInfo { + typ: ConnectionType::Chute, + role: *role, + network: None, + }, + Self::Pipe { role } => ConnectionInfo { + typ: ConnectionType::Pipe, + role: *role, + network: None, + }, + Self::PipeLiquid { role } => ConnectionInfo { + typ: ConnectionType::PipeLiquid, + role: *role, + network: None, + }, + Self::Elevator { role } => ConnectionInfo { + typ: ConnectionType::Elevator, + role: *role, + network: None, + }, + Self::LandingPad { role } => ConnectionInfo { + typ: ConnectionType::LandingPad, + role: *role, + network: None, + }, + Self::LaunchPad { role } => ConnectionInfo { + typ: ConnectionType::LaunchPad, + role: *role, + network: None, + }, } } } @@ -159,6 +215,9 @@ pub struct CableNetwork { #[custom(object_name)] /// required by object interface but atm unused by network pub name: Name, + #[custom(object_vm_ref)] + #[serde(skip)] + pub vm: Option>, /// data enabled objects (must be devices) pub devices: HashSet, /// power only connections @@ -177,10 +236,10 @@ impl Storage for CableNetwork { fn get_slot_mut(&mut self, index: usize) -> Option<&mut crate::vm::object::Slot> { None } - fn get_slots(&self) -> &[crate::vm::object::Slot] { + fn get_slots(&self) -> &[crate::vm::object::Slot] { &vec![] } - fn get_slots_mut(&mut self) -> &mut[crate::vm::object::Slot] { + fn get_slots_mut(&mut self) -> &mut [crate::vm::object::Slot] { &mut vec![] } } @@ -258,13 +317,15 @@ impl Logicable for CableNetwork { index: f64, vm: &crate::vm::VM, ) -> Result { - Err(LogicError::CantSlotRead(slt, index as usize)) + Err(LogicError::CantSlotRead(slt, index)) } fn valid_logic_types(&self) -> Vec { use LogicType::*; - vec![Channel0, Channel1, Channel2, Channel3, Channel4, Channel5, Channel6, Channel7] + vec![ + Channel0, Channel1, Channel2, Channel3, Channel4, Channel5, Channel6, Channel7, + ] } - fn known_modes(&self) -> Option> { + fn known_modes(&self) -> Option> { None } } @@ -354,6 +415,7 @@ impl From for CableNetwork { id: value.id, prefab: Name::new(""), name: Name::new(""), + vm: None, devices: value.devices.into_iter().collect(), power_only: value.power_only.into_iter().collect(), channels: value.channels, @@ -373,6 +435,7 @@ impl CableNetwork { id, prefab: Name::new(""), name: Name::new(""), + vm: None, devices: HashSet::new(), power_only: HashSet::new(), channels: [f64::NAN; 8], diff --git a/ic10emu/src/vm/object.rs b/ic10emu/src/vm/object.rs index c0b3831..f8ff659 100644 --- a/ic10emu/src/vm/object.rs +++ b/ic10emu/src/vm/object.rs @@ -28,24 +28,21 @@ pub type ObjectID = u32; pub type BoxedObject = Rc>; #[derive(Debug, Clone)] -pub struct VMObject { - obj: BoxedObject, - vm: Rc, -} +pub struct VMObject(BoxedObject); impl Deref for VMObject { type Target = BoxedObject; #[inline(always)] fn deref(&self) -> &Self::Target { - &self.obj + &self.0 } } impl DerefMut for VMObject { #[inline(always)] fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.obj + &mut self.0 } } @@ -54,18 +51,21 @@ impl VMObject { where T: Object + 'static, { - VMObject { - obj: Rc::new(RefCell::new(val)), - vm, - } + let mut obj = VMObject(Rc::new(RefCell::new(val))); + obj.set_vm(vm); + obj } pub fn set_vm(&mut self, vm: Rc) { - self.vm = vm; + self.borrow_mut().set_vm(vm); } - pub fn get_vm(&self) -> &Rc { - &self.vm + pub fn get_vm(&self) -> Rc { + self + .borrow() + .get_vm() + .expect("VMObject with no VM?") + .clone() } } diff --git a/ic10emu/src/vm/object/generic/macros.rs b/ic10emu/src/vm/object/generic/macros.rs index 0de9aff..7232e7d 100644 --- a/ic10emu/src/vm/object/generic/macros.rs +++ b/ic10emu/src/vm/object/generic/macros.rs @@ -47,7 +47,7 @@ macro_rules! GWLogicable { fn fields_mut(&mut self) -> &mut BTreeMap { &mut self.fields } - fn modes(&self) -> Option<&BTreeMap> { + fn known_modes(&self) -> Option<&BTreeMap> { self.modes.as_ref() } } diff --git a/ic10emu/src/vm/object/generic/structs.rs b/ic10emu/src/vm/object/generic/structs.rs index 9a5260c..01dd8c8 100644 --- a/ic10emu/src/vm/object/generic/structs.rs +++ b/ic10emu/src/vm/object/generic/structs.rs @@ -4,10 +4,10 @@ use crate::{network::Connection, vm::{ enums::script_enums::LogicType, object::{ macros::ObjectInterface, templates::{DeviceInfo, ItemInfo}, traits::*, LogicField, Name, ObjectID, Slot, - }, + }, VM, }}; use macro_rules_attribute::derive; -use std::collections::BTreeMap; +use std::{collections::BTreeMap, rc::Rc}; #[derive(ObjectInterface!, GWStructure!)] #[custom(implements(Object { Structure }))] @@ -18,6 +18,8 @@ pub struct Generic { pub prefab: Name, #[custom(object_name)] pub name: Name, + #[custom(object_vm_ref)] + pub vm: Option>, pub small_grid: bool, } @@ -30,6 +32,8 @@ pub struct GenericStorage { pub prefab: Name, #[custom(object_name)] pub name: Name, + #[custom(object_vm_ref)] + pub vm: Option>, pub small_grid: bool, pub slots: Vec, } @@ -43,6 +47,8 @@ pub struct GenericLogicable { pub prefab: Name, #[custom(object_name)] pub name: Name, + #[custom(object_vm_ref)] + pub vm: Option>, pub small_grid: bool, pub slots: Vec, pub fields: BTreeMap, @@ -58,6 +64,8 @@ pub struct GenericLogicableDevice { pub prefab: Name, #[custom(object_name)] pub name: Name, + #[custom(object_vm_ref)] + pub vm: Option>, pub small_grid: bool, pub slots: Vec, pub fields: BTreeMap, @@ -76,6 +84,8 @@ pub struct GenericLogicableDeviceMemoryReadable { pub prefab: Name, #[custom(object_name)] pub name: Name, + #[custom(object_vm_ref)] + pub vm: Option>, pub small_grid: bool, pub slots: Vec, pub fields: BTreeMap, @@ -95,6 +105,8 @@ pub struct GenericLogicableDeviceMemoryReadWriteable { pub prefab: Name, #[custom(object_name)] pub name: Name, + #[custom(object_vm_ref)] + pub vm: Option>, pub small_grid: bool, pub slots: Vec, pub fields: BTreeMap, @@ -114,6 +126,8 @@ pub struct GenericItem { pub prefab: Name, #[custom(object_name)] pub name: Name, + #[custom(object_vm_ref)] + pub vm: Option>, pub item_info: ItemInfo, pub parent_slot: Option, } @@ -127,6 +141,8 @@ pub struct GenericItemStorage { pub prefab: Name, #[custom(object_name)] pub name: Name, + #[custom(object_vm_ref)] + pub vm: Option>, pub item_info: ItemInfo, pub parent_slot: Option, pub slots: Vec, @@ -141,6 +157,8 @@ pub struct GenericItemLogicable { pub prefab: Name, #[custom(object_name)] pub name: Name, + #[custom(object_vm_ref)] + pub vm: Option>, pub item_info: ItemInfo, pub parent_slot: Option, pub slots: Vec, @@ -157,6 +175,8 @@ pub struct GenericItemLogicableMemoryReadable { pub prefab: Name, #[custom(object_name)] pub name: Name, + #[custom(object_vm_ref)] + pub vm: Option>, pub item_info: ItemInfo, pub parent_slot: Option, pub slots: Vec, @@ -174,6 +194,8 @@ pub struct GenericItemLogicableMemoryReadWriteable { pub prefab: Name, #[custom(object_name)] pub name: Name, + #[custom(object_vm_ref)] + pub vm: Option>, pub item_info: ItemInfo, pub parent_slot: Option, pub slots: Vec, diff --git a/ic10emu/src/vm/object/generic/traits.rs b/ic10emu/src/vm/object/generic/traits.rs index 84b6789..a991f42 100644 --- a/ic10emu/src/vm/object/generic/traits.rs +++ b/ic10emu/src/vm/object/generic/traits.rs @@ -53,7 +53,7 @@ impl Storage for T { pub trait GWLogicable: Storage { fn fields(&self) -> &BTreeMap; fn fields_mut(&mut self) -> &mut BTreeMap; - fn modes(&self) -> Option<&BTreeMap>; + fn known_modes(&self) -> Option<&BTreeMap>; } impl Logicable for T { @@ -148,8 +148,13 @@ impl Logicable for T { fn valid_logic_types(&self) -> Vec { self.fields().keys().copied().collect() } - fn known_modes(&self) -> Option> { - self.modes().map(|modes| modes.iter().collect()) + fn known_modes(&self) -> Option> { + self.known_modes().map(|modes| { + modes + .iter() + .map(|(mode, name)| (*mode, name.clone())) + .collect() + }) } } @@ -171,7 +176,7 @@ impl MemoryReadable for T { Ok(self.memory()[index as usize]) } } - fn get_memory_slice(&self) -> &[f64] { + fn get_memory_slice(&self) -> &[f64] { self.memory() } } diff --git a/ic10emu/src/vm/object/macros.rs b/ic10emu/src/vm/object/macros.rs index ce9a691..bc9ba1e 100644 --- a/ic10emu/src/vm/object/macros.rs +++ b/ic10emu/src/vm/object/macros.rs @@ -14,6 +14,8 @@ macro_rules! object_trait { 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) -> Option<&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; @@ -71,14 +73,25 @@ macro_rules! object_trait { 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 `Option>` macro_rules! ObjectInterface { { - @body_id_prefab_name + @body_final @trt $trait_name:ident; $struct:ident; @impls $($trt: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 { @@ -106,6 +119,14 @@ macro_rules! ObjectInterface { &mut self.$name_field } + fn get_vm(&self) -> Option<&std::rc::Rc> { + self.$vm_ref_field.as_ref() + } + + fn set_vm(&mut self, vm: std::rc::Rc) { + self.$vm_ref_field = Some(vm); + } + fn type_name(&self) -> &str { std::any::type_name::() } @@ -135,301 +156,117 @@ macro_rules! ObjectInterface { } }; { - @body_id_name + @body_final @trt $trait_name:ident; $struct:ident; @impls $($trt:path),*; @id $id_field:ident: $id_typ:ty; @name $name_field:ident: $name_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_id_prefab_name - @trt $trait_name; $struct; - @impls $($trt),*; - @id $id_field: $id_typ; - @prefab $prefab_field: $prefab_typ; - @name $name_field: $name_typ; - } - }; - { - @body_id_name - @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; - @id $id_field:ident: $id_typ:ty; - @name $name_field:ident: $name_typ:ty; - $(#[#field:meta])* - $field_viz:vis - $field_name:ident : $field_ty:ty, - $( $rest:tt )* - - } => { - $crate::vm::object::macros::ObjectInterface!{ - @body_id_name - @trt $trait_name; $struct; - @impls $($trt),*; - @id $id_field: $id_typ; - @name $name_field: $name_typ; - $( $rest )* - } - }; - { - @body_id_prefab - @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; - @id $id_field:ident: $id_typ:ty; @prefab $prefab_field:ident: $prefab_typ:ty; - #[custom(object_name)] - $(#[$name_attr:meta])* - $name_viz:vis $name_field:ident: $name_typ:ty, - $( $rest:tt )* - + @vm_ref $vm_ref_field:ident: $vm_ref_typ:ty; } => { $crate::vm::object::macros::ObjectInterface!{ - @body_id_prefab_name + @body_final @trt $trait_name; $struct; @impls $($trt),*; @id $id_field: $id_typ; @prefab $prefab_field: $prefab_typ; @name $name_field: $name_typ; + @vm_ref $vm_ref_field: $vm_ref_typ; } }; { - @body_id_prefab - @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; - @id $id_field:ident: $id_typ:ty; - @prefab $prefab_field:ident: $prefab_typ:ty; - $(#[#field:meta])* - $field_viz:vis - $field_name:ident : $field_ty:ty, - $( $rest:tt )* - - } => { - $crate::vm::object::macros::ObjectInterface!{ - @body_id_prefab - @trt $trait_name; $struct; - @impls $($trt),*; - @id $id_field: $id_typ; - @prefab $prefab_field: $prefab_typ; - $( $rest )* - } - }; - { - @body_prefab_name + @body_final @trt $trait_name:ident; $struct:ident; @impls $($trt:path),*; @prefab $prefab_field:ident: $prefab_typ:ty; @name $name_field:ident: $name_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_id_prefab_name - @trt $trait_name; $struct; - @impls $($trt),*; - @prefab $prefab_field: $prefab_typ; - @name $name_field: $name_typ; - } - }; - { - @body_prefab_name - @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; - @prefab $prefab_field:ident: $prefab_typ:ty; - @name $name_field:ident: $name_typ:ty; - $(#[#field:meta])* - $field_viz:vis - $field_name:ident : $field_ty:ty, - $( $rest:tt )* - - } => { - $crate::vm::object::macros::ObjectInterface!{ - @body_prefab_name - @trt $trait_name; $struct; - @impls $($trt),*; - @prefab $prefab_field: $prefab_typ; - @name $name_field: $name_typ; - $( $rest )* - } - }; - { - @body_name - @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; - @name $name_field:ident: $name_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_prefab_name - @trt $trait_name; $struct; - @impls $($trt),*; - @prefab $prefab_field: $prefab_typ; - @name $name_field: $name_typ; - $( $rest )* - } - }; - { - @body_name - @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; - @name $name_field:ident: $name_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_id_name - @trt $trait_name; $struct; - @impls $($trt),*; - @id $id_field: $id_typ; - @name $name_field: $name_typ; - $( $rest )* - } - }; - { - @body_name - @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; - @name $name_field:ident: $name_typ:ty; - $(#[#field:meta])* - $field_viz:vis - $field_name:ident : $field_ty:ty, - $( $rest:tt )* - - } => { - $crate::vm::object::macros::ObjectInterface!{ - @body_name - @trt $trait_name; $struct; - @impls $($trt),*; - @name $name_field: $name_typ; - $( $rest )* - } - }; - { - @body_id - @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; @id $id_field:ident: $id_typ:ty; - #[custom(object_name)] - $(#[$name_attr:meta])* - $name_viz:vis $name_field:ident: $name_typ:ty, - $( $rest:tt )* + @vm_ref $vm_ref_field:ident: $vm_ref_typ:ty; } => { $crate::vm::object::macros::ObjectInterface!{ - @body_id_name + @body_final @trt $trait_name; $struct; @impls $($trt),*; @id $id_field: $id_typ; - @name $name_field: $name_typ; - $( $rest )* - } - }; - { - @body_id - @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; - @id $id_field:ident: $id_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_id_prefab - @trt $trait_name; $struct; - @impls $($trt),*; - @id $id_field: $id_typ; - @prefab $prefab_field: $prefab_typ; - $( $rest )* - } - }; - { - @body_id - @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; - @id $id_field:ident: $id_typ:ty; - $(#[#field:meta])* - $field_viz:vis - $field_name:ident : $field_ty:ty, - $( $rest:tt )* - } => { - $crate::vm::object::macros::ObjectInterface!{ - @body_id - @trt $trait_name; $struct; - @impls $($trt),*; - @id $id_field: $id_typ; - $( $rest )* - } - }; - { - @body_prefab - @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; - @prefab $prefab_field:ident: $prefab_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_prefab_name - @trt $trait_name; $struct; - @impls $($trt),*; @prefab $prefab_field: $prefab_typ; @name $name_field: $name_typ; - $( $rest )* + @vm_ref $vm_ref_field: $vm_ref_typ; } }; { - @body_prefab + @body_final @trt $trait_name:ident; $struct:ident; @impls $($trt:path),*; @prefab $prefab_field:ident: $prefab_typ:ty; - #[custom(object_id)] - $(#[$id_attr:meta])* - $id_viz:vis $id_field:ident: $id_typ:ty, - $( $rest:tt )* - + @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_id_prefab + @body_final @trt $trait_name; $struct; @impls $($trt),*; @id $id_field: $id_typ; @prefab $prefab_field: $prefab_typ; - $( $rest )* + @name $name_field: $name_typ; + @vm_ref $vm_ref_field: $vm_ref_typ; } }; { - @body_prefab + @body_final @trt $trait_name:ident; $struct:ident; @impls $($trt:path),*; + @name $name_field:ident: $name_typ:ty; @prefab $prefab_field:ident: $prefab_typ:ty; - $(#[#field:meta])* - $field_viz:vis - $field_name:ident : $field_ty: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),*; + @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),*; + @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),*; + @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),*; + @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_prefab + @body @trt $trait_name; $struct; @impls $($trt),*; - @prefab $prefab_field: $prefab_typ; + @tags {$(@$tag $tag_field: $tag_typ;)* @vm_ref $vm_ref_field: $vm_ref_typ;}; $( $rest )* } }; @@ -437,6 +274,9 @@ macro_rules! ObjectInterface { @body @trt $trait_name:ident; $struct:ident; @impls $($trt: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, @@ -444,10 +284,10 @@ macro_rules! ObjectInterface { } => { $crate::vm::object::macros::ObjectInterface!{ - @body_name + @body @trt $trait_name; $struct; @impls $($trt),*; - @name $name_field: $name_typ; + @tags {$(@$tag $tag_field: $tag_typ;)* @name $name_field: $name_typ;}; $( $rest )* } }; @@ -455,6 +295,9 @@ macro_rules! ObjectInterface { @body @trt $trait_name:ident; $struct:ident; @impls $($trt: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, @@ -462,10 +305,10 @@ macro_rules! ObjectInterface { } => { $crate::vm::object::macros::ObjectInterface!{ - @body_prefab + @body @trt $trait_name; $struct; @impls $($trt),*; - @prefab $prefab_field: $prefab_typ; + @tags {$(@$tag $tag_field: $tag_typ;)* @prefab $prefab_field: $prefab_typ;}; $( $rest )* } }; @@ -473,6 +316,9 @@ macro_rules! ObjectInterface { @body @trt $trait_name:ident; $struct:ident; @impls $($trt: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, @@ -480,10 +326,10 @@ macro_rules! ObjectInterface { } => { $crate::vm::object::macros::ObjectInterface!{ - @body_id + @body @trt $trait_name; $struct; @impls $($trt),*; - @id $id_field: $id_typ; + @tags {$(@$tag $tag_field: $tag_typ;)* @id $id_field: $id_typ;}; $( $rest )* } }; @@ -491,7 +337,10 @@ macro_rules! ObjectInterface { @body @trt $trait_name:ident; $struct:ident; @impls $($trt:path),*; - $(#[#field:meta])* + @tags { + $(@$tag:tt $tag_field:ident: $tag_typ:ty;)* + }; + $(#[$field:meta])* $field_viz:vis $field_name:ident : $field_ty:ty, $( $rest:tt )* @@ -501,9 +350,27 @@ macro_rules! ObjectInterface { @body @trt $trait_name; $struct; @impls $($trt),*; + @tags {$(@$tag $tag_field: $tag_typ;)*}; $( $rest )* } }; + { + @body + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path),*; + @tags { + $(@$tag:tt $tag_field:ident: $tag_typ:ty;)* + }; + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body_final + @trt $trait_name; $struct; + @impls $($trt),*; + $( + @$tag $tag_field: $tag_typ; + )* + } + }; { #[custom(implements($trait_name:ident {$($trt:path),*}))] $( #[$attr:meta] )* @@ -515,6 +382,7 @@ macro_rules! ObjectInterface { @body @trt $trait_name; $struct; @impls $($trt),*; + @tags {}; $( $body )* } }; diff --git a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs index 8496eea..bc40db8 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs @@ -1,10 +1,11 @@ use crate::{ errors::{ICError, LineError}, grammar, + interpreter::ICState, vm::{ enums::{ basic_enums::{Class as SlotClass, GasType, SortingClass}, - script_enums::LogicType, + script_enums::{LogicSlotType, LogicType}, }, instructions::{ enums::InstructionOp, @@ -13,11 +14,10 @@ use crate::{ Instruction, }, object::{ - errors::MemoryError, - generic::{macros::GWLogicable, traits::GWLogicable}, + errors::{LogicError, MemoryError}, macros::ObjectInterface, traits::*, - LogicField, Name, ObjectID, Slot, + LogicField, MemoryAccess, Name, ObjectID, Slot, }, VM, }, @@ -25,7 +25,10 @@ use crate::{ use itertools::Itertools; use macro_rules_attribute::derive; use serde_derive::{Deserialize, Serialize}; -use std::collections::{BTreeMap, HashSet}; +use std::{ + collections::{BTreeMap, HashSet}, + rc::Rc, +}; use ICError::*; #[derive(Debug, Clone, Serialize, Deserialize)] @@ -139,20 +142,10 @@ impl Program { } } -#[derive(Debug, Clone, Serialize, Deserialize)] -pub enum ICState { - Start, - Running, - Yield, - Sleep(time::OffsetDateTime, f64), - HasCaughtFire, - Error(LineError), -} - static RETURN_ADDRESS_INDEX: usize = 17; static STACK_POINTER_INDEX: usize = 16; -#[derive(ObjectInterface!, GWLogicable!)] +#[derive(ObjectInterface!)] #[custom(implements(Object { Item, Storage, Logicable, MemoryReadable, MemoryWritable }))] pub struct ItemIntegratedCircuit10 { #[custom(object_id)] @@ -161,6 +154,8 @@ pub struct ItemIntegratedCircuit10 { pub prefab: Name, #[custom(object_name)] pub name: Name, + #[custom(object_vm_ref)] + pub vm: Option>, pub fields: BTreeMap, pub memory: [f64; 512], pub parent_slot: Option, @@ -218,13 +213,86 @@ impl Storage for ItemIntegratedCircuit10 { fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot> { None } - fn get_slots(&self) -> &[Slot] { + fn get_slots(&self) -> &[Slot] { &[] } - fn get_slots_mut(&mut self) -> &mut[Slot] { + fn get_slots_mut(&mut self) -> &mut [Slot] { &mut [] } } +impl Logicable for ItemIntegratedCircuit10 { + 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, _vm: &VM) -> Result { + return 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 memory_size(&self) -> usize { @@ -239,7 +307,7 @@ impl MemoryReadable for ItemIntegratedCircuit10 { Ok(self.memory[index as usize]) } } - fn get_memory_slice(&self) -> &[f64] { + fn get_memory_slice(&self) -> &[f64] { &self.memory } } @@ -280,9 +348,14 @@ impl SourceCode for ItemIntegratedCircuit10 { } impl IntegratedCircuit for ItemIntegratedCircuit10 { - fn get_circuit_holder(&self, vm: &VM) -> Option { - // FIXME: implement correctly - self.get_parent_slot().map(|parent_slot| parent_slot.parent) + fn get_circuit_holder(&self, vm: &Rc) -> Option { + self.get_parent_slot() + .map(|parent_slot| { + vm.get_object(parent_slot.parent) + .map(|obj| obj.borrow().as_circuit_holder()) + .flatten() + }) + .flatten() } fn get_instruction_pointer(&self) -> f64 { self.ip as f64 @@ -338,9 +411,9 @@ impl IntegratedCircuit for ItemIntegratedCircuit10 { fn push_stack(&mut self, val: f64) -> Result { let sp = (self.registers[STACK_POINTER_INDEX].round()) as i32; if sp < 0 { - Err(ICError::StackUnderflow) + Err(MemoryError::StackUnderflow(sp, self.memory.len()).into()) } else if sp as usize >= self.memory.len() { - Err(ICError::StackOverflow) + Err(MemoryError::StackOverflow(sp, self.memory.len()).into()) } else { let last = self.memory[sp as usize]; self.memory[sp as usize] = val; @@ -352,9 +425,9 @@ impl IntegratedCircuit for ItemIntegratedCircuit10 { self.registers[STACK_POINTER_INDEX] -= 1.0; let sp = (self.registers[STACK_POINTER_INDEX].round()) as i32; if sp < 0 { - Err(ICError::StackUnderflow) + Err(MemoryError::StackUnderflow(sp, self.memory.len()).into()) } else if sp as usize >= self.memory.len() { - Err(ICError::StackOverflow) + Err(MemoryError::StackOverflow(sp, self.memory.len()).into()) } else { let last = self.memory[sp as usize]; Ok(last) @@ -363,9 +436,9 @@ impl IntegratedCircuit for ItemIntegratedCircuit10 { fn peek_stack(&self) -> Result { let sp = (self.registers[STACK_POINTER_INDEX] - 1.0).round() as i32; if sp < 0 { - Err(ICError::StackUnderflow) + Err(MemoryError::StackUnderflow(sp, self.memory.len()).into()) } else if sp as usize >= self.memory.len() { - Err(ICError::StackOverflow) + Err(MemoryError::StackOverflow(sp, self.memory.len()).into()) } else { let last = self.memory[sp as usize]; Ok(last) @@ -1325,7 +1398,6 @@ impl BdseInstruction for ItemIntegratedCircuit10 { } } - // impl BdsealInstruction for ItemIntegratedCircuit10 { // /// bdseal d? a(r?|num) // fn execute_bdseal(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index 19abf69..f564207 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -203,6 +203,7 @@ impl ObjectTemplate { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), name: Name::new(&s.prefab.name), + vm: None, small_grid: s.structure.small_grid, }, vm.clone(), @@ -212,6 +213,7 @@ impl ObjectTemplate { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), name: Name::new(&s.prefab.name), + vm: None, small_grid: s.structure.small_grid, slots: s .slots @@ -235,6 +237,7 @@ impl ObjectTemplate { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), name: Name::new(&s.prefab.name), + vm: None, small_grid: s.structure.small_grid, slots: s .slots @@ -314,6 +317,7 @@ impl ObjectTemplate { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), name: Name::new(&s.prefab.name), + vm: None, small_grid: s.structure.small_grid, slots: s .slots @@ -414,6 +418,7 @@ impl ObjectTemplate { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), name: Name::new(&s.prefab.name), + vm: None, small_grid: s.structure.small_grid, slots: s .slots @@ -521,6 +526,7 @@ impl ObjectTemplate { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), name: Name::new(&s.prefab.name), + vm: None, small_grid: s.structure.small_grid, slots: s .slots @@ -623,6 +629,7 @@ impl ObjectTemplate { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), name: Name::new(&i.prefab.name), + vm: None, item_info: i.item.clone(), parent_slot: None, }, @@ -633,6 +640,7 @@ impl ObjectTemplate { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), name: Name::new(&i.prefab.name), + vm: None, item_info: i.item.clone(), parent_slot: None, slots: i @@ -657,6 +665,7 @@ impl ObjectTemplate { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), name: Name::new(&i.prefab.name), + vm: None, item_info: i.item.clone(), parent_slot: None, slots: i @@ -738,6 +747,7 @@ impl ObjectTemplate { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), name: Name::new(&i.prefab.name), + vm: None, item_info: i.item.clone(), parent_slot: None, slots: i @@ -824,6 +834,7 @@ impl ObjectTemplate { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), name: Name::new(&i.prefab.name), + vm: None, item_info: i.item.clone(), parent_slot: None, slots: i @@ -1308,7 +1319,7 @@ impl From> for LogicInfo { .iter() .filter_map(|lt| match logic.get_logic(*lt) { Ok(val) => Some((*lt, val)), - _ => None + _ => None, }) .collect(), ), @@ -1377,9 +1388,15 @@ pub struct DeviceInfo { impl From> for DeviceInfo { fn from(device: DeviceRef) -> Self { DeviceInfo { - connection_list: device.connection_list().iter().map(|conn| conn.to_info()).collect(), + connection_list: device + .connection_list() + .iter() + .map(|conn| conn.to_info()) + .collect(), device_pins_length: device.device_pins().map(|pins| pins.len()), - device_pins: device.device_pins().map(|pins| pins.iter().copied().collect()), + device_pins: device + .device_pins() + .map(|pins| pins.iter().copied().collect()), has_reagents: device.has_reagents(), has_lock_state: device.has_lock_state(), has_mode_state: device.has_mode_state(), diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index b209fb1..264b37e 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -15,7 +15,7 @@ use crate::{ VM, } }; -use std::{collections::BTreeMap, fmt::Debug}; +use std::{collections::BTreeMap, fmt::Debug, rc::Rc}; #[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] pub struct ParentSlotInfo { @@ -99,7 +99,7 @@ tag_object_traits! { } pub trait IntegratedCircuit: Logicable + MemoryWritable + SourceCode + Item { - fn get_circuit_holder(&self, vm: &VM) -> Option; + fn get_circuit_holder(&self, vm: &Rc) -> Option; fn get_instruction_pointer(&self) -> f64; fn set_next_instruction(&mut self, next_instruction: f64); fn set_next_instruction_relative(&mut self, offset: f64) { From 7b8523d2eae09918e038ab41344da0809fa11b0f Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Tue, 14 May 2024 05:23:00 -0700 Subject: [PATCH 16/50] chore(vm): clean up spelling and RC usage --- ic10emu/src/vm.rs | 26 +++++++++++++------------- ic10emu/src/vm/object/stationpedia.rs | 2 +- ic10emu/src/vm/object/templates.rs | 4 ++-- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index 631628c..2e21495 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -11,7 +11,7 @@ use crate::{ enums::script_enums::{LogicBatchMethod, LogicSlotType, LogicType}, object::{ templates::ObjectTemplate, - traits::{Object, ParentSlotInfo}, + traits::ParentSlotInfo, ObjectID, VMObject, }, }, @@ -43,7 +43,7 @@ pub struct VM { } #[derive(Debug, Default)] -pub struct VMTransationNetwork { +pub struct VMTransactionNetwork { pub objects: Vec, pub power_only: Vec, } @@ -51,7 +51,7 @@ pub struct VMTransationNetwork { #[derive(Debug)] /// used as a temp structure to add objects in case /// there are errors on nested templates -pub struct VMTransation { +pub struct VMTransaction { pub objects: BTreeMap, pub circuit_holders: Vec, pub program_holders: Vec, @@ -59,7 +59,7 @@ pub struct VMTransation { pub wireless_transmitters: Vec, pub wireless_receivers: Vec, pub id_space: IdSpace, - pub networks: BTreeMap, + pub networks: BTreeMap, vm: Rc, } @@ -94,12 +94,12 @@ impl VM { self: &Rc, template: ObjectTemplate, ) -> Result { - let mut transaction = VMTransation::new(self); + let mut transaction = VMTransaction::new(self); let obj_id = transaction.add_device_from_template(template)?; - let transation_ids = transaction.id_space.in_use_ids(); - self.id_space.borrow_mut().use_new_ids(&transation_ids); + 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 @@ -120,7 +120,7 @@ impl VM { .borrow() .get(&net_id) .expect(&format!( - "desync between vm and transation networks: {net_id}" + "desync between vm and transaction networks: {net_id}" )) .borrow_mut() .as_mut_network() @@ -883,9 +883,9 @@ impl VM { } } -impl VMTransation { +impl VMTransaction { pub fn new(vm: &Rc) -> Self { - VMTransation { + VMTransaction { objects: BTreeMap::new(), circuit_holders: Vec::new(), program_holders: Vec::new(), @@ -897,7 +897,7 @@ impl VMTransation { .networks .borrow() .keys() - .map(|net_id| (*net_id, VMTransationNetwork::default())) + .map(|net_id| (*net_id, VMTransactionNetwork::default())) .collect(), vm: vm.clone() } @@ -920,7 +920,7 @@ impl VMTransation { self.id_space.next() }; - let obj = template.build(obj_id, self.vm); + let obj = template.build(obj_id, self.vm.clone()); if let Some(storage) = obj.borrow_mut().as_mut_storage() { for (slot_index, occupant_template) in @@ -962,7 +962,7 @@ impl VMTransation { _ => net.objects.push(obj_id), } } else { - return Err(VMError::InvalidNetwork(net_id)); + return Err(VMError::InvalidNetwork(*net_id)); } } } diff --git a/ic10emu/src/vm/object/stationpedia.rs b/ic10emu/src/vm/object/stationpedia.rs index f6b2b2d..6c1a9b9 100644 --- a/ic10emu/src/vm/object/stationpedia.rs +++ b/ic10emu/src/vm/object/stationpedia.rs @@ -9,7 +9,7 @@ use super::ObjectID; pub mod structs; #[allow(unused)] -pub fn object_from_prefab_template(template: &ObjectTemplate, id: ObjectID, vm: &Rc) -> Option { +pub fn object_from_prefab_template(template: &ObjectTemplate, id: ObjectID, vm: Rc) -> Option { let prefab = StationpediaPrefab::from_repr(template.prefab_info().prefab_hash); match prefab { // Some(StationpediaPrefab::ItemIntegratedCircuit10) => { diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index f564207..b1e93df 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -73,7 +73,7 @@ impl ObjectTemplate { } } - pub fn build(&self, id: ObjectID, vm: &Rc) -> VMObject { + pub fn build(&self, id: ObjectID, vm: Rc) -> VMObject { if let Some(obj) = stationpedia::object_from_prefab_template(&self, id, vm) { obj } else { @@ -195,7 +195,7 @@ impl ObjectTemplate { } } - fn build_generic(&self, id: ObjectID, vm: &Rc) -> VMObject { + fn build_generic(&self, id: ObjectID, vm: Rc) -> VMObject { use ObjectTemplate::*; match self { Structure(s) => VMObject::new( From 708d68e38a1ba54b0448767968207cf617936b22 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Tue, 14 May 2024 14:55:07 -0700 Subject: [PATCH 17/50] refactor(vm): re impl freezing VM using `ObjectTemplate`s --- ic10emu/src/network.rs | 38 ++++- ic10emu/src/vm.rs | 255 +++++++++++++++++++++----------- ic10emu/src/vm/object/traits.rs | 3 + 3 files changed, 203 insertions(+), 93 deletions(-) diff --git a/ic10emu/src/network.rs b/ic10emu/src/network.rs index ae87965..28c9502 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -25,7 +25,7 @@ pub enum CableConnectionType { #[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)] pub enum Connection { CableNetwork { - net: Option, + net: Option, typ: CableConnectionType, role: ConnectionRole, }, @@ -385,22 +385,34 @@ impl Network for CableNetwork { 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)] -pub struct FrozenNetwork { - pub id: u32, +pub struct FrozenCableNetwork { + pub id: ObjectID, pub devices: Vec, pub power_only: Vec, pub channels: [f64; 8], } -impl From for FrozenNetwork +impl From for FrozenCableNetwork where T: Deref, { fn from(value: T) -> Self { - FrozenNetwork { + FrozenCableNetwork { id: value.id, devices: value.devices.iter().copied().collect_vec(), power_only: value.power_only.iter().copied().collect_vec(), @@ -409,8 +421,20 @@ where } } -impl From for CableNetwork { - fn from(value: FrozenNetwork) -> Self { +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(), + } + + } +} + +impl From for CableNetwork { + fn from(value: FrozenCableNetwork) -> Self { CableNetwork { id: value.id, prefab: Name::new(""), diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index 2e21495..37436b2 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -4,16 +4,12 @@ pub mod object; use crate::{ device::Device, - errors::{ICError, VMError}, + errors::{ICError, TemplateError, VMError}, interpreter::ICState, - network::{CableConnectionType, CableNetwork, Connection, ConnectionRole, FrozenNetwork}, + network::{CableConnectionType, CableNetwork, Connection, ConnectionRole, FrozenCableNetwork}, vm::{ enums::script_enums::{LogicBatchMethod, LogicSlotType, LogicType}, - object::{ - templates::ObjectTemplate, - traits::ParentSlotInfo, - ObjectID, VMObject, - }, + object::{templates::ObjectTemplate, traits::ParentSlotInfo, ObjectID, VMObject}, }, }; use std::{ @@ -44,7 +40,7 @@ pub struct VM { #[derive(Debug, Default)] pub struct VMTransactionNetwork { - pub objects: Vec, + pub devices: Vec, pub power_only: Vec, } @@ -85,7 +81,9 @@ impl VM { }); let default_network = VMObject::new(CableNetwork::new(default_network_key), vm.clone()); - vm.networks.borrow_mut().insert(default_network_key, default_network); + vm.networks + .borrow_mut() + .insert(default_network_key, default_network); vm } @@ -125,7 +123,7 @@ impl VM { .borrow_mut() .as_mut_network() .expect(&format!("non network network: {net_id}")); - for id in trans_net.objects { + for id in trans_net.devices { net.add_data(id); } for id in trans_net.power_only { @@ -138,9 +136,10 @@ impl VM { pub fn add_network(self: &Rc) -> u32 { 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())); + self.networks.borrow_mut().insert( + next_id, + VMObject::new(CableNetwork::new(next_id), self.clone()), + ); next_id } @@ -248,7 +247,11 @@ impl VM { self.operation_modified.borrow().clone() } - pub fn step_programmable(self: &Rc, id: u32, advance_ip_on_err: bool) -> Result<(), VMError> { + pub fn step_programmable( + self: &Rc, + id: u32, + advance_ip_on_err: bool, + ) -> Result<(), VMError> { let programmable = self .objects .borrow() @@ -264,7 +267,11 @@ impl VM { } /// returns true if executed 128 lines, false if returned early. - pub fn run_programmable(self: &Rc, id: u32, ignore_errors: bool) -> Result { + pub fn run_programmable( + self: &Rc, + id: u32, + ignore_errors: bool, + ) -> Result { let programmable = self .objects .borrow() @@ -338,7 +345,11 @@ impl VM { .into_iter() } - pub fn get_device_same_network(self: &Rc, source: ObjectID, other: ObjectID) -> Option { + pub fn get_device_same_network( + self: &Rc, + source: ObjectID, + other: ObjectID, + ) -> Option { if self.devices_on_same_network(&[source, other]) { self.get_object(other) } else { @@ -347,7 +358,11 @@ impl VM { } pub fn get_network_channel(self: &Rc, id: u32, channel: usize) -> Result { - let network = self.networks.borrow().get(&id).ok_or(ICError::BadNetworkId(id))?; + let network = self + .networks + .borrow() + .get(&id) + .ok_or(ICError::BadNetworkId(id))?; if !(0..8).contains(&channel) { Err(ICError::ChannelIndexOutOfRange(channel)) } else { @@ -368,7 +383,11 @@ impl VM { channel: usize, val: f64, ) -> Result<(), ICError> { - let network = self.networks.borrow().get(&(id)).ok_or(ICError::BadNetworkId(id))?; + let network = self + .networks + .borrow() + .get(&(id)) + .ok_or(ICError::BadNetworkId(id))?; if !(0..8).contains(&channel) { Err(ICError::ChannelIndexOutOfRange(channel)) } else { @@ -399,7 +418,8 @@ impl VM { /// return a vector with the device ids the source id can see via it's connected networks pub fn visible_devices(self: &Rc, source: ObjectID) -> Vec { - self.networks.borrow() + self.networks + .borrow() .values() .filter_map(|net| { let net_ref = net.borrow().as_network().expect("non-network network"); @@ -412,7 +432,12 @@ impl VM { .concat() } - pub fn set_pin(self: &Rc, id: u32, pin: usize, val: Option) -> Result { + pub fn set_pin( + self: &Rc, + id: u32, + pin: usize, + val: Option, + ) -> Result { let Some(obj) = self.objects.borrow().get(&id) else { return Err(VMError::UnknownId(id)); }; @@ -811,74 +836,117 @@ impl VM { Ok(last) } - pub fn save_vm_state(self: &Rc) -> FrozenVM { - FrozenVM { - ics: self - .circuit_holders - .values() - .map(|ic| ic.borrow().into()) - .collect(), - devices: self - .devices - .values() - .map(|device| device.borrow().into()) - .collect(), + pub fn save_vm_state(self: &Rc) -> Result { + Ok(FrozenVM { + objects: self + .objects + .borrow() + .iter() + .filter_map(|(obj_id, obj)| { + if obj + .borrow() + .as_item() + .is_some_and(|item| item.get_parent_slot().is_some()) + { + None + } else { + Some(ObjectTemplate::freeze_object(obj, self)) + } + }) + .collect::, _>>()?, networks: self .networks + .borrow() .values() - .map(|network| network.borrow().into()) + .map(|network| { + network + .borrow() + .as_network() + .expect("non-network network") + .into() + }) .collect(), - default_network: self.default_network_key, - } + 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(), + }) } pub fn restore_vm_state(self: &Rc, state: FrozenVM) -> Result<(), VMError> { - self.circuit_holders.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 + let mut transaction_network_id_space = IdSpace::new(); + transaction_network_id_space .use_ids(&state.networks.iter().map(|net| net.id).collect_vec())?; - - self.circuit_holders = 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 + let transaction_networks: BTreeMap = state .networks .into_iter() - .map(|network| (network.id, Rc::new(RefCell::new(network.into())))) + .map(|network| { + ( + network.id, + VMObject::new( + std::convert::Into::::into(network), + self.clone(), + ), + ) + }) .collect(); - self.default_network_key = state.default_network; + let mut transaction = VMTransaction::from_scratch_with_networks( + self, + &transaction_networks, + state.default_network_key, + ); + for template in state.objects { + let _ = transaction.add_device_from_template(template)?; + } + + 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.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 net = self + .networks + .borrow() + .get(&net_id) + .expect(&format!( + "desync between vm and transaction networks: {net_id}" + )) + .borrow_mut() + .as_mut_network() + .expect(&format!("non network network: {net_id}")); + for id in trans_net.devices { + net.add_data(id); + } + for id in trans_net.power_only { + net.add_power(id); + } + } + Ok(()) } } @@ -899,7 +967,28 @@ impl VMTransaction { .keys() .map(|net_id| (*net_id, VMTransactionNetwork::default())) .collect(), - vm: vm.clone() + 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(), + vm: vm.clone(), } } @@ -959,7 +1048,7 @@ impl VMTransaction { if let Some(net) = self.networks.get_mut(&net_id) { match typ { CableConnectionType::Power => net.power_only.push(obj_id), - _ => net.objects.push(obj_id), + _ => net.devices.push(obj_id), } } else { return Err(VMError::InvalidNetwork(*net_id)); @@ -1090,13 +1179,7 @@ pub struct FrozenVM { pub circuit_holders: Vec, pub program_holders: Vec, pub default_network_key: ObjectID, - pub networks: Vec, + pub networks: Vec, pub wireless_transmitters: Vec, pub wireless_receivers: Vec, } - -impl FrozenVM { - pub fn from_vm(vm: &VM) -> Self { - let objects = vm.objects.iter().map(); - } -} diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index 264b37e..aa22db6 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -184,6 +184,9 @@ tag_object_traits! { fn remove_all(&mut self, id: ObjectID) -> bool; fn remove_data(&mut self, id: ObjectID) -> bool; fn remove_power(&mut self, id: ObjectID) -> bool; + fn get_devices(&self) -> Vec; + fn get_power_only(&self) -> Vec; + fn get_channel_data(&self) -> &[f64; 8]; } From 25b7046ed2914e95f7789402f30425f495d441b3 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Tue, 14 May 2024 16:26:23 -0700 Subject: [PATCH 18/50] refactor(vm): update up codegen, remove duplicated enums --- data/database.json | 2 +- ic10emu/src/device.rs | 6 +- ic10emu/src/errors.rs | 9 +- ic10emu/src/interpreter.rs | 10 +- ic10emu/src/network.rs | 39 +- ic10emu/src/vm.rs | 12 +- ic10emu/src/vm/enums/basic_enums.rs | 2215 +---------------- ic10emu/src/vm/enums/prefabs.rs | 5 - ic10emu/src/vm/instructions.rs | 1 - ic10emu/src/vm/instructions/enums.rs | 292 ++- ic10emu/src/vm/instructions/traits.rs | 145 +- ic10emu/src/vm/object.rs | 12 +- ic10emu/src/vm/object/generic/structs.rs | 41 +- ic10emu/src/vm/object/macros.rs | 10 +- ic10emu/src/vm/object/stationpedia.rs | 8 +- .../structs/integrated_circuit.rs | 6 +- ic10emu/src/vm/object/templates.rs | 895 ++++--- ic10emu/src/vm/object/traits.rs | 7 +- ic10emu_wasm/src/lib.rs | 7 +- xtask/src/generate/enums.rs | 38 +- xtask/src/generate/instructions.rs | 5 +- 21 files changed, 695 insertions(+), 3070 deletions(-) diff --git a/data/database.json b/data/database.json index bdbc2eb..43ee24c 100644 --- a/data/database.json +++ b/data/database.json @@ -1 +1 @@ -{"prefabs":{"AccessCardBlack":{"prefab":{"prefabName":"AccessCardBlack","prefabHash":-1330388999,"desc":"","name":"Access Card (Black)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardBlue":{"prefab":{"prefabName":"AccessCardBlue","prefabHash":-1411327657,"desc":"","name":"Access Card (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardBrown":{"prefab":{"prefabName":"AccessCardBrown","prefabHash":1412428165,"desc":"","name":"Access Card (Brown)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardGray":{"prefab":{"prefabName":"AccessCardGray","prefabHash":-1339479035,"desc":"","name":"Access Card (Gray)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardGreen":{"prefab":{"prefabName":"AccessCardGreen","prefabHash":-374567952,"desc":"","name":"Access Card (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardKhaki":{"prefab":{"prefabName":"AccessCardKhaki","prefabHash":337035771,"desc":"","name":"Access Card (Khaki)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardOrange":{"prefab":{"prefabName":"AccessCardOrange","prefabHash":-332896929,"desc":"","name":"Access Card (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardPink":{"prefab":{"prefabName":"AccessCardPink","prefabHash":431317557,"desc":"","name":"Access Card (Pink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardPurple":{"prefab":{"prefabName":"AccessCardPurple","prefabHash":459843265,"desc":"","name":"Access Card (Purple)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardRed":{"prefab":{"prefabName":"AccessCardRed","prefabHash":-1713748313,"desc":"","name":"Access Card (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardWhite":{"prefab":{"prefabName":"AccessCardWhite","prefabHash":2079959157,"desc":"","name":"Access Card (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardYellow":{"prefab":{"prefabName":"AccessCardYellow","prefabHash":568932536,"desc":"","name":"Access Card (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"ApplianceChemistryStation":{"prefab":{"prefabName":"ApplianceChemistryStation","prefabHash":1365789392,"desc":"","name":"Chemistry Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"ApplianceDeskLampLeft":{"prefab":{"prefabName":"ApplianceDeskLampLeft","prefabHash":-1683849799,"desc":"","name":"Appliance Desk Lamp Left"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"}},"ApplianceDeskLampRight":{"prefab":{"prefabName":"ApplianceDeskLampRight","prefabHash":1174360780,"desc":"","name":"Appliance Desk Lamp Right"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"}},"ApplianceMicrowave":{"prefab":{"prefabName":"ApplianceMicrowave","prefabHash":-1136173965,"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.","name":"Microwave"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"AppliancePackagingMachine":{"prefab":{"prefabName":"AppliancePackagingMachine","prefabHash":-749191906,"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 ","name":"Basic Packaging Machine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Export","typ":"None"}]},"AppliancePaintMixer":{"prefab":{"prefabName":"AppliancePaintMixer","prefabHash":-1339716113,"desc":"","name":"Paint Mixer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"Bottle"}]},"AppliancePlantGeneticAnalyzer":{"prefab":{"prefabName":"AppliancePlantGeneticAnalyzer","prefabHash":-1303038067,"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.","name":"Plant Genetic Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Input","typ":"Tool"}]},"AppliancePlantGeneticSplicer":{"prefab":{"prefabName":"AppliancePlantGeneticSplicer","prefabHash":-1094868323,"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.","name":"Plant Genetic Splicer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Source Plant","typ":"Plant"},{"name":"Target Plant","typ":"Plant"}]},"AppliancePlantGeneticStabilizer":{"prefab":{"prefabName":"AppliancePlantGeneticStabilizer","prefabHash":871432335,"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 ","name":"Plant Genetic Stabilizer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Plant","typ":"Plant"}]},"ApplianceReagentProcessor":{"prefab":{"prefabName":"ApplianceReagentProcessor","prefabHash":1260918085,"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.","name":"Reagent Processor"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Input","typ":"None"},{"name":"Output","typ":"None"}]},"ApplianceSeedTray":{"prefab":{"prefabName":"ApplianceSeedTray","prefabHash":142831994,"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.","name":"Appliance Seed Tray"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"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"}]},"ApplianceTabletDock":{"prefab":{"prefabName":"ApplianceTabletDock","prefabHash":1853941363,"desc":"","name":"Tablet Dock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"","typ":"Tool"}]},"AutolathePrinterMod":{"prefab":{"prefabName":"AutolathePrinterMod","prefabHash":221058307,"desc":"Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Autolathe Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"Battery_Wireless_cell":{"prefab":{"prefabName":"Battery_Wireless_cell","prefabHash":-462415758,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Battery_Wireless_cell_Big":{"prefab":{"prefabName":"Battery_Wireless_cell_Big","prefabHash":-41519077,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell (Big)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"CardboardBox":{"prefab":{"prefabName":"CardboardBox","prefabHash":-1976947556,"desc":"","name":"Cardboard Box"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Storage"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"CartridgeAccessController":{"prefab":{"prefabName":"CartridgeAccessController","prefabHash":-1634532552,"desc":"","name":"Cartridge (Access Controller)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeAtmosAnalyser":{"prefab":{"prefabName":"CartridgeAtmosAnalyser","prefabHash":-1550278665,"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.","name":"Atmos Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeConfiguration":{"prefab":{"prefabName":"CartridgeConfiguration","prefabHash":-932136011,"desc":"","name":"Configuration"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeElectronicReader":{"prefab":{"prefabName":"CartridgeElectronicReader","prefabHash":-1462180176,"desc":"","name":"eReader"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeGPS":{"prefab":{"prefabName":"CartridgeGPS","prefabHash":-1957063345,"desc":"","name":"GPS"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeGuide":{"prefab":{"prefabName":"CartridgeGuide","prefabHash":872720793,"desc":"","name":"Guide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeMedicalAnalyser":{"prefab":{"prefabName":"CartridgeMedicalAnalyser","prefabHash":-1116110181,"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.","name":"Medical Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeNetworkAnalyser":{"prefab":{"prefabName":"CartridgeNetworkAnalyser","prefabHash":1606989119,"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.","name":"Network Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeOreScanner":{"prefab":{"prefabName":"CartridgeOreScanner","prefabHash":-1768732546,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet.","name":"Ore Scanner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeOreScannerColor":{"prefab":{"prefabName":"CartridgeOreScannerColor","prefabHash":1738236580,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground in different colors on the tablet.","name":"Ore Scanner (Color)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgePlantAnalyser":{"prefab":{"prefabName":"CartridgePlantAnalyser","prefabHash":1101328282,"desc":"","name":"Cartridge Plant Analyser"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeTracker":{"prefab":{"prefabName":"CartridgeTracker","prefabHash":81488783,"desc":"","name":"Tracker"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CircuitboardAdvAirlockControl":{"prefab":{"prefabName":"CircuitboardAdvAirlockControl","prefabHash":1633663176,"desc":"","name":"Advanced Airlock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardAirControl":{"prefab":{"prefabName":"CircuitboardAirControl","prefabHash":1618019559,"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. ","name":"Air Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardAirlockControl":{"prefab":{"prefabName":"CircuitboardAirlockControl","prefabHash":912176135,"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.","name":"Airlock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardCameraDisplay":{"prefab":{"prefabName":"CircuitboardCameraDisplay","prefabHash":-412104504,"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.","name":"Camera Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardDoorControl":{"prefab":{"prefabName":"CircuitboardDoorControl","prefabHash":855694771,"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.","name":"Door Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardGasDisplay":{"prefab":{"prefabName":"CircuitboardGasDisplay","prefabHash":-82343730,"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).","name":"Gas Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardGraphDisplay":{"prefab":{"prefabName":"CircuitboardGraphDisplay","prefabHash":1344368806,"desc":"","name":"Graph Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardHashDisplay":{"prefab":{"prefabName":"CircuitboardHashDisplay","prefabHash":1633074601,"desc":"","name":"Hash Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardModeControl":{"prefab":{"prefabName":"CircuitboardModeControl","prefabHash":-1134148135,"desc":"Can't decide which mode you love most? This circuit board allows you to switch any connected device between operation modes.","name":"Mode Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardPowerControl":{"prefab":{"prefabName":"CircuitboardPowerControl","prefabHash":-1923778429,"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. ","name":"Power Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardShipDisplay":{"prefab":{"prefabName":"CircuitboardShipDisplay","prefabHash":-2044446819,"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.","name":"Ship Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardSolarControl":{"prefab":{"prefabName":"CircuitboardSolarControl","prefabHash":2020180320,"desc":"Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel.","name":"Solar Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CompositeRollCover":{"prefab":{"prefabName":"CompositeRollCover","prefabHash":1228794916,"desc":"0.Operate\n1.Logic","name":"Composite Roll Cover"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"CrateMkII":{"prefab":{"prefabName":"CrateMkII","prefabHash":8709219,"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.","name":"Crate Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Storage"},"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"}]},"DecayedFood":{"prefab":{"prefabName":"DecayedFood","prefabHash":1531087544,"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","name":"Decayed Food"},"item":{"consumable":false,"ingredient":false,"maxQuantity":25,"slotClass":"None","sortingClass":"Default"}},"DeviceLfoVolume":{"prefab":{"prefabName":"DeviceLfoVolume","prefabHash":-1844430312,"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.","name":"Low frequency oscillator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Bpm":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"DeviceStepUnit":{"prefab":{"prefabName":"DeviceStepUnit","prefabHash":1762696475,"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","name":"Device Step Unit"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"DynamicAirConditioner":{"prefab":{"prefabName":"DynamicAirConditioner","prefabHash":519913639,"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.","name":"Portable Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicCrate":{"prefab":{"prefabName":"DynamicCrate","prefabHash":1941079206,"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.","name":"Dynamic Crate"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Storage"},"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"}]},"DynamicGPR":{"prefab":{"prefabName":"DynamicGPR","prefabHash":-2085885850,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicGasCanisterAir":{"prefab":{"prefabName":"DynamicGasCanisterAir","prefabHash":-1713611165,"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.","name":"Portable Gas Tank (Air)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterCarbonDioxide":{"prefab":{"prefabName":"DynamicGasCanisterCarbonDioxide","prefabHash":-322413931,"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.","name":"Portable Gas Tank (CO2)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterEmpty":{"prefab":{"prefabName":"DynamicGasCanisterEmpty","prefabHash":-1741267161,"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.","name":"Portable Gas Tank"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterFuel":{"prefab":{"prefabName":"DynamicGasCanisterFuel","prefabHash":-817051527,"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.","name":"Portable Gas Tank (Fuel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrogen":{"prefab":{"prefabName":"DynamicGasCanisterNitrogen","prefabHash":121951301,"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.","name":"Portable Gas Tank (Nitrogen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrousOxide":{"prefab":{"prefabName":"DynamicGasCanisterNitrousOxide","prefabHash":30727200,"desc":"","name":"Portable Gas Tank (Nitrous Oxide)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterOxygen":{"prefab":{"prefabName":"DynamicGasCanisterOxygen","prefabHash":1360925836,"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.","name":"Portable Gas Tank (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterPollutants":{"prefab":{"prefabName":"DynamicGasCanisterPollutants","prefabHash":396065382,"desc":"","name":"Portable Gas Tank (Pollutants)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterRocketFuel":{"prefab":{"prefabName":"DynamicGasCanisterRocketFuel","prefabHash":-8883951,"desc":"","name":"Dynamic Gas Canister Rocket Fuel"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterVolatiles":{"prefab":{"prefabName":"DynamicGasCanisterVolatiles","prefabHash":108086870,"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.","name":"Portable Gas Tank (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterWater":{"prefab":{"prefabName":"DynamicGasCanisterWater","prefabHash":197293625,"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.","name":"Portable Liquid Tank (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"LiquidCanister"}]},"DynamicGasTankAdvanced":{"prefab":{"prefabName":"DynamicGasTankAdvanced","prefabHash":-386375420,"desc":"0.Mode0\n1.Mode1","name":"Gas Tank Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasTankAdvancedOxygen":{"prefab":{"prefabName":"DynamicGasTankAdvancedOxygen","prefabHash":-1264455519,"desc":"0.Mode0\n1.Mode1","name":"Portable Gas Tank Mk II (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGenerator":{"prefab":{"prefabName":"DynamicGenerator","prefabHash":-82087220,"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.","name":"Portable Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"GasCanister"},{"name":"Battery","typ":"Battery"}]},"DynamicHydroponics":{"prefab":{"prefabName":"DynamicHydroponics","prefabHash":587726607,"desc":"","name":"Portable Hydroponics"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"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"}]},"DynamicLight":{"prefab":{"prefabName":"DynamicLight","prefabHash":-21970188,"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.","name":"Portable Light"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicLiquidCanisterEmpty":{"prefab":{"prefabName":"DynamicLiquidCanisterEmpty","prefabHash":-1939209112,"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.","name":"Portable Liquid Tank"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterEmpty":{"prefab":{"prefabName":"DynamicMKIILiquidCanisterEmpty","prefabHash":2130739600,"desc":"An empty, insulated liquid Gas Canister.","name":"Portable Liquid Tank Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterWater":{"prefab":{"prefabName":"DynamicMKIILiquidCanisterWater","prefabHash":-319510386,"desc":"An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature.","name":"Portable Liquid Tank Mk II (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicScrubber":{"prefab":{"prefabName":"DynamicScrubber","prefabHash":755048589,"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.","name":"Portable Air Scrubber"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"}]},"DynamicSkeleton":{"prefab":{"prefabName":"DynamicSkeleton","prefabHash":106953348,"desc":"","name":"Skeleton"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ElectronicPrinterMod":{"prefab":{"prefabName":"ElectronicPrinterMod","prefabHash":-311170652,"desc":"Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Electronic Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ElevatorCarrage":{"prefab":{"prefabName":"ElevatorCarrage","prefabHash":-110788403,"desc":"","name":"Elevator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"EntityChick":{"prefab":{"prefabName":"EntityChick","prefabHash":1730165908,"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.","name":"Entity Chick"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenBrown":{"prefab":{"prefabName":"EntityChickenBrown","prefabHash":334097180,"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.","name":"Entity Chicken Brown"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenWhite":{"prefab":{"prefabName":"EntityChickenWhite","prefabHash":1010807532,"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.","name":"Entity Chicken White"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBlack":{"prefab":{"prefabName":"EntityRoosterBlack","prefabHash":966959649,"desc":"This is a rooster. It is black. There is dignity in this.","name":"Entity Rooster Black"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBrown":{"prefab":{"prefabName":"EntityRoosterBrown","prefabHash":-583103395,"desc":"The common brown rooster. Don't let it hear you say that.","name":"Entity Rooster Brown"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"Fertilizer":{"prefab":{"prefabName":"Fertilizer","prefabHash":1517856652,"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. ","name":"Fertilizer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Default"}},"FireArmSMG":{"prefab":{"prefabName":"FireArmSMG","prefabHash":-86315541,"desc":"0.Single\n1.Auto","name":"Fire Arm SMG"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"slots":[{"name":"","typ":"Magazine"}]},"Flag_ODA_10m":{"prefab":{"prefabName":"Flag_ODA_10m","prefabHash":1845441951,"desc":"","name":"Flag (ODA 10m)"},"structure":{"smallGrid":true}},"Flag_ODA_4m":{"prefab":{"prefabName":"Flag_ODA_4m","prefabHash":1159126354,"desc":"","name":"Flag (ODA 4m)"},"structure":{"smallGrid":true}},"Flag_ODA_6m":{"prefab":{"prefabName":"Flag_ODA_6m","prefabHash":1998634960,"desc":"","name":"Flag (ODA 6m)"},"structure":{"smallGrid":true}},"Flag_ODA_8m":{"prefab":{"prefabName":"Flag_ODA_8m","prefabHash":-375156130,"desc":"","name":"Flag (ODA 8m)"},"structure":{"smallGrid":true}},"FlareGun":{"prefab":{"prefabName":"FlareGun","prefabHash":118685786,"desc":"","name":"Flare Gun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Magazine","typ":"Flare"},{"name":"","typ":"Blocked"}]},"H2Combustor":{"prefab":{"prefabName":"H2Combustor","prefabHash":1840108251,"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.","name":"H2 Combustor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","Combustion":"Read","CombustionInput":"Read","CombustionOutput":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidHydrogen":"Read","RatioLiquidNitrogen":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"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","RatioSteamInput":"Read","RatioSteamOutput":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"Handgun":{"prefab":{"prefabName":"Handgun","prefabHash":247238062,"desc":"","name":"Handgun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"slots":[{"name":"Magazine","typ":"Magazine"}]},"HandgunMagazine":{"prefab":{"prefabName":"HandgunMagazine","prefabHash":1254383185,"desc":"","name":"Handgun Magazine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Magazine","sortingClass":"Default"}},"HumanSkull":{"prefab":{"prefabName":"HumanSkull","prefabHash":-857713709,"desc":"","name":"Human Skull"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ImGuiCircuitboardAirlockControl":{"prefab":{"prefabName":"ImGuiCircuitboardAirlockControl","prefabHash":-73796547,"desc":"","name":"Airlock (Experimental)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"ItemActiveVent":{"prefab":{"prefabName":"ItemActiveVent","prefabHash":-842048328,"desc":"When constructed, this kit places an Active Vent on any support structure.","name":"Kit (Active Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemAdhesiveInsulation":{"prefab":{"prefabName":"ItemAdhesiveInsulation","prefabHash":1871048978,"desc":"","name":"Adhesive Insulation"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"Tool","sortingClass":"Tools"}},"ItemAdvancedTablet":{"prefab":{"prefabName":"ItemAdvancedTablet","prefabHash":1722785341,"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","name":"Advanced Tablet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read","SoundAlert":"ReadWrite","Volume":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"},{"name":"Cartridge1","typ":"Cartridge"},{"name":"Programmable Chip","typ":"ProgrammableChip"}]},"ItemAlienMushroom":{"prefab":{"prefabName":"ItemAlienMushroom","prefabHash":176446172,"desc":"","name":"Alien Mushroom"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Default"}},"ItemAmmoBox":{"prefab":{"prefabName":"ItemAmmoBox","prefabHash":-9559091,"desc":"","name":"Ammo Box"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemAngleGrinder":{"prefab":{"prefabName":"ItemAngleGrinder","prefabHash":201215010,"desc":"Angles-be-gone with the trusty angle grinder.","name":"Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemArcWelder":{"prefab":{"prefabName":"ItemArcWelder","prefabHash":1385062886,"desc":"","name":"Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemAreaPowerControl":{"prefab":{"prefabName":"ItemAreaPowerControl","prefabHash":1757673317,"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.","name":"Kit (Power Controller)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemAstroloyIngot":{"prefab":{"prefabName":"ItemAstroloyIngot","prefabHash":412924554,"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.","name":"Ingot (Astroloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Astroloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemAstroloySheets":{"prefab":{"prefabName":"ItemAstroloySheets","prefabHash":-1662476145,"desc":"","name":"Astroloy Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemAuthoringTool":{"prefab":{"prefabName":"ItemAuthoringTool","prefabHash":789015045,"desc":"","name":"Authoring Tool"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemAuthoringToolRocketNetwork":{"prefab":{"prefabName":"ItemAuthoringToolRocketNetwork","prefabHash":-1731627004,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemBasketBall":{"prefab":{"prefabName":"ItemBasketBall","prefabHash":-1262580790,"desc":"","name":"Basket Ball"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemBatteryCell":{"prefab":{"prefabName":"ItemBatteryCell","prefabHash":700133157,"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.","name":"Battery Cell (Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCellLarge":{"prefab":{"prefabName":"ItemBatteryCellLarge","prefabHash":-459827268,"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","name":"Battery Cell (Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCellNuclear":{"prefab":{"prefabName":"ItemBatteryCellNuclear","prefabHash":544617306,"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.","name":"Battery Cell (Nuclear)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCharger":{"prefab":{"prefabName":"ItemBatteryCharger","prefabHash":-1866880307,"desc":"This kit produces a 5-slot Kit (Battery Charger).","name":"Kit (Battery Charger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemBatteryChargerSmall":{"prefab":{"prefabName":"ItemBatteryChargerSmall","prefabHash":1008295833,"desc":"","name":"Battery Charger Small"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemBeacon":{"prefab":{"prefabName":"ItemBeacon","prefabHash":-869869491,"desc":"","name":"Tracking Beacon"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemBiomass":{"prefab":{"prefabName":"ItemBiomass","prefabHash":-831480639,"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).","name":"Biomass"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Biomass":1.0},"slotClass":"Ore","sortingClass":"Resources"}},"ItemBreadLoaf":{"prefab":{"prefabName":"ItemBreadLoaf","prefabHash":893514943,"desc":"","name":"Bread Loaf"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCableAnalyser":{"prefab":{"prefabName":"ItemCableAnalyser","prefabHash":-1792787349,"desc":"","name":"Kit (Cable Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemCableCoil":{"prefab":{"prefabName":"ItemCableCoil","prefabHash":-466050668,"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).","name":"Cable Coil"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Tool","sortingClass":"Resources"}},"ItemCableCoilHeavy":{"prefab":{"prefabName":"ItemCableCoilHeavy","prefabHash":2060134443,"desc":"Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW.","name":"Cable Coil (Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Tool","sortingClass":"Resources"}},"ItemCableFuse":{"prefab":{"prefabName":"ItemCableFuse","prefabHash":195442047,"desc":"","name":"Kit (Cable Fuses)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Resources"}},"ItemCannedCondensedMilk":{"prefab":{"prefabName":"ItemCannedCondensedMilk","prefabHash":-2104175091,"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.","name":"Canned Condensed Milk"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCannedEdamame":{"prefab":{"prefabName":"ItemCannedEdamame","prefabHash":-999714082,"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.","name":"Canned Edamame"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCannedMushroom":{"prefab":{"prefabName":"ItemCannedMushroom","prefabHash":-1344601965,"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.","name":"Canned Mushroom"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCannedPowderedEggs":{"prefab":{"prefabName":"ItemCannedPowderedEggs","prefabHash":1161510063,"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.","name":"Canned Powdered Eggs"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCannedRicePudding":{"prefab":{"prefabName":"ItemCannedRicePudding","prefabHash":-1185552595,"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.","name":"Canned Rice Pudding"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCerealBar":{"prefab":{"prefabName":"ItemCerealBar","prefabHash":791746840,"desc":"Sustains, without decay. If only all our relationships were so well balanced.","name":"Cereal Bar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCharcoal":{"prefab":{"prefabName":"ItemCharcoal","prefabHash":252561409,"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.","name":"Charcoal"},"item":{"consumable":false,"ingredient":true,"maxQuantity":200,"reagents":{"Carbon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemChemLightBlue":{"prefab":{"prefabName":"ItemChemLightBlue","prefabHash":-772542081,"desc":"A safe and slightly rave-some source of blue light. Snap to activate.","name":"Chem Light (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightGreen":{"prefab":{"prefabName":"ItemChemLightGreen","prefabHash":-597479390,"desc":"Enliven the dreariest, airless rock with this glowy green light. Snap to activate.","name":"Chem Light (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightRed":{"prefab":{"prefabName":"ItemChemLightRed","prefabHash":-525810132,"desc":"A red glowstick. Snap to activate. Then reach for the lasers.","name":"Chem Light (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightWhite":{"prefab":{"prefabName":"ItemChemLightWhite","prefabHash":1312166823,"desc":"Snap the glowstick to activate a pale radiance that keeps the darkness at bay.","name":"Chem Light (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightYellow":{"prefab":{"prefabName":"ItemChemLightYellow","prefabHash":1224819963,"desc":"Dispel the darkness with this yellow glowstick.","name":"Chem Light (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChocolateBar":{"prefab":{"prefabName":"ItemChocolateBar","prefabHash":234601764,"desc":"","name":"Chocolate Bar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemChocolateCake":{"prefab":{"prefabName":"ItemChocolateCake","prefabHash":-261575861,"desc":"","name":"Chocolate Cake"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemChocolateCerealBar":{"prefab":{"prefabName":"ItemChocolateCerealBar","prefabHash":860793245,"desc":"","name":"Chocolate Cereal Bar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCoalOre":{"prefab":{"prefabName":"ItemCoalOre","prefabHash":1724793494,"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).","name":"Ore (Coal)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Hydrocarbon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCobaltOre":{"prefab":{"prefabName":"ItemCobaltOre","prefabHash":-983091249,"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.","name":"Ore (Cobalt)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Cobalt":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCocoaPowder":{"prefab":{"prefabName":"ItemCocoaPowder","prefabHash":457286516,"desc":"","name":"Cocoa Powder"},"item":{"consumable":true,"ingredient":true,"maxQuantity":20,"reagents":{"Cocoa":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemCocoaTree":{"prefab":{"prefabName":"ItemCocoaTree","prefabHash":680051921,"desc":"","name":"Cocoa"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Cocoa":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemCoffeeMug":{"prefab":{"prefabName":"ItemCoffeeMug","prefabHash":1800622698,"desc":"","name":"Coffee Mug"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemConstantanIngot":{"prefab":{"prefabName":"ItemConstantanIngot","prefabHash":1058547521,"desc":"","name":"Ingot (Constantan)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Constantan":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemCookedCondensedMilk":{"prefab":{"prefabName":"ItemCookedCondensedMilk","prefabHash":1715917521,"desc":"A high-nutrient cooked food, which can be canned.","name":"Condensed Milk"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Milk":100.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedCorn":{"prefab":{"prefabName":"ItemCookedCorn","prefabHash":1344773148,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Corn"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Corn":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedMushroom":{"prefab":{"prefabName":"ItemCookedMushroom","prefabHash":-1076892658,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Mushroom"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Mushroom":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedPowderedEggs":{"prefab":{"prefabName":"ItemCookedPowderedEggs","prefabHash":-1712264413,"desc":"A high-nutrient cooked food, which can be canned.","name":"Powdered Eggs"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Egg":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedPumpkin":{"prefab":{"prefabName":"ItemCookedPumpkin","prefabHash":1849281546,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Pumpkin"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Pumpkin":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedRice":{"prefab":{"prefabName":"ItemCookedRice","prefabHash":2013539020,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Rice"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Rice":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedSoybean":{"prefab":{"prefabName":"ItemCookedSoybean","prefabHash":1353449022,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Soybean"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Soy":5.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedTomato":{"prefab":{"prefabName":"ItemCookedTomato","prefabHash":-709086714,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Tomato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Tomato":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCopperIngot":{"prefab":{"prefabName":"ItemCopperIngot","prefabHash":-404336834,"desc":"Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items.","name":"Ingot (Copper)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Copper":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemCopperOre":{"prefab":{"prefabName":"ItemCopperOre","prefabHash":-707307845,"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.","name":"Ore (Copper)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Copper":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCorn":{"prefab":{"prefabName":"ItemCorn","prefabHash":258339687,"desc":"A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light.","name":"Corn"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Corn":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemCornSoup":{"prefab":{"prefabName":"ItemCornSoup","prefabHash":545034114,"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.","name":"Corn Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCreditCard":{"prefab":{"prefabName":"ItemCreditCard","prefabHash":-1756772618,"desc":"","name":"Credit Card"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100000,"slotClass":"CreditCard","sortingClass":"Tools"}},"ItemCropHay":{"prefab":{"prefabName":"ItemCropHay","prefabHash":215486157,"desc":"","name":"Hay"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"None","sortingClass":"Default"}},"ItemCrowbar":{"prefab":{"prefabName":"ItemCrowbar","prefabHash":856108234,"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.","name":"Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemDataDisk":{"prefab":{"prefabName":"ItemDataDisk","prefabHash":1005843700,"desc":"","name":"Data Disk"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"DataDisk","sortingClass":"Default"}},"ItemDirtCanister":{"prefab":{"prefabName":"ItemDirtCanister","prefabHash":902565329,"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.","name":"Dirt Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Ore","sortingClass":"Default"}},"ItemDirtyOre":{"prefab":{"prefabName":"ItemDirtyOre","prefabHash":-1234745580,"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. ","name":"Dirty Ore"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Ores"}},"ItemDisposableBatteryCharger":{"prefab":{"prefabName":"ItemDisposableBatteryCharger","prefabHash":-2124435700,"desc":"Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery.","name":"Disposable Battery Charger"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemDrill":{"prefab":{"prefabName":"ItemDrill","prefabHash":2009673399,"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.","name":"Hand Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemDuctTape":{"prefab":{"prefabName":"ItemDuctTape","prefabHash":-1943134693,"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.","name":"Duct Tape"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemDynamicAirCon":{"prefab":{"prefabName":"ItemDynamicAirCon","prefabHash":1072914031,"desc":"","name":"Kit (Portable Air Conditioner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemDynamicScrubber":{"prefab":{"prefabName":"ItemDynamicScrubber","prefabHash":-971920158,"desc":"","name":"Kit (Portable Scrubber)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemEggCarton":{"prefab":{"prefabName":"ItemEggCarton","prefabHash":-524289310,"desc":"Within, eggs reside in mysterious, marmoreal silence.","name":"Egg Carton"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Storage"},"slots":[{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"}]},"ItemElectronicParts":{"prefab":{"prefabName":"ItemElectronicParts","prefabHash":731250882,"desc":"","name":"Electronic Parts"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Resources"}},"ItemElectrumIngot":{"prefab":{"prefabName":"ItemElectrumIngot","prefabHash":502280180,"desc":"","name":"Ingot (Electrum)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Electrum":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemEmergencyAngleGrinder":{"prefab":{"prefabName":"ItemEmergencyAngleGrinder","prefabHash":-351438780,"desc":"","name":"Emergency Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyArcWelder":{"prefab":{"prefabName":"ItemEmergencyArcWelder","prefabHash":-1056029600,"desc":"","name":"Emergency Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyCrowbar":{"prefab":{"prefabName":"ItemEmergencyCrowbar","prefabHash":976699731,"desc":"","name":"Emergency Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyDrill":{"prefab":{"prefabName":"ItemEmergencyDrill","prefabHash":-2052458905,"desc":"","name":"Emergency Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyEvaSuit":{"prefab":{"prefabName":"ItemEmergencyEvaSuit","prefabHash":1791306431,"desc":"","name":"Emergency Eva Suit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Suit","sortingClass":"Clothing"},"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"}]},"ItemEmergencyPickaxe":{"prefab":{"prefabName":"ItemEmergencyPickaxe","prefabHash":-1061510408,"desc":"","name":"Emergency Pickaxe"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyScrewdriver":{"prefab":{"prefabName":"ItemEmergencyScrewdriver","prefabHash":266099983,"desc":"","name":"Emergency Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencySpaceHelmet":{"prefab":{"prefabName":"ItemEmergencySpaceHelmet","prefabHash":205916793,"desc":"","name":"Emergency Space Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemEmergencyToolBelt":{"prefab":{"prefabName":"ItemEmergencyToolBelt","prefabHash":1661941301,"desc":"","name":"Emergency Tool Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemEmergencyWireCutters":{"prefab":{"prefabName":"ItemEmergencyWireCutters","prefabHash":2102803952,"desc":"","name":"Emergency Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyWrench":{"prefab":{"prefabName":"ItemEmergencyWrench","prefabHash":162553030,"desc":"","name":"Emergency Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmptyCan":{"prefab":{"prefabName":"ItemEmptyCan","prefabHash":1013818348,"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.","name":"Empty Can"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Steel":1.0},"slotClass":"None","sortingClass":"Default"}},"ItemEvaSuit":{"prefab":{"prefabName":"ItemEvaSuit","prefabHash":1677018918,"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.","name":"Eva Suit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Suit","sortingClass":"Clothing"},"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"}]},"ItemExplosive":{"prefab":{"prefabName":"ItemExplosive","prefabHash":235361649,"desc":"","name":"Remote Explosive"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemFern":{"prefab":{"prefabName":"ItemFern","prefabHash":892110467,"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.","name":"Fern"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Fenoxitone":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemFertilizedEgg":{"prefab":{"prefabName":"ItemFertilizedEgg","prefabHash":-383972371,"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.","name":"Egg"},"item":{"consumable":false,"ingredient":true,"maxQuantity":1,"reagents":{"Egg":1.0},"slotClass":"Egg","sortingClass":"Resources"}},"ItemFilterFern":{"prefab":{"prefabName":"ItemFilterFern","prefabHash":266654416,"desc":"A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant.","name":"Darga Fern"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlagSmall":{"prefab":{"prefabName":"ItemFlagSmall","prefabHash":2011191088,"desc":"","name":"Kit (Small Flag)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemFlashingLight":{"prefab":{"prefabName":"ItemFlashingLight","prefabHash":-2107840748,"desc":"","name":"Kit (Flashing Light)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemFlashlight":{"prefab":{"prefabName":"ItemFlashlight","prefabHash":-838472102,"desc":"A flashlight with a narrow and wide beam options.","name":"Flashlight"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Low Power","1":"High Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemFlour":{"prefab":{"prefabName":"ItemFlour","prefabHash":-665995854,"desc":"Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven).","name":"Flour"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Flour":50.0},"slotClass":"None","sortingClass":"Resources"}},"ItemFlowerBlue":{"prefab":{"prefabName":"ItemFlowerBlue","prefabHash":-1573623434,"desc":"","name":"Flower (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerGreen":{"prefab":{"prefabName":"ItemFlowerGreen","prefabHash":-1513337058,"desc":"","name":"Flower (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerOrange":{"prefab":{"prefabName":"ItemFlowerOrange","prefabHash":-1411986716,"desc":"","name":"Flower (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerRed":{"prefab":{"prefabName":"ItemFlowerRed","prefabHash":-81376085,"desc":"","name":"Flower (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerYellow":{"prefab":{"prefabName":"ItemFlowerYellow","prefabHash":1712822019,"desc":"","name":"Flower (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFrenchFries":{"prefab":{"prefabName":"ItemFrenchFries","prefabHash":-57608687,"desc":"Because space would suck without 'em.","name":"Canned French Fries"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemFries":{"prefab":{"prefabName":"ItemFries","prefabHash":1371786091,"desc":"","name":"French Fries"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemGasCanisterCarbonDioxide":{"prefab":{"prefabName":"ItemGasCanisterCarbonDioxide","prefabHash":-767685874,"desc":"","name":"Canister (CO2)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterEmpty":{"prefab":{"prefabName":"ItemGasCanisterEmpty","prefabHash":42280099,"desc":"","name":"Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterFuel":{"prefab":{"prefabName":"ItemGasCanisterFuel","prefabHash":-1014695176,"desc":"","name":"Canister (Fuel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterNitrogen":{"prefab":{"prefabName":"ItemGasCanisterNitrogen","prefabHash":2145068424,"desc":"","name":"Canister (Nitrogen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterNitrousOxide":{"prefab":{"prefabName":"ItemGasCanisterNitrousOxide","prefabHash":-1712153401,"desc":"","name":"Gas Canister (Sleeping)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterOxygen":{"prefab":{"prefabName":"ItemGasCanisterOxygen","prefabHash":-1152261938,"desc":"","name":"Canister (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterPollutants":{"prefab":{"prefabName":"ItemGasCanisterPollutants","prefabHash":-1552586384,"desc":"","name":"Canister (Pollutants)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterSmart":{"prefab":{"prefabName":"ItemGasCanisterSmart","prefabHash":-668314371,"desc":"0.Mode0\n1.Mode1","name":"Gas Canister (Smart)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterVolatiles":{"prefab":{"prefabName":"ItemGasCanisterVolatiles","prefabHash":-472094806,"desc":"","name":"Canister (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterWater":{"prefab":{"prefabName":"ItemGasCanisterWater","prefabHash":-1854861891,"desc":"","name":"Liquid Canister (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemGasFilterCarbonDioxide":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxide","prefabHash":1635000764,"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.","name":"Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideInfinite":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideInfinite","prefabHash":-185568964,"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.","name":"Catalytic Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideL":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideL","prefabHash":1876847024,"desc":"","name":"Heavy Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideM":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideM","prefabHash":416897318,"desc":"","name":"Medium Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogen":{"prefab":{"prefabName":"ItemGasFilterNitrogen","prefabHash":632853248,"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.","name":"Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenInfinite":{"prefab":{"prefabName":"ItemGasFilterNitrogenInfinite","prefabHash":152751131,"desc":"A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenL":{"prefab":{"prefabName":"ItemGasFilterNitrogenL","prefabHash":-1387439451,"desc":"","name":"Heavy Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenM":{"prefab":{"prefabName":"ItemGasFilterNitrogenM","prefabHash":-632657357,"desc":"","name":"Medium Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxide":{"prefab":{"prefabName":"ItemGasFilterNitrousOxide","prefabHash":-1247674305,"desc":"","name":"Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideInfinite":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideInfinite","prefabHash":-123934842,"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.","name":"Catalytic Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideL":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideL","prefabHash":465267979,"desc":"","name":"Heavy Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideM":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideM","prefabHash":1824284061,"desc":"","name":"Medium Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygen":{"prefab":{"prefabName":"ItemGasFilterOxygen","prefabHash":-721824748,"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).","name":"Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenInfinite":{"prefab":{"prefabName":"ItemGasFilterOxygenInfinite","prefabHash":-1055451111,"desc":"A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenL":{"prefab":{"prefabName":"ItemGasFilterOxygenL","prefabHash":-1217998945,"desc":"","name":"Heavy Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenM":{"prefab":{"prefabName":"ItemGasFilterOxygenM","prefabHash":-1067319543,"desc":"","name":"Medium Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutants":{"prefab":{"prefabName":"ItemGasFilterPollutants","prefabHash":1915566057,"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.","name":"Filter (Pollutant)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsInfinite":{"prefab":{"prefabName":"ItemGasFilterPollutantsInfinite","prefabHash":-503738105,"desc":"A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsL":{"prefab":{"prefabName":"ItemGasFilterPollutantsL","prefabHash":1959564765,"desc":"","name":"Heavy Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsM":{"prefab":{"prefabName":"ItemGasFilterPollutantsM","prefabHash":63677771,"desc":"","name":"Medium Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatiles":{"prefab":{"prefabName":"ItemGasFilterVolatiles","prefabHash":15011598,"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.","name":"Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesInfinite":{"prefab":{"prefabName":"ItemGasFilterVolatilesInfinite","prefabHash":-1916176068,"desc":"A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesL":{"prefab":{"prefabName":"ItemGasFilterVolatilesL","prefabHash":1255156286,"desc":"","name":"Heavy Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesM":{"prefab":{"prefabName":"ItemGasFilterVolatilesM","prefabHash":1037507240,"desc":"","name":"Medium Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWater":{"prefab":{"prefabName":"ItemGasFilterWater","prefabHash":-1993197973,"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)","name":"Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterInfinite":{"prefab":{"prefabName":"ItemGasFilterWaterInfinite","prefabHash":-1678456554,"desc":"A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterL":{"prefab":{"prefabName":"ItemGasFilterWaterL","prefabHash":2004969680,"desc":"","name":"Heavy Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterM":{"prefab":{"prefabName":"ItemGasFilterWaterM","prefabHash":8804422,"desc":"","name":"Medium Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasSensor":{"prefab":{"prefabName":"ItemGasSensor","prefabHash":1717593480,"desc":"","name":"Kit (Gas Sensor)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemGasTankStorage":{"prefab":{"prefabName":"ItemGasTankStorage","prefabHash":-2113012215,"desc":"This kit produces a Kit (Canister Storage) for refilling a Canister.","name":"Kit (Canister Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemGlassSheets":{"prefab":{"prefabName":"ItemGlassSheets","prefabHash":1588896491,"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.","name":"Glass Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemGlasses":{"prefab":{"prefabName":"ItemGlasses","prefabHash":-1068925231,"desc":"","name":"Glasses"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Glasses","sortingClass":"Clothing"}},"ItemGoldIngot":{"prefab":{"prefabName":"ItemGoldIngot","prefabHash":226410516,"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. ","name":"Ingot (Gold)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Gold":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemGoldOre":{"prefab":{"prefabName":"ItemGoldOre","prefabHash":-1348105509,"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.","name":"Ore (Gold)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Gold":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemGrenade":{"prefab":{"prefabName":"ItemGrenade","prefabHash":1544275894,"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.","name":"Hand Grenade"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemHEMDroidRepairKit":{"prefab":{"prefabName":"ItemHEMDroidRepairKit","prefabHash":470636008,"desc":"Repairs damaged HEM-Droids to full health.","name":"HEMDroid Repair Kit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Food"}},"ItemHardBackpack":{"prefab":{"prefabName":"ItemHardBackpack","prefabHash":374891127,"desc":"This backpack can be useful when you are working inside and don't need to fly around.","name":"Hardsuit Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemHardJetpack":{"prefab":{"prefabName":"ItemHardJetpack","prefabHash":-412551656,"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.","name":"Hardsuit Jetpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemHardMiningBackPack":{"prefab":{"prefabName":"ItemHardMiningBackPack","prefabHash":900366130,"desc":"","name":"Hard Mining Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"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"}]},"ItemHardSuit":{"prefab":{"prefabName":"ItemHardSuit","prefabHash":-1758310454,"desc":"Connects to Logic Transmitter","name":"Hardsuit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Suit","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"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"}],"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"ItemHardsuitHelmet":{"prefab":{"prefabName":"ItemHardsuitHelmet","prefabHash":-84573099,"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.","name":"Hardsuit Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemHastelloyIngot":{"prefab":{"prefabName":"ItemHastelloyIngot","prefabHash":1579842814,"desc":"","name":"Ingot (Hastelloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Hastelloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemHat":{"prefab":{"prefabName":"ItemHat","prefabHash":299189339,"desc":"As the name suggests, this is a hat.","name":"Hat"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"}},"ItemHighVolumeGasCanisterEmpty":{"prefab":{"prefabName":"ItemHighVolumeGasCanisterEmpty","prefabHash":998653377,"desc":"","name":"High Volume Gas Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemHorticultureBelt":{"prefab":{"prefabName":"ItemHorticultureBelt","prefabHash":-1117581553,"desc":"","name":"Horticulture Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemHydroponicTray":{"prefab":{"prefabName":"ItemHydroponicTray","prefabHash":-1193543727,"desc":"This kits creates a Hydroponics Tray for growing various plants.","name":"Kit (Hydroponic Tray)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemIce":{"prefab":{"prefabName":"ItemIce","prefabHash":1217489948,"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.","name":"Ice (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemIgniter":{"prefab":{"prefabName":"ItemIgniter","prefabHash":890106742,"desc":"This kit creates an Kit (Igniter) unit.","name":"Kit (Igniter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemInconelIngot":{"prefab":{"prefabName":"ItemInconelIngot","prefabHash":-787796599,"desc":"","name":"Ingot (Inconel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Inconel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemInsulation":{"prefab":{"prefabName":"ItemInsulation","prefabHash":897176943,"desc":"Mysterious in the extreme, the function of this item is lost to the ages.","name":"Insulation"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Resources"}},"ItemIntegratedCircuit10":{"prefab":{"prefabName":"ItemIntegratedCircuit10","prefabHash":-744098481,"desc":"","name":"Integrated Circuit (IC10)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"ProgrammableChip","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"LineNumber":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"memory":{"memoryAccess":"ReadWrite","memorySize":512}},"ItemInvarIngot":{"prefab":{"prefabName":"ItemInvarIngot","prefabHash":-297990285,"desc":"","name":"Ingot (Invar)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Invar":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemIronFrames":{"prefab":{"prefabName":"ItemIronFrames","prefabHash":1225836666,"desc":"","name":"Iron Frames"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemIronIngot":{"prefab":{"prefabName":"ItemIronIngot","prefabHash":-1301215609,"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.","name":"Ingot (Iron)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Iron":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemIronOre":{"prefab":{"prefabName":"ItemIronOre","prefabHash":1758427767,"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.","name":"Ore (Iron)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Iron":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemIronSheets":{"prefab":{"prefabName":"ItemIronSheets","prefabHash":-487378546,"desc":"","name":"Iron Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemJetpackBasic":{"prefab":{"prefabName":"ItemJetpackBasic","prefabHash":1969189000,"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.","name":"Jetpack Basic"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemJetpackTurbine":{"prefab":{"prefabName":"ItemJetpackTurbine","prefabHash":1604261183,"desc":"","name":"Turbine Jetpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"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"}]},"ItemKitAIMeE":{"prefab":{"prefabName":"ItemKitAIMeE","prefabHash":496830914,"desc":"","name":"Kit (AIMeE)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAccessBridge":{"prefab":{"prefabName":"ItemKitAccessBridge","prefabHash":513258369,"desc":"","name":"Kit (Access Bridge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedComposter":{"prefab":{"prefabName":"ItemKitAdvancedComposter","prefabHash":-1431998347,"desc":"","name":"Kit (Advanced Composter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedFurnace":{"prefab":{"prefabName":"ItemKitAdvancedFurnace","prefabHash":-616758353,"desc":"","name":"Kit (Advanced Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedPackagingMachine":{"prefab":{"prefabName":"ItemKitAdvancedPackagingMachine","prefabHash":-598545233,"desc":"","name":"Kit (Advanced Packaging Machine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAirlock":{"prefab":{"prefabName":"ItemKitAirlock","prefabHash":964043875,"desc":"","name":"Kit (Airlock)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAirlockGate":{"prefab":{"prefabName":"ItemKitAirlockGate","prefabHash":682546947,"desc":"","name":"Kit (Hangar Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitArcFurnace":{"prefab":{"prefabName":"ItemKitArcFurnace","prefabHash":-98995857,"desc":"","name":"Kit (Arc Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAtmospherics":{"prefab":{"prefabName":"ItemKitAtmospherics","prefabHash":1222286371,"desc":"","name":"Kit (Atmospherics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutoMinerSmall":{"prefab":{"prefabName":"ItemKitAutoMinerSmall","prefabHash":1668815415,"desc":"","name":"Kit (Autominer Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutolathe":{"prefab":{"prefabName":"ItemKitAutolathe","prefabHash":-1753893214,"desc":"","name":"Kit (Autolathe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutomatedOven":{"prefab":{"prefabName":"ItemKitAutomatedOven","prefabHash":-1931958659,"desc":"","name":"Kit (Automated Oven)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBasket":{"prefab":{"prefabName":"ItemKitBasket","prefabHash":148305004,"desc":"","name":"Kit (Basket)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBattery":{"prefab":{"prefabName":"ItemKitBattery","prefabHash":1406656973,"desc":"","name":"Kit (Battery)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBatteryLarge":{"prefab":{"prefabName":"ItemKitBatteryLarge","prefabHash":-21225041,"desc":"","name":"Kit (Battery Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBeacon":{"prefab":{"prefabName":"ItemKitBeacon","prefabHash":249073136,"desc":"","name":"Kit (Beacon)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBeds":{"prefab":{"prefabName":"ItemKitBeds","prefabHash":-1241256797,"desc":"","name":"Kit (Beds)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBlastDoor":{"prefab":{"prefabName":"ItemKitBlastDoor","prefabHash":-1755116240,"desc":"","name":"Kit (Blast Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCentrifuge":{"prefab":{"prefabName":"ItemKitCentrifuge","prefabHash":578182956,"desc":"","name":"Kit (Centrifuge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChairs":{"prefab":{"prefabName":"ItemKitChairs","prefabHash":-1394008073,"desc":"","name":"Kit (Chairs)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChute":{"prefab":{"prefabName":"ItemKitChute","prefabHash":1025254665,"desc":"","name":"Kit (Basic Chutes)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChuteUmbilical":{"prefab":{"prefabName":"ItemKitChuteUmbilical","prefabHash":-876560854,"desc":"","name":"Kit (Chute Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCompositeCladding":{"prefab":{"prefabName":"ItemKitCompositeCladding","prefabHash":-1470820996,"desc":"","name":"Kit (Cladding)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCompositeFloorGrating":{"prefab":{"prefabName":"ItemKitCompositeFloorGrating","prefabHash":1182412869,"desc":"","name":"Kit (Floor Grating)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitComputer":{"prefab":{"prefabName":"ItemKitComputer","prefabHash":1990225489,"desc":"","name":"Kit (Computer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitConsole":{"prefab":{"prefabName":"ItemKitConsole","prefabHash":-1241851179,"desc":"","name":"Kit (Consoles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrate":{"prefab":{"prefabName":"ItemKitCrate","prefabHash":429365598,"desc":"","name":"Kit (Crate)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrateMkII":{"prefab":{"prefabName":"ItemKitCrateMkII","prefabHash":-1585956426,"desc":"","name":"Kit (Crate Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrateMount":{"prefab":{"prefabName":"ItemKitCrateMount","prefabHash":-551612946,"desc":"","name":"Kit (Container Mount)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCryoTube":{"prefab":{"prefabName":"ItemKitCryoTube","prefabHash":-545234195,"desc":"","name":"Kit (Cryo Tube)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDeepMiner":{"prefab":{"prefabName":"ItemKitDeepMiner","prefabHash":-1935075707,"desc":"","name":"Kit (Deep Miner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDockingPort":{"prefab":{"prefabName":"ItemKitDockingPort","prefabHash":77421200,"desc":"","name":"Kit (Docking Port)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDoor":{"prefab":{"prefabName":"ItemKitDoor","prefabHash":168615924,"desc":"","name":"Kit (Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDrinkingFountain":{"prefab":{"prefabName":"ItemKitDrinkingFountain","prefabHash":-1743663875,"desc":"","name":"Kit (Drinking Fountain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicCanister":{"prefab":{"prefabName":"ItemKitDynamicCanister","prefabHash":-1061945368,"desc":"","name":"Kit (Portable Gas Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicGasTankAdvanced":{"prefab":{"prefabName":"ItemKitDynamicGasTankAdvanced","prefabHash":1533501495,"desc":"","name":"Kit (Portable Gas Tank Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitDynamicGenerator":{"prefab":{"prefabName":"ItemKitDynamicGenerator","prefabHash":-732720413,"desc":"","name":"Kit (Portable Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicHydroponics":{"prefab":{"prefabName":"ItemKitDynamicHydroponics","prefabHash":-1861154222,"desc":"","name":"Kit (Portable Hydroponics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicLiquidCanister":{"prefab":{"prefabName":"ItemKitDynamicLiquidCanister","prefabHash":375541286,"desc":"","name":"Kit (Portable Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicMKIILiquidCanister":{"prefab":{"prefabName":"ItemKitDynamicMKIILiquidCanister","prefabHash":-638019974,"desc":"","name":"Kit (Portable Liquid Tank Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElectricUmbilical":{"prefab":{"prefabName":"ItemKitElectricUmbilical","prefabHash":1603046970,"desc":"","name":"Kit (Power Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElectronicsPrinter":{"prefab":{"prefabName":"ItemKitElectronicsPrinter","prefabHash":-1181922382,"desc":"","name":"Kit (Electronics Printer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElevator":{"prefab":{"prefabName":"ItemKitElevator","prefabHash":-945806652,"desc":"","name":"Kit (Elevator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineLarge":{"prefab":{"prefabName":"ItemKitEngineLarge","prefabHash":755302726,"desc":"","name":"Kit (Engine Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineMedium":{"prefab":{"prefabName":"ItemKitEngineMedium","prefabHash":1969312177,"desc":"","name":"Kit (Engine Medium)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineSmall":{"prefab":{"prefabName":"ItemKitEngineSmall","prefabHash":19645163,"desc":"","name":"Kit (Engine Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEvaporationChamber":{"prefab":{"prefabName":"ItemKitEvaporationChamber","prefabHash":1587787610,"desc":"","name":"Kit (Phase Change Device)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFlagODA":{"prefab":{"prefabName":"ItemKitFlagODA","prefabHash":1701764190,"desc":"","name":"Kit (ODA Flag)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitFridgeBig":{"prefab":{"prefabName":"ItemKitFridgeBig","prefabHash":-1168199498,"desc":"","name":"Kit (Fridge Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFridgeSmall":{"prefab":{"prefabName":"ItemKitFridgeSmall","prefabHash":1661226524,"desc":"","name":"Kit (Fridge Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFurnace":{"prefab":{"prefabName":"ItemKitFurnace","prefabHash":-806743925,"desc":"","name":"Kit (Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFurniture":{"prefab":{"prefabName":"ItemKitFurniture","prefabHash":1162905029,"desc":"","name":"Kit (Furniture)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFuselage":{"prefab":{"prefabName":"ItemKitFuselage","prefabHash":-366262681,"desc":"","name":"Kit (Fuselage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGasGenerator":{"prefab":{"prefabName":"ItemKitGasGenerator","prefabHash":377745425,"desc":"","name":"Kit (Gas Fuel Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGasUmbilical":{"prefab":{"prefabName":"ItemKitGasUmbilical","prefabHash":-1867280568,"desc":"","name":"Kit (Gas Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGovernedGasRocketEngine":{"prefab":{"prefabName":"ItemKitGovernedGasRocketEngine","prefabHash":206848766,"desc":"","name":"Kit (Pumped Gas Rocket Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGroundTelescope":{"prefab":{"prefabName":"ItemKitGroundTelescope","prefabHash":-2140672772,"desc":"","name":"Kit (Telescope)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGrowLight":{"prefab":{"prefabName":"ItemKitGrowLight","prefabHash":341030083,"desc":"","name":"Kit (Grow Light)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHarvie":{"prefab":{"prefabName":"ItemKitHarvie","prefabHash":-1022693454,"desc":"","name":"Kit (Harvie)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHeatExchanger":{"prefab":{"prefabName":"ItemKitHeatExchanger","prefabHash":-1710540039,"desc":"","name":"Kit Heat Exchanger"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHorizontalAutoMiner":{"prefab":{"prefabName":"ItemKitHorizontalAutoMiner","prefabHash":844391171,"desc":"","name":"Kit (OGRE)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydraulicPipeBender":{"prefab":{"prefabName":"ItemKitHydraulicPipeBender","prefabHash":-2098556089,"desc":"","name":"Kit (Hydraulic Pipe Bender)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydroponicAutomated":{"prefab":{"prefabName":"ItemKitHydroponicAutomated","prefabHash":-927931558,"desc":"","name":"Kit (Automated Hydroponics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydroponicStation":{"prefab":{"prefabName":"ItemKitHydroponicStation","prefabHash":2057179799,"desc":"","name":"Kit (Hydroponic Station)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitIceCrusher":{"prefab":{"prefabName":"ItemKitIceCrusher","prefabHash":288111533,"desc":"","name":"Kit (Ice Crusher)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedLiquidPipe":{"prefab":{"prefabName":"ItemKitInsulatedLiquidPipe","prefabHash":2067655311,"desc":"","name":"Kit (Insulated Liquid Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipe":{"prefab":{"prefabName":"ItemKitInsulatedPipe","prefabHash":452636699,"desc":"","name":"Kit (Insulated Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipeUtility":{"prefab":{"prefabName":"ItemKitInsulatedPipeUtility","prefabHash":-27284803,"desc":"","name":"Kit (Insulated Pipe Utility Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipeUtilityLiquid":{"prefab":{"prefabName":"ItemKitInsulatedPipeUtilityLiquid","prefabHash":-1831558953,"desc":"","name":"Kit (Insulated Pipe Utility Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInteriorDoors":{"prefab":{"prefabName":"ItemKitInteriorDoors","prefabHash":1935945891,"desc":"","name":"Kit (Interior Doors)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLadder":{"prefab":{"prefabName":"ItemKitLadder","prefabHash":489494578,"desc":"","name":"Kit (Ladder)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadAtmos":{"prefab":{"prefabName":"ItemKitLandingPadAtmos","prefabHash":1817007843,"desc":"","name":"Kit (Landing Pad Atmospherics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadBasic":{"prefab":{"prefabName":"ItemKitLandingPadBasic","prefabHash":293581318,"desc":"","name":"Kit (Landing Pad Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadWaypoint":{"prefab":{"prefabName":"ItemKitLandingPadWaypoint","prefabHash":-1267511065,"desc":"","name":"Kit (Landing Pad Runway)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeDirectHeatExchanger":{"prefab":{"prefabName":"ItemKitLargeDirectHeatExchanger","prefabHash":450164077,"desc":"","name":"Kit (Large Direct Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeExtendableRadiator":{"prefab":{"prefabName":"ItemKitLargeExtendableRadiator","prefabHash":847430620,"desc":"","name":"Kit (Large Extendable Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeSatelliteDish":{"prefab":{"prefabName":"ItemKitLargeSatelliteDish","prefabHash":-2039971217,"desc":"","name":"Kit (Large Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLaunchMount":{"prefab":{"prefabName":"ItemKitLaunchMount","prefabHash":-1854167549,"desc":"","name":"Kit (Launch Mount)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLaunchTower":{"prefab":{"prefabName":"ItemKitLaunchTower","prefabHash":-174523552,"desc":"","name":"Kit (Rocket Launch Tower)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidRegulator":{"prefab":{"prefabName":"ItemKitLiquidRegulator","prefabHash":1951126161,"desc":"","name":"Kit (Liquid Regulator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTank":{"prefab":{"prefabName":"ItemKitLiquidTank","prefabHash":-799849305,"desc":"","name":"Kit (Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTankInsulated":{"prefab":{"prefabName":"ItemKitLiquidTankInsulated","prefabHash":617773453,"desc":"","name":"Kit (Insulated Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTurboVolumePump":{"prefab":{"prefabName":"ItemKitLiquidTurboVolumePump","prefabHash":-1805020897,"desc":"","name":"Kit (Turbo Volume Pump - Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidUmbilical":{"prefab":{"prefabName":"ItemKitLiquidUmbilical","prefabHash":1571996765,"desc":"","name":"Kit (Liquid Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLocker":{"prefab":{"prefabName":"ItemKitLocker","prefabHash":882301399,"desc":"","name":"Kit (Locker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicCircuit":{"prefab":{"prefabName":"ItemKitLogicCircuit","prefabHash":1512322581,"desc":"","name":"Kit (IC Housing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicInputOutput":{"prefab":{"prefabName":"ItemKitLogicInputOutput","prefabHash":1997293610,"desc":"","name":"Kit (Logic I/O)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicMemory":{"prefab":{"prefabName":"ItemKitLogicMemory","prefabHash":-2098214189,"desc":"","name":"Kit (Logic Memory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicProcessor":{"prefab":{"prefabName":"ItemKitLogicProcessor","prefabHash":220644373,"desc":"","name":"Kit (Logic Processor)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicSwitch":{"prefab":{"prefabName":"ItemKitLogicSwitch","prefabHash":124499454,"desc":"","name":"Kit (Logic Switch)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicTransmitter":{"prefab":{"prefabName":"ItemKitLogicTransmitter","prefabHash":1005397063,"desc":"","name":"Kit (Logic Transmitter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitMotherShipCore":{"prefab":{"prefabName":"ItemKitMotherShipCore","prefabHash":-344968335,"desc":"","name":"Kit (Mothership)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitMusicMachines":{"prefab":{"prefabName":"ItemKitMusicMachines","prefabHash":-2038889137,"desc":"","name":"Kit (Music Machines)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPassiveLargeRadiatorGas":{"prefab":{"prefabName":"ItemKitPassiveLargeRadiatorGas","prefabHash":-1752768283,"desc":"","name":"Kit (Medium Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemKitPassiveLargeRadiatorLiquid":{"prefab":{"prefabName":"ItemKitPassiveLargeRadiatorLiquid","prefabHash":1453961898,"desc":"","name":"Kit (Medium Radiator Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPassthroughHeatExchanger":{"prefab":{"prefabName":"ItemKitPassthroughHeatExchanger","prefabHash":636112787,"desc":"","name":"Kit (CounterFlow Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPictureFrame":{"prefab":{"prefabName":"ItemKitPictureFrame","prefabHash":-2062364768,"desc":"","name":"Kit Picture Frame"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipe":{"prefab":{"prefabName":"ItemKitPipe","prefabHash":-1619793705,"desc":"","name":"Kit (Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeLiquid":{"prefab":{"prefabName":"ItemKitPipeLiquid","prefabHash":-1166461357,"desc":"","name":"Kit (Liquid Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeOrgan":{"prefab":{"prefabName":"ItemKitPipeOrgan","prefabHash":-827125300,"desc":"","name":"Kit (Pipe Organ)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeRadiator":{"prefab":{"prefabName":"ItemKitPipeRadiator","prefabHash":920411066,"desc":"","name":"Kit (Pipe Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitPipeRadiatorLiquid":{"prefab":{"prefabName":"ItemKitPipeRadiatorLiquid","prefabHash":-1697302609,"desc":"","name":"Kit (Pipe Radiator Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitPipeUtility":{"prefab":{"prefabName":"ItemKitPipeUtility","prefabHash":1934508338,"desc":"","name":"Kit (Pipe Utility Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeUtilityLiquid":{"prefab":{"prefabName":"ItemKitPipeUtilityLiquid","prefabHash":595478589,"desc":"","name":"Kit (Pipe Utility Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPlanter":{"prefab":{"prefabName":"ItemKitPlanter","prefabHash":119096484,"desc":"","name":"Kit (Planter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPortablesConnector":{"prefab":{"prefabName":"ItemKitPortablesConnector","prefabHash":1041148999,"desc":"","name":"Kit (Portables Connector)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPowerTransmitter":{"prefab":{"prefabName":"ItemKitPowerTransmitter","prefabHash":291368213,"desc":"","name":"Kit (Power Transmitter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPowerTransmitterOmni":{"prefab":{"prefabName":"ItemKitPowerTransmitterOmni","prefabHash":-831211676,"desc":"","name":"Kit (Power Transmitter Omni)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPoweredVent":{"prefab":{"prefabName":"ItemKitPoweredVent","prefabHash":2015439334,"desc":"","name":"Kit (Powered Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressureFedGasEngine":{"prefab":{"prefabName":"ItemKitPressureFedGasEngine","prefabHash":-121514007,"desc":"","name":"Kit (Pressure Fed Gas Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressureFedLiquidEngine":{"prefab":{"prefabName":"ItemKitPressureFedLiquidEngine","prefabHash":-99091572,"desc":"","name":"Kit (Pressure Fed Liquid Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressurePlate":{"prefab":{"prefabName":"ItemKitPressurePlate","prefabHash":123504691,"desc":"","name":"Kit (Trigger Plate)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPumpedLiquidEngine":{"prefab":{"prefabName":"ItemKitPumpedLiquidEngine","prefabHash":1921918951,"desc":"","name":"Kit (Pumped Liquid Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRailing":{"prefab":{"prefabName":"ItemKitRailing","prefabHash":750176282,"desc":"","name":"Kit (Railing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRecycler":{"prefab":{"prefabName":"ItemKitRecycler","prefabHash":849148192,"desc":"","name":"Kit (Recycler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRegulator":{"prefab":{"prefabName":"ItemKitRegulator","prefabHash":1181371795,"desc":"","name":"Kit (Pressure Regulator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitReinforcedWindows":{"prefab":{"prefabName":"ItemKitReinforcedWindows","prefabHash":1459985302,"desc":"","name":"Kit (Reinforced Windows)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitResearchMachine":{"prefab":{"prefabName":"ItemKitResearchMachine","prefabHash":724776762,"desc":"","name":"Kit Research Machine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitRespawnPointWallMounted":{"prefab":{"prefabName":"ItemKitRespawnPointWallMounted","prefabHash":1574688481,"desc":"","name":"Kit (Respawn)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketAvionics":{"prefab":{"prefabName":"ItemKitRocketAvionics","prefabHash":1396305045,"desc":"","name":"Kit (Avionics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketBattery":{"prefab":{"prefabName":"ItemKitRocketBattery","prefabHash":-314072139,"desc":"","name":"Kit (Rocket Battery)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCargoStorage":{"prefab":{"prefabName":"ItemKitRocketCargoStorage","prefabHash":479850239,"desc":"","name":"Kit (Rocket Cargo Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCelestialTracker":{"prefab":{"prefabName":"ItemKitRocketCelestialTracker","prefabHash":-303008602,"desc":"","name":"Kit (Rocket Celestial Tracker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCircuitHousing":{"prefab":{"prefabName":"ItemKitRocketCircuitHousing","prefabHash":721251202,"desc":"","name":"Kit (Rocket Circuit Housing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketDatalink":{"prefab":{"prefabName":"ItemKitRocketDatalink","prefabHash":-1256996603,"desc":"","name":"Kit (Rocket Datalink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketGasFuelTank":{"prefab":{"prefabName":"ItemKitRocketGasFuelTank","prefabHash":-1629347579,"desc":"","name":"Kit (Rocket Gas Fuel Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketLiquidFuelTank":{"prefab":{"prefabName":"ItemKitRocketLiquidFuelTank","prefabHash":2032027950,"desc":"","name":"Kit (Rocket Liquid Fuel Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketManufactory":{"prefab":{"prefabName":"ItemKitRocketManufactory","prefabHash":-636127860,"desc":"","name":"Kit (Rocket Manufactory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketMiner":{"prefab":{"prefabName":"ItemKitRocketMiner","prefabHash":-867969909,"desc":"","name":"Kit (Rocket Miner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketScanner":{"prefab":{"prefabName":"ItemKitRocketScanner","prefabHash":1753647154,"desc":"","name":"Kit (Rocket Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketTransformerSmall":{"prefab":{"prefabName":"ItemKitRocketTransformerSmall","prefabHash":-932335800,"desc":"","name":"Kit (Transformer Small (Rocket))"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRoverFrame":{"prefab":{"prefabName":"ItemKitRoverFrame","prefabHash":1827215803,"desc":"","name":"Kit (Rover Frame)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRoverMKI":{"prefab":{"prefabName":"ItemKitRoverMKI","prefabHash":197243872,"desc":"","name":"Kit (Rover Mk I)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSDBHopper":{"prefab":{"prefabName":"ItemKitSDBHopper","prefabHash":323957548,"desc":"","name":"Kit (SDB Hopper)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSatelliteDish":{"prefab":{"prefabName":"ItemKitSatelliteDish","prefabHash":178422810,"desc":"","name":"Kit (Medium Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSecurityPrinter":{"prefab":{"prefabName":"ItemKitSecurityPrinter","prefabHash":578078533,"desc":"","name":"Kit (Security Printer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSensor":{"prefab":{"prefabName":"ItemKitSensor","prefabHash":-1776897113,"desc":"","name":"Kit (Sensors)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitShower":{"prefab":{"prefabName":"ItemKitShower","prefabHash":735858725,"desc":"","name":"Kit (Shower)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSign":{"prefab":{"prefabName":"ItemKitSign","prefabHash":529996327,"desc":"","name":"Kit (Sign)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSleeper":{"prefab":{"prefabName":"ItemKitSleeper","prefabHash":326752036,"desc":"","name":"Kit (Sleeper)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSmallDirectHeatExchanger":{"prefab":{"prefabName":"ItemKitSmallDirectHeatExchanger","prefabHash":-1332682164,"desc":"","name":"Kit (Small Direct Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitSmallSatelliteDish":{"prefab":{"prefabName":"ItemKitSmallSatelliteDish","prefabHash":1960952220,"desc":"","name":"Kit (Small Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolarPanel":{"prefab":{"prefabName":"ItemKitSolarPanel","prefabHash":-1924492105,"desc":"","name":"Kit (Solar Panel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolarPanelBasic":{"prefab":{"prefabName":"ItemKitSolarPanelBasic","prefabHash":844961456,"desc":"","name":"Kit (Solar Panel Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemKitSolarPanelBasicReinforced":{"prefab":{"prefabName":"ItemKitSolarPanelBasicReinforced","prefabHash":-528695432,"desc":"","name":"Kit (Solar Panel Basic Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemKitSolarPanelReinforced":{"prefab":{"prefabName":"ItemKitSolarPanelReinforced","prefabHash":-364868685,"desc":"","name":"Kit (Solar Panel Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolidGenerator":{"prefab":{"prefabName":"ItemKitSolidGenerator","prefabHash":1293995736,"desc":"","name":"Kit (Solid Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSorter":{"prefab":{"prefabName":"ItemKitSorter","prefabHash":969522478,"desc":"","name":"Kit (Sorter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSpeaker":{"prefab":{"prefabName":"ItemKitSpeaker","prefabHash":-126038526,"desc":"","name":"Kit (Speaker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStacker":{"prefab":{"prefabName":"ItemKitStacker","prefabHash":1013244511,"desc":"","name":"Kit (Stacker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStairs":{"prefab":{"prefabName":"ItemKitStairs","prefabHash":170878959,"desc":"","name":"Kit (Stairs)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStairwell":{"prefab":{"prefabName":"ItemKitStairwell","prefabHash":-1868555784,"desc":"","name":"Kit (Stairwell)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStandardChute":{"prefab":{"prefabName":"ItemKitStandardChute","prefabHash":2133035682,"desc":"","name":"Kit (Powered Chutes)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStirlingEngine":{"prefab":{"prefabName":"ItemKitStirlingEngine","prefabHash":-1821571150,"desc":"","name":"Kit (Stirling Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSuitStorage":{"prefab":{"prefabName":"ItemKitSuitStorage","prefabHash":1088892825,"desc":"","name":"Kit (Suit Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTables":{"prefab":{"prefabName":"ItemKitTables","prefabHash":-1361598922,"desc":"","name":"Kit (Tables)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTank":{"prefab":{"prefabName":"ItemKitTank","prefabHash":771439840,"desc":"","name":"Kit (Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTankInsulated":{"prefab":{"prefabName":"ItemKitTankInsulated","prefabHash":1021053608,"desc":"","name":"Kit (Tank Insulated)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemKitToolManufactory":{"prefab":{"prefabName":"ItemKitToolManufactory","prefabHash":529137748,"desc":"","name":"Kit (Tool Manufactory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTransformer":{"prefab":{"prefabName":"ItemKitTransformer","prefabHash":-453039435,"desc":"","name":"Kit (Transformer Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTransformerSmall":{"prefab":{"prefabName":"ItemKitTransformerSmall","prefabHash":665194284,"desc":"","name":"Kit (Transformer Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTurbineGenerator":{"prefab":{"prefabName":"ItemKitTurbineGenerator","prefabHash":-1590715731,"desc":"","name":"Kit (Turbine Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTurboVolumePump":{"prefab":{"prefabName":"ItemKitTurboVolumePump","prefabHash":-1248429712,"desc":"","name":"Kit (Turbo Volume Pump - Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitUprightWindTurbine":{"prefab":{"prefabName":"ItemKitUprightWindTurbine","prefabHash":-1798044015,"desc":"","name":"Kit (Upright Wind Turbine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitVendingMachine":{"prefab":{"prefabName":"ItemKitVendingMachine","prefabHash":-2038384332,"desc":"","name":"Kit (Vending Machine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitVendingMachineRefrigerated":{"prefab":{"prefabName":"ItemKitVendingMachineRefrigerated","prefabHash":-1867508561,"desc":"","name":"Kit (Vending Machine Refrigerated)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWall":{"prefab":{"prefabName":"ItemKitWall","prefabHash":-1826855889,"desc":"","name":"Kit (Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallArch":{"prefab":{"prefabName":"ItemKitWallArch","prefabHash":1625214531,"desc":"","name":"Kit (Arched Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallFlat":{"prefab":{"prefabName":"ItemKitWallFlat","prefabHash":-846838195,"desc":"","name":"Kit (Flat Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallGeometry":{"prefab":{"prefabName":"ItemKitWallGeometry","prefabHash":-784733231,"desc":"","name":"Kit (Geometric Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallIron":{"prefab":{"prefabName":"ItemKitWallIron","prefabHash":-524546923,"desc":"","name":"Kit (Iron Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallPadded":{"prefab":{"prefabName":"ItemKitWallPadded","prefabHash":-821868990,"desc":"","name":"Kit (Padded Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWaterBottleFiller":{"prefab":{"prefabName":"ItemKitWaterBottleFiller","prefabHash":159886536,"desc":"","name":"Kit (Water Bottle Filler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWaterPurifier":{"prefab":{"prefabName":"ItemKitWaterPurifier","prefabHash":611181283,"desc":"","name":"Kit (Water Purifier)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWeatherStation":{"prefab":{"prefabName":"ItemKitWeatherStation","prefabHash":337505889,"desc":"","name":"Kit (Weather Station)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemKitWindTurbine":{"prefab":{"prefabName":"ItemKitWindTurbine","prefabHash":-868916503,"desc":"","name":"Kit (Wind Turbine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWindowShutter":{"prefab":{"prefabName":"ItemKitWindowShutter","prefabHash":1779979754,"desc":"","name":"Kit (Window Shutter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemLabeller":{"prefab":{"prefabName":"ItemLabeller","prefabHash":-743968726,"desc":"A labeller lets you set names and values on a variety of devices and structures, including Console and Logic.","name":"Labeller"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemLaptop":{"prefab":{"prefabName":"ItemLaptop","prefabHash":141535121,"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","name":"Laptop"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","PositionX":"Read","PositionY":"Read","PositionZ":"Read","Power":"Read","PressureExternal":"Read","ReferenceId":"Read","TemperatureExternal":"Read"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"},{"name":"Battery","typ":"Battery"},{"name":"Motherboard","typ":"Motherboard"}]},"ItemLeadIngot":{"prefab":{"prefabName":"ItemLeadIngot","prefabHash":2134647745,"desc":"","name":"Ingot (Lead)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Lead":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemLeadOre":{"prefab":{"prefabName":"ItemLeadOre","prefabHash":-190236170,"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.","name":"Ore (Lead)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Lead":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemLightSword":{"prefab":{"prefabName":"ItemLightSword","prefabHash":1949076595,"desc":"A charming, if useless, pseudo-weapon. (Creative only.)","name":"Light Sword"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidCanisterEmpty":{"prefab":{"prefabName":"ItemLiquidCanisterEmpty","prefabHash":-185207387,"desc":"","name":"Liquid Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemLiquidCanisterSmart":{"prefab":{"prefabName":"ItemLiquidCanisterSmart","prefabHash":777684475,"desc":"0.Mode0\n1.Mode1","name":"Liquid Canister (Smart)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemLiquidDrain":{"prefab":{"prefabName":"ItemLiquidDrain","prefabHash":2036225202,"desc":"","name":"Kit (Liquid Drain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidPipeAnalyzer":{"prefab":{"prefabName":"ItemLiquidPipeAnalyzer","prefabHash":226055671,"desc":"","name":"Kit (Liquid Pipe Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidPipeHeater":{"prefab":{"prefabName":"ItemLiquidPipeHeater","prefabHash":-248475032,"desc":"Creates a Pipe Heater (Liquid).","name":"Pipe Heater Kit (Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidPipeValve":{"prefab":{"prefabName":"ItemLiquidPipeValve","prefabHash":-2126113312,"desc":"This kit creates a Liquid Valve.","name":"Kit (Liquid Pipe Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidPipeVolumePump":{"prefab":{"prefabName":"ItemLiquidPipeVolumePump","prefabHash":-2106280569,"desc":"","name":"Kit (Liquid Volume Pump)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidTankStorage":{"prefab":{"prefabName":"ItemLiquidTankStorage","prefabHash":2037427578,"desc":"This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister.","name":"Kit (Liquid Canister Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemMKIIAngleGrinder":{"prefab":{"prefabName":"ItemMKIIAngleGrinder","prefabHash":240174650,"desc":"Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure.","name":"Mk II Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIArcWelder":{"prefab":{"prefabName":"ItemMKIIArcWelder","prefabHash":-2061979347,"desc":"","name":"Mk II Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIICrowbar":{"prefab":{"prefabName":"ItemMKIICrowbar","prefabHash":1440775434,"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.","name":"Mk II Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIDrill":{"prefab":{"prefabName":"ItemMKIIDrill","prefabHash":324791548,"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.","name":"Mk II Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIDuctTape":{"prefab":{"prefabName":"ItemMKIIDuctTape","prefabHash":388774906,"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.","name":"Mk II Duct Tape"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIMiningDrill":{"prefab":{"prefabName":"ItemMKIIMiningDrill","prefabHash":-1875271296,"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.","name":"Mk II Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIScrewdriver":{"prefab":{"prefabName":"ItemMKIIScrewdriver","prefabHash":-2015613246,"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.","name":"Mk II Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIWireCutters":{"prefab":{"prefabName":"ItemMKIIWireCutters","prefabHash":-178893251,"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.","name":"Mk II Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIWrench":{"prefab":{"prefabName":"ItemMKIIWrench","prefabHash":1862001680,"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.","name":"Mk II Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMarineBodyArmor":{"prefab":{"prefabName":"ItemMarineBodyArmor","prefabHash":1399098998,"desc":"","name":"Marine Armor"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Suit","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMarineHelmet":{"prefab":{"prefabName":"ItemMarineHelmet","prefabHash":1073631646,"desc":"","name":"Marine Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMilk":{"prefab":{"prefabName":"ItemMilk","prefabHash":1327248310,"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.","name":"Milk"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"Milk":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemMiningBackPack":{"prefab":{"prefabName":"ItemMiningBackPack","prefabHash":-1650383245,"desc":"","name":"Mining Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"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"}]},"ItemMiningBelt":{"prefab":{"prefabName":"ItemMiningBelt","prefabHash":-676435305,"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.","name":"Mining Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemMiningBeltMKII":{"prefab":{"prefabName":"ItemMiningBeltMKII","prefabHash":1470787934,"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. ","name":"Mining Belt MK II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"}]},"ItemMiningCharge":{"prefab":{"prefabName":"ItemMiningCharge","prefabHash":15829510,"desc":"A low cost, high yield explosive with a 10 second timer.","name":"Mining Charge"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemMiningDrill":{"prefab":{"prefabName":"ItemMiningDrill","prefabHash":1055173191,"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.'","name":"Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillHeavy":{"prefab":{"prefabName":"ItemMiningDrillHeavy","prefabHash":-1663349918,"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.","name":"Mining Drill (Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillPneumatic":{"prefab":{"prefabName":"ItemMiningDrillPneumatic","prefabHash":1258187304,"desc":"0.Default\n1.Flatten","name":"Pneumatic Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemMkIIToolbelt":{"prefab":{"prefabName":"ItemMkIIToolbelt","prefabHash":1467558064,"desc":"A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy.","name":"Tool Belt MK II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"Tool","typ":"Tool"},{"name":"Tool","typ":"Tool"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMuffin":{"prefab":{"prefabName":"ItemMuffin","prefabHash":-1864982322,"desc":"A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin.","name":"Muffin"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemMushroom":{"prefab":{"prefabName":"ItemMushroom","prefabHash":2044798572,"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.","name":"Mushroom"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Mushroom":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemNVG":{"prefab":{"prefabName":"ItemNVG","prefabHash":982514123,"desc":"","name":"Night Vision Goggles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Glasses","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemNickelIngot":{"prefab":{"prefabName":"ItemNickelIngot","prefabHash":-1406385572,"desc":"","name":"Ingot (Nickel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Nickel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemNickelOre":{"prefab":{"prefabName":"ItemNickelOre","prefabHash":1830218956,"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.","name":"Ore (Nickel)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Nickel":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemNitrice":{"prefab":{"prefabName":"ItemNitrice","prefabHash":-1499471529,"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.","name":"Ice (Nitrice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemOxite":{"prefab":{"prefabName":"ItemOxite","prefabHash":-1805394113,"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.","name":"Ice (Oxite)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPassiveVent":{"prefab":{"prefabName":"ItemPassiveVent","prefabHash":238631271,"desc":"This kit creates a Passive Vent among other variants.","name":"Passive Vent"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPassiveVentInsulated":{"prefab":{"prefabName":"ItemPassiveVentInsulated","prefabHash":-1397583760,"desc":"","name":"Kit (Insulated Passive Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPeaceLily":{"prefab":{"prefabName":"ItemPeaceLily","prefabHash":2042955224,"desc":"A fetching lily with greater resistance to cold temperatures.","name":"Peace Lily"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPickaxe":{"prefab":{"prefabName":"ItemPickaxe","prefabHash":-913649823,"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.","name":"Pickaxe"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemPillHeal":{"prefab":{"prefabName":"ItemPillHeal","prefabHash":1118069417,"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.","name":"Pill (Medical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Food"}},"ItemPillStun":{"prefab":{"prefabName":"ItemPillStun","prefabHash":418958601,"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.","name":"Pill (Paralysis)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Food"}},"ItemPipeAnalyizer":{"prefab":{"prefabName":"ItemPipeAnalyizer","prefabHash":-767597887,"desc":"This kit creates a Pipe Analyzer.","name":"Kit (Pipe Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeCowl":{"prefab":{"prefabName":"ItemPipeCowl","prefabHash":-38898376,"desc":"This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres.","name":"Pipe Cowl"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeDigitalValve":{"prefab":{"prefabName":"ItemPipeDigitalValve","prefabHash":-1532448832,"desc":"This kit creates a Digital Valve.","name":"Kit (Digital Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeGasMixer":{"prefab":{"prefabName":"ItemPipeGasMixer","prefabHash":-1134459463,"desc":"This kit creates a Gas Mixer.","name":"Kit (Gas Mixer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeHeater":{"prefab":{"prefabName":"ItemPipeHeater","prefabHash":-1751627006,"desc":"Creates a Pipe Heater (Gas).","name":"Pipe Heater Kit (Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemPipeIgniter":{"prefab":{"prefabName":"ItemPipeIgniter","prefabHash":1366030599,"desc":"","name":"Kit (Pipe Igniter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeLabel":{"prefab":{"prefabName":"ItemPipeLabel","prefabHash":391769637,"desc":"This kit creates a Pipe Label.","name":"Kit (Pipe Label)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeLiquidRadiator":{"prefab":{"prefabName":"ItemPipeLiquidRadiator","prefabHash":-906521320,"desc":"This kit creates a Liquid Pipe Convection Radiator.","name":"Kit (Liquid Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeMeter":{"prefab":{"prefabName":"ItemPipeMeter","prefabHash":1207939683,"desc":"This kit creates a Pipe Meter.","name":"Kit (Pipe Meter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeRadiator":{"prefab":{"prefabName":"ItemPipeRadiator","prefabHash":-1796655088,"desc":"This kit creates a Pipe Convection Radiator.","name":"Kit (Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeValve":{"prefab":{"prefabName":"ItemPipeValve","prefabHash":799323450,"desc":"This kit creates a Valve.","name":"Kit (Pipe Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemPipeVolumePump":{"prefab":{"prefabName":"ItemPipeVolumePump","prefabHash":-1766301997,"desc":"This kit creates a Volume Pump.","name":"Kit (Volume Pump)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPlainCake":{"prefab":{"prefabName":"ItemPlainCake","prefabHash":-1108244510,"desc":"","name":"Cake"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemPlantEndothermic_Creative":{"prefab":{"prefabName":"ItemPlantEndothermic_Creative","prefabHash":-1159179557,"desc":"","name":"Endothermic Plant Creative"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantEndothermic_Genepool1":{"prefab":{"prefabName":"ItemPlantEndothermic_Genepool1","prefabHash":851290561,"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.","name":"Winterspawn (Alpha variant)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantEndothermic_Genepool2":{"prefab":{"prefabName":"ItemPlantEndothermic_Genepool2","prefabHash":-1414203269,"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.","name":"Winterspawn (Beta variant)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantSampler":{"prefab":{"prefabName":"ItemPlantSampler","prefabHash":173023800,"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.","name":"Plant Sampler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemPlantSwitchGrass":{"prefab":{"prefabName":"ItemPlantSwitchGrass","prefabHash":-532672323,"desc":"","name":"Switch Grass"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Default"}},"ItemPlantThermogenic_Creative":{"prefab":{"prefabName":"ItemPlantThermogenic_Creative","prefabHash":-1208890208,"desc":"","name":"Thermogenic Plant Creative"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantThermogenic_Genepool1":{"prefab":{"prefabName":"ItemPlantThermogenic_Genepool1","prefabHash":-177792789,"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.","name":"Hades Flower (Alpha strain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantThermogenic_Genepool2":{"prefab":{"prefabName":"ItemPlantThermogenic_Genepool2","prefabHash":1819167057,"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.","name":"Hades Flower (Beta strain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlasticSheets":{"prefab":{"prefabName":"ItemPlasticSheets","prefabHash":662053345,"desc":"","name":"Plastic Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemPotato":{"prefab":{"prefabName":"ItemPotato","prefabHash":1929046963,"desc":" Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies.","name":"Potato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Potato":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemPotatoBaked":{"prefab":{"prefabName":"ItemPotatoBaked","prefabHash":-2111886401,"desc":"","name":"Baked Potato"},"item":{"consumable":true,"ingredient":true,"maxQuantity":1,"reagents":{"Potato":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemPowerConnector":{"prefab":{"prefabName":"ItemPowerConnector","prefabHash":839924019,"desc":"This kit creates a Power Connector.","name":"Kit (Power Connector)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemPumpkin":{"prefab":{"prefabName":"ItemPumpkin","prefabHash":1277828144,"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.","name":"Pumpkin"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Pumpkin":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemPumpkinPie":{"prefab":{"prefabName":"ItemPumpkinPie","prefabHash":62768076,"desc":"","name":"Pumpkin Pie"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemPumpkinSoup":{"prefab":{"prefabName":"ItemPumpkinSoup","prefabHash":1277979876,"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","name":"Pumpkin Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemPureIce":{"prefab":{"prefabName":"ItemPureIce","prefabHash":-1616308158,"desc":"A frozen chunk of pure Water","name":"Pure Ice Water"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceCarbonDioxide":{"prefab":{"prefabName":"ItemPureIceCarbonDioxide","prefabHash":-1251009404,"desc":"A frozen chunk of pure Carbon Dioxide","name":"Pure Ice Carbon Dioxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceHydrogen":{"prefab":{"prefabName":"ItemPureIceHydrogen","prefabHash":944530361,"desc":"A frozen chunk of pure Hydrogen","name":"Pure Ice Hydrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidCarbonDioxide":{"prefab":{"prefabName":"ItemPureIceLiquidCarbonDioxide","prefabHash":-1715945725,"desc":"A frozen chunk of pure Liquid Carbon Dioxide","name":"Pure Ice Liquid Carbon Dioxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidHydrogen":{"prefab":{"prefabName":"ItemPureIceLiquidHydrogen","prefabHash":-1044933269,"desc":"A frozen chunk of pure Liquid Hydrogen","name":"Pure Ice Liquid Hydrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidNitrogen":{"prefab":{"prefabName":"ItemPureIceLiquidNitrogen","prefabHash":1674576569,"desc":"A frozen chunk of pure Liquid Nitrogen","name":"Pure Ice Liquid Nitrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidNitrous":{"prefab":{"prefabName":"ItemPureIceLiquidNitrous","prefabHash":1428477399,"desc":"A frozen chunk of pure Liquid Nitrous Oxide","name":"Pure Ice Liquid Nitrous"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidOxygen":{"prefab":{"prefabName":"ItemPureIceLiquidOxygen","prefabHash":541621589,"desc":"A frozen chunk of pure Liquid Oxygen","name":"Pure Ice Liquid Oxygen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidPollutant":{"prefab":{"prefabName":"ItemPureIceLiquidPollutant","prefabHash":-1748926678,"desc":"A frozen chunk of pure Liquid Pollutant","name":"Pure Ice Liquid Pollutant"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidVolatiles":{"prefab":{"prefabName":"ItemPureIceLiquidVolatiles","prefabHash":-1306628937,"desc":"A frozen chunk of pure Liquid Volatiles","name":"Pure Ice Liquid Volatiles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceNitrogen":{"prefab":{"prefabName":"ItemPureIceNitrogen","prefabHash":-1708395413,"desc":"A frozen chunk of pure Nitrogen","name":"Pure Ice Nitrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceNitrous":{"prefab":{"prefabName":"ItemPureIceNitrous","prefabHash":386754635,"desc":"A frozen chunk of pure Nitrous Oxide","name":"Pure Ice NitrousOxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceOxygen":{"prefab":{"prefabName":"ItemPureIceOxygen","prefabHash":-1150448260,"desc":"A frozen chunk of pure Oxygen","name":"Pure Ice Oxygen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIcePollutant":{"prefab":{"prefabName":"ItemPureIcePollutant","prefabHash":-1755356,"desc":"A frozen chunk of pure Pollutant","name":"Pure Ice Pollutant"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIcePollutedWater":{"prefab":{"prefabName":"ItemPureIcePollutedWater","prefabHash":-2073202179,"desc":"A frozen chunk of Polluted Water","name":"Pure Ice Polluted Water"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceSteam":{"prefab":{"prefabName":"ItemPureIceSteam","prefabHash":-874791066,"desc":"A frozen chunk of pure Steam","name":"Pure Ice Steam"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceVolatiles":{"prefab":{"prefabName":"ItemPureIceVolatiles","prefabHash":-633723719,"desc":"A frozen chunk of pure Volatiles","name":"Pure Ice Volatiles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemRTG":{"prefab":{"prefabName":"ItemRTG","prefabHash":495305053,"desc":"This kit creates that miracle of modern science, a Kit (Creative RTG).","name":"Kit (Creative RTG)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemRTGSurvival":{"prefab":{"prefabName":"ItemRTGSurvival","prefabHash":1817645803,"desc":"This kit creates a Kit (RTG).","name":"Kit (RTG)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemReagentMix":{"prefab":{"prefabName":"ItemReagentMix","prefabHash":-1641500434,"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.","name":"Reagent Mix"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ores"}},"ItemRemoteDetonator":{"prefab":{"prefabName":"ItemRemoteDetonator","prefabHash":678483886,"desc":"","name":"Remote Detonator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemReusableFireExtinguisher":{"prefab":{"prefabName":"ItemReusableFireExtinguisher","prefabHash":-1773192190,"desc":"Requires a canister filled with any inert liquid to opperate.","name":"Fire Extinguisher (Reusable)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"ItemRice":{"prefab":{"prefabName":"ItemRice","prefabHash":658916791,"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.","name":"Rice"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Rice":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemRoadFlare":{"prefab":{"prefabName":"ItemRoadFlare","prefabHash":871811564,"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.","name":"Road Flare"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"Flare","sortingClass":"Default"}},"ItemRocketMiningDrillHead":{"prefab":{"prefabName":"ItemRocketMiningDrillHead","prefabHash":2109945337,"desc":"Replaceable drill head for Rocket Miner","name":"Mining-Drill Head (Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadDurable":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadDurable","prefabHash":1530764483,"desc":"","name":"Mining-Drill Head (Durable)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadHighSpeedIce":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadHighSpeedIce","prefabHash":653461728,"desc":"","name":"Mining-Drill Head (High Speed Ice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadHighSpeedMineral":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadHighSpeedMineral","prefabHash":1440678625,"desc":"","name":"Mining-Drill Head (High Speed Mineral)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadIce":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadIce","prefabHash":-380904592,"desc":"","name":"Mining-Drill Head (Ice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadLongTerm":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadLongTerm","prefabHash":-684020753,"desc":"","name":"Mining-Drill Head (Long Term)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadMineral":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadMineral","prefabHash":1083675581,"desc":"","name":"Mining-Drill Head (Mineral)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketScanningHead":{"prefab":{"prefabName":"ItemRocketScanningHead","prefabHash":-1198702771,"desc":"","name":"Rocket Scanner Head"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"ScanningHead","sortingClass":"Default"}},"ItemScanner":{"prefab":{"prefabName":"ItemScanner","prefabHash":1661270830,"desc":"A mysterious piece of technology, rumored to have Zrillian origins.","name":"Handheld Scanner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemScrewdriver":{"prefab":{"prefabName":"ItemScrewdriver","prefabHash":687940869,"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.","name":"Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemSecurityCamera":{"prefab":{"prefabName":"ItemSecurityCamera","prefabHash":-1981101032,"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.","name":"Security Camera"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemSensorLenses":{"prefab":{"prefabName":"ItemSensorLenses","prefabHash":-1176140051,"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.","name":"Sensor Lenses"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Glasses","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Sensor Processing Unit","typ":"SensorProcessingUnit"}]},"ItemSensorProcessingUnitCelestialScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitCelestialScanner","prefabHash":-1154200014,"desc":"","name":"Sensor Processing Unit (Celestial Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSensorProcessingUnitMesonScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitMesonScanner","prefabHash":-1730464583,"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.","name":"Sensor Processing Unit (T-Ray Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSensorProcessingUnitOreScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitOreScanner","prefabHash":-1219128491,"desc":"The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD.","name":"Sensor Processing Unit (Ore Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSiliconIngot":{"prefab":{"prefabName":"ItemSiliconIngot","prefabHash":-290196476,"desc":"","name":"Ingot (Silicon)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Silicon":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSiliconOre":{"prefab":{"prefabName":"ItemSiliconOre","prefabHash":1103972403,"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.","name":"Ore (Silicon)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Silicon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemSilverIngot":{"prefab":{"prefabName":"ItemSilverIngot","prefabHash":-929742000,"desc":"","name":"Ingot (Silver)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Silver":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSilverOre":{"prefab":{"prefabName":"ItemSilverOre","prefabHash":-916518678,"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.","name":"Ore (Silver)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Silver":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemSolderIngot":{"prefab":{"prefabName":"ItemSolderIngot","prefabHash":-82508479,"desc":"","name":"Ingot (Solder)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Solder":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSolidFuel":{"prefab":{"prefabName":"ItemSolidFuel","prefabHash":-365253871,"desc":"","name":"Solid Fuel (Hydrocarbon)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Hydrocarbon":1.0},"slotClass":"Ore","sortingClass":"Resources"}},"ItemSoundCartridgeBass":{"prefab":{"prefabName":"ItemSoundCartridgeBass","prefabHash":-1883441704,"desc":"","name":"Sound Cartridge Bass"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeDrums":{"prefab":{"prefabName":"ItemSoundCartridgeDrums","prefabHash":-1901500508,"desc":"","name":"Sound Cartridge Drums"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeLeads":{"prefab":{"prefabName":"ItemSoundCartridgeLeads","prefabHash":-1174735962,"desc":"","name":"Sound Cartridge Leads"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeSynth":{"prefab":{"prefabName":"ItemSoundCartridgeSynth","prefabHash":-1971419310,"desc":"","name":"Sound Cartridge Synth"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoyOil":{"prefab":{"prefabName":"ItemSoyOil","prefabHash":1387403148,"desc":"","name":"Soy Oil"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"Oil":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemSoybean":{"prefab":{"prefabName":"ItemSoybean","prefabHash":1924673028,"desc":" Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil","name":"Soybean"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Soy":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemSpaceCleaner":{"prefab":{"prefabName":"ItemSpaceCleaner","prefabHash":-1737666461,"desc":"There was a time when humanity really wanted to keep space clean. That time has passed.","name":"Space Cleaner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemSpaceHelmet":{"prefab":{"prefabName":"ItemSpaceHelmet","prefabHash":714830451,"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.","name":"Space Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemSpaceIce":{"prefab":{"prefabName":"ItemSpaceIce","prefabHash":675686937,"desc":"","name":"Space Ice"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Ore","sortingClass":"Ores"}},"ItemSpaceOre":{"prefab":{"prefabName":"ItemSpaceOre","prefabHash":2131916219,"desc":"Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores.","name":"Dirty Ore"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Ore","sortingClass":"Ores"}},"ItemSpacepack":{"prefab":{"prefabName":"ItemSpacepack","prefabHash":-1260618380,"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.","name":"Spacepack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemSprayCanBlack":{"prefab":{"prefabName":"ItemSprayCanBlack","prefabHash":-688107795,"desc":"Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses.","name":"Spray Paint (Black)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanBlue":{"prefab":{"prefabName":"ItemSprayCanBlue","prefabHash":-498464883,"desc":"What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'","name":"Spray Paint (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanBrown":{"prefab":{"prefabName":"ItemSprayCanBrown","prefabHash":845176977,"desc":"In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed.","name":"Spray Paint (Brown)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanGreen":{"prefab":{"prefabName":"ItemSprayCanGreen","prefabHash":-1880941852,"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.","name":"Spray Paint (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanGrey":{"prefab":{"prefabName":"ItemSprayCanGrey","prefabHash":-1645266981,"desc":"Arguably the most popular color in the universe, grey was invented so designers had something to do.","name":"Spray Paint (Grey)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanKhaki":{"prefab":{"prefabName":"ItemSprayCanKhaki","prefabHash":1918456047,"desc":"Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode.","name":"Spray Paint (Khaki)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanOrange":{"prefab":{"prefabName":"ItemSprayCanOrange","prefabHash":-158007629,"desc":"Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove.","name":"Spray Paint (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanPink":{"prefab":{"prefabName":"ItemSprayCanPink","prefabHash":1344257263,"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.","name":"Spray Paint (Pink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanPurple":{"prefab":{"prefabName":"ItemSprayCanPurple","prefabHash":30686509,"desc":"Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong.","name":"Spray Paint (Purple)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanRed":{"prefab":{"prefabName":"ItemSprayCanRed","prefabHash":1514393921,"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.","name":"Spray Paint (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanWhite":{"prefab":{"prefabName":"ItemSprayCanWhite","prefabHash":498481505,"desc":"White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff.","name":"Spray Paint (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanYellow":{"prefab":{"prefabName":"ItemSprayCanYellow","prefabHash":995468116,"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.","name":"Spray Paint (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayGun":{"prefab":{"prefabName":"ItemSprayGun","prefabHash":1289723966,"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.","name":"Spray Gun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Spray Can","typ":"Bottle"}]},"ItemSteelFrames":{"prefab":{"prefabName":"ItemSteelFrames","prefabHash":-1448105779,"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.","name":"Steel Frames"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemSteelIngot":{"prefab":{"prefabName":"ItemSteelIngot","prefabHash":-654790771,"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.","name":"Ingot (Steel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Steel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSteelSheets":{"prefab":{"prefabName":"ItemSteelSheets","prefabHash":38555961,"desc":"An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types.","name":"Steel Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemStelliteGlassSheets":{"prefab":{"prefabName":"ItemStelliteGlassSheets","prefabHash":-2038663432,"desc":"A stronger glass substitute.","name":"Stellite Glass Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemStelliteIngot":{"prefab":{"prefabName":"ItemStelliteIngot","prefabHash":-1897868623,"desc":"","name":"Ingot (Stellite)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Stellite":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSugar":{"prefab":{"prefabName":"ItemSugar","prefabHash":2111910840,"desc":"","name":"Sugar"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Sugar":10.0},"slotClass":"None","sortingClass":"Resources"}},"ItemSugarCane":{"prefab":{"prefabName":"ItemSugarCane","prefabHash":-1335056202,"desc":"","name":"Sugarcane"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Sugar":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemSuitModCryogenicUpgrade":{"prefab":{"prefabName":"ItemSuitModCryogenicUpgrade","prefabHash":-1274308304,"desc":"Enables suits with basic cooling functionality to work with cryogenic liquid.","name":"Cryogenic Suit Upgrade"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SuitMod","sortingClass":"Default"}},"ItemTablet":{"prefab":{"prefabName":"ItemTablet","prefabHash":-229808600,"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.","name":"Handheld Tablet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"}]},"ItemTerrainManipulator":{"prefab":{"prefabName":"ItemTerrainManipulator","prefabHash":111280987,"desc":"0.Mode0\n1.Mode1","name":"Terrain Manipulator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Dirt Canister","typ":"Ore"}]},"ItemTomato":{"prefab":{"prefabName":"ItemTomato","prefabHash":-998592080,"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.","name":"Tomato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Tomato":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemTomatoSoup":{"prefab":{"prefabName":"ItemTomatoSoup","prefabHash":688734890,"desc":"Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine.","name":"Tomato Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemToolBelt":{"prefab":{"prefabName":"ItemToolBelt","prefabHash":-355127880,"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.","name":"Tool Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemTropicalPlant":{"prefab":{"prefabName":"ItemTropicalPlant","prefabHash":-800947386,"desc":"An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants.","name":"Tropical Lily"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemUraniumOre":{"prefab":{"prefabName":"ItemUraniumOre","prefabHash":-1516581844,"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.","name":"Ore (Uranium)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Uranium":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemVolatiles":{"prefab":{"prefabName":"ItemVolatiles","prefabHash":1253102035,"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","name":"Ice (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemWallCooler":{"prefab":{"prefabName":"ItemWallCooler","prefabHash":-1567752627,"desc":"This kit creates a Wall Cooler.","name":"Kit (Wall Cooler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWallHeater":{"prefab":{"prefabName":"ItemWallHeater","prefabHash":1880134612,"desc":"This kit creates a Kit (Wall Heater).","name":"Kit (Wall Heater)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWallLight":{"prefab":{"prefabName":"ItemWallLight","prefabHash":1108423476,"desc":"This kit creates any one of ten Kit (Lights) variants.","name":"Kit (Lights)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemWaspaloyIngot":{"prefab":{"prefabName":"ItemWaspaloyIngot","prefabHash":156348098,"desc":"","name":"Ingot (Waspaloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Waspaloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemWaterBottle":{"prefab":{"prefabName":"ItemWaterBottle","prefabHash":107741229,"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.","name":"Water Bottle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"LiquidBottle","sortingClass":"Default"}},"ItemWaterPipeDigitalValve":{"prefab":{"prefabName":"ItemWaterPipeDigitalValve","prefabHash":309693520,"desc":"","name":"Kit (Liquid Digital Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWaterPipeMeter":{"prefab":{"prefabName":"ItemWaterPipeMeter","prefabHash":-90898877,"desc":"","name":"Kit (Liquid Pipe Meter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWaterWallCooler":{"prefab":{"prefabName":"ItemWaterWallCooler","prefabHash":-1721846327,"desc":"","name":"Kit (Liquid Wall Cooler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWearLamp":{"prefab":{"prefabName":"ItemWearLamp","prefabHash":-598730959,"desc":"","name":"Headlamp"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemWeldingTorch":{"prefab":{"prefabName":"ItemWeldingTorch","prefabHash":-2066892079,"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.","name":"Welding Torch"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemWheat":{"prefab":{"prefabName":"ItemWheat","prefabHash":-1057658015,"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.","name":"Wheat"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Carbon":1.0},"slotClass":"Plant","sortingClass":"Default"}},"ItemWireCutters":{"prefab":{"prefabName":"ItemWireCutters","prefabHash":1535854074,"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.","name":"Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemWirelessBatteryCellExtraLarge":{"prefab":{"prefabName":"ItemWirelessBatteryCellExtraLarge","prefabHash":-504717121,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Wireless Battery Cell Extra Large"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemWreckageAirConditioner1":{"prefab":{"prefabName":"ItemWreckageAirConditioner1","prefabHash":-1826023284,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageAirConditioner2":{"prefab":{"prefabName":"ItemWreckageAirConditioner2","prefabHash":169888054,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageHydroponicsTray1":{"prefab":{"prefabName":"ItemWreckageHydroponicsTray1","prefabHash":-310178617,"desc":"","name":"Wreckage Hydroponics Tray"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageLargeExtendableRadiator01":{"prefab":{"prefabName":"ItemWreckageLargeExtendableRadiator01","prefabHash":-997763,"desc":"","name":"Wreckage Large Extendable Radiator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureRTG1":{"prefab":{"prefabName":"ItemWreckageStructureRTG1","prefabHash":391453348,"desc":"","name":"Wreckage Structure RTG"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation001":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation001","prefabHash":-834664349,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation002":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation002","prefabHash":1464424921,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation003":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation003","prefabHash":542009679,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation004":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation004","prefabHash":-1104478996,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation005":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation005","prefabHash":-919745414,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation006":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation006","prefabHash":1344576960,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation007":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation007","prefabHash":656649558,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation008":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation008","prefabHash":-1214467897,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator1":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator1","prefabHash":-1662394403,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator2":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator2","prefabHash":98602599,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator3":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator3","prefabHash":1927790321,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageWallCooler1":{"prefab":{"prefabName":"ItemWreckageWallCooler1","prefabHash":-1682930158,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageWallCooler2":{"prefab":{"prefabName":"ItemWreckageWallCooler2","prefabHash":45733800,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWrench":{"prefab":{"prefabName":"ItemWrench","prefabHash":-1886261558,"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","name":"Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"KitSDBSilo":{"prefab":{"prefabName":"KitSDBSilo","prefabHash":1932952652,"desc":"This kit creates a SDB Silo.","name":"Kit (SDB Silo)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"KitStructureCombustionCentrifuge":{"prefab":{"prefabName":"KitStructureCombustionCentrifuge","prefabHash":231903234,"desc":"","name":"Kit (Combustion Centrifuge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"KitchenTableShort":{"prefab":{"prefabName":"KitchenTableShort","prefabHash":-1427415566,"desc":"","name":"Kitchen Table (Short)"},"structure":{"smallGrid":true}},"KitchenTableSimpleShort":{"prefab":{"prefabName":"KitchenTableSimpleShort","prefabHash":-78099334,"desc":"","name":"Kitchen Table (Simple Short)"},"structure":{"smallGrid":true}},"KitchenTableSimpleTall":{"prefab":{"prefabName":"KitchenTableSimpleTall","prefabHash":-1068629349,"desc":"","name":"Kitchen Table (Simple Tall)"},"structure":{"smallGrid":true}},"KitchenTableTall":{"prefab":{"prefabName":"KitchenTableTall","prefabHash":-1386237782,"desc":"","name":"Kitchen Table (Tall)"},"structure":{"smallGrid":true}},"Lander":{"prefab":{"prefabName":"Lander","prefabHash":1605130615,"desc":"","name":"Lander"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"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"}]},"Landingpad_2x2CenterPiece01":{"prefab":{"prefabName":"Landingpad_2x2CenterPiece01","prefabHash":-1295222317,"desc":"Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors","name":"Landingpad 2x2 Center Piece"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Landingpad_BlankPiece":{"prefab":{"prefabName":"Landingpad_BlankPiece","prefabHash":912453390,"desc":"","name":"Landingpad"},"structure":{"smallGrid":true}},"Landingpad_CenterPiece01":{"prefab":{"prefabName":"Landingpad_CenterPiece01","prefabHash":1070143159,"desc":"The target point where the trader shuttle will land. Requires a clear view of the sky.","name":"Landingpad Center"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"modes":{"0":"None","1":"NoContact","2":"Moving","3":"Holding","4":"Landed"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Landingpad_CrossPiece":{"prefab":{"prefabName":"Landingpad_CrossPiece","prefabHash":1101296153,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Cross"},"structure":{"smallGrid":true}},"Landingpad_DataConnectionPiece":{"prefab":{"prefabName":"Landingpad_DataConnectionPiece","prefabHash":-2066405918,"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.","name":"Landingpad Data And Power"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Combustion":"Read","ContactTypeId":"Read","Error":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_DiagonalPiece01":{"prefab":{"prefabName":"Landingpad_DiagonalPiece01","prefabHash":977899131,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Diagonal"},"structure":{"smallGrid":true}},"Landingpad_GasConnectorInwardPiece":{"prefab":{"prefabName":"Landingpad_GasConnectorInwardPiece","prefabHash":817945707,"desc":"","name":"Landingpad Gas Input"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_GasConnectorOutwardPiece":{"prefab":{"prefabName":"Landingpad_GasConnectorOutwardPiece","prefabHash":-1100218307,"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.","name":"Landingpad Gas Output"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_GasCylinderTankPiece":{"prefab":{"prefabName":"Landingpad_GasCylinderTankPiece","prefabHash":170818567,"desc":"Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders.","name":"Landingpad Gas Storage"},"structure":{"smallGrid":true}},"Landingpad_LiquidConnectorInwardPiece":{"prefab":{"prefabName":"Landingpad_LiquidConnectorInwardPiece","prefabHash":-1216167727,"desc":"","name":"Landingpad Liquid Input"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_LiquidConnectorOutwardPiece":{"prefab":{"prefabName":"Landingpad_LiquidConnectorOutwardPiece","prefabHash":-1788929869,"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.","name":"Landingpad Liquid Output"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_StraightPiece01":{"prefab":{"prefabName":"Landingpad_StraightPiece01","prefabHash":-976273247,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Straight"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceCorner":{"prefab":{"prefabName":"Landingpad_TaxiPieceCorner","prefabHash":-1872345847,"desc":"","name":"Landingpad Taxi Corner"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceHold":{"prefab":{"prefabName":"Landingpad_TaxiPieceHold","prefabHash":146051619,"desc":"","name":"Landingpad Taxi Hold"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceStraight":{"prefab":{"prefabName":"Landingpad_TaxiPieceStraight","prefabHash":-1477941080,"desc":"","name":"Landingpad Taxi Straight"},"structure":{"smallGrid":true}},"Landingpad_ThreshholdPiece":{"prefab":{"prefabName":"Landingpad_ThreshholdPiece","prefabHash":-1514298582,"desc":"","name":"Landingpad Threshhold"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"LogicStepSequencer8":{"prefab":{"prefabName":"LogicStepSequencer8","prefabHash":1531272458,"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.","name":"Logic Step Sequencer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","Bpm":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Sound Cartridge","typ":"SoundCartridge"}],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Meteorite":{"prefab":{"prefabName":"Meteorite","prefabHash":-99064335,"desc":"","name":"Meteorite"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"MonsterEgg":{"prefab":{"prefabName":"MonsterEgg","prefabHash":-1667675295,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"MotherboardComms":{"prefab":{"prefabName":"MotherboardComms","prefabHash":-337075633,"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.","name":"Communications Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardLogic":{"prefab":{"prefabName":"MotherboardLogic","prefabHash":502555944,"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.","name":"Logic Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardMissionControl":{"prefab":{"prefabName":"MotherboardMissionControl","prefabHash":-127121474,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardProgrammableChip":{"prefab":{"prefabName":"MotherboardProgrammableChip","prefabHash":-161107071,"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.","name":"IC Editor Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardRockets":{"prefab":{"prefabName":"MotherboardRockets","prefabHash":-806986392,"desc":"","name":"Rocket Control Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardSorter":{"prefab":{"prefabName":"MotherboardSorter","prefabHash":-1908268220,"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.","name":"Sorter Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MothershipCore":{"prefab":{"prefabName":"MothershipCore","prefabHash":-1930442922,"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.","name":"Mothership Core"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"NpcChick":{"prefab":{"prefabName":"NpcChick","prefabHash":155856647,"desc":"","name":"Chick"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"NpcChicken":{"prefab":{"prefabName":"NpcChicken","prefabHash":399074198,"desc":"","name":"Chicken"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"PassiveSpeaker":{"prefab":{"prefabName":"PassiveSpeaker","prefabHash":248893646,"desc":"","name":"Passive Speaker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"ReadWrite","PrefabHash":"ReadWrite","ReferenceId":"ReadWrite","SoundAlert":"ReadWrite","Volume":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"PipeBenderMod":{"prefab":{"prefabName":"PipeBenderMod","prefabHash":443947415,"desc":"Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Pipe Bender Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"PortableComposter":{"prefab":{"prefabName":"PortableComposter","prefabHash":-1958705204,"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","name":"Portable Composter"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"Battery"},{"name":"Liquid Canister","typ":"LiquidCanister"}]},"PortableSolarPanel":{"prefab":{"prefabName":"PortableSolarPanel","prefabHash":2043318949,"desc":"","name":"Portable Solar Panel"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Open":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"RailingElegant01":{"prefab":{"prefabName":"RailingElegant01","prefabHash":399661231,"desc":"","name":"Railing Elegant (Type 1)"},"structure":{"smallGrid":false}},"RailingElegant02":{"prefab":{"prefabName":"RailingElegant02","prefabHash":-1898247915,"desc":"","name":"Railing Elegant (Type 2)"},"structure":{"smallGrid":false}},"RailingIndustrial02":{"prefab":{"prefabName":"RailingIndustrial02","prefabHash":-2072792175,"desc":"","name":"Railing Industrial (Type 2)"},"structure":{"smallGrid":false}},"ReagentColorBlue":{"prefab":{"prefabName":"ReagentColorBlue","prefabHash":980054869,"desc":"","name":"Color Dye (Blue)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorBlue":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorGreen":{"prefab":{"prefabName":"ReagentColorGreen","prefabHash":120807542,"desc":"","name":"Color Dye (Green)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorGreen":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorOrange":{"prefab":{"prefabName":"ReagentColorOrange","prefabHash":-400696159,"desc":"","name":"Color Dye (Orange)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorOrange":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorRed":{"prefab":{"prefabName":"ReagentColorRed","prefabHash":1998377961,"desc":"","name":"Color Dye (Red)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorRed":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorYellow":{"prefab":{"prefabName":"ReagentColorYellow","prefabHash":635208006,"desc":"","name":"Color Dye (Yellow)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorYellow":10.0},"slotClass":"None","sortingClass":"Resources"}},"RespawnPoint":{"prefab":{"prefabName":"RespawnPoint","prefabHash":-788672929,"desc":"Place a respawn point to set a player entry point to your base when loading in, or returning from the dead.","name":"Respawn Point"},"structure":{"smallGrid":true}},"RespawnPointWallMounted":{"prefab":{"prefabName":"RespawnPointWallMounted","prefabHash":-491247370,"desc":"","name":"Respawn Point (Mounted)"},"structure":{"smallGrid":true}},"Robot":{"prefab":{"prefabName":"Robot","prefabHash":434786784,"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","name":"AIMeE Bot"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"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"}]},"RoverCargo":{"prefab":{"prefabName":"RoverCargo","prefabHash":350726273,"desc":"Connects to Logic Transmitter","name":"Rover (Cargo)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"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":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI":{"prefab":{"prefabName":"Rover_MkI","prefabHash":-2049946335,"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","name":"Rover MkI"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"},"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"},"10":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"slots":[{"name":"Entity","typ":"Entity"},{"name":"Entity","typ":"Entity"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI_build_states":{"prefab":{"prefabName":"Rover_MkI_build_states","prefabHash":861674123,"desc":"","name":"Rover MKI"},"structure":{"smallGrid":false}},"SMGMagazine":{"prefab":{"prefabName":"SMGMagazine","prefabHash":-256607540,"desc":"","name":"SMG Magazine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Magazine","sortingClass":"Default"}},"SeedBag_Cocoa":{"prefab":{"prefabName":"SeedBag_Cocoa","prefabHash":1139887531,"desc":"","name":"Cocoa Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Corn":{"prefab":{"prefabName":"SeedBag_Corn","prefabHash":-1290755415,"desc":"Grow a Corn.","name":"Corn Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Fern":{"prefab":{"prefabName":"SeedBag_Fern","prefabHash":-1990600883,"desc":"Grow a Fern.","name":"Fern Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Mushroom":{"prefab":{"prefabName":"SeedBag_Mushroom","prefabHash":311593418,"desc":"Grow a Mushroom.","name":"Mushroom Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Potato":{"prefab":{"prefabName":"SeedBag_Potato","prefabHash":1005571172,"desc":"Grow a Potato.","name":"Potato Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Pumpkin":{"prefab":{"prefabName":"SeedBag_Pumpkin","prefabHash":1423199840,"desc":"Grow a Pumpkin.","name":"Pumpkin Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Rice":{"prefab":{"prefabName":"SeedBag_Rice","prefabHash":-1691151239,"desc":"Grow some Rice.","name":"Rice Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Soybean":{"prefab":{"prefabName":"SeedBag_Soybean","prefabHash":1783004244,"desc":"Grow some Soybean.","name":"Soybean Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_SugarCane":{"prefab":{"prefabName":"SeedBag_SugarCane","prefabHash":-1884103228,"desc":"","name":"Sugarcane Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Switchgrass":{"prefab":{"prefabName":"SeedBag_Switchgrass","prefabHash":488360169,"desc":"","name":"Switchgrass Seed"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Tomato":{"prefab":{"prefabName":"SeedBag_Tomato","prefabHash":-1922066841,"desc":"Grow a Tomato.","name":"Tomato Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Wheet":{"prefab":{"prefabName":"SeedBag_Wheet","prefabHash":-654756733,"desc":"Grow some Wheat.","name":"Wheat Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SpaceShuttle":{"prefab":{"prefabName":"SpaceShuttle","prefabHash":-1991297271,"desc":"An antiquated Sinotai transport craft, long since decommissioned.","name":"Space Shuttle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Captain's Seat","typ":"Entity"},{"name":"Passenger Seat Left","typ":"Entity"},{"name":"Passenger Seat Right","typ":"Entity"}]},"StopWatch":{"prefab":{"prefabName":"StopWatch","prefabHash":-1527229051,"desc":"","name":"Stop Watch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Time":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureAccessBridge":{"prefab":{"prefabName":"StructureAccessBridge","prefabHash":1298920475,"desc":"Extendable bridge that spans three grids","name":"Access Bridge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureActiveVent":{"prefab":{"prefabName":"StructureActiveVent","prefabHash":-1129453144,"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 ...","name":"Active Vent"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAdvancedComposter":{"prefab":{"prefabName":"StructureAdvancedComposter","prefabHash":446212963,"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","name":"Advanced Composter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAdvancedFurnace":{"prefab":{"prefabName":"StructureAdvancedFurnace","prefabHash":545937711,"desc":"The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure.","name":"Advanced Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Combustion":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"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","Reagents":"Read","RecipeHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingInput":"ReadWrite","SettingOutput":"ReadWrite","Temperature":"Read","TotalMoles":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureAdvancedPackagingMachine":{"prefab":{"prefabName":"StructureAdvancedPackagingMachine","prefabHash":-463037670,"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.","name":"Advanced Packaging Machine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureAirConditioner":{"prefab":{"prefabName":"StructureAirConditioner","prefabHash":-2087593337,"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.","name":"Air Conditioner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"CombustionInput":"Read","CombustionOutput":"Read","CombustionOutput2":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidCarbonDioxideOutput2":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrogenOutput2":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidNitrousOxideOutput2":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidOxygenOutput2":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidPollutantOutput2":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"Read","RatioLiquidVolatilesOutput2":"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","RatioSteamInput":"Read","RatioSteamOutput":"Read","RatioSteamOutput2":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Waste"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAirlock":{"prefab":{"prefabName":"StructureAirlock","prefabHash":-2105052344,"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.","name":"Airlock"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAirlockGate":{"prefab":{"prefabName":"StructureAirlockGate","prefabHash":1736080881,"desc":"1 x 1 modular door piece for building hangar doors.","name":"Small Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAngledBench":{"prefab":{"prefabName":"StructureAngledBench","prefabHash":1811979158,"desc":"","name":"Bench (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureArcFurnace":{"prefab":{"prefabName":"StructureArcFurnace","prefabHash":-247344692,"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.","name":"Arc Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","Idle":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"},{"name":"Export","typ":"Ingot"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureAreaPowerControl":{"prefab":{"prefabName":"StructureAreaPowerControl","prefabHash":1999523701,"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.","name":"Area Power Control"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Charge":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAreaPowerControlReversed":{"prefab":{"prefabName":"StructureAreaPowerControlReversed","prefabHash":-1032513487,"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.","name":"Area Power Control"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Charge":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAutoMinerSmall":{"prefab":{"prefabName":"StructureAutoMinerSmall","prefabHash":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":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAutolathe":{"prefab":{"prefabName":"StructureAutolathe","prefabHash":336213101,"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 ","name":"Autolathe"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureAutomatedOven":{"prefab":{"prefabName":"StructureAutomatedOven","prefabHash":-1672404896,"desc":"","name":"Automated Oven"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureBackLiquidPressureRegulator":{"prefab":{"prefabName":"StructureBackLiquidPressureRegulator","prefabHash":2099900163,"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.","name":"Liquid Back Volume Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBackPressureRegulator":{"prefab":{"prefabName":"StructureBackPressureRegulator","prefabHash":-1149857558,"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.","name":"Back Pressure Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBasketHoop":{"prefab":{"prefabName":"StructureBasketHoop","prefabHash":-1613497288,"desc":"","name":"Basket Hoop"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBattery":{"prefab":{"prefabName":"StructureBattery","prefabHash":-400115994,"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).","name":"Station Battery"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryCharger":{"prefab":{"prefabName":"StructureBatteryCharger","prefabHash":1945930022,"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.","name":"Battery Cell Charger"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryChargerSmall":{"prefab":{"prefabName":"StructureBatteryChargerSmall","prefabHash":-761772413,"desc":"","name":"Battery Charger Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryLarge":{"prefab":{"prefabName":"StructureBatteryLarge","prefabHash":-1388288459,"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). ","name":"Station Battery (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryMedium":{"prefab":{"prefabName":"StructureBatteryMedium","prefabHash":-1125305264,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Maximum":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatterySmall":{"prefab":{"prefabName":"StructureBatterySmall","prefabHash":-2123455080,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Auxiliary Rocket Battery "},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Maximum":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBeacon":{"prefab":{"prefabName":"StructureBeacon","prefabHash":-188177083,"desc":"","name":"Beacon"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench":{"prefab":{"prefabName":"StructureBench","prefabHash":-2042448192,"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.","name":"Powered Bench"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench1":{"prefab":{"prefabName":"StructureBench1","prefabHash":406745009,"desc":"","name":"Bench (Counter Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench2":{"prefab":{"prefabName":"StructureBench2","prefabHash":-2127086069,"desc":"","name":"Bench (High Tech Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench3":{"prefab":{"prefabName":"StructureBench3","prefabHash":-164622691,"desc":"","name":"Bench (Frame Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench4":{"prefab":{"prefabName":"StructureBench4","prefabHash":1750375230,"desc":"","name":"Bench (Workbench Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBlastDoor":{"prefab":{"prefabName":"StructureBlastDoor","prefabHash":337416191,"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.","name":"Blast Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureBlockBed":{"prefab":{"prefabName":"StructureBlockBed","prefabHash":697908419,"desc":"Description coming.","name":"Block Bed"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBlocker":{"prefab":{"prefabName":"StructureBlocker","prefabHash":378084505,"desc":"","name":"Blocker"},"structure":{"smallGrid":false}},"StructureCableAnalysizer":{"prefab":{"prefabName":"StructureCableAnalysizer","prefabHash":1036015121,"desc":"","name":"Cable Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PowerActual":"Read","PowerPotential":"Read","PowerRequired":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableCorner":{"prefab":{"prefabName":"StructureCableCorner","prefabHash":-889269388,"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).","name":"Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3":{"prefab":{"prefabName":"StructureCableCorner3","prefabHash":980469101,"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).","name":"Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3Burnt":{"prefab":{"prefabName":"StructureCableCorner3Burnt","prefabHash":318437449,"desc":"","name":"Burnt Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3HBurnt":{"prefab":{"prefabName":"StructureCableCorner3HBurnt","prefabHash":2393826,"desc":"","name":""},"structure":{"smallGrid":true}},"StructureCableCorner4":{"prefab":{"prefabName":"StructureCableCorner4","prefabHash":-1542172466,"desc":"","name":"Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner4Burnt":{"prefab":{"prefabName":"StructureCableCorner4Burnt","prefabHash":268421361,"desc":"","name":"Burnt Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner4HBurnt":{"prefab":{"prefabName":"StructureCableCorner4HBurnt","prefabHash":-981223316,"desc":"","name":"Burnt Heavy Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerBurnt":{"prefab":{"prefabName":"StructureCableCornerBurnt","prefabHash":-177220914,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH":{"prefab":{"prefabName":"StructureCableCornerH","prefabHash":-39359015,"desc":"","name":"Heavy Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH3":{"prefab":{"prefabName":"StructureCableCornerH3","prefabHash":-1843379322,"desc":"","name":"Heavy Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH4":{"prefab":{"prefabName":"StructureCableCornerH4","prefabHash":205837861,"desc":"","name":"Heavy Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerHBurnt":{"prefab":{"prefabName":"StructureCableCornerHBurnt","prefabHash":1931412811,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableFuse100k":{"prefab":{"prefabName":"StructureCableFuse100k","prefabHash":281380789,"desc":"","name":"Fuse (100kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse1k":{"prefab":{"prefabName":"StructureCableFuse1k","prefabHash":-1103727120,"desc":"","name":"Fuse (1kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse50k":{"prefab":{"prefabName":"StructureCableFuse50k","prefabHash":-349716617,"desc":"","name":"Fuse (50kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse5k":{"prefab":{"prefabName":"StructureCableFuse5k","prefabHash":-631590668,"desc":"","name":"Fuse (5kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableJunction":{"prefab":{"prefabName":"StructureCableJunction","prefabHash":-175342021,"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).","name":"Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4":{"prefab":{"prefabName":"StructureCableJunction4","prefabHash":1112047202,"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).","name":"Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4Burnt":{"prefab":{"prefabName":"StructureCableJunction4Burnt","prefabHash":-1756896811,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4HBurnt":{"prefab":{"prefabName":"StructureCableJunction4HBurnt","prefabHash":-115809132,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction5":{"prefab":{"prefabName":"StructureCableJunction5","prefabHash":894390004,"desc":"","name":"Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction5Burnt":{"prefab":{"prefabName":"StructureCableJunction5Burnt","prefabHash":1545286256,"desc":"","name":"Burnt Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6":{"prefab":{"prefabName":"StructureCableJunction6","prefabHash":-1404690610,"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).","name":"Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6Burnt":{"prefab":{"prefabName":"StructureCableJunction6Burnt","prefabHash":-628145954,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6HBurnt":{"prefab":{"prefabName":"StructureCableJunction6HBurnt","prefabHash":1854404029,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionBurnt":{"prefab":{"prefabName":"StructureCableJunctionBurnt","prefabHash":-1620686196,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH":{"prefab":{"prefabName":"StructureCableJunctionH","prefabHash":469451637,"desc":"","name":"Heavy Cable (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH4":{"prefab":{"prefabName":"StructureCableJunctionH4","prefabHash":-742234680,"desc":"","name":"Heavy Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH5":{"prefab":{"prefabName":"StructureCableJunctionH5","prefabHash":-1530571426,"desc":"","name":"Heavy Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH5Burnt":{"prefab":{"prefabName":"StructureCableJunctionH5Burnt","prefabHash":1701593300,"desc":"","name":"Burnt Heavy Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH6":{"prefab":{"prefabName":"StructureCableJunctionH6","prefabHash":1036780772,"desc":"","name":"Heavy Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionHBurnt":{"prefab":{"prefabName":"StructureCableJunctionHBurnt","prefabHash":-341365649,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableStraight":{"prefab":{"prefabName":"StructureCableStraight","prefabHash":605357050,"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).","name":"Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightBurnt":{"prefab":{"prefabName":"StructureCableStraightBurnt","prefabHash":-1196981113,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightH":{"prefab":{"prefabName":"StructureCableStraightH","prefabHash":-146200530,"desc":"","name":"Heavy Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightHBurnt":{"prefab":{"prefabName":"StructureCableStraightHBurnt","prefabHash":2085762089,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCamera":{"prefab":{"prefabName":"StructureCamera","prefabHash":-342072665,"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.","name":"Camera"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureCapsuleTankGas":{"prefab":{"prefabName":"StructureCapsuleTankGas","prefabHash":-1385712131,"desc":"","name":"Gas Capsule Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCapsuleTankLiquid":{"prefab":{"prefabName":"StructureCapsuleTankLiquid","prefabHash":1415396263,"desc":"","name":"Liquid Capsule Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCargoStorageMedium":{"prefab":{"prefabName":"StructureCargoStorageMedium","prefabHash":1151864003,"desc":"","name":"Cargo Storage (Medium)"},"structure":{"smallGrid":true},"logic":{"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":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCargoStorageSmall":{"prefab":{"prefabName":"StructureCargoStorageSmall","prefabHash":-1493672123,"desc":"","name":"Cargo Storage (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"},"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"},"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"},"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"},"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCentrifuge":{"prefab":{"prefabName":"StructureCentrifuge","prefabHash":690945935,"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.","name":"Centrifuge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureChair":{"prefab":{"prefabName":"StructureChair","prefabHash":1167659360,"desc":"One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs.","name":"Chair"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBacklessDouble":{"prefab":{"prefabName":"StructureChairBacklessDouble","prefabHash":1944858936,"desc":"","name":"Chair (Backless Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBacklessSingle":{"prefab":{"prefabName":"StructureChairBacklessSingle","prefabHash":1672275150,"desc":"","name":"Chair (Backless Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBoothCornerLeft":{"prefab":{"prefabName":"StructureChairBoothCornerLeft","prefabHash":-367720198,"desc":"","name":"Chair (Booth Corner Left)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBoothMiddle":{"prefab":{"prefabName":"StructureChairBoothMiddle","prefabHash":1640720378,"desc":"","name":"Chair (Booth Middle)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairRectangleDouble":{"prefab":{"prefabName":"StructureChairRectangleDouble","prefabHash":-1152812099,"desc":"","name":"Chair (Rectangle Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairRectangleSingle":{"prefab":{"prefabName":"StructureChairRectangleSingle","prefabHash":-1425428917,"desc":"","name":"Chair (Rectangle Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairThickDouble":{"prefab":{"prefabName":"StructureChairThickDouble","prefabHash":-1245724402,"desc":"","name":"Chair (Thick Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairThickSingle":{"prefab":{"prefabName":"StructureChairThickSingle","prefabHash":-1510009608,"desc":"","name":"Chair (Thick Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteBin":{"prefab":{"prefabName":"StructureChuteBin","prefabHash":-850484480,"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.","name":"Chute Bin"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Input","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteCorner":{"prefab":{"prefabName":"StructureChuteCorner","prefabHash":1360330136,"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.","name":"Chute (Corner)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteDigitalFlipFlopSplitterLeft":{"prefab":{"prefabName":"StructureChuteDigitalFlipFlopSplitterLeft","prefabHash":-810874728,"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.","name":"Chute Digital Flip Flop Splitter Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingOutput":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Output2"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureChuteDigitalFlipFlopSplitterRight":{"prefab":{"prefabName":"StructureChuteDigitalFlipFlopSplitterRight","prefabHash":163728359,"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.","name":"Chute Digital Flip Flop Splitter Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingOutput":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Output2"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureChuteDigitalValveLeft":{"prefab":{"prefabName":"StructureChuteDigitalValveLeft","prefabHash":648608238,"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.","name":"Chute Digital Valve Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteDigitalValveRight":{"prefab":{"prefabName":"StructureChuteDigitalValveRight","prefabHash":-1337091041,"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.","name":"Chute Digital Valve Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteFlipFlopSplitter":{"prefab":{"prefabName":"StructureChuteFlipFlopSplitter","prefabHash":-1446854725,"desc":"A chute that toggles between two outputs","name":"Chute Flip Flop Splitter"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteInlet":{"prefab":{"prefabName":"StructureChuteInlet","prefabHash":-1469588766,"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.","name":"Chute Inlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteJunction":{"prefab":{"prefabName":"StructureChuteJunction","prefabHash":-611232514,"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.","name":"Chute (Junction)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteOutlet":{"prefab":{"prefabName":"StructureChuteOutlet","prefabHash":-1022714809,"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.","name":"Chute Outlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteOverflow":{"prefab":{"prefabName":"StructureChuteOverflow","prefabHash":225377225,"desc":"The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied.","name":"Chute Overflow"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteStraight":{"prefab":{"prefabName":"StructureChuteStraight","prefabHash":168307007,"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.","name":"Chute (Straight)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteUmbilicalFemale":{"prefab":{"prefabName":"StructureChuteUmbilicalFemale","prefabHash":-1918892177,"desc":"","name":"Umbilical Socket (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureChuteUmbilicalFemaleSide","prefabHash":-659093969,"desc":"","name":"Umbilical Socket Angle (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteUmbilicalMale":{"prefab":{"prefabName":"StructureChuteUmbilicalMale","prefabHash":-958884053,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteValve":{"prefab":{"prefabName":"StructureChuteValve","prefabHash":434875271,"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.","name":"Chute Valve"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteWindow":{"prefab":{"prefabName":"StructureChuteWindow","prefabHash":-607241919,"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.","name":"Chute (Window)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureCircuitHousing":{"prefab":{"prefabName":"StructureCircuitHousing","prefabHash":-128473777,"desc":"","name":"IC Housing"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","LineNumber":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","LineNumber":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"devicePinsLength":6,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"StructureCombustionCentrifuge":{"prefab":{"prefabName":"StructureCombustionCentrifuge","prefabHash":1238905683,"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 ","name":"Combustion Centrifuge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"ClearMemory":"Write","Combustion":"Read","CombustionInput":"Read","CombustionLimiter":"ReadWrite","CombustionOutput":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Pressure":"Read","PressureInput":"Read","PressureOutput":"Read","RatioCarbonDioxide":"Read","RatioCarbonDioxideInput":"Read","RatioCarbonDioxideOutput":"Read","RatioHydrogen":"Read","RatioLiquidCarbonDioxide":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidHydrogen":"Read","RatioLiquidNitrogen":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"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","RatioSteamInput":"Read","RatioSteamOutput":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureCompositeCladdingAngled":{"prefab":{"prefabName":"StructureCompositeCladdingAngled","prefabHash":-1513030150,"desc":"","name":"Composite Cladding (Angled)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCorner":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCorner","prefabHash":-69685069,"desc":"","name":"Composite Cladding (Angled Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInner":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInner","prefabHash":-1841871763,"desc":"","name":"Composite Cladding (Angled Corner Inner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLong","prefabHash":-1417912632,"desc":"","name":"Composite Cladding (Angled Corner Inner Long)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLongL":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLongL","prefabHash":947705066,"desc":"","name":"Composite Cladding (Angled Corner Inner Long L)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLongR":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLongR","prefabHash":-1032590967,"desc":"","name":"Composite Cladding (Angled Corner Inner Long R)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerLong","prefabHash":850558385,"desc":"","name":"Composite Cladding (Long Angled Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerLongR":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerLongR","prefabHash":-348918222,"desc":"","name":"Composite Cladding (Long Angled Mirrored Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledLong","prefabHash":-387546514,"desc":"","name":"Composite Cladding (Long Angled)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingCylindrical":{"prefab":{"prefabName":"StructureCompositeCladdingCylindrical","prefabHash":212919006,"desc":"","name":"Composite Cladding (Cylindrical)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingCylindricalPanel":{"prefab":{"prefabName":"StructureCompositeCladdingCylindricalPanel","prefabHash":1077151132,"desc":"","name":"Composite Cladding (Cylindrical Panel)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingPanel":{"prefab":{"prefabName":"StructureCompositeCladdingPanel","prefabHash":1997436771,"desc":"","name":"Composite Cladding (Panel)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRounded":{"prefab":{"prefabName":"StructureCompositeCladdingRounded","prefabHash":-259357734,"desc":"","name":"Composite Cladding (Rounded)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRoundedCorner":{"prefab":{"prefabName":"StructureCompositeCladdingRoundedCorner","prefabHash":1951525046,"desc":"","name":"Composite Cladding (Rounded Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRoundedCornerInner":{"prefab":{"prefabName":"StructureCompositeCladdingRoundedCornerInner","prefabHash":110184667,"desc":"","name":"Composite Cladding (Rounded Corner Inner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSpherical":{"prefab":{"prefabName":"StructureCompositeCladdingSpherical","prefabHash":139107321,"desc":"","name":"Composite Cladding (Spherical)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSphericalCap":{"prefab":{"prefabName":"StructureCompositeCladdingSphericalCap","prefabHash":534213209,"desc":"","name":"Composite Cladding (Spherical Cap)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSphericalCorner":{"prefab":{"prefabName":"StructureCompositeCladdingSphericalCorner","prefabHash":1751355139,"desc":"","name":"Composite Cladding (Spherical Corner)"},"structure":{"smallGrid":false}},"StructureCompositeDoor":{"prefab":{"prefabName":"StructureCompositeDoor","prefabHash":-793837322,"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.","name":"Composite Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCompositeFloorGrating":{"prefab":{"prefabName":"StructureCompositeFloorGrating","prefabHash":324868581,"desc":"While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings.","name":"Composite Floor Grating"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating2":{"prefab":{"prefabName":"StructureCompositeFloorGrating2","prefabHash":-895027741,"desc":"","name":"Composite Floor Grating (Type 2)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating3":{"prefab":{"prefabName":"StructureCompositeFloorGrating3","prefabHash":-1113471627,"desc":"","name":"Composite Floor Grating (Type 3)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating4":{"prefab":{"prefabName":"StructureCompositeFloorGrating4","prefabHash":600133846,"desc":"","name":"Composite Floor Grating (Type 4)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGratingOpen":{"prefab":{"prefabName":"StructureCompositeFloorGratingOpen","prefabHash":2109695912,"desc":"","name":"Composite Floor Grating Open"},"structure":{"smallGrid":false}},"StructureCompositeFloorGratingOpenRotated":{"prefab":{"prefabName":"StructureCompositeFloorGratingOpenRotated","prefabHash":882307910,"desc":"","name":"Composite Floor Grating Open Rotated"},"structure":{"smallGrid":false}},"StructureCompositeWall":{"prefab":{"prefabName":"StructureCompositeWall","prefabHash":1237302061,"desc":"Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties.","name":"Composite Wall (Type 1)"},"structure":{"smallGrid":false}},"StructureCompositeWall02":{"prefab":{"prefabName":"StructureCompositeWall02","prefabHash":718343384,"desc":"","name":"Composite Wall (Type 2)"},"structure":{"smallGrid":false}},"StructureCompositeWall03":{"prefab":{"prefabName":"StructureCompositeWall03","prefabHash":1574321230,"desc":"","name":"Composite Wall (Type 3)"},"structure":{"smallGrid":false}},"StructureCompositeWall04":{"prefab":{"prefabName":"StructureCompositeWall04","prefabHash":-1011701267,"desc":"","name":"Composite Wall (Type 4)"},"structure":{"smallGrid":false}},"StructureCompositeWindow":{"prefab":{"prefabName":"StructureCompositeWindow","prefabHash":-2060571986,"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.","name":"Composite Window"},"structure":{"smallGrid":false}},"StructureCompositeWindowIron":{"prefab":{"prefabName":"StructureCompositeWindowIron","prefabHash":-688284639,"desc":"","name":"Iron Window"},"structure":{"smallGrid":false}},"StructureComputer":{"prefab":{"prefabName":"StructureComputer","prefabHash":-626563514,"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","name":"Computer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Data Disk","typ":"DataDisk"},{"name":"Data Disk","typ":"DataDisk"},{"name":"Motherboard","typ":"Motherboard"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCondensationChamber":{"prefab":{"prefabName":"StructureCondensationChamber","prefabHash":1420719315,"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.","name":"Condensation Chamber"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCondensationValve":{"prefab":{"prefabName":"StructureCondensationValve","prefabHash":-965741795,"desc":"Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction.","name":"Condensation Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Output"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsole":{"prefab":{"prefabName":"StructureConsole","prefabHash":235638270,"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.","name":"Console"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureConsoleDual":{"prefab":{"prefabName":"StructureConsoleDual","prefabHash":-722284333,"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.","name":"Console Dual"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureConsoleLED1x2":{"prefab":{"prefabName":"StructureConsoleLED1x2","prefabHash":-53151617,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Default","1":"Percent","2":"Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleLED1x3":{"prefab":{"prefabName":"StructureConsoleLED1x3","prefabHash":-1949054743,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Default","1":"Percent","2":"Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleLED5":{"prefab":{"prefabName":"StructureConsoleLED5","prefabHash":-815193061,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Default","1":"Percent","2":"Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleMonitor":{"prefab":{"prefabName":"StructureConsoleMonitor","prefabHash":801677497,"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.","name":"Console Monitor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureControlChair":{"prefab":{"prefabName":"StructureControlChair","prefabHash":-1961153710,"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.","name":"Control Chair"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Entity","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureCornerLocker":{"prefab":{"prefabName":"StructureCornerLocker","prefabHash":-1968255729,"desc":"","name":"Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureCrateMount":{"prefab":{"prefabName":"StructureCrateMount","prefabHash":-733500083,"desc":"","name":"Container Mount"},"structure":{"smallGrid":true},"slots":[{"name":"Container Slot","typ":"None"}]},"StructureCryoTube":{"prefab":{"prefabName":"StructureCryoTube","prefabHash":1938254586,"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.","name":"CryoTube"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Pressure":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCryoTubeHorizontal":{"prefab":{"prefabName":"StructureCryoTubeHorizontal","prefabHash":1443059329,"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.","name":"Cryo Tube Horizontal"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Pressure":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCryoTubeVertical":{"prefab":{"prefabName":"StructureCryoTubeVertical","prefabHash":-1381321828,"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.","name":"Cryo Tube Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Pressure":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureDaylightSensor":{"prefab":{"prefabName":"StructureDaylightSensor","prefabHash":1076425094,"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.","name":"Daylight Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Horizontal":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","SolarAngle":"Read","SolarIrradiance":"Read","Vertical":"Read"},"modes":{"0":"Default","1":"Horizontal","2":"Vertical"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDeepMiner":{"prefab":{"prefabName":"StructureDeepMiner","prefabHash":265720906,"desc":"Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s","name":"Deep Miner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDigitalValve":{"prefab":{"prefabName":"StructureDigitalValve","prefabHash":-1280984102,"desc":"The digital valve allows Stationeers to create logic-controlled valves and pipe networks.","name":"Digital Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDiode":{"prefab":{"prefabName":"StructureDiode","prefabHash":1944485013,"desc":"","name":"LED"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDiodeSlide":{"prefab":{"prefabName":"StructureDiodeSlide","prefabHash":576516101,"desc":"","name":"Diode Slide"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDockPortSide":{"prefab":{"prefabName":"StructureDockPortSide","prefabHash":-137465079,"desc":"","name":"Dock (Port Side)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureDrinkingFountain":{"prefab":{"prefabName":"StructureDrinkingFountain","prefabHash":1968371847,"desc":"","name":""},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureElectrolyzer":{"prefab":{"prefabName":"StructureElectrolyzer","prefabHash":-1668992663,"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.","name":"Electrolyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","Combustion":"Read","CombustionInput":"Read","CombustionOutput":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidHydrogen":"Read","RatioLiquidNitrogen":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"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","RatioSteamInput":"Read","RatioSteamOutput":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElectronicsPrinter":{"prefab":{"prefabName":"StructureElectronicsPrinter","prefabHash":1307165496,"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.","name":"Electronics Printer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureElevatorLevelFront":{"prefab":{"prefabName":"StructureElevatorLevelFront","prefabHash":-827912235,"desc":"","name":"Elevator Level (Cabled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElevatorLevelIndustrial":{"prefab":{"prefabName":"StructureElevatorLevelIndustrial","prefabHash":2060648791,"desc":"","name":"Elevator Level"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElevatorShaft":{"prefab":{"prefabName":"StructureElevatorShaft","prefabHash":826144419,"desc":"","name":"Elevator Shaft (Cabled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureElevatorShaftIndustrial":{"prefab":{"prefabName":"StructureElevatorShaftIndustrial","prefabHash":1998354978,"desc":"","name":"Elevator Shaft"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureEmergencyButton":{"prefab":{"prefabName":"StructureEmergencyButton","prefabHash":1668452680,"desc":"Description coming.","name":"Important Button"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureEngineMountTypeA1":{"prefab":{"prefabName":"StructureEngineMountTypeA1","prefabHash":2035781224,"desc":"","name":"Engine Mount (Type A1)"},"structure":{"smallGrid":false}},"StructureEvaporationChamber":{"prefab":{"prefabName":"StructureEvaporationChamber","prefabHash":-1429782576,"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.","name":"Evaporation Chamber"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureExpansionValve":{"prefab":{"prefabName":"StructureExpansionValve","prefabHash":195298587,"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.","name":"Expansion Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureFairingTypeA1":{"prefab":{"prefabName":"StructureFairingTypeA1","prefabHash":1622567418,"desc":"","name":"Fairing (Type A1)"},"structure":{"smallGrid":false}},"StructureFairingTypeA2":{"prefab":{"prefabName":"StructureFairingTypeA2","prefabHash":-104908736,"desc":"","name":"Fairing (Type A2)"},"structure":{"smallGrid":false}},"StructureFairingTypeA3":{"prefab":{"prefabName":"StructureFairingTypeA3","prefabHash":-1900541738,"desc":"","name":"Fairing (Type A3)"},"structure":{"smallGrid":false}},"StructureFiltration":{"prefab":{"prefabName":"StructureFiltration","prefabHash":-348054045,"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","name":"Filtration"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"CombustionInput":"Read","CombustionOutput":"Read","CombustionOutput2":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureInput":"Read","PressureOutput":"Read","PressureOutput2":"Read","Ratio":"Read","RatioCarbonDioxideInput":"Read","RatioCarbonDioxideOutput":"Read","RatioCarbonDioxideOutput2":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidCarbonDioxideOutput2":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrogenOutput2":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidNitrousOxideOutput2":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidOxygenOutput2":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidPollutantOutput2":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"Read","RatioLiquidVolatilesOutput2":"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","RatioSteamInput":"Read","RatioSteamOutput":"Read","RatioSteamOutput2":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Waste"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureFlagSmall":{"prefab":{"prefabName":"StructureFlagSmall","prefabHash":-1529819532,"desc":"","name":"Small Flag"},"structure":{"smallGrid":true}},"StructureFlashingLight":{"prefab":{"prefabName":"StructureFlashingLight","prefabHash":-1535893860,"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'.","name":"Flashing Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureFlatBench":{"prefab":{"prefabName":"StructureFlatBench","prefabHash":839890807,"desc":"","name":"Bench (Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureFloorDrain":{"prefab":{"prefabName":"StructureFloorDrain","prefabHash":1048813293,"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.","name":"Passive Liquid Inlet"},"structure":{"smallGrid":true}},"StructureFrame":{"prefab":{"prefabName":"StructureFrame","prefabHash":1432512808,"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.","name":"Steel Frame"},"structure":{"smallGrid":false}},"StructureFrameCorner":{"prefab":{"prefabName":"StructureFrameCorner","prefabHash":-2112390778,"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.","name":"Steel Frame (Corner)"},"structure":{"smallGrid":false}},"StructureFrameCornerCut":{"prefab":{"prefabName":"StructureFrameCornerCut","prefabHash":271315669,"desc":"0.Mode0\n1.Mode1","name":"Steel Frame (Corner Cut)"},"structure":{"smallGrid":false}},"StructureFrameIron":{"prefab":{"prefabName":"StructureFrameIron","prefabHash":-1240951678,"desc":"","name":"Iron Frame"},"structure":{"smallGrid":false}},"StructureFrameSide":{"prefab":{"prefabName":"StructureFrameSide","prefabHash":-302420053,"desc":"More durable than the Iron Frame, steel frames also provide variations for more ornate constructions.","name":"Steel Frame (Side)"},"structure":{"smallGrid":false}},"StructureFridgeBig":{"prefab":{"prefabName":"StructureFridgeBig","prefabHash":958476921,"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.","name":"Fridge (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureFridgeSmall":{"prefab":{"prefabName":"StructureFridgeSmall","prefabHash":751887598,"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.","name":"Fridge Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureFurnace":{"prefab":{"prefabName":"StructureFurnace","prefabHash":1947944864,"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.","name":"Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Combustion":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"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","Reagents":"Read","RecipeHash":"Read","ReferenceId":"Read","Setting":"ReadWrite","Temperature":"Read","TotalMoles":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"},{"typ":"Data","role":"None"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":false,"hasOpenState":true,"hasReagents":true}},"StructureFuselageTypeA1":{"prefab":{"prefabName":"StructureFuselageTypeA1","prefabHash":1033024712,"desc":"","name":"Fuselage (Type A1)"},"structure":{"smallGrid":false}},"StructureFuselageTypeA2":{"prefab":{"prefabName":"StructureFuselageTypeA2","prefabHash":-1533287054,"desc":"","name":"Fuselage (Type A2)"},"structure":{"smallGrid":false}},"StructureFuselageTypeA4":{"prefab":{"prefabName":"StructureFuselageTypeA4","prefabHash":1308115015,"desc":"","name":"Fuselage (Type A4)"},"structure":{"smallGrid":false}},"StructureFuselageTypeC5":{"prefab":{"prefabName":"StructureFuselageTypeC5","prefabHash":147395155,"desc":"","name":"Fuselage (Type C5)"},"structure":{"smallGrid":false}},"StructureGasGenerator":{"prefab":{"prefabName":"StructureGasGenerator","prefabHash":1165997963,"desc":"","name":"Gas Fuel Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGasMixer":{"prefab":{"prefabName":"StructureGasMixer","prefabHash":2104106366,"desc":"Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%.","name":"Gas Mixer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGasSensor":{"prefab":{"prefabName":"StructureGasSensor","prefabHash":-1252983604,"desc":"Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents.","name":"Gas Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasTankStorage":{"prefab":{"prefabName":"StructureGasTankStorage","prefabHash":1632165346,"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.","name":"Gas Tank Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","Pressure":"Read","Quantity":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioNitrousOxide":"Read","RatioOxygen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","ReferenceId":"Read","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalFemale":{"prefab":{"prefabName":"StructureGasUmbilicalFemale","prefabHash":-1680477930,"desc":"","name":"Umbilical Socket (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureGasUmbilicalFemaleSide","prefabHash":-648683847,"desc":"","name":"Umbilical Socket Angle (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalMale":{"prefab":{"prefabName":"StructureGasUmbilicalMale","prefabHash":-1814939203,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGlassDoor":{"prefab":{"prefabName":"StructureGlassDoor","prefabHash":-324331872,"desc":"0.Operate\n1.Logic","name":"Glass Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGovernedGasEngine":{"prefab":{"prefabName":"StructureGovernedGasEngine","prefabHash":-214232602,"desc":"The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas.","name":"Pumped Gas Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGroundBasedTelescope":{"prefab":{"prefabName":"StructureGroundBasedTelescope","prefabHash":-619745681,"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.","name":"Telescope"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","AlignmentError":"Read","CelestialHash":"Read","CelestialParentHash":"Read","DistanceAu":"Read","DistanceKm":"Read","Eccentricity":"Read","Error":"Read","Horizontal":"ReadWrite","HorizontalRatio":"ReadWrite","Inclination":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","OrbitPeriod":"Read","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","SemiMajorAxis":"Read","TrueAnomaly":"Read","Vertical":"ReadWrite","VerticalRatio":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGrowLight":{"prefab":{"prefabName":"StructureGrowLight","prefabHash":-1758710260,"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. ","name":"Grow Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHarvie":{"prefab":{"prefabName":"StructureHarvie","prefabHash":958056199,"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.","name":"Harvie"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","Harvest":"Write","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Plant":"Write","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Idle","1":"Happy","2":"UnHappy","3":"Dead"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Plant"},{"name":"Export","typ":"None"},{"name":"Hand","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangeLiquidtoGas":{"prefab":{"prefabName":"StructureHeatExchangeLiquidtoGas","prefabHash":944685608,"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.","name":"Heat Exchanger - Liquid + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangerGastoGas":{"prefab":{"prefabName":"StructureHeatExchangerGastoGas","prefabHash":21266291,"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.","name":"Heat Exchanger - Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangerLiquidtoLiquid":{"prefab":{"prefabName":"StructureHeatExchangerLiquidtoLiquid","prefabHash":-613784254,"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","name":"Heat Exchanger - Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHorizontalAutoMiner":{"prefab":{"prefabName":"StructureHorizontalAutoMiner","prefabHash":1070427573,"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","name":"OGRE"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureHydraulicPipeBender":{"prefab":{"prefabName":"StructureHydraulicPipeBender","prefabHash":-1888248335,"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.","name":"Hydraulic Pipe Bender"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureHydroponicsStation":{"prefab":{"prefabName":"StructureHydroponicsStation","prefabHash":1441767298,"desc":"","name":"Hydroponics Station"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHydroponicsTray":{"prefab":{"prefabName":"StructureHydroponicsTray","prefabHash":1464854517,"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.","name":"Hydroponics Tray"},"structure":{"smallGrid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}]},"StructureHydroponicsTrayData":{"prefab":{"prefabName":"StructureHydroponicsTrayData","prefabHash":-1841632400,"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.","name":"Hydroponics Device"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Combustion":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureIceCrusher":{"prefab":{"prefabName":"StructureIceCrusher","prefabHash":443849486,"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.","name":"Ice Crusher"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ImportCount":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureIgniter":{"prefab":{"prefabName":"StructureIgniter","prefabHash":1005491513,"desc":"It gets the party started. Especially if that party is an explosive gas mixture.","name":"Igniter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureInLineTankGas1x1":{"prefab":{"prefabName":"StructureInLineTankGas1x1","prefabHash":-1693382705,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Gas"},"structure":{"smallGrid":true}},"StructureInLineTankGas1x2":{"prefab":{"prefabName":"StructureInLineTankGas1x2","prefabHash":35149429,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Gas"},"structure":{"smallGrid":true}},"StructureInLineTankLiquid1x1":{"prefab":{"prefabName":"StructureInLineTankLiquid1x1","prefabHash":543645499,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Liquid"},"structure":{"smallGrid":true}},"StructureInLineTankLiquid1x2":{"prefab":{"prefabName":"StructureInLineTankLiquid1x2","prefabHash":-1183969663,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankGas1x1":{"prefab":{"prefabName":"StructureInsulatedInLineTankGas1x1","prefabHash":1818267386,"desc":"","name":"Insulated In-Line Tank Small Gas"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankGas1x2":{"prefab":{"prefabName":"StructureInsulatedInLineTankGas1x2","prefabHash":-177610944,"desc":"","name":"Insulated In-Line Tank Gas"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankLiquid1x1":{"prefab":{"prefabName":"StructureInsulatedInLineTankLiquid1x1","prefabHash":-813426145,"desc":"","name":"Insulated In-Line Tank Small Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankLiquid1x2":{"prefab":{"prefabName":"StructureInsulatedInLineTankLiquid1x2","prefabHash":1452100517,"desc":"","name":"Insulated In-Line Tank Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCorner":{"prefab":{"prefabName":"StructureInsulatedPipeCorner","prefabHash":-1967711059,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Corner)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction","prefabHash":-92778058,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction3":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction3","prefabHash":1328210035,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction4":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction4","prefabHash":-783387184,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction5":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction5","prefabHash":-1505147578,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction6":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction6","prefabHash":1061164284,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCorner":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCorner","prefabHash":1713710802,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Corner)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction","prefabHash":1926651727,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction4":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction4","prefabHash":363303270,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction5":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction5","prefabHash":1654694384,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction6":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction6","prefabHash":-72748982,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidStraight":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidStraight","prefabHash":295678685,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Straight)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidTJunction":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidTJunction","prefabHash":-532384855,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeStraight":{"prefab":{"prefabName":"StructureInsulatedPipeStraight","prefabHash":2134172356,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Straight)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeTJunction":{"prefab":{"prefabName":"StructureInsulatedPipeTJunction","prefabHash":-2076086215,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedTankConnector":{"prefab":{"prefabName":"StructureInsulatedTankConnector","prefabHash":-31273349,"desc":"","name":"Insulated Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructureInsulatedTankConnectorLiquid":{"prefab":{"prefabName":"StructureInsulatedTankConnectorLiquid","prefabHash":-1602030414,"desc":"","name":"Insulated Tank Connector Liquid"},"structure":{"smallGrid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureInteriorDoorGlass":{"prefab":{"prefabName":"StructureInteriorDoorGlass","prefabHash":-2096421875,"desc":"0.Operate\n1.Logic","name":"Interior Door Glass"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorPadded":{"prefab":{"prefabName":"StructureInteriorDoorPadded","prefabHash":847461335,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorPaddedThin":{"prefab":{"prefabName":"StructureInteriorDoorPaddedThin","prefabHash":1981698201,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded Thin"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorTriangle":{"prefab":{"prefabName":"StructureInteriorDoorTriangle","prefabHash":-1182923101,"desc":"0.Operate\n1.Logic","name":"Interior Door Triangle"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureKlaxon":{"prefab":{"prefabName":"StructureKlaxon","prefabHash":-828056979,"desc":"Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output.","name":"Klaxon Speaker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLadder":{"prefab":{"prefabName":"StructureLadder","prefabHash":-415420281,"desc":"","name":"Ladder"},"structure":{"smallGrid":true}},"StructureLadderEnd":{"prefab":{"prefabName":"StructureLadderEnd","prefabHash":1541734993,"desc":"","name":"Ladder End"},"structure":{"smallGrid":true}},"StructureLargeDirectHeatExchangeGastoGas":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeGastoGas","prefabHash":-1230658883,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeDirectHeatExchangeGastoLiquid":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeGastoLiquid","prefabHash":1412338038,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeLiquidtoLiquid","prefabHash":792686502,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchange - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeExtendableRadiator":{"prefab":{"prefabName":"StructureLargeExtendableRadiator","prefabHash":-566775170,"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.","name":"Large Extendable Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Horizontal":"ReadWrite","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLargeHangerDoor":{"prefab":{"prefabName":"StructureLargeHangerDoor","prefabHash":-1351081801,"desc":"1 x 3 modular door piece for building hangar doors.","name":"Large Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureLargeSatelliteDish":{"prefab":{"prefabName":"StructureLargeSatelliteDish","prefabHash":1913391845,"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.","name":"Large Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","BestContactFilter":"ReadWrite","ContactTypeId":"Read","Error":"Read","Horizontal":"ReadWrite","Idle":"Read","InterrogationProgress":"Read","MinimumWattsToContact":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLaunchMount":{"prefab":{"prefabName":"StructureLaunchMount","prefabHash":-558953231,"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.","name":"Launch Mount"},"structure":{"smallGrid":false}},"StructureLightLong":{"prefab":{"prefabName":"StructureLightLong","prefabHash":797794350,"desc":"","name":"Wall Light (Long)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightLongAngled":{"prefab":{"prefabName":"StructureLightLongAngled","prefabHash":1847265835,"desc":"","name":"Wall Light (Long Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightLongWide":{"prefab":{"prefabName":"StructureLightLongWide","prefabHash":555215790,"desc":"","name":"Wall Light (Long Wide)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRound":{"prefab":{"prefabName":"StructureLightRound","prefabHash":1514476632,"desc":"Description coming.","name":"Light Round"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRoundAngled":{"prefab":{"prefabName":"StructureLightRoundAngled","prefabHash":1592905386,"desc":"Description coming.","name":"Light Round (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRoundSmall":{"prefab":{"prefabName":"StructureLightRoundSmall","prefabHash":1436121888,"desc":"Description coming.","name":"Light Round (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidDrain":{"prefab":{"prefabName":"StructureLiquidDrain","prefabHash":1687692899,"desc":"When connected to power and activated, it pumps liquid from a liquid network into the world.","name":"Active Liquid Outlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeAnalyzer":{"prefab":{"prefabName":"StructureLiquidPipeAnalyzer","prefabHash":-2113838091,"desc":"","name":"Liquid Pipe Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","NameHash":"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","Volume":"Read","VolumeOfLiquid":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeHeater":{"prefab":{"prefabName":"StructureLiquidPipeHeater","prefabHash":-287495560,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeOneWayValve":{"prefab":{"prefabName":"StructureLiquidPipeOneWayValve","prefabHash":-782453061,"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..","name":"One Way Valve (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeRadiator":{"prefab":{"prefabName":"StructureLiquidPipeRadiator","prefabHash":2072805863,"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.","name":"Liquid Pipe Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPressureRegulator":{"prefab":{"prefabName":"StructureLiquidPressureRegulator","prefabHash":482248766,"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.","name":"Liquid Volume Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankBig":{"prefab":{"prefabName":"StructureLiquidTankBig","prefabHash":1098900430,"desc":"","name":"Liquid Tank Big"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankBigInsulated":{"prefab":{"prefabName":"StructureLiquidTankBigInsulated","prefabHash":-1430440215,"desc":"","name":"Insulated Liquid Tank Big"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankSmall":{"prefab":{"prefabName":"StructureLiquidTankSmall","prefabHash":1988118157,"desc":"","name":"Liquid Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankSmallInsulated":{"prefab":{"prefabName":"StructureLiquidTankSmallInsulated","prefabHash":608607718,"desc":"","name":"Insulated Liquid Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankStorage":{"prefab":{"prefabName":"StructureLiquidTankStorage","prefabHash":1691898022,"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.","name":"Liquid Tank Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","Pressure":"Read","Quantity":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioNitrousOxide":"Read","RatioOxygen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","ReferenceId":"Read","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTurboVolumePump":{"prefab":{"prefabName":"StructureLiquidTurboVolumePump","prefabHash":-1051805505,"desc":"Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Right","1":"Left"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalFemale":{"prefab":{"prefabName":"StructureLiquidUmbilicalFemale","prefabHash":1734723642,"desc":"","name":"Umbilical Socket (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureLiquidUmbilicalFemaleSide","prefabHash":1220870319,"desc":"","name":"Umbilical Socket Angle (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalMale":{"prefab":{"prefabName":"StructureLiquidUmbilicalMale","prefabHash":-1798420047,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureLiquidValve":{"prefab":{"prefabName":"StructureLiquidValve","prefabHash":1849974453,"desc":"","name":"Liquid Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidVolumePump":{"prefab":{"prefabName":"StructureLiquidVolumePump","prefabHash":-454028979,"desc":"","name":"Liquid Volume Pump"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLockerSmall":{"prefab":{"prefabName":"StructureLockerSmall","prefabHash":-647164662,"desc":"","name":"Locker (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicBatchReader":{"prefab":{"prefabName":"StructureLogicBatchReader","prefabHash":264413729,"desc":"","name":"Batch Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicBatchSlotReader":{"prefab":{"prefabName":"StructureLogicBatchSlotReader","prefabHash":436888930,"desc":"","name":"Batch Slot Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicBatchWriter":{"prefab":{"prefabName":"StructureLogicBatchWriter","prefabHash":1415443359,"desc":"","name":"Batch Writer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","ForceWrite":"Write","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicButton":{"prefab":{"prefabName":"StructureLogicButton","prefabHash":491845673,"desc":"","name":"Button"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Lock":"ReadWrite","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicCompare":{"prefab":{"prefabName":"StructureLogicCompare","prefabHash":-1489728908,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Compare"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"modes":{"0":"Equals","1":"Greater","2":"Less","3":"NotEquals"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicDial":{"prefab":{"prefabName":"StructureLogicDial","prefabHash":554524804,"desc":"An assignable dial with up to 1000 modes.","name":"Dial"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicGate":{"prefab":{"prefabName":"StructureLogicGate","prefabHash":1942143074,"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.","name":"Logic Gate"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicHashGen":{"prefab":{"prefabName":"StructureLogicHashGen","prefabHash":2077593121,"desc":"","name":"Logic Hash Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicMath":{"prefab":{"prefabName":"StructureLogicMath","prefabHash":1657691323,"desc":"0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log","name":"Logic Math"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMathUnary":{"prefab":{"prefabName":"StructureLogicMathUnary","prefabHash":-1160020195,"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","name":"Math Unary"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMemory":{"prefab":{"prefabName":"StructureLogicMemory","prefabHash":-851746783,"desc":"","name":"Logic Memory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicMinMax":{"prefab":{"prefabName":"StructureLogicMinMax","prefabHash":929022276,"desc":"0.Greater\n1.Less","name":"Logic Min/Max"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"modes":{"0":"Greater","1":"Less"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMirror":{"prefab":{"prefabName":"StructureLogicMirror","prefabHash":2096189278,"desc":"","name":"Logic Mirror"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicReader":{"prefab":{"prefabName":"StructureLogicReader","prefabHash":-345383640,"desc":"","name":"Logic Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicReagentReader":{"prefab":{"prefabName":"StructureLogicReagentReader","prefabHash":-124308857,"desc":"","name":"Reagent Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicRocketDownlink":{"prefab":{"prefabName":"StructureLogicRocketDownlink","prefabHash":876108549,"desc":"","name":"Logic Rocket Downlink"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicRocketUplink":{"prefab":{"prefabName":"StructureLogicRocketUplink","prefabHash":546002924,"desc":"","name":"Logic Uplink"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSelect":{"prefab":{"prefabName":"StructureLogicSelect","prefabHash":1822736084,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Select"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"modes":{"0":"Equals","1":"Greater","2":"Less","3":"NotEquals"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSlotReader":{"prefab":{"prefabName":"StructureLogicSlotReader","prefabHash":-767867194,"desc":"","name":"Slot Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSorter":{"prefab":{"prefabName":"StructureLogicSorter","prefabHash":873418029,"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.","name":"Logic Sorter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"All","1":"Any","2":"None"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Chute","role":"Output2"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"instructions":{"FilterPrefabHashEquals":{"description":"| 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":{"description":"| 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":{"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 |","typ":"SorterInstruction","value":5},"FilterSlotTypeCompare":{"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 |","typ":"SorterInstruction","value":4},"FilterSortingClassCompare":{"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 |","typ":"SorterInstruction","value":3},"LimitNextExecutionByCount":{"description":"| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |","typ":"SorterInstruction","value":6}},"memoryAccess":"ReadWrite","memorySize":32}},"StructureLogicSwitch":{"prefab":{"prefabName":"StructureLogicSwitch","prefabHash":1220484876,"desc":"","name":"Lever"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicSwitch2":{"prefab":{"prefabName":"StructureLogicSwitch2","prefabHash":321604921,"desc":"","name":"Switch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicTransmitter":{"prefab":{"prefabName":"StructureLogicTransmitter","prefabHash":-693235651,"desc":"Connects to Logic Transmitter","name":"Logic Transmitter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"modes":{"0":"Passive","1":"Active"},"transmissionReceiver":true,"wirelessLogic":true,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicWriter":{"prefab":{"prefabName":"StructureLogicWriter","prefabHash":-1326019434,"desc":"","name":"Logic Writer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","ForceWrite":"Write","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicWriterSwitch":{"prefab":{"prefabName":"StructureLogicWriterSwitch","prefabHash":-1321250424,"desc":"","name":"Logic Writer Switch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","ForceWrite":"Write","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureManualHatch":{"prefab":{"prefabName":"StructureManualHatch","prefabHash":-1808154199,"desc":"Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock.","name":"Manual Hatch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureMediumConvectionRadiator":{"prefab":{"prefabName":"StructureMediumConvectionRadiator","prefabHash":-1918215845,"desc":"A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumConvectionRadiatorLiquid":{"prefab":{"prefabName":"StructureMediumConvectionRadiatorLiquid","prefabHash":-1169014183,"desc":"A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumHangerDoor":{"prefab":{"prefabName":"StructureMediumHangerDoor","prefabHash":-566348148,"desc":"1 x 2 modular door piece for building hangar doors.","name":"Medium Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureMediumRadiator":{"prefab":{"prefabName":"StructureMediumRadiator","prefabHash":-975966237,"desc":"A stand-alone radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRadiatorLiquid":{"prefab":{"prefabName":"StructureMediumRadiatorLiquid","prefabHash":-1141760613,"desc":"A stand-alone liquid radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRocketGasFuelTank":{"prefab":{"prefabName":"StructureMediumRocketGasFuelTank","prefabHash":-1093860567,"desc":"","name":"Gas Capsule Tank Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Output"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRocketLiquidFuelTank":{"prefab":{"prefabName":"StructureMediumRocketLiquidFuelTank","prefabHash":1143639539,"desc":"","name":"Liquid Capsule Tank Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Output"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMotionSensor":{"prefab":{"prefabName":"StructureMotionSensor","prefabHash":-1713470563,"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.","name":"Motion Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureNitrolyzer":{"prefab":{"prefabName":"StructureNitrolyzer","prefabHash":1898243702,"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.","name":"Nitrolyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","Combustion":"Read","CombustionInput":"Read","CombustionInput2":"Read","CombustionOutput":"Read","Error":"Read","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideInput2":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidHydrogen":"Read","RatioLiquidNitrogen":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenInput2":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideInput2":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenInput2":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantInput2":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesInput2":"Read","RatioLiquidVolatilesOutput":"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","RatioSteamInput":"Read","RatioSteamInput2":"Read","RatioSteamOutput":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureOccupancySensor":{"prefab":{"prefabName":"StructureOccupancySensor","prefabHash":322782515,"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.","name":"Occupancy Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"Read","NameHash":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureOverheadShortCornerLocker":{"prefab":{"prefabName":"StructureOverheadShortCornerLocker","prefabHash":-1794932560,"desc":"","name":"Overhead Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureOverheadShortLocker":{"prefab":{"prefabName":"StructureOverheadShortLocker","prefabHash":1468249454,"desc":"","name":"Overhead Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePassiveLargeRadiatorGas":{"prefab":{"prefabName":"StructurePassiveLargeRadiatorGas","prefabHash":2066977095,"desc":"Has been replaced by Medium Convection Radiator.","name":"Medium Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveLargeRadiatorLiquid":{"prefab":{"prefabName":"StructurePassiveLargeRadiatorLiquid","prefabHash":24786172,"desc":"Has been replaced by Medium Convection Radiator Liquid.","name":"Medium Convection Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveLiquidDrain":{"prefab":{"prefabName":"StructurePassiveLiquidDrain","prefabHash":1812364811,"desc":"Moves liquids from a pipe network to the world atmosphere.","name":"Passive Liquid Drain"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveVent":{"prefab":{"prefabName":"StructurePassiveVent","prefabHash":335498166,"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. ","name":"Passive Vent"},"structure":{"smallGrid":true}},"StructurePassiveVentInsulated":{"prefab":{"prefabName":"StructurePassiveVentInsulated","prefabHash":1363077139,"desc":"","name":"Insulated Passive Vent"},"structure":{"smallGrid":true}},"StructurePassthroughHeatExchangerGasToGas":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerGasToGas","prefabHash":-1674187440,"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.","name":"CounterFlow Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Output2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassthroughHeatExchangerGasToLiquid":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerGasToLiquid","prefabHash":1928991265,"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.","name":"CounterFlow Heat Exchanger - Gas + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassthroughHeatExchangerLiquidToLiquid":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerLiquidToLiquid","prefabHash":-1472829583,"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.","name":"CounterFlow Heat Exchanger - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePictureFrameThickLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThickLandscapeLarge","prefabHash":-1434523206,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThickLandscapeSmall","prefabHash":-2041566697,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThickMountLandscapeLarge","prefabHash":950004659,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThickMountLandscapeSmall","prefabHash":347154462,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThickMountPortraitLarge","prefabHash":-1459641358,"desc":"","name":"Picture Frame Thick Mount Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThickMountPortraitSmall","prefabHash":-2066653089,"desc":"","name":"Picture Frame Thick Mount Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThickPortraitLarge","prefabHash":-1686949570,"desc":"","name":"Picture Frame Thick Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThickPortraitSmall","prefabHash":-1218579821,"desc":"","name":"Picture Frame Thick Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThinLandscapeLarge","prefabHash":-1418288625,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThinLandscapeSmall","prefabHash":-2024250974,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThinMountLandscapeLarge","prefabHash":-1146760430,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThinMountLandscapeSmall","prefabHash":-1752493889,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThinMountPortraitLarge","prefabHash":1094895077,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThinMountPortraitSmall","prefabHash":1835796040,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThinPortraitLarge","prefabHash":1212777087,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThinPortraitSmall","prefabHash":1684488658,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"smallGrid":true}},"StructurePipeAnalysizer":{"prefab":{"prefabName":"StructurePipeAnalysizer","prefabHash":435685051,"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.","name":"Pipe Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","NameHash":"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","Volume":"Read","VolumeOfLiquid":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePipeCorner":{"prefab":{"prefabName":"StructurePipeCorner","prefabHash":-1785673561,"desc":"You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Corner)"},"structure":{"smallGrid":true}},"StructurePipeCowl":{"prefab":{"prefabName":"StructurePipeCowl","prefabHash":465816159,"desc":"","name":"Pipe Cowl"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction":{"prefab":{"prefabName":"StructurePipeCrossJunction","prefabHash":-1405295588,"desc":"You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction3":{"prefab":{"prefabName":"StructurePipeCrossJunction3","prefabHash":2038427184,"desc":"You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction4":{"prefab":{"prefabName":"StructurePipeCrossJunction4","prefabHash":-417629293,"desc":"You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction5":{"prefab":{"prefabName":"StructurePipeCrossJunction5","prefabHash":-1877193979,"desc":"You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction6":{"prefab":{"prefabName":"StructurePipeCrossJunction6","prefabHash":152378047,"desc":"You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeHeater":{"prefab":{"prefabName":"StructurePipeHeater","prefabHash":-419758574,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePipeIgniter":{"prefab":{"prefabName":"StructurePipeIgniter","prefabHash":1286441942,"desc":"Ignites the atmosphere inside the attached pipe network.","name":"Pipe Igniter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeInsulatedLiquidCrossJunction":{"prefab":{"prefabName":"StructurePipeInsulatedLiquidCrossJunction","prefabHash":-2068497073,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeLabel":{"prefab":{"prefabName":"StructurePipeLabel","prefabHash":-999721119,"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.","name":"Pipe Label"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeLiquidCorner":{"prefab":{"prefabName":"StructurePipeLiquidCorner","prefabHash":-1856720921,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Corner)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction","prefabHash":1848735691,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction3":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction3","prefabHash":1628087508,"desc":"You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction4":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction4","prefabHash":-9555593,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction5":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction5","prefabHash":-2006384159,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction6":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction6","prefabHash":291524699,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidStraight":{"prefab":{"prefabName":"StructurePipeLiquidStraight","prefabHash":667597982,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Straight)"},"structure":{"smallGrid":true}},"StructurePipeLiquidTJunction":{"prefab":{"prefabName":"StructurePipeLiquidTJunction","prefabHash":262616717,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructurePipeMeter":{"prefab":{"prefabName":"StructurePipeMeter","prefabHash":-1798362329,"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\"","name":"Pipe Meter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeOneWayValve":{"prefab":{"prefabName":"StructurePipeOneWayValve","prefabHash":1580412404,"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","name":"One Way Valve (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeOrgan":{"prefab":{"prefabName":"StructurePipeOrgan","prefabHash":1305252611,"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.","name":"Pipe Organ"},"structure":{"smallGrid":true}},"StructurePipeRadiator":{"prefab":{"prefabName":"StructurePipeRadiator","prefabHash":1696603168,"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.","name":"Pipe Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeRadiatorFlat":{"prefab":{"prefabName":"StructurePipeRadiatorFlat","prefabHash":-399883995,"desc":"A pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeRadiatorFlatLiquid":{"prefab":{"prefabName":"StructurePipeRadiatorFlatLiquid","prefabHash":2024754523,"desc":"A liquid pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeStraight":{"prefab":{"prefabName":"StructurePipeStraight","prefabHash":73728932,"desc":"You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Straight)"},"structure":{"smallGrid":true}},"StructurePipeTJunction":{"prefab":{"prefabName":"StructurePipeTJunction","prefabHash":-913817472,"desc":"You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructurePlanter":{"prefab":{"prefabName":"StructurePlanter","prefabHash":-1125641329,"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).","name":"Planter"},"structure":{"smallGrid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Plant","typ":"Plant"}]},"StructurePlatformLadderOpen":{"prefab":{"prefabName":"StructurePlatformLadderOpen","prefabHash":1559586682,"desc":"","name":"Ladder Platform"},"structure":{"smallGrid":false}},"StructurePlinth":{"prefab":{"prefabName":"StructurePlinth","prefabHash":989835703,"desc":"","name":"Plinth"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructurePortablesConnector":{"prefab":{"prefabName":"StructurePortablesConnector","prefabHash":-899013427,"desc":"","name":"Portables Connector"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Maximum":"Read","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePowerConnector":{"prefab":{"prefabName":"StructurePowerConnector","prefabHash":-782951720,"desc":"Attaches a Kit (Portable Generator) to a power network.","name":"Power Connector"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Portable Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePowerTransmitter":{"prefab":{"prefabName":"StructurePowerTransmitter","prefabHash":-65087121,"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.","name":"Microwave Power Transmitter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Error":"Read","Horizontal":"ReadWrite","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerTransmitterOmni":{"prefab":{"prefabName":"StructurePowerTransmitterOmni","prefabHash":-327468845,"desc":"","name":"Power Transmitter Omni"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerTransmitterReceiver":{"prefab":{"prefabName":"StructurePowerTransmitterReceiver","prefabHash":1195820278,"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","name":"Microwave Power Receiver"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Error":"Read","Horizontal":"ReadWrite","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalFemale":{"prefab":{"prefabName":"StructurePowerUmbilicalFemale","prefabHash":101488029,"desc":"","name":"Umbilical Socket (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalFemaleSide":{"prefab":{"prefabName":"StructurePowerUmbilicalFemaleSide","prefabHash":1922506192,"desc":"","name":"Umbilical Socket Angle (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalMale":{"prefab":{"prefabName":"StructurePowerUmbilicalMale","prefabHash":1529453938,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructurePoweredVent":{"prefab":{"prefabName":"StructurePoweredVent","prefabHash":938836756,"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.","name":"Powered Vent"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureExternal":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePoweredVentLarge":{"prefab":{"prefabName":"StructurePoweredVentLarge","prefabHash":-785498334,"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.","name":"Powered Vent Large"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureExternal":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressurantValve":{"prefab":{"prefabName":"StructurePressurantValve","prefabHash":23052817,"desc":"Pumps gas into a liquid pipe in order to raise the pressure","name":"Pressurant Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressureFedGasEngine":{"prefab":{"prefabName":"StructurePressureFedGasEngine","prefabHash":-624011170,"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.","name":"Pressure Fed Gas Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressureFedLiquidEngine":{"prefab":{"prefabName":"StructurePressureFedLiquidEngine","prefabHash":379750958,"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.","name":"Pressure Fed Liquid Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateLarge":{"prefab":{"prefabName":"StructurePressurePlateLarge","prefabHash":-2008706143,"desc":"","name":"Trigger Plate (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateMedium":{"prefab":{"prefabName":"StructurePressurePlateMedium","prefabHash":1269458680,"desc":"","name":"Trigger Plate (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateSmall":{"prefab":{"prefabName":"StructurePressurePlateSmall","prefabHash":-1536471028,"desc":"","name":"Trigger Plate (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressureRegulator":{"prefab":{"prefabName":"StructurePressureRegulator","prefabHash":209854039,"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.","name":"Pressure Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureProximitySensor":{"prefab":{"prefabName":"StructureProximitySensor","prefabHash":568800213,"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.","name":"Proximity Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"Read","NameHash":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePumpedLiquidEngine":{"prefab":{"prefabName":"StructurePumpedLiquidEngine","prefabHash":-2031440019,"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","name":"Pumped Liquid Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePurgeValve":{"prefab":{"prefabName":"StructurePurgeValve","prefabHash":-737232128,"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.","name":"Purge Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRailing":{"prefab":{"prefabName":"StructureRailing","prefabHash":-1756913871,"desc":"\"Safety third.\"","name":"Railing Industrial (Type 1)"},"structure":{"smallGrid":false}},"StructureRecycler":{"prefab":{"prefabName":"StructureRecycler","prefabHash":-1633947337,"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.","name":"Recycler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureRefrigeratedVendingMachine":{"prefab":{"prefabName":"StructureRefrigeratedVendingMachine","prefabHash":-1577831321,"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. ","name":"Refrigerated Vending Machine"},"structure":{"smallGrid":true},"logic":{"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":{"Activate":"ReadWrite","ClearMemory":"Write","Combustion":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureReinforcedCompositeWindow":{"prefab":{"prefabName":"StructureReinforcedCompositeWindow","prefabHash":2027713511,"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.","name":"Reinforced Window (Composite)"},"structure":{"smallGrid":false}},"StructureReinforcedCompositeWindowSteel":{"prefab":{"prefabName":"StructureReinforcedCompositeWindowSteel","prefabHash":-816454272,"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.","name":"Reinforced Window (Composite Steel)"},"structure":{"smallGrid":false}},"StructureReinforcedWallPaddedWindow":{"prefab":{"prefabName":"StructureReinforcedWallPaddedWindow","prefabHash":1939061729,"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.","name":"Reinforced Window (Padded)"},"structure":{"smallGrid":false}},"StructureReinforcedWallPaddedWindowThin":{"prefab":{"prefabName":"StructureReinforcedWallPaddedWindowThin","prefabHash":158502707,"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.","name":"Reinforced Window (Thin)"},"structure":{"smallGrid":false}},"StructureRocketAvionics":{"prefab":{"prefabName":"StructureRocketAvionics","prefabHash":808389066,"desc":"","name":"Rocket Avionics"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureRocketCelestialTracker":{"prefab":{"prefabName":"StructureRocketCelestialTracker","prefabHash":997453927,"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.","name":"Rocket Celestial Tracker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"CelestialHash":"Read","Error":"Read","Horizontal":"Read","Index":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Vertical":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"instructions":{"BodyOrientation":{"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 |","typ":"CelestialTracking","value":1}},"memoryAccess":"Read","memorySize":12}},"StructureRocketCircuitHousing":{"prefab":{"prefabName":"StructureRocketCircuitHousing","prefabHash":150135861,"desc":"","name":"Rocket Circuit Housing"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","LineNumber":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","LineNumber":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"}],"devicePinsLength":6,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"StructureRocketEngineTiny":{"prefab":{"prefabName":"StructureRocketEngineTiny","prefabHash":178472613,"desc":"","name":"Rocket Engine (Tiny)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketManufactory":{"prefab":{"prefabName":"StructureRocketManufactory","prefabHash":1781051034,"desc":"","name":"Rocket Manufactory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureRocketMiner":{"prefab":{"prefabName":"StructureRocketMiner","prefabHash":-2087223687,"desc":"Gathers available resources at the rocket's current space location.","name":"Rocket Miner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"ClearMemory":"Write","DrillCondition":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"},{"name":"Drill Head Slot","typ":"DrillHead"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketScanner":{"prefab":{"prefabName":"StructureRocketScanner","prefabHash":2014252591,"desc":"","name":"Rocket Scanner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Scanner Head Slot","typ":"ScanningHead"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketTower":{"prefab":{"prefabName":"StructureRocketTower","prefabHash":-654619479,"desc":"","name":"Launch Tower"},"structure":{"smallGrid":false}},"StructureRocketTransformerSmall":{"prefab":{"prefabName":"StructureRocketTransformerSmall","prefabHash":518925193,"desc":"","name":"Transformer Small (Rocket)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRover":{"prefab":{"prefabName":"StructureRover","prefabHash":806513938,"desc":"","name":"Rover Frame"},"structure":{"smallGrid":false}},"StructureSDBHopper":{"prefab":{"prefabName":"StructureSDBHopper","prefabHash":-1875856925,"desc":"","name":"SDB Hopper"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSDBHopperAdvanced":{"prefab":{"prefabName":"StructureSDBHopperAdvanced","prefabHash":467225612,"desc":"","name":"SDB Hopper Advanced"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSDBSilo":{"prefab":{"prefabName":"StructureSDBSilo","prefabHash":1155865682,"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.","name":"SDB Silo"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSatelliteDish":{"prefab":{"prefabName":"StructureSatelliteDish","prefabHash":439026183,"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.","name":"Medium Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","BestContactFilter":"ReadWrite","ContactTypeId":"Read","Error":"Read","Horizontal":"ReadWrite","Idle":"Read","InterrogationProgress":"Read","MinimumWattsToContact":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSecurityPrinter":{"prefab":{"prefabName":"StructureSecurityPrinter","prefabHash":-641491515,"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","name":"Security Printer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureShelf":{"prefab":{"prefabName":"StructureShelf","prefabHash":1172114950,"desc":"","name":"Shelf"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"StructureShelfMedium":{"prefab":{"prefabName":"StructureShelfMedium","prefabHash":182006674,"desc":"A shelf for putting things on, so you can see them.","name":"Shelf Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShortCornerLocker":{"prefab":{"prefabName":"StructureShortCornerLocker","prefabHash":1330754486,"desc":"","name":"Short Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShortLocker":{"prefab":{"prefabName":"StructureShortLocker","prefabHash":-554553467,"desc":"","name":"Short Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShower":{"prefab":{"prefabName":"StructureShower","prefabHash":-775128944,"desc":"","name":"Shower"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Maximum":"Read","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShowerPowered":{"prefab":{"prefabName":"StructureShowerPowered","prefabHash":-1081797501,"desc":"","name":"Shower (Powered)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSign1x1":{"prefab":{"prefabName":"StructureSign1x1","prefabHash":879058460,"desc":"","name":"Sign 1x1"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSign2x1":{"prefab":{"prefabName":"StructureSign2x1","prefabHash":908320837,"desc":"","name":"Sign 2x1"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSingleBed":{"prefab":{"prefabName":"StructureSingleBed","prefabHash":-492611,"desc":"Description coming.","name":"Single Bed"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSleeper":{"prefab":{"prefabName":"StructureSleeper","prefabHash":-1467449329,"desc":"","name":"Sleeper"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperLeft":{"prefab":{"prefabName":"StructureSleeperLeft","prefabHash":1213495833,"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.","name":"Sleeper Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Safe","1":"Unsafe","2":"Unpowered"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperRight":{"prefab":{"prefabName":"StructureSleeperRight","prefabHash":-1812330717,"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.","name":"Sleeper Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Safe","1":"Unsafe","2":"Unpowered"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperVertical":{"prefab":{"prefabName":"StructureSleeperVertical","prefabHash":-1300059018,"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.","name":"Sleeper Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Safe","1":"Unsafe","2":"Unpowered"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperVerticalDroid":{"prefab":{"prefabName":"StructureSleeperVerticalDroid","prefabHash":1382098999,"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.","name":"Droid Sleeper Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSmallDirectHeatExchangeGastoGas":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeGastoGas","prefabHash":1310303582,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallDirectHeatExchangeLiquidtoGas":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeLiquidtoGas","prefabHash":1825212016,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Gas "},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeLiquidtoLiquid","prefabHash":-507770416,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallSatelliteDish":{"prefab":{"prefabName":"StructureSmallSatelliteDish","prefabHash":-2138748650,"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.","name":"Small Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","BestContactFilter":"ReadWrite","ContactTypeId":"Read","Error":"Read","Horizontal":"ReadWrite","Idle":"Read","InterrogationProgress":"Read","MinimumWattsToContact":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSmallTableBacklessDouble":{"prefab":{"prefabName":"StructureSmallTableBacklessDouble","prefabHash":-1633000411,"desc":"","name":"Small (Table Backless Double)"},"structure":{"smallGrid":true}},"StructureSmallTableBacklessSingle":{"prefab":{"prefabName":"StructureSmallTableBacklessSingle","prefabHash":-1897221677,"desc":"","name":"Small (Table Backless Single)"},"structure":{"smallGrid":true}},"StructureSmallTableDinnerSingle":{"prefab":{"prefabName":"StructureSmallTableDinnerSingle","prefabHash":1260651529,"desc":"","name":"Small (Table Dinner Single)"},"structure":{"smallGrid":true}},"StructureSmallTableRectangleDouble":{"prefab":{"prefabName":"StructureSmallTableRectangleDouble","prefabHash":-660451023,"desc":"","name":"Small (Table Rectangle Double)"},"structure":{"smallGrid":true}},"StructureSmallTableRectangleSingle":{"prefab":{"prefabName":"StructureSmallTableRectangleSingle","prefabHash":-924678969,"desc":"","name":"Small (Table Rectangle Single)"},"structure":{"smallGrid":true}},"StructureSmallTableThickDouble":{"prefab":{"prefabName":"StructureSmallTableThickDouble","prefabHash":-19246131,"desc":"","name":"Small (Table Thick Double)"},"structure":{"smallGrid":true}},"StructureSmallTableThickSingle":{"prefab":{"prefabName":"StructureSmallTableThickSingle","prefabHash":-291862981,"desc":"","name":"Small Table (Thick Single)"},"structure":{"smallGrid":true}},"StructureSolarPanel":{"prefab":{"prefabName":"StructureSolarPanel","prefabHash":-2045627372,"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.","name":"Solar Panel"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanel45":{"prefab":{"prefabName":"StructureSolarPanel45","prefabHash":-1554349863,"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.","name":"Solar Panel (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanel45Reinforced":{"prefab":{"prefabName":"StructureSolarPanel45Reinforced","prefabHash":930865127,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelDual":{"prefab":{"prefabName":"StructureSolarPanelDual","prefabHash":-539224550,"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.","name":"Solar Panel (Dual)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelDualReinforced":{"prefab":{"prefabName":"StructureSolarPanelDualReinforced","prefabHash":-1545574413,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Dual)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelFlat":{"prefab":{"prefabName":"StructureSolarPanelFlat","prefabHash":1968102968,"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.","name":"Solar Panel (Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelFlatReinforced":{"prefab":{"prefabName":"StructureSolarPanelFlatReinforced","prefabHash":1697196770,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelReinforced":{"prefab":{"prefabName":"StructureSolarPanelReinforced","prefabHash":-934345724,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolidFuelGenerator":{"prefab":{"prefabName":"StructureSolidFuelGenerator","prefabHash":813146305,"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.","name":"Generator (Solid Fuel)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"modes":{"0":"Not Generating","1":"Generating"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Input","typ":"Ore"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSorter":{"prefab":{"prefabName":"StructureSorter","prefabHash":-1009150565,"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.","name":"Sorter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Output":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Split","1":"Filter","2":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Chute","role":"Output2"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStacker":{"prefab":{"prefabName":"StructureStacker","prefabHash":-2020231820,"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.","name":"Stacker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Output":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Automatic","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Processing","typ":"None"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStackerReverse":{"prefab":{"prefabName":"StructureStackerReverse","prefabHash":1585641623,"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.","name":"Stacker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Output":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Automatic","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStairs4x2":{"prefab":{"prefabName":"StructureStairs4x2","prefabHash":1405018945,"desc":"","name":"Stairs"},"structure":{"smallGrid":false}},"StructureStairs4x2RailL":{"prefab":{"prefabName":"StructureStairs4x2RailL","prefabHash":155214029,"desc":"","name":"Stairs with Rail (Left)"},"structure":{"smallGrid":false}},"StructureStairs4x2RailR":{"prefab":{"prefabName":"StructureStairs4x2RailR","prefabHash":-212902482,"desc":"","name":"Stairs with Rail (Right)"},"structure":{"smallGrid":false}},"StructureStairs4x2Rails":{"prefab":{"prefabName":"StructureStairs4x2Rails","prefabHash":-1088008720,"desc":"","name":"Stairs with Rails"},"structure":{"smallGrid":false}},"StructureStairwellBackLeft":{"prefab":{"prefabName":"StructureStairwellBackLeft","prefabHash":505924160,"desc":"","name":"Stairwell (Back Left)"},"structure":{"smallGrid":false}},"StructureStairwellBackPassthrough":{"prefab":{"prefabName":"StructureStairwellBackPassthrough","prefabHash":-862048392,"desc":"","name":"Stairwell (Back Passthrough)"},"structure":{"smallGrid":false}},"StructureStairwellBackRight":{"prefab":{"prefabName":"StructureStairwellBackRight","prefabHash":-2128896573,"desc":"","name":"Stairwell (Back Right)"},"structure":{"smallGrid":false}},"StructureStairwellFrontLeft":{"prefab":{"prefabName":"StructureStairwellFrontLeft","prefabHash":-37454456,"desc":"","name":"Stairwell (Front Left)"},"structure":{"smallGrid":false}},"StructureStairwellFrontPassthrough":{"prefab":{"prefabName":"StructureStairwellFrontPassthrough","prefabHash":-1625452928,"desc":"","name":"Stairwell (Front Passthrough)"},"structure":{"smallGrid":false}},"StructureStairwellFrontRight":{"prefab":{"prefabName":"StructureStairwellFrontRight","prefabHash":340210934,"desc":"","name":"Stairwell (Front Right)"},"structure":{"smallGrid":false}},"StructureStairwellNoDoors":{"prefab":{"prefabName":"StructureStairwellNoDoors","prefabHash":2049879875,"desc":"","name":"Stairwell (No Doors)"},"structure":{"smallGrid":false}},"StructureStirlingEngine":{"prefab":{"prefabName":"StructureStirlingEngine","prefabHash":-260316435,"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.","name":"Stirling Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Combustion":"Read","EnvironmentEfficiency":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStorageLocker":{"prefab":{"prefabName":"StructureStorageLocker","prefabHash":-793623899,"desc":"","name":"Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSuitStorage":{"prefab":{"prefabName":"StructureSuitStorage","prefabHash":255034731,"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.","name":"Suit Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Helmet","typ":"Helmet"},{"name":"Suit","typ":"Suit"},{"name":"Back","typ":"Back"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTankBig":{"prefab":{"prefabName":"StructureTankBig","prefabHash":-1606848156,"desc":"","name":"Large Tank"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankBigInsulated":{"prefab":{"prefabName":"StructureTankBigInsulated","prefabHash":1280378227,"desc":"","name":"Tank Big (Insulated)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankConnector":{"prefab":{"prefabName":"StructureTankConnector","prefabHash":-1276379454,"desc":"Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network.","name":"Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructureTankConnectorLiquid":{"prefab":{"prefabName":"StructureTankConnectorLiquid","prefabHash":1331802518,"desc":"These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network.","name":"Liquid Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureTankSmall":{"prefab":{"prefabName":"StructureTankSmall","prefabHash":1013514688,"desc":"","name":"Small Tank"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallAir":{"prefab":{"prefabName":"StructureTankSmallAir","prefabHash":955744474,"desc":"","name":"Small Tank (Air)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallFuel":{"prefab":{"prefabName":"StructureTankSmallFuel","prefabHash":2102454415,"desc":"","name":"Small Tank (Fuel)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallInsulated":{"prefab":{"prefabName":"StructureTankSmallInsulated","prefabHash":272136332,"desc":"","name":"Tank Small (Insulated)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureToolManufactory":{"prefab":{"prefabName":"StructureToolManufactory","prefabHash":-465741100,"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.","name":"Tool Manufactory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureTorpedoRack":{"prefab":{"prefabName":"StructureTorpedoRack","prefabHash":1473807953,"desc":"","name":"Torpedo Rack"},"structure":{"smallGrid":true},"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"}]},"StructureTraderWaypoint":{"prefab":{"prefabName":"StructureTraderWaypoint","prefabHash":1570931620,"desc":"","name":"Trader Waypoint"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformer":{"prefab":{"prefabName":"StructureTransformer","prefabHash":-1423212473,"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.","name":"Transformer (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerMedium":{"prefab":{"prefabName":"StructureTransformerMedium","prefabHash":-1065725831,"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.","name":"Transformer (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerMediumReversed":{"prefab":{"prefabName":"StructureTransformerMediumReversed","prefabHash":833912764,"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.","name":"Transformer Reversed (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerSmall":{"prefab":{"prefabName":"StructureTransformerSmall","prefabHash":-890946730,"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.","name":"Transformer (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerSmallReversed":{"prefab":{"prefabName":"StructureTransformerSmallReversed","prefabHash":1054059374,"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.","name":"Transformer Reversed (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTurbineGenerator":{"prefab":{"prefabName":"StructureTurbineGenerator","prefabHash":1282191063,"desc":"","name":"Turbine Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureTurboVolumePump":{"prefab":{"prefabName":"StructureTurboVolumePump","prefabHash":1310794736,"desc":"Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Right","1":"Left"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureUnloader":{"prefab":{"prefabName":"StructureUnloader","prefabHash":750118160,"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.","name":"Unloader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Output":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Automatic","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureUprightWindTurbine":{"prefab":{"prefabName":"StructureUprightWindTurbine","prefabHash":1622183451,"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.","name":"Upright Wind Turbine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureValve":{"prefab":{"prefabName":"StructureValve","prefabHash":-692036078,"desc":"","name":"Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureVendingMachine":{"prefab":{"prefabName":"StructureVendingMachine","prefabHash":-443130773,"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.","name":"Vending Machine"},"structure":{"smallGrid":true},"logic":{"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":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","Ratio":"Read","ReferenceId":"Read","RequestHash":"ReadWrite","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureVolumePump":{"prefab":{"prefabName":"StructureVolumePump","prefabHash":-321403609,"desc":"The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks.","name":"Volume Pump"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallArch":{"prefab":{"prefabName":"StructureWallArch","prefabHash":-858143148,"desc":"","name":"Wall (Arch)"},"structure":{"smallGrid":false}},"StructureWallArchArrow":{"prefab":{"prefabName":"StructureWallArchArrow","prefabHash":1649708822,"desc":"","name":"Wall (Arch Arrow)"},"structure":{"smallGrid":false}},"StructureWallArchCornerRound":{"prefab":{"prefabName":"StructureWallArchCornerRound","prefabHash":1794588890,"desc":"","name":"Wall (Arch Corner Round)"},"structure":{"smallGrid":true}},"StructureWallArchCornerSquare":{"prefab":{"prefabName":"StructureWallArchCornerSquare","prefabHash":-1963016580,"desc":"","name":"Wall (Arch Corner Square)"},"structure":{"smallGrid":true}},"StructureWallArchCornerTriangle":{"prefab":{"prefabName":"StructureWallArchCornerTriangle","prefabHash":1281911841,"desc":"","name":"Wall (Arch Corner Triangle)"},"structure":{"smallGrid":true}},"StructureWallArchPlating":{"prefab":{"prefabName":"StructureWallArchPlating","prefabHash":1182510648,"desc":"","name":"Wall (Arch Plating)"},"structure":{"smallGrid":false}},"StructureWallArchTwoTone":{"prefab":{"prefabName":"StructureWallArchTwoTone","prefabHash":782529714,"desc":"","name":"Wall (Arch Two Tone)"},"structure":{"smallGrid":false}},"StructureWallCooler":{"prefab":{"prefabName":"StructureWallCooler","prefabHash":-739292323,"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.","name":"Wall Cooler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Pipe","role":"None"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallFlat":{"prefab":{"prefabName":"StructureWallFlat","prefabHash":1635864154,"desc":"","name":"Wall (Flat)"},"structure":{"smallGrid":false}},"StructureWallFlatCornerRound":{"prefab":{"prefabName":"StructureWallFlatCornerRound","prefabHash":898708250,"desc":"","name":"Wall (Flat Corner Round)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerSquare":{"prefab":{"prefabName":"StructureWallFlatCornerSquare","prefabHash":298130111,"desc":"","name":"Wall (Flat Corner Square)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerTriangle":{"prefab":{"prefabName":"StructureWallFlatCornerTriangle","prefabHash":2097419366,"desc":"","name":"Wall (Flat Corner Triangle)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerTriangleFlat":{"prefab":{"prefabName":"StructureWallFlatCornerTriangleFlat","prefabHash":-1161662836,"desc":"","name":"Wall (Flat Corner Triangle Flat)"},"structure":{"smallGrid":true}},"StructureWallGeometryCorner":{"prefab":{"prefabName":"StructureWallGeometryCorner","prefabHash":1979212240,"desc":"","name":"Wall (Geometry Corner)"},"structure":{"smallGrid":false}},"StructureWallGeometryStreight":{"prefab":{"prefabName":"StructureWallGeometryStreight","prefabHash":1049735537,"desc":"","name":"Wall (Geometry Straight)"},"structure":{"smallGrid":false}},"StructureWallGeometryT":{"prefab":{"prefabName":"StructureWallGeometryT","prefabHash":1602758612,"desc":"","name":"Wall (Geometry T)"},"structure":{"smallGrid":false}},"StructureWallGeometryTMirrored":{"prefab":{"prefabName":"StructureWallGeometryTMirrored","prefabHash":-1427845483,"desc":"","name":"Wall (Geometry T Mirrored)"},"structure":{"smallGrid":false}},"StructureWallHeater":{"prefab":{"prefabName":"StructureWallHeater","prefabHash":24258244,"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.","name":"Wall Heater"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallIron":{"prefab":{"prefabName":"StructureWallIron","prefabHash":1287324802,"desc":"","name":"Iron Wall (Type 1)"},"structure":{"smallGrid":false}},"StructureWallIron02":{"prefab":{"prefabName":"StructureWallIron02","prefabHash":1485834215,"desc":"","name":"Iron Wall (Type 2)"},"structure":{"smallGrid":false}},"StructureWallIron03":{"prefab":{"prefabName":"StructureWallIron03","prefabHash":798439281,"desc":"","name":"Iron Wall (Type 3)"},"structure":{"smallGrid":false}},"StructureWallIron04":{"prefab":{"prefabName":"StructureWallIron04","prefabHash":-1309433134,"desc":"","name":"Iron Wall (Type 4)"},"structure":{"smallGrid":false}},"StructureWallLargePanel":{"prefab":{"prefabName":"StructureWallLargePanel","prefabHash":1492930217,"desc":"","name":"Wall (Large Panel)"},"structure":{"smallGrid":false}},"StructureWallLargePanelArrow":{"prefab":{"prefabName":"StructureWallLargePanelArrow","prefabHash":-776581573,"desc":"","name":"Wall (Large Panel Arrow)"},"structure":{"smallGrid":false}},"StructureWallLight":{"prefab":{"prefabName":"StructureWallLight","prefabHash":-1860064656,"desc":"","name":"Wall Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallLightBattery":{"prefab":{"prefabName":"StructureWallLightBattery","prefabHash":-1306415132,"desc":"","name":"Wall Light (Battery)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallPaddedArch":{"prefab":{"prefabName":"StructureWallPaddedArch","prefabHash":1590330637,"desc":"","name":"Wall (Padded Arch)"},"structure":{"smallGrid":false}},"StructureWallPaddedArchCorner":{"prefab":{"prefabName":"StructureWallPaddedArchCorner","prefabHash":-1126688298,"desc":"","name":"Wall (Padded Arch Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedArchLightFittingTop":{"prefab":{"prefabName":"StructureWallPaddedArchLightFittingTop","prefabHash":1171987947,"desc":"","name":"Wall (Padded Arch Light Fitting Top)"},"structure":{"smallGrid":false}},"StructureWallPaddedArchLightsFittings":{"prefab":{"prefabName":"StructureWallPaddedArchLightsFittings","prefabHash":-1546743960,"desc":"","name":"Wall (Padded Arch Lights Fittings)"},"structure":{"smallGrid":false}},"StructureWallPaddedCorner":{"prefab":{"prefabName":"StructureWallPaddedCorner","prefabHash":-155945899,"desc":"","name":"Wall (Padded Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedCornerThin":{"prefab":{"prefabName":"StructureWallPaddedCornerThin","prefabHash":1183203913,"desc":"","name":"Wall (Padded Corner Thin)"},"structure":{"smallGrid":true}},"StructureWallPaddedNoBorder":{"prefab":{"prefabName":"StructureWallPaddedNoBorder","prefabHash":8846501,"desc":"","name":"Wall (Padded No Border)"},"structure":{"smallGrid":false}},"StructureWallPaddedNoBorderCorner":{"prefab":{"prefabName":"StructureWallPaddedNoBorderCorner","prefabHash":179694804,"desc":"","name":"Wall (Padded No Border Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedThinNoBorder":{"prefab":{"prefabName":"StructureWallPaddedThinNoBorder","prefabHash":-1611559100,"desc":"","name":"Wall (Padded Thin No Border)"},"structure":{"smallGrid":false}},"StructureWallPaddedThinNoBorderCorner":{"prefab":{"prefabName":"StructureWallPaddedThinNoBorderCorner","prefabHash":1769527556,"desc":"","name":"Wall (Padded Thin No Border Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedWindow":{"prefab":{"prefabName":"StructureWallPaddedWindow","prefabHash":2087628940,"desc":"","name":"Wall (Padded Window)"},"structure":{"smallGrid":false}},"StructureWallPaddedWindowThin":{"prefab":{"prefabName":"StructureWallPaddedWindowThin","prefabHash":-37302931,"desc":"","name":"Wall (Padded Window Thin)"},"structure":{"smallGrid":false}},"StructureWallPadding":{"prefab":{"prefabName":"StructureWallPadding","prefabHash":635995024,"desc":"","name":"Wall (Padding)"},"structure":{"smallGrid":false}},"StructureWallPaddingArchVent":{"prefab":{"prefabName":"StructureWallPaddingArchVent","prefabHash":-1243329828,"desc":"","name":"Wall (Padding Arch Vent)"},"structure":{"smallGrid":false}},"StructureWallPaddingLightFitting":{"prefab":{"prefabName":"StructureWallPaddingLightFitting","prefabHash":2024882687,"desc":"","name":"Wall (Padding Light Fitting)"},"structure":{"smallGrid":false}},"StructureWallPaddingThin":{"prefab":{"prefabName":"StructureWallPaddingThin","prefabHash":-1102403554,"desc":"","name":"Wall (Padding Thin)"},"structure":{"smallGrid":false}},"StructureWallPlating":{"prefab":{"prefabName":"StructureWallPlating","prefabHash":26167457,"desc":"","name":"Wall (Plating)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsAndHatch":{"prefab":{"prefabName":"StructureWallSmallPanelsAndHatch","prefabHash":619828719,"desc":"","name":"Wall (Small Panels And Hatch)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsArrow":{"prefab":{"prefabName":"StructureWallSmallPanelsArrow","prefabHash":-639306697,"desc":"","name":"Wall (Small Panels Arrow)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsMonoChrome":{"prefab":{"prefabName":"StructureWallSmallPanelsMonoChrome","prefabHash":386820253,"desc":"","name":"Wall (Small Panels Mono Chrome)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsOpen":{"prefab":{"prefabName":"StructureWallSmallPanelsOpen","prefabHash":-1407480603,"desc":"","name":"Wall (Small Panels Open)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsTwoTone":{"prefab":{"prefabName":"StructureWallSmallPanelsTwoTone","prefabHash":1709994581,"desc":"","name":"Wall (Small Panels Two Tone)"},"structure":{"smallGrid":false}},"StructureWallVent":{"prefab":{"prefabName":"StructureWallVent","prefabHash":-1177469307,"desc":"Used to mix atmospheres passively between two walls.","name":"Wall Vent"},"structure":{"smallGrid":true}},"StructureWaterBottleFiller":{"prefab":{"prefabName":"StructureWaterBottleFiller","prefabHash":-1178961954,"desc":"","name":"Water Bottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerBottom":{"prefab":{"prefabName":"StructureWaterBottleFillerBottom","prefabHash":1433754995,"desc":"","name":"Water Bottle Filler Bottom"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerPowered":{"prefab":{"prefabName":"StructureWaterBottleFillerPowered","prefabHash":-756587791,"desc":"","name":"Waterbottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerPoweredBottom":{"prefab":{"prefabName":"StructureWaterBottleFillerPoweredBottom","prefabHash":1986658780,"desc":"","name":"Waterbottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterDigitalValve":{"prefab":{"prefabName":"StructureWaterDigitalValve","prefabHash":-517628750,"desc":"","name":"Liquid Digital Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterPipeMeter":{"prefab":{"prefabName":"StructureWaterPipeMeter","prefabHash":433184168,"desc":"","name":"Liquid Pipe Meter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterPurifier":{"prefab":{"prefabName":"StructureWaterPurifier","prefabHash":887383294,"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.","name":"Water Purifier"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterWallCooler":{"prefab":{"prefabName":"StructureWaterWallCooler","prefabHash":-1369060582,"desc":"","name":"Liquid Wall Cooler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWeatherStation":{"prefab":{"prefabName":"StructureWeatherStation","prefabHash":1997212478,"desc":"0.NoStorm\n1.StormIncoming\n2.InStorm","name":"Weather Station"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","Mode":"Read","NameHash":"Read","NextWeatherEventTime":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"NoStorm","1":"StormIncoming","2":"InStorm"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWindTurbine":{"prefab":{"prefabName":"StructureWindTurbine","prefabHash":-2082355173,"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.","name":"Wind Turbine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWindowShutter":{"prefab":{"prefabName":"StructureWindowShutter","prefabHash":2056377335,"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.","name":"Window Shutter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Idle":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"ToolPrinterMod":{"prefab":{"prefabName":"ToolPrinterMod","prefabHash":1700018136,"desc":"Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Tool Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ToyLuna":{"prefab":{"prefabName":"ToyLuna","prefabHash":94730034,"desc":"","name":"Toy Luna"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"UniformCommander":{"prefab":{"prefabName":"UniformCommander","prefabHash":-2083426457,"desc":"","name":"Uniform Commander"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformMarine":{"prefab":{"prefabName":"UniformMarine","prefabHash":-48342840,"desc":"","name":"Marine Uniform"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformOrangeJumpSuit":{"prefab":{"prefabName":"UniformOrangeJumpSuit","prefabHash":810053150,"desc":"","name":"Jump Suit (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"WeaponEnergy":{"prefab":{"prefabName":"WeaponEnergy","prefabHash":789494694,"desc":"","name":"Weapon Energy"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponPistolEnergy":{"prefab":{"prefabName":"WeaponPistolEnergy","prefabHash":-385323479,"desc":"0.Stun\n1.Kill","name":"Energy Pistol"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponRifleEnergy":{"prefab":{"prefabName":"WeaponRifleEnergy","prefabHash":1154745374,"desc":"0.Stun\n1.Kill","name":"Energy Rifle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponTorpedo":{"prefab":{"prefabName":"WeaponTorpedo","prefabHash":-1102977898,"desc":"","name":"Torpedo"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Torpedo","sortingClass":"Default"}}},"reagents":{"Alcohol":{"Hash":1565803737,"Unit":"ml","Sources":null},"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}},"Cocoa":{"Hash":678781198,"Unit":"g","Sources":{"ItemCocoaPowder":1.0,"ItemCocoaTree":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","Sources":null},"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","Sources":null},"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}},"Sugar":{"Hash":1778746875,"Unit":"g","Sources":{"ItemSugar":10.0,"ItemSugarCane":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}}},"enums":{"scriptEnums":{"LogicBatchMethod":{"enumName":"LogicBatchMethod","values":{"Average":{"value":0,"deprecated":false,"description":""},"Maximum":{"value":3,"deprecated":false,"description":""},"Minimum":{"value":2,"deprecated":false,"description":""},"Sum":{"value":1,"deprecated":false,"description":""}}},"LogicReagentMode":{"enumName":"LogicReagentMode","values":{"Contents":{"value":0,"deprecated":false,"description":""},"Recipe":{"value":2,"deprecated":false,"description":""},"Required":{"value":1,"deprecated":false,"description":""},"TotalContents":{"value":3,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NameHash":{"value":268,"deprecated":false,"description":"Provides the hash value for the name of the object as a 32 bit integer."},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}}},"basicEnums":{"AirCon":{"enumName":"AirConditioningMode","values":{"Cold":{"value":0,"deprecated":false,"description":""},"Hot":{"value":1,"deprecated":false,"description":""}}},"AirControl":{"enumName":"AirControlMode","values":{"Draught":{"value":4,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Offline":{"value":1,"deprecated":false,"description":""},"Pressure":{"value":2,"deprecated":false,"description":""}}},"Color":{"enumName":"ColorType","values":{"Black":{"value":7,"deprecated":false,"description":""},"Blue":{"value":0,"deprecated":false,"description":""},"Brown":{"value":8,"deprecated":false,"description":""},"Gray":{"value":1,"deprecated":false,"description":""},"Green":{"value":2,"deprecated":false,"description":""},"Khaki":{"value":9,"deprecated":false,"description":""},"Orange":{"value":3,"deprecated":false,"description":""},"Pink":{"value":10,"deprecated":false,"description":""},"Purple":{"value":11,"deprecated":false,"description":""},"Red":{"value":4,"deprecated":false,"description":""},"White":{"value":6,"deprecated":false,"description":""},"Yellow":{"value":5,"deprecated":false,"description":""}}},"DaylightSensorMode":{"enumName":"DaylightSensorMode","values":{"Default":{"value":0,"deprecated":false,"description":""},"Horizontal":{"value":1,"deprecated":false,"description":""},"Vertical":{"value":2,"deprecated":false,"description":""}}},"ElevatorMode":{"enumName":"ElevatorMode","values":{"Downward":{"value":2,"deprecated":false,"description":""},"Stationary":{"value":0,"deprecated":false,"description":""},"Upward":{"value":1,"deprecated":false,"description":""}}},"EntityState":{"enumName":"EntityState","values":{"Alive":{"value":0,"deprecated":false,"description":""},"Dead":{"value":1,"deprecated":false,"description":""},"Decay":{"value":3,"deprecated":false,"description":""},"Unconscious":{"value":2,"deprecated":false,"description":""}}},"GasType":{"enumName":"GasType","values":{"CarbonDioxide":{"value":4,"deprecated":false,"description":""},"Hydrogen":{"value":16384,"deprecated":false,"description":""},"LiquidCarbonDioxide":{"value":2048,"deprecated":false,"description":""},"LiquidHydrogen":{"value":32768,"deprecated":false,"description":""},"LiquidNitrogen":{"value":128,"deprecated":false,"description":""},"LiquidNitrousOxide":{"value":8192,"deprecated":false,"description":""},"LiquidOxygen":{"value":256,"deprecated":false,"description":""},"LiquidPollutant":{"value":4096,"deprecated":false,"description":""},"LiquidVolatiles":{"value":512,"deprecated":false,"description":""},"Nitrogen":{"value":2,"deprecated":false,"description":""},"NitrousOxide":{"value":64,"deprecated":false,"description":""},"Oxygen":{"value":1,"deprecated":false,"description":""},"Pollutant":{"value":16,"deprecated":false,"description":""},"PollutedWater":{"value":65536,"deprecated":false,"description":""},"Steam":{"value":1024,"deprecated":false,"description":""},"Undefined":{"value":0,"deprecated":false,"description":""},"Volatiles":{"value":8,"deprecated":false,"description":""},"Water":{"value":32,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NameHash":{"value":268,"deprecated":false,"description":"Provides the hash value for the name of the object as a 32 bit integer."},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}},"PowerMode":{"enumName":"PowerMode","values":{"Charged":{"value":4,"deprecated":false,"description":""},"Charging":{"value":3,"deprecated":false,"description":""},"Discharged":{"value":1,"deprecated":false,"description":""},"Discharging":{"value":2,"deprecated":false,"description":""},"Idle":{"value":0,"deprecated":false,"description":""}}},"PrinterInstruction":{"enumName":"PrinterInstruction","values":{"DeviceSetLock":{"value":6,"deprecated":false,"description":""},"EjectAllReagents":{"value":8,"deprecated":false,"description":""},"EjectReagent":{"value":7,"deprecated":false,"description":""},"ExecuteRecipe":{"value":2,"deprecated":false,"description":""},"JumpIfNextInvalid":{"value":4,"deprecated":false,"description":""},"JumpToAddress":{"value":5,"deprecated":false,"description":""},"MissingRecipeReagent":{"value":9,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"StackPointer":{"value":1,"deprecated":false,"description":""},"WaitUntilNextValid":{"value":3,"deprecated":false,"description":""}}},"ReEntryProfile":{"enumName":"ReEntryProfile","values":{"High":{"value":3,"deprecated":false,"description":""},"Max":{"value":4,"deprecated":false,"description":""},"Medium":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Optimal":{"value":1,"deprecated":false,"description":""}}},"RobotMode":{"enumName":"RobotMode","values":{"Follow":{"value":1,"deprecated":false,"description":""},"MoveToTarget":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"PathToTarget":{"value":5,"deprecated":false,"description":""},"Roam":{"value":3,"deprecated":false,"description":""},"StorageFull":{"value":6,"deprecated":false,"description":""},"Unload":{"value":4,"deprecated":false,"description":""}}},"RocketMode":{"enumName":"RocketMode","values":{"Chart":{"value":5,"deprecated":false,"description":""},"Discover":{"value":4,"deprecated":false,"description":""},"Invalid":{"value":0,"deprecated":false,"description":""},"Mine":{"value":2,"deprecated":false,"description":""},"None":{"value":1,"deprecated":false,"description":""},"Survey":{"value":3,"deprecated":false,"description":""}}},"SlotClass":{"enumName":"Class","values":{"AccessCard":{"value":22,"deprecated":false,"description":""},"Appliance":{"value":18,"deprecated":false,"description":""},"Back":{"value":3,"deprecated":false,"description":""},"Battery":{"value":14,"deprecated":false,"description":""},"Belt":{"value":16,"deprecated":false,"description":""},"Blocked":{"value":38,"deprecated":false,"description":""},"Bottle":{"value":25,"deprecated":false,"description":""},"Cartridge":{"value":21,"deprecated":false,"description":""},"Circuit":{"value":24,"deprecated":false,"description":""},"Circuitboard":{"value":7,"deprecated":false,"description":""},"CreditCard":{"value":28,"deprecated":false,"description":""},"DataDisk":{"value":8,"deprecated":false,"description":""},"DirtCanister":{"value":29,"deprecated":false,"description":""},"DrillHead":{"value":35,"deprecated":false,"description":""},"Egg":{"value":15,"deprecated":false,"description":""},"Entity":{"value":13,"deprecated":false,"description":""},"Flare":{"value":37,"deprecated":false,"description":""},"GasCanister":{"value":5,"deprecated":false,"description":""},"GasFilter":{"value":4,"deprecated":false,"description":""},"Glasses":{"value":27,"deprecated":false,"description":""},"Helmet":{"value":1,"deprecated":false,"description":""},"Ingot":{"value":19,"deprecated":false,"description":""},"LiquidBottle":{"value":32,"deprecated":false,"description":""},"LiquidCanister":{"value":31,"deprecated":false,"description":""},"Magazine":{"value":23,"deprecated":false,"description":""},"Motherboard":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Ore":{"value":10,"deprecated":false,"description":""},"Organ":{"value":9,"deprecated":false,"description":""},"Plant":{"value":11,"deprecated":false,"description":""},"ProgrammableChip":{"value":26,"deprecated":false,"description":""},"ScanningHead":{"value":36,"deprecated":false,"description":""},"SensorProcessingUnit":{"value":30,"deprecated":false,"description":""},"SoundCartridge":{"value":34,"deprecated":false,"description":""},"Suit":{"value":2,"deprecated":false,"description":""},"SuitMod":{"value":39,"deprecated":false,"description":""},"Tool":{"value":17,"deprecated":false,"description":""},"Torpedo":{"value":20,"deprecated":false,"description":""},"Uniform":{"value":12,"deprecated":false,"description":""},"Wreckage":{"value":33,"deprecated":false,"description":""}}},"SorterInstruction":{"enumName":"SorterInstruction","values":{"FilterPrefabHashEquals":{"value":1,"deprecated":false,"description":""},"FilterPrefabHashNotEquals":{"value":2,"deprecated":false,"description":""},"FilterQuantityCompare":{"value":5,"deprecated":false,"description":""},"FilterSlotTypeCompare":{"value":4,"deprecated":false,"description":""},"FilterSortingClassCompare":{"value":3,"deprecated":false,"description":""},"LimitNextExecutionByCount":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""}}},"SortingClass":{"enumName":"SortingClass","values":{"Appliances":{"value":6,"deprecated":false,"description":""},"Atmospherics":{"value":7,"deprecated":false,"description":""},"Clothing":{"value":5,"deprecated":false,"description":""},"Default":{"value":0,"deprecated":false,"description":""},"Food":{"value":4,"deprecated":false,"description":""},"Ices":{"value":10,"deprecated":false,"description":""},"Kits":{"value":1,"deprecated":false,"description":""},"Ores":{"value":9,"deprecated":false,"description":""},"Resources":{"value":3,"deprecated":false,"description":""},"Storage":{"value":8,"deprecated":false,"description":""},"Tools":{"value":2,"deprecated":false,"description":""}}},"Sound":{"enumName":"SoundAlert","values":{"AirlockCycling":{"value":22,"deprecated":false,"description":""},"Alarm1":{"value":45,"deprecated":false,"description":""},"Alarm10":{"value":12,"deprecated":false,"description":""},"Alarm11":{"value":13,"deprecated":false,"description":""},"Alarm12":{"value":14,"deprecated":false,"description":""},"Alarm2":{"value":1,"deprecated":false,"description":""},"Alarm3":{"value":2,"deprecated":false,"description":""},"Alarm4":{"value":3,"deprecated":false,"description":""},"Alarm5":{"value":4,"deprecated":false,"description":""},"Alarm6":{"value":5,"deprecated":false,"description":""},"Alarm7":{"value":6,"deprecated":false,"description":""},"Alarm8":{"value":10,"deprecated":false,"description":""},"Alarm9":{"value":11,"deprecated":false,"description":""},"Alert":{"value":17,"deprecated":false,"description":""},"Danger":{"value":15,"deprecated":false,"description":""},"Depressurising":{"value":20,"deprecated":false,"description":""},"FireFireFire":{"value":28,"deprecated":false,"description":""},"Five":{"value":33,"deprecated":false,"description":""},"Floor":{"value":34,"deprecated":false,"description":""},"Four":{"value":32,"deprecated":false,"description":""},"HaltWhoGoesThere":{"value":27,"deprecated":false,"description":""},"HighCarbonDioxide":{"value":44,"deprecated":false,"description":""},"IntruderAlert":{"value":19,"deprecated":false,"description":""},"LiftOff":{"value":36,"deprecated":false,"description":""},"MalfunctionDetected":{"value":26,"deprecated":false,"description":""},"Music1":{"value":7,"deprecated":false,"description":""},"Music2":{"value":8,"deprecated":false,"description":""},"Music3":{"value":9,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"One":{"value":29,"deprecated":false,"description":""},"PollutantsDetected":{"value":43,"deprecated":false,"description":""},"PowerLow":{"value":23,"deprecated":false,"description":""},"PressureHigh":{"value":39,"deprecated":false,"description":""},"PressureLow":{"value":40,"deprecated":false,"description":""},"Pressurising":{"value":21,"deprecated":false,"description":""},"RocketLaunching":{"value":35,"deprecated":false,"description":""},"StormIncoming":{"value":18,"deprecated":false,"description":""},"SystemFailure":{"value":24,"deprecated":false,"description":""},"TemperatureHigh":{"value":41,"deprecated":false,"description":""},"TemperatureLow":{"value":42,"deprecated":false,"description":""},"Three":{"value":31,"deprecated":false,"description":""},"TraderIncoming":{"value":37,"deprecated":false,"description":""},"TraderLanded":{"value":38,"deprecated":false,"description":""},"Two":{"value":30,"deprecated":false,"description":""},"Warning":{"value":16,"deprecated":false,"description":""},"Welcome":{"value":25,"deprecated":false,"description":""}}},"TransmitterMode":{"enumName":"LogicTransmitterMode","values":{"Active":{"value":1,"deprecated":false,"description":""},"Passive":{"value":0,"deprecated":false,"description":""}}},"Vent":{"enumName":"VentDirection","values":{"Inward":{"value":1,"deprecated":false,"description":""},"Outward":{"value":0,"deprecated":false,"description":""}}},"_unnamed":{"enumName":"ConditionOperation","values":{"Equals":{"value":0,"deprecated":false,"description":""},"Greater":{"value":1,"deprecated":false,"description":""},"Less":{"value":2,"deprecated":false,"description":""},"NotEquals":{"value":3,"deprecated":false,"description":""}}}}},"prefabsByHash":{"-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","-1884103228":"SeedBag_SugarCane","-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","-1351081801":"StructureLargeHangerDoor","-1348105509":"ItemGoldOre","-1344601965":"ItemCannedMushroom","-1339716113":"AppliancePaintMixer","-1339479035":"AccessCardGray","-1337091041":"StructureChuteDigitalValveRight","-1335056202":"ItemSugarCane","-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","-1108244510":"ItemPlainCake","-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","-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","-261575861":"ItemChocolateCake","-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","234601764":"ItemChocolateBar","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","457286516":"ItemCocoaPowder","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","680051921":"ItemCocoaTree","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","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","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","860793245":"ItemChocolateCerealBar","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","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","1139887531":"SeedBag_Cocoa","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","1604261183":"ItemJetpackTurbine","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","2111910840":"ItemSugar","2130739600":"DynamicMKIILiquidCanisterEmpty","2131916219":"ItemSpaceOre","2133035682":"ItemKitStandardChute","2134172356":"StructureInsulatedPipeStraight","2134647745":"ItemLeadIngot","2145068424":"ItemGasCanisterNitrogen"},"structures":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","Flag_ODA_10m","Flag_ODA_4m","Flag_ODA_6m","Flag_ODA_8m","H2Combustor","KitchenTableShort","KitchenTableSimpleShort","KitchenTableSimpleTall","KitchenTableTall","Landingpad_2x2CenterPiece01","Landingpad_BlankPiece","Landingpad_CenterPiece01","Landingpad_CrossPiece","Landingpad_DataConnectionPiece","Landingpad_DiagonalPiece01","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_GasCylinderTankPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_StraightPiece01","Landingpad_TaxiPieceCorner","Landingpad_TaxiPieceHold","Landingpad_TaxiPieceStraight","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","RailingElegant01","RailingElegant02","RailingIndustrial02","RespawnPoint","RespawnPointWallMounted","Rover_MkI_build_states","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureBlocker","StructureCableAnalysizer","StructureCableCorner","StructureCableCorner3","StructureCableCorner3Burnt","StructureCableCorner3HBurnt","StructureCableCorner4","StructureCableCorner4Burnt","StructureCableCorner4HBurnt","StructureCableCornerBurnt","StructureCableCornerH","StructureCableCornerH3","StructureCableCornerH4","StructureCableCornerHBurnt","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCableJunction","StructureCableJunction4","StructureCableJunction4Burnt","StructureCableJunction4HBurnt","StructureCableJunction5","StructureCableJunction5Burnt","StructureCableJunction6","StructureCableJunction6Burnt","StructureCableJunction6HBurnt","StructureCableJunctionBurnt","StructureCableJunctionH","StructureCableJunctionH4","StructureCableJunctionH5","StructureCableJunctionH5Burnt","StructureCableJunctionH6","StructureCableJunctionHBurnt","StructureCableStraight","StructureCableStraightBurnt","StructureCableStraightH","StructureCableStraightHBurnt","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteCorner","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteFlipFlopSplitter","StructureChuteInlet","StructureChuteJunction","StructureChuteOutlet","StructureChuteOverflow","StructureChuteStraight","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureChuteValve","StructureChuteWindow","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeCladdingAngled","StructureCompositeCladdingAngledCorner","StructureCompositeCladdingAngledCornerInner","StructureCompositeCladdingAngledCornerInnerLong","StructureCompositeCladdingAngledCornerInnerLongL","StructureCompositeCladdingAngledCornerInnerLongR","StructureCompositeCladdingAngledCornerLong","StructureCompositeCladdingAngledCornerLongR","StructureCompositeCladdingAngledLong","StructureCompositeCladdingCylindrical","StructureCompositeCladdingCylindricalPanel","StructureCompositeCladdingPanel","StructureCompositeCladdingRounded","StructureCompositeCladdingRoundedCorner","StructureCompositeCladdingRoundedCornerInner","StructureCompositeCladdingSpherical","StructureCompositeCladdingSphericalCap","StructureCompositeCladdingSphericalCorner","StructureCompositeDoor","StructureCompositeFloorGrating","StructureCompositeFloorGrating2","StructureCompositeFloorGrating3","StructureCompositeFloorGrating4","StructureCompositeFloorGratingOpen","StructureCompositeFloorGratingOpenRotated","StructureCompositeWall","StructureCompositeWall02","StructureCompositeWall03","StructureCompositeWall04","StructureCompositeWindow","StructureCompositeWindowIron","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCrateMount","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEngineMountTypeA1","StructureEvaporationChamber","StructureExpansionValve","StructureFairingTypeA1","StructureFairingTypeA2","StructureFairingTypeA3","StructureFiltration","StructureFlagSmall","StructureFlashingLight","StructureFlatBench","StructureFloorDrain","StructureFrame","StructureFrameCorner","StructureFrameCornerCut","StructureFrameIron","StructureFrameSide","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureFuselageTypeA1","StructureFuselageTypeA2","StructureFuselageTypeA4","StructureFuselageTypeC5","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTray","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInLineTankGas1x1","StructureInLineTankGas1x2","StructureInLineTankLiquid1x1","StructureInLineTankLiquid1x2","StructureInsulatedInLineTankGas1x1","StructureInsulatedInLineTankGas1x2","StructureInsulatedInLineTankLiquid1x1","StructureInsulatedInLineTankLiquid1x2","StructureInsulatedPipeCorner","StructureInsulatedPipeCrossJunction","StructureInsulatedPipeCrossJunction3","StructureInsulatedPipeCrossJunction4","StructureInsulatedPipeCrossJunction5","StructureInsulatedPipeCrossJunction6","StructureInsulatedPipeLiquidCorner","StructureInsulatedPipeLiquidCrossJunction","StructureInsulatedPipeLiquidCrossJunction4","StructureInsulatedPipeLiquidCrossJunction5","StructureInsulatedPipeLiquidCrossJunction6","StructureInsulatedPipeLiquidStraight","StructureInsulatedPipeLiquidTJunction","StructureInsulatedPipeStraight","StructureInsulatedPipeTJunction","StructureInsulatedTankConnector","StructureInsulatedTankConnectorLiquid","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLadder","StructureLadderEnd","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLaunchMount","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassiveVent","StructurePassiveVentInsulated","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePictureFrameThickLandscapeLarge","StructurePictureFrameThickLandscapeSmall","StructurePictureFrameThickMountLandscapeLarge","StructurePictureFrameThickMountLandscapeSmall","StructurePictureFrameThickMountPortraitLarge","StructurePictureFrameThickMountPortraitSmall","StructurePictureFrameThickPortraitLarge","StructurePictureFrameThickPortraitSmall","StructurePictureFrameThinLandscapeLarge","StructurePictureFrameThinLandscapeSmall","StructurePictureFrameThinMountLandscapeLarge","StructurePictureFrameThinMountLandscapeSmall","StructurePictureFrameThinMountPortraitLarge","StructurePictureFrameThinMountPortraitSmall","StructurePictureFrameThinPortraitLarge","StructurePictureFrameThinPortraitSmall","StructurePipeAnalysizer","StructurePipeCorner","StructurePipeCowl","StructurePipeCrossJunction","StructurePipeCrossJunction3","StructurePipeCrossJunction4","StructurePipeCrossJunction5","StructurePipeCrossJunction6","StructurePipeHeater","StructurePipeIgniter","StructurePipeInsulatedLiquidCrossJunction","StructurePipeLabel","StructurePipeLiquidCorner","StructurePipeLiquidCrossJunction","StructurePipeLiquidCrossJunction3","StructurePipeLiquidCrossJunction4","StructurePipeLiquidCrossJunction5","StructurePipeLiquidCrossJunction6","StructurePipeLiquidStraight","StructurePipeLiquidTJunction","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeOrgan","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePipeStraight","StructurePipeTJunction","StructurePlanter","StructurePlatformLadderOpen","StructurePlinth","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRailing","StructureRecycler","StructureRefrigeratedVendingMachine","StructureReinforcedCompositeWindow","StructureReinforcedCompositeWindowSteel","StructureReinforcedWallPaddedWindow","StructureReinforcedWallPaddedWindowThin","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTower","StructureRocketTransformerSmall","StructureRover","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelf","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSmallTableBacklessDouble","StructureSmallTableBacklessSingle","StructureSmallTableDinnerSingle","StructureSmallTableRectangleDouble","StructureSmallTableRectangleSingle","StructureSmallTableThickDouble","StructureSmallTableThickSingle","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStairs4x2","StructureStairs4x2RailL","StructureStairs4x2RailR","StructureStairs4x2Rails","StructureStairwellBackLeft","StructureStairwellBackPassthrough","StructureStairwellBackRight","StructureStairwellFrontLeft","StructureStairwellFrontPassthrough","StructureStairwellFrontRight","StructureStairwellNoDoors","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankConnector","StructureTankConnectorLiquid","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTorpedoRack","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallArch","StructureWallArchArrow","StructureWallArchCornerRound","StructureWallArchCornerSquare","StructureWallArchCornerTriangle","StructureWallArchPlating","StructureWallArchTwoTone","StructureWallCooler","StructureWallFlat","StructureWallFlatCornerRound","StructureWallFlatCornerSquare","StructureWallFlatCornerTriangle","StructureWallFlatCornerTriangleFlat","StructureWallGeometryCorner","StructureWallGeometryStreight","StructureWallGeometryT","StructureWallGeometryTMirrored","StructureWallHeater","StructureWallIron","StructureWallIron02","StructureWallIron03","StructureWallIron04","StructureWallLargePanel","StructureWallLargePanelArrow","StructureWallLight","StructureWallLightBattery","StructureWallPaddedArch","StructureWallPaddedArchCorner","StructureWallPaddedArchLightFittingTop","StructureWallPaddedArchLightsFittings","StructureWallPaddedCorner","StructureWallPaddedCornerThin","StructureWallPaddedNoBorder","StructureWallPaddedNoBorderCorner","StructureWallPaddedThinNoBorder","StructureWallPaddedThinNoBorderCorner","StructureWallPaddedWindow","StructureWallPaddedWindowThin","StructureWallPadding","StructureWallPaddingArchVent","StructureWallPaddingLightFitting","StructureWallPaddingThin","StructureWallPlating","StructureWallSmallPanelsAndHatch","StructureWallSmallPanelsArrow","StructureWallSmallPanelsMonoChrome","StructureWallSmallPanelsOpen","StructureWallSmallPanelsTwoTone","StructureWallVent","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"devices":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","H2Combustor","Landingpad_DataConnectionPiece","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureCableAnalysizer","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteInlet","StructureChuteOutlet","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeDoor","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEvaporationChamber","StructureExpansionValve","StructureFiltration","StructureFlashingLight","StructureFlatBench","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePipeAnalysizer","StructurePipeHeater","StructurePipeIgniter","StructurePipeLabel","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRecycler","StructureRefrigeratedVendingMachine","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTransformerSmall","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallCooler","StructureWallHeater","StructureWallLight","StructureWallLightBattery","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"items":["AccessCardBlack","AccessCardBlue","AccessCardBrown","AccessCardGray","AccessCardGreen","AccessCardKhaki","AccessCardOrange","AccessCardPink","AccessCardPurple","AccessCardRed","AccessCardWhite","AccessCardYellow","ApplianceChemistryStation","ApplianceDeskLampLeft","ApplianceDeskLampRight","ApplianceMicrowave","AppliancePackagingMachine","AppliancePaintMixer","AppliancePlantGeneticAnalyzer","AppliancePlantGeneticSplicer","AppliancePlantGeneticStabilizer","ApplianceReagentProcessor","ApplianceSeedTray","ApplianceTabletDock","AutolathePrinterMod","Battery_Wireless_cell","Battery_Wireless_cell_Big","CardboardBox","CartridgeAccessController","CartridgeAtmosAnalyser","CartridgeConfiguration","CartridgeElectronicReader","CartridgeGPS","CartridgeGuide","CartridgeMedicalAnalyser","CartridgeNetworkAnalyser","CartridgeOreScanner","CartridgeOreScannerColor","CartridgePlantAnalyser","CartridgeTracker","CircuitboardAdvAirlockControl","CircuitboardAirControl","CircuitboardAirlockControl","CircuitboardCameraDisplay","CircuitboardDoorControl","CircuitboardGasDisplay","CircuitboardGraphDisplay","CircuitboardHashDisplay","CircuitboardModeControl","CircuitboardPowerControl","CircuitboardShipDisplay","CircuitboardSolarControl","CrateMkII","DecayedFood","DynamicAirConditioner","DynamicCrate","DynamicGPR","DynamicGasCanisterAir","DynamicGasCanisterCarbonDioxide","DynamicGasCanisterEmpty","DynamicGasCanisterFuel","DynamicGasCanisterNitrogen","DynamicGasCanisterNitrousOxide","DynamicGasCanisterOxygen","DynamicGasCanisterPollutants","DynamicGasCanisterRocketFuel","DynamicGasCanisterVolatiles","DynamicGasCanisterWater","DynamicGasTankAdvanced","DynamicGasTankAdvancedOxygen","DynamicGenerator","DynamicHydroponics","DynamicLight","DynamicLiquidCanisterEmpty","DynamicMKIILiquidCanisterEmpty","DynamicMKIILiquidCanisterWater","DynamicScrubber","DynamicSkeleton","ElectronicPrinterMod","ElevatorCarrage","EntityChick","EntityChickenBrown","EntityChickenWhite","EntityRoosterBlack","EntityRoosterBrown","Fertilizer","FireArmSMG","FlareGun","Handgun","HandgunMagazine","HumanSkull","ImGuiCircuitboardAirlockControl","ItemActiveVent","ItemAdhesiveInsulation","ItemAdvancedTablet","ItemAlienMushroom","ItemAmmoBox","ItemAngleGrinder","ItemArcWelder","ItemAreaPowerControl","ItemAstroloyIngot","ItemAstroloySheets","ItemAuthoringTool","ItemAuthoringToolRocketNetwork","ItemBasketBall","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBatteryCharger","ItemBatteryChargerSmall","ItemBeacon","ItemBiomass","ItemBreadLoaf","ItemCableAnalyser","ItemCableCoil","ItemCableCoilHeavy","ItemCableFuse","ItemCannedCondensedMilk","ItemCannedEdamame","ItemCannedMushroom","ItemCannedPowderedEggs","ItemCannedRicePudding","ItemCerealBar","ItemCharcoal","ItemChemLightBlue","ItemChemLightGreen","ItemChemLightRed","ItemChemLightWhite","ItemChemLightYellow","ItemChocolateBar","ItemChocolateCake","ItemChocolateCerealBar","ItemCoalOre","ItemCobaltOre","ItemCocoaPowder","ItemCocoaTree","ItemCoffeeMug","ItemConstantanIngot","ItemCookedCondensedMilk","ItemCookedCorn","ItemCookedMushroom","ItemCookedPowderedEggs","ItemCookedPumpkin","ItemCookedRice","ItemCookedSoybean","ItemCookedTomato","ItemCopperIngot","ItemCopperOre","ItemCorn","ItemCornSoup","ItemCreditCard","ItemCropHay","ItemCrowbar","ItemDataDisk","ItemDirtCanister","ItemDirtyOre","ItemDisposableBatteryCharger","ItemDrill","ItemDuctTape","ItemDynamicAirCon","ItemDynamicScrubber","ItemEggCarton","ItemElectronicParts","ItemElectrumIngot","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyCrowbar","ItemEmergencyDrill","ItemEmergencyEvaSuit","ItemEmergencyPickaxe","ItemEmergencyScrewdriver","ItemEmergencySpaceHelmet","ItemEmergencyToolBelt","ItemEmergencyWireCutters","ItemEmergencyWrench","ItemEmptyCan","ItemEvaSuit","ItemExplosive","ItemFern","ItemFertilizedEgg","ItemFilterFern","ItemFlagSmall","ItemFlashingLight","ItemFlashlight","ItemFlour","ItemFlowerBlue","ItemFlowerGreen","ItemFlowerOrange","ItemFlowerRed","ItemFlowerYellow","ItemFrenchFries","ItemFries","ItemGasCanisterCarbonDioxide","ItemGasCanisterEmpty","ItemGasCanisterFuel","ItemGasCanisterNitrogen","ItemGasCanisterNitrousOxide","ItemGasCanisterOxygen","ItemGasCanisterPollutants","ItemGasCanisterSmart","ItemGasCanisterVolatiles","ItemGasCanisterWater","ItemGasFilterCarbonDioxide","ItemGasFilterCarbonDioxideInfinite","ItemGasFilterCarbonDioxideL","ItemGasFilterCarbonDioxideM","ItemGasFilterNitrogen","ItemGasFilterNitrogenInfinite","ItemGasFilterNitrogenL","ItemGasFilterNitrogenM","ItemGasFilterNitrousOxide","ItemGasFilterNitrousOxideInfinite","ItemGasFilterNitrousOxideL","ItemGasFilterNitrousOxideM","ItemGasFilterOxygen","ItemGasFilterOxygenInfinite","ItemGasFilterOxygenL","ItemGasFilterOxygenM","ItemGasFilterPollutants","ItemGasFilterPollutantsInfinite","ItemGasFilterPollutantsL","ItemGasFilterPollutantsM","ItemGasFilterVolatiles","ItemGasFilterVolatilesInfinite","ItemGasFilterVolatilesL","ItemGasFilterVolatilesM","ItemGasFilterWater","ItemGasFilterWaterInfinite","ItemGasFilterWaterL","ItemGasFilterWaterM","ItemGasSensor","ItemGasTankStorage","ItemGlassSheets","ItemGlasses","ItemGoldIngot","ItemGoldOre","ItemGrenade","ItemHEMDroidRepairKit","ItemHardBackpack","ItemHardJetpack","ItemHardMiningBackPack","ItemHardSuit","ItemHardsuitHelmet","ItemHastelloyIngot","ItemHat","ItemHighVolumeGasCanisterEmpty","ItemHorticultureBelt","ItemHydroponicTray","ItemIce","ItemIgniter","ItemInconelIngot","ItemInsulation","ItemIntegratedCircuit10","ItemInvarIngot","ItemIronFrames","ItemIronIngot","ItemIronOre","ItemIronSheets","ItemJetpackBasic","ItemJetpackTurbine","ItemKitAIMeE","ItemKitAccessBridge","ItemKitAdvancedComposter","ItemKitAdvancedFurnace","ItemKitAdvancedPackagingMachine","ItemKitAirlock","ItemKitAirlockGate","ItemKitArcFurnace","ItemKitAtmospherics","ItemKitAutoMinerSmall","ItemKitAutolathe","ItemKitAutomatedOven","ItemKitBasket","ItemKitBattery","ItemKitBatteryLarge","ItemKitBeacon","ItemKitBeds","ItemKitBlastDoor","ItemKitCentrifuge","ItemKitChairs","ItemKitChute","ItemKitChuteUmbilical","ItemKitCompositeCladding","ItemKitCompositeFloorGrating","ItemKitComputer","ItemKitConsole","ItemKitCrate","ItemKitCrateMkII","ItemKitCrateMount","ItemKitCryoTube","ItemKitDeepMiner","ItemKitDockingPort","ItemKitDoor","ItemKitDrinkingFountain","ItemKitDynamicCanister","ItemKitDynamicGasTankAdvanced","ItemKitDynamicGenerator","ItemKitDynamicHydroponics","ItemKitDynamicLiquidCanister","ItemKitDynamicMKIILiquidCanister","ItemKitElectricUmbilical","ItemKitElectronicsPrinter","ItemKitElevator","ItemKitEngineLarge","ItemKitEngineMedium","ItemKitEngineSmall","ItemKitEvaporationChamber","ItemKitFlagODA","ItemKitFridgeBig","ItemKitFridgeSmall","ItemKitFurnace","ItemKitFurniture","ItemKitFuselage","ItemKitGasGenerator","ItemKitGasUmbilical","ItemKitGovernedGasRocketEngine","ItemKitGroundTelescope","ItemKitGrowLight","ItemKitHarvie","ItemKitHeatExchanger","ItemKitHorizontalAutoMiner","ItemKitHydraulicPipeBender","ItemKitHydroponicAutomated","ItemKitHydroponicStation","ItemKitIceCrusher","ItemKitInsulatedLiquidPipe","ItemKitInsulatedPipe","ItemKitInsulatedPipeUtility","ItemKitInsulatedPipeUtilityLiquid","ItemKitInteriorDoors","ItemKitLadder","ItemKitLandingPadAtmos","ItemKitLandingPadBasic","ItemKitLandingPadWaypoint","ItemKitLargeDirectHeatExchanger","ItemKitLargeExtendableRadiator","ItemKitLargeSatelliteDish","ItemKitLaunchMount","ItemKitLaunchTower","ItemKitLiquidRegulator","ItemKitLiquidTank","ItemKitLiquidTankInsulated","ItemKitLiquidTurboVolumePump","ItemKitLiquidUmbilical","ItemKitLocker","ItemKitLogicCircuit","ItemKitLogicInputOutput","ItemKitLogicMemory","ItemKitLogicProcessor","ItemKitLogicSwitch","ItemKitLogicTransmitter","ItemKitMotherShipCore","ItemKitMusicMachines","ItemKitPassiveLargeRadiatorGas","ItemKitPassiveLargeRadiatorLiquid","ItemKitPassthroughHeatExchanger","ItemKitPictureFrame","ItemKitPipe","ItemKitPipeLiquid","ItemKitPipeOrgan","ItemKitPipeRadiator","ItemKitPipeRadiatorLiquid","ItemKitPipeUtility","ItemKitPipeUtilityLiquid","ItemKitPlanter","ItemKitPortablesConnector","ItemKitPowerTransmitter","ItemKitPowerTransmitterOmni","ItemKitPoweredVent","ItemKitPressureFedGasEngine","ItemKitPressureFedLiquidEngine","ItemKitPressurePlate","ItemKitPumpedLiquidEngine","ItemKitRailing","ItemKitRecycler","ItemKitRegulator","ItemKitReinforcedWindows","ItemKitResearchMachine","ItemKitRespawnPointWallMounted","ItemKitRocketAvionics","ItemKitRocketBattery","ItemKitRocketCargoStorage","ItemKitRocketCelestialTracker","ItemKitRocketCircuitHousing","ItemKitRocketDatalink","ItemKitRocketGasFuelTank","ItemKitRocketLiquidFuelTank","ItemKitRocketManufactory","ItemKitRocketMiner","ItemKitRocketScanner","ItemKitRocketTransformerSmall","ItemKitRoverFrame","ItemKitRoverMKI","ItemKitSDBHopper","ItemKitSatelliteDish","ItemKitSecurityPrinter","ItemKitSensor","ItemKitShower","ItemKitSign","ItemKitSleeper","ItemKitSmallDirectHeatExchanger","ItemKitSmallSatelliteDish","ItemKitSolarPanel","ItemKitSolarPanelBasic","ItemKitSolarPanelBasicReinforced","ItemKitSolarPanelReinforced","ItemKitSolidGenerator","ItemKitSorter","ItemKitSpeaker","ItemKitStacker","ItemKitStairs","ItemKitStairwell","ItemKitStandardChute","ItemKitStirlingEngine","ItemKitSuitStorage","ItemKitTables","ItemKitTank","ItemKitTankInsulated","ItemKitToolManufactory","ItemKitTransformer","ItemKitTransformerSmall","ItemKitTurbineGenerator","ItemKitTurboVolumePump","ItemKitUprightWindTurbine","ItemKitVendingMachine","ItemKitVendingMachineRefrigerated","ItemKitWall","ItemKitWallArch","ItemKitWallFlat","ItemKitWallGeometry","ItemKitWallIron","ItemKitWallPadded","ItemKitWaterBottleFiller","ItemKitWaterPurifier","ItemKitWeatherStation","ItemKitWindTurbine","ItemKitWindowShutter","ItemLabeller","ItemLaptop","ItemLeadIngot","ItemLeadOre","ItemLightSword","ItemLiquidCanisterEmpty","ItemLiquidCanisterSmart","ItemLiquidDrain","ItemLiquidPipeAnalyzer","ItemLiquidPipeHeater","ItemLiquidPipeValve","ItemLiquidPipeVolumePump","ItemLiquidTankStorage","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIICrowbar","ItemMKIIDrill","ItemMKIIDuctTape","ItemMKIIMiningDrill","ItemMKIIScrewdriver","ItemMKIIWireCutters","ItemMKIIWrench","ItemMarineBodyArmor","ItemMarineHelmet","ItemMilk","ItemMiningBackPack","ItemMiningBelt","ItemMiningBeltMKII","ItemMiningCharge","ItemMiningDrill","ItemMiningDrillHeavy","ItemMiningDrillPneumatic","ItemMkIIToolbelt","ItemMuffin","ItemMushroom","ItemNVG","ItemNickelIngot","ItemNickelOre","ItemNitrice","ItemOxite","ItemPassiveVent","ItemPassiveVentInsulated","ItemPeaceLily","ItemPickaxe","ItemPillHeal","ItemPillStun","ItemPipeAnalyizer","ItemPipeCowl","ItemPipeDigitalValve","ItemPipeGasMixer","ItemPipeHeater","ItemPipeIgniter","ItemPipeLabel","ItemPipeLiquidRadiator","ItemPipeMeter","ItemPipeRadiator","ItemPipeValve","ItemPipeVolumePump","ItemPlainCake","ItemPlantEndothermic_Creative","ItemPlantEndothermic_Genepool1","ItemPlantEndothermic_Genepool2","ItemPlantSampler","ItemPlantSwitchGrass","ItemPlantThermogenic_Creative","ItemPlantThermogenic_Genepool1","ItemPlantThermogenic_Genepool2","ItemPlasticSheets","ItemPotato","ItemPotatoBaked","ItemPowerConnector","ItemPumpkin","ItemPumpkinPie","ItemPumpkinSoup","ItemPureIce","ItemPureIceCarbonDioxide","ItemPureIceHydrogen","ItemPureIceLiquidCarbonDioxide","ItemPureIceLiquidHydrogen","ItemPureIceLiquidNitrogen","ItemPureIceLiquidNitrous","ItemPureIceLiquidOxygen","ItemPureIceLiquidPollutant","ItemPureIceLiquidVolatiles","ItemPureIceNitrogen","ItemPureIceNitrous","ItemPureIceOxygen","ItemPureIcePollutant","ItemPureIcePollutedWater","ItemPureIceSteam","ItemPureIceVolatiles","ItemRTG","ItemRTGSurvival","ItemReagentMix","ItemRemoteDetonator","ItemReusableFireExtinguisher","ItemRice","ItemRoadFlare","ItemRocketMiningDrillHead","ItemRocketMiningDrillHeadDurable","ItemRocketMiningDrillHeadHighSpeedIce","ItemRocketMiningDrillHeadHighSpeedMineral","ItemRocketMiningDrillHeadIce","ItemRocketMiningDrillHeadLongTerm","ItemRocketMiningDrillHeadMineral","ItemRocketScanningHead","ItemScanner","ItemScrewdriver","ItemSecurityCamera","ItemSensorLenses","ItemSensorProcessingUnitCelestialScanner","ItemSensorProcessingUnitMesonScanner","ItemSensorProcessingUnitOreScanner","ItemSiliconIngot","ItemSiliconOre","ItemSilverIngot","ItemSilverOre","ItemSolderIngot","ItemSolidFuel","ItemSoundCartridgeBass","ItemSoundCartridgeDrums","ItemSoundCartridgeLeads","ItemSoundCartridgeSynth","ItemSoyOil","ItemSoybean","ItemSpaceCleaner","ItemSpaceHelmet","ItemSpaceIce","ItemSpaceOre","ItemSpacepack","ItemSprayCanBlack","ItemSprayCanBlue","ItemSprayCanBrown","ItemSprayCanGreen","ItemSprayCanGrey","ItemSprayCanKhaki","ItemSprayCanOrange","ItemSprayCanPink","ItemSprayCanPurple","ItemSprayCanRed","ItemSprayCanWhite","ItemSprayCanYellow","ItemSprayGun","ItemSteelFrames","ItemSteelIngot","ItemSteelSheets","ItemStelliteGlassSheets","ItemStelliteIngot","ItemSugar","ItemSugarCane","ItemSuitModCryogenicUpgrade","ItemTablet","ItemTerrainManipulator","ItemTomato","ItemTomatoSoup","ItemToolBelt","ItemTropicalPlant","ItemUraniumOre","ItemVolatiles","ItemWallCooler","ItemWallHeater","ItemWallLight","ItemWaspaloyIngot","ItemWaterBottle","ItemWaterPipeDigitalValve","ItemWaterPipeMeter","ItemWaterWallCooler","ItemWearLamp","ItemWeldingTorch","ItemWheat","ItemWireCutters","ItemWirelessBatteryCellExtraLarge","ItemWreckageAirConditioner1","ItemWreckageAirConditioner2","ItemWreckageHydroponicsTray1","ItemWreckageLargeExtendableRadiator01","ItemWreckageStructureRTG1","ItemWreckageStructureWeatherStation001","ItemWreckageStructureWeatherStation002","ItemWreckageStructureWeatherStation003","ItemWreckageStructureWeatherStation004","ItemWreckageStructureWeatherStation005","ItemWreckageStructureWeatherStation006","ItemWreckageStructureWeatherStation007","ItemWreckageStructureWeatherStation008","ItemWreckageTurbineGenerator1","ItemWreckageTurbineGenerator2","ItemWreckageTurbineGenerator3","ItemWreckageWallCooler1","ItemWreckageWallCooler2","ItemWrench","KitSDBSilo","KitStructureCombustionCentrifuge","Lander","Meteorite","MonsterEgg","MotherboardComms","MotherboardLogic","MotherboardMissionControl","MotherboardProgrammableChip","MotherboardRockets","MotherboardSorter","MothershipCore","NpcChick","NpcChicken","PipeBenderMod","PortableComposter","PortableSolarPanel","ReagentColorBlue","ReagentColorGreen","ReagentColorOrange","ReagentColorRed","ReagentColorYellow","Robot","RoverCargo","Rover_MkI","SMGMagazine","SeedBag_Cocoa","SeedBag_Corn","SeedBag_Fern","SeedBag_Mushroom","SeedBag_Potato","SeedBag_Pumpkin","SeedBag_Rice","SeedBag_Soybean","SeedBag_SugarCane","SeedBag_Switchgrass","SeedBag_Tomato","SeedBag_Wheet","SpaceShuttle","ToolPrinterMod","ToyLuna","UniformCommander","UniformMarine","UniformOrangeJumpSuit","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy","WeaponTorpedo"],"logicableItems":["Battery_Wireless_cell","Battery_Wireless_cell_Big","DynamicGPR","DynamicLight","ItemAdvancedTablet","ItemAngleGrinder","ItemArcWelder","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBeacon","ItemDrill","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyDrill","ItemEmergencySpaceHelmet","ItemFlashlight","ItemHardBackpack","ItemHardJetpack","ItemHardSuit","ItemHardsuitHelmet","ItemIntegratedCircuit10","ItemJetpackBasic","ItemJetpackTurbine","ItemLabeller","ItemLaptop","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIIDrill","ItemMKIIMiningDrill","ItemMiningBeltMKII","ItemMiningDrill","ItemMiningDrillHeavy","ItemMkIIToolbelt","ItemNVG","ItemPlantSampler","ItemRemoteDetonator","ItemSensorLenses","ItemSpaceHelmet","ItemSpacepack","ItemTablet","ItemTerrainManipulator","ItemWearLamp","ItemWirelessBatteryCellExtraLarge","PortableSolarPanel","Robot","RoverCargo","Rover_MkI","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy"]} \ No newline at end of file +{"prefabs":{"AccessCardBlack":{"prefab":{"prefabName":"AccessCardBlack","prefabHash":-1330388999,"desc":"","name":"Access Card (Black)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardBlue":{"prefab":{"prefabName":"AccessCardBlue","prefabHash":-1411327657,"desc":"","name":"Access Card (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardBrown":{"prefab":{"prefabName":"AccessCardBrown","prefabHash":1412428165,"desc":"","name":"Access Card (Brown)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardGray":{"prefab":{"prefabName":"AccessCardGray","prefabHash":-1339479035,"desc":"","name":"Access Card (Gray)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardGreen":{"prefab":{"prefabName":"AccessCardGreen","prefabHash":-374567952,"desc":"","name":"Access Card (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardKhaki":{"prefab":{"prefabName":"AccessCardKhaki","prefabHash":337035771,"desc":"","name":"Access Card (Khaki)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardOrange":{"prefab":{"prefabName":"AccessCardOrange","prefabHash":-332896929,"desc":"","name":"Access Card (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardPink":{"prefab":{"prefabName":"AccessCardPink","prefabHash":431317557,"desc":"","name":"Access Card (Pink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardPurple":{"prefab":{"prefabName":"AccessCardPurple","prefabHash":459843265,"desc":"","name":"Access Card (Purple)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardRed":{"prefab":{"prefabName":"AccessCardRed","prefabHash":-1713748313,"desc":"","name":"Access Card (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardWhite":{"prefab":{"prefabName":"AccessCardWhite","prefabHash":2079959157,"desc":"","name":"Access Card (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardYellow":{"prefab":{"prefabName":"AccessCardYellow","prefabHash":568932536,"desc":"","name":"Access Card (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"ApplianceChemistryStation":{"prefab":{"prefabName":"ApplianceChemistryStation","prefabHash":1365789392,"desc":"","name":"Chemistry Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"ApplianceDeskLampLeft":{"prefab":{"prefabName":"ApplianceDeskLampLeft","prefabHash":-1683849799,"desc":"","name":"Appliance Desk Lamp Left"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"}},"ApplianceDeskLampRight":{"prefab":{"prefabName":"ApplianceDeskLampRight","prefabHash":1174360780,"desc":"","name":"Appliance Desk Lamp Right"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"}},"ApplianceMicrowave":{"prefab":{"prefabName":"ApplianceMicrowave","prefabHash":-1136173965,"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.","name":"Microwave"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"AppliancePackagingMachine":{"prefab":{"prefabName":"AppliancePackagingMachine","prefabHash":-749191906,"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 ","name":"Basic Packaging Machine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Export","typ":"None"}]},"AppliancePaintMixer":{"prefab":{"prefabName":"AppliancePaintMixer","prefabHash":-1339716113,"desc":"","name":"Paint Mixer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"Bottle"}]},"AppliancePlantGeneticAnalyzer":{"prefab":{"prefabName":"AppliancePlantGeneticAnalyzer","prefabHash":-1303038067,"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.","name":"Plant Genetic Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Input","typ":"Tool"}]},"AppliancePlantGeneticSplicer":{"prefab":{"prefabName":"AppliancePlantGeneticSplicer","prefabHash":-1094868323,"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.","name":"Plant Genetic Splicer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Source Plant","typ":"Plant"},{"name":"Target Plant","typ":"Plant"}]},"AppliancePlantGeneticStabilizer":{"prefab":{"prefabName":"AppliancePlantGeneticStabilizer","prefabHash":871432335,"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 ","name":"Plant Genetic Stabilizer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Plant","typ":"Plant"}]},"ApplianceReagentProcessor":{"prefab":{"prefabName":"ApplianceReagentProcessor","prefabHash":1260918085,"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.","name":"Reagent Processor"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Input","typ":"None"},{"name":"Output","typ":"None"}]},"ApplianceSeedTray":{"prefab":{"prefabName":"ApplianceSeedTray","prefabHash":142831994,"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.","name":"Appliance Seed Tray"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"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"}]},"ApplianceTabletDock":{"prefab":{"prefabName":"ApplianceTabletDock","prefabHash":1853941363,"desc":"","name":"Tablet Dock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"","typ":"Tool"}]},"AutolathePrinterMod":{"prefab":{"prefabName":"AutolathePrinterMod","prefabHash":221058307,"desc":"Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Autolathe Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"Battery_Wireless_cell":{"prefab":{"prefabName":"Battery_Wireless_cell","prefabHash":-462415758,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Battery_Wireless_cell_Big":{"prefab":{"prefabName":"Battery_Wireless_cell_Big","prefabHash":-41519077,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell (Big)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"CardboardBox":{"prefab":{"prefabName":"CardboardBox","prefabHash":-1976947556,"desc":"","name":"Cardboard Box"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Storage"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"CartridgeAccessController":{"prefab":{"prefabName":"CartridgeAccessController","prefabHash":-1634532552,"desc":"","name":"Cartridge (Access Controller)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeAtmosAnalyser":{"prefab":{"prefabName":"CartridgeAtmosAnalyser","prefabHash":-1550278665,"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.","name":"Atmos Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeConfiguration":{"prefab":{"prefabName":"CartridgeConfiguration","prefabHash":-932136011,"desc":"","name":"Configuration"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeElectronicReader":{"prefab":{"prefabName":"CartridgeElectronicReader","prefabHash":-1462180176,"desc":"","name":"eReader"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeGPS":{"prefab":{"prefabName":"CartridgeGPS","prefabHash":-1957063345,"desc":"","name":"GPS"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeGuide":{"prefab":{"prefabName":"CartridgeGuide","prefabHash":872720793,"desc":"","name":"Guide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeMedicalAnalyser":{"prefab":{"prefabName":"CartridgeMedicalAnalyser","prefabHash":-1116110181,"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.","name":"Medical Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeNetworkAnalyser":{"prefab":{"prefabName":"CartridgeNetworkAnalyser","prefabHash":1606989119,"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.","name":"Network Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeOreScanner":{"prefab":{"prefabName":"CartridgeOreScanner","prefabHash":-1768732546,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet.","name":"Ore Scanner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeOreScannerColor":{"prefab":{"prefabName":"CartridgeOreScannerColor","prefabHash":1738236580,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground in different colors on the tablet.","name":"Ore Scanner (Color)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgePlantAnalyser":{"prefab":{"prefabName":"CartridgePlantAnalyser","prefabHash":1101328282,"desc":"","name":"Cartridge Plant Analyser"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeTracker":{"prefab":{"prefabName":"CartridgeTracker","prefabHash":81488783,"desc":"","name":"Tracker"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CircuitboardAdvAirlockControl":{"prefab":{"prefabName":"CircuitboardAdvAirlockControl","prefabHash":1633663176,"desc":"","name":"Advanced Airlock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardAirControl":{"prefab":{"prefabName":"CircuitboardAirControl","prefabHash":1618019559,"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. ","name":"Air Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardAirlockControl":{"prefab":{"prefabName":"CircuitboardAirlockControl","prefabHash":912176135,"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.","name":"Airlock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardCameraDisplay":{"prefab":{"prefabName":"CircuitboardCameraDisplay","prefabHash":-412104504,"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.","name":"Camera Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardDoorControl":{"prefab":{"prefabName":"CircuitboardDoorControl","prefabHash":855694771,"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.","name":"Door Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardGasDisplay":{"prefab":{"prefabName":"CircuitboardGasDisplay","prefabHash":-82343730,"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).","name":"Gas Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardGraphDisplay":{"prefab":{"prefabName":"CircuitboardGraphDisplay","prefabHash":1344368806,"desc":"","name":"Graph Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardHashDisplay":{"prefab":{"prefabName":"CircuitboardHashDisplay","prefabHash":1633074601,"desc":"","name":"Hash Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardModeControl":{"prefab":{"prefabName":"CircuitboardModeControl","prefabHash":-1134148135,"desc":"Can't decide which mode you love most? This circuit board allows you to switch any connected device between operation modes.","name":"Mode Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardPowerControl":{"prefab":{"prefabName":"CircuitboardPowerControl","prefabHash":-1923778429,"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. ","name":"Power Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardShipDisplay":{"prefab":{"prefabName":"CircuitboardShipDisplay","prefabHash":-2044446819,"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.","name":"Ship Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardSolarControl":{"prefab":{"prefabName":"CircuitboardSolarControl","prefabHash":2020180320,"desc":"Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel.","name":"Solar Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CompositeRollCover":{"prefab":{"prefabName":"CompositeRollCover","prefabHash":1228794916,"desc":"0.Operate\n1.Logic","name":"Composite Roll Cover"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"CrateMkII":{"prefab":{"prefabName":"CrateMkII","prefabHash":8709219,"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.","name":"Crate Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Storage"},"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"}]},"DecayedFood":{"prefab":{"prefabName":"DecayedFood","prefabHash":1531087544,"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","name":"Decayed Food"},"item":{"consumable":false,"ingredient":false,"maxQuantity":25,"slotClass":"None","sortingClass":"Default"}},"DeviceLfoVolume":{"prefab":{"prefabName":"DeviceLfoVolume","prefabHash":-1844430312,"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.","name":"Low frequency oscillator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Bpm":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"DeviceStepUnit":{"prefab":{"prefabName":"DeviceStepUnit","prefabHash":1762696475,"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","name":"Device Step Unit"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"DynamicAirConditioner":{"prefab":{"prefabName":"DynamicAirConditioner","prefabHash":519913639,"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.","name":"Portable Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicCrate":{"prefab":{"prefabName":"DynamicCrate","prefabHash":1941079206,"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.","name":"Dynamic Crate"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Storage"},"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"}]},"DynamicGPR":{"prefab":{"prefabName":"DynamicGPR","prefabHash":-2085885850,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicGasCanisterAir":{"prefab":{"prefabName":"DynamicGasCanisterAir","prefabHash":-1713611165,"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.","name":"Portable Gas Tank (Air)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterCarbonDioxide":{"prefab":{"prefabName":"DynamicGasCanisterCarbonDioxide","prefabHash":-322413931,"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.","name":"Portable Gas Tank (CO2)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterEmpty":{"prefab":{"prefabName":"DynamicGasCanisterEmpty","prefabHash":-1741267161,"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.","name":"Portable Gas Tank"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterFuel":{"prefab":{"prefabName":"DynamicGasCanisterFuel","prefabHash":-817051527,"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.","name":"Portable Gas Tank (Fuel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrogen":{"prefab":{"prefabName":"DynamicGasCanisterNitrogen","prefabHash":121951301,"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.","name":"Portable Gas Tank (Nitrogen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrousOxide":{"prefab":{"prefabName":"DynamicGasCanisterNitrousOxide","prefabHash":30727200,"desc":"","name":"Portable Gas Tank (Nitrous Oxide)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterOxygen":{"prefab":{"prefabName":"DynamicGasCanisterOxygen","prefabHash":1360925836,"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.","name":"Portable Gas Tank (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterPollutants":{"prefab":{"prefabName":"DynamicGasCanisterPollutants","prefabHash":396065382,"desc":"","name":"Portable Gas Tank (Pollutants)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterRocketFuel":{"prefab":{"prefabName":"DynamicGasCanisterRocketFuel","prefabHash":-8883951,"desc":"","name":"Dynamic Gas Canister Rocket Fuel"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterVolatiles":{"prefab":{"prefabName":"DynamicGasCanisterVolatiles","prefabHash":108086870,"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.","name":"Portable Gas Tank (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterWater":{"prefab":{"prefabName":"DynamicGasCanisterWater","prefabHash":197293625,"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.","name":"Portable Liquid Tank (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"LiquidCanister"}]},"DynamicGasTankAdvanced":{"prefab":{"prefabName":"DynamicGasTankAdvanced","prefabHash":-386375420,"desc":"0.Mode0\n1.Mode1","name":"Gas Tank Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasTankAdvancedOxygen":{"prefab":{"prefabName":"DynamicGasTankAdvancedOxygen","prefabHash":-1264455519,"desc":"0.Mode0\n1.Mode1","name":"Portable Gas Tank Mk II (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGenerator":{"prefab":{"prefabName":"DynamicGenerator","prefabHash":-82087220,"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.","name":"Portable Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"GasCanister"},{"name":"Battery","typ":"Battery"}]},"DynamicHydroponics":{"prefab":{"prefabName":"DynamicHydroponics","prefabHash":587726607,"desc":"","name":"Portable Hydroponics"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"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"}]},"DynamicLight":{"prefab":{"prefabName":"DynamicLight","prefabHash":-21970188,"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.","name":"Portable Light"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicLiquidCanisterEmpty":{"prefab":{"prefabName":"DynamicLiquidCanisterEmpty","prefabHash":-1939209112,"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.","name":"Portable Liquid Tank"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterEmpty":{"prefab":{"prefabName":"DynamicMKIILiquidCanisterEmpty","prefabHash":2130739600,"desc":"An empty, insulated liquid Gas Canister.","name":"Portable Liquid Tank Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterWater":{"prefab":{"prefabName":"DynamicMKIILiquidCanisterWater","prefabHash":-319510386,"desc":"An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature.","name":"Portable Liquid Tank Mk II (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicScrubber":{"prefab":{"prefabName":"DynamicScrubber","prefabHash":755048589,"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.","name":"Portable Air Scrubber"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"}]},"DynamicSkeleton":{"prefab":{"prefabName":"DynamicSkeleton","prefabHash":106953348,"desc":"","name":"Skeleton"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ElectronicPrinterMod":{"prefab":{"prefabName":"ElectronicPrinterMod","prefabHash":-311170652,"desc":"Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Electronic Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ElevatorCarrage":{"prefab":{"prefabName":"ElevatorCarrage","prefabHash":-110788403,"desc":"","name":"Elevator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"EntityChick":{"prefab":{"prefabName":"EntityChick","prefabHash":1730165908,"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.","name":"Entity Chick"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenBrown":{"prefab":{"prefabName":"EntityChickenBrown","prefabHash":334097180,"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.","name":"Entity Chicken Brown"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenWhite":{"prefab":{"prefabName":"EntityChickenWhite","prefabHash":1010807532,"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.","name":"Entity Chicken White"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBlack":{"prefab":{"prefabName":"EntityRoosterBlack","prefabHash":966959649,"desc":"This is a rooster. It is black. There is dignity in this.","name":"Entity Rooster Black"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBrown":{"prefab":{"prefabName":"EntityRoosterBrown","prefabHash":-583103395,"desc":"The common brown rooster. Don't let it hear you say that.","name":"Entity Rooster Brown"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"Fertilizer":{"prefab":{"prefabName":"Fertilizer","prefabHash":1517856652,"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. ","name":"Fertilizer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Default"}},"FireArmSMG":{"prefab":{"prefabName":"FireArmSMG","prefabHash":-86315541,"desc":"0.Single\n1.Auto","name":"Fire Arm SMG"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"slots":[{"name":"","typ":"Magazine"}]},"Flag_ODA_10m":{"prefab":{"prefabName":"Flag_ODA_10m","prefabHash":1845441951,"desc":"","name":"Flag (ODA 10m)"},"structure":{"smallGrid":true}},"Flag_ODA_4m":{"prefab":{"prefabName":"Flag_ODA_4m","prefabHash":1159126354,"desc":"","name":"Flag (ODA 4m)"},"structure":{"smallGrid":true}},"Flag_ODA_6m":{"prefab":{"prefabName":"Flag_ODA_6m","prefabHash":1998634960,"desc":"","name":"Flag (ODA 6m)"},"structure":{"smallGrid":true}},"Flag_ODA_8m":{"prefab":{"prefabName":"Flag_ODA_8m","prefabHash":-375156130,"desc":"","name":"Flag (ODA 8m)"},"structure":{"smallGrid":true}},"FlareGun":{"prefab":{"prefabName":"FlareGun","prefabHash":118685786,"desc":"","name":"Flare Gun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Magazine","typ":"Flare"},{"name":"","typ":"Blocked"}]},"H2Combustor":{"prefab":{"prefabName":"H2Combustor","prefabHash":1840108251,"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.","name":"H2 Combustor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","Combustion":"Read","CombustionInput":"Read","CombustionOutput":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidHydrogen":"Read","RatioLiquidNitrogen":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"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","RatioSteamInput":"Read","RatioSteamOutput":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"Handgun":{"prefab":{"prefabName":"Handgun","prefabHash":247238062,"desc":"","name":"Handgun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"slots":[{"name":"Magazine","typ":"Magazine"}]},"HandgunMagazine":{"prefab":{"prefabName":"HandgunMagazine","prefabHash":1254383185,"desc":"","name":"Handgun Magazine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Magazine","sortingClass":"Default"}},"HumanSkull":{"prefab":{"prefabName":"HumanSkull","prefabHash":-857713709,"desc":"","name":"Human Skull"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ImGuiCircuitboardAirlockControl":{"prefab":{"prefabName":"ImGuiCircuitboardAirlockControl","prefabHash":-73796547,"desc":"","name":"Airlock (Experimental)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"ItemActiveVent":{"prefab":{"prefabName":"ItemActiveVent","prefabHash":-842048328,"desc":"When constructed, this kit places an Active Vent on any support structure.","name":"Kit (Active Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemAdhesiveInsulation":{"prefab":{"prefabName":"ItemAdhesiveInsulation","prefabHash":1871048978,"desc":"","name":"Adhesive Insulation"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"Tool","sortingClass":"Tools"}},"ItemAdvancedTablet":{"prefab":{"prefabName":"ItemAdvancedTablet","prefabHash":1722785341,"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","name":"Advanced Tablet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read","SoundAlert":"ReadWrite","Volume":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"},{"name":"Cartridge1","typ":"Cartridge"},{"name":"Programmable Chip","typ":"ProgrammableChip"}]},"ItemAlienMushroom":{"prefab":{"prefabName":"ItemAlienMushroom","prefabHash":176446172,"desc":"","name":"Alien Mushroom"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Default"}},"ItemAmmoBox":{"prefab":{"prefabName":"ItemAmmoBox","prefabHash":-9559091,"desc":"","name":"Ammo Box"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemAngleGrinder":{"prefab":{"prefabName":"ItemAngleGrinder","prefabHash":201215010,"desc":"Angles-be-gone with the trusty angle grinder.","name":"Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemArcWelder":{"prefab":{"prefabName":"ItemArcWelder","prefabHash":1385062886,"desc":"","name":"Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemAreaPowerControl":{"prefab":{"prefabName":"ItemAreaPowerControl","prefabHash":1757673317,"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.","name":"Kit (Power Controller)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemAstroloyIngot":{"prefab":{"prefabName":"ItemAstroloyIngot","prefabHash":412924554,"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.","name":"Ingot (Astroloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Astroloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemAstroloySheets":{"prefab":{"prefabName":"ItemAstroloySheets","prefabHash":-1662476145,"desc":"","name":"Astroloy Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemAuthoringTool":{"prefab":{"prefabName":"ItemAuthoringTool","prefabHash":789015045,"desc":"","name":"Authoring Tool"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemAuthoringToolRocketNetwork":{"prefab":{"prefabName":"ItemAuthoringToolRocketNetwork","prefabHash":-1731627004,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemBasketBall":{"prefab":{"prefabName":"ItemBasketBall","prefabHash":-1262580790,"desc":"","name":"Basket Ball"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemBatteryCell":{"prefab":{"prefabName":"ItemBatteryCell","prefabHash":700133157,"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.","name":"Battery Cell (Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCellLarge":{"prefab":{"prefabName":"ItemBatteryCellLarge","prefabHash":-459827268,"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","name":"Battery Cell (Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCellNuclear":{"prefab":{"prefabName":"ItemBatteryCellNuclear","prefabHash":544617306,"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.","name":"Battery Cell (Nuclear)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCharger":{"prefab":{"prefabName":"ItemBatteryCharger","prefabHash":-1866880307,"desc":"This kit produces a 5-slot Kit (Battery Charger).","name":"Kit (Battery Charger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemBatteryChargerSmall":{"prefab":{"prefabName":"ItemBatteryChargerSmall","prefabHash":1008295833,"desc":"","name":"Battery Charger Small"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemBeacon":{"prefab":{"prefabName":"ItemBeacon","prefabHash":-869869491,"desc":"","name":"Tracking Beacon"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemBiomass":{"prefab":{"prefabName":"ItemBiomass","prefabHash":-831480639,"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).","name":"Biomass"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Biomass":1.0},"slotClass":"Ore","sortingClass":"Resources"}},"ItemBreadLoaf":{"prefab":{"prefabName":"ItemBreadLoaf","prefabHash":893514943,"desc":"","name":"Bread Loaf"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCableAnalyser":{"prefab":{"prefabName":"ItemCableAnalyser","prefabHash":-1792787349,"desc":"","name":"Kit (Cable Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemCableCoil":{"prefab":{"prefabName":"ItemCableCoil","prefabHash":-466050668,"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).","name":"Cable Coil"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Tool","sortingClass":"Resources"}},"ItemCableCoilHeavy":{"prefab":{"prefabName":"ItemCableCoilHeavy","prefabHash":2060134443,"desc":"Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW.","name":"Cable Coil (Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Tool","sortingClass":"Resources"}},"ItemCableFuse":{"prefab":{"prefabName":"ItemCableFuse","prefabHash":195442047,"desc":"","name":"Kit (Cable Fuses)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Resources"}},"ItemCannedCondensedMilk":{"prefab":{"prefabName":"ItemCannedCondensedMilk","prefabHash":-2104175091,"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.","name":"Canned Condensed Milk"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCannedEdamame":{"prefab":{"prefabName":"ItemCannedEdamame","prefabHash":-999714082,"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.","name":"Canned Edamame"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCannedMushroom":{"prefab":{"prefabName":"ItemCannedMushroom","prefabHash":-1344601965,"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.","name":"Canned Mushroom"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCannedPowderedEggs":{"prefab":{"prefabName":"ItemCannedPowderedEggs","prefabHash":1161510063,"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.","name":"Canned Powdered Eggs"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCannedRicePudding":{"prefab":{"prefabName":"ItemCannedRicePudding","prefabHash":-1185552595,"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.","name":"Canned Rice Pudding"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCerealBar":{"prefab":{"prefabName":"ItemCerealBar","prefabHash":791746840,"desc":"Sustains, without decay. If only all our relationships were so well balanced.","name":"Cereal Bar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCharcoal":{"prefab":{"prefabName":"ItemCharcoal","prefabHash":252561409,"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.","name":"Charcoal"},"item":{"consumable":false,"ingredient":true,"maxQuantity":200,"reagents":{"Carbon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemChemLightBlue":{"prefab":{"prefabName":"ItemChemLightBlue","prefabHash":-772542081,"desc":"A safe and slightly rave-some source of blue light. Snap to activate.","name":"Chem Light (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightGreen":{"prefab":{"prefabName":"ItemChemLightGreen","prefabHash":-597479390,"desc":"Enliven the dreariest, airless rock with this glowy green light. Snap to activate.","name":"Chem Light (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightRed":{"prefab":{"prefabName":"ItemChemLightRed","prefabHash":-525810132,"desc":"A red glowstick. Snap to activate. Then reach for the lasers.","name":"Chem Light (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightWhite":{"prefab":{"prefabName":"ItemChemLightWhite","prefabHash":1312166823,"desc":"Snap the glowstick to activate a pale radiance that keeps the darkness at bay.","name":"Chem Light (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightYellow":{"prefab":{"prefabName":"ItemChemLightYellow","prefabHash":1224819963,"desc":"Dispel the darkness with this yellow glowstick.","name":"Chem Light (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChocolateBar":{"prefab":{"prefabName":"ItemChocolateBar","prefabHash":234601764,"desc":"","name":"Chocolate Bar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemChocolateCake":{"prefab":{"prefabName":"ItemChocolateCake","prefabHash":-261575861,"desc":"","name":"Chocolate Cake"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemChocolateCerealBar":{"prefab":{"prefabName":"ItemChocolateCerealBar","prefabHash":860793245,"desc":"","name":"Chocolate Cereal Bar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCoalOre":{"prefab":{"prefabName":"ItemCoalOre","prefabHash":1724793494,"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).","name":"Ore (Coal)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Hydrocarbon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCobaltOre":{"prefab":{"prefabName":"ItemCobaltOre","prefabHash":-983091249,"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.","name":"Ore (Cobalt)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Cobalt":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCocoaPowder":{"prefab":{"prefabName":"ItemCocoaPowder","prefabHash":457286516,"desc":"","name":"Cocoa Powder"},"item":{"consumable":true,"ingredient":true,"maxQuantity":20,"reagents":{"Cocoa":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemCocoaTree":{"prefab":{"prefabName":"ItemCocoaTree","prefabHash":680051921,"desc":"","name":"Cocoa"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Cocoa":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemCoffeeMug":{"prefab":{"prefabName":"ItemCoffeeMug","prefabHash":1800622698,"desc":"","name":"Coffee Mug"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemConstantanIngot":{"prefab":{"prefabName":"ItemConstantanIngot","prefabHash":1058547521,"desc":"","name":"Ingot (Constantan)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Constantan":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemCookedCondensedMilk":{"prefab":{"prefabName":"ItemCookedCondensedMilk","prefabHash":1715917521,"desc":"A high-nutrient cooked food, which can be canned.","name":"Condensed Milk"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Milk":100.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedCorn":{"prefab":{"prefabName":"ItemCookedCorn","prefabHash":1344773148,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Corn"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Corn":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedMushroom":{"prefab":{"prefabName":"ItemCookedMushroom","prefabHash":-1076892658,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Mushroom"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Mushroom":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedPowderedEggs":{"prefab":{"prefabName":"ItemCookedPowderedEggs","prefabHash":-1712264413,"desc":"A high-nutrient cooked food, which can be canned.","name":"Powdered Eggs"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Egg":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedPumpkin":{"prefab":{"prefabName":"ItemCookedPumpkin","prefabHash":1849281546,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Pumpkin"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Pumpkin":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedRice":{"prefab":{"prefabName":"ItemCookedRice","prefabHash":2013539020,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Rice"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Rice":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedSoybean":{"prefab":{"prefabName":"ItemCookedSoybean","prefabHash":1353449022,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Soybean"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Soy":5.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedTomato":{"prefab":{"prefabName":"ItemCookedTomato","prefabHash":-709086714,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Tomato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Tomato":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCopperIngot":{"prefab":{"prefabName":"ItemCopperIngot","prefabHash":-404336834,"desc":"Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items.","name":"Ingot (Copper)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Copper":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemCopperOre":{"prefab":{"prefabName":"ItemCopperOre","prefabHash":-707307845,"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.","name":"Ore (Copper)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Copper":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCorn":{"prefab":{"prefabName":"ItemCorn","prefabHash":258339687,"desc":"A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light.","name":"Corn"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Corn":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemCornSoup":{"prefab":{"prefabName":"ItemCornSoup","prefabHash":545034114,"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.","name":"Corn Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCreditCard":{"prefab":{"prefabName":"ItemCreditCard","prefabHash":-1756772618,"desc":"","name":"Credit Card"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100000,"slotClass":"CreditCard","sortingClass":"Tools"}},"ItemCropHay":{"prefab":{"prefabName":"ItemCropHay","prefabHash":215486157,"desc":"","name":"Hay"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"None","sortingClass":"Default"}},"ItemCrowbar":{"prefab":{"prefabName":"ItemCrowbar","prefabHash":856108234,"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.","name":"Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemDataDisk":{"prefab":{"prefabName":"ItemDataDisk","prefabHash":1005843700,"desc":"","name":"Data Disk"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"DataDisk","sortingClass":"Default"}},"ItemDirtCanister":{"prefab":{"prefabName":"ItemDirtCanister","prefabHash":902565329,"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.","name":"Dirt Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Ore","sortingClass":"Default"}},"ItemDirtyOre":{"prefab":{"prefabName":"ItemDirtyOre","prefabHash":-1234745580,"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. ","name":"Dirty Ore"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Ores"}},"ItemDisposableBatteryCharger":{"prefab":{"prefabName":"ItemDisposableBatteryCharger","prefabHash":-2124435700,"desc":"Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery.","name":"Disposable Battery Charger"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemDrill":{"prefab":{"prefabName":"ItemDrill","prefabHash":2009673399,"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.","name":"Hand Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemDuctTape":{"prefab":{"prefabName":"ItemDuctTape","prefabHash":-1943134693,"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.","name":"Duct Tape"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemDynamicAirCon":{"prefab":{"prefabName":"ItemDynamicAirCon","prefabHash":1072914031,"desc":"","name":"Kit (Portable Air Conditioner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemDynamicScrubber":{"prefab":{"prefabName":"ItemDynamicScrubber","prefabHash":-971920158,"desc":"","name":"Kit (Portable Scrubber)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemEggCarton":{"prefab":{"prefabName":"ItemEggCarton","prefabHash":-524289310,"desc":"Within, eggs reside in mysterious, marmoreal silence.","name":"Egg Carton"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Storage"},"slots":[{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"}]},"ItemElectronicParts":{"prefab":{"prefabName":"ItemElectronicParts","prefabHash":731250882,"desc":"","name":"Electronic Parts"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Resources"}},"ItemElectrumIngot":{"prefab":{"prefabName":"ItemElectrumIngot","prefabHash":502280180,"desc":"","name":"Ingot (Electrum)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Electrum":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemEmergencyAngleGrinder":{"prefab":{"prefabName":"ItemEmergencyAngleGrinder","prefabHash":-351438780,"desc":"","name":"Emergency Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyArcWelder":{"prefab":{"prefabName":"ItemEmergencyArcWelder","prefabHash":-1056029600,"desc":"","name":"Emergency Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyCrowbar":{"prefab":{"prefabName":"ItemEmergencyCrowbar","prefabHash":976699731,"desc":"","name":"Emergency Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyDrill":{"prefab":{"prefabName":"ItemEmergencyDrill","prefabHash":-2052458905,"desc":"","name":"Emergency Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyEvaSuit":{"prefab":{"prefabName":"ItemEmergencyEvaSuit","prefabHash":1791306431,"desc":"","name":"Emergency Eva Suit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Suit","sortingClass":"Clothing"},"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"}]},"ItemEmergencyPickaxe":{"prefab":{"prefabName":"ItemEmergencyPickaxe","prefabHash":-1061510408,"desc":"","name":"Emergency Pickaxe"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyScrewdriver":{"prefab":{"prefabName":"ItemEmergencyScrewdriver","prefabHash":266099983,"desc":"","name":"Emergency Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencySpaceHelmet":{"prefab":{"prefabName":"ItemEmergencySpaceHelmet","prefabHash":205916793,"desc":"","name":"Emergency Space Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemEmergencyToolBelt":{"prefab":{"prefabName":"ItemEmergencyToolBelt","prefabHash":1661941301,"desc":"","name":"Emergency Tool Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemEmergencyWireCutters":{"prefab":{"prefabName":"ItemEmergencyWireCutters","prefabHash":2102803952,"desc":"","name":"Emergency Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyWrench":{"prefab":{"prefabName":"ItemEmergencyWrench","prefabHash":162553030,"desc":"","name":"Emergency Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmptyCan":{"prefab":{"prefabName":"ItemEmptyCan","prefabHash":1013818348,"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.","name":"Empty Can"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Steel":1.0},"slotClass":"None","sortingClass":"Default"}},"ItemEvaSuit":{"prefab":{"prefabName":"ItemEvaSuit","prefabHash":1677018918,"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.","name":"Eva Suit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Suit","sortingClass":"Clothing"},"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"}]},"ItemExplosive":{"prefab":{"prefabName":"ItemExplosive","prefabHash":235361649,"desc":"","name":"Remote Explosive"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemFern":{"prefab":{"prefabName":"ItemFern","prefabHash":892110467,"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.","name":"Fern"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Fenoxitone":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemFertilizedEgg":{"prefab":{"prefabName":"ItemFertilizedEgg","prefabHash":-383972371,"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.","name":"Egg"},"item":{"consumable":false,"ingredient":true,"maxQuantity":1,"reagents":{"Egg":1.0},"slotClass":"Egg","sortingClass":"Resources"}},"ItemFilterFern":{"prefab":{"prefabName":"ItemFilterFern","prefabHash":266654416,"desc":"A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant.","name":"Darga Fern"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlagSmall":{"prefab":{"prefabName":"ItemFlagSmall","prefabHash":2011191088,"desc":"","name":"Kit (Small Flag)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemFlashingLight":{"prefab":{"prefabName":"ItemFlashingLight","prefabHash":-2107840748,"desc":"","name":"Kit (Flashing Light)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemFlashlight":{"prefab":{"prefabName":"ItemFlashlight","prefabHash":-838472102,"desc":"A flashlight with a narrow and wide beam options.","name":"Flashlight"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Low Power","1":"High Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemFlour":{"prefab":{"prefabName":"ItemFlour","prefabHash":-665995854,"desc":"Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven).","name":"Flour"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Flour":50.0},"slotClass":"None","sortingClass":"Resources"}},"ItemFlowerBlue":{"prefab":{"prefabName":"ItemFlowerBlue","prefabHash":-1573623434,"desc":"","name":"Flower (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerGreen":{"prefab":{"prefabName":"ItemFlowerGreen","prefabHash":-1513337058,"desc":"","name":"Flower (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerOrange":{"prefab":{"prefabName":"ItemFlowerOrange","prefabHash":-1411986716,"desc":"","name":"Flower (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerRed":{"prefab":{"prefabName":"ItemFlowerRed","prefabHash":-81376085,"desc":"","name":"Flower (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerYellow":{"prefab":{"prefabName":"ItemFlowerYellow","prefabHash":1712822019,"desc":"","name":"Flower (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFrenchFries":{"prefab":{"prefabName":"ItemFrenchFries","prefabHash":-57608687,"desc":"Because space would suck without 'em.","name":"Canned French Fries"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemFries":{"prefab":{"prefabName":"ItemFries","prefabHash":1371786091,"desc":"","name":"French Fries"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemGasCanisterCarbonDioxide":{"prefab":{"prefabName":"ItemGasCanisterCarbonDioxide","prefabHash":-767685874,"desc":"","name":"Canister (CO2)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterEmpty":{"prefab":{"prefabName":"ItemGasCanisterEmpty","prefabHash":42280099,"desc":"","name":"Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterFuel":{"prefab":{"prefabName":"ItemGasCanisterFuel","prefabHash":-1014695176,"desc":"","name":"Canister (Fuel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterNitrogen":{"prefab":{"prefabName":"ItemGasCanisterNitrogen","prefabHash":2145068424,"desc":"","name":"Canister (Nitrogen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterNitrousOxide":{"prefab":{"prefabName":"ItemGasCanisterNitrousOxide","prefabHash":-1712153401,"desc":"","name":"Gas Canister (Sleeping)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterOxygen":{"prefab":{"prefabName":"ItemGasCanisterOxygen","prefabHash":-1152261938,"desc":"","name":"Canister (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterPollutants":{"prefab":{"prefabName":"ItemGasCanisterPollutants","prefabHash":-1552586384,"desc":"","name":"Canister (Pollutants)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterSmart":{"prefab":{"prefabName":"ItemGasCanisterSmart","prefabHash":-668314371,"desc":"0.Mode0\n1.Mode1","name":"Gas Canister (Smart)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterVolatiles":{"prefab":{"prefabName":"ItemGasCanisterVolatiles","prefabHash":-472094806,"desc":"","name":"Canister (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterWater":{"prefab":{"prefabName":"ItemGasCanisterWater","prefabHash":-1854861891,"desc":"","name":"Liquid Canister (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemGasFilterCarbonDioxide":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxide","prefabHash":1635000764,"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.","name":"Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideInfinite":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideInfinite","prefabHash":-185568964,"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.","name":"Catalytic Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideL":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideL","prefabHash":1876847024,"desc":"","name":"Heavy Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideM":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideM","prefabHash":416897318,"desc":"","name":"Medium Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogen":{"prefab":{"prefabName":"ItemGasFilterNitrogen","prefabHash":632853248,"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.","name":"Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenInfinite":{"prefab":{"prefabName":"ItemGasFilterNitrogenInfinite","prefabHash":152751131,"desc":"A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenL":{"prefab":{"prefabName":"ItemGasFilterNitrogenL","prefabHash":-1387439451,"desc":"","name":"Heavy Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenM":{"prefab":{"prefabName":"ItemGasFilterNitrogenM","prefabHash":-632657357,"desc":"","name":"Medium Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxide":{"prefab":{"prefabName":"ItemGasFilterNitrousOxide","prefabHash":-1247674305,"desc":"","name":"Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideInfinite":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideInfinite","prefabHash":-123934842,"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.","name":"Catalytic Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideL":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideL","prefabHash":465267979,"desc":"","name":"Heavy Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideM":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideM","prefabHash":1824284061,"desc":"","name":"Medium Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygen":{"prefab":{"prefabName":"ItemGasFilterOxygen","prefabHash":-721824748,"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).","name":"Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenInfinite":{"prefab":{"prefabName":"ItemGasFilterOxygenInfinite","prefabHash":-1055451111,"desc":"A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenL":{"prefab":{"prefabName":"ItemGasFilterOxygenL","prefabHash":-1217998945,"desc":"","name":"Heavy Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenM":{"prefab":{"prefabName":"ItemGasFilterOxygenM","prefabHash":-1067319543,"desc":"","name":"Medium Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutants":{"prefab":{"prefabName":"ItemGasFilterPollutants","prefabHash":1915566057,"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.","name":"Filter (Pollutant)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsInfinite":{"prefab":{"prefabName":"ItemGasFilterPollutantsInfinite","prefabHash":-503738105,"desc":"A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsL":{"prefab":{"prefabName":"ItemGasFilterPollutantsL","prefabHash":1959564765,"desc":"","name":"Heavy Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsM":{"prefab":{"prefabName":"ItemGasFilterPollutantsM","prefabHash":63677771,"desc":"","name":"Medium Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatiles":{"prefab":{"prefabName":"ItemGasFilterVolatiles","prefabHash":15011598,"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.","name":"Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesInfinite":{"prefab":{"prefabName":"ItemGasFilterVolatilesInfinite","prefabHash":-1916176068,"desc":"A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesL":{"prefab":{"prefabName":"ItemGasFilterVolatilesL","prefabHash":1255156286,"desc":"","name":"Heavy Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesM":{"prefab":{"prefabName":"ItemGasFilterVolatilesM","prefabHash":1037507240,"desc":"","name":"Medium Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWater":{"prefab":{"prefabName":"ItemGasFilterWater","prefabHash":-1993197973,"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)","name":"Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterInfinite":{"prefab":{"prefabName":"ItemGasFilterWaterInfinite","prefabHash":-1678456554,"desc":"A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterL":{"prefab":{"prefabName":"ItemGasFilterWaterL","prefabHash":2004969680,"desc":"","name":"Heavy Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterM":{"prefab":{"prefabName":"ItemGasFilterWaterM","prefabHash":8804422,"desc":"","name":"Medium Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasSensor":{"prefab":{"prefabName":"ItemGasSensor","prefabHash":1717593480,"desc":"","name":"Kit (Gas Sensor)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemGasTankStorage":{"prefab":{"prefabName":"ItemGasTankStorage","prefabHash":-2113012215,"desc":"This kit produces a Kit (Canister Storage) for refilling a Canister.","name":"Kit (Canister Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemGlassSheets":{"prefab":{"prefabName":"ItemGlassSheets","prefabHash":1588896491,"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.","name":"Glass Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemGlasses":{"prefab":{"prefabName":"ItemGlasses","prefabHash":-1068925231,"desc":"","name":"Glasses"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Glasses","sortingClass":"Clothing"}},"ItemGoldIngot":{"prefab":{"prefabName":"ItemGoldIngot","prefabHash":226410516,"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. ","name":"Ingot (Gold)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Gold":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemGoldOre":{"prefab":{"prefabName":"ItemGoldOre","prefabHash":-1348105509,"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.","name":"Ore (Gold)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Gold":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemGrenade":{"prefab":{"prefabName":"ItemGrenade","prefabHash":1544275894,"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.","name":"Hand Grenade"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemHEMDroidRepairKit":{"prefab":{"prefabName":"ItemHEMDroidRepairKit","prefabHash":470636008,"desc":"Repairs damaged HEM-Droids to full health.","name":"HEMDroid Repair Kit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Food"}},"ItemHardBackpack":{"prefab":{"prefabName":"ItemHardBackpack","prefabHash":374891127,"desc":"This backpack can be useful when you are working inside and don't need to fly around.","name":"Hardsuit Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemHardJetpack":{"prefab":{"prefabName":"ItemHardJetpack","prefabHash":-412551656,"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.","name":"Hardsuit Jetpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemHardMiningBackPack":{"prefab":{"prefabName":"ItemHardMiningBackPack","prefabHash":900366130,"desc":"","name":"Hard Mining Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"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"}]},"ItemHardSuit":{"prefab":{"prefabName":"ItemHardSuit","prefabHash":-1758310454,"desc":"Connects to Logic Transmitter","name":"Hardsuit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Suit","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"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"}],"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"ItemHardsuitHelmet":{"prefab":{"prefabName":"ItemHardsuitHelmet","prefabHash":-84573099,"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.","name":"Hardsuit Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemHastelloyIngot":{"prefab":{"prefabName":"ItemHastelloyIngot","prefabHash":1579842814,"desc":"","name":"Ingot (Hastelloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Hastelloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemHat":{"prefab":{"prefabName":"ItemHat","prefabHash":299189339,"desc":"As the name suggests, this is a hat.","name":"Hat"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"}},"ItemHighVolumeGasCanisterEmpty":{"prefab":{"prefabName":"ItemHighVolumeGasCanisterEmpty","prefabHash":998653377,"desc":"","name":"High Volume Gas Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemHorticultureBelt":{"prefab":{"prefabName":"ItemHorticultureBelt","prefabHash":-1117581553,"desc":"","name":"Horticulture Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemHydroponicTray":{"prefab":{"prefabName":"ItemHydroponicTray","prefabHash":-1193543727,"desc":"This kits creates a Hydroponics Tray for growing various plants.","name":"Kit (Hydroponic Tray)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemIce":{"prefab":{"prefabName":"ItemIce","prefabHash":1217489948,"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.","name":"Ice (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemIgniter":{"prefab":{"prefabName":"ItemIgniter","prefabHash":890106742,"desc":"This kit creates an Kit (Igniter) unit.","name":"Kit (Igniter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemInconelIngot":{"prefab":{"prefabName":"ItemInconelIngot","prefabHash":-787796599,"desc":"","name":"Ingot (Inconel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Inconel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemInsulation":{"prefab":{"prefabName":"ItemInsulation","prefabHash":897176943,"desc":"Mysterious in the extreme, the function of this item is lost to the ages.","name":"Insulation"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Resources"}},"ItemIntegratedCircuit10":{"prefab":{"prefabName":"ItemIntegratedCircuit10","prefabHash":-744098481,"desc":"","name":"Integrated Circuit (IC10)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"ProgrammableChip","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"LineNumber":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"memory":{"memoryAccess":"ReadWrite","memorySize":512}},"ItemInvarIngot":{"prefab":{"prefabName":"ItemInvarIngot","prefabHash":-297990285,"desc":"","name":"Ingot (Invar)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Invar":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemIronFrames":{"prefab":{"prefabName":"ItemIronFrames","prefabHash":1225836666,"desc":"","name":"Iron Frames"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemIronIngot":{"prefab":{"prefabName":"ItemIronIngot","prefabHash":-1301215609,"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.","name":"Ingot (Iron)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Iron":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemIronOre":{"prefab":{"prefabName":"ItemIronOre","prefabHash":1758427767,"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.","name":"Ore (Iron)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Iron":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemIronSheets":{"prefab":{"prefabName":"ItemIronSheets","prefabHash":-487378546,"desc":"","name":"Iron Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemJetpackBasic":{"prefab":{"prefabName":"ItemJetpackBasic","prefabHash":1969189000,"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.","name":"Jetpack Basic"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemKitAIMeE":{"prefab":{"prefabName":"ItemKitAIMeE","prefabHash":496830914,"desc":"","name":"Kit (AIMeE)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAccessBridge":{"prefab":{"prefabName":"ItemKitAccessBridge","prefabHash":513258369,"desc":"","name":"Kit (Access Bridge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedComposter":{"prefab":{"prefabName":"ItemKitAdvancedComposter","prefabHash":-1431998347,"desc":"","name":"Kit (Advanced Composter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedFurnace":{"prefab":{"prefabName":"ItemKitAdvancedFurnace","prefabHash":-616758353,"desc":"","name":"Kit (Advanced Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedPackagingMachine":{"prefab":{"prefabName":"ItemKitAdvancedPackagingMachine","prefabHash":-598545233,"desc":"","name":"Kit (Advanced Packaging Machine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAirlock":{"prefab":{"prefabName":"ItemKitAirlock","prefabHash":964043875,"desc":"","name":"Kit (Airlock)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAirlockGate":{"prefab":{"prefabName":"ItemKitAirlockGate","prefabHash":682546947,"desc":"","name":"Kit (Hangar Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitArcFurnace":{"prefab":{"prefabName":"ItemKitArcFurnace","prefabHash":-98995857,"desc":"","name":"Kit (Arc Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAtmospherics":{"prefab":{"prefabName":"ItemKitAtmospherics","prefabHash":1222286371,"desc":"","name":"Kit (Atmospherics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutoMinerSmall":{"prefab":{"prefabName":"ItemKitAutoMinerSmall","prefabHash":1668815415,"desc":"","name":"Kit (Autominer Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutolathe":{"prefab":{"prefabName":"ItemKitAutolathe","prefabHash":-1753893214,"desc":"","name":"Kit (Autolathe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutomatedOven":{"prefab":{"prefabName":"ItemKitAutomatedOven","prefabHash":-1931958659,"desc":"","name":"Kit (Automated Oven)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBasket":{"prefab":{"prefabName":"ItemKitBasket","prefabHash":148305004,"desc":"","name":"Kit (Basket)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBattery":{"prefab":{"prefabName":"ItemKitBattery","prefabHash":1406656973,"desc":"","name":"Kit (Battery)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBatteryLarge":{"prefab":{"prefabName":"ItemKitBatteryLarge","prefabHash":-21225041,"desc":"","name":"Kit (Battery Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBeacon":{"prefab":{"prefabName":"ItemKitBeacon","prefabHash":249073136,"desc":"","name":"Kit (Beacon)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBeds":{"prefab":{"prefabName":"ItemKitBeds","prefabHash":-1241256797,"desc":"","name":"Kit (Beds)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBlastDoor":{"prefab":{"prefabName":"ItemKitBlastDoor","prefabHash":-1755116240,"desc":"","name":"Kit (Blast Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCentrifuge":{"prefab":{"prefabName":"ItemKitCentrifuge","prefabHash":578182956,"desc":"","name":"Kit (Centrifuge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChairs":{"prefab":{"prefabName":"ItemKitChairs","prefabHash":-1394008073,"desc":"","name":"Kit (Chairs)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChute":{"prefab":{"prefabName":"ItemKitChute","prefabHash":1025254665,"desc":"","name":"Kit (Basic Chutes)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChuteUmbilical":{"prefab":{"prefabName":"ItemKitChuteUmbilical","prefabHash":-876560854,"desc":"","name":"Kit (Chute Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCompositeCladding":{"prefab":{"prefabName":"ItemKitCompositeCladding","prefabHash":-1470820996,"desc":"","name":"Kit (Cladding)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCompositeFloorGrating":{"prefab":{"prefabName":"ItemKitCompositeFloorGrating","prefabHash":1182412869,"desc":"","name":"Kit (Floor Grating)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitComputer":{"prefab":{"prefabName":"ItemKitComputer","prefabHash":1990225489,"desc":"","name":"Kit (Computer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitConsole":{"prefab":{"prefabName":"ItemKitConsole","prefabHash":-1241851179,"desc":"","name":"Kit (Consoles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrate":{"prefab":{"prefabName":"ItemKitCrate","prefabHash":429365598,"desc":"","name":"Kit (Crate)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrateMkII":{"prefab":{"prefabName":"ItemKitCrateMkII","prefabHash":-1585956426,"desc":"","name":"Kit (Crate Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrateMount":{"prefab":{"prefabName":"ItemKitCrateMount","prefabHash":-551612946,"desc":"","name":"Kit (Container Mount)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCryoTube":{"prefab":{"prefabName":"ItemKitCryoTube","prefabHash":-545234195,"desc":"","name":"Kit (Cryo Tube)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDeepMiner":{"prefab":{"prefabName":"ItemKitDeepMiner","prefabHash":-1935075707,"desc":"","name":"Kit (Deep Miner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDockingPort":{"prefab":{"prefabName":"ItemKitDockingPort","prefabHash":77421200,"desc":"","name":"Kit (Docking Port)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDoor":{"prefab":{"prefabName":"ItemKitDoor","prefabHash":168615924,"desc":"","name":"Kit (Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDrinkingFountain":{"prefab":{"prefabName":"ItemKitDrinkingFountain","prefabHash":-1743663875,"desc":"","name":"Kit (Drinking Fountain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicCanister":{"prefab":{"prefabName":"ItemKitDynamicCanister","prefabHash":-1061945368,"desc":"","name":"Kit (Portable Gas Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicGasTankAdvanced":{"prefab":{"prefabName":"ItemKitDynamicGasTankAdvanced","prefabHash":1533501495,"desc":"","name":"Kit (Portable Gas Tank Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitDynamicGenerator":{"prefab":{"prefabName":"ItemKitDynamicGenerator","prefabHash":-732720413,"desc":"","name":"Kit (Portable Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicHydroponics":{"prefab":{"prefabName":"ItemKitDynamicHydroponics","prefabHash":-1861154222,"desc":"","name":"Kit (Portable Hydroponics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicLiquidCanister":{"prefab":{"prefabName":"ItemKitDynamicLiquidCanister","prefabHash":375541286,"desc":"","name":"Kit (Portable Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicMKIILiquidCanister":{"prefab":{"prefabName":"ItemKitDynamicMKIILiquidCanister","prefabHash":-638019974,"desc":"","name":"Kit (Portable Liquid Tank Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElectricUmbilical":{"prefab":{"prefabName":"ItemKitElectricUmbilical","prefabHash":1603046970,"desc":"","name":"Kit (Power Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElectronicsPrinter":{"prefab":{"prefabName":"ItemKitElectronicsPrinter","prefabHash":-1181922382,"desc":"","name":"Kit (Electronics Printer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElevator":{"prefab":{"prefabName":"ItemKitElevator","prefabHash":-945806652,"desc":"","name":"Kit (Elevator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineLarge":{"prefab":{"prefabName":"ItemKitEngineLarge","prefabHash":755302726,"desc":"","name":"Kit (Engine Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineMedium":{"prefab":{"prefabName":"ItemKitEngineMedium","prefabHash":1969312177,"desc":"","name":"Kit (Engine Medium)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineSmall":{"prefab":{"prefabName":"ItemKitEngineSmall","prefabHash":19645163,"desc":"","name":"Kit (Engine Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEvaporationChamber":{"prefab":{"prefabName":"ItemKitEvaporationChamber","prefabHash":1587787610,"desc":"","name":"Kit (Phase Change Device)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFlagODA":{"prefab":{"prefabName":"ItemKitFlagODA","prefabHash":1701764190,"desc":"","name":"Kit (ODA Flag)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitFridgeBig":{"prefab":{"prefabName":"ItemKitFridgeBig","prefabHash":-1168199498,"desc":"","name":"Kit (Fridge Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFridgeSmall":{"prefab":{"prefabName":"ItemKitFridgeSmall","prefabHash":1661226524,"desc":"","name":"Kit (Fridge Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFurnace":{"prefab":{"prefabName":"ItemKitFurnace","prefabHash":-806743925,"desc":"","name":"Kit (Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFurniture":{"prefab":{"prefabName":"ItemKitFurniture","prefabHash":1162905029,"desc":"","name":"Kit (Furniture)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFuselage":{"prefab":{"prefabName":"ItemKitFuselage","prefabHash":-366262681,"desc":"","name":"Kit (Fuselage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGasGenerator":{"prefab":{"prefabName":"ItemKitGasGenerator","prefabHash":377745425,"desc":"","name":"Kit (Gas Fuel Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGasUmbilical":{"prefab":{"prefabName":"ItemKitGasUmbilical","prefabHash":-1867280568,"desc":"","name":"Kit (Gas Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGovernedGasRocketEngine":{"prefab":{"prefabName":"ItemKitGovernedGasRocketEngine","prefabHash":206848766,"desc":"","name":"Kit (Pumped Gas Rocket Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGroundTelescope":{"prefab":{"prefabName":"ItemKitGroundTelescope","prefabHash":-2140672772,"desc":"","name":"Kit (Telescope)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGrowLight":{"prefab":{"prefabName":"ItemKitGrowLight","prefabHash":341030083,"desc":"","name":"Kit (Grow Light)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHarvie":{"prefab":{"prefabName":"ItemKitHarvie","prefabHash":-1022693454,"desc":"","name":"Kit (Harvie)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHeatExchanger":{"prefab":{"prefabName":"ItemKitHeatExchanger","prefabHash":-1710540039,"desc":"","name":"Kit Heat Exchanger"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHorizontalAutoMiner":{"prefab":{"prefabName":"ItemKitHorizontalAutoMiner","prefabHash":844391171,"desc":"","name":"Kit (OGRE)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydraulicPipeBender":{"prefab":{"prefabName":"ItemKitHydraulicPipeBender","prefabHash":-2098556089,"desc":"","name":"Kit (Hydraulic Pipe Bender)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydroponicAutomated":{"prefab":{"prefabName":"ItemKitHydroponicAutomated","prefabHash":-927931558,"desc":"","name":"Kit (Automated Hydroponics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydroponicStation":{"prefab":{"prefabName":"ItemKitHydroponicStation","prefabHash":2057179799,"desc":"","name":"Kit (Hydroponic Station)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitIceCrusher":{"prefab":{"prefabName":"ItemKitIceCrusher","prefabHash":288111533,"desc":"","name":"Kit (Ice Crusher)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedLiquidPipe":{"prefab":{"prefabName":"ItemKitInsulatedLiquidPipe","prefabHash":2067655311,"desc":"","name":"Kit (Insulated Liquid Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipe":{"prefab":{"prefabName":"ItemKitInsulatedPipe","prefabHash":452636699,"desc":"","name":"Kit (Insulated Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipeUtility":{"prefab":{"prefabName":"ItemKitInsulatedPipeUtility","prefabHash":-27284803,"desc":"","name":"Kit (Insulated Pipe Utility Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipeUtilityLiquid":{"prefab":{"prefabName":"ItemKitInsulatedPipeUtilityLiquid","prefabHash":-1831558953,"desc":"","name":"Kit (Insulated Pipe Utility Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInteriorDoors":{"prefab":{"prefabName":"ItemKitInteriorDoors","prefabHash":1935945891,"desc":"","name":"Kit (Interior Doors)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLadder":{"prefab":{"prefabName":"ItemKitLadder","prefabHash":489494578,"desc":"","name":"Kit (Ladder)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadAtmos":{"prefab":{"prefabName":"ItemKitLandingPadAtmos","prefabHash":1817007843,"desc":"","name":"Kit (Landing Pad Atmospherics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadBasic":{"prefab":{"prefabName":"ItemKitLandingPadBasic","prefabHash":293581318,"desc":"","name":"Kit (Landing Pad Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadWaypoint":{"prefab":{"prefabName":"ItemKitLandingPadWaypoint","prefabHash":-1267511065,"desc":"","name":"Kit (Landing Pad Runway)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeDirectHeatExchanger":{"prefab":{"prefabName":"ItemKitLargeDirectHeatExchanger","prefabHash":450164077,"desc":"","name":"Kit (Large Direct Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeExtendableRadiator":{"prefab":{"prefabName":"ItemKitLargeExtendableRadiator","prefabHash":847430620,"desc":"","name":"Kit (Large Extendable Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeSatelliteDish":{"prefab":{"prefabName":"ItemKitLargeSatelliteDish","prefabHash":-2039971217,"desc":"","name":"Kit (Large Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLaunchMount":{"prefab":{"prefabName":"ItemKitLaunchMount","prefabHash":-1854167549,"desc":"","name":"Kit (Launch Mount)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLaunchTower":{"prefab":{"prefabName":"ItemKitLaunchTower","prefabHash":-174523552,"desc":"","name":"Kit (Rocket Launch Tower)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidRegulator":{"prefab":{"prefabName":"ItemKitLiquidRegulator","prefabHash":1951126161,"desc":"","name":"Kit (Liquid Regulator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTank":{"prefab":{"prefabName":"ItemKitLiquidTank","prefabHash":-799849305,"desc":"","name":"Kit (Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTankInsulated":{"prefab":{"prefabName":"ItemKitLiquidTankInsulated","prefabHash":617773453,"desc":"","name":"Kit (Insulated Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTurboVolumePump":{"prefab":{"prefabName":"ItemKitLiquidTurboVolumePump","prefabHash":-1805020897,"desc":"","name":"Kit (Turbo Volume Pump - Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidUmbilical":{"prefab":{"prefabName":"ItemKitLiquidUmbilical","prefabHash":1571996765,"desc":"","name":"Kit (Liquid Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLocker":{"prefab":{"prefabName":"ItemKitLocker","prefabHash":882301399,"desc":"","name":"Kit (Locker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicCircuit":{"prefab":{"prefabName":"ItemKitLogicCircuit","prefabHash":1512322581,"desc":"","name":"Kit (IC Housing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicInputOutput":{"prefab":{"prefabName":"ItemKitLogicInputOutput","prefabHash":1997293610,"desc":"","name":"Kit (Logic I/O)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicMemory":{"prefab":{"prefabName":"ItemKitLogicMemory","prefabHash":-2098214189,"desc":"","name":"Kit (Logic Memory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicProcessor":{"prefab":{"prefabName":"ItemKitLogicProcessor","prefabHash":220644373,"desc":"","name":"Kit (Logic Processor)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicSwitch":{"prefab":{"prefabName":"ItemKitLogicSwitch","prefabHash":124499454,"desc":"","name":"Kit (Logic Switch)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicTransmitter":{"prefab":{"prefabName":"ItemKitLogicTransmitter","prefabHash":1005397063,"desc":"","name":"Kit (Logic Transmitter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitMotherShipCore":{"prefab":{"prefabName":"ItemKitMotherShipCore","prefabHash":-344968335,"desc":"","name":"Kit (Mothership)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitMusicMachines":{"prefab":{"prefabName":"ItemKitMusicMachines","prefabHash":-2038889137,"desc":"","name":"Kit (Music Machines)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPassiveLargeRadiatorGas":{"prefab":{"prefabName":"ItemKitPassiveLargeRadiatorGas","prefabHash":-1752768283,"desc":"","name":"Kit (Medium Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemKitPassiveLargeRadiatorLiquid":{"prefab":{"prefabName":"ItemKitPassiveLargeRadiatorLiquid","prefabHash":1453961898,"desc":"","name":"Kit (Medium Radiator Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPassthroughHeatExchanger":{"prefab":{"prefabName":"ItemKitPassthroughHeatExchanger","prefabHash":636112787,"desc":"","name":"Kit (CounterFlow Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPictureFrame":{"prefab":{"prefabName":"ItemKitPictureFrame","prefabHash":-2062364768,"desc":"","name":"Kit Picture Frame"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipe":{"prefab":{"prefabName":"ItemKitPipe","prefabHash":-1619793705,"desc":"","name":"Kit (Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeLiquid":{"prefab":{"prefabName":"ItemKitPipeLiquid","prefabHash":-1166461357,"desc":"","name":"Kit (Liquid Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeOrgan":{"prefab":{"prefabName":"ItemKitPipeOrgan","prefabHash":-827125300,"desc":"","name":"Kit (Pipe Organ)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeRadiator":{"prefab":{"prefabName":"ItemKitPipeRadiator","prefabHash":920411066,"desc":"","name":"Kit (Pipe Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitPipeRadiatorLiquid":{"prefab":{"prefabName":"ItemKitPipeRadiatorLiquid","prefabHash":-1697302609,"desc":"","name":"Kit (Pipe Radiator Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitPipeUtility":{"prefab":{"prefabName":"ItemKitPipeUtility","prefabHash":1934508338,"desc":"","name":"Kit (Pipe Utility Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeUtilityLiquid":{"prefab":{"prefabName":"ItemKitPipeUtilityLiquid","prefabHash":595478589,"desc":"","name":"Kit (Pipe Utility Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPlanter":{"prefab":{"prefabName":"ItemKitPlanter","prefabHash":119096484,"desc":"","name":"Kit (Planter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPortablesConnector":{"prefab":{"prefabName":"ItemKitPortablesConnector","prefabHash":1041148999,"desc":"","name":"Kit (Portables Connector)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPowerTransmitter":{"prefab":{"prefabName":"ItemKitPowerTransmitter","prefabHash":291368213,"desc":"","name":"Kit (Power Transmitter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPowerTransmitterOmni":{"prefab":{"prefabName":"ItemKitPowerTransmitterOmni","prefabHash":-831211676,"desc":"","name":"Kit (Power Transmitter Omni)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPoweredVent":{"prefab":{"prefabName":"ItemKitPoweredVent","prefabHash":2015439334,"desc":"","name":"Kit (Powered Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressureFedGasEngine":{"prefab":{"prefabName":"ItemKitPressureFedGasEngine","prefabHash":-121514007,"desc":"","name":"Kit (Pressure Fed Gas Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressureFedLiquidEngine":{"prefab":{"prefabName":"ItemKitPressureFedLiquidEngine","prefabHash":-99091572,"desc":"","name":"Kit (Pressure Fed Liquid Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressurePlate":{"prefab":{"prefabName":"ItemKitPressurePlate","prefabHash":123504691,"desc":"","name":"Kit (Trigger Plate)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPumpedLiquidEngine":{"prefab":{"prefabName":"ItemKitPumpedLiquidEngine","prefabHash":1921918951,"desc":"","name":"Kit (Pumped Liquid Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRailing":{"prefab":{"prefabName":"ItemKitRailing","prefabHash":750176282,"desc":"","name":"Kit (Railing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRecycler":{"prefab":{"prefabName":"ItemKitRecycler","prefabHash":849148192,"desc":"","name":"Kit (Recycler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRegulator":{"prefab":{"prefabName":"ItemKitRegulator","prefabHash":1181371795,"desc":"","name":"Kit (Pressure Regulator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitReinforcedWindows":{"prefab":{"prefabName":"ItemKitReinforcedWindows","prefabHash":1459985302,"desc":"","name":"Kit (Reinforced Windows)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitResearchMachine":{"prefab":{"prefabName":"ItemKitResearchMachine","prefabHash":724776762,"desc":"","name":"Kit Research Machine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitRespawnPointWallMounted":{"prefab":{"prefabName":"ItemKitRespawnPointWallMounted","prefabHash":1574688481,"desc":"","name":"Kit (Respawn)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketAvionics":{"prefab":{"prefabName":"ItemKitRocketAvionics","prefabHash":1396305045,"desc":"","name":"Kit (Avionics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketBattery":{"prefab":{"prefabName":"ItemKitRocketBattery","prefabHash":-314072139,"desc":"","name":"Kit (Rocket Battery)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCargoStorage":{"prefab":{"prefabName":"ItemKitRocketCargoStorage","prefabHash":479850239,"desc":"","name":"Kit (Rocket Cargo Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCelestialTracker":{"prefab":{"prefabName":"ItemKitRocketCelestialTracker","prefabHash":-303008602,"desc":"","name":"Kit (Rocket Celestial Tracker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCircuitHousing":{"prefab":{"prefabName":"ItemKitRocketCircuitHousing","prefabHash":721251202,"desc":"","name":"Kit (Rocket Circuit Housing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketDatalink":{"prefab":{"prefabName":"ItemKitRocketDatalink","prefabHash":-1256996603,"desc":"","name":"Kit (Rocket Datalink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketGasFuelTank":{"prefab":{"prefabName":"ItemKitRocketGasFuelTank","prefabHash":-1629347579,"desc":"","name":"Kit (Rocket Gas Fuel Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketLiquidFuelTank":{"prefab":{"prefabName":"ItemKitRocketLiquidFuelTank","prefabHash":2032027950,"desc":"","name":"Kit (Rocket Liquid Fuel Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketManufactory":{"prefab":{"prefabName":"ItemKitRocketManufactory","prefabHash":-636127860,"desc":"","name":"Kit (Rocket Manufactory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketMiner":{"prefab":{"prefabName":"ItemKitRocketMiner","prefabHash":-867969909,"desc":"","name":"Kit (Rocket Miner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketScanner":{"prefab":{"prefabName":"ItemKitRocketScanner","prefabHash":1753647154,"desc":"","name":"Kit (Rocket Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketTransformerSmall":{"prefab":{"prefabName":"ItemKitRocketTransformerSmall","prefabHash":-932335800,"desc":"","name":"Kit (Transformer Small (Rocket))"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRoverFrame":{"prefab":{"prefabName":"ItemKitRoverFrame","prefabHash":1827215803,"desc":"","name":"Kit (Rover Frame)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRoverMKI":{"prefab":{"prefabName":"ItemKitRoverMKI","prefabHash":197243872,"desc":"","name":"Kit (Rover Mk I)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSDBHopper":{"prefab":{"prefabName":"ItemKitSDBHopper","prefabHash":323957548,"desc":"","name":"Kit (SDB Hopper)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSatelliteDish":{"prefab":{"prefabName":"ItemKitSatelliteDish","prefabHash":178422810,"desc":"","name":"Kit (Medium Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSecurityPrinter":{"prefab":{"prefabName":"ItemKitSecurityPrinter","prefabHash":578078533,"desc":"","name":"Kit (Security Printer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSensor":{"prefab":{"prefabName":"ItemKitSensor","prefabHash":-1776897113,"desc":"","name":"Kit (Sensors)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitShower":{"prefab":{"prefabName":"ItemKitShower","prefabHash":735858725,"desc":"","name":"Kit (Shower)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSign":{"prefab":{"prefabName":"ItemKitSign","prefabHash":529996327,"desc":"","name":"Kit (Sign)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSleeper":{"prefab":{"prefabName":"ItemKitSleeper","prefabHash":326752036,"desc":"","name":"Kit (Sleeper)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSmallDirectHeatExchanger":{"prefab":{"prefabName":"ItemKitSmallDirectHeatExchanger","prefabHash":-1332682164,"desc":"","name":"Kit (Small Direct Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitSmallSatelliteDish":{"prefab":{"prefabName":"ItemKitSmallSatelliteDish","prefabHash":1960952220,"desc":"","name":"Kit (Small Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolarPanel":{"prefab":{"prefabName":"ItemKitSolarPanel","prefabHash":-1924492105,"desc":"","name":"Kit (Solar Panel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolarPanelBasic":{"prefab":{"prefabName":"ItemKitSolarPanelBasic","prefabHash":844961456,"desc":"","name":"Kit (Solar Panel Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemKitSolarPanelBasicReinforced":{"prefab":{"prefabName":"ItemKitSolarPanelBasicReinforced","prefabHash":-528695432,"desc":"","name":"Kit (Solar Panel Basic Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemKitSolarPanelReinforced":{"prefab":{"prefabName":"ItemKitSolarPanelReinforced","prefabHash":-364868685,"desc":"","name":"Kit (Solar Panel Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolidGenerator":{"prefab":{"prefabName":"ItemKitSolidGenerator","prefabHash":1293995736,"desc":"","name":"Kit (Solid Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSorter":{"prefab":{"prefabName":"ItemKitSorter","prefabHash":969522478,"desc":"","name":"Kit (Sorter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSpeaker":{"prefab":{"prefabName":"ItemKitSpeaker","prefabHash":-126038526,"desc":"","name":"Kit (Speaker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStacker":{"prefab":{"prefabName":"ItemKitStacker","prefabHash":1013244511,"desc":"","name":"Kit (Stacker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStairs":{"prefab":{"prefabName":"ItemKitStairs","prefabHash":170878959,"desc":"","name":"Kit (Stairs)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStairwell":{"prefab":{"prefabName":"ItemKitStairwell","prefabHash":-1868555784,"desc":"","name":"Kit (Stairwell)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStandardChute":{"prefab":{"prefabName":"ItemKitStandardChute","prefabHash":2133035682,"desc":"","name":"Kit (Powered Chutes)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStirlingEngine":{"prefab":{"prefabName":"ItemKitStirlingEngine","prefabHash":-1821571150,"desc":"","name":"Kit (Stirling Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSuitStorage":{"prefab":{"prefabName":"ItemKitSuitStorage","prefabHash":1088892825,"desc":"","name":"Kit (Suit Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTables":{"prefab":{"prefabName":"ItemKitTables","prefabHash":-1361598922,"desc":"","name":"Kit (Tables)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTank":{"prefab":{"prefabName":"ItemKitTank","prefabHash":771439840,"desc":"","name":"Kit (Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTankInsulated":{"prefab":{"prefabName":"ItemKitTankInsulated","prefabHash":1021053608,"desc":"","name":"Kit (Tank Insulated)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemKitToolManufactory":{"prefab":{"prefabName":"ItemKitToolManufactory","prefabHash":529137748,"desc":"","name":"Kit (Tool Manufactory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTransformer":{"prefab":{"prefabName":"ItemKitTransformer","prefabHash":-453039435,"desc":"","name":"Kit (Transformer Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTransformerSmall":{"prefab":{"prefabName":"ItemKitTransformerSmall","prefabHash":665194284,"desc":"","name":"Kit (Transformer Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTurbineGenerator":{"prefab":{"prefabName":"ItemKitTurbineGenerator","prefabHash":-1590715731,"desc":"","name":"Kit (Turbine Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTurboVolumePump":{"prefab":{"prefabName":"ItemKitTurboVolumePump","prefabHash":-1248429712,"desc":"","name":"Kit (Turbo Volume Pump - Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitUprightWindTurbine":{"prefab":{"prefabName":"ItemKitUprightWindTurbine","prefabHash":-1798044015,"desc":"","name":"Kit (Upright Wind Turbine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitVendingMachine":{"prefab":{"prefabName":"ItemKitVendingMachine","prefabHash":-2038384332,"desc":"","name":"Kit (Vending Machine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitVendingMachineRefrigerated":{"prefab":{"prefabName":"ItemKitVendingMachineRefrigerated","prefabHash":-1867508561,"desc":"","name":"Kit (Vending Machine Refrigerated)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWall":{"prefab":{"prefabName":"ItemKitWall","prefabHash":-1826855889,"desc":"","name":"Kit (Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallArch":{"prefab":{"prefabName":"ItemKitWallArch","prefabHash":1625214531,"desc":"","name":"Kit (Arched Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallFlat":{"prefab":{"prefabName":"ItemKitWallFlat","prefabHash":-846838195,"desc":"","name":"Kit (Flat Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallGeometry":{"prefab":{"prefabName":"ItemKitWallGeometry","prefabHash":-784733231,"desc":"","name":"Kit (Geometric Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallIron":{"prefab":{"prefabName":"ItemKitWallIron","prefabHash":-524546923,"desc":"","name":"Kit (Iron Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallPadded":{"prefab":{"prefabName":"ItemKitWallPadded","prefabHash":-821868990,"desc":"","name":"Kit (Padded Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWaterBottleFiller":{"prefab":{"prefabName":"ItemKitWaterBottleFiller","prefabHash":159886536,"desc":"","name":"Kit (Water Bottle Filler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWaterPurifier":{"prefab":{"prefabName":"ItemKitWaterPurifier","prefabHash":611181283,"desc":"","name":"Kit (Water Purifier)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWeatherStation":{"prefab":{"prefabName":"ItemKitWeatherStation","prefabHash":337505889,"desc":"","name":"Kit (Weather Station)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemKitWindTurbine":{"prefab":{"prefabName":"ItemKitWindTurbine","prefabHash":-868916503,"desc":"","name":"Kit (Wind Turbine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWindowShutter":{"prefab":{"prefabName":"ItemKitWindowShutter","prefabHash":1779979754,"desc":"","name":"Kit (Window Shutter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemLabeller":{"prefab":{"prefabName":"ItemLabeller","prefabHash":-743968726,"desc":"A labeller lets you set names and values on a variety of devices and structures, including Console and Logic.","name":"Labeller"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemLaptop":{"prefab":{"prefabName":"ItemLaptop","prefabHash":141535121,"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","name":"Laptop"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","PositionX":"Read","PositionY":"Read","PositionZ":"Read","Power":"Read","PressureExternal":"Read","ReferenceId":"Read","TemperatureExternal":"Read"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"},{"name":"Battery","typ":"Battery"},{"name":"Motherboard","typ":"Motherboard"}]},"ItemLeadIngot":{"prefab":{"prefabName":"ItemLeadIngot","prefabHash":2134647745,"desc":"","name":"Ingot (Lead)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Lead":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemLeadOre":{"prefab":{"prefabName":"ItemLeadOre","prefabHash":-190236170,"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.","name":"Ore (Lead)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Lead":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemLightSword":{"prefab":{"prefabName":"ItemLightSword","prefabHash":1949076595,"desc":"A charming, if useless, pseudo-weapon. (Creative only.)","name":"Light Sword"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidCanisterEmpty":{"prefab":{"prefabName":"ItemLiquidCanisterEmpty","prefabHash":-185207387,"desc":"","name":"Liquid Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemLiquidCanisterSmart":{"prefab":{"prefabName":"ItemLiquidCanisterSmart","prefabHash":777684475,"desc":"0.Mode0\n1.Mode1","name":"Liquid Canister (Smart)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemLiquidDrain":{"prefab":{"prefabName":"ItemLiquidDrain","prefabHash":2036225202,"desc":"","name":"Kit (Liquid Drain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidPipeAnalyzer":{"prefab":{"prefabName":"ItemLiquidPipeAnalyzer","prefabHash":226055671,"desc":"","name":"Kit (Liquid Pipe Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidPipeHeater":{"prefab":{"prefabName":"ItemLiquidPipeHeater","prefabHash":-248475032,"desc":"Creates a Pipe Heater (Liquid).","name":"Pipe Heater Kit (Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidPipeValve":{"prefab":{"prefabName":"ItemLiquidPipeValve","prefabHash":-2126113312,"desc":"This kit creates a Liquid Valve.","name":"Kit (Liquid Pipe Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidPipeVolumePump":{"prefab":{"prefabName":"ItemLiquidPipeVolumePump","prefabHash":-2106280569,"desc":"","name":"Kit (Liquid Volume Pump)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidTankStorage":{"prefab":{"prefabName":"ItemLiquidTankStorage","prefabHash":2037427578,"desc":"This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister.","name":"Kit (Liquid Canister Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemMKIIAngleGrinder":{"prefab":{"prefabName":"ItemMKIIAngleGrinder","prefabHash":240174650,"desc":"Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure.","name":"Mk II Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIArcWelder":{"prefab":{"prefabName":"ItemMKIIArcWelder","prefabHash":-2061979347,"desc":"","name":"Mk II Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIICrowbar":{"prefab":{"prefabName":"ItemMKIICrowbar","prefabHash":1440775434,"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.","name":"Mk II Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIDrill":{"prefab":{"prefabName":"ItemMKIIDrill","prefabHash":324791548,"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.","name":"Mk II Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIDuctTape":{"prefab":{"prefabName":"ItemMKIIDuctTape","prefabHash":388774906,"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.","name":"Mk II Duct Tape"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIMiningDrill":{"prefab":{"prefabName":"ItemMKIIMiningDrill","prefabHash":-1875271296,"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.","name":"Mk II Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIScrewdriver":{"prefab":{"prefabName":"ItemMKIIScrewdriver","prefabHash":-2015613246,"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.","name":"Mk II Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIWireCutters":{"prefab":{"prefabName":"ItemMKIIWireCutters","prefabHash":-178893251,"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.","name":"Mk II Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIWrench":{"prefab":{"prefabName":"ItemMKIIWrench","prefabHash":1862001680,"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.","name":"Mk II Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMarineBodyArmor":{"prefab":{"prefabName":"ItemMarineBodyArmor","prefabHash":1399098998,"desc":"","name":"Marine Armor"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Suit","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMarineHelmet":{"prefab":{"prefabName":"ItemMarineHelmet","prefabHash":1073631646,"desc":"","name":"Marine Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMilk":{"prefab":{"prefabName":"ItemMilk","prefabHash":1327248310,"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.","name":"Milk"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"Milk":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemMiningBackPack":{"prefab":{"prefabName":"ItemMiningBackPack","prefabHash":-1650383245,"desc":"","name":"Mining Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"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"}]},"ItemMiningBelt":{"prefab":{"prefabName":"ItemMiningBelt","prefabHash":-676435305,"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.","name":"Mining Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemMiningBeltMKII":{"prefab":{"prefabName":"ItemMiningBeltMKII","prefabHash":1470787934,"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. ","name":"Mining Belt MK II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"}]},"ItemMiningCharge":{"prefab":{"prefabName":"ItemMiningCharge","prefabHash":15829510,"desc":"A low cost, high yield explosive with a 10 second timer.","name":"Mining Charge"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemMiningDrill":{"prefab":{"prefabName":"ItemMiningDrill","prefabHash":1055173191,"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.'","name":"Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillHeavy":{"prefab":{"prefabName":"ItemMiningDrillHeavy","prefabHash":-1663349918,"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.","name":"Mining Drill (Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillPneumatic":{"prefab":{"prefabName":"ItemMiningDrillPneumatic","prefabHash":1258187304,"desc":"0.Default\n1.Flatten","name":"Pneumatic Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemMkIIToolbelt":{"prefab":{"prefabName":"ItemMkIIToolbelt","prefabHash":1467558064,"desc":"A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy.","name":"Tool Belt MK II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"Tool","typ":"Tool"},{"name":"Tool","typ":"Tool"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMuffin":{"prefab":{"prefabName":"ItemMuffin","prefabHash":-1864982322,"desc":"A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin.","name":"Muffin"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemMushroom":{"prefab":{"prefabName":"ItemMushroom","prefabHash":2044798572,"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.","name":"Mushroom"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Mushroom":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemNVG":{"prefab":{"prefabName":"ItemNVG","prefabHash":982514123,"desc":"","name":"Night Vision Goggles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Glasses","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemNickelIngot":{"prefab":{"prefabName":"ItemNickelIngot","prefabHash":-1406385572,"desc":"","name":"Ingot (Nickel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Nickel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemNickelOre":{"prefab":{"prefabName":"ItemNickelOre","prefabHash":1830218956,"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.","name":"Ore (Nickel)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Nickel":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemNitrice":{"prefab":{"prefabName":"ItemNitrice","prefabHash":-1499471529,"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.","name":"Ice (Nitrice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemOxite":{"prefab":{"prefabName":"ItemOxite","prefabHash":-1805394113,"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.","name":"Ice (Oxite)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPassiveVent":{"prefab":{"prefabName":"ItemPassiveVent","prefabHash":238631271,"desc":"This kit creates a Passive Vent among other variants.","name":"Passive Vent"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPassiveVentInsulated":{"prefab":{"prefabName":"ItemPassiveVentInsulated","prefabHash":-1397583760,"desc":"","name":"Kit (Insulated Passive Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPeaceLily":{"prefab":{"prefabName":"ItemPeaceLily","prefabHash":2042955224,"desc":"A fetching lily with greater resistance to cold temperatures.","name":"Peace Lily"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPickaxe":{"prefab":{"prefabName":"ItemPickaxe","prefabHash":-913649823,"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.","name":"Pickaxe"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemPillHeal":{"prefab":{"prefabName":"ItemPillHeal","prefabHash":1118069417,"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.","name":"Pill (Medical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Food"}},"ItemPillStun":{"prefab":{"prefabName":"ItemPillStun","prefabHash":418958601,"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.","name":"Pill (Paralysis)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Food"}},"ItemPipeAnalyizer":{"prefab":{"prefabName":"ItemPipeAnalyizer","prefabHash":-767597887,"desc":"This kit creates a Pipe Analyzer.","name":"Kit (Pipe Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeCowl":{"prefab":{"prefabName":"ItemPipeCowl","prefabHash":-38898376,"desc":"This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres.","name":"Pipe Cowl"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeDigitalValve":{"prefab":{"prefabName":"ItemPipeDigitalValve","prefabHash":-1532448832,"desc":"This kit creates a Digital Valve.","name":"Kit (Digital Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeGasMixer":{"prefab":{"prefabName":"ItemPipeGasMixer","prefabHash":-1134459463,"desc":"This kit creates a Gas Mixer.","name":"Kit (Gas Mixer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeHeater":{"prefab":{"prefabName":"ItemPipeHeater","prefabHash":-1751627006,"desc":"Creates a Pipe Heater (Gas).","name":"Pipe Heater Kit (Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemPipeIgniter":{"prefab":{"prefabName":"ItemPipeIgniter","prefabHash":1366030599,"desc":"","name":"Kit (Pipe Igniter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeLabel":{"prefab":{"prefabName":"ItemPipeLabel","prefabHash":391769637,"desc":"This kit creates a Pipe Label.","name":"Kit (Pipe Label)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeLiquidRadiator":{"prefab":{"prefabName":"ItemPipeLiquidRadiator","prefabHash":-906521320,"desc":"This kit creates a Liquid Pipe Convection Radiator.","name":"Kit (Liquid Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeMeter":{"prefab":{"prefabName":"ItemPipeMeter","prefabHash":1207939683,"desc":"This kit creates a Pipe Meter.","name":"Kit (Pipe Meter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeRadiator":{"prefab":{"prefabName":"ItemPipeRadiator","prefabHash":-1796655088,"desc":"This kit creates a Pipe Convection Radiator.","name":"Kit (Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeValve":{"prefab":{"prefabName":"ItemPipeValve","prefabHash":799323450,"desc":"This kit creates a Valve.","name":"Kit (Pipe Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemPipeVolumePump":{"prefab":{"prefabName":"ItemPipeVolumePump","prefabHash":-1766301997,"desc":"This kit creates a Volume Pump.","name":"Kit (Volume Pump)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPlainCake":{"prefab":{"prefabName":"ItemPlainCake","prefabHash":-1108244510,"desc":"","name":"Cake"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemPlantEndothermic_Creative":{"prefab":{"prefabName":"ItemPlantEndothermic_Creative","prefabHash":-1159179557,"desc":"","name":"Endothermic Plant Creative"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantEndothermic_Genepool1":{"prefab":{"prefabName":"ItemPlantEndothermic_Genepool1","prefabHash":851290561,"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.","name":"Winterspawn (Alpha variant)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantEndothermic_Genepool2":{"prefab":{"prefabName":"ItemPlantEndothermic_Genepool2","prefabHash":-1414203269,"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.","name":"Winterspawn (Beta variant)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantSampler":{"prefab":{"prefabName":"ItemPlantSampler","prefabHash":173023800,"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.","name":"Plant Sampler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemPlantSwitchGrass":{"prefab":{"prefabName":"ItemPlantSwitchGrass","prefabHash":-532672323,"desc":"","name":"Switch Grass"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Default"}},"ItemPlantThermogenic_Creative":{"prefab":{"prefabName":"ItemPlantThermogenic_Creative","prefabHash":-1208890208,"desc":"","name":"Thermogenic Plant Creative"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantThermogenic_Genepool1":{"prefab":{"prefabName":"ItemPlantThermogenic_Genepool1","prefabHash":-177792789,"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.","name":"Hades Flower (Alpha strain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantThermogenic_Genepool2":{"prefab":{"prefabName":"ItemPlantThermogenic_Genepool2","prefabHash":1819167057,"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.","name":"Hades Flower (Beta strain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlasticSheets":{"prefab":{"prefabName":"ItemPlasticSheets","prefabHash":662053345,"desc":"","name":"Plastic Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemPotato":{"prefab":{"prefabName":"ItemPotato","prefabHash":1929046963,"desc":" Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies.","name":"Potato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Potato":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemPotatoBaked":{"prefab":{"prefabName":"ItemPotatoBaked","prefabHash":-2111886401,"desc":"","name":"Baked Potato"},"item":{"consumable":true,"ingredient":true,"maxQuantity":1,"reagents":{"Potato":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemPowerConnector":{"prefab":{"prefabName":"ItemPowerConnector","prefabHash":839924019,"desc":"This kit creates a Power Connector.","name":"Kit (Power Connector)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemPumpkin":{"prefab":{"prefabName":"ItemPumpkin","prefabHash":1277828144,"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.","name":"Pumpkin"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Pumpkin":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemPumpkinPie":{"prefab":{"prefabName":"ItemPumpkinPie","prefabHash":62768076,"desc":"","name":"Pumpkin Pie"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemPumpkinSoup":{"prefab":{"prefabName":"ItemPumpkinSoup","prefabHash":1277979876,"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","name":"Pumpkin Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemPureIce":{"prefab":{"prefabName":"ItemPureIce","prefabHash":-1616308158,"desc":"A frozen chunk of pure Water","name":"Pure Ice Water"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceCarbonDioxide":{"prefab":{"prefabName":"ItemPureIceCarbonDioxide","prefabHash":-1251009404,"desc":"A frozen chunk of pure Carbon Dioxide","name":"Pure Ice Carbon Dioxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceHydrogen":{"prefab":{"prefabName":"ItemPureIceHydrogen","prefabHash":944530361,"desc":"A frozen chunk of pure Hydrogen","name":"Pure Ice Hydrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidCarbonDioxide":{"prefab":{"prefabName":"ItemPureIceLiquidCarbonDioxide","prefabHash":-1715945725,"desc":"A frozen chunk of pure Liquid Carbon Dioxide","name":"Pure Ice Liquid Carbon Dioxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidHydrogen":{"prefab":{"prefabName":"ItemPureIceLiquidHydrogen","prefabHash":-1044933269,"desc":"A frozen chunk of pure Liquid Hydrogen","name":"Pure Ice Liquid Hydrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidNitrogen":{"prefab":{"prefabName":"ItemPureIceLiquidNitrogen","prefabHash":1674576569,"desc":"A frozen chunk of pure Liquid Nitrogen","name":"Pure Ice Liquid Nitrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidNitrous":{"prefab":{"prefabName":"ItemPureIceLiquidNitrous","prefabHash":1428477399,"desc":"A frozen chunk of pure Liquid Nitrous Oxide","name":"Pure Ice Liquid Nitrous"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidOxygen":{"prefab":{"prefabName":"ItemPureIceLiquidOxygen","prefabHash":541621589,"desc":"A frozen chunk of pure Liquid Oxygen","name":"Pure Ice Liquid Oxygen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidPollutant":{"prefab":{"prefabName":"ItemPureIceLiquidPollutant","prefabHash":-1748926678,"desc":"A frozen chunk of pure Liquid Pollutant","name":"Pure Ice Liquid Pollutant"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidVolatiles":{"prefab":{"prefabName":"ItemPureIceLiquidVolatiles","prefabHash":-1306628937,"desc":"A frozen chunk of pure Liquid Volatiles","name":"Pure Ice Liquid Volatiles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceNitrogen":{"prefab":{"prefabName":"ItemPureIceNitrogen","prefabHash":-1708395413,"desc":"A frozen chunk of pure Nitrogen","name":"Pure Ice Nitrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceNitrous":{"prefab":{"prefabName":"ItemPureIceNitrous","prefabHash":386754635,"desc":"A frozen chunk of pure Nitrous Oxide","name":"Pure Ice NitrousOxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceOxygen":{"prefab":{"prefabName":"ItemPureIceOxygen","prefabHash":-1150448260,"desc":"A frozen chunk of pure Oxygen","name":"Pure Ice Oxygen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIcePollutant":{"prefab":{"prefabName":"ItemPureIcePollutant","prefabHash":-1755356,"desc":"A frozen chunk of pure Pollutant","name":"Pure Ice Pollutant"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIcePollutedWater":{"prefab":{"prefabName":"ItemPureIcePollutedWater","prefabHash":-2073202179,"desc":"A frozen chunk of Polluted Water","name":"Pure Ice Polluted Water"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceSteam":{"prefab":{"prefabName":"ItemPureIceSteam","prefabHash":-874791066,"desc":"A frozen chunk of pure Steam","name":"Pure Ice Steam"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceVolatiles":{"prefab":{"prefabName":"ItemPureIceVolatiles","prefabHash":-633723719,"desc":"A frozen chunk of pure Volatiles","name":"Pure Ice Volatiles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemRTG":{"prefab":{"prefabName":"ItemRTG","prefabHash":495305053,"desc":"This kit creates that miracle of modern science, a Kit (Creative RTG).","name":"Kit (Creative RTG)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemRTGSurvival":{"prefab":{"prefabName":"ItemRTGSurvival","prefabHash":1817645803,"desc":"This kit creates a Kit (RTG).","name":"Kit (RTG)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemReagentMix":{"prefab":{"prefabName":"ItemReagentMix","prefabHash":-1641500434,"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.","name":"Reagent Mix"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ores"}},"ItemRemoteDetonator":{"prefab":{"prefabName":"ItemRemoteDetonator","prefabHash":678483886,"desc":"","name":"Remote Detonator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemReusableFireExtinguisher":{"prefab":{"prefabName":"ItemReusableFireExtinguisher","prefabHash":-1773192190,"desc":"Requires a canister filled with any inert liquid to opperate.","name":"Fire Extinguisher (Reusable)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"ItemRice":{"prefab":{"prefabName":"ItemRice","prefabHash":658916791,"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.","name":"Rice"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Rice":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemRoadFlare":{"prefab":{"prefabName":"ItemRoadFlare","prefabHash":871811564,"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.","name":"Road Flare"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"Flare","sortingClass":"Default"}},"ItemRocketMiningDrillHead":{"prefab":{"prefabName":"ItemRocketMiningDrillHead","prefabHash":2109945337,"desc":"Replaceable drill head for Rocket Miner","name":"Mining-Drill Head (Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadDurable":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadDurable","prefabHash":1530764483,"desc":"","name":"Mining-Drill Head (Durable)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadHighSpeedIce":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadHighSpeedIce","prefabHash":653461728,"desc":"","name":"Mining-Drill Head (High Speed Ice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadHighSpeedMineral":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadHighSpeedMineral","prefabHash":1440678625,"desc":"","name":"Mining-Drill Head (High Speed Mineral)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadIce":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadIce","prefabHash":-380904592,"desc":"","name":"Mining-Drill Head (Ice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadLongTerm":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadLongTerm","prefabHash":-684020753,"desc":"","name":"Mining-Drill Head (Long Term)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadMineral":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadMineral","prefabHash":1083675581,"desc":"","name":"Mining-Drill Head (Mineral)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketScanningHead":{"prefab":{"prefabName":"ItemRocketScanningHead","prefabHash":-1198702771,"desc":"","name":"Rocket Scanner Head"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"ScanningHead","sortingClass":"Default"}},"ItemScanner":{"prefab":{"prefabName":"ItemScanner","prefabHash":1661270830,"desc":"A mysterious piece of technology, rumored to have Zrillian origins.","name":"Handheld Scanner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemScrewdriver":{"prefab":{"prefabName":"ItemScrewdriver","prefabHash":687940869,"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.","name":"Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemSecurityCamera":{"prefab":{"prefabName":"ItemSecurityCamera","prefabHash":-1981101032,"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.","name":"Security Camera"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemSensorLenses":{"prefab":{"prefabName":"ItemSensorLenses","prefabHash":-1176140051,"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.","name":"Sensor Lenses"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Glasses","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Sensor Processing Unit","typ":"SensorProcessingUnit"}]},"ItemSensorProcessingUnitCelestialScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitCelestialScanner","prefabHash":-1154200014,"desc":"","name":"Sensor Processing Unit (Celestial Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSensorProcessingUnitMesonScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitMesonScanner","prefabHash":-1730464583,"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.","name":"Sensor Processing Unit (T-Ray Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSensorProcessingUnitOreScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitOreScanner","prefabHash":-1219128491,"desc":"The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD.","name":"Sensor Processing Unit (Ore Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSiliconIngot":{"prefab":{"prefabName":"ItemSiliconIngot","prefabHash":-290196476,"desc":"","name":"Ingot (Silicon)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Silicon":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSiliconOre":{"prefab":{"prefabName":"ItemSiliconOre","prefabHash":1103972403,"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.","name":"Ore (Silicon)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Silicon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemSilverIngot":{"prefab":{"prefabName":"ItemSilverIngot","prefabHash":-929742000,"desc":"","name":"Ingot (Silver)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Silver":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSilverOre":{"prefab":{"prefabName":"ItemSilverOre","prefabHash":-916518678,"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.","name":"Ore (Silver)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Silver":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemSolderIngot":{"prefab":{"prefabName":"ItemSolderIngot","prefabHash":-82508479,"desc":"","name":"Ingot (Solder)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Solder":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSolidFuel":{"prefab":{"prefabName":"ItemSolidFuel","prefabHash":-365253871,"desc":"","name":"Solid Fuel (Hydrocarbon)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Hydrocarbon":1.0},"slotClass":"Ore","sortingClass":"Resources"}},"ItemSoundCartridgeBass":{"prefab":{"prefabName":"ItemSoundCartridgeBass","prefabHash":-1883441704,"desc":"","name":"Sound Cartridge Bass"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeDrums":{"prefab":{"prefabName":"ItemSoundCartridgeDrums","prefabHash":-1901500508,"desc":"","name":"Sound Cartridge Drums"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeLeads":{"prefab":{"prefabName":"ItemSoundCartridgeLeads","prefabHash":-1174735962,"desc":"","name":"Sound Cartridge Leads"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeSynth":{"prefab":{"prefabName":"ItemSoundCartridgeSynth","prefabHash":-1971419310,"desc":"","name":"Sound Cartridge Synth"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoyOil":{"prefab":{"prefabName":"ItemSoyOil","prefabHash":1387403148,"desc":"","name":"Soy Oil"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"Oil":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemSoybean":{"prefab":{"prefabName":"ItemSoybean","prefabHash":1924673028,"desc":" Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil","name":"Soybean"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Soy":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemSpaceCleaner":{"prefab":{"prefabName":"ItemSpaceCleaner","prefabHash":-1737666461,"desc":"There was a time when humanity really wanted to keep space clean. That time has passed.","name":"Space Cleaner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemSpaceHelmet":{"prefab":{"prefabName":"ItemSpaceHelmet","prefabHash":714830451,"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.","name":"Space Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemSpaceIce":{"prefab":{"prefabName":"ItemSpaceIce","prefabHash":675686937,"desc":"","name":"Space Ice"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Ore","sortingClass":"Ores"}},"ItemSpaceOre":{"prefab":{"prefabName":"ItemSpaceOre","prefabHash":2131916219,"desc":"Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores.","name":"Dirty Ore"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Ore","sortingClass":"Ores"}},"ItemSpacepack":{"prefab":{"prefabName":"ItemSpacepack","prefabHash":-1260618380,"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.","name":"Spacepack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemSprayCanBlack":{"prefab":{"prefabName":"ItemSprayCanBlack","prefabHash":-688107795,"desc":"Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses.","name":"Spray Paint (Black)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanBlue":{"prefab":{"prefabName":"ItemSprayCanBlue","prefabHash":-498464883,"desc":"What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'","name":"Spray Paint (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanBrown":{"prefab":{"prefabName":"ItemSprayCanBrown","prefabHash":845176977,"desc":"In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed.","name":"Spray Paint (Brown)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanGreen":{"prefab":{"prefabName":"ItemSprayCanGreen","prefabHash":-1880941852,"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.","name":"Spray Paint (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanGrey":{"prefab":{"prefabName":"ItemSprayCanGrey","prefabHash":-1645266981,"desc":"Arguably the most popular color in the universe, grey was invented so designers had something to do.","name":"Spray Paint (Grey)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanKhaki":{"prefab":{"prefabName":"ItemSprayCanKhaki","prefabHash":1918456047,"desc":"Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode.","name":"Spray Paint (Khaki)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanOrange":{"prefab":{"prefabName":"ItemSprayCanOrange","prefabHash":-158007629,"desc":"Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove.","name":"Spray Paint (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanPink":{"prefab":{"prefabName":"ItemSprayCanPink","prefabHash":1344257263,"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.","name":"Spray Paint (Pink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanPurple":{"prefab":{"prefabName":"ItemSprayCanPurple","prefabHash":30686509,"desc":"Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong.","name":"Spray Paint (Purple)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanRed":{"prefab":{"prefabName":"ItemSprayCanRed","prefabHash":1514393921,"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.","name":"Spray Paint (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanWhite":{"prefab":{"prefabName":"ItemSprayCanWhite","prefabHash":498481505,"desc":"White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff.","name":"Spray Paint (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanYellow":{"prefab":{"prefabName":"ItemSprayCanYellow","prefabHash":995468116,"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.","name":"Spray Paint (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayGun":{"prefab":{"prefabName":"ItemSprayGun","prefabHash":1289723966,"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.","name":"Spray Gun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Spray Can","typ":"Bottle"}]},"ItemSteelFrames":{"prefab":{"prefabName":"ItemSteelFrames","prefabHash":-1448105779,"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.","name":"Steel Frames"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemSteelIngot":{"prefab":{"prefabName":"ItemSteelIngot","prefabHash":-654790771,"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.","name":"Ingot (Steel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Steel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSteelSheets":{"prefab":{"prefabName":"ItemSteelSheets","prefabHash":38555961,"desc":"An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types.","name":"Steel Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemStelliteGlassSheets":{"prefab":{"prefabName":"ItemStelliteGlassSheets","prefabHash":-2038663432,"desc":"A stronger glass substitute.","name":"Stellite Glass Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemStelliteIngot":{"prefab":{"prefabName":"ItemStelliteIngot","prefabHash":-1897868623,"desc":"","name":"Ingot (Stellite)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Stellite":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSugar":{"prefab":{"prefabName":"ItemSugar","prefabHash":2111910840,"desc":"","name":"Sugar"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Sugar":10.0},"slotClass":"None","sortingClass":"Resources"}},"ItemSugarCane":{"prefab":{"prefabName":"ItemSugarCane","prefabHash":-1335056202,"desc":"","name":"Sugarcane"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Sugar":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemSuitModCryogenicUpgrade":{"prefab":{"prefabName":"ItemSuitModCryogenicUpgrade","prefabHash":-1274308304,"desc":"Enables suits with basic cooling functionality to work with cryogenic liquid.","name":"Cryogenic Suit Upgrade"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SuitMod","sortingClass":"Default"}},"ItemTablet":{"prefab":{"prefabName":"ItemTablet","prefabHash":-229808600,"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.","name":"Handheld Tablet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"}]},"ItemTerrainManipulator":{"prefab":{"prefabName":"ItemTerrainManipulator","prefabHash":111280987,"desc":"0.Mode0\n1.Mode1","name":"Terrain Manipulator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Dirt Canister","typ":"Ore"}]},"ItemTomato":{"prefab":{"prefabName":"ItemTomato","prefabHash":-998592080,"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.","name":"Tomato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Tomato":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemTomatoSoup":{"prefab":{"prefabName":"ItemTomatoSoup","prefabHash":688734890,"desc":"Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine.","name":"Tomato Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemToolBelt":{"prefab":{"prefabName":"ItemToolBelt","prefabHash":-355127880,"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.","name":"Tool Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemTropicalPlant":{"prefab":{"prefabName":"ItemTropicalPlant","prefabHash":-800947386,"desc":"An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants.","name":"Tropical Lily"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemUraniumOre":{"prefab":{"prefabName":"ItemUraniumOre","prefabHash":-1516581844,"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.","name":"Ore (Uranium)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Uranium":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemVolatiles":{"prefab":{"prefabName":"ItemVolatiles","prefabHash":1253102035,"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","name":"Ice (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemWallCooler":{"prefab":{"prefabName":"ItemWallCooler","prefabHash":-1567752627,"desc":"This kit creates a Wall Cooler.","name":"Kit (Wall Cooler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWallHeater":{"prefab":{"prefabName":"ItemWallHeater","prefabHash":1880134612,"desc":"This kit creates a Kit (Wall Heater).","name":"Kit (Wall Heater)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWallLight":{"prefab":{"prefabName":"ItemWallLight","prefabHash":1108423476,"desc":"This kit creates any one of ten Kit (Lights) variants.","name":"Kit (Lights)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemWaspaloyIngot":{"prefab":{"prefabName":"ItemWaspaloyIngot","prefabHash":156348098,"desc":"","name":"Ingot (Waspaloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Waspaloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemWaterBottle":{"prefab":{"prefabName":"ItemWaterBottle","prefabHash":107741229,"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.","name":"Water Bottle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"LiquidBottle","sortingClass":"Default"}},"ItemWaterPipeDigitalValve":{"prefab":{"prefabName":"ItemWaterPipeDigitalValve","prefabHash":309693520,"desc":"","name":"Kit (Liquid Digital Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWaterPipeMeter":{"prefab":{"prefabName":"ItemWaterPipeMeter","prefabHash":-90898877,"desc":"","name":"Kit (Liquid Pipe Meter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWaterWallCooler":{"prefab":{"prefabName":"ItemWaterWallCooler","prefabHash":-1721846327,"desc":"","name":"Kit (Liquid Wall Cooler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWearLamp":{"prefab":{"prefabName":"ItemWearLamp","prefabHash":-598730959,"desc":"","name":"Headlamp"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemWeldingTorch":{"prefab":{"prefabName":"ItemWeldingTorch","prefabHash":-2066892079,"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.","name":"Welding Torch"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemWheat":{"prefab":{"prefabName":"ItemWheat","prefabHash":-1057658015,"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.","name":"Wheat"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Carbon":1.0},"slotClass":"Plant","sortingClass":"Default"}},"ItemWireCutters":{"prefab":{"prefabName":"ItemWireCutters","prefabHash":1535854074,"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.","name":"Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemWirelessBatteryCellExtraLarge":{"prefab":{"prefabName":"ItemWirelessBatteryCellExtraLarge","prefabHash":-504717121,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Wireless Battery Cell Extra Large"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemWreckageAirConditioner1":{"prefab":{"prefabName":"ItemWreckageAirConditioner1","prefabHash":-1826023284,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageAirConditioner2":{"prefab":{"prefabName":"ItemWreckageAirConditioner2","prefabHash":169888054,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageHydroponicsTray1":{"prefab":{"prefabName":"ItemWreckageHydroponicsTray1","prefabHash":-310178617,"desc":"","name":"Wreckage Hydroponics Tray"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageLargeExtendableRadiator01":{"prefab":{"prefabName":"ItemWreckageLargeExtendableRadiator01","prefabHash":-997763,"desc":"","name":"Wreckage Large Extendable Radiator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureRTG1":{"prefab":{"prefabName":"ItemWreckageStructureRTG1","prefabHash":391453348,"desc":"","name":"Wreckage Structure RTG"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation001":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation001","prefabHash":-834664349,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation002":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation002","prefabHash":1464424921,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation003":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation003","prefabHash":542009679,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation004":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation004","prefabHash":-1104478996,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation005":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation005","prefabHash":-919745414,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation006":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation006","prefabHash":1344576960,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation007":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation007","prefabHash":656649558,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation008":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation008","prefabHash":-1214467897,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator1":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator1","prefabHash":-1662394403,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator2":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator2","prefabHash":98602599,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator3":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator3","prefabHash":1927790321,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageWallCooler1":{"prefab":{"prefabName":"ItemWreckageWallCooler1","prefabHash":-1682930158,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageWallCooler2":{"prefab":{"prefabName":"ItemWreckageWallCooler2","prefabHash":45733800,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWrench":{"prefab":{"prefabName":"ItemWrench","prefabHash":-1886261558,"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","name":"Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"KitSDBSilo":{"prefab":{"prefabName":"KitSDBSilo","prefabHash":1932952652,"desc":"This kit creates a SDB Silo.","name":"Kit (SDB Silo)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"KitStructureCombustionCentrifuge":{"prefab":{"prefabName":"KitStructureCombustionCentrifuge","prefabHash":231903234,"desc":"","name":"Kit (Combustion Centrifuge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"KitchenTableShort":{"prefab":{"prefabName":"KitchenTableShort","prefabHash":-1427415566,"desc":"","name":"Kitchen Table (Short)"},"structure":{"smallGrid":true}},"KitchenTableSimpleShort":{"prefab":{"prefabName":"KitchenTableSimpleShort","prefabHash":-78099334,"desc":"","name":"Kitchen Table (Simple Short)"},"structure":{"smallGrid":true}},"KitchenTableSimpleTall":{"prefab":{"prefabName":"KitchenTableSimpleTall","prefabHash":-1068629349,"desc":"","name":"Kitchen Table (Simple Tall)"},"structure":{"smallGrid":true}},"KitchenTableTall":{"prefab":{"prefabName":"KitchenTableTall","prefabHash":-1386237782,"desc":"","name":"Kitchen Table (Tall)"},"structure":{"smallGrid":true}},"Lander":{"prefab":{"prefabName":"Lander","prefabHash":1605130615,"desc":"","name":"Lander"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"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"}]},"Landingpad_2x2CenterPiece01":{"prefab":{"prefabName":"Landingpad_2x2CenterPiece01","prefabHash":-1295222317,"desc":"Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors","name":"Landingpad 2x2 Center Piece"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Landingpad_BlankPiece":{"prefab":{"prefabName":"Landingpad_BlankPiece","prefabHash":912453390,"desc":"","name":"Landingpad"},"structure":{"smallGrid":true}},"Landingpad_CenterPiece01":{"prefab":{"prefabName":"Landingpad_CenterPiece01","prefabHash":1070143159,"desc":"The target point where the trader shuttle will land. Requires a clear view of the sky.","name":"Landingpad Center"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"modes":{"0":"None","1":"NoContact","2":"Moving","3":"Holding","4":"Landed"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Landingpad_CrossPiece":{"prefab":{"prefabName":"Landingpad_CrossPiece","prefabHash":1101296153,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Cross"},"structure":{"smallGrid":true}},"Landingpad_DataConnectionPiece":{"prefab":{"prefabName":"Landingpad_DataConnectionPiece","prefabHash":-2066405918,"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.","name":"Landingpad Data And Power"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Combustion":"Read","ContactTypeId":"Read","Error":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_DiagonalPiece01":{"prefab":{"prefabName":"Landingpad_DiagonalPiece01","prefabHash":977899131,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Diagonal"},"structure":{"smallGrid":true}},"Landingpad_GasConnectorInwardPiece":{"prefab":{"prefabName":"Landingpad_GasConnectorInwardPiece","prefabHash":817945707,"desc":"","name":"Landingpad Gas Input"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_GasConnectorOutwardPiece":{"prefab":{"prefabName":"Landingpad_GasConnectorOutwardPiece","prefabHash":-1100218307,"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.","name":"Landingpad Gas Output"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_GasCylinderTankPiece":{"prefab":{"prefabName":"Landingpad_GasCylinderTankPiece","prefabHash":170818567,"desc":"Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders.","name":"Landingpad Gas Storage"},"structure":{"smallGrid":true}},"Landingpad_LiquidConnectorInwardPiece":{"prefab":{"prefabName":"Landingpad_LiquidConnectorInwardPiece","prefabHash":-1216167727,"desc":"","name":"Landingpad Liquid Input"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_LiquidConnectorOutwardPiece":{"prefab":{"prefabName":"Landingpad_LiquidConnectorOutwardPiece","prefabHash":-1788929869,"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.","name":"Landingpad Liquid Output"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_StraightPiece01":{"prefab":{"prefabName":"Landingpad_StraightPiece01","prefabHash":-976273247,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Straight"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceCorner":{"prefab":{"prefabName":"Landingpad_TaxiPieceCorner","prefabHash":-1872345847,"desc":"","name":"Landingpad Taxi Corner"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceHold":{"prefab":{"prefabName":"Landingpad_TaxiPieceHold","prefabHash":146051619,"desc":"","name":"Landingpad Taxi Hold"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceStraight":{"prefab":{"prefabName":"Landingpad_TaxiPieceStraight","prefabHash":-1477941080,"desc":"","name":"Landingpad Taxi Straight"},"structure":{"smallGrid":true}},"Landingpad_ThreshholdPiece":{"prefab":{"prefabName":"Landingpad_ThreshholdPiece","prefabHash":-1514298582,"desc":"","name":"Landingpad Threshhold"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"LogicStepSequencer8":{"prefab":{"prefabName":"LogicStepSequencer8","prefabHash":1531272458,"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.","name":"Logic Step Sequencer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","Bpm":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Sound Cartridge","typ":"SoundCartridge"}],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Meteorite":{"prefab":{"prefabName":"Meteorite","prefabHash":-99064335,"desc":"","name":"Meteorite"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"MonsterEgg":{"prefab":{"prefabName":"MonsterEgg","prefabHash":-1667675295,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"MotherboardComms":{"prefab":{"prefabName":"MotherboardComms","prefabHash":-337075633,"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.","name":"Communications Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardLogic":{"prefab":{"prefabName":"MotherboardLogic","prefabHash":502555944,"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.","name":"Logic Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardMissionControl":{"prefab":{"prefabName":"MotherboardMissionControl","prefabHash":-127121474,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardProgrammableChip":{"prefab":{"prefabName":"MotherboardProgrammableChip","prefabHash":-161107071,"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.","name":"IC Editor Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardRockets":{"prefab":{"prefabName":"MotherboardRockets","prefabHash":-806986392,"desc":"","name":"Rocket Control Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardSorter":{"prefab":{"prefabName":"MotherboardSorter","prefabHash":-1908268220,"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.","name":"Sorter Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MothershipCore":{"prefab":{"prefabName":"MothershipCore","prefabHash":-1930442922,"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.","name":"Mothership Core"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"NpcChick":{"prefab":{"prefabName":"NpcChick","prefabHash":155856647,"desc":"","name":"Chick"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"NpcChicken":{"prefab":{"prefabName":"NpcChicken","prefabHash":399074198,"desc":"","name":"Chicken"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"PassiveSpeaker":{"prefab":{"prefabName":"PassiveSpeaker","prefabHash":248893646,"desc":"","name":"Passive Speaker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"ReadWrite","PrefabHash":"ReadWrite","ReferenceId":"ReadWrite","SoundAlert":"ReadWrite","Volume":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"PipeBenderMod":{"prefab":{"prefabName":"PipeBenderMod","prefabHash":443947415,"desc":"Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Pipe Bender Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"PortableComposter":{"prefab":{"prefabName":"PortableComposter","prefabHash":-1958705204,"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","name":"Portable Composter"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"Battery"},{"name":"Liquid Canister","typ":"LiquidCanister"}]},"PortableSolarPanel":{"prefab":{"prefabName":"PortableSolarPanel","prefabHash":2043318949,"desc":"","name":"Portable Solar Panel"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Open":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"RailingElegant01":{"prefab":{"prefabName":"RailingElegant01","prefabHash":399661231,"desc":"","name":"Railing Elegant (Type 1)"},"structure":{"smallGrid":false}},"RailingElegant02":{"prefab":{"prefabName":"RailingElegant02","prefabHash":-1898247915,"desc":"","name":"Railing Elegant (Type 2)"},"structure":{"smallGrid":false}},"RailingIndustrial02":{"prefab":{"prefabName":"RailingIndustrial02","prefabHash":-2072792175,"desc":"","name":"Railing Industrial (Type 2)"},"structure":{"smallGrid":false}},"ReagentColorBlue":{"prefab":{"prefabName":"ReagentColorBlue","prefabHash":980054869,"desc":"","name":"Color Dye (Blue)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorBlue":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorGreen":{"prefab":{"prefabName":"ReagentColorGreen","prefabHash":120807542,"desc":"","name":"Color Dye (Green)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorGreen":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorOrange":{"prefab":{"prefabName":"ReagentColorOrange","prefabHash":-400696159,"desc":"","name":"Color Dye (Orange)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorOrange":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorRed":{"prefab":{"prefabName":"ReagentColorRed","prefabHash":1998377961,"desc":"","name":"Color Dye (Red)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorRed":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorYellow":{"prefab":{"prefabName":"ReagentColorYellow","prefabHash":635208006,"desc":"","name":"Color Dye (Yellow)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorYellow":10.0},"slotClass":"None","sortingClass":"Resources"}},"RespawnPoint":{"prefab":{"prefabName":"RespawnPoint","prefabHash":-788672929,"desc":"Place a respawn point to set a player entry point to your base when loading in, or returning from the dead.","name":"Respawn Point"},"structure":{"smallGrid":true}},"RespawnPointWallMounted":{"prefab":{"prefabName":"RespawnPointWallMounted","prefabHash":-491247370,"desc":"","name":"Respawn Point (Mounted)"},"structure":{"smallGrid":true}},"Robot":{"prefab":{"prefabName":"Robot","prefabHash":434786784,"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","name":"AIMeE Bot"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"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"}]},"RoverCargo":{"prefab":{"prefabName":"RoverCargo","prefabHash":350726273,"desc":"Connects to Logic Transmitter","name":"Rover (Cargo)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"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":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI":{"prefab":{"prefabName":"Rover_MkI","prefabHash":-2049946335,"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","name":"Rover MkI"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"},"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"},"10":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"slots":[{"name":"Entity","typ":"Entity"},{"name":"Entity","typ":"Entity"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI_build_states":{"prefab":{"prefabName":"Rover_MkI_build_states","prefabHash":861674123,"desc":"","name":"Rover MKI"},"structure":{"smallGrid":false}},"SMGMagazine":{"prefab":{"prefabName":"SMGMagazine","prefabHash":-256607540,"desc":"","name":"SMG Magazine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Magazine","sortingClass":"Default"}},"SeedBag_Cocoa":{"prefab":{"prefabName":"SeedBag_Cocoa","prefabHash":1139887531,"desc":"","name":"Cocoa Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Corn":{"prefab":{"prefabName":"SeedBag_Corn","prefabHash":-1290755415,"desc":"Grow a Corn.","name":"Corn Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Fern":{"prefab":{"prefabName":"SeedBag_Fern","prefabHash":-1990600883,"desc":"Grow a Fern.","name":"Fern Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Mushroom":{"prefab":{"prefabName":"SeedBag_Mushroom","prefabHash":311593418,"desc":"Grow a Mushroom.","name":"Mushroom Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Potato":{"prefab":{"prefabName":"SeedBag_Potato","prefabHash":1005571172,"desc":"Grow a Potato.","name":"Potato Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Pumpkin":{"prefab":{"prefabName":"SeedBag_Pumpkin","prefabHash":1423199840,"desc":"Grow a Pumpkin.","name":"Pumpkin Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Rice":{"prefab":{"prefabName":"SeedBag_Rice","prefabHash":-1691151239,"desc":"Grow some Rice.","name":"Rice Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Soybean":{"prefab":{"prefabName":"SeedBag_Soybean","prefabHash":1783004244,"desc":"Grow some Soybean.","name":"Soybean Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_SugarCane":{"prefab":{"prefabName":"SeedBag_SugarCane","prefabHash":-1884103228,"desc":"","name":"Sugarcane Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Switchgrass":{"prefab":{"prefabName":"SeedBag_Switchgrass","prefabHash":488360169,"desc":"","name":"Switchgrass Seed"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Tomato":{"prefab":{"prefabName":"SeedBag_Tomato","prefabHash":-1922066841,"desc":"Grow a Tomato.","name":"Tomato Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Wheet":{"prefab":{"prefabName":"SeedBag_Wheet","prefabHash":-654756733,"desc":"Grow some Wheat.","name":"Wheat Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SpaceShuttle":{"prefab":{"prefabName":"SpaceShuttle","prefabHash":-1991297271,"desc":"An antiquated Sinotai transport craft, long since decommissioned.","name":"Space Shuttle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Captain's Seat","typ":"Entity"},{"name":"Passenger Seat Left","typ":"Entity"},{"name":"Passenger Seat Right","typ":"Entity"}]},"StopWatch":{"prefab":{"prefabName":"StopWatch","prefabHash":-1527229051,"desc":"","name":"Stop Watch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Time":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureAccessBridge":{"prefab":{"prefabName":"StructureAccessBridge","prefabHash":1298920475,"desc":"Extendable bridge that spans three grids","name":"Access Bridge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureActiveVent":{"prefab":{"prefabName":"StructureActiveVent","prefabHash":-1129453144,"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 ...","name":"Active Vent"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAdvancedComposter":{"prefab":{"prefabName":"StructureAdvancedComposter","prefabHash":446212963,"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","name":"Advanced Composter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAdvancedFurnace":{"prefab":{"prefabName":"StructureAdvancedFurnace","prefabHash":545937711,"desc":"The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure.","name":"Advanced Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Combustion":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"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","Reagents":"Read","RecipeHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingInput":"ReadWrite","SettingOutput":"ReadWrite","Temperature":"Read","TotalMoles":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureAdvancedPackagingMachine":{"prefab":{"prefabName":"StructureAdvancedPackagingMachine","prefabHash":-463037670,"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.","name":"Advanced Packaging Machine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureAirConditioner":{"prefab":{"prefabName":"StructureAirConditioner","prefabHash":-2087593337,"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.","name":"Air Conditioner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"CombustionInput":"Read","CombustionOutput":"Read","CombustionOutput2":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidCarbonDioxideOutput2":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrogenOutput2":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidNitrousOxideOutput2":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidOxygenOutput2":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidPollutantOutput2":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"Read","RatioLiquidVolatilesOutput2":"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","RatioSteamInput":"Read","RatioSteamOutput":"Read","RatioSteamOutput2":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Waste"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAirlock":{"prefab":{"prefabName":"StructureAirlock","prefabHash":-2105052344,"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.","name":"Airlock"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAirlockGate":{"prefab":{"prefabName":"StructureAirlockGate","prefabHash":1736080881,"desc":"1 x 1 modular door piece for building hangar doors.","name":"Small Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAngledBench":{"prefab":{"prefabName":"StructureAngledBench","prefabHash":1811979158,"desc":"","name":"Bench (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureArcFurnace":{"prefab":{"prefabName":"StructureArcFurnace","prefabHash":-247344692,"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.","name":"Arc Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","Idle":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"},{"name":"Export","typ":"Ingot"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureAreaPowerControl":{"prefab":{"prefabName":"StructureAreaPowerControl","prefabHash":1999523701,"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.","name":"Area Power Control"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Charge":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAreaPowerControlReversed":{"prefab":{"prefabName":"StructureAreaPowerControlReversed","prefabHash":-1032513487,"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.","name":"Area Power Control"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Charge":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAutoMinerSmall":{"prefab":{"prefabName":"StructureAutoMinerSmall","prefabHash":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":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAutolathe":{"prefab":{"prefabName":"StructureAutolathe","prefabHash":336213101,"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 ","name":"Autolathe"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureAutomatedOven":{"prefab":{"prefabName":"StructureAutomatedOven","prefabHash":-1672404896,"desc":"","name":"Automated Oven"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureBackLiquidPressureRegulator":{"prefab":{"prefabName":"StructureBackLiquidPressureRegulator","prefabHash":2099900163,"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.","name":"Liquid Back Volume Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBackPressureRegulator":{"prefab":{"prefabName":"StructureBackPressureRegulator","prefabHash":-1149857558,"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.","name":"Back Pressure Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBasketHoop":{"prefab":{"prefabName":"StructureBasketHoop","prefabHash":-1613497288,"desc":"","name":"Basket Hoop"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBattery":{"prefab":{"prefabName":"StructureBattery","prefabHash":-400115994,"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).","name":"Station Battery"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryCharger":{"prefab":{"prefabName":"StructureBatteryCharger","prefabHash":1945930022,"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.","name":"Battery Cell Charger"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryChargerSmall":{"prefab":{"prefabName":"StructureBatteryChargerSmall","prefabHash":-761772413,"desc":"","name":"Battery Charger Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryLarge":{"prefab":{"prefabName":"StructureBatteryLarge","prefabHash":-1388288459,"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). ","name":"Station Battery (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryMedium":{"prefab":{"prefabName":"StructureBatteryMedium","prefabHash":-1125305264,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Maximum":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatterySmall":{"prefab":{"prefabName":"StructureBatterySmall","prefabHash":-2123455080,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Auxiliary Rocket Battery "},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Maximum":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBeacon":{"prefab":{"prefabName":"StructureBeacon","prefabHash":-188177083,"desc":"","name":"Beacon"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench":{"prefab":{"prefabName":"StructureBench","prefabHash":-2042448192,"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.","name":"Powered Bench"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench1":{"prefab":{"prefabName":"StructureBench1","prefabHash":406745009,"desc":"","name":"Bench (Counter Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench2":{"prefab":{"prefabName":"StructureBench2","prefabHash":-2127086069,"desc":"","name":"Bench (High Tech Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench3":{"prefab":{"prefabName":"StructureBench3","prefabHash":-164622691,"desc":"","name":"Bench (Frame Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench4":{"prefab":{"prefabName":"StructureBench4","prefabHash":1750375230,"desc":"","name":"Bench (Workbench Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBlastDoor":{"prefab":{"prefabName":"StructureBlastDoor","prefabHash":337416191,"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.","name":"Blast Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureBlockBed":{"prefab":{"prefabName":"StructureBlockBed","prefabHash":697908419,"desc":"Description coming.","name":"Block Bed"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBlocker":{"prefab":{"prefabName":"StructureBlocker","prefabHash":378084505,"desc":"","name":"Blocker"},"structure":{"smallGrid":false}},"StructureCableAnalysizer":{"prefab":{"prefabName":"StructureCableAnalysizer","prefabHash":1036015121,"desc":"","name":"Cable Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PowerActual":"Read","PowerPotential":"Read","PowerRequired":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableCorner":{"prefab":{"prefabName":"StructureCableCorner","prefabHash":-889269388,"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).","name":"Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3":{"prefab":{"prefabName":"StructureCableCorner3","prefabHash":980469101,"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).","name":"Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3Burnt":{"prefab":{"prefabName":"StructureCableCorner3Burnt","prefabHash":318437449,"desc":"","name":"Burnt Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3HBurnt":{"prefab":{"prefabName":"StructureCableCorner3HBurnt","prefabHash":2393826,"desc":"","name":""},"structure":{"smallGrid":true}},"StructureCableCorner4":{"prefab":{"prefabName":"StructureCableCorner4","prefabHash":-1542172466,"desc":"","name":"Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner4Burnt":{"prefab":{"prefabName":"StructureCableCorner4Burnt","prefabHash":268421361,"desc":"","name":"Burnt Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner4HBurnt":{"prefab":{"prefabName":"StructureCableCorner4HBurnt","prefabHash":-981223316,"desc":"","name":"Burnt Heavy Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerBurnt":{"prefab":{"prefabName":"StructureCableCornerBurnt","prefabHash":-177220914,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH":{"prefab":{"prefabName":"StructureCableCornerH","prefabHash":-39359015,"desc":"","name":"Heavy Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH3":{"prefab":{"prefabName":"StructureCableCornerH3","prefabHash":-1843379322,"desc":"","name":"Heavy Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH4":{"prefab":{"prefabName":"StructureCableCornerH4","prefabHash":205837861,"desc":"","name":"Heavy Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerHBurnt":{"prefab":{"prefabName":"StructureCableCornerHBurnt","prefabHash":1931412811,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableFuse100k":{"prefab":{"prefabName":"StructureCableFuse100k","prefabHash":281380789,"desc":"","name":"Fuse (100kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse1k":{"prefab":{"prefabName":"StructureCableFuse1k","prefabHash":-1103727120,"desc":"","name":"Fuse (1kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse50k":{"prefab":{"prefabName":"StructureCableFuse50k","prefabHash":-349716617,"desc":"","name":"Fuse (50kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse5k":{"prefab":{"prefabName":"StructureCableFuse5k","prefabHash":-631590668,"desc":"","name":"Fuse (5kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableJunction":{"prefab":{"prefabName":"StructureCableJunction","prefabHash":-175342021,"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).","name":"Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4":{"prefab":{"prefabName":"StructureCableJunction4","prefabHash":1112047202,"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).","name":"Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4Burnt":{"prefab":{"prefabName":"StructureCableJunction4Burnt","prefabHash":-1756896811,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4HBurnt":{"prefab":{"prefabName":"StructureCableJunction4HBurnt","prefabHash":-115809132,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction5":{"prefab":{"prefabName":"StructureCableJunction5","prefabHash":894390004,"desc":"","name":"Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction5Burnt":{"prefab":{"prefabName":"StructureCableJunction5Burnt","prefabHash":1545286256,"desc":"","name":"Burnt Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6":{"prefab":{"prefabName":"StructureCableJunction6","prefabHash":-1404690610,"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).","name":"Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6Burnt":{"prefab":{"prefabName":"StructureCableJunction6Burnt","prefabHash":-628145954,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6HBurnt":{"prefab":{"prefabName":"StructureCableJunction6HBurnt","prefabHash":1854404029,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionBurnt":{"prefab":{"prefabName":"StructureCableJunctionBurnt","prefabHash":-1620686196,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH":{"prefab":{"prefabName":"StructureCableJunctionH","prefabHash":469451637,"desc":"","name":"Heavy Cable (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH4":{"prefab":{"prefabName":"StructureCableJunctionH4","prefabHash":-742234680,"desc":"","name":"Heavy Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH5":{"prefab":{"prefabName":"StructureCableJunctionH5","prefabHash":-1530571426,"desc":"","name":"Heavy Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH5Burnt":{"prefab":{"prefabName":"StructureCableJunctionH5Burnt","prefabHash":1701593300,"desc":"","name":"Burnt Heavy Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH6":{"prefab":{"prefabName":"StructureCableJunctionH6","prefabHash":1036780772,"desc":"","name":"Heavy Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionHBurnt":{"prefab":{"prefabName":"StructureCableJunctionHBurnt","prefabHash":-341365649,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableStraight":{"prefab":{"prefabName":"StructureCableStraight","prefabHash":605357050,"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).","name":"Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightBurnt":{"prefab":{"prefabName":"StructureCableStraightBurnt","prefabHash":-1196981113,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightH":{"prefab":{"prefabName":"StructureCableStraightH","prefabHash":-146200530,"desc":"","name":"Heavy Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightHBurnt":{"prefab":{"prefabName":"StructureCableStraightHBurnt","prefabHash":2085762089,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCamera":{"prefab":{"prefabName":"StructureCamera","prefabHash":-342072665,"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.","name":"Camera"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureCapsuleTankGas":{"prefab":{"prefabName":"StructureCapsuleTankGas","prefabHash":-1385712131,"desc":"","name":"Gas Capsule Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCapsuleTankLiquid":{"prefab":{"prefabName":"StructureCapsuleTankLiquid","prefabHash":1415396263,"desc":"","name":"Liquid Capsule Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCargoStorageMedium":{"prefab":{"prefabName":"StructureCargoStorageMedium","prefabHash":1151864003,"desc":"","name":"Cargo Storage (Medium)"},"structure":{"smallGrid":true},"logic":{"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":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCargoStorageSmall":{"prefab":{"prefabName":"StructureCargoStorageSmall","prefabHash":-1493672123,"desc":"","name":"Cargo Storage (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"},"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"},"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"},"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"},"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCentrifuge":{"prefab":{"prefabName":"StructureCentrifuge","prefabHash":690945935,"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.","name":"Centrifuge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureChair":{"prefab":{"prefabName":"StructureChair","prefabHash":1167659360,"desc":"One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs.","name":"Chair"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBacklessDouble":{"prefab":{"prefabName":"StructureChairBacklessDouble","prefabHash":1944858936,"desc":"","name":"Chair (Backless Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBacklessSingle":{"prefab":{"prefabName":"StructureChairBacklessSingle","prefabHash":1672275150,"desc":"","name":"Chair (Backless Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBoothCornerLeft":{"prefab":{"prefabName":"StructureChairBoothCornerLeft","prefabHash":-367720198,"desc":"","name":"Chair (Booth Corner Left)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBoothMiddle":{"prefab":{"prefabName":"StructureChairBoothMiddle","prefabHash":1640720378,"desc":"","name":"Chair (Booth Middle)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairRectangleDouble":{"prefab":{"prefabName":"StructureChairRectangleDouble","prefabHash":-1152812099,"desc":"","name":"Chair (Rectangle Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairRectangleSingle":{"prefab":{"prefabName":"StructureChairRectangleSingle","prefabHash":-1425428917,"desc":"","name":"Chair (Rectangle Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairThickDouble":{"prefab":{"prefabName":"StructureChairThickDouble","prefabHash":-1245724402,"desc":"","name":"Chair (Thick Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairThickSingle":{"prefab":{"prefabName":"StructureChairThickSingle","prefabHash":-1510009608,"desc":"","name":"Chair (Thick Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteBin":{"prefab":{"prefabName":"StructureChuteBin","prefabHash":-850484480,"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.","name":"Chute Bin"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Input","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteCorner":{"prefab":{"prefabName":"StructureChuteCorner","prefabHash":1360330136,"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.","name":"Chute (Corner)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteDigitalFlipFlopSplitterLeft":{"prefab":{"prefabName":"StructureChuteDigitalFlipFlopSplitterLeft","prefabHash":-810874728,"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.","name":"Chute Digital Flip Flop Splitter Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingOutput":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Output2"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureChuteDigitalFlipFlopSplitterRight":{"prefab":{"prefabName":"StructureChuteDigitalFlipFlopSplitterRight","prefabHash":163728359,"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.","name":"Chute Digital Flip Flop Splitter Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingOutput":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Output2"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureChuteDigitalValveLeft":{"prefab":{"prefabName":"StructureChuteDigitalValveLeft","prefabHash":648608238,"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.","name":"Chute Digital Valve Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteDigitalValveRight":{"prefab":{"prefabName":"StructureChuteDigitalValveRight","prefabHash":-1337091041,"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.","name":"Chute Digital Valve Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteFlipFlopSplitter":{"prefab":{"prefabName":"StructureChuteFlipFlopSplitter","prefabHash":-1446854725,"desc":"A chute that toggles between two outputs","name":"Chute Flip Flop Splitter"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteInlet":{"prefab":{"prefabName":"StructureChuteInlet","prefabHash":-1469588766,"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.","name":"Chute Inlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteJunction":{"prefab":{"prefabName":"StructureChuteJunction","prefabHash":-611232514,"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.","name":"Chute (Junction)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteOutlet":{"prefab":{"prefabName":"StructureChuteOutlet","prefabHash":-1022714809,"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.","name":"Chute Outlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteOverflow":{"prefab":{"prefabName":"StructureChuteOverflow","prefabHash":225377225,"desc":"The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied.","name":"Chute Overflow"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteStraight":{"prefab":{"prefabName":"StructureChuteStraight","prefabHash":168307007,"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.","name":"Chute (Straight)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteUmbilicalFemale":{"prefab":{"prefabName":"StructureChuteUmbilicalFemale","prefabHash":-1918892177,"desc":"","name":"Umbilical Socket (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureChuteUmbilicalFemaleSide","prefabHash":-659093969,"desc":"","name":"Umbilical Socket Angle (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteUmbilicalMale":{"prefab":{"prefabName":"StructureChuteUmbilicalMale","prefabHash":-958884053,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteValve":{"prefab":{"prefabName":"StructureChuteValve","prefabHash":434875271,"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.","name":"Chute Valve"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteWindow":{"prefab":{"prefabName":"StructureChuteWindow","prefabHash":-607241919,"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.","name":"Chute (Window)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureCircuitHousing":{"prefab":{"prefabName":"StructureCircuitHousing","prefabHash":-128473777,"desc":"","name":"IC Housing"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","LineNumber":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","LineNumber":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"devicePinsLength":6,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"StructureCombustionCentrifuge":{"prefab":{"prefabName":"StructureCombustionCentrifuge","prefabHash":1238905683,"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 ","name":"Combustion Centrifuge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"ClearMemory":"Write","Combustion":"Read","CombustionInput":"Read","CombustionLimiter":"ReadWrite","CombustionOutput":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Pressure":"Read","PressureInput":"Read","PressureOutput":"Read","RatioCarbonDioxide":"Read","RatioCarbonDioxideInput":"Read","RatioCarbonDioxideOutput":"Read","RatioHydrogen":"Read","RatioLiquidCarbonDioxide":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidHydrogen":"Read","RatioLiquidNitrogen":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"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","RatioSteamInput":"Read","RatioSteamOutput":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureCompositeCladdingAngled":{"prefab":{"prefabName":"StructureCompositeCladdingAngled","prefabHash":-1513030150,"desc":"","name":"Composite Cladding (Angled)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCorner":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCorner","prefabHash":-69685069,"desc":"","name":"Composite Cladding (Angled Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInner":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInner","prefabHash":-1841871763,"desc":"","name":"Composite Cladding (Angled Corner Inner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLong","prefabHash":-1417912632,"desc":"","name":"Composite Cladding (Angled Corner Inner Long)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLongL":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLongL","prefabHash":947705066,"desc":"","name":"Composite Cladding (Angled Corner Inner Long L)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLongR":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLongR","prefabHash":-1032590967,"desc":"","name":"Composite Cladding (Angled Corner Inner Long R)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerLong","prefabHash":850558385,"desc":"","name":"Composite Cladding (Long Angled Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerLongR":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerLongR","prefabHash":-348918222,"desc":"","name":"Composite Cladding (Long Angled Mirrored Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledLong","prefabHash":-387546514,"desc":"","name":"Composite Cladding (Long Angled)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingCylindrical":{"prefab":{"prefabName":"StructureCompositeCladdingCylindrical","prefabHash":212919006,"desc":"","name":"Composite Cladding (Cylindrical)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingCylindricalPanel":{"prefab":{"prefabName":"StructureCompositeCladdingCylindricalPanel","prefabHash":1077151132,"desc":"","name":"Composite Cladding (Cylindrical Panel)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingPanel":{"prefab":{"prefabName":"StructureCompositeCladdingPanel","prefabHash":1997436771,"desc":"","name":"Composite Cladding (Panel)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRounded":{"prefab":{"prefabName":"StructureCompositeCladdingRounded","prefabHash":-259357734,"desc":"","name":"Composite Cladding (Rounded)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRoundedCorner":{"prefab":{"prefabName":"StructureCompositeCladdingRoundedCorner","prefabHash":1951525046,"desc":"","name":"Composite Cladding (Rounded Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRoundedCornerInner":{"prefab":{"prefabName":"StructureCompositeCladdingRoundedCornerInner","prefabHash":110184667,"desc":"","name":"Composite Cladding (Rounded Corner Inner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSpherical":{"prefab":{"prefabName":"StructureCompositeCladdingSpherical","prefabHash":139107321,"desc":"","name":"Composite Cladding (Spherical)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSphericalCap":{"prefab":{"prefabName":"StructureCompositeCladdingSphericalCap","prefabHash":534213209,"desc":"","name":"Composite Cladding (Spherical Cap)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSphericalCorner":{"prefab":{"prefabName":"StructureCompositeCladdingSphericalCorner","prefabHash":1751355139,"desc":"","name":"Composite Cladding (Spherical Corner)"},"structure":{"smallGrid":false}},"StructureCompositeDoor":{"prefab":{"prefabName":"StructureCompositeDoor","prefabHash":-793837322,"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.","name":"Composite Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCompositeFloorGrating":{"prefab":{"prefabName":"StructureCompositeFloorGrating","prefabHash":324868581,"desc":"While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings.","name":"Composite Floor Grating"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating2":{"prefab":{"prefabName":"StructureCompositeFloorGrating2","prefabHash":-895027741,"desc":"","name":"Composite Floor Grating (Type 2)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating3":{"prefab":{"prefabName":"StructureCompositeFloorGrating3","prefabHash":-1113471627,"desc":"","name":"Composite Floor Grating (Type 3)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating4":{"prefab":{"prefabName":"StructureCompositeFloorGrating4","prefabHash":600133846,"desc":"","name":"Composite Floor Grating (Type 4)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGratingOpen":{"prefab":{"prefabName":"StructureCompositeFloorGratingOpen","prefabHash":2109695912,"desc":"","name":"Composite Floor Grating Open"},"structure":{"smallGrid":false}},"StructureCompositeFloorGratingOpenRotated":{"prefab":{"prefabName":"StructureCompositeFloorGratingOpenRotated","prefabHash":882307910,"desc":"","name":"Composite Floor Grating Open Rotated"},"structure":{"smallGrid":false}},"StructureCompositeWall":{"prefab":{"prefabName":"StructureCompositeWall","prefabHash":1237302061,"desc":"Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties.","name":"Composite Wall (Type 1)"},"structure":{"smallGrid":false}},"StructureCompositeWall02":{"prefab":{"prefabName":"StructureCompositeWall02","prefabHash":718343384,"desc":"","name":"Composite Wall (Type 2)"},"structure":{"smallGrid":false}},"StructureCompositeWall03":{"prefab":{"prefabName":"StructureCompositeWall03","prefabHash":1574321230,"desc":"","name":"Composite Wall (Type 3)"},"structure":{"smallGrid":false}},"StructureCompositeWall04":{"prefab":{"prefabName":"StructureCompositeWall04","prefabHash":-1011701267,"desc":"","name":"Composite Wall (Type 4)"},"structure":{"smallGrid":false}},"StructureCompositeWindow":{"prefab":{"prefabName":"StructureCompositeWindow","prefabHash":-2060571986,"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.","name":"Composite Window"},"structure":{"smallGrid":false}},"StructureCompositeWindowIron":{"prefab":{"prefabName":"StructureCompositeWindowIron","prefabHash":-688284639,"desc":"","name":"Iron Window"},"structure":{"smallGrid":false}},"StructureComputer":{"prefab":{"prefabName":"StructureComputer","prefabHash":-626563514,"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","name":"Computer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Data Disk","typ":"DataDisk"},{"name":"Data Disk","typ":"DataDisk"},{"name":"Motherboard","typ":"Motherboard"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCondensationChamber":{"prefab":{"prefabName":"StructureCondensationChamber","prefabHash":1420719315,"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.","name":"Condensation Chamber"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCondensationValve":{"prefab":{"prefabName":"StructureCondensationValve","prefabHash":-965741795,"desc":"Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction.","name":"Condensation Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Output"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsole":{"prefab":{"prefabName":"StructureConsole","prefabHash":235638270,"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.","name":"Console"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureConsoleDual":{"prefab":{"prefabName":"StructureConsoleDual","prefabHash":-722284333,"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.","name":"Console Dual"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureConsoleLED1x2":{"prefab":{"prefabName":"StructureConsoleLED1x2","prefabHash":-53151617,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Default","1":"Percent","2":"Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleLED1x3":{"prefab":{"prefabName":"StructureConsoleLED1x3","prefabHash":-1949054743,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Default","1":"Percent","2":"Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleLED5":{"prefab":{"prefabName":"StructureConsoleLED5","prefabHash":-815193061,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Default","1":"Percent","2":"Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleMonitor":{"prefab":{"prefabName":"StructureConsoleMonitor","prefabHash":801677497,"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.","name":"Console Monitor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureControlChair":{"prefab":{"prefabName":"StructureControlChair","prefabHash":-1961153710,"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.","name":"Control Chair"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Entity","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureCornerLocker":{"prefab":{"prefabName":"StructureCornerLocker","prefabHash":-1968255729,"desc":"","name":"Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureCrateMount":{"prefab":{"prefabName":"StructureCrateMount","prefabHash":-733500083,"desc":"","name":"Container Mount"},"structure":{"smallGrid":true},"slots":[{"name":"Container Slot","typ":"None"}]},"StructureCryoTube":{"prefab":{"prefabName":"StructureCryoTube","prefabHash":1938254586,"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.","name":"CryoTube"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Pressure":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCryoTubeHorizontal":{"prefab":{"prefabName":"StructureCryoTubeHorizontal","prefabHash":1443059329,"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.","name":"Cryo Tube Horizontal"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Pressure":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCryoTubeVertical":{"prefab":{"prefabName":"StructureCryoTubeVertical","prefabHash":-1381321828,"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.","name":"Cryo Tube Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Pressure":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureDaylightSensor":{"prefab":{"prefabName":"StructureDaylightSensor","prefabHash":1076425094,"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.","name":"Daylight Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Horizontal":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","SolarAngle":"Read","SolarIrradiance":"Read","Vertical":"Read"},"modes":{"0":"Default","1":"Horizontal","2":"Vertical"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDeepMiner":{"prefab":{"prefabName":"StructureDeepMiner","prefabHash":265720906,"desc":"Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s","name":"Deep Miner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDigitalValve":{"prefab":{"prefabName":"StructureDigitalValve","prefabHash":-1280984102,"desc":"The digital valve allows Stationeers to create logic-controlled valves and pipe networks.","name":"Digital Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDiode":{"prefab":{"prefabName":"StructureDiode","prefabHash":1944485013,"desc":"","name":"LED"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDiodeSlide":{"prefab":{"prefabName":"StructureDiodeSlide","prefabHash":576516101,"desc":"","name":"Diode Slide"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDockPortSide":{"prefab":{"prefabName":"StructureDockPortSide","prefabHash":-137465079,"desc":"","name":"Dock (Port Side)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureDrinkingFountain":{"prefab":{"prefabName":"StructureDrinkingFountain","prefabHash":1968371847,"desc":"","name":""},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureElectrolyzer":{"prefab":{"prefabName":"StructureElectrolyzer","prefabHash":-1668992663,"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.","name":"Electrolyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","Combustion":"Read","CombustionInput":"Read","CombustionOutput":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidHydrogen":"Read","RatioLiquidNitrogen":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"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","RatioSteamInput":"Read","RatioSteamOutput":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElectronicsPrinter":{"prefab":{"prefabName":"StructureElectronicsPrinter","prefabHash":1307165496,"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.","name":"Electronics Printer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureElevatorLevelFront":{"prefab":{"prefabName":"StructureElevatorLevelFront","prefabHash":-827912235,"desc":"","name":"Elevator Level (Cabled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElevatorLevelIndustrial":{"prefab":{"prefabName":"StructureElevatorLevelIndustrial","prefabHash":2060648791,"desc":"","name":"Elevator Level"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElevatorShaft":{"prefab":{"prefabName":"StructureElevatorShaft","prefabHash":826144419,"desc":"","name":"Elevator Shaft (Cabled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureElevatorShaftIndustrial":{"prefab":{"prefabName":"StructureElevatorShaftIndustrial","prefabHash":1998354978,"desc":"","name":"Elevator Shaft"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureEmergencyButton":{"prefab":{"prefabName":"StructureEmergencyButton","prefabHash":1668452680,"desc":"Description coming.","name":"Important Button"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureEngineMountTypeA1":{"prefab":{"prefabName":"StructureEngineMountTypeA1","prefabHash":2035781224,"desc":"","name":"Engine Mount (Type A1)"},"structure":{"smallGrid":false}},"StructureEvaporationChamber":{"prefab":{"prefabName":"StructureEvaporationChamber","prefabHash":-1429782576,"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.","name":"Evaporation Chamber"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureExpansionValve":{"prefab":{"prefabName":"StructureExpansionValve","prefabHash":195298587,"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.","name":"Expansion Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureFairingTypeA1":{"prefab":{"prefabName":"StructureFairingTypeA1","prefabHash":1622567418,"desc":"","name":"Fairing (Type A1)"},"structure":{"smallGrid":false}},"StructureFairingTypeA2":{"prefab":{"prefabName":"StructureFairingTypeA2","prefabHash":-104908736,"desc":"","name":"Fairing (Type A2)"},"structure":{"smallGrid":false}},"StructureFairingTypeA3":{"prefab":{"prefabName":"StructureFairingTypeA3","prefabHash":-1900541738,"desc":"","name":"Fairing (Type A3)"},"structure":{"smallGrid":false}},"StructureFiltration":{"prefab":{"prefabName":"StructureFiltration","prefabHash":-348054045,"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","name":"Filtration"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"CombustionInput":"Read","CombustionOutput":"Read","CombustionOutput2":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureInput":"Read","PressureOutput":"Read","PressureOutput2":"Read","Ratio":"Read","RatioCarbonDioxideInput":"Read","RatioCarbonDioxideOutput":"Read","RatioCarbonDioxideOutput2":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidCarbonDioxideOutput2":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrogenOutput2":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidNitrousOxideOutput2":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidOxygenOutput2":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidPollutantOutput2":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"Read","RatioLiquidVolatilesOutput2":"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","RatioSteamInput":"Read","RatioSteamOutput":"Read","RatioSteamOutput2":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Waste"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureFlagSmall":{"prefab":{"prefabName":"StructureFlagSmall","prefabHash":-1529819532,"desc":"","name":"Small Flag"},"structure":{"smallGrid":true}},"StructureFlashingLight":{"prefab":{"prefabName":"StructureFlashingLight","prefabHash":-1535893860,"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'.","name":"Flashing Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureFlatBench":{"prefab":{"prefabName":"StructureFlatBench","prefabHash":839890807,"desc":"","name":"Bench (Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureFloorDrain":{"prefab":{"prefabName":"StructureFloorDrain","prefabHash":1048813293,"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.","name":"Passive Liquid Inlet"},"structure":{"smallGrid":true}},"StructureFrame":{"prefab":{"prefabName":"StructureFrame","prefabHash":1432512808,"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.","name":"Steel Frame"},"structure":{"smallGrid":false}},"StructureFrameCorner":{"prefab":{"prefabName":"StructureFrameCorner","prefabHash":-2112390778,"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.","name":"Steel Frame (Corner)"},"structure":{"smallGrid":false}},"StructureFrameCornerCut":{"prefab":{"prefabName":"StructureFrameCornerCut","prefabHash":271315669,"desc":"0.Mode0\n1.Mode1","name":"Steel Frame (Corner Cut)"},"structure":{"smallGrid":false}},"StructureFrameIron":{"prefab":{"prefabName":"StructureFrameIron","prefabHash":-1240951678,"desc":"","name":"Iron Frame"},"structure":{"smallGrid":false}},"StructureFrameSide":{"prefab":{"prefabName":"StructureFrameSide","prefabHash":-302420053,"desc":"More durable than the Iron Frame, steel frames also provide variations for more ornate constructions.","name":"Steel Frame (Side)"},"structure":{"smallGrid":false}},"StructureFridgeBig":{"prefab":{"prefabName":"StructureFridgeBig","prefabHash":958476921,"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.","name":"Fridge (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureFridgeSmall":{"prefab":{"prefabName":"StructureFridgeSmall","prefabHash":751887598,"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.","name":"Fridge Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureFurnace":{"prefab":{"prefabName":"StructureFurnace","prefabHash":1947944864,"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.","name":"Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Combustion":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"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","Reagents":"Read","RecipeHash":"Read","ReferenceId":"Read","Setting":"ReadWrite","Temperature":"Read","TotalMoles":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"},{"typ":"Data","role":"None"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":false,"hasOpenState":true,"hasReagents":true}},"StructureFuselageTypeA1":{"prefab":{"prefabName":"StructureFuselageTypeA1","prefabHash":1033024712,"desc":"","name":"Fuselage (Type A1)"},"structure":{"smallGrid":false}},"StructureFuselageTypeA2":{"prefab":{"prefabName":"StructureFuselageTypeA2","prefabHash":-1533287054,"desc":"","name":"Fuselage (Type A2)"},"structure":{"smallGrid":false}},"StructureFuselageTypeA4":{"prefab":{"prefabName":"StructureFuselageTypeA4","prefabHash":1308115015,"desc":"","name":"Fuselage (Type A4)"},"structure":{"smallGrid":false}},"StructureFuselageTypeC5":{"prefab":{"prefabName":"StructureFuselageTypeC5","prefabHash":147395155,"desc":"","name":"Fuselage (Type C5)"},"structure":{"smallGrid":false}},"StructureGasGenerator":{"prefab":{"prefabName":"StructureGasGenerator","prefabHash":1165997963,"desc":"","name":"Gas Fuel Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGasMixer":{"prefab":{"prefabName":"StructureGasMixer","prefabHash":2104106366,"desc":"Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%.","name":"Gas Mixer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGasSensor":{"prefab":{"prefabName":"StructureGasSensor","prefabHash":-1252983604,"desc":"Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents.","name":"Gas Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasTankStorage":{"prefab":{"prefabName":"StructureGasTankStorage","prefabHash":1632165346,"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.","name":"Gas Tank Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","Pressure":"Read","Quantity":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioNitrousOxide":"Read","RatioOxygen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","ReferenceId":"Read","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalFemale":{"prefab":{"prefabName":"StructureGasUmbilicalFemale","prefabHash":-1680477930,"desc":"","name":"Umbilical Socket (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureGasUmbilicalFemaleSide","prefabHash":-648683847,"desc":"","name":"Umbilical Socket Angle (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalMale":{"prefab":{"prefabName":"StructureGasUmbilicalMale","prefabHash":-1814939203,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGlassDoor":{"prefab":{"prefabName":"StructureGlassDoor","prefabHash":-324331872,"desc":"0.Operate\n1.Logic","name":"Glass Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGovernedGasEngine":{"prefab":{"prefabName":"StructureGovernedGasEngine","prefabHash":-214232602,"desc":"The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas.","name":"Pumped Gas Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGroundBasedTelescope":{"prefab":{"prefabName":"StructureGroundBasedTelescope","prefabHash":-619745681,"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.","name":"Telescope"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","AlignmentError":"Read","CelestialHash":"Read","CelestialParentHash":"Read","DistanceAu":"Read","DistanceKm":"Read","Eccentricity":"Read","Error":"Read","Horizontal":"ReadWrite","HorizontalRatio":"ReadWrite","Inclination":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","OrbitPeriod":"Read","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","SemiMajorAxis":"Read","TrueAnomaly":"Read","Vertical":"ReadWrite","VerticalRatio":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGrowLight":{"prefab":{"prefabName":"StructureGrowLight","prefabHash":-1758710260,"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. ","name":"Grow Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHarvie":{"prefab":{"prefabName":"StructureHarvie","prefabHash":958056199,"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.","name":"Harvie"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","Harvest":"Write","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Plant":"Write","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Idle","1":"Happy","2":"UnHappy","3":"Dead"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Plant"},{"name":"Export","typ":"None"},{"name":"Hand","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangeLiquidtoGas":{"prefab":{"prefabName":"StructureHeatExchangeLiquidtoGas","prefabHash":944685608,"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.","name":"Heat Exchanger - Liquid + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangerGastoGas":{"prefab":{"prefabName":"StructureHeatExchangerGastoGas","prefabHash":21266291,"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.","name":"Heat Exchanger - Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangerLiquidtoLiquid":{"prefab":{"prefabName":"StructureHeatExchangerLiquidtoLiquid","prefabHash":-613784254,"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","name":"Heat Exchanger - Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHorizontalAutoMiner":{"prefab":{"prefabName":"StructureHorizontalAutoMiner","prefabHash":1070427573,"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","name":"OGRE"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureHydraulicPipeBender":{"prefab":{"prefabName":"StructureHydraulicPipeBender","prefabHash":-1888248335,"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.","name":"Hydraulic Pipe Bender"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureHydroponicsStation":{"prefab":{"prefabName":"StructureHydroponicsStation","prefabHash":1441767298,"desc":"","name":"Hydroponics Station"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHydroponicsTray":{"prefab":{"prefabName":"StructureHydroponicsTray","prefabHash":1464854517,"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.","name":"Hydroponics Tray"},"structure":{"smallGrid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}]},"StructureHydroponicsTrayData":{"prefab":{"prefabName":"StructureHydroponicsTrayData","prefabHash":-1841632400,"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.","name":"Hydroponics Device"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Combustion":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureIceCrusher":{"prefab":{"prefabName":"StructureIceCrusher","prefabHash":443849486,"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.","name":"Ice Crusher"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ImportCount":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureIgniter":{"prefab":{"prefabName":"StructureIgniter","prefabHash":1005491513,"desc":"It gets the party started. Especially if that party is an explosive gas mixture.","name":"Igniter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureInLineTankGas1x1":{"prefab":{"prefabName":"StructureInLineTankGas1x1","prefabHash":-1693382705,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Gas"},"structure":{"smallGrid":true}},"StructureInLineTankGas1x2":{"prefab":{"prefabName":"StructureInLineTankGas1x2","prefabHash":35149429,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Gas"},"structure":{"smallGrid":true}},"StructureInLineTankLiquid1x1":{"prefab":{"prefabName":"StructureInLineTankLiquid1x1","prefabHash":543645499,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Liquid"},"structure":{"smallGrid":true}},"StructureInLineTankLiquid1x2":{"prefab":{"prefabName":"StructureInLineTankLiquid1x2","prefabHash":-1183969663,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankGas1x1":{"prefab":{"prefabName":"StructureInsulatedInLineTankGas1x1","prefabHash":1818267386,"desc":"","name":"Insulated In-Line Tank Small Gas"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankGas1x2":{"prefab":{"prefabName":"StructureInsulatedInLineTankGas1x2","prefabHash":-177610944,"desc":"","name":"Insulated In-Line Tank Gas"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankLiquid1x1":{"prefab":{"prefabName":"StructureInsulatedInLineTankLiquid1x1","prefabHash":-813426145,"desc":"","name":"Insulated In-Line Tank Small Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankLiquid1x2":{"prefab":{"prefabName":"StructureInsulatedInLineTankLiquid1x2","prefabHash":1452100517,"desc":"","name":"Insulated In-Line Tank Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCorner":{"prefab":{"prefabName":"StructureInsulatedPipeCorner","prefabHash":-1967711059,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Corner)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction","prefabHash":-92778058,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction3":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction3","prefabHash":1328210035,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction4":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction4","prefabHash":-783387184,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction5":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction5","prefabHash":-1505147578,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction6":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction6","prefabHash":1061164284,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCorner":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCorner","prefabHash":1713710802,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Corner)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction","prefabHash":1926651727,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction4":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction4","prefabHash":363303270,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction5":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction5","prefabHash":1654694384,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction6":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction6","prefabHash":-72748982,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidStraight":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidStraight","prefabHash":295678685,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Straight)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidTJunction":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidTJunction","prefabHash":-532384855,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeStraight":{"prefab":{"prefabName":"StructureInsulatedPipeStraight","prefabHash":2134172356,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Straight)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeTJunction":{"prefab":{"prefabName":"StructureInsulatedPipeTJunction","prefabHash":-2076086215,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedTankConnector":{"prefab":{"prefabName":"StructureInsulatedTankConnector","prefabHash":-31273349,"desc":"","name":"Insulated Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructureInsulatedTankConnectorLiquid":{"prefab":{"prefabName":"StructureInsulatedTankConnectorLiquid","prefabHash":-1602030414,"desc":"","name":"Insulated Tank Connector Liquid"},"structure":{"smallGrid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureInteriorDoorGlass":{"prefab":{"prefabName":"StructureInteriorDoorGlass","prefabHash":-2096421875,"desc":"0.Operate\n1.Logic","name":"Interior Door Glass"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorPadded":{"prefab":{"prefabName":"StructureInteriorDoorPadded","prefabHash":847461335,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorPaddedThin":{"prefab":{"prefabName":"StructureInteriorDoorPaddedThin","prefabHash":1981698201,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded Thin"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorTriangle":{"prefab":{"prefabName":"StructureInteriorDoorTriangle","prefabHash":-1182923101,"desc":"0.Operate\n1.Logic","name":"Interior Door Triangle"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureKlaxon":{"prefab":{"prefabName":"StructureKlaxon","prefabHash":-828056979,"desc":"Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output.","name":"Klaxon Speaker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLadder":{"prefab":{"prefabName":"StructureLadder","prefabHash":-415420281,"desc":"","name":"Ladder"},"structure":{"smallGrid":true}},"StructureLadderEnd":{"prefab":{"prefabName":"StructureLadderEnd","prefabHash":1541734993,"desc":"","name":"Ladder End"},"structure":{"smallGrid":true}},"StructureLargeDirectHeatExchangeGastoGas":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeGastoGas","prefabHash":-1230658883,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeDirectHeatExchangeGastoLiquid":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeGastoLiquid","prefabHash":1412338038,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeLiquidtoLiquid","prefabHash":792686502,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchange - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeExtendableRadiator":{"prefab":{"prefabName":"StructureLargeExtendableRadiator","prefabHash":-566775170,"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.","name":"Large Extendable Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Horizontal":"ReadWrite","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLargeHangerDoor":{"prefab":{"prefabName":"StructureLargeHangerDoor","prefabHash":-1351081801,"desc":"1 x 3 modular door piece for building hangar doors.","name":"Large Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureLargeSatelliteDish":{"prefab":{"prefabName":"StructureLargeSatelliteDish","prefabHash":1913391845,"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.","name":"Large Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","BestContactFilter":"ReadWrite","ContactTypeId":"Read","Error":"Read","Horizontal":"ReadWrite","Idle":"Read","InterrogationProgress":"Read","MinimumWattsToContact":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLaunchMount":{"prefab":{"prefabName":"StructureLaunchMount","prefabHash":-558953231,"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.","name":"Launch Mount"},"structure":{"smallGrid":false}},"StructureLightLong":{"prefab":{"prefabName":"StructureLightLong","prefabHash":797794350,"desc":"","name":"Wall Light (Long)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightLongAngled":{"prefab":{"prefabName":"StructureLightLongAngled","prefabHash":1847265835,"desc":"","name":"Wall Light (Long Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightLongWide":{"prefab":{"prefabName":"StructureLightLongWide","prefabHash":555215790,"desc":"","name":"Wall Light (Long Wide)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRound":{"prefab":{"prefabName":"StructureLightRound","prefabHash":1514476632,"desc":"Description coming.","name":"Light Round"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRoundAngled":{"prefab":{"prefabName":"StructureLightRoundAngled","prefabHash":1592905386,"desc":"Description coming.","name":"Light Round (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRoundSmall":{"prefab":{"prefabName":"StructureLightRoundSmall","prefabHash":1436121888,"desc":"Description coming.","name":"Light Round (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidDrain":{"prefab":{"prefabName":"StructureLiquidDrain","prefabHash":1687692899,"desc":"When connected to power and activated, it pumps liquid from a liquid network into the world.","name":"Active Liquid Outlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeAnalyzer":{"prefab":{"prefabName":"StructureLiquidPipeAnalyzer","prefabHash":-2113838091,"desc":"","name":"Liquid Pipe Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","NameHash":"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","Volume":"Read","VolumeOfLiquid":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeHeater":{"prefab":{"prefabName":"StructureLiquidPipeHeater","prefabHash":-287495560,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeOneWayValve":{"prefab":{"prefabName":"StructureLiquidPipeOneWayValve","prefabHash":-782453061,"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..","name":"One Way Valve (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeRadiator":{"prefab":{"prefabName":"StructureLiquidPipeRadiator","prefabHash":2072805863,"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.","name":"Liquid Pipe Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPressureRegulator":{"prefab":{"prefabName":"StructureLiquidPressureRegulator","prefabHash":482248766,"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.","name":"Liquid Volume Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankBig":{"prefab":{"prefabName":"StructureLiquidTankBig","prefabHash":1098900430,"desc":"","name":"Liquid Tank Big"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankBigInsulated":{"prefab":{"prefabName":"StructureLiquidTankBigInsulated","prefabHash":-1430440215,"desc":"","name":"Insulated Liquid Tank Big"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankSmall":{"prefab":{"prefabName":"StructureLiquidTankSmall","prefabHash":1988118157,"desc":"","name":"Liquid Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankSmallInsulated":{"prefab":{"prefabName":"StructureLiquidTankSmallInsulated","prefabHash":608607718,"desc":"","name":"Insulated Liquid Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankStorage":{"prefab":{"prefabName":"StructureLiquidTankStorage","prefabHash":1691898022,"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.","name":"Liquid Tank Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","Pressure":"Read","Quantity":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioNitrousOxide":"Read","RatioOxygen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","ReferenceId":"Read","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTurboVolumePump":{"prefab":{"prefabName":"StructureLiquidTurboVolumePump","prefabHash":-1051805505,"desc":"Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Right","1":"Left"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalFemale":{"prefab":{"prefabName":"StructureLiquidUmbilicalFemale","prefabHash":1734723642,"desc":"","name":"Umbilical Socket (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureLiquidUmbilicalFemaleSide","prefabHash":1220870319,"desc":"","name":"Umbilical Socket Angle (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalMale":{"prefab":{"prefabName":"StructureLiquidUmbilicalMale","prefabHash":-1798420047,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureLiquidValve":{"prefab":{"prefabName":"StructureLiquidValve","prefabHash":1849974453,"desc":"","name":"Liquid Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidVolumePump":{"prefab":{"prefabName":"StructureLiquidVolumePump","prefabHash":-454028979,"desc":"","name":"Liquid Volume Pump"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLockerSmall":{"prefab":{"prefabName":"StructureLockerSmall","prefabHash":-647164662,"desc":"","name":"Locker (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicBatchReader":{"prefab":{"prefabName":"StructureLogicBatchReader","prefabHash":264413729,"desc":"","name":"Batch Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicBatchSlotReader":{"prefab":{"prefabName":"StructureLogicBatchSlotReader","prefabHash":436888930,"desc":"","name":"Batch Slot Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicBatchWriter":{"prefab":{"prefabName":"StructureLogicBatchWriter","prefabHash":1415443359,"desc":"","name":"Batch Writer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","ForceWrite":"Write","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicButton":{"prefab":{"prefabName":"StructureLogicButton","prefabHash":491845673,"desc":"","name":"Button"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Lock":"ReadWrite","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicCompare":{"prefab":{"prefabName":"StructureLogicCompare","prefabHash":-1489728908,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Compare"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"modes":{"0":"Equals","1":"Greater","2":"Less","3":"NotEquals"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicDial":{"prefab":{"prefabName":"StructureLogicDial","prefabHash":554524804,"desc":"An assignable dial with up to 1000 modes.","name":"Dial"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicGate":{"prefab":{"prefabName":"StructureLogicGate","prefabHash":1942143074,"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.","name":"Logic Gate"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicHashGen":{"prefab":{"prefabName":"StructureLogicHashGen","prefabHash":2077593121,"desc":"","name":"Logic Hash Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicMath":{"prefab":{"prefabName":"StructureLogicMath","prefabHash":1657691323,"desc":"0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log","name":"Logic Math"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMathUnary":{"prefab":{"prefabName":"StructureLogicMathUnary","prefabHash":-1160020195,"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","name":"Math Unary"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMemory":{"prefab":{"prefabName":"StructureLogicMemory","prefabHash":-851746783,"desc":"","name":"Logic Memory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicMinMax":{"prefab":{"prefabName":"StructureLogicMinMax","prefabHash":929022276,"desc":"0.Greater\n1.Less","name":"Logic Min/Max"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"modes":{"0":"Greater","1":"Less"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMirror":{"prefab":{"prefabName":"StructureLogicMirror","prefabHash":2096189278,"desc":"","name":"Logic Mirror"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicReader":{"prefab":{"prefabName":"StructureLogicReader","prefabHash":-345383640,"desc":"","name":"Logic Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicReagentReader":{"prefab":{"prefabName":"StructureLogicReagentReader","prefabHash":-124308857,"desc":"","name":"Reagent Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicRocketDownlink":{"prefab":{"prefabName":"StructureLogicRocketDownlink","prefabHash":876108549,"desc":"","name":"Logic Rocket Downlink"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicRocketUplink":{"prefab":{"prefabName":"StructureLogicRocketUplink","prefabHash":546002924,"desc":"","name":"Logic Uplink"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSelect":{"prefab":{"prefabName":"StructureLogicSelect","prefabHash":1822736084,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Select"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"modes":{"0":"Equals","1":"Greater","2":"Less","3":"NotEquals"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSlotReader":{"prefab":{"prefabName":"StructureLogicSlotReader","prefabHash":-767867194,"desc":"","name":"Slot Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSorter":{"prefab":{"prefabName":"StructureLogicSorter","prefabHash":873418029,"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.","name":"Logic Sorter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"All","1":"Any","2":"None"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Chute","role":"Output2"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"instructions":{"FilterPrefabHashEquals":{"description":"| 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":{"description":"| 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":{"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 |","typ":"SorterInstruction","value":5},"FilterSlotTypeCompare":{"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 |","typ":"SorterInstruction","value":4},"FilterSortingClassCompare":{"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 |","typ":"SorterInstruction","value":3},"LimitNextExecutionByCount":{"description":"| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |","typ":"SorterInstruction","value":6}},"memoryAccess":"ReadWrite","memorySize":32}},"StructureLogicSwitch":{"prefab":{"prefabName":"StructureLogicSwitch","prefabHash":1220484876,"desc":"","name":"Lever"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicSwitch2":{"prefab":{"prefabName":"StructureLogicSwitch2","prefabHash":321604921,"desc":"","name":"Switch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicTransmitter":{"prefab":{"prefabName":"StructureLogicTransmitter","prefabHash":-693235651,"desc":"Connects to Logic Transmitter","name":"Logic Transmitter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"modes":{"0":"Passive","1":"Active"},"transmissionReceiver":true,"wirelessLogic":true,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicWriter":{"prefab":{"prefabName":"StructureLogicWriter","prefabHash":-1326019434,"desc":"","name":"Logic Writer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","ForceWrite":"Write","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicWriterSwitch":{"prefab":{"prefabName":"StructureLogicWriterSwitch","prefabHash":-1321250424,"desc":"","name":"Logic Writer Switch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","ForceWrite":"Write","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureManualHatch":{"prefab":{"prefabName":"StructureManualHatch","prefabHash":-1808154199,"desc":"Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock.","name":"Manual Hatch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureMediumConvectionRadiator":{"prefab":{"prefabName":"StructureMediumConvectionRadiator","prefabHash":-1918215845,"desc":"A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumConvectionRadiatorLiquid":{"prefab":{"prefabName":"StructureMediumConvectionRadiatorLiquid","prefabHash":-1169014183,"desc":"A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumHangerDoor":{"prefab":{"prefabName":"StructureMediumHangerDoor","prefabHash":-566348148,"desc":"1 x 2 modular door piece for building hangar doors.","name":"Medium Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureMediumRadiator":{"prefab":{"prefabName":"StructureMediumRadiator","prefabHash":-975966237,"desc":"A stand-alone radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRadiatorLiquid":{"prefab":{"prefabName":"StructureMediumRadiatorLiquid","prefabHash":-1141760613,"desc":"A stand-alone liquid radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRocketGasFuelTank":{"prefab":{"prefabName":"StructureMediumRocketGasFuelTank","prefabHash":-1093860567,"desc":"","name":"Gas Capsule Tank Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Output"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRocketLiquidFuelTank":{"prefab":{"prefabName":"StructureMediumRocketLiquidFuelTank","prefabHash":1143639539,"desc":"","name":"Liquid Capsule Tank Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Output"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMotionSensor":{"prefab":{"prefabName":"StructureMotionSensor","prefabHash":-1713470563,"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.","name":"Motion Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureNitrolyzer":{"prefab":{"prefabName":"StructureNitrolyzer","prefabHash":1898243702,"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.","name":"Nitrolyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","Combustion":"Read","CombustionInput":"Read","CombustionInput2":"Read","CombustionOutput":"Read","Error":"Read","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideInput2":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidHydrogen":"Read","RatioLiquidNitrogen":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenInput2":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideInput2":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenInput2":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantInput2":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesInput2":"Read","RatioLiquidVolatilesOutput":"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","RatioSteamInput":"Read","RatioSteamInput2":"Read","RatioSteamOutput":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureOccupancySensor":{"prefab":{"prefabName":"StructureOccupancySensor","prefabHash":322782515,"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.","name":"Occupancy Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"Read","NameHash":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureOverheadShortCornerLocker":{"prefab":{"prefabName":"StructureOverheadShortCornerLocker","prefabHash":-1794932560,"desc":"","name":"Overhead Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureOverheadShortLocker":{"prefab":{"prefabName":"StructureOverheadShortLocker","prefabHash":1468249454,"desc":"","name":"Overhead Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePassiveLargeRadiatorGas":{"prefab":{"prefabName":"StructurePassiveLargeRadiatorGas","prefabHash":2066977095,"desc":"Has been replaced by Medium Convection Radiator.","name":"Medium Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveLargeRadiatorLiquid":{"prefab":{"prefabName":"StructurePassiveLargeRadiatorLiquid","prefabHash":24786172,"desc":"Has been replaced by Medium Convection Radiator Liquid.","name":"Medium Convection Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveLiquidDrain":{"prefab":{"prefabName":"StructurePassiveLiquidDrain","prefabHash":1812364811,"desc":"Moves liquids from a pipe network to the world atmosphere.","name":"Passive Liquid Drain"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveVent":{"prefab":{"prefabName":"StructurePassiveVent","prefabHash":335498166,"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. ","name":"Passive Vent"},"structure":{"smallGrid":true}},"StructurePassiveVentInsulated":{"prefab":{"prefabName":"StructurePassiveVentInsulated","prefabHash":1363077139,"desc":"","name":"Insulated Passive Vent"},"structure":{"smallGrid":true}},"StructurePassthroughHeatExchangerGasToGas":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerGasToGas","prefabHash":-1674187440,"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.","name":"CounterFlow Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Output2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassthroughHeatExchangerGasToLiquid":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerGasToLiquid","prefabHash":1928991265,"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.","name":"CounterFlow Heat Exchanger - Gas + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassthroughHeatExchangerLiquidToLiquid":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerLiquidToLiquid","prefabHash":-1472829583,"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.","name":"CounterFlow Heat Exchanger - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePictureFrameThickLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThickLandscapeLarge","prefabHash":-1434523206,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThickLandscapeSmall","prefabHash":-2041566697,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThickMountLandscapeLarge","prefabHash":950004659,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThickMountLandscapeSmall","prefabHash":347154462,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThickMountPortraitLarge","prefabHash":-1459641358,"desc":"","name":"Picture Frame Thick Mount Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThickMountPortraitSmall","prefabHash":-2066653089,"desc":"","name":"Picture Frame Thick Mount Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThickPortraitLarge","prefabHash":-1686949570,"desc":"","name":"Picture Frame Thick Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThickPortraitSmall","prefabHash":-1218579821,"desc":"","name":"Picture Frame Thick Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThinLandscapeLarge","prefabHash":-1418288625,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThinLandscapeSmall","prefabHash":-2024250974,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThinMountLandscapeLarge","prefabHash":-1146760430,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThinMountLandscapeSmall","prefabHash":-1752493889,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThinMountPortraitLarge","prefabHash":1094895077,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThinMountPortraitSmall","prefabHash":1835796040,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThinPortraitLarge","prefabHash":1212777087,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThinPortraitSmall","prefabHash":1684488658,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"smallGrid":true}},"StructurePipeAnalysizer":{"prefab":{"prefabName":"StructurePipeAnalysizer","prefabHash":435685051,"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.","name":"Pipe Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","NameHash":"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","Volume":"Read","VolumeOfLiquid":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePipeCorner":{"prefab":{"prefabName":"StructurePipeCorner","prefabHash":-1785673561,"desc":"You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Corner)"},"structure":{"smallGrid":true}},"StructurePipeCowl":{"prefab":{"prefabName":"StructurePipeCowl","prefabHash":465816159,"desc":"","name":"Pipe Cowl"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction":{"prefab":{"prefabName":"StructurePipeCrossJunction","prefabHash":-1405295588,"desc":"You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction3":{"prefab":{"prefabName":"StructurePipeCrossJunction3","prefabHash":2038427184,"desc":"You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction4":{"prefab":{"prefabName":"StructurePipeCrossJunction4","prefabHash":-417629293,"desc":"You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction5":{"prefab":{"prefabName":"StructurePipeCrossJunction5","prefabHash":-1877193979,"desc":"You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction6":{"prefab":{"prefabName":"StructurePipeCrossJunction6","prefabHash":152378047,"desc":"You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeHeater":{"prefab":{"prefabName":"StructurePipeHeater","prefabHash":-419758574,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePipeIgniter":{"prefab":{"prefabName":"StructurePipeIgniter","prefabHash":1286441942,"desc":"Ignites the atmosphere inside the attached pipe network.","name":"Pipe Igniter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeInsulatedLiquidCrossJunction":{"prefab":{"prefabName":"StructurePipeInsulatedLiquidCrossJunction","prefabHash":-2068497073,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeLabel":{"prefab":{"prefabName":"StructurePipeLabel","prefabHash":-999721119,"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.","name":"Pipe Label"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeLiquidCorner":{"prefab":{"prefabName":"StructurePipeLiquidCorner","prefabHash":-1856720921,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Corner)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction","prefabHash":1848735691,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction3":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction3","prefabHash":1628087508,"desc":"You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction4":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction4","prefabHash":-9555593,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction5":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction5","prefabHash":-2006384159,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction6":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction6","prefabHash":291524699,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidStraight":{"prefab":{"prefabName":"StructurePipeLiquidStraight","prefabHash":667597982,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Straight)"},"structure":{"smallGrid":true}},"StructurePipeLiquidTJunction":{"prefab":{"prefabName":"StructurePipeLiquidTJunction","prefabHash":262616717,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructurePipeMeter":{"prefab":{"prefabName":"StructurePipeMeter","prefabHash":-1798362329,"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\"","name":"Pipe Meter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeOneWayValve":{"prefab":{"prefabName":"StructurePipeOneWayValve","prefabHash":1580412404,"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","name":"One Way Valve (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeOrgan":{"prefab":{"prefabName":"StructurePipeOrgan","prefabHash":1305252611,"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.","name":"Pipe Organ"},"structure":{"smallGrid":true}},"StructurePipeRadiator":{"prefab":{"prefabName":"StructurePipeRadiator","prefabHash":1696603168,"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.","name":"Pipe Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeRadiatorFlat":{"prefab":{"prefabName":"StructurePipeRadiatorFlat","prefabHash":-399883995,"desc":"A pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeRadiatorFlatLiquid":{"prefab":{"prefabName":"StructurePipeRadiatorFlatLiquid","prefabHash":2024754523,"desc":"A liquid pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeStraight":{"prefab":{"prefabName":"StructurePipeStraight","prefabHash":73728932,"desc":"You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Straight)"},"structure":{"smallGrid":true}},"StructurePipeTJunction":{"prefab":{"prefabName":"StructurePipeTJunction","prefabHash":-913817472,"desc":"You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructurePlanter":{"prefab":{"prefabName":"StructurePlanter","prefabHash":-1125641329,"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).","name":"Planter"},"structure":{"smallGrid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Plant","typ":"Plant"}]},"StructurePlatformLadderOpen":{"prefab":{"prefabName":"StructurePlatformLadderOpen","prefabHash":1559586682,"desc":"","name":"Ladder Platform"},"structure":{"smallGrid":false}},"StructurePlinth":{"prefab":{"prefabName":"StructurePlinth","prefabHash":989835703,"desc":"","name":"Plinth"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructurePortablesConnector":{"prefab":{"prefabName":"StructurePortablesConnector","prefabHash":-899013427,"desc":"","name":"Portables Connector"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Maximum":"Read","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePowerConnector":{"prefab":{"prefabName":"StructurePowerConnector","prefabHash":-782951720,"desc":"Attaches a Kit (Portable Generator) to a power network.","name":"Power Connector"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Portable Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePowerTransmitter":{"prefab":{"prefabName":"StructurePowerTransmitter","prefabHash":-65087121,"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.","name":"Microwave Power Transmitter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Error":"Read","Horizontal":"ReadWrite","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerTransmitterOmni":{"prefab":{"prefabName":"StructurePowerTransmitterOmni","prefabHash":-327468845,"desc":"","name":"Power Transmitter Omni"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerTransmitterReceiver":{"prefab":{"prefabName":"StructurePowerTransmitterReceiver","prefabHash":1195820278,"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","name":"Microwave Power Receiver"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Error":"Read","Horizontal":"ReadWrite","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalFemale":{"prefab":{"prefabName":"StructurePowerUmbilicalFemale","prefabHash":101488029,"desc":"","name":"Umbilical Socket (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalFemaleSide":{"prefab":{"prefabName":"StructurePowerUmbilicalFemaleSide","prefabHash":1922506192,"desc":"","name":"Umbilical Socket Angle (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalMale":{"prefab":{"prefabName":"StructurePowerUmbilicalMale","prefabHash":1529453938,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructurePoweredVent":{"prefab":{"prefabName":"StructurePoweredVent","prefabHash":938836756,"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.","name":"Powered Vent"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureExternal":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePoweredVentLarge":{"prefab":{"prefabName":"StructurePoweredVentLarge","prefabHash":-785498334,"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.","name":"Powered Vent Large"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureExternal":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressurantValve":{"prefab":{"prefabName":"StructurePressurantValve","prefabHash":23052817,"desc":"Pumps gas into a liquid pipe in order to raise the pressure","name":"Pressurant Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressureFedGasEngine":{"prefab":{"prefabName":"StructurePressureFedGasEngine","prefabHash":-624011170,"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.","name":"Pressure Fed Gas Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressureFedLiquidEngine":{"prefab":{"prefabName":"StructurePressureFedLiquidEngine","prefabHash":379750958,"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.","name":"Pressure Fed Liquid Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateLarge":{"prefab":{"prefabName":"StructurePressurePlateLarge","prefabHash":-2008706143,"desc":"","name":"Trigger Plate (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateMedium":{"prefab":{"prefabName":"StructurePressurePlateMedium","prefabHash":1269458680,"desc":"","name":"Trigger Plate (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateSmall":{"prefab":{"prefabName":"StructurePressurePlateSmall","prefabHash":-1536471028,"desc":"","name":"Trigger Plate (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressureRegulator":{"prefab":{"prefabName":"StructurePressureRegulator","prefabHash":209854039,"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.","name":"Pressure Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureProximitySensor":{"prefab":{"prefabName":"StructureProximitySensor","prefabHash":568800213,"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.","name":"Proximity Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"Read","NameHash":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePumpedLiquidEngine":{"prefab":{"prefabName":"StructurePumpedLiquidEngine","prefabHash":-2031440019,"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","name":"Pumped Liquid Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePurgeValve":{"prefab":{"prefabName":"StructurePurgeValve","prefabHash":-737232128,"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.","name":"Purge Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRailing":{"prefab":{"prefabName":"StructureRailing","prefabHash":-1756913871,"desc":"\"Safety third.\"","name":"Railing Industrial (Type 1)"},"structure":{"smallGrid":false}},"StructureRecycler":{"prefab":{"prefabName":"StructureRecycler","prefabHash":-1633947337,"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.","name":"Recycler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureRefrigeratedVendingMachine":{"prefab":{"prefabName":"StructureRefrigeratedVendingMachine","prefabHash":-1577831321,"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. ","name":"Refrigerated Vending Machine"},"structure":{"smallGrid":true},"logic":{"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":{"Activate":"ReadWrite","ClearMemory":"Write","Combustion":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureReinforcedCompositeWindow":{"prefab":{"prefabName":"StructureReinforcedCompositeWindow","prefabHash":2027713511,"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.","name":"Reinforced Window (Composite)"},"structure":{"smallGrid":false}},"StructureReinforcedCompositeWindowSteel":{"prefab":{"prefabName":"StructureReinforcedCompositeWindowSteel","prefabHash":-816454272,"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.","name":"Reinforced Window (Composite Steel)"},"structure":{"smallGrid":false}},"StructureReinforcedWallPaddedWindow":{"prefab":{"prefabName":"StructureReinforcedWallPaddedWindow","prefabHash":1939061729,"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.","name":"Reinforced Window (Padded)"},"structure":{"smallGrid":false}},"StructureReinforcedWallPaddedWindowThin":{"prefab":{"prefabName":"StructureReinforcedWallPaddedWindowThin","prefabHash":158502707,"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.","name":"Reinforced Window (Thin)"},"structure":{"smallGrid":false}},"StructureRocketAvionics":{"prefab":{"prefabName":"StructureRocketAvionics","prefabHash":808389066,"desc":"","name":"Rocket Avionics"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureRocketCelestialTracker":{"prefab":{"prefabName":"StructureRocketCelestialTracker","prefabHash":997453927,"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.","name":"Rocket Celestial Tracker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"CelestialHash":"Read","Error":"Read","Horizontal":"Read","Index":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Vertical":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"instructions":{"BodyOrientation":{"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 |","typ":"CelestialTracking","value":1}},"memoryAccess":"Read","memorySize":12}},"StructureRocketCircuitHousing":{"prefab":{"prefabName":"StructureRocketCircuitHousing","prefabHash":150135861,"desc":"","name":"Rocket Circuit Housing"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","LineNumber":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","LineNumber":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"}],"devicePinsLength":6,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"StructureRocketEngineTiny":{"prefab":{"prefabName":"StructureRocketEngineTiny","prefabHash":178472613,"desc":"","name":"Rocket Engine (Tiny)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketManufactory":{"prefab":{"prefabName":"StructureRocketManufactory","prefabHash":1781051034,"desc":"","name":"Rocket Manufactory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureRocketMiner":{"prefab":{"prefabName":"StructureRocketMiner","prefabHash":-2087223687,"desc":"Gathers available resources at the rocket's current space location.","name":"Rocket Miner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"ClearMemory":"Write","DrillCondition":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"},{"name":"Drill Head Slot","typ":"DrillHead"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketScanner":{"prefab":{"prefabName":"StructureRocketScanner","prefabHash":2014252591,"desc":"","name":"Rocket Scanner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Scanner Head Slot","typ":"ScanningHead"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketTower":{"prefab":{"prefabName":"StructureRocketTower","prefabHash":-654619479,"desc":"","name":"Launch Tower"},"structure":{"smallGrid":false}},"StructureRocketTransformerSmall":{"prefab":{"prefabName":"StructureRocketTransformerSmall","prefabHash":518925193,"desc":"","name":"Transformer Small (Rocket)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRover":{"prefab":{"prefabName":"StructureRover","prefabHash":806513938,"desc":"","name":"Rover Frame"},"structure":{"smallGrid":false}},"StructureSDBHopper":{"prefab":{"prefabName":"StructureSDBHopper","prefabHash":-1875856925,"desc":"","name":"SDB Hopper"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSDBHopperAdvanced":{"prefab":{"prefabName":"StructureSDBHopperAdvanced","prefabHash":467225612,"desc":"","name":"SDB Hopper Advanced"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSDBSilo":{"prefab":{"prefabName":"StructureSDBSilo","prefabHash":1155865682,"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.","name":"SDB Silo"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSatelliteDish":{"prefab":{"prefabName":"StructureSatelliteDish","prefabHash":439026183,"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.","name":"Medium Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","BestContactFilter":"ReadWrite","ContactTypeId":"Read","Error":"Read","Horizontal":"ReadWrite","Idle":"Read","InterrogationProgress":"Read","MinimumWattsToContact":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSecurityPrinter":{"prefab":{"prefabName":"StructureSecurityPrinter","prefabHash":-641491515,"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","name":"Security Printer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureShelf":{"prefab":{"prefabName":"StructureShelf","prefabHash":1172114950,"desc":"","name":"Shelf"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"StructureShelfMedium":{"prefab":{"prefabName":"StructureShelfMedium","prefabHash":182006674,"desc":"A shelf for putting things on, so you can see them.","name":"Shelf Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShortCornerLocker":{"prefab":{"prefabName":"StructureShortCornerLocker","prefabHash":1330754486,"desc":"","name":"Short Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShortLocker":{"prefab":{"prefabName":"StructureShortLocker","prefabHash":-554553467,"desc":"","name":"Short Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShower":{"prefab":{"prefabName":"StructureShower","prefabHash":-775128944,"desc":"","name":"Shower"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Maximum":"Read","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShowerPowered":{"prefab":{"prefabName":"StructureShowerPowered","prefabHash":-1081797501,"desc":"","name":"Shower (Powered)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSign1x1":{"prefab":{"prefabName":"StructureSign1x1","prefabHash":879058460,"desc":"","name":"Sign 1x1"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSign2x1":{"prefab":{"prefabName":"StructureSign2x1","prefabHash":908320837,"desc":"","name":"Sign 2x1"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSingleBed":{"prefab":{"prefabName":"StructureSingleBed","prefabHash":-492611,"desc":"Description coming.","name":"Single Bed"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSleeper":{"prefab":{"prefabName":"StructureSleeper","prefabHash":-1467449329,"desc":"","name":"Sleeper"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperLeft":{"prefab":{"prefabName":"StructureSleeperLeft","prefabHash":1213495833,"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.","name":"Sleeper Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Safe","1":"Unsafe","2":"Unpowered"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperRight":{"prefab":{"prefabName":"StructureSleeperRight","prefabHash":-1812330717,"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.","name":"Sleeper Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Safe","1":"Unsafe","2":"Unpowered"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperVertical":{"prefab":{"prefabName":"StructureSleeperVertical","prefabHash":-1300059018,"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.","name":"Sleeper Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Safe","1":"Unsafe","2":"Unpowered"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperVerticalDroid":{"prefab":{"prefabName":"StructureSleeperVerticalDroid","prefabHash":1382098999,"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.","name":"Droid Sleeper Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSmallDirectHeatExchangeGastoGas":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeGastoGas","prefabHash":1310303582,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallDirectHeatExchangeLiquidtoGas":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeLiquidtoGas","prefabHash":1825212016,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Gas "},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeLiquidtoLiquid","prefabHash":-507770416,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallSatelliteDish":{"prefab":{"prefabName":"StructureSmallSatelliteDish","prefabHash":-2138748650,"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.","name":"Small Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","BestContactFilter":"ReadWrite","ContactTypeId":"Read","Error":"Read","Horizontal":"ReadWrite","Idle":"Read","InterrogationProgress":"Read","MinimumWattsToContact":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSmallTableBacklessDouble":{"prefab":{"prefabName":"StructureSmallTableBacklessDouble","prefabHash":-1633000411,"desc":"","name":"Small (Table Backless Double)"},"structure":{"smallGrid":true}},"StructureSmallTableBacklessSingle":{"prefab":{"prefabName":"StructureSmallTableBacklessSingle","prefabHash":-1897221677,"desc":"","name":"Small (Table Backless Single)"},"structure":{"smallGrid":true}},"StructureSmallTableDinnerSingle":{"prefab":{"prefabName":"StructureSmallTableDinnerSingle","prefabHash":1260651529,"desc":"","name":"Small (Table Dinner Single)"},"structure":{"smallGrid":true}},"StructureSmallTableRectangleDouble":{"prefab":{"prefabName":"StructureSmallTableRectangleDouble","prefabHash":-660451023,"desc":"","name":"Small (Table Rectangle Double)"},"structure":{"smallGrid":true}},"StructureSmallTableRectangleSingle":{"prefab":{"prefabName":"StructureSmallTableRectangleSingle","prefabHash":-924678969,"desc":"","name":"Small (Table Rectangle Single)"},"structure":{"smallGrid":true}},"StructureSmallTableThickDouble":{"prefab":{"prefabName":"StructureSmallTableThickDouble","prefabHash":-19246131,"desc":"","name":"Small (Table Thick Double)"},"structure":{"smallGrid":true}},"StructureSmallTableThickSingle":{"prefab":{"prefabName":"StructureSmallTableThickSingle","prefabHash":-291862981,"desc":"","name":"Small Table (Thick Single)"},"structure":{"smallGrid":true}},"StructureSolarPanel":{"prefab":{"prefabName":"StructureSolarPanel","prefabHash":-2045627372,"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.","name":"Solar Panel"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanel45":{"prefab":{"prefabName":"StructureSolarPanel45","prefabHash":-1554349863,"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.","name":"Solar Panel (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanel45Reinforced":{"prefab":{"prefabName":"StructureSolarPanel45Reinforced","prefabHash":930865127,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelDual":{"prefab":{"prefabName":"StructureSolarPanelDual","prefabHash":-539224550,"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.","name":"Solar Panel (Dual)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelDualReinforced":{"prefab":{"prefabName":"StructureSolarPanelDualReinforced","prefabHash":-1545574413,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Dual)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelFlat":{"prefab":{"prefabName":"StructureSolarPanelFlat","prefabHash":1968102968,"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.","name":"Solar Panel (Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelFlatReinforced":{"prefab":{"prefabName":"StructureSolarPanelFlatReinforced","prefabHash":1697196770,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelReinforced":{"prefab":{"prefabName":"StructureSolarPanelReinforced","prefabHash":-934345724,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolidFuelGenerator":{"prefab":{"prefabName":"StructureSolidFuelGenerator","prefabHash":813146305,"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.","name":"Generator (Solid Fuel)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"modes":{"0":"Not Generating","1":"Generating"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Input","typ":"Ore"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSorter":{"prefab":{"prefabName":"StructureSorter","prefabHash":-1009150565,"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.","name":"Sorter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Output":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Split","1":"Filter","2":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Chute","role":"Output2"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStacker":{"prefab":{"prefabName":"StructureStacker","prefabHash":-2020231820,"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.","name":"Stacker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Output":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Automatic","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Processing","typ":"None"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStackerReverse":{"prefab":{"prefabName":"StructureStackerReverse","prefabHash":1585641623,"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.","name":"Stacker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Output":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Automatic","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStairs4x2":{"prefab":{"prefabName":"StructureStairs4x2","prefabHash":1405018945,"desc":"","name":"Stairs"},"structure":{"smallGrid":false}},"StructureStairs4x2RailL":{"prefab":{"prefabName":"StructureStairs4x2RailL","prefabHash":155214029,"desc":"","name":"Stairs with Rail (Left)"},"structure":{"smallGrid":false}},"StructureStairs4x2RailR":{"prefab":{"prefabName":"StructureStairs4x2RailR","prefabHash":-212902482,"desc":"","name":"Stairs with Rail (Right)"},"structure":{"smallGrid":false}},"StructureStairs4x2Rails":{"prefab":{"prefabName":"StructureStairs4x2Rails","prefabHash":-1088008720,"desc":"","name":"Stairs with Rails"},"structure":{"smallGrid":false}},"StructureStairwellBackLeft":{"prefab":{"prefabName":"StructureStairwellBackLeft","prefabHash":505924160,"desc":"","name":"Stairwell (Back Left)"},"structure":{"smallGrid":false}},"StructureStairwellBackPassthrough":{"prefab":{"prefabName":"StructureStairwellBackPassthrough","prefabHash":-862048392,"desc":"","name":"Stairwell (Back Passthrough)"},"structure":{"smallGrid":false}},"StructureStairwellBackRight":{"prefab":{"prefabName":"StructureStairwellBackRight","prefabHash":-2128896573,"desc":"","name":"Stairwell (Back Right)"},"structure":{"smallGrid":false}},"StructureStairwellFrontLeft":{"prefab":{"prefabName":"StructureStairwellFrontLeft","prefabHash":-37454456,"desc":"","name":"Stairwell (Front Left)"},"structure":{"smallGrid":false}},"StructureStairwellFrontPassthrough":{"prefab":{"prefabName":"StructureStairwellFrontPassthrough","prefabHash":-1625452928,"desc":"","name":"Stairwell (Front Passthrough)"},"structure":{"smallGrid":false}},"StructureStairwellFrontRight":{"prefab":{"prefabName":"StructureStairwellFrontRight","prefabHash":340210934,"desc":"","name":"Stairwell (Front Right)"},"structure":{"smallGrid":false}},"StructureStairwellNoDoors":{"prefab":{"prefabName":"StructureStairwellNoDoors","prefabHash":2049879875,"desc":"","name":"Stairwell (No Doors)"},"structure":{"smallGrid":false}},"StructureStirlingEngine":{"prefab":{"prefabName":"StructureStirlingEngine","prefabHash":-260316435,"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.","name":"Stirling Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Combustion":"Read","EnvironmentEfficiency":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStorageLocker":{"prefab":{"prefabName":"StructureStorageLocker","prefabHash":-793623899,"desc":"","name":"Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSuitStorage":{"prefab":{"prefabName":"StructureSuitStorage","prefabHash":255034731,"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.","name":"Suit Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Helmet","typ":"Helmet"},{"name":"Suit","typ":"Suit"},{"name":"Back","typ":"Back"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTankBig":{"prefab":{"prefabName":"StructureTankBig","prefabHash":-1606848156,"desc":"","name":"Large Tank"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankBigInsulated":{"prefab":{"prefabName":"StructureTankBigInsulated","prefabHash":1280378227,"desc":"","name":"Tank Big (Insulated)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankConnector":{"prefab":{"prefabName":"StructureTankConnector","prefabHash":-1276379454,"desc":"Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network.","name":"Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructureTankConnectorLiquid":{"prefab":{"prefabName":"StructureTankConnectorLiquid","prefabHash":1331802518,"desc":"These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network.","name":"Liquid Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureTankSmall":{"prefab":{"prefabName":"StructureTankSmall","prefabHash":1013514688,"desc":"","name":"Small Tank"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallAir":{"prefab":{"prefabName":"StructureTankSmallAir","prefabHash":955744474,"desc":"","name":"Small Tank (Air)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallFuel":{"prefab":{"prefabName":"StructureTankSmallFuel","prefabHash":2102454415,"desc":"","name":"Small Tank (Fuel)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallInsulated":{"prefab":{"prefabName":"StructureTankSmallInsulated","prefabHash":272136332,"desc":"","name":"Tank Small (Insulated)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureToolManufactory":{"prefab":{"prefabName":"StructureToolManufactory","prefabHash":-465741100,"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.","name":"Tool Manufactory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureTorpedoRack":{"prefab":{"prefabName":"StructureTorpedoRack","prefabHash":1473807953,"desc":"","name":"Torpedo Rack"},"structure":{"smallGrid":true},"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"}]},"StructureTraderWaypoint":{"prefab":{"prefabName":"StructureTraderWaypoint","prefabHash":1570931620,"desc":"","name":"Trader Waypoint"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformer":{"prefab":{"prefabName":"StructureTransformer","prefabHash":-1423212473,"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.","name":"Transformer (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerMedium":{"prefab":{"prefabName":"StructureTransformerMedium","prefabHash":-1065725831,"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.","name":"Transformer (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerMediumReversed":{"prefab":{"prefabName":"StructureTransformerMediumReversed","prefabHash":833912764,"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.","name":"Transformer Reversed (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerSmall":{"prefab":{"prefabName":"StructureTransformerSmall","prefabHash":-890946730,"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.","name":"Transformer (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerSmallReversed":{"prefab":{"prefabName":"StructureTransformerSmallReversed","prefabHash":1054059374,"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.","name":"Transformer Reversed (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTurbineGenerator":{"prefab":{"prefabName":"StructureTurbineGenerator","prefabHash":1282191063,"desc":"","name":"Turbine Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureTurboVolumePump":{"prefab":{"prefabName":"StructureTurboVolumePump","prefabHash":1310794736,"desc":"Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Right","1":"Left"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureUnloader":{"prefab":{"prefabName":"StructureUnloader","prefabHash":750118160,"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.","name":"Unloader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Output":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Automatic","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureUprightWindTurbine":{"prefab":{"prefabName":"StructureUprightWindTurbine","prefabHash":1622183451,"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.","name":"Upright Wind Turbine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureValve":{"prefab":{"prefabName":"StructureValve","prefabHash":-692036078,"desc":"","name":"Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureVendingMachine":{"prefab":{"prefabName":"StructureVendingMachine","prefabHash":-443130773,"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.","name":"Vending Machine"},"structure":{"smallGrid":true},"logic":{"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":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","Ratio":"Read","ReferenceId":"Read","RequestHash":"ReadWrite","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureVolumePump":{"prefab":{"prefabName":"StructureVolumePump","prefabHash":-321403609,"desc":"The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks.","name":"Volume Pump"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallArch":{"prefab":{"prefabName":"StructureWallArch","prefabHash":-858143148,"desc":"","name":"Wall (Arch)"},"structure":{"smallGrid":false}},"StructureWallArchArrow":{"prefab":{"prefabName":"StructureWallArchArrow","prefabHash":1649708822,"desc":"","name":"Wall (Arch Arrow)"},"structure":{"smallGrid":false}},"StructureWallArchCornerRound":{"prefab":{"prefabName":"StructureWallArchCornerRound","prefabHash":1794588890,"desc":"","name":"Wall (Arch Corner Round)"},"structure":{"smallGrid":true}},"StructureWallArchCornerSquare":{"prefab":{"prefabName":"StructureWallArchCornerSquare","prefabHash":-1963016580,"desc":"","name":"Wall (Arch Corner Square)"},"structure":{"smallGrid":true}},"StructureWallArchCornerTriangle":{"prefab":{"prefabName":"StructureWallArchCornerTriangle","prefabHash":1281911841,"desc":"","name":"Wall (Arch Corner Triangle)"},"structure":{"smallGrid":true}},"StructureWallArchPlating":{"prefab":{"prefabName":"StructureWallArchPlating","prefabHash":1182510648,"desc":"","name":"Wall (Arch Plating)"},"structure":{"smallGrid":false}},"StructureWallArchTwoTone":{"prefab":{"prefabName":"StructureWallArchTwoTone","prefabHash":782529714,"desc":"","name":"Wall (Arch Two Tone)"},"structure":{"smallGrid":false}},"StructureWallCooler":{"prefab":{"prefabName":"StructureWallCooler","prefabHash":-739292323,"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.","name":"Wall Cooler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Pipe","role":"None"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallFlat":{"prefab":{"prefabName":"StructureWallFlat","prefabHash":1635864154,"desc":"","name":"Wall (Flat)"},"structure":{"smallGrid":false}},"StructureWallFlatCornerRound":{"prefab":{"prefabName":"StructureWallFlatCornerRound","prefabHash":898708250,"desc":"","name":"Wall (Flat Corner Round)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerSquare":{"prefab":{"prefabName":"StructureWallFlatCornerSquare","prefabHash":298130111,"desc":"","name":"Wall (Flat Corner Square)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerTriangle":{"prefab":{"prefabName":"StructureWallFlatCornerTriangle","prefabHash":2097419366,"desc":"","name":"Wall (Flat Corner Triangle)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerTriangleFlat":{"prefab":{"prefabName":"StructureWallFlatCornerTriangleFlat","prefabHash":-1161662836,"desc":"","name":"Wall (Flat Corner Triangle Flat)"},"structure":{"smallGrid":true}},"StructureWallGeometryCorner":{"prefab":{"prefabName":"StructureWallGeometryCorner","prefabHash":1979212240,"desc":"","name":"Wall (Geometry Corner)"},"structure":{"smallGrid":false}},"StructureWallGeometryStreight":{"prefab":{"prefabName":"StructureWallGeometryStreight","prefabHash":1049735537,"desc":"","name":"Wall (Geometry Straight)"},"structure":{"smallGrid":false}},"StructureWallGeometryT":{"prefab":{"prefabName":"StructureWallGeometryT","prefabHash":1602758612,"desc":"","name":"Wall (Geometry T)"},"structure":{"smallGrid":false}},"StructureWallGeometryTMirrored":{"prefab":{"prefabName":"StructureWallGeometryTMirrored","prefabHash":-1427845483,"desc":"","name":"Wall (Geometry T Mirrored)"},"structure":{"smallGrid":false}},"StructureWallHeater":{"prefab":{"prefabName":"StructureWallHeater","prefabHash":24258244,"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.","name":"Wall Heater"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallIron":{"prefab":{"prefabName":"StructureWallIron","prefabHash":1287324802,"desc":"","name":"Iron Wall (Type 1)"},"structure":{"smallGrid":false}},"StructureWallIron02":{"prefab":{"prefabName":"StructureWallIron02","prefabHash":1485834215,"desc":"","name":"Iron Wall (Type 2)"},"structure":{"smallGrid":false}},"StructureWallIron03":{"prefab":{"prefabName":"StructureWallIron03","prefabHash":798439281,"desc":"","name":"Iron Wall (Type 3)"},"structure":{"smallGrid":false}},"StructureWallIron04":{"prefab":{"prefabName":"StructureWallIron04","prefabHash":-1309433134,"desc":"","name":"Iron Wall (Type 4)"},"structure":{"smallGrid":false}},"StructureWallLargePanel":{"prefab":{"prefabName":"StructureWallLargePanel","prefabHash":1492930217,"desc":"","name":"Wall (Large Panel)"},"structure":{"smallGrid":false}},"StructureWallLargePanelArrow":{"prefab":{"prefabName":"StructureWallLargePanelArrow","prefabHash":-776581573,"desc":"","name":"Wall (Large Panel Arrow)"},"structure":{"smallGrid":false}},"StructureWallLight":{"prefab":{"prefabName":"StructureWallLight","prefabHash":-1860064656,"desc":"","name":"Wall Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallLightBattery":{"prefab":{"prefabName":"StructureWallLightBattery","prefabHash":-1306415132,"desc":"","name":"Wall Light (Battery)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallPaddedArch":{"prefab":{"prefabName":"StructureWallPaddedArch","prefabHash":1590330637,"desc":"","name":"Wall (Padded Arch)"},"structure":{"smallGrid":false}},"StructureWallPaddedArchCorner":{"prefab":{"prefabName":"StructureWallPaddedArchCorner","prefabHash":-1126688298,"desc":"","name":"Wall (Padded Arch Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedArchLightFittingTop":{"prefab":{"prefabName":"StructureWallPaddedArchLightFittingTop","prefabHash":1171987947,"desc":"","name":"Wall (Padded Arch Light Fitting Top)"},"structure":{"smallGrid":false}},"StructureWallPaddedArchLightsFittings":{"prefab":{"prefabName":"StructureWallPaddedArchLightsFittings","prefabHash":-1546743960,"desc":"","name":"Wall (Padded Arch Lights Fittings)"},"structure":{"smallGrid":false}},"StructureWallPaddedCorner":{"prefab":{"prefabName":"StructureWallPaddedCorner","prefabHash":-155945899,"desc":"","name":"Wall (Padded Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedCornerThin":{"prefab":{"prefabName":"StructureWallPaddedCornerThin","prefabHash":1183203913,"desc":"","name":"Wall (Padded Corner Thin)"},"structure":{"smallGrid":true}},"StructureWallPaddedNoBorder":{"prefab":{"prefabName":"StructureWallPaddedNoBorder","prefabHash":8846501,"desc":"","name":"Wall (Padded No Border)"},"structure":{"smallGrid":false}},"StructureWallPaddedNoBorderCorner":{"prefab":{"prefabName":"StructureWallPaddedNoBorderCorner","prefabHash":179694804,"desc":"","name":"Wall (Padded No Border Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedThinNoBorder":{"prefab":{"prefabName":"StructureWallPaddedThinNoBorder","prefabHash":-1611559100,"desc":"","name":"Wall (Padded Thin No Border)"},"structure":{"smallGrid":false}},"StructureWallPaddedThinNoBorderCorner":{"prefab":{"prefabName":"StructureWallPaddedThinNoBorderCorner","prefabHash":1769527556,"desc":"","name":"Wall (Padded Thin No Border Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedWindow":{"prefab":{"prefabName":"StructureWallPaddedWindow","prefabHash":2087628940,"desc":"","name":"Wall (Padded Window)"},"structure":{"smallGrid":false}},"StructureWallPaddedWindowThin":{"prefab":{"prefabName":"StructureWallPaddedWindowThin","prefabHash":-37302931,"desc":"","name":"Wall (Padded Window Thin)"},"structure":{"smallGrid":false}},"StructureWallPadding":{"prefab":{"prefabName":"StructureWallPadding","prefabHash":635995024,"desc":"","name":"Wall (Padding)"},"structure":{"smallGrid":false}},"StructureWallPaddingArchVent":{"prefab":{"prefabName":"StructureWallPaddingArchVent","prefabHash":-1243329828,"desc":"","name":"Wall (Padding Arch Vent)"},"structure":{"smallGrid":false}},"StructureWallPaddingLightFitting":{"prefab":{"prefabName":"StructureWallPaddingLightFitting","prefabHash":2024882687,"desc":"","name":"Wall (Padding Light Fitting)"},"structure":{"smallGrid":false}},"StructureWallPaddingThin":{"prefab":{"prefabName":"StructureWallPaddingThin","prefabHash":-1102403554,"desc":"","name":"Wall (Padding Thin)"},"structure":{"smallGrid":false}},"StructureWallPlating":{"prefab":{"prefabName":"StructureWallPlating","prefabHash":26167457,"desc":"","name":"Wall (Plating)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsAndHatch":{"prefab":{"prefabName":"StructureWallSmallPanelsAndHatch","prefabHash":619828719,"desc":"","name":"Wall (Small Panels And Hatch)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsArrow":{"prefab":{"prefabName":"StructureWallSmallPanelsArrow","prefabHash":-639306697,"desc":"","name":"Wall (Small Panels Arrow)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsMonoChrome":{"prefab":{"prefabName":"StructureWallSmallPanelsMonoChrome","prefabHash":386820253,"desc":"","name":"Wall (Small Panels Mono Chrome)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsOpen":{"prefab":{"prefabName":"StructureWallSmallPanelsOpen","prefabHash":-1407480603,"desc":"","name":"Wall (Small Panels Open)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsTwoTone":{"prefab":{"prefabName":"StructureWallSmallPanelsTwoTone","prefabHash":1709994581,"desc":"","name":"Wall (Small Panels Two Tone)"},"structure":{"smallGrid":false}},"StructureWallVent":{"prefab":{"prefabName":"StructureWallVent","prefabHash":-1177469307,"desc":"Used to mix atmospheres passively between two walls.","name":"Wall Vent"},"structure":{"smallGrid":true}},"StructureWaterBottleFiller":{"prefab":{"prefabName":"StructureWaterBottleFiller","prefabHash":-1178961954,"desc":"","name":"Water Bottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerBottom":{"prefab":{"prefabName":"StructureWaterBottleFillerBottom","prefabHash":1433754995,"desc":"","name":"Water Bottle Filler Bottom"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerPowered":{"prefab":{"prefabName":"StructureWaterBottleFillerPowered","prefabHash":-756587791,"desc":"","name":"Waterbottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerPoweredBottom":{"prefab":{"prefabName":"StructureWaterBottleFillerPoweredBottom","prefabHash":1986658780,"desc":"","name":"Waterbottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterDigitalValve":{"prefab":{"prefabName":"StructureWaterDigitalValve","prefabHash":-517628750,"desc":"","name":"Liquid Digital Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterPipeMeter":{"prefab":{"prefabName":"StructureWaterPipeMeter","prefabHash":433184168,"desc":"","name":"Liquid Pipe Meter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterPurifier":{"prefab":{"prefabName":"StructureWaterPurifier","prefabHash":887383294,"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.","name":"Water Purifier"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterWallCooler":{"prefab":{"prefabName":"StructureWaterWallCooler","prefabHash":-1369060582,"desc":"","name":"Liquid Wall Cooler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWeatherStation":{"prefab":{"prefabName":"StructureWeatherStation","prefabHash":1997212478,"desc":"0.NoStorm\n1.StormIncoming\n2.InStorm","name":"Weather Station"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","Mode":"Read","NameHash":"Read","NextWeatherEventTime":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"NoStorm","1":"StormIncoming","2":"InStorm"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWindTurbine":{"prefab":{"prefabName":"StructureWindTurbine","prefabHash":-2082355173,"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.","name":"Wind Turbine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWindowShutter":{"prefab":{"prefabName":"StructureWindowShutter","prefabHash":2056377335,"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.","name":"Window Shutter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Idle":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"ToolPrinterMod":{"prefab":{"prefabName":"ToolPrinterMod","prefabHash":1700018136,"desc":"Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Tool Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ToyLuna":{"prefab":{"prefabName":"ToyLuna","prefabHash":94730034,"desc":"","name":"Toy Luna"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"UniformCommander":{"prefab":{"prefabName":"UniformCommander","prefabHash":-2083426457,"desc":"","name":"Uniform Commander"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformMarine":{"prefab":{"prefabName":"UniformMarine","prefabHash":-48342840,"desc":"","name":"Marine Uniform"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformOrangeJumpSuit":{"prefab":{"prefabName":"UniformOrangeJumpSuit","prefabHash":810053150,"desc":"","name":"Jump Suit (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"WeaponEnergy":{"prefab":{"prefabName":"WeaponEnergy","prefabHash":789494694,"desc":"","name":"Weapon Energy"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponPistolEnergy":{"prefab":{"prefabName":"WeaponPistolEnergy","prefabHash":-385323479,"desc":"0.Stun\n1.Kill","name":"Energy Pistol"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponRifleEnergy":{"prefab":{"prefabName":"WeaponRifleEnergy","prefabHash":1154745374,"desc":"0.Stun\n1.Kill","name":"Energy Rifle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponTorpedo":{"prefab":{"prefabName":"WeaponTorpedo","prefabHash":-1102977898,"desc":"","name":"Torpedo"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Torpedo","sortingClass":"Default"}}},"reagents":{"Alcohol":{"Hash":1565803737,"Unit":"ml","Sources":null},"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}},"Cocoa":{"Hash":678781198,"Unit":"g","Sources":{"ItemCocoaPowder":1.0,"ItemCocoaTree":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","Sources":null},"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","Sources":null},"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}},"Sugar":{"Hash":1778746875,"Unit":"g","Sources":{"ItemSugar":10.0,"ItemSugarCane":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}}},"enums":{"scriptEnums":{"LogicBatchMethod":{"enumName":"LogicBatchMethod","values":{"Average":{"value":0,"deprecated":false,"description":""},"Maximum":{"value":3,"deprecated":false,"description":""},"Minimum":{"value":2,"deprecated":false,"description":""},"Sum":{"value":1,"deprecated":false,"description":""}}},"LogicReagentMode":{"enumName":"LogicReagentMode","values":{"Contents":{"value":0,"deprecated":false,"description":""},"Recipe":{"value":2,"deprecated":false,"description":""},"Required":{"value":1,"deprecated":false,"description":""},"TotalContents":{"value":3,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NameHash":{"value":268,"deprecated":false,"description":"Provides the hash value for the name of the object as a 32 bit integer."},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}}},"basicEnums":{"AirCon":{"enumName":"AirConditioningMode","values":{"Cold":{"value":0,"deprecated":false,"description":""},"Hot":{"value":1,"deprecated":false,"description":""}}},"AirControl":{"enumName":"AirControlMode","values":{"Draught":{"value":4,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Offline":{"value":1,"deprecated":false,"description":""},"Pressure":{"value":2,"deprecated":false,"description":""}}},"Color":{"enumName":"ColorType","values":{"Black":{"value":7,"deprecated":false,"description":""},"Blue":{"value":0,"deprecated":false,"description":""},"Brown":{"value":8,"deprecated":false,"description":""},"Gray":{"value":1,"deprecated":false,"description":""},"Green":{"value":2,"deprecated":false,"description":""},"Khaki":{"value":9,"deprecated":false,"description":""},"Orange":{"value":3,"deprecated":false,"description":""},"Pink":{"value":10,"deprecated":false,"description":""},"Purple":{"value":11,"deprecated":false,"description":""},"Red":{"value":4,"deprecated":false,"description":""},"White":{"value":6,"deprecated":false,"description":""},"Yellow":{"value":5,"deprecated":false,"description":""}}},"DaylightSensorMode":{"enumName":"DaylightSensorMode","values":{"Default":{"value":0,"deprecated":false,"description":""},"Horizontal":{"value":1,"deprecated":false,"description":""},"Vertical":{"value":2,"deprecated":false,"description":""}}},"ElevatorMode":{"enumName":"ElevatorMode","values":{"Downward":{"value":2,"deprecated":false,"description":""},"Stationary":{"value":0,"deprecated":false,"description":""},"Upward":{"value":1,"deprecated":false,"description":""}}},"EntityState":{"enumName":"EntityState","values":{"Alive":{"value":0,"deprecated":false,"description":""},"Dead":{"value":1,"deprecated":false,"description":""},"Decay":{"value":3,"deprecated":false,"description":""},"Unconscious":{"value":2,"deprecated":false,"description":""}}},"GasType":{"enumName":"GasType","values":{"CarbonDioxide":{"value":4,"deprecated":false,"description":""},"Hydrogen":{"value":16384,"deprecated":false,"description":""},"LiquidCarbonDioxide":{"value":2048,"deprecated":false,"description":""},"LiquidHydrogen":{"value":32768,"deprecated":false,"description":""},"LiquidNitrogen":{"value":128,"deprecated":false,"description":""},"LiquidNitrousOxide":{"value":8192,"deprecated":false,"description":""},"LiquidOxygen":{"value":256,"deprecated":false,"description":""},"LiquidPollutant":{"value":4096,"deprecated":false,"description":""},"LiquidVolatiles":{"value":512,"deprecated":false,"description":""},"Nitrogen":{"value":2,"deprecated":false,"description":""},"NitrousOxide":{"value":64,"deprecated":false,"description":""},"Oxygen":{"value":1,"deprecated":false,"description":""},"Pollutant":{"value":16,"deprecated":false,"description":""},"PollutedWater":{"value":65536,"deprecated":false,"description":""},"Steam":{"value":1024,"deprecated":false,"description":""},"Undefined":{"value":0,"deprecated":false,"description":""},"Volatiles":{"value":8,"deprecated":false,"description":""},"Water":{"value":32,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NameHash":{"value":268,"deprecated":false,"description":"Provides the hash value for the name of the object as a 32 bit integer."},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}},"PowerMode":{"enumName":"PowerMode","values":{"Charged":{"value":4,"deprecated":false,"description":""},"Charging":{"value":3,"deprecated":false,"description":""},"Discharged":{"value":1,"deprecated":false,"description":""},"Discharging":{"value":2,"deprecated":false,"description":""},"Idle":{"value":0,"deprecated":false,"description":""}}},"PrinterInstruction":{"enumName":"PrinterInstruction","values":{"DeviceSetLock":{"value":6,"deprecated":false,"description":""},"EjectAllReagents":{"value":8,"deprecated":false,"description":""},"EjectReagent":{"value":7,"deprecated":false,"description":""},"ExecuteRecipe":{"value":2,"deprecated":false,"description":""},"JumpIfNextInvalid":{"value":4,"deprecated":false,"description":""},"JumpToAddress":{"value":5,"deprecated":false,"description":""},"MissingRecipeReagent":{"value":9,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"StackPointer":{"value":1,"deprecated":false,"description":""},"WaitUntilNextValid":{"value":3,"deprecated":false,"description":""}}},"ReEntryProfile":{"enumName":"ReEntryProfile","values":{"High":{"value":3,"deprecated":false,"description":""},"Max":{"value":4,"deprecated":false,"description":""},"Medium":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Optimal":{"value":1,"deprecated":false,"description":""}}},"RobotMode":{"enumName":"RobotMode","values":{"Follow":{"value":1,"deprecated":false,"description":""},"MoveToTarget":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"PathToTarget":{"value":5,"deprecated":false,"description":""},"Roam":{"value":3,"deprecated":false,"description":""},"StorageFull":{"value":6,"deprecated":false,"description":""},"Unload":{"value":4,"deprecated":false,"description":""}}},"RocketMode":{"enumName":"RocketMode","values":{"Chart":{"value":5,"deprecated":false,"description":""},"Discover":{"value":4,"deprecated":false,"description":""},"Invalid":{"value":0,"deprecated":false,"description":""},"Mine":{"value":2,"deprecated":false,"description":""},"None":{"value":1,"deprecated":false,"description":""},"Survey":{"value":3,"deprecated":false,"description":""}}},"SlotClass":{"enumName":"Class","values":{"AccessCard":{"value":22,"deprecated":false,"description":""},"Appliance":{"value":18,"deprecated":false,"description":""},"Back":{"value":3,"deprecated":false,"description":""},"Battery":{"value":14,"deprecated":false,"description":""},"Belt":{"value":16,"deprecated":false,"description":""},"Blocked":{"value":38,"deprecated":false,"description":""},"Bottle":{"value":25,"deprecated":false,"description":""},"Cartridge":{"value":21,"deprecated":false,"description":""},"Circuit":{"value":24,"deprecated":false,"description":""},"Circuitboard":{"value":7,"deprecated":false,"description":""},"CreditCard":{"value":28,"deprecated":false,"description":""},"DataDisk":{"value":8,"deprecated":false,"description":""},"DirtCanister":{"value":29,"deprecated":false,"description":""},"DrillHead":{"value":35,"deprecated":false,"description":""},"Egg":{"value":15,"deprecated":false,"description":""},"Entity":{"value":13,"deprecated":false,"description":""},"Flare":{"value":37,"deprecated":false,"description":""},"GasCanister":{"value":5,"deprecated":false,"description":""},"GasFilter":{"value":4,"deprecated":false,"description":""},"Glasses":{"value":27,"deprecated":false,"description":""},"Helmet":{"value":1,"deprecated":false,"description":""},"Ingot":{"value":19,"deprecated":false,"description":""},"LiquidBottle":{"value":32,"deprecated":false,"description":""},"LiquidCanister":{"value":31,"deprecated":false,"description":""},"Magazine":{"value":23,"deprecated":false,"description":""},"Motherboard":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Ore":{"value":10,"deprecated":false,"description":""},"Organ":{"value":9,"deprecated":false,"description":""},"Plant":{"value":11,"deprecated":false,"description":""},"ProgrammableChip":{"value":26,"deprecated":false,"description":""},"ScanningHead":{"value":36,"deprecated":false,"description":""},"SensorProcessingUnit":{"value":30,"deprecated":false,"description":""},"SoundCartridge":{"value":34,"deprecated":false,"description":""},"Suit":{"value":2,"deprecated":false,"description":""},"SuitMod":{"value":39,"deprecated":false,"description":""},"Tool":{"value":17,"deprecated":false,"description":""},"Torpedo":{"value":20,"deprecated":false,"description":""},"Uniform":{"value":12,"deprecated":false,"description":""},"Wreckage":{"value":33,"deprecated":false,"description":""}}},"SorterInstruction":{"enumName":"SorterInstruction","values":{"FilterPrefabHashEquals":{"value":1,"deprecated":false,"description":""},"FilterPrefabHashNotEquals":{"value":2,"deprecated":false,"description":""},"FilterQuantityCompare":{"value":5,"deprecated":false,"description":""},"FilterSlotTypeCompare":{"value":4,"deprecated":false,"description":""},"FilterSortingClassCompare":{"value":3,"deprecated":false,"description":""},"LimitNextExecutionByCount":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""}}},"SortingClass":{"enumName":"SortingClass","values":{"Appliances":{"value":6,"deprecated":false,"description":""},"Atmospherics":{"value":7,"deprecated":false,"description":""},"Clothing":{"value":5,"deprecated":false,"description":""},"Default":{"value":0,"deprecated":false,"description":""},"Food":{"value":4,"deprecated":false,"description":""},"Ices":{"value":10,"deprecated":false,"description":""},"Kits":{"value":1,"deprecated":false,"description":""},"Ores":{"value":9,"deprecated":false,"description":""},"Resources":{"value":3,"deprecated":false,"description":""},"Storage":{"value":8,"deprecated":false,"description":""},"Tools":{"value":2,"deprecated":false,"description":""}}},"Sound":{"enumName":"SoundAlert","values":{"AirlockCycling":{"value":22,"deprecated":false,"description":""},"Alarm1":{"value":45,"deprecated":false,"description":""},"Alarm10":{"value":12,"deprecated":false,"description":""},"Alarm11":{"value":13,"deprecated":false,"description":""},"Alarm12":{"value":14,"deprecated":false,"description":""},"Alarm2":{"value":1,"deprecated":false,"description":""},"Alarm3":{"value":2,"deprecated":false,"description":""},"Alarm4":{"value":3,"deprecated":false,"description":""},"Alarm5":{"value":4,"deprecated":false,"description":""},"Alarm6":{"value":5,"deprecated":false,"description":""},"Alarm7":{"value":6,"deprecated":false,"description":""},"Alarm8":{"value":10,"deprecated":false,"description":""},"Alarm9":{"value":11,"deprecated":false,"description":""},"Alert":{"value":17,"deprecated":false,"description":""},"Danger":{"value":15,"deprecated":false,"description":""},"Depressurising":{"value":20,"deprecated":false,"description":""},"FireFireFire":{"value":28,"deprecated":false,"description":""},"Five":{"value":33,"deprecated":false,"description":""},"Floor":{"value":34,"deprecated":false,"description":""},"Four":{"value":32,"deprecated":false,"description":""},"HaltWhoGoesThere":{"value":27,"deprecated":false,"description":""},"HighCarbonDioxide":{"value":44,"deprecated":false,"description":""},"IntruderAlert":{"value":19,"deprecated":false,"description":""},"LiftOff":{"value":36,"deprecated":false,"description":""},"MalfunctionDetected":{"value":26,"deprecated":false,"description":""},"Music1":{"value":7,"deprecated":false,"description":""},"Music2":{"value":8,"deprecated":false,"description":""},"Music3":{"value":9,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"One":{"value":29,"deprecated":false,"description":""},"PollutantsDetected":{"value":43,"deprecated":false,"description":""},"PowerLow":{"value":23,"deprecated":false,"description":""},"PressureHigh":{"value":39,"deprecated":false,"description":""},"PressureLow":{"value":40,"deprecated":false,"description":""},"Pressurising":{"value":21,"deprecated":false,"description":""},"RocketLaunching":{"value":35,"deprecated":false,"description":""},"StormIncoming":{"value":18,"deprecated":false,"description":""},"SystemFailure":{"value":24,"deprecated":false,"description":""},"TemperatureHigh":{"value":41,"deprecated":false,"description":""},"TemperatureLow":{"value":42,"deprecated":false,"description":""},"Three":{"value":31,"deprecated":false,"description":""},"TraderIncoming":{"value":37,"deprecated":false,"description":""},"TraderLanded":{"value":38,"deprecated":false,"description":""},"Two":{"value":30,"deprecated":false,"description":""},"Warning":{"value":16,"deprecated":false,"description":""},"Welcome":{"value":25,"deprecated":false,"description":""}}},"TransmitterMode":{"enumName":"LogicTransmitterMode","values":{"Active":{"value":1,"deprecated":false,"description":""},"Passive":{"value":0,"deprecated":false,"description":""}}},"Vent":{"enumName":"VentDirection","values":{"Inward":{"value":1,"deprecated":false,"description":""},"Outward":{"value":0,"deprecated":false,"description":""}}},"_unnamed":{"enumName":"ConditionOperation","values":{"Equals":{"value":0,"deprecated":false,"description":""},"Greater":{"value":1,"deprecated":false,"description":""},"Less":{"value":2,"deprecated":false,"description":""},"NotEquals":{"value":3,"deprecated":false,"description":""}}}}},"prefabsByHash":{"-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","-1884103228":"SeedBag_SugarCane","-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","-1351081801":"StructureLargeHangerDoor","-1348105509":"ItemGoldOre","-1344601965":"ItemCannedMushroom","-1339716113":"AppliancePaintMixer","-1339479035":"AccessCardGray","-1337091041":"StructureChuteDigitalValveRight","-1335056202":"ItemSugarCane","-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","-1108244510":"ItemPlainCake","-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","-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","-261575861":"ItemChocolateCake","-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","234601764":"ItemChocolateBar","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","457286516":"ItemCocoaPowder","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","680051921":"ItemCocoaTree","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","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","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","860793245":"ItemChocolateCerealBar","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","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","1139887531":"SeedBag_Cocoa","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","2111910840":"ItemSugar","2130739600":"DynamicMKIILiquidCanisterEmpty","2131916219":"ItemSpaceOre","2133035682":"ItemKitStandardChute","2134172356":"StructureInsulatedPipeStraight","2134647745":"ItemLeadIngot","2145068424":"ItemGasCanisterNitrogen"},"structures":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","Flag_ODA_10m","Flag_ODA_4m","Flag_ODA_6m","Flag_ODA_8m","H2Combustor","KitchenTableShort","KitchenTableSimpleShort","KitchenTableSimpleTall","KitchenTableTall","Landingpad_2x2CenterPiece01","Landingpad_BlankPiece","Landingpad_CenterPiece01","Landingpad_CrossPiece","Landingpad_DataConnectionPiece","Landingpad_DiagonalPiece01","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_GasCylinderTankPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_StraightPiece01","Landingpad_TaxiPieceCorner","Landingpad_TaxiPieceHold","Landingpad_TaxiPieceStraight","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","RailingElegant01","RailingElegant02","RailingIndustrial02","RespawnPoint","RespawnPointWallMounted","Rover_MkI_build_states","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureBlocker","StructureCableAnalysizer","StructureCableCorner","StructureCableCorner3","StructureCableCorner3Burnt","StructureCableCorner3HBurnt","StructureCableCorner4","StructureCableCorner4Burnt","StructureCableCorner4HBurnt","StructureCableCornerBurnt","StructureCableCornerH","StructureCableCornerH3","StructureCableCornerH4","StructureCableCornerHBurnt","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCableJunction","StructureCableJunction4","StructureCableJunction4Burnt","StructureCableJunction4HBurnt","StructureCableJunction5","StructureCableJunction5Burnt","StructureCableJunction6","StructureCableJunction6Burnt","StructureCableJunction6HBurnt","StructureCableJunctionBurnt","StructureCableJunctionH","StructureCableJunctionH4","StructureCableJunctionH5","StructureCableJunctionH5Burnt","StructureCableJunctionH6","StructureCableJunctionHBurnt","StructureCableStraight","StructureCableStraightBurnt","StructureCableStraightH","StructureCableStraightHBurnt","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteCorner","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteFlipFlopSplitter","StructureChuteInlet","StructureChuteJunction","StructureChuteOutlet","StructureChuteOverflow","StructureChuteStraight","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureChuteValve","StructureChuteWindow","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeCladdingAngled","StructureCompositeCladdingAngledCorner","StructureCompositeCladdingAngledCornerInner","StructureCompositeCladdingAngledCornerInnerLong","StructureCompositeCladdingAngledCornerInnerLongL","StructureCompositeCladdingAngledCornerInnerLongR","StructureCompositeCladdingAngledCornerLong","StructureCompositeCladdingAngledCornerLongR","StructureCompositeCladdingAngledLong","StructureCompositeCladdingCylindrical","StructureCompositeCladdingCylindricalPanel","StructureCompositeCladdingPanel","StructureCompositeCladdingRounded","StructureCompositeCladdingRoundedCorner","StructureCompositeCladdingRoundedCornerInner","StructureCompositeCladdingSpherical","StructureCompositeCladdingSphericalCap","StructureCompositeCladdingSphericalCorner","StructureCompositeDoor","StructureCompositeFloorGrating","StructureCompositeFloorGrating2","StructureCompositeFloorGrating3","StructureCompositeFloorGrating4","StructureCompositeFloorGratingOpen","StructureCompositeFloorGratingOpenRotated","StructureCompositeWall","StructureCompositeWall02","StructureCompositeWall03","StructureCompositeWall04","StructureCompositeWindow","StructureCompositeWindowIron","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCrateMount","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEngineMountTypeA1","StructureEvaporationChamber","StructureExpansionValve","StructureFairingTypeA1","StructureFairingTypeA2","StructureFairingTypeA3","StructureFiltration","StructureFlagSmall","StructureFlashingLight","StructureFlatBench","StructureFloorDrain","StructureFrame","StructureFrameCorner","StructureFrameCornerCut","StructureFrameIron","StructureFrameSide","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureFuselageTypeA1","StructureFuselageTypeA2","StructureFuselageTypeA4","StructureFuselageTypeC5","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTray","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInLineTankGas1x1","StructureInLineTankGas1x2","StructureInLineTankLiquid1x1","StructureInLineTankLiquid1x2","StructureInsulatedInLineTankGas1x1","StructureInsulatedInLineTankGas1x2","StructureInsulatedInLineTankLiquid1x1","StructureInsulatedInLineTankLiquid1x2","StructureInsulatedPipeCorner","StructureInsulatedPipeCrossJunction","StructureInsulatedPipeCrossJunction3","StructureInsulatedPipeCrossJunction4","StructureInsulatedPipeCrossJunction5","StructureInsulatedPipeCrossJunction6","StructureInsulatedPipeLiquidCorner","StructureInsulatedPipeLiquidCrossJunction","StructureInsulatedPipeLiquidCrossJunction4","StructureInsulatedPipeLiquidCrossJunction5","StructureInsulatedPipeLiquidCrossJunction6","StructureInsulatedPipeLiquidStraight","StructureInsulatedPipeLiquidTJunction","StructureInsulatedPipeStraight","StructureInsulatedPipeTJunction","StructureInsulatedTankConnector","StructureInsulatedTankConnectorLiquid","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLadder","StructureLadderEnd","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLaunchMount","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassiveVent","StructurePassiveVentInsulated","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePictureFrameThickLandscapeLarge","StructurePictureFrameThickLandscapeSmall","StructurePictureFrameThickMountLandscapeLarge","StructurePictureFrameThickMountLandscapeSmall","StructurePictureFrameThickMountPortraitLarge","StructurePictureFrameThickMountPortraitSmall","StructurePictureFrameThickPortraitLarge","StructurePictureFrameThickPortraitSmall","StructurePictureFrameThinLandscapeLarge","StructurePictureFrameThinLandscapeSmall","StructurePictureFrameThinMountLandscapeLarge","StructurePictureFrameThinMountLandscapeSmall","StructurePictureFrameThinMountPortraitLarge","StructurePictureFrameThinMountPortraitSmall","StructurePictureFrameThinPortraitLarge","StructurePictureFrameThinPortraitSmall","StructurePipeAnalysizer","StructurePipeCorner","StructurePipeCowl","StructurePipeCrossJunction","StructurePipeCrossJunction3","StructurePipeCrossJunction4","StructurePipeCrossJunction5","StructurePipeCrossJunction6","StructurePipeHeater","StructurePipeIgniter","StructurePipeInsulatedLiquidCrossJunction","StructurePipeLabel","StructurePipeLiquidCorner","StructurePipeLiquidCrossJunction","StructurePipeLiquidCrossJunction3","StructurePipeLiquidCrossJunction4","StructurePipeLiquidCrossJunction5","StructurePipeLiquidCrossJunction6","StructurePipeLiquidStraight","StructurePipeLiquidTJunction","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeOrgan","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePipeStraight","StructurePipeTJunction","StructurePlanter","StructurePlatformLadderOpen","StructurePlinth","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRailing","StructureRecycler","StructureRefrigeratedVendingMachine","StructureReinforcedCompositeWindow","StructureReinforcedCompositeWindowSteel","StructureReinforcedWallPaddedWindow","StructureReinforcedWallPaddedWindowThin","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTower","StructureRocketTransformerSmall","StructureRover","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelf","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSmallTableBacklessDouble","StructureSmallTableBacklessSingle","StructureSmallTableDinnerSingle","StructureSmallTableRectangleDouble","StructureSmallTableRectangleSingle","StructureSmallTableThickDouble","StructureSmallTableThickSingle","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStairs4x2","StructureStairs4x2RailL","StructureStairs4x2RailR","StructureStairs4x2Rails","StructureStairwellBackLeft","StructureStairwellBackPassthrough","StructureStairwellBackRight","StructureStairwellFrontLeft","StructureStairwellFrontPassthrough","StructureStairwellFrontRight","StructureStairwellNoDoors","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankConnector","StructureTankConnectorLiquid","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTorpedoRack","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallArch","StructureWallArchArrow","StructureWallArchCornerRound","StructureWallArchCornerSquare","StructureWallArchCornerTriangle","StructureWallArchPlating","StructureWallArchTwoTone","StructureWallCooler","StructureWallFlat","StructureWallFlatCornerRound","StructureWallFlatCornerSquare","StructureWallFlatCornerTriangle","StructureWallFlatCornerTriangleFlat","StructureWallGeometryCorner","StructureWallGeometryStreight","StructureWallGeometryT","StructureWallGeometryTMirrored","StructureWallHeater","StructureWallIron","StructureWallIron02","StructureWallIron03","StructureWallIron04","StructureWallLargePanel","StructureWallLargePanelArrow","StructureWallLight","StructureWallLightBattery","StructureWallPaddedArch","StructureWallPaddedArchCorner","StructureWallPaddedArchLightFittingTop","StructureWallPaddedArchLightsFittings","StructureWallPaddedCorner","StructureWallPaddedCornerThin","StructureWallPaddedNoBorder","StructureWallPaddedNoBorderCorner","StructureWallPaddedThinNoBorder","StructureWallPaddedThinNoBorderCorner","StructureWallPaddedWindow","StructureWallPaddedWindowThin","StructureWallPadding","StructureWallPaddingArchVent","StructureWallPaddingLightFitting","StructureWallPaddingThin","StructureWallPlating","StructureWallSmallPanelsAndHatch","StructureWallSmallPanelsArrow","StructureWallSmallPanelsMonoChrome","StructureWallSmallPanelsOpen","StructureWallSmallPanelsTwoTone","StructureWallVent","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"devices":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","H2Combustor","Landingpad_DataConnectionPiece","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureCableAnalysizer","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteInlet","StructureChuteOutlet","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeDoor","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEvaporationChamber","StructureExpansionValve","StructureFiltration","StructureFlashingLight","StructureFlatBench","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePipeAnalysizer","StructurePipeHeater","StructurePipeIgniter","StructurePipeLabel","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRecycler","StructureRefrigeratedVendingMachine","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTransformerSmall","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallCooler","StructureWallHeater","StructureWallLight","StructureWallLightBattery","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"items":["AccessCardBlack","AccessCardBlue","AccessCardBrown","AccessCardGray","AccessCardGreen","AccessCardKhaki","AccessCardOrange","AccessCardPink","AccessCardPurple","AccessCardRed","AccessCardWhite","AccessCardYellow","ApplianceChemistryStation","ApplianceDeskLampLeft","ApplianceDeskLampRight","ApplianceMicrowave","AppliancePackagingMachine","AppliancePaintMixer","AppliancePlantGeneticAnalyzer","AppliancePlantGeneticSplicer","AppliancePlantGeneticStabilizer","ApplianceReagentProcessor","ApplianceSeedTray","ApplianceTabletDock","AutolathePrinterMod","Battery_Wireless_cell","Battery_Wireless_cell_Big","CardboardBox","CartridgeAccessController","CartridgeAtmosAnalyser","CartridgeConfiguration","CartridgeElectronicReader","CartridgeGPS","CartridgeGuide","CartridgeMedicalAnalyser","CartridgeNetworkAnalyser","CartridgeOreScanner","CartridgeOreScannerColor","CartridgePlantAnalyser","CartridgeTracker","CircuitboardAdvAirlockControl","CircuitboardAirControl","CircuitboardAirlockControl","CircuitboardCameraDisplay","CircuitboardDoorControl","CircuitboardGasDisplay","CircuitboardGraphDisplay","CircuitboardHashDisplay","CircuitboardModeControl","CircuitboardPowerControl","CircuitboardShipDisplay","CircuitboardSolarControl","CrateMkII","DecayedFood","DynamicAirConditioner","DynamicCrate","DynamicGPR","DynamicGasCanisterAir","DynamicGasCanisterCarbonDioxide","DynamicGasCanisterEmpty","DynamicGasCanisterFuel","DynamicGasCanisterNitrogen","DynamicGasCanisterNitrousOxide","DynamicGasCanisterOxygen","DynamicGasCanisterPollutants","DynamicGasCanisterRocketFuel","DynamicGasCanisterVolatiles","DynamicGasCanisterWater","DynamicGasTankAdvanced","DynamicGasTankAdvancedOxygen","DynamicGenerator","DynamicHydroponics","DynamicLight","DynamicLiquidCanisterEmpty","DynamicMKIILiquidCanisterEmpty","DynamicMKIILiquidCanisterWater","DynamicScrubber","DynamicSkeleton","ElectronicPrinterMod","ElevatorCarrage","EntityChick","EntityChickenBrown","EntityChickenWhite","EntityRoosterBlack","EntityRoosterBrown","Fertilizer","FireArmSMG","FlareGun","Handgun","HandgunMagazine","HumanSkull","ImGuiCircuitboardAirlockControl","ItemActiveVent","ItemAdhesiveInsulation","ItemAdvancedTablet","ItemAlienMushroom","ItemAmmoBox","ItemAngleGrinder","ItemArcWelder","ItemAreaPowerControl","ItemAstroloyIngot","ItemAstroloySheets","ItemAuthoringTool","ItemAuthoringToolRocketNetwork","ItemBasketBall","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBatteryCharger","ItemBatteryChargerSmall","ItemBeacon","ItemBiomass","ItemBreadLoaf","ItemCableAnalyser","ItemCableCoil","ItemCableCoilHeavy","ItemCableFuse","ItemCannedCondensedMilk","ItemCannedEdamame","ItemCannedMushroom","ItemCannedPowderedEggs","ItemCannedRicePudding","ItemCerealBar","ItemCharcoal","ItemChemLightBlue","ItemChemLightGreen","ItemChemLightRed","ItemChemLightWhite","ItemChemLightYellow","ItemChocolateBar","ItemChocolateCake","ItemChocolateCerealBar","ItemCoalOre","ItemCobaltOre","ItemCocoaPowder","ItemCocoaTree","ItemCoffeeMug","ItemConstantanIngot","ItemCookedCondensedMilk","ItemCookedCorn","ItemCookedMushroom","ItemCookedPowderedEggs","ItemCookedPumpkin","ItemCookedRice","ItemCookedSoybean","ItemCookedTomato","ItemCopperIngot","ItemCopperOre","ItemCorn","ItemCornSoup","ItemCreditCard","ItemCropHay","ItemCrowbar","ItemDataDisk","ItemDirtCanister","ItemDirtyOre","ItemDisposableBatteryCharger","ItemDrill","ItemDuctTape","ItemDynamicAirCon","ItemDynamicScrubber","ItemEggCarton","ItemElectronicParts","ItemElectrumIngot","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyCrowbar","ItemEmergencyDrill","ItemEmergencyEvaSuit","ItemEmergencyPickaxe","ItemEmergencyScrewdriver","ItemEmergencySpaceHelmet","ItemEmergencyToolBelt","ItemEmergencyWireCutters","ItemEmergencyWrench","ItemEmptyCan","ItemEvaSuit","ItemExplosive","ItemFern","ItemFertilizedEgg","ItemFilterFern","ItemFlagSmall","ItemFlashingLight","ItemFlashlight","ItemFlour","ItemFlowerBlue","ItemFlowerGreen","ItemFlowerOrange","ItemFlowerRed","ItemFlowerYellow","ItemFrenchFries","ItemFries","ItemGasCanisterCarbonDioxide","ItemGasCanisterEmpty","ItemGasCanisterFuel","ItemGasCanisterNitrogen","ItemGasCanisterNitrousOxide","ItemGasCanisterOxygen","ItemGasCanisterPollutants","ItemGasCanisterSmart","ItemGasCanisterVolatiles","ItemGasCanisterWater","ItemGasFilterCarbonDioxide","ItemGasFilterCarbonDioxideInfinite","ItemGasFilterCarbonDioxideL","ItemGasFilterCarbonDioxideM","ItemGasFilterNitrogen","ItemGasFilterNitrogenInfinite","ItemGasFilterNitrogenL","ItemGasFilterNitrogenM","ItemGasFilterNitrousOxide","ItemGasFilterNitrousOxideInfinite","ItemGasFilterNitrousOxideL","ItemGasFilterNitrousOxideM","ItemGasFilterOxygen","ItemGasFilterOxygenInfinite","ItemGasFilterOxygenL","ItemGasFilterOxygenM","ItemGasFilterPollutants","ItemGasFilterPollutantsInfinite","ItemGasFilterPollutantsL","ItemGasFilterPollutantsM","ItemGasFilterVolatiles","ItemGasFilterVolatilesInfinite","ItemGasFilterVolatilesL","ItemGasFilterVolatilesM","ItemGasFilterWater","ItemGasFilterWaterInfinite","ItemGasFilterWaterL","ItemGasFilterWaterM","ItemGasSensor","ItemGasTankStorage","ItemGlassSheets","ItemGlasses","ItemGoldIngot","ItemGoldOre","ItemGrenade","ItemHEMDroidRepairKit","ItemHardBackpack","ItemHardJetpack","ItemHardMiningBackPack","ItemHardSuit","ItemHardsuitHelmet","ItemHastelloyIngot","ItemHat","ItemHighVolumeGasCanisterEmpty","ItemHorticultureBelt","ItemHydroponicTray","ItemIce","ItemIgniter","ItemInconelIngot","ItemInsulation","ItemIntegratedCircuit10","ItemInvarIngot","ItemIronFrames","ItemIronIngot","ItemIronOre","ItemIronSheets","ItemJetpackBasic","ItemKitAIMeE","ItemKitAccessBridge","ItemKitAdvancedComposter","ItemKitAdvancedFurnace","ItemKitAdvancedPackagingMachine","ItemKitAirlock","ItemKitAirlockGate","ItemKitArcFurnace","ItemKitAtmospherics","ItemKitAutoMinerSmall","ItemKitAutolathe","ItemKitAutomatedOven","ItemKitBasket","ItemKitBattery","ItemKitBatteryLarge","ItemKitBeacon","ItemKitBeds","ItemKitBlastDoor","ItemKitCentrifuge","ItemKitChairs","ItemKitChute","ItemKitChuteUmbilical","ItemKitCompositeCladding","ItemKitCompositeFloorGrating","ItemKitComputer","ItemKitConsole","ItemKitCrate","ItemKitCrateMkII","ItemKitCrateMount","ItemKitCryoTube","ItemKitDeepMiner","ItemKitDockingPort","ItemKitDoor","ItemKitDrinkingFountain","ItemKitDynamicCanister","ItemKitDynamicGasTankAdvanced","ItemKitDynamicGenerator","ItemKitDynamicHydroponics","ItemKitDynamicLiquidCanister","ItemKitDynamicMKIILiquidCanister","ItemKitElectricUmbilical","ItemKitElectronicsPrinter","ItemKitElevator","ItemKitEngineLarge","ItemKitEngineMedium","ItemKitEngineSmall","ItemKitEvaporationChamber","ItemKitFlagODA","ItemKitFridgeBig","ItemKitFridgeSmall","ItemKitFurnace","ItemKitFurniture","ItemKitFuselage","ItemKitGasGenerator","ItemKitGasUmbilical","ItemKitGovernedGasRocketEngine","ItemKitGroundTelescope","ItemKitGrowLight","ItemKitHarvie","ItemKitHeatExchanger","ItemKitHorizontalAutoMiner","ItemKitHydraulicPipeBender","ItemKitHydroponicAutomated","ItemKitHydroponicStation","ItemKitIceCrusher","ItemKitInsulatedLiquidPipe","ItemKitInsulatedPipe","ItemKitInsulatedPipeUtility","ItemKitInsulatedPipeUtilityLiquid","ItemKitInteriorDoors","ItemKitLadder","ItemKitLandingPadAtmos","ItemKitLandingPadBasic","ItemKitLandingPadWaypoint","ItemKitLargeDirectHeatExchanger","ItemKitLargeExtendableRadiator","ItemKitLargeSatelliteDish","ItemKitLaunchMount","ItemKitLaunchTower","ItemKitLiquidRegulator","ItemKitLiquidTank","ItemKitLiquidTankInsulated","ItemKitLiquidTurboVolumePump","ItemKitLiquidUmbilical","ItemKitLocker","ItemKitLogicCircuit","ItemKitLogicInputOutput","ItemKitLogicMemory","ItemKitLogicProcessor","ItemKitLogicSwitch","ItemKitLogicTransmitter","ItemKitMotherShipCore","ItemKitMusicMachines","ItemKitPassiveLargeRadiatorGas","ItemKitPassiveLargeRadiatorLiquid","ItemKitPassthroughHeatExchanger","ItemKitPictureFrame","ItemKitPipe","ItemKitPipeLiquid","ItemKitPipeOrgan","ItemKitPipeRadiator","ItemKitPipeRadiatorLiquid","ItemKitPipeUtility","ItemKitPipeUtilityLiquid","ItemKitPlanter","ItemKitPortablesConnector","ItemKitPowerTransmitter","ItemKitPowerTransmitterOmni","ItemKitPoweredVent","ItemKitPressureFedGasEngine","ItemKitPressureFedLiquidEngine","ItemKitPressurePlate","ItemKitPumpedLiquidEngine","ItemKitRailing","ItemKitRecycler","ItemKitRegulator","ItemKitReinforcedWindows","ItemKitResearchMachine","ItemKitRespawnPointWallMounted","ItemKitRocketAvionics","ItemKitRocketBattery","ItemKitRocketCargoStorage","ItemKitRocketCelestialTracker","ItemKitRocketCircuitHousing","ItemKitRocketDatalink","ItemKitRocketGasFuelTank","ItemKitRocketLiquidFuelTank","ItemKitRocketManufactory","ItemKitRocketMiner","ItemKitRocketScanner","ItemKitRocketTransformerSmall","ItemKitRoverFrame","ItemKitRoverMKI","ItemKitSDBHopper","ItemKitSatelliteDish","ItemKitSecurityPrinter","ItemKitSensor","ItemKitShower","ItemKitSign","ItemKitSleeper","ItemKitSmallDirectHeatExchanger","ItemKitSmallSatelliteDish","ItemKitSolarPanel","ItemKitSolarPanelBasic","ItemKitSolarPanelBasicReinforced","ItemKitSolarPanelReinforced","ItemKitSolidGenerator","ItemKitSorter","ItemKitSpeaker","ItemKitStacker","ItemKitStairs","ItemKitStairwell","ItemKitStandardChute","ItemKitStirlingEngine","ItemKitSuitStorage","ItemKitTables","ItemKitTank","ItemKitTankInsulated","ItemKitToolManufactory","ItemKitTransformer","ItemKitTransformerSmall","ItemKitTurbineGenerator","ItemKitTurboVolumePump","ItemKitUprightWindTurbine","ItemKitVendingMachine","ItemKitVendingMachineRefrigerated","ItemKitWall","ItemKitWallArch","ItemKitWallFlat","ItemKitWallGeometry","ItemKitWallIron","ItemKitWallPadded","ItemKitWaterBottleFiller","ItemKitWaterPurifier","ItemKitWeatherStation","ItemKitWindTurbine","ItemKitWindowShutter","ItemLabeller","ItemLaptop","ItemLeadIngot","ItemLeadOre","ItemLightSword","ItemLiquidCanisterEmpty","ItemLiquidCanisterSmart","ItemLiquidDrain","ItemLiquidPipeAnalyzer","ItemLiquidPipeHeater","ItemLiquidPipeValve","ItemLiquidPipeVolumePump","ItemLiquidTankStorage","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIICrowbar","ItemMKIIDrill","ItemMKIIDuctTape","ItemMKIIMiningDrill","ItemMKIIScrewdriver","ItemMKIIWireCutters","ItemMKIIWrench","ItemMarineBodyArmor","ItemMarineHelmet","ItemMilk","ItemMiningBackPack","ItemMiningBelt","ItemMiningBeltMKII","ItemMiningCharge","ItemMiningDrill","ItemMiningDrillHeavy","ItemMiningDrillPneumatic","ItemMkIIToolbelt","ItemMuffin","ItemMushroom","ItemNVG","ItemNickelIngot","ItemNickelOre","ItemNitrice","ItemOxite","ItemPassiveVent","ItemPassiveVentInsulated","ItemPeaceLily","ItemPickaxe","ItemPillHeal","ItemPillStun","ItemPipeAnalyizer","ItemPipeCowl","ItemPipeDigitalValve","ItemPipeGasMixer","ItemPipeHeater","ItemPipeIgniter","ItemPipeLabel","ItemPipeLiquidRadiator","ItemPipeMeter","ItemPipeRadiator","ItemPipeValve","ItemPipeVolumePump","ItemPlainCake","ItemPlantEndothermic_Creative","ItemPlantEndothermic_Genepool1","ItemPlantEndothermic_Genepool2","ItemPlantSampler","ItemPlantSwitchGrass","ItemPlantThermogenic_Creative","ItemPlantThermogenic_Genepool1","ItemPlantThermogenic_Genepool2","ItemPlasticSheets","ItemPotato","ItemPotatoBaked","ItemPowerConnector","ItemPumpkin","ItemPumpkinPie","ItemPumpkinSoup","ItemPureIce","ItemPureIceCarbonDioxide","ItemPureIceHydrogen","ItemPureIceLiquidCarbonDioxide","ItemPureIceLiquidHydrogen","ItemPureIceLiquidNitrogen","ItemPureIceLiquidNitrous","ItemPureIceLiquidOxygen","ItemPureIceLiquidPollutant","ItemPureIceLiquidVolatiles","ItemPureIceNitrogen","ItemPureIceNitrous","ItemPureIceOxygen","ItemPureIcePollutant","ItemPureIcePollutedWater","ItemPureIceSteam","ItemPureIceVolatiles","ItemRTG","ItemRTGSurvival","ItemReagentMix","ItemRemoteDetonator","ItemReusableFireExtinguisher","ItemRice","ItemRoadFlare","ItemRocketMiningDrillHead","ItemRocketMiningDrillHeadDurable","ItemRocketMiningDrillHeadHighSpeedIce","ItemRocketMiningDrillHeadHighSpeedMineral","ItemRocketMiningDrillHeadIce","ItemRocketMiningDrillHeadLongTerm","ItemRocketMiningDrillHeadMineral","ItemRocketScanningHead","ItemScanner","ItemScrewdriver","ItemSecurityCamera","ItemSensorLenses","ItemSensorProcessingUnitCelestialScanner","ItemSensorProcessingUnitMesonScanner","ItemSensorProcessingUnitOreScanner","ItemSiliconIngot","ItemSiliconOre","ItemSilverIngot","ItemSilverOre","ItemSolderIngot","ItemSolidFuel","ItemSoundCartridgeBass","ItemSoundCartridgeDrums","ItemSoundCartridgeLeads","ItemSoundCartridgeSynth","ItemSoyOil","ItemSoybean","ItemSpaceCleaner","ItemSpaceHelmet","ItemSpaceIce","ItemSpaceOre","ItemSpacepack","ItemSprayCanBlack","ItemSprayCanBlue","ItemSprayCanBrown","ItemSprayCanGreen","ItemSprayCanGrey","ItemSprayCanKhaki","ItemSprayCanOrange","ItemSprayCanPink","ItemSprayCanPurple","ItemSprayCanRed","ItemSprayCanWhite","ItemSprayCanYellow","ItemSprayGun","ItemSteelFrames","ItemSteelIngot","ItemSteelSheets","ItemStelliteGlassSheets","ItemStelliteIngot","ItemSugar","ItemSugarCane","ItemSuitModCryogenicUpgrade","ItemTablet","ItemTerrainManipulator","ItemTomato","ItemTomatoSoup","ItemToolBelt","ItemTropicalPlant","ItemUraniumOre","ItemVolatiles","ItemWallCooler","ItemWallHeater","ItemWallLight","ItemWaspaloyIngot","ItemWaterBottle","ItemWaterPipeDigitalValve","ItemWaterPipeMeter","ItemWaterWallCooler","ItemWearLamp","ItemWeldingTorch","ItemWheat","ItemWireCutters","ItemWirelessBatteryCellExtraLarge","ItemWreckageAirConditioner1","ItemWreckageAirConditioner2","ItemWreckageHydroponicsTray1","ItemWreckageLargeExtendableRadiator01","ItemWreckageStructureRTG1","ItemWreckageStructureWeatherStation001","ItemWreckageStructureWeatherStation002","ItemWreckageStructureWeatherStation003","ItemWreckageStructureWeatherStation004","ItemWreckageStructureWeatherStation005","ItemWreckageStructureWeatherStation006","ItemWreckageStructureWeatherStation007","ItemWreckageStructureWeatherStation008","ItemWreckageTurbineGenerator1","ItemWreckageTurbineGenerator2","ItemWreckageTurbineGenerator3","ItemWreckageWallCooler1","ItemWreckageWallCooler2","ItemWrench","KitSDBSilo","KitStructureCombustionCentrifuge","Lander","Meteorite","MonsterEgg","MotherboardComms","MotherboardLogic","MotherboardMissionControl","MotherboardProgrammableChip","MotherboardRockets","MotherboardSorter","MothershipCore","NpcChick","NpcChicken","PipeBenderMod","PortableComposter","PortableSolarPanel","ReagentColorBlue","ReagentColorGreen","ReagentColorOrange","ReagentColorRed","ReagentColorYellow","Robot","RoverCargo","Rover_MkI","SMGMagazine","SeedBag_Cocoa","SeedBag_Corn","SeedBag_Fern","SeedBag_Mushroom","SeedBag_Potato","SeedBag_Pumpkin","SeedBag_Rice","SeedBag_Soybean","SeedBag_SugarCane","SeedBag_Switchgrass","SeedBag_Tomato","SeedBag_Wheet","SpaceShuttle","ToolPrinterMod","ToyLuna","UniformCommander","UniformMarine","UniformOrangeJumpSuit","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy","WeaponTorpedo"],"logicableItems":["Battery_Wireless_cell","Battery_Wireless_cell_Big","DynamicGPR","DynamicLight","ItemAdvancedTablet","ItemAngleGrinder","ItemArcWelder","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBeacon","ItemDrill","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyDrill","ItemEmergencySpaceHelmet","ItemFlashlight","ItemHardBackpack","ItemHardJetpack","ItemHardSuit","ItemHardsuitHelmet","ItemIntegratedCircuit10","ItemJetpackBasic","ItemLabeller","ItemLaptop","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIIDrill","ItemMKIIMiningDrill","ItemMiningBeltMKII","ItemMiningDrill","ItemMiningDrillHeavy","ItemMkIIToolbelt","ItemNVG","ItemPlantSampler","ItemRemoteDetonator","ItemSensorLenses","ItemSpaceHelmet","ItemSpacepack","ItemTablet","ItemTerrainManipulator","ItemWearLamp","ItemWirelessBatteryCellExtraLarge","PortableSolarPanel","Robot","RoverCargo","Rover_MkI","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy"]} \ No newline at end of file diff --git a/ic10emu/src/device.rs b/ic10emu/src/device.rs index b3adf0c..d191f47 100644 --- a/ic10emu/src/device.rs +++ b/ic10emu/src/device.rs @@ -522,7 +522,11 @@ impl 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.circuit_holders.get(ic_id).expect("our own ic to exist").borrow(); + let ic = vm + .circuit_holders + .get(ic_id) + .expect("our own ic to exist") + .borrow(); copy.insert( LogicType::LineNumber, LogicField { diff --git a/ic10emu/src/errors.rs b/ic10emu/src/errors.rs index e0faacf..da7e76e 100644 --- a/ic10emu/src/errors.rs +++ b/ic10emu/src/errors.rs @@ -1,4 +1,10 @@ -use crate::vm::{instructions::enums::InstructionOp, object::{errors::{LogicError, MemoryError}, ObjectID}}; +use crate::vm::{ + instructions::enums::InstructionOp, + object::{ + errors::{LogicError, MemoryError}, + ObjectID, + }, +}; use serde_derive::{Deserialize, Serialize}; use std::error::Error as StdError; use std::fmt::Display; @@ -38,7 +44,6 @@ pub enum VMError { NotProgrammable(ObjectID), } - #[derive(Error, Debug, Serialize, Deserialize)] pub enum TemplateError { #[error("object id {0} has a non conforming set of interfaces")] diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index 962102e..0dec93f 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -246,9 +246,9 @@ impl Program { } } - pub fn get_line(&self, line: u32) -> Result<&Instruction, ICError> { + pub fn get_line(&self, line: usize) -> Result<&Instruction, ICError> { self.instructions - .get(line as usize) + .get(line) .ok_or(ICError::InstructionPointerOutOfRange(line)) } } @@ -2030,7 +2030,8 @@ impl IC { if ic_id == &this.id { this.peek_addr(addr) } else { - let ic = vm.circuit_holders.get(ic_id).unwrap().borrow(); + let ic = + vm.circuit_holders.get(ic_id).unwrap().borrow(); ic.peek_addr(addr) } }?; @@ -2063,7 +2064,8 @@ impl IC { if ic_id == &this.id { this.peek_addr(addr) } else { - let ic = vm.circuit_holders.get(ic_id).unwrap().borrow(); + let ic = + vm.circuit_holders.get(ic_id).unwrap().borrow(); ic.peek_addr(addr) } }?; diff --git a/ic10emu/src/network.rs b/ic10emu/src/network.rs index 28c9502..3b7654d 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -204,7 +204,7 @@ impl Connection { } } -#[derive(ObjectInterface!, Debug, Serialize, Deserialize)] +#[derive(ObjectInterface!, Debug)] #[custom(implements(Object { Storage, Logicable, Network}))] pub struct CableNetwork { #[custom(object_id)] @@ -216,8 +216,7 @@ pub struct CableNetwork { /// required by object interface but atm unused by network pub name: Name, #[custom(object_vm_ref)] - #[serde(skip)] - pub vm: Option>, + pub vm: Rc, /// data enabled objects (must be devices) pub devices: HashSet, /// power only connections @@ -387,14 +386,14 @@ impl Network for CableNetwork { } fn get_devices(&self) -> Vec { - self.devices.iter().copied().collect_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] { + fn get_channel_data(&self) -> &[f64; 8] { &self.channels } } @@ -429,21 +428,6 @@ impl From> for FrozenCableNetwork { power_only: value.get_power_only(), channels: *value.get_channel_data(), } - - } -} - -impl From for CableNetwork { - fn from(value: FrozenCableNetwork) -> Self { - CableNetwork { - id: value.id, - prefab: Name::new(""), - name: Name::new(""), - vm: None, - devices: value.devices.into_iter().collect(), - power_only: value.power_only.into_iter().collect(), - channels: value.channels, - } } } @@ -454,17 +438,28 @@ pub enum NetworkError { } impl CableNetwork { - pub fn new(id: u32) -> Self { + pub fn new(id: u32, vm: Rc) -> Self { CableNetwork { id, prefab: Name::new(""), name: Name::new(""), - vm: None, + 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 { diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index 37436b2..a8e3cb4 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -3,7 +3,6 @@ pub mod instructions; pub mod object; use crate::{ - device::Device, errors::{ICError, TemplateError, VMError}, interpreter::ICState, network::{CableConnectionType, CableNetwork, Connection, ConnectionRole, FrozenCableNetwork}, @@ -80,7 +79,7 @@ impl VM { operation_modified: RefCell::new(Vec::new()), }); - let default_network = VMObject::new(CableNetwork::new(default_network_key), vm.clone()); + let default_network = VMObject::new(CableNetwork::new(default_network_key, vm.clone())); vm.networks .borrow_mut() .insert(default_network_key, default_network); @@ -138,7 +137,7 @@ impl VM { 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()), + VMObject::new(CableNetwork::new(next_id, self.clone())), ); next_id } @@ -884,10 +883,7 @@ impl VM { .map(|network| { ( network.id, - VMObject::new( - std::convert::Into::::into(network), - self.clone(), - ), + VMObject::new(CableNetwork::from_frozen(network, self.clone())), ) }) .collect(); @@ -1009,7 +1005,7 @@ impl VMTransaction { self.id_space.next() }; - let obj = template.build(obj_id, self.vm.clone()); + let obj = template.build(obj_id, &self.vm); if let Some(storage) = obj.borrow_mut().as_mut_storage() { for (slot_index, occupant_template) in diff --git a/ic10emu/src/vm/enums/basic_enums.rs b/ic10emu/src/vm/enums/basic_enums.rs index 2a6f66f..5838e36 100644 --- a/ic10emu/src/vm/enums/basic_enums.rs +++ b/ic10emu/src/vm/enums/basic_enums.rs @@ -9,6 +9,7 @@ // // ================================================= +use crate::vm::enums::script_enums::{LogicSlotType, LogicType}; use serde_derive::{Deserialize, Serialize}; use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; #[derive( @@ -261,2220 +262,6 @@ pub enum GasType { #[strum(serialize = "PollutedWater", props(docs = r#""#, value = "65536"))] PollutedWater = 65536u32, } -#[derive( - Debug, - Default, - Display, - Clone, - Copy, - PartialEq, - Eq, - PartialOrd, - Ord, - Hash, - EnumString, - AsRefStr, - EnumProperty, - EnumIter, - FromRepr, - Serialize, - Deserialize, -)] -#[strum(use_phf)] -#[repr(u8)] -pub enum LogicSlotType { - #[strum(serialize = "None", props(docs = r#"No description"#, value = "0"))] - #[default] - None = 0u8, - #[strum( - serialize = "Occupied", - props( - docs = r#"returns 0 when slot is not occupied, 1 when it is"#, - value = "1" - ) - )] - Occupied = 1u8, - #[strum( - serialize = "OccupantHash", - props( - docs = r#"returns the has of the current occupant, the unique identifier of the thing"#, - value = "2" - ) - )] - OccupantHash = 2u8, - #[strum( - serialize = "Quantity", - props( - docs = r#"returns the current quantity, such as stack size, of the item in the slot"#, - value = "3" - ) - )] - Quantity = 3u8, - #[strum( - serialize = "Damage", - props( - docs = r#"returns the damage state of the item in the slot"#, - value = "4" - ) - )] - Damage = 4u8, - #[strum( - serialize = "Efficiency", - props( - docs = r#"returns the growth efficiency of the plant in the slot"#, - value = "5" - ) - )] - Efficiency = 5u8, - #[strum( - serialize = "Health", - props(docs = r#"returns the health of the plant in the slot"#, value = "6") - )] - Health = 6u8, - #[strum( - serialize = "Growth", - props( - docs = r#"returns the current growth state of the plant in the slot"#, - value = "7" - ) - )] - Growth = 7u8, - #[strum( - serialize = "Pressure", - props( - docs = r#"returns pressure of the slot occupants internal atmosphere"#, - value = "8" - ) - )] - Pressure = 8u8, - #[strum( - serialize = "Temperature", - props( - docs = r#"returns temperature of the slot occupants internal atmosphere"#, - value = "9" - ) - )] - Temperature = 9u8, - #[strum( - serialize = "Charge", - props( - docs = r#"returns current energy charge the slot occupant is holding"#, - value = "10" - ) - )] - Charge = 10u8, - #[strum( - serialize = "ChargeRatio", - props( - docs = r#"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", - props( - docs = r#"returns integer representing the class of object"#, - value = "12" - ) - )] - Class = 12u8, - #[strum( - serialize = "PressureWaste", - props( - docs = r#"returns pressure in the waste tank of the jetpack in this slot"#, - value = "13" - ) - )] - PressureWaste = 13u8, - #[strum( - serialize = "PressureAir", - props( - docs = r#"returns pressure in the air tank of the jetpack in this slot"#, - value = "14" - ) - )] - PressureAir = 14u8, - #[strum( - serialize = "MaxQuantity", - props( - docs = r#"returns the max stack size of the item in the slot"#, - value = "15" - ) - )] - MaxQuantity = 15u8, - #[strum( - serialize = "Mature", - props( - docs = r#"returns 1 if the plant in this slot is mature, 0 when it isn't"#, - value = "16" - ) - )] - Mature = 16u8, - #[strum( - serialize = "PrefabHash", - props( - docs = r#"returns the hash of the structure in the slot"#, - value = "17" - ) - )] - PrefabHash = 17u8, - #[strum( - serialize = "Seeding", - props( - docs = r#"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", - props( - docs = r#"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", - props(docs = r#"No description available"#, value = "20") - )] - Volume = 20u8, - #[strum( - serialize = "Open", - props(docs = r#"No description available"#, value = "21") - )] - Open = 21u8, - #[strum( - serialize = "On", - props(docs = r#"No description available"#, value = "22") - )] - On = 22u8, - #[strum( - serialize = "Lock", - props(docs = r#"No description available"#, value = "23") - )] - Lock = 23u8, - #[strum( - serialize = "SortingClass", - props(docs = r#"No description available"#, value = "24") - )] - SortingClass = 24u8, - #[strum( - serialize = "FilterType", - props(docs = r#"No description available"#, value = "25") - )] - FilterType = 25u8, - #[strum( - serialize = "ReferenceId", - props(docs = r#"Unique Reference Identifier for this object"#, value = "26") - )] - ReferenceId = 26u8, -} -#[derive( - Debug, - Default, - Display, - Clone, - Copy, - PartialEq, - Eq, - PartialOrd, - Ord, - Hash, - EnumString, - AsRefStr, - EnumProperty, - EnumIter, - FromRepr, - Serialize, - Deserialize, -)] -#[strum(use_phf)] -#[repr(u16)] -pub enum LogicType { - #[strum( - serialize = "None", - props(deprecated = "true", docs = r#"No description"#, value = "0") - )] - #[default] - None = 0u16, - #[strum( - serialize = "Power", - props( - docs = r#"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", - props(docs = r#"1 if device is open, otherwise 0"#, value = "2") - )] - Open = 2u16, - #[strum( - serialize = "Mode", - props( - docs = r#"Integer for mode state, different devices will have different mode states available to them"#, - value = "3" - ) - )] - Mode = 3u16, - #[strum( - serialize = "Error", - props(docs = r#"1 if device is in error state, otherwise 0"#, value = "4") - )] - Error = 4u16, - #[strum( - serialize = "Pressure", - props(docs = r#"The current pressure reading of the device"#, value = "5") - )] - Pressure = 5u16, - #[strum( - serialize = "Temperature", - props(docs = r#"The current temperature reading of the device"#, value = "6") - )] - Temperature = 6u16, - #[strum( - serialize = "PressureExternal", - props(docs = r#"Setting for external pressure safety, in KPa"#, value = "7") - )] - PressureExternal = 7u16, - #[strum( - serialize = "PressureInternal", - props(docs = r#"Setting for internal pressure safety, in KPa"#, value = "8") - )] - PressureInternal = 8u16, - #[strum( - serialize = "Activate", - props( - docs = r#"1 if device is activated (usually means running), otherwise 0"#, - value = "9" - ) - )] - Activate = 9u16, - #[strum( - serialize = "Lock", - props( - docs = r#"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", - props(docs = r#"The current charge the device has"#, value = "11") - )] - Charge = 11u16, - #[strum( - serialize = "Setting", - props( - docs = r#"A variable setting that can be read or written, depending on the device"#, - value = "12" - ) - )] - Setting = 12u16, - #[strum( - serialize = "Reagents", - props( - docs = r#"Total number of reagents recorded by the device"#, - value = "13" - ) - )] - Reagents = 13u16, - #[strum( - serialize = "RatioOxygen", - props(docs = r#"The ratio of oxygen in device atmosphere"#, value = "14") - )] - RatioOxygen = 14u16, - #[strum( - serialize = "RatioCarbonDioxide", - props( - docs = r#"The ratio of Carbon Dioxide in device atmosphere"#, - value = "15" - ) - )] - RatioCarbonDioxide = 15u16, - #[strum( - serialize = "RatioNitrogen", - props(docs = r#"The ratio of nitrogen in device atmosphere"#, value = "16") - )] - RatioNitrogen = 16u16, - #[strum( - serialize = "RatioPollutant", - props(docs = r#"The ratio of pollutant in device atmosphere"#, value = "17") - )] - RatioPollutant = 17u16, - #[strum( - serialize = "RatioVolatiles", - props(docs = r#"The ratio of volatiles in device atmosphere"#, value = "18") - )] - RatioVolatiles = 18u16, - #[strum( - serialize = "RatioWater", - props(docs = r#"The ratio of water in device atmosphere"#, value = "19") - )] - RatioWater = 19u16, - #[strum( - serialize = "Horizontal", - props(docs = r#"Horizontal setting of the device"#, value = "20") - )] - Horizontal = 20u16, - #[strum( - serialize = "Vertical", - props(docs = r#"Vertical setting of the device"#, value = "21") - )] - Vertical = 21u16, - #[strum( - serialize = "SolarAngle", - props(docs = r#"Solar angle of the device"#, value = "22") - )] - SolarAngle = 22u16, - #[strum( - serialize = "Maximum", - props(docs = r#"Maximum setting of the device"#, value = "23") - )] - Maximum = 23u16, - #[strum( - serialize = "Ratio", - props( - docs = r#"Context specific value depending on device, 0 to 1 based ratio"#, - value = "24" - ) - )] - Ratio = 24u16, - #[strum( - serialize = "PowerPotential", - props( - docs = r#"How much energy the device or network potentially provides"#, - value = "25" - ) - )] - PowerPotential = 25u16, - #[strum( - serialize = "PowerActual", - props( - docs = r#"How much energy the device or network is actually using"#, - value = "26" - ) - )] - PowerActual = 26u16, - #[strum( - serialize = "Quantity", - props(docs = r#"Total quantity on the device"#, value = "27") - )] - Quantity = 27u16, - #[strum( - serialize = "On", - props( - docs = r#"The current state of the device, 0 for off, 1 for on"#, - value = "28" - ) - )] - On = 28u16, - #[strum( - serialize = "ImportQuantity", - props( - deprecated = "true", - docs = r#"Total quantity of items imported by the device"#, - value = "29" - ) - )] - ImportQuantity = 29u16, - #[strum( - serialize = "ImportSlotOccupant", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "30") - )] - ImportSlotOccupant = 30u16, - #[strum( - serialize = "ExportQuantity", - props( - deprecated = "true", - docs = r#"Total quantity of items exported by the device"#, - value = "31" - ) - )] - ExportQuantity = 31u16, - #[strum( - serialize = "ExportSlotOccupant", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "32") - )] - ExportSlotOccupant = 32u16, - #[strum( - serialize = "RequiredPower", - props( - docs = r#"Idle operating power quantity, does not necessarily include extra demand power"#, - value = "33" - ) - )] - RequiredPower = 33u16, - #[strum( - serialize = "HorizontalRatio", - props(docs = r#"Radio of horizontal setting for device"#, value = "34") - )] - HorizontalRatio = 34u16, - #[strum( - serialize = "VerticalRatio", - props(docs = r#"Radio of vertical setting for device"#, value = "35") - )] - VerticalRatio = 35u16, - #[strum( - serialize = "PowerRequired", - props( - docs = r#"Power requested from the device and/or network"#, - value = "36" - ) - )] - PowerRequired = 36u16, - #[strum( - serialize = "Idle", - props( - docs = r#"Returns 1 if the device is currently idle, otherwise 0"#, - value = "37" - ) - )] - Idle = 37u16, - #[strum( - serialize = "Color", - props( - docs = r#" - 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. - -0: Blue -1: Grey -2: Green -3: Orange -4: Red -5: Yellow -6: White -7: Black -8: Brown -9: Khaki -10: Pink -11: Purple - - 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. - "#, - value = "38" - ) - )] - Color = 38u16, - #[strum( - serialize = "ElevatorSpeed", - props(docs = r#"Current speed of the elevator"#, value = "39") - )] - ElevatorSpeed = 39u16, - #[strum( - serialize = "ElevatorLevel", - props(docs = r#"Level the elevator is currently at"#, value = "40") - )] - ElevatorLevel = 40u16, - #[strum( - serialize = "RecipeHash", - props( - docs = r#"Current hash of the recipe the device is set to produce"#, - value = "41" - ) - )] - RecipeHash = 41u16, - #[strum( - serialize = "ExportSlotHash", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "42") - )] - ExportSlotHash = 42u16, - #[strum( - serialize = "ImportSlotHash", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "43") - )] - ImportSlotHash = 43u16, - #[strum( - serialize = "PlantHealth1", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "44") - )] - PlantHealth1 = 44u16, - #[strum( - serialize = "PlantHealth2", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "45") - )] - PlantHealth2 = 45u16, - #[strum( - serialize = "PlantHealth3", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "46") - )] - PlantHealth3 = 46u16, - #[strum( - serialize = "PlantHealth4", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "47") - )] - PlantHealth4 = 47u16, - #[strum( - serialize = "PlantGrowth1", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "48") - )] - PlantGrowth1 = 48u16, - #[strum( - serialize = "PlantGrowth2", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "49") - )] - PlantGrowth2 = 49u16, - #[strum( - serialize = "PlantGrowth3", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "50") - )] - PlantGrowth3 = 50u16, - #[strum( - serialize = "PlantGrowth4", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "51") - )] - PlantGrowth4 = 51u16, - #[strum( - serialize = "PlantEfficiency1", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "52") - )] - PlantEfficiency1 = 52u16, - #[strum( - serialize = "PlantEfficiency2", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "53") - )] - PlantEfficiency2 = 53u16, - #[strum( - serialize = "PlantEfficiency3", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "54") - )] - PlantEfficiency3 = 54u16, - #[strum( - serialize = "PlantEfficiency4", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "55") - )] - PlantEfficiency4 = 55u16, - #[strum( - serialize = "PlantHash1", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "56") - )] - PlantHash1 = 56u16, - #[strum( - serialize = "PlantHash2", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "57") - )] - PlantHash2 = 57u16, - #[strum( - serialize = "PlantHash3", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "58") - )] - PlantHash3 = 58u16, - #[strum( - serialize = "PlantHash4", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "59") - )] - PlantHash4 = 59u16, - #[strum( - serialize = "RequestHash", - props( - docs = r#"When set to the unique identifier, requests an item of the provided type from the device"#, - value = "60" - ) - )] - RequestHash = 60u16, - #[strum( - serialize = "CompletionRatio", - props( - docs = r#"How complete the current production is for this device, between 0 and 1"#, - value = "61" - ) - )] - CompletionRatio = 61u16, - #[strum( - serialize = "ClearMemory", - props( - docs = r#"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", - props( - docs = r#"How many items exported since last ClearMemory"#, - value = "63" - ) - )] - ExportCount = 63u16, - #[strum( - serialize = "ImportCount", - props( - docs = r#"How many items imported since last ClearMemory"#, - value = "64" - ) - )] - ImportCount = 64u16, - #[strum( - serialize = "PowerGeneration", - props(docs = r#"Returns how much power is being generated"#, value = "65") - )] - PowerGeneration = 65u16, - #[strum( - serialize = "TotalMoles", - props(docs = r#"Returns the total moles of the device"#, value = "66") - )] - TotalMoles = 66u16, - #[strum( - serialize = "Volume", - props(docs = r#"Returns the device atmosphere volume"#, value = "67") - )] - Volume = 67u16, - #[strum( - serialize = "Plant", - props( - docs = r#"Performs the planting action for any plant based machinery"#, - value = "68" - ) - )] - Plant = 68u16, - #[strum( - serialize = "Harvest", - props( - docs = r#"Performs the harvesting action for any plant based machinery"#, - value = "69" - ) - )] - Harvest = 69u16, - #[strum( - serialize = "Output", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"#, - value = "72" - ) - )] - TemperatureSetting = 72u16, - #[strum( - serialize = "TemperatureExternal", - props( - docs = r#"The temperature of the outside of the device, usually the world atmosphere surrounding it"#, - value = "73" - ) - )] - TemperatureExternal = 73u16, - #[strum( - serialize = "Filtration", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"The current position in X dimension in world coordinates"#, - value = "76" - ) - )] - PositionX = 76u16, - #[strum( - serialize = "PositionY", - props( - docs = r#"The current position in Y dimension in world coordinates"#, - value = "77" - ) - )] - PositionY = 77u16, - #[strum( - serialize = "PositionZ", - props( - docs = r#"The current position in Z dimension in world coordinates"#, - value = "78" - ) - )] - PositionZ = 78u16, - #[strum( - serialize = "VelocityMagnitude", - props(docs = r#"The current magnitude of the velocity vector"#, value = "79") - )] - VelocityMagnitude = 79u16, - #[strum( - serialize = "VelocityRelativeX", - props( - docs = r#"The current velocity X relative to the forward vector of this"#, - value = "80" - ) - )] - VelocityRelativeX = 80u16, - #[strum( - serialize = "VelocityRelativeY", - props( - docs = r#"The current velocity Y relative to the forward vector of this"#, - value = "81" - ) - )] - VelocityRelativeY = 81u16, - #[strum( - serialize = "VelocityRelativeZ", - props( - docs = r#"The current velocity Z relative to the forward vector of this"#, - value = "82" - ) - )] - VelocityRelativeZ = 82u16, - #[strum( - serialize = "RatioNitrousOxide", - props( - docs = r#"The ratio of Nitrous Oxide in device atmosphere"#, - value = "83" - ) - )] - RatioNitrousOxide = 83u16, - #[strum( - serialize = "PrefabHash", - props(docs = r#"The hash of the structure"#, value = "84") - )] - PrefabHash = 84u16, - #[strum( - serialize = "ForceWrite", - props(docs = r#"Forces Logic Writer devices to rewrite value"#, value = "85") - )] - ForceWrite = 85u16, - #[strum( - serialize = "SignalStrength", - props( - docs = r#"Returns the degree offset of the strongest contact"#, - value = "86" - ) - )] - SignalStrength = 86u16, - #[strum( - serialize = "SignalID", - props( - docs = r#"Returns the contact ID of the strongest signal from this Satellite"#, - value = "87" - ) - )] - SignalId = 87u16, - #[strum( - serialize = "TargetX", - props( - docs = r#"The target position in X dimension in world coordinates"#, - value = "88" - ) - )] - TargetX = 88u16, - #[strum( - serialize = "TargetY", - props( - docs = r#"The target position in Y dimension in world coordinates"#, - value = "89" - ) - )] - TargetY = 89u16, - #[strum( - serialize = "TargetZ", - props( - docs = r#"The target position in Z dimension in world coordinates"#, - value = "90" - ) - )] - TargetZ = 90u16, - #[strum( - serialize = "SettingInput", - props(docs = r#""#, value = "91") - )] - SettingInput = 91u16, - #[strum( - serialize = "SettingOutput", - props(docs = r#""#, value = "92") - )] - SettingOutput = 92u16, - #[strum( - serialize = "CurrentResearchPodType", - props(docs = r#""#, value = "93") - )] - CurrentResearchPodType = 93u16, - #[strum( - serialize = "ManualResearchRequiredPod", - props( - docs = r#"Sets the pod type to search for a certain pod when breaking down a pods."#, - value = "94" - ) - )] - ManualResearchRequiredPod = 94u16, - #[strum( - serialize = "MineablesInVicinity", - props( - docs = r#"Returns the amount of potential mineables within an extended area around AIMEe."#, - value = "95" - ) - )] - MineablesInVicinity = 95u16, - #[strum( - serialize = "MineablesInQueue", - props( - docs = r#"Returns the amount of mineables AIMEe has queued up to mine."#, - value = "96" - ) - )] - MineablesInQueue = 96u16, - #[strum( - serialize = "NextWeatherEventTime", - props( - docs = r#"Returns in seconds when the next weather event is inbound."#, - value = "97" - ) - )] - NextWeatherEventTime = 97u16, - #[strum( - serialize = "Combustion", - props( - docs = r#"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."#, - value = "98" - ) - )] - Combustion = 98u16, - #[strum( - serialize = "Fuel", - props( - docs = r#"Gets the cost of fuel to return the rocket to your current world."#, - value = "99" - ) - )] - Fuel = 99u16, - #[strum( - serialize = "ReturnFuelCost", - props( - docs = r#"Gets the fuel remaining in your rocket's fuel tank."#, - value = "100" - ) - )] - ReturnFuelCost = 100u16, - #[strum( - serialize = "CollectableGoods", - props( - docs = r#"Gets the cost of fuel to return the rocket to your current world."#, - value = "101" - ) - )] - CollectableGoods = 101u16, - #[strum(serialize = "Time", props(docs = r#"Time"#, value = "102"))] - Time = 102u16, - #[strum(serialize = "Bpm", props(docs = r#"Bpm"#, value = "103"))] - Bpm = 103u16, - #[strum( - serialize = "EnvironmentEfficiency", - props( - docs = r#"The Environment Efficiency reported by the machine, as a float between 0 and 1"#, - value = "104" - ) - )] - EnvironmentEfficiency = 104u16, - #[strum( - serialize = "WorkingGasEfficiency", - props( - docs = r#"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"#, - value = "105" - ) - )] - WorkingGasEfficiency = 105u16, - #[strum( - serialize = "PressureInput", - props( - docs = r#"The current pressure reading of the device's Input Network"#, - value = "106" - ) - )] - PressureInput = 106u16, - #[strum( - serialize = "TemperatureInput", - props( - docs = r#"The current temperature reading of the device's Input Network"#, - value = "107" - ) - )] - TemperatureInput = 107u16, - #[strum( - serialize = "RatioOxygenInput", - props( - docs = r#"The ratio of oxygen in device's input network"#, - value = "108" - ) - )] - RatioOxygenInput = 108u16, - #[strum( - serialize = "RatioCarbonDioxideInput", - props( - docs = r#"The ratio of Carbon Dioxide in device's input network"#, - value = "109" - ) - )] - RatioCarbonDioxideInput = 109u16, - #[strum( - serialize = "RatioNitrogenInput", - props( - docs = r#"The ratio of nitrogen in device's input network"#, - value = "110" - ) - )] - RatioNitrogenInput = 110u16, - #[strum( - serialize = "RatioPollutantInput", - props( - docs = r#"The ratio of pollutant in device's input network"#, - value = "111" - ) - )] - RatioPollutantInput = 111u16, - #[strum( - serialize = "RatioVolatilesInput", - props( - docs = r#"The ratio of volatiles in device's input network"#, - value = "112" - ) - )] - RatioVolatilesInput = 112u16, - #[strum( - serialize = "RatioWaterInput", - props( - docs = r#"The ratio of water in device's input network"#, - value = "113" - ) - )] - RatioWaterInput = 113u16, - #[strum( - serialize = "RatioNitrousOxideInput", - props( - docs = r#"The ratio of Nitrous Oxide in device's input network"#, - value = "114" - ) - )] - RatioNitrousOxideInput = 114u16, - #[strum( - serialize = "TotalMolesInput", - props( - docs = r#"Returns the total moles of the device's Input Network"#, - value = "115" - ) - )] - TotalMolesInput = 115u16, - #[strum( - serialize = "PressureInput2", - props( - docs = r#"The current pressure reading of the device's Input2 Network"#, - value = "116" - ) - )] - PressureInput2 = 116u16, - #[strum( - serialize = "TemperatureInput2", - props( - docs = r#"The current temperature reading of the device's Input2 Network"#, - value = "117" - ) - )] - TemperatureInput2 = 117u16, - #[strum( - serialize = "RatioOxygenInput2", - props( - docs = r#"The ratio of oxygen in device's Input2 network"#, - value = "118" - ) - )] - RatioOxygenInput2 = 118u16, - #[strum( - serialize = "RatioCarbonDioxideInput2", - props( - docs = r#"The ratio of Carbon Dioxide in device's Input2 network"#, - value = "119" - ) - )] - RatioCarbonDioxideInput2 = 119u16, - #[strum( - serialize = "RatioNitrogenInput2", - props( - docs = r#"The ratio of nitrogen in device's Input2 network"#, - value = "120" - ) - )] - RatioNitrogenInput2 = 120u16, - #[strum( - serialize = "RatioPollutantInput2", - props( - docs = r#"The ratio of pollutant in device's Input2 network"#, - value = "121" - ) - )] - RatioPollutantInput2 = 121u16, - #[strum( - serialize = "RatioVolatilesInput2", - props( - docs = r#"The ratio of volatiles in device's Input2 network"#, - value = "122" - ) - )] - RatioVolatilesInput2 = 122u16, - #[strum( - serialize = "RatioWaterInput2", - props( - docs = r#"The ratio of water in device's Input2 network"#, - value = "123" - ) - )] - RatioWaterInput2 = 123u16, - #[strum( - serialize = "RatioNitrousOxideInput2", - props( - docs = r#"The ratio of Nitrous Oxide in device's Input2 network"#, - value = "124" - ) - )] - RatioNitrousOxideInput2 = 124u16, - #[strum( - serialize = "TotalMolesInput2", - props( - docs = r#"Returns the total moles of the device's Input2 Network"#, - value = "125" - ) - )] - TotalMolesInput2 = 125u16, - #[strum( - serialize = "PressureOutput", - props( - docs = r#"The current pressure reading of the device's Output Network"#, - value = "126" - ) - )] - PressureOutput = 126u16, - #[strum( - serialize = "TemperatureOutput", - props( - docs = r#"The current temperature reading of the device's Output Network"#, - value = "127" - ) - )] - TemperatureOutput = 127u16, - #[strum( - serialize = "RatioOxygenOutput", - props( - docs = r#"The ratio of oxygen in device's Output network"#, - value = "128" - ) - )] - RatioOxygenOutput = 128u16, - #[strum( - serialize = "RatioCarbonDioxideOutput", - props( - docs = r#"The ratio of Carbon Dioxide in device's Output network"#, - value = "129" - ) - )] - RatioCarbonDioxideOutput = 129u16, - #[strum( - serialize = "RatioNitrogenOutput", - props( - docs = r#"The ratio of nitrogen in device's Output network"#, - value = "130" - ) - )] - RatioNitrogenOutput = 130u16, - #[strum( - serialize = "RatioPollutantOutput", - props( - docs = r#"The ratio of pollutant in device's Output network"#, - value = "131" - ) - )] - RatioPollutantOutput = 131u16, - #[strum( - serialize = "RatioVolatilesOutput", - props( - docs = r#"The ratio of volatiles in device's Output network"#, - value = "132" - ) - )] - RatioVolatilesOutput = 132u16, - #[strum( - serialize = "RatioWaterOutput", - props( - docs = r#"The ratio of water in device's Output network"#, - value = "133" - ) - )] - RatioWaterOutput = 133u16, - #[strum( - serialize = "RatioNitrousOxideOutput", - props( - docs = r#"The ratio of Nitrous Oxide in device's Output network"#, - value = "134" - ) - )] - RatioNitrousOxideOutput = 134u16, - #[strum( - serialize = "TotalMolesOutput", - props( - docs = r#"Returns the total moles of the device's Output Network"#, - value = "135" - ) - )] - TotalMolesOutput = 135u16, - #[strum( - serialize = "PressureOutput2", - props( - docs = r#"The current pressure reading of the device's Output2 Network"#, - value = "136" - ) - )] - PressureOutput2 = 136u16, - #[strum( - serialize = "TemperatureOutput2", - props( - docs = r#"The current temperature reading of the device's Output2 Network"#, - value = "137" - ) - )] - TemperatureOutput2 = 137u16, - #[strum( - serialize = "RatioOxygenOutput2", - props( - docs = r#"The ratio of oxygen in device's Output2 network"#, - value = "138" - ) - )] - RatioOxygenOutput2 = 138u16, - #[strum( - serialize = "RatioCarbonDioxideOutput2", - props( - docs = r#"The ratio of Carbon Dioxide in device's Output2 network"#, - value = "139" - ) - )] - RatioCarbonDioxideOutput2 = 139u16, - #[strum( - serialize = "RatioNitrogenOutput2", - props( - docs = r#"The ratio of nitrogen in device's Output2 network"#, - value = "140" - ) - )] - RatioNitrogenOutput2 = 140u16, - #[strum( - serialize = "RatioPollutantOutput2", - props( - docs = r#"The ratio of pollutant in device's Output2 network"#, - value = "141" - ) - )] - RatioPollutantOutput2 = 141u16, - #[strum( - serialize = "RatioVolatilesOutput2", - props( - docs = r#"The ratio of volatiles in device's Output2 network"#, - value = "142" - ) - )] - RatioVolatilesOutput2 = 142u16, - #[strum( - serialize = "RatioWaterOutput2", - props( - docs = r#"The ratio of water in device's Output2 network"#, - value = "143" - ) - )] - RatioWaterOutput2 = 143u16, - #[strum( - serialize = "RatioNitrousOxideOutput2", - props( - docs = r#"The ratio of Nitrous Oxide in device's Output2 network"#, - value = "144" - ) - )] - RatioNitrousOxideOutput2 = 144u16, - #[strum( - serialize = "TotalMolesOutput2", - props( - docs = r#"Returns the total moles of the device's Output2 Network"#, - value = "145" - ) - )] - TotalMolesOutput2 = 145u16, - #[strum( - serialize = "CombustionInput", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"How the input pipe's temperature effects the machines efficiency"#, - value = "150" - ) - )] - OperationalTemperatureEfficiency = 150u16, - #[strum( - serialize = "TemperatureDifferentialEfficiency", - props( - docs = r#"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"#, - value = "151" - ) - )] - TemperatureDifferentialEfficiency = 151u16, - #[strum( - serialize = "PressureEfficiency", - props( - docs = r#"How the pressure of the input pipe and waste pipe effect the machines efficiency"#, - value = "152" - ) - )] - PressureEfficiency = 152u16, - #[strum( - serialize = "CombustionLimiter", - props( - docs = r#"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", - props( - docs = r#"Increases the rate at which the machine works (range: 0-100)"#, - value = "154" - ) - )] - Throttle = 154u16, - #[strum( - serialize = "Rpm", - props( - docs = r#"The number of revolutions per minute that the device's spinning mechanism is doing"#, - value = "155" - ) - )] - Rpm = 155u16, - #[strum( - serialize = "Stress", - props( - docs = r#"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"#, - value = "156" - ) - )] - Stress = 156u16, - #[strum( - serialize = "InterrogationProgress", - props( - docs = r#"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"#, - value = "157" - ) - )] - InterrogationProgress = 157u16, - #[strum( - serialize = "TargetPadIndex", - props( - docs = r#"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", - props( - docs = r#"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"#, - value = "160" - ) - )] - SizeX = 160u16, - #[strum( - serialize = "SizeY", - props( - docs = r#"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"#, - value = "161" - ) - )] - SizeY = 161u16, - #[strum( - serialize = "SizeZ", - props( - docs = r#"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"#, - value = "162" - ) - )] - SizeZ = 162u16, - #[strum( - serialize = "MinimumWattsToContact", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"Channel on a cable network which should be considered volatile"#, - value = "165" - ) - )] - Channel0 = 165u16, - #[strum( - serialize = "Channel1", - props( - docs = r#"Channel on a cable network which should be considered volatile"#, - value = "166" - ) - )] - Channel1 = 166u16, - #[strum( - serialize = "Channel2", - props( - docs = r#"Channel on a cable network which should be considered volatile"#, - value = "167" - ) - )] - Channel2 = 167u16, - #[strum( - serialize = "Channel3", - props( - docs = r#"Channel on a cable network which should be considered volatile"#, - value = "168" - ) - )] - Channel3 = 168u16, - #[strum( - serialize = "Channel4", - props( - docs = r#"Channel on a cable network which should be considered volatile"#, - value = "169" - ) - )] - Channel4 = 169u16, - #[strum( - serialize = "Channel5", - props( - docs = r#"Channel on a cable network which should be considered volatile"#, - value = "170" - ) - )] - Channel5 = 170u16, - #[strum( - serialize = "Channel6", - props( - docs = r#"Channel on a cable network which should be considered volatile"#, - value = "171" - ) - )] - Channel6 = 171u16, - #[strum( - serialize = "Channel7", - props( - docs = r#"Channel on a cable network which should be considered volatile"#, - value = "172" - ) - )] - Channel7 = 172u16, - #[strum( - serialize = "LineNumber", - props( - docs = r#"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", - props( - docs = r#"Set to 1 to activate the flush function on the device"#, - value = "174" - ) - )] - Flush = 174u16, - #[strum( - serialize = "SoundAlert", - props(docs = r#"Plays a sound alert on the devices speaker"#, value = "175") - )] - SoundAlert = 175u16, - #[strum( - serialize = "SolarIrradiance", - props(docs = r#""#, value = "176") - )] - SolarIrradiance = 176u16, - #[strum( - serialize = "RatioLiquidNitrogen", - props( - docs = r#"The ratio of Liquid Nitrogen in device atmosphere"#, - value = "177" - ) - )] - RatioLiquidNitrogen = 177u16, - #[strum( - serialize = "RatioLiquidNitrogenInput", - props( - docs = r#"The ratio of Liquid Nitrogen in device's input network"#, - value = "178" - ) - )] - RatioLiquidNitrogenInput = 178u16, - #[strum( - serialize = "RatioLiquidNitrogenInput2", - props( - docs = r#"The ratio of Liquid Nitrogen in device's Input2 network"#, - value = "179" - ) - )] - RatioLiquidNitrogenInput2 = 179u16, - #[strum( - serialize = "RatioLiquidNitrogenOutput", - props( - docs = r#"The ratio of Liquid Nitrogen in device's Output network"#, - value = "180" - ) - )] - RatioLiquidNitrogenOutput = 180u16, - #[strum( - serialize = "RatioLiquidNitrogenOutput2", - props( - docs = r#"The ratio of Liquid Nitrogen in device's Output2 network"#, - value = "181" - ) - )] - RatioLiquidNitrogenOutput2 = 181u16, - #[strum( - serialize = "VolumeOfLiquid", - props( - docs = r#"The total volume of all liquids in Liters in the atmosphere"#, - value = "182" - ) - )] - VolumeOfLiquid = 182u16, - #[strum( - serialize = "RatioLiquidOxygen", - props( - docs = r#"The ratio of Liquid Oxygen in device's Atmosphere"#, - value = "183" - ) - )] - RatioLiquidOxygen = 183u16, - #[strum( - serialize = "RatioLiquidOxygenInput", - props( - docs = r#"The ratio of Liquid Oxygen in device's Input Atmosphere"#, - value = "184" - ) - )] - RatioLiquidOxygenInput = 184u16, - #[strum( - serialize = "RatioLiquidOxygenInput2", - props( - docs = r#"The ratio of Liquid Oxygen in device's Input2 Atmosphere"#, - value = "185" - ) - )] - RatioLiquidOxygenInput2 = 185u16, - #[strum( - serialize = "RatioLiquidOxygenOutput", - props( - docs = r#"The ratio of Liquid Oxygen in device's device's Output Atmosphere"#, - value = "186" - ) - )] - RatioLiquidOxygenOutput = 186u16, - #[strum( - serialize = "RatioLiquidOxygenOutput2", - props( - docs = r#"The ratio of Liquid Oxygen in device's Output2 Atmopshere"#, - value = "187" - ) - )] - RatioLiquidOxygenOutput2 = 187u16, - #[strum( - serialize = "RatioLiquidVolatiles", - props( - docs = r#"The ratio of Liquid Volatiles in device's Atmosphere"#, - value = "188" - ) - )] - RatioLiquidVolatiles = 188u16, - #[strum( - serialize = "RatioLiquidVolatilesInput", - props( - docs = r#"The ratio of Liquid Volatiles in device's Input Atmosphere"#, - value = "189" - ) - )] - RatioLiquidVolatilesInput = 189u16, - #[strum( - serialize = "RatioLiquidVolatilesInput2", - props( - docs = r#"The ratio of Liquid Volatiles in device's Input2 Atmosphere"#, - value = "190" - ) - )] - RatioLiquidVolatilesInput2 = 190u16, - #[strum( - serialize = "RatioLiquidVolatilesOutput", - props( - docs = r#"The ratio of Liquid Volatiles in device's device's Output Atmosphere"#, - value = "191" - ) - )] - RatioLiquidVolatilesOutput = 191u16, - #[strum( - serialize = "RatioLiquidVolatilesOutput2", - props( - docs = r#"The ratio of Liquid Volatiles in device's Output2 Atmopshere"#, - value = "192" - ) - )] - RatioLiquidVolatilesOutput2 = 192u16, - #[strum( - serialize = "RatioSteam", - props( - docs = r#"The ratio of Steam in device's Atmosphere"#, - value = "193" - ) - )] - RatioSteam = 193u16, - #[strum( - serialize = "RatioSteamInput", - props( - docs = r#"The ratio of Steam in device's Input Atmosphere"#, - value = "194" - ) - )] - RatioSteamInput = 194u16, - #[strum( - serialize = "RatioSteamInput2", - props( - docs = r#"The ratio of Steam in device's Input2 Atmosphere"#, - value = "195" - ) - )] - RatioSteamInput2 = 195u16, - #[strum( - serialize = "RatioSteamOutput", - props( - docs = r#"The ratio of Steam in device's device's Output Atmosphere"#, - value = "196" - ) - )] - RatioSteamOutput = 196u16, - #[strum( - serialize = "RatioSteamOutput2", - props( - docs = r#"The ratio of Steam in device's Output2 Atmopshere"#, - value = "197" - ) - )] - RatioSteamOutput2 = 197u16, - #[strum( - serialize = "ContactTypeId", - props(docs = r#"The type id of the contact."#, value = "198") - )] - ContactTypeId = 198u16, - #[strum( - serialize = "RatioLiquidCarbonDioxide", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's Atmosphere"#, - value = "199" - ) - )] - RatioLiquidCarbonDioxide = 199u16, - #[strum( - serialize = "RatioLiquidCarbonDioxideInput", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"#, - value = "200" - ) - )] - RatioLiquidCarbonDioxideInput = 200u16, - #[strum( - serialize = "RatioLiquidCarbonDioxideInput2", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"#, - value = "201" - ) - )] - RatioLiquidCarbonDioxideInput2 = 201u16, - #[strum( - serialize = "RatioLiquidCarbonDioxideOutput", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"#, - value = "202" - ) - )] - RatioLiquidCarbonDioxideOutput = 202u16, - #[strum( - serialize = "RatioLiquidCarbonDioxideOutput2", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"#, - value = "203" - ) - )] - RatioLiquidCarbonDioxideOutput2 = 203u16, - #[strum( - serialize = "RatioLiquidPollutant", - props( - docs = r#"The ratio of Liquid Pollutant in device's Atmosphere"#, - value = "204" - ) - )] - RatioLiquidPollutant = 204u16, - #[strum( - serialize = "RatioLiquidPollutantInput", - props( - docs = r#"The ratio of Liquid Pollutant in device's Input Atmosphere"#, - value = "205" - ) - )] - RatioLiquidPollutantInput = 205u16, - #[strum( - serialize = "RatioLiquidPollutantInput2", - props( - docs = r#"The ratio of Liquid Pollutant in device's Input2 Atmosphere"#, - value = "206" - ) - )] - RatioLiquidPollutantInput2 = 206u16, - #[strum( - serialize = "RatioLiquidPollutantOutput", - props( - docs = r#"The ratio of Liquid Pollutant in device's device's Output Atmosphere"#, - value = "207" - ) - )] - RatioLiquidPollutantOutput = 207u16, - #[strum( - serialize = "RatioLiquidPollutantOutput2", - props( - docs = r#"The ratio of Liquid Pollutant in device's Output2 Atmopshere"#, - value = "208" - ) - )] - RatioLiquidPollutantOutput2 = 208u16, - #[strum( - serialize = "RatioLiquidNitrousOxide", - props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's Atmosphere"#, - value = "209" - ) - )] - RatioLiquidNitrousOxide = 209u16, - #[strum( - serialize = "RatioLiquidNitrousOxideInput", - props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"#, - value = "210" - ) - )] - RatioLiquidNitrousOxideInput = 210u16, - #[strum( - serialize = "RatioLiquidNitrousOxideInput2", - props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"#, - value = "211" - ) - )] - RatioLiquidNitrousOxideInput2 = 211u16, - #[strum( - serialize = "RatioLiquidNitrousOxideOutput", - props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"#, - value = "212" - ) - )] - RatioLiquidNitrousOxideOutput = 212u16, - #[strum( - serialize = "RatioLiquidNitrousOxideOutput2", - props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"#, - value = "213" - ) - )] - RatioLiquidNitrousOxideOutput2 = 213u16, - #[strum( - serialize = "Progress", - props( - docs = r#"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", - props( - docs = r#"The Space Map Address of the rockets target Space Map Location"#, - value = "215" - ) - )] - DestinationCode = 215u16, - #[strum( - serialize = "Acceleration", - props( - docs = r#"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."#, - value = "216" - ) - )] - Acceleration = 216u16, - #[strum( - serialize = "ReferenceId", - props(docs = r#"Unique Reference Identifier for this object"#, value = "217") - )] - ReferenceId = 217u16, - #[strum( - serialize = "AutoShutOff", - props( - docs = r#"Turns off all devices in the rocket upon reaching destination"#, - value = "218" - ) - )] - AutoShutOff = 218u16, - #[strum( - serialize = "Mass", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"Total current thrust of all rocket engines on the rocket in Newtons."#, - value = "221" - ) - )] - Thrust = 221u16, - #[strum( - serialize = "Weight", - props( - docs = r#"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."#, - value = "222" - ) - )] - Weight = 222u16, - #[strum( - serialize = "ThrustToWeight", - props( - docs = r#"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", - props( - docs = r#"Estimated time in seconds until rocket arrives at target destination."#, - value = "224" - ) - )] - TimeToDestination = 224u16, - #[strum( - serialize = "BurnTimeRemaining", - props( - docs = r#"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."#, - value = "225" - ) - )] - BurnTimeRemaining = 225u16, - #[strum( - serialize = "AutoLand", - props( - docs = r#"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", - props( - docs = r#"The direction the entity is facing expressed as a normalized vector"#, - value = "227" - ) - )] - ForwardX = 227u16, - #[strum( - serialize = "ForwardY", - props( - docs = r#"The direction the entity is facing expressed as a normalized vector"#, - value = "228" - ) - )] - ForwardY = 228u16, - #[strum( - serialize = "ForwardZ", - props( - docs = r#"The direction the entity is facing expressed as a normalized vector"#, - value = "229" - ) - )] - ForwardZ = 229u16, - #[strum( - serialize = "Orientation", - props( - docs = r#"The orientation of the entity in degrees in a plane relative towards the north origin"#, - value = "230" - ) - )] - Orientation = 230u16, - #[strum( - serialize = "VelocityX", - props( - docs = r#"The world velocity of the entity in the X axis"#, - value = "231" - ) - )] - VelocityX = 231u16, - #[strum( - serialize = "VelocityY", - props( - docs = r#"The world velocity of the entity in the Y axis"#, - value = "232" - ) - )] - VelocityY = 232u16, - #[strum( - serialize = "VelocityZ", - props( - docs = r#"The world velocity of the entity in the Z axis"#, - value = "233" - ) - )] - VelocityZ = 233u16, - #[strum( - serialize = "PassedMoles", - props( - docs = r#"The number of moles that passed through this device on the previous simulation tick"#, - value = "234" - ) - )] - PassedMoles = 234u16, - #[strum( - serialize = "ExhaustVelocity", - props(docs = r#"The velocity of the exhaust gas in m/s"#, value = "235") - )] - ExhaustVelocity = 235u16, - #[strum( - serialize = "FlightControlRule", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"The lowest altitude that the rocket will reach before it starts travelling upwards again."#, - value = "238" - ) - )] - Apex = 238u16, - #[strum( - serialize = "EntityState", - props( - docs = r#"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", - props( - docs = r#"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", - props(docs = r#"The current index for the device."#, value = "241") - )] - Index = 241u16, - #[strum( - serialize = "CelestialHash", - props( - docs = r#"The current hash of the targeted celestial object."#, - value = "242" - ) - )] - CelestialHash = 242u16, - #[strum( - serialize = "AlignmentError", - props( - docs = r#"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", - props( - docs = r#"The current distance to the celestial object, measured in astronomical units."#, - value = "244" - ) - )] - DistanceAu = 244u16, - #[strum( - serialize = "OrbitPeriod", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"The current distance to the celestial object, measured in kilometers."#, - value = "249" - ) - )] - DistanceKm = 249u16, - #[strum( - serialize = "CelestialParentHash", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"The ratio of Hydrogen in device's Atmopshere"#, - value = "252" - ) - )] - RatioHydrogen = 252u16, - #[strum( - serialize = "RatioLiquidHydrogen", - props( - docs = r#"The ratio of Liquid Hydrogen in device's Atmopshere"#, - value = "253" - ) - )] - RatioLiquidHydrogen = 253u16, - #[strum( - serialize = "RatioPollutedWater", - props( - docs = r#"The ratio of polluted water in device atmosphere"#, - value = "254" - ) - )] - RatioPollutedWater = 254u16, - #[strum( - serialize = "Discover", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"The number of NavPoints at the rocket's target Space Map Location."#, - value = "258" - ) - )] - NavPoints = 258u16, - #[strum( - serialize = "ChartedNavPoints", - props( - docs = r#"The number of charted NavPoints at the rocket's target Space Map Location."#, - value = "259" - ) - )] - ChartedNavPoints = 259u16, - #[strum( - serialize = "Sites", - props( - docs = r#"The number of Sites that have been discovered at the rockets target Space Map location."#, - value = "260" - ) - )] - Sites = 260u16, - #[strum( - serialize = "CurrentCode", - props( - docs = r#"The Space Map Address of the rockets current Space Map Location"#, - value = "261" - ) - )] - CurrentCode = 261u16, - #[strum( - serialize = "Density", - props( - docs = r#"The density of the rocket's target site's mine-able deposit."#, - value = "262" - ) - )] - Density = 262u16, - #[strum( - serialize = "Richness", - props( - docs = r#"The richness of the rocket's target site's mine-able deposit."#, - value = "263" - ) - )] - Richness = 263u16, - #[strum( - serialize = "Size", - props( - docs = r#"The size of the rocket's target site's mine-able deposit."#, - value = "264" - ) - )] - Size = 264u16, - #[strum( - serialize = "TotalQuantity", - props( - docs = r#"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."#, - value = "265" - ) - )] - TotalQuantity = 265u16, - #[strum( - serialize = "MinedQuantity", - props( - docs = r#"The total number of resources that have been mined at the rocket's target Space Map Site."#, - value = "266" - ) - )] - MinedQuantity = 266u16, - #[strum( - serialize = "BestContactFilter", - props( - docs = r#"Filters the satellite's auto selection of targets to a single reference ID."#, - value = "267" - ) - )] - BestContactFilter = 267u16, - #[strum( - serialize = "NameHash", - props( - docs = r#"Provides the hash value for the name of the object as a 32 bit integer."#, - value = "268" - ) - )] - NameHash = 268u16, -} #[derive( Debug, Display, diff --git a/ic10emu/src/vm/enums/prefabs.rs b/ic10emu/src/vm/enums/prefabs.rs index 3fbe1e2..89a4509 100644 --- a/ic10emu/src/vm/enums/prefabs.rs +++ b/ic10emu/src/vm/enums/prefabs.rs @@ -8679,11 +8679,6 @@ The ProKompile can stack a wide variety of things such as = phf_map! { "pinf" => f64::INFINITY, "pi" => 3.141592653589793f64, }; - diff --git a/ic10emu/src/vm/instructions/enums.rs b/ic10emu/src/vm/instructions/enums.rs index b974eaf..d3be1de 100644 --- a/ic10emu/src/vm/instructions/enums.rs +++ b/ic10emu/src/vm/instructions/enums.rs @@ -887,7 +887,6 @@ impl InstructionOp { pub fn execute( &self, ic: &mut T, - vm: &crate::vm::VM, operands: &[crate::vm::instructions::operands::Operand], ) -> Result<(), crate::errors::ICError> where @@ -902,97 +901,88 @@ impl InstructionOp { } match self { Self::Nop => Ok(()), - Self::Abs => ic.execute_abs(vm, &operands[0], &operands[1]), - Self::Acos => ic.execute_acos(vm, &operands[0], &operands[1]), - Self::Add => ic.execute_add(vm, &operands[0], &operands[1], &operands[2]), - Self::Alias => ic.execute_alias(vm, &operands[0], &operands[1]), - Self::And => ic.execute_and(vm, &operands[0], &operands[1], &operands[2]), - Self::Asin => ic.execute_asin(vm, &operands[0], &operands[1]), - Self::Atan => ic.execute_atan(vm, &operands[0], &operands[1]), - Self::Atan2 => ic.execute_atan2(vm, &operands[0], &operands[1], &operands[2]), - Self::Bap => ic.execute_bap(vm, &operands[0], &operands[1], &operands[2], &operands[3]), - Self::Bapal => { - ic.execute_bapal(vm, &operands[0], &operands[1], &operands[2], &operands[3]) - } - Self::Bapz => ic.execute_bapz(vm, &operands[0], &operands[1], &operands[2]), - Self::Bapzal => ic.execute_bapzal(vm, &operands[0], &operands[1], &operands[2]), - Self::Bdns => ic.execute_bdns(vm, &operands[0], &operands[1]), - Self::Bdnsal => ic.execute_bdnsal(vm, &operands[0], &operands[1]), - Self::Bdse => ic.execute_bdse(vm, &operands[0], &operands[1]), - Self::Bdseal => ic.execute_bdseal(vm, &operands[0], &operands[1]), - Self::Beq => ic.execute_beq(vm, &operands[0], &operands[1], &operands[2]), - Self::Beqal => ic.execute_beqal(vm, &operands[0], &operands[1], &operands[2]), - Self::Beqz => ic.execute_beqz(vm, &operands[0], &operands[1]), - Self::Beqzal => ic.execute_beqzal(vm, &operands[0], &operands[1]), - Self::Bge => ic.execute_bge(vm, &operands[0], &operands[1], &operands[2]), - Self::Bgeal => ic.execute_bgeal(vm, &operands[0], &operands[1], &operands[2]), - Self::Bgez => ic.execute_bgez(vm, &operands[0], &operands[1]), - Self::Bgezal => ic.execute_bgezal(vm, &operands[0], &operands[1]), - Self::Bgt => ic.execute_bgt(vm, &operands[0], &operands[1], &operands[2]), - Self::Bgtal => ic.execute_bgtal(vm, &operands[0], &operands[1], &operands[2]), - Self::Bgtz => ic.execute_bgtz(vm, &operands[0], &operands[1]), - Self::Bgtzal => ic.execute_bgtzal(vm, &operands[0], &operands[1]), - Self::Ble => ic.execute_ble(vm, &operands[0], &operands[1], &operands[2]), - Self::Bleal => ic.execute_bleal(vm, &operands[0], &operands[1], &operands[2]), - Self::Blez => ic.execute_blez(vm, &operands[0], &operands[1]), - Self::Blezal => ic.execute_blezal(vm, &operands[0], &operands[1]), - Self::Blt => ic.execute_blt(vm, &operands[0], &operands[1], &operands[2]), - Self::Bltal => ic.execute_bltal(vm, &operands[0], &operands[1], &operands[2]), - Self::Bltz => ic.execute_bltz(vm, &operands[0], &operands[1]), - Self::Bltzal => ic.execute_bltzal(vm, &operands[0], &operands[1]), - Self::Bna => ic.execute_bna(vm, &operands[0], &operands[1], &operands[2], &operands[3]), - Self::Bnaal => { - ic.execute_bnaal(vm, &operands[0], &operands[1], &operands[2], &operands[3]) - } - Self::Bnan => ic.execute_bnan(vm, &operands[0], &operands[1]), - Self::Bnaz => ic.execute_bnaz(vm, &operands[0], &operands[1], &operands[2]), - Self::Bnazal => ic.execute_bnazal(vm, &operands[0], &operands[1], &operands[2]), - Self::Bne => ic.execute_bne(vm, &operands[0], &operands[1], &operands[2]), - Self::Bneal => ic.execute_bneal(vm, &operands[0], &operands[1], &operands[2]), - Self::Bnez => ic.execute_bnez(vm, &operands[0], &operands[1]), - Self::Bnezal => ic.execute_bnezal(vm, &operands[0], &operands[1]), - Self::Brap => { - ic.execute_brap(vm, &operands[0], &operands[1], &operands[2], &operands[3]) - } - Self::Brapz => ic.execute_brapz(vm, &operands[0], &operands[1], &operands[2]), - Self::Brdns => ic.execute_brdns(vm, &operands[0], &operands[1]), - Self::Brdse => ic.execute_brdse(vm, &operands[0], &operands[1]), - Self::Breq => ic.execute_breq(vm, &operands[0], &operands[1], &operands[2]), - Self::Breqz => ic.execute_breqz(vm, &operands[0], &operands[1]), - Self::Brge => ic.execute_brge(vm, &operands[0], &operands[1], &operands[2]), - Self::Brgez => ic.execute_brgez(vm, &operands[0], &operands[1]), - Self::Brgt => ic.execute_brgt(vm, &operands[0], &operands[1], &operands[2]), - Self::Brgtz => ic.execute_brgtz(vm, &operands[0], &operands[1]), - Self::Brle => ic.execute_brle(vm, &operands[0], &operands[1], &operands[2]), - Self::Brlez => ic.execute_brlez(vm, &operands[0], &operands[1]), - Self::Brlt => ic.execute_brlt(vm, &operands[0], &operands[1], &operands[2]), - Self::Brltz => ic.execute_brltz(vm, &operands[0], &operands[1]), - Self::Brna => { - ic.execute_brna(vm, &operands[0], &operands[1], &operands[2], &operands[3]) - } - Self::Brnan => ic.execute_brnan(vm, &operands[0], &operands[1]), - Self::Brnaz => ic.execute_brnaz(vm, &operands[0], &operands[1], &operands[2]), - Self::Brne => ic.execute_brne(vm, &operands[0], &operands[1], &operands[2]), - Self::Brnez => ic.execute_brnez(vm, &operands[0], &operands[1]), - Self::Ceil => ic.execute_ceil(vm, &operands[0], &operands[1]), - Self::Clr => ic.execute_clr(vm, &operands[0]), - Self::Clrd => ic.execute_clrd(vm, &operands[0]), - Self::Cos => ic.execute_cos(vm, &operands[0], &operands[1]), - Self::Define => ic.execute_define(vm, &operands[0], &operands[1]), - Self::Div => ic.execute_div(vm, &operands[0], &operands[1], &operands[2]), - Self::Exp => ic.execute_exp(vm, &operands[0], &operands[1]), - Self::Floor => ic.execute_floor(vm, &operands[0], &operands[1]), - Self::Get => ic.execute_get(vm, &operands[0], &operands[1], &operands[2]), - Self::Getd => ic.execute_getd(vm, &operands[0], &operands[1], &operands[2]), - Self::Hcf => ic.execute_hcf(vm), - Self::J => ic.execute_j(vm, &operands[0]), - Self::Jal => ic.execute_jal(vm, &operands[0]), - Self::Jr => ic.execute_jr(vm, &operands[0]), - Self::L => ic.execute_l(vm, &operands[0], &operands[1], &operands[2]), - Self::Label => ic.execute_label(vm, &operands[0], &operands[1]), - Self::Lb => ic.execute_lb(vm, &operands[0], &operands[1], &operands[2], &operands[3]), + Self::Abs => ic.execute_abs(&operands[0], &operands[1]), + Self::Acos => ic.execute_acos(&operands[0], &operands[1]), + Self::Add => ic.execute_add(&operands[0], &operands[1], &operands[2]), + Self::Alias => ic.execute_alias(&operands[0], &operands[1]), + Self::And => ic.execute_and(&operands[0], &operands[1], &operands[2]), + Self::Asin => ic.execute_asin(&operands[0], &operands[1]), + Self::Atan => ic.execute_atan(&operands[0], &operands[1]), + Self::Atan2 => ic.execute_atan2(&operands[0], &operands[1], &operands[2]), + Self::Bap => ic.execute_bap(&operands[0], &operands[1], &operands[2], &operands[3]), + Self::Bapal => ic.execute_bapal(&operands[0], &operands[1], &operands[2], &operands[3]), + Self::Bapz => ic.execute_bapz(&operands[0], &operands[1], &operands[2]), + Self::Bapzal => ic.execute_bapzal(&operands[0], &operands[1], &operands[2]), + Self::Bdns => ic.execute_bdns(&operands[0], &operands[1]), + Self::Bdnsal => ic.execute_bdnsal(&operands[0], &operands[1]), + Self::Bdse => ic.execute_bdse(&operands[0], &operands[1]), + Self::Bdseal => ic.execute_bdseal(&operands[0], &operands[1]), + Self::Beq => ic.execute_beq(&operands[0], &operands[1], &operands[2]), + Self::Beqal => ic.execute_beqal(&operands[0], &operands[1], &operands[2]), + Self::Beqz => ic.execute_beqz(&operands[0], &operands[1]), + Self::Beqzal => ic.execute_beqzal(&operands[0], &operands[1]), + Self::Bge => ic.execute_bge(&operands[0], &operands[1], &operands[2]), + Self::Bgeal => ic.execute_bgeal(&operands[0], &operands[1], &operands[2]), + Self::Bgez => ic.execute_bgez(&operands[0], &operands[1]), + Self::Bgezal => ic.execute_bgezal(&operands[0], &operands[1]), + Self::Bgt => ic.execute_bgt(&operands[0], &operands[1], &operands[2]), + Self::Bgtal => ic.execute_bgtal(&operands[0], &operands[1], &operands[2]), + Self::Bgtz => ic.execute_bgtz(&operands[0], &operands[1]), + Self::Bgtzal => ic.execute_bgtzal(&operands[0], &operands[1]), + Self::Ble => ic.execute_ble(&operands[0], &operands[1], &operands[2]), + Self::Bleal => ic.execute_bleal(&operands[0], &operands[1], &operands[2]), + Self::Blez => ic.execute_blez(&operands[0], &operands[1]), + Self::Blezal => ic.execute_blezal(&operands[0], &operands[1]), + Self::Blt => ic.execute_blt(&operands[0], &operands[1], &operands[2]), + Self::Bltal => ic.execute_bltal(&operands[0], &operands[1], &operands[2]), + Self::Bltz => ic.execute_bltz(&operands[0], &operands[1]), + Self::Bltzal => ic.execute_bltzal(&operands[0], &operands[1]), + Self::Bna => ic.execute_bna(&operands[0], &operands[1], &operands[2], &operands[3]), + Self::Bnaal => ic.execute_bnaal(&operands[0], &operands[1], &operands[2], &operands[3]), + Self::Bnan => ic.execute_bnan(&operands[0], &operands[1]), + Self::Bnaz => ic.execute_bnaz(&operands[0], &operands[1], &operands[2]), + Self::Bnazal => ic.execute_bnazal(&operands[0], &operands[1], &operands[2]), + Self::Bne => ic.execute_bne(&operands[0], &operands[1], &operands[2]), + Self::Bneal => ic.execute_bneal(&operands[0], &operands[1], &operands[2]), + Self::Bnez => ic.execute_bnez(&operands[0], &operands[1]), + Self::Bnezal => ic.execute_bnezal(&operands[0], &operands[1]), + Self::Brap => ic.execute_brap(&operands[0], &operands[1], &operands[2], &operands[3]), + Self::Brapz => ic.execute_brapz(&operands[0], &operands[1], &operands[2]), + Self::Brdns => ic.execute_brdns(&operands[0], &operands[1]), + Self::Brdse => ic.execute_brdse(&operands[0], &operands[1]), + Self::Breq => ic.execute_breq(&operands[0], &operands[1], &operands[2]), + Self::Breqz => ic.execute_breqz(&operands[0], &operands[1]), + Self::Brge => ic.execute_brge(&operands[0], &operands[1], &operands[2]), + Self::Brgez => ic.execute_brgez(&operands[0], &operands[1]), + Self::Brgt => ic.execute_brgt(&operands[0], &operands[1], &operands[2]), + Self::Brgtz => ic.execute_brgtz(&operands[0], &operands[1]), + Self::Brle => ic.execute_brle(&operands[0], &operands[1], &operands[2]), + Self::Brlez => ic.execute_brlez(&operands[0], &operands[1]), + Self::Brlt => ic.execute_brlt(&operands[0], &operands[1], &operands[2]), + Self::Brltz => ic.execute_brltz(&operands[0], &operands[1]), + Self::Brna => ic.execute_brna(&operands[0], &operands[1], &operands[2], &operands[3]), + Self::Brnan => ic.execute_brnan(&operands[0], &operands[1]), + Self::Brnaz => ic.execute_brnaz(&operands[0], &operands[1], &operands[2]), + Self::Brne => ic.execute_brne(&operands[0], &operands[1], &operands[2]), + Self::Brnez => ic.execute_brnez(&operands[0], &operands[1]), + Self::Ceil => ic.execute_ceil(&operands[0], &operands[1]), + Self::Clr => ic.execute_clr(&operands[0]), + Self::Clrd => ic.execute_clrd(&operands[0]), + Self::Cos => ic.execute_cos(&operands[0], &operands[1]), + Self::Define => ic.execute_define(&operands[0], &operands[1]), + Self::Div => ic.execute_div(&operands[0], &operands[1], &operands[2]), + Self::Exp => ic.execute_exp(&operands[0], &operands[1]), + Self::Floor => ic.execute_floor(&operands[0], &operands[1]), + Self::Get => ic.execute_get(&operands[0], &operands[1], &operands[2]), + Self::Getd => ic.execute_getd(&operands[0], &operands[1], &operands[2]), + Self::Hcf => ic.execute_hcf(), + Self::J => ic.execute_j(&operands[0]), + Self::Jal => ic.execute_jal(&operands[0]), + Self::Jr => ic.execute_jr(&operands[0]), + Self::L => ic.execute_l(&operands[0], &operands[1], &operands[2]), + Self::Label => ic.execute_label(&operands[0], &operands[1]), + Self::Lb => ic.execute_lb(&operands[0], &operands[1], &operands[2], &operands[3]), Self::Lbn => ic.execute_lbn( - vm, &operands[0], &operands[1], &operands[2], @@ -1000,7 +990,6 @@ impl InstructionOp { &operands[4], ), Self::Lbns => ic.execute_lbns( - vm, &operands[0], &operands[1], &operands[2], @@ -1009,74 +998,73 @@ impl InstructionOp { &operands[5], ), Self::Lbs => ic.execute_lbs( - vm, &operands[0], &operands[1], &operands[2], &operands[3], &operands[4], ), - Self::Ld => ic.execute_ld(vm, &operands[0], &operands[1], &operands[2]), - Self::Log => ic.execute_log(vm, &operands[0], &operands[1]), - Self::Lr => ic.execute_lr(vm, &operands[0], &operands[1], &operands[2], &operands[3]), - Self::Ls => ic.execute_ls(vm, &operands[0], &operands[1], &operands[2], &operands[3]), - Self::Max => ic.execute_max(vm, &operands[0], &operands[1], &operands[2]), - Self::Min => ic.execute_min(vm, &operands[0], &operands[1], &operands[2]), - Self::Mod => ic.execute_mod(vm, &operands[0], &operands[1], &operands[2]), - Self::Move => ic.execute_move(vm, &operands[0], &operands[1]), - Self::Mul => ic.execute_mul(vm, &operands[0], &operands[1], &operands[2]), - Self::Nor => ic.execute_nor(vm, &operands[0], &operands[1], &operands[2]), - Self::Not => ic.execute_not(vm, &operands[0], &operands[1]), - Self::Or => ic.execute_or(vm, &operands[0], &operands[1], &operands[2]), - Self::Peek => ic.execute_peek(vm, &operands[0]), - Self::Poke => ic.execute_poke(vm, &operands[0], &operands[1]), - Self::Pop => ic.execute_pop(vm, &operands[0]), - Self::Push => ic.execute_push(vm, &operands[0]), - Self::Put => ic.execute_put(vm, &operands[0], &operands[1], &operands[2]), - Self::Putd => ic.execute_putd(vm, &operands[0], &operands[1], &operands[2]), - Self::Rand => ic.execute_rand(vm, &operands[0]), - Self::Round => ic.execute_round(vm, &operands[0], &operands[1]), - Self::S => ic.execute_s(vm, &operands[0], &operands[1], &operands[2]), - Self::Sap => ic.execute_sap(vm, &operands[0], &operands[1], &operands[2], &operands[3]), - Self::Sapz => ic.execute_sapz(vm, &operands[0], &operands[1], &operands[2]), - Self::Sb => ic.execute_sb(vm, &operands[0], &operands[1], &operands[2]), - Self::Sbn => ic.execute_sbn(vm, &operands[0], &operands[1], &operands[2], &operands[3]), - Self::Sbs => ic.execute_sbs(vm, &operands[0], &operands[1], &operands[2], &operands[3]), - Self::Sd => ic.execute_sd(vm, &operands[0], &operands[1], &operands[2]), - Self::Sdns => ic.execute_sdns(vm, &operands[0], &operands[1]), - Self::Sdse => ic.execute_sdse(vm, &operands[0], &operands[1]), + Self::Ld => ic.execute_ld(&operands[0], &operands[1], &operands[2]), + Self::Log => ic.execute_log(&operands[0], &operands[1]), + Self::Lr => ic.execute_lr(&operands[0], &operands[1], &operands[2], &operands[3]), + Self::Ls => ic.execute_ls(&operands[0], &operands[1], &operands[2], &operands[3]), + Self::Max => ic.execute_max(&operands[0], &operands[1], &operands[2]), + Self::Min => ic.execute_min(&operands[0], &operands[1], &operands[2]), + Self::Mod => ic.execute_mod(&operands[0], &operands[1], &operands[2]), + Self::Move => ic.execute_move(&operands[0], &operands[1]), + Self::Mul => ic.execute_mul(&operands[0], &operands[1], &operands[2]), + Self::Nor => ic.execute_nor(&operands[0], &operands[1], &operands[2]), + Self::Not => ic.execute_not(&operands[0], &operands[1]), + Self::Or => ic.execute_or(&operands[0], &operands[1], &operands[2]), + Self::Peek => ic.execute_peek(&operands[0]), + Self::Poke => ic.execute_poke(&operands[0], &operands[1]), + Self::Pop => ic.execute_pop(&operands[0]), + Self::Push => ic.execute_push(&operands[0]), + Self::Put => ic.execute_put(&operands[0], &operands[1], &operands[2]), + Self::Putd => ic.execute_putd(&operands[0], &operands[1], &operands[2]), + Self::Rand => ic.execute_rand(&operands[0]), + Self::Round => ic.execute_round(&operands[0], &operands[1]), + Self::S => ic.execute_s(&operands[0], &operands[1], &operands[2]), + Self::Sap => ic.execute_sap(&operands[0], &operands[1], &operands[2], &operands[3]), + Self::Sapz => ic.execute_sapz(&operands[0], &operands[1], &operands[2]), + Self::Sb => ic.execute_sb(&operands[0], &operands[1], &operands[2]), + Self::Sbn => ic.execute_sbn(&operands[0], &operands[1], &operands[2], &operands[3]), + Self::Sbs => ic.execute_sbs(&operands[0], &operands[1], &operands[2], &operands[3]), + Self::Sd => ic.execute_sd(&operands[0], &operands[1], &operands[2]), + Self::Sdns => ic.execute_sdns(&operands[0], &operands[1]), + Self::Sdse => ic.execute_sdse(&operands[0], &operands[1]), Self::Select => { - ic.execute_select(vm, &operands[0], &operands[1], &operands[2], &operands[3]) + ic.execute_select(&operands[0], &operands[1], &operands[2], &operands[3]) } - Self::Seq => ic.execute_seq(vm, &operands[0], &operands[1], &operands[2]), - Self::Seqz => ic.execute_seqz(vm, &operands[0], &operands[1]), - Self::Sge => ic.execute_sge(vm, &operands[0], &operands[1], &operands[2]), - Self::Sgez => ic.execute_sgez(vm, &operands[0], &operands[1]), - Self::Sgt => ic.execute_sgt(vm, &operands[0], &operands[1], &operands[2]), - Self::Sgtz => ic.execute_sgtz(vm, &operands[0], &operands[1]), - Self::Sin => ic.execute_sin(vm, &operands[0], &operands[1]), - Self::Sla => ic.execute_sla(vm, &operands[0], &operands[1], &operands[2]), - Self::Sle => ic.execute_sle(vm, &operands[0], &operands[1], &operands[2]), - Self::Sleep => ic.execute_sleep(vm, &operands[0]), - Self::Slez => ic.execute_slez(vm, &operands[0], &operands[1]), - Self::Sll => ic.execute_sll(vm, &operands[0], &operands[1], &operands[2]), - Self::Slt => ic.execute_slt(vm, &operands[0], &operands[1], &operands[2]), - Self::Sltz => ic.execute_sltz(vm, &operands[0], &operands[1]), - Self::Sna => ic.execute_sna(vm, &operands[0], &operands[1], &operands[2], &operands[3]), - Self::Snan => ic.execute_snan(vm, &operands[0], &operands[1]), - Self::Snanz => ic.execute_snanz(vm, &operands[0], &operands[1]), - Self::Snaz => ic.execute_snaz(vm, &operands[0], &operands[1], &operands[2]), - Self::Sne => ic.execute_sne(vm, &operands[0], &operands[1], &operands[2]), - Self::Snez => ic.execute_snez(vm, &operands[0], &operands[1]), - Self::Sqrt => ic.execute_sqrt(vm, &operands[0], &operands[1]), - Self::Sra => ic.execute_sra(vm, &operands[0], &operands[1], &operands[2]), - Self::Srl => ic.execute_srl(vm, &operands[0], &operands[1], &operands[2]), - Self::Ss => ic.execute_ss(vm, &operands[0], &operands[1], &operands[2], &operands[3]), - Self::Sub => ic.execute_sub(vm, &operands[0], &operands[1], &operands[2]), - Self::Tan => ic.execute_tan(vm, &operands[0], &operands[1]), - Self::Trunc => ic.execute_trunc(vm, &operands[0], &operands[1]), - Self::Xor => ic.execute_xor(vm, &operands[0], &operands[1], &operands[2]), - Self::Yield => ic.execute_yield(vm), + Self::Seq => ic.execute_seq(&operands[0], &operands[1], &operands[2]), + Self::Seqz => ic.execute_seqz(&operands[0], &operands[1]), + Self::Sge => ic.execute_sge(&operands[0], &operands[1], &operands[2]), + Self::Sgez => ic.execute_sgez(&operands[0], &operands[1]), + Self::Sgt => ic.execute_sgt(&operands[0], &operands[1], &operands[2]), + Self::Sgtz => ic.execute_sgtz(&operands[0], &operands[1]), + Self::Sin => ic.execute_sin(&operands[0], &operands[1]), + Self::Sla => ic.execute_sla(&operands[0], &operands[1], &operands[2]), + Self::Sle => ic.execute_sle(&operands[0], &operands[1], &operands[2]), + Self::Sleep => ic.execute_sleep(&operands[0]), + Self::Slez => ic.execute_slez(&operands[0], &operands[1]), + Self::Sll => ic.execute_sll(&operands[0], &operands[1], &operands[2]), + Self::Slt => ic.execute_slt(&operands[0], &operands[1], &operands[2]), + Self::Sltz => ic.execute_sltz(&operands[0], &operands[1]), + Self::Sna => ic.execute_sna(&operands[0], &operands[1], &operands[2], &operands[3]), + Self::Snan => ic.execute_snan(&operands[0], &operands[1]), + Self::Snanz => ic.execute_snanz(&operands[0], &operands[1]), + Self::Snaz => ic.execute_snaz(&operands[0], &operands[1], &operands[2]), + Self::Sne => ic.execute_sne(&operands[0], &operands[1], &operands[2]), + Self::Snez => ic.execute_snez(&operands[0], &operands[1]), + Self::Sqrt => ic.execute_sqrt(&operands[0], &operands[1]), + Self::Sra => ic.execute_sra(&operands[0], &operands[1], &operands[2]), + Self::Srl => ic.execute_srl(&operands[0], &operands[1], &operands[2]), + Self::Ss => ic.execute_ss(&operands[0], &operands[1], &operands[2], &operands[3]), + Self::Sub => ic.execute_sub(&operands[0], &operands[1], &operands[2]), + Self::Tan => ic.execute_tan(&operands[0], &operands[1]), + Self::Trunc => ic.execute_trunc(&operands[0], &operands[1]), + Self::Xor => ic.execute_xor(&operands[0], &operands[1], &operands[2]), + Self::Yield => ic.execute_yield(), } } } diff --git a/ic10emu/src/vm/instructions/traits.rs b/ic10emu/src/vm/instructions/traits.rs index e7bc54d..59c1b56 100644 --- a/ic10emu/src/vm/instructions/traits.rs +++ b/ic10emu/src/vm/instructions/traits.rs @@ -14,7 +14,6 @@ pub trait AbsInstruction: IntegratedCircuit { /// abs r? a(r?|num) fn execute_abs( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -23,7 +22,6 @@ pub trait AcosInstruction: IntegratedCircuit { /// acos r? a(r?|num) fn execute_acos( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -32,7 +30,6 @@ pub trait AddInstruction: IntegratedCircuit { /// add r? a(r?|num) b(r?|num) fn execute_add( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -42,7 +39,6 @@ pub trait AliasInstruction: IntegratedCircuit { /// alias str r?|d? fn execute_alias( &mut self, - vm: &crate::vm::VM, string: &crate::vm::instructions::operands::Operand, r: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -51,7 +47,6 @@ pub trait AndInstruction: IntegratedCircuit { /// and r? a(r?|num) b(r?|num) fn execute_and( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -61,7 +56,6 @@ pub trait AsinInstruction: IntegratedCircuit { /// asin r? a(r?|num) fn execute_asin( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -70,7 +64,6 @@ pub trait AtanInstruction: IntegratedCircuit { /// atan r? a(r?|num) fn execute_atan( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -79,7 +72,6 @@ pub trait Atan2Instruction: IntegratedCircuit { /// atan2 r? a(r?|num) b(r?|num) fn execute_atan2( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -89,7 +81,6 @@ pub trait BapInstruction: IntegratedCircuit { /// bap a(r?|num) b(r?|num) c(r?|num) d(r?|num) fn execute_bap( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -100,7 +91,6 @@ pub trait BapalInstruction: IntegratedCircuit { /// bapal a(r?|num) b(r?|num) c(r?|num) d(r?|num) fn execute_bapal( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -111,7 +101,6 @@ pub trait BapzInstruction: IntegratedCircuit { /// bapz a(r?|num) b(r?|num) c(r?|num) fn execute_bapz( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -121,7 +110,6 @@ pub trait BapzalInstruction: IntegratedCircuit { /// bapzal a(r?|num) b(r?|num) c(r?|num) fn execute_bapzal( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -131,7 +119,6 @@ pub trait BdnsInstruction: IntegratedCircuit { /// bdns d? a(r?|num) fn execute_bdns( &mut self, - vm: &crate::vm::VM, d: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -140,7 +127,6 @@ pub trait BdnsalInstruction: IntegratedCircuit { /// bdnsal d? a(r?|num) fn execute_bdnsal( &mut self, - vm: &crate::vm::VM, d: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -149,7 +135,6 @@ pub trait BdseInstruction: IntegratedCircuit { /// bdse d? a(r?|num) fn execute_bdse( &mut self, - vm: &crate::vm::VM, d: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -158,7 +143,6 @@ pub trait BdsealInstruction: IntegratedCircuit { /// bdseal d? a(r?|num) fn execute_bdseal( &mut self, - vm: &crate::vm::VM, d: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -167,7 +151,6 @@ pub trait BeqInstruction: IntegratedCircuit { /// beq a(r?|num) b(r?|num) c(r?|num) fn execute_beq( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -177,7 +160,6 @@ pub trait BeqalInstruction: IntegratedCircuit { /// beqal a(r?|num) b(r?|num) c(r?|num) fn execute_beqal( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -187,7 +169,6 @@ pub trait BeqzInstruction: IntegratedCircuit { /// beqz a(r?|num) b(r?|num) fn execute_beqz( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -196,7 +177,6 @@ pub trait BeqzalInstruction: IntegratedCircuit { /// beqzal a(r?|num) b(r?|num) fn execute_beqzal( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -205,7 +185,6 @@ pub trait BgeInstruction: IntegratedCircuit { /// bge a(r?|num) b(r?|num) c(r?|num) fn execute_bge( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -215,7 +194,6 @@ pub trait BgealInstruction: IntegratedCircuit { /// bgeal a(r?|num) b(r?|num) c(r?|num) fn execute_bgeal( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -225,7 +203,6 @@ pub trait BgezInstruction: IntegratedCircuit { /// bgez a(r?|num) b(r?|num) fn execute_bgez( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -234,7 +211,6 @@ pub trait BgezalInstruction: IntegratedCircuit { /// bgezal a(r?|num) b(r?|num) fn execute_bgezal( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -243,7 +219,6 @@ pub trait BgtInstruction: IntegratedCircuit { /// bgt a(r?|num) b(r?|num) c(r?|num) fn execute_bgt( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -253,7 +228,6 @@ pub trait BgtalInstruction: IntegratedCircuit { /// bgtal a(r?|num) b(r?|num) c(r?|num) fn execute_bgtal( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -263,7 +237,6 @@ pub trait BgtzInstruction: IntegratedCircuit { /// bgtz a(r?|num) b(r?|num) fn execute_bgtz( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -272,7 +245,6 @@ pub trait BgtzalInstruction: IntegratedCircuit { /// bgtzal a(r?|num) b(r?|num) fn execute_bgtzal( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -281,7 +253,6 @@ pub trait BleInstruction: IntegratedCircuit { /// ble a(r?|num) b(r?|num) c(r?|num) fn execute_ble( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -291,7 +262,6 @@ pub trait BlealInstruction: IntegratedCircuit { /// bleal a(r?|num) b(r?|num) c(r?|num) fn execute_bleal( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -301,7 +271,6 @@ pub trait BlezInstruction: IntegratedCircuit { /// blez a(r?|num) b(r?|num) fn execute_blez( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -310,7 +279,6 @@ pub trait BlezalInstruction: IntegratedCircuit { /// blezal a(r?|num) b(r?|num) fn execute_blezal( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -319,7 +287,6 @@ pub trait BltInstruction: IntegratedCircuit { /// blt a(r?|num) b(r?|num) c(r?|num) fn execute_blt( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -329,7 +296,6 @@ pub trait BltalInstruction: IntegratedCircuit { /// bltal a(r?|num) b(r?|num) c(r?|num) fn execute_bltal( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -339,7 +305,6 @@ pub trait BltzInstruction: IntegratedCircuit { /// bltz a(r?|num) b(r?|num) fn execute_bltz( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -348,7 +313,6 @@ pub trait BltzalInstruction: IntegratedCircuit { /// bltzal a(r?|num) b(r?|num) fn execute_bltzal( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -357,7 +321,6 @@ pub trait BnaInstruction: IntegratedCircuit { /// bna a(r?|num) b(r?|num) c(r?|num) d(r?|num) fn execute_bna( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -368,7 +331,6 @@ pub trait BnaalInstruction: IntegratedCircuit { /// bnaal a(r?|num) b(r?|num) c(r?|num) d(r?|num) fn execute_bnaal( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -379,7 +341,6 @@ pub trait BnanInstruction: IntegratedCircuit { /// bnan a(r?|num) b(r?|num) fn execute_bnan( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -388,7 +349,6 @@ pub trait BnazInstruction: IntegratedCircuit { /// bnaz a(r?|num) b(r?|num) c(r?|num) fn execute_bnaz( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -398,7 +358,6 @@ pub trait BnazalInstruction: IntegratedCircuit { /// bnazal a(r?|num) b(r?|num) c(r?|num) fn execute_bnazal( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -408,7 +367,6 @@ pub trait BneInstruction: IntegratedCircuit { /// bne a(r?|num) b(r?|num) c(r?|num) fn execute_bne( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -418,7 +376,6 @@ pub trait BnealInstruction: IntegratedCircuit { /// bneal a(r?|num) b(r?|num) c(r?|num) fn execute_bneal( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -428,7 +385,6 @@ pub trait BnezInstruction: IntegratedCircuit { /// bnez a(r?|num) b(r?|num) fn execute_bnez( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -437,7 +393,6 @@ pub trait BnezalInstruction: IntegratedCircuit { /// bnezal a(r?|num) b(r?|num) fn execute_bnezal( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -446,7 +401,6 @@ pub trait BrapInstruction: IntegratedCircuit { /// brap a(r?|num) b(r?|num) c(r?|num) d(r?|num) fn execute_brap( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -457,7 +411,6 @@ pub trait BrapzInstruction: IntegratedCircuit { /// brapz a(r?|num) b(r?|num) c(r?|num) fn execute_brapz( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -467,7 +420,6 @@ pub trait BrdnsInstruction: IntegratedCircuit { /// brdns d? a(r?|num) fn execute_brdns( &mut self, - vm: &crate::vm::VM, d: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -476,7 +428,6 @@ pub trait BrdseInstruction: IntegratedCircuit { /// brdse d? a(r?|num) fn execute_brdse( &mut self, - vm: &crate::vm::VM, d: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -485,7 +436,6 @@ pub trait BreqInstruction: IntegratedCircuit { /// breq a(r?|num) b(r?|num) c(r?|num) fn execute_breq( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -495,7 +445,6 @@ pub trait BreqzInstruction: IntegratedCircuit { /// breqz a(r?|num) b(r?|num) fn execute_breqz( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -504,7 +453,6 @@ pub trait BrgeInstruction: IntegratedCircuit { /// brge a(r?|num) b(r?|num) c(r?|num) fn execute_brge( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -514,7 +462,6 @@ pub trait BrgezInstruction: IntegratedCircuit { /// brgez a(r?|num) b(r?|num) fn execute_brgez( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -523,7 +470,6 @@ pub trait BrgtInstruction: IntegratedCircuit { /// brgt a(r?|num) b(r?|num) c(r?|num) fn execute_brgt( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -533,7 +479,6 @@ pub trait BrgtzInstruction: IntegratedCircuit { /// brgtz a(r?|num) b(r?|num) fn execute_brgtz( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -542,7 +487,6 @@ pub trait BrleInstruction: IntegratedCircuit { /// brle a(r?|num) b(r?|num) c(r?|num) fn execute_brle( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -552,7 +496,6 @@ pub trait BrlezInstruction: IntegratedCircuit { /// brlez a(r?|num) b(r?|num) fn execute_brlez( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -561,7 +504,6 @@ pub trait BrltInstruction: IntegratedCircuit { /// brlt a(r?|num) b(r?|num) c(r?|num) fn execute_brlt( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -571,7 +513,6 @@ pub trait BrltzInstruction: IntegratedCircuit { /// brltz a(r?|num) b(r?|num) fn execute_brltz( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -580,7 +521,6 @@ pub trait BrnaInstruction: IntegratedCircuit { /// brna a(r?|num) b(r?|num) c(r?|num) d(r?|num) fn execute_brna( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -591,7 +531,6 @@ pub trait BrnanInstruction: IntegratedCircuit { /// brnan a(r?|num) b(r?|num) fn execute_brnan( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -600,7 +539,6 @@ pub trait BrnazInstruction: IntegratedCircuit { /// brnaz a(r?|num) b(r?|num) c(r?|num) fn execute_brnaz( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -610,7 +548,6 @@ pub trait BrneInstruction: IntegratedCircuit { /// brne a(r?|num) b(r?|num) c(r?|num) fn execute_brne( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, c: &crate::vm::instructions::operands::Operand, @@ -620,7 +557,6 @@ pub trait BrnezInstruction: IntegratedCircuit { /// brnez a(r?|num) b(r?|num) fn execute_brnez( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -629,7 +565,6 @@ pub trait CeilInstruction: IntegratedCircuit { /// ceil r? a(r?|num) fn execute_ceil( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -638,7 +573,6 @@ pub trait ClrInstruction: IntegratedCircuit { /// clr d? fn execute_clr( &mut self, - vm: &crate::vm::VM, d: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; } @@ -646,7 +580,6 @@ pub trait ClrdInstruction: IntegratedCircuit { /// clrd id(r?|num) fn execute_clrd( &mut self, - vm: &crate::vm::VM, id: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; } @@ -654,7 +587,6 @@ pub trait CosInstruction: IntegratedCircuit { /// cos r? a(r?|num) fn execute_cos( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -663,7 +595,6 @@ pub trait DefineInstruction: IntegratedCircuit { /// define str num fn execute_define( &mut self, - vm: &crate::vm::VM, string: &crate::vm::instructions::operands::Operand, num: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -672,7 +603,6 @@ pub trait DivInstruction: IntegratedCircuit { /// div r? a(r?|num) b(r?|num) fn execute_div( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -682,7 +612,6 @@ pub trait ExpInstruction: IntegratedCircuit { /// exp r? a(r?|num) fn execute_exp( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -691,7 +620,6 @@ pub trait FloorInstruction: IntegratedCircuit { /// floor r? a(r?|num) fn execute_floor( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -700,7 +628,6 @@ pub trait GetInstruction: IntegratedCircuit { /// get r? d? address(r?|num) fn execute_get( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, d: &crate::vm::instructions::operands::Operand, address: &crate::vm::instructions::operands::Operand, @@ -710,7 +637,6 @@ pub trait GetdInstruction: IntegratedCircuit { /// getd r? id(r?|num) address(r?|num) fn execute_getd( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, id: &crate::vm::instructions::operands::Operand, address: &crate::vm::instructions::operands::Operand, @@ -718,13 +644,12 @@ pub trait GetdInstruction: IntegratedCircuit { } pub trait HcfInstruction: IntegratedCircuit { /// hcf - fn execute_hcf(&mut self, vm: &crate::vm::VM) -> Result<(), crate::errors::ICError>; + fn execute_hcf(&mut self) -> Result<(), crate::errors::ICError>; } pub trait JInstruction: IntegratedCircuit { /// j int fn execute_j( &mut self, - vm: &crate::vm::VM, int: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; } @@ -732,7 +657,6 @@ pub trait JalInstruction: IntegratedCircuit { /// jal int fn execute_jal( &mut self, - vm: &crate::vm::VM, int: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; } @@ -740,7 +664,6 @@ pub trait JrInstruction: IntegratedCircuit { /// jr int fn execute_jr( &mut self, - vm: &crate::vm::VM, int: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; } @@ -748,7 +671,6 @@ pub trait LInstruction: IntegratedCircuit { /// l r? d? logicType fn execute_l( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, d: &crate::vm::instructions::operands::Operand, logic_type: &crate::vm::instructions::operands::Operand, @@ -758,7 +680,6 @@ pub trait LabelInstruction: IntegratedCircuit { /// label d? str fn execute_label( &mut self, - vm: &crate::vm::VM, d: &crate::vm::instructions::operands::Operand, string: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -767,7 +688,6 @@ pub trait LbInstruction: IntegratedCircuit { /// lb r? deviceHash logicType batchMode fn execute_lb( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, device_hash: &crate::vm::instructions::operands::Operand, logic_type: &crate::vm::instructions::operands::Operand, @@ -778,7 +698,6 @@ pub trait LbnInstruction: IntegratedCircuit { /// lbn r? deviceHash nameHash logicType batchMode fn execute_lbn( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, device_hash: &crate::vm::instructions::operands::Operand, name_hash: &crate::vm::instructions::operands::Operand, @@ -790,7 +709,6 @@ pub trait LbnsInstruction: IntegratedCircuit { /// lbns r? deviceHash nameHash slotIndex logicSlotType batchMode fn execute_lbns( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, device_hash: &crate::vm::instructions::operands::Operand, name_hash: &crate::vm::instructions::operands::Operand, @@ -803,7 +721,6 @@ pub trait LbsInstruction: IntegratedCircuit { /// lbs r? deviceHash slotIndex logicSlotType batchMode fn execute_lbs( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, device_hash: &crate::vm::instructions::operands::Operand, slot_index: &crate::vm::instructions::operands::Operand, @@ -815,7 +732,6 @@ pub trait LdInstruction: IntegratedCircuit { /// ld r? id(r?|num) logicType fn execute_ld( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, id: &crate::vm::instructions::operands::Operand, logic_type: &crate::vm::instructions::operands::Operand, @@ -825,7 +741,6 @@ pub trait LogInstruction: IntegratedCircuit { /// log r? a(r?|num) fn execute_log( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -834,7 +749,6 @@ pub trait LrInstruction: IntegratedCircuit { /// lr r? d? reagentMode int fn execute_lr( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, d: &crate::vm::instructions::operands::Operand, reagent_mode: &crate::vm::instructions::operands::Operand, @@ -845,7 +759,6 @@ pub trait LsInstruction: IntegratedCircuit { /// ls r? d? slotIndex logicSlotType fn execute_ls( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, d: &crate::vm::instructions::operands::Operand, slot_index: &crate::vm::instructions::operands::Operand, @@ -856,7 +769,6 @@ pub trait MaxInstruction: IntegratedCircuit { /// max r? a(r?|num) b(r?|num) fn execute_max( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -866,7 +778,6 @@ pub trait MinInstruction: IntegratedCircuit { /// min r? a(r?|num) b(r?|num) fn execute_min( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -876,7 +787,6 @@ pub trait ModInstruction: IntegratedCircuit { /// mod r? a(r?|num) b(r?|num) fn execute_mod( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -886,7 +796,6 @@ pub trait MoveInstruction: IntegratedCircuit { /// move r? a(r?|num) fn execute_move( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -895,7 +804,6 @@ pub trait MulInstruction: IntegratedCircuit { /// mul r? a(r?|num) b(r?|num) fn execute_mul( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -905,7 +813,6 @@ pub trait NorInstruction: IntegratedCircuit { /// nor r? a(r?|num) b(r?|num) fn execute_nor( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -915,7 +822,6 @@ pub trait NotInstruction: IntegratedCircuit { /// not r? a(r?|num) fn execute_not( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -924,7 +830,6 @@ pub trait OrInstruction: IntegratedCircuit { /// or r? a(r?|num) b(r?|num) fn execute_or( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -934,7 +839,6 @@ pub trait PeekInstruction: IntegratedCircuit { /// peek r? fn execute_peek( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; } @@ -942,7 +846,6 @@ pub trait PokeInstruction: IntegratedCircuit { /// poke address(r?|num) value(r?|num) fn execute_poke( &mut self, - vm: &crate::vm::VM, address: &crate::vm::instructions::operands::Operand, value: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -951,7 +854,6 @@ pub trait PopInstruction: IntegratedCircuit { /// pop r? fn execute_pop( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; } @@ -959,7 +861,6 @@ pub trait PushInstruction: IntegratedCircuit { /// push a(r?|num) fn execute_push( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; } @@ -967,7 +868,6 @@ pub trait PutInstruction: IntegratedCircuit { /// put d? address(r?|num) value(r?|num) fn execute_put( &mut self, - vm: &crate::vm::VM, d: &crate::vm::instructions::operands::Operand, address: &crate::vm::instructions::operands::Operand, value: &crate::vm::instructions::operands::Operand, @@ -977,7 +877,6 @@ pub trait PutdInstruction: IntegratedCircuit { /// putd id(r?|num) address(r?|num) value(r?|num) fn execute_putd( &mut self, - vm: &crate::vm::VM, id: &crate::vm::instructions::operands::Operand, address: &crate::vm::instructions::operands::Operand, value: &crate::vm::instructions::operands::Operand, @@ -987,7 +886,6 @@ pub trait RandInstruction: IntegratedCircuit { /// rand r? fn execute_rand( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; } @@ -995,7 +893,6 @@ pub trait RoundInstruction: IntegratedCircuit { /// round r? a(r?|num) fn execute_round( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -1004,7 +901,6 @@ pub trait SInstruction: IntegratedCircuit { /// s d? logicType r? fn execute_s( &mut self, - vm: &crate::vm::VM, d: &crate::vm::instructions::operands::Operand, logic_type: &crate::vm::instructions::operands::Operand, r: &crate::vm::instructions::operands::Operand, @@ -1014,7 +910,6 @@ pub trait SapInstruction: IntegratedCircuit { /// sap r? a(r?|num) b(r?|num) c(r?|num) fn execute_sap( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -1025,7 +920,6 @@ pub trait SapzInstruction: IntegratedCircuit { /// sapz r? a(r?|num) b(r?|num) fn execute_sapz( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -1035,7 +929,6 @@ pub trait SbInstruction: IntegratedCircuit { /// sb deviceHash logicType r? fn execute_sb( &mut self, - vm: &crate::vm::VM, device_hash: &crate::vm::instructions::operands::Operand, logic_type: &crate::vm::instructions::operands::Operand, r: &crate::vm::instructions::operands::Operand, @@ -1045,7 +938,6 @@ pub trait SbnInstruction: IntegratedCircuit { /// sbn deviceHash nameHash logicType r? fn execute_sbn( &mut self, - vm: &crate::vm::VM, device_hash: &crate::vm::instructions::operands::Operand, name_hash: &crate::vm::instructions::operands::Operand, logic_type: &crate::vm::instructions::operands::Operand, @@ -1056,7 +948,6 @@ pub trait SbsInstruction: IntegratedCircuit { /// sbs deviceHash slotIndex logicSlotType r? fn execute_sbs( &mut self, - vm: &crate::vm::VM, device_hash: &crate::vm::instructions::operands::Operand, slot_index: &crate::vm::instructions::operands::Operand, logic_slot_type: &crate::vm::instructions::operands::Operand, @@ -1067,7 +958,6 @@ pub trait SdInstruction: IntegratedCircuit { /// sd id(r?|num) logicType r? fn execute_sd( &mut self, - vm: &crate::vm::VM, id: &crate::vm::instructions::operands::Operand, logic_type: &crate::vm::instructions::operands::Operand, r: &crate::vm::instructions::operands::Operand, @@ -1077,7 +967,6 @@ pub trait SdnsInstruction: IntegratedCircuit { /// sdns r? d? fn execute_sdns( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, d: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -1086,7 +975,6 @@ pub trait SdseInstruction: IntegratedCircuit { /// sdse r? d? fn execute_sdse( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, d: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -1095,7 +983,6 @@ pub trait SelectInstruction: IntegratedCircuit { /// select r? a(r?|num) b(r?|num) c(r?|num) fn execute_select( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -1106,7 +993,6 @@ pub trait SeqInstruction: IntegratedCircuit { /// seq r? a(r?|num) b(r?|num) fn execute_seq( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -1116,7 +1002,6 @@ pub trait SeqzInstruction: IntegratedCircuit { /// seqz r? a(r?|num) fn execute_seqz( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -1125,7 +1010,6 @@ pub trait SgeInstruction: IntegratedCircuit { /// sge r? a(r?|num) b(r?|num) fn execute_sge( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -1135,7 +1019,6 @@ pub trait SgezInstruction: IntegratedCircuit { /// sgez r? a(r?|num) fn execute_sgez( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -1144,7 +1027,6 @@ pub trait SgtInstruction: IntegratedCircuit { /// sgt r? a(r?|num) b(r?|num) fn execute_sgt( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -1154,7 +1036,6 @@ pub trait SgtzInstruction: IntegratedCircuit { /// sgtz r? a(r?|num) fn execute_sgtz( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -1163,7 +1044,6 @@ pub trait SinInstruction: IntegratedCircuit { /// sin r? a(r?|num) fn execute_sin( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -1172,7 +1052,6 @@ pub trait SlaInstruction: IntegratedCircuit { /// sla r? a(r?|num) b(r?|num) fn execute_sla( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -1182,7 +1061,6 @@ pub trait SleInstruction: IntegratedCircuit { /// sle r? a(r?|num) b(r?|num) fn execute_sle( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -1192,7 +1070,6 @@ pub trait SleepInstruction: IntegratedCircuit { /// sleep a(r?|num) fn execute_sleep( &mut self, - vm: &crate::vm::VM, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; } @@ -1200,7 +1077,6 @@ pub trait SlezInstruction: IntegratedCircuit { /// slez r? a(r?|num) fn execute_slez( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -1209,7 +1085,6 @@ pub trait SllInstruction: IntegratedCircuit { /// sll r? a(r?|num) b(r?|num) fn execute_sll( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -1219,7 +1094,6 @@ pub trait SltInstruction: IntegratedCircuit { /// slt r? a(r?|num) b(r?|num) fn execute_slt( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -1229,7 +1103,6 @@ pub trait SltzInstruction: IntegratedCircuit { /// sltz r? a(r?|num) fn execute_sltz( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -1238,7 +1111,6 @@ pub trait SnaInstruction: IntegratedCircuit { /// sna r? a(r?|num) b(r?|num) c(r?|num) fn execute_sna( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -1249,7 +1121,6 @@ pub trait SnanInstruction: IntegratedCircuit { /// snan r? a(r?|num) fn execute_snan( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -1258,7 +1129,6 @@ pub trait SnanzInstruction: IntegratedCircuit { /// snanz r? a(r?|num) fn execute_snanz( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -1267,7 +1137,6 @@ pub trait SnazInstruction: IntegratedCircuit { /// snaz r? a(r?|num) b(r?|num) fn execute_snaz( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -1277,7 +1146,6 @@ pub trait SneInstruction: IntegratedCircuit { /// sne r? a(r?|num) b(r?|num) fn execute_sne( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -1287,7 +1155,6 @@ pub trait SnezInstruction: IntegratedCircuit { /// snez r? a(r?|num) fn execute_snez( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -1296,7 +1163,6 @@ pub trait SqrtInstruction: IntegratedCircuit { /// sqrt r? a(r?|num) fn execute_sqrt( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -1305,7 +1171,6 @@ pub trait SraInstruction: IntegratedCircuit { /// sra r? a(r?|num) b(r?|num) fn execute_sra( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -1315,7 +1180,6 @@ pub trait SrlInstruction: IntegratedCircuit { /// srl r? a(r?|num) b(r?|num) fn execute_srl( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -1325,7 +1189,6 @@ pub trait SsInstruction: IntegratedCircuit { /// ss d? slotIndex logicSlotType r? fn execute_ss( &mut self, - vm: &crate::vm::VM, d: &crate::vm::instructions::operands::Operand, slot_index: &crate::vm::instructions::operands::Operand, logic_slot_type: &crate::vm::instructions::operands::Operand, @@ -1336,7 +1199,6 @@ pub trait SubInstruction: IntegratedCircuit { /// sub r? a(r?|num) b(r?|num) fn execute_sub( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -1346,7 +1208,6 @@ pub trait TanInstruction: IntegratedCircuit { /// tan r? a(r?|num) fn execute_tan( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -1355,7 +1216,6 @@ pub trait TruncInstruction: IntegratedCircuit { /// trunc r? a(r?|num) fn execute_trunc( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, ) -> Result<(), crate::errors::ICError>; @@ -1364,7 +1224,6 @@ pub trait XorInstruction: IntegratedCircuit { /// xor r? a(r?|num) b(r?|num) fn execute_xor( &mut self, - vm: &crate::vm::VM, r: &crate::vm::instructions::operands::Operand, a: &crate::vm::instructions::operands::Operand, b: &crate::vm::instructions::operands::Operand, @@ -1372,7 +1231,7 @@ pub trait XorInstruction: IntegratedCircuit { } pub trait YieldInstruction: IntegratedCircuit { /// yield - fn execute_yield(&mut self, vm: &crate::vm::VM) -> Result<(), crate::errors::ICError>; + fn execute_yield(&mut self) -> Result<(), crate::errors::ICError>; } pub trait ICInstructable: AbsInstruction diff --git a/ic10emu/src/vm/object.rs b/ic10emu/src/vm/object.rs index f8ff659..a535ca7 100644 --- a/ic10emu/src/vm/object.rs +++ b/ic10emu/src/vm/object.rs @@ -47,13 +47,11 @@ impl DerefMut for VMObject { } impl VMObject { - pub fn new(val: T, vm: Rc) -> Self + pub fn new(val: T) -> Self where T: Object + 'static, { - let mut obj = VMObject(Rc::new(RefCell::new(val))); - obj.set_vm(vm); - obj + VMObject(Rc::new(RefCell::new(val))) } pub fn set_vm(&mut self, vm: Rc) { @@ -61,11 +59,7 @@ impl VMObject { } pub fn get_vm(&self) -> Rc { - self - .borrow() - .get_vm() - .expect("VMObject with no VM?") - .clone() + self.borrow().get_vm().clone() } } diff --git a/ic10emu/src/vm/object/generic/structs.rs b/ic10emu/src/vm/object/generic/structs.rs index 01dd8c8..93e74b0 100644 --- a/ic10emu/src/vm/object/generic/structs.rs +++ b/ic10emu/src/vm/object/generic/structs.rs @@ -1,11 +1,18 @@ use super::{macros::*, traits::*}; -use crate::{network::Connection, vm::{ - enums::script_enums::LogicType, - object::{ - macros::ObjectInterface, templates::{DeviceInfo, ItemInfo}, traits::*, LogicField, Name, ObjectID, Slot, - }, VM, -}}; +use crate::{ + network::Connection, + vm::{ + enums::script_enums::LogicType, + object::{ + macros::ObjectInterface, + templates::{DeviceInfo, ItemInfo}, + traits::*, + LogicField, Name, ObjectID, Slot, + }, + VM, + }, +}; use macro_rules_attribute::derive; use std::{collections::BTreeMap, rc::Rc}; @@ -19,7 +26,7 @@ pub struct Generic { #[custom(object_name)] pub name: Name, #[custom(object_vm_ref)] - pub vm: Option>, + pub vm: Rc, pub small_grid: bool, } @@ -33,7 +40,7 @@ pub struct GenericStorage { #[custom(object_name)] pub name: Name, #[custom(object_vm_ref)] - pub vm: Option>, + pub vm: Rc, pub small_grid: bool, pub slots: Vec, } @@ -48,7 +55,7 @@ pub struct GenericLogicable { #[custom(object_name)] pub name: Name, #[custom(object_vm_ref)] - pub vm: Option>, + pub vm: Rc, pub small_grid: bool, pub slots: Vec, pub fields: BTreeMap, @@ -65,7 +72,7 @@ pub struct GenericLogicableDevice { #[custom(object_name)] pub name: Name, #[custom(object_vm_ref)] - pub vm: Option>, + pub vm: Rc, pub small_grid: bool, pub slots: Vec, pub fields: BTreeMap, @@ -85,7 +92,7 @@ pub struct GenericLogicableDeviceMemoryReadable { #[custom(object_name)] pub name: Name, #[custom(object_vm_ref)] - pub vm: Option>, + pub vm: Rc, pub small_grid: bool, pub slots: Vec, pub fields: BTreeMap, @@ -106,7 +113,7 @@ pub struct GenericLogicableDeviceMemoryReadWriteable { #[custom(object_name)] pub name: Name, #[custom(object_vm_ref)] - pub vm: Option>, + pub vm: Rc, pub small_grid: bool, pub slots: Vec, pub fields: BTreeMap, @@ -127,7 +134,7 @@ pub struct GenericItem { #[custom(object_name)] pub name: Name, #[custom(object_vm_ref)] - pub vm: Option>, + pub vm: Rc, pub item_info: ItemInfo, pub parent_slot: Option, } @@ -142,7 +149,7 @@ pub struct GenericItemStorage { #[custom(object_name)] pub name: Name, #[custom(object_vm_ref)] - pub vm: Option>, + pub vm: Rc, pub item_info: ItemInfo, pub parent_slot: Option, pub slots: Vec, @@ -158,7 +165,7 @@ pub struct GenericItemLogicable { #[custom(object_name)] pub name: Name, #[custom(object_vm_ref)] - pub vm: Option>, + pub vm: Rc, pub item_info: ItemInfo, pub parent_slot: Option, pub slots: Vec, @@ -176,7 +183,7 @@ pub struct GenericItemLogicableMemoryReadable { #[custom(object_name)] pub name: Name, #[custom(object_vm_ref)] - pub vm: Option>, + pub vm: Rc, pub item_info: ItemInfo, pub parent_slot: Option, pub slots: Vec, @@ -195,7 +202,7 @@ pub struct GenericItemLogicableMemoryReadWriteable { #[custom(object_name)] pub name: Name, #[custom(object_vm_ref)] - pub vm: Option>, + pub vm: Rc, pub item_info: ItemInfo, pub parent_slot: Option, pub slots: Vec, diff --git a/ic10emu/src/vm/object/macros.rs b/ic10emu/src/vm/object/macros.rs index bc9ba1e..825506f 100644 --- a/ic10emu/src/vm/object/macros.rs +++ b/ic10emu/src/vm/object/macros.rs @@ -14,7 +14,7 @@ macro_rules! object_trait { 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) -> Option<&std::rc::Rc>; + 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; @@ -82,7 +82,7 @@ pub(crate) use object_trait; /// /// - `id` must be `crate::vm::object::ObjectID` /// - `prefab` and `name` must be `crate::vm::object::Name` -/// - `vm_ref` must be `Option>` +/// - `vm_ref` must be `std::rc::Rc` macro_rules! ObjectInterface { { @body_final @@ -119,12 +119,12 @@ macro_rules! ObjectInterface { &mut self.$name_field } - fn get_vm(&self) -> Option<&std::rc::Rc> { - self.$vm_ref_field.as_ref() + fn get_vm(&self) -> &std::rc::Rc { + &self.$vm_ref_field } fn set_vm(&mut self, vm: std::rc::Rc) { - self.$vm_ref_field = Some(vm); + self.$vm_ref_field = vm; } fn type_name(&self) -> &str { diff --git a/ic10emu/src/vm/object/stationpedia.rs b/ic10emu/src/vm/object/stationpedia.rs index 6c1a9b9..39fca00 100644 --- a/ic10emu/src/vm/object/stationpedia.rs +++ b/ic10emu/src/vm/object/stationpedia.rs @@ -1,7 +1,7 @@ use std::rc::Rc; -use crate::vm::{enums::prefabs::StationpediaPrefab, VM}; use crate::vm::object::VMObject; +use crate::vm::{enums::prefabs::StationpediaPrefab, VM}; use super::templates::ObjectTemplate; use super::ObjectID; @@ -9,7 +9,11 @@ use super::ObjectID; pub mod structs; #[allow(unused)] -pub fn object_from_prefab_template(template: &ObjectTemplate, id: ObjectID, vm: Rc) -> Option { +pub fn object_from_prefab_template( + template: &ObjectTemplate, + id: ObjectID, + vm: &Rc, +) -> Option { let prefab = StationpediaPrefab::from_repr(template.prefab_info().prefab_hash); match prefab { // Some(StationpediaPrefab::ItemIntegratedCircuit10) => { diff --git a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs index bc40db8..7a22d7a 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs @@ -155,7 +155,7 @@ pub struct ItemIntegratedCircuit10 { #[custom(object_name)] pub name: Name, #[custom(object_vm_ref)] - pub vm: Option>, + pub vm: Rc, pub fields: BTreeMap, pub memory: [f64; 512], pub parent_slot: Option, @@ -1388,9 +1388,9 @@ impl BrnazInstruction for ItemIntegratedCircuit10 { impl BdseInstruction for ItemIntegratedCircuit10 { /// bdse d? a(r?|num) fn execute_bdse(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError> { - let (device, _connection) = d.as_device(self, InstructionOp::Bdse, 1)?; + let (device_id, _connection) = d.as_device(self, InstructionOp::Bdse, 1)?; let a = a.as_value(self, InstructionOp::Bdse, 2)?; - if device.is_some() { + if let Some(device_id) = device_id { // FIXME: collect device and get logicable self.set_next_instruction(a); } diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index b1e93df..aa3da93 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -73,11 +73,11 @@ impl ObjectTemplate { } } - pub fn build(&self, id: ObjectID, vm: Rc) -> VMObject { + pub fn build(&self, id: ObjectID, vm: &Rc) -> VMObject { if let Some(obj) = stationpedia::object_from_prefab_template(&self, id, vm) { obj } else { - self.build_generic(id, vm) + self.build_generic(id, vm.clone()) } } @@ -198,335 +198,206 @@ impl ObjectTemplate { fn build_generic(&self, id: ObjectID, vm: Rc) -> VMObject { use ObjectTemplate::*; match self { - Structure(s) => VMObject::new( - Generic { - id, - prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.prefab.name), - vm: None, - small_grid: s.structure.small_grid, - }, - vm.clone(), - ), - StructureSlots(s) => VMObject::new( - GenericStorage { - id, - prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.prefab.name), - vm: None, - small_grid: s.structure.small_grid, - slots: s - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: Vec::new(), - writeable_logic: Vec::new(), - occupant: None, - }) - .collect(), - }, - vm.clone(), - ), - StructureLogic(s) => VMObject::new( - GenericLogicable { - id, - prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.prefab.name), - vm: None, - small_grid: s.structure.small_grid, - slots: s - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Read | MemoryAccess::ReadWrite => { - Some(key) - } - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(|| Vec::new()), - writeable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Write | MemoryAccess::ReadWrite => { - Some(key) - } - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(|| Vec::new()), - occupant: None, - }) - .collect(), - fields: s - .logic - .logic_types - .types - .iter() - .map(|(key, access)| { - ( - *key, - LogicField { - field_type: *access, - value: s - .logic - .logic_values - .map(|values| values.get(key)) - .flatten() - .copied() - .unwrap_or(0.0), - }, - ) - }) - .collect(), - modes: s.logic.modes.clone(), - }, - vm.clone(), - ), - StructureLogicDevice(s) => VMObject::new( - GenericLogicableDevice { - id, - prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.prefab.name), - vm: None, - small_grid: s.structure.small_grid, - slots: s - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Read | MemoryAccess::ReadWrite => { - Some(key) - } - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(|| Vec::new()), - writeable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Write | MemoryAccess::ReadWrite => { - Some(key) - } - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(|| Vec::new()), - occupant: None, - }) - .collect(), - fields: s - .logic - .logic_types - .types - .iter() - .map(|(key, access)| { - ( - *key, - LogicField { - field_type: *access, - value: s - .logic - .logic_values - .map(|values| values.get(key)) - .flatten() - .copied() - .unwrap_or(0.0), - }, - ) - }) - .collect(), - modes: s.logic.modes.clone(), - connections: s - .device - .connection_list - .iter() - .map(|conn_info| { - Connection::from_info(conn_info.typ, conn_info.role, conn_info.network) - }) - .collect(), - pins: s - .device - .device_pins - .map(|pins| Some(pins.clone())) - .unwrap_or_else(|| { - s.device - .device_pins_length - .map(|pins_len| vec![None; pins_len]) - }), - device_info: s.device.clone(), - }, - vm.clone(), - ), + Structure(s) => VMObject::new(Generic { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&s.prefab.name), + vm, + small_grid: s.structure.small_grid, + }), + StructureSlots(s) => VMObject::new(GenericStorage { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&s.prefab.name), + vm, + small_grid: s.structure.small_grid, + slots: s + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: Vec::new(), + writeable_logic: Vec::new(), + occupant: None, + }) + .collect(), + }), + StructureLogic(s) => VMObject::new(GenericLogicable { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&s.prefab.name), + vm, + small_grid: s.structure.small_grid, + slots: s + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Read | MemoryAccess::ReadWrite => Some(key), + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + writeable_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Write | MemoryAccess::ReadWrite => Some(key), + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), + fields: s + .logic + .logic_types + .types + .iter() + .map(|(key, access)| { + ( + *key, + LogicField { + field_type: *access, + value: s + .logic + .logic_values + .map(|values| values.get(key)) + .flatten() + .copied() + .unwrap_or(0.0), + }, + ) + }) + .collect(), + modes: s.logic.modes.clone(), + }), + StructureLogicDevice(s) => VMObject::new(GenericLogicableDevice { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&s.prefab.name), + vm, + small_grid: s.structure.small_grid, + slots: s + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Read | MemoryAccess::ReadWrite => Some(key), + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + writeable_logic: s + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Write | MemoryAccess::ReadWrite => Some(key), + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), + fields: s + .logic + .logic_types + .types + .iter() + .map(|(key, access)| { + ( + *key, + LogicField { + field_type: *access, + value: s + .logic + .logic_values + .map(|values| values.get(key)) + .flatten() + .copied() + .unwrap_or(0.0), + }, + ) + }) + .collect(), + modes: s.logic.modes.clone(), + connections: s + .device + .connection_list + .iter() + .map(|conn_info| { + Connection::from_info(conn_info.typ, conn_info.role, conn_info.network) + }) + .collect(), + pins: s + .device + .device_pins + .map(|pins| Some(pins.clone())) + .unwrap_or_else(|| { + s.device + .device_pins_length + .map(|pins_len| vec![None; pins_len]) + }), + device_info: s.device.clone(), + }), StructureLogicDeviceMemory(s) if matches!(s.memory.memory_access, MemoryAccess::Read) => { - VMObject::new( - GenericLogicableDeviceMemoryReadable { - id, - prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.prefab.name), - vm: None, - small_grid: s.structure.small_grid, - slots: s - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Read | MemoryAccess::ReadWrite => { - Some(key) - } - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(|| Vec::new()), - writeable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Write | MemoryAccess::ReadWrite => { - Some(key) - } - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(|| Vec::new()), - occupant: None, - }) - .collect(), - fields: s - .logic - .logic_types - .types - .iter() - .map(|(key, access)| { - ( - *key, - LogicField { - field_type: *access, - value: s - .logic - .logic_values - .map(|values| values.get(key)) - .flatten() - .copied() - .unwrap_or(0.0), - }, - ) - }) - .collect(), - modes: s.logic.modes.clone(), - connections: s - .device - .connection_list - .iter() - .map(|conn_info| { - Connection::from_info( - conn_info.typ, - conn_info.role, - conn_info.network, - ) - }) - .collect(), - pins: s - .device - .device_pins - .map(|pins| Some(pins.clone())) - .unwrap_or_else(|| { - s.device - .device_pins_length - .map(|pins_len| vec![None; pins_len]) - }), - device_info: s.device.clone(), - memory: s - .memory - .values - .clone() - .unwrap_or_else(|| vec![0.0; s.memory.memory_size as usize]), - }, - vm.clone(), - ) - } - StructureLogicDeviceMemory(s) => VMObject::new( - GenericLogicableDeviceMemoryReadWriteable { + VMObject::new(GenericLogicableDeviceMemoryReadable { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), name: Name::new(&s.prefab.name), - vm: None, + vm, small_grid: s.structure.small_grid, slots: s .slots @@ -621,29 +492,16 @@ impl ObjectTemplate { .values .clone() .unwrap_or_else(|| vec![0.0; s.memory.memory_size as usize]), - }, - vm.clone(), - ), - Item(i) => VMObject::new( - GenericItem { + }) + } + StructureLogicDeviceMemory(s) => { + VMObject::new(GenericLogicableDeviceMemoryReadWriteable { id, - prefab: Name::from_prefab_name(&i.prefab.prefab_name), - name: Name::new(&i.prefab.name), - vm: None, - item_info: i.item.clone(), - parent_slot: None, - }, - vm.clone(), - ), - ItemSlots(i) => VMObject::new( - GenericItemStorage { - id, - prefab: Name::from_prefab_name(&i.prefab.prefab_name), - name: Name::new(&i.prefab.name), - vm: None, - item_info: i.item.clone(), - parent_slot: None, - slots: i + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&s.prefab.name), + vm, + small_grid: s.structure.small_grid, + slots: s .slots .iter() .enumerate() @@ -652,32 +510,7 @@ impl ObjectTemplate { index, name: info.name.clone(), typ: info.typ, - readable_logic: Vec::new(), - writeable_logic: Vec::new(), - occupant: None, - }) - .collect(), - }, - vm.clone(), - ), - ItemLogic(i) => VMObject::new( - GenericItemLogicable { - id, - prefab: Name::from_prefab_name(&i.prefab.prefab_name), - name: Name::new(&i.prefab.name), - vm: None, - item_info: i.item.clone(), - parent_slot: None, - slots: i - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: i + readable_logic: s .logic .logic_slot_types .get(&(index as u32)) @@ -695,7 +528,7 @@ impl ObjectTemplate { .collect::>() }) .unwrap_or_else(|| Vec::new()), - writeable_logic: i + writeable_logic: s .logic .logic_slot_types .get(&(index as u32)) @@ -716,7 +549,7 @@ impl ObjectTemplate { occupant: None, }) .collect(), - fields: i + fields: s .logic .logic_types .types @@ -726,7 +559,7 @@ impl ObjectTemplate { *key, LogicField { field_type: *access, - value: i + value: s .logic .logic_values .map(|values| values.get(key)) @@ -737,104 +570,142 @@ impl ObjectTemplate { ) }) .collect(), - modes: i.logic.modes.clone(), - }, - vm.clone(), - ), - ItemLogicMemory(i) if matches!(i.memory.memory_access, MemoryAccess::Read) => { - VMObject::new( - GenericItemLogicableMemoryReadable { - id, - prefab: Name::from_prefab_name(&i.prefab.prefab_name), - name: Name::new(&i.prefab.name), - vm: None, - item_info: i.item.clone(), - parent_slot: None, - slots: i - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: i - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Read | MemoryAccess::ReadWrite => { - Some(key) - } - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(|| Vec::new()), - writeable_logic: i - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Write | MemoryAccess::ReadWrite => { - Some(key) - } - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(|| Vec::new()), - occupant: None, - }) - .collect(), - fields: i - .logic - .logic_types - .types - .iter() - .map(|(key, access)| { - ( - *key, - LogicField { - field_type: *access, - value: i - .logic - .logic_values - .map(|values| values.get(key)) - .flatten() - .copied() - .unwrap_or(0.0), - }, - ) - }) - .collect(), - modes: i.logic.modes.clone(), - memory: i - .memory - .values - .clone() - .unwrap_or_else(|| vec![0.0; i.memory.memory_size as usize]), - }, - vm.clone(), - ) + modes: s.logic.modes.clone(), + connections: s + .device + .connection_list + .iter() + .map(|conn_info| { + Connection::from_info(conn_info.typ, conn_info.role, conn_info.network) + }) + .collect(), + pins: s + .device + .device_pins + .map(|pins| Some(pins.clone())) + .unwrap_or_else(|| { + s.device + .device_pins_length + .map(|pins_len| vec![None; pins_len]) + }), + device_info: s.device.clone(), + memory: s + .memory + .values + .clone() + .unwrap_or_else(|| vec![0.0; s.memory.memory_size as usize]), + }) } - ItemLogicMemory(i) => VMObject::new( - GenericItemLogicableMemoryReadWriteable { + Item(i) => VMObject::new(GenericItem { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&i.prefab.name), + vm, + item_info: i.item.clone(), + parent_slot: None, + }), + ItemSlots(i) => VMObject::new(GenericItemStorage { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&i.prefab.name), + vm, + item_info: i.item.clone(), + parent_slot: None, + slots: i + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: Vec::new(), + writeable_logic: Vec::new(), + occupant: None, + }) + .collect(), + }), + ItemLogic(i) => VMObject::new(GenericItemLogicable { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&i.prefab.name), + vm, + item_info: i.item.clone(), + parent_slot: None, + slots: i + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: i + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Read | MemoryAccess::ReadWrite => Some(key), + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + writeable_logic: i + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Write | MemoryAccess::ReadWrite => Some(key), + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), + fields: i + .logic + .logic_types + .types + .iter() + .map(|(key, access)| { + ( + *key, + LogicField { + field_type: *access, + value: i + .logic + .logic_values + .map(|values| values.get(key)) + .flatten() + .copied() + .unwrap_or(0.0), + }, + ) + }) + .collect(), + modes: i.logic.modes.clone(), + }), + ItemLogicMemory(i) if matches!(i.memory.memory_access, MemoryAccess::Read) => { + VMObject::new(GenericItemLogicableMemoryReadable { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), name: Name::new(&i.prefab.name), - vm: None, + vm, item_info: i.item.clone(), parent_slot: None, slots: i @@ -912,9 +783,87 @@ impl ObjectTemplate { .values .clone() .unwrap_or_else(|| vec![0.0; i.memory.memory_size as usize]), - }, - vm.clone(), - ), + }) + } + ItemLogicMemory(i) => VMObject::new(GenericItemLogicableMemoryReadWriteable { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&i.prefab.name), + vm, + item_info: i.item.clone(), + parent_slot: None, + slots: i + .slots + .iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: i + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Read | MemoryAccess::ReadWrite => Some(key), + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + writeable_logic: i + .logic + .logic_slot_types + .get(&(index as u32)) + .map(|s_info| { + s_info + .slot_types + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Write | MemoryAccess::ReadWrite => Some(key), + _ => None, + }) + .copied() + .collect::>() + }) + .unwrap_or_else(|| Vec::new()), + occupant: None, + }) + .collect(), + fields: i + .logic + .logic_types + .types + .iter() + .map(|(key, access)| { + ( + *key, + LogicField { + field_type: *access, + value: i + .logic + .logic_values + .map(|values| values.get(key)) + .flatten() + .copied() + .unwrap_or(0.0), + }, + ) + }) + .collect(), + modes: i.logic.modes.clone(), + memory: i + .memory + .values + .clone() + .unwrap_or_else(|| vec![0.0; i.memory.memory_size as usize]), + }), } } diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index aa22db6..f0da856 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -1,7 +1,10 @@ use serde_derive::{Deserialize, Serialize}; use crate::{ - errors::ICError, interpreter::ICState, network::Connection, vm::{ + errors::ICError, + interpreter::ICState, + network::Connection, + vm::{ enums::{ basic_enums::{Class as SlotClass, GasType, SortingClass}, script_enums::{LogicSlotType, LogicType}, @@ -13,7 +16,7 @@ use crate::{ ObjectID, Slot, }, VM, - } + }, }; use std::{collections::BTreeMap, fmt::Debug, rc::Rc}; diff --git a/ic10emu_wasm/src/lib.rs b/ic10emu_wasm/src/lib.rs index aa91a4f..5a9ed3d 100644 --- a/ic10emu_wasm/src/lib.rs +++ b/ic10emu_wasm/src/lib.rs @@ -433,7 +433,12 @@ impl VMRef { #[wasm_bindgen(getter)] pub fn ics(&self) -> Vec { - self.vm.borrow().circuit_holders.keys().copied().collect_vec() + self.vm + .borrow() + .circuit_holders + .keys() + .copied() + .collect_vec() } #[wasm_bindgen(getter, js_name = "lastOperationModified")] diff --git a/xtask/src/generate/enums.rs b/xtask/src/generate/enums.rs index b27cf8a..57308c3 100644 --- a/xtask/src/generate/enums.rs +++ b/xtask/src/generate/enums.rs @@ -21,6 +21,12 @@ pub fn generate_enums( std::fs::create_dir(&enums_path)?; } + let basic_enum_names = enums + .basic_enums + .values() + .map(|enm| enm.enum_name.clone()) + .collect::>(); + let mut writer = std::io::BufWriter::new(std::fs::File::create(enums_path.join("script_enums.rs"))?); write_repr_enum_use_header(&mut writer)?; @@ -31,7 +37,20 @@ pub fn generate_enums( let mut writer = std::io::BufWriter::new(std::fs::File::create(enums_path.join("basic_enums.rs"))?); write_repr_enum_use_header(&mut writer)?; + let script_enums_in_basic = enums + .script_enums + .values() + .filter(|enm| basic_enum_names.contains(&enm.enum_name)) + .collect::>(); + let script_enums_in_basic_names = script_enums_in_basic + .iter() + .map(|enm| enm.enum_name.as_str()) + .collect::>(); + write_repr_basic_use_header(&mut writer, script_enums_in_basic.as_slice())?; for enm in enums.basic_enums.values() { + if script_enums_in_basic_names.contains(&enm.enum_name.as_str()) { + continue; + } write_enum_listing(&mut writer, enm)?; } write_enum_aggragate_mod(&mut writer, &enums.basic_enums)?; @@ -346,6 +365,22 @@ fn write_repr_enum_use_header( Ok(()) } +fn write_repr_basic_use_header( + writer: &mut BufWriter, + script_enums: &[&crate::enums::EnumListing], +) -> color_eyre::Result<()> { + write!( + writer, + "use crate::vm::enums::script_enums::{{ {} }};", + script_enums + .iter() + .map(|enm| enm.enum_name.to_case(Case::Pascal)) + .collect::>() + .join(", ") + )?; + Ok(()) +} + fn write_repr_enum<'a, T: std::io::Write, I, P>( writer: &mut BufWriter, name: &str, @@ -362,8 +397,7 @@ where sorted.sort_by_key(|(_, variant)| &variant.value); let default_derive = if sorted .iter() - .find(|(name, _)| name == "None" || name == "Default") - .is_some() + .any(|(name, _)| name == "None" || name == "Default") { "Default, " } else { diff --git a/xtask/src/generate/instructions.rs b/xtask/src/generate/instructions.rs index b359e13..163312a 100644 --- a/xtask/src/generate/instructions.rs +++ b/xtask/src/generate/instructions.rs @@ -90,7 +90,6 @@ fn write_instructions_enum( pub fn execute(\n \ &self,\n \ ic: &mut T,\n \ - vm: &crate::vm::VM,\n \ operands: &[crate::vm::instructions::operands::Operand],\n \ ) -> Result<(), crate::errors::ICError>\n \ where\n \ @@ -114,7 +113,7 @@ fn write_instructions_enum( let trait_name = name.to_case(Case::Pascal); writeln!( writer, - " Self::{trait_name} => ic.execute_{name}(vm, {operands}),", + " Self::{trait_name} => ic.execute_{name}({operands}),", )?; } @@ -154,7 +153,7 @@ fn write_instruction_trait( writer, "pub trait {trait_name}: IntegratedCircuit {{\n \ /// {example} \n \ - fn execute_{name}(&mut self, vm: &crate::vm::VM, {operands}) -> Result<(), crate::errors::ICError>;\n\ + fn execute_{name}(&mut self, {operands}) -> Result<(), crate::errors::ICError>;\n\ }}" )?; Ok(()) From 0c5e2b29a8d879e899661a7c8eb8a7ade432cd39 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Tue, 14 May 2024 23:52:16 -0700 Subject: [PATCH 19/50] refactor(vm): more ic10 instruction impls --- ic10emu/src/errors.rs | 4 +- ic10emu/src/interpreter.rs | 1676 +----------- ic10emu/src/interpreter/instructions.rs | 2262 +++++++++++++++++ ic10emu/src/vm.rs | 4 + ic10emu/src/vm/instructions/operands.rs | 151 +- ic10emu/src/vm/instructions/traits.rs | 1931 +++++++++++++- ic10emu/src/vm/object/errors.rs | 6 +- .../structs/integrated_circuit.rs | 1574 +----------- ic10emu/src/vm/object/traits.rs | 49 +- xtask/src/generate/instructions.rs | 39 +- 10 files changed, 4367 insertions(+), 3329 deletions(-) create mode 100644 ic10emu/src/interpreter/instructions.rs diff --git a/ic10emu/src/errors.rs b/ic10emu/src/errors.rs index da7e76e..491de72 100644 --- a/ic10emu/src/errors.rs +++ b/ic10emu/src/errors.rs @@ -151,7 +151,7 @@ pub enum ICError { #[error("incorrect operand type for instruction `{inst}` operand {index}, not a {desired} ")] IncorrectOperandType { inst: InstructionOp, - index: u32, + index: usize, desired: String, }, #[error("unknown identifier {0}")] @@ -206,6 +206,8 @@ pub enum ICError { NoGeneratedValue(String), #[error("generated Enum {0}'s value does not parse as {1} . Report this error.")] BadGeneratedValueParse(String, String), + #[error("IC with id {0} is not sloted into a circuit holder")] + NoCircuitHolder(ObjectID), } impl ICError { diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index 0dec93f..f2566c8 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -34,6 +34,8 @@ use crate::{ use serde_with::serde_as; +pub mod instructions; + #[derive(Debug, Clone, Serialize, Deserialize)] pub enum ICState { Start, @@ -461,1680 +463,6 @@ impl IC { Clr => Ok(()), // TODO Clrd => Ok(()), // TODO Label => Ok(()), // NOP - 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.circuit_holders.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.circuit_holders.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.circuit_holders.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.circuit_holders.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] => { diff --git a/ic10emu/src/interpreter/instructions.rs b/ic10emu/src/interpreter/instructions.rs new file mode 100644 index 0000000..e7ce18c --- /dev/null +++ b/ic10emu/src/interpreter/instructions.rs @@ -0,0 +1,2262 @@ +use crate::{ + errors::ICError, + interpreter::{i64_to_f64, ICState}, + vm::{ + instructions::{ + operands::{InstOperand, RegisterSpec}, + traits::*, + }, + object::{errors::MemoryError, traits::*, ObjectID}, + }, +}; +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()))? + .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()))? + .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()))? + .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()))? + .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()))? + .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()))? + .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 logicable = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .get_logicable_from_index(device, connection); + self.set_register( + indirection, + target, + if logicable.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 logicable = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .get_logicable_from_index(device, connection); + self.set_register( + indirection, + target, + if logicable.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)?; + let Some(logicable) = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .get_logicable_from_index(device, connection) else { + return Err(ICError::DeviceNotSet); + }; + let Some(memory) = logicable.as_memory_readable() else { + return Err(MemoryError::NotReadable.into()); + }; + self.set_register(indirection, target, memory.get_memory(address as i32)?)?; + 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)?; + let Some(logicable) = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .get_logicable_from_id(id as ObjectID, None) else { + return Err(ICError::UnknownDeviceId(id)); + }; + let Some(memory) = logicable.as_memory_readable() else { + return Err(MemoryError::NotReadable.into()); + }; + self.set_register(indirection, target, memory.get_memory(address as i32)?)?; + 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)?; + let Some(logicable) = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .get_logicable_from_index_mut(device, connection) else { + return Err(ICError::DeviceNotSet); + }; + let Some(memory) = logicable.as_memory_writable() else { + return Err(MemoryError::NotWriteable.into()); + }; + memory.set_memory(address as i32, value)?; + 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)?; + let Some(logicable) = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .get_logicable_from_id_mut(id as ObjectID, None) else { + return Err(ICError::DeviceNotSet); + }; + let Some(memory) = logicable.as_memory_writable() else { + return Err(MemoryError::NotWriteable.into()); + }; + memory.set_memory(address as i32, value)?; + Ok(()) + } +} + +impl ClrInstruction for T { + /// clr d? + fn execute_inner(&mut self, d: &InstOperand) -> Result<(), ICError> { + let (device, connection) = d.as_device(self)?; + let Some(logicable) = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .get_logicable_from_index_mut(device, connection) else { + return Err(ICError::DeviceNotSet); + }; + let Some(memory) = logicable.as_memory_writable() else { + return Err(MemoryError::NotWriteable.into()); + }; + memory.clear_memory()?; + Ok(()) + } +} +impl ClrdInstruction for T { + /// clrd id(r?|num) + fn execute_inner(&mut self, id: &InstOperand) -> Result<(), ICError> { + let id = id.as_value(self)?; + let Some(logicable) = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .get_logicable_from_id_mut(id as ObjectID, None) else { + return Err(ICError::DeviceNotSet); + }; + let Some(memory) = logicable.as_memory_writable() else { + return Err(MemoryError::NotWriteable.into()); + }; + memory.clear_memory()?; + Ok(()) + } +} + +// impl HcfInstruction for T { +// /// hcf +// fn execute_inner(&mut self, vm: &VM) -> Result<(), ICError>; +// } +// impl LInstruction for T { +// /// l r? d? logicType +// fn execute_inner( +// &mut self, +// +// r: &InstOperand, +// d: &InstOperand, +// logic_type: &InstOperand, +// ) -> Result<(), ICError>; +// } +// impl LabelInstruction for T { +// /// label d? str +// fn execute_inner(&mut self, d: &InstOperand, str: &InstOperand) -> Result<(), ICError>; +// } +// 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>; +// } +// 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>; +// } +// 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>; +// } +// 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>; +// } +// impl LdInstruction for T { +// /// ld r? id(r?|num) logicType +// fn execute_inner( +// &mut self, +// +// r: &InstOperand, +// id: &InstOperand, +// logic_type: &InstOperand, +// ) -> Result<(), ICError>; +// } +// impl LogInstruction for T { +// /// log r? a(r?|num) +// fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError>; +// } +// 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>; +// } +// 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>; +// } +// impl SInstruction for T { +// /// s d? logicType r? +// fn execute_inner( +// &mut self, +// +// d: &InstOperand, +// logic_type: &InstOperand, +// r: &InstOperand, +// ) -> Result<(), ICError>; +// } +// impl SbInstruction for T { +// /// sb deviceHash logicType r? +// fn execute_inner( +// &mut self, +// +// device_hash: &InstOperand, +// logic_type: &InstOperand, +// r: &InstOperand, +// ) -> Result<(), ICError>; +// } +// 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>; +// } +// 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>; +// } +// impl SdInstruction for T { +// /// sd id(r?|num) logicType r? +// fn execute_inner( +// &mut self, +// +// id: &InstOperand, +// logic_type: &InstOperand, +// r: &InstOperand, +// ) -> Result<(), ICError>; +// } +// 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>; +// } +// diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index a8e3cb4..e319d2b 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -87,6 +87,10 @@ impl VM { vm } + pub fn random_f64(&self) -> f64 { + self.random.borrow_mut().next_f64() + } + pub fn add_device_from_template( self: &Rc, template: ObjectTemplate, diff --git a/ic10emu/src/vm/instructions/operands.rs b/ic10emu/src/vm/instructions/operands.rs index ac270e2..c951314 100644 --- a/ic10emu/src/vm/instructions/operands.rs +++ b/ic10emu/src/vm/instructions/operands.rs @@ -59,13 +59,55 @@ pub enum Operand { Identifier(Identifier), } -impl Operand { - pub fn as_value( - &self, - ic: &IC, - inst: InstructionOp, - index: u32, - ) -> Result { +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) + } + + 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) + } + + 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, @@ -117,8 +159,8 @@ impl Operand { } Operand::Identifier(id) => Err(ICError::UnknownIdentifier(id.name.to_string())), Operand::DeviceSpec { .. } => Err(ICError::IncorrectOperandType { - inst, - index, + inst: self.inst, + index: self.index, desired: "Value".to_owned(), }), } @@ -128,16 +170,14 @@ impl Operand { &self, ic: &IC, signed: bool, - inst: InstructionOp, - index: u32, ) -> Result { - match self { - Self::Number(num) => Ok(num.value_i64(signed)), + match &self.operand { + Operand::Number(num) => Ok(num.value_i64(signed)), _ => { - let val = self.as_value(ic, inst, index)?; - if val < -9.223_372_036_854_776E18 { + let val = self.as_value(ic)?; + if val < i64::MIN as f64 { Err(ICError::ShiftUnderflowI64) - } else if val <= 9.223_372_036_854_776E18 { + } else if val <= i64::MAX as f64 { Ok(interpreter::f64_to_i64(val, signed)) } else { Err(ICError::ShiftOverflowI64) @@ -149,13 +189,11 @@ impl Operand { &self, ic: &IC, signed: bool, - inst: InstructionOp, - index: u32, ) -> Result { - match self { - Self::Number(num) => Ok(num.value_i64(signed) as i32), + match &self.operand { + Operand::Number(num) => Ok(num.value_i64(signed) as i32), _ => { - let val = self.as_value(ic, inst, index)?; + let val = self.as_value(ic)?; if val < i32::MIN as f64 { Err(ICError::ShiftUnderflowI32) } else if val <= i32::MAX as f64 { @@ -167,112 +205,89 @@ impl Operand { } } - pub fn as_register( - &self, - ic: &IC, - inst: InstructionOp, - index: u32, - ) -> Result { + 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, - index, + 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, - inst: InstructionOp, - index: u32, - ) -> Result<(Option, Option), ICError> { + ) -> Result<(i32, Option), ICError> { match self.translate_alias(ic) { Operand::DeviceSpec(DeviceSpec { device, connection }) => match device { - Device::Db => Ok((Some(0), connection)), - Device::Numbered(p) => Ok((Some(p), connection)), + 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((Some(val as u32), connection)) + Ok((val as i32, connection)) } }, Operand::Identifier(id) => Err(ICError::UnknownIdentifier(id.name.to_string())), _ => Err(ICError::IncorrectOperandType { - inst, - index, + inst: self.inst, + index: self.index, desired: "Value".to_owned(), }), } } - pub fn as_logic_type( - &self, - ic: &IC, - inst: InstructionOp, - index: u32, - ) -> Result { - match &self { + pub fn as_logic_type(&self, ic: &IC) -> Result { + match &self.operand { Operand::Type { logic_type: Some(lt), .. } => Ok(*lt), - _ => LogicType::try_from(self.as_value(ic, inst, index)?), + _ => LogicType::try_from(self.as_value(ic)?), } } pub fn as_slot_logic_type( &self, ic: &IC, - inst: InstructionOp, - index: u32, ) -> Result { - match &self { + match &self.operand { Operand::Type { slot_logic_type: Some(slt), .. } => Ok(*slt), - _ => LogicSlotType::try_from(self.as_value(ic, inst, index)?), + _ => LogicSlotType::try_from(self.as_value(ic)?), } } - pub fn as_batch_mode( - &self, - ic: &IC, - inst: InstructionOp, - index: u32, - ) -> Result { - match &self { + pub fn as_batch_mode(&self, ic: &IC) -> Result { + match &self.operand { Operand::Type { batch_mode: Some(bm), .. } => Ok(*bm), - _ => BatchMode::try_from(self.as_value(ic, inst, index)?), + _ => BatchMode::try_from(self.as_value(ic)?), } } - pub fn as_reagent_mode( - &self, - ic: &IC, - inst: InstructionOp, - index: u32, - ) -> Result { - match &self { + pub fn as_reagent_mode(&self, ic: &IC) -> Result { + match &self.operand { Operand::Type { reagent_mode: Some(rm), .. } => Ok(*rm), - _ => ReagentMode::try_from(self.as_value(ic, inst, index)?), + _ => ReagentMode::try_from(self.as_value(ic)?), } } - pub fn translate_alias(&self, ic: &IC) -> Self { - match &self { + 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() @@ -281,7 +296,7 @@ impl Operand { } else if let Some(label) = ic.get_labels().get(&id.name) { Operand::Number(Number::Float(*label as f64)) } else { - self.clone() + self.operand.clone() } } _ => self.clone(), diff --git a/ic10emu/src/vm/instructions/traits.rs b/ic10emu/src/vm/instructions/traits.rs index 59c1b56..518a513 100644 --- a/ic10emu/src/vm/instructions/traits.rs +++ b/ic10emu/src/vm/instructions/traits.rs @@ -9,6 +9,7 @@ // // ================================================= +use crate::vm::instructions::enums::InstructionOp; use crate::vm::object::traits::IntegratedCircuit; pub trait AbsInstruction: IntegratedCircuit { /// abs r? a(r?|num) @@ -16,6 +17,18 @@ pub trait AbsInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Abs, 1), + ) + } + /// 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 { @@ -24,6 +37,18 @@ pub trait AcosInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Acos, 1), + ) + } + /// 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 { @@ -33,6 +58,20 @@ pub trait AddInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Add, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Add, 2), + ) + } + /// 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 { @@ -41,6 +80,18 @@ pub trait AliasInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Alias, 1), + ) + } + /// 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 { @@ -50,6 +101,20 @@ pub trait AndInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::And, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::And, 2), + ) + } + /// 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 { @@ -58,6 +123,18 @@ pub trait AsinInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Asin, 1), + ) + } + /// 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 { @@ -66,6 +143,18 @@ pub trait AtanInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Atan, 1), + ) + } + /// 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 { @@ -75,6 +164,20 @@ pub trait Atan2Instruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Atan2, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Atan2, 2), + ) + } + /// 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 { @@ -85,6 +188,22 @@ pub trait BapInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bap, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bap, 2), + &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Bap, 3), + ) + } + /// 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 { @@ -95,6 +214,22 @@ pub trait BapalInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bapal, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bapal, 2), + &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Bapal, 3), + ) + } + /// 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 { @@ -104,6 +239,20 @@ pub trait BapzInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bapz, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bapz, 2), + ) + } + /// 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 { @@ -113,6 +262,20 @@ pub trait BapzalInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bapzal, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bapzal, 2), + ) + } + /// 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 { @@ -121,6 +284,18 @@ pub trait BdnsInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bdns, 1), + ) + } + /// 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 { @@ -129,6 +304,18 @@ pub trait BdnsalInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bdnsal, 1), + ) + } + /// 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 { @@ -137,6 +324,18 @@ pub trait BdseInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bdse, 1), + ) + } + /// 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 { @@ -145,6 +344,18 @@ pub trait BdsealInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bdseal, 1), + ) + } + /// 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 { @@ -154,6 +365,20 @@ pub trait BeqInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Beq, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Beq, 2), + ) + } + /// 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 { @@ -163,6 +388,20 @@ pub trait BeqalInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Beqal, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Beqal, 2), + ) + } + /// 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 { @@ -171,6 +410,18 @@ pub trait BeqzInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Beqz, 1), + ) + } + /// 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 { @@ -179,6 +430,18 @@ pub trait BeqzalInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Beqzal, 1), + ) + } + /// 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 { @@ -188,6 +451,20 @@ pub trait BgeInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bge, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bge, 2), + ) + } + /// 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 { @@ -197,6 +474,20 @@ pub trait BgealInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bgeal, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bgeal, 2), + ) + } + /// 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 { @@ -205,6 +496,18 @@ pub trait BgezInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bgez, 1), + ) + } + /// 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 { @@ -213,6 +516,18 @@ pub trait BgezalInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bgezal, 1), + ) + } + /// 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 { @@ -222,6 +537,20 @@ pub trait BgtInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bgt, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bgt, 2), + ) + } + /// 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 { @@ -231,6 +560,20 @@ pub trait BgtalInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bgtal, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bgtal, 2), + ) + } + /// 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 { @@ -239,6 +582,18 @@ pub trait BgtzInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bgtz, 1), + ) + } + /// 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 { @@ -247,6 +602,18 @@ pub trait BgtzalInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bgtzal, 1), + ) + } + /// 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 { @@ -256,6 +623,20 @@ pub trait BleInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Ble, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Ble, 2), + ) + } + /// 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 { @@ -265,6 +646,20 @@ pub trait BlealInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bleal, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bleal, 2), + ) + } + /// 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 { @@ -273,6 +668,18 @@ pub trait BlezInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Blez, 1), + ) + } + /// 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 { @@ -281,6 +688,18 @@ pub trait BlezalInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Blezal, 1), + ) + } + /// 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 { @@ -290,6 +709,20 @@ pub trait BltInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Blt, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Blt, 2), + ) + } + /// 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 { @@ -299,6 +732,20 @@ pub trait BltalInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bltal, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bltal, 2), + ) + } + /// 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 { @@ -307,6 +754,18 @@ pub trait BltzInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bltz, 1), + ) + } + /// 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 { @@ -315,6 +774,18 @@ pub trait BltzalInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bltzal, 1), + ) + } + /// 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 { @@ -325,6 +796,22 @@ pub trait BnaInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bna, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bna, 2), + &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Bna, 3), + ) + } + /// 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 { @@ -335,6 +822,22 @@ pub trait BnaalInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bnaal, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bnaal, 2), + &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Bnaal, 3), + ) + } + /// 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 { @@ -343,6 +846,18 @@ pub trait BnanInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bnan, 1), + ) + } + /// 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 { @@ -352,6 +867,20 @@ pub trait BnazInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bnaz, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bnaz, 2), + ) + } + /// 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 { @@ -361,6 +890,20 @@ pub trait BnazalInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bnazal, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bnazal, 2), + ) + } + /// 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 { @@ -370,6 +913,20 @@ pub trait BneInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bne, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bne, 2), + ) + } + /// 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 { @@ -379,6 +936,20 @@ pub trait BnealInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bneal, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bneal, 2), + ) + } + /// 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 { @@ -387,6 +958,18 @@ pub trait BnezInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bnez, 1), + ) + } + /// 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 { @@ -395,6 +978,18 @@ pub trait BnezalInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bnezal, 1), + ) + } + /// 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 { @@ -405,6 +1000,22 @@ pub trait BrapInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brap, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Brap, 2), + &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Brap, 3), + ) + } + /// 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 { @@ -414,6 +1025,20 @@ pub trait BrapzInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brapz, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Brapz, 2), + ) + } + /// 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 { @@ -422,6 +1047,18 @@ pub trait BrdnsInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Brdns, 1), + ) + } + /// 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 { @@ -430,6 +1067,18 @@ pub trait BrdseInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Brdse, 1), + ) + } + /// 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 { @@ -439,6 +1088,20 @@ pub trait BreqInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Breq, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Breq, 2), + ) + } + /// 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 { @@ -447,6 +1110,18 @@ pub trait BreqzInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Breqz, 1), + ) + } + /// 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 { @@ -456,6 +1131,20 @@ pub trait BrgeInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brge, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Brge, 2), + ) + } + /// 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 { @@ -464,6 +1153,18 @@ pub trait BrgezInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brgez, 1), + ) + } + /// 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 { @@ -473,6 +1174,20 @@ pub trait BrgtInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brgt, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Brgt, 2), + ) + } + /// 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 { @@ -481,6 +1196,18 @@ pub trait BrgtzInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brgtz, 1), + ) + } + /// 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 { @@ -490,6 +1217,20 @@ pub trait BrleInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brle, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Brle, 2), + ) + } + /// 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 { @@ -498,6 +1239,18 @@ pub trait BrlezInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brlez, 1), + ) + } + /// 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 { @@ -507,6 +1260,20 @@ pub trait BrltInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brlt, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Brlt, 2), + ) + } + /// 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 { @@ -515,6 +1282,18 @@ pub trait BrltzInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brltz, 1), + ) + } + /// 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 { @@ -525,6 +1304,22 @@ pub trait BrnaInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brna, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Brna, 2), + &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Brna, 3), + ) + } + /// 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 { @@ -533,6 +1328,18 @@ pub trait BrnanInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brnan, 1), + ) + } + /// 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 { @@ -542,6 +1349,20 @@ pub trait BrnazInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brnaz, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Brnaz, 2), + ) + } + /// 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 { @@ -551,6 +1372,20 @@ pub trait BrneInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brne, 1), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Brne, 2), + ) + } + /// 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 { @@ -559,6 +1394,18 @@ pub trait BrnezInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brnez, 1), + ) + } + /// 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 { @@ -567,6 +1414,18 @@ pub trait CeilInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Ceil, 1), + ) + } + /// 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 { @@ -574,6 +1433,16 @@ pub trait ClrInstruction: IntegratedCircuit { 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, 0), + ) + } + /// clr d? + fn execute_inner( + &mut self, + d: &crate::vm::instructions::operands::InstOperand, ) -> Result<(), crate::errors::ICError>; } pub trait ClrdInstruction: IntegratedCircuit { @@ -581,6 +1450,16 @@ pub trait ClrdInstruction: IntegratedCircuit { 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, 0), + ) + } + /// clrd id(r?|num) + fn execute_inner( + &mut self, + id: &crate::vm::instructions::operands::InstOperand, ) -> Result<(), crate::errors::ICError>; } pub trait CosInstruction: IntegratedCircuit { @@ -589,6 +1468,18 @@ pub trait CosInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Cos, 1), + ) + } + /// 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 { @@ -597,6 +1488,18 @@ pub trait DefineInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(num, InstructionOp::Define, 1), + ) + } + /// 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 { @@ -606,6 +1509,20 @@ pub trait DivInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Div, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Div, 2), + ) + } + /// 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 { @@ -614,6 +1531,18 @@ pub trait ExpInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Exp, 1), + ) + } + /// 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 { @@ -622,6 +1551,18 @@ pub trait FloorInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Floor, 1), + ) + } + /// 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 { @@ -631,6 +1572,20 @@ pub trait GetInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Get, 1), + &crate::vm::instructions::operands::InstOperand::new(address, InstructionOp::Get, 2), + ) + } + /// 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 { @@ -640,17 +1595,45 @@ pub trait GetdInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(id, InstructionOp::Getd, 1), + &crate::vm::instructions::operands::InstOperand::new(address, InstructionOp::Getd, 2), + ) + } + /// 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>; + 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, 0), + ) + } + /// j int + fn execute_inner( + &mut self, + int: &crate::vm::instructions::operands::InstOperand, ) -> Result<(), crate::errors::ICError>; } pub trait JalInstruction: IntegratedCircuit { @@ -658,6 +1641,16 @@ pub trait JalInstruction: IntegratedCircuit { 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, 0), + ) + } + /// jal int + fn execute_inner( + &mut self, + int: &crate::vm::instructions::operands::InstOperand, ) -> Result<(), crate::errors::ICError>; } pub trait JrInstruction: IntegratedCircuit { @@ -665,6 +1658,16 @@ pub trait JrInstruction: IntegratedCircuit { 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, 0), + ) + } + /// jr int + fn execute_inner( + &mut self, + int: &crate::vm::instructions::operands::InstOperand, ) -> Result<(), crate::errors::ICError>; } pub trait LInstruction: IntegratedCircuit { @@ -674,6 +1677,20 @@ pub trait LInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::L, 1), + &crate::vm::instructions::operands::InstOperand::new(logic_type, InstructionOp::L, 2), + ) + } + /// 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 { @@ -682,6 +1699,18 @@ pub trait LabelInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(string, InstructionOp::Label, 1), + ) + } + /// 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 { @@ -692,6 +1721,22 @@ pub trait LbInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(device_hash, InstructionOp::Lb, 1), + &crate::vm::instructions::operands::InstOperand::new(logic_type, InstructionOp::Lb, 2), + &crate::vm::instructions::operands::InstOperand::new(batch_mode, InstructionOp::Lb, 3), + ) + } + /// 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 { @@ -703,6 +1748,28 @@ pub trait LbnInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new( + device_hash, + InstructionOp::Lbn, + 1, + ), + &crate::vm::instructions::operands::InstOperand::new(name_hash, InstructionOp::Lbn, 2), + &crate::vm::instructions::operands::InstOperand::new(logic_type, InstructionOp::Lbn, 3), + &crate::vm::instructions::operands::InstOperand::new(batch_mode, InstructionOp::Lbn, 4), + ) + } + /// 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 { @@ -715,6 +1782,42 @@ pub trait LbnsInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new( + device_hash, + InstructionOp::Lbns, + 1, + ), + &crate::vm::instructions::operands::InstOperand::new(name_hash, InstructionOp::Lbns, 2), + &crate::vm::instructions::operands::InstOperand::new( + slot_index, + InstructionOp::Lbns, + 3, + ), + &crate::vm::instructions::operands::InstOperand::new( + logic_slot_type, + InstructionOp::Lbns, + 4, + ), + &crate::vm::instructions::operands::InstOperand::new( + batch_mode, + InstructionOp::Lbns, + 5, + ), + ) + } + /// 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 { @@ -726,6 +1829,32 @@ pub trait LbsInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new( + device_hash, + InstructionOp::Lbs, + 1, + ), + &crate::vm::instructions::operands::InstOperand::new(slot_index, InstructionOp::Lbs, 2), + &crate::vm::instructions::operands::InstOperand::new( + logic_slot_type, + InstructionOp::Lbs, + 3, + ), + &crate::vm::instructions::operands::InstOperand::new(batch_mode, InstructionOp::Lbs, 4), + ) + } + /// 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 { @@ -735,6 +1864,20 @@ pub trait LdInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(id, InstructionOp::Ld, 1), + &crate::vm::instructions::operands::InstOperand::new(logic_type, InstructionOp::Ld, 2), + ) + } + /// 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 { @@ -743,6 +1886,18 @@ pub trait LogInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Log, 1), + ) + } + /// 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 { @@ -753,6 +1908,26 @@ pub trait LrInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Lr, 1), + &crate::vm::instructions::operands::InstOperand::new( + reagent_mode, + InstructionOp::Lr, + 2, + ), + &crate::vm::instructions::operands::InstOperand::new(int, InstructionOp::Lr, 3), + ) + } + /// 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 { @@ -763,6 +1938,26 @@ pub trait LsInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Ls, 1), + &crate::vm::instructions::operands::InstOperand::new(slot_index, InstructionOp::Ls, 2), + &crate::vm::instructions::operands::InstOperand::new( + logic_slot_type, + InstructionOp::Ls, + 3, + ), + ) + } + /// 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 { @@ -772,6 +1967,20 @@ pub trait MaxInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Max, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Max, 2), + ) + } + /// 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 { @@ -781,6 +1990,20 @@ pub trait MinInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Min, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Min, 2), + ) + } + /// 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 { @@ -790,6 +2013,20 @@ pub trait ModInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Mod, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Mod, 2), + ) + } + /// 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 { @@ -798,6 +2035,18 @@ pub trait MoveInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Move, 1), + ) + } + /// 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 { @@ -807,6 +2056,20 @@ pub trait MulInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Mul, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Mul, 2), + ) + } + /// 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 { @@ -816,6 +2079,20 @@ pub trait NorInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Nor, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Nor, 2), + ) + } + /// 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 { @@ -824,6 +2101,18 @@ pub trait NotInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Not, 1), + ) + } + /// 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 { @@ -833,6 +2122,20 @@ pub trait OrInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Or, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Or, 2), + ) + } + /// 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 { @@ -840,6 +2143,16 @@ pub trait PeekInstruction: IntegratedCircuit { 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, 0), + ) + } + /// peek r? + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, ) -> Result<(), crate::errors::ICError>; } pub trait PokeInstruction: IntegratedCircuit { @@ -848,6 +2161,18 @@ pub trait PokeInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(value, InstructionOp::Poke, 1), + ) + } + /// 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 { @@ -855,6 +2180,16 @@ pub trait PopInstruction: IntegratedCircuit { 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, 0), + ) + } + /// pop r? + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, ) -> Result<(), crate::errors::ICError>; } pub trait PushInstruction: IntegratedCircuit { @@ -862,6 +2197,16 @@ pub trait PushInstruction: IntegratedCircuit { 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, 0), + ) + } + /// push a(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, ) -> Result<(), crate::errors::ICError>; } pub trait PutInstruction: IntegratedCircuit { @@ -871,6 +2216,20 @@ pub trait PutInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(address, InstructionOp::Put, 1), + &crate::vm::instructions::operands::InstOperand::new(value, InstructionOp::Put, 2), + ) + } + /// 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 { @@ -880,6 +2239,20 @@ pub trait PutdInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(address, InstructionOp::Putd, 1), + &crate::vm::instructions::operands::InstOperand::new(value, InstructionOp::Putd, 2), + ) + } + /// 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 { @@ -887,6 +2260,16 @@ pub trait RandInstruction: IntegratedCircuit { 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, 0), + ) + } + /// rand r? + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, ) -> Result<(), crate::errors::ICError>; } pub trait RoundInstruction: IntegratedCircuit { @@ -895,6 +2278,18 @@ pub trait RoundInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Round, 1), + ) + } + /// 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 { @@ -904,6 +2299,20 @@ pub trait SInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(logic_type, InstructionOp::S, 1), + &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::S, 2), + ) + } + /// 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 { @@ -914,6 +2323,22 @@ pub trait SapInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sap, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sap, 2), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Sap, 3), + ) + } + /// 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 { @@ -923,6 +2348,20 @@ pub trait SapzInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sapz, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sapz, 2), + ) + } + /// 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 { @@ -932,6 +2371,20 @@ pub trait SbInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(logic_type, InstructionOp::Sb, 1), + &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sb, 2), + ) + } + /// 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 { @@ -942,6 +2395,26 @@ pub trait SbnInstruction: IntegratedCircuit { 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, + 0, + ), + &crate::vm::instructions::operands::InstOperand::new(name_hash, InstructionOp::Sbn, 1), + &crate::vm::instructions::operands::InstOperand::new(logic_type, InstructionOp::Sbn, 2), + &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sbn, 3), + ) + } + /// 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 { @@ -952,6 +2425,30 @@ pub trait SbsInstruction: IntegratedCircuit { 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, + 0, + ), + &crate::vm::instructions::operands::InstOperand::new(slot_index, InstructionOp::Sbs, 1), + &crate::vm::instructions::operands::InstOperand::new( + logic_slot_type, + InstructionOp::Sbs, + 2, + ), + &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sbs, 3), + ) + } + /// 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 { @@ -961,6 +2458,20 @@ pub trait SdInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(logic_type, InstructionOp::Sd, 1), + &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sd, 2), + ) + } + /// 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 { @@ -969,6 +2480,18 @@ pub trait SdnsInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Sdns, 1), + ) + } + /// 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 { @@ -977,6 +2500,18 @@ pub trait SdseInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Sdse, 1), + ) + } + /// 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 { @@ -987,6 +2522,22 @@ pub trait SelectInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Select, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Select, 2), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Select, 3), + ) + } + /// 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 { @@ -996,6 +2547,20 @@ pub trait SeqInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Seq, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Seq, 2), + ) + } + /// 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 { @@ -1004,6 +2569,18 @@ pub trait SeqzInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Seqz, 1), + ) + } + /// 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 { @@ -1013,6 +2590,20 @@ pub trait SgeInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sge, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sge, 2), + ) + } + /// 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 { @@ -1021,6 +2612,18 @@ pub trait SgezInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sgez, 1), + ) + } + /// 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 { @@ -1030,6 +2633,20 @@ pub trait SgtInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sgt, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sgt, 2), + ) + } + /// 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 { @@ -1038,6 +2655,18 @@ pub trait SgtzInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sgtz, 1), + ) + } + /// 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 { @@ -1046,6 +2675,18 @@ pub trait SinInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sin, 1), + ) + } + /// 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 { @@ -1055,6 +2696,20 @@ pub trait SlaInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sla, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sla, 2), + ) + } + /// 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 { @@ -1064,6 +2719,20 @@ pub trait SleInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sle, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sle, 2), + ) + } + /// 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 { @@ -1071,6 +2740,16 @@ pub trait SleepInstruction: IntegratedCircuit { 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, 0), + ) + } + /// sleep a(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, ) -> Result<(), crate::errors::ICError>; } pub trait SlezInstruction: IntegratedCircuit { @@ -1079,6 +2758,18 @@ pub trait SlezInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Slez, 1), + ) + } + /// 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 { @@ -1088,6 +2779,20 @@ pub trait SllInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sll, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sll, 2), + ) + } + /// 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 { @@ -1097,6 +2802,20 @@ pub trait SltInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Slt, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Slt, 2), + ) + } + /// 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 { @@ -1105,6 +2824,18 @@ pub trait SltzInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sltz, 1), + ) + } + /// 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 { @@ -1115,6 +2846,22 @@ pub trait SnaInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sna, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sna, 2), + &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Sna, 3), + ) + } + /// 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 { @@ -1123,6 +2870,18 @@ pub trait SnanInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Snan, 1), + ) + } + /// 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 { @@ -1131,6 +2890,18 @@ pub trait SnanzInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Snanz, 1), + ) + } + /// 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 { @@ -1140,6 +2911,20 @@ pub trait SnazInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Snaz, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Snaz, 2), + ) + } + /// 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 { @@ -1149,6 +2934,20 @@ pub trait SneInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sne, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sne, 2), + ) + } + /// 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 { @@ -1157,6 +2956,18 @@ pub trait SnezInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Snez, 1), + ) + } + /// 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 { @@ -1165,6 +2976,18 @@ pub trait SqrtInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sqrt, 1), + ) + } + /// 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 { @@ -1174,6 +2997,20 @@ pub trait SraInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sra, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sra, 2), + ) + } + /// 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 { @@ -1183,6 +3020,20 @@ pub trait SrlInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Srl, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Srl, 2), + ) + } + /// 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 { @@ -1193,6 +3044,26 @@ pub trait SsInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(slot_index, InstructionOp::Ss, 1), + &crate::vm::instructions::operands::InstOperand::new( + logic_slot_type, + InstructionOp::Ss, + 2, + ), + &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Ss, 3), + ) + } + /// 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 { @@ -1202,6 +3073,20 @@ pub trait SubInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sub, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sub, 2), + ) + } + /// 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 { @@ -1210,6 +3095,18 @@ pub trait TanInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Tan, 1), + ) + } + /// 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 { @@ -1218,6 +3115,18 @@ pub trait TruncInstruction: IntegratedCircuit { &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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Trunc, 1), + ) + } + /// 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 { @@ -1227,11 +3136,29 @@ pub trait XorInstruction: IntegratedCircuit { 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, 0), + &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Xor, 1), + &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Xor, 2), + ) + } + /// 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>; + 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 diff --git a/ic10emu/src/vm/object/errors.rs b/ic10emu/src/vm/object/errors.rs index 3360eb6..478869c 100644 --- a/ic10emu/src/vm/object/errors.rs +++ b/ic10emu/src/vm/object/errors.rs @@ -23,6 +23,8 @@ pub enum MemoryError { StackUnderflow(i32, usize), #[error("stack overflow: {0} > range [0..{1})")] StackOverflow(i32, usize), - #[error("memory unit not present")] - NotPresent, + #[error("memory not readable")] + NotReadable, + #[error("memory not writeable")] + NotWriteable, } diff --git a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs index 7a22d7a..2ca717d 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs @@ -1,7 +1,7 @@ use crate::{ errors::{ICError, LineError}, grammar, - interpreter::ICState, + interpreter::{ICState, instructions::IC10Marker}, vm::{ enums::{ basic_enums::{Class as SlotClass, GasType, SortingClass}, @@ -29,7 +29,6 @@ use std::{ collections::{BTreeMap, HashSet}, rc::Rc, }; -use ICError::*; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Program { @@ -283,7 +282,7 @@ impl Logicable for ItemIntegratedCircuit10 { fn can_slot_logic_read(&self, slt: LogicSlotType, index: f64) -> bool { false } - fn get_slot_logic(&self, slt: LogicSlotType, index: f64, _vm: &VM) -> Result { + fn get_slot_logic(&self, slt: LogicSlotType, index: f64) -> Result { return Err(LogicError::SlotIndexOutOfRange(index, self.slots_count())); } fn valid_logic_types(&self) -> Vec { @@ -348,10 +347,11 @@ impl SourceCode for ItemIntegratedCircuit10 { } impl IntegratedCircuit for ItemIntegratedCircuit10 { - fn get_circuit_holder(&self, vm: &Rc) -> Option { + fn get_circuit_holder(&self) -> Option { self.get_parent_slot() .map(|parent_slot| { - vm.get_object(parent_slot.parent) + self.get_vm() + .get_object(parent_slot.parent) .map(|obj| obj.borrow().as_circuit_holder()) .flatten() }) @@ -466,9 +466,15 @@ impl IntegratedCircuit for ItemIntegratedCircuit10 { 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 } @@ -480,1560 +486,4 @@ impl IntegratedCircuit for ItemIntegratedCircuit10 { } } -impl SleepInstruction for ItemIntegratedCircuit10 { - /// sleep a(r?|num) - fn execute_sleep(&mut self, vm: &VM, a: &Operand) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Sleep, 1)?; - let now = - time::OffsetDateTime::now_local().unwrap_or_else(|_| time::OffsetDateTime::now_utc()); - self.state = ICState::Sleep(now, a); - Ok(()) - } -} - -impl YieldInstruction for ItemIntegratedCircuit10 { - /// yield - fn execute_yield(&mut self, vm: &VM) -> Result<(), ICError> { - self.state = ICState::Yield; - Ok(()) - } -} - -impl DefineInstruction for ItemIntegratedCircuit10 { - /// define str num - fn execute_define(&mut self, vm: &VM, string: &Operand, num: &Operand) -> Result<(), ICError> { - let &Operand::Identifier(ident) = &string else { - return Err(IncorrectOperandType { - inst: InstructionOp::Define, - index: 1, - desired: "Name".to_owned(), - }); - }; - let &Operand::Number(num) = &num else { - return Err(IncorrectOperandType { - inst: InstructionOp::Define, - index: 2, - desired: "Number".to_owned(), - }); - }; - if self.defines.contains_key(&ident.name) { - Err(DuplicateDefine(ident.name.clone())) - } else { - self.defines.insert(ident.name.clone(), num.value()); - Ok(()) - } - } -} - -impl AliasInstruction for ItemIntegratedCircuit10 { - /// alias str r?|d? - fn execute_alias(&mut self, vm: &VM, string: &Operand, r: &Operand) -> Result<(), ICError> { - let &Operand::Identifier(ident) = &string else { - return Err(IncorrectOperandType { - inst: InstructionOp::Alias, - index: 1, - desired: "Name".to_owned(), - }); - }; - let alias = match &r { - 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: InstructionOp::Alias, - index: 2, - desired: "Device Or Register".to_owned(), - }) - } - }; - self.aliases.insert(ident.name.clone(), alias); - Ok(()) - } -} - -impl MoveInstruction for ItemIntegratedCircuit10 { - /// move r? a(r?|num) - fn execute_move(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError> { - let RegisterSpec { - indirection, - target, - } = r.as_register(self, InstructionOp::Move, 1)?; - - let val = a.as_value(self, InstructionOp::Move, 2)?; - self.set_register(indirection, target, val)?; - Ok(()) - } -} - -impl BeqInstruction for ItemIntegratedCircuit10 { - /// beq a(r?|num) b(r?|num) c(r?|num) - fn execute_beq( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Beq, 1)?; - let b = b.as_value(self, InstructionOp::Beq, 2)?; - let c = c.as_value(self, InstructionOp::Beq, 3)?; - if a == b { - self.set_next_instruction(c); - } - Ok(()) - } -} -impl BeqalInstruction for ItemIntegratedCircuit10 { - /// beqal a(r?|num) b(r?|num) c(r?|num) - fn execute_beqal( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Beqal, 1)?; - let b = b.as_value(self, InstructionOp::Beqal, 2)?; - let c = c.as_value(self, InstructionOp::Beqal, 3)?; - if a == b { - self.set_next_instruction(c); - self.al(); - } - Ok(()) - } -} - -impl BreqInstruction for ItemIntegratedCircuit10 { - /// breq a(r?|num) b(r?|num) c(r?|num) - fn execute_breq( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Breq, 1)?; - let b = b.as_value(self, InstructionOp::Breq, 2)?; - let c = c.as_value(self, InstructionOp::Breq, 3)?; - if a == b { - self.set_next_instruction_relative(c); - } - Ok(()) - } -} - -impl BeqzInstruction for ItemIntegratedCircuit10 { - /// beqz a(r?|num) b(r?|num) - fn execute_beqz(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Beqz, 1)?; - let b = b.as_value(self, InstructionOp::Beqz, 2)?; - if a == 0.0 { - self.set_next_instruction(b) - } - Ok(()) - } -} - -impl BeqzalInstruction for ItemIntegratedCircuit10 { - /// beqzal a(r?|num) b(r?|num) - fn execute_beqzal(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Beqzal, 1)?; - let b = b.as_value(self, InstructionOp::Beqzal, 2)?; - if a == 0.0 { - self.set_next_instruction(b); - self.al(); - } - Ok(()) - } -} - -impl BreqzInstruction for ItemIntegratedCircuit10 { - /// breqz a(r?|num) b(r?|num) - fn execute_breqz(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Breqz, 1)?; - let b = b.as_value(self, InstructionOp::Breqz, 2)?; - if a == 0.0 { - self.set_next_instruction_relative(b); - } - Ok(()) - } -} - -impl BneInstruction for ItemIntegratedCircuit10 { - /// bne a(r?|num) b(r?|num) c(r?|num) - fn execute_bne( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bne, 1)?; - let b = b.as_value(self, InstructionOp::Bne, 2)?; - let c = c.as_value(self, InstructionOp::Bne, 3)?; - if a != b { - self.set_next_instruction(c); - } - Ok(()) - } -} - -impl BnealInstruction for ItemIntegratedCircuit10 { - /// bneal a(r?|num) b(r?|num) c(r?|num) - fn execute_bneal( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bneal, 1)?; - let b = b.as_value(self, InstructionOp::Bneal, 2)?; - let c = c.as_value(self, InstructionOp::Bneal, 3)?; - if a != b { - self.set_next_instruction(c); - self.al(); - } - Ok(()) - } -} - -impl BrneInstruction for ItemIntegratedCircuit10 { - /// brne a(r?|num) b(r?|num) c(r?|num) - fn execute_brne( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Brne, 1)?; - let b = b.as_value(self, InstructionOp::Brne, 2)?; - let c = c.as_value(self, InstructionOp::Brne, 3)?; - if a != b { - self.set_next_instruction_relative(c); - } - Ok(()) - } -} - -impl BnezInstruction for ItemIntegratedCircuit10 { - /// bnez a(r?|num) b(r?|num) - fn execute_bnez(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bnez, 1)?; - let b = b.as_value(self, InstructionOp::Bnez, 2)?; - if a != 0.0 { - self.set_next_instruction(b) - } - Ok(()) - } -} - -impl BnezalInstruction for ItemIntegratedCircuit10 { - /// bnezal a(r?|num) b(r?|num) - fn execute_bnezal(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bnezal, 1)?; - let b = b.as_value(self, InstructionOp::Bnezal, 2)?; - if a != 0.0 { - self.set_next_instruction(b); - self.al(); - } - Ok(()) - } -} - -impl BrnezInstruction for ItemIntegratedCircuit10 { - /// brnez a(r?|num) b(r?|num) - fn execute_brnez(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Brnez, 1)?; - let b = b.as_value(self, InstructionOp::Brnez, 2)?; - if a != 0.0 { - self.set_next_instruction_relative(b) - } - Ok(()) - } -} - -impl BltInstruction for ItemIntegratedCircuit10 { - /// blt a(r?|num) b(r?|num) c(r?|num) - fn execute_blt( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Blt, 1)?; - let b = b.as_value(self, InstructionOp::Blt, 2)?; - let c = c.as_value(self, InstructionOp::Blt, 3)?; - if a < b { - self.set_next_instruction(c); - } - Ok(()) - } -} - -impl BltalInstruction for ItemIntegratedCircuit10 { - /// bltal a(r?|num) b(r?|num) c(r?|num) - fn execute_bltal( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bltal, 1)?; - let b = b.as_value(self, InstructionOp::Bltal, 2)?; - let c = c.as_value(self, InstructionOp::Bltal, 3)?; - if a < b { - self.set_next_instruction(c); - self.al(); - } - Ok(()) - } -} - -impl BrltInstruction for ItemIntegratedCircuit10 { - /// brlt a(r?|num) b(r?|num) c(r?|num) - fn execute_brlt( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Brlt, 1)?; - let b = b.as_value(self, InstructionOp::Brlt, 2)?; - let c = c.as_value(self, InstructionOp::Brlt, 3)?; - if a < b { - self.set_next_instruction_relative(c); - } - Ok(()) - } -} - -impl BltzInstruction for ItemIntegratedCircuit10 { - /// bltz a(r?|num) b(r?|num) - fn execute_bltz(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bltz, 1)?; - let b = b.as_value(self, InstructionOp::Bltz, 2)?; - if a < 0.0 { - self.set_next_instruction(b); - } - Ok(()) - } -} - -impl BltzalInstruction for ItemIntegratedCircuit10 { - /// bltzal a(r?|num) b(r?|num) - fn execute_bltzal(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bltzal, 1)?; - let b = b.as_value(self, InstructionOp::Bltzal, 2)?; - if a < 0.0 { - self.set_next_instruction(b); - self.al(); - } - Ok(()) - } -} - -impl BrltzInstruction for ItemIntegratedCircuit10 { - /// brltz a(r?|num) b(r?|num) - fn execute_brltz(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Brltz, 1)?; - let b = b.as_value(self, InstructionOp::Brltz, 2)?; - if a < 0.0 { - self.set_next_instruction_relative(b); - } - Ok(()) - } -} - -impl BleInstruction for ItemIntegratedCircuit10 { - /// ble a(r?|num) b(r?|num) c(r?|num) - fn execute_ble( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Ble, 1)?; - let b = b.as_value(self, InstructionOp::Ble, 2)?; - let c = c.as_value(self, InstructionOp::Ble, 3)?; - if a <= b { - self.set_next_instruction(c); - } - Ok(()) - } -} -impl BlealInstruction for ItemIntegratedCircuit10 { - /// bleal a(r?|num) b(r?|num) c(r?|num) - fn execute_bleal( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bleal, 1)?; - let b = b.as_value(self, InstructionOp::Bleal, 2)?; - let c = c.as_value(self, InstructionOp::Bleal, 3)?; - if a <= b { - self.set_next_instruction(c); - self.al(); - } - Ok(()) - } -} - -impl BrleInstruction for ItemIntegratedCircuit10 { - /// brle a(r?|num) b(r?|num) c(r?|num) - fn execute_brle( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Brle, 1)?; - let b = b.as_value(self, InstructionOp::Brle, 2)?; - let c = c.as_value(self, InstructionOp::Brle, 3)?; - if a <= b { - self.set_next_instruction_relative(c); - } - Ok(()) - } -} - -impl BlezInstruction for ItemIntegratedCircuit10 { - /// blez a(r?|num) b(r?|num) - fn execute_blez(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Blez, 1)?; - let b = b.as_value(self, InstructionOp::Blez, 2)?; - if a <= 0.0 { - self.set_next_instruction(b); - } - Ok(()) - } -} - -impl BlezalInstruction for ItemIntegratedCircuit10 { - /// blezal a(r?|num) b(r?|num) - fn execute_blezal(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Blezal, 1)?; - let b = b.as_value(self, InstructionOp::Blezal, 2)?; - if a <= 0.0 { - self.set_next_instruction(b); - self.al(); - } - Ok(()) - } -} - -impl BrlezInstruction for ItemIntegratedCircuit10 { - /// brlez a(r?|num) b(r?|num) - fn execute_brlez(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Brlez, 1)?; - let b = b.as_value(self, InstructionOp::Brlez, 2)?; - if a <= 0.0 { - self.set_next_instruction_relative(b); - } - Ok(()) - } -} - -impl BgtInstruction for ItemIntegratedCircuit10 { - /// bgt a(r?|num) b(r?|num) c(r?|num) - fn execute_bgt( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bgt, 1)?; - let b = b.as_value(self, InstructionOp::Bgt, 2)?; - let c = c.as_value(self, InstructionOp::Bgt, 3)?; - if a > b { - self.set_next_instruction(c); - } - Ok(()) - } -} -impl BgtalInstruction for ItemIntegratedCircuit10 { - /// bgtal a(r?|num) b(r?|num) c(r?|num) - fn execute_bgtal( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bgtal, 1)?; - let b = b.as_value(self, InstructionOp::Bgtal, 2)?; - let c = c.as_value(self, InstructionOp::Bgtal, 3)?; - if a > b { - self.set_next_instruction(c); - self.al(); - } - Ok(()) - } -} - -impl BrgtInstruction for ItemIntegratedCircuit10 { - /// brgt a(r?|num) b(r?|num) c(r?|num) - fn execute_brgt( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Brgt, 1)?; - let b = b.as_value(self, InstructionOp::Brgt, 2)?; - let c = c.as_value(self, InstructionOp::Brgt, 3)?; - if a > b { - self.set_next_instruction_relative(c); - } - Ok(()) - } -} - -impl BgtzInstruction for ItemIntegratedCircuit10 { - /// bgtz a(r?|num) b(r?|num) - fn execute_bgtz(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bgtz, 1)?; - let b = b.as_value(self, InstructionOp::Bgtz, 2)?; - if a > 0.0 { - self.set_next_instruction(b); - } - Ok(()) - } -} - -impl BgtzalInstruction for ItemIntegratedCircuit10 { - /// bgtzal a(r?|num) b(r?|num) - fn execute_bgtzal(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bgtzal, 1)?; - let b = b.as_value(self, InstructionOp::Bgtzal, 2)?; - if a > 0.0 { - self.set_next_instruction(b); - self.al(); - } - Ok(()) - } -} - -impl BrgtzInstruction for ItemIntegratedCircuit10 { - /// brgtz a(r?|num) b(r?|num) - fn execute_brgtz(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Brgtz, 1)?; - let b = b.as_value(self, InstructionOp::Brgtz, 2)?; - if a > 0.0 { - self.set_next_instruction_relative(b); - } - Ok(()) - } -} - -impl BgeInstruction for ItemIntegratedCircuit10 { - /// bge a(r?|num) b(r?|num) c(r?|num) - fn execute_bge( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bge, 1)?; - let b = b.as_value(self, InstructionOp::Bge, 2)?; - let c = c.as_value(self, InstructionOp::Bge, 3)?; - if a >= b { - self.set_next_instruction(c); - } - Ok(()) - } -} - -impl BgealInstruction for ItemIntegratedCircuit10 { - /// bgeal a(r?|num) b(r?|num) c(r?|num) - fn execute_bgeal( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bgeal, 1)?; - let b = b.as_value(self, InstructionOp::Bgeal, 2)?; - let c = c.as_value(self, InstructionOp::Bgeal, 3)?; - if a >= b { - self.set_next_instruction(c); - self.al(); - } - Ok(()) - } -} - -impl BrgeInstruction for ItemIntegratedCircuit10 { - /// brge a(r?|num) b(r?|num) c(r?|num) - fn execute_brge( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Brge, 1)?; - let b = b.as_value(self, InstructionOp::Brge, 2)?; - let c = c.as_value(self, InstructionOp::Brge, 3)?; - if a >= b { - self.set_next_instruction_relative(c); - } - Ok(()) - } -} - -impl BgezInstruction for ItemIntegratedCircuit10 { - /// bgez a(r?|num) b(r?|num) - fn execute_bgez(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bgez, 1)?; - let b = b.as_value(self, InstructionOp::Bgez, 2)?; - if a >= 0.0 { - self.set_next_instruction(b); - } - Ok(()) - } -} - -impl BgezalInstruction for ItemIntegratedCircuit10 { - /// bgezal a(r?|num) b(r?|num) - fn execute_bgezal(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bgeal, 1)?; - let b = b.as_value(self, InstructionOp::Bgeal, 2)?; - if a >= 0.0 { - self.set_next_instruction(b); - self.al(); - } - Ok(()) - } -} - -impl BrgezInstruction for ItemIntegratedCircuit10 { - /// brgez a(r?|num) b(r?|num) - fn execute_brgez(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Brgez, 1)?; - let b = b.as_value(self, InstructionOp::Brgez, 2)?; - if a >= 0.0 { - self.set_next_instruction_relative(b); - } - Ok(()) - } -} - -impl BapInstruction for ItemIntegratedCircuit10 { - /// bap a(r?|num) b(r?|num) c(r?|num) d(r?|num) - fn execute_bap( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - d: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bap, 1)?; - let b = b.as_value(self, InstructionOp::Bap, 2)?; - let c = c.as_value(self, InstructionOp::Bap, 3)?; - let d = d.as_value(self, InstructionOp::Bap, 4)?; - 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 ItemIntegratedCircuit10 { - /// bapal a(r?|num) b(r?|num) c(r?|num) d(r?|num) - fn execute_bapal( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - d: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bapal, 1)?; - let b = b.as_value(self, InstructionOp::Bapal, 2)?; - let c = c.as_value(self, InstructionOp::Bapal, 3)?; - let d = d.as_value(self, InstructionOp::Bapal, 4)?; - 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 ItemIntegratedCircuit10 { - /// brap a(r?|num) b(r?|num) c(r?|num) d(r?|num) - fn execute_brap( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - d: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Brap, 1)?; - let b = b.as_value(self, InstructionOp::Brap, 2)?; - let c = c.as_value(self, InstructionOp::Brap, 3)?; - let d = d.as_value(self, InstructionOp::Brap, 4)?; - 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 ItemIntegratedCircuit10 { - /// bapz a(r?|num) b(r?|num) c(r?|num) - fn execute_bapz( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bapz, 1)?; - let b = b.as_value(self, InstructionOp::Bapz, 2)?; - let c = c.as_value(self, InstructionOp::Bapz, 3)?; - if a.abs() <= f64::max(b * a.abs(), f64::EPSILON * 8.0) { - } else { - self.set_next_instruction(c); - } - Ok(()) - } -} - -impl BapzalInstruction for ItemIntegratedCircuit10 { - /// bapzal a(r?|num) b(r?|num) c(r?|num) - fn execute_bapzal( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bapzal, 1)?; - let b = b.as_value(self, InstructionOp::Bapzal, 2)?; - let c = c.as_value(self, InstructionOp::Bapzal, 3)?; - if a.abs() <= f64::max(b * a.abs(), f64::EPSILON * 8.0) { - } else { - self.set_next_instruction(c); - self.al(); - } - Ok(()) - } -} - -impl BrapzInstruction for ItemIntegratedCircuit10 { - /// brapz a(r?|num) b(r?|num) c(r?|num) - fn execute_brapz( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Brapz, 1)?; - let b = b.as_value(self, InstructionOp::Brapz, 2)?; - let c = c.as_value(self, InstructionOp::Brapz, 3)?; - if a.abs() <= f64::max(b * a.abs(), f64::EPSILON * 8.0) { - } else { - self.set_next_instruction_relative(c); - } - Ok(()) - } -} - -impl BnaInstruction for ItemIntegratedCircuit10 { - /// bna a(r?|num) b(r?|num) c(r?|num) d(r?|num) - fn execute_bna( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - d: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bna, 1)?; - let b = b.as_value(self, InstructionOp::Bna, 2)?; - let c = c.as_value(self, InstructionOp::Bna, 3)?; - let d = d.as_value(self, InstructionOp::Bna, 4)?; - 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 ItemIntegratedCircuit10 { - /// bnaal a(r?|num) b(r?|num) c(r?|num) d(r?|num) - fn execute_bnaal( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - d: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bnaal, 1)?; - let b = b.as_value(self, InstructionOp::Bnaal, 2)?; - let c = c.as_value(self, InstructionOp::Bnaal, 3)?; - let d = d.as_value(self, InstructionOp::Bnaal, 4)?; - 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 ItemIntegratedCircuit10 { - /// brna a(r?|num) b(r?|num) c(r?|num) d(r?|num) - fn execute_brna( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - d: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Brna, 1)?; - let b = b.as_value(self, InstructionOp::Brna, 2)?; - let c = c.as_value(self, InstructionOp::Brna, 3)?; - let d = d.as_value(self, InstructionOp::Brna, 4)?; - 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 ItemIntegratedCircuit10 { - /// bnaz a(r?|num) b(r?|num) c(r?|num) - fn execute_bnaz( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bnaz, 1)?; - let b = b.as_value(self, InstructionOp::Bnaz, 2)?; - let c = c.as_value(self, InstructionOp::Bnaz, 3)?; - if a.abs() > f64::max(b * a.abs(), f64::EPSILON * 8.0) { - self.set_next_instruction(c); - } - Ok(()) - } -} -impl BnazalInstruction for ItemIntegratedCircuit10 { - /// bnazal a(r?|num) b(r?|num) c(r?|num) - fn execute_bnazal( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Bnazal, 1)?; - let b = b.as_value(self, InstructionOp::Bnazal, 2)?; - let c = c.as_value(self, InstructionOp::Bnazal, 3)?; - if a.abs() > f64::max(b * a.abs(), f64::EPSILON * 8.0) { - self.set_next_instruction(c); - self.al(); - } - Ok(()) - } -} -impl BrnazInstruction for ItemIntegratedCircuit10 { - /// brnaz a(r?|num) b(r?|num) c(r?|num) - fn execute_brnaz( - &mut self, - vm: &VM, - a: &Operand, - b: &Operand, - c: &Operand, - ) -> Result<(), ICError> { - let a = a.as_value(self, InstructionOp::Brnaz, 1)?; - let b = b.as_value(self, InstructionOp::Brnaz, 2)?; - let c = c.as_value(self, InstructionOp::Brnaz, 3)?; - if a.abs() > f64::max(b * a.abs(), f64::EPSILON * 8.0) { - self.set_next_instruction_relative(c); - } - Ok(()) - } -} -impl BdseInstruction for ItemIntegratedCircuit10 { - /// bdse d? a(r?|num) - fn execute_bdse(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError> { - let (device_id, _connection) = d.as_device(self, InstructionOp::Bdse, 1)?; - let a = a.as_value(self, InstructionOp::Bdse, 2)?; - if let Some(device_id) = device_id { - // FIXME: collect device and get logicable - self.set_next_instruction(a); - } - Ok(()) - } -} - -// impl BdsealInstruction for ItemIntegratedCircuit10 { -// /// bdseal d? a(r?|num) -// fn execute_bdseal(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl BrdseInstruction for ItemIntegratedCircuit10 { -// /// brdse d? a(r?|num) -// fn execute_brdse(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// -// impl AbsInstruction for ItemIntegratedCircuit10 { -// /// abs r? a(r?|num) -// fn execute_abs(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// -// impl AcosInstruction for ItemIntegratedCircuit10 { -// /// acos r? a(r?|num) -// fn execute_acos(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl AddInstruction for ItemIntegratedCircuit10 { -// /// add r? a(r?|num) b(r?|num) -// fn execute_add( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl AndInstruction for ItemIntegratedCircuit10 { -// /// and r? a(r?|num) b(r?|num) -// fn execute_and( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl AsinInstruction for ItemIntegratedCircuit10 { -// /// asin r? a(r?|num) -// fn execute_asin(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl AtanInstruction for ItemIntegratedCircuit10 { -// /// atan r? a(r?|num) -// fn execute_atan(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl Atan2Instruction for ItemIntegratedCircuit10 { -// /// atan2 r? a(r?|num) b(r?|num) -// fn execute_atan2( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl BdnsInstruction for ItemIntegratedCircuit10 { -// /// bdns d? a(r?|num) -// fn execute_bdns(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl BdnsalInstruction for ItemIntegratedCircuit10 { -// /// bdnsal d? a(r?|num) -// fn execute_bdnsal(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl BnanInstruction for ItemIntegratedCircuit10 { -// /// bnan a(r?|num) b(r?|num) -// fn execute_bnan(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError>; -// } -// impl BrdnsInstruction for ItemIntegratedCircuit10 { -// /// brdns d? a(r?|num) -// fn execute_brdns(&mut self, vm: &VM, d: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl BrnanInstruction for ItemIntegratedCircuit10 { -// /// brnan a(r?|num) b(r?|num) -// fn execute_brnan(&mut self, vm: &VM, a: &Operand, b: &Operand) -> Result<(), ICError>; -// } -// impl CeilInstruction for ItemIntegratedCircuit10 { -// /// ceil r? a(r?|num) -// fn execute_ceil(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl ClrInstruction for ItemIntegratedCircuit10 { -// /// clr d? -// fn execute_clr(&mut self, vm: &VM, d: &Operand) -> Result<(), ICError>; -// } -// impl ClrdInstruction for ItemIntegratedCircuit10 { -// /// clrd id(r?|num) -// fn execute_clrd(&mut self, vm: &VM, id: &Operand) -> Result<(), ICError>; -// } -// impl CosInstruction for ItemIntegratedCircuit10 { -// /// cos r? a(r?|num) -// fn execute_cos(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl DivInstruction for ItemIntegratedCircuit10 { -// /// div r? a(r?|num) b(r?|num) -// fn execute_div( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl ExpInstruction for ItemIntegratedCircuit10 { -// /// exp r? a(r?|num) -// fn execute_exp(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl FloorInstruction for ItemIntegratedCircuit10 { -// /// floor r? a(r?|num) -// fn execute_floor(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl GetInstruction for ItemIntegratedCircuit10 { -// /// get r? d? address(r?|num) -// fn execute_get( -// &mut self, -// vm: &VM, -// r: &Operand, -// d: &Operand, -// address: &Operand, -// ) -> Result<(), ICError>; -// } -// impl GetdInstruction for ItemIntegratedCircuit10 { -// /// getd r? id(r?|num) address(r?|num) -// fn execute_getd( -// &mut self, -// vm: &VM, -// r: &Operand, -// id: &Operand, -// address: &Operand, -// ) -> Result<(), ICError>; -// } -// impl HcfInstruction for ItemIntegratedCircuit10 { -// /// hcf -// fn execute_hcf(&mut self, vm: &VM) -> Result<(), ICError>; -// } -// impl JInstruction for ItemIntegratedCircuit10 { -// /// j int -// fn execute_j(&mut self, vm: &VM, int: &Operand) -> Result<(), ICError>; -// } -// impl JalInstruction for ItemIntegratedCircuit10 { -// /// jal int -// fn execute_jal(&mut self, vm: &VM, int: &Operand) -> Result<(), ICError>; -// } -// impl JrInstruction for ItemIntegratedCircuit10 { -// /// jr int -// fn execute_jr(&mut self, vm: &VM, int: &Operand) -> Result<(), ICError>; -// } -// impl LInstruction for ItemIntegratedCircuit10 { -// /// l r? d? logicType -// fn execute_l( -// &mut self, -// vm: &VM, -// r: &Operand, -// d: &Operand, -// logic_type: &Operand, -// ) -> Result<(), ICError>; -// } -// impl LabelInstruction for ItemIntegratedCircuit10 { -// /// label d? str -// fn execute_label(&mut self, vm: &VM, d: &Operand, str: &Operand) -> Result<(), ICError>; -// } -// impl LbInstruction for ItemIntegratedCircuit10 { -// /// lb r? deviceHash logicType batchMode -// fn execute_lb( -// &mut self, -// vm: &VM, -// r: &Operand, -// device_hash: &Operand, -// logic_type: &Operand, -// batch_mode: &Operand, -// ) -> Result<(), ICError>; -// } -// impl LbnInstruction for ItemIntegratedCircuit10 { -// /// lbn r? deviceHash nameHash logicType batchMode -// fn execute_lbn( -// &mut self, -// vm: &VM, -// r: &Operand, -// device_hash: &Operand, -// name_hash: &Operand, -// logic_type: &Operand, -// batch_mode: &Operand, -// ) -> Result<(), ICError>; -// } -// impl LbnsInstruction for ItemIntegratedCircuit10 { -// /// lbns r? deviceHash nameHash slotIndex logicSlotType batchMode -// fn execute_lbns( -// &mut self, -// vm: &VM, -// r: &Operand, -// device_hash: &Operand, -// name_hash: &Operand, -// slot_index: &Operand, -// logic_slot_type: &Operand, -// batch_mode: &Operand, -// ) -> Result<(), ICError>; -// } -// impl LbsInstruction for ItemIntegratedCircuit10 { -// /// lbs r? deviceHash slotIndex logicSlotType batchMode -// fn execute_lbs( -// &mut self, -// vm: &VM, -// r: &Operand, -// device_hash: &Operand, -// slot_index: &Operand, -// logic_slot_type: &Operand, -// batch_mode: &Operand, -// ) -> Result<(), ICError>; -// } -// impl LdInstruction for ItemIntegratedCircuit10 { -// /// ld r? id(r?|num) logicType -// fn execute_ld( -// &mut self, -// vm: &VM, -// r: &Operand, -// id: &Operand, -// logic_type: &Operand, -// ) -> Result<(), ICError>; -// } -// impl LogInstruction for ItemIntegratedCircuit10 { -// /// log r? a(r?|num) -// fn execute_log(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl LrInstruction for ItemIntegratedCircuit10 { -// /// lr r? d? reagentMode int -// fn execute_lr( -// &mut self, -// vm: &VM, -// r: &Operand, -// d: &Operand, -// reagent_mode: &Operand, -// int: &Operand, -// ) -> Result<(), ICError>; -// } -// impl LsInstruction for ItemIntegratedCircuit10 { -// /// ls r? d? slotIndex logicSlotType -// fn execute_ls( -// &mut self, -// vm: &VM, -// r: &Operand, -// d: &Operand, -// slot_index: &Operand, -// logic_slot_type: &Operand, -// ) -> Result<(), ICError>; -// } -// impl MaxInstruction for ItemIntegratedCircuit10 { -// /// max r? a(r?|num) b(r?|num) -// fn execute_max( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl MinInstruction for ItemIntegratedCircuit10 { -// /// min r? a(r?|num) b(r?|num) -// fn execute_min( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl ModInstruction for ItemIntegratedCircuit10 { -// /// mod r? a(r?|num) b(r?|num) -// fn execute_mod( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl MulInstruction for ItemIntegratedCircuit10 { -// /// mul r? a(r?|num) b(r?|num) -// fn execute_mul( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl NorInstruction for ItemIntegratedCircuit10 { -// /// nor r? a(r?|num) b(r?|num) -// fn execute_nor( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl NotInstruction for ItemIntegratedCircuit10 { -// /// not r? a(r?|num) -// fn execute_not(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl OrInstruction for ItemIntegratedCircuit10 { -// /// or r? a(r?|num) b(r?|num) -// fn execute_or(&mut self, vm: &VM, r: &Operand, a: &Operand, b: &Operand) -// -> Result<(), ICError>; -// } -// impl PeekInstruction for ItemIntegratedCircuit10 { -// /// peek r? -// fn execute_peek(&mut self, vm: &VM, r: &Operand) -> Result<(), ICError>; -// } -// impl PokeInstruction for ItemIntegratedCircuit10 { -// /// poke address(r?|num) value(r?|num) -// fn execute_poke(&mut self, vm: &VM, address: &Operand, value: &Operand) -> Result<(), ICError>; -// } -// impl PopInstruction for ItemIntegratedCircuit10 { -// /// pop r? -// fn execute_pop(&mut self, vm: &VM, r: &Operand) -> Result<(), ICError>; -// } -// impl PushInstruction for ItemIntegratedCircuit10 { -// /// push a(r?|num) -// fn execute_push(&mut self, vm: &VM, a: &Operand) -> Result<(), ICError>; -// } -// impl PutInstruction for ItemIntegratedCircuit10 { -// /// put d? address(r?|num) value(r?|num) -// fn execute_put( -// &mut self, -// vm: &VM, -// d: &Operand, -// address: &Operand, -// value: &Operand, -// ) -> Result<(), ICError>; -// } -// impl PutdInstruction for ItemIntegratedCircuit10 { -// /// putd id(r?|num) address(r?|num) value(r?|num) -// fn execute_putd( -// &mut self, -// vm: &VM, -// id: &Operand, -// address: &Operand, -// value: &Operand, -// ) -> Result<(), ICError>; -// } -// impl RandInstruction for ItemIntegratedCircuit10 { -// /// rand r? -// fn execute_rand(&mut self, vm: &VM, r: &Operand) -> Result<(), ICError>; -// } -// impl RoundInstruction for ItemIntegratedCircuit10 { -// /// round r? a(r?|num) -// fn execute_round(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl SInstruction for ItemIntegratedCircuit10 { -// /// s d? logicType r? -// fn execute_s( -// &mut self, -// vm: &VM, -// d: &Operand, -// logic_type: &Operand, -// r: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SapInstruction for ItemIntegratedCircuit10 { -// /// sap r? a(r?|num) b(r?|num) c(r?|num) -// fn execute_sap( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// c: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SapzInstruction for ItemIntegratedCircuit10 { -// /// sapz r? a(r?|num) b(r?|num) -// fn execute_sapz( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SbInstruction for ItemIntegratedCircuit10 { -// /// sb deviceHash logicType r? -// fn execute_sb( -// &mut self, -// vm: &VM, -// device_hash: &Operand, -// logic_type: &Operand, -// r: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SbnInstruction for ItemIntegratedCircuit10 { -// /// sbn deviceHash nameHash logicType r? -// fn execute_sbn( -// &mut self, -// vm: &VM, -// device_hash: &Operand, -// name_hash: &Operand, -// logic_type: &Operand, -// r: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SbsInstruction for ItemIntegratedCircuit10 { -// /// sbs deviceHash slotIndex logicSlotType r? -// fn execute_sbs( -// &mut self, -// vm: &VM, -// device_hash: &Operand, -// slot_index: &Operand, -// logic_slot_type: &Operand, -// r: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SdInstruction for ItemIntegratedCircuit10 { -// /// sd id(r?|num) logicType r? -// fn execute_sd( -// &mut self, -// vm: &VM, -// id: &Operand, -// logic_type: &Operand, -// r: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SdnsInstruction for ItemIntegratedCircuit10 { -// /// sdns r? d? -// fn execute_sdns(&mut self, vm: &VM, r: &Operand, d: &Operand) -> Result<(), ICError>; -// } -// impl SdseInstruction for ItemIntegratedCircuit10 { -// /// sdse r? d? -// fn execute_sdse(&mut self, vm: &VM, r: &Operand, d: &Operand) -> Result<(), ICError>; -// } -// impl SelectInstruction for ItemIntegratedCircuit10 { -// /// select r? a(r?|num) b(r?|num) c(r?|num) -// fn execute_select( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// c: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SeqInstruction for ItemIntegratedCircuit10 { -// /// seq r? a(r?|num) b(r?|num) -// fn execute_seq( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SeqzInstruction for ItemIntegratedCircuit10 { -// /// seqz r? a(r?|num) -// fn execute_seqz(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl SgeInstruction for ItemIntegratedCircuit10 { -// /// sge r? a(r?|num) b(r?|num) -// fn execute_sge( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SgezInstruction for ItemIntegratedCircuit10 { -// /// sgez r? a(r?|num) -// fn execute_sgez(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl SgtInstruction for ItemIntegratedCircuit10 { -// /// sgt r? a(r?|num) b(r?|num) -// fn execute_sgt( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SgtzInstruction for ItemIntegratedCircuit10 { -// /// sgtz r? a(r?|num) -// fn execute_sgtz(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl SinInstruction for ItemIntegratedCircuit10 { -// /// sin r? a(r?|num) -// fn execute_sin(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl SlaInstruction for ItemIntegratedCircuit10 { -// /// sla r? a(r?|num) b(r?|num) -// fn execute_sla( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SleInstruction for ItemIntegratedCircuit10 { -// /// sle r? a(r?|num) b(r?|num) -// fn execute_sle( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SlezInstruction for ItemIntegratedCircuit10 { -// /// slez r? a(r?|num) -// fn execute_slez(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl SllInstruction for ItemIntegratedCircuit10 { -// /// sll r? a(r?|num) b(r?|num) -// fn execute_sll( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SltInstruction for ItemIntegratedCircuit10 { -// /// slt r? a(r?|num) b(r?|num) -// fn execute_slt( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SltzInstruction for ItemIntegratedCircuit10 { -// /// sltz r? a(r?|num) -// fn execute_sltz(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl SnaInstruction for ItemIntegratedCircuit10 { -// /// sna r? a(r?|num) b(r?|num) c(r?|num) -// fn execute_sna( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// c: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SnanInstruction for ItemIntegratedCircuit10 { -// /// snan r? a(r?|num) -// fn execute_snan(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl SnanzInstruction for ItemIntegratedCircuit10 { -// /// snanz r? a(r?|num) -// fn execute_snanz(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl SnazInstruction for ItemIntegratedCircuit10 { -// /// snaz r? a(r?|num) b(r?|num) -// fn execute_snaz( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SneInstruction for ItemIntegratedCircuit10 { -// /// sne r? a(r?|num) b(r?|num) -// fn execute_sne( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SnezInstruction for ItemIntegratedCircuit10 { -// /// snez r? a(r?|num) -// fn execute_snez(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl SqrtInstruction for ItemIntegratedCircuit10 { -// /// sqrt r? a(r?|num) -// fn execute_sqrt(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl SraInstruction for ItemIntegratedCircuit10 { -// /// sra r? a(r?|num) b(r?|num) -// fn execute_sra( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SrlInstruction for ItemIntegratedCircuit10 { -// /// srl r? a(r?|num) b(r?|num) -// fn execute_srl( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SsInstruction for ItemIntegratedCircuit10 { -// /// ss d? slotIndex logicSlotType r? -// fn execute_ss( -// &mut self, -// vm: &VM, -// d: &Operand, -// slot_index: &Operand, -// logic_slot_type: &Operand, -// r: &Operand, -// ) -> Result<(), ICError>; -// } -// impl SubInstruction for ItemIntegratedCircuit10 { -// /// sub r? a(r?|num) b(r?|num) -// fn execute_sub( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } -// impl TanInstruction for ItemIntegratedCircuit10 { -// /// tan r? a(r?|num) -// fn execute_tan(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl TruncInstruction for ItemIntegratedCircuit10 { -// /// trunc r? a(r?|num) -// fn execute_trunc(&mut self, vm: &VM, r: &Operand, a: &Operand) -> Result<(), ICError>; -// } -// impl XorInstruction for ItemIntegratedCircuit10 { -// /// xor r? a(r?|num) b(r?|num) -// fn execute_xor( -// &mut self, -// vm: &VM, -// r: &Operand, -// a: &Operand, -// b: &Operand, -// ) -> Result<(), ICError>; -// } +impl IC10Marker for ItemIntegratedCircuit10 {} diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index f0da856..39d71c4 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -15,10 +15,9 @@ use crate::{ macros::tag_object_traits, ObjectID, Slot, }, - VM, }, }; -use std::{collections::BTreeMap, fmt::Debug, rc::Rc}; +use std::{collections::BTreeMap, fmt::Debug}; #[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] pub struct ParentSlotInfo { @@ -63,7 +62,7 @@ tag_object_traits! { fn set_logic(&mut self, lt: LogicType, value: f64, force: bool) -> Result<(), LogicError>; fn get_logic(&self, lt: LogicType) -> Result; fn can_slot_logic_read(&self, slt: LogicSlotType, index: f64) -> bool; - fn get_slot_logic(&self, slt: LogicSlotType, index: f64, vm: &VM) -> Result; + fn get_slot_logic(&self, slt: LogicSlotType, index: f64) -> Result; fn valid_logic_types(&self) -> Vec; fn known_modes(&self) -> Option>; } @@ -78,10 +77,28 @@ tag_object_traits! { pub trait CircuitHolder: Logicable + Storage { fn clear_error(&mut self); fn set_error(&mut self, state: i32); - fn get_logicable_from_index(&self, device: usize, vm: &VM) -> Option; - fn get_logicable_from_index_mut(&self, device: usize, vm: &VM) -> Option; - fn get_logicable_from_id(&self, device: ObjectID, vm: &VM) -> Option; - fn get_logicable_from_id_mut(&self, device: ObjectID, vm: &VM) -> Option; + /// i32::MAX is db + fn get_logicable_from_index( + &self, + device: i32, + connection: Option, + ) -> Option; + /// i32::MAX is db + fn get_logicable_from_index_mut( + &self, + device: i32, + connection: Option, + ) -> Option; + fn get_logicable_from_id( + &self, + device: ObjectID, + connection: Option, + ) -> Option; + fn get_logicable_from_id_mut( + &self, + device: ObjectID, + connection: Option, + ) -> Option; fn get_source_code(&self) -> String; fn set_source_code(&self, code: String); fn get_batch(&self) -> Vec; @@ -102,7 +119,7 @@ tag_object_traits! { } pub trait IntegratedCircuit: Logicable + MemoryWritable + SourceCode + Item { - fn get_circuit_holder(&self, vm: &Rc) -> Option; + fn get_circuit_holder(&self) -> Option; fn get_instruction_pointer(&self) -> f64; fn set_next_instruction(&mut self, next_instruction: f64); fn set_next_instruction_relative(&mut self, offset: f64) { @@ -122,7 +139,9 @@ tag_object_traits! { fn get_stack(&self, addr: f64) -> Result; fn put_stack(&self, addr: f64, val: f64) -> Result; fn get_aliases(&self) -> &BTreeMap; + fn get_aliases_mut(&mut self) -> &mut BTreeMap; fn get_defines(&self) -> &BTreeMap; + fn get_defines_mut(&mut self) -> &mut BTreeMap; fn get_labels(&self) -> &BTreeMap; fn get_state(&self) -> ICState; fn set_state(&mut self, state: ICState); @@ -131,7 +150,7 @@ tag_object_traits! { pub trait Programmable: ICInstructable { fn get_source_code(&self) -> String; fn set_source_code(&self, code: String); - fn step(&mut self, vm: &VM, advance_ip_on_err: bool) -> Result<(), crate::errors::ICError>; + fn step(&mut self, advance_ip_on_err: bool) -> Result<(), crate::errors::ICError>; } pub trait Instructable: MemoryWritable { @@ -149,8 +168,7 @@ tag_object_traits! { slt: LogicSlotType, index: f64, value: f64, - vm: &VM, - force: bool + force: bool, ) -> Result<(), LogicError>; fn connection_list(&self) -> &[Connection]; fn connection_list_mut(&mut self) -> &mut [Connection]; @@ -166,13 +184,9 @@ tag_object_traits! { fn has_reagents(&self) -> bool; } - pub trait WirelessTransmit: Logicable { + pub trait WirelessTransmit: Logicable {} - } - - pub trait WirelessReceive: Logicable { - - } + pub trait WirelessReceive: Logicable {} pub trait Network: Logicable { fn contains(&self, id: &ObjectID) -> bool; @@ -192,7 +206,6 @@ tag_object_traits! { fn get_channel_data(&self) -> &[f64; 8]; } - } impl Debug for dyn Object { diff --git a/xtask/src/generate/instructions.rs b/xtask/src/generate/instructions.rs index 163312a..419d896 100644 --- a/xtask/src/generate/instructions.rs +++ b/xtask/src/generate/instructions.rs @@ -133,7 +133,8 @@ fn write_instruction_trait( instruction: (&str, &stationpedia::Command), ) -> color_eyre::Result<()> { let (name, info) = instruction; - let trait_name = format!("{}Instruction", name.to_case(Case::Pascal)); + let op_name = name.to_case(Case::Pascal); + let trait_name = format!("{op_name}Instruction"); let operands = operand_names(&info.example) .iter() .map(|name| { @@ -148,12 +149,45 @@ fn write_instruction_trait( }) .collect::>() .join(", "); + let operands_inner = operand_names(&info.example) + .iter() + .map(|name| { + let mut n: &str = name; + if n == "str" { + n = "string"; + } + format!( + "{}: &crate::vm::instructions::operands::InstOperand", + n.to_case(Case::Snake) + ) + }) + .collect::>() + .join(", "); + let operand_call = operand_names(&info.example) + .iter() + .enumerate() + .map(|(index, name)| { + let mut n: &str = name; + if n == "str" { + n = "string"; + } + format!( + "&crate::vm::instructions::operands::InstOperand::new({}, InstructionOp::{op_name}, {index})", + n.to_case(Case::Snake) + ) + }) + .collect::>() + .join(", "); let example = utils::strip_color(&info.example); write!( writer, "pub trait {trait_name}: IntegratedCircuit {{\n \ /// {example} \n \ - fn execute_{name}(&mut self, {operands}) -> Result<(), crate::errors::ICError>;\n\ + fn execute_{name}(&mut self, {operands}) -> Result<(), crate::errors::ICError> {{\n \ + {trait_name}::execute_inner(self, {operand_call})\n \ + }}\n \ + /// {example} \n \ + fn execute_inner(&mut self, {operands_inner}) -> Result<(), crate::errors::ICError>;\n\ }}" )?; Ok(()) @@ -176,6 +210,7 @@ fn write_instruction_trait_use(writer: &mut T) -> color_eyre: writer, "\ use crate::vm::object::traits::IntegratedCircuit;\n\ + use crate::vm::instructions::enums::InstructionOp;\n\ " )?; Ok(()) From e928813c0ebb755d4b3aa9d462a7759be988b34b Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Wed, 15 May 2024 16:43:37 -0700 Subject: [PATCH 20/50] rafactor(vm): end instruction impl --- ic10emu/src/errors.rs | 8 + ic10emu/src/interpreter.rs | 673 +---------------- ic10emu/src/interpreter/instructions.rs | 678 ++++++++++++------ ic10emu/src/vm.rs | 10 +- .../structs/integrated_circuit.rs | 174 ++--- ic10emu/src/vm/object/traits.rs | 18 +- 6 files changed, 555 insertions(+), 1006 deletions(-) diff --git a/ic10emu/src/errors.rs b/ic10emu/src/errors.rs index 491de72..1b74d5b 100644 --- a/ic10emu/src/errors.rs +++ b/ic10emu/src/errors.rs @@ -208,6 +208,14 @@ pub enum ICError { BadGeneratedValueParse(String, String), #[error("IC with id {0} is not sloted into a circuit holder")] NoCircuitHolder(ObjectID), + #[error("object {0} is not slot writeable")] + NotSlotWriteable(ObjectID), + #[error("object {0} does not use reagents ")] + NotReagentReadable(ObjectID), + #[error("{0} is not a valid number of sleep seconds")] + SleepDurationError(f64), + #[error("{0} can not be added to {1} ")] + SleepAddtionError(time::Duration, time::OffsetDateTime), } impl ICError { diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index f2566c8..7f683d0 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -1,10 +1,5 @@ use core::f64; use serde_derive::{Deserialize, Serialize}; -use std::{ - cell::{Cell, RefCell}, - ops::Deref, - string::ToString, -}; use std::{ collections::{BTreeMap, HashSet}, fmt::Display, @@ -18,22 +13,9 @@ use time::format_description; use crate::{ errors::{ICError, LineError}, grammar, - vm::{ - enums::{ - basic_enums::Class as SlotClass, - script_enums::{LogicSlotType, LogicType}, - }, - instructions::{ - enums::InstructionOp, - operands::{DeviceSpec, Operand, RegisterSpec}, - Instruction, - }, - VM, - }, + vm::instructions::{enums::InstructionOp, Instruction}, }; -use serde_with::serde_as; - pub mod instructions; #[derive(Debug, Clone, Serialize, Deserialize)] @@ -42,8 +24,9 @@ pub enum ICState { Running, Yield, Sleep(time::OffsetDateTime, f64), - HasCaughtFire, Error(LineError), + HasCaughtFire, + Ended, } impl Display for ICState { @@ -51,7 +34,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); @@ -62,88 +45,12 @@ 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)] pub struct Program { pub instructions: Vec, @@ -166,6 +73,10 @@ impl Program { } } + pub fn len(&self) -> usize { + self.instructions.len() + } + pub fn try_from_code(code: &str) -> Result { let parse_tree = grammar::parse(code)?; let mut labels_set = HashSet::new(); @@ -255,570 +166,6 @@ impl Program { } } -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 propagate_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 == SlotClass::ProgrammableChip) - { - let _ = slot.set_field(LogicSlotType::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 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 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 - Clr => Ok(()), // TODO - Clrd => Ok(()), // TODO - Label => Ok(()), // NOP - - 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 == LogicSlotType::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.propagate_line_number(vm); - } - result - } -} - -#[allow(dead_code)] -const CHANNEL_LOGIC_TYPES: [LogicType; 8] = [ - LogicType::Channel0, - LogicType::Channel1, - LogicType::Channel2, - LogicType::Channel3, - LogicType::Channel4, - LogicType::Channel5, - LogicType::Channel6, - LogicType::Channel7, -]; - -trait LogicTypeExt { - fn as_channel(&self) -> Option; -} -impl LogicTypeExt for LogicType { - fn as_channel(&self) -> Option { - match self { - LogicType::Channel0 => Some(0), - LogicType::Channel1 => Some(1), - LogicType::Channel2 => Some(2), - LogicType::Channel3 => Some(3), - LogicType::Channel4 => Some(4), - LogicType::Channel5 => Some(5), - LogicType::Channel6 => Some(6), - 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 { @@ -838,7 +185,7 @@ pub fn i64_to_f64(i: i64) -> f64 { #[cfg(test)] mod tests { - use crate::errors::VMError; + use crate::{errors::VMError, vm::VM}; use super::*; diff --git a/ic10emu/src/interpreter/instructions.rs b/ic10emu/src/interpreter/instructions.rs index e7ce18c..6fcb4c0 100644 --- a/ic10emu/src/interpreter/instructions.rs +++ b/ic10emu/src/interpreter/instructions.rs @@ -2,6 +2,7 @@ use crate::{ errors::ICError, interpreter::{i64_to_f64, ICState}, vm::{ + enums::script_enums::LogicReagentMode, instructions::{ operands::{InstOperand, RegisterSpec}, traits::*, @@ -1967,15 +1968,14 @@ impl GetInstruction for T { } = r.as_register(self)?; let address = address.as_value(self)?; let (device, connection) = d.as_device(self)?; - let Some(logicable) = self + let logicable = self .get_circuit_holder() .ok_or(ICError::NoCircuitHolder(self.get_id()))? - .get_logicable_from_index(device, connection) else { - return Err(ICError::DeviceNotSet); - }; - let Some(memory) = logicable.as_memory_readable() else { - return Err(MemoryError::NotReadable.into()); - }; + .get_logicable_from_index(device, connection) + .ok_or(ICError::DeviceNotSet)?; + let memory = logicable + .as_memory_readable() + .ok_or(MemoryError::NotReadable)?; self.set_register(indirection, target, memory.get_memory(address as i32)?)?; Ok(()) } @@ -1995,15 +1995,14 @@ impl GetdInstruction for T { } = r.as_register(self)?; let id = id.as_value(self)?; let address = address.as_value(self)?; - let Some(logicable) = self + let logicable = self .get_circuit_holder() .ok_or(ICError::NoCircuitHolder(self.get_id()))? - .get_logicable_from_id(id as ObjectID, None) else { - return Err(ICError::UnknownDeviceId(id)); - }; - let Some(memory) = logicable.as_memory_readable() else { - return Err(MemoryError::NotReadable.into()); - }; + .get_logicable_from_id(id as ObjectID, None) + .ok_or(ICError::DeviceNotSet)?; + let memory = logicable + .as_memory_readable() + .ok_or(MemoryError::NotReadable)?; self.set_register(indirection, target, memory.get_memory(address as i32)?)?; Ok(()) } @@ -2020,15 +2019,14 @@ impl PutInstruction for T { let (device, connection) = d.as_device(self)?; let address = address.as_value(self)?; let value = value.as_value(self)?; - let Some(logicable) = self + let logicable = self .get_circuit_holder() .ok_or(ICError::NoCircuitHolder(self.get_id()))? - .get_logicable_from_index_mut(device, connection) else { - return Err(ICError::DeviceNotSet); - }; - let Some(memory) = logicable.as_memory_writable() else { - return Err(MemoryError::NotWriteable.into()); - }; + .get_logicable_from_index_mut(device, connection) + .ok_or(ICError::DeviceNotSet)?; + let memory = logicable + .as_memory_writable() + .ok_or(MemoryError::NotWriteable)?; memory.set_memory(address as i32, value)?; Ok(()) } @@ -2045,15 +2043,14 @@ impl PutdInstruction for T { let id = id.as_value(self)?; let address = address.as_value(self)?; let value = value.as_value(self)?; - let Some(logicable) = self + let logicable = self .get_circuit_holder() .ok_or(ICError::NoCircuitHolder(self.get_id()))? - .get_logicable_from_id_mut(id as ObjectID, None) else { - return Err(ICError::DeviceNotSet); - }; - let Some(memory) = logicable.as_memory_writable() else { - return Err(MemoryError::NotWriteable.into()); - }; + .get_logicable_from_id_mut(id as ObjectID, None) + .ok_or(ICError::DeviceNotSet)?; + let memory = logicable + .as_memory_writable() + .ok_or(MemoryError::NotWriteable)?; memory.set_memory(address as i32, value)?; Ok(()) } @@ -2061,202 +2058,463 @@ impl PutdInstruction for T { impl ClrInstruction for T { /// clr d? - fn execute_inner(&mut self, d: &InstOperand) -> Result<(), ICError> { + fn execute_inner(&mut self, d: &InstOperand) -> Result<(), ICError> { let (device, connection) = d.as_device(self)?; - let Some(logicable) = self + let logicable = self .get_circuit_holder() .ok_or(ICError::NoCircuitHolder(self.get_id()))? - .get_logicable_from_index_mut(device, connection) else { - return Err(ICError::DeviceNotSet); - }; - let Some(memory) = logicable.as_memory_writable() else { - return Err(MemoryError::NotWriteable.into()); - }; + .get_logicable_from_index_mut(device, connection) + .ok_or(ICError::DeviceNotSet)?; + let memory = logicable + .as_memory_writable() + .ok_or(MemoryError::NotWriteable)?; memory.clear_memory()?; Ok(()) } } impl ClrdInstruction for T { /// clrd id(r?|num) - fn execute_inner(&mut self, id: &InstOperand) -> Result<(), ICError> { + fn execute_inner(&mut self, id: &InstOperand) -> Result<(), ICError> { let id = id.as_value(self)?; - let Some(logicable) = self + let logicable = self .get_circuit_holder() .ok_or(ICError::NoCircuitHolder(self.get_id()))? - .get_logicable_from_id_mut(id as ObjectID, None) else { - return Err(ICError::DeviceNotSet); - }; - let Some(memory) = logicable.as_memory_writable() else { - return Err(MemoryError::NotWriteable.into()); - }; + .get_logicable_from_id_mut(id as ObjectID, None) + .ok_or(ICError::DeviceNotSet)?; + let memory = logicable + .as_memory_writable() + .ok_or(MemoryError::NotWriteable)?; memory.clear_memory()?; Ok(()) } } -// impl HcfInstruction for T { -// /// hcf -// fn execute_inner(&mut self, vm: &VM) -> Result<(), ICError>; -// } -// impl LInstruction for T { -// /// l r? d? logicType -// fn execute_inner( -// &mut self, -// -// r: &InstOperand, -// d: &InstOperand, -// logic_type: &InstOperand, -// ) -> Result<(), ICError>; -// } -// impl LabelInstruction for T { -// /// label d? str -// fn execute_inner(&mut self, d: &InstOperand, str: &InstOperand) -> Result<(), ICError>; -// } -// 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>; -// } -// 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>; -// } -// 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>; -// } -// 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>; -// } -// impl LdInstruction for T { -// /// ld r? id(r?|num) logicType -// fn execute_inner( -// &mut self, -// -// r: &InstOperand, -// id: &InstOperand, -// logic_type: &InstOperand, -// ) -> Result<(), ICError>; -// } -// impl LogInstruction for T { -// /// log r? a(r?|num) -// fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError>; -// } -// 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>; -// } -// 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>; -// } -// impl SInstruction for T { -// /// s d? logicType r? -// fn execute_inner( -// &mut self, -// -// d: &InstOperand, -// logic_type: &InstOperand, -// r: &InstOperand, -// ) -> Result<(), ICError>; -// } -// impl SbInstruction for T { -// /// sb deviceHash logicType r? -// fn execute_inner( -// &mut self, -// -// device_hash: &InstOperand, -// logic_type: &InstOperand, -// r: &InstOperand, -// ) -> Result<(), ICError>; -// } -// 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>; -// } -// 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>; -// } -// impl SdInstruction for T { -// /// sd id(r?|num) logicType r? -// fn execute_inner( -// &mut self, -// -// id: &InstOperand, -// logic_type: &InstOperand, -// r: &InstOperand, -// ) -> Result<(), ICError>; -// } -// 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>; -// } -// +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)?; + let logicable = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .get_logicable_from_index_mut(device, connection) + .ok_or(ICError::DeviceNotSet)?; + logicable.set_logic(logic_type, val, false)?; + 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)?; + let logicable = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .get_logicable_from_id_mut(id as ObjectID, None) + .ok_or(ICError::DeviceNotSet)?; + logicable.set_logic(logic_type, val, false)?; + 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)?; + let logicable = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .get_logicable_from_index_mut(device, connection) + .ok_or(ICError::DeviceNotSet)?; + let device = logicable + .as_mut_device() + .ok_or(ICError::NotSlotWriteable(logicable.get_id()))?; + device.set_slot_logic(logic_slot_type, slot_index, val, false)?; + 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 logicable = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .get_logicable_from_index(device, connection) + .ok_or(ICError::DeviceNotSet)?; + self.set_register(indirection, target, logicable.get_logic(logic_type)?)?; + 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 logicable = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .get_logicable_from_id(id as ObjectID, None) + .ok_or(ICError::DeviceNotSet)?; + self.set_register(indirection, target, logicable.get_logic(logic_type)?)?; + 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 logicable = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .get_logicable_from_index(device, connection) + .ok_or(ICError::DeviceNotSet)?; + self.set_register( + indirection, + target, + logicable.get_slot_logic(logic_slot_type, slot_index)?, + )?; + 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 (device, connection) = d.as_device(self)?; + let reagent_mode = reagent_mode.as_reagent_mode(self)?; + let int = int.as_value(self)?; + let logicable = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .get_logicable_from_index(device, connection) + .ok_or(ICError::DeviceNotSet)?; + + 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_interface() + .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_interface() + .ok_or(ICError::NotReagentReadable(logicable.get_id()))?; + reagent_interface + .get_current_recipie() + .iter() + .find(|(hash, _)| *hash as f64 == int) + .map(|(_, quantity)| *quantity) + .unwrap_or(0.0) + } + }; + + self.set_register(indirection, target, result)?; + 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()))? + .hault_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(()) + } +} diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index e319d2b..4078960 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -265,7 +265,7 @@ impl VM { .ok_or(VMError::NotProgrammable(id))?; self.operation_modified.borrow_mut().clear(); self.set_modified(id); - programmable.step(self, advance_ip_on_err)?; + programmable.step(advance_ip_on_err)?; Ok(()) } @@ -286,7 +286,7 @@ impl VM { self.operation_modified.borrow_mut().clear(); self.set_modified(id); for _i in 0..128 { - if let Err(err) = programmable.step(self, ignore_errors) { + if let Err(err) = programmable.step( ignore_errors) { if !ignore_errors { return Err(err.into()); } @@ -629,7 +629,7 @@ impl VM { .borrow_mut() .as_mut_device() .expect("batch iter yielded non device") - .set_slot_logic(typ, index, val, self, write_readonly) + .set_slot_logic(typ, index, val, write_readonly) .map_err(Into::into) }) .try_collect() @@ -718,7 +718,7 @@ impl VM { .borrow() .as_device() .expect("batch iter yielded non device") - .get_slot_logic(typ, index, self) + .get_slot_logic(typ, index) .map_err(Into::into) }) .filter_ok(|val| !val.is_nan()) @@ -741,7 +741,7 @@ impl VM { .borrow() .as_device() .expect("batch iter yielded non device") - .get_slot_logic(typ, index, self) + .get_slot_logic(typ, index) .map_err(Into::into) }) .filter_ok(|val| !val.is_nan()) diff --git a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs index 2ca717d..c517e50 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs @@ -1,18 +1,12 @@ use crate::{ - errors::{ICError, LineError}, - grammar, - interpreter::{ICState, instructions::IC10Marker}, + errors::ICError, + interpreter::{instructions::IC10Marker, ICState, Program}, vm::{ enums::{ basic_enums::{Class as SlotClass, GasType, SortingClass}, script_enums::{LogicSlotType, LogicType}, }, - instructions::{ - enums::InstructionOp, - operands::{DeviceSpec, Operand, RegisterSpec}, - traits::*, - Instruction, - }, + instructions::{operands::Operand, Instruction}, object::{ errors::{LogicError, MemoryError}, macros::ObjectInterface, @@ -22,124 +16,8 @@ use crate::{ VM, }, }; -use itertools::Itertools; use macro_rules_attribute::derive; -use serde_derive::{Deserialize, Serialize}; -use std::{ - collections::{BTreeMap, HashSet}, - rc::Rc, -}; - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct Program { - pub instructions: Vec, - pub errors: Vec, - pub labels: BTreeMap, -} - -impl Default for Program { - fn default() -> Self { - Program::new() - } -} - -impl Program { - pub fn new() -> Self { - Program { - instructions: Vec::new(), - errors: Vec::new(), - labels: BTreeMap::new(), - } - } - - pub fn try_from_code(code: &str) -> Result { - let parse_tree = grammar::parse(code)?; - let mut labels_set = HashSet::new(); - let mut labels = BTreeMap::new(); - let errors = Vec::new(); - let instructions = parse_tree - .into_iter() - .enumerate() - .map(|(line_number, line)| match line.code { - 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)) - } else { - labels_set.insert(label.id.name.clone()); - labels.insert(label.id.name, line_number as u32); - Ok(Instruction { - instruction: InstructionOp::Nop, - operands: vec![], - }) - } - } - grammar::Code::Instruction(instruction) => Ok(instruction), - grammar::Code::Invalid(err) => Err(err.into()), - }, - }) - .try_collect()?; - Ok(Program { - instructions, - errors, - labels, - }) - } - - pub fn from_code_with_invalid(code: &str) -> Self { - let parse_tree = grammar::parse_with_invalid(code); - let mut labels_set = HashSet::new(); - let mut labels = BTreeMap::new(); - let mut errors = Vec::new(); - let instructions = parse_tree - .into_iter() - .enumerate() - .map(|(line_number, line)| match line.code { - 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)); - } else { - labels_set.insert(label.id.name.clone()); - labels.insert(label.id.name, line_number as u32); - } - Instruction { - instruction: InstructionOp::Nop, - operands: vec![], - } - } - grammar::Code::Instruction(instruction) => instruction, - grammar::Code::Invalid(err) => { - errors.push(err.into()); - Instruction { - instruction: InstructionOp::Nop, - operands: vec![], - } - } - }, - }) - .collect_vec(); - Program { - instructions, - errors, - labels, - } - } - - pub fn get_line(&self, line: usize) -> Result<&Instruction, ICError> { - self.instructions - .get(line) - .ok_or(ICError::InstructionPointerOutOfRange(line)) - } -} +use std::{collections::BTreeMap, rc::Rc}; static RETURN_ADDRESS_INDEX: usize = 17; static STACK_POINTER_INDEX: usize = 16; @@ -219,6 +97,7 @@ impl Storage for ItemIntegratedCircuit10 { &mut [] } } + impl Logicable for ItemIntegratedCircuit10 { fn prefab_hash(&self) -> i32 { self.get_prefab().hash @@ -487,3 +366,46 @@ impl IntegratedCircuit for ItemIntegratedCircuit10 { } impl IC10Marker for ItemIntegratedCircuit10 {} + +impl Programmable for ItemIntegratedCircuit10 { + fn step(&mut self, advance_ip_on_err: bool) -> Result<(), crate::errors::ICError> { + if matches!(&self.state, ICState::HasCaughtFire | ICState::Error(_)) { + 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) { + if sleep_till + <= time::OffsetDateTime::now_local() + .unwrap_or_else(|_| time::OffsetDateTime::now_utc()) + { + return Ok(()); + } + // else sleep duration ended, continue + } else { + return Err(ICError::SleepAddtionError(duration, *then)); + } + } else { + return Err(ICError::SleepDurationError(*sleep_for)); + } + } + if self.ip >= self.program.len() || self.program.len() == 0 { + self.state = ICState::Ended; + return Ok(()); + } + self.next_ip = self.ip + 1; + self.state = ICState::Running; + let line = self.program.get_line(self.ip)?; + let operands = &line.operands; + let instruction = line.instruction; + instruction.execute(self, operands)?; + self.ip = self.next_ip; + if self.ip >= self.program.len() { + self.state = ICState::Ended; + } + self.get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(self.id))? + .set_logic(LogicType::LineNumber, self.ip as f64, true)?; + Ok(()) + } +} diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index 39d71c4..4473602 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -104,6 +104,7 @@ tag_object_traits! { fn get_batch(&self) -> Vec; fn get_batch_mut(&self) -> Vec; fn get_ic(&self) -> Option; + fn hault_and_catch_fire(&mut self); } pub trait Item { @@ -148,8 +149,6 @@ tag_object_traits! { } pub trait Programmable: ICInstructable { - fn get_source_code(&self) -> String; - fn set_source_code(&self, code: String); fn step(&mut self, advance_ip_on_err: bool) -> Result<(), crate::errors::ICError>; } @@ -182,8 +181,23 @@ tag_object_traits! { fn has_on_off_state(&self) -> bool; fn has_open_state(&self) -> bool; fn has_reagents(&self) -> bool; + /// return vector of (reagent_hash, quantity) pairs + fn get_reagents(&self) -> Vec<(i32, f64)>; + /// overwrite present reagents + fn set_reagents(&mut self, reagents: &[(i32, f64)]); + /// adds the reagents to contents + fn add_reagents(&mut self, reagents: &[(i32, f64)]); } + pub trait ReagentInterface: Device { + /// reagents required by current recipe + fn get_current_recipie(&self) -> Vec<(i32, f64)>; + /// reagents required to complete current recipe + fn get_current_required(&self) -> Vec<(i32, f64)>; + } + + pub trait Fabricator: ReagentInterface {} + pub trait WirelessTransmit: Logicable {} pub trait WirelessReceive: Logicable {} From cc6cc355dc67385bca0e4b407b85f06fa1a16e42 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Wed, 15 May 2024 22:32:46 -0700 Subject: [PATCH 21/50] refactor(vm): cleanup borrow usage, impl slot logic --- ic10emu/src/device.rs | 907 ------------------ ic10emu/src/errors.rs | 4 + ic10emu/src/interpreter/instructions.rs | 208 +++- ic10emu/src/lib.rs | 1 - ic10emu/src/network.rs | 15 +- ic10emu/src/vm.rs | 185 ++-- ic10emu/src/vm/instructions/operands.rs | 12 +- ic10emu/src/vm/object.rs | 1 + ic10emu/src/vm/object/generic/macros.rs | 20 +- ic10emu/src/vm/object/generic/structs.rs | 8 + ic10emu/src/vm/object/generic/traits.rs | 249 ++++- .../structs/integrated_circuit.rs | 40 +- ic10emu/src/vm/object/templates.rs | 99 +- ic10emu/src/vm/object/traits.rs | 56 +- 14 files changed, 687 insertions(+), 1118 deletions(-) delete mode 100644 ic10emu/src/device.rs diff --git a/ic10emu/src/device.rs b/ic10emu/src/device.rs deleted file mode 100644 index d191f47..0000000 --- a/ic10emu/src/device.rs +++ /dev/null @@ -1,907 +0,0 @@ -use crate::{ - errors::ICError, - interpreter::ICState, - network::{CableConnectionType, Connection}, - vm::enums::{ - basic_enums::{Class as SlotClass, SortingClass}, - script_enums::{LogicReagentMode as ReagentMode, LogicSlotType, LogicType}, - }, - vm::VM, -}; -use std::{collections::BTreeMap, ops::Deref}; - -use itertools::Itertools; - -use serde_derive::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] -pub enum MemoryAccess { - Read, - Write, - ReadWrite, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct LogicField { - pub field_type: MemoryAccess, - 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(&LogicSlotType::PrefabHash) - .map(|field| field.value as i32) - .unwrap_or(0), - quantity: fields - .remove(&LogicSlotType::Quantity) - .map(|field| field.value as u32) - .unwrap_or(1), - max_quantity: fields - .remove(&LogicSlotType::MaxQuantity) - .map(|field| field.value as u32) - .unwrap_or(1), - damage: fields - .remove(&LogicSlotType::Damage) - .map(|field| field.value) - .unwrap_or(0.0), - sorting_class: fields - .remove(&LogicSlotType::SortingClass) - .map(|field| SortingClass::from_repr(field.value as u8)) - .flatten() - .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( - LogicSlotType::PrefabHash, - LogicField { - field_type: MemoryAccess::Read, - value: self.prefab_hash as f64, - }, - ); - copy.insert( - LogicSlotType::SortingClass, - LogicField { - field_type: MemoryAccess::Read, - value: self.sorting_class as u32 as f64, - }, - ); - copy.insert( - LogicSlotType::Quantity, - LogicField { - field_type: MemoryAccess::Read, - value: self.quantity as f64, - }, - ); - copy.insert( - LogicSlotType::MaxQuantity, - LogicField { - field_type: MemoryAccess::Read, - value: self.max_quantity as f64, - }, - ); - copy.insert( - LogicSlotType::Damage, - LogicField { - field_type: MemoryAccess::Read, - value: self.damage, - }, - ); - copy - } - - pub fn set_field(&mut self, typ: LogicSlotType, val: f64, force: bool) -> Result<(), ICError> { - if (typ == LogicSlotType::Quantity) && force { - self.quantity = val as u32; - Ok(()) - } else if (typ == LogicSlotType::MaxQuantity) && force { - self.max_quantity = val as u32; - Ok(()) - } else if (typ == LogicSlotType::Damage) && force { - self.damage = val; - Ok(()) - } else if let Some(logic) = self.fields.get_mut(&typ) { - match logic.field_type { - MemoryAccess::ReadWrite | MemoryAccess::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: MemoryAccess::ReadWrite, - value: val, - }, - ); - Ok(()) - } else { - Err(ICError::ReadOnlyField(typ.to_string())) - } - } - - pub fn can_logic_read(&self, field: LogicSlotType) -> bool { - if let Some(logic) = self.fields.get(&field) { - matches!( - logic.field_type, - MemoryAccess::Read | MemoryAccess::ReadWrite - ) - } else { - false - } - } - - pub fn can_logic_write(&self, field: LogicSlotType) -> bool { - if let Some(logic) = self.fields.get(&field) { - matches!( - logic.field_type, - MemoryAccess::Write | MemoryAccess::ReadWrite - ) - } else { - false - } - } -} - -#[derive(Debug, Default, Clone, Serialize, Deserialize)] -pub struct Slot { - pub typ: SlotClass, - pub occupant: Option, -} - -#[derive(Debug, Default, Clone, Serialize, Deserialize)] -pub struct SlotTemplate { - pub typ: SlotClass, - pub occupant: Option, -} - -impl Slot { - pub fn new(typ: SlotClass) -> Self { - Slot { - typ, - occupant: None, - } - } - pub fn with_occupant(typ: SlotClass, 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( - LogicSlotType::Occupied, - LogicField { - field_type: MemoryAccess::Read, - value: if self.occupant.is_some() { 1.0 } else { 0.0 }, - }, - ); - copy.insert( - LogicSlotType::OccupantHash, - LogicField { - field_type: MemoryAccess::Read, - value: self - .occupant - .as_ref() - .map(|occupant| occupant.prefab_hash as f64) - .unwrap_or(0.0), - }, - ); - copy.insert( - LogicSlotType::Quantity, - LogicField { - field_type: MemoryAccess::Read, - value: self - .occupant - .as_ref() - .map(|occupant| occupant.quantity as f64) - .unwrap_or(0.0), - }, - ); - copy.insert( - LogicSlotType::Damage, - LogicField { - field_type: MemoryAccess::Read, - value: self - .occupant - .as_ref() - .map(|occupant| occupant.damage) - .unwrap_or(0.0), - }, - ); - copy.insert( - LogicSlotType::Class, - LogicField { - field_type: MemoryAccess::Read, - value: self.typ as u32 as f64, - }, - ); - copy.insert( - LogicSlotType::MaxQuantity, - LogicField { - field_type: MemoryAccess::Read, - value: self - .occupant - .as_ref() - .map(|occupant| occupant.max_quantity as f64) - .unwrap_or(0.0), - }, - ); - copy.insert( - LogicSlotType::PrefabHash, - LogicField { - field_type: MemoryAccess::Read, - value: self - .occupant - .as_ref() - .map(|occupant| occupant.prefab_hash as f64) - .unwrap_or(0.0), - }, - ); - copy.insert( - LogicSlotType::SortingClass, - LogicField { - field_type: MemoryAccess::Read, - value: self - .occupant - .as_ref() - .map(|occupant| occupant.sorting_class as u32 as f64) - .unwrap_or(0.0), - }, - ); - copy.insert( - LogicSlotType::ReferenceId, - LogicField { - field_type: MemoryAccess::Read, - value: self - .occupant - .as_ref() - .map(|occupant| occupant.id as f64) - .unwrap_or(0.0), - }, - ); - copy - } - - pub fn get_field(&self, field: LogicSlotType) -> f64 { - let fields = self.get_fields(); - fields - .get(&field) - .map(|field| match field.field_type { - MemoryAccess::Read | MemoryAccess::ReadWrite => field.value, - _ => 0.0, - }) - .unwrap_or(0.0) - } - - pub fn can_logic_read(&self, field: LogicSlotType) -> bool { - match field { - LogicSlotType::Pressure | LogicSlotType::Temperature | LogicSlotType::Volume => { - matches!( - self.typ, - SlotClass::GasCanister | SlotClass::LiquidCanister | SlotClass::LiquidBottle - ) - } - LogicSlotType::Charge | LogicSlotType::ChargeRatio => { - matches!(self.typ, SlotClass::Battery) - } - LogicSlotType::Open => matches!( - self.typ, - SlotClass::Helmet | SlotClass::Tool | SlotClass::Appliance - ), - LogicSlotType::Lock => matches!(self.typ, SlotClass::Helmet), - LogicSlotType::FilterType => matches!(self.typ, SlotClass::GasFilter), - _ => { - if let Some(occupant) = self.occupant.as_ref() { - occupant.can_logic_read(field) - } else { - false - } - } - } - } - - pub fn can_logic_write(&self, field: LogicSlotType) -> bool { - match field { - LogicSlotType::Open => matches!( - self.typ, - SlotClass::Helmet - | SlotClass::GasCanister - | SlotClass::LiquidCanister - | SlotClass::LiquidBottle - ), - LogicSlotType::On => matches!( - self.typ, - SlotClass::Helmet | SlotClass::Tool | SlotClass::Appliance - ), - LogicSlotType::Lock => matches!(self.typ, SlotClass::Helmet), - _ => { - if let Some(occupant) = self.occupant.as_ref() { - occupant.can_logic_write(field) - } else { - false - } - } - } - } - - pub fn set_field(&mut self, typ: LogicSlotType, val: f64, force: bool) -> Result<(), ICError> { - if matches!( - typ, - LogicSlotType::Occupied - | LogicSlotType::OccupantHash - | LogicSlotType::Class - | LogicSlotType::PrefabHash - | LogicSlotType::SortingClass - | LogicSlotType::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, 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: MemoryAccess::ReadWrite, - value: 0.0, - }, - ), - ( - LogicType::RequiredPower, - LogicField { - field_type: MemoryAccess::Read, - value: 0.0, - }, - ), - ( - LogicType::PrefabHash, - LogicField { - field_type: MemoryAccess::Read, - value: -128473777.0, - }, - ), - ]); - let occupant = SlotOccupant::new(ic, -744098481); - device.slots.push(Slot::with_occupant( - SlotClass::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 - .circuit_holders - .get(ic_id) - .expect("our own ic to exist") - .borrow(); - copy.insert( - LogicType::LineNumber, - LogicField { - field_type: MemoryAccess::ReadWrite, - value: ic.ip() as f64, - }, - ); - copy.insert( - LogicType::Error, - LogicField { - field_type: MemoryAccess::Read, - value: match *ic.state.borrow() { - ICState::Error(_) => 1.0, - _ => 0.0, - }, - }, - ); - } - if self.has_power_state() { - copy.insert( - LogicType::Power, - LogicField { - field_type: MemoryAccess::Read, - value: if self.has_power_connection() { - 1.0 - } else { - 0.0 - }, - }, - ); - } - copy.insert( - LogicType::ReferenceId, - LogicField { - field_type: MemoryAccess::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, - MemoryAccess::Read | MemoryAccess::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, - MemoryAccess::Write | MemoryAccess::ReadWrite - ) - } else { - false - } - } - } - } - - pub fn can_slot_logic_read(&self, field: LogicSlotType, 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: LogicSlotType, 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 - .circuit_holders - .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 == MemoryAccess::Read || field.field_type == MemoryAccess::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 - .circuit_holders - .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 == MemoryAccess::Write - || field.field_type == MemoryAccess::ReadWrite - || force - { - field.value = val; - Ok(()) - } else { - Err(ICError::ReadOnlyField(typ.to_string())) - } - } else if force { - self.fields.insert( - typ, - LogicField { - field_type: MemoryAccess::ReadWrite, - value: val, - }, - ); - Ok(()) - } else { - Err(ICError::DeviceHasNoField(typ.to_string())) - } - } - - pub fn get_slot_field(&self, index: f64, typ: LogicSlotType, vm: &VM) -> Result { - let slot = self - .slots - .get(index as usize) - .ok_or(ICError::SlotIndexOutOfRange(index))?; - if slot.typ == SlotClass::ProgrammableChip - && slot.occupant.is_some() - && self.ic.is_some() - && typ == LogicSlotType::LineNumber - { - let ic = vm - .circuit_holders - .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 == SlotClass::ProgrammableChip && slot.occupant.is_some() && self.ic.is_some() { - let ic = vm - .circuit_holders - .get(&self.ic.unwrap()) - .ok_or_else(|| ICError::UnknownDeviceID(self.ic.unwrap() as f64))? - .borrow(); - fields.insert( - LogicSlotType::LineNumber, - LogicField { - field_type: MemoryAccess::ReadWrite, - value: ic.ip() as f64, - }, - ); - } - Ok(fields) - } - - pub fn set_slot_field( - &mut self, - index: f64, - typ: LogicSlotType, - 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 == SlotClass::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 index 1b74d5b..4259192 100644 --- a/ic10emu/src/errors.rs +++ b/ic10emu/src/errors.rs @@ -208,10 +208,14 @@ pub enum ICError { BadGeneratedValueParse(String, String), #[error("IC with id {0} is not sloted into a circuit holder")] NoCircuitHolder(ObjectID), + #[error("IC with id {0} is sloted 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("{0} can not be added to {1} ")] diff --git a/ic10emu/src/interpreter/instructions.rs b/ic10emu/src/interpreter/instructions.rs index 6fcb4c0..82d5833 100644 --- a/ic10emu/src/interpreter/instructions.rs +++ b/ic10emu/src/interpreter/instructions.rs @@ -7,7 +7,11 @@ use crate::{ operands::{InstOperand, RegisterSpec}, traits::*, }, - object::{errors::MemoryError, traits::*, ObjectID}, + object::{ + errors::{LogicError, MemoryError}, + traits::*, + ObjectID, + }, }, }; pub trait IC10Marker: IntegratedCircuit {} @@ -862,6 +866,9 @@ impl BdseInstruction for T { 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() { @@ -879,6 +886,9 @@ impl BdsealInstruction for T { 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() { @@ -897,6 +907,9 @@ impl BrdseInstruction for T { 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() { @@ -914,6 +927,9 @@ impl BdnsInstruction for T { 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() { @@ -931,6 +947,9 @@ impl BdnsalInstruction for T { 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() { @@ -949,6 +968,9 @@ impl BrdnsInstruction for T { 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() { @@ -1319,15 +1341,14 @@ impl SdseInstruction for T { target, } = r.as_register(self)?; let (device, connection) = d.as_device(self)?; - let logicable = self + let obj = 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); - self.set_register( - indirection, - target, - if logicable.is_some() { 1.0 } else { 0.0 }, - )?; + self.set_register(indirection, target, if obj.is_some() { 1.0 } else { 0.0 })?; Ok(()) } } @@ -1339,15 +1360,14 @@ impl SdnsInstruction for T { target, } = r.as_register(self)?; let (device, connection) = d.as_device(self)?; - let logicable = self + let obj = 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); - self.set_register( - indirection, - target, - if logicable.is_none() { 1.0 } else { 0.0 }, - )?; + self.set_register(indirection, target, if obj.is_none() { 1.0 } else { 0.0 })?; Ok(()) } } @@ -1968,12 +1988,16 @@ impl GetInstruction for T { } = r.as_register(self)?; let address = address.as_value(self)?; let (device, connection) = d.as_device(self)?; - let logicable = self + let obj = 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)?; - let memory = logicable + let obj_ref = obj.borrow(); + let memory = obj_ref .as_memory_readable() .ok_or(MemoryError::NotReadable)?; self.set_register(indirection, target, memory.get_memory(address as i32)?)?; @@ -1995,12 +2019,16 @@ impl GetdInstruction for T { } = r.as_register(self)?; let id = id.as_value(self)?; let address = address.as_value(self)?; - let logicable = self + let obj = 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)?; - let memory = logicable + let obj_ref = obj.borrow(); + let memory = obj_ref .as_memory_readable() .ok_or(MemoryError::NotReadable)?; self.set_register(indirection, target, memory.get_memory(address as i32)?)?; @@ -2019,13 +2047,17 @@ impl PutInstruction for T { let (device, connection) = d.as_device(self)?; let address = address.as_value(self)?; let value = value.as_value(self)?; - let logicable = self + let obj = self .get_circuit_holder() .ok_or(ICError::NoCircuitHolder(self.get_id()))? - .get_logicable_from_index_mut(device, connection) + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(self.get_id()))? + .get_logicable_from_index(device, connection) .ok_or(ICError::DeviceNotSet)?; - let memory = logicable - .as_memory_writable() + let mut obj_ref = obj.borrow_mut(); + let memory = obj_ref + .as_mut_memory_writable() .ok_or(MemoryError::NotWriteable)?; memory.set_memory(address as i32, value)?; Ok(()) @@ -2043,13 +2075,17 @@ impl PutdInstruction for T { let id = id.as_value(self)?; let address = address.as_value(self)?; let value = value.as_value(self)?; - let logicable = self + let obj = self .get_circuit_holder() .ok_or(ICError::NoCircuitHolder(self.get_id()))? - .get_logicable_from_id_mut(id as ObjectID, None) + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(self.get_id()))? + .get_logicable_from_id(id as ObjectID, None) .ok_or(ICError::DeviceNotSet)?; - let memory = logicable - .as_memory_writable() + let mut obj_ref = obj.borrow_mut(); + let memory = obj_ref + .as_mut_memory_writable() .ok_or(MemoryError::NotWriteable)?; memory.set_memory(address as i32, value)?; Ok(()) @@ -2060,13 +2096,17 @@ impl ClrInstruction for T { /// clr d? fn execute_inner(&mut self, d: &InstOperand) -> Result<(), ICError> { let (device, connection) = d.as_device(self)?; - let logicable = self + let obj = self .get_circuit_holder() .ok_or(ICError::NoCircuitHolder(self.get_id()))? - .get_logicable_from_index_mut(device, connection) + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(self.get_id()))? + .get_logicable_from_index(device, connection) .ok_or(ICError::DeviceNotSet)?; - let memory = logicable - .as_memory_writable() + let mut obj_ref = obj.borrow_mut(); + let memory = obj_ref + .as_mut_memory_writable() .ok_or(MemoryError::NotWriteable)?; memory.clear_memory()?; Ok(()) @@ -2076,13 +2116,17 @@ impl ClrdInstruction for T { /// clrd id(r?|num) fn execute_inner(&mut self, id: &InstOperand) -> Result<(), ICError> { let id = id.as_value(self)?; - let logicable = self + let obj = self .get_circuit_holder() .ok_or(ICError::NoCircuitHolder(self.get_id()))? - .get_logicable_from_id_mut(id as ObjectID, None) + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(self.get_id()))? + .get_logicable_from_id(id as ObjectID, None) .ok_or(ICError::DeviceNotSet)?; - let memory = logicable - .as_memory_writable() + let mut obj_ref = obj.borrow_mut(); + let memory = obj_ref + .as_mut_memory_writable() .ok_or(MemoryError::NotWriteable)?; memory.clear_memory()?; Ok(()) @@ -2100,11 +2144,22 @@ impl SInstruction for T { let (device, connection) = d.as_device(self)?; let logic_type = logic_type.as_logic_type(self)?; let val = r.as_value(self)?; - let logicable = self + let obj = self .get_circuit_holder() .ok_or(ICError::NoCircuitHolder(self.get_id()))? - .get_logicable_from_index_mut(device, connection) + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(self.get_id()))? + .get_logicable_from_index(device, connection) .ok_or(ICError::DeviceNotSet)?; + let mut obj_ref = obj.borrow_mut(); + let device_id = obj_ref.get_id(); + let logicable = obj_ref + .as_mut_logicable() + .ok_or(ICError::NotLogicable(device_id))?; + if !logicable.can_logic_write(logic_type) { + return Err(LogicError::CantWrite(logic_type).into()); + } logicable.set_logic(logic_type, val, false)?; Ok(()) } @@ -2121,11 +2176,22 @@ impl SdInstruction for T { let id = id.as_value(self)?; let logic_type = logic_type.as_logic_type(self)?; let val = r.as_value(self)?; - let logicable = self + let obj = self .get_circuit_holder() .ok_or(ICError::NoCircuitHolder(self.get_id()))? - .get_logicable_from_id_mut(id as ObjectID, None) + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(self.get_id()))? + .get_logicable_from_id(id as ObjectID, None) .ok_or(ICError::DeviceNotSet)?; + let mut obj_ref = obj.borrow_mut(); + let device_id = obj_ref.get_id(); + let logicable = obj_ref + .as_mut_logicable() + .ok_or(ICError::NotLogicable(device_id))?; + if !logicable.can_logic_write(logic_type) { + return Err(LogicError::CantWrite(logic_type).into()); + } logicable.set_logic(logic_type, val, false)?; Ok(()) } @@ -2144,14 +2210,26 @@ impl SsInstruction for T { 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)?; - let logicable = self + let obj = self .get_circuit_holder() .ok_or(ICError::NoCircuitHolder(self.get_id()))? - .get_logicable_from_index_mut(device, connection) + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(self.get_id()))? + .get_logicable_from_index(device, connection) .ok_or(ICError::DeviceNotSet)?; + let mut obj_ref = obj.borrow_mut(); + let device_id = obj_ref.get_id(); + let logicable = obj_ref + .as_mut_logicable() + .ok_or(ICError::NotLogicable(device_id))?; + let device_id = logicable.get_id(); let device = logicable .as_mut_device() - .ok_or(ICError::NotSlotWriteable(logicable.get_id()))?; + .ok_or(ICError::NotSlotWriteable(device_id))?; + if !device.can_slot_logic_write(logic_slot_type, slot_index) { + return Err(LogicError::CantSlotWrite(logic_slot_type, slot_index).into()); + } device.set_slot_logic(logic_slot_type, slot_index, val, false)?; Ok(()) } @@ -2242,11 +2320,21 @@ impl LInstruction for T { } = r.as_register(self)?; let (device, connection) = d.as_device(self)?; let logic_type = logic_type.as_logic_type(self)?; - let logicable = self + let obj = 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)?; + let obj_ref = obj.borrow(); + let logicable = obj_ref + .as_logicable() + .ok_or(ICError::NotLogicable(obj_ref.get_id()))?; + if !logicable.can_logic_read(logic_type) { + return Err(LogicError::CantRead(logic_type).into()); + } self.set_register(indirection, target, logicable.get_logic(logic_type)?)?; Ok(()) } @@ -2266,11 +2354,21 @@ impl LdInstruction for T { } = r.as_register(self)?; let id = id.as_value(self)?; let logic_type = logic_type.as_logic_type(self)?; - let logicable = self + let obj = 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)?; + let obj_ref = obj.borrow(); + let logicable = obj_ref + .as_logicable() + .ok_or(ICError::NotLogicable(obj_ref.get_id()))?; + if !logicable.can_logic_read(logic_type) { + return Err(LogicError::CantRead(logic_type).into()); + } self.set_register(indirection, target, logicable.get_logic(logic_type)?)?; Ok(()) } @@ -2292,11 +2390,21 @@ impl LsInstruction for T { 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 logicable = self + let obj = 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)?; + let obj_ref = obj.borrow(); + let logicable = obj_ref + .as_logicable() + .ok_or(ICError::NotLogicable(obj_ref.get_id()))?; + if !logicable.can_slot_logic_read(logic_slot_type, slot_index) { + return Err(LogicError::CantSlotRead(logic_slot_type, slot_index).into()); + } self.set_register( indirection, target, @@ -2322,11 +2430,18 @@ impl LrInstruction for T { let (device, connection) = d.as_device(self)?; let reagent_mode = reagent_mode.as_reagent_mode(self)?; let int = int.as_value(self)?; - let logicable = self + let obj = 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)?; + let obj_ref = obj.borrow(); + let logicable = obj_ref + .as_logicable() + .ok_or(ICError::NotLogicable(obj_ref.get_id()))?; let result = match reagent_mode { LogicReagentMode::Contents => { @@ -2505,6 +2620,9 @@ impl HcfInstruction for T { 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()))? .hault_and_catch_fire(); self.set_state(ICState::HasCaughtFire); Ok(()) @@ -2513,7 +2631,7 @@ impl HcfInstruction for T { impl LabelInstruction for T { /// label d? str - fn execute_inner(&mut self, d: &InstOperand, str: &InstOperand) -> Result<(), ICError> { + fn execute_inner(&mut self, _d: &InstOperand, _str: &InstOperand) -> Result<(), ICError> { // No op, handled by program compilation, should never be called? Ok(()) } diff --git a/ic10emu/src/lib.rs b/ic10emu/src/lib.rs index cd2f896..ab218fc 100644 --- a/ic10emu/src/lib.rs +++ b/ic10emu/src/lib.rs @@ -1,4 +1,3 @@ -pub mod device; pub mod errors; pub mod grammar; pub mod interpreter; diff --git a/ic10emu/src/network.rs b/ic10emu/src/network.rs index 3b7654d..c4f8b0d 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -229,17 +229,17 @@ impl Storage for CableNetwork { fn slots_count(&self) -> usize { 0 } - fn get_slot(&self, index: usize) -> Option<&crate::vm::object::Slot> { + 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> { + fn get_slot_mut(&mut self, _index: usize) -> Option<&mut crate::vm::object::Slot> { None } fn get_slots(&self) -> &[crate::vm::object::Slot] { - &vec![] + &[] } fn get_slots_mut(&mut self) -> &mut [crate::vm::object::Slot] { - &mut vec![] + &mut [] } } @@ -287,7 +287,7 @@ impl Logicable for CableNetwork { }; Ok(self.channels[index]) } - fn set_logic(&mut self, lt: LogicType, value: f64, force: bool) -> Result<(), LogicError> { + fn set_logic(&mut self, lt: LogicType, value: f64, _force: bool) -> Result<(), LogicError> { use LogicType::*; let index: usize = match lt { Channel0 => 0, @@ -305,8 +305,8 @@ impl Logicable for CableNetwork { } fn can_slot_logic_read( &self, - slt: crate::vm::enums::script_enums::LogicSlotType, - index: f64, + _slt: crate::vm::enums::script_enums::LogicSlotType, + _index: f64, ) -> bool { false } @@ -314,7 +314,6 @@ impl Logicable for CableNetwork { &self, slt: crate::vm::enums::script_enums::LogicSlotType, index: f64, - vm: &crate::vm::VM, ) -> Result { Err(LogicError::CantSlotRead(slt, index)) } diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index 4078960..3838e90 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -65,7 +65,7 @@ impl VM { let default_network_key = network_id_space.next(); let networks = BTreeMap::new(); - let mut vm = Rc::new(VM { + let vm = Rc::new(VM { objects: RefCell::new(BTreeMap::new()), circuit_holders: RefCell::new(Vec::new()), program_holders: RefCell::new(Vec::new()), @@ -120,17 +120,19 @@ impl VM { .networks .borrow() .get(&net_id) + .cloned() .expect(&format!( "desync between vm and transaction networks: {net_id}" - )) - .borrow_mut() + )); + let mut net_ref = net.borrow_mut(); + let net_interface = net_ref .as_mut_network() .expect(&format!("non network network: {net_id}")); for id in trans_net.devices { - net.add_data(id); + net_interface.add_data(id); } for id in trans_net.power_only { - net.add_power(id); + net_interface.add_power(id); } } @@ -173,11 +175,9 @@ impl VM { obj.borrow_mut().set_id(new_id); self.objects.borrow_mut().insert(new_id, obj); - self.objects - .borrow_mut() - .iter_mut() - .filter_map(|(_obj_id, obj)| obj.borrow_mut().as_mut_device()) - .for_each(|device| { + 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(|slot| { if slot.parent == old_id { slot.parent = new_id; @@ -189,7 +189,8 @@ impl VM { slot.occupant = Some(new_id); } }); - }); + } + } self.circuit_holders.borrow_mut().iter_mut().for_each(|id| { if *id == old_id { @@ -202,15 +203,13 @@ impl VM { } }); self.networks.borrow().iter().for_each(|(_net_id, net)| { - let net_ref = net - .borrow_mut() - .as_mut_network() - .expect("non-network network"); - if net_ref.remove_data(old_id) { - net_ref.add_data(new_id); + 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_ref.remove_power(old_id) { - net_ref.add_power(new_id); + if net_interface.remove_power(old_id) { + net_interface.add_power(new_id); } }); self.id_space.borrow_mut().free_id(old_id); @@ -219,12 +218,14 @@ impl VM { /// Set program code if it's valid pub fn set_code(self: &Rc, id: u32, code: &str) -> Result { - let programmable = self + let obj = self .objects .borrow() .get(&id) - .ok_or(VMError::UnknownId(id))? - .borrow_mut() + .cloned() + .ok_or(VMError::UnknownId(id))?; + let mut obj_ref = obj.borrow_mut(); + let programmable = obj_ref .as_mut_programmable() .ok_or(VMError::NotProgrammable(id))?; programmable.set_source_code(code)?; @@ -233,12 +234,14 @@ impl VM { /// Set program code and translate invalid lines to Nop, collecting errors pub fn set_code_invalid(self: &Rc, id: u32, code: &str) -> Result { - let programmable = self + let obj = self .objects .borrow() .get(&id) - .ok_or(VMError::UnknownId(id))? - .borrow_mut() + .cloned() + .ok_or(VMError::UnknownId(id))?; + let mut obj_ref = obj.borrow_mut(); + let programmable = obj_ref .as_mut_programmable() .ok_or(VMError::NotProgrammable(id))?; programmable.set_source_code_with_invalid(code); @@ -255,12 +258,14 @@ impl VM { id: u32, advance_ip_on_err: bool, ) -> Result<(), VMError> { - let programmable = self + let obj = self .objects .borrow() .get(&id) - .ok_or(VMError::UnknownId(id))? - .borrow_mut() + .cloned() + .ok_or(VMError::UnknownId(id))?; + let mut obj_ref = obj.borrow_mut(); + let programmable = obj_ref .as_mut_programmable() .ok_or(VMError::NotProgrammable(id))?; self.operation_modified.borrow_mut().clear(); @@ -275,18 +280,20 @@ impl VM { id: u32, ignore_errors: bool, ) -> Result { - let programmable = self + let obj = self .objects .borrow() .get(&id) - .ok_or(VMError::UnknownId(id))? - .borrow_mut() + .cloned() + .ok_or(VMError::UnknownId(id))?; + let mut obj_ref = obj.borrow_mut(); + let programmable = obj_ref .as_mut_programmable() .ok_or(VMError::NotProgrammable(id))?; self.operation_modified.borrow_mut().clear(); self.set_modified(id); for _i in 0..128 { - if let Err(err) = programmable.step( ignore_errors) { + if let Err(err) = programmable.step(ignore_errors) { if !ignore_errors { return Err(err.into()); } @@ -308,12 +315,14 @@ impl VM { } pub fn reset_programmable(self: &Rc, id: ObjectID) -> Result { - let programmable = self + let obj = self .objects .borrow() .get(&id) - .ok_or(VMError::UnknownId(id))? - .borrow_mut() + .cloned() + .ok_or(VMError::UnknownId(id))?; + let mut obj_ref = obj.borrow_mut(); + let programmable = obj_ref .as_mut_programmable() .ok_or(VMError::NotProgrammable(id))?; programmable.reset(); @@ -365,14 +374,15 @@ impl VM { .networks .borrow() .get(&id) + .cloned() .ok_or(ICError::BadNetworkId(id))?; if !(0..8).contains(&channel) { Err(ICError::ChannelIndexOutOfRange(channel)) } else { let channel_lt = LogicType::from_repr((LogicType::Channel0 as usize + channel) as u16) .expect("channel logictype repr out of range"); - let val = network - .borrow_mut() + let net_ref = network.borrow(); + let val = net_ref .as_network() .expect("non-network network") .get_logic(channel_lt)?; @@ -390,6 +400,7 @@ impl VM { .networks .borrow() .get(&(id)) + .cloned() .ok_or(ICError::BadNetworkId(id))?; if !(0..8).contains(&channel) { Err(ICError::ChannelIndexOutOfRange(channel)) @@ -425,9 +436,10 @@ impl VM { .borrow() .values() .filter_map(|net| { - let net_ref = net.borrow().as_network().expect("non-network network"); - if net_ref.contains_data(&source) { - Some(net_ref.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 } @@ -441,7 +453,7 @@ impl VM { pin: usize, val: Option, ) -> Result { - let Some(obj) = self.objects.borrow().get(&id) else { + let Some(obj) = self.objects.borrow().get(&id).cloned() else { return Err(VMError::UnknownId(id)); }; if let Some(other_device) = val { @@ -452,7 +464,8 @@ impl VM { return Err(VMError::DeviceNotVisible(other_device, id)); } } - let Some(device) = obj.borrow_mut().as_mut_device() else { + 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 { @@ -472,10 +485,11 @@ impl VM { connection: usize, target_net: Option, ) -> Result { - let Some(obj) = self.objects.borrow().get(&id) else { + let Some(obj) = self.objects.borrow().get(&id).cloned() else { return Err(VMError::UnknownId(id)); }; - let Some(device) = obj.borrow_mut().as_mut_device() else { + 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(); @@ -567,10 +581,11 @@ impl VM { network_id: ObjectID, ) -> Result { if let Some(network) = self.networks.borrow().get(&network_id) { - let Some(obj) = self.objects.borrow().get(&id) else { + let Some(obj) = self.objects.borrow().get(&id).cloned() else { return Err(VMError::UnknownId(id)); }; - let Some(device) = obj.borrow_mut().as_mut_device() else { + let mut obj_ref = obj.borrow_mut(); + let Some(device) = obj_ref.as_mut_device() else { return Err(VMError::NotADevice(id)); }; @@ -629,7 +644,7 @@ impl VM { .borrow_mut() .as_mut_device() .expect("batch iter yielded non device") - .set_slot_logic(typ, index, val, write_readonly) + .set_slot_logic(typ, index, val, write_readonly) .map_err(Into::into) }) .try_collect() @@ -785,35 +800,44 @@ impl VM { target: Option, quantity: u32, ) -> Result, VMError> { - let Some(obj) = self.objects.borrow().get(&id) else { + let Some(obj) = self.objects.borrow().get(&id).cloned() else { return Err(VMError::UnknownId(id)); }; - let Some(storage) = obj.borrow_mut().as_mut_storage() else { + 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 { - let Some(item_obj) = self.objects.borrow().get(&target) else { - return Err(VMError::UnknownId(id)); - }; - let Some(item) = item_obj.borrow_mut().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)?; + if slot.occupant.is_some_and(|occupant| occupant == target) { + slot.quantity = quantity; + Ok(None) + } else { + 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; + slot.occupant = Some(target); + slot.quantity = quantity; + Ok(last) } - item.set_parent_slot(Some(ParentSlotInfo { - parent: id, - slot: index, - })); - let last = slot.occupant; - slot.occupant = Some(target); - Ok(last) } else { let last = slot.occupant; slot.occupant = None; + slot.quantity = 0; Ok(last) } } @@ -824,10 +848,11 @@ impl VM { id: ObjectID, index: usize, ) -> Result, VMError> { - let Some(obj) = self.objects.borrow().get(&id) else { + let Some(obj) = self.objects.borrow().get(&id).cloned() else { return Err(VMError::UnknownId(id)); }; - let Some(storage) = obj.borrow_mut().as_mut_storage() else { + let mut obj_ref = obj.borrow_mut(); + let Some(storage) = obj_ref.as_mut_storage() else { return Err(VMError::NotStorage(id)); }; let slot = storage @@ -845,7 +870,7 @@ impl VM { .objects .borrow() .iter() - .filter_map(|(obj_id, obj)| { + .filter_map(|(_obj_id, obj)| { if obj .borrow() .as_item() @@ -929,21 +954,19 @@ impl VM { .extend(transaction.wireless_receivers); for (net_id, trans_net) in transaction.networks.into_iter() { - let net = self - .networks - .borrow() - .get(&net_id) - .expect(&format!( - "desync between vm and transaction networks: {net_id}" - )) - .borrow_mut() + let networks_ref = self.networks.borrow(); + let net = networks_ref.get(&net_id).expect(&format!( + "desync between vm and transaction networks: {net_id}" + )); + let mut net_ref = net.borrow_mut(); + let net_interface = net_ref .as_mut_network() .expect(&format!("non network network: {net_id}")); for id in trans_net.devices { - net.add_data(id); + net_interface.add_data(id); } for id in trans_net.power_only { - net.add_power(id); + net_interface.add_power(id); } } @@ -1025,16 +1048,16 @@ impl VMTransaction { } } - if let Some(w_logicable) = obj.borrow().as_wireless_transmit() { + 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() { + 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() { + if let Some(_circuit_holder) = obj.borrow().as_circuit_holder() { self.circuit_holders.push(obj_id); } - if let Some(programmable) = obj.borrow().as_programmable() { + if let Some(_programmable) = obj.borrow().as_programmable() { self.program_holders.push(obj_id); } if let Some(device) = obj.borrow_mut().as_mut_device() { diff --git a/ic10emu/src/vm/instructions/operands.rs b/ic10emu/src/vm/instructions/operands.rs index c951314..3ad3d88 100644 --- a/ic10emu/src/vm/instructions/operands.rs +++ b/ic10emu/src/vm/instructions/operands.rs @@ -75,25 +75,25 @@ impl InstOperand { } pub fn as_ident(&self) -> Result { - let &Operand::Identifier(ident) = &self.operand else { + let Operand::Identifier(ident) = &self.operand else { return Err(ICError::IncorrectOperandType { inst: self.inst, index: self.index, desired: "Name".to_owned(), }); }; - Ok(ident) + Ok(ident.clone()) } pub fn as_number(&self) -> Result { - let &Operand::Number(num) = &self.operand else { + let Operand::Number(num) = &self.operand else { return Err(ICError::IncorrectOperandType { inst: self.inst, index: self.index, desired: "Number".to_owned(), }); }; - Ok(num) + Ok(num.clone()) } pub fn as_aliasable(&self) -> Result { @@ -287,7 +287,7 @@ impl InstOperand { } pub fn translate_alias(&self, ic: &IC) -> Operand { - match self.operand { + match &self.operand { Operand::Identifier(id) | Operand::Type { identifier: id, .. } => { if let Some(alias) = ic.get_aliases().get(&id.name) { alias.clone() @@ -299,7 +299,7 @@ impl InstOperand { self.operand.clone() } } - _ => self.clone(), + _ => self.operand.clone(), } } } diff --git a/ic10emu/src/vm/object.rs b/ic10emu/src/vm/object.rs index a535ca7..3658820 100644 --- a/ic10emu/src/vm/object.rs +++ b/ic10emu/src/vm/object.rs @@ -123,4 +123,5 @@ pub struct Slot { pub readable_logic: Vec, pub writeable_logic: Vec, pub occupant: Option, + pub quantity: u32, } diff --git a/ic10emu/src/vm/object/generic/macros.rs b/ic10emu/src/vm/object/generic/macros.rs index 7232e7d..c536a92 100644 --- a/ic10emu/src/vm/object/generic/macros.rs +++ b/ic10emu/src/vm/object/generic/macros.rs @@ -102,18 +102,24 @@ macro_rules! GWDevice { fn device_info(&self) -> &DeviceInfo { &self.device_info } - fn device_connections(&self) -> &[Connection] { + fn connections(&self) -> &[Connection] { self.connections.as_slice() } - fn device_connections_mut(&mut self) -> &mut [Connection] { + fn connections_mut(&mut self) -> &mut [Connection] { self.connections.as_mut_slice() } - fn device_pins(&self) -> Option<&[Option]> { + fn pins(&self) -> Option<&[Option]> { self.pins.as_ref().map(|pins| pins.as_slice()) } - fn device_pins_mut(&mut self) -> Option<&mut [Option]> { + 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 + } } }; } @@ -136,6 +142,12 @@ macro_rules! GWItem { 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 + } } }; } diff --git a/ic10emu/src/vm/object/generic/structs.rs b/ic10emu/src/vm/object/generic/structs.rs index 93e74b0..6fbb4f4 100644 --- a/ic10emu/src/vm/object/generic/structs.rs +++ b/ic10emu/src/vm/object/generic/structs.rs @@ -80,6 +80,7 @@ pub struct GenericLogicableDevice { pub device_info: DeviceInfo, pub connections: Vec, pub pins: Option>>, + pub reagents: Option>, } #[derive(ObjectInterface!, GWStructure!, GWStorage!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] @@ -100,6 +101,7 @@ pub struct GenericLogicableDeviceMemoryReadable { pub device_info: DeviceInfo, pub connections: Vec, pub pins: Option>>, + pub reagents: Option>, pub memory: Vec, } @@ -121,6 +123,7 @@ pub struct GenericLogicableDeviceMemoryReadWriteable { pub device_info: DeviceInfo, pub connections: Vec, pub pins: Option>>, + pub reagents: Option>, pub memory: Vec, } @@ -137,6 +140,7 @@ pub struct GenericItem { pub vm: Rc, pub item_info: ItemInfo, pub parent_slot: Option, + pub damage: Option, } #[derive(ObjectInterface!, GWItem!, GWStorage! )] @@ -152,6 +156,7 @@ pub struct GenericItemStorage { pub vm: Rc, pub item_info: ItemInfo, pub parent_slot: Option, + pub damage: Option, pub slots: Vec, } @@ -168,6 +173,7 @@ pub struct GenericItemLogicable { pub vm: Rc, pub item_info: ItemInfo, pub parent_slot: Option, + pub damage: Option, pub slots: Vec, pub fields: BTreeMap, pub modes: Option>, @@ -186,6 +192,7 @@ pub struct GenericItemLogicableMemoryReadable { pub vm: Rc, pub item_info: ItemInfo, pub parent_slot: Option, + pub damage: Option, pub slots: Vec, pub fields: BTreeMap, pub modes: Option>, @@ -205,6 +212,7 @@ pub struct GenericItemLogicableMemoryReadWriteable { pub vm: Rc, pub item_info: ItemInfo, pub parent_slot: Option, + pub damage: Option, pub slots: Vec, pub fields: BTreeMap, pub modes: Option>, diff --git a/ic10emu/src/vm/object/generic/traits.rs b/ic10emu/src/vm/object/generic/traits.rs index a991f42..780ab9b 100644 --- a/ic10emu/src/vm/object/generic/traits.rs +++ b/ic10emu/src/vm/object/generic/traits.rs @@ -11,7 +11,6 @@ use crate::{ traits::*, LogicField, MemoryAccess, ObjectID, Slot, }, - VM, }, }; use std::{collections::BTreeMap, usize}; @@ -120,28 +119,165 @@ impl Logicable for T { 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, _vm: &VM) -> Result { + 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| { - if slot.readable_logic.contains(&slt) { - match slot.occupant { - Some(_id) => { - // FIXME: impliment by accessing VM to get occupant + use LogicSlotType::*; + let occupant = slot.occupant.and_then(|id| self.get_vm().get_object(id)); + match slt { + Occupied => { + if slot.occupant.is_some() { + Ok(1.0) + } else { Ok(0.0) } - None => Ok(0.0), } - } else { - Err(LogicError::CantSlotRead(slt, index)) + Quantity => { + if slot.occupant.is_some() { + Ok(slot.quantity as f64) + } else { + Ok(0.0) + } + } + Class => { + if slot.occupant.is_some() { + Ok(slot.typ 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()) + .ok_or(LogicError::CantSlotRead(slt, index)), + PressureWaste => logicable + .as_suit() + .map(|suit| suit.pressure_waste()) + .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)) + } + } } }) } @@ -204,16 +340,18 @@ impl MemoryWritable for T { pub trait GWDevice: GWLogicable + Logicable { fn device_info(&self) -> &DeviceInfo; - fn device_connections(&self) -> &[Connection]; - fn device_connections_mut(&mut self) -> &mut [Connection]; - fn device_pins(&self) -> Option<&[Option]>; - fn device_pins_mut(&mut self) -> Option<&mut [Option]>; + 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 { +impl Device for T { fn can_slot_logic_write(&self, slt: LogicSlotType, index: f64) -> bool { if index < 0.0 { - return false; + false } else { self.get_slot(index as usize) .map(|slot| slot.writeable_logic.contains(&slt)) @@ -225,22 +363,47 @@ impl Device for T { slt: LogicSlotType, index: f64, value: f64, - vm: &VM, force: bool, ) -> Result<(), LogicError> { + let slots_count = self.slots_count(); if index < 0.0 { - return Err(LogicError::SlotIndexOutOfRange(index, self.slots_count())); + return Err(LogicError::SlotIndexOutOfRange(index, slots_count)); } + use LogicSlotType::*; + let vm = self.get_vm().clone(); + self.get_slot_mut(index as usize) - .ok_or_else(|| LogicError::SlotIndexOutOfRange(index, self.slots_count())) + .ok_or(LogicError::SlotIndexOutOfRange(index, slots_count)) .and_then(|slot| { + // special case, update slot quantity if >= 1 + if slt == Quantity && force && value >= 1.0 { + slot.quantity = value as u32; + return Ok(()); + } if slot.writeable_logic.contains(&slt) { - match slot.occupant { - Some(_id) => { - // FIXME: impliment by accessing VM to get occupant - Ok(()) + let occupant = slot.occupant.and_then(|id| vm.get_object(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(()), } - None => Ok(()), + } else { + Ok(()) } } else { Err(LogicError::CantSlotWrite(slt, index)) @@ -248,16 +411,16 @@ impl Device for T { }) } fn connection_list(&self) -> &[crate::network::Connection] { - self.device_connections() + self.connections() } fn connection_list_mut(&mut self) -> &mut [Connection] { - self.device_connections_mut() + self.connections_mut() } fn device_pins(&self) -> Option<&[Option]> { - self.device_pins() + self.pins() } - fn device_pins_mut(&self) -> Option<&mut [Option]> { - self.device_pins_mut() + fn device_pins_mut(&mut self) -> Option<&mut [Option]> { + self.pins_mut() } fn has_reagents(&self) -> bool { self.device_info().has_reagents @@ -283,12 +446,36 @@ impl Device for T { fn has_atmosphere(&self) -> bool { self.device_info().has_atmosphere } + fn get_reagents(&self) -> Vec<(i32, f64)> { + self.reagents() + .map(|reagents| { + reagents + .iter() + .map(|(hash, quant)| (*hash, *quant)) + .collect() + }) + .unwrap_or_default() + } + fn set_reagents(&mut self, reagents: &[(i32, f64)]) { + let reagents_ref = self.reagents_mut(); + *reagents_ref = Some(reagents.iter().copied().collect()); + } + fn add_reagents(&mut self, reagents: &[(i32, 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 { @@ -319,6 +506,12 @@ impl Item for T { 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); + } } pub trait GWCircuitHolder: Logicable {} diff --git a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs index c517e50..96f2d02 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs @@ -11,7 +11,7 @@ use crate::{ errors::{LogicError, MemoryError}, macros::ObjectInterface, traits::*, - LogicField, MemoryAccess, Name, ObjectID, Slot, + LogicField, MemoryAccess, Name, ObjectID, Slot, VMObject, }, VM, }, @@ -48,6 +48,7 @@ pub struct ItemIntegratedCircuit10 { pub state: ICState, pub code: String, pub program: Program, + pub damage: f32, } impl Item for ItemIntegratedCircuit10 { @@ -78,16 +79,22 @@ impl Item for ItemIntegratedCircuit10 { 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; + } } impl Storage for ItemIntegratedCircuit10 { fn slots_count(&self) -> usize { 0 } - fn get_slot(&self, index: usize) -> Option<&Slot> { + fn get_slot(&self, _index: usize) -> Option<&Slot> { None } - fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot> { + fn get_slot_mut(&mut self, _index: usize) -> Option<&mut Slot> { None } fn get_slots(&self) -> &[Slot] { @@ -158,10 +165,10 @@ impl Logicable for ItemIntegratedCircuit10 { _ => Err(LogicError::CantWrite(lt)), }) } - fn can_slot_logic_read(&self, slt: LogicSlotType, index: f64) -> bool { + fn can_slot_logic_read(&self, _slt: LogicSlotType,_indexx: f64) -> bool { false } - fn get_slot_logic(&self, slt: LogicSlotType, index: f64) -> Result { + fn get_slot_logic(&self, _slt: LogicSlotType, index: f64) -> Result { return Err(LogicError::SlotIndexOutOfRange(index, self.slots_count())); } fn valid_logic_types(&self) -> Vec { @@ -226,14 +233,9 @@ impl SourceCode for ItemIntegratedCircuit10 { } impl IntegratedCircuit for ItemIntegratedCircuit10 { - fn get_circuit_holder(&self) -> Option { + fn get_circuit_holder(&self) -> Option { self.get_parent_slot() - .map(|parent_slot| { - self.get_vm() - .get_object(parent_slot.parent) - .map(|obj| obj.borrow().as_circuit_holder()) - .flatten() - }) + .map(|parent_slot| self.get_vm().get_object(parent_slot.parent)) .flatten() } fn get_instruction_pointer(&self) -> f64 { @@ -332,7 +334,7 @@ impl IntegratedCircuit for ItemIntegratedCircuit10 { Ok(val) } } - fn put_stack(&self, addr: f64, val: f64) -> Result { + 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)) @@ -358,7 +360,7 @@ impl IntegratedCircuit for ItemIntegratedCircuit10 { &self.program.labels } fn get_state(&self) -> crate::interpreter::ICState { - self.state + self.state.clone() } fn set_state(&mut self, state: crate::interpreter::ICState) { self.state = state; @@ -369,7 +371,10 @@ impl IC10Marker for ItemIntegratedCircuit10 {} impl Programmable for ItemIntegratedCircuit10 { fn step(&mut self, advance_ip_on_err: bool) -> Result<(), crate::errors::ICError> { - if matches!(&self.state, ICState::HasCaughtFire | ICState::Error(_)) { + if matches!(&self.state, ICState::HasCaughtFire ) { + return Ok(()); + } + if matches!(&self.state, ICState::Error(_)) && !advance_ip_on_err { return Ok(()); } if let ICState::Sleep(then, sleep_for) = &self.state { @@ -395,7 +400,7 @@ impl Programmable for ItemIntegratedCircuit10 { } self.next_ip = self.ip + 1; self.state = ICState::Running; - let line = self.program.get_line(self.ip)?; + let line = self.program.get_line(self.ip)?.clone(); let operands = &line.operands; let instruction = line.instruction; instruction.execute(self, operands)?; @@ -405,6 +410,9 @@ impl Programmable for ItemIntegratedCircuit10 { } 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 index aa3da93..88052d5 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -223,6 +223,7 @@ impl ObjectTemplate { readable_logic: Vec::new(), writeable_logic: Vec::new(), occupant: None, + quantity: info.quantity.unwrap_or(0), }) .collect(), }), @@ -274,6 +275,7 @@ impl ObjectTemplate { }) .unwrap_or_else(|| Vec::new()), occupant: None, + quantity: info.quantity.unwrap_or(0), }) .collect(), fields: s @@ -289,6 +291,7 @@ impl ObjectTemplate { value: s .logic .logic_values + .as_ref() .map(|values| values.get(key)) .flatten() .copied() @@ -347,6 +350,7 @@ impl ObjectTemplate { }) .unwrap_or_else(|| Vec::new()), occupant: None, + quantity: info.quantity.unwrap_or(0), }) .collect(), fields: s @@ -362,6 +366,7 @@ impl ObjectTemplate { value: s .logic .logic_values + .as_ref() .map(|values| values.get(key)) .flatten() .copied() @@ -382,6 +387,7 @@ impl ObjectTemplate { pins: s .device .device_pins + .as_ref() .map(|pins| Some(pins.clone())) .unwrap_or_else(|| { s.device @@ -389,6 +395,7 @@ impl ObjectTemplate { .map(|pins_len| vec![None; pins_len]) }), device_info: s.device.clone(), + reagents: s.device.reagents.clone(), }), StructureLogicDeviceMemory(s) if matches!(s.memory.memory_access, MemoryAccess::Read) => @@ -445,6 +452,7 @@ impl ObjectTemplate { }) .unwrap_or_else(|| Vec::new()), occupant: None, + quantity: info.quantity.unwrap_or(0), }) .collect(), fields: s @@ -460,6 +468,7 @@ impl ObjectTemplate { value: s .logic .logic_values + .as_ref() .map(|values| values.get(key)) .flatten() .copied() @@ -480,6 +489,7 @@ impl ObjectTemplate { pins: s .device .device_pins + .as_ref() .map(|pins| Some(pins.clone())) .unwrap_or_else(|| { s.device @@ -487,6 +497,7 @@ impl ObjectTemplate { .map(|pins_len| vec![None; pins_len]) }), device_info: s.device.clone(), + reagents: s.device.reagents.clone(), memory: s .memory .values @@ -547,6 +558,7 @@ impl ObjectTemplate { }) .unwrap_or_else(|| Vec::new()), occupant: None, + quantity: info.quantity.unwrap_or(0), }) .collect(), fields: s @@ -562,6 +574,7 @@ impl ObjectTemplate { value: s .logic .logic_values + .as_ref() .map(|values| values.get(key)) .flatten() .copied() @@ -582,6 +595,7 @@ impl ObjectTemplate { pins: s .device .device_pins + .as_ref() .map(|pins| Some(pins.clone())) .unwrap_or_else(|| { s.device @@ -589,6 +603,7 @@ impl ObjectTemplate { .map(|pins_len| vec![None; pins_len]) }), device_info: s.device.clone(), + reagents: s.device.reagents.clone(), memory: s .memory .values @@ -603,6 +618,7 @@ impl ObjectTemplate { vm, item_info: i.item.clone(), parent_slot: None, + damage: i.item.damage, }), ItemSlots(i) => VMObject::new(GenericItemStorage { id, @@ -611,6 +627,7 @@ impl ObjectTemplate { vm, item_info: i.item.clone(), parent_slot: None, + damage: i.item.damage, slots: i .slots .iter() @@ -623,6 +640,7 @@ impl ObjectTemplate { readable_logic: Vec::new(), writeable_logic: Vec::new(), occupant: None, + quantity: info.quantity.unwrap_or(0), }) .collect(), }), @@ -633,6 +651,7 @@ impl ObjectTemplate { vm, item_info: i.item.clone(), parent_slot: None, + damage: i.item.damage, slots: i .slots .iter() @@ -675,6 +694,7 @@ impl ObjectTemplate { }) .unwrap_or_else(|| Vec::new()), occupant: None, + quantity: info.quantity.unwrap_or(0), }) .collect(), fields: i @@ -690,6 +710,7 @@ impl ObjectTemplate { value: i .logic .logic_values + .as_ref() .map(|values| values.get(key)) .flatten() .copied() @@ -708,6 +729,7 @@ impl ObjectTemplate { vm, item_info: i.item.clone(), parent_slot: None, + damage: i.item.damage, slots: i .slots .iter() @@ -754,6 +776,7 @@ impl ObjectTemplate { }) .unwrap_or_else(|| Vec::new()), occupant: None, + quantity: info.quantity.unwrap_or(0), }) .collect(), fields: i @@ -769,6 +792,7 @@ impl ObjectTemplate { value: i .logic .logic_values + .as_ref() .map(|values| values.get(key)) .flatten() .copied() @@ -792,6 +816,7 @@ impl ObjectTemplate { vm, item_info: i.item.clone(), parent_slot: None, + damage: i.item.damage, slots: i .slots .iter() @@ -834,6 +859,7 @@ impl ObjectTemplate { }) .unwrap_or_else(|| Vec::new()), occupant: None, + quantity: info.quantity.unwrap_or(0), }) .collect(), fields: i @@ -849,6 +875,7 @@ impl ObjectTemplate { value: i .logic .logic_values + .as_ref() .map(|values| values.get(key)) .flatten() .copied() @@ -888,6 +915,11 @@ impl ObjectTemplate { wireless_transmit: None, wireless_receive: None, network: None, + plant: None, + suit: None, + chargeable: None, + reagent_interface: None, + fabricator: None, } => { // completely generic structure? not sure how this got created but it technically // valid in the data model @@ -914,6 +946,11 @@ impl ObjectTemplate { wireless_transmit: None, wireless_receive: None, network: None, + plant: None, + suit: None, + chargeable: None, + reagent_interface: None, + fabricator: None, } => Ok(ObjectTemplate::StructureSlots(StructureSlotsTemplate { object: Some(obj.into()), prefab: obj.into(), @@ -937,6 +974,11 @@ impl ObjectTemplate { wireless_transmit: _wt, wireless_receive: _wr, network: None, + plant: None, + suit: None, + chargeable: None, + reagent_interface: None, + fabricator: None, } => Ok(ObjectTemplate::StructureLogic(StructureLogicTemplate { object: Some(obj.into()), prefab: obj.into(), @@ -961,6 +1003,11 @@ impl ObjectTemplate { wireless_transmit: _wt, wireless_receive: _wr, network: None, + plant: None, + suit: None, + chargeable: None, + reagent_interface: None, + fabricator: None, } => Ok(ObjectTemplate::StructureLogicDevice( StructureLogicDeviceTemplate { object: Some(obj.into()), @@ -988,6 +1035,11 @@ impl ObjectTemplate { wireless_transmit: _wt, wireless_receive: _wr, network: None, + plant: None, + suit: None, + chargeable: None, + reagent_interface: None, + fabricator: None, } => Ok(ObjectTemplate::StructureLogicDeviceMemory( StructureLogicDeviceMemoryTemplate { object: Some(obj.into()), @@ -1018,6 +1070,11 @@ impl ObjectTemplate { wireless_transmit: None, wireless_receive: None, network: None, + plant: None, + suit: None, + chargeable: None, + reagent_interface: None, + fabricator: None, } => Ok(ObjectTemplate::Item(ItemTemplate { object: Some(obj.into()), prefab: obj.into(), @@ -1040,6 +1097,11 @@ impl ObjectTemplate { wireless_transmit: None, wireless_receive: None, network: None, + plant: None, + suit: None, + chargeable: None, + reagent_interface: None, + fabricator: None, } => Ok(ObjectTemplate::ItemSlots(ItemSlotsTemplate { object: Some(obj.into()), prefab: obj.into(), @@ -1063,6 +1125,11 @@ impl ObjectTemplate { wireless_transmit: _wt, wireless_receive: _wr, network: None, + plant: None, + suit: None, + chargeable: None, + reagent_interface: None, + fabricator: None, } => Ok(ObjectTemplate::ItemLogic(ItemLogicTemplate { object: Some(obj.into()), prefab: obj.into(), @@ -1087,6 +1154,11 @@ impl ObjectTemplate { wireless_transmit: _wt, wireless_receive: _wr, network: None, + plant: None, + suit: None, + chargeable: None, + reagent_interface: None, + fabricator: None, } => Ok(ObjectTemplate::ItemLogicMemory(ItemLogicMemoryTemplate { object: Some(obj.into()), prefab: obj.into(), @@ -1117,6 +1189,11 @@ fn freeze_storage(storage: StorageRef<'_>, vm: &Rc) -> Result, ObjectTemplate::freeze_object(&occupant, vm) }) .map_or(Ok(None), |v| v.map(Some))?, + quantity: if slot.quantity == 0 { + None + } else { + Some(slot.quantity) + }, }) }) .collect::, _>>()?; @@ -1134,7 +1211,8 @@ pub struct PrefabInfo { impl From<&VMObject> for PrefabInfo { fn from(obj: &VMObject) -> Self { - let obj_prefab = obj.borrow().get_prefab(); + 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(), @@ -1177,6 +1255,8 @@ pub struct SlotInfo { pub typ: SlotClass, #[serde(skip_serializing_if = "Option::is_none")] pub occupant: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub quantity: Option, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] @@ -1291,6 +1371,8 @@ pub struct ItemInfo { pub reagents: Option>, pub slot_class: SlotClass, pub sorting_class: SortingClass, + #[serde(skip_serializing_if = "Option::is_none")] + pub damage: Option, } impl From> for ItemInfo { @@ -1303,6 +1385,11 @@ impl From> for ItemInfo { reagents: item.reagents().cloned(), slot_class: item.slot_class(), sorting_class: item.sorting_class(), + damage: if item.get_damage() == 0.0 { + None + } else { + Some(item.get_damage()) + }, } } } @@ -1316,7 +1403,7 @@ pub struct ConnectionInfo { pub network: Option, } -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct DeviceInfo { pub connection_list: Vec, @@ -1332,10 +1419,13 @@ pub struct DeviceInfo { pub has_on_off_state: bool, pub has_open_state: bool, pub has_reagents: bool, + #[serde(skip_serializing_if = "Option::is_none")] + pub reagents: Option>, } impl From> for DeviceInfo { fn from(device: DeviceRef) -> Self { + let reagents: BTreeMap = device.get_reagents().iter().copied().collect(); DeviceInfo { connection_list: device .connection_list() @@ -1354,6 +1444,11 @@ impl From> for DeviceInfo { has_color_state: device.has_color_state(), has_atmosphere: device.has_atmosphere(), has_activate_state: device.has_activate_state(), + reagents: if reagents.is_empty() { + None + } else { + Some(reagents) + }, } } } diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index 4473602..a85703d 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -11,9 +11,7 @@ use crate::{ }, instructions::{traits::ICInstructable, Instruction}, object::{ - errors::{LogicError, MemoryError}, - macros::tag_object_traits, - ObjectID, Slot, + errors::{LogicError, MemoryError}, macros::tag_object_traits, ObjectID, Slot, VMObject }, }, }; @@ -82,27 +80,15 @@ tag_object_traits! { &self, device: i32, connection: Option, - ) -> Option; + ) -> Option; /// i32::MAX is db - fn get_logicable_from_index_mut( - &self, - device: i32, - connection: Option, - ) -> Option; fn get_logicable_from_id( &self, device: ObjectID, connection: Option, - ) -> Option; - fn get_logicable_from_id_mut( - &self, - device: ObjectID, - connection: Option, - ) -> Option; + ) -> Option; fn get_source_code(&self) -> String; fn set_source_code(&self, code: String); - fn get_batch(&self) -> Vec; - fn get_batch_mut(&self) -> Vec; fn get_ic(&self) -> Option; fn hault_and_catch_fire(&mut self); } @@ -117,10 +103,25 @@ tag_object_traits! { fn sorting_class(&self) -> SortingClass; fn get_parent_slot(&self) -> Option; fn set_parent_slot(&mut self, info: Option); + fn get_damage(&self) -> f32; + fn set_damage(&mut self, damage: f32); + } + + 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 { + fn pressure_waste(&self) -> f64; + fn pressure_air(&self) -> f64; } pub trait IntegratedCircuit: Logicable + MemoryWritable + SourceCode + Item { - fn get_circuit_holder(&self) -> Option; + fn get_circuit_holder(&self) -> Option; fn get_instruction_pointer(&self) -> f64; fn set_next_instruction(&mut self, next_instruction: f64); fn set_next_instruction_relative(&mut self, offset: f64) { @@ -138,7 +139,7 @@ tag_object_traits! { fn pop_stack(&mut self) -> Result; fn peek_stack(&self) -> Result; fn get_stack(&self, addr: f64) -> Result; - fn put_stack(&self, addr: f64, val: f64) -> Result; + fn put_stack(&mut self, addr: f64, val: f64) -> Result; fn get_aliases(&self) -> &BTreeMap; fn get_aliases_mut(&mut self) -> &mut BTreeMap; fn get_defines(&self) -> &BTreeMap; @@ -152,6 +153,21 @@ tag_object_traits! { 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 } @@ -172,7 +188,7 @@ tag_object_traits! { fn connection_list(&self) -> &[Connection]; fn connection_list_mut(&mut self) -> &mut [Connection]; fn device_pins(&self) -> Option<&[Option]>; - fn device_pins_mut(&self) -> Option<&mut [Option]>; + fn device_pins_mut(&mut self) -> Option<&mut [Option]>; fn has_activate_state(&self) -> bool; fn has_atmosphere(&self) -> bool; fn has_color_state(&self) -> bool; From 29ef54ca045f5cf5cc0bfce6b2bf09c9184817e6 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sat, 18 May 2024 04:11:38 -0700 Subject: [PATCH 22/50] refactor(vm): impl circuit holder, impl ObjectRef/Mut --- ic10emu/src/interpreter.rs | 5 + ic10emu/src/interpreter/instructions.rs | 592 ++++++++++-------- ic10emu/src/network.rs | 10 +- ic10emu/src/vm.rs | 6 +- ic10emu/src/vm/object/generic/traits.rs | 110 ++-- ic10emu/src/vm/object/macros.rs | 74 ++- ic10emu/src/vm/object/stationpedia/structs.rs | 1 + .../stationpedia/structs/circuit_holder.rs | 426 +++++++++++++ .../structs/integrated_circuit.rs | 44 +- ic10emu/src/vm/object/templates.rs | 4 +- ic10emu/src/vm/object/traits.rs | 24 +- 11 files changed, 952 insertions(+), 344 deletions(-) create mode 100644 ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index 7f683d0..1c9b0e1 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -77,6 +77,11 @@ impl Program { 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(); diff --git a/ic10emu/src/interpreter/instructions.rs b/ic10emu/src/interpreter/instructions.rs index 82d5833..c583c53 100644 --- a/ic10emu/src/interpreter/instructions.rs +++ b/ic10emu/src/interpreter/instructions.rs @@ -865,10 +865,10 @@ impl BdseInstruction for T { let a = a.as_value(self)?; if self .get_circuit_holder() - .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? .borrow() .as_circuit_holder() - .ok_or(ICError::CircuitHolderNotLogicable(self.get_id()))? + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? .get_logicable_from_index(device, connection) .is_some() { @@ -885,10 +885,10 @@ impl BdsealInstruction for T { let a = a.as_value(self)?; if self .get_circuit_holder() - .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? .borrow() .as_circuit_holder() - .ok_or(ICError::CircuitHolderNotLogicable(self.get_id()))? + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? .get_logicable_from_index(device, connection) .is_some() { @@ -906,10 +906,10 @@ impl BrdseInstruction for T { let a = a.as_value(self)?; if self .get_circuit_holder() - .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? .borrow() .as_circuit_holder() - .ok_or(ICError::CircuitHolderNotLogicable(self.get_id()))? + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? .get_logicable_from_index(device, connection) .is_some() { @@ -926,10 +926,10 @@ impl BdnsInstruction for T { let a = a.as_value(self)?; if self .get_circuit_holder() - .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? .borrow() .as_circuit_holder() - .ok_or(ICError::CircuitHolderNotLogicable(self.get_id()))? + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? .get_logicable_from_index(device, connection) .is_none() { @@ -946,10 +946,10 @@ impl BdnsalInstruction for T { let a = a.as_value(self)?; if self .get_circuit_holder() - .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? .borrow() .as_circuit_holder() - .ok_or(ICError::CircuitHolderNotLogicable(self.get_id()))? + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? .get_logicable_from_index(device, connection) .is_none() { @@ -967,10 +967,10 @@ impl BrdnsInstruction for T { let a = a.as_value(self)?; if self .get_circuit_holder() - .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? .borrow() .as_circuit_holder() - .ok_or(ICError::CircuitHolderNotLogicable(self.get_id()))? + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? .get_logicable_from_index(device, connection) .is_none() { @@ -1341,14 +1341,16 @@ impl SdseInstruction for T { target, } = r.as_register(self)?; let (device, connection) = d.as_device(self)?; - let obj = 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); - self.set_register(indirection, target, if obj.is_some() { 1.0 } else { 0.0 })?; + 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(()) } } @@ -1360,14 +1362,16 @@ impl SdnsInstruction for T { target, } = r.as_register(self)?; let (device, connection) = d.as_device(self)?; - let obj = 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); - self.set_register(indirection, target, if obj.is_none() { 1.0 } else { 0.0 })?; + 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(()) } } @@ -1988,19 +1992,22 @@ impl GetInstruction for T { } = r.as_register(self)?; let address = address.as_value(self)?; let (device, connection) = d.as_device(self)?; - let obj = self - .get_circuit_holder() - .ok_or(ICError::NoCircuitHolder(self.get_id()))? + self.get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? .borrow() .as_circuit_holder() - .ok_or(ICError::CircuitHolderNotLogicable(self.get_id()))? + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? .get_logicable_from_index(device, connection) - .ok_or(ICError::DeviceNotSet)?; - let obj_ref = obj.borrow(); - let memory = obj_ref - .as_memory_readable() - .ok_or(MemoryError::NotReadable)?; - self.set_register(indirection, target, memory.get_memory(address as i32)?)?; + .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(()) } } @@ -2019,19 +2026,22 @@ impl GetdInstruction for T { } = r.as_register(self)?; let id = id.as_value(self)?; let address = address.as_value(self)?; - let obj = self - .get_circuit_holder() - .ok_or(ICError::NoCircuitHolder(self.get_id()))? + self.get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? .borrow() .as_circuit_holder() - .ok_or(ICError::CircuitHolderNotLogicable(self.get_id()))? + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? .get_logicable_from_id(id as ObjectID, None) - .ok_or(ICError::DeviceNotSet)?; - let obj_ref = obj.borrow(); - let memory = obj_ref - .as_memory_readable() - .ok_or(MemoryError::NotReadable)?; - self.set_register(indirection, target, memory.get_memory(address as i32)?)?; + .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(()) } } @@ -2047,19 +2057,22 @@ impl PutInstruction for T { let (device, connection) = d.as_device(self)?; let address = address.as_value(self)?; let value = value.as_value(self)?; - let obj = 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)?; - let mut obj_ref = obj.borrow_mut(); - let memory = obj_ref - .as_mut_memory_writable() - .ok_or(MemoryError::NotWriteable)?; - memory.set_memory(address as i32, value)?; + 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(()) } } @@ -2075,19 +2088,22 @@ impl PutdInstruction for T { let id = id.as_value(self)?; let address = address.as_value(self)?; let value = value.as_value(self)?; - let obj = 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)?; - let mut obj_ref = obj.borrow_mut(); - let memory = obj_ref - .as_mut_memory_writable() - .ok_or(MemoryError::NotWriteable)?; - memory.set_memory(address as i32, value)?; + 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(()) } } @@ -2096,19 +2112,22 @@ impl ClrInstruction for T { /// clr d? fn execute_inner(&mut self, d: &InstOperand) -> Result<(), ICError> { let (device, connection) = d.as_device(self)?; - let obj = 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)?; - let mut obj_ref = obj.borrow_mut(); - let memory = obj_ref - .as_mut_memory_writable() - .ok_or(MemoryError::NotWriteable)?; - memory.clear_memory()?; + 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() + .map_err(Into::into) + }) + })?; Ok(()) } } @@ -2116,19 +2135,22 @@ impl ClrdInstruction for T { /// clrd id(r?|num) fn execute_inner(&mut self, id: &InstOperand) -> Result<(), ICError> { let id = id.as_value(self)?; - let obj = 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)?; - let mut obj_ref = obj.borrow_mut(); - let memory = obj_ref - .as_mut_memory_writable() - .ok_or(MemoryError::NotWriteable)?; - memory.clear_memory()?; + 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() + .map_err(Into::into) + }) + })?; Ok(()) } } @@ -2144,23 +2166,30 @@ impl SInstruction for T { let (device, connection) = d.as_device(self)?; let logic_type = logic_type.as_logic_type(self)?; let val = r.as_value(self)?; - let obj = 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)?; - let mut obj_ref = obj.borrow_mut(); - let device_id = obj_ref.get_id(); - let logicable = obj_ref - .as_mut_logicable() - .ok_or(ICError::NotLogicable(device_id))?; - if !logicable.can_logic_write(logic_type) { - return Err(LogicError::CantWrite(logic_type).into()); - } - logicable.set_logic(logic_type, val, false)?; + 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(()) } } @@ -2176,23 +2205,30 @@ impl SdInstruction for T { let id = id.as_value(self)?; let logic_type = logic_type.as_logic_type(self)?; let val = r.as_value(self)?; - let obj = 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)?; - let mut obj_ref = obj.borrow_mut(); - let device_id = obj_ref.get_id(); - let logicable = obj_ref - .as_mut_logicable() - .ok_or(ICError::NotLogicable(device_id))?; - if !logicable.can_logic_write(logic_type) { - return Err(LogicError::CantWrite(logic_type).into()); - } - logicable.set_logic(logic_type, val, false)?; + 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(()) } } @@ -2210,27 +2246,30 @@ impl SsInstruction for T { 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)?; - let obj = 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)?; - let mut obj_ref = obj.borrow_mut(); - let device_id = obj_ref.get_id(); - let logicable = obj_ref - .as_mut_logicable() - .ok_or(ICError::NotLogicable(device_id))?; - let device_id = logicable.get_id(); - let device = logicable - .as_mut_device() - .ok_or(ICError::NotSlotWriteable(device_id))?; - if !device.can_slot_logic_write(logic_slot_type, slot_index) { - return Err(LogicError::CantSlotWrite(logic_slot_type, slot_index).into()); - } - device.set_slot_logic(logic_slot_type, slot_index, val, false)?; + 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(()) } } @@ -2248,7 +2287,7 @@ impl SbInstruction for T { 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)?; + .set_batch_device_field(*self.get_id(), prefab, logic_type, val, false)?; Ok(()) } } @@ -2268,7 +2307,7 @@ impl SbsInstruction for T { 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(), + *self.get_id(), prefab, slot_index, logic_slot_type, @@ -2294,7 +2333,7 @@ impl SbnInstruction for T { 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(), + *self.get_id(), prefab, name, logic_type, @@ -2320,22 +2359,29 @@ impl LInstruction for T { } = r.as_register(self)?; let (device, connection) = d.as_device(self)?; let logic_type = logic_type.as_logic_type(self)?; - let obj = self + let val = self .get_circuit_holder() - .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? .borrow() .as_circuit_holder() - .ok_or(ICError::CircuitHolderNotLogicable(self.get_id()))? + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? .get_logicable_from_index(device, connection) - .ok_or(ICError::DeviceNotSet)?; - let obj_ref = obj.borrow(); - let logicable = obj_ref - .as_logicable() - .ok_or(ICError::NotLogicable(obj_ref.get_id()))?; - if !logicable.can_logic_read(logic_type) { - return Err(LogicError::CantRead(logic_type).into()); - } - self.set_register(indirection, target, logicable.get_logic(logic_type)?)?; + .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(()) } } @@ -2354,22 +2400,29 @@ impl LdInstruction for T { } = r.as_register(self)?; let id = id.as_value(self)?; let logic_type = logic_type.as_logic_type(self)?; - let obj = self + let val = self .get_circuit_holder() - .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? .borrow() .as_circuit_holder() - .ok_or(ICError::CircuitHolderNotLogicable(self.get_id()))? + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? .get_logicable_from_id(id as ObjectID, None) - .ok_or(ICError::DeviceNotSet)?; - let obj_ref = obj.borrow(); - let logicable = obj_ref - .as_logicable() - .ok_or(ICError::NotLogicable(obj_ref.get_id()))?; - if !logicable.can_logic_read(logic_type) { - return Err(LogicError::CantRead(logic_type).into()); - } - self.set_register(indirection, target, logicable.get_logic(logic_type)?)?; + .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(()) } } @@ -2390,26 +2443,31 @@ impl LsInstruction for T { 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 obj = self + let val = self .get_circuit_holder() - .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? .borrow() .as_circuit_holder() - .ok_or(ICError::CircuitHolderNotLogicable(self.get_id()))? + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? .get_logicable_from_index(device, connection) - .ok_or(ICError::DeviceNotSet)?; - let obj_ref = obj.borrow(); - let logicable = obj_ref - .as_logicable() - .ok_or(ICError::NotLogicable(obj_ref.get_id()))?; - if !logicable.can_slot_logic_read(logic_slot_type, slot_index) { - return Err(LogicError::CantSlotRead(logic_slot_type, slot_index).into()); - } - self.set_register( - indirection, - target, - logicable.get_slot_logic(logic_slot_type, slot_index)?, - )?; + .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(()) } } @@ -2430,66 +2488,70 @@ impl LrInstruction for T { let (device, connection) = d.as_device(self)?; let reagent_mode = reagent_mode.as_reagent_mode(self)?; let int = int.as_value(self)?; - let obj = self + let val = self .get_circuit_holder() - .ok_or(ICError::NoCircuitHolder(self.get_id()))? + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? .borrow() .as_circuit_holder() - .ok_or(ICError::CircuitHolderNotLogicable(self.get_id()))? + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? .get_logicable_from_index(device, connection) - .ok_or(ICError::DeviceNotSet)?; - let obj_ref = obj.borrow(); - let logicable = obj_ref - .as_logicable() - .ok_or(ICError::NotLogicable(obj_ref.get_id()))?; - - 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_interface() - .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_interface() - .ok_or(ICError::NotReagentReadable(logicable.get_id()))?; - reagent_interface - .get_current_recipie() - .iter() - .find(|(hash, _)| *hash as f64 == int) - .map(|(_, quantity)| *quantity) - .unwrap_or(0.0) - } - }; - - self.set_register(indirection, target, result)?; + .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_interface() + .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_interface() + .ok_or(ICError::NotReagentReadable(*logicable.get_id()))?; + reagent_interface + .get_current_recipie() + .iter() + .find(|(hash, _)| *hash as f64 == int) + .map(|(_, quantity)| *quantity) + .unwrap_or(0.0) + } + }; + Ok(result) + }) + }) + })?; + self.set_register(indirection, target, val)?; Ok(()) } } @@ -2513,7 +2575,7 @@ impl LbInstruction for T { 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)?; + .get_batch_device_field(*self.get_id(), prefab, logic_type, batch_mode)?; self.set_register(indirection, target, val)?; Ok(()) } @@ -2539,7 +2601,7 @@ impl LbnInstruction for T { 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(), + *self.get_id(), prefab, name, logic_type, @@ -2572,7 +2634,7 @@ impl LbnsInstruction for T { 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(), + *self.get_id(), prefab, name, slot_index, @@ -2604,7 +2666,7 @@ impl LbsInstruction for T { 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(), + *self.get_id(), prefab, slot_index, logic_slot_type, @@ -2618,12 +2680,14 @@ impl LbsInstruction for T { 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()))? - .hault_and_catch_fire(); + { + self.get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow_mut() + .as_mut_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .hault_and_catch_fire(); + } self.set_state(ICState::HasCaughtFire); Ok(()) } diff --git a/ic10emu/src/network.rs b/ic10emu/src/network.rs index c4f8b0d..e0027c5 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -235,11 +235,11 @@ impl Storage for CableNetwork { fn get_slot_mut(&mut self, _index: usize) -> Option<&mut crate::vm::object::Slot> { None } - fn get_slots(&self) -> &[crate::vm::object::Slot] { - &[] + fn get_slots(&self) -> Vec<&crate::vm::object::Slot> { + vec![] } - fn get_slots_mut(&mut self) -> &mut [crate::vm::object::Slot] { - &mut [] + fn get_slots_mut(&mut self) -> Vec<&mut crate::vm::object::Slot> { + vec![] } } @@ -422,7 +422,7 @@ where impl From> for FrozenCableNetwork { fn from(value: NetworkRef) -> Self { FrozenCableNetwork { - id: value.get_id(), + id: *value.get_id(), devices: value.get_devices(), power_only: value.get_power_only(), channels: *value.get_channel_data(), diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index 3838e90..484f5da 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -617,7 +617,7 @@ impl VM { ) -> Result<(), ICError> { self.batch_device(source, prefab, None) .map(|device| { - self.set_modified(device.borrow().get_id()); + self.set_modified(*device.borrow().get_id()); device .borrow_mut() .as_mut_device() @@ -639,7 +639,7 @@ impl VM { ) -> Result<(), ICError> { self.batch_device(source, prefab, None) .map(|device| { - self.set_modified(device.borrow().get_id()); + self.set_modified(*device.borrow().get_id()); device .borrow_mut() .as_mut_device() @@ -661,7 +661,7 @@ impl VM { ) -> Result<(), ICError> { self.batch_device(source, prefab, Some(name)) .map(|device| { - self.set_modified(device.borrow().get_id()); + self.set_modified(*device.borrow().get_id()); device .borrow_mut() .as_mut_device() diff --git a/ic10emu/src/vm/object/generic/traits.rs b/ic10emu/src/vm/object/generic/traits.rs index 780ab9b..ff8338d 100644 --- a/ic10emu/src/vm/object/generic/traits.rs +++ b/ic10emu/src/vm/object/generic/traits.rs @@ -41,11 +41,11 @@ impl Storage for T { fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot> { self.slots_mut().get_mut(index) } - fn get_slots(&self) -> &[Slot] { - self.slots() + fn get_slots(&self) -> Vec<&Slot> { + self.slots().iter().collect() } - fn get_slots_mut(&mut self) -> &mut [Slot] { - self.slots_mut() + fn get_slots_mut(&mut self) -> Vec<&mut Slot> { + self.slots_mut().iter_mut().collect() } } @@ -63,57 +63,77 @@ impl Logicable for T { self.get_name().hash } fn is_logic_readable(&self) -> bool { - LogicType::iter().any(|lt| self.can_logic_read(lt)) + true } fn is_logic_writeable(&self) -> bool { LogicType::iter().any(|lt| self.can_logic_write(lt)) } fn can_logic_read(&self, lt: LogicType) -> bool { - self.fields() - .get(<) - .map(|field| { - matches!( - field.field_type, - MemoryAccess::Read | MemoryAccess::ReadWrite - ) - }) - .unwrap_or(false) + 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 { - self.fields() - .get(<) - .map(|field| { - matches!( - field.field_type, - MemoryAccess::Write | MemoryAccess::ReadWrite - ) - }) - .unwrap_or(false) + 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 { - self.fields() - .get(<) - .and_then(|field| match field.field_type { - MemoryAccess::Read | MemoryAccess::ReadWrite => Some(field.value), - _ => None, - }) - .ok_or(LogicError::CantRead(lt)) + 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> { - 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)), - }) + 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 { @@ -200,7 +220,7 @@ impl Logicable for T { } ReferenceId => { if let Some(occupant) = occupant { - Ok(occupant.borrow().get_id() as f64) + Ok(*occupant.borrow().get_id() as f64) } else { Ok(0.0) } diff --git a/ic10emu/src/vm/object/macros.rs b/ic10emu/src/vm/object/macros.rs index 825506f..2712d3d 100644 --- a/ic10emu/src/vm/object/macros.rs +++ b/ic10emu/src/vm/object/macros.rs @@ -8,7 +8,7 @@ macro_rules! object_trait { } }; (@body $trait_name:ident { $($trt:ident),* }; ) => { - fn get_id(&self) -> crate::vm::object::ObjectID; + 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; @@ -53,6 +53,74 @@ macro_rules! object_trait { } } + 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 refrence 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(refrence) => *refrence.get_id(), + Self::VMObject(obj) => *obj.borrow().get_id(), + + } + } + /// call func on the dyn refrence 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),*}) => { @@ -95,8 +163,8 @@ macro_rules! ObjectInterface { } => { impl $trait_name for $struct { - fn get_id(&self) -> crate::vm::object::ObjectID { - self.$id_field + fn get_id(&self) -> &crate::vm::object::ObjectID { + &self.$id_field } fn set_id(&mut self, id: crate::vm::object::ObjectID) { diff --git a/ic10emu/src/vm/object/stationpedia/structs.rs b/ic10emu/src/vm/object/stationpedia/structs.rs index a51cd85..b2cd51e 100644 --- a/ic10emu/src/vm/object/stationpedia/structs.rs +++ b/ic10emu/src/vm/object/stationpedia/structs.rs @@ -1,3 +1,4 @@ mod integrated_circuit; +mod circuit_holder; 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..230fb9a --- /dev/null +++ b/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs @@ -0,0 +1,426 @@ +use crate::{ + network::{CableConnectionType, Connection, ConnectionRole}, + vm::{ + enums::{ + basic_enums::Class as SlotClass, + prefabs::StationpediaPrefab, + script_enums::{LogicSlotType, LogicType}, + }, + object::{ + errors::LogicError, macros::ObjectInterface, traits::*, Name, ObjectID, Slot, VMObject, + }, + VM, + }, +}; +use macro_rules_attribute::derive; +use std::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(), + typ: SlotClass::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, + quantity: 0, + }, + 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 + } +} + +impl Storage for StructureCircuitHousing { + 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<&Slot> { + vec![&self.slot] + } + fn get_slots_mut(&mut self) -> Vec<&mut Slot> { + vec![&mut self.slot] + } +} + +impl Logicable for StructureCircuitHousing { + 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 + .and_then(|id| { + self.vm + .get_object(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 + .and_then(|id| { + self.vm + .get_object(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 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<(i32, f64)> { + vec![] + } + fn set_reagents(&mut self, _reagents: &[(i32, f64)]) { + // nope + } + fn add_reagents(&mut self, _reagents: &[(i32, 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 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.and_then(|id| self.vm.get_object(id)) + } + + fn get_ic_mut(&self) -> Option { + self.slot.occupant.and_then(|id| self.vm.get_object(id)) + } + + fn hault_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 index 96f2d02..2edb817 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs @@ -97,11 +97,11 @@ impl Storage for ItemIntegratedCircuit10 { fn get_slot_mut(&mut self, _index: usize) -> Option<&mut Slot> { None } - fn get_slots(&self) -> &[Slot] { - &[] + fn get_slots(&self) -> Vec<&Slot> { + vec![] } - fn get_slots_mut(&mut self) -> &mut [Slot] { - &mut [] + fn get_slots_mut(&mut self) -> Vec<&mut Slot> { + vec![] } } @@ -165,11 +165,11 @@ impl Logicable for ItemIntegratedCircuit10 { _ => Err(LogicError::CantWrite(lt)), }) } - fn can_slot_logic_read(&self, _slt: LogicSlotType,_indexx: f64) -> bool { + fn can_slot_logic_read(&self, _slt: LogicSlotType, _indexx: f64) -> bool { false } fn get_slot_logic(&self, _slt: LogicSlotType, index: f64) -> Result { - return Err(LogicError::SlotIndexOutOfRange(index, self.slots_count())); + Err(LogicError::SlotIndexOutOfRange(index, self.slots_count())) } fn valid_logic_types(&self) -> Vec { self.fields.keys().copied().collect() @@ -235,8 +235,7 @@ impl SourceCode for ItemIntegratedCircuit10 { impl IntegratedCircuit for ItemIntegratedCircuit10 { fn get_circuit_holder(&self) -> Option { self.get_parent_slot() - .map(|parent_slot| self.get_vm().get_object(parent_slot.parent)) - .flatten() + .and_then(|parent_slot| self.get_vm().get_object(parent_slot.parent)) } fn get_instruction_pointer(&self) -> f64 { self.ip as f64 @@ -371,7 +370,7 @@ impl IC10Marker for ItemIntegratedCircuit10 {} impl Programmable for ItemIntegratedCircuit10 { fn step(&mut self, advance_ip_on_err: bool) -> Result<(), crate::errors::ICError> { - if matches!(&self.state, ICState::HasCaughtFire ) { + if matches!(&self.state, ICState::HasCaughtFire) { return Ok(()); } if matches!(&self.state, ICState::Error(_)) && !advance_ip_on_err { @@ -394,7 +393,7 @@ impl Programmable for ItemIntegratedCircuit10 { return Err(ICError::SleepDurationError(*sleep_for)); } } - if self.ip >= self.program.len() || self.program.len() == 0 { + if self.ip >= self.program.len() || self.program.is_empty() { self.state = ICState::Ended; return Ok(()); } @@ -403,17 +402,34 @@ impl Programmable for ItemIntegratedCircuit10 { let line = self.program.get_line(self.ip)?.clone(); let operands = &line.operands; let instruction = line.instruction; - instruction.execute(self, operands)?; - self.ip = self.next_ip; - if self.ip >= self.program.len() { - self.state = ICState::Ended; + let result = instruction.execute(self, operands); + + let was_error = if let Err(_err) = result { + 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() { + 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 index 88052d5..613c96f 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -1167,7 +1167,7 @@ impl ObjectTemplate { logic: logic.into(), memory: mem_r.into(), })), - _ => Err(TemplateError::NonConformingObject(obj_ref.get_id())), + _ => Err(TemplateError::NonConformingObject(*obj_ref.get_id())), } } } @@ -1243,7 +1243,7 @@ impl From<&VMObject> for ObjectInfo { let obj_ref = obj.borrow(); ObjectInfo { name: Some(obj_ref.get_name().value.clone()), - id: Some(obj_ref.get_id()), + id: Some(*obj_ref.get_id()), } } } diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index a85703d..75c98fb 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -22,7 +22,6 @@ pub struct ParentSlotInfo { pub parent: ObjectID, pub slot: usize, } - tag_object_traits! { #![object_trait(Object: Debug)] @@ -34,8 +33,8 @@ tag_object_traits! { fn slots_count(&self) -> usize; fn get_slot(&self, index: usize) -> Option<&Slot>; fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot>; - fn get_slots(&self) -> &[Slot]; - fn get_slots_mut(&mut self) -> &mut [Slot]; + fn get_slots(&self) -> Vec<&Slot>; + fn get_slots_mut(&mut self) -> Vec<&mut Slot>; } pub trait MemoryReadable { @@ -80,16 +79,25 @@ tag_object_traits! { &self, device: i32, connection: Option, - ) -> Option; + ) -> Option; /// i32::MAX is db + fn get_logicable_from_index_mut( + &mut self, + device: i32, + connection: Option, + ) -> Option; fn get_logicable_from_id( &self, device: ObjectID, connection: Option, - ) -> Option; - fn get_source_code(&self) -> String; - fn set_source_code(&self, code: String); - fn get_ic(&self) -> Option; + ) -> Option; + fn get_logicable_from_id_mut( + &mut self, + device: ObjectID, + connection: Option, + ) -> Option; + fn get_ic(&self) -> Option; + fn get_ic_mut(&self) -> Option; fn hault_and_catch_fire(&mut self); } From b0bdc37a8a728179433d952e336ca3b4aee5d39a Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sat, 18 May 2024 04:28:30 -0700 Subject: [PATCH 23/50] chore(clippy): sweep sweep sweep --- ic10emu/src/interpreter.rs | 169 +++++++++--------- ic10emu/src/network.rs | 18 +- ic10emu/src/vm.rs | 27 ++- ic10emu/src/vm/enums/basic_enums.rs | 42 ++--- ic10emu/src/vm/object.rs | 12 +- ic10emu/src/vm/object/stationpedia/structs.rs | 2 +- .../stationpedia/structs/circuit_holder.rs | 67 +++---- ic10emu/src/vm/object/templates.rs | 88 ++++----- ic10emu/src/vm/object/traits.rs | 4 +- xtask/src/generate/enums.rs | 4 +- 10 files changed, 202 insertions(+), 231 deletions(-) diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index 1c9b0e1..d414422 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -190,92 +190,87 @@ pub fn i64_to_f64(i: i64) -> f64 { #[cfg(test)] mod tests { - use crate::{errors::VMError, vm::VM}; - use super::*; - - use color_eyre::eyre::Ok; - - static INIT: std::sync::Once = std::sync::Once::new(); - - fn setup() { - INIT.call_once(|| { - let _ = color_eyre::install(); - }) - } - - #[test] - fn batch_modes() -> color_eyre::Result<()> { - setup(); - 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.circuit_holders.get(&ic_id).unwrap().borrow(); - 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(); - assert_eq!(r0, 0.0); - vm.step_ic(ic, false)?; - let r1 = ic_chip.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(); - assert_eq!(r2, f64::INFINITY); - Ok(()) - } - - #[test] - fn stack() -> color_eyre::Result<()> { - setup(); - 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.circuit_holders.get(&ic_id).unwrap().borrow(); - vm.set_code( - ic, - r#"push 100 - push 10 - pop r0 - push 1000 - peek r1 - poke 1 20 - pop r2 - "#, - )?; - vm.step_ic(ic, false)?; - let stack0 = ic_chip.peek_addr(0.0)?; - assert_eq!(stack0, 100.0); - vm.step_ic(ic, false)?; - let stack1 = ic_chip.peek_addr(1.0)?; - assert_eq!(stack1, 10.0); - vm.step_ic(ic, false)?; - let r0 = ic_chip.get_register(0, 0).unwrap(); - assert_eq!(r0, 10.0); - vm.step_ic(ic, false)?; - let stack1 = ic_chip.peek_addr(1.0)?; - assert_eq!(stack1, 1000.0); - vm.step_ic(ic, false)?; - let r1 = ic_chip.get_register(0, 1).unwrap(); - assert_eq!(r1, 1000.0); - vm.step_ic(ic, false)?; - let stack1 = ic_chip.peek_addr(1.0)?; - assert_eq!(stack1, 20.0); - vm.step_ic(ic, false)?; - let r2 = ic_chip.get_register(0, 2).unwrap(); - assert_eq!(r2, 20.0); - Ok(()) - } + // static INIT: std::sync::Once = std::sync::Once::new(); + // + // fn setup() { + // INIT.call_once(|| { + // let _ = color_eyre::install(); + // }) + // } + // + // #[test] + // fn batch_modes() -> color_eyre::Result<()> { + // setup(); + // 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.circuit_holders.get(&ic_id).unwrap().borrow(); + // 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(); + // assert_eq!(r0, 0.0); + // vm.step_ic(ic, false)?; + // let r1 = ic_chip.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(); + // assert_eq!(r2, f64::INFINITY); + // Ok(()) + // } + // + // #[test] + // fn stack() -> color_eyre::Result<()> { + // setup(); + // 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.circuit_holders.get(&ic_id).unwrap().borrow(); + // vm.set_code( + // ic, + // r#"push 100 + // push 10 + // pop r0 + // push 1000 + // peek r1 + // poke 1 20 + // pop r2 + // "#, + // )?; + // vm.step_ic(ic, false)?; + // let stack0 = ic_chip.peek_addr(0.0)?; + // assert_eq!(stack0, 100.0); + // vm.step_ic(ic, false)?; + // let stack1 = ic_chip.peek_addr(1.0)?; + // assert_eq!(stack1, 10.0); + // vm.step_ic(ic, false)?; + // let r0 = ic_chip.get_register(0, 0).unwrap(); + // assert_eq!(r0, 10.0); + // vm.step_ic(ic, false)?; + // let stack1 = ic_chip.peek_addr(1.0)?; + // assert_eq!(stack1, 1000.0); + // vm.step_ic(ic, false)?; + // let r1 = ic_chip.get_register(0, 1).unwrap(); + // assert_eq!(r1, 1000.0); + // vm.step_ic(ic, false)?; + // let stack1 = ic_chip.peek_addr(1.0)?; + // assert_eq!(stack1, 20.0); + // vm.step_ic(ic, false)?; + // let r2 = ic_chip.get_register(0, 2).unwrap(); + // assert_eq!(r2, 20.0); + // Ok(()) + // } } diff --git a/ic10emu/src/network.rs b/ic10emu/src/network.rs index e0027c5..f12059d 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -258,19 +258,17 @@ impl Logicable for CableNetwork { } fn can_logic_read(&self, lt: LogicType) -> bool { use LogicType::*; - match lt { - Channel0 | Channel1 | Channel2 | Channel3 | Channel4 | Channel5 | Channel6 - | Channel7 => true, - _ => false, - } + matches!( + lt, + Channel0 | Channel1 | Channel2 | Channel3 | Channel4 | Channel5 | Channel6 | Channel7 + ) } fn can_logic_write(&self, lt: LogicType) -> bool { use LogicType::*; - match lt { - Channel0 | Channel1 | Channel2 | Channel3 | Channel4 | Channel5 | Channel6 - | Channel7 => true, - _ => false, - } + matches!( + lt, + Channel0 | Channel1 | Channel2 | Channel3 | Channel4 | Channel5 | Channel6 | Channel7 + ) } fn get_logic(&self, lt: LogicType) -> Result { use LogicType::*; diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index 484f5da..b5a2f63 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -43,10 +43,11 @@ pub struct VMTransactionNetwork { 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 -pub struct VMTransaction { +struct VMTransaction { pub objects: BTreeMap, pub circuit_holders: Vec, pub program_holders: Vec, @@ -121,13 +122,11 @@ impl VM { .borrow() .get(&net_id) .cloned() - .expect(&format!( - "desync between vm and transaction networks: {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() - .expect(&format!("non network network: {net_id}")); + .unwrap_or_else(|| panic!("non network network: {net_id}")); for id in trans_net.devices { net_interface.add_data(id); } @@ -772,7 +771,7 @@ impl VM { 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) { + if let Some(network) = self.networks.borrow().get(net) { network .borrow_mut() .as_mut_network() @@ -781,7 +780,7 @@ impl VM { } } } - if let Some(_) = device.as_circuit_holder() { + if device.as_circuit_holder().is_some() { self.circuit_holders.borrow_mut().retain(|a| *a != id); } } @@ -955,13 +954,13 @@ impl VM { for (net_id, trans_net) in transaction.networks.into_iter() { let networks_ref = self.networks.borrow(); - let net = networks_ref.get(&net_id).expect(&format!( - "desync between vm and transaction networks: {net_id}" - )); + 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() - .expect(&format!("non network network: {net_id}")); + .unwrap_or_else(|| panic!("non network network: {net_id}")); for id in trans_net.devices { net_interface.add_data(id); } @@ -1025,7 +1024,7 @@ impl VMTransaction { } } - let obj_id = if let Some(obj_id) = template.object_info().map(|info| info.id).flatten() { + let obj_id = if let Some(obj_id) = template.object_info().and_then(|info| info.id) { self.id_space.use_id(obj_id)?; obj_id } else { @@ -1042,7 +1041,7 @@ impl VMTransaction { let occupant_id = self.add_device_from_template(occupant_template)?; storage .get_slot_mut(slot_index) - .expect(&format!("object storage slots out of sync with template which built it: {slot_index}")) + .unwrap_or_else(|| panic!("object storage slots out of sync with template which built it: {slot_index}")) .occupant = Some(occupant_id); } } @@ -1068,7 +1067,7 @@ impl VMTransaction { role: ConnectionRole::None, } = conn { - if let Some(net) = self.networks.get_mut(&net_id) { + 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), diff --git a/ic10emu/src/vm/enums/basic_enums.rs b/ic10emu/src/vm/enums/basic_enums.rs index 5838e36..9c55dfa 100644 --- a/ic10emu/src/vm/enums/basic_enums.rs +++ b/ic10emu/src/vm/enums/basic_enums.rs @@ -918,27 +918,27 @@ impl BasicEnum { pub fn iter() -> impl std::iter::Iterator { use strum::IntoEnumIterator; AirConditioningMode::iter() - .map(|enm| Self::AirCon(enm)) - .chain(AirControlMode::iter().map(|enm| Self::AirControl(enm))) - .chain(ColorType::iter().map(|enm| Self::Color(enm))) - .chain(DaylightSensorMode::iter().map(|enm| Self::DaylightSensorMode(enm))) - .chain(ElevatorMode::iter().map(|enm| Self::ElevatorMode(enm))) - .chain(EntityState::iter().map(|enm| Self::EntityState(enm))) - .chain(GasType::iter().map(|enm| Self::GasType(enm))) - .chain(LogicSlotType::iter().map(|enm| Self::LogicSlotType(enm))) - .chain(LogicType::iter().map(|enm| Self::LogicType(enm))) - .chain(PowerMode::iter().map(|enm| Self::PowerMode(enm))) - .chain(PrinterInstruction::iter().map(|enm| Self::PrinterInstruction(enm))) - .chain(ReEntryProfile::iter().map(|enm| Self::ReEntryProfile(enm))) - .chain(RobotMode::iter().map(|enm| Self::RobotMode(enm))) - .chain(RocketMode::iter().map(|enm| Self::RocketMode(enm))) - .chain(Class::iter().map(|enm| Self::SlotClass(enm))) - .chain(SorterInstruction::iter().map(|enm| Self::SorterInstruction(enm))) - .chain(SortingClass::iter().map(|enm| Self::SortingClass(enm))) - .chain(SoundAlert::iter().map(|enm| Self::Sound(enm))) - .chain(LogicTransmitterMode::iter().map(|enm| Self::TransmitterMode(enm))) - .chain(VentDirection::iter().map(|enm| Self::Vent(enm))) - .chain(ConditionOperation::iter().map(|enm| Self::Unnamed(enm))) + .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 { diff --git a/ic10emu/src/vm/object.rs b/ic10emu/src/vm/object.rs index 3658820..6d63fb5 100644 --- a/ic10emu/src/vm/object.rs +++ b/ic10emu/src/vm/object.rs @@ -86,14 +86,10 @@ impl Name { } } pub fn from_prefab_hash(hash: i32) -> Option { - if let Some(prefab) = StationpediaPrefab::from_repr(hash) { - Some(Name { - value: prefab.to_string(), - hash, - }) - } else { - None - } + StationpediaPrefab::from_repr(hash).map(|prefab| Name { + value: prefab.to_string(), + hash, + }) } pub fn set(&mut self, name: &str) { self.value = name.to_owned(); diff --git a/ic10emu/src/vm/object/stationpedia/structs.rs b/ic10emu/src/vm/object/stationpedia/structs.rs index b2cd51e..74f769d 100644 --- a/ic10emu/src/vm/object/stationpedia/structs.rs +++ b/ic10emu/src/vm/object/stationpedia/structs.rs @@ -1,4 +1,4 @@ -mod integrated_circuit; 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 index 230fb9a..35653ac 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs @@ -138,8 +138,18 @@ impl Logicable for StructureCircuitHousing { } fn can_logic_read(&self, lt: LogicType) -> bool { use LogicType::*; - matches!(lt, Error | LineNumber | NameHash | On | Power | PrefabHash | ReferenceId - | RequiredPower | Setting) + matches!( + lt, + Error + | LineNumber + | NameHash + | On + | Power + | PrefabHash + | ReferenceId + | RequiredPower + | Setting + ) } fn can_logic_write(&self, lt: LogicType) -> bool { use LogicType::*; @@ -152,18 +162,13 @@ impl Logicable for StructureCircuitHousing { LogicType::ReferenceId => Ok(*self.get_id() as f64), LogicType::Error => Ok(self.error as f64), LogicType::LineNumber => { - let result = self - .slot - .occupant - .and_then(|id| { - self.vm - .get_object(id) - .and_then(|obj| { - obj.borrow() - .as_logicable() - .map(|logicable| logicable.get_logic(LogicType::LineNumber)) - }) - }); + let result = self.slot.occupant.and_then(|id| { + self.vm.get_object(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), @@ -203,13 +208,11 @@ impl Logicable for StructureCircuitHousing { .slot .occupant .and_then(|id| { - self.vm - .get_object(id) - .and_then(|obj| { - obj.borrow_mut().as_mut_logicable().map(|logicable| { - logicable.set_logic(LogicType::LineNumber, value, force) - }) + self.vm.get_object(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 => { @@ -326,9 +329,7 @@ impl CircuitHolder for StructureCircuitHousing { 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) + self.vm.get_network(*net).map(ObjectRef::from_vm_object) } else { None } @@ -341,10 +342,7 @@ impl CircuitHolder for StructureCircuitHousing { 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) - }) + pin.and_then(|id| self.vm.get_object(id).map(ObjectRef::from_vm_object)) }) } } @@ -359,9 +357,7 @@ impl CircuitHolder for StructureCircuitHousing { 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) + self.vm.get_network(*net).map(ObjectRefMut::from_vm_object) } else { None } @@ -374,10 +370,7 @@ impl CircuitHolder for StructureCircuitHousing { 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) - }) + pin.and_then(|id| self.vm.get_object(id).map(ObjectRefMut::from_vm_object)) }) } } @@ -393,8 +386,7 @@ impl CircuitHolder for StructureCircuitHousing { if device == self.id { return Some(ObjectRef::from_ref(self.as_object())); } - self.vm - .get_object(device).map(ObjectRef::from_vm_object) + self.vm.get_object(device).map(ObjectRef::from_vm_object) } fn get_logicable_from_id_mut( @@ -408,8 +400,7 @@ impl CircuitHolder for StructureCircuitHousing { if device == self.id { return Some(ObjectRefMut::from_ref(self.as_mut_object())); } - self.vm - .get_object(device).map(ObjectRefMut::from_vm_object) + self.vm.get_object(device).map(ObjectRefMut::from_vm_object) } fn get_ic(&self) -> Option { diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index 613c96f..7e3987e 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -74,7 +74,7 @@ impl ObjectTemplate { } pub fn build(&self, id: ObjectID, vm: &Rc) -> VMObject { - if let Some(obj) = stationpedia::object_from_prefab_template(&self, id, vm) { + if let Some(obj) = stationpedia::object_from_prefab_template(self, id, vm) { obj } else { self.build_generic(id, vm.clone()) @@ -111,7 +111,7 @@ impl ObjectTemplate { .filter_map(|info| { info.occupant .as_ref() - .map(|obj| obj.object_info().map(|obj_info| obj_info.id).flatten()) + .map(|obj| obj.object_info().and_then(|obj_info| obj_info.id)) }) .flatten() .collect(), @@ -121,7 +121,7 @@ impl ObjectTemplate { .filter_map(|info| { info.occupant .as_ref() - .map(|obj| obj.object_info().map(|obj_info| obj_info.id).flatten()) + .map(|obj| obj.object_info().and_then(|obj_info| obj_info.id)) }) .flatten() .collect(), @@ -131,7 +131,7 @@ impl ObjectTemplate { .filter_map(|info| { info.occupant .as_ref() - .map(|obj| obj.object_info().map(|obj_info| obj_info.id).flatten()) + .map(|obj| obj.object_info().and_then(|obj_info| obj_info.id)) }) .flatten() .collect(), @@ -141,7 +141,7 @@ impl ObjectTemplate { .filter_map(|info| { info.occupant .as_ref() - .map(|obj| obj.object_info().map(|obj_info| obj_info.id).flatten()) + .map(|obj| obj.object_info().and_then(|obj_info| obj_info.id)) }) .flatten() .collect(), @@ -151,7 +151,7 @@ impl ObjectTemplate { .filter_map(|info| { info.occupant .as_ref() - .map(|obj| obj.object_info().map(|obj_info| obj_info.id).flatten()) + .map(|obj| obj.object_info().and_then(|obj_info| obj_info.id)) }) .flatten() .collect(), @@ -161,7 +161,7 @@ impl ObjectTemplate { .filter_map(|info| { info.occupant .as_ref() - .map(|obj| obj.object_info().map(|obj_info| obj_info.id).flatten()) + .map(|obj| obj.object_info().and_then(|obj_info| obj_info.id)) }) .flatten() .collect(), @@ -171,7 +171,7 @@ impl ObjectTemplate { .filter_map(|info| { info.occupant .as_ref() - .map(|obj| obj.object_info().map(|obj_info| obj_info.id).flatten()) + .map(|obj| obj.object_info().and_then(|obj_info| obj_info.id)) }) .flatten() .collect(), @@ -257,7 +257,7 @@ impl ObjectTemplate { .copied() .collect::>() }) - .unwrap_or_else(|| Vec::new()), + .unwrap_or_else(Vec::new), writeable_logic: s .logic .logic_slot_types @@ -273,7 +273,7 @@ impl ObjectTemplate { .copied() .collect::>() }) - .unwrap_or_else(|| Vec::new()), + .unwrap_or_else(Vec::new), occupant: None, quantity: info.quantity.unwrap_or(0), }) @@ -292,8 +292,7 @@ impl ObjectTemplate { .logic .logic_values .as_ref() - .map(|values| values.get(key)) - .flatten() + .and_then(|values| values.get(key)) .copied() .unwrap_or(0.0), }, @@ -332,7 +331,7 @@ impl ObjectTemplate { .copied() .collect::>() }) - .unwrap_or_else(|| Vec::new()), + .unwrap_or_else(Vec::new), writeable_logic: s .logic .logic_slot_types @@ -348,7 +347,7 @@ impl ObjectTemplate { .copied() .collect::>() }) - .unwrap_or_else(|| Vec::new()), + .unwrap_or_else(Vec::new), occupant: None, quantity: info.quantity.unwrap_or(0), }) @@ -367,8 +366,7 @@ impl ObjectTemplate { .logic .logic_values .as_ref() - .map(|values| values.get(key)) - .flatten() + .and_then(|values| values.get(key)) .copied() .unwrap_or(0.0), }, @@ -432,7 +430,7 @@ impl ObjectTemplate { .copied() .collect::>() }) - .unwrap_or_else(|| Vec::new()), + .unwrap_or_else(Vec::new), writeable_logic: s .logic .logic_slot_types @@ -450,7 +448,7 @@ impl ObjectTemplate { .copied() .collect::>() }) - .unwrap_or_else(|| Vec::new()), + .unwrap_or_else(Vec::new), occupant: None, quantity: info.quantity.unwrap_or(0), }) @@ -469,8 +467,7 @@ impl ObjectTemplate { .logic .logic_values .as_ref() - .map(|values| values.get(key)) - .flatten() + .and_then(|values| values.get(key)) .copied() .unwrap_or(0.0), }, @@ -502,7 +499,7 @@ impl ObjectTemplate { .memory .values .clone() - .unwrap_or_else(|| vec![0.0; s.memory.memory_size as usize]), + .unwrap_or_else(|| vec![0.0; s.memory.memory_size]), }) } StructureLogicDeviceMemory(s) => { @@ -538,7 +535,7 @@ impl ObjectTemplate { .copied() .collect::>() }) - .unwrap_or_else(|| Vec::new()), + .unwrap_or_else(Vec::new), writeable_logic: s .logic .logic_slot_types @@ -556,7 +553,7 @@ impl ObjectTemplate { .copied() .collect::>() }) - .unwrap_or_else(|| Vec::new()), + .unwrap_or_else(Vec::new), occupant: None, quantity: info.quantity.unwrap_or(0), }) @@ -575,8 +572,7 @@ impl ObjectTemplate { .logic .logic_values .as_ref() - .map(|values| values.get(key)) - .flatten() + .and_then(|values| values.get(key)) .copied() .unwrap_or(0.0), }, @@ -608,7 +604,7 @@ impl ObjectTemplate { .memory .values .clone() - .unwrap_or_else(|| vec![0.0; s.memory.memory_size as usize]), + .unwrap_or_else(|| vec![0.0; s.memory.memory_size]), }) } Item(i) => VMObject::new(GenericItem { @@ -676,7 +672,7 @@ impl ObjectTemplate { .copied() .collect::>() }) - .unwrap_or_else(|| Vec::new()), + .unwrap_or_else(Vec::new), writeable_logic: i .logic .logic_slot_types @@ -692,7 +688,7 @@ impl ObjectTemplate { .copied() .collect::>() }) - .unwrap_or_else(|| Vec::new()), + .unwrap_or_else(Vec::new), occupant: None, quantity: info.quantity.unwrap_or(0), }) @@ -711,8 +707,7 @@ impl ObjectTemplate { .logic .logic_values .as_ref() - .map(|values| values.get(key)) - .flatten() + .and_then(|values| values.get(key)) .copied() .unwrap_or(0.0), }, @@ -756,7 +751,7 @@ impl ObjectTemplate { .copied() .collect::>() }) - .unwrap_or_else(|| Vec::new()), + .unwrap_or_else(Vec::new), writeable_logic: i .logic .logic_slot_types @@ -774,7 +769,7 @@ impl ObjectTemplate { .copied() .collect::>() }) - .unwrap_or_else(|| Vec::new()), + .unwrap_or_else(Vec::new), occupant: None, quantity: info.quantity.unwrap_or(0), }) @@ -793,8 +788,7 @@ impl ObjectTemplate { .logic .logic_values .as_ref() - .map(|values| values.get(key)) - .flatten() + .and_then(|values| values.get(key)) .copied() .unwrap_or(0.0), }, @@ -806,7 +800,7 @@ impl ObjectTemplate { .memory .values .clone() - .unwrap_or_else(|| vec![0.0; i.memory.memory_size as usize]), + .unwrap_or_else(|| vec![0.0; i.memory.memory_size]), }) } ItemLogicMemory(i) => VMObject::new(GenericItemLogicableMemoryReadWriteable { @@ -841,7 +835,7 @@ impl ObjectTemplate { .copied() .collect::>() }) - .unwrap_or_else(|| Vec::new()), + .unwrap_or_else(Vec::new), writeable_logic: i .logic .logic_slot_types @@ -857,7 +851,7 @@ impl ObjectTemplate { .copied() .collect::>() }) - .unwrap_or_else(|| Vec::new()), + .unwrap_or_else(Vec::new), occupant: None, quantity: info.quantity.unwrap_or(0), }) @@ -876,8 +870,7 @@ impl ObjectTemplate { .logic .logic_values .as_ref() - .map(|values| values.get(key)) - .flatten() + .and_then(|values| values.get(key)) .copied() .unwrap_or(0.0), }, @@ -889,7 +882,7 @@ impl ObjectTemplate { .memory .values .clone() - .unwrap_or_else(|| vec![0.0; i.memory.memory_size as usize]), + .unwrap_or_else(|| vec![0.0; i.memory.memory_size]), }), } } @@ -1218,13 +1211,11 @@ impl From<&VMObject> for PrefabInfo { prefab_name: obj_prefab.value.clone(), prefab_hash: obj_prefab.hash, name: prefab_lookup - .map(|prefab| prefab.get_str("name")) - .flatten() + .and_then(|prefab| prefab.get_str("name")) .unwrap_or("") .to_string(), desc: prefab_lookup - .map(|prefab| prefab.get_str("desc")) - .flatten() + .and_then(|prefab| prefab.get_str("desc")) .unwrap_or("") .to_string(), } @@ -1433,9 +1424,7 @@ impl From> for DeviceInfo { .map(|conn| conn.to_info()) .collect(), device_pins_length: device.device_pins().map(|pins| pins.len()), - device_pins: device - .device_pins() - .map(|pins| pins.iter().copied().collect()), + device_pins: device.device_pins().map(|pins| pins.to_vec()), has_reagents: device.has_reagents(), has_lock_state: device.has_lock_state(), has_mode_state: device.has_mode_state(), @@ -1497,7 +1486,7 @@ impl From> for MemoryInfo { MemoryAccess::Read }, memory_size: mem_r.memory_size(), - values: Some(mem_r.get_memory_slice().iter().copied().collect()), + values: Some(mem_r.get_memory_slice().to_vec()), } } } @@ -1619,6 +1608,7 @@ mod tests { }) } + #[allow(dead_code)] #[derive(Debug, Deserialize)] struct Database { pub prefabs: BTreeMap, @@ -1631,7 +1621,7 @@ mod tests { d = d.parent().unwrap().join("data").join("database.json"); println!("loading database from {}", d.display()); - let database: Database = serde_json::from_reader(BufReader::new(File::open(d)?))?; + let _database: Database = serde_json::from_reader(BufReader::new(File::open(d)?))?; Ok(()) } diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index 75c98fb..5a08d45 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -11,7 +11,9 @@ use crate::{ }, instructions::{traits::ICInstructable, Instruction}, object::{ - errors::{LogicError, MemoryError}, macros::tag_object_traits, ObjectID, Slot, VMObject + errors::{LogicError, MemoryError}, + macros::tag_object_traits, + ObjectID, Slot, VMObject, }, }, }; diff --git a/xtask/src/generate/enums.rs b/xtask/src/generate/enums.rs index 57308c3..fe83464 100644 --- a/xtask/src/generate/enums.rs +++ b/xtask/src/generate/enums.rs @@ -140,9 +140,9 @@ fn write_enum_aggragate_mod( .to_case(Case::Pascal); let enum_name = listing.enum_name.to_case(Case::Pascal); if index == 0 { - format!("{enum_name}::iter().map(|enm| Self::{variant_name}(enm))") + format!("{enum_name}::iter().map(Self::{variant_name})") } else { - format!(".chain({enum_name}::iter().map(|enm| Self::{variant_name}(enm)))") + format!(".chain({enum_name}::iter().map(Self::{variant_name}))") } }) .collect::>() From 4346bc530267ff9cd90e3fbd6c0237f34b07b679 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sun, 19 May 2024 21:44:15 -0700 Subject: [PATCH 24/50] refactor(vm): pull generated data into new crate pregenerate prefab templates -> locked behind crate feature --- Cargo.lock | 315 +- Cargo.toml | 8 +- data/database.json | 2 +- ic10emu/Cargo.toml | 19 +- ic10emu/src/grammar.rs | 62 +- ic10emu/src/interpreter/instructions.rs | 2 +- ic10emu/src/network.rs | 55 - ic10emu/src/vm.rs | 31 +- ic10emu/src/vm/enums.rs | 3 - ic10emu/src/vm/enums/prefabs.rs | 10124 ---- ic10emu/src/vm/enums/script_enums.rs | 2287 - ic10emu/src/vm/instructions/enums.rs | 2249 +- ic10emu/src/vm/instructions/operands.rs | 31 +- ic10emu/src/vm/instructions/traits.rs | 3079 +- ic10emu/src/vm/object.rs | 18 +- ic10emu/src/vm/object/errors.rs | 2 +- ic10emu/src/vm/object/generic/structs.rs | 12 +- ic10emu/src/vm/object/generic/traits.rs | 23 +- ic10emu/src/vm/object/stationpedia.rs | 7 +- .../stationpedia/structs/circuit_holder.rs | 13 +- .../structs/integrated_circuit.rs | 8 +- ic10emu/src/vm/object/templates.rs | 317 +- ic10emu/src/vm/object/traits.rs | 8 +- ic10emu_wasm/Cargo.toml | 14 +- ic10lsp_wasm/Cargo.toml | 8 +- rust-analyzer.json | 4 +- stationeers_data/Cargo.toml | 16 + stationeers_data/src/database/prefab_map.rs | 43567 ++++++++++++++++ .../src}/enums/basic_enums.rs | 1390 +- stationeers_data/src/enums/prefabs.rs | 7686 +++ stationeers_data/src/enums/script_enums.rs | 2091 + stationeers_data/src/lib.rs | 108 + stationeers_data/src/templates.rs | 237 + xtask/Cargo.toml | 17 +- xtask/src/generate.rs | 87 +- xtask/src/generate/database.rs | 354 +- xtask/src/generate/enums.rs | 428 +- xtask/src/generate/instructions.rs | 233 +- xtask/src/main.rs | 21 +- xtask/src/stationpedia.rs | 4 +- 40 files changed, 59148 insertions(+), 15792 deletions(-) delete mode 100644 ic10emu/src/vm/enums.rs delete mode 100644 ic10emu/src/vm/enums/prefabs.rs delete mode 100644 ic10emu/src/vm/enums/script_enums.rs create mode 100644 stationeers_data/Cargo.toml create mode 100644 stationeers_data/src/database/prefab_map.rs rename {ic10emu/src/vm => stationeers_data/src}/enums/basic_enums.rs (56%) create mode 100644 stationeers_data/src/enums/prefabs.rs create mode 100644 stationeers_data/src/enums/script_enums.rs create mode 100644 stationeers_data/src/lib.rs create mode 100644 stationeers_data/src/templates.rs diff --git a/Cargo.lock b/Cargo.lock index 8a204c4..aa20a30 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -119,7 +119,7 @@ checksum = "a507401cad91ec6a857ed5513a2073c82a9b9048762b885bb98655b306964681" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.64", ] [[package]] @@ -130,14 +130,14 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.64", ] [[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" @@ -196,9 +196,9 @@ checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "bumpalo" -version = "3.15.4" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytes" @@ -228,9 +228,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 = "cexpr" @@ -249,15 +249,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]] @@ -302,7 +302,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.64", ] [[package]] @@ -396,7 +396,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn 2.0.57", + "syn 2.0.64", ] [[package]] @@ -407,7 +407,7 @@ checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ "darling_core", "quote", - "syn 2.0.57", + "syn 2.0.64", ] [[package]] @@ -417,7 +417,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", @@ -536,7 +536,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.64", ] [[package]] @@ -602,9 +602,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" @@ -685,6 +685,7 @@ dependencies = [ "serde_derive", "serde_json", "serde_with", + "stationeers_data", "strum", "strum_macros", "thiserror", @@ -784,15 +785,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", ] @@ -837,7 +838,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" dependencies = [ "cfg-if", - "windows-targets 0.52.4", + "windows-targets 0.52.5", ] [[package]] @@ -848,9 +849,9 @@ checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" [[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", @@ -933,6 +934,39 @@ dependencies = [ "minimal-lexical", ] +[[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" @@ -940,10 +974,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", ] @@ -1011,9 +1076,9 @@ checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" dependencies = [ "lock_api", "parking_lot_core", @@ -1021,22 +1086,22 @@ 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.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "peeking_take_while" @@ -1125,7 +1190,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.64", ] [[package]] @@ -1163,7 +1228,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.64", ] [[package]] @@ -1196,6 +1261,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.64", +] + [[package]] name = "proc-macro-hack" version = "0.5.20+deprecated" @@ -1204,18 +1279,18 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.79" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -1252,11 +1327,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 1.3.2", + "bitflags 2.5.0", ] [[package]] @@ -1290,9 +1365,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 = "rustc-hash" @@ -1321,9 +1396,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" @@ -1333,9 +1408,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.201" +version = "1.0.202" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" +checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" dependencies = [ "serde_derive", ] @@ -1364,13 +1439,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.201" +version = "1.0.202" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" +checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.64", ] [[package]] @@ -1381,7 +1456,7 @@ checksum = "e578a843d40b4189a4d66bba51d7684f57da5bd7c304c64e14bd63efbef49509" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.64", ] [[package]] @@ -1422,7 +1497,7 @@ checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.64", ] [[package]] @@ -1452,7 +1527,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.64", ] [[package]] @@ -1472,9 +1547,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[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", ] @@ -1502,14 +1577,25 @@ 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 = [ + "num-integer", + "phf 0.11.2", + "serde", + "serde_derive", + "strum", +] + [[package]] name = "strsim" version = "0.10.0" @@ -1542,7 +1628,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.57", + "syn 2.0.64", ] [[package]] @@ -1558,9 +1644,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.57" +version = "2.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11a6ae1e52eb25aab8f3fb9fca13be982a373b8f1157ca14b897a825ba4a2d35" +checksum = "7ad3dee41f36859875573074334c200d1add8e4a87bb37113ebd31d926b7b11f" dependencies = [ "proc-macro2", "quote", @@ -1575,22 +1661,22 @@ checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "thiserror" -version = "1.0.58" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +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.64", ] [[package]] @@ -1605,9 +1691,9 @@ dependencies = [ [[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", @@ -1629,9 +1715,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", @@ -1679,7 +1765,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.64", ] [[package]] @@ -1748,7 +1834,7 @@ checksum = "84fd902d4e0b9a4b27f2f440108dc034e1758628a9b702f8ec61ad66355422fa" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.64", ] [[package]] @@ -1776,7 +1862,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.64", ] [[package]] @@ -1872,7 +1958,17 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.57", + "syn 2.0.64", +] + +[[package]] +name = "uneval" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63cc5d2fd8648d7e2be86098f60c9ece7045cc710b3c1e226910e2f37d11dc73" +dependencies = [ + "serde", + "thiserror", ] [[package]] @@ -1953,7 +2049,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.64", "wasm-bindgen-shared", ] @@ -1988,7 +2084,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.64", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2040,7 +2136,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]] @@ -2058,7 +2154,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]] @@ -2078,17 +2174,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]] @@ -2099,9 +2196,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" @@ -2111,9 +2208,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" @@ -2123,9 +2220,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" @@ -2135,9 +2238,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" @@ -2147,9 +2250,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" @@ -2159,9 +2262,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" @@ -2171,9 +2274,9 @@ 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" @@ -2183,8 +2286,13 @@ dependencies = [ "color-eyre", "convert_case", "indexmap 2.2.6", + "num", + "num-integer", "onig", "phf_codegen", + "prettyplease", + "proc-macro2", + "quote", "regex", "serde", "serde_derive", @@ -2192,7 +2300,10 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_with", + "stationeers_data", + "syn 2.0.64", "textwrap", "thiserror", "tracing", + "uneval", ] diff --git a/Cargo.toml b/Cargo.toml index fdc3b4c..ba3a694 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/data/database.json b/data/database.json index 43ee24c..681d84b 100644 --- a/data/database.json +++ b/data/database.json @@ -1 +1 @@ -{"prefabs":{"AccessCardBlack":{"prefab":{"prefabName":"AccessCardBlack","prefabHash":-1330388999,"desc":"","name":"Access Card (Black)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardBlue":{"prefab":{"prefabName":"AccessCardBlue","prefabHash":-1411327657,"desc":"","name":"Access Card (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardBrown":{"prefab":{"prefabName":"AccessCardBrown","prefabHash":1412428165,"desc":"","name":"Access Card (Brown)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardGray":{"prefab":{"prefabName":"AccessCardGray","prefabHash":-1339479035,"desc":"","name":"Access Card (Gray)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardGreen":{"prefab":{"prefabName":"AccessCardGreen","prefabHash":-374567952,"desc":"","name":"Access Card (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardKhaki":{"prefab":{"prefabName":"AccessCardKhaki","prefabHash":337035771,"desc":"","name":"Access Card (Khaki)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardOrange":{"prefab":{"prefabName":"AccessCardOrange","prefabHash":-332896929,"desc":"","name":"Access Card (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardPink":{"prefab":{"prefabName":"AccessCardPink","prefabHash":431317557,"desc":"","name":"Access Card (Pink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardPurple":{"prefab":{"prefabName":"AccessCardPurple","prefabHash":459843265,"desc":"","name":"Access Card (Purple)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardRed":{"prefab":{"prefabName":"AccessCardRed","prefabHash":-1713748313,"desc":"","name":"Access Card (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardWhite":{"prefab":{"prefabName":"AccessCardWhite","prefabHash":2079959157,"desc":"","name":"Access Card (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"AccessCardYellow":{"prefab":{"prefabName":"AccessCardYellow","prefabHash":568932536,"desc":"","name":"Access Card (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"AccessCard","sortingClass":"Default"}},"ApplianceChemistryStation":{"prefab":{"prefabName":"ApplianceChemistryStation","prefabHash":1365789392,"desc":"","name":"Chemistry Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"ApplianceDeskLampLeft":{"prefab":{"prefabName":"ApplianceDeskLampLeft","prefabHash":-1683849799,"desc":"","name":"Appliance Desk Lamp Left"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"}},"ApplianceDeskLampRight":{"prefab":{"prefabName":"ApplianceDeskLampRight","prefabHash":1174360780,"desc":"","name":"Appliance Desk Lamp Right"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"}},"ApplianceMicrowave":{"prefab":{"prefabName":"ApplianceMicrowave","prefabHash":-1136173965,"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.","name":"Microwave"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"AppliancePackagingMachine":{"prefab":{"prefabName":"AppliancePackagingMachine","prefabHash":-749191906,"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 ","name":"Basic Packaging Machine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Export","typ":"None"}]},"AppliancePaintMixer":{"prefab":{"prefabName":"AppliancePaintMixer","prefabHash":-1339716113,"desc":"","name":"Paint Mixer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Output","typ":"Bottle"}]},"AppliancePlantGeneticAnalyzer":{"prefab":{"prefabName":"AppliancePlantGeneticAnalyzer","prefabHash":-1303038067,"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.","name":"Plant Genetic Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Input","typ":"Tool"}]},"AppliancePlantGeneticSplicer":{"prefab":{"prefabName":"AppliancePlantGeneticSplicer","prefabHash":-1094868323,"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.","name":"Plant Genetic Splicer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Source Plant","typ":"Plant"},{"name":"Target Plant","typ":"Plant"}]},"AppliancePlantGeneticStabilizer":{"prefab":{"prefabName":"AppliancePlantGeneticStabilizer","prefabHash":871432335,"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 ","name":"Plant Genetic Stabilizer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Plant","typ":"Plant"}]},"ApplianceReagentProcessor":{"prefab":{"prefabName":"ApplianceReagentProcessor","prefabHash":1260918085,"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.","name":"Reagent Processor"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"Input","typ":"None"},{"name":"Output","typ":"None"}]},"ApplianceSeedTray":{"prefab":{"prefabName":"ApplianceSeedTray","prefabHash":142831994,"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.","name":"Appliance Seed Tray"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"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"}]},"ApplianceTabletDock":{"prefab":{"prefabName":"ApplianceTabletDock","prefabHash":1853941363,"desc":"","name":"Tablet Dock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Appliance","sortingClass":"Appliances"},"slots":[{"name":"","typ":"Tool"}]},"AutolathePrinterMod":{"prefab":{"prefabName":"AutolathePrinterMod","prefabHash":221058307,"desc":"Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Autolathe Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"Battery_Wireless_cell":{"prefab":{"prefabName":"Battery_Wireless_cell","prefabHash":-462415758,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Battery_Wireless_cell_Big":{"prefab":{"prefabName":"Battery_Wireless_cell_Big","prefabHash":-41519077,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell (Big)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"CardboardBox":{"prefab":{"prefabName":"CardboardBox","prefabHash":-1976947556,"desc":"","name":"Cardboard Box"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Storage"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"CartridgeAccessController":{"prefab":{"prefabName":"CartridgeAccessController","prefabHash":-1634532552,"desc":"","name":"Cartridge (Access Controller)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeAtmosAnalyser":{"prefab":{"prefabName":"CartridgeAtmosAnalyser","prefabHash":-1550278665,"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.","name":"Atmos Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeConfiguration":{"prefab":{"prefabName":"CartridgeConfiguration","prefabHash":-932136011,"desc":"","name":"Configuration"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeElectronicReader":{"prefab":{"prefabName":"CartridgeElectronicReader","prefabHash":-1462180176,"desc":"","name":"eReader"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeGPS":{"prefab":{"prefabName":"CartridgeGPS","prefabHash":-1957063345,"desc":"","name":"GPS"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeGuide":{"prefab":{"prefabName":"CartridgeGuide","prefabHash":872720793,"desc":"","name":"Guide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeMedicalAnalyser":{"prefab":{"prefabName":"CartridgeMedicalAnalyser","prefabHash":-1116110181,"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.","name":"Medical Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeNetworkAnalyser":{"prefab":{"prefabName":"CartridgeNetworkAnalyser","prefabHash":1606989119,"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.","name":"Network Analyzer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeOreScanner":{"prefab":{"prefabName":"CartridgeOreScanner","prefabHash":-1768732546,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet.","name":"Ore Scanner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeOreScannerColor":{"prefab":{"prefabName":"CartridgeOreScannerColor","prefabHash":1738236580,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground in different colors on the tablet.","name":"Ore Scanner (Color)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgePlantAnalyser":{"prefab":{"prefabName":"CartridgePlantAnalyser","prefabHash":1101328282,"desc":"","name":"Cartridge Plant Analyser"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CartridgeTracker":{"prefab":{"prefabName":"CartridgeTracker","prefabHash":81488783,"desc":"","name":"Tracker"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Cartridge","sortingClass":"Default"}},"CircuitboardAdvAirlockControl":{"prefab":{"prefabName":"CircuitboardAdvAirlockControl","prefabHash":1633663176,"desc":"","name":"Advanced Airlock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardAirControl":{"prefab":{"prefabName":"CircuitboardAirControl","prefabHash":1618019559,"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. ","name":"Air Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardAirlockControl":{"prefab":{"prefabName":"CircuitboardAirlockControl","prefabHash":912176135,"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.","name":"Airlock"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardCameraDisplay":{"prefab":{"prefabName":"CircuitboardCameraDisplay","prefabHash":-412104504,"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.","name":"Camera Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardDoorControl":{"prefab":{"prefabName":"CircuitboardDoorControl","prefabHash":855694771,"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.","name":"Door Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardGasDisplay":{"prefab":{"prefabName":"CircuitboardGasDisplay","prefabHash":-82343730,"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).","name":"Gas Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardGraphDisplay":{"prefab":{"prefabName":"CircuitboardGraphDisplay","prefabHash":1344368806,"desc":"","name":"Graph Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardHashDisplay":{"prefab":{"prefabName":"CircuitboardHashDisplay","prefabHash":1633074601,"desc":"","name":"Hash Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardModeControl":{"prefab":{"prefabName":"CircuitboardModeControl","prefabHash":-1134148135,"desc":"Can't decide which mode you love most? This circuit board allows you to switch any connected device between operation modes.","name":"Mode Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardPowerControl":{"prefab":{"prefabName":"CircuitboardPowerControl","prefabHash":-1923778429,"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. ","name":"Power Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardShipDisplay":{"prefab":{"prefabName":"CircuitboardShipDisplay","prefabHash":-2044446819,"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.","name":"Ship Display"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CircuitboardSolarControl":{"prefab":{"prefabName":"CircuitboardSolarControl","prefabHash":2020180320,"desc":"Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel.","name":"Solar Control"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"CompositeRollCover":{"prefab":{"prefabName":"CompositeRollCover","prefabHash":1228794916,"desc":"0.Operate\n1.Logic","name":"Composite Roll Cover"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"CrateMkII":{"prefab":{"prefabName":"CrateMkII","prefabHash":8709219,"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.","name":"Crate Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Storage"},"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"}]},"DecayedFood":{"prefab":{"prefabName":"DecayedFood","prefabHash":1531087544,"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","name":"Decayed Food"},"item":{"consumable":false,"ingredient":false,"maxQuantity":25,"slotClass":"None","sortingClass":"Default"}},"DeviceLfoVolume":{"prefab":{"prefabName":"DeviceLfoVolume","prefabHash":-1844430312,"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.","name":"Low frequency oscillator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Bpm":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"DeviceStepUnit":{"prefab":{"prefabName":"DeviceStepUnit","prefabHash":1762696475,"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","name":"Device Step Unit"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"DynamicAirConditioner":{"prefab":{"prefabName":"DynamicAirConditioner","prefabHash":519913639,"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.","name":"Portable Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicCrate":{"prefab":{"prefabName":"DynamicCrate","prefabHash":1941079206,"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.","name":"Dynamic Crate"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Storage"},"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"}]},"DynamicGPR":{"prefab":{"prefabName":"DynamicGPR","prefabHash":-2085885850,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicGasCanisterAir":{"prefab":{"prefabName":"DynamicGasCanisterAir","prefabHash":-1713611165,"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.","name":"Portable Gas Tank (Air)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterCarbonDioxide":{"prefab":{"prefabName":"DynamicGasCanisterCarbonDioxide","prefabHash":-322413931,"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.","name":"Portable Gas Tank (CO2)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterEmpty":{"prefab":{"prefabName":"DynamicGasCanisterEmpty","prefabHash":-1741267161,"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.","name":"Portable Gas Tank"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterFuel":{"prefab":{"prefabName":"DynamicGasCanisterFuel","prefabHash":-817051527,"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.","name":"Portable Gas Tank (Fuel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrogen":{"prefab":{"prefabName":"DynamicGasCanisterNitrogen","prefabHash":121951301,"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.","name":"Portable Gas Tank (Nitrogen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrousOxide":{"prefab":{"prefabName":"DynamicGasCanisterNitrousOxide","prefabHash":30727200,"desc":"","name":"Portable Gas Tank (Nitrous Oxide)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterOxygen":{"prefab":{"prefabName":"DynamicGasCanisterOxygen","prefabHash":1360925836,"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.","name":"Portable Gas Tank (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterPollutants":{"prefab":{"prefabName":"DynamicGasCanisterPollutants","prefabHash":396065382,"desc":"","name":"Portable Gas Tank (Pollutants)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterRocketFuel":{"prefab":{"prefabName":"DynamicGasCanisterRocketFuel","prefabHash":-8883951,"desc":"","name":"Dynamic Gas Canister Rocket Fuel"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterVolatiles":{"prefab":{"prefabName":"DynamicGasCanisterVolatiles","prefabHash":108086870,"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.","name":"Portable Gas Tank (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterWater":{"prefab":{"prefabName":"DynamicGasCanisterWater","prefabHash":197293625,"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.","name":"Portable Liquid Tank (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"LiquidCanister"}]},"DynamicGasTankAdvanced":{"prefab":{"prefabName":"DynamicGasTankAdvanced","prefabHash":-386375420,"desc":"0.Mode0\n1.Mode1","name":"Gas Tank Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasTankAdvancedOxygen":{"prefab":{"prefabName":"DynamicGasTankAdvancedOxygen","prefabHash":-1264455519,"desc":"0.Mode0\n1.Mode1","name":"Portable Gas Tank Mk II (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGenerator":{"prefab":{"prefabName":"DynamicGenerator","prefabHash":-82087220,"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.","name":"Portable Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"GasCanister"},{"name":"Battery","typ":"Battery"}]},"DynamicHydroponics":{"prefab":{"prefabName":"DynamicHydroponics","prefabHash":587726607,"desc":"","name":"Portable Hydroponics"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"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"}]},"DynamicLight":{"prefab":{"prefabName":"DynamicLight","prefabHash":-21970188,"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.","name":"Portable Light"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicLiquidCanisterEmpty":{"prefab":{"prefabName":"DynamicLiquidCanisterEmpty","prefabHash":-1939209112,"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.","name":"Portable Liquid Tank"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterEmpty":{"prefab":{"prefabName":"DynamicMKIILiquidCanisterEmpty","prefabHash":2130739600,"desc":"An empty, insulated liquid Gas Canister.","name":"Portable Liquid Tank Mk II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterWater":{"prefab":{"prefabName":"DynamicMKIILiquidCanisterWater","prefabHash":-319510386,"desc":"An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature.","name":"Portable Liquid Tank Mk II (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicScrubber":{"prefab":{"prefabName":"DynamicScrubber","prefabHash":755048589,"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.","name":"Portable Air Scrubber"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"}]},"DynamicSkeleton":{"prefab":{"prefabName":"DynamicSkeleton","prefabHash":106953348,"desc":"","name":"Skeleton"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ElectronicPrinterMod":{"prefab":{"prefabName":"ElectronicPrinterMod","prefabHash":-311170652,"desc":"Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Electronic Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ElevatorCarrage":{"prefab":{"prefabName":"ElevatorCarrage","prefabHash":-110788403,"desc":"","name":"Elevator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"EntityChick":{"prefab":{"prefabName":"EntityChick","prefabHash":1730165908,"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.","name":"Entity Chick"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenBrown":{"prefab":{"prefabName":"EntityChickenBrown","prefabHash":334097180,"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.","name":"Entity Chicken Brown"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenWhite":{"prefab":{"prefabName":"EntityChickenWhite","prefabHash":1010807532,"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.","name":"Entity Chicken White"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBlack":{"prefab":{"prefabName":"EntityRoosterBlack","prefabHash":966959649,"desc":"This is a rooster. It is black. There is dignity in this.","name":"Entity Rooster Black"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBrown":{"prefab":{"prefabName":"EntityRoosterBrown","prefabHash":-583103395,"desc":"The common brown rooster. Don't let it hear you say that.","name":"Entity Rooster Brown"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"Fertilizer":{"prefab":{"prefabName":"Fertilizer","prefabHash":1517856652,"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. ","name":"Fertilizer"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Default"}},"FireArmSMG":{"prefab":{"prefabName":"FireArmSMG","prefabHash":-86315541,"desc":"0.Single\n1.Auto","name":"Fire Arm SMG"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"slots":[{"name":"","typ":"Magazine"}]},"Flag_ODA_10m":{"prefab":{"prefabName":"Flag_ODA_10m","prefabHash":1845441951,"desc":"","name":"Flag (ODA 10m)"},"structure":{"smallGrid":true}},"Flag_ODA_4m":{"prefab":{"prefabName":"Flag_ODA_4m","prefabHash":1159126354,"desc":"","name":"Flag (ODA 4m)"},"structure":{"smallGrid":true}},"Flag_ODA_6m":{"prefab":{"prefabName":"Flag_ODA_6m","prefabHash":1998634960,"desc":"","name":"Flag (ODA 6m)"},"structure":{"smallGrid":true}},"Flag_ODA_8m":{"prefab":{"prefabName":"Flag_ODA_8m","prefabHash":-375156130,"desc":"","name":"Flag (ODA 8m)"},"structure":{"smallGrid":true}},"FlareGun":{"prefab":{"prefabName":"FlareGun","prefabHash":118685786,"desc":"","name":"Flare Gun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Magazine","typ":"Flare"},{"name":"","typ":"Blocked"}]},"H2Combustor":{"prefab":{"prefabName":"H2Combustor","prefabHash":1840108251,"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.","name":"H2 Combustor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","Combustion":"Read","CombustionInput":"Read","CombustionOutput":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidHydrogen":"Read","RatioLiquidNitrogen":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"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","RatioSteamInput":"Read","RatioSteamOutput":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"Handgun":{"prefab":{"prefabName":"Handgun","prefabHash":247238062,"desc":"","name":"Handgun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"slots":[{"name":"Magazine","typ":"Magazine"}]},"HandgunMagazine":{"prefab":{"prefabName":"HandgunMagazine","prefabHash":1254383185,"desc":"","name":"Handgun Magazine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Magazine","sortingClass":"Default"}},"HumanSkull":{"prefab":{"prefabName":"HumanSkull","prefabHash":-857713709,"desc":"","name":"Human Skull"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ImGuiCircuitboardAirlockControl":{"prefab":{"prefabName":"ImGuiCircuitboardAirlockControl","prefabHash":-73796547,"desc":"","name":"Airlock (Experimental)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Circuitboard","sortingClass":"Default"}},"ItemActiveVent":{"prefab":{"prefabName":"ItemActiveVent","prefabHash":-842048328,"desc":"When constructed, this kit places an Active Vent on any support structure.","name":"Kit (Active Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemAdhesiveInsulation":{"prefab":{"prefabName":"ItemAdhesiveInsulation","prefabHash":1871048978,"desc":"","name":"Adhesive Insulation"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"Tool","sortingClass":"Tools"}},"ItemAdvancedTablet":{"prefab":{"prefabName":"ItemAdvancedTablet","prefabHash":1722785341,"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","name":"Advanced Tablet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read","SoundAlert":"ReadWrite","Volume":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"},{"name":"Cartridge1","typ":"Cartridge"},{"name":"Programmable Chip","typ":"ProgrammableChip"}]},"ItemAlienMushroom":{"prefab":{"prefabName":"ItemAlienMushroom","prefabHash":176446172,"desc":"","name":"Alien Mushroom"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Default"}},"ItemAmmoBox":{"prefab":{"prefabName":"ItemAmmoBox","prefabHash":-9559091,"desc":"","name":"Ammo Box"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemAngleGrinder":{"prefab":{"prefabName":"ItemAngleGrinder","prefabHash":201215010,"desc":"Angles-be-gone with the trusty angle grinder.","name":"Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemArcWelder":{"prefab":{"prefabName":"ItemArcWelder","prefabHash":1385062886,"desc":"","name":"Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemAreaPowerControl":{"prefab":{"prefabName":"ItemAreaPowerControl","prefabHash":1757673317,"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.","name":"Kit (Power Controller)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemAstroloyIngot":{"prefab":{"prefabName":"ItemAstroloyIngot","prefabHash":412924554,"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.","name":"Ingot (Astroloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Astroloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemAstroloySheets":{"prefab":{"prefabName":"ItemAstroloySheets","prefabHash":-1662476145,"desc":"","name":"Astroloy Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemAuthoringTool":{"prefab":{"prefabName":"ItemAuthoringTool","prefabHash":789015045,"desc":"","name":"Authoring Tool"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemAuthoringToolRocketNetwork":{"prefab":{"prefabName":"ItemAuthoringToolRocketNetwork","prefabHash":-1731627004,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemBasketBall":{"prefab":{"prefabName":"ItemBasketBall","prefabHash":-1262580790,"desc":"","name":"Basket Ball"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemBatteryCell":{"prefab":{"prefabName":"ItemBatteryCell","prefabHash":700133157,"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.","name":"Battery Cell (Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCellLarge":{"prefab":{"prefabName":"ItemBatteryCellLarge","prefabHash":-459827268,"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","name":"Battery Cell (Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCellNuclear":{"prefab":{"prefabName":"ItemBatteryCellNuclear","prefabHash":544617306,"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.","name":"Battery Cell (Nuclear)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemBatteryCharger":{"prefab":{"prefabName":"ItemBatteryCharger","prefabHash":-1866880307,"desc":"This kit produces a 5-slot Kit (Battery Charger).","name":"Kit (Battery Charger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemBatteryChargerSmall":{"prefab":{"prefabName":"ItemBatteryChargerSmall","prefabHash":1008295833,"desc":"","name":"Battery Charger Small"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemBeacon":{"prefab":{"prefabName":"ItemBeacon","prefabHash":-869869491,"desc":"","name":"Tracking Beacon"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemBiomass":{"prefab":{"prefabName":"ItemBiomass","prefabHash":-831480639,"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).","name":"Biomass"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Biomass":1.0},"slotClass":"Ore","sortingClass":"Resources"}},"ItemBreadLoaf":{"prefab":{"prefabName":"ItemBreadLoaf","prefabHash":893514943,"desc":"","name":"Bread Loaf"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCableAnalyser":{"prefab":{"prefabName":"ItemCableAnalyser","prefabHash":-1792787349,"desc":"","name":"Kit (Cable Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemCableCoil":{"prefab":{"prefabName":"ItemCableCoil","prefabHash":-466050668,"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).","name":"Cable Coil"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Tool","sortingClass":"Resources"}},"ItemCableCoilHeavy":{"prefab":{"prefabName":"ItemCableCoilHeavy","prefabHash":2060134443,"desc":"Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW.","name":"Cable Coil (Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Tool","sortingClass":"Resources"}},"ItemCableFuse":{"prefab":{"prefabName":"ItemCableFuse","prefabHash":195442047,"desc":"","name":"Kit (Cable Fuses)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Resources"}},"ItemCannedCondensedMilk":{"prefab":{"prefabName":"ItemCannedCondensedMilk","prefabHash":-2104175091,"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.","name":"Canned Condensed Milk"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCannedEdamame":{"prefab":{"prefabName":"ItemCannedEdamame","prefabHash":-999714082,"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.","name":"Canned Edamame"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCannedMushroom":{"prefab":{"prefabName":"ItemCannedMushroom","prefabHash":-1344601965,"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.","name":"Canned Mushroom"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCannedPowderedEggs":{"prefab":{"prefabName":"ItemCannedPowderedEggs","prefabHash":1161510063,"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.","name":"Canned Powdered Eggs"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCannedRicePudding":{"prefab":{"prefabName":"ItemCannedRicePudding","prefabHash":-1185552595,"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.","name":"Canned Rice Pudding"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCerealBar":{"prefab":{"prefabName":"ItemCerealBar","prefabHash":791746840,"desc":"Sustains, without decay. If only all our relationships were so well balanced.","name":"Cereal Bar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCharcoal":{"prefab":{"prefabName":"ItemCharcoal","prefabHash":252561409,"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.","name":"Charcoal"},"item":{"consumable":false,"ingredient":true,"maxQuantity":200,"reagents":{"Carbon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemChemLightBlue":{"prefab":{"prefabName":"ItemChemLightBlue","prefabHash":-772542081,"desc":"A safe and slightly rave-some source of blue light. Snap to activate.","name":"Chem Light (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightGreen":{"prefab":{"prefabName":"ItemChemLightGreen","prefabHash":-597479390,"desc":"Enliven the dreariest, airless rock with this glowy green light. Snap to activate.","name":"Chem Light (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightRed":{"prefab":{"prefabName":"ItemChemLightRed","prefabHash":-525810132,"desc":"A red glowstick. Snap to activate. Then reach for the lasers.","name":"Chem Light (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightWhite":{"prefab":{"prefabName":"ItemChemLightWhite","prefabHash":1312166823,"desc":"Snap the glowstick to activate a pale radiance that keeps the darkness at bay.","name":"Chem Light (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChemLightYellow":{"prefab":{"prefabName":"ItemChemLightYellow","prefabHash":1224819963,"desc":"Dispel the darkness with this yellow glowstick.","name":"Chem Light (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemChocolateBar":{"prefab":{"prefabName":"ItemChocolateBar","prefabHash":234601764,"desc":"","name":"Chocolate Bar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemChocolateCake":{"prefab":{"prefabName":"ItemChocolateCake","prefabHash":-261575861,"desc":"","name":"Chocolate Cake"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemChocolateCerealBar":{"prefab":{"prefabName":"ItemChocolateCerealBar","prefabHash":860793245,"desc":"","name":"Chocolate Cereal Bar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCoalOre":{"prefab":{"prefabName":"ItemCoalOre","prefabHash":1724793494,"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).","name":"Ore (Coal)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Hydrocarbon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCobaltOre":{"prefab":{"prefabName":"ItemCobaltOre","prefabHash":-983091249,"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.","name":"Ore (Cobalt)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Cobalt":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCocoaPowder":{"prefab":{"prefabName":"ItemCocoaPowder","prefabHash":457286516,"desc":"","name":"Cocoa Powder"},"item":{"consumable":true,"ingredient":true,"maxQuantity":20,"reagents":{"Cocoa":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemCocoaTree":{"prefab":{"prefabName":"ItemCocoaTree","prefabHash":680051921,"desc":"","name":"Cocoa"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Cocoa":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemCoffeeMug":{"prefab":{"prefabName":"ItemCoffeeMug","prefabHash":1800622698,"desc":"","name":"Coffee Mug"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemConstantanIngot":{"prefab":{"prefabName":"ItemConstantanIngot","prefabHash":1058547521,"desc":"","name":"Ingot (Constantan)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Constantan":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemCookedCondensedMilk":{"prefab":{"prefabName":"ItemCookedCondensedMilk","prefabHash":1715917521,"desc":"A high-nutrient cooked food, which can be canned.","name":"Condensed Milk"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Milk":100.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedCorn":{"prefab":{"prefabName":"ItemCookedCorn","prefabHash":1344773148,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Corn"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Corn":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedMushroom":{"prefab":{"prefabName":"ItemCookedMushroom","prefabHash":-1076892658,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Mushroom"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Mushroom":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedPowderedEggs":{"prefab":{"prefabName":"ItemCookedPowderedEggs","prefabHash":-1712264413,"desc":"A high-nutrient cooked food, which can be canned.","name":"Powdered Eggs"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Egg":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedPumpkin":{"prefab":{"prefabName":"ItemCookedPumpkin","prefabHash":1849281546,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Pumpkin"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Pumpkin":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedRice":{"prefab":{"prefabName":"ItemCookedRice","prefabHash":2013539020,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Rice"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Rice":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedSoybean":{"prefab":{"prefabName":"ItemCookedSoybean","prefabHash":1353449022,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Soybean"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Soy":5.0},"slotClass":"None","sortingClass":"Food"}},"ItemCookedTomato":{"prefab":{"prefabName":"ItemCookedTomato","prefabHash":-709086714,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Tomato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Tomato":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemCopperIngot":{"prefab":{"prefabName":"ItemCopperIngot","prefabHash":-404336834,"desc":"Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items.","name":"Ingot (Copper)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Copper":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemCopperOre":{"prefab":{"prefabName":"ItemCopperOre","prefabHash":-707307845,"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.","name":"Ore (Copper)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Copper":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemCorn":{"prefab":{"prefabName":"ItemCorn","prefabHash":258339687,"desc":"A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light.","name":"Corn"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Corn":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemCornSoup":{"prefab":{"prefabName":"ItemCornSoup","prefabHash":545034114,"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.","name":"Corn Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemCreditCard":{"prefab":{"prefabName":"ItemCreditCard","prefabHash":-1756772618,"desc":"","name":"Credit Card"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100000,"slotClass":"CreditCard","sortingClass":"Tools"}},"ItemCropHay":{"prefab":{"prefabName":"ItemCropHay","prefabHash":215486157,"desc":"","name":"Hay"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"None","sortingClass":"Default"}},"ItemCrowbar":{"prefab":{"prefabName":"ItemCrowbar","prefabHash":856108234,"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.","name":"Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemDataDisk":{"prefab":{"prefabName":"ItemDataDisk","prefabHash":1005843700,"desc":"","name":"Data Disk"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"DataDisk","sortingClass":"Default"}},"ItemDirtCanister":{"prefab":{"prefabName":"ItemDirtCanister","prefabHash":902565329,"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.","name":"Dirt Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Ore","sortingClass":"Default"}},"ItemDirtyOre":{"prefab":{"prefabName":"ItemDirtyOre","prefabHash":-1234745580,"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. ","name":"Dirty Ore"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Ores"}},"ItemDisposableBatteryCharger":{"prefab":{"prefabName":"ItemDisposableBatteryCharger","prefabHash":-2124435700,"desc":"Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery.","name":"Disposable Battery Charger"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemDrill":{"prefab":{"prefabName":"ItemDrill","prefabHash":2009673399,"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.","name":"Hand Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemDuctTape":{"prefab":{"prefabName":"ItemDuctTape","prefabHash":-1943134693,"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.","name":"Duct Tape"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemDynamicAirCon":{"prefab":{"prefabName":"ItemDynamicAirCon","prefabHash":1072914031,"desc":"","name":"Kit (Portable Air Conditioner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemDynamicScrubber":{"prefab":{"prefabName":"ItemDynamicScrubber","prefabHash":-971920158,"desc":"","name":"Kit (Portable Scrubber)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemEggCarton":{"prefab":{"prefabName":"ItemEggCarton","prefabHash":-524289310,"desc":"Within, eggs reside in mysterious, marmoreal silence.","name":"Egg Carton"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Storage"},"slots":[{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"}]},"ItemElectronicParts":{"prefab":{"prefabName":"ItemElectronicParts","prefabHash":731250882,"desc":"","name":"Electronic Parts"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Resources"}},"ItemElectrumIngot":{"prefab":{"prefabName":"ItemElectrumIngot","prefabHash":502280180,"desc":"","name":"Ingot (Electrum)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Electrum":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemEmergencyAngleGrinder":{"prefab":{"prefabName":"ItemEmergencyAngleGrinder","prefabHash":-351438780,"desc":"","name":"Emergency Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyArcWelder":{"prefab":{"prefabName":"ItemEmergencyArcWelder","prefabHash":-1056029600,"desc":"","name":"Emergency Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyCrowbar":{"prefab":{"prefabName":"ItemEmergencyCrowbar","prefabHash":976699731,"desc":"","name":"Emergency Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyDrill":{"prefab":{"prefabName":"ItemEmergencyDrill","prefabHash":-2052458905,"desc":"","name":"Emergency Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyEvaSuit":{"prefab":{"prefabName":"ItemEmergencyEvaSuit","prefabHash":1791306431,"desc":"","name":"Emergency Eva Suit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Suit","sortingClass":"Clothing"},"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"}]},"ItemEmergencyPickaxe":{"prefab":{"prefabName":"ItemEmergencyPickaxe","prefabHash":-1061510408,"desc":"","name":"Emergency Pickaxe"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyScrewdriver":{"prefab":{"prefabName":"ItemEmergencyScrewdriver","prefabHash":266099983,"desc":"","name":"Emergency Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencySpaceHelmet":{"prefab":{"prefabName":"ItemEmergencySpaceHelmet","prefabHash":205916793,"desc":"","name":"Emergency Space Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemEmergencyToolBelt":{"prefab":{"prefabName":"ItemEmergencyToolBelt","prefabHash":1661941301,"desc":"","name":"Emergency Tool Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemEmergencyWireCutters":{"prefab":{"prefabName":"ItemEmergencyWireCutters","prefabHash":2102803952,"desc":"","name":"Emergency Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmergencyWrench":{"prefab":{"prefabName":"ItemEmergencyWrench","prefabHash":162553030,"desc":"","name":"Emergency Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemEmptyCan":{"prefab":{"prefabName":"ItemEmptyCan","prefabHash":1013818348,"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.","name":"Empty Can"},"item":{"consumable":false,"ingredient":true,"maxQuantity":10,"reagents":{"Steel":1.0},"slotClass":"None","sortingClass":"Default"}},"ItemEvaSuit":{"prefab":{"prefabName":"ItemEvaSuit","prefabHash":1677018918,"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.","name":"Eva Suit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Suit","sortingClass":"Clothing"},"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"}]},"ItemExplosive":{"prefab":{"prefabName":"ItemExplosive","prefabHash":235361649,"desc":"","name":"Remote Explosive"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemFern":{"prefab":{"prefabName":"ItemFern","prefabHash":892110467,"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.","name":"Fern"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Fenoxitone":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemFertilizedEgg":{"prefab":{"prefabName":"ItemFertilizedEgg","prefabHash":-383972371,"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.","name":"Egg"},"item":{"consumable":false,"ingredient":true,"maxQuantity":1,"reagents":{"Egg":1.0},"slotClass":"Egg","sortingClass":"Resources"}},"ItemFilterFern":{"prefab":{"prefabName":"ItemFilterFern","prefabHash":266654416,"desc":"A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant.","name":"Darga Fern"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlagSmall":{"prefab":{"prefabName":"ItemFlagSmall","prefabHash":2011191088,"desc":"","name":"Kit (Small Flag)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemFlashingLight":{"prefab":{"prefabName":"ItemFlashingLight","prefabHash":-2107840748,"desc":"","name":"Kit (Flashing Light)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemFlashlight":{"prefab":{"prefabName":"ItemFlashlight","prefabHash":-838472102,"desc":"A flashlight with a narrow and wide beam options.","name":"Flashlight"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Low Power","1":"High Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemFlour":{"prefab":{"prefabName":"ItemFlour","prefabHash":-665995854,"desc":"Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven).","name":"Flour"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Flour":50.0},"slotClass":"None","sortingClass":"Resources"}},"ItemFlowerBlue":{"prefab":{"prefabName":"ItemFlowerBlue","prefabHash":-1573623434,"desc":"","name":"Flower (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerGreen":{"prefab":{"prefabName":"ItemFlowerGreen","prefabHash":-1513337058,"desc":"","name":"Flower (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerOrange":{"prefab":{"prefabName":"ItemFlowerOrange","prefabHash":-1411986716,"desc":"","name":"Flower (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerRed":{"prefab":{"prefabName":"ItemFlowerRed","prefabHash":-81376085,"desc":"","name":"Flower (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFlowerYellow":{"prefab":{"prefabName":"ItemFlowerYellow","prefabHash":1712822019,"desc":"","name":"Flower (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Plant","sortingClass":"Resources"}},"ItemFrenchFries":{"prefab":{"prefabName":"ItemFrenchFries","prefabHash":-57608687,"desc":"Because space would suck without 'em.","name":"Canned French Fries"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemFries":{"prefab":{"prefabName":"ItemFries","prefabHash":1371786091,"desc":"","name":"French Fries"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemGasCanisterCarbonDioxide":{"prefab":{"prefabName":"ItemGasCanisterCarbonDioxide","prefabHash":-767685874,"desc":"","name":"Canister (CO2)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterEmpty":{"prefab":{"prefabName":"ItemGasCanisterEmpty","prefabHash":42280099,"desc":"","name":"Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterFuel":{"prefab":{"prefabName":"ItemGasCanisterFuel","prefabHash":-1014695176,"desc":"","name":"Canister (Fuel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterNitrogen":{"prefab":{"prefabName":"ItemGasCanisterNitrogen","prefabHash":2145068424,"desc":"","name":"Canister (Nitrogen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterNitrousOxide":{"prefab":{"prefabName":"ItemGasCanisterNitrousOxide","prefabHash":-1712153401,"desc":"","name":"Gas Canister (Sleeping)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterOxygen":{"prefab":{"prefabName":"ItemGasCanisterOxygen","prefabHash":-1152261938,"desc":"","name":"Canister (Oxygen)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterPollutants":{"prefab":{"prefabName":"ItemGasCanisterPollutants","prefabHash":-1552586384,"desc":"","name":"Canister (Pollutants)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterSmart":{"prefab":{"prefabName":"ItemGasCanisterSmart","prefabHash":-668314371,"desc":"0.Mode0\n1.Mode1","name":"Gas Canister (Smart)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterVolatiles":{"prefab":{"prefabName":"ItemGasCanisterVolatiles","prefabHash":-472094806,"desc":"","name":"Canister (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemGasCanisterWater":{"prefab":{"prefabName":"ItemGasCanisterWater","prefabHash":-1854861891,"desc":"","name":"Liquid Canister (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemGasFilterCarbonDioxide":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxide","prefabHash":1635000764,"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.","name":"Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideInfinite":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideInfinite","prefabHash":-185568964,"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.","name":"Catalytic Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideL":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideL","prefabHash":1876847024,"desc":"","name":"Heavy Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterCarbonDioxideM":{"prefab":{"prefabName":"ItemGasFilterCarbonDioxideM","prefabHash":416897318,"desc":"","name":"Medium Filter (Carbon Dioxide)"},"item":{"consumable":false,"filterType":"CarbonDioxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogen":{"prefab":{"prefabName":"ItemGasFilterNitrogen","prefabHash":632853248,"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.","name":"Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenInfinite":{"prefab":{"prefabName":"ItemGasFilterNitrogenInfinite","prefabHash":152751131,"desc":"A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenL":{"prefab":{"prefabName":"ItemGasFilterNitrogenL","prefabHash":-1387439451,"desc":"","name":"Heavy Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrogenM":{"prefab":{"prefabName":"ItemGasFilterNitrogenM","prefabHash":-632657357,"desc":"","name":"Medium Filter (Nitrogen)"},"item":{"consumable":false,"filterType":"Nitrogen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxide":{"prefab":{"prefabName":"ItemGasFilterNitrousOxide","prefabHash":-1247674305,"desc":"","name":"Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideInfinite":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideInfinite","prefabHash":-123934842,"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.","name":"Catalytic Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideL":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideL","prefabHash":465267979,"desc":"","name":"Heavy Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterNitrousOxideM":{"prefab":{"prefabName":"ItemGasFilterNitrousOxideM","prefabHash":1824284061,"desc":"","name":"Medium Filter (Nitrous Oxide)"},"item":{"consumable":false,"filterType":"NitrousOxide","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygen":{"prefab":{"prefabName":"ItemGasFilterOxygen","prefabHash":-721824748,"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).","name":"Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenInfinite":{"prefab":{"prefabName":"ItemGasFilterOxygenInfinite","prefabHash":-1055451111,"desc":"A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenL":{"prefab":{"prefabName":"ItemGasFilterOxygenL","prefabHash":-1217998945,"desc":"","name":"Heavy Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterOxygenM":{"prefab":{"prefabName":"ItemGasFilterOxygenM","prefabHash":-1067319543,"desc":"","name":"Medium Filter (Oxygen)"},"item":{"consumable":false,"filterType":"Oxygen","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutants":{"prefab":{"prefabName":"ItemGasFilterPollutants","prefabHash":1915566057,"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.","name":"Filter (Pollutant)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsInfinite":{"prefab":{"prefabName":"ItemGasFilterPollutantsInfinite","prefabHash":-503738105,"desc":"A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsL":{"prefab":{"prefabName":"ItemGasFilterPollutantsL","prefabHash":1959564765,"desc":"","name":"Heavy Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterPollutantsM":{"prefab":{"prefabName":"ItemGasFilterPollutantsM","prefabHash":63677771,"desc":"","name":"Medium Filter (Pollutants)"},"item":{"consumable":false,"filterType":"Pollutant","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatiles":{"prefab":{"prefabName":"ItemGasFilterVolatiles","prefabHash":15011598,"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.","name":"Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesInfinite":{"prefab":{"prefabName":"ItemGasFilterVolatilesInfinite","prefabHash":-1916176068,"desc":"A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesL":{"prefab":{"prefabName":"ItemGasFilterVolatilesL","prefabHash":1255156286,"desc":"","name":"Heavy Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterVolatilesM":{"prefab":{"prefabName":"ItemGasFilterVolatilesM","prefabHash":1037507240,"desc":"","name":"Medium Filter (Volatiles)"},"item":{"consumable":false,"filterType":"Volatiles","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWater":{"prefab":{"prefabName":"ItemGasFilterWater","prefabHash":-1993197973,"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)","name":"Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterInfinite":{"prefab":{"prefabName":"ItemGasFilterWaterInfinite","prefabHash":-1678456554,"desc":"A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterL":{"prefab":{"prefabName":"ItemGasFilterWaterL","prefabHash":2004969680,"desc":"","name":"Heavy Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasFilterWaterM":{"prefab":{"prefabName":"ItemGasFilterWaterM","prefabHash":8804422,"desc":"","name":"Medium Filter (Water)"},"item":{"consumable":false,"filterType":"Steam","ingredient":false,"maxQuantity":100,"slotClass":"GasFilter","sortingClass":"Resources"}},"ItemGasSensor":{"prefab":{"prefabName":"ItemGasSensor","prefabHash":1717593480,"desc":"","name":"Kit (Gas Sensor)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemGasTankStorage":{"prefab":{"prefabName":"ItemGasTankStorage","prefabHash":-2113012215,"desc":"This kit produces a Kit (Canister Storage) for refilling a Canister.","name":"Kit (Canister Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemGlassSheets":{"prefab":{"prefabName":"ItemGlassSheets","prefabHash":1588896491,"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.","name":"Glass Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemGlasses":{"prefab":{"prefabName":"ItemGlasses","prefabHash":-1068925231,"desc":"","name":"Glasses"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Glasses","sortingClass":"Clothing"}},"ItemGoldIngot":{"prefab":{"prefabName":"ItemGoldIngot","prefabHash":226410516,"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. ","name":"Ingot (Gold)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Gold":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemGoldOre":{"prefab":{"prefabName":"ItemGoldOre","prefabHash":-1348105509,"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.","name":"Ore (Gold)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Gold":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemGrenade":{"prefab":{"prefabName":"ItemGrenade","prefabHash":1544275894,"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.","name":"Hand Grenade"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemHEMDroidRepairKit":{"prefab":{"prefabName":"ItemHEMDroidRepairKit","prefabHash":470636008,"desc":"Repairs damaged HEM-Droids to full health.","name":"HEMDroid Repair Kit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Food"}},"ItemHardBackpack":{"prefab":{"prefabName":"ItemHardBackpack","prefabHash":374891127,"desc":"This backpack can be useful when you are working inside and don't need to fly around.","name":"Hardsuit Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemHardJetpack":{"prefab":{"prefabName":"ItemHardJetpack","prefabHash":-412551656,"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.","name":"Hardsuit Jetpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemHardMiningBackPack":{"prefab":{"prefabName":"ItemHardMiningBackPack","prefabHash":900366130,"desc":"","name":"Hard Mining Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"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"}]},"ItemHardSuit":{"prefab":{"prefabName":"ItemHardSuit","prefabHash":-1758310454,"desc":"Connects to Logic Transmitter","name":"Hardsuit"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Suit","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"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"}],"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"ItemHardsuitHelmet":{"prefab":{"prefabName":"ItemHardsuitHelmet","prefabHash":-84573099,"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.","name":"Hardsuit Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemHastelloyIngot":{"prefab":{"prefabName":"ItemHastelloyIngot","prefabHash":1579842814,"desc":"","name":"Ingot (Hastelloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Hastelloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemHat":{"prefab":{"prefabName":"ItemHat","prefabHash":299189339,"desc":"As the name suggests, this is a hat.","name":"Hat"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"}},"ItemHighVolumeGasCanisterEmpty":{"prefab":{"prefabName":"ItemHighVolumeGasCanisterEmpty","prefabHash":998653377,"desc":"","name":"High Volume Gas Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"GasCanister","sortingClass":"Atmospherics"}},"ItemHorticultureBelt":{"prefab":{"prefabName":"ItemHorticultureBelt","prefabHash":-1117581553,"desc":"","name":"Horticulture Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemHydroponicTray":{"prefab":{"prefabName":"ItemHydroponicTray","prefabHash":-1193543727,"desc":"This kits creates a Hydroponics Tray for growing various plants.","name":"Kit (Hydroponic Tray)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemIce":{"prefab":{"prefabName":"ItemIce","prefabHash":1217489948,"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.","name":"Ice (Water)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemIgniter":{"prefab":{"prefabName":"ItemIgniter","prefabHash":890106742,"desc":"This kit creates an Kit (Igniter) unit.","name":"Kit (Igniter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemInconelIngot":{"prefab":{"prefabName":"ItemInconelIngot","prefabHash":-787796599,"desc":"","name":"Ingot (Inconel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Inconel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemInsulation":{"prefab":{"prefabName":"ItemInsulation","prefabHash":897176943,"desc":"Mysterious in the extreme, the function of this item is lost to the ages.","name":"Insulation"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Resources"}},"ItemIntegratedCircuit10":{"prefab":{"prefabName":"ItemIntegratedCircuit10","prefabHash":-744098481,"desc":"","name":"Integrated Circuit (IC10)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"ProgrammableChip","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"LineNumber":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"memory":{"memoryAccess":"ReadWrite","memorySize":512}},"ItemInvarIngot":{"prefab":{"prefabName":"ItemInvarIngot","prefabHash":-297990285,"desc":"","name":"Ingot (Invar)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Invar":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemIronFrames":{"prefab":{"prefabName":"ItemIronFrames","prefabHash":1225836666,"desc":"","name":"Iron Frames"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemIronIngot":{"prefab":{"prefabName":"ItemIronIngot","prefabHash":-1301215609,"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.","name":"Ingot (Iron)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Iron":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemIronOre":{"prefab":{"prefabName":"ItemIronOre","prefabHash":1758427767,"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.","name":"Ore (Iron)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Iron":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemIronSheets":{"prefab":{"prefabName":"ItemIronSheets","prefabHash":-487378546,"desc":"","name":"Iron Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemJetpackBasic":{"prefab":{"prefabName":"ItemJetpackBasic","prefabHash":1969189000,"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.","name":"Jetpack Basic"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemKitAIMeE":{"prefab":{"prefabName":"ItemKitAIMeE","prefabHash":496830914,"desc":"","name":"Kit (AIMeE)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAccessBridge":{"prefab":{"prefabName":"ItemKitAccessBridge","prefabHash":513258369,"desc":"","name":"Kit (Access Bridge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedComposter":{"prefab":{"prefabName":"ItemKitAdvancedComposter","prefabHash":-1431998347,"desc":"","name":"Kit (Advanced Composter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedFurnace":{"prefab":{"prefabName":"ItemKitAdvancedFurnace","prefabHash":-616758353,"desc":"","name":"Kit (Advanced Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAdvancedPackagingMachine":{"prefab":{"prefabName":"ItemKitAdvancedPackagingMachine","prefabHash":-598545233,"desc":"","name":"Kit (Advanced Packaging Machine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAirlock":{"prefab":{"prefabName":"ItemKitAirlock","prefabHash":964043875,"desc":"","name":"Kit (Airlock)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAirlockGate":{"prefab":{"prefabName":"ItemKitAirlockGate","prefabHash":682546947,"desc":"","name":"Kit (Hangar Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitArcFurnace":{"prefab":{"prefabName":"ItemKitArcFurnace","prefabHash":-98995857,"desc":"","name":"Kit (Arc Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAtmospherics":{"prefab":{"prefabName":"ItemKitAtmospherics","prefabHash":1222286371,"desc":"","name":"Kit (Atmospherics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutoMinerSmall":{"prefab":{"prefabName":"ItemKitAutoMinerSmall","prefabHash":1668815415,"desc":"","name":"Kit (Autominer Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutolathe":{"prefab":{"prefabName":"ItemKitAutolathe","prefabHash":-1753893214,"desc":"","name":"Kit (Autolathe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitAutomatedOven":{"prefab":{"prefabName":"ItemKitAutomatedOven","prefabHash":-1931958659,"desc":"","name":"Kit (Automated Oven)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBasket":{"prefab":{"prefabName":"ItemKitBasket","prefabHash":148305004,"desc":"","name":"Kit (Basket)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBattery":{"prefab":{"prefabName":"ItemKitBattery","prefabHash":1406656973,"desc":"","name":"Kit (Battery)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBatteryLarge":{"prefab":{"prefabName":"ItemKitBatteryLarge","prefabHash":-21225041,"desc":"","name":"Kit (Battery Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBeacon":{"prefab":{"prefabName":"ItemKitBeacon","prefabHash":249073136,"desc":"","name":"Kit (Beacon)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBeds":{"prefab":{"prefabName":"ItemKitBeds","prefabHash":-1241256797,"desc":"","name":"Kit (Beds)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitBlastDoor":{"prefab":{"prefabName":"ItemKitBlastDoor","prefabHash":-1755116240,"desc":"","name":"Kit (Blast Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCentrifuge":{"prefab":{"prefabName":"ItemKitCentrifuge","prefabHash":578182956,"desc":"","name":"Kit (Centrifuge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChairs":{"prefab":{"prefabName":"ItemKitChairs","prefabHash":-1394008073,"desc":"","name":"Kit (Chairs)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChute":{"prefab":{"prefabName":"ItemKitChute","prefabHash":1025254665,"desc":"","name":"Kit (Basic Chutes)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitChuteUmbilical":{"prefab":{"prefabName":"ItemKitChuteUmbilical","prefabHash":-876560854,"desc":"","name":"Kit (Chute Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCompositeCladding":{"prefab":{"prefabName":"ItemKitCompositeCladding","prefabHash":-1470820996,"desc":"","name":"Kit (Cladding)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCompositeFloorGrating":{"prefab":{"prefabName":"ItemKitCompositeFloorGrating","prefabHash":1182412869,"desc":"","name":"Kit (Floor Grating)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitComputer":{"prefab":{"prefabName":"ItemKitComputer","prefabHash":1990225489,"desc":"","name":"Kit (Computer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitConsole":{"prefab":{"prefabName":"ItemKitConsole","prefabHash":-1241851179,"desc":"","name":"Kit (Consoles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrate":{"prefab":{"prefabName":"ItemKitCrate","prefabHash":429365598,"desc":"","name":"Kit (Crate)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrateMkII":{"prefab":{"prefabName":"ItemKitCrateMkII","prefabHash":-1585956426,"desc":"","name":"Kit (Crate Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCrateMount":{"prefab":{"prefabName":"ItemKitCrateMount","prefabHash":-551612946,"desc":"","name":"Kit (Container Mount)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitCryoTube":{"prefab":{"prefabName":"ItemKitCryoTube","prefabHash":-545234195,"desc":"","name":"Kit (Cryo Tube)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDeepMiner":{"prefab":{"prefabName":"ItemKitDeepMiner","prefabHash":-1935075707,"desc":"","name":"Kit (Deep Miner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDockingPort":{"prefab":{"prefabName":"ItemKitDockingPort","prefabHash":77421200,"desc":"","name":"Kit (Docking Port)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDoor":{"prefab":{"prefabName":"ItemKitDoor","prefabHash":168615924,"desc":"","name":"Kit (Door)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDrinkingFountain":{"prefab":{"prefabName":"ItemKitDrinkingFountain","prefabHash":-1743663875,"desc":"","name":"Kit (Drinking Fountain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicCanister":{"prefab":{"prefabName":"ItemKitDynamicCanister","prefabHash":-1061945368,"desc":"","name":"Kit (Portable Gas Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicGasTankAdvanced":{"prefab":{"prefabName":"ItemKitDynamicGasTankAdvanced","prefabHash":1533501495,"desc":"","name":"Kit (Portable Gas Tank Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitDynamicGenerator":{"prefab":{"prefabName":"ItemKitDynamicGenerator","prefabHash":-732720413,"desc":"","name":"Kit (Portable Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicHydroponics":{"prefab":{"prefabName":"ItemKitDynamicHydroponics","prefabHash":-1861154222,"desc":"","name":"Kit (Portable Hydroponics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicLiquidCanister":{"prefab":{"prefabName":"ItemKitDynamicLiquidCanister","prefabHash":375541286,"desc":"","name":"Kit (Portable Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitDynamicMKIILiquidCanister":{"prefab":{"prefabName":"ItemKitDynamicMKIILiquidCanister","prefabHash":-638019974,"desc":"","name":"Kit (Portable Liquid Tank Mk II)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElectricUmbilical":{"prefab":{"prefabName":"ItemKitElectricUmbilical","prefabHash":1603046970,"desc":"","name":"Kit (Power Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElectronicsPrinter":{"prefab":{"prefabName":"ItemKitElectronicsPrinter","prefabHash":-1181922382,"desc":"","name":"Kit (Electronics Printer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitElevator":{"prefab":{"prefabName":"ItemKitElevator","prefabHash":-945806652,"desc":"","name":"Kit (Elevator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineLarge":{"prefab":{"prefabName":"ItemKitEngineLarge","prefabHash":755302726,"desc":"","name":"Kit (Engine Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineMedium":{"prefab":{"prefabName":"ItemKitEngineMedium","prefabHash":1969312177,"desc":"","name":"Kit (Engine Medium)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEngineSmall":{"prefab":{"prefabName":"ItemKitEngineSmall","prefabHash":19645163,"desc":"","name":"Kit (Engine Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitEvaporationChamber":{"prefab":{"prefabName":"ItemKitEvaporationChamber","prefabHash":1587787610,"desc":"","name":"Kit (Phase Change Device)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFlagODA":{"prefab":{"prefabName":"ItemKitFlagODA","prefabHash":1701764190,"desc":"","name":"Kit (ODA Flag)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitFridgeBig":{"prefab":{"prefabName":"ItemKitFridgeBig","prefabHash":-1168199498,"desc":"","name":"Kit (Fridge Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFridgeSmall":{"prefab":{"prefabName":"ItemKitFridgeSmall","prefabHash":1661226524,"desc":"","name":"Kit (Fridge Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFurnace":{"prefab":{"prefabName":"ItemKitFurnace","prefabHash":-806743925,"desc":"","name":"Kit (Furnace)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFurniture":{"prefab":{"prefabName":"ItemKitFurniture","prefabHash":1162905029,"desc":"","name":"Kit (Furniture)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitFuselage":{"prefab":{"prefabName":"ItemKitFuselage","prefabHash":-366262681,"desc":"","name":"Kit (Fuselage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGasGenerator":{"prefab":{"prefabName":"ItemKitGasGenerator","prefabHash":377745425,"desc":"","name":"Kit (Gas Fuel Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGasUmbilical":{"prefab":{"prefabName":"ItemKitGasUmbilical","prefabHash":-1867280568,"desc":"","name":"Kit (Gas Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGovernedGasRocketEngine":{"prefab":{"prefabName":"ItemKitGovernedGasRocketEngine","prefabHash":206848766,"desc":"","name":"Kit (Pumped Gas Rocket Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGroundTelescope":{"prefab":{"prefabName":"ItemKitGroundTelescope","prefabHash":-2140672772,"desc":"","name":"Kit (Telescope)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitGrowLight":{"prefab":{"prefabName":"ItemKitGrowLight","prefabHash":341030083,"desc":"","name":"Kit (Grow Light)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHarvie":{"prefab":{"prefabName":"ItemKitHarvie","prefabHash":-1022693454,"desc":"","name":"Kit (Harvie)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHeatExchanger":{"prefab":{"prefabName":"ItemKitHeatExchanger","prefabHash":-1710540039,"desc":"","name":"Kit Heat Exchanger"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHorizontalAutoMiner":{"prefab":{"prefabName":"ItemKitHorizontalAutoMiner","prefabHash":844391171,"desc":"","name":"Kit (OGRE)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydraulicPipeBender":{"prefab":{"prefabName":"ItemKitHydraulicPipeBender","prefabHash":-2098556089,"desc":"","name":"Kit (Hydraulic Pipe Bender)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydroponicAutomated":{"prefab":{"prefabName":"ItemKitHydroponicAutomated","prefabHash":-927931558,"desc":"","name":"Kit (Automated Hydroponics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitHydroponicStation":{"prefab":{"prefabName":"ItemKitHydroponicStation","prefabHash":2057179799,"desc":"","name":"Kit (Hydroponic Station)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitIceCrusher":{"prefab":{"prefabName":"ItemKitIceCrusher","prefabHash":288111533,"desc":"","name":"Kit (Ice Crusher)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedLiquidPipe":{"prefab":{"prefabName":"ItemKitInsulatedLiquidPipe","prefabHash":2067655311,"desc":"","name":"Kit (Insulated Liquid Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipe":{"prefab":{"prefabName":"ItemKitInsulatedPipe","prefabHash":452636699,"desc":"","name":"Kit (Insulated Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipeUtility":{"prefab":{"prefabName":"ItemKitInsulatedPipeUtility","prefabHash":-27284803,"desc":"","name":"Kit (Insulated Pipe Utility Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInsulatedPipeUtilityLiquid":{"prefab":{"prefabName":"ItemKitInsulatedPipeUtilityLiquid","prefabHash":-1831558953,"desc":"","name":"Kit (Insulated Pipe Utility Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitInteriorDoors":{"prefab":{"prefabName":"ItemKitInteriorDoors","prefabHash":1935945891,"desc":"","name":"Kit (Interior Doors)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLadder":{"prefab":{"prefabName":"ItemKitLadder","prefabHash":489494578,"desc":"","name":"Kit (Ladder)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadAtmos":{"prefab":{"prefabName":"ItemKitLandingPadAtmos","prefabHash":1817007843,"desc":"","name":"Kit (Landing Pad Atmospherics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadBasic":{"prefab":{"prefabName":"ItemKitLandingPadBasic","prefabHash":293581318,"desc":"","name":"Kit (Landing Pad Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLandingPadWaypoint":{"prefab":{"prefabName":"ItemKitLandingPadWaypoint","prefabHash":-1267511065,"desc":"","name":"Kit (Landing Pad Runway)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeDirectHeatExchanger":{"prefab":{"prefabName":"ItemKitLargeDirectHeatExchanger","prefabHash":450164077,"desc":"","name":"Kit (Large Direct Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeExtendableRadiator":{"prefab":{"prefabName":"ItemKitLargeExtendableRadiator","prefabHash":847430620,"desc":"","name":"Kit (Large Extendable Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLargeSatelliteDish":{"prefab":{"prefabName":"ItemKitLargeSatelliteDish","prefabHash":-2039971217,"desc":"","name":"Kit (Large Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLaunchMount":{"prefab":{"prefabName":"ItemKitLaunchMount","prefabHash":-1854167549,"desc":"","name":"Kit (Launch Mount)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLaunchTower":{"prefab":{"prefabName":"ItemKitLaunchTower","prefabHash":-174523552,"desc":"","name":"Kit (Rocket Launch Tower)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidRegulator":{"prefab":{"prefabName":"ItemKitLiquidRegulator","prefabHash":1951126161,"desc":"","name":"Kit (Liquid Regulator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTank":{"prefab":{"prefabName":"ItemKitLiquidTank","prefabHash":-799849305,"desc":"","name":"Kit (Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTankInsulated":{"prefab":{"prefabName":"ItemKitLiquidTankInsulated","prefabHash":617773453,"desc":"","name":"Kit (Insulated Liquid Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidTurboVolumePump":{"prefab":{"prefabName":"ItemKitLiquidTurboVolumePump","prefabHash":-1805020897,"desc":"","name":"Kit (Turbo Volume Pump - Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLiquidUmbilical":{"prefab":{"prefabName":"ItemKitLiquidUmbilical","prefabHash":1571996765,"desc":"","name":"Kit (Liquid Umbilical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLocker":{"prefab":{"prefabName":"ItemKitLocker","prefabHash":882301399,"desc":"","name":"Kit (Locker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicCircuit":{"prefab":{"prefabName":"ItemKitLogicCircuit","prefabHash":1512322581,"desc":"","name":"Kit (IC Housing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicInputOutput":{"prefab":{"prefabName":"ItemKitLogicInputOutput","prefabHash":1997293610,"desc":"","name":"Kit (Logic I/O)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicMemory":{"prefab":{"prefabName":"ItemKitLogicMemory","prefabHash":-2098214189,"desc":"","name":"Kit (Logic Memory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicProcessor":{"prefab":{"prefabName":"ItemKitLogicProcessor","prefabHash":220644373,"desc":"","name":"Kit (Logic Processor)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicSwitch":{"prefab":{"prefabName":"ItemKitLogicSwitch","prefabHash":124499454,"desc":"","name":"Kit (Logic Switch)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitLogicTransmitter":{"prefab":{"prefabName":"ItemKitLogicTransmitter","prefabHash":1005397063,"desc":"","name":"Kit (Logic Transmitter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitMotherShipCore":{"prefab":{"prefabName":"ItemKitMotherShipCore","prefabHash":-344968335,"desc":"","name":"Kit (Mothership)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitMusicMachines":{"prefab":{"prefabName":"ItemKitMusicMachines","prefabHash":-2038889137,"desc":"","name":"Kit (Music Machines)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPassiveLargeRadiatorGas":{"prefab":{"prefabName":"ItemKitPassiveLargeRadiatorGas","prefabHash":-1752768283,"desc":"","name":"Kit (Medium Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemKitPassiveLargeRadiatorLiquid":{"prefab":{"prefabName":"ItemKitPassiveLargeRadiatorLiquid","prefabHash":1453961898,"desc":"","name":"Kit (Medium Radiator Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPassthroughHeatExchanger":{"prefab":{"prefabName":"ItemKitPassthroughHeatExchanger","prefabHash":636112787,"desc":"","name":"Kit (CounterFlow Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPictureFrame":{"prefab":{"prefabName":"ItemKitPictureFrame","prefabHash":-2062364768,"desc":"","name":"Kit Picture Frame"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipe":{"prefab":{"prefabName":"ItemKitPipe","prefabHash":-1619793705,"desc":"","name":"Kit (Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeLiquid":{"prefab":{"prefabName":"ItemKitPipeLiquid","prefabHash":-1166461357,"desc":"","name":"Kit (Liquid Pipe)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeOrgan":{"prefab":{"prefabName":"ItemKitPipeOrgan","prefabHash":-827125300,"desc":"","name":"Kit (Pipe Organ)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeRadiator":{"prefab":{"prefabName":"ItemKitPipeRadiator","prefabHash":920411066,"desc":"","name":"Kit (Pipe Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitPipeRadiatorLiquid":{"prefab":{"prefabName":"ItemKitPipeRadiatorLiquid","prefabHash":-1697302609,"desc":"","name":"Kit (Pipe Radiator Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitPipeUtility":{"prefab":{"prefabName":"ItemKitPipeUtility","prefabHash":1934508338,"desc":"","name":"Kit (Pipe Utility Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPipeUtilityLiquid":{"prefab":{"prefabName":"ItemKitPipeUtilityLiquid","prefabHash":595478589,"desc":"","name":"Kit (Pipe Utility Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPlanter":{"prefab":{"prefabName":"ItemKitPlanter","prefabHash":119096484,"desc":"","name":"Kit (Planter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPortablesConnector":{"prefab":{"prefabName":"ItemKitPortablesConnector","prefabHash":1041148999,"desc":"","name":"Kit (Portables Connector)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPowerTransmitter":{"prefab":{"prefabName":"ItemKitPowerTransmitter","prefabHash":291368213,"desc":"","name":"Kit (Power Transmitter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPowerTransmitterOmni":{"prefab":{"prefabName":"ItemKitPowerTransmitterOmni","prefabHash":-831211676,"desc":"","name":"Kit (Power Transmitter Omni)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPoweredVent":{"prefab":{"prefabName":"ItemKitPoweredVent","prefabHash":2015439334,"desc":"","name":"Kit (Powered Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressureFedGasEngine":{"prefab":{"prefabName":"ItemKitPressureFedGasEngine","prefabHash":-121514007,"desc":"","name":"Kit (Pressure Fed Gas Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressureFedLiquidEngine":{"prefab":{"prefabName":"ItemKitPressureFedLiquidEngine","prefabHash":-99091572,"desc":"","name":"Kit (Pressure Fed Liquid Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPressurePlate":{"prefab":{"prefabName":"ItemKitPressurePlate","prefabHash":123504691,"desc":"","name":"Kit (Trigger Plate)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitPumpedLiquidEngine":{"prefab":{"prefabName":"ItemKitPumpedLiquidEngine","prefabHash":1921918951,"desc":"","name":"Kit (Pumped Liquid Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRailing":{"prefab":{"prefabName":"ItemKitRailing","prefabHash":750176282,"desc":"","name":"Kit (Railing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRecycler":{"prefab":{"prefabName":"ItemKitRecycler","prefabHash":849148192,"desc":"","name":"Kit (Recycler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRegulator":{"prefab":{"prefabName":"ItemKitRegulator","prefabHash":1181371795,"desc":"","name":"Kit (Pressure Regulator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitReinforcedWindows":{"prefab":{"prefabName":"ItemKitReinforcedWindows","prefabHash":1459985302,"desc":"","name":"Kit (Reinforced Windows)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitResearchMachine":{"prefab":{"prefabName":"ItemKitResearchMachine","prefabHash":724776762,"desc":"","name":"Kit Research Machine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitRespawnPointWallMounted":{"prefab":{"prefabName":"ItemKitRespawnPointWallMounted","prefabHash":1574688481,"desc":"","name":"Kit (Respawn)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketAvionics":{"prefab":{"prefabName":"ItemKitRocketAvionics","prefabHash":1396305045,"desc":"","name":"Kit (Avionics)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketBattery":{"prefab":{"prefabName":"ItemKitRocketBattery","prefabHash":-314072139,"desc":"","name":"Kit (Rocket Battery)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCargoStorage":{"prefab":{"prefabName":"ItemKitRocketCargoStorage","prefabHash":479850239,"desc":"","name":"Kit (Rocket Cargo Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCelestialTracker":{"prefab":{"prefabName":"ItemKitRocketCelestialTracker","prefabHash":-303008602,"desc":"","name":"Kit (Rocket Celestial Tracker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketCircuitHousing":{"prefab":{"prefabName":"ItemKitRocketCircuitHousing","prefabHash":721251202,"desc":"","name":"Kit (Rocket Circuit Housing)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketDatalink":{"prefab":{"prefabName":"ItemKitRocketDatalink","prefabHash":-1256996603,"desc":"","name":"Kit (Rocket Datalink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketGasFuelTank":{"prefab":{"prefabName":"ItemKitRocketGasFuelTank","prefabHash":-1629347579,"desc":"","name":"Kit (Rocket Gas Fuel Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketLiquidFuelTank":{"prefab":{"prefabName":"ItemKitRocketLiquidFuelTank","prefabHash":2032027950,"desc":"","name":"Kit (Rocket Liquid Fuel Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketManufactory":{"prefab":{"prefabName":"ItemKitRocketManufactory","prefabHash":-636127860,"desc":"","name":"Kit (Rocket Manufactory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketMiner":{"prefab":{"prefabName":"ItemKitRocketMiner","prefabHash":-867969909,"desc":"","name":"Kit (Rocket Miner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketScanner":{"prefab":{"prefabName":"ItemKitRocketScanner","prefabHash":1753647154,"desc":"","name":"Kit (Rocket Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRocketTransformerSmall":{"prefab":{"prefabName":"ItemKitRocketTransformerSmall","prefabHash":-932335800,"desc":"","name":"Kit (Transformer Small (Rocket))"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRoverFrame":{"prefab":{"prefabName":"ItemKitRoverFrame","prefabHash":1827215803,"desc":"","name":"Kit (Rover Frame)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitRoverMKI":{"prefab":{"prefabName":"ItemKitRoverMKI","prefabHash":197243872,"desc":"","name":"Kit (Rover Mk I)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSDBHopper":{"prefab":{"prefabName":"ItemKitSDBHopper","prefabHash":323957548,"desc":"","name":"Kit (SDB Hopper)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSatelliteDish":{"prefab":{"prefabName":"ItemKitSatelliteDish","prefabHash":178422810,"desc":"","name":"Kit (Medium Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSecurityPrinter":{"prefab":{"prefabName":"ItemKitSecurityPrinter","prefabHash":578078533,"desc":"","name":"Kit (Security Printer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSensor":{"prefab":{"prefabName":"ItemKitSensor","prefabHash":-1776897113,"desc":"","name":"Kit (Sensors)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitShower":{"prefab":{"prefabName":"ItemKitShower","prefabHash":735858725,"desc":"","name":"Kit (Shower)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSign":{"prefab":{"prefabName":"ItemKitSign","prefabHash":529996327,"desc":"","name":"Kit (Sign)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSleeper":{"prefab":{"prefabName":"ItemKitSleeper","prefabHash":326752036,"desc":"","name":"Kit (Sleeper)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSmallDirectHeatExchanger":{"prefab":{"prefabName":"ItemKitSmallDirectHeatExchanger","prefabHash":-1332682164,"desc":"","name":"Kit (Small Direct Heat Exchanger)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitSmallSatelliteDish":{"prefab":{"prefabName":"ItemKitSmallSatelliteDish","prefabHash":1960952220,"desc":"","name":"Kit (Small Satellite Dish)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolarPanel":{"prefab":{"prefabName":"ItemKitSolarPanel","prefabHash":-1924492105,"desc":"","name":"Kit (Solar Panel)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolarPanelBasic":{"prefab":{"prefabName":"ItemKitSolarPanelBasic","prefabHash":844961456,"desc":"","name":"Kit (Solar Panel Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemKitSolarPanelBasicReinforced":{"prefab":{"prefabName":"ItemKitSolarPanelBasicReinforced","prefabHash":-528695432,"desc":"","name":"Kit (Solar Panel Basic Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemKitSolarPanelReinforced":{"prefab":{"prefabName":"ItemKitSolarPanelReinforced","prefabHash":-364868685,"desc":"","name":"Kit (Solar Panel Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSolidGenerator":{"prefab":{"prefabName":"ItemKitSolidGenerator","prefabHash":1293995736,"desc":"","name":"Kit (Solid Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSorter":{"prefab":{"prefabName":"ItemKitSorter","prefabHash":969522478,"desc":"","name":"Kit (Sorter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSpeaker":{"prefab":{"prefabName":"ItemKitSpeaker","prefabHash":-126038526,"desc":"","name":"Kit (Speaker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStacker":{"prefab":{"prefabName":"ItemKitStacker","prefabHash":1013244511,"desc":"","name":"Kit (Stacker)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStairs":{"prefab":{"prefabName":"ItemKitStairs","prefabHash":170878959,"desc":"","name":"Kit (Stairs)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStairwell":{"prefab":{"prefabName":"ItemKitStairwell","prefabHash":-1868555784,"desc":"","name":"Kit (Stairwell)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStandardChute":{"prefab":{"prefabName":"ItemKitStandardChute","prefabHash":2133035682,"desc":"","name":"Kit (Powered Chutes)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitStirlingEngine":{"prefab":{"prefabName":"ItemKitStirlingEngine","prefabHash":-1821571150,"desc":"","name":"Kit (Stirling Engine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitSuitStorage":{"prefab":{"prefabName":"ItemKitSuitStorage","prefabHash":1088892825,"desc":"","name":"Kit (Suit Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTables":{"prefab":{"prefabName":"ItemKitTables","prefabHash":-1361598922,"desc":"","name":"Kit (Tables)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTank":{"prefab":{"prefabName":"ItemKitTank","prefabHash":771439840,"desc":"","name":"Kit (Tank)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTankInsulated":{"prefab":{"prefabName":"ItemKitTankInsulated","prefabHash":1021053608,"desc":"","name":"Kit (Tank Insulated)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemKitToolManufactory":{"prefab":{"prefabName":"ItemKitToolManufactory","prefabHash":529137748,"desc":"","name":"Kit (Tool Manufactory)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTransformer":{"prefab":{"prefabName":"ItemKitTransformer","prefabHash":-453039435,"desc":"","name":"Kit (Transformer Large)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTransformerSmall":{"prefab":{"prefabName":"ItemKitTransformerSmall","prefabHash":665194284,"desc":"","name":"Kit (Transformer Small)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTurbineGenerator":{"prefab":{"prefabName":"ItemKitTurbineGenerator","prefabHash":-1590715731,"desc":"","name":"Kit (Turbine Generator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemKitTurboVolumePump":{"prefab":{"prefabName":"ItemKitTurboVolumePump","prefabHash":-1248429712,"desc":"","name":"Kit (Turbo Volume Pump - Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitUprightWindTurbine":{"prefab":{"prefabName":"ItemKitUprightWindTurbine","prefabHash":-1798044015,"desc":"","name":"Kit (Upright Wind Turbine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemKitVendingMachine":{"prefab":{"prefabName":"ItemKitVendingMachine","prefabHash":-2038384332,"desc":"","name":"Kit (Vending Machine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitVendingMachineRefrigerated":{"prefab":{"prefabName":"ItemKitVendingMachineRefrigerated","prefabHash":-1867508561,"desc":"","name":"Kit (Vending Machine Refrigerated)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWall":{"prefab":{"prefabName":"ItemKitWall","prefabHash":-1826855889,"desc":"","name":"Kit (Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallArch":{"prefab":{"prefabName":"ItemKitWallArch","prefabHash":1625214531,"desc":"","name":"Kit (Arched Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallFlat":{"prefab":{"prefabName":"ItemKitWallFlat","prefabHash":-846838195,"desc":"","name":"Kit (Flat Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallGeometry":{"prefab":{"prefabName":"ItemKitWallGeometry","prefabHash":-784733231,"desc":"","name":"Kit (Geometric Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallIron":{"prefab":{"prefabName":"ItemKitWallIron","prefabHash":-524546923,"desc":"","name":"Kit (Iron Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWallPadded":{"prefab":{"prefabName":"ItemKitWallPadded","prefabHash":-821868990,"desc":"","name":"Kit (Padded Wall)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWaterBottleFiller":{"prefab":{"prefabName":"ItemKitWaterBottleFiller","prefabHash":159886536,"desc":"","name":"Kit (Water Bottle Filler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWaterPurifier":{"prefab":{"prefabName":"ItemKitWaterPurifier","prefabHash":611181283,"desc":"","name":"Kit (Water Purifier)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWeatherStation":{"prefab":{"prefabName":"ItemKitWeatherStation","prefabHash":337505889,"desc":"","name":"Kit (Weather Station)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemKitWindTurbine":{"prefab":{"prefabName":"ItemKitWindTurbine","prefabHash":-868916503,"desc":"","name":"Kit (Wind Turbine)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemKitWindowShutter":{"prefab":{"prefabName":"ItemKitWindowShutter","prefabHash":1779979754,"desc":"","name":"Kit (Window Shutter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemLabeller":{"prefab":{"prefabName":"ItemLabeller","prefabHash":-743968726,"desc":"A labeller lets you set names and values on a variety of devices and structures, including Console and Logic.","name":"Labeller"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemLaptop":{"prefab":{"prefabName":"ItemLaptop","prefabHash":141535121,"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","name":"Laptop"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","PositionX":"Read","PositionY":"Read","PositionZ":"Read","Power":"Read","PressureExternal":"Read","ReferenceId":"Read","TemperatureExternal":"Read"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"},{"name":"Battery","typ":"Battery"},{"name":"Motherboard","typ":"Motherboard"}]},"ItemLeadIngot":{"prefab":{"prefabName":"ItemLeadIngot","prefabHash":2134647745,"desc":"","name":"Ingot (Lead)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Lead":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemLeadOre":{"prefab":{"prefabName":"ItemLeadOre","prefabHash":-190236170,"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.","name":"Ore (Lead)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Lead":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemLightSword":{"prefab":{"prefabName":"ItemLightSword","prefabHash":1949076595,"desc":"A charming, if useless, pseudo-weapon. (Creative only.)","name":"Light Sword"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidCanisterEmpty":{"prefab":{"prefabName":"ItemLiquidCanisterEmpty","prefabHash":-185207387,"desc":"","name":"Liquid Canister"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemLiquidCanisterSmart":{"prefab":{"prefabName":"ItemLiquidCanisterSmart","prefabHash":777684475,"desc":"0.Mode0\n1.Mode1","name":"Liquid Canister (Smart)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"LiquidCanister","sortingClass":"Atmospherics"}},"ItemLiquidDrain":{"prefab":{"prefabName":"ItemLiquidDrain","prefabHash":2036225202,"desc":"","name":"Kit (Liquid Drain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidPipeAnalyzer":{"prefab":{"prefabName":"ItemLiquidPipeAnalyzer","prefabHash":226055671,"desc":"","name":"Kit (Liquid Pipe Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidPipeHeater":{"prefab":{"prefabName":"ItemLiquidPipeHeater","prefabHash":-248475032,"desc":"Creates a Pipe Heater (Liquid).","name":"Pipe Heater Kit (Liquid)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidPipeValve":{"prefab":{"prefabName":"ItemLiquidPipeValve","prefabHash":-2126113312,"desc":"This kit creates a Liquid Valve.","name":"Kit (Liquid Pipe Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemLiquidPipeVolumePump":{"prefab":{"prefabName":"ItemLiquidPipeVolumePump","prefabHash":-2106280569,"desc":"","name":"Kit (Liquid Volume Pump)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemLiquidTankStorage":{"prefab":{"prefabName":"ItemLiquidTankStorage","prefabHash":2037427578,"desc":"This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister.","name":"Kit (Liquid Canister Storage)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemMKIIAngleGrinder":{"prefab":{"prefabName":"ItemMKIIAngleGrinder","prefabHash":240174650,"desc":"Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure.","name":"Mk II Angle Grinder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIArcWelder":{"prefab":{"prefabName":"ItemMKIIArcWelder","prefabHash":-2061979347,"desc":"","name":"Mk II Arc Welder"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIICrowbar":{"prefab":{"prefabName":"ItemMKIICrowbar","prefabHash":1440775434,"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.","name":"Mk II Crowbar"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIDrill":{"prefab":{"prefabName":"ItemMKIIDrill","prefabHash":324791548,"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.","name":"Mk II Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIDuctTape":{"prefab":{"prefabName":"ItemMKIIDuctTape","prefabHash":388774906,"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.","name":"Mk II Duct Tape"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIMiningDrill":{"prefab":{"prefabName":"ItemMKIIMiningDrill","prefabHash":-1875271296,"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.","name":"Mk II Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIScrewdriver":{"prefab":{"prefabName":"ItemMKIIScrewdriver","prefabHash":-2015613246,"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.","name":"Mk II Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIWireCutters":{"prefab":{"prefabName":"ItemMKIIWireCutters","prefabHash":-178893251,"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.","name":"Mk II Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMKIIWrench":{"prefab":{"prefabName":"ItemMKIIWrench","prefabHash":1862001680,"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.","name":"Mk II Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemMarineBodyArmor":{"prefab":{"prefabName":"ItemMarineBodyArmor","prefabHash":1399098998,"desc":"","name":"Marine Armor"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Suit","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMarineHelmet":{"prefab":{"prefabName":"ItemMarineHelmet","prefabHash":1073631646,"desc":"","name":"Marine Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMilk":{"prefab":{"prefabName":"ItemMilk","prefabHash":1327248310,"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.","name":"Milk"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"Milk":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemMiningBackPack":{"prefab":{"prefabName":"ItemMiningBackPack","prefabHash":-1650383245,"desc":"","name":"Mining Backpack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"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"}]},"ItemMiningBelt":{"prefab":{"prefabName":"ItemMiningBelt","prefabHash":-676435305,"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.","name":"Mining Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemMiningBeltMKII":{"prefab":{"prefabName":"ItemMiningBeltMKII","prefabHash":1470787934,"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. ","name":"Mining Belt MK II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"}]},"ItemMiningCharge":{"prefab":{"prefabName":"ItemMiningCharge","prefabHash":15829510,"desc":"A low cost, high yield explosive with a 10 second timer.","name":"Mining Charge"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemMiningDrill":{"prefab":{"prefabName":"ItemMiningDrill","prefabHash":1055173191,"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.'","name":"Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillHeavy":{"prefab":{"prefabName":"ItemMiningDrillHeavy","prefabHash":-1663349918,"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.","name":"Mining Drill (Heavy)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillPneumatic":{"prefab":{"prefabName":"ItemMiningDrillPneumatic","prefabHash":1258187304,"desc":"0.Default\n1.Flatten","name":"Pneumatic Mining Drill"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemMkIIToolbelt":{"prefab":{"prefabName":"ItemMkIIToolbelt","prefabHash":1467558064,"desc":"A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy.","name":"Tool Belt MK II"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"Tool","typ":"Tool"},{"name":"Tool","typ":"Tool"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMuffin":{"prefab":{"prefabName":"ItemMuffin","prefabHash":-1864982322,"desc":"A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin.","name":"Muffin"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemMushroom":{"prefab":{"prefabName":"ItemMushroom","prefabHash":2044798572,"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.","name":"Mushroom"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Mushroom":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemNVG":{"prefab":{"prefabName":"ItemNVG","prefabHash":982514123,"desc":"","name":"Night Vision Goggles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Glasses","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Lock":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemNickelIngot":{"prefab":{"prefabName":"ItemNickelIngot","prefabHash":-1406385572,"desc":"","name":"Ingot (Nickel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Nickel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemNickelOre":{"prefab":{"prefabName":"ItemNickelOre","prefabHash":1830218956,"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.","name":"Ore (Nickel)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Nickel":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemNitrice":{"prefab":{"prefabName":"ItemNitrice","prefabHash":-1499471529,"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.","name":"Ice (Nitrice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemOxite":{"prefab":{"prefabName":"ItemOxite","prefabHash":-1805394113,"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.","name":"Ice (Oxite)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPassiveVent":{"prefab":{"prefabName":"ItemPassiveVent","prefabHash":238631271,"desc":"This kit creates a Passive Vent among other variants.","name":"Passive Vent"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPassiveVentInsulated":{"prefab":{"prefabName":"ItemPassiveVentInsulated","prefabHash":-1397583760,"desc":"","name":"Kit (Insulated Passive Vent)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPeaceLily":{"prefab":{"prefabName":"ItemPeaceLily","prefabHash":2042955224,"desc":"A fetching lily with greater resistance to cold temperatures.","name":"Peace Lily"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPickaxe":{"prefab":{"prefabName":"ItemPickaxe","prefabHash":-913649823,"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.","name":"Pickaxe"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemPillHeal":{"prefab":{"prefabName":"ItemPillHeal","prefabHash":1118069417,"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.","name":"Pill (Medical)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Food"}},"ItemPillStun":{"prefab":{"prefabName":"ItemPillStun","prefabHash":418958601,"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.","name":"Pill (Paralysis)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Food"}},"ItemPipeAnalyizer":{"prefab":{"prefabName":"ItemPipeAnalyizer","prefabHash":-767597887,"desc":"This kit creates a Pipe Analyzer.","name":"Kit (Pipe Analyzer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeCowl":{"prefab":{"prefabName":"ItemPipeCowl","prefabHash":-38898376,"desc":"This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres.","name":"Pipe Cowl"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeDigitalValve":{"prefab":{"prefabName":"ItemPipeDigitalValve","prefabHash":-1532448832,"desc":"This kit creates a Digital Valve.","name":"Kit (Digital Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeGasMixer":{"prefab":{"prefabName":"ItemPipeGasMixer","prefabHash":-1134459463,"desc":"This kit creates a Gas Mixer.","name":"Kit (Gas Mixer)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeHeater":{"prefab":{"prefabName":"ItemPipeHeater","prefabHash":-1751627006,"desc":"Creates a Pipe Heater (Gas).","name":"Pipe Heater Kit (Gas)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemPipeIgniter":{"prefab":{"prefabName":"ItemPipeIgniter","prefabHash":1366030599,"desc":"","name":"Kit (Pipe Igniter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeLabel":{"prefab":{"prefabName":"ItemPipeLabel","prefabHash":391769637,"desc":"This kit creates a Pipe Label.","name":"Kit (Pipe Label)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeLiquidRadiator":{"prefab":{"prefabName":"ItemPipeLiquidRadiator","prefabHash":-906521320,"desc":"This kit creates a Liquid Pipe Convection Radiator.","name":"Kit (Liquid Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeMeter":{"prefab":{"prefabName":"ItemPipeMeter","prefabHash":1207939683,"desc":"This kit creates a Pipe Meter.","name":"Kit (Pipe Meter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeRadiator":{"prefab":{"prefabName":"ItemPipeRadiator","prefabHash":-1796655088,"desc":"This kit creates a Pipe Convection Radiator.","name":"Kit (Radiator)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemPipeValve":{"prefab":{"prefabName":"ItemPipeValve","prefabHash":799323450,"desc":"This kit creates a Valve.","name":"Kit (Pipe Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Default"}},"ItemPipeVolumePump":{"prefab":{"prefabName":"ItemPipeVolumePump","prefabHash":-1766301997,"desc":"This kit creates a Volume Pump.","name":"Kit (Volume Pump)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemPlainCake":{"prefab":{"prefabName":"ItemPlainCake","prefabHash":-1108244510,"desc":"","name":"Cake"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemPlantEndothermic_Creative":{"prefab":{"prefabName":"ItemPlantEndothermic_Creative","prefabHash":-1159179557,"desc":"","name":"Endothermic Plant Creative"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantEndothermic_Genepool1":{"prefab":{"prefabName":"ItemPlantEndothermic_Genepool1","prefabHash":851290561,"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.","name":"Winterspawn (Alpha variant)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantEndothermic_Genepool2":{"prefab":{"prefabName":"ItemPlantEndothermic_Genepool2","prefabHash":-1414203269,"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.","name":"Winterspawn (Beta variant)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantSampler":{"prefab":{"prefabName":"ItemPlantSampler","prefabHash":173023800,"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.","name":"Plant Sampler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Activate":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemPlantSwitchGrass":{"prefab":{"prefabName":"ItemPlantSwitchGrass","prefabHash":-532672323,"desc":"","name":"Switch Grass"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Default"}},"ItemPlantThermogenic_Creative":{"prefab":{"prefabName":"ItemPlantThermogenic_Creative","prefabHash":-1208890208,"desc":"","name":"Thermogenic Plant Creative"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantThermogenic_Genepool1":{"prefab":{"prefabName":"ItemPlantThermogenic_Genepool1","prefabHash":-177792789,"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.","name":"Hades Flower (Alpha strain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlantThermogenic_Genepool2":{"prefab":{"prefabName":"ItemPlantThermogenic_Genepool2","prefabHash":1819167057,"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.","name":"Hades Flower (Beta strain)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemPlasticSheets":{"prefab":{"prefabName":"ItemPlasticSheets","prefabHash":662053345,"desc":"","name":"Plastic Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemPotato":{"prefab":{"prefabName":"ItemPotato","prefabHash":1929046963,"desc":" Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies.","name":"Potato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Potato":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemPotatoBaked":{"prefab":{"prefabName":"ItemPotatoBaked","prefabHash":-2111886401,"desc":"","name":"Baked Potato"},"item":{"consumable":true,"ingredient":true,"maxQuantity":1,"reagents":{"Potato":1.0},"slotClass":"None","sortingClass":"Food"}},"ItemPowerConnector":{"prefab":{"prefabName":"ItemPowerConnector","prefabHash":839924019,"desc":"This kit creates a Power Connector.","name":"Kit (Power Connector)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemPumpkin":{"prefab":{"prefabName":"ItemPumpkin","prefabHash":1277828144,"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.","name":"Pumpkin"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Pumpkin":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemPumpkinPie":{"prefab":{"prefabName":"ItemPumpkinPie","prefabHash":62768076,"desc":"","name":"Pumpkin Pie"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemPumpkinSoup":{"prefab":{"prefabName":"ItemPumpkinSoup","prefabHash":1277979876,"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","name":"Pumpkin Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemPureIce":{"prefab":{"prefabName":"ItemPureIce","prefabHash":-1616308158,"desc":"A frozen chunk of pure Water","name":"Pure Ice Water"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceCarbonDioxide":{"prefab":{"prefabName":"ItemPureIceCarbonDioxide","prefabHash":-1251009404,"desc":"A frozen chunk of pure Carbon Dioxide","name":"Pure Ice Carbon Dioxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceHydrogen":{"prefab":{"prefabName":"ItemPureIceHydrogen","prefabHash":944530361,"desc":"A frozen chunk of pure Hydrogen","name":"Pure Ice Hydrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidCarbonDioxide":{"prefab":{"prefabName":"ItemPureIceLiquidCarbonDioxide","prefabHash":-1715945725,"desc":"A frozen chunk of pure Liquid Carbon Dioxide","name":"Pure Ice Liquid Carbon Dioxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidHydrogen":{"prefab":{"prefabName":"ItemPureIceLiquidHydrogen","prefabHash":-1044933269,"desc":"A frozen chunk of pure Liquid Hydrogen","name":"Pure Ice Liquid Hydrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidNitrogen":{"prefab":{"prefabName":"ItemPureIceLiquidNitrogen","prefabHash":1674576569,"desc":"A frozen chunk of pure Liquid Nitrogen","name":"Pure Ice Liquid Nitrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidNitrous":{"prefab":{"prefabName":"ItemPureIceLiquidNitrous","prefabHash":1428477399,"desc":"A frozen chunk of pure Liquid Nitrous Oxide","name":"Pure Ice Liquid Nitrous"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidOxygen":{"prefab":{"prefabName":"ItemPureIceLiquidOxygen","prefabHash":541621589,"desc":"A frozen chunk of pure Liquid Oxygen","name":"Pure Ice Liquid Oxygen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidPollutant":{"prefab":{"prefabName":"ItemPureIceLiquidPollutant","prefabHash":-1748926678,"desc":"A frozen chunk of pure Liquid Pollutant","name":"Pure Ice Liquid Pollutant"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceLiquidVolatiles":{"prefab":{"prefabName":"ItemPureIceLiquidVolatiles","prefabHash":-1306628937,"desc":"A frozen chunk of pure Liquid Volatiles","name":"Pure Ice Liquid Volatiles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceNitrogen":{"prefab":{"prefabName":"ItemPureIceNitrogen","prefabHash":-1708395413,"desc":"A frozen chunk of pure Nitrogen","name":"Pure Ice Nitrogen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceNitrous":{"prefab":{"prefabName":"ItemPureIceNitrous","prefabHash":386754635,"desc":"A frozen chunk of pure Nitrous Oxide","name":"Pure Ice NitrousOxide"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceOxygen":{"prefab":{"prefabName":"ItemPureIceOxygen","prefabHash":-1150448260,"desc":"A frozen chunk of pure Oxygen","name":"Pure Ice Oxygen"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIcePollutant":{"prefab":{"prefabName":"ItemPureIcePollutant","prefabHash":-1755356,"desc":"A frozen chunk of pure Pollutant","name":"Pure Ice Pollutant"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIcePollutedWater":{"prefab":{"prefabName":"ItemPureIcePollutedWater","prefabHash":-2073202179,"desc":"A frozen chunk of Polluted Water","name":"Pure Ice Polluted Water"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceSteam":{"prefab":{"prefabName":"ItemPureIceSteam","prefabHash":-874791066,"desc":"A frozen chunk of pure Steam","name":"Pure Ice Steam"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemPureIceVolatiles":{"prefab":{"prefabName":"ItemPureIceVolatiles","prefabHash":-633723719,"desc":"A frozen chunk of pure Volatiles","name":"Pure Ice Volatiles"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemRTG":{"prefab":{"prefabName":"ItemRTG","prefabHash":495305053,"desc":"This kit creates that miracle of modern science, a Kit (Creative RTG).","name":"Kit (Creative RTG)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemRTGSurvival":{"prefab":{"prefabName":"ItemRTGSurvival","prefabHash":1817645803,"desc":"This kit creates a Kit (RTG).","name":"Kit (RTG)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"ItemReagentMix":{"prefab":{"prefabName":"ItemReagentMix","prefabHash":-1641500434,"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.","name":"Reagent Mix"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ores"}},"ItemRemoteDetonator":{"prefab":{"prefabName":"ItemRemoteDetonator","prefabHash":678483886,"desc":"","name":"Remote Detonator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemReusableFireExtinguisher":{"prefab":{"prefabName":"ItemReusableFireExtinguisher","prefabHash":-1773192190,"desc":"Requires a canister filled with any inert liquid to opperate.","name":"Fire Extinguisher (Reusable)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"ItemRice":{"prefab":{"prefabName":"ItemRice","prefabHash":658916791,"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.","name":"Rice"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Rice":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemRoadFlare":{"prefab":{"prefabName":"ItemRoadFlare","prefabHash":871811564,"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.","name":"Road Flare"},"item":{"consumable":false,"ingredient":false,"maxQuantity":20,"slotClass":"Flare","sortingClass":"Default"}},"ItemRocketMiningDrillHead":{"prefab":{"prefabName":"ItemRocketMiningDrillHead","prefabHash":2109945337,"desc":"Replaceable drill head for Rocket Miner","name":"Mining-Drill Head (Basic)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadDurable":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadDurable","prefabHash":1530764483,"desc":"","name":"Mining-Drill Head (Durable)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadHighSpeedIce":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadHighSpeedIce","prefabHash":653461728,"desc":"","name":"Mining-Drill Head (High Speed Ice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadHighSpeedMineral":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadHighSpeedMineral","prefabHash":1440678625,"desc":"","name":"Mining-Drill Head (High Speed Mineral)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadIce":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadIce","prefabHash":-380904592,"desc":"","name":"Mining-Drill Head (Ice)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadLongTerm":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadLongTerm","prefabHash":-684020753,"desc":"","name":"Mining-Drill Head (Long Term)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketMiningDrillHeadMineral":{"prefab":{"prefabName":"ItemRocketMiningDrillHeadMineral","prefabHash":1083675581,"desc":"","name":"Mining-Drill Head (Mineral)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"DrillHead","sortingClass":"Default"}},"ItemRocketScanningHead":{"prefab":{"prefabName":"ItemRocketScanningHead","prefabHash":-1198702771,"desc":"","name":"Rocket Scanner Head"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"ScanningHead","sortingClass":"Default"}},"ItemScanner":{"prefab":{"prefabName":"ItemScanner","prefabHash":1661270830,"desc":"A mysterious piece of technology, rumored to have Zrillian origins.","name":"Handheld Scanner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemScrewdriver":{"prefab":{"prefabName":"ItemScrewdriver","prefabHash":687940869,"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.","name":"Screwdriver"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemSecurityCamera":{"prefab":{"prefabName":"ItemSecurityCamera","prefabHash":-1981101032,"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.","name":"Security Camera"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Default"}},"ItemSensorLenses":{"prefab":{"prefabName":"ItemSensorLenses","prefabHash":-1176140051,"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.","name":"Sensor Lenses"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Glasses","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Sensor Processing Unit","typ":"SensorProcessingUnit"}]},"ItemSensorProcessingUnitCelestialScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitCelestialScanner","prefabHash":-1154200014,"desc":"","name":"Sensor Processing Unit (Celestial Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSensorProcessingUnitMesonScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitMesonScanner","prefabHash":-1730464583,"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.","name":"Sensor Processing Unit (T-Ray Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSensorProcessingUnitOreScanner":{"prefab":{"prefabName":"ItemSensorProcessingUnitOreScanner","prefabHash":-1219128491,"desc":"The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD.","name":"Sensor Processing Unit (Ore Scanner)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SensorProcessingUnit","sortingClass":"Default"}},"ItemSiliconIngot":{"prefab":{"prefabName":"ItemSiliconIngot","prefabHash":-290196476,"desc":"","name":"Ingot (Silicon)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Silicon":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSiliconOre":{"prefab":{"prefabName":"ItemSiliconOre","prefabHash":1103972403,"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.","name":"Ore (Silicon)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Silicon":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemSilverIngot":{"prefab":{"prefabName":"ItemSilverIngot","prefabHash":-929742000,"desc":"","name":"Ingot (Silver)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Silver":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSilverOre":{"prefab":{"prefabName":"ItemSilverOre","prefabHash":-916518678,"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.","name":"Ore (Silver)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Silver":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemSolderIngot":{"prefab":{"prefabName":"ItemSolderIngot","prefabHash":-82508479,"desc":"","name":"Ingot (Solder)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Solder":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSolidFuel":{"prefab":{"prefabName":"ItemSolidFuel","prefabHash":-365253871,"desc":"","name":"Solid Fuel (Hydrocarbon)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Hydrocarbon":1.0},"slotClass":"Ore","sortingClass":"Resources"}},"ItemSoundCartridgeBass":{"prefab":{"prefabName":"ItemSoundCartridgeBass","prefabHash":-1883441704,"desc":"","name":"Sound Cartridge Bass"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeDrums":{"prefab":{"prefabName":"ItemSoundCartridgeDrums","prefabHash":-1901500508,"desc":"","name":"Sound Cartridge Drums"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeLeads":{"prefab":{"prefabName":"ItemSoundCartridgeLeads","prefabHash":-1174735962,"desc":"","name":"Sound Cartridge Leads"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoundCartridgeSynth":{"prefab":{"prefabName":"ItemSoundCartridgeSynth","prefabHash":-1971419310,"desc":"","name":"Sound Cartridge Synth"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SoundCartridge","sortingClass":"Default"}},"ItemSoyOil":{"prefab":{"prefabName":"ItemSoyOil","prefabHash":1387403148,"desc":"","name":"Soy Oil"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"Oil":1.0},"slotClass":"None","sortingClass":"Resources"}},"ItemSoybean":{"prefab":{"prefabName":"ItemSoybean","prefabHash":1924673028,"desc":" Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil","name":"Soybean"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Soy":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemSpaceCleaner":{"prefab":{"prefabName":"ItemSpaceCleaner","prefabHash":-1737666461,"desc":"There was a time when humanity really wanted to keep space clean. That time has passed.","name":"Space Cleaner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ItemSpaceHelmet":{"prefab":{"prefabName":"ItemSpaceHelmet","prefabHash":714830451,"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.","name":"Space Helmet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemSpaceIce":{"prefab":{"prefabName":"ItemSpaceIce","prefabHash":675686937,"desc":"","name":"Space Ice"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Ore","sortingClass":"Ores"}},"ItemSpaceOre":{"prefab":{"prefabName":"ItemSpaceOre","prefabHash":2131916219,"desc":"Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores.","name":"Dirty Ore"},"item":{"consumable":false,"ingredient":false,"maxQuantity":100,"slotClass":"Ore","sortingClass":"Ores"}},"ItemSpacepack":{"prefab":{"prefabName":"ItemSpacepack","prefabHash":-1260618380,"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.","name":"Spacepack"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Back","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}]},"ItemSprayCanBlack":{"prefab":{"prefabName":"ItemSprayCanBlack","prefabHash":-688107795,"desc":"Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses.","name":"Spray Paint (Black)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanBlue":{"prefab":{"prefabName":"ItemSprayCanBlue","prefabHash":-498464883,"desc":"What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'","name":"Spray Paint (Blue)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanBrown":{"prefab":{"prefabName":"ItemSprayCanBrown","prefabHash":845176977,"desc":"In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed.","name":"Spray Paint (Brown)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanGreen":{"prefab":{"prefabName":"ItemSprayCanGreen","prefabHash":-1880941852,"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.","name":"Spray Paint (Green)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanGrey":{"prefab":{"prefabName":"ItemSprayCanGrey","prefabHash":-1645266981,"desc":"Arguably the most popular color in the universe, grey was invented so designers had something to do.","name":"Spray Paint (Grey)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanKhaki":{"prefab":{"prefabName":"ItemSprayCanKhaki","prefabHash":1918456047,"desc":"Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode.","name":"Spray Paint (Khaki)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanOrange":{"prefab":{"prefabName":"ItemSprayCanOrange","prefabHash":-158007629,"desc":"Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove.","name":"Spray Paint (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanPink":{"prefab":{"prefabName":"ItemSprayCanPink","prefabHash":1344257263,"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.","name":"Spray Paint (Pink)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanPurple":{"prefab":{"prefabName":"ItemSprayCanPurple","prefabHash":30686509,"desc":"Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong.","name":"Spray Paint (Purple)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanRed":{"prefab":{"prefabName":"ItemSprayCanRed","prefabHash":1514393921,"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.","name":"Spray Paint (Red)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanWhite":{"prefab":{"prefabName":"ItemSprayCanWhite","prefabHash":498481505,"desc":"White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff.","name":"Spray Paint (White)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayCanYellow":{"prefab":{"prefabName":"ItemSprayCanYellow","prefabHash":995468116,"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.","name":"Spray Paint (Yellow)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Bottle","sortingClass":"Default"}},"ItemSprayGun":{"prefab":{"prefabName":"ItemSprayGun","prefabHash":1289723966,"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.","name":"Spray Gun"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Spray Can","typ":"Bottle"}]},"ItemSteelFrames":{"prefab":{"prefabName":"ItemSteelFrames","prefabHash":-1448105779,"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.","name":"Steel Frames"},"item":{"consumable":false,"ingredient":false,"maxQuantity":30,"slotClass":"None","sortingClass":"Kits"}},"ItemSteelIngot":{"prefab":{"prefabName":"ItemSteelIngot","prefabHash":-654790771,"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.","name":"Ingot (Steel)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Steel":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSteelSheets":{"prefab":{"prefabName":"ItemSteelSheets","prefabHash":38555961,"desc":"An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types.","name":"Steel Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemStelliteGlassSheets":{"prefab":{"prefabName":"ItemStelliteGlassSheets","prefabHash":-2038663432,"desc":"A stronger glass substitute.","name":"Stellite Glass Sheets"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"None","sortingClass":"Resources"}},"ItemStelliteIngot":{"prefab":{"prefabName":"ItemStelliteIngot","prefabHash":-1897868623,"desc":"","name":"Ingot (Stellite)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Stellite":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemSugar":{"prefab":{"prefabName":"ItemSugar","prefabHash":2111910840,"desc":"","name":"Sugar"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Sugar":10.0},"slotClass":"None","sortingClass":"Resources"}},"ItemSugarCane":{"prefab":{"prefabName":"ItemSugarCane","prefabHash":-1335056202,"desc":"","name":"Sugarcane"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Sugar":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemSuitModCryogenicUpgrade":{"prefab":{"prefabName":"ItemSuitModCryogenicUpgrade","prefabHash":-1274308304,"desc":"Enables suits with basic cooling functionality to work with cryogenic liquid.","name":"Cryogenic Suit Upgrade"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"SuitMod","sortingClass":"Default"}},"ItemTablet":{"prefab":{"prefabName":"ItemTablet","prefabHash":-229808600,"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.","name":"Handheld Tablet"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"}]},"ItemTerrainManipulator":{"prefab":{"prefabName":"ItemTerrainManipulator","prefabHash":111280987,"desc":"0.Mode0\n1.Mode1","name":"Terrain Manipulator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Mode":"ReadWrite","On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Dirt Canister","typ":"Ore"}]},"ItemTomato":{"prefab":{"prefabName":"ItemTomato","prefabHash":-998592080,"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.","name":"Tomato"},"item":{"consumable":false,"ingredient":true,"maxQuantity":20,"reagents":{"Tomato":1.0},"slotClass":"Plant","sortingClass":"Resources"}},"ItemTomatoSoup":{"prefab":{"prefabName":"ItemTomatoSoup","prefabHash":688734890,"desc":"Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine.","name":"Tomato Soup"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Food"}},"ItemToolBelt":{"prefab":{"prefabName":"ItemToolBelt","prefabHash":-355127880,"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.","name":"Tool Belt"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Belt","sortingClass":"Clothing"},"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"}]},"ItemTropicalPlant":{"prefab":{"prefabName":"ItemTropicalPlant","prefabHash":-800947386,"desc":"An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants.","name":"Tropical Lily"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Resources"}},"ItemUraniumOre":{"prefab":{"prefabName":"ItemUraniumOre","prefabHash":-1516581844,"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.","name":"Ore (Uranium)"},"item":{"consumable":false,"ingredient":true,"maxQuantity":50,"reagents":{"Uranium":1.0},"slotClass":"Ore","sortingClass":"Ores"}},"ItemVolatiles":{"prefab":{"prefabName":"ItemVolatiles","prefabHash":1253102035,"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","name":"Ice (Volatiles)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":50,"slotClass":"Ore","sortingClass":"Ices"}},"ItemWallCooler":{"prefab":{"prefabName":"ItemWallCooler","prefabHash":-1567752627,"desc":"This kit creates a Wall Cooler.","name":"Kit (Wall Cooler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWallHeater":{"prefab":{"prefabName":"ItemWallHeater","prefabHash":1880134612,"desc":"This kit creates a Kit (Wall Heater).","name":"Kit (Wall Heater)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWallLight":{"prefab":{"prefabName":"ItemWallLight","prefabHash":1108423476,"desc":"This kit creates any one of ten Kit (Lights) variants.","name":"Kit (Lights)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"ItemWaspaloyIngot":{"prefab":{"prefabName":"ItemWaspaloyIngot","prefabHash":156348098,"desc":"","name":"Ingot (Waspaloy)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":500,"reagents":{"Waspaloy":1.0},"slotClass":"Ingot","sortingClass":"Resources"}},"ItemWaterBottle":{"prefab":{"prefabName":"ItemWaterBottle","prefabHash":107741229,"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.","name":"Water Bottle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"LiquidBottle","sortingClass":"Default"}},"ItemWaterPipeDigitalValve":{"prefab":{"prefabName":"ItemWaterPipeDigitalValve","prefabHash":309693520,"desc":"","name":"Kit (Liquid Digital Valve)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWaterPipeMeter":{"prefab":{"prefabName":"ItemWaterPipeMeter","prefabHash":-90898877,"desc":"","name":"Kit (Liquid Pipe Meter)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWaterWallCooler":{"prefab":{"prefabName":"ItemWaterWallCooler","prefabHash":-1721846327,"desc":"","name":"Kit (Liquid Wall Cooler)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":5,"slotClass":"None","sortingClass":"Kits"}},"ItemWearLamp":{"prefab":{"prefabName":"ItemWearLamp","prefabHash":-598730959,"desc":"","name":"Headlamp"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Helmet","sortingClass":"Clothing"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"On":"ReadWrite","Power":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemWeldingTorch":{"prefab":{"prefabName":"ItemWeldingTorch","prefabHash":-2066892079,"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.","name":"Welding Torch"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemWheat":{"prefab":{"prefabName":"ItemWheat","prefabHash":-1057658015,"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.","name":"Wheat"},"item":{"consumable":false,"ingredient":true,"maxQuantity":100,"reagents":{"Carbon":1.0},"slotClass":"Plant","sortingClass":"Default"}},"ItemWireCutters":{"prefab":{"prefabName":"ItemWireCutters","prefabHash":1535854074,"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.","name":"Wire Cutters"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"ItemWirelessBatteryCellExtraLarge":{"prefab":{"prefabName":"ItemWirelessBatteryCellExtraLarge","prefabHash":-504717121,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Wireless Battery Cell Extra Large"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Battery","sortingClass":"Default"},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"ItemWreckageAirConditioner1":{"prefab":{"prefabName":"ItemWreckageAirConditioner1","prefabHash":-1826023284,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageAirConditioner2":{"prefab":{"prefabName":"ItemWreckageAirConditioner2","prefabHash":169888054,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageHydroponicsTray1":{"prefab":{"prefabName":"ItemWreckageHydroponicsTray1","prefabHash":-310178617,"desc":"","name":"Wreckage Hydroponics Tray"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageLargeExtendableRadiator01":{"prefab":{"prefabName":"ItemWreckageLargeExtendableRadiator01","prefabHash":-997763,"desc":"","name":"Wreckage Large Extendable Radiator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureRTG1":{"prefab":{"prefabName":"ItemWreckageStructureRTG1","prefabHash":391453348,"desc":"","name":"Wreckage Structure RTG"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation001":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation001","prefabHash":-834664349,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation002":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation002","prefabHash":1464424921,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation003":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation003","prefabHash":542009679,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation004":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation004","prefabHash":-1104478996,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation005":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation005","prefabHash":-919745414,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation006":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation006","prefabHash":1344576960,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation007":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation007","prefabHash":656649558,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageStructureWeatherStation008":{"prefab":{"prefabName":"ItemWreckageStructureWeatherStation008","prefabHash":-1214467897,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator1":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator1","prefabHash":-1662394403,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator2":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator2","prefabHash":98602599,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageTurbineGenerator3":{"prefab":{"prefabName":"ItemWreckageTurbineGenerator3","prefabHash":1927790321,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageWallCooler1":{"prefab":{"prefabName":"ItemWreckageWallCooler1","prefabHash":-1682930158,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWreckageWallCooler2":{"prefab":{"prefabName":"ItemWreckageWallCooler2","prefabHash":45733800,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Wreckage","sortingClass":"Default"}},"ItemWrench":{"prefab":{"prefabName":"ItemWrench","prefabHash":-1886261558,"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","name":"Wrench"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Tool","sortingClass":"Tools"}},"KitSDBSilo":{"prefab":{"prefabName":"KitSDBSilo","prefabHash":1932952652,"desc":"This kit creates a SDB Silo.","name":"Kit (SDB Silo)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"None","sortingClass":"Kits"}},"KitStructureCombustionCentrifuge":{"prefab":{"prefabName":"KitStructureCombustionCentrifuge","prefabHash":231903234,"desc":"","name":"Kit (Combustion Centrifuge)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Kits"}},"KitchenTableShort":{"prefab":{"prefabName":"KitchenTableShort","prefabHash":-1427415566,"desc":"","name":"Kitchen Table (Short)"},"structure":{"smallGrid":true}},"KitchenTableSimpleShort":{"prefab":{"prefabName":"KitchenTableSimpleShort","prefabHash":-78099334,"desc":"","name":"Kitchen Table (Simple Short)"},"structure":{"smallGrid":true}},"KitchenTableSimpleTall":{"prefab":{"prefabName":"KitchenTableSimpleTall","prefabHash":-1068629349,"desc":"","name":"Kitchen Table (Simple Tall)"},"structure":{"smallGrid":true}},"KitchenTableTall":{"prefab":{"prefabName":"KitchenTableTall","prefabHash":-1386237782,"desc":"","name":"Kitchen Table (Tall)"},"structure":{"smallGrid":true}},"Lander":{"prefab":{"prefabName":"Lander","prefabHash":1605130615,"desc":"","name":"Lander"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"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"}]},"Landingpad_2x2CenterPiece01":{"prefab":{"prefabName":"Landingpad_2x2CenterPiece01","prefabHash":-1295222317,"desc":"Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors","name":"Landingpad 2x2 Center Piece"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Landingpad_BlankPiece":{"prefab":{"prefabName":"Landingpad_BlankPiece","prefabHash":912453390,"desc":"","name":"Landingpad"},"structure":{"smallGrid":true}},"Landingpad_CenterPiece01":{"prefab":{"prefabName":"Landingpad_CenterPiece01","prefabHash":1070143159,"desc":"The target point where the trader shuttle will land. Requires a clear view of the sky.","name":"Landingpad Center"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"modes":{"0":"None","1":"NoContact","2":"Moving","3":"Holding","4":"Landed"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[]},"Landingpad_CrossPiece":{"prefab":{"prefabName":"Landingpad_CrossPiece","prefabHash":1101296153,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Cross"},"structure":{"smallGrid":true}},"Landingpad_DataConnectionPiece":{"prefab":{"prefabName":"Landingpad_DataConnectionPiece","prefabHash":-2066405918,"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.","name":"Landingpad Data And Power"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Combustion":"Read","ContactTypeId":"Read","Error":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_DiagonalPiece01":{"prefab":{"prefabName":"Landingpad_DiagonalPiece01","prefabHash":977899131,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Diagonal"},"structure":{"smallGrid":true}},"Landingpad_GasConnectorInwardPiece":{"prefab":{"prefabName":"Landingpad_GasConnectorInwardPiece","prefabHash":817945707,"desc":"","name":"Landingpad Gas Input"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_GasConnectorOutwardPiece":{"prefab":{"prefabName":"Landingpad_GasConnectorOutwardPiece","prefabHash":-1100218307,"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.","name":"Landingpad Gas Output"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_GasCylinderTankPiece":{"prefab":{"prefabName":"Landingpad_GasCylinderTankPiece","prefabHash":170818567,"desc":"Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders.","name":"Landingpad Gas Storage"},"structure":{"smallGrid":true}},"Landingpad_LiquidConnectorInwardPiece":{"prefab":{"prefabName":"Landingpad_LiquidConnectorInwardPiece","prefabHash":-1216167727,"desc":"","name":"Landingpad Liquid Input"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_LiquidConnectorOutwardPiece":{"prefab":{"prefabName":"Landingpad_LiquidConnectorOutwardPiece","prefabHash":-1788929869,"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.","name":"Landingpad Liquid Output"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Landingpad_StraightPiece01":{"prefab":{"prefabName":"Landingpad_StraightPiece01","prefabHash":-976273247,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Straight"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceCorner":{"prefab":{"prefabName":"Landingpad_TaxiPieceCorner","prefabHash":-1872345847,"desc":"","name":"Landingpad Taxi Corner"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceHold":{"prefab":{"prefabName":"Landingpad_TaxiPieceHold","prefabHash":146051619,"desc":"","name":"Landingpad Taxi Hold"},"structure":{"smallGrid":true}},"Landingpad_TaxiPieceStraight":{"prefab":{"prefabName":"Landingpad_TaxiPieceStraight","prefabHash":-1477941080,"desc":"","name":"Landingpad Taxi Straight"},"structure":{"smallGrid":true}},"Landingpad_ThreshholdPiece":{"prefab":{"prefabName":"Landingpad_ThreshholdPiece","prefabHash":-1514298582,"desc":"","name":"Landingpad Threshhold"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"LogicStepSequencer8":{"prefab":{"prefabName":"LogicStepSequencer8","prefabHash":1531272458,"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.","name":"Logic Step Sequencer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","Bpm":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Sound Cartridge","typ":"SoundCartridge"}],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"Meteorite":{"prefab":{"prefabName":"Meteorite","prefabHash":-99064335,"desc":"","name":"Meteorite"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"MonsterEgg":{"prefab":{"prefabName":"MonsterEgg","prefabHash":-1667675295,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"MotherboardComms":{"prefab":{"prefabName":"MotherboardComms","prefabHash":-337075633,"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.","name":"Communications Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardLogic":{"prefab":{"prefabName":"MotherboardLogic","prefabHash":502555944,"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.","name":"Logic Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardMissionControl":{"prefab":{"prefabName":"MotherboardMissionControl","prefabHash":-127121474,"desc":"","name":""},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardProgrammableChip":{"prefab":{"prefabName":"MotherboardProgrammableChip","prefabHash":-161107071,"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.","name":"IC Editor Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardRockets":{"prefab":{"prefabName":"MotherboardRockets","prefabHash":-806986392,"desc":"","name":"Rocket Control Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MotherboardSorter":{"prefab":{"prefabName":"MotherboardSorter","prefabHash":-1908268220,"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.","name":"Sorter Motherboard"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Motherboard","sortingClass":"Default"}},"MothershipCore":{"prefab":{"prefabName":"MothershipCore","prefabHash":-1930442922,"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.","name":"Mothership Core"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"NpcChick":{"prefab":{"prefabName":"NpcChick","prefabHash":155856647,"desc":"","name":"Chick"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"NpcChicken":{"prefab":{"prefabName":"NpcChicken","prefabHash":399074198,"desc":"","name":"Chicken"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"PassiveSpeaker":{"prefab":{"prefabName":"PassiveSpeaker","prefabHash":248893646,"desc":"","name":"Passive Speaker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"ReadWrite","PrefabHash":"ReadWrite","ReferenceId":"ReadWrite","SoundAlert":"ReadWrite","Volume":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"PipeBenderMod":{"prefab":{"prefabName":"PipeBenderMod","prefabHash":443947415,"desc":"Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Pipe Bender Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"PortableComposter":{"prefab":{"prefabName":"PortableComposter","prefabHash":-1958705204,"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","name":"Portable Composter"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"Battery"},{"name":"Liquid Canister","typ":"LiquidCanister"}]},"PortableSolarPanel":{"prefab":{"prefabName":"PortableSolarPanel","prefabHash":2043318949,"desc":"","name":"Portable Solar Panel"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Open":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"RailingElegant01":{"prefab":{"prefabName":"RailingElegant01","prefabHash":399661231,"desc":"","name":"Railing Elegant (Type 1)"},"structure":{"smallGrid":false}},"RailingElegant02":{"prefab":{"prefabName":"RailingElegant02","prefabHash":-1898247915,"desc":"","name":"Railing Elegant (Type 2)"},"structure":{"smallGrid":false}},"RailingIndustrial02":{"prefab":{"prefabName":"RailingIndustrial02","prefabHash":-2072792175,"desc":"","name":"Railing Industrial (Type 2)"},"structure":{"smallGrid":false}},"ReagentColorBlue":{"prefab":{"prefabName":"ReagentColorBlue","prefabHash":980054869,"desc":"","name":"Color Dye (Blue)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorBlue":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorGreen":{"prefab":{"prefabName":"ReagentColorGreen","prefabHash":120807542,"desc":"","name":"Color Dye (Green)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorGreen":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorOrange":{"prefab":{"prefabName":"ReagentColorOrange","prefabHash":-400696159,"desc":"","name":"Color Dye (Orange)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorOrange":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorRed":{"prefab":{"prefabName":"ReagentColorRed","prefabHash":1998377961,"desc":"","name":"Color Dye (Red)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorRed":10.0},"slotClass":"None","sortingClass":"Resources"}},"ReagentColorYellow":{"prefab":{"prefabName":"ReagentColorYellow","prefabHash":635208006,"desc":"","name":"Color Dye (Yellow)"},"item":{"consumable":true,"ingredient":true,"maxQuantity":100,"reagents":{"ColorYellow":10.0},"slotClass":"None","sortingClass":"Resources"}},"RespawnPoint":{"prefab":{"prefabName":"RespawnPoint","prefabHash":-788672929,"desc":"Place a respawn point to set a player entry point to your base when loading in, or returning from the dead.","name":"Respawn Point"},"structure":{"smallGrid":true}},"RespawnPointWallMounted":{"prefab":{"prefabName":"RespawnPointWallMounted","prefabHash":-491247370,"desc":"","name":"Respawn Point (Mounted)"},"structure":{"smallGrid":true}},"Robot":{"prefab":{"prefabName":"Robot","prefabHash":434786784,"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","name":"AIMeE Bot"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":true},"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"}]},"RoverCargo":{"prefab":{"prefabName":"RoverCargo","prefabHash":350726273,"desc":"Connects to Logic Transmitter","name":"Rover (Cargo)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"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":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI":{"prefab":{"prefabName":"Rover_MkI","prefabHash":-2049946335,"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","name":"Rover MkI"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"logic":{"logicSlotTypes":{"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"},"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"},"10":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"slots":[{"name":"Entity","typ":"Entity"},{"name":"Entity","typ":"Entity"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI_build_states":{"prefab":{"prefabName":"Rover_MkI_build_states","prefabHash":861674123,"desc":"","name":"Rover MKI"},"structure":{"smallGrid":false}},"SMGMagazine":{"prefab":{"prefabName":"SMGMagazine","prefabHash":-256607540,"desc":"","name":"SMG Magazine"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Magazine","sortingClass":"Default"}},"SeedBag_Cocoa":{"prefab":{"prefabName":"SeedBag_Cocoa","prefabHash":1139887531,"desc":"","name":"Cocoa Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Corn":{"prefab":{"prefabName":"SeedBag_Corn","prefabHash":-1290755415,"desc":"Grow a Corn.","name":"Corn Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Fern":{"prefab":{"prefabName":"SeedBag_Fern","prefabHash":-1990600883,"desc":"Grow a Fern.","name":"Fern Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Mushroom":{"prefab":{"prefabName":"SeedBag_Mushroom","prefabHash":311593418,"desc":"Grow a Mushroom.","name":"Mushroom Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Potato":{"prefab":{"prefabName":"SeedBag_Potato","prefabHash":1005571172,"desc":"Grow a Potato.","name":"Potato Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Pumpkin":{"prefab":{"prefabName":"SeedBag_Pumpkin","prefabHash":1423199840,"desc":"Grow a Pumpkin.","name":"Pumpkin Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Rice":{"prefab":{"prefabName":"SeedBag_Rice","prefabHash":-1691151239,"desc":"Grow some Rice.","name":"Rice Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Soybean":{"prefab":{"prefabName":"SeedBag_Soybean","prefabHash":1783004244,"desc":"Grow some Soybean.","name":"Soybean Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_SugarCane":{"prefab":{"prefabName":"SeedBag_SugarCane","prefabHash":-1884103228,"desc":"","name":"Sugarcane Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Switchgrass":{"prefab":{"prefabName":"SeedBag_Switchgrass","prefabHash":488360169,"desc":"","name":"Switchgrass Seed"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Tomato":{"prefab":{"prefabName":"SeedBag_Tomato","prefabHash":-1922066841,"desc":"Grow a Tomato.","name":"Tomato Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SeedBag_Wheet":{"prefab":{"prefabName":"SeedBag_Wheet","prefabHash":-654756733,"desc":"Grow some Wheat.","name":"Wheat Seeds"},"item":{"consumable":false,"ingredient":false,"maxQuantity":10,"slotClass":"Plant","sortingClass":"Food"}},"SpaceShuttle":{"prefab":{"prefabName":"SpaceShuttle","prefabHash":-1991297271,"desc":"An antiquated Sinotai transport craft, long since decommissioned.","name":"Space Shuttle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"},"slots":[{"name":"Captain's Seat","typ":"Entity"},{"name":"Passenger Seat Left","typ":"Entity"},{"name":"Passenger Seat Right","typ":"Entity"}]},"StopWatch":{"prefab":{"prefabName":"StopWatch","prefabHash":-1527229051,"desc":"","name":"Stop Watch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Time":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureAccessBridge":{"prefab":{"prefabName":"StructureAccessBridge","prefabHash":1298920475,"desc":"Extendable bridge that spans three grids","name":"Access Bridge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureActiveVent":{"prefab":{"prefabName":"StructureActiveVent","prefabHash":-1129453144,"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 ...","name":"Active Vent"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAdvancedComposter":{"prefab":{"prefabName":"StructureAdvancedComposter","prefabHash":446212963,"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","name":"Advanced Composter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAdvancedFurnace":{"prefab":{"prefabName":"StructureAdvancedFurnace","prefabHash":545937711,"desc":"The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure.","name":"Advanced Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Combustion":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"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","Reagents":"Read","RecipeHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingInput":"ReadWrite","SettingOutput":"ReadWrite","Temperature":"Read","TotalMoles":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureAdvancedPackagingMachine":{"prefab":{"prefabName":"StructureAdvancedPackagingMachine","prefabHash":-463037670,"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.","name":"Advanced Packaging Machine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureAirConditioner":{"prefab":{"prefabName":"StructureAirConditioner","prefabHash":-2087593337,"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.","name":"Air Conditioner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"CombustionInput":"Read","CombustionOutput":"Read","CombustionOutput2":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidCarbonDioxideOutput2":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrogenOutput2":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidNitrousOxideOutput2":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidOxygenOutput2":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidPollutantOutput2":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"Read","RatioLiquidVolatilesOutput2":"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","RatioSteamInput":"Read","RatioSteamOutput":"Read","RatioSteamOutput2":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Waste"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAirlock":{"prefab":{"prefabName":"StructureAirlock","prefabHash":-2105052344,"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.","name":"Airlock"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAirlockGate":{"prefab":{"prefabName":"StructureAirlockGate","prefabHash":1736080881,"desc":"1 x 1 modular door piece for building hangar doors.","name":"Small Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAngledBench":{"prefab":{"prefabName":"StructureAngledBench","prefabHash":1811979158,"desc":"","name":"Bench (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureArcFurnace":{"prefab":{"prefabName":"StructureArcFurnace","prefabHash":-247344692,"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.","name":"Arc Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","Idle":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"},{"name":"Export","typ":"Ingot"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureAreaPowerControl":{"prefab":{"prefabName":"StructureAreaPowerControl","prefabHash":1999523701,"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.","name":"Area Power Control"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Charge":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAreaPowerControlReversed":{"prefab":{"prefabName":"StructureAreaPowerControlReversed","prefabHash":-1032513487,"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.","name":"Area Power Control"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Charge":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAutoMinerSmall":{"prefab":{"prefabName":"StructureAutoMinerSmall","prefabHash":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":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureAutolathe":{"prefab":{"prefabName":"StructureAutolathe","prefabHash":336213101,"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 ","name":"Autolathe"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureAutomatedOven":{"prefab":{"prefabName":"StructureAutomatedOven","prefabHash":-1672404896,"desc":"","name":"Automated Oven"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureBackLiquidPressureRegulator":{"prefab":{"prefabName":"StructureBackLiquidPressureRegulator","prefabHash":2099900163,"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.","name":"Liquid Back Volume Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBackPressureRegulator":{"prefab":{"prefabName":"StructureBackPressureRegulator","prefabHash":-1149857558,"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.","name":"Back Pressure Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBasketHoop":{"prefab":{"prefabName":"StructureBasketHoop","prefabHash":-1613497288,"desc":"","name":"Basket Hoop"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBattery":{"prefab":{"prefabName":"StructureBattery","prefabHash":-400115994,"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).","name":"Station Battery"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryCharger":{"prefab":{"prefabName":"StructureBatteryCharger","prefabHash":1945930022,"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.","name":"Battery Cell Charger"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryChargerSmall":{"prefab":{"prefabName":"StructureBatteryChargerSmall","prefabHash":-761772413,"desc":"","name":"Battery Charger Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryLarge":{"prefab":{"prefabName":"StructureBatteryLarge","prefabHash":-1388288459,"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). ","name":"Station Battery (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatteryMedium":{"prefab":{"prefabName":"StructureBatteryMedium","prefabHash":-1125305264,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Maximum":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBatterySmall":{"prefab":{"prefabName":"StructureBatterySmall","prefabHash":-2123455080,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Auxiliary Rocket Battery "},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Maximum":"Read","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBeacon":{"prefab":{"prefabName":"StructureBeacon","prefabHash":-188177083,"desc":"","name":"Beacon"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench":{"prefab":{"prefabName":"StructureBench","prefabHash":-2042448192,"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.","name":"Powered Bench"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench1":{"prefab":{"prefabName":"StructureBench1","prefabHash":406745009,"desc":"","name":"Bench (Counter Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench2":{"prefab":{"prefabName":"StructureBench2","prefabHash":-2127086069,"desc":"","name":"Bench (High Tech Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench3":{"prefab":{"prefabName":"StructureBench3","prefabHash":-164622691,"desc":"","name":"Bench (Frame Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBench4":{"prefab":{"prefabName":"StructureBench4","prefabHash":1750375230,"desc":"","name":"Bench (Workbench Style)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBlastDoor":{"prefab":{"prefabName":"StructureBlastDoor","prefabHash":337416191,"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.","name":"Blast Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureBlockBed":{"prefab":{"prefabName":"StructureBlockBed","prefabHash":697908419,"desc":"Description coming.","name":"Block Bed"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureBlocker":{"prefab":{"prefabName":"StructureBlocker","prefabHash":378084505,"desc":"","name":"Blocker"},"structure":{"smallGrid":false}},"StructureCableAnalysizer":{"prefab":{"prefabName":"StructureCableAnalysizer","prefabHash":1036015121,"desc":"","name":"Cable Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PowerActual":"Read","PowerPotential":"Read","PowerRequired":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableCorner":{"prefab":{"prefabName":"StructureCableCorner","prefabHash":-889269388,"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).","name":"Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3":{"prefab":{"prefabName":"StructureCableCorner3","prefabHash":980469101,"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).","name":"Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3Burnt":{"prefab":{"prefabName":"StructureCableCorner3Burnt","prefabHash":318437449,"desc":"","name":"Burnt Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner3HBurnt":{"prefab":{"prefabName":"StructureCableCorner3HBurnt","prefabHash":2393826,"desc":"","name":""},"structure":{"smallGrid":true}},"StructureCableCorner4":{"prefab":{"prefabName":"StructureCableCorner4","prefabHash":-1542172466,"desc":"","name":"Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner4Burnt":{"prefab":{"prefabName":"StructureCableCorner4Burnt","prefabHash":268421361,"desc":"","name":"Burnt Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCorner4HBurnt":{"prefab":{"prefabName":"StructureCableCorner4HBurnt","prefabHash":-981223316,"desc":"","name":"Burnt Heavy Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerBurnt":{"prefab":{"prefabName":"StructureCableCornerBurnt","prefabHash":-177220914,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH":{"prefab":{"prefabName":"StructureCableCornerH","prefabHash":-39359015,"desc":"","name":"Heavy Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH3":{"prefab":{"prefabName":"StructureCableCornerH3","prefabHash":-1843379322,"desc":"","name":"Heavy Cable (3-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerH4":{"prefab":{"prefabName":"StructureCableCornerH4","prefabHash":205837861,"desc":"","name":"Heavy Cable (4-Way Corner)"},"structure":{"smallGrid":true}},"StructureCableCornerHBurnt":{"prefab":{"prefabName":"StructureCableCornerHBurnt","prefabHash":1931412811,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"smallGrid":true}},"StructureCableFuse100k":{"prefab":{"prefabName":"StructureCableFuse100k","prefabHash":281380789,"desc":"","name":"Fuse (100kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse1k":{"prefab":{"prefabName":"StructureCableFuse1k","prefabHash":-1103727120,"desc":"","name":"Fuse (1kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse50k":{"prefab":{"prefabName":"StructureCableFuse50k","prefabHash":-349716617,"desc":"","name":"Fuse (50kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableFuse5k":{"prefab":{"prefabName":"StructureCableFuse5k","prefabHash":-631590668,"desc":"","name":"Fuse (5kW)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCableJunction":{"prefab":{"prefabName":"StructureCableJunction","prefabHash":-175342021,"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).","name":"Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4":{"prefab":{"prefabName":"StructureCableJunction4","prefabHash":1112047202,"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).","name":"Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4Burnt":{"prefab":{"prefabName":"StructureCableJunction4Burnt","prefabHash":-1756896811,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction4HBurnt":{"prefab":{"prefabName":"StructureCableJunction4HBurnt","prefabHash":-115809132,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction5":{"prefab":{"prefabName":"StructureCableJunction5","prefabHash":894390004,"desc":"","name":"Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction5Burnt":{"prefab":{"prefabName":"StructureCableJunction5Burnt","prefabHash":1545286256,"desc":"","name":"Burnt Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6":{"prefab":{"prefabName":"StructureCableJunction6","prefabHash":-1404690610,"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).","name":"Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6Burnt":{"prefab":{"prefabName":"StructureCableJunction6Burnt","prefabHash":-628145954,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunction6HBurnt":{"prefab":{"prefabName":"StructureCableJunction6HBurnt","prefabHash":1854404029,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionBurnt":{"prefab":{"prefabName":"StructureCableJunctionBurnt","prefabHash":-1620686196,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH":{"prefab":{"prefabName":"StructureCableJunctionH","prefabHash":469451637,"desc":"","name":"Heavy Cable (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH4":{"prefab":{"prefabName":"StructureCableJunctionH4","prefabHash":-742234680,"desc":"","name":"Heavy Cable (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH5":{"prefab":{"prefabName":"StructureCableJunctionH5","prefabHash":-1530571426,"desc":"","name":"Heavy Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH5Burnt":{"prefab":{"prefabName":"StructureCableJunctionH5Burnt","prefabHash":1701593300,"desc":"","name":"Burnt Heavy Cable (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionH6":{"prefab":{"prefabName":"StructureCableJunctionH6","prefabHash":1036780772,"desc":"","name":"Heavy Cable (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureCableJunctionHBurnt":{"prefab":{"prefabName":"StructureCableJunctionHBurnt","prefabHash":-341365649,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"smallGrid":true}},"StructureCableStraight":{"prefab":{"prefabName":"StructureCableStraight","prefabHash":605357050,"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).","name":"Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightBurnt":{"prefab":{"prefabName":"StructureCableStraightBurnt","prefabHash":-1196981113,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightH":{"prefab":{"prefabName":"StructureCableStraightH","prefabHash":-146200530,"desc":"","name":"Heavy Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCableStraightHBurnt":{"prefab":{"prefabName":"StructureCableStraightHBurnt","prefabHash":2085762089,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"smallGrid":true}},"StructureCamera":{"prefab":{"prefabName":"StructureCamera","prefabHash":-342072665,"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.","name":"Camera"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureCapsuleTankGas":{"prefab":{"prefabName":"StructureCapsuleTankGas","prefabHash":-1385712131,"desc":"","name":"Gas Capsule Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCapsuleTankLiquid":{"prefab":{"prefabName":"StructureCapsuleTankLiquid","prefabHash":1415396263,"desc":"","name":"Liquid Capsule Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureCargoStorageMedium":{"prefab":{"prefabName":"StructureCargoStorageMedium","prefabHash":1151864003,"desc":"","name":"Cargo Storage (Medium)"},"structure":{"smallGrid":true},"logic":{"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":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCargoStorageSmall":{"prefab":{"prefabName":"StructureCargoStorageSmall","prefabHash":-1493672123,"desc":"","name":"Cargo Storage (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"},"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"},"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"},"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"},"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCentrifuge":{"prefab":{"prefabName":"StructureCentrifuge","prefabHash":690945935,"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.","name":"Centrifuge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureChair":{"prefab":{"prefabName":"StructureChair","prefabHash":1167659360,"desc":"One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs.","name":"Chair"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBacklessDouble":{"prefab":{"prefabName":"StructureChairBacklessDouble","prefabHash":1944858936,"desc":"","name":"Chair (Backless Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBacklessSingle":{"prefab":{"prefabName":"StructureChairBacklessSingle","prefabHash":1672275150,"desc":"","name":"Chair (Backless Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBoothCornerLeft":{"prefab":{"prefabName":"StructureChairBoothCornerLeft","prefabHash":-367720198,"desc":"","name":"Chair (Booth Corner Left)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairBoothMiddle":{"prefab":{"prefabName":"StructureChairBoothMiddle","prefabHash":1640720378,"desc":"","name":"Chair (Booth Middle)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairRectangleDouble":{"prefab":{"prefabName":"StructureChairRectangleDouble","prefabHash":-1152812099,"desc":"","name":"Chair (Rectangle Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairRectangleSingle":{"prefab":{"prefabName":"StructureChairRectangleSingle","prefabHash":-1425428917,"desc":"","name":"Chair (Rectangle Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairThickDouble":{"prefab":{"prefabName":"StructureChairThickDouble","prefabHash":-1245724402,"desc":"","name":"Chair (Thick Double)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChairThickSingle":{"prefab":{"prefabName":"StructureChairThickSingle","prefabHash":-1510009608,"desc":"","name":"Chair (Thick Single)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteBin":{"prefab":{"prefabName":"StructureChuteBin","prefabHash":-850484480,"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.","name":"Chute Bin"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Input","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteCorner":{"prefab":{"prefabName":"StructureChuteCorner","prefabHash":1360330136,"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.","name":"Chute (Corner)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteDigitalFlipFlopSplitterLeft":{"prefab":{"prefabName":"StructureChuteDigitalFlipFlopSplitterLeft","prefabHash":-810874728,"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.","name":"Chute Digital Flip Flop Splitter Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingOutput":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Output2"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureChuteDigitalFlipFlopSplitterRight":{"prefab":{"prefabName":"StructureChuteDigitalFlipFlopSplitterRight","prefabHash":163728359,"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.","name":"Chute Digital Flip Flop Splitter Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","SettingOutput":"ReadWrite"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Output2"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureChuteDigitalValveLeft":{"prefab":{"prefabName":"StructureChuteDigitalValveLeft","prefabHash":648608238,"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.","name":"Chute Digital Valve Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteDigitalValveRight":{"prefab":{"prefabName":"StructureChuteDigitalValveRight","prefabHash":-1337091041,"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.","name":"Chute Digital Valve Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteFlipFlopSplitter":{"prefab":{"prefabName":"StructureChuteFlipFlopSplitter","prefabHash":-1446854725,"desc":"A chute that toggles between two outputs","name":"Chute Flip Flop Splitter"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteInlet":{"prefab":{"prefabName":"StructureChuteInlet","prefabHash":-1469588766,"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.","name":"Chute Inlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteJunction":{"prefab":{"prefabName":"StructureChuteJunction","prefabHash":-611232514,"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.","name":"Chute (Junction)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteOutlet":{"prefab":{"prefabName":"StructureChuteOutlet","prefabHash":-1022714809,"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.","name":"Chute Outlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteOverflow":{"prefab":{"prefabName":"StructureChuteOverflow","prefabHash":225377225,"desc":"The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied.","name":"Chute Overflow"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteStraight":{"prefab":{"prefabName":"StructureChuteStraight","prefabHash":168307007,"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.","name":"Chute (Straight)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteUmbilicalFemale":{"prefab":{"prefabName":"StructureChuteUmbilicalFemale","prefabHash":-1918892177,"desc":"","name":"Umbilical Socket (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureChuteUmbilicalFemaleSide","prefabHash":-659093969,"desc":"","name":"Umbilical Socket Angle (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureChuteUmbilicalMale":{"prefab":{"prefabName":"StructureChuteUmbilicalMale","prefabHash":-958884053,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Chute)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureChuteValve":{"prefab":{"prefabName":"StructureChuteValve","prefabHash":434875271,"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.","name":"Chute Valve"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteWindow":{"prefab":{"prefabName":"StructureChuteWindow","prefabHash":-607241919,"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.","name":"Chute (Window)"},"structure":{"smallGrid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureCircuitHousing":{"prefab":{"prefabName":"StructureCircuitHousing","prefabHash":-128473777,"desc":"","name":"IC Housing"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","LineNumber":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","LineNumber":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"devicePinsLength":6,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"StructureCombustionCentrifuge":{"prefab":{"prefabName":"StructureCombustionCentrifuge","prefabHash":1238905683,"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 ","name":"Combustion Centrifuge"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"ClearMemory":"Write","Combustion":"Read","CombustionInput":"Read","CombustionLimiter":"ReadWrite","CombustionOutput":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Pressure":"Read","PressureInput":"Read","PressureOutput":"Read","RatioCarbonDioxide":"Read","RatioCarbonDioxideInput":"Read","RatioCarbonDioxideOutput":"Read","RatioHydrogen":"Read","RatioLiquidCarbonDioxide":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidHydrogen":"Read","RatioLiquidNitrogen":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"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","RatioSteamInput":"Read","RatioSteamOutput":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true}},"StructureCompositeCladdingAngled":{"prefab":{"prefabName":"StructureCompositeCladdingAngled","prefabHash":-1513030150,"desc":"","name":"Composite Cladding (Angled)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCorner":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCorner","prefabHash":-69685069,"desc":"","name":"Composite Cladding (Angled Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInner":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInner","prefabHash":-1841871763,"desc":"","name":"Composite Cladding (Angled Corner Inner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLong","prefabHash":-1417912632,"desc":"","name":"Composite Cladding (Angled Corner Inner Long)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLongL":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLongL","prefabHash":947705066,"desc":"","name":"Composite Cladding (Angled Corner Inner Long L)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerInnerLongR":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerInnerLongR","prefabHash":-1032590967,"desc":"","name":"Composite Cladding (Angled Corner Inner Long R)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerLong","prefabHash":850558385,"desc":"","name":"Composite Cladding (Long Angled Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledCornerLongR":{"prefab":{"prefabName":"StructureCompositeCladdingAngledCornerLongR","prefabHash":-348918222,"desc":"","name":"Composite Cladding (Long Angled Mirrored Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingAngledLong":{"prefab":{"prefabName":"StructureCompositeCladdingAngledLong","prefabHash":-387546514,"desc":"","name":"Composite Cladding (Long Angled)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingCylindrical":{"prefab":{"prefabName":"StructureCompositeCladdingCylindrical","prefabHash":212919006,"desc":"","name":"Composite Cladding (Cylindrical)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingCylindricalPanel":{"prefab":{"prefabName":"StructureCompositeCladdingCylindricalPanel","prefabHash":1077151132,"desc":"","name":"Composite Cladding (Cylindrical Panel)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingPanel":{"prefab":{"prefabName":"StructureCompositeCladdingPanel","prefabHash":1997436771,"desc":"","name":"Composite Cladding (Panel)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRounded":{"prefab":{"prefabName":"StructureCompositeCladdingRounded","prefabHash":-259357734,"desc":"","name":"Composite Cladding (Rounded)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRoundedCorner":{"prefab":{"prefabName":"StructureCompositeCladdingRoundedCorner","prefabHash":1951525046,"desc":"","name":"Composite Cladding (Rounded Corner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingRoundedCornerInner":{"prefab":{"prefabName":"StructureCompositeCladdingRoundedCornerInner","prefabHash":110184667,"desc":"","name":"Composite Cladding (Rounded Corner Inner)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSpherical":{"prefab":{"prefabName":"StructureCompositeCladdingSpherical","prefabHash":139107321,"desc":"","name":"Composite Cladding (Spherical)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSphericalCap":{"prefab":{"prefabName":"StructureCompositeCladdingSphericalCap","prefabHash":534213209,"desc":"","name":"Composite Cladding (Spherical Cap)"},"structure":{"smallGrid":false}},"StructureCompositeCladdingSphericalCorner":{"prefab":{"prefabName":"StructureCompositeCladdingSphericalCorner","prefabHash":1751355139,"desc":"","name":"Composite Cladding (Spherical Corner)"},"structure":{"smallGrid":false}},"StructureCompositeDoor":{"prefab":{"prefabName":"StructureCompositeDoor","prefabHash":-793837322,"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.","name":"Composite Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCompositeFloorGrating":{"prefab":{"prefabName":"StructureCompositeFloorGrating","prefabHash":324868581,"desc":"While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings.","name":"Composite Floor Grating"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating2":{"prefab":{"prefabName":"StructureCompositeFloorGrating2","prefabHash":-895027741,"desc":"","name":"Composite Floor Grating (Type 2)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating3":{"prefab":{"prefabName":"StructureCompositeFloorGrating3","prefabHash":-1113471627,"desc":"","name":"Composite Floor Grating (Type 3)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGrating4":{"prefab":{"prefabName":"StructureCompositeFloorGrating4","prefabHash":600133846,"desc":"","name":"Composite Floor Grating (Type 4)"},"structure":{"smallGrid":false}},"StructureCompositeFloorGratingOpen":{"prefab":{"prefabName":"StructureCompositeFloorGratingOpen","prefabHash":2109695912,"desc":"","name":"Composite Floor Grating Open"},"structure":{"smallGrid":false}},"StructureCompositeFloorGratingOpenRotated":{"prefab":{"prefabName":"StructureCompositeFloorGratingOpenRotated","prefabHash":882307910,"desc":"","name":"Composite Floor Grating Open Rotated"},"structure":{"smallGrid":false}},"StructureCompositeWall":{"prefab":{"prefabName":"StructureCompositeWall","prefabHash":1237302061,"desc":"Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties.","name":"Composite Wall (Type 1)"},"structure":{"smallGrid":false}},"StructureCompositeWall02":{"prefab":{"prefabName":"StructureCompositeWall02","prefabHash":718343384,"desc":"","name":"Composite Wall (Type 2)"},"structure":{"smallGrid":false}},"StructureCompositeWall03":{"prefab":{"prefabName":"StructureCompositeWall03","prefabHash":1574321230,"desc":"","name":"Composite Wall (Type 3)"},"structure":{"smallGrid":false}},"StructureCompositeWall04":{"prefab":{"prefabName":"StructureCompositeWall04","prefabHash":-1011701267,"desc":"","name":"Composite Wall (Type 4)"},"structure":{"smallGrid":false}},"StructureCompositeWindow":{"prefab":{"prefabName":"StructureCompositeWindow","prefabHash":-2060571986,"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.","name":"Composite Window"},"structure":{"smallGrid":false}},"StructureCompositeWindowIron":{"prefab":{"prefabName":"StructureCompositeWindowIron","prefabHash":-688284639,"desc":"","name":"Iron Window"},"structure":{"smallGrid":false}},"StructureComputer":{"prefab":{"prefabName":"StructureComputer","prefabHash":-626563514,"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","name":"Computer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Data Disk","typ":"DataDisk"},{"name":"Data Disk","typ":"DataDisk"},{"name":"Motherboard","typ":"Motherboard"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCondensationChamber":{"prefab":{"prefabName":"StructureCondensationChamber","prefabHash":1420719315,"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.","name":"Condensation Chamber"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCondensationValve":{"prefab":{"prefabName":"StructureCondensationValve","prefabHash":-965741795,"desc":"Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction.","name":"Condensation Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Output"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsole":{"prefab":{"prefabName":"StructureConsole","prefabHash":235638270,"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.","name":"Console"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureConsoleDual":{"prefab":{"prefabName":"StructureConsoleDual","prefabHash":-722284333,"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.","name":"Console Dual"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureConsoleLED1x2":{"prefab":{"prefabName":"StructureConsoleLED1x2","prefabHash":-53151617,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Default","1":"Percent","2":"Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleLED1x3":{"prefab":{"prefabName":"StructureConsoleLED1x3","prefabHash":-1949054743,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Default","1":"Percent","2":"Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleLED5":{"prefab":{"prefabName":"StructureConsoleLED5","prefabHash":-815193061,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Default","1":"Percent","2":"Power"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureConsoleMonitor":{"prefab":{"prefabName":"StructureConsoleMonitor","prefabHash":801677497,"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.","name":"Console Monitor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureControlChair":{"prefab":{"prefabName":"StructureControlChair","prefabHash":-1961153710,"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.","name":"Control Chair"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Entity","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureCornerLocker":{"prefab":{"prefabName":"StructureCornerLocker","prefabHash":-1968255729,"desc":"","name":"Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureCrateMount":{"prefab":{"prefabName":"StructureCrateMount","prefabHash":-733500083,"desc":"","name":"Container Mount"},"structure":{"smallGrid":true},"slots":[{"name":"Container Slot","typ":"None"}]},"StructureCryoTube":{"prefab":{"prefabName":"StructureCryoTube","prefabHash":1938254586,"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.","name":"CryoTube"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Pressure":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCryoTubeHorizontal":{"prefab":{"prefabName":"StructureCryoTubeHorizontal","prefabHash":1443059329,"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.","name":"Cryo Tube Horizontal"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Pressure":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureCryoTubeVertical":{"prefab":{"prefabName":"StructureCryoTubeVertical","prefabHash":-1381321828,"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.","name":"Cryo Tube Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Pressure":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureDaylightSensor":{"prefab":{"prefabName":"StructureDaylightSensor","prefabHash":1076425094,"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.","name":"Daylight Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Horizontal":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","SolarAngle":"Read","SolarIrradiance":"Read","Vertical":"Read"},"modes":{"0":"Default","1":"Horizontal","2":"Vertical"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDeepMiner":{"prefab":{"prefabName":"StructureDeepMiner","prefabHash":265720906,"desc":"Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s","name":"Deep Miner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDigitalValve":{"prefab":{"prefabName":"StructureDigitalValve","prefabHash":-1280984102,"desc":"The digital valve allows Stationeers to create logic-controlled valves and pipe networks.","name":"Digital Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDiode":{"prefab":{"prefabName":"StructureDiode","prefabHash":1944485013,"desc":"","name":"LED"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Color":"ReadWrite","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":true,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDiodeSlide":{"prefab":{"prefabName":"StructureDiodeSlide","prefabHash":576516101,"desc":"","name":"Diode Slide"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureDockPortSide":{"prefab":{"prefabName":"StructureDockPortSide","prefabHash":-137465079,"desc":"","name":"Dock (Port Side)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureDrinkingFountain":{"prefab":{"prefabName":"StructureDrinkingFountain","prefabHash":1968371847,"desc":"","name":""},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureElectrolyzer":{"prefab":{"prefabName":"StructureElectrolyzer","prefabHash":-1668992663,"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.","name":"Electrolyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","Combustion":"Read","CombustionInput":"Read","CombustionOutput":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidHydrogen":"Read","RatioLiquidNitrogen":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"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","RatioSteamInput":"Read","RatioSteamOutput":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElectronicsPrinter":{"prefab":{"prefabName":"StructureElectronicsPrinter","prefabHash":1307165496,"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.","name":"Electronics Printer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureElevatorLevelFront":{"prefab":{"prefabName":"StructureElevatorLevelFront","prefabHash":-827912235,"desc":"","name":"Elevator Level (Cabled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElevatorLevelIndustrial":{"prefab":{"prefabName":"StructureElevatorLevelIndustrial","prefabHash":2060648791,"desc":"","name":"Elevator Level"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureElevatorShaft":{"prefab":{"prefabName":"StructureElevatorShaft","prefabHash":826144419,"desc":"","name":"Elevator Shaft (Cabled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureElevatorShaftIndustrial":{"prefab":{"prefabName":"StructureElevatorShaftIndustrial","prefabHash":1998354978,"desc":"","name":"Elevator Shaft"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"ElevatorLevel":"ReadWrite","ElevatorSpeed":"ReadWrite","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureEmergencyButton":{"prefab":{"prefabName":"StructureEmergencyButton","prefabHash":1668452680,"desc":"Description coming.","name":"Important Button"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureEngineMountTypeA1":{"prefab":{"prefabName":"StructureEngineMountTypeA1","prefabHash":2035781224,"desc":"","name":"Engine Mount (Type A1)"},"structure":{"smallGrid":false}},"StructureEvaporationChamber":{"prefab":{"prefabName":"StructureEvaporationChamber","prefabHash":-1429782576,"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.","name":"Evaporation Chamber"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureExpansionValve":{"prefab":{"prefabName":"StructureExpansionValve","prefabHash":195298587,"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.","name":"Expansion Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureFairingTypeA1":{"prefab":{"prefabName":"StructureFairingTypeA1","prefabHash":1622567418,"desc":"","name":"Fairing (Type A1)"},"structure":{"smallGrid":false}},"StructureFairingTypeA2":{"prefab":{"prefabName":"StructureFairingTypeA2","prefabHash":-104908736,"desc":"","name":"Fairing (Type A2)"},"structure":{"smallGrid":false}},"StructureFairingTypeA3":{"prefab":{"prefabName":"StructureFairingTypeA3","prefabHash":-1900541738,"desc":"","name":"Fairing (Type A3)"},"structure":{"smallGrid":false}},"StructureFiltration":{"prefab":{"prefabName":"StructureFiltration","prefabHash":-348054045,"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","name":"Filtration"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{},"2":{}},"logicTypes":{"CombustionInput":"Read","CombustionOutput":"Read","CombustionOutput2":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureInput":"Read","PressureOutput":"Read","PressureOutput2":"Read","Ratio":"Read","RatioCarbonDioxideInput":"Read","RatioCarbonDioxideOutput":"Read","RatioCarbonDioxideOutput2":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidCarbonDioxideOutput2":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrogenOutput2":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidNitrousOxideOutput2":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidOxygenOutput2":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidPollutantOutput2":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"Read","RatioLiquidVolatilesOutput2":"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","RatioSteamInput":"Read","RatioSteamOutput":"Read","RatioSteamOutput2":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Waste"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureFlagSmall":{"prefab":{"prefabName":"StructureFlagSmall","prefabHash":-1529819532,"desc":"","name":"Small Flag"},"structure":{"smallGrid":true}},"StructureFlashingLight":{"prefab":{"prefabName":"StructureFlashingLight","prefabHash":-1535893860,"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'.","name":"Flashing Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureFlatBench":{"prefab":{"prefabName":"StructureFlatBench","prefabHash":839890807,"desc":"","name":"Bench (Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureFloorDrain":{"prefab":{"prefabName":"StructureFloorDrain","prefabHash":1048813293,"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.","name":"Passive Liquid Inlet"},"structure":{"smallGrid":true}},"StructureFrame":{"prefab":{"prefabName":"StructureFrame","prefabHash":1432512808,"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.","name":"Steel Frame"},"structure":{"smallGrid":false}},"StructureFrameCorner":{"prefab":{"prefabName":"StructureFrameCorner","prefabHash":-2112390778,"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.","name":"Steel Frame (Corner)"},"structure":{"smallGrid":false}},"StructureFrameCornerCut":{"prefab":{"prefabName":"StructureFrameCornerCut","prefabHash":271315669,"desc":"0.Mode0\n1.Mode1","name":"Steel Frame (Corner Cut)"},"structure":{"smallGrid":false}},"StructureFrameIron":{"prefab":{"prefabName":"StructureFrameIron","prefabHash":-1240951678,"desc":"","name":"Iron Frame"},"structure":{"smallGrid":false}},"StructureFrameSide":{"prefab":{"prefabName":"StructureFrameSide","prefabHash":-302420053,"desc":"More durable than the Iron Frame, steel frames also provide variations for more ornate constructions.","name":"Steel Frame (Side)"},"structure":{"smallGrid":false}},"StructureFridgeBig":{"prefab":{"prefabName":"StructureFridgeBig","prefabHash":958476921,"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.","name":"Fridge (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureFridgeSmall":{"prefab":{"prefabName":"StructureFridgeSmall","prefabHash":751887598,"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.","name":"Fridge Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureFurnace":{"prefab":{"prefabName":"StructureFurnace","prefabHash":1947944864,"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.","name":"Furnace"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Combustion":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"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","Reagents":"Read","RecipeHash":"Read","ReferenceId":"Read","Setting":"ReadWrite","Temperature":"Read","TotalMoles":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"},{"typ":"Data","role":"None"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":false,"hasOpenState":true,"hasReagents":true}},"StructureFuselageTypeA1":{"prefab":{"prefabName":"StructureFuselageTypeA1","prefabHash":1033024712,"desc":"","name":"Fuselage (Type A1)"},"structure":{"smallGrid":false}},"StructureFuselageTypeA2":{"prefab":{"prefabName":"StructureFuselageTypeA2","prefabHash":-1533287054,"desc":"","name":"Fuselage (Type A2)"},"structure":{"smallGrid":false}},"StructureFuselageTypeA4":{"prefab":{"prefabName":"StructureFuselageTypeA4","prefabHash":1308115015,"desc":"","name":"Fuselage (Type A4)"},"structure":{"smallGrid":false}},"StructureFuselageTypeC5":{"prefab":{"prefabName":"StructureFuselageTypeC5","prefabHash":147395155,"desc":"","name":"Fuselage (Type C5)"},"structure":{"smallGrid":false}},"StructureGasGenerator":{"prefab":{"prefabName":"StructureGasGenerator","prefabHash":1165997963,"desc":"","name":"Gas Fuel Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGasMixer":{"prefab":{"prefabName":"StructureGasMixer","prefabHash":2104106366,"desc":"Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%.","name":"Gas Mixer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGasSensor":{"prefab":{"prefabName":"StructureGasSensor","prefabHash":-1252983604,"desc":"Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents.","name":"Gas Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasTankStorage":{"prefab":{"prefabName":"StructureGasTankStorage","prefabHash":1632165346,"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.","name":"Gas Tank Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","Pressure":"Read","Quantity":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioNitrousOxide":"Read","RatioOxygen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","ReferenceId":"Read","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalFemale":{"prefab":{"prefabName":"StructureGasUmbilicalFemale","prefabHash":-1680477930,"desc":"","name":"Umbilical Socket (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureGasUmbilicalFemaleSide","prefabHash":-648683847,"desc":"","name":"Umbilical Socket Angle (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureGasUmbilicalMale":{"prefab":{"prefabName":"StructureGasUmbilicalMale","prefabHash":-1814939203,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGlassDoor":{"prefab":{"prefabName":"StructureGlassDoor","prefabHash":-324331872,"desc":"0.Operate\n1.Logic","name":"Glass Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGovernedGasEngine":{"prefab":{"prefabName":"StructureGovernedGasEngine","prefabHash":-214232602,"desc":"The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas.","name":"Pumped Gas Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureGroundBasedTelescope":{"prefab":{"prefabName":"StructureGroundBasedTelescope","prefabHash":-619745681,"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.","name":"Telescope"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","AlignmentError":"Read","CelestialHash":"Read","CelestialParentHash":"Read","DistanceAu":"Read","DistanceKm":"Read","Eccentricity":"Read","Error":"Read","Horizontal":"ReadWrite","HorizontalRatio":"ReadWrite","Inclination":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","OrbitPeriod":"Read","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","SemiMajorAxis":"Read","TrueAnomaly":"Read","Vertical":"ReadWrite","VerticalRatio":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureGrowLight":{"prefab":{"prefabName":"StructureGrowLight","prefabHash":-1758710260,"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. ","name":"Grow Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHarvie":{"prefab":{"prefabName":"StructureHarvie","prefabHash":958056199,"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.","name":"Harvie"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","Harvest":"Write","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Plant":"Write","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Idle","1":"Happy","2":"UnHappy","3":"Dead"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Plant"},{"name":"Export","typ":"None"},{"name":"Hand","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangeLiquidtoGas":{"prefab":{"prefabName":"StructureHeatExchangeLiquidtoGas","prefabHash":944685608,"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.","name":"Heat Exchanger - Liquid + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangerGastoGas":{"prefab":{"prefabName":"StructureHeatExchangerGastoGas","prefabHash":21266291,"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.","name":"Heat Exchanger - Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHeatExchangerLiquidtoLiquid":{"prefab":{"prefabName":"StructureHeatExchangerLiquidtoLiquid","prefabHash":-613784254,"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","name":"Heat Exchanger - Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureHorizontalAutoMiner":{"prefab":{"prefabName":"StructureHorizontalAutoMiner","prefabHash":1070427573,"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","name":"OGRE"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureHydraulicPipeBender":{"prefab":{"prefabName":"StructureHydraulicPipeBender","prefabHash":-1888248335,"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.","name":"Hydraulic Pipe Bender"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureHydroponicsStation":{"prefab":{"prefabName":"StructureHydroponicsStation","prefabHash":1441767298,"desc":"","name":"Hydroponics Station"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureHydroponicsTray":{"prefab":{"prefabName":"StructureHydroponicsTray","prefabHash":1464854517,"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.","name":"Hydroponics Tray"},"structure":{"smallGrid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}]},"StructureHydroponicsTrayData":{"prefab":{"prefabName":"StructureHydroponicsTrayData","prefabHash":-1841632400,"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.","name":"Hydroponics Device"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Combustion":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureIceCrusher":{"prefab":{"prefabName":"StructureIceCrusher","prefabHash":443849486,"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.","name":"Ice Crusher"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ImportCount":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureIgniter":{"prefab":{"prefabName":"StructureIgniter","prefabHash":1005491513,"desc":"It gets the party started. Especially if that party is an explosive gas mixture.","name":"Igniter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureInLineTankGas1x1":{"prefab":{"prefabName":"StructureInLineTankGas1x1","prefabHash":-1693382705,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Gas"},"structure":{"smallGrid":true}},"StructureInLineTankGas1x2":{"prefab":{"prefabName":"StructureInLineTankGas1x2","prefabHash":35149429,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Gas"},"structure":{"smallGrid":true}},"StructureInLineTankLiquid1x1":{"prefab":{"prefabName":"StructureInLineTankLiquid1x1","prefabHash":543645499,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Liquid"},"structure":{"smallGrid":true}},"StructureInLineTankLiquid1x2":{"prefab":{"prefabName":"StructureInLineTankLiquid1x2","prefabHash":-1183969663,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankGas1x1":{"prefab":{"prefabName":"StructureInsulatedInLineTankGas1x1","prefabHash":1818267386,"desc":"","name":"Insulated In-Line Tank Small Gas"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankGas1x2":{"prefab":{"prefabName":"StructureInsulatedInLineTankGas1x2","prefabHash":-177610944,"desc":"","name":"Insulated In-Line Tank Gas"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankLiquid1x1":{"prefab":{"prefabName":"StructureInsulatedInLineTankLiquid1x1","prefabHash":-813426145,"desc":"","name":"Insulated In-Line Tank Small Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedInLineTankLiquid1x2":{"prefab":{"prefabName":"StructureInsulatedInLineTankLiquid1x2","prefabHash":1452100517,"desc":"","name":"Insulated In-Line Tank Liquid"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCorner":{"prefab":{"prefabName":"StructureInsulatedPipeCorner","prefabHash":-1967711059,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Corner)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction","prefabHash":-92778058,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction3":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction3","prefabHash":1328210035,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction4":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction4","prefabHash":-783387184,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction5":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction5","prefabHash":-1505147578,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeCrossJunction6":{"prefab":{"prefabName":"StructureInsulatedPipeCrossJunction6","prefabHash":1061164284,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCorner":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCorner","prefabHash":1713710802,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Corner)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction","prefabHash":1926651727,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction4":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction4","prefabHash":363303270,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction5":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction5","prefabHash":1654694384,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidCrossJunction6":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidCrossJunction6","prefabHash":-72748982,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidStraight":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidStraight","prefabHash":295678685,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Straight)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeLiquidTJunction":{"prefab":{"prefabName":"StructureInsulatedPipeLiquidTJunction","prefabHash":-532384855,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeStraight":{"prefab":{"prefabName":"StructureInsulatedPipeStraight","prefabHash":2134172356,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Straight)"},"structure":{"smallGrid":true}},"StructureInsulatedPipeTJunction":{"prefab":{"prefabName":"StructureInsulatedPipeTJunction","prefabHash":-2076086215,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructureInsulatedTankConnector":{"prefab":{"prefabName":"StructureInsulatedTankConnector","prefabHash":-31273349,"desc":"","name":"Insulated Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructureInsulatedTankConnectorLiquid":{"prefab":{"prefabName":"StructureInsulatedTankConnectorLiquid","prefabHash":-1602030414,"desc":"","name":"Insulated Tank Connector Liquid"},"structure":{"smallGrid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureInteriorDoorGlass":{"prefab":{"prefabName":"StructureInteriorDoorGlass","prefabHash":-2096421875,"desc":"0.Operate\n1.Logic","name":"Interior Door Glass"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorPadded":{"prefab":{"prefabName":"StructureInteriorDoorPadded","prefabHash":847461335,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorPaddedThin":{"prefab":{"prefabName":"StructureInteriorDoorPaddedThin","prefabHash":1981698201,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded Thin"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureInteriorDoorTriangle":{"prefab":{"prefabName":"StructureInteriorDoorTriangle","prefabHash":-1182923101,"desc":"0.Operate\n1.Logic","name":"Interior Door Triangle"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureKlaxon":{"prefab":{"prefabName":"StructureKlaxon","prefabHash":-828056979,"desc":"Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output.","name":"Klaxon Speaker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLadder":{"prefab":{"prefabName":"StructureLadder","prefabHash":-415420281,"desc":"","name":"Ladder"},"structure":{"smallGrid":true}},"StructureLadderEnd":{"prefab":{"prefabName":"StructureLadderEnd","prefabHash":1541734993,"desc":"","name":"Ladder End"},"structure":{"smallGrid":true}},"StructureLargeDirectHeatExchangeGastoGas":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeGastoGas","prefabHash":-1230658883,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeDirectHeatExchangeGastoLiquid":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeGastoLiquid","prefabHash":1412338038,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefabName":"StructureLargeDirectHeatExchangeLiquidtoLiquid","prefabHash":792686502,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchange - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLargeExtendableRadiator":{"prefab":{"prefabName":"StructureLargeExtendableRadiator","prefabHash":-566775170,"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.","name":"Large Extendable Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Horizontal":"ReadWrite","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLargeHangerDoor":{"prefab":{"prefabName":"StructureLargeHangerDoor","prefabHash":-1351081801,"desc":"1 x 3 modular door piece for building hangar doors.","name":"Large Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureLargeSatelliteDish":{"prefab":{"prefabName":"StructureLargeSatelliteDish","prefabHash":1913391845,"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.","name":"Large Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","BestContactFilter":"ReadWrite","ContactTypeId":"Read","Error":"Read","Horizontal":"ReadWrite","Idle":"Read","InterrogationProgress":"Read","MinimumWattsToContact":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLaunchMount":{"prefab":{"prefabName":"StructureLaunchMount","prefabHash":-558953231,"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.","name":"Launch Mount"},"structure":{"smallGrid":false}},"StructureLightLong":{"prefab":{"prefabName":"StructureLightLong","prefabHash":797794350,"desc":"","name":"Wall Light (Long)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightLongAngled":{"prefab":{"prefabName":"StructureLightLongAngled","prefabHash":1847265835,"desc":"","name":"Wall Light (Long Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightLongWide":{"prefab":{"prefabName":"StructureLightLongWide","prefabHash":555215790,"desc":"","name":"Wall Light (Long Wide)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRound":{"prefab":{"prefabName":"StructureLightRound","prefabHash":1514476632,"desc":"Description coming.","name":"Light Round"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRoundAngled":{"prefab":{"prefabName":"StructureLightRoundAngled","prefabHash":1592905386,"desc":"Description coming.","name":"Light Round (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLightRoundSmall":{"prefab":{"prefabName":"StructureLightRoundSmall","prefabHash":1436121888,"desc":"Description coming.","name":"Light Round (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidDrain":{"prefab":{"prefabName":"StructureLiquidDrain","prefabHash":1687692899,"desc":"When connected to power and activated, it pumps liquid from a liquid network into the world.","name":"Active Liquid Outlet"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeAnalyzer":{"prefab":{"prefabName":"StructureLiquidPipeAnalyzer","prefabHash":-2113838091,"desc":"","name":"Liquid Pipe Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","NameHash":"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","Volume":"Read","VolumeOfLiquid":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeHeater":{"prefab":{"prefabName":"StructureLiquidPipeHeater","prefabHash":-287495560,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeOneWayValve":{"prefab":{"prefabName":"StructureLiquidPipeOneWayValve","prefabHash":-782453061,"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..","name":"One Way Valve (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPipeRadiator":{"prefab":{"prefabName":"StructureLiquidPipeRadiator","prefabHash":2072805863,"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.","name":"Liquid Pipe Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidPressureRegulator":{"prefab":{"prefabName":"StructureLiquidPressureRegulator","prefabHash":482248766,"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.","name":"Liquid Volume Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankBig":{"prefab":{"prefabName":"StructureLiquidTankBig","prefabHash":1098900430,"desc":"","name":"Liquid Tank Big"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankBigInsulated":{"prefab":{"prefabName":"StructureLiquidTankBigInsulated","prefabHash":-1430440215,"desc":"","name":"Insulated Liquid Tank Big"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankSmall":{"prefab":{"prefabName":"StructureLiquidTankSmall","prefabHash":1988118157,"desc":"","name":"Liquid Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankSmallInsulated":{"prefab":{"prefabName":"StructureLiquidTankSmallInsulated","prefabHash":608607718,"desc":"","name":"Insulated Liquid Tank Small"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTankStorage":{"prefab":{"prefabName":"StructureLiquidTankStorage","prefabHash":1691898022,"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.","name":"Liquid Tank Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","Pressure":"Read","Quantity":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioNitrousOxide":"Read","RatioOxygen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","ReferenceId":"Read","Temperature":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidTurboVolumePump":{"prefab":{"prefabName":"StructureLiquidTurboVolumePump","prefabHash":-1051805505,"desc":"Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Right","1":"Left"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalFemale":{"prefab":{"prefabName":"StructureLiquidUmbilicalFemale","prefabHash":1734723642,"desc":"","name":"Umbilical Socket (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalFemaleSide":{"prefab":{"prefabName":"StructureLiquidUmbilicalFemaleSide","prefabHash":1220870319,"desc":"","name":"Umbilical Socket Angle (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLiquidUmbilicalMale":{"prefab":{"prefabName":"StructureLiquidUmbilicalMale","prefabHash":-1798420047,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Liquid)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureLiquidValve":{"prefab":{"prefabName":"StructureLiquidValve","prefabHash":1849974453,"desc":"","name":"Liquid Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLiquidVolumePump":{"prefab":{"prefabName":"StructureLiquidVolumePump","prefabHash":-454028979,"desc":"","name":"Liquid Volume Pump"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLockerSmall":{"prefab":{"prefabName":"StructureLockerSmall","prefabHash":-647164662,"desc":"","name":"Locker (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicBatchReader":{"prefab":{"prefabName":"StructureLogicBatchReader","prefabHash":264413729,"desc":"","name":"Batch Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicBatchSlotReader":{"prefab":{"prefabName":"StructureLogicBatchSlotReader","prefabHash":436888930,"desc":"","name":"Batch Slot Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicBatchWriter":{"prefab":{"prefabName":"StructureLogicBatchWriter","prefabHash":1415443359,"desc":"","name":"Batch Writer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","ForceWrite":"Write","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicButton":{"prefab":{"prefabName":"StructureLogicButton","prefabHash":491845673,"desc":"","name":"Button"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Lock":"ReadWrite","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicCompare":{"prefab":{"prefabName":"StructureLogicCompare","prefabHash":-1489728908,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Compare"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"modes":{"0":"Equals","1":"Greater","2":"Less","3":"NotEquals"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicDial":{"prefab":{"prefabName":"StructureLogicDial","prefabHash":554524804,"desc":"An assignable dial with up to 1000 modes.","name":"Dial"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Mode":"ReadWrite","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicGate":{"prefab":{"prefabName":"StructureLogicGate","prefabHash":1942143074,"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.","name":"Logic Gate"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicHashGen":{"prefab":{"prefabName":"StructureLogicHashGen","prefabHash":2077593121,"desc":"","name":"Logic Hash Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicMath":{"prefab":{"prefabName":"StructureLogicMath","prefabHash":1657691323,"desc":"0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log","name":"Logic Math"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMathUnary":{"prefab":{"prefabName":"StructureLogicMathUnary","prefabHash":-1160020195,"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","name":"Math Unary"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMemory":{"prefab":{"prefabName":"StructureLogicMemory","prefabHash":-851746783,"desc":"","name":"Logic Memory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicMinMax":{"prefab":{"prefabName":"StructureLogicMinMax","prefabHash":929022276,"desc":"0.Greater\n1.Less","name":"Logic Min/Max"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"modes":{"0":"Greater","1":"Less"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicMirror":{"prefab":{"prefabName":"StructureLogicMirror","prefabHash":2096189278,"desc":"","name":"Logic Mirror"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicReader":{"prefab":{"prefabName":"StructureLogicReader","prefabHash":-345383640,"desc":"","name":"Logic Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicReagentReader":{"prefab":{"prefabName":"StructureLogicReagentReader","prefabHash":-124308857,"desc":"","name":"Reagent Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicRocketDownlink":{"prefab":{"prefabName":"StructureLogicRocketDownlink","prefabHash":876108549,"desc":"","name":"Logic Rocket Downlink"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureLogicRocketUplink":{"prefab":{"prefabName":"StructureLogicRocketUplink","prefabHash":546002924,"desc":"","name":"Logic Uplink"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSelect":{"prefab":{"prefabName":"StructureLogicSelect","prefabHash":1822736084,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Select"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"modes":{"0":"Equals","1":"Greater","2":"Less","3":"NotEquals"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSlotReader":{"prefab":{"prefabName":"StructureLogicSlotReader","prefabHash":-767867194,"desc":"","name":"Slot Reader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicSorter":{"prefab":{"prefabName":"StructureLogicSorter","prefabHash":873418029,"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.","name":"Logic Sorter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"All","1":"Any","2":"None"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Chute","role":"Output2"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"instructions":{"FilterPrefabHashEquals":{"description":"| 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":{"description":"| 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":{"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 |","typ":"SorterInstruction","value":5},"FilterSlotTypeCompare":{"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 |","typ":"SorterInstruction","value":4},"FilterSortingClassCompare":{"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 |","typ":"SorterInstruction","value":3},"LimitNextExecutionByCount":{"description":"| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |","typ":"SorterInstruction","value":6}},"memoryAccess":"ReadWrite","memorySize":32}},"StructureLogicSwitch":{"prefab":{"prefabName":"StructureLogicSwitch","prefabHash":1220484876,"desc":"","name":"Lever"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicSwitch2":{"prefab":{"prefabName":"StructureLogicSwitch2","prefabHash":321604921,"desc":"","name":"Switch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureLogicTransmitter":{"prefab":{"prefabName":"StructureLogicTransmitter","prefabHash":-693235651,"desc":"Connects to Logic Transmitter","name":"Logic Transmitter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{},"modes":{"0":"Passive","1":"Active"},"transmissionReceiver":true,"wirelessLogic":true,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicWriter":{"prefab":{"prefabName":"StructureLogicWriter","prefabHash":-1326019434,"desc":"","name":"Logic Writer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","ForceWrite":"Write","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureLogicWriterSwitch":{"prefab":{"prefabName":"StructureLogicWriterSwitch","prefabHash":-1321250424,"desc":"","name":"Logic Writer Switch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","ForceWrite":"Write","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureManualHatch":{"prefab":{"prefabName":"StructureManualHatch","prefabHash":-1808154199,"desc":"Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock.","name":"Manual Hatch"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureMediumConvectionRadiator":{"prefab":{"prefabName":"StructureMediumConvectionRadiator","prefabHash":-1918215845,"desc":"A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumConvectionRadiatorLiquid":{"prefab":{"prefabName":"StructureMediumConvectionRadiatorLiquid","prefabHash":-1169014183,"desc":"A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumHangerDoor":{"prefab":{"prefabName":"StructureMediumHangerDoor","prefabHash":-566348148,"desc":"1 x 2 modular door piece for building hangar doors.","name":"Medium Hangar Door"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Idle":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureMediumRadiator":{"prefab":{"prefabName":"StructureMediumRadiator","prefabHash":-975966237,"desc":"A stand-alone radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRadiatorLiquid":{"prefab":{"prefabName":"StructureMediumRadiatorLiquid","prefabHash":-1141760613,"desc":"A stand-alone liquid radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRocketGasFuelTank":{"prefab":{"prefabName":"StructureMediumRocketGasFuelTank","prefabHash":-1093860567,"desc":"","name":"Gas Capsule Tank Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Output"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMediumRocketLiquidFuelTank":{"prefab":{"prefabName":"StructureMediumRocketLiquidFuelTank","prefabHash":1143639539,"desc":"","name":"Liquid Capsule Tank Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"Output"},{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureMotionSensor":{"prefab":{"prefabName":"StructureMotionSensor","prefabHash":-1713470563,"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.","name":"Motion Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureNitrolyzer":{"prefab":{"prefabName":"StructureNitrolyzer","prefabHash":1898243702,"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.","name":"Nitrolyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","Combustion":"Read","CombustionInput":"Read","CombustionInput2":"Read","CombustionOutput":"Read","Error":"Read","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","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","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideInput2":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidHydrogen":"Read","RatioLiquidNitrogen":"Read","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenInput2":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideInput2":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenInput2":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantInput2":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesInput2":"Read","RatioLiquidVolatilesOutput":"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","RatioSteamInput":"Read","RatioSteamInput2":"Read","RatioSteamOutput":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"devicePinsLength":2,"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureOccupancySensor":{"prefab":{"prefabName":"StructureOccupancySensor","prefabHash":322782515,"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.","name":"Occupancy Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"Read","NameHash":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureOverheadShortCornerLocker":{"prefab":{"prefabName":"StructureOverheadShortCornerLocker","prefabHash":-1794932560,"desc":"","name":"Overhead Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureOverheadShortLocker":{"prefab":{"prefabName":"StructureOverheadShortLocker","prefabHash":1468249454,"desc":"","name":"Overhead Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePassiveLargeRadiatorGas":{"prefab":{"prefabName":"StructurePassiveLargeRadiatorGas","prefabHash":2066977095,"desc":"Has been replaced by Medium Convection Radiator.","name":"Medium Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveLargeRadiatorLiquid":{"prefab":{"prefabName":"StructurePassiveLargeRadiatorLiquid","prefabHash":24786172,"desc":"Has been replaced by Medium Convection Radiator Liquid.","name":"Medium Convection Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveLiquidDrain":{"prefab":{"prefabName":"StructurePassiveLiquidDrain","prefabHash":1812364811,"desc":"Moves liquids from a pipe network to the world atmosphere.","name":"Passive Liquid Drain"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassiveVent":{"prefab":{"prefabName":"StructurePassiveVent","prefabHash":335498166,"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. ","name":"Passive Vent"},"structure":{"smallGrid":true}},"StructurePassiveVentInsulated":{"prefab":{"prefabName":"StructurePassiveVentInsulated","prefabHash":1363077139,"desc":"","name":"Insulated Passive Vent"},"structure":{"smallGrid":true}},"StructurePassthroughHeatExchangerGasToGas":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerGasToGas","prefabHash":-1674187440,"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.","name":"CounterFlow Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Output2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassthroughHeatExchangerGasToLiquid":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerGasToLiquid","prefabHash":1928991265,"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.","name":"CounterFlow Heat Exchanger - Gas + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePassthroughHeatExchangerLiquidToLiquid":{"prefab":{"prefabName":"StructurePassthroughHeatExchangerLiquidToLiquid","prefabHash":-1472829583,"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.","name":"CounterFlow Heat Exchanger - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePictureFrameThickLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThickLandscapeLarge","prefabHash":-1434523206,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThickLandscapeSmall","prefabHash":-2041566697,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThickMountLandscapeLarge","prefabHash":950004659,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThickMountLandscapeSmall","prefabHash":347154462,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThickMountPortraitLarge","prefabHash":-1459641358,"desc":"","name":"Picture Frame Thick Mount Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickMountPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThickMountPortraitSmall","prefabHash":-2066653089,"desc":"","name":"Picture Frame Thick Mount Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThickPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThickPortraitLarge","prefabHash":-1686949570,"desc":"","name":"Picture Frame Thick Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThickPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThickPortraitSmall","prefabHash":-1218579821,"desc":"","name":"Picture Frame Thick Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThinLandscapeLarge","prefabHash":-1418288625,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThinLandscapeSmall","prefabHash":-2024250974,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountLandscapeLarge":{"prefab":{"prefabName":"StructurePictureFrameThinMountLandscapeLarge","prefabHash":-1146760430,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountLandscapeSmall":{"prefab":{"prefabName":"StructurePictureFrameThinMountLandscapeSmall","prefabHash":-1752493889,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThinMountPortraitLarge","prefabHash":1094895077,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinMountPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThinMountPortraitSmall","prefabHash":1835796040,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"smallGrid":true}},"StructurePictureFrameThinPortraitLarge":{"prefab":{"prefabName":"StructurePictureFrameThinPortraitLarge","prefabHash":1212777087,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"smallGrid":true}},"StructurePictureFrameThinPortraitSmall":{"prefab":{"prefabName":"StructurePictureFrameThinPortraitSmall","prefabHash":1684488658,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"smallGrid":true}},"StructurePipeAnalysizer":{"prefab":{"prefabName":"StructurePipeAnalysizer","prefabHash":435685051,"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.","name":"Pipe Analyzer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","NameHash":"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","Volume":"Read","VolumeOfLiquid":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePipeCorner":{"prefab":{"prefabName":"StructurePipeCorner","prefabHash":-1785673561,"desc":"You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Corner)"},"structure":{"smallGrid":true}},"StructurePipeCowl":{"prefab":{"prefabName":"StructurePipeCowl","prefabHash":465816159,"desc":"","name":"Pipe Cowl"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction":{"prefab":{"prefabName":"StructurePipeCrossJunction","prefabHash":-1405295588,"desc":"You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction3":{"prefab":{"prefabName":"StructurePipeCrossJunction3","prefabHash":2038427184,"desc":"You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction4":{"prefab":{"prefabName":"StructurePipeCrossJunction4","prefabHash":-417629293,"desc":"You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction5":{"prefab":{"prefabName":"StructurePipeCrossJunction5","prefabHash":-1877193979,"desc":"You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeCrossJunction6":{"prefab":{"prefabName":"StructurePipeCrossJunction6","prefabHash":152378047,"desc":"You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeHeater":{"prefab":{"prefabName":"StructurePipeHeater","prefabHash":-419758574,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePipeIgniter":{"prefab":{"prefabName":"StructurePipeIgniter","prefabHash":1286441942,"desc":"Ignites the atmosphere inside the attached pipe network.","name":"Pipe Igniter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeInsulatedLiquidCrossJunction":{"prefab":{"prefabName":"StructurePipeInsulatedLiquidCrossJunction","prefabHash":-2068497073,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeLabel":{"prefab":{"prefabName":"StructurePipeLabel","prefabHash":-999721119,"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.","name":"Pipe Label"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeLiquidCorner":{"prefab":{"prefabName":"StructurePipeLiquidCorner","prefabHash":-1856720921,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Corner)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction","prefabHash":1848735691,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Cross Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction3":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction3","prefabHash":1628087508,"desc":"You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (3-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction4":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction4","prefabHash":-9555593,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (4-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction5":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction5","prefabHash":-2006384159,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (5-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidCrossJunction6":{"prefab":{"prefabName":"StructurePipeLiquidCrossJunction6","prefabHash":291524699,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (6-Way Junction)"},"structure":{"smallGrid":true}},"StructurePipeLiquidStraight":{"prefab":{"prefabName":"StructurePipeLiquidStraight","prefabHash":667597982,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Straight)"},"structure":{"smallGrid":true}},"StructurePipeLiquidTJunction":{"prefab":{"prefabName":"StructurePipeLiquidTJunction","prefabHash":262616717,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructurePipeMeter":{"prefab":{"prefabName":"StructurePipeMeter","prefabHash":-1798362329,"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\"","name":"Pipe Meter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeOneWayValve":{"prefab":{"prefabName":"StructurePipeOneWayValve","prefabHash":1580412404,"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","name":"One Way Valve (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeOrgan":{"prefab":{"prefabName":"StructurePipeOrgan","prefabHash":1305252611,"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.","name":"Pipe Organ"},"structure":{"smallGrid":true}},"StructurePipeRadiator":{"prefab":{"prefabName":"StructurePipeRadiator","prefabHash":1696603168,"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.","name":"Pipe Convection Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeRadiatorFlat":{"prefab":{"prefabName":"StructurePipeRadiatorFlat","prefabHash":-399883995,"desc":"A pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeRadiatorFlatLiquid":{"prefab":{"prefabName":"StructurePipeRadiatorFlatLiquid","prefabHash":2024754523,"desc":"A liquid pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePipeStraight":{"prefab":{"prefabName":"StructurePipeStraight","prefabHash":73728932,"desc":"You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Straight)"},"structure":{"smallGrid":true}},"StructurePipeTJunction":{"prefab":{"prefabName":"StructurePipeTJunction","prefabHash":-913817472,"desc":"You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (T Junction)"},"structure":{"smallGrid":true}},"StructurePlanter":{"prefab":{"prefabName":"StructurePlanter","prefabHash":-1125641329,"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).","name":"Planter"},"structure":{"smallGrid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Plant","typ":"Plant"}]},"StructurePlatformLadderOpen":{"prefab":{"prefabName":"StructurePlatformLadderOpen","prefabHash":1559586682,"desc":"","name":"Ladder Platform"},"structure":{"smallGrid":false}},"StructurePlinth":{"prefab":{"prefabName":"StructurePlinth","prefabHash":989835703,"desc":"","name":"Plinth"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructurePortablesConnector":{"prefab":{"prefabName":"StructurePortablesConnector","prefabHash":-899013427,"desc":"","name":"Portables Connector"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Maximum":"Read","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"}],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePowerConnector":{"prefab":{"prefabName":"StructurePowerConnector","prefabHash":-782951720,"desc":"Attaches a Kit (Portable Generator) to a power network.","name":"Power Connector"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Portable Slot","typ":"None"}],"device":{"connectionList":[{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructurePowerTransmitter":{"prefab":{"prefabName":"StructurePowerTransmitter","prefabHash":-65087121,"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.","name":"Microwave Power Transmitter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Error":"Read","Horizontal":"ReadWrite","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerTransmitterOmni":{"prefab":{"prefabName":"StructurePowerTransmitterOmni","prefabHash":-327468845,"desc":"","name":"Power Transmitter Omni"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerTransmitterReceiver":{"prefab":{"prefabName":"StructurePowerTransmitterReceiver","prefabHash":1195820278,"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","name":"Microwave Power Receiver"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Error":"Read","Horizontal":"ReadWrite","Mode":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":true,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalFemale":{"prefab":{"prefabName":"StructurePowerUmbilicalFemale","prefabHash":101488029,"desc":"","name":"Umbilical Socket (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalFemaleSide":{"prefab":{"prefabName":"StructurePowerUmbilicalFemaleSide","prefabHash":1922506192,"desc":"","name":"Umbilical Socket Angle (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePowerUmbilicalMale":{"prefab":{"prefabName":"StructurePowerUmbilicalMale","prefabHash":1529453938,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Power)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructurePoweredVent":{"prefab":{"prefabName":"StructurePoweredVent","prefabHash":938836756,"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.","name":"Powered Vent"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureExternal":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePoweredVentLarge":{"prefab":{"prefabName":"StructurePoweredVentLarge","prefabHash":-785498334,"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.","name":"Powered Vent Large"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","PressureExternal":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressurantValve":{"prefab":{"prefabName":"StructurePressurantValve","prefabHash":23052817,"desc":"Pumps gas into a liquid pipe in order to raise the pressure","name":"Pressurant Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressureFedGasEngine":{"prefab":{"prefabName":"StructurePressureFedGasEngine","prefabHash":-624011170,"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.","name":"Pressure Fed Gas Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressureFedLiquidEngine":{"prefab":{"prefabName":"StructurePressureFedLiquidEngine","prefabHash":379750958,"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.","name":"Pressure Fed Liquid Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateLarge":{"prefab":{"prefabName":"StructurePressurePlateLarge","prefabHash":-2008706143,"desc":"","name":"Trigger Plate (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateMedium":{"prefab":{"prefabName":"StructurePressurePlateMedium","prefabHash":1269458680,"desc":"","name":"Trigger Plate (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressurePlateSmall":{"prefab":{"prefabName":"StructurePressurePlateSmall","prefabHash":-1536471028,"desc":"","name":"Trigger Plate (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read","Setting":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePressureRegulator":{"prefab":{"prefabName":"StructurePressureRegulator","prefabHash":209854039,"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.","name":"Pressure Regulator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureProximitySensor":{"prefab":{"prefabName":"StructureProximitySensor","prefabHash":568800213,"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.","name":"Proximity Sensor"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"Read","NameHash":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructurePumpedLiquidEngine":{"prefab":{"prefabName":"StructurePumpedLiquidEngine","prefabHash":-2031440019,"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","name":"Pumped Liquid Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructurePurgeValve":{"prefab":{"prefabName":"StructurePurgeValve","prefabHash":-737232128,"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.","name":"Purge Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRailing":{"prefab":{"prefabName":"StructureRailing","prefabHash":-1756913871,"desc":"\"Safety third.\"","name":"Railing Industrial (Type 1)"},"structure":{"smallGrid":false}},"StructureRecycler":{"prefab":{"prefabName":"StructureRecycler","prefabHash":-1633947337,"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.","name":"Recycler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureRefrigeratedVendingMachine":{"prefab":{"prefabName":"StructureRefrigeratedVendingMachine","prefabHash":-1577831321,"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. ","name":"Refrigerated Vending Machine"},"structure":{"smallGrid":true},"logic":{"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":{"Activate":"ReadWrite","ClearMemory":"Write","Combustion":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureReinforcedCompositeWindow":{"prefab":{"prefabName":"StructureReinforcedCompositeWindow","prefabHash":2027713511,"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.","name":"Reinforced Window (Composite)"},"structure":{"smallGrid":false}},"StructureReinforcedCompositeWindowSteel":{"prefab":{"prefabName":"StructureReinforcedCompositeWindowSteel","prefabHash":-816454272,"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.","name":"Reinforced Window (Composite Steel)"},"structure":{"smallGrid":false}},"StructureReinforcedWallPaddedWindow":{"prefab":{"prefabName":"StructureReinforcedWallPaddedWindow","prefabHash":1939061729,"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.","name":"Reinforced Window (Padded)"},"structure":{"smallGrid":false}},"StructureReinforcedWallPaddedWindowThin":{"prefab":{"prefabName":"StructureReinforcedWallPaddedWindowThin","prefabHash":158502707,"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.","name":"Reinforced Window (Thin)"},"structure":{"smallGrid":false}},"StructureRocketAvionics":{"prefab":{"prefabName":"StructureRocketAvionics","prefabHash":808389066,"desc":"","name":"Rocket Avionics"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"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","NameHash":"Read","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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":true}},"StructureRocketCelestialTracker":{"prefab":{"prefabName":"StructureRocketCelestialTracker","prefabHash":997453927,"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.","name":"Rocket Celestial Tracker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"CelestialHash":"Read","Error":"Read","Horizontal":"Read","Index":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Vertical":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"instructions":{"BodyOrientation":{"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 |","typ":"CelestialTracking","value":1}},"memoryAccess":"Read","memorySize":12}},"StructureRocketCircuitHousing":{"prefab":{"prefabName":"StructureRocketCircuitHousing","prefabHash":150135861,"desc":"","name":"Rocket Circuit Housing"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","LineNumber":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","LineNumber":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"}],"devicePinsLength":6,"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false},"memory":{"memoryAccess":"ReadWrite","memorySize":0}},"StructureRocketEngineTiny":{"prefab":{"prefabName":"StructureRocketEngineTiny","prefabHash":178472613,"desc":"","name":"Rocket Engine (Tiny)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketManufactory":{"prefab":{"prefabName":"StructureRocketManufactory","prefabHash":1781051034,"desc":"","name":"Rocket Manufactory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureRocketMiner":{"prefab":{"prefabName":"StructureRocketMiner","prefabHash":-2087223687,"desc":"Gathers available resources at the rocket's current space location.","name":"Rocket Miner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"ClearMemory":"Write","DrillCondition":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Export","typ":"None"},{"name":"Drill Head Slot","typ":"DrillHead"}],"device":{"connectionList":[{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketScanner":{"prefab":{"prefabName":"StructureRocketScanner","prefabHash":2014252591,"desc":"","name":"Rocket Scanner"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Scanner Head Slot","typ":"ScanningHead"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRocketTower":{"prefab":{"prefabName":"StructureRocketTower","prefabHash":-654619479,"desc":"","name":"Launch Tower"},"structure":{"smallGrid":false}},"StructureRocketTransformerSmall":{"prefab":{"prefabName":"StructureRocketTransformerSmall","prefabHash":518925193,"desc":"","name":"Transformer Small (Rocket)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureRover":{"prefab":{"prefabName":"StructureRover","prefabHash":806513938,"desc":"","name":"Rover Frame"},"structure":{"smallGrid":false}},"StructureSDBHopper":{"prefab":{"prefabName":"StructureSDBHopper","prefabHash":-1875856925,"desc":"","name":"SDB Hopper"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSDBHopperAdvanced":{"prefab":{"prefabName":"StructureSDBHopperAdvanced","prefabHash":467225612,"desc":"","name":"SDB Hopper Advanced"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSDBSilo":{"prefab":{"prefabName":"StructureSDBSilo","prefabHash":1155865682,"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.","name":"SDB Silo"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSatelliteDish":{"prefab":{"prefabName":"StructureSatelliteDish","prefabHash":439026183,"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.","name":"Medium Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","BestContactFilter":"ReadWrite","ContactTypeId":"Read","Error":"Read","Horizontal":"ReadWrite","Idle":"Read","InterrogationProgress":"Read","MinimumWattsToContact":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSecurityPrinter":{"prefab":{"prefabName":"StructureSecurityPrinter","prefabHash":-641491515,"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","name":"Security Printer"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureShelf":{"prefab":{"prefabName":"StructureShelf","prefabHash":1172114950,"desc":"","name":"Shelf"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"StructureShelfMedium":{"prefab":{"prefabName":"StructureShelfMedium","prefabHash":182006674,"desc":"A shelf for putting things on, so you can see them.","name":"Shelf Medium"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"}},"logicTypes":{"NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShortCornerLocker":{"prefab":{"prefabName":"StructureShortCornerLocker","prefabHash":1330754486,"desc":"","name":"Short Corner Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShortLocker":{"prefab":{"prefabName":"StructureShortLocker","prefabHash":-554553467,"desc":"","name":"Short Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShower":{"prefab":{"prefabName":"StructureShower","prefabHash":-775128944,"desc":"","name":"Shower"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Maximum":"Read","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureShowerPowered":{"prefab":{"prefabName":"StructureShowerPowered","prefabHash":-1081797501,"desc":"","name":"Shower (Powered)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSign1x1":{"prefab":{"prefabName":"StructureSign1x1","prefabHash":879058460,"desc":"","name":"Sign 1x1"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSign2x1":{"prefab":{"prefabName":"StructureSign2x1","prefabHash":908320837,"desc":"","name":"Sign 2x1"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSingleBed":{"prefab":{"prefabName":"StructureSingleBed","prefabHash":-492611,"desc":"Description coming.","name":"Single Bed"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSleeper":{"prefab":{"prefabName":"StructureSleeper","prefabHash":-1467449329,"desc":"","name":"Sleeper"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperLeft":{"prefab":{"prefabName":"StructureSleeperLeft","prefabHash":1213495833,"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.","name":"Sleeper Left"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Safe","1":"Unsafe","2":"Unpowered"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperRight":{"prefab":{"prefabName":"StructureSleeperRight","prefabHash":-1812330717,"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.","name":"Sleeper Right"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Safe","1":"Unsafe","2":"Unpowered"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperVertical":{"prefab":{"prefabName":"StructureSleeperVertical","prefabHash":-1300059018,"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.","name":"Sleeper Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","EntityState":"Read","Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Safe","1":"Unsafe","2":"Unpowered"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSleeperVerticalDroid":{"prefab":{"prefabName":"StructureSleeperVerticalDroid","prefabHash":1382098999,"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.","name":"Droid Sleeper Vertical"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"StructureSmallDirectHeatExchangeGastoGas":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeGastoGas","prefabHash":1310303582,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Gas + Gas"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallDirectHeatExchangeLiquidtoGas":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeLiquidtoGas","prefabHash":1825212016,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Gas "},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefabName":"StructureSmallDirectHeatExchangeLiquidtoLiquid","prefabHash":-507770416,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Liquid"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSmallSatelliteDish":{"prefab":{"prefabName":"StructureSmallSatelliteDish","prefabHash":-2138748650,"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.","name":"Small Satellite Dish"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","BestContactFilter":"ReadWrite","ContactTypeId":"Read","Error":"Read","Horizontal":"ReadWrite","Idle":"Read","InterrogationProgress":"Read","MinimumWattsToContact":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSmallTableBacklessDouble":{"prefab":{"prefabName":"StructureSmallTableBacklessDouble","prefabHash":-1633000411,"desc":"","name":"Small (Table Backless Double)"},"structure":{"smallGrid":true}},"StructureSmallTableBacklessSingle":{"prefab":{"prefabName":"StructureSmallTableBacklessSingle","prefabHash":-1897221677,"desc":"","name":"Small (Table Backless Single)"},"structure":{"smallGrid":true}},"StructureSmallTableDinnerSingle":{"prefab":{"prefabName":"StructureSmallTableDinnerSingle","prefabHash":1260651529,"desc":"","name":"Small (Table Dinner Single)"},"structure":{"smallGrid":true}},"StructureSmallTableRectangleDouble":{"prefab":{"prefabName":"StructureSmallTableRectangleDouble","prefabHash":-660451023,"desc":"","name":"Small (Table Rectangle Double)"},"structure":{"smallGrid":true}},"StructureSmallTableRectangleSingle":{"prefab":{"prefabName":"StructureSmallTableRectangleSingle","prefabHash":-924678969,"desc":"","name":"Small (Table Rectangle Single)"},"structure":{"smallGrid":true}},"StructureSmallTableThickDouble":{"prefab":{"prefabName":"StructureSmallTableThickDouble","prefabHash":-19246131,"desc":"","name":"Small (Table Thick Double)"},"structure":{"smallGrid":true}},"StructureSmallTableThickSingle":{"prefab":{"prefabName":"StructureSmallTableThickSingle","prefabHash":-291862981,"desc":"","name":"Small Table (Thick Single)"},"structure":{"smallGrid":true}},"StructureSolarPanel":{"prefab":{"prefabName":"StructureSolarPanel","prefabHash":-2045627372,"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.","name":"Solar Panel"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanel45":{"prefab":{"prefabName":"StructureSolarPanel45","prefabHash":-1554349863,"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.","name":"Solar Panel (Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanel45Reinforced":{"prefab":{"prefabName":"StructureSolarPanel45Reinforced","prefabHash":930865127,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Angled)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelDual":{"prefab":{"prefabName":"StructureSolarPanelDual","prefabHash":-539224550,"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.","name":"Solar Panel (Dual)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelDualReinforced":{"prefab":{"prefabName":"StructureSolarPanelDualReinforced","prefabHash":-1545574413,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Dual)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelFlat":{"prefab":{"prefabName":"StructureSolarPanelFlat","prefabHash":1968102968,"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.","name":"Solar Panel (Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelFlatReinforced":{"prefab":{"prefabName":"StructureSolarPanelFlatReinforced","prefabHash":1697196770,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Flat)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolarPanelReinforced":{"prefab":{"prefabName":"StructureSolarPanelReinforced","prefabHash":-934345724,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Charge":"Read","Horizontal":"ReadWrite","Maximum":"Read","NameHash":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Vertical":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureSolidFuelGenerator":{"prefab":{"prefabName":"StructureSolidFuelGenerator","prefabHash":813146305,"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.","name":"Generator (Solid Fuel)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"ClearMemory":"Write","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"modes":{"0":"Not Generating","1":"Generating"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Input","typ":"Ore"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureSorter":{"prefab":{"prefabName":"StructureSorter","prefabHash":-1009150565,"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.","name":"Sorter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Output":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Split","1":"Filter","2":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Chute","role":"Output2"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStacker":{"prefab":{"prefabName":"StructureStacker","prefabHash":-2020231820,"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.","name":"Stacker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Output":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Automatic","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Processing","typ":"None"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStackerReverse":{"prefab":{"prefabName":"StructureStackerReverse","prefabHash":1585641623,"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.","name":"Stacker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Output":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Automatic","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStairs4x2":{"prefab":{"prefabName":"StructureStairs4x2","prefabHash":1405018945,"desc":"","name":"Stairs"},"structure":{"smallGrid":false}},"StructureStairs4x2RailL":{"prefab":{"prefabName":"StructureStairs4x2RailL","prefabHash":155214029,"desc":"","name":"Stairs with Rail (Left)"},"structure":{"smallGrid":false}},"StructureStairs4x2RailR":{"prefab":{"prefabName":"StructureStairs4x2RailR","prefabHash":-212902482,"desc":"","name":"Stairs with Rail (Right)"},"structure":{"smallGrid":false}},"StructureStairs4x2Rails":{"prefab":{"prefabName":"StructureStairs4x2Rails","prefabHash":-1088008720,"desc":"","name":"Stairs with Rails"},"structure":{"smallGrid":false}},"StructureStairwellBackLeft":{"prefab":{"prefabName":"StructureStairwellBackLeft","prefabHash":505924160,"desc":"","name":"Stairwell (Back Left)"},"structure":{"smallGrid":false}},"StructureStairwellBackPassthrough":{"prefab":{"prefabName":"StructureStairwellBackPassthrough","prefabHash":-862048392,"desc":"","name":"Stairwell (Back Passthrough)"},"structure":{"smallGrid":false}},"StructureStairwellBackRight":{"prefab":{"prefabName":"StructureStairwellBackRight","prefabHash":-2128896573,"desc":"","name":"Stairwell (Back Right)"},"structure":{"smallGrid":false}},"StructureStairwellFrontLeft":{"prefab":{"prefabName":"StructureStairwellFrontLeft","prefabHash":-37454456,"desc":"","name":"Stairwell (Front Left)"},"structure":{"smallGrid":false}},"StructureStairwellFrontPassthrough":{"prefab":{"prefabName":"StructureStairwellFrontPassthrough","prefabHash":-1625452928,"desc":"","name":"Stairwell (Front Passthrough)"},"structure":{"smallGrid":false}},"StructureStairwellFrontRight":{"prefab":{"prefabName":"StructureStairwellFrontRight","prefabHash":340210934,"desc":"","name":"Stairwell (Front Right)"},"structure":{"smallGrid":false}},"StructureStairwellNoDoors":{"prefab":{"prefabName":"StructureStairwellNoDoors","prefabHash":2049879875,"desc":"","name":"Stairwell (No Doors)"},"structure":{"smallGrid":false}},"StructureStirlingEngine":{"prefab":{"prefabName":"StructureStirlingEngine","prefabHash":-260316435,"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.","name":"Stirling Engine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"Combustion":"Read","EnvironmentEfficiency":"Read","Error":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureStorageLocker":{"prefab":{"prefabName":"StructureStorageLocker","prefabHash":-793623899,"desc":"","name":"Locker"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"},"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"},"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"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":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"},{"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"}],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureSuitStorage":{"prefab":{"prefabName":"StructureSuitStorage","prefabHash":255034731,"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.","name":"Suit Storage"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Error":"Read","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Helmet","typ":"Helmet"},{"name":"Suit","typ":"Suit"},{"name":"Back","typ":"Back"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTankBig":{"prefab":{"prefabName":"StructureTankBig","prefabHash":-1606848156,"desc":"","name":"Large Tank"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankBigInsulated":{"prefab":{"prefabName":"StructureTankBigInsulated","prefabHash":1280378227,"desc":"","name":"Tank Big (Insulated)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankConnector":{"prefab":{"prefabName":"StructureTankConnector","prefabHash":-1276379454,"desc":"Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network.","name":"Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"","typ":"None"}]},"StructureTankConnectorLiquid":{"prefab":{"prefabName":"StructureTankConnectorLiquid","prefabHash":1331802518,"desc":"These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network.","name":"Liquid Tank Connector"},"structure":{"smallGrid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureTankSmall":{"prefab":{"prefabName":"StructureTankSmall","prefabHash":1013514688,"desc":"","name":"Small Tank"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallAir":{"prefab":{"prefabName":"StructureTankSmallAir","prefabHash":955744474,"desc":"","name":"Small Tank (Air)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallFuel":{"prefab":{"prefabName":"StructureTankSmallFuel","prefabHash":2102454415,"desc":"","name":"Small Tank (Fuel)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureTankSmallInsulated":{"prefab":{"prefabName":"StructureTankSmallInsulated","prefabHash":272136332,"desc":"","name":"Tank Small (Insulated)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Combustion":"Read","Maximum":"Read","NameHash":"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"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":true,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":true,"hasReagents":false}},"StructureToolManufactory":{"prefab":{"prefabName":"StructureToolManufactory","prefabHash":-465741100,"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.","name":"Tool Manufactory"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{},"1":{}},"logicTypes":{"Activate":"ReadWrite","ClearMemory":"Write","CompletionRatio":"Read","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","Reagents":"Read","RecipeHash":"ReadWrite","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":true,"hasReagents":true},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memoryAccess":"ReadWrite","memorySize":64}},"StructureTorpedoRack":{"prefab":{"prefabName":"StructureTorpedoRack","prefabHash":1473807953,"desc":"","name":"Torpedo Rack"},"structure":{"smallGrid":true},"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"}]},"StructureTraderWaypoint":{"prefab":{"prefabName":"StructureTraderWaypoint","prefabHash":1570931620,"desc":"","name":"Trader Waypoint"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformer":{"prefab":{"prefabName":"StructureTransformer","prefabHash":-1423212473,"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.","name":"Transformer (Large)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerMedium":{"prefab":{"prefabName":"StructureTransformerMedium","prefabHash":-1065725831,"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.","name":"Transformer (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Input"},{"typ":"PowerAndData","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerMediumReversed":{"prefab":{"prefabName":"StructureTransformerMediumReversed","prefabHash":833912764,"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.","name":"Transformer Reversed (Medium)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerSmall":{"prefab":{"prefabName":"StructureTransformerSmall","prefabHash":-890946730,"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.","name":"Transformer (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTransformerSmallReversed":{"prefab":{"prefabName":"StructureTransformerSmallReversed","prefabHash":1054059374,"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.","name":"Transformer Reversed (Small)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureTurbineGenerator":{"prefab":{"prefabName":"StructureTurbineGenerator","prefabHash":1282191063,"desc":"","name":"Turbine Generator"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureTurboVolumePump":{"prefab":{"prefabName":"StructureTurboVolumePump","prefabHash":1310794736,"desc":"Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Gas)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Right","1":"Left"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureUnloader":{"prefab":{"prefabName":"StructureUnloader","prefabHash":750118160,"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.","name":"Unloader"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Output":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"Automatic","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureUprightWindTurbine":{"prefab":{"prefabName":"StructureUprightWindTurbine","prefabHash":1622183451,"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.","name":"Upright Wind Turbine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureValve":{"prefab":{"prefabName":"StructureValve","prefabHash":-692036078,"desc":"","name":"Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Maximum":"Read","NameHash":"Read","On":"ReadWrite","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"None"},{"typ":"Pipe","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureVendingMachine":{"prefab":{"prefabName":"StructureVendingMachine","prefabHash":-443130773,"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.","name":"Vending Machine"},"structure":{"smallGrid":true},"logic":{"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":{"Activate":"ReadWrite","ClearMemory":"Write","Error":"Read","ExportCount":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Quantity":"Read","Ratio":"Read","ReferenceId":"Read","RequestHash":"ReadWrite","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"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"}],"device":{"connectionList":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureVolumePump":{"prefab":{"prefabName":"StructureVolumePump","prefabHash":-321403609,"desc":"The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks.","name":"Volume Pump"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallArch":{"prefab":{"prefabName":"StructureWallArch","prefabHash":-858143148,"desc":"","name":"Wall (Arch)"},"structure":{"smallGrid":false}},"StructureWallArchArrow":{"prefab":{"prefabName":"StructureWallArchArrow","prefabHash":1649708822,"desc":"","name":"Wall (Arch Arrow)"},"structure":{"smallGrid":false}},"StructureWallArchCornerRound":{"prefab":{"prefabName":"StructureWallArchCornerRound","prefabHash":1794588890,"desc":"","name":"Wall (Arch Corner Round)"},"structure":{"smallGrid":true}},"StructureWallArchCornerSquare":{"prefab":{"prefabName":"StructureWallArchCornerSquare","prefabHash":-1963016580,"desc":"","name":"Wall (Arch Corner Square)"},"structure":{"smallGrid":true}},"StructureWallArchCornerTriangle":{"prefab":{"prefabName":"StructureWallArchCornerTriangle","prefabHash":1281911841,"desc":"","name":"Wall (Arch Corner Triangle)"},"structure":{"smallGrid":true}},"StructureWallArchPlating":{"prefab":{"prefabName":"StructureWallArchPlating","prefabHash":1182510648,"desc":"","name":"Wall (Arch Plating)"},"structure":{"smallGrid":false}},"StructureWallArchTwoTone":{"prefab":{"prefabName":"StructureWallArchTwoTone","prefabHash":782529714,"desc":"","name":"Wall (Arch Two Tone)"},"structure":{"smallGrid":false}},"StructureWallCooler":{"prefab":{"prefabName":"StructureWallCooler","prefabHash":-739292323,"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.","name":"Wall Cooler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"Pipe","role":"None"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallFlat":{"prefab":{"prefabName":"StructureWallFlat","prefabHash":1635864154,"desc":"","name":"Wall (Flat)"},"structure":{"smallGrid":false}},"StructureWallFlatCornerRound":{"prefab":{"prefabName":"StructureWallFlatCornerRound","prefabHash":898708250,"desc":"","name":"Wall (Flat Corner Round)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerSquare":{"prefab":{"prefabName":"StructureWallFlatCornerSquare","prefabHash":298130111,"desc":"","name":"Wall (Flat Corner Square)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerTriangle":{"prefab":{"prefabName":"StructureWallFlatCornerTriangle","prefabHash":2097419366,"desc":"","name":"Wall (Flat Corner Triangle)"},"structure":{"smallGrid":true}},"StructureWallFlatCornerTriangleFlat":{"prefab":{"prefabName":"StructureWallFlatCornerTriangleFlat","prefabHash":-1161662836,"desc":"","name":"Wall (Flat Corner Triangle Flat)"},"structure":{"smallGrid":true}},"StructureWallGeometryCorner":{"prefab":{"prefabName":"StructureWallGeometryCorner","prefabHash":1979212240,"desc":"","name":"Wall (Geometry Corner)"},"structure":{"smallGrid":false}},"StructureWallGeometryStreight":{"prefab":{"prefabName":"StructureWallGeometryStreight","prefabHash":1049735537,"desc":"","name":"Wall (Geometry Straight)"},"structure":{"smallGrid":false}},"StructureWallGeometryT":{"prefab":{"prefabName":"StructureWallGeometryT","prefabHash":1602758612,"desc":"","name":"Wall (Geometry T)"},"structure":{"smallGrid":false}},"StructureWallGeometryTMirrored":{"prefab":{"prefabName":"StructureWallGeometryTMirrored","prefabHash":-1427845483,"desc":"","name":"Wall (Geometry T Mirrored)"},"structure":{"smallGrid":false}},"StructureWallHeater":{"prefab":{"prefabName":"StructureWallHeater","prefabHash":24258244,"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.","name":"Wall Heater"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallIron":{"prefab":{"prefabName":"StructureWallIron","prefabHash":1287324802,"desc":"","name":"Iron Wall (Type 1)"},"structure":{"smallGrid":false}},"StructureWallIron02":{"prefab":{"prefabName":"StructureWallIron02","prefabHash":1485834215,"desc":"","name":"Iron Wall (Type 2)"},"structure":{"smallGrid":false}},"StructureWallIron03":{"prefab":{"prefabName":"StructureWallIron03","prefabHash":798439281,"desc":"","name":"Iron Wall (Type 3)"},"structure":{"smallGrid":false}},"StructureWallIron04":{"prefab":{"prefabName":"StructureWallIron04","prefabHash":-1309433134,"desc":"","name":"Iron Wall (Type 4)"},"structure":{"smallGrid":false}},"StructureWallLargePanel":{"prefab":{"prefabName":"StructureWallLargePanel","prefabHash":1492930217,"desc":"","name":"Wall (Large Panel)"},"structure":{"smallGrid":false}},"StructureWallLargePanelArrow":{"prefab":{"prefabName":"StructureWallLargePanelArrow","prefabHash":-776581573,"desc":"","name":"Wall (Large Panel Arrow)"},"structure":{"smallGrid":false}},"StructureWallLight":{"prefab":{"prefabName":"StructureWallLight","prefabHash":-1860064656,"desc":"","name":"Wall Light"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallLightBattery":{"prefab":{"prefabName":"StructureWallLightBattery","prefabHash":-1306415132,"desc":"","name":"Wall Light (Battery)"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}],"device":{"connectionList":[{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWallPaddedArch":{"prefab":{"prefabName":"StructureWallPaddedArch","prefabHash":1590330637,"desc":"","name":"Wall (Padded Arch)"},"structure":{"smallGrid":false}},"StructureWallPaddedArchCorner":{"prefab":{"prefabName":"StructureWallPaddedArchCorner","prefabHash":-1126688298,"desc":"","name":"Wall (Padded Arch Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedArchLightFittingTop":{"prefab":{"prefabName":"StructureWallPaddedArchLightFittingTop","prefabHash":1171987947,"desc":"","name":"Wall (Padded Arch Light Fitting Top)"},"structure":{"smallGrid":false}},"StructureWallPaddedArchLightsFittings":{"prefab":{"prefabName":"StructureWallPaddedArchLightsFittings","prefabHash":-1546743960,"desc":"","name":"Wall (Padded Arch Lights Fittings)"},"structure":{"smallGrid":false}},"StructureWallPaddedCorner":{"prefab":{"prefabName":"StructureWallPaddedCorner","prefabHash":-155945899,"desc":"","name":"Wall (Padded Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedCornerThin":{"prefab":{"prefabName":"StructureWallPaddedCornerThin","prefabHash":1183203913,"desc":"","name":"Wall (Padded Corner Thin)"},"structure":{"smallGrid":true}},"StructureWallPaddedNoBorder":{"prefab":{"prefabName":"StructureWallPaddedNoBorder","prefabHash":8846501,"desc":"","name":"Wall (Padded No Border)"},"structure":{"smallGrid":false}},"StructureWallPaddedNoBorderCorner":{"prefab":{"prefabName":"StructureWallPaddedNoBorderCorner","prefabHash":179694804,"desc":"","name":"Wall (Padded No Border Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedThinNoBorder":{"prefab":{"prefabName":"StructureWallPaddedThinNoBorder","prefabHash":-1611559100,"desc":"","name":"Wall (Padded Thin No Border)"},"structure":{"smallGrid":false}},"StructureWallPaddedThinNoBorderCorner":{"prefab":{"prefabName":"StructureWallPaddedThinNoBorderCorner","prefabHash":1769527556,"desc":"","name":"Wall (Padded Thin No Border Corner)"},"structure":{"smallGrid":true}},"StructureWallPaddedWindow":{"prefab":{"prefabName":"StructureWallPaddedWindow","prefabHash":2087628940,"desc":"","name":"Wall (Padded Window)"},"structure":{"smallGrid":false}},"StructureWallPaddedWindowThin":{"prefab":{"prefabName":"StructureWallPaddedWindowThin","prefabHash":-37302931,"desc":"","name":"Wall (Padded Window Thin)"},"structure":{"smallGrid":false}},"StructureWallPadding":{"prefab":{"prefabName":"StructureWallPadding","prefabHash":635995024,"desc":"","name":"Wall (Padding)"},"structure":{"smallGrid":false}},"StructureWallPaddingArchVent":{"prefab":{"prefabName":"StructureWallPaddingArchVent","prefabHash":-1243329828,"desc":"","name":"Wall (Padding Arch Vent)"},"structure":{"smallGrid":false}},"StructureWallPaddingLightFitting":{"prefab":{"prefabName":"StructureWallPaddingLightFitting","prefabHash":2024882687,"desc":"","name":"Wall (Padding Light Fitting)"},"structure":{"smallGrid":false}},"StructureWallPaddingThin":{"prefab":{"prefabName":"StructureWallPaddingThin","prefabHash":-1102403554,"desc":"","name":"Wall (Padding Thin)"},"structure":{"smallGrid":false}},"StructureWallPlating":{"prefab":{"prefabName":"StructureWallPlating","prefabHash":26167457,"desc":"","name":"Wall (Plating)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsAndHatch":{"prefab":{"prefabName":"StructureWallSmallPanelsAndHatch","prefabHash":619828719,"desc":"","name":"Wall (Small Panels And Hatch)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsArrow":{"prefab":{"prefabName":"StructureWallSmallPanelsArrow","prefabHash":-639306697,"desc":"","name":"Wall (Small Panels Arrow)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsMonoChrome":{"prefab":{"prefabName":"StructureWallSmallPanelsMonoChrome","prefabHash":386820253,"desc":"","name":"Wall (Small Panels Mono Chrome)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsOpen":{"prefab":{"prefabName":"StructureWallSmallPanelsOpen","prefabHash":-1407480603,"desc":"","name":"Wall (Small Panels Open)"},"structure":{"smallGrid":false}},"StructureWallSmallPanelsTwoTone":{"prefab":{"prefabName":"StructureWallSmallPanelsTwoTone","prefabHash":1709994581,"desc":"","name":"Wall (Small Panels Two Tone)"},"structure":{"smallGrid":false}},"StructureWallVent":{"prefab":{"prefabName":"StructureWallVent","prefabHash":-1177469307,"desc":"Used to mix atmospheres passively between two walls.","name":"Wall Vent"},"structure":{"smallGrid":true}},"StructureWaterBottleFiller":{"prefab":{"prefabName":"StructureWaterBottleFiller","prefabHash":-1178961954,"desc":"","name":"Water Bottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerBottom":{"prefab":{"prefabName":"StructureWaterBottleFillerBottom","prefabHash":1433754995,"desc":"","name":"Water Bottle Filler Bottom"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerPowered":{"prefab":{"prefabName":"StructureWaterBottleFillerPowered","prefabHash":-756587791,"desc":"","name":"Waterbottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterBottleFillerPoweredBottom":{"prefab":{"prefabName":"StructureWaterBottleFillerPoweredBottom","prefabHash":1986658780,"desc":"","name":"Waterbottle Filler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"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"}},"logicTypes":{"Activate":"ReadWrite","Error":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterDigitalValve":{"prefab":{"prefabName":"StructureWaterDigitalValve","prefabHash":-517628750,"desc":"","name":"Liquid Digital Valve"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterPipeMeter":{"prefab":{"prefabName":"StructureWaterPipeMeter","prefabHash":433184168,"desc":"","name":"Liquid Pipe Meter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWaterPurifier":{"prefab":{"prefabName":"StructureWaterPurifier","prefabHash":887383294,"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.","name":"Water Purifier"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{}},"logicTypes":{"ClearMemory":"Write","Error":"Read","ImportCount":"Read","Lock":"ReadWrite","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWaterWallCooler":{"prefab":{"prefabName":"StructureWaterWallCooler","prefabHash":-1369060582,"desc":"","name":"Liquid Wall Cooler"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{"0":{"Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","PrefabHash":"Read","Quantity":"Read","ReferenceId":"Read","SortingClass":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Maximum":"Read","NameHash":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","Ratio":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connectionList":[{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":false,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWeatherStation":{"prefab":{"prefabName":"StructureWeatherStation","prefabHash":1997212478,"desc":"0.NoStorm\n1.StormIncoming\n2.InStorm","name":"Weather Station"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Activate":"ReadWrite","Error":"Read","Lock":"ReadWrite","Mode":"Read","NameHash":"Read","NextWeatherEventTime":"Read","On":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read"},"modes":{"0":"NoStorm","1":"StormIncoming","2":"InStorm"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":true,"hasAtmosphere":false,"hasColorState":false,"hasLockState":true,"hasModeState":true,"hasOnOffState":true,"hasOpenState":false,"hasReagents":false}},"StructureWindTurbine":{"prefab":{"prefabName":"StructureWindTurbine","prefabHash":-2082355173,"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.","name":"Wind Turbine"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"NameHash":"Read","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Power","role":"None"},{"typ":"Data","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":false,"hasOnOffState":false,"hasOpenState":false,"hasReagents":false}},"StructureWindowShutter":{"prefab":{"prefabName":"StructureWindowShutter","prefabHash":2056377335,"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.","name":"Window Shutter"},"structure":{"smallGrid":true},"logic":{"logicSlotTypes":{},"logicTypes":{"Error":"Read","Idle":"Read","Mode":"ReadWrite","NameHash":"Read","On":"ReadWrite","Open":"ReadWrite","Power":"Read","PrefabHash":"Read","ReferenceId":"Read","RequiredPower":"Read","Setting":"ReadWrite"},"modes":{"0":"Operate","1":"Logic"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[],"device":{"connectionList":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"hasActivateState":false,"hasAtmosphere":false,"hasColorState":false,"hasLockState":false,"hasModeState":true,"hasOnOffState":true,"hasOpenState":true,"hasReagents":false}},"ToolPrinterMod":{"prefab":{"prefabName":"ToolPrinterMod","prefabHash":1700018136,"desc":"Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Tool Printer Mod"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"ToyLuna":{"prefab":{"prefabName":"ToyLuna","prefabHash":94730034,"desc":"","name":"Toy Luna"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Default"}},"UniformCommander":{"prefab":{"prefabName":"UniformCommander","prefabHash":-2083426457,"desc":"","name":"Uniform Commander"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformMarine":{"prefab":{"prefabName":"UniformMarine","prefabHash":-48342840,"desc":"","name":"Marine Uniform"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformOrangeJumpSuit":{"prefab":{"prefabName":"UniformOrangeJumpSuit","prefabHash":810053150,"desc":"","name":"Jump Suit (Orange)"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Uniform","sortingClass":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"WeaponEnergy":{"prefab":{"prefabName":"WeaponEnergy","prefabHash":789494694,"desc":"","name":"Weapon Energy"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"On":"ReadWrite","ReferenceId":"Read"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponPistolEnergy":{"prefab":{"prefabName":"WeaponPistolEnergy","prefabHash":-385323479,"desc":"0.Stun\n1.Kill","name":"Energy Pistol"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponRifleEnergy":{"prefab":{"prefabName":"WeaponRifleEnergy","prefabHash":1154745374,"desc":"0.Stun\n1.Kill","name":"Energy Rifle"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"None","sortingClass":"Tools"},"logic":{"logicSlotTypes":{"0":{"Charge":"Read","ChargeRatio":"Read","Class":"Read","Damage":"Read","MaxQuantity":"Read","OccupantHash":"Read","Occupied":"Read","Quantity":"Read","ReferenceId":"Read"}},"logicTypes":{"Error":"Read","Lock":"ReadWrite","Mode":"ReadWrite","On":"ReadWrite","Open":"ReadWrite","Power":"Read","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmissionReceiver":false,"wirelessLogic":false,"circuitHolder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponTorpedo":{"prefab":{"prefabName":"WeaponTorpedo","prefabHash":-1102977898,"desc":"","name":"Torpedo"},"item":{"consumable":false,"ingredient":false,"maxQuantity":1,"slotClass":"Torpedo","sortingClass":"Default"}}},"reagents":{"Alcohol":{"Hash":1565803737,"Unit":"ml","Sources":null},"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}},"Cocoa":{"Hash":678781198,"Unit":"g","Sources":{"ItemCocoaPowder":1.0,"ItemCocoaTree":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","Sources":null},"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","Sources":null},"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}},"Sugar":{"Hash":1778746875,"Unit":"g","Sources":{"ItemSugar":10.0,"ItemSugarCane":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}}},"enums":{"scriptEnums":{"LogicBatchMethod":{"enumName":"LogicBatchMethod","values":{"Average":{"value":0,"deprecated":false,"description":""},"Maximum":{"value":3,"deprecated":false,"description":""},"Minimum":{"value":2,"deprecated":false,"description":""},"Sum":{"value":1,"deprecated":false,"description":""}}},"LogicReagentMode":{"enumName":"LogicReagentMode","values":{"Contents":{"value":0,"deprecated":false,"description":""},"Recipe":{"value":2,"deprecated":false,"description":""},"Required":{"value":1,"deprecated":false,"description":""},"TotalContents":{"value":3,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NameHash":{"value":268,"deprecated":false,"description":"Provides the hash value for the name of the object as a 32 bit integer."},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}}},"basicEnums":{"AirCon":{"enumName":"AirConditioningMode","values":{"Cold":{"value":0,"deprecated":false,"description":""},"Hot":{"value":1,"deprecated":false,"description":""}}},"AirControl":{"enumName":"AirControlMode","values":{"Draught":{"value":4,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Offline":{"value":1,"deprecated":false,"description":""},"Pressure":{"value":2,"deprecated":false,"description":""}}},"Color":{"enumName":"ColorType","values":{"Black":{"value":7,"deprecated":false,"description":""},"Blue":{"value":0,"deprecated":false,"description":""},"Brown":{"value":8,"deprecated":false,"description":""},"Gray":{"value":1,"deprecated":false,"description":""},"Green":{"value":2,"deprecated":false,"description":""},"Khaki":{"value":9,"deprecated":false,"description":""},"Orange":{"value":3,"deprecated":false,"description":""},"Pink":{"value":10,"deprecated":false,"description":""},"Purple":{"value":11,"deprecated":false,"description":""},"Red":{"value":4,"deprecated":false,"description":""},"White":{"value":6,"deprecated":false,"description":""},"Yellow":{"value":5,"deprecated":false,"description":""}}},"DaylightSensorMode":{"enumName":"DaylightSensorMode","values":{"Default":{"value":0,"deprecated":false,"description":""},"Horizontal":{"value":1,"deprecated":false,"description":""},"Vertical":{"value":2,"deprecated":false,"description":""}}},"ElevatorMode":{"enumName":"ElevatorMode","values":{"Downward":{"value":2,"deprecated":false,"description":""},"Stationary":{"value":0,"deprecated":false,"description":""},"Upward":{"value":1,"deprecated":false,"description":""}}},"EntityState":{"enumName":"EntityState","values":{"Alive":{"value":0,"deprecated":false,"description":""},"Dead":{"value":1,"deprecated":false,"description":""},"Decay":{"value":3,"deprecated":false,"description":""},"Unconscious":{"value":2,"deprecated":false,"description":""}}},"GasType":{"enumName":"GasType","values":{"CarbonDioxide":{"value":4,"deprecated":false,"description":""},"Hydrogen":{"value":16384,"deprecated":false,"description":""},"LiquidCarbonDioxide":{"value":2048,"deprecated":false,"description":""},"LiquidHydrogen":{"value":32768,"deprecated":false,"description":""},"LiquidNitrogen":{"value":128,"deprecated":false,"description":""},"LiquidNitrousOxide":{"value":8192,"deprecated":false,"description":""},"LiquidOxygen":{"value":256,"deprecated":false,"description":""},"LiquidPollutant":{"value":4096,"deprecated":false,"description":""},"LiquidVolatiles":{"value":512,"deprecated":false,"description":""},"Nitrogen":{"value":2,"deprecated":false,"description":""},"NitrousOxide":{"value":64,"deprecated":false,"description":""},"Oxygen":{"value":1,"deprecated":false,"description":""},"Pollutant":{"value":16,"deprecated":false,"description":""},"PollutedWater":{"value":65536,"deprecated":false,"description":""},"Steam":{"value":1024,"deprecated":false,"description":""},"Undefined":{"value":0,"deprecated":false,"description":""},"Volatiles":{"value":8,"deprecated":false,"description":""},"Water":{"value":32,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NameHash":{"value":268,"deprecated":false,"description":"Provides the hash value for the name of the object as a 32 bit integer."},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}},"PowerMode":{"enumName":"PowerMode","values":{"Charged":{"value":4,"deprecated":false,"description":""},"Charging":{"value":3,"deprecated":false,"description":""},"Discharged":{"value":1,"deprecated":false,"description":""},"Discharging":{"value":2,"deprecated":false,"description":""},"Idle":{"value":0,"deprecated":false,"description":""}}},"PrinterInstruction":{"enumName":"PrinterInstruction","values":{"DeviceSetLock":{"value":6,"deprecated":false,"description":""},"EjectAllReagents":{"value":8,"deprecated":false,"description":""},"EjectReagent":{"value":7,"deprecated":false,"description":""},"ExecuteRecipe":{"value":2,"deprecated":false,"description":""},"JumpIfNextInvalid":{"value":4,"deprecated":false,"description":""},"JumpToAddress":{"value":5,"deprecated":false,"description":""},"MissingRecipeReagent":{"value":9,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"StackPointer":{"value":1,"deprecated":false,"description":""},"WaitUntilNextValid":{"value":3,"deprecated":false,"description":""}}},"ReEntryProfile":{"enumName":"ReEntryProfile","values":{"High":{"value":3,"deprecated":false,"description":""},"Max":{"value":4,"deprecated":false,"description":""},"Medium":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Optimal":{"value":1,"deprecated":false,"description":""}}},"RobotMode":{"enumName":"RobotMode","values":{"Follow":{"value":1,"deprecated":false,"description":""},"MoveToTarget":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"PathToTarget":{"value":5,"deprecated":false,"description":""},"Roam":{"value":3,"deprecated":false,"description":""},"StorageFull":{"value":6,"deprecated":false,"description":""},"Unload":{"value":4,"deprecated":false,"description":""}}},"RocketMode":{"enumName":"RocketMode","values":{"Chart":{"value":5,"deprecated":false,"description":""},"Discover":{"value":4,"deprecated":false,"description":""},"Invalid":{"value":0,"deprecated":false,"description":""},"Mine":{"value":2,"deprecated":false,"description":""},"None":{"value":1,"deprecated":false,"description":""},"Survey":{"value":3,"deprecated":false,"description":""}}},"SlotClass":{"enumName":"Class","values":{"AccessCard":{"value":22,"deprecated":false,"description":""},"Appliance":{"value":18,"deprecated":false,"description":""},"Back":{"value":3,"deprecated":false,"description":""},"Battery":{"value":14,"deprecated":false,"description":""},"Belt":{"value":16,"deprecated":false,"description":""},"Blocked":{"value":38,"deprecated":false,"description":""},"Bottle":{"value":25,"deprecated":false,"description":""},"Cartridge":{"value":21,"deprecated":false,"description":""},"Circuit":{"value":24,"deprecated":false,"description":""},"Circuitboard":{"value":7,"deprecated":false,"description":""},"CreditCard":{"value":28,"deprecated":false,"description":""},"DataDisk":{"value":8,"deprecated":false,"description":""},"DirtCanister":{"value":29,"deprecated":false,"description":""},"DrillHead":{"value":35,"deprecated":false,"description":""},"Egg":{"value":15,"deprecated":false,"description":""},"Entity":{"value":13,"deprecated":false,"description":""},"Flare":{"value":37,"deprecated":false,"description":""},"GasCanister":{"value":5,"deprecated":false,"description":""},"GasFilter":{"value":4,"deprecated":false,"description":""},"Glasses":{"value":27,"deprecated":false,"description":""},"Helmet":{"value":1,"deprecated":false,"description":""},"Ingot":{"value":19,"deprecated":false,"description":""},"LiquidBottle":{"value":32,"deprecated":false,"description":""},"LiquidCanister":{"value":31,"deprecated":false,"description":""},"Magazine":{"value":23,"deprecated":false,"description":""},"Motherboard":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Ore":{"value":10,"deprecated":false,"description":""},"Organ":{"value":9,"deprecated":false,"description":""},"Plant":{"value":11,"deprecated":false,"description":""},"ProgrammableChip":{"value":26,"deprecated":false,"description":""},"ScanningHead":{"value":36,"deprecated":false,"description":""},"SensorProcessingUnit":{"value":30,"deprecated":false,"description":""},"SoundCartridge":{"value":34,"deprecated":false,"description":""},"Suit":{"value":2,"deprecated":false,"description":""},"SuitMod":{"value":39,"deprecated":false,"description":""},"Tool":{"value":17,"deprecated":false,"description":""},"Torpedo":{"value":20,"deprecated":false,"description":""},"Uniform":{"value":12,"deprecated":false,"description":""},"Wreckage":{"value":33,"deprecated":false,"description":""}}},"SorterInstruction":{"enumName":"SorterInstruction","values":{"FilterPrefabHashEquals":{"value":1,"deprecated":false,"description":""},"FilterPrefabHashNotEquals":{"value":2,"deprecated":false,"description":""},"FilterQuantityCompare":{"value":5,"deprecated":false,"description":""},"FilterSlotTypeCompare":{"value":4,"deprecated":false,"description":""},"FilterSortingClassCompare":{"value":3,"deprecated":false,"description":""},"LimitNextExecutionByCount":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""}}},"SortingClass":{"enumName":"SortingClass","values":{"Appliances":{"value":6,"deprecated":false,"description":""},"Atmospherics":{"value":7,"deprecated":false,"description":""},"Clothing":{"value":5,"deprecated":false,"description":""},"Default":{"value":0,"deprecated":false,"description":""},"Food":{"value":4,"deprecated":false,"description":""},"Ices":{"value":10,"deprecated":false,"description":""},"Kits":{"value":1,"deprecated":false,"description":""},"Ores":{"value":9,"deprecated":false,"description":""},"Resources":{"value":3,"deprecated":false,"description":""},"Storage":{"value":8,"deprecated":false,"description":""},"Tools":{"value":2,"deprecated":false,"description":""}}},"Sound":{"enumName":"SoundAlert","values":{"AirlockCycling":{"value":22,"deprecated":false,"description":""},"Alarm1":{"value":45,"deprecated":false,"description":""},"Alarm10":{"value":12,"deprecated":false,"description":""},"Alarm11":{"value":13,"deprecated":false,"description":""},"Alarm12":{"value":14,"deprecated":false,"description":""},"Alarm2":{"value":1,"deprecated":false,"description":""},"Alarm3":{"value":2,"deprecated":false,"description":""},"Alarm4":{"value":3,"deprecated":false,"description":""},"Alarm5":{"value":4,"deprecated":false,"description":""},"Alarm6":{"value":5,"deprecated":false,"description":""},"Alarm7":{"value":6,"deprecated":false,"description":""},"Alarm8":{"value":10,"deprecated":false,"description":""},"Alarm9":{"value":11,"deprecated":false,"description":""},"Alert":{"value":17,"deprecated":false,"description":""},"Danger":{"value":15,"deprecated":false,"description":""},"Depressurising":{"value":20,"deprecated":false,"description":""},"FireFireFire":{"value":28,"deprecated":false,"description":""},"Five":{"value":33,"deprecated":false,"description":""},"Floor":{"value":34,"deprecated":false,"description":""},"Four":{"value":32,"deprecated":false,"description":""},"HaltWhoGoesThere":{"value":27,"deprecated":false,"description":""},"HighCarbonDioxide":{"value":44,"deprecated":false,"description":""},"IntruderAlert":{"value":19,"deprecated":false,"description":""},"LiftOff":{"value":36,"deprecated":false,"description":""},"MalfunctionDetected":{"value":26,"deprecated":false,"description":""},"Music1":{"value":7,"deprecated":false,"description":""},"Music2":{"value":8,"deprecated":false,"description":""},"Music3":{"value":9,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"One":{"value":29,"deprecated":false,"description":""},"PollutantsDetected":{"value":43,"deprecated":false,"description":""},"PowerLow":{"value":23,"deprecated":false,"description":""},"PressureHigh":{"value":39,"deprecated":false,"description":""},"PressureLow":{"value":40,"deprecated":false,"description":""},"Pressurising":{"value":21,"deprecated":false,"description":""},"RocketLaunching":{"value":35,"deprecated":false,"description":""},"StormIncoming":{"value":18,"deprecated":false,"description":""},"SystemFailure":{"value":24,"deprecated":false,"description":""},"TemperatureHigh":{"value":41,"deprecated":false,"description":""},"TemperatureLow":{"value":42,"deprecated":false,"description":""},"Three":{"value":31,"deprecated":false,"description":""},"TraderIncoming":{"value":37,"deprecated":false,"description":""},"TraderLanded":{"value":38,"deprecated":false,"description":""},"Two":{"value":30,"deprecated":false,"description":""},"Warning":{"value":16,"deprecated":false,"description":""},"Welcome":{"value":25,"deprecated":false,"description":""}}},"TransmitterMode":{"enumName":"LogicTransmitterMode","values":{"Active":{"value":1,"deprecated":false,"description":""},"Passive":{"value":0,"deprecated":false,"description":""}}},"Vent":{"enumName":"VentDirection","values":{"Inward":{"value":1,"deprecated":false,"description":""},"Outward":{"value":0,"deprecated":false,"description":""}}},"_unnamed":{"enumName":"ConditionOperation","values":{"Equals":{"value":0,"deprecated":false,"description":""},"Greater":{"value":1,"deprecated":false,"description":""},"Less":{"value":2,"deprecated":false,"description":""},"NotEquals":{"value":3,"deprecated":false,"description":""}}}}},"prefabsByHash":{"-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","-1884103228":"SeedBag_SugarCane","-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","-1351081801":"StructureLargeHangerDoor","-1348105509":"ItemGoldOre","-1344601965":"ItemCannedMushroom","-1339716113":"AppliancePaintMixer","-1339479035":"AccessCardGray","-1337091041":"StructureChuteDigitalValveRight","-1335056202":"ItemSugarCane","-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","-1108244510":"ItemPlainCake","-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","-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","-261575861":"ItemChocolateCake","-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","234601764":"ItemChocolateBar","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","457286516":"ItemCocoaPowder","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","680051921":"ItemCocoaTree","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","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","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","860793245":"ItemChocolateCerealBar","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","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","1139887531":"SeedBag_Cocoa","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","2111910840":"ItemSugar","2130739600":"DynamicMKIILiquidCanisterEmpty","2131916219":"ItemSpaceOre","2133035682":"ItemKitStandardChute","2134172356":"StructureInsulatedPipeStraight","2134647745":"ItemLeadIngot","2145068424":"ItemGasCanisterNitrogen"},"structures":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","Flag_ODA_10m","Flag_ODA_4m","Flag_ODA_6m","Flag_ODA_8m","H2Combustor","KitchenTableShort","KitchenTableSimpleShort","KitchenTableSimpleTall","KitchenTableTall","Landingpad_2x2CenterPiece01","Landingpad_BlankPiece","Landingpad_CenterPiece01","Landingpad_CrossPiece","Landingpad_DataConnectionPiece","Landingpad_DiagonalPiece01","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_GasCylinderTankPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_StraightPiece01","Landingpad_TaxiPieceCorner","Landingpad_TaxiPieceHold","Landingpad_TaxiPieceStraight","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","RailingElegant01","RailingElegant02","RailingIndustrial02","RespawnPoint","RespawnPointWallMounted","Rover_MkI_build_states","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureBlocker","StructureCableAnalysizer","StructureCableCorner","StructureCableCorner3","StructureCableCorner3Burnt","StructureCableCorner3HBurnt","StructureCableCorner4","StructureCableCorner4Burnt","StructureCableCorner4HBurnt","StructureCableCornerBurnt","StructureCableCornerH","StructureCableCornerH3","StructureCableCornerH4","StructureCableCornerHBurnt","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCableJunction","StructureCableJunction4","StructureCableJunction4Burnt","StructureCableJunction4HBurnt","StructureCableJunction5","StructureCableJunction5Burnt","StructureCableJunction6","StructureCableJunction6Burnt","StructureCableJunction6HBurnt","StructureCableJunctionBurnt","StructureCableJunctionH","StructureCableJunctionH4","StructureCableJunctionH5","StructureCableJunctionH5Burnt","StructureCableJunctionH6","StructureCableJunctionHBurnt","StructureCableStraight","StructureCableStraightBurnt","StructureCableStraightH","StructureCableStraightHBurnt","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteCorner","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteFlipFlopSplitter","StructureChuteInlet","StructureChuteJunction","StructureChuteOutlet","StructureChuteOverflow","StructureChuteStraight","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureChuteValve","StructureChuteWindow","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeCladdingAngled","StructureCompositeCladdingAngledCorner","StructureCompositeCladdingAngledCornerInner","StructureCompositeCladdingAngledCornerInnerLong","StructureCompositeCladdingAngledCornerInnerLongL","StructureCompositeCladdingAngledCornerInnerLongR","StructureCompositeCladdingAngledCornerLong","StructureCompositeCladdingAngledCornerLongR","StructureCompositeCladdingAngledLong","StructureCompositeCladdingCylindrical","StructureCompositeCladdingCylindricalPanel","StructureCompositeCladdingPanel","StructureCompositeCladdingRounded","StructureCompositeCladdingRoundedCorner","StructureCompositeCladdingRoundedCornerInner","StructureCompositeCladdingSpherical","StructureCompositeCladdingSphericalCap","StructureCompositeCladdingSphericalCorner","StructureCompositeDoor","StructureCompositeFloorGrating","StructureCompositeFloorGrating2","StructureCompositeFloorGrating3","StructureCompositeFloorGrating4","StructureCompositeFloorGratingOpen","StructureCompositeFloorGratingOpenRotated","StructureCompositeWall","StructureCompositeWall02","StructureCompositeWall03","StructureCompositeWall04","StructureCompositeWindow","StructureCompositeWindowIron","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCrateMount","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEngineMountTypeA1","StructureEvaporationChamber","StructureExpansionValve","StructureFairingTypeA1","StructureFairingTypeA2","StructureFairingTypeA3","StructureFiltration","StructureFlagSmall","StructureFlashingLight","StructureFlatBench","StructureFloorDrain","StructureFrame","StructureFrameCorner","StructureFrameCornerCut","StructureFrameIron","StructureFrameSide","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureFuselageTypeA1","StructureFuselageTypeA2","StructureFuselageTypeA4","StructureFuselageTypeC5","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTray","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInLineTankGas1x1","StructureInLineTankGas1x2","StructureInLineTankLiquid1x1","StructureInLineTankLiquid1x2","StructureInsulatedInLineTankGas1x1","StructureInsulatedInLineTankGas1x2","StructureInsulatedInLineTankLiquid1x1","StructureInsulatedInLineTankLiquid1x2","StructureInsulatedPipeCorner","StructureInsulatedPipeCrossJunction","StructureInsulatedPipeCrossJunction3","StructureInsulatedPipeCrossJunction4","StructureInsulatedPipeCrossJunction5","StructureInsulatedPipeCrossJunction6","StructureInsulatedPipeLiquidCorner","StructureInsulatedPipeLiquidCrossJunction","StructureInsulatedPipeLiquidCrossJunction4","StructureInsulatedPipeLiquidCrossJunction5","StructureInsulatedPipeLiquidCrossJunction6","StructureInsulatedPipeLiquidStraight","StructureInsulatedPipeLiquidTJunction","StructureInsulatedPipeStraight","StructureInsulatedPipeTJunction","StructureInsulatedTankConnector","StructureInsulatedTankConnectorLiquid","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLadder","StructureLadderEnd","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLaunchMount","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassiveVent","StructurePassiveVentInsulated","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePictureFrameThickLandscapeLarge","StructurePictureFrameThickLandscapeSmall","StructurePictureFrameThickMountLandscapeLarge","StructurePictureFrameThickMountLandscapeSmall","StructurePictureFrameThickMountPortraitLarge","StructurePictureFrameThickMountPortraitSmall","StructurePictureFrameThickPortraitLarge","StructurePictureFrameThickPortraitSmall","StructurePictureFrameThinLandscapeLarge","StructurePictureFrameThinLandscapeSmall","StructurePictureFrameThinMountLandscapeLarge","StructurePictureFrameThinMountLandscapeSmall","StructurePictureFrameThinMountPortraitLarge","StructurePictureFrameThinMountPortraitSmall","StructurePictureFrameThinPortraitLarge","StructurePictureFrameThinPortraitSmall","StructurePipeAnalysizer","StructurePipeCorner","StructurePipeCowl","StructurePipeCrossJunction","StructurePipeCrossJunction3","StructurePipeCrossJunction4","StructurePipeCrossJunction5","StructurePipeCrossJunction6","StructurePipeHeater","StructurePipeIgniter","StructurePipeInsulatedLiquidCrossJunction","StructurePipeLabel","StructurePipeLiquidCorner","StructurePipeLiquidCrossJunction","StructurePipeLiquidCrossJunction3","StructurePipeLiquidCrossJunction4","StructurePipeLiquidCrossJunction5","StructurePipeLiquidCrossJunction6","StructurePipeLiquidStraight","StructurePipeLiquidTJunction","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeOrgan","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePipeStraight","StructurePipeTJunction","StructurePlanter","StructurePlatformLadderOpen","StructurePlinth","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRailing","StructureRecycler","StructureRefrigeratedVendingMachine","StructureReinforcedCompositeWindow","StructureReinforcedCompositeWindowSteel","StructureReinforcedWallPaddedWindow","StructureReinforcedWallPaddedWindowThin","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTower","StructureRocketTransformerSmall","StructureRover","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelf","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSmallTableBacklessDouble","StructureSmallTableBacklessSingle","StructureSmallTableDinnerSingle","StructureSmallTableRectangleDouble","StructureSmallTableRectangleSingle","StructureSmallTableThickDouble","StructureSmallTableThickSingle","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStairs4x2","StructureStairs4x2RailL","StructureStairs4x2RailR","StructureStairs4x2Rails","StructureStairwellBackLeft","StructureStairwellBackPassthrough","StructureStairwellBackRight","StructureStairwellFrontLeft","StructureStairwellFrontPassthrough","StructureStairwellFrontRight","StructureStairwellNoDoors","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankConnector","StructureTankConnectorLiquid","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTorpedoRack","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallArch","StructureWallArchArrow","StructureWallArchCornerRound","StructureWallArchCornerSquare","StructureWallArchCornerTriangle","StructureWallArchPlating","StructureWallArchTwoTone","StructureWallCooler","StructureWallFlat","StructureWallFlatCornerRound","StructureWallFlatCornerSquare","StructureWallFlatCornerTriangle","StructureWallFlatCornerTriangleFlat","StructureWallGeometryCorner","StructureWallGeometryStreight","StructureWallGeometryT","StructureWallGeometryTMirrored","StructureWallHeater","StructureWallIron","StructureWallIron02","StructureWallIron03","StructureWallIron04","StructureWallLargePanel","StructureWallLargePanelArrow","StructureWallLight","StructureWallLightBattery","StructureWallPaddedArch","StructureWallPaddedArchCorner","StructureWallPaddedArchLightFittingTop","StructureWallPaddedArchLightsFittings","StructureWallPaddedCorner","StructureWallPaddedCornerThin","StructureWallPaddedNoBorder","StructureWallPaddedNoBorderCorner","StructureWallPaddedThinNoBorder","StructureWallPaddedThinNoBorderCorner","StructureWallPaddedWindow","StructureWallPaddedWindowThin","StructureWallPadding","StructureWallPaddingArchVent","StructureWallPaddingLightFitting","StructureWallPaddingThin","StructureWallPlating","StructureWallSmallPanelsAndHatch","StructureWallSmallPanelsArrow","StructureWallSmallPanelsMonoChrome","StructureWallSmallPanelsOpen","StructureWallSmallPanelsTwoTone","StructureWallVent","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"devices":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","H2Combustor","Landingpad_DataConnectionPiece","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureCableAnalysizer","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteInlet","StructureChuteOutlet","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeDoor","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEvaporationChamber","StructureExpansionValve","StructureFiltration","StructureFlashingLight","StructureFlatBench","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePipeAnalysizer","StructurePipeHeater","StructurePipeIgniter","StructurePipeLabel","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRecycler","StructureRefrigeratedVendingMachine","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTransformerSmall","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallCooler","StructureWallHeater","StructureWallLight","StructureWallLightBattery","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"items":["AccessCardBlack","AccessCardBlue","AccessCardBrown","AccessCardGray","AccessCardGreen","AccessCardKhaki","AccessCardOrange","AccessCardPink","AccessCardPurple","AccessCardRed","AccessCardWhite","AccessCardYellow","ApplianceChemistryStation","ApplianceDeskLampLeft","ApplianceDeskLampRight","ApplianceMicrowave","AppliancePackagingMachine","AppliancePaintMixer","AppliancePlantGeneticAnalyzer","AppliancePlantGeneticSplicer","AppliancePlantGeneticStabilizer","ApplianceReagentProcessor","ApplianceSeedTray","ApplianceTabletDock","AutolathePrinterMod","Battery_Wireless_cell","Battery_Wireless_cell_Big","CardboardBox","CartridgeAccessController","CartridgeAtmosAnalyser","CartridgeConfiguration","CartridgeElectronicReader","CartridgeGPS","CartridgeGuide","CartridgeMedicalAnalyser","CartridgeNetworkAnalyser","CartridgeOreScanner","CartridgeOreScannerColor","CartridgePlantAnalyser","CartridgeTracker","CircuitboardAdvAirlockControl","CircuitboardAirControl","CircuitboardAirlockControl","CircuitboardCameraDisplay","CircuitboardDoorControl","CircuitboardGasDisplay","CircuitboardGraphDisplay","CircuitboardHashDisplay","CircuitboardModeControl","CircuitboardPowerControl","CircuitboardShipDisplay","CircuitboardSolarControl","CrateMkII","DecayedFood","DynamicAirConditioner","DynamicCrate","DynamicGPR","DynamicGasCanisterAir","DynamicGasCanisterCarbonDioxide","DynamicGasCanisterEmpty","DynamicGasCanisterFuel","DynamicGasCanisterNitrogen","DynamicGasCanisterNitrousOxide","DynamicGasCanisterOxygen","DynamicGasCanisterPollutants","DynamicGasCanisterRocketFuel","DynamicGasCanisterVolatiles","DynamicGasCanisterWater","DynamicGasTankAdvanced","DynamicGasTankAdvancedOxygen","DynamicGenerator","DynamicHydroponics","DynamicLight","DynamicLiquidCanisterEmpty","DynamicMKIILiquidCanisterEmpty","DynamicMKIILiquidCanisterWater","DynamicScrubber","DynamicSkeleton","ElectronicPrinterMod","ElevatorCarrage","EntityChick","EntityChickenBrown","EntityChickenWhite","EntityRoosterBlack","EntityRoosterBrown","Fertilizer","FireArmSMG","FlareGun","Handgun","HandgunMagazine","HumanSkull","ImGuiCircuitboardAirlockControl","ItemActiveVent","ItemAdhesiveInsulation","ItemAdvancedTablet","ItemAlienMushroom","ItemAmmoBox","ItemAngleGrinder","ItemArcWelder","ItemAreaPowerControl","ItemAstroloyIngot","ItemAstroloySheets","ItemAuthoringTool","ItemAuthoringToolRocketNetwork","ItemBasketBall","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBatteryCharger","ItemBatteryChargerSmall","ItemBeacon","ItemBiomass","ItemBreadLoaf","ItemCableAnalyser","ItemCableCoil","ItemCableCoilHeavy","ItemCableFuse","ItemCannedCondensedMilk","ItemCannedEdamame","ItemCannedMushroom","ItemCannedPowderedEggs","ItemCannedRicePudding","ItemCerealBar","ItemCharcoal","ItemChemLightBlue","ItemChemLightGreen","ItemChemLightRed","ItemChemLightWhite","ItemChemLightYellow","ItemChocolateBar","ItemChocolateCake","ItemChocolateCerealBar","ItemCoalOre","ItemCobaltOre","ItemCocoaPowder","ItemCocoaTree","ItemCoffeeMug","ItemConstantanIngot","ItemCookedCondensedMilk","ItemCookedCorn","ItemCookedMushroom","ItemCookedPowderedEggs","ItemCookedPumpkin","ItemCookedRice","ItemCookedSoybean","ItemCookedTomato","ItemCopperIngot","ItemCopperOre","ItemCorn","ItemCornSoup","ItemCreditCard","ItemCropHay","ItemCrowbar","ItemDataDisk","ItemDirtCanister","ItemDirtyOre","ItemDisposableBatteryCharger","ItemDrill","ItemDuctTape","ItemDynamicAirCon","ItemDynamicScrubber","ItemEggCarton","ItemElectronicParts","ItemElectrumIngot","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyCrowbar","ItemEmergencyDrill","ItemEmergencyEvaSuit","ItemEmergencyPickaxe","ItemEmergencyScrewdriver","ItemEmergencySpaceHelmet","ItemEmergencyToolBelt","ItemEmergencyWireCutters","ItemEmergencyWrench","ItemEmptyCan","ItemEvaSuit","ItemExplosive","ItemFern","ItemFertilizedEgg","ItemFilterFern","ItemFlagSmall","ItemFlashingLight","ItemFlashlight","ItemFlour","ItemFlowerBlue","ItemFlowerGreen","ItemFlowerOrange","ItemFlowerRed","ItemFlowerYellow","ItemFrenchFries","ItemFries","ItemGasCanisterCarbonDioxide","ItemGasCanisterEmpty","ItemGasCanisterFuel","ItemGasCanisterNitrogen","ItemGasCanisterNitrousOxide","ItemGasCanisterOxygen","ItemGasCanisterPollutants","ItemGasCanisterSmart","ItemGasCanisterVolatiles","ItemGasCanisterWater","ItemGasFilterCarbonDioxide","ItemGasFilterCarbonDioxideInfinite","ItemGasFilterCarbonDioxideL","ItemGasFilterCarbonDioxideM","ItemGasFilterNitrogen","ItemGasFilterNitrogenInfinite","ItemGasFilterNitrogenL","ItemGasFilterNitrogenM","ItemGasFilterNitrousOxide","ItemGasFilterNitrousOxideInfinite","ItemGasFilterNitrousOxideL","ItemGasFilterNitrousOxideM","ItemGasFilterOxygen","ItemGasFilterOxygenInfinite","ItemGasFilterOxygenL","ItemGasFilterOxygenM","ItemGasFilterPollutants","ItemGasFilterPollutantsInfinite","ItemGasFilterPollutantsL","ItemGasFilterPollutantsM","ItemGasFilterVolatiles","ItemGasFilterVolatilesInfinite","ItemGasFilterVolatilesL","ItemGasFilterVolatilesM","ItemGasFilterWater","ItemGasFilterWaterInfinite","ItemGasFilterWaterL","ItemGasFilterWaterM","ItemGasSensor","ItemGasTankStorage","ItemGlassSheets","ItemGlasses","ItemGoldIngot","ItemGoldOre","ItemGrenade","ItemHEMDroidRepairKit","ItemHardBackpack","ItemHardJetpack","ItemHardMiningBackPack","ItemHardSuit","ItemHardsuitHelmet","ItemHastelloyIngot","ItemHat","ItemHighVolumeGasCanisterEmpty","ItemHorticultureBelt","ItemHydroponicTray","ItemIce","ItemIgniter","ItemInconelIngot","ItemInsulation","ItemIntegratedCircuit10","ItemInvarIngot","ItemIronFrames","ItemIronIngot","ItemIronOre","ItemIronSheets","ItemJetpackBasic","ItemKitAIMeE","ItemKitAccessBridge","ItemKitAdvancedComposter","ItemKitAdvancedFurnace","ItemKitAdvancedPackagingMachine","ItemKitAirlock","ItemKitAirlockGate","ItemKitArcFurnace","ItemKitAtmospherics","ItemKitAutoMinerSmall","ItemKitAutolathe","ItemKitAutomatedOven","ItemKitBasket","ItemKitBattery","ItemKitBatteryLarge","ItemKitBeacon","ItemKitBeds","ItemKitBlastDoor","ItemKitCentrifuge","ItemKitChairs","ItemKitChute","ItemKitChuteUmbilical","ItemKitCompositeCladding","ItemKitCompositeFloorGrating","ItemKitComputer","ItemKitConsole","ItemKitCrate","ItemKitCrateMkII","ItemKitCrateMount","ItemKitCryoTube","ItemKitDeepMiner","ItemKitDockingPort","ItemKitDoor","ItemKitDrinkingFountain","ItemKitDynamicCanister","ItemKitDynamicGasTankAdvanced","ItemKitDynamicGenerator","ItemKitDynamicHydroponics","ItemKitDynamicLiquidCanister","ItemKitDynamicMKIILiquidCanister","ItemKitElectricUmbilical","ItemKitElectronicsPrinter","ItemKitElevator","ItemKitEngineLarge","ItemKitEngineMedium","ItemKitEngineSmall","ItemKitEvaporationChamber","ItemKitFlagODA","ItemKitFridgeBig","ItemKitFridgeSmall","ItemKitFurnace","ItemKitFurniture","ItemKitFuselage","ItemKitGasGenerator","ItemKitGasUmbilical","ItemKitGovernedGasRocketEngine","ItemKitGroundTelescope","ItemKitGrowLight","ItemKitHarvie","ItemKitHeatExchanger","ItemKitHorizontalAutoMiner","ItemKitHydraulicPipeBender","ItemKitHydroponicAutomated","ItemKitHydroponicStation","ItemKitIceCrusher","ItemKitInsulatedLiquidPipe","ItemKitInsulatedPipe","ItemKitInsulatedPipeUtility","ItemKitInsulatedPipeUtilityLiquid","ItemKitInteriorDoors","ItemKitLadder","ItemKitLandingPadAtmos","ItemKitLandingPadBasic","ItemKitLandingPadWaypoint","ItemKitLargeDirectHeatExchanger","ItemKitLargeExtendableRadiator","ItemKitLargeSatelliteDish","ItemKitLaunchMount","ItemKitLaunchTower","ItemKitLiquidRegulator","ItemKitLiquidTank","ItemKitLiquidTankInsulated","ItemKitLiquidTurboVolumePump","ItemKitLiquidUmbilical","ItemKitLocker","ItemKitLogicCircuit","ItemKitLogicInputOutput","ItemKitLogicMemory","ItemKitLogicProcessor","ItemKitLogicSwitch","ItemKitLogicTransmitter","ItemKitMotherShipCore","ItemKitMusicMachines","ItemKitPassiveLargeRadiatorGas","ItemKitPassiveLargeRadiatorLiquid","ItemKitPassthroughHeatExchanger","ItemKitPictureFrame","ItemKitPipe","ItemKitPipeLiquid","ItemKitPipeOrgan","ItemKitPipeRadiator","ItemKitPipeRadiatorLiquid","ItemKitPipeUtility","ItemKitPipeUtilityLiquid","ItemKitPlanter","ItemKitPortablesConnector","ItemKitPowerTransmitter","ItemKitPowerTransmitterOmni","ItemKitPoweredVent","ItemKitPressureFedGasEngine","ItemKitPressureFedLiquidEngine","ItemKitPressurePlate","ItemKitPumpedLiquidEngine","ItemKitRailing","ItemKitRecycler","ItemKitRegulator","ItemKitReinforcedWindows","ItemKitResearchMachine","ItemKitRespawnPointWallMounted","ItemKitRocketAvionics","ItemKitRocketBattery","ItemKitRocketCargoStorage","ItemKitRocketCelestialTracker","ItemKitRocketCircuitHousing","ItemKitRocketDatalink","ItemKitRocketGasFuelTank","ItemKitRocketLiquidFuelTank","ItemKitRocketManufactory","ItemKitRocketMiner","ItemKitRocketScanner","ItemKitRocketTransformerSmall","ItemKitRoverFrame","ItemKitRoverMKI","ItemKitSDBHopper","ItemKitSatelliteDish","ItemKitSecurityPrinter","ItemKitSensor","ItemKitShower","ItemKitSign","ItemKitSleeper","ItemKitSmallDirectHeatExchanger","ItemKitSmallSatelliteDish","ItemKitSolarPanel","ItemKitSolarPanelBasic","ItemKitSolarPanelBasicReinforced","ItemKitSolarPanelReinforced","ItemKitSolidGenerator","ItemKitSorter","ItemKitSpeaker","ItemKitStacker","ItemKitStairs","ItemKitStairwell","ItemKitStandardChute","ItemKitStirlingEngine","ItemKitSuitStorage","ItemKitTables","ItemKitTank","ItemKitTankInsulated","ItemKitToolManufactory","ItemKitTransformer","ItemKitTransformerSmall","ItemKitTurbineGenerator","ItemKitTurboVolumePump","ItemKitUprightWindTurbine","ItemKitVendingMachine","ItemKitVendingMachineRefrigerated","ItemKitWall","ItemKitWallArch","ItemKitWallFlat","ItemKitWallGeometry","ItemKitWallIron","ItemKitWallPadded","ItemKitWaterBottleFiller","ItemKitWaterPurifier","ItemKitWeatherStation","ItemKitWindTurbine","ItemKitWindowShutter","ItemLabeller","ItemLaptop","ItemLeadIngot","ItemLeadOre","ItemLightSword","ItemLiquidCanisterEmpty","ItemLiquidCanisterSmart","ItemLiquidDrain","ItemLiquidPipeAnalyzer","ItemLiquidPipeHeater","ItemLiquidPipeValve","ItemLiquidPipeVolumePump","ItemLiquidTankStorage","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIICrowbar","ItemMKIIDrill","ItemMKIIDuctTape","ItemMKIIMiningDrill","ItemMKIIScrewdriver","ItemMKIIWireCutters","ItemMKIIWrench","ItemMarineBodyArmor","ItemMarineHelmet","ItemMilk","ItemMiningBackPack","ItemMiningBelt","ItemMiningBeltMKII","ItemMiningCharge","ItemMiningDrill","ItemMiningDrillHeavy","ItemMiningDrillPneumatic","ItemMkIIToolbelt","ItemMuffin","ItemMushroom","ItemNVG","ItemNickelIngot","ItemNickelOre","ItemNitrice","ItemOxite","ItemPassiveVent","ItemPassiveVentInsulated","ItemPeaceLily","ItemPickaxe","ItemPillHeal","ItemPillStun","ItemPipeAnalyizer","ItemPipeCowl","ItemPipeDigitalValve","ItemPipeGasMixer","ItemPipeHeater","ItemPipeIgniter","ItemPipeLabel","ItemPipeLiquidRadiator","ItemPipeMeter","ItemPipeRadiator","ItemPipeValve","ItemPipeVolumePump","ItemPlainCake","ItemPlantEndothermic_Creative","ItemPlantEndothermic_Genepool1","ItemPlantEndothermic_Genepool2","ItemPlantSampler","ItemPlantSwitchGrass","ItemPlantThermogenic_Creative","ItemPlantThermogenic_Genepool1","ItemPlantThermogenic_Genepool2","ItemPlasticSheets","ItemPotato","ItemPotatoBaked","ItemPowerConnector","ItemPumpkin","ItemPumpkinPie","ItemPumpkinSoup","ItemPureIce","ItemPureIceCarbonDioxide","ItemPureIceHydrogen","ItemPureIceLiquidCarbonDioxide","ItemPureIceLiquidHydrogen","ItemPureIceLiquidNitrogen","ItemPureIceLiquidNitrous","ItemPureIceLiquidOxygen","ItemPureIceLiquidPollutant","ItemPureIceLiquidVolatiles","ItemPureIceNitrogen","ItemPureIceNitrous","ItemPureIceOxygen","ItemPureIcePollutant","ItemPureIcePollutedWater","ItemPureIceSteam","ItemPureIceVolatiles","ItemRTG","ItemRTGSurvival","ItemReagentMix","ItemRemoteDetonator","ItemReusableFireExtinguisher","ItemRice","ItemRoadFlare","ItemRocketMiningDrillHead","ItemRocketMiningDrillHeadDurable","ItemRocketMiningDrillHeadHighSpeedIce","ItemRocketMiningDrillHeadHighSpeedMineral","ItemRocketMiningDrillHeadIce","ItemRocketMiningDrillHeadLongTerm","ItemRocketMiningDrillHeadMineral","ItemRocketScanningHead","ItemScanner","ItemScrewdriver","ItemSecurityCamera","ItemSensorLenses","ItemSensorProcessingUnitCelestialScanner","ItemSensorProcessingUnitMesonScanner","ItemSensorProcessingUnitOreScanner","ItemSiliconIngot","ItemSiliconOre","ItemSilverIngot","ItemSilverOre","ItemSolderIngot","ItemSolidFuel","ItemSoundCartridgeBass","ItemSoundCartridgeDrums","ItemSoundCartridgeLeads","ItemSoundCartridgeSynth","ItemSoyOil","ItemSoybean","ItemSpaceCleaner","ItemSpaceHelmet","ItemSpaceIce","ItemSpaceOre","ItemSpacepack","ItemSprayCanBlack","ItemSprayCanBlue","ItemSprayCanBrown","ItemSprayCanGreen","ItemSprayCanGrey","ItemSprayCanKhaki","ItemSprayCanOrange","ItemSprayCanPink","ItemSprayCanPurple","ItemSprayCanRed","ItemSprayCanWhite","ItemSprayCanYellow","ItemSprayGun","ItemSteelFrames","ItemSteelIngot","ItemSteelSheets","ItemStelliteGlassSheets","ItemStelliteIngot","ItemSugar","ItemSugarCane","ItemSuitModCryogenicUpgrade","ItemTablet","ItemTerrainManipulator","ItemTomato","ItemTomatoSoup","ItemToolBelt","ItemTropicalPlant","ItemUraniumOre","ItemVolatiles","ItemWallCooler","ItemWallHeater","ItemWallLight","ItemWaspaloyIngot","ItemWaterBottle","ItemWaterPipeDigitalValve","ItemWaterPipeMeter","ItemWaterWallCooler","ItemWearLamp","ItemWeldingTorch","ItemWheat","ItemWireCutters","ItemWirelessBatteryCellExtraLarge","ItemWreckageAirConditioner1","ItemWreckageAirConditioner2","ItemWreckageHydroponicsTray1","ItemWreckageLargeExtendableRadiator01","ItemWreckageStructureRTG1","ItemWreckageStructureWeatherStation001","ItemWreckageStructureWeatherStation002","ItemWreckageStructureWeatherStation003","ItemWreckageStructureWeatherStation004","ItemWreckageStructureWeatherStation005","ItemWreckageStructureWeatherStation006","ItemWreckageStructureWeatherStation007","ItemWreckageStructureWeatherStation008","ItemWreckageTurbineGenerator1","ItemWreckageTurbineGenerator2","ItemWreckageTurbineGenerator3","ItemWreckageWallCooler1","ItemWreckageWallCooler2","ItemWrench","KitSDBSilo","KitStructureCombustionCentrifuge","Lander","Meteorite","MonsterEgg","MotherboardComms","MotherboardLogic","MotherboardMissionControl","MotherboardProgrammableChip","MotherboardRockets","MotherboardSorter","MothershipCore","NpcChick","NpcChicken","PipeBenderMod","PortableComposter","PortableSolarPanel","ReagentColorBlue","ReagentColorGreen","ReagentColorOrange","ReagentColorRed","ReagentColorYellow","Robot","RoverCargo","Rover_MkI","SMGMagazine","SeedBag_Cocoa","SeedBag_Corn","SeedBag_Fern","SeedBag_Mushroom","SeedBag_Potato","SeedBag_Pumpkin","SeedBag_Rice","SeedBag_Soybean","SeedBag_SugarCane","SeedBag_Switchgrass","SeedBag_Tomato","SeedBag_Wheet","SpaceShuttle","ToolPrinterMod","ToyLuna","UniformCommander","UniformMarine","UniformOrangeJumpSuit","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy","WeaponTorpedo"],"logicableItems":["Battery_Wireless_cell","Battery_Wireless_cell_Big","DynamicGPR","DynamicLight","ItemAdvancedTablet","ItemAngleGrinder","ItemArcWelder","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBeacon","ItemDrill","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyDrill","ItemEmergencySpaceHelmet","ItemFlashlight","ItemHardBackpack","ItemHardJetpack","ItemHardSuit","ItemHardsuitHelmet","ItemIntegratedCircuit10","ItemJetpackBasic","ItemLabeller","ItemLaptop","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIIDrill","ItemMKIIMiningDrill","ItemMiningBeltMKII","ItemMiningDrill","ItemMiningDrillHeavy","ItemMkIIToolbelt","ItemNVG","ItemPlantSampler","ItemRemoteDetonator","ItemSensorLenses","ItemSpaceHelmet","ItemSpacepack","ItemTablet","ItemTerrainManipulator","ItemWearLamp","ItemWirelessBatteryCellExtraLarge","PortableSolarPanel","Robot","RoverCargo","Rover_MkI","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy"]} \ No newline at end of file +{"prefabs":{"AccessCardBlack":{"prefab":{"prefab_name":"AccessCardBlack","prefab_hash":-1330388999,"desc":"","name":"Access Card (Black)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardBlue":{"prefab":{"prefab_name":"AccessCardBlue","prefab_hash":-1411327657,"desc":"","name":"Access Card (Blue)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardBrown":{"prefab":{"prefab_name":"AccessCardBrown","prefab_hash":1412428165,"desc":"","name":"Access Card (Brown)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardGray":{"prefab":{"prefab_name":"AccessCardGray","prefab_hash":-1339479035,"desc":"","name":"Access Card (Gray)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardGreen":{"prefab":{"prefab_name":"AccessCardGreen","prefab_hash":-374567952,"desc":"","name":"Access Card (Green)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardKhaki":{"prefab":{"prefab_name":"AccessCardKhaki","prefab_hash":337035771,"desc":"","name":"Access Card (Khaki)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardOrange":{"prefab":{"prefab_name":"AccessCardOrange","prefab_hash":-332896929,"desc":"","name":"Access Card (Orange)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardPink":{"prefab":{"prefab_name":"AccessCardPink","prefab_hash":431317557,"desc":"","name":"Access Card (Pink)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardPurple":{"prefab":{"prefab_name":"AccessCardPurple","prefab_hash":459843265,"desc":"","name":"Access Card (Purple)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardRed":{"prefab":{"prefab_name":"AccessCardRed","prefab_hash":-1713748313,"desc":"","name":"Access Card (Red)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardWhite":{"prefab":{"prefab_name":"AccessCardWhite","prefab_hash":2079959157,"desc":"","name":"Access Card (White)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardYellow":{"prefab":{"prefab_name":"AccessCardYellow","prefab_hash":568932536,"desc":"","name":"Access Card (Yellow)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"ApplianceChemistryStation":{"prefab":{"prefab_name":"ApplianceChemistryStation","prefab_hash":1365789392,"desc":"","name":"Chemistry Station"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"ApplianceDeskLampLeft":{"prefab":{"prefab_name":"ApplianceDeskLampLeft","prefab_hash":-1683849799,"desc":"","name":"Appliance Desk Lamp Left"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"}},"ApplianceDeskLampRight":{"prefab":{"prefab_name":"ApplianceDeskLampRight","prefab_hash":1174360780,"desc":"","name":"Appliance Desk Lamp Right"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"}},"ApplianceMicrowave":{"prefab":{"prefab_name":"ApplianceMicrowave","prefab_hash":-1136173965,"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.","name":"Microwave"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"AppliancePackagingMachine":{"prefab":{"prefab_name":"AppliancePackagingMachine","prefab_hash":-749191906,"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 ","name":"Basic Packaging Machine"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"slots":[{"name":"Export","typ":"None"}]},"AppliancePaintMixer":{"prefab":{"prefab_name":"AppliancePaintMixer","prefab_hash":-1339716113,"desc":"","name":"Paint Mixer"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"slots":[{"name":"Output","typ":"Bottle"}]},"AppliancePlantGeneticAnalyzer":{"prefab":{"prefab_name":"AppliancePlantGeneticAnalyzer","prefab_hash":-1303038067,"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.","name":"Plant Genetic Analyzer"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"slots":[{"name":"Input","typ":"Tool"}]},"AppliancePlantGeneticSplicer":{"prefab":{"prefab_name":"AppliancePlantGeneticSplicer","prefab_hash":-1094868323,"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.","name":"Plant Genetic Splicer"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"slots":[{"name":"Source Plant","typ":"Plant"},{"name":"Target Plant","typ":"Plant"}]},"AppliancePlantGeneticStabilizer":{"prefab":{"prefab_name":"AppliancePlantGeneticStabilizer","prefab_hash":871432335,"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 ","name":"Plant Genetic Stabilizer"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"slots":[{"name":"Plant","typ":"Plant"}]},"ApplianceReagentProcessor":{"prefab":{"prefab_name":"ApplianceReagentProcessor","prefab_hash":1260918085,"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.","name":"Reagent Processor"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"slots":[{"name":"Input","typ":"None"},{"name":"Output","typ":"None"}]},"ApplianceSeedTray":{"prefab":{"prefab_name":"ApplianceSeedTray","prefab_hash":142831994,"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.","name":"Appliance Seed Tray"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"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"}]},"ApplianceTabletDock":{"prefab":{"prefab_name":"ApplianceTabletDock","prefab_hash":1853941363,"desc":"","name":"Tablet Dock"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"slots":[{"name":"","typ":"Tool"}]},"AutolathePrinterMod":{"prefab":{"prefab_name":"AutolathePrinterMod","prefab_hash":221058307,"desc":"Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Autolathe Printer Mod"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"Battery_Wireless_cell":{"prefab":{"prefab_name":"Battery_Wireless_cell","prefab_hash":-462415758,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Battery","sorting_class":"Default"},"logic":{"logic_slot_types":{},"logic_types":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"Battery_Wireless_cell_Big":{"prefab":{"prefab_name":"Battery_Wireless_cell_Big","prefab_hash":-41519077,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell (Big)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Battery","sorting_class":"Default"},"logic":{"logic_slot_types":{},"logic_types":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"CardboardBox":{"prefab":{"prefab_name":"CardboardBox","prefab_hash":-1976947556,"desc":"","name":"Cardboard Box"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Storage"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"CartridgeAccessController":{"prefab":{"prefab_name":"CartridgeAccessController","prefab_hash":-1634532552,"desc":"","name":"Cartridge (Access Controller)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeAtmosAnalyser":{"prefab":{"prefab_name":"CartridgeAtmosAnalyser","prefab_hash":-1550278665,"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.","name":"Atmos Analyzer"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeConfiguration":{"prefab":{"prefab_name":"CartridgeConfiguration","prefab_hash":-932136011,"desc":"","name":"Configuration"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeElectronicReader":{"prefab":{"prefab_name":"CartridgeElectronicReader","prefab_hash":-1462180176,"desc":"","name":"eReader"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeGPS":{"prefab":{"prefab_name":"CartridgeGPS","prefab_hash":-1957063345,"desc":"","name":"GPS"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeGuide":{"prefab":{"prefab_name":"CartridgeGuide","prefab_hash":872720793,"desc":"","name":"Guide"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeMedicalAnalyser":{"prefab":{"prefab_name":"CartridgeMedicalAnalyser","prefab_hash":-1116110181,"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.","name":"Medical Analyzer"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeNetworkAnalyser":{"prefab":{"prefab_name":"CartridgeNetworkAnalyser","prefab_hash":1606989119,"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.","name":"Network Analyzer"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeOreScanner":{"prefab":{"prefab_name":"CartridgeOreScanner","prefab_hash":-1768732546,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet.","name":"Ore Scanner"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeOreScannerColor":{"prefab":{"prefab_name":"CartridgeOreScannerColor","prefab_hash":1738236580,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground in different colors on the tablet.","name":"Ore Scanner (Color)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgePlantAnalyser":{"prefab":{"prefab_name":"CartridgePlantAnalyser","prefab_hash":1101328282,"desc":"","name":"Cartridge Plant Analyser"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeTracker":{"prefab":{"prefab_name":"CartridgeTracker","prefab_hash":81488783,"desc":"","name":"Tracker"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CircuitboardAdvAirlockControl":{"prefab":{"prefab_name":"CircuitboardAdvAirlockControl","prefab_hash":1633663176,"desc":"","name":"Advanced Airlock"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardAirControl":{"prefab":{"prefab_name":"CircuitboardAirControl","prefab_hash":1618019559,"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. ","name":"Air Control"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardAirlockControl":{"prefab":{"prefab_name":"CircuitboardAirlockControl","prefab_hash":912176135,"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.","name":"Airlock"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardCameraDisplay":{"prefab":{"prefab_name":"CircuitboardCameraDisplay","prefab_hash":-412104504,"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.","name":"Camera Display"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardDoorControl":{"prefab":{"prefab_name":"CircuitboardDoorControl","prefab_hash":855694771,"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.","name":"Door Control"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardGasDisplay":{"prefab":{"prefab_name":"CircuitboardGasDisplay","prefab_hash":-82343730,"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).","name":"Gas Display"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardGraphDisplay":{"prefab":{"prefab_name":"CircuitboardGraphDisplay","prefab_hash":1344368806,"desc":"","name":"Graph Display"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardHashDisplay":{"prefab":{"prefab_name":"CircuitboardHashDisplay","prefab_hash":1633074601,"desc":"","name":"Hash Display"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardModeControl":{"prefab":{"prefab_name":"CircuitboardModeControl","prefab_hash":-1134148135,"desc":"Can't decide which mode you love most? This circuit board allows you to switch any connected device between operation modes.","name":"Mode Control"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardPowerControl":{"prefab":{"prefab_name":"CircuitboardPowerControl","prefab_hash":-1923778429,"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. ","name":"Power Control"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardShipDisplay":{"prefab":{"prefab_name":"CircuitboardShipDisplay","prefab_hash":-2044446819,"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.","name":"Ship Display"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardSolarControl":{"prefab":{"prefab_name":"CircuitboardSolarControl","prefab_hash":2020180320,"desc":"Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel.","name":"Solar Control"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CompositeRollCover":{"prefab":{"prefab_name":"CompositeRollCover","prefab_hash":1228794916,"desc":"0.Operate\n1.Logic","name":"Composite Roll Cover"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"CrateMkII":{"prefab":{"prefab_name":"CrateMkII","prefab_hash":8709219,"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.","name":"Crate Mk II"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Storage"},"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"}]},"DecayedFood":{"prefab":{"prefab_name":"DecayedFood","prefab_hash":1531087544,"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","name":"Decayed Food"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":25,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"DeviceLfoVolume":{"prefab":{"prefab_name":"DeviceLfoVolume","prefab_hash":-1844430312,"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.","name":"Low frequency oscillator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","Time":"ReadWrite","Bpm":"ReadWrite","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Whole Note","1":"Half Note","2":"Quarter Note","3":"Eighth Note","4":"Sixteenth Note"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"DeviceStepUnit":{"prefab":{"prefab_name":"DeviceStepUnit","prefab_hash":1762696475,"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","name":"Device Step Unit"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Volume":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"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"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"DynamicAirConditioner":{"prefab":{"prefab_name":"DynamicAirConditioner","prefab_hash":519913639,"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.","name":"Portable Air Conditioner"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicCrate":{"prefab":{"prefab_name":"DynamicCrate","prefab_hash":1941079206,"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.","name":"Dynamic Crate"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Storage"},"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"}]},"DynamicGPR":{"prefab":{"prefab_name":"DynamicGPR","prefab_hash":-2085885850,"desc":"","name":""},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicGasCanisterAir":{"prefab":{"prefab_name":"DynamicGasCanisterAir","prefab_hash":-1713611165,"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.","name":"Portable Gas Tank (Air)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterCarbonDioxide":{"prefab":{"prefab_name":"DynamicGasCanisterCarbonDioxide","prefab_hash":-322413931,"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.","name":"Portable Gas Tank (CO2)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterEmpty":{"prefab":{"prefab_name":"DynamicGasCanisterEmpty","prefab_hash":-1741267161,"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.","name":"Portable Gas Tank"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterFuel":{"prefab":{"prefab_name":"DynamicGasCanisterFuel","prefab_hash":-817051527,"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.","name":"Portable Gas Tank (Fuel)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrogen":{"prefab":{"prefab_name":"DynamicGasCanisterNitrogen","prefab_hash":121951301,"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.","name":"Portable Gas Tank (Nitrogen)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrousOxide":{"prefab":{"prefab_name":"DynamicGasCanisterNitrousOxide","prefab_hash":30727200,"desc":"","name":"Portable Gas Tank (Nitrous Oxide)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterOxygen":{"prefab":{"prefab_name":"DynamicGasCanisterOxygen","prefab_hash":1360925836,"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.","name":"Portable Gas Tank (Oxygen)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterPollutants":{"prefab":{"prefab_name":"DynamicGasCanisterPollutants","prefab_hash":396065382,"desc":"","name":"Portable Gas Tank (Pollutants)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterRocketFuel":{"prefab":{"prefab_name":"DynamicGasCanisterRocketFuel","prefab_hash":-8883951,"desc":"","name":"Dynamic Gas Canister Rocket Fuel"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterVolatiles":{"prefab":{"prefab_name":"DynamicGasCanisterVolatiles","prefab_hash":108086870,"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.","name":"Portable Gas Tank (Volatiles)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterWater":{"prefab":{"prefab_name":"DynamicGasCanisterWater","prefab_hash":197293625,"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.","name":"Portable Liquid Tank (Water)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"LiquidCanister"}]},"DynamicGasTankAdvanced":{"prefab":{"prefab_name":"DynamicGasTankAdvanced","prefab_hash":-386375420,"desc":"0.Mode0\n1.Mode1","name":"Gas Tank Mk II"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasTankAdvancedOxygen":{"prefab":{"prefab_name":"DynamicGasTankAdvancedOxygen","prefab_hash":-1264455519,"desc":"0.Mode0\n1.Mode1","name":"Portable Gas Tank Mk II (Oxygen)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGenerator":{"prefab":{"prefab_name":"DynamicGenerator","prefab_hash":-82087220,"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.","name":"Portable Generator"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"GasCanister"},{"name":"Battery","typ":"Battery"}]},"DynamicHydroponics":{"prefab":{"prefab_name":"DynamicHydroponics","prefab_hash":587726607,"desc":"","name":"Portable Hydroponics"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"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"}]},"DynamicLight":{"prefab":{"prefab_name":"DynamicLight","prefab_hash":-21970188,"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.","name":"Portable Light"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Open":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicLiquidCanisterEmpty":{"prefab":{"prefab_name":"DynamicLiquidCanisterEmpty","prefab_hash":-1939209112,"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.","name":"Portable Liquid Tank"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterEmpty":{"prefab":{"prefab_name":"DynamicMKIILiquidCanisterEmpty","prefab_hash":2130739600,"desc":"An empty, insulated liquid Gas Canister.","name":"Portable Liquid Tank Mk II"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterWater":{"prefab":{"prefab_name":"DynamicMKIILiquidCanisterWater","prefab_hash":-319510386,"desc":"An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature.","name":"Portable Liquid Tank Mk II (Water)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicScrubber":{"prefab":{"prefab_name":"DynamicScrubber","prefab_hash":755048589,"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.","name":"Portable Air Scrubber"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"}]},"DynamicSkeleton":{"prefab":{"prefab_name":"DynamicSkeleton","prefab_hash":106953348,"desc":"","name":"Skeleton"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ElectronicPrinterMod":{"prefab":{"prefab_name":"ElectronicPrinterMod","prefab_hash":-311170652,"desc":"Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Electronic Printer Mod"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ElevatorCarrage":{"prefab":{"prefab_name":"ElevatorCarrage","prefab_hash":-110788403,"desc":"","name":"Elevator"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"EntityChick":{"prefab":{"prefab_name":"EntityChick","prefab_hash":1730165908,"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.","name":"Entity Chick"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenBrown":{"prefab":{"prefab_name":"EntityChickenBrown","prefab_hash":334097180,"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.","name":"Entity Chicken Brown"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenWhite":{"prefab":{"prefab_name":"EntityChickenWhite","prefab_hash":1010807532,"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.","name":"Entity Chicken White"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBlack":{"prefab":{"prefab_name":"EntityRoosterBlack","prefab_hash":966959649,"desc":"This is a rooster. It is black. There is dignity in this.","name":"Entity Rooster Black"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBrown":{"prefab":{"prefab_name":"EntityRoosterBrown","prefab_hash":-583103395,"desc":"The common brown rooster. Don't let it hear you say that.","name":"Entity Rooster Brown"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"Fertilizer":{"prefab":{"prefab_name":"Fertilizer","prefab_hash":1517856652,"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. ","name":"Fertilizer"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Default"}},"FireArmSMG":{"prefab":{"prefab_name":"FireArmSMG","prefab_hash":-86315541,"desc":"0.Single\n1.Auto","name":"Fire Arm SMG"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Tools"},"slots":[{"name":"","typ":"Magazine"}]},"Flag_ODA_10m":{"prefab":{"prefab_name":"Flag_ODA_10m","prefab_hash":1845441951,"desc":"","name":"Flag (ODA 10m)"},"structure":{"small_grid":true}},"Flag_ODA_4m":{"prefab":{"prefab_name":"Flag_ODA_4m","prefab_hash":1159126354,"desc":"","name":"Flag (ODA 4m)"},"structure":{"small_grid":true}},"Flag_ODA_6m":{"prefab":{"prefab_name":"Flag_ODA_6m","prefab_hash":1998634960,"desc":"","name":"Flag (ODA 6m)"},"structure":{"small_grid":true}},"Flag_ODA_8m":{"prefab":{"prefab_name":"Flag_ODA_8m","prefab_hash":-375156130,"desc":"","name":"Flag (ODA 8m)"},"structure":{"small_grid":true}},"FlareGun":{"prefab":{"prefab_name":"FlareGun","prefab_hash":118685786,"desc":"","name":"Flare Gun"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"slots":[{"name":"Magazine","typ":"Flare"},{"name":"","typ":"Blocked"}]},"H2Combustor":{"prefab":{"prefab_name":"H2Combustor","prefab_hash":1840108251,"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.","name":"H2 Combustor"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"Read","RatioSteam":"Read","RatioSteamInput":"Read","RatioSteamOutput":"Read","RatioLiquidCarbonDioxide":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","ReferenceId":"Read","RatioHydrogen":"Read","RatioLiquidHydrogen":"Read","RatioPollutedWater":"Read","NameHash":"Read"},"modes":{"0":"Idle","1":"Active"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":2,"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}},"Handgun":{"prefab":{"prefab_name":"Handgun","prefab_hash":247238062,"desc":"","name":"Handgun"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Tools"},"slots":[{"name":"Magazine","typ":"Magazine"}]},"HandgunMagazine":{"prefab":{"prefab_name":"HandgunMagazine","prefab_hash":1254383185,"desc":"","name":"Handgun Magazine"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Magazine","sorting_class":"Default"}},"HumanSkull":{"prefab":{"prefab_name":"HumanSkull","prefab_hash":-857713709,"desc":"","name":"Human Skull"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ImGuiCircuitboardAirlockControl":{"prefab":{"prefab_name":"ImGuiCircuitboardAirlockControl","prefab_hash":-73796547,"desc":"","name":"Airlock (Experimental)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"ItemActiveVent":{"prefab":{"prefab_name":"ItemActiveVent","prefab_hash":-842048328,"desc":"When constructed, this kit places an Active Vent on any support structure.","name":"Kit (Active Vent)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemAdhesiveInsulation":{"prefab":{"prefab_name":"ItemAdhesiveInsulation","prefab_hash":1871048978,"desc":"","name":"Adhesive Insulation"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":20,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemAdvancedTablet":{"prefab":{"prefab_name":"ItemAdvancedTablet","prefab_hash":1722785341,"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","name":"Advanced Tablet"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"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"},"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"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","On":"ReadWrite","Volume":"ReadWrite","SoundAlert":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":true,"circuit_holder":true},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"},{"name":"Cartridge1","typ":"Cartridge"},{"name":"Programmable Chip","typ":"ProgrammableChip"}]},"ItemAlienMushroom":{"prefab":{"prefab_name":"ItemAlienMushroom","prefab_hash":176446172,"desc":"","name":"Alien Mushroom"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Default"}},"ItemAmmoBox":{"prefab":{"prefab_name":"ItemAmmoBox","prefab_hash":-9559091,"desc":"","name":"Ammo Box"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemAngleGrinder":{"prefab":{"prefab_name":"ItemAngleGrinder","prefab_hash":201215010,"desc":"Angles-be-gone with the trusty angle grinder.","name":"Angle Grinder"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemArcWelder":{"prefab":{"prefab_name":"ItemArcWelder","prefab_hash":1385062886,"desc":"","name":"Arc Welder"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemAreaPowerControl":{"prefab":{"prefab_name":"ItemAreaPowerControl","prefab_hash":1757673317,"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.","name":"Kit (Power Controller)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemAstroloyIngot":{"prefab":{"prefab_name":"ItemAstroloyIngot","prefab_hash":412924554,"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.","name":"Ingot (Astroloy)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Astroloy":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemAstroloySheets":{"prefab":{"prefab_name":"ItemAstroloySheets","prefab_hash":-1662476145,"desc":"","name":"Astroloy Sheets"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"None","sorting_class":"Resources"}},"ItemAuthoringTool":{"prefab":{"prefab_name":"ItemAuthoringTool","prefab_hash":789015045,"desc":"","name":"Authoring Tool"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemAuthoringToolRocketNetwork":{"prefab":{"prefab_name":"ItemAuthoringToolRocketNetwork","prefab_hash":-1731627004,"desc":"","name":""},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemBasketBall":{"prefab":{"prefab_name":"ItemBasketBall","prefab_hash":-1262580790,"desc":"","name":"Basket Ball"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemBatteryCell":{"prefab":{"prefab_name":"ItemBatteryCell","prefab_hash":700133157,"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.","name":"Battery Cell (Small)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Battery","sorting_class":"Default"},"logic":{"logic_slot_types":{},"logic_types":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"ItemBatteryCellLarge":{"prefab":{"prefab_name":"ItemBatteryCellLarge","prefab_hash":-459827268,"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","name":"Battery Cell (Large)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Battery","sorting_class":"Default"},"logic":{"logic_slot_types":{},"logic_types":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"ItemBatteryCellNuclear":{"prefab":{"prefab_name":"ItemBatteryCellNuclear","prefab_hash":544617306,"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.","name":"Battery Cell (Nuclear)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Battery","sorting_class":"Default"},"logic":{"logic_slot_types":{},"logic_types":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"ItemBatteryCharger":{"prefab":{"prefab_name":"ItemBatteryCharger","prefab_hash":-1866880307,"desc":"This kit produces a 5-slot Kit (Battery Charger).","name":"Kit (Battery Charger)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemBatteryChargerSmall":{"prefab":{"prefab_name":"ItemBatteryChargerSmall","prefab_hash":1008295833,"desc":"","name":"Battery Charger Small"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemBeacon":{"prefab":{"prefab_name":"ItemBeacon","prefab_hash":-869869491,"desc":"","name":"Tracking Beacon"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemBiomass":{"prefab":{"prefab_name":"ItemBiomass","prefab_hash":-831480639,"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).","name":"Biomass"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"Biomass":1.0},"slot_class":"Ore","sorting_class":"Resources"}},"ItemBreadLoaf":{"prefab":{"prefab_name":"ItemBreadLoaf","prefab_hash":893514943,"desc":"","name":"Bread Loaf"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemCableAnalyser":{"prefab":{"prefab_name":"ItemCableAnalyser","prefab_hash":-1792787349,"desc":"","name":"Kit (Cable Analyzer)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemCableCoil":{"prefab":{"prefab_name":"ItemCableCoil","prefab_hash":-466050668,"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).","name":"Cable Coil"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Tool","sorting_class":"Resources"}},"ItemCableCoilHeavy":{"prefab":{"prefab_name":"ItemCableCoilHeavy","prefab_hash":2060134443,"desc":"Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW.","name":"Cable Coil (Heavy)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Tool","sorting_class":"Resources"}},"ItemCableFuse":{"prefab":{"prefab_name":"ItemCableFuse","prefab_hash":195442047,"desc":"","name":"Kit (Cable Fuses)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Resources"}},"ItemCannedCondensedMilk":{"prefab":{"prefab_name":"ItemCannedCondensedMilk","prefab_hash":-2104175091,"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.","name":"Canned Condensed Milk"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemCannedEdamame":{"prefab":{"prefab_name":"ItemCannedEdamame","prefab_hash":-999714082,"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.","name":"Canned Edamame"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemCannedMushroom":{"prefab":{"prefab_name":"ItemCannedMushroom","prefab_hash":-1344601965,"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.","name":"Canned Mushroom"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemCannedPowderedEggs":{"prefab":{"prefab_name":"ItemCannedPowderedEggs","prefab_hash":1161510063,"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.","name":"Canned Powdered Eggs"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemCannedRicePudding":{"prefab":{"prefab_name":"ItemCannedRicePudding","prefab_hash":-1185552595,"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.","name":"Canned Rice Pudding"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemCerealBar":{"prefab":{"prefab_name":"ItemCerealBar","prefab_hash":791746840,"desc":"Sustains, without decay. If only all our relationships were so well balanced.","name":"Cereal Bar"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemCharcoal":{"prefab":{"prefab_name":"ItemCharcoal","prefab_hash":252561409,"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.","name":"Charcoal"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":200,"reagents":{"Carbon":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemChemLightBlue":{"prefab":{"prefab_name":"ItemChemLightBlue","prefab_hash":-772542081,"desc":"A safe and slightly rave-some source of blue light. Snap to activate.","name":"Chem Light (Blue)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemChemLightGreen":{"prefab":{"prefab_name":"ItemChemLightGreen","prefab_hash":-597479390,"desc":"Enliven the dreariest, airless rock with this glowy green light. Snap to activate.","name":"Chem Light (Green)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemChemLightRed":{"prefab":{"prefab_name":"ItemChemLightRed","prefab_hash":-525810132,"desc":"A red glowstick. Snap to activate. Then reach for the lasers.","name":"Chem Light (Red)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemChemLightWhite":{"prefab":{"prefab_name":"ItemChemLightWhite","prefab_hash":1312166823,"desc":"Snap the glowstick to activate a pale radiance that keeps the darkness at bay.","name":"Chem Light (White)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemChemLightYellow":{"prefab":{"prefab_name":"ItemChemLightYellow","prefab_hash":1224819963,"desc":"Dispel the darkness with this yellow glowstick.","name":"Chem Light (Yellow)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemChocolateBar":{"prefab":{"prefab_name":"ItemChocolateBar","prefab_hash":234601764,"desc":"","name":"Chocolate Bar"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemChocolateCake":{"prefab":{"prefab_name":"ItemChocolateCake","prefab_hash":-261575861,"desc":"","name":"Chocolate Cake"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemChocolateCerealBar":{"prefab":{"prefab_name":"ItemChocolateCerealBar","prefab_hash":860793245,"desc":"","name":"Chocolate Cereal Bar"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemCoalOre":{"prefab":{"prefab_name":"ItemCoalOre","prefab_hash":1724793494,"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).","name":"Ore (Coal)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Hydrocarbon":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemCobaltOre":{"prefab":{"prefab_name":"ItemCobaltOre","prefab_hash":-983091249,"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.","name":"Ore (Cobalt)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Cobalt":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemCocoaPowder":{"prefab":{"prefab_name":"ItemCocoaPowder","prefab_hash":457286516,"desc":"","name":"Cocoa Powder"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":20,"reagents":{"Cocoa":1.0},"slot_class":"None","sorting_class":"Resources"}},"ItemCocoaTree":{"prefab":{"prefab_name":"ItemCocoaTree","prefab_hash":680051921,"desc":"","name":"Cocoa"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":20,"reagents":{"Cocoa":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemCoffeeMug":{"prefab":{"prefab_name":"ItemCoffeeMug","prefab_hash":1800622698,"desc":"","name":"Coffee Mug"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemConstantanIngot":{"prefab":{"prefab_name":"ItemConstantanIngot","prefab_hash":1058547521,"desc":"","name":"Ingot (Constantan)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Constantan":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemCookedCondensedMilk":{"prefab":{"prefab_name":"ItemCookedCondensedMilk","prefab_hash":1715917521,"desc":"A high-nutrient cooked food, which can be canned.","name":"Condensed Milk"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":10,"reagents":{"Milk":100.0},"slot_class":"None","sorting_class":"Food"}},"ItemCookedCorn":{"prefab":{"prefab_name":"ItemCookedCorn","prefab_hash":1344773148,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Corn"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":10,"reagents":{"Corn":1.0},"slot_class":"None","sorting_class":"Food"}},"ItemCookedMushroom":{"prefab":{"prefab_name":"ItemCookedMushroom","prefab_hash":-1076892658,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Mushroom"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":10,"reagents":{"Mushroom":1.0},"slot_class":"None","sorting_class":"Food"}},"ItemCookedPowderedEggs":{"prefab":{"prefab_name":"ItemCookedPowderedEggs","prefab_hash":-1712264413,"desc":"A high-nutrient cooked food, which can be canned.","name":"Powdered Eggs"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":10,"reagents":{"Egg":1.0},"slot_class":"None","sorting_class":"Food"}},"ItemCookedPumpkin":{"prefab":{"prefab_name":"ItemCookedPumpkin","prefab_hash":1849281546,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Pumpkin"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":10,"reagents":{"Pumpkin":1.0},"slot_class":"None","sorting_class":"Food"}},"ItemCookedRice":{"prefab":{"prefab_name":"ItemCookedRice","prefab_hash":2013539020,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Rice"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":10,"reagents":{"Rice":1.0},"slot_class":"None","sorting_class":"Food"}},"ItemCookedSoybean":{"prefab":{"prefab_name":"ItemCookedSoybean","prefab_hash":1353449022,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Soybean"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":10,"reagents":{"Soy":5.0},"slot_class":"None","sorting_class":"Food"}},"ItemCookedTomato":{"prefab":{"prefab_name":"ItemCookedTomato","prefab_hash":-709086714,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Tomato"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":10,"reagents":{"Tomato":1.0},"slot_class":"None","sorting_class":"Food"}},"ItemCopperIngot":{"prefab":{"prefab_name":"ItemCopperIngot","prefab_hash":-404336834,"desc":"Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items.","name":"Ingot (Copper)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Copper":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemCopperOre":{"prefab":{"prefab_name":"ItemCopperOre","prefab_hash":-707307845,"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.","name":"Ore (Copper)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Copper":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemCorn":{"prefab":{"prefab_name":"ItemCorn","prefab_hash":258339687,"desc":"A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light.","name":"Corn"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":20,"reagents":{"Corn":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemCornSoup":{"prefab":{"prefab_name":"ItemCornSoup","prefab_hash":545034114,"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.","name":"Corn Soup"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemCreditCard":{"prefab":{"prefab_name":"ItemCreditCard","prefab_hash":-1756772618,"desc":"","name":"Credit Card"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100000,"reagents":null,"slot_class":"CreditCard","sorting_class":"Tools"}},"ItemCropHay":{"prefab":{"prefab_name":"ItemCropHay","prefab_hash":215486157,"desc":"","name":"Hay"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemCrowbar":{"prefab":{"prefab_name":"ItemCrowbar","prefab_hash":856108234,"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.","name":"Crowbar"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemDataDisk":{"prefab":{"prefab_name":"ItemDataDisk","prefab_hash":1005843700,"desc":"","name":"Data Disk"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"DataDisk","sorting_class":"Default"}},"ItemDirtCanister":{"prefab":{"prefab_name":"ItemDirtCanister","prefab_hash":902565329,"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.","name":"Dirt Canister"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Ore","sorting_class":"Default"}},"ItemDirtyOre":{"prefab":{"prefab_name":"ItemDirtyOre","prefab_hash":-1234745580,"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. ","name":"Dirty Ore"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"None","sorting_class":"Ores"}},"ItemDisposableBatteryCharger":{"prefab":{"prefab_name":"ItemDisposableBatteryCharger","prefab_hash":-2124435700,"desc":"Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery.","name":"Disposable Battery Charger"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemDrill":{"prefab":{"prefab_name":"ItemDrill","prefab_hash":2009673399,"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.","name":"Hand Drill"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemDuctTape":{"prefab":{"prefab_name":"ItemDuctTape","prefab_hash":-1943134693,"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.","name":"Duct Tape"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemDynamicAirCon":{"prefab":{"prefab_name":"ItemDynamicAirCon","prefab_hash":1072914031,"desc":"","name":"Kit (Portable Air Conditioner)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemDynamicScrubber":{"prefab":{"prefab_name":"ItemDynamicScrubber","prefab_hash":-971920158,"desc":"","name":"Kit (Portable Scrubber)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemEggCarton":{"prefab":{"prefab_name":"ItemEggCarton","prefab_hash":-524289310,"desc":"Within, eggs reside in mysterious, marmoreal silence.","name":"Egg Carton"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Storage"},"slots":[{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"}]},"ItemElectronicParts":{"prefab":{"prefab_name":"ItemElectronicParts","prefab_hash":731250882,"desc":"","name":"Electronic Parts"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":20,"reagents":null,"slot_class":"None","sorting_class":"Resources"}},"ItemElectrumIngot":{"prefab":{"prefab_name":"ItemElectrumIngot","prefab_hash":502280180,"desc":"","name":"Ingot (Electrum)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Electrum":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemEmergencyAngleGrinder":{"prefab":{"prefab_name":"ItemEmergencyAngleGrinder","prefab_hash":-351438780,"desc":"","name":"Emergency Angle Grinder"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyArcWelder":{"prefab":{"prefab_name":"ItemEmergencyArcWelder","prefab_hash":-1056029600,"desc":"","name":"Emergency Arc Welder"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyCrowbar":{"prefab":{"prefab_name":"ItemEmergencyCrowbar","prefab_hash":976699731,"desc":"","name":"Emergency Crowbar"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemEmergencyDrill":{"prefab":{"prefab_name":"ItemEmergencyDrill","prefab_hash":-2052458905,"desc":"","name":"Emergency Drill"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyEvaSuit":{"prefab":{"prefab_name":"ItemEmergencyEvaSuit","prefab_hash":1791306431,"desc":"","name":"Emergency Eva Suit"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Suit","sorting_class":"Clothing"},"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"}]},"ItemEmergencyPickaxe":{"prefab":{"prefab_name":"ItemEmergencyPickaxe","prefab_hash":-1061510408,"desc":"","name":"Emergency Pickaxe"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemEmergencyScrewdriver":{"prefab":{"prefab_name":"ItemEmergencyScrewdriver","prefab_hash":266099983,"desc":"","name":"Emergency Screwdriver"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemEmergencySpaceHelmet":{"prefab":{"prefab_name":"ItemEmergencySpaceHelmet","prefab_hash":205916793,"desc":"","name":"Emergency Space Helmet"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Helmet","sorting_class":"Clothing"},"logic":{"logic_slot_types":{},"logic_types":{"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"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"ItemEmergencyToolBelt":{"prefab":{"prefab_name":"ItemEmergencyToolBelt","prefab_hash":1661941301,"desc":"","name":"Emergency Tool Belt"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Belt","sorting_class":"Clothing"},"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"}]},"ItemEmergencyWireCutters":{"prefab":{"prefab_name":"ItemEmergencyWireCutters","prefab_hash":2102803952,"desc":"","name":"Emergency Wire Cutters"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemEmergencyWrench":{"prefab":{"prefab_name":"ItemEmergencyWrench","prefab_hash":162553030,"desc":"","name":"Emergency Wrench"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemEmptyCan":{"prefab":{"prefab_name":"ItemEmptyCan","prefab_hash":1013818348,"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.","name":"Empty Can"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":10,"reagents":{"Steel":1.0},"slot_class":"None","sorting_class":"Default"}},"ItemEvaSuit":{"prefab":{"prefab_name":"ItemEvaSuit","prefab_hash":1677018918,"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.","name":"Eva Suit"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Suit","sorting_class":"Clothing"},"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"}]},"ItemExplosive":{"prefab":{"prefab_name":"ItemExplosive","prefab_hash":235361649,"desc":"","name":"Remote Explosive"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemFern":{"prefab":{"prefab_name":"ItemFern","prefab_hash":892110467,"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.","name":"Fern"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"Fenoxitone":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemFertilizedEgg":{"prefab":{"prefab_name":"ItemFertilizedEgg","prefab_hash":-383972371,"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.","name":"Egg"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":1,"reagents":{"Egg":1.0},"slot_class":"Egg","sorting_class":"Resources"}},"ItemFilterFern":{"prefab":{"prefab_name":"ItemFilterFern","prefab_hash":266654416,"desc":"A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant.","name":"Darga Fern"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemFlagSmall":{"prefab":{"prefab_name":"ItemFlagSmall","prefab_hash":2011191088,"desc":"","name":"Kit (Small Flag)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemFlashingLight":{"prefab":{"prefab_name":"ItemFlashingLight","prefab_hash":-2107840748,"desc":"","name":"Kit (Flashing Light)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemFlashlight":{"prefab":{"prefab_name":"ItemFlashlight","prefab_hash":-838472102,"desc":"A flashlight with a narrow and wide beam options.","name":"Flashlight"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Low Power","1":"High Power"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemFlour":{"prefab":{"prefab_name":"ItemFlour","prefab_hash":-665995854,"desc":"Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven).","name":"Flour"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Flour":50.0},"slot_class":"None","sorting_class":"Resources"}},"ItemFlowerBlue":{"prefab":{"prefab_name":"ItemFlowerBlue","prefab_hash":-1573623434,"desc":"","name":"Flower (Blue)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemFlowerGreen":{"prefab":{"prefab_name":"ItemFlowerGreen","prefab_hash":-1513337058,"desc":"","name":"Flower (Green)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemFlowerOrange":{"prefab":{"prefab_name":"ItemFlowerOrange","prefab_hash":-1411986716,"desc":"","name":"Flower (Orange)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemFlowerRed":{"prefab":{"prefab_name":"ItemFlowerRed","prefab_hash":-81376085,"desc":"","name":"Flower (Red)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemFlowerYellow":{"prefab":{"prefab_name":"ItemFlowerYellow","prefab_hash":1712822019,"desc":"","name":"Flower (Yellow)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemFrenchFries":{"prefab":{"prefab_name":"ItemFrenchFries","prefab_hash":-57608687,"desc":"Because space would suck without 'em.","name":"Canned French Fries"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemFries":{"prefab":{"prefab_name":"ItemFries","prefab_hash":1371786091,"desc":"","name":"French Fries"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemGasCanisterCarbonDioxide":{"prefab":{"prefab_name":"ItemGasCanisterCarbonDioxide","prefab_hash":-767685874,"desc":"","name":"Canister (CO2)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemGasCanisterEmpty":{"prefab":{"prefab_name":"ItemGasCanisterEmpty","prefab_hash":42280099,"desc":"","name":"Canister"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemGasCanisterFuel":{"prefab":{"prefab_name":"ItemGasCanisterFuel","prefab_hash":-1014695176,"desc":"","name":"Canister (Fuel)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemGasCanisterNitrogen":{"prefab":{"prefab_name":"ItemGasCanisterNitrogen","prefab_hash":2145068424,"desc":"","name":"Canister (Nitrogen)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemGasCanisterNitrousOxide":{"prefab":{"prefab_name":"ItemGasCanisterNitrousOxide","prefab_hash":-1712153401,"desc":"","name":"Gas Canister (Sleeping)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemGasCanisterOxygen":{"prefab":{"prefab_name":"ItemGasCanisterOxygen","prefab_hash":-1152261938,"desc":"","name":"Canister (Oxygen)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemGasCanisterPollutants":{"prefab":{"prefab_name":"ItemGasCanisterPollutants","prefab_hash":-1552586384,"desc":"","name":"Canister (Pollutants)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemGasCanisterSmart":{"prefab":{"prefab_name":"ItemGasCanisterSmart","prefab_hash":-668314371,"desc":"0.Mode0\n1.Mode1","name":"Gas Canister (Smart)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemGasCanisterVolatiles":{"prefab":{"prefab_name":"ItemGasCanisterVolatiles","prefab_hash":-472094806,"desc":"","name":"Canister (Volatiles)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemGasCanisterWater":{"prefab":{"prefab_name":"ItemGasCanisterWater","prefab_hash":-1854861891,"desc":"","name":"Liquid Canister (Water)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"LiquidCanister","sorting_class":"Atmospherics"}},"ItemGasFilterCarbonDioxide":{"prefab":{"prefab_name":"ItemGasFilterCarbonDioxide","prefab_hash":1635000764,"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.","name":"Filter (Carbon Dioxide)"},"item":{"consumable":false,"filter_type":"CarbonDioxide","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterCarbonDioxideInfinite":{"prefab":{"prefab_name":"ItemGasFilterCarbonDioxideInfinite","prefab_hash":-185568964,"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.","name":"Catalytic Filter (Carbon Dioxide)"},"item":{"consumable":false,"filter_type":"CarbonDioxide","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterCarbonDioxideL":{"prefab":{"prefab_name":"ItemGasFilterCarbonDioxideL","prefab_hash":1876847024,"desc":"","name":"Heavy Filter (Carbon Dioxide)"},"item":{"consumable":false,"filter_type":"CarbonDioxide","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterCarbonDioxideM":{"prefab":{"prefab_name":"ItemGasFilterCarbonDioxideM","prefab_hash":416897318,"desc":"","name":"Medium Filter (Carbon Dioxide)"},"item":{"consumable":false,"filter_type":"CarbonDioxide","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterNitrogen":{"prefab":{"prefab_name":"ItemGasFilterNitrogen","prefab_hash":632853248,"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.","name":"Filter (Nitrogen)"},"item":{"consumable":false,"filter_type":"Nitrogen","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterNitrogenInfinite":{"prefab":{"prefab_name":"ItemGasFilterNitrogenInfinite","prefab_hash":152751131,"desc":"A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Nitrogen)"},"item":{"consumable":false,"filter_type":"Nitrogen","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterNitrogenL":{"prefab":{"prefab_name":"ItemGasFilterNitrogenL","prefab_hash":-1387439451,"desc":"","name":"Heavy Filter (Nitrogen)"},"item":{"consumable":false,"filter_type":"Nitrogen","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterNitrogenM":{"prefab":{"prefab_name":"ItemGasFilterNitrogenM","prefab_hash":-632657357,"desc":"","name":"Medium Filter (Nitrogen)"},"item":{"consumable":false,"filter_type":"Nitrogen","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterNitrousOxide":{"prefab":{"prefab_name":"ItemGasFilterNitrousOxide","prefab_hash":-1247674305,"desc":"","name":"Filter (Nitrous Oxide)"},"item":{"consumable":false,"filter_type":"NitrousOxide","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterNitrousOxideInfinite":{"prefab":{"prefab_name":"ItemGasFilterNitrousOxideInfinite","prefab_hash":-123934842,"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.","name":"Catalytic Filter (Nitrous Oxide)"},"item":{"consumable":false,"filter_type":"NitrousOxide","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterNitrousOxideL":{"prefab":{"prefab_name":"ItemGasFilterNitrousOxideL","prefab_hash":465267979,"desc":"","name":"Heavy Filter (Nitrous Oxide)"},"item":{"consumable":false,"filter_type":"NitrousOxide","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterNitrousOxideM":{"prefab":{"prefab_name":"ItemGasFilterNitrousOxideM","prefab_hash":1824284061,"desc":"","name":"Medium Filter (Nitrous Oxide)"},"item":{"consumable":false,"filter_type":"NitrousOxide","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterOxygen":{"prefab":{"prefab_name":"ItemGasFilterOxygen","prefab_hash":-721824748,"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).","name":"Filter (Oxygen)"},"item":{"consumable":false,"filter_type":"Oxygen","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterOxygenInfinite":{"prefab":{"prefab_name":"ItemGasFilterOxygenInfinite","prefab_hash":-1055451111,"desc":"A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Oxygen)"},"item":{"consumable":false,"filter_type":"Oxygen","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterOxygenL":{"prefab":{"prefab_name":"ItemGasFilterOxygenL","prefab_hash":-1217998945,"desc":"","name":"Heavy Filter (Oxygen)"},"item":{"consumable":false,"filter_type":"Oxygen","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterOxygenM":{"prefab":{"prefab_name":"ItemGasFilterOxygenM","prefab_hash":-1067319543,"desc":"","name":"Medium Filter (Oxygen)"},"item":{"consumable":false,"filter_type":"Oxygen","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterPollutants":{"prefab":{"prefab_name":"ItemGasFilterPollutants","prefab_hash":1915566057,"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.","name":"Filter (Pollutant)"},"item":{"consumable":false,"filter_type":"Pollutant","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterPollutantsInfinite":{"prefab":{"prefab_name":"ItemGasFilterPollutantsInfinite","prefab_hash":-503738105,"desc":"A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Pollutants)"},"item":{"consumable":false,"filter_type":"Pollutant","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterPollutantsL":{"prefab":{"prefab_name":"ItemGasFilterPollutantsL","prefab_hash":1959564765,"desc":"","name":"Heavy Filter (Pollutants)"},"item":{"consumable":false,"filter_type":"Pollutant","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterPollutantsM":{"prefab":{"prefab_name":"ItemGasFilterPollutantsM","prefab_hash":63677771,"desc":"","name":"Medium Filter (Pollutants)"},"item":{"consumable":false,"filter_type":"Pollutant","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterVolatiles":{"prefab":{"prefab_name":"ItemGasFilterVolatiles","prefab_hash":15011598,"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.","name":"Filter (Volatiles)"},"item":{"consumable":false,"filter_type":"Volatiles","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterVolatilesInfinite":{"prefab":{"prefab_name":"ItemGasFilterVolatilesInfinite","prefab_hash":-1916176068,"desc":"A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Volatiles)"},"item":{"consumable":false,"filter_type":"Volatiles","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterVolatilesL":{"prefab":{"prefab_name":"ItemGasFilterVolatilesL","prefab_hash":1255156286,"desc":"","name":"Heavy Filter (Volatiles)"},"item":{"consumable":false,"filter_type":"Volatiles","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterVolatilesM":{"prefab":{"prefab_name":"ItemGasFilterVolatilesM","prefab_hash":1037507240,"desc":"","name":"Medium Filter (Volatiles)"},"item":{"consumable":false,"filter_type":"Volatiles","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterWater":{"prefab":{"prefab_name":"ItemGasFilterWater","prefab_hash":-1993197973,"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)","name":"Filter (Water)"},"item":{"consumable":false,"filter_type":"Steam","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterWaterInfinite":{"prefab":{"prefab_name":"ItemGasFilterWaterInfinite","prefab_hash":-1678456554,"desc":"A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Water)"},"item":{"consumable":false,"filter_type":"Steam","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterWaterL":{"prefab":{"prefab_name":"ItemGasFilterWaterL","prefab_hash":2004969680,"desc":"","name":"Heavy Filter (Water)"},"item":{"consumable":false,"filter_type":"Steam","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterWaterM":{"prefab":{"prefab_name":"ItemGasFilterWaterM","prefab_hash":8804422,"desc":"","name":"Medium Filter (Water)"},"item":{"consumable":false,"filter_type":"Steam","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasSensor":{"prefab":{"prefab_name":"ItemGasSensor","prefab_hash":1717593480,"desc":"","name":"Kit (Gas Sensor)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemGasTankStorage":{"prefab":{"prefab_name":"ItemGasTankStorage","prefab_hash":-2113012215,"desc":"This kit produces a Kit (Canister Storage) for refilling a Canister.","name":"Kit (Canister Storage)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemGlassSheets":{"prefab":{"prefab_name":"ItemGlassSheets","prefab_hash":1588896491,"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.","name":"Glass Sheets"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"None","sorting_class":"Resources"}},"ItemGlasses":{"prefab":{"prefab_name":"ItemGlasses","prefab_hash":-1068925231,"desc":"","name":"Glasses"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Glasses","sorting_class":"Clothing"}},"ItemGoldIngot":{"prefab":{"prefab_name":"ItemGoldIngot","prefab_hash":226410516,"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. ","name":"Ingot (Gold)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Gold":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemGoldOre":{"prefab":{"prefab_name":"ItemGoldOre","prefab_hash":-1348105509,"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.","name":"Ore (Gold)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Gold":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemGrenade":{"prefab":{"prefab_name":"ItemGrenade","prefab_hash":1544275894,"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.","name":"Hand Grenade"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemHEMDroidRepairKit":{"prefab":{"prefab_name":"ItemHEMDroidRepairKit","prefab_hash":470636008,"desc":"Repairs damaged HEM-Droids to full health.","name":"HEMDroid Repair Kit"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemHardBackpack":{"prefab":{"prefab_name":"ItemHardBackpack","prefab_hash":374891127,"desc":"This backpack can be useful when you are working inside and don't need to fly around.","name":"Hardsuit Backpack"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Back","sorting_class":"Clothing"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemHardJetpack":{"prefab":{"prefab_name":"ItemHardJetpack","prefab_hash":-412551656,"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.","name":"Hardsuit Jetpack"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Back","sorting_class":"Clothing"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"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"}]},"ItemHardMiningBackPack":{"prefab":{"prefab_name":"ItemHardMiningBackPack","prefab_hash":900366130,"desc":"","name":"Hard Mining Backpack"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Back","sorting_class":"Clothing"},"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"}]},"ItemHardSuit":{"prefab":{"prefab_name":"ItemHardSuit","prefab_hash":-1758310454,"desc":"Connects to Logic Transmitter","name":"Hardsuit"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Suit","sorting_class":"Clothing"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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"},"modes":null,"transmission_receiver":false,"wireless_logic":true,"circuit_holder":true},"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"}],"memory":{"instructions":null,"memory_access":"ReadWrite","memory_size":0}},"ItemHardsuitHelmet":{"prefab":{"prefab_name":"ItemHardsuitHelmet","prefab_hash":-84573099,"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.","name":"Hardsuit Helmet"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Helmet","sorting_class":"Clothing"},"logic":{"logic_slot_types":{},"logic_types":{"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"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"ItemHastelloyIngot":{"prefab":{"prefab_name":"ItemHastelloyIngot","prefab_hash":1579842814,"desc":"","name":"Ingot (Hastelloy)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Hastelloy":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemHat":{"prefab":{"prefab_name":"ItemHat","prefab_hash":299189339,"desc":"As the name suggests, this is a hat.","name":"Hat"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Helmet","sorting_class":"Clothing"}},"ItemHighVolumeGasCanisterEmpty":{"prefab":{"prefab_name":"ItemHighVolumeGasCanisterEmpty","prefab_hash":998653377,"desc":"","name":"High Volume Gas Canister"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemHorticultureBelt":{"prefab":{"prefab_name":"ItemHorticultureBelt","prefab_hash":-1117581553,"desc":"","name":"Horticulture Belt"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Belt","sorting_class":"Clothing"},"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"}]},"ItemHydroponicTray":{"prefab":{"prefab_name":"ItemHydroponicTray","prefab_hash":-1193543727,"desc":"This kits creates a Hydroponics Tray for growing various plants.","name":"Kit (Hydroponic Tray)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemIce":{"prefab":{"prefab_name":"ItemIce","prefab_hash":1217489948,"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.","name":"Ice (Water)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemIgniter":{"prefab":{"prefab_name":"ItemIgniter","prefab_hash":890106742,"desc":"This kit creates an Kit (Igniter) unit.","name":"Kit (Igniter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemInconelIngot":{"prefab":{"prefab_name":"ItemInconelIngot","prefab_hash":-787796599,"desc":"","name":"Ingot (Inconel)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Inconel":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemInsulation":{"prefab":{"prefab_name":"ItemInsulation","prefab_hash":897176943,"desc":"Mysterious in the extreme, the function of this item is lost to the ages.","name":"Insulation"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Resources"}},"ItemIntegratedCircuit10":{"prefab":{"prefab_name":"ItemIntegratedCircuit10","prefab_hash":-744098481,"desc":"","name":"Integrated Circuit (IC10)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"ProgrammableChip","sorting_class":"Default"},"logic":{"logic_slot_types":{},"logic_types":{"LineNumber":"Read","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"memory":{"instructions":null,"memory_access":"ReadWrite","memory_size":512}},"ItemInvarIngot":{"prefab":{"prefab_name":"ItemInvarIngot","prefab_hash":-297990285,"desc":"","name":"Ingot (Invar)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Invar":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemIronFrames":{"prefab":{"prefab_name":"ItemIronFrames","prefab_hash":1225836666,"desc":"","name":"Iron Frames"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":30,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemIronIngot":{"prefab":{"prefab_name":"ItemIronIngot","prefab_hash":-1301215609,"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.","name":"Ingot (Iron)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Iron":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemIronOre":{"prefab":{"prefab_name":"ItemIronOre","prefab_hash":1758427767,"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.","name":"Ore (Iron)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Iron":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemIronSheets":{"prefab":{"prefab_name":"ItemIronSheets","prefab_hash":-487378546,"desc":"","name":"Iron Sheets"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"None","sorting_class":"Resources"}},"ItemJetpackBasic":{"prefab":{"prefab_name":"ItemJetpackBasic","prefab_hash":1969189000,"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.","name":"Jetpack Basic"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Back","sorting_class":"Clothing"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"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"}]},"ItemKitAIMeE":{"prefab":{"prefab_name":"ItemKitAIMeE","prefab_hash":496830914,"desc":"","name":"Kit (AIMeE)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAccessBridge":{"prefab":{"prefab_name":"ItemKitAccessBridge","prefab_hash":513258369,"desc":"","name":"Kit (Access Bridge)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAdvancedComposter":{"prefab":{"prefab_name":"ItemKitAdvancedComposter","prefab_hash":-1431998347,"desc":"","name":"Kit (Advanced Composter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAdvancedFurnace":{"prefab":{"prefab_name":"ItemKitAdvancedFurnace","prefab_hash":-616758353,"desc":"","name":"Kit (Advanced Furnace)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAdvancedPackagingMachine":{"prefab":{"prefab_name":"ItemKitAdvancedPackagingMachine","prefab_hash":-598545233,"desc":"","name":"Kit (Advanced Packaging Machine)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAirlock":{"prefab":{"prefab_name":"ItemKitAirlock","prefab_hash":964043875,"desc":"","name":"Kit (Airlock)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAirlockGate":{"prefab":{"prefab_name":"ItemKitAirlockGate","prefab_hash":682546947,"desc":"","name":"Kit (Hangar Door)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitArcFurnace":{"prefab":{"prefab_name":"ItemKitArcFurnace","prefab_hash":-98995857,"desc":"","name":"Kit (Arc Furnace)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAtmospherics":{"prefab":{"prefab_name":"ItemKitAtmospherics","prefab_hash":1222286371,"desc":"","name":"Kit (Atmospherics)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAutoMinerSmall":{"prefab":{"prefab_name":"ItemKitAutoMinerSmall","prefab_hash":1668815415,"desc":"","name":"Kit (Autominer Small)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAutolathe":{"prefab":{"prefab_name":"ItemKitAutolathe","prefab_hash":-1753893214,"desc":"","name":"Kit (Autolathe)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAutomatedOven":{"prefab":{"prefab_name":"ItemKitAutomatedOven","prefab_hash":-1931958659,"desc":"","name":"Kit (Automated Oven)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitBasket":{"prefab":{"prefab_name":"ItemKitBasket","prefab_hash":148305004,"desc":"","name":"Kit (Basket)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitBattery":{"prefab":{"prefab_name":"ItemKitBattery","prefab_hash":1406656973,"desc":"","name":"Kit (Battery)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitBatteryLarge":{"prefab":{"prefab_name":"ItemKitBatteryLarge","prefab_hash":-21225041,"desc":"","name":"Kit (Battery Large)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitBeacon":{"prefab":{"prefab_name":"ItemKitBeacon","prefab_hash":249073136,"desc":"","name":"Kit (Beacon)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitBeds":{"prefab":{"prefab_name":"ItemKitBeds","prefab_hash":-1241256797,"desc":"","name":"Kit (Beds)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitBlastDoor":{"prefab":{"prefab_name":"ItemKitBlastDoor","prefab_hash":-1755116240,"desc":"","name":"Kit (Blast Door)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitCentrifuge":{"prefab":{"prefab_name":"ItemKitCentrifuge","prefab_hash":578182956,"desc":"","name":"Kit (Centrifuge)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitChairs":{"prefab":{"prefab_name":"ItemKitChairs","prefab_hash":-1394008073,"desc":"","name":"Kit (Chairs)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitChute":{"prefab":{"prefab_name":"ItemKitChute","prefab_hash":1025254665,"desc":"","name":"Kit (Basic Chutes)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitChuteUmbilical":{"prefab":{"prefab_name":"ItemKitChuteUmbilical","prefab_hash":-876560854,"desc":"","name":"Kit (Chute Umbilical)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitCompositeCladding":{"prefab":{"prefab_name":"ItemKitCompositeCladding","prefab_hash":-1470820996,"desc":"","name":"Kit (Cladding)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitCompositeFloorGrating":{"prefab":{"prefab_name":"ItemKitCompositeFloorGrating","prefab_hash":1182412869,"desc":"","name":"Kit (Floor Grating)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitComputer":{"prefab":{"prefab_name":"ItemKitComputer","prefab_hash":1990225489,"desc":"","name":"Kit (Computer)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitConsole":{"prefab":{"prefab_name":"ItemKitConsole","prefab_hash":-1241851179,"desc":"","name":"Kit (Consoles)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitCrate":{"prefab":{"prefab_name":"ItemKitCrate","prefab_hash":429365598,"desc":"","name":"Kit (Crate)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitCrateMkII":{"prefab":{"prefab_name":"ItemKitCrateMkII","prefab_hash":-1585956426,"desc":"","name":"Kit (Crate Mk II)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitCrateMount":{"prefab":{"prefab_name":"ItemKitCrateMount","prefab_hash":-551612946,"desc":"","name":"Kit (Container Mount)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitCryoTube":{"prefab":{"prefab_name":"ItemKitCryoTube","prefab_hash":-545234195,"desc":"","name":"Kit (Cryo Tube)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitDeepMiner":{"prefab":{"prefab_name":"ItemKitDeepMiner","prefab_hash":-1935075707,"desc":"","name":"Kit (Deep Miner)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitDockingPort":{"prefab":{"prefab_name":"ItemKitDockingPort","prefab_hash":77421200,"desc":"","name":"Kit (Docking Port)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitDoor":{"prefab":{"prefab_name":"ItemKitDoor","prefab_hash":168615924,"desc":"","name":"Kit (Door)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitDrinkingFountain":{"prefab":{"prefab_name":"ItemKitDrinkingFountain","prefab_hash":-1743663875,"desc":"","name":"Kit (Drinking Fountain)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitDynamicCanister":{"prefab":{"prefab_name":"ItemKitDynamicCanister","prefab_hash":-1061945368,"desc":"","name":"Kit (Portable Gas Tank)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitDynamicGasTankAdvanced":{"prefab":{"prefab_name":"ItemKitDynamicGasTankAdvanced","prefab_hash":1533501495,"desc":"","name":"Kit (Portable Gas Tank Mk II)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitDynamicGenerator":{"prefab":{"prefab_name":"ItemKitDynamicGenerator","prefab_hash":-732720413,"desc":"","name":"Kit (Portable Generator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitDynamicHydroponics":{"prefab":{"prefab_name":"ItemKitDynamicHydroponics","prefab_hash":-1861154222,"desc":"","name":"Kit (Portable Hydroponics)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitDynamicLiquidCanister":{"prefab":{"prefab_name":"ItemKitDynamicLiquidCanister","prefab_hash":375541286,"desc":"","name":"Kit (Portable Liquid Tank)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitDynamicMKIILiquidCanister":{"prefab":{"prefab_name":"ItemKitDynamicMKIILiquidCanister","prefab_hash":-638019974,"desc":"","name":"Kit (Portable Liquid Tank Mk II)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitElectricUmbilical":{"prefab":{"prefab_name":"ItemKitElectricUmbilical","prefab_hash":1603046970,"desc":"","name":"Kit (Power Umbilical)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitElectronicsPrinter":{"prefab":{"prefab_name":"ItemKitElectronicsPrinter","prefab_hash":-1181922382,"desc":"","name":"Kit (Electronics Printer)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitElevator":{"prefab":{"prefab_name":"ItemKitElevator","prefab_hash":-945806652,"desc":"","name":"Kit (Elevator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitEngineLarge":{"prefab":{"prefab_name":"ItemKitEngineLarge","prefab_hash":755302726,"desc":"","name":"Kit (Engine Large)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitEngineMedium":{"prefab":{"prefab_name":"ItemKitEngineMedium","prefab_hash":1969312177,"desc":"","name":"Kit (Engine Medium)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitEngineSmall":{"prefab":{"prefab_name":"ItemKitEngineSmall","prefab_hash":19645163,"desc":"","name":"Kit (Engine Small)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitEvaporationChamber":{"prefab":{"prefab_name":"ItemKitEvaporationChamber","prefab_hash":1587787610,"desc":"","name":"Kit (Phase Change Device)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitFlagODA":{"prefab":{"prefab_name":"ItemKitFlagODA","prefab_hash":1701764190,"desc":"","name":"Kit (ODA Flag)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitFridgeBig":{"prefab":{"prefab_name":"ItemKitFridgeBig","prefab_hash":-1168199498,"desc":"","name":"Kit (Fridge Large)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitFridgeSmall":{"prefab":{"prefab_name":"ItemKitFridgeSmall","prefab_hash":1661226524,"desc":"","name":"Kit (Fridge Small)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitFurnace":{"prefab":{"prefab_name":"ItemKitFurnace","prefab_hash":-806743925,"desc":"","name":"Kit (Furnace)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitFurniture":{"prefab":{"prefab_name":"ItemKitFurniture","prefab_hash":1162905029,"desc":"","name":"Kit (Furniture)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitFuselage":{"prefab":{"prefab_name":"ItemKitFuselage","prefab_hash":-366262681,"desc":"","name":"Kit (Fuselage)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitGasGenerator":{"prefab":{"prefab_name":"ItemKitGasGenerator","prefab_hash":377745425,"desc":"","name":"Kit (Gas Fuel Generator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitGasUmbilical":{"prefab":{"prefab_name":"ItemKitGasUmbilical","prefab_hash":-1867280568,"desc":"","name":"Kit (Gas Umbilical)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitGovernedGasRocketEngine":{"prefab":{"prefab_name":"ItemKitGovernedGasRocketEngine","prefab_hash":206848766,"desc":"","name":"Kit (Pumped Gas Rocket Engine)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitGroundTelescope":{"prefab":{"prefab_name":"ItemKitGroundTelescope","prefab_hash":-2140672772,"desc":"","name":"Kit (Telescope)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitGrowLight":{"prefab":{"prefab_name":"ItemKitGrowLight","prefab_hash":341030083,"desc":"","name":"Kit (Grow Light)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitHarvie":{"prefab":{"prefab_name":"ItemKitHarvie","prefab_hash":-1022693454,"desc":"","name":"Kit (Harvie)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitHeatExchanger":{"prefab":{"prefab_name":"ItemKitHeatExchanger","prefab_hash":-1710540039,"desc":"","name":"Kit Heat Exchanger"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitHorizontalAutoMiner":{"prefab":{"prefab_name":"ItemKitHorizontalAutoMiner","prefab_hash":844391171,"desc":"","name":"Kit (OGRE)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitHydraulicPipeBender":{"prefab":{"prefab_name":"ItemKitHydraulicPipeBender","prefab_hash":-2098556089,"desc":"","name":"Kit (Hydraulic Pipe Bender)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitHydroponicAutomated":{"prefab":{"prefab_name":"ItemKitHydroponicAutomated","prefab_hash":-927931558,"desc":"","name":"Kit (Automated Hydroponics)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitHydroponicStation":{"prefab":{"prefab_name":"ItemKitHydroponicStation","prefab_hash":2057179799,"desc":"","name":"Kit (Hydroponic Station)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitIceCrusher":{"prefab":{"prefab_name":"ItemKitIceCrusher","prefab_hash":288111533,"desc":"","name":"Kit (Ice Crusher)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitInsulatedLiquidPipe":{"prefab":{"prefab_name":"ItemKitInsulatedLiquidPipe","prefab_hash":2067655311,"desc":"","name":"Kit (Insulated Liquid Pipe)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":20,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitInsulatedPipe":{"prefab":{"prefab_name":"ItemKitInsulatedPipe","prefab_hash":452636699,"desc":"","name":"Kit (Insulated Pipe)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":20,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitInsulatedPipeUtility":{"prefab":{"prefab_name":"ItemKitInsulatedPipeUtility","prefab_hash":-27284803,"desc":"","name":"Kit (Insulated Pipe Utility Gas)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitInsulatedPipeUtilityLiquid":{"prefab":{"prefab_name":"ItemKitInsulatedPipeUtilityLiquid","prefab_hash":-1831558953,"desc":"","name":"Kit (Insulated Pipe Utility Liquid)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitInteriorDoors":{"prefab":{"prefab_name":"ItemKitInteriorDoors","prefab_hash":1935945891,"desc":"","name":"Kit (Interior Doors)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLadder":{"prefab":{"prefab_name":"ItemKitLadder","prefab_hash":489494578,"desc":"","name":"Kit (Ladder)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLandingPadAtmos":{"prefab":{"prefab_name":"ItemKitLandingPadAtmos","prefab_hash":1817007843,"desc":"","name":"Kit (Landing Pad Atmospherics)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLandingPadBasic":{"prefab":{"prefab_name":"ItemKitLandingPadBasic","prefab_hash":293581318,"desc":"","name":"Kit (Landing Pad Basic)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLandingPadWaypoint":{"prefab":{"prefab_name":"ItemKitLandingPadWaypoint","prefab_hash":-1267511065,"desc":"","name":"Kit (Landing Pad Runway)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLargeDirectHeatExchanger":{"prefab":{"prefab_name":"ItemKitLargeDirectHeatExchanger","prefab_hash":450164077,"desc":"","name":"Kit (Large Direct Heat Exchanger)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLargeExtendableRadiator":{"prefab":{"prefab_name":"ItemKitLargeExtendableRadiator","prefab_hash":847430620,"desc":"","name":"Kit (Large Extendable Radiator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLargeSatelliteDish":{"prefab":{"prefab_name":"ItemKitLargeSatelliteDish","prefab_hash":-2039971217,"desc":"","name":"Kit (Large Satellite Dish)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLaunchMount":{"prefab":{"prefab_name":"ItemKitLaunchMount","prefab_hash":-1854167549,"desc":"","name":"Kit (Launch Mount)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLaunchTower":{"prefab":{"prefab_name":"ItemKitLaunchTower","prefab_hash":-174523552,"desc":"","name":"Kit (Rocket Launch Tower)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLiquidRegulator":{"prefab":{"prefab_name":"ItemKitLiquidRegulator","prefab_hash":1951126161,"desc":"","name":"Kit (Liquid Regulator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLiquidTank":{"prefab":{"prefab_name":"ItemKitLiquidTank","prefab_hash":-799849305,"desc":"","name":"Kit (Liquid Tank)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLiquidTankInsulated":{"prefab":{"prefab_name":"ItemKitLiquidTankInsulated","prefab_hash":617773453,"desc":"","name":"Kit (Insulated Liquid Tank)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLiquidTurboVolumePump":{"prefab":{"prefab_name":"ItemKitLiquidTurboVolumePump","prefab_hash":-1805020897,"desc":"","name":"Kit (Turbo Volume Pump - Liquid)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLiquidUmbilical":{"prefab":{"prefab_name":"ItemKitLiquidUmbilical","prefab_hash":1571996765,"desc":"","name":"Kit (Liquid Umbilical)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLocker":{"prefab":{"prefab_name":"ItemKitLocker","prefab_hash":882301399,"desc":"","name":"Kit (Locker)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLogicCircuit":{"prefab":{"prefab_name":"ItemKitLogicCircuit","prefab_hash":1512322581,"desc":"","name":"Kit (IC Housing)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLogicInputOutput":{"prefab":{"prefab_name":"ItemKitLogicInputOutput","prefab_hash":1997293610,"desc":"","name":"Kit (Logic I/O)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLogicMemory":{"prefab":{"prefab_name":"ItemKitLogicMemory","prefab_hash":-2098214189,"desc":"","name":"Kit (Logic Memory)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLogicProcessor":{"prefab":{"prefab_name":"ItemKitLogicProcessor","prefab_hash":220644373,"desc":"","name":"Kit (Logic Processor)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLogicSwitch":{"prefab":{"prefab_name":"ItemKitLogicSwitch","prefab_hash":124499454,"desc":"","name":"Kit (Logic Switch)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLogicTransmitter":{"prefab":{"prefab_name":"ItemKitLogicTransmitter","prefab_hash":1005397063,"desc":"","name":"Kit (Logic Transmitter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitMotherShipCore":{"prefab":{"prefab_name":"ItemKitMotherShipCore","prefab_hash":-344968335,"desc":"","name":"Kit (Mothership)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitMusicMachines":{"prefab":{"prefab_name":"ItemKitMusicMachines","prefab_hash":-2038889137,"desc":"","name":"Kit (Music Machines)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPassiveLargeRadiatorGas":{"prefab":{"prefab_name":"ItemKitPassiveLargeRadiatorGas","prefab_hash":-1752768283,"desc":"","name":"Kit (Medium Radiator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitPassiveLargeRadiatorLiquid":{"prefab":{"prefab_name":"ItemKitPassiveLargeRadiatorLiquid","prefab_hash":1453961898,"desc":"","name":"Kit (Medium Radiator Liquid)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPassthroughHeatExchanger":{"prefab":{"prefab_name":"ItemKitPassthroughHeatExchanger","prefab_hash":636112787,"desc":"","name":"Kit (CounterFlow Heat Exchanger)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPictureFrame":{"prefab":{"prefab_name":"ItemKitPictureFrame","prefab_hash":-2062364768,"desc":"","name":"Kit Picture Frame"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPipe":{"prefab":{"prefab_name":"ItemKitPipe","prefab_hash":-1619793705,"desc":"","name":"Kit (Pipe)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":20,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPipeLiquid":{"prefab":{"prefab_name":"ItemKitPipeLiquid","prefab_hash":-1166461357,"desc":"","name":"Kit (Liquid Pipe)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":20,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPipeOrgan":{"prefab":{"prefab_name":"ItemKitPipeOrgan","prefab_hash":-827125300,"desc":"","name":"Kit (Pipe Organ)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPipeRadiator":{"prefab":{"prefab_name":"ItemKitPipeRadiator","prefab_hash":920411066,"desc":"","name":"Kit (Pipe Radiator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitPipeRadiatorLiquid":{"prefab":{"prefab_name":"ItemKitPipeRadiatorLiquid","prefab_hash":-1697302609,"desc":"","name":"Kit (Pipe Radiator Liquid)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitPipeUtility":{"prefab":{"prefab_name":"ItemKitPipeUtility","prefab_hash":1934508338,"desc":"","name":"Kit (Pipe Utility Gas)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPipeUtilityLiquid":{"prefab":{"prefab_name":"ItemKitPipeUtilityLiquid","prefab_hash":595478589,"desc":"","name":"Kit (Pipe Utility Liquid)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPlanter":{"prefab":{"prefab_name":"ItemKitPlanter","prefab_hash":119096484,"desc":"","name":"Kit (Planter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPortablesConnector":{"prefab":{"prefab_name":"ItemKitPortablesConnector","prefab_hash":1041148999,"desc":"","name":"Kit (Portables Connector)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPowerTransmitter":{"prefab":{"prefab_name":"ItemKitPowerTransmitter","prefab_hash":291368213,"desc":"","name":"Kit (Power Transmitter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPowerTransmitterOmni":{"prefab":{"prefab_name":"ItemKitPowerTransmitterOmni","prefab_hash":-831211676,"desc":"","name":"Kit (Power Transmitter Omni)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPoweredVent":{"prefab":{"prefab_name":"ItemKitPoweredVent","prefab_hash":2015439334,"desc":"","name":"Kit (Powered Vent)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPressureFedGasEngine":{"prefab":{"prefab_name":"ItemKitPressureFedGasEngine","prefab_hash":-121514007,"desc":"","name":"Kit (Pressure Fed Gas Engine)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPressureFedLiquidEngine":{"prefab":{"prefab_name":"ItemKitPressureFedLiquidEngine","prefab_hash":-99091572,"desc":"","name":"Kit (Pressure Fed Liquid Engine)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPressurePlate":{"prefab":{"prefab_name":"ItemKitPressurePlate","prefab_hash":123504691,"desc":"","name":"Kit (Trigger Plate)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPumpedLiquidEngine":{"prefab":{"prefab_name":"ItemKitPumpedLiquidEngine","prefab_hash":1921918951,"desc":"","name":"Kit (Pumped Liquid Engine)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRailing":{"prefab":{"prefab_name":"ItemKitRailing","prefab_hash":750176282,"desc":"","name":"Kit (Railing)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRecycler":{"prefab":{"prefab_name":"ItemKitRecycler","prefab_hash":849148192,"desc":"","name":"Kit (Recycler)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRegulator":{"prefab":{"prefab_name":"ItemKitRegulator","prefab_hash":1181371795,"desc":"","name":"Kit (Pressure Regulator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitReinforcedWindows":{"prefab":{"prefab_name":"ItemKitReinforcedWindows","prefab_hash":1459985302,"desc":"","name":"Kit (Reinforced Windows)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitResearchMachine":{"prefab":{"prefab_name":"ItemKitResearchMachine","prefab_hash":724776762,"desc":"","name":"Kit Research Machine"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitRespawnPointWallMounted":{"prefab":{"prefab_name":"ItemKitRespawnPointWallMounted","prefab_hash":1574688481,"desc":"","name":"Kit (Respawn)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketAvionics":{"prefab":{"prefab_name":"ItemKitRocketAvionics","prefab_hash":1396305045,"desc":"","name":"Kit (Avionics)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketBattery":{"prefab":{"prefab_name":"ItemKitRocketBattery","prefab_hash":-314072139,"desc":"","name":"Kit (Rocket Battery)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketCargoStorage":{"prefab":{"prefab_name":"ItemKitRocketCargoStorage","prefab_hash":479850239,"desc":"","name":"Kit (Rocket Cargo Storage)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketCelestialTracker":{"prefab":{"prefab_name":"ItemKitRocketCelestialTracker","prefab_hash":-303008602,"desc":"","name":"Kit (Rocket Celestial Tracker)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketCircuitHousing":{"prefab":{"prefab_name":"ItemKitRocketCircuitHousing","prefab_hash":721251202,"desc":"","name":"Kit (Rocket Circuit Housing)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketDatalink":{"prefab":{"prefab_name":"ItemKitRocketDatalink","prefab_hash":-1256996603,"desc":"","name":"Kit (Rocket Datalink)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketGasFuelTank":{"prefab":{"prefab_name":"ItemKitRocketGasFuelTank","prefab_hash":-1629347579,"desc":"","name":"Kit (Rocket Gas Fuel Tank)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketLiquidFuelTank":{"prefab":{"prefab_name":"ItemKitRocketLiquidFuelTank","prefab_hash":2032027950,"desc":"","name":"Kit (Rocket Liquid Fuel Tank)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketManufactory":{"prefab":{"prefab_name":"ItemKitRocketManufactory","prefab_hash":-636127860,"desc":"","name":"Kit (Rocket Manufactory)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketMiner":{"prefab":{"prefab_name":"ItemKitRocketMiner","prefab_hash":-867969909,"desc":"","name":"Kit (Rocket Miner)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketScanner":{"prefab":{"prefab_name":"ItemKitRocketScanner","prefab_hash":1753647154,"desc":"","name":"Kit (Rocket Scanner)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketTransformerSmall":{"prefab":{"prefab_name":"ItemKitRocketTransformerSmall","prefab_hash":-932335800,"desc":"","name":"Kit (Transformer Small (Rocket))"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRoverFrame":{"prefab":{"prefab_name":"ItemKitRoverFrame","prefab_hash":1827215803,"desc":"","name":"Kit (Rover Frame)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRoverMKI":{"prefab":{"prefab_name":"ItemKitRoverMKI","prefab_hash":197243872,"desc":"","name":"Kit (Rover Mk I)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSDBHopper":{"prefab":{"prefab_name":"ItemKitSDBHopper","prefab_hash":323957548,"desc":"","name":"Kit (SDB Hopper)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSatelliteDish":{"prefab":{"prefab_name":"ItemKitSatelliteDish","prefab_hash":178422810,"desc":"","name":"Kit (Medium Satellite Dish)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSecurityPrinter":{"prefab":{"prefab_name":"ItemKitSecurityPrinter","prefab_hash":578078533,"desc":"","name":"Kit (Security Printer)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSensor":{"prefab":{"prefab_name":"ItemKitSensor","prefab_hash":-1776897113,"desc":"","name":"Kit (Sensors)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitShower":{"prefab":{"prefab_name":"ItemKitShower","prefab_hash":735858725,"desc":"","name":"Kit (Shower)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSign":{"prefab":{"prefab_name":"ItemKitSign","prefab_hash":529996327,"desc":"","name":"Kit (Sign)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSleeper":{"prefab":{"prefab_name":"ItemKitSleeper","prefab_hash":326752036,"desc":"","name":"Kit (Sleeper)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSmallDirectHeatExchanger":{"prefab":{"prefab_name":"ItemKitSmallDirectHeatExchanger","prefab_hash":-1332682164,"desc":"","name":"Kit (Small Direct Heat Exchanger)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitSmallSatelliteDish":{"prefab":{"prefab_name":"ItemKitSmallSatelliteDish","prefab_hash":1960952220,"desc":"","name":"Kit (Small Satellite Dish)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSolarPanel":{"prefab":{"prefab_name":"ItemKitSolarPanel","prefab_hash":-1924492105,"desc":"","name":"Kit (Solar Panel)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSolarPanelBasic":{"prefab":{"prefab_name":"ItemKitSolarPanelBasic","prefab_hash":844961456,"desc":"","name":"Kit (Solar Panel Basic)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitSolarPanelBasicReinforced":{"prefab":{"prefab_name":"ItemKitSolarPanelBasicReinforced","prefab_hash":-528695432,"desc":"","name":"Kit (Solar Panel Basic Heavy)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitSolarPanelReinforced":{"prefab":{"prefab_name":"ItemKitSolarPanelReinforced","prefab_hash":-364868685,"desc":"","name":"Kit (Solar Panel Heavy)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSolidGenerator":{"prefab":{"prefab_name":"ItemKitSolidGenerator","prefab_hash":1293995736,"desc":"","name":"Kit (Solid Generator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSorter":{"prefab":{"prefab_name":"ItemKitSorter","prefab_hash":969522478,"desc":"","name":"Kit (Sorter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSpeaker":{"prefab":{"prefab_name":"ItemKitSpeaker","prefab_hash":-126038526,"desc":"","name":"Kit (Speaker)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitStacker":{"prefab":{"prefab_name":"ItemKitStacker","prefab_hash":1013244511,"desc":"","name":"Kit (Stacker)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitStairs":{"prefab":{"prefab_name":"ItemKitStairs","prefab_hash":170878959,"desc":"","name":"Kit (Stairs)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitStairwell":{"prefab":{"prefab_name":"ItemKitStairwell","prefab_hash":-1868555784,"desc":"","name":"Kit (Stairwell)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitStandardChute":{"prefab":{"prefab_name":"ItemKitStandardChute","prefab_hash":2133035682,"desc":"","name":"Kit (Powered Chutes)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitStirlingEngine":{"prefab":{"prefab_name":"ItemKitStirlingEngine","prefab_hash":-1821571150,"desc":"","name":"Kit (Stirling Engine)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSuitStorage":{"prefab":{"prefab_name":"ItemKitSuitStorage","prefab_hash":1088892825,"desc":"","name":"Kit (Suit Storage)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitTables":{"prefab":{"prefab_name":"ItemKitTables","prefab_hash":-1361598922,"desc":"","name":"Kit (Tables)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitTank":{"prefab":{"prefab_name":"ItemKitTank","prefab_hash":771439840,"desc":"","name":"Kit (Tank)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitTankInsulated":{"prefab":{"prefab_name":"ItemKitTankInsulated","prefab_hash":1021053608,"desc":"","name":"Kit (Tank Insulated)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitToolManufactory":{"prefab":{"prefab_name":"ItemKitToolManufactory","prefab_hash":529137748,"desc":"","name":"Kit (Tool Manufactory)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitTransformer":{"prefab":{"prefab_name":"ItemKitTransformer","prefab_hash":-453039435,"desc":"","name":"Kit (Transformer Large)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitTransformerSmall":{"prefab":{"prefab_name":"ItemKitTransformerSmall","prefab_hash":665194284,"desc":"","name":"Kit (Transformer Small)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitTurbineGenerator":{"prefab":{"prefab_name":"ItemKitTurbineGenerator","prefab_hash":-1590715731,"desc":"","name":"Kit (Turbine Generator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitTurboVolumePump":{"prefab":{"prefab_name":"ItemKitTurboVolumePump","prefab_hash":-1248429712,"desc":"","name":"Kit (Turbo Volume Pump - Gas)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitUprightWindTurbine":{"prefab":{"prefab_name":"ItemKitUprightWindTurbine","prefab_hash":-1798044015,"desc":"","name":"Kit (Upright Wind Turbine)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitVendingMachine":{"prefab":{"prefab_name":"ItemKitVendingMachine","prefab_hash":-2038384332,"desc":"","name":"Kit (Vending Machine)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitVendingMachineRefrigerated":{"prefab":{"prefab_name":"ItemKitVendingMachineRefrigerated","prefab_hash":-1867508561,"desc":"","name":"Kit (Vending Machine Refrigerated)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWall":{"prefab":{"prefab_name":"ItemKitWall","prefab_hash":-1826855889,"desc":"","name":"Kit (Wall)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":30,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWallArch":{"prefab":{"prefab_name":"ItemKitWallArch","prefab_hash":1625214531,"desc":"","name":"Kit (Arched Wall)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":30,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWallFlat":{"prefab":{"prefab_name":"ItemKitWallFlat","prefab_hash":-846838195,"desc":"","name":"Kit (Flat Wall)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":30,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWallGeometry":{"prefab":{"prefab_name":"ItemKitWallGeometry","prefab_hash":-784733231,"desc":"","name":"Kit (Geometric Wall)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":30,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWallIron":{"prefab":{"prefab_name":"ItemKitWallIron","prefab_hash":-524546923,"desc":"","name":"Kit (Iron Wall)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":30,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWallPadded":{"prefab":{"prefab_name":"ItemKitWallPadded","prefab_hash":-821868990,"desc":"","name":"Kit (Padded Wall)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":30,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWaterBottleFiller":{"prefab":{"prefab_name":"ItemKitWaterBottleFiller","prefab_hash":159886536,"desc":"","name":"Kit (Water Bottle Filler)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWaterPurifier":{"prefab":{"prefab_name":"ItemKitWaterPurifier","prefab_hash":611181283,"desc":"","name":"Kit (Water Purifier)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWeatherStation":{"prefab":{"prefab_name":"ItemKitWeatherStation","prefab_hash":337505889,"desc":"","name":"Kit (Weather Station)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitWindTurbine":{"prefab":{"prefab_name":"ItemKitWindTurbine","prefab_hash":-868916503,"desc":"","name":"Kit (Wind Turbine)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWindowShutter":{"prefab":{"prefab_name":"ItemKitWindowShutter","prefab_hash":1779979754,"desc":"","name":"Kit (Window Shutter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemLabeller":{"prefab":{"prefab_name":"ItemLabeller","prefab_hash":-743968726,"desc":"A labeller lets you set names and values on a variety of devices and structures, including Console and Logic.","name":"Labeller"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemLaptop":{"prefab":{"prefab_name":"ItemLaptop","prefab_hash":141535121,"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","name":"Laptop"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","PressureExternal":"Read","On":"ReadWrite","TemperatureExternal":"Read","PositionX":"Read","PositionY":"Read","PositionZ":"Read","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":true,"circuit_holder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"},{"name":"Battery","typ":"Battery"},{"name":"Motherboard","typ":"Motherboard"}]},"ItemLeadIngot":{"prefab":{"prefab_name":"ItemLeadIngot","prefab_hash":2134647745,"desc":"","name":"Ingot (Lead)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Lead":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemLeadOre":{"prefab":{"prefab_name":"ItemLeadOre","prefab_hash":-190236170,"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.","name":"Ore (Lead)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Lead":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemLightSword":{"prefab":{"prefab_name":"ItemLightSword","prefab_hash":1949076595,"desc":"A charming, if useless, pseudo-weapon. (Creative only.)","name":"Light Sword"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemLiquidCanisterEmpty":{"prefab":{"prefab_name":"ItemLiquidCanisterEmpty","prefab_hash":-185207387,"desc":"","name":"Liquid Canister"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"LiquidCanister","sorting_class":"Atmospherics"}},"ItemLiquidCanisterSmart":{"prefab":{"prefab_name":"ItemLiquidCanisterSmart","prefab_hash":777684475,"desc":"0.Mode0\n1.Mode1","name":"Liquid Canister (Smart)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"LiquidCanister","sorting_class":"Atmospherics"}},"ItemLiquidDrain":{"prefab":{"prefab_name":"ItemLiquidDrain","prefab_hash":2036225202,"desc":"","name":"Kit (Liquid Drain)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemLiquidPipeAnalyzer":{"prefab":{"prefab_name":"ItemLiquidPipeAnalyzer","prefab_hash":226055671,"desc":"","name":"Kit (Liquid Pipe Analyzer)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemLiquidPipeHeater":{"prefab":{"prefab_name":"ItemLiquidPipeHeater","prefab_hash":-248475032,"desc":"Creates a Pipe Heater (Liquid).","name":"Pipe Heater Kit (Liquid)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemLiquidPipeValve":{"prefab":{"prefab_name":"ItemLiquidPipeValve","prefab_hash":-2126113312,"desc":"This kit creates a Liquid Valve.","name":"Kit (Liquid Pipe Valve)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemLiquidPipeVolumePump":{"prefab":{"prefab_name":"ItemLiquidPipeVolumePump","prefab_hash":-2106280569,"desc":"","name":"Kit (Liquid Volume Pump)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemLiquidTankStorage":{"prefab":{"prefab_name":"ItemLiquidTankStorage","prefab_hash":2037427578,"desc":"This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister.","name":"Kit (Liquid Canister Storage)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemMKIIAngleGrinder":{"prefab":{"prefab_name":"ItemMKIIAngleGrinder","prefab_hash":240174650,"desc":"Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure.","name":"Mk II Angle Grinder"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIArcWelder":{"prefab":{"prefab_name":"ItemMKIIArcWelder","prefab_hash":-2061979347,"desc":"","name":"Mk II Arc Welder"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIICrowbar":{"prefab":{"prefab_name":"ItemMKIICrowbar","prefab_hash":1440775434,"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.","name":"Mk II Crowbar"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemMKIIDrill":{"prefab":{"prefab_name":"ItemMKIIDrill","prefab_hash":324791548,"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.","name":"Mk II Drill"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIDuctTape":{"prefab":{"prefab_name":"ItemMKIIDuctTape","prefab_hash":388774906,"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.","name":"Mk II Duct Tape"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemMKIIMiningDrill":{"prefab":{"prefab_name":"ItemMKIIMiningDrill","prefab_hash":-1875271296,"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.","name":"Mk II Mining Drill"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIScrewdriver":{"prefab":{"prefab_name":"ItemMKIIScrewdriver","prefab_hash":-2015613246,"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.","name":"Mk II Screwdriver"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemMKIIWireCutters":{"prefab":{"prefab_name":"ItemMKIIWireCutters","prefab_hash":-178893251,"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.","name":"Mk II Wire Cutters"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemMKIIWrench":{"prefab":{"prefab_name":"ItemMKIIWrench","prefab_hash":1862001680,"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.","name":"Mk II Wrench"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemMarineBodyArmor":{"prefab":{"prefab_name":"ItemMarineBodyArmor","prefab_hash":1399098998,"desc":"","name":"Marine Armor"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Suit","sorting_class":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMarineHelmet":{"prefab":{"prefab_name":"ItemMarineHelmet","prefab_hash":1073631646,"desc":"","name":"Marine Helmet"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Helmet","sorting_class":"Clothing"},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMilk":{"prefab":{"prefab_name":"ItemMilk","prefab_hash":1327248310,"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.","name":"Milk"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"Milk":1.0},"slot_class":"None","sorting_class":"Resources"}},"ItemMiningBackPack":{"prefab":{"prefab_name":"ItemMiningBackPack","prefab_hash":-1650383245,"desc":"","name":"Mining Backpack"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Back","sorting_class":"Clothing"},"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"}]},"ItemMiningBelt":{"prefab":{"prefab_name":"ItemMiningBelt","prefab_hash":-676435305,"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.","name":"Mining Belt"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Belt","sorting_class":"Clothing"},"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"}]},"ItemMiningBeltMKII":{"prefab":{"prefab_name":"ItemMiningBeltMKII","prefab_hash":1470787934,"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. ","name":"Mining Belt MK II"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Belt","sorting_class":"Clothing"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":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"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"}]},"ItemMiningCharge":{"prefab":{"prefab_name":"ItemMiningCharge","prefab_hash":15829510,"desc":"A low cost, high yield explosive with a 10 second timer.","name":"Mining Charge"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemMiningDrill":{"prefab":{"prefab_name":"ItemMiningDrill","prefab_hash":1055173191,"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.'","name":"Mining Drill"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillHeavy":{"prefab":{"prefab_name":"ItemMiningDrillHeavy","prefab_hash":-1663349918,"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.","name":"Mining Drill (Heavy)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillPneumatic":{"prefab":{"prefab_name":"ItemMiningDrillPneumatic","prefab_hash":1258187304,"desc":"0.Default\n1.Flatten","name":"Pneumatic Mining Drill"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemMkIIToolbelt":{"prefab":{"prefab_name":"ItemMkIIToolbelt","prefab_hash":1467558064,"desc":"A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy.","name":"Tool Belt MK II"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Belt","sorting_class":"Clothing"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":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"},{"name":"Tool","typ":"Tool"},{"name":"Tool","typ":"Tool"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMuffin":{"prefab":{"prefab_name":"ItemMuffin","prefab_hash":-1864982322,"desc":"A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin.","name":"Muffin"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemMushroom":{"prefab":{"prefab_name":"ItemMushroom","prefab_hash":2044798572,"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.","name":"Mushroom"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":20,"reagents":{"Mushroom":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemNVG":{"prefab":{"prefab_name":"ItemNVG","prefab_hash":982514123,"desc":"","name":"Night Vision Goggles"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Glasses","sorting_class":"Clothing"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemNickelIngot":{"prefab":{"prefab_name":"ItemNickelIngot","prefab_hash":-1406385572,"desc":"","name":"Ingot (Nickel)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Nickel":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemNickelOre":{"prefab":{"prefab_name":"ItemNickelOre","prefab_hash":1830218956,"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.","name":"Ore (Nickel)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Nickel":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemNitrice":{"prefab":{"prefab_name":"ItemNitrice","prefab_hash":-1499471529,"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.","name":"Ice (Nitrice)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemOxite":{"prefab":{"prefab_name":"ItemOxite","prefab_hash":-1805394113,"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.","name":"Ice (Oxite)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPassiveVent":{"prefab":{"prefab_name":"ItemPassiveVent","prefab_hash":238631271,"desc":"This kit creates a Passive Vent among other variants.","name":"Passive Vent"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPassiveVentInsulated":{"prefab":{"prefab_name":"ItemPassiveVentInsulated","prefab_hash":-1397583760,"desc":"","name":"Kit (Insulated Passive Vent)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPeaceLily":{"prefab":{"prefab_name":"ItemPeaceLily","prefab_hash":2042955224,"desc":"A fetching lily with greater resistance to cold temperatures.","name":"Peace Lily"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemPickaxe":{"prefab":{"prefab_name":"ItemPickaxe","prefab_hash":-913649823,"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.","name":"Pickaxe"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemPillHeal":{"prefab":{"prefab_name":"ItemPillHeal","prefab_hash":1118069417,"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.","name":"Pill (Medical)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemPillStun":{"prefab":{"prefab_name":"ItemPillStun","prefab_hash":418958601,"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.","name":"Pill (Paralysis)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemPipeAnalyizer":{"prefab":{"prefab_name":"ItemPipeAnalyizer","prefab_hash":-767597887,"desc":"This kit creates a Pipe Analyzer.","name":"Kit (Pipe Analyzer)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPipeCowl":{"prefab":{"prefab_name":"ItemPipeCowl","prefab_hash":-38898376,"desc":"This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres.","name":"Pipe Cowl"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":20,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPipeDigitalValve":{"prefab":{"prefab_name":"ItemPipeDigitalValve","prefab_hash":-1532448832,"desc":"This kit creates a Digital Valve.","name":"Kit (Digital Valve)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPipeGasMixer":{"prefab":{"prefab_name":"ItemPipeGasMixer","prefab_hash":-1134459463,"desc":"This kit creates a Gas Mixer.","name":"Kit (Gas Mixer)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPipeHeater":{"prefab":{"prefab_name":"ItemPipeHeater","prefab_hash":-1751627006,"desc":"Creates a Pipe Heater (Gas).","name":"Pipe Heater Kit (Gas)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemPipeIgniter":{"prefab":{"prefab_name":"ItemPipeIgniter","prefab_hash":1366030599,"desc":"","name":"Kit (Pipe Igniter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPipeLabel":{"prefab":{"prefab_name":"ItemPipeLabel","prefab_hash":391769637,"desc":"This kit creates a Pipe Label.","name":"Kit (Pipe Label)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":20,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPipeLiquidRadiator":{"prefab":{"prefab_name":"ItemPipeLiquidRadiator","prefab_hash":-906521320,"desc":"This kit creates a Liquid Pipe Convection Radiator.","name":"Kit (Liquid Radiator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPipeMeter":{"prefab":{"prefab_name":"ItemPipeMeter","prefab_hash":1207939683,"desc":"This kit creates a Pipe Meter.","name":"Kit (Pipe Meter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPipeRadiator":{"prefab":{"prefab_name":"ItemPipeRadiator","prefab_hash":-1796655088,"desc":"This kit creates a Pipe Convection Radiator.","name":"Kit (Radiator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPipeValve":{"prefab":{"prefab_name":"ItemPipeValve","prefab_hash":799323450,"desc":"This kit creates a Valve.","name":"Kit (Pipe Valve)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemPipeVolumePump":{"prefab":{"prefab_name":"ItemPipeVolumePump","prefab_hash":-1766301997,"desc":"This kit creates a Volume Pump.","name":"Kit (Volume Pump)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPlainCake":{"prefab":{"prefab_name":"ItemPlainCake","prefab_hash":-1108244510,"desc":"","name":"Cake"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemPlantEndothermic_Creative":{"prefab":{"prefab_name":"ItemPlantEndothermic_Creative","prefab_hash":-1159179557,"desc":"","name":"Endothermic Plant Creative"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemPlantEndothermic_Genepool1":{"prefab":{"prefab_name":"ItemPlantEndothermic_Genepool1","prefab_hash":851290561,"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.","name":"Winterspawn (Alpha variant)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemPlantEndothermic_Genepool2":{"prefab":{"prefab_name":"ItemPlantEndothermic_Genepool2","prefab_hash":-1414203269,"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.","name":"Winterspawn (Beta variant)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemPlantSampler":{"prefab":{"prefab_name":"ItemPlantSampler","prefab_hash":173023800,"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.","name":"Plant Sampler"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemPlantSwitchGrass":{"prefab":{"prefab_name":"ItemPlantSwitchGrass","prefab_hash":-532672323,"desc":"","name":"Switch Grass"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Default"}},"ItemPlantThermogenic_Creative":{"prefab":{"prefab_name":"ItemPlantThermogenic_Creative","prefab_hash":-1208890208,"desc":"","name":"Thermogenic Plant Creative"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemPlantThermogenic_Genepool1":{"prefab":{"prefab_name":"ItemPlantThermogenic_Genepool1","prefab_hash":-177792789,"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.","name":"Hades Flower (Alpha strain)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemPlantThermogenic_Genepool2":{"prefab":{"prefab_name":"ItemPlantThermogenic_Genepool2","prefab_hash":1819167057,"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.","name":"Hades Flower (Beta strain)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemPlasticSheets":{"prefab":{"prefab_name":"ItemPlasticSheets","prefab_hash":662053345,"desc":"","name":"Plastic Sheets"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"None","sorting_class":"Resources"}},"ItemPotato":{"prefab":{"prefab_name":"ItemPotato","prefab_hash":1929046963,"desc":" Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies.","name":"Potato"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":20,"reagents":{"Potato":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemPotatoBaked":{"prefab":{"prefab_name":"ItemPotatoBaked","prefab_hash":-2111886401,"desc":"","name":"Baked Potato"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":1,"reagents":{"Potato":1.0},"slot_class":"None","sorting_class":"Food"}},"ItemPowerConnector":{"prefab":{"prefab_name":"ItemPowerConnector","prefab_hash":839924019,"desc":"This kit creates a Power Connector.","name":"Kit (Power Connector)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPumpkin":{"prefab":{"prefab_name":"ItemPumpkin","prefab_hash":1277828144,"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.","name":"Pumpkin"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":20,"reagents":{"Pumpkin":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemPumpkinPie":{"prefab":{"prefab_name":"ItemPumpkinPie","prefab_hash":62768076,"desc":"","name":"Pumpkin Pie"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemPumpkinSoup":{"prefab":{"prefab_name":"ItemPumpkinSoup","prefab_hash":1277979876,"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","name":"Pumpkin Soup"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemPureIce":{"prefab":{"prefab_name":"ItemPureIce","prefab_hash":-1616308158,"desc":"A frozen chunk of pure Water","name":"Pure Ice Water"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceCarbonDioxide":{"prefab":{"prefab_name":"ItemPureIceCarbonDioxide","prefab_hash":-1251009404,"desc":"A frozen chunk of pure Carbon Dioxide","name":"Pure Ice Carbon Dioxide"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceHydrogen":{"prefab":{"prefab_name":"ItemPureIceHydrogen","prefab_hash":944530361,"desc":"A frozen chunk of pure Hydrogen","name":"Pure Ice Hydrogen"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceLiquidCarbonDioxide":{"prefab":{"prefab_name":"ItemPureIceLiquidCarbonDioxide","prefab_hash":-1715945725,"desc":"A frozen chunk of pure Liquid Carbon Dioxide","name":"Pure Ice Liquid Carbon Dioxide"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceLiquidHydrogen":{"prefab":{"prefab_name":"ItemPureIceLiquidHydrogen","prefab_hash":-1044933269,"desc":"A frozen chunk of pure Liquid Hydrogen","name":"Pure Ice Liquid Hydrogen"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceLiquidNitrogen":{"prefab":{"prefab_name":"ItemPureIceLiquidNitrogen","prefab_hash":1674576569,"desc":"A frozen chunk of pure Liquid Nitrogen","name":"Pure Ice Liquid Nitrogen"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceLiquidNitrous":{"prefab":{"prefab_name":"ItemPureIceLiquidNitrous","prefab_hash":1428477399,"desc":"A frozen chunk of pure Liquid Nitrous Oxide","name":"Pure Ice Liquid Nitrous"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceLiquidOxygen":{"prefab":{"prefab_name":"ItemPureIceLiquidOxygen","prefab_hash":541621589,"desc":"A frozen chunk of pure Liquid Oxygen","name":"Pure Ice Liquid Oxygen"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceLiquidPollutant":{"prefab":{"prefab_name":"ItemPureIceLiquidPollutant","prefab_hash":-1748926678,"desc":"A frozen chunk of pure Liquid Pollutant","name":"Pure Ice Liquid Pollutant"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceLiquidVolatiles":{"prefab":{"prefab_name":"ItemPureIceLiquidVolatiles","prefab_hash":-1306628937,"desc":"A frozen chunk of pure Liquid Volatiles","name":"Pure Ice Liquid Volatiles"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceNitrogen":{"prefab":{"prefab_name":"ItemPureIceNitrogen","prefab_hash":-1708395413,"desc":"A frozen chunk of pure Nitrogen","name":"Pure Ice Nitrogen"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceNitrous":{"prefab":{"prefab_name":"ItemPureIceNitrous","prefab_hash":386754635,"desc":"A frozen chunk of pure Nitrous Oxide","name":"Pure Ice NitrousOxide"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceOxygen":{"prefab":{"prefab_name":"ItemPureIceOxygen","prefab_hash":-1150448260,"desc":"A frozen chunk of pure Oxygen","name":"Pure Ice Oxygen"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIcePollutant":{"prefab":{"prefab_name":"ItemPureIcePollutant","prefab_hash":-1755356,"desc":"A frozen chunk of pure Pollutant","name":"Pure Ice Pollutant"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIcePollutedWater":{"prefab":{"prefab_name":"ItemPureIcePollutedWater","prefab_hash":-2073202179,"desc":"A frozen chunk of Polluted Water","name":"Pure Ice Polluted Water"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceSteam":{"prefab":{"prefab_name":"ItemPureIceSteam","prefab_hash":-874791066,"desc":"A frozen chunk of pure Steam","name":"Pure Ice Steam"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceVolatiles":{"prefab":{"prefab_name":"ItemPureIceVolatiles","prefab_hash":-633723719,"desc":"A frozen chunk of pure Volatiles","name":"Pure Ice Volatiles"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemRTG":{"prefab":{"prefab_name":"ItemRTG","prefab_hash":495305053,"desc":"This kit creates that miracle of modern science, a Kit (Creative RTG).","name":"Kit (Creative RTG)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemRTGSurvival":{"prefab":{"prefab_name":"ItemRTGSurvival","prefab_hash":1817645803,"desc":"This kit creates a Kit (RTG).","name":"Kit (RTG)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemReagentMix":{"prefab":{"prefab_name":"ItemReagentMix","prefab_hash":-1641500434,"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.","name":"Reagent Mix"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ores"}},"ItemRemoteDetonator":{"prefab":{"prefab_name":"ItemRemoteDetonator","prefab_hash":678483886,"desc":"","name":"Remote Detonator"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemReusableFireExtinguisher":{"prefab":{"prefab_name":"ItemReusableFireExtinguisher","prefab_hash":-1773192190,"desc":"Requires a canister filled with any inert liquid to opperate.","name":"Fire Extinguisher (Reusable)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"ItemRice":{"prefab":{"prefab_name":"ItemRice","prefab_hash":658916791,"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.","name":"Rice"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Rice":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemRoadFlare":{"prefab":{"prefab_name":"ItemRoadFlare","prefab_hash":871811564,"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.","name":"Road Flare"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":20,"reagents":null,"slot_class":"Flare","sorting_class":"Default"}},"ItemRocketMiningDrillHead":{"prefab":{"prefab_name":"ItemRocketMiningDrillHead","prefab_hash":2109945337,"desc":"Replaceable drill head for Rocket Miner","name":"Mining-Drill Head (Basic)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"DrillHead","sorting_class":"Default"}},"ItemRocketMiningDrillHeadDurable":{"prefab":{"prefab_name":"ItemRocketMiningDrillHeadDurable","prefab_hash":1530764483,"desc":"","name":"Mining-Drill Head (Durable)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"DrillHead","sorting_class":"Default"}},"ItemRocketMiningDrillHeadHighSpeedIce":{"prefab":{"prefab_name":"ItemRocketMiningDrillHeadHighSpeedIce","prefab_hash":653461728,"desc":"","name":"Mining-Drill Head (High Speed Ice)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"DrillHead","sorting_class":"Default"}},"ItemRocketMiningDrillHeadHighSpeedMineral":{"prefab":{"prefab_name":"ItemRocketMiningDrillHeadHighSpeedMineral","prefab_hash":1440678625,"desc":"","name":"Mining-Drill Head (High Speed Mineral)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"DrillHead","sorting_class":"Default"}},"ItemRocketMiningDrillHeadIce":{"prefab":{"prefab_name":"ItemRocketMiningDrillHeadIce","prefab_hash":-380904592,"desc":"","name":"Mining-Drill Head (Ice)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"DrillHead","sorting_class":"Default"}},"ItemRocketMiningDrillHeadLongTerm":{"prefab":{"prefab_name":"ItemRocketMiningDrillHeadLongTerm","prefab_hash":-684020753,"desc":"","name":"Mining-Drill Head (Long Term)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"DrillHead","sorting_class":"Default"}},"ItemRocketMiningDrillHeadMineral":{"prefab":{"prefab_name":"ItemRocketMiningDrillHeadMineral","prefab_hash":1083675581,"desc":"","name":"Mining-Drill Head (Mineral)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"DrillHead","sorting_class":"Default"}},"ItemRocketScanningHead":{"prefab":{"prefab_name":"ItemRocketScanningHead","prefab_hash":-1198702771,"desc":"","name":"Rocket Scanner Head"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"ScanningHead","sorting_class":"Default"}},"ItemScanner":{"prefab":{"prefab_name":"ItemScanner","prefab_hash":1661270830,"desc":"A mysterious piece of technology, rumored to have Zrillian origins.","name":"Handheld Scanner"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemScrewdriver":{"prefab":{"prefab_name":"ItemScrewdriver","prefab_hash":687940869,"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.","name":"Screwdriver"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemSecurityCamera":{"prefab":{"prefab_name":"ItemSecurityCamera","prefab_hash":-1981101032,"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.","name":"Security Camera"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemSensorLenses":{"prefab":{"prefab_name":"ItemSensorLenses","prefab_hash":-1176140051,"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.","name":"Sensor Lenses"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Glasses","sorting_class":"Clothing"},"logic":{"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","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Sensor Processing Unit","typ":"SensorProcessingUnit"}]},"ItemSensorProcessingUnitCelestialScanner":{"prefab":{"prefab_name":"ItemSensorProcessingUnitCelestialScanner","prefab_hash":-1154200014,"desc":"","name":"Sensor Processing Unit (Celestial Scanner)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"SensorProcessingUnit","sorting_class":"Default"}},"ItemSensorProcessingUnitMesonScanner":{"prefab":{"prefab_name":"ItemSensorProcessingUnitMesonScanner","prefab_hash":-1730464583,"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.","name":"Sensor Processing Unit (T-Ray Scanner)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"SensorProcessingUnit","sorting_class":"Default"}},"ItemSensorProcessingUnitOreScanner":{"prefab":{"prefab_name":"ItemSensorProcessingUnitOreScanner","prefab_hash":-1219128491,"desc":"The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD.","name":"Sensor Processing Unit (Ore Scanner)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"SensorProcessingUnit","sorting_class":"Default"}},"ItemSiliconIngot":{"prefab":{"prefab_name":"ItemSiliconIngot","prefab_hash":-290196476,"desc":"","name":"Ingot (Silicon)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Silicon":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemSiliconOre":{"prefab":{"prefab_name":"ItemSiliconOre","prefab_hash":1103972403,"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.","name":"Ore (Silicon)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Silicon":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemSilverIngot":{"prefab":{"prefab_name":"ItemSilverIngot","prefab_hash":-929742000,"desc":"","name":"Ingot (Silver)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Silver":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemSilverOre":{"prefab":{"prefab_name":"ItemSilverOre","prefab_hash":-916518678,"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.","name":"Ore (Silver)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Silver":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemSolderIngot":{"prefab":{"prefab_name":"ItemSolderIngot","prefab_hash":-82508479,"desc":"","name":"Ingot (Solder)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Solder":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemSolidFuel":{"prefab":{"prefab_name":"ItemSolidFuel","prefab_hash":-365253871,"desc":"","name":"Solid Fuel (Hydrocarbon)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Hydrocarbon":1.0},"slot_class":"Ore","sorting_class":"Resources"}},"ItemSoundCartridgeBass":{"prefab":{"prefab_name":"ItemSoundCartridgeBass","prefab_hash":-1883441704,"desc":"","name":"Sound Cartridge Bass"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"SoundCartridge","sorting_class":"Default"}},"ItemSoundCartridgeDrums":{"prefab":{"prefab_name":"ItemSoundCartridgeDrums","prefab_hash":-1901500508,"desc":"","name":"Sound Cartridge Drums"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"SoundCartridge","sorting_class":"Default"}},"ItemSoundCartridgeLeads":{"prefab":{"prefab_name":"ItemSoundCartridgeLeads","prefab_hash":-1174735962,"desc":"","name":"Sound Cartridge Leads"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"SoundCartridge","sorting_class":"Default"}},"ItemSoundCartridgeSynth":{"prefab":{"prefab_name":"ItemSoundCartridgeSynth","prefab_hash":-1971419310,"desc":"","name":"Sound Cartridge Synth"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"SoundCartridge","sorting_class":"Default"}},"ItemSoyOil":{"prefab":{"prefab_name":"ItemSoyOil","prefab_hash":1387403148,"desc":"","name":"Soy Oil"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"Oil":1.0},"slot_class":"None","sorting_class":"Resources"}},"ItemSoybean":{"prefab":{"prefab_name":"ItemSoybean","prefab_hash":1924673028,"desc":" Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil","name":"Soybean"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"Soy":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemSpaceCleaner":{"prefab":{"prefab_name":"ItemSpaceCleaner","prefab_hash":-1737666461,"desc":"There was a time when humanity really wanted to keep space clean. That time has passed.","name":"Space Cleaner"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemSpaceHelmet":{"prefab":{"prefab_name":"ItemSpaceHelmet","prefab_hash":714830451,"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.","name":"Space Helmet"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Helmet","sorting_class":"Clothing"},"logic":{"logic_slot_types":{},"logic_types":{"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"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"ItemSpaceIce":{"prefab":{"prefab_name":"ItemSpaceIce","prefab_hash":675686937,"desc":"","name":"Space Ice"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"Ore","sorting_class":"Ores"}},"ItemSpaceOre":{"prefab":{"prefab_name":"ItemSpaceOre","prefab_hash":2131916219,"desc":"Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores.","name":"Dirty Ore"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"Ore","sorting_class":"Ores"}},"ItemSpacepack":{"prefab":{"prefab_name":"ItemSpacepack","prefab_hash":-1260618380,"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.","name":"Spacepack"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Back","sorting_class":"Clothing"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"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"}]},"ItemSprayCanBlack":{"prefab":{"prefab_name":"ItemSprayCanBlack","prefab_hash":-688107795,"desc":"Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses.","name":"Spray Paint (Black)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanBlue":{"prefab":{"prefab_name":"ItemSprayCanBlue","prefab_hash":-498464883,"desc":"What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'","name":"Spray Paint (Blue)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanBrown":{"prefab":{"prefab_name":"ItemSprayCanBrown","prefab_hash":845176977,"desc":"In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed.","name":"Spray Paint (Brown)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanGreen":{"prefab":{"prefab_name":"ItemSprayCanGreen","prefab_hash":-1880941852,"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.","name":"Spray Paint (Green)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanGrey":{"prefab":{"prefab_name":"ItemSprayCanGrey","prefab_hash":-1645266981,"desc":"Arguably the most popular color in the universe, grey was invented so designers had something to do.","name":"Spray Paint (Grey)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanKhaki":{"prefab":{"prefab_name":"ItemSprayCanKhaki","prefab_hash":1918456047,"desc":"Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode.","name":"Spray Paint (Khaki)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanOrange":{"prefab":{"prefab_name":"ItemSprayCanOrange","prefab_hash":-158007629,"desc":"Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove.","name":"Spray Paint (Orange)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanPink":{"prefab":{"prefab_name":"ItemSprayCanPink","prefab_hash":1344257263,"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.","name":"Spray Paint (Pink)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanPurple":{"prefab":{"prefab_name":"ItemSprayCanPurple","prefab_hash":30686509,"desc":"Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong.","name":"Spray Paint (Purple)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanRed":{"prefab":{"prefab_name":"ItemSprayCanRed","prefab_hash":1514393921,"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.","name":"Spray Paint (Red)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanWhite":{"prefab":{"prefab_name":"ItemSprayCanWhite","prefab_hash":498481505,"desc":"White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff.","name":"Spray Paint (White)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanYellow":{"prefab":{"prefab_name":"ItemSprayCanYellow","prefab_hash":995468116,"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.","name":"Spray Paint (Yellow)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayGun":{"prefab":{"prefab_name":"ItemSprayGun","prefab_hash":1289723966,"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.","name":"Spray Gun"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"slots":[{"name":"Spray Can","typ":"Bottle"}]},"ItemSteelFrames":{"prefab":{"prefab_name":"ItemSteelFrames","prefab_hash":-1448105779,"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.","name":"Steel Frames"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":30,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemSteelIngot":{"prefab":{"prefab_name":"ItemSteelIngot","prefab_hash":-654790771,"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.","name":"Ingot (Steel)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Steel":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemSteelSheets":{"prefab":{"prefab_name":"ItemSteelSheets","prefab_hash":38555961,"desc":"An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types.","name":"Steel Sheets"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"None","sorting_class":"Resources"}},"ItemStelliteGlassSheets":{"prefab":{"prefab_name":"ItemStelliteGlassSheets","prefab_hash":-2038663432,"desc":"A stronger glass substitute.","name":"Stellite Glass Sheets"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"None","sorting_class":"Resources"}},"ItemStelliteIngot":{"prefab":{"prefab_name":"ItemStelliteIngot","prefab_hash":-1897868623,"desc":"","name":"Ingot (Stellite)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Stellite":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemSugar":{"prefab":{"prefab_name":"ItemSugar","prefab_hash":2111910840,"desc":"","name":"Sugar"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Sugar":10.0},"slot_class":"None","sorting_class":"Resources"}},"ItemSugarCane":{"prefab":{"prefab_name":"ItemSugarCane","prefab_hash":-1335056202,"desc":"","name":"Sugarcane"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"Sugar":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemSuitModCryogenicUpgrade":{"prefab":{"prefab_name":"ItemSuitModCryogenicUpgrade","prefab_hash":-1274308304,"desc":"Enables suits with basic cooling functionality to work with cryogenic liquid.","name":"Cryogenic Suit Upgrade"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"SuitMod","sorting_class":"Default"}},"ItemTablet":{"prefab":{"prefab_name":"ItemTablet","prefab_hash":-229808600,"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.","name":"Handheld Tablet"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"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","Error":"Read","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"}]},"ItemTerrainManipulator":{"prefab":{"prefab_name":"ItemTerrainManipulator","prefab_hash":111280987,"desc":"0.Mode0\n1.Mode1","name":"Terrain Manipulator"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Default"},"logic":{"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":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Dirt Canister","typ":"Ore"}]},"ItemTomato":{"prefab":{"prefab_name":"ItemTomato","prefab_hash":-998592080,"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.","name":"Tomato"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":20,"reagents":{"Tomato":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemTomatoSoup":{"prefab":{"prefab_name":"ItemTomatoSoup","prefab_hash":688734890,"desc":"Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine.","name":"Tomato Soup"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemToolBelt":{"prefab":{"prefab_name":"ItemToolBelt","prefab_hash":-355127880,"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.","name":"Tool Belt"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Belt","sorting_class":"Clothing"},"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"}]},"ItemTropicalPlant":{"prefab":{"prefab_name":"ItemTropicalPlant","prefab_hash":-800947386,"desc":"An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants.","name":"Tropical Lily"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemUraniumOre":{"prefab":{"prefab_name":"ItemUraniumOre","prefab_hash":-1516581844,"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.","name":"Ore (Uranium)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Uranium":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemVolatiles":{"prefab":{"prefab_name":"ItemVolatiles","prefab_hash":1253102035,"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","name":"Ice (Volatiles)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemWallCooler":{"prefab":{"prefab_name":"ItemWallCooler","prefab_hash":-1567752627,"desc":"This kit creates a Wall Cooler.","name":"Kit (Wall Cooler)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemWallHeater":{"prefab":{"prefab_name":"ItemWallHeater","prefab_hash":1880134612,"desc":"This kit creates a Kit (Wall Heater).","name":"Kit (Wall Heater)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemWallLight":{"prefab":{"prefab_name":"ItemWallLight","prefab_hash":1108423476,"desc":"This kit creates any one of ten Kit (Lights) variants.","name":"Kit (Lights)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemWaspaloyIngot":{"prefab":{"prefab_name":"ItemWaspaloyIngot","prefab_hash":156348098,"desc":"","name":"Ingot (Waspaloy)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Waspaloy":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemWaterBottle":{"prefab":{"prefab_name":"ItemWaterBottle","prefab_hash":107741229,"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.","name":"Water Bottle"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"LiquidBottle","sorting_class":"Default"}},"ItemWaterPipeDigitalValve":{"prefab":{"prefab_name":"ItemWaterPipeDigitalValve","prefab_hash":309693520,"desc":"","name":"Kit (Liquid Digital Valve)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemWaterPipeMeter":{"prefab":{"prefab_name":"ItemWaterPipeMeter","prefab_hash":-90898877,"desc":"","name":"Kit (Liquid Pipe Meter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemWaterWallCooler":{"prefab":{"prefab_name":"ItemWaterWallCooler","prefab_hash":-1721846327,"desc":"","name":"Kit (Liquid Wall Cooler)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemWearLamp":{"prefab":{"prefab_name":"ItemWearLamp","prefab_hash":-598730959,"desc":"","name":"Headlamp"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Helmet","sorting_class":"Clothing"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemWeldingTorch":{"prefab":{"prefab_name":"ItemWeldingTorch","prefab_hash":-2066892079,"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.","name":"Welding Torch"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemWheat":{"prefab":{"prefab_name":"ItemWheat","prefab_hash":-1057658015,"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.","name":"Wheat"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"Carbon":1.0},"slot_class":"Plant","sorting_class":"Default"}},"ItemWireCutters":{"prefab":{"prefab_name":"ItemWireCutters","prefab_hash":1535854074,"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.","name":"Wire Cutters"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemWirelessBatteryCellExtraLarge":{"prefab":{"prefab_name":"ItemWirelessBatteryCellExtraLarge","prefab_hash":-504717121,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Wireless Battery Cell Extra Large"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Battery","sorting_class":"Default"},"logic":{"logic_slot_types":{},"logic_types":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"ItemWreckageAirConditioner1":{"prefab":{"prefab_name":"ItemWreckageAirConditioner1","prefab_hash":-1826023284,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageAirConditioner2":{"prefab":{"prefab_name":"ItemWreckageAirConditioner2","prefab_hash":169888054,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageHydroponicsTray1":{"prefab":{"prefab_name":"ItemWreckageHydroponicsTray1","prefab_hash":-310178617,"desc":"","name":"Wreckage Hydroponics Tray"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageLargeExtendableRadiator01":{"prefab":{"prefab_name":"ItemWreckageLargeExtendableRadiator01","prefab_hash":-997763,"desc":"","name":"Wreckage Large Extendable Radiator"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageStructureRTG1":{"prefab":{"prefab_name":"ItemWreckageStructureRTG1","prefab_hash":391453348,"desc":"","name":"Wreckage Structure RTG"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageStructureWeatherStation001":{"prefab":{"prefab_name":"ItemWreckageStructureWeatherStation001","prefab_hash":-834664349,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageStructureWeatherStation002":{"prefab":{"prefab_name":"ItemWreckageStructureWeatherStation002","prefab_hash":1464424921,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageStructureWeatherStation003":{"prefab":{"prefab_name":"ItemWreckageStructureWeatherStation003","prefab_hash":542009679,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageStructureWeatherStation004":{"prefab":{"prefab_name":"ItemWreckageStructureWeatherStation004","prefab_hash":-1104478996,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageStructureWeatherStation005":{"prefab":{"prefab_name":"ItemWreckageStructureWeatherStation005","prefab_hash":-919745414,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageStructureWeatherStation006":{"prefab":{"prefab_name":"ItemWreckageStructureWeatherStation006","prefab_hash":1344576960,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageStructureWeatherStation007":{"prefab":{"prefab_name":"ItemWreckageStructureWeatherStation007","prefab_hash":656649558,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageStructureWeatherStation008":{"prefab":{"prefab_name":"ItemWreckageStructureWeatherStation008","prefab_hash":-1214467897,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageTurbineGenerator1":{"prefab":{"prefab_name":"ItemWreckageTurbineGenerator1","prefab_hash":-1662394403,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageTurbineGenerator2":{"prefab":{"prefab_name":"ItemWreckageTurbineGenerator2","prefab_hash":98602599,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageTurbineGenerator3":{"prefab":{"prefab_name":"ItemWreckageTurbineGenerator3","prefab_hash":1927790321,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageWallCooler1":{"prefab":{"prefab_name":"ItemWreckageWallCooler1","prefab_hash":-1682930158,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageWallCooler2":{"prefab":{"prefab_name":"ItemWreckageWallCooler2","prefab_hash":45733800,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWrench":{"prefab":{"prefab_name":"ItemWrench","prefab_hash":-1886261558,"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","name":"Wrench"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"KitSDBSilo":{"prefab":{"prefab_name":"KitSDBSilo","prefab_hash":1932952652,"desc":"This kit creates a SDB Silo.","name":"Kit (SDB Silo)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"KitStructureCombustionCentrifuge":{"prefab":{"prefab_name":"KitStructureCombustionCentrifuge","prefab_hash":231903234,"desc":"","name":"Kit (Combustion Centrifuge)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"KitchenTableShort":{"prefab":{"prefab_name":"KitchenTableShort","prefab_hash":-1427415566,"desc":"","name":"Kitchen Table (Short)"},"structure":{"small_grid":true}},"KitchenTableSimpleShort":{"prefab":{"prefab_name":"KitchenTableSimpleShort","prefab_hash":-78099334,"desc":"","name":"Kitchen Table (Simple Short)"},"structure":{"small_grid":true}},"KitchenTableSimpleTall":{"prefab":{"prefab_name":"KitchenTableSimpleTall","prefab_hash":-1068629349,"desc":"","name":"Kitchen Table (Simple Tall)"},"structure":{"small_grid":true}},"KitchenTableTall":{"prefab":{"prefab_name":"KitchenTableTall","prefab_hash":-1386237782,"desc":"","name":"Kitchen Table (Tall)"},"structure":{"small_grid":true}},"Lander":{"prefab":{"prefab_name":"Lander","prefab_hash":1605130615,"desc":"","name":"Lander"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"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"}]},"Landingpad_2x2CenterPiece01":{"prefab":{"prefab_name":"Landingpad_2x2CenterPiece01","prefab_hash":-1295222317,"desc":"Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors","name":"Landingpad 2x2 Center Piece"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"Landingpad_BlankPiece":{"prefab":{"prefab_name":"Landingpad_BlankPiece","prefab_hash":912453390,"desc":"","name":"Landingpad"},"structure":{"small_grid":true}},"Landingpad_CenterPiece01":{"prefab":{"prefab_name":"Landingpad_CenterPiece01","prefab_hash":1070143159,"desc":"The target point where the trader shuttle will land. Requires a clear view of the sky.","name":"Landingpad Center"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{},"modes":{"0":"None","1":"NoContact","2":"Moving","3":"Holding","4":"Landed"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"Landingpad_CrossPiece":{"prefab":{"prefab_name":"Landingpad_CrossPiece","prefab_hash":1101296153,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Cross"},"structure":{"small_grid":true}},"Landingpad_DataConnectionPiece":{"prefab":{"prefab_name":"Landingpad_DataConnectionPiece","prefab_hash":-2066405918,"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.","name":"Landingpad Data And Power"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"None","1":"NoContact","2":"Moving","3":"Holding","4":"Landed"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"}],"device_pins_length":null,"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}},"Landingpad_DiagonalPiece01":{"prefab":{"prefab_name":"Landingpad_DiagonalPiece01","prefab_hash":977899131,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Diagonal"},"structure":{"small_grid":true}},"Landingpad_GasConnectorInwardPiece":{"prefab":{"prefab_name":"Landingpad_GasConnectorInwardPiece","prefab_hash":817945707,"desc":"","name":"Landingpad Gas Input"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"Landingpad_GasConnectorOutwardPiece":{"prefab":{"prefab_name":"Landingpad_GasConnectorOutwardPiece","prefab_hash":-1100218307,"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.","name":"Landingpad Gas Output"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"}],"device_pins_length":null,"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}},"Landingpad_GasCylinderTankPiece":{"prefab":{"prefab_name":"Landingpad_GasCylinderTankPiece","prefab_hash":170818567,"desc":"Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders.","name":"Landingpad Gas Storage"},"structure":{"small_grid":true}},"Landingpad_LiquidConnectorInwardPiece":{"prefab":{"prefab_name":"Landingpad_LiquidConnectorInwardPiece","prefab_hash":-1216167727,"desc":"","name":"Landingpad Liquid Input"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"Landingpad_LiquidConnectorOutwardPiece":{"prefab":{"prefab_name":"Landingpad_LiquidConnectorOutwardPiece","prefab_hash":-1788929869,"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.","name":"Landingpad Liquid Output"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"Landingpad_StraightPiece01":{"prefab":{"prefab_name":"Landingpad_StraightPiece01","prefab_hash":-976273247,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Straight"},"structure":{"small_grid":true}},"Landingpad_TaxiPieceCorner":{"prefab":{"prefab_name":"Landingpad_TaxiPieceCorner","prefab_hash":-1872345847,"desc":"","name":"Landingpad Taxi Corner"},"structure":{"small_grid":true}},"Landingpad_TaxiPieceHold":{"prefab":{"prefab_name":"Landingpad_TaxiPieceHold","prefab_hash":146051619,"desc":"","name":"Landingpad Taxi Hold"},"structure":{"small_grid":true}},"Landingpad_TaxiPieceStraight":{"prefab":{"prefab_name":"Landingpad_TaxiPieceStraight","prefab_hash":-1477941080,"desc":"","name":"Landingpad Taxi Straight"},"structure":{"small_grid":true}},"Landingpad_ThreshholdPiece":{"prefab":{"prefab_name":"Landingpad_ThreshholdPiece","prefab_hash":-1514298582,"desc":"","name":"Landingpad Threshhold"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"Input"}],"device_pins_length":null,"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}},"LogicStepSequencer8":{"prefab":{"prefab_name":"LogicStepSequencer8","prefab_hash":1531272458,"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.","name":"Logic Step Sequencer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","Time":"ReadWrite","Bpm":"ReadWrite","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Whole Note","1":"Half Note","2":"Quarter Note","3":"Eighth Note","4":"Sixteenth Note"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Sound Cartridge","typ":"SoundCartridge"}],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"Meteorite":{"prefab":{"prefab_name":"Meteorite","prefab_hash":-99064335,"desc":"","name":"Meteorite"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"MonsterEgg":{"prefab":{"prefab_name":"MonsterEgg","prefab_hash":-1667675295,"desc":"","name":""},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"MotherboardComms":{"prefab":{"prefab_name":"MotherboardComms","prefab_hash":-337075633,"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.","name":"Communications Motherboard"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Motherboard","sorting_class":"Default"}},"MotherboardLogic":{"prefab":{"prefab_name":"MotherboardLogic","prefab_hash":502555944,"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.","name":"Logic Motherboard"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Motherboard","sorting_class":"Default"}},"MotherboardMissionControl":{"prefab":{"prefab_name":"MotherboardMissionControl","prefab_hash":-127121474,"desc":"","name":""},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Motherboard","sorting_class":"Default"}},"MotherboardProgrammableChip":{"prefab":{"prefab_name":"MotherboardProgrammableChip","prefab_hash":-161107071,"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.","name":"IC Editor Motherboard"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Motherboard","sorting_class":"Default"}},"MotherboardRockets":{"prefab":{"prefab_name":"MotherboardRockets","prefab_hash":-806986392,"desc":"","name":"Rocket Control Motherboard"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Motherboard","sorting_class":"Default"}},"MotherboardSorter":{"prefab":{"prefab_name":"MotherboardSorter","prefab_hash":-1908268220,"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.","name":"Sorter Motherboard"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Motherboard","sorting_class":"Default"}},"MothershipCore":{"prefab":{"prefab_name":"MothershipCore","prefab_hash":-1930442922,"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.","name":"Mothership Core"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"NpcChick":{"prefab":{"prefab_name":"NpcChick","prefab_hash":155856647,"desc":"","name":"Chick"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"NpcChicken":{"prefab":{"prefab_name":"NpcChicken","prefab_hash":399074198,"desc":"","name":"Chicken"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"PassiveSpeaker":{"prefab":{"prefab_name":"PassiveSpeaker","prefab_hash":248893646,"desc":"","name":"Passive Speaker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Volume":"ReadWrite","PrefabHash":"ReadWrite","SoundAlert":"ReadWrite","ReferenceId":"ReadWrite","NameHash":"ReadWrite"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"}],"device_pins_length":null,"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}},"PipeBenderMod":{"prefab":{"prefab_name":"PipeBenderMod","prefab_hash":443947415,"desc":"Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Pipe Bender Mod"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"PortableComposter":{"prefab":{"prefab_name":"PortableComposter","prefab_hash":-1958705204,"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","name":"Portable Composter"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"Battery"},{"name":"Liquid Canister","typ":"LiquidCanister"}]},"PortableSolarPanel":{"prefab":{"prefab_name":"PortableSolarPanel","prefab_hash":2043318949,"desc":"","name":"Portable Solar Panel"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Open":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"RailingElegant01":{"prefab":{"prefab_name":"RailingElegant01","prefab_hash":399661231,"desc":"","name":"Railing Elegant (Type 1)"},"structure":{"small_grid":false}},"RailingElegant02":{"prefab":{"prefab_name":"RailingElegant02","prefab_hash":-1898247915,"desc":"","name":"Railing Elegant (Type 2)"},"structure":{"small_grid":false}},"RailingIndustrial02":{"prefab":{"prefab_name":"RailingIndustrial02","prefab_hash":-2072792175,"desc":"","name":"Railing Industrial (Type 2)"},"structure":{"small_grid":false}},"ReagentColorBlue":{"prefab":{"prefab_name":"ReagentColorBlue","prefab_hash":980054869,"desc":"","name":"Color Dye (Blue)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"ColorBlue":10.0},"slot_class":"None","sorting_class":"Resources"}},"ReagentColorGreen":{"prefab":{"prefab_name":"ReagentColorGreen","prefab_hash":120807542,"desc":"","name":"Color Dye (Green)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"ColorGreen":10.0},"slot_class":"None","sorting_class":"Resources"}},"ReagentColorOrange":{"prefab":{"prefab_name":"ReagentColorOrange","prefab_hash":-400696159,"desc":"","name":"Color Dye (Orange)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"ColorOrange":10.0},"slot_class":"None","sorting_class":"Resources"}},"ReagentColorRed":{"prefab":{"prefab_name":"ReagentColorRed","prefab_hash":1998377961,"desc":"","name":"Color Dye (Red)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"ColorRed":10.0},"slot_class":"None","sorting_class":"Resources"}},"ReagentColorYellow":{"prefab":{"prefab_name":"ReagentColorYellow","prefab_hash":635208006,"desc":"","name":"Color Dye (Yellow)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"ColorYellow":10.0},"slot_class":"None","sorting_class":"Resources"}},"RespawnPoint":{"prefab":{"prefab_name":"RespawnPoint","prefab_hash":-788672929,"desc":"Place a respawn point to set a player entry point to your base when loading in, or returning from the dead.","name":"Respawn Point"},"structure":{"small_grid":true}},"RespawnPointWallMounted":{"prefab":{"prefab_name":"RespawnPointWallMounted","prefab_hash":-491247370,"desc":"","name":"Respawn Point (Mounted)"},"structure":{"small_grid":true}},"Robot":{"prefab":{"prefab_name":"Robot","prefab_hash":434786784,"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","name":"AIMeE Bot"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"logic":{"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"},"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"}},"logic_types":{"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"},"modes":{"0":"None","1":"Follow","2":"MoveToTarget","3":"Roam","4":"Unload","5":"PathToTarget","6":"StorageFull"},"transmission_receiver":false,"wireless_logic":true,"circuit_holder":true},"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"}]},"RoverCargo":{"prefab":{"prefab_name":"RoverCargo","prefab_hash":350726273,"desc":"Connects to Logic Transmitter","name":"Rover (Cargo)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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"},"modes":null,"transmission_receiver":false,"wireless_logic":true,"circuit_holder":false},"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":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI":{"prefab":{"prefab_name":"Rover_MkI","prefab_hash":-2049946335,"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","name":"Rover MkI"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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"},"modes":null,"transmission_receiver":false,"wireless_logic":true,"circuit_holder":false},"slots":[{"name":"Entity","typ":"Entity"},{"name":"Entity","typ":"Entity"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI_build_states":{"prefab":{"prefab_name":"Rover_MkI_build_states","prefab_hash":861674123,"desc":"","name":"Rover MKI"},"structure":{"small_grid":false}},"SMGMagazine":{"prefab":{"prefab_name":"SMGMagazine","prefab_hash":-256607540,"desc":"","name":"SMG Magazine"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Magazine","sorting_class":"Default"}},"SeedBag_Cocoa":{"prefab":{"prefab_name":"SeedBag_Cocoa","prefab_hash":1139887531,"desc":"","name":"Cocoa Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Corn":{"prefab":{"prefab_name":"SeedBag_Corn","prefab_hash":-1290755415,"desc":"Grow a Corn.","name":"Corn Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Fern":{"prefab":{"prefab_name":"SeedBag_Fern","prefab_hash":-1990600883,"desc":"Grow a Fern.","name":"Fern Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Mushroom":{"prefab":{"prefab_name":"SeedBag_Mushroom","prefab_hash":311593418,"desc":"Grow a Mushroom.","name":"Mushroom Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Potato":{"prefab":{"prefab_name":"SeedBag_Potato","prefab_hash":1005571172,"desc":"Grow a Potato.","name":"Potato Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Pumpkin":{"prefab":{"prefab_name":"SeedBag_Pumpkin","prefab_hash":1423199840,"desc":"Grow a Pumpkin.","name":"Pumpkin Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Rice":{"prefab":{"prefab_name":"SeedBag_Rice","prefab_hash":-1691151239,"desc":"Grow some Rice.","name":"Rice Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Soybean":{"prefab":{"prefab_name":"SeedBag_Soybean","prefab_hash":1783004244,"desc":"Grow some Soybean.","name":"Soybean Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_SugarCane":{"prefab":{"prefab_name":"SeedBag_SugarCane","prefab_hash":-1884103228,"desc":"","name":"Sugarcane Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Switchgrass":{"prefab":{"prefab_name":"SeedBag_Switchgrass","prefab_hash":488360169,"desc":"","name":"Switchgrass Seed"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Tomato":{"prefab":{"prefab_name":"SeedBag_Tomato","prefab_hash":-1922066841,"desc":"Grow a Tomato.","name":"Tomato Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Wheet":{"prefab":{"prefab_name":"SeedBag_Wheet","prefab_hash":-654756733,"desc":"Grow some Wheat.","name":"Wheat Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SpaceShuttle":{"prefab":{"prefab_name":"SpaceShuttle","prefab_hash":-1991297271,"desc":"An antiquated Sinotai transport craft, long since decommissioned.","name":"Space Shuttle"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Captain's Seat","typ":"Entity"},{"name":"Passenger Seat Left","typ":"Entity"},{"name":"Passenger Seat Right","typ":"Entity"}]},"StopWatch":{"prefab":{"prefab_name":"StopWatch","prefab_hash":-1527229051,"desc":"","name":"Stop Watch"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","Time":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"StructureAccessBridge":{"prefab":{"prefab_name":"StructureAccessBridge","prefab_hash":1298920475,"desc":"Extendable bridge that spans three grids","name":"Access Bridge"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Activate":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureActiveVent":{"prefab":{"prefab_name":"StructureActiveVent","prefab_hash":-1129453144,"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 ...","name":"Active Vent"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"},{"typ":"Pipe","role":"None"}],"device_pins_length":null,"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}},"StructureAdvancedComposter":{"prefab":{"prefab_name":"StructureAdvancedComposter","prefab_hash":446212963,"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","name":"Advanced Composter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"}],"device_pins_length":null,"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}},"StructureAdvancedFurnace":{"prefab":{"prefab_name":"StructureAdvancedFurnace","prefab_hash":545937711,"desc":"The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure.","name":"Advanced Furnace"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"device_pins_length":null,"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}},"StructureAdvancedPackagingMachine":{"prefab":{"prefab_name":"StructureAdvancedPackagingMachine","prefab_hash":-463037670,"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.","name":"Advanced Packaging Machine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memory_access":"ReadWrite","memory_size":64}},"StructureAirConditioner":{"prefab":{"prefab_name":"StructureAirConditioner","prefab_hash":-2087593337,"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.","name":"Air Conditioner"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrogenOutput2":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidOxygenOutput2":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"Read","RatioLiquidVolatilesOutput2":"Read","RatioSteamInput":"Read","RatioSteamOutput":"Read","RatioSteamOutput2":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidCarbonDioxideOutput2":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidPollutantOutput2":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidNitrousOxideOutput2":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Idle","1":"Active"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Waste"},{"typ":"Power","role":"None"}],"device_pins_length":2,"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}},"StructureAirlock":{"prefab":{"prefab_name":"StructureAirlock","prefab_hash":-2105052344,"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.","name":"Airlock"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureAirlockGate":{"prefab":{"prefab_name":"StructureAirlockGate","prefab_hash":1736080881,"desc":"1 x 1 modular door piece for building hangar doors.","name":"Small Hangar Door"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureAngledBench":{"prefab":{"prefab_name":"StructureAngledBench","prefab_hash":1811979158,"desc":"","name":"Bench (Angled)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureArcFurnace":{"prefab":{"prefab_name":"StructureArcFurnace","prefab_hash":-247344692,"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.","name":"Arc Furnace"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Ore"},{"name":"Export","typ":"Ingot"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureAreaPowerControl":{"prefab":{"prefab_name":"StructureAreaPowerControl","prefab_hash":1999523701,"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.","name":"Area Power Control"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Idle","1":"Discharged","2":"Discharging","3":"Charging","4":"Charged"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructureAreaPowerControlReversed":{"prefab":{"prefab_name":"StructureAreaPowerControlReversed","prefab_hash":-1032513487,"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.","name":"Area Power Control"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Idle","1":"Discharged","2":"Discharging","3":"Charging","4":"Charged"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructureAutoMinerSmall":{"prefab":{"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":{"small_grid":true},"logic":{"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":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureAutolathe":{"prefab":{"prefab_name":"StructureAutolathe","prefab_hash":336213101,"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 ","name":"Autolathe"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memory_access":"ReadWrite","memory_size":64}},"StructureAutomatedOven":{"prefab":{"prefab_name":"StructureAutomatedOven","prefab_hash":-1672404896,"desc":"","name":"Automated Oven"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memory_access":"ReadWrite","memory_size":64}},"StructureBackLiquidPressureRegulator":{"prefab":{"prefab_name":"StructureBackLiquidPressureRegulator","prefab_hash":2099900163,"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.","name":"Liquid Back Volume Regulator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureBackPressureRegulator":{"prefab":{"prefab_name":"StructureBackPressureRegulator","prefab_hash":-1149857558,"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.","name":"Back Pressure Regulator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureBasketHoop":{"prefab":{"prefab_name":"StructureBasketHoop","prefab_hash":-1613497288,"desc":"","name":"Basket Hoop"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBattery":{"prefab":{"prefab_name":"StructureBattery","prefab_hash":-400115994,"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).","name":"Station Battery"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"Read","Error":"Read","Lock":"ReadWrite","Charge":"Read","Maximum":"Read","Ratio":"Read","PowerPotential":"Read","PowerActual":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructureBatteryCharger":{"prefab":{"prefab_name":"StructureBatteryCharger","prefab_hash":1945930022,"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.","name":"Battery Cell Charger"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBatteryChargerSmall":{"prefab":{"prefab_name":"StructureBatteryChargerSmall","prefab_hash":-761772413,"desc":"","name":"Battery Charger Small"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connection_list":[{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBatteryLarge":{"prefab":{"prefab_name":"StructureBatteryLarge","prefab_hash":-1388288459,"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). ","name":"Station Battery (Large)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"Read","Error":"Read","Lock":"ReadWrite","Charge":"Read","Maximum":"Read","Ratio":"Read","PowerPotential":"Read","PowerActual":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructureBatteryMedium":{"prefab":{"prefab_name":"StructureBatteryMedium","prefab_hash":-1125305264,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery (Medium)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"Read","Charge":"Read","Maximum":"Read","Ratio":"Read","PowerPotential":"Read","PowerActual":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureBatterySmall":{"prefab":{"prefab_name":"StructureBatterySmall","prefab_hash":-2123455080,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Auxiliary Rocket Battery "},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"Read","Charge":"Read","Maximum":"Read","Ratio":"Read","PowerPotential":"Read","PowerActual":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureBeacon":{"prefab":{"prefab_name":"StructureBeacon","prefab_hash":-188177083,"desc":"","name":"Beacon"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Color":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBench":{"prefab":{"prefab_name":"StructureBench","prefab_hash":-2042448192,"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.","name":"Powered Bench"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBench1":{"prefab":{"prefab_name":"StructureBench1","prefab_hash":406745009,"desc":"","name":"Bench (Counter Style)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBench2":{"prefab":{"prefab_name":"StructureBench2","prefab_hash":-2127086069,"desc":"","name":"Bench (High Tech Style)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBench3":{"prefab":{"prefab_name":"StructureBench3","prefab_hash":-164622691,"desc":"","name":"Bench (Frame Style)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBench4":{"prefab":{"prefab_name":"StructureBench4","prefab_hash":1750375230,"desc":"","name":"Bench (Workbench Style)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBlastDoor":{"prefab":{"prefab_name":"StructureBlastDoor","prefab_hash":337416191,"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.","name":"Blast Door"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBlockBed":{"prefab":{"prefab_name":"StructureBlockBed","prefab_hash":697908419,"desc":"Description coming.","name":"Block Bed"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connection_list":[{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBlocker":{"prefab":{"prefab_name":"StructureBlocker","prefab_hash":378084505,"desc":"","name":"Blocker"},"structure":{"small_grid":false}},"StructureCableAnalysizer":{"prefab":{"prefab_name":"StructureCableAnalysizer","prefab_hash":1036015121,"desc":"","name":"Cable Analyzer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PowerPotential":"Read","PowerActual":"Read","PowerRequired":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureCableCorner":{"prefab":{"prefab_name":"StructureCableCorner","prefab_hash":-889269388,"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).","name":"Cable (Corner)"},"structure":{"small_grid":true}},"StructureCableCorner3":{"prefab":{"prefab_name":"StructureCableCorner3","prefab_hash":980469101,"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).","name":"Cable (3-Way Corner)"},"structure":{"small_grid":true}},"StructureCableCorner3Burnt":{"prefab":{"prefab_name":"StructureCableCorner3Burnt","prefab_hash":318437449,"desc":"","name":"Burnt Cable (3-Way Corner)"},"structure":{"small_grid":true}},"StructureCableCorner3HBurnt":{"prefab":{"prefab_name":"StructureCableCorner3HBurnt","prefab_hash":2393826,"desc":"","name":""},"structure":{"small_grid":true}},"StructureCableCorner4":{"prefab":{"prefab_name":"StructureCableCorner4","prefab_hash":-1542172466,"desc":"","name":"Cable (4-Way Corner)"},"structure":{"small_grid":true}},"StructureCableCorner4Burnt":{"prefab":{"prefab_name":"StructureCableCorner4Burnt","prefab_hash":268421361,"desc":"","name":"Burnt Cable (4-Way Corner)"},"structure":{"small_grid":true}},"StructureCableCorner4HBurnt":{"prefab":{"prefab_name":"StructureCableCorner4HBurnt","prefab_hash":-981223316,"desc":"","name":"Burnt Heavy Cable (4-Way Corner)"},"structure":{"small_grid":true}},"StructureCableCornerBurnt":{"prefab":{"prefab_name":"StructureCableCornerBurnt","prefab_hash":-177220914,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"small_grid":true}},"StructureCableCornerH":{"prefab":{"prefab_name":"StructureCableCornerH","prefab_hash":-39359015,"desc":"","name":"Heavy Cable (Corner)"},"structure":{"small_grid":true}},"StructureCableCornerH3":{"prefab":{"prefab_name":"StructureCableCornerH3","prefab_hash":-1843379322,"desc":"","name":"Heavy Cable (3-Way Corner)"},"structure":{"small_grid":true}},"StructureCableCornerH4":{"prefab":{"prefab_name":"StructureCableCornerH4","prefab_hash":205837861,"desc":"","name":"Heavy Cable (4-Way Corner)"},"structure":{"small_grid":true}},"StructureCableCornerHBurnt":{"prefab":{"prefab_name":"StructureCableCornerHBurnt","prefab_hash":1931412811,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"small_grid":true}},"StructureCableFuse100k":{"prefab":{"prefab_name":"StructureCableFuse100k","prefab_hash":281380789,"desc":"","name":"Fuse (100kW)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureCableFuse1k":{"prefab":{"prefab_name":"StructureCableFuse1k","prefab_hash":-1103727120,"desc":"","name":"Fuse (1kW)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureCableFuse50k":{"prefab":{"prefab_name":"StructureCableFuse50k","prefab_hash":-349716617,"desc":"","name":"Fuse (50kW)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureCableFuse5k":{"prefab":{"prefab_name":"StructureCableFuse5k","prefab_hash":-631590668,"desc":"","name":"Fuse (5kW)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureCableJunction":{"prefab":{"prefab_name":"StructureCableJunction","prefab_hash":-175342021,"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).","name":"Cable (Junction)"},"structure":{"small_grid":true}},"StructureCableJunction4":{"prefab":{"prefab_name":"StructureCableJunction4","prefab_hash":1112047202,"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).","name":"Cable (4-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunction4Burnt":{"prefab":{"prefab_name":"StructureCableJunction4Burnt","prefab_hash":-1756896811,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunction4HBurnt":{"prefab":{"prefab_name":"StructureCableJunction4HBurnt","prefab_hash":-115809132,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunction5":{"prefab":{"prefab_name":"StructureCableJunction5","prefab_hash":894390004,"desc":"","name":"Cable (5-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunction5Burnt":{"prefab":{"prefab_name":"StructureCableJunction5Burnt","prefab_hash":1545286256,"desc":"","name":"Burnt Cable (5-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunction6":{"prefab":{"prefab_name":"StructureCableJunction6","prefab_hash":-1404690610,"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).","name":"Cable (6-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunction6Burnt":{"prefab":{"prefab_name":"StructureCableJunction6Burnt","prefab_hash":-628145954,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunction6HBurnt":{"prefab":{"prefab_name":"StructureCableJunction6HBurnt","prefab_hash":1854404029,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunctionBurnt":{"prefab":{"prefab_name":"StructureCableJunctionBurnt","prefab_hash":-1620686196,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"small_grid":true}},"StructureCableJunctionH":{"prefab":{"prefab_name":"StructureCableJunctionH","prefab_hash":469451637,"desc":"","name":"Heavy Cable (3-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunctionH4":{"prefab":{"prefab_name":"StructureCableJunctionH4","prefab_hash":-742234680,"desc":"","name":"Heavy Cable (4-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunctionH5":{"prefab":{"prefab_name":"StructureCableJunctionH5","prefab_hash":-1530571426,"desc":"","name":"Heavy Cable (5-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunctionH5Burnt":{"prefab":{"prefab_name":"StructureCableJunctionH5Burnt","prefab_hash":1701593300,"desc":"","name":"Burnt Heavy Cable (5-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunctionH6":{"prefab":{"prefab_name":"StructureCableJunctionH6","prefab_hash":1036780772,"desc":"","name":"Heavy Cable (6-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunctionHBurnt":{"prefab":{"prefab_name":"StructureCableJunctionHBurnt","prefab_hash":-341365649,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"small_grid":true}},"StructureCableStraight":{"prefab":{"prefab_name":"StructureCableStraight","prefab_hash":605357050,"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).","name":"Cable (Straight)"},"structure":{"small_grid":true}},"StructureCableStraightBurnt":{"prefab":{"prefab_name":"StructureCableStraightBurnt","prefab_hash":-1196981113,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"small_grid":true}},"StructureCableStraightH":{"prefab":{"prefab_name":"StructureCableStraightH","prefab_hash":-146200530,"desc":"","name":"Heavy Cable (Straight)"},"structure":{"small_grid":true}},"StructureCableStraightHBurnt":{"prefab":{"prefab_name":"StructureCableStraightHBurnt","prefab_hash":2085762089,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"small_grid":true}},"StructureCamera":{"prefab":{"prefab_name":"StructureCamera","prefab_hash":-342072665,"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.","name":"Camera"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Mode":"ReadWrite","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureCapsuleTankGas":{"prefab":{"prefab_name":"StructureCapsuleTankGas","prefab_hash":-1385712131,"desc":"","name":"Gas Capsule Tank Small"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureCapsuleTankLiquid":{"prefab":{"prefab_name":"StructureCapsuleTankLiquid","prefab_hash":1415396263,"desc":"","name":"Liquid Capsule Tank Small"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureCargoStorageMedium":{"prefab":{"prefab_name":"StructureCargoStorageMedium","prefab_hash":1151864003,"desc":"","name":"Cargo Storage (Medium)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"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"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"device_pins_length":null,"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}},"StructureCargoStorageSmall":{"prefab":{"prefab_name":"StructureCargoStorageSmall","prefab_hash":-1493672123,"desc":"","name":"Cargo Storage (Small)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"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"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"device_pins_length":null,"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}},"StructureCentrifuge":{"prefab":{"prefab_name":"StructureCentrifuge","prefab_hash":690945935,"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.","name":"Centrifuge"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Reagents":"Read","On":"ReadWrite","RequiredPower":"Read","ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureChair":{"prefab":{"prefab_name":"StructureChair","prefab_hash":1167659360,"desc":"One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs.","name":"Chair"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureChairBacklessDouble":{"prefab":{"prefab_name":"StructureChairBacklessDouble","prefab_hash":1944858936,"desc":"","name":"Chair (Backless Double)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureChairBacklessSingle":{"prefab":{"prefab_name":"StructureChairBacklessSingle","prefab_hash":1672275150,"desc":"","name":"Chair (Backless Single)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureChairBoothCornerLeft":{"prefab":{"prefab_name":"StructureChairBoothCornerLeft","prefab_hash":-367720198,"desc":"","name":"Chair (Booth Corner Left)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureChairBoothMiddle":{"prefab":{"prefab_name":"StructureChairBoothMiddle","prefab_hash":1640720378,"desc":"","name":"Chair (Booth Middle)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureChairRectangleDouble":{"prefab":{"prefab_name":"StructureChairRectangleDouble","prefab_hash":-1152812099,"desc":"","name":"Chair (Rectangle Double)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureChairRectangleSingle":{"prefab":{"prefab_name":"StructureChairRectangleSingle","prefab_hash":-1425428917,"desc":"","name":"Chair (Rectangle Single)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureChairThickDouble":{"prefab":{"prefab_name":"StructureChairThickDouble","prefab_hash":-1245724402,"desc":"","name":"Chair (Thick Double)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureChairThickSingle":{"prefab":{"prefab_name":"StructureChairThickSingle","prefab_hash":-1510009608,"desc":"","name":"Chair (Thick Single)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureChuteBin":{"prefab":{"prefab_name":"StructureChuteBin","prefab_hash":-850484480,"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.","name":"Chute Bin"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Input","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureChuteCorner":{"prefab":{"prefab_name":"StructureChuteCorner","prefab_hash":1360330136,"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.","name":"Chute (Corner)"},"structure":{"small_grid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteDigitalFlipFlopSplitterLeft":{"prefab":{"prefab_name":"StructureChuteDigitalFlipFlopSplitterLeft","prefab_hash":-810874728,"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.","name":"Chute Digital Flip Flop Splitter Left"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Setting":"ReadWrite","Quantity":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","SettingOutput":"ReadWrite","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Output2"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureChuteDigitalFlipFlopSplitterRight":{"prefab":{"prefab_name":"StructureChuteDigitalFlipFlopSplitterRight","prefab_hash":163728359,"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.","name":"Chute Digital Flip Flop Splitter Right"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Setting":"ReadWrite","Quantity":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","SettingOutput":"ReadWrite","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Output2"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureChuteDigitalValveLeft":{"prefab":{"prefab_name":"StructureChuteDigitalValveLeft","prefab_hash":648608238,"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.","name":"Chute Digital Valve Left"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Open":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","Quantity":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureChuteDigitalValveRight":{"prefab":{"prefab_name":"StructureChuteDigitalValveRight","prefab_hash":-1337091041,"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.","name":"Chute Digital Valve Right"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Open":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","Quantity":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureChuteFlipFlopSplitter":{"prefab":{"prefab_name":"StructureChuteFlipFlopSplitter","prefab_hash":-1446854725,"desc":"A chute that toggles between two outputs","name":"Chute Flip Flop Splitter"},"structure":{"small_grid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteInlet":{"prefab":{"prefab_name":"StructureChuteInlet","prefab_hash":-1469588766,"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.","name":"Chute Inlet"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Lock":"ReadWrite","ClearMemory":"Write","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureChuteJunction":{"prefab":{"prefab_name":"StructureChuteJunction","prefab_hash":-611232514,"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.","name":"Chute (Junction)"},"structure":{"small_grid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteOutlet":{"prefab":{"prefab_name":"StructureChuteOutlet","prefab_hash":-1022714809,"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.","name":"Chute Outlet"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Lock":"ReadWrite","ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureChuteOverflow":{"prefab":{"prefab_name":"StructureChuteOverflow","prefab_hash":225377225,"desc":"The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied.","name":"Chute Overflow"},"structure":{"small_grid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteStraight":{"prefab":{"prefab_name":"StructureChuteStraight","prefab_hash":168307007,"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.","name":"Chute (Straight)"},"structure":{"small_grid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteUmbilicalFemale":{"prefab":{"prefab_name":"StructureChuteUmbilicalFemale","prefab_hash":-1918892177,"desc":"","name":"Umbilical Socket (Chute)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"}],"device_pins_length":null,"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}},"StructureChuteUmbilicalFemaleSide":{"prefab":{"prefab_name":"StructureChuteUmbilicalFemaleSide","prefab_hash":-659093969,"desc":"","name":"Umbilical Socket Angle (Chute)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"}],"device_pins_length":null,"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}},"StructureChuteUmbilicalMale":{"prefab":{"prefab_name":"StructureChuteUmbilicalMale","prefab_hash":-958884053,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Chute)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"Read","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureChuteValve":{"prefab":{"prefab_name":"StructureChuteValve","prefab_hash":434875271,"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.","name":"Chute Valve"},"structure":{"small_grid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteWindow":{"prefab":{"prefab_name":"StructureChuteWindow","prefab_hash":-607241919,"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.","name":"Chute (Window)"},"structure":{"small_grid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureCircuitHousing":{"prefab":{"prefab_name":"StructureCircuitHousing","prefab_hash":-128473777,"desc":"","name":"IC Housing"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","LineNumber":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Error":"Read","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","LineNumber":"ReadWrite","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"device_pins_length":6,"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":{"instructions":null,"memory_access":"ReadWrite","memory_size":0}},"StructureCombustionCentrifuge":{"prefab":{"prefab_name":"StructureCombustionCentrifuge","prefab_hash":1238905683,"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 ","name":"Combustion Centrifuge"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{},"2":{}},"logic_types":{"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","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"Read","RatioSteam":"Read","RatioSteamInput":"Read","RatioSteamOutput":"Read","RatioLiquidCarbonDioxide":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","ReferenceId":"Read","RatioHydrogen":"Read","RatioLiquidHydrogen":"Read","RatioPollutedWater":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":true},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"device_pins_length":2,"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}},"StructureCompositeCladdingAngled":{"prefab":{"prefab_name":"StructureCompositeCladdingAngled","prefab_hash":-1513030150,"desc":"","name":"Composite Cladding (Angled)"},"structure":{"small_grid":false}},"StructureCompositeCladdingAngledCorner":{"prefab":{"prefab_name":"StructureCompositeCladdingAngledCorner","prefab_hash":-69685069,"desc":"","name":"Composite Cladding (Angled Corner)"},"structure":{"small_grid":false}},"StructureCompositeCladdingAngledCornerInner":{"prefab":{"prefab_name":"StructureCompositeCladdingAngledCornerInner","prefab_hash":-1841871763,"desc":"","name":"Composite Cladding (Angled Corner Inner)"},"structure":{"small_grid":false}},"StructureCompositeCladdingAngledCornerInnerLong":{"prefab":{"prefab_name":"StructureCompositeCladdingAngledCornerInnerLong","prefab_hash":-1417912632,"desc":"","name":"Composite Cladding (Angled Corner Inner Long)"},"structure":{"small_grid":false}},"StructureCompositeCladdingAngledCornerInnerLongL":{"prefab":{"prefab_name":"StructureCompositeCladdingAngledCornerInnerLongL","prefab_hash":947705066,"desc":"","name":"Composite Cladding (Angled Corner Inner Long L)"},"structure":{"small_grid":false}},"StructureCompositeCladdingAngledCornerInnerLongR":{"prefab":{"prefab_name":"StructureCompositeCladdingAngledCornerInnerLongR","prefab_hash":-1032590967,"desc":"","name":"Composite Cladding (Angled Corner Inner Long R)"},"structure":{"small_grid":false}},"StructureCompositeCladdingAngledCornerLong":{"prefab":{"prefab_name":"StructureCompositeCladdingAngledCornerLong","prefab_hash":850558385,"desc":"","name":"Composite Cladding (Long Angled Corner)"},"structure":{"small_grid":false}},"StructureCompositeCladdingAngledCornerLongR":{"prefab":{"prefab_name":"StructureCompositeCladdingAngledCornerLongR","prefab_hash":-348918222,"desc":"","name":"Composite Cladding (Long Angled Mirrored Corner)"},"structure":{"small_grid":false}},"StructureCompositeCladdingAngledLong":{"prefab":{"prefab_name":"StructureCompositeCladdingAngledLong","prefab_hash":-387546514,"desc":"","name":"Composite Cladding (Long Angled)"},"structure":{"small_grid":false}},"StructureCompositeCladdingCylindrical":{"prefab":{"prefab_name":"StructureCompositeCladdingCylindrical","prefab_hash":212919006,"desc":"","name":"Composite Cladding (Cylindrical)"},"structure":{"small_grid":false}},"StructureCompositeCladdingCylindricalPanel":{"prefab":{"prefab_name":"StructureCompositeCladdingCylindricalPanel","prefab_hash":1077151132,"desc":"","name":"Composite Cladding (Cylindrical Panel)"},"structure":{"small_grid":false}},"StructureCompositeCladdingPanel":{"prefab":{"prefab_name":"StructureCompositeCladdingPanel","prefab_hash":1997436771,"desc":"","name":"Composite Cladding (Panel)"},"structure":{"small_grid":false}},"StructureCompositeCladdingRounded":{"prefab":{"prefab_name":"StructureCompositeCladdingRounded","prefab_hash":-259357734,"desc":"","name":"Composite Cladding (Rounded)"},"structure":{"small_grid":false}},"StructureCompositeCladdingRoundedCorner":{"prefab":{"prefab_name":"StructureCompositeCladdingRoundedCorner","prefab_hash":1951525046,"desc":"","name":"Composite Cladding (Rounded Corner)"},"structure":{"small_grid":false}},"StructureCompositeCladdingRoundedCornerInner":{"prefab":{"prefab_name":"StructureCompositeCladdingRoundedCornerInner","prefab_hash":110184667,"desc":"","name":"Composite Cladding (Rounded Corner Inner)"},"structure":{"small_grid":false}},"StructureCompositeCladdingSpherical":{"prefab":{"prefab_name":"StructureCompositeCladdingSpherical","prefab_hash":139107321,"desc":"","name":"Composite Cladding (Spherical)"},"structure":{"small_grid":false}},"StructureCompositeCladdingSphericalCap":{"prefab":{"prefab_name":"StructureCompositeCladdingSphericalCap","prefab_hash":534213209,"desc":"","name":"Composite Cladding (Spherical Cap)"},"structure":{"small_grid":false}},"StructureCompositeCladdingSphericalCorner":{"prefab":{"prefab_name":"StructureCompositeCladdingSphericalCorner","prefab_hash":1751355139,"desc":"","name":"Composite Cladding (Spherical Corner)"},"structure":{"small_grid":false}},"StructureCompositeDoor":{"prefab":{"prefab_name":"StructureCompositeDoor","prefab_hash":-793837322,"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.","name":"Composite Door"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureCompositeFloorGrating":{"prefab":{"prefab_name":"StructureCompositeFloorGrating","prefab_hash":324868581,"desc":"While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings.","name":"Composite Floor Grating"},"structure":{"small_grid":false}},"StructureCompositeFloorGrating2":{"prefab":{"prefab_name":"StructureCompositeFloorGrating2","prefab_hash":-895027741,"desc":"","name":"Composite Floor Grating (Type 2)"},"structure":{"small_grid":false}},"StructureCompositeFloorGrating3":{"prefab":{"prefab_name":"StructureCompositeFloorGrating3","prefab_hash":-1113471627,"desc":"","name":"Composite Floor Grating (Type 3)"},"structure":{"small_grid":false}},"StructureCompositeFloorGrating4":{"prefab":{"prefab_name":"StructureCompositeFloorGrating4","prefab_hash":600133846,"desc":"","name":"Composite Floor Grating (Type 4)"},"structure":{"small_grid":false}},"StructureCompositeFloorGratingOpen":{"prefab":{"prefab_name":"StructureCompositeFloorGratingOpen","prefab_hash":2109695912,"desc":"","name":"Composite Floor Grating Open"},"structure":{"small_grid":false}},"StructureCompositeFloorGratingOpenRotated":{"prefab":{"prefab_name":"StructureCompositeFloorGratingOpenRotated","prefab_hash":882307910,"desc":"","name":"Composite Floor Grating Open Rotated"},"structure":{"small_grid":false}},"StructureCompositeWall":{"prefab":{"prefab_name":"StructureCompositeWall","prefab_hash":1237302061,"desc":"Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties.","name":"Composite Wall (Type 1)"},"structure":{"small_grid":false}},"StructureCompositeWall02":{"prefab":{"prefab_name":"StructureCompositeWall02","prefab_hash":718343384,"desc":"","name":"Composite Wall (Type 2)"},"structure":{"small_grid":false}},"StructureCompositeWall03":{"prefab":{"prefab_name":"StructureCompositeWall03","prefab_hash":1574321230,"desc":"","name":"Composite Wall (Type 3)"},"structure":{"small_grid":false}},"StructureCompositeWall04":{"prefab":{"prefab_name":"StructureCompositeWall04","prefab_hash":-1011701267,"desc":"","name":"Composite Wall (Type 4)"},"structure":{"small_grid":false}},"StructureCompositeWindow":{"prefab":{"prefab_name":"StructureCompositeWindow","prefab_hash":-2060571986,"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.","name":"Composite Window"},"structure":{"small_grid":false}},"StructureCompositeWindowIron":{"prefab":{"prefab_name":"StructureCompositeWindowIron","prefab_hash":-688284639,"desc":"","name":"Iron Window"},"structure":{"small_grid":false}},"StructureComputer":{"prefab":{"prefab_name":"StructureComputer","prefab_hash":-626563514,"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","name":"Computer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{},"2":{}},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Data Disk","typ":"DataDisk"},{"name":"Data Disk","typ":"DataDisk"},{"name":"Motherboard","typ":"Motherboard"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureCondensationChamber":{"prefab":{"prefab_name":"StructureCondensationChamber","prefab_hash":1420719315,"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.","name":"Condensation Chamber"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"StructureCondensationValve":{"prefab":{"prefab_name":"StructureCondensationValve","prefab_hash":-965741795,"desc":"Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction.","name":"Condensation Valve"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Output"},{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureConsole":{"prefab":{"prefab_name":"StructureConsole","prefab_hash":235638270,"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.","name":"Console"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureConsoleDual":{"prefab":{"prefab_name":"StructureConsoleDual","prefab_hash":-722284333,"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.","name":"Console Dual"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureConsoleLED1x2":{"prefab":{"prefab_name":"StructureConsoleLED1x2","prefab_hash":-53151617,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Medium)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Color":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Default","1":"Percent","2":"Power"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureConsoleLED1x3":{"prefab":{"prefab_name":"StructureConsoleLED1x3","prefab_hash":-1949054743,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Large)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Color":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Default","1":"Percent","2":"Power"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureConsoleLED5":{"prefab":{"prefab_name":"StructureConsoleLED5","prefab_hash":-815193061,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Small)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Color":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Default","1":"Percent","2":"Power"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureConsoleMonitor":{"prefab":{"prefab_name":"StructureConsoleMonitor","prefab_hash":801677497,"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.","name":"Console Monitor"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureControlChair":{"prefab":{"prefab_name":"StructureControlChair","prefab_hash":-1961153710,"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.","name":"Control Chair"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Entity","typ":"Entity"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureCornerLocker":{"prefab":{"prefab_name":"StructureCornerLocker","prefab_hash":-1968255729,"desc":"","name":"Corner Locker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureCrateMount":{"prefab":{"prefab_name":"StructureCrateMount","prefab_hash":-733500083,"desc":"","name":"Container Mount"},"structure":{"small_grid":true},"slots":[{"name":"Container Slot","typ":"None"}]},"StructureCryoTube":{"prefab":{"prefab_name":"StructureCryoTube","prefab_hash":1938254586,"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.","name":"CryoTube"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureCryoTubeHorizontal":{"prefab":{"prefab_name":"StructureCryoTubeHorizontal","prefab_hash":1443059329,"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.","name":"Cryo Tube Horizontal"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureCryoTubeVertical":{"prefab":{"prefab_name":"StructureCryoTubeVertical","prefab_hash":-1381321828,"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.","name":"Cryo Tube Vertical"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureDaylightSensor":{"prefab":{"prefab_name":"StructureDaylightSensor","prefab_hash":1076425094,"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.","name":"Daylight Sensor"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Mode":"ReadWrite","Activate":"ReadWrite","Horizontal":"Read","Vertical":"Read","SolarAngle":"Read","On":"ReadWrite","PrefabHash":"Read","SolarIrradiance":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Default","1":"Horizontal","2":"Vertical"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureDeepMiner":{"prefab":{"prefab_name":"StructureDeepMiner","prefab_hash":265720906,"desc":"Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s","name":"Deep Miner"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"Power":"Read","Error":"Read","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureDigitalValve":{"prefab":{"prefab_name":"StructureDigitalValve","prefab_hash":-1280984102,"desc":"The digital valve allows Stationeers to create logic-controlled valves and pipe networks.","name":"Digital Valve"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureDiode":{"prefab":{"prefab_name":"StructureDiode","prefab_hash":1944485013,"desc":"","name":"LED"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Color":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureDiodeSlide":{"prefab":{"prefab_name":"StructureDiodeSlide","prefab_hash":576516101,"desc":"","name":"Diode Slide"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureDockPortSide":{"prefab":{"prefab_name":"StructureDockPortSide","prefab_hash":-137465079,"desc":"","name":"Dock (Port Side)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureDrinkingFountain":{"prefab":{"prefab_name":"StructureDrinkingFountain","prefab_hash":1968371847,"desc":"","name":""},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureElectrolyzer":{"prefab":{"prefab_name":"StructureElectrolyzer","prefab_hash":-1668992663,"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.","name":"Electrolyzer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"Read","RatioSteam":"Read","RatioSteamInput":"Read","RatioSteamOutput":"Read","RatioLiquidCarbonDioxide":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","ReferenceId":"Read","RatioHydrogen":"Read","RatioLiquidHydrogen":"Read","RatioPollutedWater":"Read","NameHash":"Read"},"modes":{"0":"Idle","1":"Active"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":2,"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}},"StructureElectronicsPrinter":{"prefab":{"prefab_name":"StructureElectronicsPrinter","prefab_hash":1307165496,"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.","name":"Electronics Printer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memory_access":"ReadWrite","memory_size":64}},"StructureElevatorLevelFront":{"prefab":{"prefab_name":"StructureElevatorLevelFront","prefab_hash":-827912235,"desc":"","name":"Elevator Level (Cabled)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Activate":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","ElevatorSpeed":"ReadWrite","ElevatorLevel":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureElevatorLevelIndustrial":{"prefab":{"prefab_name":"StructureElevatorLevelIndustrial","prefab_hash":2060648791,"desc":"","name":"Elevator Level"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Activate":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","ElevatorSpeed":"ReadWrite","ElevatorLevel":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"}],"device_pins_length":null,"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}},"StructureElevatorShaft":{"prefab":{"prefab_name":"StructureElevatorShaft","prefab_hash":826144419,"desc":"","name":"Elevator Shaft (Cabled)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","On":"ReadWrite","RequiredPower":"Read","ElevatorSpeed":"ReadWrite","ElevatorLevel":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureElevatorShaftIndustrial":{"prefab":{"prefab_name":"StructureElevatorShaftIndustrial","prefab_hash":1998354978,"desc":"","name":"Elevator Shaft"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"ElevatorSpeed":"ReadWrite","ElevatorLevel":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"}],"device_pins_length":null,"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}},"StructureEmergencyButton":{"prefab":{"prefab_name":"StructureEmergencyButton","prefab_hash":1668452680,"desc":"Description coming.","name":"Important Button"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Activate":"ReadWrite","Lock":"ReadWrite","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureEngineMountTypeA1":{"prefab":{"prefab_name":"StructureEngineMountTypeA1","prefab_hash":2035781224,"desc":"","name":"Engine Mount (Type A1)"},"structure":{"small_grid":false}},"StructureEvaporationChamber":{"prefab":{"prefab_name":"StructureEvaporationChamber","prefab_hash":-1429782576,"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.","name":"Evaporation Chamber"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"StructureExpansionValve":{"prefab":{"prefab_name":"StructureExpansionValve","prefab_hash":195298587,"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.","name":"Expansion Valve"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureFairingTypeA1":{"prefab":{"prefab_name":"StructureFairingTypeA1","prefab_hash":1622567418,"desc":"","name":"Fairing (Type A1)"},"structure":{"small_grid":false}},"StructureFairingTypeA2":{"prefab":{"prefab_name":"StructureFairingTypeA2","prefab_hash":-104908736,"desc":"","name":"Fairing (Type A2)"},"structure":{"small_grid":false}},"StructureFairingTypeA3":{"prefab":{"prefab_name":"StructureFairingTypeA3","prefab_hash":-1900541738,"desc":"","name":"Fairing (Type A3)"},"structure":{"small_grid":false}},"StructureFiltration":{"prefab":{"prefab_name":"StructureFiltration","prefab_hash":-348054045,"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","name":"Filtration"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{},"2":{}},"logic_types":{"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","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrogenOutput2":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidOxygenOutput2":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"Read","RatioLiquidVolatilesOutput2":"Read","RatioSteamInput":"Read","RatioSteamOutput":"Read","RatioSteamOutput2":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidCarbonDioxideOutput2":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidPollutantOutput2":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidNitrousOxideOutput2":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Idle","1":"Active"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":true},"slots":[{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Waste"},{"typ":"Power","role":"None"}],"device_pins_length":2,"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}},"StructureFlagSmall":{"prefab":{"prefab_name":"StructureFlagSmall","prefab_hash":-1529819532,"desc":"","name":"Small Flag"},"structure":{"small_grid":true}},"StructureFlashingLight":{"prefab":{"prefab_name":"StructureFlashingLight","prefab_hash":-1535893860,"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'.","name":"Flashing Light"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureFlatBench":{"prefab":{"prefab_name":"StructureFlatBench","prefab_hash":839890807,"desc":"","name":"Bench (Flat)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureFloorDrain":{"prefab":{"prefab_name":"StructureFloorDrain","prefab_hash":1048813293,"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.","name":"Passive Liquid Inlet"},"structure":{"small_grid":true}},"StructureFrame":{"prefab":{"prefab_name":"StructureFrame","prefab_hash":1432512808,"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.","name":"Steel Frame"},"structure":{"small_grid":false}},"StructureFrameCorner":{"prefab":{"prefab_name":"StructureFrameCorner","prefab_hash":-2112390778,"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.","name":"Steel Frame (Corner)"},"structure":{"small_grid":false}},"StructureFrameCornerCut":{"prefab":{"prefab_name":"StructureFrameCornerCut","prefab_hash":271315669,"desc":"0.Mode0\n1.Mode1","name":"Steel Frame (Corner Cut)"},"structure":{"small_grid":false}},"StructureFrameIron":{"prefab":{"prefab_name":"StructureFrameIron","prefab_hash":-1240951678,"desc":"","name":"Iron Frame"},"structure":{"small_grid":false}},"StructureFrameSide":{"prefab":{"prefab_name":"StructureFrameSide","prefab_hash":-302420053,"desc":"More durable than the Iron Frame, steel frames also provide variations for more ornate constructions.","name":"Steel Frame (Side)"},"structure":{"small_grid":false}},"StructureFridgeBig":{"prefab":{"prefab_name":"StructureFridgeBig","prefab_hash":958476921,"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.","name":"Fridge (Large)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureFridgeSmall":{"prefab":{"prefab_name":"StructureFridgeSmall","prefab_hash":751887598,"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.","name":"Fridge Small"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connection_list":[{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureFurnace":{"prefab":{"prefab_name":"StructureFurnace","prefab_hash":1947944864,"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.","name":"Furnace"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureFuselageTypeA1":{"prefab":{"prefab_name":"StructureFuselageTypeA1","prefab_hash":1033024712,"desc":"","name":"Fuselage (Type A1)"},"structure":{"small_grid":false}},"StructureFuselageTypeA2":{"prefab":{"prefab_name":"StructureFuselageTypeA2","prefab_hash":-1533287054,"desc":"","name":"Fuselage (Type A2)"},"structure":{"small_grid":false}},"StructureFuselageTypeA4":{"prefab":{"prefab_name":"StructureFuselageTypeA4","prefab_hash":1308115015,"desc":"","name":"Fuselage (Type A4)"},"structure":{"small_grid":false}},"StructureFuselageTypeC5":{"prefab":{"prefab_name":"StructureFuselageTypeC5","prefab_hash":147395155,"desc":"","name":"Fuselage (Type C5)"},"structure":{"small_grid":false}},"StructureGasGenerator":{"prefab":{"prefab_name":"StructureGasGenerator","prefab_hash":1165997963,"desc":"","name":"Gas Fuel Generator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureGasMixer":{"prefab":{"prefab_name":"StructureGasMixer","prefab_hash":2104106366,"desc":"Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%.","name":"Gas Mixer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureGasSensor":{"prefab":{"prefab_name":"StructureGasSensor","prefab_hash":-1252983604,"desc":"Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents.","name":"Gas Sensor"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureGasTankStorage":{"prefab":{"prefab_name":"StructureGasTankStorage","prefab_hash":1632165346,"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.","name":"Gas Tank Storage"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Pressure":"Read","Temperature":"Read","RatioOxygen":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","Quantity":"Read","RatioNitrousOxide":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureGasUmbilicalFemale":{"prefab":{"prefab_name":"StructureGasUmbilicalFemale","prefab_hash":-1680477930,"desc":"","name":"Umbilical Socket (Gas)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureGasUmbilicalFemaleSide":{"prefab":{"prefab_name":"StructureGasUmbilicalFemaleSide","prefab_hash":-648683847,"desc":"","name":"Umbilical Socket Angle (Gas)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureGasUmbilicalMale":{"prefab":{"prefab_name":"StructureGasUmbilicalMale","prefab_hash":-1814939203,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Gas)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureGlassDoor":{"prefab":{"prefab_name":"StructureGlassDoor","prefab_hash":-324331872,"desc":"0.Operate\n1.Logic","name":"Glass Door"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureGovernedGasEngine":{"prefab":{"prefab_name":"StructureGovernedGasEngine","prefab_hash":-214232602,"desc":"The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas.","name":"Pumped Gas Engine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureGroundBasedTelescope":{"prefab":{"prefab_name":"StructureGroundBasedTelescope","prefab_hash":-619745681,"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.","name":"Telescope"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureGrowLight":{"prefab":{"prefab_name":"StructureGrowLight","prefab_hash":-1758710260,"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. ","name":"Grow Light"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureHarvie":{"prefab":{"prefab_name":"StructureHarvie","prefab_hash":958056199,"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.","name":"Harvie"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Idle","1":"Happy","2":"UnHappy","3":"Dead"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Plant"},{"name":"Export","typ":"None"},{"name":"Hand","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureHeatExchangeLiquidtoGas":{"prefab":{"prefab_name":"StructureHeatExchangeLiquidtoGas","prefab_hash":944685608,"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.","name":"Heat Exchanger - Liquid + Gas"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"StructureHeatExchangerGastoGas":{"prefab":{"prefab_name":"StructureHeatExchangerGastoGas","prefab_hash":21266291,"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.","name":"Heat Exchanger - Gas"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Output"}],"device_pins_length":null,"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}},"StructureHeatExchangerLiquidtoLiquid":{"prefab":{"prefab_name":"StructureHeatExchangerLiquidtoLiquid","prefab_hash":-613784254,"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","name":"Heat Exchanger - Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"StructureHorizontalAutoMiner":{"prefab":{"prefab_name":"StructureHorizontalAutoMiner","prefab_hash":1070427573,"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","name":"OGRE"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureHydraulicPipeBender":{"prefab":{"prefab_name":"StructureHydraulicPipeBender","prefab_hash":-1888248335,"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.","name":"Hydraulic Pipe Bender"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memory_access":"ReadWrite","memory_size":64}},"StructureHydroponicsStation":{"prefab":{"prefab_name":"StructureHydroponicsStation","prefab_hash":1441767298,"desc":"","name":"Hydroponics Station"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":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"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureHydroponicsTray":{"prefab":{"prefab_name":"StructureHydroponicsTray","prefab_hash":1464854517,"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.","name":"Hydroponics Tray"},"structure":{"small_grid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}]},"StructureHydroponicsTrayData":{"prefab":{"prefab_name":"StructureHydroponicsTrayData","prefab_hash":-1841632400,"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.","name":"Hydroponics Device"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}],"device":{"connection_list":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureIceCrusher":{"prefab":{"prefab_name":"StructureIceCrusher","prefab_hash":443849486,"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.","name":"Ice Crusher"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"device_pins_length":null,"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}},"StructureIgniter":{"prefab":{"prefab_name":"StructureIgniter","prefab_hash":1005491513,"desc":"It gets the party started. Especially if that party is an explosive gas mixture.","name":"Igniter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureInLineTankGas1x1":{"prefab":{"prefab_name":"StructureInLineTankGas1x1","prefab_hash":-1693382705,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Gas"},"structure":{"small_grid":true}},"StructureInLineTankGas1x2":{"prefab":{"prefab_name":"StructureInLineTankGas1x2","prefab_hash":35149429,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Gas"},"structure":{"small_grid":true}},"StructureInLineTankLiquid1x1":{"prefab":{"prefab_name":"StructureInLineTankLiquid1x1","prefab_hash":543645499,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Liquid"},"structure":{"small_grid":true}},"StructureInLineTankLiquid1x2":{"prefab":{"prefab_name":"StructureInLineTankLiquid1x2","prefab_hash":-1183969663,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Liquid"},"structure":{"small_grid":true}},"StructureInsulatedInLineTankGas1x1":{"prefab":{"prefab_name":"StructureInsulatedInLineTankGas1x1","prefab_hash":1818267386,"desc":"","name":"Insulated In-Line Tank Small Gas"},"structure":{"small_grid":true}},"StructureInsulatedInLineTankGas1x2":{"prefab":{"prefab_name":"StructureInsulatedInLineTankGas1x2","prefab_hash":-177610944,"desc":"","name":"Insulated In-Line Tank Gas"},"structure":{"small_grid":true}},"StructureInsulatedInLineTankLiquid1x1":{"prefab":{"prefab_name":"StructureInsulatedInLineTankLiquid1x1","prefab_hash":-813426145,"desc":"","name":"Insulated In-Line Tank Small Liquid"},"structure":{"small_grid":true}},"StructureInsulatedInLineTankLiquid1x2":{"prefab":{"prefab_name":"StructureInsulatedInLineTankLiquid1x2","prefab_hash":1452100517,"desc":"","name":"Insulated In-Line Tank Liquid"},"structure":{"small_grid":true}},"StructureInsulatedPipeCorner":{"prefab":{"prefab_name":"StructureInsulatedPipeCorner","prefab_hash":-1967711059,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Corner)"},"structure":{"small_grid":true}},"StructureInsulatedPipeCrossJunction":{"prefab":{"prefab_name":"StructureInsulatedPipeCrossJunction","prefab_hash":-92778058,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Cross Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeCrossJunction3":{"prefab":{"prefab_name":"StructureInsulatedPipeCrossJunction3","prefab_hash":1328210035,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (3-Way Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeCrossJunction4":{"prefab":{"prefab_name":"StructureInsulatedPipeCrossJunction4","prefab_hash":-783387184,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (4-Way Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeCrossJunction5":{"prefab":{"prefab_name":"StructureInsulatedPipeCrossJunction5","prefab_hash":-1505147578,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (5-Way Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeCrossJunction6":{"prefab":{"prefab_name":"StructureInsulatedPipeCrossJunction6","prefab_hash":1061164284,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (6-Way Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeLiquidCorner":{"prefab":{"prefab_name":"StructureInsulatedPipeLiquidCorner","prefab_hash":1713710802,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Corner)"},"structure":{"small_grid":true}},"StructureInsulatedPipeLiquidCrossJunction":{"prefab":{"prefab_name":"StructureInsulatedPipeLiquidCrossJunction","prefab_hash":1926651727,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (3-Way Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeLiquidCrossJunction4":{"prefab":{"prefab_name":"StructureInsulatedPipeLiquidCrossJunction4","prefab_hash":363303270,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (4-Way Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeLiquidCrossJunction5":{"prefab":{"prefab_name":"StructureInsulatedPipeLiquidCrossJunction5","prefab_hash":1654694384,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (5-Way Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeLiquidCrossJunction6":{"prefab":{"prefab_name":"StructureInsulatedPipeLiquidCrossJunction6","prefab_hash":-72748982,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (6-Way Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeLiquidStraight":{"prefab":{"prefab_name":"StructureInsulatedPipeLiquidStraight","prefab_hash":295678685,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Straight)"},"structure":{"small_grid":true}},"StructureInsulatedPipeLiquidTJunction":{"prefab":{"prefab_name":"StructureInsulatedPipeLiquidTJunction","prefab_hash":-532384855,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (T Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeStraight":{"prefab":{"prefab_name":"StructureInsulatedPipeStraight","prefab_hash":2134172356,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Straight)"},"structure":{"small_grid":true}},"StructureInsulatedPipeTJunction":{"prefab":{"prefab_name":"StructureInsulatedPipeTJunction","prefab_hash":-2076086215,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (T Junction)"},"structure":{"small_grid":true}},"StructureInsulatedTankConnector":{"prefab":{"prefab_name":"StructureInsulatedTankConnector","prefab_hash":-31273349,"desc":"","name":"Insulated Tank Connector"},"structure":{"small_grid":true},"slots":[{"name":"","typ":"None"}]},"StructureInsulatedTankConnectorLiquid":{"prefab":{"prefab_name":"StructureInsulatedTankConnectorLiquid","prefab_hash":-1602030414,"desc":"","name":"Insulated Tank Connector Liquid"},"structure":{"small_grid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureInteriorDoorGlass":{"prefab":{"prefab_name":"StructureInteriorDoorGlass","prefab_hash":-2096421875,"desc":"0.Operate\n1.Logic","name":"Interior Door Glass"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureInteriorDoorPadded":{"prefab":{"prefab_name":"StructureInteriorDoorPadded","prefab_hash":847461335,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureInteriorDoorPaddedThin":{"prefab":{"prefab_name":"StructureInteriorDoorPaddedThin","prefab_hash":1981698201,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded Thin"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureInteriorDoorTriangle":{"prefab":{"prefab_name":"StructureInteriorDoorTriangle","prefab_hash":-1182923101,"desc":"0.Operate\n1.Logic","name":"Interior Door Triangle"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureKlaxon":{"prefab":{"prefab_name":"StructureKlaxon","prefab_hash":-828056979,"desc":"Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output.","name":"Klaxon Speaker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Volume":"ReadWrite","PrefabHash":"Read","SoundAlert":"ReadWrite","ReferenceId":"Read","NameHash":"Read"},"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"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLadder":{"prefab":{"prefab_name":"StructureLadder","prefab_hash":-415420281,"desc":"","name":"Ladder"},"structure":{"small_grid":true}},"StructureLadderEnd":{"prefab":{"prefab_name":"StructureLadderEnd","prefab_hash":1541734993,"desc":"","name":"Ladder End"},"structure":{"small_grid":true}},"StructureLargeDirectHeatExchangeGastoGas":{"prefab":{"prefab_name":"StructureLargeDirectHeatExchangeGastoGas","prefab_hash":-1230658883,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Gas"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"}],"device_pins_length":null,"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}},"StructureLargeDirectHeatExchangeGastoLiquid":{"prefab":{"prefab_name":"StructureLargeDirectHeatExchangeGastoLiquid","prefab_hash":1412338038,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Input2"}],"device_pins_length":null,"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}},"StructureLargeDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefab_name":"StructureLargeDirectHeatExchangeLiquidtoLiquid","prefab_hash":792686502,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchange - Liquid + Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"device_pins_length":null,"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}},"StructureLargeExtendableRadiator":{"prefab":{"prefab_name":"StructureLargeExtendableRadiator","prefab_hash":-566775170,"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.","name":"Large Extendable Radiator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","Horizontal":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"StructureLargeHangerDoor":{"prefab":{"prefab_name":"StructureLargeHangerDoor","prefab_hash":-1351081801,"desc":"1 x 3 modular door piece for building hangar doors.","name":"Large Hangar Door"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLargeSatelliteDish":{"prefab":{"prefab_name":"StructureLargeSatelliteDish","prefab_hash":1913391845,"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.","name":"Large Satellite Dish"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLaunchMount":{"prefab":{"prefab_name":"StructureLaunchMount","prefab_hash":-558953231,"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.","name":"Launch Mount"},"structure":{"small_grid":false}},"StructureLightLong":{"prefab":{"prefab_name":"StructureLightLong","prefab_hash":797794350,"desc":"","name":"Wall Light (Long)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLightLongAngled":{"prefab":{"prefab_name":"StructureLightLongAngled","prefab_hash":1847265835,"desc":"","name":"Wall Light (Long Angled)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLightLongWide":{"prefab":{"prefab_name":"StructureLightLongWide","prefab_hash":555215790,"desc":"","name":"Wall Light (Long Wide)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLightRound":{"prefab":{"prefab_name":"StructureLightRound","prefab_hash":1514476632,"desc":"Description coming.","name":"Light Round"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLightRoundAngled":{"prefab":{"prefab_name":"StructureLightRoundAngled","prefab_hash":1592905386,"desc":"Description coming.","name":"Light Round (Angled)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLightRoundSmall":{"prefab":{"prefab_name":"StructureLightRoundSmall","prefab_hash":1436121888,"desc":"Description coming.","name":"Light Round (Small)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLiquidDrain":{"prefab":{"prefab_name":"StructureLiquidDrain","prefab_hash":1687692899,"desc":"When connected to power and activated, it pumps liquid from a liquid network into the world.","name":"Active Liquid Outlet"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"None"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"StructureLiquidPipeAnalyzer":{"prefab":{"prefab_name":"StructureLiquidPipeAnalyzer","prefab_hash":-2113838091,"desc":"","name":"Liquid Pipe Analyzer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLiquidPipeHeater":{"prefab":{"prefab_name":"StructureLiquidPipeHeater","prefab_hash":-287495560,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Liquid)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLiquidPipeOneWayValve":{"prefab":{"prefab_name":"StructureLiquidPipeOneWayValve","prefab_hash":-782453061,"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..","name":"One Way Valve (Liquid)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"StructureLiquidPipeRadiator":{"prefab":{"prefab_name":"StructureLiquidPipeRadiator","prefab_hash":2072805863,"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.","name":"Liquid Pipe Convection Radiator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureLiquidPressureRegulator":{"prefab":{"prefab_name":"StructureLiquidPressureRegulator","prefab_hash":482248766,"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.","name":"Liquid Volume Regulator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLiquidTankBig":{"prefab":{"prefab_name":"StructureLiquidTankBig","prefab_hash":1098900430,"desc":"","name":"Liquid Tank Big"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureLiquidTankBigInsulated":{"prefab":{"prefab_name":"StructureLiquidTankBigInsulated","prefab_hash":-1430440215,"desc":"","name":"Insulated Liquid Tank Big"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureLiquidTankSmall":{"prefab":{"prefab_name":"StructureLiquidTankSmall","prefab_hash":1988118157,"desc":"","name":"Liquid Tank Small"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureLiquidTankSmallInsulated":{"prefab":{"prefab_name":"StructureLiquidTankSmallInsulated","prefab_hash":608607718,"desc":"","name":"Insulated Liquid Tank Small"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureLiquidTankStorage":{"prefab":{"prefab_name":"StructureLiquidTankStorage","prefab_hash":1691898022,"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.","name":"Liquid Tank Storage"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Pressure":"Read","Temperature":"Read","RatioOxygen":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","Quantity":"Read","RatioNitrousOxide":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureLiquidTurboVolumePump":{"prefab":{"prefab_name":"StructureLiquidTurboVolumePump","prefab_hash":-1051805505,"desc":"Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Liquid)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Right","1":"Left"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"StructureLiquidUmbilicalFemale":{"prefab":{"prefab_name":"StructureLiquidUmbilicalFemale","prefab_hash":1734723642,"desc":"","name":"Umbilical Socket (Liquid)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureLiquidUmbilicalFemaleSide":{"prefab":{"prefab_name":"StructureLiquidUmbilicalFemaleSide","prefab_hash":1220870319,"desc":"","name":"Umbilical Socket Angle (Liquid)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureLiquidUmbilicalMale":{"prefab":{"prefab_name":"StructureLiquidUmbilicalMale","prefab_hash":-1798420047,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Liquid)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLiquidValve":{"prefab":{"prefab_name":"StructureLiquidValve","prefab_hash":1849974453,"desc":"","name":"Liquid Valve"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"}],"device_pins_length":null,"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}},"StructureLiquidVolumePump":{"prefab":{"prefab_name":"StructureLiquidVolumePump","prefab_hash":-454028979,"desc":"","name":"Liquid Volume Pump"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLockerSmall":{"prefab":{"prefab_name":"StructureLockerSmall","prefab_hash":-647164662,"desc":"","name":"Locker (Small)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureLogicBatchReader":{"prefab":{"prefab_name":"StructureLogicBatchReader","prefab_hash":264413729,"desc":"","name":"Batch Reader"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicBatchSlotReader":{"prefab":{"prefab_name":"StructureLogicBatchSlotReader","prefab_hash":436888930,"desc":"","name":"Batch Slot Reader"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicBatchWriter":{"prefab":{"prefab_name":"StructureLogicBatchWriter","prefab_hash":1415443359,"desc":"","name":"Batch Writer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ForceWrite":"Write","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicButton":{"prefab":{"prefab_name":"StructureLogicButton","prefab_hash":491845673,"desc":"","name":"Button"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Activate":"ReadWrite","Lock":"ReadWrite","Setting":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureLogicCompare":{"prefab":{"prefab_name":"StructureLogicCompare","prefab_hash":-1489728908,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Compare"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Equals","1":"Greater","2":"Less","3":"NotEquals"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicDial":{"prefab":{"prefab_name":"StructureLogicDial","prefab_hash":554524804,"desc":"An assignable dial with up to 1000 modes.","name":"Dial"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Mode":"ReadWrite","Setting":"ReadWrite","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureLogicGate":{"prefab":{"prefab_name":"StructureLogicGate","prefab_hash":1942143074,"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.","name":"Logic Gate"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"AND","1":"OR","2":"XOR","3":"NAND","4":"NOR","5":"XNOR"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicHashGen":{"prefab":{"prefab_name":"StructureLogicHashGen","prefab_hash":2077593121,"desc":"","name":"Logic Hash Generator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureLogicMath":{"prefab":{"prefab_name":"StructureLogicMath","prefab_hash":1657691323,"desc":"0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log","name":"Logic Math"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Add","1":"Subtract","2":"Multiply","3":"Divide","4":"Mod","5":"Atan2","6":"Pow","7":"Log"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicMathUnary":{"prefab":{"prefab_name":"StructureLogicMathUnary","prefab_hash":-1160020195,"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","name":"Math Unary"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"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"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicMemory":{"prefab":{"prefab_name":"StructureLogicMemory","prefab_hash":-851746783,"desc":"","name":"Logic Memory"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureLogicMinMax":{"prefab":{"prefab_name":"StructureLogicMinMax","prefab_hash":929022276,"desc":"0.Greater\n1.Less","name":"Logic Min/Max"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Greater","1":"Less"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicMirror":{"prefab":{"prefab_name":"StructureLogicMirror","prefab_hash":2096189278,"desc":"","name":"Logic Mirror"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicReader":{"prefab":{"prefab_name":"StructureLogicReader","prefab_hash":-345383640,"desc":"","name":"Logic Reader"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicReagentReader":{"prefab":{"prefab_name":"StructureLogicReagentReader","prefab_hash":-124308857,"desc":"","name":"Reagent Reader"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicRocketDownlink":{"prefab":{"prefab_name":"StructureLogicRocketDownlink","prefab_hash":876108549,"desc":"","name":"Logic Rocket Downlink"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"Input"}],"device_pins_length":null,"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}},"StructureLogicRocketUplink":{"prefab":{"prefab_name":"StructureLogicRocketUplink","prefab_hash":546002924,"desc":"","name":"Logic Uplink"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicSelect":{"prefab":{"prefab_name":"StructureLogicSelect","prefab_hash":1822736084,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Select"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Equals","1":"Greater","2":"Less","3":"NotEquals"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicSlotReader":{"prefab":{"prefab_name":"StructureLogicSlotReader","prefab_hash":-767867194,"desc":"","name":"Slot Reader"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicSorter":{"prefab":{"prefab_name":"StructureLogicSorter","prefab_hash":873418029,"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.","name":"Logic Sorter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"All","1":"Any","2":"None"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"Chute","role":"Output2"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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":{"instructions":{"FilterPrefabHashEquals":{"description":"| 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":{"description":"| 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":{"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 |","typ":"SorterInstruction","value":5},"FilterSlotTypeCompare":{"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 |","typ":"SorterInstruction","value":4},"FilterSortingClassCompare":{"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 |","typ":"SorterInstruction","value":3},"LimitNextExecutionByCount":{"description":"| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |","typ":"SorterInstruction","value":6}},"memory_access":"ReadWrite","memory_size":32}},"StructureLogicSwitch":{"prefab":{"prefab_name":"StructureLogicSwitch","prefab_hash":1220484876,"desc":"","name":"Lever"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","Setting":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureLogicSwitch2":{"prefab":{"prefab_name":"StructureLogicSwitch2","prefab_hash":321604921,"desc":"","name":"Switch"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","Setting":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureLogicTransmitter":{"prefab":{"prefab_name":"StructureLogicTransmitter","prefab_hash":-693235651,"desc":"Connects to Logic Transmitter","name":"Logic Transmitter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{},"modes":{"0":"Passive","1":"Active"},"transmission_receiver":true,"wireless_logic":true,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicWriter":{"prefab":{"prefab_name":"StructureLogicWriter","prefab_hash":-1326019434,"desc":"","name":"Logic Writer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ForceWrite":"Write","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicWriterSwitch":{"prefab":{"prefab_name":"StructureLogicWriterSwitch","prefab_hash":-1321250424,"desc":"","name":"Logic Writer Switch"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ForceWrite":"Write","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureManualHatch":{"prefab":{"prefab_name":"StructureManualHatch","prefab_hash":-1808154199,"desc":"Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock.","name":"Manual Hatch"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureMediumConvectionRadiator":{"prefab":{"prefab_name":"StructureMediumConvectionRadiator","prefab_hash":-1918215845,"desc":"A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"device_pins_length":null,"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}},"StructureMediumConvectionRadiatorLiquid":{"prefab":{"prefab_name":"StructureMediumConvectionRadiatorLiquid","prefab_hash":-1169014183,"desc":"A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"StructureMediumHangerDoor":{"prefab":{"prefab_name":"StructureMediumHangerDoor","prefab_hash":-566348148,"desc":"1 x 2 modular door piece for building hangar doors.","name":"Medium Hangar Door"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureMediumRadiator":{"prefab":{"prefab_name":"StructureMediumRadiator","prefab_hash":-975966237,"desc":"A stand-alone radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"device_pins_length":null,"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}},"StructureMediumRadiatorLiquid":{"prefab":{"prefab_name":"StructureMediumRadiatorLiquid","prefab_hash":-1141760613,"desc":"A stand-alone liquid radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"StructureMediumRocketGasFuelTank":{"prefab":{"prefab_name":"StructureMediumRocketGasFuelTank","prefab_hash":-1093860567,"desc":"","name":"Gas Capsule Tank Medium"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Output"},{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureMediumRocketLiquidFuelTank":{"prefab":{"prefab_name":"StructureMediumRocketLiquidFuelTank","prefab_hash":1143639539,"desc":"","name":"Liquid Capsule Tank Medium"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Output"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureMotionSensor":{"prefab":{"prefab_name":"StructureMotionSensor","prefab_hash":-1713470563,"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.","name":"Motion Sensor"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Activate":"ReadWrite","Quantity":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureNitrolyzer":{"prefab":{"prefab_name":"StructureNitrolyzer","prefab_hash":1898243702,"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.","name":"Nitrolyzer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"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","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenInput2":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenInput2":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesInput2":"Read","RatioLiquidVolatilesOutput":"Read","RatioSteam":"Read","RatioSteamInput":"Read","RatioSteamInput2":"Read","RatioSteamOutput":"Read","RatioLiquidCarbonDioxide":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideInput2":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantInput2":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideInput2":"Read","RatioLiquidNitrousOxideOutput":"Read","ReferenceId":"Read","RatioHydrogen":"Read","RatioLiquidHydrogen":"Read","RatioPollutedWater":"Read","NameHash":"Read"},"modes":{"0":"Idle","1":"Active"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":2,"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}},"StructureOccupancySensor":{"prefab":{"prefab_name":"StructureOccupancySensor","prefab_hash":322782515,"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.","name":"Occupancy Sensor"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Activate":"Read","Quantity":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureOverheadShortCornerLocker":{"prefab":{"prefab_name":"StructureOverheadShortCornerLocker","prefab_hash":-1794932560,"desc":"","name":"Overhead Corner Locker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureOverheadShortLocker":{"prefab":{"prefab_name":"StructureOverheadShortLocker","prefab_hash":1468249454,"desc":"","name":"Overhead Locker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":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"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructurePassiveLargeRadiatorGas":{"prefab":{"prefab_name":"StructurePassiveLargeRadiatorGas","prefab_hash":2066977095,"desc":"Has been replaced by Medium Convection Radiator.","name":"Medium Convection Radiator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"device_pins_length":null,"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}},"StructurePassiveLargeRadiatorLiquid":{"prefab":{"prefab_name":"StructurePassiveLargeRadiatorLiquid","prefab_hash":24786172,"desc":"Has been replaced by Medium Convection Radiator Liquid.","name":"Medium Convection Radiator Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"StructurePassiveLiquidDrain":{"prefab":{"prefab_name":"StructurePassiveLiquidDrain","prefab_hash":1812364811,"desc":"Moves liquids from a pipe network to the world atmosphere.","name":"Passive Liquid Drain"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructurePassiveVent":{"prefab":{"prefab_name":"StructurePassiveVent","prefab_hash":335498166,"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. ","name":"Passive Vent"},"structure":{"small_grid":true}},"StructurePassiveVentInsulated":{"prefab":{"prefab_name":"StructurePassiveVentInsulated","prefab_hash":1363077139,"desc":"","name":"Insulated Passive Vent"},"structure":{"small_grid":true}},"StructurePassthroughHeatExchangerGasToGas":{"prefab":{"prefab_name":"StructurePassthroughHeatExchangerGasToGas","prefab_hash":-1674187440,"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.","name":"CounterFlow Heat Exchanger - Gas + Gas"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Output2"}],"device_pins_length":null,"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}},"StructurePassthroughHeatExchangerGasToLiquid":{"prefab":{"prefab_name":"StructurePassthroughHeatExchangerGasToLiquid","prefab_hash":1928991265,"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.","name":"CounterFlow Heat Exchanger - Gas + Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"device_pins_length":null,"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}},"StructurePassthroughHeatExchangerLiquidToLiquid":{"prefab":{"prefab_name":"StructurePassthroughHeatExchangerLiquidToLiquid","prefab_hash":-1472829583,"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.","name":"CounterFlow Heat Exchanger - Liquid + Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"device_pins_length":null,"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}},"StructurePictureFrameThickLandscapeLarge":{"prefab":{"prefab_name":"StructurePictureFrameThickLandscapeLarge","prefab_hash":-1434523206,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"small_grid":true}},"StructurePictureFrameThickLandscapeSmall":{"prefab":{"prefab_name":"StructurePictureFrameThickLandscapeSmall","prefab_hash":-2041566697,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"small_grid":true}},"StructurePictureFrameThickMountLandscapeLarge":{"prefab":{"prefab_name":"StructurePictureFrameThickMountLandscapeLarge","prefab_hash":950004659,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"small_grid":true}},"StructurePictureFrameThickMountLandscapeSmall":{"prefab":{"prefab_name":"StructurePictureFrameThickMountLandscapeSmall","prefab_hash":347154462,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"small_grid":true}},"StructurePictureFrameThickMountPortraitLarge":{"prefab":{"prefab_name":"StructurePictureFrameThickMountPortraitLarge","prefab_hash":-1459641358,"desc":"","name":"Picture Frame Thick Mount Portrait Large"},"structure":{"small_grid":true}},"StructurePictureFrameThickMountPortraitSmall":{"prefab":{"prefab_name":"StructurePictureFrameThickMountPortraitSmall","prefab_hash":-2066653089,"desc":"","name":"Picture Frame Thick Mount Portrait Small"},"structure":{"small_grid":true}},"StructurePictureFrameThickPortraitLarge":{"prefab":{"prefab_name":"StructurePictureFrameThickPortraitLarge","prefab_hash":-1686949570,"desc":"","name":"Picture Frame Thick Portrait Large"},"structure":{"small_grid":true}},"StructurePictureFrameThickPortraitSmall":{"prefab":{"prefab_name":"StructurePictureFrameThickPortraitSmall","prefab_hash":-1218579821,"desc":"","name":"Picture Frame Thick Portrait Small"},"structure":{"small_grid":true}},"StructurePictureFrameThinLandscapeLarge":{"prefab":{"prefab_name":"StructurePictureFrameThinLandscapeLarge","prefab_hash":-1418288625,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"small_grid":true}},"StructurePictureFrameThinLandscapeSmall":{"prefab":{"prefab_name":"StructurePictureFrameThinLandscapeSmall","prefab_hash":-2024250974,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"small_grid":true}},"StructurePictureFrameThinMountLandscapeLarge":{"prefab":{"prefab_name":"StructurePictureFrameThinMountLandscapeLarge","prefab_hash":-1146760430,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"small_grid":true}},"StructurePictureFrameThinMountLandscapeSmall":{"prefab":{"prefab_name":"StructurePictureFrameThinMountLandscapeSmall","prefab_hash":-1752493889,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"small_grid":true}},"StructurePictureFrameThinMountPortraitLarge":{"prefab":{"prefab_name":"StructurePictureFrameThinMountPortraitLarge","prefab_hash":1094895077,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"small_grid":true}},"StructurePictureFrameThinMountPortraitSmall":{"prefab":{"prefab_name":"StructurePictureFrameThinMountPortraitSmall","prefab_hash":1835796040,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"small_grid":true}},"StructurePictureFrameThinPortraitLarge":{"prefab":{"prefab_name":"StructurePictureFrameThinPortraitLarge","prefab_hash":1212777087,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"small_grid":true}},"StructurePictureFrameThinPortraitSmall":{"prefab":{"prefab_name":"StructurePictureFrameThinPortraitSmall","prefab_hash":1684488658,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"small_grid":true}},"StructurePipeAnalysizer":{"prefab":{"prefab_name":"StructurePipeAnalysizer","prefab_hash":435685051,"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.","name":"Pipe Analyzer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructurePipeCorner":{"prefab":{"prefab_name":"StructurePipeCorner","prefab_hash":-1785673561,"desc":"You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Corner)"},"structure":{"small_grid":true}},"StructurePipeCowl":{"prefab":{"prefab_name":"StructurePipeCowl","prefab_hash":465816159,"desc":"","name":"Pipe Cowl"},"structure":{"small_grid":true}},"StructurePipeCrossJunction":{"prefab":{"prefab_name":"StructurePipeCrossJunction","prefab_hash":-1405295588,"desc":"You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Cross Junction)"},"structure":{"small_grid":true}},"StructurePipeCrossJunction3":{"prefab":{"prefab_name":"StructurePipeCrossJunction3","prefab_hash":2038427184,"desc":"You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (3-Way Junction)"},"structure":{"small_grid":true}},"StructurePipeCrossJunction4":{"prefab":{"prefab_name":"StructurePipeCrossJunction4","prefab_hash":-417629293,"desc":"You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (4-Way Junction)"},"structure":{"small_grid":true}},"StructurePipeCrossJunction5":{"prefab":{"prefab_name":"StructurePipeCrossJunction5","prefab_hash":-1877193979,"desc":"You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (5-Way Junction)"},"structure":{"small_grid":true}},"StructurePipeCrossJunction6":{"prefab":{"prefab_name":"StructurePipeCrossJunction6","prefab_hash":152378047,"desc":"You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (6-Way Junction)"},"structure":{"small_grid":true}},"StructurePipeHeater":{"prefab":{"prefab_name":"StructurePipeHeater","prefab_hash":-419758574,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Gas)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructurePipeIgniter":{"prefab":{"prefab_name":"StructurePipeIgniter","prefab_hash":1286441942,"desc":"Ignites the atmosphere inside the attached pipe network.","name":"Pipe Igniter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Activate":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructurePipeInsulatedLiquidCrossJunction":{"prefab":{"prefab_name":"StructurePipeInsulatedLiquidCrossJunction","prefab_hash":-2068497073,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Cross Junction)"},"structure":{"small_grid":true}},"StructurePipeLabel":{"prefab":{"prefab_name":"StructurePipeLabel","prefab_hash":-999721119,"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.","name":"Pipe Label"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructurePipeLiquidCorner":{"prefab":{"prefab_name":"StructurePipeLiquidCorner","prefab_hash":-1856720921,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Corner)"},"structure":{"small_grid":true}},"StructurePipeLiquidCrossJunction":{"prefab":{"prefab_name":"StructurePipeLiquidCrossJunction","prefab_hash":1848735691,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Cross Junction)"},"structure":{"small_grid":true}},"StructurePipeLiquidCrossJunction3":{"prefab":{"prefab_name":"StructurePipeLiquidCrossJunction3","prefab_hash":1628087508,"desc":"You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (3-Way Junction)"},"structure":{"small_grid":true}},"StructurePipeLiquidCrossJunction4":{"prefab":{"prefab_name":"StructurePipeLiquidCrossJunction4","prefab_hash":-9555593,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (4-Way Junction)"},"structure":{"small_grid":true}},"StructurePipeLiquidCrossJunction5":{"prefab":{"prefab_name":"StructurePipeLiquidCrossJunction5","prefab_hash":-2006384159,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (5-Way Junction)"},"structure":{"small_grid":true}},"StructurePipeLiquidCrossJunction6":{"prefab":{"prefab_name":"StructurePipeLiquidCrossJunction6","prefab_hash":291524699,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (6-Way Junction)"},"structure":{"small_grid":true}},"StructurePipeLiquidStraight":{"prefab":{"prefab_name":"StructurePipeLiquidStraight","prefab_hash":667597982,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Straight)"},"structure":{"small_grid":true}},"StructurePipeLiquidTJunction":{"prefab":{"prefab_name":"StructurePipeLiquidTJunction","prefab_hash":262616717,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (T Junction)"},"structure":{"small_grid":true}},"StructurePipeMeter":{"prefab":{"prefab_name":"StructurePipeMeter","prefab_hash":-1798362329,"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\"","name":"Pipe Meter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructurePipeOneWayValve":{"prefab":{"prefab_name":"StructurePipeOneWayValve","prefab_hash":1580412404,"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","name":"One Way Valve (Gas)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"device_pins_length":null,"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}},"StructurePipeOrgan":{"prefab":{"prefab_name":"StructurePipeOrgan","prefab_hash":1305252611,"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.","name":"Pipe Organ"},"structure":{"small_grid":true}},"StructurePipeRadiator":{"prefab":{"prefab_name":"StructurePipeRadiator","prefab_hash":1696603168,"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.","name":"Pipe Convection Radiator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructurePipeRadiatorFlat":{"prefab":{"prefab_name":"StructurePipeRadiatorFlat","prefab_hash":-399883995,"desc":"A pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructurePipeRadiatorFlatLiquid":{"prefab":{"prefab_name":"StructurePipeRadiatorFlatLiquid","prefab_hash":2024754523,"desc":"A liquid pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructurePipeStraight":{"prefab":{"prefab_name":"StructurePipeStraight","prefab_hash":73728932,"desc":"You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Straight)"},"structure":{"small_grid":true}},"StructurePipeTJunction":{"prefab":{"prefab_name":"StructurePipeTJunction","prefab_hash":-913817472,"desc":"You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (T Junction)"},"structure":{"small_grid":true}},"StructurePlanter":{"prefab":{"prefab_name":"StructurePlanter","prefab_hash":-1125641329,"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).","name":"Planter"},"structure":{"small_grid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Plant","typ":"Plant"}]},"StructurePlatformLadderOpen":{"prefab":{"prefab_name":"StructurePlatformLadderOpen","prefab_hash":1559586682,"desc":"","name":"Ladder Platform"},"structure":{"small_grid":false}},"StructurePlinth":{"prefab":{"prefab_name":"StructurePlinth","prefab_hash":989835703,"desc":"","name":"Plinth"},"structure":{"small_grid":true},"slots":[{"name":"","typ":"None"}]},"StructurePortablesConnector":{"prefab":{"prefab_name":"StructurePortablesConnector","prefab_hash":-899013427,"desc":"","name":"Portables Connector"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Open":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"None"}],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"device_pins_length":null,"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}},"StructurePowerConnector":{"prefab":{"prefab_name":"StructurePowerConnector","prefab_hash":-782951720,"desc":"Attaches a Kit (Portable Generator) to a power network.","name":"Power Connector"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Portable Slot","typ":"None"}],"device":{"connection_list":[{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"StructurePowerTransmitter":{"prefab":{"prefab_name":"StructurePowerTransmitter","prefab_hash":-65087121,"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.","name":"Microwave Power Transmitter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Unlinked","1":"Linked"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"StructurePowerTransmitterOmni":{"prefab":{"prefab_name":"StructurePowerTransmitterOmni","prefab_hash":-327468845,"desc":"","name":"Power Transmitter Omni"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"StructurePowerTransmitterReceiver":{"prefab":{"prefab_name":"StructurePowerTransmitterReceiver","prefab_hash":1195820278,"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","name":"Microwave Power Receiver"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Unlinked","1":"Linked"},"transmission_receiver":false,"wireless_logic":true,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructurePowerUmbilicalFemale":{"prefab":{"prefab_name":"StructurePowerUmbilicalFemale","prefab_hash":101488029,"desc":"","name":"Umbilical Socket (Power)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructurePowerUmbilicalFemaleSide":{"prefab":{"prefab_name":"StructurePowerUmbilicalFemaleSide","prefab_hash":1922506192,"desc":"","name":"Umbilical Socket Angle (Power)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructurePowerUmbilicalMale":{"prefab":{"prefab_name":"StructurePowerUmbilicalMale","prefab_hash":1529453938,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Power)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"Read","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"StructurePoweredVent":{"prefab":{"prefab_name":"StructurePoweredVent","prefab_hash":938836756,"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.","name":"Powered Vent"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","PressureExternal":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructurePoweredVentLarge":{"prefab":{"prefab_name":"StructurePoweredVentLarge","prefab_hash":-785498334,"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.","name":"Powered Vent Large"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","PressureExternal":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructurePressurantValve":{"prefab":{"prefab_name":"StructurePressurantValve","prefab_hash":23052817,"desc":"Pumps gas into a liquid pipe in order to raise the pressure","name":"Pressurant Valve"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructurePressureFedGasEngine":{"prefab":{"prefab_name":"StructurePressureFedGasEngine","prefab_hash":-624011170,"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.","name":"Pressure Fed Gas Engine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"PowerAndData","role":"Output"}],"device_pins_length":null,"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}},"StructurePressureFedLiquidEngine":{"prefab":{"prefab_name":"StructurePressureFedLiquidEngine","prefab_hash":379750958,"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.","name":"Pressure Fed Liquid Engine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"PowerAndData","role":"Output"}],"device_pins_length":null,"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}},"StructurePressurePlateLarge":{"prefab":{"prefab_name":"StructurePressurePlateLarge","prefab_hash":-2008706143,"desc":"","name":"Trigger Plate (Large)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructurePressurePlateMedium":{"prefab":{"prefab_name":"StructurePressurePlateMedium","prefab_hash":1269458680,"desc":"","name":"Trigger Plate (Medium)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructurePressurePlateSmall":{"prefab":{"prefab_name":"StructurePressurePlateSmall","prefab_hash":-1536471028,"desc":"","name":"Trigger Plate (Small)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructurePressureRegulator":{"prefab":{"prefab_name":"StructurePressureRegulator","prefab_hash":209854039,"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.","name":"Pressure Regulator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureProximitySensor":{"prefab":{"prefab_name":"StructureProximitySensor","prefab_hash":568800213,"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.","name":"Proximity Sensor"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Activate":"Read","Setting":"ReadWrite","Quantity":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructurePumpedLiquidEngine":{"prefab":{"prefab_name":"StructurePumpedLiquidEngine","prefab_hash":-2031440019,"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","name":"Pumped Liquid Engine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"Output"}],"device_pins_length":null,"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}},"StructurePurgeValve":{"prefab":{"prefab_name":"StructurePurgeValve","prefab_hash":-737232128,"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.","name":"Purge Valve"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureRailing":{"prefab":{"prefab_name":"StructureRailing","prefab_hash":-1756913871,"desc":"\"Safety third.\"","name":"Railing Industrial (Type 1)"},"structure":{"small_grid":false}},"StructureRecycler":{"prefab":{"prefab_name":"StructureRecycler","prefab_hash":-1633947337,"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.","name":"Recycler"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","Activate":"ReadWrite","Reagents":"Read","On":"ReadWrite","RequiredPower":"Read","ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureRefrigeratedVendingMachine":{"prefab":{"prefab_name":"StructureRefrigeratedVendingMachine","prefab_hash":-1577831321,"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. ","name":"Refrigerated Vending Machine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"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"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureReinforcedCompositeWindow":{"prefab":{"prefab_name":"StructureReinforcedCompositeWindow","prefab_hash":2027713511,"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.","name":"Reinforced Window (Composite)"},"structure":{"small_grid":false}},"StructureReinforcedCompositeWindowSteel":{"prefab":{"prefab_name":"StructureReinforcedCompositeWindowSteel","prefab_hash":-816454272,"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.","name":"Reinforced Window (Composite Steel)"},"structure":{"small_grid":false}},"StructureReinforcedWallPaddedWindow":{"prefab":{"prefab_name":"StructureReinforcedWallPaddedWindow","prefab_hash":1939061729,"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.","name":"Reinforced Window (Padded)"},"structure":{"small_grid":false}},"StructureReinforcedWallPaddedWindowThin":{"prefab":{"prefab_name":"StructureReinforcedWallPaddedWindowThin","prefab_hash":158502707,"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.","name":"Reinforced Window (Thin)"},"structure":{"small_grid":false}},"StructureRocketAvionics":{"prefab":{"prefab_name":"StructureRocketAvionics","prefab_hash":808389066,"desc":"","name":"Rocket Avionics"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Invalid","1":"None","2":"Mine","3":"Survey","4":"Discover","5":"Chart"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureRocketCelestialTracker":{"prefab":{"prefab_name":"StructureRocketCelestialTracker","prefab_hash":997453927,"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.","name":"Rocket Celestial Tracker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Horizontal":"Read","Vertical":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","Index":"ReadWrite","CelestialHash":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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":{"instructions":{"BodyOrientation":{"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 |","typ":"CelestialTracking","value":1}},"memory_access":"Read","memory_size":12}},"StructureRocketCircuitHousing":{"prefab":{"prefab_name":"StructureRocketCircuitHousing","prefab_hash":150135861,"desc":"","name":"Rocket Circuit Housing"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","LineNumber":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Error":"Read","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","LineNumber":"ReadWrite","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"Input"}],"device_pins_length":6,"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":{"instructions":null,"memory_access":"ReadWrite","memory_size":0}},"StructureRocketEngineTiny":{"prefab":{"prefab_name":"StructureRocketEngineTiny","prefab_hash":178472613,"desc":"","name":"Rocket Engine (Tiny)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureRocketManufactory":{"prefab":{"prefab_name":"StructureRocketManufactory","prefab_hash":1781051034,"desc":"","name":"Rocket Manufactory"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memory_access":"ReadWrite","memory_size":64}},"StructureRocketMiner":{"prefab":{"prefab_name":"StructureRocketMiner","prefab_hash":-2087223687,"desc":"Gathers available resources at the rocket's current space location.","name":"Rocket Miner"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Quantity":"Read","On":"ReadWrite","RequiredPower":"Read","ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","DrillCondition":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Export","typ":"None"},{"name":"Drill Head Slot","typ":"DrillHead"}],"device":{"connection_list":[{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureRocketScanner":{"prefab":{"prefab_name":"StructureRocketScanner","prefab_hash":2014252591,"desc":"","name":"Rocket Scanner"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Scanner Head Slot","typ":"ScanningHead"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureRocketTower":{"prefab":{"prefab_name":"StructureRocketTower","prefab_hash":-654619479,"desc":"","name":"Launch Tower"},"structure":{"small_grid":false}},"StructureRocketTransformerSmall":{"prefab":{"prefab_name":"StructureRocketTransformerSmall","prefab_hash":518925193,"desc":"","name":"Transformer Small (Rocket)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureRover":{"prefab":{"prefab_name":"StructureRover","prefab_hash":806513938,"desc":"","name":"Rover Frame"},"structure":{"small_grid":false}},"StructureSDBHopper":{"prefab":{"prefab_name":"StructureSDBHopper","prefab_hash":-1875856925,"desc":"","name":"SDB Hopper"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"Open":"ReadWrite","ClearMemory":"Write","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"None"}],"device_pins_length":null,"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}},"StructureSDBHopperAdvanced":{"prefab":{"prefab_name":"StructureSDBHopperAdvanced","prefab_hash":467225612,"desc":"","name":"SDB Hopper Advanced"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","ClearMemory":"Write","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"}],"device_pins_length":null,"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}},"StructureSDBSilo":{"prefab":{"prefab_name":"StructureSDBSilo","prefab_hash":1155865682,"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.","name":"SDB Silo"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSatelliteDish":{"prefab":{"prefab_name":"StructureSatelliteDish","prefab_hash":439026183,"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.","name":"Medium Satellite Dish"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSecurityPrinter":{"prefab":{"prefab_name":"StructureSecurityPrinter","prefab_hash":-641491515,"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","name":"Security Printer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memory_access":"ReadWrite","memory_size":64}},"StructureShelf":{"prefab":{"prefab_name":"StructureShelf","prefab_hash":1172114950,"desc":"","name":"Shelf"},"structure":{"small_grid":true},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"StructureShelfMedium":{"prefab":{"prefab_name":"StructureShelfMedium","prefab_hash":182006674,"desc":"A shelf for putting things on, so you can see them.","name":"Shelf Medium"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureShortCornerLocker":{"prefab":{"prefab_name":"StructureShortCornerLocker","prefab_hash":1330754486,"desc":"","name":"Short Corner Locker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureShortLocker":{"prefab":{"prefab_name":"StructureShortLocker","prefab_hash":-554553467,"desc":"","name":"Short Locker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":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"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureShower":{"prefab":{"prefab_name":"StructureShower","prefab_hash":-775128944,"desc":"","name":"Shower"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Open":"ReadWrite","Activate":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"StructureShowerPowered":{"prefab":{"prefab_name":"StructureShowerPowered","prefab_hash":-1081797501,"desc":"","name":"Shower (Powered)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSign1x1":{"prefab":{"prefab_name":"StructureSign1x1","prefab_hash":879058460,"desc":"","name":"Sign 1x1"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureSign2x1":{"prefab":{"prefab_name":"StructureSign2x1","prefab_hash":908320837,"desc":"","name":"Sign 2x1"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureSingleBed":{"prefab":{"prefab_name":"StructureSingleBed","prefab_hash":-492611,"desc":"Description coming.","name":"Single Bed"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureSleeper":{"prefab":{"prefab_name":"StructureSleeper","prefab_hash":-1467449329,"desc":"","name":"Sleeper"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSleeperLeft":{"prefab":{"prefab_name":"StructureSleeperLeft","prefab_hash":1213495833,"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.","name":"Sleeper Left"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Safe","1":"Unsafe","2":"Unpowered"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSleeperRight":{"prefab":{"prefab_name":"StructureSleeperRight","prefab_hash":-1812330717,"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.","name":"Sleeper Right"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Safe","1":"Unsafe","2":"Unpowered"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSleeperVertical":{"prefab":{"prefab_name":"StructureSleeperVertical","prefab_hash":-1300059018,"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.","name":"Sleeper Vertical"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Safe","1":"Unsafe","2":"Unpowered"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSleeperVerticalDroid":{"prefab":{"prefab_name":"StructureSleeperVerticalDroid","prefab_hash":1382098999,"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.","name":"Droid Sleeper Vertical"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Activate":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSmallDirectHeatExchangeGastoGas":{"prefab":{"prefab_name":"StructureSmallDirectHeatExchangeGastoGas","prefab_hash":1310303582,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Gas + Gas"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"}],"device_pins_length":null,"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}},"StructureSmallDirectHeatExchangeLiquidtoGas":{"prefab":{"prefab_name":"StructureSmallDirectHeatExchangeLiquidtoGas","prefab_hash":1825212016,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Gas "},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Input2"}],"device_pins_length":null,"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}},"StructureSmallDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefab_name":"StructureSmallDirectHeatExchangeLiquidtoLiquid","prefab_hash":-507770416,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"device_pins_length":null,"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}},"StructureSmallSatelliteDish":{"prefab":{"prefab_name":"StructureSmallSatelliteDish","prefab_hash":-2138748650,"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.","name":"Small Satellite Dish"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"StructureSmallTableBacklessDouble":{"prefab":{"prefab_name":"StructureSmallTableBacklessDouble","prefab_hash":-1633000411,"desc":"","name":"Small (Table Backless Double)"},"structure":{"small_grid":true}},"StructureSmallTableBacklessSingle":{"prefab":{"prefab_name":"StructureSmallTableBacklessSingle","prefab_hash":-1897221677,"desc":"","name":"Small (Table Backless Single)"},"structure":{"small_grid":true}},"StructureSmallTableDinnerSingle":{"prefab":{"prefab_name":"StructureSmallTableDinnerSingle","prefab_hash":1260651529,"desc":"","name":"Small (Table Dinner Single)"},"structure":{"small_grid":true}},"StructureSmallTableRectangleDouble":{"prefab":{"prefab_name":"StructureSmallTableRectangleDouble","prefab_hash":-660451023,"desc":"","name":"Small (Table Rectangle Double)"},"structure":{"small_grid":true}},"StructureSmallTableRectangleSingle":{"prefab":{"prefab_name":"StructureSmallTableRectangleSingle","prefab_hash":-924678969,"desc":"","name":"Small (Table Rectangle Single)"},"structure":{"small_grid":true}},"StructureSmallTableThickDouble":{"prefab":{"prefab_name":"StructureSmallTableThickDouble","prefab_hash":-19246131,"desc":"","name":"Small (Table Thick Double)"},"structure":{"small_grid":true}},"StructureSmallTableThickSingle":{"prefab":{"prefab_name":"StructureSmallTableThickSingle","prefab_hash":-291862981,"desc":"","name":"Small Table (Thick Single)"},"structure":{"small_grid":true}},"StructureSolarPanel":{"prefab":{"prefab_name":"StructureSolarPanel","prefab_hash":-2045627372,"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.","name":"Solar Panel"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Charge":"Read","Horizontal":"ReadWrite","Vertical":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureSolarPanel45":{"prefab":{"prefab_name":"StructureSolarPanel45","prefab_hash":-1554349863,"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.","name":"Solar Panel (Angled)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Charge":"Read","Horizontal":"ReadWrite","Vertical":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureSolarPanel45Reinforced":{"prefab":{"prefab_name":"StructureSolarPanel45Reinforced","prefab_hash":930865127,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Angled)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Charge":"Read","Horizontal":"ReadWrite","Vertical":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureSolarPanelDual":{"prefab":{"prefab_name":"StructureSolarPanelDual","prefab_hash":-539224550,"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.","name":"Solar Panel (Dual)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Charge":"Read","Horizontal":"ReadWrite","Vertical":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSolarPanelDualReinforced":{"prefab":{"prefab_name":"StructureSolarPanelDualReinforced","prefab_hash":-1545574413,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Dual)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Charge":"Read","Horizontal":"ReadWrite","Vertical":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSolarPanelFlat":{"prefab":{"prefab_name":"StructureSolarPanelFlat","prefab_hash":1968102968,"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.","name":"Solar Panel (Flat)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Charge":"Read","Horizontal":"ReadWrite","Vertical":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureSolarPanelFlatReinforced":{"prefab":{"prefab_name":"StructureSolarPanelFlatReinforced","prefab_hash":1697196770,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Flat)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Charge":"Read","Horizontal":"ReadWrite","Vertical":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureSolarPanelReinforced":{"prefab":{"prefab_name":"StructureSolarPanelReinforced","prefab_hash":-934345724,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Charge":"Read","Horizontal":"ReadWrite","Vertical":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureSolidFuelGenerator":{"prefab":{"prefab_name":"StructureSolidFuelGenerator","prefab_hash":813146305,"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.","name":"Generator (Solid Fuel)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Lock":"ReadWrite","On":"ReadWrite","ClearMemory":"Write","ImportCount":"Read","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Not Generating","1":"Generating"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Input","typ":"Ore"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructureSorter":{"prefab":{"prefab_name":"StructureSorter","prefab_hash":-1009150565,"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.","name":"Sorter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","Output":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Split","1":"Filter","2":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"Chute","role":"Output2"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureStacker":{"prefab":{"prefab_name":"StructureStacker","prefab_hash":-2020231820,"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.","name":"Stacker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Automatic","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Processing","typ":"None"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"device_pins_length":null,"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}},"StructureStackerReverse":{"prefab":{"prefab_name":"StructureStackerReverse","prefab_hash":1585641623,"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.","name":"Stacker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Automatic","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"device_pins_length":null,"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}},"StructureStairs4x2":{"prefab":{"prefab_name":"StructureStairs4x2","prefab_hash":1405018945,"desc":"","name":"Stairs"},"structure":{"small_grid":false}},"StructureStairs4x2RailL":{"prefab":{"prefab_name":"StructureStairs4x2RailL","prefab_hash":155214029,"desc":"","name":"Stairs with Rail (Left)"},"structure":{"small_grid":false}},"StructureStairs4x2RailR":{"prefab":{"prefab_name":"StructureStairs4x2RailR","prefab_hash":-212902482,"desc":"","name":"Stairs with Rail (Right)"},"structure":{"small_grid":false}},"StructureStairs4x2Rails":{"prefab":{"prefab_name":"StructureStairs4x2Rails","prefab_hash":-1088008720,"desc":"","name":"Stairs with Rails"},"structure":{"small_grid":false}},"StructureStairwellBackLeft":{"prefab":{"prefab_name":"StructureStairwellBackLeft","prefab_hash":505924160,"desc":"","name":"Stairwell (Back Left)"},"structure":{"small_grid":false}},"StructureStairwellBackPassthrough":{"prefab":{"prefab_name":"StructureStairwellBackPassthrough","prefab_hash":-862048392,"desc":"","name":"Stairwell (Back Passthrough)"},"structure":{"small_grid":false}},"StructureStairwellBackRight":{"prefab":{"prefab_name":"StructureStairwellBackRight","prefab_hash":-2128896573,"desc":"","name":"Stairwell (Back Right)"},"structure":{"small_grid":false}},"StructureStairwellFrontLeft":{"prefab":{"prefab_name":"StructureStairwellFrontLeft","prefab_hash":-37454456,"desc":"","name":"Stairwell (Front Left)"},"structure":{"small_grid":false}},"StructureStairwellFrontPassthrough":{"prefab":{"prefab_name":"StructureStairwellFrontPassthrough","prefab_hash":-1625452928,"desc":"","name":"Stairwell (Front Passthrough)"},"structure":{"small_grid":false}},"StructureStairwellFrontRight":{"prefab":{"prefab_name":"StructureStairwellFrontRight","prefab_hash":340210934,"desc":"","name":"Stairwell (Front Right)"},"structure":{"small_grid":false}},"StructureStairwellNoDoors":{"prefab":{"prefab_name":"StructureStairwellNoDoors","prefab_hash":2049879875,"desc":"","name":"Stairwell (No Doors)"},"structure":{"small_grid":false}},"StructureStirlingEngine":{"prefab":{"prefab_name":"StructureStirlingEngine","prefab_hash":-260316435,"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.","name":"Stirling Engine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureStorageLocker":{"prefab":{"prefab_name":"StructureStorageLocker","prefab_hash":-793623899,"desc":"","name":"Locker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":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"},{"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"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureSuitStorage":{"prefab":{"prefab_name":"StructureSuitStorage","prefab_hash":255034731,"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.","name":"Suit Storage"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Helmet","typ":"Helmet"},{"name":"Suit","typ":"Suit"},{"name":"Back","typ":"Back"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"}],"device_pins_length":null,"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}},"StructureTankBig":{"prefab":{"prefab_name":"StructureTankBig","prefab_hash":-1606848156,"desc":"","name":"Large Tank"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureTankBigInsulated":{"prefab":{"prefab_name":"StructureTankBigInsulated","prefab_hash":1280378227,"desc":"","name":"Tank Big (Insulated)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureTankConnector":{"prefab":{"prefab_name":"StructureTankConnector","prefab_hash":-1276379454,"desc":"Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network.","name":"Tank Connector"},"structure":{"small_grid":true},"slots":[{"name":"","typ":"None"}]},"StructureTankConnectorLiquid":{"prefab":{"prefab_name":"StructureTankConnectorLiquid","prefab_hash":1331802518,"desc":"These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network.","name":"Liquid Tank Connector"},"structure":{"small_grid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureTankSmall":{"prefab":{"prefab_name":"StructureTankSmall","prefab_hash":1013514688,"desc":"","name":"Small Tank"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"device_pins_length":null,"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}},"StructureTankSmallAir":{"prefab":{"prefab_name":"StructureTankSmallAir","prefab_hash":955744474,"desc":"","name":"Small Tank (Air)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"device_pins_length":null,"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}},"StructureTankSmallFuel":{"prefab":{"prefab_name":"StructureTankSmallFuel","prefab_hash":2102454415,"desc":"","name":"Small Tank (Fuel)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"device_pins_length":null,"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}},"StructureTankSmallInsulated":{"prefab":{"prefab_name":"StructureTankSmallInsulated","prefab_hash":272136332,"desc":"","name":"Tank Small (Insulated)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureToolManufactory":{"prefab":{"prefab_name":"StructureToolManufactory","prefab_hash":-465741100,"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.","name":"Tool Manufactory"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memory_access":"ReadWrite","memory_size":64}},"StructureTorpedoRack":{"prefab":{"prefab_name":"StructureTorpedoRack","prefab_hash":1473807953,"desc":"","name":"Torpedo Rack"},"structure":{"small_grid":true},"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"}]},"StructureTraderWaypoint":{"prefab":{"prefab_name":"StructureTraderWaypoint","prefab_hash":1570931620,"desc":"","name":"Trader Waypoint"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureTransformer":{"prefab":{"prefab_name":"StructureTransformer","prefab_hash":-1423212473,"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.","name":"Transformer (Large)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructureTransformerMedium":{"prefab":{"prefab_name":"StructureTransformerMedium","prefab_hash":-1065725831,"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.","name":"Transformer (Medium)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"Input"},{"typ":"PowerAndData","role":"Output"}],"device_pins_length":null,"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}},"StructureTransformerMediumReversed":{"prefab":{"prefab_name":"StructureTransformerMediumReversed","prefab_hash":833912764,"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.","name":"Transformer Reversed (Medium)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"Input"}],"device_pins_length":null,"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}},"StructureTransformerSmall":{"prefab":{"prefab_name":"StructureTransformerSmall","prefab_hash":-890946730,"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.","name":"Transformer (Small)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructureTransformerSmallReversed":{"prefab":{"prefab_name":"StructureTransformerSmallReversed","prefab_hash":1054059374,"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.","name":"Transformer Reversed (Small)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"Input"}],"device_pins_length":null,"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}},"StructureTurbineGenerator":{"prefab":{"prefab_name":"StructureTurbineGenerator","prefab_hash":1282191063,"desc":"","name":"Turbine Generator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureTurboVolumePump":{"prefab":{"prefab_name":"StructureTurboVolumePump","prefab_hash":1310794736,"desc":"Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Gas)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Right","1":"Left"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureUnloader":{"prefab":{"prefab_name":"StructureUnloader","prefab_hash":750118160,"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.","name":"Unloader"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","Output":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Automatic","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"device_pins_length":null,"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}},"StructureUprightWindTurbine":{"prefab":{"prefab_name":"StructureUprightWindTurbine","prefab_hash":1622183451,"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.","name":"Upright Wind Turbine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureValve":{"prefab":{"prefab_name":"StructureValve","prefab_hash":-692036078,"desc":"","name":"Valve"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"None"},{"typ":"Pipe","role":"None"}],"device_pins_length":null,"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}},"StructureVendingMachine":{"prefab":{"prefab_name":"StructureVendingMachine","prefab_hash":-443130773,"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.","name":"Vending Machine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"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"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureVolumePump":{"prefab":{"prefab_name":"StructureVolumePump","prefab_hash":-321403609,"desc":"The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks.","name":"Volume Pump"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureWallArch":{"prefab":{"prefab_name":"StructureWallArch","prefab_hash":-858143148,"desc":"","name":"Wall (Arch)"},"structure":{"small_grid":false}},"StructureWallArchArrow":{"prefab":{"prefab_name":"StructureWallArchArrow","prefab_hash":1649708822,"desc":"","name":"Wall (Arch Arrow)"},"structure":{"small_grid":false}},"StructureWallArchCornerRound":{"prefab":{"prefab_name":"StructureWallArchCornerRound","prefab_hash":1794588890,"desc":"","name":"Wall (Arch Corner Round)"},"structure":{"small_grid":true}},"StructureWallArchCornerSquare":{"prefab":{"prefab_name":"StructureWallArchCornerSquare","prefab_hash":-1963016580,"desc":"","name":"Wall (Arch Corner Square)"},"structure":{"small_grid":true}},"StructureWallArchCornerTriangle":{"prefab":{"prefab_name":"StructureWallArchCornerTriangle","prefab_hash":1281911841,"desc":"","name":"Wall (Arch Corner Triangle)"},"structure":{"small_grid":true}},"StructureWallArchPlating":{"prefab":{"prefab_name":"StructureWallArchPlating","prefab_hash":1182510648,"desc":"","name":"Wall (Arch Plating)"},"structure":{"small_grid":false}},"StructureWallArchTwoTone":{"prefab":{"prefab_name":"StructureWallArchTwoTone","prefab_hash":782529714,"desc":"","name":"Wall (Arch Two Tone)"},"structure":{"small_grid":false}},"StructureWallCooler":{"prefab":{"prefab_name":"StructureWallCooler","prefab_hash":-739292323,"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.","name":"Wall Cooler"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"Pipe","role":"None"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureWallFlat":{"prefab":{"prefab_name":"StructureWallFlat","prefab_hash":1635864154,"desc":"","name":"Wall (Flat)"},"structure":{"small_grid":false}},"StructureWallFlatCornerRound":{"prefab":{"prefab_name":"StructureWallFlatCornerRound","prefab_hash":898708250,"desc":"","name":"Wall (Flat Corner Round)"},"structure":{"small_grid":true}},"StructureWallFlatCornerSquare":{"prefab":{"prefab_name":"StructureWallFlatCornerSquare","prefab_hash":298130111,"desc":"","name":"Wall (Flat Corner Square)"},"structure":{"small_grid":true}},"StructureWallFlatCornerTriangle":{"prefab":{"prefab_name":"StructureWallFlatCornerTriangle","prefab_hash":2097419366,"desc":"","name":"Wall (Flat Corner Triangle)"},"structure":{"small_grid":true}},"StructureWallFlatCornerTriangleFlat":{"prefab":{"prefab_name":"StructureWallFlatCornerTriangleFlat","prefab_hash":-1161662836,"desc":"","name":"Wall (Flat Corner Triangle Flat)"},"structure":{"small_grid":true}},"StructureWallGeometryCorner":{"prefab":{"prefab_name":"StructureWallGeometryCorner","prefab_hash":1979212240,"desc":"","name":"Wall (Geometry Corner)"},"structure":{"small_grid":false}},"StructureWallGeometryStreight":{"prefab":{"prefab_name":"StructureWallGeometryStreight","prefab_hash":1049735537,"desc":"","name":"Wall (Geometry Straight)"},"structure":{"small_grid":false}},"StructureWallGeometryT":{"prefab":{"prefab_name":"StructureWallGeometryT","prefab_hash":1602758612,"desc":"","name":"Wall (Geometry T)"},"structure":{"small_grid":false}},"StructureWallGeometryTMirrored":{"prefab":{"prefab_name":"StructureWallGeometryTMirrored","prefab_hash":-1427845483,"desc":"","name":"Wall (Geometry T Mirrored)"},"structure":{"small_grid":false}},"StructureWallHeater":{"prefab":{"prefab_name":"StructureWallHeater","prefab_hash":24258244,"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.","name":"Wall Heater"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureWallIron":{"prefab":{"prefab_name":"StructureWallIron","prefab_hash":1287324802,"desc":"","name":"Iron Wall (Type 1)"},"structure":{"small_grid":false}},"StructureWallIron02":{"prefab":{"prefab_name":"StructureWallIron02","prefab_hash":1485834215,"desc":"","name":"Iron Wall (Type 2)"},"structure":{"small_grid":false}},"StructureWallIron03":{"prefab":{"prefab_name":"StructureWallIron03","prefab_hash":798439281,"desc":"","name":"Iron Wall (Type 3)"},"structure":{"small_grid":false}},"StructureWallIron04":{"prefab":{"prefab_name":"StructureWallIron04","prefab_hash":-1309433134,"desc":"","name":"Iron Wall (Type 4)"},"structure":{"small_grid":false}},"StructureWallLargePanel":{"prefab":{"prefab_name":"StructureWallLargePanel","prefab_hash":1492930217,"desc":"","name":"Wall (Large Panel)"},"structure":{"small_grid":false}},"StructureWallLargePanelArrow":{"prefab":{"prefab_name":"StructureWallLargePanelArrow","prefab_hash":-776581573,"desc":"","name":"Wall (Large Panel Arrow)"},"structure":{"small_grid":false}},"StructureWallLight":{"prefab":{"prefab_name":"StructureWallLight","prefab_hash":-1860064656,"desc":"","name":"Wall Light"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureWallLightBattery":{"prefab":{"prefab_name":"StructureWallLightBattery","prefab_hash":-1306415132,"desc":"","name":"Wall Light (Battery)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureWallPaddedArch":{"prefab":{"prefab_name":"StructureWallPaddedArch","prefab_hash":1590330637,"desc":"","name":"Wall (Padded Arch)"},"structure":{"small_grid":false}},"StructureWallPaddedArchCorner":{"prefab":{"prefab_name":"StructureWallPaddedArchCorner","prefab_hash":-1126688298,"desc":"","name":"Wall (Padded Arch Corner)"},"structure":{"small_grid":true}},"StructureWallPaddedArchLightFittingTop":{"prefab":{"prefab_name":"StructureWallPaddedArchLightFittingTop","prefab_hash":1171987947,"desc":"","name":"Wall (Padded Arch Light Fitting Top)"},"structure":{"small_grid":false}},"StructureWallPaddedArchLightsFittings":{"prefab":{"prefab_name":"StructureWallPaddedArchLightsFittings","prefab_hash":-1546743960,"desc":"","name":"Wall (Padded Arch Lights Fittings)"},"structure":{"small_grid":false}},"StructureWallPaddedCorner":{"prefab":{"prefab_name":"StructureWallPaddedCorner","prefab_hash":-155945899,"desc":"","name":"Wall (Padded Corner)"},"structure":{"small_grid":true}},"StructureWallPaddedCornerThin":{"prefab":{"prefab_name":"StructureWallPaddedCornerThin","prefab_hash":1183203913,"desc":"","name":"Wall (Padded Corner Thin)"},"structure":{"small_grid":true}},"StructureWallPaddedNoBorder":{"prefab":{"prefab_name":"StructureWallPaddedNoBorder","prefab_hash":8846501,"desc":"","name":"Wall (Padded No Border)"},"structure":{"small_grid":false}},"StructureWallPaddedNoBorderCorner":{"prefab":{"prefab_name":"StructureWallPaddedNoBorderCorner","prefab_hash":179694804,"desc":"","name":"Wall (Padded No Border Corner)"},"structure":{"small_grid":true}},"StructureWallPaddedThinNoBorder":{"prefab":{"prefab_name":"StructureWallPaddedThinNoBorder","prefab_hash":-1611559100,"desc":"","name":"Wall (Padded Thin No Border)"},"structure":{"small_grid":false}},"StructureWallPaddedThinNoBorderCorner":{"prefab":{"prefab_name":"StructureWallPaddedThinNoBorderCorner","prefab_hash":1769527556,"desc":"","name":"Wall (Padded Thin No Border Corner)"},"structure":{"small_grid":true}},"StructureWallPaddedWindow":{"prefab":{"prefab_name":"StructureWallPaddedWindow","prefab_hash":2087628940,"desc":"","name":"Wall (Padded Window)"},"structure":{"small_grid":false}},"StructureWallPaddedWindowThin":{"prefab":{"prefab_name":"StructureWallPaddedWindowThin","prefab_hash":-37302931,"desc":"","name":"Wall (Padded Window Thin)"},"structure":{"small_grid":false}},"StructureWallPadding":{"prefab":{"prefab_name":"StructureWallPadding","prefab_hash":635995024,"desc":"","name":"Wall (Padding)"},"structure":{"small_grid":false}},"StructureWallPaddingArchVent":{"prefab":{"prefab_name":"StructureWallPaddingArchVent","prefab_hash":-1243329828,"desc":"","name":"Wall (Padding Arch Vent)"},"structure":{"small_grid":false}},"StructureWallPaddingLightFitting":{"prefab":{"prefab_name":"StructureWallPaddingLightFitting","prefab_hash":2024882687,"desc":"","name":"Wall (Padding Light Fitting)"},"structure":{"small_grid":false}},"StructureWallPaddingThin":{"prefab":{"prefab_name":"StructureWallPaddingThin","prefab_hash":-1102403554,"desc":"","name":"Wall (Padding Thin)"},"structure":{"small_grid":false}},"StructureWallPlating":{"prefab":{"prefab_name":"StructureWallPlating","prefab_hash":26167457,"desc":"","name":"Wall (Plating)"},"structure":{"small_grid":false}},"StructureWallSmallPanelsAndHatch":{"prefab":{"prefab_name":"StructureWallSmallPanelsAndHatch","prefab_hash":619828719,"desc":"","name":"Wall (Small Panels And Hatch)"},"structure":{"small_grid":false}},"StructureWallSmallPanelsArrow":{"prefab":{"prefab_name":"StructureWallSmallPanelsArrow","prefab_hash":-639306697,"desc":"","name":"Wall (Small Panels Arrow)"},"structure":{"small_grid":false}},"StructureWallSmallPanelsMonoChrome":{"prefab":{"prefab_name":"StructureWallSmallPanelsMonoChrome","prefab_hash":386820253,"desc":"","name":"Wall (Small Panels Mono Chrome)"},"structure":{"small_grid":false}},"StructureWallSmallPanelsOpen":{"prefab":{"prefab_name":"StructureWallSmallPanelsOpen","prefab_hash":-1407480603,"desc":"","name":"Wall (Small Panels Open)"},"structure":{"small_grid":false}},"StructureWallSmallPanelsTwoTone":{"prefab":{"prefab_name":"StructureWallSmallPanelsTwoTone","prefab_hash":1709994581,"desc":"","name":"Wall (Small Panels Two Tone)"},"structure":{"small_grid":false}},"StructureWallVent":{"prefab":{"prefab_name":"StructureWallVent","prefab_hash":-1177469307,"desc":"Used to mix atmospheres passively between two walls.","name":"Wall Vent"},"structure":{"small_grid":true}},"StructureWaterBottleFiller":{"prefab":{"prefab_name":"StructureWaterBottleFiller","prefab_hash":-1178961954,"desc":"","name":"Water Bottle Filler"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Error":"Read","Activate":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureWaterBottleFillerBottom":{"prefab":{"prefab_name":"StructureWaterBottleFillerBottom","prefab_hash":1433754995,"desc":"","name":"Water Bottle Filler Bottom"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Error":"Read","Activate":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureWaterBottleFillerPowered":{"prefab":{"prefab_name":"StructureWaterBottleFillerPowered","prefab_hash":-756587791,"desc":"","name":"Waterbottle Filler"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureWaterBottleFillerPoweredBottom":{"prefab":{"prefab_name":"StructureWaterBottleFillerPoweredBottom","prefab_hash":1986658780,"desc":"","name":"Waterbottle Filler"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connection_list":[{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureWaterDigitalValve":{"prefab":{"prefab_name":"StructureWaterDigitalValve","prefab_hash":-517628750,"desc":"","name":"Liquid Digital Valve"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureWaterPipeMeter":{"prefab":{"prefab_name":"StructureWaterPipeMeter","prefab_hash":433184168,"desc":"","name":"Liquid Pipe Meter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureWaterPurifier":{"prefab":{"prefab_name":"StructureWaterPurifier","prefab_hash":887383294,"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.","name":"Water Purifier"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","ClearMemory":"Write","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"}],"device_pins_length":null,"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}},"StructureWaterWallCooler":{"prefab":{"prefab_name":"StructureWaterWallCooler","prefab_hash":-1369060582,"desc":"","name":"Liquid Wall Cooler"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureWeatherStation":{"prefab":{"prefab_name":"StructureWeatherStation","prefab_hash":1997212478,"desc":"0.NoStorm\n1.StormIncoming\n2.InStorm","name":"Weather Station"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"Read","Error":"Read","Activate":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","NextWeatherEventTime":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"NoStorm","1":"StormIncoming","2":"InStorm"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureWindTurbine":{"prefab":{"prefab_name":"StructureWindTurbine","prefab_hash":-2082355173,"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.","name":"Wind Turbine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureWindowShutter":{"prefab":{"prefab_name":"StructureWindowShutter","prefab_hash":2056377335,"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.","name":"Window Shutter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Error":"Read","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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":true,"has_reagents":false}},"ToolPrinterMod":{"prefab":{"prefab_name":"ToolPrinterMod","prefab_hash":1700018136,"desc":"Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Tool Printer Mod"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ToyLuna":{"prefab":{"prefab_name":"ToyLuna","prefab_hash":94730034,"desc":"","name":"Toy Luna"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"UniformCommander":{"prefab":{"prefab_name":"UniformCommander","prefab_hash":-2083426457,"desc":"","name":"Uniform Commander"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Uniform","sorting_class":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformMarine":{"prefab":{"prefab_name":"UniformMarine","prefab_hash":-48342840,"desc":"","name":"Marine Uniform"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Uniform","sorting_class":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformOrangeJumpSuit":{"prefab":{"prefab_name":"UniformOrangeJumpSuit","prefab_hash":810053150,"desc":"","name":"Jump Suit (Orange)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Uniform","sorting_class":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"WeaponEnergy":{"prefab":{"prefab_name":"WeaponEnergy","prefab_hash":789494694,"desc":"","name":"Weapon Energy"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponPistolEnergy":{"prefab":{"prefab_name":"WeaponPistolEnergy","prefab_hash":-385323479,"desc":"0.Stun\n1.Kill","name":"Energy Pistol"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponRifleEnergy":{"prefab":{"prefab_name":"WeaponRifleEnergy","prefab_hash":1154745374,"desc":"0.Stun\n1.Kill","name":"Energy Rifle"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponTorpedo":{"prefab":{"prefab_name":"WeaponTorpedo","prefab_hash":-1102977898,"desc":"","name":"Torpedo"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Torpedo","sorting_class":"Default"}}},"reagents":{"Alcohol":{"Hash":1565803737,"Unit":"ml","Sources":null},"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}},"Cocoa":{"Hash":678781198,"Unit":"g","Sources":{"ItemCocoaPowder":1.0,"ItemCocoaTree":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","Sources":null},"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","Sources":null},"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}},"Sugar":{"Hash":1778746875,"Unit":"g","Sources":{"ItemSugar":10.0,"ItemSugarCane":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}}},"enums":{"scriptEnums":{"LogicBatchMethod":{"enumName":"LogicBatchMethod","values":{"Average":{"value":0,"deprecated":false,"description":""},"Maximum":{"value":3,"deprecated":false,"description":""},"Minimum":{"value":2,"deprecated":false,"description":""},"Sum":{"value":1,"deprecated":false,"description":""}}},"LogicReagentMode":{"enumName":"LogicReagentMode","values":{"Contents":{"value":0,"deprecated":false,"description":""},"Recipe":{"value":2,"deprecated":false,"description":""},"Required":{"value":1,"deprecated":false,"description":""},"TotalContents":{"value":3,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NameHash":{"value":268,"deprecated":false,"description":"Provides the hash value for the name of the object as a 32 bit integer."},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}}},"basicEnums":{"AirCon":{"enumName":"AirConditioningMode","values":{"Cold":{"value":0,"deprecated":false,"description":""},"Hot":{"value":1,"deprecated":false,"description":""}}},"AirControl":{"enumName":"AirControlMode","values":{"Draught":{"value":4,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Offline":{"value":1,"deprecated":false,"description":""},"Pressure":{"value":2,"deprecated":false,"description":""}}},"Color":{"enumName":"ColorType","values":{"Black":{"value":7,"deprecated":false,"description":""},"Blue":{"value":0,"deprecated":false,"description":""},"Brown":{"value":8,"deprecated":false,"description":""},"Gray":{"value":1,"deprecated":false,"description":""},"Green":{"value":2,"deprecated":false,"description":""},"Khaki":{"value":9,"deprecated":false,"description":""},"Orange":{"value":3,"deprecated":false,"description":""},"Pink":{"value":10,"deprecated":false,"description":""},"Purple":{"value":11,"deprecated":false,"description":""},"Red":{"value":4,"deprecated":false,"description":""},"White":{"value":6,"deprecated":false,"description":""},"Yellow":{"value":5,"deprecated":false,"description":""}}},"DaylightSensorMode":{"enumName":"DaylightSensorMode","values":{"Default":{"value":0,"deprecated":false,"description":""},"Horizontal":{"value":1,"deprecated":false,"description":""},"Vertical":{"value":2,"deprecated":false,"description":""}}},"ElevatorMode":{"enumName":"ElevatorMode","values":{"Downward":{"value":2,"deprecated":false,"description":""},"Stationary":{"value":0,"deprecated":false,"description":""},"Upward":{"value":1,"deprecated":false,"description":""}}},"EntityState":{"enumName":"EntityState","values":{"Alive":{"value":0,"deprecated":false,"description":""},"Dead":{"value":1,"deprecated":false,"description":""},"Decay":{"value":3,"deprecated":false,"description":""},"Unconscious":{"value":2,"deprecated":false,"description":""}}},"GasType":{"enumName":"GasType","values":{"CarbonDioxide":{"value":4,"deprecated":false,"description":""},"Hydrogen":{"value":16384,"deprecated":false,"description":""},"LiquidCarbonDioxide":{"value":2048,"deprecated":false,"description":""},"LiquidHydrogen":{"value":32768,"deprecated":false,"description":""},"LiquidNitrogen":{"value":128,"deprecated":false,"description":""},"LiquidNitrousOxide":{"value":8192,"deprecated":false,"description":""},"LiquidOxygen":{"value":256,"deprecated":false,"description":""},"LiquidPollutant":{"value":4096,"deprecated":false,"description":""},"LiquidVolatiles":{"value":512,"deprecated":false,"description":""},"Nitrogen":{"value":2,"deprecated":false,"description":""},"NitrousOxide":{"value":64,"deprecated":false,"description":""},"Oxygen":{"value":1,"deprecated":false,"description":""},"Pollutant":{"value":16,"deprecated":false,"description":""},"PollutedWater":{"value":65536,"deprecated":false,"description":""},"Steam":{"value":1024,"deprecated":false,"description":""},"Undefined":{"value":0,"deprecated":false,"description":""},"Volatiles":{"value":8,"deprecated":false,"description":""},"Water":{"value":32,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NameHash":{"value":268,"deprecated":false,"description":"Provides the hash value for the name of the object as a 32 bit integer."},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}},"PowerMode":{"enumName":"PowerMode","values":{"Charged":{"value":4,"deprecated":false,"description":""},"Charging":{"value":3,"deprecated":false,"description":""},"Discharged":{"value":1,"deprecated":false,"description":""},"Discharging":{"value":2,"deprecated":false,"description":""},"Idle":{"value":0,"deprecated":false,"description":""}}},"PrinterInstruction":{"enumName":"PrinterInstruction","values":{"DeviceSetLock":{"value":6,"deprecated":false,"description":""},"EjectAllReagents":{"value":8,"deprecated":false,"description":""},"EjectReagent":{"value":7,"deprecated":false,"description":""},"ExecuteRecipe":{"value":2,"deprecated":false,"description":""},"JumpIfNextInvalid":{"value":4,"deprecated":false,"description":""},"JumpToAddress":{"value":5,"deprecated":false,"description":""},"MissingRecipeReagent":{"value":9,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"StackPointer":{"value":1,"deprecated":false,"description":""},"WaitUntilNextValid":{"value":3,"deprecated":false,"description":""}}},"ReEntryProfile":{"enumName":"ReEntryProfile","values":{"High":{"value":3,"deprecated":false,"description":""},"Max":{"value":4,"deprecated":false,"description":""},"Medium":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Optimal":{"value":1,"deprecated":false,"description":""}}},"RobotMode":{"enumName":"RobotMode","values":{"Follow":{"value":1,"deprecated":false,"description":""},"MoveToTarget":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"PathToTarget":{"value":5,"deprecated":false,"description":""},"Roam":{"value":3,"deprecated":false,"description":""},"StorageFull":{"value":6,"deprecated":false,"description":""},"Unload":{"value":4,"deprecated":false,"description":""}}},"RocketMode":{"enumName":"RocketMode","values":{"Chart":{"value":5,"deprecated":false,"description":""},"Discover":{"value":4,"deprecated":false,"description":""},"Invalid":{"value":0,"deprecated":false,"description":""},"Mine":{"value":2,"deprecated":false,"description":""},"None":{"value":1,"deprecated":false,"description":""},"Survey":{"value":3,"deprecated":false,"description":""}}},"SlotClass":{"enumName":"Class","values":{"AccessCard":{"value":22,"deprecated":false,"description":""},"Appliance":{"value":18,"deprecated":false,"description":""},"Back":{"value":3,"deprecated":false,"description":""},"Battery":{"value":14,"deprecated":false,"description":""},"Belt":{"value":16,"deprecated":false,"description":""},"Blocked":{"value":38,"deprecated":false,"description":""},"Bottle":{"value":25,"deprecated":false,"description":""},"Cartridge":{"value":21,"deprecated":false,"description":""},"Circuit":{"value":24,"deprecated":false,"description":""},"Circuitboard":{"value":7,"deprecated":false,"description":""},"CreditCard":{"value":28,"deprecated":false,"description":""},"DataDisk":{"value":8,"deprecated":false,"description":""},"DirtCanister":{"value":29,"deprecated":false,"description":""},"DrillHead":{"value":35,"deprecated":false,"description":""},"Egg":{"value":15,"deprecated":false,"description":""},"Entity":{"value":13,"deprecated":false,"description":""},"Flare":{"value":37,"deprecated":false,"description":""},"GasCanister":{"value":5,"deprecated":false,"description":""},"GasFilter":{"value":4,"deprecated":false,"description":""},"Glasses":{"value":27,"deprecated":false,"description":""},"Helmet":{"value":1,"deprecated":false,"description":""},"Ingot":{"value":19,"deprecated":false,"description":""},"LiquidBottle":{"value":32,"deprecated":false,"description":""},"LiquidCanister":{"value":31,"deprecated":false,"description":""},"Magazine":{"value":23,"deprecated":false,"description":""},"Motherboard":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Ore":{"value":10,"deprecated":false,"description":""},"Organ":{"value":9,"deprecated":false,"description":""},"Plant":{"value":11,"deprecated":false,"description":""},"ProgrammableChip":{"value":26,"deprecated":false,"description":""},"ScanningHead":{"value":36,"deprecated":false,"description":""},"SensorProcessingUnit":{"value":30,"deprecated":false,"description":""},"SoundCartridge":{"value":34,"deprecated":false,"description":""},"Suit":{"value":2,"deprecated":false,"description":""},"SuitMod":{"value":39,"deprecated":false,"description":""},"Tool":{"value":17,"deprecated":false,"description":""},"Torpedo":{"value":20,"deprecated":false,"description":""},"Uniform":{"value":12,"deprecated":false,"description":""},"Wreckage":{"value":33,"deprecated":false,"description":""}}},"SorterInstruction":{"enumName":"SorterInstruction","values":{"FilterPrefabHashEquals":{"value":1,"deprecated":false,"description":""},"FilterPrefabHashNotEquals":{"value":2,"deprecated":false,"description":""},"FilterQuantityCompare":{"value":5,"deprecated":false,"description":""},"FilterSlotTypeCompare":{"value":4,"deprecated":false,"description":""},"FilterSortingClassCompare":{"value":3,"deprecated":false,"description":""},"LimitNextExecutionByCount":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""}}},"SortingClass":{"enumName":"SortingClass","values":{"Appliances":{"value":6,"deprecated":false,"description":""},"Atmospherics":{"value":7,"deprecated":false,"description":""},"Clothing":{"value":5,"deprecated":false,"description":""},"Default":{"value":0,"deprecated":false,"description":""},"Food":{"value":4,"deprecated":false,"description":""},"Ices":{"value":10,"deprecated":false,"description":""},"Kits":{"value":1,"deprecated":false,"description":""},"Ores":{"value":9,"deprecated":false,"description":""},"Resources":{"value":3,"deprecated":false,"description":""},"Storage":{"value":8,"deprecated":false,"description":""},"Tools":{"value":2,"deprecated":false,"description":""}}},"Sound":{"enumName":"SoundAlert","values":{"AirlockCycling":{"value":22,"deprecated":false,"description":""},"Alarm1":{"value":45,"deprecated":false,"description":""},"Alarm10":{"value":12,"deprecated":false,"description":""},"Alarm11":{"value":13,"deprecated":false,"description":""},"Alarm12":{"value":14,"deprecated":false,"description":""},"Alarm2":{"value":1,"deprecated":false,"description":""},"Alarm3":{"value":2,"deprecated":false,"description":""},"Alarm4":{"value":3,"deprecated":false,"description":""},"Alarm5":{"value":4,"deprecated":false,"description":""},"Alarm6":{"value":5,"deprecated":false,"description":""},"Alarm7":{"value":6,"deprecated":false,"description":""},"Alarm8":{"value":10,"deprecated":false,"description":""},"Alarm9":{"value":11,"deprecated":false,"description":""},"Alert":{"value":17,"deprecated":false,"description":""},"Danger":{"value":15,"deprecated":false,"description":""},"Depressurising":{"value":20,"deprecated":false,"description":""},"FireFireFire":{"value":28,"deprecated":false,"description":""},"Five":{"value":33,"deprecated":false,"description":""},"Floor":{"value":34,"deprecated":false,"description":""},"Four":{"value":32,"deprecated":false,"description":""},"HaltWhoGoesThere":{"value":27,"deprecated":false,"description":""},"HighCarbonDioxide":{"value":44,"deprecated":false,"description":""},"IntruderAlert":{"value":19,"deprecated":false,"description":""},"LiftOff":{"value":36,"deprecated":false,"description":""},"MalfunctionDetected":{"value":26,"deprecated":false,"description":""},"Music1":{"value":7,"deprecated":false,"description":""},"Music2":{"value":8,"deprecated":false,"description":""},"Music3":{"value":9,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"One":{"value":29,"deprecated":false,"description":""},"PollutantsDetected":{"value":43,"deprecated":false,"description":""},"PowerLow":{"value":23,"deprecated":false,"description":""},"PressureHigh":{"value":39,"deprecated":false,"description":""},"PressureLow":{"value":40,"deprecated":false,"description":""},"Pressurising":{"value":21,"deprecated":false,"description":""},"RocketLaunching":{"value":35,"deprecated":false,"description":""},"StormIncoming":{"value":18,"deprecated":false,"description":""},"SystemFailure":{"value":24,"deprecated":false,"description":""},"TemperatureHigh":{"value":41,"deprecated":false,"description":""},"TemperatureLow":{"value":42,"deprecated":false,"description":""},"Three":{"value":31,"deprecated":false,"description":""},"TraderIncoming":{"value":37,"deprecated":false,"description":""},"TraderLanded":{"value":38,"deprecated":false,"description":""},"Two":{"value":30,"deprecated":false,"description":""},"Warning":{"value":16,"deprecated":false,"description":""},"Welcome":{"value":25,"deprecated":false,"description":""}}},"TransmitterMode":{"enumName":"LogicTransmitterMode","values":{"Active":{"value":1,"deprecated":false,"description":""},"Passive":{"value":0,"deprecated":false,"description":""}}},"Vent":{"enumName":"VentDirection","values":{"Inward":{"value":1,"deprecated":false,"description":""},"Outward":{"value":0,"deprecated":false,"description":""}}},"_unnamed":{"enumName":"ConditionOperation","values":{"Equals":{"value":0,"deprecated":false,"description":""},"Greater":{"value":1,"deprecated":false,"description":""},"Less":{"value":2,"deprecated":false,"description":""},"NotEquals":{"value":3,"deprecated":false,"description":""}}}}},"prefabsByHash":{"-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","-1884103228":"SeedBag_SugarCane","-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","-1351081801":"StructureLargeHangerDoor","-1348105509":"ItemGoldOre","-1344601965":"ItemCannedMushroom","-1339716113":"AppliancePaintMixer","-1339479035":"AccessCardGray","-1337091041":"StructureChuteDigitalValveRight","-1335056202":"ItemSugarCane","-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","-1108244510":"ItemPlainCake","-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","-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","-261575861":"ItemChocolateCake","-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","234601764":"ItemChocolateBar","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","457286516":"ItemCocoaPowder","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","680051921":"ItemCocoaTree","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","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","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","860793245":"ItemChocolateCerealBar","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","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","1139887531":"SeedBag_Cocoa","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","2111910840":"ItemSugar","2130739600":"DynamicMKIILiquidCanisterEmpty","2131916219":"ItemSpaceOre","2133035682":"ItemKitStandardChute","2134172356":"StructureInsulatedPipeStraight","2134647745":"ItemLeadIngot","2145068424":"ItemGasCanisterNitrogen"},"structures":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","Flag_ODA_10m","Flag_ODA_4m","Flag_ODA_6m","Flag_ODA_8m","H2Combustor","KitchenTableShort","KitchenTableSimpleShort","KitchenTableSimpleTall","KitchenTableTall","Landingpad_2x2CenterPiece01","Landingpad_BlankPiece","Landingpad_CenterPiece01","Landingpad_CrossPiece","Landingpad_DataConnectionPiece","Landingpad_DiagonalPiece01","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_GasCylinderTankPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_StraightPiece01","Landingpad_TaxiPieceCorner","Landingpad_TaxiPieceHold","Landingpad_TaxiPieceStraight","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","RailingElegant01","RailingElegant02","RailingIndustrial02","RespawnPoint","RespawnPointWallMounted","Rover_MkI_build_states","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureBlocker","StructureCableAnalysizer","StructureCableCorner","StructureCableCorner3","StructureCableCorner3Burnt","StructureCableCorner3HBurnt","StructureCableCorner4","StructureCableCorner4Burnt","StructureCableCorner4HBurnt","StructureCableCornerBurnt","StructureCableCornerH","StructureCableCornerH3","StructureCableCornerH4","StructureCableCornerHBurnt","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCableJunction","StructureCableJunction4","StructureCableJunction4Burnt","StructureCableJunction4HBurnt","StructureCableJunction5","StructureCableJunction5Burnt","StructureCableJunction6","StructureCableJunction6Burnt","StructureCableJunction6HBurnt","StructureCableJunctionBurnt","StructureCableJunctionH","StructureCableJunctionH4","StructureCableJunctionH5","StructureCableJunctionH5Burnt","StructureCableJunctionH6","StructureCableJunctionHBurnt","StructureCableStraight","StructureCableStraightBurnt","StructureCableStraightH","StructureCableStraightHBurnt","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteCorner","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteFlipFlopSplitter","StructureChuteInlet","StructureChuteJunction","StructureChuteOutlet","StructureChuteOverflow","StructureChuteStraight","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureChuteValve","StructureChuteWindow","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeCladdingAngled","StructureCompositeCladdingAngledCorner","StructureCompositeCladdingAngledCornerInner","StructureCompositeCladdingAngledCornerInnerLong","StructureCompositeCladdingAngledCornerInnerLongL","StructureCompositeCladdingAngledCornerInnerLongR","StructureCompositeCladdingAngledCornerLong","StructureCompositeCladdingAngledCornerLongR","StructureCompositeCladdingAngledLong","StructureCompositeCladdingCylindrical","StructureCompositeCladdingCylindricalPanel","StructureCompositeCladdingPanel","StructureCompositeCladdingRounded","StructureCompositeCladdingRoundedCorner","StructureCompositeCladdingRoundedCornerInner","StructureCompositeCladdingSpherical","StructureCompositeCladdingSphericalCap","StructureCompositeCladdingSphericalCorner","StructureCompositeDoor","StructureCompositeFloorGrating","StructureCompositeFloorGrating2","StructureCompositeFloorGrating3","StructureCompositeFloorGrating4","StructureCompositeFloorGratingOpen","StructureCompositeFloorGratingOpenRotated","StructureCompositeWall","StructureCompositeWall02","StructureCompositeWall03","StructureCompositeWall04","StructureCompositeWindow","StructureCompositeWindowIron","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCrateMount","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEngineMountTypeA1","StructureEvaporationChamber","StructureExpansionValve","StructureFairingTypeA1","StructureFairingTypeA2","StructureFairingTypeA3","StructureFiltration","StructureFlagSmall","StructureFlashingLight","StructureFlatBench","StructureFloorDrain","StructureFrame","StructureFrameCorner","StructureFrameCornerCut","StructureFrameIron","StructureFrameSide","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureFuselageTypeA1","StructureFuselageTypeA2","StructureFuselageTypeA4","StructureFuselageTypeC5","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTray","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInLineTankGas1x1","StructureInLineTankGas1x2","StructureInLineTankLiquid1x1","StructureInLineTankLiquid1x2","StructureInsulatedInLineTankGas1x1","StructureInsulatedInLineTankGas1x2","StructureInsulatedInLineTankLiquid1x1","StructureInsulatedInLineTankLiquid1x2","StructureInsulatedPipeCorner","StructureInsulatedPipeCrossJunction","StructureInsulatedPipeCrossJunction3","StructureInsulatedPipeCrossJunction4","StructureInsulatedPipeCrossJunction5","StructureInsulatedPipeCrossJunction6","StructureInsulatedPipeLiquidCorner","StructureInsulatedPipeLiquidCrossJunction","StructureInsulatedPipeLiquidCrossJunction4","StructureInsulatedPipeLiquidCrossJunction5","StructureInsulatedPipeLiquidCrossJunction6","StructureInsulatedPipeLiquidStraight","StructureInsulatedPipeLiquidTJunction","StructureInsulatedPipeStraight","StructureInsulatedPipeTJunction","StructureInsulatedTankConnector","StructureInsulatedTankConnectorLiquid","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLadder","StructureLadderEnd","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLaunchMount","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassiveVent","StructurePassiveVentInsulated","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePictureFrameThickLandscapeLarge","StructurePictureFrameThickLandscapeSmall","StructurePictureFrameThickMountLandscapeLarge","StructurePictureFrameThickMountLandscapeSmall","StructurePictureFrameThickMountPortraitLarge","StructurePictureFrameThickMountPortraitSmall","StructurePictureFrameThickPortraitLarge","StructurePictureFrameThickPortraitSmall","StructurePictureFrameThinLandscapeLarge","StructurePictureFrameThinLandscapeSmall","StructurePictureFrameThinMountLandscapeLarge","StructurePictureFrameThinMountLandscapeSmall","StructurePictureFrameThinMountPortraitLarge","StructurePictureFrameThinMountPortraitSmall","StructurePictureFrameThinPortraitLarge","StructurePictureFrameThinPortraitSmall","StructurePipeAnalysizer","StructurePipeCorner","StructurePipeCowl","StructurePipeCrossJunction","StructurePipeCrossJunction3","StructurePipeCrossJunction4","StructurePipeCrossJunction5","StructurePipeCrossJunction6","StructurePipeHeater","StructurePipeIgniter","StructurePipeInsulatedLiquidCrossJunction","StructurePipeLabel","StructurePipeLiquidCorner","StructurePipeLiquidCrossJunction","StructurePipeLiquidCrossJunction3","StructurePipeLiquidCrossJunction4","StructurePipeLiquidCrossJunction5","StructurePipeLiquidCrossJunction6","StructurePipeLiquidStraight","StructurePipeLiquidTJunction","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeOrgan","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePipeStraight","StructurePipeTJunction","StructurePlanter","StructurePlatformLadderOpen","StructurePlinth","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRailing","StructureRecycler","StructureRefrigeratedVendingMachine","StructureReinforcedCompositeWindow","StructureReinforcedCompositeWindowSteel","StructureReinforcedWallPaddedWindow","StructureReinforcedWallPaddedWindowThin","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTower","StructureRocketTransformerSmall","StructureRover","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelf","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSmallTableBacklessDouble","StructureSmallTableBacklessSingle","StructureSmallTableDinnerSingle","StructureSmallTableRectangleDouble","StructureSmallTableRectangleSingle","StructureSmallTableThickDouble","StructureSmallTableThickSingle","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStairs4x2","StructureStairs4x2RailL","StructureStairs4x2RailR","StructureStairs4x2Rails","StructureStairwellBackLeft","StructureStairwellBackPassthrough","StructureStairwellBackRight","StructureStairwellFrontLeft","StructureStairwellFrontPassthrough","StructureStairwellFrontRight","StructureStairwellNoDoors","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankConnector","StructureTankConnectorLiquid","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTorpedoRack","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallArch","StructureWallArchArrow","StructureWallArchCornerRound","StructureWallArchCornerSquare","StructureWallArchCornerTriangle","StructureWallArchPlating","StructureWallArchTwoTone","StructureWallCooler","StructureWallFlat","StructureWallFlatCornerRound","StructureWallFlatCornerSquare","StructureWallFlatCornerTriangle","StructureWallFlatCornerTriangleFlat","StructureWallGeometryCorner","StructureWallGeometryStreight","StructureWallGeometryT","StructureWallGeometryTMirrored","StructureWallHeater","StructureWallIron","StructureWallIron02","StructureWallIron03","StructureWallIron04","StructureWallLargePanel","StructureWallLargePanelArrow","StructureWallLight","StructureWallLightBattery","StructureWallPaddedArch","StructureWallPaddedArchCorner","StructureWallPaddedArchLightFittingTop","StructureWallPaddedArchLightsFittings","StructureWallPaddedCorner","StructureWallPaddedCornerThin","StructureWallPaddedNoBorder","StructureWallPaddedNoBorderCorner","StructureWallPaddedThinNoBorder","StructureWallPaddedThinNoBorderCorner","StructureWallPaddedWindow","StructureWallPaddedWindowThin","StructureWallPadding","StructureWallPaddingArchVent","StructureWallPaddingLightFitting","StructureWallPaddingThin","StructureWallPlating","StructureWallSmallPanelsAndHatch","StructureWallSmallPanelsArrow","StructureWallSmallPanelsMonoChrome","StructureWallSmallPanelsOpen","StructureWallSmallPanelsTwoTone","StructureWallVent","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"devices":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","H2Combustor","Landingpad_DataConnectionPiece","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureCableAnalysizer","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteInlet","StructureChuteOutlet","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeDoor","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEvaporationChamber","StructureExpansionValve","StructureFiltration","StructureFlashingLight","StructureFlatBench","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePipeAnalysizer","StructurePipeHeater","StructurePipeIgniter","StructurePipeLabel","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRecycler","StructureRefrigeratedVendingMachine","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTransformerSmall","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallCooler","StructureWallHeater","StructureWallLight","StructureWallLightBattery","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"items":["AccessCardBlack","AccessCardBlue","AccessCardBrown","AccessCardGray","AccessCardGreen","AccessCardKhaki","AccessCardOrange","AccessCardPink","AccessCardPurple","AccessCardRed","AccessCardWhite","AccessCardYellow","ApplianceChemistryStation","ApplianceDeskLampLeft","ApplianceDeskLampRight","ApplianceMicrowave","AppliancePackagingMachine","AppliancePaintMixer","AppliancePlantGeneticAnalyzer","AppliancePlantGeneticSplicer","AppliancePlantGeneticStabilizer","ApplianceReagentProcessor","ApplianceSeedTray","ApplianceTabletDock","AutolathePrinterMod","Battery_Wireless_cell","Battery_Wireless_cell_Big","CardboardBox","CartridgeAccessController","CartridgeAtmosAnalyser","CartridgeConfiguration","CartridgeElectronicReader","CartridgeGPS","CartridgeGuide","CartridgeMedicalAnalyser","CartridgeNetworkAnalyser","CartridgeOreScanner","CartridgeOreScannerColor","CartridgePlantAnalyser","CartridgeTracker","CircuitboardAdvAirlockControl","CircuitboardAirControl","CircuitboardAirlockControl","CircuitboardCameraDisplay","CircuitboardDoorControl","CircuitboardGasDisplay","CircuitboardGraphDisplay","CircuitboardHashDisplay","CircuitboardModeControl","CircuitboardPowerControl","CircuitboardShipDisplay","CircuitboardSolarControl","CrateMkII","DecayedFood","DynamicAirConditioner","DynamicCrate","DynamicGPR","DynamicGasCanisterAir","DynamicGasCanisterCarbonDioxide","DynamicGasCanisterEmpty","DynamicGasCanisterFuel","DynamicGasCanisterNitrogen","DynamicGasCanisterNitrousOxide","DynamicGasCanisterOxygen","DynamicGasCanisterPollutants","DynamicGasCanisterRocketFuel","DynamicGasCanisterVolatiles","DynamicGasCanisterWater","DynamicGasTankAdvanced","DynamicGasTankAdvancedOxygen","DynamicGenerator","DynamicHydroponics","DynamicLight","DynamicLiquidCanisterEmpty","DynamicMKIILiquidCanisterEmpty","DynamicMKIILiquidCanisterWater","DynamicScrubber","DynamicSkeleton","ElectronicPrinterMod","ElevatorCarrage","EntityChick","EntityChickenBrown","EntityChickenWhite","EntityRoosterBlack","EntityRoosterBrown","Fertilizer","FireArmSMG","FlareGun","Handgun","HandgunMagazine","HumanSkull","ImGuiCircuitboardAirlockControl","ItemActiveVent","ItemAdhesiveInsulation","ItemAdvancedTablet","ItemAlienMushroom","ItemAmmoBox","ItemAngleGrinder","ItemArcWelder","ItemAreaPowerControl","ItemAstroloyIngot","ItemAstroloySheets","ItemAuthoringTool","ItemAuthoringToolRocketNetwork","ItemBasketBall","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBatteryCharger","ItemBatteryChargerSmall","ItemBeacon","ItemBiomass","ItemBreadLoaf","ItemCableAnalyser","ItemCableCoil","ItemCableCoilHeavy","ItemCableFuse","ItemCannedCondensedMilk","ItemCannedEdamame","ItemCannedMushroom","ItemCannedPowderedEggs","ItemCannedRicePudding","ItemCerealBar","ItemCharcoal","ItemChemLightBlue","ItemChemLightGreen","ItemChemLightRed","ItemChemLightWhite","ItemChemLightYellow","ItemChocolateBar","ItemChocolateCake","ItemChocolateCerealBar","ItemCoalOre","ItemCobaltOre","ItemCocoaPowder","ItemCocoaTree","ItemCoffeeMug","ItemConstantanIngot","ItemCookedCondensedMilk","ItemCookedCorn","ItemCookedMushroom","ItemCookedPowderedEggs","ItemCookedPumpkin","ItemCookedRice","ItemCookedSoybean","ItemCookedTomato","ItemCopperIngot","ItemCopperOre","ItemCorn","ItemCornSoup","ItemCreditCard","ItemCropHay","ItemCrowbar","ItemDataDisk","ItemDirtCanister","ItemDirtyOre","ItemDisposableBatteryCharger","ItemDrill","ItemDuctTape","ItemDynamicAirCon","ItemDynamicScrubber","ItemEggCarton","ItemElectronicParts","ItemElectrumIngot","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyCrowbar","ItemEmergencyDrill","ItemEmergencyEvaSuit","ItemEmergencyPickaxe","ItemEmergencyScrewdriver","ItemEmergencySpaceHelmet","ItemEmergencyToolBelt","ItemEmergencyWireCutters","ItemEmergencyWrench","ItemEmptyCan","ItemEvaSuit","ItemExplosive","ItemFern","ItemFertilizedEgg","ItemFilterFern","ItemFlagSmall","ItemFlashingLight","ItemFlashlight","ItemFlour","ItemFlowerBlue","ItemFlowerGreen","ItemFlowerOrange","ItemFlowerRed","ItemFlowerYellow","ItemFrenchFries","ItemFries","ItemGasCanisterCarbonDioxide","ItemGasCanisterEmpty","ItemGasCanisterFuel","ItemGasCanisterNitrogen","ItemGasCanisterNitrousOxide","ItemGasCanisterOxygen","ItemGasCanisterPollutants","ItemGasCanisterSmart","ItemGasCanisterVolatiles","ItemGasCanisterWater","ItemGasFilterCarbonDioxide","ItemGasFilterCarbonDioxideInfinite","ItemGasFilterCarbonDioxideL","ItemGasFilterCarbonDioxideM","ItemGasFilterNitrogen","ItemGasFilterNitrogenInfinite","ItemGasFilterNitrogenL","ItemGasFilterNitrogenM","ItemGasFilterNitrousOxide","ItemGasFilterNitrousOxideInfinite","ItemGasFilterNitrousOxideL","ItemGasFilterNitrousOxideM","ItemGasFilterOxygen","ItemGasFilterOxygenInfinite","ItemGasFilterOxygenL","ItemGasFilterOxygenM","ItemGasFilterPollutants","ItemGasFilterPollutantsInfinite","ItemGasFilterPollutantsL","ItemGasFilterPollutantsM","ItemGasFilterVolatiles","ItemGasFilterVolatilesInfinite","ItemGasFilterVolatilesL","ItemGasFilterVolatilesM","ItemGasFilterWater","ItemGasFilterWaterInfinite","ItemGasFilterWaterL","ItemGasFilterWaterM","ItemGasSensor","ItemGasTankStorage","ItemGlassSheets","ItemGlasses","ItemGoldIngot","ItemGoldOre","ItemGrenade","ItemHEMDroidRepairKit","ItemHardBackpack","ItemHardJetpack","ItemHardMiningBackPack","ItemHardSuit","ItemHardsuitHelmet","ItemHastelloyIngot","ItemHat","ItemHighVolumeGasCanisterEmpty","ItemHorticultureBelt","ItemHydroponicTray","ItemIce","ItemIgniter","ItemInconelIngot","ItemInsulation","ItemIntegratedCircuit10","ItemInvarIngot","ItemIronFrames","ItemIronIngot","ItemIronOre","ItemIronSheets","ItemJetpackBasic","ItemKitAIMeE","ItemKitAccessBridge","ItemKitAdvancedComposter","ItemKitAdvancedFurnace","ItemKitAdvancedPackagingMachine","ItemKitAirlock","ItemKitAirlockGate","ItemKitArcFurnace","ItemKitAtmospherics","ItemKitAutoMinerSmall","ItemKitAutolathe","ItemKitAutomatedOven","ItemKitBasket","ItemKitBattery","ItemKitBatteryLarge","ItemKitBeacon","ItemKitBeds","ItemKitBlastDoor","ItemKitCentrifuge","ItemKitChairs","ItemKitChute","ItemKitChuteUmbilical","ItemKitCompositeCladding","ItemKitCompositeFloorGrating","ItemKitComputer","ItemKitConsole","ItemKitCrate","ItemKitCrateMkII","ItemKitCrateMount","ItemKitCryoTube","ItemKitDeepMiner","ItemKitDockingPort","ItemKitDoor","ItemKitDrinkingFountain","ItemKitDynamicCanister","ItemKitDynamicGasTankAdvanced","ItemKitDynamicGenerator","ItemKitDynamicHydroponics","ItemKitDynamicLiquidCanister","ItemKitDynamicMKIILiquidCanister","ItemKitElectricUmbilical","ItemKitElectronicsPrinter","ItemKitElevator","ItemKitEngineLarge","ItemKitEngineMedium","ItemKitEngineSmall","ItemKitEvaporationChamber","ItemKitFlagODA","ItemKitFridgeBig","ItemKitFridgeSmall","ItemKitFurnace","ItemKitFurniture","ItemKitFuselage","ItemKitGasGenerator","ItemKitGasUmbilical","ItemKitGovernedGasRocketEngine","ItemKitGroundTelescope","ItemKitGrowLight","ItemKitHarvie","ItemKitHeatExchanger","ItemKitHorizontalAutoMiner","ItemKitHydraulicPipeBender","ItemKitHydroponicAutomated","ItemKitHydroponicStation","ItemKitIceCrusher","ItemKitInsulatedLiquidPipe","ItemKitInsulatedPipe","ItemKitInsulatedPipeUtility","ItemKitInsulatedPipeUtilityLiquid","ItemKitInteriorDoors","ItemKitLadder","ItemKitLandingPadAtmos","ItemKitLandingPadBasic","ItemKitLandingPadWaypoint","ItemKitLargeDirectHeatExchanger","ItemKitLargeExtendableRadiator","ItemKitLargeSatelliteDish","ItemKitLaunchMount","ItemKitLaunchTower","ItemKitLiquidRegulator","ItemKitLiquidTank","ItemKitLiquidTankInsulated","ItemKitLiquidTurboVolumePump","ItemKitLiquidUmbilical","ItemKitLocker","ItemKitLogicCircuit","ItemKitLogicInputOutput","ItemKitLogicMemory","ItemKitLogicProcessor","ItemKitLogicSwitch","ItemKitLogicTransmitter","ItemKitMotherShipCore","ItemKitMusicMachines","ItemKitPassiveLargeRadiatorGas","ItemKitPassiveLargeRadiatorLiquid","ItemKitPassthroughHeatExchanger","ItemKitPictureFrame","ItemKitPipe","ItemKitPipeLiquid","ItemKitPipeOrgan","ItemKitPipeRadiator","ItemKitPipeRadiatorLiquid","ItemKitPipeUtility","ItemKitPipeUtilityLiquid","ItemKitPlanter","ItemKitPortablesConnector","ItemKitPowerTransmitter","ItemKitPowerTransmitterOmni","ItemKitPoweredVent","ItemKitPressureFedGasEngine","ItemKitPressureFedLiquidEngine","ItemKitPressurePlate","ItemKitPumpedLiquidEngine","ItemKitRailing","ItemKitRecycler","ItemKitRegulator","ItemKitReinforcedWindows","ItemKitResearchMachine","ItemKitRespawnPointWallMounted","ItemKitRocketAvionics","ItemKitRocketBattery","ItemKitRocketCargoStorage","ItemKitRocketCelestialTracker","ItemKitRocketCircuitHousing","ItemKitRocketDatalink","ItemKitRocketGasFuelTank","ItemKitRocketLiquidFuelTank","ItemKitRocketManufactory","ItemKitRocketMiner","ItemKitRocketScanner","ItemKitRocketTransformerSmall","ItemKitRoverFrame","ItemKitRoverMKI","ItemKitSDBHopper","ItemKitSatelliteDish","ItemKitSecurityPrinter","ItemKitSensor","ItemKitShower","ItemKitSign","ItemKitSleeper","ItemKitSmallDirectHeatExchanger","ItemKitSmallSatelliteDish","ItemKitSolarPanel","ItemKitSolarPanelBasic","ItemKitSolarPanelBasicReinforced","ItemKitSolarPanelReinforced","ItemKitSolidGenerator","ItemKitSorter","ItemKitSpeaker","ItemKitStacker","ItemKitStairs","ItemKitStairwell","ItemKitStandardChute","ItemKitStirlingEngine","ItemKitSuitStorage","ItemKitTables","ItemKitTank","ItemKitTankInsulated","ItemKitToolManufactory","ItemKitTransformer","ItemKitTransformerSmall","ItemKitTurbineGenerator","ItemKitTurboVolumePump","ItemKitUprightWindTurbine","ItemKitVendingMachine","ItemKitVendingMachineRefrigerated","ItemKitWall","ItemKitWallArch","ItemKitWallFlat","ItemKitWallGeometry","ItemKitWallIron","ItemKitWallPadded","ItemKitWaterBottleFiller","ItemKitWaterPurifier","ItemKitWeatherStation","ItemKitWindTurbine","ItemKitWindowShutter","ItemLabeller","ItemLaptop","ItemLeadIngot","ItemLeadOre","ItemLightSword","ItemLiquidCanisterEmpty","ItemLiquidCanisterSmart","ItemLiquidDrain","ItemLiquidPipeAnalyzer","ItemLiquidPipeHeater","ItemLiquidPipeValve","ItemLiquidPipeVolumePump","ItemLiquidTankStorage","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIICrowbar","ItemMKIIDrill","ItemMKIIDuctTape","ItemMKIIMiningDrill","ItemMKIIScrewdriver","ItemMKIIWireCutters","ItemMKIIWrench","ItemMarineBodyArmor","ItemMarineHelmet","ItemMilk","ItemMiningBackPack","ItemMiningBelt","ItemMiningBeltMKII","ItemMiningCharge","ItemMiningDrill","ItemMiningDrillHeavy","ItemMiningDrillPneumatic","ItemMkIIToolbelt","ItemMuffin","ItemMushroom","ItemNVG","ItemNickelIngot","ItemNickelOre","ItemNitrice","ItemOxite","ItemPassiveVent","ItemPassiveVentInsulated","ItemPeaceLily","ItemPickaxe","ItemPillHeal","ItemPillStun","ItemPipeAnalyizer","ItemPipeCowl","ItemPipeDigitalValve","ItemPipeGasMixer","ItemPipeHeater","ItemPipeIgniter","ItemPipeLabel","ItemPipeLiquidRadiator","ItemPipeMeter","ItemPipeRadiator","ItemPipeValve","ItemPipeVolumePump","ItemPlainCake","ItemPlantEndothermic_Creative","ItemPlantEndothermic_Genepool1","ItemPlantEndothermic_Genepool2","ItemPlantSampler","ItemPlantSwitchGrass","ItemPlantThermogenic_Creative","ItemPlantThermogenic_Genepool1","ItemPlantThermogenic_Genepool2","ItemPlasticSheets","ItemPotato","ItemPotatoBaked","ItemPowerConnector","ItemPumpkin","ItemPumpkinPie","ItemPumpkinSoup","ItemPureIce","ItemPureIceCarbonDioxide","ItemPureIceHydrogen","ItemPureIceLiquidCarbonDioxide","ItemPureIceLiquidHydrogen","ItemPureIceLiquidNitrogen","ItemPureIceLiquidNitrous","ItemPureIceLiquidOxygen","ItemPureIceLiquidPollutant","ItemPureIceLiquidVolatiles","ItemPureIceNitrogen","ItemPureIceNitrous","ItemPureIceOxygen","ItemPureIcePollutant","ItemPureIcePollutedWater","ItemPureIceSteam","ItemPureIceVolatiles","ItemRTG","ItemRTGSurvival","ItemReagentMix","ItemRemoteDetonator","ItemReusableFireExtinguisher","ItemRice","ItemRoadFlare","ItemRocketMiningDrillHead","ItemRocketMiningDrillHeadDurable","ItemRocketMiningDrillHeadHighSpeedIce","ItemRocketMiningDrillHeadHighSpeedMineral","ItemRocketMiningDrillHeadIce","ItemRocketMiningDrillHeadLongTerm","ItemRocketMiningDrillHeadMineral","ItemRocketScanningHead","ItemScanner","ItemScrewdriver","ItemSecurityCamera","ItemSensorLenses","ItemSensorProcessingUnitCelestialScanner","ItemSensorProcessingUnitMesonScanner","ItemSensorProcessingUnitOreScanner","ItemSiliconIngot","ItemSiliconOre","ItemSilverIngot","ItemSilverOre","ItemSolderIngot","ItemSolidFuel","ItemSoundCartridgeBass","ItemSoundCartridgeDrums","ItemSoundCartridgeLeads","ItemSoundCartridgeSynth","ItemSoyOil","ItemSoybean","ItemSpaceCleaner","ItemSpaceHelmet","ItemSpaceIce","ItemSpaceOre","ItemSpacepack","ItemSprayCanBlack","ItemSprayCanBlue","ItemSprayCanBrown","ItemSprayCanGreen","ItemSprayCanGrey","ItemSprayCanKhaki","ItemSprayCanOrange","ItemSprayCanPink","ItemSprayCanPurple","ItemSprayCanRed","ItemSprayCanWhite","ItemSprayCanYellow","ItemSprayGun","ItemSteelFrames","ItemSteelIngot","ItemSteelSheets","ItemStelliteGlassSheets","ItemStelliteIngot","ItemSugar","ItemSugarCane","ItemSuitModCryogenicUpgrade","ItemTablet","ItemTerrainManipulator","ItemTomato","ItemTomatoSoup","ItemToolBelt","ItemTropicalPlant","ItemUraniumOre","ItemVolatiles","ItemWallCooler","ItemWallHeater","ItemWallLight","ItemWaspaloyIngot","ItemWaterBottle","ItemWaterPipeDigitalValve","ItemWaterPipeMeter","ItemWaterWallCooler","ItemWearLamp","ItemWeldingTorch","ItemWheat","ItemWireCutters","ItemWirelessBatteryCellExtraLarge","ItemWreckageAirConditioner1","ItemWreckageAirConditioner2","ItemWreckageHydroponicsTray1","ItemWreckageLargeExtendableRadiator01","ItemWreckageStructureRTG1","ItemWreckageStructureWeatherStation001","ItemWreckageStructureWeatherStation002","ItemWreckageStructureWeatherStation003","ItemWreckageStructureWeatherStation004","ItemWreckageStructureWeatherStation005","ItemWreckageStructureWeatherStation006","ItemWreckageStructureWeatherStation007","ItemWreckageStructureWeatherStation008","ItemWreckageTurbineGenerator1","ItemWreckageTurbineGenerator2","ItemWreckageTurbineGenerator3","ItemWreckageWallCooler1","ItemWreckageWallCooler2","ItemWrench","KitSDBSilo","KitStructureCombustionCentrifuge","Lander","Meteorite","MonsterEgg","MotherboardComms","MotherboardLogic","MotherboardMissionControl","MotherboardProgrammableChip","MotherboardRockets","MotherboardSorter","MothershipCore","NpcChick","NpcChicken","PipeBenderMod","PortableComposter","PortableSolarPanel","ReagentColorBlue","ReagentColorGreen","ReagentColorOrange","ReagentColorRed","ReagentColorYellow","Robot","RoverCargo","Rover_MkI","SMGMagazine","SeedBag_Cocoa","SeedBag_Corn","SeedBag_Fern","SeedBag_Mushroom","SeedBag_Potato","SeedBag_Pumpkin","SeedBag_Rice","SeedBag_Soybean","SeedBag_SugarCane","SeedBag_Switchgrass","SeedBag_Tomato","SeedBag_Wheet","SpaceShuttle","ToolPrinterMod","ToyLuna","UniformCommander","UniformMarine","UniformOrangeJumpSuit","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy","WeaponTorpedo"],"logicableItems":["Battery_Wireless_cell","Battery_Wireless_cell_Big","DynamicGPR","DynamicLight","ItemAdvancedTablet","ItemAngleGrinder","ItemArcWelder","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBeacon","ItemDrill","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyDrill","ItemEmergencySpaceHelmet","ItemFlashlight","ItemHardBackpack","ItemHardJetpack","ItemHardSuit","ItemHardsuitHelmet","ItemIntegratedCircuit10","ItemJetpackBasic","ItemLabeller","ItemLaptop","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIIDrill","ItemMKIIMiningDrill","ItemMiningBeltMKII","ItemMiningDrill","ItemMiningDrillHeavy","ItemMkIIToolbelt","ItemNVG","ItemPlantSampler","ItemRemoteDetonator","ItemSensorLenses","ItemSpaceHelmet","ItemSpacepack","ItemTablet","ItemTerrainManipulator","ItemWearLamp","ItemWirelessBatteryCellExtraLarge","PortableSolarPanel","Robot","RoverCargo","Rover_MkI","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy"]} \ No newline at end of file diff --git a/ic10emu/Cargo.toml b/ic10emu/Cargo.toml index a533408..bf79e9c 100644 --- a/ic10emu/Cargo.toml +++ b/ic10emu/Cargo.toml @@ -10,20 +10,21 @@ crate-type = ["lib", "cdylib"] [dependencies] +stationeers_data = { path = "../stationeers_data" } const-crc32 = "1.3.0" -itertools = "0.12.1" +itertools = "0.13.0" macro_rules_attribute = "0.2.0" -paste = "1.0.14" +paste = "1.0.15" phf = { version = "0.11.2", features = ["macros"] } rand = "0.8.5" -regex = "1.10.3" -serde = "1.0.201" -serde_derive = "1.0.201" -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", "serde", "local-offset", @@ -31,7 +32,7 @@ time = { version = "0.3.34", features = [ [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", diff --git a/ic10emu/src/grammar.rs b/ic10emu/src/grammar.rs index b2daa49..8c65f9a 100644 --- a/ic10emu/src/grammar.rs +++ b/ic10emu/src/grammar.rs @@ -2,66 +2,20 @@ use crate::{ errors::{ICError, ParseError}, interpreter, tokens::{SplitConsecutiveIndicesExt, SplitConsecutiveWithIndices}, - vm::{ - enums::{ - basic_enums::BasicEnum, - script_enums::{LogicBatchMethod, LogicReagentMode, LogicSlotType, LogicType}, - }, - instructions::{ - enums::InstructionOp, - operands::{Device, DeviceSpec, Identifier, Number, Operand, RegisterSpec}, - Instruction, CONSTANTS_LOOKUP, - }, + vm::instructions::{ + enums::InstructionOp, + operands::{Device, DeviceSpec, Identifier, Number, Operand, RegisterSpec}, + Instruction, CONSTANTS_LOOKUP, }, }; use itertools::Itertools; +use stationeers_data::enums::{ + basic_enums::BasicEnum, + script_enums::{LogicBatchMethod, LogicReagentMode, LogicSlotType, LogicType}, +}; use std::{fmt::Display, str::FromStr}; use strum::IntoEnumIterator; -impl TryFrom for LogicType { - type Error = ICError; - fn try_from(value: f64) -> Result>::Error> { - if let Some(lt) = LogicType::iter().find(|lt| *lt as u16 as f64 == value) { - Ok(lt) - } else { - Err(ICError::UnknownLogicType(value)) - } - } -} - -impl TryFrom for LogicSlotType { - type Error = ICError; - fn try_from(value: f64) -> Result>::Error> { - if let Some(slt) = LogicSlotType::iter().find(|lt| *lt as u8 as f64 == value) { - Ok(slt) - } else { - Err(ICError::UnknownLogicSlotType(value)) - } - } -} - -impl TryFrom for LogicBatchMethod { - type Error = ICError; - fn try_from(value: f64) -> Result>::Error> { - if let Some(bm) = LogicBatchMethod::iter().find(|lt| *lt as u8 as f64 == value) { - Ok(bm) - } else { - Err(ICError::UnknownBatchMode(value)) - } - } -} - -impl TryFrom for LogicReagentMode { - type Error = ICError; - fn try_from(value: f64) -> Result>::Error> { - if let Some(rm) = LogicReagentMode::iter().find(|lt| *lt as u8 as f64 == value) { - Ok(rm) - } else { - Err(ICError::UnknownReagentMode(value)) - } - } -} - pub fn parse(code: &str) -> Result, ParseError> { code.lines() .enumerate() diff --git a/ic10emu/src/interpreter/instructions.rs b/ic10emu/src/interpreter/instructions.rs index c583c53..b7b5369 100644 --- a/ic10emu/src/interpreter/instructions.rs +++ b/ic10emu/src/interpreter/instructions.rs @@ -2,7 +2,6 @@ use crate::{ errors::ICError, interpreter::{i64_to_f64, ICState}, vm::{ - enums::script_enums::LogicReagentMode, instructions::{ operands::{InstOperand, RegisterSpec}, traits::*, @@ -14,6 +13,7 @@ use crate::{ }, }, }; +use stationeers_data::enums::script_enums::LogicReagentMode; pub trait IC10Marker: IntegratedCircuit {} impl SleepInstruction for T { diff --git a/ic10emu/src/network.rs b/ic10emu/src/network.rs index f12059d..ebb5e70 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -51,61 +51,6 @@ pub enum Connection { None, } -#[derive( - Debug, - Default, - Clone, - Copy, - PartialEq, - PartialOrd, - Eq, - Ord, - Hash, - 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, - PartialOrd, - Eq, - Ord, - Hash, - Serialize, - Deserialize, - EnumIter, - AsRefStr, -)] -pub enum ConnectionRole { - Input, - Input2, - Output, - Output2, - Waste, - #[serde(other)] - #[default] - None, -} impl Connection { #[allow(dead_code)] diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index b5a2f63..ba2169b 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -1,15 +1,18 @@ -pub mod enums; pub mod instructions; pub mod object; use crate::{ errors::{ICError, TemplateError, VMError}, interpreter::ICState, - network::{CableConnectionType, CableNetwork, Connection, ConnectionRole, FrozenCableNetwork}, - vm::{ - enums::script_enums::{LogicBatchMethod, LogicSlotType, LogicType}, - object::{templates::ObjectTemplate, traits::ParentSlotInfo, ObjectID, VMObject}, + network::{CableConnectionType, CableNetwork, Connection, FrozenCableNetwork}, + vm::object::{traits::ParentSlotInfo, ObjectID, VMObject}, +}; +use stationeers_data::{ + enums::{ + script_enums::{LogicBatchMethod, LogicSlotType, LogicType}, + ConnectionRole, }, + templates::ObjectTemplate, }; use std::{ cell::RefCell, @@ -690,7 +693,7 @@ impl VM { }) .filter_ok(|val| !val.is_nan()) .collect::, ICError>>()?; - Ok(mode.apply(&samples)) + Ok(LogicBatchMethodWrapper(mode).apply(&samples)) } pub fn get_batch_name_device_field( @@ -713,7 +716,7 @@ impl VM { }) .filter_ok(|val| !val.is_nan()) .collect::, ICError>>()?; - Ok(mode.apply(&samples)) + Ok(LogicBatchMethodWrapper(mode).apply(&samples)) } pub fn get_batch_name_device_slot_field( @@ -737,7 +740,7 @@ impl VM { }) .filter_ok(|val| !val.is_nan()) .collect::, ICError>>()?; - Ok(mode.apply(&samples)) + Ok(LogicBatchMethodWrapper(mode).apply(&samples)) } pub fn get_batch_device_slot_field( @@ -760,7 +763,7 @@ impl VM { }) .filter_ok(|val| !val.is_nan()) .collect::, ICError>>()?; - Ok(mode.apply(&samples)) + Ok(LogicBatchMethodWrapper(mode).apply(&samples)) } pub fn remove_object(self: &Rc, id: ObjectID) -> Result<(), VMError> { @@ -771,7 +774,7 @@ impl VM { 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) { + if let Some(network) = self.networks.borrow().get(&net) { network .borrow_mut() .as_mut_network() @@ -1067,7 +1070,7 @@ impl VMTransaction { role: ConnectionRole::None, } = conn { - if let Some(net) = self.networks.get_mut(net_id) { + 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), @@ -1085,9 +1088,11 @@ impl VMTransaction { } } -impl LogicBatchMethod { +pub struct LogicBatchMethodWrapper(LogicBatchMethod); + +impl LogicBatchMethodWrapper { pub fn apply(&self, samples: &[f64]) -> f64 { - match self { + match self.0 { LogicBatchMethod::Sum => samples.iter().sum(), // Both c-charp and rust return NaN for 0.0/0.0 so we're good here LogicBatchMethod::Average => { diff --git a/ic10emu/src/vm/enums.rs b/ic10emu/src/vm/enums.rs deleted file mode 100644 index e408f98..0000000 --- a/ic10emu/src/vm/enums.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod basic_enums; -pub mod prefabs; -pub mod script_enums; diff --git a/ic10emu/src/vm/enums/prefabs.rs b/ic10emu/src/vm/enums/prefabs.rs deleted file mode 100644 index 89a4509..0000000 --- a/ic10emu/src/vm/enums/prefabs.rs +++ /dev/null @@ -1,10124 +0,0 @@ -// ================================================= -// !! <-----> DO NOT MODIFY <-----> !! -// -// This module was automatically generated by an -// xtask -// -// run `cargo xtask generate` from the workspace -// to regenerate -// -// ================================================= - -use serde_derive::{Deserialize, Serialize}; -use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; -#[derive( - Debug, - Display, - Clone, - Copy, - PartialEq, - Eq, - PartialOrd, - Ord, - Hash, - EnumString, - AsRefStr, - EnumProperty, - EnumIter, - FromRepr, - Serialize, - Deserialize, -)] -#[strum(use_phf)] -#[repr(i32)] -pub enum StationpediaPrefab { - #[strum( - serialize = "ItemKitGroundTelescope", - props(name = r#"Kit (Telescope)"#, desc = r#""#, value = "-2140672772") - )] - ItemKitGroundTelescope = -2140672772i32, - #[strum( - serialize = "StructureSmallSatelliteDish", - props( - name = r#"Small Satellite Dish"#, - desc = r#"This small communications unit can be used to communicate with nearby trade vessels. - - 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."#, - value = "-2138748650" - ) - )] - StructureSmallSatelliteDish = -2138748650i32, - #[strum( - serialize = "StructureStairwellBackRight", - props( - name = r#"Stairwell (Back Right)"#, - desc = r#""#, - value = "-2128896573" - ) - )] - StructureStairwellBackRight = -2128896573i32, - #[strum( - serialize = "StructureBench2", - props( - name = r#"Bench (High Tech Style)"#, - desc = r#""#, - value = "-2127086069" - ) - )] - StructureBench2 = -2127086069i32, - #[strum( - serialize = "ItemLiquidPipeValve", - props( - name = r#"Kit (Liquid Pipe Valve)"#, - desc = r#"This kit creates a Liquid Valve."#, - value = "-2126113312" - ) - )] - ItemLiquidPipeValve = -2126113312i32, - #[strum( - serialize = "ItemDisposableBatteryCharger", - props( - name = r#"Disposable Battery Charger"#, - desc = r#"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", - props( - name = r#"Auxiliary Rocket Battery "#, - desc = r#"0.Empty -1.Critical -2.VeryLow -3.Low -4.Medium -5.High -6.Full"#, - value = "-2123455080" - ) - )] - StructureBatterySmall = -2123455080i32, - #[strum( - serialize = "StructureLiquidPipeAnalyzer", - props(name = r#"Liquid Pipe Analyzer"#, desc = r#""#, value = "-2113838091") - )] - StructureLiquidPipeAnalyzer = -2113838091i32, - #[strum( - serialize = "ItemGasTankStorage", - props( - name = r#"Kit (Canister Storage)"#, - desc = r#"This kit produces a Kit (Canister Storage) for refilling a Canister."#, - value = "-2113012215" - ) - )] - ItemGasTankStorage = -2113012215i32, - #[strum( - serialize = "StructureFrameCorner", - props( - name = r#"Steel Frame (Corner)"#, - desc = r#"More durable than the Iron Frame, steel frames also offer several variations for more complex lattice constructions. -With 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", - props(name = r#"Baked Potato"#, desc = r#""#, value = "-2111886401") - )] - ItemPotatoBaked = -2111886401i32, - #[strum( - serialize = "ItemFlashingLight", - props(name = r#"Kit (Flashing Light)"#, desc = r#""#, value = "-2107840748") - )] - ItemFlashingLight = -2107840748i32, - #[strum( - serialize = "ItemLiquidPipeVolumePump", - props( - name = r#"Kit (Liquid Volume Pump)"#, - desc = r#""#, - value = "-2106280569" - ) - )] - ItemLiquidPipeVolumePump = -2106280569i32, - #[strum( - serialize = "StructureAirlock", - props( - name = r#"Airlock"#, - desc = r#"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", - props( - name = r#"Canned Condensed Milk"#, - desc = r#"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", - props( - name = r#"Kit (Hydraulic Pipe Bender)"#, - desc = r#""#, - value = "-2098556089" - ) - )] - ItemKitHydraulicPipeBender = -2098556089i32, - #[strum( - serialize = "ItemKitLogicMemory", - props(name = r#"Kit (Logic Memory)"#, desc = r#""#, value = "-2098214189") - )] - ItemKitLogicMemory = -2098214189i32, - #[strum( - serialize = "StructureInteriorDoorGlass", - props( - name = r#"Interior Door Glass"#, - desc = r#"0.Operate -1.Logic"#, - value = "-2096421875" - ) - )] - StructureInteriorDoorGlass = -2096421875i32, - #[strum( - serialize = "StructureAirConditioner", - props( - name = r#"Air Conditioner"#, - desc = r#"Built using the Kit (Atmospherics), the ExMin-designed air conditioner is used to raise or lower input gas temperature. - -The 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. - -Multiple 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. - -Pipe Convection Radiators may be useful in bringing extreme pipe temperatures back towards normal world temperatures. - -For more information on using the air conditioner, consult the temperature control Guides page."#, - value = "-2087593337" - ) - )] - StructureAirConditioner = -2087593337i32, - #[strum( - serialize = "StructureRocketMiner", - props( - name = r#"Rocket Miner"#, - desc = r#"Gathers available resources at the rocket's current space location."#, - value = "-2087223687" - ) - )] - StructureRocketMiner = -2087223687i32, - #[strum( - serialize = "DynamicGPR", - props( - name = r#""#, - desc = r#""#, - value = "-2085885850" - ) - )] - DynamicGpr = -2085885850i32, - #[strum( - serialize = "UniformCommander", - props(name = r#"Uniform Commander"#, desc = r#""#, value = "-2083426457") - )] - UniformCommander = -2083426457i32, - #[strum( - serialize = "StructureWindTurbine", - props( - name = r#"Wind Turbine"#, - desc = r#"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. -While 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 = "StructureInsulatedPipeTJunction", - props( - name = r#"Insulated Pipe (T Junction)"#, - desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, - value = "-2076086215" - ) - )] - StructureInsulatedPipeTJunction = -2076086215i32, - #[strum( - serialize = "ItemPureIcePollutedWater", - props( - name = r#"Pure Ice Polluted Water"#, - desc = r#"A frozen chunk of Polluted Water"#, - value = "-2073202179" - ) - )] - ItemPureIcePollutedWater = -2073202179i32, - #[strum( - serialize = "RailingIndustrial02", - props( - name = r#"Railing Industrial (Type 2)"#, - desc = r#""#, - value = "-2072792175" - ) - )] - RailingIndustrial02 = -2072792175i32, - #[strum( - serialize = "StructurePipeInsulatedLiquidCrossJunction", - props( - name = r#"Insulated Liquid Pipe (Cross Junction)"#, - desc = r#"Liquid piping with very low temperature loss or gain."#, - value = "-2068497073" - ) - )] - StructurePipeInsulatedLiquidCrossJunction = -2068497073i32, - #[strum( - serialize = "ItemWeldingTorch", - props( - name = r#"Welding Torch"#, - desc = r#"Stored in the standard issue Stationeers Tool Belt, the Arlite welding torch is used to construct a range of essential structures. -An 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", - props( - name = r#"Picture Frame Thick Mount Portrait Small"#, - desc = r#""#, - value = "-2066653089" - ) - )] - StructurePictureFrameThickMountPortraitSmall = -2066653089i32, - #[strum( - serialize = "Landingpad_DataConnectionPiece", - props( - name = r#"Landingpad Data And Power"#, - desc = r#"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", - props(name = r#"Kit Picture Frame"#, desc = r#""#, value = "-2062364768") - )] - ItemKitPictureFrame = -2062364768i32, - #[strum( - serialize = "ItemMKIIArcWelder", - props(name = r#"Mk II Arc Welder"#, desc = r#""#, value = "-2061979347") - )] - ItemMkiiArcWelder = -2061979347i32, - #[strum( - serialize = "StructureCompositeWindow", - props( - name = r#"Composite Window"#, - desc = r#"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", - props(name = r#"Emergency Drill"#, desc = r#""#, value = "-2052458905") - )] - ItemEmergencyDrill = -2052458905i32, - #[strum( - serialize = "Rover_MkI", - props( - name = r#"Rover MkI"#, - desc = r#"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). -A 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", - props( - name = r#"Solar Panel"#, - desc = r#"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", - props( - name = r#"Ship Display"#, - desc = r#"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", - props( - name = r#"Powered Bench"#, - desc = r#"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", - props( - name = r#"Picture Frame Thick Landscape Small"#, - desc = r#""#, - value = "-2041566697" - ) - )] - StructurePictureFrameThickLandscapeSmall = -2041566697i32, - #[strum( - serialize = "ItemKitLargeSatelliteDish", - props( - name = r#"Kit (Large Satellite Dish)"#, - desc = r#""#, - value = "-2039971217" - ) - )] - ItemKitLargeSatelliteDish = -2039971217i32, - #[strum( - serialize = "ItemKitMusicMachines", - props(name = r#"Kit (Music Machines)"#, desc = r#""#, value = "-2038889137") - )] - ItemKitMusicMachines = -2038889137i32, - #[strum( - serialize = "ItemStelliteGlassSheets", - props( - name = r#"Stellite Glass Sheets"#, - desc = r#"A stronger glass substitute."#, - value = "-2038663432" - ) - )] - ItemStelliteGlassSheets = -2038663432i32, - #[strum( - serialize = "ItemKitVendingMachine", - props(name = r#"Kit (Vending Machine)"#, desc = r#""#, value = "-2038384332") - )] - ItemKitVendingMachine = -2038384332i32, - #[strum( - serialize = "StructurePumpedLiquidEngine", - props( - name = r#"Pumped Liquid Engine"#, - desc = r#"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", - props( - name = r#"Picture Frame Thin Landscape Small"#, - desc = r#""#, - value = "-2024250974" - ) - )] - StructurePictureFrameThinLandscapeSmall = -2024250974i32, - #[strum( - serialize = "StructureStacker", - props( - name = r#"Stacker"#, - desc = r#"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 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", - props( - name = r#"Mk II Screwdriver"#, - desc = r#"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", - props(name = r#"Trigger Plate (Large)"#, desc = r#""#, value = "-2008706143") - )] - StructurePressurePlateLarge = -2008706143i32, - #[strum( - serialize = "StructurePipeLiquidCrossJunction5", - props( - name = r#"Liquid Pipe (5-Way Junction)"#, - desc = r#"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", - props( - name = r#"Filter (Water)"#, - desc = r#"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", - props( - name = r#"Space Shuttle"#, - desc = r#"An antiquated Sinotai transport craft, long since decommissioned."#, - value = "-1991297271" - ) - )] - SpaceShuttle = -1991297271i32, - #[strum( - serialize = "SeedBag_Fern", - props( - name = r#"Fern Seeds"#, - desc = r#"Grow a Fern."#, - value = "-1990600883" - ) - )] - SeedBagFern = -1990600883i32, - #[strum( - serialize = "ItemSecurityCamera", - props( - name = r#"Security Camera"#, - desc = r#"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", - props(name = r#"Cardboard Box"#, desc = r#""#, value = "-1976947556") - )] - CardboardBox = -1976947556i32, - #[strum( - serialize = "ItemSoundCartridgeSynth", - props(name = r#"Sound Cartridge Synth"#, desc = r#""#, value = "-1971419310") - )] - ItemSoundCartridgeSynth = -1971419310i32, - #[strum( - serialize = "StructureCornerLocker", - props(name = r#"Corner Locker"#, desc = r#""#, value = "-1968255729") - )] - StructureCornerLocker = -1968255729i32, - #[strum( - serialize = "StructureInsulatedPipeCorner", - props( - name = r#"Insulated Pipe (Corner)"#, - desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, - value = "-1967711059" - ) - )] - StructureInsulatedPipeCorner = -1967711059i32, - #[strum( - serialize = "StructureWallArchCornerSquare", - props( - name = r#"Wall (Arch Corner Square)"#, - desc = r#""#, - value = "-1963016580" - ) - )] - StructureWallArchCornerSquare = -1963016580i32, - #[strum( - serialize = "StructureControlChair", - props( - name = r#"Control Chair"#, - desc = r#"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", - props( - name = r#"Portable Composter"#, - desc = r#"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. -When processing, it releases nitrogen and volatiles, as well a small amount of heat. - -Compost composition -Fertilizer 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. - -- food increases PLANT YIELD up to two times -- Decayed Food increases plant GROWTH SPEED up to two times -- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for"#, - value = "-1958705204" - ) - )] - PortableComposter = -1958705204i32, - #[strum( - serialize = "CartridgeGPS", - props(name = r#"GPS"#, desc = r#""#, value = "-1957063345") - )] - CartridgeGps = -1957063345i32, - #[strum( - serialize = "StructureConsoleLED1x3", - props( - name = r#"LED Display (Large)"#, - desc = r#"0.Default -1.Percent -2.Power"#, - value = "-1949054743" - ) - )] - StructureConsoleLed1X3 = -1949054743i32, - #[strum( - serialize = "ItemDuctTape", - props( - name = r#"Duct Tape"#, - desc = r#"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. -To 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", - props( - name = r#"Portable Liquid Tank"#, - desc = r#"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", - props(name = r#"Kit (Deep Miner)"#, desc = r#""#, value = "-1935075707") - )] - ItemKitDeepMiner = -1935075707i32, - #[strum( - serialize = "ItemKitAutomatedOven", - props(name = r#"Kit (Automated Oven)"#, desc = r#""#, value = "-1931958659") - )] - ItemKitAutomatedOven = -1931958659i32, - #[strum( - serialize = "MothershipCore", - props( - name = r#"Mothership Core"#, - desc = r#"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", - props(name = r#"Kit (Solar Panel)"#, desc = r#""#, value = "-1924492105") - )] - ItemKitSolarPanel = -1924492105i32, - #[strum( - serialize = "CircuitboardPowerControl", - props( - name = r#"Power Control"#, - desc = r#"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. - -The 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", - props( - name = r#"Tomato Seeds"#, - desc = r#"Grow a Tomato."#, - value = "-1922066841" - ) - )] - SeedBagTomato = -1922066841i32, - #[strum( - serialize = "StructureChuteUmbilicalFemale", - props( - name = r#"Umbilical Socket (Chute)"#, - desc = r#""#, - value = "-1918892177" - ) - )] - StructureChuteUmbilicalFemale = -1918892177i32, - #[strum( - serialize = "StructureMediumConvectionRadiator", - props( - name = r#"Medium Convection Radiator"#, - desc = r#"A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere."#, - value = "-1918215845" - ) - )] - StructureMediumConvectionRadiator = -1918215845i32, - #[strum( - serialize = "ItemGasFilterVolatilesInfinite", - props( - name = r#"Catalytic Filter (Volatiles)"#, - desc = r#"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", - props( - name = r#"Sorter Motherboard"#, - desc = r#"Motherboards are connected to Computers to perform various technical functions. -The 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", - props(name = r#"Sound Cartridge Drums"#, desc = r#""#, value = "-1901500508") - )] - ItemSoundCartridgeDrums = -1901500508i32, - #[strum( - serialize = "StructureFairingTypeA3", - props(name = r#"Fairing (Type A3)"#, desc = r#""#, value = "-1900541738") - )] - StructureFairingTypeA3 = -1900541738i32, - #[strum( - serialize = "RailingElegant02", - props( - name = r#"Railing Elegant (Type 2)"#, - desc = r#""#, - value = "-1898247915" - ) - )] - RailingElegant02 = -1898247915i32, - #[strum( - serialize = "ItemStelliteIngot", - props(name = r#"Ingot (Stellite)"#, desc = r#""#, value = "-1897868623") - )] - ItemStelliteIngot = -1897868623i32, - #[strum( - serialize = "StructureSmallTableBacklessSingle", - props( - name = r#"Small (Table Backless Single)"#, - desc = r#""#, - value = "-1897221677" - ) - )] - StructureSmallTableBacklessSingle = -1897221677i32, - #[strum( - serialize = "StructureHydraulicPipeBender", - props( - name = r#"Hydraulic Pipe Bender"#, - desc = r#"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", - props( - name = r#"Wrench"#, - desc = r#"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", - props(name = r#"Sugarcane Seeds"#, desc = r#""#, value = "-1884103228") - )] - SeedBagSugarCane = -1884103228i32, - #[strum( - serialize = "ItemSoundCartridgeBass", - props(name = r#"Sound Cartridge Bass"#, desc = r#""#, value = "-1883441704") - )] - ItemSoundCartridgeBass = -1883441704i32, - #[strum( - serialize = "ItemSprayCanGreen", - props( - name = r#"Spray Paint (Green)"#, - desc = r#"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", - props( - name = r#"Pipe (5-Way Junction)"#, - desc = r#"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", - props(name = r#"SDB Hopper"#, desc = r#""#, value = "-1875856925") - )] - StructureSdbHopper = -1875856925i32, - #[strum( - serialize = "ItemMKIIMiningDrill", - props( - name = r#"Mk II Mining Drill"#, - desc = r#"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", - props( - name = r#"Landingpad Taxi Corner"#, - desc = r#""#, - value = "-1872345847" - ) - )] - LandingpadTaxiPieceCorner = -1872345847i32, - #[strum( - serialize = "ItemKitStairwell", - props(name = r#"Kit (Stairwell)"#, desc = r#""#, value = "-1868555784") - )] - ItemKitStairwell = -1868555784i32, - #[strum( - serialize = "ItemKitVendingMachineRefrigerated", - props( - name = r#"Kit (Vending Machine Refrigerated)"#, - desc = r#""#, - value = "-1867508561" - ) - )] - ItemKitVendingMachineRefrigerated = -1867508561i32, - #[strum( - serialize = "ItemKitGasUmbilical", - props(name = r#"Kit (Gas Umbilical)"#, desc = r#""#, value = "-1867280568") - )] - ItemKitGasUmbilical = -1867280568i32, - #[strum( - serialize = "ItemBatteryCharger", - props( - name = r#"Kit (Battery Charger)"#, - desc = r#"This kit produces a 5-slot Kit (Battery Charger)."#, - value = "-1866880307" - ) - )] - ItemBatteryCharger = -1866880307i32, - #[strum( - serialize = "ItemMuffin", - props( - name = r#"Muffin"#, - desc = r#"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", - props( - name = r#"Kit (Portable Hydroponics)"#, - desc = r#""#, - value = "-1861154222" - ) - )] - ItemKitDynamicHydroponics = -1861154222i32, - #[strum( - serialize = "StructureWallLight", - props(name = r#"Wall Light"#, desc = r#""#, value = "-1860064656") - )] - StructureWallLight = -1860064656i32, - #[strum( - serialize = "StructurePipeLiquidCorner", - props( - name = r#"Liquid Pipe (Corner)"#, - desc = r#"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", - props( - name = r#"Liquid Canister (Water)"#, - desc = r#""#, - value = "-1854861891" - ) - )] - ItemGasCanisterWater = -1854861891i32, - #[strum( - serialize = "ItemKitLaunchMount", - props(name = r#"Kit (Launch Mount)"#, desc = r#""#, value = "-1854167549") - )] - ItemKitLaunchMount = -1854167549i32, - #[strum( - serialize = "DeviceLfoVolume", - props( - name = r#"Low frequency oscillator"#, - desc = r#"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. - -To set up an LFO: - -1. Place the LFO unit -2. Set the LFO output to a Passive Speaker -2. Set a sequencers' output to LFO - so the sequencer's signal runs through the LFO to a speaker. -3. Place a Stop Watch or use an existing one, then use a Logic Writer to write it to the LFO. -4. Use another logic writer to write the BPM to the LFO. -5. You are ready. This is the future. You're in space. Make it sound cool. - -For more info, check out the music page."#, - value = "-1844430312" - ) - )] - DeviceLfoVolume = -1844430312i32, - #[strum( - serialize = "StructureCableCornerH3", - props( - name = r#"Heavy Cable (3-Way Corner)"#, - desc = r#""#, - value = "-1843379322" - ) - )] - StructureCableCornerH3 = -1843379322i32, - #[strum( - serialize = "StructureCompositeCladdingAngledCornerInner", - props( - name = r#"Composite Cladding (Angled Corner Inner)"#, - desc = r#""#, - value = "-1841871763" - ) - )] - StructureCompositeCladdingAngledCornerInner = -1841871763i32, - #[strum( - serialize = "StructureHydroponicsTrayData", - props( - name = r#"Hydroponics Device"#, - desc = r#"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. -It 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", - props( - name = r#"Kit (Insulated Pipe Utility Liquid)"#, - desc = r#""#, - value = "-1831558953" - ) - )] - ItemKitInsulatedPipeUtilityLiquid = -1831558953i32, - #[strum( - serialize = "ItemKitWall", - props(name = r#"Kit (Wall)"#, desc = r#""#, value = "-1826855889") - )] - ItemKitWall = -1826855889i32, - #[strum( - serialize = "ItemWreckageAirConditioner1", - props( - name = r#"Wreckage Air Conditioner"#, - desc = r#""#, - value = "-1826023284" - ) - )] - ItemWreckageAirConditioner1 = -1826023284i32, - #[strum( - serialize = "ItemKitStirlingEngine", - props(name = r#"Kit (Stirling Engine)"#, desc = r#""#, value = "-1821571150") - )] - ItemKitStirlingEngine = -1821571150i32, - #[strum( - serialize = "StructureGasUmbilicalMale", - props( - name = r#"Umbilical (Gas)"#, - desc = r#"0.Left -1.Center -2.Right"#, - value = "-1814939203" - ) - )] - StructureGasUmbilicalMale = -1814939203i32, - #[strum( - serialize = "StructureSleeperRight", - props( - name = r#"Sleeper Right"#, - desc = r#"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", - props( - name = r#"Manual Hatch"#, - desc = r#"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", - props( - name = r#"Ice (Oxite)"#, - desc = r#"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. - -Highly 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", - props( - name = r#"Kit (Turbo Volume Pump - Liquid)"#, - desc = r#""#, - value = "-1805020897" - ) - )] - ItemKitLiquidTurboVolumePump = -1805020897i32, - #[strum( - serialize = "StructureLiquidUmbilicalMale", - props( - name = r#"Umbilical (Liquid)"#, - desc = r#"0.Left -1.Center -2.Right"#, - value = "-1798420047" - ) - )] - StructureLiquidUmbilicalMale = -1798420047i32, - #[strum( - serialize = "StructurePipeMeter", - props( - name = r#"Pipe Meter"#, - desc = r#"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: -"Humble pipe meter -speaks the truth, transmits pressure -within any pipe""#, - value = "-1798362329" - ) - )] - StructurePipeMeter = -1798362329i32, - #[strum( - serialize = "ItemKitUprightWindTurbine", - props( - name = r#"Kit (Upright Wind Turbine)"#, - desc = r#""#, - value = "-1798044015" - ) - )] - ItemKitUprightWindTurbine = -1798044015i32, - #[strum( - serialize = "ItemPipeRadiator", - props( - name = r#"Kit (Radiator)"#, - desc = r#"This kit creates a Pipe Convection Radiator."#, - value = "-1796655088" - ) - )] - ItemPipeRadiator = -1796655088i32, - #[strum( - serialize = "StructureOverheadShortCornerLocker", - props( - name = r#"Overhead Corner Locker"#, - desc = r#""#, - value = "-1794932560" - ) - )] - StructureOverheadShortCornerLocker = -1794932560i32, - #[strum( - serialize = "ItemCableAnalyser", - props(name = r#"Kit (Cable Analyzer)"#, desc = r#""#, value = "-1792787349") - )] - ItemCableAnalyser = -1792787349i32, - #[strum( - serialize = "Landingpad_LiquidConnectorOutwardPiece", - props( - name = r#"Landingpad Liquid Output"#, - desc = r#"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 = "StructurePipeCorner", - props( - name = r#"Pipe (Corner)"#, - desc = r#"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", - props(name = r#"Kit (Sensors)"#, desc = r#""#, value = "-1776897113") - )] - ItemKitSensor = -1776897113i32, - #[strum( - serialize = "ItemReusableFireExtinguisher", - props( - name = r#"Fire Extinguisher (Reusable)"#, - desc = r#"Requires a canister filled with any inert liquid to opperate."#, - value = "-1773192190" - ) - )] - ItemReusableFireExtinguisher = -1773192190i32, - #[strum( - serialize = "CartridgeOreScanner", - props( - name = r#"Ore Scanner"#, - desc = r#"When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet."#, - value = "-1768732546" - ) - )] - CartridgeOreScanner = -1768732546i32, - #[strum( - serialize = "ItemPipeVolumePump", - props( - name = r#"Kit (Volume Pump)"#, - desc = r#"This kit creates a Volume Pump."#, - value = "-1766301997" - ) - )] - ItemPipeVolumePump = -1766301997i32, - #[strum( - serialize = "StructureGrowLight", - props( - name = r#"Grow Light"#, - desc = r#"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", - props( - name = r#"Hardsuit"#, - desc = r#"Connects to Logic Transmitter"#, - value = "-1758310454" - ) - )] - ItemHardSuit = -1758310454i32, - #[strum( - serialize = "StructureRailing", - props( - name = r#"Railing Industrial (Type 1)"#, - desc = r#""Safety third.""#, - value = "-1756913871" - ) - )] - StructureRailing = -1756913871i32, - #[strum( - serialize = "StructureCableJunction4Burnt", - props( - name = r#"Burnt Cable (4-Way Junction)"#, - desc = r#""#, - value = "-1756896811" - ) - )] - StructureCableJunction4Burnt = -1756896811i32, - #[strum( - serialize = "ItemCreditCard", - props(name = r#"Credit Card"#, desc = r#""#, value = "-1756772618") - )] - ItemCreditCard = -1756772618i32, - #[strum( - serialize = "ItemKitBlastDoor", - props(name = r#"Kit (Blast Door)"#, desc = r#""#, value = "-1755116240") - )] - ItemKitBlastDoor = -1755116240i32, - #[strum( - serialize = "ItemKitAutolathe", - props(name = r#"Kit (Autolathe)"#, desc = r#""#, value = "-1753893214") - )] - ItemKitAutolathe = -1753893214i32, - #[strum( - serialize = "ItemKitPassiveLargeRadiatorGas", - props(name = r#"Kit (Medium Radiator)"#, desc = r#""#, value = "-1752768283") - )] - ItemKitPassiveLargeRadiatorGas = -1752768283i32, - #[strum( - serialize = "StructurePictureFrameThinMountLandscapeSmall", - props( - name = r#"Picture Frame Thin Landscape Small"#, - desc = r#""#, - value = "-1752493889" - ) - )] - StructurePictureFrameThinMountLandscapeSmall = -1752493889i32, - #[strum( - serialize = "ItemPipeHeater", - props( - name = r#"Pipe Heater Kit (Gas)"#, - desc = r#"Creates a Pipe Heater (Gas)."#, - value = "-1751627006" - ) - )] - ItemPipeHeater = -1751627006i32, - #[strum( - serialize = "ItemPureIceLiquidPollutant", - props( - name = r#"Pure Ice Liquid Pollutant"#, - desc = r#"A frozen chunk of pure Liquid Pollutant"#, - value = "-1748926678" - ) - )] - ItemPureIceLiquidPollutant = -1748926678i32, - #[strum( - serialize = "ItemKitDrinkingFountain", - props( - name = r#"Kit (Drinking Fountain)"#, - desc = r#""#, - value = "-1743663875" - ) - )] - ItemKitDrinkingFountain = -1743663875i32, - #[strum( - serialize = "DynamicGasCanisterEmpty", - props( - name = r#"Portable Gas Tank"#, - desc = r#"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", - props( - name = r#"Space Cleaner"#, - desc = r#"There was a time when humanity really wanted to keep space clean. That time has passed."#, - value = "-1737666461" - ) - )] - ItemSpaceCleaner = -1737666461i32, - #[strum( - serialize = "ItemAuthoringToolRocketNetwork", - props( - name = r#""#, - desc = r#""#, - value = "-1731627004" - ) - )] - ItemAuthoringToolRocketNetwork = -1731627004i32, - #[strum( - serialize = "ItemSensorProcessingUnitMesonScanner", - props( - name = r#"Sensor Processing Unit (T-Ray Scanner)"#, - desc = r#"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", - props( - name = r#"Kit (Liquid Wall Cooler)"#, - desc = r#""#, - value = "-1721846327" - ) - )] - ItemWaterWallCooler = -1721846327i32, - #[strum( - serialize = "ItemPureIceLiquidCarbonDioxide", - props( - name = r#"Pure Ice Liquid Carbon Dioxide"#, - desc = r#"A frozen chunk of pure Liquid Carbon Dioxide"#, - value = "-1715945725" - ) - )] - ItemPureIceLiquidCarbonDioxide = -1715945725i32, - #[strum( - serialize = "AccessCardRed", - props(name = r#"Access Card (Red)"#, desc = r#""#, value = "-1713748313") - )] - AccessCardRed = -1713748313i32, - #[strum( - serialize = "DynamicGasCanisterAir", - props( - name = r#"Portable Gas Tank (Air)"#, - desc = r#"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", - props( - name = r#"Motion Sensor"#, - desc = r#"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. -The sensor activates whenever a player enters the grid it is placed on."#, - value = "-1713470563" - ) - )] - StructureMotionSensor = -1713470563i32, - #[strum( - serialize = "ItemCookedPowderedEggs", - props( - name = r#"Powdered Eggs"#, - desc = r#"A high-nutrient cooked food, which can be canned."#, - value = "-1712264413" - ) - )] - ItemCookedPowderedEggs = -1712264413i32, - #[strum( - serialize = "ItemGasCanisterNitrousOxide", - props( - name = r#"Gas Canister (Sleeping)"#, - desc = r#""#, - value = "-1712153401" - ) - )] - ItemGasCanisterNitrousOxide = -1712153401i32, - #[strum( - serialize = "ItemKitHeatExchanger", - props(name = r#"Kit Heat Exchanger"#, desc = r#""#, value = "-1710540039") - )] - ItemKitHeatExchanger = -1710540039i32, - #[strum( - serialize = "ItemPureIceNitrogen", - props( - name = r#"Pure Ice Nitrogen"#, - desc = r#"A frozen chunk of pure Nitrogen"#, - value = "-1708395413" - ) - )] - ItemPureIceNitrogen = -1708395413i32, - #[strum( - serialize = "ItemKitPipeRadiatorLiquid", - props( - name = r#"Kit (Pipe Radiator Liquid)"#, - desc = r#""#, - value = "-1697302609" - ) - )] - ItemKitPipeRadiatorLiquid = -1697302609i32, - #[strum( - serialize = "StructureInLineTankGas1x1", - props( - name = r#"In-Line Tank Small Gas"#, - desc = r#"A small expansion tank that increases the volume of a pipe network."#, - value = "-1693382705" - ) - )] - StructureInLineTankGas1X1 = -1693382705i32, - #[strum( - serialize = "SeedBag_Rice", - props( - name = r#"Rice Seeds"#, - desc = r#"Grow some Rice."#, - value = "-1691151239" - ) - )] - SeedBagRice = -1691151239i32, - #[strum( - serialize = "StructurePictureFrameThickPortraitLarge", - props( - name = r#"Picture Frame Thick Portrait Large"#, - desc = r#""#, - value = "-1686949570" - ) - )] - StructurePictureFrameThickPortraitLarge = -1686949570i32, - #[strum( - serialize = "ApplianceDeskLampLeft", - props( - name = r#"Appliance Desk Lamp Left"#, - desc = r#""#, - value = "-1683849799" - ) - )] - ApplianceDeskLampLeft = -1683849799i32, - #[strum( - serialize = "ItemWreckageWallCooler1", - props(name = r#"Wreckage Wall Cooler"#, desc = r#""#, value = "-1682930158") - )] - ItemWreckageWallCooler1 = -1682930158i32, - #[strum( - serialize = "StructureGasUmbilicalFemale", - props( - name = r#"Umbilical Socket (Gas)"#, - desc = r#""#, - value = "-1680477930" - ) - )] - StructureGasUmbilicalFemale = -1680477930i32, - #[strum( - serialize = "ItemGasFilterWaterInfinite", - props( - name = r#"Catalytic Filter (Water)"#, - desc = r#"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", - props( - name = r#"CounterFlow Heat Exchanger - Gas + Gas"#, - desc = r#"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. - Balancing the throughput of both inputs is key to creating a good exhange of temperatures."#, - value = "-1674187440" - ) - )] - StructurePassthroughHeatExchangerGasToGas = -1674187440i32, - #[strum( - serialize = "StructureAutomatedOven", - props(name = r#"Automated Oven"#, desc = r#""#, value = "-1672404896") - )] - StructureAutomatedOven = -1672404896i32, - #[strum( - serialize = "StructureElectrolyzer", - props( - name = r#"Electrolyzer"#, - desc = r#"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", - props( - name = r#""#, - desc = r#""#, - value = "-1667675295" - ) - )] - MonsterEgg = -1667675295i32, - #[strum( - serialize = "ItemMiningDrillHeavy", - props( - name = r#"Mining Drill (Heavy)"#, - desc = r#"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", - props(name = r#"Astroloy Sheets"#, desc = r#""#, value = "-1662476145") - )] - ItemAstroloySheets = -1662476145i32, - #[strum( - serialize = "ItemWreckageTurbineGenerator1", - props( - name = r#"Wreckage Turbine Generator"#, - desc = r#""#, - value = "-1662394403" - ) - )] - ItemWreckageTurbineGenerator1 = -1662394403i32, - #[strum( - serialize = "ItemMiningBackPack", - props(name = r#"Mining Backpack"#, desc = r#""#, value = "-1650383245") - )] - ItemMiningBackPack = -1650383245i32, - #[strum( - serialize = "ItemSprayCanGrey", - props( - name = r#"Spray Paint (Grey)"#, - desc = r#"Arguably the most popular color in the universe, grey was invented so designers had something to do."#, - value = "-1645266981" - ) - )] - ItemSprayCanGrey = -1645266981i32, - #[strum( - serialize = "ItemReagentMix", - props( - name = r#"Reagent Mix"#, - desc = r#"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", - props( - name = r#"Cartridge (Access Controller)"#, - desc = r#""#, - value = "-1634532552" - ) - )] - CartridgeAccessController = -1634532552i32, - #[strum( - serialize = "StructureRecycler", - props( - name = r#"Recycler"#, - desc = r#"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", - props( - name = r#"Small (Table Backless Double)"#, - desc = r#""#, - value = "-1633000411" - ) - )] - StructureSmallTableBacklessDouble = -1633000411i32, - #[strum( - serialize = "ItemKitRocketGasFuelTank", - props( - name = r#"Kit (Rocket Gas Fuel Tank)"#, - desc = r#""#, - value = "-1629347579" - ) - )] - ItemKitRocketGasFuelTank = -1629347579i32, - #[strum( - serialize = "StructureStairwellFrontPassthrough", - props( - name = r#"Stairwell (Front Passthrough)"#, - desc = r#""#, - value = "-1625452928" - ) - )] - StructureStairwellFrontPassthrough = -1625452928i32, - #[strum( - serialize = "StructureCableJunctionBurnt", - props( - name = r#"Burnt Cable (Junction)"#, - desc = r#""#, - value = "-1620686196" - ) - )] - StructureCableJunctionBurnt = -1620686196i32, - #[strum( - serialize = "ItemKitPipe", - props(name = r#"Kit (Pipe)"#, desc = r#""#, value = "-1619793705") - )] - ItemKitPipe = -1619793705i32, - #[strum( - serialize = "ItemPureIce", - props( - name = r#"Pure Ice Water"#, - desc = r#"A frozen chunk of pure Water"#, - value = "-1616308158" - ) - )] - ItemPureIce = -1616308158i32, - #[strum( - serialize = "StructureBasketHoop", - props(name = r#"Basket Hoop"#, desc = r#""#, value = "-1613497288") - )] - StructureBasketHoop = -1613497288i32, - #[strum( - serialize = "StructureWallPaddedThinNoBorder", - props( - name = r#"Wall (Padded Thin No Border)"#, - desc = r#""#, - value = "-1611559100" - ) - )] - StructureWallPaddedThinNoBorder = -1611559100i32, - #[strum( - serialize = "StructureTankBig", - props(name = r#"Large Tank"#, desc = r#""#, value = "-1606848156") - )] - StructureTankBig = -1606848156i32, - #[strum( - serialize = "StructureInsulatedTankConnectorLiquid", - props( - name = r#"Insulated Tank Connector Liquid"#, - desc = r#""#, - value = "-1602030414" - ) - )] - StructureInsulatedTankConnectorLiquid = -1602030414i32, - #[strum( - serialize = "ItemKitTurbineGenerator", - props( - name = r#"Kit (Turbine Generator)"#, - desc = r#""#, - value = "-1590715731" - ) - )] - ItemKitTurbineGenerator = -1590715731i32, - #[strum( - serialize = "ItemKitCrateMkII", - props(name = r#"Kit (Crate Mk II)"#, desc = r#""#, value = "-1585956426") - )] - ItemKitCrateMkIi = -1585956426i32, - #[strum( - serialize = "StructureRefrigeratedVendingMachine", - props( - name = r#"Refrigerated Vending Machine"#, - desc = r#"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. -The 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. -NOTE: altering stack sizes DOES NOT update existing stacks within the machine, only those subsequently added. "#, - value = "-1577831321" - ) - )] - StructureRefrigeratedVendingMachine = -1577831321i32, - #[strum( - serialize = "ItemFlowerBlue", - props(name = r#"Flower (Blue)"#, desc = r#""#, value = "-1573623434") - )] - ItemFlowerBlue = -1573623434i32, - #[strum( - serialize = "ItemWallCooler", - props( - name = r#"Kit (Wall Cooler)"#, - desc = r#"This kit creates a Wall Cooler."#, - value = "-1567752627" - ) - )] - ItemWallCooler = -1567752627i32, - #[strum( - serialize = "StructureSolarPanel45", - props( - name = r#"Solar Panel (Angled)"#, - desc = r#"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", - props(name = r#"Canister (Pollutants)"#, desc = r#""#, value = "-1552586384") - )] - ItemGasCanisterPollutants = -1552586384i32, - #[strum( - serialize = "CartridgeAtmosAnalyser", - props( - name = r#"Atmos Analyzer"#, - desc = r#"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", - props( - name = r#"Wall (Padded Arch Lights Fittings)"#, - desc = r#""#, - value = "-1546743960" - ) - )] - StructureWallPaddedArchLightsFittings = -1546743960i32, - #[strum( - serialize = "StructureSolarPanelDualReinforced", - props( - name = r#"Solar Panel (Heavy Dual)"#, - desc = r#"This solar panel is resistant to storm damage."#, - value = "-1545574413" - ) - )] - StructureSolarPanelDualReinforced = -1545574413i32, - #[strum( - serialize = "StructureCableCorner4", - props(name = r#"Cable (4-Way Corner)"#, desc = r#""#, value = "-1542172466") - )] - StructureCableCorner4 = -1542172466i32, - #[strum( - serialize = "StructurePressurePlateSmall", - props(name = r#"Trigger Plate (Small)"#, desc = r#""#, value = "-1536471028") - )] - StructurePressurePlateSmall = -1536471028i32, - #[strum( - serialize = "StructureFlashingLight", - props( - name = r#"Flashing Light"#, - desc = r#"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", - props(name = r#"Fuselage (Type A2)"#, desc = r#""#, value = "-1533287054") - )] - StructureFuselageTypeA2 = -1533287054i32, - #[strum( - serialize = "ItemPipeDigitalValve", - props( - name = r#"Kit (Digital Valve)"#, - desc = r#"This kit creates a Digital Valve."#, - value = "-1532448832" - ) - )] - ItemPipeDigitalValve = -1532448832i32, - #[strum( - serialize = "StructureCableJunctionH5", - props( - name = r#"Heavy Cable (5-Way Junction)"#, - desc = r#""#, - value = "-1530571426" - ) - )] - StructureCableJunctionH5 = -1530571426i32, - #[strum( - serialize = "StructureFlagSmall", - props(name = r#"Small Flag"#, desc = r#""#, value = "-1529819532") - )] - StructureFlagSmall = -1529819532i32, - #[strum( - serialize = "StopWatch", - props(name = r#"Stop Watch"#, desc = r#""#, value = "-1527229051") - )] - StopWatch = -1527229051i32, - #[strum( - serialize = "ItemUraniumOre", - props( - name = r#"Ore (Uranium)"#, - desc = r#"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", - props(name = r#"Landingpad Threshhold"#, desc = r#""#, value = "-1514298582") - )] - LandingpadThreshholdPiece = -1514298582i32, - #[strum( - serialize = "ItemFlowerGreen", - props(name = r#"Flower (Green)"#, desc = r#""#, value = "-1513337058") - )] - ItemFlowerGreen = -1513337058i32, - #[strum( - serialize = "StructureCompositeCladdingAngled", - props( - name = r#"Composite Cladding (Angled)"#, - desc = r#""#, - value = "-1513030150" - ) - )] - StructureCompositeCladdingAngled = -1513030150i32, - #[strum( - serialize = "StructureChairThickSingle", - props(name = r#"Chair (Thick Single)"#, desc = r#""#, value = "-1510009608") - )] - StructureChairThickSingle = -1510009608i32, - #[strum( - serialize = "StructureInsulatedPipeCrossJunction5", - props( - name = r#"Insulated Pipe (5-Way Junction)"#, - desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, - value = "-1505147578" - ) - )] - StructureInsulatedPipeCrossJunction5 = -1505147578i32, - #[strum( - serialize = "ItemNitrice", - props( - name = r#"Ice (Nitrice)"#, - desc = r#"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. - -Highly 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", - props(name = r#"Cargo Storage (Small)"#, desc = r#""#, value = "-1493672123") - )] - StructureCargoStorageSmall = -1493672123i32, - #[strum( - serialize = "StructureLogicCompare", - props( - name = r#"Logic Compare"#, - desc = r#"0.Equals -1.Greater -2.Less -3.NotEquals"#, - value = "-1489728908" - ) - )] - StructureLogicCompare = -1489728908i32, - #[strum( - serialize = "Landingpad_TaxiPieceStraight", - props( - name = r#"Landingpad Taxi Straight"#, - desc = r#""#, - value = "-1477941080" - ) - )] - LandingpadTaxiPieceStraight = -1477941080i32, - #[strum( - serialize = "StructurePassthroughHeatExchangerLiquidToLiquid", - props( - name = r#"CounterFlow Heat Exchanger - Liquid + Liquid"#, - desc = r#"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. - Balancing the throughput of both inputs is key to creating a good exchange of temperatures."#, - value = "-1472829583" - ) - )] - StructurePassthroughHeatExchangerLiquidToLiquid = -1472829583i32, - #[strum( - serialize = "ItemKitCompositeCladding", - props(name = r#"Kit (Cladding)"#, desc = r#""#, value = "-1470820996") - )] - ItemKitCompositeCladding = -1470820996i32, - #[strum( - serialize = "StructureChuteInlet", - props( - name = r#"Chute Inlet"#, - desc = r#"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. -The 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", - props(name = r#"Sleeper"#, desc = r#""#, value = "-1467449329") - )] - StructureSleeper = -1467449329i32, - #[strum( - serialize = "CartridgeElectronicReader", - props(name = r#"eReader"#, desc = r#""#, value = "-1462180176") - )] - CartridgeElectronicReader = -1462180176i32, - #[strum( - serialize = "StructurePictureFrameThickMountPortraitLarge", - props( - name = r#"Picture Frame Thick Mount Portrait Large"#, - desc = r#""#, - value = "-1459641358" - ) - )] - StructurePictureFrameThickMountPortraitLarge = -1459641358i32, - #[strum( - serialize = "ItemSteelFrames", - props( - name = r#"Steel Frames"#, - desc = r#"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", - props( - name = r#"Chute Flip Flop Splitter"#, - desc = r#"A chute that toggles between two outputs"#, - value = "-1446854725" - ) - )] - StructureChuteFlipFlopSplitter = -1446854725i32, - #[strum( - serialize = "StructurePictureFrameThickLandscapeLarge", - props( - name = r#"Picture Frame Thick Landscape Large"#, - desc = r#""#, - value = "-1434523206" - ) - )] - StructurePictureFrameThickLandscapeLarge = -1434523206i32, - #[strum( - serialize = "ItemKitAdvancedComposter", - props( - name = r#"Kit (Advanced Composter)"#, - desc = r#""#, - value = "-1431998347" - ) - )] - ItemKitAdvancedComposter = -1431998347i32, - #[strum( - serialize = "StructureLiquidTankBigInsulated", - props( - name = r#"Insulated Liquid Tank Big"#, - desc = r#""#, - value = "-1430440215" - ) - )] - StructureLiquidTankBigInsulated = -1430440215i32, - #[strum( - serialize = "StructureEvaporationChamber", - props( - name = r#"Evaporation Chamber"#, - desc = r#"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. - 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. - 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", - props( - name = r#"Wall (Geometry T Mirrored)"#, - desc = r#""#, - value = "-1427845483" - ) - )] - StructureWallGeometryTMirrored = -1427845483i32, - #[strum( - serialize = "KitchenTableShort", - props(name = r#"Kitchen Table (Short)"#, desc = r#""#, value = "-1427415566") - )] - KitchenTableShort = -1427415566i32, - #[strum( - serialize = "StructureChairRectangleSingle", - props( - name = r#"Chair (Rectangle Single)"#, - desc = r#""#, - value = "-1425428917" - ) - )] - StructureChairRectangleSingle = -1425428917i32, - #[strum( - serialize = "StructureTransformer", - props( - name = r#"Transformer (Large)"#, - desc = r#"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. -Note that transformers operate as data isolators, preventing data flowing into any network beyond it."#, - value = "-1423212473" - ) - )] - StructureTransformer = -1423212473i32, - #[strum( - serialize = "StructurePictureFrameThinLandscapeLarge", - props( - name = r#"Picture Frame Thin Landscape Large"#, - desc = r#""#, - value = "-1418288625" - ) - )] - StructurePictureFrameThinLandscapeLarge = -1418288625i32, - #[strum( - serialize = "StructureCompositeCladdingAngledCornerInnerLong", - props( - name = r#"Composite Cladding (Angled Corner Inner Long)"#, - desc = r#""#, - value = "-1417912632" - ) - )] - StructureCompositeCladdingAngledCornerInnerLong = -1417912632i32, - #[strum( - serialize = "ItemPlantEndothermic_Genepool2", - props( - name = r#"Winterspawn (Beta variant)"#, - desc = r#"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", - props(name = r#"Flower (Orange)"#, desc = r#""#, value = "-1411986716") - )] - ItemFlowerOrange = -1411986716i32, - #[strum( - serialize = "AccessCardBlue", - props(name = r#"Access Card (Blue)"#, desc = r#""#, value = "-1411327657") - )] - AccessCardBlue = -1411327657i32, - #[strum( - serialize = "StructureWallSmallPanelsOpen", - props( - name = r#"Wall (Small Panels Open)"#, - desc = r#""#, - value = "-1407480603" - ) - )] - StructureWallSmallPanelsOpen = -1407480603i32, - #[strum( - serialize = "ItemNickelIngot", - props(name = r#"Ingot (Nickel)"#, desc = r#""#, value = "-1406385572") - )] - ItemNickelIngot = -1406385572i32, - #[strum( - serialize = "StructurePipeCrossJunction", - props( - name = r#"Pipe (Cross Junction)"#, - desc = r#"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", - props( - name = r#"Cable (6-Way Junction)"#, - desc = r#"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. -Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, - value = "-1404690610" - ) - )] - StructureCableJunction6 = -1404690610i32, - #[strum( - serialize = "ItemPassiveVentInsulated", - props( - name = r#"Kit (Insulated Passive Vent)"#, - desc = r#""#, - value = "-1397583760" - ) - )] - ItemPassiveVentInsulated = -1397583760i32, - #[strum( - serialize = "ItemKitChairs", - props(name = r#"Kit (Chairs)"#, desc = r#""#, value = "-1394008073") - )] - ItemKitChairs = -1394008073i32, - #[strum( - serialize = "StructureBatteryLarge", - props( - name = r#"Station Battery (Large)"#, - desc = r#"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. -There 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.' -POWER OUTPUT -Able 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", - props( - name = r#"Heavy Filter (Nitrogen)"#, - desc = r#""#, - value = "-1387439451" - ) - )] - ItemGasFilterNitrogenL = -1387439451i32, - #[strum( - serialize = "KitchenTableTall", - props(name = r#"Kitchen Table (Tall)"#, desc = r#""#, value = "-1386237782") - )] - KitchenTableTall = -1386237782i32, - #[strum( - serialize = "StructureCapsuleTankGas", - props( - name = r#"Gas Capsule Tank Small"#, - desc = r#""#, - value = "-1385712131" - ) - )] - StructureCapsuleTankGas = -1385712131i32, - #[strum( - serialize = "StructureCryoTubeVertical", - props( - name = r#"Cryo Tube Vertical"#, - desc = r#"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", - props(name = r#"Liquid Wall Cooler"#, desc = r#""#, value = "-1369060582") - )] - StructureWaterWallCooler = -1369060582i32, - #[strum( - serialize = "ItemKitTables", - props(name = r#"Kit (Tables)"#, desc = r#""#, value = "-1361598922") - )] - ItemKitTables = -1361598922i32, - #[strum( - serialize = "StructureLargeHangerDoor", - props( - name = r#"Large Hangar Door"#, - desc = r#"1 x 3 modular door piece for building hangar doors."#, - value = "-1351081801" - ) - )] - StructureLargeHangerDoor = -1351081801i32, - #[strum( - serialize = "ItemGoldOre", - props( - name = r#"Ore (Gold)"#, - desc = r#"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", - props( - name = r#"Canned Mushroom"#, - desc = r#"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", - props(name = r#"Paint Mixer"#, desc = r#""#, value = "-1339716113") - )] - AppliancePaintMixer = -1339716113i32, - #[strum( - serialize = "AccessCardGray", - props(name = r#"Access Card (Gray)"#, desc = r#""#, value = "-1339479035") - )] - AccessCardGray = -1339479035i32, - #[strum( - serialize = "StructureChuteDigitalValveRight", - props( - name = r#"Chute Digital Valve Right"#, - desc = r#"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", - props(name = r#"Sugarcane"#, desc = r#""#, value = "-1335056202") - )] - ItemSugarCane = -1335056202i32, - #[strum( - serialize = "ItemKitSmallDirectHeatExchanger", - props( - name = r#"Kit (Small Direct Heat Exchanger)"#, - desc = r#""#, - value = "-1332682164" - ) - )] - ItemKitSmallDirectHeatExchanger = -1332682164i32, - #[strum( - serialize = "AccessCardBlack", - props(name = r#"Access Card (Black)"#, desc = r#""#, value = "-1330388999") - )] - AccessCardBlack = -1330388999i32, - #[strum( - serialize = "StructureLogicWriter", - props(name = r#"Logic Writer"#, desc = r#""#, value = "-1326019434") - )] - StructureLogicWriter = -1326019434i32, - #[strum( - serialize = "StructureLogicWriterSwitch", - props(name = r#"Logic Writer Switch"#, desc = r#""#, value = "-1321250424") - )] - StructureLogicWriterSwitch = -1321250424i32, - #[strum( - serialize = "StructureWallIron04", - props(name = r#"Iron Wall (Type 4)"#, desc = r#""#, value = "-1309433134") - )] - StructureWallIron04 = -1309433134i32, - #[strum( - serialize = "ItemPureIceLiquidVolatiles", - props( - name = r#"Pure Ice Liquid Volatiles"#, - desc = r#"A frozen chunk of pure Liquid Volatiles"#, - value = "-1306628937" - ) - )] - ItemPureIceLiquidVolatiles = -1306628937i32, - #[strum( - serialize = "StructureWallLightBattery", - props(name = r#"Wall Light (Battery)"#, desc = r#""#, value = "-1306415132") - )] - StructureWallLightBattery = -1306415132i32, - #[strum( - serialize = "AppliancePlantGeneticAnalyzer", - props( - name = r#"Plant Genetic Analyzer"#, - desc = r#"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. - -Individual Gene Value Widgets: -Most 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. - -Multiple Gene Value Widgets: -For 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", - props( - name = r#"Ingot (Iron)"#, - desc = r#"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", - props( - name = r#"Sleeper Vertical"#, - desc = r#"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", - props( - name = r#"Landingpad 2x2 Center Piece"#, - desc = r#"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", - props( - name = r#"Corn Seeds"#, - desc = r#"Grow a Corn."#, - value = "-1290755415" - ) - )] - SeedBagCorn = -1290755415i32, - #[strum( - serialize = "StructureDigitalValve", - props( - name = r#"Digital Valve"#, - desc = r#"The digital valve allows Stationeers to create logic-controlled valves and pipe networks."#, - value = "-1280984102" - ) - )] - StructureDigitalValve = -1280984102i32, - #[strum( - serialize = "StructureTankConnector", - props( - name = r#"Tank Connector"#, - desc = r#"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", - props( - name = r#"Cryogenic Suit Upgrade"#, - desc = r#"Enables suits with basic cooling functionality to work with cryogenic liquid."#, - value = "-1274308304" - ) - )] - ItemSuitModCryogenicUpgrade = -1274308304i32, - #[strum( - serialize = "ItemKitLandingPadWaypoint", - props( - name = r#"Kit (Landing Pad Runway)"#, - desc = r#""#, - value = "-1267511065" - ) - )] - ItemKitLandingPadWaypoint = -1267511065i32, - #[strum( - serialize = "DynamicGasTankAdvancedOxygen", - props( - name = r#"Portable Gas Tank Mk II (Oxygen)"#, - desc = r#"0.Mode0 -1.Mode1"#, - value = "-1264455519" - ) - )] - DynamicGasTankAdvancedOxygen = -1264455519i32, - #[strum( - serialize = "ItemBasketBall", - props(name = r#"Basket Ball"#, desc = r#""#, value = "-1262580790") - )] - ItemBasketBall = -1262580790i32, - #[strum( - serialize = "ItemSpacepack", - props( - name = r#"Spacepack"#, - desc = r#"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. -Indispensable 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. -USE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move."#, - value = "-1260618380" - ) - )] - ItemSpacepack = -1260618380i32, - #[strum( - serialize = "ItemKitRocketDatalink", - props(name = r#"Kit (Rocket Datalink)"#, desc = r#""#, value = "-1256996603") - )] - ItemKitRocketDatalink = -1256996603i32, - #[strum( - serialize = "StructureGasSensor", - props( - name = r#"Gas Sensor"#, - desc = r#"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", - props( - name = r#"Pure Ice Carbon Dioxide"#, - desc = r#"A frozen chunk of pure Carbon Dioxide"#, - value = "-1251009404" - ) - )] - ItemPureIceCarbonDioxide = -1251009404i32, - #[strum( - serialize = "ItemKitTurboVolumePump", - props( - name = r#"Kit (Turbo Volume Pump - Gas)"#, - desc = r#""#, - value = "-1248429712" - ) - )] - ItemKitTurboVolumePump = -1248429712i32, - #[strum( - serialize = "ItemGasFilterNitrousOxide", - props( - name = r#"Filter (Nitrous Oxide)"#, - desc = r#""#, - value = "-1247674305" - ) - )] - ItemGasFilterNitrousOxide = -1247674305i32, - #[strum( - serialize = "StructureChairThickDouble", - props(name = r#"Chair (Thick Double)"#, desc = r#""#, value = "-1245724402") - )] - StructureChairThickDouble = -1245724402i32, - #[strum( - serialize = "StructureWallPaddingArchVent", - props( - name = r#"Wall (Padding Arch Vent)"#, - desc = r#""#, - value = "-1243329828" - ) - )] - StructureWallPaddingArchVent = -1243329828i32, - #[strum( - serialize = "ItemKitConsole", - props(name = r#"Kit (Consoles)"#, desc = r#""#, value = "-1241851179") - )] - ItemKitConsole = -1241851179i32, - #[strum( - serialize = "ItemKitBeds", - props(name = r#"Kit (Beds)"#, desc = r#""#, value = "-1241256797") - )] - ItemKitBeds = -1241256797i32, - #[strum( - serialize = "StructureFrameIron", - props(name = r#"Iron Frame"#, desc = r#""#, value = "-1240951678") - )] - StructureFrameIron = -1240951678i32, - #[strum( - serialize = "ItemDirtyOre", - props( - name = r#"Dirty Ore"#, - desc = r#"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", - props( - name = r#"Large Direct Heat Exchanger - Gas + Gas"#, - desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, - value = "-1230658883" - ) - )] - StructureLargeDirectHeatExchangeGastoGas = -1230658883i32, - #[strum( - serialize = "ItemSensorProcessingUnitOreScanner", - props( - name = r#"Sensor Processing Unit (Ore Scanner)"#, - desc = r#"The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD."#, - value = "-1219128491" - ) - )] - ItemSensorProcessingUnitOreScanner = -1219128491i32, - #[strum( - serialize = "StructurePictureFrameThickPortraitSmall", - props( - name = r#"Picture Frame Thick Portrait Small"#, - desc = r#""#, - value = "-1218579821" - ) - )] - StructurePictureFrameThickPortraitSmall = -1218579821i32, - #[strum( - serialize = "ItemGasFilterOxygenL", - props(name = r#"Heavy Filter (Oxygen)"#, desc = r#""#, value = "-1217998945") - )] - ItemGasFilterOxygenL = -1217998945i32, - #[strum( - serialize = "Landingpad_LiquidConnectorInwardPiece", - props( - name = r#"Landingpad Liquid Input"#, - desc = r#""#, - value = "-1216167727" - ) - )] - LandingpadLiquidConnectorInwardPiece = -1216167727i32, - #[strum( - serialize = "ItemWreckageStructureWeatherStation008", - props( - name = r#"Wreckage Structure Weather Station"#, - desc = r#""#, - value = "-1214467897" - ) - )] - ItemWreckageStructureWeatherStation008 = -1214467897i32, - #[strum( - serialize = "ItemPlantThermogenic_Creative", - props( - name = r#"Thermogenic Plant Creative"#, - desc = r#""#, - value = "-1208890208" - ) - )] - ItemPlantThermogenicCreative = -1208890208i32, - #[strum( - serialize = "ItemRocketScanningHead", - props(name = r#"Rocket Scanner Head"#, desc = r#""#, value = "-1198702771") - )] - ItemRocketScanningHead = -1198702771i32, - #[strum( - serialize = "StructureCableStraightBurnt", - props( - name = r#"Burnt Cable (Straight)"#, - desc = r#""#, - value = "-1196981113" - ) - )] - StructureCableStraightBurnt = -1196981113i32, - #[strum( - serialize = "ItemHydroponicTray", - props( - name = r#"Kit (Hydroponic Tray)"#, - desc = r#"This kits creates a Hydroponics Tray for growing various plants."#, - value = "-1193543727" - ) - )] - ItemHydroponicTray = -1193543727i32, - #[strum( - serialize = "ItemCannedRicePudding", - props( - name = r#"Canned Rice Pudding"#, - desc = r#"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", - props( - name = r#"In-Line Tank Liquid"#, - desc = r#"A small expansion tank that increases the volume of a pipe network."#, - value = "-1183969663" - ) - )] - StructureInLineTankLiquid1X2 = -1183969663i32, - #[strum( - serialize = "StructureInteriorDoorTriangle", - props( - name = r#"Interior Door Triangle"#, - desc = r#"0.Operate -1.Logic"#, - value = "-1182923101" - ) - )] - StructureInteriorDoorTriangle = -1182923101i32, - #[strum( - serialize = "ItemKitElectronicsPrinter", - props( - name = r#"Kit (Electronics Printer)"#, - desc = r#""#, - value = "-1181922382" - ) - )] - ItemKitElectronicsPrinter = -1181922382i32, - #[strum( - serialize = "StructureWaterBottleFiller", - props(name = r#"Water Bottle Filler"#, desc = r#""#, value = "-1178961954") - )] - StructureWaterBottleFiller = -1178961954i32, - #[strum( - serialize = "StructureWallVent", - props( - name = r#"Wall Vent"#, - desc = r#"Used to mix atmospheres passively between two walls."#, - value = "-1177469307" - ) - )] - StructureWallVent = -1177469307i32, - #[strum( - serialize = "ItemSensorLenses", - props( - name = r#"Sensor Lenses"#, - desc = r#"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", - props(name = r#"Sound Cartridge Leads"#, desc = r#""#, value = "-1174735962") - )] - ItemSoundCartridgeLeads = -1174735962i32, - #[strum( - serialize = "StructureMediumConvectionRadiatorLiquid", - props( - name = r#"Medium Convection Radiator Liquid"#, - desc = r#"A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere."#, - value = "-1169014183" - ) - )] - StructureMediumConvectionRadiatorLiquid = -1169014183i32, - #[strum( - serialize = "ItemKitFridgeBig", - props(name = r#"Kit (Fridge Large)"#, desc = r#""#, value = "-1168199498") - )] - ItemKitFridgeBig = -1168199498i32, - #[strum( - serialize = "ItemKitPipeLiquid", - props(name = r#"Kit (Liquid Pipe)"#, desc = r#""#, value = "-1166461357") - )] - ItemKitPipeLiquid = -1166461357i32, - #[strum( - serialize = "StructureWallFlatCornerTriangleFlat", - props( - name = r#"Wall (Flat Corner Triangle Flat)"#, - desc = r#""#, - value = "-1161662836" - ) - )] - StructureWallFlatCornerTriangleFlat = -1161662836i32, - #[strum( - serialize = "StructureLogicMathUnary", - props( - name = r#"Math Unary"#, - desc = r#"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"#, - value = "-1160020195" - ) - )] - StructureLogicMathUnary = -1160020195i32, - #[strum( - serialize = "ItemPlantEndothermic_Creative", - props( - name = r#"Endothermic Plant Creative"#, - desc = r#""#, - value = "-1159179557" - ) - )] - ItemPlantEndothermicCreative = -1159179557i32, - #[strum( - serialize = "ItemSensorProcessingUnitCelestialScanner", - props( - name = r#"Sensor Processing Unit (Celestial Scanner)"#, - desc = r#""#, - value = "-1154200014" - ) - )] - ItemSensorProcessingUnitCelestialScanner = -1154200014i32, - #[strum( - serialize = "StructureChairRectangleDouble", - props( - name = r#"Chair (Rectangle Double)"#, - desc = r#""#, - value = "-1152812099" - ) - )] - StructureChairRectangleDouble = -1152812099i32, - #[strum( - serialize = "ItemGasCanisterOxygen", - props(name = r#"Canister (Oxygen)"#, desc = r#""#, value = "-1152261938") - )] - ItemGasCanisterOxygen = -1152261938i32, - #[strum( - serialize = "ItemPureIceOxygen", - props( - name = r#"Pure Ice Oxygen"#, - desc = r#"A frozen chunk of pure Oxygen"#, - value = "-1150448260" - ) - )] - ItemPureIceOxygen = -1150448260i32, - #[strum( - serialize = "StructureBackPressureRegulator", - props( - name = r#"Back Pressure Regulator"#, - desc = r#"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", - props( - name = r#"Picture Frame Thin Landscape Large"#, - desc = r#""#, - value = "-1146760430" - ) - )] - StructurePictureFrameThinMountLandscapeLarge = -1146760430i32, - #[strum( - serialize = "StructureMediumRadiatorLiquid", - props( - name = r#"Medium Radiator Liquid"#, - desc = r#"A stand-alone liquid radiator unit optimized for radiating heat in vacuums."#, - value = "-1141760613" - ) - )] - StructureMediumRadiatorLiquid = -1141760613i32, - #[strum( - serialize = "ApplianceMicrowave", - props( - name = r#"Microwave"#, - desc = r#"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. -Just 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", - props( - name = r#"Kit (Gas Mixer)"#, - desc = r#"This kit creates a Gas Mixer."#, - value = "-1134459463" - ) - )] - ItemPipeGasMixer = -1134459463i32, - #[strum( - serialize = "CircuitboardModeControl", - props( - name = r#"Mode Control"#, - desc = r#"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", - props( - name = r#"Active Vent"#, - desc = r#"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", - props( - name = r#"Wall (Padded Arch Corner)"#, - desc = r#""#, - value = "-1126688298" - ) - )] - StructureWallPaddedArchCorner = -1126688298i32, - #[strum( - serialize = "StructurePlanter", - props( - name = r#"Planter"#, - desc = r#"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", - props( - name = r#"Battery (Medium)"#, - desc = r#"0.Empty -1.Critical -2.VeryLow -3.Low -4.Medium -5.High -6.Full"#, - value = "-1125305264" - ) - )] - StructureBatteryMedium = -1125305264i32, - #[strum( - serialize = "ItemHorticultureBelt", - props(name = r#"Horticulture Belt"#, desc = r#""#, value = "-1117581553") - )] - ItemHorticultureBelt = -1117581553i32, - #[strum( - serialize = "CartridgeMedicalAnalyser", - props( - name = r#"Medical Analyzer"#, - desc = r#"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", - props( - name = r#"Composite Floor Grating (Type 3)"#, - desc = r#""#, - value = "-1113471627" - ) - )] - StructureCompositeFloorGrating3 = -1113471627i32, - #[strum( - serialize = "ItemPlainCake", - props(name = r#"Cake"#, desc = r#""#, value = "-1108244510") - )] - ItemPlainCake = -1108244510i32, - #[strum( - serialize = "ItemWreckageStructureWeatherStation004", - props( - name = r#"Wreckage Structure Weather Station"#, - desc = r#""#, - value = "-1104478996" - ) - )] - ItemWreckageStructureWeatherStation004 = -1104478996i32, - #[strum( - serialize = "StructureCableFuse1k", - props(name = r#"Fuse (1kW)"#, desc = r#""#, value = "-1103727120") - )] - StructureCableFuse1K = -1103727120i32, - #[strum( - serialize = "WeaponTorpedo", - props(name = r#"Torpedo"#, desc = r#""#, value = "-1102977898") - )] - WeaponTorpedo = -1102977898i32, - #[strum( - serialize = "StructureWallPaddingThin", - props(name = r#"Wall (Padding Thin)"#, desc = r#""#, value = "-1102403554") - )] - StructureWallPaddingThin = -1102403554i32, - #[strum( - serialize = "Landingpad_GasConnectorOutwardPiece", - props( - name = r#"Landingpad Gas Output"#, - desc = r#"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", - props( - name = r#"Plant Genetic Splicer"#, - desc = r#"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. - -To 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", - props( - name = r#"Gas Capsule Tank Medium"#, - desc = r#""#, - value = "-1093860567" - ) - )] - StructureMediumRocketGasFuelTank = -1093860567i32, - #[strum( - serialize = "StructureStairs4x2Rails", - props(name = r#"Stairs with Rails"#, desc = r#""#, value = "-1088008720") - )] - StructureStairs4X2Rails = -1088008720i32, - #[strum( - serialize = "StructureShowerPowered", - props(name = r#"Shower (Powered)"#, desc = r#""#, value = "-1081797501") - )] - StructureShowerPowered = -1081797501i32, - #[strum( - serialize = "ItemCookedMushroom", - props( - name = r#"Cooked Mushroom"#, - desc = r#"A high-nutrient cooked food, which can be canned."#, - value = "-1076892658" - ) - )] - ItemCookedMushroom = -1076892658i32, - #[strum( - serialize = "ItemGlasses", - props(name = r#"Glasses"#, desc = r#""#, value = "-1068925231") - )] - ItemGlasses = -1068925231i32, - #[strum( - serialize = "KitchenTableSimpleTall", - props( - name = r#"Kitchen Table (Simple Tall)"#, - desc = r#""#, - value = "-1068629349" - ) - )] - KitchenTableSimpleTall = -1068629349i32, - #[strum( - serialize = "ItemGasFilterOxygenM", - props( - name = r#"Medium Filter (Oxygen)"#, - desc = r#""#, - value = "-1067319543" - ) - )] - ItemGasFilterOxygenM = -1067319543i32, - #[strum( - serialize = "StructureTransformerMedium", - props( - name = r#"Transformer (Medium)"#, - desc = r#"Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. -Medium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W. -Note that transformers also operate as data isolators, preventing data flowing into any network beyond it."#, - value = "-1065725831" - ) - )] - StructureTransformerMedium = -1065725831i32, - #[strum( - serialize = "ItemKitDynamicCanister", - props( - name = r#"Kit (Portable Gas Tank)"#, - desc = r#""#, - value = "-1061945368" - ) - )] - ItemKitDynamicCanister = -1061945368i32, - #[strum( - serialize = "ItemEmergencyPickaxe", - props(name = r#"Emergency Pickaxe"#, desc = r#""#, value = "-1061510408") - )] - ItemEmergencyPickaxe = -1061510408i32, - #[strum( - serialize = "ItemWheat", - props( - name = r#"Wheat"#, - desc = r#"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", - props(name = r#"Emergency Arc Welder"#, desc = r#""#, value = "-1056029600") - )] - ItemEmergencyArcWelder = -1056029600i32, - #[strum( - serialize = "ItemGasFilterOxygenInfinite", - props( - name = r#"Catalytic Filter (Oxygen)"#, - desc = r#"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", - props( - name = r#"Turbo Volume Pump (Liquid)"#, - desc = r#"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", - props( - name = r#"Pure Ice Liquid Hydrogen"#, - desc = r#"A frozen chunk of pure Liquid Hydrogen"#, - value = "-1044933269" - ) - )] - ItemPureIceLiquidHydrogen = -1044933269i32, - #[strum( - serialize = "StructureCompositeCladdingAngledCornerInnerLongR", - props( - name = r#"Composite Cladding (Angled Corner Inner Long R)"#, - desc = r#""#, - value = "-1032590967" - ) - )] - StructureCompositeCladdingAngledCornerInnerLongR = -1032590967i32, - #[strum( - serialize = "StructureAreaPowerControlReversed", - props( - name = r#"Area Power Control"#, - desc = r#"An Area Power Control (APC) has three main functions. -Its primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. -APCs also create sub-networks, as no devices on the far side of an APC are visible on the main network. -Lastly, 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", - props( - name = r#"Chute Outlet"#, - desc = r#"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. -The 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", - props(name = r#"Kit (Harvie)"#, desc = r#""#, value = "-1022693454") - )] - ItemKitHarvie = -1022693454i32, - #[strum( - serialize = "ItemGasCanisterFuel", - props(name = r#"Canister (Fuel)"#, desc = r#""#, value = "-1014695176") - )] - ItemGasCanisterFuel = -1014695176i32, - #[strum( - serialize = "StructureCompositeWall04", - props( - name = r#"Composite Wall (Type 4)"#, - desc = r#""#, - value = "-1011701267" - ) - )] - StructureCompositeWall04 = -1011701267i32, - #[strum( - serialize = "StructureSorter", - props( - name = r#"Sorter"#, - desc = r#"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", - props( - name = r#"Pipe Label"#, - desc = r#"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", - props( - name = r#"Canned Edamame"#, - desc = r#"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", - props( - name = r#"Tomato"#, - desc = r#"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", - props( - name = r#"Ore (Cobalt)"#, - desc = r#"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", - props( - name = r#"Burnt Heavy Cable (4-Way Corner)"#, - desc = r#""#, - value = "-981223316" - ) - )] - StructureCableCorner4HBurnt = -981223316i32, - #[strum( - serialize = "Landingpad_StraightPiece01", - props( - name = r#"Landingpad Straight"#, - desc = r#"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", - props( - name = r#"Medium Radiator"#, - desc = r#"A stand-alone radiator unit optimized for radiating heat in vacuums."#, - value = "-975966237" - ) - )] - StructureMediumRadiator = -975966237i32, - #[strum( - serialize = "ItemDynamicScrubber", - props( - name = r#"Kit (Portable Scrubber)"#, - desc = r#""#, - value = "-971920158" - ) - )] - ItemDynamicScrubber = -971920158i32, - #[strum( - serialize = "StructureCondensationValve", - props( - name = r#"Condensation Valve"#, - desc = r#"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", - props( - name = r#"Umbilical (Chute)"#, - desc = r#"0.Left -1.Center -2.Right"#, - value = "-958884053" - ) - )] - StructureChuteUmbilicalMale = -958884053i32, - #[strum( - serialize = "ItemKitElevator", - props(name = r#"Kit (Elevator)"#, desc = r#""#, value = "-945806652") - )] - ItemKitElevator = -945806652i32, - #[strum( - serialize = "StructureSolarPanelReinforced", - props( - name = r#"Solar Panel (Heavy)"#, - desc = r#"This solar panel is resistant to storm damage."#, - value = "-934345724" - ) - )] - StructureSolarPanelReinforced = -934345724i32, - #[strum( - serialize = "ItemKitRocketTransformerSmall", - props( - name = r#"Kit (Transformer Small (Rocket))"#, - desc = r#""#, - value = "-932335800" - ) - )] - ItemKitRocketTransformerSmall = -932335800i32, - #[strum( - serialize = "CartridgeConfiguration", - props(name = r#"Configuration"#, desc = r#""#, value = "-932136011") - )] - CartridgeConfiguration = -932136011i32, - #[strum( - serialize = "ItemSilverIngot", - props(name = r#"Ingot (Silver)"#, desc = r#""#, value = "-929742000") - )] - ItemSilverIngot = -929742000i32, - #[strum( - serialize = "ItemKitHydroponicAutomated", - props( - name = r#"Kit (Automated Hydroponics)"#, - desc = r#""#, - value = "-927931558" - ) - )] - ItemKitHydroponicAutomated = -927931558i32, - #[strum( - serialize = "StructureSmallTableRectangleSingle", - props( - name = r#"Small (Table Rectangle Single)"#, - desc = r#""#, - value = "-924678969" - ) - )] - StructureSmallTableRectangleSingle = -924678969i32, - #[strum( - serialize = "ItemWreckageStructureWeatherStation005", - props( - name = r#"Wreckage Structure Weather Station"#, - desc = r#""#, - value = "-919745414" - ) - )] - ItemWreckageStructureWeatherStation005 = -919745414i32, - #[strum( - serialize = "ItemSilverOre", - props( - name = r#"Ore (Silver)"#, - desc = r#"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", - props( - name = r#"Pipe (T Junction)"#, - desc = r#"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", - props( - name = r#"Pickaxe"#, - desc = r#"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", - props( - name = r#"Kit (Liquid Radiator)"#, - desc = r#"This kit creates a Liquid Pipe Convection Radiator."#, - value = "-906521320" - ) - )] - ItemPipeLiquidRadiator = -906521320i32, - #[strum( - serialize = "StructurePortablesConnector", - props(name = r#"Portables Connector"#, desc = r#""#, value = "-899013427") - )] - StructurePortablesConnector = -899013427i32, - #[strum( - serialize = "StructureCompositeFloorGrating2", - props( - name = r#"Composite Floor Grating (Type 2)"#, - desc = r#""#, - value = "-895027741" - ) - )] - StructureCompositeFloorGrating2 = -895027741i32, - #[strum( - serialize = "StructureTransformerSmall", - props( - name = r#"Transformer (Small)"#, - desc = r#"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. -Note that transformers operate as data isolators, preventing data flowing into any network beyond it."#, - value = "-890946730" - ) - )] - StructureTransformerSmall = -890946730i32, - #[strum( - serialize = "StructureCableCorner", - props( - name = r#"Cable (Corner)"#, - desc = r#"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. -Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, - value = "-889269388" - ) - )] - StructureCableCorner = -889269388i32, - #[strum( - serialize = "ItemKitChuteUmbilical", - props(name = r#"Kit (Chute Umbilical)"#, desc = r#""#, value = "-876560854") - )] - ItemKitChuteUmbilical = -876560854i32, - #[strum( - serialize = "ItemPureIceSteam", - props( - name = r#"Pure Ice Steam"#, - desc = r#"A frozen chunk of pure Steam"#, - value = "-874791066" - ) - )] - ItemPureIceSteam = -874791066i32, - #[strum( - serialize = "ItemBeacon", - props(name = r#"Tracking Beacon"#, desc = r#""#, value = "-869869491") - )] - ItemBeacon = -869869491i32, - #[strum( - serialize = "ItemKitWindTurbine", - props(name = r#"Kit (Wind Turbine)"#, desc = r#""#, value = "-868916503") - )] - ItemKitWindTurbine = -868916503i32, - #[strum( - serialize = "ItemKitRocketMiner", - props(name = r#"Kit (Rocket Miner)"#, desc = r#""#, value = "-867969909") - )] - ItemKitRocketMiner = -867969909i32, - #[strum( - serialize = "StructureStairwellBackPassthrough", - props( - name = r#"Stairwell (Back Passthrough)"#, - desc = r#""#, - value = "-862048392" - ) - )] - StructureStairwellBackPassthrough = -862048392i32, - #[strum( - serialize = "StructureWallArch", - props(name = r#"Wall (Arch)"#, desc = r#""#, value = "-858143148") - )] - StructureWallArch = -858143148i32, - #[strum( - serialize = "HumanSkull", - props(name = r#"Human Skull"#, desc = r#""#, value = "-857713709") - )] - HumanSkull = -857713709i32, - #[strum( - serialize = "StructureLogicMemory", - props(name = r#"Logic Memory"#, desc = r#""#, value = "-851746783") - )] - StructureLogicMemory = -851746783i32, - #[strum( - serialize = "StructureChuteBin", - props( - name = r#"Chute Bin"#, - desc = r#"The Stationeer's goal is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps. -Like 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", - props(name = r#"Kit (Flat Wall)"#, desc = r#""#, value = "-846838195") - )] - ItemKitWallFlat = -846838195i32, - #[strum( - serialize = "ItemActiveVent", - props( - name = r#"Kit (Active Vent)"#, - desc = r#"When constructed, this kit places an Active Vent on any support structure."#, - value = "-842048328" - ) - )] - ItemActiveVent = -842048328i32, - #[strum( - serialize = "ItemFlashlight", - props( - name = r#"Flashlight"#, - desc = r#"A flashlight with a narrow and wide beam options."#, - value = "-838472102" - ) - )] - ItemFlashlight = -838472102i32, - #[strum( - serialize = "ItemWreckageStructureWeatherStation001", - props( - name = r#"Wreckage Structure Weather Station"#, - desc = r#""#, - value = "-834664349" - ) - )] - ItemWreckageStructureWeatherStation001 = -834664349i32, - #[strum( - serialize = "ItemBiomass", - props( - name = r#"Biomass"#, - desc = r#"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", - props( - name = r#"Kit (Power Transmitter Omni)"#, - desc = r#""#, - value = "-831211676" - ) - )] - ItemKitPowerTransmitterOmni = -831211676i32, - #[strum( - serialize = "StructureKlaxon", - props( - name = r#"Klaxon Speaker"#, - desc = r#"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", - props( - name = r#"Elevator Level (Cabled)"#, - desc = r#""#, - value = "-827912235" - ) - )] - StructureElevatorLevelFront = -827912235i32, - #[strum( - serialize = "ItemKitPipeOrgan", - props(name = r#"Kit (Pipe Organ)"#, desc = r#""#, value = "-827125300") - )] - ItemKitPipeOrgan = -827125300i32, - #[strum( - serialize = "ItemKitWallPadded", - props(name = r#"Kit (Padded Wall)"#, desc = r#""#, value = "-821868990") - )] - ItemKitWallPadded = -821868990i32, - #[strum( - serialize = "DynamicGasCanisterFuel", - props( - name = r#"Portable Gas Tank (Fuel)"#, - desc = r#"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", - props( - name = r#"Reinforced Window (Composite Steel)"#, - desc = r#"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", - props( - name = r#"LED Display (Small)"#, - desc = r#"0.Default -1.Percent -2.Power"#, - value = "-815193061" - ) - )] - StructureConsoleLed5 = -815193061i32, - #[strum( - serialize = "StructureInsulatedInLineTankLiquid1x1", - props( - name = r#"Insulated In-Line Tank Small Liquid"#, - desc = r#""#, - value = "-813426145" - ) - )] - StructureInsulatedInLineTankLiquid1X1 = -813426145i32, - #[strum( - serialize = "StructureChuteDigitalFlipFlopSplitterLeft", - props( - name = r#"Chute Digital Flip Flop Splitter Left"#, - desc = r#"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", - props( - name = r#"Rocket Control Motherboard"#, - desc = r#""#, - value = "-806986392" - ) - )] - MotherboardRockets = -806986392i32, - #[strum( - serialize = "ItemKitFurnace", - props(name = r#"Kit (Furnace)"#, desc = r#""#, value = "-806743925") - )] - ItemKitFurnace = -806743925i32, - #[strum( - serialize = "ItemTropicalPlant", - props( - name = r#"Tropical Lily"#, - desc = r#"An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants."#, - value = "-800947386" - ) - )] - ItemTropicalPlant = -800947386i32, - #[strum( - serialize = "ItemKitLiquidTank", - props(name = r#"Kit (Liquid Tank)"#, desc = r#""#, value = "-799849305") - )] - ItemKitLiquidTank = -799849305i32, - #[strum( - serialize = "StructureCompositeDoor", - props( - name = r#"Composite Door"#, - desc = r#"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", - props(name = r#"Locker"#, desc = r#""#, value = "-793623899") - )] - StructureStorageLocker = -793623899i32, - #[strum( - serialize = "RespawnPoint", - props( - name = r#"Respawn Point"#, - desc = r#"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", - props(name = r#"Ingot (Inconel)"#, desc = r#""#, value = "-787796599") - )] - ItemInconelIngot = -787796599i32, - #[strum( - serialize = "StructurePoweredVentLarge", - props( - name = r#"Powered Vent Large"#, - desc = r#"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", - props(name = r#"Kit (Geometric Wall)"#, desc = r#""#, value = "-784733231") - )] - ItemKitWallGeometry = -784733231i32, - #[strum( - serialize = "StructureInsulatedPipeCrossJunction4", - props( - name = r#"Insulated Pipe (4-Way Junction)"#, - desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, - value = "-783387184" - ) - )] - StructureInsulatedPipeCrossJunction4 = -783387184i32, - #[strum( - serialize = "StructurePowerConnector", - props( - name = r#"Power Connector"#, - desc = r#"Attaches a Kit (Portable Generator) to a power network."#, - value = "-782951720" - ) - )] - StructurePowerConnector = -782951720i32, - #[strum( - serialize = "StructureLiquidPipeOneWayValve", - props( - name = r#"One Way Valve (Liquid)"#, - desc = r#"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.."#, - value = "-782453061" - ) - )] - StructureLiquidPipeOneWayValve = -782453061i32, - #[strum( - serialize = "StructureWallLargePanelArrow", - props( - name = r#"Wall (Large Panel Arrow)"#, - desc = r#""#, - value = "-776581573" - ) - )] - StructureWallLargePanelArrow = -776581573i32, - #[strum( - serialize = "StructureShower", - props(name = r#"Shower"#, desc = r#""#, value = "-775128944") - )] - StructureShower = -775128944i32, - #[strum( - serialize = "ItemChemLightBlue", - props( - name = r#"Chem Light (Blue)"#, - desc = r#"A safe and slightly rave-some source of blue light. Snap to activate."#, - value = "-772542081" - ) - )] - ItemChemLightBlue = -772542081i32, - #[strum( - serialize = "StructureLogicSlotReader", - props(name = r#"Slot Reader"#, desc = r#""#, value = "-767867194") - )] - StructureLogicSlotReader = -767867194i32, - #[strum( - serialize = "ItemGasCanisterCarbonDioxide", - props(name = r#"Canister (CO2)"#, desc = r#""#, value = "-767685874") - )] - ItemGasCanisterCarbonDioxide = -767685874i32, - #[strum( - serialize = "ItemPipeAnalyizer", - props( - name = r#"Kit (Pipe Analyzer)"#, - desc = r#"This kit creates a Pipe Analyzer."#, - value = "-767597887" - ) - )] - ItemPipeAnalyizer = -767597887i32, - #[strum( - serialize = "StructureBatteryChargerSmall", - props(name = r#"Battery Charger Small"#, desc = r#""#, value = "-761772413") - )] - StructureBatteryChargerSmall = -761772413i32, - #[strum( - serialize = "StructureWaterBottleFillerPowered", - props(name = r#"Waterbottle Filler"#, desc = r#""#, value = "-756587791") - )] - StructureWaterBottleFillerPowered = -756587791i32, - #[strum( - serialize = "AppliancePackagingMachine", - props( - name = r#"Basic Packaging Machine"#, - desc = r#"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. - -OPERATION - -1. Add the correct ingredients to the device via the hopper in the TOP. - -2. Close the device using the dropdown handle. - -3. Activate the device. - -4. Remove canned goods from the outlet in the FRONT. - -Note: the Cannifier will flash an error on its activation switch if you attempt to activate it before closing it. - - - "#, - value = "-749191906" - ) - )] - AppliancePackagingMachine = -749191906i32, - #[strum( - serialize = "ItemIntegratedCircuit10", - props( - name = r#"Integrated Circuit (IC10)"#, - desc = r#""#, - value = "-744098481" - ) - )] - ItemIntegratedCircuit10 = -744098481i32, - #[strum( - serialize = "ItemLabeller", - props( - name = r#"Labeller"#, - desc = r#"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", - props( - name = r#"Heavy Cable (4-Way Junction)"#, - desc = r#""#, - value = "-742234680" - ) - )] - StructureCableJunctionH4 = -742234680i32, - #[strum( - serialize = "StructureWallCooler", - props( - name = r#"Wall Cooler"#, - desc = r#"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. -In 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. - -EFFICIENCY -The 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. -The 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. -ERRORS -If the wall cooler is flashing an error then it is missing one of the following: - -- Pipe connection to the wall cooler. -- Gas in the connected pipes, or pressure is too low. -- Atmosphere in the surrounding environment or pressure is too low. - -For more information about how to control temperatures, consult the temperature control Guides page."#, - value = "-739292323" - ) - )] - StructureWallCooler = -739292323i32, - #[strum( - serialize = "StructurePurgeValve", - props( - name = r#"Purge Valve"#, - desc = r#"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", - props(name = r#"Container Mount"#, desc = r#""#, value = "-733500083") - )] - StructureCrateMount = -733500083i32, - #[strum( - serialize = "ItemKitDynamicGenerator", - props( - name = r#"Kit (Portable Generator)"#, - desc = r#""#, - value = "-732720413" - ) - )] - ItemKitDynamicGenerator = -732720413i32, - #[strum( - serialize = "StructureConsoleDual", - props( - name = r#"Console Dual"#, - desc = r#"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. -A 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", - props( - name = r#"Filter (Oxygen)"#, - desc = r#"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", - props( - name = r#"Cooked Tomato"#, - desc = r#"A high-nutrient cooked food, which can be canned."#, - value = "-709086714" - ) - )] - ItemCookedTomato = -709086714i32, - #[strum( - serialize = "ItemCopperOre", - props( - name = r#"Ore (Copper)"#, - desc = r#"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", - props( - name = r#"Logic Transmitter"#, - desc = r#"Connects to Logic Transmitter"#, - value = "-693235651" - ) - )] - StructureLogicTransmitter = -693235651i32, - #[strum( - serialize = "StructureValve", - props(name = r#"Valve"#, desc = r#""#, value = "-692036078") - )] - StructureValve = -692036078i32, - #[strum( - serialize = "StructureCompositeWindowIron", - props(name = r#"Iron Window"#, desc = r#""#, value = "-688284639") - )] - StructureCompositeWindowIron = -688284639i32, - #[strum( - serialize = "ItemSprayCanBlack", - props( - name = r#"Spray Paint (Black)"#, - desc = r#"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", - props( - name = r#"Mining-Drill Head (Long Term)"#, - desc = r#""#, - value = "-684020753" - ) - )] - ItemRocketMiningDrillHeadLongTerm = -684020753i32, - #[strum( - serialize = "ItemMiningBelt", - props( - name = r#"Mining Belt"#, - desc = r#"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", - props( - name = r#"Gas Canister (Smart)"#, - desc = r#"0.Mode0 -1.Mode1"#, - value = "-668314371" - ) - )] - ItemGasCanisterSmart = -668314371i32, - #[strum( - serialize = "ItemFlour", - props( - name = r#"Flour"#, - desc = r#"Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven)."#, - value = "-665995854" - ) - )] - ItemFlour = -665995854i32, - #[strum( - serialize = "StructureSmallTableRectangleDouble", - props( - name = r#"Small (Table Rectangle Double)"#, - desc = r#""#, - value = "-660451023" - ) - )] - StructureSmallTableRectangleDouble = -660451023i32, - #[strum( - serialize = "StructureChuteUmbilicalFemaleSide", - props( - name = r#"Umbilical Socket Angle (Chute)"#, - desc = r#""#, - value = "-659093969" - ) - )] - StructureChuteUmbilicalFemaleSide = -659093969i32, - #[strum( - serialize = "ItemSteelIngot", - props( - name = r#"Ingot (Steel)"#, - desc = r#"Steel ingots are a metal alloy, crafted in a Furnace by smelting Ore (Iron) and Ore (Coal) at a ratio of 3:1. -It 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", - props( - name = r#"Wheat Seeds"#, - desc = r#"Grow some Wheat."#, - value = "-654756733" - ) - )] - SeedBagWheet = -654756733i32, - #[strum( - serialize = "StructureRocketTower", - props(name = r#"Launch Tower"#, desc = r#""#, value = "-654619479") - )] - StructureRocketTower = -654619479i32, - #[strum( - serialize = "StructureGasUmbilicalFemaleSide", - props( - name = r#"Umbilical Socket Angle (Gas)"#, - desc = r#""#, - value = "-648683847" - ) - )] - StructureGasUmbilicalFemaleSide = -648683847i32, - #[strum( - serialize = "StructureLockerSmall", - props(name = r#"Locker (Small)"#, desc = r#""#, value = "-647164662") - )] - StructureLockerSmall = -647164662i32, - #[strum( - serialize = "StructureSecurityPrinter", - props( - name = r#"Security Printer"#, - desc = r#"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. -"#, - value = "-641491515" - ) - )] - StructureSecurityPrinter = -641491515i32, - #[strum( - serialize = "StructureWallSmallPanelsArrow", - props( - name = r#"Wall (Small Panels Arrow)"#, - desc = r#""#, - value = "-639306697" - ) - )] - StructureWallSmallPanelsArrow = -639306697i32, - #[strum( - serialize = "ItemKitDynamicMKIILiquidCanister", - props( - name = r#"Kit (Portable Liquid Tank Mk II)"#, - desc = r#""#, - value = "-638019974" - ) - )] - ItemKitDynamicMkiiLiquidCanister = -638019974i32, - #[strum( - serialize = "ItemKitRocketManufactory", - props( - name = r#"Kit (Rocket Manufactory)"#, - desc = r#""#, - value = "-636127860" - ) - )] - ItemKitRocketManufactory = -636127860i32, - #[strum( - serialize = "ItemPureIceVolatiles", - props( - name = r#"Pure Ice Volatiles"#, - desc = r#"A frozen chunk of pure Volatiles"#, - value = "-633723719" - ) - )] - ItemPureIceVolatiles = -633723719i32, - #[strum( - serialize = "ItemGasFilterNitrogenM", - props( - name = r#"Medium Filter (Nitrogen)"#, - desc = r#""#, - value = "-632657357" - ) - )] - ItemGasFilterNitrogenM = -632657357i32, - #[strum( - serialize = "StructureCableFuse5k", - props(name = r#"Fuse (5kW)"#, desc = r#""#, value = "-631590668") - )] - StructureCableFuse5K = -631590668i32, - #[strum( - serialize = "StructureCableJunction6Burnt", - props( - name = r#"Burnt Cable (6-Way Junction)"#, - desc = r#""#, - value = "-628145954" - ) - )] - StructureCableJunction6Burnt = -628145954i32, - #[strum( - serialize = "StructureComputer", - props( - name = r#"Computer"#, - desc = r#"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. -The 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. -Compatible motherboards: -- Logic Motherboard -- Manufacturing Motherboard -- Sorter Motherboard -- Communications Motherboard -- IC Editor Motherboard"#, - value = "-626563514" - ) - )] - StructureComputer = -626563514i32, - #[strum( - serialize = "StructurePressureFedGasEngine", - props( - name = r#"Pressure Fed Gas Engine"#, - desc = r#"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", - props( - name = r#"Telescope"#, - desc = r#"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", - props(name = r#"Kit (Advanced Furnace)"#, desc = r#""#, value = "-616758353") - )] - ItemKitAdvancedFurnace = -616758353i32, - #[strum( - serialize = "StructureHeatExchangerLiquidtoLiquid", - props( - name = r#"Heat Exchanger - Liquid"#, - desc = r#"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. -The '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. -As 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. -"#, - value = "-613784254" - ) - )] - StructureHeatExchangerLiquidtoLiquid = -613784254i32, - #[strum( - serialize = "StructureChuteJunction", - props( - name = r#"Chute (Junction)"#, - desc = r#"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. -Chute 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", - props( - name = r#"Chute (Window)"#, - desc = r#"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", - props(name = r#"Headlamp"#, desc = r#""#, value = "-598730959") - )] - ItemWearLamp = -598730959i32, - #[strum( - serialize = "ItemKitAdvancedPackagingMachine", - props( - name = r#"Kit (Advanced Packaging Machine)"#, - desc = r#""#, - value = "-598545233" - ) - )] - ItemKitAdvancedPackagingMachine = -598545233i32, - #[strum( - serialize = "ItemChemLightGreen", - props( - name = r#"Chem Light (Green)"#, - desc = r#"Enliven the dreariest, airless rock with this glowy green light. Snap to activate."#, - value = "-597479390" - ) - )] - ItemChemLightGreen = -597479390i32, - #[strum( - serialize = "EntityRoosterBrown", - props( - name = r#"Entity Rooster Brown"#, - desc = r#"The common brown rooster. Don't let it hear you say that."#, - value = "-583103395" - ) - )] - EntityRoosterBrown = -583103395i32, - #[strum( - serialize = "StructureLargeExtendableRadiator", - props( - name = r#"Large Extendable Radiator"#, - desc = r#"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", - props( - name = r#"Medium Hangar Door"#, - desc = r#"1 x 2 modular door piece for building hangar doors."#, - value = "-566348148" - ) - )] - StructureMediumHangerDoor = -566348148i32, - #[strum( - serialize = "StructureLaunchMount", - props( - name = r#"Launch Mount"#, - desc = r#"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", - props(name = r#"Short Locker"#, desc = r#""#, value = "-554553467") - )] - StructureShortLocker = -554553467i32, - #[strum( - serialize = "ItemKitCrateMount", - props(name = r#"Kit (Container Mount)"#, desc = r#""#, value = "-551612946") - )] - ItemKitCrateMount = -551612946i32, - #[strum( - serialize = "ItemKitCryoTube", - props(name = r#"Kit (Cryo Tube)"#, desc = r#""#, value = "-545234195") - )] - ItemKitCryoTube = -545234195i32, - #[strum( - serialize = "StructureSolarPanelDual", - props( - name = r#"Solar Panel (Dual)"#, - desc = r#"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", - props(name = r#"Switch Grass"#, desc = r#""#, value = "-532672323") - )] - ItemPlantSwitchGrass = -532672323i32, - #[strum( - serialize = "StructureInsulatedPipeLiquidTJunction", - props( - name = r#"Insulated Liquid Pipe (T Junction)"#, - desc = r#"Liquid piping with very low temperature loss or gain."#, - value = "-532384855" - ) - )] - StructureInsulatedPipeLiquidTJunction = -532384855i32, - #[strum( - serialize = "ItemKitSolarPanelBasicReinforced", - props( - name = r#"Kit (Solar Panel Basic Heavy)"#, - desc = r#""#, - value = "-528695432" - ) - )] - ItemKitSolarPanelBasicReinforced = -528695432i32, - #[strum( - serialize = "ItemChemLightRed", - props( - name = r#"Chem Light (Red)"#, - desc = r#"A red glowstick. Snap to activate. Then reach for the lasers."#, - value = "-525810132" - ) - )] - ItemChemLightRed = -525810132i32, - #[strum( - serialize = "ItemKitWallIron", - props(name = r#"Kit (Iron Wall)"#, desc = r#""#, value = "-524546923") - )] - ItemKitWallIron = -524546923i32, - #[strum( - serialize = "ItemEggCarton", - props( - name = r#"Egg Carton"#, - desc = r#"Within, eggs reside in mysterious, marmoreal silence."#, - value = "-524289310" - ) - )] - ItemEggCarton = -524289310i32, - #[strum( - serialize = "StructureWaterDigitalValve", - props(name = r#"Liquid Digital Valve"#, desc = r#""#, value = "-517628750") - )] - StructureWaterDigitalValve = -517628750i32, - #[strum( - serialize = "StructureSmallDirectHeatExchangeLiquidtoLiquid", - props( - name = r#"Small Direct Heat Exchanger - Liquid + Liquid"#, - desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, - value = "-507770416" - ) - )] - StructureSmallDirectHeatExchangeLiquidtoLiquid = -507770416i32, - #[strum( - serialize = "ItemWirelessBatteryCellExtraLarge", - props( - name = r#"Wireless Battery Cell Extra Large"#, - desc = r#"0.Empty -1.Critical -2.VeryLow -3.Low -4.Medium -5.High -6.Full"#, - value = "-504717121" - ) - )] - ItemWirelessBatteryCellExtraLarge = -504717121i32, - #[strum( - serialize = "ItemGasFilterPollutantsInfinite", - props( - name = r#"Catalytic Filter (Pollutants)"#, - desc = r#"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", - props( - name = r#"Spray Paint (Blue)"#, - desc = r#"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", - props( - name = r#"Respawn Point (Mounted)"#, - desc = r#""#, - value = "-491247370" - ) - )] - RespawnPointWallMounted = -491247370i32, - #[strum( - serialize = "ItemIronSheets", - props(name = r#"Iron Sheets"#, desc = r#""#, value = "-487378546") - )] - ItemIronSheets = -487378546i32, - #[strum( - serialize = "ItemGasCanisterVolatiles", - props(name = r#"Canister (Volatiles)"#, desc = r#""#, value = "-472094806") - )] - ItemGasCanisterVolatiles = -472094806i32, - #[strum( - serialize = "ItemCableCoil", - props( - name = r#"Cable Coil"#, - desc = r#"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. -Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, - value = "-466050668" - ) - )] - ItemCableCoil = -466050668i32, - #[strum( - serialize = "StructureToolManufactory", - props( - name = r#"Tool Manufactory"#, - desc = r#"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. -Upgrade the device using a Tool Printer Mod for additional recipes and faster processing speeds."#, - value = "-465741100" - ) - )] - StructureToolManufactory = -465741100i32, - #[strum( - serialize = "StructureAdvancedPackagingMachine", - props( - name = r#"Advanced Packaging Machine"#, - desc = r#"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", - props( - name = r#"Battery Wireless Cell"#, - desc = r#"0.Empty -1.Critical -2.VeryLow -3.Low -4.Medium -5.High -6.Full"#, - value = "-462415758" - ) - )] - BatteryWirelessCell = -462415758i32, - #[strum( - serialize = "ItemBatteryCellLarge", - props( - name = r#"Battery Cell (Large)"#, - desc = r#"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. - -POWER OUTPUT -The large power cell can discharge 288kW of power. -"#, - value = "-459827268" - ) - )] - ItemBatteryCellLarge = -459827268i32, - #[strum( - serialize = "StructureLiquidVolumePump", - props(name = r#"Liquid Volume Pump"#, desc = r#""#, value = "-454028979") - )] - StructureLiquidVolumePump = -454028979i32, - #[strum( - serialize = "ItemKitTransformer", - props( - name = r#"Kit (Transformer Large)"#, - desc = r#""#, - value = "-453039435" - ) - )] - ItemKitTransformer = -453039435i32, - #[strum( - serialize = "StructureVendingMachine", - props( - name = r#"Vending Machine"#, - desc = r#"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 = "StructurePipeHeater", - props( - name = r#"Pipe Heater (Gas)"#, - desc = r#"Adds 1000 joules of heat per tick to the contents of your pipe network."#, - value = "-419758574" - ) - )] - StructurePipeHeater = -419758574i32, - #[strum( - serialize = "StructurePipeCrossJunction4", - props( - name = r#"Pipe (4-Way Junction)"#, - desc = r#"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", - props(name = r#"Ladder"#, desc = r#""#, value = "-415420281") - )] - StructureLadder = -415420281i32, - #[strum( - serialize = "ItemHardJetpack", - props( - name = r#"Hardsuit Jetpack"#, - desc = r#"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. -The 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. -USE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move."#, - value = "-412551656" - ) - )] - ItemHardJetpack = -412551656i32, - #[strum( - serialize = "CircuitboardCameraDisplay", - props( - name = r#"Camera Display"#, - desc = r#"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 = "ItemCopperIngot", - props( - name = r#"Ingot (Copper)"#, - desc = r#"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 = "ReagentColorOrange", - props(name = r#"Color Dye (Orange)"#, desc = r#""#, value = "-400696159") - )] - ReagentColorOrange = -400696159i32, - #[strum( - serialize = "StructureBattery", - props( - name = r#"Station Battery"#, - desc = r#"Providing large-scale, reliable power storage, the Sinotai 'Dianzi' station battery is the heart of most Stationeer bases. -There 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.' -POWER OUTPUT -Able 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", - props( - name = r#"Pipe Radiator"#, - desc = r#"A pipe mounted radiator optimized for radiating heat in vacuums."#, - value = "-399883995" - ) - )] - StructurePipeRadiatorFlat = -399883995i32, - #[strum( - serialize = "StructureCompositeCladdingAngledLong", - props( - name = r#"Composite Cladding (Long Angled)"#, - desc = r#""#, - value = "-387546514" - ) - )] - StructureCompositeCladdingAngledLong = -387546514i32, - #[strum( - serialize = "DynamicGasTankAdvanced", - props( - name = r#"Gas Tank Mk II"#, - desc = r#"0.Mode0 -1.Mode1"#, - value = "-386375420" - ) - )] - DynamicGasTankAdvanced = -386375420i32, - #[strum( - serialize = "WeaponPistolEnergy", - props( - name = r#"Energy Pistol"#, - desc = r#"0.Stun -1.Kill"#, - value = "-385323479" - ) - )] - WeaponPistolEnergy = -385323479i32, - #[strum( - serialize = "ItemFertilizedEgg", - props( - name = r#"Egg"#, - desc = r#"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", - props( - name = r#"Mining-Drill Head (Ice)"#, - desc = r#""#, - value = "-380904592" - ) - )] - ItemRocketMiningDrillHeadIce = -380904592i32, - #[strum( - serialize = "Flag_ODA_8m", - props(name = r#"Flag (ODA 8m)"#, desc = r#""#, value = "-375156130") - )] - FlagOda8M = -375156130i32, - #[strum( - serialize = "AccessCardGreen", - props(name = r#"Access Card (Green)"#, desc = r#""#, value = "-374567952") - )] - AccessCardGreen = -374567952i32, - #[strum( - serialize = "StructureChairBoothCornerLeft", - props( - name = r#"Chair (Booth Corner Left)"#, - desc = r#""#, - value = "-367720198" - ) - )] - StructureChairBoothCornerLeft = -367720198i32, - #[strum( - serialize = "ItemKitFuselage", - props(name = r#"Kit (Fuselage)"#, desc = r#""#, value = "-366262681") - )] - ItemKitFuselage = -366262681i32, - #[strum( - serialize = "ItemSolidFuel", - props( - name = r#"Solid Fuel (Hydrocarbon)"#, - desc = r#""#, - value = "-365253871" - ) - )] - ItemSolidFuel = -365253871i32, - #[strum( - serialize = "ItemKitSolarPanelReinforced", - props( - name = r#"Kit (Solar Panel Heavy)"#, - desc = r#""#, - value = "-364868685" - ) - )] - ItemKitSolarPanelReinforced = -364868685i32, - #[strum( - serialize = "ItemToolBelt", - props( - name = r#"Tool Belt"#, - desc = r#"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). -Designed 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", - props( - name = r#"Emergency Angle Grinder"#, - desc = r#""#, - value = "-351438780" - ) - )] - ItemEmergencyAngleGrinder = -351438780i32, - #[strum( - serialize = "StructureCableFuse50k", - props(name = r#"Fuse (50kW)"#, desc = r#""#, value = "-349716617") - )] - StructureCableFuse50K = -349716617i32, - #[strum( - serialize = "StructureCompositeCladdingAngledCornerLongR", - props( - name = r#"Composite Cladding (Long Angled Mirrored Corner)"#, - desc = r#""#, - value = "-348918222" - ) - )] - StructureCompositeCladdingAngledCornerLongR = -348918222i32, - #[strum( - serialize = "StructureFiltration", - props( - name = r#"Filtration"#, - desc = r#"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). -The 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. -"#, - value = "-348054045" - ) - )] - StructureFiltration = -348054045i32, - #[strum( - serialize = "StructureLogicReader", - props(name = r#"Logic Reader"#, desc = r#""#, value = "-345383640") - )] - StructureLogicReader = -345383640i32, - #[strum( - serialize = "ItemKitMotherShipCore", - props(name = r#"Kit (Mothership)"#, desc = r#""#, value = "-344968335") - )] - ItemKitMotherShipCore = -344968335i32, - #[strum( - serialize = "StructureCamera", - props( - name = r#"Camera"#, - desc = r#"Nothing says 'I care' like a security camera that's been linked a Motion Sensor and a Console fitted with a Camera Display. -Be there, even when you're not."#, - value = "-342072665" - ) - )] - StructureCamera = -342072665i32, - #[strum( - serialize = "StructureCableJunctionHBurnt", - props(name = r#"Burnt Cable (Junction)"#, desc = r#""#, value = "-341365649") - )] - StructureCableJunctionHBurnt = -341365649i32, - #[strum( - serialize = "MotherboardComms", - props( - name = r#"Communications Motherboard"#, - desc = r#"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."#, - value = "-337075633" - ) - )] - MotherboardComms = -337075633i32, - #[strum( - serialize = "AccessCardOrange", - props(name = r#"Access Card (Orange)"#, desc = r#""#, value = "-332896929") - )] - AccessCardOrange = -332896929i32, - #[strum( - serialize = "StructurePowerTransmitterOmni", - props(name = r#"Power Transmitter Omni"#, desc = r#""#, value = "-327468845") - )] - StructurePowerTransmitterOmni = -327468845i32, - #[strum( - serialize = "StructureGlassDoor", - props( - name = r#"Glass Door"#, - desc = r#"0.Operate -1.Logic"#, - value = "-324331872" - ) - )] - StructureGlassDoor = -324331872i32, - #[strum( - serialize = "DynamicGasCanisterCarbonDioxide", - props( - name = r#"Portable Gas Tank (CO2)"#, - desc = r#"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", - props( - name = r#"Volume Pump"#, - desc = r#"The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks."#, - value = "-321403609" - ) - )] - StructureVolumePump = -321403609i32, - #[strum( - serialize = "DynamicMKIILiquidCanisterWater", - props( - name = r#"Portable Liquid Tank Mk II (Water)"#, - desc = r#"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", - props(name = r#"Kit (Rocket Battery)"#, desc = r#""#, value = "-314072139") - )] - ItemKitRocketBattery = -314072139i32, - #[strum( - serialize = "ElectronicPrinterMod", - props( - name = r#"Electronic Printer Mod"#, - desc = r#"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", - props( - name = r#"Wreckage Hydroponics Tray"#, - desc = r#""#, - value = "-310178617" - ) - )] - ItemWreckageHydroponicsTray1 = -310178617i32, - #[strum( - serialize = "ItemKitRocketCelestialTracker", - props( - name = r#"Kit (Rocket Celestial Tracker)"#, - desc = r#""#, - value = "-303008602" - ) - )] - ItemKitRocketCelestialTracker = -303008602i32, - #[strum( - serialize = "StructureFrameSide", - props( - name = r#"Steel Frame (Side)"#, - desc = r#"More durable than the Iron Frame, steel frames also provide variations for more ornate constructions."#, - value = "-302420053" - ) - )] - StructureFrameSide = -302420053i32, - #[strum( - serialize = "ItemInvarIngot", - props(name = r#"Ingot (Invar)"#, desc = r#""#, value = "-297990285") - )] - ItemInvarIngot = -297990285i32, - #[strum( - serialize = "StructureSmallTableThickSingle", - props( - name = r#"Small Table (Thick Single)"#, - desc = r#""#, - value = "-291862981" - ) - )] - StructureSmallTableThickSingle = -291862981i32, - #[strum( - serialize = "ItemSiliconIngot", - props(name = r#"Ingot (Silicon)"#, desc = r#""#, value = "-290196476") - )] - ItemSiliconIngot = -290196476i32, - #[strum( - serialize = "StructureLiquidPipeHeater", - props( - name = r#"Pipe Heater (Liquid)"#, - desc = r#"Adds 1000 joules of heat per tick to the contents of your pipe network."#, - value = "-287495560" - ) - )] - StructureLiquidPipeHeater = -287495560i32, - #[strum( - serialize = "ItemChocolateCake", - props(name = r#"Chocolate Cake"#, desc = r#""#, value = "-261575861") - )] - ItemChocolateCake = -261575861i32, - #[strum( - serialize = "StructureStirlingEngine", - props( - name = r#"Stirling Engine"#, - desc = r#"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. - -When 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. - -Gases 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", - props( - name = r#"Composite Cladding (Rounded)"#, - desc = r#""#, - value = "-259357734" - ) - )] - StructureCompositeCladdingRounded = -259357734i32, - #[strum( - serialize = "SMGMagazine", - props(name = r#"SMG Magazine"#, desc = r#""#, value = "-256607540") - )] - SmgMagazine = -256607540i32, - #[strum( - serialize = "ItemLiquidPipeHeater", - props( - name = r#"Pipe Heater Kit (Liquid)"#, - desc = r#"Creates a Pipe Heater (Liquid)."#, - value = "-248475032" - ) - )] - ItemLiquidPipeHeater = -248475032i32, - #[strum( - serialize = "StructureArcFurnace", - props( - name = r#"Arc Furnace"#, - desc = r#"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. -Co-opted by the ODA, it now provides Stationeers with a way to produce pure ingots of various resources. -The 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. -Unlike the more advanced Furnace, the arc furnace cannot create alloys."#, - value = "-247344692" - ) - )] - StructureArcFurnace = -247344692i32, - #[strum( - serialize = "ItemTablet", - props( - name = r#"Handheld Tablet"#, - desc = r#"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."#, - value = "-229808600" - ) - )] - ItemTablet = -229808600i32, - #[strum( - serialize = "StructureGovernedGasEngine", - props( - name = r#"Pumped Gas Engine"#, - desc = r#"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", - props( - name = r#"Stairs with Rail (Right)"#, - desc = r#""#, - value = "-212902482" - ) - )] - StructureStairs4X2RailR = -212902482i32, - #[strum( - serialize = "ItemLeadOre", - props( - name = r#"Ore (Lead)"#, - desc = r#"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", - props(name = r#"Beacon"#, desc = r#""#, value = "-188177083") - )] - StructureBeacon = -188177083i32, - #[strum( - serialize = "ItemGasFilterCarbonDioxideInfinite", - props( - name = r#"Catalytic Filter (Carbon Dioxide)"#, - desc = r#"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", - props(name = r#"Liquid Canister"#, desc = r#""#, value = "-185207387") - )] - ItemLiquidCanisterEmpty = -185207387i32, - #[strum( - serialize = "ItemMKIIWireCutters", - props( - name = r#"Mk II Wire Cutters"#, - desc = r#"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", - props( - name = r#"Hades Flower (Alpha strain)"#, - desc = r#"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", - props( - name = r#"Insulated In-Line Tank Gas"#, - desc = r#""#, - value = "-177610944" - ) - )] - StructureInsulatedInLineTankGas1X2 = -177610944i32, - #[strum( - serialize = "StructureCableCornerBurnt", - props(name = r#"Burnt Cable (Corner)"#, desc = r#""#, value = "-177220914") - )] - StructureCableCornerBurnt = -177220914i32, - #[strum( - serialize = "StructureCableJunction", - props( - name = r#"Cable (Junction)"#, - desc = r#"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. -Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, - value = "-175342021" - ) - )] - StructureCableJunction = -175342021i32, - #[strum( - serialize = "ItemKitLaunchTower", - props( - name = r#"Kit (Rocket Launch Tower)"#, - desc = r#""#, - value = "-174523552" - ) - )] - ItemKitLaunchTower = -174523552i32, - #[strum( - serialize = "StructureBench3", - props(name = r#"Bench (Frame Style)"#, desc = r#""#, value = "-164622691") - )] - StructureBench3 = -164622691i32, - #[strum( - serialize = "MotherboardProgrammableChip", - props( - name = r#"IC Editor Motherboard"#, - desc = r#"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."#, - value = "-161107071" - ) - )] - MotherboardProgrammableChip = -161107071i32, - #[strum( - serialize = "ItemSprayCanOrange", - props( - name = r#"Spray Paint (Orange)"#, - desc = r#"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", - props(name = r#"Wall (Padded Corner)"#, desc = r#""#, value = "-155945899") - )] - StructureWallPaddedCorner = -155945899i32, - #[strum( - serialize = "StructureCableStraightH", - props(name = r#"Heavy Cable (Straight)"#, desc = r#""#, value = "-146200530") - )] - StructureCableStraightH = -146200530i32, - #[strum( - serialize = "StructureDockPortSide", - props(name = r#"Dock (Port Side)"#, desc = r#""#, value = "-137465079") - )] - StructureDockPortSide = -137465079i32, - #[strum( - serialize = "StructureCircuitHousing", - props(name = r#"IC Housing"#, desc = r#""#, value = "-128473777") - )] - StructureCircuitHousing = -128473777i32, - #[strum( - serialize = "MotherboardMissionControl", - props( - name = r#""#, - desc = r#""#, - value = "-127121474" - ) - )] - MotherboardMissionControl = -127121474i32, - #[strum( - serialize = "ItemKitSpeaker", - props(name = r#"Kit (Speaker)"#, desc = r#""#, value = "-126038526") - )] - ItemKitSpeaker = -126038526i32, - #[strum( - serialize = "StructureLogicReagentReader", - props(name = r#"Reagent Reader"#, desc = r#""#, value = "-124308857") - )] - StructureLogicReagentReader = -124308857i32, - #[strum( - serialize = "ItemGasFilterNitrousOxideInfinite", - props( - name = r#"Catalytic Filter (Nitrous Oxide)"#, - desc = r#"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", - props( - name = r#"Kit (Pressure Fed Gas Engine)"#, - desc = r#""#, - value = "-121514007" - ) - )] - ItemKitPressureFedGasEngine = -121514007i32, - #[strum( - serialize = "StructureCableJunction4HBurnt", - props( - name = r#"Burnt Cable (4-Way Junction)"#, - desc = r#""#, - value = "-115809132" - ) - )] - StructureCableJunction4HBurnt = -115809132i32, - #[strum( - serialize = "ElevatorCarrage", - props(name = r#"Elevator"#, desc = r#""#, value = "-110788403") - )] - ElevatorCarrage = -110788403i32, - #[strum( - serialize = "StructureFairingTypeA2", - props(name = r#"Fairing (Type A2)"#, desc = r#""#, value = "-104908736") - )] - StructureFairingTypeA2 = -104908736i32, - #[strum( - serialize = "ItemKitPressureFedLiquidEngine", - props( - name = r#"Kit (Pressure Fed Liquid Engine)"#, - desc = r#""#, - value = "-99091572" - ) - )] - ItemKitPressureFedLiquidEngine = -99091572i32, - #[strum( - serialize = "Meteorite", - props(name = r#"Meteorite"#, desc = r#""#, value = "-99064335") - )] - Meteorite = -99064335i32, - #[strum( - serialize = "ItemKitArcFurnace", - props(name = r#"Kit (Arc Furnace)"#, desc = r#""#, value = "-98995857") - )] - ItemKitArcFurnace = -98995857i32, - #[strum( - serialize = "StructureInsulatedPipeCrossJunction", - props( - name = r#"Insulated Pipe (Cross Junction)"#, - desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, - value = "-92778058" - ) - )] - StructureInsulatedPipeCrossJunction = -92778058i32, - #[strum( - serialize = "ItemWaterPipeMeter", - props(name = r#"Kit (Liquid Pipe Meter)"#, desc = r#""#, value = "-90898877") - )] - ItemWaterPipeMeter = -90898877i32, - #[strum( - serialize = "FireArmSMG", - props( - name = r#"Fire Arm SMG"#, - desc = r#"0.Single -1.Auto"#, - value = "-86315541" - ) - )] - FireArmSmg = -86315541i32, - #[strum( - serialize = "ItemHardsuitHelmet", - props( - name = r#"Hardsuit Helmet"#, - desc = r#"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", - props(name = r#"Ingot (Solder)"#, desc = r#""#, value = "-82508479") - )] - ItemSolderIngot = -82508479i32, - #[strum( - serialize = "CircuitboardGasDisplay", - props( - name = r#"Gas Display"#, - desc = r#"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", - props( - name = r#"Portable Generator"#, - desc = r#"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", - props(name = r#"Flower (Red)"#, desc = r#""#, value = "-81376085") - )] - ItemFlowerRed = -81376085i32, - #[strum( - serialize = "KitchenTableSimpleShort", - props( - name = r#"Kitchen Table (Simple Short)"#, - desc = r#""#, - value = "-78099334" - ) - )] - KitchenTableSimpleShort = -78099334i32, - #[strum( - serialize = "ImGuiCircuitboardAirlockControl", - props(name = r#"Airlock (Experimental)"#, desc = r#""#, value = "-73796547") - )] - ImGuiCircuitboardAirlockControl = -73796547i32, - #[strum( - serialize = "StructureInsulatedPipeLiquidCrossJunction6", - props( - name = r#"Insulated Liquid Pipe (6-Way Junction)"#, - desc = r#"Liquid piping with very low temperature loss or gain."#, - value = "-72748982" - ) - )] - StructureInsulatedPipeLiquidCrossJunction6 = -72748982i32, - #[strum( - serialize = "StructureCompositeCladdingAngledCorner", - props( - name = r#"Composite Cladding (Angled Corner)"#, - desc = r#""#, - value = "-69685069" - ) - )] - StructureCompositeCladdingAngledCorner = -69685069i32, - #[strum( - serialize = "StructurePowerTransmitter", - props( - name = r#"Microwave Power Transmitter"#, - desc = r#"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. -The 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", - props( - name = r#"Canned French Fries"#, - desc = r#"Because space would suck without 'em."#, - value = "-57608687" - ) - )] - ItemFrenchFries = -57608687i32, - #[strum( - serialize = "StructureConsoleLED1x2", - props( - name = r#"LED Display (Medium)"#, - desc = r#"0.Default -1.Percent -2.Power"#, - value = "-53151617" - ) - )] - StructureConsoleLed1X2 = -53151617i32, - #[strum( - serialize = "UniformMarine", - props(name = r#"Marine Uniform"#, desc = r#""#, value = "-48342840") - )] - UniformMarine = -48342840i32, - #[strum( - serialize = "Battery_Wireless_cell_Big", - props( - name = r#"Battery Wireless Cell (Big)"#, - desc = r#"0.Empty -1.Critical -2.VeryLow -3.Low -4.Medium -5.High -6.Full"#, - value = "-41519077" - ) - )] - BatteryWirelessCellBig = -41519077i32, - #[strum( - serialize = "StructureCableCornerH", - props(name = r#"Heavy Cable (Corner)"#, desc = r#""#, value = "-39359015") - )] - StructureCableCornerH = -39359015i32, - #[strum( - serialize = "ItemPipeCowl", - props( - name = r#"Pipe Cowl"#, - desc = r#"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", - props(name = r#"Stairwell (Front Left)"#, desc = r#""#, value = "-37454456") - )] - StructureStairwellFrontLeft = -37454456i32, - #[strum( - serialize = "StructureWallPaddedWindowThin", - props( - name = r#"Wall (Padded Window Thin)"#, - desc = r#""#, - value = "-37302931" - ) - )] - StructureWallPaddedWindowThin = -37302931i32, - #[strum( - serialize = "StructureInsulatedTankConnector", - props( - name = r#"Insulated Tank Connector"#, - desc = r#""#, - value = "-31273349" - ) - )] - StructureInsulatedTankConnector = -31273349i32, - #[strum( - serialize = "ItemKitInsulatedPipeUtility", - props( - name = r#"Kit (Insulated Pipe Utility Gas)"#, - desc = r#""#, - value = "-27284803" - ) - )] - ItemKitInsulatedPipeUtility = -27284803i32, - #[strum( - serialize = "DynamicLight", - props( - name = r#"Portable Light"#, - desc = r#"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", - props(name = r#"Kit (Battery Large)"#, desc = r#""#, value = "-21225041") - )] - ItemKitBatteryLarge = -21225041i32, - #[strum( - serialize = "StructureSmallTableThickDouble", - props( - name = r#"Small (Table Thick Double)"#, - desc = r#""#, - value = "-19246131" - ) - )] - StructureSmallTableThickDouble = -19246131i32, - #[strum( - serialize = "ItemAmmoBox", - props(name = r#"Ammo Box"#, desc = r#""#, value = "-9559091") - )] - ItemAmmoBox = -9559091i32, - #[strum( - serialize = "StructurePipeLiquidCrossJunction4", - props( - name = r#"Liquid Pipe (4-Way Junction)"#, - desc = r#"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", - props( - name = r#"Dynamic Gas Canister Rocket Fuel"#, - desc = r#""#, - value = "-8883951" - ) - )] - DynamicGasCanisterRocketFuel = -8883951i32, - #[strum( - serialize = "ItemPureIcePollutant", - props( - name = r#"Pure Ice Pollutant"#, - desc = r#"A frozen chunk of pure Pollutant"#, - value = "-1755356" - ) - )] - ItemPureIcePollutant = -1755356i32, - #[strum( - serialize = "ItemWreckageLargeExtendableRadiator01", - props( - name = r#"Wreckage Large Extendable Radiator"#, - desc = r#""#, - value = "-997763" - ) - )] - ItemWreckageLargeExtendableRadiator01 = -997763i32, - #[strum( - serialize = "StructureSingleBed", - props( - name = r#"Single Bed"#, - desc = r#"Description coming."#, - value = "-492611" - ) - )] - StructureSingleBed = -492611i32, - #[strum( - serialize = "StructureCableCorner3HBurnt", - props( - name = r#""#, - desc = r#""#, - value = "2393826" - ) - )] - StructureCableCorner3HBurnt = 2393826i32, - #[strum( - serialize = "StructureAutoMinerSmall", - props( - name = r#"Autominer (Small)"#, - desc = r#"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", - props( - name = r#"Crate Mk II"#, - desc = r#"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", - props(name = r#"Medium Filter (Water)"#, desc = r#""#, value = "8804422") - )] - ItemGasFilterWaterM = 8804422i32, - #[strum( - serialize = "StructureWallPaddedNoBorder", - props(name = r#"Wall (Padded No Border)"#, desc = r#""#, value = "8846501") - )] - StructureWallPaddedNoBorder = 8846501i32, - #[strum( - serialize = "ItemGasFilterVolatiles", - props( - name = r#"Filter (Volatiles)"#, - desc = r#"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", - props( - name = r#"Mining Charge"#, - desc = r#"A low cost, high yield explosive with a 10 second timer."#, - value = "15829510" - ) - )] - ItemMiningCharge = 15829510i32, - #[strum( - serialize = "ItemKitEngineSmall", - props(name = r#"Kit (Engine Small)"#, desc = r#""#, value = "19645163") - )] - ItemKitEngineSmall = 19645163i32, - #[strum( - serialize = "StructureHeatExchangerGastoGas", - props( - name = r#"Heat Exchanger - Gas"#, - desc = r#"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. -The '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. -As 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", - props( - name = r#"Pressurant Valve"#, - desc = r#"Pumps gas into a liquid pipe in order to raise the pressure"#, - value = "23052817" - ) - )] - StructurePressurantValve = 23052817i32, - #[strum( - serialize = "StructureWallHeater", - props( - name = r#"Wall Heater"#, - desc = r#"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", - props( - name = r#"Medium Convection Radiator Liquid"#, - desc = r#"Has been replaced by Medium Convection Radiator Liquid."#, - value = "24786172" - ) - )] - StructurePassiveLargeRadiatorLiquid = 24786172i32, - #[strum( - serialize = "StructureWallPlating", - props(name = r#"Wall (Plating)"#, desc = r#""#, value = "26167457") - )] - StructureWallPlating = 26167457i32, - #[strum( - serialize = "ItemSprayCanPurple", - props( - name = r#"Spray Paint (Purple)"#, - desc = r#"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", - props( - name = r#"Portable Gas Tank (Nitrous Oxide)"#, - desc = r#""#, - value = "30727200" - ) - )] - DynamicGasCanisterNitrousOxide = 30727200i32, - #[strum( - serialize = "StructureInLineTankGas1x2", - props( - name = r#"In-Line Tank Gas"#, - desc = r#"A small expansion tank that increases the volume of a pipe network."#, - value = "35149429" - ) - )] - StructureInLineTankGas1X2 = 35149429i32, - #[strum( - serialize = "ItemSteelSheets", - props( - name = r#"Steel Sheets"#, - desc = r#"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", - props(name = r#"Canister"#, desc = r#""#, value = "42280099") - )] - ItemGasCanisterEmpty = 42280099i32, - #[strum( - serialize = "ItemWreckageWallCooler2", - props(name = r#"Wreckage Wall Cooler"#, desc = r#""#, value = "45733800") - )] - ItemWreckageWallCooler2 = 45733800i32, - #[strum( - serialize = "ItemPumpkinPie", - props(name = r#"Pumpkin Pie"#, desc = r#""#, value = "62768076") - )] - ItemPumpkinPie = 62768076i32, - #[strum( - serialize = "ItemGasFilterPollutantsM", - props( - name = r#"Medium Filter (Pollutants)"#, - desc = r#""#, - value = "63677771" - ) - )] - ItemGasFilterPollutantsM = 63677771i32, - #[strum( - serialize = "StructurePipeStraight", - props( - name = r#"Pipe (Straight)"#, - desc = r#"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", - props(name = r#"Kit (Docking Port)"#, desc = r#""#, value = "77421200") - )] - ItemKitDockingPort = 77421200i32, - #[strum( - serialize = "CartridgeTracker", - props(name = r#"Tracker"#, desc = r#""#, value = "81488783") - )] - CartridgeTracker = 81488783i32, - #[strum( - serialize = "ToyLuna", - props(name = r#"Toy Luna"#, desc = r#""#, value = "94730034") - )] - ToyLuna = 94730034i32, - #[strum( - serialize = "ItemWreckageTurbineGenerator2", - props( - name = r#"Wreckage Turbine Generator"#, - desc = r#""#, - value = "98602599" - ) - )] - ItemWreckageTurbineGenerator2 = 98602599i32, - #[strum( - serialize = "StructurePowerUmbilicalFemale", - props( - name = r#"Umbilical Socket (Power)"#, - desc = r#""#, - value = "101488029" - ) - )] - StructurePowerUmbilicalFemale = 101488029i32, - #[strum( - serialize = "DynamicSkeleton", - props(name = r#"Skeleton"#, desc = r#""#, value = "106953348") - )] - DynamicSkeleton = 106953348i32, - #[strum( - serialize = "ItemWaterBottle", - props( - name = r#"Water Bottle"#, - desc = r#"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", - props( - name = r#"Portable Gas Tank (Volatiles)"#, - desc = r#"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", - props( - name = r#"Composite Cladding (Rounded Corner Inner)"#, - desc = r#""#, - value = "110184667" - ) - )] - StructureCompositeCladdingRoundedCornerInner = 110184667i32, - #[strum( - serialize = "ItemTerrainManipulator", - props( - name = r#"Terrain Manipulator"#, - desc = r#"0.Mode0 -1.Mode1"#, - value = "111280987" - ) - )] - ItemTerrainManipulator = 111280987i32, - #[strum( - serialize = "FlareGun", - props(name = r#"Flare Gun"#, desc = r#""#, value = "118685786") - )] - FlareGun = 118685786i32, - #[strum( - serialize = "ItemKitPlanter", - props(name = r#"Kit (Planter)"#, desc = r#""#, value = "119096484") - )] - ItemKitPlanter = 119096484i32, - #[strum( - serialize = "ReagentColorGreen", - props(name = r#"Color Dye (Green)"#, desc = r#""#, value = "120807542") - )] - ReagentColorGreen = 120807542i32, - #[strum( - serialize = "DynamicGasCanisterNitrogen", - props( - name = r#"Portable Gas Tank (Nitrogen)"#, - desc = r#"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", - props(name = r#"Kit (Trigger Plate)"#, desc = r#""#, value = "123504691") - )] - ItemKitPressurePlate = 123504691i32, - #[strum( - serialize = "ItemKitLogicSwitch", - props(name = r#"Kit (Logic Switch)"#, desc = r#""#, value = "124499454") - )] - ItemKitLogicSwitch = 124499454i32, - #[strum( - serialize = "StructureCompositeCladdingSpherical", - props( - name = r#"Composite Cladding (Spherical)"#, - desc = r#""#, - value = "139107321" - ) - )] - StructureCompositeCladdingSpherical = 139107321i32, - #[strum( - serialize = "ItemLaptop", - props( - name = r#"Laptop"#, - desc = r#"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. - -You must place the laptop down to interact with the onsreen UI. - -Connects to Logic Transmitter"#, - value = "141535121" - ) - )] - ItemLaptop = 141535121i32, - #[strum( - serialize = "ApplianceSeedTray", - props( - name = r#"Appliance Seed Tray"#, - desc = r#"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", - props(name = r#"Landingpad Taxi Hold"#, desc = r#""#, value = "146051619") - )] - LandingpadTaxiPieceHold = 146051619i32, - #[strum( - serialize = "StructureFuselageTypeC5", - props(name = r#"Fuselage (Type C5)"#, desc = r#""#, value = "147395155") - )] - StructureFuselageTypeC5 = 147395155i32, - #[strum( - serialize = "ItemKitBasket", - props(name = r#"Kit (Basket)"#, desc = r#""#, value = "148305004") - )] - ItemKitBasket = 148305004i32, - #[strum( - serialize = "StructureRocketCircuitHousing", - props(name = r#"Rocket Circuit Housing"#, desc = r#""#, value = "150135861") - )] - StructureRocketCircuitHousing = 150135861i32, - #[strum( - serialize = "StructurePipeCrossJunction6", - props( - name = r#"Pipe (6-Way Junction)"#, - desc = r#"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", - props( - name = r#"Catalytic Filter (Nitrogen)"#, - desc = r#"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", - props(name = r#"Stairs with Rail (Left)"#, desc = r#""#, value = "155214029") - )] - StructureStairs4X2RailL = 155214029i32, - #[strum( - serialize = "NpcChick", - props(name = r#"Chick"#, desc = r#""#, value = "155856647") - )] - NpcChick = 155856647i32, - #[strum( - serialize = "ItemWaspaloyIngot", - props(name = r#"Ingot (Waspaloy)"#, desc = r#""#, value = "156348098") - )] - ItemWaspaloyIngot = 156348098i32, - #[strum( - serialize = "StructureReinforcedWallPaddedWindowThin", - props( - name = r#"Reinforced Window (Thin)"#, - desc = r#"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", - props( - name = r#"Kit (Water Bottle Filler)"#, - desc = r#""#, - value = "159886536" - ) - )] - ItemKitWaterBottleFiller = 159886536i32, - #[strum( - serialize = "ItemEmergencyWrench", - props(name = r#"Emergency Wrench"#, desc = r#""#, value = "162553030") - )] - ItemEmergencyWrench = 162553030i32, - #[strum( - serialize = "StructureChuteDigitalFlipFlopSplitterRight", - props( - name = r#"Chute Digital Flip Flop Splitter Right"#, - desc = r#"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", - props( - name = r#"Chute (Straight)"#, - desc = r#"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. -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. -Chutes 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", - props(name = r#"Kit (Door)"#, desc = r#""#, value = "168615924") - )] - ItemKitDoor = 168615924i32, - #[strum( - serialize = "ItemWreckageAirConditioner2", - props( - name = r#"Wreckage Air Conditioner"#, - desc = r#""#, - value = "169888054" - ) - )] - ItemWreckageAirConditioner2 = 169888054i32, - #[strum( - serialize = "Landingpad_GasCylinderTankPiece", - props( - name = r#"Landingpad Gas Storage"#, - desc = r#"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", - props(name = r#"Kit (Stairs)"#, desc = r#""#, value = "170878959") - )] - ItemKitStairs = 170878959i32, - #[strum( - serialize = "ItemPlantSampler", - props( - name = r#"Plant Sampler"#, - desc = r#"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", - props(name = r#"Alien Mushroom"#, desc = r#""#, value = "176446172") - )] - ItemAlienMushroom = 176446172i32, - #[strum( - serialize = "ItemKitSatelliteDish", - props( - name = r#"Kit (Medium Satellite Dish)"#, - desc = r#""#, - value = "178422810" - ) - )] - ItemKitSatelliteDish = 178422810i32, - #[strum( - serialize = "StructureRocketEngineTiny", - props(name = r#"Rocket Engine (Tiny)"#, desc = r#""#, value = "178472613") - )] - StructureRocketEngineTiny = 178472613i32, - #[strum( - serialize = "StructureWallPaddedNoBorderCorner", - props( - name = r#"Wall (Padded No Border Corner)"#, - desc = r#""#, - value = "179694804" - ) - )] - StructureWallPaddedNoBorderCorner = 179694804i32, - #[strum( - serialize = "StructureShelfMedium", - props( - name = r#"Shelf Medium"#, - desc = r#"A shelf for putting things on, so you can see them."#, - value = "182006674" - ) - )] - StructureShelfMedium = 182006674i32, - #[strum( - serialize = "StructureExpansionValve", - props( - name = r#"Expansion Valve"#, - desc = r#"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", - props(name = r#"Kit (Cable Fuses)"#, desc = r#""#, value = "195442047") - )] - ItemCableFuse = 195442047i32, - #[strum( - serialize = "ItemKitRoverMKI", - props(name = r#"Kit (Rover Mk I)"#, desc = r#""#, value = "197243872") - )] - ItemKitRoverMki = 197243872i32, - #[strum( - serialize = "DynamicGasCanisterWater", - props( - name = r#"Portable Liquid Tank (Water)"#, - desc = r#"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. -Try to keep pressure under 10 MPa, or you'll end up wet, hurt and sorry, without any of the fun. -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 = "197293625" - ) - )] - DynamicGasCanisterWater = 197293625i32, - #[strum( - serialize = "ItemAngleGrinder", - props( - name = r#"Angle Grinder"#, - desc = r#"Angles-be-gone with the trusty angle grinder."#, - value = "201215010" - ) - )] - ItemAngleGrinder = 201215010i32, - #[strum( - serialize = "StructureCableCornerH4", - props( - name = r#"Heavy Cable (4-Way Corner)"#, - desc = r#""#, - value = "205837861" - ) - )] - StructureCableCornerH4 = 205837861i32, - #[strum( - serialize = "ItemEmergencySpaceHelmet", - props(name = r#"Emergency Space Helmet"#, desc = r#""#, value = "205916793") - )] - ItemEmergencySpaceHelmet = 205916793i32, - #[strum( - serialize = "ItemKitGovernedGasRocketEngine", - props( - name = r#"Kit (Pumped Gas Rocket Engine)"#, - desc = r#""#, - value = "206848766" - ) - )] - ItemKitGovernedGasRocketEngine = 206848766i32, - #[strum( - serialize = "StructurePressureRegulator", - props( - name = r#"Pressure Regulator"#, - desc = r#"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", - props( - name = r#"Composite Cladding (Cylindrical)"#, - desc = r#""#, - value = "212919006" - ) - )] - StructureCompositeCladdingCylindrical = 212919006i32, - #[strum( - serialize = "ItemCropHay", - props(name = r#"Hay"#, desc = r#""#, value = "215486157") - )] - ItemCropHay = 215486157i32, - #[strum( - serialize = "ItemKitLogicProcessor", - props(name = r#"Kit (Logic Processor)"#, desc = r#""#, value = "220644373") - )] - ItemKitLogicProcessor = 220644373i32, - #[strum( - serialize = "AutolathePrinterMod", - props( - name = r#"Autolathe Printer Mod"#, - desc = r#"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", - props( - name = r#"Chute Overflow"#, - desc = r#"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", - props( - name = r#"Kit (Liquid Pipe Analyzer)"#, - desc = r#""#, - value = "226055671" - ) - )] - ItemLiquidPipeAnalyzer = 226055671i32, - #[strum( - serialize = "ItemGoldIngot", - props( - name = r#"Ingot (Gold)"#, - desc = r#"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", - props( - name = r#"Kit (Combustion Centrifuge)"#, - desc = r#""#, - value = "231903234" - ) - )] - KitStructureCombustionCentrifuge = 231903234i32, - #[strum( - serialize = "ItemChocolateBar", - props(name = r#"Chocolate Bar"#, desc = r#""#, value = "234601764") - )] - ItemChocolateBar = 234601764i32, - #[strum( - serialize = "ItemExplosive", - props(name = r#"Remote Explosive"#, desc = r#""#, value = "235361649") - )] - ItemExplosive = 235361649i32, - #[strum( - serialize = "StructureConsole", - props( - name = r#"Console"#, - desc = r#"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. -A 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", - props( - name = r#"Passive Vent"#, - desc = r#"This kit creates a Passive Vent among other variants."#, - value = "238631271" - ) - )] - ItemPassiveVent = 238631271i32, - #[strum( - serialize = "ItemMKIIAngleGrinder", - props( - name = r#"Mk II Angle Grinder"#, - desc = r#"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", - props(name = r#"Handgun"#, desc = r#""#, value = "247238062") - )] - Handgun = 247238062i32, - #[strum( - serialize = "PassiveSpeaker", - props(name = r#"Passive Speaker"#, desc = r#""#, value = "248893646") - )] - PassiveSpeaker = 248893646i32, - #[strum( - serialize = "ItemKitBeacon", - props(name = r#"Kit (Beacon)"#, desc = r#""#, value = "249073136") - )] - ItemKitBeacon = 249073136i32, - #[strum( - serialize = "ItemCharcoal", - props( - name = r#"Charcoal"#, - desc = r#"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", - props( - name = r#"Suit Storage"#, - desc = r#"As tidy as it is useful, the suit storage rack holds an Eva Suit, Space Helmet and a Jetpack Basic. -When 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. -All 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", - props( - name = r#"Corn"#, - desc = r#"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", - props( - name = r#"Liquid Pipe (T Junction)"#, - desc = r#"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", - props(name = r#"Batch Reader"#, desc = r#""#, value = "264413729") - )] - StructureLogicBatchReader = 264413729i32, - #[strum( - serialize = "StructureDeepMiner", - props( - name = r#"Deep Miner"#, - desc = r#"Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s"#, - value = "265720906" - ) - )] - StructureDeepMiner = 265720906i32, - #[strum( - serialize = "ItemEmergencyScrewdriver", - props(name = r#"Emergency Screwdriver"#, desc = r#""#, value = "266099983") - )] - ItemEmergencyScrewdriver = 266099983i32, - #[strum( - serialize = "ItemFilterFern", - props( - name = r#"Darga Fern"#, - desc = r#"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", - props( - name = r#"Burnt Cable (4-Way Corner)"#, - desc = r#""#, - value = "268421361" - ) - )] - StructureCableCorner4Burnt = 268421361i32, - #[strum( - serialize = "StructureFrameCornerCut", - props( - name = r#"Steel Frame (Corner Cut)"#, - desc = r#"0.Mode0 -1.Mode1"#, - value = "271315669" - ) - )] - StructureFrameCornerCut = 271315669i32, - #[strum( - serialize = "StructureTankSmallInsulated", - props(name = r#"Tank Small (Insulated)"#, desc = r#""#, value = "272136332") - )] - StructureTankSmallInsulated = 272136332i32, - #[strum( - serialize = "StructureCableFuse100k", - props(name = r#"Fuse (100kW)"#, desc = r#""#, value = "281380789") - )] - StructureCableFuse100K = 281380789i32, - #[strum( - serialize = "ItemKitIceCrusher", - props(name = r#"Kit (Ice Crusher)"#, desc = r#""#, value = "288111533") - )] - ItemKitIceCrusher = 288111533i32, - #[strum( - serialize = "ItemKitPowerTransmitter", - props(name = r#"Kit (Power Transmitter)"#, desc = r#""#, value = "291368213") - )] - ItemKitPowerTransmitter = 291368213i32, - #[strum( - serialize = "StructurePipeLiquidCrossJunction6", - props( - name = r#"Liquid Pipe (6-Way Junction)"#, - desc = r#"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", - props(name = r#"Kit (Landing Pad Basic)"#, desc = r#""#, value = "293581318") - )] - ItemKitLandingPadBasic = 293581318i32, - #[strum( - serialize = "StructureInsulatedPipeLiquidStraight", - props( - name = r#"Insulated Liquid Pipe (Straight)"#, - desc = r#"Liquid piping with very low temperature loss or gain."#, - value = "295678685" - ) - )] - StructureInsulatedPipeLiquidStraight = 295678685i32, - #[strum( - serialize = "StructureWallFlatCornerSquare", - props( - name = r#"Wall (Flat Corner Square)"#, - desc = r#""#, - value = "298130111" - ) - )] - StructureWallFlatCornerSquare = 298130111i32, - #[strum( - serialize = "ItemHat", - props( - name = r#"Hat"#, - desc = r#"As the name suggests, this is a hat."#, - value = "299189339" - ) - )] - ItemHat = 299189339i32, - #[strum( - serialize = "ItemWaterPipeDigitalValve", - props( - name = r#"Kit (Liquid Digital Valve)"#, - desc = r#""#, - value = "309693520" - ) - )] - ItemWaterPipeDigitalValve = 309693520i32, - #[strum( - serialize = "SeedBag_Mushroom", - props( - name = r#"Mushroom Seeds"#, - desc = r#"Grow a Mushroom."#, - value = "311593418" - ) - )] - SeedBagMushroom = 311593418i32, - #[strum( - serialize = "StructureCableCorner3Burnt", - props( - name = r#"Burnt Cable (3-Way Corner)"#, - desc = r#""#, - value = "318437449" - ) - )] - StructureCableCorner3Burnt = 318437449i32, - #[strum( - serialize = "StructureLogicSwitch2", - props(name = r#"Switch"#, desc = r#""#, value = "321604921") - )] - StructureLogicSwitch2 = 321604921i32, - #[strum( - serialize = "StructureOccupancySensor", - props( - name = r#"Occupancy Sensor"#, - desc = r#"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", - props(name = r#"Kit (SDB Hopper)"#, desc = r#""#, value = "323957548") - )] - ItemKitSdbHopper = 323957548i32, - #[strum( - serialize = "ItemMKIIDrill", - props( - name = r#"Mk II Drill"#, - desc = r#"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", - props( - name = r#"Composite Floor Grating"#, - desc = r#"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", - props(name = r#"Kit (Sleeper)"#, desc = r#""#, value = "326752036") - )] - ItemKitSleeper = 326752036i32, - #[strum( - serialize = "EntityChickenBrown", - props( - name = r#"Entity Chicken Brown"#, - desc = r#"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", - props( - name = r#"Passive Vent"#, - desc = r#"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", - props( - name = r#"Autolathe"#, - desc = r#"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. - "#, - value = "336213101" - ) - )] - StructureAutolathe = 336213101i32, - #[strum( - serialize = "AccessCardKhaki", - props(name = r#"Access Card (Khaki)"#, desc = r#""#, value = "337035771") - )] - AccessCardKhaki = 337035771i32, - #[strum( - serialize = "StructureBlastDoor", - props( - name = r#"Blast Door"#, - desc = r#"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. -Short 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", - props(name = r#"Kit (Weather Station)"#, desc = r#""#, value = "337505889") - )] - ItemKitWeatherStation = 337505889i32, - #[strum( - serialize = "StructureStairwellFrontRight", - props(name = r#"Stairwell (Front Right)"#, desc = r#""#, value = "340210934") - )] - StructureStairwellFrontRight = 340210934i32, - #[strum( - serialize = "ItemKitGrowLight", - props(name = r#"Kit (Grow Light)"#, desc = r#""#, value = "341030083") - )] - ItemKitGrowLight = 341030083i32, - #[strum( - serialize = "StructurePictureFrameThickMountLandscapeSmall", - props( - name = r#"Picture Frame Thick Landscape Small"#, - desc = r#""#, - value = "347154462" - ) - )] - StructurePictureFrameThickMountLandscapeSmall = 347154462i32, - #[strum( - serialize = "RoverCargo", - props( - name = r#"Rover (Cargo)"#, - desc = r#"Connects to Logic Transmitter"#, - value = "350726273" - ) - )] - RoverCargo = 350726273i32, - #[strum( - serialize = "StructureInsulatedPipeLiquidCrossJunction4", - props( - name = r#"Insulated Liquid Pipe (4-Way Junction)"#, - desc = r#"Liquid piping with very low temperature loss or gain."#, - value = "363303270" - ) - )] - StructureInsulatedPipeLiquidCrossJunction4 = 363303270i32, - #[strum( - serialize = "ItemHardBackpack", - props( - name = r#"Hardsuit Backpack"#, - desc = r#"This backpack can be useful when you are working inside and don't need to fly around."#, - value = "374891127" - ) - )] - ItemHardBackpack = 374891127i32, - #[strum( - serialize = "ItemKitDynamicLiquidCanister", - props( - name = r#"Kit (Portable Liquid Tank)"#, - desc = r#""#, - value = "375541286" - ) - )] - ItemKitDynamicLiquidCanister = 375541286i32, - #[strum( - serialize = "ItemKitGasGenerator", - props( - name = r#"Kit (Gas Fuel Generator)"#, - desc = r#""#, - value = "377745425" - ) - )] - ItemKitGasGenerator = 377745425i32, - #[strum( - serialize = "StructureBlocker", - props(name = r#"Blocker"#, desc = r#""#, value = "378084505") - )] - StructureBlocker = 378084505i32, - #[strum( - serialize = "StructurePressureFedLiquidEngine", - props( - name = r#"Pressure Fed Liquid Engine"#, - desc = r#"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 = "ItemPureIceNitrous", - props( - name = r#"Pure Ice NitrousOxide"#, - desc = r#"A frozen chunk of pure Nitrous Oxide"#, - value = "386754635" - ) - )] - ItemPureIceNitrous = 386754635i32, - #[strum( - serialize = "StructureWallSmallPanelsMonoChrome", - props( - name = r#"Wall (Small Panels Mono Chrome)"#, - desc = r#""#, - value = "386820253" - ) - )] - StructureWallSmallPanelsMonoChrome = 386820253i32, - #[strum( - serialize = "ItemMKIIDuctTape", - props( - name = r#"Mk II Duct Tape"#, - desc = r#"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. -To 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", - props(name = r#"Wreckage Structure RTG"#, desc = r#""#, value = "391453348") - )] - ItemWreckageStructureRtg1 = 391453348i32, - #[strum( - serialize = "ItemPipeLabel", - props( - name = r#"Kit (Pipe Label)"#, - desc = r#"This kit creates a Pipe Label."#, - value = "391769637" - ) - )] - ItemPipeLabel = 391769637i32, - #[strum( - serialize = "DynamicGasCanisterPollutants", - props( - name = r#"Portable Gas Tank (Pollutants)"#, - desc = r#""#, - value = "396065382" - ) - )] - DynamicGasCanisterPollutants = 396065382i32, - #[strum( - serialize = "NpcChicken", - props(name = r#"Chicken"#, desc = r#""#, value = "399074198") - )] - NpcChicken = 399074198i32, - #[strum( - serialize = "RailingElegant01", - props( - name = r#"Railing Elegant (Type 1)"#, - desc = r#""#, - value = "399661231" - ) - )] - RailingElegant01 = 399661231i32, - #[strum( - serialize = "StructureBench1", - props(name = r#"Bench (Counter Style)"#, desc = r#""#, value = "406745009") - )] - StructureBench1 = 406745009i32, - #[strum( - serialize = "ItemAstroloyIngot", - props( - name = r#"Ingot (Astroloy)"#, - desc = r#"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", - props( - name = r#"Medium Filter (Carbon Dioxide)"#, - desc = r#""#, - value = "416897318" - ) - )] - ItemGasFilterCarbonDioxideM = 416897318i32, - #[strum( - serialize = "ItemPillStun", - props( - name = r#"Pill (Paralysis)"#, - desc = r#"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", - props(name = r#"Kit (Crate)"#, desc = r#""#, value = "429365598") - )] - ItemKitCrate = 429365598i32, - #[strum( - serialize = "AccessCardPink", - props(name = r#"Access Card (Pink)"#, desc = r#""#, value = "431317557") - )] - AccessCardPink = 431317557i32, - #[strum( - serialize = "StructureWaterPipeMeter", - props(name = r#"Liquid Pipe Meter"#, desc = r#""#, value = "433184168") - )] - StructureWaterPipeMeter = 433184168i32, - #[strum( - serialize = "Robot", - props( - name = r#"AIMeE Bot"#, - desc = r#"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. - -Intended to unearth and retrieve ores automatically, the unit requires basic programming knowledge to operate, and IC Editor Motherboard. - -AIMEe has 7 modes: - -RobotMode.None = 0 = Do nothing -RobotMode.None = 1 = Follow nearest player -RobotMode.None = 2 = Move to target in straight line -RobotMode.None = 3 = Wander around looking for ores in 15 co-ords radius -RobotMode.None = 4 = Unload in chute input or chute bin within 3 meters / 1.5 large grids -RobotMode.None = 5 = Path(find) to target -RobotMode.None = 6 = Automatic assigned state, shows when storage slots are fullConnects to Logic Transmitter"#, - value = "434786784" - ) - )] - Robot = 434786784i32, - #[strum( - serialize = "StructureChuteValve", - props( - name = r#"Chute Valve"#, - desc = r#"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", - props( - name = r#"Pipe Analyzer"#, - desc = r#"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. -Displaying 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."#, - value = "435685051" - ) - )] - StructurePipeAnalysizer = 435685051i32, - #[strum( - serialize = "StructureLogicBatchSlotReader", - props(name = r#"Batch Slot Reader"#, desc = r#""#, value = "436888930") - )] - StructureLogicBatchSlotReader = 436888930i32, - #[strum( - serialize = "StructureSatelliteDish", - props( - name = r#"Medium Satellite Dish"#, - desc = r#"This medium communications unit can be used to communicate with nearby trade vessels. - -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."#, - value = "439026183" - ) - )] - StructureSatelliteDish = 439026183i32, - #[strum( - serialize = "StructureIceCrusher", - props( - name = r#"Ice Crusher"#, - desc = r#"The Recurso KoolAuger converts various ices into their respective gases and liquids. -A 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. -If 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", - props( - name = r#"Pipe Bender Mod"#, - desc = r#"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", - props( - name = r#"Advanced Composter"#, - desc = r#"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. -When processing, it releases nitrogen and volatiles, as well a small amount of heat. - -Compost composition -Fertilizer 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. - -- Food increases PLANT YIELD up to two times -- Decayed Food increases plant GROWTH SPEED up to two times -- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for up to five times -"#, - value = "446212963" - ) - )] - StructureAdvancedComposter = 446212963i32, - #[strum( - serialize = "ItemKitLargeDirectHeatExchanger", - props( - name = r#"Kit (Large Direct Heat Exchanger)"#, - desc = r#""#, - value = "450164077" - ) - )] - ItemKitLargeDirectHeatExchanger = 450164077i32, - #[strum( - serialize = "ItemKitInsulatedPipe", - props(name = r#"Kit (Insulated Pipe)"#, desc = r#""#, value = "452636699") - )] - ItemKitInsulatedPipe = 452636699i32, - #[strum( - serialize = "ItemCocoaPowder", - props(name = r#"Cocoa Powder"#, desc = r#""#, value = "457286516") - )] - ItemCocoaPowder = 457286516i32, - #[strum( - serialize = "AccessCardPurple", - props(name = r#"Access Card (Purple)"#, desc = r#""#, value = "459843265") - )] - AccessCardPurple = 459843265i32, - #[strum( - serialize = "ItemGasFilterNitrousOxideL", - props( - name = r#"Heavy Filter (Nitrous Oxide)"#, - desc = r#""#, - value = "465267979" - ) - )] - ItemGasFilterNitrousOxideL = 465267979i32, - #[strum( - serialize = "StructurePipeCowl", - props(name = r#"Pipe Cowl"#, desc = r#""#, value = "465816159") - )] - StructurePipeCowl = 465816159i32, - #[strum( - serialize = "StructureSDBHopperAdvanced", - props(name = r#"SDB Hopper Advanced"#, desc = r#""#, value = "467225612") - )] - StructureSdbHopperAdvanced = 467225612i32, - #[strum( - serialize = "StructureCableJunctionH", - props( - name = r#"Heavy Cable (3-Way Junction)"#, - desc = r#""#, - value = "469451637" - ) - )] - StructureCableJunctionH = 469451637i32, - #[strum( - serialize = "ItemHEMDroidRepairKit", - props( - name = r#"HEMDroid Repair Kit"#, - desc = r#"Repairs damaged HEM-Droids to full health."#, - value = "470636008" - ) - )] - ItemHemDroidRepairKit = 470636008i32, - #[strum( - serialize = "ItemKitRocketCargoStorage", - props( - name = r#"Kit (Rocket Cargo Storage)"#, - desc = r#""#, - value = "479850239" - ) - )] - ItemKitRocketCargoStorage = 479850239i32, - #[strum( - serialize = "StructureLiquidPressureRegulator", - props( - name = r#"Liquid Volume Regulator"#, - desc = r#"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", - props(name = r#"Switchgrass Seed"#, desc = r#""#, value = "488360169") - )] - SeedBagSwitchgrass = 488360169i32, - #[strum( - serialize = "ItemKitLadder", - props(name = r#"Kit (Ladder)"#, desc = r#""#, value = "489494578") - )] - ItemKitLadder = 489494578i32, - #[strum( - serialize = "StructureLogicButton", - props(name = r#"Button"#, desc = r#""#, value = "491845673") - )] - StructureLogicButton = 491845673i32, - #[strum( - serialize = "ItemRTG", - props( - name = r#"Kit (Creative RTG)"#, - desc = r#"This kit creates that miracle of modern science, a Kit (Creative RTG)."#, - value = "495305053" - ) - )] - ItemRtg = 495305053i32, - #[strum( - serialize = "ItemKitAIMeE", - props(name = r#"Kit (AIMeE)"#, desc = r#""#, value = "496830914") - )] - ItemKitAiMeE = 496830914i32, - #[strum( - serialize = "ItemSprayCanWhite", - props( - name = r#"Spray Paint (White)"#, - desc = r#"White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff."#, - value = "498481505" - ) - )] - ItemSprayCanWhite = 498481505i32, - #[strum( - serialize = "ItemElectrumIngot", - props(name = r#"Ingot (Electrum)"#, desc = r#""#, value = "502280180") - )] - ItemElectrumIngot = 502280180i32, - #[strum( - serialize = "MotherboardLogic", - props( - name = r#"Logic Motherboard"#, - desc = r#"Motherboards are connected to Computers to perform various technical functions. -The 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", - props(name = r#"Stairwell (Back Left)"#, desc = r#""#, value = "505924160") - )] - StructureStairwellBackLeft = 505924160i32, - #[strum( - serialize = "ItemKitAccessBridge", - props(name = r#"Kit (Access Bridge)"#, desc = r#""#, value = "513258369") - )] - ItemKitAccessBridge = 513258369i32, - #[strum( - serialize = "StructureRocketTransformerSmall", - props( - name = r#"Transformer Small (Rocket)"#, - desc = r#""#, - value = "518925193" - ) - )] - StructureRocketTransformerSmall = 518925193i32, - #[strum( - serialize = "DynamicAirConditioner", - props( - name = r#"Portable Air Conditioner"#, - desc = r#"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", - props(name = r#"Kit (Tool Manufactory)"#, desc = r#""#, value = "529137748") - )] - ItemKitToolManufactory = 529137748i32, - #[strum( - serialize = "ItemKitSign", - props(name = r#"Kit (Sign)"#, desc = r#""#, value = "529996327") - )] - ItemKitSign = 529996327i32, - #[strum( - serialize = "StructureCompositeCladdingSphericalCap", - props( - name = r#"Composite Cladding (Spherical Cap)"#, - desc = r#""#, - value = "534213209" - ) - )] - StructureCompositeCladdingSphericalCap = 534213209i32, - #[strum( - serialize = "ItemPureIceLiquidOxygen", - props( - name = r#"Pure Ice Liquid Oxygen"#, - desc = r#"A frozen chunk of pure Liquid Oxygen"#, - value = "541621589" - ) - )] - ItemPureIceLiquidOxygen = 541621589i32, - #[strum( - serialize = "ItemWreckageStructureWeatherStation003", - props( - name = r#"Wreckage Structure Weather Station"#, - desc = r#""#, - value = "542009679" - ) - )] - ItemWreckageStructureWeatherStation003 = 542009679i32, - #[strum( - serialize = "StructureInLineTankLiquid1x1", - props( - name = r#"In-Line Tank Small Liquid"#, - desc = r#"A small expansion tank that increases the volume of a pipe network."#, - value = "543645499" - ) - )] - StructureInLineTankLiquid1X1 = 543645499i32, - #[strum( - serialize = "ItemBatteryCellNuclear", - props( - name = r#"Battery Cell (Nuclear)"#, - desc = r#"Illegal on Earth since the Chengdu Event, Norsec nuclear power cells found a new and drastically less safety-conscious market offworld. - -POWER OUTPUT -Pushing 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", - props( - name = r#"Corn Soup"#, - desc = r#"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", - props( - name = r#"Advanced Furnace"#, - desc = r#"The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure."#, - value = "545937711" - ) - )] - StructureAdvancedFurnace = 545937711i32, - #[strum( - serialize = "StructureLogicRocketUplink", - props(name = r#"Logic Uplink"#, desc = r#""#, value = "546002924") - )] - StructureLogicRocketUplink = 546002924i32, - #[strum( - serialize = "StructureLogicDial", - props( - name = r#"Dial"#, - desc = r#"An assignable dial with up to 1000 modes."#, - value = "554524804" - ) - )] - StructureLogicDial = 554524804i32, - #[strum( - serialize = "StructureLightLongWide", - props(name = r#"Wall Light (Long Wide)"#, desc = r#""#, value = "555215790") - )] - StructureLightLongWide = 555215790i32, - #[strum( - serialize = "StructureProximitySensor", - props( - name = r#"Proximity Sensor"#, - desc = r#"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", - props(name = r#"Access Card (Yellow)"#, desc = r#""#, value = "568932536") - )] - AccessCardYellow = 568932536i32, - #[strum( - serialize = "StructureDiodeSlide", - props(name = r#"Diode Slide"#, desc = r#""#, value = "576516101") - )] - StructureDiodeSlide = 576516101i32, - #[strum( - serialize = "ItemKitSecurityPrinter", - props(name = r#"Kit (Security Printer)"#, desc = r#""#, value = "578078533") - )] - ItemKitSecurityPrinter = 578078533i32, - #[strum( - serialize = "ItemKitCentrifuge", - props(name = r#"Kit (Centrifuge)"#, desc = r#""#, value = "578182956") - )] - ItemKitCentrifuge = 578182956i32, - #[strum( - serialize = "DynamicHydroponics", - props(name = r#"Portable Hydroponics"#, desc = r#""#, value = "587726607") - )] - DynamicHydroponics = 587726607i32, - #[strum( - serialize = "ItemKitPipeUtilityLiquid", - props( - name = r#"Kit (Pipe Utility Liquid)"#, - desc = r#""#, - value = "595478589" - ) - )] - ItemKitPipeUtilityLiquid = 595478589i32, - #[strum( - serialize = "StructureCompositeFloorGrating4", - props( - name = r#"Composite Floor Grating (Type 4)"#, - desc = r#""#, - value = "600133846" - ) - )] - StructureCompositeFloorGrating4 = 600133846i32, - #[strum( - serialize = "StructureCableStraight", - props( - name = r#"Cable (Straight)"#, - desc = r#"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'. -Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, - value = "605357050" - ) - )] - StructureCableStraight = 605357050i32, - #[strum( - serialize = "StructureLiquidTankSmallInsulated", - props( - name = r#"Insulated Liquid Tank Small"#, - desc = r#""#, - value = "608607718" - ) - )] - StructureLiquidTankSmallInsulated = 608607718i32, - #[strum( - serialize = "ItemKitWaterPurifier", - props(name = r#"Kit (Water Purifier)"#, desc = r#""#, value = "611181283") - )] - ItemKitWaterPurifier = 611181283i32, - #[strum( - serialize = "ItemKitLiquidTankInsulated", - props( - name = r#"Kit (Insulated Liquid Tank)"#, - desc = r#""#, - value = "617773453" - ) - )] - ItemKitLiquidTankInsulated = 617773453i32, - #[strum( - serialize = "StructureWallSmallPanelsAndHatch", - props( - name = r#"Wall (Small Panels And Hatch)"#, - desc = r#""#, - value = "619828719" - ) - )] - StructureWallSmallPanelsAndHatch = 619828719i32, - #[strum( - serialize = "ItemGasFilterNitrogen", - props( - name = r#"Filter (Nitrogen)"#, - desc = r#"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", - props(name = r#"Color Dye (Yellow)"#, desc = r#""#, value = "635208006") - )] - ReagentColorYellow = 635208006i32, - #[strum( - serialize = "StructureWallPadding", - props(name = r#"Wall (Padding)"#, desc = r#""#, value = "635995024") - )] - StructureWallPadding = 635995024i32, - #[strum( - serialize = "ItemKitPassthroughHeatExchanger", - props( - name = r#"Kit (CounterFlow Heat Exchanger)"#, - desc = r#""#, - value = "636112787" - ) - )] - ItemKitPassthroughHeatExchanger = 636112787i32, - #[strum( - serialize = "StructureChuteDigitalValveLeft", - props( - name = r#"Chute Digital Valve Left"#, - desc = r#"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", - props( - name = r#"Mining-Drill Head (High Speed Ice)"#, - desc = r#""#, - value = "653461728" - ) - )] - ItemRocketMiningDrillHeadHighSpeedIce = 653461728i32, - #[strum( - serialize = "ItemWreckageStructureWeatherStation007", - props( - name = r#"Wreckage Structure Weather Station"#, - desc = r#""#, - value = "656649558" - ) - )] - ItemWreckageStructureWeatherStation007 = 656649558i32, - #[strum( - serialize = "ItemRice", - props( - name = r#"Rice"#, - desc = r#"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", - props(name = r#"Plastic Sheets"#, desc = r#""#, value = "662053345") - )] - ItemPlasticSheets = 662053345i32, - #[strum( - serialize = "ItemKitTransformerSmall", - props(name = r#"Kit (Transformer Small)"#, desc = r#""#, value = "665194284") - )] - ItemKitTransformerSmall = 665194284i32, - #[strum( - serialize = "StructurePipeLiquidStraight", - props( - name = r#"Liquid Pipe (Straight)"#, - desc = r#"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", - props(name = r#"Space Ice"#, desc = r#""#, value = "675686937") - )] - ItemSpaceIce = 675686937i32, - #[strum( - serialize = "ItemRemoteDetonator", - props(name = r#"Remote Detonator"#, desc = r#""#, value = "678483886") - )] - ItemRemoteDetonator = 678483886i32, - #[strum( - serialize = "ItemCocoaTree", - props(name = r#"Cocoa"#, desc = r#""#, value = "680051921") - )] - ItemCocoaTree = 680051921i32, - #[strum( - serialize = "ItemKitAirlockGate", - props(name = r#"Kit (Hangar Door)"#, desc = r#""#, value = "682546947") - )] - ItemKitAirlockGate = 682546947i32, - #[strum( - serialize = "ItemScrewdriver", - props( - name = r#"Screwdriver"#, - desc = r#"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", - props( - name = r#"Tomato Soup"#, - desc = r#"Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine."#, - value = "688734890" - ) - )] - ItemTomatoSoup = 688734890i32, - #[strum( - serialize = "StructureCentrifuge", - props( - name = r#"Centrifuge"#, - desc = r#"If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore. - It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. - Its bigger brother Combustion Centrifuge can be used to process items significantly faster. Items processed by the centrifuge will be de-gassed. - 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", - props( - name = r#"Block Bed"#, - desc = r#"Description coming."#, - value = "697908419" - ) - )] - StructureBlockBed = 697908419i32, - #[strum( - serialize = "ItemBatteryCell", - props( - name = r#"Battery Cell (Small)"#, - desc = r#"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. - -POWER OUTPUT -The small cell stores up to 36000 watts of power."#, - value = "700133157" - ) - )] - ItemBatteryCell = 700133157i32, - #[strum( - serialize = "ItemSpaceHelmet", - props( - name = r#"Space Helmet"#, - desc = r#"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). -It 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", - props(name = r#"Composite Wall (Type 2)"#, desc = r#""#, value = "718343384") - )] - StructureCompositeWall02 = 718343384i32, - #[strum( - serialize = "ItemKitRocketCircuitHousing", - props( - name = r#"Kit (Rocket Circuit Housing)"#, - desc = r#""#, - value = "721251202" - ) - )] - ItemKitRocketCircuitHousing = 721251202i32, - #[strum( - serialize = "ItemKitResearchMachine", - props(name = r#"Kit Research Machine"#, desc = r#""#, value = "724776762") - )] - ItemKitResearchMachine = 724776762i32, - #[strum( - serialize = "ItemElectronicParts", - props(name = r#"Electronic Parts"#, desc = r#""#, value = "731250882") - )] - ItemElectronicParts = 731250882i32, - #[strum( - serialize = "ItemKitShower", - props(name = r#"Kit (Shower)"#, desc = r#""#, value = "735858725") - )] - ItemKitShower = 735858725i32, - #[strum( - serialize = "StructureUnloader", - props( - name = r#"Unloader"#, - desc = r#"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. - -Output = 0 exporting the main item -Output = 1 exporting items inside and eventually the main item."#, - value = "750118160" - ) - )] - StructureUnloader = 750118160i32, - #[strum( - serialize = "ItemKitRailing", - props(name = r#"Kit (Railing)"#, desc = r#""#, value = "750176282") - )] - ItemKitRailing = 750176282i32, - #[strum( - serialize = "StructureFridgeSmall", - props( - name = r#"Fridge Small"#, - desc = r#"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. - - For more information about food preservation, visit the food decay section of the Stationpedia."#, - value = "751887598" - ) - )] - StructureFridgeSmall = 751887598i32, - #[strum( - serialize = "DynamicScrubber", - props( - name = r#"Portable Air Scrubber"#, - desc = r#"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", - props(name = r#"Kit (Engine Large)"#, desc = r#""#, value = "755302726") - )] - ItemKitEngineLarge = 755302726i32, - #[strum( - serialize = "ItemKitTank", - props(name = r#"Kit (Tank)"#, desc = r#""#, value = "771439840") - )] - ItemKitTank = 771439840i32, - #[strum( - serialize = "ItemLiquidCanisterSmart", - props( - name = r#"Liquid Canister (Smart)"#, - desc = r#"0.Mode0 -1.Mode1"#, - value = "777684475" - ) - )] - ItemLiquidCanisterSmart = 777684475i32, - #[strum( - serialize = "StructureWallArchTwoTone", - props(name = r#"Wall (Arch Two Tone)"#, desc = r#""#, value = "782529714") - )] - StructureWallArchTwoTone = 782529714i32, - #[strum( - serialize = "ItemAuthoringTool", - props(name = r#"Authoring Tool"#, desc = r#""#, value = "789015045") - )] - ItemAuthoringTool = 789015045i32, - #[strum( - serialize = "WeaponEnergy", - props(name = r#"Weapon Energy"#, desc = r#""#, value = "789494694") - )] - WeaponEnergy = 789494694i32, - #[strum( - serialize = "ItemCerealBar", - props( - name = r#"Cereal Bar"#, - desc = r#"Sustains, without decay. If only all our relationships were so well balanced."#, - value = "791746840" - ) - )] - ItemCerealBar = 791746840i32, - #[strum( - serialize = "StructureLargeDirectHeatExchangeLiquidtoLiquid", - props( - name = r#"Large Direct Heat Exchange - Liquid + Liquid"#, - desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, - value = "792686502" - ) - )] - StructureLargeDirectHeatExchangeLiquidtoLiquid = 792686502i32, - #[strum( - serialize = "StructureLightLong", - props(name = r#"Wall Light (Long)"#, desc = r#""#, value = "797794350") - )] - StructureLightLong = 797794350i32, - #[strum( - serialize = "StructureWallIron03", - props(name = r#"Iron Wall (Type 3)"#, desc = r#""#, value = "798439281") - )] - StructureWallIron03 = 798439281i32, - #[strum( - serialize = "ItemPipeValve", - props( - name = r#"Kit (Pipe Valve)"#, - desc = r#"This kit creates a Valve."#, - value = "799323450" - ) - )] - ItemPipeValve = 799323450i32, - #[strum( - serialize = "StructureConsoleMonitor", - props( - name = r#"Console Monitor"#, - desc = r#"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. -A 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", - props(name = r#"Rover Frame"#, desc = r#""#, value = "806513938") - )] - StructureRover = 806513938i32, - #[strum( - serialize = "StructureRocketAvionics", - props(name = r#"Rocket Avionics"#, desc = r#""#, value = "808389066") - )] - StructureRocketAvionics = 808389066i32, - #[strum( - serialize = "UniformOrangeJumpSuit", - props(name = r#"Jump Suit (Orange)"#, desc = r#""#, value = "810053150") - )] - UniformOrangeJumpSuit = 810053150i32, - #[strum( - serialize = "StructureSolidFuelGenerator", - props( - name = r#"Generator (Solid Fuel)"#, - desc = r#"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", - props(name = r#"Landingpad Gas Input"#, desc = r#""#, value = "817945707") - )] - LandingpadGasConnectorInwardPiece = 817945707i32, - #[strum( - serialize = "StructureElevatorShaft", - props(name = r#"Elevator Shaft (Cabled)"#, desc = r#""#, value = "826144419") - )] - StructureElevatorShaft = 826144419i32, - #[strum( - serialize = "StructureTransformerMediumReversed", - props( - name = r#"Transformer Reversed (Medium)"#, - desc = r#"Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. -Medium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W. -Note that transformers also operate as data isolators, preventing data flowing into any network beyond it."#, - value = "833912764" - ) - )] - StructureTransformerMediumReversed = 833912764i32, - #[strum( - serialize = "StructureFlatBench", - props(name = r#"Bench (Flat)"#, desc = r#""#, value = "839890807") - )] - StructureFlatBench = 839890807i32, - #[strum( - serialize = "ItemPowerConnector", - props( - name = r#"Kit (Power Connector)"#, - desc = r#"This kit creates a Power Connector."#, - value = "839924019" - ) - )] - ItemPowerConnector = 839924019i32, - #[strum( - serialize = "ItemKitHorizontalAutoMiner", - props(name = r#"Kit (OGRE)"#, desc = r#""#, value = "844391171") - )] - ItemKitHorizontalAutoMiner = 844391171i32, - #[strum( - serialize = "ItemKitSolarPanelBasic", - props(name = r#"Kit (Solar Panel Basic)"#, desc = r#""#, value = "844961456") - )] - ItemKitSolarPanelBasic = 844961456i32, - #[strum( - serialize = "ItemSprayCanBrown", - props( - name = r#"Spray Paint (Brown)"#, - desc = r#"In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed."#, - value = "845176977" - ) - )] - ItemSprayCanBrown = 845176977i32, - #[strum( - serialize = "ItemKitLargeExtendableRadiator", - props( - name = r#"Kit (Large Extendable Radiator)"#, - desc = r#""#, - value = "847430620" - ) - )] - ItemKitLargeExtendableRadiator = 847430620i32, - #[strum( - serialize = "StructureInteriorDoorPadded", - props( - name = r#"Interior Door Padded"#, - desc = r#"0.Operate -1.Logic"#, - value = "847461335" - ) - )] - StructureInteriorDoorPadded = 847461335i32, - #[strum( - serialize = "ItemKitRecycler", - props(name = r#"Kit (Recycler)"#, desc = r#""#, value = "849148192") - )] - ItemKitRecycler = 849148192i32, - #[strum( - serialize = "StructureCompositeCladdingAngledCornerLong", - props( - name = r#"Composite Cladding (Long Angled Corner)"#, - desc = r#""#, - value = "850558385" - ) - )] - StructureCompositeCladdingAngledCornerLong = 850558385i32, - #[strum( - serialize = "ItemPlantEndothermic_Genepool1", - props( - name = r#"Winterspawn (Alpha variant)"#, - desc = r#"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", - props( - name = r#"Door Control"#, - desc = r#"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", - props( - name = r#"Crowbar"#, - desc = r#"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", - props(name = r#"Chocolate Cereal Bar"#, desc = r#""#, value = "860793245") - )] - ItemChocolateCerealBar = 860793245i32, - #[strum( - serialize = "Rover_MkI_build_states", - props(name = r#"Rover MKI"#, desc = r#""#, value = "861674123") - )] - RoverMkIBuildStates = 861674123i32, - #[strum( - serialize = "AppliancePlantGeneticStabilizer", - props( - name = r#"Plant Genetic Stabilizer"#, - desc = r#"The Genetic Stabilizer can be used to manipulate gene stability on a specific Plants or Seeds. It has two modes Stabilize and Destabilize. -Stabilize: Increases all genes stability by 50%. -Destabilize: Decreases all gene stability by 10% other than a chosen gene which will received decreased stability by 50%. - "#, - value = "871432335" - ) - )] - AppliancePlantGeneticStabilizer = 871432335i32, - #[strum( - serialize = "ItemRoadFlare", - props( - name = r#"Road Flare"#, - desc = r#"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", - props(name = r#"Guide"#, desc = r#""#, value = "872720793") - )] - CartridgeGuide = 872720793i32, - #[strum( - serialize = "StructureLogicSorter", - props( - name = r#"Logic Sorter"#, - desc = r#"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", - props(name = r#"Logic Rocket Downlink"#, desc = r#""#, value = "876108549") - )] - StructureLogicRocketDownlink = 876108549i32, - #[strum( - serialize = "StructureSign1x1", - props(name = r#"Sign 1x1"#, desc = r#""#, value = "879058460") - )] - StructureSign1X1 = 879058460i32, - #[strum( - serialize = "ItemKitLocker", - props(name = r#"Kit (Locker)"#, desc = r#""#, value = "882301399") - )] - ItemKitLocker = 882301399i32, - #[strum( - serialize = "StructureCompositeFloorGratingOpenRotated", - props( - name = r#"Composite Floor Grating Open Rotated"#, - desc = r#""#, - value = "882307910" - ) - )] - StructureCompositeFloorGratingOpenRotated = 882307910i32, - #[strum( - serialize = "StructureWaterPurifier", - props( - name = r#"Water Purifier"#, - desc = r#"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", - props( - name = r#"Kit (Igniter)"#, - desc = r#"This kit creates an Kit (Igniter) unit."#, - value = "890106742" - ) - )] - ItemIgniter = 890106742i32, - #[strum( - serialize = "ItemFern", - props( - name = r#"Fern"#, - desc = r#"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", - props(name = r#"Bread Loaf"#, desc = r#""#, value = "893514943") - )] - ItemBreadLoaf = 893514943i32, - #[strum( - serialize = "StructureCableJunction5", - props(name = r#"Cable (5-Way Junction)"#, desc = r#""#, value = "894390004") - )] - StructureCableJunction5 = 894390004i32, - #[strum( - serialize = "ItemInsulation", - props( - name = r#"Insulation"#, - desc = r#"Mysterious in the extreme, the function of this item is lost to the ages."#, - value = "897176943" - ) - )] - ItemInsulation = 897176943i32, - #[strum( - serialize = "StructureWallFlatCornerRound", - props( - name = r#"Wall (Flat Corner Round)"#, - desc = r#""#, - value = "898708250" - ) - )] - StructureWallFlatCornerRound = 898708250i32, - #[strum( - serialize = "ItemHardMiningBackPack", - props(name = r#"Hard Mining Backpack"#, desc = r#""#, value = "900366130") - )] - ItemHardMiningBackPack = 900366130i32, - #[strum( - serialize = "ItemDirtCanister", - props( - name = r#"Dirt Canister"#, - desc = r#"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", - props(name = r#"Sign 2x1"#, desc = r#""#, value = "908320837") - )] - StructureSign2X1 = 908320837i32, - #[strum( - serialize = "CircuitboardAirlockControl", - props( - name = r#"Airlock"#, - desc = r#"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. - -To 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", - props(name = r#"Landingpad"#, desc = r#""#, value = "912453390") - )] - LandingpadBlankPiece = 912453390i32, - #[strum( - serialize = "ItemKitPipeRadiator", - props(name = r#"Kit (Pipe Radiator)"#, desc = r#""#, value = "920411066") - )] - ItemKitPipeRadiator = 920411066i32, - #[strum( - serialize = "StructureLogicMinMax", - props( - name = r#"Logic Min/Max"#, - desc = r#"0.Greater -1.Less"#, - value = "929022276" - ) - )] - StructureLogicMinMax = 929022276i32, - #[strum( - serialize = "StructureSolarPanel45Reinforced", - props( - name = r#"Solar Panel (Heavy Angled)"#, - desc = r#"This solar panel is resistant to storm damage."#, - value = "930865127" - ) - )] - StructureSolarPanel45Reinforced = 930865127i32, - #[strum( - serialize = "StructurePoweredVent", - props( - name = r#"Powered Vent"#, - desc = r#"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", - props( - name = r#"Pure Ice Hydrogen"#, - desc = r#"A frozen chunk of pure Hydrogen"#, - value = "944530361" - ) - )] - ItemPureIceHydrogen = 944530361i32, - #[strum( - serialize = "StructureHeatExchangeLiquidtoGas", - props( - name = r#"Heat Exchanger - Liquid + Gas"#, - desc = r#"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. -The '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. -As 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", - props( - name = r#"Composite Cladding (Angled Corner Inner Long L)"#, - desc = r#""#, - value = "947705066" - ) - )] - StructureCompositeCladdingAngledCornerInnerLongL = 947705066i32, - #[strum( - serialize = "StructurePictureFrameThickMountLandscapeLarge", - props( - name = r#"Picture Frame Thick Landscape Large"#, - desc = r#""#, - value = "950004659" - ) - )] - StructurePictureFrameThickMountLandscapeLarge = 950004659i32, - #[strum( - serialize = "StructureTankSmallAir", - props(name = r#"Small Tank (Air)"#, desc = r#""#, value = "955744474") - )] - StructureTankSmallAir = 955744474i32, - #[strum( - serialize = "StructureHarvie", - props( - name = r#"Harvie"#, - desc = r#"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", - props( - name = r#"Fridge (Large)"#, - desc = r#"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. - -With 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. - -Also, don't leave the door open, as it will equalize with the current world temperature. And maybe start to beep. - -For more information about food preservation, visit the food decay section of the Stationpedia."#, - value = "958476921" - ) - )] - StructureFridgeBig = 958476921i32, - #[strum( - serialize = "ItemKitAirlock", - props(name = r#"Kit (Airlock)"#, desc = r#""#, value = "964043875") - )] - ItemKitAirlock = 964043875i32, - #[strum( - serialize = "EntityRoosterBlack", - props( - name = r#"Entity Rooster Black"#, - desc = r#"This is a rooster. It is black. There is dignity in this."#, - value = "966959649" - ) - )] - EntityRoosterBlack = 966959649i32, - #[strum( - serialize = "ItemKitSorter", - props(name = r#"Kit (Sorter)"#, desc = r#""#, value = "969522478") - )] - ItemKitSorter = 969522478i32, - #[strum( - serialize = "ItemEmergencyCrowbar", - props(name = r#"Emergency Crowbar"#, desc = r#""#, value = "976699731") - )] - ItemEmergencyCrowbar = 976699731i32, - #[strum( - serialize = "Landingpad_DiagonalPiece01", - props( - name = r#"Landingpad Diagonal"#, - desc = r#"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", - props(name = r#"Color Dye (Blue)"#, desc = r#""#, value = "980054869") - )] - ReagentColorBlue = 980054869i32, - #[strum( - serialize = "StructureCableCorner3", - props( - name = r#"Cable (3-Way Corner)"#, - desc = r#"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. -Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, - value = "980469101" - ) - )] - StructureCableCorner3 = 980469101i32, - #[strum( - serialize = "ItemNVG", - props(name = r#"Night Vision Goggles"#, desc = r#""#, value = "982514123") - )] - ItemNvg = 982514123i32, - #[strum( - serialize = "StructurePlinth", - props(name = r#"Plinth"#, desc = r#""#, value = "989835703") - )] - StructurePlinth = 989835703i32, - #[strum( - serialize = "ItemSprayCanYellow", - props( - name = r#"Spray Paint (Yellow)"#, - desc = r#"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", - props( - name = r#"Rocket Celestial Tracker"#, - desc = r#"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", - props( - name = r#"High Volume Gas Canister"#, - desc = r#""#, - value = "998653377" - ) - )] - ItemHighVolumeGasCanisterEmpty = 998653377i32, - #[strum( - serialize = "ItemKitLogicTransmitter", - props( - name = r#"Kit (Logic Transmitter)"#, - desc = r#""#, - value = "1005397063" - ) - )] - ItemKitLogicTransmitter = 1005397063i32, - #[strum( - serialize = "StructureIgniter", - props( - name = r#"Igniter"#, - desc = r#"It gets the party started. Especially if that party is an explosive gas mixture."#, - value = "1005491513" - ) - )] - StructureIgniter = 1005491513i32, - #[strum( - serialize = "SeedBag_Potato", - props( - name = r#"Potato Seeds"#, - desc = r#"Grow a Potato."#, - value = "1005571172" - ) - )] - SeedBagPotato = 1005571172i32, - #[strum( - serialize = "ItemDataDisk", - props(name = r#"Data Disk"#, desc = r#""#, value = "1005843700") - )] - ItemDataDisk = 1005843700i32, - #[strum( - serialize = "ItemBatteryChargerSmall", - props(name = r#"Battery Charger Small"#, desc = r#""#, value = "1008295833") - )] - ItemBatteryChargerSmall = 1008295833i32, - #[strum( - serialize = "EntityChickenWhite", - props( - name = r#"Entity Chicken White"#, - desc = r#"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 = "ItemKitStacker", - props(name = r#"Kit (Stacker)"#, desc = r#""#, value = "1013244511") - )] - ItemKitStacker = 1013244511i32, - #[strum( - serialize = "StructureTankSmall", - props(name = r#"Small Tank"#, desc = r#""#, value = "1013514688") - )] - StructureTankSmall = 1013514688i32, - #[strum( - serialize = "ItemEmptyCan", - props( - name = r#"Empty Can"#, - desc = r#"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", - props(name = r#"Kit (Tank Insulated)"#, desc = r#""#, value = "1021053608") - )] - ItemKitTankInsulated = 1021053608i32, - #[strum( - serialize = "ItemKitChute", - props(name = r#"Kit (Basic Chutes)"#, desc = r#""#, value = "1025254665") - )] - ItemKitChute = 1025254665i32, - #[strum( - serialize = "StructureFuselageTypeA1", - props(name = r#"Fuselage (Type A1)"#, desc = r#""#, value = "1033024712") - )] - StructureFuselageTypeA1 = 1033024712i32, - #[strum( - serialize = "StructureCableAnalysizer", - props(name = r#"Cable Analyzer"#, desc = r#""#, value = "1036015121") - )] - StructureCableAnalysizer = 1036015121i32, - #[strum( - serialize = "StructureCableJunctionH6", - props( - name = r#"Heavy Cable (6-Way Junction)"#, - desc = r#""#, - value = "1036780772" - ) - )] - StructureCableJunctionH6 = 1036780772i32, - #[strum( - serialize = "ItemGasFilterVolatilesM", - props( - name = r#"Medium Filter (Volatiles)"#, - desc = r#""#, - value = "1037507240" - ) - )] - ItemGasFilterVolatilesM = 1037507240i32, - #[strum( - serialize = "ItemKitPortablesConnector", - props( - name = r#"Kit (Portables Connector)"#, - desc = r#""#, - value = "1041148999" - ) - )] - ItemKitPortablesConnector = 1041148999i32, - #[strum( - serialize = "StructureFloorDrain", - props( - name = r#"Passive Liquid Inlet"#, - desc = r#"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", - props( - name = r#"Wall (Geometry Straight)"#, - desc = r#""#, - value = "1049735537" - ) - )] - StructureWallGeometryStreight = 1049735537i32, - #[strum( - serialize = "StructureTransformerSmallReversed", - props( - name = r#"Transformer Reversed (Small)"#, - desc = r#"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. -Note that transformers operate as data isolators, preventing data flowing into any network beyond it."#, - value = "1054059374" - ) - )] - StructureTransformerSmallReversed = 1054059374i32, - #[strum( - serialize = "ItemMiningDrill", - props( - name = r#"Mining Drill"#, - desc = r#"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", - props(name = r#"Ingot (Constantan)"#, desc = r#""#, value = "1058547521") - )] - ItemConstantanIngot = 1058547521i32, - #[strum( - serialize = "StructureInsulatedPipeCrossJunction6", - props( - name = r#"Insulated Pipe (6-Way Junction)"#, - desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, - value = "1061164284" - ) - )] - StructureInsulatedPipeCrossJunction6 = 1061164284i32, - #[strum( - serialize = "Landingpad_CenterPiece01", - props( - name = r#"Landingpad Center"#, - desc = r#"The target point where the trader shuttle will land. Requires a clear view of the sky."#, - value = "1070143159" - ) - )] - LandingpadCenterPiece01 = 1070143159i32, - #[strum( - serialize = "StructureHorizontalAutoMiner", - props( - name = r#"OGRE"#, - desc = r#"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. - -The 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. - -MODES -Idle - 0 -Mining - 1 -Returning - 2 -DepostingOre - 3 -Finished - 4 -"#, - value = "1070427573" - ) - )] - StructureHorizontalAutoMiner = 1070427573i32, - #[strum( - serialize = "ItemDynamicAirCon", - props( - name = r#"Kit (Portable Air Conditioner)"#, - desc = r#""#, - value = "1072914031" - ) - )] - ItemDynamicAirCon = 1072914031i32, - #[strum( - serialize = "ItemMarineHelmet", - props(name = r#"Marine Helmet"#, desc = r#""#, value = "1073631646") - )] - ItemMarineHelmet = 1073631646i32, - #[strum( - serialize = "StructureDaylightSensor", - props( - name = r#"Daylight Sensor"#, - desc = r#"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", - props( - name = r#"Composite Cladding (Cylindrical Panel)"#, - desc = r#""#, - value = "1077151132" - ) - )] - StructureCompositeCladdingCylindricalPanel = 1077151132i32, - #[strum( - serialize = "ItemRocketMiningDrillHeadMineral", - props( - name = r#"Mining-Drill Head (Mineral)"#, - desc = r#""#, - value = "1083675581" - ) - )] - ItemRocketMiningDrillHeadMineral = 1083675581i32, - #[strum( - serialize = "ItemKitSuitStorage", - props(name = r#"Kit (Suit Storage)"#, desc = r#""#, value = "1088892825") - )] - ItemKitSuitStorage = 1088892825i32, - #[strum( - serialize = "StructurePictureFrameThinMountPortraitLarge", - props( - name = r#"Picture Frame Thin Portrait Large"#, - desc = r#""#, - value = "1094895077" - ) - )] - StructurePictureFrameThinMountPortraitLarge = 1094895077i32, - #[strum( - serialize = "StructureLiquidTankBig", - props(name = r#"Liquid Tank Big"#, desc = r#""#, value = "1098900430") - )] - StructureLiquidTankBig = 1098900430i32, - #[strum( - serialize = "Landingpad_CrossPiece", - props( - name = r#"Landingpad Cross"#, - desc = r#"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", - props( - name = r#"Cartridge Plant Analyser"#, - desc = r#""#, - value = "1101328282" - ) - )] - CartridgePlantAnalyser = 1101328282i32, - #[strum( - serialize = "ItemSiliconOre", - props( - name = r#"Ore (Silicon)"#, - desc = r#"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", - props( - name = r#"Kit (Lights)"#, - desc = r#"This kit creates any one of ten Kit (Lights) variants."#, - value = "1108423476" - ) - )] - ItemWallLight = 1108423476i32, - #[strum( - serialize = "StructureCableJunction4", - props( - name = r#"Cable (4-Way Junction)"#, - desc = r#"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. -Normal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)."#, - value = "1112047202" - ) - )] - StructureCableJunction4 = 1112047202i32, - #[strum( - serialize = "ItemPillHeal", - props( - name = r#"Pill (Medical)"#, - desc = r#"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", - props(name = r#"Cocoa Seeds"#, desc = r#""#, value = "1139887531") - )] - SeedBagCocoa = 1139887531i32, - #[strum( - serialize = "StructureMediumRocketLiquidFuelTank", - props( - name = r#"Liquid Capsule Tank Medium"#, - desc = r#""#, - value = "1143639539" - ) - )] - StructureMediumRocketLiquidFuelTank = 1143639539i32, - #[strum( - serialize = "StructureCargoStorageMedium", - props(name = r#"Cargo Storage (Medium)"#, desc = r#""#, value = "1151864003") - )] - StructureCargoStorageMedium = 1151864003i32, - #[strum( - serialize = "WeaponRifleEnergy", - props( - name = r#"Energy Rifle"#, - desc = r#"0.Stun -1.Kill"#, - value = "1154745374" - ) - )] - WeaponRifleEnergy = 1154745374i32, - #[strum( - serialize = "StructureSDBSilo", - props( - name = r#"SDB Silo"#, - desc = r#"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", - props(name = r#"Flag (ODA 4m)"#, desc = r#""#, value = "1159126354") - )] - FlagOda4M = 1159126354i32, - #[strum( - serialize = "ItemCannedPowderedEggs", - props( - name = r#"Canned Powdered Eggs"#, - desc = r#"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", - props(name = r#"Kit (Furniture)"#, desc = r#""#, value = "1162905029") - )] - ItemKitFurniture = 1162905029i32, - #[strum( - serialize = "StructureGasGenerator", - props(name = r#"Gas Fuel Generator"#, desc = r#""#, value = "1165997963") - )] - StructureGasGenerator = 1165997963i32, - #[strum( - serialize = "StructureChair", - props( - name = r#"Chair"#, - desc = r#"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", - props( - name = r#"Wall (Padded Arch Light Fitting Top)"#, - desc = r#""#, - value = "1171987947" - ) - )] - StructureWallPaddedArchLightFittingTop = 1171987947i32, - #[strum( - serialize = "StructureShelf", - props(name = r#"Shelf"#, desc = r#""#, value = "1172114950") - )] - StructureShelf = 1172114950i32, - #[strum( - serialize = "ApplianceDeskLampRight", - props( - name = r#"Appliance Desk Lamp Right"#, - desc = r#""#, - value = "1174360780" - ) - )] - ApplianceDeskLampRight = 1174360780i32, - #[strum( - serialize = "ItemKitRegulator", - props( - name = r#"Kit (Pressure Regulator)"#, - desc = r#""#, - value = "1181371795" - ) - )] - ItemKitRegulator = 1181371795i32, - #[strum( - serialize = "ItemKitCompositeFloorGrating", - props(name = r#"Kit (Floor Grating)"#, desc = r#""#, value = "1182412869") - )] - ItemKitCompositeFloorGrating = 1182412869i32, - #[strum( - serialize = "StructureWallArchPlating", - props(name = r#"Wall (Arch Plating)"#, desc = r#""#, value = "1182510648") - )] - StructureWallArchPlating = 1182510648i32, - #[strum( - serialize = "StructureWallPaddedCornerThin", - props( - name = r#"Wall (Padded Corner Thin)"#, - desc = r#""#, - value = "1183203913" - ) - )] - StructureWallPaddedCornerThin = 1183203913i32, - #[strum( - serialize = "StructurePowerTransmitterReceiver", - props( - name = r#"Microwave Power Receiver"#, - desc = r#"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. -The 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", - props( - name = r#"Kit (Pipe Meter)"#, - desc = r#"This kit creates a Pipe Meter."#, - value = "1207939683" - ) - )] - ItemPipeMeter = 1207939683i32, - #[strum( - serialize = "StructurePictureFrameThinPortraitLarge", - props( - name = r#"Picture Frame Thin Portrait Large"#, - desc = r#""#, - value = "1212777087" - ) - )] - StructurePictureFrameThinPortraitLarge = 1212777087i32, - #[strum( - serialize = "StructureSleeperLeft", - props( - name = r#"Sleeper Left"#, - desc = r#"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", - props( - name = r#"Ice (Water)"#, - desc = r#"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", - props(name = r#"Lever"#, desc = r#""#, value = "1220484876") - )] - StructureLogicSwitch = 1220484876i32, - #[strum( - serialize = "StructureLiquidUmbilicalFemaleSide", - props( - name = r#"Umbilical Socket Angle (Liquid)"#, - desc = r#""#, - value = "1220870319" - ) - )] - StructureLiquidUmbilicalFemaleSide = 1220870319i32, - #[strum( - serialize = "ItemKitAtmospherics", - props(name = r#"Kit (Atmospherics)"#, desc = r#""#, value = "1222286371") - )] - ItemKitAtmospherics = 1222286371i32, - #[strum( - serialize = "ItemChemLightYellow", - props( - name = r#"Chem Light (Yellow)"#, - desc = r#"Dispel the darkness with this yellow glowstick."#, - value = "1224819963" - ) - )] - ItemChemLightYellow = 1224819963i32, - #[strum( - serialize = "ItemIronFrames", - props(name = r#"Iron Frames"#, desc = r#""#, value = "1225836666") - )] - ItemIronFrames = 1225836666i32, - #[strum( - serialize = "CompositeRollCover", - props( - name = r#"Composite Roll Cover"#, - desc = r#"0.Operate -1.Logic"#, - value = "1228794916" - ) - )] - CompositeRollCover = 1228794916i32, - #[strum( - serialize = "StructureCompositeWall", - props( - name = r#"Composite Wall (Type 1)"#, - desc = r#"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", - props( - name = r#"Combustion Centrifuge"#, - desc = r#"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. - 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. - 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. - 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. - 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. - "#, - value = "1238905683" - ) - )] - StructureCombustionCentrifuge = 1238905683i32, - #[strum( - serialize = "ItemVolatiles", - props( - name = r#"Ice (Volatiles)"#, - desc = r#"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. - -Volatiles 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 - 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. -"#, - value = "1253102035" - ) - )] - ItemVolatiles = 1253102035i32, - #[strum( - serialize = "HandgunMagazine", - props(name = r#"Handgun Magazine"#, desc = r#""#, value = "1254383185") - )] - HandgunMagazine = 1254383185i32, - #[strum( - serialize = "ItemGasFilterVolatilesL", - props( - name = r#"Heavy Filter (Volatiles)"#, - desc = r#""#, - value = "1255156286" - ) - )] - ItemGasFilterVolatilesL = 1255156286i32, - #[strum( - serialize = "ItemMiningDrillPneumatic", - props( - name = r#"Pneumatic Mining Drill"#, - desc = r#"0.Default -1.Flatten"#, - value = "1258187304" - ) - )] - ItemMiningDrillPneumatic = 1258187304i32, - #[strum( - serialize = "StructureSmallTableDinnerSingle", - props( - name = r#"Small (Table Dinner Single)"#, - desc = r#""#, - value = "1260651529" - ) - )] - StructureSmallTableDinnerSingle = 1260651529i32, - #[strum( - serialize = "ApplianceReagentProcessor", - props( - name = r#"Reagent Processor"#, - desc = r#"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", - props(name = r#"Trigger Plate (Medium)"#, desc = r#""#, value = "1269458680") - )] - StructurePressurePlateMedium = 1269458680i32, - #[strum( - serialize = "ItemPumpkin", - props( - name = r#"Pumpkin"#, - desc = r#"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", - props( - name = r#"Pumpkin Soup"#, - desc = r#"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", - props(name = r#"Tank Big (Insulated)"#, desc = r#""#, value = "1280378227") - )] - StructureTankBigInsulated = 1280378227i32, - #[strum( - serialize = "StructureWallArchCornerTriangle", - props( - name = r#"Wall (Arch Corner Triangle)"#, - desc = r#""#, - value = "1281911841" - ) - )] - StructureWallArchCornerTriangle = 1281911841i32, - #[strum( - serialize = "StructureTurbineGenerator", - props(name = r#"Turbine Generator"#, desc = r#""#, value = "1282191063") - )] - StructureTurbineGenerator = 1282191063i32, - #[strum( - serialize = "StructurePipeIgniter", - props( - name = r#"Pipe Igniter"#, - desc = r#"Ignites the atmosphere inside the attached pipe network."#, - value = "1286441942" - ) - )] - StructurePipeIgniter = 1286441942i32, - #[strum( - serialize = "StructureWallIron", - props(name = r#"Iron Wall (Type 1)"#, desc = r#""#, value = "1287324802") - )] - StructureWallIron = 1287324802i32, - #[strum( - serialize = "ItemSprayGun", - props( - name = r#"Spray Gun"#, - desc = r#"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", - props(name = r#"Kit (Solid Generator)"#, desc = r#""#, value = "1293995736") - )] - ItemKitSolidGenerator = 1293995736i32, - #[strum( - serialize = "StructureAccessBridge", - props( - name = r#"Access Bridge"#, - desc = r#"Extendable bridge that spans three grids"#, - value = "1298920475" - ) - )] - StructureAccessBridge = 1298920475i32, - #[strum( - serialize = "StructurePipeOrgan", - props( - name = r#"Pipe Organ"#, - desc = r#"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", - props( - name = r#"Electronics Printer"#, - desc = r#"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", - props(name = r#"Fuselage (Type A4)"#, desc = r#""#, value = "1308115015") - )] - StructureFuselageTypeA4 = 1308115015i32, - #[strum( - serialize = "StructureSmallDirectHeatExchangeGastoGas", - props( - name = r#"Small Direct Heat Exchanger - Gas + Gas"#, - desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, - value = "1310303582" - ) - )] - StructureSmallDirectHeatExchangeGastoGas = 1310303582i32, - #[strum( - serialize = "StructureTurboVolumePump", - props( - name = r#"Turbo Volume Pump (Gas)"#, - desc = r#"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", - props( - name = r#"Chem Light (White)"#, - desc = r#"Snap the glowstick to activate a pale radiance that keeps the darkness at bay."#, - value = "1312166823" - ) - )] - ItemChemLightWhite = 1312166823i32, - #[strum( - serialize = "ItemMilk", - props( - name = r#"Milk"#, - desc = r#"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", - props( - name = r#"Insulated Pipe (3-Way Junction)"#, - desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, - value = "1328210035" - ) - )] - StructureInsulatedPipeCrossJunction3 = 1328210035i32, - #[strum( - serialize = "StructureShortCornerLocker", - props(name = r#"Short Corner Locker"#, desc = r#""#, value = "1330754486") - )] - StructureShortCornerLocker = 1330754486i32, - #[strum( - serialize = "StructureTankConnectorLiquid", - props( - name = r#"Liquid Tank Connector"#, - desc = r#"These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network."#, - value = "1331802518" - ) - )] - StructureTankConnectorLiquid = 1331802518i32, - #[strum( - serialize = "ItemSprayCanPink", - props( - name = r#"Spray Paint (Pink)"#, - desc = r#"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", - props(name = r#"Graph Display"#, desc = r#""#, value = "1344368806") - )] - CircuitboardGraphDisplay = 1344368806i32, - #[strum( - serialize = "ItemWreckageStructureWeatherStation006", - props( - name = r#"Wreckage Structure Weather Station"#, - desc = r#""#, - value = "1344576960" - ) - )] - ItemWreckageStructureWeatherStation006 = 1344576960i32, - #[strum( - serialize = "ItemCookedCorn", - props( - name = r#"Cooked Corn"#, - desc = r#"A high-nutrient cooked food, which can be canned."#, - value = "1344773148" - ) - )] - ItemCookedCorn = 1344773148i32, - #[strum( - serialize = "ItemCookedSoybean", - props( - name = r#"Cooked Soybean"#, - desc = r#"A high-nutrient cooked food, which can be canned."#, - value = "1353449022" - ) - )] - ItemCookedSoybean = 1353449022i32, - #[strum( - serialize = "StructureChuteCorner", - props( - name = r#"Chute (Corner)"#, - desc = r#"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. -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. -Chute 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", - props( - name = r#"Portable Gas Tank (Oxygen)"#, - desc = r#"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", - props(name = r#"Insulated Passive Vent"#, desc = r#""#, value = "1363077139") - )] - StructurePassiveVentInsulated = 1363077139i32, - #[strum( - serialize = "ApplianceChemistryStation", - props(name = r#"Chemistry Station"#, desc = r#""#, value = "1365789392") - )] - ApplianceChemistryStation = 1365789392i32, - #[strum( - serialize = "ItemPipeIgniter", - props(name = r#"Kit (Pipe Igniter)"#, desc = r#""#, value = "1366030599") - )] - ItemPipeIgniter = 1366030599i32, - #[strum( - serialize = "ItemFries", - props(name = r#"French Fries"#, desc = r#""#, value = "1371786091") - )] - ItemFries = 1371786091i32, - #[strum( - serialize = "StructureSleeperVerticalDroid", - props( - name = r#"Droid Sleeper Vertical"#, - desc = r#"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", - props(name = r#"Arc Welder"#, desc = r#""#, value = "1385062886") - )] - ItemArcWelder = 1385062886i32, - #[strum( - serialize = "ItemSoyOil", - props(name = r#"Soy Oil"#, desc = r#""#, value = "1387403148") - )] - ItemSoyOil = 1387403148i32, - #[strum( - serialize = "ItemKitRocketAvionics", - props(name = r#"Kit (Avionics)"#, desc = r#""#, value = "1396305045") - )] - ItemKitRocketAvionics = 1396305045i32, - #[strum( - serialize = "ItemMarineBodyArmor", - props(name = r#"Marine Armor"#, desc = r#""#, value = "1399098998") - )] - ItemMarineBodyArmor = 1399098998i32, - #[strum( - serialize = "StructureStairs4x2", - props(name = r#"Stairs"#, desc = r#""#, value = "1405018945") - )] - StructureStairs4X2 = 1405018945i32, - #[strum( - serialize = "ItemKitBattery", - props(name = r#"Kit (Battery)"#, desc = r#""#, value = "1406656973") - )] - ItemKitBattery = 1406656973i32, - #[strum( - serialize = "StructureLargeDirectHeatExchangeGastoLiquid", - props( - name = r#"Large Direct Heat Exchanger - Gas + Liquid"#, - desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, - value = "1412338038" - ) - )] - StructureLargeDirectHeatExchangeGastoLiquid = 1412338038i32, - #[strum( - serialize = "AccessCardBrown", - props(name = r#"Access Card (Brown)"#, desc = r#""#, value = "1412428165") - )] - AccessCardBrown = 1412428165i32, - #[strum( - serialize = "StructureCapsuleTankLiquid", - props( - name = r#"Liquid Capsule Tank Small"#, - desc = r#""#, - value = "1415396263" - ) - )] - StructureCapsuleTankLiquid = 1415396263i32, - #[strum( - serialize = "StructureLogicBatchWriter", - props(name = r#"Batch Writer"#, desc = r#""#, value = "1415443359") - )] - StructureLogicBatchWriter = 1415443359i32, - #[strum( - serialize = "StructureCondensationChamber", - props( - name = r#"Condensation Chamber"#, - desc = r#"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. - 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. - 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", - props( - name = r#"Pumpkin Seeds"#, - desc = r#"Grow a Pumpkin."#, - value = "1423199840" - ) - )] - SeedBagPumpkin = 1423199840i32, - #[strum( - serialize = "ItemPureIceLiquidNitrous", - props( - name = r#"Pure Ice Liquid Nitrous"#, - desc = r#"A frozen chunk of pure Liquid Nitrous Oxide"#, - value = "1428477399" - ) - )] - ItemPureIceLiquidNitrous = 1428477399i32, - #[strum( - serialize = "StructureFrame", - props( - name = r#"Steel Frame"#, - desc = r#"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", - props( - name = r#"Water Bottle Filler Bottom"#, - desc = r#""#, - value = "1433754995" - ) - )] - StructureWaterBottleFillerBottom = 1433754995i32, - #[strum( - serialize = "StructureLightRoundSmall", - props( - name = r#"Light Round (Small)"#, - desc = r#"Description coming."#, - value = "1436121888" - ) - )] - StructureLightRoundSmall = 1436121888i32, - #[strum( - serialize = "ItemRocketMiningDrillHeadHighSpeedMineral", - props( - name = r#"Mining-Drill Head (High Speed Mineral)"#, - desc = r#""#, - value = "1440678625" - ) - )] - ItemRocketMiningDrillHeadHighSpeedMineral = 1440678625i32, - #[strum( - serialize = "ItemMKIICrowbar", - props( - name = r#"Mk II Crowbar"#, - desc = r#"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", - props(name = r#"Hydroponics Station"#, desc = r#""#, value = "1441767298") - )] - StructureHydroponicsStation = 1441767298i32, - #[strum( - serialize = "StructureCryoTubeHorizontal", - props( - name = r#"Cryo Tube Horizontal"#, - desc = r#"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", - props( - name = r#"Insulated In-Line Tank Liquid"#, - desc = r#""#, - value = "1452100517" - ) - )] - StructureInsulatedInLineTankLiquid1X2 = 1452100517i32, - #[strum( - serialize = "ItemKitPassiveLargeRadiatorLiquid", - props( - name = r#"Kit (Medium Radiator Liquid)"#, - desc = r#""#, - value = "1453961898" - ) - )] - ItemKitPassiveLargeRadiatorLiquid = 1453961898i32, - #[strum( - serialize = "ItemKitReinforcedWindows", - props( - name = r#"Kit (Reinforced Windows)"#, - desc = r#""#, - value = "1459985302" - ) - )] - ItemKitReinforcedWindows = 1459985302i32, - #[strum( - serialize = "ItemWreckageStructureWeatherStation002", - props( - name = r#"Wreckage Structure Weather Station"#, - desc = r#""#, - value = "1464424921" - ) - )] - ItemWreckageStructureWeatherStation002 = 1464424921i32, - #[strum( - serialize = "StructureHydroponicsTray", - props( - name = r#"Hydroponics Tray"#, - desc = r#"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. -It can be automated using the Harvie."#, - value = "1464854517" - ) - )] - StructureHydroponicsTray = 1464854517i32, - #[strum( - serialize = "ItemMkIIToolbelt", - props( - name = r#"Tool Belt MK II"#, - desc = r#"A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy."#, - value = "1467558064" - ) - )] - ItemMkIiToolbelt = 1467558064i32, - #[strum( - serialize = "StructureOverheadShortLocker", - props(name = r#"Overhead Locker"#, desc = r#""#, value = "1468249454") - )] - StructureOverheadShortLocker = 1468249454i32, - #[strum( - serialize = "ItemMiningBeltMKII", - props( - name = r#"Mining Belt MK II"#, - desc = r#"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", - props(name = r#"Torpedo Rack"#, desc = r#""#, value = "1473807953") - )] - StructureTorpedoRack = 1473807953i32, - #[strum( - serialize = "StructureWallIron02", - props(name = r#"Iron Wall (Type 2)"#, desc = r#""#, value = "1485834215") - )] - StructureWallIron02 = 1485834215i32, - #[strum( - serialize = "StructureWallLargePanel", - props(name = r#"Wall (Large Panel)"#, desc = r#""#, value = "1492930217") - )] - StructureWallLargePanel = 1492930217i32, - #[strum( - serialize = "ItemKitLogicCircuit", - props(name = r#"Kit (IC Housing)"#, desc = r#""#, value = "1512322581") - )] - ItemKitLogicCircuit = 1512322581i32, - #[strum( - serialize = "ItemSprayCanRed", - props( - name = r#"Spray Paint (Red)"#, - desc = r#"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", - props( - name = r#"Light Round"#, - desc = r#"Description coming."#, - value = "1514476632" - ) - )] - StructureLightRound = 1514476632i32, - #[strum( - serialize = "Fertilizer", - props( - name = r#"Fertilizer"#, - desc = r#"Fertilizer alters plant growth processes, and is created by the basic composter and the Advanced Composter using organic matter. -Fertilizer's affects depend on its ingredients: - -- Food increases PLANT YIELD up to two times -- Decayed Food increases plant GROWTH SPEED up to two times -- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for - -The effect of these ingredients depends on their respective proportions in the composter when processing is activated. "#, - value = "1517856652" - ) - )] - Fertilizer = 1517856652i32, - #[strum( - serialize = "StructurePowerUmbilicalMale", - props( - name = r#"Umbilical (Power)"#, - desc = r#"0.Left -1.Center -2.Right"#, - value = "1529453938" - ) - )] - StructurePowerUmbilicalMale = 1529453938i32, - #[strum( - serialize = "ItemRocketMiningDrillHeadDurable", - props( - name = r#"Mining-Drill Head (Durable)"#, - desc = r#""#, - value = "1530764483" - ) - )] - ItemRocketMiningDrillHeadDurable = 1530764483i32, - #[strum( - serialize = "DecayedFood", - props( - name = r#"Decayed Food"#, - desc = r#"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: - -- 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). - -- FOOD TYPE - Each food type has its own decay properties. Tomato Soup lasts a lot longer than a Tomato, for instance. - -- 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. - -- 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: - -> Oxygen x 1.3 -> Nitrogen x 0.6 -> Carbon Dioxide x 0.8 -> Volatiles x 1 -> Pollutant x 3 -> Nitrous Oxide x 1.5 -> Steam x 2 -> Vacuum (see PRESSURE above) - -"#, - value = "1531087544" - ) - )] - DecayedFood = 1531087544i32, - #[strum( - serialize = "LogicStepSequencer8", - props( - name = r#"Logic Step Sequencer"#, - desc = r#"The ODA does not approve of soundtracks or other distractions. -As such, Stationeers have had to create their own musical accompaniment to the demanding labor of building and maintaining off-world infrastructure. -Central to this pastime is the step sequencer, which allows Stationeers to sequence short musical patterns or loops. - -DIY MUSIC - GETTING STARTED - -1: Connect 8 Device Step Units to your step sequencer via the data port on the left hand side. - -2: Label each step unit, then assign step units 1 through 8 on the step sequencer using the screwdriver. - -3: 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. - -4: Place a Stop Watch and use a Logic Reader and Logic Writer to write the time to the time variable on the sequencer. - -5: 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. - -6: 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. - -7: 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). - -8: Get freaky with the Low frequency oscillator. - -9: Finally, activate the sequencer, Vibeoneer."#, - value = "1531272458" - ) - )] - LogicStepSequencer8 = 1531272458i32, - #[strum( - serialize = "ItemKitDynamicGasTankAdvanced", - props( - name = r#"Kit (Portable Gas Tank Mk II)"#, - desc = r#""#, - value = "1533501495" - ) - )] - ItemKitDynamicGasTankAdvanced = 1533501495i32, - #[strum( - serialize = "ItemWireCutters", - props( - name = r#"Wire Cutters"#, - desc = r#"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", - props(name = r#"Ladder End"#, desc = r#""#, value = "1541734993") - )] - StructureLadderEnd = 1541734993i32, - #[strum( - serialize = "ItemGrenade", - props( - name = r#"Hand Grenade"#, - desc = r#"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", - props( - name = r#"Burnt Cable (5-Way Junction)"#, - desc = r#""#, - value = "1545286256" - ) - )] - StructureCableJunction5Burnt = 1545286256i32, - #[strum( - serialize = "StructurePlatformLadderOpen", - props(name = r#"Ladder Platform"#, desc = r#""#, value = "1559586682") - )] - StructurePlatformLadderOpen = 1559586682i32, - #[strum( - serialize = "StructureTraderWaypoint", - props(name = r#"Trader Waypoint"#, desc = r#""#, value = "1570931620") - )] - StructureTraderWaypoint = 1570931620i32, - #[strum( - serialize = "ItemKitLiquidUmbilical", - props(name = r#"Kit (Liquid Umbilical)"#, desc = r#""#, value = "1571996765") - )] - ItemKitLiquidUmbilical = 1571996765i32, - #[strum( - serialize = "StructureCompositeWall03", - props( - name = r#"Composite Wall (Type 3)"#, - desc = r#""#, - value = "1574321230" - ) - )] - StructureCompositeWall03 = 1574321230i32, - #[strum( - serialize = "ItemKitRespawnPointWallMounted", - props(name = r#"Kit (Respawn)"#, desc = r#""#, value = "1574688481") - )] - ItemKitRespawnPointWallMounted = 1574688481i32, - #[strum( - serialize = "ItemHastelloyIngot", - props(name = r#"Ingot (Hastelloy)"#, desc = r#""#, value = "1579842814") - )] - ItemHastelloyIngot = 1579842814i32, - #[strum( - serialize = "StructurePipeOneWayValve", - props( - name = r#"One Way Valve (Gas)"#, - desc = r#"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. -"#, - value = "1580412404" - ) - )] - StructurePipeOneWayValve = 1580412404i32, - #[strum( - serialize = "StructureStackerReverse", - props( - name = r#"Stacker"#, - desc = r#"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. -The 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", - props( - name = r#"Kit (Phase Change Device)"#, - desc = r#""#, - value = "1587787610" - ) - )] - ItemKitEvaporationChamber = 1587787610i32, - #[strum( - serialize = "ItemGlassSheets", - props( - name = r#"Glass Sheets"#, - desc = r#"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", - props(name = r#"Wall (Padded Arch)"#, desc = r#""#, value = "1590330637") - )] - StructureWallPaddedArch = 1590330637i32, - #[strum( - serialize = "StructureLightRoundAngled", - props( - name = r#"Light Round (Angled)"#, - desc = r#"Description coming."#, - value = "1592905386" - ) - )] - StructureLightRoundAngled = 1592905386i32, - #[strum( - serialize = "StructureWallGeometryT", - props(name = r#"Wall (Geometry T)"#, desc = r#""#, value = "1602758612") - )] - StructureWallGeometryT = 1602758612i32, - #[strum( - serialize = "ItemKitElectricUmbilical", - props(name = r#"Kit (Power Umbilical)"#, desc = r#""#, value = "1603046970") - )] - ItemKitElectricUmbilical = 1603046970i32, - #[strum( - serialize = "Lander", - props(name = r#"Lander"#, desc = r#""#, value = "1605130615") - )] - Lander = 1605130615i32, - #[strum( - serialize = "CartridgeNetworkAnalyser", - props( - name = r#"Network Analyzer"#, - desc = r#"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", - props( - name = r#"Air Control"#, - desc = r#"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", - props( - name = r#"Upright Wind Turbine"#, - desc = r#"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. -While 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", - props(name = r#"Fairing (Type A1)"#, desc = r#""#, value = "1622567418") - )] - StructureFairingTypeA1 = 1622567418i32, - #[strum( - serialize = "ItemKitWallArch", - props(name = r#"Kit (Arched Wall)"#, desc = r#""#, value = "1625214531") - )] - ItemKitWallArch = 1625214531i32, - #[strum( - serialize = "StructurePipeLiquidCrossJunction3", - props( - name = r#"Liquid Pipe (3-Way Junction)"#, - desc = r#"You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench."#, - value = "1628087508" - ) - )] - StructurePipeLiquidCrossJunction3 = 1628087508i32, - #[strum( - serialize = "StructureGasTankStorage", - props( - name = r#"Gas Tank Storage"#, - desc = r#"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", - props(name = r#"Hash Display"#, desc = r#""#, value = "1633074601") - )] - CircuitboardHashDisplay = 1633074601i32, - #[strum( - serialize = "CircuitboardAdvAirlockControl", - props(name = r#"Advanced Airlock"#, desc = r#""#, value = "1633663176") - )] - CircuitboardAdvAirlockControl = 1633663176i32, - #[strum( - serialize = "ItemGasFilterCarbonDioxide", - props( - name = r#"Filter (Carbon Dioxide)"#, - desc = r#"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", - props(name = r#"Wall (Flat)"#, desc = r#""#, value = "1635864154") - )] - StructureWallFlat = 1635864154i32, - #[strum( - serialize = "StructureChairBoothMiddle", - props(name = r#"Chair (Booth Middle)"#, desc = r#""#, value = "1640720378") - )] - StructureChairBoothMiddle = 1640720378i32, - #[strum( - serialize = "StructureWallArchArrow", - props(name = r#"Wall (Arch Arrow)"#, desc = r#""#, value = "1649708822") - )] - StructureWallArchArrow = 1649708822i32, - #[strum( - serialize = "StructureInsulatedPipeLiquidCrossJunction5", - props( - name = r#"Insulated Liquid Pipe (5-Way Junction)"#, - desc = r#"Liquid piping with very low temperature loss or gain."#, - value = "1654694384" - ) - )] - StructureInsulatedPipeLiquidCrossJunction5 = 1654694384i32, - #[strum( - serialize = "StructureLogicMath", - props( - name = r#"Logic Math"#, - desc = r#"0.Add -1.Subtract -2.Multiply -3.Divide -4.Mod -5.Atan2 -6.Pow -7.Log"#, - value = "1657691323" - ) - )] - StructureLogicMath = 1657691323i32, - #[strum( - serialize = "ItemKitFridgeSmall", - props(name = r#"Kit (Fridge Small)"#, desc = r#""#, value = "1661226524") - )] - ItemKitFridgeSmall = 1661226524i32, - #[strum( - serialize = "ItemScanner", - props( - name = r#"Handheld Scanner"#, - desc = r#"A mysterious piece of technology, rumored to have Zrillian origins."#, - value = "1661270830" - ) - )] - ItemScanner = 1661270830i32, - #[strum( - serialize = "ItemEmergencyToolBelt", - props(name = r#"Emergency Tool Belt"#, desc = r#""#, value = "1661941301") - )] - ItemEmergencyToolBelt = 1661941301i32, - #[strum( - serialize = "StructureEmergencyButton", - props( - name = r#"Important Button"#, - desc = r#"Description coming."#, - value = "1668452680" - ) - )] - StructureEmergencyButton = 1668452680i32, - #[strum( - serialize = "ItemKitAutoMinerSmall", - props(name = r#"Kit (Autominer Small)"#, desc = r#""#, value = "1668815415") - )] - ItemKitAutoMinerSmall = 1668815415i32, - #[strum( - serialize = "StructureChairBacklessSingle", - props( - name = r#"Chair (Backless Single)"#, - desc = r#""#, - value = "1672275150" - ) - )] - StructureChairBacklessSingle = 1672275150i32, - #[strum( - serialize = "ItemPureIceLiquidNitrogen", - props( - name = r#"Pure Ice Liquid Nitrogen"#, - desc = r#"A frozen chunk of pure Liquid Nitrogen"#, - value = "1674576569" - ) - )] - ItemPureIceLiquidNitrogen = 1674576569i32, - #[strum( - serialize = "ItemEvaSuit", - props( - name = r#"Eva Suit"#, - desc = r#"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", - props( - name = r#"Picture Frame Thin Portrait Small"#, - desc = r#""#, - value = "1684488658" - ) - )] - StructurePictureFrameThinPortraitSmall = 1684488658i32, - #[strum( - serialize = "StructureLiquidDrain", - props( - name = r#"Active Liquid Outlet"#, - desc = r#"When connected to power and activated, it pumps liquid from a liquid network into the world."#, - value = "1687692899" - ) - )] - StructureLiquidDrain = 1687692899i32, - #[strum( - serialize = "StructureLiquidTankStorage", - props( - name = r#"Liquid Tank Storage"#, - desc = r#"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", - props( - name = r#"Pipe Convection Radiator"#, - desc = r#"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. -The 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", - props( - name = r#"Solar Panel (Heavy Flat)"#, - desc = r#"This solar panel is resistant to storm damage."#, - value = "1697196770" - ) - )] - StructureSolarPanelFlatReinforced = 1697196770i32, - #[strum( - serialize = "ToolPrinterMod", - props( - name = r#"Tool Printer Mod"#, - desc = r#"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", - props( - name = r#"Burnt Heavy Cable (5-Way Junction)"#, - desc = r#""#, - value = "1701593300" - ) - )] - StructureCableJunctionH5Burnt = 1701593300i32, - #[strum( - serialize = "ItemKitFlagODA", - props(name = r#"Kit (ODA Flag)"#, desc = r#""#, value = "1701764190") - )] - ItemKitFlagOda = 1701764190i32, - #[strum( - serialize = "StructureWallSmallPanelsTwoTone", - props( - name = r#"Wall (Small Panels Two Tone)"#, - desc = r#""#, - value = "1709994581" - ) - )] - StructureWallSmallPanelsTwoTone = 1709994581i32, - #[strum( - serialize = "ItemFlowerYellow", - props(name = r#"Flower (Yellow)"#, desc = r#""#, value = "1712822019") - )] - ItemFlowerYellow = 1712822019i32, - #[strum( - serialize = "StructureInsulatedPipeLiquidCorner", - props( - name = r#"Insulated Liquid Pipe (Corner)"#, - desc = r#"Liquid piping with very low temperature loss or gain."#, - value = "1713710802" - ) - )] - StructureInsulatedPipeLiquidCorner = 1713710802i32, - #[strum( - serialize = "ItemCookedCondensedMilk", - props( - name = r#"Condensed Milk"#, - desc = r#"A high-nutrient cooked food, which can be canned."#, - value = "1715917521" - ) - )] - ItemCookedCondensedMilk = 1715917521i32, - #[strum( - serialize = "ItemGasSensor", - props(name = r#"Kit (Gas Sensor)"#, desc = r#""#, value = "1717593480") - )] - ItemGasSensor = 1717593480i32, - #[strum( - serialize = "ItemAdvancedTablet", - props( - name = r#"Advanced Tablet"#, - desc = r#"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. - - 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", - props( - name = r#"Ore (Coal)"#, - desc = r#"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", - props( - name = r#"Entity Chick"#, - desc = r#"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", - props( - name = r#"Umbilical Socket (Liquid)"#, - desc = r#""#, - value = "1734723642" - ) - )] - StructureLiquidUmbilicalFemale = 1734723642i32, - #[strum( - serialize = "StructureAirlockGate", - props( - name = r#"Small Hangar Door"#, - desc = r#"1 x 1 modular door piece for building hangar doors."#, - value = "1736080881" - ) - )] - StructureAirlockGate = 1736080881i32, - #[strum( - serialize = "CartridgeOreScannerColor", - props( - name = r#"Ore Scanner (Color)"#, - desc = r#"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", - props( - name = r#"Bench (Workbench Style)"#, - desc = r#""#, - value = "1750375230" - ) - )] - StructureBench4 = 1750375230i32, - #[strum( - serialize = "StructureCompositeCladdingSphericalCorner", - props( - name = r#"Composite Cladding (Spherical Corner)"#, - desc = r#""#, - value = "1751355139" - ) - )] - StructureCompositeCladdingSphericalCorner = 1751355139i32, - #[strum( - serialize = "ItemKitRocketScanner", - props(name = r#"Kit (Rocket Scanner)"#, desc = r#""#, value = "1753647154") - )] - ItemKitRocketScanner = 1753647154i32, - #[strum( - serialize = "ItemAreaPowerControl", - props( - name = r#"Kit (Power Controller)"#, - desc = r#"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", - props( - name = r#"Ore (Iron)"#, - desc = r#"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", - props( - name = r#"Device Step Unit"#, - desc = r#"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"#, - value = "1762696475" - ) - )] - DeviceStepUnit = 1762696475i32, - #[strum( - serialize = "StructureWallPaddedThinNoBorderCorner", - props( - name = r#"Wall (Padded Thin No Border Corner)"#, - desc = r#""#, - value = "1769527556" - ) - )] - StructureWallPaddedThinNoBorderCorner = 1769527556i32, - #[strum( - serialize = "ItemKitWindowShutter", - props(name = r#"Kit (Window Shutter)"#, desc = r#""#, value = "1779979754") - )] - ItemKitWindowShutter = 1779979754i32, - #[strum( - serialize = "StructureRocketManufactory", - props(name = r#"Rocket Manufactory"#, desc = r#""#, value = "1781051034") - )] - StructureRocketManufactory = 1781051034i32, - #[strum( - serialize = "SeedBag_Soybean", - props( - name = r#"Soybean Seeds"#, - desc = r#"Grow some Soybean."#, - value = "1783004244" - ) - )] - SeedBagSoybean = 1783004244i32, - #[strum( - serialize = "ItemEmergencyEvaSuit", - props(name = r#"Emergency Eva Suit"#, desc = r#""#, value = "1791306431") - )] - ItemEmergencyEvaSuit = 1791306431i32, - #[strum( - serialize = "StructureWallArchCornerRound", - props( - name = r#"Wall (Arch Corner Round)"#, - desc = r#""#, - value = "1794588890" - ) - )] - StructureWallArchCornerRound = 1794588890i32, - #[strum( - serialize = "ItemCoffeeMug", - props(name = r#"Coffee Mug"#, desc = r#""#, value = "1800622698") - )] - ItemCoffeeMug = 1800622698i32, - #[strum( - serialize = "StructureAngledBench", - props(name = r#"Bench (Angled)"#, desc = r#""#, value = "1811979158") - )] - StructureAngledBench = 1811979158i32, - #[strum( - serialize = "StructurePassiveLiquidDrain", - props( - name = r#"Passive Liquid Drain"#, - desc = r#"Moves liquids from a pipe network to the world atmosphere."#, - value = "1812364811" - ) - )] - StructurePassiveLiquidDrain = 1812364811i32, - #[strum( - serialize = "ItemKitLandingPadAtmos", - props( - name = r#"Kit (Landing Pad Atmospherics)"#, - desc = r#""#, - value = "1817007843" - ) - )] - ItemKitLandingPadAtmos = 1817007843i32, - #[strum( - serialize = "ItemRTGSurvival", - props( - name = r#"Kit (RTG)"#, - desc = r#"This kit creates a Kit (RTG)."#, - value = "1817645803" - ) - )] - ItemRtgSurvival = 1817645803i32, - #[strum( - serialize = "StructureInsulatedInLineTankGas1x1", - props( - name = r#"Insulated In-Line Tank Small Gas"#, - desc = r#""#, - value = "1818267386" - ) - )] - StructureInsulatedInLineTankGas1X1 = 1818267386i32, - #[strum( - serialize = "ItemPlantThermogenic_Genepool2", - props( - name = r#"Hades Flower (Beta strain)"#, - desc = r#"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", - props( - name = r#"Logic Select"#, - desc = r#"0.Equals -1.Greater -2.Less -3.NotEquals"#, - value = "1822736084" - ) - )] - StructureLogicSelect = 1822736084i32, - #[strum( - serialize = "ItemGasFilterNitrousOxideM", - props( - name = r#"Medium Filter (Nitrous Oxide)"#, - desc = r#""#, - value = "1824284061" - ) - )] - ItemGasFilterNitrousOxideM = 1824284061i32, - #[strum( - serialize = "StructureSmallDirectHeatExchangeLiquidtoGas", - props( - name = r#"Small Direct Heat Exchanger - Liquid + Gas "#, - desc = r#"Direct Heat Exchangers equalize the temperature of the two input networks."#, - value = "1825212016" - ) - )] - StructureSmallDirectHeatExchangeLiquidtoGas = 1825212016i32, - #[strum( - serialize = "ItemKitRoverFrame", - props(name = r#"Kit (Rover Frame)"#, desc = r#""#, value = "1827215803") - )] - ItemKitRoverFrame = 1827215803i32, - #[strum( - serialize = "ItemNickelOre", - props( - name = r#"Ore (Nickel)"#, - desc = r#"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", - props( - name = r#"Picture Frame Thin Portrait Small"#, - desc = r#""#, - value = "1835796040" - ) - )] - StructurePictureFrameThinMountPortraitSmall = 1835796040i32, - #[strum( - serialize = "H2Combustor", - props( - name = r#"H2 Combustor"#, - desc = r#"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", - props(name = r#"Flag (ODA 10m)"#, desc = r#""#, value = "1845441951") - )] - FlagOda10M = 1845441951i32, - #[strum( - serialize = "StructureLightLongAngled", - props( - name = r#"Wall Light (Long Angled)"#, - desc = r#""#, - value = "1847265835" - ) - )] - StructureLightLongAngled = 1847265835i32, - #[strum( - serialize = "StructurePipeLiquidCrossJunction", - props( - name = r#"Liquid Pipe (Cross Junction)"#, - desc = r#"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", - props( - name = r#"Cooked Pumpkin"#, - desc = r#"A high-nutrient cooked food, which can be canned."#, - value = "1849281546" - ) - )] - ItemCookedPumpkin = 1849281546i32, - #[strum( - serialize = "StructureLiquidValve", - props(name = r#"Liquid Valve"#, desc = r#""#, value = "1849974453") - )] - StructureLiquidValve = 1849974453i32, - #[strum( - serialize = "ApplianceTabletDock", - props(name = r#"Tablet Dock"#, desc = r#""#, value = "1853941363") - )] - ApplianceTabletDock = 1853941363i32, - #[strum( - serialize = "StructureCableJunction6HBurnt", - props( - name = r#"Burnt Cable (6-Way Junction)"#, - desc = r#""#, - value = "1854404029" - ) - )] - StructureCableJunction6HBurnt = 1854404029i32, - #[strum( - serialize = "ItemMKIIWrench", - props( - name = r#"Mk II Wrench"#, - desc = r#"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", - props(name = r#"Adhesive Insulation"#, desc = r#""#, value = "1871048978") - )] - ItemAdhesiveInsulation = 1871048978i32, - #[strum( - serialize = "ItemGasFilterCarbonDioxideL", - props( - name = r#"Heavy Filter (Carbon Dioxide)"#, - desc = r#""#, - value = "1876847024" - ) - )] - ItemGasFilterCarbonDioxideL = 1876847024i32, - #[strum( - serialize = "ItemWallHeater", - props( - name = r#"Kit (Wall Heater)"#, - desc = r#"This kit creates a Kit (Wall Heater)."#, - value = "1880134612" - ) - )] - ItemWallHeater = 1880134612i32, - #[strum( - serialize = "StructureNitrolyzer", - props( - name = r#"Nitrolyzer"#, - desc = r#"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", - props( - name = r#"Large Satellite Dish"#, - desc = r#"This large communications unit can be used to communicate with nearby trade vessels. - - 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."#, - value = "1913391845" - ) - )] - StructureLargeSatelliteDish = 1913391845i32, - #[strum( - serialize = "ItemGasFilterPollutants", - props( - name = r#"Filter (Pollutant)"#, - desc = r#"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", - props( - name = r#"Spray Paint (Khaki)"#, - desc = r#"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", - props( - name = r#"Kit (Pumped Liquid Engine)"#, - desc = r#""#, - value = "1921918951" - ) - )] - ItemKitPumpedLiquidEngine = 1921918951i32, - #[strum( - serialize = "StructurePowerUmbilicalFemaleSide", - props( - name = r#"Umbilical Socket Angle (Power)"#, - desc = r#""#, - value = "1922506192" - ) - )] - StructurePowerUmbilicalFemaleSide = 1922506192i32, - #[strum( - serialize = "ItemSoybean", - props( - name = r#"Soybean"#, - desc = r#" 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", - props( - name = r#"Insulated Liquid Pipe (3-Way Junction)"#, - desc = r#"Liquid piping with very low temperature loss or gain."#, - value = "1926651727" - ) - )] - StructureInsulatedPipeLiquidCrossJunction = 1926651727i32, - #[strum( - serialize = "ItemWreckageTurbineGenerator3", - props( - name = r#"Wreckage Turbine Generator"#, - desc = r#""#, - value = "1927790321" - ) - )] - ItemWreckageTurbineGenerator3 = 1927790321i32, - #[strum( - serialize = "StructurePassthroughHeatExchangerGasToLiquid", - props( - name = r#"CounterFlow Heat Exchanger - Gas + Liquid"#, - desc = r#"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. - Balancing the throughput of both inputs is key to creating a good exhange of temperatures."#, - value = "1928991265" - ) - )] - StructurePassthroughHeatExchangerGasToLiquid = 1928991265i32, - #[strum( - serialize = "ItemPotato", - props( - name = r#"Potato"#, - desc = r#" Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies."#, - value = "1929046963" - ) - )] - ItemPotato = 1929046963i32, - #[strum( - serialize = "StructureCableCornerHBurnt", - props(name = r#"Burnt Cable (Corner)"#, desc = r#""#, value = "1931412811") - )] - StructureCableCornerHBurnt = 1931412811i32, - #[strum( - serialize = "KitSDBSilo", - props( - name = r#"Kit (SDB Silo)"#, - desc = r#"This kit creates a SDB Silo."#, - value = "1932952652" - ) - )] - KitSdbSilo = 1932952652i32, - #[strum( - serialize = "ItemKitPipeUtility", - props(name = r#"Kit (Pipe Utility Gas)"#, desc = r#""#, value = "1934508338") - )] - ItemKitPipeUtility = 1934508338i32, - #[strum( - serialize = "ItemKitInteriorDoors", - props(name = r#"Kit (Interior Doors)"#, desc = r#""#, value = "1935945891") - )] - ItemKitInteriorDoors = 1935945891i32, - #[strum( - serialize = "StructureCryoTube", - props( - name = r#"CryoTube"#, - desc = r#"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", - props( - name = r#"Reinforced Window (Padded)"#, - desc = r#"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", - props( - name = r#"Dynamic Crate"#, - desc = r#"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", - props( - name = r#"Logic Gate"#, - desc = r#"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", - props(name = r#"LED"#, desc = r#""#, value = "1944485013") - )] - StructureDiode = 1944485013i32, - #[strum( - serialize = "StructureChairBacklessDouble", - props( - name = r#"Chair (Backless Double)"#, - desc = r#""#, - value = "1944858936" - ) - )] - StructureChairBacklessDouble = 1944858936i32, - #[strum( - serialize = "StructureBatteryCharger", - props( - name = r#"Battery Cell Charger"#, - desc = r#"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", - props( - name = r#"Furnace"#, - desc = r#"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. -A 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. -If 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", - props( - name = r#"Light Sword"#, - desc = r#"A charming, if useless, pseudo-weapon. (Creative only.)"#, - value = "1949076595" - ) - )] - ItemLightSword = 1949076595i32, - #[strum( - serialize = "ItemKitLiquidRegulator", - props(name = r#"Kit (Liquid Regulator)"#, desc = r#""#, value = "1951126161") - )] - ItemKitLiquidRegulator = 1951126161i32, - #[strum( - serialize = "StructureCompositeCladdingRoundedCorner", - props( - name = r#"Composite Cladding (Rounded Corner)"#, - desc = r#""#, - value = "1951525046" - ) - )] - StructureCompositeCladdingRoundedCorner = 1951525046i32, - #[strum( - serialize = "ItemGasFilterPollutantsL", - props( - name = r#"Heavy Filter (Pollutants)"#, - desc = r#""#, - value = "1959564765" - ) - )] - ItemGasFilterPollutantsL = 1959564765i32, - #[strum( - serialize = "ItemKitSmallSatelliteDish", - props( - name = r#"Kit (Small Satellite Dish)"#, - desc = r#""#, - value = "1960952220" - ) - )] - ItemKitSmallSatelliteDish = 1960952220i32, - #[strum( - serialize = "StructureSolarPanelFlat", - props( - name = r#"Solar Panel (Flat)"#, - desc = r#"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", - props( - name = r#""#, - desc = r#""#, - value = "1968371847" - ) - )] - StructureDrinkingFountain = 1968371847i32, - #[strum( - serialize = "ItemJetpackBasic", - props( - name = r#"Jetpack Basic"#, - desc = r#"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. -Indispensable 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. -USE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move."#, - value = "1969189000" - ) - )] - ItemJetpackBasic = 1969189000i32, - #[strum( - serialize = "ItemKitEngineMedium", - props(name = r#"Kit (Engine Medium)"#, desc = r#""#, value = "1969312177") - )] - ItemKitEngineMedium = 1969312177i32, - #[strum( - serialize = "StructureWallGeometryCorner", - props(name = r#"Wall (Geometry Corner)"#, desc = r#""#, value = "1979212240") - )] - StructureWallGeometryCorner = 1979212240i32, - #[strum( - serialize = "StructureInteriorDoorPaddedThin", - props( - name = r#"Interior Door Padded Thin"#, - desc = r#"0.Operate -1.Logic"#, - value = "1981698201" - ) - )] - StructureInteriorDoorPaddedThin = 1981698201i32, - #[strum( - serialize = "StructureWaterBottleFillerPoweredBottom", - props(name = r#"Waterbottle Filler"#, desc = r#""#, value = "1986658780") - )] - StructureWaterBottleFillerPoweredBottom = 1986658780i32, - #[strum( - serialize = "StructureLiquidTankSmall", - props(name = r#"Liquid Tank Small"#, desc = r#""#, value = "1988118157") - )] - StructureLiquidTankSmall = 1988118157i32, - #[strum( - serialize = "ItemKitComputer", - props(name = r#"Kit (Computer)"#, desc = r#""#, value = "1990225489") - )] - ItemKitComputer = 1990225489i32, - #[strum( - serialize = "StructureWeatherStation", - props( - name = r#"Weather Station"#, - desc = r#"0.NoStorm -1.StormIncoming -2.InStorm"#, - value = "1997212478" - ) - )] - StructureWeatherStation = 1997212478i32, - #[strum( - serialize = "ItemKitLogicInputOutput", - props(name = r#"Kit (Logic I/O)"#, desc = r#""#, value = "1997293610") - )] - ItemKitLogicInputOutput = 1997293610i32, - #[strum( - serialize = "StructureCompositeCladdingPanel", - props( - name = r#"Composite Cladding (Panel)"#, - desc = r#""#, - value = "1997436771" - ) - )] - StructureCompositeCladdingPanel = 1997436771i32, - #[strum( - serialize = "StructureElevatorShaftIndustrial", - props(name = r#"Elevator Shaft"#, desc = r#""#, value = "1998354978") - )] - StructureElevatorShaftIndustrial = 1998354978i32, - #[strum( - serialize = "ReagentColorRed", - props(name = r#"Color Dye (Red)"#, desc = r#""#, value = "1998377961") - )] - ReagentColorRed = 1998377961i32, - #[strum( - serialize = "Flag_ODA_6m", - props(name = r#"Flag (ODA 6m)"#, desc = r#""#, value = "1998634960") - )] - FlagOda6M = 1998634960i32, - #[strum( - serialize = "StructureAreaPowerControl", - props( - name = r#"Area Power Control"#, - desc = r#"An Area Power Control (APC) has three main functions: -Its primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. -APCs also create sub-networks, as no devices on the far side of an APC are visible on the main network. -Lastly, 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", - props(name = r#"Heavy Filter (Water)"#, desc = r#""#, value = "2004969680") - )] - ItemGasFilterWaterL = 2004969680i32, - #[strum( - serialize = "ItemDrill", - props( - name = r#"Hand Drill"#, - desc = r#"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", - props(name = r#"Kit (Small Flag)"#, desc = r#""#, value = "2011191088") - )] - ItemFlagSmall = 2011191088i32, - #[strum( - serialize = "ItemCookedRice", - props( - name = r#"Cooked Rice"#, - desc = r#"A high-nutrient cooked food, which can be canned."#, - value = "2013539020" - ) - )] - ItemCookedRice = 2013539020i32, - #[strum( - serialize = "StructureRocketScanner", - props(name = r#"Rocket Scanner"#, desc = r#""#, value = "2014252591") - )] - StructureRocketScanner = 2014252591i32, - #[strum( - serialize = "ItemKitPoweredVent", - props(name = r#"Kit (Powered Vent)"#, desc = r#""#, value = "2015439334") - )] - ItemKitPoweredVent = 2015439334i32, - #[strum( - serialize = "CircuitboardSolarControl", - props( - name = r#"Solar Control"#, - desc = r#"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", - props( - name = r#"Pipe Radiator Liquid"#, - desc = r#"A liquid pipe mounted radiator optimized for radiating heat in vacuums."#, - value = "2024754523" - ) - )] - StructurePipeRadiatorFlatLiquid = 2024754523i32, - #[strum( - serialize = "StructureWallPaddingLightFitting", - props( - name = r#"Wall (Padding Light Fitting)"#, - desc = r#""#, - value = "2024882687" - ) - )] - StructureWallPaddingLightFitting = 2024882687i32, - #[strum( - serialize = "StructureReinforcedCompositeWindow", - props( - name = r#"Reinforced Window (Composite)"#, - desc = r#"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", - props( - name = r#"Kit (Rocket Liquid Fuel Tank)"#, - desc = r#""#, - value = "2032027950" - ) - )] - ItemKitRocketLiquidFuelTank = 2032027950i32, - #[strum( - serialize = "StructureEngineMountTypeA1", - props(name = r#"Engine Mount (Type A1)"#, desc = r#""#, value = "2035781224") - )] - StructureEngineMountTypeA1 = 2035781224i32, - #[strum( - serialize = "ItemLiquidDrain", - props(name = r#"Kit (Liquid Drain)"#, desc = r#""#, value = "2036225202") - )] - ItemLiquidDrain = 2036225202i32, - #[strum( - serialize = "ItemLiquidTankStorage", - props( - name = r#"Kit (Liquid Canister Storage)"#, - desc = r#"This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister."#, - value = "2037427578" - ) - )] - ItemLiquidTankStorage = 2037427578i32, - #[strum( - serialize = "StructurePipeCrossJunction3", - props( - name = r#"Pipe (3-Way Junction)"#, - desc = r#"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", - props( - name = r#"Peace Lily"#, - desc = r#"A fetching lily with greater resistance to cold temperatures."#, - value = "2042955224" - ) - )] - ItemPeaceLily = 2042955224i32, - #[strum( - serialize = "PortableSolarPanel", - props(name = r#"Portable Solar Panel"#, desc = r#""#, value = "2043318949") - )] - PortableSolarPanel = 2043318949i32, - #[strum( - serialize = "ItemMushroom", - props( - name = r#"Mushroom"#, - desc = r#"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", - props(name = r#"Stairwell (No Doors)"#, desc = r#""#, value = "2049879875") - )] - StructureStairwellNoDoors = 2049879875i32, - #[strum( - serialize = "StructureWindowShutter", - props( - name = r#"Window Shutter"#, - desc = r#"For those special, private moments, a window that can be closed to prying eyes. - -When closed, has the heat transfer characteristics of a basic wall. Requires power, and can be connected to logic systems."#, - value = "2056377335" - ) - )] - StructureWindowShutter = 2056377335i32, - #[strum( - serialize = "ItemKitHydroponicStation", - props( - name = r#"Kit (Hydroponic Station)"#, - desc = r#""#, - value = "2057179799" - ) - )] - ItemKitHydroponicStation = 2057179799i32, - #[strum( - serialize = "ItemCableCoilHeavy", - props( - name = r#"Cable Coil (Heavy)"#, - desc = r#"Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW."#, - value = "2060134443" - ) - )] - ItemCableCoilHeavy = 2060134443i32, - #[strum( - serialize = "StructureElevatorLevelIndustrial", - props(name = r#"Elevator Level"#, desc = r#""#, value = "2060648791") - )] - StructureElevatorLevelIndustrial = 2060648791i32, - #[strum( - serialize = "StructurePassiveLargeRadiatorGas", - props( - name = r#"Medium Convection Radiator"#, - desc = r#"Has been replaced by Medium Convection Radiator."#, - value = "2066977095" - ) - )] - StructurePassiveLargeRadiatorGas = 2066977095i32, - #[strum( - serialize = "ItemKitInsulatedLiquidPipe", - props( - name = r#"Kit (Insulated Liquid Pipe)"#, - desc = r#""#, - value = "2067655311" - ) - )] - ItemKitInsulatedLiquidPipe = 2067655311i32, - #[strum( - serialize = "StructureLiquidPipeRadiator", - props( - name = r#"Liquid Pipe Convection Radiator"#, - desc = r#"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. -The 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", - props(name = r#"Logic Hash Generator"#, desc = r#""#, value = "2077593121") - )] - StructureLogicHashGen = 2077593121i32, - #[strum( - serialize = "AccessCardWhite", - props(name = r#"Access Card (White)"#, desc = r#""#, value = "2079959157") - )] - AccessCardWhite = 2079959157i32, - #[strum( - serialize = "StructureCableStraightHBurnt", - props(name = r#"Burnt Cable (Straight)"#, desc = r#""#, value = "2085762089") - )] - StructureCableStraightHBurnt = 2085762089i32, - #[strum( - serialize = "StructureWallPaddedWindow", - props(name = r#"Wall (Padded Window)"#, desc = r#""#, value = "2087628940") - )] - StructureWallPaddedWindow = 2087628940i32, - #[strum( - serialize = "StructureLogicMirror", - props(name = r#"Logic Mirror"#, desc = r#""#, value = "2096189278") - )] - StructureLogicMirror = 2096189278i32, - #[strum( - serialize = "StructureWallFlatCornerTriangle", - props( - name = r#"Wall (Flat Corner Triangle)"#, - desc = r#""#, - value = "2097419366" - ) - )] - StructureWallFlatCornerTriangle = 2097419366i32, - #[strum( - serialize = "StructureBackLiquidPressureRegulator", - props( - name = r#"Liquid Back Volume Regulator"#, - desc = r#"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", - props(name = r#"Small Tank (Fuel)"#, desc = r#""#, value = "2102454415") - )] - StructureTankSmallFuel = 2102454415i32, - #[strum( - serialize = "ItemEmergencyWireCutters", - props(name = r#"Emergency Wire Cutters"#, desc = r#""#, value = "2102803952") - )] - ItemEmergencyWireCutters = 2102803952i32, - #[strum( - serialize = "StructureGasMixer", - props( - name = r#"Gas Mixer"#, - desc = r#"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", - props( - name = r#"Composite Floor Grating Open"#, - desc = r#""#, - value = "2109695912" - ) - )] - StructureCompositeFloorGratingOpen = 2109695912i32, - #[strum( - serialize = "ItemRocketMiningDrillHead", - props( - name = r#"Mining-Drill Head (Basic)"#, - desc = r#"Replaceable drill head for Rocket Miner"#, - value = "2109945337" - ) - )] - ItemRocketMiningDrillHead = 2109945337i32, - #[strum( - serialize = "ItemSugar", - props(name = r#"Sugar"#, desc = r#""#, value = "2111910840") - )] - ItemSugar = 2111910840i32, - #[strum( - serialize = "DynamicMKIILiquidCanisterEmpty", - props( - name = r#"Portable Liquid Tank Mk II"#, - desc = r#"An empty, insulated liquid Gas Canister."#, - value = "2130739600" - ) - )] - DynamicMkiiLiquidCanisterEmpty = 2130739600i32, - #[strum( - serialize = "ItemSpaceOre", - props( - name = r#"Dirty Ore"#, - desc = r#"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", - props(name = r#"Kit (Powered Chutes)"#, desc = r#""#, value = "2133035682") - )] - ItemKitStandardChute = 2133035682i32, - #[strum( - serialize = "StructureInsulatedPipeStraight", - props( - name = r#"Insulated Pipe (Straight)"#, - desc = r#"Insulated pipes greatly reduce heat loss from gases stored in them."#, - value = "2134172356" - ) - )] - StructureInsulatedPipeStraight = 2134172356i32, - #[strum( - serialize = "ItemLeadIngot", - props(name = r#"Ingot (Lead)"#, desc = r#""#, value = "2134647745") - )] - ItemLeadIngot = 2134647745i32, - #[strum( - serialize = "ItemGasCanisterNitrogen", - props(name = r#"Canister (Nitrogen)"#, desc = r#""#, value = "2145068424") - )] - ItemGasCanisterNitrogen = 2145068424i32, -} diff --git a/ic10emu/src/vm/enums/script_enums.rs b/ic10emu/src/vm/enums/script_enums.rs deleted file mode 100644 index 2308f1c..0000000 --- a/ic10emu/src/vm/enums/script_enums.rs +++ /dev/null @@ -1,2287 +0,0 @@ -// ================================================= -// !! <-----> DO NOT MODIFY <-----> !! -// -// This module was automatically generated by an -// xtask -// -// run `cargo xtask generate` from the workspace -// to regenerate -// -// ================================================= - -use serde_derive::{Deserialize, Serialize}; -use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; -#[derive( - Debug, - Display, - Clone, - Copy, - PartialEq, - Eq, - PartialOrd, - Ord, - Hash, - EnumString, - AsRefStr, - EnumProperty, - EnumIter, - FromRepr, - Serialize, - Deserialize, -)] -#[strum(use_phf)] -#[repr(u8)] -pub enum LogicBatchMethod { - #[strum(serialize = "Average", props(docs = r#""#, value = "0"))] - Average = 0u8, - #[strum(serialize = "Sum", props(docs = r#""#, value = "1"))] - Sum = 1u8, - #[strum(serialize = "Minimum", props(docs = r#""#, value = "2"))] - Minimum = 2u8, - #[strum(serialize = "Maximum", props(docs = r#""#, value = "3"))] - Maximum = 3u8, -} -#[derive( - Debug, - Display, - Clone, - Copy, - PartialEq, - Eq, - PartialOrd, - Ord, - Hash, - EnumString, - AsRefStr, - EnumProperty, - EnumIter, - FromRepr, - Serialize, - Deserialize, -)] -#[strum(use_phf)] -#[repr(u8)] -pub enum LogicReagentMode { - #[strum(serialize = "Contents", props(docs = r#""#, value = "0"))] - Contents = 0u8, - #[strum(serialize = "Required", props(docs = r#""#, value = "1"))] - Required = 1u8, - #[strum(serialize = "Recipe", props(docs = r#""#, value = "2"))] - Recipe = 2u8, - #[strum(serialize = "TotalContents", props(docs = r#""#, value = "3"))] - TotalContents = 3u8, -} -#[derive( - Debug, - Default, - Display, - Clone, - Copy, - PartialEq, - Eq, - PartialOrd, - Ord, - Hash, - EnumString, - AsRefStr, - EnumProperty, - EnumIter, - FromRepr, - Serialize, - Deserialize, -)] -#[strum(use_phf)] -#[repr(u8)] -pub enum LogicSlotType { - #[strum(serialize = "None", props(docs = r#"No description"#, value = "0"))] - #[default] - None = 0u8, - #[strum( - serialize = "Occupied", - props( - docs = r#"returns 0 when slot is not occupied, 1 when it is"#, - value = "1" - ) - )] - Occupied = 1u8, - #[strum( - serialize = "OccupantHash", - props( - docs = r#"returns the has of the current occupant, the unique identifier of the thing"#, - value = "2" - ) - )] - OccupantHash = 2u8, - #[strum( - serialize = "Quantity", - props( - docs = r#"returns the current quantity, such as stack size, of the item in the slot"#, - value = "3" - ) - )] - Quantity = 3u8, - #[strum( - serialize = "Damage", - props( - docs = r#"returns the damage state of the item in the slot"#, - value = "4" - ) - )] - Damage = 4u8, - #[strum( - serialize = "Efficiency", - props( - docs = r#"returns the growth efficiency of the plant in the slot"#, - value = "5" - ) - )] - Efficiency = 5u8, - #[strum( - serialize = "Health", - props(docs = r#"returns the health of the plant in the slot"#, value = "6") - )] - Health = 6u8, - #[strum( - serialize = "Growth", - props( - docs = r#"returns the current growth state of the plant in the slot"#, - value = "7" - ) - )] - Growth = 7u8, - #[strum( - serialize = "Pressure", - props( - docs = r#"returns pressure of the slot occupants internal atmosphere"#, - value = "8" - ) - )] - Pressure = 8u8, - #[strum( - serialize = "Temperature", - props( - docs = r#"returns temperature of the slot occupants internal atmosphere"#, - value = "9" - ) - )] - Temperature = 9u8, - #[strum( - serialize = "Charge", - props( - docs = r#"returns current energy charge the slot occupant is holding"#, - value = "10" - ) - )] - Charge = 10u8, - #[strum( - serialize = "ChargeRatio", - props( - docs = r#"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", - props( - docs = r#"returns integer representing the class of object"#, - value = "12" - ) - )] - Class = 12u8, - #[strum( - serialize = "PressureWaste", - props( - docs = r#"returns pressure in the waste tank of the jetpack in this slot"#, - value = "13" - ) - )] - PressureWaste = 13u8, - #[strum( - serialize = "PressureAir", - props( - docs = r#"returns pressure in the air tank of the jetpack in this slot"#, - value = "14" - ) - )] - PressureAir = 14u8, - #[strum( - serialize = "MaxQuantity", - props( - docs = r#"returns the max stack size of the item in the slot"#, - value = "15" - ) - )] - MaxQuantity = 15u8, - #[strum( - serialize = "Mature", - props( - docs = r#"returns 1 if the plant in this slot is mature, 0 when it isn't"#, - value = "16" - ) - )] - Mature = 16u8, - #[strum( - serialize = "PrefabHash", - props( - docs = r#"returns the hash of the structure in the slot"#, - value = "17" - ) - )] - PrefabHash = 17u8, - #[strum( - serialize = "Seeding", - props( - docs = r#"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", - props( - docs = r#"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", - props(docs = r#"No description available"#, value = "20") - )] - Volume = 20u8, - #[strum( - serialize = "Open", - props(docs = r#"No description available"#, value = "21") - )] - Open = 21u8, - #[strum( - serialize = "On", - props(docs = r#"No description available"#, value = "22") - )] - On = 22u8, - #[strum( - serialize = "Lock", - props(docs = r#"No description available"#, value = "23") - )] - Lock = 23u8, - #[strum( - serialize = "SortingClass", - props(docs = r#"No description available"#, value = "24") - )] - SortingClass = 24u8, - #[strum( - serialize = "FilterType", - props(docs = r#"No description available"#, value = "25") - )] - FilterType = 25u8, - #[strum( - serialize = "ReferenceId", - props(docs = r#"Unique Reference Identifier for this object"#, value = "26") - )] - ReferenceId = 26u8, -} -#[derive( - Debug, - Default, - Display, - Clone, - Copy, - PartialEq, - Eq, - PartialOrd, - Ord, - Hash, - EnumString, - AsRefStr, - EnumProperty, - EnumIter, - FromRepr, - Serialize, - Deserialize, -)] -#[strum(use_phf)] -#[repr(u16)] -pub enum LogicType { - #[strum( - serialize = "None", - props(deprecated = "true", docs = r#"No description"#, value = "0") - )] - #[default] - None = 0u16, - #[strum( - serialize = "Power", - props( - docs = r#"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", - props(docs = r#"1 if device is open, otherwise 0"#, value = "2") - )] - Open = 2u16, - #[strum( - serialize = "Mode", - props( - docs = r#"Integer for mode state, different devices will have different mode states available to them"#, - value = "3" - ) - )] - Mode = 3u16, - #[strum( - serialize = "Error", - props(docs = r#"1 if device is in error state, otherwise 0"#, value = "4") - )] - Error = 4u16, - #[strum( - serialize = "Pressure", - props(docs = r#"The current pressure reading of the device"#, value = "5") - )] - Pressure = 5u16, - #[strum( - serialize = "Temperature", - props(docs = r#"The current temperature reading of the device"#, value = "6") - )] - Temperature = 6u16, - #[strum( - serialize = "PressureExternal", - props(docs = r#"Setting for external pressure safety, in KPa"#, value = "7") - )] - PressureExternal = 7u16, - #[strum( - serialize = "PressureInternal", - props(docs = r#"Setting for internal pressure safety, in KPa"#, value = "8") - )] - PressureInternal = 8u16, - #[strum( - serialize = "Activate", - props( - docs = r#"1 if device is activated (usually means running), otherwise 0"#, - value = "9" - ) - )] - Activate = 9u16, - #[strum( - serialize = "Lock", - props( - docs = r#"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", - props(docs = r#"The current charge the device has"#, value = "11") - )] - Charge = 11u16, - #[strum( - serialize = "Setting", - props( - docs = r#"A variable setting that can be read or written, depending on the device"#, - value = "12" - ) - )] - Setting = 12u16, - #[strum( - serialize = "Reagents", - props( - docs = r#"Total number of reagents recorded by the device"#, - value = "13" - ) - )] - Reagents = 13u16, - #[strum( - serialize = "RatioOxygen", - props(docs = r#"The ratio of oxygen in device atmosphere"#, value = "14") - )] - RatioOxygen = 14u16, - #[strum( - serialize = "RatioCarbonDioxide", - props( - docs = r#"The ratio of Carbon Dioxide in device atmosphere"#, - value = "15" - ) - )] - RatioCarbonDioxide = 15u16, - #[strum( - serialize = "RatioNitrogen", - props(docs = r#"The ratio of nitrogen in device atmosphere"#, value = "16") - )] - RatioNitrogen = 16u16, - #[strum( - serialize = "RatioPollutant", - props(docs = r#"The ratio of pollutant in device atmosphere"#, value = "17") - )] - RatioPollutant = 17u16, - #[strum( - serialize = "RatioVolatiles", - props(docs = r#"The ratio of volatiles in device atmosphere"#, value = "18") - )] - RatioVolatiles = 18u16, - #[strum( - serialize = "RatioWater", - props(docs = r#"The ratio of water in device atmosphere"#, value = "19") - )] - RatioWater = 19u16, - #[strum( - serialize = "Horizontal", - props(docs = r#"Horizontal setting of the device"#, value = "20") - )] - Horizontal = 20u16, - #[strum( - serialize = "Vertical", - props(docs = r#"Vertical setting of the device"#, value = "21") - )] - Vertical = 21u16, - #[strum( - serialize = "SolarAngle", - props(docs = r#"Solar angle of the device"#, value = "22") - )] - SolarAngle = 22u16, - #[strum( - serialize = "Maximum", - props(docs = r#"Maximum setting of the device"#, value = "23") - )] - Maximum = 23u16, - #[strum( - serialize = "Ratio", - props( - docs = r#"Context specific value depending on device, 0 to 1 based ratio"#, - value = "24" - ) - )] - Ratio = 24u16, - #[strum( - serialize = "PowerPotential", - props( - docs = r#"How much energy the device or network potentially provides"#, - value = "25" - ) - )] - PowerPotential = 25u16, - #[strum( - serialize = "PowerActual", - props( - docs = r#"How much energy the device or network is actually using"#, - value = "26" - ) - )] - PowerActual = 26u16, - #[strum( - serialize = "Quantity", - props(docs = r#"Total quantity on the device"#, value = "27") - )] - Quantity = 27u16, - #[strum( - serialize = "On", - props( - docs = r#"The current state of the device, 0 for off, 1 for on"#, - value = "28" - ) - )] - On = 28u16, - #[strum( - serialize = "ImportQuantity", - props( - deprecated = "true", - docs = r#"Total quantity of items imported by the device"#, - value = "29" - ) - )] - ImportQuantity = 29u16, - #[strum( - serialize = "ImportSlotOccupant", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "30") - )] - ImportSlotOccupant = 30u16, - #[strum( - serialize = "ExportQuantity", - props( - deprecated = "true", - docs = r#"Total quantity of items exported by the device"#, - value = "31" - ) - )] - ExportQuantity = 31u16, - #[strum( - serialize = "ExportSlotOccupant", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "32") - )] - ExportSlotOccupant = 32u16, - #[strum( - serialize = "RequiredPower", - props( - docs = r#"Idle operating power quantity, does not necessarily include extra demand power"#, - value = "33" - ) - )] - RequiredPower = 33u16, - #[strum( - serialize = "HorizontalRatio", - props(docs = r#"Radio of horizontal setting for device"#, value = "34") - )] - HorizontalRatio = 34u16, - #[strum( - serialize = "VerticalRatio", - props(docs = r#"Radio of vertical setting for device"#, value = "35") - )] - VerticalRatio = 35u16, - #[strum( - serialize = "PowerRequired", - props( - docs = r#"Power requested from the device and/or network"#, - value = "36" - ) - )] - PowerRequired = 36u16, - #[strum( - serialize = "Idle", - props( - docs = r#"Returns 1 if the device is currently idle, otherwise 0"#, - value = "37" - ) - )] - Idle = 37u16, - #[strum( - serialize = "Color", - props( - docs = r#" - 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. - -0: Blue -1: Grey -2: Green -3: Orange -4: Red -5: Yellow -6: White -7: Black -8: Brown -9: Khaki -10: Pink -11: Purple - - 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. - "#, - value = "38" - ) - )] - Color = 38u16, - #[strum( - serialize = "ElevatorSpeed", - props(docs = r#"Current speed of the elevator"#, value = "39") - )] - ElevatorSpeed = 39u16, - #[strum( - serialize = "ElevatorLevel", - props(docs = r#"Level the elevator is currently at"#, value = "40") - )] - ElevatorLevel = 40u16, - #[strum( - serialize = "RecipeHash", - props( - docs = r#"Current hash of the recipe the device is set to produce"#, - value = "41" - ) - )] - RecipeHash = 41u16, - #[strum( - serialize = "ExportSlotHash", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "42") - )] - ExportSlotHash = 42u16, - #[strum( - serialize = "ImportSlotHash", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "43") - )] - ImportSlotHash = 43u16, - #[strum( - serialize = "PlantHealth1", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "44") - )] - PlantHealth1 = 44u16, - #[strum( - serialize = "PlantHealth2", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "45") - )] - PlantHealth2 = 45u16, - #[strum( - serialize = "PlantHealth3", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "46") - )] - PlantHealth3 = 46u16, - #[strum( - serialize = "PlantHealth4", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "47") - )] - PlantHealth4 = 47u16, - #[strum( - serialize = "PlantGrowth1", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "48") - )] - PlantGrowth1 = 48u16, - #[strum( - serialize = "PlantGrowth2", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "49") - )] - PlantGrowth2 = 49u16, - #[strum( - serialize = "PlantGrowth3", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "50") - )] - PlantGrowth3 = 50u16, - #[strum( - serialize = "PlantGrowth4", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "51") - )] - PlantGrowth4 = 51u16, - #[strum( - serialize = "PlantEfficiency1", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "52") - )] - PlantEfficiency1 = 52u16, - #[strum( - serialize = "PlantEfficiency2", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "53") - )] - PlantEfficiency2 = 53u16, - #[strum( - serialize = "PlantEfficiency3", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "54") - )] - PlantEfficiency3 = 54u16, - #[strum( - serialize = "PlantEfficiency4", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "55") - )] - PlantEfficiency4 = 55u16, - #[strum( - serialize = "PlantHash1", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "56") - )] - PlantHash1 = 56u16, - #[strum( - serialize = "PlantHash2", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "57") - )] - PlantHash2 = 57u16, - #[strum( - serialize = "PlantHash3", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "58") - )] - PlantHash3 = 58u16, - #[strum( - serialize = "PlantHash4", - props(deprecated = "true", docs = r#"DEPRECATED"#, value = "59") - )] - PlantHash4 = 59u16, - #[strum( - serialize = "RequestHash", - props( - docs = r#"When set to the unique identifier, requests an item of the provided type from the device"#, - value = "60" - ) - )] - RequestHash = 60u16, - #[strum( - serialize = "CompletionRatio", - props( - docs = r#"How complete the current production is for this device, between 0 and 1"#, - value = "61" - ) - )] - CompletionRatio = 61u16, - #[strum( - serialize = "ClearMemory", - props( - docs = r#"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", - props( - docs = r#"How many items exported since last ClearMemory"#, - value = "63" - ) - )] - ExportCount = 63u16, - #[strum( - serialize = "ImportCount", - props( - docs = r#"How many items imported since last ClearMemory"#, - value = "64" - ) - )] - ImportCount = 64u16, - #[strum( - serialize = "PowerGeneration", - props(docs = r#"Returns how much power is being generated"#, value = "65") - )] - PowerGeneration = 65u16, - #[strum( - serialize = "TotalMoles", - props(docs = r#"Returns the total moles of the device"#, value = "66") - )] - TotalMoles = 66u16, - #[strum( - serialize = "Volume", - props(docs = r#"Returns the device atmosphere volume"#, value = "67") - )] - Volume = 67u16, - #[strum( - serialize = "Plant", - props( - docs = r#"Performs the planting action for any plant based machinery"#, - value = "68" - ) - )] - Plant = 68u16, - #[strum( - serialize = "Harvest", - props( - docs = r#"Performs the harvesting action for any plant based machinery"#, - value = "69" - ) - )] - Harvest = 69u16, - #[strum( - serialize = "Output", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"#, - value = "72" - ) - )] - TemperatureSetting = 72u16, - #[strum( - serialize = "TemperatureExternal", - props( - docs = r#"The temperature of the outside of the device, usually the world atmosphere surrounding it"#, - value = "73" - ) - )] - TemperatureExternal = 73u16, - #[strum( - serialize = "Filtration", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"The current position in X dimension in world coordinates"#, - value = "76" - ) - )] - PositionX = 76u16, - #[strum( - serialize = "PositionY", - props( - docs = r#"The current position in Y dimension in world coordinates"#, - value = "77" - ) - )] - PositionY = 77u16, - #[strum( - serialize = "PositionZ", - props( - docs = r#"The current position in Z dimension in world coordinates"#, - value = "78" - ) - )] - PositionZ = 78u16, - #[strum( - serialize = "VelocityMagnitude", - props(docs = r#"The current magnitude of the velocity vector"#, value = "79") - )] - VelocityMagnitude = 79u16, - #[strum( - serialize = "VelocityRelativeX", - props( - docs = r#"The current velocity X relative to the forward vector of this"#, - value = "80" - ) - )] - VelocityRelativeX = 80u16, - #[strum( - serialize = "VelocityRelativeY", - props( - docs = r#"The current velocity Y relative to the forward vector of this"#, - value = "81" - ) - )] - VelocityRelativeY = 81u16, - #[strum( - serialize = "VelocityRelativeZ", - props( - docs = r#"The current velocity Z relative to the forward vector of this"#, - value = "82" - ) - )] - VelocityRelativeZ = 82u16, - #[strum( - serialize = "RatioNitrousOxide", - props( - docs = r#"The ratio of Nitrous Oxide in device atmosphere"#, - value = "83" - ) - )] - RatioNitrousOxide = 83u16, - #[strum( - serialize = "PrefabHash", - props(docs = r#"The hash of the structure"#, value = "84") - )] - PrefabHash = 84u16, - #[strum( - serialize = "ForceWrite", - props(docs = r#"Forces Logic Writer devices to rewrite value"#, value = "85") - )] - ForceWrite = 85u16, - #[strum( - serialize = "SignalStrength", - props( - docs = r#"Returns the degree offset of the strongest contact"#, - value = "86" - ) - )] - SignalStrength = 86u16, - #[strum( - serialize = "SignalID", - props( - docs = r#"Returns the contact ID of the strongest signal from this Satellite"#, - value = "87" - ) - )] - SignalId = 87u16, - #[strum( - serialize = "TargetX", - props( - docs = r#"The target position in X dimension in world coordinates"#, - value = "88" - ) - )] - TargetX = 88u16, - #[strum( - serialize = "TargetY", - props( - docs = r#"The target position in Y dimension in world coordinates"#, - value = "89" - ) - )] - TargetY = 89u16, - #[strum( - serialize = "TargetZ", - props( - docs = r#"The target position in Z dimension in world coordinates"#, - value = "90" - ) - )] - TargetZ = 90u16, - #[strum( - serialize = "SettingInput", - props(docs = r#""#, value = "91") - )] - SettingInput = 91u16, - #[strum( - serialize = "SettingOutput", - props(docs = r#""#, value = "92") - )] - SettingOutput = 92u16, - #[strum( - serialize = "CurrentResearchPodType", - props(docs = r#""#, value = "93") - )] - CurrentResearchPodType = 93u16, - #[strum( - serialize = "ManualResearchRequiredPod", - props( - docs = r#"Sets the pod type to search for a certain pod when breaking down a pods."#, - value = "94" - ) - )] - ManualResearchRequiredPod = 94u16, - #[strum( - serialize = "MineablesInVicinity", - props( - docs = r#"Returns the amount of potential mineables within an extended area around AIMEe."#, - value = "95" - ) - )] - MineablesInVicinity = 95u16, - #[strum( - serialize = "MineablesInQueue", - props( - docs = r#"Returns the amount of mineables AIMEe has queued up to mine."#, - value = "96" - ) - )] - MineablesInQueue = 96u16, - #[strum( - serialize = "NextWeatherEventTime", - props( - docs = r#"Returns in seconds when the next weather event is inbound."#, - value = "97" - ) - )] - NextWeatherEventTime = 97u16, - #[strum( - serialize = "Combustion", - props( - docs = r#"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."#, - value = "98" - ) - )] - Combustion = 98u16, - #[strum( - serialize = "Fuel", - props( - docs = r#"Gets the cost of fuel to return the rocket to your current world."#, - value = "99" - ) - )] - Fuel = 99u16, - #[strum( - serialize = "ReturnFuelCost", - props( - docs = r#"Gets the fuel remaining in your rocket's fuel tank."#, - value = "100" - ) - )] - ReturnFuelCost = 100u16, - #[strum( - serialize = "CollectableGoods", - props( - docs = r#"Gets the cost of fuel to return the rocket to your current world."#, - value = "101" - ) - )] - CollectableGoods = 101u16, - #[strum(serialize = "Time", props(docs = r#"Time"#, value = "102"))] - Time = 102u16, - #[strum(serialize = "Bpm", props(docs = r#"Bpm"#, value = "103"))] - Bpm = 103u16, - #[strum( - serialize = "EnvironmentEfficiency", - props( - docs = r#"The Environment Efficiency reported by the machine, as a float between 0 and 1"#, - value = "104" - ) - )] - EnvironmentEfficiency = 104u16, - #[strum( - serialize = "WorkingGasEfficiency", - props( - docs = r#"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"#, - value = "105" - ) - )] - WorkingGasEfficiency = 105u16, - #[strum( - serialize = "PressureInput", - props( - docs = r#"The current pressure reading of the device's Input Network"#, - value = "106" - ) - )] - PressureInput = 106u16, - #[strum( - serialize = "TemperatureInput", - props( - docs = r#"The current temperature reading of the device's Input Network"#, - value = "107" - ) - )] - TemperatureInput = 107u16, - #[strum( - serialize = "RatioOxygenInput", - props( - docs = r#"The ratio of oxygen in device's input network"#, - value = "108" - ) - )] - RatioOxygenInput = 108u16, - #[strum( - serialize = "RatioCarbonDioxideInput", - props( - docs = r#"The ratio of Carbon Dioxide in device's input network"#, - value = "109" - ) - )] - RatioCarbonDioxideInput = 109u16, - #[strum( - serialize = "RatioNitrogenInput", - props( - docs = r#"The ratio of nitrogen in device's input network"#, - value = "110" - ) - )] - RatioNitrogenInput = 110u16, - #[strum( - serialize = "RatioPollutantInput", - props( - docs = r#"The ratio of pollutant in device's input network"#, - value = "111" - ) - )] - RatioPollutantInput = 111u16, - #[strum( - serialize = "RatioVolatilesInput", - props( - docs = r#"The ratio of volatiles in device's input network"#, - value = "112" - ) - )] - RatioVolatilesInput = 112u16, - #[strum( - serialize = "RatioWaterInput", - props( - docs = r#"The ratio of water in device's input network"#, - value = "113" - ) - )] - RatioWaterInput = 113u16, - #[strum( - serialize = "RatioNitrousOxideInput", - props( - docs = r#"The ratio of Nitrous Oxide in device's input network"#, - value = "114" - ) - )] - RatioNitrousOxideInput = 114u16, - #[strum( - serialize = "TotalMolesInput", - props( - docs = r#"Returns the total moles of the device's Input Network"#, - value = "115" - ) - )] - TotalMolesInput = 115u16, - #[strum( - serialize = "PressureInput2", - props( - docs = r#"The current pressure reading of the device's Input2 Network"#, - value = "116" - ) - )] - PressureInput2 = 116u16, - #[strum( - serialize = "TemperatureInput2", - props( - docs = r#"The current temperature reading of the device's Input2 Network"#, - value = "117" - ) - )] - TemperatureInput2 = 117u16, - #[strum( - serialize = "RatioOxygenInput2", - props( - docs = r#"The ratio of oxygen in device's Input2 network"#, - value = "118" - ) - )] - RatioOxygenInput2 = 118u16, - #[strum( - serialize = "RatioCarbonDioxideInput2", - props( - docs = r#"The ratio of Carbon Dioxide in device's Input2 network"#, - value = "119" - ) - )] - RatioCarbonDioxideInput2 = 119u16, - #[strum( - serialize = "RatioNitrogenInput2", - props( - docs = r#"The ratio of nitrogen in device's Input2 network"#, - value = "120" - ) - )] - RatioNitrogenInput2 = 120u16, - #[strum( - serialize = "RatioPollutantInput2", - props( - docs = r#"The ratio of pollutant in device's Input2 network"#, - value = "121" - ) - )] - RatioPollutantInput2 = 121u16, - #[strum( - serialize = "RatioVolatilesInput2", - props( - docs = r#"The ratio of volatiles in device's Input2 network"#, - value = "122" - ) - )] - RatioVolatilesInput2 = 122u16, - #[strum( - serialize = "RatioWaterInput2", - props( - docs = r#"The ratio of water in device's Input2 network"#, - value = "123" - ) - )] - RatioWaterInput2 = 123u16, - #[strum( - serialize = "RatioNitrousOxideInput2", - props( - docs = r#"The ratio of Nitrous Oxide in device's Input2 network"#, - value = "124" - ) - )] - RatioNitrousOxideInput2 = 124u16, - #[strum( - serialize = "TotalMolesInput2", - props( - docs = r#"Returns the total moles of the device's Input2 Network"#, - value = "125" - ) - )] - TotalMolesInput2 = 125u16, - #[strum( - serialize = "PressureOutput", - props( - docs = r#"The current pressure reading of the device's Output Network"#, - value = "126" - ) - )] - PressureOutput = 126u16, - #[strum( - serialize = "TemperatureOutput", - props( - docs = r#"The current temperature reading of the device's Output Network"#, - value = "127" - ) - )] - TemperatureOutput = 127u16, - #[strum( - serialize = "RatioOxygenOutput", - props( - docs = r#"The ratio of oxygen in device's Output network"#, - value = "128" - ) - )] - RatioOxygenOutput = 128u16, - #[strum( - serialize = "RatioCarbonDioxideOutput", - props( - docs = r#"The ratio of Carbon Dioxide in device's Output network"#, - value = "129" - ) - )] - RatioCarbonDioxideOutput = 129u16, - #[strum( - serialize = "RatioNitrogenOutput", - props( - docs = r#"The ratio of nitrogen in device's Output network"#, - value = "130" - ) - )] - RatioNitrogenOutput = 130u16, - #[strum( - serialize = "RatioPollutantOutput", - props( - docs = r#"The ratio of pollutant in device's Output network"#, - value = "131" - ) - )] - RatioPollutantOutput = 131u16, - #[strum( - serialize = "RatioVolatilesOutput", - props( - docs = r#"The ratio of volatiles in device's Output network"#, - value = "132" - ) - )] - RatioVolatilesOutput = 132u16, - #[strum( - serialize = "RatioWaterOutput", - props( - docs = r#"The ratio of water in device's Output network"#, - value = "133" - ) - )] - RatioWaterOutput = 133u16, - #[strum( - serialize = "RatioNitrousOxideOutput", - props( - docs = r#"The ratio of Nitrous Oxide in device's Output network"#, - value = "134" - ) - )] - RatioNitrousOxideOutput = 134u16, - #[strum( - serialize = "TotalMolesOutput", - props( - docs = r#"Returns the total moles of the device's Output Network"#, - value = "135" - ) - )] - TotalMolesOutput = 135u16, - #[strum( - serialize = "PressureOutput2", - props( - docs = r#"The current pressure reading of the device's Output2 Network"#, - value = "136" - ) - )] - PressureOutput2 = 136u16, - #[strum( - serialize = "TemperatureOutput2", - props( - docs = r#"The current temperature reading of the device's Output2 Network"#, - value = "137" - ) - )] - TemperatureOutput2 = 137u16, - #[strum( - serialize = "RatioOxygenOutput2", - props( - docs = r#"The ratio of oxygen in device's Output2 network"#, - value = "138" - ) - )] - RatioOxygenOutput2 = 138u16, - #[strum( - serialize = "RatioCarbonDioxideOutput2", - props( - docs = r#"The ratio of Carbon Dioxide in device's Output2 network"#, - value = "139" - ) - )] - RatioCarbonDioxideOutput2 = 139u16, - #[strum( - serialize = "RatioNitrogenOutput2", - props( - docs = r#"The ratio of nitrogen in device's Output2 network"#, - value = "140" - ) - )] - RatioNitrogenOutput2 = 140u16, - #[strum( - serialize = "RatioPollutantOutput2", - props( - docs = r#"The ratio of pollutant in device's Output2 network"#, - value = "141" - ) - )] - RatioPollutantOutput2 = 141u16, - #[strum( - serialize = "RatioVolatilesOutput2", - props( - docs = r#"The ratio of volatiles in device's Output2 network"#, - value = "142" - ) - )] - RatioVolatilesOutput2 = 142u16, - #[strum( - serialize = "RatioWaterOutput2", - props( - docs = r#"The ratio of water in device's Output2 network"#, - value = "143" - ) - )] - RatioWaterOutput2 = 143u16, - #[strum( - serialize = "RatioNitrousOxideOutput2", - props( - docs = r#"The ratio of Nitrous Oxide in device's Output2 network"#, - value = "144" - ) - )] - RatioNitrousOxideOutput2 = 144u16, - #[strum( - serialize = "TotalMolesOutput2", - props( - docs = r#"Returns the total moles of the device's Output2 Network"#, - value = "145" - ) - )] - TotalMolesOutput2 = 145u16, - #[strum( - serialize = "CombustionInput", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"How the input pipe's temperature effects the machines efficiency"#, - value = "150" - ) - )] - OperationalTemperatureEfficiency = 150u16, - #[strum( - serialize = "TemperatureDifferentialEfficiency", - props( - docs = r#"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"#, - value = "151" - ) - )] - TemperatureDifferentialEfficiency = 151u16, - #[strum( - serialize = "PressureEfficiency", - props( - docs = r#"How the pressure of the input pipe and waste pipe effect the machines efficiency"#, - value = "152" - ) - )] - PressureEfficiency = 152u16, - #[strum( - serialize = "CombustionLimiter", - props( - docs = r#"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", - props( - docs = r#"Increases the rate at which the machine works (range: 0-100)"#, - value = "154" - ) - )] - Throttle = 154u16, - #[strum( - serialize = "Rpm", - props( - docs = r#"The number of revolutions per minute that the device's spinning mechanism is doing"#, - value = "155" - ) - )] - Rpm = 155u16, - #[strum( - serialize = "Stress", - props( - docs = r#"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"#, - value = "156" - ) - )] - Stress = 156u16, - #[strum( - serialize = "InterrogationProgress", - props( - docs = r#"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"#, - value = "157" - ) - )] - InterrogationProgress = 157u16, - #[strum( - serialize = "TargetPadIndex", - props( - docs = r#"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", - props( - docs = r#"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"#, - value = "160" - ) - )] - SizeX = 160u16, - #[strum( - serialize = "SizeY", - props( - docs = r#"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"#, - value = "161" - ) - )] - SizeY = 161u16, - #[strum( - serialize = "SizeZ", - props( - docs = r#"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"#, - value = "162" - ) - )] - SizeZ = 162u16, - #[strum( - serialize = "MinimumWattsToContact", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"Channel on a cable network which should be considered volatile"#, - value = "165" - ) - )] - Channel0 = 165u16, - #[strum( - serialize = "Channel1", - props( - docs = r#"Channel on a cable network which should be considered volatile"#, - value = "166" - ) - )] - Channel1 = 166u16, - #[strum( - serialize = "Channel2", - props( - docs = r#"Channel on a cable network which should be considered volatile"#, - value = "167" - ) - )] - Channel2 = 167u16, - #[strum( - serialize = "Channel3", - props( - docs = r#"Channel on a cable network which should be considered volatile"#, - value = "168" - ) - )] - Channel3 = 168u16, - #[strum( - serialize = "Channel4", - props( - docs = r#"Channel on a cable network which should be considered volatile"#, - value = "169" - ) - )] - Channel4 = 169u16, - #[strum( - serialize = "Channel5", - props( - docs = r#"Channel on a cable network which should be considered volatile"#, - value = "170" - ) - )] - Channel5 = 170u16, - #[strum( - serialize = "Channel6", - props( - docs = r#"Channel on a cable network which should be considered volatile"#, - value = "171" - ) - )] - Channel6 = 171u16, - #[strum( - serialize = "Channel7", - props( - docs = r#"Channel on a cable network which should be considered volatile"#, - value = "172" - ) - )] - Channel7 = 172u16, - #[strum( - serialize = "LineNumber", - props( - docs = r#"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", - props( - docs = r#"Set to 1 to activate the flush function on the device"#, - value = "174" - ) - )] - Flush = 174u16, - #[strum( - serialize = "SoundAlert", - props(docs = r#"Plays a sound alert on the devices speaker"#, value = "175") - )] - SoundAlert = 175u16, - #[strum( - serialize = "SolarIrradiance", - props(docs = r#""#, value = "176") - )] - SolarIrradiance = 176u16, - #[strum( - serialize = "RatioLiquidNitrogen", - props( - docs = r#"The ratio of Liquid Nitrogen in device atmosphere"#, - value = "177" - ) - )] - RatioLiquidNitrogen = 177u16, - #[strum( - serialize = "RatioLiquidNitrogenInput", - props( - docs = r#"The ratio of Liquid Nitrogen in device's input network"#, - value = "178" - ) - )] - RatioLiquidNitrogenInput = 178u16, - #[strum( - serialize = "RatioLiquidNitrogenInput2", - props( - docs = r#"The ratio of Liquid Nitrogen in device's Input2 network"#, - value = "179" - ) - )] - RatioLiquidNitrogenInput2 = 179u16, - #[strum( - serialize = "RatioLiquidNitrogenOutput", - props( - docs = r#"The ratio of Liquid Nitrogen in device's Output network"#, - value = "180" - ) - )] - RatioLiquidNitrogenOutput = 180u16, - #[strum( - serialize = "RatioLiquidNitrogenOutput2", - props( - docs = r#"The ratio of Liquid Nitrogen in device's Output2 network"#, - value = "181" - ) - )] - RatioLiquidNitrogenOutput2 = 181u16, - #[strum( - serialize = "VolumeOfLiquid", - props( - docs = r#"The total volume of all liquids in Liters in the atmosphere"#, - value = "182" - ) - )] - VolumeOfLiquid = 182u16, - #[strum( - serialize = "RatioLiquidOxygen", - props( - docs = r#"The ratio of Liquid Oxygen in device's Atmosphere"#, - value = "183" - ) - )] - RatioLiquidOxygen = 183u16, - #[strum( - serialize = "RatioLiquidOxygenInput", - props( - docs = r#"The ratio of Liquid Oxygen in device's Input Atmosphere"#, - value = "184" - ) - )] - RatioLiquidOxygenInput = 184u16, - #[strum( - serialize = "RatioLiquidOxygenInput2", - props( - docs = r#"The ratio of Liquid Oxygen in device's Input2 Atmosphere"#, - value = "185" - ) - )] - RatioLiquidOxygenInput2 = 185u16, - #[strum( - serialize = "RatioLiquidOxygenOutput", - props( - docs = r#"The ratio of Liquid Oxygen in device's device's Output Atmosphere"#, - value = "186" - ) - )] - RatioLiquidOxygenOutput = 186u16, - #[strum( - serialize = "RatioLiquidOxygenOutput2", - props( - docs = r#"The ratio of Liquid Oxygen in device's Output2 Atmopshere"#, - value = "187" - ) - )] - RatioLiquidOxygenOutput2 = 187u16, - #[strum( - serialize = "RatioLiquidVolatiles", - props( - docs = r#"The ratio of Liquid Volatiles in device's Atmosphere"#, - value = "188" - ) - )] - RatioLiquidVolatiles = 188u16, - #[strum( - serialize = "RatioLiquidVolatilesInput", - props( - docs = r#"The ratio of Liquid Volatiles in device's Input Atmosphere"#, - value = "189" - ) - )] - RatioLiquidVolatilesInput = 189u16, - #[strum( - serialize = "RatioLiquidVolatilesInput2", - props( - docs = r#"The ratio of Liquid Volatiles in device's Input2 Atmosphere"#, - value = "190" - ) - )] - RatioLiquidVolatilesInput2 = 190u16, - #[strum( - serialize = "RatioLiquidVolatilesOutput", - props( - docs = r#"The ratio of Liquid Volatiles in device's device's Output Atmosphere"#, - value = "191" - ) - )] - RatioLiquidVolatilesOutput = 191u16, - #[strum( - serialize = "RatioLiquidVolatilesOutput2", - props( - docs = r#"The ratio of Liquid Volatiles in device's Output2 Atmopshere"#, - value = "192" - ) - )] - RatioLiquidVolatilesOutput2 = 192u16, - #[strum( - serialize = "RatioSteam", - props( - docs = r#"The ratio of Steam in device's Atmosphere"#, - value = "193" - ) - )] - RatioSteam = 193u16, - #[strum( - serialize = "RatioSteamInput", - props( - docs = r#"The ratio of Steam in device's Input Atmosphere"#, - value = "194" - ) - )] - RatioSteamInput = 194u16, - #[strum( - serialize = "RatioSteamInput2", - props( - docs = r#"The ratio of Steam in device's Input2 Atmosphere"#, - value = "195" - ) - )] - RatioSteamInput2 = 195u16, - #[strum( - serialize = "RatioSteamOutput", - props( - docs = r#"The ratio of Steam in device's device's Output Atmosphere"#, - value = "196" - ) - )] - RatioSteamOutput = 196u16, - #[strum( - serialize = "RatioSteamOutput2", - props( - docs = r#"The ratio of Steam in device's Output2 Atmopshere"#, - value = "197" - ) - )] - RatioSteamOutput2 = 197u16, - #[strum( - serialize = "ContactTypeId", - props(docs = r#"The type id of the contact."#, value = "198") - )] - ContactTypeId = 198u16, - #[strum( - serialize = "RatioLiquidCarbonDioxide", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's Atmosphere"#, - value = "199" - ) - )] - RatioLiquidCarbonDioxide = 199u16, - #[strum( - serialize = "RatioLiquidCarbonDioxideInput", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"#, - value = "200" - ) - )] - RatioLiquidCarbonDioxideInput = 200u16, - #[strum( - serialize = "RatioLiquidCarbonDioxideInput2", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"#, - value = "201" - ) - )] - RatioLiquidCarbonDioxideInput2 = 201u16, - #[strum( - serialize = "RatioLiquidCarbonDioxideOutput", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"#, - value = "202" - ) - )] - RatioLiquidCarbonDioxideOutput = 202u16, - #[strum( - serialize = "RatioLiquidCarbonDioxideOutput2", - props( - docs = r#"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"#, - value = "203" - ) - )] - RatioLiquidCarbonDioxideOutput2 = 203u16, - #[strum( - serialize = "RatioLiquidPollutant", - props( - docs = r#"The ratio of Liquid Pollutant in device's Atmosphere"#, - value = "204" - ) - )] - RatioLiquidPollutant = 204u16, - #[strum( - serialize = "RatioLiquidPollutantInput", - props( - docs = r#"The ratio of Liquid Pollutant in device's Input Atmosphere"#, - value = "205" - ) - )] - RatioLiquidPollutantInput = 205u16, - #[strum( - serialize = "RatioLiquidPollutantInput2", - props( - docs = r#"The ratio of Liquid Pollutant in device's Input2 Atmosphere"#, - value = "206" - ) - )] - RatioLiquidPollutantInput2 = 206u16, - #[strum( - serialize = "RatioLiquidPollutantOutput", - props( - docs = r#"The ratio of Liquid Pollutant in device's device's Output Atmosphere"#, - value = "207" - ) - )] - RatioLiquidPollutantOutput = 207u16, - #[strum( - serialize = "RatioLiquidPollutantOutput2", - props( - docs = r#"The ratio of Liquid Pollutant in device's Output2 Atmopshere"#, - value = "208" - ) - )] - RatioLiquidPollutantOutput2 = 208u16, - #[strum( - serialize = "RatioLiquidNitrousOxide", - props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's Atmosphere"#, - value = "209" - ) - )] - RatioLiquidNitrousOxide = 209u16, - #[strum( - serialize = "RatioLiquidNitrousOxideInput", - props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"#, - value = "210" - ) - )] - RatioLiquidNitrousOxideInput = 210u16, - #[strum( - serialize = "RatioLiquidNitrousOxideInput2", - props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"#, - value = "211" - ) - )] - RatioLiquidNitrousOxideInput2 = 211u16, - #[strum( - serialize = "RatioLiquidNitrousOxideOutput", - props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"#, - value = "212" - ) - )] - RatioLiquidNitrousOxideOutput = 212u16, - #[strum( - serialize = "RatioLiquidNitrousOxideOutput2", - props( - docs = r#"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"#, - value = "213" - ) - )] - RatioLiquidNitrousOxideOutput2 = 213u16, - #[strum( - serialize = "Progress", - props( - docs = r#"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", - props( - docs = r#"The Space Map Address of the rockets target Space Map Location"#, - value = "215" - ) - )] - DestinationCode = 215u16, - #[strum( - serialize = "Acceleration", - props( - docs = r#"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."#, - value = "216" - ) - )] - Acceleration = 216u16, - #[strum( - serialize = "ReferenceId", - props(docs = r#"Unique Reference Identifier for this object"#, value = "217") - )] - ReferenceId = 217u16, - #[strum( - serialize = "AutoShutOff", - props( - docs = r#"Turns off all devices in the rocket upon reaching destination"#, - value = "218" - ) - )] - AutoShutOff = 218u16, - #[strum( - serialize = "Mass", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"Total current thrust of all rocket engines on the rocket in Newtons."#, - value = "221" - ) - )] - Thrust = 221u16, - #[strum( - serialize = "Weight", - props( - docs = r#"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."#, - value = "222" - ) - )] - Weight = 222u16, - #[strum( - serialize = "ThrustToWeight", - props( - docs = r#"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", - props( - docs = r#"Estimated time in seconds until rocket arrives at target destination."#, - value = "224" - ) - )] - TimeToDestination = 224u16, - #[strum( - serialize = "BurnTimeRemaining", - props( - docs = r#"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."#, - value = "225" - ) - )] - BurnTimeRemaining = 225u16, - #[strum( - serialize = "AutoLand", - props( - docs = r#"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", - props( - docs = r#"The direction the entity is facing expressed as a normalized vector"#, - value = "227" - ) - )] - ForwardX = 227u16, - #[strum( - serialize = "ForwardY", - props( - docs = r#"The direction the entity is facing expressed as a normalized vector"#, - value = "228" - ) - )] - ForwardY = 228u16, - #[strum( - serialize = "ForwardZ", - props( - docs = r#"The direction the entity is facing expressed as a normalized vector"#, - value = "229" - ) - )] - ForwardZ = 229u16, - #[strum( - serialize = "Orientation", - props( - docs = r#"The orientation of the entity in degrees in a plane relative towards the north origin"#, - value = "230" - ) - )] - Orientation = 230u16, - #[strum( - serialize = "VelocityX", - props( - docs = r#"The world velocity of the entity in the X axis"#, - value = "231" - ) - )] - VelocityX = 231u16, - #[strum( - serialize = "VelocityY", - props( - docs = r#"The world velocity of the entity in the Y axis"#, - value = "232" - ) - )] - VelocityY = 232u16, - #[strum( - serialize = "VelocityZ", - props( - docs = r#"The world velocity of the entity in the Z axis"#, - value = "233" - ) - )] - VelocityZ = 233u16, - #[strum( - serialize = "PassedMoles", - props( - docs = r#"The number of moles that passed through this device on the previous simulation tick"#, - value = "234" - ) - )] - PassedMoles = 234u16, - #[strum( - serialize = "ExhaustVelocity", - props(docs = r#"The velocity of the exhaust gas in m/s"#, value = "235") - )] - ExhaustVelocity = 235u16, - #[strum( - serialize = "FlightControlRule", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"The lowest altitude that the rocket will reach before it starts travelling upwards again."#, - value = "238" - ) - )] - Apex = 238u16, - #[strum( - serialize = "EntityState", - props( - docs = r#"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", - props( - docs = r#"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", - props(docs = r#"The current index for the device."#, value = "241") - )] - Index = 241u16, - #[strum( - serialize = "CelestialHash", - props( - docs = r#"The current hash of the targeted celestial object."#, - value = "242" - ) - )] - CelestialHash = 242u16, - #[strum( - serialize = "AlignmentError", - props( - docs = r#"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", - props( - docs = r#"The current distance to the celestial object, measured in astronomical units."#, - value = "244" - ) - )] - DistanceAu = 244u16, - #[strum( - serialize = "OrbitPeriod", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"The current distance to the celestial object, measured in kilometers."#, - value = "249" - ) - )] - DistanceKm = 249u16, - #[strum( - serialize = "CelestialParentHash", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"The ratio of Hydrogen in device's Atmopshere"#, - value = "252" - ) - )] - RatioHydrogen = 252u16, - #[strum( - serialize = "RatioLiquidHydrogen", - props( - docs = r#"The ratio of Liquid Hydrogen in device's Atmopshere"#, - value = "253" - ) - )] - RatioLiquidHydrogen = 253u16, - #[strum( - serialize = "RatioPollutedWater", - props( - docs = r#"The ratio of polluted water in device atmosphere"#, - value = "254" - ) - )] - RatioPollutedWater = 254u16, - #[strum( - serialize = "Discover", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"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", - props( - docs = r#"The number of NavPoints at the rocket's target Space Map Location."#, - value = "258" - ) - )] - NavPoints = 258u16, - #[strum( - serialize = "ChartedNavPoints", - props( - docs = r#"The number of charted NavPoints at the rocket's target Space Map Location."#, - value = "259" - ) - )] - ChartedNavPoints = 259u16, - #[strum( - serialize = "Sites", - props( - docs = r#"The number of Sites that have been discovered at the rockets target Space Map location."#, - value = "260" - ) - )] - Sites = 260u16, - #[strum( - serialize = "CurrentCode", - props( - docs = r#"The Space Map Address of the rockets current Space Map Location"#, - value = "261" - ) - )] - CurrentCode = 261u16, - #[strum( - serialize = "Density", - props( - docs = r#"The density of the rocket's target site's mine-able deposit."#, - value = "262" - ) - )] - Density = 262u16, - #[strum( - serialize = "Richness", - props( - docs = r#"The richness of the rocket's target site's mine-able deposit."#, - value = "263" - ) - )] - Richness = 263u16, - #[strum( - serialize = "Size", - props( - docs = r#"The size of the rocket's target site's mine-able deposit."#, - value = "264" - ) - )] - Size = 264u16, - #[strum( - serialize = "TotalQuantity", - props( - docs = r#"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."#, - value = "265" - ) - )] - TotalQuantity = 265u16, - #[strum( - serialize = "MinedQuantity", - props( - docs = r#"The total number of resources that have been mined at the rocket's target Space Map Site."#, - value = "266" - ) - )] - MinedQuantity = 266u16, - #[strum( - serialize = "BestContactFilter", - props( - docs = r#"Filters the satellite's auto selection of targets to a single reference ID."#, - value = "267" - ) - )] - BestContactFilter = 267u16, - #[strum( - serialize = "NameHash", - props( - docs = r#"Provides the hash value for the name of the object as a 32 bit integer."#, - value = "268" - ) - )] - NameHash = 268u16, -} diff --git a/ic10emu/src/vm/instructions/enums.rs b/ic10emu/src/vm/instructions/enums.rs index d3be1de..9ceb1f4 100644 --- a/ic10emu/src/vm/instructions/enums.rs +++ b/ic10emu/src/vm/instructions/enums.rs @@ -1,17 +1,5 @@ -// ================================================= -// !! <-----> DO NOT MODIFY <-----> !! -// -// This module was automatically generated by an -// xtask -// -// run `cargo xtask generate` from the workspace -// to regenerate -// -// ================================================= - use serde_derive::{Deserialize, Serialize}; use strum::{Display, EnumIter, EnumProperty, EnumString, FromRepr}; - use crate::vm::object::traits::Programmable; #[derive( Debug, @@ -23,857 +11,1128 @@ use crate::vm::object::traits::Programmable; Clone, Copy, Serialize, - Deserialize, - EnumIter, - EnumString, - EnumProperty, - FromRepr, + Deserialize )] +#[derive(EnumIter, EnumString, EnumProperty, FromRepr)] #[strum(use_phf, serialize_all = "lowercase")] #[serde(rename_all = "lowercase")] pub enum InstructionOp { Nop, - #[strum(props( - example = "abs r? a(r?|num)", - desc = "Register = the absolute value of a", - operands = "2" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[strum( + props( + example = "rand r?", + desc = "Register = a random value x with 0 <= x < 1", + operands = "1" + ) + )] Rand, - #[strum(props( - example = "round r? a(r?|num)", - desc = "Register = a rounded to nearest integer", - operands = "2" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[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" - ))] + #[strum( + props(example = "yield", desc = "Pauses execution for 1 tick", operands = "0") + )] Yield, } impl InstructionOp { @@ -883,7 +1142,6 @@ impl InstructionOp { .parse::() .expect("invalid instruction operand property") } - pub fn execute( &self, ic: &mut T, @@ -894,176 +1152,409 @@ impl InstructionOp { { let num_operands = self.num_operands(); if operands.len() != num_operands { - return Err(crate::errors::ICError::mismatch_operands( - operands.len(), - num_operands as u32, - )); + return Err( + crate::errors::ICError::mismatch_operands( + operands.len(), + num_operands as u32, + ), + ); } match self { Self::Nop => Ok(()), - Self::Abs => ic.execute_abs(&operands[0], &operands[1]), - Self::Acos => ic.execute_acos(&operands[0], &operands[1]), - Self::Add => ic.execute_add(&operands[0], &operands[1], &operands[2]), - Self::Alias => ic.execute_alias(&operands[0], &operands[1]), - Self::And => ic.execute_and(&operands[0], &operands[1], &operands[2]), - Self::Asin => ic.execute_asin(&operands[0], &operands[1]), - Self::Atan => ic.execute_atan(&operands[0], &operands[1]), - Self::Atan2 => ic.execute_atan2(&operands[0], &operands[1], &operands[2]), - Self::Bap => ic.execute_bap(&operands[0], &operands[1], &operands[2], &operands[3]), - Self::Bapal => ic.execute_bapal(&operands[0], &operands[1], &operands[2], &operands[3]), - Self::Bapz => ic.execute_bapz(&operands[0], &operands[1], &operands[2]), - Self::Bapzal => ic.execute_bapzal(&operands[0], &operands[1], &operands[2]), - Self::Bdns => ic.execute_bdns(&operands[0], &operands[1]), - Self::Bdnsal => ic.execute_bdnsal(&operands[0], &operands[1]), - Self::Bdse => ic.execute_bdse(&operands[0], &operands[1]), - Self::Bdseal => ic.execute_bdseal(&operands[0], &operands[1]), - Self::Beq => ic.execute_beq(&operands[0], &operands[1], &operands[2]), - Self::Beqal => ic.execute_beqal(&operands[0], &operands[1], &operands[2]), - Self::Beqz => ic.execute_beqz(&operands[0], &operands[1]), - Self::Beqzal => ic.execute_beqzal(&operands[0], &operands[1]), - Self::Bge => ic.execute_bge(&operands[0], &operands[1], &operands[2]), - Self::Bgeal => ic.execute_bgeal(&operands[0], &operands[1], &operands[2]), - Self::Bgez => ic.execute_bgez(&operands[0], &operands[1]), - Self::Bgezal => ic.execute_bgezal(&operands[0], &operands[1]), - Self::Bgt => ic.execute_bgt(&operands[0], &operands[1], &operands[2]), - Self::Bgtal => ic.execute_bgtal(&operands[0], &operands[1], &operands[2]), - Self::Bgtz => ic.execute_bgtz(&operands[0], &operands[1]), - Self::Bgtzal => ic.execute_bgtzal(&operands[0], &operands[1]), - Self::Ble => ic.execute_ble(&operands[0], &operands[1], &operands[2]), - Self::Bleal => ic.execute_bleal(&operands[0], &operands[1], &operands[2]), - Self::Blez => ic.execute_blez(&operands[0], &operands[1]), - Self::Blezal => ic.execute_blezal(&operands[0], &operands[1]), - Self::Blt => ic.execute_blt(&operands[0], &operands[1], &operands[2]), - Self::Bltal => ic.execute_bltal(&operands[0], &operands[1], &operands[2]), - Self::Bltz => ic.execute_bltz(&operands[0], &operands[1]), - Self::Bltzal => ic.execute_bltzal(&operands[0], &operands[1]), - Self::Bna => ic.execute_bna(&operands[0], &operands[1], &operands[2], &operands[3]), - Self::Bnaal => ic.execute_bnaal(&operands[0], &operands[1], &operands[2], &operands[3]), - Self::Bnan => ic.execute_bnan(&operands[0], &operands[1]), - Self::Bnaz => ic.execute_bnaz(&operands[0], &operands[1], &operands[2]), - Self::Bnazal => ic.execute_bnazal(&operands[0], &operands[1], &operands[2]), - Self::Bne => ic.execute_bne(&operands[0], &operands[1], &operands[2]), - Self::Bneal => ic.execute_bneal(&operands[0], &operands[1], &operands[2]), - Self::Bnez => ic.execute_bnez(&operands[0], &operands[1]), - Self::Bnezal => ic.execute_bnezal(&operands[0], &operands[1]), - Self::Brap => ic.execute_brap(&operands[0], &operands[1], &operands[2], &operands[3]), - Self::Brapz => ic.execute_brapz(&operands[0], &operands[1], &operands[2]), - Self::Brdns => ic.execute_brdns(&operands[0], &operands[1]), - Self::Brdse => ic.execute_brdse(&operands[0], &operands[1]), - Self::Breq => ic.execute_breq(&operands[0], &operands[1], &operands[2]), - Self::Breqz => ic.execute_breqz(&operands[0], &operands[1]), - Self::Brge => ic.execute_brge(&operands[0], &operands[1], &operands[2]), - Self::Brgez => ic.execute_brgez(&operands[0], &operands[1]), - Self::Brgt => ic.execute_brgt(&operands[0], &operands[1], &operands[2]), - Self::Brgtz => ic.execute_brgtz(&operands[0], &operands[1]), - Self::Brle => ic.execute_brle(&operands[0], &operands[1], &operands[2]), - Self::Brlez => ic.execute_brlez(&operands[0], &operands[1]), - Self::Brlt => ic.execute_brlt(&operands[0], &operands[1], &operands[2]), - Self::Brltz => ic.execute_brltz(&operands[0], &operands[1]), - Self::Brna => ic.execute_brna(&operands[0], &operands[1], &operands[2], &operands[3]), - Self::Brnan => ic.execute_brnan(&operands[0], &operands[1]), - Self::Brnaz => ic.execute_brnaz(&operands[0], &operands[1], &operands[2]), - Self::Brne => ic.execute_brne(&operands[0], &operands[1], &operands[2]), - Self::Brnez => ic.execute_brnez(&operands[0], &operands[1]), - Self::Ceil => ic.execute_ceil(&operands[0], &operands[1]), - Self::Clr => ic.execute_clr(&operands[0]), - Self::Clrd => ic.execute_clrd(&operands[0]), - Self::Cos => ic.execute_cos(&operands[0], &operands[1]), - Self::Define => ic.execute_define(&operands[0], &operands[1]), - Self::Div => ic.execute_div(&operands[0], &operands[1], &operands[2]), - Self::Exp => ic.execute_exp(&operands[0], &operands[1]), - Self::Floor => ic.execute_floor(&operands[0], &operands[1]), - Self::Get => ic.execute_get(&operands[0], &operands[1], &operands[2]), - Self::Getd => ic.execute_getd(&operands[0], &operands[1], &operands[2]), - Self::Hcf => ic.execute_hcf(), - Self::J => ic.execute_j(&operands[0]), - Self::Jal => ic.execute_jal(&operands[0]), - Self::Jr => ic.execute_jr(&operands[0]), - Self::L => ic.execute_l(&operands[0], &operands[1], &operands[2]), - Self::Label => ic.execute_label(&operands[0], &operands[1]), - Self::Lb => ic.execute_lb(&operands[0], &operands[1], &operands[2], &operands[3]), - Self::Lbn => ic.execute_lbn( - &operands[0], - &operands[1], - &operands[2], - &operands[3], - &operands[4], - ), - Self::Lbns => ic.execute_lbns( - &operands[0], - &operands[1], - &operands[2], - &operands[3], - &operands[4], - &operands[5], - ), - Self::Lbs => ic.execute_lbs( - &operands[0], - &operands[1], - &operands[2], - &operands[3], - &operands[4], - ), - Self::Ld => ic.execute_ld(&operands[0], &operands[1], &operands[2]), - Self::Log => ic.execute_log(&operands[0], &operands[1]), - Self::Lr => ic.execute_lr(&operands[0], &operands[1], &operands[2], &operands[3]), - Self::Ls => ic.execute_ls(&operands[0], &operands[1], &operands[2], &operands[3]), - Self::Max => ic.execute_max(&operands[0], &operands[1], &operands[2]), - Self::Min => ic.execute_min(&operands[0], &operands[1], &operands[2]), - Self::Mod => ic.execute_mod(&operands[0], &operands[1], &operands[2]), - Self::Move => ic.execute_move(&operands[0], &operands[1]), - Self::Mul => ic.execute_mul(&operands[0], &operands[1], &operands[2]), - Self::Nor => ic.execute_nor(&operands[0], &operands[1], &operands[2]), - Self::Not => ic.execute_not(&operands[0], &operands[1]), - Self::Or => ic.execute_or(&operands[0], &operands[1], &operands[2]), - Self::Peek => ic.execute_peek(&operands[0]), - Self::Poke => ic.execute_poke(&operands[0], &operands[1]), - Self::Pop => ic.execute_pop(&operands[0]), - Self::Push => ic.execute_push(&operands[0]), - Self::Put => ic.execute_put(&operands[0], &operands[1], &operands[2]), - Self::Putd => ic.execute_putd(&operands[0], &operands[1], &operands[2]), - Self::Rand => ic.execute_rand(&operands[0]), - Self::Round => ic.execute_round(&operands[0], &operands[1]), - Self::S => ic.execute_s(&operands[0], &operands[1], &operands[2]), - Self::Sap => ic.execute_sap(&operands[0], &operands[1], &operands[2], &operands[3]), - Self::Sapz => ic.execute_sapz(&operands[0], &operands[1], &operands[2]), - Self::Sb => ic.execute_sb(&operands[0], &operands[1], &operands[2]), - Self::Sbn => ic.execute_sbn(&operands[0], &operands[1], &operands[2], &operands[3]), - Self::Sbs => ic.execute_sbs(&operands[0], &operands[1], &operands[2], &operands[3]), - Self::Sd => ic.execute_sd(&operands[0], &operands[1], &operands[2]), - Self::Sdns => ic.execute_sdns(&operands[0], &operands[1]), - Self::Sdse => ic.execute_sdse(&operands[0], &operands[1]), - Self::Select => { - ic.execute_select(&operands[0], &operands[1], &operands[2], &operands[3]) + 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::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::Seq => ic.execute_seq(&operands[0], &operands[1], &operands[2]), - Self::Seqz => ic.execute_seqz(&operands[0], &operands[1]), - Self::Sge => ic.execute_sge(&operands[0], &operands[1], &operands[2]), - Self::Sgez => ic.execute_sgez(&operands[0], &operands[1]), - Self::Sgt => ic.execute_sgt(&operands[0], &operands[1], &operands[2]), - Self::Sgtz => ic.execute_sgtz(&operands[0], &operands[1]), - Self::Sin => ic.execute_sin(&operands[0], &operands[1]), - Self::Sla => ic.execute_sla(&operands[0], &operands[1], &operands[2]), - Self::Sle => ic.execute_sle(&operands[0], &operands[1], &operands[2]), - Self::Sleep => ic.execute_sleep(&operands[0]), - Self::Slez => ic.execute_slez(&operands[0], &operands[1]), - Self::Sll => ic.execute_sll(&operands[0], &operands[1], &operands[2]), - Self::Slt => ic.execute_slt(&operands[0], &operands[1], &operands[2]), - Self::Sltz => ic.execute_sltz(&operands[0], &operands[1]), - Self::Sna => ic.execute_sna(&operands[0], &operands[1], &operands[2], &operands[3]), - Self::Snan => ic.execute_snan(&operands[0], &operands[1]), - Self::Snanz => ic.execute_snanz(&operands[0], &operands[1]), - Self::Snaz => ic.execute_snaz(&operands[0], &operands[1], &operands[2]), - Self::Sne => ic.execute_sne(&operands[0], &operands[1], &operands[2]), - Self::Snez => ic.execute_snez(&operands[0], &operands[1]), - Self::Sqrt => ic.execute_sqrt(&operands[0], &operands[1]), - Self::Sra => ic.execute_sra(&operands[0], &operands[1], &operands[2]), - Self::Srl => ic.execute_srl(&operands[0], &operands[1], &operands[2]), - Self::Ss => ic.execute_ss(&operands[0], &operands[1], &operands[2], &operands[3]), - Self::Sub => ic.execute_sub(&operands[0], &operands[1], &operands[2]), - Self::Tan => ic.execute_tan(&operands[0], &operands[1]), - Self::Trunc => ic.execute_trunc(&operands[0], &operands[1]), - Self::Xor => ic.execute_xor(&operands[0], &operands[1], &operands[2]), Self::Yield => ic.execute_yield(), } } diff --git a/ic10emu/src/vm/instructions/operands.rs b/ic10emu/src/vm/instructions/operands.rs index 3ad3d88..3957ba9 100644 --- a/ic10emu/src/vm/instructions/operands.rs +++ b/ic10emu/src/vm/instructions/operands.rs @@ -1,13 +1,10 @@ use crate::errors::ICError; use crate::interpreter; -use crate::vm::{ - enums::script_enums::{ - LogicBatchMethod as BatchMode, LogicReagentMode as ReagentMode, LogicSlotType, LogicType, - }, - instructions::enums::InstructionOp, - object::traits::IntegratedCircuit, -}; +use crate::vm::{instructions::enums::InstructionOp, object::traits::IntegratedCircuit}; use serde_derive::{Deserialize, Serialize}; +use stationeers_data::enums::script_enums::{ + LogicBatchMethod as BatchMode, LogicReagentMode as ReagentMode, LogicSlotType, LogicType, +}; use strum::EnumProperty; #[derive(PartialEq, Eq, Debug, Clone, Copy, Serialize, Deserialize)] @@ -249,7 +246,10 @@ impl InstOperand { logic_type: Some(lt), .. } => Ok(*lt), - _ => LogicType::try_from(self.as_value(ic)?), + _ => { + let val = self.as_value(ic)?; + LogicType::try_from(val).map_err(|| ICError::UnknownLogicType(val)) + } } } @@ -262,7 +262,10 @@ impl InstOperand { slot_logic_type: Some(slt), .. } => Ok(*slt), - _ => LogicSlotType::try_from(self.as_value(ic)?), + _ => { + let val = self.as_value(ic)?; + LogicSlotType::try_from(val).map_err(|| ICError::UnknownLogicSlotType(val)) + } } } @@ -272,7 +275,10 @@ impl InstOperand { batch_mode: Some(bm), .. } => Ok(*bm), - _ => BatchMode::try_from(self.as_value(ic)?), + _ => { + let val = self.as_value(ic)?; + BatchMode::try_from(val).map_err(|| ICError::UnknownBatchMode(val)) + } } } @@ -282,7 +288,10 @@ impl InstOperand { reagent_mode: Some(rm), .. } => Ok(*rm), - _ => ReagentMode::try_from(self.as_value(ic)?), + _ => { + let val = self.as_value(ic)?; + ReagentMode::try_from(val).map_err(|| ICError::UnknownReagentMode(val)) + } } } diff --git a/ic10emu/src/vm/instructions/traits.rs b/ic10emu/src/vm/instructions/traits.rs index 518a513..f92e2a3 100644 --- a/ic10emu/src/vm/instructions/traits.rs +++ b/ic10emu/src/vm/instructions/traits.rs @@ -1,18 +1,7 @@ -// ================================================= -// !! <-----> DO NOT MODIFY <-----> !! -// -// This module was automatically generated by an -// xtask -// -// run `cargo xtask generate` from the workspace -// to regenerate -// -// ================================================= - -use crate::vm::instructions::enums::InstructionOp; use crate::vm::object::traits::IntegratedCircuit; +use crate::vm::instructions::enums::InstructionOp; pub trait AbsInstruction: IntegratedCircuit { - /// abs r? a(r?|num) + ///abs r? a(r?|num) fn execute_abs( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -20,11 +9,19 @@ pub trait AbsInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { AbsInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Abs, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Abs, 1), + &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) + ///abs r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -32,7 +29,7 @@ pub trait AbsInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait AcosInstruction: IntegratedCircuit { - /// acos r? a(r?|num) + ///acos r? a(r?|num) fn execute_acos( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -40,11 +37,19 @@ pub trait AcosInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { AcosInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Acos, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Acos, 1), + &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) + ///acos r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -52,7 +57,7 @@ pub trait AcosInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait AddInstruction: IntegratedCircuit { - /// add r? a(r?|num) b(r?|num) + ///add r? a(r?|num) b(r?|num) fn execute_add( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -61,12 +66,24 @@ pub trait AddInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { AddInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Add, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Add, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Add, 2), + &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) + ///add r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -75,7 +92,7 @@ pub trait AddInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait AliasInstruction: IntegratedCircuit { - /// alias str r?|d? + ///alias str r?|d? fn execute_alias( &mut self, string: &crate::vm::instructions::operands::Operand, @@ -83,11 +100,19 @@ pub trait AliasInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { AliasInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(string, InstructionOp::Alias, 0), - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Alias, 1), + &crate::vm::instructions::operands::InstOperand::new( + string, + InstructionOp::Alias, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Alias, + 1usize, + ), ) } - /// alias str r?|d? + ///alias str r?|d? fn execute_inner( &mut self, string: &crate::vm::instructions::operands::InstOperand, @@ -95,7 +120,7 @@ pub trait AliasInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait AndInstruction: IntegratedCircuit { - /// and r? a(r?|num) b(r?|num) + ///and r? a(r?|num) b(r?|num) fn execute_and( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -104,12 +129,24 @@ pub trait AndInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { AndInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::And, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::And, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::And, 2), + &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) + ///and r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -118,7 +155,7 @@ pub trait AndInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait AsinInstruction: IntegratedCircuit { - /// asin r? a(r?|num) + ///asin r? a(r?|num) fn execute_asin( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -126,11 +163,19 @@ pub trait AsinInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { AsinInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Asin, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Asin, 1), + &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) + ///asin r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -138,7 +183,7 @@ pub trait AsinInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait AtanInstruction: IntegratedCircuit { - /// atan r? a(r?|num) + ///atan r? a(r?|num) fn execute_atan( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -146,11 +191,19 @@ pub trait AtanInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { AtanInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Atan, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Atan, 1), + &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) + ///atan r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -158,7 +211,7 @@ pub trait AtanInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait Atan2Instruction: IntegratedCircuit { - /// atan2 r? a(r?|num) b(r?|num) + ///atan2 r? a(r?|num) b(r?|num) fn execute_atan2( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -167,12 +220,24 @@ pub trait Atan2Instruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { Atan2Instruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Atan2, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Atan2, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Atan2, 2), + &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) + ///atan2 r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -181,7 +246,7 @@ pub trait Atan2Instruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BapInstruction: IntegratedCircuit { - /// bap a(r?|num) b(r?|num) c(r?|num) d(r?|num) + ///bap a(r?|num) b(r?|num) c(r?|num) d(r?|num) fn execute_bap( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -191,13 +256,29 @@ pub trait BapInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BapInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bap, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bap, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bap, 2), - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Bap, 3), + &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) + ///bap a(r?|num) b(r?|num) c(r?|num) d(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -207,7 +288,7 @@ pub trait BapInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BapalInstruction: IntegratedCircuit { - /// bapal a(r?|num) b(r?|num) c(r?|num) d(r?|num) + ///bapal a(r?|num) b(r?|num) c(r?|num) d(r?|num) fn execute_bapal( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -217,13 +298,29 @@ pub trait BapalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BapalInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bapal, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bapal, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bapal, 2), - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Bapal, 3), + &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) + ///bapal a(r?|num) b(r?|num) c(r?|num) d(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -233,7 +330,7 @@ pub trait BapalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BapzInstruction: IntegratedCircuit { - /// bapz a(r?|num) b(r?|num) c(r?|num) + ///bapz a(r?|num) b(r?|num) c(r?|num) fn execute_bapz( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -242,12 +339,24 @@ pub trait BapzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BapzInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bapz, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bapz, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bapz, 2), + &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) + ///bapz a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -256,7 +365,7 @@ pub trait BapzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BapzalInstruction: IntegratedCircuit { - /// bapzal a(r?|num) b(r?|num) c(r?|num) + ///bapzal a(r?|num) b(r?|num) c(r?|num) fn execute_bapzal( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -265,12 +374,24 @@ pub trait BapzalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BapzalInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bapzal, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bapzal, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bapzal, 2), + &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) + ///bapzal a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -279,7 +400,7 @@ pub trait BapzalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BdnsInstruction: IntegratedCircuit { - /// bdns d? a(r?|num) + ///bdns d? a(r?|num) fn execute_bdns( &mut self, d: &crate::vm::instructions::operands::Operand, @@ -287,11 +408,19 @@ pub trait BdnsInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BdnsInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Bdns, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bdns, 1), + &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) + ///bdns d? a(r?|num) fn execute_inner( &mut self, d: &crate::vm::instructions::operands::InstOperand, @@ -299,7 +428,7 @@ pub trait BdnsInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BdnsalInstruction: IntegratedCircuit { - /// bdnsal d? a(r?|num) + ///bdnsal d? a(r?|num) fn execute_bdnsal( &mut self, d: &crate::vm::instructions::operands::Operand, @@ -307,11 +436,19 @@ pub trait BdnsalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BdnsalInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Bdnsal, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bdnsal, 1), + &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) + ///bdnsal d? a(r?|num) fn execute_inner( &mut self, d: &crate::vm::instructions::operands::InstOperand, @@ -319,7 +456,7 @@ pub trait BdnsalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BdseInstruction: IntegratedCircuit { - /// bdse d? a(r?|num) + ///bdse d? a(r?|num) fn execute_bdse( &mut self, d: &crate::vm::instructions::operands::Operand, @@ -327,11 +464,19 @@ pub trait BdseInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BdseInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Bdse, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bdse, 1), + &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) + ///bdse d? a(r?|num) fn execute_inner( &mut self, d: &crate::vm::instructions::operands::InstOperand, @@ -339,7 +484,7 @@ pub trait BdseInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BdsealInstruction: IntegratedCircuit { - /// bdseal d? a(r?|num) + ///bdseal d? a(r?|num) fn execute_bdseal( &mut self, d: &crate::vm::instructions::operands::Operand, @@ -347,11 +492,19 @@ pub trait BdsealInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BdsealInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Bdseal, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bdseal, 1), + &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) + ///bdseal d? a(r?|num) fn execute_inner( &mut self, d: &crate::vm::instructions::operands::InstOperand, @@ -359,7 +512,7 @@ pub trait BdsealInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BeqInstruction: IntegratedCircuit { - /// beq a(r?|num) b(r?|num) c(r?|num) + ///beq a(r?|num) b(r?|num) c(r?|num) fn execute_beq( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -368,12 +521,24 @@ pub trait BeqInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BeqInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Beq, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Beq, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Beq, 2), + &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) + ///beq a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -382,7 +547,7 @@ pub trait BeqInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BeqalInstruction: IntegratedCircuit { - /// beqal a(r?|num) b(r?|num) c(r?|num) + ///beqal a(r?|num) b(r?|num) c(r?|num) fn execute_beqal( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -391,12 +556,24 @@ pub trait BeqalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BeqalInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Beqal, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Beqal, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Beqal, 2), + &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) + ///beqal a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -405,7 +582,7 @@ pub trait BeqalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BeqzInstruction: IntegratedCircuit { - /// beqz a(r?|num) b(r?|num) + ///beqz a(r?|num) b(r?|num) fn execute_beqz( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -413,11 +590,19 @@ pub trait BeqzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BeqzInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Beqz, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Beqz, 1), + &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) + ///beqz a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -425,7 +610,7 @@ pub trait BeqzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BeqzalInstruction: IntegratedCircuit { - /// beqzal a(r?|num) b(r?|num) + ///beqzal a(r?|num) b(r?|num) fn execute_beqzal( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -433,11 +618,19 @@ pub trait BeqzalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BeqzalInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Beqzal, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Beqzal, 1), + &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) + ///beqzal a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -445,7 +638,7 @@ pub trait BeqzalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BgeInstruction: IntegratedCircuit { - /// bge a(r?|num) b(r?|num) c(r?|num) + ///bge a(r?|num) b(r?|num) c(r?|num) fn execute_bge( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -454,12 +647,24 @@ pub trait BgeInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BgeInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bge, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bge, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bge, 2), + &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) + ///bge a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -468,7 +673,7 @@ pub trait BgeInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BgealInstruction: IntegratedCircuit { - /// bgeal a(r?|num) b(r?|num) c(r?|num) + ///bgeal a(r?|num) b(r?|num) c(r?|num) fn execute_bgeal( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -477,12 +682,24 @@ pub trait BgealInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BgealInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bgeal, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bgeal, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bgeal, 2), + &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) + ///bgeal a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -491,7 +708,7 @@ pub trait BgealInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BgezInstruction: IntegratedCircuit { - /// bgez a(r?|num) b(r?|num) + ///bgez a(r?|num) b(r?|num) fn execute_bgez( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -499,11 +716,19 @@ pub trait BgezInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BgezInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bgez, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bgez, 1), + &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) + ///bgez a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -511,7 +736,7 @@ pub trait BgezInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BgezalInstruction: IntegratedCircuit { - /// bgezal a(r?|num) b(r?|num) + ///bgezal a(r?|num) b(r?|num) fn execute_bgezal( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -519,11 +744,19 @@ pub trait BgezalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BgezalInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bgezal, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bgezal, 1), + &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) + ///bgezal a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -531,7 +764,7 @@ pub trait BgezalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BgtInstruction: IntegratedCircuit { - /// bgt a(r?|num) b(r?|num) c(r?|num) + ///bgt a(r?|num) b(r?|num) c(r?|num) fn execute_bgt( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -540,12 +773,24 @@ pub trait BgtInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BgtInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bgt, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bgt, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bgt, 2), + &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) + ///bgt a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -554,7 +799,7 @@ pub trait BgtInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BgtalInstruction: IntegratedCircuit { - /// bgtal a(r?|num) b(r?|num) c(r?|num) + ///bgtal a(r?|num) b(r?|num) c(r?|num) fn execute_bgtal( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -563,12 +808,24 @@ pub trait BgtalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BgtalInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bgtal, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bgtal, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bgtal, 2), + &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) + ///bgtal a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -577,7 +834,7 @@ pub trait BgtalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BgtzInstruction: IntegratedCircuit { - /// bgtz a(r?|num) b(r?|num) + ///bgtz a(r?|num) b(r?|num) fn execute_bgtz( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -585,11 +842,19 @@ pub trait BgtzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BgtzInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bgtz, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bgtz, 1), + &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) + ///bgtz a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -597,7 +862,7 @@ pub trait BgtzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BgtzalInstruction: IntegratedCircuit { - /// bgtzal a(r?|num) b(r?|num) + ///bgtzal a(r?|num) b(r?|num) fn execute_bgtzal( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -605,11 +870,19 @@ pub trait BgtzalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BgtzalInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bgtzal, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bgtzal, 1), + &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) + ///bgtzal a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -617,7 +890,7 @@ pub trait BgtzalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BleInstruction: IntegratedCircuit { - /// ble a(r?|num) b(r?|num) c(r?|num) + ///ble a(r?|num) b(r?|num) c(r?|num) fn execute_ble( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -626,12 +899,24 @@ pub trait BleInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BleInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Ble, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Ble, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Ble, 2), + &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) + ///ble a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -640,7 +925,7 @@ pub trait BleInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BlealInstruction: IntegratedCircuit { - /// bleal a(r?|num) b(r?|num) c(r?|num) + ///bleal a(r?|num) b(r?|num) c(r?|num) fn execute_bleal( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -649,12 +934,24 @@ pub trait BlealInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BlealInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bleal, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bleal, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bleal, 2), + &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) + ///bleal a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -663,7 +960,7 @@ pub trait BlealInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BlezInstruction: IntegratedCircuit { - /// blez a(r?|num) b(r?|num) + ///blez a(r?|num) b(r?|num) fn execute_blez( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -671,11 +968,19 @@ pub trait BlezInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BlezInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Blez, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Blez, 1), + &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) + ///blez a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -683,7 +988,7 @@ pub trait BlezInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BlezalInstruction: IntegratedCircuit { - /// blezal a(r?|num) b(r?|num) + ///blezal a(r?|num) b(r?|num) fn execute_blezal( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -691,11 +996,19 @@ pub trait BlezalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BlezalInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Blezal, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Blezal, 1), + &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) + ///blezal a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -703,7 +1016,7 @@ pub trait BlezalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BltInstruction: IntegratedCircuit { - /// blt a(r?|num) b(r?|num) c(r?|num) + ///blt a(r?|num) b(r?|num) c(r?|num) fn execute_blt( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -712,12 +1025,24 @@ pub trait BltInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BltInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Blt, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Blt, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Blt, 2), + &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) + ///blt a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -726,7 +1051,7 @@ pub trait BltInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BltalInstruction: IntegratedCircuit { - /// bltal a(r?|num) b(r?|num) c(r?|num) + ///bltal a(r?|num) b(r?|num) c(r?|num) fn execute_bltal( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -735,12 +1060,24 @@ pub trait BltalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BltalInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bltal, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bltal, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bltal, 2), + &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) + ///bltal a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -749,7 +1086,7 @@ pub trait BltalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BltzInstruction: IntegratedCircuit { - /// bltz a(r?|num) b(r?|num) + ///bltz a(r?|num) b(r?|num) fn execute_bltz( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -757,11 +1094,19 @@ pub trait BltzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BltzInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bltz, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bltz, 1), + &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) + ///bltz a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -769,7 +1114,7 @@ pub trait BltzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BltzalInstruction: IntegratedCircuit { - /// bltzal a(r?|num) b(r?|num) + ///bltzal a(r?|num) b(r?|num) fn execute_bltzal( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -777,11 +1122,19 @@ pub trait BltzalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BltzalInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bltzal, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bltzal, 1), + &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) + ///bltzal a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -789,7 +1142,7 @@ pub trait BltzalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BnaInstruction: IntegratedCircuit { - /// bna a(r?|num) b(r?|num) c(r?|num) d(r?|num) + ///bna a(r?|num) b(r?|num) c(r?|num) d(r?|num) fn execute_bna( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -799,13 +1152,29 @@ pub trait BnaInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BnaInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bna, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bna, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bna, 2), - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Bna, 3), + &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) + ///bna a(r?|num) b(r?|num) c(r?|num) d(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -815,7 +1184,7 @@ pub trait BnaInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BnaalInstruction: IntegratedCircuit { - /// bnaal a(r?|num) b(r?|num) c(r?|num) d(r?|num) + ///bnaal a(r?|num) b(r?|num) c(r?|num) d(r?|num) fn execute_bnaal( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -825,13 +1194,29 @@ pub trait BnaalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BnaalInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bnaal, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bnaal, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bnaal, 2), - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Bnaal, 3), + &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) + ///bnaal a(r?|num) b(r?|num) c(r?|num) d(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -841,7 +1226,7 @@ pub trait BnaalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BnanInstruction: IntegratedCircuit { - /// bnan a(r?|num) b(r?|num) + ///bnan a(r?|num) b(r?|num) fn execute_bnan( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -849,11 +1234,19 @@ pub trait BnanInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BnanInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bnan, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bnan, 1), + &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) + ///bnan a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -861,7 +1254,7 @@ pub trait BnanInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BnazInstruction: IntegratedCircuit { - /// bnaz a(r?|num) b(r?|num) c(r?|num) + ///bnaz a(r?|num) b(r?|num) c(r?|num) fn execute_bnaz( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -870,12 +1263,24 @@ pub trait BnazInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BnazInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bnaz, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bnaz, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bnaz, 2), + &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) + ///bnaz a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -884,7 +1289,7 @@ pub trait BnazInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BnazalInstruction: IntegratedCircuit { - /// bnazal a(r?|num) b(r?|num) c(r?|num) + ///bnazal a(r?|num) b(r?|num) c(r?|num) fn execute_bnazal( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -893,12 +1298,24 @@ pub trait BnazalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BnazalInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bnazal, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bnazal, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bnazal, 2), + &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) + ///bnazal a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -907,7 +1324,7 @@ pub trait BnazalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BneInstruction: IntegratedCircuit { - /// bne a(r?|num) b(r?|num) c(r?|num) + ///bne a(r?|num) b(r?|num) c(r?|num) fn execute_bne( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -916,12 +1333,24 @@ pub trait BneInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BneInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bne, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bne, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bne, 2), + &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) + ///bne a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -930,7 +1359,7 @@ pub trait BneInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BnealInstruction: IntegratedCircuit { - /// bneal a(r?|num) b(r?|num) c(r?|num) + ///bneal a(r?|num) b(r?|num) c(r?|num) fn execute_bneal( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -939,12 +1368,24 @@ pub trait BnealInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BnealInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bneal, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bneal, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Bneal, 2), + &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) + ///bneal a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -953,7 +1394,7 @@ pub trait BnealInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BnezInstruction: IntegratedCircuit { - /// bnez a(r?|num) b(r?|num) + ///bnez a(r?|num) b(r?|num) fn execute_bnez( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -961,11 +1402,19 @@ pub trait BnezInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BnezInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bnez, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bnez, 1), + &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) + ///bnez a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -973,7 +1422,7 @@ pub trait BnezInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BnezalInstruction: IntegratedCircuit { - /// bnezal a(r?|num) b(r?|num) + ///bnezal a(r?|num) b(r?|num) fn execute_bnezal( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -981,11 +1430,19 @@ pub trait BnezalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BnezalInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Bnezal, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Bnezal, 1), + &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) + ///bnezal a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -993,7 +1450,7 @@ pub trait BnezalInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BrapInstruction: IntegratedCircuit { - /// brap a(r?|num) b(r?|num) c(r?|num) d(r?|num) + ///brap a(r?|num) b(r?|num) c(r?|num) d(r?|num) fn execute_brap( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -1003,13 +1460,29 @@ pub trait BrapInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BrapInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Brap, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brap, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Brap, 2), - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Brap, 3), + &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) + ///brap a(r?|num) b(r?|num) c(r?|num) d(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -1019,7 +1492,7 @@ pub trait BrapInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BrapzInstruction: IntegratedCircuit { - /// brapz a(r?|num) b(r?|num) c(r?|num) + ///brapz a(r?|num) b(r?|num) c(r?|num) fn execute_brapz( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -1028,12 +1501,24 @@ pub trait BrapzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BrapzInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Brapz, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brapz, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Brapz, 2), + &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) + ///brapz a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -1042,7 +1527,7 @@ pub trait BrapzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BrdnsInstruction: IntegratedCircuit { - /// brdns d? a(r?|num) + ///brdns d? a(r?|num) fn execute_brdns( &mut self, d: &crate::vm::instructions::operands::Operand, @@ -1050,11 +1535,19 @@ pub trait BrdnsInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BrdnsInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Brdns, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Brdns, 1), + &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) + ///brdns d? a(r?|num) fn execute_inner( &mut self, d: &crate::vm::instructions::operands::InstOperand, @@ -1062,7 +1555,7 @@ pub trait BrdnsInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BrdseInstruction: IntegratedCircuit { - /// brdse d? a(r?|num) + ///brdse d? a(r?|num) fn execute_brdse( &mut self, d: &crate::vm::instructions::operands::Operand, @@ -1070,11 +1563,19 @@ pub trait BrdseInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BrdseInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Brdse, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Brdse, 1), + &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) + ///brdse d? a(r?|num) fn execute_inner( &mut self, d: &crate::vm::instructions::operands::InstOperand, @@ -1082,7 +1583,7 @@ pub trait BrdseInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BreqInstruction: IntegratedCircuit { - /// breq a(r?|num) b(r?|num) c(r?|num) + ///breq a(r?|num) b(r?|num) c(r?|num) fn execute_breq( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -1091,12 +1592,24 @@ pub trait BreqInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BreqInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Breq, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Breq, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Breq, 2), + &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) + ///breq a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -1105,7 +1618,7 @@ pub trait BreqInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BreqzInstruction: IntegratedCircuit { - /// breqz a(r?|num) b(r?|num) + ///breqz a(r?|num) b(r?|num) fn execute_breqz( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -1113,11 +1626,19 @@ pub trait BreqzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BreqzInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Breqz, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Breqz, 1), + &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) + ///breqz a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -1125,7 +1646,7 @@ pub trait BreqzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BrgeInstruction: IntegratedCircuit { - /// brge a(r?|num) b(r?|num) c(r?|num) + ///brge a(r?|num) b(r?|num) c(r?|num) fn execute_brge( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -1134,12 +1655,24 @@ pub trait BrgeInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BrgeInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Brge, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brge, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Brge, 2), + &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) + ///brge a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -1148,7 +1681,7 @@ pub trait BrgeInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BrgezInstruction: IntegratedCircuit { - /// brgez a(r?|num) b(r?|num) + ///brgez a(r?|num) b(r?|num) fn execute_brgez( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -1156,11 +1689,19 @@ pub trait BrgezInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BrgezInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Brgez, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brgez, 1), + &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) + ///brgez a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -1168,7 +1709,7 @@ pub trait BrgezInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BrgtInstruction: IntegratedCircuit { - /// brgt a(r?|num) b(r?|num) c(r?|num) + ///brgt a(r?|num) b(r?|num) c(r?|num) fn execute_brgt( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -1177,12 +1718,24 @@ pub trait BrgtInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BrgtInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Brgt, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brgt, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Brgt, 2), + &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) + ///brgt a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -1191,7 +1744,7 @@ pub trait BrgtInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BrgtzInstruction: IntegratedCircuit { - /// brgtz a(r?|num) b(r?|num) + ///brgtz a(r?|num) b(r?|num) fn execute_brgtz( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -1199,11 +1752,19 @@ pub trait BrgtzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BrgtzInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Brgtz, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brgtz, 1), + &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) + ///brgtz a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -1211,7 +1772,7 @@ pub trait BrgtzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BrleInstruction: IntegratedCircuit { - /// brle a(r?|num) b(r?|num) c(r?|num) + ///brle a(r?|num) b(r?|num) c(r?|num) fn execute_brle( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -1220,12 +1781,24 @@ pub trait BrleInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BrleInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Brle, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brle, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Brle, 2), + &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) + ///brle a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -1234,7 +1807,7 @@ pub trait BrleInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BrlezInstruction: IntegratedCircuit { - /// brlez a(r?|num) b(r?|num) + ///brlez a(r?|num) b(r?|num) fn execute_brlez( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -1242,11 +1815,19 @@ pub trait BrlezInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BrlezInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Brlez, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brlez, 1), + &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) + ///brlez a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -1254,7 +1835,7 @@ pub trait BrlezInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BrltInstruction: IntegratedCircuit { - /// brlt a(r?|num) b(r?|num) c(r?|num) + ///brlt a(r?|num) b(r?|num) c(r?|num) fn execute_brlt( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -1263,12 +1844,24 @@ pub trait BrltInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BrltInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Brlt, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brlt, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Brlt, 2), + &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) + ///brlt a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -1277,7 +1870,7 @@ pub trait BrltInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BrltzInstruction: IntegratedCircuit { - /// brltz a(r?|num) b(r?|num) + ///brltz a(r?|num) b(r?|num) fn execute_brltz( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -1285,11 +1878,19 @@ pub trait BrltzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BrltzInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Brltz, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brltz, 1), + &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) + ///brltz a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -1297,7 +1898,7 @@ pub trait BrltzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BrnaInstruction: IntegratedCircuit { - /// brna a(r?|num) b(r?|num) c(r?|num) d(r?|num) + ///brna a(r?|num) b(r?|num) c(r?|num) d(r?|num) fn execute_brna( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -1307,13 +1908,29 @@ pub trait BrnaInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BrnaInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Brna, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brna, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Brna, 2), - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Brna, 3), + &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) + ///brna a(r?|num) b(r?|num) c(r?|num) d(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -1323,7 +1940,7 @@ pub trait BrnaInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BrnanInstruction: IntegratedCircuit { - /// brnan a(r?|num) b(r?|num) + ///brnan a(r?|num) b(r?|num) fn execute_brnan( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -1331,11 +1948,19 @@ pub trait BrnanInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BrnanInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Brnan, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brnan, 1), + &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) + ///brnan a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -1343,7 +1968,7 @@ pub trait BrnanInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BrnazInstruction: IntegratedCircuit { - /// brnaz a(r?|num) b(r?|num) c(r?|num) + ///brnaz a(r?|num) b(r?|num) c(r?|num) fn execute_brnaz( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -1352,12 +1977,24 @@ pub trait BrnazInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BrnazInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Brnaz, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brnaz, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Brnaz, 2), + &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) + ///brnaz a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -1366,7 +2003,7 @@ pub trait BrnazInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BrneInstruction: IntegratedCircuit { - /// brne a(r?|num) b(r?|num) c(r?|num) + ///brne a(r?|num) b(r?|num) c(r?|num) fn execute_brne( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -1375,12 +2012,24 @@ pub trait BrneInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BrneInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Brne, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brne, 1), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Brne, 2), + &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) + ///brne a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -1389,7 +2038,7 @@ pub trait BrneInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait BrnezInstruction: IntegratedCircuit { - /// brnez a(r?|num) b(r?|num) + ///brnez a(r?|num) b(r?|num) fn execute_brnez( &mut self, a: &crate::vm::instructions::operands::Operand, @@ -1397,11 +2046,19 @@ pub trait BrnezInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { BrnezInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Brnez, 0), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Brnez, 1), + &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) + ///brnez a(r?|num) b(r?|num) fn execute_inner( &mut self, a: &crate::vm::instructions::operands::InstOperand, @@ -1409,7 +2066,7 @@ pub trait BrnezInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait CeilInstruction: IntegratedCircuit { - /// ceil r? a(r?|num) + ///ceil r? a(r?|num) fn execute_ceil( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -1417,11 +2074,19 @@ pub trait CeilInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { CeilInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Ceil, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Ceil, 1), + &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) + ///ceil r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -1429,41 +2094,49 @@ pub trait CeilInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait ClrInstruction: IntegratedCircuit { - /// clr d? + ///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, 0), + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Clr, + 0usize, + ), ) } - /// clr d? + ///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) + ///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, 0), + &crate::vm::instructions::operands::InstOperand::new( + id, + InstructionOp::Clrd, + 0usize, + ), ) } - /// clrd id(r?|num) + ///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) + ///cos r? a(r?|num) fn execute_cos( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -1471,11 +2144,19 @@ pub trait CosInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { CosInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Cos, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Cos, 1), + &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) + ///cos r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -1483,7 +2164,7 @@ pub trait CosInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait DefineInstruction: IntegratedCircuit { - /// define str num + ///define str num fn execute_define( &mut self, string: &crate::vm::instructions::operands::Operand, @@ -1491,11 +2172,19 @@ pub trait DefineInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { DefineInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(string, InstructionOp::Define, 0), - &crate::vm::instructions::operands::InstOperand::new(num, InstructionOp::Define, 1), + &crate::vm::instructions::operands::InstOperand::new( + string, + InstructionOp::Define, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + num, + InstructionOp::Define, + 1usize, + ), ) } - /// define str num + ///define str num fn execute_inner( &mut self, string: &crate::vm::instructions::operands::InstOperand, @@ -1503,7 +2192,7 @@ pub trait DefineInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait DivInstruction: IntegratedCircuit { - /// div r? a(r?|num) b(r?|num) + ///div r? a(r?|num) b(r?|num) fn execute_div( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -1512,12 +2201,24 @@ pub trait DivInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { DivInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Div, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Div, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Div, 2), + &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) + ///div r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -1526,7 +2227,7 @@ pub trait DivInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait ExpInstruction: IntegratedCircuit { - /// exp r? a(r?|num) + ///exp r? a(r?|num) fn execute_exp( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -1534,11 +2235,19 @@ pub trait ExpInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { ExpInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Exp, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Exp, 1), + &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) + ///exp r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -1546,7 +2255,7 @@ pub trait ExpInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait FloorInstruction: IntegratedCircuit { - /// floor r? a(r?|num) + ///floor r? a(r?|num) fn execute_floor( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -1554,11 +2263,19 @@ pub trait FloorInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { FloorInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Floor, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Floor, 1), + &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) + ///floor r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -1566,7 +2283,7 @@ pub trait FloorInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait GetInstruction: IntegratedCircuit { - /// get r? d? address(r?|num) + ///get r? d? address(r?|num) fn execute_get( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -1575,12 +2292,24 @@ pub trait GetInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { GetInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Get, 0), - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Get, 1), - &crate::vm::instructions::operands::InstOperand::new(address, InstructionOp::Get, 2), + &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) + ///get r? d? address(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -1589,7 +2318,7 @@ pub trait GetInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait GetdInstruction: IntegratedCircuit { - /// getd r? id(r?|num) address(r?|num) + ///getd r? id(r?|num) address(r?|num) fn execute_getd( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -1598,12 +2327,24 @@ pub trait GetdInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { GetdInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Getd, 0), - &crate::vm::instructions::operands::InstOperand::new(id, InstructionOp::Getd, 1), - &crate::vm::instructions::operands::InstOperand::new(address, InstructionOp::Getd, 2), + &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) + ///getd r? id(r?|num) address(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -1612,66 +2353,78 @@ pub trait GetdInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait HcfInstruction: IntegratedCircuit { - /// hcf + ///hcf fn execute_hcf(&mut self) -> Result<(), crate::errors::ICError> { HcfInstruction::execute_inner(self) } - /// hcf + ///hcf fn execute_inner(&mut self) -> Result<(), crate::errors::ICError>; } pub trait JInstruction: IntegratedCircuit { - /// j int + ///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, 0), + &crate::vm::instructions::operands::InstOperand::new( + int, + InstructionOp::J, + 0usize, + ), ) } - /// j int + ///j int fn execute_inner( &mut self, int: &crate::vm::instructions::operands::InstOperand, ) -> Result<(), crate::errors::ICError>; } pub trait JalInstruction: IntegratedCircuit { - /// jal int + ///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, 0), + &crate::vm::instructions::operands::InstOperand::new( + int, + InstructionOp::Jal, + 0usize, + ), ) } - /// jal int + ///jal int fn execute_inner( &mut self, int: &crate::vm::instructions::operands::InstOperand, ) -> Result<(), crate::errors::ICError>; } pub trait JrInstruction: IntegratedCircuit { - /// jr int + ///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, 0), + &crate::vm::instructions::operands::InstOperand::new( + int, + InstructionOp::Jr, + 0usize, + ), ) } - /// jr int + ///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 + ///l r? d? logicType fn execute_l( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -1680,12 +2433,24 @@ pub trait LInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { LInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::L, 0), - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::L, 1), - &crate::vm::instructions::operands::InstOperand::new(logic_type, InstructionOp::L, 2), + &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 + ///l r? d? logicType fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -1694,7 +2459,7 @@ pub trait LInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait LabelInstruction: IntegratedCircuit { - /// label d? str + ///label d? str fn execute_label( &mut self, d: &crate::vm::instructions::operands::Operand, @@ -1702,11 +2467,19 @@ pub trait LabelInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { LabelInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Label, 0), - &crate::vm::instructions::operands::InstOperand::new(string, InstructionOp::Label, 1), + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Label, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + string, + InstructionOp::Label, + 1usize, + ), ) } - /// label d? str + ///label d? str fn execute_inner( &mut self, d: &crate::vm::instructions::operands::InstOperand, @@ -1714,7 +2487,7 @@ pub trait LabelInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait LbInstruction: IntegratedCircuit { - /// lb r? deviceHash logicType batchMode + ///lb r? deviceHash logicType batchMode fn execute_lb( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -1724,13 +2497,29 @@ pub trait LbInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { LbInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Lb, 0), - &crate::vm::instructions::operands::InstOperand::new(device_hash, InstructionOp::Lb, 1), - &crate::vm::instructions::operands::InstOperand::new(logic_type, InstructionOp::Lb, 2), - &crate::vm::instructions::operands::InstOperand::new(batch_mode, InstructionOp::Lb, 3), + &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 + ///lb r? deviceHash logicType batchMode fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -1740,7 +2529,7 @@ pub trait LbInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait LbnInstruction: IntegratedCircuit { - /// lbn r? deviceHash nameHash logicType batchMode + ///lbn r? deviceHash nameHash logicType batchMode fn execute_lbn( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -1751,18 +2540,34 @@ pub trait LbnInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { LbnInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Lbn, 0), + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Lbn, + 0usize, + ), &crate::vm::instructions::operands::InstOperand::new( device_hash, InstructionOp::Lbn, - 1, + 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, ), - &crate::vm::instructions::operands::InstOperand::new(name_hash, InstructionOp::Lbn, 2), - &crate::vm::instructions::operands::InstOperand::new(logic_type, InstructionOp::Lbn, 3), - &crate::vm::instructions::operands::InstOperand::new(batch_mode, InstructionOp::Lbn, 4), ) } - /// lbn r? deviceHash nameHash logicType batchMode + ///lbn r? deviceHash nameHash logicType batchMode fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -1773,7 +2578,7 @@ pub trait LbnInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait LbnsInstruction: IntegratedCircuit { - /// lbns r? deviceHash nameHash slotIndex logicSlotType batchMode + ///lbns r? deviceHash nameHash slotIndex logicSlotType batchMode fn execute_lbns( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -1785,31 +2590,39 @@ pub trait LbnsInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { LbnsInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Lbns, 0), + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Lbns, + 0usize, + ), &crate::vm::instructions::operands::InstOperand::new( device_hash, InstructionOp::Lbns, - 1, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + name_hash, + InstructionOp::Lbns, + 2usize, ), - &crate::vm::instructions::operands::InstOperand::new(name_hash, InstructionOp::Lbns, 2), &crate::vm::instructions::operands::InstOperand::new( slot_index, InstructionOp::Lbns, - 3, + 3usize, ), &crate::vm::instructions::operands::InstOperand::new( logic_slot_type, InstructionOp::Lbns, - 4, + 4usize, ), &crate::vm::instructions::operands::InstOperand::new( batch_mode, InstructionOp::Lbns, - 5, + 5usize, ), ) } - /// lbns r? deviceHash nameHash slotIndex logicSlotType batchMode + ///lbns r? deviceHash nameHash slotIndex logicSlotType batchMode fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -1821,7 +2634,7 @@ pub trait LbnsInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait LbsInstruction: IntegratedCircuit { - /// lbs r? deviceHash slotIndex logicSlotType batchMode + ///lbs r? deviceHash slotIndex logicSlotType batchMode fn execute_lbs( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -1832,22 +2645,34 @@ pub trait LbsInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { LbsInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Lbs, 0), + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Lbs, + 0usize, + ), &crate::vm::instructions::operands::InstOperand::new( device_hash, InstructionOp::Lbs, - 1, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + slot_index, + InstructionOp::Lbs, + 2usize, ), - &crate::vm::instructions::operands::InstOperand::new(slot_index, InstructionOp::Lbs, 2), &crate::vm::instructions::operands::InstOperand::new( logic_slot_type, InstructionOp::Lbs, - 3, + 3usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + batch_mode, + InstructionOp::Lbs, + 4usize, ), - &crate::vm::instructions::operands::InstOperand::new(batch_mode, InstructionOp::Lbs, 4), ) } - /// lbs r? deviceHash slotIndex logicSlotType batchMode + ///lbs r? deviceHash slotIndex logicSlotType batchMode fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -1858,7 +2683,7 @@ pub trait LbsInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait LdInstruction: IntegratedCircuit { - /// ld r? id(r?|num) logicType + ///ld r? id(r?|num) logicType fn execute_ld( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -1867,12 +2692,24 @@ pub trait LdInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { LdInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Ld, 0), - &crate::vm::instructions::operands::InstOperand::new(id, InstructionOp::Ld, 1), - &crate::vm::instructions::operands::InstOperand::new(logic_type, InstructionOp::Ld, 2), + &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 + ///ld r? id(r?|num) logicType fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -1881,7 +2718,7 @@ pub trait LdInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait LogInstruction: IntegratedCircuit { - /// log r? a(r?|num) + ///log r? a(r?|num) fn execute_log( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -1889,11 +2726,19 @@ pub trait LogInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { LogInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Log, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Log, 1), + &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) + ///log r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -1901,7 +2746,7 @@ pub trait LogInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait LrInstruction: IntegratedCircuit { - /// lr r? d? reagentMode int + ///lr r? d? reagentMode int fn execute_lr( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -1911,17 +2756,29 @@ pub trait LrInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { LrInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Lr, 0), - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Lr, 1), + &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, - 2, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + int, + InstructionOp::Lr, + 3usize, ), - &crate::vm::instructions::operands::InstOperand::new(int, InstructionOp::Lr, 3), ) } - /// lr r? d? reagentMode int + ///lr r? d? reagentMode int fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -1931,7 +2788,7 @@ pub trait LrInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait LsInstruction: IntegratedCircuit { - /// ls r? d? slotIndex logicSlotType + ///ls r? d? slotIndex logicSlotType fn execute_ls( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -1941,17 +2798,29 @@ pub trait LsInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { LsInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Ls, 0), - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Ls, 1), - &crate::vm::instructions::operands::InstOperand::new(slot_index, InstructionOp::Ls, 2), + &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, - 3, + 3usize, ), ) } - /// ls r? d? slotIndex logicSlotType + ///ls r? d? slotIndex logicSlotType fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -1961,7 +2830,7 @@ pub trait LsInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait MaxInstruction: IntegratedCircuit { - /// max r? a(r?|num) b(r?|num) + ///max r? a(r?|num) b(r?|num) fn execute_max( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -1970,12 +2839,24 @@ pub trait MaxInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { MaxInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Max, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Max, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Max, 2), + &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) + ///max r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -1984,7 +2865,7 @@ pub trait MaxInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait MinInstruction: IntegratedCircuit { - /// min r? a(r?|num) b(r?|num) + ///min r? a(r?|num) b(r?|num) fn execute_min( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -1993,12 +2874,24 @@ pub trait MinInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { MinInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Min, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Min, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Min, 2), + &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) + ///min r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2007,7 +2900,7 @@ pub trait MinInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait ModInstruction: IntegratedCircuit { - /// mod r? a(r?|num) b(r?|num) + ///mod r? a(r?|num) b(r?|num) fn execute_mod( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2016,12 +2909,24 @@ pub trait ModInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { ModInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Mod, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Mod, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Mod, 2), + &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) + ///mod r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2030,7 +2935,7 @@ pub trait ModInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait MoveInstruction: IntegratedCircuit { - /// move r? a(r?|num) + ///move r? a(r?|num) fn execute_move( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2038,11 +2943,19 @@ pub trait MoveInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { MoveInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Move, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Move, 1), + &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) + ///move r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2050,7 +2963,7 @@ pub trait MoveInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait MulInstruction: IntegratedCircuit { - /// mul r? a(r?|num) b(r?|num) + ///mul r? a(r?|num) b(r?|num) fn execute_mul( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2059,12 +2972,24 @@ pub trait MulInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { MulInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Mul, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Mul, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Mul, 2), + &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) + ///mul r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2073,7 +2998,7 @@ pub trait MulInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait NorInstruction: IntegratedCircuit { - /// nor r? a(r?|num) b(r?|num) + ///nor r? a(r?|num) b(r?|num) fn execute_nor( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2082,12 +3007,24 @@ pub trait NorInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { NorInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Nor, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Nor, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Nor, 2), + &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) + ///nor r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2096,7 +3033,7 @@ pub trait NorInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait NotInstruction: IntegratedCircuit { - /// not r? a(r?|num) + ///not r? a(r?|num) fn execute_not( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2104,11 +3041,19 @@ pub trait NotInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { NotInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Not, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Not, 1), + &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) + ///not r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2116,7 +3061,7 @@ pub trait NotInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait OrInstruction: IntegratedCircuit { - /// or r? a(r?|num) b(r?|num) + ///or r? a(r?|num) b(r?|num) fn execute_or( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2125,12 +3070,24 @@ pub trait OrInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { OrInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Or, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Or, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Or, 2), + &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) + ///or r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2139,24 +3096,28 @@ pub trait OrInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait PeekInstruction: IntegratedCircuit { - /// peek r? + ///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, 0), + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Peek, + 0usize, + ), ) } - /// peek r? + ///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) + ///poke address(r?|num) value(r?|num) fn execute_poke( &mut self, address: &crate::vm::instructions::operands::Operand, @@ -2164,11 +3125,19 @@ pub trait PokeInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { PokeInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(address, InstructionOp::Poke, 0), - &crate::vm::instructions::operands::InstOperand::new(value, InstructionOp::Poke, 1), + &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) + ///poke address(r?|num) value(r?|num) fn execute_inner( &mut self, address: &crate::vm::instructions::operands::InstOperand, @@ -2176,41 +3145,49 @@ pub trait PokeInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait PopInstruction: IntegratedCircuit { - /// pop r? + ///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, 0), + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Pop, + 0usize, + ), ) } - /// pop r? + ///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) + ///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, 0), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Push, + 0usize, + ), ) } - /// push a(r?|num) + ///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) + ///put d? address(r?|num) value(r?|num) fn execute_put( &mut self, d: &crate::vm::instructions::operands::Operand, @@ -2219,12 +3196,24 @@ pub trait PutInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { PutInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Put, 0), - &crate::vm::instructions::operands::InstOperand::new(address, InstructionOp::Put, 1), - &crate::vm::instructions::operands::InstOperand::new(value, InstructionOp::Put, 2), + &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) + ///put d? address(r?|num) value(r?|num) fn execute_inner( &mut self, d: &crate::vm::instructions::operands::InstOperand, @@ -2233,7 +3222,7 @@ pub trait PutInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait PutdInstruction: IntegratedCircuit { - /// putd id(r?|num) address(r?|num) value(r?|num) + ///putd id(r?|num) address(r?|num) value(r?|num) fn execute_putd( &mut self, id: &crate::vm::instructions::operands::Operand, @@ -2242,12 +3231,24 @@ pub trait PutdInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { PutdInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(id, InstructionOp::Putd, 0), - &crate::vm::instructions::operands::InstOperand::new(address, InstructionOp::Putd, 1), - &crate::vm::instructions::operands::InstOperand::new(value, InstructionOp::Putd, 2), + &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) + ///putd id(r?|num) address(r?|num) value(r?|num) fn execute_inner( &mut self, id: &crate::vm::instructions::operands::InstOperand, @@ -2256,24 +3257,28 @@ pub trait PutdInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait RandInstruction: IntegratedCircuit { - /// rand r? + ///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, 0), + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Rand, + 0usize, + ), ) } - /// rand r? + ///rand r? fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, ) -> Result<(), crate::errors::ICError>; } pub trait RoundInstruction: IntegratedCircuit { - /// round r? a(r?|num) + ///round r? a(r?|num) fn execute_round( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2281,11 +3286,19 @@ pub trait RoundInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { RoundInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Round, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Round, 1), + &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) + ///round r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2293,7 +3306,7 @@ pub trait RoundInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SInstruction: IntegratedCircuit { - /// s d? logicType r? + ///s d? logicType r? fn execute_s( &mut self, d: &crate::vm::instructions::operands::Operand, @@ -2302,12 +3315,24 @@ pub trait SInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::S, 0), - &crate::vm::instructions::operands::InstOperand::new(logic_type, InstructionOp::S, 1), - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::S, 2), + &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? + ///s d? logicType r? fn execute_inner( &mut self, d: &crate::vm::instructions::operands::InstOperand, @@ -2316,7 +3341,7 @@ pub trait SInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SapInstruction: IntegratedCircuit { - /// sap r? a(r?|num) b(r?|num) c(r?|num) + ///sap r? a(r?|num) b(r?|num) c(r?|num) fn execute_sap( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2326,13 +3351,29 @@ pub trait SapInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SapInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sap, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sap, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sap, 2), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Sap, 3), + &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) + ///sap r? a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2342,7 +3383,7 @@ pub trait SapInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SapzInstruction: IntegratedCircuit { - /// sapz r? a(r?|num) b(r?|num) + ///sapz r? a(r?|num) b(r?|num) fn execute_sapz( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2351,12 +3392,24 @@ pub trait SapzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SapzInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sapz, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sapz, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sapz, 2), + &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) + ///sapz r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2365,7 +3418,7 @@ pub trait SapzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SbInstruction: IntegratedCircuit { - /// sb deviceHash logicType r? + ///sb deviceHash logicType r? fn execute_sb( &mut self, device_hash: &crate::vm::instructions::operands::Operand, @@ -2374,12 +3427,24 @@ pub trait SbInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SbInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(device_hash, InstructionOp::Sb, 0), - &crate::vm::instructions::operands::InstOperand::new(logic_type, InstructionOp::Sb, 1), - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sb, 2), + &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? + ///sb deviceHash logicType r? fn execute_inner( &mut self, device_hash: &crate::vm::instructions::operands::InstOperand, @@ -2388,7 +3453,7 @@ pub trait SbInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SbnInstruction: IntegratedCircuit { - /// sbn deviceHash nameHash logicType r? + ///sbn deviceHash nameHash logicType r? fn execute_sbn( &mut self, device_hash: &crate::vm::instructions::operands::Operand, @@ -2401,14 +3466,26 @@ pub trait SbnInstruction: IntegratedCircuit { &crate::vm::instructions::operands::InstOperand::new( device_hash, InstructionOp::Sbn, - 0, + 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, ), - &crate::vm::instructions::operands::InstOperand::new(name_hash, InstructionOp::Sbn, 1), - &crate::vm::instructions::operands::InstOperand::new(logic_type, InstructionOp::Sbn, 2), - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sbn, 3), ) } - /// sbn deviceHash nameHash logicType r? + ///sbn deviceHash nameHash logicType r? fn execute_inner( &mut self, device_hash: &crate::vm::instructions::operands::InstOperand, @@ -2418,7 +3495,7 @@ pub trait SbnInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SbsInstruction: IntegratedCircuit { - /// sbs deviceHash slotIndex logicSlotType r? + ///sbs deviceHash slotIndex logicSlotType r? fn execute_sbs( &mut self, device_hash: &crate::vm::instructions::operands::Operand, @@ -2431,18 +3508,26 @@ pub trait SbsInstruction: IntegratedCircuit { &crate::vm::instructions::operands::InstOperand::new( device_hash, InstructionOp::Sbs, - 0, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + slot_index, + InstructionOp::Sbs, + 1usize, ), - &crate::vm::instructions::operands::InstOperand::new(slot_index, InstructionOp::Sbs, 1), &crate::vm::instructions::operands::InstOperand::new( logic_slot_type, InstructionOp::Sbs, - 2, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sbs, + 3usize, ), - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sbs, 3), ) } - /// sbs deviceHash slotIndex logicSlotType r? + ///sbs deviceHash slotIndex logicSlotType r? fn execute_inner( &mut self, device_hash: &crate::vm::instructions::operands::InstOperand, @@ -2452,7 +3537,7 @@ pub trait SbsInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SdInstruction: IntegratedCircuit { - /// sd id(r?|num) logicType r? + ///sd id(r?|num) logicType r? fn execute_sd( &mut self, id: &crate::vm::instructions::operands::Operand, @@ -2461,12 +3546,24 @@ pub trait SdInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SdInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(id, InstructionOp::Sd, 0), - &crate::vm::instructions::operands::InstOperand::new(logic_type, InstructionOp::Sd, 1), - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sd, 2), + &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? + ///sd id(r?|num) logicType r? fn execute_inner( &mut self, id: &crate::vm::instructions::operands::InstOperand, @@ -2475,7 +3572,7 @@ pub trait SdInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SdnsInstruction: IntegratedCircuit { - /// sdns r? d? + ///sdns r? d? fn execute_sdns( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2483,11 +3580,19 @@ pub trait SdnsInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SdnsInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sdns, 0), - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Sdns, 1), + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sdns, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Sdns, + 1usize, + ), ) } - /// sdns r? d? + ///sdns r? d? fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2495,7 +3600,7 @@ pub trait SdnsInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SdseInstruction: IntegratedCircuit { - /// sdse r? d? + ///sdse r? d? fn execute_sdse( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2503,11 +3608,19 @@ pub trait SdseInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SdseInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sdse, 0), - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Sdse, 1), + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sdse, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Sdse, + 1usize, + ), ) } - /// sdse r? d? + ///sdse r? d? fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2515,7 +3628,7 @@ pub trait SdseInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SelectInstruction: IntegratedCircuit { - /// select r? a(r?|num) b(r?|num) c(r?|num) + ///select r? a(r?|num) b(r?|num) c(r?|num) fn execute_select( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2525,13 +3638,29 @@ pub trait SelectInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SelectInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Select, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Select, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Select, 2), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Select, 3), + &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) + ///select r? a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2541,7 +3670,7 @@ pub trait SelectInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SeqInstruction: IntegratedCircuit { - /// seq r? a(r?|num) b(r?|num) + ///seq r? a(r?|num) b(r?|num) fn execute_seq( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2550,12 +3679,24 @@ pub trait SeqInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SeqInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Seq, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Seq, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Seq, 2), + &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) + ///seq r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2564,7 +3705,7 @@ pub trait SeqInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SeqzInstruction: IntegratedCircuit { - /// seqz r? a(r?|num) + ///seqz r? a(r?|num) fn execute_seqz( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2572,11 +3713,19 @@ pub trait SeqzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SeqzInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Seqz, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Seqz, 1), + &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) + ///seqz r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2584,7 +3733,7 @@ pub trait SeqzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SgeInstruction: IntegratedCircuit { - /// sge r? a(r?|num) b(r?|num) + ///sge r? a(r?|num) b(r?|num) fn execute_sge( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2593,12 +3742,24 @@ pub trait SgeInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SgeInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sge, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sge, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sge, 2), + &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) + ///sge r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2607,7 +3768,7 @@ pub trait SgeInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SgezInstruction: IntegratedCircuit { - /// sgez r? a(r?|num) + ///sgez r? a(r?|num) fn execute_sgez( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2615,11 +3776,19 @@ pub trait SgezInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SgezInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sgez, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sgez, 1), + &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) + ///sgez r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2627,7 +3796,7 @@ pub trait SgezInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SgtInstruction: IntegratedCircuit { - /// sgt r? a(r?|num) b(r?|num) + ///sgt r? a(r?|num) b(r?|num) fn execute_sgt( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2636,12 +3805,24 @@ pub trait SgtInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SgtInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sgt, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sgt, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sgt, 2), + &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) + ///sgt r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2650,7 +3831,7 @@ pub trait SgtInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SgtzInstruction: IntegratedCircuit { - /// sgtz r? a(r?|num) + ///sgtz r? a(r?|num) fn execute_sgtz( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2658,11 +3839,19 @@ pub trait SgtzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SgtzInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sgtz, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sgtz, 1), + &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) + ///sgtz r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2670,7 +3859,7 @@ pub trait SgtzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SinInstruction: IntegratedCircuit { - /// sin r? a(r?|num) + ///sin r? a(r?|num) fn execute_sin( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2678,11 +3867,19 @@ pub trait SinInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SinInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sin, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sin, 1), + &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) + ///sin r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2690,7 +3887,7 @@ pub trait SinInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SlaInstruction: IntegratedCircuit { - /// sla r? a(r?|num) b(r?|num) + ///sla r? a(r?|num) b(r?|num) fn execute_sla( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2699,12 +3896,24 @@ pub trait SlaInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SlaInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sla, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sla, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sla, 2), + &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) + ///sla r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2713,7 +3922,7 @@ pub trait SlaInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SleInstruction: IntegratedCircuit { - /// sle r? a(r?|num) b(r?|num) + ///sle r? a(r?|num) b(r?|num) fn execute_sle( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2722,12 +3931,24 @@ pub trait SleInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SleInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sle, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sle, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sle, 2), + &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) + ///sle r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2736,24 +3957,28 @@ pub trait SleInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SleepInstruction: IntegratedCircuit { - /// sleep a(r?|num) + ///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, 0), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Sleep, + 0usize, + ), ) } - /// sleep a(r?|num) + ///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) + ///slez r? a(r?|num) fn execute_slez( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2761,11 +3986,19 @@ pub trait SlezInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SlezInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Slez, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Slez, 1), + &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) + ///slez r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2773,7 +4006,7 @@ pub trait SlezInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SllInstruction: IntegratedCircuit { - /// sll r? a(r?|num) b(r?|num) + ///sll r? a(r?|num) b(r?|num) fn execute_sll( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2782,12 +4015,24 @@ pub trait SllInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SllInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sll, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sll, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sll, 2), + &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) + ///sll r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2796,7 +4041,7 @@ pub trait SllInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SltInstruction: IntegratedCircuit { - /// slt r? a(r?|num) b(r?|num) + ///slt r? a(r?|num) b(r?|num) fn execute_slt( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2805,12 +4050,24 @@ pub trait SltInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SltInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Slt, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Slt, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Slt, 2), + &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) + ///slt r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2819,7 +4076,7 @@ pub trait SltInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SltzInstruction: IntegratedCircuit { - /// sltz r? a(r?|num) + ///sltz r? a(r?|num) fn execute_sltz( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2827,11 +4084,19 @@ pub trait SltzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SltzInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sltz, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sltz, 1), + &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) + ///sltz r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2839,7 +4104,7 @@ pub trait SltzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SnaInstruction: IntegratedCircuit { - /// sna r? a(r?|num) b(r?|num) c(r?|num) + ///sna r? a(r?|num) b(r?|num) c(r?|num) fn execute_sna( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2849,13 +4114,29 @@ pub trait SnaInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SnaInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sna, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sna, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sna, 2), - &crate::vm::instructions::operands::InstOperand::new(c, InstructionOp::Sna, 3), + &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) + ///sna r? a(r?|num) b(r?|num) c(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2865,7 +4146,7 @@ pub trait SnaInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SnanInstruction: IntegratedCircuit { - /// snan r? a(r?|num) + ///snan r? a(r?|num) fn execute_snan( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2873,11 +4154,19 @@ pub trait SnanInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SnanInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Snan, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Snan, 1), + &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) + ///snan r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2885,7 +4174,7 @@ pub trait SnanInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SnanzInstruction: IntegratedCircuit { - /// snanz r? a(r?|num) + ///snanz r? a(r?|num) fn execute_snanz( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2893,11 +4182,19 @@ pub trait SnanzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SnanzInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Snanz, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Snanz, 1), + &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) + ///snanz r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2905,7 +4202,7 @@ pub trait SnanzInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SnazInstruction: IntegratedCircuit { - /// snaz r? a(r?|num) b(r?|num) + ///snaz r? a(r?|num) b(r?|num) fn execute_snaz( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2914,12 +4211,24 @@ pub trait SnazInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SnazInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Snaz, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Snaz, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Snaz, 2), + &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) + ///snaz r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2928,7 +4237,7 @@ pub trait SnazInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SneInstruction: IntegratedCircuit { - /// sne r? a(r?|num) b(r?|num) + ///sne r? a(r?|num) b(r?|num) fn execute_sne( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2937,12 +4246,24 @@ pub trait SneInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SneInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sne, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sne, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sne, 2), + &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) + ///sne r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2951,7 +4272,7 @@ pub trait SneInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SnezInstruction: IntegratedCircuit { - /// snez r? a(r?|num) + ///snez r? a(r?|num) fn execute_snez( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2959,11 +4280,19 @@ pub trait SnezInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SnezInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Snez, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Snez, 1), + &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) + ///snez r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2971,7 +4300,7 @@ pub trait SnezInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SqrtInstruction: IntegratedCircuit { - /// sqrt r? a(r?|num) + ///sqrt r? a(r?|num) fn execute_sqrt( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -2979,11 +4308,19 @@ pub trait SqrtInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SqrtInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sqrt, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sqrt, 1), + &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) + ///sqrt r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -2991,7 +4328,7 @@ pub trait SqrtInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SraInstruction: IntegratedCircuit { - /// sra r? a(r?|num) b(r?|num) + ///sra r? a(r?|num) b(r?|num) fn execute_sra( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -3000,12 +4337,24 @@ pub trait SraInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SraInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sra, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sra, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sra, 2), + &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) + ///sra r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -3014,7 +4363,7 @@ pub trait SraInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SrlInstruction: IntegratedCircuit { - /// srl r? a(r?|num) b(r?|num) + ///srl r? a(r?|num) b(r?|num) fn execute_srl( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -3023,12 +4372,24 @@ pub trait SrlInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SrlInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Srl, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Srl, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Srl, 2), + &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) + ///srl r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -3037,7 +4398,7 @@ pub trait SrlInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SsInstruction: IntegratedCircuit { - /// ss d? slotIndex logicSlotType r? + ///ss d? slotIndex logicSlotType r? fn execute_ss( &mut self, d: &crate::vm::instructions::operands::Operand, @@ -3047,17 +4408,29 @@ pub trait SsInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SsInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(d, InstructionOp::Ss, 0), - &crate::vm::instructions::operands::InstOperand::new(slot_index, InstructionOp::Ss, 1), + &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, - 2, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Ss, + 3usize, ), - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Ss, 3), ) } - /// ss d? slotIndex logicSlotType r? + ///ss d? slotIndex logicSlotType r? fn execute_inner( &mut self, d: &crate::vm::instructions::operands::InstOperand, @@ -3067,7 +4440,7 @@ pub trait SsInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait SubInstruction: IntegratedCircuit { - /// sub r? a(r?|num) b(r?|num) + ///sub r? a(r?|num) b(r?|num) fn execute_sub( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -3076,12 +4449,24 @@ pub trait SubInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { SubInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Sub, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Sub, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Sub, 2), + &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) + ///sub r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -3090,7 +4475,7 @@ pub trait SubInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait TanInstruction: IntegratedCircuit { - /// tan r? a(r?|num) + ///tan r? a(r?|num) fn execute_tan( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -3098,11 +4483,19 @@ pub trait TanInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { TanInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Tan, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Tan, 1), + &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) + ///tan r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -3110,7 +4503,7 @@ pub trait TanInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait TruncInstruction: IntegratedCircuit { - /// trunc r? a(r?|num) + ///trunc r? a(r?|num) fn execute_trunc( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -3118,11 +4511,19 @@ pub trait TruncInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { TruncInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Trunc, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Trunc, 1), + &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) + ///trunc r? a(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -3130,7 +4531,7 @@ pub trait TruncInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait XorInstruction: IntegratedCircuit { - /// xor r? a(r?|num) b(r?|num) + ///xor r? a(r?|num) b(r?|num) fn execute_xor( &mut self, r: &crate::vm::instructions::operands::Operand, @@ -3139,12 +4540,24 @@ pub trait XorInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError> { XorInstruction::execute_inner( self, - &crate::vm::instructions::operands::InstOperand::new(r, InstructionOp::Xor, 0), - &crate::vm::instructions::operands::InstOperand::new(a, InstructionOp::Xor, 1), - &crate::vm::instructions::operands::InstOperand::new(b, InstructionOp::Xor, 2), + &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) + ///xor r? a(r?|num) b(r?|num) fn execute_inner( &mut self, r: &crate::vm::instructions::operands::InstOperand, @@ -3153,302 +4566,50 @@ pub trait XorInstruction: IntegratedCircuit { ) -> Result<(), crate::errors::ICError>; } pub trait YieldInstruction: IntegratedCircuit { - /// yield + ///yield fn execute_yield(&mut self) -> Result<(), crate::errors::ICError> { YieldInstruction::execute_inner(self) } - /// yield + ///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 - + 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 - + 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 -{ -} +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 + 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 + 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/object.rs b/ic10emu/src/vm/object.rs index 6d63fb5..b0930a6 100644 --- a/ic10emu/src/vm/object.rs +++ b/ic10emu/src/vm/object.rs @@ -2,7 +2,6 @@ use std::{ cell::RefCell, ops::{Deref, DerefMut}, rc::Rc, - str::FromStr, }; use macro_rules_attribute::derive; @@ -17,12 +16,12 @@ pub mod traits; use traits::Object; -use crate::vm::{ - enums::{basic_enums::Class as SlotClass, script_enums::LogicSlotType}, - VM, -}; +use crate::vm::VM; -use super::enums::prefabs::StationpediaPrefab; +use stationeers_data::enums::{ + basic_enums::Class as SlotClass, prefabs::StationpediaPrefab, script_enums::LogicSlotType, + MemoryAccess, +}; pub type ObjectID = u32; pub type BoxedObject = Rc>; @@ -97,13 +96,6 @@ impl Name { } } -#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] -pub enum MemoryAccess { - Read, - Write, - ReadWrite, -} - #[derive(Debug, Clone, Serialize, Deserialize)] pub struct LogicField { pub field_type: MemoryAccess, diff --git a/ic10emu/src/vm/object/errors.rs b/ic10emu/src/vm/object/errors.rs index 478869c..e818f07 100644 --- a/ic10emu/src/vm/object/errors.rs +++ b/ic10emu/src/vm/object/errors.rs @@ -1,7 +1,7 @@ use serde_derive::{Deserialize, Serialize}; use thiserror::Error; -use crate::vm::enums::script_enums::{LogicSlotType, LogicType}; +use stationeers_data::enums::script_enums::{LogicSlotType, LogicType}; #[derive(Error, Debug, Clone, Serialize, Deserialize)] pub enum LogicError { diff --git a/ic10emu/src/vm/object/generic/structs.rs b/ic10emu/src/vm/object/generic/structs.rs index 6fbb4f4..a6dd513 100644 --- a/ic10emu/src/vm/object/generic/structs.rs +++ b/ic10emu/src/vm/object/generic/structs.rs @@ -3,17 +3,15 @@ use super::{macros::*, traits::*}; use crate::{ network::Connection, vm::{ - enums::script_enums::LogicType, - object::{ - macros::ObjectInterface, - templates::{DeviceInfo, ItemInfo}, - traits::*, - LogicField, Name, ObjectID, Slot, - }, + object::{macros::ObjectInterface, traits::*, LogicField, Name, ObjectID, Slot}, VM, }, }; use macro_rules_attribute::derive; +use stationeers_data::{ + enums::script_enums::LogicType, + templates::{DeviceInfo, ItemInfo}, +}; use std::{collections::BTreeMap, rc::Rc}; #[derive(ObjectInterface!, GWStructure!)] diff --git a/ic10emu/src/vm/object/generic/traits.rs b/ic10emu/src/vm/object/generic/traits.rs index ff8338d..e70fc83 100644 --- a/ic10emu/src/vm/object/generic/traits.rs +++ b/ic10emu/src/vm/object/generic/traits.rs @@ -1,18 +1,19 @@ use crate::{ network::Connection, - vm::{ - enums::{ - basic_enums::{Class as SlotClass, GasType, SortingClass}, - script_enums::{LogicSlotType, LogicType}, - }, - object::{ - errors::{LogicError, MemoryError}, - templates::{DeviceInfo, ItemInfo}, - traits::*, - LogicField, MemoryAccess, ObjectID, Slot, - }, + vm::object::{ + errors::{LogicError, MemoryError}, + traits::*, + LogicField, MemoryAccess, ObjectID, Slot, }, }; + +use stationeers_data::{ + enums::{ + basic_enums::{Class as SlotClass, GasType, SortingClass}, + script_enums::{LogicSlotType, LogicType}, + }, + templates::{DeviceInfo, ItemInfo}, +}; use std::{collections::BTreeMap, usize}; use strum::IntoEnumIterator; diff --git a/ic10emu/src/vm/object/stationpedia.rs b/ic10emu/src/vm/object/stationpedia.rs index 39fca00..acd11b8 100644 --- a/ic10emu/src/vm/object/stationpedia.rs +++ b/ic10emu/src/vm/object/stationpedia.rs @@ -1,9 +1,10 @@ use std::rc::Rc; -use crate::vm::object::VMObject; -use crate::vm::{enums::prefabs::StationpediaPrefab, VM}; +use stationeers_data::{enums::prefabs::StationpediaPrefab, templates::ObjectTemplate}; + +use crate::vm::object::VMObject; +use crate::vm::VM; -use super::templates::ObjectTemplate; use super::ObjectID; pub mod structs; diff --git a/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs b/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs index 35653ac..e2a10d8 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs @@ -1,11 +1,6 @@ use crate::{ - network::{CableConnectionType, Connection, ConnectionRole}, + network::{CableConnectionType, Connection}, vm::{ - enums::{ - basic_enums::Class as SlotClass, - prefabs::StationpediaPrefab, - script_enums::{LogicSlotType, LogicType}, - }, object::{ errors::LogicError, macros::ObjectInterface, traits::*, Name, ObjectID, Slot, VMObject, }, @@ -13,6 +8,12 @@ use crate::{ }, }; use macro_rules_attribute::derive; +use stationeers_data::enums::{ + basic_enums::Class as SlotClass, + prefabs::StationpediaPrefab, + script_enums::{LogicSlotType, LogicType}, + ConnectionRole, +}; use std::rc::Rc; use strum::EnumProperty; diff --git a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs index 2edb817..9cec5f0 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs @@ -2,10 +2,6 @@ use crate::{ errors::ICError, interpreter::{instructions::IC10Marker, ICState, Program}, vm::{ - enums::{ - basic_enums::{Class as SlotClass, GasType, SortingClass}, - script_enums::{LogicSlotType, LogicType}, - }, instructions::{operands::Operand, Instruction}, object::{ errors::{LogicError, MemoryError}, @@ -17,6 +13,10 @@ use crate::{ }, }; use macro_rules_attribute::derive; +use stationeers_data::enums::{ + basic_enums::{Class as SlotClass, GasType, SortingClass}, + script_enums::{LogicSlotType, LogicType}, +}; use std::{collections::BTreeMap, rc::Rc}; static RETURN_ADDRESS_INDEX: usize = 17; diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index 7e3987e..5e1d2d8 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -2,13 +2,8 @@ use std::{collections::BTreeMap, rc::Rc}; use crate::{ errors::TemplateError, - network::{Connection, ConnectionRole, ConnectionType}, + network::Connection, vm::{ - enums::{ - basic_enums::{Class as SlotClass, GasType, SortingClass}, - prefabs::StationpediaPrefab, - script_enums::{LogicSlotType, LogicType}, - }, object::{ generic::structs::{ Generic, GenericItem, GenericItemLogicable, @@ -24,56 +19,48 @@ use crate::{ }, }; use serde_derive::{Deserialize, Serialize}; +use stationeers_data::{ + enums::{ + basic_enums::{Class as SlotClass, GasType, SortingClass}, + prefabs::StationpediaPrefab, + script_enums::{LogicSlotType, LogicType}, + ConnectionRole, ConnectionType, + }, + templates::*, +}; use strum::{EnumProperty, IntoEnumIterator}; use super::{stationpedia, MemoryAccess, ObjectID, VMObject}; #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ObjectTemplate { - Structure(StructureTemplate), - StructureSlots(StructureSlotsTemplate), - StructureLogic(StructureLogicTemplate), - StructureLogicDevice(StructureLogicDeviceTemplate), - StructureLogicDeviceMemory(StructureLogicDeviceMemoryTemplate), - Item(ItemTemplate), - ItemSlots(ItemSlotsTemplate), - ItemLogic(ItemLogicTemplate), - ItemLogicMemory(ItemLogicMemoryTemplate), +#[serde(rename_all = "camelCase")] +pub struct ObjectInfo { + pub name: Option, + pub id: Option, } -impl ObjectTemplate { - pub fn prefab_info(&self) -> &PrefabInfo { - use ObjectTemplate::*; - match self { - Structure(s) => &s.prefab, - StructureSlots(s) => &s.prefab, - StructureLogic(s) => &s.prefab, - StructureLogicDevice(s) => &s.prefab, - StructureLogicDeviceMemory(s) => &s.prefab, - Item(i) => &i.prefab, - ItemSlots(i) => &i.prefab, - ItemLogic(i) => &i.prefab, - ItemLogicMemory(i) => &i.prefab, +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()), } } +} - pub fn object_info(&self) -> Option<&ObjectInfo> { - use ObjectTemplate::*; - match self { - Structure(s) => s.object.as_ref(), - StructureSlots(s) => s.object.as_ref(), - StructureLogic(s) => s.object.as_ref(), - StructureLogicDevice(s) => s.object.as_ref(), - StructureLogicDeviceMemory(s) => s.object.as_ref(), - Item(i) => i.object.as_ref(), - ItemSlots(i) => i.object.as_ref(), - ItemLogic(i) => i.object.as_ref(), - ItemLogicMemory(i) => i.object.as_ref(), - } - } +pub struct FrozenObjectTemplate { + obj_info: ObjectInfo, + template: ObjectTemplate, +} - pub fn build(&self, id: ObjectID, vm: &Rc) -> VMObject { +pub struct FrozenObject { + obj_info: ObjectInfo, + template: Option, +} + +impl FrozenObjectTemplate { + pub fn build_vm_obj(&self, id: ObjectID, vm: &Rc) -> VMObject { if let Some(obj) = stationpedia::object_from_prefab_template(self, id, vm) { obj } else { @@ -83,7 +70,7 @@ impl ObjectTemplate { pub fn connected_networks(&self) -> Vec { use ObjectTemplate::*; - match self { + match self.template { StructureLogicDevice(s) => s .device .connection_list @@ -104,7 +91,7 @@ impl ObjectTemplate { pub fn contained_object_ids(&self) -> Vec { use ObjectTemplate::*; - match self { + match self.template { StructureSlots(s) => s .slots .iter() @@ -181,7 +168,7 @@ impl ObjectTemplate { pub fn templates_from_slots(&self) -> Vec> { use ObjectTemplate::*; - match self { + match self.template { StructureSlots(s) => s.slots.iter().map(|info| info.occupant.clone()).collect(), StructureLogic(s) => s.slots.iter().map(|info| info.occupant.clone()).collect(), StructureLogicDevice(s) => s.slots.iter().map(|info| info.occupant.clone()).collect(), @@ -197,7 +184,7 @@ impl ObjectTemplate { fn build_generic(&self, id: ObjectID, vm: Rc) -> VMObject { use ObjectTemplate::*; - match self { + match self.template { Structure(s) => VMObject::new(Generic { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), @@ -1193,15 +1180,6 @@ fn freeze_storage(storage: StorageRef<'_>, vm: &Rc) -> Result, Ok(slots) } -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct PrefabInfo { - pub prefab_name: String, - pub prefab_hash: i32, - pub desc: String, - pub name: String, -} - impl From<&VMObject> for PrefabInfo { fn from(obj: &VMObject) -> Self { let obj_ref = obj.borrow(); @@ -1221,61 +1199,6 @@ impl From<&VMObject> for PrefabInfo { } } } - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct ObjectInfo { - pub name: Option, - pub id: 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()), - } - } -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct SlotInfo { - pub name: String, - pub typ: SlotClass, - #[serde(skip_serializing_if = "Option::is_none")] - pub occupant: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub quantity: Option, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -pub struct LogicSlotTypes { - #[serde(flatten)] - pub slot_types: BTreeMap, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -pub struct LogicTypes { - #[serde(flatten)] - pub types: BTreeMap, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct LogicInfo { - pub logic_slot_types: BTreeMap, - pub logic_types: LogicTypes, - #[serde(skip_serializing_if = "Option::is_none")] - pub modes: Option>, - #[serde(skip_serializing_if = "Option::is_none")] - pub logic_values: Option>, - pub transmission_receiver: bool, - pub wireless_logic: bool, - pub circuit_holder: bool, -} - impl From> for LogicInfo { fn from(logic: LogicableRef) -> Self { // Logicable: Storage -> !None @@ -1350,22 +1273,6 @@ impl From> for LogicInfo { } } -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct ItemInfo { - pub consumable: bool, - #[serde(skip_serializing_if = "Option::is_none")] - pub filter_type: Option, - pub ingredient: bool, - pub max_quantity: u32, - #[serde(skip_serializing_if = "Option::is_none")] - pub reagents: Option>, - pub slot_class: SlotClass, - pub sorting_class: SortingClass, - #[serde(skip_serializing_if = "Option::is_none")] - pub damage: Option, -} - impl From> for ItemInfo { fn from(item: ItemRef<'_>) -> Self { ItemInfo { @@ -1385,35 +1292,6 @@ impl From> for ItemInfo { } } -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct ConnectionInfo { - pub typ: ConnectionType, - pub role: ConnectionRole, - #[serde(skip_serializing_if = "Option::is_none")] - pub network: Option, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct DeviceInfo { - pub connection_list: Vec, - #[serde(skip_serializing_if = "Option::is_none")] - pub device_pins_length: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub device_pins: 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, - #[serde(skip_serializing_if = "Option::is_none")] - pub reagents: Option>, -} - impl From> for DeviceInfo { fn from(device: DeviceRef) -> Self { let reagents: BTreeMap = device.get_reagents().iter().copied().collect(); @@ -1442,12 +1320,6 @@ impl From> for DeviceInfo { } } -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct StructureInfo { - pub small_grid: bool, -} - impl From> for StructureInfo { fn from(value: StructureRef) -> Self { StructureInfo { @@ -1455,26 +1327,6 @@ impl From> for StructureInfo { } } } - -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct Instruction { - pub description: String, - pub typ: String, - pub value: i64, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct MemoryInfo { - #[serde(skip_serializing_if = "Option::is_none")] - pub instructions: Option>, - pub memory_access: MemoryAccess, - pub memory_size: usize, - #[serde(skip_serializing_if = "Option::is_none")] - pub values: Option>, -} - impl From> for MemoryInfo { fn from(mem_r: MemoryReadableRef<'_>) -> Self { let mem_w = mem_r.as_memory_writable(); @@ -1491,103 +1343,6 @@ impl From> for MemoryInfo { } } -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct StructureTemplate { - #[serde(skip_serializing_if = "Option::is_none")] - pub object: Option, - pub prefab: PrefabInfo, - pub structure: StructureInfo, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct StructureSlotsTemplate { - #[serde(skip_serializing_if = "Option::is_none")] - pub object: Option, - pub prefab: PrefabInfo, - pub structure: StructureInfo, - pub slots: Vec, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct StructureLogicTemplate { - #[serde(skip_serializing_if = "Option::is_none")] - pub object: Option, - pub prefab: PrefabInfo, - pub structure: StructureInfo, - pub logic: LogicInfo, - pub slots: Vec, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct StructureLogicDeviceTemplate { - #[serde(skip_serializing_if = "Option::is_none")] - pub object: Option, - pub prefab: PrefabInfo, - pub structure: StructureInfo, - pub logic: LogicInfo, - pub slots: Vec, - pub device: DeviceInfo, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct StructureLogicDeviceMemoryTemplate { - #[serde(skip_serializing_if = "Option::is_none")] - pub object: Option, - pub prefab: PrefabInfo, - pub structure: StructureInfo, - pub logic: LogicInfo, - pub slots: Vec, - pub device: DeviceInfo, - pub memory: MemoryInfo, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct ItemTemplate { - #[serde(skip_serializing_if = "Option::is_none")] - pub object: Option, - pub prefab: PrefabInfo, - pub item: ItemInfo, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct ItemSlotsTemplate { - #[serde(skip_serializing_if = "Option::is_none")] - pub object: Option, - pub prefab: PrefabInfo, - pub item: ItemInfo, - pub slots: Vec, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct ItemLogicTemplate { - #[serde(skip_serializing_if = "Option::is_none")] - pub object: Option, - pub prefab: PrefabInfo, - pub item: ItemInfo, - pub logic: LogicInfo, - pub slots: Vec, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct ItemLogicMemoryTemplate { - #[serde(skip_serializing_if = "Option::is_none")] - pub object: Option, - pub prefab: PrefabInfo, - pub item: ItemInfo, - pub logic: LogicInfo, - pub slots: Vec, - pub memory: MemoryInfo, -} - #[cfg(test)] mod tests { diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index 5a08d45..5653e05 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -5,10 +5,6 @@ use crate::{ interpreter::ICState, network::Connection, vm::{ - enums::{ - basic_enums::{Class as SlotClass, GasType, SortingClass}, - script_enums::{LogicSlotType, LogicType}, - }, instructions::{traits::ICInstructable, Instruction}, object::{ errors::{LogicError, MemoryError}, @@ -17,6 +13,10 @@ use crate::{ }, }, }; +use stationeers_data::enums::{ + basic_enums::{Class as SlotClass, GasType, SortingClass}, + script_enums::{LogicSlotType, LogicType}, +}; use std::{collections::BTreeMap, fmt::Debug}; #[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] diff --git a/ic10emu_wasm/Cargo.toml b/ic10emu_wasm/Cargo.toml index 05c907d..587f187 100644 --- a/ic10emu_wasm/Cargo.toml +++ b/ic10emu_wasm/Cargo.toml @@ -9,22 +9,22 @@ ic10emu = { path = "../ic10emu" } 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" +itertools = "0.13.0" +serde = { version = "1.0.202", features = ["derive"] } +serde_with = "3.8.1" tsify = { version = "0.4.5", default-features = false, features = ["js", "wasm-bindgen"] } -thiserror = "1.0.58" +thiserror = "1.0.61" [build-dependencies] ic10emu = { path = "../ic10emu" } strum = { version = "0.26.2"} -itertools = "0.12.1" +itertools = "0.13.0" [features] default = ["console_error_panic_hook"] diff --git a/ic10lsp_wasm/Cargo.toml b/ic10lsp_wasm/Cargo.toml index 9ebc0d7..45a8455 100644 --- a/ic10lsp_wasm/Cargo.toml +++ b/ic10lsp_wasm/Cargo.toml @@ -11,16 +11,16 @@ 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" diff --git a/rust-analyzer.json b/rust-analyzer.json index 2e62bd7..bfdf497 100644 --- a/rust-analyzer.json +++ b/rust-analyzer.json @@ -1,3 +1,5 @@ { - "rust-analyzer.cargo.target": "wasm32-unknown-unknown" + "rust-analyzer.cargo.target": "wasm32-unknown-unknown", + "rust-analyzer.cargo.features": [ + ] } diff --git a/stationeers_data/Cargo.toml b/stationeers_data/Cargo.toml new file mode 100644 index 0000000..71ddfd8 --- /dev/null +++ b/stationeers_data/Cargo.toml @@ -0,0 +1,16 @@ +[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 + +[dependencies] +num-integer = "0.1.46" +phf = "0.11.2" +serde = "1.0.202" +serde_derive = "1.0.202" +strum = { version = "0.26.2", features = ["derive", "phf", "strum_macros"] } diff --git a/stationeers_data/src/database/prefab_map.rs b/stationeers_data/src/database/prefab_map.rs new file mode 100644 index 0000000..c780c56 --- /dev/null +++ b/stationeers_data/src/database/prefab_map.rs @@ -0,0 +1,43567 @@ +use crate::enums::script_enums::*; +use crate::enums::basic_enums::*; +use crate::enums::{MemoryAccess, ConnectionType, ConnectionRole}; +use crate::templates::*; +pub fn build_prefab_database() -> std::collections::BTreeMap< + i32, + crate::templates::ObjectTemplate, +> { + #[allow(clippy::unreadable_literal)] + std::collections::BTreeMap::from([ + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 1365789392i32, + ItemSlotsTemplate { + 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, + }, + slots: vec![SlotInfo { name : "Output".into(), typ : Class::None }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -1136173965i32, + ItemSlotsTemplate { + 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, + }, + slots: vec![SlotInfo { name : "Output".into(), typ : Class::None }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -749191906i32, + ItemSlotsTemplate { + 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, + }, + slots: vec![SlotInfo { name : "Export".into(), typ : Class::None }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -1339716113i32, + ItemSlotsTemplate { + 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, + }, + slots: vec![SlotInfo { name : "Output".into(), typ : Class::Bottle }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + slots: vec![SlotInfo { name : "Input".into(), typ : Class::Tool }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + slots: vec![ + SlotInfo { name : "Source Plant".into(), typ : Class::Plant }, + SlotInfo { name : "Target Plant".into(), typ : Class::Plant } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + slots: vec![SlotInfo { name : "Plant".into(), typ : Class::Plant }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 1260918085i32, + ItemSlotsTemplate { + 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, + }, + slots: vec![ + SlotInfo { name : "Input".into(), typ : Class::None }, SlotInfo { + name : "Output".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + slots: vec![ + SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { + name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : + "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant" + .into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ + : Class::Plant }, SlotInfo { name : "Plant".into(), typ : + Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant + }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { + name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : + "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant" + .into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ + : Class::Plant } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + slots: vec![ + SlotInfo { name : "".into(), typ : Class::Tool } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + 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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" + .into()), (5u32, "High".into()), (6u32, "Full".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + } + .into(), + ), + ( + -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, + }, + 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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" + .into()), (5u32, "High".into()), (6u32, "Full".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + } + .into(), + ), + ( + -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, + }, + slots: vec![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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: "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, + }, + } + .into(), + ), + ( + -932136011i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CartridgeConfiguration".into(), + prefab_hash: -932136011i32, + desc: "".into(), + name: "Configuration".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Cartridge, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + -1462180176i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CartridgeElectronicReader".into(), + prefab_hash: -1462180176i32, + desc: "".into(), + name: "eReader".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Cartridge, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + -1957063345i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CartridgeGPS".into(), + prefab_hash: -1957063345i32, + desc: "".into(), + name: "GPS".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Cartridge, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + 872720793i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CartridgeGuide".into(), + prefab_hash: 872720793i32, + desc: "".into(), + name: "Guide".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Cartridge, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + -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: "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, + }, + } + .into(), + ), + ( + 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: "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, + }, + } + .into(), + ), + ( + -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: "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, + }, + } + .into(), + ), + ( + 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: "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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 81488783i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CartridgeTracker".into(), + prefab_hash: 81488783i32, + desc: "".into(), + name: "Tracker".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Cartridge, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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 }, + 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![(0u32, "Operate".into()), (1u32, "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(), + ), + ( + 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::None, + sorting_class: SortingClass::Storage, + }, + slots: vec![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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 }, + 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![ + (0u32, "Whole Note".into()), (1u32, "Half Note".into()), + (2u32, "Quarter Note".into()), (3u32, "Eighth Note".into()), + (4u32, "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(), + ), + ( + 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 }, + 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![ + (0u32, "C-2".into()), (1u32, "C#-2".into()), (2u32, "D-2" + .into()), (3u32, "D#-2".into()), (4u32, "E-2".into()), (5u32, + "F-2".into()), (6u32, "F#-2".into()), (7u32, "G-2".into()), + (8u32, "G#-2".into()), (9u32, "A-2".into()), (10u32, "A#-2" + .into()), (11u32, "B-2".into()), (12u32, "C-1".into()), + (13u32, "C#-1".into()), (14u32, "D-1".into()), (15u32, "D#-1" + .into()), (16u32, "E-1".into()), (17u32, "F-1".into()), + (18u32, "F#-1".into()), (19u32, "G-1".into()), (20u32, "G#-1" + .into()), (21u32, "A-1".into()), (22u32, "A#-1".into()), + (23u32, "B-1".into()), (24u32, "C0".into()), (25u32, "C#0" + .into()), (26u32, "D0".into()), (27u32, "D#0".into()), + (28u32, "E0".into()), (29u32, "F0".into()), (30u32, "F#0" + .into()), (31u32, "G0".into()), (32u32, "G#0".into()), + (33u32, "A0".into()), (34u32, "A#0".into()), (35u32, "B0" + .into()), (36u32, "C1".into()), (37u32, "C#1".into()), + (38u32, "D1".into()), (39u32, "D#1".into()), (40u32, "E1" + .into()), (41u32, "F1".into()), (42u32, "F#1".into()), + (43u32, "G1".into()), (44u32, "G#1".into()), (45u32, "A1" + .into()), (46u32, "A#1".into()), (47u32, "B1".into()), + (48u32, "C2".into()), (49u32, "C#2".into()), (50u32, "D2" + .into()), (51u32, "D#2".into()), (52u32, "E2".into()), + (53u32, "F2".into()), (54u32, "F#2".into()), (55u32, "G2" + .into()), (56u32, "G#2".into()), (57u32, "A2".into()), + (58u32, "A#2".into()), (59u32, "B2".into()), (60u32, "C3" + .into()), (61u32, "C#3".into()), (62u32, "D3".into()), + (63u32, "D#3".into()), (64u32, "E3".into()), (65u32, "F3" + .into()), (66u32, "F#3".into()), (67u32, "G3".into()), + (68u32, "G#3".into()), (69u32, "A3".into()), (70u32, "A#3" + .into()), (71u32, "B3".into()), (72u32, "C4".into()), (73u32, + "C#4".into()), (74u32, "D4".into()), (75u32, "D#4".into()), + (76u32, "E4".into()), (77u32, "F4".into()), (78u32, "F#4" + .into()), (79u32, "G4".into()), (80u32, "G#4".into()), + (81u32, "A4".into()), (82u32, "A#4".into()), (83u32, "B4" + .into()), (84u32, "C5".into()), (85u32, "C#5".into()), + (86u32, "D5".into()), (87u32, "D#5".into()), (88u32, "E5" + .into()), (89u32, "F5".into()), (90u32, "F#5".into()), + (91u32, "G5 ".into()), (92u32, "G#5".into()), (93u32, "A5" + .into()), (94u32, "A#5".into()), (95u32, "B5".into()), + (96u32, "C6".into()), (97u32, "C#6".into()), (98u32, "D6" + .into()), (99u32, "D#6".into()), (100u32, "E6".into()), + (101u32, "F6".into()), (102u32, "F#6".into()), (103u32, "G6" + .into()), (104u32, "G#6".into()), (105u32, "A6".into()), + (106u32, "A#6".into()), (107u32, "B6".into()), (108u32, "C7" + .into()), (109u32, "C#7".into()), (110u32, "D7".into()), + (111u32, "D#7".into()), (112u32, "E7".into()), (113u32, "F7" + .into()), (114u32, "F#7".into()), (115u32, "G7".into()), + (116u32, "G#7".into()), (117u32, "A7".into()), (118u32, "A#7" + .into()), (119u32, "B7".into()), (120u32, "C8".into()), + (121u32, "C#8".into()), (122u32, "D8".into()), (123u32, "D#8" + .into()), (124u32, "E8".into()), (125u32, "F8".into()), + (126u32, "F#8".into()), (127u32, "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(), + ), + ( + 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, + }, + slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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::None, + sorting_class: SortingClass::Storage, + }, + slots: vec![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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::None, + sorting_class: SortingClass::Atmospherics, + }, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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::None, + sorting_class: SortingClass::Default, + }, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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::None, + sorting_class: SortingClass::Default, + }, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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::None, + sorting_class: SortingClass::Default, + }, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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::None, + sorting_class: SortingClass::Default, + }, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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::None, + sorting_class: SortingClass::Default, + }, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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::None, + sorting_class: SortingClass::Default, + }, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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::None, + sorting_class: SortingClass::Default, + }, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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::None, + sorting_class: SortingClass::Default, + }, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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::None, + sorting_class: SortingClass::Default, + }, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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::None, + sorting_class: SortingClass::Atmospherics, + }, + slots: vec![ + SlotInfo { name : "Gas Canister".into(), typ : Class::LiquidCanister + } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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::None, + sorting_class: SortingClass::Default, + }, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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::None, + sorting_class: SortingClass::Atmospherics, + }, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + slots: vec![ + SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister }, + SlotInfo { name : "Battery".into(), typ : Class::Battery } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + slots: vec![ + SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { + name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : + "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant" + .into(), typ : Class::Plant }, SlotInfo { name : "Liquid Canister" + .into(), typ : Class::LiquidCanister }, SlotInfo { name : + "Liquid Canister".into(), typ : Class::Plant }, SlotInfo { name : + "Liquid Canister".into(), typ : Class::Plant }, SlotInfo { name : + "Liquid Canister".into(), typ : Class::Plant }, SlotInfo { name : + "Liquid Canister".into(), typ : Class::Plant } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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::None, + sorting_class: SortingClass::Atmospherics, + }, + slots: vec![ + SlotInfo { name : "Liquid Canister".into(), typ : + Class::LiquidCanister } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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::None, + sorting_class: SortingClass::Atmospherics, + }, + slots: vec![ + SlotInfo { name : "Liquid Canister".into(), typ : + Class::LiquidCanister } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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::None, + sorting_class: SortingClass::Atmospherics, + }, + slots: vec![ + SlotInfo { name : "Liquid Canister".into(), typ : + Class::LiquidCanister } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + slots: vec![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo + { name : "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo { + name : "Gas Filter".into(), typ : Class::GasFilter } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + slots: vec![SlotInfo { name : "Brain".into(), typ : Class::Organ }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + slots: vec![SlotInfo { name : "Brain".into(), typ : Class::Organ }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + slots: vec![SlotInfo { name : "Brain".into(), typ : Class::Organ }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + slots: vec![SlotInfo { name : "Brain".into(), typ : Class::Organ }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + slots: vec![SlotInfo { name : "Brain".into(), typ : Class::Organ }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + slots: vec![SlotInfo { name : "".into(), typ : Class::Magazine }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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, + }, + slots: vec![ + SlotInfo { name : "Magazine".into(), typ : Class::Flare }, SlotInfo { + name : "".into(), typ : Class::Blocked } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 1840108251i32, + StructureLogicDeviceTemplate { + 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 }, + logic: LogicInfo { + logic_slot_types: vec![(0u32, 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![(0u32, "Idle".into()), (1u32, "Active".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: true, + }, + slots: vec![ + SlotInfo { name : "Programmable Chip".into(), typ : + Class::ProgrammableChip } + ] + .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(), + ), + ( + 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, + }, + slots: vec![SlotInfo { name : "Magazine".into(), typ : Class::Magazine }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 1722785341i32, + ItemLogicTemplate { + 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 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" + .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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: true, + circuit_holder: true, + }, + slots: vec![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo + { name : "Cartridge".into(), typ : Class::Cartridge }, SlotInfo { + name : "Cartridge1".into(), typ : Class::Cartridge }, SlotInfo { name + : "Programmable Chip".into(), typ : Class::ProgrammableChip } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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 (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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + 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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" + .into()), (5u32, "High".into()), (6u32, "Full".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + } + .into(), + ), + ( + -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, + }, + 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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" + .into()), (5u32, "High".into()), (6u32, "Full".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + } + .into(), + ), + ( + 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, + }, + 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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" + .into()), (5u32, "High".into()), (6u32, "Full".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 2060134443i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCableCoilHeavy".into(), + prefab_hash: 2060134443i32, + desc: "Use heavy cable coil for power systems with large draws. Unlike , 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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(), 5f64)].into_iter().collect()), + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + slots: vec![ + SlotInfo { name : "".into(), typ : Class::Egg }, SlotInfo { name : "" + .into(), typ : Class::Egg }, SlotInfo { name : "".into(), typ : + Class::Egg }, SlotInfo { name : "".into(), typ : Class::Egg }, + SlotInfo { name : "".into(), typ : Class::Egg }, SlotInfo { name : "" + .into(), typ : Class::Egg } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 1791306431i32, + ItemSlotsTemplate { + 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, + }, + slots: vec![ + SlotInfo { name : "Air Tank".into(), typ : Class::GasCanister }, + SlotInfo { name : "Waste Tank".into(), typ : Class::GasCanister }, + SlotInfo { name : "Life Support".into(), typ : Class::Battery }, + SlotInfo { name : "Filter".into(), typ : Class::GasFilter }, SlotInfo + { name : "Filter".into(), typ : Class::GasFilter }, SlotInfo { name : + "Filter".into(), typ : Class::GasFilter } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + 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(), + ), + ( + 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, + }, + slots: vec![ + SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name + : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool" + .into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : + Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, + SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name + : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool" + .into(), typ : Class::Tool } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 1677018918i32, + ItemSlotsTemplate { + 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, + }, + slots: vec![ + SlotInfo { name : "Air Tank".into(), typ : Class::GasCanister }, + SlotInfo { name : "Waste Tank".into(), typ : Class::GasCanister }, + SlotInfo { name : "Life Support".into(), typ : Class::Battery }, + SlotInfo { name : "Filter".into(), typ : Class::GasFilter }, SlotInfo + { name : "Filter".into(), typ : Class::GasFilter }, SlotInfo { name : + "Filter".into(), typ : Class::GasFilter } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 235361649i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemExplosive".into(), + prefab_hash: 235361649i32, + desc: "".into(), + name: "Remote Explosive".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![(0u32, "Low Power".into()), (1u32, "High Power".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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()), (12u32, vec![(LogicSlotType::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()), (13u32, vec![(LogicSlotType::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()), (14u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Propellant".into(), typ : Class::GasCanister }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + slots: vec![ + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ + : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ + : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ + : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ + : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ + : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ + : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ + : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -1758310454i32, + ItemLogicMemoryTemplate { + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, 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()), (2u32, 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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Air Tank".into(), typ : Class::GasCanister }, + SlotInfo { name : "Waste Tank".into(), typ : Class::GasCanister }, + SlotInfo { name : "Life Support".into(), typ : Class::Battery }, + SlotInfo { name : "Programmable Chip".into(), typ : + Class::ProgrammableChip }, SlotInfo { name : "Filter".into(), typ : + Class::GasFilter }, SlotInfo { name : "Filter".into(), typ : + Class::GasFilter }, SlotInfo { name : "Filter".into(), typ : + Class::GasFilter }, SlotInfo { name : "Filter".into(), typ : + Class::GasFilter } + ] + .into_iter() + .collect(), + memory: MemoryInfo { + instructions: None, + memory_access: MemoryAccess::ReadWrite, + memory_size: 0u32, + }, + } + .into(), + ), + ( + -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, + }, + 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(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + slots: vec![ + SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name + : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Plant" + .into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ + : Class::Plant }, SlotInfo { name : "Plant".into(), typ : + Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant + }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { + name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : + "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant" + .into(), typ : Class::Plant } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + 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(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Propellant".into(), typ : Class::GasCanister }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 1459985302i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitReinforcedWindows".into(), + prefab_hash: 1459985302i32, + desc: "".into(), + name: "Kit (Reinforced Windows)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 1779979754i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitWindowShutter".into(), + prefab_hash: 1779979754i32, + desc: "".into(), + name: "Kit (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, + }, + } + .into(), + ), + ( + -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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 141535121i32, + ItemLogicTemplate { + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, 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()), (2u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Programmable Chip".into(), typ : + Class::ProgrammableChip }, SlotInfo { name : "Battery".into(), typ : + Class::Battery }, SlotInfo { name : "Motherboard".into(), typ : + Class::Motherboard } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -2126113312i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemLiquidPipeValve".into(), + prefab_hash: -2126113312i32, + desc: "This kit creates a Liquid Valve." + .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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![(0u32, "Default".into()), (1u32, "Flatten".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + slots: vec![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + slots: vec![ + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ + : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ + : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ + : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ + : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ + : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ + : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + slots: vec![ + SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name + : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Ore".into(), + typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore + }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { + name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore" + .into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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()), (12u32, vec![(LogicSlotType::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()), (13u32, vec![(LogicSlotType::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()), (14u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name + : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Ore".into(), + typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore + }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { + name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore" + .into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ + : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![(0u32, "Default".into()), (1u32, "Flatten".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![(0u32, "Default".into()), (1u32, "Flatten".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + slots: vec![ + SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name + : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool" + .into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : + Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, + SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name + : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool" + .into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : + Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 238631271i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPassiveVent".into(), + prefab_hash: 238631271i32, + desc: "This kit creates a Passive Vent among other variants." + .into(), + name: "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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 799323450i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPipeValve".into(), + prefab_hash: 799323450i32, + desc: "This kit creates a Valve." + .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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 678483886i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemRemoteDetonator".into(), + prefab_hash: 678483886i32, + desc: "".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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + slots: vec![ + SlotInfo { name : "Liquid Canister".into(), typ : + Class::LiquidCanister } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo + { name : "Sensor Processing Unit".into(), typ : + Class::SensorProcessingUnit } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + 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(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Propellant".into(), typ : Class::GasCanister }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + slots: vec![SlotInfo { name : "Spray Can".into(), typ : Class::Bottle }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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 Atmos Analyzer or Tracker, Medical Analyzer, Ore Scanner, 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo + { name : "Cartridge".into(), typ : Class::Cartridge } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo + { name : "Dirt Canister".into(), typ : Class::Ore } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + slots: vec![ + SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name + : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool" + .into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : + Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, + SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name + : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool" + .into(), typ : Class::Tool } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + slots: vec![ + SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + 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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" + .into()), (5u32, "High".into()), (6u32, "Full".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + } + .into(), + ), + ( + -1826023284i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageAirConditioner1".into(), + prefab_hash: -1826023284i32, + desc: "".into(), + name: "Wreckage Air Conditioner".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + 169888054i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageAirConditioner2".into(), + prefab_hash: 169888054i32, + desc: "".into(), + name: "Wreckage Air Conditioner".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + -310178617i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageHydroponicsTray1".into(), + prefab_hash: -310178617i32, + desc: "".into(), + name: "Wreckage Hydroponics Tray".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + -997763i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageLargeExtendableRadiator01".into(), + prefab_hash: -997763i32, + desc: "".into(), + name: "Wreckage Large Extendable Radiator".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + 391453348i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageStructureRTG1".into(), + prefab_hash: 391453348i32, + desc: "".into(), + name: "Wreckage Structure RTG".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + -834664349i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageStructureWeatherStation001".into(), + prefab_hash: -834664349i32, + desc: "".into(), + name: "Wreckage Structure Weather Station".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + 1464424921i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageStructureWeatherStation002".into(), + prefab_hash: 1464424921i32, + desc: "".into(), + name: "Wreckage Structure Weather Station".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + 542009679i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageStructureWeatherStation003".into(), + prefab_hash: 542009679i32, + desc: "".into(), + name: "Wreckage Structure Weather Station".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + -1104478996i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageStructureWeatherStation004".into(), + prefab_hash: -1104478996i32, + desc: "".into(), + name: "Wreckage Structure Weather Station".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + -919745414i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageStructureWeatherStation005".into(), + prefab_hash: -919745414i32, + desc: "".into(), + name: "Wreckage Structure Weather Station".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + 1344576960i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageStructureWeatherStation006".into(), + prefab_hash: 1344576960i32, + desc: "".into(), + name: "Wreckage Structure Weather Station".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + 656649558i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageStructureWeatherStation007".into(), + prefab_hash: 656649558i32, + desc: "".into(), + name: "Wreckage Structure Weather Station".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + -1214467897i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageStructureWeatherStation008".into(), + prefab_hash: -1214467897i32, + desc: "".into(), + name: "Wreckage Structure Weather Station".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + -1662394403i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageTurbineGenerator1".into(), + prefab_hash: -1662394403i32, + desc: "".into(), + name: "Wreckage Turbine Generator".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + 98602599i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageTurbineGenerator2".into(), + prefab_hash: 98602599i32, + desc: "".into(), + name: "Wreckage Turbine Generator".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + 1927790321i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageTurbineGenerator3".into(), + prefab_hash: 1927790321i32, + desc: "".into(), + name: "Wreckage Turbine Generator".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + -1682930158i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageWallCooler1".into(), + prefab_hash: -1682930158i32, + desc: "".into(), + name: "Wreckage Wall Cooler".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + 45733800i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageWallCooler2".into(), + prefab_hash: 45733800i32, + desc: "".into(), + name: "Wreckage Wall Cooler".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -1427415566i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "KitchenTableShort".into(), + prefab_hash: -1427415566i32, + desc: "".into(), + name: "Kitchen Table (Short)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -78099334i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "KitchenTableSimpleShort".into(), + prefab_hash: -78099334i32, + desc: "".into(), + name: "Kitchen Table (Simple Short)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -1068629349i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "KitchenTableSimpleTall".into(), + prefab_hash: -1068629349i32, + desc: "".into(), + name: "Kitchen Table (Simple Tall)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -1386237782i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "KitchenTableTall".into(), + prefab_hash: -1386237782i32, + desc: "".into(), + name: "Kitchen Table (Tall)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + 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, + }, + slots: vec![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "Entity".into(), typ : Class::Entity } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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 }, + 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(), + ), + ( + 912453390i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_BlankPiece".into(), + prefab_hash: 912453390i32, + desc: "".into(), + name: "Landingpad".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![].into_iter().collect(), + modes: Some( + vec![ + (0u32, "None".into()), (1u32, "NoContact".into()), (2u32, + "Moving".into()), (3u32, "Holding".into()), (4u32, "Landed" + .into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + 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![ + (0u32, "None".into()), (1u32, "NoContact".into()), (2u32, + "Moving".into()), (3u32, "Holding".into()), (4u32, "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(), + ), + ( + 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 }, + } + .into(), + ), + ( + 817945707i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_GasConnectorInwardPiece".into(), + prefab_hash: 817945707i32, + desc: "".into(), + name: "Landingpad Gas Input".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + 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 }, + } + .into(), + ), + ( + -1216167727i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_LiquidConnectorInwardPiece".into(), + prefab_hash: -1216167727i32, + desc: "".into(), + name: "Landingpad Liquid Input".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + -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 }, + } + .into(), + ), + ( + -1872345847i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_TaxiPieceCorner".into(), + prefab_hash: -1872345847i32, + desc: "".into(), + name: "Landingpad Taxi Corner".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + 146051619i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_TaxiPieceHold".into(), + prefab_hash: 146051619i32, + desc: "".into(), + name: "Landingpad Taxi Hold".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -1477941080i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_TaxiPieceStraight".into(), + prefab_hash: -1477941080i32, + desc: "".into(), + name: "Landingpad Taxi Straight".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -1514298582i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_ThreshholdPiece".into(), + prefab_hash: -1514298582i32, + desc: "".into(), + name: "Landingpad Threshhold".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![ + (0u32, "Whole Note".into()), (1u32, "Half Note".into()), + (2u32, "Quarter Note".into()), (3u32, "Eighth Note".into()), + (4u32, "Sixteenth Note".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Sound Cartridge".into(), typ : + Class::SoundCartridge } + ] + .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(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -337075633i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "MotherboardComms".into(), + prefab_hash: -337075633i32, + 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." + .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, + }, + } + .into(), + ), + ( + 502555944i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "MotherboardLogic".into(), + prefab_hash: 502555944i32, + 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." + .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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -161107071i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "MotherboardProgrammableChip".into(), + prefab_hash: -161107071i32, + 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." + .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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -1908268220i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "MotherboardSorter".into(), + prefab_hash: -1908268220i32, + 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." + .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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + slots: vec![ + SlotInfo { name : "Brain".into(), typ : Class::Organ }, SlotInfo { + name : "Lungs".into(), typ : Class::Organ } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + slots: vec![ + SlotInfo { name : "Brain".into(), typ : Class::Organ }, SlotInfo { + name : "Lungs".into(), typ : Class::Organ } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 248893646i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "PassiveSpeaker".into(), + prefab_hash: 248893646i32, + desc: "".into(), + name: "Passive Speaker".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + slots: vec![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::Battery }, SlotInfo { name : "Liquid Canister".into(), typ : + Class::LiquidCanister } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 399661231i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "RailingElegant01".into(), + prefab_hash: 399661231i32, + desc: "".into(), + name: "Railing Elegant (Type 1)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -1898247915i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "RailingElegant02".into(), + prefab_hash: -1898247915i32, + desc: "".into(), + name: "Railing Elegant (Type 2)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -2072792175i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "RailingIndustrial02".into(), + prefab_hash: -2072792175i32, + desc: "".into(), + name: "Railing Industrial (Type 2)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -491247370i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "RespawnPointWallMounted".into(), + prefab_hash: -491247370i32, + desc: "".into(), + name: "Respawn Point (Mounted)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + 434786784i32, + ItemLogicTemplate { + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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![ + (0u32, "None".into()), (1u32, "Follow".into()), (2u32, + "MoveToTarget".into()), (3u32, "Roam".into()), (4u32, + "Unload".into()), (5u32, "PathToTarget".into()), (6u32, + "StorageFull".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: true, + circuit_holder: true, + }, + slots: vec![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo + { name : "Programmable Chip".into(), typ : Class::ProgrammableChip }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ + : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ + : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, 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()), (6u32, 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()), (7u32, 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()), (8u32, 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()), (9u32, 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()), (10u32, 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()), (11u32, 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()), (12u32, vec![(LogicSlotType::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()), (13u32, vec![(LogicSlotType::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()), (14u32, vec![(LogicSlotType::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()), (15u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Entity".into(), typ : Class::Entity }, SlotInfo { + name : "Entity".into(), typ : Class::Entity }, SlotInfo { name : + "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo { name : + "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo { name : + "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo { name : + "Gas Canister".into(), typ : Class::GasCanister }, SlotInfo { name : + "Gas Canister".into(), typ : Class::GasCanister }, SlotInfo { name : + "Gas Canister".into(), typ : Class::GasCanister }, SlotInfo { name : + "Gas Canister".into(), typ : Class::GasCanister }, SlotInfo { name : + "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Battery" + .into(), typ : Class::Battery }, SlotInfo { name : "Battery".into(), + typ : Class::Battery }, SlotInfo { name : "Container Slot".into(), + typ : Class::None }, SlotInfo { name : "Container Slot".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : + Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, 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()), (3u32, 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()), (4u32, 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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Entity".into(), typ : Class::Entity }, SlotInfo { + name : "Entity".into(), typ : Class::Entity }, SlotInfo { name : + "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Battery" + .into(), typ : Class::Battery }, SlotInfo { name : "Battery".into(), + typ : Class::Battery }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { + name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), + typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ( + -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, + }, + slots: vec![ + SlotInfo { name : "Captain\'s Seat".into(), typ : Class::Entity }, + SlotInfo { name : "Passenger Seat Left".into(), typ : Class::Entity + }, SlotInfo { name : "Passenger Seat Right".into(), typ : + Class::Entity } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -1527229051i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StopWatch".into(), + prefab_hash: -1527229051i32, + desc: "".into(), + name: "Stop Watch".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![(0u32, "Outward".into()), (1u32, "Inward".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "".into(), typ : Class::DataDisk }] + .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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None } + ] + .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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None } + ] + .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(), + ), + ( + -463037670i32, + StructureLogicDeviceMemoryTemplate { + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None } + ] + .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, + }, + 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(), typ : "PrinterInstruction".into(), value : 6i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::ReadWrite, + memory_size: 64u32, + }, + } + .into(), + ), + ( + -2087593337i32, + StructureLogicDeviceTemplate { + 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 }, + logic: LogicInfo { + logic_slot_types: vec![(0u32, 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![(0u32, "Idle".into()), (1u32, "Active".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: true, + }, + slots: vec![ + SlotInfo { name : "Programmable Chip".into(), typ : + Class::ProgrammableChip } + ] + .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(), + ), + ( + -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 }, + 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![(0u32, "Operate".into()), (1u32, "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(), + ), + ( + 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 }, + 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![(0u32, "Operate".into()), (1u32, "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(), + ), + ( + 1811979158i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureAngledBench".into(), + prefab_hash: 1811979158i32, + desc: "".into(), + name: "Bench (Angled)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Import".into(), typ : Class::Ore }, SlotInfo { + name : "Export".into(), typ : Class::Ingot } + ] + .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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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![ + (0u32, "Idle".into()), (1u32, "Discharged".into()), (2u32, + "Discharging".into()), (3u32, "Charging".into()), (4u32, + "Charged".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo + { name : "Data Disk".into(), typ : Class::DataDisk } + ] + .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(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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![ + (0u32, "Idle".into()), (1u32, "Discharged".into()), (2u32, + "Discharging".into()), (3u32, "Charging".into()), (4u32, + "Charged".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo + { name : "Data Disk".into(), typ : Class::DataDisk } + ] + .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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None } + ] + .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(), + ), + ( + 336213101i32, + StructureLogicDeviceMemoryTemplate { + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { + name : "Export".into(), typ : Class::None } + ] + .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, + }, + 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(), typ : "PrinterInstruction".into(), value : 6i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::ReadWrite, + memory_size: 64u32, + }, + } + .into(), + ), + ( + -1672404896i32, + StructureLogicDeviceMemoryTemplate { + prefab: PrefabInfo { + prefab_name: "StructureAutomatedOven".into(), + prefab_hash: -1672404896i32, + desc: "".into(), + name: "Automated Oven".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None } + ] + .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, + }, + 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(), typ : "PrinterInstruction".into(), value : 6i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::ReadWrite, + memory_size: 64u32, + }, + } + .into(), + ), + ( + 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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + -1613497288i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBasketHoop".into(), + prefab_hash: -1613497288i32, + desc: "".into(), + name: "Basket Hoop".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -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 }, + 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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" + .into()), (5u32, "High".into()), (6u32, "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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, 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()), (2u32, 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()), (3u32, 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()), (4u32, 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![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo + { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : + "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Battery" + .into(), typ : Class::Battery }, SlotInfo { name : "Battery".into(), + typ : Class::Battery } + ] + .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(), + ), + ( + -761772413i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBatteryChargerSmall".into(), + prefab_hash: -761772413i32, + desc: "".into(), + name: "Battery Charger Small".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, 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![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo + { name : "Battery".into(), typ : Class::Battery } + ] + .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(), + ), + ( + -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 }, + 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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" + .into()), (5u32, "High".into()), (6u32, "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(), + ), + ( + -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 }, + 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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" + .into()), (5u32, "High".into()), (6u32, "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(), + ), + ( + -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 }, + 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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" + .into()), (5u32, "High".into()), (6u32, "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(), + ), + ( + -188177083i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBeacon".into(), + prefab_hash: -188177083i32, + desc: "".into(), + name: "Beacon".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, + SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } + ] + .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(), + ), + ( + 406745009i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBench1".into(), + prefab_hash: 406745009i32, + desc: "".into(), + name: "Bench (Counter Style)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, + SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } + ] + .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(), + ), + ( + -2127086069i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBench2".into(), + prefab_hash: -2127086069i32, + desc: "".into(), + name: "Bench (High Tech Style)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, + SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } + ] + .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(), + ), + ( + -164622691i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBench3".into(), + prefab_hash: -164622691i32, + desc: "".into(), + name: "Bench (Frame Style)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, + SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } + ] + .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(), + ), + ( + 1750375230i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBench4".into(), + prefab_hash: 1750375230i32, + desc: "".into(), + name: "Bench (Workbench Style)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, + SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } + ] + .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(), + ), + ( + 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 }, + 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![(0u32, "Operate".into()), (1u32, "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(), + ), + ( + 697908419i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBlockBed".into(), + prefab_hash: 697908419i32, + desc: "Description coming.".into(), + name: "Block Bed".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Bed".into(), typ : Class::Entity }] + .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(), + ), + ( + 378084505i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBlocker".into(), + prefab_hash: 378084505i32, + desc: "".into(), + name: "Blocker".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 1036015121i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableAnalysizer".into(), + prefab_hash: 1036015121i32, + desc: "".into(), + name: "Cable Analyzer".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 2393826i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableCorner3HBurnt".into(), + prefab_hash: 2393826i32, + desc: "".into(), + name: "".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -1542172466i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableCorner4".into(), + prefab_hash: -1542172466i32, + desc: "".into(), + name: "Cable (4-Way Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -177220914i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableCornerBurnt".into(), + prefab_hash: -177220914i32, + desc: "".into(), + name: "Burnt Cable (Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -39359015i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableCornerH".into(), + prefab_hash: -39359015i32, + desc: "".into(), + name: "Heavy Cable (Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 1931412811i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableCornerHBurnt".into(), + prefab_hash: 1931412811i32, + desc: "".into(), + name: "Burnt Cable (Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + 281380789i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableFuse100k".into(), + prefab_hash: 281380789i32, + desc: "".into(), + name: "Fuse (100kW)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -1103727120i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableFuse1k".into(), + prefab_hash: -1103727120i32, + desc: "".into(), + name: "Fuse (1kW)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -349716617i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableFuse50k".into(), + prefab_hash: -349716617i32, + desc: "".into(), + name: "Fuse (50kW)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -631590668i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableFuse5k".into(), + prefab_hash: -631590668i32, + desc: "".into(), + name: "Fuse (5kW)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 894390004i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableJunction5".into(), + prefab_hash: 894390004i32, + desc: "".into(), + name: "Cable (5-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -1620686196i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableJunctionBurnt".into(), + prefab_hash: -1620686196i32, + desc: "".into(), + name: "Burnt Cable (Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -341365649i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableJunctionHBurnt".into(), + prefab_hash: -341365649i32, + desc: "".into(), + name: "Burnt Cable (Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -1196981113i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableStraightBurnt".into(), + prefab_hash: -1196981113i32, + desc: "".into(), + name: "Burnt Cable (Straight)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -146200530i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableStraightH".into(), + prefab_hash: -146200530i32, + desc: "".into(), + name: "Heavy Cable (Straight)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + 2085762089i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableStraightHBurnt".into(), + prefab_hash: 2085762089i32, + desc: "".into(), + name: "Burnt Cable (Straight)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -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 }, + 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![(0u32, "Mode0".into()), (1u32, "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(), + ), + ( + -1385712131i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCapsuleTankGas".into(), + prefab_hash: -1385712131i32, + desc: "".into(), + name: "Gas Capsule Tank Small".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 1415396263i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCapsuleTankLiquid".into(), + prefab_hash: 1415396263i32, + desc: "".into(), + name: "Liquid Capsule Tank Small".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 1151864003i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCargoStorageMedium".into(), + prefab_hash: 1151864003i32, + desc: "".into(), + name: "Cargo Storage (Medium)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() + .collect()), (2u32, vec![] .into_iter().collect()), (3u32, vec![] + .into_iter().collect()), (4u32, vec![] .into_iter().collect()), + (5u32, vec![] .into_iter().collect()), (6u32, vec![] .into_iter() + .collect()), (7u32, vec![] .into_iter().collect()), (8u32, vec![] + .into_iter().collect()), (9u32, vec![] .into_iter().collect()), + (10u32, vec![] .into_iter().collect()), (11u32, vec![] + .into_iter().collect()), (12u32, vec![] .into_iter().collect()), + (13u32, vec![] .into_iter().collect()), (14u32, vec![] + .into_iter().collect()), (15u32, vec![] .into_iter().collect()), + (16u32, vec![] .into_iter().collect()), (17u32, vec![] + .into_iter().collect()), (18u32, vec![] .into_iter().collect()), + (19u32, vec![] .into_iter().collect()), (20u32, vec![] + .into_iter().collect()), (21u32, vec![] .into_iter().collect()), + (22u32, vec![] .into_iter().collect()), (23u32, vec![] + .into_iter().collect()), (24u32, vec![] .into_iter().collect()), + (25u32, vec![] .into_iter().collect()), (26u32, vec![] + .into_iter().collect()), (27u32, vec![] .into_iter().collect()), + (28u32, vec![] .into_iter().collect()), (29u32, vec![] + .into_iter().collect()), (30u32, vec![] .into_iter().collect()), + (31u32, vec![] .into_iter().collect()), (32u32, vec![] + .into_iter().collect()), (33u32, vec![] .into_iter().collect()), + (34u32, vec![] .into_iter().collect()), (35u32, vec![] + .into_iter().collect()), (36u32, vec![] .into_iter().collect()), + (37u32, vec![] .into_iter().collect()), (38u32, vec![] + .into_iter().collect()), (39u32, vec![] .into_iter().collect()), + (40u32, vec![] .into_iter().collect()), (41u32, vec![] + .into_iter().collect()), (42u32, vec![] .into_iter().collect()), + (43u32, vec![] .into_iter().collect()), (44u32, vec![] + .into_iter().collect()), (45u32, vec![] .into_iter().collect()), + (46u32, vec![] .into_iter().collect()), (47u32, vec![] + .into_iter().collect()), (48u32, vec![] .into_iter().collect()), + (49u32, vec![] .into_iter().collect()), (50u32, vec![] + .into_iter().collect()), (51u32, vec![] .into_iter().collect()), + (52u32, vec![] .into_iter().collect()), (53u32, vec![] + .into_iter().collect()), (54u32, vec![] .into_iter().collect()), + (55u32, vec![] .into_iter().collect()), (56u32, vec![] + .into_iter().collect()), (57u32, vec![] .into_iter().collect()), + (58u32, vec![] .into_iter().collect()), (59u32, vec![] + .into_iter().collect()), (60u32, vec![] .into_iter().collect()), + (61u32, vec![] .into_iter().collect()), (62u32, vec![] + .into_iter().collect()), (63u32, vec![] .into_iter().collect()), + (64u32, vec![] .into_iter().collect()), (65u32, vec![] + .into_iter().collect()), (66u32, vec![] .into_iter().collect()), + (67u32, vec![] .into_iter().collect()), (68u32, vec![] + .into_iter().collect()), (69u32, vec![] .into_iter().collect()), + (70u32, vec![] .into_iter().collect()), (71u32, vec![] + .into_iter().collect()), (72u32, vec![] .into_iter().collect()), + (73u32, vec![] .into_iter().collect()), (74u32, vec![] + .into_iter().collect()), (75u32, vec![] .into_iter().collect()), + (76u32, vec![] .into_iter().collect()), (77u32, vec![] + .into_iter().collect()), (78u32, vec![] .into_iter().collect()), + (79u32, vec![] .into_iter().collect()), (80u32, vec![] + .into_iter().collect()), (81u32, vec![] .into_iter().collect()), + (82u32, vec![] .into_iter().collect()), (83u32, vec![] + .into_iter().collect()), (84u32, vec![] .into_iter().collect()), + (85u32, vec![] .into_iter().collect()), (86u32, vec![] + .into_iter().collect()), (87u32, vec![] .into_iter().collect()), + (88u32, vec![] .into_iter().collect()), (89u32, vec![] + .into_iter().collect()), (90u32, vec![] .into_iter().collect()), + (91u32, vec![] .into_iter().collect()), (92u32, vec![] + .into_iter().collect()), (93u32, vec![] .into_iter().collect()), + (94u32, vec![] .into_iter().collect()), (95u32, vec![] + .into_iter().collect()), (96u32, vec![] .into_iter().collect()), + (97u32, vec![] .into_iter().collect()), (98u32, vec![] + .into_iter().collect()), (99u32, vec![] .into_iter().collect()), + (100u32, vec![] .into_iter().collect()), (101u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None } + ] + .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(), + ), + ( + -1493672123i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCargoStorageSmall".into(), + prefab_hash: -1493672123i32, + desc: "".into(), + name: "Cargo Storage (Small)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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()), (12u32, vec![(LogicSlotType::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()), (13u32, vec![(LogicSlotType::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()), (14u32, vec![(LogicSlotType::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()), (15u32, vec![(LogicSlotType::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()), (16u32, vec![(LogicSlotType::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()), (17u32, vec![(LogicSlotType::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()), (18u32, vec![(LogicSlotType::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()), (19u32, vec![(LogicSlotType::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()), (20u32, vec![(LogicSlotType::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()), (21u32, vec![(LogicSlotType::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()), (22u32, vec![(LogicSlotType::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()), (23u32, vec![(LogicSlotType::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()), (24u32, vec![(LogicSlotType::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()), (25u32, vec![(LogicSlotType::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()), (26u32, vec![(LogicSlotType::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()), (27u32, vec![(LogicSlotType::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()), (28u32, vec![(LogicSlotType::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()), (29u32, vec![(LogicSlotType::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()), (30u32, vec![(LogicSlotType::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()), (31u32, vec![(LogicSlotType::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()), (32u32, vec![(LogicSlotType::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()), (33u32, vec![(LogicSlotType::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()), (34u32, vec![(LogicSlotType::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()), (35u32, vec![(LogicSlotType::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()), (36u32, vec![(LogicSlotType::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()), (37u32, vec![(LogicSlotType::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()), (38u32, vec![(LogicSlotType::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()), (39u32, vec![(LogicSlotType::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()), (40u32, vec![(LogicSlotType::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()), (41u32, vec![(LogicSlotType::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()), (42u32, vec![(LogicSlotType::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()), (43u32, vec![(LogicSlotType::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()), (44u32, vec![(LogicSlotType::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()), (45u32, vec![(LogicSlotType::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()), (46u32, vec![(LogicSlotType::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()), (47u32, vec![(LogicSlotType::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()), (48u32, vec![(LogicSlotType::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()), (49u32, vec![(LogicSlotType::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()), (50u32, vec![(LogicSlotType::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()), (51u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None } + ] + .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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None } + ] + .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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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(), + ), + ( + 1944858936i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChairBacklessDouble".into(), + prefab_hash: 1944858936i32, + desc: "".into(), + name: "Chair (Backless Double)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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(), + ), + ( + 1672275150i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChairBacklessSingle".into(), + prefab_hash: 1672275150i32, + desc: "".into(), + name: "Chair (Backless Single)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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(), + ), + ( + -367720198i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChairBoothCornerLeft".into(), + prefab_hash: -367720198i32, + desc: "".into(), + name: "Chair (Booth Corner Left)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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(), + ), + ( + 1640720378i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChairBoothMiddle".into(), + prefab_hash: 1640720378i32, + desc: "".into(), + name: "Chair (Booth Middle)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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(), + ), + ( + -1152812099i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChairRectangleDouble".into(), + prefab_hash: -1152812099i32, + desc: "".into(), + name: "Chair (Rectangle Double)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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(), + ), + ( + -1425428917i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChairRectangleSingle".into(), + prefab_hash: -1425428917i32, + desc: "".into(), + name: "Chair (Rectangle Single)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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(), + ), + ( + -1245724402i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChairThickDouble".into(), + prefab_hash: -1245724402i32, + desc: "".into(), + name: "Chair (Thick Double)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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(), + ), + ( + -1510009608i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChairThickSingle".into(), + prefab_hash: -1510009608i32, + desc: "".into(), + name: "Chair (Thick Single)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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(), + ), + ( + -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 Bin".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Input".into(), typ : Class::None }] + .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(), + ), + ( + 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 }, + slots: vec![ + SlotInfo { name : "Transport Slot".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Transport Slot".into(), typ : Class::None } + ] + .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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Transport Slot".into(), typ : Class::None } + ] + .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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Transport Slot".into(), typ : Class::None } + ] + .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(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Transport Slot".into(), typ : Class::None } + ] + .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(), + ), + ( + -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 }, + slots: vec![ + SlotInfo { name : "Transport Slot".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Import".into(), typ : Class::None }] + .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(), + ), + ( + -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 }, + slots: vec![ + SlotInfo { name : "Transport Slot".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Export".into(), typ : Class::None }] + .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(), + ), + ( + 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 }, + slots: vec![ + SlotInfo { name : "Transport Slot".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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 }, + slots: vec![ + SlotInfo { name : "Transport Slot".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -1918892177i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteUmbilicalFemale".into(), + prefab_hash: -1918892177i32, + desc: "".into(), + name: "Umbilical Socket (Chute)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Transport Slot".into(), typ : Class::None } + ] + .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(), + ), + ( + -659093969i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteUmbilicalFemaleSide".into(), + prefab_hash: -659093969i32, + desc: "".into(), + name: "Umbilical Socket Angle (Chute)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Transport Slot".into(), typ : Class::None } + ] + .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(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![ + (0u32, "Left".into()), (1u32, "Center".into()), (2u32, + "Right".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Transport Slot".into(), typ : Class::None } + ] + .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(), + ), + ( + 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 }, + slots: vec![ + SlotInfo { name : "Transport Slot".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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 }, + slots: vec![ + SlotInfo { name : "Transport Slot".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -128473777i32, + StructureLogicDeviceMemoryTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCircuitHousing".into(), + prefab_hash: -128473777i32, + desc: "".into(), + name: "IC Housing".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Programmable Chip".into(), typ : + Class::ProgrammableChip } + ] + .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, + }, + memory: MemoryInfo { + instructions: None, + memory_access: MemoryAccess::ReadWrite, + memory_size: 0u32, + }, + } + .into(), + ), + ( + 1238905683i32, + StructureLogicDeviceTemplate { + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() + .collect()), (2u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None }, SlotInfo { name : + "Programmable Chip".into(), typ : Class::ProgrammableChip } + ] + .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(), + ), + ( + -1513030150i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingAngled".into(), + prefab_hash: -1513030150i32, + desc: "".into(), + name: "Composite Cladding (Angled)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -69685069i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingAngledCorner".into(), + prefab_hash: -69685069i32, + desc: "".into(), + name: "Composite Cladding (Angled Corner)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -387546514i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingAngledLong".into(), + prefab_hash: -387546514i32, + desc: "".into(), + name: "Composite Cladding (Long Angled)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 212919006i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingCylindrical".into(), + prefab_hash: 212919006i32, + desc: "".into(), + name: "Composite Cladding (Cylindrical)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 1077151132i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingCylindricalPanel".into(), + prefab_hash: 1077151132i32, + desc: "".into(), + name: "Composite Cladding (Cylindrical Panel)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 1997436771i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingPanel".into(), + prefab_hash: 1997436771i32, + desc: "".into(), + name: "Composite Cladding (Panel)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -259357734i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingRounded".into(), + prefab_hash: -259357734i32, + desc: "".into(), + name: "Composite Cladding (Rounded)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 1951525046i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingRoundedCorner".into(), + prefab_hash: 1951525046i32, + desc: "".into(), + name: "Composite Cladding (Rounded Corner)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 139107321i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingSpherical".into(), + prefab_hash: 139107321i32, + desc: "".into(), + name: "Composite Cladding (Spherical)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 534213209i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingSphericalCap".into(), + prefab_hash: 534213209i32, + desc: "".into(), + name: "Composite Cladding (Spherical Cap)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 1751355139i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingSphericalCorner".into(), + prefab_hash: 1751355139i32, + desc: "".into(), + name: "Composite Cladding (Spherical Corner)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -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 }, + 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![(0u32, "Operate".into()), (1u32, "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(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 2109695912i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeFloorGratingOpen".into(), + prefab_hash: 2109695912i32, + desc: "".into(), + name: "Composite Floor Grating Open".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 718343384i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeWall02".into(), + prefab_hash: 718343384i32, + desc: "".into(), + name: "Composite Wall (Type 2)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 1574321230i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeWall03".into(), + prefab_hash: 1574321230i32, + desc: "".into(), + name: "Composite Wall (Type 3)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -1011701267i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeWall04".into(), + prefab_hash: -1011701267i32, + desc: "".into(), + name: "Composite Wall (Type 4)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -688284639i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeWindowIron".into(), + prefab_hash: -688284639i32, + desc: "".into(), + name: "Iron Window".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -626563514i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureComputer".into(), + prefab_hash: -626563514i32, + 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" + .into(), + name: "Computer".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() + .collect()), (2u32, 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![ + SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk }, + SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk }, + SlotInfo { name : "Motherboard".into(), typ : Class::Motherboard } + ] + .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(), + ), + ( + 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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Circuit Board".into(), typ : Class::Circuitboard + }, SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk } + ] + .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(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Circuit Board".into(), typ : Class::Circuitboard + }, SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk } + ] + .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(), + ), + ( + -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 }, + 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![ + (0u32, "Default".into()), (1u32, "Percent".into()), (2u32, + "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(), + ), + ( + -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 }, + 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![ + (0u32, "Default".into()), (1u32, "Percent".into()), (2u32, + "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(), + ), + ( + -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 }, + 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![ + (0u32, "Default".into()), (1u32, "Percent".into()), (2u32, + "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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Circuit Board".into(), typ : Class::Circuitboard + }, SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk } + ] + .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(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Entity".into(), typ : Class::Entity }] + .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(), + ), + ( + -1968255729i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCornerLocker".into(), + prefab_hash: -1968255729i32, + desc: "".into(), + name: "Corner Locker".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None } + ] + .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(), + ), + ( + -733500083i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCrateMount".into(), + prefab_hash: -733500083i32, + desc: "".into(), + name: "Container Mount".into(), + }, + structure: StructureInfo { small_grid: true }, + slots: vec![ + SlotInfo { name : "Container Slot".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Bed".into(), typ : Class::Entity }] + .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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![(0u32, 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![SlotInfo { name : "Player".into(), typ : Class::Entity }] + .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(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![(0u32, 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![SlotInfo { name : "Player".into(), typ : Class::Entity }] + .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(), + ), + ( + 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 }, + 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![ + (0u32, "Default".into()), (1u32, "Horizontal".into()), (2u32, + "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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![(0u32, 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![SlotInfo { name : "Export".into(), typ : Class::None }] + .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(), + ), + ( + -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 }, + 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(), + ), + ( + 1944485013i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureDiode".into(), + prefab_hash: 1944485013i32, + desc: "".into(), + name: "LED".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 576516101i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureDiodeSlide".into(), + prefab_hash: 576516101i32, + desc: "".into(), + name: "Diode Slide".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -137465079i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureDockPortSide".into(), + prefab_hash: -137465079i32, + desc: "".into(), + name: "Dock (Port Side)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 1968371847i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureDrinkingFountain".into(), + prefab_hash: 1968371847i32, + desc: "".into(), + name: "".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -1668992663i32, + StructureLogicDeviceTemplate { + 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 }, + logic: LogicInfo { + logic_slot_types: vec![(0u32, 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![(0u32, "Idle".into()), (1u32, "Active".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: true, + }, + slots: vec![ + SlotInfo { name : "Programmable Chip".into(), typ : + Class::ProgrammableChip } + ] + .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(), + ), + ( + 1307165496i32, + StructureLogicDeviceMemoryTemplate { + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { + name : "Export".into(), typ : Class::None } + ] + .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, + }, + 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(), typ : "PrinterInstruction".into(), value : 6i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::ReadWrite, + memory_size: 64u32, + }, + } + .into(), + ), + ( + -827912235i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureElevatorLevelFront".into(), + prefab_hash: -827912235i32, + desc: "".into(), + name: "Elevator Level (Cabled)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 2060648791i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureElevatorLevelIndustrial".into(), + prefab_hash: 2060648791i32, + desc: "".into(), + name: "Elevator Level".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 826144419i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureElevatorShaft".into(), + prefab_hash: 826144419i32, + desc: "".into(), + name: "Elevator Shaft (Cabled)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 1998354978i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureElevatorShaftIndustrial".into(), + prefab_hash: 1998354978i32, + desc: "".into(), + name: "Elevator Shaft".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 1668452680i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureEmergencyButton".into(), + prefab_hash: 1668452680i32, + desc: "Description coming.".into(), + name: "Important Button".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 2035781224i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureEngineMountTypeA1".into(), + prefab_hash: 2035781224i32, + desc: "".into(), + name: "Engine Mount (Type A1)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -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 }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + 1622567418i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFairingTypeA1".into(), + prefab_hash: 1622567418i32, + desc: "".into(), + name: "Fairing (Type A1)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -104908736i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFairingTypeA2".into(), + prefab_hash: -104908736i32, + desc: "".into(), + name: "Fairing (Type A2)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -1900541738i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFairingTypeA3".into(), + prefab_hash: -1900541738i32, + desc: "".into(), + name: "Fairing (Type A3)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -348054045i32, + StructureLogicDeviceTemplate { + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() + .collect()), (2u32, 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![(0u32, "Idle".into()), (1u32, "Active".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: true, + }, + slots: vec![ + SlotInfo { name : "Gas Filter".into(), typ : Class::GasFilter }, + SlotInfo { name : "Gas Filter".into(), typ : Class::GasFilter }, + SlotInfo { name : "Programmable Chip".into(), typ : + Class::ProgrammableChip } + ] + .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(), + ), + ( + -1529819532i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFlagSmall".into(), + prefab_hash: -1529819532i32, + desc: "".into(), + name: "Small Flag".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -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 }, + 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(), + ), + ( + 839890807i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFlatBench".into(), + prefab_hash: 839890807i32, + desc: "".into(), + name: "Bench (Flat)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -1240951678i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFrameIron".into(), + prefab_hash: -1240951678i32, + desc: "".into(), + name: "Iron Frame".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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()), (12u32, vec![(LogicSlotType::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()), (13u32, vec![(LogicSlotType::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()), (14u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None } + ] + .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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None } + ] + .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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None } + ] + .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(), + ), + ( + 1033024712i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFuselageTypeA1".into(), + prefab_hash: 1033024712i32, + desc: "".into(), + name: "Fuselage (Type A1)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -1533287054i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFuselageTypeA2".into(), + prefab_hash: -1533287054i32, + desc: "".into(), + name: "Fuselage (Type A2)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 1308115015i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFuselageTypeA4".into(), + prefab_hash: 1308115015i32, + desc: "".into(), + name: "Fuselage (Type A4)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 147395155i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFuselageTypeC5".into(), + prefab_hash: 147395155i32, + desc: "".into(), + name: "Fuselage (Type C5)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 1165997963i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureGasGenerator".into(), + prefab_hash: 1165997963i32, + desc: "".into(), + name: "Gas Fuel Generator".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![ + SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } + ] + .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(), + ), + ( + -1680477930i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureGasUmbilicalFemale".into(), + prefab_hash: -1680477930i32, + desc: "".into(), + name: "Umbilical Socket (Gas)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -648683847i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureGasUmbilicalFemaleSide".into(), + prefab_hash: -648683847i32, + desc: "".into(), + name: "Umbilical Socket Angle (Gas)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -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 }, + 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![ + (0u32, "Left".into()), (1u32, "Center".into()), (2u32, + "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(), + ), + ( + -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 }, + 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![(0u32, "Operate".into()), (1u32, "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(), + ), + ( + -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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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![ + (0u32, "Idle".into()), (1u32, "Happy".into()), (2u32, + "UnHappy".into()), (3u32, "Dead".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::Plant }, SlotInfo { + name : "Export".into(), typ : Class::None }, SlotInfo { name : "Hand" + .into(), typ : Class::None } + ] + .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(), + ), + ( + 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 }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None } + ] + .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(), + ), + ( + -1888248335i32, + StructureLogicDeviceMemoryTemplate { + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { + name : "Export".into(), typ : Class::None } + ] + .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, + }, + 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(), typ : "PrinterInstruction".into(), value : 6i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::ReadWrite, + memory_size: 64u32, + }, + } + .into(), + ), + ( + 1441767298i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureHydroponicsStation".into(), + prefab_hash: 1441767298i32, + desc: "".into(), + name: "Hydroponics Station".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, 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()), (2u32, 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()), (3u32, 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()), (4u32, 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()), (5u32, 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()), (6u32, 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()), (7u32, 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![ + SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { + name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : + "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant" + .into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ + : Class::Plant }, SlotInfo { name : "Plant".into(), typ : + Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant + }, SlotInfo { name : "Plant".into(), typ : Class::Plant } + ] + .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(), + ), + ( + 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 }, + slots: vec![ + SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { + name : "Fertiliser".into(), typ : Class::Plant } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { + name : "Fertiliser".into(), typ : Class::Plant } + ] + .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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![(0u32, 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![SlotInfo { name : "Import".into(), typ : Class::Ore }] + .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(), + ), + ( + 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 }, + 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(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -31273349i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedTankConnector".into(), + prefab_hash: -31273349i32, + desc: "".into(), + name: "Insulated Tank Connector".into(), + }, + structure: StructureInfo { small_grid: true }, + slots: vec![SlotInfo { name : "".into(), typ : Class::None }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -1602030414i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedTankConnectorLiquid".into(), + prefab_hash: -1602030414i32, + desc: "".into(), + name: "Insulated Tank Connector Liquid".into(), + }, + structure: StructureInfo { small_grid: true }, + slots: vec![ + SlotInfo { name : "Portable Slot".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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 }, + 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![(0u32, "Operate".into()), (1u32, "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(), + ), + ( + 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 }, + 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![(0u32, "Operate".into()), (1u32, "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(), + ), + ( + 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 }, + 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![(0u32, "Operate".into()), (1u32, "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(), + ), + ( + -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 }, + 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![(0u32, "Operate".into()), (1u32, "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(), + ), + ( + -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 }, + 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![ + (0u32, "None".into()), (1u32, "Alarm2".into()), (2u32, + "Alarm3".into()), (3u32, "Alarm4".into()), (4u32, "Alarm5" + .into()), (5u32, "Alarm6".into()), (6u32, "Alarm7".into()), + (7u32, "Music1".into()), (8u32, "Music2".into()), (9u32, + "Music3".into()), (10u32, "Alarm8".into()), (11u32, "Alarm9" + .into()), (12u32, "Alarm10".into()), (13u32, "Alarm11" + .into()), (14u32, "Alarm12".into()), (15u32, "Danger" + .into()), (16u32, "Warning".into()), (17u32, "Alert".into()), + (18u32, "StormIncoming".into()), (19u32, "IntruderAlert" + .into()), (20u32, "Depressurising".into()), (21u32, + "Pressurising".into()), (22u32, "AirlockCycling".into()), + (23u32, "PowerLow".into()), (24u32, "SystemFailure".into()), + (25u32, "Welcome".into()), (26u32, "MalfunctionDetected" + .into()), (27u32, "HaltWhoGoesThere".into()), (28u32, + "FireFireFire".into()), (29u32, "One".into()), (30u32, "Two" + .into()), (31u32, "Three".into()), (32u32, "Four".into()), + (33u32, "Five".into()), (34u32, "Floor".into()), (35u32, + "RocketLaunching".into()), (36u32, "LiftOff".into()), (37u32, + "TraderIncoming".into()), (38u32, "TraderLanded".into()), + (39u32, "PressureHigh".into()), (40u32, "PressureLow" + .into()), (41u32, "TemperatureHigh".into()), (42u32, + "TemperatureLow".into()), (43u32, "PollutantsDetected" + .into()), (44u32, "HighCarbonDioxide".into()), (45u32, + "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(), + ), + ( + -415420281i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLadder".into(), + prefab_hash: -415420281i32, + desc: "".into(), + name: "Ladder".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + 1541734993i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLadderEnd".into(), + prefab_hash: 1541734993i32, + desc: "".into(), + name: "Ladder End".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -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 }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + -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 }, + 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![(0u32, "Operate".into()), (1u32, "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(), + ), + ( + 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 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 }, + 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(), + ), + ( + -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 }, + } + .into(), + ), + ( + 797794350i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLightLong".into(), + prefab_hash: 797794350i32, + desc: "".into(), + name: "Wall Light (Long)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 1847265835i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLightLongAngled".into(), + prefab_hash: 1847265835i32, + desc: "".into(), + name: "Wall Light (Long Angled)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 555215790i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLightLongWide".into(), + prefab_hash: 555215790i32, + desc: "".into(), + name: "Wall Light (Long Wide)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 1514476632i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLightRound".into(), + prefab_hash: 1514476632i32, + desc: "Description coming.".into(), + name: "Light Round".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 1592905386i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLightRoundAngled".into(), + prefab_hash: 1592905386i32, + desc: "Description coming.".into(), + name: "Light Round (Angled)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 1436121888i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLightRoundSmall".into(), + prefab_hash: 1436121888i32, + desc: "Description coming.".into(), + name: "Light Round (Small)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + -2113838091i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidPipeAnalyzer".into(), + prefab_hash: -2113838091i32, + desc: "".into(), + name: "Liquid Pipe Analyzer".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + -782453061i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidPipeOneWayValve".into(), + prefab_hash: -782453061i32, + 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.." + .into(), + name: "One Way Valve (Liquid)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + 1098900430i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidTankBig".into(), + prefab_hash: 1098900430i32, + desc: "".into(), + name: "Liquid Tank Big".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -1430440215i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidTankBigInsulated".into(), + prefab_hash: -1430440215i32, + desc: "".into(), + name: "Insulated Liquid Tank Big".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 1988118157i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidTankSmall".into(), + prefab_hash: 1988118157i32, + desc: "".into(), + name: "Liquid Tank Small".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 608607718i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidTankSmallInsulated".into(), + prefab_hash: 608607718i32, + desc: "".into(), + name: "Insulated Liquid Tank Small".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![ + SlotInfo { name : "Liquid Canister".into(), typ : + Class::LiquidCanister } + ] + .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(), + ), + ( + -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 }, + 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![(0u32, "Right".into()), (1u32, "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(), + ), + ( + 1734723642i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidUmbilicalFemale".into(), + prefab_hash: 1734723642i32, + desc: "".into(), + name: "Umbilical Socket (Liquid)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 1220870319i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidUmbilicalFemaleSide".into(), + prefab_hash: 1220870319i32, + desc: "".into(), + name: "Umbilical Socket Angle (Liquid)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -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 }, + 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![ + (0u32, "Left".into()), (1u32, "Center".into()), (2u32, + "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(), + ), + ( + 1849974453i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidValve".into(), + prefab_hash: 1849974453i32, + desc: "".into(), + name: "Liquid Valve".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -454028979i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidVolumePump".into(), + prefab_hash: -454028979i32, + desc: "".into(), + name: "Liquid Volume Pump".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -647164662i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLockerSmall".into(), + prefab_hash: -647164662i32, + desc: "".into(), + name: "Locker (Small)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None } + ] + .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(), + ), + ( + 264413729i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicBatchReader".into(), + prefab_hash: 264413729i32, + desc: "".into(), + name: "Batch Reader".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 436888930i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicBatchSlotReader".into(), + prefab_hash: 436888930i32, + desc: "".into(), + name: "Batch Slot Reader".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 1415443359i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicBatchWriter".into(), + prefab_hash: 1415443359i32, + desc: "".into(), + name: "Batch Writer".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 491845673i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicButton".into(), + prefab_hash: 491845673i32, + desc: "".into(), + name: "Button".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -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 }, + 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![ + (0u32, "Equals".into()), (1u32, "Greater".into()), (2u32, + "Less".into()), (3u32, "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(), + ), + ( + 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 }, + 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(), + ), + ( + 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 }, + 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![ + (0u32, "AND".into()), (1u32, "OR".into()), (2u32, "XOR" + .into()), (3u32, "NAND".into()), (4u32, "NOR".into()), (5u32, + "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(), + ), + ( + 2077593121i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicHashGen".into(), + prefab_hash: 2077593121i32, + desc: "".into(), + name: "Logic Hash Generator".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 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 }, + 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![ + (0u32, "Add".into()), (1u32, "Subtract".into()), (2u32, + "Multiply".into()), (3u32, "Divide".into()), (4u32, "Mod" + .into()), (5u32, "Atan2".into()), (6u32, "Pow".into()), + (7u32, "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(), + ), + ( + -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 }, + 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![ + (0u32, "Ceil".into()), (1u32, "Floor".into()), (2u32, "Abs" + .into()), (3u32, "Log".into()), (4u32, "Exp".into()), (5u32, + "Round".into()), (6u32, "Rand".into()), (7u32, "Sqrt" + .into()), (8u32, "Sin".into()), (9u32, "Cos".into()), (10u32, + "Tan".into()), (11u32, "Asin".into()), (12u32, "Acos" + .into()), (13u32, "Atan".into()), (14u32, "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(), + ), + ( + -851746783i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicMemory".into(), + prefab_hash: -851746783i32, + desc: "".into(), + name: "Logic Memory".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 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 }, + 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![(0u32, "Greater".into()), (1u32, "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(), + ), + ( + 2096189278i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicMirror".into(), + prefab_hash: 2096189278i32, + desc: "".into(), + name: "Logic Mirror".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -345383640i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicReader".into(), + prefab_hash: -345383640i32, + desc: "".into(), + name: "Logic Reader".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -124308857i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicReagentReader".into(), + prefab_hash: -124308857i32, + desc: "".into(), + name: "Reagent Reader".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 876108549i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicRocketDownlink".into(), + prefab_hash: 876108549i32, + desc: "".into(), + name: "Logic Rocket Downlink".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 546002924i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicRocketUplink".into(), + prefab_hash: 546002924i32, + desc: "".into(), + name: "Logic Uplink".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 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 }, + 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![ + (0u32, "Equals".into()), (1u32, "Greater".into()), (2u32, + "Less".into()), (3u32, "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(), + ), + ( + -767867194i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicSlotReader".into(), + prefab_hash: -767867194i32, + desc: "".into(), + name: "Slot Reader".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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![ + (0u32, "All".into()), (1u32, "Any".into()), (2u32, "None" + .into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None }, SlotInfo { name : + "Export 2".into(), typ : Class::None }, SlotInfo { name : "Data Disk" + .into(), typ : Class::DataDisk } + ] + .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(), typ : "SorterInstruction".into(), value : 1i64 }), + ("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(), typ : "SorterInstruction".into(), value : 2i64 }), + ("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(), typ : "SorterInstruction".into(), value : 5i64 }), + ("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(), typ : "SorterInstruction".into(), value : 4i64 }), + ("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(), typ : "SorterInstruction".into(), value : 3i64 }), + ("LimitNextExecutionByCount".into(), Instruction { + description : + "| 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 }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::ReadWrite, + memory_size: 32u32, + }, + } + .into(), + ), + ( + 1220484876i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicSwitch".into(), + prefab_hash: 1220484876i32, + desc: "".into(), + name: "Lever".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 321604921i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicSwitch2".into(), + prefab_hash: 321604921i32, + desc: "".into(), + name: "Switch".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![].into_iter().collect(), + modes: Some( + vec![(0u32, "Passive".into()), (1u32, "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(), + ), + ( + -1326019434i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicWriter".into(), + prefab_hash: -1326019434i32, + desc: "".into(), + name: "Logic Writer".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -1321250424i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicWriterSwitch".into(), + prefab_hash: -1321250424i32, + desc: "".into(), + name: "Logic Writer Switch".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -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 }, + 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![(0u32, "Operate".into()), (1u32, "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(), + ), + ( + -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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + -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 }, + 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![(0u32, "Operate".into()), (1u32, "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(), + ), + ( + -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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + -1093860567i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureMediumRocketGasFuelTank".into(), + prefab_hash: -1093860567i32, + desc: "".into(), + name: "Gas Capsule Tank Medium".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 1143639539i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureMediumRocketLiquidFuelTank".into(), + prefab_hash: 1143639539i32, + desc: "".into(), + name: "Liquid Capsule Tank Medium".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + 1898243702i32, + StructureLogicDeviceTemplate { + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![(0u32, "Idle".into()), (1u32, "Active".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: true, + }, + slots: vec![ + SlotInfo { name : "Programmable Chip".into(), typ : + Class::ProgrammableChip } + ] + .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(), + ), + ( + 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 }, + 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(), + ), + ( + -1794932560i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureOverheadShortCornerLocker".into(), + prefab_hash: -1794932560i32, + desc: "".into(), + name: "Overhead Corner Locker".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None } + ] + .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(), + ), + ( + 1468249454i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureOverheadShortLocker".into(), + prefab_hash: 1468249454i32, + desc: "".into(), + name: "Overhead Locker".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None } + ] + .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(), + ), + ( + 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 }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + 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 }, + } + .into(), + ), + ( + 1363077139i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePassiveVentInsulated".into(), + prefab_hash: 1363077139i32, + desc: "".into(), + name: "Insulated Passive Vent".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -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 }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 via a {Logic system." + .into(), + name: "Pipe Analyzer".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -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 }, + } + .into(), + ), + ( + 465816159i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeCowl".into(), + prefab_hash: 465816159i32, + desc: "".into(), + name: "Pipe Cowl".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + 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(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + 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(), + ), + ( + 1580412404i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeOneWayValve".into(), + prefab_hash: 1580412404i32, + 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" + .into(), + name: "One Way Valve (Gas)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + slots: vec![ + SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { + name : "Plant".into(), typ : Class::Plant } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 1559586682i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePlatformLadderOpen".into(), + prefab_hash: 1559586682i32, + desc: "".into(), + name: "Ladder Platform".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 989835703i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePlinth".into(), + prefab_hash: 989835703i32, + desc: "".into(), + name: "Plinth".into(), + }, + structure: StructureInfo { small_grid: true }, + slots: vec![SlotInfo { name : "".into(), typ : Class::None }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -899013427i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePortablesConnector".into(), + prefab_hash: -899013427i32, + desc: "".into(), + name: "Portables Connector".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "".into(), typ : Class::None }] + .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(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Portable Slot".into(), typ : Class::None } + ] + .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(), + ), + ( + -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 }, + 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![(0u32, "Unlinked".into()), (1u32, "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(), + ), + ( + -327468845i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePowerTransmitterOmni".into(), + prefab_hash: -327468845i32, + desc: "".into(), + name: "Power Transmitter Omni".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 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 }, + 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![(0u32, "Unlinked".into()), (1u32, "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(), + ), + ( + 101488029i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePowerUmbilicalFemale".into(), + prefab_hash: 101488029i32, + desc: "".into(), + name: "Umbilical Socket (Power)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 1922506192i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePowerUmbilicalFemaleSide".into(), + prefab_hash: 1922506192i32, + desc: "".into(), + name: "Umbilical Socket Angle (Power)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 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 }, + 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![ + (0u32, "Left".into()), (1u32, "Center".into()), (2u32, + "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(), + ), + ( + 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 }, + 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![(0u32, "Outward".into()), (1u32, "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(), + ), + ( + -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 }, + 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![(0u32, "Outward".into()), (1u32, "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(), + ), + ( + 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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + -2008706143i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePressurePlateLarge".into(), + prefab_hash: -2008706143i32, + desc: "".into(), + name: "Trigger Plate (Large)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 1269458680i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePressurePlateMedium".into(), + prefab_hash: 1269458680i32, + desc: "".into(), + name: "Trigger Plate (Medium)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -1536471028i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePressurePlateSmall".into(), + prefab_hash: -1536471028i32, + desc: "".into(), + name: "Trigger Plate (Small)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + -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 }, + } + .into(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None } + ] + .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(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() + .collect()), (2u32, vec![] .into_iter().collect()), (3u32, vec![] + .into_iter().collect()), (4u32, vec![] .into_iter().collect()), + (5u32, vec![] .into_iter().collect()), (6u32, vec![] .into_iter() + .collect()), (7u32, vec![] .into_iter().collect()), (8u32, vec![] + .into_iter().collect()), (9u32, vec![] .into_iter().collect()), + (10u32, vec![] .into_iter().collect()), (11u32, vec![] + .into_iter().collect()), (12u32, vec![] .into_iter().collect()), + (13u32, vec![] .into_iter().collect()), (14u32, vec![] + .into_iter().collect()), (15u32, vec![] .into_iter().collect()), + (16u32, vec![] .into_iter().collect()), (17u32, vec![] + .into_iter().collect()), (18u32, vec![] .into_iter().collect()), + (19u32, vec![] .into_iter().collect()), (20u32, vec![] + .into_iter().collect()), (21u32, vec![] .into_iter().collect()), + (22u32, vec![] .into_iter().collect()), (23u32, vec![] + .into_iter().collect()), (24u32, vec![] .into_iter().collect()), + (25u32, vec![] .into_iter().collect()), (26u32, vec![] + .into_iter().collect()), (27u32, vec![] .into_iter().collect()), + (28u32, vec![] .into_iter().collect()), (29u32, vec![] + .into_iter().collect()), (30u32, vec![] .into_iter().collect()), + (31u32, vec![] .into_iter().collect()), (32u32, vec![] + .into_iter().collect()), (33u32, vec![] .into_iter().collect()), + (34u32, vec![] .into_iter().collect()), (35u32, vec![] + .into_iter().collect()), (36u32, vec![] .into_iter().collect()), + (37u32, vec![] .into_iter().collect()), (38u32, vec![] + .into_iter().collect()), (39u32, vec![] .into_iter().collect()), + (40u32, vec![] .into_iter().collect()), (41u32, vec![] + .into_iter().collect()), (42u32, vec![] .into_iter().collect()), + (43u32, vec![] .into_iter().collect()), (44u32, vec![] + .into_iter().collect()), (45u32, vec![] .into_iter().collect()), + (46u32, vec![] .into_iter().collect()), (47u32, vec![] + .into_iter().collect()), (48u32, vec![] .into_iter().collect()), + (49u32, vec![] .into_iter().collect()), (50u32, vec![] + .into_iter().collect()), (51u32, vec![] .into_iter().collect()), + (52u32, vec![] .into_iter().collect()), (53u32, vec![] + .into_iter().collect()), (54u32, vec![] .into_iter().collect()), + (55u32, vec![] .into_iter().collect()), (56u32, vec![] + .into_iter().collect()), (57u32, vec![] .into_iter().collect()), + (58u32, vec![] .into_iter().collect()), (59u32, vec![] + .into_iter().collect()), (60u32, vec![] .into_iter().collect()), + (61u32, vec![] .into_iter().collect()), (62u32, vec![] + .into_iter().collect()), (63u32, vec![] .into_iter().collect()), + (64u32, vec![] .into_iter().collect()), (65u32, vec![] + .into_iter().collect()), (66u32, vec![] .into_iter().collect()), + (67u32, vec![] .into_iter().collect()), (68u32, vec![] + .into_iter().collect()), (69u32, vec![] .into_iter().collect()), + (70u32, vec![] .into_iter().collect()), (71u32, vec![] + .into_iter().collect()), (72u32, vec![] .into_iter().collect()), + (73u32, vec![] .into_iter().collect()), (74u32, vec![] + .into_iter().collect()), (75u32, vec![] .into_iter().collect()), + (76u32, vec![] .into_iter().collect()), (77u32, vec![] + .into_iter().collect()), (78u32, vec![] .into_iter().collect()), + (79u32, vec![] .into_iter().collect()), (80u32, vec![] + .into_iter().collect()), (81u32, vec![] .into_iter().collect()), + (82u32, vec![] .into_iter().collect()), (83u32, vec![] + .into_iter().collect()), (84u32, vec![] .into_iter().collect()), + (85u32, vec![] .into_iter().collect()), (86u32, vec![] + .into_iter().collect()), (87u32, vec![] .into_iter().collect()), + (88u32, vec![] .into_iter().collect()), (89u32, vec![] + .into_iter().collect()), (90u32, vec![] .into_iter().collect()), + (91u32, vec![] .into_iter().collect()), (92u32, vec![] + .into_iter().collect()), (93u32, vec![] .into_iter().collect()), + (94u32, vec![] .into_iter().collect()), (95u32, vec![] + .into_iter().collect()), (96u32, vec![] .into_iter().collect()), + (97u32, vec![] .into_iter().collect()), (98u32, vec![] + .into_iter().collect()), (99u32, vec![] .into_iter().collect()), + (100u32, vec![] .into_iter().collect()), (101u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None } + ] + .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(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 808389066i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRocketAvionics".into(), + prefab_hash: 808389066i32, + desc: "".into(), + name: "Rocket Avionics".into(), + }, + structure: StructureInfo { small_grid: true }, + 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) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0u32, "Invalid".into()), (1u32, "None".into()), (2u32, + "Mine".into()), (3u32, "Survey".into()), (4u32, "Discover" + .into()), (5u32, "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(), + ), + ( + 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 }, + 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(), typ : "CelestialTracking".into(), value : 1i64 }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::Read, + memory_size: 12u32, + }, + } + .into(), + ), + ( + 150135861i32, + StructureLogicDeviceMemoryTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRocketCircuitHousing".into(), + prefab_hash: 150135861i32, + desc: "".into(), + name: "Rocket Circuit Housing".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Programmable Chip".into(), typ : + Class::ProgrammableChip } + ] + .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, + }, + memory: MemoryInfo { + instructions: None, + memory_access: MemoryAccess::ReadWrite, + memory_size: 0u32, + }, + } + .into(), + ), + ( + 178472613i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRocketEngineTiny".into(), + prefab_hash: 178472613i32, + desc: "".into(), + name: "Rocket Engine (Tiny)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 1781051034i32, + StructureLogicDeviceMemoryTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRocketManufactory".into(), + prefab_hash: 1781051034i32, + desc: "".into(), + name: "Rocket Manufactory".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { + name : "Export".into(), typ : Class::None } + ] + .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, + }, + 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(), typ : "PrinterInstruction".into(), value : 6i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::ReadWrite, + memory_size: 64u32, + }, + } + .into(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Export".into(), typ : Class::None }, SlotInfo { + name : "Drill Head Slot".into(), typ : Class::DrillHead } + ] + .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(), + ), + ( + 2014252591i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRocketScanner".into(), + prefab_hash: 2014252591i32, + desc: "".into(), + name: "Rocket Scanner".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![(0u32, 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![ + SlotInfo { name : "Scanner Head Slot".into(), typ : + Class::ScanningHead } + ] + .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(), + ), + ( + -654619479i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRocketTower".into(), + prefab_hash: -654619479i32, + desc: "".into(), + name: "Launch Tower".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 518925193i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRocketTransformerSmall".into(), + prefab_hash: 518925193i32, + desc: "".into(), + name: "Transformer Small (Rocket)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 806513938i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRover".into(), + prefab_hash: 806513938i32, + desc: "".into(), + name: "Rover Frame".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -1875856925i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSDBHopper".into(), + prefab_hash: -1875856925i32, + desc: "".into(), + name: "SDB Hopper".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![(0u32, 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![SlotInfo { name : "Import".into(), typ : Class::None }] + .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(), + ), + ( + 467225612i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSDBHopperAdvanced".into(), + prefab_hash: 467225612i32, + desc: "".into(), + name: "SDB Hopper Advanced".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![(0u32, 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![SlotInfo { name : "Import".into(), typ : Class::None }] + .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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None } + ] + .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(), + ), + ( + 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 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 }, + 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(), + ), + ( + -641491515i32, + StructureLogicDeviceMemoryTemplate { + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { + name : "Export".into(), typ : Class::None } + ] + .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, + }, + 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(), typ : "PrinterInstruction".into(), value : 6i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::ReadWrite, + memory_size: 64u32, + }, + } + .into(), + ), + ( + 1172114950i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureShelf".into(), + prefab_hash: 1172114950i32, + desc: "".into(), + name: "Shelf".into(), + }, + structure: StructureInfo { small_grid: true }, + slots: vec![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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()), (12u32, vec![(LogicSlotType::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()), (13u32, vec![(LogicSlotType::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()), (14u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None } + ] + .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(), + ), + ( + 1330754486i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureShortCornerLocker".into(), + prefab_hash: 1330754486i32, + desc: "".into(), + name: "Short Corner Locker".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None } + ] + .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(), + ), + ( + -554553467i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureShortLocker".into(), + prefab_hash: -554553467i32, + desc: "".into(), + name: "Short Locker".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None } + ] + .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(), + ), + ( + -775128944i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureShower".into(), + prefab_hash: -775128944i32, + desc: "".into(), + name: "Shower".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -1081797501i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureShowerPowered".into(), + prefab_hash: -1081797501i32, + desc: "".into(), + name: "Shower (Powered)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 879058460i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSign1x1".into(), + prefab_hash: 879058460i32, + desc: "".into(), + name: "Sign 1x1".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 908320837i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSign2x1".into(), + prefab_hash: 908320837i32, + desc: "".into(), + name: "Sign 2x1".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -492611i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSingleBed".into(), + prefab_hash: -492611i32, + desc: "Description coming.".into(), + name: "Single Bed".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Bed".into(), typ : Class::Entity }] + .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(), + ), + ( + -1467449329i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSleeper".into(), + prefab_hash: -1467449329i32, + desc: "".into(), + name: "Sleeper".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Bed".into(), typ : Class::Entity }] + .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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![(0u32, 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![ + (0u32, "Safe".into()), (1u32, "Unsafe".into()), (2u32, + "Unpowered".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] + .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(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![(0u32, 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![ + (0u32, "Safe".into()), (1u32, "Unsafe".into()), (2u32, + "Unpowered".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] + .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(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![(0u32, 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![ + (0u32, "Safe".into()), (1u32, "Unsafe".into()), (2u32, + "Unpowered".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] + .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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![(0u32, 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![SlotInfo { name : "Player".into(), typ : Class::Entity }] + .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(), + ), + ( + 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 }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + -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 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 }, + 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(), + ), + ( + -1633000411i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSmallTableBacklessDouble".into(), + prefab_hash: -1633000411i32, + desc: "".into(), + name: "Small (Table Backless Double)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -1897221677i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSmallTableBacklessSingle".into(), + prefab_hash: -1897221677i32, + desc: "".into(), + name: "Small (Table Backless Single)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + 1260651529i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSmallTableDinnerSingle".into(), + prefab_hash: 1260651529i32, + desc: "".into(), + name: "Small (Table Dinner Single)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -660451023i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSmallTableRectangleDouble".into(), + prefab_hash: -660451023i32, + desc: "".into(), + name: "Small (Table Rectangle Double)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -924678969i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSmallTableRectangleSingle".into(), + prefab_hash: -924678969i32, + desc: "".into(), + name: "Small (Table Rectangle Single)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -19246131i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSmallTableThickDouble".into(), + prefab_hash: -19246131i32, + desc: "".into(), + name: "Small (Table Thick Double)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -291862981i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSmallTableThickSingle".into(), + prefab_hash: -291862981i32, + desc: "".into(), + name: "Small Table (Thick Single)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + 813146305i32, + StructureLogicDeviceTemplate { + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![ + (0u32, "Not Generating".into()), (1u32, "Generating".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Input".into(), typ : Class::Ore }] + .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, + }, + } + .into(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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![ + (0u32, "Split".into()), (1u32, "Filter".into()), (2u32, + "Logic".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None }, SlotInfo { name : + "Export 2".into(), typ : Class::None }, SlotInfo { name : "Data Disk" + .into(), typ : Class::DataDisk } + ] + .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(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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![(0u32, "Automatic".into()), (1u32, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None }, SlotInfo { name : + "Processing".into(), typ : Class::None } + ] + .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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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![(0u32, "Automatic".into()), (1u32, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None } + ] + .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(), + ), + ( + 1405018945i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairs4x2".into(), + prefab_hash: 1405018945i32, + desc: "".into(), + name: "Stairs".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 155214029i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairs4x2RailL".into(), + prefab_hash: 155214029i32, + desc: "".into(), + name: "Stairs with Rail (Left)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -212902482i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairs4x2RailR".into(), + prefab_hash: -212902482i32, + desc: "".into(), + name: "Stairs with Rail (Right)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -1088008720i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairs4x2Rails".into(), + prefab_hash: -1088008720i32, + desc: "".into(), + name: "Stairs with Rails".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 505924160i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairwellBackLeft".into(), + prefab_hash: 505924160i32, + desc: "".into(), + name: "Stairwell (Back Left)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -862048392i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairwellBackPassthrough".into(), + prefab_hash: -862048392i32, + desc: "".into(), + name: "Stairwell (Back Passthrough)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -2128896573i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairwellBackRight".into(), + prefab_hash: -2128896573i32, + desc: "".into(), + name: "Stairwell (Back Right)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -37454456i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairwellFrontLeft".into(), + prefab_hash: -37454456i32, + desc: "".into(), + name: "Stairwell (Front Left)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -1625452928i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairwellFrontPassthrough".into(), + prefab_hash: -1625452928i32, + desc: "".into(), + name: "Stairwell (Front Passthrough)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 340210934i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairwellFrontRight".into(), + prefab_hash: 340210934i32, + desc: "".into(), + name: "Stairwell (Front Right)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 2049879875i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairwellNoDoors".into(), + prefab_hash: 2049879875i32, + desc: "".into(), + name: "Stairwell (No Doors)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![(0u32, 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![ + SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } + ] + .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(), + ), + ( + -793623899i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStorageLocker".into(), + prefab_hash: -793623899i32, + desc: "".into(), + name: "Locker".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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()), (12u32, vec![(LogicSlotType::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()), (13u32, vec![(LogicSlotType::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()), (14u32, vec![(LogicSlotType::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()), (15u32, vec![(LogicSlotType::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()), (16u32, vec![(LogicSlotType::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()), (17u32, vec![(LogicSlotType::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()), (18u32, vec![(LogicSlotType::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()), (19u32, vec![(LogicSlotType::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()), (20u32, vec![(LogicSlotType::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()), (21u32, vec![(LogicSlotType::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()), (22u32, vec![(LogicSlotType::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()), (23u32, vec![(LogicSlotType::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()), (24u32, vec![(LogicSlotType::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()), (25u32, vec![(LogicSlotType::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()), (26u32, vec![(LogicSlotType::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()), (27u32, vec![(LogicSlotType::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()), (28u32, vec![(LogicSlotType::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()), (29u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None } + ] + .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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, 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()), (2u32, 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![ + SlotInfo { name : "Helmet".into(), typ : Class::Helmet }, SlotInfo { + name : "Suit".into(), typ : Class::Suit }, SlotInfo { name : "Back" + .into(), typ : Class::Back } + ] + .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(), + ), + ( + -1606848156i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTankBig".into(), + prefab_hash: -1606848156i32, + desc: "".into(), + name: "Large Tank".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 1280378227i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTankBigInsulated".into(), + prefab_hash: 1280378227i32, + desc: "".into(), + name: "Tank Big (Insulated)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -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 }, + slots: vec![SlotInfo { name : "".into(), typ : Class::None }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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 }, + slots: vec![ + SlotInfo { name : "Portable Slot".into(), typ : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 1013514688i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTankSmall".into(), + prefab_hash: 1013514688i32, + desc: "".into(), + name: "Small Tank".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 955744474i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTankSmallAir".into(), + prefab_hash: 955744474i32, + desc: "".into(), + name: "Small Tank (Air)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 2102454415i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTankSmallFuel".into(), + prefab_hash: 2102454415i32, + desc: "".into(), + name: "Small Tank (Fuel)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 272136332i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTankSmallInsulated".into(), + prefab_hash: 272136332i32, + desc: "".into(), + name: "Tank Small (Insulated)".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -465741100i32, + StructureLogicDeviceMemoryTemplate { + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { + name : "Export".into(), typ : Class::None } + ] + .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, + }, + 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(), typ : "PrinterInstruction".into(), value : 6i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::ReadWrite, + memory_size: 64u32, + }, + } + .into(), + ), + ( + 1473807953i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTorpedoRack".into(), + prefab_hash: 1473807953i32, + desc: "".into(), + name: "Torpedo Rack".into(), + }, + structure: StructureInfo { small_grid: true }, + slots: vec![ + SlotInfo { name : "Torpedo".into(), typ : Class::Torpedo }, SlotInfo + { name : "Torpedo".into(), typ : Class::Torpedo }, SlotInfo { name : + "Torpedo".into(), typ : Class::Torpedo }, SlotInfo { name : "Torpedo" + .into(), typ : Class::Torpedo }, SlotInfo { name : "Torpedo".into(), + typ : Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ : + Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ : + Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ : + Class::Torpedo } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 1570931620i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTraderWaypoint".into(), + prefab_hash: 1570931620i32, + desc: "".into(), + name: "Trader Waypoint".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + -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 }, + 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(), + ), + ( + 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 }, + 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(), + ), + ( + 1282191063i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTurbineGenerator".into(), + prefab_hash: 1282191063i32, + desc: "".into(), + name: "Turbine Generator".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 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 }, + 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![(0u32, "Right".into()), (1u32, "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(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![(0u32, "Automatic".into()), (1u32, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None } + ] + .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(), + ), + ( + 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 }, + 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(), + ), + ( + -692036078i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureValve".into(), + prefab_hash: -692036078i32, + desc: "".into(), + name: "Valve".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() + .collect()), (2u32, vec![] .into_iter().collect()), (3u32, vec![] + .into_iter().collect()), (4u32, vec![] .into_iter().collect()), + (5u32, vec![] .into_iter().collect()), (6u32, vec![] .into_iter() + .collect()), (7u32, vec![] .into_iter().collect()), (8u32, vec![] + .into_iter().collect()), (9u32, vec![] .into_iter().collect()), + (10u32, vec![] .into_iter().collect()), (11u32, vec![] + .into_iter().collect()), (12u32, vec![] .into_iter().collect()), + (13u32, vec![] .into_iter().collect()), (14u32, vec![] + .into_iter().collect()), (15u32, vec![] .into_iter().collect()), + (16u32, vec![] .into_iter().collect()), (17u32, vec![] + .into_iter().collect()), (18u32, vec![] .into_iter().collect()), + (19u32, vec![] .into_iter().collect()), (20u32, vec![] + .into_iter().collect()), (21u32, vec![] .into_iter().collect()), + (22u32, vec![] .into_iter().collect()), (23u32, vec![] + .into_iter().collect()), (24u32, vec![] .into_iter().collect()), + (25u32, vec![] .into_iter().collect()), (26u32, vec![] + .into_iter().collect()), (27u32, vec![] .into_iter().collect()), + (28u32, vec![] .into_iter().collect()), (29u32, vec![] + .into_iter().collect()), (30u32, vec![] .into_iter().collect()), + (31u32, vec![] .into_iter().collect()), (32u32, vec![] + .into_iter().collect()), (33u32, vec![] .into_iter().collect()), + (34u32, vec![] .into_iter().collect()), (35u32, vec![] + .into_iter().collect()), (36u32, vec![] .into_iter().collect()), + (37u32, vec![] .into_iter().collect()), (38u32, vec![] + .into_iter().collect()), (39u32, vec![] .into_iter().collect()), + (40u32, vec![] .into_iter().collect()), (41u32, vec![] + .into_iter().collect()), (42u32, vec![] .into_iter().collect()), + (43u32, vec![] .into_iter().collect()), (44u32, vec![] + .into_iter().collect()), (45u32, vec![] .into_iter().collect()), + (46u32, vec![] .into_iter().collect()), (47u32, vec![] + .into_iter().collect()), (48u32, vec![] .into_iter().collect()), + (49u32, vec![] .into_iter().collect()), (50u32, vec![] + .into_iter().collect()), (51u32, vec![] .into_iter().collect()), + (52u32, vec![] .into_iter().collect()), (53u32, vec![] + .into_iter().collect()), (54u32, vec![] .into_iter().collect()), + (55u32, vec![] .into_iter().collect()), (56u32, vec![] + .into_iter().collect()), (57u32, vec![] .into_iter().collect()), + (58u32, vec![] .into_iter().collect()), (59u32, vec![] + .into_iter().collect()), (60u32, vec![] .into_iter().collect()), + (61u32, vec![] .into_iter().collect()), (62u32, vec![] + .into_iter().collect()), (63u32, vec![] .into_iter().collect()), + (64u32, vec![] .into_iter().collect()), (65u32, vec![] + .into_iter().collect()), (66u32, vec![] .into_iter().collect()), + (67u32, vec![] .into_iter().collect()), (68u32, vec![] + .into_iter().collect()), (69u32, vec![] .into_iter().collect()), + (70u32, vec![] .into_iter().collect()), (71u32, vec![] + .into_iter().collect()), (72u32, vec![] .into_iter().collect()), + (73u32, vec![] .into_iter().collect()), (74u32, vec![] + .into_iter().collect()), (75u32, vec![] .into_iter().collect()), + (76u32, vec![] .into_iter().collect()), (77u32, vec![] + .into_iter().collect()), (78u32, vec![] .into_iter().collect()), + (79u32, vec![] .into_iter().collect()), (80u32, vec![] + .into_iter().collect()), (81u32, vec![] .into_iter().collect()), + (82u32, vec![] .into_iter().collect()), (83u32, vec![] + .into_iter().collect()), (84u32, vec![] .into_iter().collect()), + (85u32, vec![] .into_iter().collect()), (86u32, vec![] + .into_iter().collect()), (87u32, vec![] .into_iter().collect()), + (88u32, vec![] .into_iter().collect()), (89u32, vec![] + .into_iter().collect()), (90u32, vec![] .into_iter().collect()), + (91u32, vec![] .into_iter().collect()), (92u32, vec![] + .into_iter().collect()), (93u32, vec![] .into_iter().collect()), + (94u32, vec![] .into_iter().collect()), (95u32, vec![] + .into_iter().collect()), (96u32, vec![] .into_iter().collect()), + (97u32, vec![] .into_iter().collect()), (98u32, vec![] + .into_iter().collect()), (99u32, vec![] .into_iter().collect()), + (100u32, vec![] .into_iter().collect()), (101u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { + name : "Export".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ + : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None + }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo + { name : "Storage".into(), typ : Class::None }, SlotInfo { name : + "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None } + ] + .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(), + ), + ( + -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 }, + 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(), + ), + ( + -858143148i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallArch".into(), + prefab_hash: -858143148i32, + desc: "".into(), + name: "Wall (Arch)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 1649708822i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallArchArrow".into(), + prefab_hash: 1649708822i32, + desc: "".into(), + name: "Wall (Arch Arrow)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 1794588890i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallArchCornerRound".into(), + prefab_hash: 1794588890i32, + desc: "".into(), + name: "Wall (Arch Corner Round)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -1963016580i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallArchCornerSquare".into(), + prefab_hash: -1963016580i32, + desc: "".into(), + name: "Wall (Arch Corner Square)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + 1281911841i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallArchCornerTriangle".into(), + prefab_hash: 1281911841i32, + desc: "".into(), + name: "Wall (Arch Corner Triangle)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + 1182510648i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallArchPlating".into(), + prefab_hash: 1182510648i32, + desc: "".into(), + name: "Wall (Arch Plating)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 782529714i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallArchTwoTone".into(), + prefab_hash: 782529714i32, + desc: "".into(), + name: "Wall (Arch Two Tone)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "".into(), typ : Class::DataDisk }] + .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(), + ), + ( + 1635864154i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallFlat".into(), + prefab_hash: 1635864154i32, + desc: "".into(), + name: "Wall (Flat)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 898708250i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallFlatCornerRound".into(), + prefab_hash: 898708250i32, + desc: "".into(), + name: "Wall (Flat Corner Round)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + 298130111i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallFlatCornerSquare".into(), + prefab_hash: 298130111i32, + desc: "".into(), + name: "Wall (Flat Corner Square)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + 2097419366i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallFlatCornerTriangle".into(), + prefab_hash: 2097419366i32, + desc: "".into(), + name: "Wall (Flat Corner Triangle)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 1979212240i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallGeometryCorner".into(), + prefab_hash: 1979212240i32, + desc: "".into(), + name: "Wall (Geometry Corner)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 1049735537i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallGeometryStreight".into(), + prefab_hash: 1049735537i32, + desc: "".into(), + name: "Wall (Geometry Straight)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 1602758612i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallGeometryT".into(), + prefab_hash: 1602758612i32, + desc: "".into(), + name: "Wall (Geometry T)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -1427845483i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallGeometryTMirrored".into(), + prefab_hash: -1427845483i32, + desc: "".into(), + name: "Wall (Geometry T Mirrored)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 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 }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "".into(), typ : Class::DataDisk }] + .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(), + ), + ( + 1287324802i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallIron".into(), + prefab_hash: 1287324802i32, + desc: "".into(), + name: "Iron Wall (Type 1)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 1485834215i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallIron02".into(), + prefab_hash: 1485834215i32, + desc: "".into(), + name: "Iron Wall (Type 2)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 798439281i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallIron03".into(), + prefab_hash: 798439281i32, + desc: "".into(), + name: "Iron Wall (Type 3)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -1309433134i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallIron04".into(), + prefab_hash: -1309433134i32, + desc: "".into(), + name: "Iron Wall (Type 4)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 1492930217i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallLargePanel".into(), + prefab_hash: 1492930217i32, + desc: "".into(), + name: "Wall (Large Panel)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -776581573i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallLargePanelArrow".into(), + prefab_hash: -776581573i32, + desc: "".into(), + name: "Wall (Large Panel Arrow)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -1860064656i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallLight".into(), + prefab_hash: -1860064656i32, + desc: "".into(), + name: "Wall Light".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + -1306415132i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallLightBattery".into(), + prefab_hash: -1306415132i32, + desc: "".into(), + name: "Wall Light (Battery)".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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(), + ), + ( + 1590330637i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddedArch".into(), + prefab_hash: 1590330637i32, + desc: "".into(), + name: "Wall (Padded Arch)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -1126688298i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddedArchCorner".into(), + prefab_hash: -1126688298i32, + desc: "".into(), + name: "Wall (Padded Arch Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -155945899i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddedCorner".into(), + prefab_hash: -155945899i32, + desc: "".into(), + name: "Wall (Padded Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + 1183203913i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddedCornerThin".into(), + prefab_hash: 1183203913i32, + desc: "".into(), + name: "Wall (Padded Corner Thin)".into(), + }, + structure: StructureInfo { small_grid: true }, + } + .into(), + ), + ( + 8846501i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddedNoBorder".into(), + prefab_hash: 8846501i32, + desc: "".into(), + name: "Wall (Padded No Border)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + 2087628940i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddedWindow".into(), + prefab_hash: 2087628940i32, + desc: "".into(), + name: "Wall (Padded Window)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -37302931i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddedWindowThin".into(), + prefab_hash: -37302931i32, + desc: "".into(), + name: "Wall (Padded Window Thin)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 635995024i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPadding".into(), + prefab_hash: 635995024i32, + desc: "".into(), + name: "Wall (Padding)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -1243329828i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddingArchVent".into(), + prefab_hash: -1243329828i32, + desc: "".into(), + name: "Wall (Padding Arch Vent)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 2024882687i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddingLightFitting".into(), + prefab_hash: 2024882687i32, + desc: "".into(), + name: "Wall (Padding Light Fitting)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + -1102403554i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddingThin".into(), + prefab_hash: -1102403554i32, + desc: "".into(), + name: "Wall (Padding Thin)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 26167457i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPlating".into(), + prefab_hash: 26167457i32, + desc: "".into(), + name: "Wall (Plating)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -639306697i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallSmallPanelsArrow".into(), + prefab_hash: -639306697i32, + desc: "".into(), + name: "Wall (Small Panels Arrow)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -1407480603i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallSmallPanelsOpen".into(), + prefab_hash: -1407480603i32, + desc: "".into(), + name: "Wall (Small Panels Open)".into(), + }, + structure: StructureInfo { small_grid: false }, + } + .into(), + ), + ( + 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 }, + } + .into(), + ), + ( + -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 }, + } + .into(), + ), + ( + -1178961954i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWaterBottleFiller".into(), + prefab_hash: -1178961954i32, + desc: "".into(), + name: "Water Bottle Filler".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, 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![ + SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, + SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } + ] + .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(), + ), + ( + 1433754995i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWaterBottleFillerBottom".into(), + prefab_hash: 1433754995i32, + desc: "".into(), + name: "Water Bottle Filler Bottom".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, 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![ + SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, + SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } + ] + .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(), + ), + ( + -756587791i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWaterBottleFillerPowered".into(), + prefab_hash: -756587791i32, + desc: "".into(), + name: "Waterbottle Filler".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, 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![ + SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, + SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } + ] + .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(), + ), + ( + 1986658780i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWaterBottleFillerPoweredBottom".into(), + prefab_hash: 1986658780i32, + desc: "".into(), + name: "Waterbottle Filler".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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()), (1u32, 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![ + SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, + SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } + ] + .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(), + ), + ( + -517628750i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWaterDigitalValve".into(), + prefab_hash: -517628750i32, + desc: "".into(), + name: "Liquid Digital Valve".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 433184168i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWaterPipeMeter".into(), + prefab_hash: 433184168i32, + desc: "".into(), + name: "Liquid Pipe Meter".into(), + }, + structure: StructureInfo { small_grid: true }, + 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(), + ), + ( + 887383294i32, + StructureLogicDeviceTemplate { + 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 }, + logic: LogicInfo { + logic_slot_types: vec![(0u32, 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![SlotInfo { name : "Import".into(), typ : Class::Ore }] + .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, + }, + } + .into(), + ), + ( + -1369060582i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWaterWallCooler".into(), + prefab_hash: -1369060582i32, + desc: "".into(), + name: "Liquid Wall Cooler".into(), + }, + structure: StructureInfo { small_grid: true }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "".into(), typ : Class::DataDisk }] + .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(), + ), + ( + 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 }, + 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![ + (0u32, "NoStorm".into()), (1u32, "StormIncoming".into()), + (2u32, "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(), + ), + ( + -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 }, + 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(), + ), + ( + 2056377335i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWindowShutter".into(), + prefab_hash: 2056377335i32, + 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." + .into(), + name: "Window Shutter".into(), + }, + structure: StructureInfo { small_grid: true }, + 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::Error, MemoryAccess::Read), + (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![(0u32, "Operate".into()), (1u32, "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: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + 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, + }, + } + .into(), + ), + ( + -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, + }, + slots: vec![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "Access Card" + .into(), typ : Class::AccessCard }, SlotInfo { name : "Access Card" + .into(), typ : Class::AccessCard }, SlotInfo { name : "Credit Card" + .into(), typ : Class::CreditCard } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + slots: vec![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "Access Card" + .into(), typ : Class::AccessCard }, SlotInfo { name : "Credit Card" + .into(), typ : Class::CreditCard } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + slots: vec![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : "Access Card" + .into(), typ : Class::AccessCard }, SlotInfo { name : "Credit Card" + .into(), typ : Class::CreditCard } + ] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![(0u32, "Stun".into()), (1u32, "Kill".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + 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, + }, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, 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![(0u32, "Stun".into()), (1u32, "Kill".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .into_iter() + .collect(), + } + .into(), + ), + ( + -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, + }, + } + .into(), + ), + ]) +} diff --git a/ic10emu/src/vm/enums/basic_enums.rs b/stationeers_data/src/enums/basic_enums.rs similarity index 56% rename from ic10emu/src/vm/enums/basic_enums.rs rename to stationeers_data/src/enums/basic_enums.rs index 9c55dfa..53b0e13 100644 --- a/ic10emu/src/vm/enums/basic_enums.rs +++ b/stationeers_data/src/enums/basic_enums.rs @@ -1,17 +1,6 @@ -// ================================================= -// !! <-----> DO NOT MODIFY <-----> !! -// -// This module was automatically generated by an -// xtask -// -// run `cargo xtask generate` from the workspace -// to regenerate -// -// ================================================= - -use crate::vm::enums::script_enums::{LogicSlotType, LogicType}; use serde_derive::{Deserialize, Serialize}; use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; +use super::script_enums::{LogicSlotType, LogicType}; #[derive( Debug, Display, @@ -28,19 +17,38 @@ use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; EnumIter, FromRepr, Serialize, - Deserialize, + Deserialize )] #[strum(use_phf)] #[repr(u8)] pub enum AirConditioningMode { - #[strum(serialize = "Cold", props(docs = r#""#, value = "0"))] + #[strum(serialize = "Cold")] + #[strum(props(docs = "", value = "0"))] Cold = 0u8, - #[strum(serialize = "Hot", props(docs = r#""#, value = "1"))] + #[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( - Debug, Default, + Debug, Display, Clone, Copy, @@ -55,21 +63,40 @@ pub enum AirConditioningMode { EnumIter, FromRepr, Serialize, - Deserialize, + Deserialize )] #[strum(use_phf)] #[repr(u8)] pub enum AirControlMode { - #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + #[strum(serialize = "None")] + #[strum(props(docs = "", value = "0"))] #[default] None = 0u8, - #[strum(serialize = "Offline", props(docs = r#""#, value = "1"))] + #[strum(serialize = "Offline")] + #[strum(props(docs = "", value = "1"))] Offline = 1u8, - #[strum(serialize = "Pressure", props(docs = r#""#, value = "2"))] + #[strum(serialize = "Pressure")] + #[strum(props(docs = "", value = "2"))] Pressure = 2u8, - #[strum(serialize = "Draught", props(docs = r#""#, value = "4"))] + #[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, @@ -86,39 +113,66 @@ pub enum AirControlMode { EnumIter, FromRepr, Serialize, - Deserialize, + Deserialize )] #[strum(use_phf)] #[repr(u8)] pub enum ColorType { - #[strum(serialize = "Blue", props(docs = r#""#, value = "0"))] + #[strum(serialize = "Blue")] + #[strum(props(docs = "", value = "0"))] Blue = 0u8, - #[strum(serialize = "Gray", props(docs = r#""#, value = "1"))] + #[strum(serialize = "Gray")] + #[strum(props(docs = "", value = "1"))] Gray = 1u8, - #[strum(serialize = "Green", props(docs = r#""#, value = "2"))] + #[strum(serialize = "Green")] + #[strum(props(docs = "", value = "2"))] Green = 2u8, - #[strum(serialize = "Orange", props(docs = r#""#, value = "3"))] + #[strum(serialize = "Orange")] + #[strum(props(docs = "", value = "3"))] Orange = 3u8, - #[strum(serialize = "Red", props(docs = r#""#, value = "4"))] + #[strum(serialize = "Red")] + #[strum(props(docs = "", value = "4"))] Red = 4u8, - #[strum(serialize = "Yellow", props(docs = r#""#, value = "5"))] + #[strum(serialize = "Yellow")] + #[strum(props(docs = "", value = "5"))] Yellow = 5u8, - #[strum(serialize = "White", props(docs = r#""#, value = "6"))] + #[strum(serialize = "White")] + #[strum(props(docs = "", value = "6"))] White = 6u8, - #[strum(serialize = "Black", props(docs = r#""#, value = "7"))] + #[strum(serialize = "Black")] + #[strum(props(docs = "", value = "7"))] Black = 7u8, - #[strum(serialize = "Brown", props(docs = r#""#, value = "8"))] + #[strum(serialize = "Brown")] + #[strum(props(docs = "", value = "8"))] Brown = 8u8, - #[strum(serialize = "Khaki", props(docs = r#""#, value = "9"))] + #[strum(serialize = "Khaki")] + #[strum(props(docs = "", value = "9"))] Khaki = 9u8, - #[strum(serialize = "Pink", props(docs = r#""#, value = "10"))] + #[strum(serialize = "Pink")] + #[strum(props(docs = "", value = "10"))] Pink = 10u8, - #[strum(serialize = "Purple", props(docs = r#""#, value = "11"))] + #[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( - Debug, Default, + Debug, Display, Clone, Copy, @@ -133,19 +187,39 @@ pub enum ColorType { EnumIter, FromRepr, Serialize, - Deserialize, + Deserialize )] #[strum(use_phf)] #[repr(u8)] pub enum DaylightSensorMode { - #[strum(serialize = "Default", props(docs = r#""#, value = "0"))] + #[strum(serialize = "Default")] + #[strum(props(docs = "", value = "0"))] #[default] Default = 0u8, - #[strum(serialize = "Horizontal", props(docs = r#""#, value = "1"))] + #[strum(serialize = "Horizontal")] + #[strum(props(docs = "", value = "1"))] Horizontal = 1u8, - #[strum(serialize = "Vertical", props(docs = r#""#, value = "2"))] + #[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, @@ -162,18 +236,36 @@ pub enum DaylightSensorMode { EnumIter, FromRepr, Serialize, - Deserialize, + Deserialize )] #[strum(use_phf)] #[repr(u8)] pub enum ElevatorMode { - #[strum(serialize = "Stationary", props(docs = r#""#, value = "0"))] + #[strum(serialize = "Stationary")] + #[strum(props(docs = "", value = "0"))] Stationary = 0u8, - #[strum(serialize = "Upward", props(docs = r#""#, value = "1"))] + #[strum(serialize = "Upward")] + #[strum(props(docs = "", value = "1"))] Upward = 1u8, - #[strum(serialize = "Downward", props(docs = r#""#, value = "2"))] + #[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, @@ -190,20 +282,39 @@ pub enum ElevatorMode { EnumIter, FromRepr, Serialize, - Deserialize, + Deserialize )] #[strum(use_phf)] #[repr(u8)] pub enum EntityState { - #[strum(serialize = "Alive", props(docs = r#""#, value = "0"))] + #[strum(serialize = "Alive")] + #[strum(props(docs = "", value = "0"))] Alive = 0u8, - #[strum(serialize = "Dead", props(docs = r#""#, value = "1"))] + #[strum(serialize = "Dead")] + #[strum(props(docs = "", value = "1"))] Dead = 1u8, - #[strum(serialize = "Unconscious", props(docs = r#""#, value = "2"))] + #[strum(serialize = "Unconscious")] + #[strum(props(docs = "", value = "2"))] Unconscious = 2u8, - #[strum(serialize = "Decay", props(docs = r#""#, value = "3"))] + #[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, @@ -220,48 +331,81 @@ pub enum EntityState { EnumIter, FromRepr, Serialize, - Deserialize, + Deserialize )] #[strum(use_phf)] #[repr(u32)] pub enum GasType { - #[strum(serialize = "Undefined", props(docs = r#""#, value = "0"))] + #[strum(serialize = "Undefined")] + #[strum(props(docs = "", value = "0"))] Undefined = 0u32, - #[strum(serialize = "Oxygen", props(docs = r#""#, value = "1"))] + #[strum(serialize = "Oxygen")] + #[strum(props(docs = "", value = "1"))] Oxygen = 1u32, - #[strum(serialize = "Nitrogen", props(docs = r#""#, value = "2"))] + #[strum(serialize = "Nitrogen")] + #[strum(props(docs = "", value = "2"))] Nitrogen = 2u32, - #[strum(serialize = "CarbonDioxide", props(docs = r#""#, value = "4"))] + #[strum(serialize = "CarbonDioxide")] + #[strum(props(docs = "", value = "4"))] CarbonDioxide = 4u32, - #[strum(serialize = "Volatiles", props(docs = r#""#, value = "8"))] + #[strum(serialize = "Volatiles")] + #[strum(props(docs = "", value = "8"))] Volatiles = 8u32, - #[strum(serialize = "Pollutant", props(docs = r#""#, value = "16"))] + #[strum(serialize = "Pollutant")] + #[strum(props(docs = "", value = "16"))] Pollutant = 16u32, - #[strum(serialize = "Water", props(docs = r#""#, value = "32"))] + #[strum(serialize = "Water")] + #[strum(props(docs = "", value = "32"))] Water = 32u32, - #[strum(serialize = "NitrousOxide", props(docs = r#""#, value = "64"))] + #[strum(serialize = "NitrousOxide")] + #[strum(props(docs = "", value = "64"))] NitrousOxide = 64u32, - #[strum(serialize = "LiquidNitrogen", props(docs = r#""#, value = "128"))] + #[strum(serialize = "LiquidNitrogen")] + #[strum(props(docs = "", value = "128"))] LiquidNitrogen = 128u32, - #[strum(serialize = "LiquidOxygen", props(docs = r#""#, value = "256"))] + #[strum(serialize = "LiquidOxygen")] + #[strum(props(docs = "", value = "256"))] LiquidOxygen = 256u32, - #[strum(serialize = "LiquidVolatiles", props(docs = r#""#, value = "512"))] + #[strum(serialize = "LiquidVolatiles")] + #[strum(props(docs = "", value = "512"))] LiquidVolatiles = 512u32, - #[strum(serialize = "Steam", props(docs = r#""#, value = "1024"))] + #[strum(serialize = "Steam")] + #[strum(props(docs = "", value = "1024"))] Steam = 1024u32, - #[strum(serialize = "LiquidCarbonDioxide", props(docs = r#""#, value = "2048"))] + #[strum(serialize = "LiquidCarbonDioxide")] + #[strum(props(docs = "", value = "2048"))] LiquidCarbonDioxide = 2048u32, - #[strum(serialize = "LiquidPollutant", props(docs = r#""#, value = "4096"))] + #[strum(serialize = "LiquidPollutant")] + #[strum(props(docs = "", value = "4096"))] LiquidPollutant = 4096u32, - #[strum(serialize = "LiquidNitrousOxide", props(docs = r#""#, value = "8192"))] + #[strum(serialize = "LiquidNitrousOxide")] + #[strum(props(docs = "", value = "8192"))] LiquidNitrousOxide = 8192u32, - #[strum(serialize = "Hydrogen", props(docs = r#""#, value = "16384"))] + #[strum(serialize = "Hydrogen")] + #[strum(props(docs = "", value = "16384"))] Hydrogen = 16384u32, - #[strum(serialize = "LiquidHydrogen", props(docs = r#""#, value = "32768"))] + #[strum(serialize = "LiquidHydrogen")] + #[strum(props(docs = "", value = "32768"))] LiquidHydrogen = 32768u32, - #[strum(serialize = "PollutedWater", props(docs = r#""#, value = "65536"))] + #[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, @@ -278,25 +422,45 @@ pub enum GasType { EnumIter, FromRepr, Serialize, - Deserialize, + Deserialize )] #[strum(use_phf)] #[repr(u8)] pub enum PowerMode { - #[strum(serialize = "Idle", props(docs = r#""#, value = "0"))] + #[strum(serialize = "Idle")] + #[strum(props(docs = "", value = "0"))] Idle = 0u8, - #[strum(serialize = "Discharged", props(docs = r#""#, value = "1"))] + #[strum(serialize = "Discharged")] + #[strum(props(docs = "", value = "1"))] Discharged = 1u8, - #[strum(serialize = "Discharging", props(docs = r#""#, value = "2"))] + #[strum(serialize = "Discharging")] + #[strum(props(docs = "", value = "2"))] Discharging = 2u8, - #[strum(serialize = "Charging", props(docs = r#""#, value = "3"))] + #[strum(serialize = "Charging")] + #[strum(props(docs = "", value = "3"))] Charging = 3u8, - #[strum(serialize = "Charged", props(docs = r#""#, value = "4"))] + #[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( - Debug, Default, + Debug, Display, Clone, Copy, @@ -311,36 +475,63 @@ pub enum PowerMode { EnumIter, FromRepr, Serialize, - Deserialize, + Deserialize )] #[strum(use_phf)] #[repr(u8)] pub enum PrinterInstruction { - #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + #[strum(serialize = "None")] + #[strum(props(docs = "", value = "0"))] #[default] None = 0u8, - #[strum(serialize = "StackPointer", props(docs = r#""#, value = "1"))] + #[strum(serialize = "StackPointer")] + #[strum(props(docs = "", value = "1"))] StackPointer = 1u8, - #[strum(serialize = "ExecuteRecipe", props(docs = r#""#, value = "2"))] + #[strum(serialize = "ExecuteRecipe")] + #[strum(props(docs = "", value = "2"))] ExecuteRecipe = 2u8, - #[strum(serialize = "WaitUntilNextValid", props(docs = r#""#, value = "3"))] + #[strum(serialize = "WaitUntilNextValid")] + #[strum(props(docs = "", value = "3"))] WaitUntilNextValid = 3u8, - #[strum(serialize = "JumpIfNextInvalid", props(docs = r#""#, value = "4"))] + #[strum(serialize = "JumpIfNextInvalid")] + #[strum(props(docs = "", value = "4"))] JumpIfNextInvalid = 4u8, - #[strum(serialize = "JumpToAddress", props(docs = r#""#, value = "5"))] + #[strum(serialize = "JumpToAddress")] + #[strum(props(docs = "", value = "5"))] JumpToAddress = 5u8, - #[strum(serialize = "DeviceSetLock", props(docs = r#""#, value = "6"))] + #[strum(serialize = "DeviceSetLock")] + #[strum(props(docs = "", value = "6"))] DeviceSetLock = 6u8, - #[strum(serialize = "EjectReagent", props(docs = r#""#, value = "7"))] + #[strum(serialize = "EjectReagent")] + #[strum(props(docs = "", value = "7"))] EjectReagent = 7u8, - #[strum(serialize = "EjectAllReagents", props(docs = r#""#, value = "8"))] + #[strum(serialize = "EjectAllReagents")] + #[strum(props(docs = "", value = "8"))] EjectAllReagents = 8u8, - #[strum(serialize = "MissingRecipeReagent", props(docs = r#""#, value = "9"))] + #[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( - Debug, Default, + Debug, Display, Clone, Copy, @@ -355,26 +546,46 @@ pub enum PrinterInstruction { EnumIter, FromRepr, Serialize, - Deserialize, + Deserialize )] #[strum(use_phf)] #[repr(u8)] pub enum ReEntryProfile { - #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + #[strum(serialize = "None")] + #[strum(props(docs = "", value = "0"))] #[default] None = 0u8, - #[strum(serialize = "Optimal", props(docs = r#""#, value = "1"))] + #[strum(serialize = "Optimal")] + #[strum(props(docs = "", value = "1"))] Optimal = 1u8, - #[strum(serialize = "Medium", props(docs = r#""#, value = "2"))] + #[strum(serialize = "Medium")] + #[strum(props(docs = "", value = "2"))] Medium = 2u8, - #[strum(serialize = "High", props(docs = r#""#, value = "3"))] + #[strum(serialize = "High")] + #[strum(props(docs = "", value = "3"))] High = 3u8, - #[strum(serialize = "Max", props(docs = r#""#, value = "4"))] + #[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( - Debug, Default, + Debug, Display, Clone, Copy, @@ -389,30 +600,52 @@ pub enum ReEntryProfile { EnumIter, FromRepr, Serialize, - Deserialize, + Deserialize )] #[strum(use_phf)] #[repr(u8)] pub enum RobotMode { - #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + #[strum(serialize = "None")] + #[strum(props(docs = "", value = "0"))] #[default] None = 0u8, - #[strum(serialize = "Follow", props(docs = r#""#, value = "1"))] + #[strum(serialize = "Follow")] + #[strum(props(docs = "", value = "1"))] Follow = 1u8, - #[strum(serialize = "MoveToTarget", props(docs = r#""#, value = "2"))] + #[strum(serialize = "MoveToTarget")] + #[strum(props(docs = "", value = "2"))] MoveToTarget = 2u8, - #[strum(serialize = "Roam", props(docs = r#""#, value = "3"))] + #[strum(serialize = "Roam")] + #[strum(props(docs = "", value = "3"))] Roam = 3u8, - #[strum(serialize = "Unload", props(docs = r#""#, value = "4"))] + #[strum(serialize = "Unload")] + #[strum(props(docs = "", value = "4"))] Unload = 4u8, - #[strum(serialize = "PathToTarget", props(docs = r#""#, value = "5"))] + #[strum(serialize = "PathToTarget")] + #[strum(props(docs = "", value = "5"))] PathToTarget = 5u8, - #[strum(serialize = "StorageFull", props(docs = r#""#, value = "6"))] + #[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( - Debug, Default, + Debug, Display, Clone, Copy, @@ -427,28 +660,49 @@ pub enum RobotMode { EnumIter, FromRepr, Serialize, - Deserialize, + Deserialize )] #[strum(use_phf)] #[repr(u8)] pub enum RocketMode { - #[strum(serialize = "Invalid", props(docs = r#""#, value = "0"))] + #[strum(serialize = "Invalid")] + #[strum(props(docs = "", value = "0"))] Invalid = 0u8, - #[strum(serialize = "None", props(docs = r#""#, value = "1"))] + #[strum(serialize = "None")] + #[strum(props(docs = "", value = "1"))] #[default] None = 1u8, - #[strum(serialize = "Mine", props(docs = r#""#, value = "2"))] + #[strum(serialize = "Mine")] + #[strum(props(docs = "", value = "2"))] Mine = 2u8, - #[strum(serialize = "Survey", props(docs = r#""#, value = "3"))] + #[strum(serialize = "Survey")] + #[strum(props(docs = "", value = "3"))] Survey = 3u8, - #[strum(serialize = "Discover", props(docs = r#""#, value = "4"))] + #[strum(serialize = "Discover")] + #[strum(props(docs = "", value = "4"))] Discover = 4u8, - #[strum(serialize = "Chart", props(docs = r#""#, value = "5"))] + #[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( - Debug, Default, + Debug, Display, Clone, Copy, @@ -463,96 +717,151 @@ pub enum RocketMode { EnumIter, FromRepr, Serialize, - Deserialize, + Deserialize )] #[strum(use_phf)] #[repr(u8)] pub enum Class { - #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + #[strum(serialize = "None")] + #[strum(props(docs = "", value = "0"))] #[default] None = 0u8, - #[strum(serialize = "Helmet", props(docs = r#""#, value = "1"))] + #[strum(serialize = "Helmet")] + #[strum(props(docs = "", value = "1"))] Helmet = 1u8, - #[strum(serialize = "Suit", props(docs = r#""#, value = "2"))] + #[strum(serialize = "Suit")] + #[strum(props(docs = "", value = "2"))] Suit = 2u8, - #[strum(serialize = "Back", props(docs = r#""#, value = "3"))] + #[strum(serialize = "Back")] + #[strum(props(docs = "", value = "3"))] Back = 3u8, - #[strum(serialize = "GasFilter", props(docs = r#""#, value = "4"))] + #[strum(serialize = "GasFilter")] + #[strum(props(docs = "", value = "4"))] GasFilter = 4u8, - #[strum(serialize = "GasCanister", props(docs = r#""#, value = "5"))] + #[strum(serialize = "GasCanister")] + #[strum(props(docs = "", value = "5"))] GasCanister = 5u8, - #[strum(serialize = "Motherboard", props(docs = r#""#, value = "6"))] + #[strum(serialize = "Motherboard")] + #[strum(props(docs = "", value = "6"))] Motherboard = 6u8, - #[strum(serialize = "Circuitboard", props(docs = r#""#, value = "7"))] + #[strum(serialize = "Circuitboard")] + #[strum(props(docs = "", value = "7"))] Circuitboard = 7u8, - #[strum(serialize = "DataDisk", props(docs = r#""#, value = "8"))] + #[strum(serialize = "DataDisk")] + #[strum(props(docs = "", value = "8"))] DataDisk = 8u8, - #[strum(serialize = "Organ", props(docs = r#""#, value = "9"))] + #[strum(serialize = "Organ")] + #[strum(props(docs = "", value = "9"))] Organ = 9u8, - #[strum(serialize = "Ore", props(docs = r#""#, value = "10"))] + #[strum(serialize = "Ore")] + #[strum(props(docs = "", value = "10"))] Ore = 10u8, - #[strum(serialize = "Plant", props(docs = r#""#, value = "11"))] + #[strum(serialize = "Plant")] + #[strum(props(docs = "", value = "11"))] Plant = 11u8, - #[strum(serialize = "Uniform", props(docs = r#""#, value = "12"))] + #[strum(serialize = "Uniform")] + #[strum(props(docs = "", value = "12"))] Uniform = 12u8, - #[strum(serialize = "Entity", props(docs = r#""#, value = "13"))] + #[strum(serialize = "Entity")] + #[strum(props(docs = "", value = "13"))] Entity = 13u8, - #[strum(serialize = "Battery", props(docs = r#""#, value = "14"))] + #[strum(serialize = "Battery")] + #[strum(props(docs = "", value = "14"))] Battery = 14u8, - #[strum(serialize = "Egg", props(docs = r#""#, value = "15"))] + #[strum(serialize = "Egg")] + #[strum(props(docs = "", value = "15"))] Egg = 15u8, - #[strum(serialize = "Belt", props(docs = r#""#, value = "16"))] + #[strum(serialize = "Belt")] + #[strum(props(docs = "", value = "16"))] Belt = 16u8, - #[strum(serialize = "Tool", props(docs = r#""#, value = "17"))] + #[strum(serialize = "Tool")] + #[strum(props(docs = "", value = "17"))] Tool = 17u8, - #[strum(serialize = "Appliance", props(docs = r#""#, value = "18"))] + #[strum(serialize = "Appliance")] + #[strum(props(docs = "", value = "18"))] Appliance = 18u8, - #[strum(serialize = "Ingot", props(docs = r#""#, value = "19"))] + #[strum(serialize = "Ingot")] + #[strum(props(docs = "", value = "19"))] Ingot = 19u8, - #[strum(serialize = "Torpedo", props(docs = r#""#, value = "20"))] + #[strum(serialize = "Torpedo")] + #[strum(props(docs = "", value = "20"))] Torpedo = 20u8, - #[strum(serialize = "Cartridge", props(docs = r#""#, value = "21"))] + #[strum(serialize = "Cartridge")] + #[strum(props(docs = "", value = "21"))] Cartridge = 21u8, - #[strum(serialize = "AccessCard", props(docs = r#""#, value = "22"))] + #[strum(serialize = "AccessCard")] + #[strum(props(docs = "", value = "22"))] AccessCard = 22u8, - #[strum(serialize = "Magazine", props(docs = r#""#, value = "23"))] + #[strum(serialize = "Magazine")] + #[strum(props(docs = "", value = "23"))] Magazine = 23u8, - #[strum(serialize = "Circuit", props(docs = r#""#, value = "24"))] + #[strum(serialize = "Circuit")] + #[strum(props(docs = "", value = "24"))] Circuit = 24u8, - #[strum(serialize = "Bottle", props(docs = r#""#, value = "25"))] + #[strum(serialize = "Bottle")] + #[strum(props(docs = "", value = "25"))] Bottle = 25u8, - #[strum(serialize = "ProgrammableChip", props(docs = r#""#, value = "26"))] + #[strum(serialize = "ProgrammableChip")] + #[strum(props(docs = "", value = "26"))] ProgrammableChip = 26u8, - #[strum(serialize = "Glasses", props(docs = r#""#, value = "27"))] + #[strum(serialize = "Glasses")] + #[strum(props(docs = "", value = "27"))] Glasses = 27u8, - #[strum(serialize = "CreditCard", props(docs = r#""#, value = "28"))] + #[strum(serialize = "CreditCard")] + #[strum(props(docs = "", value = "28"))] CreditCard = 28u8, - #[strum(serialize = "DirtCanister", props(docs = r#""#, value = "29"))] + #[strum(serialize = "DirtCanister")] + #[strum(props(docs = "", value = "29"))] DirtCanister = 29u8, - #[strum(serialize = "SensorProcessingUnit", props(docs = r#""#, value = "30"))] + #[strum(serialize = "SensorProcessingUnit")] + #[strum(props(docs = "", value = "30"))] SensorProcessingUnit = 30u8, - #[strum(serialize = "LiquidCanister", props(docs = r#""#, value = "31"))] + #[strum(serialize = "LiquidCanister")] + #[strum(props(docs = "", value = "31"))] LiquidCanister = 31u8, - #[strum(serialize = "LiquidBottle", props(docs = r#""#, value = "32"))] + #[strum(serialize = "LiquidBottle")] + #[strum(props(docs = "", value = "32"))] LiquidBottle = 32u8, - #[strum(serialize = "Wreckage", props(docs = r#""#, value = "33"))] + #[strum(serialize = "Wreckage")] + #[strum(props(docs = "", value = "33"))] Wreckage = 33u8, - #[strum(serialize = "SoundCartridge", props(docs = r#""#, value = "34"))] + #[strum(serialize = "SoundCartridge")] + #[strum(props(docs = "", value = "34"))] SoundCartridge = 34u8, - #[strum(serialize = "DrillHead", props(docs = r#""#, value = "35"))] + #[strum(serialize = "DrillHead")] + #[strum(props(docs = "", value = "35"))] DrillHead = 35u8, - #[strum(serialize = "ScanningHead", props(docs = r#""#, value = "36"))] + #[strum(serialize = "ScanningHead")] + #[strum(props(docs = "", value = "36"))] ScanningHead = 36u8, - #[strum(serialize = "Flare", props(docs = r#""#, value = "37"))] + #[strum(serialize = "Flare")] + #[strum(props(docs = "", value = "37"))] Flare = 37u8, - #[strum(serialize = "Blocked", props(docs = r#""#, value = "38"))] + #[strum(serialize = "Blocked")] + #[strum(props(docs = "", value = "38"))] Blocked = 38u8, - #[strum(serialize = "SuitMod", props(docs = r#""#, value = "39"))] + #[strum(serialize = "SuitMod")] + #[strum(props(docs = "", value = "39"))] SuitMod = 39u8, } +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( - Debug, Default, + Debug, Display, Clone, Copy, @@ -567,39 +876,52 @@ pub enum Class { EnumIter, FromRepr, Serialize, - Deserialize, + Deserialize )] #[strum(use_phf)] #[repr(u8)] pub enum SorterInstruction { - #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + #[strum(serialize = "None")] + #[strum(props(docs = "", value = "0"))] #[default] None = 0u8, - #[strum(serialize = "FilterPrefabHashEquals", props(docs = r#""#, value = "1"))] + #[strum(serialize = "FilterPrefabHashEquals")] + #[strum(props(docs = "", value = "1"))] FilterPrefabHashEquals = 1u8, - #[strum( - serialize = "FilterPrefabHashNotEquals", - props(docs = r#""#, value = "2") - )] + #[strum(serialize = "FilterPrefabHashNotEquals")] + #[strum(props(docs = "", value = "2"))] FilterPrefabHashNotEquals = 2u8, - #[strum( - serialize = "FilterSortingClassCompare", - props(docs = r#""#, value = "3") - )] + #[strum(serialize = "FilterSortingClassCompare")] + #[strum(props(docs = "", value = "3"))] FilterSortingClassCompare = 3u8, - #[strum(serialize = "FilterSlotTypeCompare", props(docs = r#""#, value = "4"))] + #[strum(serialize = "FilterSlotTypeCompare")] + #[strum(props(docs = "", value = "4"))] FilterSlotTypeCompare = 4u8, - #[strum(serialize = "FilterQuantityCompare", props(docs = r#""#, value = "5"))] + #[strum(serialize = "FilterQuantityCompare")] + #[strum(props(docs = "", value = "5"))] FilterQuantityCompare = 5u8, - #[strum( - serialize = "LimitNextExecutionByCount", - props(docs = r#""#, value = "6") - )] + #[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( - Debug, Default, + Debug, Display, Clone, Copy, @@ -614,38 +936,64 @@ pub enum SorterInstruction { EnumIter, FromRepr, Serialize, - Deserialize, + Deserialize )] #[strum(use_phf)] #[repr(u8)] pub enum SortingClass { - #[strum(serialize = "Default", props(docs = r#""#, value = "0"))] + #[strum(serialize = "Default")] + #[strum(props(docs = "", value = "0"))] #[default] Default = 0u8, - #[strum(serialize = "Kits", props(docs = r#""#, value = "1"))] + #[strum(serialize = "Kits")] + #[strum(props(docs = "", value = "1"))] Kits = 1u8, - #[strum(serialize = "Tools", props(docs = r#""#, value = "2"))] + #[strum(serialize = "Tools")] + #[strum(props(docs = "", value = "2"))] Tools = 2u8, - #[strum(serialize = "Resources", props(docs = r#""#, value = "3"))] + #[strum(serialize = "Resources")] + #[strum(props(docs = "", value = "3"))] Resources = 3u8, - #[strum(serialize = "Food", props(docs = r#""#, value = "4"))] + #[strum(serialize = "Food")] + #[strum(props(docs = "", value = "4"))] Food = 4u8, - #[strum(serialize = "Clothing", props(docs = r#""#, value = "5"))] + #[strum(serialize = "Clothing")] + #[strum(props(docs = "", value = "5"))] Clothing = 5u8, - #[strum(serialize = "Appliances", props(docs = r#""#, value = "6"))] + #[strum(serialize = "Appliances")] + #[strum(props(docs = "", value = "6"))] Appliances = 6u8, - #[strum(serialize = "Atmospherics", props(docs = r#""#, value = "7"))] + #[strum(serialize = "Atmospherics")] + #[strum(props(docs = "", value = "7"))] Atmospherics = 7u8, - #[strum(serialize = "Storage", props(docs = r#""#, value = "8"))] + #[strum(serialize = "Storage")] + #[strum(props(docs = "", value = "8"))] Storage = 8u8, - #[strum(serialize = "Ores", props(docs = r#""#, value = "9"))] + #[strum(serialize = "Ores")] + #[strum(props(docs = "", value = "9"))] Ores = 9u8, - #[strum(serialize = "Ices", props(docs = r#""#, value = "10"))] + #[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( - Debug, Default, + Debug, Display, Clone, Copy, @@ -660,105 +1008,166 @@ pub enum SortingClass { EnumIter, FromRepr, Serialize, - Deserialize, + Deserialize )] #[strum(use_phf)] #[repr(u8)] pub enum SoundAlert { - #[strum(serialize = "None", props(docs = r#""#, value = "0"))] + #[strum(serialize = "None")] + #[strum(props(docs = "", value = "0"))] #[default] None = 0u8, - #[strum(serialize = "Alarm2", props(docs = r#""#, value = "1"))] + #[strum(serialize = "Alarm2")] + #[strum(props(docs = "", value = "1"))] Alarm2 = 1u8, - #[strum(serialize = "Alarm3", props(docs = r#""#, value = "2"))] + #[strum(serialize = "Alarm3")] + #[strum(props(docs = "", value = "2"))] Alarm3 = 2u8, - #[strum(serialize = "Alarm4", props(docs = r#""#, value = "3"))] + #[strum(serialize = "Alarm4")] + #[strum(props(docs = "", value = "3"))] Alarm4 = 3u8, - #[strum(serialize = "Alarm5", props(docs = r#""#, value = "4"))] + #[strum(serialize = "Alarm5")] + #[strum(props(docs = "", value = "4"))] Alarm5 = 4u8, - #[strum(serialize = "Alarm6", props(docs = r#""#, value = "5"))] + #[strum(serialize = "Alarm6")] + #[strum(props(docs = "", value = "5"))] Alarm6 = 5u8, - #[strum(serialize = "Alarm7", props(docs = r#""#, value = "6"))] + #[strum(serialize = "Alarm7")] + #[strum(props(docs = "", value = "6"))] Alarm7 = 6u8, - #[strum(serialize = "Music1", props(docs = r#""#, value = "7"))] + #[strum(serialize = "Music1")] + #[strum(props(docs = "", value = "7"))] Music1 = 7u8, - #[strum(serialize = "Music2", props(docs = r#""#, value = "8"))] + #[strum(serialize = "Music2")] + #[strum(props(docs = "", value = "8"))] Music2 = 8u8, - #[strum(serialize = "Music3", props(docs = r#""#, value = "9"))] + #[strum(serialize = "Music3")] + #[strum(props(docs = "", value = "9"))] Music3 = 9u8, - #[strum(serialize = "Alarm8", props(docs = r#""#, value = "10"))] + #[strum(serialize = "Alarm8")] + #[strum(props(docs = "", value = "10"))] Alarm8 = 10u8, - #[strum(serialize = "Alarm9", props(docs = r#""#, value = "11"))] + #[strum(serialize = "Alarm9")] + #[strum(props(docs = "", value = "11"))] Alarm9 = 11u8, - #[strum(serialize = "Alarm10", props(docs = r#""#, value = "12"))] + #[strum(serialize = "Alarm10")] + #[strum(props(docs = "", value = "12"))] Alarm10 = 12u8, - #[strum(serialize = "Alarm11", props(docs = r#""#, value = "13"))] + #[strum(serialize = "Alarm11")] + #[strum(props(docs = "", value = "13"))] Alarm11 = 13u8, - #[strum(serialize = "Alarm12", props(docs = r#""#, value = "14"))] + #[strum(serialize = "Alarm12")] + #[strum(props(docs = "", value = "14"))] Alarm12 = 14u8, - #[strum(serialize = "Danger", props(docs = r#""#, value = "15"))] + #[strum(serialize = "Danger")] + #[strum(props(docs = "", value = "15"))] Danger = 15u8, - #[strum(serialize = "Warning", props(docs = r#""#, value = "16"))] + #[strum(serialize = "Warning")] + #[strum(props(docs = "", value = "16"))] Warning = 16u8, - #[strum(serialize = "Alert", props(docs = r#""#, value = "17"))] + #[strum(serialize = "Alert")] + #[strum(props(docs = "", value = "17"))] Alert = 17u8, - #[strum(serialize = "StormIncoming", props(docs = r#""#, value = "18"))] + #[strum(serialize = "StormIncoming")] + #[strum(props(docs = "", value = "18"))] StormIncoming = 18u8, - #[strum(serialize = "IntruderAlert", props(docs = r#""#, value = "19"))] + #[strum(serialize = "IntruderAlert")] + #[strum(props(docs = "", value = "19"))] IntruderAlert = 19u8, - #[strum(serialize = "Depressurising", props(docs = r#""#, value = "20"))] + #[strum(serialize = "Depressurising")] + #[strum(props(docs = "", value = "20"))] Depressurising = 20u8, - #[strum(serialize = "Pressurising", props(docs = r#""#, value = "21"))] + #[strum(serialize = "Pressurising")] + #[strum(props(docs = "", value = "21"))] Pressurising = 21u8, - #[strum(serialize = "AirlockCycling", props(docs = r#""#, value = "22"))] + #[strum(serialize = "AirlockCycling")] + #[strum(props(docs = "", value = "22"))] AirlockCycling = 22u8, - #[strum(serialize = "PowerLow", props(docs = r#""#, value = "23"))] + #[strum(serialize = "PowerLow")] + #[strum(props(docs = "", value = "23"))] PowerLow = 23u8, - #[strum(serialize = "SystemFailure", props(docs = r#""#, value = "24"))] + #[strum(serialize = "SystemFailure")] + #[strum(props(docs = "", value = "24"))] SystemFailure = 24u8, - #[strum(serialize = "Welcome", props(docs = r#""#, value = "25"))] + #[strum(serialize = "Welcome")] + #[strum(props(docs = "", value = "25"))] Welcome = 25u8, - #[strum(serialize = "MalfunctionDetected", props(docs = r#""#, value = "26"))] + #[strum(serialize = "MalfunctionDetected")] + #[strum(props(docs = "", value = "26"))] MalfunctionDetected = 26u8, - #[strum(serialize = "HaltWhoGoesThere", props(docs = r#""#, value = "27"))] + #[strum(serialize = "HaltWhoGoesThere")] + #[strum(props(docs = "", value = "27"))] HaltWhoGoesThere = 27u8, - #[strum(serialize = "FireFireFire", props(docs = r#""#, value = "28"))] + #[strum(serialize = "FireFireFire")] + #[strum(props(docs = "", value = "28"))] FireFireFire = 28u8, - #[strum(serialize = "One", props(docs = r#""#, value = "29"))] + #[strum(serialize = "One")] + #[strum(props(docs = "", value = "29"))] One = 29u8, - #[strum(serialize = "Two", props(docs = r#""#, value = "30"))] + #[strum(serialize = "Two")] + #[strum(props(docs = "", value = "30"))] Two = 30u8, - #[strum(serialize = "Three", props(docs = r#""#, value = "31"))] + #[strum(serialize = "Three")] + #[strum(props(docs = "", value = "31"))] Three = 31u8, - #[strum(serialize = "Four", props(docs = r#""#, value = "32"))] + #[strum(serialize = "Four")] + #[strum(props(docs = "", value = "32"))] Four = 32u8, - #[strum(serialize = "Five", props(docs = r#""#, value = "33"))] + #[strum(serialize = "Five")] + #[strum(props(docs = "", value = "33"))] Five = 33u8, - #[strum(serialize = "Floor", props(docs = r#""#, value = "34"))] + #[strum(serialize = "Floor")] + #[strum(props(docs = "", value = "34"))] Floor = 34u8, - #[strum(serialize = "RocketLaunching", props(docs = r#""#, value = "35"))] + #[strum(serialize = "RocketLaunching")] + #[strum(props(docs = "", value = "35"))] RocketLaunching = 35u8, - #[strum(serialize = "LiftOff", props(docs = r#""#, value = "36"))] + #[strum(serialize = "LiftOff")] + #[strum(props(docs = "", value = "36"))] LiftOff = 36u8, - #[strum(serialize = "TraderIncoming", props(docs = r#""#, value = "37"))] + #[strum(serialize = "TraderIncoming")] + #[strum(props(docs = "", value = "37"))] TraderIncoming = 37u8, - #[strum(serialize = "TraderLanded", props(docs = r#""#, value = "38"))] + #[strum(serialize = "TraderLanded")] + #[strum(props(docs = "", value = "38"))] TraderLanded = 38u8, - #[strum(serialize = "PressureHigh", props(docs = r#""#, value = "39"))] + #[strum(serialize = "PressureHigh")] + #[strum(props(docs = "", value = "39"))] PressureHigh = 39u8, - #[strum(serialize = "PressureLow", props(docs = r#""#, value = "40"))] + #[strum(serialize = "PressureLow")] + #[strum(props(docs = "", value = "40"))] PressureLow = 40u8, - #[strum(serialize = "TemperatureHigh", props(docs = r#""#, value = "41"))] + #[strum(serialize = "TemperatureHigh")] + #[strum(props(docs = "", value = "41"))] TemperatureHigh = 41u8, - #[strum(serialize = "TemperatureLow", props(docs = r#""#, value = "42"))] + #[strum(serialize = "TemperatureLow")] + #[strum(props(docs = "", value = "42"))] TemperatureLow = 42u8, - #[strum(serialize = "PollutantsDetected", props(docs = r#""#, value = "43"))] + #[strum(serialize = "PollutantsDetected")] + #[strum(props(docs = "", value = "43"))] PollutantsDetected = 43u8, - #[strum(serialize = "HighCarbonDioxide", props(docs = r#""#, value = "44"))] + #[strum(serialize = "HighCarbonDioxide")] + #[strum(props(docs = "", value = "44"))] HighCarbonDioxide = 44u8, - #[strum(serialize = "Alarm1", props(docs = r#""#, value = "45"))] + #[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, @@ -775,16 +1184,35 @@ pub enum SoundAlert { EnumIter, FromRepr, Serialize, - Deserialize, + Deserialize )] #[strum(use_phf)] #[repr(u8)] pub enum LogicTransmitterMode { - #[strum(serialize = "Passive", props(docs = r#""#, value = "0"))] + #[strum(serialize = "Passive")] + #[strum(props(docs = "", value = "0"))] Passive = 0u8, - #[strum(serialize = "Active", props(docs = r#""#, value = "1"))] + #[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, @@ -801,16 +1229,33 @@ pub enum LogicTransmitterMode { EnumIter, FromRepr, Serialize, - Deserialize, + Deserialize )] #[strum(use_phf)] #[repr(u8)] pub enum VentDirection { - #[strum(serialize = "Outward", props(docs = r#""#, value = "0"))] + #[strum(serialize = "Outward")] + #[strum(props(docs = "", value = "0"))] Outward = 0u8, - #[strum(serialize = "Inward", props(docs = r#""#, value = "1"))] + #[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, @@ -827,20 +1272,41 @@ pub enum VentDirection { EnumIter, FromRepr, Serialize, - Deserialize, + Deserialize )] #[strum(use_phf)] #[repr(u8)] pub enum ConditionOperation { - #[strum(serialize = "Equals", props(docs = r#""#, value = "0"))] + #[strum(serialize = "Equals")] + #[strum(props(docs = "", value = "0"))] Equals = 0u8, - #[strum(serialize = "Greater", props(docs = r#""#, value = "1"))] + #[strum(serialize = "Greater")] + #[strum(props(docs = "", value = "1"))] Greater = 1u8, - #[strum(serialize = "Less", props(docs = r#""#, value = "2"))] + #[strum(serialize = "Less")] + #[strum(props(docs = "", value = "2"))] Less = 2u8, - #[strum(serialize = "NotEquals", props(docs = r#""#, value = "3"))] + #[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), @@ -942,9 +1408,8 @@ impl BasicEnum { } } impl std::str::FromStr for BasicEnum { - type Err = crate::errors::ParseError; + type Err = super::ParseError; fn from_str(s: &str) -> Result { - let end = s.len(); match s.to_lowercase().as_str() { "aircon.cold" => Ok(Self::AirCon(AirConditioningMode::Cold)), "aircon.hot" => Ok(Self::AirCon(AirConditioningMode::Hot)), @@ -982,10 +1447,14 @@ impl std::str::FromStr for BasicEnum { "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.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.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)), @@ -999,31 +1468,55 @@ impl std::str::FromStr for BasicEnum { "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.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.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.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.maxquantity" => { + Ok(Self::LogicSlotType(LogicSlotType::MaxQuantity)) + } "logicslottype.none" => Ok(Self::LogicSlotType(LogicSlotType::None)), - "logicslottype.occupanthash" => Ok(Self::LogicSlotType(LogicSlotType::OccupantHash)), + "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.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.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.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.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)), @@ -1032,11 +1525,17 @@ impl std::str::FromStr for BasicEnum { "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.bestcontactfilter" => { + Ok(Self::LogicType(LogicType::BestContactFilter)) + } "logictype.bpm" => Ok(Self::LogicType(LogicType::Bpm)), - "logictype.burntimeremaining" => Ok(Self::LogicType(LogicType::BurnTimeRemaining)), + "logictype.burntimeremaining" => { + Ok(Self::LogicType(LogicType::BurnTimeRemaining)) + } "logictype.celestialhash" => Ok(Self::LogicType(LogicType::CelestialHash)), - "logictype.celestialparenthash" => Ok(Self::LogicType(LogicType::CelestialParentHash)), + "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)), @@ -1047,24 +1546,42 @@ impl std::str::FromStr for BasicEnum { "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.chartednavpoints" => { + Ok(Self::LogicType(LogicType::ChartedNavPoints)) + } "logictype.clearmemory" => Ok(Self::LogicType(LogicType::ClearMemory)), - "logictype.collectablegoods" => Ok(Self::LogicType(LogicType::CollectableGoods)), + "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.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.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)), @@ -1078,13 +1595,19 @@ impl std::str::FromStr for BasicEnum { Ok(Self::LogicType(LogicType::EnvironmentEfficiency)) } "logictype.error" => Ok(Self::LogicType(LogicType::Error)), - "logictype.exhaustvelocity" => Ok(Self::LogicType(LogicType::ExhaustVelocity)), + "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.exportslotoccupant" => { + Ok(Self::LogicType(LogicType::ExportSlotOccupant)) + } "logictype.filtration" => Ok(Self::LogicType(LogicType::Filtration)), - "logictype.flightcontrolrule" => Ok(Self::LogicType(LogicType::FlightControlRule)), + "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)), @@ -1093,12 +1616,16 @@ impl std::str::FromStr for BasicEnum { "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.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.importslotoccupant" => { + Ok(Self::LogicType(LogicType::ImportSlotOccupant)) + } "logictype.inclination" => Ok(Self::LogicType(LogicType::Inclination)), "logictype.index" => Ok(Self::LogicType(LogicType::Index)), "logictype.interrogationprogress" => { @@ -1111,8 +1638,12 @@ impl std::str::FromStr for BasicEnum { } "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.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)) @@ -1134,10 +1665,18 @@ impl std::str::FromStr for BasicEnum { "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.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)), @@ -1155,23 +1694,37 @@ impl std::str::FromStr for BasicEnum { "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.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.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.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.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.ratiocarbondioxide" => { + Ok(Self::LogicType(LogicType::RatioCarbonDioxide)) + } "logictype.ratiocarbondioxideinput" => { Ok(Self::LogicType(LogicType::RatioCarbonDioxideInput)) } @@ -1200,8 +1753,12 @@ impl std::str::FromStr for BasicEnum { "logictype.ratioliquidcarbondioxideoutput2" => { Ok(Self::LogicType(LogicType::RatioLiquidCarbonDioxideOutput2)) } - "logictype.ratioliquidhydrogen" => Ok(Self::LogicType(LogicType::RatioLiquidHydrogen)), - "logictype.ratioliquidnitrogen" => Ok(Self::LogicType(LogicType::RatioLiquidNitrogen)), + "logictype.ratioliquidhydrogen" => { + Ok(Self::LogicType(LogicType::RatioLiquidHydrogen)) + } + "logictype.ratioliquidnitrogen" => { + Ok(Self::LogicType(LogicType::RatioLiquidNitrogen)) + } "logictype.ratioliquidnitrogeninput" => { Ok(Self::LogicType(LogicType::RatioLiquidNitrogenInput)) } @@ -1229,7 +1786,9 @@ impl std::str::FromStr for BasicEnum { "logictype.ratioliquidnitrousoxideoutput2" => { Ok(Self::LogicType(LogicType::RatioLiquidNitrousOxideOutput2)) } - "logictype.ratioliquidoxygen" => Ok(Self::LogicType(LogicType::RatioLiquidOxygen)), + "logictype.ratioliquidoxygen" => { + Ok(Self::LogicType(LogicType::RatioLiquidOxygen)) + } "logictype.ratioliquidoxygeninput" => { Ok(Self::LogicType(LogicType::RatioLiquidOxygenInput)) } @@ -1273,13 +1832,21 @@ impl std::str::FromStr for BasicEnum { 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.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.rationitrousoxide" => { + Ok(Self::LogicType(LogicType::RatioNitrousOxide)) + } "logictype.rationitrousoxideinput" => { Ok(Self::LogicType(LogicType::RatioNitrousOxideInput)) } @@ -1293,12 +1860,22 @@ impl std::str::FromStr for BasicEnum { 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.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.ratiopollutantinput" => { + Ok(Self::LogicType(LogicType::RatioPollutantInput)) + } "logictype.ratiopollutantinput2" => { Ok(Self::LogicType(LogicType::RatioPollutantInput2)) } @@ -1308,14 +1885,26 @@ impl std::str::FromStr for BasicEnum { "logictype.ratiopollutantoutput2" => { Ok(Self::LogicType(LogicType::RatioPollutantOutput2)) } - "logictype.ratiopollutedwater" => Ok(Self::LogicType(LogicType::RatioPollutedWater)), + "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.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.ratiovolatilesinput" => { + Ok(Self::LogicType(LogicType::RatioVolatilesInput)) + } "logictype.ratiovolatilesinput2" => { Ok(Self::LogicType(LogicType::RatioVolatilesInput2)) } @@ -1326,11 +1915,21 @@ impl std::str::FromStr for BasicEnum { 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.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)), @@ -1351,7 +1950,9 @@ impl std::str::FromStr for BasicEnum { "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.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)), @@ -1360,31 +1961,61 @@ impl std::str::FromStr for BasicEnum { "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.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.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.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.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)), @@ -1407,31 +2038,33 @@ impl std::str::FromStr for BasicEnum { "printerinstruction.devicesetlock" => { Ok(Self::PrinterInstruction(PrinterInstruction::DeviceSetLock)) } - "printerinstruction.ejectallreagents" => Ok(Self::PrinterInstruction( - PrinterInstruction::EjectAllReagents, - )), + "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.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.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, - )), + "printerinstruction.waituntilnextvalid" => { + Ok(Self::PrinterInstruction(PrinterInstruction::WaitUntilNextValid)) + } "reentryprofile.high" => Ok(Self::ReEntryProfile(ReEntryProfile::High)), "reentryprofile.max" => Ok(Self::ReEntryProfile(ReEntryProfile::Max)), "reentryprofile.medium" => Ok(Self::ReEntryProfile(ReEntryProfile::Medium)), @@ -1482,7 +2115,9 @@ impl std::str::FromStr for BasicEnum { "slotclass.plant" => Ok(Self::SlotClass(Class::Plant)), "slotclass.programmablechip" => Ok(Self::SlotClass(Class::ProgrammableChip)), "slotclass.scanninghead" => Ok(Self::SlotClass(Class::ScanningHead)), - "slotclass.sensorprocessingunit" => Ok(Self::SlotClass(Class::SensorProcessingUnit)), + "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)), @@ -1490,27 +2125,31 @@ impl std::str::FromStr for BasicEnum { "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)), + "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.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)), @@ -1544,7 +2183,9 @@ impl std::str::FromStr for BasicEnum { "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.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)), @@ -1566,20 +2207,23 @@ impl std::str::FromStr for BasicEnum { "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)), + "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(crate::errors::ParseError { - line: 0, - start: 0, - end, - msg: format!("Unknown enum '{}'", s), - }), + _ => { + Err(super::ParseError { + enm: s.to_string(), + }) + } } } } @@ -1606,7 +2250,7 @@ impl std::fmt::Display for BasicEnum { 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, "{}", 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..e33b183 --- /dev/null +++ b/stationeers_data/src/enums/prefabs.rs @@ -0,0 +1,7686 @@ +use serde_derive::{Deserialize, Serialize}; +use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[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 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 = "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 Liquid Valve.", + 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 = "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 = "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 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.", + 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 Air Conditioner", desc = "", value = "-1826023284"))] + ItemWreckageAirConditioner1 = -1826023284i32, + #[strum(serialize = "ItemKitStirlingEngine")] + #[strum(props(name = "Kit (Stirling Engine)", desc = "", value = "-1821571150"))] + ItemKitStirlingEngine = -1821571150i32, + #[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 = "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 = "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 Wall Cooler", 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 Turbine Generator", 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 = "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 = "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 = "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 = "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 = "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 Structure Weather Station", + 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 = "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 Structure Weather Station", + 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 = "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 = "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 = "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 = "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 Structure Weather Station", + 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 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 Structure Weather Station", + 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 = "StructureLiquidPipeOneWayValve")] + #[strum( + props( + name = "One Way Valve (Liquid)", + 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..", + value = "-782453061" + ) + )] + StructureLiquidPipeOneWayValve = -782453061i32, + #[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 = "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", 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", + 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", + 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 = "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 = "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 = "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 = "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 = "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 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 Hydroponics Tray", 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 = "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 Atmos Analyzer or Tracker, Medical Analyzer, Ore Scanner, 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, 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 = "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 = "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 Large Extendable Radiator", desc = "", value = "-997763") + )] + ItemWreckageLargeExtendableRadiator01 = -997763i32, + #[strum(serialize = "StructureSingleBed")] + #[strum(props(name = "Single Bed", desc = "Description coming.", 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 Wall Cooler", 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 = "Tracker", desc = "", value = "81488783"))] + CartridgeTracker = 81488783i32, + #[strum(serialize = "ToyLuna")] + #[strum(props(name = "Toy Luna", desc = "", value = "94730034"))] + ToyLuna = 94730034i32, + #[strum(serialize = "ItemWreckageTurbineGenerator2")] + #[strum(props(name = "Wreckage Turbine Generator", 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 Air Conditioner", 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 = "Remote Explosive", 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 = "Passive Vent", + desc = "This kit creates a 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 = "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 = "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 Structure RTG", 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 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 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 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.", + value = "502555944" + ) + )] + MotherboardLogic = 502555944i32, + #[strum(serialize = "StructureStairwellBackLeft")] + #[strum(props(name = "Stairwell (Back Left)", desc = "", value = "505924160"))] + StructureStairwellBackLeft = 505924160i32, + #[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 Structure Weather Station", + 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 = "ItemWreckageStructureWeatherStation007")] + #[strum( + props( + name = "Wreckage Structure Weather Station", + 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 = "", 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 = "Description coming.", 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 = "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.", + 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 = "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 = "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 = "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 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 = "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 Structure Weather Station", + 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 = "Description coming.", + 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 = "ItemKitReinforcedWindows")] + #[strum(props(name = "Kit (Reinforced Windows)", desc = "", value = "1459985302"))] + ItemKitReinforcedWindows = 1459985302i32, + #[strum(serialize = "ItemWreckageStructureWeatherStation002")] + #[strum( + props( + name = "Wreckage Structure Weather Station", + 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 = "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 = "Description coming.", 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 = "StructurePipeOneWayValve")] + #[strum( + props( + name = "One Way Valve (Gas)", + 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", + value = "1580412404" + ) + )] + StructurePipeOneWayValve = 1580412404i32, + #[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 = "Description coming.", + 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 = "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 = "Description coming.", + 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 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", + 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 = "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 (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 (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 = "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 = "Liquid Valve", 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 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 Turbine Generator", 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 = "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 = "", + desc = "", + 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 = "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 = "StructureWindowShutter")] + #[strum( + props( + name = "Window Shutter", + 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.", + value = "2056377335" + ) + )] + StructureWindowShutter = 2056377335i32, + #[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 , 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_enums.rs b/stationeers_data/src/enums/script_enums.rs new file mode 100644 index 0000000..1be73d5 --- /dev/null +++ b/stationeers_data/src/enums/script_enums.rs @@ -0,0 +1,2091 @@ +use serde_derive::{Deserialize, Serialize}; +use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[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 +)] +#[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 +)] +#[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 has 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 +)] +#[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, +} +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..a140cca --- /dev/null +++ b/stationeers_data/src/lib.rs @@ -0,0 +1,108 @@ +use std::collections::BTreeMap; + +pub mod templates; +pub mod enums { + use serde_derive::{Deserialize, Serialize}; + use std::fmt::Display; + use strum::{AsRefStr, EnumIter, EnumString}; + + pub mod basic_enums; + pub mod script_enums; + pub mod prefabs; + + #[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, + )] + pub enum MemoryAccess { + Read, + Write, + ReadWrite, + } + + #[derive( + Debug, + Default, + Clone, + Copy, + PartialEq, + PartialOrd, + Eq, + Ord, + Hash, + Serialize, + Deserialize, + EnumIter, + AsRefStr, + EnumString, + )] + pub enum ConnectionType { + Pipe, + Power, + Data, + Chute, + Elevator, + PipeLiquid, + LandingPad, + LaunchPad, + PowerAndData, + #[serde(other)] + #[default] + None, + } + + #[derive( + Debug, + Default, + Clone, + Copy, + PartialEq, + PartialOrd, + Eq, + Ord, + Hash, + Serialize, + Deserialize, + EnumIter, + AsRefStr, + EnumString, + )] + pub enum ConnectionRole { + Input, + Input2, + Output, + Output2, + Waste, + #[serde(other)] + #[default] + None, + } +} + +#[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 +} + +#[cfg(feature = "prefab_database")] +pub mod database { + mod prefab_map; + pub use prefab_map::build_prefab_database; +} diff --git a/stationeers_data/src/templates.rs b/stationeers_data/src/templates.rs new file mode 100644 index 0000000..bf560db --- /dev/null +++ b/stationeers_data/src/templates.rs @@ -0,0 +1,237 @@ +use std::collections::BTreeMap; + +use crate::enums::{ + basic_enums::{Class as SlotClass, GasType, SortingClass}, + script_enums::{LogicSlotType, LogicType}, + ConnectionRole, ConnectionType, MemoryAccess, +}; +use serde_derive::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[serde(untagged)] +pub enum ObjectTemplate { + Structure(StructureTemplate), + StructureSlots(StructureSlotsTemplate), + StructureLogic(StructureLogicTemplate), + StructureLogicDevice(StructureLogicDeviceTemplate), + StructureLogicDeviceMemory(StructureLogicDeviceMemoryTemplate), + Item(ItemTemplate), + ItemSlots(ItemSlotsTemplate), + ItemLogic(ItemLogicTemplate), + ItemLogicMemory(ItemLogicMemoryTemplate), +} + +#[allow(dead_code)] +impl ObjectTemplate { + pub fn prefab(&self) -> &PrefabInfo { + use ObjectTemplate::*; + match self { + Structure(s) => &s.prefab, + StructureSlots(s) => &s.prefab, + StructureLogic(s) => &s.prefab, + StructureLogicDevice(s) => &s.prefab, + StructureLogicDeviceMemory(s) => &s.prefab, + Item(i) => &i.prefab, + ItemSlots(i) => &i.prefab, + ItemLogic(i) => &i.prefab, + ItemLogicMemory(i) => &i.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: StructureLogicDeviceMemoryTemplate) -> Self { + Self::StructureLogicDeviceMemory(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: ItemLogicTemplate) -> Self { + Self::ItemLogic(value) + } +} + +impl From for ObjectTemplate { + fn from(value: ItemLogicMemoryTemplate) -> Self { + Self::ItemLogicMemory(value) + } +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +pub struct PrefabInfo { + pub prefab_name: String, + pub prefab_hash: i32, + pub desc: String, + pub name: String, +} +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct SlotInfo { + pub name: String, + pub typ: SlotClass, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct LogicInfo { + pub logic_slot_types: BTreeMap>, + pub logic_types: BTreeMap, + pub modes: Option>, + pub transmission_receiver: bool, + pub wireless_logic: bool, + pub circuit_holder: bool, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct ItemInfo { + pub consumable: bool, + pub filter_type: Option, + pub ingredient: bool, + pub max_quantity: u32, + pub reagents: Option>, + pub slot_class: SlotClass, + pub sorting_class: SortingClass, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +pub struct ConnectionInfo { + pub typ: ConnectionType, + pub role: ConnectionRole, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct DeviceInfo { + pub connection_list: Vec, + 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, Eq, Ord, Hash, Serialize, Deserialize)] +pub struct StructureInfo { + pub small_grid: bool, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +pub struct Instruction { + pub description: String, + pub typ: String, + pub value: i64, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct MemoryInfo { + pub instructions: Option>, + pub memory_access: MemoryAccess, + pub memory_size: u32, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct StructureTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct StructureSlotsTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, + pub slots: Vec, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct StructureLogicTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, + pub logic: LogicInfo, + pub slots: Vec, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct StructureLogicDeviceTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, + pub logic: LogicInfo, + pub slots: Vec, + pub device: DeviceInfo, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct StructureLogicDeviceMemoryTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, + pub logic: LogicInfo, + pub slots: Vec, + pub device: DeviceInfo, + pub memory: MemoryInfo, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct ItemTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct ItemSlotsTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + pub slots: Vec, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct ItemLogicTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + pub logic: LogicInfo, + pub slots: Vec, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct ItemLogicMemoryTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + pub logic: LogicInfo, + pub slots: Vec, + pub memory: MemoryInfo, +} diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml index 1ce6807..205ecaf 100644 --- a/xtask/Cargo.toml +++ b/xtask/Cargo.toml @@ -4,6 +4,7 @@ version.workspace = true edition.workspace = true [dependencies] +stationeers_data = { path = "../stationeers_data" } clap = { version = "4.5.4", features = ["derive", "env"] } color-eyre = "0.6.3" convert_case = "0.6.0" @@ -11,15 +12,21 @@ indexmap = { version = "2.2.6", features = ["serde"] } # onig = "6.4.0" phf_codegen = "0.11.2" regex = "1.10.4" -serde = "1.0.200" -serde_derive = "1.0.200" +serde = "1.0.202" +serde_derive = "1.0.202" serde_ignored = "0.1.10" -serde_json = "1.0.116" +serde_json = "1.0.117" serde_path_to_error = "0.1.16" serde_with = "3.8.1" textwrap = { version = "0.16.1", default-features = false } -thiserror = "1.0.58" +thiserror = "1.0.61" onig = { git = "https://github.com/rust-onig/rust-onig", revision = "fa90c0e97e90a056af89f183b23cd417b59ee6a2" } tracing = "0.1.40" - +quote = "1.0.36" +prettyplease = "0.2.20" +syn = "2.0.64" +proc-macro2 = "1.0.82" +num-integer = "0.1.46" +num = "0.4.3" +uneval = "0.2.4" diff --git a/xtask/src/generate.rs b/xtask/src/generate.rs index a571fd1..a7ece17 100644 --- a/xtask/src/generate.rs +++ b/xtask/src/generate.rs @@ -1,6 +1,7 @@ use color_eyre::eyre; +use quote::ToTokens; -use std::{collections::BTreeMap, process::Command}; +use std::collections::BTreeMap; use crate::{enums::Enums, stationpedia::Stationpedia}; @@ -12,6 +13,7 @@ mod utils; pub fn generate( stationpedia_path: &std::path::Path, workspace: &std::path::Path, + modules: &[&str], ) -> color_eyre::Result<()> { let mut pedia: Stationpedia = parse_json(&mut serde_json::Deserializer::from_reader( std::io::BufReader::new(std::fs::File::open( @@ -37,21 +39,41 @@ pub fn generate( std::io::BufReader::new(std::fs::File::open(stationpedia_path.join("Enums.json"))?), ))?; - database::generate_database(&pedia, &enums, workspace)?; - let enums_files = enums::generate_enums(&pedia, &enums, workspace)?; - let inst_files = instructions::generate_instructions(&pedia, workspace)?; + let mut generated_files = Vec::new(); + if modules.contains(&"enums") { + if modules.len() > 1 { + eprintln!( + "generating enums alone, recompile the xtask and run again with other modules." + ) + } else { + eprintln!("generating enums..."); + } - let generated_files = [enums_files.as_slice(), inst_files.as_slice()].concat(); + let enums_files = enums::generate_enums(&pedia, &enums, workspace)?; + eprintln!("Formatting generated files..."); + for file in &enums_files { + prepend_generated_comment_and_format(file)?; + } + return Ok(()); + } + + if modules.contains(&"database") { + eprintln!("generating database..."); + + let database_files = database::generate_database(&pedia, &enums, workspace)?; + generated_files.extend(database_files); + } + + if modules.contains(&"instructions") { + eprintln!("generating instructions..."); + let inst_files = instructions::generate_instructions(&pedia, workspace)?; + generated_files.extend(inst_files); + } eprintln!("Formatting generated files..."); for file in &generated_files { - prepend_generated_comment(file)?; + prepend_generated_comment_and_format(file)?; } - let mut cmd = Command::new("cargo"); - cmd.current_dir(workspace); - cmd.arg("fmt").arg("--"); - cmd.args(&generated_files); - cmd.status()?; Ok(()) } @@ -71,29 +93,34 @@ pub fn parse_json<'a, T: serde::Deserialize<'a>>( }) } -fn prepend_generated_comment(file_path: &std::path::Path) -> color_eyre::Result<()> { +fn format_rust(content: impl ToTokens) -> color_eyre::Result { + let content = syn::parse2(content.to_token_stream())?; + Ok(prettyplease::unparse(&content)) +} + +fn prepend_generated_comment_and_format(file_path: &std::path::Path) -> color_eyre::Result<()> { use std::io::Write; let tmp_path = file_path.with_extension("rs.tmp"); { let mut tmp = std::fs::File::create(&tmp_path)?; - let mut src = std::fs::File::open(file_path)?; - write!( - &mut tmp, - "// ================================================= \n\ - // !! <-----> DO NOT MODIFY <-----> !! \n\ - // \n\ - // This module was automatically generated by an - // xtask \n\ - // \n\ - // run `cargo xtask generate` from the workspace \n\ - // to regenerate \n\ - // \n\ - // ================================================= \n\ - \n\ - \n\ - " - )?; - std::io::copy(&mut src, &mut tmp)?; + let src = syn::parse_file(&std::fs::read_to_string(file_path)?)?; + + let formated = format_rust(quote::quote! { + // ================================================= + // !! <-----> DO NOT MODIFY <-----> !! + // + // This module was automatically generated by an + // xtask + // + // run `cargo xtask generate` from the workspace + // to regenerate + // + // ================================================= + + #src + })?; + + write!(&mut tmp, "{formated}")?; } std::fs::remove_file(file_path)?; std::fs::rename(&tmp_path, file_path)?; diff --git a/xtask/src/generate/database.rs b/xtask/src/generate/database.rs index 709bfde..a658e48 100644 --- a/xtask/src/generate/database.rs +++ b/xtask/src/generate/database.rs @@ -1,5 +1,10 @@ -use std::{collections::BTreeMap, io::Write}; +use std::{ + collections::BTreeMap, + io::{BufWriter, Write}, + path::PathBuf, +}; +use quote::quote; use serde_derive::{Deserialize, Serialize}; use crate::{ @@ -7,11 +12,18 @@ use crate::{ stationpedia::{self, Page, Stationpedia}, }; +use stationeers_data::templates::{ + ConnectionInfo, DeviceInfo, Instruction, ItemInfo, ItemLogicMemoryTemplate, ItemLogicTemplate, + ItemSlotsTemplate, ItemTemplate, LogicInfo, MemoryInfo, ObjectTemplate, PrefabInfo, SlotInfo, + StructureInfo, StructureLogicDeviceMemoryTemplate, StructureLogicDeviceTemplate, + StructureLogicTemplate, StructureSlotsTemplate, StructureTemplate, +}; + pub fn generate_database( stationpedia: &stationpedia::Stationpedia, enums: &enums::Enums, workspace: &std::path::Path, -) -> color_eyre::Result<()> { +) -> color_eyre::Result> { let templates = generate_templates(stationpedia)?; eprintln!("Writing prefab database ..."); @@ -104,6 +116,58 @@ pub fn generate_database( let mut database_file = std::io::BufWriter::new(std::fs::File::create(database_path)?); serde_json::to_writer(&mut database_file, &db)?; database_file.flush()?; + + let prefab_map_path = workspace + .join("stationeers_data") + .join("src") + .join("database") + .join("prefab_map.rs"); + let mut prefab_map_file = std::io::BufWriter::new(std::fs::File::create(&prefab_map_path)?); + write_prefab_map(&mut prefab_map_file, &db.prefabs)?; + + Ok(vec![prefab_map_path]) +} + +fn write_prefab_map( + writer: &mut BufWriter, + prefabs: &BTreeMap, +) -> color_eyre::Result<()> { + write!( + writer, + "{}", + quote! { + use crate::enums::script_enums::*; + use crate::enums::basic_enums::*; + use crate::enums::{MemoryAccess, ConnectionType, ConnectionRole}; + use crate::templates::*; + } + )?; + let entries = prefabs + .values() + .map(|prefab| { + let hash = prefab.prefab().prefab_hash; + let obj = syn::parse_str::(&uneval::to_string(prefab)?)?; + let entry = quote! { + ( + #hash, + #obj.into(), + ) + }; + Ok(entry) + }) + .collect::, color_eyre::Report>>()?; + write!( + writer, + "{}", + quote! { + pub fn build_prefab_database() -> std::collections::BTreeMap { + #[allow(clippy::unreadable_literal)] + std::collections::BTreeMap::from([ + #(#entries),* + ]) + } + }, + )?; Ok(()) } @@ -360,7 +424,10 @@ fn slot_inserts_to_info(slots: &[stationpedia::SlotInsert]) -> Vec { tmp.iter() .map(|slot| SlotInfo { name: slot.slot_name.clone(), - typ: slot.slot_type.clone(), + typ: slot + .slot_type + .parse() + .unwrap_or_else(|err| panic!("faild to parse slot class: {err}")), }) .collect() } @@ -386,73 +453,45 @@ pub struct ObjectDatabase { pub logicable_items: Vec, } -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ObjectTemplate { - Structure(StructureTemplate), - StructureSlots(StructureSlotsTemplate), - StructureLogic(StructureLogicTemplate), - StructureLogicDevice(StructureLogicDeviceTemplate), - StructureLogicDeviceMemory(StructureLogicDeviceMemoryTemplate), - Item(ItemTemplate), - ItemSlots(ItemSlotsTemplate), - ItemLogic(ItemLogicTemplate), - ItemLogicMemory(ItemLogicMemoryTemplate), -} - -impl ObjectTemplate { - fn prefab(&self) -> &PrefabInfo { - use ObjectTemplate::*; - match self { - Structure(s) => &s.prefab, - StructureSlots(s) => &s.prefab, - StructureLogic(s) => &s.prefab, - StructureLogicDevice(s) => &s.prefab, - StructureLogicDeviceMemory(s) => &s.prefab, - Item(i) => &i.prefab, - ItemSlots(i) => &i.prefab, - ItemLogic(i) => &i.prefab, - ItemLogicMemory(i) => &i.prefab, - } - } -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -pub struct PrefabInfo { - pub prefab_name: String, - pub prefab_hash: i32, - pub desc: String, - pub name: String, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -pub struct SlotInfo { - pub name: String, - pub typ: String, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -pub struct LogicInfo { - pub logic_slot_types: BTreeMap, - pub logic_types: stationpedia::LogicTypes, - #[serde(skip_serializing_if = "Option::is_none")] - pub modes: Option>, - pub transmission_receiver: bool, - pub wireless_logic: bool, - pub circuit_holder: bool, -} - impl From<&stationpedia::LogicInfo> for LogicInfo { fn from(value: &stationpedia::LogicInfo) -> Self { LogicInfo { - logic_slot_types: value.logic_slot_types.clone(), - logic_types: value.logic_types.clone(), + logic_slot_types: value + .logic_slot_types + .iter() + .map(|(index, slt_map)| { + ( + *index, + slt_map + .slot_types + .iter() + .map(|(key, val)| { + ( + key.parse().unwrap_or_else(|err| { + panic!("failed to parse logic slot type: {err}") + }), + val.parse().unwrap_or_else(|err| { + panic!("failed to parse memory access: {err}") + }), + ) + }) + .collect(), + ) + }) + .collect(), + logic_types: value + .logic_types + .types + .iter() + .map(|(key, val)| { + ( + key.parse() + .unwrap_or_else(|err| panic!("failed to parse logic type: {err}")), + val.parse() + .unwrap_or_else(|err| panic!("failed to parse memory access: {err}")), + ) + }) + .collect(), modes: None, transmission_receiver: false, wireless_logic: false, @@ -461,63 +500,32 @@ impl From<&stationpedia::LogicInfo> for LogicInfo { } } -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -pub struct ItemInfo { - pub consumable: bool, - #[serde(skip_serializing_if = "Option::is_none")] - pub filter_type: Option, - pub ingredient: bool, - pub max_quantity: u32, - #[serde(skip_serializing_if = "Option::is_none")] - pub reagents: Option>, - pub slot_class: String, - pub sorting_class: String, -} - impl From<&stationpedia::Item> for ItemInfo { fn from(item: &stationpedia::Item) -> Self { ItemInfo { consumable: item.consumable.unwrap_or(false), - filter_type: item.filter_type.clone(), + filter_type: item.filter_type.as_ref().map(|typ| { + typ.parse() + .unwrap_or_else(|err| panic!("failed to parse filter type: {err}")) + }), ingredient: item.ingredient.unwrap_or(false), max_quantity: item.max_quantity.unwrap_or(1.0) as u32, reagents: item .reagents .as_ref() .map(|map| map.iter().map(|(key, val)| (key.clone(), *val)).collect()), - slot_class: item.slot_class.clone(), - sorting_class: item.sorting_class.clone(), + slot_class: item + .slot_class + .parse() + .unwrap_or_else(|err| panic!("failed to parse slot class: {err}")), + sorting_class: item + .sorting_class + .parse() + .unwrap_or_else(|err| panic!("failed to parse sorting class: {err}")), } } } -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -pub struct ConnectionInfo { - pub typ: String, - pub role: String, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -pub struct DeviceInfo { - pub connection_list: Vec, - #[serde(skip_serializing_if = "Option::is_none")] - 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, -} - impl From<&stationpedia::Device> for DeviceInfo { fn from(value: &stationpedia::Device) -> Self { DeviceInfo { @@ -525,8 +533,12 @@ impl From<&stationpedia::Device> for DeviceInfo { .connection_list .iter() .map(|(typ, role)| ConnectionInfo { - typ: typ.to_string(), - role: role.to_string(), + typ: typ + .parse() + .unwrap_or_else(|err| panic!("failed to parse connection type: {err}")), + role: role + .parse() + .unwrap_or_else(|err| panic!("failed to parse connection role: {err}")), }) .collect(), device_pins_length: value.devices_length, @@ -542,13 +554,6 @@ impl From<&stationpedia::Device> for DeviceInfo { } } -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -pub struct StructureInfo { - pub small_grid: bool, -} - impl From<&stationpedia::Structure> for StructureInfo { fn from(value: &stationpedia::Structure) -> Self { StructureInfo { @@ -556,14 +561,6 @@ impl From<&stationpedia::Structure> for StructureInfo { } } } -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -pub struct Instruction { - pub description: String, - pub typ: String, - pub value: i64, -} impl From<&stationpedia::Instruction> for Instruction { fn from(value: &stationpedia::Instruction) -> Self { @@ -575,16 +572,6 @@ impl From<&stationpedia::Instruction> for Instruction { } } -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -pub struct MemoryInfo { - #[serde(skip_serializing_if = "Option::is_none")] - pub instructions: Option>, - pub memory_access: String, - pub memory_size: i64, -} - impl From<&stationpedia::Memory> for MemoryInfo { fn from(value: &stationpedia::Memory) -> Self { MemoryInfo { @@ -594,96 +581,11 @@ impl From<&stationpedia::Memory> for MemoryInfo { .map(|(key, value)| (key.clone(), value.into())) .collect() }), - memory_access: value.memory_access.clone(), + memory_access: value + .memory_access + .parse() + .unwrap_or_else(|err| panic!("failed to parse memory access: {err}")), memory_size: value.memory_size, } } } - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -pub struct StructureTemplate { - pub prefab: PrefabInfo, - pub structure: StructureInfo, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -pub struct StructureSlotsTemplate { - pub prefab: PrefabInfo, - pub structure: StructureInfo, - pub slots: Vec, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -pub struct StructureLogicTemplate { - pub prefab: PrefabInfo, - pub structure: StructureInfo, - pub logic: LogicInfo, - pub slots: Vec, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -pub struct StructureLogicDeviceTemplate { - pub prefab: PrefabInfo, - pub structure: StructureInfo, - pub logic: LogicInfo, - pub slots: Vec, - pub device: DeviceInfo, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -pub struct StructureLogicDeviceMemoryTemplate { - pub prefab: PrefabInfo, - pub structure: StructureInfo, - pub logic: LogicInfo, - pub slots: Vec, - pub device: DeviceInfo, - pub memory: MemoryInfo, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -pub struct ItemTemplate { - pub prefab: PrefabInfo, - pub item: ItemInfo, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -pub struct ItemSlotsTemplate { - pub prefab: PrefabInfo, - pub item: ItemInfo, - pub slots: Vec, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -pub struct ItemLogicTemplate { - pub prefab: PrefabInfo, - pub item: ItemInfo, - pub logic: LogicInfo, - pub slots: Vec, -} - -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -pub struct ItemLogicMemoryTemplate { - pub prefab: PrefabInfo, - pub item: ItemInfo, - pub logic: LogicInfo, - pub slots: Vec, - pub memory: MemoryInfo, -} diff --git a/xtask/src/generate/enums.rs b/xtask/src/generate/enums.rs index fe83464..7f38d6f 100644 --- a/xtask/src/generate/enums.rs +++ b/xtask/src/generate/enums.rs @@ -6,17 +6,17 @@ use std::{ path::PathBuf, str::FromStr, }; + +use proc_macro2::{Ident, Span, TokenStream}; +use quote::quote; + pub fn generate_enums( stationpedia: &crate::stationpedia::Stationpedia, enums: &crate::enums::Enums, workspace: &std::path::Path, ) -> color_eyre::Result> { println!("Writing Enum Listings ..."); - let enums_path = workspace - .join("ic10emu") - .join("src") - .join("vm") - .join("enums"); + let enums_path = workspace.join("stationeers_data").join("src").join("enums"); if !enums_path.exists() { std::fs::create_dir(&enums_path)?; } @@ -81,172 +81,136 @@ pub fn generate_enums( ]) } +#[allow(clippy::type_complexity)] fn write_enum_aggragate_mod( writer: &mut BufWriter, enums: &BTreeMap, ) -> color_eyre::Result<()> { - let variant_lines = enums - .iter() - .map(|(name, listing)| { - let name = if name.is_empty() || name == "_unnamed" { - "Unnamed" - } else { - name - }; - format!( - " {}({}),", - name.to_case(Case::Pascal), - listing.enum_name.to_case(Case::Pascal) - ) - }) - .collect::>() - .join("\n"); - let value_arms = enums - .keys() - .map(|name| { - let variant_name = (if name.is_empty() || name == "_unnamed" { - "Unnamed" - } else { - name - }) - .to_case(Case::Pascal); - format!(" Self::{variant_name}(enm) => *enm as u32,",) - }) - .collect::>() - .join("\n"); - - let get_str_arms = enums - .keys() - .map(|name| { - let variant_name = (if name.is_empty() || name == "_unnamed" { - "Unnamed" - } else { - name - }) - .to_case(Case::Pascal); - format!(" Self::{variant_name}(enm) => enm.get_str(prop),",) - }) - .collect::>() - .join("\n"); - let iter_chain = enums + let ( + (variant_lines, value_arms), + ( + (get_str_arms, iter_chain), + (from_str_arms_iter, display_arms) + ) + ): ( + (Vec<_>, Vec<_>), + ((Vec<_>, Vec<_>), (Vec<_>, Vec<_>)), + ) = enums .iter() .enumerate() .map(|(index, (name, listing))| { - let variant_name = (if name.is_empty() || name == "_unnamed" { + let variant_name: TokenStream = if name.is_empty() || name == "_unnamed" { "Unnamed" } else { name - }) - .to_case(Case::Pascal); - let enum_name = listing.enum_name.to_case(Case::Pascal); - if index == 0 { - format!("{enum_name}::iter().map(Self::{variant_name})") - } else { - format!(".chain({enum_name}::iter().map(Self::{variant_name}))") } - }) - .collect::>() - .join("\n"); - write!( - writer, - "pub enum BasicEnum {{\n\ - {variant_lines} - }}\n\ - impl BasicEnum {{\n \ - pub fn get_value(&self) -> u32 {{\n \ - match self {{\n \ - {value_arms}\n \ - }}\n \ - }}\n\ - pub fn get_str(&self, prop: &str) -> Option<&'static str> {{\n \ - match self {{\n \ - {get_str_arms}\n \ - }}\n \ - }}\n\ - pub fn iter() -> impl std::iter::Iterator {{\n \ - use strum::IntoEnumIterator;\n \ - {iter_chain}\n \ - }} - }}\n\ - " - )?; - let arms = enums - .iter() - .flat_map(|(name, listing)| { - let variant_name = (if name.is_empty() || name == "_unnamed" { - "Unnamed" - } else { - name - }) - .to_case(Case::Pascal); - let name = if name == "_unnamed" { - "".to_string() - } else { - name.clone() - }; - let enum_name = listing.enum_name.to_case(Case::Pascal); - listing.values.keys().map(move |variant| { - let sep = if name.is_empty() { "" } else { "." }; - let pat = format!("{name}{sep}{variant}").to_lowercase(); - let variant = variant.to_case(Case::Pascal); - format!("\"{pat}\" => Ok(Self::{variant_name}({enum_name}::{variant})),") - }) - }) - .collect::>() - .join("\n "); - write!( - writer, - "\ - impl std::str::FromStr for BasicEnum {{\n \ - type Err = crate::errors::ParseError;\n \ - fn from_str(s: &str) -> Result {{\n \ - let end = s.len();\n \ - match s.to_lowercase().as_str() {{\n \ - {arms}\n \ - _ => Err(crate::errors::ParseError{{ line: 0, start: 0, end, msg: format!(\"Unknown enum '{{}}'\", s) }})\n \ - }}\n \ - }}\n\ - }}\ - " - )?; - let display_arms = enums - .keys() - .map(|name| { - let variant_name = (if name.is_empty() || name == "_unnamed" { - "Unnamed" - } else { - name - }) - .to_case(Case::Pascal); - let name = if name == "_unnamed" { - "".to_string() - } else { - name.clone() - }; - let sep = if name.is_empty() || name == "_unnamed" { + .to_case(Case::Pascal) + .parse() + .unwrap(); + let fromstr_variant_name = variant_name.clone(); + let enum_name: TokenStream = listing.enum_name.to_case(Case::Pascal).parse().unwrap(); + let display_sep = if name.is_empty() || name == "_unnamed" { "" } else { "." }; - let pat = format!("{name}{sep}{{}}"); - format!(" Self::{variant_name}(enm) => write!(f, \"{pat}\", enm),",) + let display_pat = format!("{name}{display_sep}{{}}"); + let name: TokenStream = if name == "_unnamed" { + "".to_string() + } else { + name.clone() + } + .parse() + .unwrap(); + ( + ( + quote! { + #variant_name(#enum_name), + }, + quote! { + Self::#variant_name(enm) => *enm as u32, + }, + ), + ( + ( + quote! { + Self::#variant_name(enm) => enm.get_str(prop), + }, + if index == 0 { + quote! { + #enum_name::iter().map(Self::#variant_name) + } + } else { + quote! { + .chain(#enum_name::iter().map(Self::#variant_name)) + } + }, + ), + ( + listing.values.keys().map(move |variant| { + let sep = if name.is_empty() { "" } else { "." }; + let fromstr_pat = format!("{name}{sep}{variant}").to_lowercase(); + let variant: TokenStream = variant.to_case(Case::Pascal).parse().unwrap(); + quote! { + #fromstr_pat => Ok(Self::#fromstr_variant_name(#enum_name::#variant)), + } + }), + quote! { + Self::#variant_name(enm) => write!(f, #display_pat, enm), + }, + ), + ), + ) }) - .collect::>() - .join("\n "); - write!( - writer, - "\ - impl std::fmt::Display for BasicEnum {{\n \ - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {{\n \ - match self {{\n \ - {display_arms}\n \ - }}\n \ - }}\n\ - }}\ - " - )?; + .unzip(); + + let from_str_arms = from_str_arms_iter.into_iter().flatten().collect::>(); + + let tokens = quote! { + pub enum BasicEnum { + #(#variant_lines)* + } + + impl BasicEnum { + pub fn get_value(&self) -> u32 { + match self { + #(#value_arms)* + } + } + pub fn get_str(&self, prop: &str) -> Option<&'static str> { + match self { + #(#get_str_arms)* + } + } + pub fn iter() -> impl std::iter::Iterator { + use strum::IntoEnumIterator; + #(#iter_chain)* + } + } + + impl std::str::FromStr for BasicEnum { + type Err = super::ParseError; + fn from_str(s: &str) -> Result { + match s.to_lowercase().as_str() { + #(#from_str_arms)* + _ => 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 { + #(#display_arms)* + } + } + } + + }; + write!(writer, "{tokens}",)?; Ok(()) } + pub fn write_enum_listing( writer: &mut BufWriter, enm: &crate::enums::EnumListing, @@ -357,10 +321,13 @@ fn write_repr_enum_use_header( ) -> color_eyre::Result<()> { write!( writer, - "use serde_derive::{{Deserialize, Serialize}};\n\ - use strum::{{\n \ - AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr,\n\ - }};\n" + "{}", + quote! { + use serde_derive::{{Deserialize, Serialize}}; + use strum::{ + AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr, + }; + } )?; Ok(()) } @@ -369,14 +336,15 @@ fn write_repr_basic_use_header( writer: &mut BufWriter, script_enums: &[&crate::enums::EnumListing], ) -> color_eyre::Result<()> { + let enums = script_enums + .iter() + .map(|enm| Ident::new(&enm.enum_name.to_case(Case::Pascal), Span::call_site())) + .collect::>(); + write!( writer, - "use crate::vm::enums::script_enums::{{ {} }};", - script_enums - .iter() - .map(|enm| enm.enum_name.to_case(Case::Pascal)) - .collect::>() - .join(", ") + "{}", + quote! {use super::script_enums::{ #(#enums),*};}, )?; Ok(()) } @@ -388,60 +356,104 @@ fn write_repr_enum<'a, T: std::io::Write, I, P>( use_phf: bool, ) -> color_eyre::Result<()> where - P: Display + FromStr + Ord + 'a, + P: Display + FromStr + num::integer::Integer + num::cast::AsPrimitive + 'a, I: IntoIterator)>, { - let additional_strum = if use_phf { "#[strum(use_phf)]\n" } else { "" }; - let repr = std::any::type_name::

(); + let additional_strum = if use_phf { + quote! {#[strum(use_phf)]} + } else { + TokenStream::new() + }; + let repr = Ident::new(std::any::type_name::

(), Span::call_site()); let mut sorted: Vec<_> = variants.into_iter().collect::>(); sorted.sort_by_key(|(_, variant)| &variant.value); - let default_derive = if sorted + let mut derives = [ + "Debug", + "Display", + "Clone", + "Copy", + "PartialEq", + "Eq", + "PartialOrd", + "Ord", + "Hash", + "EnumString", + "AsRefStr", + "EnumProperty", + "EnumIter", + "FromRepr", + "Serialize", + "Deserialize", + ] + .into_iter() + .map(|d| Ident::new(d, Span::call_site())) + .collect::>(); + if sorted .iter() .any(|(name, _)| name == "None" || name == "Default") { - "Default, " - } else { - "" - }; + derives.insert(0, Ident::new("Default", Span::call_site())); + } + + let variants = sorted + .iter() + .map(|(name, variant)| { + let variant_name = Ident::new( + &name.replace('.', "").to_case(Case::Pascal), + Span::call_site(), + ); + let mut props = Vec::new(); + if variant.deprecated { + props.push(quote! {deprecated = "true"}); + } + for (prop_name, prop_val) in &variant.props { + let prop_name = Ident::new(prop_name, Span::call_site()); + let val_string = prop_val.to_string(); + props.push(quote! { #prop_name = #val_string }); + } + let val: TokenStream = format!("{}{repr}", variant.value).parse().unwrap(); + let val_string = variant.value.as_().to_string(); + props.push(quote! {value = #val_string }); + let default = if variant_name == "None" || variant_name == "Default" { + quote! {#[default]} + } else { + TokenStream::new() + }; + quote! { + #[strum(serialize = #name)] + #[strum(props(#(#props),*))] + #default + #variant_name = #val, + } + }) + .collect::>(); + let name = Ident::new(name, Span::call_site()); + write!( writer, - "#[derive(Debug, {default_derive}Display, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, EnumString, AsRefStr, EnumProperty, EnumIter, FromRepr, Serialize, Deserialize)]\n\ - {additional_strum}\ - #[repr({repr})]\n\ - pub enum {name} {{\n" + "{}", + quote! { + #[derive(#(#derives),*)] + #additional_strum + #[repr(#repr)] + pub enum #name { + #(#variants)* + } + + impl TryFrom for #name { + type Error = super::ParseError; + fn try_from(value: f64) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = #name::iter().find(|enm| (f64::from(*enm as #repr) - value).abs() < f64::EPSILON ) { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string() + }) + } + } + } + } )?; - for (name, variant) in sorted { - let variant_name = name.replace('.', "").to_case(Case::Pascal); - let serialize = vec![name.clone()]; - 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()); - } - for (prop_name, prop_val) in &variant.props { - props.push(format!("{prop_name} = r#\"{prop_val}\"#")); - } - let val = &variant.value; - props.push(format!("value = \"{val}\"")); - let props_str = if !props.is_empty() { - format!(", props( {} )", props.join(", ")) - } else { - "".to_owned() - }; - let default = if variant_name == "None" || variant_name == "Default" { - "#[default]" - } else { - "" - }; - writeln!( - writer, - " #[strum({serialize_str}{props_str})]{default} {variant_name} = {val}{repr}," - )?; - } - writeln!(writer, "}}")?; Ok(()) } diff --git a/xtask/src/generate/instructions.rs b/xtask/src/generate/instructions.rs index 419d896..fea2579 100644 --- a/xtask/src/generate/instructions.rs +++ b/xtask/src/generate/instructions.rs @@ -1,4 +1,6 @@ use convert_case::{Case, Casing}; +use proc_macro2::{Ident, Span}; +use quote::quote; use std::{collections::BTreeMap, path::PathBuf}; use crate::{generate::utils, stationpedia}; @@ -47,82 +49,93 @@ fn write_instructions_enum( write!( writer, - "use serde_derive::{{Deserialize, Serialize}};\n\ - use strum::{{\n \ - Display, EnumIter, EnumProperty, EnumString, FromRepr,\n\ - }};\n - use crate::vm::object::traits::Programmable;\n\ - " + "{}", + quote::quote! { + use serde_derive::{Deserialize, Serialize}; + use strum::{ + Display, EnumIter, EnumProperty, EnumString, FromRepr, + }; + use crate::vm::object::traits::Programmable; + } )?; + let inst_variants = instructions + .iter() + .map(|(name, info)| { + let example = &info.example; + let desc = &info.desc; + let op_count = count_operands(&info.example).to_string(); + let props = + quote::quote! { props( example = #example, desc = #desc, operands = #op_count ) }; + let name = Ident::new(&name.to_case(Case::Pascal), Span::call_site()); + quote::quote! { + #[strum(#props)] #name, + } + }) + .collect::>(); + write!( writer, - "#[derive(Debug, Display, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Serialize, Deserialize)]\n\ - #[derive(EnumIter, EnumString, EnumProperty, FromRepr)]\n\ - #[strum(use_phf, serialize_all = \"lowercase\")]\n\ - #[serde(rename_all = \"lowercase\")]\n\ - pub enum InstructionOp {{\n\ - " + "{}", + quote::quote! {#[derive(Debug, Display, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Serialize, Deserialize)] + #[derive(EnumIter, EnumString, EnumProperty, FromRepr)] + #[strum(use_phf, serialize_all = "lowercase")] + #[serde(rename_all = "lowercase")] + pub enum InstructionOp { + Nop, + #(#inst_variants)* + + } + } )?; - writeln!(writer, " Nop,")?; - for (name, info) in &instructions { - let props_str = format!( - "props( example = \"{}\", desc = \"{}\", operands = \"{}\" )", - &info.example, - &info.desc, - count_operands(&info.example) - ); - writeln!( - writer, - " #[strum({props_str})] {},", - name.to_case(Case::Pascal) - )?; - } - writeln!(writer, "}}")?; + + let exec_arms = instructions + .iter() + .map(|(name, info)| { + let num_operands = count_operands(&info.example); + let operands = (0..num_operands) + .map(|i| quote! {&operands[#i]}) + .collect::>(); + + let trait_name = Ident::new(&name.to_case(Case::Pascal), Span::call_site()); + let fn_name = Ident::new(&format!("execute_{name}"), Span::call_site()); + quote! { + Self::#trait_name => ic.#fn_name(#(#operands),*), + } + }) + .collect::>(); write!( writer, - "impl InstructionOp {{\n \ - pub fn num_operands(&self) -> usize {{\n \ - self.get_str(\"operands\").expect(\"instruction without operand property\").parse::().expect(\"invalid instruction operand property\")\n \ - }}\n\ - \n \ - pub fn execute(\n \ - &self,\n \ - ic: &mut T,\n \ - operands: &[crate::vm::instructions::operands::Operand],\n \ - ) -> Result<(), crate::errors::ICError>\n \ - where\n \ - T: Programmable,\n\ - {{\n \ - let num_operands = self.num_operands();\n \ - if operands.len() != num_operands {{\n \ - return Err(crate::errors::ICError::mismatch_operands(operands.len(), num_operands as u32));\n \ - }}\n \ - match self {{\n \ - Self::Nop => Ok(()),\n \ - " - )?; + "{}", + quote! { + impl InstructionOp { + pub fn num_operands(&self) -> usize { + self.get_str("operands") + .expect("instruction without operand property") + .parse::() + .expect("invalid instruction operand property") + } - for (name, info) in instructions { - let num_operands = count_operands(&info.example); - let operands = (0..num_operands) - .map(|i| format!("&operands[{}]", i)) - .collect::>() - .join(", "); - let trait_name = name.to_case(Case::Pascal); - writeln!( - writer, - " Self::{trait_name} => ic.execute_{name}({operands}),", - )?; - } - - write!( - writer, - " }}\ - }}\n\ - }} - " + 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(()), + #(#exec_arms)* + } + } + } + } )?; Ok(()) @@ -134,7 +147,8 @@ fn write_instruction_trait( ) -> color_eyre::Result<()> { let (name, info) = instruction; let op_name = name.to_case(Case::Pascal); - let trait_name = format!("{op_name}Instruction"); + let trait_name = Ident::new(&format!("{op_name}Instruction"), Span::call_site()); + let op_ident = Ident::new(&op_name, Span::call_site()); let operands = operand_names(&info.example) .iter() .map(|name| { @@ -142,13 +156,13 @@ fn write_instruction_trait( if n == "str" { n = "string"; } - format!( - "{}: &crate::vm::instructions::operands::Operand", - n.to_case(Case::Snake) - ) + let n = Ident::new(&n.to_case(Case::Snake), Span::call_site()); + quote! { + #n: &crate::vm::instructions::operands::Operand + } }) - .collect::>() - .join(", "); + .collect::>(); + let operands_inner = operand_names(&info.example) .iter() .map(|name| { @@ -156,13 +170,13 @@ fn write_instruction_trait( if n == "str" { n = "string"; } - format!( - "{}: &crate::vm::instructions::operands::InstOperand", - n.to_case(Case::Snake) - ) + let n = Ident::new(&n.to_case(Case::Snake), Span::call_site()); + quote! { + #n: &crate::vm::instructions::operands::InstOperand + } }) - .collect::>() - .join(", "); + .collect::>(); + let operand_call = operand_names(&info.example) .iter() .enumerate() @@ -171,24 +185,27 @@ fn write_instruction_trait( if n == "str" { n = "string"; } - format!( - "&crate::vm::instructions::operands::InstOperand::new({}, InstructionOp::{op_name}, {index})", - n.to_case(Case::Snake) - ) + let n = Ident::new(&n.to_case(Case::Snake), Span::call_site()); + quote!{ + &crate::vm::instructions::operands::InstOperand::new(#n, InstructionOp::#op_ident, #index) + } }) - .collect::>() - .join(", "); + .collect::>(); let example = utils::strip_color(&info.example); + let fn_name = Ident::new(&format!("execute_{name}"), Span::call_site()); write!( writer, - "pub trait {trait_name}: IntegratedCircuit {{\n \ - /// {example} \n \ - fn execute_{name}(&mut self, {operands}) -> Result<(), crate::errors::ICError> {{\n \ - {trait_name}::execute_inner(self, {operand_call})\n \ - }}\n \ - /// {example} \n \ - fn execute_inner(&mut self, {operands_inner}) -> Result<(), crate::errors::ICError>;\n\ - }}" + "{}", + quote! { + pub trait #trait_name: IntegratedCircuit { + #[doc = #example] + fn #fn_name(&mut self, #(#operands),*) -> Result<(), crate::errors::ICError> { + #trait_name::execute_inner(self, #(#operand_call),*) + } + #[doc = #example] + fn execute_inner(&mut self, #(#operands_inner),*) -> Result<(), crate::errors::ICError>; + } + } )?; Ok(()) } @@ -208,10 +225,11 @@ fn operand_names(example: &str) -> Vec { fn write_instruction_trait_use(writer: &mut T) -> color_eyre::Result<()> { write!( writer, - "\ - use crate::vm::object::traits::IntegratedCircuit;\n\ - use crate::vm::instructions::enums::InstructionOp;\n\ - " + "{}", + quote! { + use crate::vm::object::traits::IntegratedCircuit; + use crate::vm::instructions::enums::InstructionOp; + } )?; Ok(()) } @@ -222,15 +240,20 @@ fn write_instruction_super_trait( ) -> color_eyre::Result<()> { let traits = instructions .keys() - .map(|name| format!("{}Instruction", name.to_case(Case::Pascal))) - .collect::>() - .join(" + "); + .map(|name| { + Ident::new( + &format!("{}Instruction", name.to_case(Case::Pascal)), + Span::call_site(), + ) + }) + .collect::>(); write!( writer, - "\ - pub trait ICInstructable: {traits} {{}}\n\ - impl ICInstructable for T where T: {traits} {{}} - " + "{}", + quote! { + pub trait ICInstructable: #(#traits +)* {} + impl ICInstructable for T where T: #(#traits )+* {} + } )?; Ok(()) } diff --git a/xtask/src/main.rs b/xtask/src/main.rs index 812b5f8..b5bdd6a 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -24,6 +24,17 @@ struct Args { const PACKAGES: &[&str] = &["ic10lsp_wasm", "ic10emu_wasm"]; const VALID_VERSION_TYPE: &[&str] = &["patch", "minor", "major"]; +const VALID_GENERATE_TYPE: &[&str] = &["enums", "instructions", "database"]; +const DEFAULT_GENERATE: &[&str] = &["enums"]; +fn parse_generate_modules(s: &str) -> Result { + if !VALID_GENERATE_TYPE.contains(&s) { + let valid_str = VALID_GENERATE_TYPE.join(", "); + return Err(format!( + "{s} is not a valid generate module. One of: {valid_str}" + )); + } + Ok(s.to_string()) +} #[derive(Debug, Subcommand)] enum Task { @@ -54,6 +65,8 @@ enum Task { /// update changelog Changelog {}, Generate { + #[arg(long, short = 'm', value_delimiter = ',', default_values = DEFAULT_GENERATE, value_parser = parse_generate_modules)] + modules: Vec, #[arg()] /// Path to Stationeers installation. Used to locate "Stationpedia.json" and "Enums.json" /// generated by https://github.com/Ryex/StationeersStationpediaExtractor @@ -166,7 +179,7 @@ fn main() -> color_eyre::Result<()> { .status() .map_err(|e| Error::Command(format!("{}", cmd.get_program().to_string_lossy()), e))?; } - Task::Generate { path } => { + Task::Generate { modules, path } => { let path = match path { Some(path) => { let mut path = std::path::PathBuf::from(path); @@ -214,7 +227,11 @@ fn main() -> color_eyre::Result<()> { && path.join("Stationpedia.json").exists() && path.join("Enums.json").exists() { - generate::generate(&path, &workspace)?; + generate::generate( + &path, + &workspace, + &modules.iter().map(String::as_str).collect::>(), + )?; } else { return Err(Error::BadStationeersPath(path).into()); } diff --git a/xtask/src/stationpedia.rs b/xtask/src/stationpedia.rs index a3e0757..30371cd 100644 --- a/xtask/src/stationpedia.rs +++ b/xtask/src/stationpedia.rs @@ -214,7 +214,7 @@ pub struct Memory { #[serde(rename = "MemoryAccess")] pub memory_access: String, #[serde(rename = "MemorySize")] - pub memory_size: i64, + pub memory_size: u32, #[serde(rename = "MemorySizeReadable")] pub memory_size_readable: String, } @@ -308,7 +308,7 @@ pub struct Device { #[serde(rename = "ConnectionList")] pub connection_list: Vec<(String, String)>, #[serde(rename = "DevicesLength")] - pub devices_length: Option, + pub devices_length: Option, #[serde(rename = "HasActivateState")] pub has_activate_state: bool, #[serde(rename = "HasAtmosphere")] From bc8420010546606667b465d23c8267f681c509ae Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Mon, 20 May 2024 22:18:12 -0700 Subject: [PATCH 25/50] refactor(vm): update prefab database with new data --- data/database.json | 54314 +++++++++++++++++- rust-analyzer.json | 1 - stationeers_data/src/database/prefab_map.rs | 3231 +- stationeers_data/src/templates.rs | 196 + xtask/src/generate/database.rs | 599 +- xtask/src/stationpedia.rs | 86 +- 6 files changed, 58299 insertions(+), 128 deletions(-) diff --git a/data/database.json b/data/database.json index 681d84b..b092754 100644 --- a/data/database.json +++ b/data/database.json @@ -1 +1,54313 @@ -{"prefabs":{"AccessCardBlack":{"prefab":{"prefab_name":"AccessCardBlack","prefab_hash":-1330388999,"desc":"","name":"Access Card (Black)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardBlue":{"prefab":{"prefab_name":"AccessCardBlue","prefab_hash":-1411327657,"desc":"","name":"Access Card (Blue)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardBrown":{"prefab":{"prefab_name":"AccessCardBrown","prefab_hash":1412428165,"desc":"","name":"Access Card (Brown)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardGray":{"prefab":{"prefab_name":"AccessCardGray","prefab_hash":-1339479035,"desc":"","name":"Access Card (Gray)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardGreen":{"prefab":{"prefab_name":"AccessCardGreen","prefab_hash":-374567952,"desc":"","name":"Access Card (Green)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardKhaki":{"prefab":{"prefab_name":"AccessCardKhaki","prefab_hash":337035771,"desc":"","name":"Access Card (Khaki)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardOrange":{"prefab":{"prefab_name":"AccessCardOrange","prefab_hash":-332896929,"desc":"","name":"Access Card (Orange)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardPink":{"prefab":{"prefab_name":"AccessCardPink","prefab_hash":431317557,"desc":"","name":"Access Card (Pink)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardPurple":{"prefab":{"prefab_name":"AccessCardPurple","prefab_hash":459843265,"desc":"","name":"Access Card (Purple)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardRed":{"prefab":{"prefab_name":"AccessCardRed","prefab_hash":-1713748313,"desc":"","name":"Access Card (Red)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardWhite":{"prefab":{"prefab_name":"AccessCardWhite","prefab_hash":2079959157,"desc":"","name":"Access Card (White)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"AccessCardYellow":{"prefab":{"prefab_name":"AccessCardYellow","prefab_hash":568932536,"desc":"","name":"Access Card (Yellow)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"AccessCard","sorting_class":"Default"}},"ApplianceChemistryStation":{"prefab":{"prefab_name":"ApplianceChemistryStation","prefab_hash":1365789392,"desc":"","name":"Chemistry Station"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"ApplianceDeskLampLeft":{"prefab":{"prefab_name":"ApplianceDeskLampLeft","prefab_hash":-1683849799,"desc":"","name":"Appliance Desk Lamp Left"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"}},"ApplianceDeskLampRight":{"prefab":{"prefab_name":"ApplianceDeskLampRight","prefab_hash":1174360780,"desc":"","name":"Appliance Desk Lamp Right"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"}},"ApplianceMicrowave":{"prefab":{"prefab_name":"ApplianceMicrowave","prefab_hash":-1136173965,"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.","name":"Microwave"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"slots":[{"name":"Output","typ":"None"}]},"AppliancePackagingMachine":{"prefab":{"prefab_name":"AppliancePackagingMachine","prefab_hash":-749191906,"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 ","name":"Basic Packaging Machine"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"slots":[{"name":"Export","typ":"None"}]},"AppliancePaintMixer":{"prefab":{"prefab_name":"AppliancePaintMixer","prefab_hash":-1339716113,"desc":"","name":"Paint Mixer"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"slots":[{"name":"Output","typ":"Bottle"}]},"AppliancePlantGeneticAnalyzer":{"prefab":{"prefab_name":"AppliancePlantGeneticAnalyzer","prefab_hash":-1303038067,"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.","name":"Plant Genetic Analyzer"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"slots":[{"name":"Input","typ":"Tool"}]},"AppliancePlantGeneticSplicer":{"prefab":{"prefab_name":"AppliancePlantGeneticSplicer","prefab_hash":-1094868323,"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.","name":"Plant Genetic Splicer"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"slots":[{"name":"Source Plant","typ":"Plant"},{"name":"Target Plant","typ":"Plant"}]},"AppliancePlantGeneticStabilizer":{"prefab":{"prefab_name":"AppliancePlantGeneticStabilizer","prefab_hash":871432335,"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 ","name":"Plant Genetic Stabilizer"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"slots":[{"name":"Plant","typ":"Plant"}]},"ApplianceReagentProcessor":{"prefab":{"prefab_name":"ApplianceReagentProcessor","prefab_hash":1260918085,"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.","name":"Reagent Processor"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"slots":[{"name":"Input","typ":"None"},{"name":"Output","typ":"None"}]},"ApplianceSeedTray":{"prefab":{"prefab_name":"ApplianceSeedTray","prefab_hash":142831994,"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.","name":"Appliance Seed Tray"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"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"}]},"ApplianceTabletDock":{"prefab":{"prefab_name":"ApplianceTabletDock","prefab_hash":1853941363,"desc":"","name":"Tablet Dock"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Appliance","sorting_class":"Appliances"},"slots":[{"name":"","typ":"Tool"}]},"AutolathePrinterMod":{"prefab":{"prefab_name":"AutolathePrinterMod","prefab_hash":221058307,"desc":"Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Autolathe Printer Mod"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"Battery_Wireless_cell":{"prefab":{"prefab_name":"Battery_Wireless_cell","prefab_hash":-462415758,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Battery","sorting_class":"Default"},"logic":{"logic_slot_types":{},"logic_types":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"Battery_Wireless_cell_Big":{"prefab":{"prefab_name":"Battery_Wireless_cell_Big","prefab_hash":-41519077,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery Wireless Cell (Big)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Battery","sorting_class":"Default"},"logic":{"logic_slot_types":{},"logic_types":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"CardboardBox":{"prefab":{"prefab_name":"CardboardBox","prefab_hash":-1976947556,"desc":"","name":"Cardboard Box"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Storage"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"CartridgeAccessController":{"prefab":{"prefab_name":"CartridgeAccessController","prefab_hash":-1634532552,"desc":"","name":"Cartridge (Access Controller)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeAtmosAnalyser":{"prefab":{"prefab_name":"CartridgeAtmosAnalyser","prefab_hash":-1550278665,"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.","name":"Atmos Analyzer"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeConfiguration":{"prefab":{"prefab_name":"CartridgeConfiguration","prefab_hash":-932136011,"desc":"","name":"Configuration"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeElectronicReader":{"prefab":{"prefab_name":"CartridgeElectronicReader","prefab_hash":-1462180176,"desc":"","name":"eReader"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeGPS":{"prefab":{"prefab_name":"CartridgeGPS","prefab_hash":-1957063345,"desc":"","name":"GPS"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeGuide":{"prefab":{"prefab_name":"CartridgeGuide","prefab_hash":872720793,"desc":"","name":"Guide"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeMedicalAnalyser":{"prefab":{"prefab_name":"CartridgeMedicalAnalyser","prefab_hash":-1116110181,"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.","name":"Medical Analyzer"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeNetworkAnalyser":{"prefab":{"prefab_name":"CartridgeNetworkAnalyser","prefab_hash":1606989119,"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.","name":"Network Analyzer"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeOreScanner":{"prefab":{"prefab_name":"CartridgeOreScanner","prefab_hash":-1768732546,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet.","name":"Ore Scanner"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeOreScannerColor":{"prefab":{"prefab_name":"CartridgeOreScannerColor","prefab_hash":1738236580,"desc":"When inserted into a Handheld Tablet the scanner will display minerals hidden underground in different colors on the tablet.","name":"Ore Scanner (Color)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgePlantAnalyser":{"prefab":{"prefab_name":"CartridgePlantAnalyser","prefab_hash":1101328282,"desc":"","name":"Cartridge Plant Analyser"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CartridgeTracker":{"prefab":{"prefab_name":"CartridgeTracker","prefab_hash":81488783,"desc":"","name":"Tracker"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Cartridge","sorting_class":"Default"}},"CircuitboardAdvAirlockControl":{"prefab":{"prefab_name":"CircuitboardAdvAirlockControl","prefab_hash":1633663176,"desc":"","name":"Advanced Airlock"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardAirControl":{"prefab":{"prefab_name":"CircuitboardAirControl","prefab_hash":1618019559,"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. ","name":"Air Control"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardAirlockControl":{"prefab":{"prefab_name":"CircuitboardAirlockControl","prefab_hash":912176135,"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.","name":"Airlock"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardCameraDisplay":{"prefab":{"prefab_name":"CircuitboardCameraDisplay","prefab_hash":-412104504,"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.","name":"Camera Display"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardDoorControl":{"prefab":{"prefab_name":"CircuitboardDoorControl","prefab_hash":855694771,"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.","name":"Door Control"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardGasDisplay":{"prefab":{"prefab_name":"CircuitboardGasDisplay","prefab_hash":-82343730,"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).","name":"Gas Display"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardGraphDisplay":{"prefab":{"prefab_name":"CircuitboardGraphDisplay","prefab_hash":1344368806,"desc":"","name":"Graph Display"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardHashDisplay":{"prefab":{"prefab_name":"CircuitboardHashDisplay","prefab_hash":1633074601,"desc":"","name":"Hash Display"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardModeControl":{"prefab":{"prefab_name":"CircuitboardModeControl","prefab_hash":-1134148135,"desc":"Can't decide which mode you love most? This circuit board allows you to switch any connected device between operation modes.","name":"Mode Control"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardPowerControl":{"prefab":{"prefab_name":"CircuitboardPowerControl","prefab_hash":-1923778429,"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. ","name":"Power Control"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardShipDisplay":{"prefab":{"prefab_name":"CircuitboardShipDisplay","prefab_hash":-2044446819,"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.","name":"Ship Display"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CircuitboardSolarControl":{"prefab":{"prefab_name":"CircuitboardSolarControl","prefab_hash":2020180320,"desc":"Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel.","name":"Solar Control"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"CompositeRollCover":{"prefab":{"prefab_name":"CompositeRollCover","prefab_hash":1228794916,"desc":"0.Operate\n1.Logic","name":"Composite Roll Cover"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"CrateMkII":{"prefab":{"prefab_name":"CrateMkII","prefab_hash":8709219,"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.","name":"Crate Mk II"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Storage"},"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"}]},"DecayedFood":{"prefab":{"prefab_name":"DecayedFood","prefab_hash":1531087544,"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","name":"Decayed Food"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":25,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"DeviceLfoVolume":{"prefab":{"prefab_name":"DeviceLfoVolume","prefab_hash":-1844430312,"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.","name":"Low frequency oscillator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","Time":"ReadWrite","Bpm":"ReadWrite","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Whole Note","1":"Half Note","2":"Quarter Note","3":"Eighth Note","4":"Sixteenth Note"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"DeviceStepUnit":{"prefab":{"prefab_name":"DeviceStepUnit","prefab_hash":1762696475,"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","name":"Device Step Unit"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Volume":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"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"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"DynamicAirConditioner":{"prefab":{"prefab_name":"DynamicAirConditioner","prefab_hash":519913639,"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.","name":"Portable Air Conditioner"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicCrate":{"prefab":{"prefab_name":"DynamicCrate","prefab_hash":1941079206,"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.","name":"Dynamic Crate"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Storage"},"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"}]},"DynamicGPR":{"prefab":{"prefab_name":"DynamicGPR","prefab_hash":-2085885850,"desc":"","name":""},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicGasCanisterAir":{"prefab":{"prefab_name":"DynamicGasCanisterAir","prefab_hash":-1713611165,"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.","name":"Portable Gas Tank (Air)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterCarbonDioxide":{"prefab":{"prefab_name":"DynamicGasCanisterCarbonDioxide","prefab_hash":-322413931,"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.","name":"Portable Gas Tank (CO2)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterEmpty":{"prefab":{"prefab_name":"DynamicGasCanisterEmpty","prefab_hash":-1741267161,"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.","name":"Portable Gas Tank"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterFuel":{"prefab":{"prefab_name":"DynamicGasCanisterFuel","prefab_hash":-817051527,"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.","name":"Portable Gas Tank (Fuel)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrogen":{"prefab":{"prefab_name":"DynamicGasCanisterNitrogen","prefab_hash":121951301,"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.","name":"Portable Gas Tank (Nitrogen)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterNitrousOxide":{"prefab":{"prefab_name":"DynamicGasCanisterNitrousOxide","prefab_hash":30727200,"desc":"","name":"Portable Gas Tank (Nitrous Oxide)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterOxygen":{"prefab":{"prefab_name":"DynamicGasCanisterOxygen","prefab_hash":1360925836,"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.","name":"Portable Gas Tank (Oxygen)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterPollutants":{"prefab":{"prefab_name":"DynamicGasCanisterPollutants","prefab_hash":396065382,"desc":"","name":"Portable Gas Tank (Pollutants)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterRocketFuel":{"prefab":{"prefab_name":"DynamicGasCanisterRocketFuel","prefab_hash":-8883951,"desc":"","name":"Dynamic Gas Canister Rocket Fuel"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterVolatiles":{"prefab":{"prefab_name":"DynamicGasCanisterVolatiles","prefab_hash":108086870,"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.","name":"Portable Gas Tank (Volatiles)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasCanisterWater":{"prefab":{"prefab_name":"DynamicGasCanisterWater","prefab_hash":197293625,"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.","name":"Portable Liquid Tank (Water)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"LiquidCanister"}]},"DynamicGasTankAdvanced":{"prefab":{"prefab_name":"DynamicGasTankAdvanced","prefab_hash":-386375420,"desc":"0.Mode0\n1.Mode1","name":"Gas Tank Mk II"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGasTankAdvancedOxygen":{"prefab":{"prefab_name":"DynamicGasTankAdvancedOxygen","prefab_hash":-1264455519,"desc":"0.Mode0\n1.Mode1","name":"Portable Gas Tank Mk II (Oxygen)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"None"}]},"DynamicGenerator":{"prefab":{"prefab_name":"DynamicGenerator","prefab_hash":-82087220,"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.","name":"Portable Generator"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"slots":[{"name":"Gas Canister","typ":"GasCanister"},{"name":"Battery","typ":"Battery"}]},"DynamicHydroponics":{"prefab":{"prefab_name":"DynamicHydroponics","prefab_hash":587726607,"desc":"","name":"Portable Hydroponics"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"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"}]},"DynamicLight":{"prefab":{"prefab_name":"DynamicLight","prefab_hash":-21970188,"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.","name":"Portable Light"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Open":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"DynamicLiquidCanisterEmpty":{"prefab":{"prefab_name":"DynamicLiquidCanisterEmpty","prefab_hash":-1939209112,"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.","name":"Portable Liquid Tank"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterEmpty":{"prefab":{"prefab_name":"DynamicMKIILiquidCanisterEmpty","prefab_hash":2130739600,"desc":"An empty, insulated liquid Gas Canister.","name":"Portable Liquid Tank Mk II"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicMKIILiquidCanisterWater":{"prefab":{"prefab_name":"DynamicMKIILiquidCanisterWater","prefab_hash":-319510386,"desc":"An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature.","name":"Portable Liquid Tank Mk II (Water)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"DynamicScrubber":{"prefab":{"prefab_name":"DynamicScrubber","prefab_hash":755048589,"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.","name":"Portable Air Scrubber"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Atmospherics"},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"}]},"DynamicSkeleton":{"prefab":{"prefab_name":"DynamicSkeleton","prefab_hash":106953348,"desc":"","name":"Skeleton"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ElectronicPrinterMod":{"prefab":{"prefab_name":"ElectronicPrinterMod","prefab_hash":-311170652,"desc":"Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Electronic Printer Mod"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ElevatorCarrage":{"prefab":{"prefab_name":"ElevatorCarrage","prefab_hash":-110788403,"desc":"","name":"Elevator"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"EntityChick":{"prefab":{"prefab_name":"EntityChick","prefab_hash":1730165908,"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.","name":"Entity Chick"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenBrown":{"prefab":{"prefab_name":"EntityChickenBrown","prefab_hash":334097180,"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.","name":"Entity Chicken Brown"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityChickenWhite":{"prefab":{"prefab_name":"EntityChickenWhite","prefab_hash":1010807532,"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.","name":"Entity Chicken White"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBlack":{"prefab":{"prefab_name":"EntityRoosterBlack","prefab_hash":966959649,"desc":"This is a rooster. It is black. There is dignity in this.","name":"Entity Rooster Black"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"EntityRoosterBrown":{"prefab":{"prefab_name":"EntityRoosterBrown","prefab_hash":-583103395,"desc":"The common brown rooster. Don't let it hear you say that.","name":"Entity Rooster Brown"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Brain","typ":"Organ"}]},"Fertilizer":{"prefab":{"prefab_name":"Fertilizer","prefab_hash":1517856652,"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. ","name":"Fertilizer"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Default"}},"FireArmSMG":{"prefab":{"prefab_name":"FireArmSMG","prefab_hash":-86315541,"desc":"0.Single\n1.Auto","name":"Fire Arm SMG"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Tools"},"slots":[{"name":"","typ":"Magazine"}]},"Flag_ODA_10m":{"prefab":{"prefab_name":"Flag_ODA_10m","prefab_hash":1845441951,"desc":"","name":"Flag (ODA 10m)"},"structure":{"small_grid":true}},"Flag_ODA_4m":{"prefab":{"prefab_name":"Flag_ODA_4m","prefab_hash":1159126354,"desc":"","name":"Flag (ODA 4m)"},"structure":{"small_grid":true}},"Flag_ODA_6m":{"prefab":{"prefab_name":"Flag_ODA_6m","prefab_hash":1998634960,"desc":"","name":"Flag (ODA 6m)"},"structure":{"small_grid":true}},"Flag_ODA_8m":{"prefab":{"prefab_name":"Flag_ODA_8m","prefab_hash":-375156130,"desc":"","name":"Flag (ODA 8m)"},"structure":{"small_grid":true}},"FlareGun":{"prefab":{"prefab_name":"FlareGun","prefab_hash":118685786,"desc":"","name":"Flare Gun"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"slots":[{"name":"Magazine","typ":"Flare"},{"name":"","typ":"Blocked"}]},"H2Combustor":{"prefab":{"prefab_name":"H2Combustor","prefab_hash":1840108251,"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.","name":"H2 Combustor"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"Read","RatioSteam":"Read","RatioSteamInput":"Read","RatioSteamOutput":"Read","RatioLiquidCarbonDioxide":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","ReferenceId":"Read","RatioHydrogen":"Read","RatioLiquidHydrogen":"Read","RatioPollutedWater":"Read","NameHash":"Read"},"modes":{"0":"Idle","1":"Active"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":2,"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}},"Handgun":{"prefab":{"prefab_name":"Handgun","prefab_hash":247238062,"desc":"","name":"Handgun"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Tools"},"slots":[{"name":"Magazine","typ":"Magazine"}]},"HandgunMagazine":{"prefab":{"prefab_name":"HandgunMagazine","prefab_hash":1254383185,"desc":"","name":"Handgun Magazine"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Magazine","sorting_class":"Default"}},"HumanSkull":{"prefab":{"prefab_name":"HumanSkull","prefab_hash":-857713709,"desc":"","name":"Human Skull"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ImGuiCircuitboardAirlockControl":{"prefab":{"prefab_name":"ImGuiCircuitboardAirlockControl","prefab_hash":-73796547,"desc":"","name":"Airlock (Experimental)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Circuitboard","sorting_class":"Default"}},"ItemActiveVent":{"prefab":{"prefab_name":"ItemActiveVent","prefab_hash":-842048328,"desc":"When constructed, this kit places an Active Vent on any support structure.","name":"Kit (Active Vent)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemAdhesiveInsulation":{"prefab":{"prefab_name":"ItemAdhesiveInsulation","prefab_hash":1871048978,"desc":"","name":"Adhesive Insulation"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":20,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemAdvancedTablet":{"prefab":{"prefab_name":"ItemAdvancedTablet","prefab_hash":1722785341,"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","name":"Advanced Tablet"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"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"},"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"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","On":"ReadWrite","Volume":"ReadWrite","SoundAlert":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":true,"circuit_holder":true},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"},{"name":"Cartridge1","typ":"Cartridge"},{"name":"Programmable Chip","typ":"ProgrammableChip"}]},"ItemAlienMushroom":{"prefab":{"prefab_name":"ItemAlienMushroom","prefab_hash":176446172,"desc":"","name":"Alien Mushroom"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Default"}},"ItemAmmoBox":{"prefab":{"prefab_name":"ItemAmmoBox","prefab_hash":-9559091,"desc":"","name":"Ammo Box"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemAngleGrinder":{"prefab":{"prefab_name":"ItemAngleGrinder","prefab_hash":201215010,"desc":"Angles-be-gone with the trusty angle grinder.","name":"Angle Grinder"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemArcWelder":{"prefab":{"prefab_name":"ItemArcWelder","prefab_hash":1385062886,"desc":"","name":"Arc Welder"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemAreaPowerControl":{"prefab":{"prefab_name":"ItemAreaPowerControl","prefab_hash":1757673317,"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.","name":"Kit (Power Controller)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemAstroloyIngot":{"prefab":{"prefab_name":"ItemAstroloyIngot","prefab_hash":412924554,"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.","name":"Ingot (Astroloy)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Astroloy":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemAstroloySheets":{"prefab":{"prefab_name":"ItemAstroloySheets","prefab_hash":-1662476145,"desc":"","name":"Astroloy Sheets"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"None","sorting_class":"Resources"}},"ItemAuthoringTool":{"prefab":{"prefab_name":"ItemAuthoringTool","prefab_hash":789015045,"desc":"","name":"Authoring Tool"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemAuthoringToolRocketNetwork":{"prefab":{"prefab_name":"ItemAuthoringToolRocketNetwork","prefab_hash":-1731627004,"desc":"","name":""},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemBasketBall":{"prefab":{"prefab_name":"ItemBasketBall","prefab_hash":-1262580790,"desc":"","name":"Basket Ball"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemBatteryCell":{"prefab":{"prefab_name":"ItemBatteryCell","prefab_hash":700133157,"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.","name":"Battery Cell (Small)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Battery","sorting_class":"Default"},"logic":{"logic_slot_types":{},"logic_types":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"ItemBatteryCellLarge":{"prefab":{"prefab_name":"ItemBatteryCellLarge","prefab_hash":-459827268,"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","name":"Battery Cell (Large)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Battery","sorting_class":"Default"},"logic":{"logic_slot_types":{},"logic_types":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"ItemBatteryCellNuclear":{"prefab":{"prefab_name":"ItemBatteryCellNuclear","prefab_hash":544617306,"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.","name":"Battery Cell (Nuclear)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Battery","sorting_class":"Default"},"logic":{"logic_slot_types":{},"logic_types":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"ItemBatteryCharger":{"prefab":{"prefab_name":"ItemBatteryCharger","prefab_hash":-1866880307,"desc":"This kit produces a 5-slot Kit (Battery Charger).","name":"Kit (Battery Charger)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemBatteryChargerSmall":{"prefab":{"prefab_name":"ItemBatteryChargerSmall","prefab_hash":1008295833,"desc":"","name":"Battery Charger Small"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemBeacon":{"prefab":{"prefab_name":"ItemBeacon","prefab_hash":-869869491,"desc":"","name":"Tracking Beacon"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemBiomass":{"prefab":{"prefab_name":"ItemBiomass","prefab_hash":-831480639,"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).","name":"Biomass"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"Biomass":1.0},"slot_class":"Ore","sorting_class":"Resources"}},"ItemBreadLoaf":{"prefab":{"prefab_name":"ItemBreadLoaf","prefab_hash":893514943,"desc":"","name":"Bread Loaf"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemCableAnalyser":{"prefab":{"prefab_name":"ItemCableAnalyser","prefab_hash":-1792787349,"desc":"","name":"Kit (Cable Analyzer)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemCableCoil":{"prefab":{"prefab_name":"ItemCableCoil","prefab_hash":-466050668,"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).","name":"Cable Coil"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Tool","sorting_class":"Resources"}},"ItemCableCoilHeavy":{"prefab":{"prefab_name":"ItemCableCoilHeavy","prefab_hash":2060134443,"desc":"Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW.","name":"Cable Coil (Heavy)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Tool","sorting_class":"Resources"}},"ItemCableFuse":{"prefab":{"prefab_name":"ItemCableFuse","prefab_hash":195442047,"desc":"","name":"Kit (Cable Fuses)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Resources"}},"ItemCannedCondensedMilk":{"prefab":{"prefab_name":"ItemCannedCondensedMilk","prefab_hash":-2104175091,"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.","name":"Canned Condensed Milk"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemCannedEdamame":{"prefab":{"prefab_name":"ItemCannedEdamame","prefab_hash":-999714082,"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.","name":"Canned Edamame"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemCannedMushroom":{"prefab":{"prefab_name":"ItemCannedMushroom","prefab_hash":-1344601965,"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.","name":"Canned Mushroom"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemCannedPowderedEggs":{"prefab":{"prefab_name":"ItemCannedPowderedEggs","prefab_hash":1161510063,"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.","name":"Canned Powdered Eggs"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemCannedRicePudding":{"prefab":{"prefab_name":"ItemCannedRicePudding","prefab_hash":-1185552595,"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.","name":"Canned Rice Pudding"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemCerealBar":{"prefab":{"prefab_name":"ItemCerealBar","prefab_hash":791746840,"desc":"Sustains, without decay. If only all our relationships were so well balanced.","name":"Cereal Bar"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemCharcoal":{"prefab":{"prefab_name":"ItemCharcoal","prefab_hash":252561409,"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.","name":"Charcoal"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":200,"reagents":{"Carbon":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemChemLightBlue":{"prefab":{"prefab_name":"ItemChemLightBlue","prefab_hash":-772542081,"desc":"A safe and slightly rave-some source of blue light. Snap to activate.","name":"Chem Light (Blue)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemChemLightGreen":{"prefab":{"prefab_name":"ItemChemLightGreen","prefab_hash":-597479390,"desc":"Enliven the dreariest, airless rock with this glowy green light. Snap to activate.","name":"Chem Light (Green)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemChemLightRed":{"prefab":{"prefab_name":"ItemChemLightRed","prefab_hash":-525810132,"desc":"A red glowstick. Snap to activate. Then reach for the lasers.","name":"Chem Light (Red)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemChemLightWhite":{"prefab":{"prefab_name":"ItemChemLightWhite","prefab_hash":1312166823,"desc":"Snap the glowstick to activate a pale radiance that keeps the darkness at bay.","name":"Chem Light (White)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemChemLightYellow":{"prefab":{"prefab_name":"ItemChemLightYellow","prefab_hash":1224819963,"desc":"Dispel the darkness with this yellow glowstick.","name":"Chem Light (Yellow)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemChocolateBar":{"prefab":{"prefab_name":"ItemChocolateBar","prefab_hash":234601764,"desc":"","name":"Chocolate Bar"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemChocolateCake":{"prefab":{"prefab_name":"ItemChocolateCake","prefab_hash":-261575861,"desc":"","name":"Chocolate Cake"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemChocolateCerealBar":{"prefab":{"prefab_name":"ItemChocolateCerealBar","prefab_hash":860793245,"desc":"","name":"Chocolate Cereal Bar"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemCoalOre":{"prefab":{"prefab_name":"ItemCoalOre","prefab_hash":1724793494,"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).","name":"Ore (Coal)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Hydrocarbon":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemCobaltOre":{"prefab":{"prefab_name":"ItemCobaltOre","prefab_hash":-983091249,"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.","name":"Ore (Cobalt)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Cobalt":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemCocoaPowder":{"prefab":{"prefab_name":"ItemCocoaPowder","prefab_hash":457286516,"desc":"","name":"Cocoa Powder"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":20,"reagents":{"Cocoa":1.0},"slot_class":"None","sorting_class":"Resources"}},"ItemCocoaTree":{"prefab":{"prefab_name":"ItemCocoaTree","prefab_hash":680051921,"desc":"","name":"Cocoa"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":20,"reagents":{"Cocoa":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemCoffeeMug":{"prefab":{"prefab_name":"ItemCoffeeMug","prefab_hash":1800622698,"desc":"","name":"Coffee Mug"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemConstantanIngot":{"prefab":{"prefab_name":"ItemConstantanIngot","prefab_hash":1058547521,"desc":"","name":"Ingot (Constantan)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Constantan":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemCookedCondensedMilk":{"prefab":{"prefab_name":"ItemCookedCondensedMilk","prefab_hash":1715917521,"desc":"A high-nutrient cooked food, which can be canned.","name":"Condensed Milk"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":10,"reagents":{"Milk":100.0},"slot_class":"None","sorting_class":"Food"}},"ItemCookedCorn":{"prefab":{"prefab_name":"ItemCookedCorn","prefab_hash":1344773148,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Corn"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":10,"reagents":{"Corn":1.0},"slot_class":"None","sorting_class":"Food"}},"ItemCookedMushroom":{"prefab":{"prefab_name":"ItemCookedMushroom","prefab_hash":-1076892658,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Mushroom"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":10,"reagents":{"Mushroom":1.0},"slot_class":"None","sorting_class":"Food"}},"ItemCookedPowderedEggs":{"prefab":{"prefab_name":"ItemCookedPowderedEggs","prefab_hash":-1712264413,"desc":"A high-nutrient cooked food, which can be canned.","name":"Powdered Eggs"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":10,"reagents":{"Egg":1.0},"slot_class":"None","sorting_class":"Food"}},"ItemCookedPumpkin":{"prefab":{"prefab_name":"ItemCookedPumpkin","prefab_hash":1849281546,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Pumpkin"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":10,"reagents":{"Pumpkin":1.0},"slot_class":"None","sorting_class":"Food"}},"ItemCookedRice":{"prefab":{"prefab_name":"ItemCookedRice","prefab_hash":2013539020,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Rice"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":10,"reagents":{"Rice":1.0},"slot_class":"None","sorting_class":"Food"}},"ItemCookedSoybean":{"prefab":{"prefab_name":"ItemCookedSoybean","prefab_hash":1353449022,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Soybean"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":10,"reagents":{"Soy":5.0},"slot_class":"None","sorting_class":"Food"}},"ItemCookedTomato":{"prefab":{"prefab_name":"ItemCookedTomato","prefab_hash":-709086714,"desc":"A high-nutrient cooked food, which can be canned.","name":"Cooked Tomato"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":10,"reagents":{"Tomato":1.0},"slot_class":"None","sorting_class":"Food"}},"ItemCopperIngot":{"prefab":{"prefab_name":"ItemCopperIngot","prefab_hash":-404336834,"desc":"Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items.","name":"Ingot (Copper)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Copper":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemCopperOre":{"prefab":{"prefab_name":"ItemCopperOre","prefab_hash":-707307845,"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.","name":"Ore (Copper)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Copper":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemCorn":{"prefab":{"prefab_name":"ItemCorn","prefab_hash":258339687,"desc":"A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light.","name":"Corn"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":20,"reagents":{"Corn":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemCornSoup":{"prefab":{"prefab_name":"ItemCornSoup","prefab_hash":545034114,"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.","name":"Corn Soup"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemCreditCard":{"prefab":{"prefab_name":"ItemCreditCard","prefab_hash":-1756772618,"desc":"","name":"Credit Card"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100000,"reagents":null,"slot_class":"CreditCard","sorting_class":"Tools"}},"ItemCropHay":{"prefab":{"prefab_name":"ItemCropHay","prefab_hash":215486157,"desc":"","name":"Hay"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemCrowbar":{"prefab":{"prefab_name":"ItemCrowbar","prefab_hash":856108234,"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.","name":"Crowbar"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemDataDisk":{"prefab":{"prefab_name":"ItemDataDisk","prefab_hash":1005843700,"desc":"","name":"Data Disk"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"DataDisk","sorting_class":"Default"}},"ItemDirtCanister":{"prefab":{"prefab_name":"ItemDirtCanister","prefab_hash":902565329,"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.","name":"Dirt Canister"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Ore","sorting_class":"Default"}},"ItemDirtyOre":{"prefab":{"prefab_name":"ItemDirtyOre","prefab_hash":-1234745580,"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. ","name":"Dirty Ore"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"None","sorting_class":"Ores"}},"ItemDisposableBatteryCharger":{"prefab":{"prefab_name":"ItemDisposableBatteryCharger","prefab_hash":-2124435700,"desc":"Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery.","name":"Disposable Battery Charger"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemDrill":{"prefab":{"prefab_name":"ItemDrill","prefab_hash":2009673399,"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.","name":"Hand Drill"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemDuctTape":{"prefab":{"prefab_name":"ItemDuctTape","prefab_hash":-1943134693,"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.","name":"Duct Tape"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemDynamicAirCon":{"prefab":{"prefab_name":"ItemDynamicAirCon","prefab_hash":1072914031,"desc":"","name":"Kit (Portable Air Conditioner)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemDynamicScrubber":{"prefab":{"prefab_name":"ItemDynamicScrubber","prefab_hash":-971920158,"desc":"","name":"Kit (Portable Scrubber)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemEggCarton":{"prefab":{"prefab_name":"ItemEggCarton","prefab_hash":-524289310,"desc":"Within, eggs reside in mysterious, marmoreal silence.","name":"Egg Carton"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Storage"},"slots":[{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"},{"name":"","typ":"Egg"}]},"ItemElectronicParts":{"prefab":{"prefab_name":"ItemElectronicParts","prefab_hash":731250882,"desc":"","name":"Electronic Parts"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":20,"reagents":null,"slot_class":"None","sorting_class":"Resources"}},"ItemElectrumIngot":{"prefab":{"prefab_name":"ItemElectrumIngot","prefab_hash":502280180,"desc":"","name":"Ingot (Electrum)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Electrum":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemEmergencyAngleGrinder":{"prefab":{"prefab_name":"ItemEmergencyAngleGrinder","prefab_hash":-351438780,"desc":"","name":"Emergency Angle Grinder"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyArcWelder":{"prefab":{"prefab_name":"ItemEmergencyArcWelder","prefab_hash":-1056029600,"desc":"","name":"Emergency Arc Welder"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyCrowbar":{"prefab":{"prefab_name":"ItemEmergencyCrowbar","prefab_hash":976699731,"desc":"","name":"Emergency Crowbar"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemEmergencyDrill":{"prefab":{"prefab_name":"ItemEmergencyDrill","prefab_hash":-2052458905,"desc":"","name":"Emergency Drill"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemEmergencyEvaSuit":{"prefab":{"prefab_name":"ItemEmergencyEvaSuit","prefab_hash":1791306431,"desc":"","name":"Emergency Eva Suit"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Suit","sorting_class":"Clothing"},"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"}]},"ItemEmergencyPickaxe":{"prefab":{"prefab_name":"ItemEmergencyPickaxe","prefab_hash":-1061510408,"desc":"","name":"Emergency Pickaxe"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemEmergencyScrewdriver":{"prefab":{"prefab_name":"ItemEmergencyScrewdriver","prefab_hash":266099983,"desc":"","name":"Emergency Screwdriver"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemEmergencySpaceHelmet":{"prefab":{"prefab_name":"ItemEmergencySpaceHelmet","prefab_hash":205916793,"desc":"","name":"Emergency Space Helmet"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Helmet","sorting_class":"Clothing"},"logic":{"logic_slot_types":{},"logic_types":{"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"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"ItemEmergencyToolBelt":{"prefab":{"prefab_name":"ItemEmergencyToolBelt","prefab_hash":1661941301,"desc":"","name":"Emergency Tool Belt"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Belt","sorting_class":"Clothing"},"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"}]},"ItemEmergencyWireCutters":{"prefab":{"prefab_name":"ItemEmergencyWireCutters","prefab_hash":2102803952,"desc":"","name":"Emergency Wire Cutters"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemEmergencyWrench":{"prefab":{"prefab_name":"ItemEmergencyWrench","prefab_hash":162553030,"desc":"","name":"Emergency Wrench"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemEmptyCan":{"prefab":{"prefab_name":"ItemEmptyCan","prefab_hash":1013818348,"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.","name":"Empty Can"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":10,"reagents":{"Steel":1.0},"slot_class":"None","sorting_class":"Default"}},"ItemEvaSuit":{"prefab":{"prefab_name":"ItemEvaSuit","prefab_hash":1677018918,"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.","name":"Eva Suit"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Suit","sorting_class":"Clothing"},"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"}]},"ItemExplosive":{"prefab":{"prefab_name":"ItemExplosive","prefab_hash":235361649,"desc":"","name":"Remote Explosive"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemFern":{"prefab":{"prefab_name":"ItemFern","prefab_hash":892110467,"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.","name":"Fern"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"Fenoxitone":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemFertilizedEgg":{"prefab":{"prefab_name":"ItemFertilizedEgg","prefab_hash":-383972371,"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.","name":"Egg"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":1,"reagents":{"Egg":1.0},"slot_class":"Egg","sorting_class":"Resources"}},"ItemFilterFern":{"prefab":{"prefab_name":"ItemFilterFern","prefab_hash":266654416,"desc":"A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant.","name":"Darga Fern"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemFlagSmall":{"prefab":{"prefab_name":"ItemFlagSmall","prefab_hash":2011191088,"desc":"","name":"Kit (Small Flag)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemFlashingLight":{"prefab":{"prefab_name":"ItemFlashingLight","prefab_hash":-2107840748,"desc":"","name":"Kit (Flashing Light)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemFlashlight":{"prefab":{"prefab_name":"ItemFlashlight","prefab_hash":-838472102,"desc":"A flashlight with a narrow and wide beam options.","name":"Flashlight"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Low Power","1":"High Power"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemFlour":{"prefab":{"prefab_name":"ItemFlour","prefab_hash":-665995854,"desc":"Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven).","name":"Flour"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Flour":50.0},"slot_class":"None","sorting_class":"Resources"}},"ItemFlowerBlue":{"prefab":{"prefab_name":"ItemFlowerBlue","prefab_hash":-1573623434,"desc":"","name":"Flower (Blue)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemFlowerGreen":{"prefab":{"prefab_name":"ItemFlowerGreen","prefab_hash":-1513337058,"desc":"","name":"Flower (Green)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemFlowerOrange":{"prefab":{"prefab_name":"ItemFlowerOrange","prefab_hash":-1411986716,"desc":"","name":"Flower (Orange)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemFlowerRed":{"prefab":{"prefab_name":"ItemFlowerRed","prefab_hash":-81376085,"desc":"","name":"Flower (Red)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemFlowerYellow":{"prefab":{"prefab_name":"ItemFlowerYellow","prefab_hash":1712822019,"desc":"","name":"Flower (Yellow)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemFrenchFries":{"prefab":{"prefab_name":"ItemFrenchFries","prefab_hash":-57608687,"desc":"Because space would suck without 'em.","name":"Canned French Fries"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemFries":{"prefab":{"prefab_name":"ItemFries","prefab_hash":1371786091,"desc":"","name":"French Fries"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemGasCanisterCarbonDioxide":{"prefab":{"prefab_name":"ItemGasCanisterCarbonDioxide","prefab_hash":-767685874,"desc":"","name":"Canister (CO2)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemGasCanisterEmpty":{"prefab":{"prefab_name":"ItemGasCanisterEmpty","prefab_hash":42280099,"desc":"","name":"Canister"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemGasCanisterFuel":{"prefab":{"prefab_name":"ItemGasCanisterFuel","prefab_hash":-1014695176,"desc":"","name":"Canister (Fuel)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemGasCanisterNitrogen":{"prefab":{"prefab_name":"ItemGasCanisterNitrogen","prefab_hash":2145068424,"desc":"","name":"Canister (Nitrogen)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemGasCanisterNitrousOxide":{"prefab":{"prefab_name":"ItemGasCanisterNitrousOxide","prefab_hash":-1712153401,"desc":"","name":"Gas Canister (Sleeping)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemGasCanisterOxygen":{"prefab":{"prefab_name":"ItemGasCanisterOxygen","prefab_hash":-1152261938,"desc":"","name":"Canister (Oxygen)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemGasCanisterPollutants":{"prefab":{"prefab_name":"ItemGasCanisterPollutants","prefab_hash":-1552586384,"desc":"","name":"Canister (Pollutants)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemGasCanisterSmart":{"prefab":{"prefab_name":"ItemGasCanisterSmart","prefab_hash":-668314371,"desc":"0.Mode0\n1.Mode1","name":"Gas Canister (Smart)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemGasCanisterVolatiles":{"prefab":{"prefab_name":"ItemGasCanisterVolatiles","prefab_hash":-472094806,"desc":"","name":"Canister (Volatiles)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemGasCanisterWater":{"prefab":{"prefab_name":"ItemGasCanisterWater","prefab_hash":-1854861891,"desc":"","name":"Liquid Canister (Water)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"LiquidCanister","sorting_class":"Atmospherics"}},"ItemGasFilterCarbonDioxide":{"prefab":{"prefab_name":"ItemGasFilterCarbonDioxide","prefab_hash":1635000764,"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.","name":"Filter (Carbon Dioxide)"},"item":{"consumable":false,"filter_type":"CarbonDioxide","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterCarbonDioxideInfinite":{"prefab":{"prefab_name":"ItemGasFilterCarbonDioxideInfinite","prefab_hash":-185568964,"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.","name":"Catalytic Filter (Carbon Dioxide)"},"item":{"consumable":false,"filter_type":"CarbonDioxide","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterCarbonDioxideL":{"prefab":{"prefab_name":"ItemGasFilterCarbonDioxideL","prefab_hash":1876847024,"desc":"","name":"Heavy Filter (Carbon Dioxide)"},"item":{"consumable":false,"filter_type":"CarbonDioxide","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterCarbonDioxideM":{"prefab":{"prefab_name":"ItemGasFilterCarbonDioxideM","prefab_hash":416897318,"desc":"","name":"Medium Filter (Carbon Dioxide)"},"item":{"consumable":false,"filter_type":"CarbonDioxide","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterNitrogen":{"prefab":{"prefab_name":"ItemGasFilterNitrogen","prefab_hash":632853248,"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.","name":"Filter (Nitrogen)"},"item":{"consumable":false,"filter_type":"Nitrogen","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterNitrogenInfinite":{"prefab":{"prefab_name":"ItemGasFilterNitrogenInfinite","prefab_hash":152751131,"desc":"A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Nitrogen)"},"item":{"consumable":false,"filter_type":"Nitrogen","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterNitrogenL":{"prefab":{"prefab_name":"ItemGasFilterNitrogenL","prefab_hash":-1387439451,"desc":"","name":"Heavy Filter (Nitrogen)"},"item":{"consumable":false,"filter_type":"Nitrogen","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterNitrogenM":{"prefab":{"prefab_name":"ItemGasFilterNitrogenM","prefab_hash":-632657357,"desc":"","name":"Medium Filter (Nitrogen)"},"item":{"consumable":false,"filter_type":"Nitrogen","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterNitrousOxide":{"prefab":{"prefab_name":"ItemGasFilterNitrousOxide","prefab_hash":-1247674305,"desc":"","name":"Filter (Nitrous Oxide)"},"item":{"consumable":false,"filter_type":"NitrousOxide","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterNitrousOxideInfinite":{"prefab":{"prefab_name":"ItemGasFilterNitrousOxideInfinite","prefab_hash":-123934842,"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.","name":"Catalytic Filter (Nitrous Oxide)"},"item":{"consumable":false,"filter_type":"NitrousOxide","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterNitrousOxideL":{"prefab":{"prefab_name":"ItemGasFilterNitrousOxideL","prefab_hash":465267979,"desc":"","name":"Heavy Filter (Nitrous Oxide)"},"item":{"consumable":false,"filter_type":"NitrousOxide","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterNitrousOxideM":{"prefab":{"prefab_name":"ItemGasFilterNitrousOxideM","prefab_hash":1824284061,"desc":"","name":"Medium Filter (Nitrous Oxide)"},"item":{"consumable":false,"filter_type":"NitrousOxide","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterOxygen":{"prefab":{"prefab_name":"ItemGasFilterOxygen","prefab_hash":-721824748,"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).","name":"Filter (Oxygen)"},"item":{"consumable":false,"filter_type":"Oxygen","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterOxygenInfinite":{"prefab":{"prefab_name":"ItemGasFilterOxygenInfinite","prefab_hash":-1055451111,"desc":"A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Oxygen)"},"item":{"consumable":false,"filter_type":"Oxygen","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterOxygenL":{"prefab":{"prefab_name":"ItemGasFilterOxygenL","prefab_hash":-1217998945,"desc":"","name":"Heavy Filter (Oxygen)"},"item":{"consumable":false,"filter_type":"Oxygen","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterOxygenM":{"prefab":{"prefab_name":"ItemGasFilterOxygenM","prefab_hash":-1067319543,"desc":"","name":"Medium Filter (Oxygen)"},"item":{"consumable":false,"filter_type":"Oxygen","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterPollutants":{"prefab":{"prefab_name":"ItemGasFilterPollutants","prefab_hash":1915566057,"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.","name":"Filter (Pollutant)"},"item":{"consumable":false,"filter_type":"Pollutant","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterPollutantsInfinite":{"prefab":{"prefab_name":"ItemGasFilterPollutantsInfinite","prefab_hash":-503738105,"desc":"A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Pollutants)"},"item":{"consumable":false,"filter_type":"Pollutant","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterPollutantsL":{"prefab":{"prefab_name":"ItemGasFilterPollutantsL","prefab_hash":1959564765,"desc":"","name":"Heavy Filter (Pollutants)"},"item":{"consumable":false,"filter_type":"Pollutant","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterPollutantsM":{"prefab":{"prefab_name":"ItemGasFilterPollutantsM","prefab_hash":63677771,"desc":"","name":"Medium Filter (Pollutants)"},"item":{"consumable":false,"filter_type":"Pollutant","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterVolatiles":{"prefab":{"prefab_name":"ItemGasFilterVolatiles","prefab_hash":15011598,"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.","name":"Filter (Volatiles)"},"item":{"consumable":false,"filter_type":"Volatiles","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterVolatilesInfinite":{"prefab":{"prefab_name":"ItemGasFilterVolatilesInfinite","prefab_hash":-1916176068,"desc":"A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Volatiles)"},"item":{"consumable":false,"filter_type":"Volatiles","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterVolatilesL":{"prefab":{"prefab_name":"ItemGasFilterVolatilesL","prefab_hash":1255156286,"desc":"","name":"Heavy Filter (Volatiles)"},"item":{"consumable":false,"filter_type":"Volatiles","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterVolatilesM":{"prefab":{"prefab_name":"ItemGasFilterVolatilesM","prefab_hash":1037507240,"desc":"","name":"Medium Filter (Volatiles)"},"item":{"consumable":false,"filter_type":"Volatiles","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterWater":{"prefab":{"prefab_name":"ItemGasFilterWater","prefab_hash":-1993197973,"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)","name":"Filter (Water)"},"item":{"consumable":false,"filter_type":"Steam","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterWaterInfinite":{"prefab":{"prefab_name":"ItemGasFilterWaterInfinite","prefab_hash":-1678456554,"desc":"A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.","name":"Catalytic Filter (Water)"},"item":{"consumable":false,"filter_type":"Steam","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterWaterL":{"prefab":{"prefab_name":"ItemGasFilterWaterL","prefab_hash":2004969680,"desc":"","name":"Heavy Filter (Water)"},"item":{"consumable":false,"filter_type":"Steam","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasFilterWaterM":{"prefab":{"prefab_name":"ItemGasFilterWaterM","prefab_hash":8804422,"desc":"","name":"Medium Filter (Water)"},"item":{"consumable":false,"filter_type":"Steam","ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"GasFilter","sorting_class":"Resources"}},"ItemGasSensor":{"prefab":{"prefab_name":"ItemGasSensor","prefab_hash":1717593480,"desc":"","name":"Kit (Gas Sensor)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemGasTankStorage":{"prefab":{"prefab_name":"ItemGasTankStorage","prefab_hash":-2113012215,"desc":"This kit produces a Kit (Canister Storage) for refilling a Canister.","name":"Kit (Canister Storage)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemGlassSheets":{"prefab":{"prefab_name":"ItemGlassSheets","prefab_hash":1588896491,"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.","name":"Glass Sheets"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"None","sorting_class":"Resources"}},"ItemGlasses":{"prefab":{"prefab_name":"ItemGlasses","prefab_hash":-1068925231,"desc":"","name":"Glasses"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Glasses","sorting_class":"Clothing"}},"ItemGoldIngot":{"prefab":{"prefab_name":"ItemGoldIngot","prefab_hash":226410516,"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. ","name":"Ingot (Gold)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Gold":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemGoldOre":{"prefab":{"prefab_name":"ItemGoldOre","prefab_hash":-1348105509,"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.","name":"Ore (Gold)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Gold":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemGrenade":{"prefab":{"prefab_name":"ItemGrenade","prefab_hash":1544275894,"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.","name":"Hand Grenade"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemHEMDroidRepairKit":{"prefab":{"prefab_name":"ItemHEMDroidRepairKit","prefab_hash":470636008,"desc":"Repairs damaged HEM-Droids to full health.","name":"HEMDroid Repair Kit"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemHardBackpack":{"prefab":{"prefab_name":"ItemHardBackpack","prefab_hash":374891127,"desc":"This backpack can be useful when you are working inside and don't need to fly around.","name":"Hardsuit Backpack"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Back","sorting_class":"Clothing"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemHardJetpack":{"prefab":{"prefab_name":"ItemHardJetpack","prefab_hash":-412551656,"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.","name":"Hardsuit Jetpack"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Back","sorting_class":"Clothing"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"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"}]},"ItemHardMiningBackPack":{"prefab":{"prefab_name":"ItemHardMiningBackPack","prefab_hash":900366130,"desc":"","name":"Hard Mining Backpack"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Back","sorting_class":"Clothing"},"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"}]},"ItemHardSuit":{"prefab":{"prefab_name":"ItemHardSuit","prefab_hash":-1758310454,"desc":"Connects to Logic Transmitter","name":"Hardsuit"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Suit","sorting_class":"Clothing"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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"},"modes":null,"transmission_receiver":false,"wireless_logic":true,"circuit_holder":true},"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"}],"memory":{"instructions":null,"memory_access":"ReadWrite","memory_size":0}},"ItemHardsuitHelmet":{"prefab":{"prefab_name":"ItemHardsuitHelmet","prefab_hash":-84573099,"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.","name":"Hardsuit Helmet"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Helmet","sorting_class":"Clothing"},"logic":{"logic_slot_types":{},"logic_types":{"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"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"ItemHastelloyIngot":{"prefab":{"prefab_name":"ItemHastelloyIngot","prefab_hash":1579842814,"desc":"","name":"Ingot (Hastelloy)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Hastelloy":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemHat":{"prefab":{"prefab_name":"ItemHat","prefab_hash":299189339,"desc":"As the name suggests, this is a hat.","name":"Hat"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Helmet","sorting_class":"Clothing"}},"ItemHighVolumeGasCanisterEmpty":{"prefab":{"prefab_name":"ItemHighVolumeGasCanisterEmpty","prefab_hash":998653377,"desc":"","name":"High Volume Gas Canister"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"GasCanister","sorting_class":"Atmospherics"}},"ItemHorticultureBelt":{"prefab":{"prefab_name":"ItemHorticultureBelt","prefab_hash":-1117581553,"desc":"","name":"Horticulture Belt"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Belt","sorting_class":"Clothing"},"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"}]},"ItemHydroponicTray":{"prefab":{"prefab_name":"ItemHydroponicTray","prefab_hash":-1193543727,"desc":"This kits creates a Hydroponics Tray for growing various plants.","name":"Kit (Hydroponic Tray)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemIce":{"prefab":{"prefab_name":"ItemIce","prefab_hash":1217489948,"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.","name":"Ice (Water)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemIgniter":{"prefab":{"prefab_name":"ItemIgniter","prefab_hash":890106742,"desc":"This kit creates an Kit (Igniter) unit.","name":"Kit (Igniter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemInconelIngot":{"prefab":{"prefab_name":"ItemInconelIngot","prefab_hash":-787796599,"desc":"","name":"Ingot (Inconel)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Inconel":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemInsulation":{"prefab":{"prefab_name":"ItemInsulation","prefab_hash":897176943,"desc":"Mysterious in the extreme, the function of this item is lost to the ages.","name":"Insulation"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Resources"}},"ItemIntegratedCircuit10":{"prefab":{"prefab_name":"ItemIntegratedCircuit10","prefab_hash":-744098481,"desc":"","name":"Integrated Circuit (IC10)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"ProgrammableChip","sorting_class":"Default"},"logic":{"logic_slot_types":{},"logic_types":{"LineNumber":"Read","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"memory":{"instructions":null,"memory_access":"ReadWrite","memory_size":512}},"ItemInvarIngot":{"prefab":{"prefab_name":"ItemInvarIngot","prefab_hash":-297990285,"desc":"","name":"Ingot (Invar)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Invar":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemIronFrames":{"prefab":{"prefab_name":"ItemIronFrames","prefab_hash":1225836666,"desc":"","name":"Iron Frames"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":30,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemIronIngot":{"prefab":{"prefab_name":"ItemIronIngot","prefab_hash":-1301215609,"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.","name":"Ingot (Iron)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Iron":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemIronOre":{"prefab":{"prefab_name":"ItemIronOre","prefab_hash":1758427767,"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.","name":"Ore (Iron)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Iron":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemIronSheets":{"prefab":{"prefab_name":"ItemIronSheets","prefab_hash":-487378546,"desc":"","name":"Iron Sheets"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"None","sorting_class":"Resources"}},"ItemJetpackBasic":{"prefab":{"prefab_name":"ItemJetpackBasic","prefab_hash":1969189000,"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.","name":"Jetpack Basic"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Back","sorting_class":"Clothing"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"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"}]},"ItemKitAIMeE":{"prefab":{"prefab_name":"ItemKitAIMeE","prefab_hash":496830914,"desc":"","name":"Kit (AIMeE)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAccessBridge":{"prefab":{"prefab_name":"ItemKitAccessBridge","prefab_hash":513258369,"desc":"","name":"Kit (Access Bridge)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAdvancedComposter":{"prefab":{"prefab_name":"ItemKitAdvancedComposter","prefab_hash":-1431998347,"desc":"","name":"Kit (Advanced Composter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAdvancedFurnace":{"prefab":{"prefab_name":"ItemKitAdvancedFurnace","prefab_hash":-616758353,"desc":"","name":"Kit (Advanced Furnace)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAdvancedPackagingMachine":{"prefab":{"prefab_name":"ItemKitAdvancedPackagingMachine","prefab_hash":-598545233,"desc":"","name":"Kit (Advanced Packaging Machine)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAirlock":{"prefab":{"prefab_name":"ItemKitAirlock","prefab_hash":964043875,"desc":"","name":"Kit (Airlock)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAirlockGate":{"prefab":{"prefab_name":"ItemKitAirlockGate","prefab_hash":682546947,"desc":"","name":"Kit (Hangar Door)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitArcFurnace":{"prefab":{"prefab_name":"ItemKitArcFurnace","prefab_hash":-98995857,"desc":"","name":"Kit (Arc Furnace)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAtmospherics":{"prefab":{"prefab_name":"ItemKitAtmospherics","prefab_hash":1222286371,"desc":"","name":"Kit (Atmospherics)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAutoMinerSmall":{"prefab":{"prefab_name":"ItemKitAutoMinerSmall","prefab_hash":1668815415,"desc":"","name":"Kit (Autominer Small)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAutolathe":{"prefab":{"prefab_name":"ItemKitAutolathe","prefab_hash":-1753893214,"desc":"","name":"Kit (Autolathe)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitAutomatedOven":{"prefab":{"prefab_name":"ItemKitAutomatedOven","prefab_hash":-1931958659,"desc":"","name":"Kit (Automated Oven)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitBasket":{"prefab":{"prefab_name":"ItemKitBasket","prefab_hash":148305004,"desc":"","name":"Kit (Basket)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitBattery":{"prefab":{"prefab_name":"ItemKitBattery","prefab_hash":1406656973,"desc":"","name":"Kit (Battery)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitBatteryLarge":{"prefab":{"prefab_name":"ItemKitBatteryLarge","prefab_hash":-21225041,"desc":"","name":"Kit (Battery Large)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitBeacon":{"prefab":{"prefab_name":"ItemKitBeacon","prefab_hash":249073136,"desc":"","name":"Kit (Beacon)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitBeds":{"prefab":{"prefab_name":"ItemKitBeds","prefab_hash":-1241256797,"desc":"","name":"Kit (Beds)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitBlastDoor":{"prefab":{"prefab_name":"ItemKitBlastDoor","prefab_hash":-1755116240,"desc":"","name":"Kit (Blast Door)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitCentrifuge":{"prefab":{"prefab_name":"ItemKitCentrifuge","prefab_hash":578182956,"desc":"","name":"Kit (Centrifuge)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitChairs":{"prefab":{"prefab_name":"ItemKitChairs","prefab_hash":-1394008073,"desc":"","name":"Kit (Chairs)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitChute":{"prefab":{"prefab_name":"ItemKitChute","prefab_hash":1025254665,"desc":"","name":"Kit (Basic Chutes)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitChuteUmbilical":{"prefab":{"prefab_name":"ItemKitChuteUmbilical","prefab_hash":-876560854,"desc":"","name":"Kit (Chute Umbilical)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitCompositeCladding":{"prefab":{"prefab_name":"ItemKitCompositeCladding","prefab_hash":-1470820996,"desc":"","name":"Kit (Cladding)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitCompositeFloorGrating":{"prefab":{"prefab_name":"ItemKitCompositeFloorGrating","prefab_hash":1182412869,"desc":"","name":"Kit (Floor Grating)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitComputer":{"prefab":{"prefab_name":"ItemKitComputer","prefab_hash":1990225489,"desc":"","name":"Kit (Computer)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitConsole":{"prefab":{"prefab_name":"ItemKitConsole","prefab_hash":-1241851179,"desc":"","name":"Kit (Consoles)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitCrate":{"prefab":{"prefab_name":"ItemKitCrate","prefab_hash":429365598,"desc":"","name":"Kit (Crate)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitCrateMkII":{"prefab":{"prefab_name":"ItemKitCrateMkII","prefab_hash":-1585956426,"desc":"","name":"Kit (Crate Mk II)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitCrateMount":{"prefab":{"prefab_name":"ItemKitCrateMount","prefab_hash":-551612946,"desc":"","name":"Kit (Container Mount)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitCryoTube":{"prefab":{"prefab_name":"ItemKitCryoTube","prefab_hash":-545234195,"desc":"","name":"Kit (Cryo Tube)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitDeepMiner":{"prefab":{"prefab_name":"ItemKitDeepMiner","prefab_hash":-1935075707,"desc":"","name":"Kit (Deep Miner)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitDockingPort":{"prefab":{"prefab_name":"ItemKitDockingPort","prefab_hash":77421200,"desc":"","name":"Kit (Docking Port)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitDoor":{"prefab":{"prefab_name":"ItemKitDoor","prefab_hash":168615924,"desc":"","name":"Kit (Door)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitDrinkingFountain":{"prefab":{"prefab_name":"ItemKitDrinkingFountain","prefab_hash":-1743663875,"desc":"","name":"Kit (Drinking Fountain)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitDynamicCanister":{"prefab":{"prefab_name":"ItemKitDynamicCanister","prefab_hash":-1061945368,"desc":"","name":"Kit (Portable Gas Tank)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitDynamicGasTankAdvanced":{"prefab":{"prefab_name":"ItemKitDynamicGasTankAdvanced","prefab_hash":1533501495,"desc":"","name":"Kit (Portable Gas Tank Mk II)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitDynamicGenerator":{"prefab":{"prefab_name":"ItemKitDynamicGenerator","prefab_hash":-732720413,"desc":"","name":"Kit (Portable Generator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitDynamicHydroponics":{"prefab":{"prefab_name":"ItemKitDynamicHydroponics","prefab_hash":-1861154222,"desc":"","name":"Kit (Portable Hydroponics)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitDynamicLiquidCanister":{"prefab":{"prefab_name":"ItemKitDynamicLiquidCanister","prefab_hash":375541286,"desc":"","name":"Kit (Portable Liquid Tank)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitDynamicMKIILiquidCanister":{"prefab":{"prefab_name":"ItemKitDynamicMKIILiquidCanister","prefab_hash":-638019974,"desc":"","name":"Kit (Portable Liquid Tank Mk II)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitElectricUmbilical":{"prefab":{"prefab_name":"ItemKitElectricUmbilical","prefab_hash":1603046970,"desc":"","name":"Kit (Power Umbilical)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitElectronicsPrinter":{"prefab":{"prefab_name":"ItemKitElectronicsPrinter","prefab_hash":-1181922382,"desc":"","name":"Kit (Electronics Printer)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitElevator":{"prefab":{"prefab_name":"ItemKitElevator","prefab_hash":-945806652,"desc":"","name":"Kit (Elevator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitEngineLarge":{"prefab":{"prefab_name":"ItemKitEngineLarge","prefab_hash":755302726,"desc":"","name":"Kit (Engine Large)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitEngineMedium":{"prefab":{"prefab_name":"ItemKitEngineMedium","prefab_hash":1969312177,"desc":"","name":"Kit (Engine Medium)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitEngineSmall":{"prefab":{"prefab_name":"ItemKitEngineSmall","prefab_hash":19645163,"desc":"","name":"Kit (Engine Small)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitEvaporationChamber":{"prefab":{"prefab_name":"ItemKitEvaporationChamber","prefab_hash":1587787610,"desc":"","name":"Kit (Phase Change Device)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitFlagODA":{"prefab":{"prefab_name":"ItemKitFlagODA","prefab_hash":1701764190,"desc":"","name":"Kit (ODA Flag)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitFridgeBig":{"prefab":{"prefab_name":"ItemKitFridgeBig","prefab_hash":-1168199498,"desc":"","name":"Kit (Fridge Large)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitFridgeSmall":{"prefab":{"prefab_name":"ItemKitFridgeSmall","prefab_hash":1661226524,"desc":"","name":"Kit (Fridge Small)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitFurnace":{"prefab":{"prefab_name":"ItemKitFurnace","prefab_hash":-806743925,"desc":"","name":"Kit (Furnace)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitFurniture":{"prefab":{"prefab_name":"ItemKitFurniture","prefab_hash":1162905029,"desc":"","name":"Kit (Furniture)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitFuselage":{"prefab":{"prefab_name":"ItemKitFuselage","prefab_hash":-366262681,"desc":"","name":"Kit (Fuselage)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitGasGenerator":{"prefab":{"prefab_name":"ItemKitGasGenerator","prefab_hash":377745425,"desc":"","name":"Kit (Gas Fuel Generator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitGasUmbilical":{"prefab":{"prefab_name":"ItemKitGasUmbilical","prefab_hash":-1867280568,"desc":"","name":"Kit (Gas Umbilical)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitGovernedGasRocketEngine":{"prefab":{"prefab_name":"ItemKitGovernedGasRocketEngine","prefab_hash":206848766,"desc":"","name":"Kit (Pumped Gas Rocket Engine)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitGroundTelescope":{"prefab":{"prefab_name":"ItemKitGroundTelescope","prefab_hash":-2140672772,"desc":"","name":"Kit (Telescope)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitGrowLight":{"prefab":{"prefab_name":"ItemKitGrowLight","prefab_hash":341030083,"desc":"","name":"Kit (Grow Light)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitHarvie":{"prefab":{"prefab_name":"ItemKitHarvie","prefab_hash":-1022693454,"desc":"","name":"Kit (Harvie)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitHeatExchanger":{"prefab":{"prefab_name":"ItemKitHeatExchanger","prefab_hash":-1710540039,"desc":"","name":"Kit Heat Exchanger"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitHorizontalAutoMiner":{"prefab":{"prefab_name":"ItemKitHorizontalAutoMiner","prefab_hash":844391171,"desc":"","name":"Kit (OGRE)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitHydraulicPipeBender":{"prefab":{"prefab_name":"ItemKitHydraulicPipeBender","prefab_hash":-2098556089,"desc":"","name":"Kit (Hydraulic Pipe Bender)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitHydroponicAutomated":{"prefab":{"prefab_name":"ItemKitHydroponicAutomated","prefab_hash":-927931558,"desc":"","name":"Kit (Automated Hydroponics)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitHydroponicStation":{"prefab":{"prefab_name":"ItemKitHydroponicStation","prefab_hash":2057179799,"desc":"","name":"Kit (Hydroponic Station)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitIceCrusher":{"prefab":{"prefab_name":"ItemKitIceCrusher","prefab_hash":288111533,"desc":"","name":"Kit (Ice Crusher)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitInsulatedLiquidPipe":{"prefab":{"prefab_name":"ItemKitInsulatedLiquidPipe","prefab_hash":2067655311,"desc":"","name":"Kit (Insulated Liquid Pipe)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":20,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitInsulatedPipe":{"prefab":{"prefab_name":"ItemKitInsulatedPipe","prefab_hash":452636699,"desc":"","name":"Kit (Insulated Pipe)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":20,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitInsulatedPipeUtility":{"prefab":{"prefab_name":"ItemKitInsulatedPipeUtility","prefab_hash":-27284803,"desc":"","name":"Kit (Insulated Pipe Utility Gas)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitInsulatedPipeUtilityLiquid":{"prefab":{"prefab_name":"ItemKitInsulatedPipeUtilityLiquid","prefab_hash":-1831558953,"desc":"","name":"Kit (Insulated Pipe Utility Liquid)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitInteriorDoors":{"prefab":{"prefab_name":"ItemKitInteriorDoors","prefab_hash":1935945891,"desc":"","name":"Kit (Interior Doors)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLadder":{"prefab":{"prefab_name":"ItemKitLadder","prefab_hash":489494578,"desc":"","name":"Kit (Ladder)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLandingPadAtmos":{"prefab":{"prefab_name":"ItemKitLandingPadAtmos","prefab_hash":1817007843,"desc":"","name":"Kit (Landing Pad Atmospherics)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLandingPadBasic":{"prefab":{"prefab_name":"ItemKitLandingPadBasic","prefab_hash":293581318,"desc":"","name":"Kit (Landing Pad Basic)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLandingPadWaypoint":{"prefab":{"prefab_name":"ItemKitLandingPadWaypoint","prefab_hash":-1267511065,"desc":"","name":"Kit (Landing Pad Runway)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLargeDirectHeatExchanger":{"prefab":{"prefab_name":"ItemKitLargeDirectHeatExchanger","prefab_hash":450164077,"desc":"","name":"Kit (Large Direct Heat Exchanger)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLargeExtendableRadiator":{"prefab":{"prefab_name":"ItemKitLargeExtendableRadiator","prefab_hash":847430620,"desc":"","name":"Kit (Large Extendable Radiator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLargeSatelliteDish":{"prefab":{"prefab_name":"ItemKitLargeSatelliteDish","prefab_hash":-2039971217,"desc":"","name":"Kit (Large Satellite Dish)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLaunchMount":{"prefab":{"prefab_name":"ItemKitLaunchMount","prefab_hash":-1854167549,"desc":"","name":"Kit (Launch Mount)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLaunchTower":{"prefab":{"prefab_name":"ItemKitLaunchTower","prefab_hash":-174523552,"desc":"","name":"Kit (Rocket Launch Tower)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLiquidRegulator":{"prefab":{"prefab_name":"ItemKitLiquidRegulator","prefab_hash":1951126161,"desc":"","name":"Kit (Liquid Regulator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLiquidTank":{"prefab":{"prefab_name":"ItemKitLiquidTank","prefab_hash":-799849305,"desc":"","name":"Kit (Liquid Tank)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLiquidTankInsulated":{"prefab":{"prefab_name":"ItemKitLiquidTankInsulated","prefab_hash":617773453,"desc":"","name":"Kit (Insulated Liquid Tank)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLiquidTurboVolumePump":{"prefab":{"prefab_name":"ItemKitLiquidTurboVolumePump","prefab_hash":-1805020897,"desc":"","name":"Kit (Turbo Volume Pump - Liquid)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLiquidUmbilical":{"prefab":{"prefab_name":"ItemKitLiquidUmbilical","prefab_hash":1571996765,"desc":"","name":"Kit (Liquid Umbilical)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLocker":{"prefab":{"prefab_name":"ItemKitLocker","prefab_hash":882301399,"desc":"","name":"Kit (Locker)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLogicCircuit":{"prefab":{"prefab_name":"ItemKitLogicCircuit","prefab_hash":1512322581,"desc":"","name":"Kit (IC Housing)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLogicInputOutput":{"prefab":{"prefab_name":"ItemKitLogicInputOutput","prefab_hash":1997293610,"desc":"","name":"Kit (Logic I/O)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLogicMemory":{"prefab":{"prefab_name":"ItemKitLogicMemory","prefab_hash":-2098214189,"desc":"","name":"Kit (Logic Memory)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLogicProcessor":{"prefab":{"prefab_name":"ItemKitLogicProcessor","prefab_hash":220644373,"desc":"","name":"Kit (Logic Processor)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLogicSwitch":{"prefab":{"prefab_name":"ItemKitLogicSwitch","prefab_hash":124499454,"desc":"","name":"Kit (Logic Switch)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitLogicTransmitter":{"prefab":{"prefab_name":"ItemKitLogicTransmitter","prefab_hash":1005397063,"desc":"","name":"Kit (Logic Transmitter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitMotherShipCore":{"prefab":{"prefab_name":"ItemKitMotherShipCore","prefab_hash":-344968335,"desc":"","name":"Kit (Mothership)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitMusicMachines":{"prefab":{"prefab_name":"ItemKitMusicMachines","prefab_hash":-2038889137,"desc":"","name":"Kit (Music Machines)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPassiveLargeRadiatorGas":{"prefab":{"prefab_name":"ItemKitPassiveLargeRadiatorGas","prefab_hash":-1752768283,"desc":"","name":"Kit (Medium Radiator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitPassiveLargeRadiatorLiquid":{"prefab":{"prefab_name":"ItemKitPassiveLargeRadiatorLiquid","prefab_hash":1453961898,"desc":"","name":"Kit (Medium Radiator Liquid)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPassthroughHeatExchanger":{"prefab":{"prefab_name":"ItemKitPassthroughHeatExchanger","prefab_hash":636112787,"desc":"","name":"Kit (CounterFlow Heat Exchanger)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPictureFrame":{"prefab":{"prefab_name":"ItemKitPictureFrame","prefab_hash":-2062364768,"desc":"","name":"Kit Picture Frame"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPipe":{"prefab":{"prefab_name":"ItemKitPipe","prefab_hash":-1619793705,"desc":"","name":"Kit (Pipe)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":20,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPipeLiquid":{"prefab":{"prefab_name":"ItemKitPipeLiquid","prefab_hash":-1166461357,"desc":"","name":"Kit (Liquid Pipe)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":20,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPipeOrgan":{"prefab":{"prefab_name":"ItemKitPipeOrgan","prefab_hash":-827125300,"desc":"","name":"Kit (Pipe Organ)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPipeRadiator":{"prefab":{"prefab_name":"ItemKitPipeRadiator","prefab_hash":920411066,"desc":"","name":"Kit (Pipe Radiator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitPipeRadiatorLiquid":{"prefab":{"prefab_name":"ItemKitPipeRadiatorLiquid","prefab_hash":-1697302609,"desc":"","name":"Kit (Pipe Radiator Liquid)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitPipeUtility":{"prefab":{"prefab_name":"ItemKitPipeUtility","prefab_hash":1934508338,"desc":"","name":"Kit (Pipe Utility Gas)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPipeUtilityLiquid":{"prefab":{"prefab_name":"ItemKitPipeUtilityLiquid","prefab_hash":595478589,"desc":"","name":"Kit (Pipe Utility Liquid)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPlanter":{"prefab":{"prefab_name":"ItemKitPlanter","prefab_hash":119096484,"desc":"","name":"Kit (Planter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPortablesConnector":{"prefab":{"prefab_name":"ItemKitPortablesConnector","prefab_hash":1041148999,"desc":"","name":"Kit (Portables Connector)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPowerTransmitter":{"prefab":{"prefab_name":"ItemKitPowerTransmitter","prefab_hash":291368213,"desc":"","name":"Kit (Power Transmitter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPowerTransmitterOmni":{"prefab":{"prefab_name":"ItemKitPowerTransmitterOmni","prefab_hash":-831211676,"desc":"","name":"Kit (Power Transmitter Omni)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPoweredVent":{"prefab":{"prefab_name":"ItemKitPoweredVent","prefab_hash":2015439334,"desc":"","name":"Kit (Powered Vent)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPressureFedGasEngine":{"prefab":{"prefab_name":"ItemKitPressureFedGasEngine","prefab_hash":-121514007,"desc":"","name":"Kit (Pressure Fed Gas Engine)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPressureFedLiquidEngine":{"prefab":{"prefab_name":"ItemKitPressureFedLiquidEngine","prefab_hash":-99091572,"desc":"","name":"Kit (Pressure Fed Liquid Engine)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPressurePlate":{"prefab":{"prefab_name":"ItemKitPressurePlate","prefab_hash":123504691,"desc":"","name":"Kit (Trigger Plate)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitPumpedLiquidEngine":{"prefab":{"prefab_name":"ItemKitPumpedLiquidEngine","prefab_hash":1921918951,"desc":"","name":"Kit (Pumped Liquid Engine)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRailing":{"prefab":{"prefab_name":"ItemKitRailing","prefab_hash":750176282,"desc":"","name":"Kit (Railing)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRecycler":{"prefab":{"prefab_name":"ItemKitRecycler","prefab_hash":849148192,"desc":"","name":"Kit (Recycler)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRegulator":{"prefab":{"prefab_name":"ItemKitRegulator","prefab_hash":1181371795,"desc":"","name":"Kit (Pressure Regulator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitReinforcedWindows":{"prefab":{"prefab_name":"ItemKitReinforcedWindows","prefab_hash":1459985302,"desc":"","name":"Kit (Reinforced Windows)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitResearchMachine":{"prefab":{"prefab_name":"ItemKitResearchMachine","prefab_hash":724776762,"desc":"","name":"Kit Research Machine"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitRespawnPointWallMounted":{"prefab":{"prefab_name":"ItemKitRespawnPointWallMounted","prefab_hash":1574688481,"desc":"","name":"Kit (Respawn)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketAvionics":{"prefab":{"prefab_name":"ItemKitRocketAvionics","prefab_hash":1396305045,"desc":"","name":"Kit (Avionics)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketBattery":{"prefab":{"prefab_name":"ItemKitRocketBattery","prefab_hash":-314072139,"desc":"","name":"Kit (Rocket Battery)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketCargoStorage":{"prefab":{"prefab_name":"ItemKitRocketCargoStorage","prefab_hash":479850239,"desc":"","name":"Kit (Rocket Cargo Storage)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketCelestialTracker":{"prefab":{"prefab_name":"ItemKitRocketCelestialTracker","prefab_hash":-303008602,"desc":"","name":"Kit (Rocket Celestial Tracker)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketCircuitHousing":{"prefab":{"prefab_name":"ItemKitRocketCircuitHousing","prefab_hash":721251202,"desc":"","name":"Kit (Rocket Circuit Housing)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketDatalink":{"prefab":{"prefab_name":"ItemKitRocketDatalink","prefab_hash":-1256996603,"desc":"","name":"Kit (Rocket Datalink)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketGasFuelTank":{"prefab":{"prefab_name":"ItemKitRocketGasFuelTank","prefab_hash":-1629347579,"desc":"","name":"Kit (Rocket Gas Fuel Tank)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketLiquidFuelTank":{"prefab":{"prefab_name":"ItemKitRocketLiquidFuelTank","prefab_hash":2032027950,"desc":"","name":"Kit (Rocket Liquid Fuel Tank)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketManufactory":{"prefab":{"prefab_name":"ItemKitRocketManufactory","prefab_hash":-636127860,"desc":"","name":"Kit (Rocket Manufactory)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketMiner":{"prefab":{"prefab_name":"ItemKitRocketMiner","prefab_hash":-867969909,"desc":"","name":"Kit (Rocket Miner)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketScanner":{"prefab":{"prefab_name":"ItemKitRocketScanner","prefab_hash":1753647154,"desc":"","name":"Kit (Rocket Scanner)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRocketTransformerSmall":{"prefab":{"prefab_name":"ItemKitRocketTransformerSmall","prefab_hash":-932335800,"desc":"","name":"Kit (Transformer Small (Rocket))"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRoverFrame":{"prefab":{"prefab_name":"ItemKitRoverFrame","prefab_hash":1827215803,"desc":"","name":"Kit (Rover Frame)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitRoverMKI":{"prefab":{"prefab_name":"ItemKitRoverMKI","prefab_hash":197243872,"desc":"","name":"Kit (Rover Mk I)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSDBHopper":{"prefab":{"prefab_name":"ItemKitSDBHopper","prefab_hash":323957548,"desc":"","name":"Kit (SDB Hopper)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSatelliteDish":{"prefab":{"prefab_name":"ItemKitSatelliteDish","prefab_hash":178422810,"desc":"","name":"Kit (Medium Satellite Dish)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSecurityPrinter":{"prefab":{"prefab_name":"ItemKitSecurityPrinter","prefab_hash":578078533,"desc":"","name":"Kit (Security Printer)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSensor":{"prefab":{"prefab_name":"ItemKitSensor","prefab_hash":-1776897113,"desc":"","name":"Kit (Sensors)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitShower":{"prefab":{"prefab_name":"ItemKitShower","prefab_hash":735858725,"desc":"","name":"Kit (Shower)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSign":{"prefab":{"prefab_name":"ItemKitSign","prefab_hash":529996327,"desc":"","name":"Kit (Sign)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSleeper":{"prefab":{"prefab_name":"ItemKitSleeper","prefab_hash":326752036,"desc":"","name":"Kit (Sleeper)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSmallDirectHeatExchanger":{"prefab":{"prefab_name":"ItemKitSmallDirectHeatExchanger","prefab_hash":-1332682164,"desc":"","name":"Kit (Small Direct Heat Exchanger)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitSmallSatelliteDish":{"prefab":{"prefab_name":"ItemKitSmallSatelliteDish","prefab_hash":1960952220,"desc":"","name":"Kit (Small Satellite Dish)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSolarPanel":{"prefab":{"prefab_name":"ItemKitSolarPanel","prefab_hash":-1924492105,"desc":"","name":"Kit (Solar Panel)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSolarPanelBasic":{"prefab":{"prefab_name":"ItemKitSolarPanelBasic","prefab_hash":844961456,"desc":"","name":"Kit (Solar Panel Basic)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitSolarPanelBasicReinforced":{"prefab":{"prefab_name":"ItemKitSolarPanelBasicReinforced","prefab_hash":-528695432,"desc":"","name":"Kit (Solar Panel Basic Heavy)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitSolarPanelReinforced":{"prefab":{"prefab_name":"ItemKitSolarPanelReinforced","prefab_hash":-364868685,"desc":"","name":"Kit (Solar Panel Heavy)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSolidGenerator":{"prefab":{"prefab_name":"ItemKitSolidGenerator","prefab_hash":1293995736,"desc":"","name":"Kit (Solid Generator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSorter":{"prefab":{"prefab_name":"ItemKitSorter","prefab_hash":969522478,"desc":"","name":"Kit (Sorter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSpeaker":{"prefab":{"prefab_name":"ItemKitSpeaker","prefab_hash":-126038526,"desc":"","name":"Kit (Speaker)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitStacker":{"prefab":{"prefab_name":"ItemKitStacker","prefab_hash":1013244511,"desc":"","name":"Kit (Stacker)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitStairs":{"prefab":{"prefab_name":"ItemKitStairs","prefab_hash":170878959,"desc":"","name":"Kit (Stairs)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitStairwell":{"prefab":{"prefab_name":"ItemKitStairwell","prefab_hash":-1868555784,"desc":"","name":"Kit (Stairwell)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitStandardChute":{"prefab":{"prefab_name":"ItemKitStandardChute","prefab_hash":2133035682,"desc":"","name":"Kit (Powered Chutes)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitStirlingEngine":{"prefab":{"prefab_name":"ItemKitStirlingEngine","prefab_hash":-1821571150,"desc":"","name":"Kit (Stirling Engine)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitSuitStorage":{"prefab":{"prefab_name":"ItemKitSuitStorage","prefab_hash":1088892825,"desc":"","name":"Kit (Suit Storage)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitTables":{"prefab":{"prefab_name":"ItemKitTables","prefab_hash":-1361598922,"desc":"","name":"Kit (Tables)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitTank":{"prefab":{"prefab_name":"ItemKitTank","prefab_hash":771439840,"desc":"","name":"Kit (Tank)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitTankInsulated":{"prefab":{"prefab_name":"ItemKitTankInsulated","prefab_hash":1021053608,"desc":"","name":"Kit (Tank Insulated)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitToolManufactory":{"prefab":{"prefab_name":"ItemKitToolManufactory","prefab_hash":529137748,"desc":"","name":"Kit (Tool Manufactory)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitTransformer":{"prefab":{"prefab_name":"ItemKitTransformer","prefab_hash":-453039435,"desc":"","name":"Kit (Transformer Large)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitTransformerSmall":{"prefab":{"prefab_name":"ItemKitTransformerSmall","prefab_hash":665194284,"desc":"","name":"Kit (Transformer Small)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitTurbineGenerator":{"prefab":{"prefab_name":"ItemKitTurbineGenerator","prefab_hash":-1590715731,"desc":"","name":"Kit (Turbine Generator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitTurboVolumePump":{"prefab":{"prefab_name":"ItemKitTurboVolumePump","prefab_hash":-1248429712,"desc":"","name":"Kit (Turbo Volume Pump - Gas)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitUprightWindTurbine":{"prefab":{"prefab_name":"ItemKitUprightWindTurbine","prefab_hash":-1798044015,"desc":"","name":"Kit (Upright Wind Turbine)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitVendingMachine":{"prefab":{"prefab_name":"ItemKitVendingMachine","prefab_hash":-2038384332,"desc":"","name":"Kit (Vending Machine)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitVendingMachineRefrigerated":{"prefab":{"prefab_name":"ItemKitVendingMachineRefrigerated","prefab_hash":-1867508561,"desc":"","name":"Kit (Vending Machine Refrigerated)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWall":{"prefab":{"prefab_name":"ItemKitWall","prefab_hash":-1826855889,"desc":"","name":"Kit (Wall)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":30,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWallArch":{"prefab":{"prefab_name":"ItemKitWallArch","prefab_hash":1625214531,"desc":"","name":"Kit (Arched Wall)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":30,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWallFlat":{"prefab":{"prefab_name":"ItemKitWallFlat","prefab_hash":-846838195,"desc":"","name":"Kit (Flat Wall)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":30,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWallGeometry":{"prefab":{"prefab_name":"ItemKitWallGeometry","prefab_hash":-784733231,"desc":"","name":"Kit (Geometric Wall)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":30,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWallIron":{"prefab":{"prefab_name":"ItemKitWallIron","prefab_hash":-524546923,"desc":"","name":"Kit (Iron Wall)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":30,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWallPadded":{"prefab":{"prefab_name":"ItemKitWallPadded","prefab_hash":-821868990,"desc":"","name":"Kit (Padded Wall)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":30,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWaterBottleFiller":{"prefab":{"prefab_name":"ItemKitWaterBottleFiller","prefab_hash":159886536,"desc":"","name":"Kit (Water Bottle Filler)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWaterPurifier":{"prefab":{"prefab_name":"ItemKitWaterPurifier","prefab_hash":611181283,"desc":"","name":"Kit (Water Purifier)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWeatherStation":{"prefab":{"prefab_name":"ItemKitWeatherStation","prefab_hash":337505889,"desc":"","name":"Kit (Weather Station)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemKitWindTurbine":{"prefab":{"prefab_name":"ItemKitWindTurbine","prefab_hash":-868916503,"desc":"","name":"Kit (Wind Turbine)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemKitWindowShutter":{"prefab":{"prefab_name":"ItemKitWindowShutter","prefab_hash":1779979754,"desc":"","name":"Kit (Window Shutter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemLabeller":{"prefab":{"prefab_name":"ItemLabeller","prefab_hash":-743968726,"desc":"A labeller lets you set names and values on a variety of devices and structures, including Console and Logic.","name":"Labeller"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemLaptop":{"prefab":{"prefab_name":"ItemLaptop","prefab_hash":141535121,"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","name":"Laptop"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","PressureExternal":"Read","On":"ReadWrite","TemperatureExternal":"Read","PositionX":"Read","PositionY":"Read","PositionZ":"Read","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":true,"circuit_holder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"},{"name":"Battery","typ":"Battery"},{"name":"Motherboard","typ":"Motherboard"}]},"ItemLeadIngot":{"prefab":{"prefab_name":"ItemLeadIngot","prefab_hash":2134647745,"desc":"","name":"Ingot (Lead)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Lead":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemLeadOre":{"prefab":{"prefab_name":"ItemLeadOre","prefab_hash":-190236170,"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.","name":"Ore (Lead)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Lead":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemLightSword":{"prefab":{"prefab_name":"ItemLightSword","prefab_hash":1949076595,"desc":"A charming, if useless, pseudo-weapon. (Creative only.)","name":"Light Sword"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemLiquidCanisterEmpty":{"prefab":{"prefab_name":"ItemLiquidCanisterEmpty","prefab_hash":-185207387,"desc":"","name":"Liquid Canister"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"LiquidCanister","sorting_class":"Atmospherics"}},"ItemLiquidCanisterSmart":{"prefab":{"prefab_name":"ItemLiquidCanisterSmart","prefab_hash":777684475,"desc":"0.Mode0\n1.Mode1","name":"Liquid Canister (Smart)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"LiquidCanister","sorting_class":"Atmospherics"}},"ItemLiquidDrain":{"prefab":{"prefab_name":"ItemLiquidDrain","prefab_hash":2036225202,"desc":"","name":"Kit (Liquid Drain)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemLiquidPipeAnalyzer":{"prefab":{"prefab_name":"ItemLiquidPipeAnalyzer","prefab_hash":226055671,"desc":"","name":"Kit (Liquid Pipe Analyzer)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemLiquidPipeHeater":{"prefab":{"prefab_name":"ItemLiquidPipeHeater","prefab_hash":-248475032,"desc":"Creates a Pipe Heater (Liquid).","name":"Pipe Heater Kit (Liquid)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemLiquidPipeValve":{"prefab":{"prefab_name":"ItemLiquidPipeValve","prefab_hash":-2126113312,"desc":"This kit creates a Liquid Valve.","name":"Kit (Liquid Pipe Valve)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemLiquidPipeVolumePump":{"prefab":{"prefab_name":"ItemLiquidPipeVolumePump","prefab_hash":-2106280569,"desc":"","name":"Kit (Liquid Volume Pump)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemLiquidTankStorage":{"prefab":{"prefab_name":"ItemLiquidTankStorage","prefab_hash":2037427578,"desc":"This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister.","name":"Kit (Liquid Canister Storage)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemMKIIAngleGrinder":{"prefab":{"prefab_name":"ItemMKIIAngleGrinder","prefab_hash":240174650,"desc":"Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure.","name":"Mk II Angle Grinder"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIArcWelder":{"prefab":{"prefab_name":"ItemMKIIArcWelder","prefab_hash":-2061979347,"desc":"","name":"Mk II Arc Welder"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIICrowbar":{"prefab":{"prefab_name":"ItemMKIICrowbar","prefab_hash":1440775434,"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.","name":"Mk II Crowbar"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemMKIIDrill":{"prefab":{"prefab_name":"ItemMKIIDrill","prefab_hash":324791548,"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.","name":"Mk II Drill"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Activate":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIDuctTape":{"prefab":{"prefab_name":"ItemMKIIDuctTape","prefab_hash":388774906,"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.","name":"Mk II Duct Tape"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemMKIIMiningDrill":{"prefab":{"prefab_name":"ItemMKIIMiningDrill","prefab_hash":-1875271296,"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.","name":"Mk II Mining Drill"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMKIIScrewdriver":{"prefab":{"prefab_name":"ItemMKIIScrewdriver","prefab_hash":-2015613246,"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.","name":"Mk II Screwdriver"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemMKIIWireCutters":{"prefab":{"prefab_name":"ItemMKIIWireCutters","prefab_hash":-178893251,"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.","name":"Mk II Wire Cutters"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemMKIIWrench":{"prefab":{"prefab_name":"ItemMKIIWrench","prefab_hash":1862001680,"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.","name":"Mk II Wrench"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemMarineBodyArmor":{"prefab":{"prefab_name":"ItemMarineBodyArmor","prefab_hash":1399098998,"desc":"","name":"Marine Armor"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Suit","sorting_class":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMarineHelmet":{"prefab":{"prefab_name":"ItemMarineHelmet","prefab_hash":1073631646,"desc":"","name":"Marine Helmet"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Helmet","sorting_class":"Clothing"},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMilk":{"prefab":{"prefab_name":"ItemMilk","prefab_hash":1327248310,"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.","name":"Milk"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"Milk":1.0},"slot_class":"None","sorting_class":"Resources"}},"ItemMiningBackPack":{"prefab":{"prefab_name":"ItemMiningBackPack","prefab_hash":-1650383245,"desc":"","name":"Mining Backpack"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Back","sorting_class":"Clothing"},"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"}]},"ItemMiningBelt":{"prefab":{"prefab_name":"ItemMiningBelt","prefab_hash":-676435305,"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.","name":"Mining Belt"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Belt","sorting_class":"Clothing"},"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"}]},"ItemMiningBeltMKII":{"prefab":{"prefab_name":"ItemMiningBeltMKII","prefab_hash":1470787934,"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. ","name":"Mining Belt MK II"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Belt","sorting_class":"Clothing"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":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"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"},{"name":"Ore","typ":"Ore"}]},"ItemMiningCharge":{"prefab":{"prefab_name":"ItemMiningCharge","prefab_hash":15829510,"desc":"A low cost, high yield explosive with a 10 second timer.","name":"Mining Charge"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemMiningDrill":{"prefab":{"prefab_name":"ItemMiningDrill","prefab_hash":1055173191,"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.'","name":"Mining Drill"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillHeavy":{"prefab":{"prefab_name":"ItemMiningDrillHeavy","prefab_hash":-1663349918,"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.","name":"Mining Drill (Heavy)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Default","1":"Flatten"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemMiningDrillPneumatic":{"prefab":{"prefab_name":"ItemMiningDrillPneumatic","prefab_hash":1258187304,"desc":"0.Default\n1.Flatten","name":"Pneumatic Mining Drill"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemMkIIToolbelt":{"prefab":{"prefab_name":"ItemMkIIToolbelt","prefab_hash":1467558064,"desc":"A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy.","name":"Tool Belt MK II"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Belt","sorting_class":"Clothing"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":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"},{"name":"Tool","typ":"Tool"},{"name":"Tool","typ":"Tool"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"ItemMuffin":{"prefab":{"prefab_name":"ItemMuffin","prefab_hash":-1864982322,"desc":"A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin.","name":"Muffin"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemMushroom":{"prefab":{"prefab_name":"ItemMushroom","prefab_hash":2044798572,"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.","name":"Mushroom"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":20,"reagents":{"Mushroom":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemNVG":{"prefab":{"prefab_name":"ItemNVG","prefab_hash":982514123,"desc":"","name":"Night Vision Goggles"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Glasses","sorting_class":"Clothing"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemNickelIngot":{"prefab":{"prefab_name":"ItemNickelIngot","prefab_hash":-1406385572,"desc":"","name":"Ingot (Nickel)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Nickel":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemNickelOre":{"prefab":{"prefab_name":"ItemNickelOre","prefab_hash":1830218956,"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.","name":"Ore (Nickel)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Nickel":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemNitrice":{"prefab":{"prefab_name":"ItemNitrice","prefab_hash":-1499471529,"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.","name":"Ice (Nitrice)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemOxite":{"prefab":{"prefab_name":"ItemOxite","prefab_hash":-1805394113,"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.","name":"Ice (Oxite)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPassiveVent":{"prefab":{"prefab_name":"ItemPassiveVent","prefab_hash":238631271,"desc":"This kit creates a Passive Vent among other variants.","name":"Passive Vent"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPassiveVentInsulated":{"prefab":{"prefab_name":"ItemPassiveVentInsulated","prefab_hash":-1397583760,"desc":"","name":"Kit (Insulated Passive Vent)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPeaceLily":{"prefab":{"prefab_name":"ItemPeaceLily","prefab_hash":2042955224,"desc":"A fetching lily with greater resistance to cold temperatures.","name":"Peace Lily"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemPickaxe":{"prefab":{"prefab_name":"ItemPickaxe","prefab_hash":-913649823,"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.","name":"Pickaxe"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemPillHeal":{"prefab":{"prefab_name":"ItemPillHeal","prefab_hash":1118069417,"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.","name":"Pill (Medical)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemPillStun":{"prefab":{"prefab_name":"ItemPillStun","prefab_hash":418958601,"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.","name":"Pill (Paralysis)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemPipeAnalyizer":{"prefab":{"prefab_name":"ItemPipeAnalyizer","prefab_hash":-767597887,"desc":"This kit creates a Pipe Analyzer.","name":"Kit (Pipe Analyzer)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPipeCowl":{"prefab":{"prefab_name":"ItemPipeCowl","prefab_hash":-38898376,"desc":"This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres.","name":"Pipe Cowl"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":20,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPipeDigitalValve":{"prefab":{"prefab_name":"ItemPipeDigitalValve","prefab_hash":-1532448832,"desc":"This kit creates a Digital Valve.","name":"Kit (Digital Valve)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPipeGasMixer":{"prefab":{"prefab_name":"ItemPipeGasMixer","prefab_hash":-1134459463,"desc":"This kit creates a Gas Mixer.","name":"Kit (Gas Mixer)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPipeHeater":{"prefab":{"prefab_name":"ItemPipeHeater","prefab_hash":-1751627006,"desc":"Creates a Pipe Heater (Gas).","name":"Pipe Heater Kit (Gas)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemPipeIgniter":{"prefab":{"prefab_name":"ItemPipeIgniter","prefab_hash":1366030599,"desc":"","name":"Kit (Pipe Igniter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPipeLabel":{"prefab":{"prefab_name":"ItemPipeLabel","prefab_hash":391769637,"desc":"This kit creates a Pipe Label.","name":"Kit (Pipe Label)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":20,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPipeLiquidRadiator":{"prefab":{"prefab_name":"ItemPipeLiquidRadiator","prefab_hash":-906521320,"desc":"This kit creates a Liquid Pipe Convection Radiator.","name":"Kit (Liquid Radiator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPipeMeter":{"prefab":{"prefab_name":"ItemPipeMeter","prefab_hash":1207939683,"desc":"This kit creates a Pipe Meter.","name":"Kit (Pipe Meter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPipeRadiator":{"prefab":{"prefab_name":"ItemPipeRadiator","prefab_hash":-1796655088,"desc":"This kit creates a Pipe Convection Radiator.","name":"Kit (Radiator)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPipeValve":{"prefab":{"prefab_name":"ItemPipeValve","prefab_hash":799323450,"desc":"This kit creates a Valve.","name":"Kit (Pipe Valve)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemPipeVolumePump":{"prefab":{"prefab_name":"ItemPipeVolumePump","prefab_hash":-1766301997,"desc":"This kit creates a Volume Pump.","name":"Kit (Volume Pump)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPlainCake":{"prefab":{"prefab_name":"ItemPlainCake","prefab_hash":-1108244510,"desc":"","name":"Cake"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemPlantEndothermic_Creative":{"prefab":{"prefab_name":"ItemPlantEndothermic_Creative","prefab_hash":-1159179557,"desc":"","name":"Endothermic Plant Creative"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemPlantEndothermic_Genepool1":{"prefab":{"prefab_name":"ItemPlantEndothermic_Genepool1","prefab_hash":851290561,"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.","name":"Winterspawn (Alpha variant)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemPlantEndothermic_Genepool2":{"prefab":{"prefab_name":"ItemPlantEndothermic_Genepool2","prefab_hash":-1414203269,"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.","name":"Winterspawn (Beta variant)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemPlantSampler":{"prefab":{"prefab_name":"ItemPlantSampler","prefab_hash":173023800,"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.","name":"Plant Sampler"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemPlantSwitchGrass":{"prefab":{"prefab_name":"ItemPlantSwitchGrass","prefab_hash":-532672323,"desc":"","name":"Switch Grass"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Default"}},"ItemPlantThermogenic_Creative":{"prefab":{"prefab_name":"ItemPlantThermogenic_Creative","prefab_hash":-1208890208,"desc":"","name":"Thermogenic Plant Creative"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemPlantThermogenic_Genepool1":{"prefab":{"prefab_name":"ItemPlantThermogenic_Genepool1","prefab_hash":-177792789,"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.","name":"Hades Flower (Alpha strain)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemPlantThermogenic_Genepool2":{"prefab":{"prefab_name":"ItemPlantThermogenic_Genepool2","prefab_hash":1819167057,"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.","name":"Hades Flower (Beta strain)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemPlasticSheets":{"prefab":{"prefab_name":"ItemPlasticSheets","prefab_hash":662053345,"desc":"","name":"Plastic Sheets"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"None","sorting_class":"Resources"}},"ItemPotato":{"prefab":{"prefab_name":"ItemPotato","prefab_hash":1929046963,"desc":" Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies.","name":"Potato"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":20,"reagents":{"Potato":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemPotatoBaked":{"prefab":{"prefab_name":"ItemPotatoBaked","prefab_hash":-2111886401,"desc":"","name":"Baked Potato"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":1,"reagents":{"Potato":1.0},"slot_class":"None","sorting_class":"Food"}},"ItemPowerConnector":{"prefab":{"prefab_name":"ItemPowerConnector","prefab_hash":839924019,"desc":"This kit creates a Power Connector.","name":"Kit (Power Connector)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemPumpkin":{"prefab":{"prefab_name":"ItemPumpkin","prefab_hash":1277828144,"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.","name":"Pumpkin"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":20,"reagents":{"Pumpkin":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemPumpkinPie":{"prefab":{"prefab_name":"ItemPumpkinPie","prefab_hash":62768076,"desc":"","name":"Pumpkin Pie"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemPumpkinSoup":{"prefab":{"prefab_name":"ItemPumpkinSoup","prefab_hash":1277979876,"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","name":"Pumpkin Soup"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemPureIce":{"prefab":{"prefab_name":"ItemPureIce","prefab_hash":-1616308158,"desc":"A frozen chunk of pure Water","name":"Pure Ice Water"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceCarbonDioxide":{"prefab":{"prefab_name":"ItemPureIceCarbonDioxide","prefab_hash":-1251009404,"desc":"A frozen chunk of pure Carbon Dioxide","name":"Pure Ice Carbon Dioxide"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceHydrogen":{"prefab":{"prefab_name":"ItemPureIceHydrogen","prefab_hash":944530361,"desc":"A frozen chunk of pure Hydrogen","name":"Pure Ice Hydrogen"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceLiquidCarbonDioxide":{"prefab":{"prefab_name":"ItemPureIceLiquidCarbonDioxide","prefab_hash":-1715945725,"desc":"A frozen chunk of pure Liquid Carbon Dioxide","name":"Pure Ice Liquid Carbon Dioxide"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceLiquidHydrogen":{"prefab":{"prefab_name":"ItemPureIceLiquidHydrogen","prefab_hash":-1044933269,"desc":"A frozen chunk of pure Liquid Hydrogen","name":"Pure Ice Liquid Hydrogen"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceLiquidNitrogen":{"prefab":{"prefab_name":"ItemPureIceLiquidNitrogen","prefab_hash":1674576569,"desc":"A frozen chunk of pure Liquid Nitrogen","name":"Pure Ice Liquid Nitrogen"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceLiquidNitrous":{"prefab":{"prefab_name":"ItemPureIceLiquidNitrous","prefab_hash":1428477399,"desc":"A frozen chunk of pure Liquid Nitrous Oxide","name":"Pure Ice Liquid Nitrous"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceLiquidOxygen":{"prefab":{"prefab_name":"ItemPureIceLiquidOxygen","prefab_hash":541621589,"desc":"A frozen chunk of pure Liquid Oxygen","name":"Pure Ice Liquid Oxygen"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceLiquidPollutant":{"prefab":{"prefab_name":"ItemPureIceLiquidPollutant","prefab_hash":-1748926678,"desc":"A frozen chunk of pure Liquid Pollutant","name":"Pure Ice Liquid Pollutant"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceLiquidVolatiles":{"prefab":{"prefab_name":"ItemPureIceLiquidVolatiles","prefab_hash":-1306628937,"desc":"A frozen chunk of pure Liquid Volatiles","name":"Pure Ice Liquid Volatiles"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceNitrogen":{"prefab":{"prefab_name":"ItemPureIceNitrogen","prefab_hash":-1708395413,"desc":"A frozen chunk of pure Nitrogen","name":"Pure Ice Nitrogen"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceNitrous":{"prefab":{"prefab_name":"ItemPureIceNitrous","prefab_hash":386754635,"desc":"A frozen chunk of pure Nitrous Oxide","name":"Pure Ice NitrousOxide"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceOxygen":{"prefab":{"prefab_name":"ItemPureIceOxygen","prefab_hash":-1150448260,"desc":"A frozen chunk of pure Oxygen","name":"Pure Ice Oxygen"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIcePollutant":{"prefab":{"prefab_name":"ItemPureIcePollutant","prefab_hash":-1755356,"desc":"A frozen chunk of pure Pollutant","name":"Pure Ice Pollutant"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIcePollutedWater":{"prefab":{"prefab_name":"ItemPureIcePollutedWater","prefab_hash":-2073202179,"desc":"A frozen chunk of Polluted Water","name":"Pure Ice Polluted Water"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceSteam":{"prefab":{"prefab_name":"ItemPureIceSteam","prefab_hash":-874791066,"desc":"A frozen chunk of pure Steam","name":"Pure Ice Steam"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemPureIceVolatiles":{"prefab":{"prefab_name":"ItemPureIceVolatiles","prefab_hash":-633723719,"desc":"A frozen chunk of pure Volatiles","name":"Pure Ice Volatiles"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemRTG":{"prefab":{"prefab_name":"ItemRTG","prefab_hash":495305053,"desc":"This kit creates that miracle of modern science, a Kit (Creative RTG).","name":"Kit (Creative RTG)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemRTGSurvival":{"prefab":{"prefab_name":"ItemRTGSurvival","prefab_hash":1817645803,"desc":"This kit creates a Kit (RTG).","name":"Kit (RTG)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemReagentMix":{"prefab":{"prefab_name":"ItemReagentMix","prefab_hash":-1641500434,"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.","name":"Reagent Mix"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ores"}},"ItemRemoteDetonator":{"prefab":{"prefab_name":"ItemRemoteDetonator","prefab_hash":678483886,"desc":"","name":"Remote Detonator"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemReusableFireExtinguisher":{"prefab":{"prefab_name":"ItemReusableFireExtinguisher","prefab_hash":-1773192190,"desc":"Requires a canister filled with any inert liquid to opperate.","name":"Fire Extinguisher (Reusable)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}]},"ItemRice":{"prefab":{"prefab_name":"ItemRice","prefab_hash":658916791,"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.","name":"Rice"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Rice":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemRoadFlare":{"prefab":{"prefab_name":"ItemRoadFlare","prefab_hash":871811564,"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.","name":"Road Flare"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":20,"reagents":null,"slot_class":"Flare","sorting_class":"Default"}},"ItemRocketMiningDrillHead":{"prefab":{"prefab_name":"ItemRocketMiningDrillHead","prefab_hash":2109945337,"desc":"Replaceable drill head for Rocket Miner","name":"Mining-Drill Head (Basic)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"DrillHead","sorting_class":"Default"}},"ItemRocketMiningDrillHeadDurable":{"prefab":{"prefab_name":"ItemRocketMiningDrillHeadDurable","prefab_hash":1530764483,"desc":"","name":"Mining-Drill Head (Durable)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"DrillHead","sorting_class":"Default"}},"ItemRocketMiningDrillHeadHighSpeedIce":{"prefab":{"prefab_name":"ItemRocketMiningDrillHeadHighSpeedIce","prefab_hash":653461728,"desc":"","name":"Mining-Drill Head (High Speed Ice)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"DrillHead","sorting_class":"Default"}},"ItemRocketMiningDrillHeadHighSpeedMineral":{"prefab":{"prefab_name":"ItemRocketMiningDrillHeadHighSpeedMineral","prefab_hash":1440678625,"desc":"","name":"Mining-Drill Head (High Speed Mineral)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"DrillHead","sorting_class":"Default"}},"ItemRocketMiningDrillHeadIce":{"prefab":{"prefab_name":"ItemRocketMiningDrillHeadIce","prefab_hash":-380904592,"desc":"","name":"Mining-Drill Head (Ice)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"DrillHead","sorting_class":"Default"}},"ItemRocketMiningDrillHeadLongTerm":{"prefab":{"prefab_name":"ItemRocketMiningDrillHeadLongTerm","prefab_hash":-684020753,"desc":"","name":"Mining-Drill Head (Long Term)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"DrillHead","sorting_class":"Default"}},"ItemRocketMiningDrillHeadMineral":{"prefab":{"prefab_name":"ItemRocketMiningDrillHeadMineral","prefab_hash":1083675581,"desc":"","name":"Mining-Drill Head (Mineral)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"DrillHead","sorting_class":"Default"}},"ItemRocketScanningHead":{"prefab":{"prefab_name":"ItemRocketScanningHead","prefab_hash":-1198702771,"desc":"","name":"Rocket Scanner Head"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"ScanningHead","sorting_class":"Default"}},"ItemScanner":{"prefab":{"prefab_name":"ItemScanner","prefab_hash":1661270830,"desc":"A mysterious piece of technology, rumored to have Zrillian origins.","name":"Handheld Scanner"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemScrewdriver":{"prefab":{"prefab_name":"ItemScrewdriver","prefab_hash":687940869,"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.","name":"Screwdriver"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemSecurityCamera":{"prefab":{"prefab_name":"ItemSecurityCamera","prefab_hash":-1981101032,"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.","name":"Security Camera"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemSensorLenses":{"prefab":{"prefab_name":"ItemSensorLenses","prefab_hash":-1176140051,"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.","name":"Sensor Lenses"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Glasses","sorting_class":"Clothing"},"logic":{"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","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Sensor Processing Unit","typ":"SensorProcessingUnit"}]},"ItemSensorProcessingUnitCelestialScanner":{"prefab":{"prefab_name":"ItemSensorProcessingUnitCelestialScanner","prefab_hash":-1154200014,"desc":"","name":"Sensor Processing Unit (Celestial Scanner)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"SensorProcessingUnit","sorting_class":"Default"}},"ItemSensorProcessingUnitMesonScanner":{"prefab":{"prefab_name":"ItemSensorProcessingUnitMesonScanner","prefab_hash":-1730464583,"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.","name":"Sensor Processing Unit (T-Ray Scanner)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"SensorProcessingUnit","sorting_class":"Default"}},"ItemSensorProcessingUnitOreScanner":{"prefab":{"prefab_name":"ItemSensorProcessingUnitOreScanner","prefab_hash":-1219128491,"desc":"The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD.","name":"Sensor Processing Unit (Ore Scanner)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"SensorProcessingUnit","sorting_class":"Default"}},"ItemSiliconIngot":{"prefab":{"prefab_name":"ItemSiliconIngot","prefab_hash":-290196476,"desc":"","name":"Ingot (Silicon)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Silicon":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemSiliconOre":{"prefab":{"prefab_name":"ItemSiliconOre","prefab_hash":1103972403,"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.","name":"Ore (Silicon)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Silicon":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemSilverIngot":{"prefab":{"prefab_name":"ItemSilverIngot","prefab_hash":-929742000,"desc":"","name":"Ingot (Silver)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Silver":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemSilverOre":{"prefab":{"prefab_name":"ItemSilverOre","prefab_hash":-916518678,"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.","name":"Ore (Silver)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Silver":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemSolderIngot":{"prefab":{"prefab_name":"ItemSolderIngot","prefab_hash":-82508479,"desc":"","name":"Ingot (Solder)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Solder":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemSolidFuel":{"prefab":{"prefab_name":"ItemSolidFuel","prefab_hash":-365253871,"desc":"","name":"Solid Fuel (Hydrocarbon)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Hydrocarbon":1.0},"slot_class":"Ore","sorting_class":"Resources"}},"ItemSoundCartridgeBass":{"prefab":{"prefab_name":"ItemSoundCartridgeBass","prefab_hash":-1883441704,"desc":"","name":"Sound Cartridge Bass"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"SoundCartridge","sorting_class":"Default"}},"ItemSoundCartridgeDrums":{"prefab":{"prefab_name":"ItemSoundCartridgeDrums","prefab_hash":-1901500508,"desc":"","name":"Sound Cartridge Drums"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"SoundCartridge","sorting_class":"Default"}},"ItemSoundCartridgeLeads":{"prefab":{"prefab_name":"ItemSoundCartridgeLeads","prefab_hash":-1174735962,"desc":"","name":"Sound Cartridge Leads"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"SoundCartridge","sorting_class":"Default"}},"ItemSoundCartridgeSynth":{"prefab":{"prefab_name":"ItemSoundCartridgeSynth","prefab_hash":-1971419310,"desc":"","name":"Sound Cartridge Synth"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"SoundCartridge","sorting_class":"Default"}},"ItemSoyOil":{"prefab":{"prefab_name":"ItemSoyOil","prefab_hash":1387403148,"desc":"","name":"Soy Oil"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"Oil":1.0},"slot_class":"None","sorting_class":"Resources"}},"ItemSoybean":{"prefab":{"prefab_name":"ItemSoybean","prefab_hash":1924673028,"desc":" Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil","name":"Soybean"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"Soy":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemSpaceCleaner":{"prefab":{"prefab_name":"ItemSpaceCleaner","prefab_hash":-1737666461,"desc":"There was a time when humanity really wanted to keep space clean. That time has passed.","name":"Space Cleaner"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ItemSpaceHelmet":{"prefab":{"prefab_name":"ItemSpaceHelmet","prefab_hash":714830451,"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.","name":"Space Helmet"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Helmet","sorting_class":"Clothing"},"logic":{"logic_slot_types":{},"logic_types":{"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"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"ItemSpaceIce":{"prefab":{"prefab_name":"ItemSpaceIce","prefab_hash":675686937,"desc":"","name":"Space Ice"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"Ore","sorting_class":"Ores"}},"ItemSpaceOre":{"prefab":{"prefab_name":"ItemSpaceOre","prefab_hash":2131916219,"desc":"Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores.","name":"Dirty Ore"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":100,"reagents":null,"slot_class":"Ore","sorting_class":"Ores"}},"ItemSpacepack":{"prefab":{"prefab_name":"ItemSpacepack","prefab_hash":-1260618380,"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.","name":"Spacepack"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Back","sorting_class":"Clothing"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Activate":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"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"}]},"ItemSprayCanBlack":{"prefab":{"prefab_name":"ItemSprayCanBlack","prefab_hash":-688107795,"desc":"Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses.","name":"Spray Paint (Black)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanBlue":{"prefab":{"prefab_name":"ItemSprayCanBlue","prefab_hash":-498464883,"desc":"What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'","name":"Spray Paint (Blue)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanBrown":{"prefab":{"prefab_name":"ItemSprayCanBrown","prefab_hash":845176977,"desc":"In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed.","name":"Spray Paint (Brown)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanGreen":{"prefab":{"prefab_name":"ItemSprayCanGreen","prefab_hash":-1880941852,"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.","name":"Spray Paint (Green)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanGrey":{"prefab":{"prefab_name":"ItemSprayCanGrey","prefab_hash":-1645266981,"desc":"Arguably the most popular color in the universe, grey was invented so designers had something to do.","name":"Spray Paint (Grey)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanKhaki":{"prefab":{"prefab_name":"ItemSprayCanKhaki","prefab_hash":1918456047,"desc":"Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode.","name":"Spray Paint (Khaki)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanOrange":{"prefab":{"prefab_name":"ItemSprayCanOrange","prefab_hash":-158007629,"desc":"Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove.","name":"Spray Paint (Orange)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanPink":{"prefab":{"prefab_name":"ItemSprayCanPink","prefab_hash":1344257263,"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.","name":"Spray Paint (Pink)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanPurple":{"prefab":{"prefab_name":"ItemSprayCanPurple","prefab_hash":30686509,"desc":"Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong.","name":"Spray Paint (Purple)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanRed":{"prefab":{"prefab_name":"ItemSprayCanRed","prefab_hash":1514393921,"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.","name":"Spray Paint (Red)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanWhite":{"prefab":{"prefab_name":"ItemSprayCanWhite","prefab_hash":498481505,"desc":"White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff.","name":"Spray Paint (White)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayCanYellow":{"prefab":{"prefab_name":"ItemSprayCanYellow","prefab_hash":995468116,"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.","name":"Spray Paint (Yellow)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Bottle","sorting_class":"Default"}},"ItemSprayGun":{"prefab":{"prefab_name":"ItemSprayGun","prefab_hash":1289723966,"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.","name":"Spray Gun"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"slots":[{"name":"Spray Can","typ":"Bottle"}]},"ItemSteelFrames":{"prefab":{"prefab_name":"ItemSteelFrames","prefab_hash":-1448105779,"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.","name":"Steel Frames"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":30,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemSteelIngot":{"prefab":{"prefab_name":"ItemSteelIngot","prefab_hash":-654790771,"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.","name":"Ingot (Steel)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Steel":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemSteelSheets":{"prefab":{"prefab_name":"ItemSteelSheets","prefab_hash":38555961,"desc":"An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types.","name":"Steel Sheets"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"None","sorting_class":"Resources"}},"ItemStelliteGlassSheets":{"prefab":{"prefab_name":"ItemStelliteGlassSheets","prefab_hash":-2038663432,"desc":"A stronger glass substitute.","name":"Stellite Glass Sheets"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"None","sorting_class":"Resources"}},"ItemStelliteIngot":{"prefab":{"prefab_name":"ItemStelliteIngot","prefab_hash":-1897868623,"desc":"","name":"Ingot (Stellite)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Stellite":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemSugar":{"prefab":{"prefab_name":"ItemSugar","prefab_hash":2111910840,"desc":"","name":"Sugar"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Sugar":10.0},"slot_class":"None","sorting_class":"Resources"}},"ItemSugarCane":{"prefab":{"prefab_name":"ItemSugarCane","prefab_hash":-1335056202,"desc":"","name":"Sugarcane"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"Sugar":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemSuitModCryogenicUpgrade":{"prefab":{"prefab_name":"ItemSuitModCryogenicUpgrade","prefab_hash":-1274308304,"desc":"Enables suits with basic cooling functionality to work with cryogenic liquid.","name":"Cryogenic Suit Upgrade"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"SuitMod","sorting_class":"Default"}},"ItemTablet":{"prefab":{"prefab_name":"ItemTablet","prefab_hash":-229808600,"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.","name":"Handheld Tablet"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"logic":{"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","Error":"Read","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Cartridge","typ":"Cartridge"}]},"ItemTerrainManipulator":{"prefab":{"prefab_name":"ItemTerrainManipulator","prefab_hash":111280987,"desc":"0.Mode0\n1.Mode1","name":"Terrain Manipulator"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Default"},"logic":{"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":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Dirt Canister","typ":"Ore"}]},"ItemTomato":{"prefab":{"prefab_name":"ItemTomato","prefab_hash":-998592080,"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.","name":"Tomato"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":20,"reagents":{"Tomato":1.0},"slot_class":"Plant","sorting_class":"Resources"}},"ItemTomatoSoup":{"prefab":{"prefab_name":"ItemTomatoSoup","prefab_hash":688734890,"desc":"Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine.","name":"Tomato Soup"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Food"}},"ItemToolBelt":{"prefab":{"prefab_name":"ItemToolBelt","prefab_hash":-355127880,"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.","name":"Tool Belt"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Belt","sorting_class":"Clothing"},"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"}]},"ItemTropicalPlant":{"prefab":{"prefab_name":"ItemTropicalPlant","prefab_hash":-800947386,"desc":"An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants.","name":"Tropical Lily"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Resources"}},"ItemUraniumOre":{"prefab":{"prefab_name":"ItemUraniumOre","prefab_hash":-1516581844,"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.","name":"Ore (Uranium)"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":50,"reagents":{"Uranium":1.0},"slot_class":"Ore","sorting_class":"Ores"}},"ItemVolatiles":{"prefab":{"prefab_name":"ItemVolatiles","prefab_hash":1253102035,"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","name":"Ice (Volatiles)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":50,"reagents":null,"slot_class":"Ore","sorting_class":"Ices"}},"ItemWallCooler":{"prefab":{"prefab_name":"ItemWallCooler","prefab_hash":-1567752627,"desc":"This kit creates a Wall Cooler.","name":"Kit (Wall Cooler)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemWallHeater":{"prefab":{"prefab_name":"ItemWallHeater","prefab_hash":1880134612,"desc":"This kit creates a Kit (Wall Heater).","name":"Kit (Wall Heater)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemWallLight":{"prefab":{"prefab_name":"ItemWallLight","prefab_hash":1108423476,"desc":"This kit creates any one of ten Kit (Lights) variants.","name":"Kit (Lights)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemWaspaloyIngot":{"prefab":{"prefab_name":"ItemWaspaloyIngot","prefab_hash":156348098,"desc":"","name":"Ingot (Waspaloy)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":500,"reagents":{"Waspaloy":1.0},"slot_class":"Ingot","sorting_class":"Resources"}},"ItemWaterBottle":{"prefab":{"prefab_name":"ItemWaterBottle","prefab_hash":107741229,"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.","name":"Water Bottle"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"LiquidBottle","sorting_class":"Default"}},"ItemWaterPipeDigitalValve":{"prefab":{"prefab_name":"ItemWaterPipeDigitalValve","prefab_hash":309693520,"desc":"","name":"Kit (Liquid Digital Valve)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemWaterPipeMeter":{"prefab":{"prefab_name":"ItemWaterPipeMeter","prefab_hash":-90898877,"desc":"","name":"Kit (Liquid Pipe Meter)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemWaterWallCooler":{"prefab":{"prefab_name":"ItemWaterWallCooler","prefab_hash":-1721846327,"desc":"","name":"Kit (Liquid Wall Cooler)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":5,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"ItemWearLamp":{"prefab":{"prefab_name":"ItemWearLamp","prefab_hash":-598730959,"desc":"","name":"Headlamp"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Helmet","sorting_class":"Clothing"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"ItemWeldingTorch":{"prefab":{"prefab_name":"ItemWeldingTorch","prefab_hash":-2066892079,"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.","name":"Welding Torch"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"},"slots":[{"name":"Gas Canister","typ":"GasCanister"}]},"ItemWheat":{"prefab":{"prefab_name":"ItemWheat","prefab_hash":-1057658015,"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.","name":"Wheat"},"item":{"consumable":false,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"Carbon":1.0},"slot_class":"Plant","sorting_class":"Default"}},"ItemWireCutters":{"prefab":{"prefab_name":"ItemWireCutters","prefab_hash":1535854074,"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.","name":"Wire Cutters"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"ItemWirelessBatteryCellExtraLarge":{"prefab":{"prefab_name":"ItemWirelessBatteryCellExtraLarge","prefab_hash":-504717121,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Wireless Battery Cell Extra Large"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Battery","sorting_class":"Default"},"logic":{"logic_slot_types":{},"logic_types":{"Mode":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"ItemWreckageAirConditioner1":{"prefab":{"prefab_name":"ItemWreckageAirConditioner1","prefab_hash":-1826023284,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageAirConditioner2":{"prefab":{"prefab_name":"ItemWreckageAirConditioner2","prefab_hash":169888054,"desc":"","name":"Wreckage Air Conditioner"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageHydroponicsTray1":{"prefab":{"prefab_name":"ItemWreckageHydroponicsTray1","prefab_hash":-310178617,"desc":"","name":"Wreckage Hydroponics Tray"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageLargeExtendableRadiator01":{"prefab":{"prefab_name":"ItemWreckageLargeExtendableRadiator01","prefab_hash":-997763,"desc":"","name":"Wreckage Large Extendable Radiator"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageStructureRTG1":{"prefab":{"prefab_name":"ItemWreckageStructureRTG1","prefab_hash":391453348,"desc":"","name":"Wreckage Structure RTG"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageStructureWeatherStation001":{"prefab":{"prefab_name":"ItemWreckageStructureWeatherStation001","prefab_hash":-834664349,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageStructureWeatherStation002":{"prefab":{"prefab_name":"ItemWreckageStructureWeatherStation002","prefab_hash":1464424921,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageStructureWeatherStation003":{"prefab":{"prefab_name":"ItemWreckageStructureWeatherStation003","prefab_hash":542009679,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageStructureWeatherStation004":{"prefab":{"prefab_name":"ItemWreckageStructureWeatherStation004","prefab_hash":-1104478996,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageStructureWeatherStation005":{"prefab":{"prefab_name":"ItemWreckageStructureWeatherStation005","prefab_hash":-919745414,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageStructureWeatherStation006":{"prefab":{"prefab_name":"ItemWreckageStructureWeatherStation006","prefab_hash":1344576960,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageStructureWeatherStation007":{"prefab":{"prefab_name":"ItemWreckageStructureWeatherStation007","prefab_hash":656649558,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageStructureWeatherStation008":{"prefab":{"prefab_name":"ItemWreckageStructureWeatherStation008","prefab_hash":-1214467897,"desc":"","name":"Wreckage Structure Weather Station"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageTurbineGenerator1":{"prefab":{"prefab_name":"ItemWreckageTurbineGenerator1","prefab_hash":-1662394403,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageTurbineGenerator2":{"prefab":{"prefab_name":"ItemWreckageTurbineGenerator2","prefab_hash":98602599,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageTurbineGenerator3":{"prefab":{"prefab_name":"ItemWreckageTurbineGenerator3","prefab_hash":1927790321,"desc":"","name":"Wreckage Turbine Generator"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageWallCooler1":{"prefab":{"prefab_name":"ItemWreckageWallCooler1","prefab_hash":-1682930158,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWreckageWallCooler2":{"prefab":{"prefab_name":"ItemWreckageWallCooler2","prefab_hash":45733800,"desc":"","name":"Wreckage Wall Cooler"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Wreckage","sorting_class":"Default"}},"ItemWrench":{"prefab":{"prefab_name":"ItemWrench","prefab_hash":-1886261558,"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","name":"Wrench"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Tool","sorting_class":"Tools"}},"KitSDBSilo":{"prefab":{"prefab_name":"KitSDBSilo","prefab_hash":1932952652,"desc":"This kit creates a SDB Silo.","name":"Kit (SDB Silo)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"KitStructureCombustionCentrifuge":{"prefab":{"prefab_name":"KitStructureCombustionCentrifuge","prefab_hash":231903234,"desc":"","name":"Kit (Combustion Centrifuge)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Kits"}},"KitchenTableShort":{"prefab":{"prefab_name":"KitchenTableShort","prefab_hash":-1427415566,"desc":"","name":"Kitchen Table (Short)"},"structure":{"small_grid":true}},"KitchenTableSimpleShort":{"prefab":{"prefab_name":"KitchenTableSimpleShort","prefab_hash":-78099334,"desc":"","name":"Kitchen Table (Simple Short)"},"structure":{"small_grid":true}},"KitchenTableSimpleTall":{"prefab":{"prefab_name":"KitchenTableSimpleTall","prefab_hash":-1068629349,"desc":"","name":"Kitchen Table (Simple Tall)"},"structure":{"small_grid":true}},"KitchenTableTall":{"prefab":{"prefab_name":"KitchenTableTall","prefab_hash":-1386237782,"desc":"","name":"Kitchen Table (Tall)"},"structure":{"small_grid":true}},"Lander":{"prefab":{"prefab_name":"Lander","prefab_hash":1605130615,"desc":"","name":"Lander"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"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"}]},"Landingpad_2x2CenterPiece01":{"prefab":{"prefab_name":"Landingpad_2x2CenterPiece01","prefab_hash":-1295222317,"desc":"Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors","name":"Landingpad 2x2 Center Piece"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"Landingpad_BlankPiece":{"prefab":{"prefab_name":"Landingpad_BlankPiece","prefab_hash":912453390,"desc":"","name":"Landingpad"},"structure":{"small_grid":true}},"Landingpad_CenterPiece01":{"prefab":{"prefab_name":"Landingpad_CenterPiece01","prefab_hash":1070143159,"desc":"The target point where the trader shuttle will land. Requires a clear view of the sky.","name":"Landingpad Center"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{},"modes":{"0":"None","1":"NoContact","2":"Moving","3":"Holding","4":"Landed"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[]},"Landingpad_CrossPiece":{"prefab":{"prefab_name":"Landingpad_CrossPiece","prefab_hash":1101296153,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Cross"},"structure":{"small_grid":true}},"Landingpad_DataConnectionPiece":{"prefab":{"prefab_name":"Landingpad_DataConnectionPiece","prefab_hash":-2066405918,"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.","name":"Landingpad Data And Power"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"None","1":"NoContact","2":"Moving","3":"Holding","4":"Landed"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"}],"device_pins_length":null,"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}},"Landingpad_DiagonalPiece01":{"prefab":{"prefab_name":"Landingpad_DiagonalPiece01","prefab_hash":977899131,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Diagonal"},"structure":{"small_grid":true}},"Landingpad_GasConnectorInwardPiece":{"prefab":{"prefab_name":"Landingpad_GasConnectorInwardPiece","prefab_hash":817945707,"desc":"","name":"Landingpad Gas Input"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"Landingpad_GasConnectorOutwardPiece":{"prefab":{"prefab_name":"Landingpad_GasConnectorOutwardPiece","prefab_hash":-1100218307,"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.","name":"Landingpad Gas Output"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"}],"device_pins_length":null,"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}},"Landingpad_GasCylinderTankPiece":{"prefab":{"prefab_name":"Landingpad_GasCylinderTankPiece","prefab_hash":170818567,"desc":"Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders.","name":"Landingpad Gas Storage"},"structure":{"small_grid":true}},"Landingpad_LiquidConnectorInwardPiece":{"prefab":{"prefab_name":"Landingpad_LiquidConnectorInwardPiece","prefab_hash":-1216167727,"desc":"","name":"Landingpad Liquid Input"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"Landingpad_LiquidConnectorOutwardPiece":{"prefab":{"prefab_name":"Landingpad_LiquidConnectorOutwardPiece","prefab_hash":-1788929869,"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.","name":"Landingpad Liquid Output"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"Landingpad_StraightPiece01":{"prefab":{"prefab_name":"Landingpad_StraightPiece01","prefab_hash":-976273247,"desc":"Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.","name":"Landingpad Straight"},"structure":{"small_grid":true}},"Landingpad_TaxiPieceCorner":{"prefab":{"prefab_name":"Landingpad_TaxiPieceCorner","prefab_hash":-1872345847,"desc":"","name":"Landingpad Taxi Corner"},"structure":{"small_grid":true}},"Landingpad_TaxiPieceHold":{"prefab":{"prefab_name":"Landingpad_TaxiPieceHold","prefab_hash":146051619,"desc":"","name":"Landingpad Taxi Hold"},"structure":{"small_grid":true}},"Landingpad_TaxiPieceStraight":{"prefab":{"prefab_name":"Landingpad_TaxiPieceStraight","prefab_hash":-1477941080,"desc":"","name":"Landingpad Taxi Straight"},"structure":{"small_grid":true}},"Landingpad_ThreshholdPiece":{"prefab":{"prefab_name":"Landingpad_ThreshholdPiece","prefab_hash":-1514298582,"desc":"","name":"Landingpad Threshhold"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"LandingPad","role":"Input"},{"typ":"Data","role":"Input"}],"device_pins_length":null,"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}},"LogicStepSequencer8":{"prefab":{"prefab_name":"LogicStepSequencer8","prefab_hash":1531272458,"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.","name":"Logic Step Sequencer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","Time":"ReadWrite","Bpm":"ReadWrite","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Whole Note","1":"Half Note","2":"Quarter Note","3":"Eighth Note","4":"Sixteenth Note"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Sound Cartridge","typ":"SoundCartridge"}],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"Meteorite":{"prefab":{"prefab_name":"Meteorite","prefab_hash":-99064335,"desc":"","name":"Meteorite"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"MonsterEgg":{"prefab":{"prefab_name":"MonsterEgg","prefab_hash":-1667675295,"desc":"","name":""},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"MotherboardComms":{"prefab":{"prefab_name":"MotherboardComms","prefab_hash":-337075633,"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.","name":"Communications Motherboard"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Motherboard","sorting_class":"Default"}},"MotherboardLogic":{"prefab":{"prefab_name":"MotherboardLogic","prefab_hash":502555944,"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.","name":"Logic Motherboard"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Motherboard","sorting_class":"Default"}},"MotherboardMissionControl":{"prefab":{"prefab_name":"MotherboardMissionControl","prefab_hash":-127121474,"desc":"","name":""},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Motherboard","sorting_class":"Default"}},"MotherboardProgrammableChip":{"prefab":{"prefab_name":"MotherboardProgrammableChip","prefab_hash":-161107071,"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.","name":"IC Editor Motherboard"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Motherboard","sorting_class":"Default"}},"MotherboardRockets":{"prefab":{"prefab_name":"MotherboardRockets","prefab_hash":-806986392,"desc":"","name":"Rocket Control Motherboard"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Motherboard","sorting_class":"Default"}},"MotherboardSorter":{"prefab":{"prefab_name":"MotherboardSorter","prefab_hash":-1908268220,"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.","name":"Sorter Motherboard"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Motherboard","sorting_class":"Default"}},"MothershipCore":{"prefab":{"prefab_name":"MothershipCore","prefab_hash":-1930442922,"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.","name":"Mothership Core"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"NpcChick":{"prefab":{"prefab_name":"NpcChick","prefab_hash":155856647,"desc":"","name":"Chick"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"NpcChicken":{"prefab":{"prefab_name":"NpcChicken","prefab_hash":399074198,"desc":"","name":"Chicken"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Brain","typ":"Organ"},{"name":"Lungs","typ":"Organ"}]},"PassiveSpeaker":{"prefab":{"prefab_name":"PassiveSpeaker","prefab_hash":248893646,"desc":"","name":"Passive Speaker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Volume":"ReadWrite","PrefabHash":"ReadWrite","SoundAlert":"ReadWrite","ReferenceId":"ReadWrite","NameHash":"ReadWrite"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"}],"device_pins_length":null,"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}},"PipeBenderMod":{"prefab":{"prefab_name":"PipeBenderMod","prefab_hash":443947415,"desc":"Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Pipe Bender Mod"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"PortableComposter":{"prefab":{"prefab_name":"PortableComposter","prefab_hash":-1958705204,"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","name":"Portable Composter"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"Battery"},{"name":"Liquid Canister","typ":"LiquidCanister"}]},"PortableSolarPanel":{"prefab":{"prefab_name":"PortableSolarPanel","prefab_hash":2043318949,"desc":"","name":"Portable Solar Panel"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Open":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"RailingElegant01":{"prefab":{"prefab_name":"RailingElegant01","prefab_hash":399661231,"desc":"","name":"Railing Elegant (Type 1)"},"structure":{"small_grid":false}},"RailingElegant02":{"prefab":{"prefab_name":"RailingElegant02","prefab_hash":-1898247915,"desc":"","name":"Railing Elegant (Type 2)"},"structure":{"small_grid":false}},"RailingIndustrial02":{"prefab":{"prefab_name":"RailingIndustrial02","prefab_hash":-2072792175,"desc":"","name":"Railing Industrial (Type 2)"},"structure":{"small_grid":false}},"ReagentColorBlue":{"prefab":{"prefab_name":"ReagentColorBlue","prefab_hash":980054869,"desc":"","name":"Color Dye (Blue)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"ColorBlue":10.0},"slot_class":"None","sorting_class":"Resources"}},"ReagentColorGreen":{"prefab":{"prefab_name":"ReagentColorGreen","prefab_hash":120807542,"desc":"","name":"Color Dye (Green)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"ColorGreen":10.0},"slot_class":"None","sorting_class":"Resources"}},"ReagentColorOrange":{"prefab":{"prefab_name":"ReagentColorOrange","prefab_hash":-400696159,"desc":"","name":"Color Dye (Orange)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"ColorOrange":10.0},"slot_class":"None","sorting_class":"Resources"}},"ReagentColorRed":{"prefab":{"prefab_name":"ReagentColorRed","prefab_hash":1998377961,"desc":"","name":"Color Dye (Red)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"ColorRed":10.0},"slot_class":"None","sorting_class":"Resources"}},"ReagentColorYellow":{"prefab":{"prefab_name":"ReagentColorYellow","prefab_hash":635208006,"desc":"","name":"Color Dye (Yellow)"},"item":{"consumable":true,"filter_type":null,"ingredient":true,"max_quantity":100,"reagents":{"ColorYellow":10.0},"slot_class":"None","sorting_class":"Resources"}},"RespawnPoint":{"prefab":{"prefab_name":"RespawnPoint","prefab_hash":-788672929,"desc":"Place a respawn point to set a player entry point to your base when loading in, or returning from the dead.","name":"Respawn Point"},"structure":{"small_grid":true}},"RespawnPointWallMounted":{"prefab":{"prefab_name":"RespawnPointWallMounted","prefab_hash":-491247370,"desc":"","name":"Respawn Point (Mounted)"},"structure":{"small_grid":true}},"Robot":{"prefab":{"prefab_name":"Robot","prefab_hash":434786784,"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","name":"AIMeE Bot"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"logic":{"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"},"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"}},"logic_types":{"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"},"modes":{"0":"None","1":"Follow","2":"MoveToTarget","3":"Roam","4":"Unload","5":"PathToTarget","6":"StorageFull"},"transmission_receiver":false,"wireless_logic":true,"circuit_holder":true},"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"}]},"RoverCargo":{"prefab":{"prefab_name":"RoverCargo","prefab_hash":350726273,"desc":"Connects to Logic Transmitter","name":"Rover (Cargo)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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"},"modes":null,"transmission_receiver":false,"wireless_logic":true,"circuit_holder":false},"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":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI":{"prefab":{"prefab_name":"Rover_MkI","prefab_hash":-2049946335,"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","name":"Rover MkI"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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"},"modes":null,"transmission_receiver":false,"wireless_logic":true,"circuit_holder":false},"slots":[{"name":"Entity","typ":"Entity"},{"name":"Entity","typ":"Entity"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"Rover_MkI_build_states":{"prefab":{"prefab_name":"Rover_MkI_build_states","prefab_hash":861674123,"desc":"","name":"Rover MKI"},"structure":{"small_grid":false}},"SMGMagazine":{"prefab":{"prefab_name":"SMGMagazine","prefab_hash":-256607540,"desc":"","name":"SMG Magazine"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Magazine","sorting_class":"Default"}},"SeedBag_Cocoa":{"prefab":{"prefab_name":"SeedBag_Cocoa","prefab_hash":1139887531,"desc":"","name":"Cocoa Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Corn":{"prefab":{"prefab_name":"SeedBag_Corn","prefab_hash":-1290755415,"desc":"Grow a Corn.","name":"Corn Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Fern":{"prefab":{"prefab_name":"SeedBag_Fern","prefab_hash":-1990600883,"desc":"Grow a Fern.","name":"Fern Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Mushroom":{"prefab":{"prefab_name":"SeedBag_Mushroom","prefab_hash":311593418,"desc":"Grow a Mushroom.","name":"Mushroom Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Potato":{"prefab":{"prefab_name":"SeedBag_Potato","prefab_hash":1005571172,"desc":"Grow a Potato.","name":"Potato Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Pumpkin":{"prefab":{"prefab_name":"SeedBag_Pumpkin","prefab_hash":1423199840,"desc":"Grow a Pumpkin.","name":"Pumpkin Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Rice":{"prefab":{"prefab_name":"SeedBag_Rice","prefab_hash":-1691151239,"desc":"Grow some Rice.","name":"Rice Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Soybean":{"prefab":{"prefab_name":"SeedBag_Soybean","prefab_hash":1783004244,"desc":"Grow some Soybean.","name":"Soybean Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_SugarCane":{"prefab":{"prefab_name":"SeedBag_SugarCane","prefab_hash":-1884103228,"desc":"","name":"Sugarcane Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Switchgrass":{"prefab":{"prefab_name":"SeedBag_Switchgrass","prefab_hash":488360169,"desc":"","name":"Switchgrass Seed"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Tomato":{"prefab":{"prefab_name":"SeedBag_Tomato","prefab_hash":-1922066841,"desc":"Grow a Tomato.","name":"Tomato Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SeedBag_Wheet":{"prefab":{"prefab_name":"SeedBag_Wheet","prefab_hash":-654756733,"desc":"Grow some Wheat.","name":"Wheat Seeds"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":10,"reagents":null,"slot_class":"Plant","sorting_class":"Food"}},"SpaceShuttle":{"prefab":{"prefab_name":"SpaceShuttle","prefab_hash":-1991297271,"desc":"An antiquated Sinotai transport craft, long since decommissioned.","name":"Space Shuttle"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"},"slots":[{"name":"Captain's Seat","typ":"Entity"},{"name":"Passenger Seat Left","typ":"Entity"},{"name":"Passenger Seat Right","typ":"Entity"}]},"StopWatch":{"prefab":{"prefab_name":"StopWatch","prefab_hash":-1527229051,"desc":"","name":"Stop Watch"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","Time":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"StructureAccessBridge":{"prefab":{"prefab_name":"StructureAccessBridge","prefab_hash":1298920475,"desc":"Extendable bridge that spans three grids","name":"Access Bridge"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Activate":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureActiveVent":{"prefab":{"prefab_name":"StructureActiveVent","prefab_hash":-1129453144,"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 ...","name":"Active Vent"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"},{"typ":"Pipe","role":"None"}],"device_pins_length":null,"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}},"StructureAdvancedComposter":{"prefab":{"prefab_name":"StructureAdvancedComposter","prefab_hash":446212963,"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","name":"Advanced Composter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"}],"device_pins_length":null,"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}},"StructureAdvancedFurnace":{"prefab":{"prefab_name":"StructureAdvancedFurnace","prefab_hash":545937711,"desc":"The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure.","name":"Advanced Furnace"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"device_pins_length":null,"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}},"StructureAdvancedPackagingMachine":{"prefab":{"prefab_name":"StructureAdvancedPackagingMachine","prefab_hash":-463037670,"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.","name":"Advanced Packaging Machine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memory_access":"ReadWrite","memory_size":64}},"StructureAirConditioner":{"prefab":{"prefab_name":"StructureAirConditioner","prefab_hash":-2087593337,"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.","name":"Air Conditioner"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrogenOutput2":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidOxygenOutput2":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"Read","RatioLiquidVolatilesOutput2":"Read","RatioSteamInput":"Read","RatioSteamOutput":"Read","RatioSteamOutput2":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidCarbonDioxideOutput2":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidPollutantOutput2":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidNitrousOxideOutput2":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Idle","1":"Active"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Waste"},{"typ":"Power","role":"None"}],"device_pins_length":2,"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}},"StructureAirlock":{"prefab":{"prefab_name":"StructureAirlock","prefab_hash":-2105052344,"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.","name":"Airlock"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureAirlockGate":{"prefab":{"prefab_name":"StructureAirlockGate","prefab_hash":1736080881,"desc":"1 x 1 modular door piece for building hangar doors.","name":"Small Hangar Door"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureAngledBench":{"prefab":{"prefab_name":"StructureAngledBench","prefab_hash":1811979158,"desc":"","name":"Bench (Angled)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureArcFurnace":{"prefab":{"prefab_name":"StructureArcFurnace","prefab_hash":-247344692,"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.","name":"Arc Furnace"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Ore"},{"name":"Export","typ":"Ingot"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureAreaPowerControl":{"prefab":{"prefab_name":"StructureAreaPowerControl","prefab_hash":1999523701,"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.","name":"Area Power Control"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Idle","1":"Discharged","2":"Discharging","3":"Charging","4":"Charged"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructureAreaPowerControlReversed":{"prefab":{"prefab_name":"StructureAreaPowerControlReversed","prefab_hash":-1032513487,"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.","name":"Area Power Control"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Idle","1":"Discharged","2":"Discharging","3":"Charging","4":"Charged"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructureAutoMinerSmall":{"prefab":{"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":{"small_grid":true},"logic":{"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":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureAutolathe":{"prefab":{"prefab_name":"StructureAutolathe","prefab_hash":336213101,"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 ","name":"Autolathe"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memory_access":"ReadWrite","memory_size":64}},"StructureAutomatedOven":{"prefab":{"prefab_name":"StructureAutomatedOven","prefab_hash":-1672404896,"desc":"","name":"Automated Oven"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memory_access":"ReadWrite","memory_size":64}},"StructureBackLiquidPressureRegulator":{"prefab":{"prefab_name":"StructureBackLiquidPressureRegulator","prefab_hash":2099900163,"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.","name":"Liquid Back Volume Regulator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureBackPressureRegulator":{"prefab":{"prefab_name":"StructureBackPressureRegulator","prefab_hash":-1149857558,"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.","name":"Back Pressure Regulator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureBasketHoop":{"prefab":{"prefab_name":"StructureBasketHoop","prefab_hash":-1613497288,"desc":"","name":"Basket Hoop"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBattery":{"prefab":{"prefab_name":"StructureBattery","prefab_hash":-400115994,"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).","name":"Station Battery"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"Read","Error":"Read","Lock":"ReadWrite","Charge":"Read","Maximum":"Read","Ratio":"Read","PowerPotential":"Read","PowerActual":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructureBatteryCharger":{"prefab":{"prefab_name":"StructureBatteryCharger","prefab_hash":1945930022,"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.","name":"Battery Cell Charger"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBatteryChargerSmall":{"prefab":{"prefab_name":"StructureBatteryChargerSmall","prefab_hash":-761772413,"desc":"","name":"Battery Charger Small"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"},{"name":"Battery","typ":"Battery"}],"device":{"connection_list":[{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBatteryLarge":{"prefab":{"prefab_name":"StructureBatteryLarge","prefab_hash":-1388288459,"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). ","name":"Station Battery (Large)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"Read","Error":"Read","Lock":"ReadWrite","Charge":"Read","Maximum":"Read","Ratio":"Read","PowerPotential":"Read","PowerActual":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructureBatteryMedium":{"prefab":{"prefab_name":"StructureBatteryMedium","prefab_hash":-1125305264,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Battery (Medium)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"Read","Charge":"Read","Maximum":"Read","Ratio":"Read","PowerPotential":"Read","PowerActual":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureBatterySmall":{"prefab":{"prefab_name":"StructureBatterySmall","prefab_hash":-2123455080,"desc":"0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full","name":"Auxiliary Rocket Battery "},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"Read","Charge":"Read","Maximum":"Read","Ratio":"Read","PowerPotential":"Read","PowerActual":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Empty","1":"Critical","2":"VeryLow","3":"Low","4":"Medium","5":"High","6":"Full"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureBeacon":{"prefab":{"prefab_name":"StructureBeacon","prefab_hash":-188177083,"desc":"","name":"Beacon"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Color":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBench":{"prefab":{"prefab_name":"StructureBench","prefab_hash":-2042448192,"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.","name":"Powered Bench"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBench1":{"prefab":{"prefab_name":"StructureBench1","prefab_hash":406745009,"desc":"","name":"Bench (Counter Style)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBench2":{"prefab":{"prefab_name":"StructureBench2","prefab_hash":-2127086069,"desc":"","name":"Bench (High Tech Style)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBench3":{"prefab":{"prefab_name":"StructureBench3","prefab_hash":-164622691,"desc":"","name":"Bench (Frame Style)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBench4":{"prefab":{"prefab_name":"StructureBench4","prefab_hash":1750375230,"desc":"","name":"Bench (Workbench Style)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Appliance 1","typ":"Appliance"},{"name":"Appliance 2","typ":"Appliance"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBlastDoor":{"prefab":{"prefab_name":"StructureBlastDoor","prefab_hash":337416191,"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.","name":"Blast Door"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBlockBed":{"prefab":{"prefab_name":"StructureBlockBed","prefab_hash":697908419,"desc":"Description coming.","name":"Block Bed"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connection_list":[{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureBlocker":{"prefab":{"prefab_name":"StructureBlocker","prefab_hash":378084505,"desc":"","name":"Blocker"},"structure":{"small_grid":false}},"StructureCableAnalysizer":{"prefab":{"prefab_name":"StructureCableAnalysizer","prefab_hash":1036015121,"desc":"","name":"Cable Analyzer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PowerPotential":"Read","PowerActual":"Read","PowerRequired":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureCableCorner":{"prefab":{"prefab_name":"StructureCableCorner","prefab_hash":-889269388,"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).","name":"Cable (Corner)"},"structure":{"small_grid":true}},"StructureCableCorner3":{"prefab":{"prefab_name":"StructureCableCorner3","prefab_hash":980469101,"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).","name":"Cable (3-Way Corner)"},"structure":{"small_grid":true}},"StructureCableCorner3Burnt":{"prefab":{"prefab_name":"StructureCableCorner3Burnt","prefab_hash":318437449,"desc":"","name":"Burnt Cable (3-Way Corner)"},"structure":{"small_grid":true}},"StructureCableCorner3HBurnt":{"prefab":{"prefab_name":"StructureCableCorner3HBurnt","prefab_hash":2393826,"desc":"","name":""},"structure":{"small_grid":true}},"StructureCableCorner4":{"prefab":{"prefab_name":"StructureCableCorner4","prefab_hash":-1542172466,"desc":"","name":"Cable (4-Way Corner)"},"structure":{"small_grid":true}},"StructureCableCorner4Burnt":{"prefab":{"prefab_name":"StructureCableCorner4Burnt","prefab_hash":268421361,"desc":"","name":"Burnt Cable (4-Way Corner)"},"structure":{"small_grid":true}},"StructureCableCorner4HBurnt":{"prefab":{"prefab_name":"StructureCableCorner4HBurnt","prefab_hash":-981223316,"desc":"","name":"Burnt Heavy Cable (4-Way Corner)"},"structure":{"small_grid":true}},"StructureCableCornerBurnt":{"prefab":{"prefab_name":"StructureCableCornerBurnt","prefab_hash":-177220914,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"small_grid":true}},"StructureCableCornerH":{"prefab":{"prefab_name":"StructureCableCornerH","prefab_hash":-39359015,"desc":"","name":"Heavy Cable (Corner)"},"structure":{"small_grid":true}},"StructureCableCornerH3":{"prefab":{"prefab_name":"StructureCableCornerH3","prefab_hash":-1843379322,"desc":"","name":"Heavy Cable (3-Way Corner)"},"structure":{"small_grid":true}},"StructureCableCornerH4":{"prefab":{"prefab_name":"StructureCableCornerH4","prefab_hash":205837861,"desc":"","name":"Heavy Cable (4-Way Corner)"},"structure":{"small_grid":true}},"StructureCableCornerHBurnt":{"prefab":{"prefab_name":"StructureCableCornerHBurnt","prefab_hash":1931412811,"desc":"","name":"Burnt Cable (Corner)"},"structure":{"small_grid":true}},"StructureCableFuse100k":{"prefab":{"prefab_name":"StructureCableFuse100k","prefab_hash":281380789,"desc":"","name":"Fuse (100kW)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureCableFuse1k":{"prefab":{"prefab_name":"StructureCableFuse1k","prefab_hash":-1103727120,"desc":"","name":"Fuse (1kW)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureCableFuse50k":{"prefab":{"prefab_name":"StructureCableFuse50k","prefab_hash":-349716617,"desc":"","name":"Fuse (50kW)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureCableFuse5k":{"prefab":{"prefab_name":"StructureCableFuse5k","prefab_hash":-631590668,"desc":"","name":"Fuse (5kW)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureCableJunction":{"prefab":{"prefab_name":"StructureCableJunction","prefab_hash":-175342021,"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).","name":"Cable (Junction)"},"structure":{"small_grid":true}},"StructureCableJunction4":{"prefab":{"prefab_name":"StructureCableJunction4","prefab_hash":1112047202,"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).","name":"Cable (4-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunction4Burnt":{"prefab":{"prefab_name":"StructureCableJunction4Burnt","prefab_hash":-1756896811,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunction4HBurnt":{"prefab":{"prefab_name":"StructureCableJunction4HBurnt","prefab_hash":-115809132,"desc":"","name":"Burnt Cable (4-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunction5":{"prefab":{"prefab_name":"StructureCableJunction5","prefab_hash":894390004,"desc":"","name":"Cable (5-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunction5Burnt":{"prefab":{"prefab_name":"StructureCableJunction5Burnt","prefab_hash":1545286256,"desc":"","name":"Burnt Cable (5-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunction6":{"prefab":{"prefab_name":"StructureCableJunction6","prefab_hash":-1404690610,"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).","name":"Cable (6-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunction6Burnt":{"prefab":{"prefab_name":"StructureCableJunction6Burnt","prefab_hash":-628145954,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunction6HBurnt":{"prefab":{"prefab_name":"StructureCableJunction6HBurnt","prefab_hash":1854404029,"desc":"","name":"Burnt Cable (6-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunctionBurnt":{"prefab":{"prefab_name":"StructureCableJunctionBurnt","prefab_hash":-1620686196,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"small_grid":true}},"StructureCableJunctionH":{"prefab":{"prefab_name":"StructureCableJunctionH","prefab_hash":469451637,"desc":"","name":"Heavy Cable (3-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunctionH4":{"prefab":{"prefab_name":"StructureCableJunctionH4","prefab_hash":-742234680,"desc":"","name":"Heavy Cable (4-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunctionH5":{"prefab":{"prefab_name":"StructureCableJunctionH5","prefab_hash":-1530571426,"desc":"","name":"Heavy Cable (5-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunctionH5Burnt":{"prefab":{"prefab_name":"StructureCableJunctionH5Burnt","prefab_hash":1701593300,"desc":"","name":"Burnt Heavy Cable (5-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunctionH6":{"prefab":{"prefab_name":"StructureCableJunctionH6","prefab_hash":1036780772,"desc":"","name":"Heavy Cable (6-Way Junction)"},"structure":{"small_grid":true}},"StructureCableJunctionHBurnt":{"prefab":{"prefab_name":"StructureCableJunctionHBurnt","prefab_hash":-341365649,"desc":"","name":"Burnt Cable (Junction)"},"structure":{"small_grid":true}},"StructureCableStraight":{"prefab":{"prefab_name":"StructureCableStraight","prefab_hash":605357050,"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).","name":"Cable (Straight)"},"structure":{"small_grid":true}},"StructureCableStraightBurnt":{"prefab":{"prefab_name":"StructureCableStraightBurnt","prefab_hash":-1196981113,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"small_grid":true}},"StructureCableStraightH":{"prefab":{"prefab_name":"StructureCableStraightH","prefab_hash":-146200530,"desc":"","name":"Heavy Cable (Straight)"},"structure":{"small_grid":true}},"StructureCableStraightHBurnt":{"prefab":{"prefab_name":"StructureCableStraightHBurnt","prefab_hash":2085762089,"desc":"","name":"Burnt Cable (Straight)"},"structure":{"small_grid":true}},"StructureCamera":{"prefab":{"prefab_name":"StructureCamera","prefab_hash":-342072665,"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.","name":"Camera"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Mode":"ReadWrite","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureCapsuleTankGas":{"prefab":{"prefab_name":"StructureCapsuleTankGas","prefab_hash":-1385712131,"desc":"","name":"Gas Capsule Tank Small"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureCapsuleTankLiquid":{"prefab":{"prefab_name":"StructureCapsuleTankLiquid","prefab_hash":1415396263,"desc":"","name":"Liquid Capsule Tank Small"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureCargoStorageMedium":{"prefab":{"prefab_name":"StructureCargoStorageMedium","prefab_hash":1151864003,"desc":"","name":"Cargo Storage (Medium)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"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"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"device_pins_length":null,"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}},"StructureCargoStorageSmall":{"prefab":{"prefab_name":"StructureCargoStorageSmall","prefab_hash":-1493672123,"desc":"","name":"Cargo Storage (Small)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"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"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"device_pins_length":null,"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}},"StructureCentrifuge":{"prefab":{"prefab_name":"StructureCentrifuge","prefab_hash":690945935,"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.","name":"Centrifuge"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Reagents":"Read","On":"ReadWrite","RequiredPower":"Read","ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureChair":{"prefab":{"prefab_name":"StructureChair","prefab_hash":1167659360,"desc":"One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs.","name":"Chair"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureChairBacklessDouble":{"prefab":{"prefab_name":"StructureChairBacklessDouble","prefab_hash":1944858936,"desc":"","name":"Chair (Backless Double)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureChairBacklessSingle":{"prefab":{"prefab_name":"StructureChairBacklessSingle","prefab_hash":1672275150,"desc":"","name":"Chair (Backless Single)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureChairBoothCornerLeft":{"prefab":{"prefab_name":"StructureChairBoothCornerLeft","prefab_hash":-367720198,"desc":"","name":"Chair (Booth Corner Left)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureChairBoothMiddle":{"prefab":{"prefab_name":"StructureChairBoothMiddle","prefab_hash":1640720378,"desc":"","name":"Chair (Booth Middle)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureChairRectangleDouble":{"prefab":{"prefab_name":"StructureChairRectangleDouble","prefab_hash":-1152812099,"desc":"","name":"Chair (Rectangle Double)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureChairRectangleSingle":{"prefab":{"prefab_name":"StructureChairRectangleSingle","prefab_hash":-1425428917,"desc":"","name":"Chair (Rectangle Single)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureChairThickDouble":{"prefab":{"prefab_name":"StructureChairThickDouble","prefab_hash":-1245724402,"desc":"","name":"Chair (Thick Double)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureChairThickSingle":{"prefab":{"prefab_name":"StructureChairThickSingle","prefab_hash":-1510009608,"desc":"","name":"Chair (Thick Single)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureChuteBin":{"prefab":{"prefab_name":"StructureChuteBin","prefab_hash":-850484480,"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.","name":"Chute Bin"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Input","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureChuteCorner":{"prefab":{"prefab_name":"StructureChuteCorner","prefab_hash":1360330136,"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.","name":"Chute (Corner)"},"structure":{"small_grid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteDigitalFlipFlopSplitterLeft":{"prefab":{"prefab_name":"StructureChuteDigitalFlipFlopSplitterLeft","prefab_hash":-810874728,"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.","name":"Chute Digital Flip Flop Splitter Left"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Setting":"ReadWrite","Quantity":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","SettingOutput":"ReadWrite","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Output2"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureChuteDigitalFlipFlopSplitterRight":{"prefab":{"prefab_name":"StructureChuteDigitalFlipFlopSplitterRight","prefab_hash":163728359,"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.","name":"Chute Digital Flip Flop Splitter Right"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Setting":"ReadWrite","Quantity":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","SettingOutput":"ReadWrite","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Output2"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureChuteDigitalValveLeft":{"prefab":{"prefab_name":"StructureChuteDigitalValveLeft","prefab_hash":648608238,"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.","name":"Chute Digital Valve Left"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Open":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","Quantity":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureChuteDigitalValveRight":{"prefab":{"prefab_name":"StructureChuteDigitalValveRight","prefab_hash":-1337091041,"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.","name":"Chute Digital Valve Right"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Open":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","Quantity":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureChuteFlipFlopSplitter":{"prefab":{"prefab_name":"StructureChuteFlipFlopSplitter","prefab_hash":-1446854725,"desc":"A chute that toggles between two outputs","name":"Chute Flip Flop Splitter"},"structure":{"small_grid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteInlet":{"prefab":{"prefab_name":"StructureChuteInlet","prefab_hash":-1469588766,"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.","name":"Chute Inlet"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Lock":"ReadWrite","ClearMemory":"Write","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureChuteJunction":{"prefab":{"prefab_name":"StructureChuteJunction","prefab_hash":-611232514,"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.","name":"Chute (Junction)"},"structure":{"small_grid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteOutlet":{"prefab":{"prefab_name":"StructureChuteOutlet","prefab_hash":-1022714809,"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.","name":"Chute Outlet"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Lock":"ReadWrite","ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureChuteOverflow":{"prefab":{"prefab_name":"StructureChuteOverflow","prefab_hash":225377225,"desc":"The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied.","name":"Chute Overflow"},"structure":{"small_grid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteStraight":{"prefab":{"prefab_name":"StructureChuteStraight","prefab_hash":168307007,"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.","name":"Chute (Straight)"},"structure":{"small_grid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteUmbilicalFemale":{"prefab":{"prefab_name":"StructureChuteUmbilicalFemale","prefab_hash":-1918892177,"desc":"","name":"Umbilical Socket (Chute)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"}],"device_pins_length":null,"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}},"StructureChuteUmbilicalFemaleSide":{"prefab":{"prefab_name":"StructureChuteUmbilicalFemaleSide","prefab_hash":-659093969,"desc":"","name":"Umbilical Socket Angle (Chute)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"}],"device_pins_length":null,"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}},"StructureChuteUmbilicalMale":{"prefab":{"prefab_name":"StructureChuteUmbilicalMale","prefab_hash":-958884053,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Chute)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"Read","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Transport Slot","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureChuteValve":{"prefab":{"prefab_name":"StructureChuteValve","prefab_hash":434875271,"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.","name":"Chute Valve"},"structure":{"small_grid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureChuteWindow":{"prefab":{"prefab_name":"StructureChuteWindow","prefab_hash":-607241919,"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.","name":"Chute (Window)"},"structure":{"small_grid":true},"slots":[{"name":"Transport Slot","typ":"None"}]},"StructureCircuitHousing":{"prefab":{"prefab_name":"StructureCircuitHousing","prefab_hash":-128473777,"desc":"","name":"IC Housing"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","LineNumber":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Error":"Read","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","LineNumber":"ReadWrite","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"device_pins_length":6,"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":{"instructions":null,"memory_access":"ReadWrite","memory_size":0}},"StructureCombustionCentrifuge":{"prefab":{"prefab_name":"StructureCombustionCentrifuge","prefab_hash":1238905683,"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 ","name":"Combustion Centrifuge"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{},"2":{}},"logic_types":{"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","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"Read","RatioSteam":"Read","RatioSteamInput":"Read","RatioSteamOutput":"Read","RatioLiquidCarbonDioxide":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","ReferenceId":"Read","RatioHydrogen":"Read","RatioLiquidHydrogen":"Read","RatioPollutedWater":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":true},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"device_pins_length":2,"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}},"StructureCompositeCladdingAngled":{"prefab":{"prefab_name":"StructureCompositeCladdingAngled","prefab_hash":-1513030150,"desc":"","name":"Composite Cladding (Angled)"},"structure":{"small_grid":false}},"StructureCompositeCladdingAngledCorner":{"prefab":{"prefab_name":"StructureCompositeCladdingAngledCorner","prefab_hash":-69685069,"desc":"","name":"Composite Cladding (Angled Corner)"},"structure":{"small_grid":false}},"StructureCompositeCladdingAngledCornerInner":{"prefab":{"prefab_name":"StructureCompositeCladdingAngledCornerInner","prefab_hash":-1841871763,"desc":"","name":"Composite Cladding (Angled Corner Inner)"},"structure":{"small_grid":false}},"StructureCompositeCladdingAngledCornerInnerLong":{"prefab":{"prefab_name":"StructureCompositeCladdingAngledCornerInnerLong","prefab_hash":-1417912632,"desc":"","name":"Composite Cladding (Angled Corner Inner Long)"},"structure":{"small_grid":false}},"StructureCompositeCladdingAngledCornerInnerLongL":{"prefab":{"prefab_name":"StructureCompositeCladdingAngledCornerInnerLongL","prefab_hash":947705066,"desc":"","name":"Composite Cladding (Angled Corner Inner Long L)"},"structure":{"small_grid":false}},"StructureCompositeCladdingAngledCornerInnerLongR":{"prefab":{"prefab_name":"StructureCompositeCladdingAngledCornerInnerLongR","prefab_hash":-1032590967,"desc":"","name":"Composite Cladding (Angled Corner Inner Long R)"},"structure":{"small_grid":false}},"StructureCompositeCladdingAngledCornerLong":{"prefab":{"prefab_name":"StructureCompositeCladdingAngledCornerLong","prefab_hash":850558385,"desc":"","name":"Composite Cladding (Long Angled Corner)"},"structure":{"small_grid":false}},"StructureCompositeCladdingAngledCornerLongR":{"prefab":{"prefab_name":"StructureCompositeCladdingAngledCornerLongR","prefab_hash":-348918222,"desc":"","name":"Composite Cladding (Long Angled Mirrored Corner)"},"structure":{"small_grid":false}},"StructureCompositeCladdingAngledLong":{"prefab":{"prefab_name":"StructureCompositeCladdingAngledLong","prefab_hash":-387546514,"desc":"","name":"Composite Cladding (Long Angled)"},"structure":{"small_grid":false}},"StructureCompositeCladdingCylindrical":{"prefab":{"prefab_name":"StructureCompositeCladdingCylindrical","prefab_hash":212919006,"desc":"","name":"Composite Cladding (Cylindrical)"},"structure":{"small_grid":false}},"StructureCompositeCladdingCylindricalPanel":{"prefab":{"prefab_name":"StructureCompositeCladdingCylindricalPanel","prefab_hash":1077151132,"desc":"","name":"Composite Cladding (Cylindrical Panel)"},"structure":{"small_grid":false}},"StructureCompositeCladdingPanel":{"prefab":{"prefab_name":"StructureCompositeCladdingPanel","prefab_hash":1997436771,"desc":"","name":"Composite Cladding (Panel)"},"structure":{"small_grid":false}},"StructureCompositeCladdingRounded":{"prefab":{"prefab_name":"StructureCompositeCladdingRounded","prefab_hash":-259357734,"desc":"","name":"Composite Cladding (Rounded)"},"structure":{"small_grid":false}},"StructureCompositeCladdingRoundedCorner":{"prefab":{"prefab_name":"StructureCompositeCladdingRoundedCorner","prefab_hash":1951525046,"desc":"","name":"Composite Cladding (Rounded Corner)"},"structure":{"small_grid":false}},"StructureCompositeCladdingRoundedCornerInner":{"prefab":{"prefab_name":"StructureCompositeCladdingRoundedCornerInner","prefab_hash":110184667,"desc":"","name":"Composite Cladding (Rounded Corner Inner)"},"structure":{"small_grid":false}},"StructureCompositeCladdingSpherical":{"prefab":{"prefab_name":"StructureCompositeCladdingSpherical","prefab_hash":139107321,"desc":"","name":"Composite Cladding (Spherical)"},"structure":{"small_grid":false}},"StructureCompositeCladdingSphericalCap":{"prefab":{"prefab_name":"StructureCompositeCladdingSphericalCap","prefab_hash":534213209,"desc":"","name":"Composite Cladding (Spherical Cap)"},"structure":{"small_grid":false}},"StructureCompositeCladdingSphericalCorner":{"prefab":{"prefab_name":"StructureCompositeCladdingSphericalCorner","prefab_hash":1751355139,"desc":"","name":"Composite Cladding (Spherical Corner)"},"structure":{"small_grid":false}},"StructureCompositeDoor":{"prefab":{"prefab_name":"StructureCompositeDoor","prefab_hash":-793837322,"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.","name":"Composite Door"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureCompositeFloorGrating":{"prefab":{"prefab_name":"StructureCompositeFloorGrating","prefab_hash":324868581,"desc":"While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings.","name":"Composite Floor Grating"},"structure":{"small_grid":false}},"StructureCompositeFloorGrating2":{"prefab":{"prefab_name":"StructureCompositeFloorGrating2","prefab_hash":-895027741,"desc":"","name":"Composite Floor Grating (Type 2)"},"structure":{"small_grid":false}},"StructureCompositeFloorGrating3":{"prefab":{"prefab_name":"StructureCompositeFloorGrating3","prefab_hash":-1113471627,"desc":"","name":"Composite Floor Grating (Type 3)"},"structure":{"small_grid":false}},"StructureCompositeFloorGrating4":{"prefab":{"prefab_name":"StructureCompositeFloorGrating4","prefab_hash":600133846,"desc":"","name":"Composite Floor Grating (Type 4)"},"structure":{"small_grid":false}},"StructureCompositeFloorGratingOpen":{"prefab":{"prefab_name":"StructureCompositeFloorGratingOpen","prefab_hash":2109695912,"desc":"","name":"Composite Floor Grating Open"},"structure":{"small_grid":false}},"StructureCompositeFloorGratingOpenRotated":{"prefab":{"prefab_name":"StructureCompositeFloorGratingOpenRotated","prefab_hash":882307910,"desc":"","name":"Composite Floor Grating Open Rotated"},"structure":{"small_grid":false}},"StructureCompositeWall":{"prefab":{"prefab_name":"StructureCompositeWall","prefab_hash":1237302061,"desc":"Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties.","name":"Composite Wall (Type 1)"},"structure":{"small_grid":false}},"StructureCompositeWall02":{"prefab":{"prefab_name":"StructureCompositeWall02","prefab_hash":718343384,"desc":"","name":"Composite Wall (Type 2)"},"structure":{"small_grid":false}},"StructureCompositeWall03":{"prefab":{"prefab_name":"StructureCompositeWall03","prefab_hash":1574321230,"desc":"","name":"Composite Wall (Type 3)"},"structure":{"small_grid":false}},"StructureCompositeWall04":{"prefab":{"prefab_name":"StructureCompositeWall04","prefab_hash":-1011701267,"desc":"","name":"Composite Wall (Type 4)"},"structure":{"small_grid":false}},"StructureCompositeWindow":{"prefab":{"prefab_name":"StructureCompositeWindow","prefab_hash":-2060571986,"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.","name":"Composite Window"},"structure":{"small_grid":false}},"StructureCompositeWindowIron":{"prefab":{"prefab_name":"StructureCompositeWindowIron","prefab_hash":-688284639,"desc":"","name":"Iron Window"},"structure":{"small_grid":false}},"StructureComputer":{"prefab":{"prefab_name":"StructureComputer","prefab_hash":-626563514,"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","name":"Computer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{},"2":{}},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Data Disk","typ":"DataDisk"},{"name":"Data Disk","typ":"DataDisk"},{"name":"Motherboard","typ":"Motherboard"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureCondensationChamber":{"prefab":{"prefab_name":"StructureCondensationChamber","prefab_hash":1420719315,"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.","name":"Condensation Chamber"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"StructureCondensationValve":{"prefab":{"prefab_name":"StructureCondensationValve","prefab_hash":-965741795,"desc":"Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction.","name":"Condensation Valve"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Output"},{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureConsole":{"prefab":{"prefab_name":"StructureConsole","prefab_hash":235638270,"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.","name":"Console"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureConsoleDual":{"prefab":{"prefab_name":"StructureConsoleDual","prefab_hash":-722284333,"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.","name":"Console Dual"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureConsoleLED1x2":{"prefab":{"prefab_name":"StructureConsoleLED1x2","prefab_hash":-53151617,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Medium)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Color":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Default","1":"Percent","2":"Power"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureConsoleLED1x3":{"prefab":{"prefab_name":"StructureConsoleLED1x3","prefab_hash":-1949054743,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Large)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Color":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Default","1":"Percent","2":"Power"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureConsoleLED5":{"prefab":{"prefab_name":"StructureConsoleLED5","prefab_hash":-815193061,"desc":"0.Default\n1.Percent\n2.Power","name":"LED Display (Small)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Color":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Default","1":"Percent","2":"Power"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureConsoleMonitor":{"prefab":{"prefab_name":"StructureConsoleMonitor","prefab_hash":801677497,"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.","name":"Console Monitor"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Circuit Board","typ":"Circuitboard"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureControlChair":{"prefab":{"prefab_name":"StructureControlChair","prefab_hash":-1961153710,"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.","name":"Control Chair"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Entity","typ":"Entity"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureCornerLocker":{"prefab":{"prefab_name":"StructureCornerLocker","prefab_hash":-1968255729,"desc":"","name":"Corner Locker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureCrateMount":{"prefab":{"prefab_name":"StructureCrateMount","prefab_hash":-733500083,"desc":"","name":"Container Mount"},"structure":{"small_grid":true},"slots":[{"name":"Container Slot","typ":"None"}]},"StructureCryoTube":{"prefab":{"prefab_name":"StructureCryoTube","prefab_hash":1938254586,"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.","name":"CryoTube"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureCryoTubeHorizontal":{"prefab":{"prefab_name":"StructureCryoTubeHorizontal","prefab_hash":1443059329,"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.","name":"Cryo Tube Horizontal"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureCryoTubeVertical":{"prefab":{"prefab_name":"StructureCryoTubeVertical","prefab_hash":-1381321828,"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.","name":"Cryo Tube Vertical"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureDaylightSensor":{"prefab":{"prefab_name":"StructureDaylightSensor","prefab_hash":1076425094,"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.","name":"Daylight Sensor"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Mode":"ReadWrite","Activate":"ReadWrite","Horizontal":"Read","Vertical":"Read","SolarAngle":"Read","On":"ReadWrite","PrefabHash":"Read","SolarIrradiance":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Default","1":"Horizontal","2":"Vertical"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureDeepMiner":{"prefab":{"prefab_name":"StructureDeepMiner","prefab_hash":265720906,"desc":"Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s","name":"Deep Miner"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"Power":"Read","Error":"Read","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureDigitalValve":{"prefab":{"prefab_name":"StructureDigitalValve","prefab_hash":-1280984102,"desc":"The digital valve allows Stationeers to create logic-controlled valves and pipe networks.","name":"Digital Valve"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureDiode":{"prefab":{"prefab_name":"StructureDiode","prefab_hash":1944485013,"desc":"","name":"LED"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Color":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureDiodeSlide":{"prefab":{"prefab_name":"StructureDiodeSlide","prefab_hash":576516101,"desc":"","name":"Diode Slide"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureDockPortSide":{"prefab":{"prefab_name":"StructureDockPortSide","prefab_hash":-137465079,"desc":"","name":"Dock (Port Side)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureDrinkingFountain":{"prefab":{"prefab_name":"StructureDrinkingFountain","prefab_hash":1968371847,"desc":"","name":""},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureElectrolyzer":{"prefab":{"prefab_name":"StructureElectrolyzer","prefab_hash":-1668992663,"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.","name":"Electrolyzer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"Read","RatioSteam":"Read","RatioSteamInput":"Read","RatioSteamOutput":"Read","RatioLiquidCarbonDioxide":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","ReferenceId":"Read","RatioHydrogen":"Read","RatioLiquidHydrogen":"Read","RatioPollutedWater":"Read","NameHash":"Read"},"modes":{"0":"Idle","1":"Active"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":2,"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}},"StructureElectronicsPrinter":{"prefab":{"prefab_name":"StructureElectronicsPrinter","prefab_hash":1307165496,"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.","name":"Electronics Printer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memory_access":"ReadWrite","memory_size":64}},"StructureElevatorLevelFront":{"prefab":{"prefab_name":"StructureElevatorLevelFront","prefab_hash":-827912235,"desc":"","name":"Elevator Level (Cabled)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Activate":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","ElevatorSpeed":"ReadWrite","ElevatorLevel":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureElevatorLevelIndustrial":{"prefab":{"prefab_name":"StructureElevatorLevelIndustrial","prefab_hash":2060648791,"desc":"","name":"Elevator Level"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Activate":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","ElevatorSpeed":"ReadWrite","ElevatorLevel":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"}],"device_pins_length":null,"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}},"StructureElevatorShaft":{"prefab":{"prefab_name":"StructureElevatorShaft","prefab_hash":826144419,"desc":"","name":"Elevator Shaft (Cabled)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","On":"ReadWrite","RequiredPower":"Read","ElevatorSpeed":"ReadWrite","ElevatorLevel":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureElevatorShaftIndustrial":{"prefab":{"prefab_name":"StructureElevatorShaftIndustrial","prefab_hash":1998354978,"desc":"","name":"Elevator Shaft"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"ElevatorSpeed":"ReadWrite","ElevatorLevel":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Elevator","role":"None"},{"typ":"Elevator","role":"None"}],"device_pins_length":null,"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}},"StructureEmergencyButton":{"prefab":{"prefab_name":"StructureEmergencyButton","prefab_hash":1668452680,"desc":"Description coming.","name":"Important Button"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Activate":"ReadWrite","Lock":"ReadWrite","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureEngineMountTypeA1":{"prefab":{"prefab_name":"StructureEngineMountTypeA1","prefab_hash":2035781224,"desc":"","name":"Engine Mount (Type A1)"},"structure":{"small_grid":false}},"StructureEvaporationChamber":{"prefab":{"prefab_name":"StructureEvaporationChamber","prefab_hash":-1429782576,"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.","name":"Evaporation Chamber"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"StructureExpansionValve":{"prefab":{"prefab_name":"StructureExpansionValve","prefab_hash":195298587,"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.","name":"Expansion Valve"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureFairingTypeA1":{"prefab":{"prefab_name":"StructureFairingTypeA1","prefab_hash":1622567418,"desc":"","name":"Fairing (Type A1)"},"structure":{"small_grid":false}},"StructureFairingTypeA2":{"prefab":{"prefab_name":"StructureFairingTypeA2","prefab_hash":-104908736,"desc":"","name":"Fairing (Type A2)"},"structure":{"small_grid":false}},"StructureFairingTypeA3":{"prefab":{"prefab_name":"StructureFairingTypeA3","prefab_hash":-1900541738,"desc":"","name":"Fairing (Type A3)"},"structure":{"small_grid":false}},"StructureFiltration":{"prefab":{"prefab_name":"StructureFiltration","prefab_hash":-348054045,"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","name":"Filtration"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{},"2":{}},"logic_types":{"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","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidNitrogenOutput2":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidOxygenOutput2":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesOutput":"Read","RatioLiquidVolatilesOutput2":"Read","RatioSteamInput":"Read","RatioSteamOutput":"Read","RatioSteamOutput2":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidCarbonDioxideOutput2":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidPollutantOutput2":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideOutput":"Read","RatioLiquidNitrousOxideOutput2":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Idle","1":"Active"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":true},"slots":[{"name":"Gas Filter","typ":"GasFilter"},{"name":"Gas Filter","typ":"GasFilter"},{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Waste"},{"typ":"Power","role":"None"}],"device_pins_length":2,"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}},"StructureFlagSmall":{"prefab":{"prefab_name":"StructureFlagSmall","prefab_hash":-1529819532,"desc":"","name":"Small Flag"},"structure":{"small_grid":true}},"StructureFlashingLight":{"prefab":{"prefab_name":"StructureFlashingLight","prefab_hash":-1535893860,"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'.","name":"Flashing Light"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureFlatBench":{"prefab":{"prefab_name":"StructureFlatBench","prefab_hash":839890807,"desc":"","name":"Bench (Flat)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Seat","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureFloorDrain":{"prefab":{"prefab_name":"StructureFloorDrain","prefab_hash":1048813293,"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.","name":"Passive Liquid Inlet"},"structure":{"small_grid":true}},"StructureFrame":{"prefab":{"prefab_name":"StructureFrame","prefab_hash":1432512808,"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.","name":"Steel Frame"},"structure":{"small_grid":false}},"StructureFrameCorner":{"prefab":{"prefab_name":"StructureFrameCorner","prefab_hash":-2112390778,"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.","name":"Steel Frame (Corner)"},"structure":{"small_grid":false}},"StructureFrameCornerCut":{"prefab":{"prefab_name":"StructureFrameCornerCut","prefab_hash":271315669,"desc":"0.Mode0\n1.Mode1","name":"Steel Frame (Corner Cut)"},"structure":{"small_grid":false}},"StructureFrameIron":{"prefab":{"prefab_name":"StructureFrameIron","prefab_hash":-1240951678,"desc":"","name":"Iron Frame"},"structure":{"small_grid":false}},"StructureFrameSide":{"prefab":{"prefab_name":"StructureFrameSide","prefab_hash":-302420053,"desc":"More durable than the Iron Frame, steel frames also provide variations for more ornate constructions.","name":"Steel Frame (Side)"},"structure":{"small_grid":false}},"StructureFridgeBig":{"prefab":{"prefab_name":"StructureFridgeBig","prefab_hash":958476921,"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.","name":"Fridge (Large)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureFridgeSmall":{"prefab":{"prefab_name":"StructureFridgeSmall","prefab_hash":751887598,"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.","name":"Fridge Small"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connection_list":[{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureFurnace":{"prefab":{"prefab_name":"StructureFurnace","prefab_hash":1947944864,"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.","name":"Furnace"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureFuselageTypeA1":{"prefab":{"prefab_name":"StructureFuselageTypeA1","prefab_hash":1033024712,"desc":"","name":"Fuselage (Type A1)"},"structure":{"small_grid":false}},"StructureFuselageTypeA2":{"prefab":{"prefab_name":"StructureFuselageTypeA2","prefab_hash":-1533287054,"desc":"","name":"Fuselage (Type A2)"},"structure":{"small_grid":false}},"StructureFuselageTypeA4":{"prefab":{"prefab_name":"StructureFuselageTypeA4","prefab_hash":1308115015,"desc":"","name":"Fuselage (Type A4)"},"structure":{"small_grid":false}},"StructureFuselageTypeC5":{"prefab":{"prefab_name":"StructureFuselageTypeC5","prefab_hash":147395155,"desc":"","name":"Fuselage (Type C5)"},"structure":{"small_grid":false}},"StructureGasGenerator":{"prefab":{"prefab_name":"StructureGasGenerator","prefab_hash":1165997963,"desc":"","name":"Gas Fuel Generator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureGasMixer":{"prefab":{"prefab_name":"StructureGasMixer","prefab_hash":2104106366,"desc":"Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%.","name":"Gas Mixer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureGasSensor":{"prefab":{"prefab_name":"StructureGasSensor","prefab_hash":-1252983604,"desc":"Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents.","name":"Gas Sensor"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureGasTankStorage":{"prefab":{"prefab_name":"StructureGasTankStorage","prefab_hash":1632165346,"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.","name":"Gas Tank Storage"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Pressure":"Read","Temperature":"Read","RatioOxygen":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","Quantity":"Read","RatioNitrousOxide":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureGasUmbilicalFemale":{"prefab":{"prefab_name":"StructureGasUmbilicalFemale","prefab_hash":-1680477930,"desc":"","name":"Umbilical Socket (Gas)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureGasUmbilicalFemaleSide":{"prefab":{"prefab_name":"StructureGasUmbilicalFemaleSide","prefab_hash":-648683847,"desc":"","name":"Umbilical Socket Angle (Gas)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureGasUmbilicalMale":{"prefab":{"prefab_name":"StructureGasUmbilicalMale","prefab_hash":-1814939203,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Gas)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureGlassDoor":{"prefab":{"prefab_name":"StructureGlassDoor","prefab_hash":-324331872,"desc":"0.Operate\n1.Logic","name":"Glass Door"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureGovernedGasEngine":{"prefab":{"prefab_name":"StructureGovernedGasEngine","prefab_hash":-214232602,"desc":"The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas.","name":"Pumped Gas Engine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureGroundBasedTelescope":{"prefab":{"prefab_name":"StructureGroundBasedTelescope","prefab_hash":-619745681,"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.","name":"Telescope"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureGrowLight":{"prefab":{"prefab_name":"StructureGrowLight","prefab_hash":-1758710260,"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. ","name":"Grow Light"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureHarvie":{"prefab":{"prefab_name":"StructureHarvie","prefab_hash":958056199,"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.","name":"Harvie"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Idle","1":"Happy","2":"UnHappy","3":"Dead"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Plant"},{"name":"Export","typ":"None"},{"name":"Hand","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureHeatExchangeLiquidtoGas":{"prefab":{"prefab_name":"StructureHeatExchangeLiquidtoGas","prefab_hash":944685608,"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.","name":"Heat Exchanger - Liquid + Gas"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"StructureHeatExchangerGastoGas":{"prefab":{"prefab_name":"StructureHeatExchangerGastoGas","prefab_hash":21266291,"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.","name":"Heat Exchanger - Gas"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Output"}],"device_pins_length":null,"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}},"StructureHeatExchangerLiquidtoLiquid":{"prefab":{"prefab_name":"StructureHeatExchangerLiquidtoLiquid","prefab_hash":-613784254,"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","name":"Heat Exchanger - Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"StructureHorizontalAutoMiner":{"prefab":{"prefab_name":"StructureHorizontalAutoMiner","prefab_hash":1070427573,"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","name":"OGRE"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureHydraulicPipeBender":{"prefab":{"prefab_name":"StructureHydraulicPipeBender","prefab_hash":-1888248335,"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.","name":"Hydraulic Pipe Bender"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memory_access":"ReadWrite","memory_size":64}},"StructureHydroponicsStation":{"prefab":{"prefab_name":"StructureHydroponicsStation","prefab_hash":1441767298,"desc":"","name":"Hydroponics Station"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":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"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureHydroponicsTray":{"prefab":{"prefab_name":"StructureHydroponicsTray","prefab_hash":1464854517,"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.","name":"Hydroponics Tray"},"structure":{"small_grid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}]},"StructureHydroponicsTrayData":{"prefab":{"prefab_name":"StructureHydroponicsTrayData","prefab_hash":-1841632400,"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.","name":"Hydroponics Device"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Fertiliser","typ":"Plant"}],"device":{"connection_list":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureIceCrusher":{"prefab":{"prefab_name":"StructureIceCrusher","prefab_hash":443849486,"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.","name":"Ice Crusher"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"device_pins_length":null,"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}},"StructureIgniter":{"prefab":{"prefab_name":"StructureIgniter","prefab_hash":1005491513,"desc":"It gets the party started. Especially if that party is an explosive gas mixture.","name":"Igniter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureInLineTankGas1x1":{"prefab":{"prefab_name":"StructureInLineTankGas1x1","prefab_hash":-1693382705,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Gas"},"structure":{"small_grid":true}},"StructureInLineTankGas1x2":{"prefab":{"prefab_name":"StructureInLineTankGas1x2","prefab_hash":35149429,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Gas"},"structure":{"small_grid":true}},"StructureInLineTankLiquid1x1":{"prefab":{"prefab_name":"StructureInLineTankLiquid1x1","prefab_hash":543645499,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Small Liquid"},"structure":{"small_grid":true}},"StructureInLineTankLiquid1x2":{"prefab":{"prefab_name":"StructureInLineTankLiquid1x2","prefab_hash":-1183969663,"desc":"A small expansion tank that increases the volume of a pipe network.","name":"In-Line Tank Liquid"},"structure":{"small_grid":true}},"StructureInsulatedInLineTankGas1x1":{"prefab":{"prefab_name":"StructureInsulatedInLineTankGas1x1","prefab_hash":1818267386,"desc":"","name":"Insulated In-Line Tank Small Gas"},"structure":{"small_grid":true}},"StructureInsulatedInLineTankGas1x2":{"prefab":{"prefab_name":"StructureInsulatedInLineTankGas1x2","prefab_hash":-177610944,"desc":"","name":"Insulated In-Line Tank Gas"},"structure":{"small_grid":true}},"StructureInsulatedInLineTankLiquid1x1":{"prefab":{"prefab_name":"StructureInsulatedInLineTankLiquid1x1","prefab_hash":-813426145,"desc":"","name":"Insulated In-Line Tank Small Liquid"},"structure":{"small_grid":true}},"StructureInsulatedInLineTankLiquid1x2":{"prefab":{"prefab_name":"StructureInsulatedInLineTankLiquid1x2","prefab_hash":1452100517,"desc":"","name":"Insulated In-Line Tank Liquid"},"structure":{"small_grid":true}},"StructureInsulatedPipeCorner":{"prefab":{"prefab_name":"StructureInsulatedPipeCorner","prefab_hash":-1967711059,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Corner)"},"structure":{"small_grid":true}},"StructureInsulatedPipeCrossJunction":{"prefab":{"prefab_name":"StructureInsulatedPipeCrossJunction","prefab_hash":-92778058,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Cross Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeCrossJunction3":{"prefab":{"prefab_name":"StructureInsulatedPipeCrossJunction3","prefab_hash":1328210035,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (3-Way Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeCrossJunction4":{"prefab":{"prefab_name":"StructureInsulatedPipeCrossJunction4","prefab_hash":-783387184,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (4-Way Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeCrossJunction5":{"prefab":{"prefab_name":"StructureInsulatedPipeCrossJunction5","prefab_hash":-1505147578,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (5-Way Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeCrossJunction6":{"prefab":{"prefab_name":"StructureInsulatedPipeCrossJunction6","prefab_hash":1061164284,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (6-Way Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeLiquidCorner":{"prefab":{"prefab_name":"StructureInsulatedPipeLiquidCorner","prefab_hash":1713710802,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Corner)"},"structure":{"small_grid":true}},"StructureInsulatedPipeLiquidCrossJunction":{"prefab":{"prefab_name":"StructureInsulatedPipeLiquidCrossJunction","prefab_hash":1926651727,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (3-Way Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeLiquidCrossJunction4":{"prefab":{"prefab_name":"StructureInsulatedPipeLiquidCrossJunction4","prefab_hash":363303270,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (4-Way Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeLiquidCrossJunction5":{"prefab":{"prefab_name":"StructureInsulatedPipeLiquidCrossJunction5","prefab_hash":1654694384,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (5-Way Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeLiquidCrossJunction6":{"prefab":{"prefab_name":"StructureInsulatedPipeLiquidCrossJunction6","prefab_hash":-72748982,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (6-Way Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeLiquidStraight":{"prefab":{"prefab_name":"StructureInsulatedPipeLiquidStraight","prefab_hash":295678685,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Straight)"},"structure":{"small_grid":true}},"StructureInsulatedPipeLiquidTJunction":{"prefab":{"prefab_name":"StructureInsulatedPipeLiquidTJunction","prefab_hash":-532384855,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (T Junction)"},"structure":{"small_grid":true}},"StructureInsulatedPipeStraight":{"prefab":{"prefab_name":"StructureInsulatedPipeStraight","prefab_hash":2134172356,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (Straight)"},"structure":{"small_grid":true}},"StructureInsulatedPipeTJunction":{"prefab":{"prefab_name":"StructureInsulatedPipeTJunction","prefab_hash":-2076086215,"desc":"Insulated pipes greatly reduce heat loss from gases stored in them.","name":"Insulated Pipe (T Junction)"},"structure":{"small_grid":true}},"StructureInsulatedTankConnector":{"prefab":{"prefab_name":"StructureInsulatedTankConnector","prefab_hash":-31273349,"desc":"","name":"Insulated Tank Connector"},"structure":{"small_grid":true},"slots":[{"name":"","typ":"None"}]},"StructureInsulatedTankConnectorLiquid":{"prefab":{"prefab_name":"StructureInsulatedTankConnectorLiquid","prefab_hash":-1602030414,"desc":"","name":"Insulated Tank Connector Liquid"},"structure":{"small_grid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureInteriorDoorGlass":{"prefab":{"prefab_name":"StructureInteriorDoorGlass","prefab_hash":-2096421875,"desc":"0.Operate\n1.Logic","name":"Interior Door Glass"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureInteriorDoorPadded":{"prefab":{"prefab_name":"StructureInteriorDoorPadded","prefab_hash":847461335,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureInteriorDoorPaddedThin":{"prefab":{"prefab_name":"StructureInteriorDoorPaddedThin","prefab_hash":1981698201,"desc":"0.Operate\n1.Logic","name":"Interior Door Padded Thin"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureInteriorDoorTriangle":{"prefab":{"prefab_name":"StructureInteriorDoorTriangle","prefab_hash":-1182923101,"desc":"0.Operate\n1.Logic","name":"Interior Door Triangle"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureKlaxon":{"prefab":{"prefab_name":"StructureKlaxon","prefab_hash":-828056979,"desc":"Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output.","name":"Klaxon Speaker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Volume":"ReadWrite","PrefabHash":"Read","SoundAlert":"ReadWrite","ReferenceId":"Read","NameHash":"Read"},"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"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLadder":{"prefab":{"prefab_name":"StructureLadder","prefab_hash":-415420281,"desc":"","name":"Ladder"},"structure":{"small_grid":true}},"StructureLadderEnd":{"prefab":{"prefab_name":"StructureLadderEnd","prefab_hash":1541734993,"desc":"","name":"Ladder End"},"structure":{"small_grid":true}},"StructureLargeDirectHeatExchangeGastoGas":{"prefab":{"prefab_name":"StructureLargeDirectHeatExchangeGastoGas","prefab_hash":-1230658883,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Gas"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"}],"device_pins_length":null,"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}},"StructureLargeDirectHeatExchangeGastoLiquid":{"prefab":{"prefab_name":"StructureLargeDirectHeatExchangeGastoLiquid","prefab_hash":1412338038,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchanger - Gas + Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Input2"}],"device_pins_length":null,"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}},"StructureLargeDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefab_name":"StructureLargeDirectHeatExchangeLiquidtoLiquid","prefab_hash":792686502,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Large Direct Heat Exchange - Liquid + Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"device_pins_length":null,"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}},"StructureLargeExtendableRadiator":{"prefab":{"prefab_name":"StructureLargeExtendableRadiator","prefab_hash":-566775170,"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.","name":"Large Extendable Radiator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","Horizontal":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"StructureLargeHangerDoor":{"prefab":{"prefab_name":"StructureLargeHangerDoor","prefab_hash":-1351081801,"desc":"1 x 3 modular door piece for building hangar doors.","name":"Large Hangar Door"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLargeSatelliteDish":{"prefab":{"prefab_name":"StructureLargeSatelliteDish","prefab_hash":1913391845,"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.","name":"Large Satellite Dish"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLaunchMount":{"prefab":{"prefab_name":"StructureLaunchMount","prefab_hash":-558953231,"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.","name":"Launch Mount"},"structure":{"small_grid":false}},"StructureLightLong":{"prefab":{"prefab_name":"StructureLightLong","prefab_hash":797794350,"desc":"","name":"Wall Light (Long)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLightLongAngled":{"prefab":{"prefab_name":"StructureLightLongAngled","prefab_hash":1847265835,"desc":"","name":"Wall Light (Long Angled)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLightLongWide":{"prefab":{"prefab_name":"StructureLightLongWide","prefab_hash":555215790,"desc":"","name":"Wall Light (Long Wide)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLightRound":{"prefab":{"prefab_name":"StructureLightRound","prefab_hash":1514476632,"desc":"Description coming.","name":"Light Round"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLightRoundAngled":{"prefab":{"prefab_name":"StructureLightRoundAngled","prefab_hash":1592905386,"desc":"Description coming.","name":"Light Round (Angled)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLightRoundSmall":{"prefab":{"prefab_name":"StructureLightRoundSmall","prefab_hash":1436121888,"desc":"Description coming.","name":"Light Round (Small)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLiquidDrain":{"prefab":{"prefab_name":"StructureLiquidDrain","prefab_hash":1687692899,"desc":"When connected to power and activated, it pumps liquid from a liquid network into the world.","name":"Active Liquid Outlet"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"None"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"StructureLiquidPipeAnalyzer":{"prefab":{"prefab_name":"StructureLiquidPipeAnalyzer","prefab_hash":-2113838091,"desc":"","name":"Liquid Pipe Analyzer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLiquidPipeHeater":{"prefab":{"prefab_name":"StructureLiquidPipeHeater","prefab_hash":-287495560,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Liquid)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLiquidPipeOneWayValve":{"prefab":{"prefab_name":"StructureLiquidPipeOneWayValve","prefab_hash":-782453061,"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..","name":"One Way Valve (Liquid)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"StructureLiquidPipeRadiator":{"prefab":{"prefab_name":"StructureLiquidPipeRadiator","prefab_hash":2072805863,"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.","name":"Liquid Pipe Convection Radiator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureLiquidPressureRegulator":{"prefab":{"prefab_name":"StructureLiquidPressureRegulator","prefab_hash":482248766,"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.","name":"Liquid Volume Regulator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLiquidTankBig":{"prefab":{"prefab_name":"StructureLiquidTankBig","prefab_hash":1098900430,"desc":"","name":"Liquid Tank Big"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureLiquidTankBigInsulated":{"prefab":{"prefab_name":"StructureLiquidTankBigInsulated","prefab_hash":-1430440215,"desc":"","name":"Insulated Liquid Tank Big"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureLiquidTankSmall":{"prefab":{"prefab_name":"StructureLiquidTankSmall","prefab_hash":1988118157,"desc":"","name":"Liquid Tank Small"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureLiquidTankSmallInsulated":{"prefab":{"prefab_name":"StructureLiquidTankSmallInsulated","prefab_hash":608607718,"desc":"","name":"Insulated Liquid Tank Small"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureLiquidTankStorage":{"prefab":{"prefab_name":"StructureLiquidTankStorage","prefab_hash":1691898022,"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.","name":"Liquid Tank Storage"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Pressure":"Read","Temperature":"Read","RatioOxygen":"Read","RatioCarbonDioxide":"Read","RatioNitrogen":"Read","RatioPollutant":"Read","RatioVolatiles":"Read","RatioWater":"Read","Quantity":"Read","RatioNitrousOxide":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Liquid Canister","typ":"LiquidCanister"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureLiquidTurboVolumePump":{"prefab":{"prefab_name":"StructureLiquidTurboVolumePump","prefab_hash":-1051805505,"desc":"Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Liquid)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Right","1":"Left"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"StructureLiquidUmbilicalFemale":{"prefab":{"prefab_name":"StructureLiquidUmbilicalFemale","prefab_hash":1734723642,"desc":"","name":"Umbilical Socket (Liquid)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureLiquidUmbilicalFemaleSide":{"prefab":{"prefab_name":"StructureLiquidUmbilicalFemaleSide","prefab_hash":1220870319,"desc":"","name":"Umbilical Socket Angle (Liquid)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureLiquidUmbilicalMale":{"prefab":{"prefab_name":"StructureLiquidUmbilicalMale","prefab_hash":-1798420047,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Liquid)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLiquidValve":{"prefab":{"prefab_name":"StructureLiquidValve","prefab_hash":1849974453,"desc":"","name":"Liquid Valve"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"}],"device_pins_length":null,"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}},"StructureLiquidVolumePump":{"prefab":{"prefab_name":"StructureLiquidVolumePump","prefab_hash":-454028979,"desc":"","name":"Liquid Volume Pump"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureLockerSmall":{"prefab":{"prefab_name":"StructureLockerSmall","prefab_hash":-647164662,"desc":"","name":"Locker (Small)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureLogicBatchReader":{"prefab":{"prefab_name":"StructureLogicBatchReader","prefab_hash":264413729,"desc":"","name":"Batch Reader"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicBatchSlotReader":{"prefab":{"prefab_name":"StructureLogicBatchSlotReader","prefab_hash":436888930,"desc":"","name":"Batch Slot Reader"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicBatchWriter":{"prefab":{"prefab_name":"StructureLogicBatchWriter","prefab_hash":1415443359,"desc":"","name":"Batch Writer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ForceWrite":"Write","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicButton":{"prefab":{"prefab_name":"StructureLogicButton","prefab_hash":491845673,"desc":"","name":"Button"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Activate":"ReadWrite","Lock":"ReadWrite","Setting":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureLogicCompare":{"prefab":{"prefab_name":"StructureLogicCompare","prefab_hash":-1489728908,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Compare"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Equals","1":"Greater","2":"Less","3":"NotEquals"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicDial":{"prefab":{"prefab_name":"StructureLogicDial","prefab_hash":554524804,"desc":"An assignable dial with up to 1000 modes.","name":"Dial"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Mode":"ReadWrite","Setting":"ReadWrite","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureLogicGate":{"prefab":{"prefab_name":"StructureLogicGate","prefab_hash":1942143074,"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.","name":"Logic Gate"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"AND","1":"OR","2":"XOR","3":"NAND","4":"NOR","5":"XNOR"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicHashGen":{"prefab":{"prefab_name":"StructureLogicHashGen","prefab_hash":2077593121,"desc":"","name":"Logic Hash Generator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureLogicMath":{"prefab":{"prefab_name":"StructureLogicMath","prefab_hash":1657691323,"desc":"0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log","name":"Logic Math"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Add","1":"Subtract","2":"Multiply","3":"Divide","4":"Mod","5":"Atan2","6":"Pow","7":"Log"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicMathUnary":{"prefab":{"prefab_name":"StructureLogicMathUnary","prefab_hash":-1160020195,"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","name":"Math Unary"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"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"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicMemory":{"prefab":{"prefab_name":"StructureLogicMemory","prefab_hash":-851746783,"desc":"","name":"Logic Memory"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureLogicMinMax":{"prefab":{"prefab_name":"StructureLogicMinMax","prefab_hash":929022276,"desc":"0.Greater\n1.Less","name":"Logic Min/Max"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Greater","1":"Less"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicMirror":{"prefab":{"prefab_name":"StructureLogicMirror","prefab_hash":2096189278,"desc":"","name":"Logic Mirror"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicReader":{"prefab":{"prefab_name":"StructureLogicReader","prefab_hash":-345383640,"desc":"","name":"Logic Reader"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicReagentReader":{"prefab":{"prefab_name":"StructureLogicReagentReader","prefab_hash":-124308857,"desc":"","name":"Reagent Reader"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicRocketDownlink":{"prefab":{"prefab_name":"StructureLogicRocketDownlink","prefab_hash":876108549,"desc":"","name":"Logic Rocket Downlink"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"Input"}],"device_pins_length":null,"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}},"StructureLogicRocketUplink":{"prefab":{"prefab_name":"StructureLogicRocketUplink","prefab_hash":546002924,"desc":"","name":"Logic Uplink"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicSelect":{"prefab":{"prefab_name":"StructureLogicSelect","prefab_hash":1822736084,"desc":"0.Equals\n1.Greater\n2.Less\n3.NotEquals","name":"Logic Select"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Equals","1":"Greater","2":"Less","3":"NotEquals"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicSlotReader":{"prefab":{"prefab_name":"StructureLogicSlotReader","prefab_hash":-767867194,"desc":"","name":"Slot Reader"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Setting":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicSorter":{"prefab":{"prefab_name":"StructureLogicSorter","prefab_hash":873418029,"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.","name":"Logic Sorter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"All","1":"Any","2":"None"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"Chute","role":"Output2"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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":{"instructions":{"FilterPrefabHashEquals":{"description":"| 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":{"description":"| 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":{"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 |","typ":"SorterInstruction","value":5},"FilterSlotTypeCompare":{"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 |","typ":"SorterInstruction","value":4},"FilterSortingClassCompare":{"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 |","typ":"SorterInstruction","value":3},"LimitNextExecutionByCount":{"description":"| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |","typ":"SorterInstruction","value":6}},"memory_access":"ReadWrite","memory_size":32}},"StructureLogicSwitch":{"prefab":{"prefab_name":"StructureLogicSwitch","prefab_hash":1220484876,"desc":"","name":"Lever"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","Setting":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureLogicSwitch2":{"prefab":{"prefab_name":"StructureLogicSwitch2","prefab_hash":321604921,"desc":"","name":"Switch"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","Setting":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureLogicTransmitter":{"prefab":{"prefab_name":"StructureLogicTransmitter","prefab_hash":-693235651,"desc":"Connects to Logic Transmitter","name":"Logic Transmitter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{},"modes":{"0":"Passive","1":"Active"},"transmission_receiver":true,"wireless_logic":true,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Data","role":"Input"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicWriter":{"prefab":{"prefab_name":"StructureLogicWriter","prefab_hash":-1326019434,"desc":"","name":"Logic Writer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ForceWrite":"Write","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureLogicWriterSwitch":{"prefab":{"prefab_name":"StructureLogicWriterSwitch","prefab_hash":-1321250424,"desc":"","name":"Logic Writer Switch"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ForceWrite":"Write","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Input"},{"typ":"Data","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureManualHatch":{"prefab":{"prefab_name":"StructureManualHatch","prefab_hash":-1808154199,"desc":"Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock.","name":"Manual Hatch"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureMediumConvectionRadiator":{"prefab":{"prefab_name":"StructureMediumConvectionRadiator","prefab_hash":-1918215845,"desc":"A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"device_pins_length":null,"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}},"StructureMediumConvectionRadiatorLiquid":{"prefab":{"prefab_name":"StructureMediumConvectionRadiatorLiquid","prefab_hash":-1169014183,"desc":"A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere.","name":"Medium Convection Radiator Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"StructureMediumHangerDoor":{"prefab":{"prefab_name":"StructureMediumHangerDoor","prefab_hash":-566348148,"desc":"1 x 2 modular door piece for building hangar doors.","name":"Medium Hangar Door"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Lock":"ReadWrite","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureMediumRadiator":{"prefab":{"prefab_name":"StructureMediumRadiator","prefab_hash":-975966237,"desc":"A stand-alone radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"device_pins_length":null,"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}},"StructureMediumRadiatorLiquid":{"prefab":{"prefab_name":"StructureMediumRadiatorLiquid","prefab_hash":-1141760613,"desc":"A stand-alone liquid radiator unit optimized for radiating heat in vacuums.","name":"Medium Radiator Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"StructureMediumRocketGasFuelTank":{"prefab":{"prefab_name":"StructureMediumRocketGasFuelTank","prefab_hash":-1093860567,"desc":"","name":"Gas Capsule Tank Medium"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Output"},{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureMediumRocketLiquidFuelTank":{"prefab":{"prefab_name":"StructureMediumRocketLiquidFuelTank","prefab_hash":1143639539,"desc":"","name":"Liquid Capsule Tank Medium"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"Output"},{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureMotionSensor":{"prefab":{"prefab_name":"StructureMotionSensor","prefab_hash":-1713470563,"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.","name":"Motion Sensor"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Activate":"ReadWrite","Quantity":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureNitrolyzer":{"prefab":{"prefab_name":"StructureNitrolyzer","prefab_hash":1898243702,"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.","name":"Nitrolyzer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"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","RatioLiquidNitrogenInput":"Read","RatioLiquidNitrogenInput2":"Read","RatioLiquidNitrogenOutput":"Read","RatioLiquidOxygen":"Read","RatioLiquidOxygenInput":"Read","RatioLiquidOxygenInput2":"Read","RatioLiquidOxygenOutput":"Read","RatioLiquidVolatiles":"Read","RatioLiquidVolatilesInput":"Read","RatioLiquidVolatilesInput2":"Read","RatioLiquidVolatilesOutput":"Read","RatioSteam":"Read","RatioSteamInput":"Read","RatioSteamInput2":"Read","RatioSteamOutput":"Read","RatioLiquidCarbonDioxide":"Read","RatioLiquidCarbonDioxideInput":"Read","RatioLiquidCarbonDioxideInput2":"Read","RatioLiquidCarbonDioxideOutput":"Read","RatioLiquidPollutant":"Read","RatioLiquidPollutantInput":"Read","RatioLiquidPollutantInput2":"Read","RatioLiquidPollutantOutput":"Read","RatioLiquidNitrousOxide":"Read","RatioLiquidNitrousOxideInput":"Read","RatioLiquidNitrousOxideInput2":"Read","RatioLiquidNitrousOxideOutput":"Read","ReferenceId":"Read","RatioHydrogen":"Read","RatioLiquidHydrogen":"Read","RatioPollutedWater":"Read","NameHash":"Read"},"modes":{"0":"Idle","1":"Active"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":2,"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}},"StructureOccupancySensor":{"prefab":{"prefab_name":"StructureOccupancySensor","prefab_hash":322782515,"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.","name":"Occupancy Sensor"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Activate":"Read","Quantity":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureOverheadShortCornerLocker":{"prefab":{"prefab_name":"StructureOverheadShortCornerLocker","prefab_hash":-1794932560,"desc":"","name":"Overhead Corner Locker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureOverheadShortLocker":{"prefab":{"prefab_name":"StructureOverheadShortLocker","prefab_hash":1468249454,"desc":"","name":"Overhead Locker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":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"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructurePassiveLargeRadiatorGas":{"prefab":{"prefab_name":"StructurePassiveLargeRadiatorGas","prefab_hash":2066977095,"desc":"Has been replaced by Medium Convection Radiator.","name":"Medium Convection Radiator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"device_pins_length":null,"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}},"StructurePassiveLargeRadiatorLiquid":{"prefab":{"prefab_name":"StructurePassiveLargeRadiatorLiquid","prefab_hash":24786172,"desc":"Has been replaced by Medium Convection Radiator Liquid.","name":"Medium Convection Radiator Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"StructurePassiveLiquidDrain":{"prefab":{"prefab_name":"StructurePassiveLiquidDrain","prefab_hash":1812364811,"desc":"Moves liquids from a pipe network to the world atmosphere.","name":"Passive Liquid Drain"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructurePassiveVent":{"prefab":{"prefab_name":"StructurePassiveVent","prefab_hash":335498166,"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. ","name":"Passive Vent"},"structure":{"small_grid":true}},"StructurePassiveVentInsulated":{"prefab":{"prefab_name":"StructurePassiveVentInsulated","prefab_hash":1363077139,"desc":"","name":"Insulated Passive Vent"},"structure":{"small_grid":true}},"StructurePassthroughHeatExchangerGasToGas":{"prefab":{"prefab_name":"StructurePassthroughHeatExchangerGasToGas","prefab_hash":-1674187440,"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.","name":"CounterFlow Heat Exchanger - Gas + Gas"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Output2"}],"device_pins_length":null,"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}},"StructurePassthroughHeatExchangerGasToLiquid":{"prefab":{"prefab_name":"StructurePassthroughHeatExchangerGasToLiquid","prefab_hash":1928991265,"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.","name":"CounterFlow Heat Exchanger - Gas + Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"Pipe","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"device_pins_length":null,"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}},"StructurePassthroughHeatExchangerLiquidToLiquid":{"prefab":{"prefab_name":"StructurePassthroughHeatExchangerLiquidToLiquid","prefab_hash":-1472829583,"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.","name":"CounterFlow Heat Exchanger - Liquid + Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Output2"}],"device_pins_length":null,"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}},"StructurePictureFrameThickLandscapeLarge":{"prefab":{"prefab_name":"StructurePictureFrameThickLandscapeLarge","prefab_hash":-1434523206,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"small_grid":true}},"StructurePictureFrameThickLandscapeSmall":{"prefab":{"prefab_name":"StructurePictureFrameThickLandscapeSmall","prefab_hash":-2041566697,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"small_grid":true}},"StructurePictureFrameThickMountLandscapeLarge":{"prefab":{"prefab_name":"StructurePictureFrameThickMountLandscapeLarge","prefab_hash":950004659,"desc":"","name":"Picture Frame Thick Landscape Large"},"structure":{"small_grid":true}},"StructurePictureFrameThickMountLandscapeSmall":{"prefab":{"prefab_name":"StructurePictureFrameThickMountLandscapeSmall","prefab_hash":347154462,"desc":"","name":"Picture Frame Thick Landscape Small"},"structure":{"small_grid":true}},"StructurePictureFrameThickMountPortraitLarge":{"prefab":{"prefab_name":"StructurePictureFrameThickMountPortraitLarge","prefab_hash":-1459641358,"desc":"","name":"Picture Frame Thick Mount Portrait Large"},"structure":{"small_grid":true}},"StructurePictureFrameThickMountPortraitSmall":{"prefab":{"prefab_name":"StructurePictureFrameThickMountPortraitSmall","prefab_hash":-2066653089,"desc":"","name":"Picture Frame Thick Mount Portrait Small"},"structure":{"small_grid":true}},"StructurePictureFrameThickPortraitLarge":{"prefab":{"prefab_name":"StructurePictureFrameThickPortraitLarge","prefab_hash":-1686949570,"desc":"","name":"Picture Frame Thick Portrait Large"},"structure":{"small_grid":true}},"StructurePictureFrameThickPortraitSmall":{"prefab":{"prefab_name":"StructurePictureFrameThickPortraitSmall","prefab_hash":-1218579821,"desc":"","name":"Picture Frame Thick Portrait Small"},"structure":{"small_grid":true}},"StructurePictureFrameThinLandscapeLarge":{"prefab":{"prefab_name":"StructurePictureFrameThinLandscapeLarge","prefab_hash":-1418288625,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"small_grid":true}},"StructurePictureFrameThinLandscapeSmall":{"prefab":{"prefab_name":"StructurePictureFrameThinLandscapeSmall","prefab_hash":-2024250974,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"small_grid":true}},"StructurePictureFrameThinMountLandscapeLarge":{"prefab":{"prefab_name":"StructurePictureFrameThinMountLandscapeLarge","prefab_hash":-1146760430,"desc":"","name":"Picture Frame Thin Landscape Large"},"structure":{"small_grid":true}},"StructurePictureFrameThinMountLandscapeSmall":{"prefab":{"prefab_name":"StructurePictureFrameThinMountLandscapeSmall","prefab_hash":-1752493889,"desc":"","name":"Picture Frame Thin Landscape Small"},"structure":{"small_grid":true}},"StructurePictureFrameThinMountPortraitLarge":{"prefab":{"prefab_name":"StructurePictureFrameThinMountPortraitLarge","prefab_hash":1094895077,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"small_grid":true}},"StructurePictureFrameThinMountPortraitSmall":{"prefab":{"prefab_name":"StructurePictureFrameThinMountPortraitSmall","prefab_hash":1835796040,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"small_grid":true}},"StructurePictureFrameThinPortraitLarge":{"prefab":{"prefab_name":"StructurePictureFrameThinPortraitLarge","prefab_hash":1212777087,"desc":"","name":"Picture Frame Thin Portrait Large"},"structure":{"small_grid":true}},"StructurePictureFrameThinPortraitSmall":{"prefab":{"prefab_name":"StructurePictureFrameThinPortraitSmall","prefab_hash":1684488658,"desc":"","name":"Picture Frame Thin Portrait Small"},"structure":{"small_grid":true}},"StructurePipeAnalysizer":{"prefab":{"prefab_name":"StructurePipeAnalysizer","prefab_hash":435685051,"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.","name":"Pipe Analyzer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructurePipeCorner":{"prefab":{"prefab_name":"StructurePipeCorner","prefab_hash":-1785673561,"desc":"You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Corner)"},"structure":{"small_grid":true}},"StructurePipeCowl":{"prefab":{"prefab_name":"StructurePipeCowl","prefab_hash":465816159,"desc":"","name":"Pipe Cowl"},"structure":{"small_grid":true}},"StructurePipeCrossJunction":{"prefab":{"prefab_name":"StructurePipeCrossJunction","prefab_hash":-1405295588,"desc":"You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Cross Junction)"},"structure":{"small_grid":true}},"StructurePipeCrossJunction3":{"prefab":{"prefab_name":"StructurePipeCrossJunction3","prefab_hash":2038427184,"desc":"You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (3-Way Junction)"},"structure":{"small_grid":true}},"StructurePipeCrossJunction4":{"prefab":{"prefab_name":"StructurePipeCrossJunction4","prefab_hash":-417629293,"desc":"You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (4-Way Junction)"},"structure":{"small_grid":true}},"StructurePipeCrossJunction5":{"prefab":{"prefab_name":"StructurePipeCrossJunction5","prefab_hash":-1877193979,"desc":"You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (5-Way Junction)"},"structure":{"small_grid":true}},"StructurePipeCrossJunction6":{"prefab":{"prefab_name":"StructurePipeCrossJunction6","prefab_hash":152378047,"desc":"You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (6-Way Junction)"},"structure":{"small_grid":true}},"StructurePipeHeater":{"prefab":{"prefab_name":"StructurePipeHeater","prefab_hash":-419758574,"desc":"Adds 1000 joules of heat per tick to the contents of your pipe network.","name":"Pipe Heater (Gas)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructurePipeIgniter":{"prefab":{"prefab_name":"StructurePipeIgniter","prefab_hash":1286441942,"desc":"Ignites the atmosphere inside the attached pipe network.","name":"Pipe Igniter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Activate":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructurePipeInsulatedLiquidCrossJunction":{"prefab":{"prefab_name":"StructurePipeInsulatedLiquidCrossJunction","prefab_hash":-2068497073,"desc":"Liquid piping with very low temperature loss or gain.","name":"Insulated Liquid Pipe (Cross Junction)"},"structure":{"small_grid":true}},"StructurePipeLabel":{"prefab":{"prefab_name":"StructurePipeLabel","prefab_hash":-999721119,"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.","name":"Pipe Label"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructurePipeLiquidCorner":{"prefab":{"prefab_name":"StructurePipeLiquidCorner","prefab_hash":-1856720921,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Corner)"},"structure":{"small_grid":true}},"StructurePipeLiquidCrossJunction":{"prefab":{"prefab_name":"StructurePipeLiquidCrossJunction","prefab_hash":1848735691,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Cross Junction)"},"structure":{"small_grid":true}},"StructurePipeLiquidCrossJunction3":{"prefab":{"prefab_name":"StructurePipeLiquidCrossJunction3","prefab_hash":1628087508,"desc":"You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (3-Way Junction)"},"structure":{"small_grid":true}},"StructurePipeLiquidCrossJunction4":{"prefab":{"prefab_name":"StructurePipeLiquidCrossJunction4","prefab_hash":-9555593,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (4-Way Junction)"},"structure":{"small_grid":true}},"StructurePipeLiquidCrossJunction5":{"prefab":{"prefab_name":"StructurePipeLiquidCrossJunction5","prefab_hash":-2006384159,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (5-Way Junction)"},"structure":{"small_grid":true}},"StructurePipeLiquidCrossJunction6":{"prefab":{"prefab_name":"StructurePipeLiquidCrossJunction6","prefab_hash":291524699,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (6-Way Junction)"},"structure":{"small_grid":true}},"StructurePipeLiquidStraight":{"prefab":{"prefab_name":"StructurePipeLiquidStraight","prefab_hash":667597982,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (Straight)"},"structure":{"small_grid":true}},"StructurePipeLiquidTJunction":{"prefab":{"prefab_name":"StructurePipeLiquidTJunction","prefab_hash":262616717,"desc":"You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.","name":"Liquid Pipe (T Junction)"},"structure":{"small_grid":true}},"StructurePipeMeter":{"prefab":{"prefab_name":"StructurePipeMeter","prefab_hash":-1798362329,"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\"","name":"Pipe Meter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructurePipeOneWayValve":{"prefab":{"prefab_name":"StructurePipeOneWayValve","prefab_hash":1580412404,"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","name":"One Way Valve (Gas)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"}],"device_pins_length":null,"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}},"StructurePipeOrgan":{"prefab":{"prefab_name":"StructurePipeOrgan","prefab_hash":1305252611,"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.","name":"Pipe Organ"},"structure":{"small_grid":true}},"StructurePipeRadiator":{"prefab":{"prefab_name":"StructurePipeRadiator","prefab_hash":1696603168,"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.","name":"Pipe Convection Radiator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructurePipeRadiatorFlat":{"prefab":{"prefab_name":"StructurePipeRadiatorFlat","prefab_hash":-399883995,"desc":"A pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructurePipeRadiatorFlatLiquid":{"prefab":{"prefab_name":"StructurePipeRadiatorFlatLiquid","prefab_hash":2024754523,"desc":"A liquid pipe mounted radiator optimized for radiating heat in vacuums.","name":"Pipe Radiator Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructurePipeStraight":{"prefab":{"prefab_name":"StructurePipeStraight","prefab_hash":73728932,"desc":"You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (Straight)"},"structure":{"small_grid":true}},"StructurePipeTJunction":{"prefab":{"prefab_name":"StructurePipeTJunction","prefab_hash":-913817472,"desc":"You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench.","name":"Pipe (T Junction)"},"structure":{"small_grid":true}},"StructurePlanter":{"prefab":{"prefab_name":"StructurePlanter","prefab_hash":-1125641329,"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).","name":"Planter"},"structure":{"small_grid":true},"slots":[{"name":"Plant","typ":"Plant"},{"name":"Plant","typ":"Plant"}]},"StructurePlatformLadderOpen":{"prefab":{"prefab_name":"StructurePlatformLadderOpen","prefab_hash":1559586682,"desc":"","name":"Ladder Platform"},"structure":{"small_grid":false}},"StructurePlinth":{"prefab":{"prefab_name":"StructurePlinth","prefab_hash":989835703,"desc":"","name":"Plinth"},"structure":{"small_grid":true},"slots":[{"name":"","typ":"None"}]},"StructurePortablesConnector":{"prefab":{"prefab_name":"StructurePortablesConnector","prefab_hash":-899013427,"desc":"","name":"Portables Connector"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Open":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"None"}],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"device_pins_length":null,"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}},"StructurePowerConnector":{"prefab":{"prefab_name":"StructurePowerConnector","prefab_hash":-782951720,"desc":"Attaches a Kit (Portable Generator) to a power network.","name":"Power Connector"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Portable Slot","typ":"None"}],"device":{"connection_list":[{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"StructurePowerTransmitter":{"prefab":{"prefab_name":"StructurePowerTransmitter","prefab_hash":-65087121,"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.","name":"Microwave Power Transmitter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Unlinked","1":"Linked"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"StructurePowerTransmitterOmni":{"prefab":{"prefab_name":"StructurePowerTransmitterOmni","prefab_hash":-327468845,"desc":"","name":"Power Transmitter Omni"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"StructurePowerTransmitterReceiver":{"prefab":{"prefab_name":"StructurePowerTransmitterReceiver","prefab_hash":1195820278,"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","name":"Microwave Power Receiver"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Unlinked","1":"Linked"},"transmission_receiver":false,"wireless_logic":true,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructurePowerUmbilicalFemale":{"prefab":{"prefab_name":"StructurePowerUmbilicalFemale","prefab_hash":101488029,"desc":"","name":"Umbilical Socket (Power)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructurePowerUmbilicalFemaleSide":{"prefab":{"prefab_name":"StructurePowerUmbilicalFemaleSide","prefab_hash":1922506192,"desc":"","name":"Umbilical Socket Angle (Power)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructurePowerUmbilicalMale":{"prefab":{"prefab_name":"StructurePowerUmbilicalMale","prefab_hash":1529453938,"desc":"0.Left\n1.Center\n2.Right","name":"Umbilical (Power)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"Read","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Left","1":"Center","2":"Right"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"StructurePoweredVent":{"prefab":{"prefab_name":"StructurePoweredVent","prefab_hash":938836756,"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.","name":"Powered Vent"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","PressureExternal":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructurePoweredVentLarge":{"prefab":{"prefab_name":"StructurePoweredVentLarge","prefab_hash":-785498334,"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.","name":"Powered Vent Large"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","PressureExternal":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Outward","1":"Inward"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructurePressurantValve":{"prefab":{"prefab_name":"StructurePressurantValve","prefab_hash":23052817,"desc":"Pumps gas into a liquid pipe in order to raise the pressure","name":"Pressurant Valve"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructurePressureFedGasEngine":{"prefab":{"prefab_name":"StructurePressureFedGasEngine","prefab_hash":-624011170,"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.","name":"Pressure Fed Gas Engine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"PowerAndData","role":"Output"}],"device_pins_length":null,"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}},"StructurePressureFedLiquidEngine":{"prefab":{"prefab_name":"StructurePressureFedLiquidEngine","prefab_hash":379750958,"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.","name":"Pressure Fed Liquid Engine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"},{"typ":"PowerAndData","role":"Output"}],"device_pins_length":null,"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}},"StructurePressurePlateLarge":{"prefab":{"prefab_name":"StructurePressurePlateLarge","prefab_hash":-2008706143,"desc":"","name":"Trigger Plate (Large)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructurePressurePlateMedium":{"prefab":{"prefab_name":"StructurePressurePlateMedium","prefab_hash":1269458680,"desc":"","name":"Trigger Plate (Medium)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructurePressurePlateSmall":{"prefab":{"prefab_name":"StructurePressurePlateSmall","prefab_hash":-1536471028,"desc":"","name":"Trigger Plate (Small)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructurePressureRegulator":{"prefab":{"prefab_name":"StructurePressureRegulator","prefab_hash":209854039,"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.","name":"Pressure Regulator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureProximitySensor":{"prefab":{"prefab_name":"StructureProximitySensor","prefab_hash":568800213,"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.","name":"Proximity Sensor"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Activate":"Read","Setting":"ReadWrite","Quantity":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructurePumpedLiquidEngine":{"prefab":{"prefab_name":"StructurePumpedLiquidEngine","prefab_hash":-2031440019,"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","name":"Pumped Liquid Engine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"None"},{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"Output"}],"device_pins_length":null,"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}},"StructurePurgeValve":{"prefab":{"prefab_name":"StructurePurgeValve","prefab_hash":-737232128,"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.","name":"Purge Valve"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureRailing":{"prefab":{"prefab_name":"StructureRailing","prefab_hash":-1756913871,"desc":"\"Safety third.\"","name":"Railing Industrial (Type 1)"},"structure":{"small_grid":false}},"StructureRecycler":{"prefab":{"prefab_name":"StructureRecycler","prefab_hash":-1633947337,"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.","name":"Recycler"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","Activate":"ReadWrite","Reagents":"Read","On":"ReadWrite","RequiredPower":"Read","ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureRefrigeratedVendingMachine":{"prefab":{"prefab_name":"StructureRefrigeratedVendingMachine","prefab_hash":-1577831321,"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. ","name":"Refrigerated Vending Machine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"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"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureReinforcedCompositeWindow":{"prefab":{"prefab_name":"StructureReinforcedCompositeWindow","prefab_hash":2027713511,"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.","name":"Reinforced Window (Composite)"},"structure":{"small_grid":false}},"StructureReinforcedCompositeWindowSteel":{"prefab":{"prefab_name":"StructureReinforcedCompositeWindowSteel","prefab_hash":-816454272,"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.","name":"Reinforced Window (Composite Steel)"},"structure":{"small_grid":false}},"StructureReinforcedWallPaddedWindow":{"prefab":{"prefab_name":"StructureReinforcedWallPaddedWindow","prefab_hash":1939061729,"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.","name":"Reinforced Window (Padded)"},"structure":{"small_grid":false}},"StructureReinforcedWallPaddedWindowThin":{"prefab":{"prefab_name":"StructureReinforcedWallPaddedWindowThin","prefab_hash":158502707,"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.","name":"Reinforced Window (Thin)"},"structure":{"small_grid":false}},"StructureRocketAvionics":{"prefab":{"prefab_name":"StructureRocketAvionics","prefab_hash":808389066,"desc":"","name":"Rocket Avionics"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Invalid","1":"None","2":"Mine","3":"Survey","4":"Discover","5":"Chart"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureRocketCelestialTracker":{"prefab":{"prefab_name":"StructureRocketCelestialTracker","prefab_hash":997453927,"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.","name":"Rocket Celestial Tracker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Horizontal":"Read","Vertical":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","Index":"ReadWrite","CelestialHash":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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":{"instructions":{"BodyOrientation":{"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 |","typ":"CelestialTracking","value":1}},"memory_access":"Read","memory_size":12}},"StructureRocketCircuitHousing":{"prefab":{"prefab_name":"StructureRocketCircuitHousing","prefab_hash":150135861,"desc":"","name":"Rocket Circuit Housing"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","LineNumber":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Error":"Read","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","LineNumber":"ReadWrite","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":true},"slots":[{"name":"Programmable Chip","typ":"ProgrammableChip"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"Input"}],"device_pins_length":6,"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":{"instructions":null,"memory_access":"ReadWrite","memory_size":0}},"StructureRocketEngineTiny":{"prefab":{"prefab_name":"StructureRocketEngineTiny","prefab_hash":178472613,"desc":"","name":"Rocket Engine (Tiny)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureRocketManufactory":{"prefab":{"prefab_name":"StructureRocketManufactory","prefab_hash":1781051034,"desc":"","name":"Rocket Manufactory"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memory_access":"ReadWrite","memory_size":64}},"StructureRocketMiner":{"prefab":{"prefab_name":"StructureRocketMiner","prefab_hash":-2087223687,"desc":"Gathers available resources at the rocket's current space location.","name":"Rocket Miner"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Quantity":"Read","On":"ReadWrite","RequiredPower":"Read","ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","DrillCondition":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Export","typ":"None"},{"name":"Drill Head Slot","typ":"DrillHead"}],"device":{"connection_list":[{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureRocketScanner":{"prefab":{"prefab_name":"StructureRocketScanner","prefab_hash":2014252591,"desc":"","name":"Rocket Scanner"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Scanner Head Slot","typ":"ScanningHead"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureRocketTower":{"prefab":{"prefab_name":"StructureRocketTower","prefab_hash":-654619479,"desc":"","name":"Launch Tower"},"structure":{"small_grid":false}},"StructureRocketTransformerSmall":{"prefab":{"prefab_name":"StructureRocketTransformerSmall","prefab_hash":518925193,"desc":"","name":"Transformer Small (Rocket)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureRover":{"prefab":{"prefab_name":"StructureRover","prefab_hash":806513938,"desc":"","name":"Rover Frame"},"structure":{"small_grid":false}},"StructureSDBHopper":{"prefab":{"prefab_name":"StructureSDBHopper","prefab_hash":-1875856925,"desc":"","name":"SDB Hopper"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"Open":"ReadWrite","ClearMemory":"Write","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"None"}],"device_pins_length":null,"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}},"StructureSDBHopperAdvanced":{"prefab":{"prefab_name":"StructureSDBHopperAdvanced","prefab_hash":467225612,"desc":"","name":"SDB Hopper Advanced"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","ClearMemory":"Write","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"}],"device_pins_length":null,"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}},"StructureSDBSilo":{"prefab":{"prefab_name":"StructureSDBSilo","prefab_hash":1155865682,"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.","name":"SDB Silo"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Mode0","1":"Mode1"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSatelliteDish":{"prefab":{"prefab_name":"StructureSatelliteDish","prefab_hash":439026183,"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.","name":"Medium Satellite Dish"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSecurityPrinter":{"prefab":{"prefab_name":"StructureSecurityPrinter","prefab_hash":-641491515,"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","name":"Security Printer"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memory_access":"ReadWrite","memory_size":64}},"StructureShelf":{"prefab":{"prefab_name":"StructureShelf","prefab_hash":1172114950,"desc":"","name":"Shelf"},"structure":{"small_grid":true},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}]},"StructureShelfMedium":{"prefab":{"prefab_name":"StructureShelfMedium","prefab_hash":182006674,"desc":"A shelf for putting things on, so you can see them.","name":"Shelf Medium"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Open":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":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"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureShortCornerLocker":{"prefab":{"prefab_name":"StructureShortCornerLocker","prefab_hash":1330754486,"desc":"","name":"Short Corner Locker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureShortLocker":{"prefab":{"prefab_name":"StructureShortLocker","prefab_hash":-554553467,"desc":"","name":"Short Locker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":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"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureShower":{"prefab":{"prefab_name":"StructureShower","prefab_hash":-775128944,"desc":"","name":"Shower"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Open":"ReadWrite","Activate":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"}],"device_pins_length":null,"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}},"StructureShowerPowered":{"prefab":{"prefab_name":"StructureShowerPowered","prefab_hash":-1081797501,"desc":"","name":"Shower (Powered)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSign1x1":{"prefab":{"prefab_name":"StructureSign1x1","prefab_hash":879058460,"desc":"","name":"Sign 1x1"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureSign2x1":{"prefab":{"prefab_name":"StructureSign2x1","prefab_hash":908320837,"desc":"","name":"Sign 2x1"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureSingleBed":{"prefab":{"prefab_name":"StructureSingleBed","prefab_hash":-492611,"desc":"Description coming.","name":"Single Bed"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureSleeper":{"prefab":{"prefab_name":"StructureSleeper","prefab_hash":-1467449329,"desc":"","name":"Sleeper"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Bed","typ":"Entity"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSleeperLeft":{"prefab":{"prefab_name":"StructureSleeperLeft","prefab_hash":1213495833,"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.","name":"Sleeper Left"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Safe","1":"Unsafe","2":"Unpowered"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSleeperRight":{"prefab":{"prefab_name":"StructureSleeperRight","prefab_hash":-1812330717,"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.","name":"Sleeper Right"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Safe","1":"Unsafe","2":"Unpowered"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSleeperVertical":{"prefab":{"prefab_name":"StructureSleeperVertical","prefab_hash":-1300059018,"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.","name":"Sleeper Vertical"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Safe","1":"Unsafe","2":"Unpowered"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSleeperVerticalDroid":{"prefab":{"prefab_name":"StructureSleeperVerticalDroid","prefab_hash":1382098999,"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.","name":"Droid Sleeper Vertical"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"Power":"Read","Open":"ReadWrite","Error":"Read","Activate":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Player","typ":"Entity"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSmallDirectHeatExchangeGastoGas":{"prefab":{"prefab_name":"StructureSmallDirectHeatExchangeGastoGas","prefab_hash":1310303582,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Gas + Gas"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"}],"device_pins_length":null,"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}},"StructureSmallDirectHeatExchangeLiquidtoGas":{"prefab":{"prefab_name":"StructureSmallDirectHeatExchangeLiquidtoGas","prefab_hash":1825212016,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Gas "},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"Pipe","role":"Input2"}],"device_pins_length":null,"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}},"StructureSmallDirectHeatExchangeLiquidtoLiquid":{"prefab":{"prefab_name":"StructureSmallDirectHeatExchangeLiquidtoLiquid","prefab_hash":-507770416,"desc":"Direct Heat Exchangers equalize the temperature of the two input networks.","name":"Small Direct Heat Exchanger - Liquid + Liquid"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Input2"}],"device_pins_length":null,"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}},"StructureSmallSatelliteDish":{"prefab":{"prefab_name":"StructureSmallSatelliteDish","prefab_hash":-2138748650,"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.","name":"Small Satellite Dish"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"}],"device_pins_length":null,"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}},"StructureSmallTableBacklessDouble":{"prefab":{"prefab_name":"StructureSmallTableBacklessDouble","prefab_hash":-1633000411,"desc":"","name":"Small (Table Backless Double)"},"structure":{"small_grid":true}},"StructureSmallTableBacklessSingle":{"prefab":{"prefab_name":"StructureSmallTableBacklessSingle","prefab_hash":-1897221677,"desc":"","name":"Small (Table Backless Single)"},"structure":{"small_grid":true}},"StructureSmallTableDinnerSingle":{"prefab":{"prefab_name":"StructureSmallTableDinnerSingle","prefab_hash":1260651529,"desc":"","name":"Small (Table Dinner Single)"},"structure":{"small_grid":true}},"StructureSmallTableRectangleDouble":{"prefab":{"prefab_name":"StructureSmallTableRectangleDouble","prefab_hash":-660451023,"desc":"","name":"Small (Table Rectangle Double)"},"structure":{"small_grid":true}},"StructureSmallTableRectangleSingle":{"prefab":{"prefab_name":"StructureSmallTableRectangleSingle","prefab_hash":-924678969,"desc":"","name":"Small (Table Rectangle Single)"},"structure":{"small_grid":true}},"StructureSmallTableThickDouble":{"prefab":{"prefab_name":"StructureSmallTableThickDouble","prefab_hash":-19246131,"desc":"","name":"Small (Table Thick Double)"},"structure":{"small_grid":true}},"StructureSmallTableThickSingle":{"prefab":{"prefab_name":"StructureSmallTableThickSingle","prefab_hash":-291862981,"desc":"","name":"Small Table (Thick Single)"},"structure":{"small_grid":true}},"StructureSolarPanel":{"prefab":{"prefab_name":"StructureSolarPanel","prefab_hash":-2045627372,"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.","name":"Solar Panel"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Charge":"Read","Horizontal":"ReadWrite","Vertical":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureSolarPanel45":{"prefab":{"prefab_name":"StructureSolarPanel45","prefab_hash":-1554349863,"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.","name":"Solar Panel (Angled)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Charge":"Read","Horizontal":"ReadWrite","Vertical":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureSolarPanel45Reinforced":{"prefab":{"prefab_name":"StructureSolarPanel45Reinforced","prefab_hash":930865127,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Angled)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Charge":"Read","Horizontal":"ReadWrite","Vertical":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureSolarPanelDual":{"prefab":{"prefab_name":"StructureSolarPanelDual","prefab_hash":-539224550,"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.","name":"Solar Panel (Dual)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Charge":"Read","Horizontal":"ReadWrite","Vertical":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSolarPanelDualReinforced":{"prefab":{"prefab_name":"StructureSolarPanelDualReinforced","prefab_hash":-1545574413,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Dual)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Charge":"Read","Horizontal":"ReadWrite","Vertical":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureSolarPanelFlat":{"prefab":{"prefab_name":"StructureSolarPanelFlat","prefab_hash":1968102968,"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.","name":"Solar Panel (Flat)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Charge":"Read","Horizontal":"ReadWrite","Vertical":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureSolarPanelFlatReinforced":{"prefab":{"prefab_name":"StructureSolarPanelFlatReinforced","prefab_hash":1697196770,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy Flat)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Charge":"Read","Horizontal":"ReadWrite","Vertical":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureSolarPanelReinforced":{"prefab":{"prefab_name":"StructureSolarPanelReinforced","prefab_hash":-934345724,"desc":"This solar panel is resistant to storm damage.","name":"Solar Panel (Heavy)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Charge":"Read","Horizontal":"ReadWrite","Vertical":"ReadWrite","Maximum":"Read","Ratio":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureSolidFuelGenerator":{"prefab":{"prefab_name":"StructureSolidFuelGenerator","prefab_hash":813146305,"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.","name":"Generator (Solid Fuel)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Lock":"ReadWrite","On":"ReadWrite","ClearMemory":"Write","ImportCount":"Read","PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Not Generating","1":"Generating"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Input","typ":"Ore"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Data","role":"None"},{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructureSorter":{"prefab":{"prefab_name":"StructureSorter","prefab_hash":-1009150565,"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.","name":"Sorter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","Output":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Split","1":"Filter","2":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export 2","typ":"None"},{"name":"Data Disk","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"Chute","role":"Output2"},{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureStacker":{"prefab":{"prefab_name":"StructureStacker","prefab_hash":-2020231820,"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.","name":"Stacker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Automatic","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Processing","typ":"None"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"device_pins_length":null,"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}},"StructureStackerReverse":{"prefab":{"prefab_name":"StructureStackerReverse","prefab_hash":1585641623,"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.","name":"Stacker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"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","NameHash":"Read"},"modes":{"0":"Automatic","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"device_pins_length":null,"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}},"StructureStairs4x2":{"prefab":{"prefab_name":"StructureStairs4x2","prefab_hash":1405018945,"desc":"","name":"Stairs"},"structure":{"small_grid":false}},"StructureStairs4x2RailL":{"prefab":{"prefab_name":"StructureStairs4x2RailL","prefab_hash":155214029,"desc":"","name":"Stairs with Rail (Left)"},"structure":{"small_grid":false}},"StructureStairs4x2RailR":{"prefab":{"prefab_name":"StructureStairs4x2RailR","prefab_hash":-212902482,"desc":"","name":"Stairs with Rail (Right)"},"structure":{"small_grid":false}},"StructureStairs4x2Rails":{"prefab":{"prefab_name":"StructureStairs4x2Rails","prefab_hash":-1088008720,"desc":"","name":"Stairs with Rails"},"structure":{"small_grid":false}},"StructureStairwellBackLeft":{"prefab":{"prefab_name":"StructureStairwellBackLeft","prefab_hash":505924160,"desc":"","name":"Stairwell (Back Left)"},"structure":{"small_grid":false}},"StructureStairwellBackPassthrough":{"prefab":{"prefab_name":"StructureStairwellBackPassthrough","prefab_hash":-862048392,"desc":"","name":"Stairwell (Back Passthrough)"},"structure":{"small_grid":false}},"StructureStairwellBackRight":{"prefab":{"prefab_name":"StructureStairwellBackRight","prefab_hash":-2128896573,"desc":"","name":"Stairwell (Back Right)"},"structure":{"small_grid":false}},"StructureStairwellFrontLeft":{"prefab":{"prefab_name":"StructureStairwellFrontLeft","prefab_hash":-37454456,"desc":"","name":"Stairwell (Front Left)"},"structure":{"small_grid":false}},"StructureStairwellFrontPassthrough":{"prefab":{"prefab_name":"StructureStairwellFrontPassthrough","prefab_hash":-1625452928,"desc":"","name":"Stairwell (Front Passthrough)"},"structure":{"small_grid":false}},"StructureStairwellFrontRight":{"prefab":{"prefab_name":"StructureStairwellFrontRight","prefab_hash":340210934,"desc":"","name":"Stairwell (Front Right)"},"structure":{"small_grid":false}},"StructureStairwellNoDoors":{"prefab":{"prefab_name":"StructureStairwellNoDoors","prefab_hash":2049879875,"desc":"","name":"Stairwell (No Doors)"},"structure":{"small_grid":false}},"StructureStirlingEngine":{"prefab":{"prefab_name":"StructureStirlingEngine","prefab_hash":-260316435,"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.","name":"Stirling Engine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Gas Canister","typ":"GasCanister"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Output"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureStorageLocker":{"prefab":{"prefab_name":"StructureStorageLocker","prefab_hash":-793623899,"desc":"","name":"Locker"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Open":"ReadWrite","Lock":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":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"},{"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"}],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureSuitStorage":{"prefab":{"prefab_name":"StructureSuitStorage","prefab_hash":255034731,"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.","name":"Suit Storage"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Helmet","typ":"Helmet"},{"name":"Suit","typ":"Suit"},{"name":"Back","typ":"Back"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Input"},{"typ":"Pipe","role":"Input2"},{"typ":"Pipe","role":"Output"}],"device_pins_length":null,"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}},"StructureTankBig":{"prefab":{"prefab_name":"StructureTankBig","prefab_hash":-1606848156,"desc":"","name":"Large Tank"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureTankBigInsulated":{"prefab":{"prefab_name":"StructureTankBigInsulated","prefab_hash":1280378227,"desc":"","name":"Tank Big (Insulated)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureTankConnector":{"prefab":{"prefab_name":"StructureTankConnector","prefab_hash":-1276379454,"desc":"Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network.","name":"Tank Connector"},"structure":{"small_grid":true},"slots":[{"name":"","typ":"None"}]},"StructureTankConnectorLiquid":{"prefab":{"prefab_name":"StructureTankConnectorLiquid","prefab_hash":1331802518,"desc":"These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network.","name":"Liquid Tank Connector"},"structure":{"small_grid":true},"slots":[{"name":"Portable Slot","typ":"None"}]},"StructureTankSmall":{"prefab":{"prefab_name":"StructureTankSmall","prefab_hash":1013514688,"desc":"","name":"Small Tank"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"device_pins_length":null,"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}},"StructureTankSmallAir":{"prefab":{"prefab_name":"StructureTankSmallAir","prefab_hash":955744474,"desc":"","name":"Small Tank (Air)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"device_pins_length":null,"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}},"StructureTankSmallFuel":{"prefab":{"prefab_name":"StructureTankSmallFuel","prefab_hash":2102454415,"desc":"","name":"Small Tank (Fuel)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"None"}],"device_pins_length":null,"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}},"StructureTankSmallInsulated":{"prefab":{"prefab_name":"StructureTankSmallInsulated","prefab_hash":272136332,"desc":"","name":"Tank Small (Insulated)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureToolManufactory":{"prefab":{"prefab_name":"StructureToolManufactory","prefab_hash":-465741100,"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.","name":"Tool Manufactory"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{},"1":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Ingot"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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},"memory":{"instructions":{"DeviceSetLock":{"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 |","typ":"PrinterInstruction","value":6},"EjectAllReagents":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":8},"EjectReagent":{"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 |","typ":"PrinterInstruction","value":7},"ExecuteRecipe":{"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 |","typ":"PrinterInstruction","value":2},"JumpIfNextInvalid":{"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 |","typ":"PrinterInstruction","value":4},"JumpToAddress":{"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 |","typ":"PrinterInstruction","value":5},"MissingRecipeReagent":{"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 |","typ":"PrinterInstruction","value":9},"StackPointer":{"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 |","typ":"PrinterInstruction","value":1},"WaitUntilNextValid":{"description":"| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |","typ":"PrinterInstruction","value":3}},"memory_access":"ReadWrite","memory_size":64}},"StructureTorpedoRack":{"prefab":{"prefab_name":"StructureTorpedoRack","prefab_hash":1473807953,"desc":"","name":"Torpedo Rack"},"structure":{"small_grid":true},"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"}]},"StructureTraderWaypoint":{"prefab":{"prefab_name":"StructureTraderWaypoint","prefab_hash":1570931620,"desc":"","name":"Trader Waypoint"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureTransformer":{"prefab":{"prefab_name":"StructureTransformer","prefab_hash":-1423212473,"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.","name":"Transformer (Large)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"Input"},{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructureTransformerMedium":{"prefab":{"prefab_name":"StructureTransformerMedium","prefab_hash":-1065725831,"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.","name":"Transformer (Medium)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"Input"},{"typ":"PowerAndData","role":"Output"}],"device_pins_length":null,"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}},"StructureTransformerMediumReversed":{"prefab":{"prefab_name":"StructureTransformerMediumReversed","prefab_hash":833912764,"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.","name":"Transformer Reversed (Medium)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"Input"}],"device_pins_length":null,"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}},"StructureTransformerSmall":{"prefab":{"prefab_name":"StructureTransformerSmall","prefab_hash":-890946730,"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.","name":"Transformer (Small)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"Input"},{"typ":"Power","role":"Output"}],"device_pins_length":null,"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}},"StructureTransformerSmallReversed":{"prefab":{"prefab_name":"StructureTransformerSmallReversed","prefab_hash":1054059374,"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.","name":"Transformer Reversed (Small)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"Output"},{"typ":"PowerAndData","role":"Input"}],"device_pins_length":null,"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}},"StructureTurbineGenerator":{"prefab":{"prefab_name":"StructureTurbineGenerator","prefab_hash":1282191063,"desc":"","name":"Turbine Generator"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureTurboVolumePump":{"prefab":{"prefab_name":"StructureTurboVolumePump","prefab_hash":1310794736,"desc":"Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction.","name":"Turbo Volume Pump (Gas)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Right","1":"Left"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"},{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"}],"device_pins_length":null,"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}},"StructureUnloader":{"prefab":{"prefab_name":"StructureUnloader","prefab_hash":750118160,"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.","name":"Unloader"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Mode":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","ClearMemory":"Write","ExportCount":"Read","ImportCount":"Read","Output":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Automatic","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"None"},{"name":"Export","typ":"None"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"},{"typ":"Chute","role":"Output"},{"typ":"Chute","role":"Input"}],"device_pins_length":null,"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}},"StructureUprightWindTurbine":{"prefab":{"prefab_name":"StructureUprightWindTurbine","prefab_hash":1622183451,"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.","name":"Upright Wind Turbine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureValve":{"prefab":{"prefab_name":"StructureValve","prefab_hash":-692036078,"desc":"","name":"Valve"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"None"},{"typ":"Pipe","role":"None"}],"device_pins_length":null,"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}},"StructureVendingMachine":{"prefab":{"prefab_name":"StructureVendingMachine","prefab_hash":-443130773,"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.","name":"Vending Machine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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":{}},"logic_types":{"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","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"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"}],"device":{"connection_list":[{"typ":"Chute","role":"Input"},{"typ":"Chute","role":"Output"},{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureVolumePump":{"prefab":{"prefab_name":"StructureVolumePump","prefab_hash":-321403609,"desc":"The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks.","name":"Volume Pump"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Pipe","role":"Output"},{"typ":"Pipe","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureWallArch":{"prefab":{"prefab_name":"StructureWallArch","prefab_hash":-858143148,"desc":"","name":"Wall (Arch)"},"structure":{"small_grid":false}},"StructureWallArchArrow":{"prefab":{"prefab_name":"StructureWallArchArrow","prefab_hash":1649708822,"desc":"","name":"Wall (Arch Arrow)"},"structure":{"small_grid":false}},"StructureWallArchCornerRound":{"prefab":{"prefab_name":"StructureWallArchCornerRound","prefab_hash":1794588890,"desc":"","name":"Wall (Arch Corner Round)"},"structure":{"small_grid":true}},"StructureWallArchCornerSquare":{"prefab":{"prefab_name":"StructureWallArchCornerSquare","prefab_hash":-1963016580,"desc":"","name":"Wall (Arch Corner Square)"},"structure":{"small_grid":true}},"StructureWallArchCornerTriangle":{"prefab":{"prefab_name":"StructureWallArchCornerTriangle","prefab_hash":1281911841,"desc":"","name":"Wall (Arch Corner Triangle)"},"structure":{"small_grid":true}},"StructureWallArchPlating":{"prefab":{"prefab_name":"StructureWallArchPlating","prefab_hash":1182510648,"desc":"","name":"Wall (Arch Plating)"},"structure":{"small_grid":false}},"StructureWallArchTwoTone":{"prefab":{"prefab_name":"StructureWallArchTwoTone","prefab_hash":782529714,"desc":"","name":"Wall (Arch Two Tone)"},"structure":{"small_grid":false}},"StructureWallCooler":{"prefab":{"prefab_name":"StructureWallCooler","prefab_hash":-739292323,"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.","name":"Wall Cooler"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"Pipe","role":"None"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureWallFlat":{"prefab":{"prefab_name":"StructureWallFlat","prefab_hash":1635864154,"desc":"","name":"Wall (Flat)"},"structure":{"small_grid":false}},"StructureWallFlatCornerRound":{"prefab":{"prefab_name":"StructureWallFlatCornerRound","prefab_hash":898708250,"desc":"","name":"Wall (Flat Corner Round)"},"structure":{"small_grid":true}},"StructureWallFlatCornerSquare":{"prefab":{"prefab_name":"StructureWallFlatCornerSquare","prefab_hash":298130111,"desc":"","name":"Wall (Flat Corner Square)"},"structure":{"small_grid":true}},"StructureWallFlatCornerTriangle":{"prefab":{"prefab_name":"StructureWallFlatCornerTriangle","prefab_hash":2097419366,"desc":"","name":"Wall (Flat Corner Triangle)"},"structure":{"small_grid":true}},"StructureWallFlatCornerTriangleFlat":{"prefab":{"prefab_name":"StructureWallFlatCornerTriangleFlat","prefab_hash":-1161662836,"desc":"","name":"Wall (Flat Corner Triangle Flat)"},"structure":{"small_grid":true}},"StructureWallGeometryCorner":{"prefab":{"prefab_name":"StructureWallGeometryCorner","prefab_hash":1979212240,"desc":"","name":"Wall (Geometry Corner)"},"structure":{"small_grid":false}},"StructureWallGeometryStreight":{"prefab":{"prefab_name":"StructureWallGeometryStreight","prefab_hash":1049735537,"desc":"","name":"Wall (Geometry Straight)"},"structure":{"small_grid":false}},"StructureWallGeometryT":{"prefab":{"prefab_name":"StructureWallGeometryT","prefab_hash":1602758612,"desc":"","name":"Wall (Geometry T)"},"structure":{"small_grid":false}},"StructureWallGeometryTMirrored":{"prefab":{"prefab_name":"StructureWallGeometryTMirrored","prefab_hash":-1427845483,"desc":"","name":"Wall (Geometry T Mirrored)"},"structure":{"small_grid":false}},"StructureWallHeater":{"prefab":{"prefab_name":"StructureWallHeater","prefab_hash":24258244,"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.","name":"Wall Heater"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureWallIron":{"prefab":{"prefab_name":"StructureWallIron","prefab_hash":1287324802,"desc":"","name":"Iron Wall (Type 1)"},"structure":{"small_grid":false}},"StructureWallIron02":{"prefab":{"prefab_name":"StructureWallIron02","prefab_hash":1485834215,"desc":"","name":"Iron Wall (Type 2)"},"structure":{"small_grid":false}},"StructureWallIron03":{"prefab":{"prefab_name":"StructureWallIron03","prefab_hash":798439281,"desc":"","name":"Iron Wall (Type 3)"},"structure":{"small_grid":false}},"StructureWallIron04":{"prefab":{"prefab_name":"StructureWallIron04","prefab_hash":-1309433134,"desc":"","name":"Iron Wall (Type 4)"},"structure":{"small_grid":false}},"StructureWallLargePanel":{"prefab":{"prefab_name":"StructureWallLargePanel","prefab_hash":1492930217,"desc":"","name":"Wall (Large Panel)"},"structure":{"small_grid":false}},"StructureWallLargePanelArrow":{"prefab":{"prefab_name":"StructureWallLargePanelArrow","prefab_hash":-776581573,"desc":"","name":"Wall (Large Panel Arrow)"},"structure":{"small_grid":false}},"StructureWallLight":{"prefab":{"prefab_name":"StructureWallLight","prefab_hash":-1860064656,"desc":"","name":"Wall Light"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureWallLightBattery":{"prefab":{"prefab_name":"StructureWallLightBattery","prefab_hash":-1306415132,"desc":"","name":"Wall Light (Battery)"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}],"device":{"connection_list":[{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureWallPaddedArch":{"prefab":{"prefab_name":"StructureWallPaddedArch","prefab_hash":1590330637,"desc":"","name":"Wall (Padded Arch)"},"structure":{"small_grid":false}},"StructureWallPaddedArchCorner":{"prefab":{"prefab_name":"StructureWallPaddedArchCorner","prefab_hash":-1126688298,"desc":"","name":"Wall (Padded Arch Corner)"},"structure":{"small_grid":true}},"StructureWallPaddedArchLightFittingTop":{"prefab":{"prefab_name":"StructureWallPaddedArchLightFittingTop","prefab_hash":1171987947,"desc":"","name":"Wall (Padded Arch Light Fitting Top)"},"structure":{"small_grid":false}},"StructureWallPaddedArchLightsFittings":{"prefab":{"prefab_name":"StructureWallPaddedArchLightsFittings","prefab_hash":-1546743960,"desc":"","name":"Wall (Padded Arch Lights Fittings)"},"structure":{"small_grid":false}},"StructureWallPaddedCorner":{"prefab":{"prefab_name":"StructureWallPaddedCorner","prefab_hash":-155945899,"desc":"","name":"Wall (Padded Corner)"},"structure":{"small_grid":true}},"StructureWallPaddedCornerThin":{"prefab":{"prefab_name":"StructureWallPaddedCornerThin","prefab_hash":1183203913,"desc":"","name":"Wall (Padded Corner Thin)"},"structure":{"small_grid":true}},"StructureWallPaddedNoBorder":{"prefab":{"prefab_name":"StructureWallPaddedNoBorder","prefab_hash":8846501,"desc":"","name":"Wall (Padded No Border)"},"structure":{"small_grid":false}},"StructureWallPaddedNoBorderCorner":{"prefab":{"prefab_name":"StructureWallPaddedNoBorderCorner","prefab_hash":179694804,"desc":"","name":"Wall (Padded No Border Corner)"},"structure":{"small_grid":true}},"StructureWallPaddedThinNoBorder":{"prefab":{"prefab_name":"StructureWallPaddedThinNoBorder","prefab_hash":-1611559100,"desc":"","name":"Wall (Padded Thin No Border)"},"structure":{"small_grid":false}},"StructureWallPaddedThinNoBorderCorner":{"prefab":{"prefab_name":"StructureWallPaddedThinNoBorderCorner","prefab_hash":1769527556,"desc":"","name":"Wall (Padded Thin No Border Corner)"},"structure":{"small_grid":true}},"StructureWallPaddedWindow":{"prefab":{"prefab_name":"StructureWallPaddedWindow","prefab_hash":2087628940,"desc":"","name":"Wall (Padded Window)"},"structure":{"small_grid":false}},"StructureWallPaddedWindowThin":{"prefab":{"prefab_name":"StructureWallPaddedWindowThin","prefab_hash":-37302931,"desc":"","name":"Wall (Padded Window Thin)"},"structure":{"small_grid":false}},"StructureWallPadding":{"prefab":{"prefab_name":"StructureWallPadding","prefab_hash":635995024,"desc":"","name":"Wall (Padding)"},"structure":{"small_grid":false}},"StructureWallPaddingArchVent":{"prefab":{"prefab_name":"StructureWallPaddingArchVent","prefab_hash":-1243329828,"desc":"","name":"Wall (Padding Arch Vent)"},"structure":{"small_grid":false}},"StructureWallPaddingLightFitting":{"prefab":{"prefab_name":"StructureWallPaddingLightFitting","prefab_hash":2024882687,"desc":"","name":"Wall (Padding Light Fitting)"},"structure":{"small_grid":false}},"StructureWallPaddingThin":{"prefab":{"prefab_name":"StructureWallPaddingThin","prefab_hash":-1102403554,"desc":"","name":"Wall (Padding Thin)"},"structure":{"small_grid":false}},"StructureWallPlating":{"prefab":{"prefab_name":"StructureWallPlating","prefab_hash":26167457,"desc":"","name":"Wall (Plating)"},"structure":{"small_grid":false}},"StructureWallSmallPanelsAndHatch":{"prefab":{"prefab_name":"StructureWallSmallPanelsAndHatch","prefab_hash":619828719,"desc":"","name":"Wall (Small Panels And Hatch)"},"structure":{"small_grid":false}},"StructureWallSmallPanelsArrow":{"prefab":{"prefab_name":"StructureWallSmallPanelsArrow","prefab_hash":-639306697,"desc":"","name":"Wall (Small Panels Arrow)"},"structure":{"small_grid":false}},"StructureWallSmallPanelsMonoChrome":{"prefab":{"prefab_name":"StructureWallSmallPanelsMonoChrome","prefab_hash":386820253,"desc":"","name":"Wall (Small Panels Mono Chrome)"},"structure":{"small_grid":false}},"StructureWallSmallPanelsOpen":{"prefab":{"prefab_name":"StructureWallSmallPanelsOpen","prefab_hash":-1407480603,"desc":"","name":"Wall (Small Panels Open)"},"structure":{"small_grid":false}},"StructureWallSmallPanelsTwoTone":{"prefab":{"prefab_name":"StructureWallSmallPanelsTwoTone","prefab_hash":1709994581,"desc":"","name":"Wall (Small Panels Two Tone)"},"structure":{"small_grid":false}},"StructureWallVent":{"prefab":{"prefab_name":"StructureWallVent","prefab_hash":-1177469307,"desc":"Used to mix atmospheres passively between two walls.","name":"Wall Vent"},"structure":{"small_grid":true}},"StructureWaterBottleFiller":{"prefab":{"prefab_name":"StructureWaterBottleFiller","prefab_hash":-1178961954,"desc":"","name":"Water Bottle Filler"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Error":"Read","Activate":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureWaterBottleFillerBottom":{"prefab":{"prefab_name":"StructureWaterBottleFillerBottom","prefab_hash":1433754995,"desc":"","name":"Water Bottle Filler Bottom"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Error":"Read","Activate":"ReadWrite","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"}],"device_pins_length":null,"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}},"StructureWaterBottleFillerPowered":{"prefab":{"prefab_name":"StructureWaterBottleFillerPowered","prefab_hash":-756587791,"desc":"","name":"Waterbottle Filler"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureWaterBottleFillerPoweredBottom":{"prefab":{"prefab_name":"StructureWaterBottleFillerPoweredBottom","prefab_hash":1986658780,"desc":"","name":"Waterbottle Filler"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"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"}},"logic_types":{"Power":"Read","Error":"Read","Activate":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Bottle Slot","typ":"LiquidBottle"},{"name":"Bottle Slot","typ":"LiquidBottle"}],"device":{"connection_list":[{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureWaterDigitalValve":{"prefab":{"prefab_name":"StructureWaterDigitalValve","prefab_hash":-517628750,"desc":"","name":"Liquid Digital Valve"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"PipeLiquid","role":"Output"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureWaterPipeMeter":{"prefab":{"prefab_name":"StructureWaterPipeMeter","prefab_hash":433184168,"desc":"","name":"Liquid Pipe Meter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[],"device_pins_length":null,"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}},"StructureWaterPurifier":{"prefab":{"prefab_name":"StructureWaterPurifier","prefab_hash":887383294,"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.","name":"Water Purifier"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{}},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","ClearMemory":"Write","ImportCount":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Import","typ":"Ore"}],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"PipeLiquid","role":"Input"},{"typ":"PipeLiquid","role":"Output"},{"typ":"Power","role":"None"},{"typ":"Chute","role":"Input"}],"device_pins_length":null,"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}},"StructureWaterWallCooler":{"prefab":{"prefab_name":"StructureWaterWallCooler","prefab_hash":-1369060582,"desc":"","name":"Liquid Wall Cooler"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Class":"Read","MaxQuantity":"Read","PrefabHash":"Read","SortingClass":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Error":"Read","Lock":"ReadWrite","Setting":"ReadWrite","Maximum":"Read","Ratio":"Read","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"","typ":"DataDisk"}],"device":{"connection_list":[{"typ":"PipeLiquid","role":"None"},{"typ":"PowerAndData","role":"None"}],"device_pins_length":null,"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}},"StructureWeatherStation":{"prefab":{"prefab_name":"StructureWeatherStation","prefab_hash":1997212478,"desc":"0.NoStorm\n1.StormIncoming\n2.InStorm","name":"Weather Station"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Mode":"Read","Error":"Read","Activate":"ReadWrite","Lock":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","PrefabHash":"Read","NextWeatherEventTime":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"NoStorm","1":"StormIncoming","2":"InStorm"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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}},"StructureWindTurbine":{"prefab":{"prefab_name":"StructureWindTurbine","prefab_hash":-2082355173,"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.","name":"Wind Turbine"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"PowerGeneration":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Power","role":"None"},{"typ":"Data","role":"None"}],"device_pins_length":null,"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}},"StructureWindowShutter":{"prefab":{"prefab_name":"StructureWindowShutter","prefab_hash":2056377335,"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.","name":"Window Shutter"},"structure":{"small_grid":true},"logic":{"logic_slot_types":{},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Error":"Read","Setting":"ReadWrite","On":"ReadWrite","RequiredPower":"Read","Idle":"Read","PrefabHash":"Read","ReferenceId":"Read","NameHash":"Read"},"modes":{"0":"Operate","1":"Logic"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[],"device":{"connection_list":[{"typ":"Data","role":"None"},{"typ":"Power","role":"None"}],"device_pins_length":null,"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":true,"has_reagents":false}},"ToolPrinterMod":{"prefab":{"prefab_name":"ToolPrinterMod","prefab_hash":1700018136,"desc":"Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.","name":"Tool Printer Mod"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"ToyLuna":{"prefab":{"prefab_name":"ToyLuna","prefab_hash":94730034,"desc":"","name":"Toy Luna"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Default"}},"UniformCommander":{"prefab":{"prefab_name":"UniformCommander","prefab_hash":-2083426457,"desc":"","name":"Uniform Commander"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Uniform","sorting_class":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformMarine":{"prefab":{"prefab_name":"UniformMarine","prefab_hash":-48342840,"desc":"","name":"Marine Uniform"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Uniform","sorting_class":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"UniformOrangeJumpSuit":{"prefab":{"prefab_name":"UniformOrangeJumpSuit","prefab_hash":810053150,"desc":"","name":"Jump Suit (Orange)"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Uniform","sorting_class":"Clothing"},"slots":[{"name":"","typ":"None"},{"name":"","typ":"None"},{"name":"Access Card","typ":"AccessCard"},{"name":"Credit Card","typ":"CreditCard"}]},"WeaponEnergy":{"prefab":{"prefab_name":"WeaponEnergy","prefab_hash":789494694,"desc":"","name":"Weapon Energy"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"On":"ReadWrite","ReferenceId":"Read"},"modes":null,"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponPistolEnergy":{"prefab":{"prefab_name":"WeaponPistolEnergy","prefab_hash":-385323479,"desc":"0.Stun\n1.Kill","name":"Energy Pistol"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponRifleEnergy":{"prefab":{"prefab_name":"WeaponRifleEnergy","prefab_hash":1154745374,"desc":"0.Stun\n1.Kill","name":"Energy Rifle"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"None","sorting_class":"Tools"},"logic":{"logic_slot_types":{"0":{"Occupied":"Read","OccupantHash":"Read","Quantity":"Read","Damage":"Read","Charge":"Read","ChargeRatio":"Read","Class":"Read","MaxQuantity":"Read","ReferenceId":"Read"}},"logic_types":{"Power":"Read","Open":"ReadWrite","Mode":"ReadWrite","Error":"Read","Lock":"ReadWrite","On":"ReadWrite","ReferenceId":"Read"},"modes":{"0":"Stun","1":"Kill"},"transmission_receiver":false,"wireless_logic":false,"circuit_holder":false},"slots":[{"name":"Battery","typ":"Battery"}]},"WeaponTorpedo":{"prefab":{"prefab_name":"WeaponTorpedo","prefab_hash":-1102977898,"desc":"","name":"Torpedo"},"item":{"consumable":false,"filter_type":null,"ingredient":false,"max_quantity":1,"reagents":null,"slot_class":"Torpedo","sorting_class":"Default"}}},"reagents":{"Alcohol":{"Hash":1565803737,"Unit":"ml","Sources":null},"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}},"Cocoa":{"Hash":678781198,"Unit":"g","Sources":{"ItemCocoaPowder":1.0,"ItemCocoaTree":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","Sources":null},"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","Sources":null},"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}},"Sugar":{"Hash":1778746875,"Unit":"g","Sources":{"ItemSugar":10.0,"ItemSugarCane":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}}},"enums":{"scriptEnums":{"LogicBatchMethod":{"enumName":"LogicBatchMethod","values":{"Average":{"value":0,"deprecated":false,"description":""},"Maximum":{"value":3,"deprecated":false,"description":""},"Minimum":{"value":2,"deprecated":false,"description":""},"Sum":{"value":1,"deprecated":false,"description":""}}},"LogicReagentMode":{"enumName":"LogicReagentMode","values":{"Contents":{"value":0,"deprecated":false,"description":""},"Recipe":{"value":2,"deprecated":false,"description":""},"Required":{"value":1,"deprecated":false,"description":""},"TotalContents":{"value":3,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NameHash":{"value":268,"deprecated":false,"description":"Provides the hash value for the name of the object as a 32 bit integer."},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}}},"basicEnums":{"AirCon":{"enumName":"AirConditioningMode","values":{"Cold":{"value":0,"deprecated":false,"description":""},"Hot":{"value":1,"deprecated":false,"description":""}}},"AirControl":{"enumName":"AirControlMode","values":{"Draught":{"value":4,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Offline":{"value":1,"deprecated":false,"description":""},"Pressure":{"value":2,"deprecated":false,"description":""}}},"Color":{"enumName":"ColorType","values":{"Black":{"value":7,"deprecated":false,"description":""},"Blue":{"value":0,"deprecated":false,"description":""},"Brown":{"value":8,"deprecated":false,"description":""},"Gray":{"value":1,"deprecated":false,"description":""},"Green":{"value":2,"deprecated":false,"description":""},"Khaki":{"value":9,"deprecated":false,"description":""},"Orange":{"value":3,"deprecated":false,"description":""},"Pink":{"value":10,"deprecated":false,"description":""},"Purple":{"value":11,"deprecated":false,"description":""},"Red":{"value":4,"deprecated":false,"description":""},"White":{"value":6,"deprecated":false,"description":""},"Yellow":{"value":5,"deprecated":false,"description":""}}},"DaylightSensorMode":{"enumName":"DaylightSensorMode","values":{"Default":{"value":0,"deprecated":false,"description":""},"Horizontal":{"value":1,"deprecated":false,"description":""},"Vertical":{"value":2,"deprecated":false,"description":""}}},"ElevatorMode":{"enumName":"ElevatorMode","values":{"Downward":{"value":2,"deprecated":false,"description":""},"Stationary":{"value":0,"deprecated":false,"description":""},"Upward":{"value":1,"deprecated":false,"description":""}}},"EntityState":{"enumName":"EntityState","values":{"Alive":{"value":0,"deprecated":false,"description":""},"Dead":{"value":1,"deprecated":false,"description":""},"Decay":{"value":3,"deprecated":false,"description":""},"Unconscious":{"value":2,"deprecated":false,"description":""}}},"GasType":{"enumName":"GasType","values":{"CarbonDioxide":{"value":4,"deprecated":false,"description":""},"Hydrogen":{"value":16384,"deprecated":false,"description":""},"LiquidCarbonDioxide":{"value":2048,"deprecated":false,"description":""},"LiquidHydrogen":{"value":32768,"deprecated":false,"description":""},"LiquidNitrogen":{"value":128,"deprecated":false,"description":""},"LiquidNitrousOxide":{"value":8192,"deprecated":false,"description":""},"LiquidOxygen":{"value":256,"deprecated":false,"description":""},"LiquidPollutant":{"value":4096,"deprecated":false,"description":""},"LiquidVolatiles":{"value":512,"deprecated":false,"description":""},"Nitrogen":{"value":2,"deprecated":false,"description":""},"NitrousOxide":{"value":64,"deprecated":false,"description":""},"Oxygen":{"value":1,"deprecated":false,"description":""},"Pollutant":{"value":16,"deprecated":false,"description":""},"PollutedWater":{"value":65536,"deprecated":false,"description":""},"Steam":{"value":1024,"deprecated":false,"description":""},"Undefined":{"value":0,"deprecated":false,"description":""},"Volatiles":{"value":8,"deprecated":false,"description":""},"Water":{"value":32,"deprecated":false,"description":""}}},"LogicSlotType":{"enumName":"LogicSlotType","values":{"Charge":{"value":10,"deprecated":false,"description":"returns current energy charge the slot occupant is holding"},"ChargeRatio":{"value":11,"deprecated":false,"description":"returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum"},"Class":{"value":12,"deprecated":false,"description":"returns integer representing the class of object"},"Damage":{"value":4,"deprecated":false,"description":"returns the damage state of the item in the slot"},"Efficiency":{"value":5,"deprecated":false,"description":"returns the growth efficiency of the plant in the slot"},"FilterType":{"value":25,"deprecated":false,"description":"No description available"},"Growth":{"value":7,"deprecated":false,"description":"returns the current growth state of the plant in the slot"},"Health":{"value":6,"deprecated":false,"description":"returns the health of the plant in the slot"},"LineNumber":{"value":19,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":23,"deprecated":false,"description":"No description available"},"Mature":{"value":16,"deprecated":false,"description":"returns 1 if the plant in this slot is mature, 0 when it isn't"},"MaxQuantity":{"value":15,"deprecated":false,"description":"returns the max stack size of the item in the slot"},"None":{"value":0,"deprecated":false,"description":"No description"},"OccupantHash":{"value":2,"deprecated":false,"description":"returns the has of the current occupant, the unique identifier of the thing"},"Occupied":{"value":1,"deprecated":false,"description":"returns 0 when slot is not occupied, 1 when it is"},"On":{"value":22,"deprecated":false,"description":"No description available"},"Open":{"value":21,"deprecated":false,"description":"No description available"},"PrefabHash":{"value":17,"deprecated":false,"description":"returns the hash of the structure in the slot"},"Pressure":{"value":8,"deprecated":false,"description":"returns pressure of the slot occupants internal atmosphere"},"PressureAir":{"value":14,"deprecated":false,"description":"returns pressure in the air tank of the jetpack in this slot"},"PressureWaste":{"value":13,"deprecated":false,"description":"returns pressure in the waste tank of the jetpack in this slot"},"Quantity":{"value":3,"deprecated":false,"description":"returns the current quantity, such as stack size, of the item in the slot"},"ReferenceId":{"value":26,"deprecated":false,"description":"Unique Reference Identifier for this object"},"Seeding":{"value":18,"deprecated":false,"description":"Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not."},"SortingClass":{"value":24,"deprecated":false,"description":"No description available"},"Temperature":{"value":9,"deprecated":false,"description":"returns temperature of the slot occupants internal atmosphere"},"Volume":{"value":20,"deprecated":false,"description":"No description available"}}},"LogicType":{"enumName":"LogicType","values":{"Acceleration":{"value":216,"deprecated":false,"description":"Change in velocity. Rockets that are deccelerating when landing will show this as negative value."},"Activate":{"value":9,"deprecated":false,"description":"1 if device is activated (usually means running), otherwise 0"},"AirRelease":{"value":75,"deprecated":false,"description":"The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On"},"AlignmentError":{"value":243,"deprecated":false,"description":"The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target."},"Apex":{"value":238,"deprecated":false,"description":"The lowest altitude that the rocket will reach before it starts travelling upwards again."},"AutoLand":{"value":226,"deprecated":false,"description":"Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing."},"AutoShutOff":{"value":218,"deprecated":false,"description":"Turns off all devices in the rocket upon reaching destination"},"BestContactFilter":{"value":267,"deprecated":false,"description":"Filters the satellite's auto selection of targets to a single reference ID."},"Bpm":{"value":103,"deprecated":false,"description":"Bpm"},"BurnTimeRemaining":{"value":225,"deprecated":false,"description":"Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage."},"CelestialHash":{"value":242,"deprecated":false,"description":"The current hash of the targeted celestial object."},"CelestialParentHash":{"value":250,"deprecated":false,"description":"The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial."},"Channel0":{"value":165,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel1":{"value":166,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel2":{"value":167,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel3":{"value":168,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel4":{"value":169,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel5":{"value":170,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel6":{"value":171,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Channel7":{"value":172,"deprecated":false,"description":"Channel on a cable network which should be considered volatile"},"Charge":{"value":11,"deprecated":false,"description":"The current charge the device has"},"Chart":{"value":256,"deprecated":false,"description":"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."},"ChartedNavPoints":{"value":259,"deprecated":false,"description":"The number of charted NavPoints at the rocket's target Space Map Location."},"ClearMemory":{"value":62,"deprecated":false,"description":"When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned"},"CollectableGoods":{"value":101,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Color":{"value":38,"deprecated":false,"description":"\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 "},"Combustion":{"value":98,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not."},"CombustionInput":{"value":146,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not."},"CombustionInput2":{"value":147,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not."},"CombustionLimiter":{"value":153,"deprecated":false,"description":"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":{"value":148,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not."},"CombustionOutput2":{"value":149,"deprecated":false,"description":"The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not."},"CompletionRatio":{"value":61,"deprecated":false,"description":"How complete the current production is for this device, between 0 and 1"},"ContactTypeId":{"value":198,"deprecated":false,"description":"The type id of the contact."},"CurrentCode":{"value":261,"deprecated":false,"description":"The Space Map Address of the rockets current Space Map Location"},"CurrentResearchPodType":{"value":93,"deprecated":false,"description":""},"Density":{"value":262,"deprecated":false,"description":"The density of the rocket's target site's mine-able deposit."},"DestinationCode":{"value":215,"deprecated":false,"description":"The Space Map Address of the rockets target Space Map Location"},"Discover":{"value":255,"deprecated":false,"description":"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."},"DistanceAu":{"value":244,"deprecated":false,"description":"The current distance to the celestial object, measured in astronomical units."},"DistanceKm":{"value":249,"deprecated":false,"description":"The current distance to the celestial object, measured in kilometers."},"DrillCondition":{"value":240,"deprecated":false,"description":"The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1."},"DryMass":{"value":220,"deprecated":false,"description":"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":{"value":247,"deprecated":false,"description":"A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)."},"ElevatorLevel":{"value":40,"deprecated":false,"description":"Level the elevator is currently at"},"ElevatorSpeed":{"value":39,"deprecated":false,"description":"Current speed of the elevator"},"EntityState":{"value":239,"deprecated":false,"description":"The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer."},"EnvironmentEfficiency":{"value":104,"deprecated":false,"description":"The Environment Efficiency reported by the machine, as a float between 0 and 1"},"Error":{"value":4,"deprecated":false,"description":"1 if device is in error state, otherwise 0"},"ExhaustVelocity":{"value":235,"deprecated":false,"description":"The velocity of the exhaust gas in m/s"},"ExportCount":{"value":63,"deprecated":false,"description":"How many items exported since last ClearMemory"},"ExportQuantity":{"value":31,"deprecated":true,"description":"Total quantity of items exported by the device"},"ExportSlotHash":{"value":42,"deprecated":true,"description":"DEPRECATED"},"ExportSlotOccupant":{"value":32,"deprecated":true,"description":"DEPRECATED"},"Filtration":{"value":74,"deprecated":false,"description":"The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On"},"FlightControlRule":{"value":236,"deprecated":false,"description":"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."},"Flush":{"value":174,"deprecated":false,"description":"Set to 1 to activate the flush function on the device"},"ForceWrite":{"value":85,"deprecated":false,"description":"Forces Logic Writer devices to rewrite value"},"ForwardX":{"value":227,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardY":{"value":228,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"ForwardZ":{"value":229,"deprecated":false,"description":"The direction the entity is facing expressed as a normalized vector"},"Fuel":{"value":99,"deprecated":false,"description":"Gets the cost of fuel to return the rocket to your current world."},"Harvest":{"value":69,"deprecated":false,"description":"Performs the harvesting action for any plant based machinery"},"Horizontal":{"value":20,"deprecated":false,"description":"Horizontal setting of the device"},"HorizontalRatio":{"value":34,"deprecated":false,"description":"Radio of horizontal setting for device"},"Idle":{"value":37,"deprecated":false,"description":"Returns 1 if the device is currently idle, otherwise 0"},"ImportCount":{"value":64,"deprecated":false,"description":"How many items imported since last ClearMemory"},"ImportQuantity":{"value":29,"deprecated":true,"description":"Total quantity of items imported by the device"},"ImportSlotHash":{"value":43,"deprecated":true,"description":"DEPRECATED"},"ImportSlotOccupant":{"value":30,"deprecated":true,"description":"DEPRECATED"},"Inclination":{"value":246,"deprecated":false,"description":"The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle."},"Index":{"value":241,"deprecated":false,"description":"The current index for the device."},"InterrogationProgress":{"value":157,"deprecated":false,"description":"Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1"},"LineNumber":{"value":173,"deprecated":false,"description":"The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution"},"Lock":{"value":10,"deprecated":false,"description":"1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values"},"ManualResearchRequiredPod":{"value":94,"deprecated":false,"description":"Sets the pod type to search for a certain pod when breaking down a pods."},"Mass":{"value":219,"deprecated":false,"description":"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":{"value":23,"deprecated":false,"description":"Maximum setting of the device"},"MineablesInQueue":{"value":96,"deprecated":false,"description":"Returns the amount of mineables AIMEe has queued up to mine."},"MineablesInVicinity":{"value":95,"deprecated":false,"description":"Returns the amount of potential mineables within an extended area around AIMEe."},"MinedQuantity":{"value":266,"deprecated":false,"description":"The total number of resources that have been mined at the rocket's target Space Map Site."},"MinimumWattsToContact":{"value":163,"deprecated":false,"description":"Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact"},"Mode":{"value":3,"deprecated":false,"description":"Integer for mode state, different devices will have different mode states available to them"},"NameHash":{"value":268,"deprecated":false,"description":"Provides the hash value for the name of the object as a 32 bit integer."},"NavPoints":{"value":258,"deprecated":false,"description":"The number of NavPoints at the rocket's target Space Map Location."},"NextWeatherEventTime":{"value":97,"deprecated":false,"description":"Returns in seconds when the next weather event is inbound."},"None":{"value":0,"deprecated":true,"description":"No description"},"On":{"value":28,"deprecated":false,"description":"The current state of the device, 0 for off, 1 for on"},"Open":{"value":2,"deprecated":false,"description":"1 if device is open, otherwise 0"},"OperationalTemperatureEfficiency":{"value":150,"deprecated":false,"description":"How the input pipe's temperature effects the machines efficiency"},"OrbitPeriod":{"value":245,"deprecated":false,"description":"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."},"Orientation":{"value":230,"deprecated":false,"description":"The orientation of the entity in degrees in a plane relative towards the north origin"},"Output":{"value":70,"deprecated":false,"description":"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":{"value":234,"deprecated":false,"description":"The number of moles that passed through this device on the previous simulation tick"},"Plant":{"value":68,"deprecated":false,"description":"Performs the planting action for any plant based machinery"},"PlantEfficiency1":{"value":52,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency2":{"value":53,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency3":{"value":54,"deprecated":true,"description":"DEPRECATED"},"PlantEfficiency4":{"value":55,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth1":{"value":48,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth2":{"value":49,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth3":{"value":50,"deprecated":true,"description":"DEPRECATED"},"PlantGrowth4":{"value":51,"deprecated":true,"description":"DEPRECATED"},"PlantHash1":{"value":56,"deprecated":true,"description":"DEPRECATED"},"PlantHash2":{"value":57,"deprecated":true,"description":"DEPRECATED"},"PlantHash3":{"value":58,"deprecated":true,"description":"DEPRECATED"},"PlantHash4":{"value":59,"deprecated":true,"description":"DEPRECATED"},"PlantHealth1":{"value":44,"deprecated":true,"description":"DEPRECATED"},"PlantHealth2":{"value":45,"deprecated":true,"description":"DEPRECATED"},"PlantHealth3":{"value":46,"deprecated":true,"description":"DEPRECATED"},"PlantHealth4":{"value":47,"deprecated":true,"description":"DEPRECATED"},"PositionX":{"value":76,"deprecated":false,"description":"The current position in X dimension in world coordinates"},"PositionY":{"value":77,"deprecated":false,"description":"The current position in Y dimension in world coordinates"},"PositionZ":{"value":78,"deprecated":false,"description":"The current position in Z dimension in world coordinates"},"Power":{"value":1,"deprecated":false,"description":"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":{"value":26,"deprecated":false,"description":"How much energy the device or network is actually using"},"PowerGeneration":{"value":65,"deprecated":false,"description":"Returns how much power is being generated"},"PowerPotential":{"value":25,"deprecated":false,"description":"How much energy the device or network potentially provides"},"PowerRequired":{"value":36,"deprecated":false,"description":"Power requested from the device and/or network"},"PrefabHash":{"value":84,"deprecated":false,"description":"The hash of the structure"},"Pressure":{"value":5,"deprecated":false,"description":"The current pressure reading of the device"},"PressureEfficiency":{"value":152,"deprecated":false,"description":"How the pressure of the input pipe and waste pipe effect the machines efficiency"},"PressureExternal":{"value":7,"deprecated":false,"description":"Setting for external pressure safety, in KPa"},"PressureInput":{"value":106,"deprecated":false,"description":"The current pressure reading of the device's Input Network"},"PressureInput2":{"value":116,"deprecated":false,"description":"The current pressure reading of the device's Input2 Network"},"PressureInternal":{"value":8,"deprecated":false,"description":"Setting for internal pressure safety, in KPa"},"PressureOutput":{"value":126,"deprecated":false,"description":"The current pressure reading of the device's Output Network"},"PressureOutput2":{"value":136,"deprecated":false,"description":"The current pressure reading of the device's Output2 Network"},"PressureSetting":{"value":71,"deprecated":false,"description":"The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa"},"Progress":{"value":214,"deprecated":false,"description":"Progress of the rocket to the next node on the map expressed as a value between 0-1."},"Quantity":{"value":27,"deprecated":false,"description":"Total quantity on the device"},"Ratio":{"value":24,"deprecated":false,"description":"Context specific value depending on device, 0 to 1 based ratio"},"RatioCarbonDioxide":{"value":15,"deprecated":false,"description":"The ratio of Carbon Dioxide in device atmosphere"},"RatioCarbonDioxideInput":{"value":109,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's input network"},"RatioCarbonDioxideInput2":{"value":119,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Input2 network"},"RatioCarbonDioxideOutput":{"value":129,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output network"},"RatioCarbonDioxideOutput2":{"value":139,"deprecated":false,"description":"The ratio of Carbon Dioxide in device's Output2 network"},"RatioHydrogen":{"value":252,"deprecated":false,"description":"The ratio of Hydrogen in device's Atmopshere"},"RatioLiquidCarbonDioxide":{"value":199,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Atmosphere"},"RatioLiquidCarbonDioxideInput":{"value":200,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input Atmosphere"},"RatioLiquidCarbonDioxideInput2":{"value":201,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere"},"RatioLiquidCarbonDioxideOutput":{"value":202,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere"},"RatioLiquidCarbonDioxideOutput2":{"value":203,"deprecated":false,"description":"The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere"},"RatioLiquidHydrogen":{"value":253,"deprecated":false,"description":"The ratio of Liquid Hydrogen in device's Atmopshere"},"RatioLiquidNitrogen":{"value":177,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device atmosphere"},"RatioLiquidNitrogenInput":{"value":178,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's input network"},"RatioLiquidNitrogenInput2":{"value":179,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Input2 network"},"RatioLiquidNitrogenOutput":{"value":180,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output network"},"RatioLiquidNitrogenOutput2":{"value":181,"deprecated":false,"description":"The ratio of Liquid Nitrogen in device's Output2 network"},"RatioLiquidNitrousOxide":{"value":209,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Atmosphere"},"RatioLiquidNitrousOxideInput":{"value":210,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input Atmosphere"},"RatioLiquidNitrousOxideInput2":{"value":211,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere"},"RatioLiquidNitrousOxideOutput":{"value":212,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere"},"RatioLiquidNitrousOxideOutput2":{"value":213,"deprecated":false,"description":"The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere"},"RatioLiquidOxygen":{"value":183,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Atmosphere"},"RatioLiquidOxygenInput":{"value":184,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input Atmosphere"},"RatioLiquidOxygenInput2":{"value":185,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Input2 Atmosphere"},"RatioLiquidOxygenOutput":{"value":186,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's device's Output Atmosphere"},"RatioLiquidOxygenOutput2":{"value":187,"deprecated":false,"description":"The ratio of Liquid Oxygen in device's Output2 Atmopshere"},"RatioLiquidPollutant":{"value":204,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Atmosphere"},"RatioLiquidPollutantInput":{"value":205,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input Atmosphere"},"RatioLiquidPollutantInput2":{"value":206,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Input2 Atmosphere"},"RatioLiquidPollutantOutput":{"value":207,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's device's Output Atmosphere"},"RatioLiquidPollutantOutput2":{"value":208,"deprecated":false,"description":"The ratio of Liquid Pollutant in device's Output2 Atmopshere"},"RatioLiquidVolatiles":{"value":188,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Atmosphere"},"RatioLiquidVolatilesInput":{"value":189,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input Atmosphere"},"RatioLiquidVolatilesInput2":{"value":190,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Input2 Atmosphere"},"RatioLiquidVolatilesOutput":{"value":191,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's device's Output Atmosphere"},"RatioLiquidVolatilesOutput2":{"value":192,"deprecated":false,"description":"The ratio of Liquid Volatiles in device's Output2 Atmopshere"},"RatioNitrogen":{"value":16,"deprecated":false,"description":"The ratio of nitrogen in device atmosphere"},"RatioNitrogenInput":{"value":110,"deprecated":false,"description":"The ratio of nitrogen in device's input network"},"RatioNitrogenInput2":{"value":120,"deprecated":false,"description":"The ratio of nitrogen in device's Input2 network"},"RatioNitrogenOutput":{"value":130,"deprecated":false,"description":"The ratio of nitrogen in device's Output network"},"RatioNitrogenOutput2":{"value":140,"deprecated":false,"description":"The ratio of nitrogen in device's Output2 network"},"RatioNitrousOxide":{"value":83,"deprecated":false,"description":"The ratio of Nitrous Oxide in device atmosphere"},"RatioNitrousOxideInput":{"value":114,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's input network"},"RatioNitrousOxideInput2":{"value":124,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Input2 network"},"RatioNitrousOxideOutput":{"value":134,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output network"},"RatioNitrousOxideOutput2":{"value":144,"deprecated":false,"description":"The ratio of Nitrous Oxide in device's Output2 network"},"RatioOxygen":{"value":14,"deprecated":false,"description":"The ratio of oxygen in device atmosphere"},"RatioOxygenInput":{"value":108,"deprecated":false,"description":"The ratio of oxygen in device's input network"},"RatioOxygenInput2":{"value":118,"deprecated":false,"description":"The ratio of oxygen in device's Input2 network"},"RatioOxygenOutput":{"value":128,"deprecated":false,"description":"The ratio of oxygen in device's Output network"},"RatioOxygenOutput2":{"value":138,"deprecated":false,"description":"The ratio of oxygen in device's Output2 network"},"RatioPollutant":{"value":17,"deprecated":false,"description":"The ratio of pollutant in device atmosphere"},"RatioPollutantInput":{"value":111,"deprecated":false,"description":"The ratio of pollutant in device's input network"},"RatioPollutantInput2":{"value":121,"deprecated":false,"description":"The ratio of pollutant in device's Input2 network"},"RatioPollutantOutput":{"value":131,"deprecated":false,"description":"The ratio of pollutant in device's Output network"},"RatioPollutantOutput2":{"value":141,"deprecated":false,"description":"The ratio of pollutant in device's Output2 network"},"RatioPollutedWater":{"value":254,"deprecated":false,"description":"The ratio of polluted water in device atmosphere"},"RatioSteam":{"value":193,"deprecated":false,"description":"The ratio of Steam in device's Atmosphere"},"RatioSteamInput":{"value":194,"deprecated":false,"description":"The ratio of Steam in device's Input Atmosphere"},"RatioSteamInput2":{"value":195,"deprecated":false,"description":"The ratio of Steam in device's Input2 Atmosphere"},"RatioSteamOutput":{"value":196,"deprecated":false,"description":"The ratio of Steam in device's device's Output Atmosphere"},"RatioSteamOutput2":{"value":197,"deprecated":false,"description":"The ratio of Steam in device's Output2 Atmopshere"},"RatioVolatiles":{"value":18,"deprecated":false,"description":"The ratio of volatiles in device atmosphere"},"RatioVolatilesInput":{"value":112,"deprecated":false,"description":"The ratio of volatiles in device's input network"},"RatioVolatilesInput2":{"value":122,"deprecated":false,"description":"The ratio of volatiles in device's Input2 network"},"RatioVolatilesOutput":{"value":132,"deprecated":false,"description":"The ratio of volatiles in device's Output network"},"RatioVolatilesOutput2":{"value":142,"deprecated":false,"description":"The ratio of volatiles in device's Output2 network"},"RatioWater":{"value":19,"deprecated":false,"description":"The ratio of water in device atmosphere"},"RatioWaterInput":{"value":113,"deprecated":false,"description":"The ratio of water in device's input network"},"RatioWaterInput2":{"value":123,"deprecated":false,"description":"The ratio of water in device's Input2 network"},"RatioWaterOutput":{"value":133,"deprecated":false,"description":"The ratio of water in device's Output network"},"RatioWaterOutput2":{"value":143,"deprecated":false,"description":"The ratio of water in device's Output2 network"},"ReEntryAltitude":{"value":237,"deprecated":false,"description":"The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km"},"Reagents":{"value":13,"deprecated":false,"description":"Total number of reagents recorded by the device"},"RecipeHash":{"value":41,"deprecated":false,"description":"Current hash of the recipe the device is set to produce"},"ReferenceId":{"value":217,"deprecated":false,"description":"Unique Reference Identifier for this object"},"RequestHash":{"value":60,"deprecated":false,"description":"When set to the unique identifier, requests an item of the provided type from the device"},"RequiredPower":{"value":33,"deprecated":false,"description":"Idle operating power quantity, does not necessarily include extra demand power"},"ReturnFuelCost":{"value":100,"deprecated":false,"description":"Gets the fuel remaining in your rocket's fuel tank."},"Richness":{"value":263,"deprecated":false,"description":"The richness of the rocket's target site's mine-able deposit."},"Rpm":{"value":155,"deprecated":false,"description":"The number of revolutions per minute that the device's spinning mechanism is doing"},"SemiMajorAxis":{"value":248,"deprecated":false,"description":"The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit."},"Setting":{"value":12,"deprecated":false,"description":"A variable setting that can be read or written, depending on the device"},"SettingInput":{"value":91,"deprecated":false,"description":""},"SettingOutput":{"value":92,"deprecated":false,"description":""},"SignalID":{"value":87,"deprecated":false,"description":"Returns the contact ID of the strongest signal from this Satellite"},"SignalStrength":{"value":86,"deprecated":false,"description":"Returns the degree offset of the strongest contact"},"Sites":{"value":260,"deprecated":false,"description":"The number of Sites that have been discovered at the rockets target Space Map location."},"Size":{"value":264,"deprecated":false,"description":"The size of the rocket's target site's mine-able deposit."},"SizeX":{"value":160,"deprecated":false,"description":"Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeY":{"value":161,"deprecated":false,"description":"Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)"},"SizeZ":{"value":162,"deprecated":false,"description":"Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)"},"SolarAngle":{"value":22,"deprecated":false,"description":"Solar angle of the device"},"SolarIrradiance":{"value":176,"deprecated":false,"description":""},"SoundAlert":{"value":175,"deprecated":false,"description":"Plays a sound alert on the devices speaker"},"Stress":{"value":156,"deprecated":false,"description":"Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down"},"Survey":{"value":257,"deprecated":false,"description":"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."},"TargetPadIndex":{"value":158,"deprecated":false,"description":"The index of the trader landing pad on this devices data network that it will try to call a trader in to land"},"TargetX":{"value":88,"deprecated":false,"description":"The target position in X dimension in world coordinates"},"TargetY":{"value":89,"deprecated":false,"description":"The target position in Y dimension in world coordinates"},"TargetZ":{"value":90,"deprecated":false,"description":"The target position in Z dimension in world coordinates"},"Temperature":{"value":6,"deprecated":false,"description":"The current temperature reading of the device"},"TemperatureDifferentialEfficiency":{"value":151,"deprecated":false,"description":"How the difference between the input pipe and waste pipe temperatures effect the machines efficiency"},"TemperatureExternal":{"value":73,"deprecated":false,"description":"The temperature of the outside of the device, usually the world atmosphere surrounding it"},"TemperatureInput":{"value":107,"deprecated":false,"description":"The current temperature reading of the device's Input Network"},"TemperatureInput2":{"value":117,"deprecated":false,"description":"The current temperature reading of the device's Input2 Network"},"TemperatureOutput":{"value":127,"deprecated":false,"description":"The current temperature reading of the device's Output Network"},"TemperatureOutput2":{"value":137,"deprecated":false,"description":"The current temperature reading of the device's Output2 Network"},"TemperatureSetting":{"value":72,"deprecated":false,"description":"The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)"},"Throttle":{"value":154,"deprecated":false,"description":"Increases the rate at which the machine works (range: 0-100)"},"Thrust":{"value":221,"deprecated":false,"description":"Total current thrust of all rocket engines on the rocket in Newtons."},"ThrustToWeight":{"value":223,"deprecated":false,"description":"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":{"value":102,"deprecated":false,"description":"Time"},"TimeToDestination":{"value":224,"deprecated":false,"description":"Estimated time in seconds until rocket arrives at target destination."},"TotalMoles":{"value":66,"deprecated":false,"description":"Returns the total moles of the device"},"TotalMolesInput":{"value":115,"deprecated":false,"description":"Returns the total moles of the device's Input Network"},"TotalMolesInput2":{"value":125,"deprecated":false,"description":"Returns the total moles of the device's Input2 Network"},"TotalMolesOutput":{"value":135,"deprecated":false,"description":"Returns the total moles of the device's Output Network"},"TotalMolesOutput2":{"value":145,"deprecated":false,"description":"Returns the total moles of the device's Output2 Network"},"TotalQuantity":{"value":265,"deprecated":false,"description":"The estimated total quantity of resources available to mine at the rocket's target Space Map Site."},"TrueAnomaly":{"value":251,"deprecated":false,"description":"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)."},"VelocityMagnitude":{"value":79,"deprecated":false,"description":"The current magnitude of the velocity vector"},"VelocityRelativeX":{"value":80,"deprecated":false,"description":"The current velocity X relative to the forward vector of this"},"VelocityRelativeY":{"value":81,"deprecated":false,"description":"The current velocity Y relative to the forward vector of this"},"VelocityRelativeZ":{"value":82,"deprecated":false,"description":"The current velocity Z relative to the forward vector of this"},"VelocityX":{"value":231,"deprecated":false,"description":"The world velocity of the entity in the X axis"},"VelocityY":{"value":232,"deprecated":false,"description":"The world velocity of the entity in the Y axis"},"VelocityZ":{"value":233,"deprecated":false,"description":"The world velocity of the entity in the Z axis"},"Vertical":{"value":21,"deprecated":false,"description":"Vertical setting of the device"},"VerticalRatio":{"value":35,"deprecated":false,"description":"Radio of vertical setting for device"},"Volume":{"value":67,"deprecated":false,"description":"Returns the device atmosphere volume"},"VolumeOfLiquid":{"value":182,"deprecated":false,"description":"The total volume of all liquids in Liters in the atmosphere"},"WattsReachingContact":{"value":164,"deprecated":false,"description":"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":{"value":222,"deprecated":false,"description":"Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity."},"WorkingGasEfficiency":{"value":105,"deprecated":false,"description":"The Working Gas Efficiency reported by the machine, as a float between 0 and 1"}}},"PowerMode":{"enumName":"PowerMode","values":{"Charged":{"value":4,"deprecated":false,"description":""},"Charging":{"value":3,"deprecated":false,"description":""},"Discharged":{"value":1,"deprecated":false,"description":""},"Discharging":{"value":2,"deprecated":false,"description":""},"Idle":{"value":0,"deprecated":false,"description":""}}},"PrinterInstruction":{"enumName":"PrinterInstruction","values":{"DeviceSetLock":{"value":6,"deprecated":false,"description":""},"EjectAllReagents":{"value":8,"deprecated":false,"description":""},"EjectReagent":{"value":7,"deprecated":false,"description":""},"ExecuteRecipe":{"value":2,"deprecated":false,"description":""},"JumpIfNextInvalid":{"value":4,"deprecated":false,"description":""},"JumpToAddress":{"value":5,"deprecated":false,"description":""},"MissingRecipeReagent":{"value":9,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"StackPointer":{"value":1,"deprecated":false,"description":""},"WaitUntilNextValid":{"value":3,"deprecated":false,"description":""}}},"ReEntryProfile":{"enumName":"ReEntryProfile","values":{"High":{"value":3,"deprecated":false,"description":""},"Max":{"value":4,"deprecated":false,"description":""},"Medium":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Optimal":{"value":1,"deprecated":false,"description":""}}},"RobotMode":{"enumName":"RobotMode","values":{"Follow":{"value":1,"deprecated":false,"description":""},"MoveToTarget":{"value":2,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"PathToTarget":{"value":5,"deprecated":false,"description":""},"Roam":{"value":3,"deprecated":false,"description":""},"StorageFull":{"value":6,"deprecated":false,"description":""},"Unload":{"value":4,"deprecated":false,"description":""}}},"RocketMode":{"enumName":"RocketMode","values":{"Chart":{"value":5,"deprecated":false,"description":""},"Discover":{"value":4,"deprecated":false,"description":""},"Invalid":{"value":0,"deprecated":false,"description":""},"Mine":{"value":2,"deprecated":false,"description":""},"None":{"value":1,"deprecated":false,"description":""},"Survey":{"value":3,"deprecated":false,"description":""}}},"SlotClass":{"enumName":"Class","values":{"AccessCard":{"value":22,"deprecated":false,"description":""},"Appliance":{"value":18,"deprecated":false,"description":""},"Back":{"value":3,"deprecated":false,"description":""},"Battery":{"value":14,"deprecated":false,"description":""},"Belt":{"value":16,"deprecated":false,"description":""},"Blocked":{"value":38,"deprecated":false,"description":""},"Bottle":{"value":25,"deprecated":false,"description":""},"Cartridge":{"value":21,"deprecated":false,"description":""},"Circuit":{"value":24,"deprecated":false,"description":""},"Circuitboard":{"value":7,"deprecated":false,"description":""},"CreditCard":{"value":28,"deprecated":false,"description":""},"DataDisk":{"value":8,"deprecated":false,"description":""},"DirtCanister":{"value":29,"deprecated":false,"description":""},"DrillHead":{"value":35,"deprecated":false,"description":""},"Egg":{"value":15,"deprecated":false,"description":""},"Entity":{"value":13,"deprecated":false,"description":""},"Flare":{"value":37,"deprecated":false,"description":""},"GasCanister":{"value":5,"deprecated":false,"description":""},"GasFilter":{"value":4,"deprecated":false,"description":""},"Glasses":{"value":27,"deprecated":false,"description":""},"Helmet":{"value":1,"deprecated":false,"description":""},"Ingot":{"value":19,"deprecated":false,"description":""},"LiquidBottle":{"value":32,"deprecated":false,"description":""},"LiquidCanister":{"value":31,"deprecated":false,"description":""},"Magazine":{"value":23,"deprecated":false,"description":""},"Motherboard":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"Ore":{"value":10,"deprecated":false,"description":""},"Organ":{"value":9,"deprecated":false,"description":""},"Plant":{"value":11,"deprecated":false,"description":""},"ProgrammableChip":{"value":26,"deprecated":false,"description":""},"ScanningHead":{"value":36,"deprecated":false,"description":""},"SensorProcessingUnit":{"value":30,"deprecated":false,"description":""},"SoundCartridge":{"value":34,"deprecated":false,"description":""},"Suit":{"value":2,"deprecated":false,"description":""},"SuitMod":{"value":39,"deprecated":false,"description":""},"Tool":{"value":17,"deprecated":false,"description":""},"Torpedo":{"value":20,"deprecated":false,"description":""},"Uniform":{"value":12,"deprecated":false,"description":""},"Wreckage":{"value":33,"deprecated":false,"description":""}}},"SorterInstruction":{"enumName":"SorterInstruction","values":{"FilterPrefabHashEquals":{"value":1,"deprecated":false,"description":""},"FilterPrefabHashNotEquals":{"value":2,"deprecated":false,"description":""},"FilterQuantityCompare":{"value":5,"deprecated":false,"description":""},"FilterSlotTypeCompare":{"value":4,"deprecated":false,"description":""},"FilterSortingClassCompare":{"value":3,"deprecated":false,"description":""},"LimitNextExecutionByCount":{"value":6,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""}}},"SortingClass":{"enumName":"SortingClass","values":{"Appliances":{"value":6,"deprecated":false,"description":""},"Atmospherics":{"value":7,"deprecated":false,"description":""},"Clothing":{"value":5,"deprecated":false,"description":""},"Default":{"value":0,"deprecated":false,"description":""},"Food":{"value":4,"deprecated":false,"description":""},"Ices":{"value":10,"deprecated":false,"description":""},"Kits":{"value":1,"deprecated":false,"description":""},"Ores":{"value":9,"deprecated":false,"description":""},"Resources":{"value":3,"deprecated":false,"description":""},"Storage":{"value":8,"deprecated":false,"description":""},"Tools":{"value":2,"deprecated":false,"description":""}}},"Sound":{"enumName":"SoundAlert","values":{"AirlockCycling":{"value":22,"deprecated":false,"description":""},"Alarm1":{"value":45,"deprecated":false,"description":""},"Alarm10":{"value":12,"deprecated":false,"description":""},"Alarm11":{"value":13,"deprecated":false,"description":""},"Alarm12":{"value":14,"deprecated":false,"description":""},"Alarm2":{"value":1,"deprecated":false,"description":""},"Alarm3":{"value":2,"deprecated":false,"description":""},"Alarm4":{"value":3,"deprecated":false,"description":""},"Alarm5":{"value":4,"deprecated":false,"description":""},"Alarm6":{"value":5,"deprecated":false,"description":""},"Alarm7":{"value":6,"deprecated":false,"description":""},"Alarm8":{"value":10,"deprecated":false,"description":""},"Alarm9":{"value":11,"deprecated":false,"description":""},"Alert":{"value":17,"deprecated":false,"description":""},"Danger":{"value":15,"deprecated":false,"description":""},"Depressurising":{"value":20,"deprecated":false,"description":""},"FireFireFire":{"value":28,"deprecated":false,"description":""},"Five":{"value":33,"deprecated":false,"description":""},"Floor":{"value":34,"deprecated":false,"description":""},"Four":{"value":32,"deprecated":false,"description":""},"HaltWhoGoesThere":{"value":27,"deprecated":false,"description":""},"HighCarbonDioxide":{"value":44,"deprecated":false,"description":""},"IntruderAlert":{"value":19,"deprecated":false,"description":""},"LiftOff":{"value":36,"deprecated":false,"description":""},"MalfunctionDetected":{"value":26,"deprecated":false,"description":""},"Music1":{"value":7,"deprecated":false,"description":""},"Music2":{"value":8,"deprecated":false,"description":""},"Music3":{"value":9,"deprecated":false,"description":""},"None":{"value":0,"deprecated":false,"description":""},"One":{"value":29,"deprecated":false,"description":""},"PollutantsDetected":{"value":43,"deprecated":false,"description":""},"PowerLow":{"value":23,"deprecated":false,"description":""},"PressureHigh":{"value":39,"deprecated":false,"description":""},"PressureLow":{"value":40,"deprecated":false,"description":""},"Pressurising":{"value":21,"deprecated":false,"description":""},"RocketLaunching":{"value":35,"deprecated":false,"description":""},"StormIncoming":{"value":18,"deprecated":false,"description":""},"SystemFailure":{"value":24,"deprecated":false,"description":""},"TemperatureHigh":{"value":41,"deprecated":false,"description":""},"TemperatureLow":{"value":42,"deprecated":false,"description":""},"Three":{"value":31,"deprecated":false,"description":""},"TraderIncoming":{"value":37,"deprecated":false,"description":""},"TraderLanded":{"value":38,"deprecated":false,"description":""},"Two":{"value":30,"deprecated":false,"description":""},"Warning":{"value":16,"deprecated":false,"description":""},"Welcome":{"value":25,"deprecated":false,"description":""}}},"TransmitterMode":{"enumName":"LogicTransmitterMode","values":{"Active":{"value":1,"deprecated":false,"description":""},"Passive":{"value":0,"deprecated":false,"description":""}}},"Vent":{"enumName":"VentDirection","values":{"Inward":{"value":1,"deprecated":false,"description":""},"Outward":{"value":0,"deprecated":false,"description":""}}},"_unnamed":{"enumName":"ConditionOperation","values":{"Equals":{"value":0,"deprecated":false,"description":""},"Greater":{"value":1,"deprecated":false,"description":""},"Less":{"value":2,"deprecated":false,"description":""},"NotEquals":{"value":3,"deprecated":false,"description":""}}}}},"prefabsByHash":{"-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","-1884103228":"SeedBag_SugarCane","-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","-1351081801":"StructureLargeHangerDoor","-1348105509":"ItemGoldOre","-1344601965":"ItemCannedMushroom","-1339716113":"AppliancePaintMixer","-1339479035":"AccessCardGray","-1337091041":"StructureChuteDigitalValveRight","-1335056202":"ItemSugarCane","-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","-1108244510":"ItemPlainCake","-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","-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","-261575861":"ItemChocolateCake","-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","234601764":"ItemChocolateBar","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","457286516":"ItemCocoaPowder","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","680051921":"ItemCocoaTree","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","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","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","860793245":"ItemChocolateCerealBar","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","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","1139887531":"SeedBag_Cocoa","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","2111910840":"ItemSugar","2130739600":"DynamicMKIILiquidCanisterEmpty","2131916219":"ItemSpaceOre","2133035682":"ItemKitStandardChute","2134172356":"StructureInsulatedPipeStraight","2134647745":"ItemLeadIngot","2145068424":"ItemGasCanisterNitrogen"},"structures":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","Flag_ODA_10m","Flag_ODA_4m","Flag_ODA_6m","Flag_ODA_8m","H2Combustor","KitchenTableShort","KitchenTableSimpleShort","KitchenTableSimpleTall","KitchenTableTall","Landingpad_2x2CenterPiece01","Landingpad_BlankPiece","Landingpad_CenterPiece01","Landingpad_CrossPiece","Landingpad_DataConnectionPiece","Landingpad_DiagonalPiece01","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_GasCylinderTankPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_StraightPiece01","Landingpad_TaxiPieceCorner","Landingpad_TaxiPieceHold","Landingpad_TaxiPieceStraight","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","RailingElegant01","RailingElegant02","RailingIndustrial02","RespawnPoint","RespawnPointWallMounted","Rover_MkI_build_states","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureBlocker","StructureCableAnalysizer","StructureCableCorner","StructureCableCorner3","StructureCableCorner3Burnt","StructureCableCorner3HBurnt","StructureCableCorner4","StructureCableCorner4Burnt","StructureCableCorner4HBurnt","StructureCableCornerBurnt","StructureCableCornerH","StructureCableCornerH3","StructureCableCornerH4","StructureCableCornerHBurnt","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCableJunction","StructureCableJunction4","StructureCableJunction4Burnt","StructureCableJunction4HBurnt","StructureCableJunction5","StructureCableJunction5Burnt","StructureCableJunction6","StructureCableJunction6Burnt","StructureCableJunction6HBurnt","StructureCableJunctionBurnt","StructureCableJunctionH","StructureCableJunctionH4","StructureCableJunctionH5","StructureCableJunctionH5Burnt","StructureCableJunctionH6","StructureCableJunctionHBurnt","StructureCableStraight","StructureCableStraightBurnt","StructureCableStraightH","StructureCableStraightHBurnt","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteCorner","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteFlipFlopSplitter","StructureChuteInlet","StructureChuteJunction","StructureChuteOutlet","StructureChuteOverflow","StructureChuteStraight","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureChuteValve","StructureChuteWindow","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeCladdingAngled","StructureCompositeCladdingAngledCorner","StructureCompositeCladdingAngledCornerInner","StructureCompositeCladdingAngledCornerInnerLong","StructureCompositeCladdingAngledCornerInnerLongL","StructureCompositeCladdingAngledCornerInnerLongR","StructureCompositeCladdingAngledCornerLong","StructureCompositeCladdingAngledCornerLongR","StructureCompositeCladdingAngledLong","StructureCompositeCladdingCylindrical","StructureCompositeCladdingCylindricalPanel","StructureCompositeCladdingPanel","StructureCompositeCladdingRounded","StructureCompositeCladdingRoundedCorner","StructureCompositeCladdingRoundedCornerInner","StructureCompositeCladdingSpherical","StructureCompositeCladdingSphericalCap","StructureCompositeCladdingSphericalCorner","StructureCompositeDoor","StructureCompositeFloorGrating","StructureCompositeFloorGrating2","StructureCompositeFloorGrating3","StructureCompositeFloorGrating4","StructureCompositeFloorGratingOpen","StructureCompositeFloorGratingOpenRotated","StructureCompositeWall","StructureCompositeWall02","StructureCompositeWall03","StructureCompositeWall04","StructureCompositeWindow","StructureCompositeWindowIron","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCrateMount","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEngineMountTypeA1","StructureEvaporationChamber","StructureExpansionValve","StructureFairingTypeA1","StructureFairingTypeA2","StructureFairingTypeA3","StructureFiltration","StructureFlagSmall","StructureFlashingLight","StructureFlatBench","StructureFloorDrain","StructureFrame","StructureFrameCorner","StructureFrameCornerCut","StructureFrameIron","StructureFrameSide","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureFuselageTypeA1","StructureFuselageTypeA2","StructureFuselageTypeA4","StructureFuselageTypeC5","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTray","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInLineTankGas1x1","StructureInLineTankGas1x2","StructureInLineTankLiquid1x1","StructureInLineTankLiquid1x2","StructureInsulatedInLineTankGas1x1","StructureInsulatedInLineTankGas1x2","StructureInsulatedInLineTankLiquid1x1","StructureInsulatedInLineTankLiquid1x2","StructureInsulatedPipeCorner","StructureInsulatedPipeCrossJunction","StructureInsulatedPipeCrossJunction3","StructureInsulatedPipeCrossJunction4","StructureInsulatedPipeCrossJunction5","StructureInsulatedPipeCrossJunction6","StructureInsulatedPipeLiquidCorner","StructureInsulatedPipeLiquidCrossJunction","StructureInsulatedPipeLiquidCrossJunction4","StructureInsulatedPipeLiquidCrossJunction5","StructureInsulatedPipeLiquidCrossJunction6","StructureInsulatedPipeLiquidStraight","StructureInsulatedPipeLiquidTJunction","StructureInsulatedPipeStraight","StructureInsulatedPipeTJunction","StructureInsulatedTankConnector","StructureInsulatedTankConnectorLiquid","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLadder","StructureLadderEnd","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLaunchMount","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassiveVent","StructurePassiveVentInsulated","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePictureFrameThickLandscapeLarge","StructurePictureFrameThickLandscapeSmall","StructurePictureFrameThickMountLandscapeLarge","StructurePictureFrameThickMountLandscapeSmall","StructurePictureFrameThickMountPortraitLarge","StructurePictureFrameThickMountPortraitSmall","StructurePictureFrameThickPortraitLarge","StructurePictureFrameThickPortraitSmall","StructurePictureFrameThinLandscapeLarge","StructurePictureFrameThinLandscapeSmall","StructurePictureFrameThinMountLandscapeLarge","StructurePictureFrameThinMountLandscapeSmall","StructurePictureFrameThinMountPortraitLarge","StructurePictureFrameThinMountPortraitSmall","StructurePictureFrameThinPortraitLarge","StructurePictureFrameThinPortraitSmall","StructurePipeAnalysizer","StructurePipeCorner","StructurePipeCowl","StructurePipeCrossJunction","StructurePipeCrossJunction3","StructurePipeCrossJunction4","StructurePipeCrossJunction5","StructurePipeCrossJunction6","StructurePipeHeater","StructurePipeIgniter","StructurePipeInsulatedLiquidCrossJunction","StructurePipeLabel","StructurePipeLiquidCorner","StructurePipeLiquidCrossJunction","StructurePipeLiquidCrossJunction3","StructurePipeLiquidCrossJunction4","StructurePipeLiquidCrossJunction5","StructurePipeLiquidCrossJunction6","StructurePipeLiquidStraight","StructurePipeLiquidTJunction","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeOrgan","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePipeStraight","StructurePipeTJunction","StructurePlanter","StructurePlatformLadderOpen","StructurePlinth","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRailing","StructureRecycler","StructureRefrigeratedVendingMachine","StructureReinforcedCompositeWindow","StructureReinforcedCompositeWindowSteel","StructureReinforcedWallPaddedWindow","StructureReinforcedWallPaddedWindowThin","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTower","StructureRocketTransformerSmall","StructureRover","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelf","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSmallTableBacklessDouble","StructureSmallTableBacklessSingle","StructureSmallTableDinnerSingle","StructureSmallTableRectangleDouble","StructureSmallTableRectangleSingle","StructureSmallTableThickDouble","StructureSmallTableThickSingle","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStairs4x2","StructureStairs4x2RailL","StructureStairs4x2RailR","StructureStairs4x2Rails","StructureStairwellBackLeft","StructureStairwellBackPassthrough","StructureStairwellBackRight","StructureStairwellFrontLeft","StructureStairwellFrontPassthrough","StructureStairwellFrontRight","StructureStairwellNoDoors","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankConnector","StructureTankConnectorLiquid","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTorpedoRack","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallArch","StructureWallArchArrow","StructureWallArchCornerRound","StructureWallArchCornerSquare","StructureWallArchCornerTriangle","StructureWallArchPlating","StructureWallArchTwoTone","StructureWallCooler","StructureWallFlat","StructureWallFlatCornerRound","StructureWallFlatCornerSquare","StructureWallFlatCornerTriangle","StructureWallFlatCornerTriangleFlat","StructureWallGeometryCorner","StructureWallGeometryStreight","StructureWallGeometryT","StructureWallGeometryTMirrored","StructureWallHeater","StructureWallIron","StructureWallIron02","StructureWallIron03","StructureWallIron04","StructureWallLargePanel","StructureWallLargePanelArrow","StructureWallLight","StructureWallLightBattery","StructureWallPaddedArch","StructureWallPaddedArchCorner","StructureWallPaddedArchLightFittingTop","StructureWallPaddedArchLightsFittings","StructureWallPaddedCorner","StructureWallPaddedCornerThin","StructureWallPaddedNoBorder","StructureWallPaddedNoBorderCorner","StructureWallPaddedThinNoBorder","StructureWallPaddedThinNoBorderCorner","StructureWallPaddedWindow","StructureWallPaddedWindowThin","StructureWallPadding","StructureWallPaddingArchVent","StructureWallPaddingLightFitting","StructureWallPaddingThin","StructureWallPlating","StructureWallSmallPanelsAndHatch","StructureWallSmallPanelsArrow","StructureWallSmallPanelsMonoChrome","StructureWallSmallPanelsOpen","StructureWallSmallPanelsTwoTone","StructureWallVent","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"devices":["CompositeRollCover","DeviceLfoVolume","DeviceStepUnit","H2Combustor","Landingpad_DataConnectionPiece","Landingpad_GasConnectorInwardPiece","Landingpad_GasConnectorOutwardPiece","Landingpad_LiquidConnectorInwardPiece","Landingpad_LiquidConnectorOutwardPiece","Landingpad_ThreshholdPiece","LogicStepSequencer8","PassiveSpeaker","StopWatch","StructureAccessBridge","StructureActiveVent","StructureAdvancedComposter","StructureAdvancedFurnace","StructureAdvancedPackagingMachine","StructureAirConditioner","StructureAirlock","StructureAirlockGate","StructureAngledBench","StructureArcFurnace","StructureAreaPowerControl","StructureAreaPowerControlReversed","StructureAutoMinerSmall","StructureAutolathe","StructureAutomatedOven","StructureBackLiquidPressureRegulator","StructureBackPressureRegulator","StructureBasketHoop","StructureBattery","StructureBatteryCharger","StructureBatteryChargerSmall","StructureBatteryLarge","StructureBatteryMedium","StructureBatterySmall","StructureBeacon","StructureBench","StructureBench1","StructureBench2","StructureBench3","StructureBench4","StructureBlastDoor","StructureBlockBed","StructureCableAnalysizer","StructureCableFuse100k","StructureCableFuse1k","StructureCableFuse50k","StructureCableFuse5k","StructureCamera","StructureCapsuleTankGas","StructureCapsuleTankLiquid","StructureCargoStorageMedium","StructureCargoStorageSmall","StructureCentrifuge","StructureChair","StructureChairBacklessDouble","StructureChairBacklessSingle","StructureChairBoothCornerLeft","StructureChairBoothMiddle","StructureChairRectangleDouble","StructureChairRectangleSingle","StructureChairThickDouble","StructureChairThickSingle","StructureChuteBin","StructureChuteDigitalFlipFlopSplitterLeft","StructureChuteDigitalFlipFlopSplitterRight","StructureChuteDigitalValveLeft","StructureChuteDigitalValveRight","StructureChuteInlet","StructureChuteOutlet","StructureChuteUmbilicalFemale","StructureChuteUmbilicalFemaleSide","StructureChuteUmbilicalMale","StructureCircuitHousing","StructureCombustionCentrifuge","StructureCompositeDoor","StructureComputer","StructureCondensationChamber","StructureCondensationValve","StructureConsole","StructureConsoleDual","StructureConsoleLED1x2","StructureConsoleLED1x3","StructureConsoleLED5","StructureConsoleMonitor","StructureControlChair","StructureCornerLocker","StructureCryoTube","StructureCryoTubeHorizontal","StructureCryoTubeVertical","StructureDaylightSensor","StructureDeepMiner","StructureDigitalValve","StructureDiode","StructureDiodeSlide","StructureDockPortSide","StructureDrinkingFountain","StructureElectrolyzer","StructureElectronicsPrinter","StructureElevatorLevelFront","StructureElevatorLevelIndustrial","StructureElevatorShaft","StructureElevatorShaftIndustrial","StructureEmergencyButton","StructureEvaporationChamber","StructureExpansionValve","StructureFiltration","StructureFlashingLight","StructureFlatBench","StructureFridgeBig","StructureFridgeSmall","StructureFurnace","StructureGasGenerator","StructureGasMixer","StructureGasSensor","StructureGasTankStorage","StructureGasUmbilicalFemale","StructureGasUmbilicalFemaleSide","StructureGasUmbilicalMale","StructureGlassDoor","StructureGovernedGasEngine","StructureGroundBasedTelescope","StructureGrowLight","StructureHarvie","StructureHeatExchangeLiquidtoGas","StructureHeatExchangerGastoGas","StructureHeatExchangerLiquidtoLiquid","StructureHorizontalAutoMiner","StructureHydraulicPipeBender","StructureHydroponicsStation","StructureHydroponicsTrayData","StructureIceCrusher","StructureIgniter","StructureInteriorDoorGlass","StructureInteriorDoorPadded","StructureInteriorDoorPaddedThin","StructureInteriorDoorTriangle","StructureKlaxon","StructureLargeDirectHeatExchangeGastoGas","StructureLargeDirectHeatExchangeGastoLiquid","StructureLargeDirectHeatExchangeLiquidtoLiquid","StructureLargeExtendableRadiator","StructureLargeHangerDoor","StructureLargeSatelliteDish","StructureLightLong","StructureLightLongAngled","StructureLightLongWide","StructureLightRound","StructureLightRoundAngled","StructureLightRoundSmall","StructureLiquidDrain","StructureLiquidPipeAnalyzer","StructureLiquidPipeHeater","StructureLiquidPipeOneWayValve","StructureLiquidPipeRadiator","StructureLiquidPressureRegulator","StructureLiquidTankBig","StructureLiquidTankBigInsulated","StructureLiquidTankSmall","StructureLiquidTankSmallInsulated","StructureLiquidTankStorage","StructureLiquidTurboVolumePump","StructureLiquidUmbilicalFemale","StructureLiquidUmbilicalFemaleSide","StructureLiquidUmbilicalMale","StructureLiquidValve","StructureLiquidVolumePump","StructureLockerSmall","StructureLogicBatchReader","StructureLogicBatchSlotReader","StructureLogicBatchWriter","StructureLogicButton","StructureLogicCompare","StructureLogicDial","StructureLogicGate","StructureLogicHashGen","StructureLogicMath","StructureLogicMathUnary","StructureLogicMemory","StructureLogicMinMax","StructureLogicMirror","StructureLogicReader","StructureLogicReagentReader","StructureLogicRocketDownlink","StructureLogicRocketUplink","StructureLogicSelect","StructureLogicSlotReader","StructureLogicSorter","StructureLogicSwitch","StructureLogicSwitch2","StructureLogicTransmitter","StructureLogicWriter","StructureLogicWriterSwitch","StructureManualHatch","StructureMediumConvectionRadiator","StructureMediumConvectionRadiatorLiquid","StructureMediumHangerDoor","StructureMediumRadiator","StructureMediumRadiatorLiquid","StructureMediumRocketGasFuelTank","StructureMediumRocketLiquidFuelTank","StructureMotionSensor","StructureNitrolyzer","StructureOccupancySensor","StructureOverheadShortCornerLocker","StructureOverheadShortLocker","StructurePassiveLargeRadiatorGas","StructurePassiveLargeRadiatorLiquid","StructurePassiveLiquidDrain","StructurePassthroughHeatExchangerGasToGas","StructurePassthroughHeatExchangerGasToLiquid","StructurePassthroughHeatExchangerLiquidToLiquid","StructurePipeAnalysizer","StructurePipeHeater","StructurePipeIgniter","StructurePipeLabel","StructurePipeMeter","StructurePipeOneWayValve","StructurePipeRadiator","StructurePipeRadiatorFlat","StructurePipeRadiatorFlatLiquid","StructurePortablesConnector","StructurePowerConnector","StructurePowerTransmitter","StructurePowerTransmitterOmni","StructurePowerTransmitterReceiver","StructurePowerUmbilicalFemale","StructurePowerUmbilicalFemaleSide","StructurePowerUmbilicalMale","StructurePoweredVent","StructurePoweredVentLarge","StructurePressurantValve","StructurePressureFedGasEngine","StructurePressureFedLiquidEngine","StructurePressurePlateLarge","StructurePressurePlateMedium","StructurePressurePlateSmall","StructurePressureRegulator","StructureProximitySensor","StructurePumpedLiquidEngine","StructurePurgeValve","StructureRecycler","StructureRefrigeratedVendingMachine","StructureRocketAvionics","StructureRocketCelestialTracker","StructureRocketCircuitHousing","StructureRocketEngineTiny","StructureRocketManufactory","StructureRocketMiner","StructureRocketScanner","StructureRocketTransformerSmall","StructureSDBHopper","StructureSDBHopperAdvanced","StructureSDBSilo","StructureSatelliteDish","StructureSecurityPrinter","StructureShelfMedium","StructureShortCornerLocker","StructureShortLocker","StructureShower","StructureShowerPowered","StructureSign1x1","StructureSign2x1","StructureSingleBed","StructureSleeper","StructureSleeperLeft","StructureSleeperRight","StructureSleeperVertical","StructureSleeperVerticalDroid","StructureSmallDirectHeatExchangeGastoGas","StructureSmallDirectHeatExchangeLiquidtoGas","StructureSmallDirectHeatExchangeLiquidtoLiquid","StructureSmallSatelliteDish","StructureSolarPanel","StructureSolarPanel45","StructureSolarPanel45Reinforced","StructureSolarPanelDual","StructureSolarPanelDualReinforced","StructureSolarPanelFlat","StructureSolarPanelFlatReinforced","StructureSolarPanelReinforced","StructureSolidFuelGenerator","StructureSorter","StructureStacker","StructureStackerReverse","StructureStirlingEngine","StructureStorageLocker","StructureSuitStorage","StructureTankBig","StructureTankBigInsulated","StructureTankSmall","StructureTankSmallAir","StructureTankSmallFuel","StructureTankSmallInsulated","StructureToolManufactory","StructureTraderWaypoint","StructureTransformer","StructureTransformerMedium","StructureTransformerMediumReversed","StructureTransformerSmall","StructureTransformerSmallReversed","StructureTurbineGenerator","StructureTurboVolumePump","StructureUnloader","StructureUprightWindTurbine","StructureValve","StructureVendingMachine","StructureVolumePump","StructureWallCooler","StructureWallHeater","StructureWallLight","StructureWallLightBattery","StructureWaterBottleFiller","StructureWaterBottleFillerBottom","StructureWaterBottleFillerPowered","StructureWaterBottleFillerPoweredBottom","StructureWaterDigitalValve","StructureWaterPipeMeter","StructureWaterPurifier","StructureWaterWallCooler","StructureWeatherStation","StructureWindTurbine","StructureWindowShutter"],"items":["AccessCardBlack","AccessCardBlue","AccessCardBrown","AccessCardGray","AccessCardGreen","AccessCardKhaki","AccessCardOrange","AccessCardPink","AccessCardPurple","AccessCardRed","AccessCardWhite","AccessCardYellow","ApplianceChemistryStation","ApplianceDeskLampLeft","ApplianceDeskLampRight","ApplianceMicrowave","AppliancePackagingMachine","AppliancePaintMixer","AppliancePlantGeneticAnalyzer","AppliancePlantGeneticSplicer","AppliancePlantGeneticStabilizer","ApplianceReagentProcessor","ApplianceSeedTray","ApplianceTabletDock","AutolathePrinterMod","Battery_Wireless_cell","Battery_Wireless_cell_Big","CardboardBox","CartridgeAccessController","CartridgeAtmosAnalyser","CartridgeConfiguration","CartridgeElectronicReader","CartridgeGPS","CartridgeGuide","CartridgeMedicalAnalyser","CartridgeNetworkAnalyser","CartridgeOreScanner","CartridgeOreScannerColor","CartridgePlantAnalyser","CartridgeTracker","CircuitboardAdvAirlockControl","CircuitboardAirControl","CircuitboardAirlockControl","CircuitboardCameraDisplay","CircuitboardDoorControl","CircuitboardGasDisplay","CircuitboardGraphDisplay","CircuitboardHashDisplay","CircuitboardModeControl","CircuitboardPowerControl","CircuitboardShipDisplay","CircuitboardSolarControl","CrateMkII","DecayedFood","DynamicAirConditioner","DynamicCrate","DynamicGPR","DynamicGasCanisterAir","DynamicGasCanisterCarbonDioxide","DynamicGasCanisterEmpty","DynamicGasCanisterFuel","DynamicGasCanisterNitrogen","DynamicGasCanisterNitrousOxide","DynamicGasCanisterOxygen","DynamicGasCanisterPollutants","DynamicGasCanisterRocketFuel","DynamicGasCanisterVolatiles","DynamicGasCanisterWater","DynamicGasTankAdvanced","DynamicGasTankAdvancedOxygen","DynamicGenerator","DynamicHydroponics","DynamicLight","DynamicLiquidCanisterEmpty","DynamicMKIILiquidCanisterEmpty","DynamicMKIILiquidCanisterWater","DynamicScrubber","DynamicSkeleton","ElectronicPrinterMod","ElevatorCarrage","EntityChick","EntityChickenBrown","EntityChickenWhite","EntityRoosterBlack","EntityRoosterBrown","Fertilizer","FireArmSMG","FlareGun","Handgun","HandgunMagazine","HumanSkull","ImGuiCircuitboardAirlockControl","ItemActiveVent","ItemAdhesiveInsulation","ItemAdvancedTablet","ItemAlienMushroom","ItemAmmoBox","ItemAngleGrinder","ItemArcWelder","ItemAreaPowerControl","ItemAstroloyIngot","ItemAstroloySheets","ItemAuthoringTool","ItemAuthoringToolRocketNetwork","ItemBasketBall","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBatteryCharger","ItemBatteryChargerSmall","ItemBeacon","ItemBiomass","ItemBreadLoaf","ItemCableAnalyser","ItemCableCoil","ItemCableCoilHeavy","ItemCableFuse","ItemCannedCondensedMilk","ItemCannedEdamame","ItemCannedMushroom","ItemCannedPowderedEggs","ItemCannedRicePudding","ItemCerealBar","ItemCharcoal","ItemChemLightBlue","ItemChemLightGreen","ItemChemLightRed","ItemChemLightWhite","ItemChemLightYellow","ItemChocolateBar","ItemChocolateCake","ItemChocolateCerealBar","ItemCoalOre","ItemCobaltOre","ItemCocoaPowder","ItemCocoaTree","ItemCoffeeMug","ItemConstantanIngot","ItemCookedCondensedMilk","ItemCookedCorn","ItemCookedMushroom","ItemCookedPowderedEggs","ItemCookedPumpkin","ItemCookedRice","ItemCookedSoybean","ItemCookedTomato","ItemCopperIngot","ItemCopperOre","ItemCorn","ItemCornSoup","ItemCreditCard","ItemCropHay","ItemCrowbar","ItemDataDisk","ItemDirtCanister","ItemDirtyOre","ItemDisposableBatteryCharger","ItemDrill","ItemDuctTape","ItemDynamicAirCon","ItemDynamicScrubber","ItemEggCarton","ItemElectronicParts","ItemElectrumIngot","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyCrowbar","ItemEmergencyDrill","ItemEmergencyEvaSuit","ItemEmergencyPickaxe","ItemEmergencyScrewdriver","ItemEmergencySpaceHelmet","ItemEmergencyToolBelt","ItemEmergencyWireCutters","ItemEmergencyWrench","ItemEmptyCan","ItemEvaSuit","ItemExplosive","ItemFern","ItemFertilizedEgg","ItemFilterFern","ItemFlagSmall","ItemFlashingLight","ItemFlashlight","ItemFlour","ItemFlowerBlue","ItemFlowerGreen","ItemFlowerOrange","ItemFlowerRed","ItemFlowerYellow","ItemFrenchFries","ItemFries","ItemGasCanisterCarbonDioxide","ItemGasCanisterEmpty","ItemGasCanisterFuel","ItemGasCanisterNitrogen","ItemGasCanisterNitrousOxide","ItemGasCanisterOxygen","ItemGasCanisterPollutants","ItemGasCanisterSmart","ItemGasCanisterVolatiles","ItemGasCanisterWater","ItemGasFilterCarbonDioxide","ItemGasFilterCarbonDioxideInfinite","ItemGasFilterCarbonDioxideL","ItemGasFilterCarbonDioxideM","ItemGasFilterNitrogen","ItemGasFilterNitrogenInfinite","ItemGasFilterNitrogenL","ItemGasFilterNitrogenM","ItemGasFilterNitrousOxide","ItemGasFilterNitrousOxideInfinite","ItemGasFilterNitrousOxideL","ItemGasFilterNitrousOxideM","ItemGasFilterOxygen","ItemGasFilterOxygenInfinite","ItemGasFilterOxygenL","ItemGasFilterOxygenM","ItemGasFilterPollutants","ItemGasFilterPollutantsInfinite","ItemGasFilterPollutantsL","ItemGasFilterPollutantsM","ItemGasFilterVolatiles","ItemGasFilterVolatilesInfinite","ItemGasFilterVolatilesL","ItemGasFilterVolatilesM","ItemGasFilterWater","ItemGasFilterWaterInfinite","ItemGasFilterWaterL","ItemGasFilterWaterM","ItemGasSensor","ItemGasTankStorage","ItemGlassSheets","ItemGlasses","ItemGoldIngot","ItemGoldOre","ItemGrenade","ItemHEMDroidRepairKit","ItemHardBackpack","ItemHardJetpack","ItemHardMiningBackPack","ItemHardSuit","ItemHardsuitHelmet","ItemHastelloyIngot","ItemHat","ItemHighVolumeGasCanisterEmpty","ItemHorticultureBelt","ItemHydroponicTray","ItemIce","ItemIgniter","ItemInconelIngot","ItemInsulation","ItemIntegratedCircuit10","ItemInvarIngot","ItemIronFrames","ItemIronIngot","ItemIronOre","ItemIronSheets","ItemJetpackBasic","ItemKitAIMeE","ItemKitAccessBridge","ItemKitAdvancedComposter","ItemKitAdvancedFurnace","ItemKitAdvancedPackagingMachine","ItemKitAirlock","ItemKitAirlockGate","ItemKitArcFurnace","ItemKitAtmospherics","ItemKitAutoMinerSmall","ItemKitAutolathe","ItemKitAutomatedOven","ItemKitBasket","ItemKitBattery","ItemKitBatteryLarge","ItemKitBeacon","ItemKitBeds","ItemKitBlastDoor","ItemKitCentrifuge","ItemKitChairs","ItemKitChute","ItemKitChuteUmbilical","ItemKitCompositeCladding","ItemKitCompositeFloorGrating","ItemKitComputer","ItemKitConsole","ItemKitCrate","ItemKitCrateMkII","ItemKitCrateMount","ItemKitCryoTube","ItemKitDeepMiner","ItemKitDockingPort","ItemKitDoor","ItemKitDrinkingFountain","ItemKitDynamicCanister","ItemKitDynamicGasTankAdvanced","ItemKitDynamicGenerator","ItemKitDynamicHydroponics","ItemKitDynamicLiquidCanister","ItemKitDynamicMKIILiquidCanister","ItemKitElectricUmbilical","ItemKitElectronicsPrinter","ItemKitElevator","ItemKitEngineLarge","ItemKitEngineMedium","ItemKitEngineSmall","ItemKitEvaporationChamber","ItemKitFlagODA","ItemKitFridgeBig","ItemKitFridgeSmall","ItemKitFurnace","ItemKitFurniture","ItemKitFuselage","ItemKitGasGenerator","ItemKitGasUmbilical","ItemKitGovernedGasRocketEngine","ItemKitGroundTelescope","ItemKitGrowLight","ItemKitHarvie","ItemKitHeatExchanger","ItemKitHorizontalAutoMiner","ItemKitHydraulicPipeBender","ItemKitHydroponicAutomated","ItemKitHydroponicStation","ItemKitIceCrusher","ItemKitInsulatedLiquidPipe","ItemKitInsulatedPipe","ItemKitInsulatedPipeUtility","ItemKitInsulatedPipeUtilityLiquid","ItemKitInteriorDoors","ItemKitLadder","ItemKitLandingPadAtmos","ItemKitLandingPadBasic","ItemKitLandingPadWaypoint","ItemKitLargeDirectHeatExchanger","ItemKitLargeExtendableRadiator","ItemKitLargeSatelliteDish","ItemKitLaunchMount","ItemKitLaunchTower","ItemKitLiquidRegulator","ItemKitLiquidTank","ItemKitLiquidTankInsulated","ItemKitLiquidTurboVolumePump","ItemKitLiquidUmbilical","ItemKitLocker","ItemKitLogicCircuit","ItemKitLogicInputOutput","ItemKitLogicMemory","ItemKitLogicProcessor","ItemKitLogicSwitch","ItemKitLogicTransmitter","ItemKitMotherShipCore","ItemKitMusicMachines","ItemKitPassiveLargeRadiatorGas","ItemKitPassiveLargeRadiatorLiquid","ItemKitPassthroughHeatExchanger","ItemKitPictureFrame","ItemKitPipe","ItemKitPipeLiquid","ItemKitPipeOrgan","ItemKitPipeRadiator","ItemKitPipeRadiatorLiquid","ItemKitPipeUtility","ItemKitPipeUtilityLiquid","ItemKitPlanter","ItemKitPortablesConnector","ItemKitPowerTransmitter","ItemKitPowerTransmitterOmni","ItemKitPoweredVent","ItemKitPressureFedGasEngine","ItemKitPressureFedLiquidEngine","ItemKitPressurePlate","ItemKitPumpedLiquidEngine","ItemKitRailing","ItemKitRecycler","ItemKitRegulator","ItemKitReinforcedWindows","ItemKitResearchMachine","ItemKitRespawnPointWallMounted","ItemKitRocketAvionics","ItemKitRocketBattery","ItemKitRocketCargoStorage","ItemKitRocketCelestialTracker","ItemKitRocketCircuitHousing","ItemKitRocketDatalink","ItemKitRocketGasFuelTank","ItemKitRocketLiquidFuelTank","ItemKitRocketManufactory","ItemKitRocketMiner","ItemKitRocketScanner","ItemKitRocketTransformerSmall","ItemKitRoverFrame","ItemKitRoverMKI","ItemKitSDBHopper","ItemKitSatelliteDish","ItemKitSecurityPrinter","ItemKitSensor","ItemKitShower","ItemKitSign","ItemKitSleeper","ItemKitSmallDirectHeatExchanger","ItemKitSmallSatelliteDish","ItemKitSolarPanel","ItemKitSolarPanelBasic","ItemKitSolarPanelBasicReinforced","ItemKitSolarPanelReinforced","ItemKitSolidGenerator","ItemKitSorter","ItemKitSpeaker","ItemKitStacker","ItemKitStairs","ItemKitStairwell","ItemKitStandardChute","ItemKitStirlingEngine","ItemKitSuitStorage","ItemKitTables","ItemKitTank","ItemKitTankInsulated","ItemKitToolManufactory","ItemKitTransformer","ItemKitTransformerSmall","ItemKitTurbineGenerator","ItemKitTurboVolumePump","ItemKitUprightWindTurbine","ItemKitVendingMachine","ItemKitVendingMachineRefrigerated","ItemKitWall","ItemKitWallArch","ItemKitWallFlat","ItemKitWallGeometry","ItemKitWallIron","ItemKitWallPadded","ItemKitWaterBottleFiller","ItemKitWaterPurifier","ItemKitWeatherStation","ItemKitWindTurbine","ItemKitWindowShutter","ItemLabeller","ItemLaptop","ItemLeadIngot","ItemLeadOre","ItemLightSword","ItemLiquidCanisterEmpty","ItemLiquidCanisterSmart","ItemLiquidDrain","ItemLiquidPipeAnalyzer","ItemLiquidPipeHeater","ItemLiquidPipeValve","ItemLiquidPipeVolumePump","ItemLiquidTankStorage","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIICrowbar","ItemMKIIDrill","ItemMKIIDuctTape","ItemMKIIMiningDrill","ItemMKIIScrewdriver","ItemMKIIWireCutters","ItemMKIIWrench","ItemMarineBodyArmor","ItemMarineHelmet","ItemMilk","ItemMiningBackPack","ItemMiningBelt","ItemMiningBeltMKII","ItemMiningCharge","ItemMiningDrill","ItemMiningDrillHeavy","ItemMiningDrillPneumatic","ItemMkIIToolbelt","ItemMuffin","ItemMushroom","ItemNVG","ItemNickelIngot","ItemNickelOre","ItemNitrice","ItemOxite","ItemPassiveVent","ItemPassiveVentInsulated","ItemPeaceLily","ItemPickaxe","ItemPillHeal","ItemPillStun","ItemPipeAnalyizer","ItemPipeCowl","ItemPipeDigitalValve","ItemPipeGasMixer","ItemPipeHeater","ItemPipeIgniter","ItemPipeLabel","ItemPipeLiquidRadiator","ItemPipeMeter","ItemPipeRadiator","ItemPipeValve","ItemPipeVolumePump","ItemPlainCake","ItemPlantEndothermic_Creative","ItemPlantEndothermic_Genepool1","ItemPlantEndothermic_Genepool2","ItemPlantSampler","ItemPlantSwitchGrass","ItemPlantThermogenic_Creative","ItemPlantThermogenic_Genepool1","ItemPlantThermogenic_Genepool2","ItemPlasticSheets","ItemPotato","ItemPotatoBaked","ItemPowerConnector","ItemPumpkin","ItemPumpkinPie","ItemPumpkinSoup","ItemPureIce","ItemPureIceCarbonDioxide","ItemPureIceHydrogen","ItemPureIceLiquidCarbonDioxide","ItemPureIceLiquidHydrogen","ItemPureIceLiquidNitrogen","ItemPureIceLiquidNitrous","ItemPureIceLiquidOxygen","ItemPureIceLiquidPollutant","ItemPureIceLiquidVolatiles","ItemPureIceNitrogen","ItemPureIceNitrous","ItemPureIceOxygen","ItemPureIcePollutant","ItemPureIcePollutedWater","ItemPureIceSteam","ItemPureIceVolatiles","ItemRTG","ItemRTGSurvival","ItemReagentMix","ItemRemoteDetonator","ItemReusableFireExtinguisher","ItemRice","ItemRoadFlare","ItemRocketMiningDrillHead","ItemRocketMiningDrillHeadDurable","ItemRocketMiningDrillHeadHighSpeedIce","ItemRocketMiningDrillHeadHighSpeedMineral","ItemRocketMiningDrillHeadIce","ItemRocketMiningDrillHeadLongTerm","ItemRocketMiningDrillHeadMineral","ItemRocketScanningHead","ItemScanner","ItemScrewdriver","ItemSecurityCamera","ItemSensorLenses","ItemSensorProcessingUnitCelestialScanner","ItemSensorProcessingUnitMesonScanner","ItemSensorProcessingUnitOreScanner","ItemSiliconIngot","ItemSiliconOre","ItemSilverIngot","ItemSilverOre","ItemSolderIngot","ItemSolidFuel","ItemSoundCartridgeBass","ItemSoundCartridgeDrums","ItemSoundCartridgeLeads","ItemSoundCartridgeSynth","ItemSoyOil","ItemSoybean","ItemSpaceCleaner","ItemSpaceHelmet","ItemSpaceIce","ItemSpaceOre","ItemSpacepack","ItemSprayCanBlack","ItemSprayCanBlue","ItemSprayCanBrown","ItemSprayCanGreen","ItemSprayCanGrey","ItemSprayCanKhaki","ItemSprayCanOrange","ItemSprayCanPink","ItemSprayCanPurple","ItemSprayCanRed","ItemSprayCanWhite","ItemSprayCanYellow","ItemSprayGun","ItemSteelFrames","ItemSteelIngot","ItemSteelSheets","ItemStelliteGlassSheets","ItemStelliteIngot","ItemSugar","ItemSugarCane","ItemSuitModCryogenicUpgrade","ItemTablet","ItemTerrainManipulator","ItemTomato","ItemTomatoSoup","ItemToolBelt","ItemTropicalPlant","ItemUraniumOre","ItemVolatiles","ItemWallCooler","ItemWallHeater","ItemWallLight","ItemWaspaloyIngot","ItemWaterBottle","ItemWaterPipeDigitalValve","ItemWaterPipeMeter","ItemWaterWallCooler","ItemWearLamp","ItemWeldingTorch","ItemWheat","ItemWireCutters","ItemWirelessBatteryCellExtraLarge","ItemWreckageAirConditioner1","ItemWreckageAirConditioner2","ItemWreckageHydroponicsTray1","ItemWreckageLargeExtendableRadiator01","ItemWreckageStructureRTG1","ItemWreckageStructureWeatherStation001","ItemWreckageStructureWeatherStation002","ItemWreckageStructureWeatherStation003","ItemWreckageStructureWeatherStation004","ItemWreckageStructureWeatherStation005","ItemWreckageStructureWeatherStation006","ItemWreckageStructureWeatherStation007","ItemWreckageStructureWeatherStation008","ItemWreckageTurbineGenerator1","ItemWreckageTurbineGenerator2","ItemWreckageTurbineGenerator3","ItemWreckageWallCooler1","ItemWreckageWallCooler2","ItemWrench","KitSDBSilo","KitStructureCombustionCentrifuge","Lander","Meteorite","MonsterEgg","MotherboardComms","MotherboardLogic","MotherboardMissionControl","MotherboardProgrammableChip","MotherboardRockets","MotherboardSorter","MothershipCore","NpcChick","NpcChicken","PipeBenderMod","PortableComposter","PortableSolarPanel","ReagentColorBlue","ReagentColorGreen","ReagentColorOrange","ReagentColorRed","ReagentColorYellow","Robot","RoverCargo","Rover_MkI","SMGMagazine","SeedBag_Cocoa","SeedBag_Corn","SeedBag_Fern","SeedBag_Mushroom","SeedBag_Potato","SeedBag_Pumpkin","SeedBag_Rice","SeedBag_Soybean","SeedBag_SugarCane","SeedBag_Switchgrass","SeedBag_Tomato","SeedBag_Wheet","SpaceShuttle","ToolPrinterMod","ToyLuna","UniformCommander","UniformMarine","UniformOrangeJumpSuit","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy","WeaponTorpedo"],"logicableItems":["Battery_Wireless_cell","Battery_Wireless_cell_Big","DynamicGPR","DynamicLight","ItemAdvancedTablet","ItemAngleGrinder","ItemArcWelder","ItemBatteryCell","ItemBatteryCellLarge","ItemBatteryCellNuclear","ItemBeacon","ItemDrill","ItemEmergencyAngleGrinder","ItemEmergencyArcWelder","ItemEmergencyDrill","ItemEmergencySpaceHelmet","ItemFlashlight","ItemHardBackpack","ItemHardJetpack","ItemHardSuit","ItemHardsuitHelmet","ItemIntegratedCircuit10","ItemJetpackBasic","ItemLabeller","ItemLaptop","ItemMKIIAngleGrinder","ItemMKIIArcWelder","ItemMKIIDrill","ItemMKIIMiningDrill","ItemMiningBeltMKII","ItemMiningDrill","ItemMiningDrillHeavy","ItemMkIIToolbelt","ItemNVG","ItemPlantSampler","ItemRemoteDetonator","ItemSensorLenses","ItemSpaceHelmet","ItemSpacepack","ItemTablet","ItemTerrainManipulator","ItemWearLamp","ItemWirelessBatteryCellExtraLarge","PortableSolarPanel","Robot","RoverCargo","Rover_MkI","WeaponEnergy","WeaponPistolEnergy","WeaponRifleEnergy"]} \ No newline at end of file +{ + "prefabs": { + "AccessCardBlack": { + "prefab": { + "prefab_name": "AccessCardBlack", + "prefab_hash": -1330388999, + "desc": "", + "name": "Access Card (Black)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "AccessCard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "AccessCardBlue": { + "prefab": { + "prefab_name": "AccessCardBlue", + "prefab_hash": -1411327657, + "desc": "", + "name": "Access Card (Blue)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "AccessCard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "AccessCardBrown": { + "prefab": { + "prefab_name": "AccessCardBrown", + "prefab_hash": 1412428165, + "desc": "", + "name": "Access Card (Brown)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "AccessCard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "AccessCardGray": { + "prefab": { + "prefab_name": "AccessCardGray", + "prefab_hash": -1339479035, + "desc": "", + "name": "Access Card (Gray)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "AccessCard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "AccessCardGreen": { + "prefab": { + "prefab_name": "AccessCardGreen", + "prefab_hash": -374567952, + "desc": "", + "name": "Access Card (Green)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "AccessCard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "AccessCardKhaki": { + "prefab": { + "prefab_name": "AccessCardKhaki", + "prefab_hash": 337035771, + "desc": "", + "name": "Access Card (Khaki)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "AccessCard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "AccessCardOrange": { + "prefab": { + "prefab_name": "AccessCardOrange", + "prefab_hash": -332896929, + "desc": "", + "name": "Access Card (Orange)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "AccessCard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "AccessCardPink": { + "prefab": { + "prefab_name": "AccessCardPink", + "prefab_hash": 431317557, + "desc": "", + "name": "Access Card (Pink)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "AccessCard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "AccessCardPurple": { + "prefab": { + "prefab_name": "AccessCardPurple", + "prefab_hash": 459843265, + "desc": "", + "name": "Access Card (Purple)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "AccessCard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "AccessCardRed": { + "prefab": { + "prefab_name": "AccessCardRed", + "prefab_hash": -1713748313, + "desc": "", + "name": "Access Card (Red)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "AccessCard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "AccessCardWhite": { + "prefab": { + "prefab_name": "AccessCardWhite", + "prefab_hash": 2079959157, + "desc": "", + "name": "Access Card (White)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "AccessCard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "AccessCardYellow": { + "prefab": { + "prefab_name": "AccessCardYellow", + "prefab_hash": 568932536, + "desc": "", + "name": "Access Card (Yellow)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "AccessCard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ApplianceChemistryStation": { + "prefab": { + "prefab_name": "ApplianceChemistryStation", + "prefab_hash": 1365789392, + "desc": "", + "name": "Chemistry Station" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Output", + "typ": "None" + } + ], + "consumer_info": { + "consumed_resouces": [ + "ItemCharcoal", + "ItemCobaltOre", + "ItemFern", + "ItemSilverIngot", + "ItemSilverOre", + "ItemSoyOil" + ], + "processed_reagents": [] + } + }, + "ApplianceDeskLampLeft": { + "prefab": { + "prefab_name": "ApplianceDeskLampLeft", + "prefab_hash": -1683849799, + "desc": "", + "name": "Appliance Desk Lamp Left" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ApplianceDeskLampRight": { + "prefab": { + "prefab_name": "ApplianceDeskLampRight", + "prefab_hash": 1174360780, + "desc": "", + "name": "Appliance Desk Lamp Right" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ApplianceMicrowave": { + "prefab": { + "prefab_name": "ApplianceMicrowave", + "prefab_hash": -1136173965, + "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.", + "name": "Microwave" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Output", + "typ": "None" + } + ], + "consumer_info": { + "consumed_resouces": [ + "ItemCorn", + "ItemEgg", + "ItemFertilizedEgg", + "ItemFlour", + "ItemMilk", + "ItemMushroom", + "ItemPotato", + "ItemPumpkin", + "ItemRice", + "ItemSoybean", + "ItemSoyOil", + "ItemTomato", + "ItemSugarCane", + "ItemCocoaTree", + "ItemCocoaPowder", + "ItemSugar" + ], + "processed_reagents": [] + } + }, + "AppliancePackagingMachine": { + "prefab": { + "prefab_name": "AppliancePackagingMachine", + "prefab_hash": -749191906, + "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 ", + "name": "Basic Packaging Machine" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Export", + "typ": "None" + } + ], + "consumer_info": { + "consumed_resouces": [ + "ItemCookedCondensedMilk", + "ItemCookedCorn", + "ItemCookedMushroom", + "ItemCookedPowderedEggs", + "ItemCookedPumpkin", + "ItemCookedRice", + "ItemCookedSoybean", + "ItemCookedTomato", + "ItemEmptyCan", + "ItemMilk", + "ItemPotatoBaked", + "ItemSoyOil" + ], + "processed_reagents": [] + } + }, + "AppliancePaintMixer": { + "prefab": { + "prefab_name": "AppliancePaintMixer", + "prefab_hash": -1339716113, + "desc": "", + "name": "Paint Mixer" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Output", + "typ": "Bottle" + } + ], + "consumer_info": { + "consumed_resouces": [ + "ItemSoyOil", + "ReagentColorBlue", + "ReagentColorGreen", + "ReagentColorOrange", + "ReagentColorRed", + "ReagentColorYellow" + ], + "processed_reagents": [] + } + }, + "AppliancePlantGeneticAnalyzer": { + "prefab": { + "prefab_name": "AppliancePlantGeneticAnalyzer", + "prefab_hash": -1303038067, + "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.", + "name": "Plant Genetic Analyzer" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Input", + "typ": "Tool" + } + ] + }, + "AppliancePlantGeneticSplicer": { + "prefab": { + "prefab_name": "AppliancePlantGeneticSplicer", + "prefab_hash": -1094868323, + "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.", + "name": "Plant Genetic Splicer" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Source Plant", + "typ": "Plant" + }, + { + "name": "Target Plant", + "typ": "Plant" + } + ] + }, + "AppliancePlantGeneticStabilizer": { + "prefab": { + "prefab_name": "AppliancePlantGeneticStabilizer", + "prefab_hash": 871432335, + "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 ", + "name": "Plant Genetic Stabilizer" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Plant", + "typ": "Plant" + } + ] + }, + "ApplianceReagentProcessor": { + "prefab": { + "prefab_name": "ApplianceReagentProcessor", + "prefab_hash": 1260918085, + "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.", + "name": "Reagent Processor" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Input", + "typ": "None" + }, + { + "name": "Output", + "typ": "None" + } + ], + "consumer_info": { + "consumed_resouces": [ + "ItemWheat", + "ItemSugarCane", + "ItemCocoaTree", + "ItemSoybean", + "ItemFlowerBlue", + "ItemFlowerGreen", + "ItemFlowerOrange", + "ItemFlowerRed", + "ItemFlowerYellow" + ], + "processed_reagents": [] + } + }, + "ApplianceSeedTray": { + "prefab": { + "prefab_name": "ApplianceSeedTray", + "prefab_hash": 142831994, + "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.", + "name": "Appliance Seed Tray" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "thermal_info": null, + "internal_atmo_info": null, + "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" + } + ] + }, + "ApplianceTabletDock": { + "prefab": { + "prefab_name": "ApplianceTabletDock", + "prefab_hash": 1853941363, + "desc": "", + "name": "Tablet Dock" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "", + "typ": "Tool" + } + ] + }, + "AutolathePrinterMod": { + "prefab": { + "prefab_name": "AutolathePrinterMod", + "prefab_hash": 221058307, + "desc": "Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", + "name": "Autolathe Printer Mod" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "Battery_Wireless_cell": { + "prefab": { + "prefab_name": "Battery_Wireless_cell", + "prefab_hash": -462415758, + "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", + "name": "Battery Wireless Cell" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Battery", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Mode": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "Battery_Wireless_cell_Big": { + "prefab": { + "prefab_name": "Battery_Wireless_cell_Big", + "prefab_hash": -41519077, + "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", + "name": "Battery Wireless Cell (Big)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Battery", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Mode": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "CardboardBox": { + "prefab": { + "prefab_name": "CardboardBox", + "prefab_hash": -1976947556, + "desc": "", + "name": "Cardboard Box" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Storage" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, + "CartridgeAccessController": { + "prefab": { + "prefab_name": "CartridgeAccessController", + "prefab_hash": -1634532552, + "desc": "", + "name": "Cartridge (Access Controller)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Cartridge", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CartridgeAtmosAnalyser": { + "prefab": { + "prefab_name": "CartridgeAtmosAnalyser", + "prefab_hash": -1550278665, + "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.", + "name": "Atmos Analyzer" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Cartridge", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CartridgeConfiguration": { + "prefab": { + "prefab_name": "CartridgeConfiguration", + "prefab_hash": -932136011, + "desc": "", + "name": "Configuration" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Cartridge", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CartridgeElectronicReader": { + "prefab": { + "prefab_name": "CartridgeElectronicReader", + "prefab_hash": -1462180176, + "desc": "", + "name": "eReader" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Cartridge", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CartridgeGPS": { + "prefab": { + "prefab_name": "CartridgeGPS", + "prefab_hash": -1957063345, + "desc": "", + "name": "GPS" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Cartridge", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CartridgeGuide": { + "prefab": { + "prefab_name": "CartridgeGuide", + "prefab_hash": 872720793, + "desc": "", + "name": "Guide" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Cartridge", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CartridgeMedicalAnalyser": { + "prefab": { + "prefab_name": "CartridgeMedicalAnalyser", + "prefab_hash": -1116110181, + "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.", + "name": "Medical Analyzer" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Cartridge", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CartridgeNetworkAnalyser": { + "prefab": { + "prefab_name": "CartridgeNetworkAnalyser", + "prefab_hash": 1606989119, + "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.", + "name": "Network Analyzer" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Cartridge", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CartridgeOreScanner": { + "prefab": { + "prefab_name": "CartridgeOreScanner", + "prefab_hash": -1768732546, + "desc": "When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet.", + "name": "Ore Scanner" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Cartridge", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CartridgeOreScannerColor": { + "prefab": { + "prefab_name": "CartridgeOreScannerColor", + "prefab_hash": 1738236580, + "desc": "When inserted into a Handheld Tablet the scanner will display minerals hidden underground in different colors on the tablet.", + "name": "Ore Scanner (Color)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Cartridge", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CartridgePlantAnalyser": { + "prefab": { + "prefab_name": "CartridgePlantAnalyser", + "prefab_hash": 1101328282, + "desc": "", + "name": "Cartridge Plant Analyser" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Cartridge", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CartridgeTracker": { + "prefab": { + "prefab_name": "CartridgeTracker", + "prefab_hash": 81488783, + "desc": "", + "name": "Tracker" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Cartridge", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CircuitboardAdvAirlockControl": { + "prefab": { + "prefab_name": "CircuitboardAdvAirlockControl", + "prefab_hash": 1633663176, + "desc": "", + "name": "Advanced Airlock" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Circuitboard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CircuitboardAirControl": { + "prefab": { + "prefab_name": "CircuitboardAirControl", + "prefab_hash": 1618019559, + "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. ", + "name": "Air Control" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Circuitboard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CircuitboardAirlockControl": { + "prefab": { + "prefab_name": "CircuitboardAirlockControl", + "prefab_hash": 912176135, + "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.", + "name": "Airlock" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Circuitboard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CircuitboardCameraDisplay": { + "prefab": { + "prefab_name": "CircuitboardCameraDisplay", + "prefab_hash": -412104504, + "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.", + "name": "Camera Display" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Circuitboard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CircuitboardDoorControl": { + "prefab": { + "prefab_name": "CircuitboardDoorControl", + "prefab_hash": 855694771, + "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.", + "name": "Door Control" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Circuitboard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CircuitboardGasDisplay": { + "prefab": { + "prefab_name": "CircuitboardGasDisplay", + "prefab_hash": -82343730, + "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).", + "name": "Gas Display" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Circuitboard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CircuitboardGraphDisplay": { + "prefab": { + "prefab_name": "CircuitboardGraphDisplay", + "prefab_hash": 1344368806, + "desc": "", + "name": "Graph Display" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Circuitboard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CircuitboardHashDisplay": { + "prefab": { + "prefab_name": "CircuitboardHashDisplay", + "prefab_hash": 1633074601, + "desc": "", + "name": "Hash Display" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Circuitboard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CircuitboardModeControl": { + "prefab": { + "prefab_name": "CircuitboardModeControl", + "prefab_hash": -1134148135, + "desc": "Can't decide which mode you love most? This circuit board allows you to switch any connected device between operation modes.", + "name": "Mode Control" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Circuitboard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CircuitboardPowerControl": { + "prefab": { + "prefab_name": "CircuitboardPowerControl", + "prefab_hash": -1923778429, + "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. ", + "name": "Power Control" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Circuitboard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CircuitboardShipDisplay": { + "prefab": { + "prefab_name": "CircuitboardShipDisplay", + "prefab_hash": -2044446819, + "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.", + "name": "Ship Display" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Circuitboard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CircuitboardSolarControl": { + "prefab": { + "prefab_name": "CircuitboardSolarControl", + "prefab_hash": 2020180320, + "desc": "Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel.", + "name": "Solar Control" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Circuitboard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "CompositeRollCover": { + "prefab": { + "prefab_name": "CompositeRollCover", + "prefab_hash": 1228794916, + "desc": "0.Operate\n1.Logic", + "name": "Composite Roll Cover" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "CrateMkII": { + "prefab": { + "prefab_name": "CrateMkII", + "prefab_hash": 8709219, + "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.", + "name": "Crate Mk II" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Storage" + }, + "thermal_info": null, + "internal_atmo_info": null, + "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" + } + ] + }, + "DecayedFood": { + "prefab": { + "prefab_name": "DecayedFood", + "prefab_hash": 1531087544, + "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", + "name": "Decayed Food" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 25, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "DeviceLfoVolume": { + "prefab": { + "prefab_name": "DeviceLfoVolume", + "prefab_hash": -1844430312, + "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.", + "name": "Low frequency oscillator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "Time": "ReadWrite", + "Bpm": "ReadWrite", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Whole Note", + "1": "Half Note", + "2": "Quarter Note", + "3": "Eighth Note", + "4": "Sixteenth Note" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "DeviceStepUnit": { + "prefab": { + "prefab_name": "DeviceStepUnit", + "prefab_hash": 1762696475, + "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", + "name": "Device Step Unit" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Volume": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "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" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "DynamicAirConditioner": { + "prefab": { + "prefab_name": "DynamicAirConditioner", + "prefab_hash": 519913639, + "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.", + "name": "Portable Air Conditioner" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "DynamicCrate": { + "prefab": { + "prefab_name": "DynamicCrate", + "prefab_hash": 1941079206, + "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.", + "name": "Dynamic Crate" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Storage" + }, + "thermal_info": null, + "internal_atmo_info": null, + "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" + } + ] + }, + "DynamicGPR": { + "prefab": { + "prefab_name": "DynamicGPR", + "prefab_hash": -2085885850, + "desc": "", + "name": "" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "DynamicGasCanisterAir": { + "prefab": { + "prefab_name": "DynamicGasCanisterAir", + "prefab_hash": -1713611165, + "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.", + "name": "Portable Gas Tank (Air)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterCarbonDioxide": { + "prefab": { + "prefab_name": "DynamicGasCanisterCarbonDioxide", + "prefab_hash": -322413931, + "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.", + "name": "Portable Gas Tank (CO2)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterEmpty": { + "prefab": { + "prefab_name": "DynamicGasCanisterEmpty", + "prefab_hash": -1741267161, + "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.", + "name": "Portable Gas Tank" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterFuel": { + "prefab": { + "prefab_name": "DynamicGasCanisterFuel", + "prefab_hash": -817051527, + "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.", + "name": "Portable Gas Tank (Fuel)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterNitrogen": { + "prefab": { + "prefab_name": "DynamicGasCanisterNitrogen", + "prefab_hash": 121951301, + "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.", + "name": "Portable Gas Tank (Nitrogen)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterNitrousOxide": { + "prefab": { + "prefab_name": "DynamicGasCanisterNitrousOxide", + "prefab_hash": 30727200, + "desc": "", + "name": "Portable Gas Tank (Nitrous Oxide)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterOxygen": { + "prefab": { + "prefab_name": "DynamicGasCanisterOxygen", + "prefab_hash": 1360925836, + "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.", + "name": "Portable Gas Tank (Oxygen)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterPollutants": { + "prefab": { + "prefab_name": "DynamicGasCanisterPollutants", + "prefab_hash": 396065382, + "desc": "", + "name": "Portable Gas Tank (Pollutants)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterRocketFuel": { + "prefab": { + "prefab_name": "DynamicGasCanisterRocketFuel", + "prefab_hash": -8883951, + "desc": "", + "name": "Dynamic Gas Canister Rocket Fuel" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterVolatiles": { + "prefab": { + "prefab_name": "DynamicGasCanisterVolatiles", + "prefab_hash": 108086870, + "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.", + "name": "Portable Gas Tank (Volatiles)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterWater": { + "prefab": { + "prefab_name": "DynamicGasCanisterWater", + "prefab_hash": 197293625, + "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.", + "name": "Portable Liquid Tank (Water)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Gas Canister", + "typ": "LiquidCanister" + } + ] + }, + "DynamicGasTankAdvanced": { + "prefab": { + "prefab_name": "DynamicGasTankAdvanced", + "prefab_hash": -386375420, + "desc": "0.Mode0\n1.Mode1", + "name": "Gas Tank Mk II" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasTankAdvancedOxygen": { + "prefab": { + "prefab_name": "DynamicGasTankAdvancedOxygen", + "prefab_hash": -1264455519, + "desc": "0.Mode0\n1.Mode1", + "name": "Portable Gas Tank Mk II (Oxygen)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGenerator": { + "prefab": { + "prefab_name": "DynamicGenerator", + "prefab_hash": -82087220, + "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.", + "name": "Portable Generator" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Gas Canister", + "typ": "GasCanister" + }, + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "DynamicHydroponics": { + "prefab": { + "prefab_name": "DynamicHydroponics", + "prefab_hash": 587726607, + "desc": "", + "name": "Portable Hydroponics" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": null, + "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" + } + ] + }, + "DynamicLight": { + "prefab": { + "prefab_name": "DynamicLight", + "prefab_hash": -21970188, + "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.", + "name": "Portable Light" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Lock": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "DynamicLiquidCanisterEmpty": { + "prefab": { + "prefab_name": "DynamicLiquidCanisterEmpty", + "prefab_hash": -1939209112, + "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.", + "name": "Portable Liquid Tank" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Liquid Canister", + "typ": "LiquidCanister" + } + ] + }, + "DynamicMKIILiquidCanisterEmpty": { + "prefab": { + "prefab_name": "DynamicMKIILiquidCanisterEmpty", + "prefab_hash": 2130739600, + "desc": "An empty, insulated liquid Gas Canister.", + "name": "Portable Liquid Tank Mk II" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Liquid Canister", + "typ": "LiquidCanister" + } + ] + }, + "DynamicMKIILiquidCanisterWater": { + "prefab": { + "prefab_name": "DynamicMKIILiquidCanisterWater", + "prefab_hash": -319510386, + "desc": "An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature.", + "name": "Portable Liquid Tank Mk II (Water)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Liquid Canister", + "typ": "LiquidCanister" + } + ] + }, + "DynamicScrubber": { + "prefab": { + "prefab_name": "DynamicScrubber", + "prefab_hash": 755048589, + "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.", + "name": "Portable Air Scrubber" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Gas Filter", + "typ": "GasFilter" + }, + { + "name": "Gas Filter", + "typ": "GasFilter" + } + ] + }, + "DynamicSkeleton": { + "prefab": { + "prefab_name": "DynamicSkeleton", + "prefab_hash": 106953348, + "desc": "", + "name": "Skeleton" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ElectronicPrinterMod": { + "prefab": { + "prefab_name": "ElectronicPrinterMod", + "prefab_hash": -311170652, + "desc": "Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", + "name": "Electronic Printer Mod" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ElevatorCarrage": { + "prefab": { + "prefab_name": "ElevatorCarrage", + "prefab_hash": -110788403, + "desc": "", + "name": "Elevator" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "EntityChick": { + "prefab": { + "prefab_name": "EntityChick", + "prefab_hash": 1730165908, + "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.", + "name": "Entity Chick" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Brain", + "typ": "Organ" + } + ] + }, + "EntityChickenBrown": { + "prefab": { + "prefab_name": "EntityChickenBrown", + "prefab_hash": 334097180, + "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.", + "name": "Entity Chicken Brown" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Brain", + "typ": "Organ" + } + ] + }, + "EntityChickenWhite": { + "prefab": { + "prefab_name": "EntityChickenWhite", + "prefab_hash": 1010807532, + "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.", + "name": "Entity Chicken White" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Brain", + "typ": "Organ" + } + ] + }, + "EntityRoosterBlack": { + "prefab": { + "prefab_name": "EntityRoosterBlack", + "prefab_hash": 966959649, + "desc": "This is a rooster. It is black. There is dignity in this.", + "name": "Entity Rooster Black" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Brain", + "typ": "Organ" + } + ] + }, + "EntityRoosterBrown": { + "prefab": { + "prefab_name": "EntityRoosterBrown", + "prefab_hash": -583103395, + "desc": "The common brown rooster. Don't let it hear you say that.", + "name": "Entity Rooster Brown" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Brain", + "typ": "Organ" + } + ] + }, + "Fertilizer": { + "prefab": { + "prefab_name": "Fertilizer", + "prefab_hash": 1517856652, + "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. ", + "name": "Fertilizer" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "FireArmSMG": { + "prefab": { + "prefab_name": "FireArmSMG", + "prefab_hash": -86315541, + "desc": "0.Single\n1.Auto", + "name": "Fire Arm SMG" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "", + "typ": "Magazine" + } + ] + }, + "Flag_ODA_10m": { + "prefab": { + "prefab_name": "Flag_ODA_10m", + "prefab_hash": 1845441951, + "desc": "", + "name": "Flag (ODA 10m)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "Flag_ODA_4m": { + "prefab": { + "prefab_name": "Flag_ODA_4m", + "prefab_hash": 1159126354, + "desc": "", + "name": "Flag (ODA 4m)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "Flag_ODA_6m": { + "prefab": { + "prefab_name": "Flag_ODA_6m", + "prefab_hash": 1998634960, + "desc": "", + "name": "Flag (ODA 6m)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "Flag_ODA_8m": { + "prefab": { + "prefab_name": "Flag_ODA_8m", + "prefab_hash": -375156130, + "desc": "", + "name": "Flag (ODA 8m)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "FlareGun": { + "prefab": { + "prefab_name": "FlareGun", + "prefab_hash": 118685786, + "desc": "", + "name": "Flare Gun" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Magazine", + "typ": "Flare" + }, + { + "name": "", + "typ": "Blocked" + } + ] + }, + "H2Combustor": { + "prefab": { + "prefab_name": "H2Combustor", + "prefab_hash": 1840108251, + "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.", + "name": "H2 Combustor" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "RatioLiquidNitrogenInput": "Read", + "RatioLiquidNitrogenOutput": "Read", + "RatioLiquidOxygen": "Read", + "RatioLiquidOxygenInput": "Read", + "RatioLiquidOxygenOutput": "Read", + "RatioLiquidVolatiles": "Read", + "RatioLiquidVolatilesInput": "Read", + "RatioLiquidVolatilesOutput": "Read", + "RatioSteam": "Read", + "RatioSteamInput": "Read", + "RatioSteamOutput": "Read", + "RatioLiquidCarbonDioxide": "Read", + "RatioLiquidCarbonDioxideInput": "Read", + "RatioLiquidCarbonDioxideOutput": "Read", + "RatioLiquidPollutant": "Read", + "RatioLiquidPollutantInput": "Read", + "RatioLiquidPollutantOutput": "Read", + "RatioLiquidNitrousOxide": "Read", + "RatioLiquidNitrousOxideInput": "Read", + "RatioLiquidNitrousOxideOutput": "Read", + "ReferenceId": "Read", + "RatioHydrogen": "Read", + "RatioLiquidHydrogen": "Read", + "RatioPollutedWater": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Idle", + "1": "Active" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": true + }, + "slots": [ + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": 2, + "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 + } + }, + "Handgun": { + "prefab": { + "prefab_name": "Handgun", + "prefab_hash": 247238062, + "desc": "", + "name": "Handgun" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Magazine", + "typ": "Magazine" + } + ] + }, + "HandgunMagazine": { + "prefab": { + "prefab_name": "HandgunMagazine", + "prefab_hash": 1254383185, + "desc": "", + "name": "Handgun Magazine" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Magazine", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "HumanSkull": { + "prefab": { + "prefab_name": "HumanSkull", + "prefab_hash": -857713709, + "desc": "", + "name": "Human Skull" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ImGuiCircuitboardAirlockControl": { + "prefab": { + "prefab_name": "ImGuiCircuitboardAirlockControl", + "prefab_hash": -73796547, + "desc": "", + "name": "Airlock (Experimental)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Circuitboard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemActiveVent": { + "prefab": { + "prefab_name": "ItemActiveVent", + "prefab_hash": -842048328, + "desc": "When constructed, this kit places an Active Vent on any support structure.", + "name": "Kit (Active Vent)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemAdhesiveInsulation": { + "prefab": { + "prefab_name": "ItemAdhesiveInsulation", + "prefab_hash": 1871048978, + "desc": "", + "name": "Adhesive Insulation" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 20, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemAdvancedTablet": { + "prefab": { + "prefab_name": "ItemAdvancedTablet", + "prefab_hash": 1722785341, + "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", + "name": "Advanced Tablet" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "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" + }, + "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" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "On": "ReadWrite", + "Volume": "ReadWrite", + "SoundAlert": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": true, + "circuit_holder": true + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Cartridge", + "typ": "Cartridge" + }, + { + "name": "Cartridge1", + "typ": "Cartridge" + }, + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + } + ] + }, + "ItemAlienMushroom": { + "prefab": { + "prefab_name": "ItemAlienMushroom", + "prefab_hash": 176446172, + "desc": "", + "name": "Alien Mushroom" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemAmmoBox": { + "prefab": { + "prefab_name": "ItemAmmoBox", + "prefab_hash": -9559091, + "desc": "", + "name": "Ammo Box" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemAngleGrinder": { + "prefab": { + "prefab_name": "ItemAngleGrinder", + "prefab_hash": 201215010, + "desc": "Angles-be-gone with the trusty angle grinder.", + "name": "Angle Grinder" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemArcWelder": { + "prefab": { + "prefab_name": "ItemArcWelder", + "prefab_hash": 1385062886, + "desc": "", + "name": "Arc Welder" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemAreaPowerControl": { + "prefab": { + "prefab_name": "ItemAreaPowerControl", + "prefab_hash": 1757673317, + "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.", + "name": "Kit (Power Controller)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemAstroloyIngot": { + "prefab": { + "prefab_name": "ItemAstroloyIngot", + "prefab_hash": 412924554, + "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.", + "name": "Ingot (Astroloy)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Astroloy": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemAstroloySheets": { + "prefab": { + "prefab_name": "ItemAstroloySheets", + "prefab_hash": -1662476145, + "desc": "", + "name": "Astroloy Sheets" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "None", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemAuthoringTool": { + "prefab": { + "prefab_name": "ItemAuthoringTool", + "prefab_hash": 789015045, + "desc": "", + "name": "Authoring Tool" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemAuthoringToolRocketNetwork": { + "prefab": { + "prefab_name": "ItemAuthoringToolRocketNetwork", + "prefab_hash": -1731627004, + "desc": "", + "name": "" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemBasketBall": { + "prefab": { + "prefab_name": "ItemBasketBall", + "prefab_hash": -1262580790, + "desc": "", + "name": "Basket Ball" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemBatteryCell": { + "prefab": { + "prefab_name": "ItemBatteryCell", + "prefab_hash": 700133157, + "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.", + "name": "Battery Cell (Small)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Battery", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Mode": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "ItemBatteryCellLarge": { + "prefab": { + "prefab_name": "ItemBatteryCellLarge", + "prefab_hash": -459827268, + "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", + "name": "Battery Cell (Large)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Battery", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Mode": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "ItemBatteryCellNuclear": { + "prefab": { + "prefab_name": "ItemBatteryCellNuclear", + "prefab_hash": 544617306, + "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.", + "name": "Battery Cell (Nuclear)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Battery", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Mode": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "ItemBatteryCharger": { + "prefab": { + "prefab_name": "ItemBatteryCharger", + "prefab_hash": -1866880307, + "desc": "This kit produces a 5-slot Kit (Battery Charger).", + "name": "Kit (Battery Charger)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemBatteryChargerSmall": { + "prefab": { + "prefab_name": "ItemBatteryChargerSmall", + "prefab_hash": 1008295833, + "desc": "", + "name": "Battery Charger Small" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemBeacon": { + "prefab": { + "prefab_name": "ItemBeacon", + "prefab_hash": -869869491, + "desc": "", + "name": "Tracking Beacon" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemBiomass": { + "prefab": { + "prefab_name": "ItemBiomass", + "prefab_hash": -831480639, + "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).", + "name": "Biomass" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "Biomass": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemBreadLoaf": { + "prefab": { + "prefab_name": "ItemBreadLoaf", + "prefab_hash": 893514943, + "desc": "", + "name": "Bread Loaf" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCableAnalyser": { + "prefab": { + "prefab_name": "ItemCableAnalyser", + "prefab_hash": -1792787349, + "desc": "", + "name": "Kit (Cable Analyzer)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCableCoil": { + "prefab": { + "prefab_name": "ItemCableCoil", + "prefab_hash": -466050668, + "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).", + "name": "Cable Coil" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCableCoilHeavy": { + "prefab": { + "prefab_name": "ItemCableCoilHeavy", + "prefab_hash": 2060134443, + "desc": "Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW.", + "name": "Cable Coil (Heavy)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCableFuse": { + "prefab": { + "prefab_name": "ItemCableFuse", + "prefab_hash": 195442047, + "desc": "", + "name": "Kit (Cable Fuses)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCannedCondensedMilk": { + "prefab": { + "prefab_name": "ItemCannedCondensedMilk", + "prefab_hash": -2104175091, + "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.", + "name": "Canned Condensed Milk" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCannedEdamame": { + "prefab": { + "prefab_name": "ItemCannedEdamame", + "prefab_hash": -999714082, + "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.", + "name": "Canned Edamame" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCannedMushroom": { + "prefab": { + "prefab_name": "ItemCannedMushroom", + "prefab_hash": -1344601965, + "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.", + "name": "Canned Mushroom" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCannedPowderedEggs": { + "prefab": { + "prefab_name": "ItemCannedPowderedEggs", + "prefab_hash": 1161510063, + "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.", + "name": "Canned Powdered Eggs" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCannedRicePudding": { + "prefab": { + "prefab_name": "ItemCannedRicePudding", + "prefab_hash": -1185552595, + "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.", + "name": "Canned Rice Pudding" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCerealBar": { + "prefab": { + "prefab_name": "ItemCerealBar", + "prefab_hash": 791746840, + "desc": "Sustains, without decay. If only all our relationships were so well balanced.", + "name": "Cereal Bar" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCharcoal": { + "prefab": { + "prefab_name": "ItemCharcoal", + "prefab_hash": 252561409, + "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.", + "name": "Charcoal" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 200, + "reagents": { + "Carbon": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemChemLightBlue": { + "prefab": { + "prefab_name": "ItemChemLightBlue", + "prefab_hash": -772542081, + "desc": "A safe and slightly rave-some source of blue light. Snap to activate.", + "name": "Chem Light (Blue)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemChemLightGreen": { + "prefab": { + "prefab_name": "ItemChemLightGreen", + "prefab_hash": -597479390, + "desc": "Enliven the dreariest, airless rock with this glowy green light. Snap to activate.", + "name": "Chem Light (Green)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemChemLightRed": { + "prefab": { + "prefab_name": "ItemChemLightRed", + "prefab_hash": -525810132, + "desc": "A red glowstick. Snap to activate. Then reach for the lasers.", + "name": "Chem Light (Red)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemChemLightWhite": { + "prefab": { + "prefab_name": "ItemChemLightWhite", + "prefab_hash": 1312166823, + "desc": "Snap the glowstick to activate a pale radiance that keeps the darkness at bay.", + "name": "Chem Light (White)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemChemLightYellow": { + "prefab": { + "prefab_name": "ItemChemLightYellow", + "prefab_hash": 1224819963, + "desc": "Dispel the darkness with this yellow glowstick.", + "name": "Chem Light (Yellow)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemChocolateBar": { + "prefab": { + "prefab_name": "ItemChocolateBar", + "prefab_hash": 234601764, + "desc": "", + "name": "Chocolate Bar" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemChocolateCake": { + "prefab": { + "prefab_name": "ItemChocolateCake", + "prefab_hash": -261575861, + "desc": "", + "name": "Chocolate Cake" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemChocolateCerealBar": { + "prefab": { + "prefab_name": "ItemChocolateCerealBar", + "prefab_hash": 860793245, + "desc": "", + "name": "Chocolate Cereal Bar" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCoalOre": { + "prefab": { + "prefab_name": "ItemCoalOre", + "prefab_hash": 1724793494, + "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).", + "name": "Ore (Coal)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Hydrocarbon": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCobaltOre": { + "prefab": { + "prefab_name": "ItemCobaltOre", + "prefab_hash": -983091249, + "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.", + "name": "Ore (Cobalt)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Cobalt": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCocoaPowder": { + "prefab": { + "prefab_name": "ItemCocoaPowder", + "prefab_hash": 457286516, + "desc": "", + "name": "Cocoa Powder" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 20, + "reagents": { + "Cocoa": 1.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCocoaTree": { + "prefab": { + "prefab_name": "ItemCocoaTree", + "prefab_hash": 680051921, + "desc": "", + "name": "Cocoa" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 20, + "reagents": { + "Cocoa": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCoffeeMug": { + "prefab": { + "prefab_name": "ItemCoffeeMug", + "prefab_hash": 1800622698, + "desc": "", + "name": "Coffee Mug" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemConstantanIngot": { + "prefab": { + "prefab_name": "ItemConstantanIngot", + "prefab_hash": 1058547521, + "desc": "", + "name": "Ingot (Constantan)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Constantan": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCookedCondensedMilk": { + "prefab": { + "prefab_name": "ItemCookedCondensedMilk", + "prefab_hash": 1715917521, + "desc": "A high-nutrient cooked food, which can be canned.", + "name": "Condensed Milk" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 10, + "reagents": { + "Milk": 100.0 + }, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCookedCorn": { + "prefab": { + "prefab_name": "ItemCookedCorn", + "prefab_hash": 1344773148, + "desc": "A high-nutrient cooked food, which can be canned.", + "name": "Cooked Corn" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 10, + "reagents": { + "Corn": 1.0 + }, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCookedMushroom": { + "prefab": { + "prefab_name": "ItemCookedMushroom", + "prefab_hash": -1076892658, + "desc": "A high-nutrient cooked food, which can be canned.", + "name": "Cooked Mushroom" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 10, + "reagents": { + "Mushroom": 1.0 + }, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCookedPowderedEggs": { + "prefab": { + "prefab_name": "ItemCookedPowderedEggs", + "prefab_hash": -1712264413, + "desc": "A high-nutrient cooked food, which can be canned.", + "name": "Powdered Eggs" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 10, + "reagents": { + "Egg": 1.0 + }, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCookedPumpkin": { + "prefab": { + "prefab_name": "ItemCookedPumpkin", + "prefab_hash": 1849281546, + "desc": "A high-nutrient cooked food, which can be canned.", + "name": "Cooked Pumpkin" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 10, + "reagents": { + "Pumpkin": 1.0 + }, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCookedRice": { + "prefab": { + "prefab_name": "ItemCookedRice", + "prefab_hash": 2013539020, + "desc": "A high-nutrient cooked food, which can be canned.", + "name": "Cooked Rice" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 10, + "reagents": { + "Rice": 1.0 + }, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCookedSoybean": { + "prefab": { + "prefab_name": "ItemCookedSoybean", + "prefab_hash": 1353449022, + "desc": "A high-nutrient cooked food, which can be canned.", + "name": "Cooked Soybean" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 10, + "reagents": { + "Soy": 5.0 + }, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCookedTomato": { + "prefab": { + "prefab_name": "ItemCookedTomato", + "prefab_hash": -709086714, + "desc": "A high-nutrient cooked food, which can be canned.", + "name": "Cooked Tomato" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 10, + "reagents": { + "Tomato": 1.0 + }, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCopperIngot": { + "prefab": { + "prefab_name": "ItemCopperIngot", + "prefab_hash": -404336834, + "desc": "Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items.", + "name": "Ingot (Copper)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Copper": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCopperOre": { + "prefab": { + "prefab_name": "ItemCopperOre", + "prefab_hash": -707307845, + "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.", + "name": "Ore (Copper)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Copper": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCorn": { + "prefab": { + "prefab_name": "ItemCorn", + "prefab_hash": 258339687, + "desc": "A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light.", + "name": "Corn" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 20, + "reagents": { + "Corn": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCornSoup": { + "prefab": { + "prefab_name": "ItemCornSoup", + "prefab_hash": 545034114, + "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.", + "name": "Corn Soup" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCreditCard": { + "prefab": { + "prefab_name": "ItemCreditCard", + "prefab_hash": -1756772618, + "desc": "", + "name": "Credit Card" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 100000, + "reagents": null, + "slot_class": "CreditCard", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCropHay": { + "prefab": { + "prefab_name": "ItemCropHay", + "prefab_hash": 215486157, + "desc": "", + "name": "Hay" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemCrowbar": { + "prefab": { + "prefab_name": "ItemCrowbar", + "prefab_hash": 856108234, + "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.", + "name": "Crowbar" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemDataDisk": { + "prefab": { + "prefab_name": "ItemDataDisk", + "prefab_hash": 1005843700, + "desc": "", + "name": "Data Disk" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "DataDisk", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemDirtCanister": { + "prefab": { + "prefab_name": "ItemDirtCanister", + "prefab_hash": 902565329, + "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.", + "name": "Dirt Canister" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemDirtyOre": { + "prefab": { + "prefab_name": "ItemDirtyOre", + "prefab_hash": -1234745580, + "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. ", + "name": "Dirty Ore" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "None", + "sorting_class": "Ores" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemDisposableBatteryCharger": { + "prefab": { + "prefab_name": "ItemDisposableBatteryCharger", + "prefab_hash": -2124435700, + "desc": "Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery.", + "name": "Disposable Battery Charger" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemDrill": { + "prefab": { + "prefab_name": "ItemDrill", + "prefab_hash": 2009673399, + "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.", + "name": "Hand Drill" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemDuctTape": { + "prefab": { + "prefab_name": "ItemDuctTape", + "prefab_hash": -1943134693, + "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.", + "name": "Duct Tape" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemDynamicAirCon": { + "prefab": { + "prefab_name": "ItemDynamicAirCon", + "prefab_hash": 1072914031, + "desc": "", + "name": "Kit (Portable Air Conditioner)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemDynamicScrubber": { + "prefab": { + "prefab_name": "ItemDynamicScrubber", + "prefab_hash": -971920158, + "desc": "", + "name": "Kit (Portable Scrubber)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemEggCarton": { + "prefab": { + "prefab_name": "ItemEggCarton", + "prefab_hash": -524289310, + "desc": "Within, eggs reside in mysterious, marmoreal silence.", + "name": "Egg Carton" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Storage" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "", + "typ": "Egg" + }, + { + "name": "", + "typ": "Egg" + }, + { + "name": "", + "typ": "Egg" + }, + { + "name": "", + "typ": "Egg" + }, + { + "name": "", + "typ": "Egg" + }, + { + "name": "", + "typ": "Egg" + } + ] + }, + "ItemElectronicParts": { + "prefab": { + "prefab_name": "ItemElectronicParts", + "prefab_hash": 731250882, + "desc": "", + "name": "Electronic Parts" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 20, + "reagents": null, + "slot_class": "None", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemElectrumIngot": { + "prefab": { + "prefab_name": "ItemElectrumIngot", + "prefab_hash": 502280180, + "desc": "", + "name": "Ingot (Electrum)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Electrum": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemEmergencyAngleGrinder": { + "prefab": { + "prefab_name": "ItemEmergencyAngleGrinder", + "prefab_hash": -351438780, + "desc": "", + "name": "Emergency Angle Grinder" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemEmergencyArcWelder": { + "prefab": { + "prefab_name": "ItemEmergencyArcWelder", + "prefab_hash": -1056029600, + "desc": "", + "name": "Emergency Arc Welder" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemEmergencyCrowbar": { + "prefab": { + "prefab_name": "ItemEmergencyCrowbar", + "prefab_hash": 976699731, + "desc": "", + "name": "Emergency Crowbar" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemEmergencyDrill": { + "prefab": { + "prefab_name": "ItemEmergencyDrill", + "prefab_hash": -2052458905, + "desc": "", + "name": "Emergency Drill" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemEmergencyEvaSuit": { + "prefab": { + "prefab_name": "ItemEmergencyEvaSuit", + "prefab_hash": 1791306431, + "desc": "", + "name": "Emergency Eva Suit" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Suit", + "sorting_class": "Clothing" + }, + "thermal_info": { + "convection_factor": 0.2, + "radiation_factor": 0.2 + }, + "internal_atmo_info": { + "volume": 10.0 + }, + "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" + } + ], + "suit_info": { + "hygine_reduction_multiplier": 1.0, + "waste_max_pressure": 4053.0 + } + }, + "ItemEmergencyPickaxe": { + "prefab": { + "prefab_name": "ItemEmergencyPickaxe", + "prefab_hash": -1061510408, + "desc": "", + "name": "Emergency Pickaxe" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemEmergencyScrewdriver": { + "prefab": { + "prefab_name": "ItemEmergencyScrewdriver", + "prefab_hash": 266099983, + "desc": "", + "name": "Emergency Screwdriver" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemEmergencySpaceHelmet": { + "prefab": { + "prefab_name": "ItemEmergencySpaceHelmet", + "prefab_hash": 205916793, + "desc": "", + "name": "Emergency Space Helmet" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Helmet", + "sorting_class": "Clothing" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": { + "volume": 3.0 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "ItemEmergencyToolBelt": { + "prefab": { + "prefab_name": "ItemEmergencyToolBelt", + "prefab_hash": 1661941301, + "desc": "", + "name": "Emergency Tool Belt" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Belt", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "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" + } + ] + }, + "ItemEmergencyWireCutters": { + "prefab": { + "prefab_name": "ItemEmergencyWireCutters", + "prefab_hash": 2102803952, + "desc": "", + "name": "Emergency Wire Cutters" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemEmergencyWrench": { + "prefab": { + "prefab_name": "ItemEmergencyWrench", + "prefab_hash": 162553030, + "desc": "", + "name": "Emergency Wrench" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemEmptyCan": { + "prefab": { + "prefab_name": "ItemEmptyCan", + "prefab_hash": 1013818348, + "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.", + "name": "Empty Can" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 10, + "reagents": { + "Steel": 1.0 + }, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemEvaSuit": { + "prefab": { + "prefab_name": "ItemEvaSuit", + "prefab_hash": 1677018918, + "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.", + "name": "Eva Suit" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Suit", + "sorting_class": "Clothing" + }, + "thermal_info": { + "convection_factor": 0.2, + "radiation_factor": 0.2 + }, + "internal_atmo_info": { + "volume": 10.0 + }, + "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" + } + ], + "suit_info": { + "hygine_reduction_multiplier": 1.0, + "waste_max_pressure": 4053.0 + } + }, + "ItemExplosive": { + "prefab": { + "prefab_name": "ItemExplosive", + "prefab_hash": 235361649, + "desc": "", + "name": "Remote Explosive" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemFern": { + "prefab": { + "prefab_name": "ItemFern", + "prefab_hash": 892110467, + "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.", + "name": "Fern" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "Fenoxitone": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemFertilizedEgg": { + "prefab": { + "prefab_name": "ItemFertilizedEgg", + "prefab_hash": -383972371, + "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.", + "name": "Egg" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 1, + "reagents": { + "Egg": 1.0 + }, + "slot_class": "Egg", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemFilterFern": { + "prefab": { + "prefab_name": "ItemFilterFern", + "prefab_hash": 266654416, + "desc": "A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant.", + "name": "Darga Fern" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemFlagSmall": { + "prefab": { + "prefab_name": "ItemFlagSmall", + "prefab_hash": 2011191088, + "desc": "", + "name": "Kit (Small Flag)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemFlashingLight": { + "prefab": { + "prefab_name": "ItemFlashingLight", + "prefab_hash": -2107840748, + "desc": "", + "name": "Kit (Flashing Light)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemFlashlight": { + "prefab": { + "prefab_name": "ItemFlashlight", + "prefab_hash": -838472102, + "desc": "A flashlight with a narrow and wide beam options.", + "name": "Flashlight" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Low Power", + "1": "High Power" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemFlour": { + "prefab": { + "prefab_name": "ItemFlour", + "prefab_hash": -665995854, + "desc": "Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven).", + "name": "Flour" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Flour": 50.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemFlowerBlue": { + "prefab": { + "prefab_name": "ItemFlowerBlue", + "prefab_hash": -1573623434, + "desc": "", + "name": "Flower (Blue)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemFlowerGreen": { + "prefab": { + "prefab_name": "ItemFlowerGreen", + "prefab_hash": -1513337058, + "desc": "", + "name": "Flower (Green)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemFlowerOrange": { + "prefab": { + "prefab_name": "ItemFlowerOrange", + "prefab_hash": -1411986716, + "desc": "", + "name": "Flower (Orange)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemFlowerRed": { + "prefab": { + "prefab_name": "ItemFlowerRed", + "prefab_hash": -81376085, + "desc": "", + "name": "Flower (Red)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemFlowerYellow": { + "prefab": { + "prefab_name": "ItemFlowerYellow", + "prefab_hash": 1712822019, + "desc": "", + "name": "Flower (Yellow)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemFrenchFries": { + "prefab": { + "prefab_name": "ItemFrenchFries", + "prefab_hash": -57608687, + "desc": "Because space would suck without 'em.", + "name": "Canned French Fries" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemFries": { + "prefab": { + "prefab_name": "ItemFries", + "prefab_hash": 1371786091, + "desc": "", + "name": "French Fries" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasCanisterCarbonDioxide": { + "prefab": { + "prefab_name": "ItemGasCanisterCarbonDioxide", + "prefab_hash": -767685874, + "desc": "", + "name": "Canister (CO2)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 64.0 + } + }, + "ItemGasCanisterEmpty": { + "prefab": { + "prefab_name": "ItemGasCanisterEmpty", + "prefab_hash": 42280099, + "desc": "", + "name": "Canister" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 64.0 + } + }, + "ItemGasCanisterFuel": { + "prefab": { + "prefab_name": "ItemGasCanisterFuel", + "prefab_hash": -1014695176, + "desc": "", + "name": "Canister (Fuel)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 64.0 + } + }, + "ItemGasCanisterNitrogen": { + "prefab": { + "prefab_name": "ItemGasCanisterNitrogen", + "prefab_hash": 2145068424, + "desc": "", + "name": "Canister (Nitrogen)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 64.0 + } + }, + "ItemGasCanisterNitrousOxide": { + "prefab": { + "prefab_name": "ItemGasCanisterNitrousOxide", + "prefab_hash": -1712153401, + "desc": "", + "name": "Gas Canister (Sleeping)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 64.0 + } + }, + "ItemGasCanisterOxygen": { + "prefab": { + "prefab_name": "ItemGasCanisterOxygen", + "prefab_hash": -1152261938, + "desc": "", + "name": "Canister (Oxygen)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 64.0 + } + }, + "ItemGasCanisterPollutants": { + "prefab": { + "prefab_name": "ItemGasCanisterPollutants", + "prefab_hash": -1552586384, + "desc": "", + "name": "Canister (Pollutants)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 64.0 + } + }, + "ItemGasCanisterSmart": { + "prefab": { + "prefab_name": "ItemGasCanisterSmart", + "prefab_hash": -668314371, + "desc": "0.Mode0\n1.Mode1", + "name": "Gas Canister (Smart)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": { + "volume": 64.0 + } + }, + "ItemGasCanisterVolatiles": { + "prefab": { + "prefab_name": "ItemGasCanisterVolatiles", + "prefab_hash": -472094806, + "desc": "", + "name": "Canister (Volatiles)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 64.0 + } + }, + "ItemGasCanisterWater": { + "prefab": { + "prefab_name": "ItemGasCanisterWater", + "prefab_hash": -1854861891, + "desc": "", + "name": "Liquid Canister (Water)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "LiquidCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 12.1 + } + }, + "ItemGasFilterCarbonDioxide": { + "prefab": { + "prefab_name": "ItemGasFilterCarbonDioxide", + "prefab_hash": 1635000764, + "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.", + "name": "Filter (Carbon Dioxide)" + }, + "item": { + "consumable": false, + "filter_type": "CarbonDioxide", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterCarbonDioxideInfinite": { + "prefab": { + "prefab_name": "ItemGasFilterCarbonDioxideInfinite", + "prefab_hash": -185568964, + "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.", + "name": "Catalytic Filter (Carbon Dioxide)" + }, + "item": { + "consumable": false, + "filter_type": "CarbonDioxide", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterCarbonDioxideL": { + "prefab": { + "prefab_name": "ItemGasFilterCarbonDioxideL", + "prefab_hash": 1876847024, + "desc": "", + "name": "Heavy Filter (Carbon Dioxide)" + }, + "item": { + "consumable": false, + "filter_type": "CarbonDioxide", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterCarbonDioxideM": { + "prefab": { + "prefab_name": "ItemGasFilterCarbonDioxideM", + "prefab_hash": 416897318, + "desc": "", + "name": "Medium Filter (Carbon Dioxide)" + }, + "item": { + "consumable": false, + "filter_type": "CarbonDioxide", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterNitrogen": { + "prefab": { + "prefab_name": "ItemGasFilterNitrogen", + "prefab_hash": 632853248, + "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.", + "name": "Filter (Nitrogen)" + }, + "item": { + "consumable": false, + "filter_type": "Nitrogen", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterNitrogenInfinite": { + "prefab": { + "prefab_name": "ItemGasFilterNitrogenInfinite", + "prefab_hash": 152751131, + "desc": "A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", + "name": "Catalytic Filter (Nitrogen)" + }, + "item": { + "consumable": false, + "filter_type": "Nitrogen", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterNitrogenL": { + "prefab": { + "prefab_name": "ItemGasFilterNitrogenL", + "prefab_hash": -1387439451, + "desc": "", + "name": "Heavy Filter (Nitrogen)" + }, + "item": { + "consumable": false, + "filter_type": "Nitrogen", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterNitrogenM": { + "prefab": { + "prefab_name": "ItemGasFilterNitrogenM", + "prefab_hash": -632657357, + "desc": "", + "name": "Medium Filter (Nitrogen)" + }, + "item": { + "consumable": false, + "filter_type": "Nitrogen", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterNitrousOxide": { + "prefab": { + "prefab_name": "ItemGasFilterNitrousOxide", + "prefab_hash": -1247674305, + "desc": "", + "name": "Filter (Nitrous Oxide)" + }, + "item": { + "consumable": false, + "filter_type": "NitrousOxide", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterNitrousOxideInfinite": { + "prefab": { + "prefab_name": "ItemGasFilterNitrousOxideInfinite", + "prefab_hash": -123934842, + "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.", + "name": "Catalytic Filter (Nitrous Oxide)" + }, + "item": { + "consumable": false, + "filter_type": "NitrousOxide", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterNitrousOxideL": { + "prefab": { + "prefab_name": "ItemGasFilterNitrousOxideL", + "prefab_hash": 465267979, + "desc": "", + "name": "Heavy Filter (Nitrous Oxide)" + }, + "item": { + "consumable": false, + "filter_type": "NitrousOxide", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterNitrousOxideM": { + "prefab": { + "prefab_name": "ItemGasFilterNitrousOxideM", + "prefab_hash": 1824284061, + "desc": "", + "name": "Medium Filter (Nitrous Oxide)" + }, + "item": { + "consumable": false, + "filter_type": "NitrousOxide", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterOxygen": { + "prefab": { + "prefab_name": "ItemGasFilterOxygen", + "prefab_hash": -721824748, + "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).", + "name": "Filter (Oxygen)" + }, + "item": { + "consumable": false, + "filter_type": "Oxygen", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterOxygenInfinite": { + "prefab": { + "prefab_name": "ItemGasFilterOxygenInfinite", + "prefab_hash": -1055451111, + "desc": "A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", + "name": "Catalytic Filter (Oxygen)" + }, + "item": { + "consumable": false, + "filter_type": "Oxygen", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterOxygenL": { + "prefab": { + "prefab_name": "ItemGasFilterOxygenL", + "prefab_hash": -1217998945, + "desc": "", + "name": "Heavy Filter (Oxygen)" + }, + "item": { + "consumable": false, + "filter_type": "Oxygen", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterOxygenM": { + "prefab": { + "prefab_name": "ItemGasFilterOxygenM", + "prefab_hash": -1067319543, + "desc": "", + "name": "Medium Filter (Oxygen)" + }, + "item": { + "consumable": false, + "filter_type": "Oxygen", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterPollutants": { + "prefab": { + "prefab_name": "ItemGasFilterPollutants", + "prefab_hash": 1915566057, + "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.", + "name": "Filter (Pollutant)" + }, + "item": { + "consumable": false, + "filter_type": "Pollutant", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterPollutantsInfinite": { + "prefab": { + "prefab_name": "ItemGasFilterPollutantsInfinite", + "prefab_hash": -503738105, + "desc": "A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", + "name": "Catalytic Filter (Pollutants)" + }, + "item": { + "consumable": false, + "filter_type": "Pollutant", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterPollutantsL": { + "prefab": { + "prefab_name": "ItemGasFilterPollutantsL", + "prefab_hash": 1959564765, + "desc": "", + "name": "Heavy Filter (Pollutants)" + }, + "item": { + "consumable": false, + "filter_type": "Pollutant", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterPollutantsM": { + "prefab": { + "prefab_name": "ItemGasFilterPollutantsM", + "prefab_hash": 63677771, + "desc": "", + "name": "Medium Filter (Pollutants)" + }, + "item": { + "consumable": false, + "filter_type": "Pollutant", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterVolatiles": { + "prefab": { + "prefab_name": "ItemGasFilterVolatiles", + "prefab_hash": 15011598, + "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.", + "name": "Filter (Volatiles)" + }, + "item": { + "consumable": false, + "filter_type": "Volatiles", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterVolatilesInfinite": { + "prefab": { + "prefab_name": "ItemGasFilterVolatilesInfinite", + "prefab_hash": -1916176068, + "desc": "A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", + "name": "Catalytic Filter (Volatiles)" + }, + "item": { + "consumable": false, + "filter_type": "Volatiles", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterVolatilesL": { + "prefab": { + "prefab_name": "ItemGasFilterVolatilesL", + "prefab_hash": 1255156286, + "desc": "", + "name": "Heavy Filter (Volatiles)" + }, + "item": { + "consumable": false, + "filter_type": "Volatiles", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterVolatilesM": { + "prefab": { + "prefab_name": "ItemGasFilterVolatilesM", + "prefab_hash": 1037507240, + "desc": "", + "name": "Medium Filter (Volatiles)" + }, + "item": { + "consumable": false, + "filter_type": "Volatiles", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterWater": { + "prefab": { + "prefab_name": "ItemGasFilterWater", + "prefab_hash": -1993197973, + "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)", + "name": "Filter (Water)" + }, + "item": { + "consumable": false, + "filter_type": "Steam", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterWaterInfinite": { + "prefab": { + "prefab_name": "ItemGasFilterWaterInfinite", + "prefab_hash": -1678456554, + "desc": "A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", + "name": "Catalytic Filter (Water)" + }, + "item": { + "consumable": false, + "filter_type": "Steam", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterWaterL": { + "prefab": { + "prefab_name": "ItemGasFilterWaterL", + "prefab_hash": 2004969680, + "desc": "", + "name": "Heavy Filter (Water)" + }, + "item": { + "consumable": false, + "filter_type": "Steam", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasFilterWaterM": { + "prefab": { + "prefab_name": "ItemGasFilterWaterM", + "prefab_hash": 8804422, + "desc": "", + "name": "Medium Filter (Water)" + }, + "item": { + "consumable": false, + "filter_type": "Steam", + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "GasFilter", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasSensor": { + "prefab": { + "prefab_name": "ItemGasSensor", + "prefab_hash": 1717593480, + "desc": "", + "name": "Kit (Gas Sensor)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGasTankStorage": { + "prefab": { + "prefab_name": "ItemGasTankStorage", + "prefab_hash": -2113012215, + "desc": "This kit produces a Kit (Canister Storage) for refilling a Canister.", + "name": "Kit (Canister Storage)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGlassSheets": { + "prefab": { + "prefab_name": "ItemGlassSheets", + "prefab_hash": 1588896491, + "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.", + "name": "Glass Sheets" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "None", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGlasses": { + "prefab": { + "prefab_name": "ItemGlasses", + "prefab_hash": -1068925231, + "desc": "", + "name": "Glasses" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Glasses", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGoldIngot": { + "prefab": { + "prefab_name": "ItemGoldIngot", + "prefab_hash": 226410516, + "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. ", + "name": "Ingot (Gold)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Gold": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGoldOre": { + "prefab": { + "prefab_name": "ItemGoldOre", + "prefab_hash": -1348105509, + "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.", + "name": "Ore (Gold)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Gold": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemGrenade": { + "prefab": { + "prefab_name": "ItemGrenade", + "prefab_hash": 1544275894, + "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.", + "name": "Hand Grenade" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemHEMDroidRepairKit": { + "prefab": { + "prefab_name": "ItemHEMDroidRepairKit", + "prefab_hash": 470636008, + "desc": "Repairs damaged HEM-Droids to full health.", + "name": "HEMDroid Repair Kit" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemHardBackpack": { + "prefab": { + "prefab_name": "ItemHardBackpack", + "prefab_hash": 374891127, + "desc": "This backpack can be useful when you are working inside and don't need to fly around.", + "name": "Hardsuit Backpack" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Back", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": 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" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, + "ItemHardJetpack": { + "prefab": { + "prefab_name": "ItemHardJetpack", + "prefab_hash": -412551656, + "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.", + "name": "Hardsuit Jetpack" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Back", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Activate": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "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" + } + ] + }, + "ItemHardMiningBackPack": { + "prefab": { + "prefab_name": "ItemHardMiningBackPack", + "prefab_hash": 900366130, + "desc": "", + "name": "Hard Mining Backpack" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Back", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "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" + } + ] + }, + "ItemHardSuit": { + "prefab": { + "prefab_name": "ItemHardSuit", + "prefab_hash": -1758310454, + "desc": "Connects to Logic Transmitter", + "name": "Hardsuit" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Suit", + "sorting_class": "Clothing" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 10.0 + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": true, + "circuit_holder": true + }, + "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" + } + ], + "suit_info": { + "hygine_reduction_multiplier": 1.5, + "waste_max_pressure": 4053.0 + }, + "memory": { + "instructions": null, + "memory_access": "ReadWrite", + "memory_size": 0 + } + }, + "ItemHardsuitHelmet": { + "prefab": { + "prefab_name": "ItemHardsuitHelmet", + "prefab_hash": -84573099, + "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.", + "name": "Hardsuit Helmet" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Helmet", + "sorting_class": "Clothing" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": { + "volume": 3.0 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "ItemHastelloyIngot": { + "prefab": { + "prefab_name": "ItemHastelloyIngot", + "prefab_hash": 1579842814, + "desc": "", + "name": "Ingot (Hastelloy)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Hastelloy": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemHat": { + "prefab": { + "prefab_name": "ItemHat", + "prefab_hash": 299189339, + "desc": "As the name suggests, this is a hat.", + "name": "Hat" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Helmet", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemHighVolumeGasCanisterEmpty": { + "prefab": { + "prefab_name": "ItemHighVolumeGasCanisterEmpty", + "prefab_hash": 998653377, + "desc": "", + "name": "High Volume Gas Canister" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 83.0 + } + }, + "ItemHorticultureBelt": { + "prefab": { + "prefab_name": "ItemHorticultureBelt", + "prefab_hash": -1117581553, + "desc": "", + "name": "Horticulture Belt" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Belt", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "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" + } + ] + }, + "ItemHydroponicTray": { + "prefab": { + "prefab_name": "ItemHydroponicTray", + "prefab_hash": -1193543727, + "desc": "This kits creates a Hydroponics Tray for growing various plants.", + "name": "Kit (Hydroponic Tray)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemIce": { + "prefab": { + "prefab_name": "ItemIce", + "prefab_hash": 1217489948, + "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.", + "name": "Ice (Water)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemIgniter": { + "prefab": { + "prefab_name": "ItemIgniter", + "prefab_hash": 890106742, + "desc": "This kit creates an Kit (Igniter) unit.", + "name": "Kit (Igniter)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemInconelIngot": { + "prefab": { + "prefab_name": "ItemInconelIngot", + "prefab_hash": -787796599, + "desc": "", + "name": "Ingot (Inconel)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Inconel": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemInsulation": { + "prefab": { + "prefab_name": "ItemInsulation", + "prefab_hash": 897176943, + "desc": "Mysterious in the extreme, the function of this item is lost to the ages.", + "name": "Insulation" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemIntegratedCircuit10": { + "prefab": { + "prefab_name": "ItemIntegratedCircuit10", + "prefab_hash": -744098481, + "desc": "", + "name": "Integrated Circuit (IC10)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "ProgrammableChip", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "LineNumber": "Read", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "memory": { + "instructions": null, + "memory_access": "ReadWrite", + "memory_size": 512 + } + }, + "ItemInvarIngot": { + "prefab": { + "prefab_name": "ItemInvarIngot", + "prefab_hash": -297990285, + "desc": "", + "name": "Ingot (Invar)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Invar": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemIronFrames": { + "prefab": { + "prefab_name": "ItemIronFrames", + "prefab_hash": 1225836666, + "desc": "", + "name": "Iron Frames" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 30, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemIronIngot": { + "prefab": { + "prefab_name": "ItemIronIngot", + "prefab_hash": -1301215609, + "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.", + "name": "Ingot (Iron)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Iron": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemIronOre": { + "prefab": { + "prefab_name": "ItemIronOre", + "prefab_hash": 1758427767, + "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.", + "name": "Ore (Iron)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Iron": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemIronSheets": { + "prefab": { + "prefab_name": "ItemIronSheets", + "prefab_hash": -487378546, + "desc": "", + "name": "Iron Sheets" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "None", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemJetpackBasic": { + "prefab": { + "prefab_name": "ItemJetpackBasic", + "prefab_hash": 1969189000, + "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.", + "name": "Jetpack Basic" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Back", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Activate": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "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" + } + ] + }, + "ItemKitAIMeE": { + "prefab": { + "prefab_name": "ItemKitAIMeE", + "prefab_hash": 496830914, + "desc": "", + "name": "Kit (AIMeE)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitAccessBridge": { + "prefab": { + "prefab_name": "ItemKitAccessBridge", + "prefab_hash": 513258369, + "desc": "", + "name": "Kit (Access Bridge)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitAdvancedComposter": { + "prefab": { + "prefab_name": "ItemKitAdvancedComposter", + "prefab_hash": -1431998347, + "desc": "", + "name": "Kit (Advanced Composter)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitAdvancedFurnace": { + "prefab": { + "prefab_name": "ItemKitAdvancedFurnace", + "prefab_hash": -616758353, + "desc": "", + "name": "Kit (Advanced Furnace)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitAdvancedPackagingMachine": { + "prefab": { + "prefab_name": "ItemKitAdvancedPackagingMachine", + "prefab_hash": -598545233, + "desc": "", + "name": "Kit (Advanced Packaging Machine)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitAirlock": { + "prefab": { + "prefab_name": "ItemKitAirlock", + "prefab_hash": 964043875, + "desc": "", + "name": "Kit (Airlock)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitAirlockGate": { + "prefab": { + "prefab_name": "ItemKitAirlockGate", + "prefab_hash": 682546947, + "desc": "", + "name": "Kit (Hangar Door)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitArcFurnace": { + "prefab": { + "prefab_name": "ItemKitArcFurnace", + "prefab_hash": -98995857, + "desc": "", + "name": "Kit (Arc Furnace)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitAtmospherics": { + "prefab": { + "prefab_name": "ItemKitAtmospherics", + "prefab_hash": 1222286371, + "desc": "", + "name": "Kit (Atmospherics)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitAutoMinerSmall": { + "prefab": { + "prefab_name": "ItemKitAutoMinerSmall", + "prefab_hash": 1668815415, + "desc": "", + "name": "Kit (Autominer Small)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitAutolathe": { + "prefab": { + "prefab_name": "ItemKitAutolathe", + "prefab_hash": -1753893214, + "desc": "", + "name": "Kit (Autolathe)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitAutomatedOven": { + "prefab": { + "prefab_name": "ItemKitAutomatedOven", + "prefab_hash": -1931958659, + "desc": "", + "name": "Kit (Automated Oven)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitBasket": { + "prefab": { + "prefab_name": "ItemKitBasket", + "prefab_hash": 148305004, + "desc": "", + "name": "Kit (Basket)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitBattery": { + "prefab": { + "prefab_name": "ItemKitBattery", + "prefab_hash": 1406656973, + "desc": "", + "name": "Kit (Battery)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitBatteryLarge": { + "prefab": { + "prefab_name": "ItemKitBatteryLarge", + "prefab_hash": -21225041, + "desc": "", + "name": "Kit (Battery Large)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitBeacon": { + "prefab": { + "prefab_name": "ItemKitBeacon", + "prefab_hash": 249073136, + "desc": "", + "name": "Kit (Beacon)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitBeds": { + "prefab": { + "prefab_name": "ItemKitBeds", + "prefab_hash": -1241256797, + "desc": "", + "name": "Kit (Beds)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitBlastDoor": { + "prefab": { + "prefab_name": "ItemKitBlastDoor", + "prefab_hash": -1755116240, + "desc": "", + "name": "Kit (Blast Door)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitCentrifuge": { + "prefab": { + "prefab_name": "ItemKitCentrifuge", + "prefab_hash": 578182956, + "desc": "", + "name": "Kit (Centrifuge)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitChairs": { + "prefab": { + "prefab_name": "ItemKitChairs", + "prefab_hash": -1394008073, + "desc": "", + "name": "Kit (Chairs)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitChute": { + "prefab": { + "prefab_name": "ItemKitChute", + "prefab_hash": 1025254665, + "desc": "", + "name": "Kit (Basic Chutes)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitChuteUmbilical": { + "prefab": { + "prefab_name": "ItemKitChuteUmbilical", + "prefab_hash": -876560854, + "desc": "", + "name": "Kit (Chute Umbilical)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitCompositeCladding": { + "prefab": { + "prefab_name": "ItemKitCompositeCladding", + "prefab_hash": -1470820996, + "desc": "", + "name": "Kit (Cladding)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitCompositeFloorGrating": { + "prefab": { + "prefab_name": "ItemKitCompositeFloorGrating", + "prefab_hash": 1182412869, + "desc": "", + "name": "Kit (Floor Grating)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitComputer": { + "prefab": { + "prefab_name": "ItemKitComputer", + "prefab_hash": 1990225489, + "desc": "", + "name": "Kit (Computer)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitConsole": { + "prefab": { + "prefab_name": "ItemKitConsole", + "prefab_hash": -1241851179, + "desc": "", + "name": "Kit (Consoles)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitCrate": { + "prefab": { + "prefab_name": "ItemKitCrate", + "prefab_hash": 429365598, + "desc": "", + "name": "Kit (Crate)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitCrateMkII": { + "prefab": { + "prefab_name": "ItemKitCrateMkII", + "prefab_hash": -1585956426, + "desc": "", + "name": "Kit (Crate Mk II)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitCrateMount": { + "prefab": { + "prefab_name": "ItemKitCrateMount", + "prefab_hash": -551612946, + "desc": "", + "name": "Kit (Container Mount)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitCryoTube": { + "prefab": { + "prefab_name": "ItemKitCryoTube", + "prefab_hash": -545234195, + "desc": "", + "name": "Kit (Cryo Tube)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitDeepMiner": { + "prefab": { + "prefab_name": "ItemKitDeepMiner", + "prefab_hash": -1935075707, + "desc": "", + "name": "Kit (Deep Miner)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitDockingPort": { + "prefab": { + "prefab_name": "ItemKitDockingPort", + "prefab_hash": 77421200, + "desc": "", + "name": "Kit (Docking Port)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitDoor": { + "prefab": { + "prefab_name": "ItemKitDoor", + "prefab_hash": 168615924, + "desc": "", + "name": "Kit (Door)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitDrinkingFountain": { + "prefab": { + "prefab_name": "ItemKitDrinkingFountain", + "prefab_hash": -1743663875, + "desc": "", + "name": "Kit (Drinking Fountain)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitDynamicCanister": { + "prefab": { + "prefab_name": "ItemKitDynamicCanister", + "prefab_hash": -1061945368, + "desc": "", + "name": "Kit (Portable Gas Tank)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitDynamicGasTankAdvanced": { + "prefab": { + "prefab_name": "ItemKitDynamicGasTankAdvanced", + "prefab_hash": 1533501495, + "desc": "", + "name": "Kit (Portable Gas Tank Mk II)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitDynamicGenerator": { + "prefab": { + "prefab_name": "ItemKitDynamicGenerator", + "prefab_hash": -732720413, + "desc": "", + "name": "Kit (Portable Generator)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitDynamicHydroponics": { + "prefab": { + "prefab_name": "ItemKitDynamicHydroponics", + "prefab_hash": -1861154222, + "desc": "", + "name": "Kit (Portable Hydroponics)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitDynamicLiquidCanister": { + "prefab": { + "prefab_name": "ItemKitDynamicLiquidCanister", + "prefab_hash": 375541286, + "desc": "", + "name": "Kit (Portable Liquid Tank)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitDynamicMKIILiquidCanister": { + "prefab": { + "prefab_name": "ItemKitDynamicMKIILiquidCanister", + "prefab_hash": -638019974, + "desc": "", + "name": "Kit (Portable Liquid Tank Mk II)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitElectricUmbilical": { + "prefab": { + "prefab_name": "ItemKitElectricUmbilical", + "prefab_hash": 1603046970, + "desc": "", + "name": "Kit (Power Umbilical)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitElectronicsPrinter": { + "prefab": { + "prefab_name": "ItemKitElectronicsPrinter", + "prefab_hash": -1181922382, + "desc": "", + "name": "Kit (Electronics Printer)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitElevator": { + "prefab": { + "prefab_name": "ItemKitElevator", + "prefab_hash": -945806652, + "desc": "", + "name": "Kit (Elevator)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitEngineLarge": { + "prefab": { + "prefab_name": "ItemKitEngineLarge", + "prefab_hash": 755302726, + "desc": "", + "name": "Kit (Engine Large)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitEngineMedium": { + "prefab": { + "prefab_name": "ItemKitEngineMedium", + "prefab_hash": 1969312177, + "desc": "", + "name": "Kit (Engine Medium)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitEngineSmall": { + "prefab": { + "prefab_name": "ItemKitEngineSmall", + "prefab_hash": 19645163, + "desc": "", + "name": "Kit (Engine Small)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitEvaporationChamber": { + "prefab": { + "prefab_name": "ItemKitEvaporationChamber", + "prefab_hash": 1587787610, + "desc": "", + "name": "Kit (Phase Change Device)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitFlagODA": { + "prefab": { + "prefab_name": "ItemKitFlagODA", + "prefab_hash": 1701764190, + "desc": "", + "name": "Kit (ODA Flag)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitFridgeBig": { + "prefab": { + "prefab_name": "ItemKitFridgeBig", + "prefab_hash": -1168199498, + "desc": "", + "name": "Kit (Fridge Large)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitFridgeSmall": { + "prefab": { + "prefab_name": "ItemKitFridgeSmall", + "prefab_hash": 1661226524, + "desc": "", + "name": "Kit (Fridge Small)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitFurnace": { + "prefab": { + "prefab_name": "ItemKitFurnace", + "prefab_hash": -806743925, + "desc": "", + "name": "Kit (Furnace)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitFurniture": { + "prefab": { + "prefab_name": "ItemKitFurniture", + "prefab_hash": 1162905029, + "desc": "", + "name": "Kit (Furniture)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitFuselage": { + "prefab": { + "prefab_name": "ItemKitFuselage", + "prefab_hash": -366262681, + "desc": "", + "name": "Kit (Fuselage)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitGasGenerator": { + "prefab": { + "prefab_name": "ItemKitGasGenerator", + "prefab_hash": 377745425, + "desc": "", + "name": "Kit (Gas Fuel Generator)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitGasUmbilical": { + "prefab": { + "prefab_name": "ItemKitGasUmbilical", + "prefab_hash": -1867280568, + "desc": "", + "name": "Kit (Gas Umbilical)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitGovernedGasRocketEngine": { + "prefab": { + "prefab_name": "ItemKitGovernedGasRocketEngine", + "prefab_hash": 206848766, + "desc": "", + "name": "Kit (Pumped Gas Rocket Engine)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitGroundTelescope": { + "prefab": { + "prefab_name": "ItemKitGroundTelescope", + "prefab_hash": -2140672772, + "desc": "", + "name": "Kit (Telescope)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitGrowLight": { + "prefab": { + "prefab_name": "ItemKitGrowLight", + "prefab_hash": 341030083, + "desc": "", + "name": "Kit (Grow Light)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitHarvie": { + "prefab": { + "prefab_name": "ItemKitHarvie", + "prefab_hash": -1022693454, + "desc": "", + "name": "Kit (Harvie)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitHeatExchanger": { + "prefab": { + "prefab_name": "ItemKitHeatExchanger", + "prefab_hash": -1710540039, + "desc": "", + "name": "Kit Heat Exchanger" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitHorizontalAutoMiner": { + "prefab": { + "prefab_name": "ItemKitHorizontalAutoMiner", + "prefab_hash": 844391171, + "desc": "", + "name": "Kit (OGRE)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitHydraulicPipeBender": { + "prefab": { + "prefab_name": "ItemKitHydraulicPipeBender", + "prefab_hash": -2098556089, + "desc": "", + "name": "Kit (Hydraulic Pipe Bender)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitHydroponicAutomated": { + "prefab": { + "prefab_name": "ItemKitHydroponicAutomated", + "prefab_hash": -927931558, + "desc": "", + "name": "Kit (Automated Hydroponics)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitHydroponicStation": { + "prefab": { + "prefab_name": "ItemKitHydroponicStation", + "prefab_hash": 2057179799, + "desc": "", + "name": "Kit (Hydroponic Station)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitIceCrusher": { + "prefab": { + "prefab_name": "ItemKitIceCrusher", + "prefab_hash": 288111533, + "desc": "", + "name": "Kit (Ice Crusher)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitInsulatedLiquidPipe": { + "prefab": { + "prefab_name": "ItemKitInsulatedLiquidPipe", + "prefab_hash": 2067655311, + "desc": "", + "name": "Kit (Insulated Liquid Pipe)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 20, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitInsulatedPipe": { + "prefab": { + "prefab_name": "ItemKitInsulatedPipe", + "prefab_hash": 452636699, + "desc": "", + "name": "Kit (Insulated Pipe)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 20, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitInsulatedPipeUtility": { + "prefab": { + "prefab_name": "ItemKitInsulatedPipeUtility", + "prefab_hash": -27284803, + "desc": "", + "name": "Kit (Insulated Pipe Utility Gas)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitInsulatedPipeUtilityLiquid": { + "prefab": { + "prefab_name": "ItemKitInsulatedPipeUtilityLiquid", + "prefab_hash": -1831558953, + "desc": "", + "name": "Kit (Insulated Pipe Utility Liquid)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitInteriorDoors": { + "prefab": { + "prefab_name": "ItemKitInteriorDoors", + "prefab_hash": 1935945891, + "desc": "", + "name": "Kit (Interior Doors)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLadder": { + "prefab": { + "prefab_name": "ItemKitLadder", + "prefab_hash": 489494578, + "desc": "", + "name": "Kit (Ladder)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLandingPadAtmos": { + "prefab": { + "prefab_name": "ItemKitLandingPadAtmos", + "prefab_hash": 1817007843, + "desc": "", + "name": "Kit (Landing Pad Atmospherics)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLandingPadBasic": { + "prefab": { + "prefab_name": "ItemKitLandingPadBasic", + "prefab_hash": 293581318, + "desc": "", + "name": "Kit (Landing Pad Basic)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLandingPadWaypoint": { + "prefab": { + "prefab_name": "ItemKitLandingPadWaypoint", + "prefab_hash": -1267511065, + "desc": "", + "name": "Kit (Landing Pad Runway)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLargeDirectHeatExchanger": { + "prefab": { + "prefab_name": "ItemKitLargeDirectHeatExchanger", + "prefab_hash": 450164077, + "desc": "", + "name": "Kit (Large Direct Heat Exchanger)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLargeExtendableRadiator": { + "prefab": { + "prefab_name": "ItemKitLargeExtendableRadiator", + "prefab_hash": 847430620, + "desc": "", + "name": "Kit (Large Extendable Radiator)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLargeSatelliteDish": { + "prefab": { + "prefab_name": "ItemKitLargeSatelliteDish", + "prefab_hash": -2039971217, + "desc": "", + "name": "Kit (Large Satellite Dish)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLaunchMount": { + "prefab": { + "prefab_name": "ItemKitLaunchMount", + "prefab_hash": -1854167549, + "desc": "", + "name": "Kit (Launch Mount)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLaunchTower": { + "prefab": { + "prefab_name": "ItemKitLaunchTower", + "prefab_hash": -174523552, + "desc": "", + "name": "Kit (Rocket Launch Tower)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLiquidRegulator": { + "prefab": { + "prefab_name": "ItemKitLiquidRegulator", + "prefab_hash": 1951126161, + "desc": "", + "name": "Kit (Liquid Regulator)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLiquidTank": { + "prefab": { + "prefab_name": "ItemKitLiquidTank", + "prefab_hash": -799849305, + "desc": "", + "name": "Kit (Liquid Tank)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLiquidTankInsulated": { + "prefab": { + "prefab_name": "ItemKitLiquidTankInsulated", + "prefab_hash": 617773453, + "desc": "", + "name": "Kit (Insulated Liquid Tank)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLiquidTurboVolumePump": { + "prefab": { + "prefab_name": "ItemKitLiquidTurboVolumePump", + "prefab_hash": -1805020897, + "desc": "", + "name": "Kit (Turbo Volume Pump - Liquid)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLiquidUmbilical": { + "prefab": { + "prefab_name": "ItemKitLiquidUmbilical", + "prefab_hash": 1571996765, + "desc": "", + "name": "Kit (Liquid Umbilical)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLocker": { + "prefab": { + "prefab_name": "ItemKitLocker", + "prefab_hash": 882301399, + "desc": "", + "name": "Kit (Locker)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLogicCircuit": { + "prefab": { + "prefab_name": "ItemKitLogicCircuit", + "prefab_hash": 1512322581, + "desc": "", + "name": "Kit (IC Housing)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLogicInputOutput": { + "prefab": { + "prefab_name": "ItemKitLogicInputOutput", + "prefab_hash": 1997293610, + "desc": "", + "name": "Kit (Logic I/O)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLogicMemory": { + "prefab": { + "prefab_name": "ItemKitLogicMemory", + "prefab_hash": -2098214189, + "desc": "", + "name": "Kit (Logic Memory)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLogicProcessor": { + "prefab": { + "prefab_name": "ItemKitLogicProcessor", + "prefab_hash": 220644373, + "desc": "", + "name": "Kit (Logic Processor)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLogicSwitch": { + "prefab": { + "prefab_name": "ItemKitLogicSwitch", + "prefab_hash": 124499454, + "desc": "", + "name": "Kit (Logic Switch)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitLogicTransmitter": { + "prefab": { + "prefab_name": "ItemKitLogicTransmitter", + "prefab_hash": 1005397063, + "desc": "", + "name": "Kit (Logic Transmitter)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitMotherShipCore": { + "prefab": { + "prefab_name": "ItemKitMotherShipCore", + "prefab_hash": -344968335, + "desc": "", + "name": "Kit (Mothership)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitMusicMachines": { + "prefab": { + "prefab_name": "ItemKitMusicMachines", + "prefab_hash": -2038889137, + "desc": "", + "name": "Kit (Music Machines)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPassiveLargeRadiatorGas": { + "prefab": { + "prefab_name": "ItemKitPassiveLargeRadiatorGas", + "prefab_hash": -1752768283, + "desc": "", + "name": "Kit (Medium Radiator)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPassiveLargeRadiatorLiquid": { + "prefab": { + "prefab_name": "ItemKitPassiveLargeRadiatorLiquid", + "prefab_hash": 1453961898, + "desc": "", + "name": "Kit (Medium Radiator Liquid)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPassthroughHeatExchanger": { + "prefab": { + "prefab_name": "ItemKitPassthroughHeatExchanger", + "prefab_hash": 636112787, + "desc": "", + "name": "Kit (CounterFlow Heat Exchanger)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPictureFrame": { + "prefab": { + "prefab_name": "ItemKitPictureFrame", + "prefab_hash": -2062364768, + "desc": "", + "name": "Kit Picture Frame" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPipe": { + "prefab": { + "prefab_name": "ItemKitPipe", + "prefab_hash": -1619793705, + "desc": "", + "name": "Kit (Pipe)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 20, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPipeLiquid": { + "prefab": { + "prefab_name": "ItemKitPipeLiquid", + "prefab_hash": -1166461357, + "desc": "", + "name": "Kit (Liquid Pipe)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 20, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPipeOrgan": { + "prefab": { + "prefab_name": "ItemKitPipeOrgan", + "prefab_hash": -827125300, + "desc": "", + "name": "Kit (Pipe Organ)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPipeRadiator": { + "prefab": { + "prefab_name": "ItemKitPipeRadiator", + "prefab_hash": 920411066, + "desc": "", + "name": "Kit (Pipe Radiator)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPipeRadiatorLiquid": { + "prefab": { + "prefab_name": "ItemKitPipeRadiatorLiquid", + "prefab_hash": -1697302609, + "desc": "", + "name": "Kit (Pipe Radiator Liquid)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPipeUtility": { + "prefab": { + "prefab_name": "ItemKitPipeUtility", + "prefab_hash": 1934508338, + "desc": "", + "name": "Kit (Pipe Utility Gas)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPipeUtilityLiquid": { + "prefab": { + "prefab_name": "ItemKitPipeUtilityLiquid", + "prefab_hash": 595478589, + "desc": "", + "name": "Kit (Pipe Utility Liquid)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPlanter": { + "prefab": { + "prefab_name": "ItemKitPlanter", + "prefab_hash": 119096484, + "desc": "", + "name": "Kit (Planter)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPortablesConnector": { + "prefab": { + "prefab_name": "ItemKitPortablesConnector", + "prefab_hash": 1041148999, + "desc": "", + "name": "Kit (Portables Connector)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPowerTransmitter": { + "prefab": { + "prefab_name": "ItemKitPowerTransmitter", + "prefab_hash": 291368213, + "desc": "", + "name": "Kit (Power Transmitter)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPowerTransmitterOmni": { + "prefab": { + "prefab_name": "ItemKitPowerTransmitterOmni", + "prefab_hash": -831211676, + "desc": "", + "name": "Kit (Power Transmitter Omni)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPoweredVent": { + "prefab": { + "prefab_name": "ItemKitPoweredVent", + "prefab_hash": 2015439334, + "desc": "", + "name": "Kit (Powered Vent)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPressureFedGasEngine": { + "prefab": { + "prefab_name": "ItemKitPressureFedGasEngine", + "prefab_hash": -121514007, + "desc": "", + "name": "Kit (Pressure Fed Gas Engine)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPressureFedLiquidEngine": { + "prefab": { + "prefab_name": "ItemKitPressureFedLiquidEngine", + "prefab_hash": -99091572, + "desc": "", + "name": "Kit (Pressure Fed Liquid Engine)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPressurePlate": { + "prefab": { + "prefab_name": "ItemKitPressurePlate", + "prefab_hash": 123504691, + "desc": "", + "name": "Kit (Trigger Plate)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitPumpedLiquidEngine": { + "prefab": { + "prefab_name": "ItemKitPumpedLiquidEngine", + "prefab_hash": 1921918951, + "desc": "", + "name": "Kit (Pumped Liquid Engine)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitRailing": { + "prefab": { + "prefab_name": "ItemKitRailing", + "prefab_hash": 750176282, + "desc": "", + "name": "Kit (Railing)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitRecycler": { + "prefab": { + "prefab_name": "ItemKitRecycler", + "prefab_hash": 849148192, + "desc": "", + "name": "Kit (Recycler)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitRegulator": { + "prefab": { + "prefab_name": "ItemKitRegulator", + "prefab_hash": 1181371795, + "desc": "", + "name": "Kit (Pressure Regulator)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitReinforcedWindows": { + "prefab": { + "prefab_name": "ItemKitReinforcedWindows", + "prefab_hash": 1459985302, + "desc": "", + "name": "Kit (Reinforced Windows)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitResearchMachine": { + "prefab": { + "prefab_name": "ItemKitResearchMachine", + "prefab_hash": 724776762, + "desc": "", + "name": "Kit Research Machine" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitRespawnPointWallMounted": { + "prefab": { + "prefab_name": "ItemKitRespawnPointWallMounted", + "prefab_hash": 1574688481, + "desc": "", + "name": "Kit (Respawn)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitRocketAvionics": { + "prefab": { + "prefab_name": "ItemKitRocketAvionics", + "prefab_hash": 1396305045, + "desc": "", + "name": "Kit (Avionics)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitRocketBattery": { + "prefab": { + "prefab_name": "ItemKitRocketBattery", + "prefab_hash": -314072139, + "desc": "", + "name": "Kit (Rocket Battery)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitRocketCargoStorage": { + "prefab": { + "prefab_name": "ItemKitRocketCargoStorage", + "prefab_hash": 479850239, + "desc": "", + "name": "Kit (Rocket Cargo Storage)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitRocketCelestialTracker": { + "prefab": { + "prefab_name": "ItemKitRocketCelestialTracker", + "prefab_hash": -303008602, + "desc": "", + "name": "Kit (Rocket Celestial Tracker)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitRocketCircuitHousing": { + "prefab": { + "prefab_name": "ItemKitRocketCircuitHousing", + "prefab_hash": 721251202, + "desc": "", + "name": "Kit (Rocket Circuit Housing)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitRocketDatalink": { + "prefab": { + "prefab_name": "ItemKitRocketDatalink", + "prefab_hash": -1256996603, + "desc": "", + "name": "Kit (Rocket Datalink)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitRocketGasFuelTank": { + "prefab": { + "prefab_name": "ItemKitRocketGasFuelTank", + "prefab_hash": -1629347579, + "desc": "", + "name": "Kit (Rocket Gas Fuel Tank)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitRocketLiquidFuelTank": { + "prefab": { + "prefab_name": "ItemKitRocketLiquidFuelTank", + "prefab_hash": 2032027950, + "desc": "", + "name": "Kit (Rocket Liquid Fuel Tank)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitRocketManufactory": { + "prefab": { + "prefab_name": "ItemKitRocketManufactory", + "prefab_hash": -636127860, + "desc": "", + "name": "Kit (Rocket Manufactory)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitRocketMiner": { + "prefab": { + "prefab_name": "ItemKitRocketMiner", + "prefab_hash": -867969909, + "desc": "", + "name": "Kit (Rocket Miner)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitRocketScanner": { + "prefab": { + "prefab_name": "ItemKitRocketScanner", + "prefab_hash": 1753647154, + "desc": "", + "name": "Kit (Rocket Scanner)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitRocketTransformerSmall": { + "prefab": { + "prefab_name": "ItemKitRocketTransformerSmall", + "prefab_hash": -932335800, + "desc": "", + "name": "Kit (Transformer Small (Rocket))" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitRoverFrame": { + "prefab": { + "prefab_name": "ItemKitRoverFrame", + "prefab_hash": 1827215803, + "desc": "", + "name": "Kit (Rover Frame)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitRoverMKI": { + "prefab": { + "prefab_name": "ItemKitRoverMKI", + "prefab_hash": 197243872, + "desc": "", + "name": "Kit (Rover Mk I)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitSDBHopper": { + "prefab": { + "prefab_name": "ItemKitSDBHopper", + "prefab_hash": 323957548, + "desc": "", + "name": "Kit (SDB Hopper)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitSatelliteDish": { + "prefab": { + "prefab_name": "ItemKitSatelliteDish", + "prefab_hash": 178422810, + "desc": "", + "name": "Kit (Medium Satellite Dish)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitSecurityPrinter": { + "prefab": { + "prefab_name": "ItemKitSecurityPrinter", + "prefab_hash": 578078533, + "desc": "", + "name": "Kit (Security Printer)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitSensor": { + "prefab": { + "prefab_name": "ItemKitSensor", + "prefab_hash": -1776897113, + "desc": "", + "name": "Kit (Sensors)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitShower": { + "prefab": { + "prefab_name": "ItemKitShower", + "prefab_hash": 735858725, + "desc": "", + "name": "Kit (Shower)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitSign": { + "prefab": { + "prefab_name": "ItemKitSign", + "prefab_hash": 529996327, + "desc": "", + "name": "Kit (Sign)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitSleeper": { + "prefab": { + "prefab_name": "ItemKitSleeper", + "prefab_hash": 326752036, + "desc": "", + "name": "Kit (Sleeper)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitSmallDirectHeatExchanger": { + "prefab": { + "prefab_name": "ItemKitSmallDirectHeatExchanger", + "prefab_hash": -1332682164, + "desc": "", + "name": "Kit (Small Direct Heat Exchanger)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitSmallSatelliteDish": { + "prefab": { + "prefab_name": "ItemKitSmallSatelliteDish", + "prefab_hash": 1960952220, + "desc": "", + "name": "Kit (Small Satellite Dish)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitSolarPanel": { + "prefab": { + "prefab_name": "ItemKitSolarPanel", + "prefab_hash": -1924492105, + "desc": "", + "name": "Kit (Solar Panel)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitSolarPanelBasic": { + "prefab": { + "prefab_name": "ItemKitSolarPanelBasic", + "prefab_hash": 844961456, + "desc": "", + "name": "Kit (Solar Panel Basic)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitSolarPanelBasicReinforced": { + "prefab": { + "prefab_name": "ItemKitSolarPanelBasicReinforced", + "prefab_hash": -528695432, + "desc": "", + "name": "Kit (Solar Panel Basic Heavy)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitSolarPanelReinforced": { + "prefab": { + "prefab_name": "ItemKitSolarPanelReinforced", + "prefab_hash": -364868685, + "desc": "", + "name": "Kit (Solar Panel Heavy)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitSolidGenerator": { + "prefab": { + "prefab_name": "ItemKitSolidGenerator", + "prefab_hash": 1293995736, + "desc": "", + "name": "Kit (Solid Generator)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitSorter": { + "prefab": { + "prefab_name": "ItemKitSorter", + "prefab_hash": 969522478, + "desc": "", + "name": "Kit (Sorter)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitSpeaker": { + "prefab": { + "prefab_name": "ItemKitSpeaker", + "prefab_hash": -126038526, + "desc": "", + "name": "Kit (Speaker)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitStacker": { + "prefab": { + "prefab_name": "ItemKitStacker", + "prefab_hash": 1013244511, + "desc": "", + "name": "Kit (Stacker)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitStairs": { + "prefab": { + "prefab_name": "ItemKitStairs", + "prefab_hash": 170878959, + "desc": "", + "name": "Kit (Stairs)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitStairwell": { + "prefab": { + "prefab_name": "ItemKitStairwell", + "prefab_hash": -1868555784, + "desc": "", + "name": "Kit (Stairwell)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitStandardChute": { + "prefab": { + "prefab_name": "ItemKitStandardChute", + "prefab_hash": 2133035682, + "desc": "", + "name": "Kit (Powered Chutes)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitStirlingEngine": { + "prefab": { + "prefab_name": "ItemKitStirlingEngine", + "prefab_hash": -1821571150, + "desc": "", + "name": "Kit (Stirling Engine)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitSuitStorage": { + "prefab": { + "prefab_name": "ItemKitSuitStorage", + "prefab_hash": 1088892825, + "desc": "", + "name": "Kit (Suit Storage)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitTables": { + "prefab": { + "prefab_name": "ItemKitTables", + "prefab_hash": -1361598922, + "desc": "", + "name": "Kit (Tables)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitTank": { + "prefab": { + "prefab_name": "ItemKitTank", + "prefab_hash": 771439840, + "desc": "", + "name": "Kit (Tank)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitTankInsulated": { + "prefab": { + "prefab_name": "ItemKitTankInsulated", + "prefab_hash": 1021053608, + "desc": "", + "name": "Kit (Tank Insulated)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitToolManufactory": { + "prefab": { + "prefab_name": "ItemKitToolManufactory", + "prefab_hash": 529137748, + "desc": "", + "name": "Kit (Tool Manufactory)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitTransformer": { + "prefab": { + "prefab_name": "ItemKitTransformer", + "prefab_hash": -453039435, + "desc": "", + "name": "Kit (Transformer Large)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitTransformerSmall": { + "prefab": { + "prefab_name": "ItemKitTransformerSmall", + "prefab_hash": 665194284, + "desc": "", + "name": "Kit (Transformer Small)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitTurbineGenerator": { + "prefab": { + "prefab_name": "ItemKitTurbineGenerator", + "prefab_hash": -1590715731, + "desc": "", + "name": "Kit (Turbine Generator)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitTurboVolumePump": { + "prefab": { + "prefab_name": "ItemKitTurboVolumePump", + "prefab_hash": -1248429712, + "desc": "", + "name": "Kit (Turbo Volume Pump - Gas)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitUprightWindTurbine": { + "prefab": { + "prefab_name": "ItemKitUprightWindTurbine", + "prefab_hash": -1798044015, + "desc": "", + "name": "Kit (Upright Wind Turbine)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitVendingMachine": { + "prefab": { + "prefab_name": "ItemKitVendingMachine", + "prefab_hash": -2038384332, + "desc": "", + "name": "Kit (Vending Machine)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitVendingMachineRefrigerated": { + "prefab": { + "prefab_name": "ItemKitVendingMachineRefrigerated", + "prefab_hash": -1867508561, + "desc": "", + "name": "Kit (Vending Machine Refrigerated)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitWall": { + "prefab": { + "prefab_name": "ItemKitWall", + "prefab_hash": -1826855889, + "desc": "", + "name": "Kit (Wall)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 30, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitWallArch": { + "prefab": { + "prefab_name": "ItemKitWallArch", + "prefab_hash": 1625214531, + "desc": "", + "name": "Kit (Arched Wall)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 30, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitWallFlat": { + "prefab": { + "prefab_name": "ItemKitWallFlat", + "prefab_hash": -846838195, + "desc": "", + "name": "Kit (Flat Wall)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 30, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitWallGeometry": { + "prefab": { + "prefab_name": "ItemKitWallGeometry", + "prefab_hash": -784733231, + "desc": "", + "name": "Kit (Geometric Wall)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 30, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitWallIron": { + "prefab": { + "prefab_name": "ItemKitWallIron", + "prefab_hash": -524546923, + "desc": "", + "name": "Kit (Iron Wall)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 30, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitWallPadded": { + "prefab": { + "prefab_name": "ItemKitWallPadded", + "prefab_hash": -821868990, + "desc": "", + "name": "Kit (Padded Wall)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 30, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitWaterBottleFiller": { + "prefab": { + "prefab_name": "ItemKitWaterBottleFiller", + "prefab_hash": 159886536, + "desc": "", + "name": "Kit (Water Bottle Filler)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitWaterPurifier": { + "prefab": { + "prefab_name": "ItemKitWaterPurifier", + "prefab_hash": 611181283, + "desc": "", + "name": "Kit (Water Purifier)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitWeatherStation": { + "prefab": { + "prefab_name": "ItemKitWeatherStation", + "prefab_hash": 337505889, + "desc": "", + "name": "Kit (Weather Station)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitWindTurbine": { + "prefab": { + "prefab_name": "ItemKitWindTurbine", + "prefab_hash": -868916503, + "desc": "", + "name": "Kit (Wind Turbine)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemKitWindowShutter": { + "prefab": { + "prefab_name": "ItemKitWindowShutter", + "prefab_hash": 1779979754, + "desc": "", + "name": "Kit (Window Shutter)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemLabeller": { + "prefab": { + "prefab_name": "ItemLabeller", + "prefab_hash": -743968726, + "desc": "A labeller lets you set names and values on a variety of devices and structures, including Console and Logic.", + "name": "Labeller" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemLaptop": { + "prefab": { + "prefab_name": "ItemLaptop", + "prefab_hash": 141535121, + "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", + "name": "Laptop" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "PressureExternal": "Read", + "On": "ReadWrite", + "TemperatureExternal": "Read", + "PositionX": "Read", + "PositionY": "Read", + "PositionZ": "Read", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": true, + "circuit_holder": true + }, + "slots": [ + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + }, + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Motherboard", + "typ": "Motherboard" + } + ] + }, + "ItemLeadIngot": { + "prefab": { + "prefab_name": "ItemLeadIngot", + "prefab_hash": 2134647745, + "desc": "", + "name": "Ingot (Lead)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Lead": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemLeadOre": { + "prefab": { + "prefab_name": "ItemLeadOre", + "prefab_hash": -190236170, + "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.", + "name": "Ore (Lead)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Lead": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemLightSword": { + "prefab": { + "prefab_name": "ItemLightSword", + "prefab_hash": 1949076595, + "desc": "A charming, if useless, pseudo-weapon. (Creative only.)", + "name": "Light Sword" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemLiquidCanisterEmpty": { + "prefab": { + "prefab_name": "ItemLiquidCanisterEmpty", + "prefab_hash": -185207387, + "desc": "", + "name": "Liquid Canister" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "LiquidCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 12.1 + } + }, + "ItemLiquidCanisterSmart": { + "prefab": { + "prefab_name": "ItemLiquidCanisterSmart", + "prefab_hash": 777684475, + "desc": "0.Mode0\n1.Mode1", + "name": "Liquid Canister (Smart)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "LiquidCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": { + "volume": 18.1 + } + }, + "ItemLiquidDrain": { + "prefab": { + "prefab_name": "ItemLiquidDrain", + "prefab_hash": 2036225202, + "desc": "", + "name": "Kit (Liquid Drain)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemLiquidPipeAnalyzer": { + "prefab": { + "prefab_name": "ItemLiquidPipeAnalyzer", + "prefab_hash": 226055671, + "desc": "", + "name": "Kit (Liquid Pipe Analyzer)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemLiquidPipeHeater": { + "prefab": { + "prefab_name": "ItemLiquidPipeHeater", + "prefab_hash": -248475032, + "desc": "Creates a Pipe Heater (Liquid).", + "name": "Pipe Heater Kit (Liquid)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemLiquidPipeValve": { + "prefab": { + "prefab_name": "ItemLiquidPipeValve", + "prefab_hash": -2126113312, + "desc": "This kit creates a Liquid Valve.", + "name": "Kit (Liquid Pipe Valve)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemLiquidPipeVolumePump": { + "prefab": { + "prefab_name": "ItemLiquidPipeVolumePump", + "prefab_hash": -2106280569, + "desc": "", + "name": "Kit (Liquid Volume Pump)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemLiquidTankStorage": { + "prefab": { + "prefab_name": "ItemLiquidTankStorage", + "prefab_hash": 2037427578, + "desc": "This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister.", + "name": "Kit (Liquid Canister Storage)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemMKIIAngleGrinder": { + "prefab": { + "prefab_name": "ItemMKIIAngleGrinder", + "prefab_hash": 240174650, + "desc": "Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure.", + "name": "Mk II Angle Grinder" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemMKIIArcWelder": { + "prefab": { + "prefab_name": "ItemMKIIArcWelder", + "prefab_hash": -2061979347, + "desc": "", + "name": "Mk II Arc Welder" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemMKIICrowbar": { + "prefab": { + "prefab_name": "ItemMKIICrowbar", + "prefab_hash": 1440775434, + "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.", + "name": "Mk II Crowbar" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemMKIIDrill": { + "prefab": { + "prefab_name": "ItemMKIIDrill", + "prefab_hash": 324791548, + "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.", + "name": "Mk II Drill" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemMKIIDuctTape": { + "prefab": { + "prefab_name": "ItemMKIIDuctTape", + "prefab_hash": 388774906, + "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.", + "name": "Mk II Duct Tape" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemMKIIMiningDrill": { + "prefab": { + "prefab_name": "ItemMKIIMiningDrill", + "prefab_hash": -1875271296, + "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.", + "name": "Mk II Mining Drill" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Default", + "1": "Flatten" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemMKIIScrewdriver": { + "prefab": { + "prefab_name": "ItemMKIIScrewdriver", + "prefab_hash": -2015613246, + "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.", + "name": "Mk II Screwdriver" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemMKIIWireCutters": { + "prefab": { + "prefab_name": "ItemMKIIWireCutters", + "prefab_hash": -178893251, + "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.", + "name": "Mk II Wire Cutters" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemMKIIWrench": { + "prefab": { + "prefab_name": "ItemMKIIWrench", + "prefab_hash": 1862001680, + "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.", + "name": "Mk II Wrench" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemMarineBodyArmor": { + "prefab": { + "prefab_name": "ItemMarineBodyArmor", + "prefab_hash": 1399098998, + "desc": "", + "name": "Marine Armor" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Suit", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, + "ItemMarineHelmet": { + "prefab": { + "prefab_name": "ItemMarineHelmet", + "prefab_hash": 1073631646, + "desc": "", + "name": "Marine Helmet" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Helmet", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemMilk": { + "prefab": { + "prefab_name": "ItemMilk", + "prefab_hash": 1327248310, + "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.", + "name": "Milk" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "Milk": 1.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemMiningBackPack": { + "prefab": { + "prefab_name": "ItemMiningBackPack", + "prefab_hash": -1650383245, + "desc": "", + "name": "Mining Backpack" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Back", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "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" + } + ] + }, + "ItemMiningBelt": { + "prefab": { + "prefab_name": "ItemMiningBelt", + "prefab_hash": -676435305, + "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.", + "name": "Mining Belt" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Belt", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "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" + } + ] + }, + "ItemMiningBeltMKII": { + "prefab": { + "prefab_name": "ItemMiningBeltMKII", + "prefab_hash": 1470787934, + "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. ", + "name": "Mining Belt MK II" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Belt", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": 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" + }, + { + "name": "Ore", + "typ": "Ore" + }, + { + "name": "Ore", + "typ": "Ore" + }, + { + "name": "Ore", + "typ": "Ore" + }, + { + "name": "Ore", + "typ": "Ore" + }, + { + "name": "Ore", + "typ": "Ore" + } + ] + }, + "ItemMiningCharge": { + "prefab": { + "prefab_name": "ItemMiningCharge", + "prefab_hash": 15829510, + "desc": "A low cost, high yield explosive with a 10 second timer.", + "name": "Mining Charge" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemMiningDrill": { + "prefab": { + "prefab_name": "ItemMiningDrill", + "prefab_hash": 1055173191, + "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.'", + "name": "Mining Drill" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Default", + "1": "Flatten" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemMiningDrillHeavy": { + "prefab": { + "prefab_name": "ItemMiningDrillHeavy", + "prefab_hash": -1663349918, + "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.", + "name": "Mining Drill (Heavy)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Default", + "1": "Flatten" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemMiningDrillPneumatic": { + "prefab": { + "prefab_name": "ItemMiningDrillPneumatic", + "prefab_hash": 1258187304, + "desc": "0.Default\n1.Flatten", + "name": "Pneumatic Mining Drill" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Gas Canister", + "typ": "GasCanister" + } + ] + }, + "ItemMkIIToolbelt": { + "prefab": { + "prefab_name": "ItemMkIIToolbelt", + "prefab_hash": 1467558064, + "desc": "A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy.", + "name": "Tool Belt MK II" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Belt", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": 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" + }, + { + "name": "Tool", + "typ": "Tool" + }, + { + "name": "Tool", + "typ": "Tool" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, + "ItemMuffin": { + "prefab": { + "prefab_name": "ItemMuffin", + "prefab_hash": -1864982322, + "desc": "A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin.", + "name": "Muffin" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemMushroom": { + "prefab": { + "prefab_name": "ItemMushroom", + "prefab_hash": 2044798572, + "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.", + "name": "Mushroom" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 20, + "reagents": { + "Mushroom": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemNVG": { + "prefab": { + "prefab_name": "ItemNVG", + "prefab_hash": 982514123, + "desc": "", + "name": "Night Vision Goggles" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Glasses", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemNickelIngot": { + "prefab": { + "prefab_name": "ItemNickelIngot", + "prefab_hash": -1406385572, + "desc": "", + "name": "Ingot (Nickel)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Nickel": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemNickelOre": { + "prefab": { + "prefab_name": "ItemNickelOre", + "prefab_hash": 1830218956, + "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.", + "name": "Ore (Nickel)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Nickel": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemNitrice": { + "prefab": { + "prefab_name": "ItemNitrice", + "prefab_hash": -1499471529, + "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.", + "name": "Ice (Nitrice)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemOxite": { + "prefab": { + "prefab_name": "ItemOxite", + "prefab_hash": -1805394113, + "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.", + "name": "Ice (Oxite)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPassiveVent": { + "prefab": { + "prefab_name": "ItemPassiveVent", + "prefab_hash": 238631271, + "desc": "This kit creates a Passive Vent among other variants.", + "name": "Passive Vent" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPassiveVentInsulated": { + "prefab": { + "prefab_name": "ItemPassiveVentInsulated", + "prefab_hash": -1397583760, + "desc": "", + "name": "Kit (Insulated Passive Vent)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPeaceLily": { + "prefab": { + "prefab_name": "ItemPeaceLily", + "prefab_hash": 2042955224, + "desc": "A fetching lily with greater resistance to cold temperatures.", + "name": "Peace Lily" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPickaxe": { + "prefab": { + "prefab_name": "ItemPickaxe", + "prefab_hash": -913649823, + "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.", + "name": "Pickaxe" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPillHeal": { + "prefab": { + "prefab_name": "ItemPillHeal", + "prefab_hash": 1118069417, + "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.", + "name": "Pill (Medical)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPillStun": { + "prefab": { + "prefab_name": "ItemPillStun", + "prefab_hash": 418958601, + "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.", + "name": "Pill (Paralysis)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPipeAnalyizer": { + "prefab": { + "prefab_name": "ItemPipeAnalyizer", + "prefab_hash": -767597887, + "desc": "This kit creates a Pipe Analyzer.", + "name": "Kit (Pipe Analyzer)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPipeCowl": { + "prefab": { + "prefab_name": "ItemPipeCowl", + "prefab_hash": -38898376, + "desc": "This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres.", + "name": "Pipe Cowl" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 20, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPipeDigitalValve": { + "prefab": { + "prefab_name": "ItemPipeDigitalValve", + "prefab_hash": -1532448832, + "desc": "This kit creates a Digital Valve.", + "name": "Kit (Digital Valve)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPipeGasMixer": { + "prefab": { + "prefab_name": "ItemPipeGasMixer", + "prefab_hash": -1134459463, + "desc": "This kit creates a Gas Mixer.", + "name": "Kit (Gas Mixer)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPipeHeater": { + "prefab": { + "prefab_name": "ItemPipeHeater", + "prefab_hash": -1751627006, + "desc": "Creates a Pipe Heater (Gas).", + "name": "Pipe Heater Kit (Gas)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPipeIgniter": { + "prefab": { + "prefab_name": "ItemPipeIgniter", + "prefab_hash": 1366030599, + "desc": "", + "name": "Kit (Pipe Igniter)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPipeLabel": { + "prefab": { + "prefab_name": "ItemPipeLabel", + "prefab_hash": 391769637, + "desc": "This kit creates a Pipe Label.", + "name": "Kit (Pipe Label)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 20, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPipeLiquidRadiator": { + "prefab": { + "prefab_name": "ItemPipeLiquidRadiator", + "prefab_hash": -906521320, + "desc": "This kit creates a Liquid Pipe Convection Radiator.", + "name": "Kit (Liquid Radiator)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPipeMeter": { + "prefab": { + "prefab_name": "ItemPipeMeter", + "prefab_hash": 1207939683, + "desc": "This kit creates a Pipe Meter.", + "name": "Kit (Pipe Meter)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPipeRadiator": { + "prefab": { + "prefab_name": "ItemPipeRadiator", + "prefab_hash": -1796655088, + "desc": "This kit creates a Pipe Convection Radiator.", + "name": "Kit (Radiator)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPipeValve": { + "prefab": { + "prefab_name": "ItemPipeValve", + "prefab_hash": 799323450, + "desc": "This kit creates a Valve.", + "name": "Kit (Pipe Valve)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPipeVolumePump": { + "prefab": { + "prefab_name": "ItemPipeVolumePump", + "prefab_hash": -1766301997, + "desc": "This kit creates a Volume Pump.", + "name": "Kit (Volume Pump)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPlainCake": { + "prefab": { + "prefab_name": "ItemPlainCake", + "prefab_hash": -1108244510, + "desc": "", + "name": "Cake" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPlantEndothermic_Creative": { + "prefab": { + "prefab_name": "ItemPlantEndothermic_Creative", + "prefab_hash": -1159179557, + "desc": "", + "name": "Endothermic Plant Creative" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPlantEndothermic_Genepool1": { + "prefab": { + "prefab_name": "ItemPlantEndothermic_Genepool1", + "prefab_hash": 851290561, + "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.", + "name": "Winterspawn (Alpha variant)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPlantEndothermic_Genepool2": { + "prefab": { + "prefab_name": "ItemPlantEndothermic_Genepool2", + "prefab_hash": -1414203269, + "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.", + "name": "Winterspawn (Beta variant)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPlantSampler": { + "prefab": { + "prefab_name": "ItemPlantSampler", + "prefab_hash": 173023800, + "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.", + "name": "Plant Sampler" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Activate": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemPlantSwitchGrass": { + "prefab": { + "prefab_name": "ItemPlantSwitchGrass", + "prefab_hash": -532672323, + "desc": "", + "name": "Switch Grass" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPlantThermogenic_Creative": { + "prefab": { + "prefab_name": "ItemPlantThermogenic_Creative", + "prefab_hash": -1208890208, + "desc": "", + "name": "Thermogenic Plant Creative" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPlantThermogenic_Genepool1": { + "prefab": { + "prefab_name": "ItemPlantThermogenic_Genepool1", + "prefab_hash": -177792789, + "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.", + "name": "Hades Flower (Alpha strain)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPlantThermogenic_Genepool2": { + "prefab": { + "prefab_name": "ItemPlantThermogenic_Genepool2", + "prefab_hash": 1819167057, + "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.", + "name": "Hades Flower (Beta strain)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPlasticSheets": { + "prefab": { + "prefab_name": "ItemPlasticSheets", + "prefab_hash": 662053345, + "desc": "", + "name": "Plastic Sheets" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "None", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPotato": { + "prefab": { + "prefab_name": "ItemPotato", + "prefab_hash": 1929046963, + "desc": " Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies.", + "name": "Potato" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 20, + "reagents": { + "Potato": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPotatoBaked": { + "prefab": { + "prefab_name": "ItemPotatoBaked", + "prefab_hash": -2111886401, + "desc": "", + "name": "Baked Potato" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 1, + "reagents": { + "Potato": 1.0 + }, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPowerConnector": { + "prefab": { + "prefab_name": "ItemPowerConnector", + "prefab_hash": 839924019, + "desc": "This kit creates a Power Connector.", + "name": "Kit (Power Connector)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPumpkin": { + "prefab": { + "prefab_name": "ItemPumpkin", + "prefab_hash": 1277828144, + "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.", + "name": "Pumpkin" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 20, + "reagents": { + "Pumpkin": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPumpkinPie": { + "prefab": { + "prefab_name": "ItemPumpkinPie", + "prefab_hash": 62768076, + "desc": "", + "name": "Pumpkin Pie" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPumpkinSoup": { + "prefab": { + "prefab_name": "ItemPumpkinSoup", + "prefab_hash": 1277979876, + "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", + "name": "Pumpkin Soup" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPureIce": { + "prefab": { + "prefab_name": "ItemPureIce", + "prefab_hash": -1616308158, + "desc": "A frozen chunk of pure Water", + "name": "Pure Ice Water" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPureIceCarbonDioxide": { + "prefab": { + "prefab_name": "ItemPureIceCarbonDioxide", + "prefab_hash": -1251009404, + "desc": "A frozen chunk of pure Carbon Dioxide", + "name": "Pure Ice Carbon Dioxide" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPureIceHydrogen": { + "prefab": { + "prefab_name": "ItemPureIceHydrogen", + "prefab_hash": 944530361, + "desc": "A frozen chunk of pure Hydrogen", + "name": "Pure Ice Hydrogen" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPureIceLiquidCarbonDioxide": { + "prefab": { + "prefab_name": "ItemPureIceLiquidCarbonDioxide", + "prefab_hash": -1715945725, + "desc": "A frozen chunk of pure Liquid Carbon Dioxide", + "name": "Pure Ice Liquid Carbon Dioxide" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPureIceLiquidHydrogen": { + "prefab": { + "prefab_name": "ItemPureIceLiquidHydrogen", + "prefab_hash": -1044933269, + "desc": "A frozen chunk of pure Liquid Hydrogen", + "name": "Pure Ice Liquid Hydrogen" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPureIceLiquidNitrogen": { + "prefab": { + "prefab_name": "ItemPureIceLiquidNitrogen", + "prefab_hash": 1674576569, + "desc": "A frozen chunk of pure Liquid Nitrogen", + "name": "Pure Ice Liquid Nitrogen" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPureIceLiquidNitrous": { + "prefab": { + "prefab_name": "ItemPureIceLiquidNitrous", + "prefab_hash": 1428477399, + "desc": "A frozen chunk of pure Liquid Nitrous Oxide", + "name": "Pure Ice Liquid Nitrous" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPureIceLiquidOxygen": { + "prefab": { + "prefab_name": "ItemPureIceLiquidOxygen", + "prefab_hash": 541621589, + "desc": "A frozen chunk of pure Liquid Oxygen", + "name": "Pure Ice Liquid Oxygen" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPureIceLiquidPollutant": { + "prefab": { + "prefab_name": "ItemPureIceLiquidPollutant", + "prefab_hash": -1748926678, + "desc": "A frozen chunk of pure Liquid Pollutant", + "name": "Pure Ice Liquid Pollutant" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPureIceLiquidVolatiles": { + "prefab": { + "prefab_name": "ItemPureIceLiquidVolatiles", + "prefab_hash": -1306628937, + "desc": "A frozen chunk of pure Liquid Volatiles", + "name": "Pure Ice Liquid Volatiles" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPureIceNitrogen": { + "prefab": { + "prefab_name": "ItemPureIceNitrogen", + "prefab_hash": -1708395413, + "desc": "A frozen chunk of pure Nitrogen", + "name": "Pure Ice Nitrogen" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPureIceNitrous": { + "prefab": { + "prefab_name": "ItemPureIceNitrous", + "prefab_hash": 386754635, + "desc": "A frozen chunk of pure Nitrous Oxide", + "name": "Pure Ice NitrousOxide" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPureIceOxygen": { + "prefab": { + "prefab_name": "ItemPureIceOxygen", + "prefab_hash": -1150448260, + "desc": "A frozen chunk of pure Oxygen", + "name": "Pure Ice Oxygen" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPureIcePollutant": { + "prefab": { + "prefab_name": "ItemPureIcePollutant", + "prefab_hash": -1755356, + "desc": "A frozen chunk of pure Pollutant", + "name": "Pure Ice Pollutant" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPureIcePollutedWater": { + "prefab": { + "prefab_name": "ItemPureIcePollutedWater", + "prefab_hash": -2073202179, + "desc": "A frozen chunk of Polluted Water", + "name": "Pure Ice Polluted Water" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPureIceSteam": { + "prefab": { + "prefab_name": "ItemPureIceSteam", + "prefab_hash": -874791066, + "desc": "A frozen chunk of pure Steam", + "name": "Pure Ice Steam" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemPureIceVolatiles": { + "prefab": { + "prefab_name": "ItemPureIceVolatiles", + "prefab_hash": -633723719, + "desc": "A frozen chunk of pure Volatiles", + "name": "Pure Ice Volatiles" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemRTG": { + "prefab": { + "prefab_name": "ItemRTG", + "prefab_hash": 495305053, + "desc": "This kit creates that miracle of modern science, a Kit (Creative RTG).", + "name": "Kit (Creative RTG)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemRTGSurvival": { + "prefab": { + "prefab_name": "ItemRTGSurvival", + "prefab_hash": 1817645803, + "desc": "This kit creates a Kit (RTG).", + "name": "Kit (RTG)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemReagentMix": { + "prefab": { + "prefab_name": "ItemReagentMix", + "prefab_hash": -1641500434, + "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.", + "name": "Reagent Mix" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ores" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemRemoteDetonator": { + "prefab": { + "prefab_name": "ItemRemoteDetonator", + "prefab_hash": 678483886, + "desc": "", + "name": "Remote Detonator" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemReusableFireExtinguisher": { + "prefab": { + "prefab_name": "ItemReusableFireExtinguisher", + "prefab_hash": -1773192190, + "desc": "Requires a canister filled with any inert liquid to opperate.", + "name": "Fire Extinguisher (Reusable)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Liquid Canister", + "typ": "LiquidCanister" + } + ] + }, + "ItemRice": { + "prefab": { + "prefab_name": "ItemRice", + "prefab_hash": 658916791, + "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.", + "name": "Rice" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Rice": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemRoadFlare": { + "prefab": { + "prefab_name": "ItemRoadFlare", + "prefab_hash": 871811564, + "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.", + "name": "Road Flare" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 20, + "reagents": null, + "slot_class": "Flare", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemRocketMiningDrillHead": { + "prefab": { + "prefab_name": "ItemRocketMiningDrillHead", + "prefab_hash": 2109945337, + "desc": "Replaceable drill head for Rocket Miner", + "name": "Mining-Drill Head (Basic)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "DrillHead", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemRocketMiningDrillHeadDurable": { + "prefab": { + "prefab_name": "ItemRocketMiningDrillHeadDurable", + "prefab_hash": 1530764483, + "desc": "", + "name": "Mining-Drill Head (Durable)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "DrillHead", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemRocketMiningDrillHeadHighSpeedIce": { + "prefab": { + "prefab_name": "ItemRocketMiningDrillHeadHighSpeedIce", + "prefab_hash": 653461728, + "desc": "", + "name": "Mining-Drill Head (High Speed Ice)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "DrillHead", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemRocketMiningDrillHeadHighSpeedMineral": { + "prefab": { + "prefab_name": "ItemRocketMiningDrillHeadHighSpeedMineral", + "prefab_hash": 1440678625, + "desc": "", + "name": "Mining-Drill Head (High Speed Mineral)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "DrillHead", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemRocketMiningDrillHeadIce": { + "prefab": { + "prefab_name": "ItemRocketMiningDrillHeadIce", + "prefab_hash": -380904592, + "desc": "", + "name": "Mining-Drill Head (Ice)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "DrillHead", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemRocketMiningDrillHeadLongTerm": { + "prefab": { + "prefab_name": "ItemRocketMiningDrillHeadLongTerm", + "prefab_hash": -684020753, + "desc": "", + "name": "Mining-Drill Head (Long Term)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "DrillHead", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemRocketMiningDrillHeadMineral": { + "prefab": { + "prefab_name": "ItemRocketMiningDrillHeadMineral", + "prefab_hash": 1083675581, + "desc": "", + "name": "Mining-Drill Head (Mineral)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "DrillHead", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemRocketScanningHead": { + "prefab": { + "prefab_name": "ItemRocketScanningHead", + "prefab_hash": -1198702771, + "desc": "", + "name": "Rocket Scanner Head" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "ScanningHead", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemScanner": { + "prefab": { + "prefab_name": "ItemScanner", + "prefab_hash": 1661270830, + "desc": "A mysterious piece of technology, rumored to have Zrillian origins.", + "name": "Handheld Scanner" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemScrewdriver": { + "prefab": { + "prefab_name": "ItemScrewdriver", + "prefab_hash": 687940869, + "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.", + "name": "Screwdriver" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSecurityCamera": { + "prefab": { + "prefab_name": "ItemSecurityCamera", + "prefab_hash": -1981101032, + "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.", + "name": "Security Camera" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSensorLenses": { + "prefab": { + "prefab_name": "ItemSensorLenses", + "prefab_hash": -1176140051, + "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.", + "name": "Sensor Lenses" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Glasses", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "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", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Sensor Processing Unit", + "typ": "SensorProcessingUnit" + } + ] + }, + "ItemSensorProcessingUnitCelestialScanner": { + "prefab": { + "prefab_name": "ItemSensorProcessingUnitCelestialScanner", + "prefab_hash": -1154200014, + "desc": "", + "name": "Sensor Processing Unit (Celestial Scanner)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "SensorProcessingUnit", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSensorProcessingUnitMesonScanner": { + "prefab": { + "prefab_name": "ItemSensorProcessingUnitMesonScanner", + "prefab_hash": -1730464583, + "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.", + "name": "Sensor Processing Unit (T-Ray Scanner)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "SensorProcessingUnit", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSensorProcessingUnitOreScanner": { + "prefab": { + "prefab_name": "ItemSensorProcessingUnitOreScanner", + "prefab_hash": -1219128491, + "desc": "The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD.", + "name": "Sensor Processing Unit (Ore Scanner)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "SensorProcessingUnit", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSiliconIngot": { + "prefab": { + "prefab_name": "ItemSiliconIngot", + "prefab_hash": -290196476, + "desc": "", + "name": "Ingot (Silicon)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Silicon": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSiliconOre": { + "prefab": { + "prefab_name": "ItemSiliconOre", + "prefab_hash": 1103972403, + "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.", + "name": "Ore (Silicon)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Silicon": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSilverIngot": { + "prefab": { + "prefab_name": "ItemSilverIngot", + "prefab_hash": -929742000, + "desc": "", + "name": "Ingot (Silver)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Silver": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSilverOre": { + "prefab": { + "prefab_name": "ItemSilverOre", + "prefab_hash": -916518678, + "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.", + "name": "Ore (Silver)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Silver": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSolderIngot": { + "prefab": { + "prefab_name": "ItemSolderIngot", + "prefab_hash": -82508479, + "desc": "", + "name": "Ingot (Solder)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Solder": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSolidFuel": { + "prefab": { + "prefab_name": "ItemSolidFuel", + "prefab_hash": -365253871, + "desc": "", + "name": "Solid Fuel (Hydrocarbon)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Hydrocarbon": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSoundCartridgeBass": { + "prefab": { + "prefab_name": "ItemSoundCartridgeBass", + "prefab_hash": -1883441704, + "desc": "", + "name": "Sound Cartridge Bass" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "SoundCartridge", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSoundCartridgeDrums": { + "prefab": { + "prefab_name": "ItemSoundCartridgeDrums", + "prefab_hash": -1901500508, + "desc": "", + "name": "Sound Cartridge Drums" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "SoundCartridge", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSoundCartridgeLeads": { + "prefab": { + "prefab_name": "ItemSoundCartridgeLeads", + "prefab_hash": -1174735962, + "desc": "", + "name": "Sound Cartridge Leads" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "SoundCartridge", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSoundCartridgeSynth": { + "prefab": { + "prefab_name": "ItemSoundCartridgeSynth", + "prefab_hash": -1971419310, + "desc": "", + "name": "Sound Cartridge Synth" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "SoundCartridge", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSoyOil": { + "prefab": { + "prefab_name": "ItemSoyOil", + "prefab_hash": 1387403148, + "desc": "", + "name": "Soy Oil" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "Oil": 1.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSoybean": { + "prefab": { + "prefab_name": "ItemSoybean", + "prefab_hash": 1924673028, + "desc": " Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil", + "name": "Soybean" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "Soy": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSpaceCleaner": { + "prefab": { + "prefab_name": "ItemSpaceCleaner", + "prefab_hash": -1737666461, + "desc": "There was a time when humanity really wanted to keep space clean. That time has passed.", + "name": "Space Cleaner" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSpaceHelmet": { + "prefab": { + "prefab_name": "ItemSpaceHelmet", + "prefab_hash": 714830451, + "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.", + "name": "Space Helmet" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Helmet", + "sorting_class": "Clothing" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": { + "volume": 3.0 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "ItemSpaceIce": { + "prefab": { + "prefab_name": "ItemSpaceIce", + "prefab_hash": 675686937, + "desc": "", + "name": "Space Ice" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ores" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSpaceOre": { + "prefab": { + "prefab_name": "ItemSpaceOre", + "prefab_hash": 2131916219, + "desc": "Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores.", + "name": "Dirty Ore" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 100, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ores" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSpacepack": { + "prefab": { + "prefab_name": "ItemSpacepack", + "prefab_hash": -1260618380, + "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.", + "name": "Spacepack" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Back", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Activate": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "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" + } + ] + }, + "ItemSprayCanBlack": { + "prefab": { + "prefab_name": "ItemSprayCanBlack", + "prefab_hash": -688107795, + "desc": "Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses.", + "name": "Spray Paint (Black)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Bottle", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSprayCanBlue": { + "prefab": { + "prefab_name": "ItemSprayCanBlue", + "prefab_hash": -498464883, + "desc": "What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'", + "name": "Spray Paint (Blue)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Bottle", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSprayCanBrown": { + "prefab": { + "prefab_name": "ItemSprayCanBrown", + "prefab_hash": 845176977, + "desc": "In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed.", + "name": "Spray Paint (Brown)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Bottle", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSprayCanGreen": { + "prefab": { + "prefab_name": "ItemSprayCanGreen", + "prefab_hash": -1880941852, + "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.", + "name": "Spray Paint (Green)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Bottle", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSprayCanGrey": { + "prefab": { + "prefab_name": "ItemSprayCanGrey", + "prefab_hash": -1645266981, + "desc": "Arguably the most popular color in the universe, grey was invented so designers had something to do.", + "name": "Spray Paint (Grey)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Bottle", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSprayCanKhaki": { + "prefab": { + "prefab_name": "ItemSprayCanKhaki", + "prefab_hash": 1918456047, + "desc": "Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode.", + "name": "Spray Paint (Khaki)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Bottle", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSprayCanOrange": { + "prefab": { + "prefab_name": "ItemSprayCanOrange", + "prefab_hash": -158007629, + "desc": "Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove.", + "name": "Spray Paint (Orange)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Bottle", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSprayCanPink": { + "prefab": { + "prefab_name": "ItemSprayCanPink", + "prefab_hash": 1344257263, + "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.", + "name": "Spray Paint (Pink)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Bottle", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSprayCanPurple": { + "prefab": { + "prefab_name": "ItemSprayCanPurple", + "prefab_hash": 30686509, + "desc": "Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong.", + "name": "Spray Paint (Purple)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Bottle", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSprayCanRed": { + "prefab": { + "prefab_name": "ItemSprayCanRed", + "prefab_hash": 1514393921, + "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.", + "name": "Spray Paint (Red)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Bottle", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSprayCanWhite": { + "prefab": { + "prefab_name": "ItemSprayCanWhite", + "prefab_hash": 498481505, + "desc": "White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff.", + "name": "Spray Paint (White)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Bottle", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSprayCanYellow": { + "prefab": { + "prefab_name": "ItemSprayCanYellow", + "prefab_hash": 995468116, + "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.", + "name": "Spray Paint (Yellow)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Bottle", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSprayGun": { + "prefab": { + "prefab_name": "ItemSprayGun", + "prefab_hash": 1289723966, + "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.", + "name": "Spray Gun" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Spray Can", + "typ": "Bottle" + } + ] + }, + "ItemSteelFrames": { + "prefab": { + "prefab_name": "ItemSteelFrames", + "prefab_hash": -1448105779, + "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.", + "name": "Steel Frames" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 30, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSteelIngot": { + "prefab": { + "prefab_name": "ItemSteelIngot", + "prefab_hash": -654790771, + "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.", + "name": "Ingot (Steel)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Steel": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSteelSheets": { + "prefab": { + "prefab_name": "ItemSteelSheets", + "prefab_hash": 38555961, + "desc": "An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types.", + "name": "Steel Sheets" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "None", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemStelliteGlassSheets": { + "prefab": { + "prefab_name": "ItemStelliteGlassSheets", + "prefab_hash": -2038663432, + "desc": "A stronger glass substitute.", + "name": "Stellite Glass Sheets" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "None", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemStelliteIngot": { + "prefab": { + "prefab_name": "ItemStelliteIngot", + "prefab_hash": -1897868623, + "desc": "", + "name": "Ingot (Stellite)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Stellite": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSugar": { + "prefab": { + "prefab_name": "ItemSugar", + "prefab_hash": 2111910840, + "desc": "", + "name": "Sugar" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Sugar": 10.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSugarCane": { + "prefab": { + "prefab_name": "ItemSugarCane", + "prefab_hash": -1335056202, + "desc": "", + "name": "Sugarcane" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "Sugar": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemSuitModCryogenicUpgrade": { + "prefab": { + "prefab_name": "ItemSuitModCryogenicUpgrade", + "prefab_hash": -1274308304, + "desc": "Enables suits with basic cooling functionality to work with cryogenic liquid.", + "name": "Cryogenic Suit Upgrade" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "SuitMod", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemTablet": { + "prefab": { + "prefab_name": "ItemTablet", + "prefab_hash": -229808600, + "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.", + "name": "Handheld Tablet" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "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", + "Error": "Read", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Cartridge", + "typ": "Cartridge" + } + ] + }, + "ItemTerrainManipulator": { + "prefab": { + "prefab_name": "ItemTerrainManipulator", + "prefab_hash": 111280987, + "desc": "0.Mode0\n1.Mode1", + "name": "Terrain Manipulator" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "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": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Dirt Canister", + "typ": "Ore" + } + ] + }, + "ItemTomato": { + "prefab": { + "prefab_name": "ItemTomato", + "prefab_hash": -998592080, + "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.", + "name": "Tomato" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 20, + "reagents": { + "Tomato": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemTomatoSoup": { + "prefab": { + "prefab_name": "ItemTomatoSoup", + "prefab_hash": 688734890, + "desc": "Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine.", + "name": "Tomato Soup" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemToolBelt": { + "prefab": { + "prefab_name": "ItemToolBelt", + "prefab_hash": -355127880, + "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.", + "name": "Tool Belt" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Belt", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "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" + } + ] + }, + "ItemTropicalPlant": { + "prefab": { + "prefab_name": "ItemTropicalPlant", + "prefab_hash": -800947386, + "desc": "An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants.", + "name": "Tropical Lily" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemUraniumOre": { + "prefab": { + "prefab_name": "ItemUraniumOre", + "prefab_hash": -1516581844, + "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.", + "name": "Ore (Uranium)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Uranium": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemVolatiles": { + "prefab": { + "prefab_name": "ItemVolatiles", + "prefab_hash": 1253102035, + "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", + "name": "Ice (Volatiles)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 50, + "reagents": null, + "slot_class": "Ore", + "sorting_class": "Ices" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWallCooler": { + "prefab": { + "prefab_name": "ItemWallCooler", + "prefab_hash": -1567752627, + "desc": "This kit creates a Wall Cooler.", + "name": "Kit (Wall Cooler)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWallHeater": { + "prefab": { + "prefab_name": "ItemWallHeater", + "prefab_hash": 1880134612, + "desc": "This kit creates a Kit (Wall Heater).", + "name": "Kit (Wall Heater)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWallLight": { + "prefab": { + "prefab_name": "ItemWallLight", + "prefab_hash": 1108423476, + "desc": "This kit creates any one of ten Kit (Lights) variants.", + "name": "Kit (Lights)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWaspaloyIngot": { + "prefab": { + "prefab_name": "ItemWaspaloyIngot", + "prefab_hash": 156348098, + "desc": "", + "name": "Ingot (Waspaloy)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Waspaloy": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWaterBottle": { + "prefab": { + "prefab_name": "ItemWaterBottle", + "prefab_hash": 107741229, + "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.", + "name": "Water Bottle" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "LiquidBottle", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWaterPipeDigitalValve": { + "prefab": { + "prefab_name": "ItemWaterPipeDigitalValve", + "prefab_hash": 309693520, + "desc": "", + "name": "Kit (Liquid Digital Valve)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWaterPipeMeter": { + "prefab": { + "prefab_name": "ItemWaterPipeMeter", + "prefab_hash": -90898877, + "desc": "", + "name": "Kit (Liquid Pipe Meter)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWaterWallCooler": { + "prefab": { + "prefab_name": "ItemWaterWallCooler", + "prefab_hash": -1721846327, + "desc": "", + "name": "Kit (Liquid Wall Cooler)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 5, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWearLamp": { + "prefab": { + "prefab_name": "ItemWearLamp", + "prefab_hash": -598730959, + "desc": "", + "name": "Headlamp" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Helmet", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemWeldingTorch": { + "prefab": { + "prefab_name": "ItemWeldingTorch", + "prefab_hash": -2066892079, + "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.", + "name": "Welding Torch" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": { + "convection_factor": 0.5, + "radiation_factor": 0.5 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Gas Canister", + "typ": "GasCanister" + } + ] + }, + "ItemWheat": { + "prefab": { + "prefab_name": "ItemWheat", + "prefab_hash": -1057658015, + "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.", + "name": "Wheat" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "Carbon": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWireCutters": { + "prefab": { + "prefab_name": "ItemWireCutters", + "prefab_hash": 1535854074, + "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.", + "name": "Wire Cutters" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWirelessBatteryCellExtraLarge": { + "prefab": { + "prefab_name": "ItemWirelessBatteryCellExtraLarge", + "prefab_hash": -504717121, + "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", + "name": "Wireless Battery Cell Extra Large" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Battery", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Mode": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "ItemWreckageAirConditioner1": { + "prefab": { + "prefab_name": "ItemWreckageAirConditioner1", + "prefab_hash": -1826023284, + "desc": "", + "name": "Wreckage Air Conditioner" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Wreckage", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWreckageAirConditioner2": { + "prefab": { + "prefab_name": "ItemWreckageAirConditioner2", + "prefab_hash": 169888054, + "desc": "", + "name": "Wreckage Air Conditioner" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Wreckage", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWreckageHydroponicsTray1": { + "prefab": { + "prefab_name": "ItemWreckageHydroponicsTray1", + "prefab_hash": -310178617, + "desc": "", + "name": "Wreckage Hydroponics Tray" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Wreckage", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWreckageLargeExtendableRadiator01": { + "prefab": { + "prefab_name": "ItemWreckageLargeExtendableRadiator01", + "prefab_hash": -997763, + "desc": "", + "name": "Wreckage Large Extendable Radiator" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Wreckage", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWreckageStructureRTG1": { + "prefab": { + "prefab_name": "ItemWreckageStructureRTG1", + "prefab_hash": 391453348, + "desc": "", + "name": "Wreckage Structure RTG" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Wreckage", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWreckageStructureWeatherStation001": { + "prefab": { + "prefab_name": "ItemWreckageStructureWeatherStation001", + "prefab_hash": -834664349, + "desc": "", + "name": "Wreckage Structure Weather Station" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Wreckage", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWreckageStructureWeatherStation002": { + "prefab": { + "prefab_name": "ItemWreckageStructureWeatherStation002", + "prefab_hash": 1464424921, + "desc": "", + "name": "Wreckage Structure Weather Station" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Wreckage", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWreckageStructureWeatherStation003": { + "prefab": { + "prefab_name": "ItemWreckageStructureWeatherStation003", + "prefab_hash": 542009679, + "desc": "", + "name": "Wreckage Structure Weather Station" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Wreckage", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWreckageStructureWeatherStation004": { + "prefab": { + "prefab_name": "ItemWreckageStructureWeatherStation004", + "prefab_hash": -1104478996, + "desc": "", + "name": "Wreckage Structure Weather Station" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Wreckage", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWreckageStructureWeatherStation005": { + "prefab": { + "prefab_name": "ItemWreckageStructureWeatherStation005", + "prefab_hash": -919745414, + "desc": "", + "name": "Wreckage Structure Weather Station" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Wreckage", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWreckageStructureWeatherStation006": { + "prefab": { + "prefab_name": "ItemWreckageStructureWeatherStation006", + "prefab_hash": 1344576960, + "desc": "", + "name": "Wreckage Structure Weather Station" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Wreckage", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWreckageStructureWeatherStation007": { + "prefab": { + "prefab_name": "ItemWreckageStructureWeatherStation007", + "prefab_hash": 656649558, + "desc": "", + "name": "Wreckage Structure Weather Station" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Wreckage", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWreckageStructureWeatherStation008": { + "prefab": { + "prefab_name": "ItemWreckageStructureWeatherStation008", + "prefab_hash": -1214467897, + "desc": "", + "name": "Wreckage Structure Weather Station" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Wreckage", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWreckageTurbineGenerator1": { + "prefab": { + "prefab_name": "ItemWreckageTurbineGenerator1", + "prefab_hash": -1662394403, + "desc": "", + "name": "Wreckage Turbine Generator" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Wreckage", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWreckageTurbineGenerator2": { + "prefab": { + "prefab_name": "ItemWreckageTurbineGenerator2", + "prefab_hash": 98602599, + "desc": "", + "name": "Wreckage Turbine Generator" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Wreckage", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWreckageTurbineGenerator3": { + "prefab": { + "prefab_name": "ItemWreckageTurbineGenerator3", + "prefab_hash": 1927790321, + "desc": "", + "name": "Wreckage Turbine Generator" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Wreckage", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWreckageWallCooler1": { + "prefab": { + "prefab_name": "ItemWreckageWallCooler1", + "prefab_hash": -1682930158, + "desc": "", + "name": "Wreckage Wall Cooler" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Wreckage", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWreckageWallCooler2": { + "prefab": { + "prefab_name": "ItemWreckageWallCooler2", + "prefab_hash": 45733800, + "desc": "", + "name": "Wreckage Wall Cooler" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Wreckage", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ItemWrench": { + "prefab": { + "prefab_name": "ItemWrench", + "prefab_hash": -1886261558, + "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", + "name": "Wrench" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "KitSDBSilo": { + "prefab": { + "prefab_name": "KitSDBSilo", + "prefab_hash": 1932952652, + "desc": "This kit creates a SDB Silo.", + "name": "Kit (SDB Silo)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "KitStructureCombustionCentrifuge": { + "prefab": { + "prefab_name": "KitStructureCombustionCentrifuge", + "prefab_hash": 231903234, + "desc": "", + "name": "Kit (Combustion Centrifuge)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Kits" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "KitchenTableShort": { + "prefab": { + "prefab_name": "KitchenTableShort", + "prefab_hash": -1427415566, + "desc": "", + "name": "Kitchen Table (Short)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "KitchenTableSimpleShort": { + "prefab": { + "prefab_name": "KitchenTableSimpleShort", + "prefab_hash": -78099334, + "desc": "", + "name": "Kitchen Table (Simple Short)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "KitchenTableSimpleTall": { + "prefab": { + "prefab_name": "KitchenTableSimpleTall", + "prefab_hash": -1068629349, + "desc": "", + "name": "Kitchen Table (Simple Tall)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "KitchenTableTall": { + "prefab": { + "prefab_name": "KitchenTableTall", + "prefab_hash": -1386237782, + "desc": "", + "name": "Kitchen Table (Tall)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "Lander": { + "prefab": { + "prefab_name": "Lander", + "prefab_hash": 1605130615, + "desc": "", + "name": "Lander" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null, + "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" + } + ] + }, + "Landingpad_2x2CenterPiece01": { + "prefab": { + "prefab_name": "Landingpad_2x2CenterPiece01", + "prefab_hash": -1295222317, + "desc": "Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors", + "name": "Landingpad 2x2 Center Piece" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": {}, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "Landingpad_BlankPiece": { + "prefab": { + "prefab_name": "Landingpad_BlankPiece", + "prefab_hash": 912453390, + "desc": "", + "name": "Landingpad" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "Landingpad_CenterPiece01": { + "prefab": { + "prefab_name": "Landingpad_CenterPiece01", + "prefab_hash": 1070143159, + "desc": "The target point where the trader shuttle will land. Requires a clear view of the sky.", + "name": "Landingpad Center" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": {}, + "modes": { + "0": "None", + "1": "NoContact", + "2": "Moving", + "3": "Holding", + "4": "Landed" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "Landingpad_CrossPiece": { + "prefab": { + "prefab_name": "Landingpad_CrossPiece", + "prefab_hash": 1101296153, + "desc": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.", + "name": "Landingpad Cross" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "Landingpad_DataConnectionPiece": { + "prefab": { + "prefab_name": "Landingpad_DataConnectionPiece", + "prefab_hash": -2066405918, + "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.", + "name": "Landingpad Data And Power" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "None", + "1": "NoContact", + "2": "Moving", + "3": "Holding", + "4": "Landed" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "Landingpad_DiagonalPiece01": { + "prefab": { + "prefab_name": "Landingpad_DiagonalPiece01", + "prefab_hash": 977899131, + "desc": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.", + "name": "Landingpad Diagonal" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "Landingpad_GasConnectorInwardPiece": { + "prefab": { + "prefab_name": "Landingpad_GasConnectorInwardPiece", + "prefab_hash": 817945707, + "desc": "", + "name": "Landingpad Gas Input" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "Landingpad_GasConnectorOutwardPiece": { + "prefab": { + "prefab_name": "Landingpad_GasConnectorOutwardPiece", + "prefab_hash": -1100218307, + "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.", + "name": "Landingpad Gas Output" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "Landingpad_GasCylinderTankPiece": { + "prefab": { + "prefab_name": "Landingpad_GasCylinderTankPiece", + "prefab_hash": 170818567, + "desc": "Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders.", + "name": "Landingpad Gas Storage" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "Landingpad_LiquidConnectorInwardPiece": { + "prefab": { + "prefab_name": "Landingpad_LiquidConnectorInwardPiece", + "prefab_hash": -1216167727, + "desc": "", + "name": "Landingpad Liquid Input" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "Landingpad_LiquidConnectorOutwardPiece": { + "prefab": { + "prefab_name": "Landingpad_LiquidConnectorOutwardPiece", + "prefab_hash": -1788929869, + "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.", + "name": "Landingpad Liquid Output" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "Landingpad_StraightPiece01": { + "prefab": { + "prefab_name": "Landingpad_StraightPiece01", + "prefab_hash": -976273247, + "desc": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.", + "name": "Landingpad Straight" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "Landingpad_TaxiPieceCorner": { + "prefab": { + "prefab_name": "Landingpad_TaxiPieceCorner", + "prefab_hash": -1872345847, + "desc": "", + "name": "Landingpad Taxi Corner" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "Landingpad_TaxiPieceHold": { + "prefab": { + "prefab_name": "Landingpad_TaxiPieceHold", + "prefab_hash": 146051619, + "desc": "", + "name": "Landingpad Taxi Hold" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "Landingpad_TaxiPieceStraight": { + "prefab": { + "prefab_name": "Landingpad_TaxiPieceStraight", + "prefab_hash": -1477941080, + "desc": "", + "name": "Landingpad Taxi Straight" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "Landingpad_ThreshholdPiece": { + "prefab": { + "prefab_name": "Landingpad_ThreshholdPiece", + "prefab_hash": -1514298582, + "desc": "", + "name": "Landingpad Threshhold" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "Data", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "LogicStepSequencer8": { + "prefab": { + "prefab_name": "LogicStepSequencer8", + "prefab_hash": 1531272458, + "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.", + "name": "Logic Step Sequencer" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "Time": "ReadWrite", + "Bpm": "ReadWrite", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Whole Note", + "1": "Half Note", + "2": "Quarter Note", + "3": "Eighth Note", + "4": "Sixteenth Note" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Sound Cartridge", + "typ": "SoundCartridge" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "Meteorite": { + "prefab": { + "prefab_name": "Meteorite", + "prefab_hash": -99064335, + "desc": "", + "name": "Meteorite" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "MonsterEgg": { + "prefab": { + "prefab_name": "MonsterEgg", + "prefab_hash": -1667675295, + "desc": "", + "name": "" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "MotherboardComms": { + "prefab": { + "prefab_name": "MotherboardComms", + "prefab_hash": -337075633, + "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.", + "name": "Communications Motherboard" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Motherboard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "MotherboardLogic": { + "prefab": { + "prefab_name": "MotherboardLogic", + "prefab_hash": 502555944, + "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.", + "name": "Logic Motherboard" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Motherboard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "MotherboardMissionControl": { + "prefab": { + "prefab_name": "MotherboardMissionControl", + "prefab_hash": -127121474, + "desc": "", + "name": "" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Motherboard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "MotherboardProgrammableChip": { + "prefab": { + "prefab_name": "MotherboardProgrammableChip", + "prefab_hash": -161107071, + "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.", + "name": "IC Editor Motherboard" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Motherboard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "MotherboardRockets": { + "prefab": { + "prefab_name": "MotherboardRockets", + "prefab_hash": -806986392, + "desc": "", + "name": "Rocket Control Motherboard" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Motherboard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "MotherboardSorter": { + "prefab": { + "prefab_name": "MotherboardSorter", + "prefab_hash": -1908268220, + "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.", + "name": "Sorter Motherboard" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Motherboard", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "MothershipCore": { + "prefab": { + "prefab_name": "MothershipCore", + "prefab_hash": -1930442922, + "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.", + "name": "Mothership Core" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "NpcChick": { + "prefab": { + "prefab_name": "NpcChick", + "prefab_hash": 155856647, + "desc": "", + "name": "Chick" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Brain", + "typ": "Organ" + }, + { + "name": "Lungs", + "typ": "Organ" + } + ] + }, + "NpcChicken": { + "prefab": { + "prefab_name": "NpcChicken", + "prefab_hash": 399074198, + "desc": "", + "name": "Chicken" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Brain", + "typ": "Organ" + }, + { + "name": "Lungs", + "typ": "Organ" + } + ] + }, + "PassiveSpeaker": { + "prefab": { + "prefab_name": "PassiveSpeaker", + "prefab_hash": 248893646, + "desc": "", + "name": "Passive Speaker" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Volume": "ReadWrite", + "PrefabHash": "ReadWrite", + "SoundAlert": "ReadWrite", + "ReferenceId": "ReadWrite", + "NameHash": "ReadWrite" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "PipeBenderMod": { + "prefab": { + "prefab_name": "PipeBenderMod", + "prefab_hash": 443947415, + "desc": "Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", + "name": "Pipe Bender Mod" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "PortableComposter": { + "prefab": { + "prefab_name": "PortableComposter", + "prefab_hash": -1958705204, + "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", + "name": "Portable Composter" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "Battery" + }, + { + "name": "Liquid Canister", + "typ": "LiquidCanister" + } + ] + }, + "PortableSolarPanel": { + "prefab": { + "prefab_name": "PortableSolarPanel", + "prefab_hash": 2043318949, + "desc": "", + "name": "Portable Solar Panel" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Open": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "RailingElegant01": { + "prefab": { + "prefab_name": "RailingElegant01", + "prefab_hash": 399661231, + "desc": "", + "name": "Railing Elegant (Type 1)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "RailingElegant02": { + "prefab": { + "prefab_name": "RailingElegant02", + "prefab_hash": -1898247915, + "desc": "", + "name": "Railing Elegant (Type 2)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "RailingIndustrial02": { + "prefab": { + "prefab_name": "RailingIndustrial02", + "prefab_hash": -2072792175, + "desc": "", + "name": "Railing Industrial (Type 2)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ReagentColorBlue": { + "prefab": { + "prefab_name": "ReagentColorBlue", + "prefab_hash": 980054869, + "desc": "", + "name": "Color Dye (Blue)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "ColorBlue": 10.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ReagentColorGreen": { + "prefab": { + "prefab_name": "ReagentColorGreen", + "prefab_hash": 120807542, + "desc": "", + "name": "Color Dye (Green)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "ColorGreen": 10.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ReagentColorOrange": { + "prefab": { + "prefab_name": "ReagentColorOrange", + "prefab_hash": -400696159, + "desc": "", + "name": "Color Dye (Orange)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "ColorOrange": 10.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ReagentColorRed": { + "prefab": { + "prefab_name": "ReagentColorRed", + "prefab_hash": 1998377961, + "desc": "", + "name": "Color Dye (Red)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "ColorRed": 10.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ReagentColorYellow": { + "prefab": { + "prefab_name": "ReagentColorYellow", + "prefab_hash": 635208006, + "desc": "", + "name": "Color Dye (Yellow)" + }, + "item": { + "consumable": true, + "filter_type": null, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "ColorYellow": 10.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "RespawnPoint": { + "prefab": { + "prefab_name": "RespawnPoint", + "prefab_hash": -788672929, + "desc": "Place a respawn point to set a player entry point to your base when loading in, or returning from the dead.", + "name": "Respawn Point" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "RespawnPointWallMounted": { + "prefab": { + "prefab_name": "RespawnPointWallMounted", + "prefab_hash": -491247370, + "desc": "", + "name": "Respawn Point (Mounted)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "Robot": { + "prefab": { + "prefab_name": "Robot", + "prefab_hash": 434786784, + "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", + "name": "AIMeE Bot" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "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" + }, + "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" + } + }, + "logic_types": { + "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" + }, + "modes": { + "0": "None", + "1": "Follow", + "2": "MoveToTarget", + "3": "Roam", + "4": "Unload", + "5": "PathToTarget", + "6": "StorageFull" + }, + "transmission_receiver": false, + "wireless_logic": true, + "circuit_holder": true + }, + "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" + } + ] + }, + "RoverCargo": { + "prefab": { + "prefab_name": "RoverCargo", + "prefab_hash": 350726273, + "desc": "Connects to Logic Transmitter", + "name": "Rover (Cargo)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.01, + "radiation_factor": 0.01 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": true, + "circuit_holder": false + }, + "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": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, + "Rover_MkI": { + "prefab": { + "prefab_name": "Rover_MkI", + "prefab_hash": -2049946335, + "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", + "name": "Rover MkI" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": true, + "circuit_holder": false + }, + "slots": [ + { + "name": "Entity", + "typ": "Entity" + }, + { + "name": "Entity", + "typ": "Entity" + }, + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, + "Rover_MkI_build_states": { + "prefab": { + "prefab_name": "Rover_MkI_build_states", + "prefab_hash": 861674123, + "desc": "", + "name": "Rover MKI" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "SMGMagazine": { + "prefab": { + "prefab_name": "SMGMagazine", + "prefab_hash": -256607540, + "desc": "", + "name": "SMG Magazine" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Magazine", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "SeedBag_Cocoa": { + "prefab": { + "prefab_name": "SeedBag_Cocoa", + "prefab_hash": 1139887531, + "desc": "", + "name": "Cocoa Seeds" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "SeedBag_Corn": { + "prefab": { + "prefab_name": "SeedBag_Corn", + "prefab_hash": -1290755415, + "desc": "Grow a Corn.", + "name": "Corn Seeds" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "SeedBag_Fern": { + "prefab": { + "prefab_name": "SeedBag_Fern", + "prefab_hash": -1990600883, + "desc": "Grow a Fern.", + "name": "Fern Seeds" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "SeedBag_Mushroom": { + "prefab": { + "prefab_name": "SeedBag_Mushroom", + "prefab_hash": 311593418, + "desc": "Grow a Mushroom.", + "name": "Mushroom Seeds" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "SeedBag_Potato": { + "prefab": { + "prefab_name": "SeedBag_Potato", + "prefab_hash": 1005571172, + "desc": "Grow a Potato.", + "name": "Potato Seeds" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "SeedBag_Pumpkin": { + "prefab": { + "prefab_name": "SeedBag_Pumpkin", + "prefab_hash": 1423199840, + "desc": "Grow a Pumpkin.", + "name": "Pumpkin Seeds" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "SeedBag_Rice": { + "prefab": { + "prefab_name": "SeedBag_Rice", + "prefab_hash": -1691151239, + "desc": "Grow some Rice.", + "name": "Rice Seeds" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "SeedBag_Soybean": { + "prefab": { + "prefab_name": "SeedBag_Soybean", + "prefab_hash": 1783004244, + "desc": "Grow some Soybean.", + "name": "Soybean Seeds" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "SeedBag_SugarCane": { + "prefab": { + "prefab_name": "SeedBag_SugarCane", + "prefab_hash": -1884103228, + "desc": "", + "name": "Sugarcane Seeds" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "SeedBag_Switchgrass": { + "prefab": { + "prefab_name": "SeedBag_Switchgrass", + "prefab_hash": 488360169, + "desc": "", + "name": "Switchgrass Seed" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "SeedBag_Tomato": { + "prefab": { + "prefab_name": "SeedBag_Tomato", + "prefab_hash": -1922066841, + "desc": "Grow a Tomato.", + "name": "Tomato Seeds" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "SeedBag_Wheet": { + "prefab": { + "prefab_name": "SeedBag_Wheet", + "prefab_hash": -654756733, + "desc": "Grow some Wheat.", + "name": "Wheat Seeds" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 10, + "reagents": null, + "slot_class": "Plant", + "sorting_class": "Food" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "SpaceShuttle": { + "prefab": { + "prefab_name": "SpaceShuttle", + "prefab_hash": -1991297271, + "desc": "An antiquated Sinotai transport craft, long since decommissioned.", + "name": "Space Shuttle" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Captain's Seat", + "typ": "Entity" + }, + { + "name": "Passenger Seat Left", + "typ": "Entity" + }, + { + "name": "Passenger Seat Right", + "typ": "Entity" + } + ] + }, + "StopWatch": { + "prefab": { + "prefab_name": "StopWatch", + "prefab_hash": -1527229051, + "desc": "", + "name": "Stop Watch" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "Time": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureAccessBridge": { + "prefab": { + "prefab_name": "StructureAccessBridge", + "prefab_hash": 1298920475, + "desc": "Extendable bridge that spans three grids", + "name": "Access Bridge" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Activate": "ReadWrite", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureActiveVent": { + "prefab": { + "prefab_name": "StructureActiveVent", + "prefab_hash": -1129453144, + "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 ...", + "name": "Active Vent" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Outward", + "1": "Inward" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + }, + { + "typ": "Pipe", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureAdvancedComposter": { + "prefab": { + "prefab_name": "StructureAdvancedComposter", + "prefab_hash": 446212963, + "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", + "name": "Advanced Composter" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureAdvancedFurnace": { + "prefab": { + "prefab_name": "StructureAdvancedFurnace", + "prefab_hash": 545937711, + "desc": "The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure.", + "name": "Advanced Furnace" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Output2" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureAdvancedPackagingMachine": { + "prefab": { + "prefab_name": "StructureAdvancedPackagingMachine", + "prefab_hash": -463037670, + "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.", + "name": "Advanced Packaging Machine" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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": { + "consumed_resouces": [ + "ItemCookedCondensedMilk", + "ItemCookedCorn", + "ItemCookedMushroom", + "ItemCookedPowderedEggs", + "ItemCookedPumpkin", + "ItemCookedRice", + "ItemCookedSoybean", + "ItemCookedTomato", + "ItemEmptyCan", + "ItemMilk", + "ItemPotatoBaked", + "ItemSoyOil" + ], + "processed_reagents": [] + }, + "memory": { + "instructions": { + "DeviceSetLock": { + "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 |", + "typ": "PrinterInstruction", + "value": 6 + }, + "EjectAllReagents": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 8 + }, + "EjectReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 7 + }, + "ExecuteRecipe": { + "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 |", + "typ": "PrinterInstruction", + "value": 2 + }, + "JumpIfNextInvalid": { + "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 |", + "typ": "PrinterInstruction", + "value": 4 + }, + "JumpToAddress": { + "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 |", + "typ": "PrinterInstruction", + "value": 5 + }, + "MissingRecipeReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 9 + }, + "StackPointer": { + "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 |", + "typ": "PrinterInstruction", + "value": 1 + }, + "WaitUntilNextValid": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 3 + } + }, + "memory_access": "ReadWrite", + "memory_size": 64 + } + }, + "StructureAirConditioner": { + "prefab": { + "prefab_name": "StructureAirConditioner", + "prefab_hash": -2087593337, + "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.", + "name": "Air Conditioner" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "RatioLiquidNitrogenInput": "Read", + "RatioLiquidNitrogenOutput": "Read", + "RatioLiquidNitrogenOutput2": "Read", + "RatioLiquidOxygenInput": "Read", + "RatioLiquidOxygenOutput": "Read", + "RatioLiquidOxygenOutput2": "Read", + "RatioLiquidVolatilesInput": "Read", + "RatioLiquidVolatilesOutput": "Read", + "RatioLiquidVolatilesOutput2": "Read", + "RatioSteamInput": "Read", + "RatioSteamOutput": "Read", + "RatioSteamOutput2": "Read", + "RatioLiquidCarbonDioxideInput": "Read", + "RatioLiquidCarbonDioxideOutput": "Read", + "RatioLiquidCarbonDioxideOutput2": "Read", + "RatioLiquidPollutantInput": "Read", + "RatioLiquidPollutantOutput": "Read", + "RatioLiquidPollutantOutput2": "Read", + "RatioLiquidNitrousOxideInput": "Read", + "RatioLiquidNitrousOxideOutput": "Read", + "RatioLiquidNitrousOxideOutput2": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Idle", + "1": "Active" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": true + }, + "slots": [ + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Waste" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": 2, + "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 + } + }, + "StructureAirlock": { + "prefab": { + "prefab_name": "StructureAirlock", + "prefab_hash": -2105052344, + "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.", + "name": "Airlock" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureAirlockGate": { + "prefab": { + "prefab_name": "StructureAirlockGate", + "prefab_hash": 1736080881, + "desc": "1 x 1 modular door piece for building hangar doors.", + "name": "Small Hangar Door" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureAngledBench": { + "prefab": { + "prefab_name": "StructureAngledBench", + "prefab_hash": 1811979158, + "desc": "", + "name": "Bench (Angled)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureArcFurnace": { + "prefab": { + "prefab_name": "StructureArcFurnace", + "prefab_hash": -247344692, + "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.", + "name": "Arc Furnace" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Ore" + }, + { + "name": "Export", + "typ": "Ingot" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureAreaPowerControl": { + "prefab": { + "prefab_name": "StructureAreaPowerControl", + "prefab_hash": 1999523701, + "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.", + "name": "Area Power Control" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Idle", + "1": "Discharged", + "2": "Discharging", + "3": "Charging", + "4": "Charged" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Data Disk", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "Input" + }, + { + "typ": "Power", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureAreaPowerControlReversed": { + "prefab": { + "prefab_name": "StructureAreaPowerControlReversed", + "prefab_hash": -1032513487, + "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.", + "name": "Area Power Control" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Idle", + "1": "Discharged", + "2": "Discharging", + "3": "Charging", + "4": "Charged" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Data Disk", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "Input" + }, + { + "typ": "Power", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureAutoMinerSmall": { + "prefab": { + "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": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "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": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureAutolathe": { + "prefab": { + "prefab_name": "StructureAutolathe", + "prefab_hash": 336213101, + "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 ", + "name": "Autolathe" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Ingot" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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": { + "consumed_resouces": [ + "ItemAstroloyIngot", + "ItemConstantanIngot", + "ItemCopperIngot", + "ItemElectrumIngot", + "ItemGoldIngot", + "ItemHastelloyIngot", + "ItemInconelIngot", + "ItemInvarIngot", + "ItemIronIngot", + "ItemLeadIngot", + "ItemNickelIngot", + "ItemSiliconIngot", + "ItemSilverIngot", + "ItemSolderIngot", + "ItemSolidFuel", + "ItemSteelIngot", + "ItemStelliteIngot", + "ItemWaspaloyIngot", + "ItemWasteIngot" + ], + "processed_reagents": [] + }, + "memory": { + "instructions": { + "DeviceSetLock": { + "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 |", + "typ": "PrinterInstruction", + "value": 6 + }, + "EjectAllReagents": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 8 + }, + "EjectReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 7 + }, + "ExecuteRecipe": { + "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 |", + "typ": "PrinterInstruction", + "value": 2 + }, + "JumpIfNextInvalid": { + "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 |", + "typ": "PrinterInstruction", + "value": 4 + }, + "JumpToAddress": { + "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 |", + "typ": "PrinterInstruction", + "value": 5 + }, + "MissingRecipeReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 9 + }, + "StackPointer": { + "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 |", + "typ": "PrinterInstruction", + "value": 1 + }, + "WaitUntilNextValid": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 3 + } + }, + "memory_access": "ReadWrite", + "memory_size": 64 + } + }, + "StructureAutomatedOven": { + "prefab": { + "prefab_name": "StructureAutomatedOven", + "prefab_hash": -1672404896, + "desc": "", + "name": "Automated Oven" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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": { + "consumed_resouces": [ + "ItemCorn", + "ItemEgg", + "ItemFertilizedEgg", + "ItemFlour", + "ItemMilk", + "ItemMushroom", + "ItemPotato", + "ItemPumpkin", + "ItemRice", + "ItemSoybean", + "ItemSoyOil", + "ItemTomato", + "ItemSugarCane", + "ItemCocoaTree", + "ItemCocoaPowder", + "ItemSugar" + ], + "processed_reagents": [] + }, + "memory": { + "instructions": { + "DeviceSetLock": { + "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 |", + "typ": "PrinterInstruction", + "value": 6 + }, + "EjectAllReagents": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 8 + }, + "EjectReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 7 + }, + "ExecuteRecipe": { + "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 |", + "typ": "PrinterInstruction", + "value": 2 + }, + "JumpIfNextInvalid": { + "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 |", + "typ": "PrinterInstruction", + "value": 4 + }, + "JumpToAddress": { + "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 |", + "typ": "PrinterInstruction", + "value": 5 + }, + "MissingRecipeReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 9 + }, + "StackPointer": { + "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 |", + "typ": "PrinterInstruction", + "value": 1 + }, + "WaitUntilNextValid": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 3 + } + }, + "memory_access": "ReadWrite", + "memory_size": 64 + } + }, + "StructureBackLiquidPressureRegulator": { + "prefab": { + "prefab_name": "StructureBackLiquidPressureRegulator", + "prefab_hash": 2099900163, + "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.", + "name": "Liquid Back Volume Regulator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureBackPressureRegulator": { + "prefab": { + "prefab_name": "StructureBackPressureRegulator", + "prefab_hash": -1149857558, + "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.", + "name": "Back Pressure Regulator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureBasketHoop": { + "prefab": { + "prefab_name": "StructureBasketHoop", + "prefab_hash": -1613497288, + "desc": "", + "name": "Basket Hoop" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureBattery": { + "prefab": { + "prefab_name": "StructureBattery", + "prefab_hash": -400115994, + "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).", + "name": "Station Battery" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Charge": "Read", + "Maximum": "Read", + "Ratio": "Read", + "PowerPotential": "Read", + "PowerActual": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Input" + }, + { + "typ": "Power", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureBatteryCharger": { + "prefab": { + "prefab_name": "StructureBatteryCharger", + "prefab_hash": 1945930022, + "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.", + "name": "Battery Cell Charger" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Battery", + "typ": "Battery" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureBatteryChargerSmall": { + "prefab": { + "prefab_name": "StructureBatteryChargerSmall", + "prefab_hash": -761772413, + "desc": "", + "name": "Battery Charger Small" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Battery", + "typ": "Battery" + } + ], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureBatteryLarge": { + "prefab": { + "prefab_name": "StructureBatteryLarge", + "prefab_hash": -1388288459, + "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). ", + "name": "Station Battery (Large)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Charge": "Read", + "Maximum": "Read", + "Ratio": "Read", + "PowerPotential": "Read", + "PowerActual": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Input" + }, + { + "typ": "Power", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureBatteryMedium": { + "prefab": { + "prefab_name": "StructureBatteryMedium", + "prefab_hash": -1125305264, + "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", + "name": "Battery (Medium)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "Read", + "Charge": "Read", + "Maximum": "Read", + "Ratio": "Read", + "PowerPotential": "Read", + "PowerActual": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "Input" + }, + { + "typ": "Power", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureBatterySmall": { + "prefab": { + "prefab_name": "StructureBatterySmall", + "prefab_hash": -2123455080, + "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", + "name": "Auxiliary Rocket Battery " + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "Read", + "Charge": "Read", + "Maximum": "Read", + "Ratio": "Read", + "PowerPotential": "Read", + "PowerActual": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "Input" + }, + { + "typ": "Power", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureBeacon": { + "prefab": { + "prefab_name": "StructureBeacon", + "prefab_hash": -188177083, + "desc": "", + "name": "Beacon" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Color": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureBench": { + "prefab": { + "prefab_name": "StructureBench", + "prefab_hash": -2042448192, + "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.", + "name": "Powered Bench" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Appliance 1", + "typ": "Appliance" + }, + { + "name": "Appliance 2", + "typ": "Appliance" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureBench1": { + "prefab": { + "prefab_name": "StructureBench1", + "prefab_hash": 406745009, + "desc": "", + "name": "Bench (Counter Style)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Appliance 1", + "typ": "Appliance" + }, + { + "name": "Appliance 2", + "typ": "Appliance" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureBench2": { + "prefab": { + "prefab_name": "StructureBench2", + "prefab_hash": -2127086069, + "desc": "", + "name": "Bench (High Tech Style)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Appliance 1", + "typ": "Appliance" + }, + { + "name": "Appliance 2", + "typ": "Appliance" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureBench3": { + "prefab": { + "prefab_name": "StructureBench3", + "prefab_hash": -164622691, + "desc": "", + "name": "Bench (Frame Style)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Appliance 1", + "typ": "Appliance" + }, + { + "name": "Appliance 2", + "typ": "Appliance" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureBench4": { + "prefab": { + "prefab_name": "StructureBench4", + "prefab_hash": 1750375230, + "desc": "", + "name": "Bench (Workbench Style)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Appliance 1", + "typ": "Appliance" + }, + { + "name": "Appliance 2", + "typ": "Appliance" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureBlastDoor": { + "prefab": { + "prefab_name": "StructureBlastDoor", + "prefab_hash": 337416191, + "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.", + "name": "Blast Door" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureBlockBed": { + "prefab": { + "prefab_name": "StructureBlockBed", + "prefab_hash": 697908419, + "desc": "Description coming.", + "name": "Block Bed" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Bed", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureBlocker": { + "prefab": { + "prefab_name": "StructureBlocker", + "prefab_hash": 378084505, + "desc": "", + "name": "Blocker" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableAnalysizer": { + "prefab": { + "prefab_name": "StructureCableAnalysizer", + "prefab_hash": 1036015121, + "desc": "", + "name": "Cable Analyzer" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PowerPotential": "Read", + "PowerActual": "Read", + "PowerRequired": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureCableCorner": { + "prefab": { + "prefab_name": "StructureCableCorner", + "prefab_hash": -889269388, + "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).", + "name": "Cable (Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableCorner3": { + "prefab": { + "prefab_name": "StructureCableCorner3", + "prefab_hash": 980469101, + "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).", + "name": "Cable (3-Way Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableCorner3Burnt": { + "prefab": { + "prefab_name": "StructureCableCorner3Burnt", + "prefab_hash": 318437449, + "desc": "", + "name": "Burnt Cable (3-Way Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableCorner3HBurnt": { + "prefab": { + "prefab_name": "StructureCableCorner3HBurnt", + "prefab_hash": 2393826, + "desc": "", + "name": "" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableCorner4": { + "prefab": { + "prefab_name": "StructureCableCorner4", + "prefab_hash": -1542172466, + "desc": "", + "name": "Cable (4-Way Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableCorner4Burnt": { + "prefab": { + "prefab_name": "StructureCableCorner4Burnt", + "prefab_hash": 268421361, + "desc": "", + "name": "Burnt Cable (4-Way Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableCorner4HBurnt": { + "prefab": { + "prefab_name": "StructureCableCorner4HBurnt", + "prefab_hash": -981223316, + "desc": "", + "name": "Burnt Heavy Cable (4-Way Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableCornerBurnt": { + "prefab": { + "prefab_name": "StructureCableCornerBurnt", + "prefab_hash": -177220914, + "desc": "", + "name": "Burnt Cable (Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableCornerH": { + "prefab": { + "prefab_name": "StructureCableCornerH", + "prefab_hash": -39359015, + "desc": "", + "name": "Heavy Cable (Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableCornerH3": { + "prefab": { + "prefab_name": "StructureCableCornerH3", + "prefab_hash": -1843379322, + "desc": "", + "name": "Heavy Cable (3-Way Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableCornerH4": { + "prefab": { + "prefab_name": "StructureCableCornerH4", + "prefab_hash": 205837861, + "desc": "", + "name": "Heavy Cable (4-Way Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableCornerHBurnt": { + "prefab": { + "prefab_name": "StructureCableCornerHBurnt", + "prefab_hash": 1931412811, + "desc": "", + "name": "Burnt Cable (Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableFuse100k": { + "prefab": { + "prefab_name": "StructureCableFuse100k", + "prefab_hash": 281380789, + "desc": "", + "name": "Fuse (100kW)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureCableFuse1k": { + "prefab": { + "prefab_name": "StructureCableFuse1k", + "prefab_hash": -1103727120, + "desc": "", + "name": "Fuse (1kW)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureCableFuse50k": { + "prefab": { + "prefab_name": "StructureCableFuse50k", + "prefab_hash": -349716617, + "desc": "", + "name": "Fuse (50kW)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureCableFuse5k": { + "prefab": { + "prefab_name": "StructureCableFuse5k", + "prefab_hash": -631590668, + "desc": "", + "name": "Fuse (5kW)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureCableJunction": { + "prefab": { + "prefab_name": "StructureCableJunction", + "prefab_hash": -175342021, + "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).", + "name": "Cable (Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableJunction4": { + "prefab": { + "prefab_name": "StructureCableJunction4", + "prefab_hash": 1112047202, + "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).", + "name": "Cable (4-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableJunction4Burnt": { + "prefab": { + "prefab_name": "StructureCableJunction4Burnt", + "prefab_hash": -1756896811, + "desc": "", + "name": "Burnt Cable (4-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableJunction4HBurnt": { + "prefab": { + "prefab_name": "StructureCableJunction4HBurnt", + "prefab_hash": -115809132, + "desc": "", + "name": "Burnt Cable (4-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableJunction5": { + "prefab": { + "prefab_name": "StructureCableJunction5", + "prefab_hash": 894390004, + "desc": "", + "name": "Cable (5-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableJunction5Burnt": { + "prefab": { + "prefab_name": "StructureCableJunction5Burnt", + "prefab_hash": 1545286256, + "desc": "", + "name": "Burnt Cable (5-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableJunction6": { + "prefab": { + "prefab_name": "StructureCableJunction6", + "prefab_hash": -1404690610, + "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).", + "name": "Cable (6-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableJunction6Burnt": { + "prefab": { + "prefab_name": "StructureCableJunction6Burnt", + "prefab_hash": -628145954, + "desc": "", + "name": "Burnt Cable (6-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableJunction6HBurnt": { + "prefab": { + "prefab_name": "StructureCableJunction6HBurnt", + "prefab_hash": 1854404029, + "desc": "", + "name": "Burnt Cable (6-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableJunctionBurnt": { + "prefab": { + "prefab_name": "StructureCableJunctionBurnt", + "prefab_hash": -1620686196, + "desc": "", + "name": "Burnt Cable (Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableJunctionH": { + "prefab": { + "prefab_name": "StructureCableJunctionH", + "prefab_hash": 469451637, + "desc": "", + "name": "Heavy Cable (3-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableJunctionH4": { + "prefab": { + "prefab_name": "StructureCableJunctionH4", + "prefab_hash": -742234680, + "desc": "", + "name": "Heavy Cable (4-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableJunctionH5": { + "prefab": { + "prefab_name": "StructureCableJunctionH5", + "prefab_hash": -1530571426, + "desc": "", + "name": "Heavy Cable (5-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableJunctionH5Burnt": { + "prefab": { + "prefab_name": "StructureCableJunctionH5Burnt", + "prefab_hash": 1701593300, + "desc": "", + "name": "Burnt Heavy Cable (5-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableJunctionH6": { + "prefab": { + "prefab_name": "StructureCableJunctionH6", + "prefab_hash": 1036780772, + "desc": "", + "name": "Heavy Cable (6-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableJunctionHBurnt": { + "prefab": { + "prefab_name": "StructureCableJunctionHBurnt", + "prefab_hash": -341365649, + "desc": "", + "name": "Burnt Cable (Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableStraight": { + "prefab": { + "prefab_name": "StructureCableStraight", + "prefab_hash": 605357050, + "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).", + "name": "Cable (Straight)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableStraightBurnt": { + "prefab": { + "prefab_name": "StructureCableStraightBurnt", + "prefab_hash": -1196981113, + "desc": "", + "name": "Burnt Cable (Straight)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableStraightH": { + "prefab": { + "prefab_name": "StructureCableStraightH", + "prefab_hash": -146200530, + "desc": "", + "name": "Heavy Cable (Straight)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCableStraightHBurnt": { + "prefab": { + "prefab_name": "StructureCableStraightHBurnt", + "prefab_hash": 2085762089, + "desc": "", + "name": "Burnt Cable (Straight)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCamera": { + "prefab": { + "prefab_name": "StructureCamera", + "prefab_hash": -342072665, + "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.", + "name": "Camera" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Mode": "ReadWrite", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureCapsuleTankGas": { + "prefab": { + "prefab_name": "StructureCapsuleTankGas", + "prefab_hash": -1385712131, + "desc": "", + "name": "Gas Capsule Tank Small" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureCapsuleTankLiquid": { + "prefab": { + "prefab_name": "StructureCapsuleTankLiquid", + "prefab_hash": 1415396263, + "desc": "", + "name": "Liquid Capsule Tank Small" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureCargoStorageMedium": { + "prefab": { + "prefab_name": "StructureCargoStorageMedium", + "prefab_hash": 1151864003, + "desc": "", + "name": "Cargo Storage (Medium)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "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" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Chute", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureCargoStorageSmall": { + "prefab": { + "prefab_name": "StructureCargoStorageSmall", + "prefab_hash": -1493672123, + "desc": "", + "name": "Cargo Storage (Small)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "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" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Chute", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureCentrifuge": { + "prefab": { + "prefab_name": "StructureCentrifuge", + "prefab_hash": 690945935, + "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.", + "name": "Centrifuge" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Reagents": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "ClearMemory": "Write", + "ExportCount": "Read", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureChair": { + "prefab": { + "prefab_name": "StructureChair", + "prefab_hash": 1167659360, + "desc": "One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs.", + "name": "Chair" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureChairBacklessDouble": { + "prefab": { + "prefab_name": "StructureChairBacklessDouble", + "prefab_hash": 1944858936, + "desc": "", + "name": "Chair (Backless Double)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureChairBacklessSingle": { + "prefab": { + "prefab_name": "StructureChairBacklessSingle", + "prefab_hash": 1672275150, + "desc": "", + "name": "Chair (Backless Single)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureChairBoothCornerLeft": { + "prefab": { + "prefab_name": "StructureChairBoothCornerLeft", + "prefab_hash": -367720198, + "desc": "", + "name": "Chair (Booth Corner Left)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureChairBoothMiddle": { + "prefab": { + "prefab_name": "StructureChairBoothMiddle", + "prefab_hash": 1640720378, + "desc": "", + "name": "Chair (Booth Middle)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureChairRectangleDouble": { + "prefab": { + "prefab_name": "StructureChairRectangleDouble", + "prefab_hash": -1152812099, + "desc": "", + "name": "Chair (Rectangle Double)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureChairRectangleSingle": { + "prefab": { + "prefab_name": "StructureChairRectangleSingle", + "prefab_hash": -1425428917, + "desc": "", + "name": "Chair (Rectangle Single)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureChairThickDouble": { + "prefab": { + "prefab_name": "StructureChairThickDouble", + "prefab_hash": -1245724402, + "desc": "", + "name": "Chair (Thick Double)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureChairThickSingle": { + "prefab": { + "prefab_name": "StructureChairThickSingle", + "prefab_hash": -1510009608, + "desc": "", + "name": "Chair (Thick Single)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureChuteBin": { + "prefab": { + "prefab_name": "StructureChuteBin", + "prefab_hash": -850484480, + "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.", + "name": "Chute Bin" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Input", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureChuteCorner": { + "prefab": { + "prefab_name": "StructureChuteCorner", + "prefab_hash": 1360330136, + "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.", + "name": "Chute (Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ] + }, + "StructureChuteDigitalFlipFlopSplitterLeft": { + "prefab": { + "prefab_name": "StructureChuteDigitalFlipFlopSplitterLeft", + "prefab_hash": -810874728, + "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.", + "name": "Chute Digital Flip Flop Splitter Left" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Setting": "ReadWrite", + "Quantity": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "SettingOutput": "ReadWrite", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Chute", + "role": "Output2" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureChuteDigitalFlipFlopSplitterRight": { + "prefab": { + "prefab_name": "StructureChuteDigitalFlipFlopSplitterRight", + "prefab_hash": 163728359, + "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.", + "name": "Chute Digital Flip Flop Splitter Right" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Setting": "ReadWrite", + "Quantity": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "SettingOutput": "ReadWrite", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Chute", + "role": "Output2" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureChuteDigitalValveLeft": { + "prefab": { + "prefab_name": "StructureChuteDigitalValveLeft", + "prefab_hash": 648608238, + "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.", + "name": "Chute Digital Valve Left" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Quantity": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureChuteDigitalValveRight": { + "prefab": { + "prefab_name": "StructureChuteDigitalValveRight", + "prefab_hash": -1337091041, + "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.", + "name": "Chute Digital Valve Right" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Quantity": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureChuteFlipFlopSplitter": { + "prefab": { + "prefab_name": "StructureChuteFlipFlopSplitter", + "prefab_hash": -1446854725, + "desc": "A chute that toggles between two outputs", + "name": "Chute Flip Flop Splitter" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ] + }, + "StructureChuteInlet": { + "prefab": { + "prefab_name": "StructureChuteInlet", + "prefab_hash": -1469588766, + "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.", + "name": "Chute Inlet" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Lock": "ReadWrite", + "ClearMemory": "Write", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureChuteJunction": { + "prefab": { + "prefab_name": "StructureChuteJunction", + "prefab_hash": -611232514, + "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.", + "name": "Chute (Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ] + }, + "StructureChuteOutlet": { + "prefab": { + "prefab_name": "StructureChuteOutlet", + "prefab_hash": -1022714809, + "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.", + "name": "Chute Outlet" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Lock": "ReadWrite", + "ClearMemory": "Write", + "ExportCount": "Read", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Data", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureChuteOverflow": { + "prefab": { + "prefab_name": "StructureChuteOverflow", + "prefab_hash": 225377225, + "desc": "The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied.", + "name": "Chute Overflow" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ] + }, + "StructureChuteStraight": { + "prefab": { + "prefab_name": "StructureChuteStraight", + "prefab_hash": 168307007, + "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.", + "name": "Chute (Straight)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ] + }, + "StructureChuteUmbilicalFemale": { + "prefab": { + "prefab_name": "StructureChuteUmbilicalFemale", + "prefab_hash": -1918892177, + "desc": "", + "name": "Umbilical Socket (Chute)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureChuteUmbilicalFemaleSide": { + "prefab": { + "prefab_name": "StructureChuteUmbilicalFemaleSide", + "prefab_hash": -659093969, + "desc": "", + "name": "Umbilical Socket Angle (Chute)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureChuteUmbilicalMale": { + "prefab": { + "prefab_name": "StructureChuteUmbilicalMale", + "prefab_hash": -958884053, + "desc": "0.Left\n1.Center\n2.Right", + "name": "Umbilical (Chute)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Left", + "1": "Center", + "2": "Right" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureChuteValve": { + "prefab": { + "prefab_name": "StructureChuteValve", + "prefab_hash": 434875271, + "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.", + "name": "Chute Valve" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ] + }, + "StructureChuteWindow": { + "prefab": { + "prefab_name": "StructureChuteWindow", + "prefab_hash": -607241919, + "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.", + "name": "Chute (Window)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ] + }, + "StructureCircuitHousing": { + "prefab": { + "prefab_name": "StructureCircuitHousing", + "prefab_hash": -128473777, + "desc": "", + "name": "IC Housing" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "LineNumber": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "LineNumber": "ReadWrite", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": true + }, + "slots": [ + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": 6, + "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 + } + }, + "StructureCombustionCentrifuge": { + "prefab": { + "prefab_name": "StructureCombustionCentrifuge", + "prefab_hash": 1238905683, + "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 ", + "name": "Combustion Centrifuge" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.001, + "radiation_factor": 0.001 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {}, + "2": {} + }, + "logic_types": { + "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", + "RatioLiquidNitrogenInput": "Read", + "RatioLiquidNitrogenOutput": "Read", + "RatioLiquidOxygen": "Read", + "RatioLiquidOxygenInput": "Read", + "RatioLiquidOxygenOutput": "Read", + "RatioLiquidVolatiles": "Read", + "RatioLiquidVolatilesInput": "Read", + "RatioLiquidVolatilesOutput": "Read", + "RatioSteam": "Read", + "RatioSteamInput": "Read", + "RatioSteamOutput": "Read", + "RatioLiquidCarbonDioxide": "Read", + "RatioLiquidCarbonDioxideInput": "Read", + "RatioLiquidCarbonDioxideOutput": "Read", + "RatioLiquidPollutant": "Read", + "RatioLiquidPollutantInput": "Read", + "RatioLiquidPollutantOutput": "Read", + "RatioLiquidNitrousOxide": "Read", + "RatioLiquidNitrousOxideInput": "Read", + "RatioLiquidNitrousOxideOutput": "Read", + "ReferenceId": "Read", + "RatioHydrogen": "Read", + "RatioLiquidHydrogen": "Read", + "RatioPollutedWater": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": true + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + }, + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + } + ], + "device_pins_length": 2, + "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 + } + }, + "StructureCompositeCladdingAngled": { + "prefab": { + "prefab_name": "StructureCompositeCladdingAngled", + "prefab_hash": -1513030150, + "desc": "", + "name": "Composite Cladding (Angled)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeCladdingAngledCorner": { + "prefab": { + "prefab_name": "StructureCompositeCladdingAngledCorner", + "prefab_hash": -69685069, + "desc": "", + "name": "Composite Cladding (Angled Corner)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeCladdingAngledCornerInner": { + "prefab": { + "prefab_name": "StructureCompositeCladdingAngledCornerInner", + "prefab_hash": -1841871763, + "desc": "", + "name": "Composite Cladding (Angled Corner Inner)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeCladdingAngledCornerInnerLong": { + "prefab": { + "prefab_name": "StructureCompositeCladdingAngledCornerInnerLong", + "prefab_hash": -1417912632, + "desc": "", + "name": "Composite Cladding (Angled Corner Inner Long)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeCladdingAngledCornerInnerLongL": { + "prefab": { + "prefab_name": "StructureCompositeCladdingAngledCornerInnerLongL", + "prefab_hash": 947705066, + "desc": "", + "name": "Composite Cladding (Angled Corner Inner Long L)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeCladdingAngledCornerInnerLongR": { + "prefab": { + "prefab_name": "StructureCompositeCladdingAngledCornerInnerLongR", + "prefab_hash": -1032590967, + "desc": "", + "name": "Composite Cladding (Angled Corner Inner Long R)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeCladdingAngledCornerLong": { + "prefab": { + "prefab_name": "StructureCompositeCladdingAngledCornerLong", + "prefab_hash": 850558385, + "desc": "", + "name": "Composite Cladding (Long Angled Corner)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeCladdingAngledCornerLongR": { + "prefab": { + "prefab_name": "StructureCompositeCladdingAngledCornerLongR", + "prefab_hash": -348918222, + "desc": "", + "name": "Composite Cladding (Long Angled Mirrored Corner)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeCladdingAngledLong": { + "prefab": { + "prefab_name": "StructureCompositeCladdingAngledLong", + "prefab_hash": -387546514, + "desc": "", + "name": "Composite Cladding (Long Angled)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeCladdingCylindrical": { + "prefab": { + "prefab_name": "StructureCompositeCladdingCylindrical", + "prefab_hash": 212919006, + "desc": "", + "name": "Composite Cladding (Cylindrical)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeCladdingCylindricalPanel": { + "prefab": { + "prefab_name": "StructureCompositeCladdingCylindricalPanel", + "prefab_hash": 1077151132, + "desc": "", + "name": "Composite Cladding (Cylindrical Panel)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeCladdingPanel": { + "prefab": { + "prefab_name": "StructureCompositeCladdingPanel", + "prefab_hash": 1997436771, + "desc": "", + "name": "Composite Cladding (Panel)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeCladdingRounded": { + "prefab": { + "prefab_name": "StructureCompositeCladdingRounded", + "prefab_hash": -259357734, + "desc": "", + "name": "Composite Cladding (Rounded)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeCladdingRoundedCorner": { + "prefab": { + "prefab_name": "StructureCompositeCladdingRoundedCorner", + "prefab_hash": 1951525046, + "desc": "", + "name": "Composite Cladding (Rounded Corner)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeCladdingRoundedCornerInner": { + "prefab": { + "prefab_name": "StructureCompositeCladdingRoundedCornerInner", + "prefab_hash": 110184667, + "desc": "", + "name": "Composite Cladding (Rounded Corner Inner)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeCladdingSpherical": { + "prefab": { + "prefab_name": "StructureCompositeCladdingSpherical", + "prefab_hash": 139107321, + "desc": "", + "name": "Composite Cladding (Spherical)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeCladdingSphericalCap": { + "prefab": { + "prefab_name": "StructureCompositeCladdingSphericalCap", + "prefab_hash": 534213209, + "desc": "", + "name": "Composite Cladding (Spherical Cap)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeCladdingSphericalCorner": { + "prefab": { + "prefab_name": "StructureCompositeCladdingSphericalCorner", + "prefab_hash": 1751355139, + "desc": "", + "name": "Composite Cladding (Spherical Corner)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeDoor": { + "prefab": { + "prefab_name": "StructureCompositeDoor", + "prefab_hash": -793837322, + "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.", + "name": "Composite Door" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureCompositeFloorGrating": { + "prefab": { + "prefab_name": "StructureCompositeFloorGrating", + "prefab_hash": 324868581, + "desc": "While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings.", + "name": "Composite Floor Grating" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeFloorGrating2": { + "prefab": { + "prefab_name": "StructureCompositeFloorGrating2", + "prefab_hash": -895027741, + "desc": "", + "name": "Composite Floor Grating (Type 2)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeFloorGrating3": { + "prefab": { + "prefab_name": "StructureCompositeFloorGrating3", + "prefab_hash": -1113471627, + "desc": "", + "name": "Composite Floor Grating (Type 3)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeFloorGrating4": { + "prefab": { + "prefab_name": "StructureCompositeFloorGrating4", + "prefab_hash": 600133846, + "desc": "", + "name": "Composite Floor Grating (Type 4)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeFloorGratingOpen": { + "prefab": { + "prefab_name": "StructureCompositeFloorGratingOpen", + "prefab_hash": 2109695912, + "desc": "", + "name": "Composite Floor Grating Open" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeFloorGratingOpenRotated": { + "prefab": { + "prefab_name": "StructureCompositeFloorGratingOpenRotated", + "prefab_hash": 882307910, + "desc": "", + "name": "Composite Floor Grating Open Rotated" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeWall": { + "prefab": { + "prefab_name": "StructureCompositeWall", + "prefab_hash": 1237302061, + "desc": "Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties.", + "name": "Composite Wall (Type 1)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeWall02": { + "prefab": { + "prefab_name": "StructureCompositeWall02", + "prefab_hash": 718343384, + "desc": "", + "name": "Composite Wall (Type 2)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeWall03": { + "prefab": { + "prefab_name": "StructureCompositeWall03", + "prefab_hash": 1574321230, + "desc": "", + "name": "Composite Wall (Type 3)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeWall04": { + "prefab": { + "prefab_name": "StructureCompositeWall04", + "prefab_hash": -1011701267, + "desc": "", + "name": "Composite Wall (Type 4)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeWindow": { + "prefab": { + "prefab_name": "StructureCompositeWindow", + "prefab_hash": -2060571986, + "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.", + "name": "Composite Window" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureCompositeWindowIron": { + "prefab": { + "prefab_name": "StructureCompositeWindowIron", + "prefab_hash": -688284639, + "desc": "", + "name": "Iron Window" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureComputer": { + "prefab": { + "prefab_name": "StructureComputer", + "prefab_hash": -626563514, + "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", + "name": "Computer" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {}, + "2": {} + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Data Disk", + "typ": "DataDisk" + }, + { + "name": "Data Disk", + "typ": "DataDisk" + }, + { + "name": "Motherboard", + "typ": "Motherboard" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureCondensationChamber": { + "prefab": { + "prefab_name": "StructureCondensationChamber", + "prefab_hash": 1420719315, + "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.", + "name": "Condensation Chamber" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.001, + "radiation_factor": 0.000050000002 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input2" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureCondensationValve": { + "prefab": { + "prefab_name": "StructureCondensationValve", + "prefab_hash": -965741795, + "desc": "Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction.", + "name": "Condensation Valve" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureConsole": { + "prefab": { + "prefab_name": "StructureConsole", + "prefab_hash": 235638270, + "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.", + "name": "Console" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Circuit Board", + "typ": "Circuitboard" + }, + { + "name": "Data Disk", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureConsoleDual": { + "prefab": { + "prefab_name": "StructureConsoleDual", + "prefab_hash": -722284333, + "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.", + "name": "Console Dual" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Circuit Board", + "typ": "Circuitboard" + }, + { + "name": "Data Disk", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureConsoleLED1x2": { + "prefab": { + "prefab_name": "StructureConsoleLED1x2", + "prefab_hash": -53151617, + "desc": "0.Default\n1.Percent\n2.Power", + "name": "LED Display (Medium)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Color": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Default", + "1": "Percent", + "2": "Power" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureConsoleLED1x3": { + "prefab": { + "prefab_name": "StructureConsoleLED1x3", + "prefab_hash": -1949054743, + "desc": "0.Default\n1.Percent\n2.Power", + "name": "LED Display (Large)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Color": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Default", + "1": "Percent", + "2": "Power" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureConsoleLED5": { + "prefab": { + "prefab_name": "StructureConsoleLED5", + "prefab_hash": -815193061, + "desc": "0.Default\n1.Percent\n2.Power", + "name": "LED Display (Small)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Color": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Default", + "1": "Percent", + "2": "Power" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureConsoleMonitor": { + "prefab": { + "prefab_name": "StructureConsoleMonitor", + "prefab_hash": 801677497, + "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.", + "name": "Console Monitor" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Circuit Board", + "typ": "Circuitboard" + }, + { + "name": "Data Disk", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureControlChair": { + "prefab": { + "prefab_name": "StructureControlChair", + "prefab_hash": -1961153710, + "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.", + "name": "Control Chair" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Entity", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureCornerLocker": { + "prefab": { + "prefab_name": "StructureCornerLocker", + "prefab_hash": -1968255729, + "desc": "", + "name": "Corner Locker" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureCrateMount": { + "prefab": { + "prefab_name": "StructureCrateMount", + "prefab_hash": -733500083, + "desc": "", + "name": "Container Mount" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "Container Slot", + "typ": "None" + } + ] + }, + "StructureCryoTube": { + "prefab": { + "prefab_name": "StructureCryoTube", + "prefab_hash": 1938254586, + "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.", + "name": "CryoTube" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Bed", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureCryoTubeHorizontal": { + "prefab": { + "prefab_name": "StructureCryoTubeHorizontal", + "prefab_hash": 1443059329, + "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.", + "name": "Cryo Tube Horizontal" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.005, + "radiation_factor": 0.005 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Player", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureCryoTubeVertical": { + "prefab": { + "prefab_name": "StructureCryoTubeVertical", + "prefab_hash": -1381321828, + "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.", + "name": "Cryo Tube Vertical" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.005, + "radiation_factor": 0.005 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Player", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureDaylightSensor": { + "prefab": { + "prefab_name": "StructureDaylightSensor", + "prefab_hash": 1076425094, + "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.", + "name": "Daylight Sensor" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Mode": "ReadWrite", + "Activate": "ReadWrite", + "Horizontal": "Read", + "Vertical": "Read", + "SolarAngle": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "SolarIrradiance": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Default", + "1": "Horizontal", + "2": "Vertical" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureDeepMiner": { + "prefab": { + "prefab_name": "StructureDeepMiner", + "prefab_hash": 265720906, + "desc": "Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s", + "name": "Deep Miner" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "ClearMemory": "Write", + "ExportCount": "Read", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureDigitalValve": { + "prefab": { + "prefab_name": "StructureDigitalValve", + "prefab_hash": -1280984102, + "desc": "The digital valve allows Stationeers to create logic-controlled valves and pipe networks.", + "name": "Digital Valve" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureDiode": { + "prefab": { + "prefab_name": "StructureDiode", + "prefab_hash": 1944485013, + "desc": "", + "name": "LED" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Color": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureDiodeSlide": { + "prefab": { + "prefab_name": "StructureDiodeSlide", + "prefab_hash": 576516101, + "desc": "", + "name": "Diode Slide" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureDockPortSide": { + "prefab": { + "prefab_name": "StructureDockPortSide", + "prefab_hash": -137465079, + "desc": "", + "name": "Dock (Port Side)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Data", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureDrinkingFountain": { + "prefab": { + "prefab_name": "StructureDrinkingFountain", + "prefab_hash": 1968371847, + "desc": "", + "name": "" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureElectrolyzer": { + "prefab": { + "prefab_name": "StructureElectrolyzer", + "prefab_hash": -1668992663, + "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.", + "name": "Electrolyzer" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "RatioLiquidNitrogenInput": "Read", + "RatioLiquidNitrogenOutput": "Read", + "RatioLiquidOxygen": "Read", + "RatioLiquidOxygenInput": "Read", + "RatioLiquidOxygenOutput": "Read", + "RatioLiquidVolatiles": "Read", + "RatioLiquidVolatilesInput": "Read", + "RatioLiquidVolatilesOutput": "Read", + "RatioSteam": "Read", + "RatioSteamInput": "Read", + "RatioSteamOutput": "Read", + "RatioLiquidCarbonDioxide": "Read", + "RatioLiquidCarbonDioxideInput": "Read", + "RatioLiquidCarbonDioxideOutput": "Read", + "RatioLiquidPollutant": "Read", + "RatioLiquidPollutantInput": "Read", + "RatioLiquidPollutantOutput": "Read", + "RatioLiquidNitrousOxide": "Read", + "RatioLiquidNitrousOxideInput": "Read", + "RatioLiquidNitrousOxideOutput": "Read", + "ReferenceId": "Read", + "RatioHydrogen": "Read", + "RatioLiquidHydrogen": "Read", + "RatioPollutedWater": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Idle", + "1": "Active" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": true + }, + "slots": [ + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": 2, + "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 + } + }, + "StructureElectronicsPrinter": { + "prefab": { + "prefab_name": "StructureElectronicsPrinter", + "prefab_hash": 1307165496, + "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.", + "name": "Electronics Printer" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Ingot" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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": { + "consumed_resouces": [ + "ItemAstroloyIngot", + "ItemConstantanIngot", + "ItemCopperIngot", + "ItemElectrumIngot", + "ItemGoldIngot", + "ItemHastelloyIngot", + "ItemInconelIngot", + "ItemInvarIngot", + "ItemIronIngot", + "ItemLeadIngot", + "ItemNickelIngot", + "ItemSiliconIngot", + "ItemSilverIngot", + "ItemSolderIngot", + "ItemSolidFuel", + "ItemSteelIngot", + "ItemStelliteIngot", + "ItemWaspaloyIngot", + "ItemWasteIngot" + ], + "processed_reagents": [] + }, + "memory": { + "instructions": { + "DeviceSetLock": { + "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 |", + "typ": "PrinterInstruction", + "value": 6 + }, + "EjectAllReagents": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 8 + }, + "EjectReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 7 + }, + "ExecuteRecipe": { + "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 |", + "typ": "PrinterInstruction", + "value": 2 + }, + "JumpIfNextInvalid": { + "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 |", + "typ": "PrinterInstruction", + "value": 4 + }, + "JumpToAddress": { + "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 |", + "typ": "PrinterInstruction", + "value": 5 + }, + "MissingRecipeReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 9 + }, + "StackPointer": { + "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 |", + "typ": "PrinterInstruction", + "value": 1 + }, + "WaitUntilNextValid": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 3 + } + }, + "memory_access": "ReadWrite", + "memory_size": 64 + } + }, + "StructureElevatorLevelFront": { + "prefab": { + "prefab_name": "StructureElevatorLevelFront", + "prefab_hash": -827912235, + "desc": "", + "name": "Elevator Level (Cabled)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "ElevatorSpeed": "ReadWrite", + "ElevatorLevel": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Elevator", + "role": "None" + }, + { + "typ": "Elevator", + "role": "None" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureElevatorLevelIndustrial": { + "prefab": { + "prefab_name": "StructureElevatorLevelIndustrial", + "prefab_hash": 2060648791, + "desc": "", + "name": "Elevator Level" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "ElevatorSpeed": "ReadWrite", + "ElevatorLevel": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Elevator", + "role": "None" + }, + { + "typ": "Elevator", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureElevatorShaft": { + "prefab": { + "prefab_name": "StructureElevatorShaft", + "prefab_hash": 826144419, + "desc": "", + "name": "Elevator Shaft (Cabled)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "ElevatorSpeed": "ReadWrite", + "ElevatorLevel": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Elevator", + "role": "None" + }, + { + "typ": "Elevator", + "role": "None" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureElevatorShaftIndustrial": { + "prefab": { + "prefab_name": "StructureElevatorShaftIndustrial", + "prefab_hash": 1998354978, + "desc": "", + "name": "Elevator Shaft" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "ElevatorSpeed": "ReadWrite", + "ElevatorLevel": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Elevator", + "role": "None" + }, + { + "typ": "Elevator", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureEmergencyButton": { + "prefab": { + "prefab_name": "StructureEmergencyButton", + "prefab_hash": 1668452680, + "desc": "Description coming.", + "name": "Important Button" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureEngineMountTypeA1": { + "prefab": { + "prefab_name": "StructureEngineMountTypeA1", + "prefab_hash": 2035781224, + "desc": "", + "name": "Engine Mount (Type A1)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureEvaporationChamber": { + "prefab": { + "prefab_name": "StructureEvaporationChamber", + "prefab_hash": -1429782576, + "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.", + "name": "Evaporation Chamber" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.001, + "radiation_factor": 0.000050000002 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input2" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureExpansionValve": { + "prefab": { + "prefab_name": "StructureExpansionValve", + "prefab_hash": 195298587, + "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.", + "name": "Expansion Valve" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureFairingTypeA1": { + "prefab": { + "prefab_name": "StructureFairingTypeA1", + "prefab_hash": 1622567418, + "desc": "", + "name": "Fairing (Type A1)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureFairingTypeA2": { + "prefab": { + "prefab_name": "StructureFairingTypeA2", + "prefab_hash": -104908736, + "desc": "", + "name": "Fairing (Type A2)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureFairingTypeA3": { + "prefab": { + "prefab_name": "StructureFairingTypeA3", + "prefab_hash": -1900541738, + "desc": "", + "name": "Fairing (Type A3)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureFiltration": { + "prefab": { + "prefab_name": "StructureFiltration", + "prefab_hash": -348054045, + "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", + "name": "Filtration" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {}, + "2": {} + }, + "logic_types": { + "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", + "RatioLiquidNitrogenInput": "Read", + "RatioLiquidNitrogenOutput": "Read", + "RatioLiquidNitrogenOutput2": "Read", + "RatioLiquidOxygenInput": "Read", + "RatioLiquidOxygenOutput": "Read", + "RatioLiquidOxygenOutput2": "Read", + "RatioLiquidVolatilesInput": "Read", + "RatioLiquidVolatilesOutput": "Read", + "RatioLiquidVolatilesOutput2": "Read", + "RatioSteamInput": "Read", + "RatioSteamOutput": "Read", + "RatioSteamOutput2": "Read", + "RatioLiquidCarbonDioxideInput": "Read", + "RatioLiquidCarbonDioxideOutput": "Read", + "RatioLiquidCarbonDioxideOutput2": "Read", + "RatioLiquidPollutantInput": "Read", + "RatioLiquidPollutantOutput": "Read", + "RatioLiquidPollutantOutput2": "Read", + "RatioLiquidNitrousOxideInput": "Read", + "RatioLiquidNitrousOxideOutput": "Read", + "RatioLiquidNitrousOxideOutput2": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Idle", + "1": "Active" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": true + }, + "slots": [ + { + "name": "Gas Filter", + "typ": "GasFilter" + }, + { + "name": "Gas Filter", + "typ": "GasFilter" + }, + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Waste" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": 2, + "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 + } + }, + "StructureFlagSmall": { + "prefab": { + "prefab_name": "StructureFlagSmall", + "prefab_hash": -1529819532, + "desc": "", + "name": "Small Flag" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureFlashingLight": { + "prefab": { + "prefab_name": "StructureFlashingLight", + "prefab_hash": -1535893860, + "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'.", + "name": "Flashing Light" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureFlatBench": { + "prefab": { + "prefab_name": "StructureFlatBench", + "prefab_hash": 839890807, + "desc": "", + "name": "Bench (Flat)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureFloorDrain": { + "prefab": { + "prefab_name": "StructureFloorDrain", + "prefab_hash": 1048813293, + "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.", + "name": "Passive Liquid Inlet" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructureFrame": { + "prefab": { + "prefab_name": "StructureFrame", + "prefab_hash": 1432512808, + "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.", + "name": "Steel Frame" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureFrameCorner": { + "prefab": { + "prefab_name": "StructureFrameCorner", + "prefab_hash": -2112390778, + "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.", + "name": "Steel Frame (Corner)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureFrameCornerCut": { + "prefab": { + "prefab_name": "StructureFrameCornerCut", + "prefab_hash": 271315669, + "desc": "0.Mode0\n1.Mode1", + "name": "Steel Frame (Corner Cut)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureFrameIron": { + "prefab": { + "prefab_name": "StructureFrameIron", + "prefab_hash": -1240951678, + "desc": "", + "name": "Iron Frame" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureFrameSide": { + "prefab": { + "prefab_name": "StructureFrameSide", + "prefab_hash": -302420053, + "desc": "More durable than the Iron Frame, steel frames also provide variations for more ornate constructions.", + "name": "Steel Frame (Side)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureFridgeBig": { + "prefab": { + "prefab_name": "StructureFridgeBig", + "prefab_hash": 958476921, + "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.", + "name": "Fridge (Large)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": 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" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureFridgeSmall": { + "prefab": { + "prefab_name": "StructureFridgeSmall", + "prefab_hash": 751887598, + "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.", + "name": "Fridge Small" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureFurnace": { + "prefab": { + "prefab_name": "StructureFurnace", + "prefab_hash": 1947944864, + "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.", + "name": "Furnace" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Output2" + }, + { + "typ": "Data", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureFuselageTypeA1": { + "prefab": { + "prefab_name": "StructureFuselageTypeA1", + "prefab_hash": 1033024712, + "desc": "", + "name": "Fuselage (Type A1)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureFuselageTypeA2": { + "prefab": { + "prefab_name": "StructureFuselageTypeA2", + "prefab_hash": -1533287054, + "desc": "", + "name": "Fuselage (Type A2)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureFuselageTypeA4": { + "prefab": { + "prefab_name": "StructureFuselageTypeA4", + "prefab_hash": 1308115015, + "desc": "", + "name": "Fuselage (Type A4)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureFuselageTypeC5": { + "prefab": { + "prefab_name": "StructureFuselageTypeC5", + "prefab_hash": 147395155, + "desc": "", + "name": "Fuselage (Type C5)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureGasGenerator": { + "prefab": { + "prefab_name": "StructureGasGenerator", + "prefab_hash": 1165997963, + "desc": "", + "name": "Gas Fuel Generator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.01, + "radiation_factor": 0.01 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureGasMixer": { + "prefab": { + "prefab_name": "StructureGasMixer", + "prefab_hash": 2104106366, + "desc": "Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%.", + "name": "Gas Mixer" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Input2" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureGasSensor": { + "prefab": { + "prefab_name": "StructureGasSensor", + "prefab_hash": -1252983604, + "desc": "Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents.", + "name": "Gas Sensor" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureGasTankStorage": { + "prefab": { + "prefab_name": "StructureGasTankStorage", + "prefab_hash": 1632165346, + "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.", + "name": "Gas Tank Storage" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Pressure": "Read", + "Temperature": "Read", + "RatioOxygen": "Read", + "RatioCarbonDioxide": "Read", + "RatioNitrogen": "Read", + "RatioPollutant": "Read", + "RatioVolatiles": "Read", + "RatioWater": "Read", + "Quantity": "Read", + "RatioNitrousOxide": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "GasCanister" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureGasUmbilicalFemale": { + "prefab": { + "prefab_name": "StructureGasUmbilicalFemale", + "prefab_hash": -1680477930, + "desc": "", + "name": "Umbilical Socket (Gas)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureGasUmbilicalFemaleSide": { + "prefab": { + "prefab_name": "StructureGasUmbilicalFemaleSide", + "prefab_hash": -648683847, + "desc": "", + "name": "Umbilical Socket Angle (Gas)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureGasUmbilicalMale": { + "prefab": { + "prefab_name": "StructureGasUmbilicalMale", + "prefab_hash": -1814939203, + "desc": "0.Left\n1.Center\n2.Right", + "name": "Umbilical (Gas)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Left", + "1": "Center", + "2": "Right" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureGlassDoor": { + "prefab": { + "prefab_name": "StructureGlassDoor", + "prefab_hash": -324331872, + "desc": "0.Operate\n1.Logic", + "name": "Glass Door" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureGovernedGasEngine": { + "prefab": { + "prefab_name": "StructureGovernedGasEngine", + "prefab_hash": -214232602, + "desc": "The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas.", + "name": "Pumped Gas Engine" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureGroundBasedTelescope": { + "prefab": { + "prefab_name": "StructureGroundBasedTelescope", + "prefab_hash": -619745681, + "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.", + "name": "Telescope" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureGrowLight": { + "prefab": { + "prefab_name": "StructureGrowLight", + "prefab_hash": -1758710260, + "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. ", + "name": "Grow Light" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureHarvie": { + "prefab": { + "prefab_name": "StructureHarvie", + "prefab_hash": 958056199, + "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.", + "name": "Harvie" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Idle", + "1": "Happy", + "2": "UnHappy", + "3": "Dead" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Plant" + }, + { + "name": "Export", + "typ": "None" + }, + { + "name": "Hand", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureHeatExchangeLiquidtoGas": { + "prefab": { + "prefab_name": "StructureHeatExchangeLiquidtoGas", + "prefab_hash": 944685608, + "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.", + "name": "Heat Exchanger - Liquid + Gas" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureHeatExchangerGastoGas": { + "prefab": { + "prefab_name": "StructureHeatExchangerGastoGas", + "prefab_hash": 21266291, + "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.", + "name": "Heat Exchanger - Gas" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureHeatExchangerLiquidtoLiquid": { + "prefab": { + "prefab_name": "StructureHeatExchangerLiquidtoLiquid", + "prefab_hash": -613784254, + "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", + "name": "Heat Exchanger - Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureHorizontalAutoMiner": { + "prefab": { + "prefab_name": "StructureHorizontalAutoMiner", + "prefab_hash": 1070427573, + "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", + "name": "OGRE" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "ClearMemory": "Write", + "ExportCount": "Read", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureHydraulicPipeBender": { + "prefab": { + "prefab_name": "StructureHydraulicPipeBender", + "prefab_hash": -1888248335, + "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.", + "name": "Hydraulic Pipe Bender" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Ingot" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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": { + "consumed_resouces": [ + "ItemAstroloyIngot", + "ItemConstantanIngot", + "ItemCopperIngot", + "ItemElectrumIngot", + "ItemGoldIngot", + "ItemHastelloyIngot", + "ItemInconelIngot", + "ItemInvarIngot", + "ItemIronIngot", + "ItemLeadIngot", + "ItemNickelIngot", + "ItemSiliconIngot", + "ItemSilverIngot", + "ItemSolderIngot", + "ItemSolidFuel", + "ItemSteelIngot", + "ItemStelliteIngot", + "ItemWaspaloyIngot", + "ItemWasteIngot" + ], + "processed_reagents": [] + }, + "memory": { + "instructions": { + "DeviceSetLock": { + "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 |", + "typ": "PrinterInstruction", + "value": 6 + }, + "EjectAllReagents": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 8 + }, + "EjectReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 7 + }, + "ExecuteRecipe": { + "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 |", + "typ": "PrinterInstruction", + "value": 2 + }, + "JumpIfNextInvalid": { + "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 |", + "typ": "PrinterInstruction", + "value": 4 + }, + "JumpToAddress": { + "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 |", + "typ": "PrinterInstruction", + "value": 5 + }, + "MissingRecipeReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 9 + }, + "StackPointer": { + "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 |", + "typ": "PrinterInstruction", + "value": 1 + }, + "WaitUntilNextValid": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 3 + } + }, + "memory_access": "ReadWrite", + "memory_size": 64 + } + }, + "StructureHydroponicsStation": { + "prefab": { + "prefab_name": "StructureHydroponicsStation", + "prefab_hash": 1441767298, + "desc": "", + "name": "Hydroponics Station" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": 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" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureHydroponicsTray": { + "prefab": { + "prefab_name": "StructureHydroponicsTray", + "prefab_hash": 1464854517, + "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.", + "name": "Hydroponics Tray" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Plant", + "typ": "Plant" + }, + { + "name": "Fertiliser", + "typ": "Plant" + } + ] + }, + "StructureHydroponicsTrayData": { + "prefab": { + "prefab_name": "StructureHydroponicsTrayData", + "prefab_hash": -1841632400, + "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.", + "name": "Hydroponics Device" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Plant", + "typ": "Plant" + }, + { + "name": "Fertiliser", + "typ": "Plant" + } + ], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "None" + }, + { + "typ": "Data", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureIceCrusher": { + "prefab": { + "prefab_name": "StructureIceCrusher", + "prefab_hash": 443849486, + "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.", + "name": "Ice Crusher" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Ore" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Output2" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureIgniter": { + "prefab": { + "prefab_name": "StructureIgniter", + "prefab_hash": 1005491513, + "desc": "It gets the party started. Especially if that party is an explosive gas mixture.", + "name": "Igniter" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureInLineTankGas1x1": { + "prefab": { + "prefab_name": "StructureInLineTankGas1x1", + "prefab_hash": -1693382705, + "desc": "A small expansion tank that increases the volume of a pipe network.", + "name": "In-Line Tank Small Gas" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructureInLineTankGas1x2": { + "prefab": { + "prefab_name": "StructureInLineTankGas1x2", + "prefab_hash": 35149429, + "desc": "A small expansion tank that increases the volume of a pipe network.", + "name": "In-Line Tank Gas" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructureInLineTankLiquid1x1": { + "prefab": { + "prefab_name": "StructureInLineTankLiquid1x1", + "prefab_hash": 543645499, + "desc": "A small expansion tank that increases the volume of a pipe network.", + "name": "In-Line Tank Small Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructureInLineTankLiquid1x2": { + "prefab": { + "prefab_name": "StructureInLineTankLiquid1x2", + "prefab_hash": -1183969663, + "desc": "A small expansion tank that increases the volume of a pipe network.", + "name": "In-Line Tank Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructureInsulatedInLineTankGas1x1": { + "prefab": { + "prefab_name": "StructureInsulatedInLineTankGas1x1", + "prefab_hash": 1818267386, + "desc": "", + "name": "Insulated In-Line Tank Small Gas" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructureInsulatedInLineTankGas1x2": { + "prefab": { + "prefab_name": "StructureInsulatedInLineTankGas1x2", + "prefab_hash": -177610944, + "desc": "", + "name": "Insulated In-Line Tank Gas" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructureInsulatedInLineTankLiquid1x1": { + "prefab": { + "prefab_name": "StructureInsulatedInLineTankLiquid1x1", + "prefab_hash": -813426145, + "desc": "", + "name": "Insulated In-Line Tank Small Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructureInsulatedInLineTankLiquid1x2": { + "prefab": { + "prefab_name": "StructureInsulatedInLineTankLiquid1x2", + "prefab_hash": 1452100517, + "desc": "", + "name": "Insulated In-Line Tank Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructureInsulatedPipeCorner": { + "prefab": { + "prefab_name": "StructureInsulatedPipeCorner", + "prefab_hash": -1967711059, + "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", + "name": "Insulated Pipe (Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructureInsulatedPipeCrossJunction": { + "prefab": { + "prefab_name": "StructureInsulatedPipeCrossJunction", + "prefab_hash": -92778058, + "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", + "name": "Insulated Pipe (Cross Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructureInsulatedPipeCrossJunction3": { + "prefab": { + "prefab_name": "StructureInsulatedPipeCrossJunction3", + "prefab_hash": 1328210035, + "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", + "name": "Insulated Pipe (3-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructureInsulatedPipeCrossJunction4": { + "prefab": { + "prefab_name": "StructureInsulatedPipeCrossJunction4", + "prefab_hash": -783387184, + "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", + "name": "Insulated Pipe (4-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructureInsulatedPipeCrossJunction5": { + "prefab": { + "prefab_name": "StructureInsulatedPipeCrossJunction5", + "prefab_hash": -1505147578, + "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", + "name": "Insulated Pipe (5-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructureInsulatedPipeCrossJunction6": { + "prefab": { + "prefab_name": "StructureInsulatedPipeCrossJunction6", + "prefab_hash": 1061164284, + "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", + "name": "Insulated Pipe (6-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructureInsulatedPipeLiquidCorner": { + "prefab": { + "prefab_name": "StructureInsulatedPipeLiquidCorner", + "prefab_hash": 1713710802, + "desc": "Liquid piping with very low temperature loss or gain.", + "name": "Insulated Liquid Pipe (Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructureInsulatedPipeLiquidCrossJunction": { + "prefab": { + "prefab_name": "StructureInsulatedPipeLiquidCrossJunction", + "prefab_hash": 1926651727, + "desc": "Liquid piping with very low temperature loss or gain.", + "name": "Insulated Liquid Pipe (3-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructureInsulatedPipeLiquidCrossJunction4": { + "prefab": { + "prefab_name": "StructureInsulatedPipeLiquidCrossJunction4", + "prefab_hash": 363303270, + "desc": "Liquid piping with very low temperature loss or gain.", + "name": "Insulated Liquid Pipe (4-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructureInsulatedPipeLiquidCrossJunction5": { + "prefab": { + "prefab_name": "StructureInsulatedPipeLiquidCrossJunction5", + "prefab_hash": 1654694384, + "desc": "Liquid piping with very low temperature loss or gain.", + "name": "Insulated Liquid Pipe (5-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructureInsulatedPipeLiquidCrossJunction6": { + "prefab": { + "prefab_name": "StructureInsulatedPipeLiquidCrossJunction6", + "prefab_hash": -72748982, + "desc": "Liquid piping with very low temperature loss or gain.", + "name": "Insulated Liquid Pipe (6-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructureInsulatedPipeLiquidStraight": { + "prefab": { + "prefab_name": "StructureInsulatedPipeLiquidStraight", + "prefab_hash": 295678685, + "desc": "Liquid piping with very low temperature loss or gain.", + "name": "Insulated Liquid Pipe (Straight)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructureInsulatedPipeLiquidTJunction": { + "prefab": { + "prefab_name": "StructureInsulatedPipeLiquidTJunction", + "prefab_hash": -532384855, + "desc": "Liquid piping with very low temperature loss or gain.", + "name": "Insulated Liquid Pipe (T Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructureInsulatedPipeStraight": { + "prefab": { + "prefab_name": "StructureInsulatedPipeStraight", + "prefab_hash": 2134172356, + "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", + "name": "Insulated Pipe (Straight)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructureInsulatedPipeTJunction": { + "prefab": { + "prefab_name": "StructureInsulatedPipeTJunction", + "prefab_hash": -2076086215, + "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", + "name": "Insulated Pipe (T Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructureInsulatedTankConnector": { + "prefab": { + "prefab_name": "StructureInsulatedTankConnector", + "prefab_hash": -31273349, + "desc": "", + "name": "Insulated Tank Connector" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "", + "typ": "None" + } + ] + }, + "StructureInsulatedTankConnectorLiquid": { + "prefab": { + "prefab_name": "StructureInsulatedTankConnectorLiquid", + "prefab_hash": -1602030414, + "desc": "", + "name": "Insulated Tank Connector Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Portable Slot", + "typ": "None" + } + ] + }, + "StructureInteriorDoorGlass": { + "prefab": { + "prefab_name": "StructureInteriorDoorGlass", + "prefab_hash": -2096421875, + "desc": "0.Operate\n1.Logic", + "name": "Interior Door Glass" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureInteriorDoorPadded": { + "prefab": { + "prefab_name": "StructureInteriorDoorPadded", + "prefab_hash": 847461335, + "desc": "0.Operate\n1.Logic", + "name": "Interior Door Padded" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureInteriorDoorPaddedThin": { + "prefab": { + "prefab_name": "StructureInteriorDoorPaddedThin", + "prefab_hash": 1981698201, + "desc": "0.Operate\n1.Logic", + "name": "Interior Door Padded Thin" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureInteriorDoorTriangle": { + "prefab": { + "prefab_name": "StructureInteriorDoorTriangle", + "prefab_hash": -1182923101, + "desc": "0.Operate\n1.Logic", + "name": "Interior Door Triangle" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureKlaxon": { + "prefab": { + "prefab_name": "StructureKlaxon", + "prefab_hash": -828056979, + "desc": "Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output.", + "name": "Klaxon Speaker" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Volume": "ReadWrite", + "PrefabHash": "Read", + "SoundAlert": "ReadWrite", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "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" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLadder": { + "prefab": { + "prefab_name": "StructureLadder", + "prefab_hash": -415420281, + "desc": "", + "name": "Ladder" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureLadderEnd": { + "prefab": { + "prefab_name": "StructureLadderEnd", + "prefab_hash": 1541734993, + "desc": "", + "name": "Ladder End" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureLargeDirectHeatExchangeGastoGas": { + "prefab": { + "prefab_name": "StructureLargeDirectHeatExchangeGastoGas", + "prefab_hash": -1230658883, + "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", + "name": "Large Direct Heat Exchanger - Gas + Gas" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Input2" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLargeDirectHeatExchangeGastoLiquid": { + "prefab": { + "prefab_name": "StructureLargeDirectHeatExchangeGastoLiquid", + "prefab_hash": 1412338038, + "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", + "name": "Large Direct Heat Exchanger - Gas + Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Input2" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLargeDirectHeatExchangeLiquidtoLiquid": { + "prefab": { + "prefab_name": "StructureLargeDirectHeatExchangeLiquidtoLiquid", + "prefab_hash": 792686502, + "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", + "name": "Large Direct Heat Exchange - Liquid + Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Input2" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLargeExtendableRadiator": { + "prefab": { + "prefab_name": "StructureLargeExtendableRadiator", + "prefab_hash": -566775170, + "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.", + "name": "Large Extendable Radiator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.02, + "radiation_factor": 2.0 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Horizontal": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLargeHangerDoor": { + "prefab": { + "prefab_name": "StructureLargeHangerDoor", + "prefab_hash": -1351081801, + "desc": "1 x 3 modular door piece for building hangar doors.", + "name": "Large Hangar Door" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLargeSatelliteDish": { + "prefab": { + "prefab_name": "StructureLargeSatelliteDish", + "prefab_hash": 1913391845, + "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.", + "name": "Large Satellite Dish" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLaunchMount": { + "prefab": { + "prefab_name": "StructureLaunchMount", + "prefab_hash": -558953231, + "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.", + "name": "Launch Mount" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureLightLong": { + "prefab": { + "prefab_name": "StructureLightLong", + "prefab_hash": 797794350, + "desc": "", + "name": "Wall Light (Long)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLightLongAngled": { + "prefab": { + "prefab_name": "StructureLightLongAngled", + "prefab_hash": 1847265835, + "desc": "", + "name": "Wall Light (Long Angled)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLightLongWide": { + "prefab": { + "prefab_name": "StructureLightLongWide", + "prefab_hash": 555215790, + "desc": "", + "name": "Wall Light (Long Wide)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLightRound": { + "prefab": { + "prefab_name": "StructureLightRound", + "prefab_hash": 1514476632, + "desc": "Description coming.", + "name": "Light Round" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLightRoundAngled": { + "prefab": { + "prefab_name": "StructureLightRoundAngled", + "prefab_hash": 1592905386, + "desc": "Description coming.", + "name": "Light Round (Angled)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLightRoundSmall": { + "prefab": { + "prefab_name": "StructureLightRoundSmall", + "prefab_hash": 1436121888, + "desc": "Description coming.", + "name": "Light Round (Small)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLiquidDrain": { + "prefab": { + "prefab_name": "StructureLiquidDrain", + "prefab_hash": 1687692899, + "desc": "When connected to power and activated, it pumps liquid from a liquid network into the world.", + "name": "Active Liquid Outlet" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "None" + }, + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLiquidPipeAnalyzer": { + "prefab": { + "prefab_name": "StructureLiquidPipeAnalyzer", + "prefab_hash": -2113838091, + "desc": "", + "name": "Liquid Pipe Analyzer" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLiquidPipeHeater": { + "prefab": { + "prefab_name": "StructureLiquidPipeHeater", + "prefab_hash": -287495560, + "desc": "Adds 1000 joules of heat per tick to the contents of your pipe network.", + "name": "Pipe Heater (Liquid)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLiquidPipeOneWayValve": { + "prefab": { + "prefab_name": "StructureLiquidPipeOneWayValve", + "prefab_hash": -782453061, + "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..", + "name": "One Way Valve (Liquid)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLiquidPipeRadiator": { + "prefab": { + "prefab_name": "StructureLiquidPipeRadiator", + "prefab_hash": 2072805863, + "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.", + "name": "Liquid Pipe Convection Radiator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 1.0, + "radiation_factor": 0.75 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureLiquidPressureRegulator": { + "prefab": { + "prefab_name": "StructureLiquidPressureRegulator", + "prefab_hash": 482248766, + "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.", + "name": "Liquid Volume Regulator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLiquidTankBig": { + "prefab": { + "prefab_name": "StructureLiquidTankBig", + "prefab_hash": 1098900430, + "desc": "", + "name": "Liquid Tank Big" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLiquidTankBigInsulated": { + "prefab": { + "prefab_name": "StructureLiquidTankBigInsulated", + "prefab_hash": -1430440215, + "desc": "", + "name": "Insulated Liquid Tank Big" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLiquidTankSmall": { + "prefab": { + "prefab_name": "StructureLiquidTankSmall", + "prefab_hash": 1988118157, + "desc": "", + "name": "Liquid Tank Small" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLiquidTankSmallInsulated": { + "prefab": { + "prefab_name": "StructureLiquidTankSmallInsulated", + "prefab_hash": 608607718, + "desc": "", + "name": "Insulated Liquid Tank Small" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLiquidTankStorage": { + "prefab": { + "prefab_name": "StructureLiquidTankStorage", + "prefab_hash": 1691898022, + "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.", + "name": "Liquid Tank Storage" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Pressure": "Read", + "Temperature": "Read", + "RatioOxygen": "Read", + "RatioCarbonDioxide": "Read", + "RatioNitrogen": "Read", + "RatioPollutant": "Read", + "RatioVolatiles": "Read", + "RatioWater": "Read", + "Quantity": "Read", + "RatioNitrousOxide": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Liquid Canister", + "typ": "LiquidCanister" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLiquidTurboVolumePump": { + "prefab": { + "prefab_name": "StructureLiquidTurboVolumePump", + "prefab_hash": -1051805505, + "desc": "Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction.", + "name": "Turbo Volume Pump (Liquid)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Right", + "1": "Left" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLiquidUmbilicalFemale": { + "prefab": { + "prefab_name": "StructureLiquidUmbilicalFemale", + "prefab_hash": 1734723642, + "desc": "", + "name": "Umbilical Socket (Liquid)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLiquidUmbilicalFemaleSide": { + "prefab": { + "prefab_name": "StructureLiquidUmbilicalFemaleSide", + "prefab_hash": 1220870319, + "desc": "", + "name": "Umbilical Socket Angle (Liquid)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLiquidUmbilicalMale": { + "prefab": { + "prefab_name": "StructureLiquidUmbilicalMale", + "prefab_hash": -1798420047, + "desc": "0.Left\n1.Center\n2.Right", + "name": "Umbilical (Liquid)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Left", + "1": "Center", + "2": "Right" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLiquidValve": { + "prefab": { + "prefab_name": "StructureLiquidValve", + "prefab_hash": 1849974453, + "desc": "", + "name": "Liquid Valve" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLiquidVolumePump": { + "prefab": { + "prefab_name": "StructureLiquidVolumePump", + "prefab_hash": -454028979, + "desc": "", + "name": "Liquid Volume Pump" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLockerSmall": { + "prefab": { + "prefab_name": "StructureLockerSmall", + "prefab_hash": -647164662, + "desc": "", + "name": "Locker (Small)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureLogicBatchReader": { + "prefab": { + "prefab_name": "StructureLogicBatchReader", + "prefab_hash": 264413729, + "desc": "", + "name": "Batch Reader" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicBatchSlotReader": { + "prefab": { + "prefab_name": "StructureLogicBatchSlotReader", + "prefab_hash": 436888930, + "desc": "", + "name": "Batch Slot Reader" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicBatchWriter": { + "prefab": { + "prefab_name": "StructureLogicBatchWriter", + "prefab_hash": 1415443359, + "desc": "", + "name": "Batch Writer" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ForceWrite": "Write", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicButton": { + "prefab": { + "prefab_name": "StructureLogicButton", + "prefab_hash": 491845673, + "desc": "", + "name": "Button" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Activate": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Data", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicCompare": { + "prefab": { + "prefab_name": "StructureLogicCompare", + "prefab_hash": -1489728908, + "desc": "0.Equals\n1.Greater\n2.Less\n3.NotEquals", + "name": "Logic Compare" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Equals", + "1": "Greater", + "2": "Less", + "3": "NotEquals" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicDial": { + "prefab": { + "prefab_name": "StructureLogicDial", + "prefab_hash": 554524804, + "desc": "An assignable dial with up to 1000 modes.", + "name": "Dial" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Mode": "ReadWrite", + "Setting": "ReadWrite", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicGate": { + "prefab": { + "prefab_name": "StructureLogicGate", + "prefab_hash": 1942143074, + "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.", + "name": "Logic Gate" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "AND", + "1": "OR", + "2": "XOR", + "3": "NAND", + "4": "NOR", + "5": "XNOR" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicHashGen": { + "prefab": { + "prefab_name": "StructureLogicHashGen", + "prefab_hash": 2077593121, + "desc": "", + "name": "Logic Hash Generator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Data", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicMath": { + "prefab": { + "prefab_name": "StructureLogicMath", + "prefab_hash": 1657691323, + "desc": "0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log", + "name": "Logic Math" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Add", + "1": "Subtract", + "2": "Multiply", + "3": "Divide", + "4": "Mod", + "5": "Atan2", + "6": "Pow", + "7": "Log" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicMathUnary": { + "prefab": { + "prefab_name": "StructureLogicMathUnary", + "prefab_hash": -1160020195, + "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", + "name": "Math Unary" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "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" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicMemory": { + "prefab": { + "prefab_name": "StructureLogicMemory", + "prefab_hash": -851746783, + "desc": "", + "name": "Logic Memory" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Data", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicMinMax": { + "prefab": { + "prefab_name": "StructureLogicMinMax", + "prefab_hash": 929022276, + "desc": "0.Greater\n1.Less", + "name": "Logic Min/Max" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Greater", + "1": "Less" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicMirror": { + "prefab": { + "prefab_name": "StructureLogicMirror", + "prefab_hash": 2096189278, + "desc": "", + "name": "Logic Mirror" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": {}, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicReader": { + "prefab": { + "prefab_name": "StructureLogicReader", + "prefab_hash": -345383640, + "desc": "", + "name": "Logic Reader" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicReagentReader": { + "prefab": { + "prefab_name": "StructureLogicReagentReader", + "prefab_hash": -124308857, + "desc": "", + "name": "Reagent Reader" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicRocketDownlink": { + "prefab": { + "prefab_name": "StructureLogicRocketDownlink", + "prefab_hash": 876108549, + "desc": "", + "name": "Logic Rocket Downlink" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicRocketUplink": { + "prefab": { + "prefab_name": "StructureLogicRocketUplink", + "prefab_hash": 546002924, + "desc": "", + "name": "Logic Uplink" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicSelect": { + "prefab": { + "prefab_name": "StructureLogicSelect", + "prefab_hash": 1822736084, + "desc": "0.Equals\n1.Greater\n2.Less\n3.NotEquals", + "name": "Logic Select" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Equals", + "1": "Greater", + "2": "Less", + "3": "NotEquals" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicSlotReader": { + "prefab": { + "prefab_name": "StructureLogicSlotReader", + "prefab_hash": -767867194, + "desc": "", + "name": "Slot Reader" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicSorter": { + "prefab": { + "prefab_name": "StructureLogicSorter", + "prefab_hash": 873418029, + "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.", + "name": "Logic Sorter" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "ClearMemory": "Write", + "ExportCount": "Read", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "All", + "1": "Any", + "2": "None" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + }, + { + "name": "Export 2", + "typ": "None" + }, + { + "name": "Data Disk", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Output2" + }, + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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": { + "instructions": { + "FilterPrefabHashEquals": { + "description": "| 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": { + "description": "| 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": { + "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 |", + "typ": "SorterInstruction", + "value": 5 + }, + "FilterSlotTypeCompare": { + "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 |", + "typ": "SorterInstruction", + "value": 4 + }, + "FilterSortingClassCompare": { + "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 |", + "typ": "SorterInstruction", + "value": 3 + }, + "LimitNextExecutionByCount": { + "description": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |", + "typ": "SorterInstruction", + "value": 6 + } + }, + "memory_access": "ReadWrite", + "memory_size": 32 + } + }, + "StructureLogicSwitch": { + "prefab": { + "prefab_name": "StructureLogicSwitch", + "prefab_hash": 1220484876, + "desc": "", + "name": "Lever" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Data", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicSwitch2": { + "prefab": { + "prefab_name": "StructureLogicSwitch2", + "prefab_hash": 321604921, + "desc": "", + "name": "Switch" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Data", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicTransmitter": { + "prefab": { + "prefab_name": "StructureLogicTransmitter", + "prefab_hash": -693235651, + "desc": "Connects to Logic Transmitter", + "name": "Logic Transmitter" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": {}, + "modes": { + "0": "Passive", + "1": "Active" + }, + "transmission_receiver": true, + "wireless_logic": true, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicWriter": { + "prefab": { + "prefab_name": "StructureLogicWriter", + "prefab_hash": -1326019434, + "desc": "", + "name": "Logic Writer" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ForceWrite": "Write", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureLogicWriterSwitch": { + "prefab": { + "prefab_name": "StructureLogicWriterSwitch", + "prefab_hash": -1321250424, + "desc": "", + "name": "Logic Writer Switch" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ForceWrite": "Write", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureManualHatch": { + "prefab": { + "prefab_name": "StructureManualHatch", + "prefab_hash": -1808154199, + "desc": "Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock.", + "name": "Manual Hatch" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureMediumConvectionRadiator": { + "prefab": { + "prefab_name": "StructureMediumConvectionRadiator", + "prefab_hash": -1918215845, + "desc": "A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere.", + "name": "Medium Convection Radiator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 1.25, + "radiation_factor": 0.4 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureMediumConvectionRadiatorLiquid": { + "prefab": { + "prefab_name": "StructureMediumConvectionRadiatorLiquid", + "prefab_hash": -1169014183, + "desc": "A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere.", + "name": "Medium Convection Radiator Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 1.25, + "radiation_factor": 0.4 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureMediumHangerDoor": { + "prefab": { + "prefab_name": "StructureMediumHangerDoor", + "prefab_hash": -566348148, + "desc": "1 x 2 modular door piece for building hangar doors.", + "name": "Medium Hangar Door" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureMediumRadiator": { + "prefab": { + "prefab_name": "StructureMediumRadiator", + "prefab_hash": -975966237, + "desc": "A stand-alone radiator unit optimized for radiating heat in vacuums.", + "name": "Medium Radiator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.2, + "radiation_factor": 4.0 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureMediumRadiatorLiquid": { + "prefab": { + "prefab_name": "StructureMediumRadiatorLiquid", + "prefab_hash": -1141760613, + "desc": "A stand-alone liquid radiator unit optimized for radiating heat in vacuums.", + "name": "Medium Radiator Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.2, + "radiation_factor": 4.0 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureMediumRocketGasFuelTank": { + "prefab": { + "prefab_name": "StructureMediumRocketGasFuelTank", + "prefab_hash": -1093860567, + "desc": "", + "name": "Gas Capsule Tank Medium" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureMediumRocketLiquidFuelTank": { + "prefab": { + "prefab_name": "StructureMediumRocketLiquidFuelTank", + "prefab_hash": 1143639539, + "desc": "", + "name": "Liquid Capsule Tank Medium" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureMotionSensor": { + "prefab": { + "prefab_name": "StructureMotionSensor", + "prefab_hash": -1713470563, + "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.", + "name": "Motion Sensor" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Activate": "ReadWrite", + "Quantity": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureNitrolyzer": { + "prefab": { + "prefab_name": "StructureNitrolyzer", + "prefab_hash": 1898243702, + "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.", + "name": "Nitrolyzer" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "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", + "RatioLiquidNitrogenInput": "Read", + "RatioLiquidNitrogenInput2": "Read", + "RatioLiquidNitrogenOutput": "Read", + "RatioLiquidOxygen": "Read", + "RatioLiquidOxygenInput": "Read", + "RatioLiquidOxygenInput2": "Read", + "RatioLiquidOxygenOutput": "Read", + "RatioLiquidVolatiles": "Read", + "RatioLiquidVolatilesInput": "Read", + "RatioLiquidVolatilesInput2": "Read", + "RatioLiquidVolatilesOutput": "Read", + "RatioSteam": "Read", + "RatioSteamInput": "Read", + "RatioSteamInput2": "Read", + "RatioSteamOutput": "Read", + "RatioLiquidCarbonDioxide": "Read", + "RatioLiquidCarbonDioxideInput": "Read", + "RatioLiquidCarbonDioxideInput2": "Read", + "RatioLiquidCarbonDioxideOutput": "Read", + "RatioLiquidPollutant": "Read", + "RatioLiquidPollutantInput": "Read", + "RatioLiquidPollutantInput2": "Read", + "RatioLiquidPollutantOutput": "Read", + "RatioLiquidNitrousOxide": "Read", + "RatioLiquidNitrousOxideInput": "Read", + "RatioLiquidNitrousOxideInput2": "Read", + "RatioLiquidNitrousOxideOutput": "Read", + "ReferenceId": "Read", + "RatioHydrogen": "Read", + "RatioLiquidHydrogen": "Read", + "RatioPollutedWater": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Idle", + "1": "Active" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": true + }, + "slots": [ + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Input2" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": 2, + "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 + } + }, + "StructureOccupancySensor": { + "prefab": { + "prefab_name": "StructureOccupancySensor", + "prefab_hash": 322782515, + "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.", + "name": "Occupancy Sensor" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Activate": "Read", + "Quantity": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureOverheadShortCornerLocker": { + "prefab": { + "prefab_name": "StructureOverheadShortCornerLocker", + "prefab_hash": -1794932560, + "desc": "", + "name": "Overhead Corner Locker" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureOverheadShortLocker": { + "prefab": { + "prefab_name": "StructureOverheadShortLocker", + "prefab_hash": 1468249454, + "desc": "", + "name": "Overhead Locker" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": 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" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructurePassiveLargeRadiatorGas": { + "prefab": { + "prefab_name": "StructurePassiveLargeRadiatorGas", + "prefab_hash": 2066977095, + "desc": "Has been replaced by Medium Convection Radiator.", + "name": "Medium Convection Radiator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 1.0, + "radiation_factor": 0.4 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePassiveLargeRadiatorLiquid": { + "prefab": { + "prefab_name": "StructurePassiveLargeRadiatorLiquid", + "prefab_hash": 24786172, + "desc": "Has been replaced by Medium Convection Radiator Liquid.", + "name": "Medium Convection Radiator Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 1.0, + "radiation_factor": 0.4 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePassiveLiquidDrain": { + "prefab": { + "prefab_name": "StructurePassiveLiquidDrain", + "prefab_hash": 1812364811, + "desc": "Moves liquids from a pipe network to the world atmosphere.", + "name": "Passive Liquid Drain" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructurePassiveVent": { + "prefab": { + "prefab_name": "StructurePassiveVent", + "prefab_hash": 335498166, + "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. ", + "name": "Passive Vent" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructurePassiveVentInsulated": { + "prefab": { + "prefab_name": "StructurePassiveVentInsulated", + "prefab_hash": 1363077139, + "desc": "", + "name": "Insulated Passive Vent" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructurePassthroughHeatExchangerGasToGas": { + "prefab": { + "prefab_name": "StructurePassthroughHeatExchangerGasToGas", + "prefab_hash": -1674187440, + "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.", + "name": "CounterFlow Heat Exchanger - Gas + Gas" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Input2" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Output2" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePassthroughHeatExchangerGasToLiquid": { + "prefab": { + "prefab_name": "StructurePassthroughHeatExchangerGasToLiquid", + "prefab_hash": 1928991265, + "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.", + "name": "CounterFlow Heat Exchanger - Gas + Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Input2" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Output2" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePassthroughHeatExchangerLiquidToLiquid": { + "prefab": { + "prefab_name": "StructurePassthroughHeatExchangerLiquidToLiquid", + "prefab_hash": -1472829583, + "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.", + "name": "CounterFlow Heat Exchanger - Liquid + Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Input2" + }, + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Output2" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePictureFrameThickLandscapeLarge": { + "prefab": { + "prefab_name": "StructurePictureFrameThickLandscapeLarge", + "prefab_hash": -1434523206, + "desc": "", + "name": "Picture Frame Thick Landscape Large" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructurePictureFrameThickLandscapeSmall": { + "prefab": { + "prefab_name": "StructurePictureFrameThickLandscapeSmall", + "prefab_hash": -2041566697, + "desc": "", + "name": "Picture Frame Thick Landscape Small" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructurePictureFrameThickMountLandscapeLarge": { + "prefab": { + "prefab_name": "StructurePictureFrameThickMountLandscapeLarge", + "prefab_hash": 950004659, + "desc": "", + "name": "Picture Frame Thick Landscape Large" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructurePictureFrameThickMountLandscapeSmall": { + "prefab": { + "prefab_name": "StructurePictureFrameThickMountLandscapeSmall", + "prefab_hash": 347154462, + "desc": "", + "name": "Picture Frame Thick Landscape Small" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructurePictureFrameThickMountPortraitLarge": { + "prefab": { + "prefab_name": "StructurePictureFrameThickMountPortraitLarge", + "prefab_hash": -1459641358, + "desc": "", + "name": "Picture Frame Thick Mount Portrait Large" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructurePictureFrameThickMountPortraitSmall": { + "prefab": { + "prefab_name": "StructurePictureFrameThickMountPortraitSmall", + "prefab_hash": -2066653089, + "desc": "", + "name": "Picture Frame Thick Mount Portrait Small" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructurePictureFrameThickPortraitLarge": { + "prefab": { + "prefab_name": "StructurePictureFrameThickPortraitLarge", + "prefab_hash": -1686949570, + "desc": "", + "name": "Picture Frame Thick Portrait Large" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructurePictureFrameThickPortraitSmall": { + "prefab": { + "prefab_name": "StructurePictureFrameThickPortraitSmall", + "prefab_hash": -1218579821, + "desc": "", + "name": "Picture Frame Thick Portrait Small" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructurePictureFrameThinLandscapeLarge": { + "prefab": { + "prefab_name": "StructurePictureFrameThinLandscapeLarge", + "prefab_hash": -1418288625, + "desc": "", + "name": "Picture Frame Thin Landscape Large" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructurePictureFrameThinLandscapeSmall": { + "prefab": { + "prefab_name": "StructurePictureFrameThinLandscapeSmall", + "prefab_hash": -2024250974, + "desc": "", + "name": "Picture Frame Thin Landscape Small" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructurePictureFrameThinMountLandscapeLarge": { + "prefab": { + "prefab_name": "StructurePictureFrameThinMountLandscapeLarge", + "prefab_hash": -1146760430, + "desc": "", + "name": "Picture Frame Thin Landscape Large" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructurePictureFrameThinMountLandscapeSmall": { + "prefab": { + "prefab_name": "StructurePictureFrameThinMountLandscapeSmall", + "prefab_hash": -1752493889, + "desc": "", + "name": "Picture Frame Thin Landscape Small" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructurePictureFrameThinMountPortraitLarge": { + "prefab": { + "prefab_name": "StructurePictureFrameThinMountPortraitLarge", + "prefab_hash": 1094895077, + "desc": "", + "name": "Picture Frame Thin Portrait Large" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructurePictureFrameThinMountPortraitSmall": { + "prefab": { + "prefab_name": "StructurePictureFrameThinMountPortraitSmall", + "prefab_hash": 1835796040, + "desc": "", + "name": "Picture Frame Thin Portrait Small" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructurePictureFrameThinPortraitLarge": { + "prefab": { + "prefab_name": "StructurePictureFrameThinPortraitLarge", + "prefab_hash": 1212777087, + "desc": "", + "name": "Picture Frame Thin Portrait Large" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructurePictureFrameThinPortraitSmall": { + "prefab": { + "prefab_name": "StructurePictureFrameThinPortraitSmall", + "prefab_hash": 1684488658, + "desc": "", + "name": "Picture Frame Thin Portrait Small" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructurePipeAnalysizer": { + "prefab": { + "prefab_name": "StructurePipeAnalysizer", + "prefab_hash": 435685051, + "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.", + "name": "Pipe Analyzer" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePipeCorner": { + "prefab": { + "prefab_name": "StructurePipeCorner", + "prefab_hash": -1785673561, + "desc": "You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench.", + "name": "Pipe (Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructurePipeCowl": { + "prefab": { + "prefab_name": "StructurePipeCowl", + "prefab_hash": 465816159, + "desc": "", + "name": "Pipe Cowl" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructurePipeCrossJunction": { + "prefab": { + "prefab_name": "StructurePipeCrossJunction", + "prefab_hash": -1405295588, + "desc": "You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench.", + "name": "Pipe (Cross Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructurePipeCrossJunction3": { + "prefab": { + "prefab_name": "StructurePipeCrossJunction3", + "prefab_hash": 2038427184, + "desc": "You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", + "name": "Pipe (3-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructurePipeCrossJunction4": { + "prefab": { + "prefab_name": "StructurePipeCrossJunction4", + "prefab_hash": -417629293, + "desc": "You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", + "name": "Pipe (4-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructurePipeCrossJunction5": { + "prefab": { + "prefab_name": "StructurePipeCrossJunction5", + "prefab_hash": -1877193979, + "desc": "You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", + "name": "Pipe (5-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructurePipeCrossJunction6": { + "prefab": { + "prefab_name": "StructurePipeCrossJunction6", + "prefab_hash": 152378047, + "desc": "You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", + "name": "Pipe (6-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructurePipeHeater": { + "prefab": { + "prefab_name": "StructurePipeHeater", + "prefab_hash": -419758574, + "desc": "Adds 1000 joules of heat per tick to the contents of your pipe network.", + "name": "Pipe Heater (Gas)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePipeIgniter": { + "prefab": { + "prefab_name": "StructurePipeIgniter", + "prefab_hash": 1286441942, + "desc": "Ignites the atmosphere inside the attached pipe network.", + "name": "Pipe Igniter" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePipeInsulatedLiquidCrossJunction": { + "prefab": { + "prefab_name": "StructurePipeInsulatedLiquidCrossJunction", + "prefab_hash": -2068497073, + "desc": "Liquid piping with very low temperature loss or gain.", + "name": "Insulated Liquid Pipe (Cross Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null + }, + "StructurePipeLabel": { + "prefab": { + "prefab_name": "StructurePipeLabel", + "prefab_hash": -999721119, + "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.", + "name": "Pipe Label" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructurePipeLiquidCorner": { + "prefab": { + "prefab_name": "StructurePipeLiquidCorner", + "prefab_hash": -1856720921, + "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench.", + "name": "Liquid Pipe (Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructurePipeLiquidCrossJunction": { + "prefab": { + "prefab_name": "StructurePipeLiquidCrossJunction", + "prefab_hash": 1848735691, + "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", + "name": "Liquid Pipe (Cross Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructurePipeLiquidCrossJunction3": { + "prefab": { + "prefab_name": "StructurePipeLiquidCrossJunction3", + "prefab_hash": 1628087508, + "desc": "You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench.", + "name": "Liquid Pipe (3-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructurePipeLiquidCrossJunction4": { + "prefab": { + "prefab_name": "StructurePipeLiquidCrossJunction4", + "prefab_hash": -9555593, + "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", + "name": "Liquid Pipe (4-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructurePipeLiquidCrossJunction5": { + "prefab": { + "prefab_name": "StructurePipeLiquidCrossJunction5", + "prefab_hash": -2006384159, + "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", + "name": "Liquid Pipe (5-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructurePipeLiquidCrossJunction6": { + "prefab": { + "prefab_name": "StructurePipeLiquidCrossJunction6", + "prefab_hash": 291524699, + "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", + "name": "Liquid Pipe (6-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructurePipeLiquidStraight": { + "prefab": { + "prefab_name": "StructurePipeLiquidStraight", + "prefab_hash": 667597982, + "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench.", + "name": "Liquid Pipe (Straight)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructurePipeLiquidTJunction": { + "prefab": { + "prefab_name": "StructurePipeLiquidTJunction", + "prefab_hash": 262616717, + "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", + "name": "Liquid Pipe (T Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructurePipeMeter": { + "prefab": { + "prefab_name": "StructurePipeMeter", + "prefab_hash": -1798362329, + "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\"", + "name": "Pipe Meter" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructurePipeOneWayValve": { + "prefab": { + "prefab_name": "StructurePipeOneWayValve", + "prefab_hash": 1580412404, + "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", + "name": "One Way Valve (Gas)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePipeOrgan": { + "prefab": { + "prefab_name": "StructurePipeOrgan", + "prefab_hash": 1305252611, + "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.", + "name": "Pipe Organ" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructurePipeRadiator": { + "prefab": { + "prefab_name": "StructurePipeRadiator", + "prefab_hash": 1696603168, + "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.", + "name": "Pipe Convection Radiator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 1.0, + "radiation_factor": 0.75 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructurePipeRadiatorFlat": { + "prefab": { + "prefab_name": "StructurePipeRadiatorFlat", + "prefab_hash": -399883995, + "desc": "A pipe mounted radiator optimized for radiating heat in vacuums.", + "name": "Pipe Radiator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.2, + "radiation_factor": 3.0 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructurePipeRadiatorFlatLiquid": { + "prefab": { + "prefab_name": "StructurePipeRadiatorFlatLiquid", + "prefab_hash": 2024754523, + "desc": "A liquid pipe mounted radiator optimized for radiating heat in vacuums.", + "name": "Pipe Radiator Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.2, + "radiation_factor": 3.0 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructurePipeStraight": { + "prefab": { + "prefab_name": "StructurePipeStraight", + "prefab_hash": 73728932, + "desc": "You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench.", + "name": "Pipe (Straight)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructurePipeTJunction": { + "prefab": { + "prefab_name": "StructurePipeTJunction", + "prefab_hash": -913817472, + "desc": "You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench.", + "name": "Pipe (T Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null + }, + "StructurePlanter": { + "prefab": { + "prefab_name": "StructurePlanter", + "prefab_hash": -1125641329, + "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).", + "name": "Planter" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Plant", + "typ": "Plant" + }, + { + "name": "Plant", + "typ": "Plant" + } + ] + }, + "StructurePlatformLadderOpen": { + "prefab": { + "prefab_name": "StructurePlatformLadderOpen", + "prefab_hash": 1559586682, + "desc": "", + "name": "Ladder Platform" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructurePlinth": { + "prefab": { + "prefab_name": "StructurePlinth", + "prefab_hash": 989835703, + "desc": "", + "name": "Plinth" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "", + "typ": "None" + } + ] + }, + "StructurePortablesConnector": { + "prefab": { + "prefab_name": "StructurePortablesConnector", + "prefab_hash": -899013427, + "desc": "", + "name": "Portables Connector" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Open": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Input2" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePowerConnector": { + "prefab": { + "prefab_name": "StructurePowerConnector", + "prefab_hash": -782951720, + "desc": "Attaches a Kit (Portable Generator) to a power network.", + "name": "Power Connector" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Open": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Portable Slot", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePowerTransmitter": { + "prefab": { + "prefab_name": "StructurePowerTransmitter", + "prefab_hash": -65087121, + "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.", + "name": "Microwave Power Transmitter" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Unlinked", + "1": "Linked" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePowerTransmitterOmni": { + "prefab": { + "prefab_name": "StructurePowerTransmitterOmni", + "prefab_hash": -327468845, + "desc": "", + "name": "Power Transmitter Omni" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePowerTransmitterReceiver": { + "prefab": { + "prefab_name": "StructurePowerTransmitterReceiver", + "prefab_hash": 1195820278, + "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", + "name": "Microwave Power Receiver" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Unlinked", + "1": "Linked" + }, + "transmission_receiver": false, + "wireless_logic": true, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePowerUmbilicalFemale": { + "prefab": { + "prefab_name": "StructurePowerUmbilicalFemale", + "prefab_hash": 101488029, + "desc": "", + "name": "Umbilical Socket (Power)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePowerUmbilicalFemaleSide": { + "prefab": { + "prefab_name": "StructurePowerUmbilicalFemaleSide", + "prefab_hash": 1922506192, + "desc": "", + "name": "Umbilical Socket Angle (Power)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePowerUmbilicalMale": { + "prefab": { + "prefab_name": "StructurePowerUmbilicalMale", + "prefab_hash": 1529453938, + "desc": "0.Left\n1.Center\n2.Right", + "name": "Umbilical (Power)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Left", + "1": "Center", + "2": "Right" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePoweredVent": { + "prefab": { + "prefab_name": "StructurePoweredVent", + "prefab_hash": 938836756, + "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.", + "name": "Powered Vent" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "PressureExternal": "ReadWrite", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Outward", + "1": "Inward" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePoweredVentLarge": { + "prefab": { + "prefab_name": "StructurePoweredVentLarge", + "prefab_hash": -785498334, + "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.", + "name": "Powered Vent Large" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "PressureExternal": "ReadWrite", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Outward", + "1": "Inward" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePressurantValve": { + "prefab": { + "prefab_name": "StructurePressurantValve", + "prefab_hash": 23052817, + "desc": "Pumps gas into a liquid pipe in order to raise the pressure", + "name": "Pressurant Valve" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePressureFedGasEngine": { + "prefab": { + "prefab_name": "StructurePressureFedGasEngine", + "prefab_hash": -624011170, + "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.", + "name": "Pressure Fed Gas Engine" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Input2" + }, + { + "typ": "PowerAndData", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePressureFedLiquidEngine": { + "prefab": { + "prefab_name": "StructurePressureFedLiquidEngine", + "prefab_hash": 379750958, + "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.", + "name": "Pressure Fed Liquid Engine" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Input2" + }, + { + "typ": "PowerAndData", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePressurePlateLarge": { + "prefab": { + "prefab_name": "StructurePressurePlateLarge", + "prefab_hash": -2008706143, + "desc": "", + "name": "Trigger Plate (Large)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Data", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePressurePlateMedium": { + "prefab": { + "prefab_name": "StructurePressurePlateMedium", + "prefab_hash": 1269458680, + "desc": "", + "name": "Trigger Plate (Medium)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Data", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePressurePlateSmall": { + "prefab": { + "prefab_name": "StructurePressurePlateSmall", + "prefab_hash": -1536471028, + "desc": "", + "name": "Trigger Plate (Small)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Data", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePressureRegulator": { + "prefab": { + "prefab_name": "StructurePressureRegulator", + "prefab_hash": 209854039, + "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.", + "name": "Pressure Regulator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureProximitySensor": { + "prefab": { + "prefab_name": "StructureProximitySensor", + "prefab_hash": 568800213, + "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.", + "name": "Proximity Sensor" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Activate": "Read", + "Setting": "ReadWrite", + "Quantity": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePumpedLiquidEngine": { + "prefab": { + "prefab_name": "StructurePumpedLiquidEngine", + "prefab_hash": -2031440019, + "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", + "name": "Pumped Liquid Engine" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "None" + }, + { + "typ": "PowerAndData", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructurePurgeValve": { + "prefab": { + "prefab_name": "StructurePurgeValve", + "prefab_hash": -737232128, + "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.", + "name": "Purge Valve" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureRailing": { + "prefab": { + "prefab_name": "StructureRailing", + "prefab_hash": -1756913871, + "desc": "\"Safety third.\"", + "name": "Railing Industrial (Type 1)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureRecycler": { + "prefab": { + "prefab_name": "StructureRecycler", + "prefab_hash": -1633947337, + "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.", + "name": "Recycler" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "Reagents": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "ClearMemory": "Write", + "ExportCount": "Read", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureRefrigeratedVendingMachine": { + "prefab": { + "prefab_name": "StructureRefrigeratedVendingMachine", + "prefab_hash": -1577831321, + "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. ", + "name": "Refrigerated Vending Machine" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "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" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureReinforcedCompositeWindow": { + "prefab": { + "prefab_name": "StructureReinforcedCompositeWindow", + "prefab_hash": 2027713511, + "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.", + "name": "Reinforced Window (Composite)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureReinforcedCompositeWindowSteel": { + "prefab": { + "prefab_name": "StructureReinforcedCompositeWindowSteel", + "prefab_hash": -816454272, + "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.", + "name": "Reinforced Window (Composite Steel)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureReinforcedWallPaddedWindow": { + "prefab": { + "prefab_name": "StructureReinforcedWallPaddedWindow", + "prefab_hash": 1939061729, + "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.", + "name": "Reinforced Window (Padded)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureReinforcedWallPaddedWindowThin": { + "prefab": { + "prefab_name": "StructureReinforcedWallPaddedWindowThin", + "prefab_hash": 158502707, + "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.", + "name": "Reinforced Window (Thin)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureRocketAvionics": { + "prefab": { + "prefab_name": "StructureRocketAvionics", + "prefab_hash": 808389066, + "desc": "", + "name": "Rocket Avionics" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Invalid", + "1": "None", + "2": "Mine", + "3": "Survey", + "4": "Discover", + "5": "Chart" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureRocketCelestialTracker": { + "prefab": { + "prefab_name": "StructureRocketCelestialTracker", + "prefab_hash": 997453927, + "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.", + "name": "Rocket Celestial Tracker" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Horizontal": "Read", + "Vertical": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "Index": "ReadWrite", + "CelestialHash": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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": { + "instructions": { + "BodyOrientation": { + "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 |", + "typ": "CelestialTracking", + "value": 1 + } + }, + "memory_access": "Read", + "memory_size": 12 + } + }, + "StructureRocketCircuitHousing": { + "prefab": { + "prefab_name": "StructureRocketCircuitHousing", + "prefab_hash": 150135861, + "desc": "", + "name": "Rocket Circuit Housing" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "LineNumber": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "LineNumber": "ReadWrite", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": true + }, + "slots": [ + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "Input" + } + ], + "device_pins_length": 6, + "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 + } + }, + "StructureRocketEngineTiny": { + "prefab": { + "prefab_name": "StructureRocketEngineTiny", + "prefab_hash": 178472613, + "desc": "", + "name": "Rocket Engine (Tiny)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureRocketManufactory": { + "prefab": { + "prefab_name": "StructureRocketManufactory", + "prefab_hash": 1781051034, + "desc": "", + "name": "Rocket Manufactory" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Ingot" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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": { + "consumed_resouces": [ + "ItemAstroloyIngot", + "ItemConstantanIngot", + "ItemCopperIngot", + "ItemElectrumIngot", + "ItemGoldIngot", + "ItemHastelloyIngot", + "ItemInconelIngot", + "ItemInvarIngot", + "ItemIronIngot", + "ItemLeadIngot", + "ItemNickelIngot", + "ItemSiliconIngot", + "ItemSilverIngot", + "ItemSolderIngot", + "ItemSolidFuel", + "ItemSteelIngot", + "ItemStelliteIngot", + "ItemWaspaloyIngot", + "ItemWasteIngot" + ], + "processed_reagents": [] + }, + "memory": { + "instructions": { + "DeviceSetLock": { + "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 |", + "typ": "PrinterInstruction", + "value": 6 + }, + "EjectAllReagents": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 8 + }, + "EjectReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 7 + }, + "ExecuteRecipe": { + "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 |", + "typ": "PrinterInstruction", + "value": 2 + }, + "JumpIfNextInvalid": { + "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 |", + "typ": "PrinterInstruction", + "value": 4 + }, + "JumpToAddress": { + "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 |", + "typ": "PrinterInstruction", + "value": 5 + }, + "MissingRecipeReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 9 + }, + "StackPointer": { + "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 |", + "typ": "PrinterInstruction", + "value": 1 + }, + "WaitUntilNextValid": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 3 + } + }, + "memory_access": "ReadWrite", + "memory_size": 64 + } + }, + "StructureRocketMiner": { + "prefab": { + "prefab_name": "StructureRocketMiner", + "prefab_hash": -2087223687, + "desc": "Gathers available resources at the rocket's current space location.", + "name": "Rocket Miner" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Quantity": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "ClearMemory": "Write", + "ExportCount": "Read", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "DrillCondition": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Export", + "typ": "None" + }, + { + "name": "Drill Head Slot", + "typ": "DrillHead" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureRocketScanner": { + "prefab": { + "prefab_name": "StructureRocketScanner", + "prefab_hash": 2014252591, + "desc": "", + "name": "Rocket Scanner" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Scanner Head Slot", + "typ": "ScanningHead" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureRocketTower": { + "prefab": { + "prefab_name": "StructureRocketTower", + "prefab_hash": -654619479, + "desc": "", + "name": "Launch Tower" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureRocketTransformerSmall": { + "prefab": { + "prefab_name": "StructureRocketTransformerSmall", + "prefab_hash": 518925193, + "desc": "", + "name": "Transformer Small (Rocket)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "Input" + }, + { + "typ": "Power", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureRover": { + "prefab": { + "prefab_name": "StructureRover", + "prefab_hash": 806513938, + "desc": "", + "name": "Rover Frame" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureSDBHopper": { + "prefab": { + "prefab_name": "StructureSDBHopper", + "prefab_hash": -1875856925, + "desc": "", + "name": "SDB Hopper" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "Open": "ReadWrite", + "ClearMemory": "Write", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSDBHopperAdvanced": { + "prefab": { + "prefab_name": "StructureSDBHopperAdvanced", + "prefab_hash": 467225612, + "desc": "", + "name": "SDB Hopper Advanced" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "ClearMemory": "Write", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Chute", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSDBSilo": { + "prefab": { + "prefab_name": "StructureSDBSilo", + "prefab_hash": 1155865682, + "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.", + "name": "SDB Silo" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSatelliteDish": { + "prefab": { + "prefab_name": "StructureSatelliteDish", + "prefab_hash": 439026183, + "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.", + "name": "Medium Satellite Dish" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSecurityPrinter": { + "prefab": { + "prefab_name": "StructureSecurityPrinter", + "prefab_hash": -641491515, + "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", + "name": "Security Printer" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Ingot" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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": { + "consumed_resouces": [ + "ItemAstroloyIngot", + "ItemConstantanIngot", + "ItemCopperIngot", + "ItemElectrumIngot", + "ItemGoldIngot", + "ItemHastelloyIngot", + "ItemInconelIngot", + "ItemInvarIngot", + "ItemIronIngot", + "ItemLeadIngot", + "ItemNickelIngot", + "ItemSiliconIngot", + "ItemSilverIngot", + "ItemSolderIngot", + "ItemSolidFuel", + "ItemSteelIngot", + "ItemStelliteIngot", + "ItemWaspaloyIngot", + "ItemWasteIngot" + ], + "processed_reagents": [] + }, + "memory": { + "instructions": { + "DeviceSetLock": { + "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 |", + "typ": "PrinterInstruction", + "value": 6 + }, + "EjectAllReagents": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 8 + }, + "EjectReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 7 + }, + "ExecuteRecipe": { + "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 |", + "typ": "PrinterInstruction", + "value": 2 + }, + "JumpIfNextInvalid": { + "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 |", + "typ": "PrinterInstruction", + "value": 4 + }, + "JumpToAddress": { + "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 |", + "typ": "PrinterInstruction", + "value": 5 + }, + "MissingRecipeReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 9 + }, + "StackPointer": { + "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 |", + "typ": "PrinterInstruction", + "value": 1 + }, + "WaitUntilNextValid": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 3 + } + }, + "memory_access": "ReadWrite", + "memory_size": 64 + } + }, + "StructureShelf": { + "prefab": { + "prefab_name": "StructureShelf", + "prefab_hash": 1172114950, + "desc": "", + "name": "Shelf" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, + "StructureShelfMedium": { + "prefab": { + "prefab_name": "StructureShelfMedium", + "prefab_hash": 182006674, + "desc": "A shelf for putting things on, so you can see them.", + "name": "Shelf Medium" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Open": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": 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" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureShortCornerLocker": { + "prefab": { + "prefab_name": "StructureShortCornerLocker", + "prefab_hash": 1330754486, + "desc": "", + "name": "Short Corner Locker" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureShortLocker": { + "prefab": { + "prefab_name": "StructureShortLocker", + "prefab_hash": -554553467, + "desc": "", + "name": "Short Locker" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": 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" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureShower": { + "prefab": { + "prefab_name": "StructureShower", + "prefab_hash": -775128944, + "desc": "", + "name": "Shower" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Open": "ReadWrite", + "Activate": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureShowerPowered": { + "prefab": { + "prefab_name": "StructureShowerPowered", + "prefab_hash": -1081797501, + "desc": "", + "name": "Shower (Powered)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSign1x1": { + "prefab": { + "prefab_name": "StructureSign1x1", + "prefab_hash": 879058460, + "desc": "", + "name": "Sign 1x1" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureSign2x1": { + "prefab": { + "prefab_name": "StructureSign2x1", + "prefab_hash": 908320837, + "desc": "", + "name": "Sign 2x1" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureSingleBed": { + "prefab": { + "prefab_name": "StructureSingleBed", + "prefab_hash": -492611, + "desc": "Description coming.", + "name": "Single Bed" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Bed", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureSleeper": { + "prefab": { + "prefab_name": "StructureSleeper", + "prefab_hash": -1467449329, + "desc": "", + "name": "Sleeper" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Bed", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSleeperLeft": { + "prefab": { + "prefab_name": "StructureSleeperLeft", + "prefab_hash": 1213495833, + "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.", + "name": "Sleeper Left" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Safe", + "1": "Unsafe", + "2": "Unpowered" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Player", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSleeperRight": { + "prefab": { + "prefab_name": "StructureSleeperRight", + "prefab_hash": -1812330717, + "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.", + "name": "Sleeper Right" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Safe", + "1": "Unsafe", + "2": "Unpowered" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Player", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSleeperVertical": { + "prefab": { + "prefab_name": "StructureSleeperVertical", + "prefab_hash": -1300059018, + "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.", + "name": "Sleeper Vertical" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Safe", + "1": "Unsafe", + "2": "Unpowered" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Player", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSleeperVerticalDroid": { + "prefab": { + "prefab_name": "StructureSleeperVerticalDroid", + "prefab_hash": 1382098999, + "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.", + "name": "Droid Sleeper Vertical" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Player", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSmallDirectHeatExchangeGastoGas": { + "prefab": { + "prefab_name": "StructureSmallDirectHeatExchangeGastoGas", + "prefab_hash": 1310303582, + "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", + "name": "Small Direct Heat Exchanger - Gas + Gas" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Input2" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSmallDirectHeatExchangeLiquidtoGas": { + "prefab": { + "prefab_name": "StructureSmallDirectHeatExchangeLiquidtoGas", + "prefab_hash": 1825212016, + "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", + "name": "Small Direct Heat Exchanger - Liquid + Gas " + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Input2" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSmallDirectHeatExchangeLiquidtoLiquid": { + "prefab": { + "prefab_name": "StructureSmallDirectHeatExchangeLiquidtoLiquid", + "prefab_hash": -507770416, + "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", + "name": "Small Direct Heat Exchanger - Liquid + Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Input2" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSmallSatelliteDish": { + "prefab": { + "prefab_name": "StructureSmallSatelliteDish", + "prefab_hash": -2138748650, + "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.", + "name": "Small Satellite Dish" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSmallTableBacklessDouble": { + "prefab": { + "prefab_name": "StructureSmallTableBacklessDouble", + "prefab_hash": -1633000411, + "desc": "", + "name": "Small (Table Backless Double)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureSmallTableBacklessSingle": { + "prefab": { + "prefab_name": "StructureSmallTableBacklessSingle", + "prefab_hash": -1897221677, + "desc": "", + "name": "Small (Table Backless Single)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureSmallTableDinnerSingle": { + "prefab": { + "prefab_name": "StructureSmallTableDinnerSingle", + "prefab_hash": 1260651529, + "desc": "", + "name": "Small (Table Dinner Single)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureSmallTableRectangleDouble": { + "prefab": { + "prefab_name": "StructureSmallTableRectangleDouble", + "prefab_hash": -660451023, + "desc": "", + "name": "Small (Table Rectangle Double)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureSmallTableRectangleSingle": { + "prefab": { + "prefab_name": "StructureSmallTableRectangleSingle", + "prefab_hash": -924678969, + "desc": "", + "name": "Small (Table Rectangle Single)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureSmallTableThickDouble": { + "prefab": { + "prefab_name": "StructureSmallTableThickDouble", + "prefab_hash": -19246131, + "desc": "", + "name": "Small (Table Thick Double)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureSmallTableThickSingle": { + "prefab": { + "prefab_name": "StructureSmallTableThickSingle", + "prefab_hash": -291862981, + "desc": "", + "name": "Small Table (Thick Single)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureSolarPanel": { + "prefab": { + "prefab_name": "StructureSolarPanel", + "prefab_hash": -2045627372, + "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.", + "name": "Solar Panel" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Charge": "Read", + "Horizontal": "ReadWrite", + "Vertical": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSolarPanel45": { + "prefab": { + "prefab_name": "StructureSolarPanel45", + "prefab_hash": -1554349863, + "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.", + "name": "Solar Panel (Angled)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Charge": "Read", + "Horizontal": "ReadWrite", + "Vertical": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSolarPanel45Reinforced": { + "prefab": { + "prefab_name": "StructureSolarPanel45Reinforced", + "prefab_hash": 930865127, + "desc": "This solar panel is resistant to storm damage.", + "name": "Solar Panel (Heavy Angled)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Charge": "Read", + "Horizontal": "ReadWrite", + "Vertical": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSolarPanelDual": { + "prefab": { + "prefab_name": "StructureSolarPanelDual", + "prefab_hash": -539224550, + "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.", + "name": "Solar Panel (Dual)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Charge": "Read", + "Horizontal": "ReadWrite", + "Vertical": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSolarPanelDualReinforced": { + "prefab": { + "prefab_name": "StructureSolarPanelDualReinforced", + "prefab_hash": -1545574413, + "desc": "This solar panel is resistant to storm damage.", + "name": "Solar Panel (Heavy Dual)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Charge": "Read", + "Horizontal": "ReadWrite", + "Vertical": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSolarPanelFlat": { + "prefab": { + "prefab_name": "StructureSolarPanelFlat", + "prefab_hash": 1968102968, + "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.", + "name": "Solar Panel (Flat)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Charge": "Read", + "Horizontal": "ReadWrite", + "Vertical": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSolarPanelFlatReinforced": { + "prefab": { + "prefab_name": "StructureSolarPanelFlatReinforced", + "prefab_hash": 1697196770, + "desc": "This solar panel is resistant to storm damage.", + "name": "Solar Panel (Heavy Flat)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Charge": "Read", + "Horizontal": "ReadWrite", + "Vertical": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSolarPanelReinforced": { + "prefab": { + "prefab_name": "StructureSolarPanelReinforced", + "prefab_hash": -934345724, + "desc": "This solar panel is resistant to storm damage.", + "name": "Solar Panel (Heavy)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Charge": "Read", + "Horizontal": "ReadWrite", + "Vertical": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureSolidFuelGenerator": { + "prefab": { + "prefab_name": "StructureSolidFuelGenerator", + "prefab_hash": 813146305, + "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.", + "name": "Generator (Solid Fuel)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Lock": "ReadWrite", + "On": "ReadWrite", + "ClearMemory": "Write", + "ImportCount": "Read", + "PowerGeneration": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Not Generating", + "1": "Generating" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Input", + "typ": "Ore" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Output" + } + ], + "device_pins_length": null, + "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": { + "consumed_resouces": [ + "ItemCharcoal", + "ItemCoalOre", + "ItemSolidFuel" + ], + "processed_reagents": [] + } + }, + "StructureSorter": { + "prefab": { + "prefab_name": "StructureSorter", + "prefab_hash": -1009150565, + "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.", + "name": "Sorter" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "ClearMemory": "Write", + "ExportCount": "Read", + "ImportCount": "Read", + "Output": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Split", + "1": "Filter", + "2": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + }, + { + "name": "Export 2", + "typ": "None" + }, + { + "name": "Data Disk", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Output2" + }, + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureStacker": { + "prefab": { + "prefab_name": "StructureStacker", + "prefab_hash": -2020231820, + "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.", + "name": "Stacker" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Automatic", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + }, + { + "name": "Processing", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Chute", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureStackerReverse": { + "prefab": { + "prefab_name": "StructureStackerReverse", + "prefab_hash": 1585641623, + "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.", + "name": "Stacker" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Automatic", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Chute", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureStairs4x2": { + "prefab": { + "prefab_name": "StructureStairs4x2", + "prefab_hash": 1405018945, + "desc": "", + "name": "Stairs" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureStairs4x2RailL": { + "prefab": { + "prefab_name": "StructureStairs4x2RailL", + "prefab_hash": 155214029, + "desc": "", + "name": "Stairs with Rail (Left)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureStairs4x2RailR": { + "prefab": { + "prefab_name": "StructureStairs4x2RailR", + "prefab_hash": -212902482, + "desc": "", + "name": "Stairs with Rail (Right)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureStairs4x2Rails": { + "prefab": { + "prefab_name": "StructureStairs4x2Rails", + "prefab_hash": -1088008720, + "desc": "", + "name": "Stairs with Rails" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureStairwellBackLeft": { + "prefab": { + "prefab_name": "StructureStairwellBackLeft", + "prefab_hash": 505924160, + "desc": "", + "name": "Stairwell (Back Left)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureStairwellBackPassthrough": { + "prefab": { + "prefab_name": "StructureStairwellBackPassthrough", + "prefab_hash": -862048392, + "desc": "", + "name": "Stairwell (Back Passthrough)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureStairwellBackRight": { + "prefab": { + "prefab_name": "StructureStairwellBackRight", + "prefab_hash": -2128896573, + "desc": "", + "name": "Stairwell (Back Right)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureStairwellFrontLeft": { + "prefab": { + "prefab_name": "StructureStairwellFrontLeft", + "prefab_hash": -37454456, + "desc": "", + "name": "Stairwell (Front Left)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureStairwellFrontPassthrough": { + "prefab": { + "prefab_name": "StructureStairwellFrontPassthrough", + "prefab_hash": -1625452928, + "desc": "", + "name": "Stairwell (Front Passthrough)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureStairwellFrontRight": { + "prefab": { + "prefab_name": "StructureStairwellFrontRight", + "prefab_hash": 340210934, + "desc": "", + "name": "Stairwell (Front Right)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureStairwellNoDoors": { + "prefab": { + "prefab_name": "StructureStairwellNoDoors", + "prefab_hash": 2049879875, + "desc": "", + "name": "Stairwell (No Doors)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureStirlingEngine": { + "prefab": { + "prefab_name": "StructureStirlingEngine", + "prefab_hash": -260316435, + "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.", + "name": "Stirling Engine" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.15, + "radiation_factor": 0.15 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "GasCanister" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureStorageLocker": { + "prefab": { + "prefab_name": "StructureStorageLocker", + "prefab_hash": -793623899, + "desc": "", + "name": "Locker" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": 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" + }, + { + "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" + } + ], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureSuitStorage": { + "prefab": { + "prefab_name": "StructureSuitStorage", + "prefab_hash": 255034731, + "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.", + "name": "Suit Storage" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Helmet", + "typ": "Helmet" + }, + { + "name": "Suit", + "typ": "Suit" + }, + { + "name": "Back", + "typ": "Back" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Input2" + }, + { + "typ": "Pipe", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureTankBig": { + "prefab": { + "prefab_name": "StructureTankBig", + "prefab_hash": -1606848156, + "desc": "", + "name": "Large Tank" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureTankBigInsulated": { + "prefab": { + "prefab_name": "StructureTankBigInsulated", + "prefab_hash": 1280378227, + "desc": "", + "name": "Tank Big (Insulated)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureTankConnector": { + "prefab": { + "prefab_name": "StructureTankConnector", + "prefab_hash": -1276379454, + "desc": "Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network.", + "name": "Tank Connector" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "", + "typ": "None" + } + ] + }, + "StructureTankConnectorLiquid": { + "prefab": { + "prefab_name": "StructureTankConnectorLiquid", + "prefab_hash": 1331802518, + "desc": "These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network.", + "name": "Liquid Tank Connector" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "internal_atmo_info": null, + "slots": [ + { + "name": "Portable Slot", + "typ": "None" + } + ] + }, + "StructureTankSmall": { + "prefab": { + "prefab_name": "StructureTankSmall", + "prefab_hash": 1013514688, + "desc": "", + "name": "Small Tank" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureTankSmallAir": { + "prefab": { + "prefab_name": "StructureTankSmallAir", + "prefab_hash": 955744474, + "desc": "", + "name": "Small Tank (Air)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureTankSmallFuel": { + "prefab": { + "prefab_name": "StructureTankSmallFuel", + "prefab_hash": 2102454415, + "desc": "", + "name": "Small Tank (Fuel)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureTankSmallInsulated": { + "prefab": { + "prefab_name": "StructureTankSmallInsulated", + "prefab_hash": 272136332, + "desc": "", + "name": "Tank Small (Insulated)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureToolManufactory": { + "prefab": { + "prefab_name": "StructureToolManufactory", + "prefab_hash": -465741100, + "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.", + "name": "Tool Manufactory" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Ingot" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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": { + "consumed_resouces": [ + "ItemAstroloyIngot", + "ItemConstantanIngot", + "ItemCopperIngot", + "ItemElectrumIngot", + "ItemGoldIngot", + "ItemHastelloyIngot", + "ItemInconelIngot", + "ItemInvarIngot", + "ItemIronIngot", + "ItemLeadIngot", + "ItemNickelIngot", + "ItemSiliconIngot", + "ItemSilverIngot", + "ItemSolderIngot", + "ItemSolidFuel", + "ItemSteelIngot", + "ItemStelliteIngot", + "ItemWaspaloyIngot", + "ItemWasteIngot" + ], + "processed_reagents": [] + }, + "memory": { + "instructions": { + "DeviceSetLock": { + "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 |", + "typ": "PrinterInstruction", + "value": 6 + }, + "EjectAllReagents": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 8 + }, + "EjectReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 7 + }, + "ExecuteRecipe": { + "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 |", + "typ": "PrinterInstruction", + "value": 2 + }, + "JumpIfNextInvalid": { + "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 |", + "typ": "PrinterInstruction", + "value": 4 + }, + "JumpToAddress": { + "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 |", + "typ": "PrinterInstruction", + "value": 5 + }, + "MissingRecipeReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 9 + }, + "StackPointer": { + "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 |", + "typ": "PrinterInstruction", + "value": 1 + }, + "WaitUntilNextValid": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 3 + } + }, + "memory_access": "ReadWrite", + "memory_size": 64 + } + }, + "StructureTorpedoRack": { + "prefab": { + "prefab_name": "StructureTorpedoRack", + "prefab_hash": 1473807953, + "desc": "", + "name": "Torpedo Rack" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "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" + } + ] + }, + "StructureTraderWaypoint": { + "prefab": { + "prefab_name": "StructureTraderWaypoint", + "prefab_hash": 1570931620, + "desc": "", + "name": "Trader Waypoint" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureTransformer": { + "prefab": { + "prefab_name": "StructureTransformer", + "prefab_hash": -1423212473, + "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.", + "name": "Transformer (Large)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Input" + }, + { + "typ": "Power", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureTransformerMedium": { + "prefab": { + "prefab_name": "StructureTransformerMedium", + "prefab_hash": -1065725831, + "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.", + "name": "Transformer (Medium)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureTransformerMediumReversed": { + "prefab": { + "prefab_name": "StructureTransformerMediumReversed", + "prefab_hash": 833912764, + "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.", + "name": "Transformer Reversed (Medium)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureTransformerSmall": { + "prefab": { + "prefab_name": "StructureTransformerSmall", + "prefab_hash": -890946730, + "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.", + "name": "Transformer (Small)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "Input" + }, + { + "typ": "Power", + "role": "Output" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureTransformerSmallReversed": { + "prefab": { + "prefab_name": "StructureTransformerSmallReversed", + "prefab_hash": 1054059374, + "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.", + "name": "Transformer Reversed (Small)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureTurbineGenerator": { + "prefab": { + "prefab_name": "StructureTurbineGenerator", + "prefab_hash": 1282191063, + "desc": "", + "name": "Turbine Generator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PowerGeneration": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureTurboVolumePump": { + "prefab": { + "prefab_name": "StructureTurboVolumePump", + "prefab_hash": 1310794736, + "desc": "Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction.", + "name": "Turbo Volume Pump (Gas)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Right", + "1": "Left" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureUnloader": { + "prefab": { + "prefab_name": "StructureUnloader", + "prefab_hash": 750118160, + "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.", + "name": "Unloader" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "ClearMemory": "Write", + "ExportCount": "Read", + "ImportCount": "Read", + "Output": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Automatic", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Chute", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureUprightWindTurbine": { + "prefab": { + "prefab_name": "StructureUprightWindTurbine", + "prefab_hash": 1622183451, + "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.", + "name": "Upright Wind Turbine" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PowerGeneration": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureValve": { + "prefab": { + "prefab_name": "StructureValve", + "prefab_hash": -692036078, + "desc": "", + "name": "Valve" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "None" + }, + { + "typ": "Pipe", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureVendingMachine": { + "prefab": { + "prefab_name": "StructureVendingMachine", + "prefab_hash": -443130773, + "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.", + "name": "Vending Machine" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "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" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureVolumePump": { + "prefab": { + "prefab_name": "StructureVolumePump", + "prefab_hash": -321403609, + "desc": "The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks.", + "name": "Volume Pump" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureWallArch": { + "prefab": { + "prefab_name": "StructureWallArch", + "prefab_hash": -858143148, + "desc": "", + "name": "Wall (Arch)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallArchArrow": { + "prefab": { + "prefab_name": "StructureWallArchArrow", + "prefab_hash": 1649708822, + "desc": "", + "name": "Wall (Arch Arrow)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallArchCornerRound": { + "prefab": { + "prefab_name": "StructureWallArchCornerRound", + "prefab_hash": 1794588890, + "desc": "", + "name": "Wall (Arch Corner Round)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallArchCornerSquare": { + "prefab": { + "prefab_name": "StructureWallArchCornerSquare", + "prefab_hash": -1963016580, + "desc": "", + "name": "Wall (Arch Corner Square)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallArchCornerTriangle": { + "prefab": { + "prefab_name": "StructureWallArchCornerTriangle", + "prefab_hash": 1281911841, + "desc": "", + "name": "Wall (Arch Corner Triangle)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallArchPlating": { + "prefab": { + "prefab_name": "StructureWallArchPlating", + "prefab_hash": 1182510648, + "desc": "", + "name": "Wall (Arch Plating)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallArchTwoTone": { + "prefab": { + "prefab_name": "StructureWallArchTwoTone", + "prefab_hash": 782529714, + "desc": "", + "name": "Wall (Arch Two Tone)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallCooler": { + "prefab": { + "prefab_name": "StructureWallCooler", + "prefab_hash": -739292323, + "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.", + "name": "Wall Cooler" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "None" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureWallFlat": { + "prefab": { + "prefab_name": "StructureWallFlat", + "prefab_hash": 1635864154, + "desc": "", + "name": "Wall (Flat)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallFlatCornerRound": { + "prefab": { + "prefab_name": "StructureWallFlatCornerRound", + "prefab_hash": 898708250, + "desc": "", + "name": "Wall (Flat Corner Round)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallFlatCornerSquare": { + "prefab": { + "prefab_name": "StructureWallFlatCornerSquare", + "prefab_hash": 298130111, + "desc": "", + "name": "Wall (Flat Corner Square)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallFlatCornerTriangle": { + "prefab": { + "prefab_name": "StructureWallFlatCornerTriangle", + "prefab_hash": 2097419366, + "desc": "", + "name": "Wall (Flat Corner Triangle)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallFlatCornerTriangleFlat": { + "prefab": { + "prefab_name": "StructureWallFlatCornerTriangleFlat", + "prefab_hash": -1161662836, + "desc": "", + "name": "Wall (Flat Corner Triangle Flat)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallGeometryCorner": { + "prefab": { + "prefab_name": "StructureWallGeometryCorner", + "prefab_hash": 1979212240, + "desc": "", + "name": "Wall (Geometry Corner)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallGeometryStreight": { + "prefab": { + "prefab_name": "StructureWallGeometryStreight", + "prefab_hash": 1049735537, + "desc": "", + "name": "Wall (Geometry Straight)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallGeometryT": { + "prefab": { + "prefab_name": "StructureWallGeometryT", + "prefab_hash": 1602758612, + "desc": "", + "name": "Wall (Geometry T)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallGeometryTMirrored": { + "prefab": { + "prefab_name": "StructureWallGeometryTMirrored", + "prefab_hash": -1427845483, + "desc": "", + "name": "Wall (Geometry T Mirrored)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallHeater": { + "prefab": { + "prefab_name": "StructureWallHeater", + "prefab_hash": 24258244, + "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.", + "name": "Wall Heater" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureWallIron": { + "prefab": { + "prefab_name": "StructureWallIron", + "prefab_hash": 1287324802, + "desc": "", + "name": "Iron Wall (Type 1)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallIron02": { + "prefab": { + "prefab_name": "StructureWallIron02", + "prefab_hash": 1485834215, + "desc": "", + "name": "Iron Wall (Type 2)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallIron03": { + "prefab": { + "prefab_name": "StructureWallIron03", + "prefab_hash": 798439281, + "desc": "", + "name": "Iron Wall (Type 3)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallIron04": { + "prefab": { + "prefab_name": "StructureWallIron04", + "prefab_hash": -1309433134, + "desc": "", + "name": "Iron Wall (Type 4)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallLargePanel": { + "prefab": { + "prefab_name": "StructureWallLargePanel", + "prefab_hash": 1492930217, + "desc": "", + "name": "Wall (Large Panel)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallLargePanelArrow": { + "prefab": { + "prefab_name": "StructureWallLargePanelArrow", + "prefab_hash": -776581573, + "desc": "", + "name": "Wall (Large Panel Arrow)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallLight": { + "prefab": { + "prefab_name": "StructureWallLight", + "prefab_hash": -1860064656, + "desc": "", + "name": "Wall Light" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureWallLightBattery": { + "prefab": { + "prefab_name": "StructureWallLightBattery", + "prefab_hash": -1306415132, + "desc": "", + "name": "Wall Light (Battery)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureWallPaddedArch": { + "prefab": { + "prefab_name": "StructureWallPaddedArch", + "prefab_hash": 1590330637, + "desc": "", + "name": "Wall (Padded Arch)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallPaddedArchCorner": { + "prefab": { + "prefab_name": "StructureWallPaddedArchCorner", + "prefab_hash": -1126688298, + "desc": "", + "name": "Wall (Padded Arch Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallPaddedArchLightFittingTop": { + "prefab": { + "prefab_name": "StructureWallPaddedArchLightFittingTop", + "prefab_hash": 1171987947, + "desc": "", + "name": "Wall (Padded Arch Light Fitting Top)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallPaddedArchLightsFittings": { + "prefab": { + "prefab_name": "StructureWallPaddedArchLightsFittings", + "prefab_hash": -1546743960, + "desc": "", + "name": "Wall (Padded Arch Lights Fittings)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallPaddedCorner": { + "prefab": { + "prefab_name": "StructureWallPaddedCorner", + "prefab_hash": -155945899, + "desc": "", + "name": "Wall (Padded Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallPaddedCornerThin": { + "prefab": { + "prefab_name": "StructureWallPaddedCornerThin", + "prefab_hash": 1183203913, + "desc": "", + "name": "Wall (Padded Corner Thin)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallPaddedNoBorder": { + "prefab": { + "prefab_name": "StructureWallPaddedNoBorder", + "prefab_hash": 8846501, + "desc": "", + "name": "Wall (Padded No Border)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallPaddedNoBorderCorner": { + "prefab": { + "prefab_name": "StructureWallPaddedNoBorderCorner", + "prefab_hash": 179694804, + "desc": "", + "name": "Wall (Padded No Border Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallPaddedThinNoBorder": { + "prefab": { + "prefab_name": "StructureWallPaddedThinNoBorder", + "prefab_hash": -1611559100, + "desc": "", + "name": "Wall (Padded Thin No Border)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallPaddedThinNoBorderCorner": { + "prefab": { + "prefab_name": "StructureWallPaddedThinNoBorderCorner", + "prefab_hash": 1769527556, + "desc": "", + "name": "Wall (Padded Thin No Border Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallPaddedWindow": { + "prefab": { + "prefab_name": "StructureWallPaddedWindow", + "prefab_hash": 2087628940, + "desc": "", + "name": "Wall (Padded Window)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallPaddedWindowThin": { + "prefab": { + "prefab_name": "StructureWallPaddedWindowThin", + "prefab_hash": -37302931, + "desc": "", + "name": "Wall (Padded Window Thin)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallPadding": { + "prefab": { + "prefab_name": "StructureWallPadding", + "prefab_hash": 635995024, + "desc": "", + "name": "Wall (Padding)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallPaddingArchVent": { + "prefab": { + "prefab_name": "StructureWallPaddingArchVent", + "prefab_hash": -1243329828, + "desc": "", + "name": "Wall (Padding Arch Vent)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallPaddingLightFitting": { + "prefab": { + "prefab_name": "StructureWallPaddingLightFitting", + "prefab_hash": 2024882687, + "desc": "", + "name": "Wall (Padding Light Fitting)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallPaddingThin": { + "prefab": { + "prefab_name": "StructureWallPaddingThin", + "prefab_hash": -1102403554, + "desc": "", + "name": "Wall (Padding Thin)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallPlating": { + "prefab": { + "prefab_name": "StructureWallPlating", + "prefab_hash": 26167457, + "desc": "", + "name": "Wall (Plating)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallSmallPanelsAndHatch": { + "prefab": { + "prefab_name": "StructureWallSmallPanelsAndHatch", + "prefab_hash": 619828719, + "desc": "", + "name": "Wall (Small Panels And Hatch)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallSmallPanelsArrow": { + "prefab": { + "prefab_name": "StructureWallSmallPanelsArrow", + "prefab_hash": -639306697, + "desc": "", + "name": "Wall (Small Panels Arrow)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallSmallPanelsMonoChrome": { + "prefab": { + "prefab_name": "StructureWallSmallPanelsMonoChrome", + "prefab_hash": 386820253, + "desc": "", + "name": "Wall (Small Panels Mono Chrome)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallSmallPanelsOpen": { + "prefab": { + "prefab_name": "StructureWallSmallPanelsOpen", + "prefab_hash": -1407480603, + "desc": "", + "name": "Wall (Small Panels Open)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallSmallPanelsTwoTone": { + "prefab": { + "prefab_name": "StructureWallSmallPanelsTwoTone", + "prefab_hash": 1709994581, + "desc": "", + "name": "Wall (Small Panels Two Tone)" + }, + "structure": { + "small_grid": false + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWallVent": { + "prefab": { + "prefab_name": "StructureWallVent", + "prefab_hash": -1177469307, + "desc": "Used to mix atmospheres passively between two walls.", + "name": "Wall Vent" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "StructureWaterBottleFiller": { + "prefab": { + "prefab_name": "StructureWaterBottleFiller", + "prefab_hash": -1178961954, + "desc": "", + "name": "Water Bottle Filler" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Error": "Read", + "Activate": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Bottle Slot", + "typ": "LiquidBottle" + }, + { + "name": "Bottle Slot", + "typ": "LiquidBottle" + } + ], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureWaterBottleFillerBottom": { + "prefab": { + "prefab_name": "StructureWaterBottleFillerBottom", + "prefab_hash": 1433754995, + "desc": "", + "name": "Water Bottle Filler Bottom" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Error": "Read", + "Activate": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Bottle Slot", + "typ": "LiquidBottle" + }, + { + "name": "Bottle Slot", + "typ": "LiquidBottle" + } + ], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureWaterBottleFillerPowered": { + "prefab": { + "prefab_name": "StructureWaterBottleFillerPowered", + "prefab_hash": -756587791, + "desc": "", + "name": "Waterbottle Filler" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Bottle Slot", + "typ": "LiquidBottle" + }, + { + "name": "Bottle Slot", + "typ": "LiquidBottle" + } + ], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureWaterBottleFillerPoweredBottom": { + "prefab": { + "prefab_name": "StructureWaterBottleFillerPoweredBottom", + "prefab_hash": 1986658780, + "desc": "", + "name": "Waterbottle Filler" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Bottle Slot", + "typ": "LiquidBottle" + }, + { + "name": "Bottle Slot", + "typ": "LiquidBottle" + } + ], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "None" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureWaterDigitalValve": { + "prefab": { + "prefab_name": "StructureWaterDigitalValve", + "prefab_hash": -517628750, + "desc": "", + "name": "Liquid Digital Valve" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureWaterPipeMeter": { + "prefab": { + "prefab_name": "StructureWaterPipeMeter", + "prefab_hash": 433184168, + "desc": "", + "name": "Liquid Pipe Meter" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "device_pins_length": null, + "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 + } + }, + "StructureWaterPurifier": { + "prefab": { + "prefab_name": "StructureWaterPurifier", + "prefab_hash": 887383294, + "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.", + "name": "Water Purifier" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "ClearMemory": "Write", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Ore" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Chute", + "role": "Input" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureWaterWallCooler": { + "prefab": { + "prefab_name": "StructureWaterWallCooler", + "prefab_hash": -1369060582, + "desc": "", + "name": "Liquid Wall Cooler" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "None" + }, + { + "typ": "PowerAndData", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureWeatherStation": { + "prefab": { + "prefab_name": "StructureWeatherStation", + "prefab_hash": 1997212478, + "desc": "0.NoStorm\n1.StormIncoming\n2.InStorm", + "name": "Weather Station" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "NextWeatherEventTime": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "NoStorm", + "1": "StormIncoming", + "2": "InStorm" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureWindTurbine": { + "prefab": { + "prefab_name": "StructureWindTurbine", + "prefab_hash": -2082355173, + "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.", + "name": "Wind Turbine" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PowerGeneration": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Data", + "role": "None" + } + ], + "device_pins_length": null, + "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 + } + }, + "StructureWindowShutter": { + "prefab": { + "prefab_name": "StructureWindowShutter", + "prefab_hash": 2056377335, + "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.", + "name": "Window Shutter" + }, + "structure": { + "small_grid": true + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": null, + "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": true, + "has_reagents": false + } + }, + "ToolPrinterMod": { + "prefab": { + "prefab_name": "ToolPrinterMod", + "prefab_hash": 1700018136, + "desc": "Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", + "name": "Tool Printer Mod" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "ToyLuna": { + "prefab": { + "prefab_name": "ToyLuna", + "prefab_hash": 94730034, + "desc": "", + "name": "Toy Luna" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + }, + "UniformCommander": { + "prefab": { + "prefab_name": "UniformCommander", + "prefab_hash": -2083426457, + "desc": "", + "name": "Uniform Commander" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Uniform", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "Access Card", + "typ": "AccessCard" + }, + { + "name": "Access Card", + "typ": "AccessCard" + }, + { + "name": "Credit Card", + "typ": "CreditCard" + } + ] + }, + "UniformMarine": { + "prefab": { + "prefab_name": "UniformMarine", + "prefab_hash": -48342840, + "desc": "", + "name": "Marine Uniform" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Uniform", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "Access Card", + "typ": "AccessCard" + }, + { + "name": "Credit Card", + "typ": "CreditCard" + } + ] + }, + "UniformOrangeJumpSuit": { + "prefab": { + "prefab_name": "UniformOrangeJumpSuit", + "prefab_hash": 810053150, + "desc": "", + "name": "Jump Suit (Orange)" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Uniform", + "sorting_class": "Clothing" + }, + "thermal_info": null, + "internal_atmo_info": null, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "Access Card", + "typ": "AccessCard" + }, + { + "name": "Credit Card", + "typ": "CreditCard" + } + ] + }, + "WeaponEnergy": { + "prefab": { + "prefab_name": "WeaponEnergy", + "prefab_hash": 789494694, + "desc": "", + "name": "Weapon Energy" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": null, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "WeaponPistolEnergy": { + "prefab": { + "prefab_name": "WeaponPistolEnergy", + "prefab_hash": -385323479, + "desc": "0.Stun\n1.Kill", + "name": "Energy Pistol" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Stun", + "1": "Kill" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "WeaponRifleEnergy": { + "prefab": { + "prefab_name": "WeaponRifleEnergy", + "prefab_hash": 1154745374, + "desc": "0.Stun\n1.Kill", + "name": "Energy Rifle" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "None", + "sorting_class": "Tools" + }, + "thermal_info": null, + "internal_atmo_info": null, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Stun", + "1": "Kill" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "WeaponTorpedo": { + "prefab": { + "prefab_name": "WeaponTorpedo", + "prefab_hash": -1102977898, + "desc": "", + "name": "Torpedo" + }, + "item": { + "consumable": false, + "filter_type": null, + "ingredient": false, + "max_quantity": 1, + "reagents": null, + "slot_class": "Torpedo", + "sorting_class": "Default" + }, + "thermal_info": null, + "internal_atmo_info": null + } + }, + "reagents": { + "Alcohol": { + "Hash": 1565803737, + "Unit": "ml", + "Sources": null + }, + "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 + } + }, + "Cocoa": { + "Hash": 678781198, + "Unit": "g", + "Sources": { + "ItemCocoaPowder": 1.0, + "ItemCocoaTree": 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", + "Sources": null + }, + "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", + "Sources": null + }, + "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 + } + }, + "Sugar": { + "Hash": 1778746875, + "Unit": "g", + "Sources": { + "ItemSugar": 10.0, + "ItemSugarCane": 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 + } + } + }, + "enums": { + "scriptEnums": { + "LogicBatchMethod": { + "enumName": "LogicBatchMethod", + "values": { + "Average": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Maximum": { + "value": 3, + "deprecated": false, + "description": "" + }, + "Minimum": { + "value": 2, + "deprecated": false, + "description": "" + }, + "Sum": { + "value": 1, + "deprecated": false, + "description": "" + } + } + }, + "LogicReagentMode": { + "enumName": "LogicReagentMode", + "values": { + "Contents": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Recipe": { + "value": 2, + "deprecated": false, + "description": "" + }, + "Required": { + "value": 1, + "deprecated": false, + "description": "" + }, + "TotalContents": { + "value": 3, + "deprecated": false, + "description": "" + } + } + }, + "LogicSlotType": { + "enumName": "LogicSlotType", + "values": { + "Charge": { + "value": 10, + "deprecated": false, + "description": "returns current energy charge the slot occupant is holding" + }, + "ChargeRatio": { + "value": 11, + "deprecated": false, + "description": "returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum" + }, + "Class": { + "value": 12, + "deprecated": false, + "description": "returns integer representing the class of object" + }, + "Damage": { + "value": 4, + "deprecated": false, + "description": "returns the damage state of the item in the slot" + }, + "Efficiency": { + "value": 5, + "deprecated": false, + "description": "returns the growth efficiency of the plant in the slot" + }, + "FilterType": { + "value": 25, + "deprecated": false, + "description": "No description available" + }, + "Growth": { + "value": 7, + "deprecated": false, + "description": "returns the current growth state of the plant in the slot" + }, + "Health": { + "value": 6, + "deprecated": false, + "description": "returns the health of the plant in the slot" + }, + "LineNumber": { + "value": 19, + "deprecated": false, + "description": "The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution" + }, + "Lock": { + "value": 23, + "deprecated": false, + "description": "No description available" + }, + "Mature": { + "value": 16, + "deprecated": false, + "description": "returns 1 if the plant in this slot is mature, 0 when it isn't" + }, + "MaxQuantity": { + "value": 15, + "deprecated": false, + "description": "returns the max stack size of the item in the slot" + }, + "None": { + "value": 0, + "deprecated": false, + "description": "No description" + }, + "OccupantHash": { + "value": 2, + "deprecated": false, + "description": "returns the has of the current occupant, the unique identifier of the thing" + }, + "Occupied": { + "value": 1, + "deprecated": false, + "description": "returns 0 when slot is not occupied, 1 when it is" + }, + "On": { + "value": 22, + "deprecated": false, + "description": "No description available" + }, + "Open": { + "value": 21, + "deprecated": false, + "description": "No description available" + }, + "PrefabHash": { + "value": 17, + "deprecated": false, + "description": "returns the hash of the structure in the slot" + }, + "Pressure": { + "value": 8, + "deprecated": false, + "description": "returns pressure of the slot occupants internal atmosphere" + }, + "PressureAir": { + "value": 14, + "deprecated": false, + "description": "returns pressure in the air tank of the jetpack in this slot" + }, + "PressureWaste": { + "value": 13, + "deprecated": false, + "description": "returns pressure in the waste tank of the jetpack in this slot" + }, + "Quantity": { + "value": 3, + "deprecated": false, + "description": "returns the current quantity, such as stack size, of the item in the slot" + }, + "ReferenceId": { + "value": 26, + "deprecated": false, + "description": "Unique Reference Identifier for this object" + }, + "Seeding": { + "value": 18, + "deprecated": false, + "description": "Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not." + }, + "SortingClass": { + "value": 24, + "deprecated": false, + "description": "No description available" + }, + "Temperature": { + "value": 9, + "deprecated": false, + "description": "returns temperature of the slot occupants internal atmosphere" + }, + "Volume": { + "value": 20, + "deprecated": false, + "description": "No description available" + } + } + }, + "LogicType": { + "enumName": "LogicType", + "values": { + "Acceleration": { + "value": 216, + "deprecated": false, + "description": "Change in velocity. Rockets that are deccelerating when landing will show this as negative value." + }, + "Activate": { + "value": 9, + "deprecated": false, + "description": "1 if device is activated (usually means running), otherwise 0" + }, + "AirRelease": { + "value": 75, + "deprecated": false, + "description": "The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On" + }, + "AlignmentError": { + "value": 243, + "deprecated": false, + "description": "The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target." + }, + "Apex": { + "value": 238, + "deprecated": false, + "description": "The lowest altitude that the rocket will reach before it starts travelling upwards again." + }, + "AutoLand": { + "value": 226, + "deprecated": false, + "description": "Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing." + }, + "AutoShutOff": { + "value": 218, + "deprecated": false, + "description": "Turns off all devices in the rocket upon reaching destination" + }, + "BestContactFilter": { + "value": 267, + "deprecated": false, + "description": "Filters the satellite's auto selection of targets to a single reference ID." + }, + "Bpm": { + "value": 103, + "deprecated": false, + "description": "Bpm" + }, + "BurnTimeRemaining": { + "value": 225, + "deprecated": false, + "description": "Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage." + }, + "CelestialHash": { + "value": 242, + "deprecated": false, + "description": "The current hash of the targeted celestial object." + }, + "CelestialParentHash": { + "value": 250, + "deprecated": false, + "description": "The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial." + }, + "Channel0": { + "value": 165, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel1": { + "value": 166, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel2": { + "value": 167, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel3": { + "value": 168, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel4": { + "value": 169, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel5": { + "value": 170, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel6": { + "value": 171, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel7": { + "value": 172, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Charge": { + "value": 11, + "deprecated": false, + "description": "The current charge the device has" + }, + "Chart": { + "value": 256, + "deprecated": false, + "description": "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." + }, + "ChartedNavPoints": { + "value": 259, + "deprecated": false, + "description": "The number of charted NavPoints at the rocket's target Space Map Location." + }, + "ClearMemory": { + "value": 62, + "deprecated": false, + "description": "When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned" + }, + "CollectableGoods": { + "value": 101, + "deprecated": false, + "description": "Gets the cost of fuel to return the rocket to your current world." + }, + "Color": { + "value": 38, + "deprecated": false, + "description": "\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 " + }, + "Combustion": { + "value": 98, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not." + }, + "CombustionInput": { + "value": 146, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not." + }, + "CombustionInput2": { + "value": 147, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not." + }, + "CombustionLimiter": { + "value": 153, + "deprecated": false, + "description": "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": { + "value": 148, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not." + }, + "CombustionOutput2": { + "value": 149, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not." + }, + "CompletionRatio": { + "value": 61, + "deprecated": false, + "description": "How complete the current production is for this device, between 0 and 1" + }, + "ContactTypeId": { + "value": 198, + "deprecated": false, + "description": "The type id of the contact." + }, + "CurrentCode": { + "value": 261, + "deprecated": false, + "description": "The Space Map Address of the rockets current Space Map Location" + }, + "CurrentResearchPodType": { + "value": 93, + "deprecated": false, + "description": "" + }, + "Density": { + "value": 262, + "deprecated": false, + "description": "The density of the rocket's target site's mine-able deposit." + }, + "DestinationCode": { + "value": 215, + "deprecated": false, + "description": "The Space Map Address of the rockets target Space Map Location" + }, + "Discover": { + "value": 255, + "deprecated": false, + "description": "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." + }, + "DistanceAu": { + "value": 244, + "deprecated": false, + "description": "The current distance to the celestial object, measured in astronomical units." + }, + "DistanceKm": { + "value": 249, + "deprecated": false, + "description": "The current distance to the celestial object, measured in kilometers." + }, + "DrillCondition": { + "value": 240, + "deprecated": false, + "description": "The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1." + }, + "DryMass": { + "value": 220, + "deprecated": false, + "description": "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": { + "value": 247, + "deprecated": false, + "description": "A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)." + }, + "ElevatorLevel": { + "value": 40, + "deprecated": false, + "description": "Level the elevator is currently at" + }, + "ElevatorSpeed": { + "value": 39, + "deprecated": false, + "description": "Current speed of the elevator" + }, + "EntityState": { + "value": 239, + "deprecated": false, + "description": "The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer." + }, + "EnvironmentEfficiency": { + "value": 104, + "deprecated": false, + "description": "The Environment Efficiency reported by the machine, as a float between 0 and 1" + }, + "Error": { + "value": 4, + "deprecated": false, + "description": "1 if device is in error state, otherwise 0" + }, + "ExhaustVelocity": { + "value": 235, + "deprecated": false, + "description": "The velocity of the exhaust gas in m/s" + }, + "ExportCount": { + "value": 63, + "deprecated": false, + "description": "How many items exported since last ClearMemory" + }, + "ExportQuantity": { + "value": 31, + "deprecated": true, + "description": "Total quantity of items exported by the device" + }, + "ExportSlotHash": { + "value": 42, + "deprecated": true, + "description": "DEPRECATED" + }, + "ExportSlotOccupant": { + "value": 32, + "deprecated": true, + "description": "DEPRECATED" + }, + "Filtration": { + "value": 74, + "deprecated": false, + "description": "The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On" + }, + "FlightControlRule": { + "value": 236, + "deprecated": false, + "description": "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." + }, + "Flush": { + "value": 174, + "deprecated": false, + "description": "Set to 1 to activate the flush function on the device" + }, + "ForceWrite": { + "value": 85, + "deprecated": false, + "description": "Forces Logic Writer devices to rewrite value" + }, + "ForwardX": { + "value": 227, + "deprecated": false, + "description": "The direction the entity is facing expressed as a normalized vector" + }, + "ForwardY": { + "value": 228, + "deprecated": false, + "description": "The direction the entity is facing expressed as a normalized vector" + }, + "ForwardZ": { + "value": 229, + "deprecated": false, + "description": "The direction the entity is facing expressed as a normalized vector" + }, + "Fuel": { + "value": 99, + "deprecated": false, + "description": "Gets the cost of fuel to return the rocket to your current world." + }, + "Harvest": { + "value": 69, + "deprecated": false, + "description": "Performs the harvesting action for any plant based machinery" + }, + "Horizontal": { + "value": 20, + "deprecated": false, + "description": "Horizontal setting of the device" + }, + "HorizontalRatio": { + "value": 34, + "deprecated": false, + "description": "Radio of horizontal setting for device" + }, + "Idle": { + "value": 37, + "deprecated": false, + "description": "Returns 1 if the device is currently idle, otherwise 0" + }, + "ImportCount": { + "value": 64, + "deprecated": false, + "description": "How many items imported since last ClearMemory" + }, + "ImportQuantity": { + "value": 29, + "deprecated": true, + "description": "Total quantity of items imported by the device" + }, + "ImportSlotHash": { + "value": 43, + "deprecated": true, + "description": "DEPRECATED" + }, + "ImportSlotOccupant": { + "value": 30, + "deprecated": true, + "description": "DEPRECATED" + }, + "Inclination": { + "value": 246, + "deprecated": false, + "description": "The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle." + }, + "Index": { + "value": 241, + "deprecated": false, + "description": "The current index for the device." + }, + "InterrogationProgress": { + "value": 157, + "deprecated": false, + "description": "Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1" + }, + "LineNumber": { + "value": 173, + "deprecated": false, + "description": "The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution" + }, + "Lock": { + "value": 10, + "deprecated": false, + "description": "1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values" + }, + "ManualResearchRequiredPod": { + "value": 94, + "deprecated": false, + "description": "Sets the pod type to search for a certain pod when breaking down a pods." + }, + "Mass": { + "value": 219, + "deprecated": false, + "description": "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": { + "value": 23, + "deprecated": false, + "description": "Maximum setting of the device" + }, + "MineablesInQueue": { + "value": 96, + "deprecated": false, + "description": "Returns the amount of mineables AIMEe has queued up to mine." + }, + "MineablesInVicinity": { + "value": 95, + "deprecated": false, + "description": "Returns the amount of potential mineables within an extended area around AIMEe." + }, + "MinedQuantity": { + "value": 266, + "deprecated": false, + "description": "The total number of resources that have been mined at the rocket's target Space Map Site." + }, + "MinimumWattsToContact": { + "value": 163, + "deprecated": false, + "description": "Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact" + }, + "Mode": { + "value": 3, + "deprecated": false, + "description": "Integer for mode state, different devices will have different mode states available to them" + }, + "NameHash": { + "value": 268, + "deprecated": false, + "description": "Provides the hash value for the name of the object as a 32 bit integer." + }, + "NavPoints": { + "value": 258, + "deprecated": false, + "description": "The number of NavPoints at the rocket's target Space Map Location." + }, + "NextWeatherEventTime": { + "value": 97, + "deprecated": false, + "description": "Returns in seconds when the next weather event is inbound." + }, + "None": { + "value": 0, + "deprecated": true, + "description": "No description" + }, + "On": { + "value": 28, + "deprecated": false, + "description": "The current state of the device, 0 for off, 1 for on" + }, + "Open": { + "value": 2, + "deprecated": false, + "description": "1 if device is open, otherwise 0" + }, + "OperationalTemperatureEfficiency": { + "value": 150, + "deprecated": false, + "description": "How the input pipe's temperature effects the machines efficiency" + }, + "OrbitPeriod": { + "value": 245, + "deprecated": false, + "description": "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." + }, + "Orientation": { + "value": 230, + "deprecated": false, + "description": "The orientation of the entity in degrees in a plane relative towards the north origin" + }, + "Output": { + "value": 70, + "deprecated": false, + "description": "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": { + "value": 234, + "deprecated": false, + "description": "The number of moles that passed through this device on the previous simulation tick" + }, + "Plant": { + "value": 68, + "deprecated": false, + "description": "Performs the planting action for any plant based machinery" + }, + "PlantEfficiency1": { + "value": 52, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantEfficiency2": { + "value": 53, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantEfficiency3": { + "value": 54, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantEfficiency4": { + "value": 55, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantGrowth1": { + "value": 48, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantGrowth2": { + "value": 49, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantGrowth3": { + "value": 50, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantGrowth4": { + "value": 51, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHash1": { + "value": 56, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHash2": { + "value": 57, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHash3": { + "value": 58, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHash4": { + "value": 59, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHealth1": { + "value": 44, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHealth2": { + "value": 45, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHealth3": { + "value": 46, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHealth4": { + "value": 47, + "deprecated": true, + "description": "DEPRECATED" + }, + "PositionX": { + "value": 76, + "deprecated": false, + "description": "The current position in X dimension in world coordinates" + }, + "PositionY": { + "value": 77, + "deprecated": false, + "description": "The current position in Y dimension in world coordinates" + }, + "PositionZ": { + "value": 78, + "deprecated": false, + "description": "The current position in Z dimension in world coordinates" + }, + "Power": { + "value": 1, + "deprecated": false, + "description": "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": { + "value": 26, + "deprecated": false, + "description": "How much energy the device or network is actually using" + }, + "PowerGeneration": { + "value": 65, + "deprecated": false, + "description": "Returns how much power is being generated" + }, + "PowerPotential": { + "value": 25, + "deprecated": false, + "description": "How much energy the device or network potentially provides" + }, + "PowerRequired": { + "value": 36, + "deprecated": false, + "description": "Power requested from the device and/or network" + }, + "PrefabHash": { + "value": 84, + "deprecated": false, + "description": "The hash of the structure" + }, + "Pressure": { + "value": 5, + "deprecated": false, + "description": "The current pressure reading of the device" + }, + "PressureEfficiency": { + "value": 152, + "deprecated": false, + "description": "How the pressure of the input pipe and waste pipe effect the machines efficiency" + }, + "PressureExternal": { + "value": 7, + "deprecated": false, + "description": "Setting for external pressure safety, in KPa" + }, + "PressureInput": { + "value": 106, + "deprecated": false, + "description": "The current pressure reading of the device's Input Network" + }, + "PressureInput2": { + "value": 116, + "deprecated": false, + "description": "The current pressure reading of the device's Input2 Network" + }, + "PressureInternal": { + "value": 8, + "deprecated": false, + "description": "Setting for internal pressure safety, in KPa" + }, + "PressureOutput": { + "value": 126, + "deprecated": false, + "description": "The current pressure reading of the device's Output Network" + }, + "PressureOutput2": { + "value": 136, + "deprecated": false, + "description": "The current pressure reading of the device's Output2 Network" + }, + "PressureSetting": { + "value": 71, + "deprecated": false, + "description": "The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa" + }, + "Progress": { + "value": 214, + "deprecated": false, + "description": "Progress of the rocket to the next node on the map expressed as a value between 0-1." + }, + "Quantity": { + "value": 27, + "deprecated": false, + "description": "Total quantity on the device" + }, + "Ratio": { + "value": 24, + "deprecated": false, + "description": "Context specific value depending on device, 0 to 1 based ratio" + }, + "RatioCarbonDioxide": { + "value": 15, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device atmosphere" + }, + "RatioCarbonDioxideInput": { + "value": 109, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device's input network" + }, + "RatioCarbonDioxideInput2": { + "value": 119, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device's Input2 network" + }, + "RatioCarbonDioxideOutput": { + "value": 129, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device's Output network" + }, + "RatioCarbonDioxideOutput2": { + "value": 139, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device's Output2 network" + }, + "RatioHydrogen": { + "value": 252, + "deprecated": false, + "description": "The ratio of Hydrogen in device's Atmopshere" + }, + "RatioLiquidCarbonDioxide": { + "value": 199, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's Atmosphere" + }, + "RatioLiquidCarbonDioxideInput": { + "value": 200, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's Input Atmosphere" + }, + "RatioLiquidCarbonDioxideInput2": { + "value": 201, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere" + }, + "RatioLiquidCarbonDioxideOutput": { + "value": 202, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere" + }, + "RatioLiquidCarbonDioxideOutput2": { + "value": 203, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere" + }, + "RatioLiquidHydrogen": { + "value": 253, + "deprecated": false, + "description": "The ratio of Liquid Hydrogen in device's Atmopshere" + }, + "RatioLiquidNitrogen": { + "value": 177, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device atmosphere" + }, + "RatioLiquidNitrogenInput": { + "value": 178, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device's input network" + }, + "RatioLiquidNitrogenInput2": { + "value": 179, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device's Input2 network" + }, + "RatioLiquidNitrogenOutput": { + "value": 180, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device's Output network" + }, + "RatioLiquidNitrogenOutput2": { + "value": 181, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device's Output2 network" + }, + "RatioLiquidNitrousOxide": { + "value": 209, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's Atmosphere" + }, + "RatioLiquidNitrousOxideInput": { + "value": 210, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's Input Atmosphere" + }, + "RatioLiquidNitrousOxideInput2": { + "value": 211, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere" + }, + "RatioLiquidNitrousOxideOutput": { + "value": 212, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere" + }, + "RatioLiquidNitrousOxideOutput2": { + "value": 213, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere" + }, + "RatioLiquidOxygen": { + "value": 183, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's Atmosphere" + }, + "RatioLiquidOxygenInput": { + "value": 184, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's Input Atmosphere" + }, + "RatioLiquidOxygenInput2": { + "value": 185, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's Input2 Atmosphere" + }, + "RatioLiquidOxygenOutput": { + "value": 186, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's device's Output Atmosphere" + }, + "RatioLiquidOxygenOutput2": { + "value": 187, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's Output2 Atmopshere" + }, + "RatioLiquidPollutant": { + "value": 204, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's Atmosphere" + }, + "RatioLiquidPollutantInput": { + "value": 205, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's Input Atmosphere" + }, + "RatioLiquidPollutantInput2": { + "value": 206, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's Input2 Atmosphere" + }, + "RatioLiquidPollutantOutput": { + "value": 207, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's device's Output Atmosphere" + }, + "RatioLiquidPollutantOutput2": { + "value": 208, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's Output2 Atmopshere" + }, + "RatioLiquidVolatiles": { + "value": 188, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's Atmosphere" + }, + "RatioLiquidVolatilesInput": { + "value": 189, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's Input Atmosphere" + }, + "RatioLiquidVolatilesInput2": { + "value": 190, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's Input2 Atmosphere" + }, + "RatioLiquidVolatilesOutput": { + "value": 191, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's device's Output Atmosphere" + }, + "RatioLiquidVolatilesOutput2": { + "value": 192, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's Output2 Atmopshere" + }, + "RatioNitrogen": { + "value": 16, + "deprecated": false, + "description": "The ratio of nitrogen in device atmosphere" + }, + "RatioNitrogenInput": { + "value": 110, + "deprecated": false, + "description": "The ratio of nitrogen in device's input network" + }, + "RatioNitrogenInput2": { + "value": 120, + "deprecated": false, + "description": "The ratio of nitrogen in device's Input2 network" + }, + "RatioNitrogenOutput": { + "value": 130, + "deprecated": false, + "description": "The ratio of nitrogen in device's Output network" + }, + "RatioNitrogenOutput2": { + "value": 140, + "deprecated": false, + "description": "The ratio of nitrogen in device's Output2 network" + }, + "RatioNitrousOxide": { + "value": 83, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device atmosphere" + }, + "RatioNitrousOxideInput": { + "value": 114, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device's input network" + }, + "RatioNitrousOxideInput2": { + "value": 124, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device's Input2 network" + }, + "RatioNitrousOxideOutput": { + "value": 134, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device's Output network" + }, + "RatioNitrousOxideOutput2": { + "value": 144, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device's Output2 network" + }, + "RatioOxygen": { + "value": 14, + "deprecated": false, + "description": "The ratio of oxygen in device atmosphere" + }, + "RatioOxygenInput": { + "value": 108, + "deprecated": false, + "description": "The ratio of oxygen in device's input network" + }, + "RatioOxygenInput2": { + "value": 118, + "deprecated": false, + "description": "The ratio of oxygen in device's Input2 network" + }, + "RatioOxygenOutput": { + "value": 128, + "deprecated": false, + "description": "The ratio of oxygen in device's Output network" + }, + "RatioOxygenOutput2": { + "value": 138, + "deprecated": false, + "description": "The ratio of oxygen in device's Output2 network" + }, + "RatioPollutant": { + "value": 17, + "deprecated": false, + "description": "The ratio of pollutant in device atmosphere" + }, + "RatioPollutantInput": { + "value": 111, + "deprecated": false, + "description": "The ratio of pollutant in device's input network" + }, + "RatioPollutantInput2": { + "value": 121, + "deprecated": false, + "description": "The ratio of pollutant in device's Input2 network" + }, + "RatioPollutantOutput": { + "value": 131, + "deprecated": false, + "description": "The ratio of pollutant in device's Output network" + }, + "RatioPollutantOutput2": { + "value": 141, + "deprecated": false, + "description": "The ratio of pollutant in device's Output2 network" + }, + "RatioPollutedWater": { + "value": 254, + "deprecated": false, + "description": "The ratio of polluted water in device atmosphere" + }, + "RatioSteam": { + "value": 193, + "deprecated": false, + "description": "The ratio of Steam in device's Atmosphere" + }, + "RatioSteamInput": { + "value": 194, + "deprecated": false, + "description": "The ratio of Steam in device's Input Atmosphere" + }, + "RatioSteamInput2": { + "value": 195, + "deprecated": false, + "description": "The ratio of Steam in device's Input2 Atmosphere" + }, + "RatioSteamOutput": { + "value": 196, + "deprecated": false, + "description": "The ratio of Steam in device's device's Output Atmosphere" + }, + "RatioSteamOutput2": { + "value": 197, + "deprecated": false, + "description": "The ratio of Steam in device's Output2 Atmopshere" + }, + "RatioVolatiles": { + "value": 18, + "deprecated": false, + "description": "The ratio of volatiles in device atmosphere" + }, + "RatioVolatilesInput": { + "value": 112, + "deprecated": false, + "description": "The ratio of volatiles in device's input network" + }, + "RatioVolatilesInput2": { + "value": 122, + "deprecated": false, + "description": "The ratio of volatiles in device's Input2 network" + }, + "RatioVolatilesOutput": { + "value": 132, + "deprecated": false, + "description": "The ratio of volatiles in device's Output network" + }, + "RatioVolatilesOutput2": { + "value": 142, + "deprecated": false, + "description": "The ratio of volatiles in device's Output2 network" + }, + "RatioWater": { + "value": 19, + "deprecated": false, + "description": "The ratio of water in device atmosphere" + }, + "RatioWaterInput": { + "value": 113, + "deprecated": false, + "description": "The ratio of water in device's input network" + }, + "RatioWaterInput2": { + "value": 123, + "deprecated": false, + "description": "The ratio of water in device's Input2 network" + }, + "RatioWaterOutput": { + "value": 133, + "deprecated": false, + "description": "The ratio of water in device's Output network" + }, + "RatioWaterOutput2": { + "value": 143, + "deprecated": false, + "description": "The ratio of water in device's Output2 network" + }, + "ReEntryAltitude": { + "value": 237, + "deprecated": false, + "description": "The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km" + }, + "Reagents": { + "value": 13, + "deprecated": false, + "description": "Total number of reagents recorded by the device" + }, + "RecipeHash": { + "value": 41, + "deprecated": false, + "description": "Current hash of the recipe the device is set to produce" + }, + "ReferenceId": { + "value": 217, + "deprecated": false, + "description": "Unique Reference Identifier for this object" + }, + "RequestHash": { + "value": 60, + "deprecated": false, + "description": "When set to the unique identifier, requests an item of the provided type from the device" + }, + "RequiredPower": { + "value": 33, + "deprecated": false, + "description": "Idle operating power quantity, does not necessarily include extra demand power" + }, + "ReturnFuelCost": { + "value": 100, + "deprecated": false, + "description": "Gets the fuel remaining in your rocket's fuel tank." + }, + "Richness": { + "value": 263, + "deprecated": false, + "description": "The richness of the rocket's target site's mine-able deposit." + }, + "Rpm": { + "value": 155, + "deprecated": false, + "description": "The number of revolutions per minute that the device's spinning mechanism is doing" + }, + "SemiMajorAxis": { + "value": 248, + "deprecated": false, + "description": "The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit." + }, + "Setting": { + "value": 12, + "deprecated": false, + "description": "A variable setting that can be read or written, depending on the device" + }, + "SettingInput": { + "value": 91, + "deprecated": false, + "description": "" + }, + "SettingOutput": { + "value": 92, + "deprecated": false, + "description": "" + }, + "SignalID": { + "value": 87, + "deprecated": false, + "description": "Returns the contact ID of the strongest signal from this Satellite" + }, + "SignalStrength": { + "value": 86, + "deprecated": false, + "description": "Returns the degree offset of the strongest contact" + }, + "Sites": { + "value": 260, + "deprecated": false, + "description": "The number of Sites that have been discovered at the rockets target Space Map location." + }, + "Size": { + "value": 264, + "deprecated": false, + "description": "The size of the rocket's target site's mine-able deposit." + }, + "SizeX": { + "value": 160, + "deprecated": false, + "description": "Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)" + }, + "SizeY": { + "value": 161, + "deprecated": false, + "description": "Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)" + }, + "SizeZ": { + "value": 162, + "deprecated": false, + "description": "Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)" + }, + "SolarAngle": { + "value": 22, + "deprecated": false, + "description": "Solar angle of the device" + }, + "SolarIrradiance": { + "value": 176, + "deprecated": false, + "description": "" + }, + "SoundAlert": { + "value": 175, + "deprecated": false, + "description": "Plays a sound alert on the devices speaker" + }, + "Stress": { + "value": 156, + "deprecated": false, + "description": "Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down" + }, + "Survey": { + "value": 257, + "deprecated": false, + "description": "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." + }, + "TargetPadIndex": { + "value": 158, + "deprecated": false, + "description": "The index of the trader landing pad on this devices data network that it will try to call a trader in to land" + }, + "TargetX": { + "value": 88, + "deprecated": false, + "description": "The target position in X dimension in world coordinates" + }, + "TargetY": { + "value": 89, + "deprecated": false, + "description": "The target position in Y dimension in world coordinates" + }, + "TargetZ": { + "value": 90, + "deprecated": false, + "description": "The target position in Z dimension in world coordinates" + }, + "Temperature": { + "value": 6, + "deprecated": false, + "description": "The current temperature reading of the device" + }, + "TemperatureDifferentialEfficiency": { + "value": 151, + "deprecated": false, + "description": "How the difference between the input pipe and waste pipe temperatures effect the machines efficiency" + }, + "TemperatureExternal": { + "value": 73, + "deprecated": false, + "description": "The temperature of the outside of the device, usually the world atmosphere surrounding it" + }, + "TemperatureInput": { + "value": 107, + "deprecated": false, + "description": "The current temperature reading of the device's Input Network" + }, + "TemperatureInput2": { + "value": 117, + "deprecated": false, + "description": "The current temperature reading of the device's Input2 Network" + }, + "TemperatureOutput": { + "value": 127, + "deprecated": false, + "description": "The current temperature reading of the device's Output Network" + }, + "TemperatureOutput2": { + "value": 137, + "deprecated": false, + "description": "The current temperature reading of the device's Output2 Network" + }, + "TemperatureSetting": { + "value": 72, + "deprecated": false, + "description": "The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)" + }, + "Throttle": { + "value": 154, + "deprecated": false, + "description": "Increases the rate at which the machine works (range: 0-100)" + }, + "Thrust": { + "value": 221, + "deprecated": false, + "description": "Total current thrust of all rocket engines on the rocket in Newtons." + }, + "ThrustToWeight": { + "value": 223, + "deprecated": false, + "description": "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": { + "value": 102, + "deprecated": false, + "description": "Time" + }, + "TimeToDestination": { + "value": 224, + "deprecated": false, + "description": "Estimated time in seconds until rocket arrives at target destination." + }, + "TotalMoles": { + "value": 66, + "deprecated": false, + "description": "Returns the total moles of the device" + }, + "TotalMolesInput": { + "value": 115, + "deprecated": false, + "description": "Returns the total moles of the device's Input Network" + }, + "TotalMolesInput2": { + "value": 125, + "deprecated": false, + "description": "Returns the total moles of the device's Input2 Network" + }, + "TotalMolesOutput": { + "value": 135, + "deprecated": false, + "description": "Returns the total moles of the device's Output Network" + }, + "TotalMolesOutput2": { + "value": 145, + "deprecated": false, + "description": "Returns the total moles of the device's Output2 Network" + }, + "TotalQuantity": { + "value": 265, + "deprecated": false, + "description": "The estimated total quantity of resources available to mine at the rocket's target Space Map Site." + }, + "TrueAnomaly": { + "value": 251, + "deprecated": false, + "description": "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)." + }, + "VelocityMagnitude": { + "value": 79, + "deprecated": false, + "description": "The current magnitude of the velocity vector" + }, + "VelocityRelativeX": { + "value": 80, + "deprecated": false, + "description": "The current velocity X relative to the forward vector of this" + }, + "VelocityRelativeY": { + "value": 81, + "deprecated": false, + "description": "The current velocity Y relative to the forward vector of this" + }, + "VelocityRelativeZ": { + "value": 82, + "deprecated": false, + "description": "The current velocity Z relative to the forward vector of this" + }, + "VelocityX": { + "value": 231, + "deprecated": false, + "description": "The world velocity of the entity in the X axis" + }, + "VelocityY": { + "value": 232, + "deprecated": false, + "description": "The world velocity of the entity in the Y axis" + }, + "VelocityZ": { + "value": 233, + "deprecated": false, + "description": "The world velocity of the entity in the Z axis" + }, + "Vertical": { + "value": 21, + "deprecated": false, + "description": "Vertical setting of the device" + }, + "VerticalRatio": { + "value": 35, + "deprecated": false, + "description": "Radio of vertical setting for device" + }, + "Volume": { + "value": 67, + "deprecated": false, + "description": "Returns the device atmosphere volume" + }, + "VolumeOfLiquid": { + "value": 182, + "deprecated": false, + "description": "The total volume of all liquids in Liters in the atmosphere" + }, + "WattsReachingContact": { + "value": 164, + "deprecated": false, + "description": "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": { + "value": 222, + "deprecated": false, + "description": "Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity." + }, + "WorkingGasEfficiency": { + "value": 105, + "deprecated": false, + "description": "The Working Gas Efficiency reported by the machine, as a float between 0 and 1" + } + } + } + }, + "basicEnums": { + "AirCon": { + "enumName": "AirConditioningMode", + "values": { + "Cold": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Hot": { + "value": 1, + "deprecated": false, + "description": "" + } + } + }, + "AirControl": { + "enumName": "AirControlMode", + "values": { + "Draught": { + "value": 4, + "deprecated": false, + "description": "" + }, + "None": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Offline": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Pressure": { + "value": 2, + "deprecated": false, + "description": "" + } + } + }, + "Color": { + "enumName": "ColorType", + "values": { + "Black": { + "value": 7, + "deprecated": false, + "description": "" + }, + "Blue": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Brown": { + "value": 8, + "deprecated": false, + "description": "" + }, + "Gray": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Green": { + "value": 2, + "deprecated": false, + "description": "" + }, + "Khaki": { + "value": 9, + "deprecated": false, + "description": "" + }, + "Orange": { + "value": 3, + "deprecated": false, + "description": "" + }, + "Pink": { + "value": 10, + "deprecated": false, + "description": "" + }, + "Purple": { + "value": 11, + "deprecated": false, + "description": "" + }, + "Red": { + "value": 4, + "deprecated": false, + "description": "" + }, + "White": { + "value": 6, + "deprecated": false, + "description": "" + }, + "Yellow": { + "value": 5, + "deprecated": false, + "description": "" + } + } + }, + "DaylightSensorMode": { + "enumName": "DaylightSensorMode", + "values": { + "Default": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Horizontal": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Vertical": { + "value": 2, + "deprecated": false, + "description": "" + } + } + }, + "ElevatorMode": { + "enumName": "ElevatorMode", + "values": { + "Downward": { + "value": 2, + "deprecated": false, + "description": "" + }, + "Stationary": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Upward": { + "value": 1, + "deprecated": false, + "description": "" + } + } + }, + "EntityState": { + "enumName": "EntityState", + "values": { + "Alive": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Dead": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Decay": { + "value": 3, + "deprecated": false, + "description": "" + }, + "Unconscious": { + "value": 2, + "deprecated": false, + "description": "" + } + } + }, + "GasType": { + "enumName": "GasType", + "values": { + "CarbonDioxide": { + "value": 4, + "deprecated": false, + "description": "" + }, + "Hydrogen": { + "value": 16384, + "deprecated": false, + "description": "" + }, + "LiquidCarbonDioxide": { + "value": 2048, + "deprecated": false, + "description": "" + }, + "LiquidHydrogen": { + "value": 32768, + "deprecated": false, + "description": "" + }, + "LiquidNitrogen": { + "value": 128, + "deprecated": false, + "description": "" + }, + "LiquidNitrousOxide": { + "value": 8192, + "deprecated": false, + "description": "" + }, + "LiquidOxygen": { + "value": 256, + "deprecated": false, + "description": "" + }, + "LiquidPollutant": { + "value": 4096, + "deprecated": false, + "description": "" + }, + "LiquidVolatiles": { + "value": 512, + "deprecated": false, + "description": "" + }, + "Nitrogen": { + "value": 2, + "deprecated": false, + "description": "" + }, + "NitrousOxide": { + "value": 64, + "deprecated": false, + "description": "" + }, + "Oxygen": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Pollutant": { + "value": 16, + "deprecated": false, + "description": "" + }, + "PollutedWater": { + "value": 65536, + "deprecated": false, + "description": "" + }, + "Steam": { + "value": 1024, + "deprecated": false, + "description": "" + }, + "Undefined": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Volatiles": { + "value": 8, + "deprecated": false, + "description": "" + }, + "Water": { + "value": 32, + "deprecated": false, + "description": "" + } + } + }, + "LogicSlotType": { + "enumName": "LogicSlotType", + "values": { + "Charge": { + "value": 10, + "deprecated": false, + "description": "returns current energy charge the slot occupant is holding" + }, + "ChargeRatio": { + "value": 11, + "deprecated": false, + "description": "returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum" + }, + "Class": { + "value": 12, + "deprecated": false, + "description": "returns integer representing the class of object" + }, + "Damage": { + "value": 4, + "deprecated": false, + "description": "returns the damage state of the item in the slot" + }, + "Efficiency": { + "value": 5, + "deprecated": false, + "description": "returns the growth efficiency of the plant in the slot" + }, + "FilterType": { + "value": 25, + "deprecated": false, + "description": "No description available" + }, + "Growth": { + "value": 7, + "deprecated": false, + "description": "returns the current growth state of the plant in the slot" + }, + "Health": { + "value": 6, + "deprecated": false, + "description": "returns the health of the plant in the slot" + }, + "LineNumber": { + "value": 19, + "deprecated": false, + "description": "The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution" + }, + "Lock": { + "value": 23, + "deprecated": false, + "description": "No description available" + }, + "Mature": { + "value": 16, + "deprecated": false, + "description": "returns 1 if the plant in this slot is mature, 0 when it isn't" + }, + "MaxQuantity": { + "value": 15, + "deprecated": false, + "description": "returns the max stack size of the item in the slot" + }, + "None": { + "value": 0, + "deprecated": false, + "description": "No description" + }, + "OccupantHash": { + "value": 2, + "deprecated": false, + "description": "returns the has of the current occupant, the unique identifier of the thing" + }, + "Occupied": { + "value": 1, + "deprecated": false, + "description": "returns 0 when slot is not occupied, 1 when it is" + }, + "On": { + "value": 22, + "deprecated": false, + "description": "No description available" + }, + "Open": { + "value": 21, + "deprecated": false, + "description": "No description available" + }, + "PrefabHash": { + "value": 17, + "deprecated": false, + "description": "returns the hash of the structure in the slot" + }, + "Pressure": { + "value": 8, + "deprecated": false, + "description": "returns pressure of the slot occupants internal atmosphere" + }, + "PressureAir": { + "value": 14, + "deprecated": false, + "description": "returns pressure in the air tank of the jetpack in this slot" + }, + "PressureWaste": { + "value": 13, + "deprecated": false, + "description": "returns pressure in the waste tank of the jetpack in this slot" + }, + "Quantity": { + "value": 3, + "deprecated": false, + "description": "returns the current quantity, such as stack size, of the item in the slot" + }, + "ReferenceId": { + "value": 26, + "deprecated": false, + "description": "Unique Reference Identifier for this object" + }, + "Seeding": { + "value": 18, + "deprecated": false, + "description": "Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not." + }, + "SortingClass": { + "value": 24, + "deprecated": false, + "description": "No description available" + }, + "Temperature": { + "value": 9, + "deprecated": false, + "description": "returns temperature of the slot occupants internal atmosphere" + }, + "Volume": { + "value": 20, + "deprecated": false, + "description": "No description available" + } + } + }, + "LogicType": { + "enumName": "LogicType", + "values": { + "Acceleration": { + "value": 216, + "deprecated": false, + "description": "Change in velocity. Rockets that are deccelerating when landing will show this as negative value." + }, + "Activate": { + "value": 9, + "deprecated": false, + "description": "1 if device is activated (usually means running), otherwise 0" + }, + "AirRelease": { + "value": 75, + "deprecated": false, + "description": "The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On" + }, + "AlignmentError": { + "value": 243, + "deprecated": false, + "description": "The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target." + }, + "Apex": { + "value": 238, + "deprecated": false, + "description": "The lowest altitude that the rocket will reach before it starts travelling upwards again." + }, + "AutoLand": { + "value": 226, + "deprecated": false, + "description": "Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing." + }, + "AutoShutOff": { + "value": 218, + "deprecated": false, + "description": "Turns off all devices in the rocket upon reaching destination" + }, + "BestContactFilter": { + "value": 267, + "deprecated": false, + "description": "Filters the satellite's auto selection of targets to a single reference ID." + }, + "Bpm": { + "value": 103, + "deprecated": false, + "description": "Bpm" + }, + "BurnTimeRemaining": { + "value": 225, + "deprecated": false, + "description": "Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage." + }, + "CelestialHash": { + "value": 242, + "deprecated": false, + "description": "The current hash of the targeted celestial object." + }, + "CelestialParentHash": { + "value": 250, + "deprecated": false, + "description": "The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial." + }, + "Channel0": { + "value": 165, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel1": { + "value": 166, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel2": { + "value": 167, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel3": { + "value": 168, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel4": { + "value": 169, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel5": { + "value": 170, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel6": { + "value": 171, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel7": { + "value": 172, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Charge": { + "value": 11, + "deprecated": false, + "description": "The current charge the device has" + }, + "Chart": { + "value": 256, + "deprecated": false, + "description": "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." + }, + "ChartedNavPoints": { + "value": 259, + "deprecated": false, + "description": "The number of charted NavPoints at the rocket's target Space Map Location." + }, + "ClearMemory": { + "value": 62, + "deprecated": false, + "description": "When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned" + }, + "CollectableGoods": { + "value": 101, + "deprecated": false, + "description": "Gets the cost of fuel to return the rocket to your current world." + }, + "Color": { + "value": 38, + "deprecated": false, + "description": "\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 " + }, + "Combustion": { + "value": 98, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not." + }, + "CombustionInput": { + "value": 146, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not." + }, + "CombustionInput2": { + "value": 147, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not." + }, + "CombustionLimiter": { + "value": 153, + "deprecated": false, + "description": "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": { + "value": 148, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not." + }, + "CombustionOutput2": { + "value": 149, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not." + }, + "CompletionRatio": { + "value": 61, + "deprecated": false, + "description": "How complete the current production is for this device, between 0 and 1" + }, + "ContactTypeId": { + "value": 198, + "deprecated": false, + "description": "The type id of the contact." + }, + "CurrentCode": { + "value": 261, + "deprecated": false, + "description": "The Space Map Address of the rockets current Space Map Location" + }, + "CurrentResearchPodType": { + "value": 93, + "deprecated": false, + "description": "" + }, + "Density": { + "value": 262, + "deprecated": false, + "description": "The density of the rocket's target site's mine-able deposit." + }, + "DestinationCode": { + "value": 215, + "deprecated": false, + "description": "The Space Map Address of the rockets target Space Map Location" + }, + "Discover": { + "value": 255, + "deprecated": false, + "description": "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." + }, + "DistanceAu": { + "value": 244, + "deprecated": false, + "description": "The current distance to the celestial object, measured in astronomical units." + }, + "DistanceKm": { + "value": 249, + "deprecated": false, + "description": "The current distance to the celestial object, measured in kilometers." + }, + "DrillCondition": { + "value": 240, + "deprecated": false, + "description": "The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1." + }, + "DryMass": { + "value": 220, + "deprecated": false, + "description": "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": { + "value": 247, + "deprecated": false, + "description": "A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)." + }, + "ElevatorLevel": { + "value": 40, + "deprecated": false, + "description": "Level the elevator is currently at" + }, + "ElevatorSpeed": { + "value": 39, + "deprecated": false, + "description": "Current speed of the elevator" + }, + "EntityState": { + "value": 239, + "deprecated": false, + "description": "The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer." + }, + "EnvironmentEfficiency": { + "value": 104, + "deprecated": false, + "description": "The Environment Efficiency reported by the machine, as a float between 0 and 1" + }, + "Error": { + "value": 4, + "deprecated": false, + "description": "1 if device is in error state, otherwise 0" + }, + "ExhaustVelocity": { + "value": 235, + "deprecated": false, + "description": "The velocity of the exhaust gas in m/s" + }, + "ExportCount": { + "value": 63, + "deprecated": false, + "description": "How many items exported since last ClearMemory" + }, + "ExportQuantity": { + "value": 31, + "deprecated": true, + "description": "Total quantity of items exported by the device" + }, + "ExportSlotHash": { + "value": 42, + "deprecated": true, + "description": "DEPRECATED" + }, + "ExportSlotOccupant": { + "value": 32, + "deprecated": true, + "description": "DEPRECATED" + }, + "Filtration": { + "value": 74, + "deprecated": false, + "description": "The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On" + }, + "FlightControlRule": { + "value": 236, + "deprecated": false, + "description": "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." + }, + "Flush": { + "value": 174, + "deprecated": false, + "description": "Set to 1 to activate the flush function on the device" + }, + "ForceWrite": { + "value": 85, + "deprecated": false, + "description": "Forces Logic Writer devices to rewrite value" + }, + "ForwardX": { + "value": 227, + "deprecated": false, + "description": "The direction the entity is facing expressed as a normalized vector" + }, + "ForwardY": { + "value": 228, + "deprecated": false, + "description": "The direction the entity is facing expressed as a normalized vector" + }, + "ForwardZ": { + "value": 229, + "deprecated": false, + "description": "The direction the entity is facing expressed as a normalized vector" + }, + "Fuel": { + "value": 99, + "deprecated": false, + "description": "Gets the cost of fuel to return the rocket to your current world." + }, + "Harvest": { + "value": 69, + "deprecated": false, + "description": "Performs the harvesting action for any plant based machinery" + }, + "Horizontal": { + "value": 20, + "deprecated": false, + "description": "Horizontal setting of the device" + }, + "HorizontalRatio": { + "value": 34, + "deprecated": false, + "description": "Radio of horizontal setting for device" + }, + "Idle": { + "value": 37, + "deprecated": false, + "description": "Returns 1 if the device is currently idle, otherwise 0" + }, + "ImportCount": { + "value": 64, + "deprecated": false, + "description": "How many items imported since last ClearMemory" + }, + "ImportQuantity": { + "value": 29, + "deprecated": true, + "description": "Total quantity of items imported by the device" + }, + "ImportSlotHash": { + "value": 43, + "deprecated": true, + "description": "DEPRECATED" + }, + "ImportSlotOccupant": { + "value": 30, + "deprecated": true, + "description": "DEPRECATED" + }, + "Inclination": { + "value": 246, + "deprecated": false, + "description": "The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle." + }, + "Index": { + "value": 241, + "deprecated": false, + "description": "The current index for the device." + }, + "InterrogationProgress": { + "value": 157, + "deprecated": false, + "description": "Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1" + }, + "LineNumber": { + "value": 173, + "deprecated": false, + "description": "The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution" + }, + "Lock": { + "value": 10, + "deprecated": false, + "description": "1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values" + }, + "ManualResearchRequiredPod": { + "value": 94, + "deprecated": false, + "description": "Sets the pod type to search for a certain pod when breaking down a pods." + }, + "Mass": { + "value": 219, + "deprecated": false, + "description": "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": { + "value": 23, + "deprecated": false, + "description": "Maximum setting of the device" + }, + "MineablesInQueue": { + "value": 96, + "deprecated": false, + "description": "Returns the amount of mineables AIMEe has queued up to mine." + }, + "MineablesInVicinity": { + "value": 95, + "deprecated": false, + "description": "Returns the amount of potential mineables within an extended area around AIMEe." + }, + "MinedQuantity": { + "value": 266, + "deprecated": false, + "description": "The total number of resources that have been mined at the rocket's target Space Map Site." + }, + "MinimumWattsToContact": { + "value": 163, + "deprecated": false, + "description": "Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact" + }, + "Mode": { + "value": 3, + "deprecated": false, + "description": "Integer for mode state, different devices will have different mode states available to them" + }, + "NameHash": { + "value": 268, + "deprecated": false, + "description": "Provides the hash value for the name of the object as a 32 bit integer." + }, + "NavPoints": { + "value": 258, + "deprecated": false, + "description": "The number of NavPoints at the rocket's target Space Map Location." + }, + "NextWeatherEventTime": { + "value": 97, + "deprecated": false, + "description": "Returns in seconds when the next weather event is inbound." + }, + "None": { + "value": 0, + "deprecated": true, + "description": "No description" + }, + "On": { + "value": 28, + "deprecated": false, + "description": "The current state of the device, 0 for off, 1 for on" + }, + "Open": { + "value": 2, + "deprecated": false, + "description": "1 if device is open, otherwise 0" + }, + "OperationalTemperatureEfficiency": { + "value": 150, + "deprecated": false, + "description": "How the input pipe's temperature effects the machines efficiency" + }, + "OrbitPeriod": { + "value": 245, + "deprecated": false, + "description": "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." + }, + "Orientation": { + "value": 230, + "deprecated": false, + "description": "The orientation of the entity in degrees in a plane relative towards the north origin" + }, + "Output": { + "value": 70, + "deprecated": false, + "description": "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": { + "value": 234, + "deprecated": false, + "description": "The number of moles that passed through this device on the previous simulation tick" + }, + "Plant": { + "value": 68, + "deprecated": false, + "description": "Performs the planting action for any plant based machinery" + }, + "PlantEfficiency1": { + "value": 52, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantEfficiency2": { + "value": 53, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantEfficiency3": { + "value": 54, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantEfficiency4": { + "value": 55, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantGrowth1": { + "value": 48, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantGrowth2": { + "value": 49, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantGrowth3": { + "value": 50, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantGrowth4": { + "value": 51, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHash1": { + "value": 56, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHash2": { + "value": 57, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHash3": { + "value": 58, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHash4": { + "value": 59, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHealth1": { + "value": 44, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHealth2": { + "value": 45, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHealth3": { + "value": 46, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHealth4": { + "value": 47, + "deprecated": true, + "description": "DEPRECATED" + }, + "PositionX": { + "value": 76, + "deprecated": false, + "description": "The current position in X dimension in world coordinates" + }, + "PositionY": { + "value": 77, + "deprecated": false, + "description": "The current position in Y dimension in world coordinates" + }, + "PositionZ": { + "value": 78, + "deprecated": false, + "description": "The current position in Z dimension in world coordinates" + }, + "Power": { + "value": 1, + "deprecated": false, + "description": "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": { + "value": 26, + "deprecated": false, + "description": "How much energy the device or network is actually using" + }, + "PowerGeneration": { + "value": 65, + "deprecated": false, + "description": "Returns how much power is being generated" + }, + "PowerPotential": { + "value": 25, + "deprecated": false, + "description": "How much energy the device or network potentially provides" + }, + "PowerRequired": { + "value": 36, + "deprecated": false, + "description": "Power requested from the device and/or network" + }, + "PrefabHash": { + "value": 84, + "deprecated": false, + "description": "The hash of the structure" + }, + "Pressure": { + "value": 5, + "deprecated": false, + "description": "The current pressure reading of the device" + }, + "PressureEfficiency": { + "value": 152, + "deprecated": false, + "description": "How the pressure of the input pipe and waste pipe effect the machines efficiency" + }, + "PressureExternal": { + "value": 7, + "deprecated": false, + "description": "Setting for external pressure safety, in KPa" + }, + "PressureInput": { + "value": 106, + "deprecated": false, + "description": "The current pressure reading of the device's Input Network" + }, + "PressureInput2": { + "value": 116, + "deprecated": false, + "description": "The current pressure reading of the device's Input2 Network" + }, + "PressureInternal": { + "value": 8, + "deprecated": false, + "description": "Setting for internal pressure safety, in KPa" + }, + "PressureOutput": { + "value": 126, + "deprecated": false, + "description": "The current pressure reading of the device's Output Network" + }, + "PressureOutput2": { + "value": 136, + "deprecated": false, + "description": "The current pressure reading of the device's Output2 Network" + }, + "PressureSetting": { + "value": 71, + "deprecated": false, + "description": "The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa" + }, + "Progress": { + "value": 214, + "deprecated": false, + "description": "Progress of the rocket to the next node on the map expressed as a value between 0-1." + }, + "Quantity": { + "value": 27, + "deprecated": false, + "description": "Total quantity on the device" + }, + "Ratio": { + "value": 24, + "deprecated": false, + "description": "Context specific value depending on device, 0 to 1 based ratio" + }, + "RatioCarbonDioxide": { + "value": 15, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device atmosphere" + }, + "RatioCarbonDioxideInput": { + "value": 109, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device's input network" + }, + "RatioCarbonDioxideInput2": { + "value": 119, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device's Input2 network" + }, + "RatioCarbonDioxideOutput": { + "value": 129, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device's Output network" + }, + "RatioCarbonDioxideOutput2": { + "value": 139, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device's Output2 network" + }, + "RatioHydrogen": { + "value": 252, + "deprecated": false, + "description": "The ratio of Hydrogen in device's Atmopshere" + }, + "RatioLiquidCarbonDioxide": { + "value": 199, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's Atmosphere" + }, + "RatioLiquidCarbonDioxideInput": { + "value": 200, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's Input Atmosphere" + }, + "RatioLiquidCarbonDioxideInput2": { + "value": 201, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere" + }, + "RatioLiquidCarbonDioxideOutput": { + "value": 202, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere" + }, + "RatioLiquidCarbonDioxideOutput2": { + "value": 203, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere" + }, + "RatioLiquidHydrogen": { + "value": 253, + "deprecated": false, + "description": "The ratio of Liquid Hydrogen in device's Atmopshere" + }, + "RatioLiquidNitrogen": { + "value": 177, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device atmosphere" + }, + "RatioLiquidNitrogenInput": { + "value": 178, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device's input network" + }, + "RatioLiquidNitrogenInput2": { + "value": 179, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device's Input2 network" + }, + "RatioLiquidNitrogenOutput": { + "value": 180, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device's Output network" + }, + "RatioLiquidNitrogenOutput2": { + "value": 181, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device's Output2 network" + }, + "RatioLiquidNitrousOxide": { + "value": 209, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's Atmosphere" + }, + "RatioLiquidNitrousOxideInput": { + "value": 210, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's Input Atmosphere" + }, + "RatioLiquidNitrousOxideInput2": { + "value": 211, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere" + }, + "RatioLiquidNitrousOxideOutput": { + "value": 212, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere" + }, + "RatioLiquidNitrousOxideOutput2": { + "value": 213, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere" + }, + "RatioLiquidOxygen": { + "value": 183, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's Atmosphere" + }, + "RatioLiquidOxygenInput": { + "value": 184, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's Input Atmosphere" + }, + "RatioLiquidOxygenInput2": { + "value": 185, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's Input2 Atmosphere" + }, + "RatioLiquidOxygenOutput": { + "value": 186, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's device's Output Atmosphere" + }, + "RatioLiquidOxygenOutput2": { + "value": 187, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's Output2 Atmopshere" + }, + "RatioLiquidPollutant": { + "value": 204, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's Atmosphere" + }, + "RatioLiquidPollutantInput": { + "value": 205, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's Input Atmosphere" + }, + "RatioLiquidPollutantInput2": { + "value": 206, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's Input2 Atmosphere" + }, + "RatioLiquidPollutantOutput": { + "value": 207, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's device's Output Atmosphere" + }, + "RatioLiquidPollutantOutput2": { + "value": 208, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's Output2 Atmopshere" + }, + "RatioLiquidVolatiles": { + "value": 188, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's Atmosphere" + }, + "RatioLiquidVolatilesInput": { + "value": 189, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's Input Atmosphere" + }, + "RatioLiquidVolatilesInput2": { + "value": 190, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's Input2 Atmosphere" + }, + "RatioLiquidVolatilesOutput": { + "value": 191, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's device's Output Atmosphere" + }, + "RatioLiquidVolatilesOutput2": { + "value": 192, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's Output2 Atmopshere" + }, + "RatioNitrogen": { + "value": 16, + "deprecated": false, + "description": "The ratio of nitrogen in device atmosphere" + }, + "RatioNitrogenInput": { + "value": 110, + "deprecated": false, + "description": "The ratio of nitrogen in device's input network" + }, + "RatioNitrogenInput2": { + "value": 120, + "deprecated": false, + "description": "The ratio of nitrogen in device's Input2 network" + }, + "RatioNitrogenOutput": { + "value": 130, + "deprecated": false, + "description": "The ratio of nitrogen in device's Output network" + }, + "RatioNitrogenOutput2": { + "value": 140, + "deprecated": false, + "description": "The ratio of nitrogen in device's Output2 network" + }, + "RatioNitrousOxide": { + "value": 83, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device atmosphere" + }, + "RatioNitrousOxideInput": { + "value": 114, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device's input network" + }, + "RatioNitrousOxideInput2": { + "value": 124, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device's Input2 network" + }, + "RatioNitrousOxideOutput": { + "value": 134, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device's Output network" + }, + "RatioNitrousOxideOutput2": { + "value": 144, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device's Output2 network" + }, + "RatioOxygen": { + "value": 14, + "deprecated": false, + "description": "The ratio of oxygen in device atmosphere" + }, + "RatioOxygenInput": { + "value": 108, + "deprecated": false, + "description": "The ratio of oxygen in device's input network" + }, + "RatioOxygenInput2": { + "value": 118, + "deprecated": false, + "description": "The ratio of oxygen in device's Input2 network" + }, + "RatioOxygenOutput": { + "value": 128, + "deprecated": false, + "description": "The ratio of oxygen in device's Output network" + }, + "RatioOxygenOutput2": { + "value": 138, + "deprecated": false, + "description": "The ratio of oxygen in device's Output2 network" + }, + "RatioPollutant": { + "value": 17, + "deprecated": false, + "description": "The ratio of pollutant in device atmosphere" + }, + "RatioPollutantInput": { + "value": 111, + "deprecated": false, + "description": "The ratio of pollutant in device's input network" + }, + "RatioPollutantInput2": { + "value": 121, + "deprecated": false, + "description": "The ratio of pollutant in device's Input2 network" + }, + "RatioPollutantOutput": { + "value": 131, + "deprecated": false, + "description": "The ratio of pollutant in device's Output network" + }, + "RatioPollutantOutput2": { + "value": 141, + "deprecated": false, + "description": "The ratio of pollutant in device's Output2 network" + }, + "RatioPollutedWater": { + "value": 254, + "deprecated": false, + "description": "The ratio of polluted water in device atmosphere" + }, + "RatioSteam": { + "value": 193, + "deprecated": false, + "description": "The ratio of Steam in device's Atmosphere" + }, + "RatioSteamInput": { + "value": 194, + "deprecated": false, + "description": "The ratio of Steam in device's Input Atmosphere" + }, + "RatioSteamInput2": { + "value": 195, + "deprecated": false, + "description": "The ratio of Steam in device's Input2 Atmosphere" + }, + "RatioSteamOutput": { + "value": 196, + "deprecated": false, + "description": "The ratio of Steam in device's device's Output Atmosphere" + }, + "RatioSteamOutput2": { + "value": 197, + "deprecated": false, + "description": "The ratio of Steam in device's Output2 Atmopshere" + }, + "RatioVolatiles": { + "value": 18, + "deprecated": false, + "description": "The ratio of volatiles in device atmosphere" + }, + "RatioVolatilesInput": { + "value": 112, + "deprecated": false, + "description": "The ratio of volatiles in device's input network" + }, + "RatioVolatilesInput2": { + "value": 122, + "deprecated": false, + "description": "The ratio of volatiles in device's Input2 network" + }, + "RatioVolatilesOutput": { + "value": 132, + "deprecated": false, + "description": "The ratio of volatiles in device's Output network" + }, + "RatioVolatilesOutput2": { + "value": 142, + "deprecated": false, + "description": "The ratio of volatiles in device's Output2 network" + }, + "RatioWater": { + "value": 19, + "deprecated": false, + "description": "The ratio of water in device atmosphere" + }, + "RatioWaterInput": { + "value": 113, + "deprecated": false, + "description": "The ratio of water in device's input network" + }, + "RatioWaterInput2": { + "value": 123, + "deprecated": false, + "description": "The ratio of water in device's Input2 network" + }, + "RatioWaterOutput": { + "value": 133, + "deprecated": false, + "description": "The ratio of water in device's Output network" + }, + "RatioWaterOutput2": { + "value": 143, + "deprecated": false, + "description": "The ratio of water in device's Output2 network" + }, + "ReEntryAltitude": { + "value": 237, + "deprecated": false, + "description": "The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km" + }, + "Reagents": { + "value": 13, + "deprecated": false, + "description": "Total number of reagents recorded by the device" + }, + "RecipeHash": { + "value": 41, + "deprecated": false, + "description": "Current hash of the recipe the device is set to produce" + }, + "ReferenceId": { + "value": 217, + "deprecated": false, + "description": "Unique Reference Identifier for this object" + }, + "RequestHash": { + "value": 60, + "deprecated": false, + "description": "When set to the unique identifier, requests an item of the provided type from the device" + }, + "RequiredPower": { + "value": 33, + "deprecated": false, + "description": "Idle operating power quantity, does not necessarily include extra demand power" + }, + "ReturnFuelCost": { + "value": 100, + "deprecated": false, + "description": "Gets the fuel remaining in your rocket's fuel tank." + }, + "Richness": { + "value": 263, + "deprecated": false, + "description": "The richness of the rocket's target site's mine-able deposit." + }, + "Rpm": { + "value": 155, + "deprecated": false, + "description": "The number of revolutions per minute that the device's spinning mechanism is doing" + }, + "SemiMajorAxis": { + "value": 248, + "deprecated": false, + "description": "The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit." + }, + "Setting": { + "value": 12, + "deprecated": false, + "description": "A variable setting that can be read or written, depending on the device" + }, + "SettingInput": { + "value": 91, + "deprecated": false, + "description": "" + }, + "SettingOutput": { + "value": 92, + "deprecated": false, + "description": "" + }, + "SignalID": { + "value": 87, + "deprecated": false, + "description": "Returns the contact ID of the strongest signal from this Satellite" + }, + "SignalStrength": { + "value": 86, + "deprecated": false, + "description": "Returns the degree offset of the strongest contact" + }, + "Sites": { + "value": 260, + "deprecated": false, + "description": "The number of Sites that have been discovered at the rockets target Space Map location." + }, + "Size": { + "value": 264, + "deprecated": false, + "description": "The size of the rocket's target site's mine-able deposit." + }, + "SizeX": { + "value": 160, + "deprecated": false, + "description": "Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)" + }, + "SizeY": { + "value": 161, + "deprecated": false, + "description": "Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)" + }, + "SizeZ": { + "value": 162, + "deprecated": false, + "description": "Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)" + }, + "SolarAngle": { + "value": 22, + "deprecated": false, + "description": "Solar angle of the device" + }, + "SolarIrradiance": { + "value": 176, + "deprecated": false, + "description": "" + }, + "SoundAlert": { + "value": 175, + "deprecated": false, + "description": "Plays a sound alert on the devices speaker" + }, + "Stress": { + "value": 156, + "deprecated": false, + "description": "Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down" + }, + "Survey": { + "value": 257, + "deprecated": false, + "description": "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." + }, + "TargetPadIndex": { + "value": 158, + "deprecated": false, + "description": "The index of the trader landing pad on this devices data network that it will try to call a trader in to land" + }, + "TargetX": { + "value": 88, + "deprecated": false, + "description": "The target position in X dimension in world coordinates" + }, + "TargetY": { + "value": 89, + "deprecated": false, + "description": "The target position in Y dimension in world coordinates" + }, + "TargetZ": { + "value": 90, + "deprecated": false, + "description": "The target position in Z dimension in world coordinates" + }, + "Temperature": { + "value": 6, + "deprecated": false, + "description": "The current temperature reading of the device" + }, + "TemperatureDifferentialEfficiency": { + "value": 151, + "deprecated": false, + "description": "How the difference between the input pipe and waste pipe temperatures effect the machines efficiency" + }, + "TemperatureExternal": { + "value": 73, + "deprecated": false, + "description": "The temperature of the outside of the device, usually the world atmosphere surrounding it" + }, + "TemperatureInput": { + "value": 107, + "deprecated": false, + "description": "The current temperature reading of the device's Input Network" + }, + "TemperatureInput2": { + "value": 117, + "deprecated": false, + "description": "The current temperature reading of the device's Input2 Network" + }, + "TemperatureOutput": { + "value": 127, + "deprecated": false, + "description": "The current temperature reading of the device's Output Network" + }, + "TemperatureOutput2": { + "value": 137, + "deprecated": false, + "description": "The current temperature reading of the device's Output2 Network" + }, + "TemperatureSetting": { + "value": 72, + "deprecated": false, + "description": "The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)" + }, + "Throttle": { + "value": 154, + "deprecated": false, + "description": "Increases the rate at which the machine works (range: 0-100)" + }, + "Thrust": { + "value": 221, + "deprecated": false, + "description": "Total current thrust of all rocket engines on the rocket in Newtons." + }, + "ThrustToWeight": { + "value": 223, + "deprecated": false, + "description": "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": { + "value": 102, + "deprecated": false, + "description": "Time" + }, + "TimeToDestination": { + "value": 224, + "deprecated": false, + "description": "Estimated time in seconds until rocket arrives at target destination." + }, + "TotalMoles": { + "value": 66, + "deprecated": false, + "description": "Returns the total moles of the device" + }, + "TotalMolesInput": { + "value": 115, + "deprecated": false, + "description": "Returns the total moles of the device's Input Network" + }, + "TotalMolesInput2": { + "value": 125, + "deprecated": false, + "description": "Returns the total moles of the device's Input2 Network" + }, + "TotalMolesOutput": { + "value": 135, + "deprecated": false, + "description": "Returns the total moles of the device's Output Network" + }, + "TotalMolesOutput2": { + "value": 145, + "deprecated": false, + "description": "Returns the total moles of the device's Output2 Network" + }, + "TotalQuantity": { + "value": 265, + "deprecated": false, + "description": "The estimated total quantity of resources available to mine at the rocket's target Space Map Site." + }, + "TrueAnomaly": { + "value": 251, + "deprecated": false, + "description": "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)." + }, + "VelocityMagnitude": { + "value": 79, + "deprecated": false, + "description": "The current magnitude of the velocity vector" + }, + "VelocityRelativeX": { + "value": 80, + "deprecated": false, + "description": "The current velocity X relative to the forward vector of this" + }, + "VelocityRelativeY": { + "value": 81, + "deprecated": false, + "description": "The current velocity Y relative to the forward vector of this" + }, + "VelocityRelativeZ": { + "value": 82, + "deprecated": false, + "description": "The current velocity Z relative to the forward vector of this" + }, + "VelocityX": { + "value": 231, + "deprecated": false, + "description": "The world velocity of the entity in the X axis" + }, + "VelocityY": { + "value": 232, + "deprecated": false, + "description": "The world velocity of the entity in the Y axis" + }, + "VelocityZ": { + "value": 233, + "deprecated": false, + "description": "The world velocity of the entity in the Z axis" + }, + "Vertical": { + "value": 21, + "deprecated": false, + "description": "Vertical setting of the device" + }, + "VerticalRatio": { + "value": 35, + "deprecated": false, + "description": "Radio of vertical setting for device" + }, + "Volume": { + "value": 67, + "deprecated": false, + "description": "Returns the device atmosphere volume" + }, + "VolumeOfLiquid": { + "value": 182, + "deprecated": false, + "description": "The total volume of all liquids in Liters in the atmosphere" + }, + "WattsReachingContact": { + "value": 164, + "deprecated": false, + "description": "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": { + "value": 222, + "deprecated": false, + "description": "Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity." + }, + "WorkingGasEfficiency": { + "value": 105, + "deprecated": false, + "description": "The Working Gas Efficiency reported by the machine, as a float between 0 and 1" + } + } + }, + "PowerMode": { + "enumName": "PowerMode", + "values": { + "Charged": { + "value": 4, + "deprecated": false, + "description": "" + }, + "Charging": { + "value": 3, + "deprecated": false, + "description": "" + }, + "Discharged": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Discharging": { + "value": 2, + "deprecated": false, + "description": "" + }, + "Idle": { + "value": 0, + "deprecated": false, + "description": "" + } + } + }, + "PrinterInstruction": { + "enumName": "PrinterInstruction", + "values": { + "DeviceSetLock": { + "value": 6, + "deprecated": false, + "description": "" + }, + "EjectAllReagents": { + "value": 8, + "deprecated": false, + "description": "" + }, + "EjectReagent": { + "value": 7, + "deprecated": false, + "description": "" + }, + "ExecuteRecipe": { + "value": 2, + "deprecated": false, + "description": "" + }, + "JumpIfNextInvalid": { + "value": 4, + "deprecated": false, + "description": "" + }, + "JumpToAddress": { + "value": 5, + "deprecated": false, + "description": "" + }, + "MissingRecipeReagent": { + "value": 9, + "deprecated": false, + "description": "" + }, + "None": { + "value": 0, + "deprecated": false, + "description": "" + }, + "StackPointer": { + "value": 1, + "deprecated": false, + "description": "" + }, + "WaitUntilNextValid": { + "value": 3, + "deprecated": false, + "description": "" + } + } + }, + "ReEntryProfile": { + "enumName": "ReEntryProfile", + "values": { + "High": { + "value": 3, + "deprecated": false, + "description": "" + }, + "Max": { + "value": 4, + "deprecated": false, + "description": "" + }, + "Medium": { + "value": 2, + "deprecated": false, + "description": "" + }, + "None": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Optimal": { + "value": 1, + "deprecated": false, + "description": "" + } + } + }, + "RobotMode": { + "enumName": "RobotMode", + "values": { + "Follow": { + "value": 1, + "deprecated": false, + "description": "" + }, + "MoveToTarget": { + "value": 2, + "deprecated": false, + "description": "" + }, + "None": { + "value": 0, + "deprecated": false, + "description": "" + }, + "PathToTarget": { + "value": 5, + "deprecated": false, + "description": "" + }, + "Roam": { + "value": 3, + "deprecated": false, + "description": "" + }, + "StorageFull": { + "value": 6, + "deprecated": false, + "description": "" + }, + "Unload": { + "value": 4, + "deprecated": false, + "description": "" + } + } + }, + "RocketMode": { + "enumName": "RocketMode", + "values": { + "Chart": { + "value": 5, + "deprecated": false, + "description": "" + }, + "Discover": { + "value": 4, + "deprecated": false, + "description": "" + }, + "Invalid": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Mine": { + "value": 2, + "deprecated": false, + "description": "" + }, + "None": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Survey": { + "value": 3, + "deprecated": false, + "description": "" + } + } + }, + "SlotClass": { + "enumName": "Class", + "values": { + "AccessCard": { + "value": 22, + "deprecated": false, + "description": "" + }, + "Appliance": { + "value": 18, + "deprecated": false, + "description": "" + }, + "Back": { + "value": 3, + "deprecated": false, + "description": "" + }, + "Battery": { + "value": 14, + "deprecated": false, + "description": "" + }, + "Belt": { + "value": 16, + "deprecated": false, + "description": "" + }, + "Blocked": { + "value": 38, + "deprecated": false, + "description": "" + }, + "Bottle": { + "value": 25, + "deprecated": false, + "description": "" + }, + "Cartridge": { + "value": 21, + "deprecated": false, + "description": "" + }, + "Circuit": { + "value": 24, + "deprecated": false, + "description": "" + }, + "Circuitboard": { + "value": 7, + "deprecated": false, + "description": "" + }, + "CreditCard": { + "value": 28, + "deprecated": false, + "description": "" + }, + "DataDisk": { + "value": 8, + "deprecated": false, + "description": "" + }, + "DirtCanister": { + "value": 29, + "deprecated": false, + "description": "" + }, + "DrillHead": { + "value": 35, + "deprecated": false, + "description": "" + }, + "Egg": { + "value": 15, + "deprecated": false, + "description": "" + }, + "Entity": { + "value": 13, + "deprecated": false, + "description": "" + }, + "Flare": { + "value": 37, + "deprecated": false, + "description": "" + }, + "GasCanister": { + "value": 5, + "deprecated": false, + "description": "" + }, + "GasFilter": { + "value": 4, + "deprecated": false, + "description": "" + }, + "Glasses": { + "value": 27, + "deprecated": false, + "description": "" + }, + "Helmet": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Ingot": { + "value": 19, + "deprecated": false, + "description": "" + }, + "LiquidBottle": { + "value": 32, + "deprecated": false, + "description": "" + }, + "LiquidCanister": { + "value": 31, + "deprecated": false, + "description": "" + }, + "Magazine": { + "value": 23, + "deprecated": false, + "description": "" + }, + "Motherboard": { + "value": 6, + "deprecated": false, + "description": "" + }, + "None": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Ore": { + "value": 10, + "deprecated": false, + "description": "" + }, + "Organ": { + "value": 9, + "deprecated": false, + "description": "" + }, + "Plant": { + "value": 11, + "deprecated": false, + "description": "" + }, + "ProgrammableChip": { + "value": 26, + "deprecated": false, + "description": "" + }, + "ScanningHead": { + "value": 36, + "deprecated": false, + "description": "" + }, + "SensorProcessingUnit": { + "value": 30, + "deprecated": false, + "description": "" + }, + "SoundCartridge": { + "value": 34, + "deprecated": false, + "description": "" + }, + "Suit": { + "value": 2, + "deprecated": false, + "description": "" + }, + "SuitMod": { + "value": 39, + "deprecated": false, + "description": "" + }, + "Tool": { + "value": 17, + "deprecated": false, + "description": "" + }, + "Torpedo": { + "value": 20, + "deprecated": false, + "description": "" + }, + "Uniform": { + "value": 12, + "deprecated": false, + "description": "" + }, + "Wreckage": { + "value": 33, + "deprecated": false, + "description": "" + } + } + }, + "SorterInstruction": { + "enumName": "SorterInstruction", + "values": { + "FilterPrefabHashEquals": { + "value": 1, + "deprecated": false, + "description": "" + }, + "FilterPrefabHashNotEquals": { + "value": 2, + "deprecated": false, + "description": "" + }, + "FilterQuantityCompare": { + "value": 5, + "deprecated": false, + "description": "" + }, + "FilterSlotTypeCompare": { + "value": 4, + "deprecated": false, + "description": "" + }, + "FilterSortingClassCompare": { + "value": 3, + "deprecated": false, + "description": "" + }, + "LimitNextExecutionByCount": { + "value": 6, + "deprecated": false, + "description": "" + }, + "None": { + "value": 0, + "deprecated": false, + "description": "" + } + } + }, + "SortingClass": { + "enumName": "SortingClass", + "values": { + "Appliances": { + "value": 6, + "deprecated": false, + "description": "" + }, + "Atmospherics": { + "value": 7, + "deprecated": false, + "description": "" + }, + "Clothing": { + "value": 5, + "deprecated": false, + "description": "" + }, + "Default": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Food": { + "value": 4, + "deprecated": false, + "description": "" + }, + "Ices": { + "value": 10, + "deprecated": false, + "description": "" + }, + "Kits": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Ores": { + "value": 9, + "deprecated": false, + "description": "" + }, + "Resources": { + "value": 3, + "deprecated": false, + "description": "" + }, + "Storage": { + "value": 8, + "deprecated": false, + "description": "" + }, + "Tools": { + "value": 2, + "deprecated": false, + "description": "" + } + } + }, + "Sound": { + "enumName": "SoundAlert", + "values": { + "AirlockCycling": { + "value": 22, + "deprecated": false, + "description": "" + }, + "Alarm1": { + "value": 45, + "deprecated": false, + "description": "" + }, + "Alarm10": { + "value": 12, + "deprecated": false, + "description": "" + }, + "Alarm11": { + "value": 13, + "deprecated": false, + "description": "" + }, + "Alarm12": { + "value": 14, + "deprecated": false, + "description": "" + }, + "Alarm2": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Alarm3": { + "value": 2, + "deprecated": false, + "description": "" + }, + "Alarm4": { + "value": 3, + "deprecated": false, + "description": "" + }, + "Alarm5": { + "value": 4, + "deprecated": false, + "description": "" + }, + "Alarm6": { + "value": 5, + "deprecated": false, + "description": "" + }, + "Alarm7": { + "value": 6, + "deprecated": false, + "description": "" + }, + "Alarm8": { + "value": 10, + "deprecated": false, + "description": "" + }, + "Alarm9": { + "value": 11, + "deprecated": false, + "description": "" + }, + "Alert": { + "value": 17, + "deprecated": false, + "description": "" + }, + "Danger": { + "value": 15, + "deprecated": false, + "description": "" + }, + "Depressurising": { + "value": 20, + "deprecated": false, + "description": "" + }, + "FireFireFire": { + "value": 28, + "deprecated": false, + "description": "" + }, + "Five": { + "value": 33, + "deprecated": false, + "description": "" + }, + "Floor": { + "value": 34, + "deprecated": false, + "description": "" + }, + "Four": { + "value": 32, + "deprecated": false, + "description": "" + }, + "HaltWhoGoesThere": { + "value": 27, + "deprecated": false, + "description": "" + }, + "HighCarbonDioxide": { + "value": 44, + "deprecated": false, + "description": "" + }, + "IntruderAlert": { + "value": 19, + "deprecated": false, + "description": "" + }, + "LiftOff": { + "value": 36, + "deprecated": false, + "description": "" + }, + "MalfunctionDetected": { + "value": 26, + "deprecated": false, + "description": "" + }, + "Music1": { + "value": 7, + "deprecated": false, + "description": "" + }, + "Music2": { + "value": 8, + "deprecated": false, + "description": "" + }, + "Music3": { + "value": 9, + "deprecated": false, + "description": "" + }, + "None": { + "value": 0, + "deprecated": false, + "description": "" + }, + "One": { + "value": 29, + "deprecated": false, + "description": "" + }, + "PollutantsDetected": { + "value": 43, + "deprecated": false, + "description": "" + }, + "PowerLow": { + "value": 23, + "deprecated": false, + "description": "" + }, + "PressureHigh": { + "value": 39, + "deprecated": false, + "description": "" + }, + "PressureLow": { + "value": 40, + "deprecated": false, + "description": "" + }, + "Pressurising": { + "value": 21, + "deprecated": false, + "description": "" + }, + "RocketLaunching": { + "value": 35, + "deprecated": false, + "description": "" + }, + "StormIncoming": { + "value": 18, + "deprecated": false, + "description": "" + }, + "SystemFailure": { + "value": 24, + "deprecated": false, + "description": "" + }, + "TemperatureHigh": { + "value": 41, + "deprecated": false, + "description": "" + }, + "TemperatureLow": { + "value": 42, + "deprecated": false, + "description": "" + }, + "Three": { + "value": 31, + "deprecated": false, + "description": "" + }, + "TraderIncoming": { + "value": 37, + "deprecated": false, + "description": "" + }, + "TraderLanded": { + "value": 38, + "deprecated": false, + "description": "" + }, + "Two": { + "value": 30, + "deprecated": false, + "description": "" + }, + "Warning": { + "value": 16, + "deprecated": false, + "description": "" + }, + "Welcome": { + "value": 25, + "deprecated": false, + "description": "" + } + } + }, + "TransmitterMode": { + "enumName": "LogicTransmitterMode", + "values": { + "Active": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Passive": { + "value": 0, + "deprecated": false, + "description": "" + } + } + }, + "Vent": { + "enumName": "VentDirection", + "values": { + "Inward": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Outward": { + "value": 0, + "deprecated": false, + "description": "" + } + } + }, + "_unnamed": { + "enumName": "ConditionOperation", + "values": { + "Equals": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Greater": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Less": { + "value": 2, + "deprecated": false, + "description": "" + }, + "NotEquals": { + "value": 3, + "deprecated": false, + "description": "" + } + } + } + } + }, + "prefabsByHash": { + "-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", + "-1884103228": "SeedBag_SugarCane", + "-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", + "-1351081801": "StructureLargeHangerDoor", + "-1348105509": "ItemGoldOre", + "-1344601965": "ItemCannedMushroom", + "-1339716113": "AppliancePaintMixer", + "-1339479035": "AccessCardGray", + "-1337091041": "StructureChuteDigitalValveRight", + "-1335056202": "ItemSugarCane", + "-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", + "-1108244510": "ItemPlainCake", + "-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", + "-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", + "-261575861": "ItemChocolateCake", + "-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", + "234601764": "ItemChocolateBar", + "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", + "457286516": "ItemCocoaPowder", + "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", + "680051921": "ItemCocoaTree", + "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", + "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", + "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", + "860793245": "ItemChocolateCerealBar", + "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", + "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", + "1139887531": "SeedBag_Cocoa", + "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", + "2111910840": "ItemSugar", + "2130739600": "DynamicMKIILiquidCanisterEmpty", + "2131916219": "ItemSpaceOre", + "2133035682": "ItemKitStandardChute", + "2134172356": "StructureInsulatedPipeStraight", + "2134647745": "ItemLeadIngot", + "2145068424": "ItemGasCanisterNitrogen" + }, + "structures": [ + "CompositeRollCover", + "DeviceLfoVolume", + "DeviceStepUnit", + "Flag_ODA_10m", + "Flag_ODA_4m", + "Flag_ODA_6m", + "Flag_ODA_8m", + "H2Combustor", + "KitchenTableShort", + "KitchenTableSimpleShort", + "KitchenTableSimpleTall", + "KitchenTableTall", + "Landingpad_2x2CenterPiece01", + "Landingpad_BlankPiece", + "Landingpad_CenterPiece01", + "Landingpad_CrossPiece", + "Landingpad_DataConnectionPiece", + "Landingpad_DiagonalPiece01", + "Landingpad_GasConnectorInwardPiece", + "Landingpad_GasConnectorOutwardPiece", + "Landingpad_GasCylinderTankPiece", + "Landingpad_LiquidConnectorInwardPiece", + "Landingpad_LiquidConnectorOutwardPiece", + "Landingpad_StraightPiece01", + "Landingpad_TaxiPieceCorner", + "Landingpad_TaxiPieceHold", + "Landingpad_TaxiPieceStraight", + "Landingpad_ThreshholdPiece", + "LogicStepSequencer8", + "PassiveSpeaker", + "RailingElegant01", + "RailingElegant02", + "RailingIndustrial02", + "RespawnPoint", + "RespawnPointWallMounted", + "Rover_MkI_build_states", + "StopWatch", + "StructureAccessBridge", + "StructureActiveVent", + "StructureAdvancedComposter", + "StructureAdvancedFurnace", + "StructureAdvancedPackagingMachine", + "StructureAirConditioner", + "StructureAirlock", + "StructureAirlockGate", + "StructureAngledBench", + "StructureArcFurnace", + "StructureAreaPowerControl", + "StructureAreaPowerControlReversed", + "StructureAutoMinerSmall", + "StructureAutolathe", + "StructureAutomatedOven", + "StructureBackLiquidPressureRegulator", + "StructureBackPressureRegulator", + "StructureBasketHoop", + "StructureBattery", + "StructureBatteryCharger", + "StructureBatteryChargerSmall", + "StructureBatteryLarge", + "StructureBatteryMedium", + "StructureBatterySmall", + "StructureBeacon", + "StructureBench", + "StructureBench1", + "StructureBench2", + "StructureBench3", + "StructureBench4", + "StructureBlastDoor", + "StructureBlockBed", + "StructureBlocker", + "StructureCableAnalysizer", + "StructureCableCorner", + "StructureCableCorner3", + "StructureCableCorner3Burnt", + "StructureCableCorner3HBurnt", + "StructureCableCorner4", + "StructureCableCorner4Burnt", + "StructureCableCorner4HBurnt", + "StructureCableCornerBurnt", + "StructureCableCornerH", + "StructureCableCornerH3", + "StructureCableCornerH4", + "StructureCableCornerHBurnt", + "StructureCableFuse100k", + "StructureCableFuse1k", + "StructureCableFuse50k", + "StructureCableFuse5k", + "StructureCableJunction", + "StructureCableJunction4", + "StructureCableJunction4Burnt", + "StructureCableJunction4HBurnt", + "StructureCableJunction5", + "StructureCableJunction5Burnt", + "StructureCableJunction6", + "StructureCableJunction6Burnt", + "StructureCableJunction6HBurnt", + "StructureCableJunctionBurnt", + "StructureCableJunctionH", + "StructureCableJunctionH4", + "StructureCableJunctionH5", + "StructureCableJunctionH5Burnt", + "StructureCableJunctionH6", + "StructureCableJunctionHBurnt", + "StructureCableStraight", + "StructureCableStraightBurnt", + "StructureCableStraightH", + "StructureCableStraightHBurnt", + "StructureCamera", + "StructureCapsuleTankGas", + "StructureCapsuleTankLiquid", + "StructureCargoStorageMedium", + "StructureCargoStorageSmall", + "StructureCentrifuge", + "StructureChair", + "StructureChairBacklessDouble", + "StructureChairBacklessSingle", + "StructureChairBoothCornerLeft", + "StructureChairBoothMiddle", + "StructureChairRectangleDouble", + "StructureChairRectangleSingle", + "StructureChairThickDouble", + "StructureChairThickSingle", + "StructureChuteBin", + "StructureChuteCorner", + "StructureChuteDigitalFlipFlopSplitterLeft", + "StructureChuteDigitalFlipFlopSplitterRight", + "StructureChuteDigitalValveLeft", + "StructureChuteDigitalValveRight", + "StructureChuteFlipFlopSplitter", + "StructureChuteInlet", + "StructureChuteJunction", + "StructureChuteOutlet", + "StructureChuteOverflow", + "StructureChuteStraight", + "StructureChuteUmbilicalFemale", + "StructureChuteUmbilicalFemaleSide", + "StructureChuteUmbilicalMale", + "StructureChuteValve", + "StructureChuteWindow", + "StructureCircuitHousing", + "StructureCombustionCentrifuge", + "StructureCompositeCladdingAngled", + "StructureCompositeCladdingAngledCorner", + "StructureCompositeCladdingAngledCornerInner", + "StructureCompositeCladdingAngledCornerInnerLong", + "StructureCompositeCladdingAngledCornerInnerLongL", + "StructureCompositeCladdingAngledCornerInnerLongR", + "StructureCompositeCladdingAngledCornerLong", + "StructureCompositeCladdingAngledCornerLongR", + "StructureCompositeCladdingAngledLong", + "StructureCompositeCladdingCylindrical", + "StructureCompositeCladdingCylindricalPanel", + "StructureCompositeCladdingPanel", + "StructureCompositeCladdingRounded", + "StructureCompositeCladdingRoundedCorner", + "StructureCompositeCladdingRoundedCornerInner", + "StructureCompositeCladdingSpherical", + "StructureCompositeCladdingSphericalCap", + "StructureCompositeCladdingSphericalCorner", + "StructureCompositeDoor", + "StructureCompositeFloorGrating", + "StructureCompositeFloorGrating2", + "StructureCompositeFloorGrating3", + "StructureCompositeFloorGrating4", + "StructureCompositeFloorGratingOpen", + "StructureCompositeFloorGratingOpenRotated", + "StructureCompositeWall", + "StructureCompositeWall02", + "StructureCompositeWall03", + "StructureCompositeWall04", + "StructureCompositeWindow", + "StructureCompositeWindowIron", + "StructureComputer", + "StructureCondensationChamber", + "StructureCondensationValve", + "StructureConsole", + "StructureConsoleDual", + "StructureConsoleLED1x2", + "StructureConsoleLED1x3", + "StructureConsoleLED5", + "StructureConsoleMonitor", + "StructureControlChair", + "StructureCornerLocker", + "StructureCrateMount", + "StructureCryoTube", + "StructureCryoTubeHorizontal", + "StructureCryoTubeVertical", + "StructureDaylightSensor", + "StructureDeepMiner", + "StructureDigitalValve", + "StructureDiode", + "StructureDiodeSlide", + "StructureDockPortSide", + "StructureDrinkingFountain", + "StructureElectrolyzer", + "StructureElectronicsPrinter", + "StructureElevatorLevelFront", + "StructureElevatorLevelIndustrial", + "StructureElevatorShaft", + "StructureElevatorShaftIndustrial", + "StructureEmergencyButton", + "StructureEngineMountTypeA1", + "StructureEvaporationChamber", + "StructureExpansionValve", + "StructureFairingTypeA1", + "StructureFairingTypeA2", + "StructureFairingTypeA3", + "StructureFiltration", + "StructureFlagSmall", + "StructureFlashingLight", + "StructureFlatBench", + "StructureFloorDrain", + "StructureFrame", + "StructureFrameCorner", + "StructureFrameCornerCut", + "StructureFrameIron", + "StructureFrameSide", + "StructureFridgeBig", + "StructureFridgeSmall", + "StructureFurnace", + "StructureFuselageTypeA1", + "StructureFuselageTypeA2", + "StructureFuselageTypeA4", + "StructureFuselageTypeC5", + "StructureGasGenerator", + "StructureGasMixer", + "StructureGasSensor", + "StructureGasTankStorage", + "StructureGasUmbilicalFemale", + "StructureGasUmbilicalFemaleSide", + "StructureGasUmbilicalMale", + "StructureGlassDoor", + "StructureGovernedGasEngine", + "StructureGroundBasedTelescope", + "StructureGrowLight", + "StructureHarvie", + "StructureHeatExchangeLiquidtoGas", + "StructureHeatExchangerGastoGas", + "StructureHeatExchangerLiquidtoLiquid", + "StructureHorizontalAutoMiner", + "StructureHydraulicPipeBender", + "StructureHydroponicsStation", + "StructureHydroponicsTray", + "StructureHydroponicsTrayData", + "StructureIceCrusher", + "StructureIgniter", + "StructureInLineTankGas1x1", + "StructureInLineTankGas1x2", + "StructureInLineTankLiquid1x1", + "StructureInLineTankLiquid1x2", + "StructureInsulatedInLineTankGas1x1", + "StructureInsulatedInLineTankGas1x2", + "StructureInsulatedInLineTankLiquid1x1", + "StructureInsulatedInLineTankLiquid1x2", + "StructureInsulatedPipeCorner", + "StructureInsulatedPipeCrossJunction", + "StructureInsulatedPipeCrossJunction3", + "StructureInsulatedPipeCrossJunction4", + "StructureInsulatedPipeCrossJunction5", + "StructureInsulatedPipeCrossJunction6", + "StructureInsulatedPipeLiquidCorner", + "StructureInsulatedPipeLiquidCrossJunction", + "StructureInsulatedPipeLiquidCrossJunction4", + "StructureInsulatedPipeLiquidCrossJunction5", + "StructureInsulatedPipeLiquidCrossJunction6", + "StructureInsulatedPipeLiquidStraight", + "StructureInsulatedPipeLiquidTJunction", + "StructureInsulatedPipeStraight", + "StructureInsulatedPipeTJunction", + "StructureInsulatedTankConnector", + "StructureInsulatedTankConnectorLiquid", + "StructureInteriorDoorGlass", + "StructureInteriorDoorPadded", + "StructureInteriorDoorPaddedThin", + "StructureInteriorDoorTriangle", + "StructureKlaxon", + "StructureLadder", + "StructureLadderEnd", + "StructureLargeDirectHeatExchangeGastoGas", + "StructureLargeDirectHeatExchangeGastoLiquid", + "StructureLargeDirectHeatExchangeLiquidtoLiquid", + "StructureLargeExtendableRadiator", + "StructureLargeHangerDoor", + "StructureLargeSatelliteDish", + "StructureLaunchMount", + "StructureLightLong", + "StructureLightLongAngled", + "StructureLightLongWide", + "StructureLightRound", + "StructureLightRoundAngled", + "StructureLightRoundSmall", + "StructureLiquidDrain", + "StructureLiquidPipeAnalyzer", + "StructureLiquidPipeHeater", + "StructureLiquidPipeOneWayValve", + "StructureLiquidPipeRadiator", + "StructureLiquidPressureRegulator", + "StructureLiquidTankBig", + "StructureLiquidTankBigInsulated", + "StructureLiquidTankSmall", + "StructureLiquidTankSmallInsulated", + "StructureLiquidTankStorage", + "StructureLiquidTurboVolumePump", + "StructureLiquidUmbilicalFemale", + "StructureLiquidUmbilicalFemaleSide", + "StructureLiquidUmbilicalMale", + "StructureLiquidValve", + "StructureLiquidVolumePump", + "StructureLockerSmall", + "StructureLogicBatchReader", + "StructureLogicBatchSlotReader", + "StructureLogicBatchWriter", + "StructureLogicButton", + "StructureLogicCompare", + "StructureLogicDial", + "StructureLogicGate", + "StructureLogicHashGen", + "StructureLogicMath", + "StructureLogicMathUnary", + "StructureLogicMemory", + "StructureLogicMinMax", + "StructureLogicMirror", + "StructureLogicReader", + "StructureLogicReagentReader", + "StructureLogicRocketDownlink", + "StructureLogicRocketUplink", + "StructureLogicSelect", + "StructureLogicSlotReader", + "StructureLogicSorter", + "StructureLogicSwitch", + "StructureLogicSwitch2", + "StructureLogicTransmitter", + "StructureLogicWriter", + "StructureLogicWriterSwitch", + "StructureManualHatch", + "StructureMediumConvectionRadiator", + "StructureMediumConvectionRadiatorLiquid", + "StructureMediumHangerDoor", + "StructureMediumRadiator", + "StructureMediumRadiatorLiquid", + "StructureMediumRocketGasFuelTank", + "StructureMediumRocketLiquidFuelTank", + "StructureMotionSensor", + "StructureNitrolyzer", + "StructureOccupancySensor", + "StructureOverheadShortCornerLocker", + "StructureOverheadShortLocker", + "StructurePassiveLargeRadiatorGas", + "StructurePassiveLargeRadiatorLiquid", + "StructurePassiveLiquidDrain", + "StructurePassiveVent", + "StructurePassiveVentInsulated", + "StructurePassthroughHeatExchangerGasToGas", + "StructurePassthroughHeatExchangerGasToLiquid", + "StructurePassthroughHeatExchangerLiquidToLiquid", + "StructurePictureFrameThickLandscapeLarge", + "StructurePictureFrameThickLandscapeSmall", + "StructurePictureFrameThickMountLandscapeLarge", + "StructurePictureFrameThickMountLandscapeSmall", + "StructurePictureFrameThickMountPortraitLarge", + "StructurePictureFrameThickMountPortraitSmall", + "StructurePictureFrameThickPortraitLarge", + "StructurePictureFrameThickPortraitSmall", + "StructurePictureFrameThinLandscapeLarge", + "StructurePictureFrameThinLandscapeSmall", + "StructurePictureFrameThinMountLandscapeLarge", + "StructurePictureFrameThinMountLandscapeSmall", + "StructurePictureFrameThinMountPortraitLarge", + "StructurePictureFrameThinMountPortraitSmall", + "StructurePictureFrameThinPortraitLarge", + "StructurePictureFrameThinPortraitSmall", + "StructurePipeAnalysizer", + "StructurePipeCorner", + "StructurePipeCowl", + "StructurePipeCrossJunction", + "StructurePipeCrossJunction3", + "StructurePipeCrossJunction4", + "StructurePipeCrossJunction5", + "StructurePipeCrossJunction6", + "StructurePipeHeater", + "StructurePipeIgniter", + "StructurePipeInsulatedLiquidCrossJunction", + "StructurePipeLabel", + "StructurePipeLiquidCorner", + "StructurePipeLiquidCrossJunction", + "StructurePipeLiquidCrossJunction3", + "StructurePipeLiquidCrossJunction4", + "StructurePipeLiquidCrossJunction5", + "StructurePipeLiquidCrossJunction6", + "StructurePipeLiquidStraight", + "StructurePipeLiquidTJunction", + "StructurePipeMeter", + "StructurePipeOneWayValve", + "StructurePipeOrgan", + "StructurePipeRadiator", + "StructurePipeRadiatorFlat", + "StructurePipeRadiatorFlatLiquid", + "StructurePipeStraight", + "StructurePipeTJunction", + "StructurePlanter", + "StructurePlatformLadderOpen", + "StructurePlinth", + "StructurePortablesConnector", + "StructurePowerConnector", + "StructurePowerTransmitter", + "StructurePowerTransmitterOmni", + "StructurePowerTransmitterReceiver", + "StructurePowerUmbilicalFemale", + "StructurePowerUmbilicalFemaleSide", + "StructurePowerUmbilicalMale", + "StructurePoweredVent", + "StructurePoweredVentLarge", + "StructurePressurantValve", + "StructurePressureFedGasEngine", + "StructurePressureFedLiquidEngine", + "StructurePressurePlateLarge", + "StructurePressurePlateMedium", + "StructurePressurePlateSmall", + "StructurePressureRegulator", + "StructureProximitySensor", + "StructurePumpedLiquidEngine", + "StructurePurgeValve", + "StructureRailing", + "StructureRecycler", + "StructureRefrigeratedVendingMachine", + "StructureReinforcedCompositeWindow", + "StructureReinforcedCompositeWindowSteel", + "StructureReinforcedWallPaddedWindow", + "StructureReinforcedWallPaddedWindowThin", + "StructureRocketAvionics", + "StructureRocketCelestialTracker", + "StructureRocketCircuitHousing", + "StructureRocketEngineTiny", + "StructureRocketManufactory", + "StructureRocketMiner", + "StructureRocketScanner", + "StructureRocketTower", + "StructureRocketTransformerSmall", + "StructureRover", + "StructureSDBHopper", + "StructureSDBHopperAdvanced", + "StructureSDBSilo", + "StructureSatelliteDish", + "StructureSecurityPrinter", + "StructureShelf", + "StructureShelfMedium", + "StructureShortCornerLocker", + "StructureShortLocker", + "StructureShower", + "StructureShowerPowered", + "StructureSign1x1", + "StructureSign2x1", + "StructureSingleBed", + "StructureSleeper", + "StructureSleeperLeft", + "StructureSleeperRight", + "StructureSleeperVertical", + "StructureSleeperVerticalDroid", + "StructureSmallDirectHeatExchangeGastoGas", + "StructureSmallDirectHeatExchangeLiquidtoGas", + "StructureSmallDirectHeatExchangeLiquidtoLiquid", + "StructureSmallSatelliteDish", + "StructureSmallTableBacklessDouble", + "StructureSmallTableBacklessSingle", + "StructureSmallTableDinnerSingle", + "StructureSmallTableRectangleDouble", + "StructureSmallTableRectangleSingle", + "StructureSmallTableThickDouble", + "StructureSmallTableThickSingle", + "StructureSolarPanel", + "StructureSolarPanel45", + "StructureSolarPanel45Reinforced", + "StructureSolarPanelDual", + "StructureSolarPanelDualReinforced", + "StructureSolarPanelFlat", + "StructureSolarPanelFlatReinforced", + "StructureSolarPanelReinforced", + "StructureSolidFuelGenerator", + "StructureSorter", + "StructureStacker", + "StructureStackerReverse", + "StructureStairs4x2", + "StructureStairs4x2RailL", + "StructureStairs4x2RailR", + "StructureStairs4x2Rails", + "StructureStairwellBackLeft", + "StructureStairwellBackPassthrough", + "StructureStairwellBackRight", + "StructureStairwellFrontLeft", + "StructureStairwellFrontPassthrough", + "StructureStairwellFrontRight", + "StructureStairwellNoDoors", + "StructureStirlingEngine", + "StructureStorageLocker", + "StructureSuitStorage", + "StructureTankBig", + "StructureTankBigInsulated", + "StructureTankConnector", + "StructureTankConnectorLiquid", + "StructureTankSmall", + "StructureTankSmallAir", + "StructureTankSmallFuel", + "StructureTankSmallInsulated", + "StructureToolManufactory", + "StructureTorpedoRack", + "StructureTraderWaypoint", + "StructureTransformer", + "StructureTransformerMedium", + "StructureTransformerMediumReversed", + "StructureTransformerSmall", + "StructureTransformerSmallReversed", + "StructureTurbineGenerator", + "StructureTurboVolumePump", + "StructureUnloader", + "StructureUprightWindTurbine", + "StructureValve", + "StructureVendingMachine", + "StructureVolumePump", + "StructureWallArch", + "StructureWallArchArrow", + "StructureWallArchCornerRound", + "StructureWallArchCornerSquare", + "StructureWallArchCornerTriangle", + "StructureWallArchPlating", + "StructureWallArchTwoTone", + "StructureWallCooler", + "StructureWallFlat", + "StructureWallFlatCornerRound", + "StructureWallFlatCornerSquare", + "StructureWallFlatCornerTriangle", + "StructureWallFlatCornerTriangleFlat", + "StructureWallGeometryCorner", + "StructureWallGeometryStreight", + "StructureWallGeometryT", + "StructureWallGeometryTMirrored", + "StructureWallHeater", + "StructureWallIron", + "StructureWallIron02", + "StructureWallIron03", + "StructureWallIron04", + "StructureWallLargePanel", + "StructureWallLargePanelArrow", + "StructureWallLight", + "StructureWallLightBattery", + "StructureWallPaddedArch", + "StructureWallPaddedArchCorner", + "StructureWallPaddedArchLightFittingTop", + "StructureWallPaddedArchLightsFittings", + "StructureWallPaddedCorner", + "StructureWallPaddedCornerThin", + "StructureWallPaddedNoBorder", + "StructureWallPaddedNoBorderCorner", + "StructureWallPaddedThinNoBorder", + "StructureWallPaddedThinNoBorderCorner", + "StructureWallPaddedWindow", + "StructureWallPaddedWindowThin", + "StructureWallPadding", + "StructureWallPaddingArchVent", + "StructureWallPaddingLightFitting", + "StructureWallPaddingThin", + "StructureWallPlating", + "StructureWallSmallPanelsAndHatch", + "StructureWallSmallPanelsArrow", + "StructureWallSmallPanelsMonoChrome", + "StructureWallSmallPanelsOpen", + "StructureWallSmallPanelsTwoTone", + "StructureWallVent", + "StructureWaterBottleFiller", + "StructureWaterBottleFillerBottom", + "StructureWaterBottleFillerPowered", + "StructureWaterBottleFillerPoweredBottom", + "StructureWaterDigitalValve", + "StructureWaterPipeMeter", + "StructureWaterPurifier", + "StructureWaterWallCooler", + "StructureWeatherStation", + "StructureWindTurbine", + "StructureWindowShutter" + ], + "devices": [ + "CompositeRollCover", + "DeviceLfoVolume", + "DeviceStepUnit", + "H2Combustor", + "Landingpad_DataConnectionPiece", + "Landingpad_GasConnectorInwardPiece", + "Landingpad_GasConnectorOutwardPiece", + "Landingpad_LiquidConnectorInwardPiece", + "Landingpad_LiquidConnectorOutwardPiece", + "Landingpad_ThreshholdPiece", + "LogicStepSequencer8", + "PassiveSpeaker", + "StopWatch", + "StructureAccessBridge", + "StructureActiveVent", + "StructureAdvancedComposter", + "StructureAdvancedFurnace", + "StructureAdvancedPackagingMachine", + "StructureAirConditioner", + "StructureAirlock", + "StructureAirlockGate", + "StructureAngledBench", + "StructureArcFurnace", + "StructureAreaPowerControl", + "StructureAreaPowerControlReversed", + "StructureAutoMinerSmall", + "StructureAutolathe", + "StructureAutomatedOven", + "StructureBackLiquidPressureRegulator", + "StructureBackPressureRegulator", + "StructureBasketHoop", + "StructureBattery", + "StructureBatteryCharger", + "StructureBatteryChargerSmall", + "StructureBatteryLarge", + "StructureBatteryMedium", + "StructureBatterySmall", + "StructureBeacon", + "StructureBench", + "StructureBench1", + "StructureBench2", + "StructureBench3", + "StructureBench4", + "StructureBlastDoor", + "StructureBlockBed", + "StructureCableAnalysizer", + "StructureCableFuse100k", + "StructureCableFuse1k", + "StructureCableFuse50k", + "StructureCableFuse5k", + "StructureCamera", + "StructureCapsuleTankGas", + "StructureCapsuleTankLiquid", + "StructureCargoStorageMedium", + "StructureCargoStorageSmall", + "StructureCentrifuge", + "StructureChair", + "StructureChairBacklessDouble", + "StructureChairBacklessSingle", + "StructureChairBoothCornerLeft", + "StructureChairBoothMiddle", + "StructureChairRectangleDouble", + "StructureChairRectangleSingle", + "StructureChairThickDouble", + "StructureChairThickSingle", + "StructureChuteBin", + "StructureChuteDigitalFlipFlopSplitterLeft", + "StructureChuteDigitalFlipFlopSplitterRight", + "StructureChuteDigitalValveLeft", + "StructureChuteDigitalValveRight", + "StructureChuteInlet", + "StructureChuteOutlet", + "StructureChuteUmbilicalFemale", + "StructureChuteUmbilicalFemaleSide", + "StructureChuteUmbilicalMale", + "StructureCircuitHousing", + "StructureCombustionCentrifuge", + "StructureCompositeDoor", + "StructureComputer", + "StructureCondensationChamber", + "StructureCondensationValve", + "StructureConsole", + "StructureConsoleDual", + "StructureConsoleLED1x2", + "StructureConsoleLED1x3", + "StructureConsoleLED5", + "StructureConsoleMonitor", + "StructureControlChair", + "StructureCornerLocker", + "StructureCryoTube", + "StructureCryoTubeHorizontal", + "StructureCryoTubeVertical", + "StructureDaylightSensor", + "StructureDeepMiner", + "StructureDigitalValve", + "StructureDiode", + "StructureDiodeSlide", + "StructureDockPortSide", + "StructureDrinkingFountain", + "StructureElectrolyzer", + "StructureElectronicsPrinter", + "StructureElevatorLevelFront", + "StructureElevatorLevelIndustrial", + "StructureElevatorShaft", + "StructureElevatorShaftIndustrial", + "StructureEmergencyButton", + "StructureEvaporationChamber", + "StructureExpansionValve", + "StructureFiltration", + "StructureFlashingLight", + "StructureFlatBench", + "StructureFridgeBig", + "StructureFridgeSmall", + "StructureFurnace", + "StructureGasGenerator", + "StructureGasMixer", + "StructureGasSensor", + "StructureGasTankStorage", + "StructureGasUmbilicalFemale", + "StructureGasUmbilicalFemaleSide", + "StructureGasUmbilicalMale", + "StructureGlassDoor", + "StructureGovernedGasEngine", + "StructureGroundBasedTelescope", + "StructureGrowLight", + "StructureHarvie", + "StructureHeatExchangeLiquidtoGas", + "StructureHeatExchangerGastoGas", + "StructureHeatExchangerLiquidtoLiquid", + "StructureHorizontalAutoMiner", + "StructureHydraulicPipeBender", + "StructureHydroponicsStation", + "StructureHydroponicsTrayData", + "StructureIceCrusher", + "StructureIgniter", + "StructureInteriorDoorGlass", + "StructureInteriorDoorPadded", + "StructureInteriorDoorPaddedThin", + "StructureInteriorDoorTriangle", + "StructureKlaxon", + "StructureLargeDirectHeatExchangeGastoGas", + "StructureLargeDirectHeatExchangeGastoLiquid", + "StructureLargeDirectHeatExchangeLiquidtoLiquid", + "StructureLargeExtendableRadiator", + "StructureLargeHangerDoor", + "StructureLargeSatelliteDish", + "StructureLightLong", + "StructureLightLongAngled", + "StructureLightLongWide", + "StructureLightRound", + "StructureLightRoundAngled", + "StructureLightRoundSmall", + "StructureLiquidDrain", + "StructureLiquidPipeAnalyzer", + "StructureLiquidPipeHeater", + "StructureLiquidPipeOneWayValve", + "StructureLiquidPipeRadiator", + "StructureLiquidPressureRegulator", + "StructureLiquidTankBig", + "StructureLiquidTankBigInsulated", + "StructureLiquidTankSmall", + "StructureLiquidTankSmallInsulated", + "StructureLiquidTankStorage", + "StructureLiquidTurboVolumePump", + "StructureLiquidUmbilicalFemale", + "StructureLiquidUmbilicalFemaleSide", + "StructureLiquidUmbilicalMale", + "StructureLiquidValve", + "StructureLiquidVolumePump", + "StructureLockerSmall", + "StructureLogicBatchReader", + "StructureLogicBatchSlotReader", + "StructureLogicBatchWriter", + "StructureLogicButton", + "StructureLogicCompare", + "StructureLogicDial", + "StructureLogicGate", + "StructureLogicHashGen", + "StructureLogicMath", + "StructureLogicMathUnary", + "StructureLogicMemory", + "StructureLogicMinMax", + "StructureLogicMirror", + "StructureLogicReader", + "StructureLogicReagentReader", + "StructureLogicRocketDownlink", + "StructureLogicRocketUplink", + "StructureLogicSelect", + "StructureLogicSlotReader", + "StructureLogicSorter", + "StructureLogicSwitch", + "StructureLogicSwitch2", + "StructureLogicTransmitter", + "StructureLogicWriter", + "StructureLogicWriterSwitch", + "StructureManualHatch", + "StructureMediumConvectionRadiator", + "StructureMediumConvectionRadiatorLiquid", + "StructureMediumHangerDoor", + "StructureMediumRadiator", + "StructureMediumRadiatorLiquid", + "StructureMediumRocketGasFuelTank", + "StructureMediumRocketLiquidFuelTank", + "StructureMotionSensor", + "StructureNitrolyzer", + "StructureOccupancySensor", + "StructureOverheadShortCornerLocker", + "StructureOverheadShortLocker", + "StructurePassiveLargeRadiatorGas", + "StructurePassiveLargeRadiatorLiquid", + "StructurePassiveLiquidDrain", + "StructurePassthroughHeatExchangerGasToGas", + "StructurePassthroughHeatExchangerGasToLiquid", + "StructurePassthroughHeatExchangerLiquidToLiquid", + "StructurePipeAnalysizer", + "StructurePipeHeater", + "StructurePipeIgniter", + "StructurePipeLabel", + "StructurePipeMeter", + "StructurePipeOneWayValve", + "StructurePipeRadiator", + "StructurePipeRadiatorFlat", + "StructurePipeRadiatorFlatLiquid", + "StructurePortablesConnector", + "StructurePowerConnector", + "StructurePowerTransmitter", + "StructurePowerTransmitterOmni", + "StructurePowerTransmitterReceiver", + "StructurePowerUmbilicalFemale", + "StructurePowerUmbilicalFemaleSide", + "StructurePowerUmbilicalMale", + "StructurePoweredVent", + "StructurePoweredVentLarge", + "StructurePressurantValve", + "StructurePressureFedGasEngine", + "StructurePressureFedLiquidEngine", + "StructurePressurePlateLarge", + "StructurePressurePlateMedium", + "StructurePressurePlateSmall", + "StructurePressureRegulator", + "StructureProximitySensor", + "StructurePumpedLiquidEngine", + "StructurePurgeValve", + "StructureRecycler", + "StructureRefrigeratedVendingMachine", + "StructureRocketAvionics", + "StructureRocketCelestialTracker", + "StructureRocketCircuitHousing", + "StructureRocketEngineTiny", + "StructureRocketManufactory", + "StructureRocketMiner", + "StructureRocketScanner", + "StructureRocketTransformerSmall", + "StructureSDBHopper", + "StructureSDBHopperAdvanced", + "StructureSDBSilo", + "StructureSatelliteDish", + "StructureSecurityPrinter", + "StructureShelfMedium", + "StructureShortCornerLocker", + "StructureShortLocker", + "StructureShower", + "StructureShowerPowered", + "StructureSign1x1", + "StructureSign2x1", + "StructureSingleBed", + "StructureSleeper", + "StructureSleeperLeft", + "StructureSleeperRight", + "StructureSleeperVertical", + "StructureSleeperVerticalDroid", + "StructureSmallDirectHeatExchangeGastoGas", + "StructureSmallDirectHeatExchangeLiquidtoGas", + "StructureSmallDirectHeatExchangeLiquidtoLiquid", + "StructureSmallSatelliteDish", + "StructureSolarPanel", + "StructureSolarPanel45", + "StructureSolarPanel45Reinforced", + "StructureSolarPanelDual", + "StructureSolarPanelDualReinforced", + "StructureSolarPanelFlat", + "StructureSolarPanelFlatReinforced", + "StructureSolarPanelReinforced", + "StructureSolidFuelGenerator", + "StructureSorter", + "StructureStacker", + "StructureStackerReverse", + "StructureStirlingEngine", + "StructureStorageLocker", + "StructureSuitStorage", + "StructureTankBig", + "StructureTankBigInsulated", + "StructureTankSmall", + "StructureTankSmallAir", + "StructureTankSmallFuel", + "StructureTankSmallInsulated", + "StructureToolManufactory", + "StructureTraderWaypoint", + "StructureTransformer", + "StructureTransformerMedium", + "StructureTransformerMediumReversed", + "StructureTransformerSmall", + "StructureTransformerSmallReversed", + "StructureTurbineGenerator", + "StructureTurboVolumePump", + "StructureUnloader", + "StructureUprightWindTurbine", + "StructureValve", + "StructureVendingMachine", + "StructureVolumePump", + "StructureWallCooler", + "StructureWallHeater", + "StructureWallLight", + "StructureWallLightBattery", + "StructureWaterBottleFiller", + "StructureWaterBottleFillerBottom", + "StructureWaterBottleFillerPowered", + "StructureWaterBottleFillerPoweredBottom", + "StructureWaterDigitalValve", + "StructureWaterPipeMeter", + "StructureWaterPurifier", + "StructureWaterWallCooler", + "StructureWeatherStation", + "StructureWindTurbine", + "StructureWindowShutter" + ], + "items": [ + "AccessCardBlack", + "AccessCardBlue", + "AccessCardBrown", + "AccessCardGray", + "AccessCardGreen", + "AccessCardKhaki", + "AccessCardOrange", + "AccessCardPink", + "AccessCardPurple", + "AccessCardRed", + "AccessCardWhite", + "AccessCardYellow", + "ApplianceChemistryStation", + "ApplianceDeskLampLeft", + "ApplianceDeskLampRight", + "ApplianceMicrowave", + "AppliancePackagingMachine", + "AppliancePaintMixer", + "AppliancePlantGeneticAnalyzer", + "AppliancePlantGeneticSplicer", + "AppliancePlantGeneticStabilizer", + "ApplianceReagentProcessor", + "ApplianceSeedTray", + "ApplianceTabletDock", + "AutolathePrinterMod", + "Battery_Wireless_cell", + "Battery_Wireless_cell_Big", + "CardboardBox", + "CartridgeAccessController", + "CartridgeAtmosAnalyser", + "CartridgeConfiguration", + "CartridgeElectronicReader", + "CartridgeGPS", + "CartridgeGuide", + "CartridgeMedicalAnalyser", + "CartridgeNetworkAnalyser", + "CartridgeOreScanner", + "CartridgeOreScannerColor", + "CartridgePlantAnalyser", + "CartridgeTracker", + "CircuitboardAdvAirlockControl", + "CircuitboardAirControl", + "CircuitboardAirlockControl", + "CircuitboardCameraDisplay", + "CircuitboardDoorControl", + "CircuitboardGasDisplay", + "CircuitboardGraphDisplay", + "CircuitboardHashDisplay", + "CircuitboardModeControl", + "CircuitboardPowerControl", + "CircuitboardShipDisplay", + "CircuitboardSolarControl", + "CrateMkII", + "DecayedFood", + "DynamicAirConditioner", + "DynamicCrate", + "DynamicGPR", + "DynamicGasCanisterAir", + "DynamicGasCanisterCarbonDioxide", + "DynamicGasCanisterEmpty", + "DynamicGasCanisterFuel", + "DynamicGasCanisterNitrogen", + "DynamicGasCanisterNitrousOxide", + "DynamicGasCanisterOxygen", + "DynamicGasCanisterPollutants", + "DynamicGasCanisterRocketFuel", + "DynamicGasCanisterVolatiles", + "DynamicGasCanisterWater", + "DynamicGasTankAdvanced", + "DynamicGasTankAdvancedOxygen", + "DynamicGenerator", + "DynamicHydroponics", + "DynamicLight", + "DynamicLiquidCanisterEmpty", + "DynamicMKIILiquidCanisterEmpty", + "DynamicMKIILiquidCanisterWater", + "DynamicScrubber", + "DynamicSkeleton", + "ElectronicPrinterMod", + "ElevatorCarrage", + "EntityChick", + "EntityChickenBrown", + "EntityChickenWhite", + "EntityRoosterBlack", + "EntityRoosterBrown", + "Fertilizer", + "FireArmSMG", + "FlareGun", + "Handgun", + "HandgunMagazine", + "HumanSkull", + "ImGuiCircuitboardAirlockControl", + "ItemActiveVent", + "ItemAdhesiveInsulation", + "ItemAdvancedTablet", + "ItemAlienMushroom", + "ItemAmmoBox", + "ItemAngleGrinder", + "ItemArcWelder", + "ItemAreaPowerControl", + "ItemAstroloyIngot", + "ItemAstroloySheets", + "ItemAuthoringTool", + "ItemAuthoringToolRocketNetwork", + "ItemBasketBall", + "ItemBatteryCell", + "ItemBatteryCellLarge", + "ItemBatteryCellNuclear", + "ItemBatteryCharger", + "ItemBatteryChargerSmall", + "ItemBeacon", + "ItemBiomass", + "ItemBreadLoaf", + "ItemCableAnalyser", + "ItemCableCoil", + "ItemCableCoilHeavy", + "ItemCableFuse", + "ItemCannedCondensedMilk", + "ItemCannedEdamame", + "ItemCannedMushroom", + "ItemCannedPowderedEggs", + "ItemCannedRicePudding", + "ItemCerealBar", + "ItemCharcoal", + "ItemChemLightBlue", + "ItemChemLightGreen", + "ItemChemLightRed", + "ItemChemLightWhite", + "ItemChemLightYellow", + "ItemChocolateBar", + "ItemChocolateCake", + "ItemChocolateCerealBar", + "ItemCoalOre", + "ItemCobaltOre", + "ItemCocoaPowder", + "ItemCocoaTree", + "ItemCoffeeMug", + "ItemConstantanIngot", + "ItemCookedCondensedMilk", + "ItemCookedCorn", + "ItemCookedMushroom", + "ItemCookedPowderedEggs", + "ItemCookedPumpkin", + "ItemCookedRice", + "ItemCookedSoybean", + "ItemCookedTomato", + "ItemCopperIngot", + "ItemCopperOre", + "ItemCorn", + "ItemCornSoup", + "ItemCreditCard", + "ItemCropHay", + "ItemCrowbar", + "ItemDataDisk", + "ItemDirtCanister", + "ItemDirtyOre", + "ItemDisposableBatteryCharger", + "ItemDrill", + "ItemDuctTape", + "ItemDynamicAirCon", + "ItemDynamicScrubber", + "ItemEggCarton", + "ItemElectronicParts", + "ItemElectrumIngot", + "ItemEmergencyAngleGrinder", + "ItemEmergencyArcWelder", + "ItemEmergencyCrowbar", + "ItemEmergencyDrill", + "ItemEmergencyEvaSuit", + "ItemEmergencyPickaxe", + "ItemEmergencyScrewdriver", + "ItemEmergencySpaceHelmet", + "ItemEmergencyToolBelt", + "ItemEmergencyWireCutters", + "ItemEmergencyWrench", + "ItemEmptyCan", + "ItemEvaSuit", + "ItemExplosive", + "ItemFern", + "ItemFertilizedEgg", + "ItemFilterFern", + "ItemFlagSmall", + "ItemFlashingLight", + "ItemFlashlight", + "ItemFlour", + "ItemFlowerBlue", + "ItemFlowerGreen", + "ItemFlowerOrange", + "ItemFlowerRed", + "ItemFlowerYellow", + "ItemFrenchFries", + "ItemFries", + "ItemGasCanisterCarbonDioxide", + "ItemGasCanisterEmpty", + "ItemGasCanisterFuel", + "ItemGasCanisterNitrogen", + "ItemGasCanisterNitrousOxide", + "ItemGasCanisterOxygen", + "ItemGasCanisterPollutants", + "ItemGasCanisterSmart", + "ItemGasCanisterVolatiles", + "ItemGasCanisterWater", + "ItemGasFilterCarbonDioxide", + "ItemGasFilterCarbonDioxideInfinite", + "ItemGasFilterCarbonDioxideL", + "ItemGasFilterCarbonDioxideM", + "ItemGasFilterNitrogen", + "ItemGasFilterNitrogenInfinite", + "ItemGasFilterNitrogenL", + "ItemGasFilterNitrogenM", + "ItemGasFilterNitrousOxide", + "ItemGasFilterNitrousOxideInfinite", + "ItemGasFilterNitrousOxideL", + "ItemGasFilterNitrousOxideM", + "ItemGasFilterOxygen", + "ItemGasFilterOxygenInfinite", + "ItemGasFilterOxygenL", + "ItemGasFilterOxygenM", + "ItemGasFilterPollutants", + "ItemGasFilterPollutantsInfinite", + "ItemGasFilterPollutantsL", + "ItemGasFilterPollutantsM", + "ItemGasFilterVolatiles", + "ItemGasFilterVolatilesInfinite", + "ItemGasFilterVolatilesL", + "ItemGasFilterVolatilesM", + "ItemGasFilterWater", + "ItemGasFilterWaterInfinite", + "ItemGasFilterWaterL", + "ItemGasFilterWaterM", + "ItemGasSensor", + "ItemGasTankStorage", + "ItemGlassSheets", + "ItemGlasses", + "ItemGoldIngot", + "ItemGoldOre", + "ItemGrenade", + "ItemHEMDroidRepairKit", + "ItemHardBackpack", + "ItemHardJetpack", + "ItemHardMiningBackPack", + "ItemHardSuit", + "ItemHardsuitHelmet", + "ItemHastelloyIngot", + "ItemHat", + "ItemHighVolumeGasCanisterEmpty", + "ItemHorticultureBelt", + "ItemHydroponicTray", + "ItemIce", + "ItemIgniter", + "ItemInconelIngot", + "ItemInsulation", + "ItemIntegratedCircuit10", + "ItemInvarIngot", + "ItemIronFrames", + "ItemIronIngot", + "ItemIronOre", + "ItemIronSheets", + "ItemJetpackBasic", + "ItemKitAIMeE", + "ItemKitAccessBridge", + "ItemKitAdvancedComposter", + "ItemKitAdvancedFurnace", + "ItemKitAdvancedPackagingMachine", + "ItemKitAirlock", + "ItemKitAirlockGate", + "ItemKitArcFurnace", + "ItemKitAtmospherics", + "ItemKitAutoMinerSmall", + "ItemKitAutolathe", + "ItemKitAutomatedOven", + "ItemKitBasket", + "ItemKitBattery", + "ItemKitBatteryLarge", + "ItemKitBeacon", + "ItemKitBeds", + "ItemKitBlastDoor", + "ItemKitCentrifuge", + "ItemKitChairs", + "ItemKitChute", + "ItemKitChuteUmbilical", + "ItemKitCompositeCladding", + "ItemKitCompositeFloorGrating", + "ItemKitComputer", + "ItemKitConsole", + "ItemKitCrate", + "ItemKitCrateMkII", + "ItemKitCrateMount", + "ItemKitCryoTube", + "ItemKitDeepMiner", + "ItemKitDockingPort", + "ItemKitDoor", + "ItemKitDrinkingFountain", + "ItemKitDynamicCanister", + "ItemKitDynamicGasTankAdvanced", + "ItemKitDynamicGenerator", + "ItemKitDynamicHydroponics", + "ItemKitDynamicLiquidCanister", + "ItemKitDynamicMKIILiquidCanister", + "ItemKitElectricUmbilical", + "ItemKitElectronicsPrinter", + "ItemKitElevator", + "ItemKitEngineLarge", + "ItemKitEngineMedium", + "ItemKitEngineSmall", + "ItemKitEvaporationChamber", + "ItemKitFlagODA", + "ItemKitFridgeBig", + "ItemKitFridgeSmall", + "ItemKitFurnace", + "ItemKitFurniture", + "ItemKitFuselage", + "ItemKitGasGenerator", + "ItemKitGasUmbilical", + "ItemKitGovernedGasRocketEngine", + "ItemKitGroundTelescope", + "ItemKitGrowLight", + "ItemKitHarvie", + "ItemKitHeatExchanger", + "ItemKitHorizontalAutoMiner", + "ItemKitHydraulicPipeBender", + "ItemKitHydroponicAutomated", + "ItemKitHydroponicStation", + "ItemKitIceCrusher", + "ItemKitInsulatedLiquidPipe", + "ItemKitInsulatedPipe", + "ItemKitInsulatedPipeUtility", + "ItemKitInsulatedPipeUtilityLiquid", + "ItemKitInteriorDoors", + "ItemKitLadder", + "ItemKitLandingPadAtmos", + "ItemKitLandingPadBasic", + "ItemKitLandingPadWaypoint", + "ItemKitLargeDirectHeatExchanger", + "ItemKitLargeExtendableRadiator", + "ItemKitLargeSatelliteDish", + "ItemKitLaunchMount", + "ItemKitLaunchTower", + "ItemKitLiquidRegulator", + "ItemKitLiquidTank", + "ItemKitLiquidTankInsulated", + "ItemKitLiquidTurboVolumePump", + "ItemKitLiquidUmbilical", + "ItemKitLocker", + "ItemKitLogicCircuit", + "ItemKitLogicInputOutput", + "ItemKitLogicMemory", + "ItemKitLogicProcessor", + "ItemKitLogicSwitch", + "ItemKitLogicTransmitter", + "ItemKitMotherShipCore", + "ItemKitMusicMachines", + "ItemKitPassiveLargeRadiatorGas", + "ItemKitPassiveLargeRadiatorLiquid", + "ItemKitPassthroughHeatExchanger", + "ItemKitPictureFrame", + "ItemKitPipe", + "ItemKitPipeLiquid", + "ItemKitPipeOrgan", + "ItemKitPipeRadiator", + "ItemKitPipeRadiatorLiquid", + "ItemKitPipeUtility", + "ItemKitPipeUtilityLiquid", + "ItemKitPlanter", + "ItemKitPortablesConnector", + "ItemKitPowerTransmitter", + "ItemKitPowerTransmitterOmni", + "ItemKitPoweredVent", + "ItemKitPressureFedGasEngine", + "ItemKitPressureFedLiquidEngine", + "ItemKitPressurePlate", + "ItemKitPumpedLiquidEngine", + "ItemKitRailing", + "ItemKitRecycler", + "ItemKitRegulator", + "ItemKitReinforcedWindows", + "ItemKitResearchMachine", + "ItemKitRespawnPointWallMounted", + "ItemKitRocketAvionics", + "ItemKitRocketBattery", + "ItemKitRocketCargoStorage", + "ItemKitRocketCelestialTracker", + "ItemKitRocketCircuitHousing", + "ItemKitRocketDatalink", + "ItemKitRocketGasFuelTank", + "ItemKitRocketLiquidFuelTank", + "ItemKitRocketManufactory", + "ItemKitRocketMiner", + "ItemKitRocketScanner", + "ItemKitRocketTransformerSmall", + "ItemKitRoverFrame", + "ItemKitRoverMKI", + "ItemKitSDBHopper", + "ItemKitSatelliteDish", + "ItemKitSecurityPrinter", + "ItemKitSensor", + "ItemKitShower", + "ItemKitSign", + "ItemKitSleeper", + "ItemKitSmallDirectHeatExchanger", + "ItemKitSmallSatelliteDish", + "ItemKitSolarPanel", + "ItemKitSolarPanelBasic", + "ItemKitSolarPanelBasicReinforced", + "ItemKitSolarPanelReinforced", + "ItemKitSolidGenerator", + "ItemKitSorter", + "ItemKitSpeaker", + "ItemKitStacker", + "ItemKitStairs", + "ItemKitStairwell", + "ItemKitStandardChute", + "ItemKitStirlingEngine", + "ItemKitSuitStorage", + "ItemKitTables", + "ItemKitTank", + "ItemKitTankInsulated", + "ItemKitToolManufactory", + "ItemKitTransformer", + "ItemKitTransformerSmall", + "ItemKitTurbineGenerator", + "ItemKitTurboVolumePump", + "ItemKitUprightWindTurbine", + "ItemKitVendingMachine", + "ItemKitVendingMachineRefrigerated", + "ItemKitWall", + "ItemKitWallArch", + "ItemKitWallFlat", + "ItemKitWallGeometry", + "ItemKitWallIron", + "ItemKitWallPadded", + "ItemKitWaterBottleFiller", + "ItemKitWaterPurifier", + "ItemKitWeatherStation", + "ItemKitWindTurbine", + "ItemKitWindowShutter", + "ItemLabeller", + "ItemLaptop", + "ItemLeadIngot", + "ItemLeadOre", + "ItemLightSword", + "ItemLiquidCanisterEmpty", + "ItemLiquidCanisterSmart", + "ItemLiquidDrain", + "ItemLiquidPipeAnalyzer", + "ItemLiquidPipeHeater", + "ItemLiquidPipeValve", + "ItemLiquidPipeVolumePump", + "ItemLiquidTankStorage", + "ItemMKIIAngleGrinder", + "ItemMKIIArcWelder", + "ItemMKIICrowbar", + "ItemMKIIDrill", + "ItemMKIIDuctTape", + "ItemMKIIMiningDrill", + "ItemMKIIScrewdriver", + "ItemMKIIWireCutters", + "ItemMKIIWrench", + "ItemMarineBodyArmor", + "ItemMarineHelmet", + "ItemMilk", + "ItemMiningBackPack", + "ItemMiningBelt", + "ItemMiningBeltMKII", + "ItemMiningCharge", + "ItemMiningDrill", + "ItemMiningDrillHeavy", + "ItemMiningDrillPneumatic", + "ItemMkIIToolbelt", + "ItemMuffin", + "ItemMushroom", + "ItemNVG", + "ItemNickelIngot", + "ItemNickelOre", + "ItemNitrice", + "ItemOxite", + "ItemPassiveVent", + "ItemPassiveVentInsulated", + "ItemPeaceLily", + "ItemPickaxe", + "ItemPillHeal", + "ItemPillStun", + "ItemPipeAnalyizer", + "ItemPipeCowl", + "ItemPipeDigitalValve", + "ItemPipeGasMixer", + "ItemPipeHeater", + "ItemPipeIgniter", + "ItemPipeLabel", + "ItemPipeLiquidRadiator", + "ItemPipeMeter", + "ItemPipeRadiator", + "ItemPipeValve", + "ItemPipeVolumePump", + "ItemPlainCake", + "ItemPlantEndothermic_Creative", + "ItemPlantEndothermic_Genepool1", + "ItemPlantEndothermic_Genepool2", + "ItemPlantSampler", + "ItemPlantSwitchGrass", + "ItemPlantThermogenic_Creative", + "ItemPlantThermogenic_Genepool1", + "ItemPlantThermogenic_Genepool2", + "ItemPlasticSheets", + "ItemPotato", + "ItemPotatoBaked", + "ItemPowerConnector", + "ItemPumpkin", + "ItemPumpkinPie", + "ItemPumpkinSoup", + "ItemPureIce", + "ItemPureIceCarbonDioxide", + "ItemPureIceHydrogen", + "ItemPureIceLiquidCarbonDioxide", + "ItemPureIceLiquidHydrogen", + "ItemPureIceLiquidNitrogen", + "ItemPureIceLiquidNitrous", + "ItemPureIceLiquidOxygen", + "ItemPureIceLiquidPollutant", + "ItemPureIceLiquidVolatiles", + "ItemPureIceNitrogen", + "ItemPureIceNitrous", + "ItemPureIceOxygen", + "ItemPureIcePollutant", + "ItemPureIcePollutedWater", + "ItemPureIceSteam", + "ItemPureIceVolatiles", + "ItemRTG", + "ItemRTGSurvival", + "ItemReagentMix", + "ItemRemoteDetonator", + "ItemReusableFireExtinguisher", + "ItemRice", + "ItemRoadFlare", + "ItemRocketMiningDrillHead", + "ItemRocketMiningDrillHeadDurable", + "ItemRocketMiningDrillHeadHighSpeedIce", + "ItemRocketMiningDrillHeadHighSpeedMineral", + "ItemRocketMiningDrillHeadIce", + "ItemRocketMiningDrillHeadLongTerm", + "ItemRocketMiningDrillHeadMineral", + "ItemRocketScanningHead", + "ItemScanner", + "ItemScrewdriver", + "ItemSecurityCamera", + "ItemSensorLenses", + "ItemSensorProcessingUnitCelestialScanner", + "ItemSensorProcessingUnitMesonScanner", + "ItemSensorProcessingUnitOreScanner", + "ItemSiliconIngot", + "ItemSiliconOre", + "ItemSilverIngot", + "ItemSilverOre", + "ItemSolderIngot", + "ItemSolidFuel", + "ItemSoundCartridgeBass", + "ItemSoundCartridgeDrums", + "ItemSoundCartridgeLeads", + "ItemSoundCartridgeSynth", + "ItemSoyOil", + "ItemSoybean", + "ItemSpaceCleaner", + "ItemSpaceHelmet", + "ItemSpaceIce", + "ItemSpaceOre", + "ItemSpacepack", + "ItemSprayCanBlack", + "ItemSprayCanBlue", + "ItemSprayCanBrown", + "ItemSprayCanGreen", + "ItemSprayCanGrey", + "ItemSprayCanKhaki", + "ItemSprayCanOrange", + "ItemSprayCanPink", + "ItemSprayCanPurple", + "ItemSprayCanRed", + "ItemSprayCanWhite", + "ItemSprayCanYellow", + "ItemSprayGun", + "ItemSteelFrames", + "ItemSteelIngot", + "ItemSteelSheets", + "ItemStelliteGlassSheets", + "ItemStelliteIngot", + "ItemSugar", + "ItemSugarCane", + "ItemSuitModCryogenicUpgrade", + "ItemTablet", + "ItemTerrainManipulator", + "ItemTomato", + "ItemTomatoSoup", + "ItemToolBelt", + "ItemTropicalPlant", + "ItemUraniumOre", + "ItemVolatiles", + "ItemWallCooler", + "ItemWallHeater", + "ItemWallLight", + "ItemWaspaloyIngot", + "ItemWaterBottle", + "ItemWaterPipeDigitalValve", + "ItemWaterPipeMeter", + "ItemWaterWallCooler", + "ItemWearLamp", + "ItemWeldingTorch", + "ItemWheat", + "ItemWireCutters", + "ItemWirelessBatteryCellExtraLarge", + "ItemWreckageAirConditioner1", + "ItemWreckageAirConditioner2", + "ItemWreckageHydroponicsTray1", + "ItemWreckageLargeExtendableRadiator01", + "ItemWreckageStructureRTG1", + "ItemWreckageStructureWeatherStation001", + "ItemWreckageStructureWeatherStation002", + "ItemWreckageStructureWeatherStation003", + "ItemWreckageStructureWeatherStation004", + "ItemWreckageStructureWeatherStation005", + "ItemWreckageStructureWeatherStation006", + "ItemWreckageStructureWeatherStation007", + "ItemWreckageStructureWeatherStation008", + "ItemWreckageTurbineGenerator1", + "ItemWreckageTurbineGenerator2", + "ItemWreckageTurbineGenerator3", + "ItemWreckageWallCooler1", + "ItemWreckageWallCooler2", + "ItemWrench", + "KitSDBSilo", + "KitStructureCombustionCentrifuge", + "Lander", + "Meteorite", + "MonsterEgg", + "MotherboardComms", + "MotherboardLogic", + "MotherboardMissionControl", + "MotherboardProgrammableChip", + "MotherboardRockets", + "MotherboardSorter", + "MothershipCore", + "NpcChick", + "NpcChicken", + "PipeBenderMod", + "PortableComposter", + "PortableSolarPanel", + "ReagentColorBlue", + "ReagentColorGreen", + "ReagentColorOrange", + "ReagentColorRed", + "ReagentColorYellow", + "Robot", + "RoverCargo", + "Rover_MkI", + "SMGMagazine", + "SeedBag_Cocoa", + "SeedBag_Corn", + "SeedBag_Fern", + "SeedBag_Mushroom", + "SeedBag_Potato", + "SeedBag_Pumpkin", + "SeedBag_Rice", + "SeedBag_Soybean", + "SeedBag_SugarCane", + "SeedBag_Switchgrass", + "SeedBag_Tomato", + "SeedBag_Wheet", + "SpaceShuttle", + "ToolPrinterMod", + "ToyLuna", + "UniformCommander", + "UniformMarine", + "UniformOrangeJumpSuit", + "WeaponEnergy", + "WeaponPistolEnergy", + "WeaponRifleEnergy", + "WeaponTorpedo" + ], + "logicableItems": [ + "Battery_Wireless_cell", + "Battery_Wireless_cell_Big", + "DynamicGPR", + "DynamicLight", + "ItemAdvancedTablet", + "ItemAngleGrinder", + "ItemArcWelder", + "ItemBatteryCell", + "ItemBatteryCellLarge", + "ItemBatteryCellNuclear", + "ItemBeacon", + "ItemDrill", + "ItemEmergencyAngleGrinder", + "ItemEmergencyArcWelder", + "ItemEmergencyDrill", + "ItemEmergencySpaceHelmet", + "ItemFlashlight", + "ItemHardBackpack", + "ItemHardJetpack", + "ItemHardSuit", + "ItemHardsuitHelmet", + "ItemIntegratedCircuit10", + "ItemJetpackBasic", + "ItemLabeller", + "ItemLaptop", + "ItemMKIIAngleGrinder", + "ItemMKIIArcWelder", + "ItemMKIIDrill", + "ItemMKIIMiningDrill", + "ItemMiningBeltMKII", + "ItemMiningDrill", + "ItemMiningDrillHeavy", + "ItemMkIIToolbelt", + "ItemNVG", + "ItemPlantSampler", + "ItemRemoteDetonator", + "ItemSensorLenses", + "ItemSpaceHelmet", + "ItemSpacepack", + "ItemTablet", + "ItemTerrainManipulator", + "ItemWearLamp", + "ItemWirelessBatteryCellExtraLarge", + "PortableSolarPanel", + "Robot", + "RoverCargo", + "Rover_MkI", + "WeaponEnergy", + "WeaponPistolEnergy", + "WeaponRifleEnergy" + ], + "suits": [ + "ItemEmergencyEvaSuit", + "ItemEvaSuit", + "ItemHardSuit" + ], + "circuitHolders": [ + "H2Combustor", + "ItemAdvancedTablet", + "ItemHardSuit", + "ItemLaptop", + "Robot", + "StructureAirConditioner", + "StructureCircuitHousing", + "StructureCombustionCentrifuge", + "StructureElectrolyzer", + "StructureFiltration", + "StructureNitrolyzer", + "StructureRocketCircuitHousing" + ] +} \ No newline at end of file diff --git a/rust-analyzer.json b/rust-analyzer.json index bfdf497..7021847 100644 --- a/rust-analyzer.json +++ b/rust-analyzer.json @@ -1,5 +1,4 @@ { - "rust-analyzer.cargo.target": "wasm32-unknown-unknown", "rust-analyzer.cargo.features": [ ] } diff --git a/stationeers_data/src/database/prefab_map.rs b/stationeers_data/src/database/prefab_map.rs index c780c56..329e44c 100644 --- a/stationeers_data/src/database/prefab_map.rs +++ b/stationeers_data/src/database/prefab_map.rs @@ -26,6 +26,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -47,6 +49,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -68,6 +72,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -89,6 +95,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -110,6 +118,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -131,6 +141,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -152,6 +164,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -173,6 +187,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -194,6 +210,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -215,6 +233,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -236,6 +256,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -257,12 +279,14 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), ( 1365789392i32, - ItemSlotsTemplate { + ItemConsumerTemplate { prefab: PrefabInfo { prefab_name: "ApplianceChemistryStation".into(), prefab_hash: 1365789392i32, @@ -278,9 +302,21 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![SlotInfo { name : "Output".into(), typ : Class::None }] .into_iter() .collect(), + consumer_info: ConsumerInfo { + consumed_resouces: vec![ + "ItemCharcoal".into(), "ItemCobaltOre".into(), "ItemFern".into(), + "ItemSilverIngot".into(), "ItemSilverOre".into(), "ItemSoyOil" + .into() + ] + .into_iter() + .collect(), + processed_reagents: vec![].into_iter().collect(), + }, } .into(), ), @@ -302,6 +338,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -323,12 +361,14 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), ( -1136173965i32, - ItemSlotsTemplate { + ItemConsumerTemplate { prefab: PrefabInfo { prefab_name: "ApplianceMicrowave".into(), prefab_hash: -1136173965i32, @@ -345,15 +385,30 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![SlotInfo { name : "Output".into(), typ : Class::None }] .into_iter() .collect(), + consumer_info: ConsumerInfo { + consumed_resouces: 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(), ), ( -749191906i32, - ItemSlotsTemplate { + ItemConsumerTemplate { prefab: PrefabInfo { prefab_name: "AppliancePackagingMachine".into(), prefab_hash: -749191906i32, @@ -370,15 +425,30 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![SlotInfo { name : "Export".into(), typ : Class::None }] .into_iter() .collect(), + consumer_info: ConsumerInfo { + consumed_resouces: 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(), ), ( -1339716113i32, - ItemSlotsTemplate { + ItemConsumerTemplate { prefab: PrefabInfo { prefab_name: "AppliancePaintMixer".into(), prefab_hash: -1339716113i32, @@ -394,9 +464,21 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![SlotInfo { name : "Output".into(), typ : Class::Bottle }] .into_iter() .collect(), + consumer_info: ConsumerInfo { + consumed_resouces: vec![ + "ItemSoyOil".into(), "ReagentColorBlue".into(), + "ReagentColorGreen".into(), "ReagentColorOrange".into(), + "ReagentColorRed".into(), "ReagentColorYellow".into() + ] + .into_iter() + .collect(), + processed_reagents: vec![].into_iter().collect(), + }, } .into(), ), @@ -419,6 +501,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![SlotInfo { name : "Input".into(), typ : Class::Tool }] .into_iter() .collect(), @@ -444,6 +528,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Source Plant".into(), typ : Class::Plant }, SlotInfo { name : "Target Plant".into(), typ : Class::Plant } @@ -472,6 +558,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![SlotInfo { name : "Plant".into(), typ : Class::Plant }] .into_iter() .collect(), @@ -480,7 +568,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ), ( 1260918085i32, - ItemSlotsTemplate { + ItemConsumerTemplate { prefab: PrefabInfo { prefab_name: "ApplianceReagentProcessor".into(), prefab_hash: 1260918085i32, @@ -497,12 +585,25 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Input".into(), typ : Class::None }, SlotInfo { name : "Output".into(), typ : Class::None } ] .into_iter() .collect(), + consumer_info: ConsumerInfo { + consumed_resouces: 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(), ), @@ -525,6 +626,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : @@ -561,6 +664,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::Tool } ] @@ -588,6 +693,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -610,6 +717,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -654,6 +763,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -697,6 +808,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Storage, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : @@ -727,6 +840,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -749,6 +864,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -770,6 +887,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -791,6 +910,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -812,6 +933,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -833,6 +956,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -855,6 +980,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -877,6 +1004,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -899,6 +1028,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -921,6 +1052,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -942,6 +1075,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -963,6 +1098,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -984,6 +1121,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -1006,6 +1145,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -1028,6 +1169,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -1050,6 +1193,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -1072,6 +1217,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -1094,6 +1241,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -1115,6 +1264,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -1136,6 +1287,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -1158,6 +1311,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -1180,6 +1335,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -1202,6 +1359,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -1224,6 +1383,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -1237,6 +1398,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -1295,6 +1458,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Storage, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : @@ -1329,6 +1494,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -1343,6 +1510,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -1403,6 +1572,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -1519,6 +1690,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Atmospherics, }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), @@ -1544,6 +1720,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Storage, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : @@ -1577,6 +1755,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -1630,6 +1810,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Atmospherics, }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), @@ -1655,6 +1840,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), @@ -1680,6 +1870,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), @@ -1705,6 +1900,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), @@ -1730,6 +1930,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), @@ -1754,6 +1959,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), @@ -1779,6 +1989,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), @@ -1803,6 +2018,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), @@ -1827,6 +2047,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), @@ -1852,6 +2077,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), @@ -1877,6 +2107,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Atmospherics, }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Gas Canister".into(), typ : Class::LiquidCanister } @@ -1904,6 +2139,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), @@ -1928,6 +2168,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Atmospherics, }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), @@ -1953,6 +2198,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Atmospherics, }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister }, SlotInfo { name : "Battery".into(), typ : Class::Battery } @@ -1980,6 +2230,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : @@ -2015,6 +2270,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -2069,6 +2326,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Atmospherics, }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister } @@ -2097,6 +2359,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Atmospherics, }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister } @@ -2125,6 +2392,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Atmospherics, }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister } @@ -2153,6 +2425,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Atmospherics, }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo { @@ -2181,6 +2458,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -2203,6 +2482,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -2224,6 +2505,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -2246,6 +2529,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![SlotInfo { name : "Brain".into(), typ : Class::Organ }] .into_iter() .collect(), @@ -2271,6 +2559,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![SlotInfo { name : "Brain".into(), typ : Class::Organ }] .into_iter() .collect(), @@ -2296,6 +2589,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![SlotInfo { name : "Brain".into(), typ : Class::Organ }] .into_iter() .collect(), @@ -2321,6 +2619,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![SlotInfo { name : "Brain".into(), typ : Class::Organ }] .into_iter() .collect(), @@ -2346,6 +2649,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![SlotInfo { name : "Brain".into(), typ : Class::Organ }] .into_iter() .collect(), @@ -2371,6 +2679,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -2392,6 +2702,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![SlotInfo { name : "".into(), typ : Class::Magazine }] .into_iter() .collect(), @@ -2408,6 +2720,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Flag (ODA 10m)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -2421,6 +2735,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Flag (ODA 4m)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -2434,6 +2750,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Flag (ODA 6m)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -2447,6 +2765,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Flag (ODA 8m)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -2468,6 +2788,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Magazine".into(), typ : Class::Flare }, SlotInfo { name : "".into(), typ : Class::Blocked } @@ -2479,7 +2801,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ), ( 1840108251i32, - StructureLogicDeviceTemplate { + StructureCircuitHolderTemplate { prefab: PrefabInfo { prefab_name: "H2Combustor".into(), prefab_hash: 1840108251i32, @@ -2488,6 +2810,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![(0u32, vec![] .into_iter().collect())] .into_iter() @@ -2621,6 +2948,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![SlotInfo { name : "Magazine".into(), typ : Class::Magazine }] .into_iter() .collect(), @@ -2645,6 +2974,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Magazine, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -2666,6 +2997,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -2687,6 +3020,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -2709,6 +3044,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -2730,12 +3067,14 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), ( 1722785341i32, - ItemLogicTemplate { + ItemCircuitHolderTemplate { prefab: PrefabInfo { prefab_name: "ItemAdvancedTablet".into(), prefab_hash: 1722785341i32, @@ -2752,6 +3091,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -2836,6 +3177,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -2857,6 +3200,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -2878,6 +3223,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -2929,6 +3276,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -2981,6 +3330,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3005,6 +3356,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3026,6 +3379,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3047,6 +3402,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3068,6 +3425,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3089,6 +3448,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3111,6 +3472,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -3155,6 +3518,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -3199,6 +3564,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -3243,6 +3610,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3264,6 +3633,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3285,6 +3656,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -3337,6 +3710,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3358,6 +3733,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3379,6 +3756,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3401,6 +3780,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3423,6 +3804,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3444,6 +3827,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3466,6 +3851,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3488,6 +3875,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3510,6 +3899,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3532,6 +3923,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3554,6 +3947,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3576,6 +3971,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3598,6 +3995,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3620,6 +4019,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3642,6 +4043,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3664,6 +4067,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3686,6 +4091,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3707,6 +4114,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3728,6 +4137,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3749,6 +4160,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3770,6 +4183,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3794,6 +4209,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3816,6 +4233,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3837,6 +4256,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3858,6 +4279,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3879,6 +4302,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3902,6 +4327,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3923,6 +4350,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3944,6 +4373,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3967,6 +4398,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -3988,6 +4421,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4009,6 +4444,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4030,6 +4467,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4051,6 +4490,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4072,6 +4513,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4094,6 +4537,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4116,6 +4561,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4138,6 +4585,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4160,6 +4609,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4181,6 +4632,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::CreditCard, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4202,6 +4655,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4224,6 +4679,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4245,6 +4702,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::DataDisk, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4267,6 +4726,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4289,6 +4750,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Ores, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4311,6 +4774,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4333,6 +4798,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -4385,6 +4852,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4406,6 +4875,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4427,6 +4898,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4448,6 +4921,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Storage, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::Egg }, SlotInfo { name : "" .into(), typ : Class::Egg }, SlotInfo { name : "".into(), typ : @@ -4478,6 +4953,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4501,6 +4978,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4522,6 +5001,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -4573,6 +5054,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -4624,6 +5107,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4645,6 +5130,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -4680,7 +5167,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ), ( 1791306431i32, - ItemSlotsTemplate { + ItemSuitTemplate { prefab: PrefabInfo { prefab_name: "ItemEmergencyEvaSuit".into(), prefab_hash: 1791306431i32, @@ -4696,6 +5183,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ SlotInfo { name : "Air Tank".into(), typ : Class::GasCanister }, SlotInfo { name : "Waste Tank".into(), typ : Class::GasCanister }, @@ -4706,6 +5198,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ] .into_iter() .collect(), + suit_info: SuitInfo { + hygine_reduction_multiplier: 1f32, + waste_max_pressure: 4053f32, + }, } .into(), ), @@ -4727,6 +5223,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4748,6 +5246,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4769,6 +5269,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -4828,6 +5333,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Belt, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool" @@ -4860,6 +5367,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4881,6 +5390,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4903,12 +5414,14 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), ( 1677018918i32, - ItemSlotsTemplate { + ItemSuitTemplate { prefab: PrefabInfo { prefab_name: "ItemEvaSuit".into(), prefab_hash: 1677018918i32, @@ -4925,6 +5438,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ SlotInfo { name : "Air Tank".into(), typ : Class::GasCanister }, SlotInfo { name : "Waste Tank".into(), typ : Class::GasCanister }, @@ -4935,6 +5453,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ] .into_iter() .collect(), + suit_info: SuitInfo { + hygine_reduction_multiplier: 1f32, + waste_max_pressure: 4053f32, + }, } .into(), ), @@ -4956,6 +5478,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -4980,6 +5504,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5002,6 +5528,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Egg, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5024,6 +5552,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5045,6 +5575,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5066,6 +5598,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5087,6 +5621,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -5144,6 +5680,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5165,6 +5703,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5186,6 +5726,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5207,6 +5749,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5228,6 +5772,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5249,6 +5795,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5270,6 +5818,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5291,6 +5841,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5312,6 +5864,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -5333,6 +5890,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -5354,6 +5916,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -5375,6 +5942,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -5396,6 +5968,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -5417,6 +5994,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -5438,6 +6020,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -5459,6 +6046,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -5480,6 +6072,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -5501,6 +6098,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -5523,6 +6127,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5545,6 +6151,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5566,6 +6174,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5587,6 +6197,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5609,6 +6221,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5631,6 +6245,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5652,6 +6268,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5673,6 +6291,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5694,6 +6314,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5716,6 +6338,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5737,6 +6361,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5758,6 +6384,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5780,6 +6408,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5802,6 +6432,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5823,6 +6455,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5844,6 +6478,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5866,6 +6502,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5888,6 +6526,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5909,6 +6549,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5930,6 +6572,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5952,6 +6596,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5974,6 +6620,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -5995,6 +6643,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -6016,6 +6666,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -6038,6 +6690,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -6060,6 +6714,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -6081,6 +6737,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -6102,6 +6760,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -6123,6 +6783,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -6145,6 +6807,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -6167,6 +6831,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -6188,6 +6854,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Glasses, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -6210,6 +6878,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -6232,6 +6902,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -6254,6 +6926,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -6275,6 +6949,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -6297,6 +6973,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Back, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -6430,6 +7108,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Back, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -6592,6 +7272,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Back, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ @@ -6622,7 +7304,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ), ( -1758310454i32, - ItemLogicMemoryTemplate { + ItemSuitCircuitHolderTemplate { prefab: PrefabInfo { prefab_name: "ItemHardSuit".into(), prefab_hash: -1758310454i32, @@ -6639,6 +7321,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -6781,6 +7468,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ] .into_iter() .collect(), + suit_info: SuitInfo { + hygine_reduction_multiplier: 1.5f32, + waste_max_pressure: 4053f32, + }, memory: MemoryInfo { instructions: None, memory_access: MemoryAccess::ReadWrite, @@ -6808,6 +7499,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -6869,6 +7565,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -6890,6 +7588,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Helmet, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -6911,6 +7611,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -6932,6 +7637,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Belt, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Plant" @@ -6967,6 +7674,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -6989,6 +7698,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7011,6 +7722,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7032,6 +7745,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7054,6 +7769,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7075,6 +7792,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -7115,6 +7834,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7136,6 +7857,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7158,6 +7881,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7180,6 +7905,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7201,6 +7928,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7223,6 +7952,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Back, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -7346,6 +8077,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7367,6 +8100,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7388,6 +8123,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7409,6 +8146,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7430,6 +8169,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7451,6 +8192,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7472,6 +8215,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7493,6 +8238,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7514,6 +8261,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7535,6 +8284,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7556,6 +8307,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7577,6 +8330,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7598,6 +8353,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7619,6 +8376,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7640,6 +8399,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7661,6 +8422,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7682,6 +8445,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7703,6 +8468,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7724,6 +8491,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7745,6 +8514,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7766,6 +8537,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7787,6 +8560,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7808,6 +8583,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7829,6 +8606,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7850,6 +8629,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7871,6 +8652,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7892,6 +8675,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7913,6 +8698,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7934,6 +8721,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7955,6 +8744,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7976,6 +8767,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -7997,6 +8790,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8018,6 +8813,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8039,6 +8836,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8060,6 +8859,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8081,6 +8882,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8102,6 +8905,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8123,6 +8928,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8144,6 +8951,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8165,6 +8974,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8186,6 +8997,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8207,6 +9020,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8228,6 +9043,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8249,6 +9066,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8270,6 +9089,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8291,6 +9112,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8312,6 +9135,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8333,6 +9158,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8354,6 +9181,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8375,6 +9204,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8396,6 +9227,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8417,6 +9250,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8438,6 +9273,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8459,6 +9296,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8480,6 +9319,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8501,6 +9342,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8522,6 +9365,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8543,6 +9388,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8564,6 +9411,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8585,6 +9434,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8606,6 +9457,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8627,6 +9480,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8648,6 +9503,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8669,6 +9526,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8690,6 +9549,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8711,6 +9572,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8732,6 +9595,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8753,6 +9618,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8774,6 +9641,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8795,6 +9664,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8816,6 +9687,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8837,6 +9710,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8858,6 +9733,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8879,6 +9756,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8900,6 +9779,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8921,6 +9802,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8942,6 +9825,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8963,6 +9848,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -8984,6 +9871,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9005,6 +9894,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9026,6 +9917,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9047,6 +9940,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9068,6 +9963,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9089,6 +9986,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9110,6 +10009,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9131,6 +10032,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9152,6 +10055,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9173,6 +10078,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9194,6 +10101,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9215,6 +10124,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9236,6 +10147,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9257,6 +10170,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9278,6 +10193,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9299,6 +10216,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9320,6 +10239,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9341,6 +10262,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9362,6 +10285,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9383,6 +10308,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9404,6 +10331,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9425,6 +10354,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9446,6 +10377,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9467,6 +10400,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9488,6 +10423,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9509,6 +10446,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9530,6 +10469,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9551,6 +10492,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9572,6 +10515,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9593,6 +10538,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9614,6 +10561,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9635,6 +10584,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9656,6 +10607,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9677,6 +10630,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9698,6 +10653,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9719,6 +10676,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9740,6 +10699,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9761,6 +10722,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9782,6 +10745,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9803,6 +10768,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9824,6 +10791,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9845,6 +10814,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9866,6 +10837,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9887,6 +10860,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9908,6 +10883,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9929,6 +10906,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9950,6 +10929,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9971,6 +10952,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -9992,6 +10975,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10013,6 +10998,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10034,6 +11021,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10055,6 +11044,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10076,6 +11067,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10097,6 +11090,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10118,6 +11113,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10139,6 +11136,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10160,6 +11159,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10181,6 +11182,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10202,6 +11205,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10223,6 +11228,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10244,6 +11251,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10265,6 +11274,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10286,6 +11297,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10307,6 +11320,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10328,6 +11343,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10349,6 +11366,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10370,6 +11389,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10391,6 +11412,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10412,6 +11435,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10433,6 +11458,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10454,6 +11481,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10475,6 +11504,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10496,6 +11527,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10517,6 +11550,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10538,6 +11573,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10559,6 +11596,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10580,6 +11619,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10601,6 +11642,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10622,6 +11665,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10643,6 +11688,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10664,6 +11711,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10685,6 +11734,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10706,6 +11757,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10727,6 +11780,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10748,6 +11803,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10769,6 +11826,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10790,6 +11849,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10811,6 +11872,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10832,6 +11895,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10853,6 +11918,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10874,6 +11941,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10895,6 +11964,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10916,6 +11987,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10937,6 +12010,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10958,6 +12033,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -10979,6 +12056,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -11000,6 +12079,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -11021,6 +12102,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -11042,6 +12125,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -11064,6 +12149,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -11099,7 +12186,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ), ( 141535121i32, - ItemLogicTemplate { + ItemCircuitHolderTemplate { prefab: PrefabInfo { prefab_name: "ItemLaptop".into(), prefab_hash: 141535121i32, @@ -11116,6 +12203,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -11191,6 +12280,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -11213,6 +12304,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -11235,6 +12328,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -11256,6 +12351,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -11277,6 +12379,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -11298,6 +12407,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -11319,6 +12430,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -11341,6 +12454,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -11363,6 +12478,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -11384,6 +12501,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -11406,6 +12525,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -11428,6 +12549,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -11479,6 +12602,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -11531,6 +12656,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -11553,6 +12680,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -11605,6 +12734,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -11627,6 +12758,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -11685,6 +12818,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -11707,6 +12842,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -11729,6 +12866,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -11750,6 +12889,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Suit, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : @@ -11778,6 +12919,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Helmet, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), @@ -11803,6 +12946,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -11824,6 +12969,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Back, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ @@ -11868,6 +13015,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Belt, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Ore".into(), @@ -11902,6 +13051,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Belt, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -12059,6 +13210,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12081,6 +13234,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -12139,6 +13294,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -12196,6 +13353,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } ] @@ -12223,6 +13382,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Belt, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -12357,6 +13518,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12381,6 +13544,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12402,6 +13567,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Glasses, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -12454,6 +13621,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12476,6 +13645,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12498,6 +13669,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12520,6 +13693,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12542,6 +13717,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12563,6 +13740,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12585,6 +13764,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12607,6 +13788,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12629,6 +13812,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12651,6 +13836,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12673,6 +13860,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12695,6 +13884,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12717,6 +13908,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12739,6 +13932,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12761,6 +13956,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12782,6 +13979,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12804,6 +14003,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12826,6 +14027,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12848,6 +14051,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12870,6 +14075,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12892,6 +14099,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12914,6 +14123,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12935,6 +14146,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12956,6 +14169,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -12978,6 +14193,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13000,6 +14217,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13022,6 +14241,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -13079,6 +14300,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13100,6 +14323,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13122,6 +14347,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13144,6 +14371,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13165,6 +14394,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13187,6 +14418,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13208,6 +14441,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13230,6 +14465,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13252,6 +14489,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13273,6 +14512,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13295,6 +14536,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13317,6 +14560,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13339,6 +14584,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13361,6 +14608,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13383,6 +14632,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13405,6 +14656,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13427,6 +14680,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13449,6 +14704,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13471,6 +14728,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13493,6 +14752,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13515,6 +14776,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13537,6 +14800,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13559,6 +14824,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13581,6 +14848,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13603,6 +14872,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13625,6 +14896,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13647,6 +14920,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13669,6 +14944,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13691,6 +14968,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13713,6 +14992,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13735,6 +15016,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13756,6 +15039,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -13808,6 +15093,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister } @@ -13836,6 +15123,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13858,6 +15147,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Flare, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13880,6 +15171,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::DrillHead, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13901,6 +15194,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::DrillHead, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13922,6 +15217,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::DrillHead, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13943,6 +15240,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::DrillHead, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13964,6 +15263,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::DrillHead, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -13985,6 +15286,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::DrillHead, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14006,6 +15309,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::DrillHead, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14027,6 +15332,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::ScanningHead, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14049,6 +15356,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14071,6 +15380,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14093,6 +15404,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14115,6 +15428,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Glasses, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -14177,6 +15492,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::SensorProcessingUnit, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14199,6 +15516,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::SensorProcessingUnit, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14221,6 +15540,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::SensorProcessingUnit, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14242,6 +15563,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14264,6 +15587,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14285,6 +15610,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14307,6 +15634,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14328,6 +15657,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14351,6 +15682,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14372,6 +15705,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::SoundCartridge, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14393,6 +15728,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::SoundCartridge, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14414,6 +15751,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::SoundCartridge, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14435,6 +15774,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::SoundCartridge, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14456,6 +15797,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14478,6 +15821,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14500,6 +15845,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14522,6 +15869,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -14581,6 +15933,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14603,6 +15957,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14625,6 +15981,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Back, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -14749,6 +16107,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14771,6 +16131,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14793,6 +16155,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14815,6 +16179,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14837,6 +16203,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14859,6 +16227,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14881,6 +16251,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14903,6 +16275,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14925,6 +16299,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14947,6 +16323,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14969,6 +16347,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -14991,6 +16371,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15013,6 +16395,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![SlotInfo { name : "Spray Can".into(), typ : Class::Bottle }] .into_iter() .collect(), @@ -15038,6 +16422,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15060,6 +16446,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15082,6 +16470,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15103,6 +16493,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15126,6 +16518,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15147,6 +16541,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15168,6 +16564,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15190,6 +16588,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::SuitMod, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15212,6 +16612,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -15273,6 +16675,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -15341,6 +16745,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15363,6 +16769,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15385,6 +16793,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Belt, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool" @@ -15418,6 +16828,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15440,6 +16852,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15462,6 +16876,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15484,6 +16900,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15506,6 +16924,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15528,6 +16948,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15551,6 +16973,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15573,6 +16997,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::LiquidBottle, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15594,6 +17020,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15615,6 +17043,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15636,6 +17066,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15657,6 +17089,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Helmet, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -15709,6 +17143,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } ] @@ -15736,6 +17175,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15758,6 +17199,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15780,6 +17223,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -15823,6 +17268,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15844,6 +17291,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15865,6 +17314,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15886,6 +17337,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15907,6 +17360,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15928,6 +17383,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15949,6 +17406,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15970,6 +17429,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -15991,6 +17452,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16012,6 +17475,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16033,6 +17498,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16054,6 +17521,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16075,6 +17544,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16096,6 +17567,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16117,6 +17590,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16138,6 +17613,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16159,6 +17636,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16180,6 +17659,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16202,6 +17683,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16224,6 +17707,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16245,6 +17730,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Kits, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16258,6 +17745,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Kitchen Table (Short)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16271,6 +17760,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Kitchen Table (Simple Short)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16284,6 +17775,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Kitchen Table (Simple Tall)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16297,6 +17790,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Kitchen Table (Tall)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16318,6 +17813,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : @@ -16343,6 +17840,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), @@ -16365,6 +17864,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Landingpad".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16379,6 +17880,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), @@ -16410,6 +17913,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Landingpad Cross".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16424,6 +17929,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -16511,6 +18018,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Landingpad Diagonal".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16524,6 +18033,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -16602,6 +18113,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -16680,6 +18193,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Landingpad Gas Storage".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16693,6 +18208,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -16771,6 +18288,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -16849,6 +18368,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Landingpad Straight".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16862,6 +18383,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Landingpad Taxi Corner".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16875,6 +18398,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Landingpad Taxi Hold".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16888,6 +18413,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Landingpad Taxi Straight".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -16901,6 +18428,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -16953,6 +18482,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Logic Step Sequencer".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -17040,6 +18571,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -17061,6 +18594,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -17083,6 +18618,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Motherboard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -17105,6 +18642,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Motherboard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -17126,6 +18665,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Motherboard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -17148,6 +18689,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Motherboard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -17169,6 +18712,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Motherboard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -17191,6 +18736,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Motherboard, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -17213,6 +18760,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -17234,6 +18783,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ SlotInfo { name : "Brain".into(), typ : Class::Organ }, SlotInfo { name : "Lungs".into(), typ : Class::Organ } @@ -17261,6 +18815,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ SlotInfo { name : "Brain".into(), typ : Class::Organ }, SlotInfo { name : "Lungs".into(), typ : Class::Organ } @@ -17280,6 +18839,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -17336,6 +18897,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -17358,6 +18921,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : @@ -17387,6 +18952,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -17429,6 +18996,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Railing Elegant (Type 1)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -17442,6 +19011,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Railing Elegant (Type 2)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -17455,6 +19026,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Railing Industrial (Type 2)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -17478,6 +19051,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -17501,6 +19076,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -17524,6 +19101,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -17547,6 +19126,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -17570,6 +19151,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Resources, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -17584,6 +19167,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Respawn Point".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -17597,12 +19182,14 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Respawn Point (Mounted)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), ( 434786784i32, - ItemLogicTemplate { + ItemCircuitHolderTemplate { prefab: PrefabInfo { prefab_name: "Robot".into(), prefab_hash: 434786784i32, @@ -17619,6 +19206,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -17772,6 +19361,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -17980,6 +19574,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -18129,6 +19728,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Rover MKI".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -18150,6 +19751,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Magazine, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -18171,6 +19774,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -18193,6 +19798,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -18215,6 +19822,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -18237,6 +19846,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -18259,6 +19870,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -18281,6 +19894,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -18303,6 +19918,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -18325,6 +19942,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -18346,6 +19965,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -18367,6 +19988,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -18389,6 +20012,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -18411,6 +20036,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Plant, sorting_class: SortingClass::Food, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -18433,6 +20060,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Captain\'s Seat".into(), typ : Class::Entity }, SlotInfo { name : "Passenger Seat Left".into(), typ : Class::Entity @@ -18454,6 +20083,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -18504,6 +20135,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -18556,6 +20189,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Active Vent".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -18632,6 +20267,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Advanced Composter".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -18711,6 +20348,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -18807,7 +20449,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ), ( -463037670i32, - StructureLogicDeviceMemoryTemplate { + StructureLogicDeviceConsumerMemoryTemplate { prefab: PrefabInfo { prefab_name: "StructureAdvancedPackagingMachine".into(), prefab_hash: -463037670i32, @@ -18816,6 +20458,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Advanced Packaging Machine".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -18873,6 +20517,19 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_open_state: true, has_reagents: true, }, + consumer_info: ConsumerInfo { + consumed_resouces: 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(), + }, memory: MemoryInfo { instructions: Some( vec![ @@ -18915,7 +20572,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ), ( -2087593337i32, - StructureLogicDeviceTemplate { + StructureCircuitHolderTemplate { prefab: PrefabInfo { prefab_name: "StructureAirConditioner".into(), prefab_hash: -2087593337i32, @@ -18924,6 +20581,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![(0u32, vec![] .into_iter().collect())] .into_iter() @@ -19053,6 +20715,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -19110,6 +20774,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -19167,6 +20833,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Bench (Angled)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -19223,6 +20891,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Arc Furnace".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -19310,6 +20980,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Area Power Control".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -19403,6 +21075,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Area Power Control".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -19496,6 +21170,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Autominer (Small)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -19554,7 +21230,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ), ( 336213101i32, - StructureLogicDeviceMemoryTemplate { + StructureLogicDeviceConsumerMemoryTemplate { prefab: PrefabInfo { prefab_name: "StructureAutolathe".into(), prefab_hash: 336213101i32, @@ -19563,6 +21239,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Autolathe".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -19620,6 +21298,22 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_open_state: true, has_reagents: true, }, + consumer_info: ConsumerInfo { + consumed_resouces: 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(), + }, memory: MemoryInfo { instructions: Some( vec![ @@ -19662,7 +21356,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ), ( -1672404896i32, - StructureLogicDeviceMemoryTemplate { + StructureLogicDeviceConsumerMemoryTemplate { prefab: PrefabInfo { prefab_name: "StructureAutomatedOven".into(), prefab_hash: -1672404896i32, @@ -19670,6 +21364,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Automated Oven".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -19727,6 +21423,19 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_open_state: true, has_reagents: true, }, + consumer_info: ConsumerInfo { + consumed_resouces: 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(), + }, memory: MemoryInfo { instructions: Some( vec![ @@ -19778,6 +21487,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -19833,6 +21544,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -19887,6 +21600,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -19938,6 +21653,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -20002,6 +21719,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Battery Cell Charger".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -20119,6 +21838,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Battery Charger Small".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -20200,6 +21921,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -20264,6 +21987,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -20327,6 +22052,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -20389,6 +22116,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -20441,6 +22170,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Powered Bench".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -20519,6 +22250,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Bench (Counter Style)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -20597,6 +22330,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Bench (High Tech Style)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -20675,6 +22410,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Bench (Frame Style)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -20753,6 +22490,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Bench (Workbench Style)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -20832,6 +22571,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -20889,6 +22630,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Block Bed".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -20953,6 +22696,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Blocker".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -20966,6 +22711,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -21015,6 +22762,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Cable (Corner)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21029,6 +22778,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Cable (3-Way Corner)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21042,6 +22793,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Burnt Cable (3-Way Corner)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21055,6 +22808,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21068,6 +22823,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Cable (4-Way Corner)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21081,6 +22838,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Burnt Cable (4-Way Corner)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21094,6 +22853,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Burnt Heavy Cable (4-Way Corner)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21107,6 +22868,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Burnt Cable (Corner)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21120,6 +22883,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Heavy Cable (Corner)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21133,6 +22898,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Heavy Cable (3-Way Corner)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21146,6 +22913,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Heavy Cable (4-Way Corner)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21159,6 +22928,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Burnt Cable (Corner)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21172,6 +22943,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -21212,6 +22985,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -21252,6 +23027,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -21292,6 +23069,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -21333,6 +23112,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Cable (Junction)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21347,6 +23128,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Cable (4-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21360,6 +23143,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Burnt Cable (4-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21373,6 +23158,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Burnt Cable (4-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21386,6 +23173,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Cable (5-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21399,6 +23188,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Burnt Cable (5-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21413,6 +23204,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Cable (6-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21426,6 +23219,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Burnt Cable (6-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21439,6 +23234,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Burnt Cable (6-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21452,6 +23249,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Burnt Cable (Junction)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21465,6 +23264,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Heavy Cable (3-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21478,6 +23279,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Heavy Cable (4-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21491,6 +23294,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Heavy Cable (5-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21504,6 +23309,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Burnt Heavy Cable (5-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21517,6 +23324,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Heavy Cable (6-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21530,6 +23339,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Burnt Cable (Junction)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21544,6 +23355,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Cable (Straight)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21557,6 +23370,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Burnt Cable (Straight)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21570,6 +23385,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Heavy Cable (Straight)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21583,6 +23400,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Burnt Cable (Straight)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -21597,6 +23416,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -21647,6 +23468,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -21717,6 +23543,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -21787,6 +23618,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Cargo Storage (Medium)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -22006,6 +23839,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Cargo Storage (Small)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -22584,6 +24419,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Centrifuge".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -22651,6 +24488,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chair".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -22706,6 +24545,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chair (Backless Double)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -22761,6 +24602,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chair (Backless Single)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -22816,6 +24659,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chair (Booth Corner Left)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -22871,6 +24716,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chair (Booth Middle)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -22926,6 +24773,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chair (Rectangle Double)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -22981,6 +24830,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chair (Rectangle Single)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -23036,6 +24887,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chair (Thick Double)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -23091,6 +24944,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chair (Thick Single)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -23147,6 +25002,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chute Bin".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -23213,6 +25070,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chute (Corner)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Transport Slot".into(), typ : Class::None } ] @@ -23232,6 +25091,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -23309,6 +25170,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -23386,6 +25249,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chute Digital Valve Left".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -23458,6 +25323,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chute Digital Valve Right".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -23529,6 +25396,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chute Flip Flop Splitter".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Transport Slot".into(), typ : Class::None } ] @@ -23548,6 +25417,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chute Inlet".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -23613,6 +25484,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chute (Junction)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Transport Slot".into(), typ : Class::None } ] @@ -23632,6 +25505,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chute Outlet".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -23698,6 +25573,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chute Overflow".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Transport Slot".into(), typ : Class::None } ] @@ -23717,6 +25594,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chute (Straight)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Transport Slot".into(), typ : Class::None } ] @@ -23735,6 +25614,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Umbilical Socket (Chute)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -23797,6 +25678,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Umbilical Socket Angle (Chute)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -23859,6 +25742,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Umbilical (Chute)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -23935,6 +25820,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chute Valve".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Transport Slot".into(), typ : Class::None } ] @@ -23954,6 +25841,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Chute (Window)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Transport Slot".into(), typ : Class::None } ] @@ -23964,7 +25853,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ), ( -128473777i32, - StructureLogicDeviceMemoryTemplate { + StructureCircuitHolderTemplate { prefab: PrefabInfo { prefab_name: "StructureCircuitHousing".into(), prefab_hash: -128473777i32, @@ -23972,6 +25861,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "IC Housing".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -24029,17 +25920,12 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_open_state: false, has_reagents: false, }, - memory: MemoryInfo { - instructions: None, - memory_access: MemoryAccess::ReadWrite, - memory_size: 0u32, - }, } .into(), ), ( 1238905683i32, - StructureLogicDeviceTemplate { + StructureCircuitHolderTemplate { prefab: PrefabInfo { prefab_name: "StructureCombustionCentrifuge".into(), prefab_hash: 1238905683i32, @@ -24048,6 +25934,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -24179,6 +26070,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Cladding (Angled)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24192,6 +26085,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Cladding (Angled Corner)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24205,6 +26100,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Cladding (Angled Corner Inner)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24219,6 +26116,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Cladding (Angled Corner Inner Long)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24233,6 +26132,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Cladding (Angled Corner Inner Long L)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24247,6 +26148,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Cladding (Angled Corner Inner Long R)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24260,6 +26163,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Cladding (Long Angled Corner)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24273,6 +26178,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Cladding (Long Angled Mirrored Corner)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24286,6 +26193,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Cladding (Long Angled)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24299,6 +26208,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Cladding (Cylindrical)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24312,6 +26223,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Cladding (Cylindrical Panel)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24325,6 +26238,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Cladding (Panel)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24338,6 +26253,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Cladding (Rounded)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24351,6 +26268,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Cladding (Rounded Corner)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24364,6 +26283,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Cladding (Rounded Corner Inner)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24377,6 +26298,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Cladding (Spherical)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24390,6 +26313,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Cladding (Spherical Cap)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24403,6 +26328,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Cladding (Spherical Corner)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24417,6 +26344,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -24475,6 +26404,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Floor Grating".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24488,6 +26419,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Floor Grating (Type 2)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24501,6 +26434,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Floor Grating (Type 3)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24514,6 +26449,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Floor Grating (Type 4)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24527,6 +26464,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Floor Grating Open".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24540,6 +26479,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Floor Grating Open Rotated".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24554,6 +26495,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Wall (Type 1)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24567,6 +26510,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Wall (Type 2)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24580,6 +26525,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Wall (Type 3)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24593,6 +26540,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Wall (Type 4)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24607,6 +26556,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Composite Window".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24620,6 +26571,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Iron Window".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -24634,6 +26587,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Computer".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -24696,6 +26651,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -24775,6 +26735,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -24825,6 +26787,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Console".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -24885,6 +26849,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Console Dual".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -24945,6 +26911,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -25002,6 +26970,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -25059,6 +27029,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -25117,6 +27089,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Console Monitor".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -25177,6 +27151,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -25276,6 +27255,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Corner Locker".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -25383,6 +27364,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Container Mount".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Container Slot".into(), typ : Class::None } ] @@ -25402,6 +27385,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -25477,6 +27465,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![(0u32, vec![] .into_iter().collect())] .into_iter() @@ -25541,6 +27534,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![(0u32, vec![] .into_iter().collect())] .into_iter() @@ -25605,6 +27603,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -25663,6 +27663,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Deep Miner".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() @@ -25725,6 +27727,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -25779,6 +27783,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -25828,6 +27834,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -25877,6 +27885,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -25929,6 +27939,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "".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![ @@ -25970,7 +27982,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ), ( -1668992663i32, - StructureLogicDeviceTemplate { + StructureCircuitHolderTemplate { prefab: PrefabInfo { prefab_name: "StructureElectrolyzer".into(), prefab_hash: -1668992663i32, @@ -25979,6 +27991,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![(0u32, vec![] .into_iter().collect())] .into_iter() @@ -26096,7 +28113,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ), ( 1307165496i32, - StructureLogicDeviceMemoryTemplate { + StructureLogicDeviceConsumerMemoryTemplate { prefab: PrefabInfo { prefab_name: "StructureElectronicsPrinter".into(), prefab_hash: 1307165496i32, @@ -26105,6 +28122,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Electronics Printer".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -26162,6 +28181,22 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_open_state: true, has_reagents: true, }, + consumer_info: ConsumerInfo { + consumed_resouces: 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(), + }, memory: MemoryInfo { instructions: Some( vec![ @@ -26212,6 +28247,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -26268,6 +28305,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -26321,6 +28360,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -26374,6 +28415,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -26422,6 +28465,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -26474,6 +28519,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Engine Mount (Type A1)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -26488,6 +28535,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -26567,6 +28619,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -26616,6 +28670,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Fairing (Type A1)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -26629,6 +28685,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Fairing (Type A2)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -26642,12 +28700,14 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Fairing (Type A3)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), ( -348054045i32, - StructureLogicDeviceTemplate { + StructureCircuitHolderTemplate { prefab: PrefabInfo { prefab_name: "StructureFiltration".into(), prefab_hash: -348054045i32, @@ -26656,6 +28716,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Filtration".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -26785,6 +28847,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Small Flag".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -26799,6 +28863,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -26847,6 +28913,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Bench (Flat)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -26903,6 +28971,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -26917,6 +28990,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Steel Frame".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -26931,6 +29006,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Steel Frame (Corner)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -26944,6 +29021,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Steel Frame (Corner Cut)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -26957,6 +29036,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Iron Frame".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -26971,6 +29052,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Steel Frame (Side)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -26985,6 +29068,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -27213,6 +29301,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -27309,6 +29402,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -27406,6 +29504,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Fuselage (Type A1)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -27419,6 +29519,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Fuselage (Type A2)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -27432,6 +29534,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Fuselage (Type A4)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -27445,6 +29549,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Fuselage (Type C5)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -27458,6 +29564,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -27535,6 +29646,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -27591,6 +29704,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -27657,6 +29772,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Gas Tank Storage".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -27734,6 +29851,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -27781,6 +29900,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -27828,6 +29949,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -27889,6 +30012,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -27947,6 +30072,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -28019,6 +30146,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -28085,6 +30214,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -28135,6 +30266,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Harvie".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -28238,6 +30371,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -28290,6 +30425,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -28342,6 +30479,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -28394,6 +30533,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "OGRE".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -28457,7 +30598,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ), ( -1888248335i32, - StructureLogicDeviceMemoryTemplate { + StructureLogicDeviceConsumerMemoryTemplate { prefab: PrefabInfo { prefab_name: "StructureHydraulicPipeBender".into(), prefab_hash: -1888248335i32, @@ -28466,6 +30607,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Hydraulic Pipe Bender".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -28523,6 +30666,22 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_open_state: true, has_reagents: true, }, + consumer_info: ConsumerInfo { + consumed_resouces: 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(), + }, memory: MemoryInfo { instructions: Some( vec![ @@ -28573,6 +30732,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -28766,6 +30930,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Fertiliser".into(), typ : Class::Plant } @@ -28786,6 +30955,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -28888,6 +31062,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![(0u32, vec![] .into_iter().collect())] .into_iter() @@ -28954,6 +31133,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -29000,6 +31181,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29014,6 +31200,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29028,6 +31219,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29042,6 +31238,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29055,6 +31256,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29068,6 +31274,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29081,6 +31292,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29094,6 +31310,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29108,6 +31329,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29122,6 +31348,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29136,6 +31367,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29150,6 +31386,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29164,6 +31405,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29178,6 +31424,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29191,6 +31442,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29204,6 +31460,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29217,6 +31478,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29230,6 +31496,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29243,6 +31514,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29256,6 +31532,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29269,6 +31550,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29283,6 +31569,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29297,6 +31588,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -29310,6 +31606,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![SlotInfo { name : "".into(), typ : Class::None }] .into_iter() .collect(), @@ -29326,6 +31627,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ SlotInfo { name : "Portable Slot".into(), typ : Class::None } ] @@ -29344,6 +31650,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -29395,6 +31703,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -29446,6 +31756,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -29497,6 +31809,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -29549,6 +31863,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -29628,6 +31944,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Ladder".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -29641,6 +31959,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Ladder End".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -29655,6 +31975,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -29704,6 +32026,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -29753,6 +32077,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -29802,6 +32128,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -29855,6 +32186,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -29913,6 +32246,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -29978,6 +32313,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Launch Mount".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -29991,6 +32328,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -30039,6 +32378,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -30087,6 +32428,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -30135,6 +32478,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -30183,6 +32528,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -30231,6 +32578,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -30280,6 +32629,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -30334,6 +32685,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -30405,6 +32758,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -30456,6 +32811,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -30505,6 +32862,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -30546,6 +32908,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -30600,6 +32964,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -30670,6 +33039,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -30740,6 +33114,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -30810,6 +33189,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -30881,6 +33265,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Liquid Tank Storage".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -30960,6 +33346,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -31020,6 +33408,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -31067,6 +33457,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -31114,6 +33506,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -31175,6 +33569,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Liquid 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![ @@ -31224,6 +33620,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -31278,6 +33676,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Locker (Small)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -31365,6 +33765,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -31417,6 +33819,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -31469,6 +33873,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -31521,6 +33927,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -31569,6 +33977,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -31629,6 +34039,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -31677,6 +34089,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -31738,6 +34152,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -31785,6 +34201,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -31848,6 +34266,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -31911,6 +34331,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -31958,6 +34380,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -32015,6 +34439,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), @@ -32057,6 +34483,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -32109,6 +34537,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -32161,6 +34591,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -32208,6 +34640,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -32257,6 +34691,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -32317,6 +34753,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -32370,6 +34808,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Logic Sorter".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -32511,6 +34951,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -32559,6 +35001,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -32608,6 +35052,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), @@ -32655,6 +35101,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -32707,6 +35155,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -32761,6 +35211,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -32813,6 +35265,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -32862,6 +35319,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -32910,6 +35372,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -32968,6 +35432,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -33017,6 +35486,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -33065,6 +35539,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -33135,6 +35614,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -33206,6 +35690,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -33245,7 +35731,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ), ( 1898243702i32, - StructureLogicDeviceTemplate { + StructureCircuitHolderTemplate { prefab: PrefabInfo { prefab_name: "StructureNitrolyzer".into(), prefab_hash: 1898243702i32, @@ -33254,6 +35740,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -33411,6 +35902,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -33457,6 +35950,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Overhead Corner Locker".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -33525,6 +36020,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Overhead Locker".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -33672,6 +36169,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -33721,6 +36223,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -33770,6 +36277,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -33811,6 +36320,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -33824,6 +36338,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -33838,6 +36357,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -33890,6 +36411,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -33943,6 +36466,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -33994,6 +36519,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Picture Frame Thick Landscape Large".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -34007,6 +36534,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Picture Frame Thick Landscape Small".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -34020,6 +36549,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Picture Frame Thick Landscape Large".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -34033,6 +36564,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Picture Frame Thick Landscape Small".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -34046,6 +36579,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Picture Frame Thick Mount Portrait Large".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -34059,6 +36594,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Picture Frame Thick Mount Portrait Small".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -34072,6 +36609,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Picture Frame Thick Portrait Large".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -34085,6 +36624,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Picture Frame Thick Portrait Small".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -34098,6 +36639,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Picture Frame Thin Landscape Large".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -34111,6 +36654,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Picture Frame Thin Landscape Small".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -34124,6 +36669,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Picture Frame Thin Landscape Large".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -34137,6 +36684,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Picture Frame Thin Landscape Small".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -34150,6 +36699,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Picture Frame Thin Portrait Large".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -34163,6 +36714,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Picture Frame Thin Portrait Small".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -34176,6 +36729,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Picture Frame Thin Portrait Large".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -34189,6 +36744,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Picture Frame Thin Portrait Small".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -34203,6 +36760,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -34274,6 +36833,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -34287,6 +36851,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -34301,6 +36870,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -34315,6 +36889,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -34329,6 +36908,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -34343,6 +36927,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -34357,6 +36946,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -34371,6 +36965,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -34422,6 +37018,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -34470,6 +37068,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -34484,6 +37087,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -34525,6 +37130,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -34539,6 +37149,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -34553,6 +37168,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -34567,6 +37187,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -34581,6 +37206,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -34595,6 +37225,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -34609,6 +37244,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -34623,6 +37263,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -34637,6 +37282,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -34678,6 +37325,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -34727,6 +37376,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -34741,6 +37395,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -34782,6 +37441,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -34823,6 +37487,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -34864,6 +37533,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -34878,6 +37552,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ), @@ -34892,6 +37571,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant } @@ -34911,6 +37595,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Ladder Platform".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -34924,6 +37610,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Plinth".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, slots: vec![SlotInfo { name : "".into(), typ : Class::None }] .into_iter() .collect(), @@ -34940,6 +37628,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Portables Connector".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -35005,6 +37695,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Power Connector".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -35069,6 +37761,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -35130,6 +37824,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -35180,6 +37876,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -35241,6 +37939,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -35286,6 +37986,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -35331,6 +38033,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -35390,6 +38094,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -35448,6 +38154,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -35506,6 +38214,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -35561,6 +38271,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -35635,6 +38347,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -35711,6 +38425,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -35757,6 +38473,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -35803,6 +38521,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -35850,6 +38570,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -35905,6 +38627,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -35953,6 +38677,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -36030,6 +38756,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -36084,6 +38812,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Railing Industrial (Type 1)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -36098,6 +38828,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Recycler".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -36183,6 +38915,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -36426,6 +39163,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Reinforced Window (Composite)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -36440,6 +39179,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Reinforced Window (Composite Steel)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -36454,6 +39195,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Reinforced Window (Padded)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -36468,6 +39211,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Reinforced Window (Thin)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -36481,6 +39226,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -36582,6 +39329,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -36637,7 +39386,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ), ( 150135861i32, - StructureLogicDeviceMemoryTemplate { + StructureCircuitHolderTemplate { prefab: PrefabInfo { prefab_name: "StructureRocketCircuitHousing".into(), prefab_hash: 150135861i32, @@ -36645,6 +39394,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Rocket Circuit Housing".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -36701,11 +39452,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_open_state: false, has_reagents: false, }, - memory: MemoryInfo { - instructions: None, - memory_access: MemoryAccess::ReadWrite, - memory_size: 0u32, - }, } .into(), ), @@ -36719,6 +39465,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -36783,7 +39534,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ), ( 1781051034i32, - StructureLogicDeviceMemoryTemplate { + StructureLogicDeviceConsumerMemoryTemplate { prefab: PrefabInfo { prefab_name: "StructureRocketManufactory".into(), prefab_hash: 1781051034i32, @@ -36791,6 +39542,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Rocket Manufactory".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -36848,6 +39601,22 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_open_state: true, has_reagents: true, }, + consumer_info: ConsumerInfo { + consumed_resouces: 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(), + }, memory: MemoryInfo { instructions: Some( vec![ @@ -36899,6 +39668,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Rocket Miner".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -36963,6 +39734,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Rocket Scanner".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() @@ -37019,6 +39792,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Launch Tower".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -37032,6 +39807,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -37086,6 +39863,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Rover Frame".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -37099,6 +39878,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "SDB Hopper".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() @@ -37152,6 +39933,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "SDB Hopper Advanced".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() @@ -37208,6 +39991,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "SDB Silo".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -37282,6 +40067,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -37338,7 +40125,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ), ( -641491515i32, - StructureLogicDeviceMemoryTemplate { + StructureLogicDeviceConsumerMemoryTemplate { prefab: PrefabInfo { prefab_name: "StructureSecurityPrinter".into(), prefab_hash: -641491515i32, @@ -37347,6 +40134,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Security Printer".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -37404,6 +40193,22 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_open_state: true, has_reagents: true, }, + consumer_info: ConsumerInfo { + consumed_resouces: 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(), + }, memory: MemoryInfo { instructions: Some( vec![ @@ -37454,6 +40259,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Shelf".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : @@ -37475,6 +40282,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Shelf Medium".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -37670,6 +40479,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Short Corner Locker".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -37738,6 +40549,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Short Locker".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -37884,6 +40697,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -37934,6 +40749,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -37987,6 +40804,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -38027,6 +40846,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -38067,6 +40888,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Single Bed".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -38122,6 +40945,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -38195,6 +41023,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![(0u32, vec![] .into_iter().collect())] .into_iter() @@ -38265,6 +41098,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![(0u32, vec![] .into_iter().collect())] .into_iter() @@ -38335,6 +41173,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![(0u32, vec![] .into_iter().collect())] .into_iter() @@ -38405,6 +41248,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Droid Sleeper Vertical".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() @@ -38461,6 +41306,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -38510,6 +41357,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -38559,6 +41408,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -38608,6 +41459,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -38672,6 +41525,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Small (Table Backless Double)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -38685,6 +41540,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Small (Table Backless Single)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -38698,6 +41555,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Small (Table Dinner Single)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -38711,6 +41570,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Small (Table Rectangle Double)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -38724,6 +41585,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Small (Table Rectangle Single)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -38737,6 +41600,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Small (Table Thick Double)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -38750,6 +41615,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Small Table (Thick Single)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -38764,6 +41631,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -38814,6 +41683,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -38863,6 +41734,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -38913,6 +41786,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -38963,6 +41838,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -39014,6 +41891,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -39063,6 +41942,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -39112,6 +41993,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -39153,7 +42036,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ), ( 813146305i32, - StructureLogicDeviceTemplate { + StructureLogicDeviceConsumerTemplate { prefab: PrefabInfo { prefab_name: "StructureSolidFuelGenerator".into(), prefab_hash: 813146305i32, @@ -39162,6 +42045,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Generator (Solid Fuel)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -39222,6 +42107,15 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_open_state: false, has_reagents: false, }, + consumer_info: ConsumerInfo { + consumed_resouces: vec![ + "ItemCharcoal".into(), "ItemCoalOre".into(), "ItemSolidFuel" + .into() + ] + .into_iter() + .collect(), + processed_reagents: vec![].into_iter().collect(), + }, } .into(), ), @@ -39236,6 +42130,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Sorter".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -39348,6 +42244,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Stacker".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -39448,6 +42346,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Stacker".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -39547,6 +42447,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Stairs".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -39560,6 +42462,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Stairs with Rail (Left)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -39573,6 +42477,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Stairs with Rail (Right)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -39586,6 +42492,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Stairs with Rails".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -39599,6 +42507,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Stairwell (Back Left)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -39612,6 +42522,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Stairwell (Back Passthrough)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -39625,6 +42537,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Stairwell (Back Right)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -39638,6 +42552,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Stairwell (Front Left)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -39651,6 +42567,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Stairwell (Front Passthrough)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -39664,6 +42582,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Stairwell (Front Right)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -39677,6 +42597,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Stairwell (No Doors)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -39691,6 +42613,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![(0u32, vec![] .into_iter().collect())] .into_iter() @@ -39776,6 +42703,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Locker".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -40118,6 +43047,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Suit Storage".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -40226,6 +43157,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -40297,6 +43233,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -40369,6 +43310,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![SlotInfo { name : "".into(), typ : Class::None }] .into_iter() .collect(), @@ -40386,6 +43332,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ SlotInfo { name : "Portable Slot".into(), typ : Class::None } ] @@ -40404,6 +43355,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -40475,6 +43431,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -40546,6 +43507,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -40617,6 +43583,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -40680,7 +43651,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ), ( -465741100i32, - StructureLogicDeviceMemoryTemplate { + StructureLogicDeviceConsumerMemoryTemplate { prefab: PrefabInfo { prefab_name: "StructureToolManufactory".into(), prefab_hash: -465741100i32, @@ -40689,6 +43660,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Tool Manufactory".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -40746,6 +43719,22 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_open_state: true, has_reagents: true, }, + consumer_info: ConsumerInfo { + consumed_resouces: 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(), + }, memory: MemoryInfo { instructions: Some( vec![ @@ -40796,6 +43785,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Torpedo Rack".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "Torpedo".into(), typ : Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ : Class::Torpedo }, SlotInfo { name : @@ -40821,6 +43812,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -40870,6 +43863,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -40925,6 +43920,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -40978,6 +43975,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -41031,6 +44030,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -41084,6 +44085,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -41136,6 +44139,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -41184,6 +44189,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -41245,6 +44252,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Unloader".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -41333,6 +44342,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -41379,6 +44390,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "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![ @@ -41429,6 +44442,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Vending Machine".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() @@ -41651,6 +44666,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -41705,6 +44722,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Arch)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -41718,6 +44737,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Arch Arrow)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -41731,6 +44752,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Arch Corner Round)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -41744,6 +44767,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Arch Corner Square)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -41757,6 +44782,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Arch Corner Triangle)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -41770,6 +44797,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Arch Plating)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -41783,6 +44812,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Arch Two Tone)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -41797,6 +44828,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall Cooler".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -41864,6 +44897,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Flat)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -41877,6 +44912,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Flat Corner Round)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -41890,6 +44927,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Flat Corner Square)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -41903,6 +44942,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Flat Corner Triangle)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -41916,6 +44957,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Flat Corner Triangle Flat)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -41929,6 +44972,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Geometry Corner)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -41942,6 +44987,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Geometry Straight)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -41955,6 +45002,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Geometry T)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -41968,6 +45017,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Geometry T Mirrored)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -41982,6 +45033,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall Heater".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -42046,6 +45099,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Iron Wall (Type 1)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42059,6 +45114,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Iron Wall (Type 2)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42072,6 +45129,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Iron Wall (Type 3)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42085,6 +45144,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Iron Wall (Type 4)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42098,6 +45159,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Large Panel)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42111,6 +45174,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Large Panel Arrow)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42124,6 +45189,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -42172,6 +45239,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall Light (Battery)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -42237,6 +45306,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Padded Arch)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42250,6 +45321,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Padded Arch Corner)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42263,6 +45336,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Padded Arch Light Fitting Top)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42276,6 +45351,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Padded Arch Lights Fittings)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42289,6 +45366,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Padded Corner)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42302,6 +45381,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Padded Corner Thin)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42315,6 +45396,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Padded No Border)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42328,6 +45411,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Padded No Border Corner)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42341,6 +45426,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Padded Thin No Border)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42354,6 +45441,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Padded Thin No Border Corner)".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42367,6 +45456,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Padded Window)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42380,6 +45471,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Padded Window Thin)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42393,6 +45486,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Padding)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42406,6 +45501,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Padding Arch Vent)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42419,6 +45516,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Padding Light Fitting)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42432,6 +45531,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Padding Thin)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42445,6 +45546,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Plating)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42458,6 +45561,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Small Panels And Hatch)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42471,6 +45576,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Small Panels Arrow)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42484,6 +45591,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Small Panels Mono Chrome)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42497,6 +45606,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Small Panels Open)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42510,6 +45621,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall (Small Panels Two Tone)".into(), }, structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42523,6 +45636,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Wall Vent".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -42536,6 +45651,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Water Bottle Filler".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -42617,6 +45734,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Water Bottle Filler Bottom".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -42698,6 +45817,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Waterbottle Filler".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -42783,6 +45904,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Waterbottle Filler".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -42868,6 +45991,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -42922,6 +46047,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -42963,6 +46090,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Water Purifier".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() @@ -43024,6 +46153,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Liquid Wall Cooler".into(), }, structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -43091,6 +46222,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -43151,6 +46284,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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![ @@ -43199,6 +46334,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< name: "Window Shutter".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![ @@ -43264,6 +46401,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -43285,6 +46424,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), @@ -43306,6 +46447,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Uniform, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "Access Card" @@ -43336,6 +46479,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Uniform, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "Access Card" @@ -43365,6 +46510,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Uniform, sorting_class: SortingClass::Clothing, }, + thermal_info: None, + internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "Access Card" @@ -43394,6 +46541,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -43444,6 +46593,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -43502,6 +46653,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::None, sorting_class: SortingClass::Tools, }, + thermal_info: None, + internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), @@ -43560,6 +46713,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< slot_class: Class::Torpedo, sorting_class: SortingClass::Default, }, + thermal_info: None, + internal_atmo_info: None, } .into(), ), diff --git a/stationeers_data/src/templates.rs b/stationeers_data/src/templates.rs index bf560db..34c468b 100644 --- a/stationeers_data/src/templates.rs +++ b/stationeers_data/src/templates.rs @@ -14,27 +14,45 @@ pub enum ObjectTemplate { 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), } #[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, } } } @@ -62,6 +80,11 @@ impl From for ObjectTemplate { Self::StructureLogicDevice(value) } } +impl From for ObjectTemplate { + fn from(value: StructureLogicDeviceConsumerTemplate) -> Self { + Self::StructureLogicDeviceConsumer(value) + } +} impl From for ObjectTemplate { fn from(value: StructureLogicDeviceMemoryTemplate) -> Self { @@ -69,6 +92,12 @@ impl From for ObjectTemplate { } } +impl From for ObjectTemplate { + fn from(value: StructureLogicDeviceConsumerMemoryTemplate) -> Self { + Self::StructureLogicDeviceConsumerMemory(value) + } +} + impl From for ObjectTemplate { fn from(value: ItemTemplate) -> Self { Self::Item(value) @@ -81,6 +110,12 @@ impl From for ObjectTemplate { } } +impl From for ObjectTemplate { + fn from(value: ItemConsumerTemplate) -> Self { + Self::ItemConsumer(value) + } +} + impl From for ObjectTemplate { fn from(value: ItemLogicTemplate) -> Self { Self::ItemLogic(value) @@ -93,6 +128,36 @@ impl From for ObjectTemplate { } } +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) + } +} + #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct PrefabInfo { pub prefab_name: String, @@ -133,6 +198,7 @@ pub struct ConnectionInfo { pub role: ConnectionRole, } +#[allow(clippy::struct_excessive_bools)] #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] pub struct DeviceInfo { pub connection_list: Vec, @@ -147,6 +213,12 @@ pub struct DeviceInfo { pub has_reagents: bool, } +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct ConsumerInfo { + pub consumed_resouces: Vec, + pub processed_reagents: Vec, +} + #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct StructureInfo { pub small_grid: bool, @@ -166,16 +238,37 @@ pub struct MemoryInfo { pub memory_size: u32, } +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct ThermalInfo { + pub convection_factor: f32, + pub radiation_factor: f32, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct InternalAtmoInfo { + pub volume: f32, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct SuitInfo { + pub hygine_reduction_multiplier: f32, + pub waste_max_pressure: f32, +} + #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] pub struct StructureTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, + pub thermal_info: Option, + pub internal_atmo_info: Option, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] pub struct StructureSlotsTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, + pub thermal_info: Option, + pub internal_atmo_info: Option, pub slots: Vec, } @@ -183,6 +276,8 @@ pub struct StructureSlotsTemplate { pub struct StructureLogicTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, + pub thermal_info: Option, + pub internal_atmo_info: Option, pub logic: LogicInfo, pub slots: Vec, } @@ -191,38 +286,94 @@ pub struct StructureLogicTemplate { pub struct StructureLogicDeviceTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, + pub thermal_info: Option, + pub internal_atmo_info: Option, pub logic: LogicInfo, pub slots: Vec, pub device: DeviceInfo, } +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct StructureLogicDeviceConsumerTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub logic: LogicInfo, + pub slots: Vec, + pub device: DeviceInfo, + pub consumer_info: ConsumerInfo, +} + #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] pub struct StructureLogicDeviceMemoryTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, + pub thermal_info: Option, + pub internal_atmo_info: Option, pub logic: LogicInfo, pub slots: Vec, pub device: DeviceInfo, pub memory: MemoryInfo, } +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct StructureCircuitHolderTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub logic: LogicInfo, + pub slots: Vec, + pub device: DeviceInfo, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct StructureLogicDeviceConsumerMemoryTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub logic: LogicInfo, + pub slots: Vec, + pub device: DeviceInfo, + pub consumer_info: ConsumerInfo, + pub memory: MemoryInfo, +} + #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] pub struct ItemTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, + pub thermal_info: Option, + pub internal_atmo_info: Option, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] pub struct ItemSlotsTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, + pub thermal_info: Option, + pub internal_atmo_info: Option, pub slots: Vec, } +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct ItemConsumerTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub slots: Vec, + pub consumer_info: ConsumerInfo, +} + #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] pub struct ItemLogicTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, + pub thermal_info: Option, + pub internal_atmo_info: Option, pub logic: LogicInfo, pub slots: Vec, } @@ -231,7 +382,52 @@ pub struct ItemLogicTemplate { pub struct ItemLogicMemoryTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, + pub thermal_info: Option, + pub internal_atmo_info: Option, pub logic: LogicInfo, pub slots: Vec, pub memory: MemoryInfo, } + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct ItemCircuitHolderTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub logic: LogicInfo, + pub slots: Vec, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct ItemSuitTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub slots: Vec, + pub suit_info: SuitInfo, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct ItemSuitLogicTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub logic: LogicInfo, + pub slots: Vec, + pub suit_info: SuitInfo, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct ItemSuitCircuitHolderTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub logic: LogicInfo, + pub slots: Vec, + pub suit_info: SuitInfo, + pub memory: MemoryInfo, +} diff --git a/xtask/src/generate/database.rs b/xtask/src/generate/database.rs index a658e48..7f39434 100644 --- a/xtask/src/generate/database.rs +++ b/xtask/src/generate/database.rs @@ -1,3 +1,5 @@ +#![allow(clippy::module_name_repetitions, clippy::enum_glob_use)] + use std::{ collections::BTreeMap, io::{BufWriter, Write}, @@ -9,22 +11,30 @@ use serde_derive::{Deserialize, Serialize}; use crate::{ enums, - stationpedia::{self, Page, Stationpedia}, + stationpedia::{self, Memory, Page, Stationpedia}, }; -use stationeers_data::templates::{ - ConnectionInfo, DeviceInfo, Instruction, ItemInfo, ItemLogicMemoryTemplate, ItemLogicTemplate, - ItemSlotsTemplate, ItemTemplate, LogicInfo, MemoryInfo, ObjectTemplate, PrefabInfo, SlotInfo, - StructureInfo, StructureLogicDeviceMemoryTemplate, StructureLogicDeviceTemplate, - StructureLogicTemplate, StructureSlotsTemplate, StructureTemplate, +use stationeers_data::{ + enums::MemoryAccess, + templates::{ + ConnectionInfo, ConsumerInfo, DeviceInfo, Instruction, InternalAtmoInfo, + ItemCircuitHolderTemplate, ItemConsumerTemplate, ItemInfo, ItemLogicMemoryTemplate, + ItemLogicTemplate, ItemSlotsTemplate, ItemSuitCircuitHolderTemplate, ItemSuitLogicTemplate, + ItemSuitTemplate, ItemTemplate, LogicInfo, MemoryInfo, ObjectTemplate, PrefabInfo, + SlotInfo, StructureCircuitHolderTemplate, StructureInfo, + StructureLogicDeviceConsumerMemoryTemplate, StructureLogicDeviceConsumerTemplate, + StructureLogicDeviceMemoryTemplate, StructureLogicDeviceTemplate, StructureLogicTemplate, + StructureSlotsTemplate, StructureTemplate, SuitInfo, ThermalInfo, + }, }; +#[allow(clippy::too_many_lines)] pub fn generate_database( stationpedia: &stationpedia::Stationpedia, enums: &enums::Enums, workspace: &std::path::Path, ) -> color_eyre::Result> { - let templates = generate_templates(stationpedia)?; + let templates = generate_templates(stationpedia); eprintln!("Writing prefab database ..."); @@ -46,8 +56,19 @@ pub fn generate_database( | StructureSlots(_) | StructureLogic(_) | StructureLogicDevice(_) - | StructureLogicDeviceMemory(_) => Some(val.prefab().prefab_name.clone()), - Item(_) | ItemSlots(_) | ItemLogic(_) | ItemLogicMemory(_) => None, + | StructureCircuitHolder(_) + | StructureLogicDeviceConsumer(_) + | StructureLogicDeviceMemory(_) + | StructureLogicDeviceConsumerMemory(_) => Some(val.prefab().prefab_name.clone()), + Item(_) + | ItemSlots(_) + | ItemConsumer(_) + | ItemLogic(_) + | ItemCircuitHolder(_) + | ItemLogicMemory(_) + | ItemSuit(_) + | ItemSuitLogic(_) + | ItemSuitCircuitHolder(_) => None, } }) .collect(); @@ -60,10 +81,19 @@ pub fn generate_database( | StructureSlots(_) | StructureLogic(_) | StructureLogicDevice(_) - | StructureLogicDeviceMemory(_) => None, - Item(_) | ItemSlots(_) | ItemLogic(_) | ItemLogicMemory(_) => { - Some(val.prefab().prefab_name.clone()) - } + | StructureCircuitHolder(_) + | StructureLogicDeviceConsumer(_) + | StructureLogicDeviceMemory(_) + | StructureLogicDeviceConsumerMemory(_) => None, + Item(_) + | ItemSlots(_) + | ItemConsumer(_) + | ItemLogic(_) + | ItemCircuitHolder(_) + | ItemLogicMemory(_) + | ItemSuit(_) + | ItemSuitLogic(_) + | ItemSuitCircuitHolder(_) => Some(val.prefab().prefab_name.clone()), } }) .collect(); @@ -76,10 +106,19 @@ pub fn generate_database( | StructureSlots(_) | StructureLogic(_) | StructureLogicDevice(_) + | StructureCircuitHolder(_) + | StructureLogicDeviceConsumer(_) | StructureLogicDeviceMemory(_) + | StructureLogicDeviceConsumerMemory(_) | Item(_) - | ItemSlots(_) => None, - ItemLogic(_) | ItemLogicMemory(_) => Some(val.prefab().prefab_name.clone()), + | ItemSlots(_) + | ItemSuit(_) + | ItemConsumer(_) => None, + ItemLogic(_) + | ItemCircuitHolder(_) + | ItemLogicMemory(_) + | ItemSuitLogic(_) + | ItemSuitCircuitHolder(_) => Some(val.prefab().prefab_name.clone()), } }) .collect(); @@ -89,11 +128,47 @@ pub fn generate_database( .filter_map(|(_, val)| { use ObjectTemplate::*; match val { - Structure(_) | StructureSlots(_) | StructureLogic(_) | Item(_) | ItemSlots(_) - | ItemLogic(_) | ItemLogicMemory(_) => None, - StructureLogicDevice(_) | StructureLogicDeviceMemory(_) => { + Structure(_) + | StructureSlots(_) + | StructureLogic(_) + | Item(_) + | ItemSlots(_) + | ItemConsumer(_) + | ItemLogic(_) + | ItemCircuitHolder(_) + | ItemLogicMemory(_) + | ItemSuit(_) + | ItemSuitLogic(_) + | ItemSuitCircuitHolder(_) => None, + StructureLogicDevice(_) + | StructureCircuitHolder(_) + | StructureLogicDeviceMemory(_) + | StructureLogicDeviceConsumer(_) + | StructureLogicDeviceConsumerMemory(_) => Some(val.prefab().prefab_name.clone()), + } + }) + .collect(); + let suits = prefabs + .iter() + .filter_map(|(_, val)| { + use ObjectTemplate::*; + match val { + ItemSuitCircuitHolder(_) | ItemSuitLogic(_) | ItemSuit(_) => { Some(val.prefab().prefab_name.clone()) } + _ => None, + } + }) + .collect(); + let circuit_holders = prefabs + .iter() + .filter_map(|(_, val)| { + use ObjectTemplate::*; + match val { + ItemSuitCircuitHolder(_) | ItemCircuitHolder(_) | StructureCircuitHolder(_) => { + Some(val.prefab().prefab_name.clone()) + } + _ => None, } }) .collect(); @@ -106,6 +181,8 @@ pub fn generate_database( devices, items, logicable_items, + suits, + circuit_holders, }; let data_path = workspace.join("data"); @@ -114,7 +191,7 @@ pub fn generate_database( } let database_path = data_path.join("database.json"); let mut database_file = std::io::BufWriter::new(std::fs::File::create(database_path)?); - serde_json::to_writer(&mut database_file, &db)?; + serde_json::to_writer_pretty(&mut database_file, &db)?; database_file.flush()?; let prefab_map_path = workspace @@ -171,10 +248,11 @@ fn write_prefab_map( Ok(()) } -fn generate_templates(pedia: &Stationpedia) -> color_eyre::Result> { +#[allow(clippy::too_many_lines)] +fn generate_templates(pedia: &Stationpedia) -> Vec { println!("Generating templates ..."); let mut templates: Vec = Vec::new(); - for page in pedia.pages.iter() { + for page in &pedia.pages { let prefab = PrefabInfo { prefab_name: page.prefab_name.clone(), prefab_hash: page.prefab_hash, @@ -192,14 +270,19 @@ fn generate_templates(pedia: &Stationpedia) -> color_eyre::Result { + } if slot_inserts.is_empty() && item.suit.is_none() => { templates.push(ObjectTemplate::Item(ItemTemplate { prefab, item: item.into(), + thermal_info: thermal.as_ref().map(Into::into), + internal_atmo_info: internal_atmosphere.as_ref().map(Into::into), })); } Page { @@ -209,14 +292,132 @@ fn generate_templates(pedia: &Stationpedia) -> color_eyre::Result { + } if item.suit.is_none() => { templates.push(ObjectTemplate::ItemSlots(ItemSlotsTemplate { prefab, item: item.into(), + thermal_info: thermal.as_ref().map(Into::into), + internal_atmo_info: internal_atmosphere.as_ref().map(Into::into), + slots: slot_inserts_to_info(slot_inserts), + })); + } + Page { + item: Some(item), + structure: None, + logic_info: None, + slot_inserts, + memory: None, + device: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + resource_consumer: Some(consumer), + internal_atmosphere, + thermal, + .. + } if item.suit.is_none() => { + templates.push(ObjectTemplate::ItemConsumer(ItemConsumerTemplate { + prefab, + item: item.into(), + thermal_info: thermal.as_ref().map(Into::into), + internal_atmo_info: internal_atmosphere.as_ref().map(Into::into), + slots: slot_inserts_to_info(slot_inserts), + consumer_info: consumer.into(), + })); + } + Page { + item: Some(item), + structure: None, + logic_info: None, + slot_inserts, + memory: None, + device: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + resource_consumer: None, + internal_atmosphere, + thermal, + .. + } if item.suit.is_some() => { + templates.push(ObjectTemplate::ItemSuit(ItemSuitTemplate { + prefab, + item: item.into(), + thermal_info: thermal.as_ref().map(Into::into), + internal_atmo_info: internal_atmosphere.as_ref().map(Into::into), + slots: slot_inserts_to_info(slot_inserts), + suit_info: item.suit.as_ref().unwrap().into(), + })); + } + Page { + item: Some(item), + structure: None, + logic_info: Some(logic), + slot_inserts, + memory: None, + device: None, + transmission_receiver, + wireless_logic, + circuit_holder: false, + resource_consumer: None, + internal_atmosphere, + thermal, + .. + } if item.suit.is_some() => { + let mut logic: LogicInfo = logic.into(); + if !page.mode_insert.is_empty() { + logic.modes = Some(mode_inserts_to_info(&page.mode_insert)); + } + logic.transmission_receiver = *transmission_receiver; + logic.wireless_logic = *wireless_logic; + logic.circuit_holder = false; + + templates.push(ObjectTemplate::ItemSuitLogic(ItemSuitLogicTemplate { + prefab, + item: item.into(), + thermal_info: thermal.as_ref().map(Into::into), + internal_atmo_info: internal_atmosphere.as_ref().map(Into::into), + logic, + slots: slot_inserts_to_info(slot_inserts), + suit_info: item.suit.as_ref().unwrap().into(), + })); + } + Page { + item: Some(item), + structure: None, + logic_info: Some(logic), + slot_inserts, + memory: None, + device: None, + transmission_receiver, + wireless_logic, + circuit_holder: false, + resource_consumer: None, + internal_atmosphere, + thermal, + .. + } if item.suit.is_none() => { + let mut logic: LogicInfo = logic.into(); + if !page.mode_insert.is_empty() { + logic.modes = Some(mode_inserts_to_info(&page.mode_insert)); + } + logic.transmission_receiver = *transmission_receiver; + logic.wireless_logic = *wireless_logic; + logic.circuit_holder = false; + + templates.push(ObjectTemplate::ItemLogic(ItemLogicTemplate { + prefab, + item: item.into(), + thermal_info: thermal.as_ref().map(Into::into), + internal_atmo_info: internal_atmosphere.as_ref().map(Into::into), + logic, slots: slot_inserts_to_info(slot_inserts), })); } @@ -229,23 +430,30 @@ fn generate_templates(pedia: &Stationpedia) -> color_eyre::Result { + } if item.suit.is_none() => { let mut logic: LogicInfo = logic.into(); if !page.mode_insert.is_empty() { logic.modes = Some(mode_inserts_to_info(&page.mode_insert)); } - logic.transmission_receiver = transmission_receiver.unwrap_or(false); - logic.wireless_logic = wireless_logic.unwrap_or(false); - logic.circuit_holder = circuit_holder.unwrap_or(false); + logic.transmission_receiver = *transmission_receiver; + logic.wireless_logic = *wireless_logic; + logic.circuit_holder = true; - templates.push(ObjectTemplate::ItemLogic(ItemLogicTemplate { - prefab, - item: item.into(), - logic, - slots: slot_inserts_to_info(slot_inserts), - })); + templates.push(ObjectTemplate::ItemCircuitHolder( + ItemCircuitHolderTemplate { + prefab, + item: item.into(), + thermal_info: thermal.as_ref().map(Into::into), + internal_atmo_info: internal_atmosphere.as_ref().map(Into::into), + logic, + slots: slot_inserts_to_info(slot_inserts), + }, + )); } Page { item: Some(item), @@ -256,20 +464,61 @@ fn generate_templates(pedia: &Stationpedia) -> color_eyre::Result { + } if item.suit.is_some() => { let mut logic: LogicInfo = logic.into(); if !page.mode_insert.is_empty() { logic.modes = Some(mode_inserts_to_info(&page.mode_insert)); } - logic.transmission_receiver = transmission_receiver.unwrap_or(false); - logic.wireless_logic = wireless_logic.unwrap_or(false); - logic.circuit_holder = circuit_holder.unwrap_or(false); + logic.transmission_receiver = *transmission_receiver; + logic.wireless_logic = *wireless_logic; + logic.circuit_holder = true; + + templates.push(ObjectTemplate::ItemSuitCircuitHolder( + ItemSuitCircuitHolderTemplate { + prefab, + item: item.into(), + thermal_info: thermal.as_ref().map(Into::into), + internal_atmo_info: internal_atmosphere.as_ref().map(Into::into), + logic, + slots: slot_inserts_to_info(slot_inserts), + suit_info: item.suit.as_ref().unwrap().into(), + memory: memory.into(), + }, + )); + } + Page { + item: Some(item), + structure: None, + logic_info: Some(logic), + slot_inserts, + memory: Some(memory), + device: None, + transmission_receiver, + wireless_logic, + circuit_holder: false, + resource_consumer: None, + internal_atmosphere, + thermal, + .. + } if item.suit.is_none() => { + let mut logic: LogicInfo = logic.into(); + if !page.mode_insert.is_empty() { + logic.modes = Some(mode_inserts_to_info(&page.mode_insert)); + } + logic.transmission_receiver = *transmission_receiver; + logic.wireless_logic = *wireless_logic; + logic.circuit_holder = false; templates.push(ObjectTemplate::ItemLogicMemory(ItemLogicMemoryTemplate { prefab, item: item.into(), + thermal_info: thermal.as_ref().map(Into::into), + internal_atmo_info: internal_atmosphere.as_ref().map(Into::into), logic, slots: slot_inserts_to_info(slot_inserts), memory: memory.into(), @@ -282,14 +531,19 @@ fn generate_templates(pedia: &Stationpedia) -> color_eyre::Result { templates.push(ObjectTemplate::Structure(StructureTemplate { prefab, structure: structure.into(), + thermal_info: thermal.as_ref().map(Into::into), + internal_atmo_info: internal_atmosphere.as_ref().map(Into::into), })); // println!("Structure") } @@ -300,14 +554,19 @@ fn generate_templates(pedia: &Stationpedia) -> color_eyre::Result { templates.push(ObjectTemplate::StructureSlots(StructureSlotsTemplate { prefab, structure: structure.into(), + thermal_info: thermal.as_ref().map(Into::into), + internal_atmo_info: internal_atmosphere.as_ref().map(Into::into), slots: slot_inserts_to_info(slot_inserts), })); // println!("Structure") @@ -321,20 +580,25 @@ fn generate_templates(pedia: &Stationpedia) -> color_eyre::Result { let mut logic: LogicInfo = logic.into(); if !page.mode_insert.is_empty() { logic.modes = Some(mode_inserts_to_info(&page.mode_insert)); } - logic.transmission_receiver = transmission_receiver.unwrap_or(false); - logic.wireless_logic = wireless_logic.unwrap_or(false); - logic.circuit_holder = circuit_holder.unwrap_or(false); + logic.transmission_receiver = *transmission_receiver; + logic.wireless_logic = *wireless_logic; + logic.circuit_holder = false; templates.push(ObjectTemplate::StructureLogic(StructureLogicTemplate { prefab, structure: structure.into(), + thermal_info: thermal.as_ref().map(Into::into), + internal_atmo_info: internal_atmosphere.as_ref().map(Into::into), logic, slots: slot_inserts_to_info(slot_inserts), })); @@ -349,21 +613,26 @@ fn generate_templates(pedia: &Stationpedia) -> color_eyre::Result { let mut logic: LogicInfo = logic.into(); if !page.mode_insert.is_empty() { logic.modes = Some(mode_inserts_to_info(&page.mode_insert)); } - logic.transmission_receiver = transmission_receiver.unwrap_or(false); - logic.wireless_logic = wireless_logic.unwrap_or(false); - logic.circuit_holder = circuit_holder.unwrap_or(false); + logic.transmission_receiver = *transmission_receiver; + logic.wireless_logic = *wireless_logic; + logic.circuit_holder = false; templates.push(ObjectTemplate::StructureLogicDevice( StructureLogicDeviceTemplate { prefab, structure: structure.into(), + thermal_info: thermal.as_ref().map(Into::into), + internal_atmo_info: internal_atmosphere.as_ref().map(Into::into), logic, slots: slot_inserts_to_info(slot_inserts), device: device.into(), @@ -371,6 +640,87 @@ fn generate_templates(pedia: &Stationpedia) -> color_eyre::Result { + let mut logic: LogicInfo = logic.into(); + if !page.mode_insert.is_empty() { + logic.modes = Some(mode_inserts_to_info(&page.mode_insert)); + } + logic.transmission_receiver = *transmission_receiver; + logic.wireless_logic = *wireless_logic; + logic.circuit_holder = true; + + templates.push(ObjectTemplate::StructureCircuitHolder( + StructureCircuitHolderTemplate { + prefab, + structure: structure.into(), + thermal_info: thermal.as_ref().map(Into::into), + internal_atmo_info: internal_atmosphere.as_ref().map(Into::into), + logic, + slots: slot_inserts_to_info(slot_inserts), + device: device.into(), + }, + )); + // println!("Structure") + } + Page { + item: None, + structure: Some(structure), + logic_info: Some(logic), + slot_inserts, + memory: None, + device: Some(device), + transmission_receiver, + wireless_logic, + circuit_holder: false, + resource_consumer: Some(consumer), + internal_atmosphere, + thermal, + .. + } => { + let mut logic: LogicInfo = logic.into(); + if !page.mode_insert.is_empty() { + logic.modes = Some(mode_inserts_to_info(&page.mode_insert)); + } + logic.transmission_receiver = *transmission_receiver; + logic.wireless_logic = *wireless_logic; + logic.circuit_holder = false; + + templates.push(ObjectTemplate::StructureLogicDeviceConsumer( + StructureLogicDeviceConsumerTemplate { + prefab, + structure: structure.into(), + thermal_info: thermal.as_ref().map(Into::into), + internal_atmo_info: internal_atmosphere.as_ref().map(Into::into), + logic, + slots: slot_inserts_to_info(slot_inserts), + device: device.into(), + consumer_info: consumer.into(), + }, + )); + // println!("Structure") + } Page { item: None, structure: Some(structure), @@ -380,20 +730,25 @@ fn generate_templates(pedia: &Stationpedia) -> color_eyre::Result { let mut logic: LogicInfo = logic.into(); if !page.mode_insert.is_empty() { logic.modes = Some(mode_inserts_to_info(&page.mode_insert)); } - logic.transmission_receiver = transmission_receiver.unwrap_or(false); - logic.wireless_logic = wireless_logic.unwrap_or(false); - logic.circuit_holder = circuit_holder.unwrap_or(false); + logic.transmission_receiver = *transmission_receiver; + logic.wireless_logic = *wireless_logic; + logic.circuit_holder = false; templates.push(ObjectTemplate::StructureLogicDeviceMemory( StructureLogicDeviceMemoryTemplate { prefab, structure: structure.into(), + thermal_info: thermal.as_ref().map(Into::into), + internal_atmo_info: internal_atmosphere.as_ref().map(Into::into), logic, slots: slot_inserts_to_info(slot_inserts), device: device.into(), @@ -402,20 +757,74 @@ fn generate_templates(pedia: &Stationpedia) -> color_eyre::Result { + let mut logic: LogicInfo = logic.into(); + if !page.mode_insert.is_empty() { + logic.modes = Some(mode_inserts_to_info(&page.mode_insert)); + } + logic.transmission_receiver = *transmission_receiver; + logic.wireless_logic = *wireless_logic; + logic.circuit_holder = false; + templates.push(ObjectTemplate::StructureLogicDeviceConsumerMemory( + StructureLogicDeviceConsumerMemoryTemplate { + prefab, + structure: structure.into(), + thermal_info: thermal.as_ref().map(Into::into), + internal_atmo_info: internal_atmosphere.as_ref().map(Into::into), + logic, + slots: slot_inserts_to_info(slot_inserts), + device: device.into(), + consumer_info: consumer.into(), + memory: memory.into(), + }, + )); + // println!("Structure") + } _ => panic!( - "Non conforming: {:?} \n\titem: {:?}\n\tstructure: {:?}\n\tlogic_info: {:?}\n\tslot_inserts: {:?}\n\tslot_logic: {:?}\n\tmemory: {:?}\n\tdevice: {:?}", - page.key, - page.item, - page.structure, - page.logic_info, - page.slot_inserts, - page.logic_slot_insert, - page.memory, - page.device, - ), + "\ + Non conforming: {:?} \n\t\ + item: {:?}\n\t\ + structure: {:?}\n\t\ + logic_info: {:?}\n\t\ + slot_inserts: {:?}\n\t\ + slot_logic: {:?}\n\t\ + memory: {:?}\n\t\ + circuit_holder: {:?}\n\t\ + device: {:?}\n\t\ + resource_consumer: {:?}\n\t\ + internal_atmosphere: {:?}\n\t\ + thermal: {:?}\n\t\ + ", + page.key, + page.item, + page.structure, + page.logic_info, + page.slot_inserts, + page.logic_slot_insert, + page.memory, + page.circuit_holder, + page.device, + page.resource_consumer, + page.internal_atmosphere, + page.thermal, + ), } } - Ok(templates) + templates } fn slot_inserts_to_info(slots: &[stationpedia::SlotInsert]) -> Vec { @@ -451,6 +860,34 @@ pub struct ObjectDatabase { pub devices: Vec, pub items: Vec, pub logicable_items: Vec, + pub suits: Vec, + pub circuit_holders: Vec, +} + +impl From<&stationpedia::SuitInfo> for SuitInfo { + fn from(value: &stationpedia::SuitInfo) -> Self { + SuitInfo { + hygine_reduction_multiplier: value.hygine_reduction_multiplier, + waste_max_pressure: value.waste_max_pressure, + } + } +} + +impl From<&stationpedia::ThermalInfo> for ThermalInfo { + fn from(value: &stationpedia::ThermalInfo) -> Self { + ThermalInfo { + convection_factor: value.convection, + radiation_factor: value.radiation, + } + } +} + +impl From<&stationpedia::InternalAtmosphereInfo> for InternalAtmoInfo { + fn from(value: &stationpedia::InternalAtmosphereInfo) -> Self { + InternalAtmoInfo { + volume: value.volume, + } + } } impl From<&stationpedia::LogicInfo> for LogicInfo { @@ -503,12 +940,13 @@ impl From<&stationpedia::LogicInfo> for LogicInfo { impl From<&stationpedia::Item> for ItemInfo { fn from(item: &stationpedia::Item) -> Self { ItemInfo { - consumable: item.consumable.unwrap_or(false), + consumable: item.consumable, filter_type: item.filter_type.as_ref().map(|typ| { typ.parse() .unwrap_or_else(|err| panic!("failed to parse filter type: {err}")) }), - ingredient: item.ingredient.unwrap_or(false), + ingredient: item.ingredient, + #[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)] max_quantity: item.max_quantity.unwrap_or(1.0) as u32, reagents: item .reagents @@ -589,3 +1027,12 @@ impl From<&stationpedia::Memory> for MemoryInfo { } } } + +impl From<&stationpedia::ResourceConsumer> for ConsumerInfo { + fn from(value: &stationpedia::ResourceConsumer) -> Self { + ConsumerInfo { + consumed_resouces: value.consumed_resources.clone(), + processed_reagents: value.processed_reagents.clone(), + } + } +} diff --git a/xtask/src/stationpedia.rs b/xtask/src/stationpedia.rs index 30371cd..c17c25c 100644 --- a/xtask/src/stationpedia.rs +++ b/xtask/src/stationpedia.rs @@ -77,16 +77,26 @@ pub struct Page { pub slot_inserts: Vec, #[serde(rename = "Title")] pub title: String, - #[serde(rename = "TransmissionReceiver")] - pub transmission_receiver: Option, - #[serde(rename = "WirelessLogic")] - pub wireless_logic: Option, - #[serde(rename = "CircuitHolder")] - pub circuit_holder: Option, + #[serde(rename = "TransmissionReceiver", default)] + pub transmission_receiver: bool, + #[serde(rename = "WirelessLogic", default)] + pub wireless_logic: bool, + #[serde(rename = "CircuitHolder", default)] + pub circuit_holder: bool, #[serde(rename = "BasePowerDraw")] pub base_power_draw: Option, #[serde(rename = "MaxPressure")] pub max_pressure: Option, + #[serde(rename = "SourceCode", default)] + pub source_code: bool, + #[serde(rename = "Chargeable")] + pub chargeable: Option, + #[serde(rename = "ResourceConsumer")] + pub resource_consumer: Option, + #[serde(rename = "InternalAtmosphere")] + pub internal_atmosphere: Option, + #[serde(rename = "Thermal")] + pub thermal: Option, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] @@ -231,14 +241,14 @@ pub struct Instruction { #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct Item { - #[serde(rename = "Consumable")] - pub consumable: Option, + #[serde(rename = "Consumable", default)] + pub consumable: bool, #[serde(rename = "FilterType")] pub filter_type: Option, - #[serde(rename = "Ingredient")] - pub ingredient: Option, + #[serde(rename = "Ingredient", default)] + pub ingredient: bool, #[serde(rename = "MaxQuantity")] - pub max_quantity: Option, + pub max_quantity: Option, #[serde(rename = "Reagents")] pub reagents: Option>, #[serde(rename = "SlotClass")] @@ -247,6 +257,18 @@ pub struct Item { pub sorting_class: String, #[serde(rename = "Recipes", default)] pub recipes: Vec, + #[serde(rename = "Wearable", default)] + pub wearable: bool, + #[serde(rename = "Suit", default)] + pub suit: Option, +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +pub struct SuitInfo { + #[serde(rename = "HygineReductionMultiplier")] + pub hygine_reduction_multiplier: f32, + #[serde(rename = "WasteMaxPressure")] + pub waste_max_pressure: f32, } #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] @@ -303,7 +325,7 @@ pub struct RecipeGasMix { pub reagents: BTreeMap, } -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct Device { #[serde(rename = "ConnectionList")] pub connection_list: Vec<(String, String)>, @@ -325,4 +347,44 @@ pub struct Device { pub has_open_state: bool, #[serde(rename = "HasReagents")] pub has_reagents: bool, + #[serde(rename = "Fabricator")] + pub fabricator: Option, +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +pub struct Fabricator { + #[serde(rename = "Tier")] + tier: u32, + #[serde(rename = "TierName")] + pub tier_name: String, + #[serde(rename = "Recipes", default)] + pub recipes: indexmap::IndexMap, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct Chargable { + #[serde(rename = "PowerMaximum")] + pub power_maximum: f32, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +pub struct ResourceConsumer { + #[serde(rename = "ConsumedResources", default)] + pub consumed_resources: Vec, + #[serde(rename = " ProcessedReagents", default)] + pub processed_reagents: Vec, +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +pub struct InternalAtmosphereInfo { + #[serde(rename = "Volume")] + pub volume: f32, +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +pub struct ThermalInfo { + #[serde(rename = "Convection")] + pub convection: f32, + #[serde(rename = "Radiation")] + pub radiation: f32, } From d79726a794061d82f499a8d24fe59d6c41deb5bf Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Mon, 20 May 2024 22:59:30 -0700 Subject: [PATCH 26/50] refactor(vm): drop null fields from json --- data/database.json | 5773 +++++--------------------------- xtask/src/generate/database.rs | 24 +- 2 files changed, 805 insertions(+), 4992 deletions(-) diff --git a/data/database.json b/data/database.json index b092754..1cd7a38 100644 --- a/data/database.json +++ b/data/database.json @@ -9,15 +9,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "AccessCard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "AccessCardBlue": { "prefab": { @@ -28,15 +24,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "AccessCard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "AccessCardBrown": { "prefab": { @@ -47,15 +39,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "AccessCard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "AccessCardGray": { "prefab": { @@ -66,15 +54,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "AccessCard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "AccessCardGreen": { "prefab": { @@ -85,15 +69,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "AccessCard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "AccessCardKhaki": { "prefab": { @@ -104,15 +84,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "AccessCard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "AccessCardOrange": { "prefab": { @@ -123,15 +99,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "AccessCard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "AccessCardPink": { "prefab": { @@ -142,15 +114,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "AccessCard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "AccessCardPurple": { "prefab": { @@ -161,15 +129,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "AccessCard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "AccessCardRed": { "prefab": { @@ -180,15 +144,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "AccessCard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "AccessCardWhite": { "prefab": { @@ -199,15 +159,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "AccessCard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "AccessCardYellow": { "prefab": { @@ -218,15 +174,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "AccessCard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ApplianceChemistryStation": { "prefab": { @@ -237,15 +189,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Appliance", "sorting_class": "Appliances" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Output", @@ -273,15 +221,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Appliance", "sorting_class": "Appliances" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ApplianceDeskLampRight": { "prefab": { @@ -292,15 +236,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Appliance", "sorting_class": "Appliances" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ApplianceMicrowave": { "prefab": { @@ -311,15 +251,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Appliance", "sorting_class": "Appliances" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Output", @@ -357,15 +293,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Appliance", "sorting_class": "Appliances" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Export", @@ -399,15 +331,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Appliance", "sorting_class": "Appliances" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Output", @@ -435,15 +363,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Appliance", "sorting_class": "Appliances" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Input", @@ -460,15 +384,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Appliance", "sorting_class": "Appliances" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Source Plant", @@ -489,15 +409,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Appliance", "sorting_class": "Appliances" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Plant", @@ -514,15 +430,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Appliance", "sorting_class": "Appliances" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Input", @@ -557,15 +469,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Appliance", "sorting_class": "Appliances" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Plant", @@ -626,15 +534,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Appliance", "sorting_class": "Appliances" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "", @@ -651,15 +555,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "Battery_Wireless_cell": { "prefab": { @@ -670,15 +570,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Battery", "sorting_class": "Default" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -709,15 +605,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Battery", "sorting_class": "Default" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -748,15 +640,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Storage" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "", @@ -793,15 +681,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Cartridge", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CartridgeAtmosAnalyser": { "prefab": { @@ -812,15 +696,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Cartridge", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CartridgeConfiguration": { "prefab": { @@ -831,15 +711,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Cartridge", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CartridgeElectronicReader": { "prefab": { @@ -850,15 +726,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Cartridge", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CartridgeGPS": { "prefab": { @@ -869,15 +741,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Cartridge", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CartridgeGuide": { "prefab": { @@ -888,15 +756,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Cartridge", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CartridgeMedicalAnalyser": { "prefab": { @@ -907,15 +771,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Cartridge", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CartridgeNetworkAnalyser": { "prefab": { @@ -926,15 +786,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Cartridge", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CartridgeOreScanner": { "prefab": { @@ -945,15 +801,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Cartridge", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CartridgeOreScannerColor": { "prefab": { @@ -964,15 +816,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Cartridge", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CartridgePlantAnalyser": { "prefab": { @@ -983,15 +831,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Cartridge", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CartridgeTracker": { "prefab": { @@ -1002,15 +846,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Cartridge", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CircuitboardAdvAirlockControl": { "prefab": { @@ -1021,15 +861,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Circuitboard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CircuitboardAirControl": { "prefab": { @@ -1040,15 +876,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Circuitboard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CircuitboardAirlockControl": { "prefab": { @@ -1059,15 +891,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Circuitboard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CircuitboardCameraDisplay": { "prefab": { @@ -1078,15 +906,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Circuitboard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CircuitboardDoorControl": { "prefab": { @@ -1097,15 +921,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Circuitboard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CircuitboardGasDisplay": { "prefab": { @@ -1116,15 +936,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Circuitboard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CircuitboardGraphDisplay": { "prefab": { @@ -1135,15 +951,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Circuitboard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CircuitboardHashDisplay": { "prefab": { @@ -1154,15 +966,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Circuitboard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CircuitboardModeControl": { "prefab": { @@ -1173,15 +981,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Circuitboard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CircuitboardPowerControl": { "prefab": { @@ -1192,15 +996,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Circuitboard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CircuitboardShipDisplay": { "prefab": { @@ -1211,15 +1011,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Circuitboard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CircuitboardSolarControl": { "prefab": { @@ -1230,15 +1026,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Circuitboard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "CompositeRollCover": { "prefab": { @@ -1250,8 +1042,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -1276,7 +1066,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -1296,15 +1085,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Storage" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "", @@ -1357,15 +1142,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 25, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "DeviceLfoVolume": { "prefab": { @@ -1377,8 +1158,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -1417,7 +1196,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -1438,8 +1216,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -1600,7 +1376,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -1620,10 +1395,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Atmospherics" }, @@ -1631,7 +1404,6 @@ "convection_factor": 0.0, "radiation_factor": 0.0 }, - "internal_atmo_info": null, "slots": [ { "name": "Battery", @@ -1648,15 +1420,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Storage" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "", @@ -1709,15 +1477,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -1738,7 +1502,6 @@ "On": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -1759,10 +1522,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Atmospherics" }, @@ -1770,7 +1531,6 @@ "convection_factor": 0.025, "radiation_factor": 0.025 }, - "internal_atmo_info": null, "slots": [ { "name": "Gas Canister", @@ -1787,10 +1547,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, @@ -1798,7 +1556,6 @@ "convection_factor": 0.025, "radiation_factor": 0.025 }, - "internal_atmo_info": null, "slots": [ { "name": "Gas Canister", @@ -1815,10 +1572,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, @@ -1826,7 +1581,6 @@ "convection_factor": 0.025, "radiation_factor": 0.025 }, - "internal_atmo_info": null, "slots": [ { "name": "Gas Canister", @@ -1843,10 +1597,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, @@ -1854,7 +1606,6 @@ "convection_factor": 0.025, "radiation_factor": 0.025 }, - "internal_atmo_info": null, "slots": [ { "name": "Gas Canister", @@ -1871,10 +1622,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, @@ -1882,7 +1631,6 @@ "convection_factor": 0.025, "radiation_factor": 0.025 }, - "internal_atmo_info": null, "slots": [ { "name": "Gas Canister", @@ -1899,10 +1647,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, @@ -1910,7 +1656,6 @@ "convection_factor": 0.025, "radiation_factor": 0.025 }, - "internal_atmo_info": null, "slots": [ { "name": "Gas Canister", @@ -1927,10 +1672,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, @@ -1938,7 +1681,6 @@ "convection_factor": 0.025, "radiation_factor": 0.025 }, - "internal_atmo_info": null, "slots": [ { "name": "Gas Canister", @@ -1955,10 +1697,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, @@ -1966,7 +1706,6 @@ "convection_factor": 0.025, "radiation_factor": 0.025 }, - "internal_atmo_info": null, "slots": [ { "name": "Gas Canister", @@ -1983,10 +1722,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, @@ -1994,7 +1731,6 @@ "convection_factor": 0.025, "radiation_factor": 0.025 }, - "internal_atmo_info": null, "slots": [ { "name": "Gas Canister", @@ -2011,10 +1747,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, @@ -2022,7 +1756,6 @@ "convection_factor": 0.025, "radiation_factor": 0.025 }, - "internal_atmo_info": null, "slots": [ { "name": "Gas Canister", @@ -2039,10 +1772,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Atmospherics" }, @@ -2050,7 +1781,6 @@ "convection_factor": 0.025, "radiation_factor": 0.025 }, - "internal_atmo_info": null, "slots": [ { "name": "Gas Canister", @@ -2067,10 +1797,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, @@ -2078,7 +1806,6 @@ "convection_factor": 0.0, "radiation_factor": 0.0 }, - "internal_atmo_info": null, "slots": [ { "name": "Gas Canister", @@ -2095,10 +1822,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Atmospherics" }, @@ -2106,7 +1831,6 @@ "convection_factor": 0.0, "radiation_factor": 0.0 }, - "internal_atmo_info": null, "slots": [ { "name": "Gas Canister", @@ -2123,10 +1847,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Atmospherics" }, @@ -2134,7 +1856,6 @@ "convection_factor": 0.0, "radiation_factor": 0.0 }, - "internal_atmo_info": null, "slots": [ { "name": "Gas Canister", @@ -2155,10 +1876,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Atmospherics" }, @@ -2166,7 +1885,6 @@ "convection_factor": 0.05, "radiation_factor": 0.05 }, - "internal_atmo_info": null, "slots": [ { "name": "Plant", @@ -2215,15 +1933,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -2245,7 +1959,6 @@ "On": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -2266,10 +1979,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Atmospherics" }, @@ -2277,7 +1988,6 @@ "convection_factor": 0.025, "radiation_factor": 0.025 }, - "internal_atmo_info": null, "slots": [ { "name": "Liquid Canister", @@ -2294,10 +2004,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Atmospherics" }, @@ -2305,7 +2013,6 @@ "convection_factor": 0.0, "radiation_factor": 0.0 }, - "internal_atmo_info": null, "slots": [ { "name": "Liquid Canister", @@ -2322,10 +2029,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Atmospherics" }, @@ -2333,7 +2038,6 @@ "convection_factor": 0.0, "radiation_factor": 0.0 }, - "internal_atmo_info": null, "slots": [ { "name": "Liquid Canister", @@ -2350,10 +2054,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Atmospherics" }, @@ -2361,7 +2063,6 @@ "convection_factor": 0.0, "radiation_factor": 0.0 }, - "internal_atmo_info": null, "slots": [ { "name": "Battery", @@ -2386,15 +2087,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ElectronicPrinterMod": { "prefab": { @@ -2405,15 +2102,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ElevatorCarrage": { "prefab": { @@ -2424,15 +2117,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "EntityChick": { "prefab": { @@ -2443,10 +2132,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, @@ -2454,7 +2141,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "slots": [ { "name": "Brain", @@ -2471,10 +2157,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, @@ -2482,7 +2166,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "slots": [ { "name": "Brain", @@ -2499,10 +2182,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, @@ -2510,7 +2191,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "slots": [ { "name": "Brain", @@ -2527,10 +2207,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, @@ -2538,7 +2216,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "slots": [ { "name": "Brain", @@ -2555,10 +2232,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, @@ -2566,7 +2241,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "slots": [ { "name": "Brain", @@ -2583,15 +2257,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "FireArmSMG": { "prefab": { @@ -2602,15 +2272,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "", @@ -2627,9 +2293,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "Flag_ODA_4m": { "prefab": { @@ -2640,9 +2304,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "Flag_ODA_6m": { "prefab": { @@ -2653,9 +2315,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "Flag_ODA_8m": { "prefab": { @@ -2666,9 +2326,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "FlareGun": { "prefab": { @@ -2679,15 +2337,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Magazine", @@ -2713,7 +2367,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {} @@ -2844,15 +2497,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Magazine", @@ -2869,15 +2518,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Magazine", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "HumanSkull": { "prefab": { @@ -2888,15 +2533,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ImGuiCircuitboardAirlockControl": { "prefab": { @@ -2907,15 +2548,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Circuitboard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemActiveVent": { "prefab": { @@ -2926,15 +2563,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemAdhesiveInsulation": { "prefab": { @@ -2945,15 +2578,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 20, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemAdvancedTablet": { "prefab": { @@ -2964,15 +2593,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -3059,15 +2684,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemAmmoBox": { "prefab": { @@ -3078,15 +2699,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemAngleGrinder": { "prefab": { @@ -3097,15 +2714,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -3125,7 +2738,6 @@ "Activate": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -3146,15 +2758,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -3174,7 +2782,6 @@ "Activate": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -3195,15 +2802,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemAstroloyIngot": { "prefab": { @@ -3214,7 +2817,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -3222,9 +2824,7 @@ }, "slot_class": "Ingot", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemAstroloySheets": { "prefab": { @@ -3235,15 +2835,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "None", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemAuthoringTool": { "prefab": { @@ -3254,15 +2850,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemAuthoringToolRocketNetwork": { "prefab": { @@ -3273,15 +2865,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemBasketBall": { "prefab": { @@ -3292,15 +2880,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemBatteryCell": { "prefab": { @@ -3311,15 +2895,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Battery", "sorting_class": "Default" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -3350,15 +2930,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Battery", "sorting_class": "Default" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -3389,15 +2965,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Battery", "sorting_class": "Default" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -3428,15 +3000,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemBatteryChargerSmall": { "prefab": { @@ -3447,15 +3015,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemBeacon": { "prefab": { @@ -3466,15 +3030,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -3495,7 +3055,6 @@ "On": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -3516,7 +3075,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 100, "reagents": { @@ -3524,9 +3082,7 @@ }, "slot_class": "Ore", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemBreadLoaf": { "prefab": { @@ -3537,15 +3093,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCableAnalyser": { "prefab": { @@ -3556,15 +3108,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCableCoil": { "prefab": { @@ -3575,15 +3123,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Tool", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCableCoilHeavy": { "prefab": { @@ -3594,15 +3138,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Tool", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCableFuse": { "prefab": { @@ -3613,15 +3153,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCannedCondensedMilk": { "prefab": { @@ -3632,15 +3168,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCannedEdamame": { "prefab": { @@ -3651,15 +3183,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCannedMushroom": { "prefab": { @@ -3670,15 +3198,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCannedPowderedEggs": { "prefab": { @@ -3689,15 +3213,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCannedRicePudding": { "prefab": { @@ -3708,15 +3228,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCerealBar": { "prefab": { @@ -3727,15 +3243,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCharcoal": { "prefab": { @@ -3746,7 +3258,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 200, "reagents": { @@ -3754,9 +3265,7 @@ }, "slot_class": "Ore", "sorting_class": "Ores" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemChemLightBlue": { "prefab": { @@ -3767,15 +3276,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemChemLightGreen": { "prefab": { @@ -3786,15 +3291,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemChemLightRed": { "prefab": { @@ -3805,15 +3306,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemChemLightWhite": { "prefab": { @@ -3824,15 +3321,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemChemLightYellow": { "prefab": { @@ -3843,15 +3336,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemChocolateBar": { "prefab": { @@ -3862,15 +3351,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemChocolateCake": { "prefab": { @@ -3881,15 +3366,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemChocolateCerealBar": { "prefab": { @@ -3900,15 +3381,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCoalOre": { "prefab": { @@ -3919,7 +3396,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 50, "reagents": { @@ -3927,9 +3403,7 @@ }, "slot_class": "Ore", "sorting_class": "Ores" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCobaltOre": { "prefab": { @@ -3940,7 +3414,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 50, "reagents": { @@ -3948,9 +3421,7 @@ }, "slot_class": "Ore", "sorting_class": "Ores" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCocoaPowder": { "prefab": { @@ -3961,7 +3432,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 20, "reagents": { @@ -3969,9 +3439,7 @@ }, "slot_class": "None", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCocoaTree": { "prefab": { @@ -3982,7 +3450,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 20, "reagents": { @@ -3990,9 +3457,7 @@ }, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCoffeeMug": { "prefab": { @@ -4003,15 +3468,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemConstantanIngot": { "prefab": { @@ -4022,7 +3483,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -4030,9 +3490,7 @@ }, "slot_class": "Ingot", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCookedCondensedMilk": { "prefab": { @@ -4043,7 +3501,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 10, "reagents": { @@ -4051,9 +3508,7 @@ }, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCookedCorn": { "prefab": { @@ -4064,7 +3519,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 10, "reagents": { @@ -4072,9 +3526,7 @@ }, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCookedMushroom": { "prefab": { @@ -4085,7 +3537,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 10, "reagents": { @@ -4093,9 +3544,7 @@ }, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCookedPowderedEggs": { "prefab": { @@ -4106,7 +3555,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 10, "reagents": { @@ -4114,9 +3562,7 @@ }, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCookedPumpkin": { "prefab": { @@ -4127,7 +3573,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 10, "reagents": { @@ -4135,9 +3580,7 @@ }, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCookedRice": { "prefab": { @@ -4148,7 +3591,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 10, "reagents": { @@ -4156,9 +3598,7 @@ }, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCookedSoybean": { "prefab": { @@ -4169,7 +3609,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 10, "reagents": { @@ -4177,9 +3616,7 @@ }, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCookedTomato": { "prefab": { @@ -4190,7 +3627,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 10, "reagents": { @@ -4198,9 +3634,7 @@ }, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCopperIngot": { "prefab": { @@ -4211,7 +3645,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -4219,9 +3652,7 @@ }, "slot_class": "Ingot", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCopperOre": { "prefab": { @@ -4232,7 +3663,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 50, "reagents": { @@ -4240,9 +3670,7 @@ }, "slot_class": "Ore", "sorting_class": "Ores" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCorn": { "prefab": { @@ -4253,7 +3681,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 20, "reagents": { @@ -4261,9 +3688,7 @@ }, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCornSoup": { "prefab": { @@ -4274,15 +3699,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCreditCard": { "prefab": { @@ -4293,15 +3714,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 100000, - "reagents": null, "slot_class": "CreditCard", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCropHay": { "prefab": { @@ -4312,15 +3729,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemCrowbar": { "prefab": { @@ -4331,15 +3744,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemDataDisk": { "prefab": { @@ -4350,15 +3759,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "DataDisk", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemDirtCanister": { "prefab": { @@ -4369,15 +3774,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Ore", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemDirtyOre": { "prefab": { @@ -4388,15 +3789,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "None", "sorting_class": "Ores" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemDisposableBatteryCharger": { "prefab": { @@ -4407,15 +3804,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemDrill": { "prefab": { @@ -4426,15 +3819,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -4454,7 +3843,6 @@ "Activate": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -4475,15 +3863,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemDynamicAirCon": { "prefab": { @@ -4494,15 +3878,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemDynamicScrubber": { "prefab": { @@ -4513,15 +3893,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemEggCarton": { "prefab": { @@ -4532,15 +3908,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Storage" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "", @@ -4577,15 +3949,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 20, - "reagents": null, "slot_class": "None", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemElectrumIngot": { "prefab": { @@ -4596,7 +3964,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -4604,9 +3971,7 @@ }, "slot_class": "Ingot", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemEmergencyAngleGrinder": { "prefab": { @@ -4617,15 +3982,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -4645,7 +4006,6 @@ "Activate": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -4666,15 +4026,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -4694,7 +4050,6 @@ "Activate": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -4715,15 +4070,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemEmergencyDrill": { "prefab": { @@ -4734,15 +4085,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -4762,7 +4109,6 @@ "Activate": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -4783,10 +4129,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Suit", "sorting_class": "Clothing" }, @@ -4837,15 +4181,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemEmergencyScrewdriver": { "prefab": { @@ -4856,15 +4196,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemEmergencySpaceHelmet": { "prefab": { @@ -4875,10 +4211,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Helmet", "sorting_class": "Clothing" }, @@ -4922,7 +4256,6 @@ "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -4938,15 +4271,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Belt", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Tool", @@ -4991,15 +4320,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemEmergencyWrench": { "prefab": { @@ -5010,15 +4335,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemEmptyCan": { "prefab": { @@ -5029,7 +4350,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 10, "reagents": { @@ -5037,9 +4357,7 @@ }, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemEvaSuit": { "prefab": { @@ -5050,10 +4368,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Suit", "sorting_class": "Clothing" }, @@ -5104,15 +4420,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemFern": { "prefab": { @@ -5123,7 +4435,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 100, "reagents": { @@ -5131,9 +4442,7 @@ }, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemFertilizedEgg": { "prefab": { @@ -5144,7 +4453,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 1, "reagents": { @@ -5152,9 +4460,7 @@ }, "slot_class": "Egg", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemFilterFern": { "prefab": { @@ -5165,15 +4471,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemFlagSmall": { "prefab": { @@ -5184,15 +4486,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemFlashingLight": { "prefab": { @@ -5203,15 +4501,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemFlashlight": { "prefab": { @@ -5222,15 +4516,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -5275,7 +4565,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -5283,9 +4572,7 @@ }, "slot_class": "None", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemFlowerBlue": { "prefab": { @@ -5296,15 +4583,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemFlowerGreen": { "prefab": { @@ -5315,15 +4598,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemFlowerOrange": { "prefab": { @@ -5334,15 +4613,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemFlowerRed": { "prefab": { @@ -5353,15 +4628,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemFlowerYellow": { "prefab": { @@ -5372,15 +4643,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemFrenchFries": { "prefab": { @@ -5391,15 +4658,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemFries": { "prefab": { @@ -5410,15 +4673,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasCanisterCarbonDioxide": { "prefab": { @@ -5429,10 +4688,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "GasCanister", "sorting_class": "Atmospherics" }, @@ -5453,10 +4710,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "GasCanister", "sorting_class": "Atmospherics" }, @@ -5477,10 +4732,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "GasCanister", "sorting_class": "Atmospherics" }, @@ -5501,10 +4754,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "GasCanister", "sorting_class": "Atmospherics" }, @@ -5525,10 +4776,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "GasCanister", "sorting_class": "Atmospherics" }, @@ -5549,10 +4798,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "GasCanister", "sorting_class": "Atmospherics" }, @@ -5573,10 +4820,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "GasCanister", "sorting_class": "Atmospherics" }, @@ -5597,10 +4842,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "GasCanister", "sorting_class": "Atmospherics" }, @@ -5621,10 +4864,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "GasCanister", "sorting_class": "Atmospherics" }, @@ -5645,10 +4886,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "LiquidCanister", "sorting_class": "Atmospherics" }, @@ -5672,12 +4911,9 @@ "filter_type": "CarbonDioxide", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterCarbonDioxideInfinite": { "prefab": { @@ -5691,12 +4927,9 @@ "filter_type": "CarbonDioxide", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterCarbonDioxideL": { "prefab": { @@ -5710,12 +4943,9 @@ "filter_type": "CarbonDioxide", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterCarbonDioxideM": { "prefab": { @@ -5729,12 +4959,9 @@ "filter_type": "CarbonDioxide", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterNitrogen": { "prefab": { @@ -5748,12 +4975,9 @@ "filter_type": "Nitrogen", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterNitrogenInfinite": { "prefab": { @@ -5767,12 +4991,9 @@ "filter_type": "Nitrogen", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterNitrogenL": { "prefab": { @@ -5786,12 +5007,9 @@ "filter_type": "Nitrogen", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterNitrogenM": { "prefab": { @@ -5805,12 +5023,9 @@ "filter_type": "Nitrogen", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterNitrousOxide": { "prefab": { @@ -5824,12 +5039,9 @@ "filter_type": "NitrousOxide", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterNitrousOxideInfinite": { "prefab": { @@ -5843,12 +5055,9 @@ "filter_type": "NitrousOxide", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterNitrousOxideL": { "prefab": { @@ -5862,12 +5071,9 @@ "filter_type": "NitrousOxide", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterNitrousOxideM": { "prefab": { @@ -5881,12 +5087,9 @@ "filter_type": "NitrousOxide", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterOxygen": { "prefab": { @@ -5900,12 +5103,9 @@ "filter_type": "Oxygen", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterOxygenInfinite": { "prefab": { @@ -5919,12 +5119,9 @@ "filter_type": "Oxygen", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterOxygenL": { "prefab": { @@ -5938,12 +5135,9 @@ "filter_type": "Oxygen", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterOxygenM": { "prefab": { @@ -5957,12 +5151,9 @@ "filter_type": "Oxygen", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterPollutants": { "prefab": { @@ -5976,12 +5167,9 @@ "filter_type": "Pollutant", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterPollutantsInfinite": { "prefab": { @@ -5995,12 +5183,9 @@ "filter_type": "Pollutant", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterPollutantsL": { "prefab": { @@ -6014,12 +5199,9 @@ "filter_type": "Pollutant", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterPollutantsM": { "prefab": { @@ -6033,12 +5215,9 @@ "filter_type": "Pollutant", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterVolatiles": { "prefab": { @@ -6052,12 +5231,9 @@ "filter_type": "Volatiles", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterVolatilesInfinite": { "prefab": { @@ -6071,12 +5247,9 @@ "filter_type": "Volatiles", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterVolatilesL": { "prefab": { @@ -6090,12 +5263,9 @@ "filter_type": "Volatiles", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterVolatilesM": { "prefab": { @@ -6109,12 +5279,9 @@ "filter_type": "Volatiles", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterWater": { "prefab": { @@ -6128,12 +5295,9 @@ "filter_type": "Steam", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterWaterInfinite": { "prefab": { @@ -6147,12 +5311,9 @@ "filter_type": "Steam", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterWaterL": { "prefab": { @@ -6166,12 +5327,9 @@ "filter_type": "Steam", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasFilterWaterM": { "prefab": { @@ -6185,12 +5343,9 @@ "filter_type": "Steam", "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "GasFilter", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasSensor": { "prefab": { @@ -6201,15 +5356,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGasTankStorage": { "prefab": { @@ -6220,15 +5371,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGlassSheets": { "prefab": { @@ -6239,15 +5386,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "None", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGlasses": { "prefab": { @@ -6258,15 +5401,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Glasses", "sorting_class": "Clothing" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGoldIngot": { "prefab": { @@ -6277,7 +5416,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -6285,9 +5423,7 @@ }, "slot_class": "Ingot", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGoldOre": { "prefab": { @@ -6298,7 +5434,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 50, "reagents": { @@ -6306,9 +5441,7 @@ }, "slot_class": "Ore", "sorting_class": "Ores" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemGrenade": { "prefab": { @@ -6319,15 +5452,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemHEMDroidRepairKit": { "prefab": { @@ -6338,15 +5467,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemHardBackpack": { "prefab": { @@ -6357,15 +5482,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Back", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -6480,7 +5601,6 @@ "logic_types": { "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -6545,15 +5665,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Back", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -6699,7 +5815,6 @@ "On": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -6776,15 +5891,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Back", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Ore", @@ -6909,10 +6020,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Suit", "sorting_class": "Clothing" }, @@ -7061,7 +6170,6 @@ "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": true, "circuit_holder": true @@ -7119,10 +6227,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Helmet", "sorting_class": "Clothing" }, @@ -7166,7 +6272,6 @@ "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -7182,7 +6287,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -7190,9 +6294,7 @@ }, "slot_class": "Ingot", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemHat": { "prefab": { @@ -7203,15 +6305,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Helmet", "sorting_class": "Clothing" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemHighVolumeGasCanisterEmpty": { "prefab": { @@ -7222,10 +6320,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "GasCanister", "sorting_class": "Atmospherics" }, @@ -7246,15 +6342,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Belt", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Tool", @@ -7307,15 +6399,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemIce": { "prefab": { @@ -7326,15 +6414,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemIgniter": { "prefab": { @@ -7345,15 +6429,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemInconelIngot": { "prefab": { @@ -7364,7 +6444,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -7372,9 +6451,7 @@ }, "slot_class": "Ingot", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemInsulation": { "prefab": { @@ -7385,15 +6462,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemIntegratedCircuit10": { "prefab": { @@ -7404,22 +6477,17 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "ProgrammableChip", "sorting_class": "Default" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { "LineNumber": "Read", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -7440,7 +6508,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -7448,9 +6515,7 @@ }, "slot_class": "Ingot", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemIronFrames": { "prefab": { @@ -7461,15 +6526,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 30, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemIronIngot": { "prefab": { @@ -7480,7 +6541,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -7488,9 +6548,7 @@ }, "slot_class": "Ingot", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemIronOre": { "prefab": { @@ -7501,7 +6559,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 50, "reagents": { @@ -7509,9 +6566,7 @@ }, "slot_class": "Ore", "sorting_class": "Ores" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemIronSheets": { "prefab": { @@ -7522,15 +6577,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "None", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemJetpackBasic": { "prefab": { @@ -7541,15 +6592,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Back", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -7650,7 +6697,6 @@ "On": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -7707,15 +6753,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitAccessBridge": { "prefab": { @@ -7726,15 +6768,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitAdvancedComposter": { "prefab": { @@ -7745,15 +6783,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitAdvancedFurnace": { "prefab": { @@ -7764,15 +6798,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitAdvancedPackagingMachine": { "prefab": { @@ -7783,15 +6813,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitAirlock": { "prefab": { @@ -7802,15 +6828,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitAirlockGate": { "prefab": { @@ -7821,15 +6843,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitArcFurnace": { "prefab": { @@ -7840,15 +6858,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitAtmospherics": { "prefab": { @@ -7859,15 +6873,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitAutoMinerSmall": { "prefab": { @@ -7878,15 +6888,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitAutolathe": { "prefab": { @@ -7897,15 +6903,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitAutomatedOven": { "prefab": { @@ -7916,15 +6918,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitBasket": { "prefab": { @@ -7935,15 +6933,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitBattery": { "prefab": { @@ -7954,15 +6948,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitBatteryLarge": { "prefab": { @@ -7973,15 +6963,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitBeacon": { "prefab": { @@ -7992,15 +6978,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitBeds": { "prefab": { @@ -8011,15 +6993,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitBlastDoor": { "prefab": { @@ -8030,15 +7008,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitCentrifuge": { "prefab": { @@ -8049,15 +7023,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitChairs": { "prefab": { @@ -8068,15 +7038,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitChute": { "prefab": { @@ -8087,15 +7053,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitChuteUmbilical": { "prefab": { @@ -8106,15 +7068,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitCompositeCladding": { "prefab": { @@ -8125,15 +7083,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitCompositeFloorGrating": { "prefab": { @@ -8144,15 +7098,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitComputer": { "prefab": { @@ -8163,15 +7113,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitConsole": { "prefab": { @@ -8182,15 +7128,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitCrate": { "prefab": { @@ -8201,15 +7143,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitCrateMkII": { "prefab": { @@ -8220,15 +7158,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitCrateMount": { "prefab": { @@ -8239,15 +7173,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitCryoTube": { "prefab": { @@ -8258,15 +7188,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitDeepMiner": { "prefab": { @@ -8277,15 +7203,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitDockingPort": { "prefab": { @@ -8296,15 +7218,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitDoor": { "prefab": { @@ -8315,15 +7233,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitDrinkingFountain": { "prefab": { @@ -8334,15 +7248,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitDynamicCanister": { "prefab": { @@ -8353,15 +7263,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitDynamicGasTankAdvanced": { "prefab": { @@ -8372,15 +7278,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitDynamicGenerator": { "prefab": { @@ -8391,15 +7293,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitDynamicHydroponics": { "prefab": { @@ -8410,15 +7308,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitDynamicLiquidCanister": { "prefab": { @@ -8429,15 +7323,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitDynamicMKIILiquidCanister": { "prefab": { @@ -8448,15 +7338,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitElectricUmbilical": { "prefab": { @@ -8467,15 +7353,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitElectronicsPrinter": { "prefab": { @@ -8486,15 +7368,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitElevator": { "prefab": { @@ -8505,15 +7383,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitEngineLarge": { "prefab": { @@ -8524,15 +7398,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitEngineMedium": { "prefab": { @@ -8543,15 +7413,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitEngineSmall": { "prefab": { @@ -8562,15 +7428,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitEvaporationChamber": { "prefab": { @@ -8581,15 +7443,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitFlagODA": { "prefab": { @@ -8600,15 +7458,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitFridgeBig": { "prefab": { @@ -8619,15 +7473,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitFridgeSmall": { "prefab": { @@ -8638,15 +7488,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitFurnace": { "prefab": { @@ -8657,15 +7503,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitFurniture": { "prefab": { @@ -8676,15 +7518,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitFuselage": { "prefab": { @@ -8695,15 +7533,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitGasGenerator": { "prefab": { @@ -8714,15 +7548,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitGasUmbilical": { "prefab": { @@ -8733,15 +7563,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitGovernedGasRocketEngine": { "prefab": { @@ -8752,15 +7578,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitGroundTelescope": { "prefab": { @@ -8771,15 +7593,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitGrowLight": { "prefab": { @@ -8790,15 +7608,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitHarvie": { "prefab": { @@ -8809,15 +7623,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitHeatExchanger": { "prefab": { @@ -8828,15 +7638,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitHorizontalAutoMiner": { "prefab": { @@ -8847,15 +7653,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitHydraulicPipeBender": { "prefab": { @@ -8866,15 +7668,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitHydroponicAutomated": { "prefab": { @@ -8885,15 +7683,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitHydroponicStation": { "prefab": { @@ -8904,15 +7698,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitIceCrusher": { "prefab": { @@ -8923,15 +7713,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitInsulatedLiquidPipe": { "prefab": { @@ -8942,15 +7728,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 20, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitInsulatedPipe": { "prefab": { @@ -8961,15 +7743,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 20, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitInsulatedPipeUtility": { "prefab": { @@ -8980,15 +7758,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitInsulatedPipeUtilityLiquid": { "prefab": { @@ -8999,15 +7773,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitInteriorDoors": { "prefab": { @@ -9018,15 +7788,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLadder": { "prefab": { @@ -9037,15 +7803,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLandingPadAtmos": { "prefab": { @@ -9056,15 +7818,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLandingPadBasic": { "prefab": { @@ -9075,15 +7833,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLandingPadWaypoint": { "prefab": { @@ -9094,15 +7848,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLargeDirectHeatExchanger": { "prefab": { @@ -9113,15 +7863,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLargeExtendableRadiator": { "prefab": { @@ -9132,15 +7878,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLargeSatelliteDish": { "prefab": { @@ -9151,15 +7893,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLaunchMount": { "prefab": { @@ -9170,15 +7908,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLaunchTower": { "prefab": { @@ -9189,15 +7923,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLiquidRegulator": { "prefab": { @@ -9208,15 +7938,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLiquidTank": { "prefab": { @@ -9227,15 +7953,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLiquidTankInsulated": { "prefab": { @@ -9246,15 +7968,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLiquidTurboVolumePump": { "prefab": { @@ -9265,15 +7983,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLiquidUmbilical": { "prefab": { @@ -9284,15 +7998,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLocker": { "prefab": { @@ -9303,15 +8013,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLogicCircuit": { "prefab": { @@ -9322,15 +8028,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLogicInputOutput": { "prefab": { @@ -9341,15 +8043,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLogicMemory": { "prefab": { @@ -9360,15 +8058,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLogicProcessor": { "prefab": { @@ -9379,15 +8073,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLogicSwitch": { "prefab": { @@ -9398,15 +8088,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitLogicTransmitter": { "prefab": { @@ -9417,15 +8103,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitMotherShipCore": { "prefab": { @@ -9436,15 +8118,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitMusicMachines": { "prefab": { @@ -9455,15 +8133,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPassiveLargeRadiatorGas": { "prefab": { @@ -9474,15 +8148,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPassiveLargeRadiatorLiquid": { "prefab": { @@ -9493,15 +8163,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPassthroughHeatExchanger": { "prefab": { @@ -9512,15 +8178,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPictureFrame": { "prefab": { @@ -9531,15 +8193,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPipe": { "prefab": { @@ -9550,15 +8208,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 20, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPipeLiquid": { "prefab": { @@ -9569,15 +8223,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 20, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPipeOrgan": { "prefab": { @@ -9588,15 +8238,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPipeRadiator": { "prefab": { @@ -9607,15 +8253,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPipeRadiatorLiquid": { "prefab": { @@ -9626,15 +8268,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPipeUtility": { "prefab": { @@ -9645,15 +8283,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPipeUtilityLiquid": { "prefab": { @@ -9664,15 +8298,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPlanter": { "prefab": { @@ -9683,15 +8313,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPortablesConnector": { "prefab": { @@ -9702,15 +8328,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPowerTransmitter": { "prefab": { @@ -9721,15 +8343,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPowerTransmitterOmni": { "prefab": { @@ -9740,15 +8358,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPoweredVent": { "prefab": { @@ -9759,15 +8373,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPressureFedGasEngine": { "prefab": { @@ -9778,15 +8388,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPressureFedLiquidEngine": { "prefab": { @@ -9797,15 +8403,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPressurePlate": { "prefab": { @@ -9816,15 +8418,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitPumpedLiquidEngine": { "prefab": { @@ -9835,15 +8433,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitRailing": { "prefab": { @@ -9854,15 +8448,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitRecycler": { "prefab": { @@ -9873,15 +8463,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitRegulator": { "prefab": { @@ -9892,15 +8478,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitReinforcedWindows": { "prefab": { @@ -9911,15 +8493,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitResearchMachine": { "prefab": { @@ -9930,15 +8508,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitRespawnPointWallMounted": { "prefab": { @@ -9949,15 +8523,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitRocketAvionics": { "prefab": { @@ -9968,15 +8538,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitRocketBattery": { "prefab": { @@ -9987,15 +8553,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitRocketCargoStorage": { "prefab": { @@ -10006,15 +8568,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitRocketCelestialTracker": { "prefab": { @@ -10025,15 +8583,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitRocketCircuitHousing": { "prefab": { @@ -10044,15 +8598,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitRocketDatalink": { "prefab": { @@ -10063,15 +8613,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitRocketGasFuelTank": { "prefab": { @@ -10082,15 +8628,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitRocketLiquidFuelTank": { "prefab": { @@ -10101,15 +8643,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitRocketManufactory": { "prefab": { @@ -10120,15 +8658,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitRocketMiner": { "prefab": { @@ -10139,15 +8673,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitRocketScanner": { "prefab": { @@ -10158,15 +8688,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitRocketTransformerSmall": { "prefab": { @@ -10177,15 +8703,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitRoverFrame": { "prefab": { @@ -10196,15 +8718,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitRoverMKI": { "prefab": { @@ -10215,15 +8733,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitSDBHopper": { "prefab": { @@ -10234,15 +8748,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitSatelliteDish": { "prefab": { @@ -10253,15 +8763,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitSecurityPrinter": { "prefab": { @@ -10272,15 +8778,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitSensor": { "prefab": { @@ -10291,15 +8793,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitShower": { "prefab": { @@ -10310,15 +8808,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitSign": { "prefab": { @@ -10329,15 +8823,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitSleeper": { "prefab": { @@ -10348,15 +8838,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitSmallDirectHeatExchanger": { "prefab": { @@ -10367,15 +8853,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitSmallSatelliteDish": { "prefab": { @@ -10386,15 +8868,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitSolarPanel": { "prefab": { @@ -10405,15 +8883,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitSolarPanelBasic": { "prefab": { @@ -10424,15 +8898,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitSolarPanelBasicReinforced": { "prefab": { @@ -10443,15 +8913,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitSolarPanelReinforced": { "prefab": { @@ -10462,15 +8928,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitSolidGenerator": { "prefab": { @@ -10481,15 +8943,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitSorter": { "prefab": { @@ -10500,15 +8958,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitSpeaker": { "prefab": { @@ -10519,15 +8973,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitStacker": { "prefab": { @@ -10538,15 +8988,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitStairs": { "prefab": { @@ -10557,15 +9003,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitStairwell": { "prefab": { @@ -10576,15 +9018,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitStandardChute": { "prefab": { @@ -10595,15 +9033,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitStirlingEngine": { "prefab": { @@ -10614,15 +9048,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitSuitStorage": { "prefab": { @@ -10633,15 +9063,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitTables": { "prefab": { @@ -10652,15 +9078,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitTank": { "prefab": { @@ -10671,15 +9093,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitTankInsulated": { "prefab": { @@ -10690,15 +9108,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitToolManufactory": { "prefab": { @@ -10709,15 +9123,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitTransformer": { "prefab": { @@ -10728,15 +9138,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitTransformerSmall": { "prefab": { @@ -10747,15 +9153,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitTurbineGenerator": { "prefab": { @@ -10766,15 +9168,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitTurboVolumePump": { "prefab": { @@ -10785,15 +9183,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitUprightWindTurbine": { "prefab": { @@ -10804,15 +9198,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitVendingMachine": { "prefab": { @@ -10823,15 +9213,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitVendingMachineRefrigerated": { "prefab": { @@ -10842,15 +9228,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitWall": { "prefab": { @@ -10861,15 +9243,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 30, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitWallArch": { "prefab": { @@ -10880,15 +9258,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 30, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitWallFlat": { "prefab": { @@ -10899,15 +9273,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 30, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitWallGeometry": { "prefab": { @@ -10918,15 +9288,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 30, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitWallIron": { "prefab": { @@ -10937,15 +9303,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 30, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitWallPadded": { "prefab": { @@ -10956,15 +9318,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 30, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitWaterBottleFiller": { "prefab": { @@ -10975,15 +9333,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitWaterPurifier": { "prefab": { @@ -10994,15 +9348,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitWeatherStation": { "prefab": { @@ -11013,15 +9363,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitWindTurbine": { "prefab": { @@ -11032,15 +9378,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemKitWindowShutter": { "prefab": { @@ -11051,15 +9393,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemLabeller": { "prefab": { @@ -11070,15 +9408,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -11099,7 +9433,6 @@ "On": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -11120,15 +9453,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -11172,7 +9501,6 @@ "PositionZ": "Read", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": true, "circuit_holder": true @@ -11201,7 +9529,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -11209,9 +9536,7 @@ }, "slot_class": "Ingot", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemLeadOre": { "prefab": { @@ -11222,7 +9547,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 50, "reagents": { @@ -11230,9 +9554,7 @@ }, "slot_class": "Ore", "sorting_class": "Ores" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemLightSword": { "prefab": { @@ -11243,15 +9565,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemLiquidCanisterEmpty": { "prefab": { @@ -11262,10 +9580,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "LiquidCanister", "sorting_class": "Atmospherics" }, @@ -11286,10 +9602,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "LiquidCanister", "sorting_class": "Atmospherics" }, @@ -11310,15 +9624,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemLiquidPipeAnalyzer": { "prefab": { @@ -11329,15 +9639,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemLiquidPipeHeater": { "prefab": { @@ -11348,15 +9654,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemLiquidPipeValve": { "prefab": { @@ -11367,15 +9669,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemLiquidPipeVolumePump": { "prefab": { @@ -11386,15 +9684,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemLiquidTankStorage": { "prefab": { @@ -11405,15 +9699,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemMKIIAngleGrinder": { "prefab": { @@ -11424,15 +9714,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -11452,7 +9738,6 @@ "Activate": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -11473,15 +9758,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -11501,7 +9782,6 @@ "Activate": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -11522,15 +9802,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemMKIIDrill": { "prefab": { @@ -11541,15 +9817,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -11569,7 +9841,6 @@ "Activate": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -11590,15 +9861,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemMKIIMiningDrill": { "prefab": { @@ -11609,15 +9876,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -11664,15 +9927,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemMKIIWireCutters": { "prefab": { @@ -11683,15 +9942,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemMKIIWrench": { "prefab": { @@ -11702,15 +9957,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemMarineBodyArmor": { "prefab": { @@ -11721,15 +9972,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Suit", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "", @@ -11758,15 +10005,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Helmet", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Battery", @@ -11783,7 +10026,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 100, "reagents": { @@ -11791,9 +10033,7 @@ }, "slot_class": "None", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemMiningBackPack": { "prefab": { @@ -11804,15 +10044,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Back", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Ore", @@ -11921,15 +10157,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Belt", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Tool", @@ -11982,15 +10214,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Belt", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -12132,7 +10360,6 @@ "logic_types": { "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -12209,15 +10436,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemMiningDrill": { "prefab": { @@ -12228,15 +10451,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -12283,15 +10502,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -12338,15 +10553,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Gas Canister", @@ -12363,15 +10574,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Belt", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -12486,7 +10693,6 @@ "logic_types": { "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -12551,15 +10757,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemMushroom": { "prefab": { @@ -12570,7 +10772,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 20, "reagents": { @@ -12578,9 +10779,7 @@ }, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemNVG": { "prefab": { @@ -12591,15 +10790,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Glasses", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -12620,7 +10815,6 @@ "On": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -12641,7 +10835,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -12649,9 +10842,7 @@ }, "slot_class": "Ingot", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemNickelOre": { "prefab": { @@ -12662,7 +10853,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 50, "reagents": { @@ -12670,9 +10860,7 @@ }, "slot_class": "Ore", "sorting_class": "Ores" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemNitrice": { "prefab": { @@ -12683,15 +10871,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemOxite": { "prefab": { @@ -12702,15 +10886,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPassiveVent": { "prefab": { @@ -12721,15 +10901,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPassiveVentInsulated": { "prefab": { @@ -12740,15 +10916,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPeaceLily": { "prefab": { @@ -12759,15 +10931,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPickaxe": { "prefab": { @@ -12778,15 +10946,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPillHeal": { "prefab": { @@ -12797,15 +10961,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPillStun": { "prefab": { @@ -12816,15 +10976,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPipeAnalyizer": { "prefab": { @@ -12835,15 +10991,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPipeCowl": { "prefab": { @@ -12854,15 +11006,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 20, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPipeDigitalValve": { "prefab": { @@ -12873,15 +11021,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPipeGasMixer": { "prefab": { @@ -12892,15 +11036,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPipeHeater": { "prefab": { @@ -12911,15 +11051,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPipeIgniter": { "prefab": { @@ -12930,15 +11066,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPipeLabel": { "prefab": { @@ -12949,15 +11081,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 20, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPipeLiquidRadiator": { "prefab": { @@ -12968,15 +11096,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPipeMeter": { "prefab": { @@ -12987,15 +11111,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPipeRadiator": { "prefab": { @@ -13006,15 +11126,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPipeValve": { "prefab": { @@ -13025,15 +11141,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPipeVolumePump": { "prefab": { @@ -13044,15 +11156,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPlainCake": { "prefab": { @@ -13063,15 +11171,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPlantEndothermic_Creative": { "prefab": { @@ -13082,15 +11186,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPlantEndothermic_Genepool1": { "prefab": { @@ -13101,15 +11201,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPlantEndothermic_Genepool2": { "prefab": { @@ -13120,15 +11216,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPlantSampler": { "prefab": { @@ -13139,15 +11231,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -13193,15 +11281,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPlantThermogenic_Creative": { "prefab": { @@ -13212,15 +11296,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPlantThermogenic_Genepool1": { "prefab": { @@ -13231,15 +11311,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPlantThermogenic_Genepool2": { "prefab": { @@ -13250,15 +11326,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPlasticSheets": { "prefab": { @@ -13269,15 +11341,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "None", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPotato": { "prefab": { @@ -13288,7 +11356,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 20, "reagents": { @@ -13296,9 +11363,7 @@ }, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPotatoBaked": { "prefab": { @@ -13309,7 +11374,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 1, "reagents": { @@ -13317,9 +11381,7 @@ }, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPowerConnector": { "prefab": { @@ -13330,15 +11392,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPumpkin": { "prefab": { @@ -13349,7 +11407,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 20, "reagents": { @@ -13357,9 +11414,7 @@ }, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPumpkinPie": { "prefab": { @@ -13370,15 +11425,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPumpkinSoup": { "prefab": { @@ -13389,15 +11440,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPureIce": { "prefab": { @@ -13408,15 +11455,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPureIceCarbonDioxide": { "prefab": { @@ -13427,15 +11470,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPureIceHydrogen": { "prefab": { @@ -13446,15 +11485,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPureIceLiquidCarbonDioxide": { "prefab": { @@ -13465,15 +11500,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPureIceLiquidHydrogen": { "prefab": { @@ -13484,15 +11515,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPureIceLiquidNitrogen": { "prefab": { @@ -13503,15 +11530,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPureIceLiquidNitrous": { "prefab": { @@ -13522,15 +11545,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPureIceLiquidOxygen": { "prefab": { @@ -13541,15 +11560,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPureIceLiquidPollutant": { "prefab": { @@ -13560,15 +11575,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPureIceLiquidVolatiles": { "prefab": { @@ -13579,15 +11590,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPureIceNitrogen": { "prefab": { @@ -13598,15 +11605,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPureIceNitrous": { "prefab": { @@ -13617,15 +11620,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPureIceOxygen": { "prefab": { @@ -13636,15 +11635,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPureIcePollutant": { "prefab": { @@ -13655,15 +11650,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPureIcePollutedWater": { "prefab": { @@ -13674,15 +11665,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPureIceSteam": { "prefab": { @@ -13693,15 +11680,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemPureIceVolatiles": { "prefab": { @@ -13712,15 +11695,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemRTG": { "prefab": { @@ -13731,15 +11710,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemRTGSurvival": { "prefab": { @@ -13750,15 +11725,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemReagentMix": { "prefab": { @@ -13769,15 +11740,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ores" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemRemoteDetonator": { "prefab": { @@ -13788,15 +11755,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -13817,7 +11780,6 @@ "On": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -13838,15 +11800,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Liquid Canister", @@ -13863,7 +11821,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 50, "reagents": { @@ -13871,9 +11828,7 @@ }, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemRoadFlare": { "prefab": { @@ -13884,15 +11839,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 20, - "reagents": null, "slot_class": "Flare", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemRocketMiningDrillHead": { "prefab": { @@ -13903,15 +11854,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "DrillHead", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemRocketMiningDrillHeadDurable": { "prefab": { @@ -13922,15 +11869,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "DrillHead", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemRocketMiningDrillHeadHighSpeedIce": { "prefab": { @@ -13941,15 +11884,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "DrillHead", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemRocketMiningDrillHeadHighSpeedMineral": { "prefab": { @@ -13960,15 +11899,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "DrillHead", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemRocketMiningDrillHeadIce": { "prefab": { @@ -13979,15 +11914,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "DrillHead", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemRocketMiningDrillHeadLongTerm": { "prefab": { @@ -13998,15 +11929,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "DrillHead", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemRocketMiningDrillHeadMineral": { "prefab": { @@ -14017,15 +11944,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "DrillHead", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemRocketScanningHead": { "prefab": { @@ -14036,15 +11959,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "ScanningHead", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemScanner": { "prefab": { @@ -14055,15 +11974,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemScrewdriver": { "prefab": { @@ -14074,15 +11989,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSecurityCamera": { "prefab": { @@ -14093,15 +12004,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSensorLenses": { "prefab": { @@ -14112,15 +12019,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Glasses", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -14149,7 +12052,6 @@ "On": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -14174,15 +12076,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "SensorProcessingUnit", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSensorProcessingUnitMesonScanner": { "prefab": { @@ -14193,15 +12091,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "SensorProcessingUnit", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSensorProcessingUnitOreScanner": { "prefab": { @@ -14212,15 +12106,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "SensorProcessingUnit", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSiliconIngot": { "prefab": { @@ -14231,7 +12121,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -14239,9 +12128,7 @@ }, "slot_class": "Ingot", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSiliconOre": { "prefab": { @@ -14252,7 +12139,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 50, "reagents": { @@ -14260,9 +12146,7 @@ }, "slot_class": "Ore", "sorting_class": "Ores" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSilverIngot": { "prefab": { @@ -14273,7 +12157,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -14281,9 +12164,7 @@ }, "slot_class": "Ingot", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSilverOre": { "prefab": { @@ -14294,7 +12175,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 50, "reagents": { @@ -14302,9 +12182,7 @@ }, "slot_class": "Ore", "sorting_class": "Ores" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSolderIngot": { "prefab": { @@ -14315,7 +12193,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -14323,9 +12200,7 @@ }, "slot_class": "Ingot", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSolidFuel": { "prefab": { @@ -14336,7 +12211,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -14344,9 +12218,7 @@ }, "slot_class": "Ore", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSoundCartridgeBass": { "prefab": { @@ -14357,15 +12229,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "SoundCartridge", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSoundCartridgeDrums": { "prefab": { @@ -14376,15 +12244,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "SoundCartridge", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSoundCartridgeLeads": { "prefab": { @@ -14395,15 +12259,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "SoundCartridge", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSoundCartridgeSynth": { "prefab": { @@ -14414,15 +12274,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "SoundCartridge", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSoyOil": { "prefab": { @@ -14433,7 +12289,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 100, "reagents": { @@ -14441,9 +12296,7 @@ }, "slot_class": "None", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSoybean": { "prefab": { @@ -14454,7 +12307,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 100, "reagents": { @@ -14462,9 +12314,7 @@ }, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSpaceCleaner": { "prefab": { @@ -14475,15 +12325,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSpaceHelmet": { "prefab": { @@ -14494,10 +12340,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Helmet", "sorting_class": "Clothing" }, @@ -14541,7 +12385,6 @@ "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -14557,15 +12400,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ores" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSpaceOre": { "prefab": { @@ -14576,15 +12415,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 100, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ores" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSpacepack": { "prefab": { @@ -14595,15 +12430,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Back", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -14704,7 +12535,6 @@ "On": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -14761,15 +12591,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Bottle", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSprayCanBlue": { "prefab": { @@ -14780,15 +12606,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Bottle", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSprayCanBrown": { "prefab": { @@ -14799,15 +12621,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Bottle", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSprayCanGreen": { "prefab": { @@ -14818,15 +12636,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Bottle", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSprayCanGrey": { "prefab": { @@ -14837,15 +12651,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Bottle", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSprayCanKhaki": { "prefab": { @@ -14856,15 +12666,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Bottle", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSprayCanOrange": { "prefab": { @@ -14875,15 +12681,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Bottle", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSprayCanPink": { "prefab": { @@ -14894,15 +12696,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Bottle", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSprayCanPurple": { "prefab": { @@ -14913,15 +12711,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Bottle", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSprayCanRed": { "prefab": { @@ -14932,15 +12726,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Bottle", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSprayCanWhite": { "prefab": { @@ -14951,15 +12741,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Bottle", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSprayCanYellow": { "prefab": { @@ -14970,15 +12756,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Bottle", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSprayGun": { "prefab": { @@ -14989,15 +12771,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Spray Can", @@ -15014,15 +12792,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 30, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSteelIngot": { "prefab": { @@ -15033,7 +12807,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -15041,9 +12814,7 @@ }, "slot_class": "Ingot", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSteelSheets": { "prefab": { @@ -15054,15 +12825,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "None", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemStelliteGlassSheets": { "prefab": { @@ -15073,15 +12840,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "None", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemStelliteIngot": { "prefab": { @@ -15092,7 +12855,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -15100,9 +12862,7 @@ }, "slot_class": "Ingot", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSugar": { "prefab": { @@ -15113,7 +12873,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -15121,9 +12880,7 @@ }, "slot_class": "None", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSugarCane": { "prefab": { @@ -15134,7 +12891,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 100, "reagents": { @@ -15142,9 +12898,7 @@ }, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemSuitModCryogenicUpgrade": { "prefab": { @@ -15155,15 +12909,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "SuitMod", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemTablet": { "prefab": { @@ -15174,15 +12924,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -15212,7 +12958,6 @@ "On": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -15237,15 +12982,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Default" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -15305,7 +13046,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 20, "reagents": { @@ -15313,9 +13053,7 @@ }, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemTomatoSoup": { "prefab": { @@ -15326,15 +13064,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemToolBelt": { "prefab": { @@ -15345,15 +13079,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Belt", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Tool", @@ -15398,15 +13128,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemUraniumOre": { "prefab": { @@ -15417,7 +13143,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 50, "reagents": { @@ -15425,9 +13150,7 @@ }, "slot_class": "Ore", "sorting_class": "Ores" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemVolatiles": { "prefab": { @@ -15438,15 +13161,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 50, - "reagents": null, "slot_class": "Ore", "sorting_class": "Ices" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWallCooler": { "prefab": { @@ -15457,15 +13176,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWallHeater": { "prefab": { @@ -15476,15 +13191,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWallLight": { "prefab": { @@ -15495,15 +13206,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWaspaloyIngot": { "prefab": { @@ -15514,7 +13221,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 500, "reagents": { @@ -15522,9 +13228,7 @@ }, "slot_class": "Ingot", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWaterBottle": { "prefab": { @@ -15535,15 +13239,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "LiquidBottle", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWaterPipeDigitalValve": { "prefab": { @@ -15554,15 +13254,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWaterPipeMeter": { "prefab": { @@ -15573,15 +13269,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWaterWallCooler": { "prefab": { @@ -15592,15 +13284,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 5, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWearLamp": { "prefab": { @@ -15611,15 +13299,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Helmet", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -15639,7 +13323,6 @@ "On": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -15660,10 +13343,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" }, @@ -15671,7 +13352,6 @@ "convection_factor": 0.5, "radiation_factor": 0.5 }, - "internal_atmo_info": null, "slots": [ { "name": "Gas Canister", @@ -15688,7 +13368,6 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": true, "max_quantity": 100, "reagents": { @@ -15696,9 +13375,7 @@ }, "slot_class": "Plant", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWireCutters": { "prefab": { @@ -15709,15 +13386,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWirelessBatteryCellExtraLarge": { "prefab": { @@ -15728,15 +13401,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Battery", "sorting_class": "Default" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -15767,15 +13436,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Wreckage", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWreckageAirConditioner2": { "prefab": { @@ -15786,15 +13451,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Wreckage", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWreckageHydroponicsTray1": { "prefab": { @@ -15805,15 +13466,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Wreckage", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWreckageLargeExtendableRadiator01": { "prefab": { @@ -15824,15 +13481,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Wreckage", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWreckageStructureRTG1": { "prefab": { @@ -15843,15 +13496,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Wreckage", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWreckageStructureWeatherStation001": { "prefab": { @@ -15862,15 +13511,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Wreckage", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWreckageStructureWeatherStation002": { "prefab": { @@ -15881,15 +13526,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Wreckage", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWreckageStructureWeatherStation003": { "prefab": { @@ -15900,15 +13541,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Wreckage", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWreckageStructureWeatherStation004": { "prefab": { @@ -15919,15 +13556,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Wreckage", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWreckageStructureWeatherStation005": { "prefab": { @@ -15938,15 +13571,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Wreckage", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWreckageStructureWeatherStation006": { "prefab": { @@ -15957,15 +13586,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Wreckage", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWreckageStructureWeatherStation007": { "prefab": { @@ -15976,15 +13601,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Wreckage", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWreckageStructureWeatherStation008": { "prefab": { @@ -15995,15 +13616,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Wreckage", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWreckageTurbineGenerator1": { "prefab": { @@ -16014,15 +13631,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Wreckage", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWreckageTurbineGenerator2": { "prefab": { @@ -16033,15 +13646,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Wreckage", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWreckageTurbineGenerator3": { "prefab": { @@ -16052,15 +13661,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Wreckage", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWreckageWallCooler1": { "prefab": { @@ -16071,15 +13676,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Wreckage", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWreckageWallCooler2": { "prefab": { @@ -16090,15 +13691,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Wreckage", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ItemWrench": { "prefab": { @@ -16109,15 +13706,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Tool", "sorting_class": "Tools" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "KitSDBSilo": { "prefab": { @@ -16128,15 +13721,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "KitStructureCombustionCentrifuge": { "prefab": { @@ -16147,15 +13736,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Kits" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "KitchenTableShort": { "prefab": { @@ -16166,9 +13751,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "KitchenTableSimpleShort": { "prefab": { @@ -16179,9 +13762,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "KitchenTableSimpleTall": { "prefab": { @@ -16192,9 +13773,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "KitchenTableTall": { "prefab": { @@ -16205,9 +13784,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "Lander": { "prefab": { @@ -16218,15 +13795,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "", @@ -16276,12 +13849,9 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": {}, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -16297,9 +13867,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "Landingpad_CenterPiece01": { "prefab": { @@ -16311,8 +13879,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": {}, @@ -16338,9 +13904,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "Landingpad_DataConnectionPiece": { "prefab": { @@ -16352,8 +13916,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -16425,7 +13987,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": true, "has_color_state": false, @@ -16445,9 +14006,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "Landingpad_GasConnectorInwardPiece": { "prefab": { @@ -16459,8 +14018,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -16496,7 +14053,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -16525,7 +14081,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -16546,8 +14101,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -16583,7 +14136,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -16612,7 +14164,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -16632,9 +14183,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "Landingpad_LiquidConnectorInwardPiece": { "prefab": { @@ -16646,8 +14195,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -16683,7 +14230,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -16712,7 +14258,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -16733,8 +14278,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -16770,7 +14313,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -16799,7 +14341,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -16819,9 +14360,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "Landingpad_TaxiPieceCorner": { "prefab": { @@ -16832,9 +14371,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "Landingpad_TaxiPieceHold": { "prefab": { @@ -16845,9 +14382,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "Landingpad_TaxiPieceStraight": { "prefab": { @@ -16858,9 +14393,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "Landingpad_ThreshholdPiece": { "prefab": { @@ -16872,8 +14405,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -16884,7 +14415,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -16909,7 +14439,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -16930,8 +14459,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -16991,7 +14518,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -17011,15 +14537,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "MonsterEgg": { "prefab": { @@ -17030,15 +14552,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "MotherboardComms": { "prefab": { @@ -17049,15 +14567,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Motherboard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "MotherboardLogic": { "prefab": { @@ -17068,15 +14582,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Motherboard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "MotherboardMissionControl": { "prefab": { @@ -17087,15 +14597,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Motherboard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "MotherboardProgrammableChip": { "prefab": { @@ -17106,15 +14612,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Motherboard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "MotherboardRockets": { "prefab": { @@ -17125,15 +14627,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Motherboard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "MotherboardSorter": { "prefab": { @@ -17144,15 +14642,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Motherboard", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "MothershipCore": { "prefab": { @@ -17163,15 +14657,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "NpcChick": { "prefab": { @@ -17182,10 +14672,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, @@ -17193,7 +14681,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "slots": [ { "name": "Brain", @@ -17214,10 +14701,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, @@ -17225,7 +14710,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "slots": [ { "name": "Brain", @@ -17247,8 +14731,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -17258,7 +14740,6 @@ "ReferenceId": "ReadWrite", "NameHash": "ReadWrite" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -17271,7 +14752,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -17291,15 +14771,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "PortableComposter": { "prefab": { @@ -17310,15 +14786,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "", @@ -17347,15 +14819,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -17374,7 +14842,6 @@ "Open": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -17395,9 +14862,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "RailingElegant02": { "prefab": { @@ -17408,9 +14873,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "RailingIndustrial02": { "prefab": { @@ -17421,9 +14884,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ReagentColorBlue": { "prefab": { @@ -17434,7 +14895,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 100, "reagents": { @@ -17442,9 +14902,7 @@ }, "slot_class": "None", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ReagentColorGreen": { "prefab": { @@ -17455,7 +14913,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 100, "reagents": { @@ -17463,9 +14920,7 @@ }, "slot_class": "None", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ReagentColorOrange": { "prefab": { @@ -17476,7 +14931,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 100, "reagents": { @@ -17484,9 +14938,7 @@ }, "slot_class": "None", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ReagentColorRed": { "prefab": { @@ -17497,7 +14949,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 100, "reagents": { @@ -17505,9 +14956,7 @@ }, "slot_class": "None", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ReagentColorYellow": { "prefab": { @@ -17518,7 +14967,6 @@ }, "item": { "consumable": true, - "filter_type": null, "ingredient": true, "max_quantity": 100, "reagents": { @@ -17526,9 +14974,7 @@ }, "slot_class": "None", "sorting_class": "Resources" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "RespawnPoint": { "prefab": { @@ -17539,9 +14985,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "RespawnPointWallMounted": { "prefab": { @@ -17552,9 +14996,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "Robot": { "prefab": { @@ -17565,15 +15007,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -17762,10 +15200,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, @@ -17773,7 +15209,6 @@ "convection_factor": 0.01, "radiation_factor": 0.01 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -17964,7 +15399,6 @@ "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": true, "circuit_holder": false @@ -18045,10 +15479,8 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, @@ -18056,7 +15488,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -18191,7 +15622,6 @@ "RatioLiquidHydrogen": "Read", "RatioPollutedWater": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": true, "circuit_holder": false @@ -18252,9 +15682,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "SMGMagazine": { "prefab": { @@ -18265,15 +15693,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Magazine", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "SeedBag_Cocoa": { "prefab": { @@ -18284,15 +15708,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "SeedBag_Corn": { "prefab": { @@ -18303,15 +15723,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "SeedBag_Fern": { "prefab": { @@ -18322,15 +15738,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "SeedBag_Mushroom": { "prefab": { @@ -18341,15 +15753,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "SeedBag_Potato": { "prefab": { @@ -18360,15 +15768,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "SeedBag_Pumpkin": { "prefab": { @@ -18379,15 +15783,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "SeedBag_Rice": { "prefab": { @@ -18398,15 +15798,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "SeedBag_Soybean": { "prefab": { @@ -18417,15 +15813,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "SeedBag_SugarCane": { "prefab": { @@ -18436,15 +15828,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "SeedBag_Switchgrass": { "prefab": { @@ -18455,15 +15843,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "SeedBag_Tomato": { "prefab": { @@ -18474,15 +15858,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "SeedBag_Wheet": { "prefab": { @@ -18493,15 +15873,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 10, - "reagents": null, "slot_class": "Plant", "sorting_class": "Food" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "SpaceShuttle": { "prefab": { @@ -18512,15 +15888,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Captain's Seat", @@ -18546,8 +15918,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -18561,7 +15931,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -18578,7 +15947,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -18599,8 +15967,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -18614,7 +15980,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -18631,7 +15996,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -18652,8 +16016,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -18710,7 +16072,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -18731,8 +16092,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -18803,7 +16162,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -18828,7 +16186,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -18927,7 +16284,6 @@ "role": "Output2" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": true, "has_color_state": false, @@ -18948,8 +16304,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -18973,7 +16327,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -19007,7 +16360,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -19100,7 +16452,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {} @@ -19235,8 +16586,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -19272,7 +16621,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -19293,8 +16641,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -19330,7 +16676,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -19351,8 +16696,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -19372,7 +16715,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -19385,7 +16727,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -19406,8 +16747,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -19450,7 +16789,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -19484,7 +16822,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -19505,8 +16842,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -19583,7 +16918,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -19604,8 +16938,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -19682,7 +17014,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -19703,8 +17034,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -19724,7 +17053,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -19758,7 +17086,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -19779,8 +17106,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -19804,7 +17129,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -19838,7 +17162,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -19934,8 +17257,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -19959,7 +17280,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -19993,7 +17313,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -20086,8 +17405,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -20103,7 +17420,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -20124,7 +17440,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -20145,8 +17460,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -20162,7 +17475,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -20183,7 +17495,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -20204,8 +17515,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -20218,7 +17527,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -20235,7 +17543,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -20256,8 +17563,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -20304,7 +17609,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -20325,8 +17629,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -20405,7 +17707,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -20443,7 +17744,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -20464,8 +17764,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -20505,7 +17803,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -20527,7 +17824,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -20548,8 +17844,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -20596,7 +17890,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -20617,8 +17910,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -20663,7 +17954,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -20684,8 +17974,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -20730,7 +18018,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -20751,8 +18038,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -20766,7 +18051,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -20783,7 +18067,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": true, @@ -20804,8 +18087,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -20842,7 +18123,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -20868,7 +18148,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -20889,8 +18168,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -20927,7 +18204,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -20953,7 +18229,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -20974,8 +18249,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -21012,7 +18285,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -21038,7 +18310,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -21059,8 +18330,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -21097,7 +18366,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -21123,7 +18391,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -21144,8 +18411,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -21182,7 +18447,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -21208,7 +18472,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -21229,8 +18492,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -21266,7 +18527,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -21287,8 +18547,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -21313,7 +18571,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -21331,7 +18588,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -21351,9 +18607,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableAnalysizer": { "prefab": { @@ -21365,8 +18619,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -21377,7 +18629,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -21390,7 +18641,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -21410,9 +18660,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableCorner3": { "prefab": { @@ -21423,9 +18671,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableCorner3Burnt": { "prefab": { @@ -21436,9 +18682,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableCorner3HBurnt": { "prefab": { @@ -21449,9 +18693,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableCorner4": { "prefab": { @@ -21462,9 +18704,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableCorner4Burnt": { "prefab": { @@ -21475,9 +18715,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableCorner4HBurnt": { "prefab": { @@ -21488,9 +18726,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableCornerBurnt": { "prefab": { @@ -21501,9 +18737,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableCornerH": { "prefab": { @@ -21514,9 +18748,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableCornerH3": { "prefab": { @@ -21527,9 +18759,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableCornerH4": { "prefab": { @@ -21540,9 +18770,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableCornerHBurnt": { "prefab": { @@ -21553,9 +18781,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableFuse100k": { "prefab": { @@ -21567,8 +18793,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -21576,7 +18800,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -21584,7 +18807,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -21605,8 +18827,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -21614,7 +18834,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -21622,7 +18841,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -21643,8 +18861,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -21652,7 +18868,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -21660,7 +18875,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -21681,8 +18895,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -21690,7 +18902,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -21698,7 +18909,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -21718,9 +18928,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableJunction4": { "prefab": { @@ -21731,9 +18939,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableJunction4Burnt": { "prefab": { @@ -21744,9 +18950,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableJunction4HBurnt": { "prefab": { @@ -21757,9 +18961,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableJunction5": { "prefab": { @@ -21770,9 +18972,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableJunction5Burnt": { "prefab": { @@ -21783,9 +18983,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableJunction6": { "prefab": { @@ -21796,9 +18994,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableJunction6Burnt": { "prefab": { @@ -21809,9 +19005,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableJunction6HBurnt": { "prefab": { @@ -21822,9 +19016,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableJunctionBurnt": { "prefab": { @@ -21835,9 +19027,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableJunctionH": { "prefab": { @@ -21848,9 +19038,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableJunctionH4": { "prefab": { @@ -21861,9 +19049,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableJunctionH5": { "prefab": { @@ -21874,9 +19060,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableJunctionH5Burnt": { "prefab": { @@ -21887,9 +19071,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableJunctionH6": { "prefab": { @@ -21900,9 +19082,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableJunctionHBurnt": { "prefab": { @@ -21913,9 +19093,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableStraight": { "prefab": { @@ -21926,9 +19104,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableStraightBurnt": { "prefab": { @@ -21939,9 +19115,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableStraightH": { "prefab": { @@ -21952,9 +19126,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCableStraightHBurnt": { "prefab": { @@ -21965,9 +19137,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCamera": { "prefab": { @@ -21979,8 +19149,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -22006,7 +19174,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -22031,7 +19198,6 @@ "convection_factor": 0.05, "radiation_factor": 0.002 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -22065,7 +19231,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -22082,7 +19247,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -22107,7 +19271,6 @@ "convection_factor": 0.05, "radiation_factor": 0.002 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -22141,7 +19304,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -22158,7 +19320,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -22179,8 +19340,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -22302,7 +19461,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -22732,7 +19890,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -22753,8 +19910,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -23346,7 +20501,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -23576,7 +20730,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -23597,8 +20750,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -23618,7 +20769,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -23652,7 +20802,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -23673,8 +20822,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -23694,7 +20841,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -23707,7 +20853,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -23728,8 +20873,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -23749,7 +20892,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -23762,7 +20904,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -23783,8 +20924,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -23804,7 +20943,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -23817,7 +20955,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -23838,8 +20975,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -23859,7 +20994,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -23872,7 +21006,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -23893,8 +21026,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -23914,7 +21045,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -23927,7 +21057,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -23948,8 +21077,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -23969,7 +21096,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -23982,7 +21108,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -24003,8 +21128,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -24024,7 +21147,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -24037,7 +21159,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -24058,8 +21179,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -24079,7 +21198,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -24092,7 +21210,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -24113,8 +21230,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -24134,7 +21249,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -24147,7 +21261,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -24168,8 +21281,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -24195,7 +21306,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -24217,7 +21327,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -24238,8 +21347,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Transport Slot", @@ -24257,8 +21364,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -24318,7 +21423,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -24339,8 +21443,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -24400,7 +21502,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -24421,8 +21522,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -24449,7 +21548,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -24475,7 +21573,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -24496,8 +21593,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -24524,7 +21619,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -24550,7 +21644,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -24571,8 +21664,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Transport Slot", @@ -24590,8 +21681,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -24614,7 +21703,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -24636,7 +21724,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -24657,8 +21744,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Transport Slot", @@ -24676,8 +21761,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -24701,7 +21784,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -24723,7 +21805,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -24744,8 +21825,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Transport Slot", @@ -24763,8 +21842,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Transport Slot", @@ -24782,8 +21859,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -24803,7 +21878,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -24821,7 +21895,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -24842,8 +21915,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -24863,7 +21934,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -24881,7 +21951,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -24902,8 +21971,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -24956,7 +22023,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -24977,8 +22043,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Transport Slot", @@ -24996,8 +22060,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Transport Slot", @@ -25015,8 +22077,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -25043,7 +22103,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": true @@ -25090,7 +22149,6 @@ "convection_factor": 0.001, "radiation_factor": 0.001 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -25173,7 +22231,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": true @@ -25239,9 +22296,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeCladdingAngledCorner": { "prefab": { @@ -25252,9 +22307,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeCladdingAngledCornerInner": { "prefab": { @@ -25265,9 +22318,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeCladdingAngledCornerInnerLong": { "prefab": { @@ -25278,9 +22329,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeCladdingAngledCornerInnerLongL": { "prefab": { @@ -25291,9 +22340,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeCladdingAngledCornerInnerLongR": { "prefab": { @@ -25304,9 +22351,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeCladdingAngledCornerLong": { "prefab": { @@ -25317,9 +22362,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeCladdingAngledCornerLongR": { "prefab": { @@ -25330,9 +22373,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeCladdingAngledLong": { "prefab": { @@ -25343,9 +22384,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeCladdingCylindrical": { "prefab": { @@ -25356,9 +22395,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeCladdingCylindricalPanel": { "prefab": { @@ -25369,9 +22406,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeCladdingPanel": { "prefab": { @@ -25382,9 +22417,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeCladdingRounded": { "prefab": { @@ -25395,9 +22428,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeCladdingRoundedCorner": { "prefab": { @@ -25408,9 +22439,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeCladdingRoundedCornerInner": { "prefab": { @@ -25421,9 +22450,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeCladdingSpherical": { "prefab": { @@ -25434,9 +22461,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeCladdingSphericalCap": { "prefab": { @@ -25447,9 +22472,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeCladdingSphericalCorner": { "prefab": { @@ -25460,9 +22483,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeDoor": { "prefab": { @@ -25474,8 +22495,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -25511,7 +22530,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -25531,9 +22549,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeFloorGrating2": { "prefab": { @@ -25544,9 +22560,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeFloorGrating3": { "prefab": { @@ -25557,9 +22571,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeFloorGrating4": { "prefab": { @@ -25570,9 +22582,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeFloorGratingOpen": { "prefab": { @@ -25583,9 +22593,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeFloorGratingOpenRotated": { "prefab": { @@ -25596,9 +22604,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeWall": { "prefab": { @@ -25609,9 +22615,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeWall02": { "prefab": { @@ -25622,9 +22626,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeWall03": { "prefab": { @@ -25635,9 +22637,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeWall04": { "prefab": { @@ -25648,9 +22648,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeWindow": { "prefab": { @@ -25661,9 +22659,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureCompositeWindowIron": { "prefab": { @@ -25674,9 +22670,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureComputer": { "prefab": { @@ -25688,8 +22682,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -25707,7 +22699,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -25737,7 +22728,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -25762,7 +22752,6 @@ "convection_factor": 0.001, "radiation_factor": 0.000050000002 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -25800,7 +22789,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -25829,7 +22817,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -25850,8 +22837,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -25863,7 +22848,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -25880,7 +22864,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -25901,8 +22884,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -25919,7 +22900,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -25941,7 +22921,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -25962,8 +22941,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -25980,7 +22957,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -26006,7 +22982,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -26027,8 +23002,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -26060,7 +23033,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": true, @@ -26081,8 +23053,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -26114,7 +23084,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": true, @@ -26135,8 +23104,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -26168,7 +23135,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": true, @@ -26189,8 +23155,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -26207,7 +23171,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -26229,7 +23192,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -26254,7 +23216,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -26335,7 +23296,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -26356,8 +23316,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -26434,7 +23392,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -26467,7 +23424,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -26488,8 +23444,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Container Slot", @@ -26511,7 +23465,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -26544,7 +23497,6 @@ "EntityState": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -26570,7 +23522,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -26595,7 +23546,6 @@ "convection_factor": 0.005, "radiation_factor": 0.005 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {} @@ -26618,7 +23568,6 @@ "EntityState": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -26644,7 +23593,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -26669,7 +23617,6 @@ "convection_factor": 0.005, "radiation_factor": 0.005 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {} @@ -26692,7 +23639,6 @@ "EntityState": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -26718,7 +23664,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -26739,8 +23684,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -26772,7 +23715,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -26793,8 +23735,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {} @@ -26814,7 +23754,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -26840,7 +23779,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -26861,8 +23799,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -26878,7 +23814,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -26899,7 +23834,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -26920,8 +23854,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -26934,7 +23866,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -26947,7 +23878,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": true, @@ -26968,8 +23898,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -26982,7 +23910,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -26995,7 +23922,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -27016,8 +23942,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -27032,7 +23956,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -27049,7 +23972,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -27070,8 +23992,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -27083,7 +24003,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -27100,7 +24019,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -27125,7 +24043,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {} @@ -27257,8 +24174,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -27282,7 +24197,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -27316,7 +24230,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -27412,8 +24325,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -27430,7 +24341,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -27455,7 +24365,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -27476,8 +24385,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -27494,7 +24401,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -27511,7 +24417,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -27532,8 +24437,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -27546,7 +24449,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -27571,7 +24473,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -27592,8 +24493,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -27603,7 +24502,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -27620,7 +24518,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -27641,8 +24538,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -27658,7 +24553,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -27675,7 +24569,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -27695,9 +24588,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureEvaporationChamber": { "prefab": { @@ -27713,7 +24604,6 @@ "convection_factor": 0.001, "radiation_factor": 0.000050000002 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -27751,7 +24641,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -27780,7 +24669,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -27801,8 +24689,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -27814,7 +24700,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -27831,7 +24716,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -27851,9 +24735,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureFairingTypeA2": { "prefab": { @@ -27864,9 +24746,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureFairingTypeA3": { "prefab": { @@ -27877,9 +24757,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureFiltration": { "prefab": { @@ -27891,8 +24769,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -28033,9 +24909,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureFlashingLight": { "prefab": { @@ -28047,8 +24921,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -28060,7 +24932,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -28073,7 +24944,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -28094,8 +24964,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -28115,7 +24983,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -28128,7 +24995,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -28152,8 +25018,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructureFrame": { "prefab": { @@ -28164,9 +25029,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureFrameCorner": { "prefab": { @@ -28177,9 +25040,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureFrameCornerCut": { "prefab": { @@ -28190,9 +25051,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureFrameIron": { "prefab": { @@ -28203,9 +25062,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureFrameSide": { "prefab": { @@ -28216,9 +25073,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureFridgeBig": { "prefab": { @@ -28234,7 +25089,6 @@ "convection_factor": 0.0, "radiation_factor": 0.0 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -28437,7 +25291,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -28515,7 +25368,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -28540,7 +25392,6 @@ "convection_factor": 0.0, "radiation_factor": 0.0 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -28596,7 +25447,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -28618,7 +25468,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -28643,7 +25492,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -28732,7 +25580,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": true, "has_color_state": false, @@ -28752,9 +25599,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureFuselageTypeA2": { "prefab": { @@ -28765,9 +25610,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureFuselageTypeA4": { "prefab": { @@ -28778,9 +25621,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureFuselageTypeC5": { "prefab": { @@ -28791,9 +25632,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureGasGenerator": { "prefab": { @@ -28809,7 +25648,6 @@ "convection_factor": 0.01, "radiation_factor": 0.01 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -28846,7 +25684,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -28871,7 +25708,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -28892,8 +25728,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -28909,7 +25743,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -28934,7 +25767,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -28955,8 +25787,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -28984,7 +25814,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -28997,7 +25826,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -29018,8 +25846,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -29053,7 +25879,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -29075,7 +25900,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -29096,8 +25920,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -29108,7 +25930,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -29121,7 +25942,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -29142,8 +25962,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -29154,7 +25972,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -29167,7 +25984,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -29188,8 +26004,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -29228,7 +26042,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -29249,8 +26062,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -29286,7 +26097,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -29307,8 +26117,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -29343,7 +26151,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -29360,7 +26167,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -29381,8 +26187,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -29411,7 +26215,6 @@ "TrueAnomaly": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -29428,7 +26231,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -29449,8 +26251,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -29462,7 +26262,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -29479,7 +26278,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -29500,8 +26298,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -29594,7 +26390,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -29615,8 +26410,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -29627,7 +26420,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -29652,7 +26444,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -29673,8 +26464,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -29685,7 +26474,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -29710,7 +26498,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -29731,8 +26518,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -29743,7 +26528,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -29768,7 +26552,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -29789,8 +26572,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -29848,7 +26629,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -29869,8 +26649,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -29894,7 +26672,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -29928,7 +26705,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -30028,7 +26804,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -30185,7 +26960,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -30239,7 +27013,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -30264,7 +27037,6 @@ "convection_factor": 0.010000001, "radiation_factor": 0.0005 }, - "internal_atmo_info": null, "slots": [ { "name": "Plant", @@ -30290,7 +27062,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -30347,7 +27118,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -30377,7 +27147,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -30402,7 +27171,6 @@ "convection_factor": 0.0, "radiation_factor": 0.0 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {} @@ -30423,7 +27191,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -30457,7 +27224,6 @@ "role": "Output2" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -30478,8 +27244,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -30488,7 +27252,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -30501,7 +27264,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -30525,8 +27287,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructureInLineTankGas1x2": { "prefab": { @@ -30541,8 +27302,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructureInLineTankLiquid1x1": { "prefab": { @@ -30557,8 +27317,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructureInLineTankLiquid1x2": { "prefab": { @@ -30573,8 +27332,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructureInsulatedInLineTankGas1x1": { "prefab": { @@ -30589,8 +27347,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructureInsulatedInLineTankGas1x2": { "prefab": { @@ -30605,8 +27362,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructureInsulatedInLineTankLiquid1x1": { "prefab": { @@ -30621,8 +27377,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructureInsulatedInLineTankLiquid1x2": { "prefab": { @@ -30637,8 +27392,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructureInsulatedPipeCorner": { "prefab": { @@ -30653,8 +27407,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructureInsulatedPipeCrossJunction": { "prefab": { @@ -30669,8 +27422,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructureInsulatedPipeCrossJunction3": { "prefab": { @@ -30685,8 +27437,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructureInsulatedPipeCrossJunction4": { "prefab": { @@ -30701,8 +27452,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructureInsulatedPipeCrossJunction5": { "prefab": { @@ -30717,8 +27467,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructureInsulatedPipeCrossJunction6": { "prefab": { @@ -30733,8 +27482,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructureInsulatedPipeLiquidCorner": { "prefab": { @@ -30749,8 +27497,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructureInsulatedPipeLiquidCrossJunction": { "prefab": { @@ -30765,8 +27512,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructureInsulatedPipeLiquidCrossJunction4": { "prefab": { @@ -30781,8 +27527,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructureInsulatedPipeLiquidCrossJunction5": { "prefab": { @@ -30797,8 +27542,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructureInsulatedPipeLiquidCrossJunction6": { "prefab": { @@ -30813,8 +27557,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructureInsulatedPipeLiquidStraight": { "prefab": { @@ -30829,8 +27572,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructureInsulatedPipeLiquidTJunction": { "prefab": { @@ -30845,8 +27587,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructureInsulatedPipeStraight": { "prefab": { @@ -30861,8 +27602,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructureInsulatedPipeTJunction": { "prefab": { @@ -30877,8 +27617,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructureInsulatedTankConnector": { "prefab": { @@ -30894,7 +27633,6 @@ "convection_factor": 0.0, "radiation_factor": 0.0 }, - "internal_atmo_info": null, "slots": [ { "name": "", @@ -30916,7 +27654,6 @@ "convection_factor": 0.0, "radiation_factor": 0.0 }, - "internal_atmo_info": null, "slots": [ { "name": "Portable Slot", @@ -30934,8 +27671,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -30962,7 +27697,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -30983,8 +27717,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -31011,7 +27743,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -31032,8 +27763,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -31060,7 +27789,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -31081,8 +27809,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -31109,7 +27835,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -31130,8 +27855,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -31205,7 +27928,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -31225,9 +27947,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureLadderEnd": { "prefab": { @@ -31238,9 +27958,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureLargeDirectHeatExchangeGastoGas": { "prefab": { @@ -31252,8 +27970,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -31264,7 +27980,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -31281,7 +27996,6 @@ "role": "Input2" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -31302,8 +28016,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -31314,7 +28026,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -31331,7 +28042,6 @@ "role": "Input2" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -31352,8 +28062,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -31364,7 +28072,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -31381,7 +28088,6 @@ "role": "Input2" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -31406,7 +28112,6 @@ "convection_factor": 0.02, "radiation_factor": 2.0 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -31420,7 +28125,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -31441,7 +28145,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -31462,8 +28165,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -31499,7 +28200,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -31520,8 +28220,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -31548,7 +28246,6 @@ "BestContactFilter": "ReadWrite", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -31565,7 +28262,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -31585,9 +28281,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureLightLong": { "prefab": { @@ -31599,8 +28293,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -31612,7 +28304,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -31625,7 +28316,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -31646,8 +28336,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -31659,7 +28347,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -31672,7 +28359,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -31693,8 +28379,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -31706,7 +28390,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -31719,7 +28402,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -31740,8 +28422,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -31753,7 +28433,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -31766,7 +28445,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -31787,8 +28465,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -31800,7 +28476,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -31813,7 +28488,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -31834,8 +28508,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -31847,7 +28519,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -31860,7 +28531,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -31881,8 +28551,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -31898,7 +28566,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -31919,7 +28586,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -31940,8 +28606,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -31977,7 +28641,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -31990,7 +28653,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -32011,8 +28673,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -32025,7 +28685,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -32042,7 +28701,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -32063,8 +28721,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -32075,7 +28731,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -32092,7 +28747,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -32117,7 +28771,6 @@ "convection_factor": 1.0, "radiation_factor": 0.75 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -32125,7 +28778,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -32133,7 +28785,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -32154,8 +28805,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -32171,7 +28820,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -32192,7 +28840,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -32217,7 +28864,6 @@ "convection_factor": 0.05, "radiation_factor": 0.002 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -32251,7 +28897,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -32268,7 +28913,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -32293,7 +28937,6 @@ "convection_factor": 0.0, "radiation_factor": 0.0 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -32327,7 +28970,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -32344,7 +28986,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -32369,7 +29010,6 @@ "convection_factor": 0.05, "radiation_factor": 0.002 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -32403,7 +29043,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -32420,7 +29059,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -32445,7 +29083,6 @@ "convection_factor": 0.0, "radiation_factor": 0.0 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -32479,7 +29116,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -32496,7 +29132,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -32517,8 +29152,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -32552,7 +29185,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -32574,7 +29206,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -32595,8 +29226,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -32641,7 +29270,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -32662,8 +29290,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -32674,7 +29300,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -32687,7 +29312,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -32708,8 +29332,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -32720,7 +29342,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -32733,7 +29354,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -32754,8 +29374,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -32794,7 +29412,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -32815,8 +29432,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -32828,7 +29443,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -32845,7 +29459,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -32866,8 +29479,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -32883,7 +29494,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -32904,7 +29514,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -32925,8 +29534,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -32981,7 +29588,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -33006,7 +29612,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -33027,8 +29632,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -33041,7 +29644,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -33062,7 +29664,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -33083,8 +29684,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -33097,7 +29696,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -33118,7 +29716,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -33139,8 +29736,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -33153,7 +29748,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -33174,7 +29768,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -33195,8 +29788,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -33207,7 +29798,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -33224,7 +29814,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -33245,8 +29834,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -33290,7 +29877,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -33311,8 +29897,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -33323,7 +29907,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -33336,7 +29919,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -33357,8 +29939,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -33404,7 +29984,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -33425,8 +30004,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -33435,7 +30012,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -33452,7 +30028,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -33473,8 +30048,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -33522,7 +30095,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -33543,8 +30115,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -33595,7 +30165,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -33616,8 +30185,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -33626,7 +30193,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -33643,7 +30209,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -33664,8 +30229,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -33707,7 +30270,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -33728,12 +30290,9 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": {}, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -33754,7 +30313,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -33775,8 +30333,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -33789,7 +30345,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -33810,7 +30365,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -33831,8 +30385,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -33845,7 +30397,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -33866,7 +30417,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -33887,8 +30437,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -33898,7 +30446,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -33911,7 +30458,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -33932,8 +30478,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -33945,7 +30489,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -33962,7 +30505,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -33983,8 +30525,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -34028,7 +30568,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -34049,8 +30588,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -34063,7 +30600,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -34084,7 +30620,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -34105,8 +30640,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -34214,7 +30747,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -34271,8 +30803,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -34283,7 +30813,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -34300,7 +30829,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -34321,8 +30849,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -34333,7 +30859,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -34350,7 +30875,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -34371,8 +30895,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": {}, @@ -34404,7 +30926,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -34425,8 +30946,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -34439,7 +30958,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -34460,7 +30978,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -34481,8 +30998,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -34496,7 +31011,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -34517,7 +31031,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -34538,8 +31051,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -34566,7 +31077,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -34591,7 +31101,6 @@ "convection_factor": 1.25, "radiation_factor": 0.4 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -34602,7 +31111,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -34619,7 +31127,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -34644,7 +31151,6 @@ "convection_factor": 1.25, "radiation_factor": 0.4 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -34655,7 +31161,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -34672,7 +31177,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -34693,8 +31197,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -34730,7 +31232,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -34755,7 +31256,6 @@ "convection_factor": 0.2, "radiation_factor": 4.0 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -34766,7 +31266,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -34783,7 +31282,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -34808,7 +31306,6 @@ "convection_factor": 0.2, "radiation_factor": 4.0 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -34819,7 +31316,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -34836,7 +31332,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -34861,7 +31356,6 @@ "convection_factor": 0.05, "radiation_factor": 0.002 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -34895,7 +31389,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -34912,7 +31405,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -34937,7 +31429,6 @@ "convection_factor": 0.05, "radiation_factor": 0.002 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -34971,7 +31462,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -34988,7 +31478,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -35009,8 +31498,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -35021,7 +31508,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -35034,7 +31520,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -35059,7 +31544,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -35222,8 +31706,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -35233,7 +31715,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -35246,7 +31727,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -35267,8 +31747,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -35301,7 +31779,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -35318,7 +31795,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -35339,8 +31815,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -35461,7 +31935,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -35510,7 +31983,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -35535,7 +32007,6 @@ "convection_factor": 1.0, "radiation_factor": 0.4 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -35546,7 +32017,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -35563,7 +32033,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -35588,7 +32057,6 @@ "convection_factor": 1.0, "radiation_factor": 0.4 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -35599,7 +32067,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -35616,7 +32083,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -35637,8 +32103,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -35646,7 +32110,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -35654,7 +32117,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -35678,8 +32140,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructurePassiveVentInsulated": { "prefab": { @@ -35694,8 +32155,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructurePassthroughHeatExchangerGasToGas": { "prefab": { @@ -35707,8 +32167,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -35719,7 +32177,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -35744,7 +32201,6 @@ "role": "Output2" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -35765,8 +32221,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -35777,7 +32231,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -35802,7 +32255,6 @@ "role": "Output2" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -35823,8 +32275,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -35835,7 +32285,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -35860,7 +32309,6 @@ "role": "Output2" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -35880,9 +32328,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructurePictureFrameThickLandscapeSmall": { "prefab": { @@ -35893,9 +32339,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructurePictureFrameThickMountLandscapeLarge": { "prefab": { @@ -35906,9 +32350,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructurePictureFrameThickMountLandscapeSmall": { "prefab": { @@ -35919,9 +32361,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructurePictureFrameThickMountPortraitLarge": { "prefab": { @@ -35932,9 +32372,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructurePictureFrameThickMountPortraitSmall": { "prefab": { @@ -35945,9 +32383,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructurePictureFrameThickPortraitLarge": { "prefab": { @@ -35958,9 +32394,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructurePictureFrameThickPortraitSmall": { "prefab": { @@ -35971,9 +32405,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructurePictureFrameThinLandscapeLarge": { "prefab": { @@ -35984,9 +32416,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructurePictureFrameThinLandscapeSmall": { "prefab": { @@ -35997,9 +32427,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructurePictureFrameThinMountLandscapeLarge": { "prefab": { @@ -36010,9 +32438,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructurePictureFrameThinMountLandscapeSmall": { "prefab": { @@ -36023,9 +32449,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructurePictureFrameThinMountPortraitLarge": { "prefab": { @@ -36036,9 +32460,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructurePictureFrameThinMountPortraitSmall": { "prefab": { @@ -36049,9 +32471,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructurePictureFrameThinPortraitLarge": { "prefab": { @@ -36062,9 +32482,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructurePictureFrameThinPortraitSmall": { "prefab": { @@ -36075,9 +32493,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructurePipeAnalysizer": { "prefab": { @@ -36089,8 +32505,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -36126,7 +32540,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -36139,7 +32552,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -36163,8 +32575,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructurePipeCowl": { "prefab": { @@ -36179,8 +32590,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructurePipeCrossJunction": { "prefab": { @@ -36195,8 +32605,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructurePipeCrossJunction3": { "prefab": { @@ -36211,8 +32620,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructurePipeCrossJunction4": { "prefab": { @@ -36227,8 +32635,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructurePipeCrossJunction5": { "prefab": { @@ -36243,8 +32650,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructurePipeCrossJunction6": { "prefab": { @@ -36259,8 +32665,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructurePipeHeater": { "prefab": { @@ -36272,8 +32677,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -36286,7 +32689,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -36303,7 +32705,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -36324,8 +32725,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -36337,7 +32736,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -36350,7 +32748,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -36374,8 +32771,7 @@ "thermal_info": { "convection_factor": 0.0, "radiation_factor": 0.0 - }, - "internal_atmo_info": null + } }, "StructurePipeLabel": { "prefab": { @@ -36387,8 +32783,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -36396,7 +32790,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -36404,7 +32797,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -36428,8 +32820,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructurePipeLiquidCrossJunction": { "prefab": { @@ -36444,8 +32835,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructurePipeLiquidCrossJunction3": { "prefab": { @@ -36460,8 +32850,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructurePipeLiquidCrossJunction4": { "prefab": { @@ -36476,8 +32865,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructurePipeLiquidCrossJunction5": { "prefab": { @@ -36492,8 +32880,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructurePipeLiquidCrossJunction6": { "prefab": { @@ -36508,8 +32895,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructurePipeLiquidStraight": { "prefab": { @@ -36524,8 +32910,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructurePipeLiquidTJunction": { "prefab": { @@ -36540,8 +32925,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructurePipeMeter": { "prefab": { @@ -36553,8 +32937,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -36562,7 +32944,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -36570,7 +32951,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -36591,8 +32971,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -36603,7 +32981,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -36620,7 +32997,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -36644,8 +33020,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructurePipeRadiator": { "prefab": { @@ -36661,7 +33036,6 @@ "convection_factor": 1.0, "radiation_factor": 0.75 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -36669,7 +33043,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -36677,7 +33050,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -36702,7 +33074,6 @@ "convection_factor": 0.2, "radiation_factor": 3.0 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -36710,7 +33081,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -36718,7 +33088,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -36743,7 +33112,6 @@ "convection_factor": 0.2, "radiation_factor": 3.0 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -36751,7 +33119,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -36759,7 +33126,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -36783,8 +33149,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructurePipeTJunction": { "prefab": { @@ -36799,8 +33164,7 @@ "thermal_info": { "convection_factor": 0.010000001, "radiation_factor": 0.0005 - }, - "internal_atmo_info": null + } }, "StructurePlanter": { "prefab": { @@ -36816,7 +33180,6 @@ "convection_factor": 0.010000001, "radiation_factor": 0.0005 }, - "internal_atmo_info": null, "slots": [ { "name": "Plant", @@ -36837,9 +33200,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructurePlinth": { "prefab": { @@ -36851,8 +33212,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "", @@ -36870,8 +33229,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -36895,7 +33252,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -36917,7 +33273,6 @@ "role": "Input2" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -36938,8 +33293,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -36960,7 +33313,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -36978,7 +33330,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -36999,8 +33350,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -37041,7 +33390,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -37062,8 +33410,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -37075,7 +33421,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -37092,7 +33437,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -37113,8 +33457,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -37155,7 +33497,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -37176,8 +33517,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -37185,7 +33524,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -37198,7 +33536,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -37219,8 +33556,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -37228,7 +33563,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -37241,7 +33575,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -37262,8 +33595,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -37299,7 +33630,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -37320,8 +33650,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -37360,7 +33688,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -37381,8 +33708,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -37421,7 +33746,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -37442,8 +33766,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -37459,7 +33781,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -37480,7 +33801,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -37501,8 +33821,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -37537,7 +33855,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -37558,7 +33875,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -37579,8 +33895,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -37618,7 +33932,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -37639,7 +33952,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -37660,8 +33972,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -37670,7 +33980,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -37687,7 +33996,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -37708,8 +34016,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -37718,7 +34024,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -37735,7 +34040,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -37756,8 +34060,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -37766,7 +34068,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -37783,7 +34084,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -37804,8 +34104,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -37821,7 +34119,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -37842,7 +34139,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -37863,8 +34159,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -37875,7 +34169,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -37888,7 +34181,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -37909,8 +34201,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -37948,7 +34238,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -37969,7 +34258,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -37990,8 +34278,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -38007,7 +34293,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -38028,7 +34313,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -38048,9 +34332,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureRecycler": { "prefab": { @@ -38062,8 +34344,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -38103,7 +34383,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -38137,7 +34416,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -38162,7 +34440,6 @@ "convection_factor": 0.0, "radiation_factor": 0.0 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -38307,7 +34584,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -38741,7 +35017,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": true, "has_color_state": false, @@ -38761,9 +35036,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureReinforcedCompositeWindowSteel": { "prefab": { @@ -38774,9 +35047,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureReinforcedWallPaddedWindow": { "prefab": { @@ -38787,9 +35058,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureReinforcedWallPaddedWindowThin": { "prefab": { @@ -38800,9 +35069,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureRocketAvionics": { "prefab": { @@ -38814,8 +35081,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -38897,7 +35162,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -38918,8 +35182,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -38935,7 +35197,6 @@ "CelestialHash": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -38948,7 +35209,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -38980,8 +35240,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -39008,7 +35266,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": true @@ -39051,7 +35308,6 @@ "convection_factor": 0.0, "radiation_factor": 0.0 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -39088,7 +35344,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -39105,7 +35360,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -39126,8 +35380,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -39151,7 +35403,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -39185,7 +35436,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -39281,8 +35531,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -39303,7 +35551,6 @@ "DrillCondition": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -39329,7 +35576,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -39350,8 +35596,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {} @@ -39366,7 +35610,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -39384,7 +35627,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -39404,9 +35646,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureRocketTransformerSmall": { "prefab": { @@ -39418,8 +35658,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -39435,7 +35673,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -39456,7 +35693,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -39476,9 +35712,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureSDBHopper": { "prefab": { @@ -39490,8 +35724,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {} @@ -39504,7 +35736,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -39526,7 +35757,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -39547,8 +35777,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {} @@ -39562,7 +35790,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -39588,7 +35815,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -39609,8 +35835,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -39670,7 +35894,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -39691,8 +35914,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -39719,7 +35940,6 @@ "BestContactFilter": "ReadWrite", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -39736,7 +35956,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -39757,8 +35976,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -39782,7 +35999,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -39816,7 +36032,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -39912,8 +36127,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "", @@ -39947,8 +36160,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -40123,7 +36334,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -40192,7 +36402,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -40213,8 +36422,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -40247,7 +36454,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -40264,7 +36470,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -40285,8 +36490,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -40407,7 +36610,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -40456,7 +36658,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -40477,8 +36678,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -40491,7 +36690,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -40508,7 +36706,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -40529,8 +36726,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -40543,7 +36738,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -40568,7 +36762,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -40589,8 +36782,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -40598,7 +36789,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -40606,7 +36796,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -40627,8 +36816,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -40636,7 +36823,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -40644,7 +36830,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -40665,8 +36850,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -40686,7 +36869,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -40699,7 +36881,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -40724,7 +36905,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -40755,7 +36935,6 @@ "EntityState": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -40781,7 +36960,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -40806,7 +36984,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {} @@ -40858,7 +37035,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -40883,7 +37059,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {} @@ -40935,7 +37110,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -40960,7 +37134,6 @@ "convection_factor": 0.1, "radiation_factor": 0.1 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {} @@ -41012,7 +37185,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -41033,8 +37205,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {} @@ -41051,7 +37221,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -41073,7 +37242,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -41094,8 +37262,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -41106,7 +37272,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -41123,7 +37288,6 @@ "role": "Input2" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -41144,8 +37308,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -41156,7 +37318,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -41173,7 +37334,6 @@ "role": "Input2" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -41194,8 +37354,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -41206,7 +37364,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -41223,7 +37380,6 @@ "role": "Input2" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -41244,8 +37400,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -41272,7 +37426,6 @@ "BestContactFilter": "ReadWrite", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -41289,7 +37442,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -41309,9 +37461,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureSmallTableBacklessSingle": { "prefab": { @@ -41322,9 +37472,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureSmallTableDinnerSingle": { "prefab": { @@ -41335,9 +37483,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureSmallTableRectangleDouble": { "prefab": { @@ -41348,9 +37494,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureSmallTableRectangleSingle": { "prefab": { @@ -41361,9 +37505,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureSmallTableThickDouble": { "prefab": { @@ -41374,9 +37516,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureSmallTableThickSingle": { "prefab": { @@ -41387,9 +37527,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureSolarPanel": { "prefab": { @@ -41401,8 +37539,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -41415,7 +37551,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -41428,7 +37563,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -41449,8 +37583,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -41463,7 +37595,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -41476,7 +37607,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -41497,8 +37627,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -41511,7 +37639,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -41524,7 +37651,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -41545,8 +37671,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -41559,7 +37683,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -41576,7 +37699,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -41597,8 +37719,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -41611,7 +37731,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -41628,7 +37747,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -41649,8 +37767,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -41663,7 +37779,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -41676,7 +37791,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -41697,8 +37811,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -41711,7 +37823,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -41724,7 +37835,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -41745,8 +37855,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -41759,7 +37867,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -41772,7 +37879,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -41793,8 +37899,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -41848,7 +37952,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -41877,8 +37980,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -41987,7 +38088,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -42008,8 +38108,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -42100,7 +38198,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -42121,8 +38218,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -42213,7 +38308,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -42233,9 +38327,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureStairs4x2RailL": { "prefab": { @@ -42246,9 +38338,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureStairs4x2RailR": { "prefab": { @@ -42259,9 +38349,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureStairs4x2Rails": { "prefab": { @@ -42272,9 +38360,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureStairwellBackLeft": { "prefab": { @@ -42285,9 +38371,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureStairwellBackPassthrough": { "prefab": { @@ -42298,9 +38382,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureStairwellBackRight": { "prefab": { @@ -42311,9 +38393,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureStairwellFrontLeft": { "prefab": { @@ -42324,9 +38404,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureStairwellFrontPassthrough": { "prefab": { @@ -42337,9 +38415,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureStairwellFrontRight": { "prefab": { @@ -42350,9 +38426,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureStairwellNoDoors": { "prefab": { @@ -42363,9 +38437,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureStirlingEngine": { "prefab": { @@ -42381,7 +38453,6 @@ "convection_factor": 0.15, "radiation_factor": 0.15 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {} @@ -42424,7 +38495,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -42454,7 +38524,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -42475,8 +38544,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -42817,7 +38884,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -42946,7 +39012,6 @@ ], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -42967,8 +39032,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -43031,7 +39094,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -43073,7 +39135,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -43098,7 +39159,6 @@ "convection_factor": 0.05, "radiation_factor": 0.002 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -43133,7 +39193,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -43150,7 +39209,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -43175,7 +39233,6 @@ "convection_factor": 0.0, "radiation_factor": 0.0 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -43210,7 +39267,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -43227,7 +39283,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -43252,7 +39307,6 @@ "convection_factor": 0.010000001, "radiation_factor": 0.0005 }, - "internal_atmo_info": null, "slots": [ { "name": "", @@ -43274,7 +39328,6 @@ "convection_factor": 0.010000001, "radiation_factor": 0.0005 }, - "internal_atmo_info": null, "slots": [ { "name": "Portable Slot", @@ -43296,7 +39349,6 @@ "convection_factor": 0.05, "radiation_factor": 0.002 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -43331,7 +39383,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -43348,7 +39399,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -43373,7 +39423,6 @@ "convection_factor": 0.05, "radiation_factor": 0.002 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -43408,7 +39457,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -43425,7 +39473,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -43450,7 +39497,6 @@ "convection_factor": 0.05, "radiation_factor": 0.002 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -43485,7 +39531,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -43502,7 +39547,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -43527,7 +39571,6 @@ "convection_factor": 0.0, "radiation_factor": 0.0 }, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -43562,7 +39605,6 @@ "RatioPollutedWater": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -43579,7 +39621,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": true, "has_color_state": false, @@ -43600,8 +39641,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -43625,7 +39664,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -43659,7 +39697,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -43755,8 +39792,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "Torpedo", @@ -43802,8 +39837,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -43815,7 +39848,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -43828,7 +39860,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -43849,8 +39880,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -43866,7 +39895,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -43887,7 +39915,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -43908,8 +39935,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -43925,7 +39950,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -43942,7 +39966,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -43963,8 +39986,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -43980,7 +40001,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -43997,7 +40017,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -44018,8 +40037,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -44035,7 +40052,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -44052,7 +40068,6 @@ "role": "Output" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -44073,8 +40088,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -44090,7 +40103,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -44107,7 +40119,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -44128,8 +40139,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -44138,7 +40147,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -44155,7 +40163,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -44176,8 +40183,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -44222,7 +40227,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -44243,8 +40247,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -44318,7 +40320,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -44339,8 +40340,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -44349,7 +40348,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -44362,7 +40360,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -44383,8 +40380,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -44396,7 +40391,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -44413,7 +40407,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -44434,8 +40427,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {}, @@ -44558,7 +40549,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -44992,7 +40982,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -45013,8 +41002,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -45030,7 +41017,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -45051,7 +41037,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -45071,9 +41056,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallArchArrow": { "prefab": { @@ -45084,9 +41067,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallArchCornerRound": { "prefab": { @@ -45097,9 +41078,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallArchCornerSquare": { "prefab": { @@ -45110,9 +41089,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallArchCornerTriangle": { "prefab": { @@ -45123,9 +41100,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallArchPlating": { "prefab": { @@ -45136,9 +41111,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallArchTwoTone": { "prefab": { @@ -45149,9 +41122,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallCooler": { "prefab": { @@ -45163,8 +41134,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -45192,7 +41161,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -45214,7 +41182,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -45234,9 +41201,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallFlatCornerRound": { "prefab": { @@ -45247,9 +41212,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallFlatCornerSquare": { "prefab": { @@ -45260,9 +41223,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallFlatCornerTriangle": { "prefab": { @@ -45273,9 +41234,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallFlatCornerTriangleFlat": { "prefab": { @@ -45286,9 +41245,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallGeometryCorner": { "prefab": { @@ -45299,9 +41256,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallGeometryStreight": { "prefab": { @@ -45312,9 +41267,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallGeometryT": { "prefab": { @@ -45325,9 +41278,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallGeometryTMirrored": { "prefab": { @@ -45338,9 +41289,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallHeater": { "prefab": { @@ -45352,8 +41301,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -45378,7 +41325,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -45396,7 +41342,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -45416,9 +41361,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallIron02": { "prefab": { @@ -45429,9 +41372,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallIron03": { "prefab": { @@ -45442,9 +41383,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallIron04": { "prefab": { @@ -45455,9 +41394,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallLargePanel": { "prefab": { @@ -45468,9 +41405,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallLargePanelArrow": { "prefab": { @@ -45481,9 +41416,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallLight": { "prefab": { @@ -45495,8 +41428,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -45508,7 +41439,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -45521,7 +41451,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -45542,8 +41471,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -45569,7 +41496,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -45587,7 +41513,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -45607,9 +41532,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallPaddedArchCorner": { "prefab": { @@ -45620,9 +41543,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallPaddedArchLightFittingTop": { "prefab": { @@ -45633,9 +41554,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallPaddedArchLightsFittings": { "prefab": { @@ -45646,9 +41565,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallPaddedCorner": { "prefab": { @@ -45659,9 +41576,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallPaddedCornerThin": { "prefab": { @@ -45672,9 +41587,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallPaddedNoBorder": { "prefab": { @@ -45685,9 +41598,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallPaddedNoBorderCorner": { "prefab": { @@ -45698,9 +41609,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallPaddedThinNoBorder": { "prefab": { @@ -45711,9 +41620,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallPaddedThinNoBorderCorner": { "prefab": { @@ -45724,9 +41631,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallPaddedWindow": { "prefab": { @@ -45737,9 +41642,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallPaddedWindowThin": { "prefab": { @@ -45750,9 +41653,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallPadding": { "prefab": { @@ -45763,9 +41664,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallPaddingArchVent": { "prefab": { @@ -45776,9 +41675,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallPaddingLightFitting": { "prefab": { @@ -45789,9 +41686,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallPaddingThin": { "prefab": { @@ -45802,9 +41697,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallPlating": { "prefab": { @@ -45815,9 +41708,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallSmallPanelsAndHatch": { "prefab": { @@ -45828,9 +41719,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallSmallPanelsArrow": { "prefab": { @@ -45841,9 +41730,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallSmallPanelsMonoChrome": { "prefab": { @@ -45854,9 +41741,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallSmallPanelsOpen": { "prefab": { @@ -45867,9 +41752,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallSmallPanelsTwoTone": { "prefab": { @@ -45880,9 +41763,7 @@ }, "structure": { "small_grid": false - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWallVent": { "prefab": { @@ -45893,9 +41774,7 @@ }, "structure": { "small_grid": true - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "StructureWaterBottleFiller": { "prefab": { @@ -45907,8 +41786,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -45949,7 +41826,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -45971,7 +41847,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -45992,8 +41867,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -46034,7 +41907,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -46056,7 +41928,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -46077,8 +41948,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -46122,7 +41991,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -46148,7 +42016,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -46169,8 +42036,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -46214,7 +42079,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -46240,7 +42104,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -46261,8 +42124,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -46278,7 +42139,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -46299,7 +42159,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -46320,8 +42179,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -46329,7 +42186,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -46337,7 +42193,6 @@ "slots": [], "device": { "connection_list": [], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -46358,8 +42213,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": {} @@ -46376,7 +42229,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -46410,7 +42262,6 @@ "role": "Input" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -46431,8 +42282,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -46460,7 +42309,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -46482,7 +42330,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -46503,8 +42350,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -46541,7 +42386,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": true, "has_atmosphere": false, "has_color_state": false, @@ -46562,8 +42406,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -46572,7 +42414,6 @@ "ReferenceId": "Read", "NameHash": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -46589,7 +42430,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -46610,8 +42450,6 @@ "structure": { "small_grid": true }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": {}, "logic_types": { @@ -46647,7 +42485,6 @@ "role": "None" } ], - "device_pins_length": null, "has_activate_state": false, "has_atmosphere": false, "has_color_state": false, @@ -46667,15 +42504,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "ToyLuna": { "prefab": { @@ -46686,15 +42519,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } }, "UniformCommander": { "prefab": { @@ -46705,15 +42534,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Uniform", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "", @@ -46746,15 +42571,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Uniform", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "", @@ -46783,15 +42604,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Uniform", "sorting_class": "Clothing" }, - "thermal_info": null, - "internal_atmo_info": null, "slots": [ { "name": "", @@ -46820,15 +42637,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -46847,7 +42660,6 @@ "On": "ReadWrite", "ReferenceId": "Read" }, - "modes": null, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -46868,15 +42680,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -46924,15 +42732,11 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "None", "sorting_class": "Tools" }, - "thermal_info": null, - "internal_atmo_info": null, "logic": { "logic_slot_types": { "0": { @@ -46980,22 +42784,17 @@ }, "item": { "consumable": false, - "filter_type": null, "ingredient": false, "max_quantity": 1, - "reagents": null, "slot_class": "Torpedo", "sorting_class": "Default" - }, - "thermal_info": null, - "internal_atmo_info": null + } } }, "reagents": { "Alcohol": { "Hash": 1565803737, - "Unit": "ml", - "Sources": null + "Unit": "ml" }, "Astroloy": { "Hash": -1493155787, @@ -47208,8 +43007,7 @@ }, "Plastic": { "Hash": 791382247, - "Unit": "g", - "Sources": null + "Unit": "g" }, "Potato": { "Hash": -1657266385, @@ -47237,8 +43035,7 @@ }, "SalicylicAcid": { "Hash": -2086114347, - "Unit": "g", - "Sources": null + "Unit": "g" }, "Silicon": { "Hash": -1195893171, diff --git a/xtask/src/generate/database.rs b/xtask/src/generate/database.rs index 7f39434..cb3fd73 100644 --- a/xtask/src/generate/database.rs +++ b/xtask/src/generate/database.rs @@ -189,10 +189,26 @@ pub fn generate_database( if !data_path.exists() { std::fs::create_dir(&data_path)?; } - let database_path = data_path.join("database.json"); - let mut database_file = std::io::BufWriter::new(std::fs::File::create(database_path)?); - serde_json::to_writer_pretty(&mut database_file, &db)?; - database_file.flush()?; + { + let database_path = data_path.join("database.json"); + let mut database_file = std::io::BufWriter::new(std::fs::File::create(database_path)?); + let json = serde_json::to_string_pretty(&db)?; + // this may seem anathema but I don't want to write a separate struct set to skip Nones + // the current set can't skip Nones to be uneval compatible + // we are pretty printing and I know the keys are well formed and that all nulls are from a + // None so a regex to replace them is easy and sound + // + // remove preceding comma if it exists, leave trailing comma intact if it exists, capture + // repeating groups of null fields + // + // https://regex101.com/r/V2tXIa/1 + // + let null_matcher = regex::Regex::new(r#"(?:(?:,\n)\s*"\w+":\snull)+(,?)"#) + .unwrap(); + let json = null_matcher.replace_all(&json, "$1"); + write!(&mut database_file, "{json}")?; + database_file.flush()?; + } let prefab_map_path = workspace .join("stationeers_data") From 24778b21b7bff9d78c6a11bd8f67af3c83f6fd18 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Thu, 23 May 2024 23:04:42 -0700 Subject: [PATCH 27/50] refactor(vm): rework object freazing - let vm carry object dtabase - seperate frozen object info and templates --- data/database.json | 12631 ++++++++++++++++ ic10emu/src/errors.rs | 15 +- ic10emu/src/grammar.rs | 4 +- ic10emu/src/interpreter/instructions.rs | 2 +- ic10emu/src/network.rs | 38 +- ic10emu/src/vm.rs | 207 +- ic10emu/src/vm/instructions/operands.rs | 10 +- ic10emu/src/vm/object.rs | 19 +- ic10emu/src/vm/object/errors.rs | 2 +- ic10emu/src/vm/object/generic/structs.rs | 230 +- ic10emu/src/vm/object/generic/traits.rs | 22 +- ic10emu/src/vm/object/stationpedia.rs | 19 +- .../stationpedia/structs/circuit_holder.rs | 17 +- .../structs/integrated_circuit.rs | 4 +- ic10emu/src/vm/object/templates.rs | 2035 ++- ic10emu/src/vm/object/traits.rs | 18 +- stationeers_data/src/database/prefab_map.rs | 4036 +++++ .../src/enums/{basic_enums.rs => basic.rs} | 2 +- .../src/enums/{script_enums.rs => script.rs} | 0 stationeers_data/src/lib.rs | 43 +- stationeers_data/src/templates.rs | 41 +- xtask/src/generate.rs | 2 +- xtask/src/generate/database.rs | 97 +- xtask/src/generate/enums.rs | 24 +- xtask/src/stationpedia.rs | 12 +- 25 files changed, 18268 insertions(+), 1262 deletions(-) rename stationeers_data/src/enums/{basic_enums.rs => basic.rs} (99%) rename stationeers_data/src/enums/{script_enums.rs => script.rs} (100%) diff --git a/data/database.json b/data/database.json index 1cd7a38..3cf93e7 100644 --- a/data/database.json +++ b/data/database.json @@ -16386,6 +16386,253 @@ ], "processed_reagents": [] }, + "fabricator_info": { + "tier": "Undefined", + "recipes": { + "ItemCannedCondensedMilk": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Milk": 200.0, + "Steel": 1.0 + } + }, + "ItemCannedEdamame": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Oil": 1.0, + "Soy": 15.0, + "Steel": 1.0 + } + }, + "ItemCannedMushroom": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Mushroom": 8.0, + "Oil": 1.0, + "Steel": 1.0 + } + }, + "ItemCannedPowderedEggs": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Egg": 5.0, + "Oil": 1.0, + "Steel": 1.0 + } + }, + "ItemCannedRicePudding": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Oil": 1.0, + "Rice": 5.0, + "Steel": 1.0 + } + }, + "ItemCornSoup": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Corn": 5.0, + "Oil": 1.0, + "Steel": 1.0 + } + }, + "ItemFrenchFries": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Oil": 1.0, + "Potato": 1.0, + "Steel": 1.0 + } + }, + "ItemPumpkinSoup": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Oil": 1.0, + "Pumpkin": 5.0, + "Steel": 1.0 + } + }, + "ItemTomatoSoup": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Oil": 1.0, + "Steel": 1.0, + "Tomato": 5.0 + } + } + } + }, "memory": { "instructions": { "DeviceSetLock": { @@ -17195,6 +17442,1630 @@ ], "processed_reagents": [] }, + "fabricator_info": { + "tier": "Undefined", + "recipes": { + "CardboardBox": { + "tier": "TierOne", + "time": 2.0, + "energy": 120.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 2.0 + } + }, + "ItemCableCoil": { + "tier": "TierOne", + "time": 5.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Copper": 0.5 + } + }, + "ItemCoffeeMug": { + "tier": "TierOne", + "time": 1.0, + "energy": 70.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemEggCarton": { + "tier": "TierOne", + "time": 10.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 2.0 + } + }, + "ItemEmptyCan": { + "tier": "TierOne", + "time": 1.0, + "energy": 70.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 1.0 + } + }, + "ItemEvaSuit": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 5.0 + } + }, + "ItemGlassSheets": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 2.0 + } + }, + "ItemIronFrames": { + "tier": "TierOne", + "time": 4.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 4.0 + } + }, + "ItemIronSheets": { + "tier": "TierOne", + "time": 1.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemKitAccessBridge": { + "tier": "TierOne", + "time": 30.0, + "energy": 15000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Solder": 2.0, + "Steel": 10.0 + } + }, + "ItemKitArcFurnace": { + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 20.0 + } + }, + "ItemKitAutolathe": { + "tier": "TierOne", + "time": 180.0, + "energy": 36000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 2.0, + "Iron": 20.0 + } + }, + "ItemKitBeds": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 20.0 + } + }, + "ItemKitBlastDoor": { + "tier": "TierTwo", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 3.0, + "Steel": 15.0 + } + }, + "ItemKitCentrifuge": { + "tier": "TierOne", + "time": 60.0, + "energy": 18000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 20.0 + } + }, + "ItemKitChairs": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 20.0 + } + }, + "ItemKitChute": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemKitCompositeCladding": { + "tier": "TierOne", + "time": 1.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemKitCompositeFloorGrating": { + "tier": "TierOne", + "time": 3.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemKitCrate": { + "tier": "TierOne", + "time": 10.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 10.0 + } + }, + "ItemKitCrateMkII": { + "tier": "TierTwo", + "time": 10.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 5.0, + "Iron": 10.0 + } + }, + "ItemKitCrateMount": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 10.0 + } + }, + "ItemKitDeepMiner": { + "tier": "TierTwo", + "time": 180.0, + "energy": 72000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 5.0, + "Electrum": 5.0, + "Invar": 10.0, + "Steel": 50.0 + } + }, + "ItemKitDoor": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 3.0, + "Iron": 7.0 + } + }, + "ItemKitElectronicsPrinter": { + "tier": "TierOne", + "time": 120.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 2.0, + "Iron": 20.0 + } + }, + "ItemKitFlagODA": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 8.0 + } + }, + "ItemKitFurnace": { + "tier": "TierOne", + "time": 120.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Iron": 30.0 + } + }, + "ItemKitFurniture": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 20.0 + } + }, + "ItemKitHydraulicPipeBender": { + "tier": "TierOne", + "time": 180.0, + "energy": 18000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 2.0, + "Iron": 20.0 + } + }, + "ItemKitInteriorDoors": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 3.0, + "Iron": 5.0 + } + }, + "ItemKitLadder": { + "tier": "TierOne", + "time": 3.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 2.0 + } + }, + "ItemKitLocker": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemKitPipe": { + "tier": "TierOne", + "time": 5.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 0.5 + } + }, + "ItemKitRailing": { + "tier": "TierOne", + "time": 1.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemKitRecycler": { + "tier": "TierOne", + "time": 60.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Iron": 20.0 + } + }, + "ItemKitReinforcedWindows": { + "tier": "TierOne", + "time": 7.0, + "energy": 700.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 2.0 + } + }, + "ItemKitRespawnPointWallMounted": { + "tier": "TierOne", + "time": 20.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Iron": 3.0 + } + }, + "ItemKitRocketManufactory": { + "tier": "TierOne", + "time": 120.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 2.0, + "Iron": 20.0 + } + }, + "ItemKitSDBHopper": { + "tier": "TierOne", + "time": 10.0, + "energy": 700.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 15.0 + } + }, + "ItemKitSecurityPrinter": { + "tier": "TierOne", + "time": 180.0, + "energy": 36000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 20.0, + "Gold": 20.0, + "Steel": 20.0 + } + }, + "ItemKitSign": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemKitSorter": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 1.0, + "Iron": 10.0 + } + }, + "ItemKitStacker": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 10.0 + } + }, + "ItemKitStairs": { + "tier": "TierOne", + "time": 20.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 15.0 + } + }, + "ItemKitStairwell": { + "tier": "TierOne", + "time": 20.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 15.0 + } + }, + "ItemKitStandardChute": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 2.0, + "Electrum": 2.0, + "Iron": 3.0 + } + }, + "ItemKitTables": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 20.0 + } + }, + "ItemKitToolManufactory": { + "tier": "TierOne", + "time": 120.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Iron": 20.0 + } + }, + "ItemKitWall": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 1.0 + } + }, + "ItemKitWallArch": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 1.0 + } + }, + "ItemKitWallFlat": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 1.0 + } + }, + "ItemKitWallGeometry": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 1.0 + } + }, + "ItemKitWallIron": { + "tier": "TierOne", + "time": 1.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemKitWallPadded": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 1.0 + } + }, + "ItemKitWindowShutter": { + "tier": "TierOne", + "time": 7.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 1.0, + "Steel": 2.0 + } + }, + "ItemPlasticSheets": { + "tier": "TierOne", + "time": 1.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 0.5 + } + }, + "ItemSpaceHelmet": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Gold": 2.0 + } + }, + "ItemSteelFrames": { + "tier": "TierOne", + "time": 7.0, + "energy": 800.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 2.0 + } + }, + "ItemSteelSheets": { + "tier": "TierOne", + "time": 3.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 0.5 + } + }, + "ItemStelliteGlassSheets": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 2.0, + "Stellite": 1.0 + } + }, + "ItemWallLight": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Iron": 1.0, + "Silicon": 1.0 + } + }, + "KitSDBSilo": { + "tier": "TierOne", + "time": 120.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 20.0, + "Steel": 15.0 + } + }, + "KitStructureCombustionCentrifuge": { + "tier": "TierTwo", + "time": 120.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 5.0, + "Invar": 10.0, + "Steel": 20.0 + } + } + } + }, "memory": { "instructions": { "DeviceSetLock": { @@ -17343,6 +19214,477 @@ ], "processed_reagents": [] }, + "fabricator_info": { + "tier": "TierOne", + "recipes": { + "ItemBreadLoaf": { + "tier": "TierOne", + "time": 10.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Flour": 200.0, + "Oil": 5.0 + } + }, + "ItemCerealBar": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Flour": 50.0 + } + }, + "ItemChocolateBar": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Cocoa": 2.0, + "Sugar": 10.0 + } + }, + "ItemChocolateCake": { + "tier": "TierOne", + "time": 30.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 5, + "reagents": { + "Cocoa": 2.0, + "Egg": 1.0, + "Flour": 50.0, + "Milk": 5.0, + "Sugar": 50.0 + } + }, + "ItemChocolateCerealBar": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Cocoa": 1.0, + "Flour": 50.0 + } + }, + "ItemCookedCondensedMilk": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Milk": 100.0 + } + }, + "ItemCookedCorn": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Corn": 1.0 + } + }, + "ItemCookedMushroom": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Mushroom": 1.0 + } + }, + "ItemCookedPowderedEggs": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Egg": 4.0 + } + }, + "ItemCookedPumpkin": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Pumpkin": 1.0 + } + }, + "ItemCookedRice": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Rice": 3.0 + } + }, + "ItemCookedSoybean": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Soy": 5.0 + } + }, + "ItemCookedTomato": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Tomato": 1.0 + } + }, + "ItemFries": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Oil": 5.0, + "Potato": 1.0 + } + }, + "ItemMuffin": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Egg": 1.0, + "Flour": 50.0, + "Milk": 10.0 + } + }, + "ItemPlainCake": { + "tier": "TierOne", + "time": 30.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Egg": 1.0, + "Flour": 50.0, + "Milk": 5.0, + "Sugar": 50.0 + } + }, + "ItemPotatoBaked": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Potato": 1.0 + } + }, + "ItemPumpkinPie": { + "tier": "TierOne", + "time": 10.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Egg": 1.0, + "Flour": 100.0, + "Milk": 10.0, + "Pumpkin": 10.0 + } + } + } + }, "memory": { "instructions": { "DeviceSetLock": { @@ -24263,6 +26605,3529 @@ ], "processed_reagents": [] }, + "fabricator_info": { + "tier": "Undefined", + "recipes": { + "ApplianceChemistryStation": { + "tier": "TierOne", + "time": 45.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 1.0, + "Steel": 5.0 + } + }, + "ApplianceDeskLampLeft": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 2.0, + "Silicon": 1.0 + } + }, + "ApplianceDeskLampRight": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 2.0, + "Silicon": 1.0 + } + }, + "ApplianceMicrowave": { + "tier": "TierOne", + "time": 45.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 5.0 + } + }, + "AppliancePackagingMachine": { + "tier": "TierOne", + "time": 30.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 10.0 + } + }, + "AppliancePaintMixer": { + "tier": "TierOne", + "time": 45.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 1.0, + "Steel": 5.0 + } + }, + "AppliancePlantGeneticAnalyzer": { + "tier": "TierOne", + "time": 45.0, + "energy": 4500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 1.0, + "Steel": 5.0 + } + }, + "AppliancePlantGeneticSplicer": { + "tier": "TierOne", + "time": 50.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Inconel": 10.0, + "Stellite": 20.0 + } + }, + "AppliancePlantGeneticStabilizer": { + "tier": "TierOne", + "time": 50.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Inconel": 10.0, + "Stellite": 20.0 + } + }, + "ApplianceReagentProcessor": { + "tier": "TierOne", + "time": 45.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 5.0 + } + }, + "ApplianceTabletDock": { + "tier": "TierOne", + "time": 30.0, + "energy": 750.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 5.0, + "Silicon": 1.0 + } + }, + "AutolathePrinterMod": { + "tier": "TierTwo", + "time": 180.0, + "energy": 72000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 8.0, + "Electrum": 8.0, + "Solder": 8.0, + "Steel": 35.0 + } + }, + "Battery_Wireless_cell": { + "tier": "TierOne", + "time": 10.0, + "energy": 10000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 2.0, + "Iron": 2.0 + } + }, + "Battery_Wireless_cell_Big": { + "tier": "TierOne", + "time": 20.0, + "energy": 20000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 15.0, + "Gold": 5.0, + "Steel": 5.0 + } + }, + "CartridgeAtmosAnalyser": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CartridgeConfiguration": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CartridgeElectronicReader": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CartridgeGPS": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CartridgeMedicalAnalyser": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CartridgeNetworkAnalyser": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CartridgeOreScanner": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CartridgeOreScannerColor": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 5.0, + "Electrum": 5.0, + "Invar": 5.0, + "Silicon": 5.0 + } + }, + "CartridgePlantAnalyser": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CartridgeTracker": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CircuitboardAdvAirlockControl": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CircuitboardAirControl": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "CircuitboardAirlockControl": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CircuitboardDoorControl": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "CircuitboardGasDisplay": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CircuitboardGraphDisplay": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "CircuitboardHashDisplay": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "CircuitboardModeControl": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "CircuitboardPowerControl": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "CircuitboardShipDisplay": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "CircuitboardSolarControl": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "DynamicLight": { + "tier": "TierOne", + "time": 20.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 5.0 + } + }, + "ElectronicPrinterMod": { + "tier": "TierOne", + "time": 180.0, + "energy": 72000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 8.0, + "Electrum": 8.0, + "Solder": 8.0, + "Steel": 35.0 + } + }, + "ItemAdvancedTablet": { + "tier": "TierTwo", + "time": 60.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 6, + "reagents": { + "Copper": 5.5, + "Electrum": 1.0, + "Gold": 12.0, + "Iron": 3.0, + "Solder": 5.0, + "Steel": 2.0 + } + }, + "ItemAreaPowerControl": { + "tier": "TierOne", + "time": 5.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Iron": 5.0, + "Solder": 3.0 + } + }, + "ItemBatteryCell": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 2.0, + "Iron": 2.0 + } + }, + "ItemBatteryCellLarge": { + "tier": "TierOne", + "time": 20.0, + "energy": 20000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 5.0, + "Steel": 5.0 + } + }, + "ItemBatteryCellNuclear": { + "tier": "TierTwo", + "time": 180.0, + "energy": 360000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Astroloy": 10.0, + "Inconel": 5.0, + "Steel": 5.0 + } + }, + "ItemBatteryCharger": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 10.0 + } + }, + "ItemBatteryChargerSmall": { + "tier": "TierOne", + "time": 1.0, + "energy": 250.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 2.0, + "Iron": 5.0 + } + }, + "ItemCableAnalyser": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Iron": 1.0, + "Silicon": 2.0 + } + }, + "ItemCableCoil": { + "tier": "TierOne", + "time": 1.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Copper": 0.5 + } + }, + "ItemCableCoilHeavy": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 0.5, + "Gold": 0.5 + } + }, + "ItemCableFuse": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 5.0 + } + }, + "ItemCreditCard": { + "tier": "TierOne", + "time": 5.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Silicon": 5.0 + } + }, + "ItemDataDisk": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "ItemElectronicParts": { + "tier": "TierOne", + "time": 5.0, + "energy": 10.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Iron": 3.0 + } + }, + "ItemFlashingLight": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 3.0, + "Iron": 2.0 + } + }, + "ItemHEMDroidRepairKit": { + "tier": "TierTwo", + "time": 40.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 10.0, + "Inconel": 5.0, + "Solder": 5.0 + } + }, + "ItemIntegratedCircuit10": { + "tier": "TierOne", + "time": 40.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Electrum": 5.0, + "Gold": 10.0, + "Solder": 2.0, + "Steel": 4.0 + } + }, + "ItemKitAIMeE": { + "tier": "TierTwo", + "time": 25.0, + "energy": 2200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 7, + "reagents": { + "Astroloy": 10.0, + "Constantan": 8.0, + "Copper": 5.0, + "Electrum": 15.0, + "Gold": 5.0, + "Invar": 7.0, + "Steel": 22.0 + } + }, + "ItemKitAdvancedComposter": { + "tier": "TierTwo", + "time": 55.0, + "energy": 20000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 15.0, + "Electrum": 20.0, + "Solder": 5.0, + "Steel": 30.0 + } + }, + "ItemKitAdvancedFurnace": { + "tier": "TierTwo", + "time": 180.0, + "energy": 36000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 6, + "reagents": { + "Copper": 25.0, + "Electrum": 15.0, + "Gold": 5.0, + "Silicon": 6.0, + "Solder": 8.0, + "Steel": 30.0 + } + }, + "ItemKitAdvancedPackagingMachine": { + "tier": "TierTwo", + "time": 60.0, + "energy": 18000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 10.0, + "Copper": 10.0, + "Electrum": 15.0, + "Steel": 20.0 + } + }, + "ItemKitAutoMinerSmall": { + "tier": "TierTwo", + "time": 90.0, + "energy": 9000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 5, + "reagents": { + "Copper": 15.0, + "Electrum": 50.0, + "Invar": 25.0, + "Iron": 15.0, + "Steel": 100.0 + } + }, + "ItemKitAutomatedOven": { + "tier": "TierTwo", + "time": 50.0, + "energy": 15000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 5, + "reagents": { + "Constantan": 5.0, + "Copper": 15.0, + "Gold": 10.0, + "Solder": 10.0, + "Steel": 25.0 + } + }, + "ItemKitBattery": { + "tier": "TierOne", + "time": 120.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 20.0, + "Gold": 20.0, + "Steel": 20.0 + } + }, + "ItemKitBatteryLarge": { + "tier": "TierTwo", + "time": 240.0, + "energy": 96000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 6, + "reagents": { + "Copper": 35.0, + "Electrum": 10.0, + "Gold": 35.0, + "Silicon": 5.0, + "Steel": 35.0, + "Stellite": 2.0 + } + }, + "ItemKitBeacon": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 2.0, + "Gold": 4.0, + "Solder": 2.0, + "Steel": 5.0 + } + }, + "ItemKitComputer": { + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 5.0, + "Iron": 5.0 + } + }, + "ItemKitConsole": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 3.0, + "Iron": 2.0 + } + }, + "ItemKitDynamicGenerator": { + "tier": "TierOne", + "time": 120.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Gold": 15.0, + "Nickel": 15.0, + "Solder": 5.0, + "Steel": 20.0 + } + }, + "ItemKitElevator": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 2.0, + "Gold": 4.0, + "Solder": 2.0, + "Steel": 2.0 + } + }, + "ItemKitFridgeBig": { + "tier": "TierOne", + "time": 10.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 10.0, + "Gold": 5.0, + "Iron": 20.0, + "Steel": 15.0 + } + }, + "ItemKitFridgeSmall": { + "tier": "TierOne", + "time": 10.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 2.0, + "Iron": 10.0 + } + }, + "ItemKitGasGenerator": { + "tier": "TierOne", + "time": 120.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Iron": 50.0 + } + }, + "ItemKitGroundTelescope": { + "tier": "TierOne", + "time": 150.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 15.0, + "Solder": 10.0, + "Steel": 25.0 + } + }, + "ItemKitGrowLight": { + "tier": "TierOne", + "time": 30.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Electrum": 10.0, + "Steel": 5.0 + } + }, + "ItemKitHarvie": { + "tier": "TierOne", + "time": 60.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 5, + "reagents": { + "Copper": 15.0, + "Electrum": 10.0, + "Silicon": 5.0, + "Solder": 5.0, + "Steel": 10.0 + } + }, + "ItemKitHorizontalAutoMiner": { + "tier": "TierTwo", + "time": 60.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 5, + "reagents": { + "Copper": 7.0, + "Electrum": 25.0, + "Invar": 15.0, + "Iron": 8.0, + "Steel": 60.0 + } + }, + "ItemKitHydroponicStation": { + "tier": "TierOne", + "time": 120.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 20.0, + "Gold": 5.0, + "Nickel": 5.0, + "Steel": 10.0 + } + }, + "ItemKitLandingPadAtmos": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Steel": 5.0 + } + }, + "ItemKitLandingPadBasic": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Steel": 5.0 + } + }, + "ItemKitLandingPadWaypoint": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Steel": 5.0 + } + }, + "ItemKitLargeSatelliteDish": { + "tier": "TierOne", + "time": 240.0, + "energy": 72000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Astroloy": 100.0, + "Inconel": 50.0, + "Waspaloy": 20.0 + } + }, + "ItemKitLogicCircuit": { + "tier": "TierOne", + "time": 40.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Solder": 2.0, + "Steel": 4.0 + } + }, + "ItemKitLogicInputOutput": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Gold": 1.0 + } + }, + "ItemKitLogicMemory": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Gold": 1.0 + } + }, + "ItemKitLogicProcessor": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Gold": 2.0 + } + }, + "ItemKitLogicSwitch": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Gold": 1.0 + } + }, + "ItemKitLogicTransmitter": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 1.0, + "Electrum": 3.0, + "Gold": 2.0, + "Silicon": 5.0 + } + }, + "ItemKitMusicMachines": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Gold": 2.0 + } + }, + "ItemKitPowerTransmitter": { + "tier": "TierOne", + "time": 20.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 7.0, + "Gold": 5.0, + "Steel": 3.0 + } + }, + "ItemKitPowerTransmitterOmni": { + "tier": "TierOne", + "time": 20.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 8.0, + "Gold": 4.0, + "Steel": 4.0 + } + }, + "ItemKitPressurePlate": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Gold": 2.0 + } + }, + "ItemKitResearchMachine": { + "tier": "TierOne", + "time": 5.0, + "energy": 10.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Iron": 9.0 + } + }, + "ItemKitSatelliteDish": { + "tier": "TierOne", + "time": 120.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 15.0, + "Solder": 10.0, + "Steel": 20.0 + } + }, + "ItemKitSensor": { + "tier": "TierOne", + "time": 5.0, + "energy": 10.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 3.0 + } + }, + "ItemKitSmallSatelliteDish": { + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Gold": 5.0 + } + }, + "ItemKitSolarPanel": { + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 20.0, + "Gold": 5.0, + "Steel": 15.0 + } + }, + "ItemKitSolarPanelBasic": { + "tier": "TierOne", + "time": 30.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 2.0, + "Iron": 10.0 + } + }, + "ItemKitSolarPanelBasicReinforced": { + "tier": "TierTwo", + "time": 120.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 10.0, + "Electrum": 2.0, + "Invar": 10.0, + "Steel": 10.0 + } + }, + "ItemKitSolarPanelReinforced": { + "tier": "TierTwo", + "time": 120.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Astroloy": 15.0, + "Copper": 20.0, + "Electrum": 5.0, + "Steel": 10.0 + } + }, + "ItemKitSolidGenerator": { + "tier": "TierOne", + "time": 120.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Iron": 50.0 + } + }, + "ItemKitSpeaker": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Steel": 5.0 + } + }, + "ItemKitStirlingEngine": { + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 20.0, + "Gold": 5.0, + "Steel": 30.0 + } + }, + "ItemKitTransformer": { + "tier": "TierOne", + "time": 60.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 5.0, + "Steel": 10.0 + } + }, + "ItemKitTransformerSmall": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 1.0, + "Iron": 10.0 + } + }, + "ItemKitTurbineGenerator": { + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 2.0, + "Gold": 4.0, + "Iron": 5.0, + "Solder": 4.0 + } + }, + "ItemKitUprightWindTurbine": { + "tier": "TierOne", + "time": 60.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 5.0, + "Iron": 10.0 + } + }, + "ItemKitVendingMachine": { + "tier": "TierOne", + "time": 60.0, + "energy": 15000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Electrum": 50.0, + "Gold": 50.0, + "Solder": 10.0, + "Steel": 20.0 + } + }, + "ItemKitVendingMachineRefrigerated": { + "tier": "TierTwo", + "time": 60.0, + "energy": 25000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Electrum": 80.0, + "Gold": 60.0, + "Solder": 30.0, + "Steel": 40.0 + } + }, + "ItemKitWeatherStation": { + "tier": "TierOne", + "time": 60.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Gold": 3.0, + "Iron": 8.0, + "Steel": 3.0 + } + }, + "ItemKitWindTurbine": { + "tier": "TierTwo", + "time": 60.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Electrum": 5.0, + "Steel": 20.0 + } + }, + "ItemLabeller": { + "tier": "TierOne", + "time": 15.0, + "energy": 800.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 3.0 + } + }, + "ItemLaptop": { + "tier": "TierTwo", + "time": 60.0, + "energy": 18000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 5, + "reagents": { + "Copper": 5.5, + "Electrum": 5.0, + "Gold": 12.0, + "Solder": 5.0, + "Steel": 2.0 + } + }, + "ItemPowerConnector": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 3.0, + "Iron": 10.0 + } + }, + "ItemResearchCapsule": { + "tier": "TierOne", + "time": 3.0, + "energy": 400.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Iron": 9.0 + } + }, + "ItemResearchCapsuleGreen": { + "tier": "TierOne", + "time": 5.0, + "energy": 10.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Astroloy": 2.0, + "Copper": 3.0, + "Gold": 2.0, + "Iron": 9.0 + } + }, + "ItemResearchCapsuleRed": { + "tier": "TierOne", + "time": 8.0, + "energy": 50.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Iron": 2.0 + } + }, + "ItemResearchCapsuleYellow": { + "tier": "TierOne", + "time": 5.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Astroloy": 3.0, + "Copper": 3.0, + "Gold": 2.0, + "Iron": 9.0 + } + }, + "ItemSoundCartridgeBass": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 2.0, + "Silicon": 2.0 + } + }, + "ItemSoundCartridgeDrums": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 2.0, + "Silicon": 2.0 + } + }, + "ItemSoundCartridgeLeads": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 2.0, + "Silicon": 2.0 + } + }, + "ItemSoundCartridgeSynth": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 2.0, + "Silicon": 2.0 + } + }, + "ItemTablet": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Solder": 5.0 + } + }, + "ItemWallLight": { + "tier": "TierOne", + "time": 5.0, + "energy": 10.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 1.0 + } + }, + "MotherboardComms": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Electrum": 2.0, + "Gold": 5.0, + "Silver": 5.0 + } + }, + "MotherboardLogic": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "MotherboardProgrammableChip": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "MotherboardRockets": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 5.0, + "Solder": 5.0 + } + }, + "MotherboardSorter": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 5.0, + "Silver": 5.0 + } + }, + "PipeBenderMod": { + "tier": "TierTwo", + "time": 180.0, + "energy": 72000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 8.0, + "Electrum": 8.0, + "Solder": 8.0, + "Steel": 35.0 + } + }, + "PortableComposter": { + "tier": "TierOne", + "time": 55.0, + "energy": 20000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 15.0, + "Steel": 10.0 + } + }, + "PortableSolarPanel": { + "tier": "TierOne", + "time": 5.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 3.0, + "Iron": 5.0 + } + }, + "ToolPrinterMod": { + "tier": "TierTwo", + "time": 180.0, + "energy": 72000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 8.0, + "Electrum": 8.0, + "Solder": 8.0, + "Steel": 35.0 + } + } + } + }, "memory": { "instructions": { "DeviceSetLock": { @@ -26738,6 +32603,2732 @@ ], "processed_reagents": [] }, + "fabricator_info": { + "tier": "Undefined", + "recipes": { + "ApplianceSeedTray": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Iron": 10.0, + "Silicon": 15.0 + } + }, + "ItemActiveVent": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 1.0, + "Iron": 5.0 + } + }, + "ItemAdhesiveInsulation": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 1.0, + "Steel": 0.5 + } + }, + "ItemDynamicAirCon": { + "tier": "TierOne", + "time": 60.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Gold": 5.0, + "Silver": 5.0, + "Solder": 5.0, + "Steel": 20.0 + } + }, + "ItemDynamicScrubber": { + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Gold": 5.0, + "Invar": 5.0, + "Solder": 5.0, + "Steel": 20.0 + } + }, + "ItemGasCanisterEmpty": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemGasCanisterSmart": { + "tier": "TierTwo", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Silicon": 2.0, + "Steel": 15.0 + } + }, + "ItemGasFilterCarbonDioxide": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemGasFilterCarbonDioxideL": { + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + "ItemGasFilterCarbonDioxideM": { + "tier": "TierOne", + "time": 20.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 1.0, + "Iron": 5.0, + "Silver": 5.0 + } + }, + "ItemGasFilterNitrogen": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemGasFilterNitrogenL": { + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + "ItemGasFilterNitrogenM": { + "tier": "TierOne", + "time": 20.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 1.0, + "Iron": 5.0, + "Silver": 5.0 + } + }, + "ItemGasFilterNitrousOxide": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemGasFilterNitrousOxideL": { + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + "ItemGasFilterNitrousOxideM": { + "tier": "TierOne", + "time": 20.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 1.0, + "Iron": 5.0, + "Silver": 5.0 + } + }, + "ItemGasFilterOxygen": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemGasFilterOxygenL": { + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + "ItemGasFilterOxygenM": { + "tier": "TierOne", + "time": 20.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 1.0, + "Iron": 5.0, + "Silver": 5.0 + } + }, + "ItemGasFilterPollutants": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemGasFilterPollutantsL": { + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + "ItemGasFilterPollutantsM": { + "tier": "TierOne", + "time": 20.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 1.0, + "Iron": 5.0, + "Silver": 5.0 + } + }, + "ItemGasFilterVolatiles": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemGasFilterVolatilesL": { + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + "ItemGasFilterVolatilesM": { + "tier": "TierOne", + "time": 20.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 1.0, + "Iron": 5.0, + "Silver": 5.0 + } + }, + "ItemGasFilterWater": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemGasFilterWaterL": { + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + "ItemGasFilterWaterM": { + "tier": "TierOne", + "time": 20.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 1.0, + "Iron": 5.0, + "Silver": 5.0 + } + }, + "ItemHydroponicTray": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 10.0 + } + }, + "ItemKitAirlock": { + "tier": "TierOne", + "time": 50.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Steel": 15.0 + } + }, + "ItemKitAirlockGate": { + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Steel": 25.0 + } + }, + "ItemKitAtmospherics": { + "tier": "TierOne", + "time": 30.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 20.0, + "Gold": 5.0, + "Iron": 10.0 + } + }, + "ItemKitChute": { + "tier": "TierOne", + "time": 2.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemKitCryoTube": { + "tier": "TierTwo", + "time": 120.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 10.0, + "Gold": 10.0, + "Silver": 5.0, + "Steel": 35.0 + } + }, + "ItemKitDrinkingFountain": { + "tier": "TierOne", + "time": 20.0, + "energy": 620.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Iron": 5.0, + "Silicon": 8.0 + } + }, + "ItemKitDynamicCanister": { + "tier": "TierOne", + "time": 20.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 20.0 + } + }, + "ItemKitDynamicGasTankAdvanced": { + "tier": "TierTwo", + "time": 40.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Iron": 20.0, + "Silicon": 5.0, + "Steel": 15.0 + } + }, + "ItemKitDynamicHydroponics": { + "tier": "TierOne", + "time": 30.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Nickel": 5.0, + "Steel": 20.0 + } + }, + "ItemKitDynamicLiquidCanister": { + "tier": "TierOne", + "time": 20.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 20.0 + } + }, + "ItemKitDynamicMKIILiquidCanister": { + "tier": "TierTwo", + "time": 40.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Iron": 20.0, + "Silicon": 5.0, + "Steel": 15.0 + } + }, + "ItemKitEvaporationChamber": { + "tier": "TierOne", + "time": 30.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Silicon": 5.0, + "Steel": 10.0 + } + }, + "ItemKitHeatExchanger": { + "tier": "TierTwo", + "time": 30.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 10.0, + "Steel": 10.0 + } + }, + "ItemKitIceCrusher": { + "tier": "TierOne", + "time": 30.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 3.0 + } + }, + "ItemKitInsulatedLiquidPipe": { + "tier": "TierOne", + "time": 4.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 1.0, + "Steel": 1.0 + } + }, + "ItemKitInsulatedPipe": { + "tier": "TierOne", + "time": 4.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 1.0, + "Steel": 1.0 + } + }, + "ItemKitInsulatedPipeUtility": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 1.0, + "Steel": 5.0 + } + }, + "ItemKitInsulatedPipeUtilityLiquid": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 1.0, + "Steel": 5.0 + } + }, + "ItemKitLargeDirectHeatExchanger": { + "tier": "TierTwo", + "time": 30.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 10.0, + "Steel": 10.0 + } + }, + "ItemKitLargeExtendableRadiator": { + "tier": "TierTwo", + "time": 30.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Invar": 10.0, + "Steel": 10.0 + } + }, + "ItemKitLiquidRegulator": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 5.0 + } + }, + "ItemKitLiquidTank": { + "tier": "TierOne", + "time": 20.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 20.0 + } + }, + "ItemKitLiquidTankInsulated": { + "tier": "TierOne", + "time": 30.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Silicon": 30.0, + "Steel": 20.0 + } + }, + "ItemKitLiquidTurboVolumePump": { + "tier": "TierTwo", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 4.0, + "Electrum": 5.0, + "Gold": 4.0, + "Steel": 5.0 + } + }, + "ItemKitPassiveLargeRadiatorGas": { + "tier": "TierTwo", + "time": 30.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Invar": 5.0, + "Steel": 5.0 + } + }, + "ItemKitPassiveLargeRadiatorLiquid": { + "tier": "TierTwo", + "time": 30.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Invar": 5.0, + "Steel": 5.0 + } + }, + "ItemKitPassthroughHeatExchanger": { + "tier": "TierTwo", + "time": 30.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 10.0, + "Steel": 10.0 + } + }, + "ItemKitPipe": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 0.5 + } + }, + "ItemKitPipeLiquid": { + "tier": "TierOne", + "time": 2.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 0.5 + } + }, + "ItemKitPipeOrgan": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemKitPipeRadiator": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 3.0, + "Steel": 2.0 + } + }, + "ItemKitPipeRadiatorLiquid": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 3.0, + "Steel": 2.0 + } + }, + "ItemKitPipeUtility": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemKitPipeUtilityLiquid": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemKitPlanter": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 10.0 + } + }, + "ItemKitPortablesConnector": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemKitPoweredVent": { + "tier": "TierTwo", + "time": 20.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 5.0, + "Invar": 2.0, + "Steel": 5.0 + } + }, + "ItemKitRegulator": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 5.0 + } + }, + "ItemKitSensor": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "ItemKitShower": { + "tier": "TierOne", + "time": 30.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Iron": 5.0, + "Silicon": 5.0 + } + }, + "ItemKitSleeper": { + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 10.0, + "Steel": 25.0 + } + }, + "ItemKitSmallDirectHeatExchanger": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 3.0 + } + }, + "ItemKitStandardChute": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 2.0, + "Electrum": 2.0, + "Iron": 3.0 + } + }, + "ItemKitSuitStorage": { + "tier": "TierOne", + "time": 30.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Iron": 15.0, + "Silver": 5.0 + } + }, + "ItemKitTank": { + "tier": "TierOne", + "time": 20.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 20.0 + } + }, + "ItemKitTankInsulated": { + "tier": "TierOne", + "time": 30.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Silicon": 30.0, + "Steel": 20.0 + } + }, + "ItemKitTurboVolumePump": { + "tier": "TierTwo", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 4.0, + "Electrum": 5.0, + "Gold": 4.0, + "Steel": 5.0 + } + }, + "ItemKitWaterBottleFiller": { + "tier": "TierOne", + "time": 7.0, + "energy": 620.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Iron": 5.0, + "Silicon": 8.0 + } + }, + "ItemKitWaterPurifier": { + "tier": "TierOne", + "time": 30.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 20.0, + "Gold": 5.0, + "Iron": 10.0 + } + }, + "ItemLiquidCanisterEmpty": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemLiquidCanisterSmart": { + "tier": "TierTwo", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Silicon": 2.0, + "Steel": 15.0 + } + }, + "ItemLiquidDrain": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 5.0 + } + }, + "ItemLiquidPipeAnalyzer": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 2.0, + "Gold": 2.0, + "Iron": 2.0 + } + }, + "ItemLiquidPipeHeater": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 3.0, + "Iron": 5.0 + } + }, + "ItemLiquidPipeValve": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 3.0 + } + }, + "ItemLiquidPipeVolumePump": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Iron": 5.0 + } + }, + "ItemPassiveVent": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemPassiveVentInsulated": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 5.0, + "Steel": 1.0 + } + }, + "ItemPipeAnalyizer": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 2.0, + "Gold": 2.0, + "Iron": 2.0 + } + }, + "ItemPipeCowl": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemPipeDigitalValve": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Invar": 3.0, + "Steel": 5.0 + } + }, + "ItemPipeGasMixer": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 2.0, + "Iron": 2.0 + } + }, + "ItemPipeHeater": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 3.0, + "Iron": 5.0 + } + }, + "ItemPipeIgniter": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 2.0, + "Iron": 2.0 + } + }, + "ItemPipeLabel": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemPipeMeter": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 3.0 + } + }, + "ItemPipeValve": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 3.0 + } + }, + "ItemPipeVolumePump": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Iron": 5.0 + } + }, + "ItemWallCooler": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 1.0, + "Iron": 3.0 + } + }, + "ItemWallHeater": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 1.0, + "Iron": 3.0 + } + }, + "ItemWaterBottle": { + "tier": "TierOne", + "time": 4.0, + "energy": 120.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 2.0, + "Silicon": 4.0 + } + }, + "ItemWaterPipeDigitalValve": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Invar": 3.0, + "Steel": 5.0 + } + }, + "ItemWaterPipeMeter": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 3.0 + } + }, + "ItemWaterWallCooler": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 1.0, + "Iron": 3.0 + } + } + } + }, "memory": { "instructions": { "DeviceSetLock": { @@ -35469,6 +44060,848 @@ ], "processed_reagents": [] }, + "fabricator_info": { + "tier": "Undefined", + "recipes": { + "ItemKitAccessBridge": { + "tier": "TierOne", + "time": 30.0, + "energy": 9000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 3.0, + "Steel": 10.0 + } + }, + "ItemKitChuteUmbilical": { + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 3.0, + "Steel": 10.0 + } + }, + "ItemKitElectricUmbilical": { + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 5.0, + "Steel": 5.0 + } + }, + "ItemKitFuselage": { + "tier": "TierOne", + "time": 120.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 20.0 + } + }, + "ItemKitGasUmbilical": { + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 5.0 + } + }, + "ItemKitGovernedGasRocketEngine": { + "tier": "TierOne", + "time": 60.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 5.0, + "Iron": 15.0 + } + }, + "ItemKitLaunchMount": { + "tier": "TierOne", + "time": 240.0, + "energy": 120000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 60.0 + } + }, + "ItemKitLaunchTower": { + "tier": "TierOne", + "time": 30.0, + "energy": 30000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 10.0 + } + }, + "ItemKitLiquidUmbilical": { + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 5.0 + } + }, + "ItemKitPressureFedGasEngine": { + "tier": "TierOne", + "time": 60.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 10.0, + "Electrum": 5.0, + "Invar": 20.0, + "Steel": 20.0 + } + }, + "ItemKitPressureFedLiquidEngine": { + "tier": "TierOne", + "time": 60.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Astroloy": 10.0, + "Inconel": 5.0, + "Waspaloy": 15.0 + } + }, + "ItemKitPumpedLiquidEngine": { + "tier": "TierOne", + "time": 60.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 10.0, + "Electrum": 5.0, + "Steel": 15.0 + } + }, + "ItemKitRocketAvionics": { + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 2.0, + "Solder": 3.0 + } + }, + "ItemKitRocketBattery": { + "tier": "TierOne", + "time": 10.0, + "energy": 10000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 5.0, + "Solder": 5.0, + "Steel": 10.0 + } + }, + "ItemKitRocketCargoStorage": { + "tier": "TierOne", + "time": 30.0, + "energy": 30000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 10.0, + "Invar": 5.0, + "Steel": 10.0 + } + }, + "ItemKitRocketCelestialTracker": { + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 5.0, + "Steel": 5.0 + } + }, + "ItemKitRocketCircuitHousing": { + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 2.0, + "Solder": 3.0 + } + }, + "ItemKitRocketDatalink": { + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 2.0, + "Solder": 3.0 + } + }, + "ItemKitRocketGasFuelTank": { + "tier": "TierOne", + "time": 10.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 10.0 + } + }, + "ItemKitRocketLiquidFuelTank": { + "tier": "TierOne", + "time": 10.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 20.0 + } + }, + "ItemKitRocketMiner": { + "tier": "TierOne", + "time": 60.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 10.0, + "Electrum": 5.0, + "Invar": 5.0, + "Steel": 10.0 + } + }, + "ItemKitRocketScanner": { + "tier": "TierOne", + "time": 60.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Gold": 10.0 + } + }, + "ItemKitRocketTransformerSmall": { + "tier": "TierOne", + "time": 60.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 5.0, + "Steel": 10.0 + } + }, + "ItemKitStairwell": { + "tier": "TierOne", + "time": 20.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 15.0 + } + }, + "ItemRocketMiningDrillHead": { + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 20.0 + } + }, + "ItemRocketMiningDrillHeadDurable": { + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 10.0, + "Steel": 10.0 + } + }, + "ItemRocketMiningDrillHeadHighSpeedIce": { + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 5.0, + "Steel": 10.0 + } + }, + "ItemRocketMiningDrillHeadHighSpeedMineral": { + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 5.0, + "Steel": 10.0 + } + }, + "ItemRocketMiningDrillHeadIce": { + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 10.0, + "Steel": 10.0 + } + }, + "ItemRocketMiningDrillHeadLongTerm": { + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 5.0, + "Steel": 10.0 + } + }, + "ItemRocketMiningDrillHeadMineral": { + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 10.0, + "Steel": 10.0 + } + }, + "ItemRocketScanningHead": { + "tier": "TierOne", + "time": 60.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 3.0, + "Gold": 2.0 + } + } + } + }, "memory": { "instructions": { "DeviceSetLock": { @@ -36065,6 +45498,638 @@ ], "processed_reagents": [] }, + "fabricator_info": { + "tier": "Undefined", + "recipes": { + "AccessCardBlack": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardBlue": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardBrown": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardGray": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardGreen": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardKhaki": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardOrange": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardPink": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardPurple": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardRed": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardWhite": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardYellow": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "CartridgeAccessController": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "FireArmSMG": { + "tier": "TierOne", + "time": 120.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Nickel": 10.0, + "Steel": 30.0 + } + }, + "Handgun": { + "tier": "TierOne", + "time": 120.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Nickel": 10.0, + "Steel": 30.0 + } + }, + "HandgunMagazine": { + "tier": "TierOne", + "time": 60.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Lead": 1.0, + "Steel": 3.0 + } + }, + "ItemAmmoBox": { + "tier": "TierOne", + "time": 120.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 30.0, + "Lead": 50.0, + "Steel": 30.0 + } + }, + "ItemExplosive": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 5, + "reagents": { + "Copper": 5.0, + "Electrum": 1.0, + "Gold": 5.0, + "Lead": 10.0, + "Steel": 7.0 + } + }, + "ItemGrenade": { + "tier": "TierOne", + "time": 90.0, + "energy": 2900.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 15.0, + "Gold": 1.0, + "Lead": 25.0, + "Steel": 25.0 + } + }, + "ItemMiningCharge": { + "tier": "TierOne", + "time": 7.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 7.0, + "Lead": 10.0 + } + }, + "SMGMagazine": { + "tier": "TierOne", + "time": 60.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Lead": 1.0, + "Steel": 3.0 + } + }, + "WeaponPistolEnergy": { + "tier": "TierTwo", + "time": 120.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Electrum": 20.0, + "Gold": 10.0, + "Solder": 10.0, + "Steel": 10.0 + } + }, + "WeaponRifleEnergy": { + "tier": "TierTwo", + "time": 240.0, + "energy": 10000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 6, + "reagents": { + "Constantan": 10.0, + "Electrum": 20.0, + "Gold": 10.0, + "Invar": 10.0, + "Solder": 10.0, + "Steel": 20.0 + } + } + } + }, "memory": { "instructions": { "DeviceSetLock": { @@ -39730,6 +49795,2572 @@ ], "processed_reagents": [] }, + "fabricator_info": { + "tier": "Undefined", + "recipes": { + "FlareGun": { + "tier": "TierOne", + "time": 10.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 10.0, + "Silicon": 10.0 + } + }, + "ItemAngleGrinder": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Iron": 3.0 + } + }, + "ItemArcWelder": { + "tier": "TierOne", + "time": 30.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Electrum": 10.0, + "Invar": 5.0, + "Solder": 10.0, + "Steel": 10.0 + } + }, + "ItemBasketBall": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 1.0 + } + }, + "ItemBeacon": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 2.0 + } + }, + "ItemChemLightBlue": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 1.0 + } + }, + "ItemChemLightGreen": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 1.0 + } + }, + "ItemChemLightRed": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 1.0 + } + }, + "ItemChemLightWhite": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 1.0 + } + }, + "ItemChemLightYellow": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 1.0 + } + }, + "ItemClothingBagOveralls_Aus": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_Brazil": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_Canada": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_China": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_EU": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_France": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_Germany": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_Japan": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_Korea": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_NZ": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_Russia": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_SouthAfrica": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_UK": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_US": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_Ukraine": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemCrowbar": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemDirtCanister": { + "tier": "TierOne", + "time": 5.0, + "energy": 400.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemDisposableBatteryCharger": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 2.0, + "Iron": 2.0 + } + }, + "ItemDrill": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 5.0 + } + }, + "ItemDuctTape": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 2.0 + } + }, + "ItemEvaSuit": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 5.0 + } + }, + "ItemFlagSmall": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemFlashlight": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Gold": 2.0 + } + }, + "ItemGlasses": { + "tier": "TierOne", + "time": 20.0, + "energy": 250.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 15.0, + "Silicon": 10.0 + } + }, + "ItemHardBackpack": { + "tier": "TierTwo", + "time": 30.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Astroloy": 5.0, + "Steel": 15.0, + "Stellite": 5.0 + } + }, + "ItemHardJetpack": { + "tier": "TierTwo", + "time": 40.0, + "energy": 1750.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Astroloy": 8.0, + "Steel": 20.0, + "Stellite": 8.0, + "Waspaloy": 8.0 + } + }, + "ItemHardMiningBackPack": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 1.0, + "Steel": 6.0 + } + }, + "ItemHardSuit": { + "tier": "TierTwo", + "time": 60.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Astroloy": 10.0, + "Steel": 20.0, + "Stellite": 2.0 + } + }, + "ItemHardsuitHelmet": { + "tier": "TierTwo", + "time": 50.0, + "energy": 1750.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Astroloy": 2.0, + "Steel": 10.0, + "Stellite": 2.0 + } + }, + "ItemIgniter": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Copper": 3.0 + } + }, + "ItemJetpackBasic": { + "tier": "TierOne", + "time": 30.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Gold": 2.0, + "Lead": 5.0, + "Steel": 10.0 + } + }, + "ItemKitBasket": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 5.0 + } + }, + "ItemLabeller": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 1.0, + "Iron": 2.0 + } + }, + "ItemMKIIAngleGrinder": { + "tier": "TierTwo", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Electrum": 4.0, + "Iron": 3.0 + } + }, + "ItemMKIIArcWelder": { + "tier": "TierTwo", + "time": 30.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Electrum": 14.0, + "Invar": 5.0, + "Solder": 10.0, + "Steel": 10.0 + } + }, + "ItemMKIICrowbar": { + "tier": "TierTwo", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 5.0, + "Iron": 5.0 + } + }, + "ItemMKIIDrill": { + "tier": "TierTwo", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Electrum": 5.0, + "Iron": 5.0 + } + }, + "ItemMKIIDuctTape": { + "tier": "TierTwo", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 1.0, + "Iron": 2.0 + } + }, + "ItemMKIIMiningDrill": { + "tier": "TierTwo", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Electrum": 5.0, + "Iron": 3.0 + } + }, + "ItemMKIIScrewdriver": { + "tier": "TierTwo", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 2.0, + "Iron": 2.0 + } + }, + "ItemMKIIWireCutters": { + "tier": "TierTwo", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 5.0, + "Iron": 3.0 + } + }, + "ItemMKIIWrench": { + "tier": "TierTwo", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 3.0, + "Iron": 3.0 + } + }, + "ItemMarineBodyArmor": { + "tier": "TierOne", + "time": 60.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Nickel": 10.0, + "Silicon": 10.0, + "Steel": 20.0 + } + }, + "ItemMarineHelmet": { + "tier": "TierOne", + "time": 45.0, + "energy": 1750.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Gold": 4.0, + "Silicon": 4.0, + "Steel": 8.0 + } + }, + "ItemMiningBackPack": { + "tier": "TierOne", + "time": 8.0, + "energy": 800.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 6.0 + } + }, + "ItemMiningBelt": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemMiningBeltMKII": { + "tier": "TierTwo", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Constantan": 5.0, + "Steel": 10.0 + } + }, + "ItemMiningDrill": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 3.0 + } + }, + "ItemMiningDrillHeavy": { + "tier": "TierTwo", + "time": 30.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Electrum": 5.0, + "Invar": 10.0, + "Solder": 10.0, + "Steel": 10.0 + } + }, + "ItemMiningDrillPneumatic": { + "tier": "TierOne", + "time": 20.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 4.0, + "Solder": 4.0, + "Steel": 6.0 + } + }, + "ItemMkIIToolbelt": { + "tier": "TierTwo", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Constantan": 5.0, + "Iron": 3.0 + } + }, + "ItemNVG": { + "tier": "TierOne", + "time": 45.0, + "energy": 2750.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Hastelloy": 10.0, + "Silicon": 5.0, + "Steel": 5.0 + } + }, + "ItemPickaxe": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Iron": 2.0 + } + }, + "ItemPlantSampler": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 5.0 + } + }, + "ItemRemoteDetonator": { + "tier": "TierOne", + "time": 4.5, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 1.0, + "Iron": 3.0 + } + }, + "ItemReusableFireExtinguisher": { + "tier": "TierOne", + "time": 20.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 5.0 + } + }, + "ItemRoadFlare": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemScrewdriver": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 2.0 + } + }, + "ItemSensorLenses": { + "tier": "TierTwo", + "time": 45.0, + "energy": 3500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Inconel": 5.0, + "Silicon": 5.0, + "Steel": 5.0 + } + }, + "ItemSensorProcessingUnitCelestialScanner": { + "tier": "TierTwo", + "time": 15.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 5.0, + "Silicon": 5.0 + } + }, + "ItemSensorProcessingUnitMesonScanner": { + "tier": "TierTwo", + "time": 15.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 5.0, + "Silicon": 5.0 + } + }, + "ItemSensorProcessingUnitOreScanner": { + "tier": "TierTwo", + "time": 15.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 5.0, + "Silicon": 5.0 + } + }, + "ItemSpaceHelmet": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Gold": 2.0 + } + }, + "ItemSpacepack": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 5.0 + } + }, + "ItemSprayCanBlack": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanBlue": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanBrown": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanGreen": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanGrey": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanKhaki": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanOrange": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanPink": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanPurple": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanRed": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanWhite": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanYellow": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayGun": { + "tier": "TierTwo", + "time": 10.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 5.0, + "Silicon": 10.0, + "Steel": 10.0 + } + }, + "ItemTerrainManipulator": { + "tier": "TierOne", + "time": 15.0, + "energy": 600.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Iron": 5.0 + } + }, + "ItemToolBelt": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemWearLamp": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Gold": 2.0 + } + }, + "ItemWeldingTorch": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Iron": 3.0 + } + }, + "ItemWireCutters": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemWrench": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ToyLuna": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 1.0, + "Iron": 5.0 + } + }, + "UniformCommander": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "UniformMarine": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 10.0 + } + }, + "UniformOrangeJumpSuit": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 10.0 + } + }, + "WeaponPistolEnergy": { + "tier": "TierTwo", + "time": 120.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Electrum": 20.0, + "Gold": 10.0, + "Solder": 10.0, + "Steel": 10.0 + } + }, + "WeaponRifleEnergy": { + "tier": "TierTwo", + "time": 240.0, + "energy": 10000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 6, + "reagents": { + "Constantan": 10.0, + "Electrum": 20.0, + "Gold": 10.0, + "Invar": 10.0, + "Solder": 10.0, + "Steel": 20.0 + } + } + } + }, "memory": { "instructions": { "DeviceSetLock": { diff --git a/ic10emu/src/errors.rs b/ic10emu/src/errors.rs index 4259192..b7e79a1 100644 --- a/ic10emu/src/errors.rs +++ b/ic10emu/src/errors.rs @@ -1,8 +1,7 @@ use crate::vm::{ instructions::enums::InstructionOp, object::{ - errors::{LogicError, MemoryError}, - ObjectID, + errors::{LogicError, MemoryError}, templates::Prefab, ObjectID }, }; use serde_derive::{Deserialize, Serialize}; @@ -42,14 +41,24 @@ pub enum VMError { NotAnItem(ObjectID), #[error("object {0} is not programmable")] NotProgrammable(ObjectID), + #[error("{0}")] + TemplateError(#[from] TemplateError), + #[error("missing child object {0}")] + MissingChild(ObjectID), + #[error("object {0} is not parentable")] + NotParentable(ObjectID), } #[derive(Error, Debug, Serialize, Deserialize)] pub enum TemplateError { #[error("object id {0} has a non conforming set of interfaces")] NonConformingObject(ObjectID), - #[error("ObjectID {0} is missing fomr the VM")] + #[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, } #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/ic10emu/src/grammar.rs b/ic10emu/src/grammar.rs index 8c65f9a..d2dbff7 100644 --- a/ic10emu/src/grammar.rs +++ b/ic10emu/src/grammar.rs @@ -10,8 +10,8 @@ use crate::{ }; use itertools::Itertools; use stationeers_data::enums::{ - basic_enums::BasicEnum, - script_enums::{LogicBatchMethod, LogicReagentMode, LogicSlotType, LogicType}, + basic::BasicEnum, + script::{LogicBatchMethod, LogicReagentMode, LogicSlotType, LogicType}, }; use std::{fmt::Display, str::FromStr}; use strum::IntoEnumIterator; diff --git a/ic10emu/src/interpreter/instructions.rs b/ic10emu/src/interpreter/instructions.rs index b7b5369..81dd8b4 100644 --- a/ic10emu/src/interpreter/instructions.rs +++ b/ic10emu/src/interpreter/instructions.rs @@ -13,7 +13,7 @@ use crate::{ }, }, }; -use stationeers_data::enums::script_enums::LogicReagentMode; +use stationeers_data::enums::script::LogicReagentMode; pub trait IC10Marker: IntegratedCircuit {} impl SleepInstruction for T { diff --git a/ic10emu/src/network.rs b/ic10emu/src/network.rs index ebb5e70..cafbbe1 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -1,16 +1,16 @@ use std::{collections::HashSet, ops::Deref, rc::Rc}; use crate::vm::{ - enums::script_enums::LogicType, - object::{ - errors::LogicError, macros::ObjectInterface, templates::ConnectionInfo, traits::*, Name, - ObjectID, - }, + 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 strum_macros::{AsRefStr, EnumIter}; use thiserror::Error; @@ -51,7 +51,6 @@ pub enum Connection { None, } - impl Connection { #[allow(dead_code)] pub fn from_info(typ: ConnectionType, role: ConnectionRole, net: Option) -> Self { @@ -86,67 +85,64 @@ impl Connection { Self::None => ConnectionInfo { typ: ConnectionType::None, role: ConnectionRole::None, - network: None, }, Self::CableNetwork { - net, typ: CableConnectionType::Data, role, + .. } => ConnectionInfo { typ: ConnectionType::Data, role: *role, - network: *net, }, Self::CableNetwork { - net, typ: CableConnectionType::Power, role, + .. } => ConnectionInfo { typ: ConnectionType::Power, role: *role, - network: *net, }, Self::CableNetwork { - net, typ: CableConnectionType::PowerAndData, role, + .. } => ConnectionInfo { typ: ConnectionType::PowerAndData, role: *role, - network: *net, }, Self::Chute { role } => ConnectionInfo { typ: ConnectionType::Chute, role: *role, - network: None, }, Self::Pipe { role } => ConnectionInfo { typ: ConnectionType::Pipe, role: *role, - network: None, }, Self::PipeLiquid { role } => ConnectionInfo { typ: ConnectionType::PipeLiquid, role: *role, - network: None, }, Self::Elevator { role } => ConnectionInfo { typ: ConnectionType::Elevator, role: *role, - network: None, }, Self::LandingPad { role } => ConnectionInfo { typ: ConnectionType::LandingPad, role: *role, - network: None, }, Self::LaunchPad { role } => ConnectionInfo { typ: ConnectionType::LaunchPad, role: *role, - network: None, }, } } + + pub fn get_network(&self) -> Option { + match self { + Self::CableNetwork { net, .. } => net.clone(), + _ => None, + } + } } #[derive(ObjectInterface!, Debug)] @@ -248,14 +244,14 @@ impl Logicable for CableNetwork { } fn can_slot_logic_read( &self, - _slt: crate::vm::enums::script_enums::LogicSlotType, + _slt: stationeers_data::enums::script::LogicSlotType, _index: f64, ) -> bool { false } fn get_slot_logic( &self, - slt: crate::vm::enums::script_enums::LogicSlotType, + slt: stationeers_data::enums::script::LogicSlotType, index: f64, ) -> Result { Err(LogicError::CantSlotRead(slt, index)) diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index ba2169b..2998d28 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -5,11 +5,15 @@ use crate::{ errors::{ICError, TemplateError, VMError}, interpreter::ICState, network::{CableConnectionType, CableNetwork, Connection, FrozenCableNetwork}, - vm::object::{traits::ParentSlotInfo, ObjectID, VMObject}, + vm::object::{ + templates::{FrozenObject, Prefab}, + traits::ParentSlotInfo, + ObjectID, SlotOccupantInfo, VMObject, + }, }; use stationeers_data::{ enums::{ - script_enums::{LogicBatchMethod, LogicSlotType, LogicType}, + script::{LogicBatchMethod, LogicSlotType, LogicType}, ConnectionRole, }, templates::ObjectTemplate, @@ -38,6 +42,7 @@ pub struct VM { /// list of object id's touched on the last operation operation_modified: RefCell>, + template_database: Option>, } #[derive(Debug, Default)] @@ -59,6 +64,7 @@ struct VMTransaction { pub wireless_receivers: Vec, pub id_space: IdSpace, pub networks: BTreeMap, + object_parents: BTreeMap, vm: Rc, } @@ -81,6 +87,7 @@ impl VM { network_id_space: RefCell::new(network_id_space), random: Rc::new(RefCell::new(crate::rand_mscorlib::Random::new())), operation_modified: RefCell::new(Vec::new()), + template_database: stationeers_data::build_prefab_database(), }); let default_network = VMObject::new(CableNetwork::new(default_network_key, vm.clone())); @@ -95,13 +102,84 @@ impl VM { self.random.borrow_mut().next_f64() } - pub fn add_device_from_template( + pub fn import_template_database( + &mut self, + db: impl IntoIterator, + ) { + self.template_database.replace(db.into_iter().collect()); + } + + pub fn get_template(&self, 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 + .as_ref() + .and_then(|db| db.get(&hash).cloned()) + } + + pub fn add_devices_frozen( self: &Rc, - template: ObjectTemplate, - ) -> Result { + frozen_devices: impl IntoIterator, + ) -> Result, VMError> { let mut transaction = VMTransaction::new(self); - let obj_id = transaction.add_device_from_template(template)?; + let mut obj_ids = Vec::new(); + for frozen in frozen_devices { + let obj_id = transaction.add_device_from_frozen(frozen)?; + obj_ids.push(obj_id) + } + + transaction.finialize()?; + + 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() + .unwrap_or_else(|| panic!("non network network: {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_ids) + } + + pub fn add_device_from_frozen( + self: &Rc, + frozen: FrozenObject, + ) -> Result { + let mut transaction = VMTransaction::new(self); + + let obj_id = transaction.add_device_from_frozen(frozen)?; + + transaction.finialize()?; let transaction_ids = transaction.id_space.in_use_ids(); self.id_space.borrow_mut().use_new_ids(&transaction_ids); @@ -184,11 +262,11 @@ impl VM { if slot.parent == old_id { slot.parent = new_id; } - if slot - .occupant - .is_some_and(|occupant_id| occupant_id == old_id) - { - slot.occupant = Some(new_id); + match slot.occupant.as_mut() { + Some(info) if info.id == old_id => { + info.id = new_id; + } + _ => (), } }); } @@ -813,33 +891,37 @@ impl VM { .get_slot_mut(index) .ok_or(ICError::SlotIndexOutOfRange(index as f64))?; if let Some(target) = target { - if slot.occupant.is_some_and(|occupant| occupant == target) { - slot.quantity = quantity; - Ok(None) - } else { - 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)?; + 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) } - item.set_parent_slot(Some(ParentSlotInfo { - parent: id, - slot: index, - })); - let last = slot.occupant; - slot.occupant = Some(target); - slot.quantity = quantity; - Ok(last) } } else { - let last = slot.occupant; + let last = slot.occupant.as_ref().map(|info| info.id); slot.occupant = None; - slot.quantity = 0; Ok(last) } } @@ -861,8 +943,7 @@ impl VM { .get_slot_mut(index) .ok_or(ICError::SlotIndexOutOfRange(index as f64))?; - let last = slot.occupant; - slot.occupant = None; + let last = slot.occupant.as_ref().map(|info| info.id); Ok(last) } @@ -880,7 +961,7 @@ impl VM { { None } else { - Some(ObjectTemplate::freeze_object(obj, self)) + Some(FrozenObject::freeze_object(obj, self)) } }) .collect::, _>>()?, @@ -923,9 +1004,10 @@ impl VM { &transaction_networks, state.default_network_key, ); - for template in state.objects { - let _ = transaction.add_device_from_template(template)?; + for frozen in state.objects { + let _ = transaction.add_device_from_frozen(frozen)?; } + transaction.finialize()?; self.circuit_holders.borrow_mut().clear(); self.program_holders.borrow_mut().clear(); @@ -992,6 +1074,7 @@ impl VMTransaction { .keys() .map(|net_id| (*net_id, VMTransactionNetwork::default())) .collect(), + object_parents: BTreeMap::new(), vm: vm.clone(), } } @@ -1013,41 +1096,29 @@ impl VMTransaction { .keys() .map(|net_id| (*net_id, VMTransactionNetwork::default())) .collect(), + object_parents: BTreeMap::new(), vm: vm.clone(), } } - pub fn add_device_from_template( - &mut self, - template: ObjectTemplate, - ) -> Result { - for net_id in &template.connected_networks() { + pub fn add_device_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) = template.object_info().and_then(|info| info.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 = template.build(obj_id, &self.vm); + let obj = frozen.build_vm_obj(obj_id, &self.vm)?; - if let Some(storage) = obj.borrow_mut().as_mut_storage() { - for (slot_index, occupant_template) in - template.templates_from_slots().into_iter().enumerate() - { - if let Some(occupant_template) = occupant_template { - let occupant_id = self.add_device_from_template(occupant_template)?; - storage - .get_slot_mut(slot_index) - .unwrap_or_else(|| panic!("object storage slots out of sync with template which built it: {slot_index}")) - .occupant = Some(occupant_id); - } - } + 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() { @@ -1086,6 +1157,24 @@ impl VMTransaction { Ok(obj_id) } + + pub fn finialize(&mut self) -> Result<(), VMError> { + for (child, (slot, parent)) in self.object_parents { + let child_obj = self + .objects + .get(&child) + .ok_or(VMError::MissingChild(child))?; + let 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, + })) + } + Ok(()) + } } pub struct LogicBatchMethodWrapper(LogicBatchMethod); @@ -1202,7 +1291,7 @@ impl IdSpace { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct FrozenVM { - pub objects: Vec, + pub objects: Vec, pub circuit_holders: Vec, pub program_holders: Vec, pub default_network_key: ObjectID, diff --git a/ic10emu/src/vm/instructions/operands.rs b/ic10emu/src/vm/instructions/operands.rs index 3957ba9..ab70f0e 100644 --- a/ic10emu/src/vm/instructions/operands.rs +++ b/ic10emu/src/vm/instructions/operands.rs @@ -2,7 +2,7 @@ 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_enums::{ +use stationeers_data::enums::script::{ LogicBatchMethod as BatchMode, LogicReagentMode as ReagentMode, LogicSlotType, LogicType, }; use strum::EnumProperty; @@ -248,7 +248,7 @@ impl InstOperand { } => Ok(*lt), _ => { let val = self.as_value(ic)?; - LogicType::try_from(val).map_err(|| ICError::UnknownLogicType(val)) + LogicType::try_from(val).map_err(|_| ICError::UnknownLogicType(val)) } } } @@ -264,7 +264,7 @@ impl InstOperand { } => Ok(*slt), _ => { let val = self.as_value(ic)?; - LogicSlotType::try_from(val).map_err(|| ICError::UnknownLogicSlotType(val)) + LogicSlotType::try_from(val).map_err(|_| ICError::UnknownLogicSlotType(val)) } } } @@ -277,7 +277,7 @@ impl InstOperand { } => Ok(*bm), _ => { let val = self.as_value(ic)?; - BatchMode::try_from(val).map_err(|| ICError::UnknownBatchMode(val)) + BatchMode::try_from(val).map_err(|_| ICError::UnknownBatchMode(val)) } } } @@ -290,7 +290,7 @@ impl InstOperand { } => Ok(*rm), _ => { let val = self.as_value(ic)?; - ReagentMode::try_from(val).map_err(|| ICError::UnknownReagentMode(val)) + ReagentMode::try_from(val).map_err(|_| ICError::UnknownReagentMode(val)) } } } diff --git a/ic10emu/src/vm/object.rs b/ic10emu/src/vm/object.rs index b0930a6..3170533 100644 --- a/ic10emu/src/vm/object.rs +++ b/ic10emu/src/vm/object.rs @@ -19,8 +19,7 @@ use traits::Object; use crate::vm::VM; use stationeers_data::enums::{ - basic_enums::Class as SlotClass, prefabs::StationpediaPrefab, script_enums::LogicSlotType, - MemoryAccess, + basic::Class as SlotClass, prefabs::StationpediaPrefab, script::LogicSlotType, MemoryAccess, }; pub type ObjectID = u32; @@ -60,6 +59,10 @@ impl VMObject { 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)] @@ -79,7 +82,8 @@ impl Name { pub fn from_prefab_name(name: &str) -> Self { Name { value: name.to_string(), - hash: StationpediaPrefab::from_str(name) + hash: name + .parse::() .map(|prefab| prefab as i32) .unwrap_or_else(|_| const_crc32::crc32(name.as_bytes()) as i32), } @@ -102,6 +106,12 @@ pub struct LogicField { pub value: f64, } +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct SlotOccupantInfo { + pub quantity: u32, + pub id: ObjectID, +} + #[derive(Debug, Default, Clone, Serialize, Deserialize)] pub struct Slot { pub parent: ObjectID, @@ -110,6 +120,5 @@ pub struct Slot { pub typ: SlotClass, pub readable_logic: Vec, pub writeable_logic: Vec, - pub occupant: Option, - pub quantity: u32, + pub occupant: Option, } diff --git a/ic10emu/src/vm/object/errors.rs b/ic10emu/src/vm/object/errors.rs index e818f07..bf3d270 100644 --- a/ic10emu/src/vm/object/errors.rs +++ b/ic10emu/src/vm/object/errors.rs @@ -1,7 +1,7 @@ use serde_derive::{Deserialize, Serialize}; use thiserror::Error; -use stationeers_data::enums::script_enums::{LogicSlotType, LogicType}; +use stationeers_data::enums::script::{LogicSlotType, LogicType}; #[derive(Error, Debug, Clone, Serialize, Deserialize)] pub enum LogicError { diff --git a/ic10emu/src/vm/object/generic/structs.rs b/ic10emu/src/vm/object/generic/structs.rs index a6dd513..401dec1 100644 --- a/ic10emu/src/vm/object/generic/structs.rs +++ b/ic10emu/src/vm/object/generic/structs.rs @@ -9,8 +9,8 @@ use crate::{ }; use macro_rules_attribute::derive; use stationeers_data::{ - enums::script_enums::LogicType, - templates::{DeviceInfo, ItemInfo}, + enums::script::LogicType, + templates::{ConsumerInfo, DeviceInfo, FabricatorInfo, InternalAtmoInfo, ItemInfo, ThermalInfo}, }; use std::{collections::BTreeMap, rc::Rc}; @@ -25,6 +25,8 @@ pub struct Generic { pub name: Name, #[custom(object_vm_ref)] pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, pub small_grid: bool, } @@ -39,6 +41,8 @@ pub struct GenericStorage { 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: Vec, } @@ -54,6 +58,8 @@ pub struct GenericLogicable { 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: Vec, pub fields: BTreeMap, @@ -71,6 +77,8 @@ pub struct GenericLogicableDevice { 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: Vec, pub fields: BTreeMap, @@ -81,6 +89,53 @@ pub struct GenericLogicableDevice { pub reagents: Option>, } +#[derive(ObjectInterface!, GWStructure!, GWStorage!, GWLogicable!, GWDevice!)] +#[custom(implements(Object { Structure, Storage, Logicable, Device }))] +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: Vec, + pub fields: BTreeMap, + pub modes: Option>, + pub device_info: DeviceInfo, + pub connections: Vec, + pub pins: Option>>, + pub reagents: Option>, +} + +#[derive(ObjectInterface!, GWStructure!, GWStorage!, GWLogicable!, GWDevice!)] +#[custom(implements(Object { Structure, Storage, Logicable, Device }))] +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: Vec, + 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!, GWStructure!, GWStorage!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] #[custom(implements(Object { Structure, Storage, Logicable, Device, MemoryReadable }))] pub struct GenericLogicableDeviceMemoryReadable { @@ -92,6 +147,8 @@ pub struct GenericLogicableDeviceMemoryReadable { 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: Vec, pub fields: BTreeMap, @@ -103,6 +160,32 @@ pub struct GenericLogicableDeviceMemoryReadable { pub memory: Vec, } +#[derive(ObjectInterface!, GWStructure!, GWStorage!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] +#[custom(implements(Object { Structure, Storage, Logicable, Device, MemoryReadable }))] +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: Vec, + 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, + pub memory: Vec, +} + #[derive(ObjectInterface!, GWStructure!, GWStorage!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] #[custom(implements(Object { Structure, Storage, Logicable, Device, MemoryReadable, MemoryWritable }))] pub struct GenericLogicableDeviceMemoryReadWriteable { @@ -114,6 +197,8 @@ pub struct GenericLogicableDeviceMemoryReadWriteable { 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: Vec, pub fields: BTreeMap, @@ -125,6 +210,33 @@ pub struct GenericLogicableDeviceMemoryReadWriteable { pub memory: Vec, } + +#[derive(ObjectInterface!, GWStructure!, GWStorage!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] +#[custom(implements(Object { Structure, Storage, Logicable, Device, MemoryReadable, MemoryWritable }))] +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: Vec, + 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, + pub memory: Vec, +} + #[derive(ObjectInterface!, GWItem!)] #[custom(implements(Object { Item }))] pub struct GenericItem { @@ -136,6 +248,8 @@ pub struct GenericItem { 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, @@ -152,12 +266,34 @@ pub struct GenericItemStorage { 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: Vec, } +#[derive(ObjectInterface!, GWItem!, GWStorage! )] +#[custom(implements(Object { Item, Storage }))] +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: Vec, + pub consumer_info: ConsumerInfo, +} + #[derive(ObjectInterface!, GWItem!, GWStorage!, GWLogicable! )] #[custom(implements(Object { Item, Storage, Logicable }))] pub struct GenericItemLogicable { @@ -169,6 +305,8 @@ pub struct GenericItemLogicable { 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, @@ -188,6 +326,8 @@ pub struct GenericItemLogicableMemoryReadable { 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, @@ -208,6 +348,8 @@ pub struct GenericItemLogicableMemoryReadWriteable { 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, @@ -216,3 +358,87 @@ pub struct GenericItemLogicableMemoryReadWriteable { pub modes: Option>, pub memory: Vec, } + +#[derive(ObjectInterface!, GWItem!, GWStorage!, GWLogicable! )] +#[custom(implements(Object { Item, Storage, Logicable }))] +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: Vec, + pub fields: BTreeMap, + pub modes: Option>, +} + + +#[derive(ObjectInterface!, GWItem!, GWStorage!, GWLogicable!)] +#[custom(implements(Object { 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: Vec, + pub fields: BTreeMap, + pub modes: Option>, +} + +#[derive(ObjectInterface!, GWItem!, GWStorage!, GWLogicable!, GWMemoryReadable!, GWMemoryWritable!)] +#[custom(implements(Object { Item, Storage, Suit, Logicable, MemoryReadable, MemoryWritable }))] +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: Vec, + pub fields: BTreeMap, + pub modes: Option>, + pub memory: Vec, +} + +#[derive(ObjectInterface!, GWItem!, GWStorage! )] +#[custom(implements(Object { 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: Vec, +} diff --git a/ic10emu/src/vm/object/generic/traits.rs b/ic10emu/src/vm/object/generic/traits.rs index e70fc83..e0b9a8f 100644 --- a/ic10emu/src/vm/object/generic/traits.rs +++ b/ic10emu/src/vm/object/generic/traits.rs @@ -9,8 +9,8 @@ use crate::{ use stationeers_data::{ enums::{ - basic_enums::{Class as SlotClass, GasType, SortingClass}, - script_enums::{LogicSlotType, LogicType}, + basic::{Class as SlotClass, GasType, SortingClass}, + script::{LogicSlotType, LogicType}, }, templates::{DeviceInfo, ItemInfo}, }; @@ -167,7 +167,9 @@ impl Logicable for T { .ok_or_else(|| LogicError::SlotIndexOutOfRange(index, self.slots_count())) .and_then(|slot| { use LogicSlotType::*; - let occupant = slot.occupant.and_then(|id| self.get_vm().get_object(id)); + let occupant = slot + .occupant + .and_then(|info| self.get_vm().get_object(info.id)); match slt { Occupied => { if slot.occupant.is_some() { @@ -177,8 +179,8 @@ impl Logicable for T { } } Quantity => { - if slot.occupant.is_some() { - Ok(slot.quantity as f64) + if let Some(info) = &slot.occupant { + Ok(info.quantity as f64) } else { Ok(0.0) } @@ -261,11 +263,11 @@ impl Logicable for T { Pressure => logicable.get_logic(LogicType::Pressure), PressureAir => logicable .as_suit() - .map(|suit| suit.pressure_air()) + .map(|suit| suit.pressure_air() as f64) .ok_or(LogicError::CantSlotRead(slt, index)), PressureWaste => logicable .as_suit() - .map(|suit| suit.pressure_waste()) + .map(|suit| suit.pressure_waste() as f64) .ok_or(LogicError::CantSlotRead(slt, index)), Temperature => logicable.get_logic(LogicType::Temperature), Seeding => logicable @@ -398,11 +400,13 @@ impl Device for T { .and_then(|slot| { // special case, update slot quantity if >= 1 if slt == Quantity && force && value >= 1.0 { - slot.quantity = value as u32; + 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.and_then(|id| vm.get_object(id)); + let occupant = slot.occupant.and_then(|info| vm.get_object(info.id)); if let Some(occupant) = occupant { let mut occupant_ref = occupant.borrow_mut(); let logicable = occupant_ref diff --git a/ic10emu/src/vm/object/stationpedia.rs b/ic10emu/src/vm/object/stationpedia.rs index acd11b8..298464e 100644 --- a/ic10emu/src/vm/object/stationpedia.rs +++ b/ic10emu/src/vm/object/stationpedia.rs @@ -2,7 +2,10 @@ use std::rc::Rc; use stationeers_data::{enums::prefabs::StationpediaPrefab, templates::ObjectTemplate}; -use crate::vm::object::VMObject; +use crate::vm::object::{ + templates::{FrozenObject, ObjectInfo, Prefab}, + VMObject, +}; use crate::vm::VM; use super::ObjectID; @@ -10,12 +13,14 @@ use super::ObjectID; pub mod structs; #[allow(unused)] -pub fn object_from_prefab_template( - template: &ObjectTemplate, - id: ObjectID, - vm: &Rc, -) -> Option { - let prefab = StationpediaPrefab::from_repr(template.prefab_info().prefab_hash); +pub fn object_from_frozen(obj: &ObjectInfo, id: ObjectID, vm: &Rc) -> Option { + let hash = match obj.prefab { + Some(Prefab::Hash(hash)) => hash, + Some(Prefab::Name(name)) => const_crc32::crc32(name.as_bytes()) as i32, + None => return None, + }; + + let prefab = StationpediaPrefab::from_repr(hash); match prefab { // Some(StationpediaPrefab::ItemIntegratedCircuit10) => { // Some(VMObject::new(structs::ItemIntegratedCircuit10)) diff --git a/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs b/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs index e2a10d8..5057ea1 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs @@ -9,9 +9,9 @@ use crate::{ }; use macro_rules_attribute::derive; use stationeers_data::enums::{ - basic_enums::Class as SlotClass, + basic::Class as SlotClass, prefabs::StationpediaPrefab, - script_enums::{LogicSlotType, LogicType}, + script::{LogicSlotType, LogicType}, ConnectionRole, }; use std::rc::Rc; @@ -73,7 +73,6 @@ impl StructureCircuitHousing { ], writeable_logic: vec![], occupant: None, - quantity: 0, }, pins: [None, None, None, None, None, None], connections: [ @@ -163,8 +162,8 @@ impl Logicable for StructureCircuitHousing { LogicType::ReferenceId => Ok(*self.get_id() as f64), LogicType::Error => Ok(self.error as f64), LogicType::LineNumber => { - let result = self.slot.occupant.and_then(|id| { - self.vm.get_object(id).and_then(|obj| { + let result = self.slot.occupant.and_then(|info| { + self.vm.get_object(info.id).and_then(|obj| { obj.borrow() .as_logicable() .map(|logicable| logicable.get_logic(LogicType::LineNumber)) @@ -208,8 +207,8 @@ impl Logicable for StructureCircuitHousing { LogicType::LineNumber => self .slot .occupant - .and_then(|id| { - self.vm.get_object(id).and_then(|obj| { + .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) }) @@ -405,11 +404,11 @@ impl CircuitHolder for StructureCircuitHousing { } fn get_ic(&self) -> Option { - self.slot.occupant.and_then(|id| self.vm.get_object(id)) + self.slot.occupant.and_then(|info| self.vm.get_object(info.id)) } fn get_ic_mut(&self) -> Option { - self.slot.occupant.and_then(|id| self.vm.get_object(id)) + self.slot.occupant.and_then(|info| self.vm.get_object(info.id)) } fn hault_and_catch_fire(&mut self) { diff --git a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs index 9cec5f0..c2a90c4 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs @@ -14,8 +14,8 @@ use crate::{ }; use macro_rules_attribute::derive; use stationeers_data::enums::{ - basic_enums::{Class as SlotClass, GasType, SortingClass}, - script_enums::{LogicSlotType, LogicType}, + basic::{Class as SlotClass, GasType, SortingClass}, + script::{LogicSlotType, LogicType}, }; use std::{collections::BTreeMap, rc::Rc}; diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index 5e1d2d8..17ec12b 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -1,4 +1,4 @@ -use std::{collections::BTreeMap, rc::Rc}; +use std::{collections::BTreeMap, rc::Rc, str::FromStr}; use crate::{ errors::TemplateError, @@ -6,14 +6,18 @@ use crate::{ vm::{ object::{ generic::structs::{ - Generic, GenericItem, GenericItemLogicable, - GenericItemLogicableMemoryReadWriteable, GenericItemLogicableMemoryReadable, - GenericItemStorage, GenericLogicable, GenericLogicableDevice, + Generic, GenericCircuitHolder, GenericItem, GenericItemCircuitHolder, + GenericItemConsumer, GenericItemLogicable, GenericItemLogicableMemoryReadWriteable, + GenericItemLogicableMemoryReadable, GenericItemStorage, GenericItemSuit, + GenericItemSuitCircuitHolder, GenericItemSuitLogic, GenericLogicable, + GenericLogicableDevice, GenericLogicableDeviceConsumer, + GenericLogicableDeviceConsumerMemoryReadWriteable, + GenericLogicableDeviceConsumerMemoryReadable, GenericLogicableDeviceMemoryReadWriteable, GenericLogicableDeviceMemoryReadable, GenericStorage, }, traits::*, - LogicField, Name, Slot, + LogicField, Name, Slot, SlotOccupantInfo, }, VM, }, @@ -21,9 +25,9 @@ use crate::{ use serde_derive::{Deserialize, Serialize}; use stationeers_data::{ enums::{ - basic_enums::{Class as SlotClass, GasType, SortingClass}, + basic::{Class as SlotClass, GasType, SortingClass}, prefabs::StationpediaPrefab, - script_enums::{LogicSlotType, LogicType}, + script::{LogicSlotType, LogicType}, ConnectionRole, ConnectionType, }, templates::*, @@ -33,10 +37,40 @@ use strum::{EnumProperty, IntoEnumIterator}; use super::{stationpedia, MemoryAccess, ObjectID, VMObject}; #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] +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}") + } + } +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] pub struct ObjectInfo { pub name: Option, pub id: Option, + pub prefab: Option, + pub slots: Option>, + pub damage: Option, + pub device_pins: Option>, + pub connections: Option>, + pub reagents: Option>, + pub memory: Option>, + pub logic_values: Option>, } impl From<&VMObject> for ObjectInfo { @@ -45,1139 +79,948 @@ impl From<&VMObject> for ObjectInfo { ObjectInfo { name: Some(obj_ref.get_name().value.clone()), id: Some(*obj_ref.get_id()), + prefab: Some(Prefab::Hash(obj_ref.get_prefab().hash)), + slots: None, + damage: None, + device_pins: None, + connections: None, + reagents: None, + memory: None, + logic_values: None, } } } -pub struct FrozenObjectTemplate { - obj_info: ObjectInfo, - template: ObjectTemplate, -} +impl ObjectInfo { + 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); + } + self + } -pub struct FrozenObject { - obj_info: ObjectInfo, - template: Option, -} - -impl FrozenObjectTemplate { - pub fn build_vm_obj(&self, id: ObjectID, vm: &Rc) -> VMObject { - if let Some(obj) = stationpedia::object_from_prefab_template(self, id, vm) { - obj + 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.build_generic(id, vm.clone()) + self.slots.replace( + slots + .into_iter() + .enumerate() + .filter_map(|(index, slot)| match slot.occupant.as_ref() { + Some(occupant) => Some((index as u32, occupant.clone())), + None => None, + }) + .collect(), + ); + } + self + } + + 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); + } + self + } + + pub fn update_from_device(&mut self, device: DeviceRef<'_>) -> &mut Self { + let pins = device.device_pins(); + if pins.is_some_and(|pins| pins.is_empty()) { + self.device_pins = None; + } else { + self.device_pins = pins.map(|pins| { + pins.into_iter() + .enumerate() + .filter_map(|(index, pin)| match pin { + Some(pin) => Some((index as u32, *pin)), + None => None, + }) + .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 + .into_iter() + .enumerate() + .filter_map(|(index, conn)| match conn.get_network() { + Some(net) => Some((index as u32, net)), + None => None, + }) + .collect(), + ); + } + self + } + + 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 + } + + 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(), + ); + self + } +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct FrozenObject { + pub obj_info: ObjectInfo, + pub template: Option, +} + +impl FrozenObject { + pub fn new(obj_info: ObjectInfo) -> Self { + FrozenObject { + obj_info, + template: None, + } + } + + pub fn with_template(obj_info: ObjectInfo, template: ObjectTemplate) -> Self { + FrozenObject { + obj_info, + template: Some(template), + } + } + + pub fn build_vm_obj(&self, id: ObjectID, vm: &Rc) -> Result { + let template = self.template.map_or_else( + || { + self.obj_info + .prefab + .map(|prefab| { + vm.get_template(prefab) + .ok_or(TemplateError::NoTemplateForPrefab(prefab)) + }) + .transpose()? + .ok_or(TemplateError::MissingPrefab) + }, + |template| Ok(template), + )?; + 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 { - use ObjectTemplate::*; - match self.template { - StructureLogicDevice(s) => s - .device - .connection_list - .iter() - .filter_map(|conn| conn.network.as_ref()) - .copied() - .collect(), - StructureLogicDeviceMemory(s) => s - .device - .connection_list - .iter() - .filter_map(|conn| conn.network.as_ref()) - .copied() - .collect(), - _ => vec![], - } + self.obj_info + .connections + .map(|connections| connections.values().copied().collect()) + .unwrap_or_else(Vec::new) } pub fn contained_object_ids(&self) -> Vec { - use ObjectTemplate::*; - match self.template { - StructureSlots(s) => s - .slots - .iter() - .filter_map(|info| { - info.occupant + self.obj_info + .slots + .map(|slots| slots.values().map(|slot| slot.id).collect()) + .unwrap_or_else(Vec::new) + } + + pub fn contained_object_slots(&self) -> Vec<(u32, ObjectID)> { + self.obj_info + .slots + .map(|slots| { + slots + .iter() + .map(|(index, slot)| (*index, slot.id)) + .collect() + }) + .unwrap_or_else(Vec::new) + } + + fn build_slots( + &self, + id: ObjectID, + slots_info: &Vec, + logic_info: Option<&LogicInfo>, + ) -> Vec { + slots_info + .into_iter() + .enumerate() + .map(|(index, info)| Slot { + parent: id, + index, + name: info.name.clone(), + typ: info.typ, + readable_logic: logic_info + .and_then(|info| { + info.logic_slot_types.get(&(index as u32)).map(|s_info| { + s_info + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Read | MemoryAccess::ReadWrite => Some(key), + _ => None, + }) + .copied() + .collect::>() + }) + }) + .unwrap_or_else(Vec::new), + writeable_logic: logic_info + .and_then(|info| { + info.logic_slot_types.get(&(index as u32)).map(|s_info| { + s_info + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Write | MemoryAccess::ReadWrite => Some(key), + _ => None, + }) + .copied() + .collect::>() + }) + }) + .unwrap_or_else(Vec::new), + occupant: self + .obj_info + .slots + .and_then(|slots| slots.get(&(index as u32)).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() - .map(|obj| obj.object_info().and_then(|obj_info| obj_info.id)) - }) - .flatten() - .collect(), - StructureLogic(s) => s - .slots - .iter() - .filter_map(|info| { - info.occupant - .as_ref() - .map(|obj| obj.object_info().and_then(|obj_info| obj_info.id)) - }) - .flatten() - .collect(), - StructureLogicDevice(s) => s - .slots - .iter() - .filter_map(|info| { - info.occupant - .as_ref() - .map(|obj| obj.object_info().and_then(|obj_info| obj_info.id)) - }) - .flatten() - .collect(), - StructureLogicDeviceMemory(s) => s - .slots - .iter() - .filter_map(|info| { - info.occupant - .as_ref() - .map(|obj| obj.object_info().and_then(|obj_info| obj_info.id)) - }) - .flatten() - .collect(), - ItemSlots(i) => i - .slots - .iter() - .filter_map(|info| { - info.occupant - .as_ref() - .map(|obj| obj.object_info().and_then(|obj_info| obj_info.id)) - }) - .flatten() - .collect(), - ItemLogic(i) => i - .slots - .iter() - .filter_map(|info| { - info.occupant - .as_ref() - .map(|obj| obj.object_info().and_then(|obj_info| obj_info.id)) - }) - .flatten() - .collect(), - ItemLogicMemory(i) => i - .slots - .iter() - .filter_map(|info| { - info.occupant - .as_ref() - .map(|obj| obj.object_info().and_then(|obj_info| obj_info.id)) - }) - .flatten() - .collect(), - _ => vec![], + .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 } } - pub fn templates_from_slots(&self) -> Vec> { - use ObjectTemplate::*; - match self.template { - StructureSlots(s) => s.slots.iter().map(|info| info.occupant.clone()).collect(), - StructureLogic(s) => s.slots.iter().map(|info| info.occupant.clone()).collect(), - StructureLogicDevice(s) => s.slots.iter().map(|info| info.occupant.clone()).collect(), - StructureLogicDeviceMemory(s) => { - s.slots.iter().map(|info| info.occupant.clone()).collect() - } - ItemSlots(i) => i.slots.iter().map(|info| info.occupant.clone()).collect(), - ItemLogic(i) => i.slots.iter().map(|info| info.occupant.clone()).collect(), - ItemLogicMemory(i) => i.slots.iter().map(|info| info.occupant.clone()).collect(), - _ => vec![], - } + 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, vm: Rc) -> VMObject { + fn build_generic( + &self, + id: ObjectID, + template: &ObjectTemplate, + vm: Rc, + ) -> Result { use ObjectTemplate::*; - match self.template { - Structure(s) => VMObject::new(Generic { + match template { + Structure(s) => Ok(VMObject::new(Generic { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), name: Name::new(&s.prefab.name), vm, + internal_atmo_info: s.internal_atmo_info.clone(), + thermal_info: s.thermal_info.clone(), small_grid: s.structure.small_grid, - }), - StructureSlots(s) => VMObject::new(GenericStorage { + })), + StructureSlots(s) => Ok(VMObject::new(GenericStorage { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), name: Name::new(&s.prefab.name), vm, + internal_atmo_info: s.internal_atmo_info.clone(), + thermal_info: s.thermal_info.clone(), small_grid: s.structure.small_grid, - slots: s - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: Vec::new(), - writeable_logic: Vec::new(), - occupant: None, - quantity: info.quantity.unwrap_or(0), - }) - .collect(), - }), - StructureLogic(s) => VMObject::new(GenericLogicable { + 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(&s.prefab.name), vm, + internal_atmo_info: s.internal_atmo_info.clone(), + thermal_info: s.thermal_info.clone(), small_grid: s.structure.small_grid, - slots: s - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Read | MemoryAccess::ReadWrite => Some(key), - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(Vec::new), - writeable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Write | MemoryAccess::ReadWrite => Some(key), - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(Vec::new), - occupant: None, - quantity: info.quantity.unwrap_or(0), - }) - .collect(), - fields: s - .logic - .logic_types - .types - .iter() - .map(|(key, access)| { - ( - *key, - LogicField { - field_type: *access, - value: s - .logic - .logic_values - .as_ref() - .and_then(|values| values.get(key)) - .copied() - .unwrap_or(0.0), - }, - ) - }) - .collect(), + slots: self.build_slots(id, &s.slots, Some(&s.logic)), + fields: self.build_logic_fields(&s.logic), modes: s.logic.modes.clone(), - }), - StructureLogicDevice(s) => VMObject::new(GenericLogicableDevice { + })), + StructureLogicDevice(s) => Ok(VMObject::new(GenericLogicableDevice { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), name: Name::new(&s.prefab.name), vm, + internal_atmo_info: s.internal_atmo_info.clone(), + thermal_info: s.thermal_info.clone(), small_grid: s.structure.small_grid, - slots: s - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Read | MemoryAccess::ReadWrite => Some(key), - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(Vec::new), - writeable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Write | MemoryAccess::ReadWrite => Some(key), - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(Vec::new), - occupant: None, - quantity: info.quantity.unwrap_or(0), - }) - .collect(), - fields: s - .logic - .logic_types - .types - .iter() - .map(|(key, access)| { - ( - *key, - LogicField { - field_type: *access, - value: s - .logic - .logic_values - .as_ref() - .and_then(|values| values.get(key)) - .copied() - .unwrap_or(0.0), - }, - ) - }) - .collect(), + slots: self.build_slots(id, &s.slots, Some(&s.logic)), + fields: self.build_logic_fields(&s.logic), modes: s.logic.modes.clone(), - connections: s - .device - .connection_list - .iter() - .map(|conn_info| { - Connection::from_info(conn_info.typ, conn_info.role, conn_info.network) - }) - .collect(), - pins: s - .device - .device_pins - .as_ref() - .map(|pins| Some(pins.clone())) - .unwrap_or_else(|| { - s.device - .device_pins_length - .map(|pins_len| vec![None; pins_len]) - }), + connections: self.build_connections(&s.device), + pins: self.build_pins(&s.device), device_info: s.device.clone(), - reagents: s.device.reagents.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(&s.prefab.name), + 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(&s.prefab.name), + 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(), + })), StructureLogicDeviceMemory(s) if matches!(s.memory.memory_access, MemoryAccess::Read) => { - VMObject::new(GenericLogicableDeviceMemoryReadable { + Ok(VMObject::new(GenericLogicableDeviceMemoryReadable { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), name: Name::new(&s.prefab.name), vm, + internal_atmo_info: s.internal_atmo_info.clone(), + thermal_info: s.thermal_info.clone(), small_grid: s.structure.small_grid, - slots: s - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Read | MemoryAccess::ReadWrite => { - Some(key) - } - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(Vec::new), - writeable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Write | MemoryAccess::ReadWrite => { - Some(key) - } - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(Vec::new), - occupant: None, - quantity: info.quantity.unwrap_or(0), - }) - .collect(), - fields: s - .logic - .logic_types - .types - .iter() - .map(|(key, access)| { - ( - *key, - LogicField { - field_type: *access, - value: s - .logic - .logic_values - .as_ref() - .and_then(|values| values.get(key)) - .copied() - .unwrap_or(0.0), - }, - ) - }) - .collect(), + slots: self.build_slots(id, &s.slots, Some(&s.logic)), + fields: self.build_logic_fields(&s.logic), modes: s.logic.modes.clone(), - connections: s - .device - .connection_list - .iter() - .map(|conn_info| { - Connection::from_info(conn_info.typ, conn_info.role, conn_info.network) - }) - .collect(), - pins: s - .device - .device_pins - .as_ref() - .map(|pins| Some(pins.clone())) - .unwrap_or_else(|| { - s.device - .device_pins_length - .map(|pins_len| vec![None; pins_len]) - }), + connections: self.build_connections(&s.device), + pins: self.build_pins(&s.device), device_info: s.device.clone(), - reagents: s.device.reagents.clone(), - memory: s - .memory - .values - .clone() - .unwrap_or_else(|| vec![0.0; s.memory.memory_size]), - }) + reagents: self.obj_info.reagents.clone(), + memory: self.build_memory(&s.memory), + })) } StructureLogicDeviceMemory(s) => { - VMObject::new(GenericLogicableDeviceMemoryReadWriteable { + Ok(VMObject::new(GenericLogicableDeviceMemoryReadWriteable { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), name: Name::new(&s.prefab.name), vm, + internal_atmo_info: s.internal_atmo_info.clone(), + thermal_info: s.thermal_info.clone(), small_grid: s.structure.small_grid, - slots: s - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Read | MemoryAccess::ReadWrite => { - Some(key) - } - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(Vec::new), - writeable_logic: s - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Write | MemoryAccess::ReadWrite => { - Some(key) - } - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(Vec::new), - occupant: None, - quantity: info.quantity.unwrap_or(0), - }) - .collect(), - fields: s - .logic - .logic_types - .types - .iter() - .map(|(key, access)| { - ( - *key, - LogicField { - field_type: *access, - value: s - .logic - .logic_values - .as_ref() - .and_then(|values| values.get(key)) - .copied() - .unwrap_or(0.0), - }, - ) - }) - .collect(), + slots: self.build_slots(id, &s.slots, Some(&s.logic)), + fields: self.build_logic_fields(&s.logic), modes: s.logic.modes.clone(), - connections: s - .device - .connection_list - .iter() - .map(|conn_info| { - Connection::from_info(conn_info.typ, conn_info.role, conn_info.network) - }) - .collect(), - pins: s - .device - .device_pins - .as_ref() - .map(|pins| Some(pins.clone())) - .unwrap_or_else(|| { - s.device - .device_pins_length - .map(|pins_len| vec![None; pins_len]) - }), + connections: self.build_connections(&s.device), + pins: self.build_pins(&s.device), device_info: s.device.clone(), - reagents: s.device.reagents.clone(), - memory: s - .memory - .values - .clone() - .unwrap_or_else(|| vec![0.0; s.memory.memory_size]), - }) + reagents: self.obj_info.reagents.clone(), + memory: self.build_memory(&s.memory), + })) } - Item(i) => VMObject::new(GenericItem { + 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(&s.prefab.name), + 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), + }, + )) + } + StructureLogicDeviceConsumerMemory(s) => Ok(VMObject::new( + GenericLogicableDeviceConsumerMemoryReadWriteable { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&s.prefab.name), + 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), + }, + )), + Item(i) => Ok(VMObject::new(GenericItem { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), name: Name::new(&i.prefab.name), vm, + internal_atmo_info: i.internal_atmo_info.clone(), + thermal_info: i.thermal_info.clone(), item_info: i.item.clone(), parent_slot: None, - damage: i.item.damage, - }), - ItemSlots(i) => VMObject::new(GenericItemStorage { + damage: self.obj_info.damage.clone(), + })), + ItemSlots(i) => Ok(VMObject::new(GenericItemStorage { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), name: Name::new(&i.prefab.name), vm, + internal_atmo_info: i.internal_atmo_info.clone(), + thermal_info: i.thermal_info.clone(), item_info: i.item.clone(), parent_slot: None, - damage: i.item.damage, - slots: i - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: Vec::new(), - writeable_logic: Vec::new(), - occupant: None, - quantity: info.quantity.unwrap_or(0), - }) - .collect(), - }), - ItemLogic(i) => VMObject::new(GenericItemLogicable { + damage: self.obj_info.damage.clone(), + 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(&i.prefab.name), vm, + internal_atmo_info: i.internal_atmo_info.clone(), + thermal_info: i.thermal_info.clone(), item_info: i.item.clone(), parent_slot: None, - damage: i.item.damage, - slots: i - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: i - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Read | MemoryAccess::ReadWrite => Some(key), - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(Vec::new), - writeable_logic: i - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Write | MemoryAccess::ReadWrite => Some(key), - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(Vec::new), - occupant: None, - quantity: info.quantity.unwrap_or(0), - }) - .collect(), - fields: i - .logic - .logic_types - .types - .iter() - .map(|(key, access)| { - ( - *key, - LogicField { - field_type: *access, - value: i - .logic - .logic_values - .as_ref() - .and_then(|values| values.get(key)) - .copied() - .unwrap_or(0.0), - }, - ) - }) - .collect(), + damage: self.obj_info.damage.clone(), + 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(&i.prefab.name), + 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.clone(), + 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) => { - VMObject::new(GenericItemLogicableMemoryReadable { + Ok(VMObject::new(GenericItemLogicableMemoryReadable { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), name: Name::new(&i.prefab.name), vm, + internal_atmo_info: i.internal_atmo_info.clone(), + thermal_info: i.thermal_info.clone(), item_info: i.item.clone(), parent_slot: None, - damage: i.item.damage, - slots: i - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: i - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Read | MemoryAccess::ReadWrite => { - Some(key) - } - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(Vec::new), - writeable_logic: i - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Write | MemoryAccess::ReadWrite => { - Some(key) - } - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(Vec::new), - occupant: None, - quantity: info.quantity.unwrap_or(0), - }) - .collect(), - fields: i - .logic - .logic_types - .types - .iter() - .map(|(key, access)| { - ( - *key, - LogicField { - field_type: *access, - value: i - .logic - .logic_values - .as_ref() - .and_then(|values| values.get(key)) - .copied() - .unwrap_or(0.0), - }, - ) - }) - .collect(), + damage: self.obj_info.damage.clone(), + slots: self.build_slots(id, &i.slots, Some(&i.logic)), + fields: self.build_logic_fields(&i.logic), modes: i.logic.modes.clone(), - memory: i - .memory - .values - .clone() - .unwrap_or_else(|| vec![0.0; i.memory.memory_size]), - }) + memory: self.build_memory(&i.memory), + })) } - ItemLogicMemory(i) => VMObject::new(GenericItemLogicableMemoryReadWriteable { + ItemLogicMemory(i) => Ok(VMObject::new(GenericItemLogicableMemoryReadWriteable { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), name: Name::new(&i.prefab.name), vm, + internal_atmo_info: i.internal_atmo_info.clone(), + thermal_info: i.thermal_info.clone(), item_info: i.item.clone(), parent_slot: None, - damage: i.item.damage, - slots: i - .slots - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: i - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Read | MemoryAccess::ReadWrite => Some(key), - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(Vec::new), - writeable_logic: i - .logic - .logic_slot_types - .get(&(index as u32)) - .map(|s_info| { - s_info - .slot_types - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Write | MemoryAccess::ReadWrite => Some(key), - _ => None, - }) - .copied() - .collect::>() - }) - .unwrap_or_else(Vec::new), - occupant: None, - quantity: info.quantity.unwrap_or(0), - }) - .collect(), - fields: i - .logic - .logic_types - .types - .iter() - .map(|(key, access)| { - ( - *key, - LogicField { - field_type: *access, - value: i - .logic - .logic_values - .as_ref() - .and_then(|values| values.get(key)) - .copied() - .unwrap_or(0.0), - }, - ) - }) - .collect(), + damage: self.obj_info.damage.clone(), + slots: self.build_slots(id, &i.slots, Some(&i.logic)), + fields: self.build_logic_fields(&i.logic), modes: i.logic.modes.clone(), - memory: i - .memory - .values - .clone() - .unwrap_or_else(|| vec![0.0; i.memory.memory_size]), - }), + 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(&i.prefab.name), + 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.clone(), + slots: self.build_slots(id, &i.slots, Some(&i.logic)), + fields: self.build_logic_fields(&i.logic), + modes: i.logic.modes.clone(), + })), + ItemSuit(i) => Ok(VMObject::new(GenericItemSuit { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&i.prefab.name), + 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.clone(), + slots: self.build_slots(id, &i.slots, None), + })), + ItemSuitLogic(i) => Ok(VMObject::new(GenericItemSuitLogic { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&i.prefab.name), + 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.clone(), + slots: self.build_slots(id, &i.slots, Some(&i.logic)), + 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(&i.prefab.name), + 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.clone(), + 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), + })), } } pub fn freeze_object(obj: &VMObject, vm: &Rc) -> Result { let obj_ref = obj.borrow(); let interfaces = ObjectInterfaces::from_object(&*obj_ref); - 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_interface: None, - fabricator: None, - } => { - // completely generic structure? not sure how this got created but it technically - // valid in the data model - Ok(ObjectTemplate::Structure(StructureTemplate { - object: Some(obj.into()), - prefab: obj.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_interface: None, - fabricator: None, - } => Ok(ObjectTemplate::StructureSlots(StructureSlotsTemplate { - object: Some(obj.into()), - prefab: obj.into(), - structure: structure.into(), - slots: freeze_storage(storage, vm)?, - })), - ObjectInterfaces { - structure: Some(structure), - storage: Some(storage), - memory_readable: None, - memory_writable: None, - logicable: Some(logic), - source_code: None, - 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_interface: None, - fabricator: None, - } => Ok(ObjectTemplate::StructureLogic(StructureLogicTemplate { - object: Some(obj.into()), - prefab: obj.into(), - structure: structure.into(), - slots: freeze_storage(storage, vm)?, - logic: logic.into(), - })), - ObjectInterfaces { - structure: Some(structure), - storage: Some(storage), - memory_readable: None, - memory_writable: None, - logicable: Some(logic), - source_code: None, - 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_interface: None, - fabricator: None, - } => Ok(ObjectTemplate::StructureLogicDevice( - StructureLogicDeviceTemplate { - object: Some(obj.into()), - prefab: obj.into(), - structure: structure.into(), - slots: freeze_storage(storage, vm)?, - 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: None, - 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_interface: None, - fabricator: None, - } => Ok(ObjectTemplate::StructureLogicDeviceMemory( - StructureLogicDeviceMemoryTemplate { - object: Some(obj.into()), - prefab: obj.into(), - structure: structure.into(), - slots: freeze_storage(storage, vm)?, - logic: logic.into(), - device: device.into(), - memory: mem_r.into(), - }, - )), + 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( + || Some(try_template_from_interfaces(interfaces, obj)), + |_| None, + ) + .transpose()?; - // 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_interface: None, - fabricator: None, - } => Ok(ObjectTemplate::Item(ItemTemplate { - object: Some(obj.into()), - prefab: obj.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_interface: None, - fabricator: None, - } => Ok(ObjectTemplate::ItemSlots(ItemSlotsTemplate { - object: Some(obj.into()), - prefab: obj.into(), - item: item.into(), - slots: freeze_storage(storage, vm)?, - })), - ObjectInterfaces { - structure: None, - storage: Some(storage), - memory_readable: None, - memory_writable: None, - logicable: Some(logic), - source_code: None, - 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_interface: None, - fabricator: None, - } => Ok(ObjectTemplate::ItemLogic(ItemLogicTemplate { - object: Some(obj.into()), - prefab: obj.into(), - item: item.into(), - slots: freeze_storage(storage, vm)?, - logic: logic.into(), - })), - ObjectInterfaces { - structure: None, - storage: Some(storage), - memory_readable: Some(mem_r), - memory_writable: _mem_w, - logicable: Some(logic), - source_code: None, - circuit_holder: _ch, - item: Some(item), - integrated_circuit: None, - 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_interface: None, - fabricator: None, - } => Ok(ObjectTemplate::ItemLogicMemory(ItemLogicMemoryTemplate { - object: Some(obj.into()), - prefab: obj.into(), - item: item.into(), - slots: freeze_storage(storage, vm)?, - logic: logic.into(), - memory: mem_r.into(), - })), - _ => Err(TemplateError::NonConformingObject(*obj_ref.get_id())), - } + Ok(FrozenObject { obj_info, template }) } } -fn freeze_storage(storage: StorageRef<'_>, vm: &Rc) -> Result, TemplateError> { - let slots = storage - .get_slots() - .iter() - .map(|slot| { - Ok(SlotInfo { - name: slot.name.clone(), - typ: slot.typ, - occupant: slot - .occupant - .map(|occupant| { - let occupant = vm - .get_object(occupant) - .ok_or(TemplateError::MissingVMObject(occupant))?; - ObjectTemplate::freeze_object(&occupant, vm) - }) - .map_or(Ok(None), |v| v.map(Some))?, - quantity: if slot.quantity == 0 { - None - } else { - Some(slot.quantity) - }, - }) - }) - .collect::, _>>()?; - Ok(slots) +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_interface: None, + fabricator: None, + internal_atmosphere, + thermal, + } => { + // 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_interface: None, + fabricator: None, + internal_atmosphere, + thermal, + } => 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: None, + 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_interface: None, + fabricator: None, + internal_atmosphere, + thermal, + } => 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: None, + 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_interface: None, + fabricator: None, + internal_atmosphere, + thermal, + } => 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: None, + 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_interface: None, + fabricator: None, + internal_atmosphere, + thermal, + } => 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_interface: None, + fabricator: None, + internal_atmosphere, + thermal, + } => 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_interface: None, + fabricator: None, + internal_atmosphere, + thermal, + } => 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: None, + 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_interface: None, + fabricator: None, + internal_atmosphere, + thermal, + } => 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: None, + circuit_holder: _ch, + item: Some(item), + integrated_circuit: None, + 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_interface: None, + fabricator: None, + internal_atmosphere, + thermal, + } => 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(), + })), + _ => Err(TemplateError::NonConformingObject(obj.get_id())), + } } impl From<&VMObject> for PrefabInfo { @@ -1214,58 +1057,45 @@ impl From> for LogicInfo { .map(|(index, slot)| { ( index as u32, - LogicSlotTypes { - slot_types: 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(), - }, + 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: LogicTypes { - 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(), - }, + 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()), - logic_values: Some( - logic - .valid_logic_types() - .iter() - .filter_map(|lt| match logic.get_logic(*lt) { - Ok(val) => Some((*lt, val)), - _ => None, - }) - .collect(), - ), transmission_receiver: wr.is_some(), wireless_logic: wt.is_some(), circuit_holder: circuit_holder.is_some(), @@ -1283,11 +1113,6 @@ impl From> for ItemInfo { reagents: item.reagents().cloned(), slot_class: item.slot_class(), sorting_class: item.sorting_class(), - damage: if item.get_damage() == 0.0 { - None - } else { - Some(item.get_damage()) - }, } } } @@ -1301,8 +1126,7 @@ impl From> for DeviceInfo { .iter() .map(|conn| conn.to_info()) .collect(), - device_pins_length: device.device_pins().map(|pins| pins.len()), - device_pins: device.device_pins().map(|pins| pins.to_vec()), + 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(), @@ -1311,11 +1135,6 @@ impl From> for DeviceInfo { has_color_state: device.has_color_state(), has_atmosphere: device.has_atmosphere(), has_activate_state: device.has_activate_state(), - reagents: if reagents.is_empty() { - None - } else { - Some(reagents) - }, } } } @@ -1327,6 +1146,7 @@ impl From> for StructureInfo { } } } + impl From> for MemoryInfo { fn from(mem_r: MemoryReadableRef<'_>) -> Self { let mem_w = mem_r.as_memory_writable(); @@ -1337,12 +1157,41 @@ impl From> for MemoryInfo { } else { MemoryAccess::Read }, - memory_size: mem_r.memory_size(), - values: Some(mem_r.get_memory_slice().to_vec()), + 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 Vec { + fn from(storage: StorageRef<'_>) -> Self { + storage + .get_slots() + .iter() + .map(|slot| SlotInfo { + name: slot.name.clone(), + typ: slot.typ, + }) + .collect() + } +} + #[cfg(test)] mod tests { diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index 5653e05..3ac453a 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -14,8 +14,8 @@ use crate::{ }, }; use stationeers_data::enums::{ - basic_enums::{Class as SlotClass, GasType, SortingClass}, - script_enums::{LogicSlotType, LogicType}, + basic::{Class as SlotClass, GasType, SortingClass}, + script::{LogicSlotType, LogicType}, }; use std::{collections::BTreeMap, fmt::Debug}; @@ -126,8 +126,18 @@ tag_object_traits! { } pub trait Suit { - fn pressure_waste(&self) -> f64; - fn pressure_air(&self) -> f64; + 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 { diff --git a/stationeers_data/src/database/prefab_map.rs b/stationeers_data/src/database/prefab_map.rs index 329e44c..2331904 100644 --- a/stationeers_data/src/database/prefab_map.rs +++ b/stationeers_data/src/database/prefab_map.rs @@ -20530,6 +20530,89 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), processed_reagents: vec![].into_iter().collect(), }, + fabricator_info: Some(FabricatorInfo { + tier: MachineTier::Undefined, + recipes: vec![ + ("ItemCannedCondensedMilk".into(), Recipe { 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() }), ("ItemCannedEdamame".into(), Recipe { + 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() }), ("ItemCannedMushroom" + .into(), Recipe { 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(), 8f64), ("Oil".into(), + 1f64), ("Steel".into(), 1f64)] .into_iter().collect() }), + ("ItemCannedPowderedEggs".into(), Recipe { 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() }), ("ItemCannedRicePudding" + .into(), Recipe { 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() }), + ("ItemCornSoup".into(), Recipe { 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() }), ("ItemFrenchFries".into(), Recipe { 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() }), ("ItemPumpkinSoup" + .into(), Recipe { 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(), + 5f64), ("Steel".into(), 1f64)] .into_iter().collect() }), + ("ItemTomatoSoup".into(), Recipe { 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() }) + ] + .into_iter() + .collect(), + }), memory: MemoryInfo { instructions: Some( vec![ @@ -21314,6 +21397,514 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), processed_reagents: vec![].into_iter().collect(), }, + fabricator_info: Some(FabricatorInfo { + tier: MachineTier::Undefined, + recipes: vec![ + ("CardboardBox".into(), Recipe { 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() }), ("ItemCableCoil" + .into(), Recipe { 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() }), ("ItemCoffeeMug".into(), Recipe { 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() }), + ("ItemEggCarton".into(), Recipe { 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() }), ("ItemEmptyCan" + .into(), Recipe { 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() }), ("ItemEvaSuit".into(), Recipe { 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() }), ("ItemGlassSheets".into(), Recipe { 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() }), + ("ItemIronFrames".into(), Recipe { 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() }), ("ItemIronSheets".into(), + Recipe { 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() }), ("ItemKitAccessBridge".into(), Recipe { 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() }), ("ItemKitArcFurnace" + .into(), Recipe { 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() }), ("ItemKitAutolathe".into(), + Recipe { 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() }), + ("ItemKitBeds".into(), Recipe { 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() + }), ("ItemKitBlastDoor".into(), Recipe { 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() }), ("ItemKitCentrifuge".into(), Recipe { + 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() }), ("ItemKitChairs".into(), Recipe { 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() }), ("ItemKitChute".into(), Recipe { 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() }), + ("ItemKitCompositeCladding".into(), Recipe { 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() }), + ("ItemKitCompositeFloorGrating".into(), Recipe { 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() }), + ("ItemKitCrate".into(), Recipe { 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() }), ("ItemKitCrateMkII".into(), + Recipe { 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() }), ("ItemKitCrateMount".into(), + Recipe { 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() }), ("ItemKitDeepMiner".into(), Recipe { 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() }), ("ItemKitDoor".into(), Recipe { 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() }), ("ItemKitElectronicsPrinter".into(), Recipe { 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() }), ("ItemKitFlagODA" + .into(), Recipe { 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() }), ("ItemKitFurnace".into(), Recipe { 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() }), ("ItemKitFurniture".into(), Recipe { + 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() }), ("ItemKitHydraulicPipeBender".into(), + Recipe { 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() }), + ("ItemKitInteriorDoors".into(), Recipe { 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() }), ("ItemKitLadder".into(), Recipe { 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() }), + ("ItemKitLocker".into(), Recipe { 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() }), ("ItemKitPipe".into(), Recipe { + 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() }), + ("ItemKitRailing".into(), Recipe { 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() }), ("ItemKitRecycler".into(), + Recipe { 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() }), ("ItemKitReinforcedWindows" + .into(), Recipe { 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![("Steel".into(), 2f64)] .into_iter() + .collect() }), ("ItemKitRespawnPointWallMounted".into(), Recipe { + 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() }), ("ItemKitRocketManufactory".into(), Recipe { 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() }), ("ItemKitSDBHopper" + .into(), Recipe { 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() }), ("ItemKitSecurityPrinter".into(), Recipe { 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() }), ("ItemKitSign" + .into(), Recipe { 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() }), ("ItemKitSorter".into(), Recipe { 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() }), ("ItemKitStacker" + .into(), Recipe { 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() }), ("ItemKitStairs".into(), + Recipe { 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() }), ("ItemKitStairwell".into(), Recipe { 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() }), + ("ItemKitStandardChute".into(), Recipe { 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() }), + ("ItemKitTables".into(), Recipe { 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() + }), ("ItemKitToolManufactory".into(), Recipe { 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() }), ("ItemKitWall".into(), Recipe { 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() }), + ("ItemKitWallArch".into(), Recipe { 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() }), ("ItemKitWallFlat" + .into(), Recipe { 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() }), ("ItemKitWallGeometry".into(), Recipe { 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() }), + ("ItemKitWallIron".into(), Recipe { 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() }), ("ItemKitWallPadded".into(), + Recipe { 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() }), ("ItemKitWindowShutter".into(), Recipe { 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![("Iron".into(), 1f64), ("Steel".into(), 2f64)] .into_iter() + .collect() }), ("ItemPlasticSheets".into(), Recipe { 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() }), + ("ItemSpaceHelmet".into(), Recipe { 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() }), + ("ItemSteelFrames".into(), Recipe { 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() }), ("ItemSteelSheets" + .into(), Recipe { 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() }), ("ItemStelliteGlassSheets".into(), Recipe { 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() }), ("ItemWallLight".into(), Recipe { 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() }), ("KitSDBSilo".into(), + Recipe { 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() }), + ("KitStructureCombustionCentrifuge".into(), Recipe { 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() }) + ] + .into_iter() + .collect(), + }), memory: MemoryInfo { instructions: Some( vec![ @@ -21436,6 +22027,157 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), processed_reagents: vec![].into_iter().collect(), }, + fabricator_info: Some(FabricatorInfo { + tier: MachineTier::TierOne, + recipes: vec![ + ("ItemBreadLoaf".into(), Recipe { 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() + }), ("ItemCerealBar".into(), Recipe { 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() }), + ("ItemChocolateBar".into(), Recipe { 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() + }), ("ItemChocolateCake".into(), Recipe { 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() }), ("ItemChocolateCerealBar".into(), + Recipe { 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() }), ("ItemCookedCondensedMilk".into(), + Recipe { 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() }), + ("ItemCookedCorn".into(), Recipe { 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() }), ("ItemCookedMushroom".into(), + Recipe { 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() }), + ("ItemCookedPowderedEggs".into(), Recipe { 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() }), + ("ItemCookedPumpkin".into(), Recipe { 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() }), + ("ItemCookedRice".into(), Recipe { 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(), + 3f64)] .into_iter().collect() }), ("ItemCookedSoybean".into(), + Recipe { 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(), 5f64)] .into_iter().collect() }), + ("ItemCookedTomato".into(), Recipe { 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() }), ("ItemFries".into(), + Recipe { 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() }), ("ItemMuffin".into(), Recipe { 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() }), ("ItemPlainCake" + .into(), Recipe { 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() }), ("ItemPotatoBaked".into(), Recipe { + 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() }), + ("ItemPumpkinPie".into(), Recipe { 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() }) + ] + .into_iter() + .collect(), + }), memory: MemoryInfo { instructions: Some( vec![ @@ -28197,6 +28939,1139 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), processed_reagents: vec![].into_iter().collect(), }, + fabricator_info: Some(FabricatorInfo { + tier: MachineTier::Undefined, + recipes: vec![ + ("ApplianceChemistryStation".into(), Recipe { 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() }), + ("ApplianceDeskLampLeft".into(), Recipe { 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() }), ("ApplianceDeskLampRight".into(), + Recipe { 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() }), ("ApplianceMicrowave".into(), + Recipe { 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() }), + ("AppliancePackagingMachine".into(), Recipe { 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() }), + ("AppliancePaintMixer".into(), Recipe { 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() }), + ("AppliancePlantGeneticAnalyzer".into(), Recipe { 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() }), + ("AppliancePlantGeneticSplicer".into(), Recipe { 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() }), ("AppliancePlantGeneticStabilizer" + .into(), Recipe { 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() }), + ("ApplianceReagentProcessor".into(), Recipe { 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() }), ("ApplianceTabletDock" + .into(), Recipe { 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() }), ("AutolathePrinterMod".into(), Recipe + { 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() }), ("Battery_Wireless_cell".into(), Recipe { 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() }), + ("Battery_Wireless_cell_Big".into(), Recipe { 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() }), + ("CartridgeAtmosAnalyser".into(), Recipe { 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() }), + ("CartridgeConfiguration".into(), Recipe { 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() }), + ("CartridgeElectronicReader".into(), Recipe { 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() }), ("CartridgeGPS" + .into(), Recipe { 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() }), + ("CartridgeMedicalAnalyser".into(), Recipe { 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() }), + ("CartridgeNetworkAnalyser".into(), Recipe { 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() }), ("CartridgeOreScanner" + .into(), Recipe { 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() }), + ("CartridgeOreScannerColor".into(), Recipe { 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() }), ("CartridgePlantAnalyser".into(), Recipe { 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() }), ("CartridgeTracker" + .into(), Recipe { 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() }), + ("CircuitboardAdvAirlockControl".into(), Recipe { 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() }), + ("CircuitboardAirControl".into(), Recipe { 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() }), ("CircuitboardAirlockControl".into(), Recipe { + 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() }), + ("CircuitboardDoorControl".into(), Recipe { 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() }), ("CircuitboardGasDisplay".into(), Recipe { 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() }), + ("CircuitboardGraphDisplay".into(), Recipe { 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() }), ("CircuitboardHashDisplay".into(), Recipe { 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() }), ("CircuitboardModeControl".into(), Recipe { 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() }), ("CircuitboardPowerControl".into(), Recipe { 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() }), ("CircuitboardShipDisplay".into(), Recipe { 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() }), ("CircuitboardSolarControl".into(), Recipe { 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() }), ("DynamicLight".into(), Recipe { 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() }), ("ElectronicPrinterMod".into(), Recipe { 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() }), ("ItemAdvancedTablet".into(), Recipe { 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() }), + ("ItemAreaPowerControl".into(), Recipe { 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() }), ("ItemBatteryCell" + .into(), Recipe { 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() }), + ("ItemBatteryCellLarge".into(), Recipe { 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() }), + ("ItemBatteryCellNuclear".into(), Recipe { 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() }), + ("ItemBatteryCharger".into(), Recipe { 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() }), + ("ItemBatteryChargerSmall".into(), Recipe { 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() }), ("ItemCableAnalyser" + .into(), Recipe { 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() }), + ("ItemCableCoil".into(), Recipe { 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() }), + ("ItemCableCoilHeavy".into(), Recipe { 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() }), ("ItemCableFuse".into(), Recipe { 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() }), ("ItemCreditCard".into(), Recipe { 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() }), ("ItemDataDisk".into(), Recipe { 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() }), ("ItemElectronicParts".into(), Recipe { 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() }), ("ItemFlashingLight" + .into(), Recipe { 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() }), ("ItemHEMDroidRepairKit" + .into(), Recipe { 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() + }), ("ItemIntegratedCircuit10".into(), Recipe { 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() + }), ("ItemKitAIMeE".into(), Recipe { 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() }), ("ItemKitAdvancedComposter".into(), Recipe { 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() }), ("ItemKitAdvancedFurnace".into(), Recipe { 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() + }), ("ItemKitAdvancedPackagingMachine".into(), Recipe { 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() }), ("ItemKitAutoMinerSmall".into(), Recipe { 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() }), ("ItemKitAutomatedOven" + .into(), Recipe { 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() }), + ("ItemKitBattery".into(), Recipe { 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() }), ("ItemKitBatteryLarge".into(), Recipe + { 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() }), ("ItemKitBeacon".into(), Recipe { 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() + }), ("ItemKitComputer".into(), Recipe { 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() }), ("ItemKitConsole" + .into(), Recipe { 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() }), + ("ItemKitDynamicGenerator".into(), Recipe { 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() + }), ("ItemKitElevator".into(), Recipe { 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() + }), ("ItemKitFridgeBig".into(), Recipe { 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() + }), ("ItemKitFridgeSmall".into(), Recipe { 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() }), + ("ItemKitGasGenerator".into(), Recipe { 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() }), ("ItemKitGroundTelescope".into(), + Recipe { 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() + }), ("ItemKitGrowLight".into(), Recipe { 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() }), + ("ItemKitHarvie".into(), Recipe { 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() }), ("ItemKitHorizontalAutoMiner".into(), + Recipe { 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() }), + ("ItemKitHydroponicStation".into(), Recipe { 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() + }), ("ItemKitLandingPadAtmos".into(), Recipe { 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() }), ("ItemKitLandingPadBasic".into(), + Recipe { 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() }), ("ItemKitLandingPadWaypoint" + .into(), Recipe { 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() }), ("ItemKitLargeSatelliteDish" + .into(), Recipe { 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() }), ("ItemKitLogicCircuit".into(), Recipe { 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() }), + ("ItemKitLogicInputOutput".into(), Recipe { 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() }), ("ItemKitLogicMemory".into(), Recipe { 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() }), ("ItemKitLogicProcessor".into(), Recipe { 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() }), ("ItemKitLogicSwitch".into(), Recipe { 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() }), ("ItemKitLogicTransmitter".into(), Recipe { 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() + }), ("ItemKitMusicMachines".into(), Recipe { 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() }), ("ItemKitPowerTransmitter".into(), Recipe { 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() }), + ("ItemKitPowerTransmitterOmni".into(), Recipe { 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() }), + ("ItemKitPressurePlate".into(), Recipe { 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() }), ("ItemKitResearchMachine".into(), Recipe { 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() }), + ("ItemKitSatelliteDish".into(), Recipe { 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() }), + ("ItemKitSensor".into(), Recipe { 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(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), 3f64)] + .into_iter().collect() }), ("ItemKitSmallSatelliteDish".into(), + Recipe { 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() }), ("ItemKitSolarPanel".into(), + Recipe { 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() }), + ("ItemKitSolarPanelBasic".into(), Recipe { 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() }), + ("ItemKitSolarPanelBasicReinforced".into(), Recipe { 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() }), ("ItemKitSolarPanelReinforced".into(), Recipe { + 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() }), ("ItemKitSolidGenerator".into(), Recipe { 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() }), ("ItemKitSpeaker".into(), Recipe { + 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() }), + ("ItemKitStirlingEngine".into(), Recipe { 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() }), ("ItemKitTransformer" + .into(), Recipe { 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() }), ("ItemKitTransformerSmall" + .into(), Recipe { 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() }), + ("ItemKitTurbineGenerator".into(), Recipe { 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() + }), ("ItemKitUprightWindTurbine".into(), Recipe { 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() }), + ("ItemKitVendingMachine".into(), Recipe { 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() }), ("ItemKitVendingMachineRefrigerated".into(), + Recipe { 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() }), ("ItemKitWeatherStation".into(), + Recipe { 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() }), ("ItemKitWindTurbine".into(), Recipe { + 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() }), + ("ItemLabeller".into(), Recipe { 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() }), ("ItemLaptop".into(), Recipe { 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() }), ("ItemPowerConnector".into(), + Recipe { 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() }), + ("ItemResearchCapsule".into(), Recipe { 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() }), + ("ItemResearchCapsuleGreen".into(), Recipe { 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() }), + ("ItemResearchCapsuleRed".into(), Recipe { 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() }), + ("ItemResearchCapsuleYellow".into(), Recipe { 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() }), + ("ItemSoundCartridgeBass".into(), Recipe { 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() }), + ("ItemSoundCartridgeDrums".into(), Recipe { 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() }), + ("ItemSoundCartridgeLeads".into(), Recipe { 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() }), + ("ItemSoundCartridgeSynth".into(), Recipe { 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() }), ("ItemTablet".into(), + Recipe { 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() }), + ("ItemWallLight".into(), Recipe { 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() }), + ("MotherboardComms".into(), Recipe { 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() }), + ("MotherboardLogic".into(), Recipe { 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() }), + ("MotherboardProgrammableChip".into(), Recipe { 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() }), ("MotherboardRockets".into(), Recipe { 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() }), ("MotherboardSorter".into(), Recipe { + 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() }), ("PipeBenderMod".into(), Recipe { 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() }), ("PortableComposter".into(), Recipe { 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() }), ("PortableSolarPanel".into(), Recipe { + 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() }), ("ToolPrinterMod" + .into(), Recipe { 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() }) + ] + .into_iter() + .collect(), + }), memory: MemoryInfo { instructions: Some( vec![ @@ -30682,6 +32557,879 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), processed_reagents: vec![].into_iter().collect(), }, + fabricator_info: Some(FabricatorInfo { + tier: MachineTier::Undefined, + recipes: vec![ + ("ApplianceSeedTray".into(), Recipe { 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() }), ("ItemActiveVent" + .into(), Recipe { 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() }), + ("ItemAdhesiveInsulation".into(), Recipe { 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() }), ("ItemDynamicAirCon".into(), Recipe { + 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() + }), ("ItemDynamicScrubber".into(), Recipe { 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() + }), ("ItemGasCanisterEmpty".into(), Recipe { 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() }), + ("ItemGasCanisterSmart".into(), Recipe { 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() }), + ("ItemGasFilterCarbonDioxide".into(), Recipe { 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() }), + ("ItemGasFilterCarbonDioxideL".into(), Recipe { 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() }), + ("ItemGasFilterCarbonDioxideM".into(), Recipe { 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() }), + ("ItemGasFilterNitrogen".into(), Recipe { 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() }), + ("ItemGasFilterNitrogenL".into(), Recipe { 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() }), + ("ItemGasFilterNitrogenM".into(), Recipe { 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() }), + ("ItemGasFilterNitrousOxide".into(), Recipe { 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() }), + ("ItemGasFilterNitrousOxideL".into(), Recipe { 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() }), + ("ItemGasFilterNitrousOxideM".into(), Recipe { 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() }), + ("ItemGasFilterOxygen".into(), Recipe { 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() }), + ("ItemGasFilterOxygenL".into(), Recipe { 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() }), + ("ItemGasFilterOxygenM".into(), Recipe { 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() }), + ("ItemGasFilterPollutants".into(), Recipe { 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() }), + ("ItemGasFilterPollutantsL".into(), Recipe { 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() }), + ("ItemGasFilterPollutantsM".into(), Recipe { 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() }), + ("ItemGasFilterVolatiles".into(), Recipe { 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() }), + ("ItemGasFilterVolatilesL".into(), Recipe { 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() }), + ("ItemGasFilterVolatilesM".into(), Recipe { 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() }), + ("ItemGasFilterWater".into(), Recipe { 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() }), + ("ItemGasFilterWaterL".into(), Recipe { 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() }), ("ItemGasFilterWaterM" + .into(), Recipe { 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() + }), ("ItemHydroponicTray".into(), Recipe { 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() }), + ("ItemKitAirlock".into(), Recipe { 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() }), ("ItemKitAirlockGate".into(), Recipe { + 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() }), + ("ItemKitAtmospherics".into(), Recipe { 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() }), ("ItemKitChute" + .into(), Recipe { 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() }), ("ItemKitCryoTube".into(), Recipe { 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() + }), ("ItemKitDrinkingFountain".into(), Recipe { 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() }), + ("ItemKitDynamicCanister".into(), Recipe { 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() }), + ("ItemKitDynamicGasTankAdvanced".into(), Recipe { 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() + }), ("ItemKitDynamicHydroponics".into(), Recipe { 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() }), + ("ItemKitDynamicLiquidCanister".into(), Recipe { 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() }), + ("ItemKitDynamicMKIILiquidCanister".into(), Recipe { 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() + }), ("ItemKitEvaporationChamber".into(), Recipe { 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() }), + ("ItemKitHeatExchanger".into(), Recipe { 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() }), ("ItemKitIceCrusher".into(), Recipe { + 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() }), + ("ItemKitInsulatedLiquidPipe".into(), Recipe { 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() }), ("ItemKitInsulatedPipe".into(), Recipe + { 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() }), ("ItemKitInsulatedPipeUtility".into(), + Recipe { 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() }), + ("ItemKitInsulatedPipeUtilityLiquid".into(), Recipe { 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() }), ("ItemKitLargeDirectHeatExchanger" + .into(), Recipe { 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() }), + ("ItemKitLargeExtendableRadiator".into(), Recipe { 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() }), + ("ItemKitLiquidRegulator".into(), Recipe { 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() }), ("ItemKitLiquidTank" + .into(), Recipe { 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() }), ("ItemKitLiquidTankInsulated" + .into(), Recipe { 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() }), + ("ItemKitLiquidTurboVolumePump".into(), Recipe { 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() + }), ("ItemKitPassiveLargeRadiatorGas".into(), Recipe { 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() }), + ("ItemKitPassiveLargeRadiatorLiquid".into(), Recipe { 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() }), + ("ItemKitPassthroughHeatExchanger".into(), Recipe { 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() }), ("ItemKitPipe".into(), Recipe { 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() }), + ("ItemKitPipeLiquid".into(), Recipe { 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() }), + ("ItemKitPipeOrgan".into(), Recipe { 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() }), ("ItemKitPipeRadiator".into(), + Recipe { 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() }), ("ItemKitPipeRadiatorLiquid" + .into(), Recipe { 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() }), ("ItemKitPipeUtility".into(), + Recipe { 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() }), ("ItemKitPipeUtilityLiquid".into(), Recipe { 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() }), + ("ItemKitPlanter".into(), Recipe { 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() }), ("ItemKitPortablesConnector" + .into(), Recipe { 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() }), ("ItemKitPoweredVent".into(), Recipe { 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() }), ("ItemKitRegulator" + .into(), Recipe { 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() }), + ("ItemKitSensor".into(), Recipe { 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(), 1f64)] + .into_iter().collect() }), ("ItemKitShower".into(), Recipe { 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() }), ("ItemKitSleeper" + .into(), Recipe { 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() }), + ("ItemKitSmallDirectHeatExchanger".into(), Recipe { 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() }), ("ItemKitStandardChute".into(), Recipe + { 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() }), + ("ItemKitSuitStorage".into(), Recipe { 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() }), ("ItemKitTank".into(), + Recipe { 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() }), ("ItemKitTankInsulated" + .into(), Recipe { 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() }), + ("ItemKitTurboVolumePump".into(), Recipe { 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() + }), ("ItemKitWaterBottleFiller".into(), Recipe { 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() }), + ("ItemKitWaterPurifier".into(), Recipe { 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() }), + ("ItemLiquidCanisterEmpty".into(), Recipe { 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() }), + ("ItemLiquidCanisterSmart".into(), Recipe { 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() }), ("ItemLiquidDrain" + .into(), Recipe { 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() }), ("ItemLiquidPipeAnalyzer" + .into(), Recipe { 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() }), + ("ItemLiquidPipeHeater".into(), Recipe { 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() }), ("ItemLiquidPipeValve" + .into(), Recipe { 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() }), ("ItemLiquidPipeVolumePump" + .into(), Recipe { 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() }), + ("ItemPassiveVent".into(), Recipe { 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() }), ("ItemPassiveVentInsulated" + .into(), Recipe { 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() }), ("ItemPipeAnalyizer".into(), + Recipe { 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() }), + ("ItemPipeCowl".into(), Recipe { 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() }), ("ItemPipeDigitalValve".into(), + Recipe { 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() }), + ("ItemPipeGasMixer".into(), Recipe { 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() }), ("ItemPipeHeater".into(), Recipe { + 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() }), ("ItemPipeIgniter" + .into(), Recipe { 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() }), ("ItemPipeLabel".into(), Recipe + { 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() }), + ("ItemPipeMeter".into(), Recipe { 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() }), + ("ItemPipeValve".into(), Recipe { 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() }), + ("ItemPipeVolumePump".into(), Recipe { 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() }), ("ItemWallCooler" + .into(), Recipe { 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() }), + ("ItemWallHeater".into(), Recipe { 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() }), ("ItemWaterBottle".into(), Recipe { + 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() }), ("ItemWaterPipeDigitalValve".into(), + Recipe { 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() }), + ("ItemWaterPipeMeter".into(), Recipe { 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() }), ("ItemWaterWallCooler".into(), Recipe { 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() }) + ] + .into_iter() + .collect(), + }), memory: MemoryInfo { instructions: Some( vec![ @@ -39617,6 +42365,282 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), processed_reagents: vec![].into_iter().collect(), }, + fabricator_info: Some(FabricatorInfo { + tier: MachineTier::Undefined, + recipes: vec![ + ("ItemKitAccessBridge".into(), Recipe { 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() }), + ("ItemKitChuteUmbilical".into(), Recipe { 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() }), ("ItemKitElectricUmbilical".into(), + Recipe { 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() }), ("ItemKitFuselage".into(), + Recipe { 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() }), ("ItemKitGasUmbilical".into(), Recipe { 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() }), ("ItemKitGovernedGasRocketEngine" + .into(), Recipe { 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() }), + ("ItemKitLaunchMount".into(), Recipe { 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() }), + ("ItemKitLaunchTower".into(), Recipe { 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() }), + ("ItemKitLiquidUmbilical".into(), Recipe { 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() }), ("ItemKitPressureFedGasEngine".into(), + Recipe { 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() }), ("ItemKitPressureFedLiquidEngine" + .into(), Recipe { 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() }), ("ItemKitPumpedLiquidEngine".into(), Recipe { 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() }), + ("ItemKitRocketAvionics".into(), Recipe { 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() }), ("ItemKitRocketBattery".into(), Recipe + { 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() }), + ("ItemKitRocketCargoStorage".into(), Recipe { 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() }), + ("ItemKitRocketCelestialTracker".into(), Recipe { 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() }), ("ItemKitRocketCircuitHousing".into(), + Recipe { 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() }), + ("ItemKitRocketDatalink".into(), Recipe { 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() }), ("ItemKitRocketGasFuelTank".into(), + Recipe { 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() }), ("ItemKitRocketLiquidFuelTank" + .into(), Recipe { 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() }), ("ItemKitRocketMiner".into(), + Recipe { 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() }), ("ItemKitRocketScanner".into(), Recipe + { 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() }), ("ItemKitRocketTransformerSmall" + .into(), Recipe { 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() }), ("ItemKitStairwell".into(), + Recipe { 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() }), ("ItemRocketMiningDrillHead".into(), Recipe { 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() }), + ("ItemRocketMiningDrillHeadDurable".into(), Recipe { 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() }), + ("ItemRocketMiningDrillHeadHighSpeedIce".into(), Recipe { 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() }), + ("ItemRocketMiningDrillHeadHighSpeedMineral".into(), Recipe { + 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() }), ("ItemRocketMiningDrillHeadIce" + .into(), Recipe { 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() }), + ("ItemRocketMiningDrillHeadLongTerm".into(), Recipe { 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() }), ("ItemRocketMiningDrillHeadMineral" + .into(), Recipe { 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() }), ("ItemRocketScanningHead" + .into(), Recipe { 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() }) + ] + .into_iter() + .collect(), + }), memory: MemoryInfo { instructions: Some( vec![ @@ -40209,6 +43233,209 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), processed_reagents: vec![].into_iter().collect(), }, + fabricator_info: Some(FabricatorInfo { + tier: MachineTier::Undefined, + recipes: vec![ + ("AccessCardBlack".into(), Recipe { 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() }), ("AccessCardBlue".into(), Recipe { + 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() }), ("AccessCardBrown" + .into(), Recipe { 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() }), + ("AccessCardGray".into(), Recipe { 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() }), ("AccessCardGreen".into(), Recipe { + 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() }), ("AccessCardKhaki" + .into(), Recipe { 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() }), + ("AccessCardOrange".into(), Recipe { 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() }), ("AccessCardPink".into(), Recipe { + 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() }), ("AccessCardPurple" + .into(), Recipe { 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() }), + ("AccessCardRed".into(), Recipe { 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() }), ("AccessCardWhite".into(), Recipe { + 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() }), ("AccessCardYellow" + .into(), Recipe { 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() }), + ("CartridgeAccessController".into(), Recipe { 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() }), ("FireArmSMG".into(), + Recipe { 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() }), ("Handgun".into(), Recipe { + 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() }), ("HandgunMagazine".into(), Recipe { + 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() }), ("ItemAmmoBox".into(), + Recipe { 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() }), + ("ItemExplosive".into(), Recipe { 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 : 5i64, reagents : vec![("Copper" + .into(), 5f64), ("Electrum".into(), 1f64), ("Gold".into(), 5f64), + ("Lead".into(), 10f64), ("Steel".into(), 7f64)] .into_iter() + .collect() }), ("ItemGrenade".into(), Recipe { 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() + }), ("ItemMiningCharge".into(), Recipe { tier : + MachineTier::TierOne, time : 7f64, 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 : 4i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Iron" + .into(), 7f64), ("Lead".into(), 10f64)] .into_iter().collect() + }), ("SMGMagazine".into(), Recipe { 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() }), ("WeaponPistolEnergy".into(), Recipe { + 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() }), ("WeaponRifleEnergy".into(), Recipe { 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() + }) + ] + .into_iter() + .collect(), + }), memory: MemoryInfo { instructions: Some( vec![ @@ -42116,6 +45343,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), processed_reagents: vec![].into_iter().collect(), }, + fabricator_info: None, } .into(), ), @@ -43735,6 +46963,814 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), processed_reagents: vec![].into_iter().collect(), }, + fabricator_info: Some(FabricatorInfo { + tier: MachineTier::Undefined, + recipes: vec![ + ("FlareGun".into(), Recipe { 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() }), + ("ItemAngleGrinder".into(), Recipe { 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() }), + ("ItemArcWelder".into(), Recipe { 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() }), + ("ItemBasketBall".into(), Recipe { 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() }), ("ItemBeacon".into(), + Recipe { 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() }), + ("ItemChemLightBlue".into(), Recipe { 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() }), + ("ItemChemLightGreen".into(), Recipe { 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() }), + ("ItemChemLightRed".into(), Recipe { 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() }), ("ItemChemLightWhite" + .into(), Recipe { 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() }), ("ItemChemLightYellow".into(), Recipe { 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() }), + ("ItemClothingBagOveralls_Aus".into(), Recipe { 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() }), + ("ItemClothingBagOveralls_Brazil".into(), Recipe { 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() }), + ("ItemClothingBagOveralls_Canada".into(), Recipe { 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() }), + ("ItemClothingBagOveralls_China".into(), Recipe { 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() }), + ("ItemClothingBagOveralls_EU".into(), Recipe { 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() }), + ("ItemClothingBagOveralls_France".into(), Recipe { 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() }), + ("ItemClothingBagOveralls_Germany".into(), Recipe { 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() }), + ("ItemClothingBagOveralls_Japan".into(), Recipe { 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() }), + ("ItemClothingBagOveralls_Korea".into(), Recipe { 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() }), + ("ItemClothingBagOveralls_NZ".into(), Recipe { 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() }), + ("ItemClothingBagOveralls_Russia".into(), Recipe { 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() }), + ("ItemClothingBagOveralls_SouthAfrica".into(), Recipe { 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() }), + ("ItemClothingBagOveralls_UK".into(), Recipe { 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() }), + ("ItemClothingBagOveralls_US".into(), Recipe { 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() }), + ("ItemClothingBagOveralls_Ukraine".into(), Recipe { 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() }), + ("ItemCrowbar".into(), Recipe { 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() }), ("ItemDirtCanister".into(), + Recipe { 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() }), ("ItemDisposableBatteryCharger".into(), Recipe { + 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() }), ("ItemDrill".into(), + Recipe { 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() }), ("ItemDuctTape".into(), Recipe + { 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() }), + ("ItemEvaSuit".into(), Recipe { 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() }), + ("ItemFlagSmall".into(), Recipe { 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() }), ("ItemFlashlight".into(), + Recipe { 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() }), ("ItemGlasses".into(), Recipe { + 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() }), ("ItemHardBackpack".into(), Recipe { + 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() }), + ("ItemHardJetpack".into(), Recipe { 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() }), + ("ItemHardMiningBackPack".into(), Recipe { 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() }), ("ItemHardSuit".into(), Recipe { 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() }), + ("ItemHardsuitHelmet".into(), Recipe { 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() }), + ("ItemIgniter".into(), Recipe { 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() }), ("ItemJetpackBasic" + .into(), Recipe { 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() }), + ("ItemKitBasket".into(), Recipe { 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() }), + ("ItemLabeller".into(), Recipe { 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() }), + ("ItemMKIIAngleGrinder".into(), Recipe { 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() }), ("ItemMKIIArcWelder" + .into(), Recipe { 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() }), ("ItemMKIICrowbar".into(), + Recipe { 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() }), ("ItemMKIIDrill".into(), Recipe + { 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() }), ("ItemMKIIDuctTape" + .into(), Recipe { 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() }), ("ItemMKIIMiningDrill".into(), + Recipe { 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() }), + ("ItemMKIIScrewdriver".into(), Recipe { 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() }), ("ItemMKIIWireCutters".into(), Recipe + { 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() }), ("ItemMKIIWrench".into(), Recipe { + 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() }), ("ItemMarineBodyArmor".into(), Recipe + { 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() }), + ("ItemMarineHelmet".into(), Recipe { 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() }), ("ItemMiningBackPack".into(), Recipe { + 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() }), + ("ItemMiningBelt".into(), Recipe { 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() }), ("ItemMiningBeltMKII".into(), + Recipe { 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() }), ("ItemMiningDrill" + .into(), Recipe { 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() }), ("ItemMiningDrillHeavy".into(), + Recipe { 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() }), ("ItemMiningDrillPneumatic".into(), + Recipe { 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() }), + ("ItemMkIIToolbelt".into(), Recipe { 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() }), + ("ItemNVG".into(), Recipe { 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() }), ("ItemPickaxe".into(), Recipe { + 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() }), ("ItemPlantSampler".into(), Recipe { 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() }), ("ItemRemoteDetonator".into(), Recipe { tier : + MachineTier::TierOne, time : 4.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(), 3f64)] .into_iter() + .collect() }), ("ItemReusableFireExtinguisher".into(), Recipe { + 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() }), + ("ItemRoadFlare".into(), Recipe { 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() }), ("ItemScrewdriver".into(), + Recipe { 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() }), ("ItemSensorLenses".into(), Recipe { 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() }), + ("ItemSensorProcessingUnitCelestialScanner".into(), Recipe { 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() + }), ("ItemSensorProcessingUnitMesonScanner".into(), Recipe { 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() + }), ("ItemSensorProcessingUnitOreScanner".into(), Recipe { 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() + }), ("ItemSpaceHelmet".into(), Recipe { 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() }), ("ItemSpacepack".into(), Recipe { 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() }), ("ItemSprayCanBlack".into(), Recipe { 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() }), + ("ItemSprayCanBlue".into(), Recipe { 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() }), ("ItemSprayCanBrown".into(), + Recipe { 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() }), ("ItemSprayCanGreen".into(), Recipe { 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() }), + ("ItemSprayCanGrey".into(), Recipe { 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() }), ("ItemSprayCanKhaki".into(), + Recipe { 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() }), ("ItemSprayCanOrange".into(), Recipe { 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() }), + ("ItemSprayCanPink".into(), Recipe { 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() }), ("ItemSprayCanPurple".into(), + Recipe { 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() }), ("ItemSprayCanRed".into(), Recipe { 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() }), + ("ItemSprayCanWhite".into(), Recipe { 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() }), + ("ItemSprayCanYellow".into(), Recipe { 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() }), + ("ItemSprayGun".into(), Recipe { 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() }), ("ItemTerrainManipulator" + .into(), Recipe { 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() }), + ("ItemToolBelt".into(), Recipe { 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() }), ("ItemWearLamp".into(), Recipe + { 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() }), ("ItemWeldingTorch".into(), Recipe { 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() }), ("ItemWireCutters".into(), Recipe { 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() }), + ("ItemWrench".into(), Recipe { 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() }), ("ToyLuna".into(), Recipe { + 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() }), ("UniformCommander".into(), Recipe { 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() }), + ("UniformMarine".into(), Recipe { 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() }), + ("UniformOrangeJumpSuit".into(), Recipe { 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() }), + ("WeaponPistolEnergy".into(), Recipe { 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() }), ("WeaponRifleEnergy".into(), Recipe { 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() + }) + ] + .into_iter() + .collect(), + }), memory: MemoryInfo { instructions: Some( vec![ diff --git a/stationeers_data/src/enums/basic_enums.rs b/stationeers_data/src/enums/basic.rs similarity index 99% rename from stationeers_data/src/enums/basic_enums.rs rename to stationeers_data/src/enums/basic.rs index 53b0e13..5f29bb6 100644 --- a/stationeers_data/src/enums/basic_enums.rs +++ b/stationeers_data/src/enums/basic.rs @@ -1,6 +1,6 @@ use serde_derive::{Deserialize, Serialize}; use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; -use super::script_enums::{LogicSlotType, LogicType}; +use super::script::{LogicSlotType, LogicType}; #[derive( Debug, Display, diff --git a/stationeers_data/src/enums/script_enums.rs b/stationeers_data/src/enums/script.rs similarity index 100% rename from stationeers_data/src/enums/script_enums.rs rename to stationeers_data/src/enums/script.rs diff --git a/stationeers_data/src/lib.rs b/stationeers_data/src/lib.rs index a140cca..63cd167 100644 --- a/stationeers_data/src/lib.rs +++ b/stationeers_data/src/lib.rs @@ -4,10 +4,10 @@ pub mod templates; pub mod enums { use serde_derive::{Deserialize, Serialize}; use std::fmt::Display; - use strum::{AsRefStr, EnumIter, EnumString}; + use strum::{AsRefStr, EnumIter, EnumString, FromRepr}; - pub mod basic_enums; - pub mod script_enums; + pub mod basic; + pub mod script; pub mod prefabs; #[derive(Debug)] @@ -46,6 +46,7 @@ pub mod enums { Deserialize, EnumIter, AsRefStr, + FromRepr, EnumString, )] pub enum ConnectionType { @@ -77,6 +78,7 @@ pub mod enums { Deserialize, EnumIter, AsRefStr, + FromRepr, EnumString, )] pub enum ConnectionRole { @@ -89,16 +91,45 @@ pub mod enums { #[default] None, } + + + #[derive( + Debug, + Default, + Clone, + Copy, + PartialEq, + PartialOrd, + Eq, + Ord, + Hash, + Serialize, + Deserialize, + EnumIter, + AsRefStr, + FromRepr, + EnumString, + )] + #[repr(u32)] + pub enum MachineTier { + #[default] + Undefined = 0, + TierOne = 1, + TierTwo = 2, + TierThree = 3, + #[serde(other)] + Max, + } } #[must_use] pub fn build_prefab_database() -> Option> { #[cfg(feature = "prefab_database")] - let _map = Some(database::build_prefab_database()); + let map = Some(database::build_prefab_database()); #[cfg(not(feature = "prefab_database"))] - let _map = None; + let map = None; - _map + map } #[cfg(feature = "prefab_database")] diff --git a/stationeers_data/src/templates.rs b/stationeers_data/src/templates.rs index 34c468b..ff3279d 100644 --- a/stationeers_data/src/templates.rs +++ b/stationeers_data/src/templates.rs @@ -1,9 +1,9 @@ use std::collections::BTreeMap; use crate::enums::{ - basic_enums::{Class as SlotClass, GasType, SortingClass}, - script_enums::{LogicSlotType, LogicType}, - ConnectionRole, ConnectionType, MemoryAccess, + basic::{Class as SlotClass, GasType, SortingClass}, + script::{LogicSlotType, LogicType}, + ConnectionRole, ConnectionType, MachineTier, MemoryAccess, }; use serde_derive::{Deserialize, Serialize}; @@ -219,6 +219,39 @@ pub struct ConsumerInfo { pub processed_reagents: Vec, } +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +pub struct RecipeRange { + pub start: f64, + pub stop: f64, + pub is_valid: bool, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +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)] +pub struct Recipe { + 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)] +pub struct FabricatorInfo { + pub tier: MachineTier, + pub recipes: BTreeMap, +} + #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct StructureInfo { pub small_grid: bool, @@ -303,6 +336,7 @@ pub struct StructureLogicDeviceConsumerTemplate { pub slots: Vec, pub device: DeviceInfo, pub consumer_info: ConsumerInfo, + pub fabricator_info: Option, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] @@ -338,6 +372,7 @@ pub struct StructureLogicDeviceConsumerMemoryTemplate { pub slots: Vec, pub device: DeviceInfo, pub consumer_info: ConsumerInfo, + pub fabricator_info: Option, pub memory: MemoryInfo, } diff --git a/xtask/src/generate.rs b/xtask/src/generate.rs index a7ece17..ce26041 100644 --- a/xtask/src/generate.rs +++ b/xtask/src/generate.rs @@ -49,7 +49,7 @@ pub fn generate( eprintln!("generating enums..."); } - let enums_files = enums::generate_enums(&pedia, &enums, workspace)?; + let enums_files = enums::generate(&pedia, &enums, workspace)?; eprintln!("Formatting generated files..."); for file in &enums_files { prepend_generated_comment_and_format(file)?; diff --git a/xtask/src/generate/database.rs b/xtask/src/generate/database.rs index cb3fd73..ac03063 100644 --- a/xtask/src/generate/database.rs +++ b/xtask/src/generate/database.rs @@ -15,13 +15,12 @@ use crate::{ }; use stationeers_data::{ - enums::MemoryAccess, templates::{ - ConnectionInfo, ConsumerInfo, DeviceInfo, Instruction, InternalAtmoInfo, + ConnectionInfo, ConsumerInfo, DeviceInfo, FabricatorInfo, Instruction, InternalAtmoInfo, ItemCircuitHolderTemplate, ItemConsumerTemplate, ItemInfo, ItemLogicMemoryTemplate, ItemLogicTemplate, ItemSlotsTemplate, ItemSuitCircuitHolderTemplate, ItemSuitLogicTemplate, - ItemSuitTemplate, ItemTemplate, LogicInfo, MemoryInfo, ObjectTemplate, PrefabInfo, - SlotInfo, StructureCircuitHolderTemplate, StructureInfo, + ItemSuitTemplate, ItemTemplate, LogicInfo, MemoryInfo, ObjectTemplate, PrefabInfo, Recipe, + RecipeGasMix, RecipeRange, SlotInfo, StructureCircuitHolderTemplate, StructureInfo, StructureLogicDeviceConsumerMemoryTemplate, StructureLogicDeviceConsumerTemplate, StructureLogicDeviceMemoryTemplate, StructureLogicDeviceTemplate, StructureLogicTemplate, StructureSlotsTemplate, StructureTemplate, SuitInfo, ThermalInfo, @@ -203,8 +202,7 @@ pub fn generate_database( // // https://regex101.com/r/V2tXIa/1 // - let null_matcher = regex::Regex::new(r#"(?:(?:,\n)\s*"\w+":\snull)+(,?)"#) - .unwrap(); + let null_matcher = regex::Regex::new(r#"(?:(?:,\n)\s*"\w+":\snull)+(,?)"#).unwrap(); let json = null_matcher.replace_all(&json, "$1"); write!(&mut database_file, "{json}")?; database_file.flush()?; @@ -733,6 +731,7 @@ fn generate_templates(pedia: &Stationpedia) -> Vec { slots: slot_inserts_to_info(slot_inserts), device: device.into(), consumer_info: consumer.into(), + fabricator_info: device.fabricator.as_ref().map(Into::into), }, )); // println!("Structure") @@ -805,6 +804,7 @@ fn generate_templates(pedia: &Stationpedia) -> Vec { slots: slot_inserts_to_info(slot_inserts), device: device.into(), consumer_info: consumer.into(), + fabricator_info: device.fabricator.as_ref().map(Into::into), memory: memory.into(), }, )); @@ -1052,3 +1052,88 @@ impl From<&stationpedia::ResourceConsumer> for ConsumerInfo { } } } + +impl From<&stationpedia::Fabricator> for FabricatorInfo { + fn from(value: &stationpedia::Fabricator) -> Self { + FabricatorInfo { + tier: value + .tier_name + .parse() + .unwrap_or_else(|_| panic!("Unknown MachineTier {}", value.tier_name)), + recipes: value + .recipes + .iter() + .map(|(key, val)| (key.clone(), val.into())) + .collect(), + } + } +} + +impl From<&stationpedia::Recipe> for Recipe { + fn from(value: &stationpedia::Recipe) -> Self { + Recipe { + tier: value + .tier_name + .parse() + .unwrap_or_else(|_| panic!("Unknown MachineTier {}", value.tier_name)), + time: value.time, + energy: value.energy, + temperature: (&value.temperature).into(), + pressure: (&value.pressure).into(), + required_mix: (&value.required_mix).into(), + count_types: value.count_types, + reagents: value + .reagents + .iter() + .filter_map(|(key, val)| { + if *val == 0.0 { + None + } else { + Some((key.clone(), *val)) + } + }) + .collect(), + } + } +} + +impl From<&stationpedia::RecipeTemperature> for RecipeRange { + fn from(value: &stationpedia::RecipeTemperature) -> Self { + RecipeRange { + start: value.start, + stop: value.stop, + is_valid: value.is_valid, + } + } +} + +impl From<&stationpedia::RecipePressure> for RecipeRange { + fn from(value: &stationpedia::RecipePressure) -> Self { + RecipeRange { + start: value.start, + stop: value.stop, + is_valid: value.is_valid, + } + } +} + +impl From<&stationpedia::RecipeGasMix> for RecipeGasMix { + fn from(value: &stationpedia::RecipeGasMix) -> Self { + RecipeGasMix { + rule: value.rule, + is_any: value.is_any, + is_any_to_remove: value.is_any_to_remove, + reagents: value + .reagents + .iter() + .filter_map(|(key, val)| { + if *val == 0.0 { + None + } else { + Some((key.clone(), *val)) + } + }) + .collect(), + } + } +} diff --git a/xtask/src/generate/enums.rs b/xtask/src/generate/enums.rs index 7f38d6f..32a1d43 100644 --- a/xtask/src/generate/enums.rs +++ b/xtask/src/generate/enums.rs @@ -10,7 +10,7 @@ use std::{ use proc_macro2::{Ident, Span, TokenStream}; use quote::quote; -pub fn generate_enums( +pub fn generate( stationpedia: &crate::stationpedia::Stationpedia, enums: &crate::enums::Enums, workspace: &std::path::Path, @@ -28,14 +28,14 @@ pub fn generate_enums( .collect::>(); let mut writer = - std::io::BufWriter::new(std::fs::File::create(enums_path.join("script_enums.rs"))?); + std::io::BufWriter::new(std::fs::File::create(enums_path.join("script.rs"))?); write_repr_enum_use_header(&mut writer)?; for enm in enums.script_enums.values() { write_enum_listing(&mut writer, enm)?; } let mut writer = - std::io::BufWriter::new(std::fs::File::create(enums_path.join("basic_enums.rs"))?); + std::io::BufWriter::new(std::fs::File::create(enums_path.join("basic.rs"))?); write_repr_enum_use_header(&mut writer)?; let script_enums_in_basic = enums .script_enums @@ -75,8 +75,8 @@ pub fn generate_enums( write_repr_enum(&mut writer, "StationpediaPrefab", &prefabs, true)?; Ok(vec![ - enums_path.join("script_enums.rs"), - enums_path.join("basic_enums.rs"), + enums_path.join("script.rs"), + enums_path.join("basic.rs"), enums_path.join("prefabs.rs"), ]) } @@ -116,7 +116,7 @@ fn write_enum_aggragate_mod( }; let display_pat = format!("{name}{display_sep}{{}}"); let name: TokenStream = if name == "_unnamed" { - "".to_string() + String::new() } else { name.clone() } @@ -236,7 +236,7 @@ pub fn write_enum_listing( let variant = ReprEnumVariant { value: var.value as u8, deprecated: var.deprecated, - props: vec![("docs".to_owned(), var.description.to_owned())], + props: vec![("docs".to_owned(), var.description.clone())], }; (n.clone(), variant) }) @@ -255,7 +255,7 @@ pub fn write_enum_listing( let variant = ReprEnumVariant { value: var.value as u16, deprecated: var.deprecated, - props: vec![("docs".to_owned(), var.description.to_owned())], + props: vec![("docs".to_owned(), var.description.clone())], }; (n.clone(), variant) }) @@ -269,7 +269,7 @@ pub fn write_enum_listing( let variant = ReprEnumVariant { value: var.value as u32, deprecated: var.deprecated, - props: vec![("docs".to_owned(), var.description.to_owned())], + props: vec![("docs".to_owned(), var.description.clone())], }; (n.clone(), variant) }) @@ -283,7 +283,7 @@ pub fn write_enum_listing( let variant = ReprEnumVariant { value: var.value as i32, deprecated: var.deprecated, - props: vec![("docs".to_owned(), var.description.to_owned())], + props: vec![("docs".to_owned(), var.description.clone())], }; (n.clone(), variant) }) @@ -297,7 +297,7 @@ pub fn write_enum_listing( let variant = ReprEnumVariant { value: var.value as i32, deprecated: var.deprecated, - props: vec![("docs".to_owned(), var.description.to_owned())], + props: vec![("docs".to_owned(), var.description.clone())], }; (n.clone(), variant) }) @@ -344,7 +344,7 @@ fn write_repr_basic_use_header( write!( writer, "{}", - quote! {use super::script_enums::{ #(#enums),*};}, + quote! {use super::script::{ #(#enums),*};}, )?; Ok(()) } diff --git a/xtask/src/stationpedia.rs b/xtask/src/stationpedia.rs index c17c25c..ccbb353 100644 --- a/xtask/src/stationpedia.rs +++ b/xtask/src/stationpedia.rs @@ -1,5 +1,6 @@ use serde_derive::{Deserialize, Serialize}; use serde_with::{serde_as, DisplayFromStr}; +use stationeers_data::enums::MachineTier; use std::collections::BTreeMap; #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] @@ -132,15 +133,6 @@ pub struct BuildState { pub machine_tier: Option, } -#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -pub enum MachineTier { - Undefined, - TierOne, - TierTwo, - TierThree, - Max, -} - #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct Tool { #[serde(rename = "IsTool", default)] @@ -354,7 +346,7 @@ pub struct Device { #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct Fabricator { #[serde(rename = "Tier")] - tier: u32, + pub tier: u32, #[serde(rename = "TierName")] pub tier_name: String, #[serde(rename = "Recipes", default)] From d70d3a243106ad69ec56032c371f41b16bbc2e5e Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sun, 26 May 2024 00:54:19 -0700 Subject: [PATCH 28/50] refactor(vm): generic circuit holder + suit impl --- ic10emu/src/network.rs | 2 +- ic10emu/src/vm.rs | 18 +- ic10emu/src/vm/object.rs | 26 + ic10emu/src/vm/object/generic/macros.rs | 58 ++ ic10emu/src/vm/object/generic/structs.rs | 242 +++++-- ic10emu/src/vm/object/generic/traits.rs | 629 +++++++++++++++++- ic10emu/src/vm/object/humans.rs | 219 ++++++ ic10emu/src/vm/object/macros.rs | 103 ++- ic10emu/src/vm/object/stationpedia.rs | 6 +- .../stationpedia/structs/circuit_holder.rs | 12 +- ic10emu/src/vm/object/templates.rs | 51 +- ic10emu/src/vm/object/traits.rs | 56 +- 12 files changed, 1302 insertions(+), 120 deletions(-) create mode 100644 ic10emu/src/vm/object/humans.rs diff --git a/ic10emu/src/network.rs b/ic10emu/src/network.rs index cafbbe1..43d5a5a 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -139,7 +139,7 @@ impl Connection { pub fn get_network(&self) -> Option { match self { - Self::CableNetwork { net, .. } => net.clone(), + Self::CableNetwork { net, .. } => *net, _ => None, } } diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index 2998d28..81fe336 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -1141,7 +1141,7 @@ impl VMTransaction { role: ConnectionRole::None, } = conn { - if let Some(net) = self.networks.get_mut(&net_id) { + 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), @@ -1159,19 +1159,19 @@ impl VMTransaction { } pub fn finialize(&mut self) -> Result<(), VMError> { - for (child, (slot, parent)) in self.object_parents { + for (child, (slot, parent)) in &self.object_parents { let child_obj = self .objects - .get(&child) - .ok_or(VMError::MissingChild(child))?; - let child_obj_ref = child_obj.borrow_mut(); + .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))?; + .ok_or(VMError::NotParentable(*child))?; item.set_parent_slot(Some(ParentSlotInfo { - slot: slot as usize, - parent, - })) + slot: *slot as usize, + parent: *parent, + })); } Ok(()) } diff --git a/ic10emu/src/vm/object.rs b/ic10emu/src/vm/object.rs index 3170533..44edeb9 100644 --- a/ic10emu/src/vm/object.rs +++ b/ic10emu/src/vm/object.rs @@ -9,6 +9,7 @@ use serde_derive::{Deserialize, Serialize}; pub mod errors; pub mod generic; +pub mod humans; pub mod macros; pub mod stationpedia; pub mod templates; @@ -122,3 +123,28 @@ pub struct Slot { pub writeable_logic: Vec, pub occupant: Option, } + +impl Slot { + #[must_use] + pub fn new(parent: ObjectID, index: usize, name: String, typ: SlotClass) -> Self { + Slot { + parent, + index, + name, + typ, + 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, + } + } +} diff --git a/ic10emu/src/vm/object/generic/macros.rs b/ic10emu/src/vm/object/generic/macros.rs index c536a92..23d6985 100644 --- a/ic10emu/src/vm/object/generic/macros.rs +++ b/ic10emu/src/vm/object/generic/macros.rs @@ -1,3 +1,45 @@ +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("GWTherml::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] )* @@ -152,3 +194,19 @@ macro_rules! GWItem { }; } 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; diff --git a/ic10emu/src/vm/object/generic/structs.rs b/ic10emu/src/vm/object/generic/structs.rs index 401dec1..85a11ca 100644 --- a/ic10emu/src/vm/object/generic/structs.rs +++ b/ic10emu/src/vm/object/generic/structs.rs @@ -10,12 +10,18 @@ use crate::{ use macro_rules_attribute::derive; use stationeers_data::{ enums::script::LogicType, - templates::{ConsumerInfo, DeviceInfo, FabricatorInfo, InternalAtmoInfo, ItemInfo, ThermalInfo}, + templates::{ + ConsumerInfo, DeviceInfo, FabricatorInfo, InternalAtmoInfo, ItemInfo, SuitInfo, ThermalInfo, + }, }; use std::{collections::BTreeMap, rc::Rc}; -#[derive(ObjectInterface!, GWStructure!)] -#[custom(implements(Object { Structure }))] +#[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, @@ -30,8 +36,12 @@ pub struct Generic { pub small_grid: bool, } -#[derive(ObjectInterface!, GWStructure!, GWStorage!)] -#[custom(implements(Object { Structure, Storage }))] +#[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, @@ -47,8 +57,16 @@ pub struct GenericStorage { pub slots: Vec, } -#[derive(ObjectInterface!, GWStructure!, GWStorage!, GWLogicable!)] -#[custom(implements(Object { Structure, Storage, Logicable }))] +#[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, @@ -66,8 +84,17 @@ pub struct GenericLogicable { pub modes: Option>, } -#[derive(ObjectInterface!, GWStructure!, GWStorage!, GWLogicable!, GWDevice!)] -#[custom(implements(Object { Structure, Storage, Logicable, Device }))] +#[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, @@ -89,8 +116,17 @@ pub struct GenericLogicableDevice { pub reagents: Option>, } -#[derive(ObjectInterface!, GWStructure!, GWStorage!, GWLogicable!, GWDevice!)] -#[custom(implements(Object { Structure, Storage, Logicable, Device }))] +#[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 GenericCircuitHolder { #[custom(object_id)] pub id: ObjectID, @@ -112,8 +148,17 @@ pub struct GenericCircuitHolder { pub reagents: Option>, } -#[derive(ObjectInterface!, GWStructure!, GWStorage!, GWLogicable!, GWDevice!)] -#[custom(implements(Object { Structure, Storage, Logicable, Device }))] +#[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 GenericLogicableDeviceConsumer { #[custom(object_id)] pub id: ObjectID, @@ -136,8 +181,18 @@ pub struct GenericLogicableDeviceConsumer { pub consumer_info: ConsumerInfo, } -#[derive(ObjectInterface!, GWStructure!, GWStorage!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] -#[custom(implements(Object { Structure, Storage, Logicable, Device, MemoryReadable }))] +#[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, @@ -160,8 +215,17 @@ pub struct GenericLogicableDeviceMemoryReadable { pub memory: Vec, } -#[derive(ObjectInterface!, GWStructure!, GWStorage!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] -#[custom(implements(Object { Structure, Storage, Logicable, Device, MemoryReadable }))] +#[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 GenericLogicableDeviceConsumerMemoryReadable { #[custom(object_id)] pub id: ObjectID, @@ -186,8 +250,17 @@ pub struct GenericLogicableDeviceConsumerMemoryReadable { pub memory: Vec, } -#[derive(ObjectInterface!, GWStructure!, GWStorage!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] -#[custom(implements(Object { Structure, Storage, Logicable, Device, MemoryReadable, MemoryWritable }))] +#[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, @@ -210,9 +283,17 @@ pub struct GenericLogicableDeviceMemoryReadWriteable { pub memory: Vec, } - -#[derive(ObjectInterface!, GWStructure!, GWStorage!, GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable!)] -#[custom(implements(Object { Structure, Storage, Logicable, Device, MemoryReadable, MemoryWritable }))] +#[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 GenericLogicableDeviceConsumerMemoryReadWriteable { #[custom(object_id)] pub id: ObjectID, @@ -237,8 +318,12 @@ pub struct GenericLogicableDeviceConsumerMemoryReadWriteable { pub memory: Vec, } -#[derive(ObjectInterface!, GWItem!)] -#[custom(implements(Object { Item }))] +#[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, @@ -255,8 +340,12 @@ pub struct GenericItem { pub damage: Option, } -#[derive(ObjectInterface!, GWItem!, GWStorage! )] -#[custom(implements(Object { Item, Storage }))] +#[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, @@ -274,8 +363,12 @@ pub struct GenericItemStorage { pub slots: Vec, } -#[derive(ObjectInterface!, GWItem!, GWStorage! )] -#[custom(implements(Object { Item, Storage }))] +#[derive(ObjectInterface!, GWThermal!, GWInternalAtmo!, GWItem!, GWStorage! )] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Item, Storage +}))] pub struct GenericItemConsumer { #[custom(object_id)] pub id: ObjectID, @@ -294,8 +387,16 @@ pub struct GenericItemConsumer { pub consumer_info: ConsumerInfo, } -#[derive(ObjectInterface!, GWItem!, GWStorage!, GWLogicable! )] -#[custom(implements(Object { Item, Storage, Logicable }))] +#[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, @@ -315,8 +416,17 @@ pub struct GenericItemLogicable { pub modes: Option>, } -#[derive(ObjectInterface!, GWItem!, GWStorage!, GWLogicable!, GWMemoryReadable! )] -#[custom(implements(Object { Item, Storage, Logicable, MemoryReadable }))] +#[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, @@ -337,8 +447,17 @@ pub struct GenericItemLogicableMemoryReadable { pub memory: Vec, } -#[derive(ObjectInterface!, GWItem!, GWStorage!, GWLogicable!, GWMemoryReadable!, GWMemoryWritable! )] -#[custom(implements(Object { Item, Storage, Logicable, MemoryReadable, MemoryWritable }))] +#[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, @@ -359,8 +478,16 @@ pub struct GenericItemLogicableMemoryReadWriteable { pub memory: Vec, } -#[derive(ObjectInterface!, GWItem!, GWStorage!, GWLogicable! )] -#[custom(implements(Object { Item, Storage, Logicable }))] +#[derive( + ObjectInterface!, + GWThermal!, GWInternalAtmo!, + GWItem!, GWStorage!, GWLogicable! +)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Item, Storage, Logicable +}))] pub struct GenericItemCircuitHolder { #[custom(object_id)] pub id: ObjectID, @@ -380,9 +507,17 @@ pub struct GenericItemCircuitHolder { pub modes: Option>, } - -#[derive(ObjectInterface!, GWItem!, GWStorage!, GWLogicable!)] -#[custom(implements(Object { Item, Storage, Suit, Logicable }))] +#[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, @@ -398,12 +533,23 @@ pub struct GenericItemSuitLogic { pub parent_slot: Option, pub damage: Option, pub slots: Vec, + pub suit_info: SuitInfo, pub fields: BTreeMap, pub modes: Option>, } -#[derive(ObjectInterface!, GWItem!, GWStorage!, GWLogicable!, GWMemoryReadable!, GWMemoryWritable!)] -#[custom(implements(Object { Item, Storage, Suit, Logicable, MemoryReadable, MemoryWritable }))] +#[derive( + ObjectInterface!, + GWThermal!, GWInternalAtmo!, + GWItem!, GWStorage!, GWLogicable!, + GWMemoryReadable!, GWMemoryWritable!, + GWSuit! +)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Item, Storage, Suit, Logicable, MemoryReadable, MemoryWritable +}))] pub struct GenericItemSuitCircuitHolder { #[custom(object_id)] pub id: ObjectID, @@ -419,13 +565,22 @@ pub struct GenericItemSuitCircuitHolder { pub parent_slot: Option, pub damage: Option, pub slots: Vec, + pub suit_info: SuitInfo, pub fields: BTreeMap, pub modes: Option>, pub memory: Vec, } -#[derive(ObjectInterface!, GWItem!, GWStorage! )] -#[custom(implements(Object { Item, Storage, Suit }))] +#[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, @@ -441,4 +596,5 @@ pub struct GenericItemSuit { pub parent_slot: Option, pub damage: Option, pub slots: Vec, + pub suit_info: SuitInfo, } diff --git a/ic10emu/src/vm/object/generic/traits.rs b/ic10emu/src/vm/object/generic/traits.rs index e0b9a8f..f721f56 100644 --- a/ic10emu/src/vm/object/generic/traits.rs +++ b/ic10emu/src/vm/object/generic/traits.rs @@ -3,7 +3,7 @@ use crate::{ vm::object::{ errors::{LogicError, MemoryError}, traits::*, - LogicField, MemoryAccess, ObjectID, Slot, + LogicField, MemoryAccess, ObjectID, Slot, VMObject, }, }; @@ -12,11 +12,36 @@ use stationeers_data::{ basic::{Class as SlotClass, GasType, SortingClass}, script::{LogicSlotType, LogicType}, }, - templates::{DeviceInfo, ItemInfo}, + templates::{DeviceInfo, InternalAtmoInfo, ItemInfo, SuitInfo, ThermalInfo}, }; use std::{collections::BTreeMap, usize}; 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 + } +} + +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 + } +} + pub trait GWStructure { fn small_grid(&self) -> bool; } @@ -169,6 +194,7 @@ impl Logicable for T { use LogicSlotType::*; let occupant = slot .occupant + .as_ref() .and_then(|info| self.get_vm().get_object(info.id)); match slt { Occupied => { @@ -406,7 +432,10 @@ impl Device for T { return Ok(()); } if slot.writeable_logic.contains(&slt) { - let occupant = slot.occupant.and_then(|info| vm.get_object(info.id)); + 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 @@ -539,4 +568,596 @@ impl Item for T { } } -pub trait GWCircuitHolder: Logicable {} +pub trait GWSuit: Storage { + fn suit_info(&self) -> &SuitInfo; +} + +impl Suit for T { + 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 hault_and_catch_fire_gw(&mut self); +} + +impl CircuitHolder for T +where + T: GWCircuitHolder, + Self: GWCircuitHolderWrapper, +{ + 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 hault_and_catch_fire(&mut self) { + self.hault_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.typ == SlotClass::ProgrammableChip) + .and_then(|slot| { + slot.occupant + .as_ref() + .and_then(|info| self.get_vm().get_object(info.id)) + }) + } + + fn hault_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.typ == SlotClass::ProgrammableChip) + .and_then(|slot| { + slot.occupant + .as_ref() + .and_then(|info| self.get_vm().get_object(info.id)) + }) + } + + fn hault_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.typ == SlotClass::ProgrammableChip) + .and_then(|slot| { + slot.occupant + .as_ref() + .and_then(|info| self.get_vm().get_object(info.id)) + }) + } + + fn hault_and_catch_fire_gw(&mut self) { + // TODO: do something here?? + } +} diff --git a/ic10emu/src/vm/object/humans.rs b/ic10emu/src/vm/object/humans.rs new file mode 100644 index 0000000..9132f61 --- /dev/null +++ b/ic10emu/src/vm/object/humans.rs @@ -0,0 +1,219 @@ +use macro_rules_attribute::derive; +use stationeers_data::enums::basic::Class as SlotClass; + +use crate::vm::{ + object::{ + macros::ObjectInterface, + traits::{Human, HumanRef, HumanRefMut, Object, Storage, StorageRef, StorageRefMut}, + Name, ObjectID, Slot, + }, + VM, +}; + +#[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 hydration: f32, + pub nutrition: f32, + pub oxygenation: f32, + pub food_quality: f32, + pub mood: f32, + pub hygine: 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, +} + +impl HumanPlayer { + pub fn new(id: ObjectID, vm: std::rc::Rc) -> Self { + HumanPlayer { + id, + prefab: Name::new(""), + name: Name::new(""), + vm, + hydration: 5.0, + nutrition: 5.0, + oxygenation: 1.0, + food_quality: 0.75, + mood: 1.0, + hygine: 1.0, + left_hand_slot: Slot::new(id, 0, "LeftHand".to_string(), SlotClass::None), + right_hand_slot: Slot::new(id, 1, "RightHand".to_string(), SlotClass::None), + suit_slot: Slot::new(id, 2, "Helmet".to_string(), SlotClass::Suit), + helmet_slot: Slot::new(id, 3, "LeftHand".to_string(), SlotClass::Helmet), + glasses_slot: Slot::new(id, 4, "LeftHand".to_string(), SlotClass::Glasses), + backpack_slot: Slot::new(id, 5, "LeftHand".to_string(), SlotClass::Back), + uniform_slot: Slot::new(id, 6, "LeftHand".to_string(), SlotClass::Uniform), + toolbelt_slot: Slot::new(id, 7, "LeftHand".to_string(), SlotClass::Belt), + } + } +} + +impl Storage for HumanPlayer { + fn get_slots(&self) -> Vec<&Slot> { + vec![ + &self.left_hand_slot, + &self.right_hand_slot, + &self.suit_slot, + &self.helmet_slot, + &self.glasses_slot, + &self.backpack_slot, + &self.uniform_slot, + &self.toolbelt_slot, + ] + } + + fn get_slots_mut(&mut self) -> Vec<&mut Slot> { + vec![ + &mut self.left_hand_slot, + &mut self.right_hand_slot, + &mut self.suit_slot, + &mut self.helmet_slot, + &mut self.glasses_slot, + &mut self.backpack_slot, + &mut self.uniform_slot, + &mut self.toolbelt_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.suit_slot), + 3 => Some(&self.helmet_slot), + 4 => Some(&self.glasses_slot), + 5 => Some(&self.backpack_slot), + 6 => Some(&self.uniform_slot), + 7 => Some(&self.toolbelt_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.suit_slot), + 3 => Some(&mut self.helmet_slot), + 4 => Some(&mut self.glasses_slot), + 5 => Some(&mut self.backpack_slot), + 6 => Some(&mut self.uniform_slot), + 7 => Some(&mut self.toolbelt_slot), + _ => None, + } + } +} + +impl Human for HumanPlayer { + fn get_hydration(&self) -> f32 { + self.hydration + } + fn set_hydration(&mut self, hydration: f32) { + self.hydration = hydration; + } + fn get_nutrition(&self) -> f32 { + self.nutrition + } + fn set_nutrition(&mut self, nutrition: f32) { + self.nutrition = nutrition; + } + fn get_oxygenation(&self) -> f32 { + self.oxygenation + } + fn set_oxygenation(&mut self, oxygenation: f32) { + self.oxygenation = oxygenation; + } + fn get_food_quality(&self) -> f32 { + self.food_quality + } + fn set_food_quality(&mut self, quality: f32) { + self.food_quality = quality; + } + fn get_mood(&self) -> f32 { + self.mood + } + fn set_mood(&mut self, mood: f32) { + self.mood = mood; + } + fn get_hygine(&self) -> f32 { + self.hygine + } + fn set_hygine(&mut self, hygine: f32) { + self.hygine = hygine; + } + fn is_artificial(&self) -> bool { + false + } + fn robot_battery(&self) -> Option { + None + } + 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 index 2712d3d..9a0f536 100644 --- a/ic10emu/src/vm/object/macros.rs +++ b/ic10emu/src/vm/object/macros.rs @@ -152,10 +152,49 @@ pub(crate) use object_trait; /// - `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),*; + @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; @@ -209,24 +248,16 @@ macro_rules! ObjectInterface { self } - paste::paste!{$( - #[inline(always)] - fn [](&self) -> Option<[<$trt Ref>]> { - Some(self) - } - - #[inline(always)] - fn [](&mut self) -> Option<[<$trt RefMut>]> { - Some(self) - } - )*} + $( + $crate::vm::object::macros::ObjectInterface!{@trt_cond_impl $trt $( => $trt_cond)? } + )* } }; { @body_final @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; + @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; @@ -235,7 +266,7 @@ macro_rules! ObjectInterface { $crate::vm::object::macros::ObjectInterface!{ @body_final @trt $trait_name; $struct; - @impls $($trt),*; + @impls $($trt $([ $trt_cond ])?),*; @id $id_field: $id_typ; @prefab $prefab_field: $prefab_typ; @name $name_field: $name_typ; @@ -245,7 +276,7 @@ macro_rules! ObjectInterface { { @body_final @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; + @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; @@ -254,7 +285,7 @@ macro_rules! ObjectInterface { $crate::vm::object::macros::ObjectInterface!{ @body_final @trt $trait_name; $struct; - @impls $($trt),*; + @impls $($trt $([ $trt_cond ])?),*; @id $id_field: $id_typ; @prefab $prefab_field: $prefab_typ; @name $name_field: $name_typ; @@ -264,7 +295,7 @@ macro_rules! ObjectInterface { { @body_final @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; + @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; @@ -273,7 +304,7 @@ macro_rules! ObjectInterface { $crate::vm::object::macros::ObjectInterface!{ @body_final @trt $trait_name; $struct; - @impls $($trt),*; + @impls $($trt $([ $trt_cond ])?),*; @id $id_field: $id_typ; @prefab $prefab_field: $prefab_typ; @name $name_field: $name_typ; @@ -283,7 +314,7 @@ macro_rules! ObjectInterface { { @body_final @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; + @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; @@ -292,7 +323,7 @@ macro_rules! ObjectInterface { $crate::vm::object::macros::ObjectInterface!{ @body_final @trt $trait_name; $struct; - @impls $($trt),*; + @impls $($trt $([ $trt_cond ])?),*; @id $id_field: $id_typ; @prefab $prefab_field: $prefab_typ; @name $name_field: $name_typ; @@ -302,7 +333,7 @@ macro_rules! ObjectInterface { { @body_final @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; + @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; @@ -311,7 +342,7 @@ macro_rules! ObjectInterface { $crate::vm::object::macros::ObjectInterface!{ @body_final @trt $trait_name; $struct; - @impls $($trt),*; + @impls $($trt $([ $trt_cond ])?),*; @id $id_field: $id_typ; @prefab $prefab_field: $prefab_typ; @name $name_field: $name_typ; @@ -320,7 +351,7 @@ macro_rules! ObjectInterface { };{ @body @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; + @impls $($trt:path $([ $trt_cond:path ])?),*; @tags { $(@$tag:tt $tag_field:ident: $tag_typ:ty;)* }; @@ -333,7 +364,7 @@ macro_rules! ObjectInterface { $crate::vm::object::macros::ObjectInterface!{ @body @trt $trait_name; $struct; - @impls $($trt),*; + @impls $($trt $([ $trt_cond ])?),*; @tags {$(@$tag $tag_field: $tag_typ;)* @vm_ref $vm_ref_field: $vm_ref_typ;}; $( $rest )* } @@ -341,7 +372,7 @@ macro_rules! ObjectInterface { { @body @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; + @impls $($trt:path $([ $trt_cond:path ])?),*; @tags { $(@$tag:tt $tag_field:ident: $tag_typ:ty;)* }; @@ -354,7 +385,7 @@ macro_rules! ObjectInterface { $crate::vm::object::macros::ObjectInterface!{ @body @trt $trait_name; $struct; - @impls $($trt),*; + @impls $($trt $([ $trt_cond ])?),*; @tags {$(@$tag $tag_field: $tag_typ;)* @name $name_field: $name_typ;}; $( $rest )* } @@ -362,7 +393,7 @@ macro_rules! ObjectInterface { { @body @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; + @impls $($trt:path $([ $trt_cond:path ])?),*; @tags { $(@$tag:tt $tag_field:ident: $tag_typ:ty;)* }; @@ -375,7 +406,7 @@ macro_rules! ObjectInterface { $crate::vm::object::macros::ObjectInterface!{ @body @trt $trait_name; $struct; - @impls $($trt),*; + @impls $($trt $([ $trt_cond ])?),*; @tags {$(@$tag $tag_field: $tag_typ;)* @prefab $prefab_field: $prefab_typ;}; $( $rest )* } @@ -383,7 +414,7 @@ macro_rules! ObjectInterface { { @body @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; + @impls $($trt:path $([ $trt_cond:path ])?),*; @tags { $(@$tag:tt $tag_field:ident: $tag_typ:ty;)* }; @@ -396,7 +427,7 @@ macro_rules! ObjectInterface { $crate::vm::object::macros::ObjectInterface!{ @body @trt $trait_name; $struct; - @impls $($trt),*; + @impls $($trt $([ $trt_cond ])?),*; @tags {$(@$tag $tag_field: $tag_typ;)* @id $id_field: $id_typ;}; $( $rest )* } @@ -404,7 +435,7 @@ macro_rules! ObjectInterface { { @body @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; + @impls $($trt:path $([ $trt_cond:path ])?),*; @tags { $(@$tag:tt $tag_field:ident: $tag_typ:ty;)* }; @@ -417,7 +448,7 @@ macro_rules! ObjectInterface { $crate::vm::object::macros::ObjectInterface!{ @body @trt $trait_name; $struct; - @impls $($trt),*; + @impls $($trt $([ $trt_cond ])?),*; @tags {$(@$tag $tag_field: $tag_typ;)*}; $( $rest )* } @@ -425,7 +456,7 @@ macro_rules! ObjectInterface { { @body @trt $trait_name:ident; $struct:ident; - @impls $($trt:path),*; + @impls $($trt:path $([ $trt_cond:path ])?),*; @tags { $(@$tag:tt $tag_field:ident: $tag_typ:ty;)* }; @@ -433,14 +464,14 @@ macro_rules! ObjectInterface { $crate::vm::object::macros::ObjectInterface!{ @body_final @trt $trait_name; $struct; - @impls $($trt),*; + @impls $($trt $([ $trt_cond ])?),*; $( @$tag $tag_field: $tag_typ; )* } }; { - #[custom(implements($trait_name:ident {$($trt:path),*}))] + #[custom(implements($trait_name:ident {$($trt:path $([$trt_cond:path])?),*}))] $( #[$attr:meta] )* $viz:vis struct $struct:ident { $( $body:tt )* @@ -449,7 +480,7 @@ macro_rules! ObjectInterface { $crate::vm::object::macros::ObjectInterface!{ @body @trt $trait_name; $struct; - @impls $($trt),*; + @impls $($trt $([ $trt_cond ])?),*; @tags {}; $( $body )* } diff --git a/ic10emu/src/vm/object/stationpedia.rs b/ic10emu/src/vm/object/stationpedia.rs index 298464e..ec4419d 100644 --- a/ic10emu/src/vm/object/stationpedia.rs +++ b/ic10emu/src/vm/object/stationpedia.rs @@ -14,13 +14,15 @@ pub mod structs; #[allow(unused)] pub fn object_from_frozen(obj: &ObjectInfo, id: ObjectID, vm: &Rc) -> Option { - let hash = match obj.prefab { - Some(Prefab::Hash(hash)) => hash, + #[allow(clippy::cast_possible_wrap)] + let hash = match &obj.prefab { + Some(Prefab::Hash(hash)) => *hash, Some(Prefab::Name(name)) => const_crc32::crc32(name.as_bytes()) as i32, None => return None, }; let prefab = StationpediaPrefab::from_repr(hash); + #[allow(clippy::match_single_binding)] match prefab { // Some(StationpediaPrefab::ItemIntegratedCircuit10) => { // Some(VMObject::new(structs::ItemIntegratedCircuit10)) diff --git a/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs b/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs index 5057ea1..71067ea 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs @@ -162,7 +162,7 @@ impl Logicable for StructureCircuitHousing { LogicType::ReferenceId => Ok(*self.get_id() as f64), LogicType::Error => Ok(self.error as f64), LogicType::LineNumber => { - let result = self.slot.occupant.and_then(|info| { + let result = self.slot.occupant.as_ref().and_then(|info| { self.vm.get_object(info.id).and_then(|obj| { obj.borrow() .as_logicable() @@ -207,6 +207,7 @@ impl Logicable for StructureCircuitHousing { 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| { @@ -404,11 +405,10 @@ impl CircuitHolder for StructureCircuitHousing { } fn get_ic(&self) -> Option { - self.slot.occupant.and_then(|info| self.vm.get_object(info.id)) - } - - fn get_ic_mut(&self) -> Option { - self.slot.occupant.and_then(|info| self.vm.get_object(info.id)) + self.slot + .occupant + .as_ref() + .and_then(|info| self.vm.get_object(info.id)) } fn hault_and_catch_fire(&mut self) { diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index 17ec12b..6f408b3 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -225,18 +225,19 @@ impl FrozenObject { } pub fn build_vm_obj(&self, id: ObjectID, vm: &Rc) -> Result { - let template = self.template.map_or_else( + let template = self.template.as_ref().map_or_else( || { self.obj_info .prefab + .as_ref() .map(|prefab| { - vm.get_template(prefab) - .ok_or(TemplateError::NoTemplateForPrefab(prefab)) + vm.get_template(prefab.clone()) + .ok_or(TemplateError::NoTemplateForPrefab(prefab.clone())) }) .transpose()? .ok_or(TemplateError::MissingPrefab) }, - |template| Ok(template), + |template| Ok(template.clone()), )?; if let Some(obj) = stationpedia::object_from_frozen(&self.obj_info, id, vm) { Ok(obj) @@ -248,6 +249,7 @@ impl FrozenObject { pub fn connected_networks(&self) -> Vec { self.obj_info .connections + .as_ref() .map(|connections| connections.values().copied().collect()) .unwrap_or_else(Vec::new) } @@ -255,6 +257,7 @@ impl FrozenObject { pub fn contained_object_ids(&self) -> Vec { self.obj_info .slots + .as_ref() .map(|slots| slots.values().map(|slot| slot.id).collect()) .unwrap_or_else(Vec::new) } @@ -262,6 +265,7 @@ impl FrozenObject { pub fn contained_object_slots(&self) -> Vec<(u32, ObjectID)> { self.obj_info .slots + .as_ref() .map(|slots| { slots .iter() @@ -316,6 +320,7 @@ impl FrozenObject { occupant: self .obj_info .slots + .as_ref() .and_then(|slots| slots.get(&(index as u32)).cloned()), }) .collect() @@ -569,7 +574,7 @@ impl FrozenObject { thermal_info: i.thermal_info.clone(), item_info: i.item.clone(), parent_slot: None, - damage: self.obj_info.damage.clone(), + damage: self.obj_info.damage, })), ItemSlots(i) => Ok(VMObject::new(GenericItemStorage { id, @@ -580,7 +585,7 @@ impl FrozenObject { thermal_info: i.thermal_info.clone(), item_info: i.item.clone(), parent_slot: None, - damage: self.obj_info.damage.clone(), + damage: self.obj_info.damage, slots: self.build_slots(id, &i.slots, None), })), ItemConsumer(i) => Ok(VMObject::new(GenericItemConsumer { @@ -592,7 +597,7 @@ impl FrozenObject { thermal_info: i.thermal_info.clone(), item_info: i.item.clone(), parent_slot: None, - damage: self.obj_info.damage.clone(), + damage: self.obj_info.damage, slots: self.build_slots(id, &i.slots, None), consumer_info: i.consumer_info.clone(), })), @@ -605,7 +610,7 @@ impl FrozenObject { thermal_info: i.thermal_info.clone(), item_info: i.item.clone(), parent_slot: None, - damage: self.obj_info.damage.clone(), + 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(), @@ -620,7 +625,7 @@ impl FrozenObject { thermal_info: i.thermal_info.clone(), item_info: i.item.clone(), parent_slot: None, - damage: self.obj_info.damage.clone(), + 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(), @@ -636,7 +641,7 @@ impl FrozenObject { thermal_info: i.thermal_info.clone(), item_info: i.item.clone(), parent_slot: None, - damage: self.obj_info.damage.clone(), + 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(), @@ -651,7 +656,7 @@ impl FrozenObject { thermal_info: i.thermal_info.clone(), item_info: i.item.clone(), parent_slot: None, - damage: self.obj_info.damage.clone(), + 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(), @@ -665,8 +670,9 @@ impl FrozenObject { thermal_info: i.thermal_info.clone(), item_info: i.item.clone(), parent_slot: None, - damage: self.obj_info.damage.clone(), + 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, @@ -677,8 +683,9 @@ impl FrozenObject { thermal_info: i.thermal_info.clone(), item_info: i.item.clone(), parent_slot: None, - damage: self.obj_info.damage.clone(), + 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(), })), @@ -691,8 +698,9 @@ impl FrozenObject { thermal_info: i.thermal_info.clone(), item_info: i.item.clone(), parent_slot: None, - damage: self.obj_info.damage.clone(), + 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), @@ -709,7 +717,7 @@ impl FrozenObject { let template = vm .get_template(Prefab::Hash(obj_ref.get_prefab().hash)) .map_or_else( - || Some(try_template_from_interfaces(interfaces, obj)), + || Some(try_template_from_interfaces(&interfaces, obj)), |_| None, ) .transpose()?; @@ -719,10 +727,10 @@ impl FrozenObject { } fn try_template_from_interfaces( - interfaces: ObjectInterfaces, + interfaces: &ObjectInterfaces, obj: &VMObject, ) -> Result { - match interfaces { + match *interfaces { ObjectInterfaces { structure: Some(structure), storage: None, @@ -747,6 +755,7 @@ fn try_template_from_interfaces( fabricator: None, internal_atmosphere, thermal, + human: None, } => { // completely generic structure? not sure how this got created but it technically // valid in the data model @@ -781,6 +790,7 @@ fn try_template_from_interfaces( fabricator: None, internal_atmosphere, thermal, + human: None, } => Ok(ObjectTemplate::StructureSlots(StructureSlotsTemplate { prefab: obj.into(), internal_atmo_info: internal_atmosphere.map(Into::into), @@ -812,6 +822,7 @@ fn try_template_from_interfaces( fabricator: None, internal_atmosphere, thermal, + human: None, } => Ok(ObjectTemplate::StructureLogic(StructureLogicTemplate { prefab: obj.into(), internal_atmo_info: internal_atmosphere.map(Into::into), @@ -844,6 +855,7 @@ fn try_template_from_interfaces( fabricator: None, internal_atmosphere, thermal, + human: None, } => Ok(ObjectTemplate::StructureLogicDevice( StructureLogicDeviceTemplate { prefab: obj.into(), @@ -879,6 +891,7 @@ fn try_template_from_interfaces( fabricator: None, internal_atmosphere, thermal, + human: None, } => Ok(ObjectTemplate::StructureLogicDeviceMemory( StructureLogicDeviceMemoryTemplate { prefab: obj.into(), @@ -917,6 +930,7 @@ fn try_template_from_interfaces( fabricator: None, internal_atmosphere, thermal, + human: None, } => Ok(ObjectTemplate::Item(ItemTemplate { prefab: obj.into(), internal_atmo_info: internal_atmosphere.map(Into::into), @@ -947,6 +961,7 @@ fn try_template_from_interfaces( fabricator: None, internal_atmosphere, thermal, + human: None, } => Ok(ObjectTemplate::ItemSlots(ItemSlotsTemplate { prefab: obj.into(), internal_atmo_info: internal_atmosphere.map(Into::into), @@ -978,6 +993,7 @@ fn try_template_from_interfaces( fabricator: None, internal_atmosphere, thermal, + human: None, } => Ok(ObjectTemplate::ItemLogic(ItemLogicTemplate { prefab: obj.into(), internal_atmo_info: internal_atmosphere.map(Into::into), @@ -1010,6 +1026,7 @@ fn try_template_from_interfaces( fabricator: None, internal_atmosphere, thermal, + human: None, } => Ok(ObjectTemplate::ItemLogicMemory(ItemLogicMemoryTemplate { prefab: obj.into(), internal_atmo_info: internal_atmosphere.map(Into::into), diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index 3ac453a..9355dd0 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -99,7 +99,6 @@ tag_object_traits! { connection: Option, ) -> Option; fn get_ic(&self) -> Option; - fn get_ic_mut(&self) -> Option; fn hault_and_catch_fire(&mut self); } @@ -115,6 +114,20 @@ tag_object_traits! { fn set_parent_slot(&mut self, info: Option); fn get_damage(&self) -> f32; fn set_damage(&mut self, damage: f32); + 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 { @@ -125,7 +138,7 @@ tag_object_traits! { fn is_seeding(&self) -> bool; } - pub trait Suit { + pub trait Suit: Item + Storage { fn pressure_waste(&self) -> f32; fn pressure_waste_max(&self) -> f32; fn pressure_air(&self) -> f32; @@ -256,6 +269,45 @@ tag_object_traits! { fn get_channel_data(&self) -> &[f64; 8]; } + pub trait Human : Storage { + fn get_hygine(&self) -> f32; + fn set_hygine(&mut self, hygine: f32); + fn hygine_ok(&self) -> bool { + self.get_hygine() > 0.25 + } + fn hygine_low(&self) -> bool { + self.get_hygine() <= 0.0 + } + fn get_mood(&self) -> f32; + fn set_mood(&mut self, mood: f32); + fn get_nutrition(&self) -> f32; + fn set_nutrition(&mut self, nutrition: f32); + fn get_food_quality(&self) -> f32; + fn set_food_quality(&mut self, quality: f32); + fn get_hydration(&self) -> f32; + fn set_hydration(&mut self, hydration: f32); + fn get_oxygenation(&self) -> f32; + fn set_oxygenation(&mut self, oxygenation: f32); + 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 { From 88ff2d1bdb93efcb2b58f79cb77b08a4d14140eb Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Mon, 27 May 2024 01:10:59 -0700 Subject: [PATCH 29/50] refactor(vm): freeze concreet ic, add "humans", tsify feature --- Cargo.lock | 19 ++ ic10emu/Cargo.toml | 6 + ic10emu/src/errors.rs | 23 +- ic10emu/src/interpreter.rs | 23 +- ic10emu/src/network.rs | 10 + ic10emu/src/vm.rs | 30 +- ic10emu/src/vm/instructions/enums.rs | 6 + ic10emu/src/vm/instructions/operands.rs | 16 ++ ic10emu/src/vm/object/errors.rs | 8 + ic10emu/src/vm/object/humans.rs | 263 +++++++++++++++--- ic10emu/src/vm/object/stationpedia.rs | 142 +++++++++- .../structs/integrated_circuit.rs | 13 +- ic10emu/src/vm/object/templates.rs | 250 ++++++++++++++--- ic10emu/src/vm/object/traits.rs | 72 ++++- ic10emu_wasm/Cargo.toml | 4 +- rust-analyzer.json | 1 + stationeers_data/Cargo.toml | 6 +- stationeers_data/src/enums/basic.rs | 42 +++ stationeers_data/src/enums/prefabs.rs | 6 + stationeers_data/src/enums/script.rs | 12 + stationeers_data/src/lib.rs | 44 ++- stationeers_data/src/templates.rs | 96 ++++++- xtask/src/generate/database.rs | 32 ++- xtask/src/generate/enums.rs | 19 +- xtask/src/generate/instructions.rs | 15 +- xtask/src/stationpedia.rs | 2 +- 26 files changed, 997 insertions(+), 163 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aa20a30..5045ce6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -594,6 +594,19 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +[[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" @@ -690,6 +703,8 @@ dependencies = [ "strum_macros", "thiserror", "time", + "tsify", + "wasm-bindgen", ] [[package]] @@ -1594,6 +1609,8 @@ dependencies = [ "serde", "serde_derive", "strum", + "tsify", + "wasm-bindgen", ] [[package]] @@ -1943,8 +1960,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", ] diff --git a/ic10emu/Cargo.toml b/ic10emu/Cargo.toml index bf79e9c..2b17415 100644 --- a/ic10emu/Cargo.toml +++ b/ic10emu/Cargo.toml @@ -29,6 +29,8 @@ time = { version = "0.3.36", features = [ "serde", "local-offset", ] } +tsify = { version = "0.4.5", optional = true, features = ["js"] } +wasm-bindgen = { version = "0.2.92", optional = true } [target.'cfg(target_arch = "wasm32")'.dependencies] getrandom = { version = "0.2", features = ["js"] } @@ -42,3 +44,7 @@ time = { version = "0.3.36", features = [ [dev-dependencies] color-eyre = "0.6.3" serde_json = "1.0.117" + +[features] +tsify = ["dep:tsify", "dep:wasm-bindgen", "stationeers_data/tsify"] +wasm-bindgen = ["dep:wasm-bindgen"] diff --git a/ic10emu/src/errors.rs b/ic10emu/src/errors.rs index b7e79a1..2eb2a4a 100644 --- a/ic10emu/src/errors.rs +++ b/ic10emu/src/errors.rs @@ -1,15 +1,23 @@ use crate::vm::{ instructions::enums::InstructionOp, object::{ - errors::{LogicError, MemoryError}, templates::Prefab, ObjectID + errors::{LogicError, MemoryError}, + templates::Prefab, + ObjectID, }, }; use serde_derive::{Deserialize, Serialize}; 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))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub enum VMError { #[error("device with id '{0}' does not exist")] UnknownId(u32), @@ -50,6 +58,8 @@ pub enum VMError { } #[derive(Error, Debug, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub enum TemplateError { #[error("object id {0} has a non conforming set of interfaces")] NonConformingObject(ObjectID), @@ -59,9 +69,16 @@ pub enum TemplateError { NoTemplateForPrefab(Prefab), #[error("no prefab provided")] MissingPrefab, + #[error("incorrect template for concreet impl {0} from prefab {1}")] + IncorrectTemplate(String, Prefab), + #[error("frozen memory size error: {0} is not {1}")] + MemorySize(usize, usize) + } #[derive(Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct LineError { pub error: ICError, pub line: u32, @@ -76,6 +93,8 @@ impl Display for LineError { impl StdError for LineError {} #[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct ParseError { pub line: usize, pub start: usize, @@ -128,6 +147,8 @@ impl ParseError { } #[derive(Debug, Error, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub enum ICError { #[error("error compiling code: {0}")] ParseError(#[from] ParseError), diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index d414422..008bf31 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -7,18 +7,24 @@ use std::{ }; use itertools::Itertools; +#[cfg(feature = "tsify")] +use tsify::Tsify; +#[cfg(feature = "tsify")] +use wasm_bindgen::prelude::*; use time::format_description; use crate::{ errors::{ICError, LineError}, grammar, - vm::instructions::{enums::InstructionOp, Instruction}, + vm::instructions::{enums::InstructionOp, operands::Operand, Instruction}, }; pub mod instructions; #[derive(Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub enum ICState { Start, Running, @@ -29,6 +35,19 @@ pub enum ICState { Ended, } +#[derive(Clone, Debug, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "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_instruciton_count: u16, +} + impl Display for ICState { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let out = match self { @@ -52,6 +71,8 @@ impl Display for ICState { } #[derive(Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct Program { pub instructions: Vec, pub errors: Vec, diff --git a/ic10emu/src/network.rs b/ic10emu/src/network.rs index 43d5a5a..9f6bca9 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -13,8 +13,14 @@ use stationeers_data::{ }; use strum_macros::{AsRefStr, EnumIter}; 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))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub enum CableConnectionType { Power, Data, @@ -23,6 +29,8 @@ pub enum CableConnectionType { } #[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub enum Connection { CableNetwork { net: Option, @@ -337,6 +345,8 @@ impl Network for CableNetwork { } #[derive(Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct FrozenCableNetwork { pub id: ObjectID, pub devices: Vec, diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index 81fe336..0595614 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -23,6 +23,10 @@ use std::{ collections::{BTreeMap, HashSet}, rc::Rc, }; +#[cfg(feature = "tsify")] +use tsify::Tsify; +#[cfg(feature = "tsify")] +use wasm_bindgen::prelude::*; use itertools::Itertools; use serde_derive::{Deserialize, Serialize}; @@ -119,15 +123,15 @@ impl VM { .and_then(|db| db.get(&hash).cloned()) } - pub fn add_devices_frozen( + pub fn add_objects_frozen( self: &Rc, - frozen_devices: impl IntoIterator, + frozen_objects: impl IntoIterator, ) -> Result, VMError> { let mut transaction = VMTransaction::new(self); let mut obj_ids = Vec::new(); - for frozen in frozen_devices { - let obj_id = transaction.add_device_from_frozen(frozen)?; + for frozen in frozen_objects { + let obj_id = transaction.add_object_from_frozen(frozen)?; obj_ids.push(obj_id) } @@ -171,13 +175,13 @@ impl VM { Ok(obj_ids) } - pub fn add_device_from_frozen( + pub fn add_object_from_frozen( self: &Rc, frozen: FrozenObject, ) -> Result { let mut transaction = VMTransaction::new(self); - let obj_id = transaction.add_device_from_frozen(frozen)?; + let obj_id = transaction.add_object_from_frozen(frozen)?; transaction.finialize()?; @@ -274,12 +278,12 @@ impl VM { self.circuit_holders.borrow_mut().iter_mut().for_each(|id| { if *id == old_id { - *id = new_id + *id = new_id; } }); self.program_holders.borrow_mut().iter_mut().for_each(|id| { if *id == old_id { - *id = new_id + *id = new_id; } }); self.networks.borrow().iter().for_each(|(_net_id, net)| { @@ -1005,7 +1009,7 @@ impl VM { state.default_network_key, ); for frozen in state.objects { - let _ = transaction.add_device_from_frozen(frozen)?; + let _ = transaction.add_object_from_frozen(frozen)?; } transaction.finialize()?; @@ -1101,7 +1105,7 @@ impl VMTransaction { } } - pub fn add_device_from_frozen(&mut self, frozen: FrozenObject) -> Result { + 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)); @@ -1134,14 +1138,14 @@ impl VMTransaction { self.program_holders.push(obj_id); } if let Some(device) = obj.borrow_mut().as_mut_device() { - for conn in device.connection_list().iter() { + 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) { + 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), @@ -1290,6 +1294,8 @@ impl IdSpace { } #[derive(Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct FrozenVM { pub objects: Vec, pub circuit_holders: Vec, diff --git a/ic10emu/src/vm/instructions/enums.rs b/ic10emu/src/vm/instructions/enums.rs index 9ceb1f4..62d68c8 100644 --- a/ic10emu/src/vm/instructions/enums.rs +++ b/ic10emu/src/vm/instructions/enums.rs @@ -1,6 +1,10 @@ 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, @@ -14,6 +18,8 @@ use crate::vm::object::traits::Programmable; Deserialize )] #[derive(EnumIter, EnumString, EnumProperty, FromRepr)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf, serialize_all = "lowercase")] #[serde(rename_all = "lowercase")] pub enum InstructionOp { diff --git a/ic10emu/src/vm/instructions/operands.rs b/ic10emu/src/vm/instructions/operands.rs index ab70f0e..c35797d 100644 --- a/ic10emu/src/vm/instructions/operands.rs +++ b/ic10emu/src/vm/instructions/operands.rs @@ -6,8 +6,14 @@ use stationeers_data::enums::script::{ LogicBatchMethod as BatchMode, LogicReagentMode as ReagentMode, 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))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub enum Device { Db, Numbered(u32), @@ -15,23 +21,31 @@ pub enum Device { } #[derive(PartialEq, Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct RegisterSpec { pub indirection: u32, pub target: u32, } #[derive(PartialEq, Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "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))] +#[cfg_attr(feature = "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))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub enum Number { Float(f64), Binary(i64), @@ -42,6 +56,8 @@ pub enum Number { } #[derive(PartialEq, Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub enum Operand { RegisterSpec(RegisterSpec), DeviceSpec(DeviceSpec), diff --git a/ic10emu/src/vm/object/errors.rs b/ic10emu/src/vm/object/errors.rs index bf3d270..0c1db59 100644 --- a/ic10emu/src/vm/object/errors.rs +++ b/ic10emu/src/vm/object/errors.rs @@ -2,8 +2,14 @@ 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))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub enum LogicError { #[error("can't read LogicType {0}")] CantRead(LogicType), @@ -18,6 +24,8 @@ pub enum LogicError { } #[derive(Error, Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub enum MemoryError { #[error("stack underflow: {0} < range [0..{1})")] StackUnderflow(i32, usize), diff --git a/ic10emu/src/vm/object/humans.rs b/ic10emu/src/vm/object/humans.rs index 9132f61..af856e8 100644 --- a/ic10emu/src/vm/object/humans.rs +++ b/ic10emu/src/vm/object/humans.rs @@ -1,15 +1,50 @@ +use std::collections::BTreeMap; + use macro_rules_attribute::derive; -use stationeers_data::enums::basic::Class as SlotClass; +use stationeers_data::{ + enums::{basic::Class as SlotClass, Species}, + templates::SlotInfo, +}; +#[cfg(feature = "tsify")] +use tsify::Tsify; +#[cfg(feature = "tsify")] +use wasm_bindgen::prelude::*; use crate::vm::{ object::{ macros::ObjectInterface, - traits::{Human, HumanRef, HumanRefMut, Object, Storage, StorageRef, StorageRefMut}, - Name, ObjectID, Slot, + 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 @@ -24,12 +59,15 @@ pub struct HumanPlayer { #[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 hygine: f32, + pub hygiene: f32, left_hand_slot: Slot, right_hand_slot: Slot, @@ -41,6 +79,18 @@ pub struct HumanPlayer { toolbelt_slot: Slot, } +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "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 { @@ -48,22 +98,103 @@ impl HumanPlayer { prefab: Name::new(""), name: Name::new(""), vm, + species: Species::Human, + damage: 0.0, hydration: 5.0, - nutrition: 5.0, - oxygenation: 1.0, + nutrition: 50.0, + oxygenation: 0.024, food_quality: 0.75, mood: 1.0, - hygine: 1.0, + hygiene: 1.0, left_hand_slot: Slot::new(id, 0, "LeftHand".to_string(), SlotClass::None), right_hand_slot: Slot::new(id, 1, "RightHand".to_string(), SlotClass::None), - suit_slot: Slot::new(id, 2, "Helmet".to_string(), SlotClass::Suit), - helmet_slot: Slot::new(id, 3, "LeftHand".to_string(), SlotClass::Helmet), - glasses_slot: Slot::new(id, 4, "LeftHand".to_string(), SlotClass::Glasses), - backpack_slot: Slot::new(id, 5, "LeftHand".to_string(), SlotClass::Back), - uniform_slot: Slot::new(id, 6, "LeftHand".to_string(), SlotClass::Uniform), - toolbelt_slot: Slot::new(id, 7, "LeftHand".to_string(), SlotClass::Belt), + suit_slot: Slot::new(id, 2, "Suit".to_string(), SlotClass::Suit), + helmet_slot: Slot::new(id, 3, "Helmet".to_string(), SlotClass::Helmet), + glasses_slot: Slot::new(id, 4, "Glasses".to_string(), SlotClass::Glasses), + backpack_slot: Slot::new(id, 5, "Back".to_string(), SlotClass::Back), + uniform_slot: Slot::new(id, 6, "Uniform".to_string(), SlotClass::Uniform), + toolbelt_slot: Slot::new(id, 7, "Belt".to_string(), SlotClass::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(), SlotClass::Battery) + } else { + Slot::new(id, 6, "Uniform".to_string(), SlotClass::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(), SlotClass::None), + right_hand_slot: Slot::new(id, 1, "RightHand".to_string(), SlotClass::None), + suit_slot: Slot::new(id, 2, "Suit".to_string(), SlotClass::Suit), + helmet_slot: Slot::new(id, 3, "Helmet".to_string(), SlotClass::Helmet), + glasses_slot: Slot::new(id, 4, "Glasses".to_string(), SlotClass::Glasses), + backpack_slot: Slot::new(id, 5, "Back".to_string(), SlotClass::Back), + uniform_slot, + toolbelt_slot: Slot::new(id, 7, "Belt".to_string(), SlotClass::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 + } } impl Storage for HumanPlayer { @@ -71,12 +202,12 @@ impl Storage for HumanPlayer { vec![ &self.left_hand_slot, &self.right_hand_slot, - &self.suit_slot, &self.helmet_slot, - &self.glasses_slot, + &self.suit_slot, &self.backpack_slot, &self.uniform_slot, &self.toolbelt_slot, + &self.glasses_slot, ] } @@ -84,12 +215,12 @@ impl Storage for HumanPlayer { vec![ &mut self.left_hand_slot, &mut self.right_hand_slot, - &mut self.suit_slot, &mut self.helmet_slot, - &mut self.glasses_slot, + &mut self.suit_slot, &mut self.backpack_slot, &mut self.uniform_slot, &mut self.toolbelt_slot, + &mut self.glasses_slot, ] } @@ -101,12 +232,12 @@ impl Storage for HumanPlayer { match index { 0 => Some(&self.left_hand_slot), 1 => Some(&self.right_hand_slot), - 2 => Some(&self.suit_slot), - 3 => Some(&self.helmet_slot), - 4 => Some(&self.glasses_slot), - 5 => Some(&self.backpack_slot), - 6 => Some(&self.uniform_slot), - 7 => Some(&self.toolbelt_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, } } @@ -114,59 +245,111 @@ impl Storage for HumanPlayer { match index { 0 => Some(&mut self.left_hand_slot), 1 => Some(&mut self.right_hand_slot), - 2 => Some(&mut self.suit_slot), - 3 => Some(&mut self.helmet_slot), - 4 => Some(&mut self.glasses_slot), - 5 => Some(&mut self.backpack_slot), - 6 => Some(&mut self.uniform_slot), - 7 => Some(&mut self.toolbelt_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 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; + 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; + 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; + 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; + 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; + self.mood = mood.clamp(0.0, MAX_MOOD); } - fn get_hygine(&self) -> f32 { - self.hygine + fn mood_state(&self) -> StatState { + if self.mood < CRITICAL_MOOD { + return StatState::Critical; + } + if self.mood < WARNING_MOOD { + return StatState::Warning; + } + StatState::Normal } - fn set_hygine(&mut self, hygine: f32) { - self.hygine = hygine; + fn get_hygiene(&self) -> f32 { + self.hygiene + } + fn set_hygiene(&mut self, hygiene: f32) { + self.hygiene = hygiene.clamp(0.0, MAX_HYGIENE); + } + fn hygine_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 { - false + self.species == Species::Robot } fn robot_battery(&self) -> Option { - None + 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 diff --git a/ic10emu/src/vm/object/stationpedia.rs b/ic10emu/src/vm/object/stationpedia.rs index ec4419d..e6c6998 100644 --- a/ic10emu/src/vm/object/stationpedia.rs +++ b/ic10emu/src/vm/object/stationpedia.rs @@ -1,34 +1,152 @@ use std::rc::Rc; -use stationeers_data::{enums::prefabs::StationpediaPrefab, templates::ObjectTemplate}; - -use crate::vm::object::{ - templates::{FrozenObject, ObjectInfo, Prefab}, - VMObject, +use stationeers_data::{ + enums::prefabs::StationpediaPrefab, + templates::{ObjectTemplate, PrefabInfo}, }; -use crate::vm::VM; + +use crate::{ + errors::TemplateError, + vm::object::{ + templates::{FrozenObject, 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) -> Option { +pub fn object_from_frozen( + obj: &ObjectInfo, + id: ObjectID, + vm: &Rc, +) -> Result, TemplateError> { #[allow(clippy::cast_possible_wrap)] let hash = match &obj.prefab { Some(Prefab::Hash(hash)) => *hash, Some(Prefab::Name(name)) => const_crc32::crc32(name.as_bytes()) as i32, - None => return None, + None => return Ok(None), }; let prefab = StationpediaPrefab::from_repr(hash); #[allow(clippy::match_single_binding)] match prefab { - // Some(StationpediaPrefab::ItemIntegratedCircuit10) => { - // Some(VMObject::new(structs::ItemIntegratedCircuit10)) - // } + 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()), + )); + }; + + 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.to_string()), + 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_else(|| [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_else(|| [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_instruciton_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() - _ => None, + _ => Ok(None), } } diff --git a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs index c2a90c4..4a9fb7c 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs @@ -237,8 +237,8 @@ impl IntegratedCircuit for ItemIntegratedCircuit10 { self.get_parent_slot() .and_then(|parent_slot| self.get_vm().get_object(parent_slot.parent)) } - fn get_instruction_pointer(&self) -> f64 { - self.ip as f64 + 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; @@ -285,6 +285,12 @@ impl IntegratedCircuit for ItemIntegratedCircuit10 { 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; } @@ -364,6 +370,9 @@ impl IntegratedCircuit for ItemIntegratedCircuit10 { fn set_state(&mut self, state: crate::interpreter::ICState) { self.state = state; } + fn get_instructions_since_yield(&self) -> u16 { + self.ic + } } impl IC10Marker for ItemIntegratedCircuit10 {} diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index 6f408b3..2abb3dc 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -2,6 +2,7 @@ use std::{collections::BTreeMap, rc::Rc, str::FromStr}; use crate::{ errors::TemplateError, + interpreter::ICInfo, network::Connection, vm::{ object::{ @@ -16,6 +17,7 @@ use crate::{ GenericLogicableDeviceMemoryReadWriteable, GenericLogicableDeviceMemoryReadable, GenericStorage, }, + humans::{EntityInfo, HumanPlayer}, traits::*, LogicField, Name, Slot, SlotOccupantInfo, }, @@ -33,10 +35,16 @@ use stationeers_data::{ 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))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub enum Prefab { Hash(i32), Name(String), @@ -59,7 +67,9 @@ impl std::fmt::Display for Prefab { } } -#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[derive(Clone, Debug, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct ObjectInfo { pub name: Option, pub id: Option, @@ -71,6 +81,9 @@ pub struct ObjectInfo { pub reagents: Option>, pub memory: Option>, pub logic_values: Option>, + pub entity: Option, + pub source_code: Option, + pub circuit: Option, } impl From<&VMObject> for ObjectInfo { @@ -87,6 +100,9 @@ impl From<&VMObject> for ObjectInfo { reagents: None, memory: None, logic_values: None, + entity: None, + source_code: None, + circuit: None, } } } @@ -108,6 +124,15 @@ impl ObjectInfo { 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); + } self } @@ -120,9 +145,10 @@ impl ObjectInfo { slots .into_iter() .enumerate() - .filter_map(|(index, slot)| match slot.occupant.as_ref() { - Some(occupant) => Some((index as u32, occupant.clone())), - None => None, + .filter_map(|(index, slot)| { + slot.occupant + .as_ref() + .map(|occupant| (index as u32, occupant.clone())) }) .collect(), ); @@ -142,16 +168,13 @@ impl ObjectInfo { pub fn update_from_device(&mut self, device: DeviceRef<'_>) -> &mut Self { let pins = device.device_pins(); - if pins.is_some_and(|pins| pins.is_empty()) { + if pins.is_some_and(<[Option]>::is_empty) { self.device_pins = None; } else { self.device_pins = pins.map(|pins| { - pins.into_iter() + pins.iter() .enumerate() - .filter_map(|(index, pin)| match pin { - Some(pin) => Some((index as u32, *pin)), - None => None, - }) + .filter_map(|(index, pin)| pin.as_ref().map(|pin| (index as u32, *pin))) .collect() }); } @@ -201,11 +224,65 @@ impl ObjectInfo { ); self } + + 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 + } + + 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); + } + self + } + + 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_instruciton_count: circuit.get_instructions_since_yield(), + }); + self + } } #[derive(Debug, Clone, Deserialize, Serialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct FrozenObject { pub obj_info: ObjectInfo, + pub database_template: bool, pub template: Option, } @@ -213,6 +290,7 @@ impl FrozenObject { pub fn new(obj_info: ObjectInfo) -> Self { FrozenObject { obj_info, + database_template: false, template: None, } } @@ -220,6 +298,7 @@ impl FrozenObject { pub fn with_template(obj_info: ObjectInfo, template: ObjectTemplate) -> Self { FrozenObject { obj_info, + database_template: false, template: Some(template), } } @@ -239,7 +318,7 @@ impl FrozenObject { }, |template| Ok(template.clone()), )?; - if let Some(obj) = stationpedia::object_from_frozen(&self.obj_info, id, vm) { + if let Some(obj) = stationpedia::object_from_frozen(&self.obj_info, id, vm)? { Ok(obj) } else { self.build_generic(id, &template, vm.clone()) @@ -251,7 +330,7 @@ impl FrozenObject { .connections .as_ref() .map(|connections| connections.values().copied().collect()) - .unwrap_or_else(Vec::new) + .unwrap_or_default() } pub fn contained_object_ids(&self) -> Vec { @@ -259,7 +338,7 @@ impl FrozenObject { .slots .as_ref() .map(|slots| slots.values().map(|slot| slot.id).collect()) - .unwrap_or_else(Vec::new) + .unwrap_or_default() } pub fn contained_object_slots(&self) -> Vec<(u32, ObjectID)> { @@ -272,17 +351,17 @@ impl FrozenObject { .map(|(index, slot)| (*index, slot.id)) .collect() }) - .unwrap_or_else(Vec::new) + .unwrap_or_default() } fn build_slots( &self, id: ObjectID, - slots_info: &Vec, + slots_info: &[SlotInfo], logic_info: Option<&LogicInfo>, ) -> Vec { slots_info - .into_iter() + .iter() .enumerate() .map(|(index, info)| Slot { parent: id, @@ -402,7 +481,7 @@ impl FrozenObject { Structure(s) => Ok(VMObject::new(Generic { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.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(), @@ -411,7 +490,7 @@ impl FrozenObject { StructureSlots(s) => Ok(VMObject::new(GenericStorage { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.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(), @@ -421,7 +500,7 @@ impl FrozenObject { StructureLogic(s) => Ok(VMObject::new(GenericLogicable { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.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(), @@ -433,7 +512,7 @@ impl FrozenObject { StructureLogicDevice(s) => Ok(VMObject::new(GenericLogicableDevice { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.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(), @@ -449,7 +528,7 @@ impl FrozenObject { StructureLogicDeviceConsumer(s) => Ok(VMObject::new(GenericLogicableDeviceConsumer { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.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(), @@ -466,7 +545,7 @@ impl FrozenObject { StructureCircuitHolder(s) => Ok(VMObject::new(GenericCircuitHolder { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.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(), @@ -485,7 +564,7 @@ impl FrozenObject { Ok(VMObject::new(GenericLogicableDeviceMemoryReadable { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.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(), @@ -504,7 +583,7 @@ impl FrozenObject { Ok(VMObject::new(GenericLogicableDeviceMemoryReadWriteable { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.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(), @@ -526,7 +605,9 @@ impl FrozenObject { GenericLogicableDeviceConsumerMemoryReadable { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.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(), @@ -548,7 +629,7 @@ impl FrozenObject { GenericLogicableDeviceConsumerMemoryReadWriteable { id, prefab: Name::from_prefab_name(&s.prefab.prefab_name), - name: Name::new(&s.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(), @@ -568,7 +649,7 @@ impl FrozenObject { Item(i) => Ok(VMObject::new(GenericItem { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), - name: Name::new(&i.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(), @@ -579,7 +660,7 @@ impl FrozenObject { ItemSlots(i) => Ok(VMObject::new(GenericItemStorage { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), - name: Name::new(&i.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(), @@ -591,7 +672,7 @@ impl FrozenObject { ItemConsumer(i) => Ok(VMObject::new(GenericItemConsumer { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), - name: Name::new(&i.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(), @@ -604,7 +685,7 @@ impl FrozenObject { ItemLogic(i) => Ok(VMObject::new(GenericItemLogicable { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), - name: Name::new(&i.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(), @@ -619,7 +700,7 @@ impl FrozenObject { Ok(VMObject::new(GenericItemLogicableMemoryReadable { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), - name: Name::new(&i.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(), @@ -635,7 +716,7 @@ impl FrozenObject { ItemLogicMemory(i) => Ok(VMObject::new(GenericItemLogicableMemoryReadWriteable { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), - name: Name::new(&i.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(), @@ -650,7 +731,7 @@ impl FrozenObject { ItemCircuitHolder(i) => Ok(VMObject::new(GenericItemCircuitHolder { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), - name: Name::new(&i.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(), @@ -664,7 +745,7 @@ impl FrozenObject { ItemSuit(i) => Ok(VMObject::new(GenericItemSuit { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), - name: Name::new(&i.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(), @@ -677,7 +758,7 @@ impl FrozenObject { ItemSuitLogic(i) => Ok(VMObject::new(GenericItemSuitLogic { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), - name: Name::new(&i.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(), @@ -692,7 +773,7 @@ impl FrozenObject { ItemSuitCircuitHolder(i) => Ok(VMObject::new(GenericItemSuitCircuitHolder { id, prefab: Name::from_prefab_name(&i.prefab.prefab_name), - name: Name::new(&i.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(), @@ -705,6 +786,19 @@ impl FrozenObject { modes: i.logic.modes.clone(), memory: self.build_memory(&i.memory), })), + 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)) + } } } @@ -714,15 +808,48 @@ impl FrozenObject { 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)), - |_| None, + |template| { + database_template = true; + Some(Ok(template)) + }, ) .transpose()?; - Ok(FrozenObject { obj_info, template }) + Ok(FrozenObject { + obj_info, + template, + database_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, + }) } } @@ -804,7 +931,7 @@ fn try_template_from_interfaces( memory_readable: None, memory_writable: None, logicable: Some(logic), - source_code: None, + source_code: _sc, circuit_holder: _ch, item: None, integrated_circuit: None, @@ -837,7 +964,7 @@ fn try_template_from_interfaces( memory_readable: None, memory_writable: None, logicable: Some(logic), - source_code: None, + source_code: _sc, circuit_holder: _ch, item: None, integrated_circuit: None, @@ -873,7 +1000,7 @@ fn try_template_from_interfaces( memory_readable: Some(mem_r), memory_writable: _mem_w, logicable: Some(logic), - source_code: None, + source_code: _sc, circuit_holder: _ch, item: None, integrated_circuit: None, @@ -975,7 +1102,7 @@ fn try_template_from_interfaces( memory_readable: None, memory_writable: None, logicable: Some(logic), - source_code: None, + source_code: _sc, circuit_holder: _ch, item: Some(item), integrated_circuit: None, @@ -1008,10 +1135,10 @@ fn try_template_from_interfaces( memory_readable: Some(mem_r), memory_writable: _mem_w, logicable: Some(logic), - source_code: None, + source_code: _sc, circuit_holder: _ch, item: Some(item), - integrated_circuit: None, + integrated_circuit: _ic, programmable: None, instructable: _inst, logic_stack: _logic_stack, @@ -1036,6 +1163,41 @@ fn try_template_from_interfaces( 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_interface: 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: "Charater".to_string(), + name: "Charater".to_string(), + }, + species: human.get_species(), + slots: storage.into(), + })), _ => Err(TemplateError::NonConformingObject(obj.get_id())), } } diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index 9355dd0..210e128 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -16,14 +16,52 @@ use crate::{ use stationeers_data::enums::{ basic::{Class as SlotClass, GasType, SortingClass}, script::{LogicSlotType, LogicType}, + Species, }; 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))] +#[cfg_attr(feature = "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))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +pub enum StatState { + #[default] + Normal, + Warning, + Critical, +} + tag_object_traits! { #![object_trait(Object: Debug)] @@ -155,18 +193,20 @@ tag_object_traits! { pub trait IntegratedCircuit: Logicable + MemoryWritable + SourceCode + Item { fn get_circuit_holder(&self) -> Option; - fn get_instruction_pointer(&self) -> f64; + fn get_instruction_pointer(&self) -> u32; fn set_next_instruction(&mut self, next_instruction: f64); fn set_next_instruction_relative(&mut self, offset: f64) { - self.set_next_instruction(self.get_instruction_pointer() + offset); + self.set_next_instruction(self.get_instruction_pointer() as f64 + offset); } fn reset(&mut self); fn get_real_target(&self, indirection: u32, target: u32) -> Result; fn get_register(&self, indirection: u32, target: u32) -> Result; + fn get_registers(&self) -> &[f64]; + fn get_registers_mut(&mut self) -> &mut [f64]; fn set_register(&mut self, indirection: u32, target: u32, val: f64) -> Result; fn set_return_address(&mut self, addr: f64); fn al(&mut self) { - self.set_return_address(self.get_instruction_pointer() + 1.0); + self.set_return_address(self.get_instruction_pointer() as f64 + 1.0); } fn push_stack(&mut self, val: f64) -> Result; fn pop_stack(&mut self) -> Result; @@ -180,6 +220,7 @@ tag_object_traits! { fn get_labels(&self) -> &BTreeMap; fn get_state(&self) -> ICState; fn set_state(&mut self, state: ICState); + fn get_instructions_since_yield(&self) -> u16; } pub trait Programmable: ICInstructable { @@ -270,24 +311,25 @@ tag_object_traits! { } pub trait Human : Storage { - fn get_hygine(&self) -> f32; - fn set_hygine(&mut self, hygine: f32); - fn hygine_ok(&self) -> bool { - self.get_hygine() > 0.25 - } - fn hygine_low(&self) -> bool { - self.get_hygine() <= 0.0 - } - fn get_mood(&self) -> f32; - fn set_mood(&mut self, mood: f32); + 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 get_food_quality(&self) -> f32; - fn set_food_quality(&mut self, quality: 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, hygine: f32); + fn hygine_state(&self) -> StatState; fn is_artificial(&self) -> bool; fn robot_battery(&self) -> Option; fn suit_slot(&self) -> &Slot; diff --git a/ic10emu_wasm/Cargo.toml b/ic10emu_wasm/Cargo.toml index 587f187..4ba219b 100644 --- a/ic10emu_wasm/Cargo.toml +++ b/ic10emu_wasm/Cargo.toml @@ -5,7 +5,7 @@ version.workspace = true edition.workspace = true [dependencies] -ic10emu = { path = "../ic10emu" } +ic10emu = { path = "../ic10emu", feaures = ["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"] } @@ -18,7 +18,7 @@ serde-wasm-bindgen = "0.6.5" itertools = "0.13.0" serde = { version = "1.0.202", features = ["derive"] } serde_with = "3.8.1" -tsify = { version = "0.4.5", default-features = false, features = ["js", "wasm-bindgen"] } +tsify = { version = "0.4.5", default-features = false, features = ["js"] } thiserror = "1.0.61" [build-dependencies] diff --git a/rust-analyzer.json b/rust-analyzer.json index 7021847..50418a4 100644 --- a/rust-analyzer.json +++ b/rust-analyzer.json @@ -1,4 +1,5 @@ { "rust-analyzer.cargo.features": [ + "tsify" ] } diff --git a/stationeers_data/Cargo.toml b/stationeers_data/Cargo.toml index 71ddfd8..798fabd 100644 --- a/stationeers_data/Cargo.toml +++ b/stationeers_data/Cargo.toml @@ -6,7 +6,9 @@ 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 +prefab_database = [] # compile with the prefab database enabled +tsify = ["dep:tsify", "dep:wasm-bindgen"] +wasm-bindgen = ["dep:wasm-bindgen"] [dependencies] num-integer = "0.1.46" @@ -14,3 +16,5 @@ phf = "0.11.2" serde = "1.0.202" serde_derive = "1.0.202" strum = { version = "0.26.2", features = ["derive", "phf", "strum_macros"] } +tsify = { version = "0.4.5", optional = true, features = ["js"] } +wasm-bindgen = { version = "0.2.92", optional = true } diff --git a/stationeers_data/src/enums/basic.rs b/stationeers_data/src/enums/basic.rs index 5f29bb6..13cbf0f 100644 --- a/stationeers_data/src/enums/basic.rs +++ b/stationeers_data/src/enums/basic.rs @@ -1,5 +1,9 @@ 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, @@ -19,6 +23,8 @@ use super::script::{LogicSlotType, LogicType}; Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum AirConditioningMode { @@ -65,6 +71,8 @@ impl TryFrom for AirConditioningMode { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum AirControlMode { @@ -115,6 +123,8 @@ impl TryFrom for AirControlMode { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum ColorType { @@ -189,6 +199,8 @@ impl TryFrom for ColorType { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum DaylightSensorMode { @@ -238,6 +250,8 @@ impl TryFrom for DaylightSensorMode { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum ElevatorMode { @@ -284,6 +298,8 @@ impl TryFrom for ElevatorMode { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum EntityState { @@ -333,6 +349,8 @@ impl TryFrom for EntityState { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u32)] pub enum GasType { @@ -424,6 +442,8 @@ impl TryFrom for GasType { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum PowerMode { @@ -477,6 +497,8 @@ impl TryFrom for PowerMode { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum PrinterInstruction { @@ -548,6 +570,8 @@ impl TryFrom for PrinterInstruction { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum ReEntryProfile { @@ -602,6 +626,8 @@ impl TryFrom for ReEntryProfile { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum RobotMode { @@ -662,6 +688,8 @@ impl TryFrom for RobotMode { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum RocketMode { @@ -719,6 +747,8 @@ impl TryFrom for RocketMode { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum Class { @@ -878,6 +908,8 @@ impl TryFrom for Class { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum SorterInstruction { @@ -938,6 +970,8 @@ impl TryFrom for SorterInstruction { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum SortingClass { @@ -1010,6 +1044,8 @@ impl TryFrom for SortingClass { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum SoundAlert { @@ -1186,6 +1222,8 @@ impl TryFrom for SoundAlert { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum LogicTransmitterMode { @@ -1231,6 +1269,8 @@ impl TryFrom for LogicTransmitterMode { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum VentDirection { @@ -1274,6 +1314,8 @@ impl TryFrom for VentDirection { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum ConditionOperation { diff --git a/stationeers_data/src/enums/prefabs.rs b/stationeers_data/src/enums/prefabs.rs index e33b183..920933a 100644 --- a/stationeers_data/src/enums/prefabs.rs +++ b/stationeers_data/src/enums/prefabs.rs @@ -1,5 +1,9 @@ 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, @@ -18,6 +22,8 @@ use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(i32)] pub enum StationpediaPrefab { diff --git a/stationeers_data/src/enums/script.rs b/stationeers_data/src/enums/script.rs index 1be73d5..81ad20b 100644 --- a/stationeers_data/src/enums/script.rs +++ b/stationeers_data/src/enums/script.rs @@ -1,5 +1,9 @@ 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, @@ -18,6 +22,8 @@ use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum LogicBatchMethod { @@ -67,6 +73,8 @@ impl TryFrom for LogicBatchMethod { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum LogicReagentMode { @@ -117,6 +125,8 @@ impl TryFrom for LogicReagentMode { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum LogicSlotType { @@ -310,6 +320,8 @@ impl TryFrom for LogicSlotType { Serialize, Deserialize )] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u16)] pub enum LogicType { diff --git a/stationeers_data/src/lib.rs b/stationeers_data/src/lib.rs index 63cd167..88d5931 100644 --- a/stationeers_data/src/lib.rs +++ b/stationeers_data/src/lib.rs @@ -3,12 +3,18 @@ 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 script; pub mod prefabs; + pub mod script; #[derive(Debug)] pub struct ParseError { @@ -26,6 +32,8 @@ pub mod enums { #[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, @@ -49,6 +57,8 @@ pub mod enums { FromRepr, EnumString, )] + #[cfg_attr(feature = "tsify", derive(Tsify))] + #[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub enum ConnectionType { Pipe, Power, @@ -81,6 +91,8 @@ pub mod enums { FromRepr, EnumString, )] + #[cfg_attr(feature = "tsify", derive(Tsify))] + #[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub enum ConnectionRole { Input, Input2, @@ -92,7 +104,6 @@ pub mod enums { None, } - #[derive( Debug, Default, @@ -110,6 +121,8 @@ pub mod enums { 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] @@ -120,6 +133,33 @@ pub mod enums { #[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] diff --git a/stationeers_data/src/templates.rs b/stationeers_data/src/templates.rs index ff3279d..07c91db 100644 --- a/stationeers_data/src/templates.rs +++ b/stationeers_data/src/templates.rs @@ -3,11 +3,17 @@ use std::collections::BTreeMap; use crate::enums::{ basic::{Class as SlotClass, GasType, SortingClass}, script::{LogicSlotType, LogicType}, - ConnectionRole, ConnectionType, MachineTier, MemoryAccess, + ConnectionRole, ConnectionType, MachineTier, MemoryAccess, Species, }; 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))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #[serde(untagged)] pub enum ObjectTemplate { Structure(StructureTemplate), @@ -27,6 +33,7 @@ pub enum ObjectTemplate { ItemSuit(ItemSuitTemplate), ItemSuitLogic(ItemSuitLogicTemplate), ItemSuitCircuitHolder(ItemSuitCircuitHolderTemplate), + Human(HumanTemplate), } #[allow(dead_code)] @@ -53,6 +60,7 @@ impl ObjectTemplate { ItemSuit(i) => &i.prefab, ItemSuitLogic(i) => &i.prefab, ItemSuitCircuitHolder(i) => &i.prefab, + Human(h) => &h.prefab, } } } @@ -158,20 +166,42 @@ impl From for ObjectTemplate { } } +impl From for ObjectTemplate { + fn from(value: HumanTemplate) -> Self { + Self::Human(value) + } +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +pub struct HumanTemplate { + pub prefab: PrefabInfo, + pub species: Species, + pub slots: Vec, +} + #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "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))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct SlotInfo { pub name: String, pub typ: SlotClass, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct LogicInfo { pub logic_slot_types: BTreeMap>, pub logic_types: BTreeMap, @@ -182,6 +212,8 @@ pub struct LogicInfo { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemInfo { pub consumable: bool, pub filter_type: Option, @@ -193,6 +225,8 @@ pub struct ItemInfo { } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct ConnectionInfo { pub typ: ConnectionType, pub role: ConnectionRole, @@ -200,6 +234,8 @@ pub struct ConnectionInfo { #[allow(clippy::struct_excessive_bools)] #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct DeviceInfo { pub connection_list: Vec, pub device_pins_length: Option, @@ -214,12 +250,16 @@ pub struct DeviceInfo { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct ConsumerInfo { pub consumed_resouces: Vec, pub processed_reagents: Vec, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct RecipeRange { pub start: f64, pub stop: f64, @@ -227,6 +267,8 @@ pub struct RecipeRange { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct RecipeGasMix { pub rule: i64, pub is_any: bool, @@ -235,6 +277,8 @@ pub struct RecipeGasMix { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct Recipe { pub tier: MachineTier, pub time: f64, @@ -243,21 +287,27 @@ pub struct Recipe { pub pressure: RecipeRange, pub required_mix: RecipeGasMix, pub count_types: i64, - pub reagents: BTreeMap + pub reagents: BTreeMap, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct FabricatorInfo { pub tier: MachineTier, pub recipes: BTreeMap, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "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))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct Instruction { pub description: String, pub typ: String, @@ -265,6 +315,8 @@ pub struct Instruction { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct MemoryInfo { pub instructions: Option>, pub memory_access: MemoryAccess, @@ -272,23 +324,31 @@ pub struct MemoryInfo { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "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))] +#[cfg_attr(feature = "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))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct SuitInfo { pub hygine_reduction_multiplier: f32, pub waste_max_pressure: f32, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct StructureTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, @@ -297,6 +357,8 @@ pub struct StructureTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct StructureSlotsTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, @@ -306,6 +368,8 @@ pub struct StructureSlotsTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct StructureLogicTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, @@ -316,6 +380,8 @@ pub struct StructureLogicTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct StructureLogicDeviceTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, @@ -327,6 +393,8 @@ pub struct StructureLogicDeviceTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct StructureLogicDeviceConsumerTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, @@ -340,6 +408,8 @@ pub struct StructureLogicDeviceConsumerTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct StructureLogicDeviceMemoryTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, @@ -352,6 +422,8 @@ pub struct StructureLogicDeviceMemoryTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct StructureCircuitHolderTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, @@ -363,6 +435,8 @@ pub struct StructureCircuitHolderTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct StructureLogicDeviceConsumerMemoryTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, @@ -377,6 +451,8 @@ pub struct StructureLogicDeviceConsumerMemoryTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, @@ -385,6 +461,8 @@ pub struct ItemTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemSlotsTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, @@ -394,6 +472,8 @@ pub struct ItemSlotsTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemConsumerTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, @@ -404,6 +484,8 @@ pub struct ItemConsumerTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemLogicTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, @@ -414,6 +496,8 @@ pub struct ItemLogicTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemLogicMemoryTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, @@ -425,6 +509,8 @@ pub struct ItemLogicMemoryTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemCircuitHolderTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, @@ -435,6 +521,8 @@ pub struct ItemCircuitHolderTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemSuitTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, @@ -445,6 +533,8 @@ pub struct ItemSuitTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemSuitLogicTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, @@ -456,6 +546,8 @@ pub struct ItemSuitLogicTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemSuitCircuitHolderTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, diff --git a/xtask/src/generate/database.rs b/xtask/src/generate/database.rs index ac03063..efc9a2c 100644 --- a/xtask/src/generate/database.rs +++ b/xtask/src/generate/database.rs @@ -14,17 +14,15 @@ use crate::{ stationpedia::{self, Memory, Page, Stationpedia}, }; -use stationeers_data::{ - templates::{ - ConnectionInfo, ConsumerInfo, DeviceInfo, FabricatorInfo, Instruction, InternalAtmoInfo, - ItemCircuitHolderTemplate, ItemConsumerTemplate, ItemInfo, ItemLogicMemoryTemplate, - ItemLogicTemplate, ItemSlotsTemplate, ItemSuitCircuitHolderTemplate, ItemSuitLogicTemplate, - ItemSuitTemplate, ItemTemplate, LogicInfo, MemoryInfo, ObjectTemplate, PrefabInfo, Recipe, - RecipeGasMix, RecipeRange, SlotInfo, StructureCircuitHolderTemplate, StructureInfo, - StructureLogicDeviceConsumerMemoryTemplate, StructureLogicDeviceConsumerTemplate, - StructureLogicDeviceMemoryTemplate, StructureLogicDeviceTemplate, StructureLogicTemplate, - StructureSlotsTemplate, StructureTemplate, SuitInfo, ThermalInfo, - }, +use stationeers_data::templates::{ + ConnectionInfo, ConsumerInfo, DeviceInfo, FabricatorInfo, Instruction, InternalAtmoInfo, + ItemCircuitHolderTemplate, ItemConsumerTemplate, ItemInfo, ItemLogicMemoryTemplate, + ItemLogicTemplate, ItemSlotsTemplate, ItemSuitCircuitHolderTemplate, ItemSuitLogicTemplate, + ItemSuitTemplate, ItemTemplate, LogicInfo, MemoryInfo, ObjectTemplate, PrefabInfo, Recipe, + RecipeGasMix, RecipeRange, SlotInfo, StructureCircuitHolderTemplate, StructureInfo, + StructureLogicDeviceConsumerMemoryTemplate, StructureLogicDeviceConsumerTemplate, + StructureLogicDeviceMemoryTemplate, StructureLogicDeviceTemplate, StructureLogicTemplate, + StructureSlotsTemplate, StructureTemplate, SuitInfo, ThermalInfo, }; #[allow(clippy::too_many_lines)] @@ -67,7 +65,8 @@ pub fn generate_database( | ItemLogicMemory(_) | ItemSuit(_) | ItemSuitLogic(_) - | ItemSuitCircuitHolder(_) => None, + | ItemSuitCircuitHolder(_) + | Human(_) => None, } }) .collect(); @@ -83,7 +82,8 @@ pub fn generate_database( | StructureCircuitHolder(_) | StructureLogicDeviceConsumer(_) | StructureLogicDeviceMemory(_) - | StructureLogicDeviceConsumerMemory(_) => None, + | StructureLogicDeviceConsumerMemory(_) + | Human(_) => None, Item(_) | ItemSlots(_) | ItemConsumer(_) @@ -112,7 +112,8 @@ pub fn generate_database( | Item(_) | ItemSlots(_) | ItemSuit(_) - | ItemConsumer(_) => None, + | ItemConsumer(_) + | Human(_) => None, ItemLogic(_) | ItemCircuitHolder(_) | ItemLogicMemory(_) @@ -138,7 +139,8 @@ pub fn generate_database( | ItemLogicMemory(_) | ItemSuit(_) | ItemSuitLogic(_) - | ItemSuitCircuitHolder(_) => None, + | ItemSuitCircuitHolder(_) + | Human(_) => None, StructureLogicDevice(_) | StructureCircuitHolder(_) | StructureLogicDeviceMemory(_) diff --git a/xtask/src/generate/enums.rs b/xtask/src/generate/enums.rs index 32a1d43..8dd44b2 100644 --- a/xtask/src/generate/enums.rs +++ b/xtask/src/generate/enums.rs @@ -27,15 +27,13 @@ pub fn generate( .map(|enm| enm.enum_name.clone()) .collect::>(); - let mut writer = - std::io::BufWriter::new(std::fs::File::create(enums_path.join("script.rs"))?); + let mut writer = std::io::BufWriter::new(std::fs::File::create(enums_path.join("script.rs"))?); write_repr_enum_use_header(&mut writer)?; for enm in enums.script_enums.values() { write_enum_listing(&mut writer, enm)?; } - let mut writer = - std::io::BufWriter::new(std::fs::File::create(enums_path.join("basic.rs"))?); + let mut writer = std::io::BufWriter::new(std::fs::File::create(enums_path.join("basic.rs"))?); write_repr_enum_use_header(&mut writer)?; let script_enums_in_basic = enums .script_enums @@ -327,6 +325,11 @@ fn write_repr_enum_use_header( use strum::{ AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr, }; + + #[cfg(feature = "tsify")] + use tsify::Tsify; + #[cfg(feature = "tsify")] + use wasm_bindgen::prelude::*; } )?; Ok(()) @@ -341,11 +344,7 @@ fn write_repr_basic_use_header( .map(|enm| Ident::new(&enm.enum_name.to_case(Case::Pascal), Span::call_site())) .collect::>(); - write!( - writer, - "{}", - quote! {use super::script::{ #(#enums),*};}, - )?; + write!(writer, "{}", quote! {use super::script::{ #(#enums),*};},)?; Ok(()) } @@ -434,6 +433,8 @@ where "{}", quote! { #[derive(#(#derives),*)] + #[cfg_attr(feature = "tsify", derive(Tsify))] + #[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] #additional_strum #[repr(#repr)] pub enum #name { diff --git a/xtask/src/generate/instructions.rs b/xtask/src/generate/instructions.rs index fea2579..4555a76 100644 --- a/xtask/src/generate/instructions.rs +++ b/xtask/src/generate/instructions.rs @@ -56,6 +56,11 @@ fn write_instructions_enum( Display, EnumIter, EnumProperty, EnumString, FromRepr, }; use crate::vm::object::traits::Programmable; + + #[cfg(feature = "tsify")] + use tsify::Tsify; + #[cfg(feature = "tsify")] + use wasm_bindgen::prelude::*; } )?; @@ -78,10 +83,12 @@ fn write_instructions_enum( writer, "{}", quote::quote! {#[derive(Debug, Display, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Serialize, Deserialize)] - #[derive(EnumIter, EnumString, EnumProperty, FromRepr)] - #[strum(use_phf, serialize_all = "lowercase")] - #[serde(rename_all = "lowercase")] - pub enum InstructionOp { + #[derive(EnumIter, EnumString, EnumProperty, FromRepr)] + #[cfg_attr(feature = "tsify", derive(Tsify))] + #[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] + #[strum(use_phf, serialize_all = "lowercase")] + #[serde(rename_all = "lowercase")] + pub enum InstructionOp { Nop, #(#inst_variants)* diff --git a/xtask/src/stationpedia.rs b/xtask/src/stationpedia.rs index ccbb353..ab3bb2d 100644 --- a/xtask/src/stationpedia.rs +++ b/xtask/src/stationpedia.rs @@ -4,7 +4,7 @@ use stationeers_data::enums::MachineTier; use std::collections::BTreeMap; #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] -#[serde(rename = "Stationpedia", deny_unknown_fields)] +#[serde(rename = "Stationpedia")] pub struct Stationpedia { pub pages: Vec, pub reagents: BTreeMap, From dae6be9f4a81d9e15c82b876c6d35404b786f4c2 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Mon, 27 May 2024 04:11:40 -0700 Subject: [PATCH 30/50] refactor(vm): make wasmbindings build again, use tsify for types --- Cargo.lock | 9 +- ic10emu/Cargo.toml | 1 - ic10emu/src/errors.rs | 2 +- ic10emu/src/grammar.rs | 2 +- ic10emu/src/interpreter.rs | 5 +- ic10emu/src/network.rs | 2 +- ic10emu/src/vm/instructions/operands.rs | 20 +- ic10emu/src/vm/object.rs | 20 +- ic10emu/src/vm/object/generic/traits.rs | 10 +- ic10emu/src/vm/object/humans.rs | 37 +- ic10emu/src/vm/object/stationpedia.rs | 4 +- .../stationpedia/structs/circuit_holder.rs | 4 +- .../structs/integrated_circuit.rs | 6 +- ic10emu/src/vm/object/templates.rs | 4 +- ic10emu/src/vm/object/traits.rs | 4 +- ic10emu_wasm/Cargo.toml | 5 +- ic10emu_wasm/build.rs | 170 ++-- ic10emu_wasm/src/lib.rs | 814 +++++++++--------- ic10emu_wasm/src/utils.rs | 2 +- stationeers_data/src/templates.rs | 6 +- 20 files changed, 571 insertions(+), 556 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5045ce6..e3c5721 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -717,6 +717,7 @@ dependencies = [ "js-sys", "serde", "serde-wasm-bindgen 0.6.5", + "serde_derive", "serde_with", "strum", "thiserror", @@ -1423,9 +1424,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.202" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] @@ -1454,9 +1455,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.202" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", diff --git a/ic10emu/Cargo.toml b/ic10emu/Cargo.toml index 2b17415..d8e453c 100644 --- a/ic10emu/Cargo.toml +++ b/ic10emu/Cargo.toml @@ -47,4 +47,3 @@ serde_json = "1.0.117" [features] tsify = ["dep:tsify", "dep:wasm-bindgen", "stationeers_data/tsify"] -wasm-bindgen = ["dep:wasm-bindgen"] diff --git a/ic10emu/src/errors.rs b/ic10emu/src/errors.rs index 2eb2a4a..90e90a4 100644 --- a/ic10emu/src/errors.rs +++ b/ic10emu/src/errors.rs @@ -249,7 +249,7 @@ pub enum ICError { #[error("{0} is not a valid number of sleep seconds")] SleepDurationError(f64), #[error("{0} can not be added to {1} ")] - SleepAddtionError(time::Duration, time::OffsetDateTime), + SleepAddtionError(time::Duration, #[cfg_attr(feature = "tsify", tsify(type = "Date"))] time::OffsetDateTime), } impl ICError { diff --git a/ic10emu/src/grammar.rs b/ic10emu/src/grammar.rs index d2dbff7..c440dad 100644 --- a/ic10emu/src/grammar.rs +++ b/ic10emu/src/grammar.rs @@ -1,5 +1,5 @@ use crate::{ - errors::{ICError, ParseError}, + errors::{ParseError}, interpreter, tokens::{SplitConsecutiveIndicesExt, SplitConsecutiveWithIndices}, vm::instructions::{ diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index 008bf31..349d9ab 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -29,7 +29,10 @@ pub enum ICState { Start, Running, Yield, - Sleep(time::OffsetDateTime, f64), + Sleep( + #[cfg_attr(feature = "tsify", tsify(type = "Date"))] time::OffsetDateTime, + f64, + ), Error(LineError), HasCaughtFire, Ended, diff --git a/ic10emu/src/network.rs b/ic10emu/src/network.rs index 9f6bca9..f8643ec 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -11,7 +11,7 @@ use stationeers_data::{ enums::{script::LogicType, ConnectionRole, ConnectionType}, templates::ConnectionInfo, }; -use strum_macros::{AsRefStr, EnumIter}; + use thiserror::Error; #[cfg(feature = "tsify")] use tsify::Tsify; diff --git a/ic10emu/src/vm/instructions/operands.rs b/ic10emu/src/vm/instructions/operands.rs index c35797d..1f55441 100644 --- a/ic10emu/src/vm/instructions/operands.rs +++ b/ic10emu/src/vm/instructions/operands.rs @@ -3,7 +3,7 @@ use crate::interpreter; use crate::vm::{instructions::enums::InstructionOp, object::traits::IntegratedCircuit}; use serde_derive::{Deserialize, Serialize}; use stationeers_data::enums::script::{ - LogicBatchMethod as BatchMode, LogicReagentMode as ReagentMode, LogicSlotType, LogicType, + LogicBatchMethod, LogicReagentMode, LogicSlotType, LogicType, }; use strum::EnumProperty; #[cfg(feature = "tsify")] @@ -65,8 +65,8 @@ pub enum Operand { Type { logic_type: Option, slot_logic_type: Option, - batch_mode: Option, - reagent_mode: Option, + batch_mode: Option, + reagent_mode: Option, identifier: Identifier, }, Identifier(Identifier), @@ -285,7 +285,10 @@ impl InstOperand { } } - pub fn as_batch_mode(&self, ic: &IC) -> Result { + pub fn as_batch_mode( + &self, + ic: &IC, + ) -> Result { match &self.operand { Operand::Type { batch_mode: Some(bm), @@ -293,12 +296,15 @@ impl InstOperand { } => Ok(*bm), _ => { let val = self.as_value(ic)?; - BatchMode::try_from(val).map_err(|_| ICError::UnknownBatchMode(val)) + LogicBatchMethod::try_from(val).map_err(|_| ICError::UnknownBatchMode(val)) } } } - pub fn as_reagent_mode(&self, ic: &IC) -> Result { + pub fn as_reagent_mode( + &self, + ic: &IC, + ) -> Result { match &self.operand { Operand::Type { reagent_mode: Some(rm), @@ -306,7 +312,7 @@ impl InstOperand { } => Ok(*rm), _ => { let val = self.as_value(ic)?; - ReagentMode::try_from(val).map_err(|_| ICError::UnknownReagentMode(val)) + LogicReagentMode::try_from(val).map_err(|_| ICError::UnknownReagentMode(val)) } } } diff --git a/ic10emu/src/vm/object.rs b/ic10emu/src/vm/object.rs index 44edeb9..21c7ac5 100644 --- a/ic10emu/src/vm/object.rs +++ b/ic10emu/src/vm/object.rs @@ -18,15 +18,21 @@ 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 as SlotClass, prefabs::StationpediaPrefab, script::LogicSlotType, MemoryAccess, + 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 { @@ -67,6 +73,8 @@ impl VMObject { } #[derive(Debug, Default, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct Name { pub value: String, pub hash: i32, @@ -102,23 +110,29 @@ impl Name { } #[derive(Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "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))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct SlotOccupantInfo { pub quantity: u32, pub id: ObjectID, } #[derive(Debug, Default, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify))] +#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct Slot { pub parent: ObjectID, pub index: usize, pub name: String, - pub typ: SlotClass, + pub typ: Class, pub readable_logic: Vec, pub writeable_logic: Vec, pub occupant: Option, @@ -126,7 +140,7 @@ pub struct Slot { impl Slot { #[must_use] - pub fn new(parent: ObjectID, index: usize, name: String, typ: SlotClass) -> Self { + pub fn new(parent: ObjectID, index: usize, name: String, typ: Class) -> Self { Slot { parent, index, diff --git a/ic10emu/src/vm/object/generic/traits.rs b/ic10emu/src/vm/object/generic/traits.rs index f721f56..c66f668 100644 --- a/ic10emu/src/vm/object/generic/traits.rs +++ b/ic10emu/src/vm/object/generic/traits.rs @@ -9,7 +9,7 @@ use crate::{ use stationeers_data::{ enums::{ - basic::{Class as SlotClass, GasType, SortingClass}, + basic::{Class, GasType, SortingClass}, script::{LogicSlotType, LogicType}, }, templates::{DeviceInfo, InternalAtmoInfo, ItemInfo, SuitInfo, ThermalInfo}, @@ -548,7 +548,7 @@ impl Item for T { fn reagents(&self) -> Option<&BTreeMap> { self.item_info().reagents.as_ref() } - fn slot_class(&self) -> SlotClass { + fn slot_class(&self) -> Class { self.item_info().slot_class } fn sorting_class(&self) -> SortingClass { @@ -823,7 +823,7 @@ where fn get_ic_gw(&self) -> Option { self.get_slots() .into_iter() - .find(|slot| slot.typ == SlotClass::ProgrammableChip) + .find(|slot| slot.typ == Class::ProgrammableChip) .and_then(|slot| { slot.occupant .as_ref() @@ -974,7 +974,7 @@ where fn get_ic_gw(&self) -> Option { self.get_slots() .into_iter() - .find(|slot| slot.typ == SlotClass::ProgrammableChip) + .find(|slot| slot.typ == Class::ProgrammableChip) .and_then(|slot| { slot.occupant .as_ref() @@ -1149,7 +1149,7 @@ where fn get_ic_gw(&self) -> Option { self.get_slots() .into_iter() - .find(|slot| slot.typ == SlotClass::ProgrammableChip) + .find(|slot| slot.typ == Class::ProgrammableChip) .and_then(|slot| { slot.occupant .as_ref() diff --git a/ic10emu/src/vm/object/humans.rs b/ic10emu/src/vm/object/humans.rs index af856e8..bc12020 100644 --- a/ic10emu/src/vm/object/humans.rs +++ b/ic10emu/src/vm/object/humans.rs @@ -2,8 +2,7 @@ use std::collections::BTreeMap; use macro_rules_attribute::derive; use stationeers_data::{ - enums::{basic::Class as SlotClass, Species}, - templates::SlotInfo, + enums::{basic::Class, Species}, }; #[cfg(feature = "tsify")] use tsify::Tsify; @@ -106,21 +105,21 @@ impl HumanPlayer { food_quality: 0.75, mood: 1.0, hygiene: 1.0, - left_hand_slot: Slot::new(id, 0, "LeftHand".to_string(), SlotClass::None), - right_hand_slot: Slot::new(id, 1, "RightHand".to_string(), SlotClass::None), - suit_slot: Slot::new(id, 2, "Suit".to_string(), SlotClass::Suit), - helmet_slot: Slot::new(id, 3, "Helmet".to_string(), SlotClass::Helmet), - glasses_slot: Slot::new(id, 4, "Glasses".to_string(), SlotClass::Glasses), - backpack_slot: Slot::new(id, 5, "Back".to_string(), SlotClass::Back), - uniform_slot: Slot::new(id, 6, "Uniform".to_string(), SlotClass::Uniform), - toolbelt_slot: Slot::new(id, 7, "Belt".to_string(), SlotClass::Belt), + 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(), SlotClass::Battery) + Slot::new(id, 6, "Battery".to_string(), Class::Battery) } else { - Slot::new(id, 6, "Uniform".to_string(), SlotClass::Uniform) + Slot::new(id, 6, "Uniform".to_string(), Class::Uniform) }; HumanPlayer { id, @@ -135,14 +134,14 @@ impl HumanPlayer { food_quality: 0.75, mood: 1.0, hygiene: 1.0, - left_hand_slot: Slot::new(id, 0, "LeftHand".to_string(), SlotClass::None), - right_hand_slot: Slot::new(id, 1, "RightHand".to_string(), SlotClass::None), - suit_slot: Slot::new(id, 2, "Suit".to_string(), SlotClass::Suit), - helmet_slot: Slot::new(id, 3, "Helmet".to_string(), SlotClass::Helmet), - glasses_slot: Slot::new(id, 4, "Glasses".to_string(), SlotClass::Glasses), - backpack_slot: Slot::new(id, 5, "Back".to_string(), SlotClass::Back), + 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(), SlotClass::Belt), + toolbelt_slot: Slot::new(id, 7, "Belt".to_string(), Class::Belt), } } diff --git a/ic10emu/src/vm/object/stationpedia.rs b/ic10emu/src/vm/object/stationpedia.rs index e6c6998..088dc19 100644 --- a/ic10emu/src/vm/object/stationpedia.rs +++ b/ic10emu/src/vm/object/stationpedia.rs @@ -2,13 +2,13 @@ use std::rc::Rc; use stationeers_data::{ enums::prefabs::StationpediaPrefab, - templates::{ObjectTemplate, PrefabInfo}, + templates::{ObjectTemplate}, }; use crate::{ errors::TemplateError, vm::object::{ - templates::{FrozenObject, ObjectInfo, Prefab}, + templates::{ObjectInfo, Prefab}, Name, VMObject, }, }; diff --git a/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs b/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs index 71067ea..9940952 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs @@ -9,7 +9,7 @@ use crate::{ }; use macro_rules_attribute::derive; use stationeers_data::enums::{ - basic::Class as SlotClass, + basic::Class, prefabs::StationpediaPrefab, script::{LogicSlotType, LogicType}, ConnectionRole, @@ -58,7 +58,7 @@ impl StructureCircuitHousing { parent: id, index: 0, name: "Programmable Chip".to_string(), - typ: SlotClass::ProgrammableChip, + typ: Class::ProgrammableChip, readable_logic: vec![ LogicSlotType::Class, LogicSlotType::Damage, diff --git a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs index 4a9fb7c..c0dae7e 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs @@ -14,7 +14,7 @@ use crate::{ }; use macro_rules_attribute::derive; use stationeers_data::enums::{ - basic::{Class as SlotClass, GasType, SortingClass}, + basic::{Class, GasType, SortingClass}, script::{LogicSlotType, LogicType}, }; use std::{collections::BTreeMap, rc::Rc}; @@ -67,8 +67,8 @@ impl Item for ItemIntegratedCircuit10 { fn reagents(&self) -> Option<&BTreeMap> { None } - fn slot_class(&self) -> SlotClass { - SlotClass::ProgrammableChip + fn slot_class(&self) -> Class { + Class::ProgrammableChip } fn sorting_class(&self) -> SortingClass { SortingClass::Default diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index 2abb3dc..bfc69c3 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -27,10 +27,8 @@ use crate::{ use serde_derive::{Deserialize, Serialize}; use stationeers_data::{ enums::{ - basic::{Class as SlotClass, GasType, SortingClass}, prefabs::StationpediaPrefab, script::{LogicSlotType, LogicType}, - ConnectionRole, ConnectionType, }, templates::*, }; @@ -1298,7 +1296,7 @@ impl From> for ItemInfo { impl From> for DeviceInfo { fn from(device: DeviceRef) -> Self { - let reagents: BTreeMap = device.get_reagents().iter().copied().collect(); + let _reagents: BTreeMap = device.get_reagents().iter().copied().collect(); DeviceInfo { connection_list: device .connection_list() diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index 210e128..47a545a 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -14,7 +14,7 @@ use crate::{ }, }; use stationeers_data::enums::{ - basic::{Class as SlotClass, GasType, SortingClass}, + basic::{Class, GasType, SortingClass}, script::{LogicSlotType, LogicType}, Species, }; @@ -146,7 +146,7 @@ tag_object_traits! { fn ingredient(&self) -> bool; fn max_quantity(&self) -> u32; fn reagents(&self) -> Option<&BTreeMap>; - fn slot_class(&self) -> SlotClass; + fn slot_class(&self) -> Class; fn sorting_class(&self) -> SortingClass; fn get_parent_slot(&self) -> Option; fn set_parent_slot(&mut self, info: Option); diff --git a/ic10emu_wasm/Cargo.toml b/ic10emu_wasm/Cargo.toml index 4ba219b..ea06db8 100644 --- a/ic10emu_wasm/Cargo.toml +++ b/ic10emu_wasm/Cargo.toml @@ -5,7 +5,7 @@ version.workspace = true edition.workspace = true [dependencies] -ic10emu = { path = "../ic10emu", feaures = ["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"] } @@ -18,8 +18,9 @@ serde-wasm-bindgen = "0.6.5" itertools = "0.13.0" serde = { version = "1.0.202", features = ["derive"] } serde_with = "3.8.1" -tsify = { version = "0.4.5", default-features = false, features = ["js"] } +tsify = { version = "0.4.5", features = ["js"] } thiserror = "1.0.61" +serde_derive = "1.0.203" [build-dependencies] ic10emu = { path = "../ic10emu" } diff --git a/ic10emu_wasm/build.rs b/ic10emu_wasm/build.rs index 422bcaa..b83ec9b 100644 --- a/ic10emu_wasm/build.rs +++ b/ic10emu_wasm/build.rs @@ -9,89 +9,89 @@ 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::LogicSlotType::iter() - .map(|slt| format!("\"{}\"", slt.as_ref())), - "\n | ".to_owned(), - ) - .collect(); - let slt_tstype = format!("\nexport type LogicSlotType = {};", 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(); + // 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::LogicSlotType::iter() + // .map(|slt| format!("\"{}\"", slt.as_ref())), + // "\n | ".to_owned(), + // ) + // .collect(); + // let slt_tstype = format!("\nexport type LogicSlotType = {};", 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 5a9ed3d..eadff29 100644 --- a/ic10emu_wasm/src/lib.rs +++ b/ic10emu_wasm/src/lib.rs @@ -1,14 +1,16 @@ #[macro_use] mod utils; -mod types; +// mod types; use ic10emu::{ - device::{Device, DeviceTemplate, SlotOccupantTemplate}, - grammar::{LogicSlotType, LogicType}, - vm::{FrozenVM, VMError, VM}, + errors::{TemplateError, VMError}, + vm::{ + object::{templates::FrozenObject, ObjectID, VMObject}, + FrozenVM, VM, + }, }; use serde_derive::{Deserialize, Serialize}; -use types::{Registers, Stack}; +// use types::{Registers, Stack}; use std::{cell::RefCell, rc::Rc, str::FromStr}; @@ -22,11 +24,11 @@ extern "C" { fn alert(s: &str); } -#[wasm_bindgen] -pub struct DeviceRef { - device: Rc>, - vm: Rc>, -} +// #[wasm_bindgen] +// pub struct DeviceRef { +// device: Rc>, +// vm: Rc>, +// } use thiserror::Error; @@ -38,484 +40,476 @@ 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() - .circuit_holders - .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() - .circuit_holders - .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() - .circuit_holders - .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() - .circuit_holders - .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() - .circuit_holders - .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() - .circuit_holders - .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() - .circuit_holders - .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() - .circuit_holders - .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() - .circuit_holders - .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() - .circuit_holders - .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 - .circuit_holders - .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 - .circuit_holders - .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 = LogicSlotType::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 = LogicSlotType::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] +// impl DeviceRef { +// fn from_device(device: Rc>, vm: Rc>) -> Self { +// DeviceRef { device, vm } +// } +// +// #[wasm_bindgen(getter)] +// pub fn id(&self) -> ObjectID { +// self.device.id +// } +// +// #[wasm_bindgen(getter)] +// pub fn ic(&self) -> Option { +// self.device.ic +// } +// +// #[wasm_bindgen(getter)] +// pub fn name(&self) -> Option { +// self.device.name.clone() +// } +// +// #[wasm_bindgen(getter, js_name = "nameHash")] +// pub fn name_hash(&self) -> Option { +// self.device.name_hash +// } +// +// #[wasm_bindgen(getter, js_name = "prefabName")] +// pub fn prefab_name(&self) -> Option { +// self.device +// +// .prefab +// .as_ref() +// .map(|prefab| prefab.name.clone()) +// } +// +// #[wasm_bindgen(getter, js_name = "prefabHash")] +// pub fn prefab_hash(&self) -> Option { +// self.device +// +// .prefab +// .as_ref() +// .map(|prefab| prefab.hash) +// } +// +// #[wasm_bindgen(getter, skip_typescript)] +// pub fn fields(&self) -> JsValue { +// serde_wasm_bindgen::to_value(&self.device.get_fields(&self.vm.borrow())).unwrap() +// } +// +// #[wasm_bindgen(getter)] +// pub fn slots(&self) -> types::Slots { +// types::Slots::from_iter(self.device.slots.iter()) +// } +// +// #[wasm_bindgen(getter, skip_typescript)] +// pub fn reagents(&self) -> JsValue { +// serde_wasm_bindgen::to_value(&self.device.reagents).unwrap() +// } +// +// #[wasm_bindgen(getter, skip_typescript)] +// pub fn connections(&self) -> JsValue { +// serde_wasm_bindgen::to_value(&self.device.connections).unwrap() +// } +// +// #[wasm_bindgen(getter, js_name = "ip")] +// pub fn ic_ip(&self) -> Option { +// self.device.ic.as_ref().and_then(|ic| { +// self.vm +// +// .circuit_holders +// .get(ic) +// .map(|ic| ic.as_ref().ip()) +// }) +// } +// +// #[wasm_bindgen(getter, js_name = "instructionCount")] +// pub fn ic_instruction_count(&self) -> Option { +// self.device.ic.as_ref().and_then(|ic| { +// self.vm +// +// .circuit_holders +// .get(ic) +// .map(|ic| ic.as_ref().ic.get()) +// }) +// } +// +// #[wasm_bindgen(getter, js_name = "stack")] +// pub fn ic_stack(&self) -> Option { +// self.device.ic.as_ref().and_then(|ic| { +// self.vm +// +// .circuit_holders +// .get(ic) +// .map(|ic| Stack(*ic.as_ref().stack.borrow())) +// }) +// } +// +// #[wasm_bindgen(getter, js_name = "registers")] +// pub fn ic_registers(&self) -> Option { +// self.device.ic.as_ref().and_then(|ic| { +// self.vm +// +// .circuit_holders +// .get(ic) +// .map(|ic| Registers(*ic.as_ref().registers.borrow())) +// }) +// } +// +// #[wasm_bindgen(getter, js_name = "aliases", skip_typescript)] +// pub fn ic_aliases(&self) -> JsValue { +// let aliases = &self.device.ic.as_ref().and_then(|ic| { +// self.vm +// +// .circuit_holders +// .get(ic) +// .map(|ic| ic.as_ref().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.ic.as_ref().and_then(|ic| { +// self.vm +// +// .circuit_holders +// .get(ic) +// .map(|ic| ic.as_ref().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.ic.as_ref().and_then(|ic| { +// self.vm +// +// .circuit_holders +// .get(ic) +// .map(|ic| *ic.as_ref().pins.borrow()) +// }); +// serde_wasm_bindgen::to_value(pins).unwrap() +// } +// +// #[wasm_bindgen(getter, js_name = "state")] +// pub fn ic_state(&self) -> Option { +// self.device +// +// .ic +// .as_ref() +// .and_then(|ic| { +// self.vm +// +// .circuit_holders +// .get(ic) +// .map(|ic| ic.state.clone()) +// }) +// .map(|state| state.to_string()) +// } +// +// #[wasm_bindgen(getter, js_name = "program", skip_typescript)] +// pub fn ic_program(&self) -> JsValue { +// let prog = &self.device.ic.as_ref().and_then(|ic| { +// self.vm +// +// .circuit_holders +// .get(ic) +// .map(|ic| ic.program.borrow().clone()) +// }); +// serde_wasm_bindgen::to_value(prog).unwrap() +// } +// +// #[wasm_bindgen(getter, js_name = "code")] +// pub fn get_code(&self) -> Option { +// self.device.ic.as_ref().and_then(|ic| { +// self.vm +// +// .circuit_holders +// .get(ic) +// .map(|ic| ic.code.borrow().clone()) +// }) +// } +// +// #[wasm_bindgen(js_name = "step")] +// pub fn step_ic(&self, advance_ip_on_err: bool) -> Result { +// let id = self.device.id; +// Ok(self.vm.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.id; +// Ok(self.vm.run_ic(id, ignore_errors)?) +// } +// +// #[wasm_bindgen(js_name = "reset")] +// pub fn reset_ic(&self) -> Result { +// let id = self.device.id; +// Ok(self.vm.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.id; +// 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_invlaid(&self, code: &str) -> Result { +// let id = self.device.id; +// Ok(self.vm.set_code_invalid(id, code)?) +// } +// +// #[wasm_bindgen(js_name = "setRegister")] +// pub fn ic_set_register(&self, index: ObjectID, val: f64) -> Result { +// let ic_id = *self +// .device +// +// .ic +// .as_ref() +// .ok_or(VMError::NoIC(self.device.id))?; +// let vm_borrow = self.vm; +// let ic = vm_borrow +// .circuit_holders +// .get(&ic_id) +// .ok_or(VMError::NoIC(self.device.id))?; +// let result = ic.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 +// +// .ic +// .as_ref() +// .ok_or(VMError::NoIC(self.device.id))?; +// let vm_borrow = self.vm; +// let ic = vm_borrow +// .circuit_holders +// .get(&ic_id) +// .ok_or(VMError::NoIC(self.device.id))?; +// let result = ic.poke(address, val)?; +// Ok(result) +// } +// +// #[wasm_bindgen(js_name = "setName")] +// pub fn set_name(&self, name: &str) { +// self.device.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; +// device_ref.set_field(logic_typ, value, &self.vm, 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 = LogicSlotType::from_str(field)?; +// let mut device_ref = self.device; +// device_ref.set_slot_field(slot, logic_typ, value, &self.vm, force)?; +// Ok(()) +// } +// +// #[wasm_bindgen(js_name = "getSlotField", skip_typescript)] +// pub fn get_slot_field(&self, slot: f64, field: &str) -> Result { +// let logic_typ = LogicSlotType::from_str(field)?; +// let device_ref = self.device; +// Ok(device_ref.get_slot_field(slot, logic_typ, &self.vm)?) +// } +// +// #[wasm_bindgen(js_name = "getSlotFields", skip_typescript)] +// pub fn get_slot_fields(&self, slot: f64) -> Result { +// let device_ref = self.device; +// let fields = device_ref.get_slot_fields(slot, &self.vm)?; +// 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.id; +// self.vm +// +// .set_device_connection(device_id, conn, net)?; +// Ok(()) +// } +// +// #[wasm_bindgen(js_name = "removeDeviceFromNetwork")] +// pub fn remove_device_from_network(&self, network_id: ObjectID) -> Result { +// let id = self.device.id; +// Ok(self +// .vm +// +// .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.id; +// Ok(self.vm.set_pin(id, pin, val)?) +// } +// } #[wasm_bindgen] #[derive(Debug)] pub struct VMRef { - vm: Rc>, + vm: Rc, } +// #[wasm_bindgen] +// pub struct ObjectRef(VMObject); + #[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_object(network)?) - } - - #[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 = "addDeviceFromTemplate")] + pub fn add_device_from_template(&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_from_frozen(frozen)?) } #[wasm_bindgen(js_name = "getDevice")] - pub fn get_device(&self, id: u32) -> Option { - let device = self.vm.borrow().get_object(id); - device.map(|d| DeviceRef::from_device(d.clone(), self.vm.clone())) + pub fn get_object(&self, id: ObjectID) -> Option { + let obj = self.vm.get_object(id); + // device.map(|d| DeviceRef::from_device(d.clone(), self.vm.clone())) + obj } #[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)?) + pub fn step_ic(&self, id: ObjectID, advance_ip_on_err: bool) -> Result<(), JsError> { + Ok(self.vm.step_programmable(id, advance_ip_on_err)?) } #[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)?) + pub fn run_ic(&self, id: ObjectID, ignore_errors: bool) -> Result { + Ok(self.vm.run_programmable(id, ignore_errors)?) } #[wasm_bindgen(js_name = "resetIC")] - pub fn reset_ic(&self, id: u32) -> Result { - Ok(self.vm.borrow().reset_ic(id)?) + pub fn reset_ic(&self, id: ObjectID) -> Result { + Ok(self.vm.reset_programmable(id)?) } #[wasm_bindgen(getter, js_name = "defaultNetwork")] - pub fn default_network(&self) -> u32 { - self.vm.borrow().default_network_key + pub fn default_network(&self) -> ObjectID { + *self.vm.default_network_key.borrow() } - #[wasm_bindgen(getter)] - pub fn devices(&self) -> Vec { - self.vm.borrow().devices.keys().copied().collect_vec() - } - - #[wasm_bindgen(getter)] - pub fn networks(&self) -> Vec { - self.vm.borrow().networks.keys().copied().collect_vec() - } - - #[wasm_bindgen(getter)] - pub fn ics(&self) -> Vec { - self.vm - .borrow() - .circuit_holders - .keys() - .copied() - .collect_vec() - } + // #[wasm_bindgen(getter)] + // pub fn devices(&self) -> Vec { + // self.vm.devices.keys().copied().collect_vec() + // } + // + // #[wasm_bindgen(getter)] + // pub fn networks(&self) -> Vec { + // self.vm.networks.keys().copied().collect_vec() + // } + // + // #[wasm_bindgen(getter)] + // pub fn ics(&self) -> Vec { + // self.vm.circuit_holders.keys().copied().collect_vec() + // } #[wasm_bindgen(getter, js_name = "lastOperationModified")] - pub fn last_operation_modified(&self) -> Vec { - self.vm.borrow().last_operation_modified() + pub fn 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_object(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 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 { + self.vm.add_object_from_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(()) } } diff --git a/ic10emu_wasm/src/utils.rs b/ic10emu_wasm/src/utils.rs index ead4cd6..7439406 100644 --- a/ic10emu_wasm/src/utils.rs +++ b/ic10emu_wasm/src/utils.rs @@ -8,7 +8,7 @@ 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()); + web_sys::console::log_1(&"Panic hook set...".into()); } } diff --git a/stationeers_data/src/templates.rs b/stationeers_data/src/templates.rs index 07c91db..3a25ab1 100644 --- a/stationeers_data/src/templates.rs +++ b/stationeers_data/src/templates.rs @@ -1,7 +1,7 @@ use std::collections::BTreeMap; use crate::enums::{ - basic::{Class as SlotClass, GasType, SortingClass}, + basic::{Class, GasType, SortingClass}, script::{LogicSlotType, LogicType}, ConnectionRole, ConnectionType, MachineTier, MemoryAccess, Species, }; @@ -196,7 +196,7 @@ pub struct PrefabInfo { #[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] pub struct SlotInfo { pub name: String, - pub typ: SlotClass, + pub typ: Class, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] @@ -220,7 +220,7 @@ pub struct ItemInfo { pub ingredient: bool, pub max_quantity: u32, pub reagents: Option>, - pub slot_class: SlotClass, + pub slot_class: Class, pub sorting_class: SortingClass, } From 1843bdbfceb3b2fef8f5e5b87528907b139a0fe0 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Mon, 27 May 2024 22:12:06 -0700 Subject: [PATCH 31/50] refactor(vm): cleanup, trait docs, reenable interpreter tests --- Cargo.lock | 1 + ic10emu/Cargo.toml | 7 + ic10emu/src/errors.rs | 25 +- ic10emu/src/grammar.rs | 3 +- ic10emu/src/interpreter.rs | 252 +- ic10emu/src/interpreter/instructions.rs | 8 +- ic10emu/src/network.rs | 9 +- ic10emu/src/vm.rs | 223 +- ic10emu/src/vm/instructions.rs | 5 +- ic10emu/src/vm/instructions/codegen.rs | 2 + .../vm/instructions/{ => codegen}/enums.rs | 17 +- .../vm/instructions/{ => codegen}/traits.rs | 14 + ic10emu/src/vm/instructions/operands.rs | 18 +- ic10emu/src/vm/object.rs | 12 +- ic10emu/src/vm/object/errors.rs | 6 +- ic10emu/src/vm/object/generic/macros.rs | 65 + ic10emu/src/vm/object/generic/structs.rs | 19 +- ic10emu/src/vm/object/generic/traits.rs | 5 +- ic10emu/src/vm/object/humans.rs | 3 +- ic10emu/src/vm/object/macros.rs | 2 + ic10emu/src/vm/object/stationpedia.rs | 6 +- .../structs/integrated_circuit.rs | 15 +- ic10emu/src/vm/object/templates.rs | 94 +- ic10emu/src/vm/object/traits.rs | 157 +- stationeers_data/src/database/prefab_map.rs | 100266 +++++++-------- stationeers_data/src/enums/basic.rs | 71 +- stationeers_data/src/enums/prefabs.rs | 17 +- stationeers_data/src/enums/script.rs | 26 +- stationeers_data/src/templates.rs | 108 +- xtask/src/generate.rs | 46 +- xtask/src/generate/database.rs | 17 +- xtask/src/generate/enums.rs | 3 +- xtask/src/generate/instructions.rs | 6 +- 33 files changed, 50351 insertions(+), 51177 deletions(-) create mode 100644 ic10emu/src/vm/instructions/codegen.rs rename ic10emu/src/vm/instructions/{ => codegen}/enums.rs (99%) rename ic10emu/src/vm/instructions/{ => codegen}/traits.rs (99%) diff --git a/Cargo.lock b/Cargo.lock index e3c5721..360d031 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -688,6 +688,7 @@ dependencies = [ "color-eyre", "const-crc32", "getrandom", + "ic10emu", "itertools", "macro_rules_attribute", "paste", diff --git a/ic10emu/Cargo.toml b/ic10emu/Cargo.toml index d8e453c..2c71833 100644 --- a/ic10emu/Cargo.toml +++ b/ic10emu/Cargo.toml @@ -45,5 +45,12 @@ time = { version = "0.3.36", features = [ color-eyre = "0.6.3" serde_json = "1.0.117" +# 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 diff --git a/ic10emu/src/errors.rs b/ic10emu/src/errors.rs index 90e90a4..aaa3cb2 100644 --- a/ic10emu/src/errors.rs +++ b/ic10emu/src/errors.rs @@ -16,15 +16,12 @@ use tsify::Tsify; use wasm_bindgen::prelude::*; #[derive(Error, Debug, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[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(u32), + UnknownId(ObjectID), #[error("ic with id '{0}' does not exist")] - UnknownIcId(u32), - #[error("device with id '{0}' does not have a ic slot")] - NoIC(u32), + UnknownIcId(ObjectID), #[error("ic encountered an error: {0}")] ICError(#[from] ICError), #[error("ic encountered an error: {0}")] @@ -49,6 +46,10 @@ pub enum VMError { NotAnItem(ObjectID), #[error("object {0} is not programmable")] NotProgrammable(ObjectID), + #[error("object {0} is not a circuit holder or programmable")] + NotCircuitHolderOrProgrammable(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}")] @@ -58,8 +59,7 @@ pub enum VMError { } #[derive(Error, Debug, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[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), @@ -77,8 +77,7 @@ pub enum TemplateError { } #[derive(Debug, Clone, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct LineError { pub error: ICError, pub line: u32, @@ -93,8 +92,7 @@ impl Display for LineError { impl StdError for LineError {} #[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct ParseError { pub line: usize, pub start: usize, @@ -147,8 +145,7 @@ impl ParseError { } #[derive(Debug, Error, Clone, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub enum ICError { #[error("error compiling code: {0}")] ParseError(#[from] ParseError), diff --git a/ic10emu/src/grammar.rs b/ic10emu/src/grammar.rs index c440dad..2d4272f 100644 --- a/ic10emu/src/grammar.rs +++ b/ic10emu/src/grammar.rs @@ -1,5 +1,5 @@ use crate::{ - errors::{ParseError}, + errors::ParseError, interpreter, tokens::{SplitConsecutiveIndicesExt, SplitConsecutiveWithIndices}, vm::instructions::{ @@ -14,7 +14,6 @@ use stationeers_data::enums::{ script::{LogicBatchMethod, LogicReagentMode, LogicSlotType, LogicType}, }; use std::{fmt::Display, str::FromStr}; -use strum::IntoEnumIterator; pub fn parse(code: &str) -> Result, ParseError> { code.lines() diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index 349d9ab..3050af9 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -23,8 +23,7 @@ use crate::{ pub mod instructions; #[derive(Debug, Clone, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub enum ICState { Start, Running, @@ -39,8 +38,7 @@ pub enum ICState { } #[derive(Clone, Debug, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct ICInfo { pub instruction_pointer: u32, pub registers: Vec, @@ -74,8 +72,7 @@ impl Display for ICState { } #[derive(Debug, Clone, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct Program { pub instructions: Vec, pub errors: Vec, @@ -214,87 +211,166 @@ pub fn i64_to_f64(i: i64) -> f64 { #[cfg(test)] mod tests { + use std::rc::Rc; - // static INIT: std::sync::Once = std::sync::Once::new(); - // - // fn setup() { - // INIT.call_once(|| { - // let _ = color_eyre::install(); - // }) - // } - // - // #[test] - // fn batch_modes() -> color_eyre::Result<()> { - // setup(); - // 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.circuit_holders.get(&ic_id).unwrap().borrow(); - // 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(); - // assert_eq!(r0, 0.0); - // vm.step_ic(ic, false)?; - // let r1 = ic_chip.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(); - // assert_eq!(r2, f64::INFINITY); - // Ok(()) - // } - // - // #[test] - // fn stack() -> color_eyre::Result<()> { - // setup(); - // 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.circuit_holders.get(&ic_id).unwrap().borrow(); - // vm.set_code( - // ic, - // r#"push 100 - // push 10 - // pop r0 - // push 1000 - // peek r1 - // poke 1 20 - // pop r2 - // "#, - // )?; - // vm.step_ic(ic, false)?; - // let stack0 = ic_chip.peek_addr(0.0)?; - // assert_eq!(stack0, 100.0); - // vm.step_ic(ic, false)?; - // let stack1 = ic_chip.peek_addr(1.0)?; - // assert_eq!(stack1, 10.0); - // vm.step_ic(ic, false)?; - // let r0 = ic_chip.get_register(0, 0).unwrap(); - // assert_eq!(r0, 10.0); - // vm.step_ic(ic, false)?; - // let stack1 = ic_chip.peek_addr(1.0)?; - // assert_eq!(stack1, 1000.0); - // vm.step_ic(ic, false)?; - // let r1 = ic_chip.get_register(0, 1).unwrap(); - // assert_eq!(r1, 1000.0); - // vm.step_ic(ic, false)?; - // let stack1 = ic_chip.peek_addr(1.0)?; - // assert_eq!(stack1, 20.0); - // vm.step_ic(ic, false)?; - // let r2 = ic_chip.get_register(0, 2).unwrap(); - // assert_eq!(r2, 20.0); - // Ok(()) - // } + 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::Hash( + StationpediaPrefab::ItemIntegratedCircuit10 as i32, + )), + database_template: true, + template: None, + }; + + println!("Adding IC"); + let ic = vm.add_object_from_frozen(frozen_ic)?; + let frozen_circuit_holder = FrozenObject { + obj_info: ObjectInfo::with_prefab(Prefab::Hash( + StationpediaPrefab::StructureCircuitHousing as i32, + )), + database_template: true, + template: None, + }; + println!("Adding circuit holder"); + let ch = vm.add_object_from_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() -> 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_programmable(ic, false)?; + let r0 = ic_chip + .borrow() + .as_integrated_circuit() + .unwrap() + .get_register(0, 0) + .unwrap(); + assert_eq!(r0, 0.0); + 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_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() -> 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 + push 10 + pop r0 + push 1000 + peek r1 + poke 1 20 + pop r2 + "#, + )?; + 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_programmable(ic, false)?; + let stack1 = ic_chip + .borrow() + .as_integrated_circuit() + .unwrap() + .get_stack(1.0)?; + assert_eq!(stack1, 10.0); + 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_programmable(ic, false)?; + let stack1 = ic_chip + .borrow() + .as_integrated_circuit() + .unwrap() + .get_stack(1.0)?; + assert_eq!(stack1, 1000.0); + 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_programmable(ch, false)?; + let stack1 = ic_chip + .borrow() + .as_integrated_circuit() + .unwrap() + .get_stack(1.0)?; + assert_eq!(stack1, 20.0); + 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 index 81dd8b4..079f2c6 100644 --- a/ic10emu/src/interpreter/instructions.rs +++ b/ic10emu/src/interpreter/instructions.rs @@ -2124,8 +2124,8 @@ impl ClrInstruction for T { obj_ref .as_mut_memory_writable() .ok_or(MemoryError::NotWriteable)? - .clear_memory() - .map_err(Into::into) + .clear_memory(); + Ok(()) }) })?; Ok(()) @@ -2147,8 +2147,8 @@ impl ClrdInstruction for T { obj_ref .as_mut_memory_writable() .ok_or(MemoryError::NotWriteable)? - .clear_memory() - .map_err(Into::into) + .clear_memory(); + Ok(()) }) })?; Ok(()) diff --git a/ic10emu/src/network.rs b/ic10emu/src/network.rs index f8643ec..3b6c010 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -19,8 +19,7 @@ use tsify::Tsify; use wasm_bindgen::prelude::*; #[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub enum CableConnectionType { Power, Data, @@ -29,8 +28,7 @@ pub enum CableConnectionType { } #[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub enum Connection { CableNetwork { net: Option, @@ -345,8 +343,7 @@ impl Network for CableNetwork { } #[derive(Debug, Clone, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct FrozenCableNetwork { pub id: ObjectID, pub devices: Vec, diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index 0595614..e7faa41 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -73,6 +73,7 @@ struct VMTransaction { } impl VM { + /// 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(); @@ -102,10 +103,14 @@ impl VM { vm } + /// get a random f64 value using a mscorlib rand PRNG + /// (Stationeers, being written in .net, using mscorlib's rand) pub fn random_f64(&self) -> f64 { self.random.borrow_mut().next_f64() } + /// Take ownership of an iterable the produces (prefab hash, ObjectTemplate) pairs and build a prefab + /// database pub fn import_template_database( &mut self, db: impl IntoIterator, @@ -113,6 +118,7 @@ impl VM { self.template_database.replace(db.into_iter().collect()); } + /// Get a Object Template by either prefab name or hash pub fn get_template(&self, prefab: Prefab) -> Option { let hash = match prefab { Prefab::Hash(hash) => hash, @@ -123,6 +129,9 @@ impl VM { .and_then(|db| db.get(&hash).cloned()) } + /// Add an number of object to the VM state using Frozen Object strusts. + /// See also `add_objects_frozen` + /// Returns the built objects' IDs pub fn add_objects_frozen( self: &Rc, frozen_objects: impl IntoIterator, @@ -175,6 +184,11 @@ impl VM { Ok(obj_ids) } + /// 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 pub fn add_object_from_frozen( self: &Rc, frozen: FrozenObject, @@ -223,6 +237,7 @@ impl VM { Ok(obj_id) } + /// Creates a new network adn return it's ID pub fn add_network(self: &Rc) -> u32 { let next_id = self.network_id_space.borrow_mut().next(); self.networks.borrow_mut().insert( @@ -232,6 +247,7 @@ impl VM { next_id } + /// Get Id of default network pub fn get_default_network(self: &Rc) -> VMObject { self.networks .borrow() @@ -240,12 +256,15 @@ impl VM { .expect("default network not present") } + /// Get network form Id pub fn get_network(self: &Rc, id: u32) -> Option { self.networks.borrow().get(&id).cloned() } - /// iterate over all object borrowing them mutably, never call unless VM is not currently - /// stepping + /// 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 pub fn change_device_id(self: &Rc, old_id: u32, new_id: u32) -> Result<(), VMError> { if self.id_space.borrow().has_id(&new_id) { return Err(VMError::IdInUse(new_id)); @@ -301,6 +320,7 @@ impl VM { } /// Set program code if it's valid + /// Object Id is the programmable Id or the circuit holder's id pub fn set_code(self: &Rc, id: u32, code: &str) -> Result { let obj = self .objects @@ -308,15 +328,34 @@ impl VM { .get(&id) .cloned() .ok_or(VMError::UnknownId(id))?; - let mut obj_ref = obj.borrow_mut(); - let programmable = obj_ref - .as_mut_programmable() - .ok_or(VMError::NotProgrammable(id))?; - programmable.set_source_code(code)?; - Ok(true) + { + let mut obj_ref = obj.borrow_mut(); + if let Some(programmable) = obj_ref.as_mut_programmable() { + 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 + /// Object Id is the programmable Id or the circuit holder's id pub fn set_code_invalid(self: &Rc, id: u32, code: &str) -> Result { let obj = self .objects @@ -324,12 +363,30 @@ impl VM { .get(&id) .cloned() .ok_or(VMError::UnknownId(id))?; - let mut obj_ref = obj.borrow_mut(); - let programmable = obj_ref - .as_mut_programmable() - .ok_or(VMError::NotProgrammable(id))?; - programmable.set_source_code_with_invalid(code); - Ok(true) + { + 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)) } /// returns a list of device ids modified in the last operations @@ -348,14 +405,36 @@ impl VM { .get(&id) .cloned() .ok_or(VMError::UnknownId(id))?; - let mut obj_ref = obj.borrow_mut(); - let programmable = obj_ref - .as_mut_programmable() - .ok_or(VMError::NotProgrammable(id))?; - self.operation_modified.borrow_mut().clear(); - self.set_modified(id); - programmable.step(advance_ip_on_err)?; - Ok(()) + { + 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)); + } + }; + + 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. @@ -370,28 +449,63 @@ impl VM { .get(&id) .cloned() .ok_or(VMError::UnknownId(id))?; - let mut obj_ref = obj.borrow_mut(); - let programmable = obj_ref - .as_mut_programmable() - .ok_or(VMError::NotProgrammable(id))?; - 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()); + { + 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), + _ => {} + } } - } - 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); } } - programmable.set_state(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: &Rc, id: ObjectID) { @@ -427,13 +541,19 @@ impl VM { .borrow() .iter() .filter(move |(id, device)| { - 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]) + 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() @@ -856,7 +976,7 @@ impl VM { 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) { + if let Some(network) = self.networks.borrow().get(net) { network .borrow_mut() .as_mut_network() @@ -1145,7 +1265,7 @@ impl VMTransaction { role: ConnectionRole::None, } = conn { - if let Some(net) = self.networks.get_mut(&net_id) { + 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), @@ -1294,8 +1414,7 @@ impl IdSpace { } #[derive(Debug, Clone, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct FrozenVM { pub objects: Vec, pub circuit_holders: Vec, diff --git a/ic10emu/src/vm/instructions.rs b/ic10emu/src/vm/instructions.rs index a980117..e80b328 100644 --- a/ic10emu/src/vm/instructions.rs +++ b/ic10emu/src/vm/instructions.rs @@ -1,6 +1,7 @@ -pub mod enums; +mod codegen; pub mod operands; -pub mod traits; +pub use codegen::enums; +pub use codegen::traits; use enums::InstructionOp; use operands::Operand; 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/enums.rs b/ic10emu/src/vm/instructions/codegen/enums.rs similarity index 99% rename from ic10emu/src/vm/instructions/enums.rs rename to ic10emu/src/vm/instructions/codegen/enums.rs index 62d68c8..b35806d 100644 --- a/ic10emu/src/vm/instructions/enums.rs +++ b/ic10emu/src/vm/instructions/codegen/enums.rs @@ -1,3 +1,17 @@ +// ================================================= +// !! <-----> 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; @@ -18,8 +32,7 @@ use wasm_bindgen::prelude::*; Deserialize )] #[derive(EnumIter, EnumString, EnumProperty, FromRepr)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[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 { diff --git a/ic10emu/src/vm/instructions/traits.rs b/ic10emu/src/vm/instructions/codegen/traits.rs similarity index 99% rename from ic10emu/src/vm/instructions/traits.rs rename to ic10emu/src/vm/instructions/codegen/traits.rs index f92e2a3..53167b0 100644 --- a/ic10emu/src/vm/instructions/traits.rs +++ b/ic10emu/src/vm/instructions/codegen/traits.rs @@ -1,3 +1,17 @@ +// ================================================= +// !! <-----> 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 { diff --git a/ic10emu/src/vm/instructions/operands.rs b/ic10emu/src/vm/instructions/operands.rs index 1f55441..8e2ca5d 100644 --- a/ic10emu/src/vm/instructions/operands.rs +++ b/ic10emu/src/vm/instructions/operands.rs @@ -12,8 +12,7 @@ use tsify::Tsify; use wasm_bindgen::prelude::*; #[derive(PartialEq, Eq, Debug, Clone, Copy, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub enum Device { Db, Numbered(u32), @@ -21,31 +20,27 @@ pub enum Device { } #[derive(PartialEq, Debug, Clone, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct RegisterSpec { pub indirection: u32, pub target: u32, } #[derive(PartialEq, Debug, Clone, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[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))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[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))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub enum Number { Float(f64), Binary(i64), @@ -56,8 +51,7 @@ pub enum Number { } #[derive(PartialEq, Debug, Clone, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub enum Operand { RegisterSpec(RegisterSpec), DeviceSpec(DeviceSpec), diff --git a/ic10emu/src/vm/object.rs b/ic10emu/src/vm/object.rs index 21c7ac5..87ef27a 100644 --- a/ic10emu/src/vm/object.rs +++ b/ic10emu/src/vm/object.rs @@ -73,8 +73,7 @@ impl VMObject { } #[derive(Debug, Default, Clone, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct Name { pub value: String, pub hash: i32, @@ -110,24 +109,21 @@ impl Name { } #[derive(Debug, Clone, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[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))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct SlotOccupantInfo { pub quantity: u32, pub id: ObjectID, } #[derive(Debug, Default, Clone, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct Slot { pub parent: ObjectID, pub index: usize, diff --git a/ic10emu/src/vm/object/errors.rs b/ic10emu/src/vm/object/errors.rs index 0c1db59..76f3acb 100644 --- a/ic10emu/src/vm/object/errors.rs +++ b/ic10emu/src/vm/object/errors.rs @@ -8,8 +8,7 @@ use tsify::Tsify; use wasm_bindgen::prelude::*; #[derive(Error, Debug, Clone, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub enum LogicError { #[error("can't read LogicType {0}")] CantRead(LogicType), @@ -24,8 +23,7 @@ pub enum LogicError { } #[derive(Error, Debug, Clone, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[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), diff --git a/ic10emu/src/vm/object/generic/macros.rs b/ic10emu/src/vm/object/generic/macros.rs index 23d6985..dfdb66a 100644 --- a/ic10emu/src/vm/object/generic/macros.rs +++ b/ic10emu/src/vm/object/generic/macros.rs @@ -210,3 +210,68 @@ macro_rules! GWSuit { }; } 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; diff --git a/ic10emu/src/vm/object/generic/structs.rs b/ic10emu/src/vm/object/generic/structs.rs index 85a11ca..b6e3571 100644 --- a/ic10emu/src/vm/object/generic/structs.rs +++ b/ic10emu/src/vm/object/generic/structs.rs @@ -120,12 +120,13 @@ pub struct GenericLogicableDevice { ObjectInterface!, GWThermal!, GWInternalAtmo!, GWStructure!, GWStorage!, GWLogicable!, - GWDevice! + GWDevice!, GWCircuitHolderDevice! )] #[custom(implements(Object { Thermal[GWThermal::is_thermal], InternalAtmosphere[GWInternalAtmo::is_internal_atmo], - Structure, Storage, Logicable, Device + Structure, Storage, Logicable, Device, + CircuitHolder }))] pub struct GenericCircuitHolder { #[custom(object_id)] @@ -146,6 +147,7 @@ pub struct GenericCircuitHolder { pub connections: Vec, pub pins: Option>>, pub reagents: Option>, + pub error: i32, } #[derive( @@ -481,12 +483,14 @@ pub struct GenericItemLogicableMemoryReadWriteable { #[derive( ObjectInterface!, GWThermal!, GWInternalAtmo!, - GWItem!, GWStorage!, GWLogicable! + GWItem!, GWStorage!, GWLogicable!, + GWCircuitHolderItem! )] #[custom(implements(Object { Thermal[GWThermal::is_thermal], InternalAtmosphere[GWInternalAtmo::is_internal_atmo], - Item, Storage, Logicable + Item, Storage, Logicable, + CircuitHolder }))] pub struct GenericItemCircuitHolder { #[custom(object_id)] @@ -505,6 +509,7 @@ pub struct GenericItemCircuitHolder { pub slots: Vec, pub fields: BTreeMap, pub modes: Option>, + pub error: i32, } #[derive( @@ -543,12 +548,13 @@ pub struct GenericItemSuitLogic { GWThermal!, GWInternalAtmo!, GWItem!, GWStorage!, GWLogicable!, GWMemoryReadable!, GWMemoryWritable!, - GWSuit! + GWSuit!, GWCircuitHolderSuit! )] #[custom(implements(Object { Thermal[GWThermal::is_thermal], InternalAtmosphere[GWInternalAtmo::is_internal_atmo], - Item, Storage, Suit, Logicable, MemoryReadable, MemoryWritable + Item, Storage, Suit, Logicable, MemoryReadable, MemoryWritable, + CircuitHolder }))] pub struct GenericItemSuitCircuitHolder { #[custom(object_id)] @@ -569,6 +575,7 @@ pub struct GenericItemSuitCircuitHolder { pub fields: BTreeMap, pub modes: Option>, pub memory: Vec, + pub error: i32, } #[derive( diff --git a/ic10emu/src/vm/object/generic/traits.rs b/ic10emu/src/vm/object/generic/traits.rs index c66f668..a74a555 100644 --- a/ic10emu/src/vm/object/generic/traits.rs +++ b/ic10emu/src/vm/object/generic/traits.rs @@ -381,9 +381,8 @@ impl MemoryWritable for T { Ok(()) } } - fn clear_memory(&mut self) -> Result<(), MemoryError> { + fn clear_memory(&mut self) { self.memory_mut().fill(0.0); - Ok(()) } } @@ -564,7 +563,7 @@ impl Item for T { self.damage().unwrap_or(0.0) } fn set_damage(&mut self, damage: f32) { - self.damage_mut().replace(damage); + self.damage_mut().replace(damage.clamp(0.0, 1.0)); } } diff --git a/ic10emu/src/vm/object/humans.rs b/ic10emu/src/vm/object/humans.rs index bc12020..10a1b06 100644 --- a/ic10emu/src/vm/object/humans.rs +++ b/ic10emu/src/vm/object/humans.rs @@ -79,8 +79,7 @@ pub struct HumanPlayer { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct EntityInfo { pub hydration: f32, pub nutrition: f32, diff --git a/ic10emu/src/vm/object/macros.rs b/ic10emu/src/vm/object/macros.rs index 9a0f536..5b0d2c5 100644 --- a/ic10emu/src/vm/object/macros.rs +++ b/ic10emu/src/vm/object/macros.rs @@ -22,11 +22,13 @@ macro_rules! object_trait { paste::paste! { $( + #[doc = "Return a `& dyn " $trt "` if implimented by the object"] #[inline(always)] fn [](&self) -> Option<[<$trt Ref>]> { None } + #[doc = "Return a `&mut dyn " $trt "` if implimented by the object"] #[inline(always)] fn [](&mut self) -> Option<[<$trt RefMut>]> { None diff --git a/ic10emu/src/vm/object/stationpedia.rs b/ic10emu/src/vm/object/stationpedia.rs index 088dc19..fc1ac74 100644 --- a/ic10emu/src/vm/object/stationpedia.rs +++ b/ic10emu/src/vm/object/stationpedia.rs @@ -58,7 +58,7 @@ pub fn object_from_frozen( .clone() .unwrap_or_else(|| prefab.get_str("name").unwrap().to_string())), ), - prefab: Name::from_prefab_name(&prefab.to_string()), + prefab: Name::from_prefab_name(prefab.as_ref()), fields: template .logic .logic_types @@ -84,7 +84,7 @@ pub fn object_from_frozen( .map(TryInto::try_into) .transpose() .map_err(|vec: Vec| TemplateError::MemorySize(vec.len(), 512))? - .unwrap_or_else(|| [0.0f64; 512]), + .unwrap_or( [0.0f64; 512]), parent_slot: None, registers: obj .circuit @@ -92,7 +92,7 @@ pub fn object_from_frozen( .map(|circuit| circuit.registers.clone().try_into()) .transpose() .map_err(|vec: Vec| TemplateError::MemorySize(vec.len(), 18))? - .unwrap_or_else(|| [0.0f64; 18]), + .unwrap_or( [0.0f64; 18]), ip: obj .circuit .as_ref() diff --git a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs index c0dae7e..90aab2c 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs @@ -23,7 +23,12 @@ static RETURN_ADDRESS_INDEX: usize = 17; static STACK_POINTER_INDEX: usize = 16; #[derive(ObjectInterface!)] -#[custom(implements(Object { Item, Storage, Logicable, MemoryReadable, MemoryWritable }))] +#[custom(implements(Object { + Item, Storage, Logicable, + MemoryReadable, MemoryWritable, + SourceCode, IntegratedCircuit, + Programmable +}))] pub struct ItemIntegratedCircuit10 { #[custom(object_id)] pub id: ObjectID, @@ -83,7 +88,7 @@ impl Item for ItemIntegratedCircuit10 { self.damage } fn set_damage(&mut self, damage: f32) { - self.damage = damage; + self.damage = damage.clamp(0.0, 1.0); } } @@ -208,9 +213,8 @@ impl MemoryWritable for ItemIntegratedCircuit10 { Ok(()) } } - fn clear_memory(&mut self) -> Result<(), MemoryError> { + fn clear_memory(&mut self) { self.memory.fill(0.0); - Ok(()) } } @@ -369,6 +373,9 @@ impl IntegratedCircuit for ItemIntegratedCircuit10 { } 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 diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index bfc69c3..9075312 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -41,8 +41,7 @@ use wasm_bindgen::prelude::*; use super::{stationpedia, MemoryAccess, ObjectID, VMObject}; #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub enum Prefab { Hash(i32), Name(String), @@ -55,7 +54,7 @@ impl std::fmt::Display for Prefab { StationpediaPrefab::from_repr(*hash), format!("Unknown({hash}))"), ), - Self::Name(name) => (StationpediaPrefab::from_str(&name).ok(), name.clone()), + Self::Name(name) => (StationpediaPrefab::from_str(name).ok(), name.clone()), }; if let Some(known) = known_prefab { write!(f, "{known}") @@ -66,8 +65,7 @@ impl std::fmt::Display for Prefab { } #[derive(Clone, Debug, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct ObjectInfo { pub name: Option, pub id: Option, @@ -106,6 +104,28 @@ impl From<&VMObject> for ObjectInfo { } impl ObjectInfo { + /// Build empty info with a prefab name + pub fn with_prefab(prefab: Prefab) -> Self { + ObjectInfo { + name: None, + id: None, + prefab: Some(prefab), + slots: None, + damage: None, + device_pins: None, + connections: None, + reagents: None, + memory: None, + logic_values: None, + entity: None, + source_code: None, + circuit: None, + } + } + + /// update the object info from the relavent implimented 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); @@ -134,6 +154,7 @@ impl ObjectInfo { 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() { @@ -154,6 +175,7 @@ impl ObjectInfo { 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 { @@ -164,6 +186,7 @@ impl ObjectInfo { 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) { @@ -188,18 +211,16 @@ impl ObjectInfo { } else { self.connections.replace( connections - .into_iter() + .iter() .enumerate() - .filter_map(|(index, conn)| match conn.get_network() { - Some(net) => Some((index as u32, net)), - None => None, - }) + .filter_map(|(index, conn)| conn.get_network().map(|net| (index as u32, net))) .collect(), ); } 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()); @@ -209,6 +230,7 @@ impl ObjectInfo { self } + /// store logic field state pub fn update_from_logic(&mut self, logic: LogicableRef<'_>) -> &mut Self { self.logic_values.replace( logic @@ -223,6 +245,7 @@ impl ObjectInfo { self } + /// store entity state pub fn update_from_human(&mut self, human: HumanRef<'_>) -> &mut Self { let damage = human.get_damage(); if damage == 0.0 { @@ -241,6 +264,7 @@ impl ObjectInfo { 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() { @@ -249,6 +273,7 @@ impl ObjectInfo { 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(), @@ -276,8 +301,7 @@ impl ObjectInfo { } #[derive(Debug, Clone, Deserialize, Serialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct FrozenObject { pub obj_info: ObjectInfo, pub database_template: bool, @@ -379,7 +403,7 @@ impl FrozenObject { .collect::>() }) }) - .unwrap_or_else(Vec::new), + .unwrap_or_default(), writeable_logic: logic_info .and_then(|info| { info.logic_slot_types.get(&(index as u32)).map(|s_info| { @@ -393,7 +417,7 @@ impl FrozenObject { .collect::>() }) }) - .unwrap_or_else(Vec::new), + .unwrap_or_default(), occupant: self .obj_info .slots @@ -555,6 +579,7 @@ impl FrozenObject { 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) => @@ -739,6 +764,7 @@ impl FrozenObject { 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, @@ -783,6 +809,7 @@ impl FrozenObject { 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); @@ -1368,42 +1395,3 @@ impl From> for Vec { .collect() } } - -#[cfg(test)] -mod tests { - - use serde_derive::Deserialize; - use serde_json; - use std::collections::BTreeMap; - use std::fs::File; - use std::io::BufReader; - use std::path::PathBuf; - - use super::ObjectTemplate; - - static INIT: std::sync::Once = std::sync::Once::new(); - - fn setup() { - INIT.call_once(|| { - let _ = color_eyre::install(); - }) - } - - #[allow(dead_code)] - #[derive(Debug, Deserialize)] - struct Database { - pub prefabs: BTreeMap, - } - - #[test] - fn all_database_prefabs_parse() -> color_eyre::Result<()> { - setup(); - let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR")); - d = d.parent().unwrap().join("data").join("database.json"); - println!("loading database from {}", d.display()); - - let _database: Database = serde_json::from_reader(BufReader::new(File::open(d)?))?; - - Ok(()) - } -} diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index 47a545a..ccd20cb 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -27,8 +27,7 @@ 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))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct ParentSlotInfo { pub parent: ObjectID, pub slot: usize, @@ -53,8 +52,7 @@ pub struct ParentSlotInfo { Serialize, Deserialize, )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub enum StatState { #[default] Normal, @@ -70,88 +68,154 @@ tag_object_traits! { } 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<&Slot>; + /// Get a vector a mutable references to all an object's slots fn get_slots_mut(&mut self) -> Vec<&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>; - fn clear_memory(&mut self) -> 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; - /// returns 0 if not set + /// 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<&Instruction, ICError>; } 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 hault_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) { @@ -192,34 +256,75 @@ tag_object_traits! { } 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; } @@ -251,7 +356,10 @@ tag_object_traits! { } 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, @@ -259,30 +367,42 @@ tag_object_traits! { 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 + /// Return vector of (reagent_hash, quantity) pairs fn get_reagents(&self) -> Vec<(i32, f64)>; - /// overwrite present reagents + /// Overwrite present reagents fn set_reagents(&mut self, reagents: &[(i32, f64)]); - /// adds the reagents to contents + /// Adds the reagents to contents fn add_reagents(&mut self, reagents: &[(i32, f64)]); } pub trait ReagentInterface: Device { - /// reagents required by current recipe + /// Reagents required by current recipe fn get_current_recipie(&self) -> Vec<(i32, f64)>; - /// reagents required to complete current recipe + /// Reagents required to complete current recipe fn get_current_required(&self) -> Vec<(i32, f64)>; } @@ -293,20 +413,35 @@ tag_object_traits! { 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]; } diff --git a/stationeers_data/src/database/prefab_map.rs b/stationeers_data/src/database/prefab_map.rs index 2331904..eb15523 100644 --- a/stationeers_data/src/database/prefab_map.rs +++ b/stationeers_data/src/database/prefab_map.rs @@ -1,50758 +1,49534 @@ -use crate::enums::script_enums::*; -use crate::enums::basic_enums::*; -use crate::enums::{MemoryAccess, ConnectionType, ConnectionRole}; +// ================================================= +// !! <-----> 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)] - std::collections::BTreeMap::from([ - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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![SlotInfo { name : "Output".into(), typ : Class::None }] - .into_iter() - .collect(), - consumer_info: ConsumerInfo { - consumed_resouces: vec![ - "ItemCharcoal".into(), "ItemCobaltOre".into(), "ItemFern".into(), - "ItemSilverIngot".into(), "ItemSilverOre".into(), "ItemSoyOil" - .into() - ] - .into_iter() - .collect(), - processed_reagents: vec![].into_iter().collect(), - }, - } - .into(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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![SlotInfo { name : "Output".into(), typ : Class::None }] - .into_iter() - .collect(), - consumer_info: ConsumerInfo { - consumed_resouces: 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(), - ), - ( - -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![SlotInfo { name : "Export".into(), typ : Class::None }] - .into_iter() - .collect(), - consumer_info: ConsumerInfo { - consumed_resouces: 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(), - ), - ( - -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![SlotInfo { name : "Output".into(), typ : Class::Bottle }] - .into_iter() - .collect(), - consumer_info: ConsumerInfo { - consumed_resouces: vec![ - "ItemSoyOil".into(), "ReagentColorBlue".into(), - "ReagentColorGreen".into(), "ReagentColorOrange".into(), - "ReagentColorRed".into(), "ReagentColorYellow".into() - ] - .into_iter() - .collect(), - processed_reagents: vec![].into_iter().collect(), - }, - } - .into(), - ), - ( - -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![SlotInfo { name : "Input".into(), typ : Class::Tool }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - SlotInfo { name : "Source Plant".into(), typ : Class::Plant }, - SlotInfo { name : "Target Plant".into(), typ : Class::Plant } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![SlotInfo { name : "Plant".into(), typ : Class::Plant }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - SlotInfo { name : "Input".into(), typ : Class::None }, SlotInfo { - name : "Output".into(), typ : Class::None } - ] - .into_iter() - .collect(), - consumer_info: ConsumerInfo { - consumed_resouces: 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(), - ), - ( - 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![ - SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { - name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : - "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant" - .into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ - : Class::Plant }, SlotInfo { name : "Plant".into(), typ : - Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant - }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { - name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : - "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant" - .into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ - : Class::Plant } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - SlotInfo { name : "".into(), typ : Class::Tool } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - -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![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" - .into()), (5u32, "High".into()), (6u32, "Full".into()) - ] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![].into_iter().collect(), - } - .into(), - ), - ( - -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![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" - .into()), (5u32, "High".into()), (6u32, "Full".into()) - ] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![].into_iter().collect(), - } - .into(), - ), - ( - -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![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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(), - ), - ( - -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: "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(), - ), - ( - -932136011i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "CartridgeConfiguration".into(), - prefab_hash: -932136011i32, - desc: "".into(), - name: "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(), - ), - ( - -1462180176i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "CartridgeElectronicReader".into(), - prefab_hash: -1462180176i32, - desc: "".into(), - name: "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(), - ), - ( - -1957063345i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "CartridgeGPS".into(), - prefab_hash: -1957063345i32, - desc: "".into(), - name: "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(), - ), - ( - 872720793i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "CartridgeGuide".into(), - prefab_hash: 872720793i32, - desc: "".into(), - name: "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(), - ), - ( - -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: "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(), - ), - ( - 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: "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(), - ), - ( - -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: "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(), - ), - ( - 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: "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(), - ), - ( - 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(), - ), - ( - 81488783i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "CartridgeTracker".into(), - prefab_hash: 81488783i32, - desc: "".into(), - name: "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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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![(0u32, "Operate".into()), (1u32, "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(), - ), - ( - 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::None, - sorting_class: SortingClass::Storage, - }, - thermal_info: None, - internal_atmo_info: None, - slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - -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![ - (0u32, "Whole Note".into()), (1u32, "Half Note".into()), - (2u32, "Quarter Note".into()), (3u32, "Eighth Note".into()), - (4u32, "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(), - ), - ( - 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![ - (0u32, "C-2".into()), (1u32, "C#-2".into()), (2u32, "D-2" - .into()), (3u32, "D#-2".into()), (4u32, "E-2".into()), (5u32, - "F-2".into()), (6u32, "F#-2".into()), (7u32, "G-2".into()), - (8u32, "G#-2".into()), (9u32, "A-2".into()), (10u32, "A#-2" - .into()), (11u32, "B-2".into()), (12u32, "C-1".into()), - (13u32, "C#-1".into()), (14u32, "D-1".into()), (15u32, "D#-1" - .into()), (16u32, "E-1".into()), (17u32, "F-1".into()), - (18u32, "F#-1".into()), (19u32, "G-1".into()), (20u32, "G#-1" - .into()), (21u32, "A-1".into()), (22u32, "A#-1".into()), - (23u32, "B-1".into()), (24u32, "C0".into()), (25u32, "C#0" - .into()), (26u32, "D0".into()), (27u32, "D#0".into()), - (28u32, "E0".into()), (29u32, "F0".into()), (30u32, "F#0" - .into()), (31u32, "G0".into()), (32u32, "G#0".into()), - (33u32, "A0".into()), (34u32, "A#0".into()), (35u32, "B0" - .into()), (36u32, "C1".into()), (37u32, "C#1".into()), - (38u32, "D1".into()), (39u32, "D#1".into()), (40u32, "E1" - .into()), (41u32, "F1".into()), (42u32, "F#1".into()), - (43u32, "G1".into()), (44u32, "G#1".into()), (45u32, "A1" - .into()), (46u32, "A#1".into()), (47u32, "B1".into()), - (48u32, "C2".into()), (49u32, "C#2".into()), (50u32, "D2" - .into()), (51u32, "D#2".into()), (52u32, "E2".into()), - (53u32, "F2".into()), (54u32, "F#2".into()), (55u32, "G2" - .into()), (56u32, "G#2".into()), (57u32, "A2".into()), - (58u32, "A#2".into()), (59u32, "B2".into()), (60u32, "C3" - .into()), (61u32, "C#3".into()), (62u32, "D3".into()), - (63u32, "D#3".into()), (64u32, "E3".into()), (65u32, "F3" - .into()), (66u32, "F#3".into()), (67u32, "G3".into()), - (68u32, "G#3".into()), (69u32, "A3".into()), (70u32, "A#3" - .into()), (71u32, "B3".into()), (72u32, "C4".into()), (73u32, - "C#4".into()), (74u32, "D4".into()), (75u32, "D#4".into()), - (76u32, "E4".into()), (77u32, "F4".into()), (78u32, "F#4" - .into()), (79u32, "G4".into()), (80u32, "G#4".into()), - (81u32, "A4".into()), (82u32, "A#4".into()), (83u32, "B4" - .into()), (84u32, "C5".into()), (85u32, "C#5".into()), - (86u32, "D5".into()), (87u32, "D#5".into()), (88u32, "E5" - .into()), (89u32, "F5".into()), (90u32, "F#5".into()), - (91u32, "G5 ".into()), (92u32, "G#5".into()), (93u32, "A5" - .into()), (94u32, "A#5".into()), (95u32, "B5".into()), - (96u32, "C6".into()), (97u32, "C#6".into()), (98u32, "D6" - .into()), (99u32, "D#6".into()), (100u32, "E6".into()), - (101u32, "F6".into()), (102u32, "F#6".into()), (103u32, "G6" - .into()), (104u32, "G#6".into()), (105u32, "A6".into()), - (106u32, "A#6".into()), (107u32, "B6".into()), (108u32, "C7" - .into()), (109u32, "C#7".into()), (110u32, "D7".into()), - (111u32, "D#7".into()), (112u32, "E7".into()), (113u32, "F7" - .into()), (114u32, "F#7".into()), (115u32, "G7".into()), - (116u32, "G#7".into()), (117u32, "A7".into()), (118u32, "A#7" - .into()), (119u32, "B7".into()), (120u32, "C8".into()), - (121u32, "C#8".into()), (122u32, "D8".into()), (123u32, "D#8" - .into()), (124u32, "E8".into()), (125u32, "F8".into()), - (126u32, "F#8".into()), (127u32, "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(), - ), - ( - 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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::None, - sorting_class: SortingClass::Storage, - }, - thermal_info: None, - internal_atmo_info: None, - slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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::None, - sorting_class: SortingClass::Atmospherics, - }, - thermal_info: Some(ThermalInfo { - convection_factor: 0.025f32, - radiation_factor: 0.025f32, - }), - internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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::None, - sorting_class: SortingClass::Default, - }, - thermal_info: Some(ThermalInfo { - convection_factor: 0.025f32, - radiation_factor: 0.025f32, - }), - internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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::None, - sorting_class: SortingClass::Default, - }, - thermal_info: Some(ThermalInfo { - convection_factor: 0.025f32, - radiation_factor: 0.025f32, - }), - internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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::None, - sorting_class: SortingClass::Default, - }, - thermal_info: Some(ThermalInfo { - convection_factor: 0.025f32, - radiation_factor: 0.025f32, - }), - internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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::None, - sorting_class: SortingClass::Default, - }, - thermal_info: Some(ThermalInfo { - convection_factor: 0.025f32, - radiation_factor: 0.025f32, - }), - internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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::None, - sorting_class: SortingClass::Default, - }, - thermal_info: Some(ThermalInfo { - convection_factor: 0.025f32, - radiation_factor: 0.025f32, - }), - internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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::None, - sorting_class: SortingClass::Default, - }, - thermal_info: Some(ThermalInfo { - convection_factor: 0.025f32, - radiation_factor: 0.025f32, - }), - internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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::None, - sorting_class: SortingClass::Default, - }, - thermal_info: Some(ThermalInfo { - convection_factor: 0.025f32, - radiation_factor: 0.025f32, - }), - internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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::None, - sorting_class: SortingClass::Default, - }, - thermal_info: Some(ThermalInfo { - convection_factor: 0.025f32, - radiation_factor: 0.025f32, - }), - internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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::None, - sorting_class: SortingClass::Default, - }, - thermal_info: Some(ThermalInfo { - convection_factor: 0.025f32, - radiation_factor: 0.025f32, - }), - internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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::None, - sorting_class: SortingClass::Atmospherics, - }, - thermal_info: Some(ThermalInfo { - convection_factor: 0.025f32, - radiation_factor: 0.025f32, - }), - internal_atmo_info: None, - slots: vec![ - SlotInfo { name : "Gas Canister".into(), typ : Class::LiquidCanister - } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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::None, - sorting_class: SortingClass::Default, - }, - thermal_info: Some(ThermalInfo { - convection_factor: 0f32, - radiation_factor: 0f32, - }), - internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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::None, - sorting_class: SortingClass::Atmospherics, - }, - thermal_info: Some(ThermalInfo { - convection_factor: 0f32, - radiation_factor: 0f32, - }), - internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister }, - SlotInfo { name : "Battery".into(), typ : Class::Battery } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { - name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : - "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant" - .into(), typ : Class::Plant }, SlotInfo { name : "Liquid Canister" - .into(), typ : Class::LiquidCanister }, SlotInfo { name : - "Liquid Canister".into(), typ : Class::Plant }, SlotInfo { name : - "Liquid Canister".into(), typ : Class::Plant }, SlotInfo { name : - "Liquid Canister".into(), typ : Class::Plant }, SlotInfo { name : - "Liquid Canister".into(), typ : Class::Plant } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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::None, - sorting_class: SortingClass::Atmospherics, - }, - thermal_info: Some(ThermalInfo { - convection_factor: 0.025f32, - radiation_factor: 0.025f32, - }), - internal_atmo_info: None, - slots: vec![ - SlotInfo { name : "Liquid Canister".into(), typ : - Class::LiquidCanister } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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::None, - sorting_class: SortingClass::Atmospherics, - }, - thermal_info: Some(ThermalInfo { - convection_factor: 0f32, - radiation_factor: 0f32, - }), - internal_atmo_info: None, - slots: vec![ - SlotInfo { name : "Liquid Canister".into(), typ : - Class::LiquidCanister } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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::None, - sorting_class: SortingClass::Atmospherics, - }, - thermal_info: Some(ThermalInfo { - convection_factor: 0f32, - radiation_factor: 0f32, - }), - internal_atmo_info: None, - slots: vec![ - SlotInfo { name : "Liquid Canister".into(), typ : - Class::LiquidCanister } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo - { name : "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo { - name : "Gas Filter".into(), typ : Class::GasFilter } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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![SlotInfo { name : "Brain".into(), typ : Class::Organ }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![SlotInfo { name : "Brain".into(), typ : Class::Organ }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![SlotInfo { name : "Brain".into(), typ : Class::Organ }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![SlotInfo { name : "Brain".into(), typ : Class::Organ }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![SlotInfo { name : "Brain".into(), typ : Class::Organ }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - -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![SlotInfo { name : "".into(), typ : Class::Magazine }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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![ - SlotInfo { name : "Magazine".into(), typ : Class::Flare }, SlotInfo { - name : "".into(), typ : Class::Blocked } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![(0u32, 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![(0u32, "Idle".into()), (1u32, "Active".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: true, - }, - slots: vec![ - SlotInfo { name : "Programmable Chip".into(), typ : - Class::ProgrammableChip } - ] - .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(), - ), - ( - 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![SlotInfo { name : "Magazine".into(), typ : Class::Magazine }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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 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" - .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![ - (0u32, 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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: true, - circuit_holder: true, - }, - slots: vec![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo - { name : "Cartridge".into(), typ : Class::Cartridge }, SlotInfo { - name : "Cartridge1".into(), typ : Class::Cartridge }, SlotInfo { name - : "Programmable Chip".into(), typ : Class::ProgrammableChip } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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![ - (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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 (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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" - .into()), (5u32, "High".into()), (6u32, "Full".into()) - ] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![].into_iter().collect(), - } - .into(), - ), - ( - -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![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" - .into()), (5u32, "High".into()), (6u32, "Full".into()) - ] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![].into_iter().collect(), - } - .into(), - ), - ( - 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![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" - .into()), (5u32, "High".into()), (6u32, "Full".into()) - ] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![].into_iter().collect(), - } - .into(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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![ - (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 2060134443i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemCableCoilHeavy".into(), - prefab_hash: 2060134443i32, - desc: "Use heavy cable coil for power systems with large draws. Unlike , 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), 5f64)].into_iter().collect()), - slot_class: Class::None, - sorting_class: SortingClass::Food, - }, - thermal_info: None, - internal_atmo_info: None, - } - .into(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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![ - (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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![ - SlotInfo { name : "".into(), typ : Class::Egg }, SlotInfo { name : "" - .into(), typ : Class::Egg }, SlotInfo { name : "".into(), typ : - Class::Egg }, SlotInfo { name : "".into(), typ : Class::Egg }, - SlotInfo { name : "".into(), typ : Class::Egg }, SlotInfo { name : "" - .into(), typ : Class::Egg } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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![ - (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - -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![ - (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - SlotInfo { name : "Air Tank".into(), typ : Class::GasCanister }, - SlotInfo { name : "Waste Tank".into(), typ : Class::GasCanister }, - SlotInfo { name : "Life Support".into(), typ : Class::Battery }, - SlotInfo { name : "Filter".into(), typ : Class::GasFilter }, SlotInfo - { name : "Filter".into(), typ : Class::GasFilter }, SlotInfo { name : - "Filter".into(), typ : Class::GasFilter } - ] - .into_iter() - .collect(), - suit_info: SuitInfo { - hygine_reduction_multiplier: 1f32, - waste_max_pressure: 4053f32, - }, - } - .into(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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![ - SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name - : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool" - .into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : - Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, - SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name - : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool" - .into(), typ : Class::Tool } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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![ - SlotInfo { name : "Air Tank".into(), typ : Class::GasCanister }, - SlotInfo { name : "Waste Tank".into(), typ : Class::GasCanister }, - SlotInfo { name : "Life Support".into(), typ : Class::Battery }, - SlotInfo { name : "Filter".into(), typ : Class::GasFilter }, SlotInfo - { name : "Filter".into(), typ : Class::GasFilter }, SlotInfo { name : - "Filter".into(), typ : Class::GasFilter } - ] - .into_iter() - .collect(), - suit_info: SuitInfo { - hygine_reduction_multiplier: 1f32, - waste_max_pressure: 4053f32, - }, - } - .into(), - ), - ( - 235361649i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemExplosive".into(), - prefab_hash: 235361649i32, - desc: "".into(), - name: "Remote Explosive".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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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![ - (0u32, 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![(0u32, "Low Power".into()), (1u32, "High Power".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - (0u32, 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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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()), (12u32, vec![(LogicSlotType::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()), (13u32, vec![(LogicSlotType::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()), (14u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Propellant".into(), typ : Class::GasCanister }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ - : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ - : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ - : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ - : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ - : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ - : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ - : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - (0u32, 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()), (1u32, 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()), (2u32, 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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Air Tank".into(), typ : Class::GasCanister }, - SlotInfo { name : "Waste Tank".into(), typ : Class::GasCanister }, - SlotInfo { name : "Life Support".into(), typ : Class::Battery }, - SlotInfo { name : "Programmable Chip".into(), typ : - Class::ProgrammableChip }, SlotInfo { name : "Filter".into(), typ : - Class::GasFilter }, SlotInfo { name : "Filter".into(), typ : - Class::GasFilter }, SlotInfo { name : "Filter".into(), typ : - Class::GasFilter }, SlotInfo { name : "Filter".into(), typ : - Class::GasFilter } - ] - .into_iter() - .collect(), - suit_info: SuitInfo { - hygine_reduction_multiplier: 1.5f32, - waste_max_pressure: 4053f32, - }, - memory: MemoryInfo { - instructions: None, - memory_access: MemoryAccess::ReadWrite, - memory_size: 0u32, - }, - } - .into(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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![ - SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name - : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Plant" - .into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ - : Class::Plant }, SlotInfo { name : "Plant".into(), typ : - Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant - }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { - name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : - "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant" - .into(), typ : Class::Plant } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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![ - (0u32, 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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Propellant".into(), typ : Class::GasCanister }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 1459985302i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemKitReinforcedWindows".into(), - prefab_hash: 1459985302i32, - desc: "".into(), - name: "Kit (Reinforced Windows)".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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 1779979754i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemKitWindowShutter".into(), - prefab_hash: 1779979754i32, - desc: "".into(), - name: "Kit (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(), - ), - ( - -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![ - (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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()), (1u32, 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()), (2u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Programmable Chip".into(), typ : - Class::ProgrammableChip }, SlotInfo { name : "Battery".into(), typ : - Class::Battery }, SlotInfo { name : "Motherboard".into(), typ : - Class::Motherboard } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -2126113312i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemLiquidPipeValve".into(), - prefab_hash: -2126113312i32, - desc: "This kit creates a Liquid Valve." - .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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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![ - (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - 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![ - (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - -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![ - (0u32, 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![(0u32, "Default".into()), (1u32, "Flatten".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - -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![ - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ - : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ - : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ - : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ - : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ - : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ - : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name - : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Ore".into(), - typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore - }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { - name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore" - .into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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()), (12u32, vec![(LogicSlotType::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()), (13u32, vec![(LogicSlotType::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()), (14u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name - : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Ore".into(), - typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore - }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { - name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore" - .into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ - : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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: 1u32, - reagents: None, - slot_class: Class::None, - sorting_class: SortingClass::Default, - }, - thermal_info: None, - internal_atmo_info: None, - } - .into(), - ), - ( - 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![ - (0u32, 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![(0u32, "Default".into()), (1u32, "Flatten".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - (0u32, 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![(0u32, "Default".into()), (1u32, "Flatten".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name - : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool" - .into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : - Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, - SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name - : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool" - .into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : - Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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![ - (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 238631271i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemPassiveVent".into(), - prefab_hash: 238631271i32, - desc: "This kit creates a Passive Vent among other variants." - .into(), - name: "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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 799323450i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemPipeValve".into(), - prefab_hash: 799323450i32, - desc: "This kit creates a Valve." - .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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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![ - (0u32, 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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 678483886i32, - ItemLogicTemplate { - prefab: PrefabInfo { - prefab_name: "ItemRemoteDetonator".into(), - prefab_hash: 678483886i32, - desc: "".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![ - (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - SlotInfo { name : "Liquid Canister".into(), typ : - Class::LiquidCanister } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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![ - (0u32, 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()), (1u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo - { name : "Sensor Processing Unit".into(), typ : - Class::SensorProcessingUnit } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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![ - (0u32, 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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Propellant".into(), typ : Class::GasCanister }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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![SlotInfo { name : "Spray Can".into(), typ : Class::Bottle }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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 Atmos Analyzer or Tracker, Medical Analyzer, Ore Scanner, 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![ - (0u32, 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()), (1u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo - { name : "Cartridge".into(), typ : Class::Cartridge } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - (0u32, 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()), (1u32, vec![(LogicSlotType::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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo - { name : "Dirt Canister".into(), typ : Class::Ore } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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![ - SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name - : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool" - .into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : - Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, - SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name - : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool" - .into(), typ : Class::Tool } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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![ - (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" - .into()), (5u32, "High".into()), (6u32, "Full".into()) - ] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![].into_iter().collect(), - } - .into(), - ), - ( - -1826023284i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemWreckageAirConditioner1".into(), - prefab_hash: -1826023284i32, - desc: "".into(), - name: "Wreckage Air Conditioner".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(), - ), - ( - 169888054i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemWreckageAirConditioner2".into(), - prefab_hash: 169888054i32, - desc: "".into(), - name: "Wreckage Air Conditioner".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(), - ), - ( - -310178617i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemWreckageHydroponicsTray1".into(), - prefab_hash: -310178617i32, - desc: "".into(), - name: "Wreckage Hydroponics Tray".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(), - ), - ( - -997763i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemWreckageLargeExtendableRadiator01".into(), - prefab_hash: -997763i32, - desc: "".into(), - name: "Wreckage Large Extendable Radiator".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(), - ), - ( - 391453348i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemWreckageStructureRTG1".into(), - prefab_hash: 391453348i32, - desc: "".into(), - name: "Wreckage Structure RTG".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(), - ), - ( - -834664349i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemWreckageStructureWeatherStation001".into(), - prefab_hash: -834664349i32, - desc: "".into(), - name: "Wreckage Structure Weather Station".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(), - ), - ( - 1464424921i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemWreckageStructureWeatherStation002".into(), - prefab_hash: 1464424921i32, - desc: "".into(), - name: "Wreckage Structure Weather Station".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(), - ), - ( - 542009679i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemWreckageStructureWeatherStation003".into(), - prefab_hash: 542009679i32, - desc: "".into(), - name: "Wreckage Structure Weather Station".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(), - ), - ( - -1104478996i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemWreckageStructureWeatherStation004".into(), - prefab_hash: -1104478996i32, - desc: "".into(), - name: "Wreckage Structure Weather Station".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(), - ), - ( - -919745414i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemWreckageStructureWeatherStation005".into(), - prefab_hash: -919745414i32, - desc: "".into(), - name: "Wreckage Structure Weather Station".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(), - ), - ( - 1344576960i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemWreckageStructureWeatherStation006".into(), - prefab_hash: 1344576960i32, - desc: "".into(), - name: "Wreckage Structure Weather Station".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(), - ), - ( - 656649558i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemWreckageStructureWeatherStation007".into(), - prefab_hash: 656649558i32, - desc: "".into(), - name: "Wreckage Structure Weather Station".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(), - ), - ( - -1214467897i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemWreckageStructureWeatherStation008".into(), - prefab_hash: -1214467897i32, - desc: "".into(), - name: "Wreckage Structure Weather Station".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(), - ), - ( - -1662394403i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemWreckageTurbineGenerator1".into(), - prefab_hash: -1662394403i32, - desc: "".into(), - name: "Wreckage Turbine Generator".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(), - ), - ( - 98602599i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemWreckageTurbineGenerator2".into(), - prefab_hash: 98602599i32, - desc: "".into(), - name: "Wreckage Turbine Generator".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(), - ), - ( - 1927790321i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemWreckageTurbineGenerator3".into(), - prefab_hash: 1927790321i32, - desc: "".into(), - name: "Wreckage Turbine Generator".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(), - ), - ( - -1682930158i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemWreckageWallCooler1".into(), - prefab_hash: -1682930158i32, - desc: "".into(), - name: "Wreckage Wall Cooler".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(), - ), - ( - 45733800i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "ItemWreckageWallCooler2".into(), - prefab_hash: 45733800i32, - desc: "".into(), - name: "Wreckage Wall Cooler".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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "Entity".into(), typ : Class::Entity } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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![ - (0u32, "None".into()), (1u32, "NoContact".into()), (2u32, - "Moving".into()), (3u32, "Holding".into()), (4u32, "Landed" - .into()) - ] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![].into_iter().collect(), - } - .into(), - ), - ( - 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(), - ), - ( - -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![ - (0u32, "None".into()), (1u32, "NoContact".into()), (2u32, - "Moving".into()), (3u32, "Holding".into()), (4u32, "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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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![ - (0u32, "Whole Note".into()), (1u32, "Half Note".into()), - (2u32, "Quarter Note".into()), (3u32, "Eighth Note".into()), - (4u32, "Sixteenth Note".into()) - ] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![ - SlotInfo { name : "Sound Cartridge".into(), typ : - Class::SoundCartridge } - ] - .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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -337075633i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "MotherboardComms".into(), - prefab_hash: -337075633i32, - 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." - .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(), - ), - ( - 502555944i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "MotherboardLogic".into(), - prefab_hash: 502555944i32, - 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." - .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(), - ), - ( - -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(), - ), - ( - -161107071i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "MotherboardProgrammableChip".into(), - prefab_hash: -161107071i32, - 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." - .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(), - ), - ( - -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(), - ), - ( - -1908268220i32, - ItemTemplate { - prefab: PrefabInfo { - prefab_name: "MotherboardSorter".into(), - prefab_hash: -1908268220i32, - 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." - .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(), - ), - ( - -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(), - ), - ( - 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![ - SlotInfo { name : "Brain".into(), typ : Class::Organ }, SlotInfo { - name : "Lungs".into(), typ : Class::Organ } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - SlotInfo { name : "Brain".into(), typ : Class::Organ }, SlotInfo { - name : "Lungs".into(), typ : Class::Organ } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::Battery }, SlotInfo { name : "Liquid Canister".into(), typ : - Class::LiquidCanister } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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![ - (0u32, 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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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![ - (0u32, "None".into()), (1u32, "Follow".into()), (2u32, - "MoveToTarget".into()), (3u32, "Roam".into()), (4u32, - "Unload".into()), (5u32, "PathToTarget".into()), (6u32, - "StorageFull".into()) - ] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: true, - circuit_holder: true, - }, - slots: vec![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo - { name : "Programmable Chip".into(), typ : Class::ProgrammableChip }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ - : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ - : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, 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()), (6u32, 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()), (7u32, 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()), (8u32, 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()), (9u32, 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()), (10u32, 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()), (11u32, 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()), (12u32, vec![(LogicSlotType::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()), (13u32, vec![(LogicSlotType::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()), (14u32, vec![(LogicSlotType::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()), (15u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Entity".into(), typ : Class::Entity }, SlotInfo { - name : "Entity".into(), typ : Class::Entity }, SlotInfo { name : - "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo { name : - "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo { name : - "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo { name : - "Gas Canister".into(), typ : Class::GasCanister }, SlotInfo { name : - "Gas Canister".into(), typ : Class::GasCanister }, SlotInfo { name : - "Gas Canister".into(), typ : Class::GasCanister }, SlotInfo { name : - "Gas Canister".into(), typ : Class::GasCanister }, SlotInfo { name : - "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Battery" - .into(), typ : Class::Battery }, SlotInfo { name : "Battery".into(), - typ : Class::Battery }, SlotInfo { name : "Container Slot".into(), - typ : Class::None }, SlotInfo { name : "Container Slot".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : - Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, 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()), (3u32, 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()), (4u32, 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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Entity".into(), typ : Class::Entity }, SlotInfo { - name : "Entity".into(), typ : Class::Entity }, SlotInfo { name : - "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Battery" - .into(), typ : Class::Battery }, SlotInfo { name : "Battery".into(), - typ : Class::Battery }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { - name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), - typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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![ - SlotInfo { name : "Captain\'s Seat".into(), typ : Class::Entity }, - SlotInfo { name : "Passenger Seat Left".into(), typ : Class::Entity - }, SlotInfo { name : "Passenger Seat Right".into(), typ : - Class::Entity } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![(0u32, "Outward".into()), (1u32, "Inward".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![SlotInfo { name : "".into(), typ : Class::DataDisk }] - .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(), - ), - ( - 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![ - (0u32, vec![] .into_iter().collect()), (1u32, 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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None } - ] - .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(), - ), - ( - 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![ - (0u32, vec![] .into_iter().collect()), (1u32, 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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None } - ] - .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(), - ), - ( - -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![ - (0u32, vec![] .into_iter().collect()), (1u32, 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![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None } - ] - .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_resouces: 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![ - ("ItemCannedCondensedMilk".into(), Recipe { 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() }), ("ItemCannedEdamame".into(), Recipe { - 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() }), ("ItemCannedMushroom" - .into(), Recipe { 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(), 8f64), ("Oil".into(), - 1f64), ("Steel".into(), 1f64)] .into_iter().collect() }), - ("ItemCannedPowderedEggs".into(), Recipe { 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() }), ("ItemCannedRicePudding" - .into(), Recipe { 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() }), - ("ItemCornSoup".into(), Recipe { 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() }), ("ItemFrenchFries".into(), Recipe { 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() }), ("ItemPumpkinSoup" - .into(), Recipe { 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(), - 5f64), ("Steel".into(), 1f64)] .into_iter().collect() }), - ("ItemTomatoSoup".into(), Recipe { 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() }) - ] - .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(), typ : "PrinterInstruction".into(), value : 6i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) - ] - .into_iter() - .collect(), - ), - memory_access: MemoryAccess::ReadWrite, - memory_size: 64u32, - }, - } - .into(), - ), - ( - -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![(0u32, 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![(0u32, "Idle".into()), (1u32, "Active".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: true, - }, - slots: vec![ - SlotInfo { name : "Programmable Chip".into(), typ : - Class::ProgrammableChip } - ] - .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(), - ), - ( - -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![(0u32, "Operate".into()), (1u32, "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(), - ), - ( - 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![(0u32, "Operate".into()), (1u32, "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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] - .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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Import".into(), typ : Class::Ore }, SlotInfo { - name : "Export".into(), typ : Class::Ingot } - ] - .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(), - ), - ( - 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![ - (0u32, 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()), (1u32, vec![(LogicSlotType::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![ - (0u32, "Idle".into()), (1u32, "Discharged".into()), (2u32, - "Discharging".into()), (3u32, "Charging".into()), (4u32, - "Charged".into()) - ] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo - { name : "Data Disk".into(), typ : Class::DataDisk } - ] - .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(), - ), - ( - -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![ - (0u32, 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()), (1u32, vec![(LogicSlotType::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![ - (0u32, "Idle".into()), (1u32, "Discharged".into()), (2u32, - "Discharging".into()), (3u32, "Charging".into()), (4u32, - "Charged".into()) - ] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo - { name : "Data Disk".into(), typ : Class::DataDisk } - ] - .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(), - ), - ( - 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![ - (0u32, vec![] .into_iter().collect()), (1u32, 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![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None } - ] - .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(), - ), - ( - 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![ - (0u32, vec![] .into_iter().collect()), (1u32, 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![ - SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { - name : "Export".into(), typ : Class::None } - ] - .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_resouces: 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![ - ("CardboardBox".into(), Recipe { 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() }), ("ItemCableCoil" - .into(), Recipe { 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() }), ("ItemCoffeeMug".into(), Recipe { 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() }), - ("ItemEggCarton".into(), Recipe { 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() }), ("ItemEmptyCan" - .into(), Recipe { 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() }), ("ItemEvaSuit".into(), Recipe { 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() }), ("ItemGlassSheets".into(), Recipe { 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() }), - ("ItemIronFrames".into(), Recipe { 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() }), ("ItemIronSheets".into(), - Recipe { 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() }), ("ItemKitAccessBridge".into(), Recipe { 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() }), ("ItemKitArcFurnace" - .into(), Recipe { 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() }), ("ItemKitAutolathe".into(), - Recipe { 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() }), - ("ItemKitBeds".into(), Recipe { 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() - }), ("ItemKitBlastDoor".into(), Recipe { 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() }), ("ItemKitCentrifuge".into(), Recipe { - 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() }), ("ItemKitChairs".into(), Recipe { 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() }), ("ItemKitChute".into(), Recipe { 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() }), - ("ItemKitCompositeCladding".into(), Recipe { 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() }), - ("ItemKitCompositeFloorGrating".into(), Recipe { 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() }), - ("ItemKitCrate".into(), Recipe { 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() }), ("ItemKitCrateMkII".into(), - Recipe { 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() }), ("ItemKitCrateMount".into(), - Recipe { 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() }), ("ItemKitDeepMiner".into(), Recipe { 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() }), ("ItemKitDoor".into(), Recipe { 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() }), ("ItemKitElectronicsPrinter".into(), Recipe { 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() }), ("ItemKitFlagODA" - .into(), Recipe { 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() }), ("ItemKitFurnace".into(), Recipe { 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() }), ("ItemKitFurniture".into(), Recipe { - 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() }), ("ItemKitHydraulicPipeBender".into(), - Recipe { 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() }), - ("ItemKitInteriorDoors".into(), Recipe { 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() }), ("ItemKitLadder".into(), Recipe { 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() }), - ("ItemKitLocker".into(), Recipe { 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() }), ("ItemKitPipe".into(), Recipe { - 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() }), - ("ItemKitRailing".into(), Recipe { 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() }), ("ItemKitRecycler".into(), - Recipe { 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() }), ("ItemKitReinforcedWindows" - .into(), Recipe { 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![("Steel".into(), 2f64)] .into_iter() - .collect() }), ("ItemKitRespawnPointWallMounted".into(), Recipe { - 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() }), ("ItemKitRocketManufactory".into(), Recipe { 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() }), ("ItemKitSDBHopper" - .into(), Recipe { 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() }), ("ItemKitSecurityPrinter".into(), Recipe { 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() }), ("ItemKitSign" - .into(), Recipe { 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() }), ("ItemKitSorter".into(), Recipe { 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() }), ("ItemKitStacker" - .into(), Recipe { 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() }), ("ItemKitStairs".into(), - Recipe { 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() }), ("ItemKitStairwell".into(), Recipe { 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() }), - ("ItemKitStandardChute".into(), Recipe { 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() }), - ("ItemKitTables".into(), Recipe { 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() - }), ("ItemKitToolManufactory".into(), Recipe { 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() }), ("ItemKitWall".into(), Recipe { 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() }), - ("ItemKitWallArch".into(), Recipe { 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() }), ("ItemKitWallFlat" - .into(), Recipe { 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() }), ("ItemKitWallGeometry".into(), Recipe { 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() }), - ("ItemKitWallIron".into(), Recipe { 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() }), ("ItemKitWallPadded".into(), - Recipe { 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() }), ("ItemKitWindowShutter".into(), Recipe { 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![("Iron".into(), 1f64), ("Steel".into(), 2f64)] .into_iter() - .collect() }), ("ItemPlasticSheets".into(), Recipe { 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() }), - ("ItemSpaceHelmet".into(), Recipe { 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() }), - ("ItemSteelFrames".into(), Recipe { 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() }), ("ItemSteelSheets" - .into(), Recipe { 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() }), ("ItemStelliteGlassSheets".into(), Recipe { 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() }), ("ItemWallLight".into(), Recipe { 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() }), ("KitSDBSilo".into(), - Recipe { 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() }), - ("KitStructureCombustionCentrifuge".into(), Recipe { 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() }) - ] - .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(), typ : "PrinterInstruction".into(), value : 6i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) - ] - .into_iter() - .collect(), - ), - memory_access: MemoryAccess::ReadWrite, - memory_size: 64u32, - }, - } - .into(), - ), - ( - -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![ - (0u32, vec![] .into_iter().collect()), (1u32, 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![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None } - ] - .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_resouces: 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![ - ("ItemBreadLoaf".into(), Recipe { 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() - }), ("ItemCerealBar".into(), Recipe { 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() }), - ("ItemChocolateBar".into(), Recipe { 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() - }), ("ItemChocolateCake".into(), Recipe { 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() }), ("ItemChocolateCerealBar".into(), - Recipe { 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() }), ("ItemCookedCondensedMilk".into(), - Recipe { 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() }), - ("ItemCookedCorn".into(), Recipe { 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() }), ("ItemCookedMushroom".into(), - Recipe { 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() }), - ("ItemCookedPowderedEggs".into(), Recipe { 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() }), - ("ItemCookedPumpkin".into(), Recipe { 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() }), - ("ItemCookedRice".into(), Recipe { 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(), - 3f64)] .into_iter().collect() }), ("ItemCookedSoybean".into(), - Recipe { 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(), 5f64)] .into_iter().collect() }), - ("ItemCookedTomato".into(), Recipe { 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() }), ("ItemFries".into(), - Recipe { 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() }), ("ItemMuffin".into(), Recipe { 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() }), ("ItemPlainCake" - .into(), Recipe { 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() }), ("ItemPotatoBaked".into(), Recipe { - 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() }), - ("ItemPumpkinPie".into(), Recipe { 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() }) - ] - .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(), typ : "PrinterInstruction".into(), value : 6i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) - ] - .into_iter() - .collect(), - ), - memory_access: MemoryAccess::ReadWrite, - memory_size: 64u32, - }, - } - .into(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" - .into()), (5u32, "High".into()), (6u32, "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(), - ), - ( - 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![ - (0u32, 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()), (1u32, 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()), (2u32, 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()), (3u32, 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()), (4u32, 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![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo - { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : - "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Battery" - .into(), typ : Class::Battery }, SlotInfo { name : "Battery".into(), - typ : Class::Battery } - ] - .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(), - ), - ( - -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![ - (0u32, 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()), (1u32, 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![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo - { name : "Battery".into(), typ : Class::Battery } - ] - .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(), - ), - ( - -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![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" - .into()), (5u32, "High".into()), (6u32, "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(), - ), - ( - -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![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" - .into()), (5u32, "High".into()), (6u32, "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(), - ), - ( - -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![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium" - .into()), (5u32, "High".into()), (6u32, "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(), - ), - ( - -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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, - SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } - ] - .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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, - SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } - ] - .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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, - SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } - ] - .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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, - SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } - ] - .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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, - SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } - ] - .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(), - ), - ( - 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![(0u32, "Operate".into()), (1u32, "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(), - ), - ( - 697908419i32, - StructureLogicDeviceTemplate { - prefab: PrefabInfo { - prefab_name: "StructureBlockBed".into(), - prefab_hash: 697908419i32, - desc: "Description coming.".into(), - name: "Block Bed".into(), - }, - structure: StructureInfo { small_grid: true }, - thermal_info: None, - internal_atmo_info: None, - logic: LogicInfo { - logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Bed".into(), typ : Class::Entity }] - .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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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![(0u32, "Mode0".into()), (1u32, "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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()), (2u32, vec![] .into_iter().collect()), (3u32, vec![] - .into_iter().collect()), (4u32, vec![] .into_iter().collect()), - (5u32, vec![] .into_iter().collect()), (6u32, vec![] .into_iter() - .collect()), (7u32, vec![] .into_iter().collect()), (8u32, vec![] - .into_iter().collect()), (9u32, vec![] .into_iter().collect()), - (10u32, vec![] .into_iter().collect()), (11u32, vec![] - .into_iter().collect()), (12u32, vec![] .into_iter().collect()), - (13u32, vec![] .into_iter().collect()), (14u32, vec![] - .into_iter().collect()), (15u32, vec![] .into_iter().collect()), - (16u32, vec![] .into_iter().collect()), (17u32, vec![] - .into_iter().collect()), (18u32, vec![] .into_iter().collect()), - (19u32, vec![] .into_iter().collect()), (20u32, vec![] - .into_iter().collect()), (21u32, vec![] .into_iter().collect()), - (22u32, vec![] .into_iter().collect()), (23u32, vec![] - .into_iter().collect()), (24u32, vec![] .into_iter().collect()), - (25u32, vec![] .into_iter().collect()), (26u32, vec![] - .into_iter().collect()), (27u32, vec![] .into_iter().collect()), - (28u32, vec![] .into_iter().collect()), (29u32, vec![] - .into_iter().collect()), (30u32, vec![] .into_iter().collect()), - (31u32, vec![] .into_iter().collect()), (32u32, vec![] - .into_iter().collect()), (33u32, vec![] .into_iter().collect()), - (34u32, vec![] .into_iter().collect()), (35u32, vec![] - .into_iter().collect()), (36u32, vec![] .into_iter().collect()), - (37u32, vec![] .into_iter().collect()), (38u32, vec![] - .into_iter().collect()), (39u32, vec![] .into_iter().collect()), - (40u32, vec![] .into_iter().collect()), (41u32, vec![] - .into_iter().collect()), (42u32, vec![] .into_iter().collect()), - (43u32, vec![] .into_iter().collect()), (44u32, vec![] - .into_iter().collect()), (45u32, vec![] .into_iter().collect()), - (46u32, vec![] .into_iter().collect()), (47u32, vec![] - .into_iter().collect()), (48u32, vec![] .into_iter().collect()), - (49u32, vec![] .into_iter().collect()), (50u32, vec![] - .into_iter().collect()), (51u32, vec![] .into_iter().collect()), - (52u32, vec![] .into_iter().collect()), (53u32, vec![] - .into_iter().collect()), (54u32, vec![] .into_iter().collect()), - (55u32, vec![] .into_iter().collect()), (56u32, vec![] - .into_iter().collect()), (57u32, vec![] .into_iter().collect()), - (58u32, vec![] .into_iter().collect()), (59u32, vec![] - .into_iter().collect()), (60u32, vec![] .into_iter().collect()), - (61u32, vec![] .into_iter().collect()), (62u32, vec![] - .into_iter().collect()), (63u32, vec![] .into_iter().collect()), - (64u32, vec![] .into_iter().collect()), (65u32, vec![] - .into_iter().collect()), (66u32, vec![] .into_iter().collect()), - (67u32, vec![] .into_iter().collect()), (68u32, vec![] - .into_iter().collect()), (69u32, vec![] .into_iter().collect()), - (70u32, vec![] .into_iter().collect()), (71u32, vec![] - .into_iter().collect()), (72u32, vec![] .into_iter().collect()), - (73u32, vec![] .into_iter().collect()), (74u32, vec![] - .into_iter().collect()), (75u32, vec![] .into_iter().collect()), - (76u32, vec![] .into_iter().collect()), (77u32, vec![] - .into_iter().collect()), (78u32, vec![] .into_iter().collect()), - (79u32, vec![] .into_iter().collect()), (80u32, vec![] - .into_iter().collect()), (81u32, vec![] .into_iter().collect()), - (82u32, vec![] .into_iter().collect()), (83u32, vec![] - .into_iter().collect()), (84u32, vec![] .into_iter().collect()), - (85u32, vec![] .into_iter().collect()), (86u32, vec![] - .into_iter().collect()), (87u32, vec![] .into_iter().collect()), - (88u32, vec![] .into_iter().collect()), (89u32, vec![] - .into_iter().collect()), (90u32, vec![] .into_iter().collect()), - (91u32, vec![] .into_iter().collect()), (92u32, vec![] - .into_iter().collect()), (93u32, vec![] .into_iter().collect()), - (94u32, vec![] .into_iter().collect()), (95u32, vec![] - .into_iter().collect()), (96u32, vec![] .into_iter().collect()), - (97u32, vec![] .into_iter().collect()), (98u32, vec![] - .into_iter().collect()), (99u32, vec![] .into_iter().collect()), - (100u32, vec![] .into_iter().collect()), (101u32, 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![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None } - ] - .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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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()), (12u32, vec![(LogicSlotType::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()), (13u32, vec![(LogicSlotType::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()), (14u32, vec![(LogicSlotType::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()), (15u32, vec![(LogicSlotType::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()), (16u32, vec![(LogicSlotType::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()), (17u32, vec![(LogicSlotType::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()), (18u32, vec![(LogicSlotType::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()), (19u32, vec![(LogicSlotType::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()), (20u32, vec![(LogicSlotType::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()), (21u32, vec![(LogicSlotType::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()), (22u32, vec![(LogicSlotType::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()), (23u32, vec![(LogicSlotType::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()), (24u32, vec![(LogicSlotType::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()), (25u32, vec![(LogicSlotType::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()), (26u32, vec![(LogicSlotType::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()), (27u32, vec![(LogicSlotType::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()), (28u32, vec![(LogicSlotType::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()), (29u32, vec![(LogicSlotType::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()), (30u32, vec![(LogicSlotType::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()), (31u32, vec![(LogicSlotType::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()), (32u32, vec![(LogicSlotType::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()), (33u32, vec![(LogicSlotType::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()), (34u32, vec![(LogicSlotType::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()), (35u32, vec![(LogicSlotType::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()), (36u32, vec![(LogicSlotType::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()), (37u32, vec![(LogicSlotType::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()), (38u32, vec![(LogicSlotType::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()), (39u32, vec![(LogicSlotType::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()), (40u32, vec![(LogicSlotType::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()), (41u32, vec![(LogicSlotType::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()), (42u32, vec![(LogicSlotType::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()), (43u32, vec![(LogicSlotType::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()), (44u32, vec![(LogicSlotType::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()), (45u32, vec![(LogicSlotType::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()), (46u32, vec![(LogicSlotType::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()), (47u32, vec![(LogicSlotType::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()), (48u32, vec![(LogicSlotType::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()), (49u32, vec![(LogicSlotType::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()), (50u32, vec![(LogicSlotType::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()), (51u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None } - ] - .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(), - ), - ( - 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![ - (0u32, vec![] .into_iter().collect()), (1u32, 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![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None } - ] - .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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] - .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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] - .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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] - .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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] - .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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] - .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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] - .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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] - .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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] - .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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] - .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(), - ), - ( - -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 Bin".into(), - }, - structure: StructureInfo { small_grid: true }, - thermal_info: None, - internal_atmo_info: None, - logic: LogicInfo { - logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Input".into(), typ : Class::None }] - .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(), - ), - ( - 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![ - SlotInfo { name : "Transport Slot".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![ - SlotInfo { name : "Transport Slot".into(), typ : Class::None } - ] - .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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![ - SlotInfo { name : "Transport Slot".into(), typ : Class::None } - ] - .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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Transport Slot".into(), typ : Class::None } - ] - .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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Transport Slot".into(), typ : Class::None } - ] - .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(), - ), - ( - -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![ - SlotInfo { name : "Transport Slot".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Import".into(), typ : Class::None }] - .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(), - ), - ( - -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![ - SlotInfo { name : "Transport Slot".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Export".into(), typ : Class::None }] - .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(), - ), - ( - 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![ - SlotInfo { name : "Transport Slot".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - SlotInfo { name : "Transport Slot".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Transport Slot".into(), typ : Class::None } - ] - .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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Transport Slot".into(), typ : Class::None } - ] - .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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![ - (0u32, "Left".into()), (1u32, "Center".into()), (2u32, - "Right".into()) - ] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![ - SlotInfo { name : "Transport Slot".into(), typ : Class::None } - ] - .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(), - ), - ( - 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![ - SlotInfo { name : "Transport Slot".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - SlotInfo { name : "Transport Slot".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Programmable Chip".into(), typ : - Class::ProgrammableChip } - ] - .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(), - ), - ( - 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![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()), (2u32, 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![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None }, SlotInfo { name : - "Programmable Chip".into(), typ : Class::ProgrammableChip } - ] - .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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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![(0u32, "Operate".into()), (1u32, "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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -626563514i32, - StructureLogicDeviceTemplate { - prefab: PrefabInfo { - prefab_name: "StructureComputer".into(), - prefab_hash: -626563514i32, - 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" - .into(), - name: "Computer".into(), - }, - structure: StructureInfo { small_grid: true }, - thermal_info: None, - internal_atmo_info: None, - logic: LogicInfo { - logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()), (2u32, 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![ - SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk }, - SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk }, - SlotInfo { name : "Motherboard".into(), typ : Class::Motherboard } - ] - .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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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![ - (0u32, vec![] .into_iter().collect()), (1u32, 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![ - SlotInfo { name : "Circuit Board".into(), typ : Class::Circuitboard - }, SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk } - ] - .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(), - ), - ( - -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![ - (0u32, vec![] .into_iter().collect()), (1u32, 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![ - SlotInfo { name : "Circuit Board".into(), typ : Class::Circuitboard - }, SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk } - ] - .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(), - ), - ( - -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![ - (0u32, "Default".into()), (1u32, "Percent".into()), (2u32, - "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(), - ), - ( - -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![ - (0u32, "Default".into()), (1u32, "Percent".into()), (2u32, - "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(), - ), - ( - -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![ - (0u32, "Default".into()), (1u32, "Percent".into()), (2u32, - "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(), - ), - ( - 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![ - (0u32, vec![] .into_iter().collect()), (1u32, 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![ - SlotInfo { name : "Circuit Board".into(), typ : Class::Circuitboard - }, SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk } - ] - .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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![SlotInfo { name : "Entity".into(), typ : Class::Entity }] - .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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None } - ] - .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(), - ), - ( - -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![ - SlotInfo { name : "Container Slot".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Bed".into(), typ : Class::Entity }] - .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(), - ), - ( - 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![(0u32, 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![SlotInfo { name : "Player".into(), typ : Class::Entity }] - .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(), - ), - ( - -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![(0u32, 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![SlotInfo { name : "Player".into(), typ : Class::Entity }] - .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(), - ), - ( - 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![ - (0u32, "Default".into()), (1u32, "Horizontal".into()), (2u32, - "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(), - ), - ( - 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![(0u32, 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![SlotInfo { name : "Export".into(), typ : Class::None }] - .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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 1968371847i32, - StructureLogicDeviceTemplate { - prefab: PrefabInfo { - prefab_name: "StructureDrinkingFountain".into(), - prefab_hash: 1968371847i32, - desc: "".into(), - name: "".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(), - ), - ( - -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![(0u32, 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![(0u32, "Idle".into()), (1u32, "Active".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: true, - }, - slots: vec![ - SlotInfo { name : "Programmable Chip".into(), typ : - Class::ProgrammableChip } - ] - .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(), - ), - ( - 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![ - (0u32, vec![] .into_iter().collect()), (1u32, 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![ - SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { - name : "Export".into(), typ : Class::None } - ] - .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_resouces: 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![ - ("ApplianceChemistryStation".into(), Recipe { 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() }), - ("ApplianceDeskLampLeft".into(), Recipe { 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() }), ("ApplianceDeskLampRight".into(), - Recipe { 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() }), ("ApplianceMicrowave".into(), - Recipe { 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() }), - ("AppliancePackagingMachine".into(), Recipe { 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() }), - ("AppliancePaintMixer".into(), Recipe { 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() }), - ("AppliancePlantGeneticAnalyzer".into(), Recipe { 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() }), - ("AppliancePlantGeneticSplicer".into(), Recipe { 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() }), ("AppliancePlantGeneticStabilizer" - .into(), Recipe { 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() }), - ("ApplianceReagentProcessor".into(), Recipe { 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() }), ("ApplianceTabletDock" - .into(), Recipe { 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() }), ("AutolathePrinterMod".into(), Recipe - { 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() }), ("Battery_Wireless_cell".into(), Recipe { 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() }), - ("Battery_Wireless_cell_Big".into(), Recipe { 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() }), - ("CartridgeAtmosAnalyser".into(), Recipe { 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() }), - ("CartridgeConfiguration".into(), Recipe { 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() }), - ("CartridgeElectronicReader".into(), Recipe { 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() }), ("CartridgeGPS" - .into(), Recipe { 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() }), - ("CartridgeMedicalAnalyser".into(), Recipe { 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() }), - ("CartridgeNetworkAnalyser".into(), Recipe { 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() }), ("CartridgeOreScanner" - .into(), Recipe { 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() }), - ("CartridgeOreScannerColor".into(), Recipe { 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() }), ("CartridgePlantAnalyser".into(), Recipe { 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() }), ("CartridgeTracker" - .into(), Recipe { 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() }), - ("CircuitboardAdvAirlockControl".into(), Recipe { 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() }), - ("CircuitboardAirControl".into(), Recipe { 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() }), ("CircuitboardAirlockControl".into(), Recipe { - 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() }), - ("CircuitboardDoorControl".into(), Recipe { 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() }), ("CircuitboardGasDisplay".into(), Recipe { 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() }), - ("CircuitboardGraphDisplay".into(), Recipe { 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() }), ("CircuitboardHashDisplay".into(), Recipe { 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() }), ("CircuitboardModeControl".into(), Recipe { 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() }), ("CircuitboardPowerControl".into(), Recipe { 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() }), ("CircuitboardShipDisplay".into(), Recipe { 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() }), ("CircuitboardSolarControl".into(), Recipe { 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() }), ("DynamicLight".into(), Recipe { 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() }), ("ElectronicPrinterMod".into(), Recipe { 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() }), ("ItemAdvancedTablet".into(), Recipe { 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() }), - ("ItemAreaPowerControl".into(), Recipe { 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() }), ("ItemBatteryCell" - .into(), Recipe { 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() }), - ("ItemBatteryCellLarge".into(), Recipe { 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() }), - ("ItemBatteryCellNuclear".into(), Recipe { 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() }), - ("ItemBatteryCharger".into(), Recipe { 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() }), - ("ItemBatteryChargerSmall".into(), Recipe { 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() }), ("ItemCableAnalyser" - .into(), Recipe { 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() }), - ("ItemCableCoil".into(), Recipe { 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() }), - ("ItemCableCoilHeavy".into(), Recipe { 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() }), ("ItemCableFuse".into(), Recipe { 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() }), ("ItemCreditCard".into(), Recipe { 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() }), ("ItemDataDisk".into(), Recipe { 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() }), ("ItemElectronicParts".into(), Recipe { 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() }), ("ItemFlashingLight" - .into(), Recipe { 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() }), ("ItemHEMDroidRepairKit" - .into(), Recipe { 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() - }), ("ItemIntegratedCircuit10".into(), Recipe { 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() - }), ("ItemKitAIMeE".into(), Recipe { 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() }), ("ItemKitAdvancedComposter".into(), Recipe { 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() }), ("ItemKitAdvancedFurnace".into(), Recipe { 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() - }), ("ItemKitAdvancedPackagingMachine".into(), Recipe { 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() }), ("ItemKitAutoMinerSmall".into(), Recipe { 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() }), ("ItemKitAutomatedOven" - .into(), Recipe { 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() }), - ("ItemKitBattery".into(), Recipe { 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() }), ("ItemKitBatteryLarge".into(), Recipe - { 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() }), ("ItemKitBeacon".into(), Recipe { 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() - }), ("ItemKitComputer".into(), Recipe { 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() }), ("ItemKitConsole" - .into(), Recipe { 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() }), - ("ItemKitDynamicGenerator".into(), Recipe { 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() - }), ("ItemKitElevator".into(), Recipe { 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() - }), ("ItemKitFridgeBig".into(), Recipe { 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() - }), ("ItemKitFridgeSmall".into(), Recipe { 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() }), - ("ItemKitGasGenerator".into(), Recipe { 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() }), ("ItemKitGroundTelescope".into(), - Recipe { 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() - }), ("ItemKitGrowLight".into(), Recipe { 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() }), - ("ItemKitHarvie".into(), Recipe { 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() }), ("ItemKitHorizontalAutoMiner".into(), - Recipe { 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() }), - ("ItemKitHydroponicStation".into(), Recipe { 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() - }), ("ItemKitLandingPadAtmos".into(), Recipe { 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() }), ("ItemKitLandingPadBasic".into(), - Recipe { 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() }), ("ItemKitLandingPadWaypoint" - .into(), Recipe { 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() }), ("ItemKitLargeSatelliteDish" - .into(), Recipe { 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() }), ("ItemKitLogicCircuit".into(), Recipe { 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() }), - ("ItemKitLogicInputOutput".into(), Recipe { 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() }), ("ItemKitLogicMemory".into(), Recipe { 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() }), ("ItemKitLogicProcessor".into(), Recipe { 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() }), ("ItemKitLogicSwitch".into(), Recipe { 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() }), ("ItemKitLogicTransmitter".into(), Recipe { 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() - }), ("ItemKitMusicMachines".into(), Recipe { 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() }), ("ItemKitPowerTransmitter".into(), Recipe { 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() }), - ("ItemKitPowerTransmitterOmni".into(), Recipe { 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() }), - ("ItemKitPressurePlate".into(), Recipe { 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() }), ("ItemKitResearchMachine".into(), Recipe { 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() }), - ("ItemKitSatelliteDish".into(), Recipe { 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() }), - ("ItemKitSensor".into(), Recipe { 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(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), 3f64)] - .into_iter().collect() }), ("ItemKitSmallSatelliteDish".into(), - Recipe { 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() }), ("ItemKitSolarPanel".into(), - Recipe { 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() }), - ("ItemKitSolarPanelBasic".into(), Recipe { 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() }), - ("ItemKitSolarPanelBasicReinforced".into(), Recipe { 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() }), ("ItemKitSolarPanelReinforced".into(), Recipe { - 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() }), ("ItemKitSolidGenerator".into(), Recipe { 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() }), ("ItemKitSpeaker".into(), Recipe { - 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() }), - ("ItemKitStirlingEngine".into(), Recipe { 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() }), ("ItemKitTransformer" - .into(), Recipe { 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() }), ("ItemKitTransformerSmall" - .into(), Recipe { 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() }), - ("ItemKitTurbineGenerator".into(), Recipe { 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() - }), ("ItemKitUprightWindTurbine".into(), Recipe { 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() }), - ("ItemKitVendingMachine".into(), Recipe { 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() }), ("ItemKitVendingMachineRefrigerated".into(), - Recipe { 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() }), ("ItemKitWeatherStation".into(), - Recipe { 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() }), ("ItemKitWindTurbine".into(), Recipe { - 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() }), - ("ItemLabeller".into(), Recipe { 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() }), ("ItemLaptop".into(), Recipe { 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() }), ("ItemPowerConnector".into(), - Recipe { 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() }), - ("ItemResearchCapsule".into(), Recipe { 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() }), - ("ItemResearchCapsuleGreen".into(), Recipe { 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() }), - ("ItemResearchCapsuleRed".into(), Recipe { 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() }), - ("ItemResearchCapsuleYellow".into(), Recipe { 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() }), - ("ItemSoundCartridgeBass".into(), Recipe { 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() }), - ("ItemSoundCartridgeDrums".into(), Recipe { 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() }), - ("ItemSoundCartridgeLeads".into(), Recipe { 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() }), - ("ItemSoundCartridgeSynth".into(), Recipe { 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() }), ("ItemTablet".into(), - Recipe { 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() }), - ("ItemWallLight".into(), Recipe { 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() }), - ("MotherboardComms".into(), Recipe { 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() }), - ("MotherboardLogic".into(), Recipe { 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() }), - ("MotherboardProgrammableChip".into(), Recipe { 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() }), ("MotherboardRockets".into(), Recipe { 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() }), ("MotherboardSorter".into(), Recipe { - 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() }), ("PipeBenderMod".into(), Recipe { 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() }), ("PortableComposter".into(), Recipe { 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() }), ("PortableSolarPanel".into(), Recipe { - 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() }), ("ToolPrinterMod" - .into(), Recipe { 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() }) - ] - .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(), typ : "PrinterInstruction".into(), value : 6i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) - ] - .into_iter() - .collect(), - ), - memory_access: MemoryAccess::ReadWrite, - memory_size: 64u32, - }, - } - .into(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 1668452680i32, - StructureLogicDeviceTemplate { - prefab: PrefabInfo { - prefab_name: "StructureEmergencyButton".into(), - prefab_hash: 1668452680i32, - desc: "Description coming.".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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()), (2u32, 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![(0u32, "Idle".into()), (1u32, "Active".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: true, - }, - slots: vec![ - SlotInfo { name : "Gas Filter".into(), typ : Class::GasFilter }, - SlotInfo { name : "Gas Filter".into(), typ : Class::GasFilter }, - SlotInfo { name : "Programmable Chip".into(), typ : - Class::ProgrammableChip } - ] - .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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] - .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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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()), (12u32, vec![(LogicSlotType::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()), (13u32, vec![(LogicSlotType::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()), (14u32, vec![(LogicSlotType::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![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None } - ] - .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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None } - ] - .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(), - ), - ( - 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![ - (0u32, vec![] .into_iter().collect()), (1u32, 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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None } - ] - .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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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![ - (0u32, 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![ - SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } - ] - .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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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![ - (0u32, "Left".into()), (1u32, "Center".into()), (2u32, - "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(), - ), - ( - -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![(0u32, "Operate".into()), (1u32, "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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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![ - (0u32, "Idle".into()), (1u32, "Happy".into()), (2u32, - "UnHappy".into()), (3u32, "Dead".into()) - ] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::Plant }, SlotInfo { - name : "Export".into(), typ : Class::None }, SlotInfo { name : "Hand" - .into(), typ : Class::None } - ] - .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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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![ - (0u32, vec![] .into_iter().collect()), (1u32, 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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None } - ] - .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(), - ), - ( - -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![ - (0u32, vec![] .into_iter().collect()), (1u32, 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![ - SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { - name : "Export".into(), typ : Class::None } - ] - .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_resouces: 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![ - ("ApplianceSeedTray".into(), Recipe { 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() }), ("ItemActiveVent" - .into(), Recipe { 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() }), - ("ItemAdhesiveInsulation".into(), Recipe { 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() }), ("ItemDynamicAirCon".into(), Recipe { - 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() - }), ("ItemDynamicScrubber".into(), Recipe { 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() - }), ("ItemGasCanisterEmpty".into(), Recipe { 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() }), - ("ItemGasCanisterSmart".into(), Recipe { 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() }), - ("ItemGasFilterCarbonDioxide".into(), Recipe { 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() }), - ("ItemGasFilterCarbonDioxideL".into(), Recipe { 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() }), - ("ItemGasFilterCarbonDioxideM".into(), Recipe { 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() }), - ("ItemGasFilterNitrogen".into(), Recipe { 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() }), - ("ItemGasFilterNitrogenL".into(), Recipe { 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() }), - ("ItemGasFilterNitrogenM".into(), Recipe { 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() }), - ("ItemGasFilterNitrousOxide".into(), Recipe { 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() }), - ("ItemGasFilterNitrousOxideL".into(), Recipe { 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() }), - ("ItemGasFilterNitrousOxideM".into(), Recipe { 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() }), - ("ItemGasFilterOxygen".into(), Recipe { 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() }), - ("ItemGasFilterOxygenL".into(), Recipe { 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() }), - ("ItemGasFilterOxygenM".into(), Recipe { 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() }), - ("ItemGasFilterPollutants".into(), Recipe { 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() }), - ("ItemGasFilterPollutantsL".into(), Recipe { 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() }), - ("ItemGasFilterPollutantsM".into(), Recipe { 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() }), - ("ItemGasFilterVolatiles".into(), Recipe { 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() }), - ("ItemGasFilterVolatilesL".into(), Recipe { 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() }), - ("ItemGasFilterVolatilesM".into(), Recipe { 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() }), - ("ItemGasFilterWater".into(), Recipe { 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() }), - ("ItemGasFilterWaterL".into(), Recipe { 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() }), ("ItemGasFilterWaterM" - .into(), Recipe { 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() - }), ("ItemHydroponicTray".into(), Recipe { 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() }), - ("ItemKitAirlock".into(), Recipe { 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() }), ("ItemKitAirlockGate".into(), Recipe { - 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() }), - ("ItemKitAtmospherics".into(), Recipe { 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() }), ("ItemKitChute" - .into(), Recipe { 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() }), ("ItemKitCryoTube".into(), Recipe { 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() - }), ("ItemKitDrinkingFountain".into(), Recipe { 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() }), - ("ItemKitDynamicCanister".into(), Recipe { 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() }), - ("ItemKitDynamicGasTankAdvanced".into(), Recipe { 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() - }), ("ItemKitDynamicHydroponics".into(), Recipe { 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() }), - ("ItemKitDynamicLiquidCanister".into(), Recipe { 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() }), - ("ItemKitDynamicMKIILiquidCanister".into(), Recipe { 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() - }), ("ItemKitEvaporationChamber".into(), Recipe { 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() }), - ("ItemKitHeatExchanger".into(), Recipe { 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() }), ("ItemKitIceCrusher".into(), Recipe { - 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() }), - ("ItemKitInsulatedLiquidPipe".into(), Recipe { 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() }), ("ItemKitInsulatedPipe".into(), Recipe - { 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() }), ("ItemKitInsulatedPipeUtility".into(), - Recipe { 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() }), - ("ItemKitInsulatedPipeUtilityLiquid".into(), Recipe { 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() }), ("ItemKitLargeDirectHeatExchanger" - .into(), Recipe { 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() }), - ("ItemKitLargeExtendableRadiator".into(), Recipe { 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() }), - ("ItemKitLiquidRegulator".into(), Recipe { 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() }), ("ItemKitLiquidTank" - .into(), Recipe { 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() }), ("ItemKitLiquidTankInsulated" - .into(), Recipe { 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() }), - ("ItemKitLiquidTurboVolumePump".into(), Recipe { 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() - }), ("ItemKitPassiveLargeRadiatorGas".into(), Recipe { 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() }), - ("ItemKitPassiveLargeRadiatorLiquid".into(), Recipe { 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() }), - ("ItemKitPassthroughHeatExchanger".into(), Recipe { 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() }), ("ItemKitPipe".into(), Recipe { 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() }), - ("ItemKitPipeLiquid".into(), Recipe { 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() }), - ("ItemKitPipeOrgan".into(), Recipe { 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() }), ("ItemKitPipeRadiator".into(), - Recipe { 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() }), ("ItemKitPipeRadiatorLiquid" - .into(), Recipe { 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() }), ("ItemKitPipeUtility".into(), - Recipe { 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() }), ("ItemKitPipeUtilityLiquid".into(), Recipe { 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() }), - ("ItemKitPlanter".into(), Recipe { 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() }), ("ItemKitPortablesConnector" - .into(), Recipe { 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() }), ("ItemKitPoweredVent".into(), Recipe { 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() }), ("ItemKitRegulator" - .into(), Recipe { 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() }), - ("ItemKitSensor".into(), Recipe { 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(), 1f64)] - .into_iter().collect() }), ("ItemKitShower".into(), Recipe { 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() }), ("ItemKitSleeper" - .into(), Recipe { 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() }), - ("ItemKitSmallDirectHeatExchanger".into(), Recipe { 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() }), ("ItemKitStandardChute".into(), Recipe - { 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() }), - ("ItemKitSuitStorage".into(), Recipe { 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() }), ("ItemKitTank".into(), - Recipe { 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() }), ("ItemKitTankInsulated" - .into(), Recipe { 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() }), - ("ItemKitTurboVolumePump".into(), Recipe { 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() - }), ("ItemKitWaterBottleFiller".into(), Recipe { 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() }), - ("ItemKitWaterPurifier".into(), Recipe { 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() }), - ("ItemLiquidCanisterEmpty".into(), Recipe { 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() }), - ("ItemLiquidCanisterSmart".into(), Recipe { 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() }), ("ItemLiquidDrain" - .into(), Recipe { 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() }), ("ItemLiquidPipeAnalyzer" - .into(), Recipe { 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() }), - ("ItemLiquidPipeHeater".into(), Recipe { 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() }), ("ItemLiquidPipeValve" - .into(), Recipe { 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() }), ("ItemLiquidPipeVolumePump" - .into(), Recipe { 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() }), - ("ItemPassiveVent".into(), Recipe { 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() }), ("ItemPassiveVentInsulated" - .into(), Recipe { 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() }), ("ItemPipeAnalyizer".into(), - Recipe { 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() }), - ("ItemPipeCowl".into(), Recipe { 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() }), ("ItemPipeDigitalValve".into(), - Recipe { 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() }), - ("ItemPipeGasMixer".into(), Recipe { 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() }), ("ItemPipeHeater".into(), Recipe { - 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() }), ("ItemPipeIgniter" - .into(), Recipe { 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() }), ("ItemPipeLabel".into(), Recipe - { 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() }), - ("ItemPipeMeter".into(), Recipe { 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() }), - ("ItemPipeValve".into(), Recipe { 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() }), - ("ItemPipeVolumePump".into(), Recipe { 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() }), ("ItemWallCooler" - .into(), Recipe { 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() }), - ("ItemWallHeater".into(), Recipe { 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() }), ("ItemWaterBottle".into(), Recipe { - 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() }), ("ItemWaterPipeDigitalValve".into(), - Recipe { 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() }), - ("ItemWaterPipeMeter".into(), Recipe { 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() }), ("ItemWaterWallCooler".into(), Recipe { 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() }) - ] - .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(), typ : "PrinterInstruction".into(), value : 6i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) - ] - .into_iter() - .collect(), - ), - memory_access: MemoryAccess::ReadWrite, - memory_size: 64u32, - }, - } - .into(), - ), - ( - 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![ - (0u32, 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()), (1u32, 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()), (2u32, 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()), (3u32, 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()), (4u32, 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()), (5u32, 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()), (6u32, 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()), (7u32, 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![ - SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { - name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : - "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant" - .into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ - : Class::Plant }, SlotInfo { name : "Plant".into(), typ : - Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant - }, SlotInfo { name : "Plant".into(), typ : Class::Plant } - ] - .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(), - ), - ( - 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![ - SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { - name : "Fertiliser".into(), typ : Class::Plant } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - (0u32, 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()), (1u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { - name : "Fertiliser".into(), typ : Class::Plant } - ] - .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(), - ), - ( - 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![(0u32, 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![SlotInfo { name : "Import".into(), typ : Class::Ore }] - .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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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![SlotInfo { name : "".into(), typ : Class::None }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - SlotInfo { name : "Portable Slot".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![(0u32, "Operate".into()), (1u32, "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(), - ), - ( - 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![(0u32, "Operate".into()), (1u32, "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(), - ), - ( - 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![(0u32, "Operate".into()), (1u32, "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(), - ), - ( - -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![(0u32, "Operate".into()), (1u32, "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(), - ), - ( - -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![ - (0u32, "None".into()), (1u32, "Alarm2".into()), (2u32, - "Alarm3".into()), (3u32, "Alarm4".into()), (4u32, "Alarm5" - .into()), (5u32, "Alarm6".into()), (6u32, "Alarm7".into()), - (7u32, "Music1".into()), (8u32, "Music2".into()), (9u32, - "Music3".into()), (10u32, "Alarm8".into()), (11u32, "Alarm9" - .into()), (12u32, "Alarm10".into()), (13u32, "Alarm11" - .into()), (14u32, "Alarm12".into()), (15u32, "Danger" - .into()), (16u32, "Warning".into()), (17u32, "Alert".into()), - (18u32, "StormIncoming".into()), (19u32, "IntruderAlert" - .into()), (20u32, "Depressurising".into()), (21u32, - "Pressurising".into()), (22u32, "AirlockCycling".into()), - (23u32, "PowerLow".into()), (24u32, "SystemFailure".into()), - (25u32, "Welcome".into()), (26u32, "MalfunctionDetected" - .into()), (27u32, "HaltWhoGoesThere".into()), (28u32, - "FireFireFire".into()), (29u32, "One".into()), (30u32, "Two" - .into()), (31u32, "Three".into()), (32u32, "Four".into()), - (33u32, "Five".into()), (34u32, "Floor".into()), (35u32, - "RocketLaunching".into()), (36u32, "LiftOff".into()), (37u32, - "TraderIncoming".into()), (38u32, "TraderLanded".into()), - (39u32, "PressureHigh".into()), (40u32, "PressureLow" - .into()), (41u32, "TemperatureHigh".into()), (42u32, - "TemperatureLow".into()), (43u32, "PollutantsDetected" - .into()), (44u32, "HighCarbonDioxide".into()), (45u32, - "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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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![(0u32, "Operate".into()), (1u32, "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(), - ), - ( - 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 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 1514476632i32, - StructureLogicDeviceTemplate { - prefab: PrefabInfo { - prefab_name: "StructureLightRound".into(), - prefab_hash: 1514476632i32, - desc: "Description coming.".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(), - ), - ( - 1592905386i32, - StructureLogicDeviceTemplate { - prefab: PrefabInfo { - prefab_name: "StructureLightRoundAngled".into(), - prefab_hash: 1592905386i32, - desc: "Description coming.".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(), - ), - ( - 1436121888i32, - StructureLogicDeviceTemplate { - prefab: PrefabInfo { - prefab_name: "StructureLightRoundSmall".into(), - prefab_hash: 1436121888i32, - desc: "Description coming.".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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -782453061i32, - StructureLogicDeviceTemplate { - prefab: PrefabInfo { - prefab_name: "StructureLiquidPipeOneWayValve".into(), - prefab_hash: -782453061i32, - 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.." - .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::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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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![ - (0u32, 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![ - SlotInfo { name : "Liquid Canister".into(), typ : - Class::LiquidCanister } - ] - .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(), - ), - ( - -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![(0u32, "Right".into()), (1u32, "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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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![ - (0u32, "Left".into()), (1u32, "Center".into()), (2u32, - "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(), - ), - ( - 1849974453i32, - StructureLogicDeviceTemplate { - prefab: PrefabInfo { - prefab_name: "StructureLiquidValve".into(), - prefab_hash: 1849974453i32, - desc: "".into(), - name: "Liquid 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::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(), - ), - ( - -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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None } - ] - .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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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![ - (0u32, "Equals".into()), (1u32, "Greater".into()), (2u32, - "Less".into()), (3u32, "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(), - ), - ( - 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(), - ), - ( - 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![ - (0u32, "AND".into()), (1u32, "OR".into()), (2u32, "XOR" - .into()), (3u32, "NAND".into()), (4u32, "NOR".into()), (5u32, - "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(), - ), - ( - 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(), - ), - ( - 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![ - (0u32, "Add".into()), (1u32, "Subtract".into()), (2u32, - "Multiply".into()), (3u32, "Divide".into()), (4u32, "Mod" - .into()), (5u32, "Atan2".into()), (6u32, "Pow".into()), - (7u32, "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(), - ), - ( - -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![ - (0u32, "Ceil".into()), (1u32, "Floor".into()), (2u32, "Abs" - .into()), (3u32, "Log".into()), (4u32, "Exp".into()), (5u32, - "Round".into()), (6u32, "Rand".into()), (7u32, "Sqrt" - .into()), (8u32, "Sin".into()), (9u32, "Cos".into()), (10u32, - "Tan".into()), (11u32, "Asin".into()), (12u32, "Acos" - .into()), (13u32, "Atan".into()), (14u32, "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(), - ), - ( - -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(), - ), - ( - 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![(0u32, "Greater".into()), (1u32, "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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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![ - (0u32, "Equals".into()), (1u32, "Greater".into()), (2u32, - "Less".into()), (3u32, "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(), - ), - ( - -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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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![ - (0u32, "All".into()), (1u32, "Any".into()), (2u32, "None" - .into()) - ] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None }, SlotInfo { name : - "Export 2".into(), typ : Class::None }, SlotInfo { name : "Data Disk" - .into(), typ : Class::DataDisk } - ] - .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(), typ : "SorterInstruction".into(), value : 1i64 }), - ("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(), typ : "SorterInstruction".into(), value : 2i64 }), - ("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(), typ : "SorterInstruction".into(), value : 5i64 }), - ("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(), typ : "SorterInstruction".into(), value : 4i64 }), - ("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(), typ : "SorterInstruction".into(), value : 3i64 }), - ("LimitNextExecutionByCount".into(), Instruction { - description : - "| 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 }) - ] - .into_iter() - .collect(), - ), - memory_access: MemoryAccess::ReadWrite, - memory_size: 32u32, - }, - } - .into(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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![(0u32, "Passive".into()), (1u32, "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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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![(0u32, "Operate".into()), (1u32, "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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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![(0u32, "Operate".into()), (1u32, "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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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![(0u32, "Idle".into()), (1u32, "Active".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: true, - }, - slots: vec![ - SlotInfo { name : "Programmable Chip".into(), typ : - Class::ProgrammableChip } - ] - .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(), - ), - ( - 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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None } - ] - .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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None } - ] - .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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 1580412404i32, - StructureLogicDeviceTemplate { - prefab: PrefabInfo { - prefab_name: "StructurePipeOneWayValve".into(), - prefab_hash: 1580412404i32, - 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" - .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::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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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![ - SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { - name : "Plant".into(), typ : Class::Plant } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - 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![SlotInfo { name : "".into(), typ : Class::None }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "".into(), typ : Class::None }] - .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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Portable Slot".into(), typ : Class::None } - ] - .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(), - ), - ( - -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![(0u32, "Unlinked".into()), (1u32, "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(), - ), - ( - -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(), - ), - ( - 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![(0u32, "Unlinked".into()), (1u32, "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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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![ - (0u32, "Left".into()), (1u32, "Center".into()), (2u32, - "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(), - ), - ( - 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![(0u32, "Outward".into()), (1u32, "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(), - ), - ( - -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![(0u32, "Outward".into()), (1u32, "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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None } - ] - .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(), - ), - ( - -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![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()), (2u32, vec![] .into_iter().collect()), (3u32, vec![] - .into_iter().collect()), (4u32, vec![] .into_iter().collect()), - (5u32, vec![] .into_iter().collect()), (6u32, vec![] .into_iter() - .collect()), (7u32, vec![] .into_iter().collect()), (8u32, vec![] - .into_iter().collect()), (9u32, vec![] .into_iter().collect()), - (10u32, vec![] .into_iter().collect()), (11u32, vec![] - .into_iter().collect()), (12u32, vec![] .into_iter().collect()), - (13u32, vec![] .into_iter().collect()), (14u32, vec![] - .into_iter().collect()), (15u32, vec![] .into_iter().collect()), - (16u32, vec![] .into_iter().collect()), (17u32, vec![] - .into_iter().collect()), (18u32, vec![] .into_iter().collect()), - (19u32, vec![] .into_iter().collect()), (20u32, vec![] - .into_iter().collect()), (21u32, vec![] .into_iter().collect()), - (22u32, vec![] .into_iter().collect()), (23u32, vec![] - .into_iter().collect()), (24u32, vec![] .into_iter().collect()), - (25u32, vec![] .into_iter().collect()), (26u32, vec![] - .into_iter().collect()), (27u32, vec![] .into_iter().collect()), - (28u32, vec![] .into_iter().collect()), (29u32, vec![] - .into_iter().collect()), (30u32, vec![] .into_iter().collect()), - (31u32, vec![] .into_iter().collect()), (32u32, vec![] - .into_iter().collect()), (33u32, vec![] .into_iter().collect()), - (34u32, vec![] .into_iter().collect()), (35u32, vec![] - .into_iter().collect()), (36u32, vec![] .into_iter().collect()), - (37u32, vec![] .into_iter().collect()), (38u32, vec![] - .into_iter().collect()), (39u32, vec![] .into_iter().collect()), - (40u32, vec![] .into_iter().collect()), (41u32, vec![] - .into_iter().collect()), (42u32, vec![] .into_iter().collect()), - (43u32, vec![] .into_iter().collect()), (44u32, vec![] - .into_iter().collect()), (45u32, vec![] .into_iter().collect()), - (46u32, vec![] .into_iter().collect()), (47u32, vec![] - .into_iter().collect()), (48u32, vec![] .into_iter().collect()), - (49u32, vec![] .into_iter().collect()), (50u32, vec![] - .into_iter().collect()), (51u32, vec![] .into_iter().collect()), - (52u32, vec![] .into_iter().collect()), (53u32, vec![] - .into_iter().collect()), (54u32, vec![] .into_iter().collect()), - (55u32, vec![] .into_iter().collect()), (56u32, vec![] - .into_iter().collect()), (57u32, vec![] .into_iter().collect()), - (58u32, vec![] .into_iter().collect()), (59u32, vec![] - .into_iter().collect()), (60u32, vec![] .into_iter().collect()), - (61u32, vec![] .into_iter().collect()), (62u32, vec![] - .into_iter().collect()), (63u32, vec![] .into_iter().collect()), - (64u32, vec![] .into_iter().collect()), (65u32, vec![] - .into_iter().collect()), (66u32, vec![] .into_iter().collect()), - (67u32, vec![] .into_iter().collect()), (68u32, vec![] - .into_iter().collect()), (69u32, vec![] .into_iter().collect()), - (70u32, vec![] .into_iter().collect()), (71u32, vec![] - .into_iter().collect()), (72u32, vec![] .into_iter().collect()), - (73u32, vec![] .into_iter().collect()), (74u32, vec![] - .into_iter().collect()), (75u32, vec![] .into_iter().collect()), - (76u32, vec![] .into_iter().collect()), (77u32, vec![] - .into_iter().collect()), (78u32, vec![] .into_iter().collect()), - (79u32, vec![] .into_iter().collect()), (80u32, vec![] - .into_iter().collect()), (81u32, vec![] .into_iter().collect()), - (82u32, vec![] .into_iter().collect()), (83u32, vec![] - .into_iter().collect()), (84u32, vec![] .into_iter().collect()), - (85u32, vec![] .into_iter().collect()), (86u32, vec![] - .into_iter().collect()), (87u32, vec![] .into_iter().collect()), - (88u32, vec![] .into_iter().collect()), (89u32, vec![] - .into_iter().collect()), (90u32, vec![] .into_iter().collect()), - (91u32, vec![] .into_iter().collect()), (92u32, vec![] - .into_iter().collect()), (93u32, vec![] .into_iter().collect()), - (94u32, vec![] .into_iter().collect()), (95u32, vec![] - .into_iter().collect()), (96u32, vec![] .into_iter().collect()), - (97u32, vec![] .into_iter().collect()), (98u32, vec![] - .into_iter().collect()), (99u32, vec![] .into_iter().collect()), - (100u32, vec![] .into_iter().collect()), (101u32, 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![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None } - ] - .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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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) - ] - .into_iter() - .collect(), - modes: Some( - vec![ - (0u32, "Invalid".into()), (1u32, "None".into()), (2u32, - "Mine".into()), (3u32, "Survey".into()), (4u32, "Discover" - .into()), (5u32, "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(), - ), - ( - 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(), typ : "CelestialTracking".into(), value : 1i64 }) - ] - .into_iter() - .collect(), - ), - memory_access: MemoryAccess::Read, - memory_size: 12u32, - }, - } - .into(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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![ - SlotInfo { name : "Programmable Chip".into(), typ : - Class::ProgrammableChip } - ] - .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(), - ), - ( - 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(), - ), - ( - 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![ - (0u32, vec![] .into_iter().collect()), (1u32, 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![ - SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { - name : "Export".into(), typ : Class::None } - ] - .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_resouces: 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![ - ("ItemKitAccessBridge".into(), Recipe { 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() }), - ("ItemKitChuteUmbilical".into(), Recipe { 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() }), ("ItemKitElectricUmbilical".into(), - Recipe { 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() }), ("ItemKitFuselage".into(), - Recipe { 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() }), ("ItemKitGasUmbilical".into(), Recipe { 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() }), ("ItemKitGovernedGasRocketEngine" - .into(), Recipe { 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() }), - ("ItemKitLaunchMount".into(), Recipe { 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() }), - ("ItemKitLaunchTower".into(), Recipe { 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() }), - ("ItemKitLiquidUmbilical".into(), Recipe { 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() }), ("ItemKitPressureFedGasEngine".into(), - Recipe { 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() }), ("ItemKitPressureFedLiquidEngine" - .into(), Recipe { 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() }), ("ItemKitPumpedLiquidEngine".into(), Recipe { 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() }), - ("ItemKitRocketAvionics".into(), Recipe { 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() }), ("ItemKitRocketBattery".into(), Recipe - { 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() }), - ("ItemKitRocketCargoStorage".into(), Recipe { 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() }), - ("ItemKitRocketCelestialTracker".into(), Recipe { 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() }), ("ItemKitRocketCircuitHousing".into(), - Recipe { 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() }), - ("ItemKitRocketDatalink".into(), Recipe { 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() }), ("ItemKitRocketGasFuelTank".into(), - Recipe { 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() }), ("ItemKitRocketLiquidFuelTank" - .into(), Recipe { 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() }), ("ItemKitRocketMiner".into(), - Recipe { 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() }), ("ItemKitRocketScanner".into(), Recipe - { 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() }), ("ItemKitRocketTransformerSmall" - .into(), Recipe { 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() }), ("ItemKitStairwell".into(), - Recipe { 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() }), ("ItemRocketMiningDrillHead".into(), Recipe { 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() }), - ("ItemRocketMiningDrillHeadDurable".into(), Recipe { 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() }), - ("ItemRocketMiningDrillHeadHighSpeedIce".into(), Recipe { 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() }), - ("ItemRocketMiningDrillHeadHighSpeedMineral".into(), Recipe { - 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() }), ("ItemRocketMiningDrillHeadIce" - .into(), Recipe { 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() }), - ("ItemRocketMiningDrillHeadLongTerm".into(), Recipe { 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() }), ("ItemRocketMiningDrillHeadMineral" - .into(), Recipe { 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() }), ("ItemRocketScanningHead" - .into(), Recipe { 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() }) - ] - .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(), typ : "PrinterInstruction".into(), value : 6i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) - ] - .into_iter() - .collect(), - ), - memory_access: MemoryAccess::ReadWrite, - memory_size: 64u32, - }, - } - .into(), - ), - ( - -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![ - (0u32, vec![] .into_iter().collect()), (1u32, 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![ - SlotInfo { name : "Export".into(), typ : Class::None }, SlotInfo { - name : "Drill Head Slot".into(), typ : Class::DrillHead } - ] - .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(), - ), - ( - 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![(0u32, 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![ - SlotInfo { name : "Scanner Head Slot".into(), typ : - Class::ScanningHead } - ] - .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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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![(0u32, 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![SlotInfo { name : "Import".into(), typ : Class::None }] - .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(), - ), - ( - 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![(0u32, 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![SlotInfo { name : "Import".into(), typ : Class::None }] - .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(), - ), - ( - 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![ - (0u32, vec![] .into_iter().collect()), (1u32, 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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None } - ] - .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(), - ), - ( - 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 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(), - ), - ( - -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![ - (0u32, vec![] .into_iter().collect()), (1u32, 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![ - SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { - name : "Export".into(), typ : Class::None } - ] - .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_resouces: 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![ - ("AccessCardBlack".into(), Recipe { 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() }), ("AccessCardBlue".into(), Recipe { - 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() }), ("AccessCardBrown" - .into(), Recipe { 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() }), - ("AccessCardGray".into(), Recipe { 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() }), ("AccessCardGreen".into(), Recipe { - 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() }), ("AccessCardKhaki" - .into(), Recipe { 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() }), - ("AccessCardOrange".into(), Recipe { 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() }), ("AccessCardPink".into(), Recipe { - 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() }), ("AccessCardPurple" - .into(), Recipe { 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() }), - ("AccessCardRed".into(), Recipe { 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() }), ("AccessCardWhite".into(), Recipe { - 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() }), ("AccessCardYellow" - .into(), Recipe { 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() }), - ("CartridgeAccessController".into(), Recipe { 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() }), ("FireArmSMG".into(), - Recipe { 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() }), ("Handgun".into(), Recipe { - 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() }), ("HandgunMagazine".into(), Recipe { - 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() }), ("ItemAmmoBox".into(), - Recipe { 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() }), - ("ItemExplosive".into(), Recipe { 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 : 5i64, reagents : vec![("Copper" - .into(), 5f64), ("Electrum".into(), 1f64), ("Gold".into(), 5f64), - ("Lead".into(), 10f64), ("Steel".into(), 7f64)] .into_iter() - .collect() }), ("ItemGrenade".into(), Recipe { 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() - }), ("ItemMiningCharge".into(), Recipe { tier : - MachineTier::TierOne, time : 7f64, 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 : 4i64, reagents : - vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Iron" - .into(), 7f64), ("Lead".into(), 10f64)] .into_iter().collect() - }), ("SMGMagazine".into(), Recipe { 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() }), ("WeaponPistolEnergy".into(), Recipe { - 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() }), ("WeaponRifleEnergy".into(), Recipe { 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() - }) - ] - .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(), typ : "PrinterInstruction".into(), value : 6i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) - ] - .into_iter() - .collect(), - ), - memory_access: MemoryAccess::ReadWrite, - memory_size: 64u32, - }, - } - .into(), - ), - ( - 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![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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()), (12u32, vec![(LogicSlotType::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()), (13u32, vec![(LogicSlotType::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()), (14u32, vec![(LogicSlotType::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![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None } - ] - .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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None } - ] - .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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None } - ] - .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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -492611i32, - StructureLogicDeviceTemplate { - prefab: PrefabInfo { - prefab_name: "StructureSingleBed".into(), - prefab_hash: -492611i32, - desc: "Description coming.".into(), - name: "Single Bed".into(), - }, - structure: StructureInfo { small_grid: true }, - thermal_info: None, - internal_atmo_info: None, - logic: LogicInfo { - logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Bed".into(), typ : Class::Entity }] - .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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Bed".into(), typ : Class::Entity }] - .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(), - ), - ( - 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![(0u32, 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![ - (0u32, "Safe".into()), (1u32, "Unsafe".into()), (2u32, - "Unpowered".into()) - ] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] - .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(), - ), - ( - -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![(0u32, 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![ - (0u32, "Safe".into()), (1u32, "Unsafe".into()), (2u32, - "Unpowered".into()) - ] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] - .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(), - ), - ( - -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![(0u32, 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![ - (0u32, "Safe".into()), (1u32, "Unsafe".into()), (2u32, - "Unpowered".into()) - ] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] - .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(), - ), - ( - 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![(0u32, 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![SlotInfo { name : "Player".into(), typ : Class::Entity }] - .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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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![ - (0u32, "Not Generating".into()), (1u32, "Generating".into()) - ] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![SlotInfo { name : "Input".into(), typ : Class::Ore }] - .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_resouces: vec![ - "ItemCharcoal".into(), "ItemCoalOre".into(), "ItemSolidFuel" - .into() - ] - .into_iter() - .collect(), - processed_reagents: vec![].into_iter().collect(), - }, - fabricator_info: None, - } - .into(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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![ - (0u32, "Split".into()), (1u32, "Filter".into()), (2u32, - "Logic".into()) - ] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None }, SlotInfo { name : - "Export 2".into(), typ : Class::None }, SlotInfo { name : "Data Disk" - .into(), typ : Class::DataDisk } - ] - .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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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![(0u32, "Automatic".into()), (1u32, "Logic".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None }, SlotInfo { name : - "Processing".into(), typ : Class::None } - ] - .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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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![(0u32, "Automatic".into()), (1u32, "Logic".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None } - ] - .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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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![(0u32, 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![ - SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } - ] - .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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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()), (12u32, vec![(LogicSlotType::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()), (13u32, vec![(LogicSlotType::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()), (14u32, vec![(LogicSlotType::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()), (15u32, vec![(LogicSlotType::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()), (16u32, vec![(LogicSlotType::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()), (17u32, vec![(LogicSlotType::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()), (18u32, vec![(LogicSlotType::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()), (19u32, vec![(LogicSlotType::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()), (20u32, vec![(LogicSlotType::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()), (21u32, vec![(LogicSlotType::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()), (22u32, vec![(LogicSlotType::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()), (23u32, vec![(LogicSlotType::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()), (24u32, vec![(LogicSlotType::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()), (25u32, vec![(LogicSlotType::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()), (26u32, vec![(LogicSlotType::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()), (27u32, vec![(LogicSlotType::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()), (28u32, vec![(LogicSlotType::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()), (29u32, vec![(LogicSlotType::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![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None } - ] - .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(), - ), - ( - 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![ - (0u32, 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()), (1u32, 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()), (2u32, 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![ - SlotInfo { name : "Helmet".into(), typ : Class::Helmet }, SlotInfo { - name : "Suit".into(), typ : Class::Suit }, SlotInfo { name : "Back" - .into(), typ : Class::Back } - ] - .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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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![SlotInfo { name : "".into(), typ : Class::None }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - SlotInfo { name : "Portable Slot".into(), typ : Class::None } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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![ - (0u32, vec![] .into_iter().collect()), (1u32, 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![ - SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { - name : "Export".into(), typ : Class::None } - ] - .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_resouces: 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![ - ("FlareGun".into(), Recipe { 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() }), - ("ItemAngleGrinder".into(), Recipe { 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() }), - ("ItemArcWelder".into(), Recipe { 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() }), - ("ItemBasketBall".into(), Recipe { 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() }), ("ItemBeacon".into(), - Recipe { 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() }), - ("ItemChemLightBlue".into(), Recipe { 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() }), - ("ItemChemLightGreen".into(), Recipe { 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() }), - ("ItemChemLightRed".into(), Recipe { 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() }), ("ItemChemLightWhite" - .into(), Recipe { 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() }), ("ItemChemLightYellow".into(), Recipe { 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() }), - ("ItemClothingBagOveralls_Aus".into(), Recipe { 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() }), - ("ItemClothingBagOveralls_Brazil".into(), Recipe { 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() }), - ("ItemClothingBagOveralls_Canada".into(), Recipe { 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() }), - ("ItemClothingBagOveralls_China".into(), Recipe { 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() }), - ("ItemClothingBagOveralls_EU".into(), Recipe { 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() }), - ("ItemClothingBagOveralls_France".into(), Recipe { 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() }), - ("ItemClothingBagOveralls_Germany".into(), Recipe { 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() }), - ("ItemClothingBagOveralls_Japan".into(), Recipe { 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() }), - ("ItemClothingBagOveralls_Korea".into(), Recipe { 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() }), - ("ItemClothingBagOveralls_NZ".into(), Recipe { 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() }), - ("ItemClothingBagOveralls_Russia".into(), Recipe { 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() }), - ("ItemClothingBagOveralls_SouthAfrica".into(), Recipe { 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() }), - ("ItemClothingBagOveralls_UK".into(), Recipe { 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() }), - ("ItemClothingBagOveralls_US".into(), Recipe { 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() }), - ("ItemClothingBagOveralls_Ukraine".into(), Recipe { 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() }), - ("ItemCrowbar".into(), Recipe { 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() }), ("ItemDirtCanister".into(), - Recipe { 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() }), ("ItemDisposableBatteryCharger".into(), Recipe { - 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() }), ("ItemDrill".into(), - Recipe { 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() }), ("ItemDuctTape".into(), Recipe - { 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() }), - ("ItemEvaSuit".into(), Recipe { 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() }), - ("ItemFlagSmall".into(), Recipe { 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() }), ("ItemFlashlight".into(), - Recipe { 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() }), ("ItemGlasses".into(), Recipe { - 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() }), ("ItemHardBackpack".into(), Recipe { - 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() }), - ("ItemHardJetpack".into(), Recipe { 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() }), - ("ItemHardMiningBackPack".into(), Recipe { 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() }), ("ItemHardSuit".into(), Recipe { 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() }), - ("ItemHardsuitHelmet".into(), Recipe { 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() }), - ("ItemIgniter".into(), Recipe { 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() }), ("ItemJetpackBasic" - .into(), Recipe { 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() }), - ("ItemKitBasket".into(), Recipe { 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() }), - ("ItemLabeller".into(), Recipe { 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() }), - ("ItemMKIIAngleGrinder".into(), Recipe { 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() }), ("ItemMKIIArcWelder" - .into(), Recipe { 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() }), ("ItemMKIICrowbar".into(), - Recipe { 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() }), ("ItemMKIIDrill".into(), Recipe - { 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() }), ("ItemMKIIDuctTape" - .into(), Recipe { 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() }), ("ItemMKIIMiningDrill".into(), - Recipe { 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() }), - ("ItemMKIIScrewdriver".into(), Recipe { 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() }), ("ItemMKIIWireCutters".into(), Recipe - { 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() }), ("ItemMKIIWrench".into(), Recipe { - 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() }), ("ItemMarineBodyArmor".into(), Recipe - { 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() }), - ("ItemMarineHelmet".into(), Recipe { 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() }), ("ItemMiningBackPack".into(), Recipe { - 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() }), - ("ItemMiningBelt".into(), Recipe { 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() }), ("ItemMiningBeltMKII".into(), - Recipe { 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() }), ("ItemMiningDrill" - .into(), Recipe { 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() }), ("ItemMiningDrillHeavy".into(), - Recipe { 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() }), ("ItemMiningDrillPneumatic".into(), - Recipe { 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() }), - ("ItemMkIIToolbelt".into(), Recipe { 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() }), - ("ItemNVG".into(), Recipe { 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() }), ("ItemPickaxe".into(), Recipe { - 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() }), ("ItemPlantSampler".into(), Recipe { 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() }), ("ItemRemoteDetonator".into(), Recipe { tier : - MachineTier::TierOne, time : 4.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(), 3f64)] .into_iter() - .collect() }), ("ItemReusableFireExtinguisher".into(), Recipe { - 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() }), - ("ItemRoadFlare".into(), Recipe { 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() }), ("ItemScrewdriver".into(), - Recipe { 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() }), ("ItemSensorLenses".into(), Recipe { 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() }), - ("ItemSensorProcessingUnitCelestialScanner".into(), Recipe { 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() - }), ("ItemSensorProcessingUnitMesonScanner".into(), Recipe { 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() - }), ("ItemSensorProcessingUnitOreScanner".into(), Recipe { 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() - }), ("ItemSpaceHelmet".into(), Recipe { 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() }), ("ItemSpacepack".into(), Recipe { 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() }), ("ItemSprayCanBlack".into(), Recipe { 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() }), - ("ItemSprayCanBlue".into(), Recipe { 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() }), ("ItemSprayCanBrown".into(), - Recipe { 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() }), ("ItemSprayCanGreen".into(), Recipe { 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() }), - ("ItemSprayCanGrey".into(), Recipe { 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() }), ("ItemSprayCanKhaki".into(), - Recipe { 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() }), ("ItemSprayCanOrange".into(), Recipe { 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() }), - ("ItemSprayCanPink".into(), Recipe { 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() }), ("ItemSprayCanPurple".into(), - Recipe { 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() }), ("ItemSprayCanRed".into(), Recipe { 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() }), - ("ItemSprayCanWhite".into(), Recipe { 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() }), - ("ItemSprayCanYellow".into(), Recipe { 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() }), - ("ItemSprayGun".into(), Recipe { 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() }), ("ItemTerrainManipulator" - .into(), Recipe { 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() }), - ("ItemToolBelt".into(), Recipe { 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() }), ("ItemWearLamp".into(), Recipe - { 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() }), ("ItemWeldingTorch".into(), Recipe { 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() }), ("ItemWireCutters".into(), Recipe { 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() }), - ("ItemWrench".into(), Recipe { 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() }), ("ToyLuna".into(), Recipe { - 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() }), ("UniformCommander".into(), Recipe { 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() }), - ("UniformMarine".into(), Recipe { 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() }), - ("UniformOrangeJumpSuit".into(), Recipe { 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() }), - ("WeaponPistolEnergy".into(), Recipe { 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() }), ("WeaponRifleEnergy".into(), Recipe { 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() - }) - ] - .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(), typ : "PrinterInstruction".into(), value : 6i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), - ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) - ] - .into_iter() - .collect(), - ), - memory_access: MemoryAccess::ReadWrite, - memory_size: 64u32, - }, - } - .into(), - ), - ( - 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![ - SlotInfo { name : "Torpedo".into(), typ : Class::Torpedo }, SlotInfo - { name : "Torpedo".into(), typ : Class::Torpedo }, SlotInfo { name : - "Torpedo".into(), typ : Class::Torpedo }, SlotInfo { name : "Torpedo" - .into(), typ : Class::Torpedo }, SlotInfo { name : "Torpedo".into(), - typ : Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ : - Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ : - Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ : - Class::Torpedo } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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![(0u32, "Right".into()), (1u32, "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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![(0u32, "Automatic".into()), (1u32, "Logic".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None } - ] - .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(), - ), - ( - 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(), - ), - ( - -692036078i32, - StructureLogicDeviceTemplate { - prefab: PrefabInfo { - prefab_name: "StructureValve".into(), - prefab_hash: -692036078i32, - desc: "".into(), - name: "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::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(), - ), - ( - -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![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()), (2u32, vec![] .into_iter().collect()), (3u32, vec![] - .into_iter().collect()), (4u32, vec![] .into_iter().collect()), - (5u32, vec![] .into_iter().collect()), (6u32, vec![] .into_iter() - .collect()), (7u32, vec![] .into_iter().collect()), (8u32, vec![] - .into_iter().collect()), (9u32, vec![] .into_iter().collect()), - (10u32, vec![] .into_iter().collect()), (11u32, vec![] - .into_iter().collect()), (12u32, vec![] .into_iter().collect()), - (13u32, vec![] .into_iter().collect()), (14u32, vec![] - .into_iter().collect()), (15u32, vec![] .into_iter().collect()), - (16u32, vec![] .into_iter().collect()), (17u32, vec![] - .into_iter().collect()), (18u32, vec![] .into_iter().collect()), - (19u32, vec![] .into_iter().collect()), (20u32, vec![] - .into_iter().collect()), (21u32, vec![] .into_iter().collect()), - (22u32, vec![] .into_iter().collect()), (23u32, vec![] - .into_iter().collect()), (24u32, vec![] .into_iter().collect()), - (25u32, vec![] .into_iter().collect()), (26u32, vec![] - .into_iter().collect()), (27u32, vec![] .into_iter().collect()), - (28u32, vec![] .into_iter().collect()), (29u32, vec![] - .into_iter().collect()), (30u32, vec![] .into_iter().collect()), - (31u32, vec![] .into_iter().collect()), (32u32, vec![] - .into_iter().collect()), (33u32, vec![] .into_iter().collect()), - (34u32, vec![] .into_iter().collect()), (35u32, vec![] - .into_iter().collect()), (36u32, vec![] .into_iter().collect()), - (37u32, vec![] .into_iter().collect()), (38u32, vec![] - .into_iter().collect()), (39u32, vec![] .into_iter().collect()), - (40u32, vec![] .into_iter().collect()), (41u32, vec![] - .into_iter().collect()), (42u32, vec![] .into_iter().collect()), - (43u32, vec![] .into_iter().collect()), (44u32, vec![] - .into_iter().collect()), (45u32, vec![] .into_iter().collect()), - (46u32, vec![] .into_iter().collect()), (47u32, vec![] - .into_iter().collect()), (48u32, vec![] .into_iter().collect()), - (49u32, vec![] .into_iter().collect()), (50u32, vec![] - .into_iter().collect()), (51u32, vec![] .into_iter().collect()), - (52u32, vec![] .into_iter().collect()), (53u32, vec![] - .into_iter().collect()), (54u32, vec![] .into_iter().collect()), - (55u32, vec![] .into_iter().collect()), (56u32, vec![] - .into_iter().collect()), (57u32, vec![] .into_iter().collect()), - (58u32, vec![] .into_iter().collect()), (59u32, vec![] - .into_iter().collect()), (60u32, vec![] .into_iter().collect()), - (61u32, vec![] .into_iter().collect()), (62u32, vec![] - .into_iter().collect()), (63u32, vec![] .into_iter().collect()), - (64u32, vec![] .into_iter().collect()), (65u32, vec![] - .into_iter().collect()), (66u32, vec![] .into_iter().collect()), - (67u32, vec![] .into_iter().collect()), (68u32, vec![] - .into_iter().collect()), (69u32, vec![] .into_iter().collect()), - (70u32, vec![] .into_iter().collect()), (71u32, vec![] - .into_iter().collect()), (72u32, vec![] .into_iter().collect()), - (73u32, vec![] .into_iter().collect()), (74u32, vec![] - .into_iter().collect()), (75u32, vec![] .into_iter().collect()), - (76u32, vec![] .into_iter().collect()), (77u32, vec![] - .into_iter().collect()), (78u32, vec![] .into_iter().collect()), - (79u32, vec![] .into_iter().collect()), (80u32, vec![] - .into_iter().collect()), (81u32, vec![] .into_iter().collect()), - (82u32, vec![] .into_iter().collect()), (83u32, vec![] - .into_iter().collect()), (84u32, vec![] .into_iter().collect()), - (85u32, vec![] .into_iter().collect()), (86u32, vec![] - .into_iter().collect()), (87u32, vec![] .into_iter().collect()), - (88u32, vec![] .into_iter().collect()), (89u32, vec![] - .into_iter().collect()), (90u32, vec![] .into_iter().collect()), - (91u32, vec![] .into_iter().collect()), (92u32, vec![] - .into_iter().collect()), (93u32, vec![] .into_iter().collect()), - (94u32, vec![] .into_iter().collect()), (95u32, vec![] - .into_iter().collect()), (96u32, vec![] .into_iter().collect()), - (97u32, vec![] .into_iter().collect()), (98u32, vec![] - .into_iter().collect()), (99u32, vec![] .into_iter().collect()), - (100u32, vec![] .into_iter().collect()), (101u32, 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![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { - name : "Export".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ - : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None - }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo - { name : "Storage".into(), typ : Class::None }, SlotInfo { name : - "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None } - ] - .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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "".into(), typ : Class::DataDisk }] - .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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "".into(), typ : Class::DataDisk }] - .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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - -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![ - (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - -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(), - ), - ( - -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![ - (0u32, 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()), (1u32, 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![ - SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, - SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } + 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![SlotInfo { name : "Output".into(), typ : Class::None }] + .into_iter() + .collect(), + consumer_info: ConsumerInfo { + consumed_resouces: 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![SlotInfo { name : "Output".into(), typ : Class::None }] + .into_iter() + .collect(), + consumer_info: ConsumerInfo { + consumed_resouces: 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![SlotInfo { name : "Export".into(), typ : Class::None }] + .into_iter() + .collect(), + consumer_info: ConsumerInfo { + consumed_resouces: 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![SlotInfo { name : "Output".into(), typ : Class::Bottle }] + .into_iter() + .collect(), + consumer_info: ConsumerInfo { + consumed_resouces: 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![SlotInfo { name : "Input".into(), typ : Class::Tool }] + .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![ + SlotInfo { name : "Source Plant".into(), typ : Class::Plant }, SlotInfo { + name : "Target Plant".into(), typ : Class::Plant } + ] + .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![SlotInfo { name : "Plant".into(), typ : Class::Plant }] + .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![ + SlotInfo { name : "Input".into(), typ : Class::None }, SlotInfo { name : + "Output".into(), typ : Class::None } + ] + .into_iter() + .collect(), + consumer_info: ConsumerInfo { + consumed_resouces: 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![ + SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : + "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), + typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : + Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, + SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : + "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), + typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : + Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, + SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : + "Plant".into(), typ : Class::Plant } + ] + .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![SlotInfo { name : "".into(), typ : Class::Tool }] + .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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), + (5u32, "High".into()), (6u32, "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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), + (5u32, "High".into()), (6u32, "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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None } + ] + .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: "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: "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: "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: "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: "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: "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: "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: "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: "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: "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![(0u32, "Operate".into()), (1u32, "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::None, + sorting_class: SortingClass::Storage, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None } + ] + .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![ + (0u32, "Whole Note".into()), (1u32, "Half Note".into()), (2u32, + "Quarter Note".into()), (3u32, "Eighth Note".into()), (4u32, + "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![ + (0u32, "C-2".into()), (1u32, "C#-2".into()), (2u32, "D-2" + .into()), (3u32, "D#-2".into()), (4u32, "E-2".into()), (5u32, + "F-2".into()), (6u32, "F#-2".into()), (7u32, "G-2".into()), + (8u32, "G#-2".into()), (9u32, "A-2".into()), (10u32, "A#-2" + .into()), (11u32, "B-2".into()), (12u32, "C-1".into()), (13u32, + "C#-1".into()), (14u32, "D-1".into()), (15u32, "D#-1".into()), + (16u32, "E-1".into()), (17u32, "F-1".into()), (18u32, "F#-1" + .into()), (19u32, "G-1".into()), (20u32, "G#-1".into()), (21u32, + "A-1".into()), (22u32, "A#-1".into()), (23u32, "B-1".into()), + (24u32, "C0".into()), (25u32, "C#0".into()), (26u32, "D0" + .into()), (27u32, "D#0".into()), (28u32, "E0".into()), (29u32, + "F0".into()), (30u32, "F#0".into()), (31u32, "G0".into()), + (32u32, "G#0".into()), (33u32, "A0".into()), (34u32, "A#0" + .into()), (35u32, "B0".into()), (36u32, "C1".into()), (37u32, + "C#1".into()), (38u32, "D1".into()), (39u32, "D#1".into()), + (40u32, "E1".into()), (41u32, "F1".into()), (42u32, "F#1" + .into()), (43u32, "G1".into()), (44u32, "G#1".into()), (45u32, + "A1".into()), (46u32, "A#1".into()), (47u32, "B1".into()), + (48u32, "C2".into()), (49u32, "C#2".into()), (50u32, "D2" + .into()), (51u32, "D#2".into()), (52u32, "E2".into()), (53u32, + "F2".into()), (54u32, "F#2".into()), (55u32, "G2".into()), + (56u32, "G#2".into()), (57u32, "A2".into()), (58u32, "A#2" + .into()), (59u32, "B2".into()), (60u32, "C3".into()), (61u32, + "C#3".into()), (62u32, "D3".into()), (63u32, "D#3".into()), + (64u32, "E3".into()), (65u32, "F3".into()), (66u32, "F#3" + .into()), (67u32, "G3".into()), (68u32, "G#3".into()), (69u32, + "A3".into()), (70u32, "A#3".into()), (71u32, "B3".into()), + (72u32, "C4".into()), (73u32, "C#4".into()), (74u32, "D4" + .into()), (75u32, "D#4".into()), (76u32, "E4".into()), (77u32, + "F4".into()), (78u32, "F#4".into()), (79u32, "G4".into()), + (80u32, "G#4".into()), (81u32, "A4".into()), (82u32, "A#4" + .into()), (83u32, "B4".into()), (84u32, "C5".into()), (85u32, + "C#5".into()), (86u32, "D5".into()), (87u32, "D#5".into()), + (88u32, "E5".into()), (89u32, "F5".into()), (90u32, "F#5" + .into()), (91u32, "G5 ".into()), (92u32, "G#5".into()), (93u32, + "A5".into()), (94u32, "A#5".into()), (95u32, "B5".into()), + (96u32, "C6".into()), (97u32, "C#6".into()), (98u32, "D6" + .into()), (99u32, "D#6".into()), (100u32, "E6".into()), (101u32, + "F6".into()), (102u32, "F#6".into()), (103u32, "G6".into()), + (104u32, "G#6".into()), (105u32, "A6".into()), (106u32, "A#6" + .into()), (107u32, "B6".into()), (108u32, "C7".into()), (109u32, + "C#7".into()), (110u32, "D7".into()), (111u32, "D#7".into()), + (112u32, "E7".into()), (113u32, "F7".into()), (114u32, "F#7" + .into()), (115u32, "G7".into()), (116u32, "G#7".into()), (117u32, + "A7".into()), (118u32, "A#7".into()), (119u32, "B7".into()), + (120u32, "C8".into()), (121u32, "C#8".into()), (122u32, "D8" + .into()), (123u32, "D#8".into()), (124u32, "E8".into()), (125u32, + "F8".into()), (126u32, "F#8".into()), (127u32, "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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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::None, + sorting_class: SortingClass::Storage, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None } + ] + .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![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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::None, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .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::None, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .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::None, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .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::None, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .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::None, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .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::None, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .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::None, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .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::None, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .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::None, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .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::None, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .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::None, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![ + SlotInfo { name : "Gas Canister".into(), typ : Class::LiquidCanister } + ] + .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::None, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .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::None, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + .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![ + SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister }, + SlotInfo { name : "Battery".into(), typ : Class::Battery } + ] + .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![ + SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : + "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), + typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : + Class::Plant }, SlotInfo { name : "Liquid Canister".into(), typ : + Class::LiquidCanister }, SlotInfo { name : "Liquid Canister".into(), typ + : Class::Plant }, SlotInfo { name : "Liquid Canister".into(), typ : + Class::Plant }, SlotInfo { name : "Liquid Canister".into(), typ : + Class::Plant }, SlotInfo { name : "Liquid Canister".into(), typ : + Class::Plant } + ] + .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![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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::None, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![ + SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister } + ] + .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::None, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + slots: vec![ + SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister } + ] + .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::None, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + slots: vec![ + SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister } + ] + .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![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { + name : "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo { name : + "Gas Filter".into(), typ : Class::GasFilter } + ] + .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![SlotInfo { name : "Brain".into(), typ : Class::Organ }] + .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![SlotInfo { name : "Brain".into(), typ : Class::Organ }] + .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![SlotInfo { name : "Brain".into(), typ : Class::Organ }] + .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![SlotInfo { name : "Brain".into(), typ : Class::Organ }] + .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![SlotInfo { name : "Brain".into(), typ : Class::Organ }] + .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![SlotInfo { name : "".into(), typ : Class::Magazine }] + .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![ + SlotInfo { name : "Magazine".into(), typ : Class::Flare }, SlotInfo { + name : "".into(), typ : Class::Blocked } + ] + .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![(0u32, 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![(0u32, "Idle".into()), (1u32, "Active".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: true, + }, + slots: vec![ + SlotInfo { name : "Programmable Chip".into(), typ : + Class::ProgrammableChip } + ] + .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![SlotInfo { name : "Magazine".into(), typ : Class::Magazine }] + .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 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" + .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![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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()), (2u32, + vec![(LogicSlotType::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()), (3u32, + vec![(LogicSlotType::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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: true, + circuit_holder: true, + }, + slots: vec![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { + name : "Cartridge".into(), typ : Class::Cartridge }, SlotInfo { name : + "Cartridge1".into(), typ : Class::Cartridge }, SlotInfo { name : + "Programmable Chip".into(), typ : Class::ProgrammableChip } + ] + .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![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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 (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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), + (5u32, "High".into()), (6u32, "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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), + (5u32, "High".into()), (6u32, "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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), + (5u32, "High".into()), (6u32, "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![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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 , 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( + 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(), 5f64)].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![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + SlotInfo { name : "".into(), typ : Class::Egg }, SlotInfo { name : "" + .into(), typ : Class::Egg }, SlotInfo { name : "".into(), typ : + Class::Egg }, SlotInfo { name : "".into(), typ : Class::Egg }, SlotInfo { + name : "".into(), typ : Class::Egg }, SlotInfo { name : "".into(), typ : + Class::Egg } + ] + .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![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + SlotInfo { name : "Air Tank".into(), typ : Class::GasCanister }, SlotInfo + { name : "Waste Tank".into(), typ : Class::GasCanister }, SlotInfo { name + : "Life Support".into(), typ : Class::Battery }, SlotInfo { name : + "Filter".into(), typ : Class::GasFilter }, SlotInfo { name : "Filter" + .into(), typ : Class::GasFilter }, SlotInfo { name : "Filter".into(), typ + : Class::GasFilter } + ] + .into_iter() + .collect(), + suit_info: SuitInfo { + hygine_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( + 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![ + SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : + "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ + : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, + SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : + "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ + : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool } + ] + .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![ + SlotInfo { name : "Air Tank".into(), typ : Class::GasCanister }, SlotInfo + { name : "Waste Tank".into(), typ : Class::GasCanister }, SlotInfo { name + : "Life Support".into(), typ : Class::Battery }, SlotInfo { name : + "Filter".into(), typ : Class::GasFilter }, SlotInfo { name : "Filter" + .into(), typ : Class::GasFilter }, SlotInfo { name : "Filter".into(), typ + : Class::GasFilter } + ] + .into_iter() + .collect(), + suit_info: SuitInfo { + hygine_reduction_multiplier: 1f32, + waste_max_pressure: 4053f32, + }, + } + .into(), + ); + map.insert( + 235361649i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemExplosive".into(), + prefab_hash: 235361649i32, + desc: "".into(), + name: "Remote Explosive".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( + 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![ + (0u32, 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![(0u32, "Low Power".into()), (1u32, "High Power".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, + vec![(LogicSlotType::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()), (2u32, + vec![(LogicSlotType::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()), (3u32, + vec![(LogicSlotType::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()), (4u32, + vec![(LogicSlotType::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()), (5u32, + vec![(LogicSlotType::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()), (6u32, + vec![(LogicSlotType::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()), (7u32, + vec![(LogicSlotType::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()), (8u32, + vec![(LogicSlotType::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()), (9u32, + vec![(LogicSlotType::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()), (10u32, + vec![(LogicSlotType::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()), (11u32, + vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None } + ] + .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![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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()), (2u32, + vec![(LogicSlotType::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()), (3u32, + vec![(LogicSlotType::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()), (4u32, + vec![(LogicSlotType::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()), (5u32, + vec![(LogicSlotType::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()), (6u32, + vec![(LogicSlotType::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()), (7u32, + vec![(LogicSlotType::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()), (8u32, + vec![(LogicSlotType::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()), (9u32, + vec![(LogicSlotType::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()), (10u32, + vec![(LogicSlotType::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()), (11u32, + vec![(LogicSlotType::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()), (12u32, + vec![(LogicSlotType::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()), (13u32, + vec![(LogicSlotType::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()), (14u32, + vec![(LogicSlotType::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![ + SlotInfo { name : "Propellant".into(), typ : Class::GasCanister }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None }, SlotInfo { name : "".into(), typ : Class::None } + ] + .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![ + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore } + ] + .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![ + (0u32, 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()), (1u32, 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()), (2u32, 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()), (3u32, vec![(LogicSlotType::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()), (4u32, + vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Air Tank".into(), typ : Class::GasCanister }, SlotInfo + { name : "Waste Tank".into(), typ : Class::GasCanister }, SlotInfo { name + : "Life Support".into(), typ : Class::Battery }, SlotInfo { name : + "Programmable Chip".into(), typ : Class::ProgrammableChip }, SlotInfo { + name : "Filter".into(), typ : Class::GasFilter }, SlotInfo { name : + "Filter".into(), typ : Class::GasFilter }, SlotInfo { name : "Filter" + .into(), typ : Class::GasFilter }, SlotInfo { name : "Filter".into(), typ + : Class::GasFilter } + ] + .into_iter() + .collect(), + suit_info: SuitInfo { + hygine_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![ + SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : + "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Plant".into(), typ + : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, + SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : + "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), + typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : + Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, + SlotInfo { name : "Plant".into(), typ : Class::Plant } + ] + .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( + 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![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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()), (2u32, + vec![(LogicSlotType::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()), (3u32, + vec![(LogicSlotType::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()), (4u32, + vec![(LogicSlotType::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()), (5u32, + vec![(LogicSlotType::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()), (6u32, + vec![(LogicSlotType::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()), (7u32, + vec![(LogicSlotType::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()), (8u32, + vec![(LogicSlotType::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()), (9u32, + vec![(LogicSlotType::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![ + SlotInfo { name : "Propellant".into(), typ : Class::GasCanister }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None } + ] + .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( + -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( + 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 Windows)".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( + 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 (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![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, + 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()), (2u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Programmable Chip".into(), typ : + Class::ProgrammableChip }, SlotInfo { name : "Battery".into(), typ : + Class::Battery }, SlotInfo { name : "Motherboard".into(), typ : + Class::Motherboard } + ] + .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 Liquid Valve." + .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![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + (0u32, 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![(0u32, "Default".into()), (1u32, "Flatten".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None } + ] + .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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore } + ] + .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![ + SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : + "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore } + ] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, + vec![(LogicSlotType::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()), (2u32, + vec![(LogicSlotType::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()), (3u32, + vec![(LogicSlotType::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()), (4u32, + vec![(LogicSlotType::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()), (5u32, + vec![(LogicSlotType::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()), (6u32, + vec![(LogicSlotType::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()), (7u32, + vec![(LogicSlotType::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()), (8u32, + vec![(LogicSlotType::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()), (9u32, + vec![(LogicSlotType::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()), (10u32, + vec![(LogicSlotType::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()), (11u32, + vec![(LogicSlotType::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()), (12u32, + vec![(LogicSlotType::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()), (13u32, + vec![(LogicSlotType::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()), (14u32, + vec![(LogicSlotType::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![ + SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : + "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore } + ] + .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: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + 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![ + (0u32, 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![(0u32, "Default".into()), (1u32, "Flatten".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + (0u32, 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![(0u32, "Default".into()), (1u32, "Flatten".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } + ] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, + vec![(LogicSlotType::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()), (2u32, + vec![(LogicSlotType::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()), (3u32, + vec![(LogicSlotType::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()), (4u32, + vec![(LogicSlotType::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()), (5u32, + vec![(LogicSlotType::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()), (6u32, + vec![(LogicSlotType::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()), (7u32, + vec![(LogicSlotType::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()), (8u32, + vec![(LogicSlotType::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()), (9u32, + vec![(LogicSlotType::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()), (10u32, + vec![(LogicSlotType::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()), (11u32, + vec![(LogicSlotType::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![ + SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : + "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ + : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, + SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : + "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ + : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, + SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : + "Tool".into(), typ : Class::Tool }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None } + ] + .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![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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 Passive Vent among other variants." + .into(), + name: "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." + .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![ + (0u32, 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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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( + 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: "".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![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister + } + ] + .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![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { + name : "Sensor Processing Unit".into(), typ : Class::SensorProcessingUnit + } + ] + .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![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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()), (2u32, + vec![(LogicSlotType::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()), (3u32, + vec![(LogicSlotType::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()), (4u32, + vec![(LogicSlotType::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()), (5u32, + vec![(LogicSlotType::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()), (6u32, + vec![(LogicSlotType::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()), (7u32, + vec![(LogicSlotType::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()), (8u32, + vec![(LogicSlotType::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()), (9u32, + vec![(LogicSlotType::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![ + SlotInfo { name : "Propellant".into(), typ : Class::GasCanister }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None } + ] + .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![SlotInfo { name : "Spray Can".into(), typ : Class::Bottle }] + .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 Atmos Analyzer or Tracker, Medical Analyzer, Ore Scanner, 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![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { + name : "Cartridge".into(), typ : Class::Cartridge } + ] + .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![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { + name : "Dirt Canister".into(), typ : Class::Ore } + ] + .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![ + SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : + "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ + : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, + SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : + "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ + : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool } + ] + .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 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( + 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![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } + ] + .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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), + (5u32, "High".into()), (6u32, "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 Air Conditioner".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 Air Conditioner".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 Hydroponics Tray".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 Large Extendable Radiator".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 Structure RTG".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 Structure Weather Station".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 Structure Weather Station".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 Structure Weather Station".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 Structure Weather Station".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 Structure Weather Station".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 Structure Weather Station".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 Structure Weather Station".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 Structure Weather Station".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 Turbine Generator".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 Turbine Generator".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 Turbine Generator".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 Wall Cooler".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 Wall Cooler".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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : + "Entity".into(), typ : Class::Entity } + ] + .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![ + (0u32, "None".into()), (1u32, "NoContact".into()), (2u32, + "Moving".into()), (3u32, "Holding".into()), (4u32, "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![ + (0u32, "None".into()), (1u32, "NoContact".into()), (2u32, + "Moving".into()), (3u32, "Holding".into()), (4u32, "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![ + (0u32, vec![(LogicSlotType::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![ + (0u32, "Whole Note".into()), (1u32, "Half Note".into()), (2u32, + "Quarter Note".into()), (3u32, "Eighth Note".into()), (4u32, + "Sixteenth Note".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Sound Cartridge".into(), typ : Class::SoundCartridge } + ] + .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 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 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." + .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, 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 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." + .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![ + SlotInfo { name : "Brain".into(), typ : Class::Organ }, SlotInfo { name : + "Lungs".into(), typ : Class::Organ } + ] + .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![ + SlotInfo { name : "Brain".into(), typ : Class::Organ }, SlotInfo { name : + "Lungs".into(), typ : Class::Organ } + ] + .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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::Battery }, SlotInfo { name : "Liquid Canister".into(), typ : + Class::LiquidCanister } + ] + .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![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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()), (2u32, + vec![(LogicSlotType::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()), (3u32, + vec![(LogicSlotType::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()), (4u32, + vec![(LogicSlotType::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()), (5u32, + vec![(LogicSlotType::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()), (6u32, + vec![(LogicSlotType::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()), (7u32, + vec![(LogicSlotType::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()), (8u32, + vec![(LogicSlotType::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()), (9u32, + vec![(LogicSlotType::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![ + (0u32, "None".into()), (1u32, "Follow".into()), (2u32, + "MoveToTarget".into()), (3u32, "Roam".into()), (4u32, "Unload" + .into()), (5u32, "PathToTarget".into()), (6u32, "StorageFull" + .into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: true, + circuit_holder: true, + }, + slots: vec![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { + name : "Programmable Chip".into(), typ : Class::ProgrammableChip }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, + SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : + "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : + Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore } + ] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, + vec![(LogicSlotType::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()), (2u32, + vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, 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()), (6u32, 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()), (7u32, 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()), (8u32, 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()), (9u32, 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()), (10u32, 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()), (11u32, 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()), (12u32, vec![(LogicSlotType::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()), (13u32, + vec![(LogicSlotType::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()), (14u32, + vec![(LogicSlotType::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()), (15u32, + vec![(LogicSlotType::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![ + SlotInfo { name : "Entity".into(), typ : Class::Entity }, SlotInfo { name + : "Entity".into(), typ : Class::Entity }, SlotInfo { name : "Gas Filter" + .into(), typ : Class::GasFilter }, SlotInfo { name : "Gas Filter".into(), + typ : Class::GasFilter }, SlotInfo { name : "Gas Filter".into(), typ : + Class::GasFilter }, SlotInfo { name : "Gas Canister".into(), typ : + Class::GasCanister }, SlotInfo { name : "Gas Canister".into(), typ : + Class::GasCanister }, SlotInfo { name : "Gas Canister".into(), typ : + Class::GasCanister }, SlotInfo { name : "Gas Canister".into(), typ : + Class::GasCanister }, SlotInfo { name : "Battery".into(), typ : + Class::Battery }, SlotInfo { name : "Battery".into(), typ : + Class::Battery }, SlotInfo { name : "Battery".into(), typ : + Class::Battery }, SlotInfo { name : "Container Slot".into(), typ : + Class::None }, SlotInfo { name : "Container Slot".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : + Class::None } + ] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, + vec![(LogicSlotType::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()), (2u32, + 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()), (3u32, 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()), (4u32, 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()), (5u32, vec![(LogicSlotType::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()), (6u32, + vec![(LogicSlotType::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()), (7u32, + vec![(LogicSlotType::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()), (8u32, + vec![(LogicSlotType::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()), (9u32, + vec![(LogicSlotType::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()), (10u32, + vec![(LogicSlotType::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![ + SlotInfo { name : "Entity".into(), typ : Class::Entity }, SlotInfo { name + : "Entity".into(), typ : Class::Entity }, SlotInfo { name : "Battery" + .into(), typ : Class::Battery }, SlotInfo { name : "Battery".into(), typ + : Class::Battery }, SlotInfo { name : "Battery".into(), typ : + Class::Battery }, SlotInfo { name : "".into(), + typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None }, SlotInfo { name : + "".into(), typ : Class::None } + ] + .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![ + SlotInfo { name : "Captain\'s Seat".into(), typ : Class::Entity }, + SlotInfo { name : "Passenger Seat Left".into(), typ : Class::Entity }, + SlotInfo { name : "Passenger Seat Right".into(), typ : Class::Entity } + ] + .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![ + (0u32, vec![(LogicSlotType::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![(0u32, "Outward".into()), (1u32, "Inward".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "".into(), typ : Class::DataDisk }] + .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![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None } + ] + .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![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None } + ] + .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![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None } + ] + .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_resouces: 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![ + ("ItemCannedCondensedMilk".into(), Recipe { 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() }), ("ItemCannedEdamame" + .into(), Recipe { 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() }), ("ItemCannedMushroom".into(), Recipe { + 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(), 8f64), ("Oil" + .into(), 1f64), ("Steel".into(), 1f64)] .into_iter().collect() }), + ("ItemCannedPowderedEggs".into(), Recipe { 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() }), + ("ItemCannedRicePudding".into(), Recipe { 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() }), + ("ItemCornSoup".into(), Recipe { 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() }), ("ItemFrenchFries".into(), Recipe { + 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() }), + ("ItemPumpkinSoup".into(), Recipe { 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(), 5f64), + ("Steel".into(), 1f64)] .into_iter().collect() }), ("ItemTomatoSoup" + .into(), Recipe { 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() }) + ] + .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(), typ : "PrinterInstruction".into(), value : 6i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) + ] + .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![(0u32, 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![(0u32, "Idle".into()), (1u32, "Active".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: true, + }, + slots: vec![ + SlotInfo { name : "Programmable Chip".into(), typ : + Class::ProgrammableChip } + ] + .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![(0u32, "Operate".into()), (1u32, "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![(0u32, "Operate".into()), (1u32, "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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Import".into(), typ : Class::Ore }, SlotInfo { name : + "Export".into(), typ : Class::Ingot } + ] + .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![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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![ + (0u32, "Idle".into()), (1u32, "Discharged".into()), (2u32, + "Discharging".into()), (3u32, "Charging".into()), (4u32, + "Charged".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { + name : "Data Disk".into(), typ : Class::DataDisk } + ] + .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![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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![ + (0u32, "Idle".into()), (1u32, "Discharged".into()), (2u32, + "Discharging".into()), (3u32, "Charging".into()), (4u32, + "Charged".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { + name : "Data Disk".into(), typ : Class::DataDisk } + ] + .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![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None } + ] + .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![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { name + : "Export".into(), typ : Class::None } + ] + .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_resouces: 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![ + ("CardboardBox".into(), Recipe { 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() }), + ("ItemCableCoil".into(), Recipe { 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() }), + ("ItemCoffeeMug".into(), Recipe { 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() }), + ("ItemEggCarton".into(), Recipe { 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() }), + ("ItemEmptyCan".into(), Recipe { 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() }), + ("ItemEvaSuit".into(), Recipe { 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() }), ("ItemGlassSheets".into(), Recipe { 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() }), ("ItemIronFrames".into(), Recipe { 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() }), ("ItemIronSheets".into(), Recipe { 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() }), ("ItemKitAccessBridge".into(), Recipe { + 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() }), ("ItemKitArcFurnace".into(), Recipe { 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() }), ("ItemKitAutolathe" + .into(), Recipe { 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() }), ("ItemKitBeds".into(), Recipe { + 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() }), + ("ItemKitBlastDoor".into(), Recipe { 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() }), ("ItemKitCentrifuge".into(), Recipe { 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() }), ("ItemKitChairs".into(), + Recipe { 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() }), + ("ItemKitChute".into(), Recipe { 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() }), + ("ItemKitCompositeCladding".into(), Recipe { 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() }), ("ItemKitCompositeFloorGrating".into(), + Recipe { 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() }), ("ItemKitCrate".into(), Recipe { + 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() }), ("ItemKitCrateMkII".into(), Recipe + { 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() }), + ("ItemKitCrateMount".into(), Recipe { 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() }), + ("ItemKitDeepMiner".into(), Recipe { 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() }), ("ItemKitDoor".into(), Recipe { 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() }), + ("ItemKitElectronicsPrinter".into(), Recipe { 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() }), + ("ItemKitFlagODA".into(), Recipe { 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() }), + ("ItemKitFurnace".into(), Recipe { 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() }), ("ItemKitFurniture".into(), Recipe { 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() }), + ("ItemKitHydraulicPipeBender".into(), Recipe { 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() }), + ("ItemKitInteriorDoors".into(), Recipe { 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() }), ("ItemKitLadder".into(), Recipe { 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() }), ("ItemKitLocker".into(), Recipe { 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() }), ("ItemKitPipe".into(), Recipe { 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() }), ("ItemKitRailing".into(), Recipe { 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() }), ("ItemKitRecycler".into(), Recipe { 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() }), + ("ItemKitReinforcedWindows".into(), Recipe { 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![("Steel".into(), 2f64)] + .into_iter().collect() }), ("ItemKitRespawnPointWallMounted".into(), + Recipe { 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() }), + ("ItemKitRocketManufactory".into(), Recipe { 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() }), + ("ItemKitSDBHopper".into(), Recipe { 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() }), + ("ItemKitSecurityPrinter".into(), Recipe { 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() }), + ("ItemKitSign".into(), Recipe { 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() }), + ("ItemKitSorter".into(), Recipe { 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() }), ("ItemKitStacker" + .into(), Recipe { 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() }), ("ItemKitStairs".into(), Recipe { 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() }), ("ItemKitStairwell".into(), Recipe { 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() }), ("ItemKitStandardChute".into(), Recipe { + 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() }), ("ItemKitTables".into(), Recipe { 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() }), ("ItemKitToolManufactory" + .into(), Recipe { 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() }), ("ItemKitWall".into(), Recipe { 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() }), ("ItemKitWallArch".into(), Recipe { 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() }), ("ItemKitWallFlat".into(), Recipe { 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() }), ("ItemKitWallGeometry".into(), Recipe { + 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() }), ("ItemKitWallIron".into(), Recipe { + 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() }), ("ItemKitWallPadded".into(), Recipe + { 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() }), ("ItemKitWindowShutter".into(), + Recipe { 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![("Iron".into(), + 1f64), ("Steel".into(), 2f64)] .into_iter().collect() }), + ("ItemPlasticSheets".into(), Recipe { 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() + }), ("ItemSpaceHelmet".into(), Recipe { 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() }), ("ItemSteelFrames".into(), Recipe { 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() }), ("ItemSteelSheets".into(), Recipe { 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() }), ("ItemStelliteGlassSheets".into(), Recipe + { 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() }), + ("ItemWallLight".into(), Recipe { 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() }), ("KitSDBSilo" + .into(), Recipe { 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() }), + ("KitStructureCombustionCentrifuge".into(), Recipe { 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() }) + ] + .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(), typ : "PrinterInstruction".into(), value : 6i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) + ] + .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![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None } + ] + .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_resouces: 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![ + ("ItemBreadLoaf".into(), Recipe { 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() }), ("ItemCerealBar".into(), Recipe { 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() }), ("ItemChocolateBar".into(), Recipe { 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() }), ("ItemChocolateCake" + .into(), Recipe { 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() }), ("ItemChocolateCerealBar".into(), Recipe { 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() }), + ("ItemCookedCondensedMilk".into(), Recipe { 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() }), ("ItemCookedCorn".into(), Recipe { 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() }), ("ItemCookedMushroom".into(), Recipe { + 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() }), ("ItemCookedPowderedEggs".into(), Recipe { + 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() }), ("ItemCookedPumpkin".into(), Recipe { 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() }), ("ItemCookedRice".into(), Recipe { 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(), 3f64)] + .into_iter().collect() }), ("ItemCookedSoybean".into(), Recipe { 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(), 5f64)] + .into_iter().collect() }), ("ItemCookedTomato".into(), Recipe { 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() }), ("ItemFries".into(), Recipe { 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() }), ("ItemMuffin".into(), + Recipe { 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() }), ("ItemPlainCake".into(), Recipe { 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() }), ("ItemPotatoBaked".into(), Recipe { 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() }), ("ItemPumpkinPie".into(), Recipe { 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() }) + ] + .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(), typ : "PrinterInstruction".into(), value : 6i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) + ] + .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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), + (5u32, "High".into()), (6u32, "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![ + (0u32, 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()), (1u32, 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()), (2u32, 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()), (3u32, 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()), (4u32, 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![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { + name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : + "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Battery" + .into(), typ : Class::Battery }, SlotInfo { name : "Battery".into(), typ + : Class::Battery } + ] + .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![ + (0u32, 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()), (1u32, 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![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { + name : "Battery".into(), typ : Class::Battery } + ] + .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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), + (5u32, "High".into()), (6u32, "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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), + (5u32, "High".into()), (6u32, "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![ + (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, + "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), + (5u32, "High".into()), (6u32, "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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, + SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } + ] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, + SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } + ] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, + SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } + ] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, + SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } + ] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, + SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } + ] + .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![(0u32, "Operate".into()), (1u32, "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: "Description coming.".into(), + name: "Block Bed".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Bed".into(), typ : Class::Entity }] + .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![(0u32, "Mode0".into()), (1u32, "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![ + (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() + .collect()), (2u32, vec![] .into_iter().collect()), (3u32, vec![] + .into_iter().collect()), (4u32, vec![] .into_iter().collect()), + (5u32, vec![] .into_iter().collect()), (6u32, vec![] .into_iter() + .collect()), (7u32, vec![] .into_iter().collect()), (8u32, vec![] + .into_iter().collect()), (9u32, vec![] .into_iter().collect()), + (10u32, vec![] .into_iter().collect()), (11u32, vec![] .into_iter() + .collect()), (12u32, vec![] .into_iter().collect()), (13u32, vec![] + .into_iter().collect()), (14u32, vec![] .into_iter().collect()), + (15u32, vec![] .into_iter().collect()), (16u32, vec![] .into_iter() + .collect()), (17u32, vec![] .into_iter().collect()), (18u32, vec![] + .into_iter().collect()), (19u32, vec![] .into_iter().collect()), + (20u32, vec![] .into_iter().collect()), (21u32, vec![] .into_iter() + .collect()), (22u32, vec![] .into_iter().collect()), (23u32, vec![] + .into_iter().collect()), (24u32, vec![] .into_iter().collect()), + (25u32, vec![] .into_iter().collect()), (26u32, vec![] .into_iter() + .collect()), (27u32, vec![] .into_iter().collect()), (28u32, vec![] + .into_iter().collect()), (29u32, vec![] .into_iter().collect()), + (30u32, vec![] .into_iter().collect()), (31u32, vec![] .into_iter() + .collect()), (32u32, vec![] .into_iter().collect()), (33u32, vec![] + .into_iter().collect()), (34u32, vec![] .into_iter().collect()), + (35u32, vec![] .into_iter().collect()), (36u32, vec![] .into_iter() + .collect()), (37u32, vec![] .into_iter().collect()), (38u32, vec![] + .into_iter().collect()), (39u32, vec![] .into_iter().collect()), + (40u32, vec![] .into_iter().collect()), (41u32, vec![] .into_iter() + .collect()), (42u32, vec![] .into_iter().collect()), (43u32, vec![] + .into_iter().collect()), (44u32, vec![] .into_iter().collect()), + (45u32, vec![] .into_iter().collect()), (46u32, vec![] .into_iter() + .collect()), (47u32, vec![] .into_iter().collect()), (48u32, vec![] + .into_iter().collect()), (49u32, vec![] .into_iter().collect()), + (50u32, vec![] .into_iter().collect()), (51u32, vec![] .into_iter() + .collect()), (52u32, vec![] .into_iter().collect()), (53u32, vec![] + .into_iter().collect()), (54u32, vec![] .into_iter().collect()), + (55u32, vec![] .into_iter().collect()), (56u32, vec![] .into_iter() + .collect()), (57u32, vec![] .into_iter().collect()), (58u32, vec![] + .into_iter().collect()), (59u32, vec![] .into_iter().collect()), + (60u32, vec![] .into_iter().collect()), (61u32, vec![] .into_iter() + .collect()), (62u32, vec![] .into_iter().collect()), (63u32, vec![] + .into_iter().collect()), (64u32, vec![] .into_iter().collect()), + (65u32, vec![] .into_iter().collect()), (66u32, vec![] .into_iter() + .collect()), (67u32, vec![] .into_iter().collect()), (68u32, vec![] + .into_iter().collect()), (69u32, vec![] .into_iter().collect()), + (70u32, vec![] .into_iter().collect()), (71u32, vec![] .into_iter() + .collect()), (72u32, vec![] .into_iter().collect()), (73u32, vec![] + .into_iter().collect()), (74u32, vec![] .into_iter().collect()), + (75u32, vec![] .into_iter().collect()), (76u32, vec![] .into_iter() + .collect()), (77u32, vec![] .into_iter().collect()), (78u32, vec![] + .into_iter().collect()), (79u32, vec![] .into_iter().collect()), + (80u32, vec![] .into_iter().collect()), (81u32, vec![] .into_iter() + .collect()), (82u32, vec![] .into_iter().collect()), (83u32, vec![] + .into_iter().collect()), (84u32, vec![] .into_iter().collect()), + (85u32, vec![] .into_iter().collect()), (86u32, vec![] .into_iter() + .collect()), (87u32, vec![] .into_iter().collect()), (88u32, vec![] + .into_iter().collect()), (89u32, vec![] .into_iter().collect()), + (90u32, vec![] .into_iter().collect()), (91u32, vec![] .into_iter() + .collect()), (92u32, vec![] .into_iter().collect()), (93u32, vec![] + .into_iter().collect()), (94u32, vec![] .into_iter().collect()), + (95u32, vec![] .into_iter().collect()), (96u32, vec![] .into_iter() + .collect()), (97u32, vec![] .into_iter().collect()), (98u32, vec![] + .into_iter().collect()), (99u32, vec![] .into_iter().collect()), + (100u32, vec![] .into_iter().collect()), (101u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), + typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None } + ] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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()), (12u32, vec![(LogicSlotType::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()), (13u32, vec![(LogicSlotType::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()), (14u32, vec![(LogicSlotType::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()), (15u32, vec![(LogicSlotType::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()), (16u32, vec![(LogicSlotType::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()), (17u32, vec![(LogicSlotType::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()), (18u32, vec![(LogicSlotType::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()), (19u32, vec![(LogicSlotType::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()), (20u32, vec![(LogicSlotType::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()), (21u32, vec![(LogicSlotType::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()), (22u32, vec![(LogicSlotType::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()), (23u32, vec![(LogicSlotType::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()), (24u32, vec![(LogicSlotType::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()), (25u32, vec![(LogicSlotType::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()), (26u32, vec![(LogicSlotType::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()), (27u32, vec![(LogicSlotType::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()), (28u32, vec![(LogicSlotType::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()), (29u32, vec![(LogicSlotType::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()), (30u32, vec![(LogicSlotType::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()), (31u32, vec![(LogicSlotType::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()), (32u32, vec![(LogicSlotType::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()), (33u32, vec![(LogicSlotType::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()), (34u32, vec![(LogicSlotType::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()), (35u32, vec![(LogicSlotType::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()), (36u32, vec![(LogicSlotType::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()), (37u32, vec![(LogicSlotType::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()), (38u32, vec![(LogicSlotType::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()), (39u32, vec![(LogicSlotType::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()), (40u32, vec![(LogicSlotType::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()), (41u32, vec![(LogicSlotType::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()), (42u32, vec![(LogicSlotType::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()), (43u32, vec![(LogicSlotType::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()), (44u32, vec![(LogicSlotType::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()), (45u32, vec![(LogicSlotType::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()), (46u32, vec![(LogicSlotType::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()), (47u32, vec![(LogicSlotType::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()), (48u32, vec![(LogicSlotType::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()), (49u32, vec![(LogicSlotType::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()), (50u32, vec![(LogicSlotType::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()), (51u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), + typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None } + ] + .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![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None } + ] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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 Bin".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Input".into(), typ : Class::None }] + .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![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + .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![ + (0u32, vec![(LogicSlotType::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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + .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![ + (0u32, vec![(LogicSlotType::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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + .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( + -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![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Import".into(), typ : Class::None }] + .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![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Export".into(), typ : Class::None }] + .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![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + .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![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + .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![ + (0u32, vec![(LogicSlotType::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![ + (0u32, "Left".into()), (1u32, "Center".into()), (2u32, "Right" + .into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + .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![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + .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![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + .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![ + (0u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Programmable Chip".into(), typ : + Class::ProgrammableChip } + ] + .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![ + (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() + .collect()), (2u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None }, SlotInfo { name : + "Programmable Chip".into(), typ : Class::ProgrammableChip } + ] + .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![(0u32, "Operate".into()), (1u32, "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( + -626563514i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureComputer".into(), + prefab_hash: -626563514i32, + 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" + .into(), + name: "Computer".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() + .collect()), (2u32, 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![ + SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk }, SlotInfo { + name : "Data Disk".into(), typ : Class::DataDisk }, SlotInfo { name : + "Motherboard".into(), typ : Class::Motherboard } + ] + .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![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Circuit Board".into(), typ : Class::Circuitboard }, + SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk } + ] + .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![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Circuit Board".into(), typ : Class::Circuitboard }, + SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk } + ] + .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![ + (0u32, "Default".into()), (1u32, "Percent".into()), (2u32, + "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![ + (0u32, "Default".into()), (1u32, "Percent".into()), (2u32, + "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![ + (0u32, "Default".into()), (1u32, "Percent".into()), (2u32, + "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![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Circuit Board".into(), typ : Class::Circuitboard }, + SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk } + ] + .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![ + (0u32, vec![(LogicSlotType::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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Entity".into(), typ : Class::Entity }] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None } + ] + .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![SlotInfo { name : "Container Slot".into(), typ : Class::None }] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Bed".into(), typ : Class::Entity }] + .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![(0u32, 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![SlotInfo { name : "Player".into(), typ : Class::Entity }] + .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![(0u32, 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![SlotInfo { name : "Player".into(), typ : Class::Entity }] + .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![ + (0u32, "Default".into()), (1u32, "Horizontal".into()), (2u32, + "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![(0u32, 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![SlotInfo { name : "Export".into(), typ : Class::None }] + .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: "".into(), + name: "".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![(0u32, 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![(0u32, "Idle".into()), (1u32, "Active".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: true, + }, + slots: vec![ + SlotInfo { name : "Programmable Chip".into(), typ : + Class::ProgrammableChip } + ] + .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![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { name + : "Export".into(), typ : Class::None } + ] + .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_resouces: 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![ + ("ApplianceChemistryStation".into(), Recipe { 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() }), + ("ApplianceDeskLampLeft".into(), Recipe { 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() }), ("ApplianceDeskLampRight" + .into(), Recipe { 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() }), + ("ApplianceMicrowave".into(), Recipe { 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() }), + ("AppliancePackagingMachine".into(), Recipe { 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() }), + ("AppliancePaintMixer".into(), Recipe { 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() }), + ("AppliancePlantGeneticAnalyzer".into(), Recipe { 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() }), + ("AppliancePlantGeneticSplicer".into(), Recipe { 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() }), + ("AppliancePlantGeneticStabilizer".into(), Recipe { 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() }), + ("ApplianceReagentProcessor".into(), Recipe { 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() }), + ("ApplianceTabletDock".into(), Recipe { 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() }), ("AutolathePrinterMod".into(), Recipe { 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() }), ("Battery_Wireless_cell".into(), + Recipe { 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() }), ("Battery_Wireless_cell_Big" + .into(), Recipe { 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() }), ("CartridgeAtmosAnalyser" + .into(), Recipe { 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() }), ("CartridgeConfiguration".into(), + Recipe { 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() }), ("CartridgeElectronicReader".into(), Recipe { 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() }), + ("CartridgeGPS".into(), Recipe { 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() }), + ("CartridgeMedicalAnalyser".into(), Recipe { 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() }), + ("CartridgeNetworkAnalyser".into(), Recipe { 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() }), + ("CartridgeOreScanner".into(), Recipe { 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() }), + ("CartridgeOreScannerColor".into(), Recipe { 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() }), ("CartridgePlantAnalyser".into(), + Recipe { 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() }), ("CartridgeTracker".into(), Recipe { 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() }), + ("CircuitboardAdvAirlockControl".into(), Recipe { 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() }), + ("CircuitboardAirControl".into(), Recipe { 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() }), + ("CircuitboardAirlockControl".into(), Recipe { 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() }), + ("CircuitboardDoorControl".into(), Recipe { 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() }), ("CircuitboardGasDisplay" + .into(), Recipe { 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() }), ("CircuitboardGraphDisplay".into(), + Recipe { 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() }), + ("CircuitboardHashDisplay".into(), Recipe { 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() }), ("CircuitboardModeControl" + .into(), Recipe { 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() }), ("CircuitboardPowerControl".into(), Recipe { 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() }), ("CircuitboardShipDisplay" + .into(), Recipe { 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() }), ("CircuitboardSolarControl".into(), Recipe { 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() }), ("DynamicLight".into(), + Recipe { 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() }), + ("ElectronicPrinterMod".into(), Recipe { 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() }), ("ItemAdvancedTablet".into(), Recipe { 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() }), ("ItemAreaPowerControl".into(), Recipe { 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() }), + ("ItemBatteryCell".into(), Recipe { 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() }), + ("ItemBatteryCellLarge".into(), Recipe { 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() }), + ("ItemBatteryCellNuclear".into(), Recipe { 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() }), ("ItemBatteryCharger".into(), Recipe { 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() }), + ("ItemBatteryChargerSmall".into(), Recipe { 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() }), + ("ItemCableAnalyser".into(), Recipe { 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() }), ("ItemCableCoil" + .into(), Recipe { 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() }), + ("ItemCableCoilHeavy".into(), Recipe { 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() }), ("ItemCableFuse".into(), Recipe { 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() }), ("ItemCreditCard".into(), + Recipe { 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() }), + ("ItemDataDisk".into(), Recipe { 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() }), ("ItemElectronicParts".into(), Recipe { + 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() }), + ("ItemFlashingLight".into(), Recipe { 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() }), ("ItemHEMDroidRepairKit".into(), Recipe { + 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() }), ("ItemIntegratedCircuit10".into(), Recipe + { 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() }), ("ItemKitAIMeE".into(), + Recipe { 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() }), + ("ItemKitAdvancedComposter".into(), Recipe { 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() }), ("ItemKitAdvancedFurnace".into(), + Recipe { 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() }), + ("ItemKitAdvancedPackagingMachine".into(), Recipe { 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() }), ("ItemKitAutoMinerSmall" + .into(), Recipe { 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() }), ("ItemKitAutomatedOven".into(), Recipe { + 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() }), ("ItemKitBattery".into(), Recipe { 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() }), + ("ItemKitBatteryLarge".into(), Recipe { 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() }), + ("ItemKitBeacon".into(), Recipe { 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() }), ("ItemKitComputer".into(), Recipe { 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() }), + ("ItemKitConsole".into(), Recipe { 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() }), + ("ItemKitDynamicGenerator".into(), Recipe { 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() }), ("ItemKitElevator".into(), Recipe { 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() }), ("ItemKitFridgeBig".into(), Recipe { 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() }), ("ItemKitFridgeSmall".into(), Recipe { + 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() }), ("ItemKitGasGenerator".into(), Recipe { 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() }), ("ItemKitGroundTelescope" + .into(), Recipe { 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() }), ("ItemKitGrowLight" + .into(), Recipe { 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() }), ("ItemKitHarvie".into(), + Recipe { 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() }), ("ItemKitHorizontalAutoMiner".into(), Recipe { 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() }), + ("ItemKitHydroponicStation".into(), Recipe { 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() }), ("ItemKitLandingPadAtmos".into(), Recipe { + 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() }), + ("ItemKitLandingPadBasic".into(), Recipe { 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() }), + ("ItemKitLandingPadWaypoint".into(), Recipe { 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() }), + ("ItemKitLargeSatelliteDish".into(), Recipe { 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() }), ("ItemKitLogicCircuit".into(), Recipe { 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() }), ("ItemKitLogicInputOutput".into(), Recipe { 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() }), ("ItemKitLogicMemory" + .into(), Recipe { 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() }), ("ItemKitLogicProcessor".into(), Recipe { 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() }), ("ItemKitLogicSwitch" + .into(), Recipe { 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() }), ("ItemKitLogicTransmitter".into(), Recipe { 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() }), ("ItemKitMusicMachines".into(), + Recipe { 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() }), + ("ItemKitPowerTransmitter".into(), Recipe { 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() }), + ("ItemKitPowerTransmitterOmni".into(), Recipe { 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() }), + ("ItemKitPressurePlate".into(), Recipe { 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() }), ("ItemKitResearchMachine".into(), Recipe { + 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() }), + ("ItemKitSatelliteDish".into(), Recipe { 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() }), ("ItemKitSensor" + .into(), Recipe { 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(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), + 3f64)] .into_iter().collect() }), ("ItemKitSmallSatelliteDish" + .into(), Recipe { 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() }), ("ItemKitSolarPanel".into(), Recipe { 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() }), + ("ItemKitSolarPanelBasic".into(), Recipe { 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() }), + ("ItemKitSolarPanelBasicReinforced".into(), Recipe { 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() }), ("ItemKitSolarPanelReinforced" + .into(), Recipe { 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() }), ("ItemKitSolidGenerator".into(), Recipe { 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() }), ("ItemKitSpeaker".into(), + Recipe { 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() }), ("ItemKitStirlingEngine".into(), Recipe { 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() }), + ("ItemKitTransformer".into(), Recipe { 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() }), ("ItemKitTransformerSmall".into(), Recipe + { 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() }), ("ItemKitTurbineGenerator".into(), Recipe { 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() }), ("ItemKitUprightWindTurbine".into(), + Recipe { 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() }), ("ItemKitVendingMachine".into(), + Recipe { 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() }), + ("ItemKitVendingMachineRefrigerated".into(), Recipe { 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() }), ("ItemKitWeatherStation".into(), + Recipe { 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() }), + ("ItemKitWindTurbine".into(), Recipe { 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() }), ("ItemLabeller" + .into(), Recipe { 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() }), ("ItemLaptop".into(), Recipe { 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() }), + ("ItemPowerConnector".into(), Recipe { 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() }), + ("ItemResearchCapsule".into(), Recipe { 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() }), + ("ItemResearchCapsuleGreen".into(), Recipe { 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() }), ("ItemResearchCapsuleRed".into(), + Recipe { 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() }), ("ItemResearchCapsuleYellow".into(), Recipe { 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() }), ("ItemSoundCartridgeBass".into(), + Recipe { 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() }), ("ItemSoundCartridgeDrums".into(), Recipe { 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() }), + ("ItemSoundCartridgeLeads".into(), Recipe { 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() }), + ("ItemSoundCartridgeSynth".into(), Recipe { 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() }), + ("ItemTablet".into(), Recipe { 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() }), ("ItemWallLight" + .into(), Recipe { 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() }), ("MotherboardComms".into(), Recipe { 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() }), ("MotherboardLogic".into(), Recipe + { 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() }), + ("MotherboardProgrammableChip".into(), Recipe { 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() }), ("MotherboardRockets" + .into(), Recipe { 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() }), ("MotherboardSorter".into(), Recipe { 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() }), ("PipeBenderMod".into(), + Recipe { 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() }), ("PortableComposter".into(), Recipe { 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() }), + ("PortableSolarPanel".into(), Recipe { 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() }), ("ToolPrinterMod" + .into(), Recipe { 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() }) + ] + .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(), typ : "PrinterInstruction".into(), value : 6i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) + ] + .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: "Description coming.".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![ + (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() + .collect()), (2u32, 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![(0u32, "Idle".into()), (1u32, "Active".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: true, + }, + slots: vec![ + SlotInfo { name : "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo + { name : "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo { name : + "Programmable Chip".into(), typ : Class::ProgrammableChip } + ] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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()), (12u32, vec![(LogicSlotType::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()), (13u32, vec![(LogicSlotType::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()), (14u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None } + ] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None } + ] + .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![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None } + ] + .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![ + (0u32, 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![ + SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } + ] + .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![ + (0u32, "Left".into()), (1u32, "Center".into()), (2u32, "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![(0u32, "Operate".into()), (1u32, "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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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![ + (0u32, "Idle".into()), (1u32, "Happy".into()), (2u32, "UnHappy" + .into()), (3u32, "Dead".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::Plant }, SlotInfo { name + : "Export".into(), typ : Class::None }, SlotInfo { name : "Hand".into(), + typ : Class::None } + ] + .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![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None } + ] + .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![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { name + : "Export".into(), typ : Class::None } + ] + .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_resouces: 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![ + ("ApplianceSeedTray".into(), Recipe { 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() }), + ("ItemActiveVent".into(), Recipe { 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() }), + ("ItemAdhesiveInsulation".into(), Recipe { 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() }), + ("ItemDynamicAirCon".into(), Recipe { 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() }), ("ItemDynamicScrubber".into(), Recipe { 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() }), ("ItemGasCanisterEmpty".into(), Recipe { + 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() }), ("ItemGasCanisterSmart".into(), + Recipe { 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() }), ("ItemGasFilterCarbonDioxide".into(), + Recipe { 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() }), ("ItemGasFilterCarbonDioxideL" + .into(), Recipe { 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() }), + ("ItemGasFilterCarbonDioxideM".into(), Recipe { 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() }), ("ItemGasFilterNitrogen".into(), Recipe { 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() }), ("ItemGasFilterNitrogenL".into(), Recipe { + 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() }), ("ItemGasFilterNitrogenM".into(), Recipe { + 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() }), ("ItemGasFilterNitrousOxide".into(), + Recipe { 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() }), ("ItemGasFilterNitrousOxideL" + .into(), Recipe { 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() }), + ("ItemGasFilterNitrousOxideM".into(), Recipe { 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() }), ("ItemGasFilterOxygen".into(), Recipe { 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() }), ("ItemGasFilterOxygenL".into(), Recipe { + 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() }), ("ItemGasFilterOxygenM".into(), Recipe { + 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() }), ("ItemGasFilterPollutants".into(), Recipe + { 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() }), ("ItemGasFilterPollutantsL".into(), + Recipe { 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() }), ("ItemGasFilterPollutantsM".into(), Recipe + { 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() }), ("ItemGasFilterVolatiles".into(), Recipe { + 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() }), ("ItemGasFilterVolatilesL".into(), + Recipe { 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() }), ("ItemGasFilterVolatilesM".into(), Recipe + { 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() }), ("ItemGasFilterWater".into(), Recipe { + 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() }), ("ItemGasFilterWaterL".into(), + Recipe { 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() }), ("ItemGasFilterWaterM".into(), Recipe { + 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() }), ("ItemHydroponicTray".into(), Recipe { + 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() }), ("ItemKitAirlock".into(), Recipe { + 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() }), ("ItemKitAirlockGate".into(), Recipe { 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() }), + ("ItemKitAtmospherics".into(), Recipe { 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() }), ("ItemKitChute" + .into(), Recipe { 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() }), ("ItemKitCryoTube".into(), + Recipe { 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() }), + ("ItemKitDrinkingFountain".into(), Recipe { 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() }), + ("ItemKitDynamicCanister".into(), Recipe { 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() }), ("ItemKitDynamicGasTankAdvanced".into(), + Recipe { 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() }), + ("ItemKitDynamicHydroponics".into(), Recipe { 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() }), ("ItemKitDynamicLiquidCanister".into(), Recipe { 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() }), ("ItemKitDynamicMKIILiquidCanister" + .into(), Recipe { 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() }), + ("ItemKitEvaporationChamber".into(), Recipe { 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() }), ("ItemKitHeatExchanger".into(), Recipe { 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() }), ("ItemKitIceCrusher" + .into(), Recipe { 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() }), ("ItemKitInsulatedLiquidPipe" + .into(), Recipe { 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() }), ("ItemKitInsulatedPipe".into(), Recipe { 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() }), + ("ItemKitInsulatedPipeUtility".into(), Recipe { 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() }), + ("ItemKitInsulatedPipeUtilityLiquid".into(), Recipe { 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() }), + ("ItemKitLargeDirectHeatExchanger".into(), Recipe { 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() }), + ("ItemKitLargeExtendableRadiator".into(), Recipe { 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() }), ("ItemKitLiquidRegulator".into(), Recipe { 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() }), + ("ItemKitLiquidTank".into(), Recipe { 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() }), ("ItemKitLiquidTankInsulated".into(), + Recipe { 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() }), ("ItemKitLiquidTurboVolumePump".into(), + Recipe { 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() }), + ("ItemKitPassiveLargeRadiatorGas".into(), Recipe { 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() }), + ("ItemKitPassiveLargeRadiatorLiquid".into(), Recipe { 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() }), + ("ItemKitPassthroughHeatExchanger".into(), Recipe { 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() }), ("ItemKitPipe".into(), + Recipe { 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() }), ("ItemKitPipeLiquid".into(), + Recipe { 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() }), ("ItemKitPipeOrgan".into(), + Recipe { 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() }), ("ItemKitPipeRadiator".into(), + Recipe { 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() }), + ("ItemKitPipeRadiatorLiquid".into(), Recipe { 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() }), ("ItemKitPipeUtility" + .into(), Recipe { 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() }), + ("ItemKitPipeUtilityLiquid".into(), Recipe { 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() }), ("ItemKitPlanter".into(), Recipe { 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() }), ("ItemKitPortablesConnector".into(), + Recipe { 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() }), ("ItemKitPoweredVent".into(), + Recipe { 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() }), ("ItemKitRegulator".into(), Recipe { 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() }), + ("ItemKitSensor".into(), Recipe { 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(), 1f64)] .into_iter().collect() }), ("ItemKitShower" + .into(), Recipe { 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() }), ("ItemKitSleeper".into(), + Recipe { 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() }), ("ItemKitSmallDirectHeatExchanger".into(), Recipe { + 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() }), + ("ItemKitStandardChute".into(), Recipe { 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() }), + ("ItemKitSuitStorage".into(), Recipe { 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() }), ("ItemKitTank" + .into(), Recipe { 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() }), ("ItemKitTankInsulated".into(), Recipe { 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() }), ("ItemKitTurboVolumePump".into(), Recipe { 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() }), ("ItemKitWaterBottleFiller".into(), + Recipe { 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() }), ("ItemKitWaterPurifier".into(), Recipe { 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() }), + ("ItemLiquidCanisterEmpty".into(), Recipe { 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() }), ("ItemLiquidCanisterSmart".into(), Recipe + { 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() }), ("ItemLiquidDrain".into(), Recipe { 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() }), ("ItemLiquidPipeAnalyzer" + .into(), Recipe { 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() }), ("ItemLiquidPipeHeater" + .into(), Recipe { 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() }), ("ItemLiquidPipeValve".into(), + Recipe { 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() }), + ("ItemLiquidPipeVolumePump".into(), Recipe { 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() }), + ("ItemPassiveVent".into(), Recipe { 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() }), + ("ItemPassiveVentInsulated".into(), Recipe { 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() }), + ("ItemPipeAnalyizer".into(), Recipe { 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() }), ("ItemPipeCowl" + .into(), Recipe { 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() }), ("ItemPipeDigitalValve" + .into(), Recipe { 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() }), ("ItemPipeGasMixer" + .into(), Recipe { 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() }), ("ItemPipeHeater".into(), Recipe { + 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() }), ("ItemPipeIgniter".into(), Recipe { 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() }), ("ItemPipeLabel" + .into(), Recipe { 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() }), ("ItemPipeMeter".into(), + Recipe { 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() }), + ("ItemPipeValve".into(), Recipe { 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() }), ("ItemPipeVolumePump".into(), Recipe { + 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() }), ("ItemWallCooler".into(), Recipe { 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() }), + ("ItemWallHeater".into(), Recipe { 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() }), ("ItemWaterBottle" + .into(), Recipe { 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() }), + ("ItemWaterPipeDigitalValve".into(), Recipe { 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() }), + ("ItemWaterPipeMeter".into(), Recipe { 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() }), ("ItemWaterWallCooler".into(), Recipe { + 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() }) + ] + .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(), typ : "PrinterInstruction".into(), value : 6i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) + ] + .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![ + (0u32, 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()), (1u32, 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()), (2u32, 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()), (3u32, 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()), (4u32, 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()), (5u32, 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()), (6u32, 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()), (7u32, 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![ + SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : + "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), + typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : + Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, + SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : + "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), + typ : Class::Plant } + ] + .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![ + SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : + "Fertiliser".into(), typ : Class::Plant } + ] + .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![ + (0u32, 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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : + "Fertiliser".into(), typ : Class::Plant } + ] + .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![(0u32, 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![SlotInfo { name : "Import".into(), typ : Class::Ore }] + .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![SlotInfo { name : "".into(), typ : Class::None }] + .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![SlotInfo { name : "Portable Slot".into(), typ : Class::None }] + .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![(0u32, "Operate".into()), (1u32, "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![(0u32, "Operate".into()), (1u32, "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![(0u32, "Operate".into()), (1u32, "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![(0u32, "Operate".into()), (1u32, "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![ + (0u32, "None".into()), (1u32, "Alarm2".into()), (2u32, "Alarm3" + .into()), (3u32, "Alarm4".into()), (4u32, "Alarm5".into()), + (5u32, "Alarm6".into()), (6u32, "Alarm7".into()), (7u32, "Music1" + .into()), (8u32, "Music2".into()), (9u32, "Music3".into()), + (10u32, "Alarm8".into()), (11u32, "Alarm9".into()), (12u32, + "Alarm10".into()), (13u32, "Alarm11".into()), (14u32, "Alarm12" + .into()), (15u32, "Danger".into()), (16u32, "Warning".into()), + (17u32, "Alert".into()), (18u32, "StormIncoming".into()), (19u32, + "IntruderAlert".into()), (20u32, "Depressurising".into()), + (21u32, "Pressurising".into()), (22u32, "AirlockCycling".into()), + (23u32, "PowerLow".into()), (24u32, "SystemFailure".into()), + (25u32, "Welcome".into()), (26u32, "MalfunctionDetected".into()), + (27u32, "HaltWhoGoesThere".into()), (28u32, "FireFireFire" + .into()), (29u32, "One".into()), (30u32, "Two".into()), (31u32, + "Three".into()), (32u32, "Four".into()), (33u32, "Five".into()), + (34u32, "Floor".into()), (35u32, "RocketLaunching".into()), + (36u32, "LiftOff".into()), (37u32, "TraderIncoming".into()), + (38u32, "TraderLanded".into()), (39u32, "PressureHigh".into()), + (40u32, "PressureLow".into()), (41u32, "TemperatureHigh".into()), + (42u32, "TemperatureLow".into()), (43u32, "PollutantsDetected" + .into()), (44u32, "HighCarbonDioxide".into()), (45u32, "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![(0u32, "Operate".into()), (1u32, "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 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( + -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: "Description coming.".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: "Description coming.".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: "Description coming.".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( + -782453061i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidPipeOneWayValve".into(), + prefab_hash: -782453061i32, + 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.." + .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::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( + 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![ + (0u32, 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![ + SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister } + ] + .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![(0u32, "Right".into()), (1u32, "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![ + (0u32, "Left".into()), (1u32, "Center".into()), (2u32, "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: "Liquid 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::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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None } + ] + .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![ + (0u32, "Equals".into()), (1u32, "Greater".into()), (2u32, "Less" + .into()), (3u32, "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![ + (0u32, "AND".into()), (1u32, "OR".into()), (2u32, "XOR".into()), + (3u32, "NAND".into()), (4u32, "NOR".into()), (5u32, "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![ + (0u32, "Add".into()), (1u32, "Subtract".into()), (2u32, + "Multiply".into()), (3u32, "Divide".into()), (4u32, "Mod" + .into()), (5u32, "Atan2".into()), (6u32, "Pow".into()), (7u32, + "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![ + (0u32, "Ceil".into()), (1u32, "Floor".into()), (2u32, "Abs" + .into()), (3u32, "Log".into()), (4u32, "Exp".into()), (5u32, + "Round".into()), (6u32, "Rand".into()), (7u32, "Sqrt".into()), + (8u32, "Sin".into()), (9u32, "Cos".into()), (10u32, "Tan" + .into()), (11u32, "Asin".into()), (12u32, "Acos".into()), (13u32, + "Atan".into()), (14u32, "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![(0u32, "Greater".into()), (1u32, "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![ + (0u32, "Equals".into()), (1u32, "Greater".into()), (2u32, "Less" + .into()), (3u32, "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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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![ + (0u32, "All".into()), (1u32, "Any".into()), (2u32, "None".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None }, SlotInfo { name : "Export 2" + .into(), typ : Class::None }, SlotInfo { name : "Data Disk".into(), typ : + Class::DataDisk } + ] + .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(), typ : "SorterInstruction".into(), value : 1i64 }), + ("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(), typ : "SorterInstruction".into(), value : 2i64 }), + ("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(), typ : "SorterInstruction".into(), value : 5i64 }), + ("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(), typ : "SorterInstruction".into(), value : 4i64 }), + ("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(), typ : "SorterInstruction".into(), value : 3i64 }), + ("LimitNextExecutionByCount".into(), Instruction { description : + "| 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 }) + ] + .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![(0u32, "Passive".into()), (1u32, "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![(0u32, "Operate".into()), (1u32, "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![(0u32, "Operate".into()), (1u32, "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![ + (0u32, vec![(LogicSlotType::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![(0u32, "Idle".into()), (1u32, "Active".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: true, + }, + slots: vec![ + SlotInfo { name : "Programmable Chip".into(), typ : + Class::ProgrammableChip } + ] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None } + ] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None } + ] + .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 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( + 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( + 1580412404i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeOneWayValve".into(), + prefab_hash: 1580412404i32, + 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" + .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::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( + 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![ + SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : + "Plant".into(), typ : Class::Plant } + ] + .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![SlotInfo { name : "".into(), typ : Class::None }] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "".into(), typ : Class::None }] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Portable Slot".into(), typ : Class::None }] + .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![(0u32, "Unlinked".into()), (1u32, "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![(0u32, "Unlinked".into()), (1u32, "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![ + (0u32, "Left".into()), (1u32, "Center".into()), (2u32, "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![(0u32, "Outward".into()), (1u32, "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![(0u32, "Outward".into()), (1u32, "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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None } + ] + .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![ + (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() + .collect()), (2u32, vec![] .into_iter().collect()), (3u32, vec![] + .into_iter().collect()), (4u32, vec![] .into_iter().collect()), + (5u32, vec![] .into_iter().collect()), (6u32, vec![] .into_iter() + .collect()), (7u32, vec![] .into_iter().collect()), (8u32, vec![] + .into_iter().collect()), (9u32, vec![] .into_iter().collect()), + (10u32, vec![] .into_iter().collect()), (11u32, vec![] .into_iter() + .collect()), (12u32, vec![] .into_iter().collect()), (13u32, vec![] + .into_iter().collect()), (14u32, vec![] .into_iter().collect()), + (15u32, vec![] .into_iter().collect()), (16u32, vec![] .into_iter() + .collect()), (17u32, vec![] .into_iter().collect()), (18u32, vec![] + .into_iter().collect()), (19u32, vec![] .into_iter().collect()), + (20u32, vec![] .into_iter().collect()), (21u32, vec![] .into_iter() + .collect()), (22u32, vec![] .into_iter().collect()), (23u32, vec![] + .into_iter().collect()), (24u32, vec![] .into_iter().collect()), + (25u32, vec![] .into_iter().collect()), (26u32, vec![] .into_iter() + .collect()), (27u32, vec![] .into_iter().collect()), (28u32, vec![] + .into_iter().collect()), (29u32, vec![] .into_iter().collect()), + (30u32, vec![] .into_iter().collect()), (31u32, vec![] .into_iter() + .collect()), (32u32, vec![] .into_iter().collect()), (33u32, vec![] + .into_iter().collect()), (34u32, vec![] .into_iter().collect()), + (35u32, vec![] .into_iter().collect()), (36u32, vec![] .into_iter() + .collect()), (37u32, vec![] .into_iter().collect()), (38u32, vec![] + .into_iter().collect()), (39u32, vec![] .into_iter().collect()), + (40u32, vec![] .into_iter().collect()), (41u32, vec![] .into_iter() + .collect()), (42u32, vec![] .into_iter().collect()), (43u32, vec![] + .into_iter().collect()), (44u32, vec![] .into_iter().collect()), + (45u32, vec![] .into_iter().collect()), (46u32, vec![] .into_iter() + .collect()), (47u32, vec![] .into_iter().collect()), (48u32, vec![] + .into_iter().collect()), (49u32, vec![] .into_iter().collect()), + (50u32, vec![] .into_iter().collect()), (51u32, vec![] .into_iter() + .collect()), (52u32, vec![] .into_iter().collect()), (53u32, vec![] + .into_iter().collect()), (54u32, vec![] .into_iter().collect()), + (55u32, vec![] .into_iter().collect()), (56u32, vec![] .into_iter() + .collect()), (57u32, vec![] .into_iter().collect()), (58u32, vec![] + .into_iter().collect()), (59u32, vec![] .into_iter().collect()), + (60u32, vec![] .into_iter().collect()), (61u32, vec![] .into_iter() + .collect()), (62u32, vec![] .into_iter().collect()), (63u32, vec![] + .into_iter().collect()), (64u32, vec![] .into_iter().collect()), + (65u32, vec![] .into_iter().collect()), (66u32, vec![] .into_iter() + .collect()), (67u32, vec![] .into_iter().collect()), (68u32, vec![] + .into_iter().collect()), (69u32, vec![] .into_iter().collect()), + (70u32, vec![] .into_iter().collect()), (71u32, vec![] .into_iter() + .collect()), (72u32, vec![] .into_iter().collect()), (73u32, vec![] + .into_iter().collect()), (74u32, vec![] .into_iter().collect()), + (75u32, vec![] .into_iter().collect()), (76u32, vec![] .into_iter() + .collect()), (77u32, vec![] .into_iter().collect()), (78u32, vec![] + .into_iter().collect()), (79u32, vec![] .into_iter().collect()), + (80u32, vec![] .into_iter().collect()), (81u32, vec![] .into_iter() + .collect()), (82u32, vec![] .into_iter().collect()), (83u32, vec![] + .into_iter().collect()), (84u32, vec![] .into_iter().collect()), + (85u32, vec![] .into_iter().collect()), (86u32, vec![] .into_iter() + .collect()), (87u32, vec![] .into_iter().collect()), (88u32, vec![] + .into_iter().collect()), (89u32, vec![] .into_iter().collect()), + (90u32, vec![] .into_iter().collect()), (91u32, vec![] .into_iter() + .collect()), (92u32, vec![] .into_iter().collect()), (93u32, vec![] + .into_iter().collect()), (94u32, vec![] .into_iter().collect()), + (95u32, vec![] .into_iter().collect()), (96u32, vec![] .into_iter() + .collect()), (97u32, vec![] .into_iter().collect()), (98u32, vec![] + .into_iter().collect()), (99u32, vec![] .into_iter().collect()), + (100u32, vec![] .into_iter().collect()), (101u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), + typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None } + ] + .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( + 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( + 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) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0u32, "Invalid".into()), (1u32, "None".into()), (2u32, "Mine" + .into()), (3u32, "Survey".into()), (4u32, "Discover".into()), + (5u32, "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(), typ : "CelestialTracking".into(), value : 1i64 }) + ] + .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![ + (0u32, vec![(LogicSlotType::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![ + SlotInfo { name : "Programmable Chip".into(), typ : + Class::ProgrammableChip } + ] + .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![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { name + : "Export".into(), typ : Class::None } + ] + .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_resouces: 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![ + ("ItemKitAccessBridge".into(), Recipe { 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() }), + ("ItemKitChuteUmbilical".into(), Recipe { 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() }), + ("ItemKitElectricUmbilical".into(), Recipe { 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() }), ("ItemKitFuselage".into(), + Recipe { 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() }), + ("ItemKitGasUmbilical".into(), Recipe { 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() }), ("ItemKitGovernedGasRocketEngine".into(), + Recipe { 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() }), ("ItemKitLaunchMount".into(), + Recipe { 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() }), + ("ItemKitLaunchTower".into(), Recipe { 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() }), + ("ItemKitLiquidUmbilical".into(), Recipe { 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() }), + ("ItemKitPressureFedGasEngine".into(), Recipe { 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() }), ("ItemKitPressureFedLiquidEngine" + .into(), Recipe { 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() }), + ("ItemKitPumpedLiquidEngine".into(), Recipe { 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() }), ("ItemKitRocketAvionics".into(), Recipe { 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() }), + ("ItemKitRocketBattery".into(), Recipe { 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() }), + ("ItemKitRocketCargoStorage".into(), Recipe { 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() }), ("ItemKitRocketCelestialTracker".into(), Recipe { 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() }), + ("ItemKitRocketCircuitHousing".into(), Recipe { 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() }), + ("ItemKitRocketDatalink".into(), Recipe { 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() }), + ("ItemKitRocketGasFuelTank".into(), Recipe { 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() }), + ("ItemKitRocketLiquidFuelTank".into(), Recipe { 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() }), ("ItemKitRocketMiner" + .into(), Recipe { 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() }), ("ItemKitRocketScanner".into(), Recipe { 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() }), + ("ItemKitRocketTransformerSmall".into(), Recipe { 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() }), + ("ItemKitStairwell".into(), Recipe { 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() }), + ("ItemRocketMiningDrillHead".into(), Recipe { 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() }), ("ItemRocketMiningDrillHeadDurable" + .into(), Recipe { 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() }), + ("ItemRocketMiningDrillHeadHighSpeedIce".into(), Recipe { 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() }), + ("ItemRocketMiningDrillHeadHighSpeedMineral".into(), Recipe { 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() }), + ("ItemRocketMiningDrillHeadIce".into(), Recipe { 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() }), + ("ItemRocketMiningDrillHeadLongTerm".into(), Recipe { 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() }), + ("ItemRocketMiningDrillHeadMineral".into(), Recipe { 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() }), ("ItemRocketScanningHead" + .into(), Recipe { 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() }) + ] + .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(), typ : "PrinterInstruction".into(), value : 6i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) + ] + .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![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Export".into(), typ : Class::None }, SlotInfo { name : + "Drill Head Slot".into(), typ : Class::DrillHead } + ] + .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![(0u32, 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![ + SlotInfo { name : "Scanner Head Slot".into(), typ : Class::ScanningHead } + ] + .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![(0u32, 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![SlotInfo { name : "Import".into(), typ : Class::None }] + .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![(0u32, 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![SlotInfo { name : "Import".into(), typ : Class::None }] + .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![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None } + ] + .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 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![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { name + : "Export".into(), typ : Class::None } + ] + .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_resouces: 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![ + ("AccessCardBlack".into(), Recipe { 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() }), ("AccessCardBlue" + .into(), Recipe { 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() }), ("AccessCardBrown".into(), Recipe { + 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() }), ("AccessCardGray".into(), Recipe { 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() }), + ("AccessCardGreen".into(), Recipe { 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() }), ("AccessCardKhaki" + .into(), Recipe { 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() }), ("AccessCardOrange".into(), Recipe + { 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() }), ("AccessCardPink".into(), Recipe { 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() }), + ("AccessCardPurple".into(), Recipe { 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() }), ("AccessCardRed" + .into(), Recipe { 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() }), ("AccessCardWhite".into(), Recipe { + 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() }), ("AccessCardYellow".into(), Recipe { 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() }), + ("CartridgeAccessController".into(), Recipe { 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() }), + ("FireArmSMG".into(), Recipe { 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() }), ("Handgun".into(), Recipe { 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() }), + ("HandgunMagazine".into(), Recipe { 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() }), ("ItemAmmoBox" + .into(), Recipe { 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() }), ("ItemExplosive".into(), + Recipe { 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 : 5i64, reagents : vec![("Copper".into(), + 5f64), ("Electrum".into(), 1f64), ("Gold".into(), 5f64), ("Lead" + .into(), 10f64), ("Steel".into(), 7f64)] .into_iter().collect() }), + ("ItemGrenade".into(), Recipe { 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() }), ("ItemMiningCharge".into(), Recipe { tier : + MachineTier::TierOne, time : 7f64, 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 : 4i64, reagents : vec![("Copper".into(), 5f64), ("Gold" + .into(), 5f64), ("Iron".into(), 7f64), ("Lead".into(), 10f64)] + .into_iter().collect() }), ("SMGMagazine".into(), Recipe { 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() }), + ("WeaponPistolEnergy".into(), Recipe { 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() }), ("WeaponRifleEnergy".into(), Recipe { 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() }) + ] + .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(), typ : "PrinterInstruction".into(), value : 6i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) + ] + .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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None } + ] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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()), (12u32, vec![(LogicSlotType::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()), (13u32, vec![(LogicSlotType::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()), (14u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None } + ] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None } + ] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None } + ] + .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: "Description coming.".into(), + name: "Single Bed".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Bed".into(), typ : Class::Entity }] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "Bed".into(), typ : Class::Entity }] + .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![(0u32, 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![ + (0u32, "Safe".into()), (1u32, "Unsafe".into()), (2u32, + "Unpowered".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] + .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![(0u32, 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![ + (0u32, "Safe".into()), (1u32, "Unsafe".into()), (2u32, + "Unpowered".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] + .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![(0u32, 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![ + (0u32, "Safe".into()), (1u32, "Unsafe".into()), (2u32, + "Unpowered".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] + .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![(0u32, 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![SlotInfo { name : "Player".into(), typ : Class::Entity }] + .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 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![ + (0u32, vec![(LogicSlotType::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![(0u32, "Not Generating".into()), (1u32, "Generating".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Input".into(), typ : Class::Ore }] + .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_resouces: 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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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![ + (0u32, "Split".into()), (1u32, "Filter".into()), (2u32, "Logic" + .into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None }, SlotInfo { name : "Export 2" + .into(), typ : Class::None }, SlotInfo { name : "Data Disk".into(), typ : + Class::DataDisk } + ] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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![(0u32, "Automatic".into()), (1u32, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None }, SlotInfo { name : "Processing" + .into(), typ : Class::None } + ] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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![(0u32, "Automatic".into()), (1u32, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None }, SlotInfo { name : "Export".into(), + typ : Class::None } + ] + .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![(0u32, 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![ + SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } + ] + .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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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()), (2u32, vec![(LogicSlotType::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()), (3u32, vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::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()), (8u32, vec![(LogicSlotType::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()), (9u32, vec![(LogicSlotType::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()), (10u32, vec![(LogicSlotType::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()), (11u32, vec![(LogicSlotType::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()), (12u32, vec![(LogicSlotType::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()), (13u32, vec![(LogicSlotType::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()), (14u32, vec![(LogicSlotType::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()), (15u32, vec![(LogicSlotType::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()), (16u32, vec![(LogicSlotType::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()), (17u32, vec![(LogicSlotType::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()), (18u32, vec![(LogicSlotType::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()), (19u32, vec![(LogicSlotType::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()), (20u32, vec![(LogicSlotType::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()), (21u32, vec![(LogicSlotType::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()), (22u32, vec![(LogicSlotType::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()), (23u32, vec![(LogicSlotType::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()), (24u32, vec![(LogicSlotType::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()), (25u32, vec![(LogicSlotType::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()), (26u32, vec![(LogicSlotType::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()), (27u32, vec![(LogicSlotType::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()), (28u32, vec![(LogicSlotType::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()), (29u32, vec![(LogicSlotType::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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None } + ] + .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![ + (0u32, 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()), (1u32, + 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()), (2u32, 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![ + SlotInfo { name : "Helmet".into(), typ : Class::Helmet }, SlotInfo { name + : "Suit".into(), typ : Class::Suit }, SlotInfo { name : "Back".into(), + typ : Class::Back } + ] + .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![SlotInfo { name : "".into(), typ : Class::None }] + .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![SlotInfo { name : "Portable Slot".into(), typ : Class::None }] + .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![ + (0u32, vec![] .into_iter().collect()), (1u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { name + : "Export".into(), typ : Class::None } + ] + .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_resouces: 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![ + ("FlareGun".into(), Recipe { 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() }), ("ItemAngleGrinder".into(), Recipe { 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() }), ("ItemArcWelder".into(), + Recipe { 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() }), ("ItemBasketBall".into(), + Recipe { 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() }), ("ItemBeacon".into(), Recipe { 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() }), + ("ItemChemLightBlue".into(), Recipe { 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() }), + ("ItemChemLightGreen".into(), Recipe { 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() }), + ("ItemChemLightRed".into(), Recipe { 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() }), + ("ItemChemLightWhite".into(), Recipe { 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() }), + ("ItemChemLightYellow".into(), Recipe { 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() }), + ("ItemClothingBagOveralls_Aus".into(), Recipe { 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() }), ("ItemClothingBagOveralls_Brazil".into(), + Recipe { 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() }), ("ItemClothingBagOveralls_Canada" + .into(), Recipe { 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() }), + ("ItemClothingBagOveralls_China".into(), Recipe { 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() }), ("ItemClothingBagOveralls_EU".into(), + Recipe { 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() }), ("ItemClothingBagOveralls_France" + .into(), Recipe { 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() }), + ("ItemClothingBagOveralls_Germany".into(), Recipe { 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() }), ("ItemClothingBagOveralls_Japan".into(), + Recipe { 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() }), ("ItemClothingBagOveralls_Korea" + .into(), Recipe { 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() }), + ("ItemClothingBagOveralls_NZ".into(), Recipe { 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() }), ("ItemClothingBagOveralls_Russia".into(), + Recipe { 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() }), + ("ItemClothingBagOveralls_SouthAfrica".into(), Recipe { 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() }), ("ItemClothingBagOveralls_UK".into(), + Recipe { 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() }), ("ItemClothingBagOveralls_US" + .into(), Recipe { 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() }), + ("ItemClothingBagOveralls_Ukraine".into(), Recipe { 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() }), ("ItemCrowbar".into(), Recipe { 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() }), ("ItemDirtCanister".into(), Recipe { 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() }), ("ItemDisposableBatteryCharger".into(), + Recipe { 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() }), ("ItemDrill".into(), Recipe { 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() }), ("ItemDuctTape".into(), + Recipe { 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() }), ("ItemEvaSuit".into(), Recipe { + 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() }), + ("ItemFlagSmall".into(), Recipe { 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() }), + ("ItemFlashlight".into(), Recipe { 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() }), ("ItemGlasses".into(), Recipe { 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() }), + ("ItemHardBackpack".into(), Recipe { 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() }), + ("ItemHardJetpack".into(), Recipe { 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() }), ("ItemHardMiningBackPack".into(), Recipe { 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() }), ("ItemHardSuit".into(), + Recipe { 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() }), ("ItemHardsuitHelmet".into(), Recipe { + 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() }), ("ItemIgniter".into(), Recipe { 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() }), ("ItemJetpackBasic".into(), Recipe { 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() }), + ("ItemKitBasket".into(), Recipe { 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() }), ("ItemLabeller".into(), Recipe { 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() }), ("ItemMKIIAngleGrinder" + .into(), Recipe { 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() }), ("ItemMKIIArcWelder" + .into(), Recipe { 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() }), + ("ItemMKIICrowbar".into(), Recipe { 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() }), ("ItemMKIIDrill".into(), Recipe { 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() }), ("ItemMKIIDuctTape".into(), Recipe { 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() }), + ("ItemMKIIMiningDrill".into(), Recipe { 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() }), + ("ItemMKIIScrewdriver".into(), Recipe { 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() }), ("ItemMKIIWireCutters".into(), Recipe { + 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() }), + ("ItemMKIIWrench".into(), Recipe { 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() }), ("ItemMarineBodyArmor".into(), Recipe { + 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() }), ("ItemMarineHelmet".into(), Recipe { 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() }), + ("ItemMiningBackPack".into(), Recipe { 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() }), + ("ItemMiningBelt".into(), Recipe { 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() }), + ("ItemMiningBeltMKII".into(), Recipe { 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() }), ("ItemMiningDrill".into(), Recipe { 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() }), ("ItemMiningDrillHeavy" + .into(), Recipe { 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() }), + ("ItemMiningDrillPneumatic".into(), Recipe { 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() }), ("ItemMkIIToolbelt".into(), Recipe { 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() }), ("ItemNVG".into(), + Recipe { 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() }), ("ItemPickaxe".into(), Recipe { 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() }), ("ItemPlantSampler" + .into(), Recipe { 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() }), ("ItemRemoteDetonator".into(), Recipe { tier : + MachineTier::TierOne, time : 4.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(), 3f64)] .into_iter().collect() }), + ("ItemReusableFireExtinguisher".into(), Recipe { 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() }), ("ItemRoadFlare".into(), Recipe { 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() }), ("ItemScrewdriver".into(), Recipe { 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() }), ("ItemSensorLenses".into(), Recipe { 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() }), ("ItemSensorProcessingUnitCelestialScanner".into(), + Recipe { 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() }), + ("ItemSensorProcessingUnitMesonScanner".into(), Recipe { 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() }), ("ItemSensorProcessingUnitOreScanner" + .into(), Recipe { 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() }), + ("ItemSpaceHelmet".into(), Recipe { 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() }), ("ItemSpacepack".into(), Recipe { 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() }), ("ItemSprayCanBlack" + .into(), Recipe { 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() }), ("ItemSprayCanBlue" + .into(), Recipe { 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() }), ("ItemSprayCanBrown" + .into(), Recipe { 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() }), ("ItemSprayCanGreen" + .into(), Recipe { 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() }), ("ItemSprayCanGrey" + .into(), Recipe { 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() }), ("ItemSprayCanKhaki" + .into(), Recipe { 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() }), ("ItemSprayCanOrange" + .into(), Recipe { 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() }), ("ItemSprayCanPink" + .into(), Recipe { 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() }), ("ItemSprayCanPurple" + .into(), Recipe { 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() }), ("ItemSprayCanRed".into(), + Recipe { 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() }), ("ItemSprayCanWhite".into(), Recipe + { 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() }), ("ItemSprayCanYellow".into(), + Recipe { 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() }), ("ItemSprayGun".into(), Recipe { + 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() }), ("ItemTerrainManipulator".into(), Recipe { + 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() }), ("ItemToolBelt".into(), Recipe { 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() }), ("ItemWearLamp".into(), Recipe { 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() }), ("ItemWeldingTorch" + .into(), Recipe { 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() }), ("ItemWireCutters".into(), Recipe { 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() }), ("ItemWrench".into(), Recipe { 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() }), ("ToyLuna".into(), Recipe { 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() }), ("UniformCommander" + .into(), Recipe { 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() }), + ("UniformMarine".into(), Recipe { 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() }), + ("UniformOrangeJumpSuit".into(), Recipe { 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() }), ("WeaponPistolEnergy".into(), Recipe { + 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() }), ("WeaponRifleEnergy" + .into(), Recipe { 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() }) + ] + .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(), typ : "PrinterInstruction".into(), value : 6i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 8i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 7i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 2i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 4i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 5i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 9i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 1i64 }), + ("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(), typ : "PrinterInstruction".into(), value : 3i64 }) + ] + .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![ + SlotInfo { name : "Torpedo".into(), typ : Class::Torpedo }, SlotInfo { + name : "Torpedo".into(), typ : Class::Torpedo }, SlotInfo { name : + "Torpedo".into(), typ : Class::Torpedo }, SlotInfo { name : "Torpedo" + .into(), typ : Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ + : Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ : + Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ : + Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ : + Class::Torpedo } + ] + .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![(0u32, "Right".into()), (1u32, "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: 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(), - ), - ( - 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![ - (0u32, 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()), (1u32, 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![ - SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, - SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } + 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![ + (0u32, vec![(LogicSlotType::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()), (1u32, vec![(LogicSlotType::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(), - 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(), - ), - ( - -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![ - (0u32, 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()), (1u32, 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![ - SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, - SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } - ] - .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(), - ), - ( - 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![ - (0u32, 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()), (1u32, 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![ - SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, - SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } - ] - .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(), - ), - ( - -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(), - ), - ( - 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(), - ), - ( - 887383294i32, - StructureLogicDeviceTemplate { - 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![(0u32, 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![SlotInfo { name : "Import".into(), typ : Class::Ore }] - .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, - }, - } - .into(), - ), - ( - -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![ - (0u32, vec![(LogicSlotType::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![SlotInfo { name : "".into(), typ : Class::DataDisk }] - .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(), - ), - ( - 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![ - (0u32, "NoStorm".into()), (1u32, "StormIncoming".into()), - (2u32, "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(), - ), - ( - -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(), - ), - ( - 2056377335i32, - StructureLogicDeviceTemplate { - prefab: PrefabInfo { - prefab_name: "StructureWindowShutter".into(), - prefab_hash: 2056377335i32, - 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." - .into(), - name: "Window Shutter".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::Error, MemoryAccess::Read), - (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![(0u32, "Operate".into()), (1u32, "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: false, - has_mode_state: true, - has_on_off_state: true, - has_open_state: true, - has_reagents: false, - }, - } - .into(), - ), - ( - 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(), - ), - ( - 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(), - ), - ( - -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![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "Access Card" - .into(), typ : Class::AccessCard }, SlotInfo { name : "Access Card" - .into(), typ : Class::AccessCard }, SlotInfo { name : "Credit Card" - .into(), typ : Class::CreditCard } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "Access Card" - .into(), typ : Class::AccessCard }, SlotInfo { name : "Credit Card" - .into(), typ : Class::CreditCard } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : "Access Card" - .into(), typ : Class::AccessCard }, SlotInfo { name : "Credit Card" - .into(), typ : Class::CreditCard } - ] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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![ - (0u32, 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![(0u32, "Stun".into()), (1u32, "Kill".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - 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![ - (0u32, 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![(0u32, "Stun".into()), (1u32, "Kill".into())] - .into_iter() - .collect(), - ), - transmission_receiver: false, - wireless_logic: false, - circuit_holder: false, - }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] - .into_iter() - .collect(), - } - .into(), - ), - ( - -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(), - ), - ]) + 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![(0u32, "Automatic".into()), (1u32, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None } + ] + .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".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![ + (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() + .collect()), (2u32, vec![] .into_iter().collect()), (3u32, vec![] + .into_iter().collect()), (4u32, vec![] .into_iter().collect()), + (5u32, vec![] .into_iter().collect()), (6u32, vec![] .into_iter() + .collect()), (7u32, vec![] .into_iter().collect()), (8u32, vec![] + .into_iter().collect()), (9u32, vec![] .into_iter().collect()), + (10u32, vec![] .into_iter().collect()), (11u32, vec![] .into_iter() + .collect()), (12u32, vec![] .into_iter().collect()), (13u32, vec![] + .into_iter().collect()), (14u32, vec![] .into_iter().collect()), + (15u32, vec![] .into_iter().collect()), (16u32, vec![] .into_iter() + .collect()), (17u32, vec![] .into_iter().collect()), (18u32, vec![] + .into_iter().collect()), (19u32, vec![] .into_iter().collect()), + (20u32, vec![] .into_iter().collect()), (21u32, vec![] .into_iter() + .collect()), (22u32, vec![] .into_iter().collect()), (23u32, vec![] + .into_iter().collect()), (24u32, vec![] .into_iter().collect()), + (25u32, vec![] .into_iter().collect()), (26u32, vec![] .into_iter() + .collect()), (27u32, vec![] .into_iter().collect()), (28u32, vec![] + .into_iter().collect()), (29u32, vec![] .into_iter().collect()), + (30u32, vec![] .into_iter().collect()), (31u32, vec![] .into_iter() + .collect()), (32u32, vec![] .into_iter().collect()), (33u32, vec![] + .into_iter().collect()), (34u32, vec![] .into_iter().collect()), + (35u32, vec![] .into_iter().collect()), (36u32, vec![] .into_iter() + .collect()), (37u32, vec![] .into_iter().collect()), (38u32, vec![] + .into_iter().collect()), (39u32, vec![] .into_iter().collect()), + (40u32, vec![] .into_iter().collect()), (41u32, vec![] .into_iter() + .collect()), (42u32, vec![] .into_iter().collect()), (43u32, vec![] + .into_iter().collect()), (44u32, vec![] .into_iter().collect()), + (45u32, vec![] .into_iter().collect()), (46u32, vec![] .into_iter() + .collect()), (47u32, vec![] .into_iter().collect()), (48u32, vec![] + .into_iter().collect()), (49u32, vec![] .into_iter().collect()), + (50u32, vec![] .into_iter().collect()), (51u32, vec![] .into_iter() + .collect()), (52u32, vec![] .into_iter().collect()), (53u32, vec![] + .into_iter().collect()), (54u32, vec![] .into_iter().collect()), + (55u32, vec![] .into_iter().collect()), (56u32, vec![] .into_iter() + .collect()), (57u32, vec![] .into_iter().collect()), (58u32, vec![] + .into_iter().collect()), (59u32, vec![] .into_iter().collect()), + (60u32, vec![] .into_iter().collect()), (61u32, vec![] .into_iter() + .collect()), (62u32, vec![] .into_iter().collect()), (63u32, vec![] + .into_iter().collect()), (64u32, vec![] .into_iter().collect()), + (65u32, vec![] .into_iter().collect()), (66u32, vec![] .into_iter() + .collect()), (67u32, vec![] .into_iter().collect()), (68u32, vec![] + .into_iter().collect()), (69u32, vec![] .into_iter().collect()), + (70u32, vec![] .into_iter().collect()), (71u32, vec![] .into_iter() + .collect()), (72u32, vec![] .into_iter().collect()), (73u32, vec![] + .into_iter().collect()), (74u32, vec![] .into_iter().collect()), + (75u32, vec![] .into_iter().collect()), (76u32, vec![] .into_iter() + .collect()), (77u32, vec![] .into_iter().collect()), (78u32, vec![] + .into_iter().collect()), (79u32, vec![] .into_iter().collect()), + (80u32, vec![] .into_iter().collect()), (81u32, vec![] .into_iter() + .collect()), (82u32, vec![] .into_iter().collect()), (83u32, vec![] + .into_iter().collect()), (84u32, vec![] .into_iter().collect()), + (85u32, vec![] .into_iter().collect()), (86u32, vec![] .into_iter() + .collect()), (87u32, vec![] .into_iter().collect()), (88u32, vec![] + .into_iter().collect()), (89u32, vec![] .into_iter().collect()), + (90u32, vec![] .into_iter().collect()), (91u32, vec![] .into_iter() + .collect()), (92u32, vec![] .into_iter().collect()), (93u32, vec![] + .into_iter().collect()), (94u32, vec![] .into_iter().collect()), + (95u32, vec![] .into_iter().collect()), (96u32, vec![] .into_iter() + .collect()), (97u32, vec![] .into_iter().collect()), (98u32, vec![] + .into_iter().collect()), (99u32, vec![] .into_iter().collect()), + (100u32, vec![] .into_iter().collect()), (101u32, 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![ + SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : + "Export".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), + typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" + .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : + Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, + SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name + : "Storage".into(), typ : Class::None } + ] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "".into(), typ : Class::DataDisk }] + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "".into(), typ : Class::DataDisk }] + .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![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + (0u32, 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()), (1u32, + 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![ + SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, + SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } + ] + .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![ + (0u32, 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()), (1u32, + 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![ + SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, + SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } + ] + .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![ + (0u32, 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()), (1u32, + 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![ + SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, + SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } + ] + .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![ + (0u32, 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()), (1u32, + 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![ + SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, + SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } + ] + .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, + StructureLogicDeviceTemplate { + 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![(0u32, 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![SlotInfo { name : "Import".into(), typ : Class::Ore }] + .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, + }, + } + .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![ + (0u32, vec![(LogicSlotType::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![SlotInfo { name : "".into(), typ : Class::DataDisk }] + .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![ + (0u32, "NoStorm".into()), (1u32, "StormIncoming".into()), (2u32, + "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( + 2056377335i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWindowShutter".into(), + prefab_hash: 2056377335i32, + 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." + .into(), + name: "Window Shutter".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::Error, MemoryAccess::Read), (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![(0u32, "Operate".into()), (1u32, "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: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + 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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "Access Card".into(), typ + : Class::AccessCard }, SlotInfo { name : "Access Card".into(), typ : + Class::AccessCard }, SlotInfo { name : "Credit Card".into(), typ : + Class::CreditCard } + ] + .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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "Access Card".into(), typ + : Class::AccessCard }, SlotInfo { name : "Credit Card".into(), typ : + Class::CreditCard } + ] + .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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "Access Card".into(), typ + : Class::AccessCard }, SlotInfo { name : "Credit Card".into(), typ : + Class::CreditCard } + ] + .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![ + (0u32, 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![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + (0u32, 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![(0u32, "Stun".into()), (1u32, "Kill".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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![ + (0u32, 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![(0u32, "Stun".into()), (1u32, "Kill".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + .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/enums/basic.rs b/stationeers_data/src/enums/basic.rs index 13cbf0f..46d5f1e 100644 --- a/stationeers_data/src/enums/basic.rs +++ b/stationeers_data/src/enums/basic.rs @@ -1,3 +1,17 @@ +// ================================================= +// !! <-----> 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")] @@ -23,8 +37,7 @@ use super::script::{LogicSlotType, LogicType}; Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum AirConditioningMode { @@ -71,8 +84,7 @@ impl TryFrom for AirConditioningMode { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum AirControlMode { @@ -123,8 +135,7 @@ impl TryFrom for AirControlMode { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum ColorType { @@ -199,8 +210,7 @@ impl TryFrom for ColorType { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum DaylightSensorMode { @@ -250,8 +260,7 @@ impl TryFrom for DaylightSensorMode { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum ElevatorMode { @@ -298,8 +307,7 @@ impl TryFrom for ElevatorMode { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum EntityState { @@ -349,8 +357,7 @@ impl TryFrom for EntityState { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u32)] pub enum GasType { @@ -442,8 +449,7 @@ impl TryFrom for GasType { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum PowerMode { @@ -497,8 +503,7 @@ impl TryFrom for PowerMode { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum PrinterInstruction { @@ -570,8 +575,7 @@ impl TryFrom for PrinterInstruction { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum ReEntryProfile { @@ -626,8 +630,7 @@ impl TryFrom for ReEntryProfile { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum RobotMode { @@ -688,8 +691,7 @@ impl TryFrom for RobotMode { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum RocketMode { @@ -747,8 +749,7 @@ impl TryFrom for RocketMode { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum Class { @@ -908,8 +909,7 @@ impl TryFrom for Class { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum SorterInstruction { @@ -970,8 +970,7 @@ impl TryFrom for SorterInstruction { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum SortingClass { @@ -1044,8 +1043,7 @@ impl TryFrom for SortingClass { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum SoundAlert { @@ -1222,8 +1220,7 @@ impl TryFrom for SoundAlert { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum LogicTransmitterMode { @@ -1269,8 +1266,7 @@ impl TryFrom for LogicTransmitterMode { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum VentDirection { @@ -1314,8 +1310,7 @@ impl TryFrom for VentDirection { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum ConditionOperation { diff --git a/stationeers_data/src/enums/prefabs.rs b/stationeers_data/src/enums/prefabs.rs index 920933a..d3ed521 100644 --- a/stationeers_data/src/enums/prefabs.rs +++ b/stationeers_data/src/enums/prefabs.rs @@ -1,3 +1,17 @@ +// ================================================= +// !! <-----> 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")] @@ -22,8 +36,7 @@ use wasm_bindgen::prelude::*; Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(i32)] pub enum StationpediaPrefab { diff --git a/stationeers_data/src/enums/script.rs b/stationeers_data/src/enums/script.rs index 81ad20b..293729a 100644 --- a/stationeers_data/src/enums/script.rs +++ b/stationeers_data/src/enums/script.rs @@ -1,3 +1,17 @@ +// ================================================= +// !! <-----> 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")] @@ -22,8 +36,7 @@ use wasm_bindgen::prelude::*; Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum LogicBatchMethod { @@ -73,8 +86,7 @@ impl TryFrom for LogicBatchMethod { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum LogicReagentMode { @@ -125,8 +137,7 @@ impl TryFrom for LogicReagentMode { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u8)] pub enum LogicSlotType { @@ -320,8 +331,7 @@ impl TryFrom for LogicSlotType { Serialize, Deserialize )] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[strum(use_phf)] #[repr(u16)] pub enum LogicType { diff --git a/stationeers_data/src/templates.rs b/stationeers_data/src/templates.rs index 3a25ab1..b079e9d 100644 --- a/stationeers_data/src/templates.rs +++ b/stationeers_data/src/templates.rs @@ -12,8 +12,7 @@ use tsify::Tsify; use wasm_bindgen::prelude::*; #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #[serde(untagged)] pub enum ObjectTemplate { Structure(StructureTemplate), @@ -173,8 +172,7 @@ impl From for ObjectTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct HumanTemplate { pub prefab: PrefabInfo, pub species: Species, @@ -182,8 +180,7 @@ pub struct HumanTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct PrefabInfo { pub prefab_name: String, pub prefab_hash: i32, @@ -192,16 +189,14 @@ pub struct PrefabInfo { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct SlotInfo { pub name: String, pub typ: Class, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct LogicInfo { pub logic_slot_types: BTreeMap>, pub logic_types: BTreeMap, @@ -212,8 +207,7 @@ pub struct LogicInfo { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemInfo { pub consumable: bool, pub filter_type: Option, @@ -225,8 +219,7 @@ pub struct ItemInfo { } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct ConnectionInfo { pub typ: ConnectionType, pub role: ConnectionRole, @@ -234,8 +227,7 @@ pub struct ConnectionInfo { #[allow(clippy::struct_excessive_bools)] #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct DeviceInfo { pub connection_list: Vec, pub device_pins_length: Option, @@ -250,16 +242,14 @@ pub struct DeviceInfo { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct ConsumerInfo { pub consumed_resouces: Vec, pub processed_reagents: Vec, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct RecipeRange { pub start: f64, pub stop: f64, @@ -267,8 +257,7 @@ pub struct RecipeRange { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct RecipeGasMix { pub rule: i64, pub is_any: bool, @@ -277,8 +266,7 @@ pub struct RecipeGasMix { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct Recipe { pub tier: MachineTier, pub time: f64, @@ -291,23 +279,20 @@ pub struct Recipe { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct FabricatorInfo { pub tier: MachineTier, pub recipes: BTreeMap, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[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))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct Instruction { pub description: String, pub typ: String, @@ -315,8 +300,7 @@ pub struct Instruction { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct MemoryInfo { pub instructions: Option>, pub memory_access: MemoryAccess, @@ -324,31 +308,27 @@ pub struct MemoryInfo { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[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))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[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))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct SuitInfo { pub hygine_reduction_multiplier: f32, pub waste_max_pressure: f32, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct StructureTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, @@ -357,8 +337,7 @@ pub struct StructureTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct StructureSlotsTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, @@ -368,8 +347,7 @@ pub struct StructureSlotsTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct StructureLogicTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, @@ -380,8 +358,7 @@ pub struct StructureLogicTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct StructureLogicDeviceTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, @@ -393,8 +370,7 @@ pub struct StructureLogicDeviceTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct StructureLogicDeviceConsumerTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, @@ -408,8 +384,7 @@ pub struct StructureLogicDeviceConsumerTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct StructureLogicDeviceMemoryTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, @@ -422,8 +397,7 @@ pub struct StructureLogicDeviceMemoryTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct StructureCircuitHolderTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, @@ -435,8 +409,7 @@ pub struct StructureCircuitHolderTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct StructureLogicDeviceConsumerMemoryTemplate { pub prefab: PrefabInfo, pub structure: StructureInfo, @@ -451,8 +424,7 @@ pub struct StructureLogicDeviceConsumerMemoryTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, @@ -461,8 +433,7 @@ pub struct ItemTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemSlotsTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, @@ -472,8 +443,7 @@ pub struct ItemSlotsTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemConsumerTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, @@ -484,8 +454,7 @@ pub struct ItemConsumerTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemLogicTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, @@ -496,8 +465,7 @@ pub struct ItemLogicTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemLogicMemoryTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, @@ -509,8 +477,7 @@ pub struct ItemLogicMemoryTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemCircuitHolderTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, @@ -521,8 +488,7 @@ pub struct ItemCircuitHolderTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemSuitTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, @@ -533,8 +499,7 @@ pub struct ItemSuitTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemSuitLogicTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, @@ -546,8 +511,7 @@ pub struct ItemSuitLogicTemplate { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -#[cfg_attr(feature = "tsify", derive(Tsify))] -#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct ItemSuitCircuitHolderTemplate { pub prefab: PrefabInfo, pub item: ItemInfo, diff --git a/xtask/src/generate.rs b/xtask/src/generate.rs index ce26041..4016318 100644 --- a/xtask/src/generate.rs +++ b/xtask/src/generate.rs @@ -52,7 +52,7 @@ pub fn generate( let enums_files = enums::generate(&pedia, &enums, workspace)?; eprintln!("Formatting generated files..."); for file in &enums_files { - prepend_generated_comment_and_format(file)?; + prepend_generated_comment_and_format(file, "enums")?; } return Ok(()); } @@ -61,18 +61,18 @@ pub fn generate( eprintln!("generating database..."); let database_files = database::generate_database(&pedia, &enums, workspace)?; - generated_files.extend(database_files); + generated_files.extend(database_files.into_iter().map(|path| (path, "database"))); } if modules.contains(&"instructions") { eprintln!("generating instructions..."); let inst_files = instructions::generate_instructions(&pedia, workspace)?; - generated_files.extend(inst_files); + generated_files.extend(inst_files.into_iter().map(|path| (path, "instructions"))); } eprintln!("Formatting generated files..."); - for file in &generated_files { - prepend_generated_comment_and_format(file)?; + for (file, module) in &generated_files { + prepend_generated_comment_and_format(file, module)?; } Ok(()) } @@ -98,29 +98,33 @@ fn format_rust(content: impl ToTokens) -> color_eyre::Result { Ok(prettyplease::unparse(&content)) } -fn prepend_generated_comment_and_format(file_path: &std::path::Path) -> color_eyre::Result<()> { +fn prepend_generated_comment_and_format(file_path: &std::path::Path, module: &str) -> color_eyre::Result<()> { use std::io::Write; let tmp_path = file_path.with_extension("rs.tmp"); { let mut tmp = std::fs::File::create(&tmp_path)?; let src = syn::parse_file(&std::fs::read_to_string(file_path)?)?; - let formated = format_rust(quote::quote! { - // ================================================= - // !! <-----> DO NOT MODIFY <-----> !! - // - // This module was automatically generated by an - // xtask - // - // run `cargo xtask generate` from the workspace - // to regenerate - // - // ================================================= + let formated = format_rust(src)?; - #src - })?; - - write!(&mut tmp, "{formated}")?; + write!(&mut tmp, "\ + // =================================================\n\ + // !! <-----> DO NOT MODIFY <-----> !!\n\ + //\n\ + // This module was automatically generated by an\n\ + // xtask\n\ + //\n\ + // run\n\ + //\n\ + // `cargo xtask generate -m {module}` \n\ + //\n\ + // from the workspace to regenerate\n\ + //\n\ + // =================================================\n\ + \n\ + {formated}\ + " + )?; } std::fs::remove_file(file_path)?; std::fs::rename(&tmp_path, file_path)?; diff --git a/xtask/src/generate/database.rs b/xtask/src/generate/database.rs index efc9a2c..73b1746 100644 --- a/xtask/src/generate/database.rs +++ b/xtask/src/generate/database.rs @@ -229,9 +229,9 @@ fn write_prefab_map( writer, "{}", quote! { - use crate::enums::script_enums::*; - use crate::enums::basic_enums::*; - use crate::enums::{MemoryAccess, ConnectionType, ConnectionRole}; + use crate::enums::script::*; + use crate::enums::basic::*; + use crate::enums::{MemoryAccess, ConnectionType, ConnectionRole, MachineTier}; use crate::templates::*; } )?; @@ -241,10 +241,7 @@ fn write_prefab_map( let hash = prefab.prefab().prefab_hash; let obj = syn::parse_str::(&uneval::to_string(prefab)?)?; let entry = quote! { - ( - #hash, - #obj.into(), - ) + map.insert(#hash, #obj.into()); }; Ok(entry) }) @@ -255,9 +252,9 @@ fn write_prefab_map( quote! { pub fn build_prefab_database() -> std::collections::BTreeMap { #[allow(clippy::unreadable_literal)] - std::collections::BTreeMap::from([ - #(#entries),* - ]) + let mut map: std::collections::BTreeMap = std::collections::BTreeMap::new(); + #(#entries)* + map } }, )?; diff --git a/xtask/src/generate/enums.rs b/xtask/src/generate/enums.rs index 8dd44b2..ba49b5a 100644 --- a/xtask/src/generate/enums.rs +++ b/xtask/src/generate/enums.rs @@ -433,8 +433,7 @@ where "{}", quote! { #[derive(#(#derives),*)] - #[cfg_attr(feature = "tsify", derive(Tsify))] - #[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] + #[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] #additional_strum #[repr(#repr)] pub enum #name { diff --git a/xtask/src/generate/instructions.rs b/xtask/src/generate/instructions.rs index 4555a76..e596b51 100644 --- a/xtask/src/generate/instructions.rs +++ b/xtask/src/generate/instructions.rs @@ -13,7 +13,8 @@ pub fn generate_instructions( .join("ic10emu") .join("src") .join("vm") - .join("instructions"); + .join("instructions") + .join("codegen"); if !instructions_path.exists() { std::fs::create_dir(&instructions_path)?; } @@ -84,8 +85,7 @@ fn write_instructions_enum( "{}", quote::quote! {#[derive(Debug, Display, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Serialize, Deserialize)] #[derive(EnumIter, EnumString, EnumProperty, FromRepr)] - #[cfg_attr(feature = "tsify", derive(Tsify))] - #[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] + #[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 { From 7efcec919444ce649437944a78605f9d06c5e940 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Tue, 28 May 2024 01:00:49 -0700 Subject: [PATCH 32/50] refactor(wasm): remap wasm interface (rust side) --- Cargo.lock | 1 + ic10emu/src/errors.rs | 6 + ic10emu/src/vm.rs | 172 ++++++++++++++- ic10emu_wasm/Cargo.toml | 35 ++- ic10emu_wasm/build.rs | 11 +- ic10emu_wasm/src/lib.rs | 475 ++++++++++------------------------------ ic10lsp_wasm/Cargo.toml | 26 +++ 7 files changed, 351 insertions(+), 375 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 360d031..c351575 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -720,6 +720,7 @@ dependencies = [ "serde-wasm-bindgen 0.6.5", "serde_derive", "serde_with", + "stationeers_data", "strum", "thiserror", "tsify", diff --git a/ic10emu/src/errors.rs b/ic10emu/src/errors.rs index aaa3cb2..085680e 100644 --- a/ic10emu/src/errors.rs +++ b/ic10emu/src/errors.rs @@ -46,8 +46,12 @@ pub enum VMError { 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}")] @@ -56,6 +60,8 @@ pub enum VMError { MissingChild(ObjectID), #[error("object {0} is not parentable")] NotParentable(ObjectID), + #[error("object {0} is not logicable")] + NotLogicable(ObjectID), } #[derive(Error, Debug, Serialize, Deserialize)] diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index e7faa41..9666617 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -238,7 +238,7 @@ impl VM { } /// Creates a new network adn return it's ID - pub fn add_network(self: &Rc) -> u32 { + pub fn add_network(self: &Rc) -> ObjectID { let next_id = self.network_id_space.borrow_mut().next(); self.networks.borrow_mut().insert( next_id, @@ -257,7 +257,7 @@ impl VM { } /// Get network form Id - pub fn get_network(self: &Rc, id: u32) -> Option { + pub fn get_network(self: &Rc, id: ObjectID) -> Option { self.networks.borrow().get(&id).cloned() } @@ -265,7 +265,11 @@ impl VM { /// /// Iterates over all objects borrowing them mutably, never call unless VM is not currently /// stepping or you'll get reborrow panics - pub fn change_device_id(self: &Rc, old_id: u32, new_id: u32) -> Result<(), VMError> { + 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)); } @@ -321,7 +325,7 @@ impl VM { /// Set program code if it's valid /// Object Id is the programmable Id or the circuit holder's id - pub fn set_code(self: &Rc, id: u32, code: &str) -> Result { + pub fn set_code(self: &Rc, id: ObjectID, code: &str) -> Result { let obj = self .objects .borrow() @@ -356,7 +360,7 @@ impl VM { /// Set program code and translate invalid lines to Nop, collecting errors /// Object Id is the programmable Id or the circuit holder's id - pub fn set_code_invalid(self: &Rc, id: u32, code: &str) -> Result { + pub fn set_code_invalid(self: &Rc, id: ObjectID, code: &str) -> Result { let obj = self .objects .borrow() @@ -389,6 +393,143 @@ impl VM { Err(VMError::NoIC(id)) } + /// Set register of integrated circuit + /// Object Id is the circuit Id or the circuit holder's id + 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 + 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 + 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 + 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: &Rc) -> Vec { self.operation_modified.borrow().clone() @@ -396,7 +537,7 @@ impl VM { pub fn step_programmable( self: &Rc, - id: u32, + id: ObjectID, advance_ip_on_err: bool, ) -> Result<(), VMError> { let obj = self @@ -440,7 +581,7 @@ impl VM { /// returns true if executed 128 lines, false if returned early. pub fn run_programmable( self: &Rc, - id: u32, + id: ObjectID, ignore_errors: bool, ) -> Result { let obj = self @@ -573,7 +714,11 @@ impl VM { } } - pub fn get_network_channel(self: &Rc, id: u32, channel: usize) -> Result { + pub fn get_network_channel( + self: &Rc, + id: ObjectID, + channel: usize, + ) -> Result { let network = self .networks .borrow() @@ -653,7 +798,7 @@ impl VM { pub fn set_pin( self: &Rc, - id: u32, + id: ObjectID, pin: usize, val: Option, ) -> Result { @@ -1071,6 +1216,13 @@ impl VM { Ok(last) } + 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)?) + } + pub fn save_vm_state(self: &Rc) -> Result { Ok(FrozenVM { objects: self @@ -1085,7 +1237,7 @@ impl VM { { None } else { - Some(FrozenObject::freeze_object(obj, self)) + Some(FrozenObject::freeze_object_sparse(obj, self)) } }) .collect::, _>>()?, diff --git a/ic10emu_wasm/Cargo.toml b/ic10emu_wasm/Cargo.toml index ea06db8..5a0f233 100644 --- a/ic10emu_wasm/Cargo.toml +++ b/ic10emu_wasm/Cargo.toml @@ -5,8 +5,9 @@ version.workspace = true edition.workspace = true [dependencies] +stationeers_data = { path = "../stationeers_data", features = ["tsify"] } ic10emu = { path = "../ic10emu", features = ["tsify"] } -console_error_panic_hook = {version = "0.1.7", optional = true} +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.92" @@ -24,12 +25,42 @@ serde_derive = "1.0.203" [build-dependencies] ic10emu = { path = "../ic10emu" } -strum = { version = "0.26.2"} +strum = { version = "0.26.2" } itertools = "0.13.0" [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"] + +[profile.release] +# Tell `rustc` to optimize for small code size. +opt-level = "s" + +[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 index b83ec9b..ab4a158 100644 --- a/ic10emu_wasm/build.rs +++ b/ic10emu_wasm/build.rs @@ -1,12 +1,7 @@ -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(); diff --git a/ic10emu_wasm/src/lib.rs b/ic10emu_wasm/src/lib.rs index eadff29..8afdf0f 100644 --- a/ic10emu_wasm/src/lib.rs +++ b/ic10emu_wasm/src/lib.rs @@ -3,20 +3,19 @@ mod utils; // mod types; use ic10emu::{ - errors::{TemplateError, VMError}, + errors::VMError, vm::{ object::{templates::FrozenObject, ObjectID, VMObject}, FrozenVM, VM, }, }; -use serde_derive::{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}; + +use std::rc::Rc; + use wasm_bindgen::prelude::*; #[wasm_bindgen] @@ -24,12 +23,6 @@ extern "C" { fn alert(s: &str); } -// #[wasm_bindgen] -// pub struct DeviceRef { -// device: Rc>, -// vm: Rc>, -// } - use thiserror::Error; #[derive(Error, Debug, Serialize, Deserialize)] @@ -40,330 +33,12 @@ 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) -> ObjectID { -// self.device.id -// } -// -// #[wasm_bindgen(getter)] -// pub fn ic(&self) -> Option { -// self.device.ic -// } -// -// #[wasm_bindgen(getter)] -// pub fn name(&self) -> Option { -// self.device.name.clone() -// } -// -// #[wasm_bindgen(getter, js_name = "nameHash")] -// pub fn name_hash(&self) -> Option { -// self.device.name_hash -// } -// -// #[wasm_bindgen(getter, js_name = "prefabName")] -// pub fn prefab_name(&self) -> Option { -// self.device -// -// .prefab -// .as_ref() -// .map(|prefab| prefab.name.clone()) -// } -// -// #[wasm_bindgen(getter, js_name = "prefabHash")] -// pub fn prefab_hash(&self) -> Option { -// self.device -// -// .prefab -// .as_ref() -// .map(|prefab| prefab.hash) -// } -// -// #[wasm_bindgen(getter, skip_typescript)] -// pub fn fields(&self) -> JsValue { -// serde_wasm_bindgen::to_value(&self.device.get_fields(&self.vm.borrow())).unwrap() -// } -// -// #[wasm_bindgen(getter)] -// pub fn slots(&self) -> types::Slots { -// types::Slots::from_iter(self.device.slots.iter()) -// } -// -// #[wasm_bindgen(getter, skip_typescript)] -// pub fn reagents(&self) -> JsValue { -// serde_wasm_bindgen::to_value(&self.device.reagents).unwrap() -// } -// -// #[wasm_bindgen(getter, skip_typescript)] -// pub fn connections(&self) -> JsValue { -// serde_wasm_bindgen::to_value(&self.device.connections).unwrap() -// } -// -// #[wasm_bindgen(getter, js_name = "ip")] -// pub fn ic_ip(&self) -> Option { -// self.device.ic.as_ref().and_then(|ic| { -// self.vm -// -// .circuit_holders -// .get(ic) -// .map(|ic| ic.as_ref().ip()) -// }) -// } -// -// #[wasm_bindgen(getter, js_name = "instructionCount")] -// pub fn ic_instruction_count(&self) -> Option { -// self.device.ic.as_ref().and_then(|ic| { -// self.vm -// -// .circuit_holders -// .get(ic) -// .map(|ic| ic.as_ref().ic.get()) -// }) -// } -// -// #[wasm_bindgen(getter, js_name = "stack")] -// pub fn ic_stack(&self) -> Option { -// self.device.ic.as_ref().and_then(|ic| { -// self.vm -// -// .circuit_holders -// .get(ic) -// .map(|ic| Stack(*ic.as_ref().stack.borrow())) -// }) -// } -// -// #[wasm_bindgen(getter, js_name = "registers")] -// pub fn ic_registers(&self) -> Option { -// self.device.ic.as_ref().and_then(|ic| { -// self.vm -// -// .circuit_holders -// .get(ic) -// .map(|ic| Registers(*ic.as_ref().registers.borrow())) -// }) -// } -// -// #[wasm_bindgen(getter, js_name = "aliases", skip_typescript)] -// pub fn ic_aliases(&self) -> JsValue { -// let aliases = &self.device.ic.as_ref().and_then(|ic| { -// self.vm -// -// .circuit_holders -// .get(ic) -// .map(|ic| ic.as_ref().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.ic.as_ref().and_then(|ic| { -// self.vm -// -// .circuit_holders -// .get(ic) -// .map(|ic| ic.as_ref().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.ic.as_ref().and_then(|ic| { -// self.vm -// -// .circuit_holders -// .get(ic) -// .map(|ic| *ic.as_ref().pins.borrow()) -// }); -// serde_wasm_bindgen::to_value(pins).unwrap() -// } -// -// #[wasm_bindgen(getter, js_name = "state")] -// pub fn ic_state(&self) -> Option { -// self.device -// -// .ic -// .as_ref() -// .and_then(|ic| { -// self.vm -// -// .circuit_holders -// .get(ic) -// .map(|ic| ic.state.clone()) -// }) -// .map(|state| state.to_string()) -// } -// -// #[wasm_bindgen(getter, js_name = "program", skip_typescript)] -// pub fn ic_program(&self) -> JsValue { -// let prog = &self.device.ic.as_ref().and_then(|ic| { -// self.vm -// -// .circuit_holders -// .get(ic) -// .map(|ic| ic.program.borrow().clone()) -// }); -// serde_wasm_bindgen::to_value(prog).unwrap() -// } -// -// #[wasm_bindgen(getter, js_name = "code")] -// pub fn get_code(&self) -> Option { -// self.device.ic.as_ref().and_then(|ic| { -// self.vm -// -// .circuit_holders -// .get(ic) -// .map(|ic| ic.code.borrow().clone()) -// }) -// } -// -// #[wasm_bindgen(js_name = "step")] -// pub fn step_ic(&self, advance_ip_on_err: bool) -> Result { -// let id = self.device.id; -// Ok(self.vm.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.id; -// Ok(self.vm.run_ic(id, ignore_errors)?) -// } -// -// #[wasm_bindgen(js_name = "reset")] -// pub fn reset_ic(&self) -> Result { -// let id = self.device.id; -// Ok(self.vm.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.id; -// 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_invlaid(&self, code: &str) -> Result { -// let id = self.device.id; -// Ok(self.vm.set_code_invalid(id, code)?) -// } -// -// #[wasm_bindgen(js_name = "setRegister")] -// pub fn ic_set_register(&self, index: ObjectID, val: f64) -> Result { -// let ic_id = *self -// .device -// -// .ic -// .as_ref() -// .ok_or(VMError::NoIC(self.device.id))?; -// let vm_borrow = self.vm; -// let ic = vm_borrow -// .circuit_holders -// .get(&ic_id) -// .ok_or(VMError::NoIC(self.device.id))?; -// let result = ic.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 -// -// .ic -// .as_ref() -// .ok_or(VMError::NoIC(self.device.id))?; -// let vm_borrow = self.vm; -// let ic = vm_borrow -// .circuit_holders -// .get(&ic_id) -// .ok_or(VMError::NoIC(self.device.id))?; -// let result = ic.poke(address, val)?; -// Ok(result) -// } -// -// #[wasm_bindgen(js_name = "setName")] -// pub fn set_name(&self, name: &str) { -// self.device.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; -// device_ref.set_field(logic_typ, value, &self.vm, 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 = LogicSlotType::from_str(field)?; -// let mut device_ref = self.device; -// device_ref.set_slot_field(slot, logic_typ, value, &self.vm, force)?; -// Ok(()) -// } -// -// #[wasm_bindgen(js_name = "getSlotField", skip_typescript)] -// pub fn get_slot_field(&self, slot: f64, field: &str) -> Result { -// let logic_typ = LogicSlotType::from_str(field)?; -// let device_ref = self.device; -// Ok(device_ref.get_slot_field(slot, logic_typ, &self.vm)?) -// } -// -// #[wasm_bindgen(js_name = "getSlotFields", skip_typescript)] -// pub fn get_slot_fields(&self, slot: f64) -> Result { -// let device_ref = self.device; -// let fields = device_ref.get_slot_fields(slot, &self.vm)?; -// 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.id; -// self.vm -// -// .set_device_connection(device_id, conn, net)?; -// Ok(()) -// } -// -// #[wasm_bindgen(js_name = "removeDeviceFromNetwork")] -// pub fn remove_device_from_network(&self, network_id: ObjectID) -> Result { -// let id = self.device.id; -// Ok(self -// .vm -// -// .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.id; -// Ok(self.vm.set_pin(id, pin, val)?) -// } -// } - #[wasm_bindgen] #[derive(Debug)] pub struct VMRef { vm: Rc, } -// #[wasm_bindgen] -// pub struct ObjectRef(VMObject); - #[wasm_bindgen] impl VMRef { #[wasm_bindgen(constructor)] @@ -382,9 +57,12 @@ impl VMRef { #[wasm_bindgen(js_name = "getDevice")] pub fn get_object(&self, id: ObjectID) -> Option { - let obj = self.vm.get_object(id); - // device.map(|d| DeviceRef::from_device(d.clone(), self.vm.clone())) - obj + self.vm.get_object(id) + } + + #[wasm_bindgen(js_name = "freezeDevice")] + pub fn freeze_object(&self, id: ObjectID) -> Result { + Ok(self.vm.freeze_object(id)?) } #[wasm_bindgen(js_name = "setCode")] @@ -399,17 +77,17 @@ impl VMRef { Ok(self.vm.set_code_invalid(id, code)?) } - #[wasm_bindgen(js_name = "stepIC")] - pub fn step_ic(&self, id: ObjectID, advance_ip_on_err: bool) -> Result<(), JsError> { + #[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(js_name = "runIC")] - pub fn run_ic(&self, id: ObjectID, ignore_errors: bool) -> Result { + #[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(js_name = "resetIC")] + #[wasm_bindgen(js_name = "resetProgrammable")] pub fn reset_ic(&self, id: ObjectID) -> Result { Ok(self.vm.reset_programmable(id)?) } @@ -419,20 +97,25 @@ impl VMRef { *self.vm.default_network_key.borrow() } - // #[wasm_bindgen(getter)] - // pub fn devices(&self) -> Vec { - // self.vm.devices.keys().copied().collect_vec() - // } - // - // #[wasm_bindgen(getter)] - // pub fn networks(&self) -> Vec { - // self.vm.networks.keys().copied().collect_vec() - // } - // - // #[wasm_bindgen(getter)] - // pub fn ics(&self) -> Vec { - // self.vm.circuit_holders.keys().copied().collect_vec() - // } + #[wasm_bindgen(getter)] + pub fn objects(&self) -> Vec { + self.vm.objects.borrow().keys().copied().collect_vec() + } + + #[wasm_bindgen(getter)] + pub fn networks(&self) -> Vec { + self.vm.networks.borrow().keys().copied().collect_vec() + } + + #[wasm_bindgen(getter)] + pub fn circuit_holders(&self) -> Vec { + self.vm.circuit_holders.borrow().clone() + } + + #[wasm_bindgen(getter)] + pub fn program_holders(&self) -> Vec { + self.vm.program_holders.borrow().clone() + } #[wasm_bindgen(getter, js_name = "lastOperationModified")] pub fn last_operation_modified(&self) -> Vec { @@ -498,7 +181,11 @@ impl VMRef { } #[wasm_bindgen(js_name = "removeSlotOccupant")] - pub fn remove_slot_occupant(&self, id: ObjectID, index: usize) -> Result, JsError> { + pub fn remove_slot_occupant( + &self, + id: ObjectID, + index: usize, + ) -> Result, JsError> { Ok(self.vm.remove_slot_occupant(id, index)?) } @@ -512,6 +199,84 @@ impl VMRef { 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 { diff --git a/ic10lsp_wasm/Cargo.toml b/ic10lsp_wasm/Cargo.toml index 45a8455..6814c4e 100644 --- a/ic10lsp_wasm/Cargo.toml +++ b/ic10lsp_wasm/Cargo.toml @@ -27,3 +27,29 @@ wasm-streams = "0.4" # web-tree-sitter-sys = "1.3" ic10lsp = { git = "https://github.com/Ryex/ic10lsp.git", branch = "wasm" } # ic10lsp = { path = "../../ic10lsp" } + +[profile.release] +# Tell `rustc` to optimize for small code size. +opt-level = "s" + +[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 From e4167efc20e8869c10e9034736652d0b310704e3 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Tue, 28 May 2024 13:56:22 -0700 Subject: [PATCH 33/50] chore(codegen): generate json database in www/data --- data/database.json | 62741 ----------------- ic10emu_wasm/Cargo.toml | 4 - ic10lsp_wasm/Cargo.toml | 4 - www/data/Enums.json | 1 - www/data/Stationpedia.json | 70094 ------------------- www/data/database.json | 109536 +++++++++++++++++------------- xtask/src/generate/database.rs | 2 +- 7 files changed, 62740 insertions(+), 179642 deletions(-) delete mode 100644 data/database.json delete mode 100644 www/data/Enums.json delete mode 100644 www/data/Stationpedia.json diff --git a/data/database.json b/data/database.json deleted file mode 100644 index 3cf93e7..0000000 --- a/data/database.json +++ /dev/null @@ -1,62741 +0,0 @@ -{ - "prefabs": { - "AccessCardBlack": { - "prefab": { - "prefab_name": "AccessCardBlack", - "prefab_hash": -1330388999, - "desc": "", - "name": "Access Card (Black)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "AccessCard", - "sorting_class": "Default" - } - }, - "AccessCardBlue": { - "prefab": { - "prefab_name": "AccessCardBlue", - "prefab_hash": -1411327657, - "desc": "", - "name": "Access Card (Blue)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "AccessCard", - "sorting_class": "Default" - } - }, - "AccessCardBrown": { - "prefab": { - "prefab_name": "AccessCardBrown", - "prefab_hash": 1412428165, - "desc": "", - "name": "Access Card (Brown)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "AccessCard", - "sorting_class": "Default" - } - }, - "AccessCardGray": { - "prefab": { - "prefab_name": "AccessCardGray", - "prefab_hash": -1339479035, - "desc": "", - "name": "Access Card (Gray)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "AccessCard", - "sorting_class": "Default" - } - }, - "AccessCardGreen": { - "prefab": { - "prefab_name": "AccessCardGreen", - "prefab_hash": -374567952, - "desc": "", - "name": "Access Card (Green)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "AccessCard", - "sorting_class": "Default" - } - }, - "AccessCardKhaki": { - "prefab": { - "prefab_name": "AccessCardKhaki", - "prefab_hash": 337035771, - "desc": "", - "name": "Access Card (Khaki)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "AccessCard", - "sorting_class": "Default" - } - }, - "AccessCardOrange": { - "prefab": { - "prefab_name": "AccessCardOrange", - "prefab_hash": -332896929, - "desc": "", - "name": "Access Card (Orange)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "AccessCard", - "sorting_class": "Default" - } - }, - "AccessCardPink": { - "prefab": { - "prefab_name": "AccessCardPink", - "prefab_hash": 431317557, - "desc": "", - "name": "Access Card (Pink)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "AccessCard", - "sorting_class": "Default" - } - }, - "AccessCardPurple": { - "prefab": { - "prefab_name": "AccessCardPurple", - "prefab_hash": 459843265, - "desc": "", - "name": "Access Card (Purple)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "AccessCard", - "sorting_class": "Default" - } - }, - "AccessCardRed": { - "prefab": { - "prefab_name": "AccessCardRed", - "prefab_hash": -1713748313, - "desc": "", - "name": "Access Card (Red)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "AccessCard", - "sorting_class": "Default" - } - }, - "AccessCardWhite": { - "prefab": { - "prefab_name": "AccessCardWhite", - "prefab_hash": 2079959157, - "desc": "", - "name": "Access Card (White)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "AccessCard", - "sorting_class": "Default" - } - }, - "AccessCardYellow": { - "prefab": { - "prefab_name": "AccessCardYellow", - "prefab_hash": 568932536, - "desc": "", - "name": "Access Card (Yellow)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "AccessCard", - "sorting_class": "Default" - } - }, - "ApplianceChemistryStation": { - "prefab": { - "prefab_name": "ApplianceChemistryStation", - "prefab_hash": 1365789392, - "desc": "", - "name": "Chemistry Station" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Appliance", - "sorting_class": "Appliances" - }, - "slots": [ - { - "name": "Output", - "typ": "None" - } - ], - "consumer_info": { - "consumed_resouces": [ - "ItemCharcoal", - "ItemCobaltOre", - "ItemFern", - "ItemSilverIngot", - "ItemSilverOre", - "ItemSoyOil" - ], - "processed_reagents": [] - } - }, - "ApplianceDeskLampLeft": { - "prefab": { - "prefab_name": "ApplianceDeskLampLeft", - "prefab_hash": -1683849799, - "desc": "", - "name": "Appliance Desk Lamp Left" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Appliance", - "sorting_class": "Appliances" - } - }, - "ApplianceDeskLampRight": { - "prefab": { - "prefab_name": "ApplianceDeskLampRight", - "prefab_hash": 1174360780, - "desc": "", - "name": "Appliance Desk Lamp Right" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Appliance", - "sorting_class": "Appliances" - } - }, - "ApplianceMicrowave": { - "prefab": { - "prefab_name": "ApplianceMicrowave", - "prefab_hash": -1136173965, - "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.", - "name": "Microwave" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Appliance", - "sorting_class": "Appliances" - }, - "slots": [ - { - "name": "Output", - "typ": "None" - } - ], - "consumer_info": { - "consumed_resouces": [ - "ItemCorn", - "ItemEgg", - "ItemFertilizedEgg", - "ItemFlour", - "ItemMilk", - "ItemMushroom", - "ItemPotato", - "ItemPumpkin", - "ItemRice", - "ItemSoybean", - "ItemSoyOil", - "ItemTomato", - "ItemSugarCane", - "ItemCocoaTree", - "ItemCocoaPowder", - "ItemSugar" - ], - "processed_reagents": [] - } - }, - "AppliancePackagingMachine": { - "prefab": { - "prefab_name": "AppliancePackagingMachine", - "prefab_hash": -749191906, - "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 ", - "name": "Basic Packaging Machine" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Appliance", - "sorting_class": "Appliances" - }, - "slots": [ - { - "name": "Export", - "typ": "None" - } - ], - "consumer_info": { - "consumed_resouces": [ - "ItemCookedCondensedMilk", - "ItemCookedCorn", - "ItemCookedMushroom", - "ItemCookedPowderedEggs", - "ItemCookedPumpkin", - "ItemCookedRice", - "ItemCookedSoybean", - "ItemCookedTomato", - "ItemEmptyCan", - "ItemMilk", - "ItemPotatoBaked", - "ItemSoyOil" - ], - "processed_reagents": [] - } - }, - "AppliancePaintMixer": { - "prefab": { - "prefab_name": "AppliancePaintMixer", - "prefab_hash": -1339716113, - "desc": "", - "name": "Paint Mixer" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Appliance", - "sorting_class": "Appliances" - }, - "slots": [ - { - "name": "Output", - "typ": "Bottle" - } - ], - "consumer_info": { - "consumed_resouces": [ - "ItemSoyOil", - "ReagentColorBlue", - "ReagentColorGreen", - "ReagentColorOrange", - "ReagentColorRed", - "ReagentColorYellow" - ], - "processed_reagents": [] - } - }, - "AppliancePlantGeneticAnalyzer": { - "prefab": { - "prefab_name": "AppliancePlantGeneticAnalyzer", - "prefab_hash": -1303038067, - "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.", - "name": "Plant Genetic Analyzer" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Appliance", - "sorting_class": "Appliances" - }, - "slots": [ - { - "name": "Input", - "typ": "Tool" - } - ] - }, - "AppliancePlantGeneticSplicer": { - "prefab": { - "prefab_name": "AppliancePlantGeneticSplicer", - "prefab_hash": -1094868323, - "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.", - "name": "Plant Genetic Splicer" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Appliance", - "sorting_class": "Appliances" - }, - "slots": [ - { - "name": "Source Plant", - "typ": "Plant" - }, - { - "name": "Target Plant", - "typ": "Plant" - } - ] - }, - "AppliancePlantGeneticStabilizer": { - "prefab": { - "prefab_name": "AppliancePlantGeneticStabilizer", - "prefab_hash": 871432335, - "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 ", - "name": "Plant Genetic Stabilizer" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Appliance", - "sorting_class": "Appliances" - }, - "slots": [ - { - "name": "Plant", - "typ": "Plant" - } - ] - }, - "ApplianceReagentProcessor": { - "prefab": { - "prefab_name": "ApplianceReagentProcessor", - "prefab_hash": 1260918085, - "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.", - "name": "Reagent Processor" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Appliance", - "sorting_class": "Appliances" - }, - "slots": [ - { - "name": "Input", - "typ": "None" - }, - { - "name": "Output", - "typ": "None" - } - ], - "consumer_info": { - "consumed_resouces": [ - "ItemWheat", - "ItemSugarCane", - "ItemCocoaTree", - "ItemSoybean", - "ItemFlowerBlue", - "ItemFlowerGreen", - "ItemFlowerOrange", - "ItemFlowerRed", - "ItemFlowerYellow" - ], - "processed_reagents": [] - } - }, - "ApplianceSeedTray": { - "prefab": { - "prefab_name": "ApplianceSeedTray", - "prefab_hash": 142831994, - "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.", - "name": "Appliance Seed Tray" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Appliance", - "sorting_class": "Appliances" - }, - "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" - } - ] - }, - "ApplianceTabletDock": { - "prefab": { - "prefab_name": "ApplianceTabletDock", - "prefab_hash": 1853941363, - "desc": "", - "name": "Tablet Dock" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Appliance", - "sorting_class": "Appliances" - }, - "slots": [ - { - "name": "", - "typ": "Tool" - } - ] - }, - "AutolathePrinterMod": { - "prefab": { - "prefab_name": "AutolathePrinterMod", - "prefab_hash": 221058307, - "desc": "Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", - "name": "Autolathe Printer Mod" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "Battery_Wireless_cell": { - "prefab": { - "prefab_name": "Battery_Wireless_cell", - "prefab_hash": -462415758, - "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", - "name": "Battery Wireless Cell" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Battery", - "sorting_class": "Default" - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Mode": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [] - }, - "Battery_Wireless_cell_Big": { - "prefab": { - "prefab_name": "Battery_Wireless_cell_Big", - "prefab_hash": -41519077, - "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", - "name": "Battery Wireless Cell (Big)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Battery", - "sorting_class": "Default" - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Mode": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [] - }, - "CardboardBox": { - "prefab": { - "prefab_name": "CardboardBox", - "prefab_hash": -1976947556, - "desc": "", - "name": "Cardboard Box" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Storage" - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ] - }, - "CartridgeAccessController": { - "prefab": { - "prefab_name": "CartridgeAccessController", - "prefab_hash": -1634532552, - "desc": "", - "name": "Cartridge (Access Controller)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Cartridge", - "sorting_class": "Default" - } - }, - "CartridgeAtmosAnalyser": { - "prefab": { - "prefab_name": "CartridgeAtmosAnalyser", - "prefab_hash": -1550278665, - "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.", - "name": "Atmos Analyzer" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Cartridge", - "sorting_class": "Default" - } - }, - "CartridgeConfiguration": { - "prefab": { - "prefab_name": "CartridgeConfiguration", - "prefab_hash": -932136011, - "desc": "", - "name": "Configuration" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Cartridge", - "sorting_class": "Default" - } - }, - "CartridgeElectronicReader": { - "prefab": { - "prefab_name": "CartridgeElectronicReader", - "prefab_hash": -1462180176, - "desc": "", - "name": "eReader" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Cartridge", - "sorting_class": "Default" - } - }, - "CartridgeGPS": { - "prefab": { - "prefab_name": "CartridgeGPS", - "prefab_hash": -1957063345, - "desc": "", - "name": "GPS" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Cartridge", - "sorting_class": "Default" - } - }, - "CartridgeGuide": { - "prefab": { - "prefab_name": "CartridgeGuide", - "prefab_hash": 872720793, - "desc": "", - "name": "Guide" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Cartridge", - "sorting_class": "Default" - } - }, - "CartridgeMedicalAnalyser": { - "prefab": { - "prefab_name": "CartridgeMedicalAnalyser", - "prefab_hash": -1116110181, - "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.", - "name": "Medical Analyzer" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Cartridge", - "sorting_class": "Default" - } - }, - "CartridgeNetworkAnalyser": { - "prefab": { - "prefab_name": "CartridgeNetworkAnalyser", - "prefab_hash": 1606989119, - "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.", - "name": "Network Analyzer" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Cartridge", - "sorting_class": "Default" - } - }, - "CartridgeOreScanner": { - "prefab": { - "prefab_name": "CartridgeOreScanner", - "prefab_hash": -1768732546, - "desc": "When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet.", - "name": "Ore Scanner" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Cartridge", - "sorting_class": "Default" - } - }, - "CartridgeOreScannerColor": { - "prefab": { - "prefab_name": "CartridgeOreScannerColor", - "prefab_hash": 1738236580, - "desc": "When inserted into a Handheld Tablet the scanner will display minerals hidden underground in different colors on the tablet.", - "name": "Ore Scanner (Color)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Cartridge", - "sorting_class": "Default" - } - }, - "CartridgePlantAnalyser": { - "prefab": { - "prefab_name": "CartridgePlantAnalyser", - "prefab_hash": 1101328282, - "desc": "", - "name": "Cartridge Plant Analyser" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Cartridge", - "sorting_class": "Default" - } - }, - "CartridgeTracker": { - "prefab": { - "prefab_name": "CartridgeTracker", - "prefab_hash": 81488783, - "desc": "", - "name": "Tracker" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Cartridge", - "sorting_class": "Default" - } - }, - "CircuitboardAdvAirlockControl": { - "prefab": { - "prefab_name": "CircuitboardAdvAirlockControl", - "prefab_hash": 1633663176, - "desc": "", - "name": "Advanced Airlock" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Circuitboard", - "sorting_class": "Default" - } - }, - "CircuitboardAirControl": { - "prefab": { - "prefab_name": "CircuitboardAirControl", - "prefab_hash": 1618019559, - "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. ", - "name": "Air Control" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Circuitboard", - "sorting_class": "Default" - } - }, - "CircuitboardAirlockControl": { - "prefab": { - "prefab_name": "CircuitboardAirlockControl", - "prefab_hash": 912176135, - "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.", - "name": "Airlock" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Circuitboard", - "sorting_class": "Default" - } - }, - "CircuitboardCameraDisplay": { - "prefab": { - "prefab_name": "CircuitboardCameraDisplay", - "prefab_hash": -412104504, - "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.", - "name": "Camera Display" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Circuitboard", - "sorting_class": "Default" - } - }, - "CircuitboardDoorControl": { - "prefab": { - "prefab_name": "CircuitboardDoorControl", - "prefab_hash": 855694771, - "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.", - "name": "Door Control" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Circuitboard", - "sorting_class": "Default" - } - }, - "CircuitboardGasDisplay": { - "prefab": { - "prefab_name": "CircuitboardGasDisplay", - "prefab_hash": -82343730, - "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).", - "name": "Gas Display" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Circuitboard", - "sorting_class": "Default" - } - }, - "CircuitboardGraphDisplay": { - "prefab": { - "prefab_name": "CircuitboardGraphDisplay", - "prefab_hash": 1344368806, - "desc": "", - "name": "Graph Display" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Circuitboard", - "sorting_class": "Default" - } - }, - "CircuitboardHashDisplay": { - "prefab": { - "prefab_name": "CircuitboardHashDisplay", - "prefab_hash": 1633074601, - "desc": "", - "name": "Hash Display" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Circuitboard", - "sorting_class": "Default" - } - }, - "CircuitboardModeControl": { - "prefab": { - "prefab_name": "CircuitboardModeControl", - "prefab_hash": -1134148135, - "desc": "Can't decide which mode you love most? This circuit board allows you to switch any connected device between operation modes.", - "name": "Mode Control" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Circuitboard", - "sorting_class": "Default" - } - }, - "CircuitboardPowerControl": { - "prefab": { - "prefab_name": "CircuitboardPowerControl", - "prefab_hash": -1923778429, - "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. ", - "name": "Power Control" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Circuitboard", - "sorting_class": "Default" - } - }, - "CircuitboardShipDisplay": { - "prefab": { - "prefab_name": "CircuitboardShipDisplay", - "prefab_hash": -2044446819, - "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.", - "name": "Ship Display" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Circuitboard", - "sorting_class": "Default" - } - }, - "CircuitboardSolarControl": { - "prefab": { - "prefab_name": "CircuitboardSolarControl", - "prefab_hash": 2020180320, - "desc": "Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel.", - "name": "Solar Control" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Circuitboard", - "sorting_class": "Default" - } - }, - "CompositeRollCover": { - "prefab": { - "prefab_name": "CompositeRollCover", - "prefab_hash": 1228794916, - "desc": "0.Operate\n1.Logic", - "name": "Composite Roll Cover" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "CrateMkII": { - "prefab": { - "prefab_name": "CrateMkII", - "prefab_hash": 8709219, - "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.", - "name": "Crate Mk II" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Storage" - }, - "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" - } - ] - }, - "DecayedFood": { - "prefab": { - "prefab_name": "DecayedFood", - "prefab_hash": 1531087544, - "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", - "name": "Decayed Food" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 25, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "DeviceLfoVolume": { - "prefab": { - "prefab_name": "DeviceLfoVolume", - "prefab_hash": -1844430312, - "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.", - "name": "Low frequency oscillator" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "Time": "ReadWrite", - "Bpm": "ReadWrite", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Whole Note", - "1": "Half Note", - "2": "Quarter Note", - "3": "Eighth Note", - "4": "Sixteenth Note" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Power", - "role": "Input" - } - ], - "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 - } - }, - "DeviceStepUnit": { - "prefab": { - "prefab_name": "DeviceStepUnit", - "prefab_hash": 1762696475, - "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", - "name": "Device Step Unit" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Volume": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "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" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Power", - "role": "Input" - } - ], - "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 - } - }, - "DynamicAirConditioner": { - "prefab": { - "prefab_name": "DynamicAirConditioner", - "prefab_hash": 519913639, - "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.", - "name": "Portable Air Conditioner" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "DynamicCrate": { - "prefab": { - "prefab_name": "DynamicCrate", - "prefab_hash": 1941079206, - "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.", - "name": "Dynamic Crate" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Storage" - }, - "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" - } - ] - }, - "DynamicGPR": { - "prefab": { - "prefab_name": "DynamicGPR", - "prefab_hash": -2085885850, - "desc": "", - "name": "" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "DynamicGasCanisterAir": { - "prefab": { - "prefab_name": "DynamicGasCanisterAir", - "prefab_hash": -1713611165, - "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.", - "name": "Portable Gas Tank (Air)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.025, - "radiation_factor": 0.025 - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ] - }, - "DynamicGasCanisterCarbonDioxide": { - "prefab": { - "prefab_name": "DynamicGasCanisterCarbonDioxide", - "prefab_hash": -322413931, - "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.", - "name": "Portable Gas Tank (CO2)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "thermal_info": { - "convection_factor": 0.025, - "radiation_factor": 0.025 - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ] - }, - "DynamicGasCanisterEmpty": { - "prefab": { - "prefab_name": "DynamicGasCanisterEmpty", - "prefab_hash": -1741267161, - "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.", - "name": "Portable Gas Tank" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "thermal_info": { - "convection_factor": 0.025, - "radiation_factor": 0.025 - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ] - }, - "DynamicGasCanisterFuel": { - "prefab": { - "prefab_name": "DynamicGasCanisterFuel", - "prefab_hash": -817051527, - "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.", - "name": "Portable Gas Tank (Fuel)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "thermal_info": { - "convection_factor": 0.025, - "radiation_factor": 0.025 - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ] - }, - "DynamicGasCanisterNitrogen": { - "prefab": { - "prefab_name": "DynamicGasCanisterNitrogen", - "prefab_hash": 121951301, - "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.", - "name": "Portable Gas Tank (Nitrogen)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "thermal_info": { - "convection_factor": 0.025, - "radiation_factor": 0.025 - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ] - }, - "DynamicGasCanisterNitrousOxide": { - "prefab": { - "prefab_name": "DynamicGasCanisterNitrousOxide", - "prefab_hash": 30727200, - "desc": "", - "name": "Portable Gas Tank (Nitrous Oxide)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "thermal_info": { - "convection_factor": 0.025, - "radiation_factor": 0.025 - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ] - }, - "DynamicGasCanisterOxygen": { - "prefab": { - "prefab_name": "DynamicGasCanisterOxygen", - "prefab_hash": 1360925836, - "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.", - "name": "Portable Gas Tank (Oxygen)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "thermal_info": { - "convection_factor": 0.025, - "radiation_factor": 0.025 - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ] - }, - "DynamicGasCanisterPollutants": { - "prefab": { - "prefab_name": "DynamicGasCanisterPollutants", - "prefab_hash": 396065382, - "desc": "", - "name": "Portable Gas Tank (Pollutants)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "thermal_info": { - "convection_factor": 0.025, - "radiation_factor": 0.025 - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ] - }, - "DynamicGasCanisterRocketFuel": { - "prefab": { - "prefab_name": "DynamicGasCanisterRocketFuel", - "prefab_hash": -8883951, - "desc": "", - "name": "Dynamic Gas Canister Rocket Fuel" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "thermal_info": { - "convection_factor": 0.025, - "radiation_factor": 0.025 - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ] - }, - "DynamicGasCanisterVolatiles": { - "prefab": { - "prefab_name": "DynamicGasCanisterVolatiles", - "prefab_hash": 108086870, - "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.", - "name": "Portable Gas Tank (Volatiles)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "thermal_info": { - "convection_factor": 0.025, - "radiation_factor": 0.025 - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ] - }, - "DynamicGasCanisterWater": { - "prefab": { - "prefab_name": "DynamicGasCanisterWater", - "prefab_hash": 197293625, - "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.", - "name": "Portable Liquid Tank (Water)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.025, - "radiation_factor": 0.025 - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "LiquidCanister" - } - ] - }, - "DynamicGasTankAdvanced": { - "prefab": { - "prefab_name": "DynamicGasTankAdvanced", - "prefab_hash": -386375420, - "desc": "0.Mode0\n1.Mode1", - "name": "Gas Tank Mk II" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ] - }, - "DynamicGasTankAdvancedOxygen": { - "prefab": { - "prefab_name": "DynamicGasTankAdvancedOxygen", - "prefab_hash": -1264455519, - "desc": "0.Mode0\n1.Mode1", - "name": "Portable Gas Tank Mk II (Oxygen)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ] - }, - "DynamicGenerator": { - "prefab": { - "prefab_name": "DynamicGenerator", - "prefab_hash": -82087220, - "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.", - "name": "Portable Generator" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "GasCanister" - }, - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "DynamicHydroponics": { - "prefab": { - "prefab_name": "DynamicHydroponics", - "prefab_hash": 587726607, - "desc": "", - "name": "Portable Hydroponics" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.05 - }, - "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" - } - ] - }, - "DynamicLight": { - "prefab": { - "prefab_name": "DynamicLight", - "prefab_hash": -21970188, - "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.", - "name": "Portable Light" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Lock": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "DynamicLiquidCanisterEmpty": { - "prefab": { - "prefab_name": "DynamicLiquidCanisterEmpty", - "prefab_hash": -1939209112, - "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.", - "name": "Portable Liquid Tank" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.025, - "radiation_factor": 0.025 - }, - "slots": [ - { - "name": "Liquid Canister", - "typ": "LiquidCanister" - } - ] - }, - "DynamicMKIILiquidCanisterEmpty": { - "prefab": { - "prefab_name": "DynamicMKIILiquidCanisterEmpty", - "prefab_hash": 2130739600, - "desc": "An empty, insulated liquid Gas Canister.", - "name": "Portable Liquid Tank Mk II" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "slots": [ - { - "name": "Liquid Canister", - "typ": "LiquidCanister" - } - ] - }, - "DynamicMKIILiquidCanisterWater": { - "prefab": { - "prefab_name": "DynamicMKIILiquidCanisterWater", - "prefab_hash": -319510386, - "desc": "An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature.", - "name": "Portable Liquid Tank Mk II (Water)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "slots": [ - { - "name": "Liquid Canister", - "typ": "LiquidCanister" - } - ] - }, - "DynamicScrubber": { - "prefab": { - "prefab_name": "DynamicScrubber", - "prefab_hash": 755048589, - "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.", - "name": "Portable Air Scrubber" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Gas Filter", - "typ": "GasFilter" - }, - { - "name": "Gas Filter", - "typ": "GasFilter" - } - ] - }, - "DynamicSkeleton": { - "prefab": { - "prefab_name": "DynamicSkeleton", - "prefab_hash": 106953348, - "desc": "", - "name": "Skeleton" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ElectronicPrinterMod": { - "prefab": { - "prefab_name": "ElectronicPrinterMod", - "prefab_hash": -311170652, - "desc": "Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", - "name": "Electronic Printer Mod" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ElevatorCarrage": { - "prefab": { - "prefab_name": "ElevatorCarrage", - "prefab_hash": -110788403, - "desc": "", - "name": "Elevator" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "EntityChick": { - "prefab": { - "prefab_name": "EntityChick", - "prefab_hash": 1730165908, - "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.", - "name": "Entity Chick" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "slots": [ - { - "name": "Brain", - "typ": "Organ" - } - ] - }, - "EntityChickenBrown": { - "prefab": { - "prefab_name": "EntityChickenBrown", - "prefab_hash": 334097180, - "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.", - "name": "Entity Chicken Brown" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "slots": [ - { - "name": "Brain", - "typ": "Organ" - } - ] - }, - "EntityChickenWhite": { - "prefab": { - "prefab_name": "EntityChickenWhite", - "prefab_hash": 1010807532, - "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.", - "name": "Entity Chicken White" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "slots": [ - { - "name": "Brain", - "typ": "Organ" - } - ] - }, - "EntityRoosterBlack": { - "prefab": { - "prefab_name": "EntityRoosterBlack", - "prefab_hash": 966959649, - "desc": "This is a rooster. It is black. There is dignity in this.", - "name": "Entity Rooster Black" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "slots": [ - { - "name": "Brain", - "typ": "Organ" - } - ] - }, - "EntityRoosterBrown": { - "prefab": { - "prefab_name": "EntityRoosterBrown", - "prefab_hash": -583103395, - "desc": "The common brown rooster. Don't let it hear you say that.", - "name": "Entity Rooster Brown" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "slots": [ - { - "name": "Brain", - "typ": "Organ" - } - ] - }, - "Fertilizer": { - "prefab": { - "prefab_name": "Fertilizer", - "prefab_hash": 1517856652, - "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. ", - "name": "Fertilizer" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Default" - } - }, - "FireArmSMG": { - "prefab": { - "prefab_name": "FireArmSMG", - "prefab_hash": -86315541, - "desc": "0.Single\n1.Auto", - "name": "Fire Arm SMG" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Tools" - }, - "slots": [ - { - "name": "", - "typ": "Magazine" - } - ] - }, - "Flag_ODA_10m": { - "prefab": { - "prefab_name": "Flag_ODA_10m", - "prefab_hash": 1845441951, - "desc": "", - "name": "Flag (ODA 10m)" - }, - "structure": { - "small_grid": true - } - }, - "Flag_ODA_4m": { - "prefab": { - "prefab_name": "Flag_ODA_4m", - "prefab_hash": 1159126354, - "desc": "", - "name": "Flag (ODA 4m)" - }, - "structure": { - "small_grid": true - } - }, - "Flag_ODA_6m": { - "prefab": { - "prefab_name": "Flag_ODA_6m", - "prefab_hash": 1998634960, - "desc": "", - "name": "Flag (ODA 6m)" - }, - "structure": { - "small_grid": true - } - }, - "Flag_ODA_8m": { - "prefab": { - "prefab_name": "Flag_ODA_8m", - "prefab_hash": -375156130, - "desc": "", - "name": "Flag (ODA 8m)" - }, - "structure": { - "small_grid": true - } - }, - "FlareGun": { - "prefab": { - "prefab_name": "FlareGun", - "prefab_hash": 118685786, - "desc": "", - "name": "Flare Gun" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "slots": [ - { - "name": "Magazine", - "typ": "Flare" - }, - { - "name": "", - "typ": "Blocked" - } - ] - }, - "H2Combustor": { - "prefab": { - "prefab_name": "H2Combustor", - "prefab_hash": 1840108251, - "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.", - "name": "H2 Combustor" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "logic": { - "logic_slot_types": { - "0": {} - }, - "logic_types": { - "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", - "RatioLiquidNitrogenInput": "Read", - "RatioLiquidNitrogenOutput": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidOxygenInput": "Read", - "RatioLiquidOxygenOutput": "Read", - "RatioLiquidVolatiles": "Read", - "RatioLiquidVolatilesInput": "Read", - "RatioLiquidVolatilesOutput": "Read", - "RatioSteam": "Read", - "RatioSteamInput": "Read", - "RatioSteamOutput": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidCarbonDioxideInput": "Read", - "RatioLiquidCarbonDioxideOutput": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidPollutantInput": "Read", - "RatioLiquidPollutantOutput": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidNitrousOxideInput": "Read", - "RatioLiquidNitrousOxideOutput": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Idle", - "1": "Active" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": true - }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "Power", - "role": "None" - } - ], - "device_pins_length": 2, - "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 - } - }, - "Handgun": { - "prefab": { - "prefab_name": "Handgun", - "prefab_hash": 247238062, - "desc": "", - "name": "Handgun" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Tools" - }, - "slots": [ - { - "name": "Magazine", - "typ": "Magazine" - } - ] - }, - "HandgunMagazine": { - "prefab": { - "prefab_name": "HandgunMagazine", - "prefab_hash": 1254383185, - "desc": "", - "name": "Handgun Magazine" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Magazine", - "sorting_class": "Default" - } - }, - "HumanSkull": { - "prefab": { - "prefab_name": "HumanSkull", - "prefab_hash": -857713709, - "desc": "", - "name": "Human Skull" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ImGuiCircuitboardAirlockControl": { - "prefab": { - "prefab_name": "ImGuiCircuitboardAirlockControl", - "prefab_hash": -73796547, - "desc": "", - "name": "Airlock (Experimental)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Circuitboard", - "sorting_class": "Default" - } - }, - "ItemActiveVent": { - "prefab": { - "prefab_name": "ItemActiveVent", - "prefab_hash": -842048328, - "desc": "When constructed, this kit places an Active Vent on any support structure.", - "name": "Kit (Active Vent)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemAdhesiveInsulation": { - "prefab": { - "prefab_name": "ItemAdhesiveInsulation", - "prefab_hash": 1871048978, - "desc": "", - "name": "Adhesive Insulation" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 20, - "slot_class": "Tool", - "sorting_class": "Tools" - } - }, - "ItemAdvancedTablet": { - "prefab": { - "prefab_name": "ItemAdvancedTablet", - "prefab_hash": 1722785341, - "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", - "name": "Advanced Tablet" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "logic": { - "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" - }, - "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" - } - }, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "On": "ReadWrite", - "Volume": "ReadWrite", - "SoundAlert": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "transmission_receiver": false, - "wireless_logic": true, - "circuit_holder": true - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Cartridge", - "typ": "Cartridge" - }, - { - "name": "Cartridge1", - "typ": "Cartridge" - }, - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - } - ] - }, - "ItemAlienMushroom": { - "prefab": { - "prefab_name": "ItemAlienMushroom", - "prefab_hash": 176446172, - "desc": "", - "name": "Alien Mushroom" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Default" - } - }, - "ItemAmmoBox": { - "prefab": { - "prefab_name": "ItemAmmoBox", - "prefab_hash": -9559091, - "desc": "", - "name": "Ammo Box" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemAngleGrinder": { - "prefab": { - "prefab_name": "ItemAngleGrinder", - "prefab_hash": 201215010, - "desc": "Angles-be-gone with the trusty angle grinder.", - "name": "Angle Grinder" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Activate": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemArcWelder": { - "prefab": { - "prefab_name": "ItemArcWelder", - "prefab_hash": 1385062886, - "desc": "", - "name": "Arc Welder" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Activate": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemAreaPowerControl": { - "prefab": { - "prefab_name": "ItemAreaPowerControl", - "prefab_hash": 1757673317, - "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.", - "name": "Kit (Power Controller)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemAstroloyIngot": { - "prefab": { - "prefab_name": "ItemAstroloyIngot", - "prefab_hash": 412924554, - "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.", - "name": "Ingot (Astroloy)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Astroloy": 1.0 - }, - "slot_class": "Ingot", - "sorting_class": "Resources" - } - }, - "ItemAstroloySheets": { - "prefab": { - "prefab_name": "ItemAstroloySheets", - "prefab_hash": -1662476145, - "desc": "", - "name": "Astroloy Sheets" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "None", - "sorting_class": "Resources" - } - }, - "ItemAuthoringTool": { - "prefab": { - "prefab_name": "ItemAuthoringTool", - "prefab_hash": 789015045, - "desc": "", - "name": "Authoring Tool" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - } - }, - "ItemAuthoringToolRocketNetwork": { - "prefab": { - "prefab_name": "ItemAuthoringToolRocketNetwork", - "prefab_hash": -1731627004, - "desc": "", - "name": "" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - } - }, - "ItemBasketBall": { - "prefab": { - "prefab_name": "ItemBasketBall", - "prefab_hash": -1262580790, - "desc": "", - "name": "Basket Ball" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemBatteryCell": { - "prefab": { - "prefab_name": "ItemBatteryCell", - "prefab_hash": 700133157, - "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.", - "name": "Battery Cell (Small)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Battery", - "sorting_class": "Default" - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Mode": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [] - }, - "ItemBatteryCellLarge": { - "prefab": { - "prefab_name": "ItemBatteryCellLarge", - "prefab_hash": -459827268, - "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", - "name": "Battery Cell (Large)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Battery", - "sorting_class": "Default" - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Mode": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [] - }, - "ItemBatteryCellNuclear": { - "prefab": { - "prefab_name": "ItemBatteryCellNuclear", - "prefab_hash": 544617306, - "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.", - "name": "Battery Cell (Nuclear)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Battery", - "sorting_class": "Default" - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Mode": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [] - }, - "ItemBatteryCharger": { - "prefab": { - "prefab_name": "ItemBatteryCharger", - "prefab_hash": -1866880307, - "desc": "This kit produces a 5-slot Kit (Battery Charger).", - "name": "Kit (Battery Charger)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemBatteryChargerSmall": { - "prefab": { - "prefab_name": "ItemBatteryChargerSmall", - "prefab_hash": 1008295833, - "desc": "", - "name": "Battery Charger Small" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemBeacon": { - "prefab": { - "prefab_name": "ItemBeacon", - "prefab_hash": -869869491, - "desc": "", - "name": "Tracking Beacon" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemBiomass": { - "prefab": { - "prefab_name": "ItemBiomass", - "prefab_hash": -831480639, - "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).", - "name": "Biomass" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 100, - "reagents": { - "Biomass": 1.0 - }, - "slot_class": "Ore", - "sorting_class": "Resources" - } - }, - "ItemBreadLoaf": { - "prefab": { - "prefab_name": "ItemBreadLoaf", - "prefab_hash": 893514943, - "desc": "", - "name": "Bread Loaf" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemCableAnalyser": { - "prefab": { - "prefab_name": "ItemCableAnalyser", - "prefab_hash": -1792787349, - "desc": "", - "name": "Kit (Cable Analyzer)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemCableCoil": { - "prefab": { - "prefab_name": "ItemCableCoil", - "prefab_hash": -466050668, - "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).", - "name": "Cable Coil" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Tool", - "sorting_class": "Resources" - } - }, - "ItemCableCoilHeavy": { - "prefab": { - "prefab_name": "ItemCableCoilHeavy", - "prefab_hash": 2060134443, - "desc": "Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW.", - "name": "Cable Coil (Heavy)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Tool", - "sorting_class": "Resources" - } - }, - "ItemCableFuse": { - "prefab": { - "prefab_name": "ItemCableFuse", - "prefab_hash": 195442047, - "desc": "", - "name": "Kit (Cable Fuses)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Resources" - } - }, - "ItemCannedCondensedMilk": { - "prefab": { - "prefab_name": "ItemCannedCondensedMilk", - "prefab_hash": -2104175091, - "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.", - "name": "Canned Condensed Milk" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemCannedEdamame": { - "prefab": { - "prefab_name": "ItemCannedEdamame", - "prefab_hash": -999714082, - "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.", - "name": "Canned Edamame" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemCannedMushroom": { - "prefab": { - "prefab_name": "ItemCannedMushroom", - "prefab_hash": -1344601965, - "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.", - "name": "Canned Mushroom" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemCannedPowderedEggs": { - "prefab": { - "prefab_name": "ItemCannedPowderedEggs", - "prefab_hash": 1161510063, - "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.", - "name": "Canned Powdered Eggs" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemCannedRicePudding": { - "prefab": { - "prefab_name": "ItemCannedRicePudding", - "prefab_hash": -1185552595, - "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.", - "name": "Canned Rice Pudding" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemCerealBar": { - "prefab": { - "prefab_name": "ItemCerealBar", - "prefab_hash": 791746840, - "desc": "Sustains, without decay. If only all our relationships were so well balanced.", - "name": "Cereal Bar" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemCharcoal": { - "prefab": { - "prefab_name": "ItemCharcoal", - "prefab_hash": 252561409, - "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.", - "name": "Charcoal" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 200, - "reagents": { - "Carbon": 1.0 - }, - "slot_class": "Ore", - "sorting_class": "Ores" - } - }, - "ItemChemLightBlue": { - "prefab": { - "prefab_name": "ItemChemLightBlue", - "prefab_hash": -772542081, - "desc": "A safe and slightly rave-some source of blue light. Snap to activate.", - "name": "Chem Light (Blue)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemChemLightGreen": { - "prefab": { - "prefab_name": "ItemChemLightGreen", - "prefab_hash": -597479390, - "desc": "Enliven the dreariest, airless rock with this glowy green light. Snap to activate.", - "name": "Chem Light (Green)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemChemLightRed": { - "prefab": { - "prefab_name": "ItemChemLightRed", - "prefab_hash": -525810132, - "desc": "A red glowstick. Snap to activate. Then reach for the lasers.", - "name": "Chem Light (Red)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemChemLightWhite": { - "prefab": { - "prefab_name": "ItemChemLightWhite", - "prefab_hash": 1312166823, - "desc": "Snap the glowstick to activate a pale radiance that keeps the darkness at bay.", - "name": "Chem Light (White)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemChemLightYellow": { - "prefab": { - "prefab_name": "ItemChemLightYellow", - "prefab_hash": 1224819963, - "desc": "Dispel the darkness with this yellow glowstick.", - "name": "Chem Light (Yellow)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemChocolateBar": { - "prefab": { - "prefab_name": "ItemChocolateBar", - "prefab_hash": 234601764, - "desc": "", - "name": "Chocolate Bar" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemChocolateCake": { - "prefab": { - "prefab_name": "ItemChocolateCake", - "prefab_hash": -261575861, - "desc": "", - "name": "Chocolate Cake" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemChocolateCerealBar": { - "prefab": { - "prefab_name": "ItemChocolateCerealBar", - "prefab_hash": 860793245, - "desc": "", - "name": "Chocolate Cereal Bar" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemCoalOre": { - "prefab": { - "prefab_name": "ItemCoalOre", - "prefab_hash": 1724793494, - "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).", - "name": "Ore (Coal)" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 50, - "reagents": { - "Hydrocarbon": 1.0 - }, - "slot_class": "Ore", - "sorting_class": "Ores" - } - }, - "ItemCobaltOre": { - "prefab": { - "prefab_name": "ItemCobaltOre", - "prefab_hash": -983091249, - "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.", - "name": "Ore (Cobalt)" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 50, - "reagents": { - "Cobalt": 1.0 - }, - "slot_class": "Ore", - "sorting_class": "Ores" - } - }, - "ItemCocoaPowder": { - "prefab": { - "prefab_name": "ItemCocoaPowder", - "prefab_hash": 457286516, - "desc": "", - "name": "Cocoa Powder" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 20, - "reagents": { - "Cocoa": 1.0 - }, - "slot_class": "None", - "sorting_class": "Resources" - } - }, - "ItemCocoaTree": { - "prefab": { - "prefab_name": "ItemCocoaTree", - "prefab_hash": 680051921, - "desc": "", - "name": "Cocoa" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 20, - "reagents": { - "Cocoa": 1.0 - }, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemCoffeeMug": { - "prefab": { - "prefab_name": "ItemCoffeeMug", - "prefab_hash": 1800622698, - "desc": "", - "name": "Coffee Mug" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemConstantanIngot": { - "prefab": { - "prefab_name": "ItemConstantanIngot", - "prefab_hash": 1058547521, - "desc": "", - "name": "Ingot (Constantan)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Constantan": 1.0 - }, - "slot_class": "Ingot", - "sorting_class": "Resources" - } - }, - "ItemCookedCondensedMilk": { - "prefab": { - "prefab_name": "ItemCookedCondensedMilk", - "prefab_hash": 1715917521, - "desc": "A high-nutrient cooked food, which can be canned.", - "name": "Condensed Milk" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 10, - "reagents": { - "Milk": 100.0 - }, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemCookedCorn": { - "prefab": { - "prefab_name": "ItemCookedCorn", - "prefab_hash": 1344773148, - "desc": "A high-nutrient cooked food, which can be canned.", - "name": "Cooked Corn" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 10, - "reagents": { - "Corn": 1.0 - }, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemCookedMushroom": { - "prefab": { - "prefab_name": "ItemCookedMushroom", - "prefab_hash": -1076892658, - "desc": "A high-nutrient cooked food, which can be canned.", - "name": "Cooked Mushroom" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 10, - "reagents": { - "Mushroom": 1.0 - }, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemCookedPowderedEggs": { - "prefab": { - "prefab_name": "ItemCookedPowderedEggs", - "prefab_hash": -1712264413, - "desc": "A high-nutrient cooked food, which can be canned.", - "name": "Powdered Eggs" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 10, - "reagents": { - "Egg": 1.0 - }, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemCookedPumpkin": { - "prefab": { - "prefab_name": "ItemCookedPumpkin", - "prefab_hash": 1849281546, - "desc": "A high-nutrient cooked food, which can be canned.", - "name": "Cooked Pumpkin" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 10, - "reagents": { - "Pumpkin": 1.0 - }, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemCookedRice": { - "prefab": { - "prefab_name": "ItemCookedRice", - "prefab_hash": 2013539020, - "desc": "A high-nutrient cooked food, which can be canned.", - "name": "Cooked Rice" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 10, - "reagents": { - "Rice": 1.0 - }, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemCookedSoybean": { - "prefab": { - "prefab_name": "ItemCookedSoybean", - "prefab_hash": 1353449022, - "desc": "A high-nutrient cooked food, which can be canned.", - "name": "Cooked Soybean" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 10, - "reagents": { - "Soy": 5.0 - }, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemCookedTomato": { - "prefab": { - "prefab_name": "ItemCookedTomato", - "prefab_hash": -709086714, - "desc": "A high-nutrient cooked food, which can be canned.", - "name": "Cooked Tomato" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 10, - "reagents": { - "Tomato": 1.0 - }, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemCopperIngot": { - "prefab": { - "prefab_name": "ItemCopperIngot", - "prefab_hash": -404336834, - "desc": "Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items.", - "name": "Ingot (Copper)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Copper": 1.0 - }, - "slot_class": "Ingot", - "sorting_class": "Resources" - } - }, - "ItemCopperOre": { - "prefab": { - "prefab_name": "ItemCopperOre", - "prefab_hash": -707307845, - "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.", - "name": "Ore (Copper)" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 50, - "reagents": { - "Copper": 1.0 - }, - "slot_class": "Ore", - "sorting_class": "Ores" - } - }, - "ItemCorn": { - "prefab": { - "prefab_name": "ItemCorn", - "prefab_hash": 258339687, - "desc": "A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light.", - "name": "Corn" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 20, - "reagents": { - "Corn": 1.0 - }, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemCornSoup": { - "prefab": { - "prefab_name": "ItemCornSoup", - "prefab_hash": 545034114, - "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.", - "name": "Corn Soup" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemCreditCard": { - "prefab": { - "prefab_name": "ItemCreditCard", - "prefab_hash": -1756772618, - "desc": "", - "name": "Credit Card" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 100000, - "slot_class": "CreditCard", - "sorting_class": "Tools" - } - }, - "ItemCropHay": { - "prefab": { - "prefab_name": "ItemCropHay", - "prefab_hash": 215486157, - "desc": "", - "name": "Hay" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 100, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemCrowbar": { - "prefab": { - "prefab_name": "ItemCrowbar", - "prefab_hash": 856108234, - "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.", - "name": "Crowbar" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - } - }, - "ItemDataDisk": { - "prefab": { - "prefab_name": "ItemDataDisk", - "prefab_hash": 1005843700, - "desc": "", - "name": "Data Disk" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "DataDisk", - "sorting_class": "Default" - } - }, - "ItemDirtCanister": { - "prefab": { - "prefab_name": "ItemDirtCanister", - "prefab_hash": 902565329, - "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.", - "name": "Dirt Canister" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Ore", - "sorting_class": "Default" - } - }, - "ItemDirtyOre": { - "prefab": { - "prefab_name": "ItemDirtyOre", - "prefab_hash": -1234745580, - "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. ", - "name": "Dirty Ore" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "None", - "sorting_class": "Ores" - } - }, - "ItemDisposableBatteryCharger": { - "prefab": { - "prefab_name": "ItemDisposableBatteryCharger", - "prefab_hash": -2124435700, - "desc": "Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery.", - "name": "Disposable Battery Charger" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemDrill": { - "prefab": { - "prefab_name": "ItemDrill", - "prefab_hash": 2009673399, - "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.", - "name": "Hand Drill" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Activate": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemDuctTape": { - "prefab": { - "prefab_name": "ItemDuctTape", - "prefab_hash": -1943134693, - "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.", - "name": "Duct Tape" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - } - }, - "ItemDynamicAirCon": { - "prefab": { - "prefab_name": "ItemDynamicAirCon", - "prefab_hash": 1072914031, - "desc": "", - "name": "Kit (Portable Air Conditioner)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemDynamicScrubber": { - "prefab": { - "prefab_name": "ItemDynamicScrubber", - "prefab_hash": -971920158, - "desc": "", - "name": "Kit (Portable Scrubber)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemEggCarton": { - "prefab": { - "prefab_name": "ItemEggCarton", - "prefab_hash": -524289310, - "desc": "Within, eggs reside in mysterious, marmoreal silence.", - "name": "Egg Carton" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Storage" - }, - "slots": [ - { - "name": "", - "typ": "Egg" - }, - { - "name": "", - "typ": "Egg" - }, - { - "name": "", - "typ": "Egg" - }, - { - "name": "", - "typ": "Egg" - }, - { - "name": "", - "typ": "Egg" - }, - { - "name": "", - "typ": "Egg" - } - ] - }, - "ItemElectronicParts": { - "prefab": { - "prefab_name": "ItemElectronicParts", - "prefab_hash": 731250882, - "desc": "", - "name": "Electronic Parts" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 20, - "slot_class": "None", - "sorting_class": "Resources" - } - }, - "ItemElectrumIngot": { - "prefab": { - "prefab_name": "ItemElectrumIngot", - "prefab_hash": 502280180, - "desc": "", - "name": "Ingot (Electrum)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Electrum": 1.0 - }, - "slot_class": "Ingot", - "sorting_class": "Resources" - } - }, - "ItemEmergencyAngleGrinder": { - "prefab": { - "prefab_name": "ItemEmergencyAngleGrinder", - "prefab_hash": -351438780, - "desc": "", - "name": "Emergency Angle Grinder" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Activate": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemEmergencyArcWelder": { - "prefab": { - "prefab_name": "ItemEmergencyArcWelder", - "prefab_hash": -1056029600, - "desc": "", - "name": "Emergency Arc Welder" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Activate": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemEmergencyCrowbar": { - "prefab": { - "prefab_name": "ItemEmergencyCrowbar", - "prefab_hash": 976699731, - "desc": "", - "name": "Emergency Crowbar" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - } - }, - "ItemEmergencyDrill": { - "prefab": { - "prefab_name": "ItemEmergencyDrill", - "prefab_hash": -2052458905, - "desc": "", - "name": "Emergency Drill" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Activate": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemEmergencyEvaSuit": { - "prefab": { - "prefab_name": "ItemEmergencyEvaSuit", - "prefab_hash": 1791306431, - "desc": "", - "name": "Emergency Eva Suit" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Suit", - "sorting_class": "Clothing" - }, - "thermal_info": { - "convection_factor": 0.2, - "radiation_factor": 0.2 - }, - "internal_atmo_info": { - "volume": 10.0 - }, - "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" - } - ], - "suit_info": { - "hygine_reduction_multiplier": 1.0, - "waste_max_pressure": 4053.0 - } - }, - "ItemEmergencyPickaxe": { - "prefab": { - "prefab_name": "ItemEmergencyPickaxe", - "prefab_hash": -1061510408, - "desc": "", - "name": "Emergency Pickaxe" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - } - }, - "ItemEmergencyScrewdriver": { - "prefab": { - "prefab_name": "ItemEmergencyScrewdriver", - "prefab_hash": 266099983, - "desc": "", - "name": "Emergency Screwdriver" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - } - }, - "ItemEmergencySpaceHelmet": { - "prefab": { - "prefab_name": "ItemEmergencySpaceHelmet", - "prefab_hash": 205916793, - "desc": "", - "name": "Emergency Space Helmet" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Helmet", - "sorting_class": "Clothing" - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "internal_atmo_info": { - "volume": 3.0 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [] - }, - "ItemEmergencyToolBelt": { - "prefab": { - "prefab_name": "ItemEmergencyToolBelt", - "prefab_hash": 1661941301, - "desc": "", - "name": "Emergency Tool Belt" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Belt", - "sorting_class": "Clothing" - }, - "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" - } - ] - }, - "ItemEmergencyWireCutters": { - "prefab": { - "prefab_name": "ItemEmergencyWireCutters", - "prefab_hash": 2102803952, - "desc": "", - "name": "Emergency Wire Cutters" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - } - }, - "ItemEmergencyWrench": { - "prefab": { - "prefab_name": "ItemEmergencyWrench", - "prefab_hash": 162553030, - "desc": "", - "name": "Emergency Wrench" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - } - }, - "ItemEmptyCan": { - "prefab": { - "prefab_name": "ItemEmptyCan", - "prefab_hash": 1013818348, - "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.", - "name": "Empty Can" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 10, - "reagents": { - "Steel": 1.0 - }, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemEvaSuit": { - "prefab": { - "prefab_name": "ItemEvaSuit", - "prefab_hash": 1677018918, - "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.", - "name": "Eva Suit" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Suit", - "sorting_class": "Clothing" - }, - "thermal_info": { - "convection_factor": 0.2, - "radiation_factor": 0.2 - }, - "internal_atmo_info": { - "volume": 10.0 - }, - "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" - } - ], - "suit_info": { - "hygine_reduction_multiplier": 1.0, - "waste_max_pressure": 4053.0 - } - }, - "ItemExplosive": { - "prefab": { - "prefab_name": "ItemExplosive", - "prefab_hash": 235361649, - "desc": "", - "name": "Remote Explosive" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemFern": { - "prefab": { - "prefab_name": "ItemFern", - "prefab_hash": 892110467, - "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.", - "name": "Fern" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 100, - "reagents": { - "Fenoxitone": 1.0 - }, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemFertilizedEgg": { - "prefab": { - "prefab_name": "ItemFertilizedEgg", - "prefab_hash": -383972371, - "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.", - "name": "Egg" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 1, - "reagents": { - "Egg": 1.0 - }, - "slot_class": "Egg", - "sorting_class": "Resources" - } - }, - "ItemFilterFern": { - "prefab": { - "prefab_name": "ItemFilterFern", - "prefab_hash": 266654416, - "desc": "A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant.", - "name": "Darga Fern" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemFlagSmall": { - "prefab": { - "prefab_name": "ItemFlagSmall", - "prefab_hash": 2011191088, - "desc": "", - "name": "Kit (Small Flag)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemFlashingLight": { - "prefab": { - "prefab_name": "ItemFlashingLight", - "prefab_hash": -2107840748, - "desc": "", - "name": "Kit (Flashing Light)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemFlashlight": { - "prefab": { - "prefab_name": "ItemFlashlight", - "prefab_hash": -838472102, - "desc": "A flashlight with a narrow and wide beam options.", - "name": "Flashlight" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Low Power", - "1": "High Power" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemFlour": { - "prefab": { - "prefab_name": "ItemFlour", - "prefab_hash": -665995854, - "desc": "Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven).", - "name": "Flour" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Flour": 50.0 - }, - "slot_class": "None", - "sorting_class": "Resources" - } - }, - "ItemFlowerBlue": { - "prefab": { - "prefab_name": "ItemFlowerBlue", - "prefab_hash": -1573623434, - "desc": "", - "name": "Flower (Blue)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 100, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemFlowerGreen": { - "prefab": { - "prefab_name": "ItemFlowerGreen", - "prefab_hash": -1513337058, - "desc": "", - "name": "Flower (Green)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 100, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemFlowerOrange": { - "prefab": { - "prefab_name": "ItemFlowerOrange", - "prefab_hash": -1411986716, - "desc": "", - "name": "Flower (Orange)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 100, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemFlowerRed": { - "prefab": { - "prefab_name": "ItemFlowerRed", - "prefab_hash": -81376085, - "desc": "", - "name": "Flower (Red)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 100, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemFlowerYellow": { - "prefab": { - "prefab_name": "ItemFlowerYellow", - "prefab_hash": 1712822019, - "desc": "", - "name": "Flower (Yellow)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 100, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemFrenchFries": { - "prefab": { - "prefab_name": "ItemFrenchFries", - "prefab_hash": -57608687, - "desc": "Because space would suck without 'em.", - "name": "Canned French Fries" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemFries": { - "prefab": { - "prefab_name": "ItemFries", - "prefab_hash": 1371786091, - "desc": "", - "name": "French Fries" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemGasCanisterCarbonDioxide": { - "prefab": { - "prefab_name": "ItemGasCanisterCarbonDioxide", - "prefab_hash": -767685874, - "desc": "", - "name": "Canister (CO2)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "GasCanister", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.05 - }, - "internal_atmo_info": { - "volume": 64.0 - } - }, - "ItemGasCanisterEmpty": { - "prefab": { - "prefab_name": "ItemGasCanisterEmpty", - "prefab_hash": 42280099, - "desc": "", - "name": "Canister" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "GasCanister", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.05 - }, - "internal_atmo_info": { - "volume": 64.0 - } - }, - "ItemGasCanisterFuel": { - "prefab": { - "prefab_name": "ItemGasCanisterFuel", - "prefab_hash": -1014695176, - "desc": "", - "name": "Canister (Fuel)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "GasCanister", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.05 - }, - "internal_atmo_info": { - "volume": 64.0 - } - }, - "ItemGasCanisterNitrogen": { - "prefab": { - "prefab_name": "ItemGasCanisterNitrogen", - "prefab_hash": 2145068424, - "desc": "", - "name": "Canister (Nitrogen)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "GasCanister", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.05 - }, - "internal_atmo_info": { - "volume": 64.0 - } - }, - "ItemGasCanisterNitrousOxide": { - "prefab": { - "prefab_name": "ItemGasCanisterNitrousOxide", - "prefab_hash": -1712153401, - "desc": "", - "name": "Gas Canister (Sleeping)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "GasCanister", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.05 - }, - "internal_atmo_info": { - "volume": 64.0 - } - }, - "ItemGasCanisterOxygen": { - "prefab": { - "prefab_name": "ItemGasCanisterOxygen", - "prefab_hash": -1152261938, - "desc": "", - "name": "Canister (Oxygen)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "GasCanister", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.05 - }, - "internal_atmo_info": { - "volume": 64.0 - } - }, - "ItemGasCanisterPollutants": { - "prefab": { - "prefab_name": "ItemGasCanisterPollutants", - "prefab_hash": -1552586384, - "desc": "", - "name": "Canister (Pollutants)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "GasCanister", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.05 - }, - "internal_atmo_info": { - "volume": 64.0 - } - }, - "ItemGasCanisterSmart": { - "prefab": { - "prefab_name": "ItemGasCanisterSmart", - "prefab_hash": -668314371, - "desc": "0.Mode0\n1.Mode1", - "name": "Gas Canister (Smart)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "GasCanister", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "internal_atmo_info": { - "volume": 64.0 - } - }, - "ItemGasCanisterVolatiles": { - "prefab": { - "prefab_name": "ItemGasCanisterVolatiles", - "prefab_hash": -472094806, - "desc": "", - "name": "Canister (Volatiles)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "GasCanister", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.05 - }, - "internal_atmo_info": { - "volume": 64.0 - } - }, - "ItemGasCanisterWater": { - "prefab": { - "prefab_name": "ItemGasCanisterWater", - "prefab_hash": -1854861891, - "desc": "", - "name": "Liquid Canister (Water)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "LiquidCanister", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.05 - }, - "internal_atmo_info": { - "volume": 12.1 - } - }, - "ItemGasFilterCarbonDioxide": { - "prefab": { - "prefab_name": "ItemGasFilterCarbonDioxide", - "prefab_hash": 1635000764, - "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.", - "name": "Filter (Carbon Dioxide)" - }, - "item": { - "consumable": false, - "filter_type": "CarbonDioxide", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterCarbonDioxideInfinite": { - "prefab": { - "prefab_name": "ItemGasFilterCarbonDioxideInfinite", - "prefab_hash": -185568964, - "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.", - "name": "Catalytic Filter (Carbon Dioxide)" - }, - "item": { - "consumable": false, - "filter_type": "CarbonDioxide", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterCarbonDioxideL": { - "prefab": { - "prefab_name": "ItemGasFilterCarbonDioxideL", - "prefab_hash": 1876847024, - "desc": "", - "name": "Heavy Filter (Carbon Dioxide)" - }, - "item": { - "consumable": false, - "filter_type": "CarbonDioxide", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterCarbonDioxideM": { - "prefab": { - "prefab_name": "ItemGasFilterCarbonDioxideM", - "prefab_hash": 416897318, - "desc": "", - "name": "Medium Filter (Carbon Dioxide)" - }, - "item": { - "consumable": false, - "filter_type": "CarbonDioxide", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterNitrogen": { - "prefab": { - "prefab_name": "ItemGasFilterNitrogen", - "prefab_hash": 632853248, - "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.", - "name": "Filter (Nitrogen)" - }, - "item": { - "consumable": false, - "filter_type": "Nitrogen", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterNitrogenInfinite": { - "prefab": { - "prefab_name": "ItemGasFilterNitrogenInfinite", - "prefab_hash": 152751131, - "desc": "A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", - "name": "Catalytic Filter (Nitrogen)" - }, - "item": { - "consumable": false, - "filter_type": "Nitrogen", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterNitrogenL": { - "prefab": { - "prefab_name": "ItemGasFilterNitrogenL", - "prefab_hash": -1387439451, - "desc": "", - "name": "Heavy Filter (Nitrogen)" - }, - "item": { - "consumable": false, - "filter_type": "Nitrogen", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterNitrogenM": { - "prefab": { - "prefab_name": "ItemGasFilterNitrogenM", - "prefab_hash": -632657357, - "desc": "", - "name": "Medium Filter (Nitrogen)" - }, - "item": { - "consumable": false, - "filter_type": "Nitrogen", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterNitrousOxide": { - "prefab": { - "prefab_name": "ItemGasFilterNitrousOxide", - "prefab_hash": -1247674305, - "desc": "", - "name": "Filter (Nitrous Oxide)" - }, - "item": { - "consumable": false, - "filter_type": "NitrousOxide", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterNitrousOxideInfinite": { - "prefab": { - "prefab_name": "ItemGasFilterNitrousOxideInfinite", - "prefab_hash": -123934842, - "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.", - "name": "Catalytic Filter (Nitrous Oxide)" - }, - "item": { - "consumable": false, - "filter_type": "NitrousOxide", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterNitrousOxideL": { - "prefab": { - "prefab_name": "ItemGasFilterNitrousOxideL", - "prefab_hash": 465267979, - "desc": "", - "name": "Heavy Filter (Nitrous Oxide)" - }, - "item": { - "consumable": false, - "filter_type": "NitrousOxide", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterNitrousOxideM": { - "prefab": { - "prefab_name": "ItemGasFilterNitrousOxideM", - "prefab_hash": 1824284061, - "desc": "", - "name": "Medium Filter (Nitrous Oxide)" - }, - "item": { - "consumable": false, - "filter_type": "NitrousOxide", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterOxygen": { - "prefab": { - "prefab_name": "ItemGasFilterOxygen", - "prefab_hash": -721824748, - "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).", - "name": "Filter (Oxygen)" - }, - "item": { - "consumable": false, - "filter_type": "Oxygen", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterOxygenInfinite": { - "prefab": { - "prefab_name": "ItemGasFilterOxygenInfinite", - "prefab_hash": -1055451111, - "desc": "A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", - "name": "Catalytic Filter (Oxygen)" - }, - "item": { - "consumable": false, - "filter_type": "Oxygen", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterOxygenL": { - "prefab": { - "prefab_name": "ItemGasFilterOxygenL", - "prefab_hash": -1217998945, - "desc": "", - "name": "Heavy Filter (Oxygen)" - }, - "item": { - "consumable": false, - "filter_type": "Oxygen", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterOxygenM": { - "prefab": { - "prefab_name": "ItemGasFilterOxygenM", - "prefab_hash": -1067319543, - "desc": "", - "name": "Medium Filter (Oxygen)" - }, - "item": { - "consumable": false, - "filter_type": "Oxygen", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterPollutants": { - "prefab": { - "prefab_name": "ItemGasFilterPollutants", - "prefab_hash": 1915566057, - "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.", - "name": "Filter (Pollutant)" - }, - "item": { - "consumable": false, - "filter_type": "Pollutant", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterPollutantsInfinite": { - "prefab": { - "prefab_name": "ItemGasFilterPollutantsInfinite", - "prefab_hash": -503738105, - "desc": "A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", - "name": "Catalytic Filter (Pollutants)" - }, - "item": { - "consumable": false, - "filter_type": "Pollutant", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterPollutantsL": { - "prefab": { - "prefab_name": "ItemGasFilterPollutantsL", - "prefab_hash": 1959564765, - "desc": "", - "name": "Heavy Filter (Pollutants)" - }, - "item": { - "consumable": false, - "filter_type": "Pollutant", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterPollutantsM": { - "prefab": { - "prefab_name": "ItemGasFilterPollutantsM", - "prefab_hash": 63677771, - "desc": "", - "name": "Medium Filter (Pollutants)" - }, - "item": { - "consumable": false, - "filter_type": "Pollutant", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterVolatiles": { - "prefab": { - "prefab_name": "ItemGasFilterVolatiles", - "prefab_hash": 15011598, - "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.", - "name": "Filter (Volatiles)" - }, - "item": { - "consumable": false, - "filter_type": "Volatiles", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterVolatilesInfinite": { - "prefab": { - "prefab_name": "ItemGasFilterVolatilesInfinite", - "prefab_hash": -1916176068, - "desc": "A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", - "name": "Catalytic Filter (Volatiles)" - }, - "item": { - "consumable": false, - "filter_type": "Volatiles", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterVolatilesL": { - "prefab": { - "prefab_name": "ItemGasFilterVolatilesL", - "prefab_hash": 1255156286, - "desc": "", - "name": "Heavy Filter (Volatiles)" - }, - "item": { - "consumable": false, - "filter_type": "Volatiles", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterVolatilesM": { - "prefab": { - "prefab_name": "ItemGasFilterVolatilesM", - "prefab_hash": 1037507240, - "desc": "", - "name": "Medium Filter (Volatiles)" - }, - "item": { - "consumable": false, - "filter_type": "Volatiles", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterWater": { - "prefab": { - "prefab_name": "ItemGasFilterWater", - "prefab_hash": -1993197973, - "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)", - "name": "Filter (Water)" - }, - "item": { - "consumable": false, - "filter_type": "Steam", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterWaterInfinite": { - "prefab": { - "prefab_name": "ItemGasFilterWaterInfinite", - "prefab_hash": -1678456554, - "desc": "A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", - "name": "Catalytic Filter (Water)" - }, - "item": { - "consumable": false, - "filter_type": "Steam", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterWaterL": { - "prefab": { - "prefab_name": "ItemGasFilterWaterL", - "prefab_hash": 2004969680, - "desc": "", - "name": "Heavy Filter (Water)" - }, - "item": { - "consumable": false, - "filter_type": "Steam", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasFilterWaterM": { - "prefab": { - "prefab_name": "ItemGasFilterWaterM", - "prefab_hash": 8804422, - "desc": "", - "name": "Medium Filter (Water)" - }, - "item": { - "consumable": false, - "filter_type": "Steam", - "ingredient": false, - "max_quantity": 100, - "slot_class": "GasFilter", - "sorting_class": "Resources" - } - }, - "ItemGasSensor": { - "prefab": { - "prefab_name": "ItemGasSensor", - "prefab_hash": 1717593480, - "desc": "", - "name": "Kit (Gas Sensor)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemGasTankStorage": { - "prefab": { - "prefab_name": "ItemGasTankStorage", - "prefab_hash": -2113012215, - "desc": "This kit produces a Kit (Canister Storage) for refilling a Canister.", - "name": "Kit (Canister Storage)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemGlassSheets": { - "prefab": { - "prefab_name": "ItemGlassSheets", - "prefab_hash": 1588896491, - "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.", - "name": "Glass Sheets" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "None", - "sorting_class": "Resources" - } - }, - "ItemGlasses": { - "prefab": { - "prefab_name": "ItemGlasses", - "prefab_hash": -1068925231, - "desc": "", - "name": "Glasses" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Glasses", - "sorting_class": "Clothing" - } - }, - "ItemGoldIngot": { - "prefab": { - "prefab_name": "ItemGoldIngot", - "prefab_hash": 226410516, - "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. ", - "name": "Ingot (Gold)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Gold": 1.0 - }, - "slot_class": "Ingot", - "sorting_class": "Resources" - } - }, - "ItemGoldOre": { - "prefab": { - "prefab_name": "ItemGoldOre", - "prefab_hash": -1348105509, - "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.", - "name": "Ore (Gold)" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 50, - "reagents": { - "Gold": 1.0 - }, - "slot_class": "Ore", - "sorting_class": "Ores" - } - }, - "ItemGrenade": { - "prefab": { - "prefab_name": "ItemGrenade", - "prefab_hash": 1544275894, - "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.", - "name": "Hand Grenade" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemHEMDroidRepairKit": { - "prefab": { - "prefab_name": "ItemHEMDroidRepairKit", - "prefab_hash": 470636008, - "desc": "Repairs damaged HEM-Droids to full health.", - "name": "HEMDroid Repair Kit" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemHardBackpack": { - "prefab": { - "prefab_name": "ItemHardBackpack", - "prefab_hash": 374891127, - "desc": "This backpack can be useful when you are working inside and don't need to fly around.", - "name": "Hardsuit Backpack" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Back", - "sorting_class": "Clothing" - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": 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" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ] - }, - "ItemHardJetpack": { - "prefab": { - "prefab_name": "ItemHardJetpack", - "prefab_hash": -412551656, - "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.", - "name": "Hardsuit Jetpack" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Back", - "sorting_class": "Clothing" - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "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" - } - ] - }, - "ItemHardMiningBackPack": { - "prefab": { - "prefab_name": "ItemHardMiningBackPack", - "prefab_hash": 900366130, - "desc": "", - "name": "Hard Mining Backpack" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Back", - "sorting_class": "Clothing" - }, - "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" - } - ] - }, - "ItemHardSuit": { - "prefab": { - "prefab_name": "ItemHardSuit", - "prefab_hash": -1758310454, - "desc": "Connects to Logic Transmitter", - "name": "Hardsuit" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Suit", - "sorting_class": "Clothing" - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.05 - }, - "internal_atmo_info": { - "volume": 10.0 - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "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" - }, - "transmission_receiver": false, - "wireless_logic": true, - "circuit_holder": true - }, - "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" - } - ], - "suit_info": { - "hygine_reduction_multiplier": 1.5, - "waste_max_pressure": 4053.0 - }, - "memory": { - "instructions": null, - "memory_access": "ReadWrite", - "memory_size": 0 - } - }, - "ItemHardsuitHelmet": { - "prefab": { - "prefab_name": "ItemHardsuitHelmet", - "prefab_hash": -84573099, - "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.", - "name": "Hardsuit Helmet" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Helmet", - "sorting_class": "Clothing" - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "internal_atmo_info": { - "volume": 3.0 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [] - }, - "ItemHastelloyIngot": { - "prefab": { - "prefab_name": "ItemHastelloyIngot", - "prefab_hash": 1579842814, - "desc": "", - "name": "Ingot (Hastelloy)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Hastelloy": 1.0 - }, - "slot_class": "Ingot", - "sorting_class": "Resources" - } - }, - "ItemHat": { - "prefab": { - "prefab_name": "ItemHat", - "prefab_hash": 299189339, - "desc": "As the name suggests, this is a hat.", - "name": "Hat" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Helmet", - "sorting_class": "Clothing" - } - }, - "ItemHighVolumeGasCanisterEmpty": { - "prefab": { - "prefab_name": "ItemHighVolumeGasCanisterEmpty", - "prefab_hash": 998653377, - "desc": "", - "name": "High Volume Gas Canister" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "GasCanister", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.05 - }, - "internal_atmo_info": { - "volume": 83.0 - } - }, - "ItemHorticultureBelt": { - "prefab": { - "prefab_name": "ItemHorticultureBelt", - "prefab_hash": -1117581553, - "desc": "", - "name": "Horticulture Belt" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Belt", - "sorting_class": "Clothing" - }, - "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" - } - ] - }, - "ItemHydroponicTray": { - "prefab": { - "prefab_name": "ItemHydroponicTray", - "prefab_hash": -1193543727, - "desc": "This kits creates a Hydroponics Tray for growing various plants.", - "name": "Kit (Hydroponic Tray)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemIce": { - "prefab": { - "prefab_name": "ItemIce", - "prefab_hash": 1217489948, - "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.", - "name": "Ice (Water)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemIgniter": { - "prefab": { - "prefab_name": "ItemIgniter", - "prefab_hash": 890106742, - "desc": "This kit creates an Kit (Igniter) unit.", - "name": "Kit (Igniter)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemInconelIngot": { - "prefab": { - "prefab_name": "ItemInconelIngot", - "prefab_hash": -787796599, - "desc": "", - "name": "Ingot (Inconel)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Inconel": 1.0 - }, - "slot_class": "Ingot", - "sorting_class": "Resources" - } - }, - "ItemInsulation": { - "prefab": { - "prefab_name": "ItemInsulation", - "prefab_hash": 897176943, - "desc": "Mysterious in the extreme, the function of this item is lost to the ages.", - "name": "Insulation" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Resources" - } - }, - "ItemIntegratedCircuit10": { - "prefab": { - "prefab_name": "ItemIntegratedCircuit10", - "prefab_hash": -744098481, - "desc": "", - "name": "Integrated Circuit (IC10)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "ProgrammableChip", - "sorting_class": "Default" - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "LineNumber": "Read", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "memory": { - "instructions": null, - "memory_access": "ReadWrite", - "memory_size": 512 - } - }, - "ItemInvarIngot": { - "prefab": { - "prefab_name": "ItemInvarIngot", - "prefab_hash": -297990285, - "desc": "", - "name": "Ingot (Invar)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Invar": 1.0 - }, - "slot_class": "Ingot", - "sorting_class": "Resources" - } - }, - "ItemIronFrames": { - "prefab": { - "prefab_name": "ItemIronFrames", - "prefab_hash": 1225836666, - "desc": "", - "name": "Iron Frames" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 30, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemIronIngot": { - "prefab": { - "prefab_name": "ItemIronIngot", - "prefab_hash": -1301215609, - "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.", - "name": "Ingot (Iron)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Iron": 1.0 - }, - "slot_class": "Ingot", - "sorting_class": "Resources" - } - }, - "ItemIronOre": { - "prefab": { - "prefab_name": "ItemIronOre", - "prefab_hash": 1758427767, - "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.", - "name": "Ore (Iron)" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 50, - "reagents": { - "Iron": 1.0 - }, - "slot_class": "Ore", - "sorting_class": "Ores" - } - }, - "ItemIronSheets": { - "prefab": { - "prefab_name": "ItemIronSheets", - "prefab_hash": -487378546, - "desc": "", - "name": "Iron Sheets" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "None", - "sorting_class": "Resources" - } - }, - "ItemJetpackBasic": { - "prefab": { - "prefab_name": "ItemJetpackBasic", - "prefab_hash": 1969189000, - "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.", - "name": "Jetpack Basic" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Back", - "sorting_class": "Clothing" - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "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" - } - ] - }, - "ItemKitAIMeE": { - "prefab": { - "prefab_name": "ItemKitAIMeE", - "prefab_hash": 496830914, - "desc": "", - "name": "Kit (AIMeE)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitAccessBridge": { - "prefab": { - "prefab_name": "ItemKitAccessBridge", - "prefab_hash": 513258369, - "desc": "", - "name": "Kit (Access Bridge)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitAdvancedComposter": { - "prefab": { - "prefab_name": "ItemKitAdvancedComposter", - "prefab_hash": -1431998347, - "desc": "", - "name": "Kit (Advanced Composter)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitAdvancedFurnace": { - "prefab": { - "prefab_name": "ItemKitAdvancedFurnace", - "prefab_hash": -616758353, - "desc": "", - "name": "Kit (Advanced Furnace)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitAdvancedPackagingMachine": { - "prefab": { - "prefab_name": "ItemKitAdvancedPackagingMachine", - "prefab_hash": -598545233, - "desc": "", - "name": "Kit (Advanced Packaging Machine)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitAirlock": { - "prefab": { - "prefab_name": "ItemKitAirlock", - "prefab_hash": 964043875, - "desc": "", - "name": "Kit (Airlock)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitAirlockGate": { - "prefab": { - "prefab_name": "ItemKitAirlockGate", - "prefab_hash": 682546947, - "desc": "", - "name": "Kit (Hangar Door)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitArcFurnace": { - "prefab": { - "prefab_name": "ItemKitArcFurnace", - "prefab_hash": -98995857, - "desc": "", - "name": "Kit (Arc Furnace)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitAtmospherics": { - "prefab": { - "prefab_name": "ItemKitAtmospherics", - "prefab_hash": 1222286371, - "desc": "", - "name": "Kit (Atmospherics)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitAutoMinerSmall": { - "prefab": { - "prefab_name": "ItemKitAutoMinerSmall", - "prefab_hash": 1668815415, - "desc": "", - "name": "Kit (Autominer Small)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitAutolathe": { - "prefab": { - "prefab_name": "ItemKitAutolathe", - "prefab_hash": -1753893214, - "desc": "", - "name": "Kit (Autolathe)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitAutomatedOven": { - "prefab": { - "prefab_name": "ItemKitAutomatedOven", - "prefab_hash": -1931958659, - "desc": "", - "name": "Kit (Automated Oven)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitBasket": { - "prefab": { - "prefab_name": "ItemKitBasket", - "prefab_hash": 148305004, - "desc": "", - "name": "Kit (Basket)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitBattery": { - "prefab": { - "prefab_name": "ItemKitBattery", - "prefab_hash": 1406656973, - "desc": "", - "name": "Kit (Battery)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitBatteryLarge": { - "prefab": { - "prefab_name": "ItemKitBatteryLarge", - "prefab_hash": -21225041, - "desc": "", - "name": "Kit (Battery Large)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitBeacon": { - "prefab": { - "prefab_name": "ItemKitBeacon", - "prefab_hash": 249073136, - "desc": "", - "name": "Kit (Beacon)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitBeds": { - "prefab": { - "prefab_name": "ItemKitBeds", - "prefab_hash": -1241256797, - "desc": "", - "name": "Kit (Beds)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitBlastDoor": { - "prefab": { - "prefab_name": "ItemKitBlastDoor", - "prefab_hash": -1755116240, - "desc": "", - "name": "Kit (Blast Door)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitCentrifuge": { - "prefab": { - "prefab_name": "ItemKitCentrifuge", - "prefab_hash": 578182956, - "desc": "", - "name": "Kit (Centrifuge)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitChairs": { - "prefab": { - "prefab_name": "ItemKitChairs", - "prefab_hash": -1394008073, - "desc": "", - "name": "Kit (Chairs)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitChute": { - "prefab": { - "prefab_name": "ItemKitChute", - "prefab_hash": 1025254665, - "desc": "", - "name": "Kit (Basic Chutes)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitChuteUmbilical": { - "prefab": { - "prefab_name": "ItemKitChuteUmbilical", - "prefab_hash": -876560854, - "desc": "", - "name": "Kit (Chute Umbilical)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitCompositeCladding": { - "prefab": { - "prefab_name": "ItemKitCompositeCladding", - "prefab_hash": -1470820996, - "desc": "", - "name": "Kit (Cladding)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitCompositeFloorGrating": { - "prefab": { - "prefab_name": "ItemKitCompositeFloorGrating", - "prefab_hash": 1182412869, - "desc": "", - "name": "Kit (Floor Grating)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitComputer": { - "prefab": { - "prefab_name": "ItemKitComputer", - "prefab_hash": 1990225489, - "desc": "", - "name": "Kit (Computer)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitConsole": { - "prefab": { - "prefab_name": "ItemKitConsole", - "prefab_hash": -1241851179, - "desc": "", - "name": "Kit (Consoles)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitCrate": { - "prefab": { - "prefab_name": "ItemKitCrate", - "prefab_hash": 429365598, - "desc": "", - "name": "Kit (Crate)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitCrateMkII": { - "prefab": { - "prefab_name": "ItemKitCrateMkII", - "prefab_hash": -1585956426, - "desc": "", - "name": "Kit (Crate Mk II)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitCrateMount": { - "prefab": { - "prefab_name": "ItemKitCrateMount", - "prefab_hash": -551612946, - "desc": "", - "name": "Kit (Container Mount)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitCryoTube": { - "prefab": { - "prefab_name": "ItemKitCryoTube", - "prefab_hash": -545234195, - "desc": "", - "name": "Kit (Cryo Tube)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitDeepMiner": { - "prefab": { - "prefab_name": "ItemKitDeepMiner", - "prefab_hash": -1935075707, - "desc": "", - "name": "Kit (Deep Miner)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitDockingPort": { - "prefab": { - "prefab_name": "ItemKitDockingPort", - "prefab_hash": 77421200, - "desc": "", - "name": "Kit (Docking Port)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitDoor": { - "prefab": { - "prefab_name": "ItemKitDoor", - "prefab_hash": 168615924, - "desc": "", - "name": "Kit (Door)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitDrinkingFountain": { - "prefab": { - "prefab_name": "ItemKitDrinkingFountain", - "prefab_hash": -1743663875, - "desc": "", - "name": "Kit (Drinking Fountain)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitDynamicCanister": { - "prefab": { - "prefab_name": "ItemKitDynamicCanister", - "prefab_hash": -1061945368, - "desc": "", - "name": "Kit (Portable Gas Tank)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitDynamicGasTankAdvanced": { - "prefab": { - "prefab_name": "ItemKitDynamicGasTankAdvanced", - "prefab_hash": 1533501495, - "desc": "", - "name": "Kit (Portable Gas Tank Mk II)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemKitDynamicGenerator": { - "prefab": { - "prefab_name": "ItemKitDynamicGenerator", - "prefab_hash": -732720413, - "desc": "", - "name": "Kit (Portable Generator)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitDynamicHydroponics": { - "prefab": { - "prefab_name": "ItemKitDynamicHydroponics", - "prefab_hash": -1861154222, - "desc": "", - "name": "Kit (Portable Hydroponics)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitDynamicLiquidCanister": { - "prefab": { - "prefab_name": "ItemKitDynamicLiquidCanister", - "prefab_hash": 375541286, - "desc": "", - "name": "Kit (Portable Liquid Tank)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitDynamicMKIILiquidCanister": { - "prefab": { - "prefab_name": "ItemKitDynamicMKIILiquidCanister", - "prefab_hash": -638019974, - "desc": "", - "name": "Kit (Portable Liquid Tank Mk II)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitElectricUmbilical": { - "prefab": { - "prefab_name": "ItemKitElectricUmbilical", - "prefab_hash": 1603046970, - "desc": "", - "name": "Kit (Power Umbilical)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitElectronicsPrinter": { - "prefab": { - "prefab_name": "ItemKitElectronicsPrinter", - "prefab_hash": -1181922382, - "desc": "", - "name": "Kit (Electronics Printer)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitElevator": { - "prefab": { - "prefab_name": "ItemKitElevator", - "prefab_hash": -945806652, - "desc": "", - "name": "Kit (Elevator)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitEngineLarge": { - "prefab": { - "prefab_name": "ItemKitEngineLarge", - "prefab_hash": 755302726, - "desc": "", - "name": "Kit (Engine Large)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitEngineMedium": { - "prefab": { - "prefab_name": "ItemKitEngineMedium", - "prefab_hash": 1969312177, - "desc": "", - "name": "Kit (Engine Medium)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitEngineSmall": { - "prefab": { - "prefab_name": "ItemKitEngineSmall", - "prefab_hash": 19645163, - "desc": "", - "name": "Kit (Engine Small)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitEvaporationChamber": { - "prefab": { - "prefab_name": "ItemKitEvaporationChamber", - "prefab_hash": 1587787610, - "desc": "", - "name": "Kit (Phase Change Device)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitFlagODA": { - "prefab": { - "prefab_name": "ItemKitFlagODA", - "prefab_hash": 1701764190, - "desc": "", - "name": "Kit (ODA Flag)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemKitFridgeBig": { - "prefab": { - "prefab_name": "ItemKitFridgeBig", - "prefab_hash": -1168199498, - "desc": "", - "name": "Kit (Fridge Large)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitFridgeSmall": { - "prefab": { - "prefab_name": "ItemKitFridgeSmall", - "prefab_hash": 1661226524, - "desc": "", - "name": "Kit (Fridge Small)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitFurnace": { - "prefab": { - "prefab_name": "ItemKitFurnace", - "prefab_hash": -806743925, - "desc": "", - "name": "Kit (Furnace)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitFurniture": { - "prefab": { - "prefab_name": "ItemKitFurniture", - "prefab_hash": 1162905029, - "desc": "", - "name": "Kit (Furniture)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitFuselage": { - "prefab": { - "prefab_name": "ItemKitFuselage", - "prefab_hash": -366262681, - "desc": "", - "name": "Kit (Fuselage)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitGasGenerator": { - "prefab": { - "prefab_name": "ItemKitGasGenerator", - "prefab_hash": 377745425, - "desc": "", - "name": "Kit (Gas Fuel Generator)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitGasUmbilical": { - "prefab": { - "prefab_name": "ItemKitGasUmbilical", - "prefab_hash": -1867280568, - "desc": "", - "name": "Kit (Gas Umbilical)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitGovernedGasRocketEngine": { - "prefab": { - "prefab_name": "ItemKitGovernedGasRocketEngine", - "prefab_hash": 206848766, - "desc": "", - "name": "Kit (Pumped Gas Rocket Engine)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitGroundTelescope": { - "prefab": { - "prefab_name": "ItemKitGroundTelescope", - "prefab_hash": -2140672772, - "desc": "", - "name": "Kit (Telescope)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitGrowLight": { - "prefab": { - "prefab_name": "ItemKitGrowLight", - "prefab_hash": 341030083, - "desc": "", - "name": "Kit (Grow Light)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitHarvie": { - "prefab": { - "prefab_name": "ItemKitHarvie", - "prefab_hash": -1022693454, - "desc": "", - "name": "Kit (Harvie)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitHeatExchanger": { - "prefab": { - "prefab_name": "ItemKitHeatExchanger", - "prefab_hash": -1710540039, - "desc": "", - "name": "Kit Heat Exchanger" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitHorizontalAutoMiner": { - "prefab": { - "prefab_name": "ItemKitHorizontalAutoMiner", - "prefab_hash": 844391171, - "desc": "", - "name": "Kit (OGRE)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitHydraulicPipeBender": { - "prefab": { - "prefab_name": "ItemKitHydraulicPipeBender", - "prefab_hash": -2098556089, - "desc": "", - "name": "Kit (Hydraulic Pipe Bender)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitHydroponicAutomated": { - "prefab": { - "prefab_name": "ItemKitHydroponicAutomated", - "prefab_hash": -927931558, - "desc": "", - "name": "Kit (Automated Hydroponics)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitHydroponicStation": { - "prefab": { - "prefab_name": "ItemKitHydroponicStation", - "prefab_hash": 2057179799, - "desc": "", - "name": "Kit (Hydroponic Station)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitIceCrusher": { - "prefab": { - "prefab_name": "ItemKitIceCrusher", - "prefab_hash": 288111533, - "desc": "", - "name": "Kit (Ice Crusher)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitInsulatedLiquidPipe": { - "prefab": { - "prefab_name": "ItemKitInsulatedLiquidPipe", - "prefab_hash": 2067655311, - "desc": "", - "name": "Kit (Insulated Liquid Pipe)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 20, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitInsulatedPipe": { - "prefab": { - "prefab_name": "ItemKitInsulatedPipe", - "prefab_hash": 452636699, - "desc": "", - "name": "Kit (Insulated Pipe)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 20, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitInsulatedPipeUtility": { - "prefab": { - "prefab_name": "ItemKitInsulatedPipeUtility", - "prefab_hash": -27284803, - "desc": "", - "name": "Kit (Insulated Pipe Utility Gas)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitInsulatedPipeUtilityLiquid": { - "prefab": { - "prefab_name": "ItemKitInsulatedPipeUtilityLiquid", - "prefab_hash": -1831558953, - "desc": "", - "name": "Kit (Insulated Pipe Utility Liquid)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitInteriorDoors": { - "prefab": { - "prefab_name": "ItemKitInteriorDoors", - "prefab_hash": 1935945891, - "desc": "", - "name": "Kit (Interior Doors)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLadder": { - "prefab": { - "prefab_name": "ItemKitLadder", - "prefab_hash": 489494578, - "desc": "", - "name": "Kit (Ladder)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLandingPadAtmos": { - "prefab": { - "prefab_name": "ItemKitLandingPadAtmos", - "prefab_hash": 1817007843, - "desc": "", - "name": "Kit (Landing Pad Atmospherics)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLandingPadBasic": { - "prefab": { - "prefab_name": "ItemKitLandingPadBasic", - "prefab_hash": 293581318, - "desc": "", - "name": "Kit (Landing Pad Basic)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLandingPadWaypoint": { - "prefab": { - "prefab_name": "ItemKitLandingPadWaypoint", - "prefab_hash": -1267511065, - "desc": "", - "name": "Kit (Landing Pad Runway)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLargeDirectHeatExchanger": { - "prefab": { - "prefab_name": "ItemKitLargeDirectHeatExchanger", - "prefab_hash": 450164077, - "desc": "", - "name": "Kit (Large Direct Heat Exchanger)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLargeExtendableRadiator": { - "prefab": { - "prefab_name": "ItemKitLargeExtendableRadiator", - "prefab_hash": 847430620, - "desc": "", - "name": "Kit (Large Extendable Radiator)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLargeSatelliteDish": { - "prefab": { - "prefab_name": "ItemKitLargeSatelliteDish", - "prefab_hash": -2039971217, - "desc": "", - "name": "Kit (Large Satellite Dish)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLaunchMount": { - "prefab": { - "prefab_name": "ItemKitLaunchMount", - "prefab_hash": -1854167549, - "desc": "", - "name": "Kit (Launch Mount)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLaunchTower": { - "prefab": { - "prefab_name": "ItemKitLaunchTower", - "prefab_hash": -174523552, - "desc": "", - "name": "Kit (Rocket Launch Tower)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLiquidRegulator": { - "prefab": { - "prefab_name": "ItemKitLiquidRegulator", - "prefab_hash": 1951126161, - "desc": "", - "name": "Kit (Liquid Regulator)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLiquidTank": { - "prefab": { - "prefab_name": "ItemKitLiquidTank", - "prefab_hash": -799849305, - "desc": "", - "name": "Kit (Liquid Tank)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLiquidTankInsulated": { - "prefab": { - "prefab_name": "ItemKitLiquidTankInsulated", - "prefab_hash": 617773453, - "desc": "", - "name": "Kit (Insulated Liquid Tank)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLiquidTurboVolumePump": { - "prefab": { - "prefab_name": "ItemKitLiquidTurboVolumePump", - "prefab_hash": -1805020897, - "desc": "", - "name": "Kit (Turbo Volume Pump - Liquid)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLiquidUmbilical": { - "prefab": { - "prefab_name": "ItemKitLiquidUmbilical", - "prefab_hash": 1571996765, - "desc": "", - "name": "Kit (Liquid Umbilical)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLocker": { - "prefab": { - "prefab_name": "ItemKitLocker", - "prefab_hash": 882301399, - "desc": "", - "name": "Kit (Locker)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLogicCircuit": { - "prefab": { - "prefab_name": "ItemKitLogicCircuit", - "prefab_hash": 1512322581, - "desc": "", - "name": "Kit (IC Housing)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLogicInputOutput": { - "prefab": { - "prefab_name": "ItemKitLogicInputOutput", - "prefab_hash": 1997293610, - "desc": "", - "name": "Kit (Logic I/O)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLogicMemory": { - "prefab": { - "prefab_name": "ItemKitLogicMemory", - "prefab_hash": -2098214189, - "desc": "", - "name": "Kit (Logic Memory)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLogicProcessor": { - "prefab": { - "prefab_name": "ItemKitLogicProcessor", - "prefab_hash": 220644373, - "desc": "", - "name": "Kit (Logic Processor)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLogicSwitch": { - "prefab": { - "prefab_name": "ItemKitLogicSwitch", - "prefab_hash": 124499454, - "desc": "", - "name": "Kit (Logic Switch)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitLogicTransmitter": { - "prefab": { - "prefab_name": "ItemKitLogicTransmitter", - "prefab_hash": 1005397063, - "desc": "", - "name": "Kit (Logic Transmitter)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitMotherShipCore": { - "prefab": { - "prefab_name": "ItemKitMotherShipCore", - "prefab_hash": -344968335, - "desc": "", - "name": "Kit (Mothership)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitMusicMachines": { - "prefab": { - "prefab_name": "ItemKitMusicMachines", - "prefab_hash": -2038889137, - "desc": "", - "name": "Kit (Music Machines)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitPassiveLargeRadiatorGas": { - "prefab": { - "prefab_name": "ItemKitPassiveLargeRadiatorGas", - "prefab_hash": -1752768283, - "desc": "", - "name": "Kit (Medium Radiator)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemKitPassiveLargeRadiatorLiquid": { - "prefab": { - "prefab_name": "ItemKitPassiveLargeRadiatorLiquid", - "prefab_hash": 1453961898, - "desc": "", - "name": "Kit (Medium Radiator Liquid)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitPassthroughHeatExchanger": { - "prefab": { - "prefab_name": "ItemKitPassthroughHeatExchanger", - "prefab_hash": 636112787, - "desc": "", - "name": "Kit (CounterFlow Heat Exchanger)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitPictureFrame": { - "prefab": { - "prefab_name": "ItemKitPictureFrame", - "prefab_hash": -2062364768, - "desc": "", - "name": "Kit Picture Frame" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitPipe": { - "prefab": { - "prefab_name": "ItemKitPipe", - "prefab_hash": -1619793705, - "desc": "", - "name": "Kit (Pipe)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 20, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitPipeLiquid": { - "prefab": { - "prefab_name": "ItemKitPipeLiquid", - "prefab_hash": -1166461357, - "desc": "", - "name": "Kit (Liquid Pipe)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 20, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitPipeOrgan": { - "prefab": { - "prefab_name": "ItemKitPipeOrgan", - "prefab_hash": -827125300, - "desc": "", - "name": "Kit (Pipe Organ)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitPipeRadiator": { - "prefab": { - "prefab_name": "ItemKitPipeRadiator", - "prefab_hash": 920411066, - "desc": "", - "name": "Kit (Pipe Radiator)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemKitPipeRadiatorLiquid": { - "prefab": { - "prefab_name": "ItemKitPipeRadiatorLiquid", - "prefab_hash": -1697302609, - "desc": "", - "name": "Kit (Pipe Radiator Liquid)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemKitPipeUtility": { - "prefab": { - "prefab_name": "ItemKitPipeUtility", - "prefab_hash": 1934508338, - "desc": "", - "name": "Kit (Pipe Utility Gas)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitPipeUtilityLiquid": { - "prefab": { - "prefab_name": "ItemKitPipeUtilityLiquid", - "prefab_hash": 595478589, - "desc": "", - "name": "Kit (Pipe Utility Liquid)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitPlanter": { - "prefab": { - "prefab_name": "ItemKitPlanter", - "prefab_hash": 119096484, - "desc": "", - "name": "Kit (Planter)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitPortablesConnector": { - "prefab": { - "prefab_name": "ItemKitPortablesConnector", - "prefab_hash": 1041148999, - "desc": "", - "name": "Kit (Portables Connector)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitPowerTransmitter": { - "prefab": { - "prefab_name": "ItemKitPowerTransmitter", - "prefab_hash": 291368213, - "desc": "", - "name": "Kit (Power Transmitter)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitPowerTransmitterOmni": { - "prefab": { - "prefab_name": "ItemKitPowerTransmitterOmni", - "prefab_hash": -831211676, - "desc": "", - "name": "Kit (Power Transmitter Omni)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitPoweredVent": { - "prefab": { - "prefab_name": "ItemKitPoweredVent", - "prefab_hash": 2015439334, - "desc": "", - "name": "Kit (Powered Vent)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitPressureFedGasEngine": { - "prefab": { - "prefab_name": "ItemKitPressureFedGasEngine", - "prefab_hash": -121514007, - "desc": "", - "name": "Kit (Pressure Fed Gas Engine)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitPressureFedLiquidEngine": { - "prefab": { - "prefab_name": "ItemKitPressureFedLiquidEngine", - "prefab_hash": -99091572, - "desc": "", - "name": "Kit (Pressure Fed Liquid Engine)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitPressurePlate": { - "prefab": { - "prefab_name": "ItemKitPressurePlate", - "prefab_hash": 123504691, - "desc": "", - "name": "Kit (Trigger Plate)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitPumpedLiquidEngine": { - "prefab": { - "prefab_name": "ItemKitPumpedLiquidEngine", - "prefab_hash": 1921918951, - "desc": "", - "name": "Kit (Pumped Liquid Engine)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitRailing": { - "prefab": { - "prefab_name": "ItemKitRailing", - "prefab_hash": 750176282, - "desc": "", - "name": "Kit (Railing)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitRecycler": { - "prefab": { - "prefab_name": "ItemKitRecycler", - "prefab_hash": 849148192, - "desc": "", - "name": "Kit (Recycler)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitRegulator": { - "prefab": { - "prefab_name": "ItemKitRegulator", - "prefab_hash": 1181371795, - "desc": "", - "name": "Kit (Pressure Regulator)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitReinforcedWindows": { - "prefab": { - "prefab_name": "ItemKitReinforcedWindows", - "prefab_hash": 1459985302, - "desc": "", - "name": "Kit (Reinforced Windows)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitResearchMachine": { - "prefab": { - "prefab_name": "ItemKitResearchMachine", - "prefab_hash": 724776762, - "desc": "", - "name": "Kit Research Machine" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemKitRespawnPointWallMounted": { - "prefab": { - "prefab_name": "ItemKitRespawnPointWallMounted", - "prefab_hash": 1574688481, - "desc": "", - "name": "Kit (Respawn)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitRocketAvionics": { - "prefab": { - "prefab_name": "ItemKitRocketAvionics", - "prefab_hash": 1396305045, - "desc": "", - "name": "Kit (Avionics)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitRocketBattery": { - "prefab": { - "prefab_name": "ItemKitRocketBattery", - "prefab_hash": -314072139, - "desc": "", - "name": "Kit (Rocket Battery)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitRocketCargoStorage": { - "prefab": { - "prefab_name": "ItemKitRocketCargoStorage", - "prefab_hash": 479850239, - "desc": "", - "name": "Kit (Rocket Cargo Storage)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitRocketCelestialTracker": { - "prefab": { - "prefab_name": "ItemKitRocketCelestialTracker", - "prefab_hash": -303008602, - "desc": "", - "name": "Kit (Rocket Celestial Tracker)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitRocketCircuitHousing": { - "prefab": { - "prefab_name": "ItemKitRocketCircuitHousing", - "prefab_hash": 721251202, - "desc": "", - "name": "Kit (Rocket Circuit Housing)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitRocketDatalink": { - "prefab": { - "prefab_name": "ItemKitRocketDatalink", - "prefab_hash": -1256996603, - "desc": "", - "name": "Kit (Rocket Datalink)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitRocketGasFuelTank": { - "prefab": { - "prefab_name": "ItemKitRocketGasFuelTank", - "prefab_hash": -1629347579, - "desc": "", - "name": "Kit (Rocket Gas Fuel Tank)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitRocketLiquidFuelTank": { - "prefab": { - "prefab_name": "ItemKitRocketLiquidFuelTank", - "prefab_hash": 2032027950, - "desc": "", - "name": "Kit (Rocket Liquid Fuel Tank)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitRocketManufactory": { - "prefab": { - "prefab_name": "ItemKitRocketManufactory", - "prefab_hash": -636127860, - "desc": "", - "name": "Kit (Rocket Manufactory)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitRocketMiner": { - "prefab": { - "prefab_name": "ItemKitRocketMiner", - "prefab_hash": -867969909, - "desc": "", - "name": "Kit (Rocket Miner)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitRocketScanner": { - "prefab": { - "prefab_name": "ItemKitRocketScanner", - "prefab_hash": 1753647154, - "desc": "", - "name": "Kit (Rocket Scanner)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitRocketTransformerSmall": { - "prefab": { - "prefab_name": "ItemKitRocketTransformerSmall", - "prefab_hash": -932335800, - "desc": "", - "name": "Kit (Transformer Small (Rocket))" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitRoverFrame": { - "prefab": { - "prefab_name": "ItemKitRoverFrame", - "prefab_hash": 1827215803, - "desc": "", - "name": "Kit (Rover Frame)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitRoverMKI": { - "prefab": { - "prefab_name": "ItemKitRoverMKI", - "prefab_hash": 197243872, - "desc": "", - "name": "Kit (Rover Mk I)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitSDBHopper": { - "prefab": { - "prefab_name": "ItemKitSDBHopper", - "prefab_hash": 323957548, - "desc": "", - "name": "Kit (SDB Hopper)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitSatelliteDish": { - "prefab": { - "prefab_name": "ItemKitSatelliteDish", - "prefab_hash": 178422810, - "desc": "", - "name": "Kit (Medium Satellite Dish)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitSecurityPrinter": { - "prefab": { - "prefab_name": "ItemKitSecurityPrinter", - "prefab_hash": 578078533, - "desc": "", - "name": "Kit (Security Printer)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitSensor": { - "prefab": { - "prefab_name": "ItemKitSensor", - "prefab_hash": -1776897113, - "desc": "", - "name": "Kit (Sensors)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitShower": { - "prefab": { - "prefab_name": "ItemKitShower", - "prefab_hash": 735858725, - "desc": "", - "name": "Kit (Shower)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitSign": { - "prefab": { - "prefab_name": "ItemKitSign", - "prefab_hash": 529996327, - "desc": "", - "name": "Kit (Sign)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitSleeper": { - "prefab": { - "prefab_name": "ItemKitSleeper", - "prefab_hash": 326752036, - "desc": "", - "name": "Kit (Sleeper)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitSmallDirectHeatExchanger": { - "prefab": { - "prefab_name": "ItemKitSmallDirectHeatExchanger", - "prefab_hash": -1332682164, - "desc": "", - "name": "Kit (Small Direct Heat Exchanger)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemKitSmallSatelliteDish": { - "prefab": { - "prefab_name": "ItemKitSmallSatelliteDish", - "prefab_hash": 1960952220, - "desc": "", - "name": "Kit (Small Satellite Dish)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitSolarPanel": { - "prefab": { - "prefab_name": "ItemKitSolarPanel", - "prefab_hash": -1924492105, - "desc": "", - "name": "Kit (Solar Panel)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitSolarPanelBasic": { - "prefab": { - "prefab_name": "ItemKitSolarPanelBasic", - "prefab_hash": 844961456, - "desc": "", - "name": "Kit (Solar Panel Basic)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemKitSolarPanelBasicReinforced": { - "prefab": { - "prefab_name": "ItemKitSolarPanelBasicReinforced", - "prefab_hash": -528695432, - "desc": "", - "name": "Kit (Solar Panel Basic Heavy)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemKitSolarPanelReinforced": { - "prefab": { - "prefab_name": "ItemKitSolarPanelReinforced", - "prefab_hash": -364868685, - "desc": "", - "name": "Kit (Solar Panel Heavy)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitSolidGenerator": { - "prefab": { - "prefab_name": "ItemKitSolidGenerator", - "prefab_hash": 1293995736, - "desc": "", - "name": "Kit (Solid Generator)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitSorter": { - "prefab": { - "prefab_name": "ItemKitSorter", - "prefab_hash": 969522478, - "desc": "", - "name": "Kit (Sorter)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitSpeaker": { - "prefab": { - "prefab_name": "ItemKitSpeaker", - "prefab_hash": -126038526, - "desc": "", - "name": "Kit (Speaker)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitStacker": { - "prefab": { - "prefab_name": "ItemKitStacker", - "prefab_hash": 1013244511, - "desc": "", - "name": "Kit (Stacker)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitStairs": { - "prefab": { - "prefab_name": "ItemKitStairs", - "prefab_hash": 170878959, - "desc": "", - "name": "Kit (Stairs)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitStairwell": { - "prefab": { - "prefab_name": "ItemKitStairwell", - "prefab_hash": -1868555784, - "desc": "", - "name": "Kit (Stairwell)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitStandardChute": { - "prefab": { - "prefab_name": "ItemKitStandardChute", - "prefab_hash": 2133035682, - "desc": "", - "name": "Kit (Powered Chutes)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitStirlingEngine": { - "prefab": { - "prefab_name": "ItemKitStirlingEngine", - "prefab_hash": -1821571150, - "desc": "", - "name": "Kit (Stirling Engine)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitSuitStorage": { - "prefab": { - "prefab_name": "ItemKitSuitStorage", - "prefab_hash": 1088892825, - "desc": "", - "name": "Kit (Suit Storage)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitTables": { - "prefab": { - "prefab_name": "ItemKitTables", - "prefab_hash": -1361598922, - "desc": "", - "name": "Kit (Tables)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitTank": { - "prefab": { - "prefab_name": "ItemKitTank", - "prefab_hash": 771439840, - "desc": "", - "name": "Kit (Tank)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitTankInsulated": { - "prefab": { - "prefab_name": "ItemKitTankInsulated", - "prefab_hash": 1021053608, - "desc": "", - "name": "Kit (Tank Insulated)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemKitToolManufactory": { - "prefab": { - "prefab_name": "ItemKitToolManufactory", - "prefab_hash": 529137748, - "desc": "", - "name": "Kit (Tool Manufactory)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitTransformer": { - "prefab": { - "prefab_name": "ItemKitTransformer", - "prefab_hash": -453039435, - "desc": "", - "name": "Kit (Transformer Large)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitTransformerSmall": { - "prefab": { - "prefab_name": "ItemKitTransformerSmall", - "prefab_hash": 665194284, - "desc": "", - "name": "Kit (Transformer Small)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitTurbineGenerator": { - "prefab": { - "prefab_name": "ItemKitTurbineGenerator", - "prefab_hash": -1590715731, - "desc": "", - "name": "Kit (Turbine Generator)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitTurboVolumePump": { - "prefab": { - "prefab_name": "ItemKitTurboVolumePump", - "prefab_hash": -1248429712, - "desc": "", - "name": "Kit (Turbo Volume Pump - Gas)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemKitUprightWindTurbine": { - "prefab": { - "prefab_name": "ItemKitUprightWindTurbine", - "prefab_hash": -1798044015, - "desc": "", - "name": "Kit (Upright Wind Turbine)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemKitVendingMachine": { - "prefab": { - "prefab_name": "ItemKitVendingMachine", - "prefab_hash": -2038384332, - "desc": "", - "name": "Kit (Vending Machine)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitVendingMachineRefrigerated": { - "prefab": { - "prefab_name": "ItemKitVendingMachineRefrigerated", - "prefab_hash": -1867508561, - "desc": "", - "name": "Kit (Vending Machine Refrigerated)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitWall": { - "prefab": { - "prefab_name": "ItemKitWall", - "prefab_hash": -1826855889, - "desc": "", - "name": "Kit (Wall)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 30, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitWallArch": { - "prefab": { - "prefab_name": "ItemKitWallArch", - "prefab_hash": 1625214531, - "desc": "", - "name": "Kit (Arched Wall)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 30, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitWallFlat": { - "prefab": { - "prefab_name": "ItemKitWallFlat", - "prefab_hash": -846838195, - "desc": "", - "name": "Kit (Flat Wall)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 30, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitWallGeometry": { - "prefab": { - "prefab_name": "ItemKitWallGeometry", - "prefab_hash": -784733231, - "desc": "", - "name": "Kit (Geometric Wall)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 30, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitWallIron": { - "prefab": { - "prefab_name": "ItemKitWallIron", - "prefab_hash": -524546923, - "desc": "", - "name": "Kit (Iron Wall)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 30, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitWallPadded": { - "prefab": { - "prefab_name": "ItemKitWallPadded", - "prefab_hash": -821868990, - "desc": "", - "name": "Kit (Padded Wall)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 30, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitWaterBottleFiller": { - "prefab": { - "prefab_name": "ItemKitWaterBottleFiller", - "prefab_hash": 159886536, - "desc": "", - "name": "Kit (Water Bottle Filler)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitWaterPurifier": { - "prefab": { - "prefab_name": "ItemKitWaterPurifier", - "prefab_hash": 611181283, - "desc": "", - "name": "Kit (Water Purifier)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitWeatherStation": { - "prefab": { - "prefab_name": "ItemKitWeatherStation", - "prefab_hash": 337505889, - "desc": "", - "name": "Kit (Weather Station)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemKitWindTurbine": { - "prefab": { - "prefab_name": "ItemKitWindTurbine", - "prefab_hash": -868916503, - "desc": "", - "name": "Kit (Wind Turbine)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemKitWindowShutter": { - "prefab": { - "prefab_name": "ItemKitWindowShutter", - "prefab_hash": 1779979754, - "desc": "", - "name": "Kit (Window Shutter)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemLabeller": { - "prefab": { - "prefab_name": "ItemLabeller", - "prefab_hash": -743968726, - "desc": "A labeller lets you set names and values on a variety of devices and structures, including Console and Logic.", - "name": "Labeller" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemLaptop": { - "prefab": { - "prefab_name": "ItemLaptop", - "prefab_hash": 141535121, - "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", - "name": "Laptop" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "PressureExternal": "Read", - "On": "ReadWrite", - "TemperatureExternal": "Read", - "PositionX": "Read", - "PositionY": "Read", - "PositionZ": "Read", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": true, - "circuit_holder": true - }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - }, - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Motherboard", - "typ": "Motherboard" - } - ] - }, - "ItemLeadIngot": { - "prefab": { - "prefab_name": "ItemLeadIngot", - "prefab_hash": 2134647745, - "desc": "", - "name": "Ingot (Lead)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Lead": 1.0 - }, - "slot_class": "Ingot", - "sorting_class": "Resources" - } - }, - "ItemLeadOre": { - "prefab": { - "prefab_name": "ItemLeadOre", - "prefab_hash": -190236170, - "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.", - "name": "Ore (Lead)" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 50, - "reagents": { - "Lead": 1.0 - }, - "slot_class": "Ore", - "sorting_class": "Ores" - } - }, - "ItemLightSword": { - "prefab": { - "prefab_name": "ItemLightSword", - "prefab_hash": 1949076595, - "desc": "A charming, if useless, pseudo-weapon. (Creative only.)", - "name": "Light Sword" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemLiquidCanisterEmpty": { - "prefab": { - "prefab_name": "ItemLiquidCanisterEmpty", - "prefab_hash": -185207387, - "desc": "", - "name": "Liquid Canister" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "LiquidCanister", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.05 - }, - "internal_atmo_info": { - "volume": 12.1 - } - }, - "ItemLiquidCanisterSmart": { - "prefab": { - "prefab_name": "ItemLiquidCanisterSmart", - "prefab_hash": 777684475, - "desc": "0.Mode0\n1.Mode1", - "name": "Liquid Canister (Smart)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "LiquidCanister", - "sorting_class": "Atmospherics" - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "internal_atmo_info": { - "volume": 18.1 - } - }, - "ItemLiquidDrain": { - "prefab": { - "prefab_name": "ItemLiquidDrain", - "prefab_hash": 2036225202, - "desc": "", - "name": "Kit (Liquid Drain)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemLiquidPipeAnalyzer": { - "prefab": { - "prefab_name": "ItemLiquidPipeAnalyzer", - "prefab_hash": 226055671, - "desc": "", - "name": "Kit (Liquid Pipe Analyzer)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemLiquidPipeHeater": { - "prefab": { - "prefab_name": "ItemLiquidPipeHeater", - "prefab_hash": -248475032, - "desc": "Creates a Pipe Heater (Liquid).", - "name": "Pipe Heater Kit (Liquid)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemLiquidPipeValve": { - "prefab": { - "prefab_name": "ItemLiquidPipeValve", - "prefab_hash": -2126113312, - "desc": "This kit creates a Liquid Valve.", - "name": "Kit (Liquid Pipe Valve)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemLiquidPipeVolumePump": { - "prefab": { - "prefab_name": "ItemLiquidPipeVolumePump", - "prefab_hash": -2106280569, - "desc": "", - "name": "Kit (Liquid Volume Pump)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemLiquidTankStorage": { - "prefab": { - "prefab_name": "ItemLiquidTankStorage", - "prefab_hash": 2037427578, - "desc": "This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister.", - "name": "Kit (Liquid Canister Storage)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemMKIIAngleGrinder": { - "prefab": { - "prefab_name": "ItemMKIIAngleGrinder", - "prefab_hash": 240174650, - "desc": "Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure.", - "name": "Mk II Angle Grinder" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Activate": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemMKIIArcWelder": { - "prefab": { - "prefab_name": "ItemMKIIArcWelder", - "prefab_hash": -2061979347, - "desc": "", - "name": "Mk II Arc Welder" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Activate": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemMKIICrowbar": { - "prefab": { - "prefab_name": "ItemMKIICrowbar", - "prefab_hash": 1440775434, - "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.", - "name": "Mk II Crowbar" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - } - }, - "ItemMKIIDrill": { - "prefab": { - "prefab_name": "ItemMKIIDrill", - "prefab_hash": 324791548, - "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.", - "name": "Mk II Drill" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Activate": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemMKIIDuctTape": { - "prefab": { - "prefab_name": "ItemMKIIDuctTape", - "prefab_hash": 388774906, - "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.", - "name": "Mk II Duct Tape" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - } - }, - "ItemMKIIMiningDrill": { - "prefab": { - "prefab_name": "ItemMKIIMiningDrill", - "prefab_hash": -1875271296, - "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.", - "name": "Mk II Mining Drill" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Default", - "1": "Flatten" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemMKIIScrewdriver": { - "prefab": { - "prefab_name": "ItemMKIIScrewdriver", - "prefab_hash": -2015613246, - "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.", - "name": "Mk II Screwdriver" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - } - }, - "ItemMKIIWireCutters": { - "prefab": { - "prefab_name": "ItemMKIIWireCutters", - "prefab_hash": -178893251, - "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.", - "name": "Mk II Wire Cutters" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - } - }, - "ItemMKIIWrench": { - "prefab": { - "prefab_name": "ItemMKIIWrench", - "prefab_hash": 1862001680, - "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.", - "name": "Mk II Wrench" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - } - }, - "ItemMarineBodyArmor": { - "prefab": { - "prefab_name": "ItemMarineBodyArmor", - "prefab_hash": 1399098998, - "desc": "", - "name": "Marine Armor" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Suit", - "sorting_class": "Clothing" - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ] - }, - "ItemMarineHelmet": { - "prefab": { - "prefab_name": "ItemMarineHelmet", - "prefab_hash": 1073631646, - "desc": "", - "name": "Marine Helmet" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Helmet", - "sorting_class": "Clothing" - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemMilk": { - "prefab": { - "prefab_name": "ItemMilk", - "prefab_hash": 1327248310, - "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.", - "name": "Milk" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 100, - "reagents": { - "Milk": 1.0 - }, - "slot_class": "None", - "sorting_class": "Resources" - } - }, - "ItemMiningBackPack": { - "prefab": { - "prefab_name": "ItemMiningBackPack", - "prefab_hash": -1650383245, - "desc": "", - "name": "Mining Backpack" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Back", - "sorting_class": "Clothing" - }, - "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" - } - ] - }, - "ItemMiningBelt": { - "prefab": { - "prefab_name": "ItemMiningBelt", - "prefab_hash": -676435305, - "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.", - "name": "Mining Belt" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Belt", - "sorting_class": "Clothing" - }, - "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" - } - ] - }, - "ItemMiningBeltMKII": { - "prefab": { - "prefab_name": "ItemMiningBeltMKII", - "prefab_hash": 1470787934, - "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. ", - "name": "Mining Belt MK II" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Belt", - "sorting_class": "Clothing" - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": 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" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - } - ] - }, - "ItemMiningCharge": { - "prefab": { - "prefab_name": "ItemMiningCharge", - "prefab_hash": 15829510, - "desc": "A low cost, high yield explosive with a 10 second timer.", - "name": "Mining Charge" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemMiningDrill": { - "prefab": { - "prefab_name": "ItemMiningDrill", - "prefab_hash": 1055173191, - "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.'", - "name": "Mining Drill" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Default", - "1": "Flatten" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemMiningDrillHeavy": { - "prefab": { - "prefab_name": "ItemMiningDrillHeavy", - "prefab_hash": -1663349918, - "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.", - "name": "Mining Drill (Heavy)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Default", - "1": "Flatten" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemMiningDrillPneumatic": { - "prefab": { - "prefab_name": "ItemMiningDrillPneumatic", - "prefab_hash": 1258187304, - "desc": "0.Default\n1.Flatten", - "name": "Pneumatic Mining Drill" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "GasCanister" - } - ] - }, - "ItemMkIIToolbelt": { - "prefab": { - "prefab_name": "ItemMkIIToolbelt", - "prefab_hash": 1467558064, - "desc": "A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy.", - "name": "Tool Belt MK II" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Belt", - "sorting_class": "Clothing" - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": 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" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ] - }, - "ItemMuffin": { - "prefab": { - "prefab_name": "ItemMuffin", - "prefab_hash": -1864982322, - "desc": "A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin.", - "name": "Muffin" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemMushroom": { - "prefab": { - "prefab_name": "ItemMushroom", - "prefab_hash": 2044798572, - "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.", - "name": "Mushroom" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 20, - "reagents": { - "Mushroom": 1.0 - }, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemNVG": { - "prefab": { - "prefab_name": "ItemNVG", - "prefab_hash": 982514123, - "desc": "", - "name": "Night Vision Goggles" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Glasses", - "sorting_class": "Clothing" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemNickelIngot": { - "prefab": { - "prefab_name": "ItemNickelIngot", - "prefab_hash": -1406385572, - "desc": "", - "name": "Ingot (Nickel)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Nickel": 1.0 - }, - "slot_class": "Ingot", - "sorting_class": "Resources" - } - }, - "ItemNickelOre": { - "prefab": { - "prefab_name": "ItemNickelOre", - "prefab_hash": 1830218956, - "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.", - "name": "Ore (Nickel)" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 50, - "reagents": { - "Nickel": 1.0 - }, - "slot_class": "Ore", - "sorting_class": "Ores" - } - }, - "ItemNitrice": { - "prefab": { - "prefab_name": "ItemNitrice", - "prefab_hash": -1499471529, - "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.", - "name": "Ice (Nitrice)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemOxite": { - "prefab": { - "prefab_name": "ItemOxite", - "prefab_hash": -1805394113, - "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.", - "name": "Ice (Oxite)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemPassiveVent": { - "prefab": { - "prefab_name": "ItemPassiveVent", - "prefab_hash": 238631271, - "desc": "This kit creates a Passive Vent among other variants.", - "name": "Passive Vent" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemPassiveVentInsulated": { - "prefab": { - "prefab_name": "ItemPassiveVentInsulated", - "prefab_hash": -1397583760, - "desc": "", - "name": "Kit (Insulated Passive Vent)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemPeaceLily": { - "prefab": { - "prefab_name": "ItemPeaceLily", - "prefab_hash": 2042955224, - "desc": "A fetching lily with greater resistance to cold temperatures.", - "name": "Peace Lily" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemPickaxe": { - "prefab": { - "prefab_name": "ItemPickaxe", - "prefab_hash": -913649823, - "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.", - "name": "Pickaxe" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - } - }, - "ItemPillHeal": { - "prefab": { - "prefab_name": "ItemPillHeal", - "prefab_hash": 1118069417, - "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.", - "name": "Pill (Medical)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemPillStun": { - "prefab": { - "prefab_name": "ItemPillStun", - "prefab_hash": 418958601, - "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.", - "name": "Pill (Paralysis)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemPipeAnalyizer": { - "prefab": { - "prefab_name": "ItemPipeAnalyizer", - "prefab_hash": -767597887, - "desc": "This kit creates a Pipe Analyzer.", - "name": "Kit (Pipe Analyzer)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemPipeCowl": { - "prefab": { - "prefab_name": "ItemPipeCowl", - "prefab_hash": -38898376, - "desc": "This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres.", - "name": "Pipe Cowl" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 20, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemPipeDigitalValve": { - "prefab": { - "prefab_name": "ItemPipeDigitalValve", - "prefab_hash": -1532448832, - "desc": "This kit creates a Digital Valve.", - "name": "Kit (Digital Valve)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemPipeGasMixer": { - "prefab": { - "prefab_name": "ItemPipeGasMixer", - "prefab_hash": -1134459463, - "desc": "This kit creates a Gas Mixer.", - "name": "Kit (Gas Mixer)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemPipeHeater": { - "prefab": { - "prefab_name": "ItemPipeHeater", - "prefab_hash": -1751627006, - "desc": "Creates a Pipe Heater (Gas).", - "name": "Pipe Heater Kit (Gas)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemPipeIgniter": { - "prefab": { - "prefab_name": "ItemPipeIgniter", - "prefab_hash": 1366030599, - "desc": "", - "name": "Kit (Pipe Igniter)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemPipeLabel": { - "prefab": { - "prefab_name": "ItemPipeLabel", - "prefab_hash": 391769637, - "desc": "This kit creates a Pipe Label.", - "name": "Kit (Pipe Label)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 20, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemPipeLiquidRadiator": { - "prefab": { - "prefab_name": "ItemPipeLiquidRadiator", - "prefab_hash": -906521320, - "desc": "This kit creates a Liquid Pipe Convection Radiator.", - "name": "Kit (Liquid Radiator)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemPipeMeter": { - "prefab": { - "prefab_name": "ItemPipeMeter", - "prefab_hash": 1207939683, - "desc": "This kit creates a Pipe Meter.", - "name": "Kit (Pipe Meter)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemPipeRadiator": { - "prefab": { - "prefab_name": "ItemPipeRadiator", - "prefab_hash": -1796655088, - "desc": "This kit creates a Pipe Convection Radiator.", - "name": "Kit (Radiator)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemPipeValve": { - "prefab": { - "prefab_name": "ItemPipeValve", - "prefab_hash": 799323450, - "desc": "This kit creates a Valve.", - "name": "Kit (Pipe Valve)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemPipeVolumePump": { - "prefab": { - "prefab_name": "ItemPipeVolumePump", - "prefab_hash": -1766301997, - "desc": "This kit creates a Volume Pump.", - "name": "Kit (Volume Pump)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemPlainCake": { - "prefab": { - "prefab_name": "ItemPlainCake", - "prefab_hash": -1108244510, - "desc": "", - "name": "Cake" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemPlantEndothermic_Creative": { - "prefab": { - "prefab_name": "ItemPlantEndothermic_Creative", - "prefab_hash": -1159179557, - "desc": "", - "name": "Endothermic Plant Creative" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemPlantEndothermic_Genepool1": { - "prefab": { - "prefab_name": "ItemPlantEndothermic_Genepool1", - "prefab_hash": 851290561, - "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.", - "name": "Winterspawn (Alpha variant)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemPlantEndothermic_Genepool2": { - "prefab": { - "prefab_name": "ItemPlantEndothermic_Genepool2", - "prefab_hash": -1414203269, - "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.", - "name": "Winterspawn (Beta variant)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemPlantSampler": { - "prefab": { - "prefab_name": "ItemPlantSampler", - "prefab_hash": 173023800, - "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.", - "name": "Plant Sampler" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemPlantSwitchGrass": { - "prefab": { - "prefab_name": "ItemPlantSwitchGrass", - "prefab_hash": -532672323, - "desc": "", - "name": "Switch Grass" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Default" - } - }, - "ItemPlantThermogenic_Creative": { - "prefab": { - "prefab_name": "ItemPlantThermogenic_Creative", - "prefab_hash": -1208890208, - "desc": "", - "name": "Thermogenic Plant Creative" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemPlantThermogenic_Genepool1": { - "prefab": { - "prefab_name": "ItemPlantThermogenic_Genepool1", - "prefab_hash": -177792789, - "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.", - "name": "Hades Flower (Alpha strain)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemPlantThermogenic_Genepool2": { - "prefab": { - "prefab_name": "ItemPlantThermogenic_Genepool2", - "prefab_hash": 1819167057, - "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.", - "name": "Hades Flower (Beta strain)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemPlasticSheets": { - "prefab": { - "prefab_name": "ItemPlasticSheets", - "prefab_hash": 662053345, - "desc": "", - "name": "Plastic Sheets" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "None", - "sorting_class": "Resources" - } - }, - "ItemPotato": { - "prefab": { - "prefab_name": "ItemPotato", - "prefab_hash": 1929046963, - "desc": " Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies.", - "name": "Potato" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 20, - "reagents": { - "Potato": 1.0 - }, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemPotatoBaked": { - "prefab": { - "prefab_name": "ItemPotatoBaked", - "prefab_hash": -2111886401, - "desc": "", - "name": "Baked Potato" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 1, - "reagents": { - "Potato": 1.0 - }, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemPowerConnector": { - "prefab": { - "prefab_name": "ItemPowerConnector", - "prefab_hash": 839924019, - "desc": "This kit creates a Power Connector.", - "name": "Kit (Power Connector)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemPumpkin": { - "prefab": { - "prefab_name": "ItemPumpkin", - "prefab_hash": 1277828144, - "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.", - "name": "Pumpkin" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 20, - "reagents": { - "Pumpkin": 1.0 - }, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemPumpkinPie": { - "prefab": { - "prefab_name": "ItemPumpkinPie", - "prefab_hash": 62768076, - "desc": "", - "name": "Pumpkin Pie" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemPumpkinSoup": { - "prefab": { - "prefab_name": "ItemPumpkinSoup", - "prefab_hash": 1277979876, - "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", - "name": "Pumpkin Soup" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemPureIce": { - "prefab": { - "prefab_name": "ItemPureIce", - "prefab_hash": -1616308158, - "desc": "A frozen chunk of pure Water", - "name": "Pure Ice Water" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemPureIceCarbonDioxide": { - "prefab": { - "prefab_name": "ItemPureIceCarbonDioxide", - "prefab_hash": -1251009404, - "desc": "A frozen chunk of pure Carbon Dioxide", - "name": "Pure Ice Carbon Dioxide" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemPureIceHydrogen": { - "prefab": { - "prefab_name": "ItemPureIceHydrogen", - "prefab_hash": 944530361, - "desc": "A frozen chunk of pure Hydrogen", - "name": "Pure Ice Hydrogen" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemPureIceLiquidCarbonDioxide": { - "prefab": { - "prefab_name": "ItemPureIceLiquidCarbonDioxide", - "prefab_hash": -1715945725, - "desc": "A frozen chunk of pure Liquid Carbon Dioxide", - "name": "Pure Ice Liquid Carbon Dioxide" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemPureIceLiquidHydrogen": { - "prefab": { - "prefab_name": "ItemPureIceLiquidHydrogen", - "prefab_hash": -1044933269, - "desc": "A frozen chunk of pure Liquid Hydrogen", - "name": "Pure Ice Liquid Hydrogen" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemPureIceLiquidNitrogen": { - "prefab": { - "prefab_name": "ItemPureIceLiquidNitrogen", - "prefab_hash": 1674576569, - "desc": "A frozen chunk of pure Liquid Nitrogen", - "name": "Pure Ice Liquid Nitrogen" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemPureIceLiquidNitrous": { - "prefab": { - "prefab_name": "ItemPureIceLiquidNitrous", - "prefab_hash": 1428477399, - "desc": "A frozen chunk of pure Liquid Nitrous Oxide", - "name": "Pure Ice Liquid Nitrous" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemPureIceLiquidOxygen": { - "prefab": { - "prefab_name": "ItemPureIceLiquidOxygen", - "prefab_hash": 541621589, - "desc": "A frozen chunk of pure Liquid Oxygen", - "name": "Pure Ice Liquid Oxygen" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemPureIceLiquidPollutant": { - "prefab": { - "prefab_name": "ItemPureIceLiquidPollutant", - "prefab_hash": -1748926678, - "desc": "A frozen chunk of pure Liquid Pollutant", - "name": "Pure Ice Liquid Pollutant" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemPureIceLiquidVolatiles": { - "prefab": { - "prefab_name": "ItemPureIceLiquidVolatiles", - "prefab_hash": -1306628937, - "desc": "A frozen chunk of pure Liquid Volatiles", - "name": "Pure Ice Liquid Volatiles" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemPureIceNitrogen": { - "prefab": { - "prefab_name": "ItemPureIceNitrogen", - "prefab_hash": -1708395413, - "desc": "A frozen chunk of pure Nitrogen", - "name": "Pure Ice Nitrogen" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemPureIceNitrous": { - "prefab": { - "prefab_name": "ItemPureIceNitrous", - "prefab_hash": 386754635, - "desc": "A frozen chunk of pure Nitrous Oxide", - "name": "Pure Ice NitrousOxide" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemPureIceOxygen": { - "prefab": { - "prefab_name": "ItemPureIceOxygen", - "prefab_hash": -1150448260, - "desc": "A frozen chunk of pure Oxygen", - "name": "Pure Ice Oxygen" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemPureIcePollutant": { - "prefab": { - "prefab_name": "ItemPureIcePollutant", - "prefab_hash": -1755356, - "desc": "A frozen chunk of pure Pollutant", - "name": "Pure Ice Pollutant" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemPureIcePollutedWater": { - "prefab": { - "prefab_name": "ItemPureIcePollutedWater", - "prefab_hash": -2073202179, - "desc": "A frozen chunk of Polluted Water", - "name": "Pure Ice Polluted Water" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemPureIceSteam": { - "prefab": { - "prefab_name": "ItemPureIceSteam", - "prefab_hash": -874791066, - "desc": "A frozen chunk of pure Steam", - "name": "Pure Ice Steam" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemPureIceVolatiles": { - "prefab": { - "prefab_name": "ItemPureIceVolatiles", - "prefab_hash": -633723719, - "desc": "A frozen chunk of pure Volatiles", - "name": "Pure Ice Volatiles" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemRTG": { - "prefab": { - "prefab_name": "ItemRTG", - "prefab_hash": 495305053, - "desc": "This kit creates that miracle of modern science, a Kit (Creative RTG).", - "name": "Kit (Creative RTG)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemRTGSurvival": { - "prefab": { - "prefab_name": "ItemRTGSurvival", - "prefab_hash": 1817645803, - "desc": "This kit creates a Kit (RTG).", - "name": "Kit (RTG)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemReagentMix": { - "prefab": { - "prefab_name": "ItemReagentMix", - "prefab_hash": -1641500434, - "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.", - "name": "Reagent Mix" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ores" - } - }, - "ItemRemoteDetonator": { - "prefab": { - "prefab_name": "ItemRemoteDetonator", - "prefab_hash": 678483886, - "desc": "", - "name": "Remote Detonator" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemReusableFireExtinguisher": { - "prefab": { - "prefab_name": "ItemReusableFireExtinguisher", - "prefab_hash": -1773192190, - "desc": "Requires a canister filled with any inert liquid to opperate.", - "name": "Fire Extinguisher (Reusable)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "slots": [ - { - "name": "Liquid Canister", - "typ": "LiquidCanister" - } - ] - }, - "ItemRice": { - "prefab": { - "prefab_name": "ItemRice", - "prefab_hash": 658916791, - "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.", - "name": "Rice" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 50, - "reagents": { - "Rice": 1.0 - }, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemRoadFlare": { - "prefab": { - "prefab_name": "ItemRoadFlare", - "prefab_hash": 871811564, - "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.", - "name": "Road Flare" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 20, - "slot_class": "Flare", - "sorting_class": "Default" - } - }, - "ItemRocketMiningDrillHead": { - "prefab": { - "prefab_name": "ItemRocketMiningDrillHead", - "prefab_hash": 2109945337, - "desc": "Replaceable drill head for Rocket Miner", - "name": "Mining-Drill Head (Basic)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 100, - "slot_class": "DrillHead", - "sorting_class": "Default" - } - }, - "ItemRocketMiningDrillHeadDurable": { - "prefab": { - "prefab_name": "ItemRocketMiningDrillHeadDurable", - "prefab_hash": 1530764483, - "desc": "", - "name": "Mining-Drill Head (Durable)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 100, - "slot_class": "DrillHead", - "sorting_class": "Default" - } - }, - "ItemRocketMiningDrillHeadHighSpeedIce": { - "prefab": { - "prefab_name": "ItemRocketMiningDrillHeadHighSpeedIce", - "prefab_hash": 653461728, - "desc": "", - "name": "Mining-Drill Head (High Speed Ice)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 100, - "slot_class": "DrillHead", - "sorting_class": "Default" - } - }, - "ItemRocketMiningDrillHeadHighSpeedMineral": { - "prefab": { - "prefab_name": "ItemRocketMiningDrillHeadHighSpeedMineral", - "prefab_hash": 1440678625, - "desc": "", - "name": "Mining-Drill Head (High Speed Mineral)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 100, - "slot_class": "DrillHead", - "sorting_class": "Default" - } - }, - "ItemRocketMiningDrillHeadIce": { - "prefab": { - "prefab_name": "ItemRocketMiningDrillHeadIce", - "prefab_hash": -380904592, - "desc": "", - "name": "Mining-Drill Head (Ice)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 100, - "slot_class": "DrillHead", - "sorting_class": "Default" - } - }, - "ItemRocketMiningDrillHeadLongTerm": { - "prefab": { - "prefab_name": "ItemRocketMiningDrillHeadLongTerm", - "prefab_hash": -684020753, - "desc": "", - "name": "Mining-Drill Head (Long Term)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 100, - "slot_class": "DrillHead", - "sorting_class": "Default" - } - }, - "ItemRocketMiningDrillHeadMineral": { - "prefab": { - "prefab_name": "ItemRocketMiningDrillHeadMineral", - "prefab_hash": 1083675581, - "desc": "", - "name": "Mining-Drill Head (Mineral)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 100, - "slot_class": "DrillHead", - "sorting_class": "Default" - } - }, - "ItemRocketScanningHead": { - "prefab": { - "prefab_name": "ItemRocketScanningHead", - "prefab_hash": -1198702771, - "desc": "", - "name": "Rocket Scanner Head" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "ScanningHead", - "sorting_class": "Default" - } - }, - "ItemScanner": { - "prefab": { - "prefab_name": "ItemScanner", - "prefab_hash": 1661270830, - "desc": "A mysterious piece of technology, rumored to have Zrillian origins.", - "name": "Handheld Scanner" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemScrewdriver": { - "prefab": { - "prefab_name": "ItemScrewdriver", - "prefab_hash": 687940869, - "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.", - "name": "Screwdriver" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - } - }, - "ItemSecurityCamera": { - "prefab": { - "prefab_name": "ItemSecurityCamera", - "prefab_hash": -1981101032, - "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.", - "name": "Security Camera" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemSensorLenses": { - "prefab": { - "prefab_name": "ItemSensorLenses", - "prefab_hash": -1176140051, - "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.", - "name": "Sensor Lenses" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Glasses", - "sorting_class": "Clothing" - }, - "logic": { - "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", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Sensor Processing Unit", - "typ": "SensorProcessingUnit" - } - ] - }, - "ItemSensorProcessingUnitCelestialScanner": { - "prefab": { - "prefab_name": "ItemSensorProcessingUnitCelestialScanner", - "prefab_hash": -1154200014, - "desc": "", - "name": "Sensor Processing Unit (Celestial Scanner)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "SensorProcessingUnit", - "sorting_class": "Default" - } - }, - "ItemSensorProcessingUnitMesonScanner": { - "prefab": { - "prefab_name": "ItemSensorProcessingUnitMesonScanner", - "prefab_hash": -1730464583, - "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.", - "name": "Sensor Processing Unit (T-Ray Scanner)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "SensorProcessingUnit", - "sorting_class": "Default" - } - }, - "ItemSensorProcessingUnitOreScanner": { - "prefab": { - "prefab_name": "ItemSensorProcessingUnitOreScanner", - "prefab_hash": -1219128491, - "desc": "The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD.", - "name": "Sensor Processing Unit (Ore Scanner)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "SensorProcessingUnit", - "sorting_class": "Default" - } - }, - "ItemSiliconIngot": { - "prefab": { - "prefab_name": "ItemSiliconIngot", - "prefab_hash": -290196476, - "desc": "", - "name": "Ingot (Silicon)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Silicon": 1.0 - }, - "slot_class": "Ingot", - "sorting_class": "Resources" - } - }, - "ItemSiliconOre": { - "prefab": { - "prefab_name": "ItemSiliconOre", - "prefab_hash": 1103972403, - "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.", - "name": "Ore (Silicon)" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 50, - "reagents": { - "Silicon": 1.0 - }, - "slot_class": "Ore", - "sorting_class": "Ores" - } - }, - "ItemSilverIngot": { - "prefab": { - "prefab_name": "ItemSilverIngot", - "prefab_hash": -929742000, - "desc": "", - "name": "Ingot (Silver)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Silver": 1.0 - }, - "slot_class": "Ingot", - "sorting_class": "Resources" - } - }, - "ItemSilverOre": { - "prefab": { - "prefab_name": "ItemSilverOre", - "prefab_hash": -916518678, - "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.", - "name": "Ore (Silver)" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 50, - "reagents": { - "Silver": 1.0 - }, - "slot_class": "Ore", - "sorting_class": "Ores" - } - }, - "ItemSolderIngot": { - "prefab": { - "prefab_name": "ItemSolderIngot", - "prefab_hash": -82508479, - "desc": "", - "name": "Ingot (Solder)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Solder": 1.0 - }, - "slot_class": "Ingot", - "sorting_class": "Resources" - } - }, - "ItemSolidFuel": { - "prefab": { - "prefab_name": "ItemSolidFuel", - "prefab_hash": -365253871, - "desc": "", - "name": "Solid Fuel (Hydrocarbon)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Hydrocarbon": 1.0 - }, - "slot_class": "Ore", - "sorting_class": "Resources" - } - }, - "ItemSoundCartridgeBass": { - "prefab": { - "prefab_name": "ItemSoundCartridgeBass", - "prefab_hash": -1883441704, - "desc": "", - "name": "Sound Cartridge Bass" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "SoundCartridge", - "sorting_class": "Default" - } - }, - "ItemSoundCartridgeDrums": { - "prefab": { - "prefab_name": "ItemSoundCartridgeDrums", - "prefab_hash": -1901500508, - "desc": "", - "name": "Sound Cartridge Drums" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "SoundCartridge", - "sorting_class": "Default" - } - }, - "ItemSoundCartridgeLeads": { - "prefab": { - "prefab_name": "ItemSoundCartridgeLeads", - "prefab_hash": -1174735962, - "desc": "", - "name": "Sound Cartridge Leads" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "SoundCartridge", - "sorting_class": "Default" - } - }, - "ItemSoundCartridgeSynth": { - "prefab": { - "prefab_name": "ItemSoundCartridgeSynth", - "prefab_hash": -1971419310, - "desc": "", - "name": "Sound Cartridge Synth" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "SoundCartridge", - "sorting_class": "Default" - } - }, - "ItemSoyOil": { - "prefab": { - "prefab_name": "ItemSoyOil", - "prefab_hash": 1387403148, - "desc": "", - "name": "Soy Oil" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 100, - "reagents": { - "Oil": 1.0 - }, - "slot_class": "None", - "sorting_class": "Resources" - } - }, - "ItemSoybean": { - "prefab": { - "prefab_name": "ItemSoybean", - "prefab_hash": 1924673028, - "desc": " Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil", - "name": "Soybean" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 100, - "reagents": { - "Soy": 1.0 - }, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemSpaceCleaner": { - "prefab": { - "prefab_name": "ItemSpaceCleaner", - "prefab_hash": -1737666461, - "desc": "There was a time when humanity really wanted to keep space clean. That time has passed.", - "name": "Space Cleaner" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ItemSpaceHelmet": { - "prefab": { - "prefab_name": "ItemSpaceHelmet", - "prefab_hash": 714830451, - "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.", - "name": "Space Helmet" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Helmet", - "sorting_class": "Clothing" - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "internal_atmo_info": { - "volume": 3.0 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [] - }, - "ItemSpaceIce": { - "prefab": { - "prefab_name": "ItemSpaceIce", - "prefab_hash": 675686937, - "desc": "", - "name": "Space Ice" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 100, - "slot_class": "Ore", - "sorting_class": "Ores" - } - }, - "ItemSpaceOre": { - "prefab": { - "prefab_name": "ItemSpaceOre", - "prefab_hash": 2131916219, - "desc": "Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores.", - "name": "Dirty Ore" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 100, - "slot_class": "Ore", - "sorting_class": "Ores" - } - }, - "ItemSpacepack": { - "prefab": { - "prefab_name": "ItemSpacepack", - "prefab_hash": -1260618380, - "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.", - "name": "Spacepack" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Back", - "sorting_class": "Clothing" - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "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" - } - ] - }, - "ItemSprayCanBlack": { - "prefab": { - "prefab_name": "ItemSprayCanBlack", - "prefab_hash": -688107795, - "desc": "Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses.", - "name": "Spray Paint (Black)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Bottle", - "sorting_class": "Default" - } - }, - "ItemSprayCanBlue": { - "prefab": { - "prefab_name": "ItemSprayCanBlue", - "prefab_hash": -498464883, - "desc": "What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'", - "name": "Spray Paint (Blue)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Bottle", - "sorting_class": "Default" - } - }, - "ItemSprayCanBrown": { - "prefab": { - "prefab_name": "ItemSprayCanBrown", - "prefab_hash": 845176977, - "desc": "In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed.", - "name": "Spray Paint (Brown)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Bottle", - "sorting_class": "Default" - } - }, - "ItemSprayCanGreen": { - "prefab": { - "prefab_name": "ItemSprayCanGreen", - "prefab_hash": -1880941852, - "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.", - "name": "Spray Paint (Green)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Bottle", - "sorting_class": "Default" - } - }, - "ItemSprayCanGrey": { - "prefab": { - "prefab_name": "ItemSprayCanGrey", - "prefab_hash": -1645266981, - "desc": "Arguably the most popular color in the universe, grey was invented so designers had something to do.", - "name": "Spray Paint (Grey)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Bottle", - "sorting_class": "Default" - } - }, - "ItemSprayCanKhaki": { - "prefab": { - "prefab_name": "ItemSprayCanKhaki", - "prefab_hash": 1918456047, - "desc": "Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode.", - "name": "Spray Paint (Khaki)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Bottle", - "sorting_class": "Default" - } - }, - "ItemSprayCanOrange": { - "prefab": { - "prefab_name": "ItemSprayCanOrange", - "prefab_hash": -158007629, - "desc": "Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove.", - "name": "Spray Paint (Orange)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Bottle", - "sorting_class": "Default" - } - }, - "ItemSprayCanPink": { - "prefab": { - "prefab_name": "ItemSprayCanPink", - "prefab_hash": 1344257263, - "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.", - "name": "Spray Paint (Pink)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Bottle", - "sorting_class": "Default" - } - }, - "ItemSprayCanPurple": { - "prefab": { - "prefab_name": "ItemSprayCanPurple", - "prefab_hash": 30686509, - "desc": "Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong.", - "name": "Spray Paint (Purple)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Bottle", - "sorting_class": "Default" - } - }, - "ItemSprayCanRed": { - "prefab": { - "prefab_name": "ItemSprayCanRed", - "prefab_hash": 1514393921, - "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.", - "name": "Spray Paint (Red)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Bottle", - "sorting_class": "Default" - } - }, - "ItemSprayCanWhite": { - "prefab": { - "prefab_name": "ItemSprayCanWhite", - "prefab_hash": 498481505, - "desc": "White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff.", - "name": "Spray Paint (White)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Bottle", - "sorting_class": "Default" - } - }, - "ItemSprayCanYellow": { - "prefab": { - "prefab_name": "ItemSprayCanYellow", - "prefab_hash": 995468116, - "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.", - "name": "Spray Paint (Yellow)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Bottle", - "sorting_class": "Default" - } - }, - "ItemSprayGun": { - "prefab": { - "prefab_name": "ItemSprayGun", - "prefab_hash": 1289723966, - "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.", - "name": "Spray Gun" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "slots": [ - { - "name": "Spray Can", - "typ": "Bottle" - } - ] - }, - "ItemSteelFrames": { - "prefab": { - "prefab_name": "ItemSteelFrames", - "prefab_hash": -1448105779, - "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.", - "name": "Steel Frames" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 30, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemSteelIngot": { - "prefab": { - "prefab_name": "ItemSteelIngot", - "prefab_hash": -654790771, - "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.", - "name": "Ingot (Steel)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Steel": 1.0 - }, - "slot_class": "Ingot", - "sorting_class": "Resources" - } - }, - "ItemSteelSheets": { - "prefab": { - "prefab_name": "ItemSteelSheets", - "prefab_hash": 38555961, - "desc": "An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types.", - "name": "Steel Sheets" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "None", - "sorting_class": "Resources" - } - }, - "ItemStelliteGlassSheets": { - "prefab": { - "prefab_name": "ItemStelliteGlassSheets", - "prefab_hash": -2038663432, - "desc": "A stronger glass substitute.", - "name": "Stellite Glass Sheets" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "None", - "sorting_class": "Resources" - } - }, - "ItemStelliteIngot": { - "prefab": { - "prefab_name": "ItemStelliteIngot", - "prefab_hash": -1897868623, - "desc": "", - "name": "Ingot (Stellite)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Stellite": 1.0 - }, - "slot_class": "Ingot", - "sorting_class": "Resources" - } - }, - "ItemSugar": { - "prefab": { - "prefab_name": "ItemSugar", - "prefab_hash": 2111910840, - "desc": "", - "name": "Sugar" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Sugar": 10.0 - }, - "slot_class": "None", - "sorting_class": "Resources" - } - }, - "ItemSugarCane": { - "prefab": { - "prefab_name": "ItemSugarCane", - "prefab_hash": -1335056202, - "desc": "", - "name": "Sugarcane" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 100, - "reagents": { - "Sugar": 1.0 - }, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemSuitModCryogenicUpgrade": { - "prefab": { - "prefab_name": "ItemSuitModCryogenicUpgrade", - "prefab_hash": -1274308304, - "desc": "Enables suits with basic cooling functionality to work with cryogenic liquid.", - "name": "Cryogenic Suit Upgrade" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "SuitMod", - "sorting_class": "Default" - } - }, - "ItemTablet": { - "prefab": { - "prefab_name": "ItemTablet", - "prefab_hash": -229808600, - "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.", - "name": "Handheld Tablet" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "logic": { - "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", - "Error": "Read", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Cartridge", - "typ": "Cartridge" - } - ] - }, - "ItemTerrainManipulator": { - "prefab": { - "prefab_name": "ItemTerrainManipulator", - "prefab_hash": 111280987, - "desc": "0.Mode0\n1.Mode1", - "name": "Terrain Manipulator" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Default" - }, - "logic": { - "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": { - "0": "Mode0", - "1": "Mode1" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Dirt Canister", - "typ": "Ore" - } - ] - }, - "ItemTomato": { - "prefab": { - "prefab_name": "ItemTomato", - "prefab_hash": -998592080, - "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.", - "name": "Tomato" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 20, - "reagents": { - "Tomato": 1.0 - }, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemTomatoSoup": { - "prefab": { - "prefab_name": "ItemTomatoSoup", - "prefab_hash": 688734890, - "desc": "Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine.", - "name": "Tomato Soup" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Food" - } - }, - "ItemToolBelt": { - "prefab": { - "prefab_name": "ItemToolBelt", - "prefab_hash": -355127880, - "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.", - "name": "Tool Belt" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Belt", - "sorting_class": "Clothing" - }, - "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" - } - ] - }, - "ItemTropicalPlant": { - "prefab": { - "prefab_name": "ItemTropicalPlant", - "prefab_hash": -800947386, - "desc": "An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants.", - "name": "Tropical Lily" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Resources" - } - }, - "ItemUraniumOre": { - "prefab": { - "prefab_name": "ItemUraniumOre", - "prefab_hash": -1516581844, - "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.", - "name": "Ore (Uranium)" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 50, - "reagents": { - "Uranium": 1.0 - }, - "slot_class": "Ore", - "sorting_class": "Ores" - } - }, - "ItemVolatiles": { - "prefab": { - "prefab_name": "ItemVolatiles", - "prefab_hash": 1253102035, - "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", - "name": "Ice (Volatiles)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 50, - "slot_class": "Ore", - "sorting_class": "Ices" - } - }, - "ItemWallCooler": { - "prefab": { - "prefab_name": "ItemWallCooler", - "prefab_hash": -1567752627, - "desc": "This kit creates a Wall Cooler.", - "name": "Kit (Wall Cooler)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemWallHeater": { - "prefab": { - "prefab_name": "ItemWallHeater", - "prefab_hash": 1880134612, - "desc": "This kit creates a Kit (Wall Heater).", - "name": "Kit (Wall Heater)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemWallLight": { - "prefab": { - "prefab_name": "ItemWallLight", - "prefab_hash": 1108423476, - "desc": "This kit creates any one of ten Kit (Lights) variants.", - "name": "Kit (Lights)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemWaspaloyIngot": { - "prefab": { - "prefab_name": "ItemWaspaloyIngot", - "prefab_hash": 156348098, - "desc": "", - "name": "Ingot (Waspaloy)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 500, - "reagents": { - "Waspaloy": 1.0 - }, - "slot_class": "Ingot", - "sorting_class": "Resources" - } - }, - "ItemWaterBottle": { - "prefab": { - "prefab_name": "ItemWaterBottle", - "prefab_hash": 107741229, - "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.", - "name": "Water Bottle" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "LiquidBottle", - "sorting_class": "Default" - } - }, - "ItemWaterPipeDigitalValve": { - "prefab": { - "prefab_name": "ItemWaterPipeDigitalValve", - "prefab_hash": 309693520, - "desc": "", - "name": "Kit (Liquid Digital Valve)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemWaterPipeMeter": { - "prefab": { - "prefab_name": "ItemWaterPipeMeter", - "prefab_hash": -90898877, - "desc": "", - "name": "Kit (Liquid Pipe Meter)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemWaterWallCooler": { - "prefab": { - "prefab_name": "ItemWaterWallCooler", - "prefab_hash": -1721846327, - "desc": "", - "name": "Kit (Liquid Wall Cooler)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 5, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "ItemWearLamp": { - "prefab": { - "prefab_name": "ItemWearLamp", - "prefab_hash": -598730959, - "desc": "", - "name": "Headlamp" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Helmet", - "sorting_class": "Clothing" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "ItemWeldingTorch": { - "prefab": { - "prefab_name": "ItemWeldingTorch", - "prefab_hash": -2066892079, - "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.", - "name": "Welding Torch" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - }, - "thermal_info": { - "convection_factor": 0.5, - "radiation_factor": 0.5 - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "GasCanister" - } - ] - }, - "ItemWheat": { - "prefab": { - "prefab_name": "ItemWheat", - "prefab_hash": -1057658015, - "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.", - "name": "Wheat" - }, - "item": { - "consumable": false, - "ingredient": true, - "max_quantity": 100, - "reagents": { - "Carbon": 1.0 - }, - "slot_class": "Plant", - "sorting_class": "Default" - } - }, - "ItemWireCutters": { - "prefab": { - "prefab_name": "ItemWireCutters", - "prefab_hash": 1535854074, - "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.", - "name": "Wire Cutters" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - } - }, - "ItemWirelessBatteryCellExtraLarge": { - "prefab": { - "prefab_name": "ItemWirelessBatteryCellExtraLarge", - "prefab_hash": -504717121, - "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", - "name": "Wireless Battery Cell Extra Large" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Battery", - "sorting_class": "Default" - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Mode": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [] - }, - "ItemWreckageAirConditioner1": { - "prefab": { - "prefab_name": "ItemWreckageAirConditioner1", - "prefab_hash": -1826023284, - "desc": "", - "name": "Wreckage Air Conditioner" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Wreckage", - "sorting_class": "Default" - } - }, - "ItemWreckageAirConditioner2": { - "prefab": { - "prefab_name": "ItemWreckageAirConditioner2", - "prefab_hash": 169888054, - "desc": "", - "name": "Wreckage Air Conditioner" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Wreckage", - "sorting_class": "Default" - } - }, - "ItemWreckageHydroponicsTray1": { - "prefab": { - "prefab_name": "ItemWreckageHydroponicsTray1", - "prefab_hash": -310178617, - "desc": "", - "name": "Wreckage Hydroponics Tray" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Wreckage", - "sorting_class": "Default" - } - }, - "ItemWreckageLargeExtendableRadiator01": { - "prefab": { - "prefab_name": "ItemWreckageLargeExtendableRadiator01", - "prefab_hash": -997763, - "desc": "", - "name": "Wreckage Large Extendable Radiator" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Wreckage", - "sorting_class": "Default" - } - }, - "ItemWreckageStructureRTG1": { - "prefab": { - "prefab_name": "ItemWreckageStructureRTG1", - "prefab_hash": 391453348, - "desc": "", - "name": "Wreckage Structure RTG" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Wreckage", - "sorting_class": "Default" - } - }, - "ItemWreckageStructureWeatherStation001": { - "prefab": { - "prefab_name": "ItemWreckageStructureWeatherStation001", - "prefab_hash": -834664349, - "desc": "", - "name": "Wreckage Structure Weather Station" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Wreckage", - "sorting_class": "Default" - } - }, - "ItemWreckageStructureWeatherStation002": { - "prefab": { - "prefab_name": "ItemWreckageStructureWeatherStation002", - "prefab_hash": 1464424921, - "desc": "", - "name": "Wreckage Structure Weather Station" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Wreckage", - "sorting_class": "Default" - } - }, - "ItemWreckageStructureWeatherStation003": { - "prefab": { - "prefab_name": "ItemWreckageStructureWeatherStation003", - "prefab_hash": 542009679, - "desc": "", - "name": "Wreckage Structure Weather Station" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Wreckage", - "sorting_class": "Default" - } - }, - "ItemWreckageStructureWeatherStation004": { - "prefab": { - "prefab_name": "ItemWreckageStructureWeatherStation004", - "prefab_hash": -1104478996, - "desc": "", - "name": "Wreckage Structure Weather Station" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Wreckage", - "sorting_class": "Default" - } - }, - "ItemWreckageStructureWeatherStation005": { - "prefab": { - "prefab_name": "ItemWreckageStructureWeatherStation005", - "prefab_hash": -919745414, - "desc": "", - "name": "Wreckage Structure Weather Station" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Wreckage", - "sorting_class": "Default" - } - }, - "ItemWreckageStructureWeatherStation006": { - "prefab": { - "prefab_name": "ItemWreckageStructureWeatherStation006", - "prefab_hash": 1344576960, - "desc": "", - "name": "Wreckage Structure Weather Station" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Wreckage", - "sorting_class": "Default" - } - }, - "ItemWreckageStructureWeatherStation007": { - "prefab": { - "prefab_name": "ItemWreckageStructureWeatherStation007", - "prefab_hash": 656649558, - "desc": "", - "name": "Wreckage Structure Weather Station" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Wreckage", - "sorting_class": "Default" - } - }, - "ItemWreckageStructureWeatherStation008": { - "prefab": { - "prefab_name": "ItemWreckageStructureWeatherStation008", - "prefab_hash": -1214467897, - "desc": "", - "name": "Wreckage Structure Weather Station" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Wreckage", - "sorting_class": "Default" - } - }, - "ItemWreckageTurbineGenerator1": { - "prefab": { - "prefab_name": "ItemWreckageTurbineGenerator1", - "prefab_hash": -1662394403, - "desc": "", - "name": "Wreckage Turbine Generator" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Wreckage", - "sorting_class": "Default" - } - }, - "ItemWreckageTurbineGenerator2": { - "prefab": { - "prefab_name": "ItemWreckageTurbineGenerator2", - "prefab_hash": 98602599, - "desc": "", - "name": "Wreckage Turbine Generator" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Wreckage", - "sorting_class": "Default" - } - }, - "ItemWreckageTurbineGenerator3": { - "prefab": { - "prefab_name": "ItemWreckageTurbineGenerator3", - "prefab_hash": 1927790321, - "desc": "", - "name": "Wreckage Turbine Generator" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Wreckage", - "sorting_class": "Default" - } - }, - "ItemWreckageWallCooler1": { - "prefab": { - "prefab_name": "ItemWreckageWallCooler1", - "prefab_hash": -1682930158, - "desc": "", - "name": "Wreckage Wall Cooler" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Wreckage", - "sorting_class": "Default" - } - }, - "ItemWreckageWallCooler2": { - "prefab": { - "prefab_name": "ItemWreckageWallCooler2", - "prefab_hash": 45733800, - "desc": "", - "name": "Wreckage Wall Cooler" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Wreckage", - "sorting_class": "Default" - } - }, - "ItemWrench": { - "prefab": { - "prefab_name": "ItemWrench", - "prefab_hash": -1886261558, - "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", - "name": "Wrench" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Tool", - "sorting_class": "Tools" - } - }, - "KitSDBSilo": { - "prefab": { - "prefab_name": "KitSDBSilo", - "prefab_hash": 1932952652, - "desc": "This kit creates a SDB Silo.", - "name": "Kit (SDB Silo)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "KitStructureCombustionCentrifuge": { - "prefab": { - "prefab_name": "KitStructureCombustionCentrifuge", - "prefab_hash": 231903234, - "desc": "", - "name": "Kit (Combustion Centrifuge)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Kits" - } - }, - "KitchenTableShort": { - "prefab": { - "prefab_name": "KitchenTableShort", - "prefab_hash": -1427415566, - "desc": "", - "name": "Kitchen Table (Short)" - }, - "structure": { - "small_grid": true - } - }, - "KitchenTableSimpleShort": { - "prefab": { - "prefab_name": "KitchenTableSimpleShort", - "prefab_hash": -78099334, - "desc": "", - "name": "Kitchen Table (Simple Short)" - }, - "structure": { - "small_grid": true - } - }, - "KitchenTableSimpleTall": { - "prefab": { - "prefab_name": "KitchenTableSimpleTall", - "prefab_hash": -1068629349, - "desc": "", - "name": "Kitchen Table (Simple Tall)" - }, - "structure": { - "small_grid": true - } - }, - "KitchenTableTall": { - "prefab": { - "prefab_name": "KitchenTableTall", - "prefab_hash": -1386237782, - "desc": "", - "name": "Kitchen Table (Tall)" - }, - "structure": { - "small_grid": true - } - }, - "Lander": { - "prefab": { - "prefab_name": "Lander", - "prefab_hash": 1605130615, - "desc": "", - "name": "Lander" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "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" - } - ] - }, - "Landingpad_2x2CenterPiece01": { - "prefab": { - "prefab_name": "Landingpad_2x2CenterPiece01", - "prefab_hash": -1295222317, - "desc": "Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors", - "name": "Landingpad 2x2 Center Piece" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": {}, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [] - }, - "Landingpad_BlankPiece": { - "prefab": { - "prefab_name": "Landingpad_BlankPiece", - "prefab_hash": 912453390, - "desc": "", - "name": "Landingpad" - }, - "structure": { - "small_grid": true - } - }, - "Landingpad_CenterPiece01": { - "prefab": { - "prefab_name": "Landingpad_CenterPiece01", - "prefab_hash": 1070143159, - "desc": "The target point where the trader shuttle will land. Requires a clear view of the sky.", - "name": "Landingpad Center" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": {}, - "modes": { - "0": "None", - "1": "NoContact", - "2": "Moving", - "3": "Holding", - "4": "Landed" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [] - }, - "Landingpad_CrossPiece": { - "prefab": { - "prefab_name": "Landingpad_CrossPiece", - "prefab_hash": 1101296153, - "desc": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.", - "name": "Landingpad Cross" - }, - "structure": { - "small_grid": true - } - }, - "Landingpad_DataConnectionPiece": { - "prefab": { - "prefab_name": "Landingpad_DataConnectionPiece", - "prefab_hash": -2066405918, - "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.", - "name": "Landingpad Data And Power" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "modes": { - "0": "None", - "1": "NoContact", - "2": "Moving", - "3": "Holding", - "4": "Landed" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "None" - }, - { - "typ": "LandingPad", - "role": "Input" - }, - { - "typ": "LandingPad", - "role": "Input" - }, - { - "typ": "LandingPad", - "role": "Input" - } - ], - "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 - } - }, - "Landingpad_DiagonalPiece01": { - "prefab": { - "prefab_name": "Landingpad_DiagonalPiece01", - "prefab_hash": 977899131, - "desc": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.", - "name": "Landingpad Diagonal" - }, - "structure": { - "small_grid": true - } - }, - "Landingpad_GasConnectorInwardPiece": { - "prefab": { - "prefab_name": "Landingpad_GasConnectorInwardPiece", - "prefab_hash": 817945707, - "desc": "", - "name": "Landingpad Gas Input" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "LandingPad", - "role": "Input" - }, - { - "typ": "LandingPad", - "role": "Input" - }, - { - "typ": "LandingPad", - "role": "Input" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - } - ], - "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 - } - }, - "Landingpad_GasConnectorOutwardPiece": { - "prefab": { - "prefab_name": "Landingpad_GasConnectorOutwardPiece", - "prefab_hash": -1100218307, - "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.", - "name": "Landingpad Gas Output" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "LandingPad", - "role": "Input" - }, - { - "typ": "LandingPad", - "role": "Input" - }, - { - "typ": "LandingPad", - "role": "Input" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Output" - } - ], - "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 - } - }, - "Landingpad_GasCylinderTankPiece": { - "prefab": { - "prefab_name": "Landingpad_GasCylinderTankPiece", - "prefab_hash": 170818567, - "desc": "Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders.", - "name": "Landingpad Gas Storage" - }, - "structure": { - "small_grid": true - } - }, - "Landingpad_LiquidConnectorInwardPiece": { - "prefab": { - "prefab_name": "Landingpad_LiquidConnectorInwardPiece", - "prefab_hash": -1216167727, - "desc": "", - "name": "Landingpad Liquid Input" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "LandingPad", - "role": "Input" - }, - { - "typ": "LandingPad", - "role": "Input" - }, - { - "typ": "LandingPad", - "role": "Input" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "PipeLiquid", - "role": "Input" - } - ], - "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 - } - }, - "Landingpad_LiquidConnectorOutwardPiece": { - "prefab": { - "prefab_name": "Landingpad_LiquidConnectorOutwardPiece", - "prefab_hash": -1788929869, - "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.", - "name": "Landingpad Liquid Output" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "LandingPad", - "role": "Input" - }, - { - "typ": "LandingPad", - "role": "Input" - }, - { - "typ": "LandingPad", - "role": "Input" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "PipeLiquid", - "role": "Output" - } - ], - "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 - } - }, - "Landingpad_StraightPiece01": { - "prefab": { - "prefab_name": "Landingpad_StraightPiece01", - "prefab_hash": -976273247, - "desc": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.", - "name": "Landingpad Straight" - }, - "structure": { - "small_grid": true - } - }, - "Landingpad_TaxiPieceCorner": { - "prefab": { - "prefab_name": "Landingpad_TaxiPieceCorner", - "prefab_hash": -1872345847, - "desc": "", - "name": "Landingpad Taxi Corner" - }, - "structure": { - "small_grid": true - } - }, - "Landingpad_TaxiPieceHold": { - "prefab": { - "prefab_name": "Landingpad_TaxiPieceHold", - "prefab_hash": 146051619, - "desc": "", - "name": "Landingpad Taxi Hold" - }, - "structure": { - "small_grid": true - } - }, - "Landingpad_TaxiPieceStraight": { - "prefab": { - "prefab_name": "Landingpad_TaxiPieceStraight", - "prefab_hash": -1477941080, - "desc": "", - "name": "Landingpad Taxi Straight" - }, - "structure": { - "small_grid": true - } - }, - "Landingpad_ThreshholdPiece": { - "prefab": { - "prefab_name": "Landingpad_ThreshholdPiece", - "prefab_hash": -1514298582, - "desc": "", - "name": "Landingpad Threshhold" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "LandingPad", - "role": "Input" - }, - { - "typ": "LandingPad", - "role": "Input" - }, - { - "typ": "LandingPad", - "role": "Input" - }, - { - "typ": "Data", - "role": "Input" - } - ], - "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 - } - }, - "LogicStepSequencer8": { - "prefab": { - "prefab_name": "LogicStepSequencer8", - "prefab_hash": 1531272458, - "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.", - "name": "Logic Step Sequencer" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "Time": "ReadWrite", - "Bpm": "ReadWrite", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Whole Note", - "1": "Half Note", - "2": "Quarter Note", - "3": "Eighth Note", - "4": "Sixteenth Note" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Sound Cartridge", - "typ": "SoundCartridge" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Power", - "role": "Input" - } - ], - "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 - } - }, - "Meteorite": { - "prefab": { - "prefab_name": "Meteorite", - "prefab_hash": -99064335, - "desc": "", - "name": "Meteorite" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "MonsterEgg": { - "prefab": { - "prefab_name": "MonsterEgg", - "prefab_hash": -1667675295, - "desc": "", - "name": "" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "MotherboardComms": { - "prefab": { - "prefab_name": "MotherboardComms", - "prefab_hash": -337075633, - "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.", - "name": "Communications Motherboard" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Motherboard", - "sorting_class": "Default" - } - }, - "MotherboardLogic": { - "prefab": { - "prefab_name": "MotherboardLogic", - "prefab_hash": 502555944, - "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.", - "name": "Logic Motherboard" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Motherboard", - "sorting_class": "Default" - } - }, - "MotherboardMissionControl": { - "prefab": { - "prefab_name": "MotherboardMissionControl", - "prefab_hash": -127121474, - "desc": "", - "name": "" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Motherboard", - "sorting_class": "Default" - } - }, - "MotherboardProgrammableChip": { - "prefab": { - "prefab_name": "MotherboardProgrammableChip", - "prefab_hash": -161107071, - "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.", - "name": "IC Editor Motherboard" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Motherboard", - "sorting_class": "Default" - } - }, - "MotherboardRockets": { - "prefab": { - "prefab_name": "MotherboardRockets", - "prefab_hash": -806986392, - "desc": "", - "name": "Rocket Control Motherboard" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Motherboard", - "sorting_class": "Default" - } - }, - "MotherboardSorter": { - "prefab": { - "prefab_name": "MotherboardSorter", - "prefab_hash": -1908268220, - "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.", - "name": "Sorter Motherboard" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Motherboard", - "sorting_class": "Default" - } - }, - "MothershipCore": { - "prefab": { - "prefab_name": "MothershipCore", - "prefab_hash": -1930442922, - "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.", - "name": "Mothership Core" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "NpcChick": { - "prefab": { - "prefab_name": "NpcChick", - "prefab_hash": 155856647, - "desc": "", - "name": "Chick" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "slots": [ - { - "name": "Brain", - "typ": "Organ" - }, - { - "name": "Lungs", - "typ": "Organ" - } - ] - }, - "NpcChicken": { - "prefab": { - "prefab_name": "NpcChicken", - "prefab_hash": 399074198, - "desc": "", - "name": "Chicken" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "slots": [ - { - "name": "Brain", - "typ": "Organ" - }, - { - "name": "Lungs", - "typ": "Organ" - } - ] - }, - "PassiveSpeaker": { - "prefab": { - "prefab_name": "PassiveSpeaker", - "prefab_hash": 248893646, - "desc": "", - "name": "Passive Speaker" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Volume": "ReadWrite", - "PrefabHash": "ReadWrite", - "SoundAlert": "ReadWrite", - "ReferenceId": "ReadWrite", - "NameHash": "ReadWrite" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - } - ], - "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 - } - }, - "PipeBenderMod": { - "prefab": { - "prefab_name": "PipeBenderMod", - "prefab_hash": 443947415, - "desc": "Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", - "name": "Pipe Bender Mod" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "PortableComposter": { - "prefab": { - "prefab_name": "PortableComposter", - "prefab_hash": -1958705204, - "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", - "name": "Portable Composter" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "Battery" - }, - { - "name": "Liquid Canister", - "typ": "LiquidCanister" - } - ] - }, - "PortableSolarPanel": { - "prefab": { - "prefab_name": "PortableSolarPanel", - "prefab_hash": 2043318949, - "desc": "", - "name": "Portable Solar Panel" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Open": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "RailingElegant01": { - "prefab": { - "prefab_name": "RailingElegant01", - "prefab_hash": 399661231, - "desc": "", - "name": "Railing Elegant (Type 1)" - }, - "structure": { - "small_grid": false - } - }, - "RailingElegant02": { - "prefab": { - "prefab_name": "RailingElegant02", - "prefab_hash": -1898247915, - "desc": "", - "name": "Railing Elegant (Type 2)" - }, - "structure": { - "small_grid": false - } - }, - "RailingIndustrial02": { - "prefab": { - "prefab_name": "RailingIndustrial02", - "prefab_hash": -2072792175, - "desc": "", - "name": "Railing Industrial (Type 2)" - }, - "structure": { - "small_grid": false - } - }, - "ReagentColorBlue": { - "prefab": { - "prefab_name": "ReagentColorBlue", - "prefab_hash": 980054869, - "desc": "", - "name": "Color Dye (Blue)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 100, - "reagents": { - "ColorBlue": 10.0 - }, - "slot_class": "None", - "sorting_class": "Resources" - } - }, - "ReagentColorGreen": { - "prefab": { - "prefab_name": "ReagentColorGreen", - "prefab_hash": 120807542, - "desc": "", - "name": "Color Dye (Green)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 100, - "reagents": { - "ColorGreen": 10.0 - }, - "slot_class": "None", - "sorting_class": "Resources" - } - }, - "ReagentColorOrange": { - "prefab": { - "prefab_name": "ReagentColorOrange", - "prefab_hash": -400696159, - "desc": "", - "name": "Color Dye (Orange)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 100, - "reagents": { - "ColorOrange": 10.0 - }, - "slot_class": "None", - "sorting_class": "Resources" - } - }, - "ReagentColorRed": { - "prefab": { - "prefab_name": "ReagentColorRed", - "prefab_hash": 1998377961, - "desc": "", - "name": "Color Dye (Red)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 100, - "reagents": { - "ColorRed": 10.0 - }, - "slot_class": "None", - "sorting_class": "Resources" - } - }, - "ReagentColorYellow": { - "prefab": { - "prefab_name": "ReagentColorYellow", - "prefab_hash": 635208006, - "desc": "", - "name": "Color Dye (Yellow)" - }, - "item": { - "consumable": true, - "ingredient": true, - "max_quantity": 100, - "reagents": { - "ColorYellow": 10.0 - }, - "slot_class": "None", - "sorting_class": "Resources" - } - }, - "RespawnPoint": { - "prefab": { - "prefab_name": "RespawnPoint", - "prefab_hash": -788672929, - "desc": "Place a respawn point to set a player entry point to your base when loading in, or returning from the dead.", - "name": "Respawn Point" - }, - "structure": { - "small_grid": true - } - }, - "RespawnPointWallMounted": { - "prefab": { - "prefab_name": "RespawnPointWallMounted", - "prefab_hash": -491247370, - "desc": "", - "name": "Respawn Point (Mounted)" - }, - "structure": { - "small_grid": true - } - }, - "Robot": { - "prefab": { - "prefab_name": "Robot", - "prefab_hash": 434786784, - "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", - "name": "AIMeE Bot" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "logic": { - "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" - }, - "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" - } - }, - "logic_types": { - "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" - }, - "modes": { - "0": "None", - "1": "Follow", - "2": "MoveToTarget", - "3": "Roam", - "4": "Unload", - "5": "PathToTarget", - "6": "StorageFull" - }, - "transmission_receiver": false, - "wireless_logic": true, - "circuit_holder": true - }, - "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" - } - ] - }, - "RoverCargo": { - "prefab": { - "prefab_name": "RoverCargo", - "prefab_hash": 350726273, - "desc": "Connects to Logic Transmitter", - "name": "Rover (Cargo)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "thermal_info": { - "convection_factor": 0.01, - "radiation_factor": 0.01 - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "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" - }, - "transmission_receiver": false, - "wireless_logic": true, - "circuit_holder": false - }, - "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": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ] - }, - "Rover_MkI": { - "prefab": { - "prefab_name": "Rover_MkI", - "prefab_hash": -2049946335, - "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", - "name": "Rover MkI" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "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" - }, - "transmission_receiver": false, - "wireless_logic": true, - "circuit_holder": false - }, - "slots": [ - { - "name": "Entity", - "typ": "Entity" - }, - { - "name": "Entity", - "typ": "Entity" - }, - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ] - }, - "Rover_MkI_build_states": { - "prefab": { - "prefab_name": "Rover_MkI_build_states", - "prefab_hash": 861674123, - "desc": "", - "name": "Rover MKI" - }, - "structure": { - "small_grid": false - } - }, - "SMGMagazine": { - "prefab": { - "prefab_name": "SMGMagazine", - "prefab_hash": -256607540, - "desc": "", - "name": "SMG Magazine" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Magazine", - "sorting_class": "Default" - } - }, - "SeedBag_Cocoa": { - "prefab": { - "prefab_name": "SeedBag_Cocoa", - "prefab_hash": 1139887531, - "desc": "", - "name": "Cocoa Seeds" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Food" - } - }, - "SeedBag_Corn": { - "prefab": { - "prefab_name": "SeedBag_Corn", - "prefab_hash": -1290755415, - "desc": "Grow a Corn.", - "name": "Corn Seeds" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Food" - } - }, - "SeedBag_Fern": { - "prefab": { - "prefab_name": "SeedBag_Fern", - "prefab_hash": -1990600883, - "desc": "Grow a Fern.", - "name": "Fern Seeds" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Food" - } - }, - "SeedBag_Mushroom": { - "prefab": { - "prefab_name": "SeedBag_Mushroom", - "prefab_hash": 311593418, - "desc": "Grow a Mushroom.", - "name": "Mushroom Seeds" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Food" - } - }, - "SeedBag_Potato": { - "prefab": { - "prefab_name": "SeedBag_Potato", - "prefab_hash": 1005571172, - "desc": "Grow a Potato.", - "name": "Potato Seeds" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Food" - } - }, - "SeedBag_Pumpkin": { - "prefab": { - "prefab_name": "SeedBag_Pumpkin", - "prefab_hash": 1423199840, - "desc": "Grow a Pumpkin.", - "name": "Pumpkin Seeds" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Food" - } - }, - "SeedBag_Rice": { - "prefab": { - "prefab_name": "SeedBag_Rice", - "prefab_hash": -1691151239, - "desc": "Grow some Rice.", - "name": "Rice Seeds" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Food" - } - }, - "SeedBag_Soybean": { - "prefab": { - "prefab_name": "SeedBag_Soybean", - "prefab_hash": 1783004244, - "desc": "Grow some Soybean.", - "name": "Soybean Seeds" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Food" - } - }, - "SeedBag_SugarCane": { - "prefab": { - "prefab_name": "SeedBag_SugarCane", - "prefab_hash": -1884103228, - "desc": "", - "name": "Sugarcane Seeds" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Food" - } - }, - "SeedBag_Switchgrass": { - "prefab": { - "prefab_name": "SeedBag_Switchgrass", - "prefab_hash": 488360169, - "desc": "", - "name": "Switchgrass Seed" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Food" - } - }, - "SeedBag_Tomato": { - "prefab": { - "prefab_name": "SeedBag_Tomato", - "prefab_hash": -1922066841, - "desc": "Grow a Tomato.", - "name": "Tomato Seeds" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Food" - } - }, - "SeedBag_Wheet": { - "prefab": { - "prefab_name": "SeedBag_Wheet", - "prefab_hash": -654756733, - "desc": "Grow some Wheat.", - "name": "Wheat Seeds" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 10, - "slot_class": "Plant", - "sorting_class": "Food" - } - }, - "SpaceShuttle": { - "prefab": { - "prefab_name": "SpaceShuttle", - "prefab_hash": -1991297271, - "desc": "An antiquated Sinotai transport craft, long since decommissioned.", - "name": "Space Shuttle" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - }, - "slots": [ - { - "name": "Captain's Seat", - "typ": "Entity" - }, - { - "name": "Passenger Seat Left", - "typ": "Entity" - }, - { - "name": "Passenger Seat Right", - "typ": "Entity" - } - ] - }, - "StopWatch": { - "prefab": { - "prefab_name": "StopWatch", - "prefab_hash": -1527229051, - "desc": "", - "name": "Stop Watch" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "Time": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Power", - "role": "Input" - } - ], - "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 - } - }, - "StructureAccessBridge": { - "prefab": { - "prefab_name": "StructureAccessBridge", - "prefab_hash": 1298920475, - "desc": "Extendable bridge that spans three grids", - "name": "Access Bridge" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureActiveVent": { - "prefab": { - "prefab_name": "StructureActiveVent", - "prefab_hash": -1129453144, - "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 ...", - "name": "Active Vent" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "modes": { - "0": "Outward", - "1": "Inward" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "", - "typ": "DataDisk" - } - ], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "None" - }, - { - "typ": "Pipe", - "role": "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 - } - }, - "StructureAdvancedComposter": { - "prefab": { - "prefab_name": "StructureAdvancedComposter", - "prefab_hash": 446212963, - "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", - "name": "Advanced Composter" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "Power", - "role": "None" - }, - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - } - ], - "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 - } - }, - "StructureAdvancedFurnace": { - "prefab": { - "prefab_name": "StructureAdvancedFurnace", - "prefab_hash": 545937711, - "desc": "The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure.", - "name": "Advanced Furnace" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "PipeLiquid", - "role": "Output2" - } - ], - "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 - } - }, - "StructureAdvancedPackagingMachine": { - "prefab": { - "prefab_name": "StructureAdvancedPackagingMachine", - "prefab_hash": -463037670, - "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.", - "name": "Advanced Packaging Machine" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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": { - "consumed_resouces": [ - "ItemCookedCondensedMilk", - "ItemCookedCorn", - "ItemCookedMushroom", - "ItemCookedPowderedEggs", - "ItemCookedPumpkin", - "ItemCookedRice", - "ItemCookedSoybean", - "ItemCookedTomato", - "ItemEmptyCan", - "ItemMilk", - "ItemPotatoBaked", - "ItemSoyOil" - ], - "processed_reagents": [] - }, - "fabricator_info": { - "tier": "Undefined", - "recipes": { - "ItemCannedCondensedMilk": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Milk": 200.0, - "Steel": 1.0 - } - }, - "ItemCannedEdamame": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Oil": 1.0, - "Soy": 15.0, - "Steel": 1.0 - } - }, - "ItemCannedMushroom": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Mushroom": 8.0, - "Oil": 1.0, - "Steel": 1.0 - } - }, - "ItemCannedPowderedEggs": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Egg": 5.0, - "Oil": 1.0, - "Steel": 1.0 - } - }, - "ItemCannedRicePudding": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Oil": 1.0, - "Rice": 5.0, - "Steel": 1.0 - } - }, - "ItemCornSoup": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Corn": 5.0, - "Oil": 1.0, - "Steel": 1.0 - } - }, - "ItemFrenchFries": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Oil": 1.0, - "Potato": 1.0, - "Steel": 1.0 - } - }, - "ItemPumpkinSoup": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Oil": 1.0, - "Pumpkin": 5.0, - "Steel": 1.0 - } - }, - "ItemTomatoSoup": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Oil": 1.0, - "Steel": 1.0, - "Tomato": 5.0 - } - } - } - }, - "memory": { - "instructions": { - "DeviceSetLock": { - "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 |", - "typ": "PrinterInstruction", - "value": 6 - }, - "EjectAllReagents": { - "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", - "typ": "PrinterInstruction", - "value": 8 - }, - "EjectReagent": { - "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 |", - "typ": "PrinterInstruction", - "value": 7 - }, - "ExecuteRecipe": { - "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 |", - "typ": "PrinterInstruction", - "value": 2 - }, - "JumpIfNextInvalid": { - "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 |", - "typ": "PrinterInstruction", - "value": 4 - }, - "JumpToAddress": { - "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 |", - "typ": "PrinterInstruction", - "value": 5 - }, - "MissingRecipeReagent": { - "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 |", - "typ": "PrinterInstruction", - "value": 9 - }, - "StackPointer": { - "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 |", - "typ": "PrinterInstruction", - "value": 1 - }, - "WaitUntilNextValid": { - "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", - "typ": "PrinterInstruction", - "value": 3 - } - }, - "memory_access": "ReadWrite", - "memory_size": 64 - } - }, - "StructureAirConditioner": { - "prefab": { - "prefab_name": "StructureAirConditioner", - "prefab_hash": -2087593337, - "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.", - "name": "Air Conditioner" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "logic": { - "logic_slot_types": { - "0": {} - }, - "logic_types": { - "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", - "RatioLiquidNitrogenInput": "Read", - "RatioLiquidNitrogenOutput": "Read", - "RatioLiquidNitrogenOutput2": "Read", - "RatioLiquidOxygenInput": "Read", - "RatioLiquidOxygenOutput": "Read", - "RatioLiquidOxygenOutput2": "Read", - "RatioLiquidVolatilesInput": "Read", - "RatioLiquidVolatilesOutput": "Read", - "RatioLiquidVolatilesOutput2": "Read", - "RatioSteamInput": "Read", - "RatioSteamOutput": "Read", - "RatioSteamOutput2": "Read", - "RatioLiquidCarbonDioxideInput": "Read", - "RatioLiquidCarbonDioxideOutput": "Read", - "RatioLiquidCarbonDioxideOutput2": "Read", - "RatioLiquidPollutantInput": "Read", - "RatioLiquidPollutantOutput": "Read", - "RatioLiquidPollutantOutput2": "Read", - "RatioLiquidNitrousOxideInput": "Read", - "RatioLiquidNitrousOxideOutput": "Read", - "RatioLiquidNitrousOxideOutput2": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Idle", - "1": "Active" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": true - }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "Pipe", - "role": "Waste" - }, - { - "typ": "Power", - "role": "None" - } - ], - "device_pins_length": 2, - "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 - } - }, - "StructureAirlock": { - "prefab": { - "prefab_name": "StructureAirlock", - "prefab_hash": -2105052344, - "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.", - "name": "Airlock" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureAirlockGate": { - "prefab": { - "prefab_name": "StructureAirlockGate", - "prefab_hash": 1736080881, - "desc": "1 x 1 modular door piece for building hangar doors.", - "name": "Small Hangar Door" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureAngledBench": { - "prefab": { - "prefab_name": "StructureAngledBench", - "prefab_hash": 1811979158, - "desc": "", - "name": "Bench (Angled)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructureArcFurnace": { - "prefab": { - "prefab_name": "StructureArcFurnace", - "prefab_hash": -247344692, - "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.", - "name": "Arc Furnace" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "Ore" - }, - { - "name": "Export", - "typ": "Ingot" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureAreaPowerControl": { - "prefab": { - "prefab_name": "StructureAreaPowerControl", - "prefab_hash": 1999523701, - "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.", - "name": "Area Power Control" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "modes": { - "0": "Idle", - "1": "Discharged", - "2": "Discharging", - "3": "Charging", - "4": "Charged" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Data Disk", - "typ": "DataDisk" - } - ], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "Input" - }, - { - "typ": "Power", - "role": "Output" - } - ], - "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 - } - }, - "StructureAreaPowerControlReversed": { - "prefab": { - "prefab_name": "StructureAreaPowerControlReversed", - "prefab_hash": -1032513487, - "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.", - "name": "Area Power Control" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "modes": { - "0": "Idle", - "1": "Discharged", - "2": "Discharging", - "3": "Charging", - "4": "Charged" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Data Disk", - "typ": "DataDisk" - } - ], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "Input" - }, - { - "typ": "Power", - "role": "Output" - } - ], - "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 - } - }, - "StructureAutoMinerSmall": { - "prefab": { - "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": { - "small_grid": true - }, - "logic": { - "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" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureAutolathe": { - "prefab": { - "prefab_name": "StructureAutolathe", - "prefab_hash": 336213101, - "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 ", - "name": "Autolathe" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "Ingot" - }, - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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": { - "consumed_resouces": [ - "ItemAstroloyIngot", - "ItemConstantanIngot", - "ItemCopperIngot", - "ItemElectrumIngot", - "ItemGoldIngot", - "ItemHastelloyIngot", - "ItemInconelIngot", - "ItemInvarIngot", - "ItemIronIngot", - "ItemLeadIngot", - "ItemNickelIngot", - "ItemSiliconIngot", - "ItemSilverIngot", - "ItemSolderIngot", - "ItemSolidFuel", - "ItemSteelIngot", - "ItemStelliteIngot", - "ItemWaspaloyIngot", - "ItemWasteIngot" - ], - "processed_reagents": [] - }, - "fabricator_info": { - "tier": "Undefined", - "recipes": { - "CardboardBox": { - "tier": "TierOne", - "time": 2.0, - "energy": 120.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 2.0 - } - }, - "ItemCableCoil": { - "tier": "TierOne", - "time": 5.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Copper": 0.5 - } - }, - "ItemCoffeeMug": { - "tier": "TierOne", - "time": 1.0, - "energy": 70.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemEggCarton": { - "tier": "TierOne", - "time": 10.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 2.0 - } - }, - "ItemEmptyCan": { - "tier": "TierOne", - "time": 1.0, - "energy": 70.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 1.0 - } - }, - "ItemEvaSuit": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Iron": 5.0 - } - }, - "ItemGlassSheets": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 2.0 - } - }, - "ItemIronFrames": { - "tier": "TierOne", - "time": 4.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 4.0 - } - }, - "ItemIronSheets": { - "tier": "TierOne", - "time": 1.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemKitAccessBridge": { - "tier": "TierOne", - "time": 30.0, - "energy": 15000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Solder": 2.0, - "Steel": 10.0 - } - }, - "ItemKitArcFurnace": { - "tier": "TierOne", - "time": 60.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Iron": 20.0 - } - }, - "ItemKitAutolathe": { - "tier": "TierOne", - "time": 180.0, - "energy": 36000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Gold": 2.0, - "Iron": 20.0 - } - }, - "ItemKitBeds": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Iron": 20.0 - } - }, - "ItemKitBlastDoor": { - "tier": "TierTwo", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 3.0, - "Steel": 15.0 - } - }, - "ItemKitCentrifuge": { - "tier": "TierOne", - "time": 60.0, - "energy": 18000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Iron": 20.0 - } - }, - "ItemKitChairs": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Iron": 20.0 - } - }, - "ItemKitChute": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ItemKitCompositeCladding": { - "tier": "TierOne", - "time": 1.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemKitCompositeFloorGrating": { - "tier": "TierOne", - "time": 3.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemKitCrate": { - "tier": "TierOne", - "time": 10.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 10.0 - } - }, - "ItemKitCrateMkII": { - "tier": "TierTwo", - "time": 10.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Gold": 5.0, - "Iron": 10.0 - } - }, - "ItemKitCrateMount": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 10.0 - } - }, - "ItemKitDeepMiner": { - "tier": "TierTwo", - "time": 180.0, - "energy": 72000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Constantan": 5.0, - "Electrum": 5.0, - "Invar": 10.0, - "Steel": 50.0 - } - }, - "ItemKitDoor": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 3.0, - "Iron": 7.0 - } - }, - "ItemKitElectronicsPrinter": { - "tier": "TierOne", - "time": 120.0, - "energy": 12000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Gold": 2.0, - "Iron": 20.0 - } - }, - "ItemKitFlagODA": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 8.0 - } - }, - "ItemKitFurnace": { - "tier": "TierOne", - "time": 120.0, - "energy": 12000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 10.0, - "Iron": 30.0 - } - }, - "ItemKitFurniture": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Iron": 20.0 - } - }, - "ItemKitHydraulicPipeBender": { - "tier": "TierOne", - "time": 180.0, - "energy": 18000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Gold": 2.0, - "Iron": 20.0 - } - }, - "ItemKitInteriorDoors": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 3.0, - "Iron": 5.0 - } - }, - "ItemKitLadder": { - "tier": "TierOne", - "time": 3.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 2.0 - } - }, - "ItemKitLocker": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemKitPipe": { - "tier": "TierOne", - "time": 5.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 0.5 - } - }, - "ItemKitRailing": { - "tier": "TierOne", - "time": 1.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemKitRecycler": { - "tier": "TierOne", - "time": 60.0, - "energy": 12000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 10.0, - "Iron": 20.0 - } - }, - "ItemKitReinforcedWindows": { - "tier": "TierOne", - "time": 7.0, - "energy": 700.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 2.0 - } - }, - "ItemKitRespawnPointWallMounted": { - "tier": "TierOne", - "time": 20.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 1.0, - "Iron": 3.0 - } - }, - "ItemKitRocketManufactory": { - "tier": "TierOne", - "time": 120.0, - "energy": 12000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Gold": 2.0, - "Iron": 20.0 - } - }, - "ItemKitSDBHopper": { - "tier": "TierOne", - "time": 10.0, - "energy": 700.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 15.0 - } - }, - "ItemKitSecurityPrinter": { - "tier": "TierOne", - "time": 180.0, - "energy": 36000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 20.0, - "Gold": 20.0, - "Steel": 20.0 - } - }, - "ItemKitSign": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ItemKitSorter": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 1.0, - "Iron": 10.0 - } - }, - "ItemKitStacker": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 10.0 - } - }, - "ItemKitStairs": { - "tier": "TierOne", - "time": 20.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 15.0 - } - }, - "ItemKitStairwell": { - "tier": "TierOne", - "time": 20.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 15.0 - } - }, - "ItemKitStandardChute": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Constantan": 2.0, - "Electrum": 2.0, - "Iron": 3.0 - } - }, - "ItemKitTables": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Iron": 20.0 - } - }, - "ItemKitToolManufactory": { - "tier": "TierOne", - "time": 120.0, - "energy": 24000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 10.0, - "Iron": 20.0 - } - }, - "ItemKitWall": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 1.0 - } - }, - "ItemKitWallArch": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 1.0 - } - }, - "ItemKitWallFlat": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 1.0 - } - }, - "ItemKitWallGeometry": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 1.0 - } - }, - "ItemKitWallIron": { - "tier": "TierOne", - "time": 1.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemKitWallPadded": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 1.0 - } - }, - "ItemKitWindowShutter": { - "tier": "TierOne", - "time": 7.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Iron": 1.0, - "Steel": 2.0 - } - }, - "ItemPlasticSheets": { - "tier": "TierOne", - "time": 1.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 0.5 - } - }, - "ItemSpaceHelmet": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Gold": 2.0 - } - }, - "ItemSteelFrames": { - "tier": "TierOne", - "time": 7.0, - "energy": 800.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 2.0 - } - }, - "ItemSteelSheets": { - "tier": "TierOne", - "time": 3.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 0.5 - } - }, - "ItemStelliteGlassSheets": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Silicon": 2.0, - "Stellite": 1.0 - } - }, - "ItemWallLight": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Iron": 1.0, - "Silicon": 1.0 - } - }, - "KitSDBSilo": { - "tier": "TierOne", - "time": 120.0, - "energy": 24000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Gold": 20.0, - "Steel": 15.0 - } - }, - "KitStructureCombustionCentrifuge": { - "tier": "TierTwo", - "time": 120.0, - "energy": 24000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Constantan": 5.0, - "Invar": 10.0, - "Steel": 20.0 - } - } - } - }, - "memory": { - "instructions": { - "DeviceSetLock": { - "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 |", - "typ": "PrinterInstruction", - "value": 6 - }, - "EjectAllReagents": { - "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", - "typ": "PrinterInstruction", - "value": 8 - }, - "EjectReagent": { - "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 |", - "typ": "PrinterInstruction", - "value": 7 - }, - "ExecuteRecipe": { - "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 |", - "typ": "PrinterInstruction", - "value": 2 - }, - "JumpIfNextInvalid": { - "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 |", - "typ": "PrinterInstruction", - "value": 4 - }, - "JumpToAddress": { - "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 |", - "typ": "PrinterInstruction", - "value": 5 - }, - "MissingRecipeReagent": { - "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 |", - "typ": "PrinterInstruction", - "value": 9 - }, - "StackPointer": { - "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 |", - "typ": "PrinterInstruction", - "value": 1 - }, - "WaitUntilNextValid": { - "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", - "typ": "PrinterInstruction", - "value": 3 - } - }, - "memory_access": "ReadWrite", - "memory_size": 64 - } - }, - "StructureAutomatedOven": { - "prefab": { - "prefab_name": "StructureAutomatedOven", - "prefab_hash": -1672404896, - "desc": "", - "name": "Automated Oven" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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": { - "consumed_resouces": [ - "ItemCorn", - "ItemEgg", - "ItemFertilizedEgg", - "ItemFlour", - "ItemMilk", - "ItemMushroom", - "ItemPotato", - "ItemPumpkin", - "ItemRice", - "ItemSoybean", - "ItemSoyOil", - "ItemTomato", - "ItemSugarCane", - "ItemCocoaTree", - "ItemCocoaPowder", - "ItemSugar" - ], - "processed_reagents": [] - }, - "fabricator_info": { - "tier": "TierOne", - "recipes": { - "ItemBreadLoaf": { - "tier": "TierOne", - "time": 10.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Flour": 200.0, - "Oil": 5.0 - } - }, - "ItemCerealBar": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Flour": 50.0 - } - }, - "ItemChocolateBar": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Cocoa": 2.0, - "Sugar": 10.0 - } - }, - "ItemChocolateCake": { - "tier": "TierOne", - "time": 30.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 5, - "reagents": { - "Cocoa": 2.0, - "Egg": 1.0, - "Flour": 50.0, - "Milk": 5.0, - "Sugar": 50.0 - } - }, - "ItemChocolateCerealBar": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Cocoa": 1.0, - "Flour": 50.0 - } - }, - "ItemCookedCondensedMilk": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Milk": 100.0 - } - }, - "ItemCookedCorn": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Corn": 1.0 - } - }, - "ItemCookedMushroom": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Mushroom": 1.0 - } - }, - "ItemCookedPowderedEggs": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Egg": 4.0 - } - }, - "ItemCookedPumpkin": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Pumpkin": 1.0 - } - }, - "ItemCookedRice": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Rice": 3.0 - } - }, - "ItemCookedSoybean": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Soy": 5.0 - } - }, - "ItemCookedTomato": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Tomato": 1.0 - } - }, - "ItemFries": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Oil": 5.0, - "Potato": 1.0 - } - }, - "ItemMuffin": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Egg": 1.0, - "Flour": 50.0, - "Milk": 10.0 - } - }, - "ItemPlainCake": { - "tier": "TierOne", - "time": 30.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Egg": 1.0, - "Flour": 50.0, - "Milk": 5.0, - "Sugar": 50.0 - } - }, - "ItemPotatoBaked": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Potato": 1.0 - } - }, - "ItemPumpkinPie": { - "tier": "TierOne", - "time": 10.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Egg": 1.0, - "Flour": 100.0, - "Milk": 10.0, - "Pumpkin": 10.0 - } - } - } - }, - "memory": { - "instructions": { - "DeviceSetLock": { - "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 |", - "typ": "PrinterInstruction", - "value": 6 - }, - "EjectAllReagents": { - "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", - "typ": "PrinterInstruction", - "value": 8 - }, - "EjectReagent": { - "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 |", - "typ": "PrinterInstruction", - "value": 7 - }, - "ExecuteRecipe": { - "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 |", - "typ": "PrinterInstruction", - "value": 2 - }, - "JumpIfNextInvalid": { - "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 |", - "typ": "PrinterInstruction", - "value": 4 - }, - "JumpToAddress": { - "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 |", - "typ": "PrinterInstruction", - "value": 5 - }, - "MissingRecipeReagent": { - "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 |", - "typ": "PrinterInstruction", - "value": 9 - }, - "StackPointer": { - "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 |", - "typ": "PrinterInstruction", - "value": 1 - }, - "WaitUntilNextValid": { - "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", - "typ": "PrinterInstruction", - "value": 3 - } - }, - "memory_access": "ReadWrite", - "memory_size": 64 - } - }, - "StructureBackLiquidPressureRegulator": { - "prefab": { - "prefab_name": "StructureBackLiquidPressureRegulator", - "prefab_hash": 2099900163, - "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.", - "name": "Liquid Back Volume Regulator" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Output" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureBackPressureRegulator": { - "prefab": { - "prefab_name": "StructureBackPressureRegulator", - "prefab_hash": -1149857558, - "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.", - "name": "Back Pressure Regulator" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureBasketHoop": { - "prefab": { - "prefab_name": "StructureBasketHoop", - "prefab_hash": -1613497288, - "desc": "", - "name": "Basket Hoop" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureBattery": { - "prefab": { - "prefab_name": "StructureBattery", - "prefab_hash": -400115994, - "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).", - "name": "Station Battery" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Charge": "Read", - "Maximum": "Read", - "Ratio": "Read", - "PowerPotential": "Read", - "PowerActual": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "Input" - }, - { - "typ": "Power", - "role": "Output" - } - ], - "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 - } - }, - "StructureBatteryCharger": { - "prefab": { - "prefab_name": "StructureBatteryCharger", - "prefab_hash": 1945930022, - "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.", - "name": "Battery Cell Charger" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Battery", - "typ": "Battery" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureBatteryChargerSmall": { - "prefab": { - "prefab_name": "StructureBatteryChargerSmall", - "prefab_hash": -761772413, - "desc": "", - "name": "Battery Charger Small" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Battery", - "typ": "Battery" - } - ], - "device": { - "connection_list": [ - { - "typ": "Power", - "role": "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 - } - }, - "StructureBatteryLarge": { - "prefab": { - "prefab_name": "StructureBatteryLarge", - "prefab_hash": -1388288459, - "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). ", - "name": "Station Battery (Large)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Charge": "Read", - "Maximum": "Read", - "Ratio": "Read", - "PowerPotential": "Read", - "PowerActual": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "Input" - }, - { - "typ": "Power", - "role": "Output" - } - ], - "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 - } - }, - "StructureBatteryMedium": { - "prefab": { - "prefab_name": "StructureBatteryMedium", - "prefab_hash": -1125305264, - "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", - "name": "Battery (Medium)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "Read", - "Charge": "Read", - "Maximum": "Read", - "Ratio": "Read", - "PowerPotential": "Read", - "PowerActual": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Power", - "role": "Input" - }, - { - "typ": "Power", - "role": "Output" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureBatterySmall": { - "prefab": { - "prefab_name": "StructureBatterySmall", - "prefab_hash": -2123455080, - "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", - "name": "Auxiliary Rocket Battery " - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "Read", - "Charge": "Read", - "Maximum": "Read", - "Ratio": "Read", - "PowerPotential": "Read", - "PowerActual": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Power", - "role": "Input" - }, - { - "typ": "Power", - "role": "Output" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureBeacon": { - "prefab": { - "prefab_name": "StructureBeacon", - "prefab_hash": -188177083, - "desc": "", - "name": "Beacon" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Color": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureBench": { - "prefab": { - "prefab_name": "StructureBench", - "prefab_hash": -2042448192, - "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.", - "name": "Powered Bench" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Appliance 1", - "typ": "Appliance" - }, - { - "name": "Appliance 2", - "typ": "Appliance" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureBench1": { - "prefab": { - "prefab_name": "StructureBench1", - "prefab_hash": 406745009, - "desc": "", - "name": "Bench (Counter Style)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Appliance 1", - "typ": "Appliance" - }, - { - "name": "Appliance 2", - "typ": "Appliance" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureBench2": { - "prefab": { - "prefab_name": "StructureBench2", - "prefab_hash": -2127086069, - "desc": "", - "name": "Bench (High Tech Style)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Appliance 1", - "typ": "Appliance" - }, - { - "name": "Appliance 2", - "typ": "Appliance" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureBench3": { - "prefab": { - "prefab_name": "StructureBench3", - "prefab_hash": -164622691, - "desc": "", - "name": "Bench (Frame Style)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Appliance 1", - "typ": "Appliance" - }, - { - "name": "Appliance 2", - "typ": "Appliance" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureBench4": { - "prefab": { - "prefab_name": "StructureBench4", - "prefab_hash": 1750375230, - "desc": "", - "name": "Bench (Workbench Style)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Appliance 1", - "typ": "Appliance" - }, - { - "name": "Appliance 2", - "typ": "Appliance" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureBlastDoor": { - "prefab": { - "prefab_name": "StructureBlastDoor", - "prefab_hash": 337416191, - "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.", - "name": "Blast Door" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureBlockBed": { - "prefab": { - "prefab_name": "StructureBlockBed", - "prefab_hash": 697908419, - "desc": "Description coming.", - "name": "Block Bed" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Bed", - "typ": "Entity" - } - ], - "device": { - "connection_list": [ - { - "typ": "Power", - "role": "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 - } - }, - "StructureBlocker": { - "prefab": { - "prefab_name": "StructureBlocker", - "prefab_hash": 378084505, - "desc": "", - "name": "Blocker" - }, - "structure": { - "small_grid": false - } - }, - "StructureCableAnalysizer": { - "prefab": { - "prefab_name": "StructureCableAnalysizer", - "prefab_hash": 1036015121, - "desc": "", - "name": "Cable Analyzer" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PowerPotential": "Read", - "PowerActual": "Read", - "PowerRequired": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "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 - } - }, - "StructureCableCorner": { - "prefab": { - "prefab_name": "StructureCableCorner", - "prefab_hash": -889269388, - "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).", - "name": "Cable (Corner)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableCorner3": { - "prefab": { - "prefab_name": "StructureCableCorner3", - "prefab_hash": 980469101, - "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).", - "name": "Cable (3-Way Corner)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableCorner3Burnt": { - "prefab": { - "prefab_name": "StructureCableCorner3Burnt", - "prefab_hash": 318437449, - "desc": "", - "name": "Burnt Cable (3-Way Corner)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableCorner3HBurnt": { - "prefab": { - "prefab_name": "StructureCableCorner3HBurnt", - "prefab_hash": 2393826, - "desc": "", - "name": "" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableCorner4": { - "prefab": { - "prefab_name": "StructureCableCorner4", - "prefab_hash": -1542172466, - "desc": "", - "name": "Cable (4-Way Corner)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableCorner4Burnt": { - "prefab": { - "prefab_name": "StructureCableCorner4Burnt", - "prefab_hash": 268421361, - "desc": "", - "name": "Burnt Cable (4-Way Corner)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableCorner4HBurnt": { - "prefab": { - "prefab_name": "StructureCableCorner4HBurnt", - "prefab_hash": -981223316, - "desc": "", - "name": "Burnt Heavy Cable (4-Way Corner)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableCornerBurnt": { - "prefab": { - "prefab_name": "StructureCableCornerBurnt", - "prefab_hash": -177220914, - "desc": "", - "name": "Burnt Cable (Corner)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableCornerH": { - "prefab": { - "prefab_name": "StructureCableCornerH", - "prefab_hash": -39359015, - "desc": "", - "name": "Heavy Cable (Corner)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableCornerH3": { - "prefab": { - "prefab_name": "StructureCableCornerH3", - "prefab_hash": -1843379322, - "desc": "", - "name": "Heavy Cable (3-Way Corner)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableCornerH4": { - "prefab": { - "prefab_name": "StructureCableCornerH4", - "prefab_hash": 205837861, - "desc": "", - "name": "Heavy Cable (4-Way Corner)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableCornerHBurnt": { - "prefab": { - "prefab_name": "StructureCableCornerHBurnt", - "prefab_hash": 1931412811, - "desc": "", - "name": "Burnt Cable (Corner)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableFuse100k": { - "prefab": { - "prefab_name": "StructureCableFuse100k", - "prefab_hash": 281380789, - "desc": "", - "name": "Fuse (100kW)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "StructureCableFuse1k": { - "prefab": { - "prefab_name": "StructureCableFuse1k", - "prefab_hash": -1103727120, - "desc": "", - "name": "Fuse (1kW)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "StructureCableFuse50k": { - "prefab": { - "prefab_name": "StructureCableFuse50k", - "prefab_hash": -349716617, - "desc": "", - "name": "Fuse (50kW)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "StructureCableFuse5k": { - "prefab": { - "prefab_name": "StructureCableFuse5k", - "prefab_hash": -631590668, - "desc": "", - "name": "Fuse (5kW)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "StructureCableJunction": { - "prefab": { - "prefab_name": "StructureCableJunction", - "prefab_hash": -175342021, - "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).", - "name": "Cable (Junction)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableJunction4": { - "prefab": { - "prefab_name": "StructureCableJunction4", - "prefab_hash": 1112047202, - "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).", - "name": "Cable (4-Way Junction)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableJunction4Burnt": { - "prefab": { - "prefab_name": "StructureCableJunction4Burnt", - "prefab_hash": -1756896811, - "desc": "", - "name": "Burnt Cable (4-Way Junction)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableJunction4HBurnt": { - "prefab": { - "prefab_name": "StructureCableJunction4HBurnt", - "prefab_hash": -115809132, - "desc": "", - "name": "Burnt Cable (4-Way Junction)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableJunction5": { - "prefab": { - "prefab_name": "StructureCableJunction5", - "prefab_hash": 894390004, - "desc": "", - "name": "Cable (5-Way Junction)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableJunction5Burnt": { - "prefab": { - "prefab_name": "StructureCableJunction5Burnt", - "prefab_hash": 1545286256, - "desc": "", - "name": "Burnt Cable (5-Way Junction)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableJunction6": { - "prefab": { - "prefab_name": "StructureCableJunction6", - "prefab_hash": -1404690610, - "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).", - "name": "Cable (6-Way Junction)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableJunction6Burnt": { - "prefab": { - "prefab_name": "StructureCableJunction6Burnt", - "prefab_hash": -628145954, - "desc": "", - "name": "Burnt Cable (6-Way Junction)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableJunction6HBurnt": { - "prefab": { - "prefab_name": "StructureCableJunction6HBurnt", - "prefab_hash": 1854404029, - "desc": "", - "name": "Burnt Cable (6-Way Junction)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableJunctionBurnt": { - "prefab": { - "prefab_name": "StructureCableJunctionBurnt", - "prefab_hash": -1620686196, - "desc": "", - "name": "Burnt Cable (Junction)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableJunctionH": { - "prefab": { - "prefab_name": "StructureCableJunctionH", - "prefab_hash": 469451637, - "desc": "", - "name": "Heavy Cable (3-Way Junction)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableJunctionH4": { - "prefab": { - "prefab_name": "StructureCableJunctionH4", - "prefab_hash": -742234680, - "desc": "", - "name": "Heavy Cable (4-Way Junction)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableJunctionH5": { - "prefab": { - "prefab_name": "StructureCableJunctionH5", - "prefab_hash": -1530571426, - "desc": "", - "name": "Heavy Cable (5-Way Junction)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableJunctionH5Burnt": { - "prefab": { - "prefab_name": "StructureCableJunctionH5Burnt", - "prefab_hash": 1701593300, - "desc": "", - "name": "Burnt Heavy Cable (5-Way Junction)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableJunctionH6": { - "prefab": { - "prefab_name": "StructureCableJunctionH6", - "prefab_hash": 1036780772, - "desc": "", - "name": "Heavy Cable (6-Way Junction)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableJunctionHBurnt": { - "prefab": { - "prefab_name": "StructureCableJunctionHBurnt", - "prefab_hash": -341365649, - "desc": "", - "name": "Burnt Cable (Junction)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableStraight": { - "prefab": { - "prefab_name": "StructureCableStraight", - "prefab_hash": 605357050, - "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).", - "name": "Cable (Straight)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableStraightBurnt": { - "prefab": { - "prefab_name": "StructureCableStraightBurnt", - "prefab_hash": -1196981113, - "desc": "", - "name": "Burnt Cable (Straight)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableStraightH": { - "prefab": { - "prefab_name": "StructureCableStraightH", - "prefab_hash": -146200530, - "desc": "", - "name": "Heavy Cable (Straight)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCableStraightHBurnt": { - "prefab": { - "prefab_name": "StructureCableStraightHBurnt", - "prefab_hash": 2085762089, - "desc": "", - "name": "Burnt Cable (Straight)" - }, - "structure": { - "small_grid": true - } - }, - "StructureCamera": { - "prefab": { - "prefab_name": "StructureCamera", - "prefab_hash": -342072665, - "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.", - "name": "Camera" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Mode": "ReadWrite", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureCapsuleTankGas": { - "prefab": { - "prefab_name": "StructureCapsuleTankGas", - "prefab_hash": -1385712131, - "desc": "", - "name": "Gas Capsule Tank Small" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.002 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - } - ], - "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 - } - }, - "StructureCapsuleTankLiquid": { - "prefab": { - "prefab_name": "StructureCapsuleTankLiquid", - "prefab_hash": 1415396263, - "desc": "", - "name": "Liquid Capsule Tank Small" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.002 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "PipeLiquid", - "role": "Input" - } - ], - "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 - } - }, - "StructureCargoStorageMedium": { - "prefab": { - "prefab_name": "StructureCargoStorageMedium", - "prefab_hash": 1151864003, - "desc": "", - "name": "Cargo Storage (Medium)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "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" - } - ], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "None" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Chute", - "role": "Input" - } - ], - "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 - } - }, - "StructureCargoStorageSmall": { - "prefab": { - "prefab_name": "StructureCargoStorageSmall", - "prefab_hash": -1493672123, - "desc": "", - "name": "Cargo Storage (Small)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "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" - } - ], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "None" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Chute", - "role": "Input" - } - ], - "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 - } - }, - "StructureCentrifuge": { - "prefab": { - "prefab_name": "StructureCentrifuge", - "prefab_hash": 690945935, - "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.", - "name": "Centrifuge" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {} - }, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Reagents": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureChair": { - "prefab": { - "prefab_name": "StructureChair", - "prefab_hash": 1167659360, - "desc": "One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs.", - "name": "Chair" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructureChairBacklessDouble": { - "prefab": { - "prefab_name": "StructureChairBacklessDouble", - "prefab_hash": 1944858936, - "desc": "", - "name": "Chair (Backless Double)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructureChairBacklessSingle": { - "prefab": { - "prefab_name": "StructureChairBacklessSingle", - "prefab_hash": 1672275150, - "desc": "", - "name": "Chair (Backless Single)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructureChairBoothCornerLeft": { - "prefab": { - "prefab_name": "StructureChairBoothCornerLeft", - "prefab_hash": -367720198, - "desc": "", - "name": "Chair (Booth Corner Left)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructureChairBoothMiddle": { - "prefab": { - "prefab_name": "StructureChairBoothMiddle", - "prefab_hash": 1640720378, - "desc": "", - "name": "Chair (Booth Middle)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructureChairRectangleDouble": { - "prefab": { - "prefab_name": "StructureChairRectangleDouble", - "prefab_hash": -1152812099, - "desc": "", - "name": "Chair (Rectangle Double)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructureChairRectangleSingle": { - "prefab": { - "prefab_name": "StructureChairRectangleSingle", - "prefab_hash": -1425428917, - "desc": "", - "name": "Chair (Rectangle Single)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructureChairThickDouble": { - "prefab": { - "prefab_name": "StructureChairThickDouble", - "prefab_hash": -1245724402, - "desc": "", - "name": "Chair (Thick Double)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructureChairThickSingle": { - "prefab": { - "prefab_name": "StructureChairThickSingle", - "prefab_hash": -1510009608, - "desc": "", - "name": "Chair (Thick Single)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructureChuteBin": { - "prefab": { - "prefab_name": "StructureChuteBin", - "prefab_hash": -850484480, - "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.", - "name": "Chute Bin" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Input", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureChuteCorner": { - "prefab": { - "prefab_name": "StructureChuteCorner", - "prefab_hash": 1360330136, - "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.", - "name": "Chute (Corner)" - }, - "structure": { - "small_grid": true - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ] - }, - "StructureChuteDigitalFlipFlopSplitterLeft": { - "prefab": { - "prefab_name": "StructureChuteDigitalFlipFlopSplitterLeft", - "prefab_hash": -810874728, - "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.", - "name": "Chute Digital Flip Flop Splitter Left" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Setting": "ReadWrite", - "Quantity": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "SettingOutput": "ReadWrite", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Chute", - "role": "Output2" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureChuteDigitalFlipFlopSplitterRight": { - "prefab": { - "prefab_name": "StructureChuteDigitalFlipFlopSplitterRight", - "prefab_hash": 163728359, - "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.", - "name": "Chute Digital Flip Flop Splitter Right" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Setting": "ReadWrite", - "Quantity": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "SettingOutput": "ReadWrite", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Chute", - "role": "Output2" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureChuteDigitalValveLeft": { - "prefab": { - "prefab_name": "StructureChuteDigitalValveLeft", - "prefab_hash": 648608238, - "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.", - "name": "Chute Digital Valve Left" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Quantity": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureChuteDigitalValveRight": { - "prefab": { - "prefab_name": "StructureChuteDigitalValveRight", - "prefab_hash": -1337091041, - "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.", - "name": "Chute Digital Valve Right" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Quantity": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureChuteFlipFlopSplitter": { - "prefab": { - "prefab_name": "StructureChuteFlipFlopSplitter", - "prefab_hash": -1446854725, - "desc": "A chute that toggles between two outputs", - "name": "Chute Flip Flop Splitter" - }, - "structure": { - "small_grid": true - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ] - }, - "StructureChuteInlet": { - "prefab": { - "prefab_name": "StructureChuteInlet", - "prefab_hash": -1469588766, - "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.", - "name": "Chute Inlet" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Lock": "ReadWrite", - "ClearMemory": "Write", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "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 - } - }, - "StructureChuteJunction": { - "prefab": { - "prefab_name": "StructureChuteJunction", - "prefab_hash": -611232514, - "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.", - "name": "Chute (Junction)" - }, - "structure": { - "small_grid": true - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ] - }, - "StructureChuteOutlet": { - "prefab": { - "prefab_name": "StructureChuteOutlet", - "prefab_hash": -1022714809, - "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.", - "name": "Chute Outlet" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Lock": "ReadWrite", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Data", - "role": "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 - } - }, - "StructureChuteOverflow": { - "prefab": { - "prefab_name": "StructureChuteOverflow", - "prefab_hash": 225377225, - "desc": "The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied.", - "name": "Chute Overflow" - }, - "structure": { - "small_grid": true - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ] - }, - "StructureChuteStraight": { - "prefab": { - "prefab_name": "StructureChuteStraight", - "prefab_hash": 168307007, - "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.", - "name": "Chute (Straight)" - }, - "structure": { - "small_grid": true - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ] - }, - "StructureChuteUmbilicalFemale": { - "prefab": { - "prefab_name": "StructureChuteUmbilicalFemale", - "prefab_hash": -1918892177, - "desc": "", - "name": "Umbilical Socket (Chute)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - } - ], - "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 - } - }, - "StructureChuteUmbilicalFemaleSide": { - "prefab": { - "prefab_name": "StructureChuteUmbilicalFemaleSide", - "prefab_hash": -659093969, - "desc": "", - "name": "Umbilical Socket Angle (Chute)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - } - ], - "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 - } - }, - "StructureChuteUmbilicalMale": { - "prefab": { - "prefab_name": "StructureChuteUmbilicalMale", - "prefab_hash": -958884053, - "desc": "0.Left\n1.Center\n2.Right", - "name": "Umbilical (Chute)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Left", - "1": "Center", - "2": "Right" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureChuteValve": { - "prefab": { - "prefab_name": "StructureChuteValve", - "prefab_hash": 434875271, - "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.", - "name": "Chute Valve" - }, - "structure": { - "small_grid": true - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ] - }, - "StructureChuteWindow": { - "prefab": { - "prefab_name": "StructureChuteWindow", - "prefab_hash": -607241919, - "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.", - "name": "Chute (Window)" - }, - "structure": { - "small_grid": true - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ] - }, - "StructureCircuitHousing": { - "prefab": { - "prefab_name": "StructureCircuitHousing", - "prefab_hash": -128473777, - "desc": "", - "name": "IC Housing" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "LineNumber": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "LineNumber": "ReadWrite", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": true - }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Power", - "role": "None" - } - ], - "device_pins_length": 6, - "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 - } - }, - "StructureCombustionCentrifuge": { - "prefab": { - "prefab_name": "StructureCombustionCentrifuge", - "prefab_hash": 1238905683, - "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 ", - "name": "Combustion Centrifuge" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.001, - "radiation_factor": 0.001 - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {}, - "2": {} - }, - "logic_types": { - "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", - "RatioLiquidNitrogenInput": "Read", - "RatioLiquidNitrogenOutput": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidOxygenInput": "Read", - "RatioLiquidOxygenOutput": "Read", - "RatioLiquidVolatiles": "Read", - "RatioLiquidVolatilesInput": "Read", - "RatioLiquidVolatilesOutput": "Read", - "RatioSteam": "Read", - "RatioSteamInput": "Read", - "RatioSteamOutput": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidCarbonDioxideInput": "Read", - "RatioLiquidCarbonDioxideOutput": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidPollutantInput": "Read", - "RatioLiquidPollutantOutput": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidNitrousOxideInput": "Read", - "RatioLiquidNitrousOxideOutput": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": true - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - }, - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Output" - } - ], - "device_pins_length": 2, - "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 - } - }, - "StructureCompositeCladdingAngled": { - "prefab": { - "prefab_name": "StructureCompositeCladdingAngled", - "prefab_hash": -1513030150, - "desc": "", - "name": "Composite Cladding (Angled)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeCladdingAngledCorner": { - "prefab": { - "prefab_name": "StructureCompositeCladdingAngledCorner", - "prefab_hash": -69685069, - "desc": "", - "name": "Composite Cladding (Angled Corner)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeCladdingAngledCornerInner": { - "prefab": { - "prefab_name": "StructureCompositeCladdingAngledCornerInner", - "prefab_hash": -1841871763, - "desc": "", - "name": "Composite Cladding (Angled Corner Inner)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeCladdingAngledCornerInnerLong": { - "prefab": { - "prefab_name": "StructureCompositeCladdingAngledCornerInnerLong", - "prefab_hash": -1417912632, - "desc": "", - "name": "Composite Cladding (Angled Corner Inner Long)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeCladdingAngledCornerInnerLongL": { - "prefab": { - "prefab_name": "StructureCompositeCladdingAngledCornerInnerLongL", - "prefab_hash": 947705066, - "desc": "", - "name": "Composite Cladding (Angled Corner Inner Long L)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeCladdingAngledCornerInnerLongR": { - "prefab": { - "prefab_name": "StructureCompositeCladdingAngledCornerInnerLongR", - "prefab_hash": -1032590967, - "desc": "", - "name": "Composite Cladding (Angled Corner Inner Long R)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeCladdingAngledCornerLong": { - "prefab": { - "prefab_name": "StructureCompositeCladdingAngledCornerLong", - "prefab_hash": 850558385, - "desc": "", - "name": "Composite Cladding (Long Angled Corner)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeCladdingAngledCornerLongR": { - "prefab": { - "prefab_name": "StructureCompositeCladdingAngledCornerLongR", - "prefab_hash": -348918222, - "desc": "", - "name": "Composite Cladding (Long Angled Mirrored Corner)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeCladdingAngledLong": { - "prefab": { - "prefab_name": "StructureCompositeCladdingAngledLong", - "prefab_hash": -387546514, - "desc": "", - "name": "Composite Cladding (Long Angled)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeCladdingCylindrical": { - "prefab": { - "prefab_name": "StructureCompositeCladdingCylindrical", - "prefab_hash": 212919006, - "desc": "", - "name": "Composite Cladding (Cylindrical)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeCladdingCylindricalPanel": { - "prefab": { - "prefab_name": "StructureCompositeCladdingCylindricalPanel", - "prefab_hash": 1077151132, - "desc": "", - "name": "Composite Cladding (Cylindrical Panel)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeCladdingPanel": { - "prefab": { - "prefab_name": "StructureCompositeCladdingPanel", - "prefab_hash": 1997436771, - "desc": "", - "name": "Composite Cladding (Panel)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeCladdingRounded": { - "prefab": { - "prefab_name": "StructureCompositeCladdingRounded", - "prefab_hash": -259357734, - "desc": "", - "name": "Composite Cladding (Rounded)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeCladdingRoundedCorner": { - "prefab": { - "prefab_name": "StructureCompositeCladdingRoundedCorner", - "prefab_hash": 1951525046, - "desc": "", - "name": "Composite Cladding (Rounded Corner)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeCladdingRoundedCornerInner": { - "prefab": { - "prefab_name": "StructureCompositeCladdingRoundedCornerInner", - "prefab_hash": 110184667, - "desc": "", - "name": "Composite Cladding (Rounded Corner Inner)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeCladdingSpherical": { - "prefab": { - "prefab_name": "StructureCompositeCladdingSpherical", - "prefab_hash": 139107321, - "desc": "", - "name": "Composite Cladding (Spherical)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeCladdingSphericalCap": { - "prefab": { - "prefab_name": "StructureCompositeCladdingSphericalCap", - "prefab_hash": 534213209, - "desc": "", - "name": "Composite Cladding (Spherical Cap)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeCladdingSphericalCorner": { - "prefab": { - "prefab_name": "StructureCompositeCladdingSphericalCorner", - "prefab_hash": 1751355139, - "desc": "", - "name": "Composite Cladding (Spherical Corner)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeDoor": { - "prefab": { - "prefab_name": "StructureCompositeDoor", - "prefab_hash": -793837322, - "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.", - "name": "Composite Door" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureCompositeFloorGrating": { - "prefab": { - "prefab_name": "StructureCompositeFloorGrating", - "prefab_hash": 324868581, - "desc": "While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings.", - "name": "Composite Floor Grating" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeFloorGrating2": { - "prefab": { - "prefab_name": "StructureCompositeFloorGrating2", - "prefab_hash": -895027741, - "desc": "", - "name": "Composite Floor Grating (Type 2)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeFloorGrating3": { - "prefab": { - "prefab_name": "StructureCompositeFloorGrating3", - "prefab_hash": -1113471627, - "desc": "", - "name": "Composite Floor Grating (Type 3)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeFloorGrating4": { - "prefab": { - "prefab_name": "StructureCompositeFloorGrating4", - "prefab_hash": 600133846, - "desc": "", - "name": "Composite Floor Grating (Type 4)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeFloorGratingOpen": { - "prefab": { - "prefab_name": "StructureCompositeFloorGratingOpen", - "prefab_hash": 2109695912, - "desc": "", - "name": "Composite Floor Grating Open" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeFloorGratingOpenRotated": { - "prefab": { - "prefab_name": "StructureCompositeFloorGratingOpenRotated", - "prefab_hash": 882307910, - "desc": "", - "name": "Composite Floor Grating Open Rotated" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeWall": { - "prefab": { - "prefab_name": "StructureCompositeWall", - "prefab_hash": 1237302061, - "desc": "Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties.", - "name": "Composite Wall (Type 1)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeWall02": { - "prefab": { - "prefab_name": "StructureCompositeWall02", - "prefab_hash": 718343384, - "desc": "", - "name": "Composite Wall (Type 2)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeWall03": { - "prefab": { - "prefab_name": "StructureCompositeWall03", - "prefab_hash": 1574321230, - "desc": "", - "name": "Composite Wall (Type 3)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeWall04": { - "prefab": { - "prefab_name": "StructureCompositeWall04", - "prefab_hash": -1011701267, - "desc": "", - "name": "Composite Wall (Type 4)" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeWindow": { - "prefab": { - "prefab_name": "StructureCompositeWindow", - "prefab_hash": -2060571986, - "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.", - "name": "Composite Window" - }, - "structure": { - "small_grid": false - } - }, - "StructureCompositeWindowIron": { - "prefab": { - "prefab_name": "StructureCompositeWindowIron", - "prefab_hash": -688284639, - "desc": "", - "name": "Iron Window" - }, - "structure": { - "small_grid": false - } - }, - "StructureComputer": { - "prefab": { - "prefab_name": "StructureComputer", - "prefab_hash": -626563514, - "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", - "name": "Computer" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {}, - "2": {} - }, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Data Disk", - "typ": "DataDisk" - }, - { - "name": "Data Disk", - "typ": "DataDisk" - }, - { - "name": "Motherboard", - "typ": "Motherboard" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureCondensationChamber": { - "prefab": { - "prefab_name": "StructureCondensationChamber", - "prefab_hash": 1420719315, - "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.", - "name": "Condensation Chamber" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.001, - "radiation_factor": 0.000050000002 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input2" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "Input" - } - ], - "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 - } - }, - "StructureCondensationValve": { - "prefab": { - "prefab_name": "StructureCondensationValve", - "prefab_hash": -965741795, - "desc": "Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction.", - "name": "Condensation Valve" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Output" - }, - { - "typ": "Pipe", - "role": "Input" - } - ], - "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 - } - }, - "StructureConsole": { - "prefab": { - "prefab_name": "StructureConsole", - "prefab_hash": 235638270, - "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.", - "name": "Console" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {} - }, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Circuit Board", - "typ": "Circuitboard" - }, - { - "name": "Data Disk", - "typ": "DataDisk" - } - ], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureConsoleDual": { - "prefab": { - "prefab_name": "StructureConsoleDual", - "prefab_hash": -722284333, - "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.", - "name": "Console Dual" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {} - }, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Circuit Board", - "typ": "Circuitboard" - }, - { - "name": "Data Disk", - "typ": "DataDisk" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureConsoleLED1x2": { - "prefab": { - "prefab_name": "StructureConsoleLED1x2", - "prefab_hash": -53151617, - "desc": "0.Default\n1.Percent\n2.Power", - "name": "LED Display (Medium)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Color": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Default", - "1": "Percent", - "2": "Power" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureConsoleLED1x3": { - "prefab": { - "prefab_name": "StructureConsoleLED1x3", - "prefab_hash": -1949054743, - "desc": "0.Default\n1.Percent\n2.Power", - "name": "LED Display (Large)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Color": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Default", - "1": "Percent", - "2": "Power" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureConsoleLED5": { - "prefab": { - "prefab_name": "StructureConsoleLED5", - "prefab_hash": -815193061, - "desc": "0.Default\n1.Percent\n2.Power", - "name": "LED Display (Small)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Color": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Default", - "1": "Percent", - "2": "Power" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureConsoleMonitor": { - "prefab": { - "prefab_name": "StructureConsoleMonitor", - "prefab_hash": 801677497, - "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.", - "name": "Console Monitor" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {} - }, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Circuit Board", - "typ": "Circuitboard" - }, - { - "name": "Data Disk", - "typ": "DataDisk" - } - ], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureControlChair": { - "prefab": { - "prefab_name": "StructureControlChair", - "prefab_hash": -1961153710, - "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.", - "name": "Control Chair" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Entity", - "typ": "Entity" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureCornerLocker": { - "prefab": { - "prefab_name": "StructureCornerLocker", - "prefab_hash": -1968255729, - "desc": "", - "name": "Corner Locker" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructureCrateMount": { - "prefab": { - "prefab_name": "StructureCrateMount", - "prefab_hash": -733500083, - "desc": "", - "name": "Container Mount" - }, - "structure": { - "small_grid": true - }, - "slots": [ - { - "name": "Container Slot", - "typ": "None" - } - ] - }, - "StructureCryoTube": { - "prefab": { - "prefab_name": "StructureCryoTube", - "prefab_hash": 1938254586, - "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.", - "name": "CryoTube" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Bed", - "typ": "Entity" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureCryoTubeHorizontal": { - "prefab": { - "prefab_name": "StructureCryoTubeHorizontal", - "prefab_hash": 1443059329, - "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.", - "name": "Cryo Tube Horizontal" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.005, - "radiation_factor": 0.005 - }, - "logic": { - "logic_slot_types": { - "0": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Player", - "typ": "Entity" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureCryoTubeVertical": { - "prefab": { - "prefab_name": "StructureCryoTubeVertical", - "prefab_hash": -1381321828, - "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.", - "name": "Cryo Tube Vertical" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.005, - "radiation_factor": 0.005 - }, - "logic": { - "logic_slot_types": { - "0": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Player", - "typ": "Entity" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureDaylightSensor": { - "prefab": { - "prefab_name": "StructureDaylightSensor", - "prefab_hash": 1076425094, - "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.", - "name": "Daylight Sensor" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Mode": "ReadWrite", - "Activate": "ReadWrite", - "Horizontal": "Read", - "Vertical": "Read", - "SolarAngle": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "SolarIrradiance": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Default", - "1": "Horizontal", - "2": "Vertical" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureDeepMiner": { - "prefab": { - "prefab_name": "StructureDeepMiner", - "prefab_hash": 265720906, - "desc": "Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s", - "name": "Deep Miner" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {} - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureDigitalValve": { - "prefab": { - "prefab_name": "StructureDigitalValve", - "prefab_hash": -1280984102, - "desc": "The digital valve allows Stationeers to create logic-controlled valves and pipe networks.", - "name": "Digital Valve" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureDiode": { - "prefab": { - "prefab_name": "StructureDiode", - "prefab_hash": 1944485013, - "desc": "", - "name": "LED" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Color": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureDiodeSlide": { - "prefab": { - "prefab_name": "StructureDiodeSlide", - "prefab_hash": 576516101, - "desc": "", - "name": "Diode Slide" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureDockPortSide": { - "prefab": { - "prefab_name": "StructureDockPortSide", - "prefab_hash": -137465079, - "desc": "", - "name": "Dock (Port Side)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Power", - "role": "None" - }, - { - "typ": "Data", - "role": "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 - } - }, - "StructureDrinkingFountain": { - "prefab": { - "prefab_name": "StructureDrinkingFountain", - "prefab_hash": 1968371847, - "desc": "", - "name": "" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureElectrolyzer": { - "prefab": { - "prefab_name": "StructureElectrolyzer", - "prefab_hash": -1668992663, - "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.", - "name": "Electrolyzer" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "logic": { - "logic_slot_types": { - "0": {} - }, - "logic_types": { - "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", - "RatioLiquidNitrogenInput": "Read", - "RatioLiquidNitrogenOutput": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidOxygenInput": "Read", - "RatioLiquidOxygenOutput": "Read", - "RatioLiquidVolatiles": "Read", - "RatioLiquidVolatilesInput": "Read", - "RatioLiquidVolatilesOutput": "Read", - "RatioSteam": "Read", - "RatioSteamInput": "Read", - "RatioSteamOutput": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidCarbonDioxideInput": "Read", - "RatioLiquidCarbonDioxideOutput": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidPollutantInput": "Read", - "RatioLiquidPollutantOutput": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidNitrousOxideInput": "Read", - "RatioLiquidNitrousOxideOutput": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Idle", - "1": "Active" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": true - }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "Power", - "role": "None" - } - ], - "device_pins_length": 2, - "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 - } - }, - "StructureElectronicsPrinter": { - "prefab": { - "prefab_name": "StructureElectronicsPrinter", - "prefab_hash": 1307165496, - "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.", - "name": "Electronics Printer" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "Ingot" - }, - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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": { - "consumed_resouces": [ - "ItemAstroloyIngot", - "ItemConstantanIngot", - "ItemCopperIngot", - "ItemElectrumIngot", - "ItemGoldIngot", - "ItemHastelloyIngot", - "ItemInconelIngot", - "ItemInvarIngot", - "ItemIronIngot", - "ItemLeadIngot", - "ItemNickelIngot", - "ItemSiliconIngot", - "ItemSilverIngot", - "ItemSolderIngot", - "ItemSolidFuel", - "ItemSteelIngot", - "ItemStelliteIngot", - "ItemWaspaloyIngot", - "ItemWasteIngot" - ], - "processed_reagents": [] - }, - "fabricator_info": { - "tier": "Undefined", - "recipes": { - "ApplianceChemistryStation": { - "tier": "TierOne", - "time": 45.0, - "energy": 1500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 1.0, - "Steel": 5.0 - } - }, - "ApplianceDeskLampLeft": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Iron": 2.0, - "Silicon": 1.0 - } - }, - "ApplianceDeskLampRight": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Iron": 2.0, - "Silicon": 1.0 - } - }, - "ApplianceMicrowave": { - "tier": "TierOne", - "time": 45.0, - "energy": 1500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 1.0, - "Iron": 5.0 - } - }, - "AppliancePackagingMachine": { - "tier": "TierOne", - "time": 30.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 1.0, - "Iron": 10.0 - } - }, - "AppliancePaintMixer": { - "tier": "TierOne", - "time": 45.0, - "energy": 1500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 1.0, - "Steel": 5.0 - } - }, - "AppliancePlantGeneticAnalyzer": { - "tier": "TierOne", - "time": 45.0, - "energy": 4500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 1.0, - "Steel": 5.0 - } - }, - "AppliancePlantGeneticSplicer": { - "tier": "TierOne", - "time": 50.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Inconel": 10.0, - "Stellite": 20.0 - } - }, - "AppliancePlantGeneticStabilizer": { - "tier": "TierOne", - "time": 50.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Inconel": 10.0, - "Stellite": 20.0 - } - }, - "ApplianceReagentProcessor": { - "tier": "TierOne", - "time": 45.0, - "energy": 1500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 1.0, - "Iron": 5.0 - } - }, - "ApplianceTabletDock": { - "tier": "TierOne", - "time": 30.0, - "energy": 750.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 2.0, - "Gold": 1.0, - "Iron": 5.0, - "Silicon": 1.0 - } - }, - "AutolathePrinterMod": { - "tier": "TierTwo", - "time": 180.0, - "energy": 72000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Constantan": 8.0, - "Electrum": 8.0, - "Solder": 8.0, - "Steel": 35.0 - } - }, - "Battery_Wireless_cell": { - "tier": "TierOne", - "time": 10.0, - "energy": 10000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Gold": 2.0, - "Iron": 2.0 - } - }, - "Battery_Wireless_cell_Big": { - "tier": "TierOne", - "time": 20.0, - "energy": 20000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 15.0, - "Gold": 5.0, - "Steel": 5.0 - } - }, - "CartridgeAtmosAnalyser": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 1.0 - } - }, - "CartridgeConfiguration": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 1.0 - } - }, - "CartridgeElectronicReader": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 1.0 - } - }, - "CartridgeGPS": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 1.0 - } - }, - "CartridgeMedicalAnalyser": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 1.0 - } - }, - "CartridgeNetworkAnalyser": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 1.0 - } - }, - "CartridgeOreScanner": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 1.0 - } - }, - "CartridgeOreScannerColor": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Constantan": 5.0, - "Electrum": 5.0, - "Invar": 5.0, - "Silicon": 5.0 - } - }, - "CartridgePlantAnalyser": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 1.0 - } - }, - "CartridgeTracker": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 1.0 - } - }, - "CircuitboardAdvAirlockControl": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 1.0 - } - }, - "CircuitboardAirControl": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "CircuitboardAirlockControl": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 1.0 - } - }, - "CircuitboardDoorControl": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "CircuitboardGasDisplay": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 1.0 - } - }, - "CircuitboardGraphDisplay": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "CircuitboardHashDisplay": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "CircuitboardModeControl": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "CircuitboardPowerControl": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "CircuitboardShipDisplay": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "CircuitboardSolarControl": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "DynamicLight": { - "tier": "TierOne", - "time": 20.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 5.0 - } - }, - "ElectronicPrinterMod": { - "tier": "TierOne", - "time": 180.0, - "energy": 72000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Constantan": 8.0, - "Electrum": 8.0, - "Solder": 8.0, - "Steel": 35.0 - } - }, - "ItemAdvancedTablet": { - "tier": "TierTwo", - "time": 60.0, - "energy": 12000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 6, - "reagents": { - "Copper": 5.5, - "Electrum": 1.0, - "Gold": 12.0, - "Iron": 3.0, - "Solder": 5.0, - "Steel": 2.0 - } - }, - "ItemAreaPowerControl": { - "tier": "TierOne", - "time": 5.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Iron": 5.0, - "Solder": 3.0 - } - }, - "ItemBatteryCell": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 2.0, - "Iron": 2.0 - } - }, - "ItemBatteryCellLarge": { - "tier": "TierOne", - "time": 20.0, - "energy": 20000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Gold": 5.0, - "Steel": 5.0 - } - }, - "ItemBatteryCellNuclear": { - "tier": "TierTwo", - "time": 180.0, - "energy": 360000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Astroloy": 10.0, - "Inconel": 5.0, - "Steel": 5.0 - } - }, - "ItemBatteryCharger": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 10.0 - } - }, - "ItemBatteryChargerSmall": { - "tier": "TierOne", - "time": 1.0, - "energy": 250.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 2.0, - "Iron": 5.0 - } - }, - "ItemCableAnalyser": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Iron": 1.0, - "Silicon": 2.0 - } - }, - "ItemCableCoil": { - "tier": "TierOne", - "time": 1.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Copper": 0.5 - } - }, - "ItemCableCoilHeavy": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 0.5, - "Gold": 0.5 - } - }, - "ItemCableFuse": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Iron": 5.0 - } - }, - "ItemCreditCard": { - "tier": "TierOne", - "time": 5.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Silicon": 5.0 - } - }, - "ItemDataDisk": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "ItemElectronicParts": { - "tier": "TierOne", - "time": 5.0, - "energy": 10.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 2.0, - "Iron": 3.0 - } - }, - "ItemFlashingLight": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 3.0, - "Iron": 2.0 - } - }, - "ItemHEMDroidRepairKit": { - "tier": "TierTwo", - "time": 40.0, - "energy": 1500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Electrum": 10.0, - "Inconel": 5.0, - "Solder": 5.0 - } - }, - "ItemIntegratedCircuit10": { - "tier": "TierOne", - "time": 40.0, - "energy": 4000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Electrum": 5.0, - "Gold": 10.0, - "Solder": 2.0, - "Steel": 4.0 - } - }, - "ItemKitAIMeE": { - "tier": "TierTwo", - "time": 25.0, - "energy": 2200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 7, - "reagents": { - "Astroloy": 10.0, - "Constantan": 8.0, - "Copper": 5.0, - "Electrum": 15.0, - "Gold": 5.0, - "Invar": 7.0, - "Steel": 22.0 - } - }, - "ItemKitAdvancedComposter": { - "tier": "TierTwo", - "time": 55.0, - "energy": 20000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 15.0, - "Electrum": 20.0, - "Solder": 5.0, - "Steel": 30.0 - } - }, - "ItemKitAdvancedFurnace": { - "tier": "TierTwo", - "time": 180.0, - "energy": 36000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 6, - "reagents": { - "Copper": 25.0, - "Electrum": 15.0, - "Gold": 5.0, - "Silicon": 6.0, - "Solder": 8.0, - "Steel": 30.0 - } - }, - "ItemKitAdvancedPackagingMachine": { - "tier": "TierTwo", - "time": 60.0, - "energy": 18000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Constantan": 10.0, - "Copper": 10.0, - "Electrum": 15.0, - "Steel": 20.0 - } - }, - "ItemKitAutoMinerSmall": { - "tier": "TierTwo", - "time": 90.0, - "energy": 9000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 5, - "reagents": { - "Copper": 15.0, - "Electrum": 50.0, - "Invar": 25.0, - "Iron": 15.0, - "Steel": 100.0 - } - }, - "ItemKitAutomatedOven": { - "tier": "TierTwo", - "time": 50.0, - "energy": 15000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 5, - "reagents": { - "Constantan": 5.0, - "Copper": 15.0, - "Gold": 10.0, - "Solder": 10.0, - "Steel": 25.0 - } - }, - "ItemKitBattery": { - "tier": "TierOne", - "time": 120.0, - "energy": 12000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 20.0, - "Gold": 20.0, - "Steel": 20.0 - } - }, - "ItemKitBatteryLarge": { - "tier": "TierTwo", - "time": 240.0, - "energy": 96000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 6, - "reagents": { - "Copper": 35.0, - "Electrum": 10.0, - "Gold": 35.0, - "Silicon": 5.0, - "Steel": 35.0, - "Stellite": 2.0 - } - }, - "ItemKitBeacon": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 2.0, - "Gold": 4.0, - "Solder": 2.0, - "Steel": 5.0 - } - }, - "ItemKitComputer": { - "tier": "TierOne", - "time": 60.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Gold": 5.0, - "Iron": 5.0 - } - }, - "ItemKitConsole": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 3.0, - "Iron": 2.0 - } - }, - "ItemKitDynamicGenerator": { - "tier": "TierOne", - "time": 120.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Gold": 15.0, - "Nickel": 15.0, - "Solder": 5.0, - "Steel": 20.0 - } - }, - "ItemKitElevator": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 2.0, - "Gold": 4.0, - "Solder": 2.0, - "Steel": 2.0 - } - }, - "ItemKitFridgeBig": { - "tier": "TierOne", - "time": 10.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 10.0, - "Gold": 5.0, - "Iron": 20.0, - "Steel": 15.0 - } - }, - "ItemKitFridgeSmall": { - "tier": "TierOne", - "time": 10.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 2.0, - "Iron": 10.0 - } - }, - "ItemKitGasGenerator": { - "tier": "TierOne", - "time": 120.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 10.0, - "Iron": 50.0 - } - }, - "ItemKitGroundTelescope": { - "tier": "TierOne", - "time": 150.0, - "energy": 24000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Electrum": 15.0, - "Solder": 10.0, - "Steel": 25.0 - } - }, - "ItemKitGrowLight": { - "tier": "TierOne", - "time": 30.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Electrum": 10.0, - "Steel": 5.0 - } - }, - "ItemKitHarvie": { - "tier": "TierOne", - "time": 60.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 5, - "reagents": { - "Copper": 15.0, - "Electrum": 10.0, - "Silicon": 5.0, - "Solder": 5.0, - "Steel": 10.0 - } - }, - "ItemKitHorizontalAutoMiner": { - "tier": "TierTwo", - "time": 60.0, - "energy": 60000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 5, - "reagents": { - "Copper": 7.0, - "Electrum": 25.0, - "Invar": 15.0, - "Iron": 8.0, - "Steel": 60.0 - } - }, - "ItemKitHydroponicStation": { - "tier": "TierOne", - "time": 120.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 20.0, - "Gold": 5.0, - "Nickel": 5.0, - "Steel": 10.0 - } - }, - "ItemKitLandingPadAtmos": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 1.0, - "Steel": 5.0 - } - }, - "ItemKitLandingPadBasic": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 1.0, - "Steel": 5.0 - } - }, - "ItemKitLandingPadWaypoint": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 1.0, - "Steel": 5.0 - } - }, - "ItemKitLargeSatelliteDish": { - "tier": "TierOne", - "time": 240.0, - "energy": 72000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Astroloy": 100.0, - "Inconel": 50.0, - "Waspaloy": 20.0 - } - }, - "ItemKitLogicCircuit": { - "tier": "TierOne", - "time": 40.0, - "energy": 2000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Solder": 2.0, - "Steel": 4.0 - } - }, - "ItemKitLogicInputOutput": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 1.0, - "Gold": 1.0 - } - }, - "ItemKitLogicMemory": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 1.0, - "Gold": 1.0 - } - }, - "ItemKitLogicProcessor": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Gold": 2.0 - } - }, - "ItemKitLogicSwitch": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 1.0, - "Gold": 1.0 - } - }, - "ItemKitLogicTransmitter": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 1.0, - "Electrum": 3.0, - "Gold": 2.0, - "Silicon": 5.0 - } - }, - "ItemKitMusicMachines": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Gold": 2.0 - } - }, - "ItemKitPowerTransmitter": { - "tier": "TierOne", - "time": 20.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 7.0, - "Gold": 5.0, - "Steel": 3.0 - } - }, - "ItemKitPowerTransmitterOmni": { - "tier": "TierOne", - "time": 20.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 8.0, - "Gold": 4.0, - "Steel": 4.0 - } - }, - "ItemKitPressurePlate": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Gold": 2.0 - } - }, - "ItemKitResearchMachine": { - "tier": "TierOne", - "time": 5.0, - "energy": 10.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 2.0, - "Iron": 9.0 - } - }, - "ItemKitSatelliteDish": { - "tier": "TierOne", - "time": 120.0, - "energy": 24000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Electrum": 15.0, - "Solder": 10.0, - "Steel": 20.0 - } - }, - "ItemKitSensor": { - "tier": "TierOne", - "time": 5.0, - "energy": 10.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 3.0 - } - }, - "ItemKitSmallSatelliteDish": { - "tier": "TierOne", - "time": 60.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 10.0, - "Gold": 5.0 - } - }, - "ItemKitSolarPanel": { - "tier": "TierOne", - "time": 60.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 20.0, - "Gold": 5.0, - "Steel": 15.0 - } - }, - "ItemKitSolarPanelBasic": { - "tier": "TierOne", - "time": 30.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Gold": 2.0, - "Iron": 10.0 - } - }, - "ItemKitSolarPanelBasicReinforced": { - "tier": "TierTwo", - "time": 120.0, - "energy": 24000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 10.0, - "Electrum": 2.0, - "Invar": 10.0, - "Steel": 10.0 - } - }, - "ItemKitSolarPanelReinforced": { - "tier": "TierTwo", - "time": 120.0, - "energy": 24000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Astroloy": 15.0, - "Copper": 20.0, - "Electrum": 5.0, - "Steel": 10.0 - } - }, - "ItemKitSolidGenerator": { - "tier": "TierOne", - "time": 120.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 10.0, - "Iron": 50.0 - } - }, - "ItemKitSpeaker": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Steel": 5.0 - } - }, - "ItemKitStirlingEngine": { - "tier": "TierOne", - "time": 60.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 20.0, - "Gold": 5.0, - "Steel": 30.0 - } - }, - "ItemKitTransformer": { - "tier": "TierOne", - "time": 60.0, - "energy": 12000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 5.0, - "Steel": 10.0 - } - }, - "ItemKitTransformerSmall": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 1.0, - "Iron": 10.0 - } - }, - "ItemKitTurbineGenerator": { - "tier": "TierOne", - "time": 60.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 2.0, - "Gold": 4.0, - "Iron": 5.0, - "Solder": 4.0 - } - }, - "ItemKitUprightWindTurbine": { - "tier": "TierOne", - "time": 60.0, - "energy": 12000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Gold": 5.0, - "Iron": 10.0 - } - }, - "ItemKitVendingMachine": { - "tier": "TierOne", - "time": 60.0, - "energy": 15000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Electrum": 50.0, - "Gold": 50.0, - "Solder": 10.0, - "Steel": 20.0 - } - }, - "ItemKitVendingMachineRefrigerated": { - "tier": "TierTwo", - "time": 60.0, - "energy": 25000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Electrum": 80.0, - "Gold": 60.0, - "Solder": 30.0, - "Steel": 40.0 - } - }, - "ItemKitWeatherStation": { - "tier": "TierOne", - "time": 60.0, - "energy": 12000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 5.0, - "Gold": 3.0, - "Iron": 8.0, - "Steel": 3.0 - } - }, - "ItemKitWindTurbine": { - "tier": "TierTwo", - "time": 60.0, - "energy": 12000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Electrum": 5.0, - "Steel": 20.0 - } - }, - "ItemLabeller": { - "tier": "TierOne", - "time": 15.0, - "energy": 800.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 1.0, - "Iron": 3.0 - } - }, - "ItemLaptop": { - "tier": "TierTwo", - "time": 60.0, - "energy": 18000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 5, - "reagents": { - "Copper": 5.5, - "Electrum": 5.0, - "Gold": 12.0, - "Solder": 5.0, - "Steel": 2.0 - } - }, - "ItemPowerConnector": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 3.0, - "Iron": 10.0 - } - }, - "ItemResearchCapsule": { - "tier": "TierOne", - "time": 3.0, - "energy": 400.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 2.0, - "Iron": 9.0 - } - }, - "ItemResearchCapsuleGreen": { - "tier": "TierOne", - "time": 5.0, - "energy": 10.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Astroloy": 2.0, - "Copper": 3.0, - "Gold": 2.0, - "Iron": 9.0 - } - }, - "ItemResearchCapsuleRed": { - "tier": "TierOne", - "time": 8.0, - "energy": 50.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 2.0, - "Iron": 2.0 - } - }, - "ItemResearchCapsuleYellow": { - "tier": "TierOne", - "time": 5.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Astroloy": 3.0, - "Copper": 3.0, - "Gold": 2.0, - "Iron": 9.0 - } - }, - "ItemSoundCartridgeBass": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 2.0, - "Silicon": 2.0 - } - }, - "ItemSoundCartridgeDrums": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 2.0, - "Silicon": 2.0 - } - }, - "ItemSoundCartridgeLeads": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 2.0, - "Silicon": 2.0 - } - }, - "ItemSoundCartridgeSynth": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 2.0, - "Silicon": 2.0 - } - }, - "ItemTablet": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 2.0, - "Solder": 5.0 - } - }, - "ItemWallLight": { - "tier": "TierOne", - "time": 5.0, - "energy": 10.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 1.0 - } - }, - "MotherboardComms": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 5.0, - "Electrum": 2.0, - "Gold": 5.0, - "Silver": 5.0 - } - }, - "MotherboardLogic": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "MotherboardProgrammableChip": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "MotherboardRockets": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 5.0, - "Solder": 5.0 - } - }, - "MotherboardSorter": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Gold": 5.0, - "Silver": 5.0 - } - }, - "PipeBenderMod": { - "tier": "TierTwo", - "time": 180.0, - "energy": 72000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Constantan": 8.0, - "Electrum": 8.0, - "Solder": 8.0, - "Steel": 35.0 - } - }, - "PortableComposter": { - "tier": "TierOne", - "time": 55.0, - "energy": 20000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 15.0, - "Steel": 10.0 - } - }, - "PortableSolarPanel": { - "tier": "TierOne", - "time": 5.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 3.0, - "Iron": 5.0 - } - }, - "ToolPrinterMod": { - "tier": "TierTwo", - "time": 180.0, - "energy": 72000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Constantan": 8.0, - "Electrum": 8.0, - "Solder": 8.0, - "Steel": 35.0 - } - } - } - }, - "memory": { - "instructions": { - "DeviceSetLock": { - "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 |", - "typ": "PrinterInstruction", - "value": 6 - }, - "EjectAllReagents": { - "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", - "typ": "PrinterInstruction", - "value": 8 - }, - "EjectReagent": { - "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 |", - "typ": "PrinterInstruction", - "value": 7 - }, - "ExecuteRecipe": { - "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 |", - "typ": "PrinterInstruction", - "value": 2 - }, - "JumpIfNextInvalid": { - "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 |", - "typ": "PrinterInstruction", - "value": 4 - }, - "JumpToAddress": { - "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 |", - "typ": "PrinterInstruction", - "value": 5 - }, - "MissingRecipeReagent": { - "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 |", - "typ": "PrinterInstruction", - "value": 9 - }, - "StackPointer": { - "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 |", - "typ": "PrinterInstruction", - "value": 1 - }, - "WaitUntilNextValid": { - "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", - "typ": "PrinterInstruction", - "value": 3 - } - }, - "memory_access": "ReadWrite", - "memory_size": 64 - } - }, - "StructureElevatorLevelFront": { - "prefab": { - "prefab_name": "StructureElevatorLevelFront", - "prefab_hash": -827912235, - "desc": "", - "name": "Elevator Level (Cabled)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "ElevatorSpeed": "ReadWrite", - "ElevatorLevel": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Elevator", - "role": "None" - }, - { - "typ": "Elevator", - "role": "None" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureElevatorLevelIndustrial": { - "prefab": { - "prefab_name": "StructureElevatorLevelIndustrial", - "prefab_hash": 2060648791, - "desc": "", - "name": "Elevator Level" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "ElevatorSpeed": "ReadWrite", - "ElevatorLevel": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Elevator", - "role": "None" - }, - { - "typ": "Elevator", - "role": "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 - } - }, - "StructureElevatorShaft": { - "prefab": { - "prefab_name": "StructureElevatorShaft", - "prefab_hash": 826144419, - "desc": "", - "name": "Elevator Shaft (Cabled)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "ElevatorSpeed": "ReadWrite", - "ElevatorLevel": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Elevator", - "role": "None" - }, - { - "typ": "Elevator", - "role": "None" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureElevatorShaftIndustrial": { - "prefab": { - "prefab_name": "StructureElevatorShaftIndustrial", - "prefab_hash": 1998354978, - "desc": "", - "name": "Elevator Shaft" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "ElevatorSpeed": "ReadWrite", - "ElevatorLevel": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Elevator", - "role": "None" - }, - { - "typ": "Elevator", - "role": "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 - } - }, - "StructureEmergencyButton": { - "prefab": { - "prefab_name": "StructureEmergencyButton", - "prefab_hash": 1668452680, - "desc": "Description coming.", - "name": "Important Button" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureEngineMountTypeA1": { - "prefab": { - "prefab_name": "StructureEngineMountTypeA1", - "prefab_hash": 2035781224, - "desc": "", - "name": "Engine Mount (Type A1)" - }, - "structure": { - "small_grid": false - } - }, - "StructureEvaporationChamber": { - "prefab": { - "prefab_name": "StructureEvaporationChamber", - "prefab_hash": -1429782576, - "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.", - "name": "Evaporation Chamber" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.001, - "radiation_factor": 0.000050000002 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input2" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "Input" - } - ], - "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 - } - }, - "StructureExpansionValve": { - "prefab": { - "prefab_name": "StructureExpansionValve", - "prefab_hash": 195298587, - "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.", - "name": "Expansion Valve" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "PipeLiquid", - "role": "Input" - } - ], - "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 - } - }, - "StructureFairingTypeA1": { - "prefab": { - "prefab_name": "StructureFairingTypeA1", - "prefab_hash": 1622567418, - "desc": "", - "name": "Fairing (Type A1)" - }, - "structure": { - "small_grid": false - } - }, - "StructureFairingTypeA2": { - "prefab": { - "prefab_name": "StructureFairingTypeA2", - "prefab_hash": -104908736, - "desc": "", - "name": "Fairing (Type A2)" - }, - "structure": { - "small_grid": false - } - }, - "StructureFairingTypeA3": { - "prefab": { - "prefab_name": "StructureFairingTypeA3", - "prefab_hash": -1900541738, - "desc": "", - "name": "Fairing (Type A3)" - }, - "structure": { - "small_grid": false - } - }, - "StructureFiltration": { - "prefab": { - "prefab_name": "StructureFiltration", - "prefab_hash": -348054045, - "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", - "name": "Filtration" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {}, - "2": {} - }, - "logic_types": { - "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", - "RatioLiquidNitrogenInput": "Read", - "RatioLiquidNitrogenOutput": "Read", - "RatioLiquidNitrogenOutput2": "Read", - "RatioLiquidOxygenInput": "Read", - "RatioLiquidOxygenOutput": "Read", - "RatioLiquidOxygenOutput2": "Read", - "RatioLiquidVolatilesInput": "Read", - "RatioLiquidVolatilesOutput": "Read", - "RatioLiquidVolatilesOutput2": "Read", - "RatioSteamInput": "Read", - "RatioSteamOutput": "Read", - "RatioSteamOutput2": "Read", - "RatioLiquidCarbonDioxideInput": "Read", - "RatioLiquidCarbonDioxideOutput": "Read", - "RatioLiquidCarbonDioxideOutput2": "Read", - "RatioLiquidPollutantInput": "Read", - "RatioLiquidPollutantOutput": "Read", - "RatioLiquidPollutantOutput2": "Read", - "RatioLiquidNitrousOxideInput": "Read", - "RatioLiquidNitrousOxideOutput": "Read", - "RatioLiquidNitrousOxideOutput2": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Idle", - "1": "Active" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": true - }, - "slots": [ - { - "name": "Gas Filter", - "typ": "GasFilter" - }, - { - "name": "Gas Filter", - "typ": "GasFilter" - }, - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "Pipe", - "role": "Waste" - }, - { - "typ": "Power", - "role": "None" - } - ], - "device_pins_length": 2, - "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 - } - }, - "StructureFlagSmall": { - "prefab": { - "prefab_name": "StructureFlagSmall", - "prefab_hash": -1529819532, - "desc": "", - "name": "Small Flag" - }, - "structure": { - "small_grid": true - } - }, - "StructureFlashingLight": { - "prefab": { - "prefab_name": "StructureFlashingLight", - "prefab_hash": -1535893860, - "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'.", - "name": "Flashing Light" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureFlatBench": { - "prefab": { - "prefab_name": "StructureFlatBench", - "prefab_hash": 839890807, - "desc": "", - "name": "Bench (Flat)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructureFloorDrain": { - "prefab": { - "prefab_name": "StructureFloorDrain", - "prefab_hash": 1048813293, - "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.", - "name": "Passive Liquid Inlet" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructureFrame": { - "prefab": { - "prefab_name": "StructureFrame", - "prefab_hash": 1432512808, - "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.", - "name": "Steel Frame" - }, - "structure": { - "small_grid": false - } - }, - "StructureFrameCorner": { - "prefab": { - "prefab_name": "StructureFrameCorner", - "prefab_hash": -2112390778, - "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.", - "name": "Steel Frame (Corner)" - }, - "structure": { - "small_grid": false - } - }, - "StructureFrameCornerCut": { - "prefab": { - "prefab_name": "StructureFrameCornerCut", - "prefab_hash": 271315669, - "desc": "0.Mode0\n1.Mode1", - "name": "Steel Frame (Corner Cut)" - }, - "structure": { - "small_grid": false - } - }, - "StructureFrameIron": { - "prefab": { - "prefab_name": "StructureFrameIron", - "prefab_hash": -1240951678, - "desc": "", - "name": "Iron Frame" - }, - "structure": { - "small_grid": false - } - }, - "StructureFrameSide": { - "prefab": { - "prefab_name": "StructureFrameSide", - "prefab_hash": -302420053, - "desc": "More durable than the Iron Frame, steel frames also provide variations for more ornate constructions.", - "name": "Steel Frame (Side)" - }, - "structure": { - "small_grid": false - } - }, - "StructureFridgeBig": { - "prefab": { - "prefab_name": "StructureFridgeBig", - "prefab_hash": 958476921, - "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.", - "name": "Fridge (Large)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": 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" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureFridgeSmall": { - "prefab": { - "prefab_name": "StructureFridgeSmall", - "prefab_hash": 751887598, - "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.", - "name": "Fridge Small" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - } - ], - "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 - } - }, - "StructureFurnace": { - "prefab": { - "prefab_name": "StructureFurnace", - "prefab_hash": 1947944864, - "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.", - "name": "Furnace" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "PipeLiquid", - "role": "Output2" - }, - { - "typ": "Data", - "role": "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 - } - }, - "StructureFuselageTypeA1": { - "prefab": { - "prefab_name": "StructureFuselageTypeA1", - "prefab_hash": 1033024712, - "desc": "", - "name": "Fuselage (Type A1)" - }, - "structure": { - "small_grid": false - } - }, - "StructureFuselageTypeA2": { - "prefab": { - "prefab_name": "StructureFuselageTypeA2", - "prefab_hash": -1533287054, - "desc": "", - "name": "Fuselage (Type A2)" - }, - "structure": { - "small_grid": false - } - }, - "StructureFuselageTypeA4": { - "prefab": { - "prefab_name": "StructureFuselageTypeA4", - "prefab_hash": 1308115015, - "desc": "", - "name": "Fuselage (Type A4)" - }, - "structure": { - "small_grid": false - } - }, - "StructureFuselageTypeC5": { - "prefab": { - "prefab_name": "StructureFuselageTypeC5", - "prefab_hash": 147395155, - "desc": "", - "name": "Fuselage (Type C5)" - }, - "structure": { - "small_grid": false - } - }, - "StructureGasGenerator": { - "prefab": { - "prefab_name": "StructureGasGenerator", - "prefab_hash": 1165997963, - "desc": "", - "name": "Gas Fuel Generator" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.01, - "radiation_factor": 0.01 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureGasMixer": { - "prefab": { - "prefab_name": "StructureGasMixer", - "prefab_hash": 2104106366, - "desc": "Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%.", - "name": "Gas Mixer" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "Pipe", - "role": "Input2" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureGasSensor": { - "prefab": { - "prefab_name": "StructureGasSensor", - "prefab_hash": -1252983604, - "desc": "Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents.", - "name": "Gas Sensor" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "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 - } - }, - "StructureGasTankStorage": { - "prefab": { - "prefab_name": "StructureGasTankStorage", - "prefab_hash": 1632165346, - "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.", - "name": "Gas Tank Storage" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Pressure": "Read", - "Temperature": "Read", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Quantity": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "GasCanister" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - } - ], - "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 - } - }, - "StructureGasUmbilicalFemale": { - "prefab": { - "prefab_name": "StructureGasUmbilicalFemale", - "prefab_hash": -1680477930, - "desc": "", - "name": "Umbilical Socket (Gas)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - } - ], - "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 - } - }, - "StructureGasUmbilicalFemaleSide": { - "prefab": { - "prefab_name": "StructureGasUmbilicalFemaleSide", - "prefab_hash": -648683847, - "desc": "", - "name": "Umbilical Socket Angle (Gas)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - } - ], - "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 - } - }, - "StructureGasUmbilicalMale": { - "prefab": { - "prefab_name": "StructureGasUmbilicalMale", - "prefab_hash": -1814939203, - "desc": "0.Left\n1.Center\n2.Right", - "name": "Umbilical (Gas)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Left", - "1": "Center", - "2": "Right" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureGlassDoor": { - "prefab": { - "prefab_name": "StructureGlassDoor", - "prefab_hash": -324331872, - "desc": "0.Operate\n1.Logic", - "name": "Glass Door" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureGovernedGasEngine": { - "prefab": { - "prefab_name": "StructureGovernedGasEngine", - "prefab_hash": -214232602, - "desc": "The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas.", - "name": "Pumped Gas Engine" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureGroundBasedTelescope": { - "prefab": { - "prefab_name": "StructureGroundBasedTelescope", - "prefab_hash": -619745681, - "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.", - "name": "Telescope" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureGrowLight": { - "prefab": { - "prefab_name": "StructureGrowLight", - "prefab_hash": -1758710260, - "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. ", - "name": "Grow Light" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureHarvie": { - "prefab": { - "prefab_name": "StructureHarvie", - "prefab_hash": 958056199, - "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.", - "name": "Harvie" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "modes": { - "0": "Idle", - "1": "Happy", - "2": "UnHappy", - "3": "Dead" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "Plant" - }, - { - "name": "Export", - "typ": "None" - }, - { - "name": "Hand", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureHeatExchangeLiquidtoGas": { - "prefab": { - "prefab_name": "StructureHeatExchangeLiquidtoGas", - "prefab_hash": 944685608, - "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.", - "name": "Heat Exchanger - Liquid + Gas" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Output" - } - ], - "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 - } - }, - "StructureHeatExchangerGastoGas": { - "prefab": { - "prefab_name": "StructureHeatExchangerGastoGas", - "prefab_hash": 21266291, - "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.", - "name": "Heat Exchanger - Gas" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "Pipe", - "role": "Output" - } - ], - "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 - } - }, - "StructureHeatExchangerLiquidtoLiquid": { - "prefab": { - "prefab_name": "StructureHeatExchangerLiquidtoLiquid", - "prefab_hash": -613784254, - "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", - "name": "Heat Exchanger - Liquid" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Output" - }, - { - "typ": "PipeLiquid", - "role": "Output" - } - ], - "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 - } - }, - "StructureHorizontalAutoMiner": { - "prefab": { - "prefab_name": "StructureHorizontalAutoMiner", - "prefab_hash": 1070427573, - "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", - "name": "OGRE" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {} - }, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureHydraulicPipeBender": { - "prefab": { - "prefab_name": "StructureHydraulicPipeBender", - "prefab_hash": -1888248335, - "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.", - "name": "Hydraulic Pipe Bender" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "Ingot" - }, - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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": { - "consumed_resouces": [ - "ItemAstroloyIngot", - "ItemConstantanIngot", - "ItemCopperIngot", - "ItemElectrumIngot", - "ItemGoldIngot", - "ItemHastelloyIngot", - "ItemInconelIngot", - "ItemInvarIngot", - "ItemIronIngot", - "ItemLeadIngot", - "ItemNickelIngot", - "ItemSiliconIngot", - "ItemSilverIngot", - "ItemSolderIngot", - "ItemSolidFuel", - "ItemSteelIngot", - "ItemStelliteIngot", - "ItemWaspaloyIngot", - "ItemWasteIngot" - ], - "processed_reagents": [] - }, - "fabricator_info": { - "tier": "Undefined", - "recipes": { - "ApplianceSeedTray": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Iron": 10.0, - "Silicon": 15.0 - } - }, - "ItemActiveVent": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 1.0, - "Iron": 5.0 - } - }, - "ItemAdhesiveInsulation": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Silicon": 1.0, - "Steel": 0.5 - } - }, - "ItemDynamicAirCon": { - "tier": "TierOne", - "time": 60.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Gold": 5.0, - "Silver": 5.0, - "Solder": 5.0, - "Steel": 20.0 - } - }, - "ItemDynamicScrubber": { - "tier": "TierOne", - "time": 30.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Gold": 5.0, - "Invar": 5.0, - "Solder": 5.0, - "Steel": 20.0 - } - }, - "ItemGasCanisterEmpty": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemGasCanisterSmart": { - "tier": "TierTwo", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Silicon": 2.0, - "Steel": 15.0 - } - }, - "ItemGasFilterCarbonDioxide": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemGasFilterCarbonDioxideL": { - "tier": "TierTwo", - "time": 45.0, - "energy": 4000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Invar": 1.0, - "Steel": 5.0, - "Stellite": 1.0 - } - }, - "ItemGasFilterCarbonDioxideM": { - "tier": "TierOne", - "time": 20.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Constantan": 1.0, - "Iron": 5.0, - "Silver": 5.0 - } - }, - "ItemGasFilterNitrogen": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemGasFilterNitrogenL": { - "tier": "TierTwo", - "time": 45.0, - "energy": 4000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Invar": 1.0, - "Steel": 5.0, - "Stellite": 1.0 - } - }, - "ItemGasFilterNitrogenM": { - "tier": "TierOne", - "time": 20.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Constantan": 1.0, - "Iron": 5.0, - "Silver": 5.0 - } - }, - "ItemGasFilterNitrousOxide": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemGasFilterNitrousOxideL": { - "tier": "TierTwo", - "time": 45.0, - "energy": 4000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Invar": 1.0, - "Steel": 5.0, - "Stellite": 1.0 - } - }, - "ItemGasFilterNitrousOxideM": { - "tier": "TierOne", - "time": 20.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Constantan": 1.0, - "Iron": 5.0, - "Silver": 5.0 - } - }, - "ItemGasFilterOxygen": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemGasFilterOxygenL": { - "tier": "TierTwo", - "time": 45.0, - "energy": 4000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Invar": 1.0, - "Steel": 5.0, - "Stellite": 1.0 - } - }, - "ItemGasFilterOxygenM": { - "tier": "TierOne", - "time": 20.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Constantan": 1.0, - "Iron": 5.0, - "Silver": 5.0 - } - }, - "ItemGasFilterPollutants": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemGasFilterPollutantsL": { - "tier": "TierTwo", - "time": 45.0, - "energy": 4000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Invar": 1.0, - "Steel": 5.0, - "Stellite": 1.0 - } - }, - "ItemGasFilterPollutantsM": { - "tier": "TierOne", - "time": 20.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Constantan": 1.0, - "Iron": 5.0, - "Silver": 5.0 - } - }, - "ItemGasFilterVolatiles": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemGasFilterVolatilesL": { - "tier": "TierTwo", - "time": 45.0, - "energy": 4000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Invar": 1.0, - "Steel": 5.0, - "Stellite": 1.0 - } - }, - "ItemGasFilterVolatilesM": { - "tier": "TierOne", - "time": 20.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Constantan": 1.0, - "Iron": 5.0, - "Silver": 5.0 - } - }, - "ItemGasFilterWater": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemGasFilterWaterL": { - "tier": "TierTwo", - "time": 45.0, - "energy": 4000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Invar": 1.0, - "Steel": 5.0, - "Stellite": 1.0 - } - }, - "ItemGasFilterWaterM": { - "tier": "TierOne", - "time": 20.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Constantan": 1.0, - "Iron": 5.0, - "Silver": 5.0 - } - }, - "ItemHydroponicTray": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 10.0 - } - }, - "ItemKitAirlock": { - "tier": "TierOne", - "time": 50.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Steel": 15.0 - } - }, - "ItemKitAirlockGate": { - "tier": "TierOne", - "time": 60.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Steel": 25.0 - } - }, - "ItemKitAtmospherics": { - "tier": "TierOne", - "time": 30.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 20.0, - "Gold": 5.0, - "Iron": 10.0 - } - }, - "ItemKitChute": { - "tier": "TierOne", - "time": 2.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ItemKitCryoTube": { - "tier": "TierTwo", - "time": 120.0, - "energy": 24000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 10.0, - "Gold": 10.0, - "Silver": 5.0, - "Steel": 35.0 - } - }, - "ItemKitDrinkingFountain": { - "tier": "TierOne", - "time": 20.0, - "energy": 620.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Iron": 5.0, - "Silicon": 8.0 - } - }, - "ItemKitDynamicCanister": { - "tier": "TierOne", - "time": 20.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 20.0 - } - }, - "ItemKitDynamicGasTankAdvanced": { - "tier": "TierTwo", - "time": 40.0, - "energy": 2000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 5.0, - "Iron": 20.0, - "Silicon": 5.0, - "Steel": 15.0 - } - }, - "ItemKitDynamicHydroponics": { - "tier": "TierOne", - "time": 30.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Nickel": 5.0, - "Steel": 20.0 - } - }, - "ItemKitDynamicLiquidCanister": { - "tier": "TierOne", - "time": 20.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 20.0 - } - }, - "ItemKitDynamicMKIILiquidCanister": { - "tier": "TierTwo", - "time": 40.0, - "energy": 2000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 5.0, - "Iron": 20.0, - "Silicon": 5.0, - "Steel": 15.0 - } - }, - "ItemKitEvaporationChamber": { - "tier": "TierOne", - "time": 30.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Silicon": 5.0, - "Steel": 10.0 - } - }, - "ItemKitHeatExchanger": { - "tier": "TierTwo", - "time": 30.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Invar": 10.0, - "Steel": 10.0 - } - }, - "ItemKitIceCrusher": { - "tier": "TierOne", - "time": 30.0, - "energy": 3000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 3.0 - } - }, - "ItemKitInsulatedLiquidPipe": { - "tier": "TierOne", - "time": 4.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Silicon": 1.0, - "Steel": 1.0 - } - }, - "ItemKitInsulatedPipe": { - "tier": "TierOne", - "time": 4.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Silicon": 1.0, - "Steel": 1.0 - } - }, - "ItemKitInsulatedPipeUtility": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Silicon": 1.0, - "Steel": 5.0 - } - }, - "ItemKitInsulatedPipeUtilityLiquid": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Silicon": 1.0, - "Steel": 5.0 - } - }, - "ItemKitLargeDirectHeatExchanger": { - "tier": "TierTwo", - "time": 30.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Invar": 10.0, - "Steel": 10.0 - } - }, - "ItemKitLargeExtendableRadiator": { - "tier": "TierTwo", - "time": 30.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Invar": 10.0, - "Steel": 10.0 - } - }, - "ItemKitLiquidRegulator": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 1.0, - "Iron": 5.0 - } - }, - "ItemKitLiquidTank": { - "tier": "TierOne", - "time": 20.0, - "energy": 2000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Steel": 20.0 - } - }, - "ItemKitLiquidTankInsulated": { - "tier": "TierOne", - "time": 30.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Silicon": 30.0, - "Steel": 20.0 - } - }, - "ItemKitLiquidTurboVolumePump": { - "tier": "TierTwo", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 4.0, - "Electrum": 5.0, - "Gold": 4.0, - "Steel": 5.0 - } - }, - "ItemKitPassiveLargeRadiatorGas": { - "tier": "TierTwo", - "time": 30.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Invar": 5.0, - "Steel": 5.0 - } - }, - "ItemKitPassiveLargeRadiatorLiquid": { - "tier": "TierTwo", - "time": 30.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Invar": 5.0, - "Steel": 5.0 - } - }, - "ItemKitPassthroughHeatExchanger": { - "tier": "TierTwo", - "time": 30.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Invar": 10.0, - "Steel": 10.0 - } - }, - "ItemKitPipe": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 0.5 - } - }, - "ItemKitPipeLiquid": { - "tier": "TierOne", - "time": 2.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 0.5 - } - }, - "ItemKitPipeOrgan": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ItemKitPipeRadiator": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Gold": 3.0, - "Steel": 2.0 - } - }, - "ItemKitPipeRadiatorLiquid": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Gold": 3.0, - "Steel": 2.0 - } - }, - "ItemKitPipeUtility": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemKitPipeUtilityLiquid": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemKitPlanter": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 10.0 - } - }, - "ItemKitPortablesConnector": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemKitPoweredVent": { - "tier": "TierTwo", - "time": 20.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Electrum": 5.0, - "Invar": 2.0, - "Steel": 5.0 - } - }, - "ItemKitRegulator": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 1.0, - "Iron": 5.0 - } - }, - "ItemKitSensor": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "ItemKitShower": { - "tier": "TierOne", - "time": 30.0, - "energy": 3000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Iron": 5.0, - "Silicon": 5.0 - } - }, - "ItemKitSleeper": { - "tier": "TierOne", - "time": 60.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Gold": 10.0, - "Steel": 25.0 - } - }, - "ItemKitSmallDirectHeatExchanger": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Steel": 3.0 - } - }, - "ItemKitStandardChute": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Constantan": 2.0, - "Electrum": 2.0, - "Iron": 3.0 - } - }, - "ItemKitSuitStorage": { - "tier": "TierOne", - "time": 30.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Iron": 15.0, - "Silver": 5.0 - } - }, - "ItemKitTank": { - "tier": "TierOne", - "time": 20.0, - "energy": 2000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Steel": 20.0 - } - }, - "ItemKitTankInsulated": { - "tier": "TierOne", - "time": 30.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Silicon": 30.0, - "Steel": 20.0 - } - }, - "ItemKitTurboVolumePump": { - "tier": "TierTwo", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 4.0, - "Electrum": 5.0, - "Gold": 4.0, - "Steel": 5.0 - } - }, - "ItemKitWaterBottleFiller": { - "tier": "TierOne", - "time": 7.0, - "energy": 620.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Iron": 5.0, - "Silicon": 8.0 - } - }, - "ItemKitWaterPurifier": { - "tier": "TierOne", - "time": 30.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 20.0, - "Gold": 5.0, - "Iron": 10.0 - } - }, - "ItemLiquidCanisterEmpty": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemLiquidCanisterSmart": { - "tier": "TierTwo", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Silicon": 2.0, - "Steel": 15.0 - } - }, - "ItemLiquidDrain": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 5.0 - } - }, - "ItemLiquidPipeAnalyzer": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Electrum": 2.0, - "Gold": 2.0, - "Iron": 2.0 - } - }, - "ItemLiquidPipeHeater": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 3.0, - "Iron": 5.0 - } - }, - "ItemLiquidPipeValve": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 3.0 - } - }, - "ItemLiquidPipeVolumePump": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 2.0, - "Iron": 5.0 - } - }, - "ItemPassiveVent": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ItemPassiveVentInsulated": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Silicon": 5.0, - "Steel": 1.0 - } - }, - "ItemPipeAnalyizer": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Electrum": 2.0, - "Gold": 2.0, - "Iron": 2.0 - } - }, - "ItemPipeCowl": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ItemPipeDigitalValve": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Invar": 3.0, - "Steel": 5.0 - } - }, - "ItemPipeGasMixer": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 2.0, - "Iron": 2.0 - } - }, - "ItemPipeHeater": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 3.0, - "Iron": 5.0 - } - }, - "ItemPipeIgniter": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 2.0, - "Iron": 2.0 - } - }, - "ItemPipeLabel": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemPipeMeter": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 3.0 - } - }, - "ItemPipeValve": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 3.0 - } - }, - "ItemPipeVolumePump": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 2.0, - "Iron": 5.0 - } - }, - "ItemWallCooler": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 1.0, - "Iron": 3.0 - } - }, - "ItemWallHeater": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 1.0, - "Iron": 3.0 - } - }, - "ItemWaterBottle": { - "tier": "TierOne", - "time": 4.0, - "energy": 120.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Iron": 2.0, - "Silicon": 4.0 - } - }, - "ItemWaterPipeDigitalValve": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Invar": 3.0, - "Steel": 5.0 - } - }, - "ItemWaterPipeMeter": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 3.0 - } - }, - "ItemWaterWallCooler": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 1.0, - "Iron": 3.0 - } - } - } - }, - "memory": { - "instructions": { - "DeviceSetLock": { - "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 |", - "typ": "PrinterInstruction", - "value": 6 - }, - "EjectAllReagents": { - "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", - "typ": "PrinterInstruction", - "value": 8 - }, - "EjectReagent": { - "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 |", - "typ": "PrinterInstruction", - "value": 7 - }, - "ExecuteRecipe": { - "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 |", - "typ": "PrinterInstruction", - "value": 2 - }, - "JumpIfNextInvalid": { - "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 |", - "typ": "PrinterInstruction", - "value": 4 - }, - "JumpToAddress": { - "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 |", - "typ": "PrinterInstruction", - "value": 5 - }, - "MissingRecipeReagent": { - "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 |", - "typ": "PrinterInstruction", - "value": 9 - }, - "StackPointer": { - "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 |", - "typ": "PrinterInstruction", - "value": 1 - }, - "WaitUntilNextValid": { - "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", - "typ": "PrinterInstruction", - "value": 3 - } - }, - "memory_access": "ReadWrite", - "memory_size": 64 - } - }, - "StructureHydroponicsStation": { - "prefab": { - "prefab_name": "StructureHydroponicsStation", - "prefab_hash": 1441767298, - "desc": "", - "name": "Hydroponics Station" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": 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" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "None" - }, - { - "typ": "PipeLiquid", - "role": "Input" - } - ], - "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 - } - }, - "StructureHydroponicsTray": { - "prefab": { - "prefab_name": "StructureHydroponicsTray", - "prefab_hash": 1464854517, - "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.", - "name": "Hydroponics Tray" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - }, - "slots": [ - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Fertiliser", - "typ": "Plant" - } - ] - }, - "StructureHydroponicsTrayData": { - "prefab": { - "prefab_name": "StructureHydroponicsTrayData", - "prefab_hash": -1841632400, - "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.", - "name": "Hydroponics Device" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Fertiliser", - "typ": "Plant" - } - ], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "None" - }, - { - "typ": "PipeLiquid", - "role": "None" - }, - { - "typ": "Data", - "role": "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 - } - }, - "StructureIceCrusher": { - "prefab": { - "prefab_name": "StructureIceCrusher", - "prefab_hash": 443849486, - "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.", - "name": "Ice Crusher" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "logic": { - "logic_slot_types": { - "0": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "Ore" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "None" - }, - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "PipeLiquid", - "role": "Output2" - } - ], - "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 - } - }, - "StructureIgniter": { - "prefab": { - "prefab_name": "StructureIgniter", - "prefab_hash": 1005491513, - "desc": "It gets the party started. Especially if that party is an explosive gas mixture.", - "name": "Igniter" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureInLineTankGas1x1": { - "prefab": { - "prefab_name": "StructureInLineTankGas1x1", - "prefab_hash": -1693382705, - "desc": "A small expansion tank that increases the volume of a pipe network.", - "name": "In-Line Tank Small Gas" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructureInLineTankGas1x2": { - "prefab": { - "prefab_name": "StructureInLineTankGas1x2", - "prefab_hash": 35149429, - "desc": "A small expansion tank that increases the volume of a pipe network.", - "name": "In-Line Tank Gas" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructureInLineTankLiquid1x1": { - "prefab": { - "prefab_name": "StructureInLineTankLiquid1x1", - "prefab_hash": 543645499, - "desc": "A small expansion tank that increases the volume of a pipe network.", - "name": "In-Line Tank Small Liquid" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructureInLineTankLiquid1x2": { - "prefab": { - "prefab_name": "StructureInLineTankLiquid1x2", - "prefab_hash": -1183969663, - "desc": "A small expansion tank that increases the volume of a pipe network.", - "name": "In-Line Tank Liquid" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructureInsulatedInLineTankGas1x1": { - "prefab": { - "prefab_name": "StructureInsulatedInLineTankGas1x1", - "prefab_hash": 1818267386, - "desc": "", - "name": "Insulated In-Line Tank Small Gas" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructureInsulatedInLineTankGas1x2": { - "prefab": { - "prefab_name": "StructureInsulatedInLineTankGas1x2", - "prefab_hash": -177610944, - "desc": "", - "name": "Insulated In-Line Tank Gas" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructureInsulatedInLineTankLiquid1x1": { - "prefab": { - "prefab_name": "StructureInsulatedInLineTankLiquid1x1", - "prefab_hash": -813426145, - "desc": "", - "name": "Insulated In-Line Tank Small Liquid" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructureInsulatedInLineTankLiquid1x2": { - "prefab": { - "prefab_name": "StructureInsulatedInLineTankLiquid1x2", - "prefab_hash": 1452100517, - "desc": "", - "name": "Insulated In-Line Tank Liquid" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructureInsulatedPipeCorner": { - "prefab": { - "prefab_name": "StructureInsulatedPipeCorner", - "prefab_hash": -1967711059, - "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "name": "Insulated Pipe (Corner)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructureInsulatedPipeCrossJunction": { - "prefab": { - "prefab_name": "StructureInsulatedPipeCrossJunction", - "prefab_hash": -92778058, - "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "name": "Insulated Pipe (Cross Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructureInsulatedPipeCrossJunction3": { - "prefab": { - "prefab_name": "StructureInsulatedPipeCrossJunction3", - "prefab_hash": 1328210035, - "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "name": "Insulated Pipe (3-Way Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructureInsulatedPipeCrossJunction4": { - "prefab": { - "prefab_name": "StructureInsulatedPipeCrossJunction4", - "prefab_hash": -783387184, - "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "name": "Insulated Pipe (4-Way Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructureInsulatedPipeCrossJunction5": { - "prefab": { - "prefab_name": "StructureInsulatedPipeCrossJunction5", - "prefab_hash": -1505147578, - "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "name": "Insulated Pipe (5-Way Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructureInsulatedPipeCrossJunction6": { - "prefab": { - "prefab_name": "StructureInsulatedPipeCrossJunction6", - "prefab_hash": 1061164284, - "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "name": "Insulated Pipe (6-Way Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructureInsulatedPipeLiquidCorner": { - "prefab": { - "prefab_name": "StructureInsulatedPipeLiquidCorner", - "prefab_hash": 1713710802, - "desc": "Liquid piping with very low temperature loss or gain.", - "name": "Insulated Liquid Pipe (Corner)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructureInsulatedPipeLiquidCrossJunction": { - "prefab": { - "prefab_name": "StructureInsulatedPipeLiquidCrossJunction", - "prefab_hash": 1926651727, - "desc": "Liquid piping with very low temperature loss or gain.", - "name": "Insulated Liquid Pipe (3-Way Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructureInsulatedPipeLiquidCrossJunction4": { - "prefab": { - "prefab_name": "StructureInsulatedPipeLiquidCrossJunction4", - "prefab_hash": 363303270, - "desc": "Liquid piping with very low temperature loss or gain.", - "name": "Insulated Liquid Pipe (4-Way Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructureInsulatedPipeLiquidCrossJunction5": { - "prefab": { - "prefab_name": "StructureInsulatedPipeLiquidCrossJunction5", - "prefab_hash": 1654694384, - "desc": "Liquid piping with very low temperature loss or gain.", - "name": "Insulated Liquid Pipe (5-Way Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructureInsulatedPipeLiquidCrossJunction6": { - "prefab": { - "prefab_name": "StructureInsulatedPipeLiquidCrossJunction6", - "prefab_hash": -72748982, - "desc": "Liquid piping with very low temperature loss or gain.", - "name": "Insulated Liquid Pipe (6-Way Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructureInsulatedPipeLiquidStraight": { - "prefab": { - "prefab_name": "StructureInsulatedPipeLiquidStraight", - "prefab_hash": 295678685, - "desc": "Liquid piping with very low temperature loss or gain.", - "name": "Insulated Liquid Pipe (Straight)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructureInsulatedPipeLiquidTJunction": { - "prefab": { - "prefab_name": "StructureInsulatedPipeLiquidTJunction", - "prefab_hash": -532384855, - "desc": "Liquid piping with very low temperature loss or gain.", - "name": "Insulated Liquid Pipe (T Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructureInsulatedPipeStraight": { - "prefab": { - "prefab_name": "StructureInsulatedPipeStraight", - "prefab_hash": 2134172356, - "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "name": "Insulated Pipe (Straight)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructureInsulatedPipeTJunction": { - "prefab": { - "prefab_name": "StructureInsulatedPipeTJunction", - "prefab_hash": -2076086215, - "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "name": "Insulated Pipe (T Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructureInsulatedTankConnector": { - "prefab": { - "prefab_name": "StructureInsulatedTankConnector", - "prefab_hash": -31273349, - "desc": "", - "name": "Insulated Tank Connector" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "slots": [ - { - "name": "", - "typ": "None" - } - ] - }, - "StructureInsulatedTankConnectorLiquid": { - "prefab": { - "prefab_name": "StructureInsulatedTankConnectorLiquid", - "prefab_hash": -1602030414, - "desc": "", - "name": "Insulated Tank Connector Liquid" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "slots": [ - { - "name": "Portable Slot", - "typ": "None" - } - ] - }, - "StructureInteriorDoorGlass": { - "prefab": { - "prefab_name": "StructureInteriorDoorGlass", - "prefab_hash": -2096421875, - "desc": "0.Operate\n1.Logic", - "name": "Interior Door Glass" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "StructureInteriorDoorPadded": { - "prefab": { - "prefab_name": "StructureInteriorDoorPadded", - "prefab_hash": 847461335, - "desc": "0.Operate\n1.Logic", - "name": "Interior Door Padded" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "StructureInteriorDoorPaddedThin": { - "prefab": { - "prefab_name": "StructureInteriorDoorPaddedThin", - "prefab_hash": 1981698201, - "desc": "0.Operate\n1.Logic", - "name": "Interior Door Padded Thin" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "StructureInteriorDoorTriangle": { - "prefab": { - "prefab_name": "StructureInteriorDoorTriangle", - "prefab_hash": -1182923101, - "desc": "0.Operate\n1.Logic", - "name": "Interior Door Triangle" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "StructureKlaxon": { - "prefab": { - "prefab_name": "StructureKlaxon", - "prefab_hash": -828056979, - "desc": "Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output.", - "name": "Klaxon Speaker" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Volume": "ReadWrite", - "PrefabHash": "Read", - "SoundAlert": "ReadWrite", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "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" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureLadder": { - "prefab": { - "prefab_name": "StructureLadder", - "prefab_hash": -415420281, - "desc": "", - "name": "Ladder" - }, - "structure": { - "small_grid": true - } - }, - "StructureLadderEnd": { - "prefab": { - "prefab_name": "StructureLadderEnd", - "prefab_hash": 1541734993, - "desc": "", - "name": "Ladder End" - }, - "structure": { - "small_grid": true - } - }, - "StructureLargeDirectHeatExchangeGastoGas": { - "prefab": { - "prefab_name": "StructureLargeDirectHeatExchangeGastoGas", - "prefab_hash": -1230658883, - "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", - "name": "Large Direct Heat Exchanger - Gas + Gas" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Input2" - } - ], - "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 - } - }, - "StructureLargeDirectHeatExchangeGastoLiquid": { - "prefab": { - "prefab_name": "StructureLargeDirectHeatExchangeGastoLiquid", - "prefab_hash": 1412338038, - "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", - "name": "Large Direct Heat Exchanger - Gas + Liquid" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Input2" - } - ], - "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 - } - }, - "StructureLargeDirectHeatExchangeLiquidtoLiquid": { - "prefab": { - "prefab_name": "StructureLargeDirectHeatExchangeLiquidtoLiquid", - "prefab_hash": 792686502, - "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", - "name": "Large Direct Heat Exchange - Liquid + Liquid" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Input2" - } - ], - "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 - } - }, - "StructureLargeExtendableRadiator": { - "prefab": { - "prefab_name": "StructureLargeExtendableRadiator", - "prefab_hash": -566775170, - "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.", - "name": "Large Extendable Radiator" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.02, - "radiation_factor": 2.0 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Horizontal": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Output" - } - ], - "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 - } - }, - "StructureLargeHangerDoor": { - "prefab": { - "prefab_name": "StructureLargeHangerDoor", - "prefab_hash": -1351081801, - "desc": "1 x 3 modular door piece for building hangar doors.", - "name": "Large Hangar Door" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureLargeSatelliteDish": { - "prefab": { - "prefab_name": "StructureLargeSatelliteDish", - "prefab_hash": 1913391845, - "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.", - "name": "Large Satellite Dish" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureLaunchMount": { - "prefab": { - "prefab_name": "StructureLaunchMount", - "prefab_hash": -558953231, - "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.", - "name": "Launch Mount" - }, - "structure": { - "small_grid": false - } - }, - "StructureLightLong": { - "prefab": { - "prefab_name": "StructureLightLong", - "prefab_hash": 797794350, - "desc": "", - "name": "Wall Light (Long)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureLightLongAngled": { - "prefab": { - "prefab_name": "StructureLightLongAngled", - "prefab_hash": 1847265835, - "desc": "", - "name": "Wall Light (Long Angled)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureLightLongWide": { - "prefab": { - "prefab_name": "StructureLightLongWide", - "prefab_hash": 555215790, - "desc": "", - "name": "Wall Light (Long Wide)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureLightRound": { - "prefab": { - "prefab_name": "StructureLightRound", - "prefab_hash": 1514476632, - "desc": "Description coming.", - "name": "Light Round" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureLightRoundAngled": { - "prefab": { - "prefab_name": "StructureLightRoundAngled", - "prefab_hash": 1592905386, - "desc": "Description coming.", - "name": "Light Round (Angled)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureLightRoundSmall": { - "prefab": { - "prefab_name": "StructureLightRoundSmall", - "prefab_hash": 1436121888, - "desc": "Description coming.", - "name": "Light Round (Small)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureLiquidDrain": { - "prefab": { - "prefab_name": "StructureLiquidDrain", - "prefab_hash": 1687692899, - "desc": "When connected to power and activated, it pumps liquid from a liquid network into the world.", - "name": "Active Liquid Outlet" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "None" - }, - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Power", - "role": "Input" - } - ], - "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 - } - }, - "StructureLiquidPipeAnalyzer": { - "prefab": { - "prefab_name": "StructureLiquidPipeAnalyzer", - "prefab_hash": -2113838091, - "desc": "", - "name": "Liquid Pipe Analyzer" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureLiquidPipeHeater": { - "prefab": { - "prefab_name": "StructureLiquidPipeHeater", - "prefab_hash": -287495560, - "desc": "Adds 1000 joules of heat per tick to the contents of your pipe network.", - "name": "Pipe Heater (Liquid)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureLiquidPipeOneWayValve": { - "prefab": { - "prefab_name": "StructureLiquidPipeOneWayValve", - "prefab_hash": -782453061, - "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..", - "name": "One Way Valve (Liquid)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Output" - } - ], - "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 - } - }, - "StructureLiquidPipeRadiator": { - "prefab": { - "prefab_name": "StructureLiquidPipeRadiator", - "prefab_hash": 2072805863, - "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.", - "name": "Liquid Pipe Convection Radiator" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 1.0, - "radiation_factor": 0.75 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "StructureLiquidPressureRegulator": { - "prefab": { - "prefab_name": "StructureLiquidPressureRegulator", - "prefab_hash": 482248766, - "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.", - "name": "Liquid Volume Regulator" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Output" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureLiquidTankBig": { - "prefab": { - "prefab_name": "StructureLiquidTankBig", - "prefab_hash": 1098900430, - "desc": "", - "name": "Liquid Tank Big" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.002 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "PipeLiquid", - "role": "Input" - } - ], - "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 - } - }, - "StructureLiquidTankBigInsulated": { - "prefab": { - "prefab_name": "StructureLiquidTankBigInsulated", - "prefab_hash": -1430440215, - "desc": "", - "name": "Insulated Liquid Tank Big" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "PipeLiquid", - "role": "Input" - } - ], - "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 - } - }, - "StructureLiquidTankSmall": { - "prefab": { - "prefab_name": "StructureLiquidTankSmall", - "prefab_hash": 1988118157, - "desc": "", - "name": "Liquid Tank Small" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.002 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "PipeLiquid", - "role": "Input" - } - ], - "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 - } - }, - "StructureLiquidTankSmallInsulated": { - "prefab": { - "prefab_name": "StructureLiquidTankSmallInsulated", - "prefab_hash": 608607718, - "desc": "", - "name": "Insulated Liquid Tank Small" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "PipeLiquid", - "role": "Input" - } - ], - "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 - } - }, - "StructureLiquidTankStorage": { - "prefab": { - "prefab_name": "StructureLiquidTankStorage", - "prefab_hash": 1691898022, - "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.", - "name": "Liquid Tank Storage" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Pressure": "Read", - "Temperature": "Read", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Quantity": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Liquid Canister", - "typ": "LiquidCanister" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "PipeLiquid", - "role": "Input" - } - ], - "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 - } - }, - "StructureLiquidTurboVolumePump": { - "prefab": { - "prefab_name": "StructureLiquidTurboVolumePump", - "prefab_hash": -1051805505, - "desc": "Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction.", - "name": "Turbo Volume Pump (Liquid)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Right", - "1": "Left" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "None" - }, - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Output" - } - ], - "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 - } - }, - "StructureLiquidUmbilicalFemale": { - "prefab": { - "prefab_name": "StructureLiquidUmbilicalFemale", - "prefab_hash": 1734723642, - "desc": "", - "name": "Umbilical Socket (Liquid)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - } - ], - "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 - } - }, - "StructureLiquidUmbilicalFemaleSide": { - "prefab": { - "prefab_name": "StructureLiquidUmbilicalFemaleSide", - "prefab_hash": 1220870319, - "desc": "", - "name": "Umbilical Socket Angle (Liquid)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - } - ], - "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 - } - }, - "StructureLiquidUmbilicalMale": { - "prefab": { - "prefab_name": "StructureLiquidUmbilicalMale", - "prefab_hash": -1798420047, - "desc": "0.Left\n1.Center\n2.Right", - "name": "Umbilical (Liquid)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Left", - "1": "Center", - "2": "Right" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureLiquidValve": { - "prefab": { - "prefab_name": "StructureLiquidValve", - "prefab_hash": 1849974453, - "desc": "", - "name": "Liquid Valve" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "None" - }, - { - "typ": "PipeLiquid", - "role": "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 - } - }, - "StructureLiquidVolumePump": { - "prefab": { - "prefab_name": "StructureLiquidVolumePump", - "prefab_hash": -454028979, - "desc": "", - "name": "Liquid Volume Pump" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Output" - }, - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureLockerSmall": { - "prefab": { - "prefab_name": "StructureLockerSmall", - "prefab_hash": -647164662, - "desc": "", - "name": "Locker (Small)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructureLogicBatchReader": { - "prefab": { - "prefab_name": "StructureLogicBatchReader", - "prefab_hash": 264413729, - "desc": "", - "name": "Batch Reader" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureLogicBatchSlotReader": { - "prefab": { - "prefab_name": "StructureLogicBatchSlotReader", - "prefab_hash": 436888930, - "desc": "", - "name": "Batch Slot Reader" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureLogicBatchWriter": { - "prefab": { - "prefab_name": "StructureLogicBatchWriter", - "prefab_hash": 1415443359, - "desc": "", - "name": "Batch Writer" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ForceWrite": "Write", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureLogicButton": { - "prefab": { - "prefab_name": "StructureLogicButton", - "prefab_hash": 491845673, - "desc": "", - "name": "Button" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Data", - "role": "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 - } - }, - "StructureLogicCompare": { - "prefab": { - "prefab_name": "StructureLogicCompare", - "prefab_hash": -1489728908, - "desc": "0.Equals\n1.Greater\n2.Less\n3.NotEquals", - "name": "Logic Compare" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Equals", - "1": "Greater", - "2": "Less", - "3": "NotEquals" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureLogicDial": { - "prefab": { - "prefab_name": "StructureLogicDial", - "prefab_hash": 554524804, - "desc": "An assignable dial with up to 1000 modes.", - "name": "Dial" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Mode": "ReadWrite", - "Setting": "ReadWrite", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "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 - } - }, - "StructureLogicGate": { - "prefab": { - "prefab_name": "StructureLogicGate", - "prefab_hash": 1942143074, - "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.", - "name": "Logic Gate" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "AND", - "1": "OR", - "2": "XOR", - "3": "NAND", - "4": "NOR", - "5": "XNOR" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureLogicHashGen": { - "prefab": { - "prefab_name": "StructureLogicHashGen", - "prefab_hash": 2077593121, - "desc": "", - "name": "Logic Hash Generator" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Data", - "role": "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 - } - }, - "StructureLogicMath": { - "prefab": { - "prefab_name": "StructureLogicMath", - "prefab_hash": 1657691323, - "desc": "0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log", - "name": "Logic Math" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Add", - "1": "Subtract", - "2": "Multiply", - "3": "Divide", - "4": "Mod", - "5": "Atan2", - "6": "Pow", - "7": "Log" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureLogicMathUnary": { - "prefab": { - "prefab_name": "StructureLogicMathUnary", - "prefab_hash": -1160020195, - "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", - "name": "Math Unary" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "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" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureLogicMemory": { - "prefab": { - "prefab_name": "StructureLogicMemory", - "prefab_hash": -851746783, - "desc": "", - "name": "Logic Memory" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Data", - "role": "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 - } - }, - "StructureLogicMinMax": { - "prefab": { - "prefab_name": "StructureLogicMinMax", - "prefab_hash": 929022276, - "desc": "0.Greater\n1.Less", - "name": "Logic Min/Max" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Greater", - "1": "Less" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureLogicMirror": { - "prefab": { - "prefab_name": "StructureLogicMirror", - "prefab_hash": 2096189278, - "desc": "", - "name": "Logic Mirror" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": {}, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureLogicReader": { - "prefab": { - "prefab_name": "StructureLogicReader", - "prefab_hash": -345383640, - "desc": "", - "name": "Logic Reader" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureLogicReagentReader": { - "prefab": { - "prefab_name": "StructureLogicReagentReader", - "prefab_hash": -124308857, - "desc": "", - "name": "Reagent Reader" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureLogicRocketDownlink": { - "prefab": { - "prefab_name": "StructureLogicRocketDownlink", - "prefab_hash": 876108549, - "desc": "", - "name": "Logic Rocket Downlink" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "Input" - } - ], - "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 - } - }, - "StructureLogicRocketUplink": { - "prefab": { - "prefab_name": "StructureLogicRocketUplink", - "prefab_hash": 546002924, - "desc": "", - "name": "Logic Uplink" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureLogicSelect": { - "prefab": { - "prefab_name": "StructureLogicSelect", - "prefab_hash": 1822736084, - "desc": "0.Equals\n1.Greater\n2.Less\n3.NotEquals", - "name": "Logic Select" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Equals", - "1": "Greater", - "2": "Less", - "3": "NotEquals" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureLogicSlotReader": { - "prefab": { - "prefab_name": "StructureLogicSlotReader", - "prefab_hash": -767867194, - "desc": "", - "name": "Slot Reader" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureLogicSorter": { - "prefab": { - "prefab_name": "StructureLogicSorter", - "prefab_hash": 873418029, - "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.", - "name": "Logic Sorter" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "All", - "1": "Any", - "2": "None" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - }, - { - "name": "Export 2", - "typ": "None" - }, - { - "name": "Data Disk", - "typ": "DataDisk" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Output2" - }, - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "PowerAndData", - "role": "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": { - "instructions": { - "FilterPrefabHashEquals": { - "description": "| 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": { - "description": "| 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": { - "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 |", - "typ": "SorterInstruction", - "value": 5 - }, - "FilterSlotTypeCompare": { - "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 |", - "typ": "SorterInstruction", - "value": 4 - }, - "FilterSortingClassCompare": { - "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 |", - "typ": "SorterInstruction", - "value": 3 - }, - "LimitNextExecutionByCount": { - "description": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |", - "typ": "SorterInstruction", - "value": 6 - } - }, - "memory_access": "ReadWrite", - "memory_size": 32 - } - }, - "StructureLogicSwitch": { - "prefab": { - "prefab_name": "StructureLogicSwitch", - "prefab_hash": 1220484876, - "desc": "", - "name": "Lever" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Data", - "role": "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 - } - }, - "StructureLogicSwitch2": { - "prefab": { - "prefab_name": "StructureLogicSwitch2", - "prefab_hash": 321604921, - "desc": "", - "name": "Switch" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Data", - "role": "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 - } - }, - "StructureLogicTransmitter": { - "prefab": { - "prefab_name": "StructureLogicTransmitter", - "prefab_hash": -693235651, - "desc": "Connects to Logic Transmitter", - "name": "Logic Transmitter" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": {}, - "modes": { - "0": "Passive", - "1": "Active" - }, - "transmission_receiver": true, - "wireless_logic": true, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureLogicWriter": { - "prefab": { - "prefab_name": "StructureLogicWriter", - "prefab_hash": -1326019434, - "desc": "", - "name": "Logic Writer" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ForceWrite": "Write", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureLogicWriterSwitch": { - "prefab": { - "prefab_name": "StructureLogicWriterSwitch", - "prefab_hash": -1321250424, - "desc": "", - "name": "Logic Writer Switch" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ForceWrite": "Write", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Input" - }, - { - "typ": "Data", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureManualHatch": { - "prefab": { - "prefab_name": "StructureManualHatch", - "prefab_hash": -1808154199, - "desc": "Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock.", - "name": "Manual Hatch" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "StructureMediumConvectionRadiator": { - "prefab": { - "prefab_name": "StructureMediumConvectionRadiator", - "prefab_hash": -1918215845, - "desc": "A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere.", - "name": "Medium Convection Radiator" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 1.25, - "radiation_factor": 0.4 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Output" - } - ], - "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 - } - }, - "StructureMediumConvectionRadiatorLiquid": { - "prefab": { - "prefab_name": "StructureMediumConvectionRadiatorLiquid", - "prefab_hash": -1169014183, - "desc": "A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere.", - "name": "Medium Convection Radiator Liquid" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 1.25, - "radiation_factor": 0.4 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Output" - } - ], - "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 - } - }, - "StructureMediumHangerDoor": { - "prefab": { - "prefab_name": "StructureMediumHangerDoor", - "prefab_hash": -566348148, - "desc": "1 x 2 modular door piece for building hangar doors.", - "name": "Medium Hangar Door" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureMediumRadiator": { - "prefab": { - "prefab_name": "StructureMediumRadiator", - "prefab_hash": -975966237, - "desc": "A stand-alone radiator unit optimized for radiating heat in vacuums.", - "name": "Medium Radiator" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.2, - "radiation_factor": 4.0 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Output" - } - ], - "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 - } - }, - "StructureMediumRadiatorLiquid": { - "prefab": { - "prefab_name": "StructureMediumRadiatorLiquid", - "prefab_hash": -1141760613, - "desc": "A stand-alone liquid radiator unit optimized for radiating heat in vacuums.", - "name": "Medium Radiator Liquid" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.2, - "radiation_factor": 4.0 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Output" - } - ], - "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 - } - }, - "StructureMediumRocketGasFuelTank": { - "prefab": { - "prefab_name": "StructureMediumRocketGasFuelTank", - "prefab_hash": -1093860567, - "desc": "", - "name": "Gas Capsule Tank Medium" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.002 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Output" - }, - { - "typ": "Pipe", - "role": "Input" - } - ], - "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 - } - }, - "StructureMediumRocketLiquidFuelTank": { - "prefab": { - "prefab_name": "StructureMediumRocketLiquidFuelTank", - "prefab_hash": 1143639539, - "desc": "", - "name": "Liquid Capsule Tank Medium" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.002 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "Output" - }, - { - "typ": "PipeLiquid", - "role": "Input" - } - ], - "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 - } - }, - "StructureMotionSensor": { - "prefab": { - "prefab_name": "StructureMotionSensor", - "prefab_hash": -1713470563, - "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.", - "name": "Motion Sensor" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Activate": "ReadWrite", - "Quantity": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureNitrolyzer": { - "prefab": { - "prefab_name": "StructureNitrolyzer", - "prefab_hash": 1898243702, - "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.", - "name": "Nitrolyzer" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "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", - "RatioLiquidNitrogenInput": "Read", - "RatioLiquidNitrogenInput2": "Read", - "RatioLiquidNitrogenOutput": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidOxygenInput": "Read", - "RatioLiquidOxygenInput2": "Read", - "RatioLiquidOxygenOutput": "Read", - "RatioLiquidVolatiles": "Read", - "RatioLiquidVolatilesInput": "Read", - "RatioLiquidVolatilesInput2": "Read", - "RatioLiquidVolatilesOutput": "Read", - "RatioSteam": "Read", - "RatioSteamInput": "Read", - "RatioSteamInput2": "Read", - "RatioSteamOutput": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidCarbonDioxideInput": "Read", - "RatioLiquidCarbonDioxideInput2": "Read", - "RatioLiquidCarbonDioxideOutput": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidPollutantInput": "Read", - "RatioLiquidPollutantInput2": "Read", - "RatioLiquidPollutantOutput": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidNitrousOxideInput": "Read", - "RatioLiquidNitrousOxideInput2": "Read", - "RatioLiquidNitrousOxideOutput": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Idle", - "1": "Active" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": true - }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Input2" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "Power", - "role": "None" - } - ], - "device_pins_length": 2, - "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 - } - }, - "StructureOccupancySensor": { - "prefab": { - "prefab_name": "StructureOccupancySensor", - "prefab_hash": 322782515, - "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.", - "name": "Occupancy Sensor" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Activate": "Read", - "Quantity": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureOverheadShortCornerLocker": { - "prefab": { - "prefab_name": "StructureOverheadShortCornerLocker", - "prefab_hash": -1794932560, - "desc": "", - "name": "Overhead Corner Locker" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructureOverheadShortLocker": { - "prefab": { - "prefab_name": "StructureOverheadShortLocker", - "prefab_hash": 1468249454, - "desc": "", - "name": "Overhead Locker" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": 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" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructurePassiveLargeRadiatorGas": { - "prefab": { - "prefab_name": "StructurePassiveLargeRadiatorGas", - "prefab_hash": 2066977095, - "desc": "Has been replaced by Medium Convection Radiator.", - "name": "Medium Convection Radiator" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 1.0, - "radiation_factor": 0.4 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Output" - } - ], - "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 - } - }, - "StructurePassiveLargeRadiatorLiquid": { - "prefab": { - "prefab_name": "StructurePassiveLargeRadiatorLiquid", - "prefab_hash": 24786172, - "desc": "Has been replaced by Medium Convection Radiator Liquid.", - "name": "Medium Convection Radiator Liquid" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 1.0, - "radiation_factor": 0.4 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Output" - } - ], - "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 - } - }, - "StructurePassiveLiquidDrain": { - "prefab": { - "prefab_name": "StructurePassiveLiquidDrain", - "prefab_hash": 1812364811, - "desc": "Moves liquids from a pipe network to the world atmosphere.", - "name": "Passive Liquid Drain" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "StructurePassiveVent": { - "prefab": { - "prefab_name": "StructurePassiveVent", - "prefab_hash": 335498166, - "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. ", - "name": "Passive Vent" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructurePassiveVentInsulated": { - "prefab": { - "prefab_name": "StructurePassiveVentInsulated", - "prefab_hash": 1363077139, - "desc": "", - "name": "Insulated Passive Vent" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructurePassthroughHeatExchangerGasToGas": { - "prefab": { - "prefab_name": "StructurePassthroughHeatExchangerGasToGas", - "prefab_hash": -1674187440, - "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.", - "name": "CounterFlow Heat Exchanger - Gas + Gas" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Input2" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "Pipe", - "role": "Output2" - } - ], - "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 - } - }, - "StructurePassthroughHeatExchangerGasToLiquid": { - "prefab": { - "prefab_name": "StructurePassthroughHeatExchangerGasToLiquid", - "prefab_hash": 1928991265, - "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.", - "name": "CounterFlow Heat Exchanger - Gas + Liquid" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Input2" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "PipeLiquid", - "role": "Output2" - } - ], - "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 - } - }, - "StructurePassthroughHeatExchangerLiquidToLiquid": { - "prefab": { - "prefab_name": "StructurePassthroughHeatExchangerLiquidToLiquid", - "prefab_hash": -1472829583, - "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.", - "name": "CounterFlow Heat Exchanger - Liquid + Liquid" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Input2" - }, - { - "typ": "PipeLiquid", - "role": "Output" - }, - { - "typ": "PipeLiquid", - "role": "Output2" - } - ], - "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 - } - }, - "StructurePictureFrameThickLandscapeLarge": { - "prefab": { - "prefab_name": "StructurePictureFrameThickLandscapeLarge", - "prefab_hash": -1434523206, - "desc": "", - "name": "Picture Frame Thick Landscape Large" - }, - "structure": { - "small_grid": true - } - }, - "StructurePictureFrameThickLandscapeSmall": { - "prefab": { - "prefab_name": "StructurePictureFrameThickLandscapeSmall", - "prefab_hash": -2041566697, - "desc": "", - "name": "Picture Frame Thick Landscape Small" - }, - "structure": { - "small_grid": true - } - }, - "StructurePictureFrameThickMountLandscapeLarge": { - "prefab": { - "prefab_name": "StructurePictureFrameThickMountLandscapeLarge", - "prefab_hash": 950004659, - "desc": "", - "name": "Picture Frame Thick Landscape Large" - }, - "structure": { - "small_grid": true - } - }, - "StructurePictureFrameThickMountLandscapeSmall": { - "prefab": { - "prefab_name": "StructurePictureFrameThickMountLandscapeSmall", - "prefab_hash": 347154462, - "desc": "", - "name": "Picture Frame Thick Landscape Small" - }, - "structure": { - "small_grid": true - } - }, - "StructurePictureFrameThickMountPortraitLarge": { - "prefab": { - "prefab_name": "StructurePictureFrameThickMountPortraitLarge", - "prefab_hash": -1459641358, - "desc": "", - "name": "Picture Frame Thick Mount Portrait Large" - }, - "structure": { - "small_grid": true - } - }, - "StructurePictureFrameThickMountPortraitSmall": { - "prefab": { - "prefab_name": "StructurePictureFrameThickMountPortraitSmall", - "prefab_hash": -2066653089, - "desc": "", - "name": "Picture Frame Thick Mount Portrait Small" - }, - "structure": { - "small_grid": true - } - }, - "StructurePictureFrameThickPortraitLarge": { - "prefab": { - "prefab_name": "StructurePictureFrameThickPortraitLarge", - "prefab_hash": -1686949570, - "desc": "", - "name": "Picture Frame Thick Portrait Large" - }, - "structure": { - "small_grid": true - } - }, - "StructurePictureFrameThickPortraitSmall": { - "prefab": { - "prefab_name": "StructurePictureFrameThickPortraitSmall", - "prefab_hash": -1218579821, - "desc": "", - "name": "Picture Frame Thick Portrait Small" - }, - "structure": { - "small_grid": true - } - }, - "StructurePictureFrameThinLandscapeLarge": { - "prefab": { - "prefab_name": "StructurePictureFrameThinLandscapeLarge", - "prefab_hash": -1418288625, - "desc": "", - "name": "Picture Frame Thin Landscape Large" - }, - "structure": { - "small_grid": true - } - }, - "StructurePictureFrameThinLandscapeSmall": { - "prefab": { - "prefab_name": "StructurePictureFrameThinLandscapeSmall", - "prefab_hash": -2024250974, - "desc": "", - "name": "Picture Frame Thin Landscape Small" - }, - "structure": { - "small_grid": true - } - }, - "StructurePictureFrameThinMountLandscapeLarge": { - "prefab": { - "prefab_name": "StructurePictureFrameThinMountLandscapeLarge", - "prefab_hash": -1146760430, - "desc": "", - "name": "Picture Frame Thin Landscape Large" - }, - "structure": { - "small_grid": true - } - }, - "StructurePictureFrameThinMountLandscapeSmall": { - "prefab": { - "prefab_name": "StructurePictureFrameThinMountLandscapeSmall", - "prefab_hash": -1752493889, - "desc": "", - "name": "Picture Frame Thin Landscape Small" - }, - "structure": { - "small_grid": true - } - }, - "StructurePictureFrameThinMountPortraitLarge": { - "prefab": { - "prefab_name": "StructurePictureFrameThinMountPortraitLarge", - "prefab_hash": 1094895077, - "desc": "", - "name": "Picture Frame Thin Portrait Large" - }, - "structure": { - "small_grid": true - } - }, - "StructurePictureFrameThinMountPortraitSmall": { - "prefab": { - "prefab_name": "StructurePictureFrameThinMountPortraitSmall", - "prefab_hash": 1835796040, - "desc": "", - "name": "Picture Frame Thin Portrait Small" - }, - "structure": { - "small_grid": true - } - }, - "StructurePictureFrameThinPortraitLarge": { - "prefab": { - "prefab_name": "StructurePictureFrameThinPortraitLarge", - "prefab_hash": 1212777087, - "desc": "", - "name": "Picture Frame Thin Portrait Large" - }, - "structure": { - "small_grid": true - } - }, - "StructurePictureFrameThinPortraitSmall": { - "prefab": { - "prefab_name": "StructurePictureFrameThinPortraitSmall", - "prefab_hash": 1684488658, - "desc": "", - "name": "Picture Frame Thin Portrait Small" - }, - "structure": { - "small_grid": true - } - }, - "StructurePipeAnalysizer": { - "prefab": { - "prefab_name": "StructurePipeAnalysizer", - "prefab_hash": 435685051, - "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.", - "name": "Pipe Analyzer" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructurePipeCorner": { - "prefab": { - "prefab_name": "StructurePipeCorner", - "prefab_hash": -1785673561, - "desc": "You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench.", - "name": "Pipe (Corner)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructurePipeCowl": { - "prefab": { - "prefab_name": "StructurePipeCowl", - "prefab_hash": 465816159, - "desc": "", - "name": "Pipe Cowl" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructurePipeCrossJunction": { - "prefab": { - "prefab_name": "StructurePipeCrossJunction", - "prefab_hash": -1405295588, - "desc": "You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench.", - "name": "Pipe (Cross Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructurePipeCrossJunction3": { - "prefab": { - "prefab_name": "StructurePipeCrossJunction3", - "prefab_hash": 2038427184, - "desc": "You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", - "name": "Pipe (3-Way Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructurePipeCrossJunction4": { - "prefab": { - "prefab_name": "StructurePipeCrossJunction4", - "prefab_hash": -417629293, - "desc": "You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", - "name": "Pipe (4-Way Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructurePipeCrossJunction5": { - "prefab": { - "prefab_name": "StructurePipeCrossJunction5", - "prefab_hash": -1877193979, - "desc": "You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", - "name": "Pipe (5-Way Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructurePipeCrossJunction6": { - "prefab": { - "prefab_name": "StructurePipeCrossJunction6", - "prefab_hash": 152378047, - "desc": "You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", - "name": "Pipe (6-Way Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructurePipeHeater": { - "prefab": { - "prefab_name": "StructurePipeHeater", - "prefab_hash": -419758574, - "desc": "Adds 1000 joules of heat per tick to the contents of your pipe network.", - "name": "Pipe Heater (Gas)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructurePipeIgniter": { - "prefab": { - "prefab_name": "StructurePipeIgniter", - "prefab_hash": 1286441942, - "desc": "Ignites the atmosphere inside the attached pipe network.", - "name": "Pipe Igniter" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructurePipeInsulatedLiquidCrossJunction": { - "prefab": { - "prefab_name": "StructurePipeInsulatedLiquidCrossJunction", - "prefab_hash": -2068497073, - "desc": "Liquid piping with very low temperature loss or gain.", - "name": "Insulated Liquid Pipe (Cross Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - } - }, - "StructurePipeLabel": { - "prefab": { - "prefab_name": "StructurePipeLabel", - "prefab_hash": -999721119, - "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.", - "name": "Pipe Label" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "StructurePipeLiquidCorner": { - "prefab": { - "prefab_name": "StructurePipeLiquidCorner", - "prefab_hash": -1856720921, - "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "name": "Liquid Pipe (Corner)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructurePipeLiquidCrossJunction": { - "prefab": { - "prefab_name": "StructurePipeLiquidCrossJunction", - "prefab_hash": 1848735691, - "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "name": "Liquid Pipe (Cross Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructurePipeLiquidCrossJunction3": { - "prefab": { - "prefab_name": "StructurePipeLiquidCrossJunction3", - "prefab_hash": 1628087508, - "desc": "You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench.", - "name": "Liquid Pipe (3-Way Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructurePipeLiquidCrossJunction4": { - "prefab": { - "prefab_name": "StructurePipeLiquidCrossJunction4", - "prefab_hash": -9555593, - "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "name": "Liquid Pipe (4-Way Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructurePipeLiquidCrossJunction5": { - "prefab": { - "prefab_name": "StructurePipeLiquidCrossJunction5", - "prefab_hash": -2006384159, - "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "name": "Liquid Pipe (5-Way Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructurePipeLiquidCrossJunction6": { - "prefab": { - "prefab_name": "StructurePipeLiquidCrossJunction6", - "prefab_hash": 291524699, - "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "name": "Liquid Pipe (6-Way Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructurePipeLiquidStraight": { - "prefab": { - "prefab_name": "StructurePipeLiquidStraight", - "prefab_hash": 667597982, - "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "name": "Liquid Pipe (Straight)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructurePipeLiquidTJunction": { - "prefab": { - "prefab_name": "StructurePipeLiquidTJunction", - "prefab_hash": 262616717, - "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "name": "Liquid Pipe (T Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructurePipeMeter": { - "prefab": { - "prefab_name": "StructurePipeMeter", - "prefab_hash": -1798362329, - "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\"", - "name": "Pipe Meter" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "StructurePipeOneWayValve": { - "prefab": { - "prefab_name": "StructurePipeOneWayValve", - "prefab_hash": 1580412404, - "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", - "name": "One Way Valve (Gas)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Output" - } - ], - "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 - } - }, - "StructurePipeOrgan": { - "prefab": { - "prefab_name": "StructurePipeOrgan", - "prefab_hash": 1305252611, - "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.", - "name": "Pipe Organ" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructurePipeRadiator": { - "prefab": { - "prefab_name": "StructurePipeRadiator", - "prefab_hash": 1696603168, - "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.", - "name": "Pipe Convection Radiator" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 1.0, - "radiation_factor": 0.75 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "StructurePipeRadiatorFlat": { - "prefab": { - "prefab_name": "StructurePipeRadiatorFlat", - "prefab_hash": -399883995, - "desc": "A pipe mounted radiator optimized for radiating heat in vacuums.", - "name": "Pipe Radiator" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.2, - "radiation_factor": 3.0 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "StructurePipeRadiatorFlatLiquid": { - "prefab": { - "prefab_name": "StructurePipeRadiatorFlatLiquid", - "prefab_hash": 2024754523, - "desc": "A liquid pipe mounted radiator optimized for radiating heat in vacuums.", - "name": "Pipe Radiator Liquid" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.2, - "radiation_factor": 3.0 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "StructurePipeStraight": { - "prefab": { - "prefab_name": "StructurePipeStraight", - "prefab_hash": 73728932, - "desc": "You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench.", - "name": "Pipe (Straight)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructurePipeTJunction": { - "prefab": { - "prefab_name": "StructurePipeTJunction", - "prefab_hash": -913817472, - "desc": "You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench.", - "name": "Pipe (T Junction)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - } - }, - "StructurePlanter": { - "prefab": { - "prefab_name": "StructurePlanter", - "prefab_hash": -1125641329, - "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).", - "name": "Planter" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - }, - "slots": [ - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - } - ] - }, - "StructurePlatformLadderOpen": { - "prefab": { - "prefab_name": "StructurePlatformLadderOpen", - "prefab_hash": 1559586682, - "desc": "", - "name": "Ladder Platform" - }, - "structure": { - "small_grid": false - } - }, - "StructurePlinth": { - "prefab": { - "prefab_name": "StructurePlinth", - "prefab_hash": 989835703, - "desc": "", - "name": "Plinth" - }, - "structure": { - "small_grid": true - }, - "slots": [ - { - "name": "", - "typ": "None" - } - ] - }, - "StructurePortablesConnector": { - "prefab": { - "prefab_name": "StructurePortablesConnector", - "prefab_hash": -899013427, - "desc": "", - "name": "Portables Connector" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Open": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Input2" - } - ], - "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 - } - }, - "StructurePowerConnector": { - "prefab": { - "prefab_name": "StructurePowerConnector", - "prefab_hash": -782951720, - "desc": "Attaches a Kit (Portable Generator) to a power network.", - "name": "Power Connector" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Open": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Portable Slot", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Power", - "role": "Input" - } - ], - "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 - } - }, - "StructurePowerTransmitter": { - "prefab": { - "prefab_name": "StructurePowerTransmitter", - "prefab_hash": -65087121, - "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.", - "name": "Microwave Power Transmitter" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "modes": { - "0": "Unlinked", - "1": "Linked" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "Input" - } - ], - "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 - } - }, - "StructurePowerTransmitterOmni": { - "prefab": { - "prefab_name": "StructurePowerTransmitterOmni", - "prefab_hash": -327468845, - "desc": "", - "name": "Power Transmitter Omni" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "Input" - } - ], - "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 - } - }, - "StructurePowerTransmitterReceiver": { - "prefab": { - "prefab_name": "StructurePowerTransmitterReceiver", - "prefab_hash": 1195820278, - "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", - "name": "Microwave Power Receiver" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "modes": { - "0": "Unlinked", - "1": "Linked" - }, - "transmission_receiver": false, - "wireless_logic": true, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "Output" - } - ], - "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 - } - }, - "StructurePowerUmbilicalFemale": { - "prefab": { - "prefab_name": "StructurePowerUmbilicalFemale", - "prefab_hash": 101488029, - "desc": "", - "name": "Umbilical Socket (Power)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Power", - "role": "Output" - } - ], - "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 - } - }, - "StructurePowerUmbilicalFemaleSide": { - "prefab": { - "prefab_name": "StructurePowerUmbilicalFemaleSide", - "prefab_hash": 1922506192, - "desc": "", - "name": "Umbilical Socket Angle (Power)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Power", - "role": "Output" - } - ], - "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 - } - }, - "StructurePowerUmbilicalMale": { - "prefab": { - "prefab_name": "StructurePowerUmbilicalMale", - "prefab_hash": 1529453938, - "desc": "0.Left\n1.Center\n2.Right", - "name": "Umbilical (Power)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Left", - "1": "Center", - "2": "Right" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "Input" - } - ], - "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 - } - }, - "StructurePoweredVent": { - "prefab": { - "prefab_name": "StructurePoweredVent", - "prefab_hash": 938836756, - "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.", - "name": "Powered Vent" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "PressureExternal": "ReadWrite", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Outward", - "1": "Inward" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructurePoweredVentLarge": { - "prefab": { - "prefab_name": "StructurePoweredVentLarge", - "prefab_hash": -785498334, - "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.", - "name": "Powered Vent Large" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "PressureExternal": "ReadWrite", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Outward", - "1": "Inward" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructurePressurantValve": { - "prefab": { - "prefab_name": "StructurePressurantValve", - "prefab_hash": 23052817, - "desc": "Pumps gas into a liquid pipe in order to raise the pressure", - "name": "Pressurant Valve" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Output" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructurePressureFedGasEngine": { - "prefab": { - "prefab_name": "StructurePressureFedGasEngine", - "prefab_hash": -624011170, - "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.", - "name": "Pressure Fed Gas Engine" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Input2" - }, - { - "typ": "PowerAndData", - "role": "Output" - } - ], - "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 - } - }, - "StructurePressureFedLiquidEngine": { - "prefab": { - "prefab_name": "StructurePressureFedLiquidEngine", - "prefab_hash": 379750958, - "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.", - "name": "Pressure Fed Liquid Engine" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Input2" - }, - { - "typ": "PowerAndData", - "role": "Output" - } - ], - "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 - } - }, - "StructurePressurePlateLarge": { - "prefab": { - "prefab_name": "StructurePressurePlateLarge", - "prefab_hash": -2008706143, - "desc": "", - "name": "Trigger Plate (Large)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Data", - "role": "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 - } - }, - "StructurePressurePlateMedium": { - "prefab": { - "prefab_name": "StructurePressurePlateMedium", - "prefab_hash": 1269458680, - "desc": "", - "name": "Trigger Plate (Medium)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Data", - "role": "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 - } - }, - "StructurePressurePlateSmall": { - "prefab": { - "prefab_name": "StructurePressurePlateSmall", - "prefab_hash": -1536471028, - "desc": "", - "name": "Trigger Plate (Small)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Data", - "role": "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 - } - }, - "StructurePressureRegulator": { - "prefab": { - "prefab_name": "StructurePressureRegulator", - "prefab_hash": 209854039, - "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.", - "name": "Pressure Regulator" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureProximitySensor": { - "prefab": { - "prefab_name": "StructureProximitySensor", - "prefab_hash": 568800213, - "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.", - "name": "Proximity Sensor" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Activate": "Read", - "Setting": "ReadWrite", - "Quantity": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructurePumpedLiquidEngine": { - "prefab": { - "prefab_name": "StructurePumpedLiquidEngine", - "prefab_hash": -2031440019, - "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", - "name": "Pumped Liquid Engine" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "None" - }, - { - "typ": "PipeLiquid", - "role": "None" - }, - { - "typ": "PowerAndData", - "role": "Output" - } - ], - "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 - } - }, - "StructurePurgeValve": { - "prefab": { - "prefab_name": "StructurePurgeValve", - "prefab_hash": -737232128, - "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.", - "name": "Purge Valve" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureRailing": { - "prefab": { - "prefab_name": "StructureRailing", - "prefab_hash": -1756913871, - "desc": "\"Safety third.\"", - "name": "Railing Industrial (Type 1)" - }, - "structure": { - "small_grid": false - } - }, - "StructureRecycler": { - "prefab": { - "prefab_name": "StructureRecycler", - "prefab_hash": -1633947337, - "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.", - "name": "Recycler" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "Reagents": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureRefrigeratedVendingMachine": { - "prefab": { - "prefab_name": "StructureRefrigeratedVendingMachine", - "prefab_hash": -1577831321, - "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. ", - "name": "Refrigerated Vending Machine" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "logic": { - "logic_slot_types": { - "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": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "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" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureReinforcedCompositeWindow": { - "prefab": { - "prefab_name": "StructureReinforcedCompositeWindow", - "prefab_hash": 2027713511, - "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.", - "name": "Reinforced Window (Composite)" - }, - "structure": { - "small_grid": false - } - }, - "StructureReinforcedCompositeWindowSteel": { - "prefab": { - "prefab_name": "StructureReinforcedCompositeWindowSteel", - "prefab_hash": -816454272, - "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.", - "name": "Reinforced Window (Composite Steel)" - }, - "structure": { - "small_grid": false - } - }, - "StructureReinforcedWallPaddedWindow": { - "prefab": { - "prefab_name": "StructureReinforcedWallPaddedWindow", - "prefab_hash": 1939061729, - "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.", - "name": "Reinforced Window (Padded)" - }, - "structure": { - "small_grid": false - } - }, - "StructureReinforcedWallPaddedWindowThin": { - "prefab": { - "prefab_name": "StructureReinforcedWallPaddedWindowThin", - "prefab_hash": 158502707, - "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.", - "name": "Reinforced Window (Thin)" - }, - "structure": { - "small_grid": false - } - }, - "StructureRocketAvionics": { - "prefab": { - "prefab_name": "StructureRocketAvionics", - "prefab_hash": 808389066, - "desc": "", - "name": "Rocket Avionics" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "modes": { - "0": "Invalid", - "1": "None", - "2": "Mine", - "3": "Survey", - "4": "Discover", - "5": "Chart" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureRocketCelestialTracker": { - "prefab": { - "prefab_name": "StructureRocketCelestialTracker", - "prefab_hash": 997453927, - "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.", - "name": "Rocket Celestial Tracker" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Horizontal": "Read", - "Vertical": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "Index": "ReadWrite", - "CelestialHash": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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": { - "instructions": { - "BodyOrientation": { - "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 |", - "typ": "CelestialTracking", - "value": 1 - } - }, - "memory_access": "Read", - "memory_size": 12 - } - }, - "StructureRocketCircuitHousing": { - "prefab": { - "prefab_name": "StructureRocketCircuitHousing", - "prefab_hash": 150135861, - "desc": "", - "name": "Rocket Circuit Housing" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "LineNumber": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "LineNumber": "ReadWrite", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": true - }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - } - ], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "Input" - } - ], - "device_pins_length": 6, - "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 - } - }, - "StructureRocketEngineTiny": { - "prefab": { - "prefab_name": "StructureRocketEngineTiny", - "prefab_hash": 178472613, - "desc": "", - "name": "Rocket Engine (Tiny)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureRocketManufactory": { - "prefab": { - "prefab_name": "StructureRocketManufactory", - "prefab_hash": 1781051034, - "desc": "", - "name": "Rocket Manufactory" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "Ingot" - }, - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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": { - "consumed_resouces": [ - "ItemAstroloyIngot", - "ItemConstantanIngot", - "ItemCopperIngot", - "ItemElectrumIngot", - "ItemGoldIngot", - "ItemHastelloyIngot", - "ItemInconelIngot", - "ItemInvarIngot", - "ItemIronIngot", - "ItemLeadIngot", - "ItemNickelIngot", - "ItemSiliconIngot", - "ItemSilverIngot", - "ItemSolderIngot", - "ItemSolidFuel", - "ItemSteelIngot", - "ItemStelliteIngot", - "ItemWaspaloyIngot", - "ItemWasteIngot" - ], - "processed_reagents": [] - }, - "fabricator_info": { - "tier": "Undefined", - "recipes": { - "ItemKitAccessBridge": { - "tier": "TierOne", - "time": 30.0, - "energy": 9000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 3.0, - "Steel": 10.0 - } - }, - "ItemKitChuteUmbilical": { - "tier": "TierOne", - "time": 5.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 3.0, - "Steel": 10.0 - } - }, - "ItemKitElectricUmbilical": { - "tier": "TierOne", - "time": 5.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Gold": 5.0, - "Steel": 5.0 - } - }, - "ItemKitFuselage": { - "tier": "TierOne", - "time": 120.0, - "energy": 60000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 20.0 - } - }, - "ItemKitGasUmbilical": { - "tier": "TierOne", - "time": 5.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Steel": 5.0 - } - }, - "ItemKitGovernedGasRocketEngine": { - "tier": "TierOne", - "time": 60.0, - "energy": 60000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Gold": 5.0, - "Iron": 15.0 - } - }, - "ItemKitLaunchMount": { - "tier": "TierOne", - "time": 240.0, - "energy": 120000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 60.0 - } - }, - "ItemKitLaunchTower": { - "tier": "TierOne", - "time": 30.0, - "energy": 30000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 10.0 - } - }, - "ItemKitLiquidUmbilical": { - "tier": "TierOne", - "time": 5.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Steel": 5.0 - } - }, - "ItemKitPressureFedGasEngine": { - "tier": "TierOne", - "time": 60.0, - "energy": 60000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Constantan": 10.0, - "Electrum": 5.0, - "Invar": 20.0, - "Steel": 20.0 - } - }, - "ItemKitPressureFedLiquidEngine": { - "tier": "TierOne", - "time": 60.0, - "energy": 60000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Astroloy": 10.0, - "Inconel": 5.0, - "Waspaloy": 15.0 - } - }, - "ItemKitPumpedLiquidEngine": { - "tier": "TierOne", - "time": 60.0, - "energy": 60000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Constantan": 10.0, - "Electrum": 5.0, - "Steel": 15.0 - } - }, - "ItemKitRocketAvionics": { - "tier": "TierOne", - "time": 5.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 2.0, - "Solder": 3.0 - } - }, - "ItemKitRocketBattery": { - "tier": "TierOne", - "time": 10.0, - "energy": 10000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Electrum": 5.0, - "Solder": 5.0, - "Steel": 10.0 - } - }, - "ItemKitRocketCargoStorage": { - "tier": "TierOne", - "time": 30.0, - "energy": 30000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Constantan": 10.0, - "Invar": 5.0, - "Steel": 10.0 - } - }, - "ItemKitRocketCelestialTracker": { - "tier": "TierOne", - "time": 5.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 5.0, - "Steel": 5.0 - } - }, - "ItemKitRocketCircuitHousing": { - "tier": "TierOne", - "time": 5.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 2.0, - "Solder": 3.0 - } - }, - "ItemKitRocketDatalink": { - "tier": "TierOne", - "time": 5.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 2.0, - "Solder": 3.0 - } - }, - "ItemKitRocketGasFuelTank": { - "tier": "TierOne", - "time": 10.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Steel": 10.0 - } - }, - "ItemKitRocketLiquidFuelTank": { - "tier": "TierOne", - "time": 10.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Steel": 20.0 - } - }, - "ItemKitRocketMiner": { - "tier": "TierOne", - "time": 60.0, - "energy": 60000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Constantan": 10.0, - "Electrum": 5.0, - "Invar": 5.0, - "Steel": 10.0 - } - }, - "ItemKitRocketScanner": { - "tier": "TierOne", - "time": 60.0, - "energy": 60000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 10.0, - "Gold": 10.0 - } - }, - "ItemKitRocketTransformerSmall": { - "tier": "TierOne", - "time": 60.0, - "energy": 12000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 5.0, - "Steel": 10.0 - } - }, - "ItemKitStairwell": { - "tier": "TierOne", - "time": 20.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 15.0 - } - }, - "ItemRocketMiningDrillHead": { - "tier": "TierOne", - "time": 30.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 20.0 - } - }, - "ItemRocketMiningDrillHeadDurable": { - "tier": "TierOne", - "time": 30.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Iron": 10.0, - "Steel": 10.0 - } - }, - "ItemRocketMiningDrillHeadHighSpeedIce": { - "tier": "TierOne", - "time": 30.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Invar": 5.0, - "Steel": 10.0 - } - }, - "ItemRocketMiningDrillHeadHighSpeedMineral": { - "tier": "TierOne", - "time": 30.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Invar": 5.0, - "Steel": 10.0 - } - }, - "ItemRocketMiningDrillHeadIce": { - "tier": "TierOne", - "time": 30.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Iron": 10.0, - "Steel": 10.0 - } - }, - "ItemRocketMiningDrillHeadLongTerm": { - "tier": "TierOne", - "time": 30.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Invar": 5.0, - "Steel": 10.0 - } - }, - "ItemRocketMiningDrillHeadMineral": { - "tier": "TierOne", - "time": 30.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Iron": 10.0, - "Steel": 10.0 - } - }, - "ItemRocketScanningHead": { - "tier": "TierOne", - "time": 60.0, - "energy": 60000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 3.0, - "Gold": 2.0 - } - } - } - }, - "memory": { - "instructions": { - "DeviceSetLock": { - "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 |", - "typ": "PrinterInstruction", - "value": 6 - }, - "EjectAllReagents": { - "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", - "typ": "PrinterInstruction", - "value": 8 - }, - "EjectReagent": { - "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 |", - "typ": "PrinterInstruction", - "value": 7 - }, - "ExecuteRecipe": { - "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 |", - "typ": "PrinterInstruction", - "value": 2 - }, - "JumpIfNextInvalid": { - "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 |", - "typ": "PrinterInstruction", - "value": 4 - }, - "JumpToAddress": { - "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 |", - "typ": "PrinterInstruction", - "value": 5 - }, - "MissingRecipeReagent": { - "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 |", - "typ": "PrinterInstruction", - "value": 9 - }, - "StackPointer": { - "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 |", - "typ": "PrinterInstruction", - "value": 1 - }, - "WaitUntilNextValid": { - "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", - "typ": "PrinterInstruction", - "value": 3 - } - }, - "memory_access": "ReadWrite", - "memory_size": 64 - } - }, - "StructureRocketMiner": { - "prefab": { - "prefab_name": "StructureRocketMiner", - "prefab_hash": -2087223687, - "desc": "Gathers available resources at the rocket's current space location.", - "name": "Rocket Miner" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {} - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Quantity": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "DrillCondition": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Export", - "typ": "None" - }, - { - "name": "Drill Head Slot", - "typ": "DrillHead" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureRocketScanner": { - "prefab": { - "prefab_name": "StructureRocketScanner", - "prefab_hash": 2014252591, - "desc": "", - "name": "Rocket Scanner" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {} - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Scanner Head Slot", - "typ": "ScanningHead" - } - ], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureRocketTower": { - "prefab": { - "prefab_name": "StructureRocketTower", - "prefab_hash": -654619479, - "desc": "", - "name": "Launch Tower" - }, - "structure": { - "small_grid": false - } - }, - "StructureRocketTransformerSmall": { - "prefab": { - "prefab_name": "StructureRocketTransformerSmall", - "prefab_hash": 518925193, - "desc": "", - "name": "Transformer Small (Rocket)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Power", - "role": "Input" - }, - { - "typ": "Power", - "role": "Output" - }, - { - "typ": "Data", - "role": "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 - } - }, - "StructureRover": { - "prefab": { - "prefab_name": "StructureRover", - "prefab_hash": 806513938, - "desc": "", - "name": "Rover Frame" - }, - "structure": { - "small_grid": false - } - }, - "StructureSDBHopper": { - "prefab": { - "prefab_name": "StructureSDBHopper", - "prefab_hash": -1875856925, - "desc": "", - "name": "SDB Hopper" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {} - }, - "logic_types": { - "Open": "ReadWrite", - "ClearMemory": "Write", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "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 - } - }, - "StructureSDBHopperAdvanced": { - "prefab": { - "prefab_name": "StructureSDBHopperAdvanced", - "prefab_hash": 467225612, - "desc": "", - "name": "SDB Hopper Advanced" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {} - }, - "logic_types": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "ClearMemory": "Write", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "None" - }, - { - "typ": "Chute", - "role": "Input" - } - ], - "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 - } - }, - "StructureSDBSilo": { - "prefab": { - "prefab_name": "StructureSDBSilo", - "prefab_hash": 1155865682, - "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.", - "name": "SDB Silo" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureSatelliteDish": { - "prefab": { - "prefab_name": "StructureSatelliteDish", - "prefab_hash": 439026183, - "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.", - "name": "Medium Satellite Dish" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureSecurityPrinter": { - "prefab": { - "prefab_name": "StructureSecurityPrinter", - "prefab_hash": -641491515, - "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", - "name": "Security Printer" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "Ingot" - }, - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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": { - "consumed_resouces": [ - "ItemAstroloyIngot", - "ItemConstantanIngot", - "ItemCopperIngot", - "ItemElectrumIngot", - "ItemGoldIngot", - "ItemHastelloyIngot", - "ItemInconelIngot", - "ItemInvarIngot", - "ItemIronIngot", - "ItemLeadIngot", - "ItemNickelIngot", - "ItemSiliconIngot", - "ItemSilverIngot", - "ItemSolderIngot", - "ItemSolidFuel", - "ItemSteelIngot", - "ItemStelliteIngot", - "ItemWaspaloyIngot", - "ItemWasteIngot" - ], - "processed_reagents": [] - }, - "fabricator_info": { - "tier": "Undefined", - "recipes": { - "AccessCardBlack": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardBlue": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardBrown": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardGray": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardGreen": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardKhaki": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardOrange": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardPink": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardPurple": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardRed": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardWhite": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardYellow": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "CartridgeAccessController": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 1.0 - } - }, - "FireArmSMG": { - "tier": "TierOne", - "time": 120.0, - "energy": 3000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Nickel": 10.0, - "Steel": 30.0 - } - }, - "Handgun": { - "tier": "TierOne", - "time": 120.0, - "energy": 3000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Nickel": 10.0, - "Steel": 30.0 - } - }, - "HandgunMagazine": { - "tier": "TierOne", - "time": 60.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Lead": 1.0, - "Steel": 3.0 - } - }, - "ItemAmmoBox": { - "tier": "TierOne", - "time": 120.0, - "energy": 3000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 30.0, - "Lead": 50.0, - "Steel": 30.0 - } - }, - "ItemExplosive": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 5, - "reagents": { - "Copper": 5.0, - "Electrum": 1.0, - "Gold": 5.0, - "Lead": 10.0, - "Steel": 7.0 - } - }, - "ItemGrenade": { - "tier": "TierOne", - "time": 90.0, - "energy": 2900.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 15.0, - "Gold": 1.0, - "Lead": 25.0, - "Steel": 25.0 - } - }, - "ItemMiningCharge": { - "tier": "TierOne", - "time": 7.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 7.0, - "Lead": 10.0 - } - }, - "SMGMagazine": { - "tier": "TierOne", - "time": 60.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Lead": 1.0, - "Steel": 3.0 - } - }, - "WeaponPistolEnergy": { - "tier": "TierTwo", - "time": 120.0, - "energy": 3000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Electrum": 20.0, - "Gold": 10.0, - "Solder": 10.0, - "Steel": 10.0 - } - }, - "WeaponRifleEnergy": { - "tier": "TierTwo", - "time": 240.0, - "energy": 10000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 6, - "reagents": { - "Constantan": 10.0, - "Electrum": 20.0, - "Gold": 10.0, - "Invar": 10.0, - "Solder": 10.0, - "Steel": 20.0 - } - } - } - }, - "memory": { - "instructions": { - "DeviceSetLock": { - "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 |", - "typ": "PrinterInstruction", - "value": 6 - }, - "EjectAllReagents": { - "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", - "typ": "PrinterInstruction", - "value": 8 - }, - "EjectReagent": { - "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 |", - "typ": "PrinterInstruction", - "value": 7 - }, - "ExecuteRecipe": { - "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 |", - "typ": "PrinterInstruction", - "value": 2 - }, - "JumpIfNextInvalid": { - "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 |", - "typ": "PrinterInstruction", - "value": 4 - }, - "JumpToAddress": { - "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 |", - "typ": "PrinterInstruction", - "value": 5 - }, - "MissingRecipeReagent": { - "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 |", - "typ": "PrinterInstruction", - "value": 9 - }, - "StackPointer": { - "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 |", - "typ": "PrinterInstruction", - "value": 1 - }, - "WaitUntilNextValid": { - "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", - "typ": "PrinterInstruction", - "value": 3 - } - }, - "memory_access": "ReadWrite", - "memory_size": 64 - } - }, - "StructureShelf": { - "prefab": { - "prefab_name": "StructureShelf", - "prefab_hash": 1172114950, - "desc": "", - "name": "Shelf" - }, - "structure": { - "small_grid": true - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ] - }, - "StructureShelfMedium": { - "prefab": { - "prefab_name": "StructureShelfMedium", - "prefab_hash": 182006674, - "desc": "A shelf for putting things on, so you can see them.", - "name": "Shelf Medium" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Open": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": 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" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructureShortCornerLocker": { - "prefab": { - "prefab_name": "StructureShortCornerLocker", - "prefab_hash": 1330754486, - "desc": "", - "name": "Short Corner Locker" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructureShortLocker": { - "prefab": { - "prefab_name": "StructureShortLocker", - "prefab_hash": -554553467, - "desc": "", - "name": "Short Locker" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": 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" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructureShower": { - "prefab": { - "prefab_name": "StructureShower", - "prefab_hash": -775128944, - "desc": "", - "name": "Shower" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Open": "ReadWrite", - "Activate": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Output" - } - ], - "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 - } - }, - "StructureShowerPowered": { - "prefab": { - "prefab_name": "StructureShowerPowered", - "prefab_hash": -1081797501, - "desc": "", - "name": "Shower (Powered)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureSign1x1": { - "prefab": { - "prefab_name": "StructureSign1x1", - "prefab_hash": 879058460, - "desc": "", - "name": "Sign 1x1" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "StructureSign2x1": { - "prefab": { - "prefab_name": "StructureSign2x1", - "prefab_hash": 908320837, - "desc": "", - "name": "Sign 2x1" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "StructureSingleBed": { - "prefab": { - "prefab_name": "StructureSingleBed", - "prefab_hash": -492611, - "desc": "Description coming.", - "name": "Single Bed" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Bed", - "typ": "Entity" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructureSleeper": { - "prefab": { - "prefab_name": "StructureSleeper", - "prefab_hash": -1467449329, - "desc": "", - "name": "Sleeper" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Bed", - "typ": "Entity" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureSleeperLeft": { - "prefab": { - "prefab_name": "StructureSleeperLeft", - "prefab_hash": 1213495833, - "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.", - "name": "Sleeper Left" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "logic": { - "logic_slot_types": { - "0": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "modes": { - "0": "Safe", - "1": "Unsafe", - "2": "Unpowered" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Player", - "typ": "Entity" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureSleeperRight": { - "prefab": { - "prefab_name": "StructureSleeperRight", - "prefab_hash": -1812330717, - "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.", - "name": "Sleeper Right" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "logic": { - "logic_slot_types": { - "0": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "modes": { - "0": "Safe", - "1": "Unsafe", - "2": "Unpowered" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Player", - "typ": "Entity" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureSleeperVertical": { - "prefab": { - "prefab_name": "StructureSleeperVertical", - "prefab_hash": -1300059018, - "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.", - "name": "Sleeper Vertical" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.1, - "radiation_factor": 0.1 - }, - "logic": { - "logic_slot_types": { - "0": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "modes": { - "0": "Safe", - "1": "Unsafe", - "2": "Unpowered" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Player", - "typ": "Entity" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureSleeperVerticalDroid": { - "prefab": { - "prefab_name": "StructureSleeperVerticalDroid", - "prefab_hash": 1382098999, - "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.", - "name": "Droid Sleeper Vertical" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {} - }, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Player", - "typ": "Entity" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureSmallDirectHeatExchangeGastoGas": { - "prefab": { - "prefab_name": "StructureSmallDirectHeatExchangeGastoGas", - "prefab_hash": 1310303582, - "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", - "name": "Small Direct Heat Exchanger - Gas + Gas" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Input2" - } - ], - "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 - } - }, - "StructureSmallDirectHeatExchangeLiquidtoGas": { - "prefab": { - "prefab_name": "StructureSmallDirectHeatExchangeLiquidtoGas", - "prefab_hash": 1825212016, - "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", - "name": "Small Direct Heat Exchanger - Liquid + Gas " - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Input2" - } - ], - "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 - } - }, - "StructureSmallDirectHeatExchangeLiquidtoLiquid": { - "prefab": { - "prefab_name": "StructureSmallDirectHeatExchangeLiquidtoLiquid", - "prefab_hash": -507770416, - "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", - "name": "Small Direct Heat Exchanger - Liquid + Liquid" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Input2" - } - ], - "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 - } - }, - "StructureSmallSatelliteDish": { - "prefab": { - "prefab_name": "StructureSmallSatelliteDish", - "prefab_hash": -2138748650, - "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.", - "name": "Small Satellite Dish" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "Input" - } - ], - "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 - } - }, - "StructureSmallTableBacklessDouble": { - "prefab": { - "prefab_name": "StructureSmallTableBacklessDouble", - "prefab_hash": -1633000411, - "desc": "", - "name": "Small (Table Backless Double)" - }, - "structure": { - "small_grid": true - } - }, - "StructureSmallTableBacklessSingle": { - "prefab": { - "prefab_name": "StructureSmallTableBacklessSingle", - "prefab_hash": -1897221677, - "desc": "", - "name": "Small (Table Backless Single)" - }, - "structure": { - "small_grid": true - } - }, - "StructureSmallTableDinnerSingle": { - "prefab": { - "prefab_name": "StructureSmallTableDinnerSingle", - "prefab_hash": 1260651529, - "desc": "", - "name": "Small (Table Dinner Single)" - }, - "structure": { - "small_grid": true - } - }, - "StructureSmallTableRectangleDouble": { - "prefab": { - "prefab_name": "StructureSmallTableRectangleDouble", - "prefab_hash": -660451023, - "desc": "", - "name": "Small (Table Rectangle Double)" - }, - "structure": { - "small_grid": true - } - }, - "StructureSmallTableRectangleSingle": { - "prefab": { - "prefab_name": "StructureSmallTableRectangleSingle", - "prefab_hash": -924678969, - "desc": "", - "name": "Small (Table Rectangle Single)" - }, - "structure": { - "small_grid": true - } - }, - "StructureSmallTableThickDouble": { - "prefab": { - "prefab_name": "StructureSmallTableThickDouble", - "prefab_hash": -19246131, - "desc": "", - "name": "Small (Table Thick Double)" - }, - "structure": { - "small_grid": true - } - }, - "StructureSmallTableThickSingle": { - "prefab": { - "prefab_name": "StructureSmallTableThickSingle", - "prefab_hash": -291862981, - "desc": "", - "name": "Small Table (Thick Single)" - }, - "structure": { - "small_grid": true - } - }, - "StructureSolarPanel": { - "prefab": { - "prefab_name": "StructureSolarPanel", - "prefab_hash": -2045627372, - "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.", - "name": "Solar Panel" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureSolarPanel45": { - "prefab": { - "prefab_name": "StructureSolarPanel45", - "prefab_hash": -1554349863, - "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.", - "name": "Solar Panel (Angled)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureSolarPanel45Reinforced": { - "prefab": { - "prefab_name": "StructureSolarPanel45Reinforced", - "prefab_hash": 930865127, - "desc": "This solar panel is resistant to storm damage.", - "name": "Solar Panel (Heavy Angled)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureSolarPanelDual": { - "prefab": { - "prefab_name": "StructureSolarPanelDual", - "prefab_hash": -539224550, - "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.", - "name": "Solar Panel (Dual)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureSolarPanelDualReinforced": { - "prefab": { - "prefab_name": "StructureSolarPanelDualReinforced", - "prefab_hash": -1545574413, - "desc": "This solar panel is resistant to storm damage.", - "name": "Solar Panel (Heavy Dual)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureSolarPanelFlat": { - "prefab": { - "prefab_name": "StructureSolarPanelFlat", - "prefab_hash": 1968102968, - "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.", - "name": "Solar Panel (Flat)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureSolarPanelFlatReinforced": { - "prefab": { - "prefab_name": "StructureSolarPanelFlatReinforced", - "prefab_hash": 1697196770, - "desc": "This solar panel is resistant to storm damage.", - "name": "Solar Panel (Heavy Flat)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureSolarPanelReinforced": { - "prefab": { - "prefab_name": "StructureSolarPanelReinforced", - "prefab_hash": -934345724, - "desc": "This solar panel is resistant to storm damage.", - "name": "Solar Panel (Heavy)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureSolidFuelGenerator": { - "prefab": { - "prefab_name": "StructureSolidFuelGenerator", - "prefab_hash": 813146305, - "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.", - "name": "Generator (Solid Fuel)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Lock": "ReadWrite", - "On": "ReadWrite", - "ClearMemory": "Write", - "ImportCount": "Read", - "PowerGeneration": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Not Generating", - "1": "Generating" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Input", - "typ": "Ore" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "Output" - } - ], - "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": { - "consumed_resouces": [ - "ItemCharcoal", - "ItemCoalOre", - "ItemSolidFuel" - ], - "processed_reagents": [] - } - }, - "StructureSorter": { - "prefab": { - "prefab_name": "StructureSorter", - "prefab_hash": -1009150565, - "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.", - "name": "Sorter" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "Output": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Split", - "1": "Filter", - "2": "Logic" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - }, - { - "name": "Export 2", - "typ": "None" - }, - { - "name": "Data Disk", - "typ": "DataDisk" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Output2" - }, - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureStacker": { - "prefab": { - "prefab_name": "StructureStacker", - "prefab_hash": -2020231820, - "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.", - "name": "Stacker" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "modes": { - "0": "Automatic", - "1": "Logic" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - }, - { - "name": "Processing", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "None" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Chute", - "role": "Input" - } - ], - "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 - } - }, - "StructureStackerReverse": { - "prefab": { - "prefab_name": "StructureStackerReverse", - "prefab_hash": 1585641623, - "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.", - "name": "Stacker" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "modes": { - "0": "Automatic", - "1": "Logic" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "None" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Chute", - "role": "Input" - } - ], - "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 - } - }, - "StructureStairs4x2": { - "prefab": { - "prefab_name": "StructureStairs4x2", - "prefab_hash": 1405018945, - "desc": "", - "name": "Stairs" - }, - "structure": { - "small_grid": false - } - }, - "StructureStairs4x2RailL": { - "prefab": { - "prefab_name": "StructureStairs4x2RailL", - "prefab_hash": 155214029, - "desc": "", - "name": "Stairs with Rail (Left)" - }, - "structure": { - "small_grid": false - } - }, - "StructureStairs4x2RailR": { - "prefab": { - "prefab_name": "StructureStairs4x2RailR", - "prefab_hash": -212902482, - "desc": "", - "name": "Stairs with Rail (Right)" - }, - "structure": { - "small_grid": false - } - }, - "StructureStairs4x2Rails": { - "prefab": { - "prefab_name": "StructureStairs4x2Rails", - "prefab_hash": -1088008720, - "desc": "", - "name": "Stairs with Rails" - }, - "structure": { - "small_grid": false - } - }, - "StructureStairwellBackLeft": { - "prefab": { - "prefab_name": "StructureStairwellBackLeft", - "prefab_hash": 505924160, - "desc": "", - "name": "Stairwell (Back Left)" - }, - "structure": { - "small_grid": false - } - }, - "StructureStairwellBackPassthrough": { - "prefab": { - "prefab_name": "StructureStairwellBackPassthrough", - "prefab_hash": -862048392, - "desc": "", - "name": "Stairwell (Back Passthrough)" - }, - "structure": { - "small_grid": false - } - }, - "StructureStairwellBackRight": { - "prefab": { - "prefab_name": "StructureStairwellBackRight", - "prefab_hash": -2128896573, - "desc": "", - "name": "Stairwell (Back Right)" - }, - "structure": { - "small_grid": false - } - }, - "StructureStairwellFrontLeft": { - "prefab": { - "prefab_name": "StructureStairwellFrontLeft", - "prefab_hash": -37454456, - "desc": "", - "name": "Stairwell (Front Left)" - }, - "structure": { - "small_grid": false - } - }, - "StructureStairwellFrontPassthrough": { - "prefab": { - "prefab_name": "StructureStairwellFrontPassthrough", - "prefab_hash": -1625452928, - "desc": "", - "name": "Stairwell (Front Passthrough)" - }, - "structure": { - "small_grid": false - } - }, - "StructureStairwellFrontRight": { - "prefab": { - "prefab_name": "StructureStairwellFrontRight", - "prefab_hash": 340210934, - "desc": "", - "name": "Stairwell (Front Right)" - }, - "structure": { - "small_grid": false - } - }, - "StructureStairwellNoDoors": { - "prefab": { - "prefab_name": "StructureStairwellNoDoors", - "prefab_hash": 2049879875, - "desc": "", - "name": "Stairwell (No Doors)" - }, - "structure": { - "small_grid": false - } - }, - "StructureStirlingEngine": { - "prefab": { - "prefab_name": "StructureStirlingEngine", - "prefab_hash": -260316435, - "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.", - "name": "Stirling Engine" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.15, - "radiation_factor": 0.15 - }, - "logic": { - "logic_slot_types": { - "0": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "GasCanister" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureStorageLocker": { - "prefab": { - "prefab_name": "StructureStorageLocker", - "prefab_hash": -793623899, - "desc": "", - "name": "Locker" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": 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" - }, - { - "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" - } - ], - "device": { - "connection_list": [], - "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 - } - }, - "StructureSuitStorage": { - "prefab": { - "prefab_name": "StructureSuitStorage", - "prefab_hash": 255034731, - "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.", - "name": "Suit Storage" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Helmet", - "typ": "Helmet" - }, - { - "name": "Suit", - "typ": "Suit" - }, - { - "name": "Back", - "typ": "Back" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "Pipe", - "role": "Input2" - }, - { - "typ": "Pipe", - "role": "Output" - } - ], - "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 - } - }, - "StructureTankBig": { - "prefab": { - "prefab_name": "StructureTankBig", - "prefab_hash": -1606848156, - "desc": "", - "name": "Large Tank" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.002 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - } - ], - "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 - } - }, - "StructureTankBigInsulated": { - "prefab": { - "prefab_name": "StructureTankBigInsulated", - "prefab_hash": 1280378227, - "desc": "", - "name": "Tank Big (Insulated)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - } - ], - "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 - } - }, - "StructureTankConnector": { - "prefab": { - "prefab_name": "StructureTankConnector", - "prefab_hash": -1276379454, - "desc": "Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network.", - "name": "Tank Connector" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - }, - "slots": [ - { - "name": "", - "typ": "None" - } - ] - }, - "StructureTankConnectorLiquid": { - "prefab": { - "prefab_name": "StructureTankConnectorLiquid", - "prefab_hash": 1331802518, - "desc": "These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network.", - "name": "Liquid Tank Connector" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.010000001, - "radiation_factor": 0.0005 - }, - "slots": [ - { - "name": "Portable Slot", - "typ": "None" - } - ] - }, - "StructureTankSmall": { - "prefab": { - "prefab_name": "StructureTankSmall", - "prefab_hash": 1013514688, - "desc": "", - "name": "Small Tank" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.002 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "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 - } - }, - "StructureTankSmallAir": { - "prefab": { - "prefab_name": "StructureTankSmallAir", - "prefab_hash": 955744474, - "desc": "", - "name": "Small Tank (Air)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.002 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "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 - } - }, - "StructureTankSmallFuel": { - "prefab": { - "prefab_name": "StructureTankSmallFuel", - "prefab_hash": 2102454415, - "desc": "", - "name": "Small Tank (Fuel)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.05, - "radiation_factor": 0.002 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "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 - } - }, - "StructureTankSmallInsulated": { - "prefab": { - "prefab_name": "StructureTankSmallInsulated", - "prefab_hash": 272136332, - "desc": "", - "name": "Tank Small (Insulated)" - }, - "structure": { - "small_grid": true - }, - "thermal_info": { - "convection_factor": 0.0, - "radiation_factor": 0.0 - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Input" - } - ], - "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 - } - }, - "StructureToolManufactory": { - "prefab": { - "prefab_name": "StructureToolManufactory", - "prefab_hash": -465741100, - "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.", - "name": "Tool Manufactory" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {}, - "1": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "Ingot" - }, - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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": { - "consumed_resouces": [ - "ItemAstroloyIngot", - "ItemConstantanIngot", - "ItemCopperIngot", - "ItemElectrumIngot", - "ItemGoldIngot", - "ItemHastelloyIngot", - "ItemInconelIngot", - "ItemInvarIngot", - "ItemIronIngot", - "ItemLeadIngot", - "ItemNickelIngot", - "ItemSiliconIngot", - "ItemSilverIngot", - "ItemSolderIngot", - "ItemSolidFuel", - "ItemSteelIngot", - "ItemStelliteIngot", - "ItemWaspaloyIngot", - "ItemWasteIngot" - ], - "processed_reagents": [] - }, - "fabricator_info": { - "tier": "Undefined", - "recipes": { - "FlareGun": { - "tier": "TierOne", - "time": 10.0, - "energy": 2000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Iron": 10.0, - "Silicon": 10.0 - } - }, - "ItemAngleGrinder": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 1.0, - "Iron": 3.0 - } - }, - "ItemArcWelder": { - "tier": "TierOne", - "time": 30.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Electrum": 10.0, - "Invar": 5.0, - "Solder": 10.0, - "Steel": 10.0 - } - }, - "ItemBasketBall": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 1.0 - } - }, - "ItemBeacon": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 1.0, - "Iron": 2.0 - } - }, - "ItemChemLightBlue": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 1.0 - } - }, - "ItemChemLightGreen": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 1.0 - } - }, - "ItemChemLightRed": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 1.0 - } - }, - "ItemChemLightWhite": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 1.0 - } - }, - "ItemChemLightYellow": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 1.0 - } - }, - "ItemClothingBagOveralls_Aus": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_Brazil": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_Canada": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_China": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_EU": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_France": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_Germany": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_Japan": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_Korea": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_NZ": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_Russia": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_SouthAfrica": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_UK": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_US": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_Ukraine": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemCrowbar": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemDirtCanister": { - "tier": "TierOne", - "time": 5.0, - "energy": 400.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ItemDisposableBatteryCharger": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 2.0, - "Iron": 2.0 - } - }, - "ItemDrill": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Iron": 5.0 - } - }, - "ItemDuctTape": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 2.0 - } - }, - "ItemEvaSuit": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 5.0 - } - }, - "ItemFlagSmall": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemFlashlight": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Gold": 2.0 - } - }, - "ItemGlasses": { - "tier": "TierOne", - "time": 20.0, - "energy": 250.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Iron": 15.0, - "Silicon": 10.0 - } - }, - "ItemHardBackpack": { - "tier": "TierTwo", - "time": 30.0, - "energy": 1500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Astroloy": 5.0, - "Steel": 15.0, - "Stellite": 5.0 - } - }, - "ItemHardJetpack": { - "tier": "TierTwo", - "time": 40.0, - "energy": 1750.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Astroloy": 8.0, - "Steel": 20.0, - "Stellite": 8.0, - "Waspaloy": 8.0 - } - }, - "ItemHardMiningBackPack": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Invar": 1.0, - "Steel": 6.0 - } - }, - "ItemHardSuit": { - "tier": "TierTwo", - "time": 60.0, - "energy": 3000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Astroloy": 10.0, - "Steel": 20.0, - "Stellite": 2.0 - } - }, - "ItemHardsuitHelmet": { - "tier": "TierTwo", - "time": 50.0, - "energy": 1750.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Astroloy": 2.0, - "Steel": 10.0, - "Stellite": 2.0 - } - }, - "ItemIgniter": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Copper": 3.0 - } - }, - "ItemJetpackBasic": { - "tier": "TierOne", - "time": 30.0, - "energy": 1500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Gold": 2.0, - "Lead": 5.0, - "Steel": 10.0 - } - }, - "ItemKitBasket": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 5.0 - } - }, - "ItemLabeller": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Gold": 1.0, - "Iron": 2.0 - } - }, - "ItemMKIIAngleGrinder": { - "tier": "TierTwo", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Electrum": 4.0, - "Iron": 3.0 - } - }, - "ItemMKIIArcWelder": { - "tier": "TierTwo", - "time": 30.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Electrum": 14.0, - "Invar": 5.0, - "Solder": 10.0, - "Steel": 10.0 - } - }, - "ItemMKIICrowbar": { - "tier": "TierTwo", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 5.0, - "Iron": 5.0 - } - }, - "ItemMKIIDrill": { - "tier": "TierTwo", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Electrum": 5.0, - "Iron": 5.0 - } - }, - "ItemMKIIDuctTape": { - "tier": "TierTwo", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 1.0, - "Iron": 2.0 - } - }, - "ItemMKIIMiningDrill": { - "tier": "TierTwo", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Electrum": 5.0, - "Iron": 3.0 - } - }, - "ItemMKIIScrewdriver": { - "tier": "TierTwo", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 2.0, - "Iron": 2.0 - } - }, - "ItemMKIIWireCutters": { - "tier": "TierTwo", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 5.0, - "Iron": 3.0 - } - }, - "ItemMKIIWrench": { - "tier": "TierTwo", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 3.0, - "Iron": 3.0 - } - }, - "ItemMarineBodyArmor": { - "tier": "TierOne", - "time": 60.0, - "energy": 3000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Nickel": 10.0, - "Silicon": 10.0, - "Steel": 20.0 - } - }, - "ItemMarineHelmet": { - "tier": "TierOne", - "time": 45.0, - "energy": 1750.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Gold": 4.0, - "Silicon": 4.0, - "Steel": 8.0 - } - }, - "ItemMiningBackPack": { - "tier": "TierOne", - "time": 8.0, - "energy": 800.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 6.0 - } - }, - "ItemMiningBelt": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ItemMiningBeltMKII": { - "tier": "TierTwo", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Constantan": 5.0, - "Steel": 10.0 - } - }, - "ItemMiningDrill": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 3.0 - } - }, - "ItemMiningDrillHeavy": { - "tier": "TierTwo", - "time": 30.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Electrum": 5.0, - "Invar": 10.0, - "Solder": 10.0, - "Steel": 10.0 - } - }, - "ItemMiningDrillPneumatic": { - "tier": "TierOne", - "time": 20.0, - "energy": 2000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 4.0, - "Solder": 4.0, - "Steel": 6.0 - } - }, - "ItemMkIIToolbelt": { - "tier": "TierTwo", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Constantan": 5.0, - "Iron": 3.0 - } - }, - "ItemNVG": { - "tier": "TierOne", - "time": 45.0, - "energy": 2750.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Hastelloy": 10.0, - "Silicon": 5.0, - "Steel": 5.0 - } - }, - "ItemPickaxe": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 1.0, - "Iron": 2.0 - } - }, - "ItemPlantSampler": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Iron": 5.0 - } - }, - "ItemRemoteDetonator": { - "tier": "TierOne", - "time": 4.5, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Gold": 1.0, - "Iron": 3.0 - } - }, - "ItemReusableFireExtinguisher": { - "tier": "TierOne", - "time": 20.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 5.0 - } - }, - "ItemRoadFlare": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemScrewdriver": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 2.0 - } - }, - "ItemSensorLenses": { - "tier": "TierTwo", - "time": 45.0, - "energy": 3500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Inconel": 5.0, - "Silicon": 5.0, - "Steel": 5.0 - } - }, - "ItemSensorProcessingUnitCelestialScanner": { - "tier": "TierTwo", - "time": 15.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 5.0, - "Silicon": 5.0 - } - }, - "ItemSensorProcessingUnitMesonScanner": { - "tier": "TierTwo", - "time": 15.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 5.0, - "Silicon": 5.0 - } - }, - "ItemSensorProcessingUnitOreScanner": { - "tier": "TierTwo", - "time": 15.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 5.0, - "Silicon": 5.0 - } - }, - "ItemSpaceHelmet": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Gold": 2.0 - } - }, - "ItemSpacepack": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 5.0 - } - }, - "ItemSprayCanBlack": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanBlue": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanBrown": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanGreen": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanGrey": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanKhaki": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanOrange": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanPink": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanPurple": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanRed": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanWhite": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanYellow": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayGun": { - "tier": "TierTwo", - "time": 10.0, - "energy": 2000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Invar": 5.0, - "Silicon": 10.0, - "Steel": 10.0 - } - }, - "ItemTerrainManipulator": { - "tier": "TierOne", - "time": 15.0, - "energy": 600.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 2.0, - "Iron": 5.0 - } - }, - "ItemToolBelt": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ItemWearLamp": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Gold": 2.0 - } - }, - "ItemWeldingTorch": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 1.0, - "Iron": 3.0 - } - }, - "ItemWireCutters": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ItemWrench": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ToyLuna": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Gold": 1.0, - "Iron": 5.0 - } - }, - "UniformCommander": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "UniformMarine": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 10.0 - } - }, - "UniformOrangeJumpSuit": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 10.0 - } - }, - "WeaponPistolEnergy": { - "tier": "TierTwo", - "time": 120.0, - "energy": 3000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Electrum": 20.0, - "Gold": 10.0, - "Solder": 10.0, - "Steel": 10.0 - } - }, - "WeaponRifleEnergy": { - "tier": "TierTwo", - "time": 240.0, - "energy": 10000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 6, - "reagents": { - "Constantan": 10.0, - "Electrum": 20.0, - "Gold": 10.0, - "Invar": 10.0, - "Solder": 10.0, - "Steel": 20.0 - } - } - } - }, - "memory": { - "instructions": { - "DeviceSetLock": { - "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 |", - "typ": "PrinterInstruction", - "value": 6 - }, - "EjectAllReagents": { - "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", - "typ": "PrinterInstruction", - "value": 8 - }, - "EjectReagent": { - "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 |", - "typ": "PrinterInstruction", - "value": 7 - }, - "ExecuteRecipe": { - "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 |", - "typ": "PrinterInstruction", - "value": 2 - }, - "JumpIfNextInvalid": { - "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 |", - "typ": "PrinterInstruction", - "value": 4 - }, - "JumpToAddress": { - "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 |", - "typ": "PrinterInstruction", - "value": 5 - }, - "MissingRecipeReagent": { - "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 |", - "typ": "PrinterInstruction", - "value": 9 - }, - "StackPointer": { - "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 |", - "typ": "PrinterInstruction", - "value": 1 - }, - "WaitUntilNextValid": { - "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", - "typ": "PrinterInstruction", - "value": 3 - } - }, - "memory_access": "ReadWrite", - "memory_size": 64 - } - }, - "StructureTorpedoRack": { - "prefab": { - "prefab_name": "StructureTorpedoRack", - "prefab_hash": 1473807953, - "desc": "", - "name": "Torpedo Rack" - }, - "structure": { - "small_grid": true - }, - "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" - } - ] - }, - "StructureTraderWaypoint": { - "prefab": { - "prefab_name": "StructureTraderWaypoint", - "prefab_hash": 1570931620, - "desc": "", - "name": "Trader Waypoint" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureTransformer": { - "prefab": { - "prefab_name": "StructureTransformer", - "prefab_hash": -1423212473, - "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.", - "name": "Transformer (Large)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "Input" - }, - { - "typ": "Power", - "role": "Output" - } - ], - "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 - } - }, - "StructureTransformerMedium": { - "prefab": { - "prefab_name": "StructureTransformerMedium", - "prefab_hash": -1065725831, - "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.", - "name": "Transformer (Medium)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Power", - "role": "Input" - }, - { - "typ": "PowerAndData", - "role": "Output" - } - ], - "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 - } - }, - "StructureTransformerMediumReversed": { - "prefab": { - "prefab_name": "StructureTransformerMediumReversed", - "prefab_hash": 833912764, - "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.", - "name": "Transformer Reversed (Medium)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Power", - "role": "Output" - }, - { - "typ": "PowerAndData", - "role": "Input" - } - ], - "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 - } - }, - "StructureTransformerSmall": { - "prefab": { - "prefab_name": "StructureTransformerSmall", - "prefab_hash": -890946730, - "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.", - "name": "Transformer (Small)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "Input" - }, - { - "typ": "Power", - "role": "Output" - } - ], - "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 - } - }, - "StructureTransformerSmallReversed": { - "prefab": { - "prefab_name": "StructureTransformerSmallReversed", - "prefab_hash": 1054059374, - "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.", - "name": "Transformer Reversed (Small)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Power", - "role": "Output" - }, - { - "typ": "PowerAndData", - "role": "Input" - } - ], - "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 - } - }, - "StructureTurbineGenerator": { - "prefab": { - "prefab_name": "StructureTurbineGenerator", - "prefab_hash": 1282191063, - "desc": "", - "name": "Turbine Generator" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PowerGeneration": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureTurboVolumePump": { - "prefab": { - "prefab_name": "StructureTurboVolumePump", - "prefab_hash": 1310794736, - "desc": "Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction.", - "name": "Turbo Volume Pump (Gas)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Right", - "1": "Left" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "None" - }, - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "Pipe", - "role": "Input" - } - ], - "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 - } - }, - "StructureUnloader": { - "prefab": { - "prefab_name": "StructureUnloader", - "prefab_hash": 750118160, - "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.", - "name": "Unloader" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "Output": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Automatic", - "1": "Logic" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "None" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Chute", - "role": "Input" - } - ], - "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 - } - }, - "StructureUprightWindTurbine": { - "prefab": { - "prefab_name": "StructureUprightWindTurbine", - "prefab_hash": 1622183451, - "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.", - "name": "Upright Wind Turbine" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PowerGeneration": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Power", - "role": "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 - } - }, - "StructureValve": { - "prefab": { - "prefab_name": "StructureValve", - "prefab_hash": -692036078, - "desc": "", - "name": "Valve" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "None" - }, - { - "typ": "Pipe", - "role": "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 - } - }, - "StructureVendingMachine": { - "prefab": { - "prefab_name": "StructureVendingMachine", - "prefab_hash": -443130773, - "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.", - "name": "Vending Machine" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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": {} - }, - "logic_types": { - "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", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "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" - } - ], - "device": { - "connection_list": [ - { - "typ": "Chute", - "role": "Input" - }, - { - "typ": "Chute", - "role": "Output" - }, - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureVolumePump": { - "prefab": { - "prefab_name": "StructureVolumePump", - "prefab_hash": -321403609, - "desc": "The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks.", - "name": "Volume Pump" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "Output" - }, - { - "typ": "Pipe", - "role": "Input" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureWallArch": { - "prefab": { - "prefab_name": "StructureWallArch", - "prefab_hash": -858143148, - "desc": "", - "name": "Wall (Arch)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallArchArrow": { - "prefab": { - "prefab_name": "StructureWallArchArrow", - "prefab_hash": 1649708822, - "desc": "", - "name": "Wall (Arch Arrow)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallArchCornerRound": { - "prefab": { - "prefab_name": "StructureWallArchCornerRound", - "prefab_hash": 1794588890, - "desc": "", - "name": "Wall (Arch Corner Round)" - }, - "structure": { - "small_grid": true - } - }, - "StructureWallArchCornerSquare": { - "prefab": { - "prefab_name": "StructureWallArchCornerSquare", - "prefab_hash": -1963016580, - "desc": "", - "name": "Wall (Arch Corner Square)" - }, - "structure": { - "small_grid": true - } - }, - "StructureWallArchCornerTriangle": { - "prefab": { - "prefab_name": "StructureWallArchCornerTriangle", - "prefab_hash": 1281911841, - "desc": "", - "name": "Wall (Arch Corner Triangle)" - }, - "structure": { - "small_grid": true - } - }, - "StructureWallArchPlating": { - "prefab": { - "prefab_name": "StructureWallArchPlating", - "prefab_hash": 1182510648, - "desc": "", - "name": "Wall (Arch Plating)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallArchTwoTone": { - "prefab": { - "prefab_name": "StructureWallArchTwoTone", - "prefab_hash": 782529714, - "desc": "", - "name": "Wall (Arch Two Tone)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallCooler": { - "prefab": { - "prefab_name": "StructureWallCooler", - "prefab_hash": -739292323, - "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.", - "name": "Wall Cooler" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "", - "typ": "DataDisk" - } - ], - "device": { - "connection_list": [ - { - "typ": "Pipe", - "role": "None" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureWallFlat": { - "prefab": { - "prefab_name": "StructureWallFlat", - "prefab_hash": 1635864154, - "desc": "", - "name": "Wall (Flat)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallFlatCornerRound": { - "prefab": { - "prefab_name": "StructureWallFlatCornerRound", - "prefab_hash": 898708250, - "desc": "", - "name": "Wall (Flat Corner Round)" - }, - "structure": { - "small_grid": true - } - }, - "StructureWallFlatCornerSquare": { - "prefab": { - "prefab_name": "StructureWallFlatCornerSquare", - "prefab_hash": 298130111, - "desc": "", - "name": "Wall (Flat Corner Square)" - }, - "structure": { - "small_grid": true - } - }, - "StructureWallFlatCornerTriangle": { - "prefab": { - "prefab_name": "StructureWallFlatCornerTriangle", - "prefab_hash": 2097419366, - "desc": "", - "name": "Wall (Flat Corner Triangle)" - }, - "structure": { - "small_grid": true - } - }, - "StructureWallFlatCornerTriangleFlat": { - "prefab": { - "prefab_name": "StructureWallFlatCornerTriangleFlat", - "prefab_hash": -1161662836, - "desc": "", - "name": "Wall (Flat Corner Triangle Flat)" - }, - "structure": { - "small_grid": true - } - }, - "StructureWallGeometryCorner": { - "prefab": { - "prefab_name": "StructureWallGeometryCorner", - "prefab_hash": 1979212240, - "desc": "", - "name": "Wall (Geometry Corner)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallGeometryStreight": { - "prefab": { - "prefab_name": "StructureWallGeometryStreight", - "prefab_hash": 1049735537, - "desc": "", - "name": "Wall (Geometry Straight)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallGeometryT": { - "prefab": { - "prefab_name": "StructureWallGeometryT", - "prefab_hash": 1602758612, - "desc": "", - "name": "Wall (Geometry T)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallGeometryTMirrored": { - "prefab": { - "prefab_name": "StructureWallGeometryTMirrored", - "prefab_hash": -1427845483, - "desc": "", - "name": "Wall (Geometry T Mirrored)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallHeater": { - "prefab": { - "prefab_name": "StructureWallHeater", - "prefab_hash": 24258244, - "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.", - "name": "Wall Heater" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "", - "typ": "DataDisk" - } - ], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureWallIron": { - "prefab": { - "prefab_name": "StructureWallIron", - "prefab_hash": 1287324802, - "desc": "", - "name": "Iron Wall (Type 1)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallIron02": { - "prefab": { - "prefab_name": "StructureWallIron02", - "prefab_hash": 1485834215, - "desc": "", - "name": "Iron Wall (Type 2)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallIron03": { - "prefab": { - "prefab_name": "StructureWallIron03", - "prefab_hash": 798439281, - "desc": "", - "name": "Iron Wall (Type 3)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallIron04": { - "prefab": { - "prefab_name": "StructureWallIron04", - "prefab_hash": -1309433134, - "desc": "", - "name": "Iron Wall (Type 4)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallLargePanel": { - "prefab": { - "prefab_name": "StructureWallLargePanel", - "prefab_hash": 1492930217, - "desc": "", - "name": "Wall (Large Panel)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallLargePanelArrow": { - "prefab": { - "prefab_name": "StructureWallLargePanelArrow", - "prefab_hash": -776581573, - "desc": "", - "name": "Wall (Large Panel Arrow)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallLight": { - "prefab": { - "prefab_name": "StructureWallLight", - "prefab_hash": -1860064656, - "desc": "", - "name": "Wall Light" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureWallLightBattery": { - "prefab": { - "prefab_name": "StructureWallLightBattery", - "prefab_hash": -1306415132, - "desc": "", - "name": "Wall Light (Battery)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "device": { - "connection_list": [ - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureWallPaddedArch": { - "prefab": { - "prefab_name": "StructureWallPaddedArch", - "prefab_hash": 1590330637, - "desc": "", - "name": "Wall (Padded Arch)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallPaddedArchCorner": { - "prefab": { - "prefab_name": "StructureWallPaddedArchCorner", - "prefab_hash": -1126688298, - "desc": "", - "name": "Wall (Padded Arch Corner)" - }, - "structure": { - "small_grid": true - } - }, - "StructureWallPaddedArchLightFittingTop": { - "prefab": { - "prefab_name": "StructureWallPaddedArchLightFittingTop", - "prefab_hash": 1171987947, - "desc": "", - "name": "Wall (Padded Arch Light Fitting Top)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallPaddedArchLightsFittings": { - "prefab": { - "prefab_name": "StructureWallPaddedArchLightsFittings", - "prefab_hash": -1546743960, - "desc": "", - "name": "Wall (Padded Arch Lights Fittings)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallPaddedCorner": { - "prefab": { - "prefab_name": "StructureWallPaddedCorner", - "prefab_hash": -155945899, - "desc": "", - "name": "Wall (Padded Corner)" - }, - "structure": { - "small_grid": true - } - }, - "StructureWallPaddedCornerThin": { - "prefab": { - "prefab_name": "StructureWallPaddedCornerThin", - "prefab_hash": 1183203913, - "desc": "", - "name": "Wall (Padded Corner Thin)" - }, - "structure": { - "small_grid": true - } - }, - "StructureWallPaddedNoBorder": { - "prefab": { - "prefab_name": "StructureWallPaddedNoBorder", - "prefab_hash": 8846501, - "desc": "", - "name": "Wall (Padded No Border)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallPaddedNoBorderCorner": { - "prefab": { - "prefab_name": "StructureWallPaddedNoBorderCorner", - "prefab_hash": 179694804, - "desc": "", - "name": "Wall (Padded No Border Corner)" - }, - "structure": { - "small_grid": true - } - }, - "StructureWallPaddedThinNoBorder": { - "prefab": { - "prefab_name": "StructureWallPaddedThinNoBorder", - "prefab_hash": -1611559100, - "desc": "", - "name": "Wall (Padded Thin No Border)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallPaddedThinNoBorderCorner": { - "prefab": { - "prefab_name": "StructureWallPaddedThinNoBorderCorner", - "prefab_hash": 1769527556, - "desc": "", - "name": "Wall (Padded Thin No Border Corner)" - }, - "structure": { - "small_grid": true - } - }, - "StructureWallPaddedWindow": { - "prefab": { - "prefab_name": "StructureWallPaddedWindow", - "prefab_hash": 2087628940, - "desc": "", - "name": "Wall (Padded Window)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallPaddedWindowThin": { - "prefab": { - "prefab_name": "StructureWallPaddedWindowThin", - "prefab_hash": -37302931, - "desc": "", - "name": "Wall (Padded Window Thin)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallPadding": { - "prefab": { - "prefab_name": "StructureWallPadding", - "prefab_hash": 635995024, - "desc": "", - "name": "Wall (Padding)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallPaddingArchVent": { - "prefab": { - "prefab_name": "StructureWallPaddingArchVent", - "prefab_hash": -1243329828, - "desc": "", - "name": "Wall (Padding Arch Vent)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallPaddingLightFitting": { - "prefab": { - "prefab_name": "StructureWallPaddingLightFitting", - "prefab_hash": 2024882687, - "desc": "", - "name": "Wall (Padding Light Fitting)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallPaddingThin": { - "prefab": { - "prefab_name": "StructureWallPaddingThin", - "prefab_hash": -1102403554, - "desc": "", - "name": "Wall (Padding Thin)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallPlating": { - "prefab": { - "prefab_name": "StructureWallPlating", - "prefab_hash": 26167457, - "desc": "", - "name": "Wall (Plating)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallSmallPanelsAndHatch": { - "prefab": { - "prefab_name": "StructureWallSmallPanelsAndHatch", - "prefab_hash": 619828719, - "desc": "", - "name": "Wall (Small Panels And Hatch)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallSmallPanelsArrow": { - "prefab": { - "prefab_name": "StructureWallSmallPanelsArrow", - "prefab_hash": -639306697, - "desc": "", - "name": "Wall (Small Panels Arrow)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallSmallPanelsMonoChrome": { - "prefab": { - "prefab_name": "StructureWallSmallPanelsMonoChrome", - "prefab_hash": 386820253, - "desc": "", - "name": "Wall (Small Panels Mono Chrome)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallSmallPanelsOpen": { - "prefab": { - "prefab_name": "StructureWallSmallPanelsOpen", - "prefab_hash": -1407480603, - "desc": "", - "name": "Wall (Small Panels Open)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallSmallPanelsTwoTone": { - "prefab": { - "prefab_name": "StructureWallSmallPanelsTwoTone", - "prefab_hash": 1709994581, - "desc": "", - "name": "Wall (Small Panels Two Tone)" - }, - "structure": { - "small_grid": false - } - }, - "StructureWallVent": { - "prefab": { - "prefab_name": "StructureWallVent", - "prefab_hash": -1177469307, - "desc": "Used to mix atmospheres passively between two walls.", - "name": "Wall Vent" - }, - "structure": { - "small_grid": true - } - }, - "StructureWaterBottleFiller": { - "prefab": { - "prefab_name": "StructureWaterBottleFiller", - "prefab_hash": -1178961954, - "desc": "", - "name": "Water Bottle Filler" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Error": "Read", - "Activate": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Bottle Slot", - "typ": "LiquidBottle" - }, - { - "name": "Bottle Slot", - "typ": "LiquidBottle" - } - ], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - } - ], - "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 - } - }, - "StructureWaterBottleFillerBottom": { - "prefab": { - "prefab_name": "StructureWaterBottleFillerBottom", - "prefab_hash": 1433754995, - "desc": "", - "name": "Water Bottle Filler Bottom" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Error": "Read", - "Activate": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Bottle Slot", - "typ": "LiquidBottle" - }, - { - "name": "Bottle Slot", - "typ": "LiquidBottle" - } - ], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - } - ], - "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 - } - }, - "StructureWaterBottleFillerPowered": { - "prefab": { - "prefab_name": "StructureWaterBottleFillerPowered", - "prefab_hash": -756587791, - "desc": "", - "name": "Waterbottle Filler" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Bottle Slot", - "typ": "LiquidBottle" - }, - { - "name": "Bottle Slot", - "typ": "LiquidBottle" - } - ], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureWaterBottleFillerPoweredBottom": { - "prefab": { - "prefab_name": "StructureWaterBottleFillerPoweredBottom", - "prefab_hash": 1986658780, - "desc": "", - "name": "Waterbottle Filler" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "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" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Bottle Slot", - "typ": "LiquidBottle" - }, - { - "name": "Bottle Slot", - "typ": "LiquidBottle" - } - ], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "None" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureWaterDigitalValve": { - "prefab": { - "prefab_name": "StructureWaterDigitalValve", - "prefab_hash": -517628750, - "desc": "", - "name": "Liquid Digital Valve" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Output" - }, - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureWaterPipeMeter": { - "prefab": { - "prefab_name": "StructureWaterPipeMeter", - "prefab_hash": 433184168, - "desc": "", - "name": "Liquid Pipe Meter" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [], - "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 - } - }, - "StructureWaterPurifier": { - "prefab": { - "prefab_name": "StructureWaterPurifier", - "prefab_hash": 887383294, - "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.", - "name": "Water Purifier" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": {} - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Import", - "typ": "Ore" - } - ], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Output" - }, - { - "typ": "Power", - "role": "None" - }, - { - "typ": "Chute", - "role": "Input" - } - ], - "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 - } - }, - "StructureWaterWallCooler": { - "prefab": { - "prefab_name": "StructureWaterWallCooler", - "prefab_hash": -1369060582, - "desc": "", - "name": "Liquid Wall Cooler" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "", - "typ": "DataDisk" - } - ], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "None" - }, - { - "typ": "PowerAndData", - "role": "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 - } - }, - "StructureWeatherStation": { - "prefab": { - "prefab_name": "StructureWeatherStation", - "prefab_hash": 1997212478, - "desc": "0.NoStorm\n1.StormIncoming\n2.InStorm", - "name": "Weather Station" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Mode": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "NextWeatherEventTime": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "NoStorm", - "1": "StormIncoming", - "2": "InStorm" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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 - } - }, - "StructureWindTurbine": { - "prefab": { - "prefab_name": "StructureWindTurbine", - "prefab_hash": -2082355173, - "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.", - "name": "Wind Turbine" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "PowerGeneration": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Power", - "role": "None" - }, - { - "typ": "Data", - "role": "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 - } - }, - "StructureWindowShutter": { - "prefab": { - "prefab_name": "StructureWindowShutter", - "prefab_hash": 2056377335, - "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.", - "name": "Window Shutter" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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": true, - "has_reagents": false - } - }, - "ToolPrinterMod": { - "prefab": { - "prefab_name": "ToolPrinterMod", - "prefab_hash": 1700018136, - "desc": "Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", - "name": "Tool Printer Mod" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "ToyLuna": { - "prefab": { - "prefab_name": "ToyLuna", - "prefab_hash": 94730034, - "desc": "", - "name": "Toy Luna" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" - } - }, - "UniformCommander": { - "prefab": { - "prefab_name": "UniformCommander", - "prefab_hash": -2083426457, - "desc": "", - "name": "Uniform Commander" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Uniform", - "sorting_class": "Clothing" - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "Access Card", - "typ": "AccessCard" - }, - { - "name": "Access Card", - "typ": "AccessCard" - }, - { - "name": "Credit Card", - "typ": "CreditCard" - } - ] - }, - "UniformMarine": { - "prefab": { - "prefab_name": "UniformMarine", - "prefab_hash": -48342840, - "desc": "", - "name": "Marine Uniform" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Uniform", - "sorting_class": "Clothing" - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "Access Card", - "typ": "AccessCard" - }, - { - "name": "Credit Card", - "typ": "CreditCard" - } - ] - }, - "UniformOrangeJumpSuit": { - "prefab": { - "prefab_name": "UniformOrangeJumpSuit", - "prefab_hash": 810053150, - "desc": "", - "name": "Jump Suit (Orange)" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Uniform", - "sorting_class": "Clothing" - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "Access Card", - "typ": "AccessCard" - }, - { - "name": "Credit Card", - "typ": "CreditCard" - } - ] - }, - "WeaponEnergy": { - "prefab": { - "prefab_name": "WeaponEnergy", - "prefab_hash": 789494694, - "desc": "", - "name": "Weapon Energy" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "WeaponPistolEnergy": { - "prefab": { - "prefab_name": "WeaponPistolEnergy", - "prefab_hash": -385323479, - "desc": "0.Stun\n1.Kill", - "name": "Energy Pistol" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Stun", - "1": "Kill" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "WeaponRifleEnergy": { - "prefab": { - "prefab_name": "WeaponRifleEnergy", - "prefab_hash": 1154745374, - "desc": "0.Stun\n1.Kill", - "name": "Energy Rifle" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Tools" - }, - "logic": { - "logic_slot_types": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Stun", - "1": "Kill" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ] - }, - "WeaponTorpedo": { - "prefab": { - "prefab_name": "WeaponTorpedo", - "prefab_hash": -1102977898, - "desc": "", - "name": "Torpedo" - }, - "item": { - "consumable": false, - "ingredient": false, - "max_quantity": 1, - "slot_class": "Torpedo", - "sorting_class": "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 - } - }, - "Cocoa": { - "Hash": 678781198, - "Unit": "g", - "Sources": { - "ItemCocoaPowder": 1.0, - "ItemCocoaTree": 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 - } - }, - "Sugar": { - "Hash": 1778746875, - "Unit": "g", - "Sources": { - "ItemSugar": 10.0, - "ItemSugarCane": 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 - } - } - }, - "enums": { - "scriptEnums": { - "LogicBatchMethod": { - "enumName": "LogicBatchMethod", - "values": { - "Average": { - "value": 0, - "deprecated": false, - "description": "" - }, - "Maximum": { - "value": 3, - "deprecated": false, - "description": "" - }, - "Minimum": { - "value": 2, - "deprecated": false, - "description": "" - }, - "Sum": { - "value": 1, - "deprecated": false, - "description": "" - } - } - }, - "LogicReagentMode": { - "enumName": "LogicReagentMode", - "values": { - "Contents": { - "value": 0, - "deprecated": false, - "description": "" - }, - "Recipe": { - "value": 2, - "deprecated": false, - "description": "" - }, - "Required": { - "value": 1, - "deprecated": false, - "description": "" - }, - "TotalContents": { - "value": 3, - "deprecated": false, - "description": "" - } - } - }, - "LogicSlotType": { - "enumName": "LogicSlotType", - "values": { - "Charge": { - "value": 10, - "deprecated": false, - "description": "returns current energy charge the slot occupant is holding" - }, - "ChargeRatio": { - "value": 11, - "deprecated": false, - "description": "returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum" - }, - "Class": { - "value": 12, - "deprecated": false, - "description": "returns integer representing the class of object" - }, - "Damage": { - "value": 4, - "deprecated": false, - "description": "returns the damage state of the item in the slot" - }, - "Efficiency": { - "value": 5, - "deprecated": false, - "description": "returns the growth efficiency of the plant in the slot" - }, - "FilterType": { - "value": 25, - "deprecated": false, - "description": "No description available" - }, - "Growth": { - "value": 7, - "deprecated": false, - "description": "returns the current growth state of the plant in the slot" - }, - "Health": { - "value": 6, - "deprecated": false, - "description": "returns the health of the plant in the slot" - }, - "LineNumber": { - "value": 19, - "deprecated": false, - "description": "The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution" - }, - "Lock": { - "value": 23, - "deprecated": false, - "description": "No description available" - }, - "Mature": { - "value": 16, - "deprecated": false, - "description": "returns 1 if the plant in this slot is mature, 0 when it isn't" - }, - "MaxQuantity": { - "value": 15, - "deprecated": false, - "description": "returns the max stack size of the item in the slot" - }, - "None": { - "value": 0, - "deprecated": false, - "description": "No description" - }, - "OccupantHash": { - "value": 2, - "deprecated": false, - "description": "returns the has of the current occupant, the unique identifier of the thing" - }, - "Occupied": { - "value": 1, - "deprecated": false, - "description": "returns 0 when slot is not occupied, 1 when it is" - }, - "On": { - "value": 22, - "deprecated": false, - "description": "No description available" - }, - "Open": { - "value": 21, - "deprecated": false, - "description": "No description available" - }, - "PrefabHash": { - "value": 17, - "deprecated": false, - "description": "returns the hash of the structure in the slot" - }, - "Pressure": { - "value": 8, - "deprecated": false, - "description": "returns pressure of the slot occupants internal atmosphere" - }, - "PressureAir": { - "value": 14, - "deprecated": false, - "description": "returns pressure in the air tank of the jetpack in this slot" - }, - "PressureWaste": { - "value": 13, - "deprecated": false, - "description": "returns pressure in the waste tank of the jetpack in this slot" - }, - "Quantity": { - "value": 3, - "deprecated": false, - "description": "returns the current quantity, such as stack size, of the item in the slot" - }, - "ReferenceId": { - "value": 26, - "deprecated": false, - "description": "Unique Reference Identifier for this object" - }, - "Seeding": { - "value": 18, - "deprecated": false, - "description": "Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not." - }, - "SortingClass": { - "value": 24, - "deprecated": false, - "description": "No description available" - }, - "Temperature": { - "value": 9, - "deprecated": false, - "description": "returns temperature of the slot occupants internal atmosphere" - }, - "Volume": { - "value": 20, - "deprecated": false, - "description": "No description available" - } - } - }, - "LogicType": { - "enumName": "LogicType", - "values": { - "Acceleration": { - "value": 216, - "deprecated": false, - "description": "Change in velocity. Rockets that are deccelerating when landing will show this as negative value." - }, - "Activate": { - "value": 9, - "deprecated": false, - "description": "1 if device is activated (usually means running), otherwise 0" - }, - "AirRelease": { - "value": 75, - "deprecated": false, - "description": "The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On" - }, - "AlignmentError": { - "value": 243, - "deprecated": false, - "description": "The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target." - }, - "Apex": { - "value": 238, - "deprecated": false, - "description": "The lowest altitude that the rocket will reach before it starts travelling upwards again." - }, - "AutoLand": { - "value": 226, - "deprecated": false, - "description": "Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing." - }, - "AutoShutOff": { - "value": 218, - "deprecated": false, - "description": "Turns off all devices in the rocket upon reaching destination" - }, - "BestContactFilter": { - "value": 267, - "deprecated": false, - "description": "Filters the satellite's auto selection of targets to a single reference ID." - }, - "Bpm": { - "value": 103, - "deprecated": false, - "description": "Bpm" - }, - "BurnTimeRemaining": { - "value": 225, - "deprecated": false, - "description": "Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage." - }, - "CelestialHash": { - "value": 242, - "deprecated": false, - "description": "The current hash of the targeted celestial object." - }, - "CelestialParentHash": { - "value": 250, - "deprecated": false, - "description": "The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial." - }, - "Channel0": { - "value": 165, - "deprecated": false, - "description": "Channel on a cable network which should be considered volatile" - }, - "Channel1": { - "value": 166, - "deprecated": false, - "description": "Channel on a cable network which should be considered volatile" - }, - "Channel2": { - "value": 167, - "deprecated": false, - "description": "Channel on a cable network which should be considered volatile" - }, - "Channel3": { - "value": 168, - "deprecated": false, - "description": "Channel on a cable network which should be considered volatile" - }, - "Channel4": { - "value": 169, - "deprecated": false, - "description": "Channel on a cable network which should be considered volatile" - }, - "Channel5": { - "value": 170, - "deprecated": false, - "description": "Channel on a cable network which should be considered volatile" - }, - "Channel6": { - "value": 171, - "deprecated": false, - "description": "Channel on a cable network which should be considered volatile" - }, - "Channel7": { - "value": 172, - "deprecated": false, - "description": "Channel on a cable network which should be considered volatile" - }, - "Charge": { - "value": 11, - "deprecated": false, - "description": "The current charge the device has" - }, - "Chart": { - "value": 256, - "deprecated": false, - "description": "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." - }, - "ChartedNavPoints": { - "value": 259, - "deprecated": false, - "description": "The number of charted NavPoints at the rocket's target Space Map Location." - }, - "ClearMemory": { - "value": 62, - "deprecated": false, - "description": "When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned" - }, - "CollectableGoods": { - "value": 101, - "deprecated": false, - "description": "Gets the cost of fuel to return the rocket to your current world." - }, - "Color": { - "value": 38, - "deprecated": false, - "description": "\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 " - }, - "Combustion": { - "value": 98, - "deprecated": false, - "description": "The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not." - }, - "CombustionInput": { - "value": 146, - "deprecated": false, - "description": "The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not." - }, - "CombustionInput2": { - "value": 147, - "deprecated": false, - "description": "The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not." - }, - "CombustionLimiter": { - "value": 153, - "deprecated": false, - "description": "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": { - "value": 148, - "deprecated": false, - "description": "The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not." - }, - "CombustionOutput2": { - "value": 149, - "deprecated": false, - "description": "The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not." - }, - "CompletionRatio": { - "value": 61, - "deprecated": false, - "description": "How complete the current production is for this device, between 0 and 1" - }, - "ContactTypeId": { - "value": 198, - "deprecated": false, - "description": "The type id of the contact." - }, - "CurrentCode": { - "value": 261, - "deprecated": false, - "description": "The Space Map Address of the rockets current Space Map Location" - }, - "CurrentResearchPodType": { - "value": 93, - "deprecated": false, - "description": "" - }, - "Density": { - "value": 262, - "deprecated": false, - "description": "The density of the rocket's target site's mine-able deposit." - }, - "DestinationCode": { - "value": 215, - "deprecated": false, - "description": "The Space Map Address of the rockets target Space Map Location" - }, - "Discover": { - "value": 255, - "deprecated": false, - "description": "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." - }, - "DistanceAu": { - "value": 244, - "deprecated": false, - "description": "The current distance to the celestial object, measured in astronomical units." - }, - "DistanceKm": { - "value": 249, - "deprecated": false, - "description": "The current distance to the celestial object, measured in kilometers." - }, - "DrillCondition": { - "value": 240, - "deprecated": false, - "description": "The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1." - }, - "DryMass": { - "value": 220, - "deprecated": false, - "description": "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": { - "value": 247, - "deprecated": false, - "description": "A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)." - }, - "ElevatorLevel": { - "value": 40, - "deprecated": false, - "description": "Level the elevator is currently at" - }, - "ElevatorSpeed": { - "value": 39, - "deprecated": false, - "description": "Current speed of the elevator" - }, - "EntityState": { - "value": 239, - "deprecated": false, - "description": "The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer." - }, - "EnvironmentEfficiency": { - "value": 104, - "deprecated": false, - "description": "The Environment Efficiency reported by the machine, as a float between 0 and 1" - }, - "Error": { - "value": 4, - "deprecated": false, - "description": "1 if device is in error state, otherwise 0" - }, - "ExhaustVelocity": { - "value": 235, - "deprecated": false, - "description": "The velocity of the exhaust gas in m/s" - }, - "ExportCount": { - "value": 63, - "deprecated": false, - "description": "How many items exported since last ClearMemory" - }, - "ExportQuantity": { - "value": 31, - "deprecated": true, - "description": "Total quantity of items exported by the device" - }, - "ExportSlotHash": { - "value": 42, - "deprecated": true, - "description": "DEPRECATED" - }, - "ExportSlotOccupant": { - "value": 32, - "deprecated": true, - "description": "DEPRECATED" - }, - "Filtration": { - "value": 74, - "deprecated": false, - "description": "The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On" - }, - "FlightControlRule": { - "value": 236, - "deprecated": false, - "description": "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." - }, - "Flush": { - "value": 174, - "deprecated": false, - "description": "Set to 1 to activate the flush function on the device" - }, - "ForceWrite": { - "value": 85, - "deprecated": false, - "description": "Forces Logic Writer devices to rewrite value" - }, - "ForwardX": { - "value": 227, - "deprecated": false, - "description": "The direction the entity is facing expressed as a normalized vector" - }, - "ForwardY": { - "value": 228, - "deprecated": false, - "description": "The direction the entity is facing expressed as a normalized vector" - }, - "ForwardZ": { - "value": 229, - "deprecated": false, - "description": "The direction the entity is facing expressed as a normalized vector" - }, - "Fuel": { - "value": 99, - "deprecated": false, - "description": "Gets the cost of fuel to return the rocket to your current world." - }, - "Harvest": { - "value": 69, - "deprecated": false, - "description": "Performs the harvesting action for any plant based machinery" - }, - "Horizontal": { - "value": 20, - "deprecated": false, - "description": "Horizontal setting of the device" - }, - "HorizontalRatio": { - "value": 34, - "deprecated": false, - "description": "Radio of horizontal setting for device" - }, - "Idle": { - "value": 37, - "deprecated": false, - "description": "Returns 1 if the device is currently idle, otherwise 0" - }, - "ImportCount": { - "value": 64, - "deprecated": false, - "description": "How many items imported since last ClearMemory" - }, - "ImportQuantity": { - "value": 29, - "deprecated": true, - "description": "Total quantity of items imported by the device" - }, - "ImportSlotHash": { - "value": 43, - "deprecated": true, - "description": "DEPRECATED" - }, - "ImportSlotOccupant": { - "value": 30, - "deprecated": true, - "description": "DEPRECATED" - }, - "Inclination": { - "value": 246, - "deprecated": false, - "description": "The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle." - }, - "Index": { - "value": 241, - "deprecated": false, - "description": "The current index for the device." - }, - "InterrogationProgress": { - "value": 157, - "deprecated": false, - "description": "Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1" - }, - "LineNumber": { - "value": 173, - "deprecated": false, - "description": "The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution" - }, - "Lock": { - "value": 10, - "deprecated": false, - "description": "1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values" - }, - "ManualResearchRequiredPod": { - "value": 94, - "deprecated": false, - "description": "Sets the pod type to search for a certain pod when breaking down a pods." - }, - "Mass": { - "value": 219, - "deprecated": false, - "description": "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": { - "value": 23, - "deprecated": false, - "description": "Maximum setting of the device" - }, - "MineablesInQueue": { - "value": 96, - "deprecated": false, - "description": "Returns the amount of mineables AIMEe has queued up to mine." - }, - "MineablesInVicinity": { - "value": 95, - "deprecated": false, - "description": "Returns the amount of potential mineables within an extended area around AIMEe." - }, - "MinedQuantity": { - "value": 266, - "deprecated": false, - "description": "The total number of resources that have been mined at the rocket's target Space Map Site." - }, - "MinimumWattsToContact": { - "value": 163, - "deprecated": false, - "description": "Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact" - }, - "Mode": { - "value": 3, - "deprecated": false, - "description": "Integer for mode state, different devices will have different mode states available to them" - }, - "NameHash": { - "value": 268, - "deprecated": false, - "description": "Provides the hash value for the name of the object as a 32 bit integer." - }, - "NavPoints": { - "value": 258, - "deprecated": false, - "description": "The number of NavPoints at the rocket's target Space Map Location." - }, - "NextWeatherEventTime": { - "value": 97, - "deprecated": false, - "description": "Returns in seconds when the next weather event is inbound." - }, - "None": { - "value": 0, - "deprecated": true, - "description": "No description" - }, - "On": { - "value": 28, - "deprecated": false, - "description": "The current state of the device, 0 for off, 1 for on" - }, - "Open": { - "value": 2, - "deprecated": false, - "description": "1 if device is open, otherwise 0" - }, - "OperationalTemperatureEfficiency": { - "value": 150, - "deprecated": false, - "description": "How the input pipe's temperature effects the machines efficiency" - }, - "OrbitPeriod": { - "value": 245, - "deprecated": false, - "description": "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." - }, - "Orientation": { - "value": 230, - "deprecated": false, - "description": "The orientation of the entity in degrees in a plane relative towards the north origin" - }, - "Output": { - "value": 70, - "deprecated": false, - "description": "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": { - "value": 234, - "deprecated": false, - "description": "The number of moles that passed through this device on the previous simulation tick" - }, - "Plant": { - "value": 68, - "deprecated": false, - "description": "Performs the planting action for any plant based machinery" - }, - "PlantEfficiency1": { - "value": 52, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantEfficiency2": { - "value": 53, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantEfficiency3": { - "value": 54, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantEfficiency4": { - "value": 55, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantGrowth1": { - "value": 48, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantGrowth2": { - "value": 49, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantGrowth3": { - "value": 50, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantGrowth4": { - "value": 51, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantHash1": { - "value": 56, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantHash2": { - "value": 57, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantHash3": { - "value": 58, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantHash4": { - "value": 59, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantHealth1": { - "value": 44, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantHealth2": { - "value": 45, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantHealth3": { - "value": 46, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantHealth4": { - "value": 47, - "deprecated": true, - "description": "DEPRECATED" - }, - "PositionX": { - "value": 76, - "deprecated": false, - "description": "The current position in X dimension in world coordinates" - }, - "PositionY": { - "value": 77, - "deprecated": false, - "description": "The current position in Y dimension in world coordinates" - }, - "PositionZ": { - "value": 78, - "deprecated": false, - "description": "The current position in Z dimension in world coordinates" - }, - "Power": { - "value": 1, - "deprecated": false, - "description": "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": { - "value": 26, - "deprecated": false, - "description": "How much energy the device or network is actually using" - }, - "PowerGeneration": { - "value": 65, - "deprecated": false, - "description": "Returns how much power is being generated" - }, - "PowerPotential": { - "value": 25, - "deprecated": false, - "description": "How much energy the device or network potentially provides" - }, - "PowerRequired": { - "value": 36, - "deprecated": false, - "description": "Power requested from the device and/or network" - }, - "PrefabHash": { - "value": 84, - "deprecated": false, - "description": "The hash of the structure" - }, - "Pressure": { - "value": 5, - "deprecated": false, - "description": "The current pressure reading of the device" - }, - "PressureEfficiency": { - "value": 152, - "deprecated": false, - "description": "How the pressure of the input pipe and waste pipe effect the machines efficiency" - }, - "PressureExternal": { - "value": 7, - "deprecated": false, - "description": "Setting for external pressure safety, in KPa" - }, - "PressureInput": { - "value": 106, - "deprecated": false, - "description": "The current pressure reading of the device's Input Network" - }, - "PressureInput2": { - "value": 116, - "deprecated": false, - "description": "The current pressure reading of the device's Input2 Network" - }, - "PressureInternal": { - "value": 8, - "deprecated": false, - "description": "Setting for internal pressure safety, in KPa" - }, - "PressureOutput": { - "value": 126, - "deprecated": false, - "description": "The current pressure reading of the device's Output Network" - }, - "PressureOutput2": { - "value": 136, - "deprecated": false, - "description": "The current pressure reading of the device's Output2 Network" - }, - "PressureSetting": { - "value": 71, - "deprecated": false, - "description": "The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa" - }, - "Progress": { - "value": 214, - "deprecated": false, - "description": "Progress of the rocket to the next node on the map expressed as a value between 0-1." - }, - "Quantity": { - "value": 27, - "deprecated": false, - "description": "Total quantity on the device" - }, - "Ratio": { - "value": 24, - "deprecated": false, - "description": "Context specific value depending on device, 0 to 1 based ratio" - }, - "RatioCarbonDioxide": { - "value": 15, - "deprecated": false, - "description": "The ratio of Carbon Dioxide in device atmosphere" - }, - "RatioCarbonDioxideInput": { - "value": 109, - "deprecated": false, - "description": "The ratio of Carbon Dioxide in device's input network" - }, - "RatioCarbonDioxideInput2": { - "value": 119, - "deprecated": false, - "description": "The ratio of Carbon Dioxide in device's Input2 network" - }, - "RatioCarbonDioxideOutput": { - "value": 129, - "deprecated": false, - "description": "The ratio of Carbon Dioxide in device's Output network" - }, - "RatioCarbonDioxideOutput2": { - "value": 139, - "deprecated": false, - "description": "The ratio of Carbon Dioxide in device's Output2 network" - }, - "RatioHydrogen": { - "value": 252, - "deprecated": false, - "description": "The ratio of Hydrogen in device's Atmopshere" - }, - "RatioLiquidCarbonDioxide": { - "value": 199, - "deprecated": false, - "description": "The ratio of Liquid Carbon Dioxide in device's Atmosphere" - }, - "RatioLiquidCarbonDioxideInput": { - "value": 200, - "deprecated": false, - "description": "The ratio of Liquid Carbon Dioxide in device's Input Atmosphere" - }, - "RatioLiquidCarbonDioxideInput2": { - "value": 201, - "deprecated": false, - "description": "The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere" - }, - "RatioLiquidCarbonDioxideOutput": { - "value": 202, - "deprecated": false, - "description": "The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere" - }, - "RatioLiquidCarbonDioxideOutput2": { - "value": 203, - "deprecated": false, - "description": "The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere" - }, - "RatioLiquidHydrogen": { - "value": 253, - "deprecated": false, - "description": "The ratio of Liquid Hydrogen in device's Atmopshere" - }, - "RatioLiquidNitrogen": { - "value": 177, - "deprecated": false, - "description": "The ratio of Liquid Nitrogen in device atmosphere" - }, - "RatioLiquidNitrogenInput": { - "value": 178, - "deprecated": false, - "description": "The ratio of Liquid Nitrogen in device's input network" - }, - "RatioLiquidNitrogenInput2": { - "value": 179, - "deprecated": false, - "description": "The ratio of Liquid Nitrogen in device's Input2 network" - }, - "RatioLiquidNitrogenOutput": { - "value": 180, - "deprecated": false, - "description": "The ratio of Liquid Nitrogen in device's Output network" - }, - "RatioLiquidNitrogenOutput2": { - "value": 181, - "deprecated": false, - "description": "The ratio of Liquid Nitrogen in device's Output2 network" - }, - "RatioLiquidNitrousOxide": { - "value": 209, - "deprecated": false, - "description": "The ratio of Liquid Nitrous Oxide in device's Atmosphere" - }, - "RatioLiquidNitrousOxideInput": { - "value": 210, - "deprecated": false, - "description": "The ratio of Liquid Nitrous Oxide in device's Input Atmosphere" - }, - "RatioLiquidNitrousOxideInput2": { - "value": 211, - "deprecated": false, - "description": "The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere" - }, - "RatioLiquidNitrousOxideOutput": { - "value": 212, - "deprecated": false, - "description": "The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere" - }, - "RatioLiquidNitrousOxideOutput2": { - "value": 213, - "deprecated": false, - "description": "The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere" - }, - "RatioLiquidOxygen": { - "value": 183, - "deprecated": false, - "description": "The ratio of Liquid Oxygen in device's Atmosphere" - }, - "RatioLiquidOxygenInput": { - "value": 184, - "deprecated": false, - "description": "The ratio of Liquid Oxygen in device's Input Atmosphere" - }, - "RatioLiquidOxygenInput2": { - "value": 185, - "deprecated": false, - "description": "The ratio of Liquid Oxygen in device's Input2 Atmosphere" - }, - "RatioLiquidOxygenOutput": { - "value": 186, - "deprecated": false, - "description": "The ratio of Liquid Oxygen in device's device's Output Atmosphere" - }, - "RatioLiquidOxygenOutput2": { - "value": 187, - "deprecated": false, - "description": "The ratio of Liquid Oxygen in device's Output2 Atmopshere" - }, - "RatioLiquidPollutant": { - "value": 204, - "deprecated": false, - "description": "The ratio of Liquid Pollutant in device's Atmosphere" - }, - "RatioLiquidPollutantInput": { - "value": 205, - "deprecated": false, - "description": "The ratio of Liquid Pollutant in device's Input Atmosphere" - }, - "RatioLiquidPollutantInput2": { - "value": 206, - "deprecated": false, - "description": "The ratio of Liquid Pollutant in device's Input2 Atmosphere" - }, - "RatioLiquidPollutantOutput": { - "value": 207, - "deprecated": false, - "description": "The ratio of Liquid Pollutant in device's device's Output Atmosphere" - }, - "RatioLiquidPollutantOutput2": { - "value": 208, - "deprecated": false, - "description": "The ratio of Liquid Pollutant in device's Output2 Atmopshere" - }, - "RatioLiquidVolatiles": { - "value": 188, - "deprecated": false, - "description": "The ratio of Liquid Volatiles in device's Atmosphere" - }, - "RatioLiquidVolatilesInput": { - "value": 189, - "deprecated": false, - "description": "The ratio of Liquid Volatiles in device's Input Atmosphere" - }, - "RatioLiquidVolatilesInput2": { - "value": 190, - "deprecated": false, - "description": "The ratio of Liquid Volatiles in device's Input2 Atmosphere" - }, - "RatioLiquidVolatilesOutput": { - "value": 191, - "deprecated": false, - "description": "The ratio of Liquid Volatiles in device's device's Output Atmosphere" - }, - "RatioLiquidVolatilesOutput2": { - "value": 192, - "deprecated": false, - "description": "The ratio of Liquid Volatiles in device's Output2 Atmopshere" - }, - "RatioNitrogen": { - "value": 16, - "deprecated": false, - "description": "The ratio of nitrogen in device atmosphere" - }, - "RatioNitrogenInput": { - "value": 110, - "deprecated": false, - "description": "The ratio of nitrogen in device's input network" - }, - "RatioNitrogenInput2": { - "value": 120, - "deprecated": false, - "description": "The ratio of nitrogen in device's Input2 network" - }, - "RatioNitrogenOutput": { - "value": 130, - "deprecated": false, - "description": "The ratio of nitrogen in device's Output network" - }, - "RatioNitrogenOutput2": { - "value": 140, - "deprecated": false, - "description": "The ratio of nitrogen in device's Output2 network" - }, - "RatioNitrousOxide": { - "value": 83, - "deprecated": false, - "description": "The ratio of Nitrous Oxide in device atmosphere" - }, - "RatioNitrousOxideInput": { - "value": 114, - "deprecated": false, - "description": "The ratio of Nitrous Oxide in device's input network" - }, - "RatioNitrousOxideInput2": { - "value": 124, - "deprecated": false, - "description": "The ratio of Nitrous Oxide in device's Input2 network" - }, - "RatioNitrousOxideOutput": { - "value": 134, - "deprecated": false, - "description": "The ratio of Nitrous Oxide in device's Output network" - }, - "RatioNitrousOxideOutput2": { - "value": 144, - "deprecated": false, - "description": "The ratio of Nitrous Oxide in device's Output2 network" - }, - "RatioOxygen": { - "value": 14, - "deprecated": false, - "description": "The ratio of oxygen in device atmosphere" - }, - "RatioOxygenInput": { - "value": 108, - "deprecated": false, - "description": "The ratio of oxygen in device's input network" - }, - "RatioOxygenInput2": { - "value": 118, - "deprecated": false, - "description": "The ratio of oxygen in device's Input2 network" - }, - "RatioOxygenOutput": { - "value": 128, - "deprecated": false, - "description": "The ratio of oxygen in device's Output network" - }, - "RatioOxygenOutput2": { - "value": 138, - "deprecated": false, - "description": "The ratio of oxygen in device's Output2 network" - }, - "RatioPollutant": { - "value": 17, - "deprecated": false, - "description": "The ratio of pollutant in device atmosphere" - }, - "RatioPollutantInput": { - "value": 111, - "deprecated": false, - "description": "The ratio of pollutant in device's input network" - }, - "RatioPollutantInput2": { - "value": 121, - "deprecated": false, - "description": "The ratio of pollutant in device's Input2 network" - }, - "RatioPollutantOutput": { - "value": 131, - "deprecated": false, - "description": "The ratio of pollutant in device's Output network" - }, - "RatioPollutantOutput2": { - "value": 141, - "deprecated": false, - "description": "The ratio of pollutant in device's Output2 network" - }, - "RatioPollutedWater": { - "value": 254, - "deprecated": false, - "description": "The ratio of polluted water in device atmosphere" - }, - "RatioSteam": { - "value": 193, - "deprecated": false, - "description": "The ratio of Steam in device's Atmosphere" - }, - "RatioSteamInput": { - "value": 194, - "deprecated": false, - "description": "The ratio of Steam in device's Input Atmosphere" - }, - "RatioSteamInput2": { - "value": 195, - "deprecated": false, - "description": "The ratio of Steam in device's Input2 Atmosphere" - }, - "RatioSteamOutput": { - "value": 196, - "deprecated": false, - "description": "The ratio of Steam in device's device's Output Atmosphere" - }, - "RatioSteamOutput2": { - "value": 197, - "deprecated": false, - "description": "The ratio of Steam in device's Output2 Atmopshere" - }, - "RatioVolatiles": { - "value": 18, - "deprecated": false, - "description": "The ratio of volatiles in device atmosphere" - }, - "RatioVolatilesInput": { - "value": 112, - "deprecated": false, - "description": "The ratio of volatiles in device's input network" - }, - "RatioVolatilesInput2": { - "value": 122, - "deprecated": false, - "description": "The ratio of volatiles in device's Input2 network" - }, - "RatioVolatilesOutput": { - "value": 132, - "deprecated": false, - "description": "The ratio of volatiles in device's Output network" - }, - "RatioVolatilesOutput2": { - "value": 142, - "deprecated": false, - "description": "The ratio of volatiles in device's Output2 network" - }, - "RatioWater": { - "value": 19, - "deprecated": false, - "description": "The ratio of water in device atmosphere" - }, - "RatioWaterInput": { - "value": 113, - "deprecated": false, - "description": "The ratio of water in device's input network" - }, - "RatioWaterInput2": { - "value": 123, - "deprecated": false, - "description": "The ratio of water in device's Input2 network" - }, - "RatioWaterOutput": { - "value": 133, - "deprecated": false, - "description": "The ratio of water in device's Output network" - }, - "RatioWaterOutput2": { - "value": 143, - "deprecated": false, - "description": "The ratio of water in device's Output2 network" - }, - "ReEntryAltitude": { - "value": 237, - "deprecated": false, - "description": "The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km" - }, - "Reagents": { - "value": 13, - "deprecated": false, - "description": "Total number of reagents recorded by the device" - }, - "RecipeHash": { - "value": 41, - "deprecated": false, - "description": "Current hash of the recipe the device is set to produce" - }, - "ReferenceId": { - "value": 217, - "deprecated": false, - "description": "Unique Reference Identifier for this object" - }, - "RequestHash": { - "value": 60, - "deprecated": false, - "description": "When set to the unique identifier, requests an item of the provided type from the device" - }, - "RequiredPower": { - "value": 33, - "deprecated": false, - "description": "Idle operating power quantity, does not necessarily include extra demand power" - }, - "ReturnFuelCost": { - "value": 100, - "deprecated": false, - "description": "Gets the fuel remaining in your rocket's fuel tank." - }, - "Richness": { - "value": 263, - "deprecated": false, - "description": "The richness of the rocket's target site's mine-able deposit." - }, - "Rpm": { - "value": 155, - "deprecated": false, - "description": "The number of revolutions per minute that the device's spinning mechanism is doing" - }, - "SemiMajorAxis": { - "value": 248, - "deprecated": false, - "description": "The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit." - }, - "Setting": { - "value": 12, - "deprecated": false, - "description": "A variable setting that can be read or written, depending on the device" - }, - "SettingInput": { - "value": 91, - "deprecated": false, - "description": "" - }, - "SettingOutput": { - "value": 92, - "deprecated": false, - "description": "" - }, - "SignalID": { - "value": 87, - "deprecated": false, - "description": "Returns the contact ID of the strongest signal from this Satellite" - }, - "SignalStrength": { - "value": 86, - "deprecated": false, - "description": "Returns the degree offset of the strongest contact" - }, - "Sites": { - "value": 260, - "deprecated": false, - "description": "The number of Sites that have been discovered at the rockets target Space Map location." - }, - "Size": { - "value": 264, - "deprecated": false, - "description": "The size of the rocket's target site's mine-able deposit." - }, - "SizeX": { - "value": 160, - "deprecated": false, - "description": "Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)" - }, - "SizeY": { - "value": 161, - "deprecated": false, - "description": "Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)" - }, - "SizeZ": { - "value": 162, - "deprecated": false, - "description": "Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)" - }, - "SolarAngle": { - "value": 22, - "deprecated": false, - "description": "Solar angle of the device" - }, - "SolarIrradiance": { - "value": 176, - "deprecated": false, - "description": "" - }, - "SoundAlert": { - "value": 175, - "deprecated": false, - "description": "Plays a sound alert on the devices speaker" - }, - "Stress": { - "value": 156, - "deprecated": false, - "description": "Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down" - }, - "Survey": { - "value": 257, - "deprecated": false, - "description": "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." - }, - "TargetPadIndex": { - "value": 158, - "deprecated": false, - "description": "The index of the trader landing pad on this devices data network that it will try to call a trader in to land" - }, - "TargetX": { - "value": 88, - "deprecated": false, - "description": "The target position in X dimension in world coordinates" - }, - "TargetY": { - "value": 89, - "deprecated": false, - "description": "The target position in Y dimension in world coordinates" - }, - "TargetZ": { - "value": 90, - "deprecated": false, - "description": "The target position in Z dimension in world coordinates" - }, - "Temperature": { - "value": 6, - "deprecated": false, - "description": "The current temperature reading of the device" - }, - "TemperatureDifferentialEfficiency": { - "value": 151, - "deprecated": false, - "description": "How the difference between the input pipe and waste pipe temperatures effect the machines efficiency" - }, - "TemperatureExternal": { - "value": 73, - "deprecated": false, - "description": "The temperature of the outside of the device, usually the world atmosphere surrounding it" - }, - "TemperatureInput": { - "value": 107, - "deprecated": false, - "description": "The current temperature reading of the device's Input Network" - }, - "TemperatureInput2": { - "value": 117, - "deprecated": false, - "description": "The current temperature reading of the device's Input2 Network" - }, - "TemperatureOutput": { - "value": 127, - "deprecated": false, - "description": "The current temperature reading of the device's Output Network" - }, - "TemperatureOutput2": { - "value": 137, - "deprecated": false, - "description": "The current temperature reading of the device's Output2 Network" - }, - "TemperatureSetting": { - "value": 72, - "deprecated": false, - "description": "The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)" - }, - "Throttle": { - "value": 154, - "deprecated": false, - "description": "Increases the rate at which the machine works (range: 0-100)" - }, - "Thrust": { - "value": 221, - "deprecated": false, - "description": "Total current thrust of all rocket engines on the rocket in Newtons." - }, - "ThrustToWeight": { - "value": 223, - "deprecated": false, - "description": "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": { - "value": 102, - "deprecated": false, - "description": "Time" - }, - "TimeToDestination": { - "value": 224, - "deprecated": false, - "description": "Estimated time in seconds until rocket arrives at target destination." - }, - "TotalMoles": { - "value": 66, - "deprecated": false, - "description": "Returns the total moles of the device" - }, - "TotalMolesInput": { - "value": 115, - "deprecated": false, - "description": "Returns the total moles of the device's Input Network" - }, - "TotalMolesInput2": { - "value": 125, - "deprecated": false, - "description": "Returns the total moles of the device's Input2 Network" - }, - "TotalMolesOutput": { - "value": 135, - "deprecated": false, - "description": "Returns the total moles of the device's Output Network" - }, - "TotalMolesOutput2": { - "value": 145, - "deprecated": false, - "description": "Returns the total moles of the device's Output2 Network" - }, - "TotalQuantity": { - "value": 265, - "deprecated": false, - "description": "The estimated total quantity of resources available to mine at the rocket's target Space Map Site." - }, - "TrueAnomaly": { - "value": 251, - "deprecated": false, - "description": "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)." - }, - "VelocityMagnitude": { - "value": 79, - "deprecated": false, - "description": "The current magnitude of the velocity vector" - }, - "VelocityRelativeX": { - "value": 80, - "deprecated": false, - "description": "The current velocity X relative to the forward vector of this" - }, - "VelocityRelativeY": { - "value": 81, - "deprecated": false, - "description": "The current velocity Y relative to the forward vector of this" - }, - "VelocityRelativeZ": { - "value": 82, - "deprecated": false, - "description": "The current velocity Z relative to the forward vector of this" - }, - "VelocityX": { - "value": 231, - "deprecated": false, - "description": "The world velocity of the entity in the X axis" - }, - "VelocityY": { - "value": 232, - "deprecated": false, - "description": "The world velocity of the entity in the Y axis" - }, - "VelocityZ": { - "value": 233, - "deprecated": false, - "description": "The world velocity of the entity in the Z axis" - }, - "Vertical": { - "value": 21, - "deprecated": false, - "description": "Vertical setting of the device" - }, - "VerticalRatio": { - "value": 35, - "deprecated": false, - "description": "Radio of vertical setting for device" - }, - "Volume": { - "value": 67, - "deprecated": false, - "description": "Returns the device atmosphere volume" - }, - "VolumeOfLiquid": { - "value": 182, - "deprecated": false, - "description": "The total volume of all liquids in Liters in the atmosphere" - }, - "WattsReachingContact": { - "value": 164, - "deprecated": false, - "description": "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": { - "value": 222, - "deprecated": false, - "description": "Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity." - }, - "WorkingGasEfficiency": { - "value": 105, - "deprecated": false, - "description": "The Working Gas Efficiency reported by the machine, as a float between 0 and 1" - } - } - } - }, - "basicEnums": { - "AirCon": { - "enumName": "AirConditioningMode", - "values": { - "Cold": { - "value": 0, - "deprecated": false, - "description": "" - }, - "Hot": { - "value": 1, - "deprecated": false, - "description": "" - } - } - }, - "AirControl": { - "enumName": "AirControlMode", - "values": { - "Draught": { - "value": 4, - "deprecated": false, - "description": "" - }, - "None": { - "value": 0, - "deprecated": false, - "description": "" - }, - "Offline": { - "value": 1, - "deprecated": false, - "description": "" - }, - "Pressure": { - "value": 2, - "deprecated": false, - "description": "" - } - } - }, - "Color": { - "enumName": "ColorType", - "values": { - "Black": { - "value": 7, - "deprecated": false, - "description": "" - }, - "Blue": { - "value": 0, - "deprecated": false, - "description": "" - }, - "Brown": { - "value": 8, - "deprecated": false, - "description": "" - }, - "Gray": { - "value": 1, - "deprecated": false, - "description": "" - }, - "Green": { - "value": 2, - "deprecated": false, - "description": "" - }, - "Khaki": { - "value": 9, - "deprecated": false, - "description": "" - }, - "Orange": { - "value": 3, - "deprecated": false, - "description": "" - }, - "Pink": { - "value": 10, - "deprecated": false, - "description": "" - }, - "Purple": { - "value": 11, - "deprecated": false, - "description": "" - }, - "Red": { - "value": 4, - "deprecated": false, - "description": "" - }, - "White": { - "value": 6, - "deprecated": false, - "description": "" - }, - "Yellow": { - "value": 5, - "deprecated": false, - "description": "" - } - } - }, - "DaylightSensorMode": { - "enumName": "DaylightSensorMode", - "values": { - "Default": { - "value": 0, - "deprecated": false, - "description": "" - }, - "Horizontal": { - "value": 1, - "deprecated": false, - "description": "" - }, - "Vertical": { - "value": 2, - "deprecated": false, - "description": "" - } - } - }, - "ElevatorMode": { - "enumName": "ElevatorMode", - "values": { - "Downward": { - "value": 2, - "deprecated": false, - "description": "" - }, - "Stationary": { - "value": 0, - "deprecated": false, - "description": "" - }, - "Upward": { - "value": 1, - "deprecated": false, - "description": "" - } - } - }, - "EntityState": { - "enumName": "EntityState", - "values": { - "Alive": { - "value": 0, - "deprecated": false, - "description": "" - }, - "Dead": { - "value": 1, - "deprecated": false, - "description": "" - }, - "Decay": { - "value": 3, - "deprecated": false, - "description": "" - }, - "Unconscious": { - "value": 2, - "deprecated": false, - "description": "" - } - } - }, - "GasType": { - "enumName": "GasType", - "values": { - "CarbonDioxide": { - "value": 4, - "deprecated": false, - "description": "" - }, - "Hydrogen": { - "value": 16384, - "deprecated": false, - "description": "" - }, - "LiquidCarbonDioxide": { - "value": 2048, - "deprecated": false, - "description": "" - }, - "LiquidHydrogen": { - "value": 32768, - "deprecated": false, - "description": "" - }, - "LiquidNitrogen": { - "value": 128, - "deprecated": false, - "description": "" - }, - "LiquidNitrousOxide": { - "value": 8192, - "deprecated": false, - "description": "" - }, - "LiquidOxygen": { - "value": 256, - "deprecated": false, - "description": "" - }, - "LiquidPollutant": { - "value": 4096, - "deprecated": false, - "description": "" - }, - "LiquidVolatiles": { - "value": 512, - "deprecated": false, - "description": "" - }, - "Nitrogen": { - "value": 2, - "deprecated": false, - "description": "" - }, - "NitrousOxide": { - "value": 64, - "deprecated": false, - "description": "" - }, - "Oxygen": { - "value": 1, - "deprecated": false, - "description": "" - }, - "Pollutant": { - "value": 16, - "deprecated": false, - "description": "" - }, - "PollutedWater": { - "value": 65536, - "deprecated": false, - "description": "" - }, - "Steam": { - "value": 1024, - "deprecated": false, - "description": "" - }, - "Undefined": { - "value": 0, - "deprecated": false, - "description": "" - }, - "Volatiles": { - "value": 8, - "deprecated": false, - "description": "" - }, - "Water": { - "value": 32, - "deprecated": false, - "description": "" - } - } - }, - "LogicSlotType": { - "enumName": "LogicSlotType", - "values": { - "Charge": { - "value": 10, - "deprecated": false, - "description": "returns current energy charge the slot occupant is holding" - }, - "ChargeRatio": { - "value": 11, - "deprecated": false, - "description": "returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum" - }, - "Class": { - "value": 12, - "deprecated": false, - "description": "returns integer representing the class of object" - }, - "Damage": { - "value": 4, - "deprecated": false, - "description": "returns the damage state of the item in the slot" - }, - "Efficiency": { - "value": 5, - "deprecated": false, - "description": "returns the growth efficiency of the plant in the slot" - }, - "FilterType": { - "value": 25, - "deprecated": false, - "description": "No description available" - }, - "Growth": { - "value": 7, - "deprecated": false, - "description": "returns the current growth state of the plant in the slot" - }, - "Health": { - "value": 6, - "deprecated": false, - "description": "returns the health of the plant in the slot" - }, - "LineNumber": { - "value": 19, - "deprecated": false, - "description": "The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution" - }, - "Lock": { - "value": 23, - "deprecated": false, - "description": "No description available" - }, - "Mature": { - "value": 16, - "deprecated": false, - "description": "returns 1 if the plant in this slot is mature, 0 when it isn't" - }, - "MaxQuantity": { - "value": 15, - "deprecated": false, - "description": "returns the max stack size of the item in the slot" - }, - "None": { - "value": 0, - "deprecated": false, - "description": "No description" - }, - "OccupantHash": { - "value": 2, - "deprecated": false, - "description": "returns the has of the current occupant, the unique identifier of the thing" - }, - "Occupied": { - "value": 1, - "deprecated": false, - "description": "returns 0 when slot is not occupied, 1 when it is" - }, - "On": { - "value": 22, - "deprecated": false, - "description": "No description available" - }, - "Open": { - "value": 21, - "deprecated": false, - "description": "No description available" - }, - "PrefabHash": { - "value": 17, - "deprecated": false, - "description": "returns the hash of the structure in the slot" - }, - "Pressure": { - "value": 8, - "deprecated": false, - "description": "returns pressure of the slot occupants internal atmosphere" - }, - "PressureAir": { - "value": 14, - "deprecated": false, - "description": "returns pressure in the air tank of the jetpack in this slot" - }, - "PressureWaste": { - "value": 13, - "deprecated": false, - "description": "returns pressure in the waste tank of the jetpack in this slot" - }, - "Quantity": { - "value": 3, - "deprecated": false, - "description": "returns the current quantity, such as stack size, of the item in the slot" - }, - "ReferenceId": { - "value": 26, - "deprecated": false, - "description": "Unique Reference Identifier for this object" - }, - "Seeding": { - "value": 18, - "deprecated": false, - "description": "Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not." - }, - "SortingClass": { - "value": 24, - "deprecated": false, - "description": "No description available" - }, - "Temperature": { - "value": 9, - "deprecated": false, - "description": "returns temperature of the slot occupants internal atmosphere" - }, - "Volume": { - "value": 20, - "deprecated": false, - "description": "No description available" - } - } - }, - "LogicType": { - "enumName": "LogicType", - "values": { - "Acceleration": { - "value": 216, - "deprecated": false, - "description": "Change in velocity. Rockets that are deccelerating when landing will show this as negative value." - }, - "Activate": { - "value": 9, - "deprecated": false, - "description": "1 if device is activated (usually means running), otherwise 0" - }, - "AirRelease": { - "value": 75, - "deprecated": false, - "description": "The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On" - }, - "AlignmentError": { - "value": 243, - "deprecated": false, - "description": "The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target." - }, - "Apex": { - "value": 238, - "deprecated": false, - "description": "The lowest altitude that the rocket will reach before it starts travelling upwards again." - }, - "AutoLand": { - "value": 226, - "deprecated": false, - "description": "Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing." - }, - "AutoShutOff": { - "value": 218, - "deprecated": false, - "description": "Turns off all devices in the rocket upon reaching destination" - }, - "BestContactFilter": { - "value": 267, - "deprecated": false, - "description": "Filters the satellite's auto selection of targets to a single reference ID." - }, - "Bpm": { - "value": 103, - "deprecated": false, - "description": "Bpm" - }, - "BurnTimeRemaining": { - "value": 225, - "deprecated": false, - "description": "Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage." - }, - "CelestialHash": { - "value": 242, - "deprecated": false, - "description": "The current hash of the targeted celestial object." - }, - "CelestialParentHash": { - "value": 250, - "deprecated": false, - "description": "The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial." - }, - "Channel0": { - "value": 165, - "deprecated": false, - "description": "Channel on a cable network which should be considered volatile" - }, - "Channel1": { - "value": 166, - "deprecated": false, - "description": "Channel on a cable network which should be considered volatile" - }, - "Channel2": { - "value": 167, - "deprecated": false, - "description": "Channel on a cable network which should be considered volatile" - }, - "Channel3": { - "value": 168, - "deprecated": false, - "description": "Channel on a cable network which should be considered volatile" - }, - "Channel4": { - "value": 169, - "deprecated": false, - "description": "Channel on a cable network which should be considered volatile" - }, - "Channel5": { - "value": 170, - "deprecated": false, - "description": "Channel on a cable network which should be considered volatile" - }, - "Channel6": { - "value": 171, - "deprecated": false, - "description": "Channel on a cable network which should be considered volatile" - }, - "Channel7": { - "value": 172, - "deprecated": false, - "description": "Channel on a cable network which should be considered volatile" - }, - "Charge": { - "value": 11, - "deprecated": false, - "description": "The current charge the device has" - }, - "Chart": { - "value": 256, - "deprecated": false, - "description": "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." - }, - "ChartedNavPoints": { - "value": 259, - "deprecated": false, - "description": "The number of charted NavPoints at the rocket's target Space Map Location." - }, - "ClearMemory": { - "value": 62, - "deprecated": false, - "description": "When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned" - }, - "CollectableGoods": { - "value": 101, - "deprecated": false, - "description": "Gets the cost of fuel to return the rocket to your current world." - }, - "Color": { - "value": 38, - "deprecated": false, - "description": "\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 " - }, - "Combustion": { - "value": 98, - "deprecated": false, - "description": "The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not." - }, - "CombustionInput": { - "value": 146, - "deprecated": false, - "description": "The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not." - }, - "CombustionInput2": { - "value": 147, - "deprecated": false, - "description": "The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not." - }, - "CombustionLimiter": { - "value": 153, - "deprecated": false, - "description": "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": { - "value": 148, - "deprecated": false, - "description": "The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not." - }, - "CombustionOutput2": { - "value": 149, - "deprecated": false, - "description": "The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not." - }, - "CompletionRatio": { - "value": 61, - "deprecated": false, - "description": "How complete the current production is for this device, between 0 and 1" - }, - "ContactTypeId": { - "value": 198, - "deprecated": false, - "description": "The type id of the contact." - }, - "CurrentCode": { - "value": 261, - "deprecated": false, - "description": "The Space Map Address of the rockets current Space Map Location" - }, - "CurrentResearchPodType": { - "value": 93, - "deprecated": false, - "description": "" - }, - "Density": { - "value": 262, - "deprecated": false, - "description": "The density of the rocket's target site's mine-able deposit." - }, - "DestinationCode": { - "value": 215, - "deprecated": false, - "description": "The Space Map Address of the rockets target Space Map Location" - }, - "Discover": { - "value": 255, - "deprecated": false, - "description": "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." - }, - "DistanceAu": { - "value": 244, - "deprecated": false, - "description": "The current distance to the celestial object, measured in astronomical units." - }, - "DistanceKm": { - "value": 249, - "deprecated": false, - "description": "The current distance to the celestial object, measured in kilometers." - }, - "DrillCondition": { - "value": 240, - "deprecated": false, - "description": "The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1." - }, - "DryMass": { - "value": 220, - "deprecated": false, - "description": "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": { - "value": 247, - "deprecated": false, - "description": "A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)." - }, - "ElevatorLevel": { - "value": 40, - "deprecated": false, - "description": "Level the elevator is currently at" - }, - "ElevatorSpeed": { - "value": 39, - "deprecated": false, - "description": "Current speed of the elevator" - }, - "EntityState": { - "value": 239, - "deprecated": false, - "description": "The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer." - }, - "EnvironmentEfficiency": { - "value": 104, - "deprecated": false, - "description": "The Environment Efficiency reported by the machine, as a float between 0 and 1" - }, - "Error": { - "value": 4, - "deprecated": false, - "description": "1 if device is in error state, otherwise 0" - }, - "ExhaustVelocity": { - "value": 235, - "deprecated": false, - "description": "The velocity of the exhaust gas in m/s" - }, - "ExportCount": { - "value": 63, - "deprecated": false, - "description": "How many items exported since last ClearMemory" - }, - "ExportQuantity": { - "value": 31, - "deprecated": true, - "description": "Total quantity of items exported by the device" - }, - "ExportSlotHash": { - "value": 42, - "deprecated": true, - "description": "DEPRECATED" - }, - "ExportSlotOccupant": { - "value": 32, - "deprecated": true, - "description": "DEPRECATED" - }, - "Filtration": { - "value": 74, - "deprecated": false, - "description": "The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On" - }, - "FlightControlRule": { - "value": 236, - "deprecated": false, - "description": "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." - }, - "Flush": { - "value": 174, - "deprecated": false, - "description": "Set to 1 to activate the flush function on the device" - }, - "ForceWrite": { - "value": 85, - "deprecated": false, - "description": "Forces Logic Writer devices to rewrite value" - }, - "ForwardX": { - "value": 227, - "deprecated": false, - "description": "The direction the entity is facing expressed as a normalized vector" - }, - "ForwardY": { - "value": 228, - "deprecated": false, - "description": "The direction the entity is facing expressed as a normalized vector" - }, - "ForwardZ": { - "value": 229, - "deprecated": false, - "description": "The direction the entity is facing expressed as a normalized vector" - }, - "Fuel": { - "value": 99, - "deprecated": false, - "description": "Gets the cost of fuel to return the rocket to your current world." - }, - "Harvest": { - "value": 69, - "deprecated": false, - "description": "Performs the harvesting action for any plant based machinery" - }, - "Horizontal": { - "value": 20, - "deprecated": false, - "description": "Horizontal setting of the device" - }, - "HorizontalRatio": { - "value": 34, - "deprecated": false, - "description": "Radio of horizontal setting for device" - }, - "Idle": { - "value": 37, - "deprecated": false, - "description": "Returns 1 if the device is currently idle, otherwise 0" - }, - "ImportCount": { - "value": 64, - "deprecated": false, - "description": "How many items imported since last ClearMemory" - }, - "ImportQuantity": { - "value": 29, - "deprecated": true, - "description": "Total quantity of items imported by the device" - }, - "ImportSlotHash": { - "value": 43, - "deprecated": true, - "description": "DEPRECATED" - }, - "ImportSlotOccupant": { - "value": 30, - "deprecated": true, - "description": "DEPRECATED" - }, - "Inclination": { - "value": 246, - "deprecated": false, - "description": "The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle." - }, - "Index": { - "value": 241, - "deprecated": false, - "description": "The current index for the device." - }, - "InterrogationProgress": { - "value": 157, - "deprecated": false, - "description": "Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1" - }, - "LineNumber": { - "value": 173, - "deprecated": false, - "description": "The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution" - }, - "Lock": { - "value": 10, - "deprecated": false, - "description": "1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values" - }, - "ManualResearchRequiredPod": { - "value": 94, - "deprecated": false, - "description": "Sets the pod type to search for a certain pod when breaking down a pods." - }, - "Mass": { - "value": 219, - "deprecated": false, - "description": "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": { - "value": 23, - "deprecated": false, - "description": "Maximum setting of the device" - }, - "MineablesInQueue": { - "value": 96, - "deprecated": false, - "description": "Returns the amount of mineables AIMEe has queued up to mine." - }, - "MineablesInVicinity": { - "value": 95, - "deprecated": false, - "description": "Returns the amount of potential mineables within an extended area around AIMEe." - }, - "MinedQuantity": { - "value": 266, - "deprecated": false, - "description": "The total number of resources that have been mined at the rocket's target Space Map Site." - }, - "MinimumWattsToContact": { - "value": 163, - "deprecated": false, - "description": "Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact" - }, - "Mode": { - "value": 3, - "deprecated": false, - "description": "Integer for mode state, different devices will have different mode states available to them" - }, - "NameHash": { - "value": 268, - "deprecated": false, - "description": "Provides the hash value for the name of the object as a 32 bit integer." - }, - "NavPoints": { - "value": 258, - "deprecated": false, - "description": "The number of NavPoints at the rocket's target Space Map Location." - }, - "NextWeatherEventTime": { - "value": 97, - "deprecated": false, - "description": "Returns in seconds when the next weather event is inbound." - }, - "None": { - "value": 0, - "deprecated": true, - "description": "No description" - }, - "On": { - "value": 28, - "deprecated": false, - "description": "The current state of the device, 0 for off, 1 for on" - }, - "Open": { - "value": 2, - "deprecated": false, - "description": "1 if device is open, otherwise 0" - }, - "OperationalTemperatureEfficiency": { - "value": 150, - "deprecated": false, - "description": "How the input pipe's temperature effects the machines efficiency" - }, - "OrbitPeriod": { - "value": 245, - "deprecated": false, - "description": "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." - }, - "Orientation": { - "value": 230, - "deprecated": false, - "description": "The orientation of the entity in degrees in a plane relative towards the north origin" - }, - "Output": { - "value": 70, - "deprecated": false, - "description": "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": { - "value": 234, - "deprecated": false, - "description": "The number of moles that passed through this device on the previous simulation tick" - }, - "Plant": { - "value": 68, - "deprecated": false, - "description": "Performs the planting action for any plant based machinery" - }, - "PlantEfficiency1": { - "value": 52, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantEfficiency2": { - "value": 53, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantEfficiency3": { - "value": 54, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantEfficiency4": { - "value": 55, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantGrowth1": { - "value": 48, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantGrowth2": { - "value": 49, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantGrowth3": { - "value": 50, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantGrowth4": { - "value": 51, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantHash1": { - "value": 56, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantHash2": { - "value": 57, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantHash3": { - "value": 58, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantHash4": { - "value": 59, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantHealth1": { - "value": 44, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantHealth2": { - "value": 45, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantHealth3": { - "value": 46, - "deprecated": true, - "description": "DEPRECATED" - }, - "PlantHealth4": { - "value": 47, - "deprecated": true, - "description": "DEPRECATED" - }, - "PositionX": { - "value": 76, - "deprecated": false, - "description": "The current position in X dimension in world coordinates" - }, - "PositionY": { - "value": 77, - "deprecated": false, - "description": "The current position in Y dimension in world coordinates" - }, - "PositionZ": { - "value": 78, - "deprecated": false, - "description": "The current position in Z dimension in world coordinates" - }, - "Power": { - "value": 1, - "deprecated": false, - "description": "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": { - "value": 26, - "deprecated": false, - "description": "How much energy the device or network is actually using" - }, - "PowerGeneration": { - "value": 65, - "deprecated": false, - "description": "Returns how much power is being generated" - }, - "PowerPotential": { - "value": 25, - "deprecated": false, - "description": "How much energy the device or network potentially provides" - }, - "PowerRequired": { - "value": 36, - "deprecated": false, - "description": "Power requested from the device and/or network" - }, - "PrefabHash": { - "value": 84, - "deprecated": false, - "description": "The hash of the structure" - }, - "Pressure": { - "value": 5, - "deprecated": false, - "description": "The current pressure reading of the device" - }, - "PressureEfficiency": { - "value": 152, - "deprecated": false, - "description": "How the pressure of the input pipe and waste pipe effect the machines efficiency" - }, - "PressureExternal": { - "value": 7, - "deprecated": false, - "description": "Setting for external pressure safety, in KPa" - }, - "PressureInput": { - "value": 106, - "deprecated": false, - "description": "The current pressure reading of the device's Input Network" - }, - "PressureInput2": { - "value": 116, - "deprecated": false, - "description": "The current pressure reading of the device's Input2 Network" - }, - "PressureInternal": { - "value": 8, - "deprecated": false, - "description": "Setting for internal pressure safety, in KPa" - }, - "PressureOutput": { - "value": 126, - "deprecated": false, - "description": "The current pressure reading of the device's Output Network" - }, - "PressureOutput2": { - "value": 136, - "deprecated": false, - "description": "The current pressure reading of the device's Output2 Network" - }, - "PressureSetting": { - "value": 71, - "deprecated": false, - "description": "The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa" - }, - "Progress": { - "value": 214, - "deprecated": false, - "description": "Progress of the rocket to the next node on the map expressed as a value between 0-1." - }, - "Quantity": { - "value": 27, - "deprecated": false, - "description": "Total quantity on the device" - }, - "Ratio": { - "value": 24, - "deprecated": false, - "description": "Context specific value depending on device, 0 to 1 based ratio" - }, - "RatioCarbonDioxide": { - "value": 15, - "deprecated": false, - "description": "The ratio of Carbon Dioxide in device atmosphere" - }, - "RatioCarbonDioxideInput": { - "value": 109, - "deprecated": false, - "description": "The ratio of Carbon Dioxide in device's input network" - }, - "RatioCarbonDioxideInput2": { - "value": 119, - "deprecated": false, - "description": "The ratio of Carbon Dioxide in device's Input2 network" - }, - "RatioCarbonDioxideOutput": { - "value": 129, - "deprecated": false, - "description": "The ratio of Carbon Dioxide in device's Output network" - }, - "RatioCarbonDioxideOutput2": { - "value": 139, - "deprecated": false, - "description": "The ratio of Carbon Dioxide in device's Output2 network" - }, - "RatioHydrogen": { - "value": 252, - "deprecated": false, - "description": "The ratio of Hydrogen in device's Atmopshere" - }, - "RatioLiquidCarbonDioxide": { - "value": 199, - "deprecated": false, - "description": "The ratio of Liquid Carbon Dioxide in device's Atmosphere" - }, - "RatioLiquidCarbonDioxideInput": { - "value": 200, - "deprecated": false, - "description": "The ratio of Liquid Carbon Dioxide in device's Input Atmosphere" - }, - "RatioLiquidCarbonDioxideInput2": { - "value": 201, - "deprecated": false, - "description": "The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere" - }, - "RatioLiquidCarbonDioxideOutput": { - "value": 202, - "deprecated": false, - "description": "The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere" - }, - "RatioLiquidCarbonDioxideOutput2": { - "value": 203, - "deprecated": false, - "description": "The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere" - }, - "RatioLiquidHydrogen": { - "value": 253, - "deprecated": false, - "description": "The ratio of Liquid Hydrogen in device's Atmopshere" - }, - "RatioLiquidNitrogen": { - "value": 177, - "deprecated": false, - "description": "The ratio of Liquid Nitrogen in device atmosphere" - }, - "RatioLiquidNitrogenInput": { - "value": 178, - "deprecated": false, - "description": "The ratio of Liquid Nitrogen in device's input network" - }, - "RatioLiquidNitrogenInput2": { - "value": 179, - "deprecated": false, - "description": "The ratio of Liquid Nitrogen in device's Input2 network" - }, - "RatioLiquidNitrogenOutput": { - "value": 180, - "deprecated": false, - "description": "The ratio of Liquid Nitrogen in device's Output network" - }, - "RatioLiquidNitrogenOutput2": { - "value": 181, - "deprecated": false, - "description": "The ratio of Liquid Nitrogen in device's Output2 network" - }, - "RatioLiquidNitrousOxide": { - "value": 209, - "deprecated": false, - "description": "The ratio of Liquid Nitrous Oxide in device's Atmosphere" - }, - "RatioLiquidNitrousOxideInput": { - "value": 210, - "deprecated": false, - "description": "The ratio of Liquid Nitrous Oxide in device's Input Atmosphere" - }, - "RatioLiquidNitrousOxideInput2": { - "value": 211, - "deprecated": false, - "description": "The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere" - }, - "RatioLiquidNitrousOxideOutput": { - "value": 212, - "deprecated": false, - "description": "The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere" - }, - "RatioLiquidNitrousOxideOutput2": { - "value": 213, - "deprecated": false, - "description": "The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere" - }, - "RatioLiquidOxygen": { - "value": 183, - "deprecated": false, - "description": "The ratio of Liquid Oxygen in device's Atmosphere" - }, - "RatioLiquidOxygenInput": { - "value": 184, - "deprecated": false, - "description": "The ratio of Liquid Oxygen in device's Input Atmosphere" - }, - "RatioLiquidOxygenInput2": { - "value": 185, - "deprecated": false, - "description": "The ratio of Liquid Oxygen in device's Input2 Atmosphere" - }, - "RatioLiquidOxygenOutput": { - "value": 186, - "deprecated": false, - "description": "The ratio of Liquid Oxygen in device's device's Output Atmosphere" - }, - "RatioLiquidOxygenOutput2": { - "value": 187, - "deprecated": false, - "description": "The ratio of Liquid Oxygen in device's Output2 Atmopshere" - }, - "RatioLiquidPollutant": { - "value": 204, - "deprecated": false, - "description": "The ratio of Liquid Pollutant in device's Atmosphere" - }, - "RatioLiquidPollutantInput": { - "value": 205, - "deprecated": false, - "description": "The ratio of Liquid Pollutant in device's Input Atmosphere" - }, - "RatioLiquidPollutantInput2": { - "value": 206, - "deprecated": false, - "description": "The ratio of Liquid Pollutant in device's Input2 Atmosphere" - }, - "RatioLiquidPollutantOutput": { - "value": 207, - "deprecated": false, - "description": "The ratio of Liquid Pollutant in device's device's Output Atmosphere" - }, - "RatioLiquidPollutantOutput2": { - "value": 208, - "deprecated": false, - "description": "The ratio of Liquid Pollutant in device's Output2 Atmopshere" - }, - "RatioLiquidVolatiles": { - "value": 188, - "deprecated": false, - "description": "The ratio of Liquid Volatiles in device's Atmosphere" - }, - "RatioLiquidVolatilesInput": { - "value": 189, - "deprecated": false, - "description": "The ratio of Liquid Volatiles in device's Input Atmosphere" - }, - "RatioLiquidVolatilesInput2": { - "value": 190, - "deprecated": false, - "description": "The ratio of Liquid Volatiles in device's Input2 Atmosphere" - }, - "RatioLiquidVolatilesOutput": { - "value": 191, - "deprecated": false, - "description": "The ratio of Liquid Volatiles in device's device's Output Atmosphere" - }, - "RatioLiquidVolatilesOutput2": { - "value": 192, - "deprecated": false, - "description": "The ratio of Liquid Volatiles in device's Output2 Atmopshere" - }, - "RatioNitrogen": { - "value": 16, - "deprecated": false, - "description": "The ratio of nitrogen in device atmosphere" - }, - "RatioNitrogenInput": { - "value": 110, - "deprecated": false, - "description": "The ratio of nitrogen in device's input network" - }, - "RatioNitrogenInput2": { - "value": 120, - "deprecated": false, - "description": "The ratio of nitrogen in device's Input2 network" - }, - "RatioNitrogenOutput": { - "value": 130, - "deprecated": false, - "description": "The ratio of nitrogen in device's Output network" - }, - "RatioNitrogenOutput2": { - "value": 140, - "deprecated": false, - "description": "The ratio of nitrogen in device's Output2 network" - }, - "RatioNitrousOxide": { - "value": 83, - "deprecated": false, - "description": "The ratio of Nitrous Oxide in device atmosphere" - }, - "RatioNitrousOxideInput": { - "value": 114, - "deprecated": false, - "description": "The ratio of Nitrous Oxide in device's input network" - }, - "RatioNitrousOxideInput2": { - "value": 124, - "deprecated": false, - "description": "The ratio of Nitrous Oxide in device's Input2 network" - }, - "RatioNitrousOxideOutput": { - "value": 134, - "deprecated": false, - "description": "The ratio of Nitrous Oxide in device's Output network" - }, - "RatioNitrousOxideOutput2": { - "value": 144, - "deprecated": false, - "description": "The ratio of Nitrous Oxide in device's Output2 network" - }, - "RatioOxygen": { - "value": 14, - "deprecated": false, - "description": "The ratio of oxygen in device atmosphere" - }, - "RatioOxygenInput": { - "value": 108, - "deprecated": false, - "description": "The ratio of oxygen in device's input network" - }, - "RatioOxygenInput2": { - "value": 118, - "deprecated": false, - "description": "The ratio of oxygen in device's Input2 network" - }, - "RatioOxygenOutput": { - "value": 128, - "deprecated": false, - "description": "The ratio of oxygen in device's Output network" - }, - "RatioOxygenOutput2": { - "value": 138, - "deprecated": false, - "description": "The ratio of oxygen in device's Output2 network" - }, - "RatioPollutant": { - "value": 17, - "deprecated": false, - "description": "The ratio of pollutant in device atmosphere" - }, - "RatioPollutantInput": { - "value": 111, - "deprecated": false, - "description": "The ratio of pollutant in device's input network" - }, - "RatioPollutantInput2": { - "value": 121, - "deprecated": false, - "description": "The ratio of pollutant in device's Input2 network" - }, - "RatioPollutantOutput": { - "value": 131, - "deprecated": false, - "description": "The ratio of pollutant in device's Output network" - }, - "RatioPollutantOutput2": { - "value": 141, - "deprecated": false, - "description": "The ratio of pollutant in device's Output2 network" - }, - "RatioPollutedWater": { - "value": 254, - "deprecated": false, - "description": "The ratio of polluted water in device atmosphere" - }, - "RatioSteam": { - "value": 193, - "deprecated": false, - "description": "The ratio of Steam in device's Atmosphere" - }, - "RatioSteamInput": { - "value": 194, - "deprecated": false, - "description": "The ratio of Steam in device's Input Atmosphere" - }, - "RatioSteamInput2": { - "value": 195, - "deprecated": false, - "description": "The ratio of Steam in device's Input2 Atmosphere" - }, - "RatioSteamOutput": { - "value": 196, - "deprecated": false, - "description": "The ratio of Steam in device's device's Output Atmosphere" - }, - "RatioSteamOutput2": { - "value": 197, - "deprecated": false, - "description": "The ratio of Steam in device's Output2 Atmopshere" - }, - "RatioVolatiles": { - "value": 18, - "deprecated": false, - "description": "The ratio of volatiles in device atmosphere" - }, - "RatioVolatilesInput": { - "value": 112, - "deprecated": false, - "description": "The ratio of volatiles in device's input network" - }, - "RatioVolatilesInput2": { - "value": 122, - "deprecated": false, - "description": "The ratio of volatiles in device's Input2 network" - }, - "RatioVolatilesOutput": { - "value": 132, - "deprecated": false, - "description": "The ratio of volatiles in device's Output network" - }, - "RatioVolatilesOutput2": { - "value": 142, - "deprecated": false, - "description": "The ratio of volatiles in device's Output2 network" - }, - "RatioWater": { - "value": 19, - "deprecated": false, - "description": "The ratio of water in device atmosphere" - }, - "RatioWaterInput": { - "value": 113, - "deprecated": false, - "description": "The ratio of water in device's input network" - }, - "RatioWaterInput2": { - "value": 123, - "deprecated": false, - "description": "The ratio of water in device's Input2 network" - }, - "RatioWaterOutput": { - "value": 133, - "deprecated": false, - "description": "The ratio of water in device's Output network" - }, - "RatioWaterOutput2": { - "value": 143, - "deprecated": false, - "description": "The ratio of water in device's Output2 network" - }, - "ReEntryAltitude": { - "value": 237, - "deprecated": false, - "description": "The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km" - }, - "Reagents": { - "value": 13, - "deprecated": false, - "description": "Total number of reagents recorded by the device" - }, - "RecipeHash": { - "value": 41, - "deprecated": false, - "description": "Current hash of the recipe the device is set to produce" - }, - "ReferenceId": { - "value": 217, - "deprecated": false, - "description": "Unique Reference Identifier for this object" - }, - "RequestHash": { - "value": 60, - "deprecated": false, - "description": "When set to the unique identifier, requests an item of the provided type from the device" - }, - "RequiredPower": { - "value": 33, - "deprecated": false, - "description": "Idle operating power quantity, does not necessarily include extra demand power" - }, - "ReturnFuelCost": { - "value": 100, - "deprecated": false, - "description": "Gets the fuel remaining in your rocket's fuel tank." - }, - "Richness": { - "value": 263, - "deprecated": false, - "description": "The richness of the rocket's target site's mine-able deposit." - }, - "Rpm": { - "value": 155, - "deprecated": false, - "description": "The number of revolutions per minute that the device's spinning mechanism is doing" - }, - "SemiMajorAxis": { - "value": 248, - "deprecated": false, - "description": "The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit." - }, - "Setting": { - "value": 12, - "deprecated": false, - "description": "A variable setting that can be read or written, depending on the device" - }, - "SettingInput": { - "value": 91, - "deprecated": false, - "description": "" - }, - "SettingOutput": { - "value": 92, - "deprecated": false, - "description": "" - }, - "SignalID": { - "value": 87, - "deprecated": false, - "description": "Returns the contact ID of the strongest signal from this Satellite" - }, - "SignalStrength": { - "value": 86, - "deprecated": false, - "description": "Returns the degree offset of the strongest contact" - }, - "Sites": { - "value": 260, - "deprecated": false, - "description": "The number of Sites that have been discovered at the rockets target Space Map location." - }, - "Size": { - "value": 264, - "deprecated": false, - "description": "The size of the rocket's target site's mine-able deposit." - }, - "SizeX": { - "value": 160, - "deprecated": false, - "description": "Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)" - }, - "SizeY": { - "value": 161, - "deprecated": false, - "description": "Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)" - }, - "SizeZ": { - "value": 162, - "deprecated": false, - "description": "Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)" - }, - "SolarAngle": { - "value": 22, - "deprecated": false, - "description": "Solar angle of the device" - }, - "SolarIrradiance": { - "value": 176, - "deprecated": false, - "description": "" - }, - "SoundAlert": { - "value": 175, - "deprecated": false, - "description": "Plays a sound alert on the devices speaker" - }, - "Stress": { - "value": 156, - "deprecated": false, - "description": "Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down" - }, - "Survey": { - "value": 257, - "deprecated": false, - "description": "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." - }, - "TargetPadIndex": { - "value": 158, - "deprecated": false, - "description": "The index of the trader landing pad on this devices data network that it will try to call a trader in to land" - }, - "TargetX": { - "value": 88, - "deprecated": false, - "description": "The target position in X dimension in world coordinates" - }, - "TargetY": { - "value": 89, - "deprecated": false, - "description": "The target position in Y dimension in world coordinates" - }, - "TargetZ": { - "value": 90, - "deprecated": false, - "description": "The target position in Z dimension in world coordinates" - }, - "Temperature": { - "value": 6, - "deprecated": false, - "description": "The current temperature reading of the device" - }, - "TemperatureDifferentialEfficiency": { - "value": 151, - "deprecated": false, - "description": "How the difference between the input pipe and waste pipe temperatures effect the machines efficiency" - }, - "TemperatureExternal": { - "value": 73, - "deprecated": false, - "description": "The temperature of the outside of the device, usually the world atmosphere surrounding it" - }, - "TemperatureInput": { - "value": 107, - "deprecated": false, - "description": "The current temperature reading of the device's Input Network" - }, - "TemperatureInput2": { - "value": 117, - "deprecated": false, - "description": "The current temperature reading of the device's Input2 Network" - }, - "TemperatureOutput": { - "value": 127, - "deprecated": false, - "description": "The current temperature reading of the device's Output Network" - }, - "TemperatureOutput2": { - "value": 137, - "deprecated": false, - "description": "The current temperature reading of the device's Output2 Network" - }, - "TemperatureSetting": { - "value": 72, - "deprecated": false, - "description": "The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)" - }, - "Throttle": { - "value": 154, - "deprecated": false, - "description": "Increases the rate at which the machine works (range: 0-100)" - }, - "Thrust": { - "value": 221, - "deprecated": false, - "description": "Total current thrust of all rocket engines on the rocket in Newtons." - }, - "ThrustToWeight": { - "value": 223, - "deprecated": false, - "description": "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": { - "value": 102, - "deprecated": false, - "description": "Time" - }, - "TimeToDestination": { - "value": 224, - "deprecated": false, - "description": "Estimated time in seconds until rocket arrives at target destination." - }, - "TotalMoles": { - "value": 66, - "deprecated": false, - "description": "Returns the total moles of the device" - }, - "TotalMolesInput": { - "value": 115, - "deprecated": false, - "description": "Returns the total moles of the device's Input Network" - }, - "TotalMolesInput2": { - "value": 125, - "deprecated": false, - "description": "Returns the total moles of the device's Input2 Network" - }, - "TotalMolesOutput": { - "value": 135, - "deprecated": false, - "description": "Returns the total moles of the device's Output Network" - }, - "TotalMolesOutput2": { - "value": 145, - "deprecated": false, - "description": "Returns the total moles of the device's Output2 Network" - }, - "TotalQuantity": { - "value": 265, - "deprecated": false, - "description": "The estimated total quantity of resources available to mine at the rocket's target Space Map Site." - }, - "TrueAnomaly": { - "value": 251, - "deprecated": false, - "description": "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)." - }, - "VelocityMagnitude": { - "value": 79, - "deprecated": false, - "description": "The current magnitude of the velocity vector" - }, - "VelocityRelativeX": { - "value": 80, - "deprecated": false, - "description": "The current velocity X relative to the forward vector of this" - }, - "VelocityRelativeY": { - "value": 81, - "deprecated": false, - "description": "The current velocity Y relative to the forward vector of this" - }, - "VelocityRelativeZ": { - "value": 82, - "deprecated": false, - "description": "The current velocity Z relative to the forward vector of this" - }, - "VelocityX": { - "value": 231, - "deprecated": false, - "description": "The world velocity of the entity in the X axis" - }, - "VelocityY": { - "value": 232, - "deprecated": false, - "description": "The world velocity of the entity in the Y axis" - }, - "VelocityZ": { - "value": 233, - "deprecated": false, - "description": "The world velocity of the entity in the Z axis" - }, - "Vertical": { - "value": 21, - "deprecated": false, - "description": "Vertical setting of the device" - }, - "VerticalRatio": { - "value": 35, - "deprecated": false, - "description": "Radio of vertical setting for device" - }, - "Volume": { - "value": 67, - "deprecated": false, - "description": "Returns the device atmosphere volume" - }, - "VolumeOfLiquid": { - "value": 182, - "deprecated": false, - "description": "The total volume of all liquids in Liters in the atmosphere" - }, - "WattsReachingContact": { - "value": 164, - "deprecated": false, - "description": "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": { - "value": 222, - "deprecated": false, - "description": "Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity." - }, - "WorkingGasEfficiency": { - "value": 105, - "deprecated": false, - "description": "The Working Gas Efficiency reported by the machine, as a float between 0 and 1" - } - } - }, - "PowerMode": { - "enumName": "PowerMode", - "values": { - "Charged": { - "value": 4, - "deprecated": false, - "description": "" - }, - "Charging": { - "value": 3, - "deprecated": false, - "description": "" - }, - "Discharged": { - "value": 1, - "deprecated": false, - "description": "" - }, - "Discharging": { - "value": 2, - "deprecated": false, - "description": "" - }, - "Idle": { - "value": 0, - "deprecated": false, - "description": "" - } - } - }, - "PrinterInstruction": { - "enumName": "PrinterInstruction", - "values": { - "DeviceSetLock": { - "value": 6, - "deprecated": false, - "description": "" - }, - "EjectAllReagents": { - "value": 8, - "deprecated": false, - "description": "" - }, - "EjectReagent": { - "value": 7, - "deprecated": false, - "description": "" - }, - "ExecuteRecipe": { - "value": 2, - "deprecated": false, - "description": "" - }, - "JumpIfNextInvalid": { - "value": 4, - "deprecated": false, - "description": "" - }, - "JumpToAddress": { - "value": 5, - "deprecated": false, - "description": "" - }, - "MissingRecipeReagent": { - "value": 9, - "deprecated": false, - "description": "" - }, - "None": { - "value": 0, - "deprecated": false, - "description": "" - }, - "StackPointer": { - "value": 1, - "deprecated": false, - "description": "" - }, - "WaitUntilNextValid": { - "value": 3, - "deprecated": false, - "description": "" - } - } - }, - "ReEntryProfile": { - "enumName": "ReEntryProfile", - "values": { - "High": { - "value": 3, - "deprecated": false, - "description": "" - }, - "Max": { - "value": 4, - "deprecated": false, - "description": "" - }, - "Medium": { - "value": 2, - "deprecated": false, - "description": "" - }, - "None": { - "value": 0, - "deprecated": false, - "description": "" - }, - "Optimal": { - "value": 1, - "deprecated": false, - "description": "" - } - } - }, - "RobotMode": { - "enumName": "RobotMode", - "values": { - "Follow": { - "value": 1, - "deprecated": false, - "description": "" - }, - "MoveToTarget": { - "value": 2, - "deprecated": false, - "description": "" - }, - "None": { - "value": 0, - "deprecated": false, - "description": "" - }, - "PathToTarget": { - "value": 5, - "deprecated": false, - "description": "" - }, - "Roam": { - "value": 3, - "deprecated": false, - "description": "" - }, - "StorageFull": { - "value": 6, - "deprecated": false, - "description": "" - }, - "Unload": { - "value": 4, - "deprecated": false, - "description": "" - } - } - }, - "RocketMode": { - "enumName": "RocketMode", - "values": { - "Chart": { - "value": 5, - "deprecated": false, - "description": "" - }, - "Discover": { - "value": 4, - "deprecated": false, - "description": "" - }, - "Invalid": { - "value": 0, - "deprecated": false, - "description": "" - }, - "Mine": { - "value": 2, - "deprecated": false, - "description": "" - }, - "None": { - "value": 1, - "deprecated": false, - "description": "" - }, - "Survey": { - "value": 3, - "deprecated": false, - "description": "" - } - } - }, - "SlotClass": { - "enumName": "Class", - "values": { - "AccessCard": { - "value": 22, - "deprecated": false, - "description": "" - }, - "Appliance": { - "value": 18, - "deprecated": false, - "description": "" - }, - "Back": { - "value": 3, - "deprecated": false, - "description": "" - }, - "Battery": { - "value": 14, - "deprecated": false, - "description": "" - }, - "Belt": { - "value": 16, - "deprecated": false, - "description": "" - }, - "Blocked": { - "value": 38, - "deprecated": false, - "description": "" - }, - "Bottle": { - "value": 25, - "deprecated": false, - "description": "" - }, - "Cartridge": { - "value": 21, - "deprecated": false, - "description": "" - }, - "Circuit": { - "value": 24, - "deprecated": false, - "description": "" - }, - "Circuitboard": { - "value": 7, - "deprecated": false, - "description": "" - }, - "CreditCard": { - "value": 28, - "deprecated": false, - "description": "" - }, - "DataDisk": { - "value": 8, - "deprecated": false, - "description": "" - }, - "DirtCanister": { - "value": 29, - "deprecated": false, - "description": "" - }, - "DrillHead": { - "value": 35, - "deprecated": false, - "description": "" - }, - "Egg": { - "value": 15, - "deprecated": false, - "description": "" - }, - "Entity": { - "value": 13, - "deprecated": false, - "description": "" - }, - "Flare": { - "value": 37, - "deprecated": false, - "description": "" - }, - "GasCanister": { - "value": 5, - "deprecated": false, - "description": "" - }, - "GasFilter": { - "value": 4, - "deprecated": false, - "description": "" - }, - "Glasses": { - "value": 27, - "deprecated": false, - "description": "" - }, - "Helmet": { - "value": 1, - "deprecated": false, - "description": "" - }, - "Ingot": { - "value": 19, - "deprecated": false, - "description": "" - }, - "LiquidBottle": { - "value": 32, - "deprecated": false, - "description": "" - }, - "LiquidCanister": { - "value": 31, - "deprecated": false, - "description": "" - }, - "Magazine": { - "value": 23, - "deprecated": false, - "description": "" - }, - "Motherboard": { - "value": 6, - "deprecated": false, - "description": "" - }, - "None": { - "value": 0, - "deprecated": false, - "description": "" - }, - "Ore": { - "value": 10, - "deprecated": false, - "description": "" - }, - "Organ": { - "value": 9, - "deprecated": false, - "description": "" - }, - "Plant": { - "value": 11, - "deprecated": false, - "description": "" - }, - "ProgrammableChip": { - "value": 26, - "deprecated": false, - "description": "" - }, - "ScanningHead": { - "value": 36, - "deprecated": false, - "description": "" - }, - "SensorProcessingUnit": { - "value": 30, - "deprecated": false, - "description": "" - }, - "SoundCartridge": { - "value": 34, - "deprecated": false, - "description": "" - }, - "Suit": { - "value": 2, - "deprecated": false, - "description": "" - }, - "SuitMod": { - "value": 39, - "deprecated": false, - "description": "" - }, - "Tool": { - "value": 17, - "deprecated": false, - "description": "" - }, - "Torpedo": { - "value": 20, - "deprecated": false, - "description": "" - }, - "Uniform": { - "value": 12, - "deprecated": false, - "description": "" - }, - "Wreckage": { - "value": 33, - "deprecated": false, - "description": "" - } - } - }, - "SorterInstruction": { - "enumName": "SorterInstruction", - "values": { - "FilterPrefabHashEquals": { - "value": 1, - "deprecated": false, - "description": "" - }, - "FilterPrefabHashNotEquals": { - "value": 2, - "deprecated": false, - "description": "" - }, - "FilterQuantityCompare": { - "value": 5, - "deprecated": false, - "description": "" - }, - "FilterSlotTypeCompare": { - "value": 4, - "deprecated": false, - "description": "" - }, - "FilterSortingClassCompare": { - "value": 3, - "deprecated": false, - "description": "" - }, - "LimitNextExecutionByCount": { - "value": 6, - "deprecated": false, - "description": "" - }, - "None": { - "value": 0, - "deprecated": false, - "description": "" - } - } - }, - "SortingClass": { - "enumName": "SortingClass", - "values": { - "Appliances": { - "value": 6, - "deprecated": false, - "description": "" - }, - "Atmospherics": { - "value": 7, - "deprecated": false, - "description": "" - }, - "Clothing": { - "value": 5, - "deprecated": false, - "description": "" - }, - "Default": { - "value": 0, - "deprecated": false, - "description": "" - }, - "Food": { - "value": 4, - "deprecated": false, - "description": "" - }, - "Ices": { - "value": 10, - "deprecated": false, - "description": "" - }, - "Kits": { - "value": 1, - "deprecated": false, - "description": "" - }, - "Ores": { - "value": 9, - "deprecated": false, - "description": "" - }, - "Resources": { - "value": 3, - "deprecated": false, - "description": "" - }, - "Storage": { - "value": 8, - "deprecated": false, - "description": "" - }, - "Tools": { - "value": 2, - "deprecated": false, - "description": "" - } - } - }, - "Sound": { - "enumName": "SoundAlert", - "values": { - "AirlockCycling": { - "value": 22, - "deprecated": false, - "description": "" - }, - "Alarm1": { - "value": 45, - "deprecated": false, - "description": "" - }, - "Alarm10": { - "value": 12, - "deprecated": false, - "description": "" - }, - "Alarm11": { - "value": 13, - "deprecated": false, - "description": "" - }, - "Alarm12": { - "value": 14, - "deprecated": false, - "description": "" - }, - "Alarm2": { - "value": 1, - "deprecated": false, - "description": "" - }, - "Alarm3": { - "value": 2, - "deprecated": false, - "description": "" - }, - "Alarm4": { - "value": 3, - "deprecated": false, - "description": "" - }, - "Alarm5": { - "value": 4, - "deprecated": false, - "description": "" - }, - "Alarm6": { - "value": 5, - "deprecated": false, - "description": "" - }, - "Alarm7": { - "value": 6, - "deprecated": false, - "description": "" - }, - "Alarm8": { - "value": 10, - "deprecated": false, - "description": "" - }, - "Alarm9": { - "value": 11, - "deprecated": false, - "description": "" - }, - "Alert": { - "value": 17, - "deprecated": false, - "description": "" - }, - "Danger": { - "value": 15, - "deprecated": false, - "description": "" - }, - "Depressurising": { - "value": 20, - "deprecated": false, - "description": "" - }, - "FireFireFire": { - "value": 28, - "deprecated": false, - "description": "" - }, - "Five": { - "value": 33, - "deprecated": false, - "description": "" - }, - "Floor": { - "value": 34, - "deprecated": false, - "description": "" - }, - "Four": { - "value": 32, - "deprecated": false, - "description": "" - }, - "HaltWhoGoesThere": { - "value": 27, - "deprecated": false, - "description": "" - }, - "HighCarbonDioxide": { - "value": 44, - "deprecated": false, - "description": "" - }, - "IntruderAlert": { - "value": 19, - "deprecated": false, - "description": "" - }, - "LiftOff": { - "value": 36, - "deprecated": false, - "description": "" - }, - "MalfunctionDetected": { - "value": 26, - "deprecated": false, - "description": "" - }, - "Music1": { - "value": 7, - "deprecated": false, - "description": "" - }, - "Music2": { - "value": 8, - "deprecated": false, - "description": "" - }, - "Music3": { - "value": 9, - "deprecated": false, - "description": "" - }, - "None": { - "value": 0, - "deprecated": false, - "description": "" - }, - "One": { - "value": 29, - "deprecated": false, - "description": "" - }, - "PollutantsDetected": { - "value": 43, - "deprecated": false, - "description": "" - }, - "PowerLow": { - "value": 23, - "deprecated": false, - "description": "" - }, - "PressureHigh": { - "value": 39, - "deprecated": false, - "description": "" - }, - "PressureLow": { - "value": 40, - "deprecated": false, - "description": "" - }, - "Pressurising": { - "value": 21, - "deprecated": false, - "description": "" - }, - "RocketLaunching": { - "value": 35, - "deprecated": false, - "description": "" - }, - "StormIncoming": { - "value": 18, - "deprecated": false, - "description": "" - }, - "SystemFailure": { - "value": 24, - "deprecated": false, - "description": "" - }, - "TemperatureHigh": { - "value": 41, - "deprecated": false, - "description": "" - }, - "TemperatureLow": { - "value": 42, - "deprecated": false, - "description": "" - }, - "Three": { - "value": 31, - "deprecated": false, - "description": "" - }, - "TraderIncoming": { - "value": 37, - "deprecated": false, - "description": "" - }, - "TraderLanded": { - "value": 38, - "deprecated": false, - "description": "" - }, - "Two": { - "value": 30, - "deprecated": false, - "description": "" - }, - "Warning": { - "value": 16, - "deprecated": false, - "description": "" - }, - "Welcome": { - "value": 25, - "deprecated": false, - "description": "" - } - } - }, - "TransmitterMode": { - "enumName": "LogicTransmitterMode", - "values": { - "Active": { - "value": 1, - "deprecated": false, - "description": "" - }, - "Passive": { - "value": 0, - "deprecated": false, - "description": "" - } - } - }, - "Vent": { - "enumName": "VentDirection", - "values": { - "Inward": { - "value": 1, - "deprecated": false, - "description": "" - }, - "Outward": { - "value": 0, - "deprecated": false, - "description": "" - } - } - }, - "_unnamed": { - "enumName": "ConditionOperation", - "values": { - "Equals": { - "value": 0, - "deprecated": false, - "description": "" - }, - "Greater": { - "value": 1, - "deprecated": false, - "description": "" - }, - "Less": { - "value": 2, - "deprecated": false, - "description": "" - }, - "NotEquals": { - "value": 3, - "deprecated": false, - "description": "" - } - } - } - } - }, - "prefabsByHash": { - "-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", - "-1884103228": "SeedBag_SugarCane", - "-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", - "-1351081801": "StructureLargeHangerDoor", - "-1348105509": "ItemGoldOre", - "-1344601965": "ItemCannedMushroom", - "-1339716113": "AppliancePaintMixer", - "-1339479035": "AccessCardGray", - "-1337091041": "StructureChuteDigitalValveRight", - "-1335056202": "ItemSugarCane", - "-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", - "-1108244510": "ItemPlainCake", - "-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", - "-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", - "-261575861": "ItemChocolateCake", - "-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", - "234601764": "ItemChocolateBar", - "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", - "457286516": "ItemCocoaPowder", - "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", - "680051921": "ItemCocoaTree", - "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", - "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", - "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", - "860793245": "ItemChocolateCerealBar", - "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", - "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", - "1139887531": "SeedBag_Cocoa", - "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", - "2111910840": "ItemSugar", - "2130739600": "DynamicMKIILiquidCanisterEmpty", - "2131916219": "ItemSpaceOre", - "2133035682": "ItemKitStandardChute", - "2134172356": "StructureInsulatedPipeStraight", - "2134647745": "ItemLeadIngot", - "2145068424": "ItemGasCanisterNitrogen" - }, - "structures": [ - "CompositeRollCover", - "DeviceLfoVolume", - "DeviceStepUnit", - "Flag_ODA_10m", - "Flag_ODA_4m", - "Flag_ODA_6m", - "Flag_ODA_8m", - "H2Combustor", - "KitchenTableShort", - "KitchenTableSimpleShort", - "KitchenTableSimpleTall", - "KitchenTableTall", - "Landingpad_2x2CenterPiece01", - "Landingpad_BlankPiece", - "Landingpad_CenterPiece01", - "Landingpad_CrossPiece", - "Landingpad_DataConnectionPiece", - "Landingpad_DiagonalPiece01", - "Landingpad_GasConnectorInwardPiece", - "Landingpad_GasConnectorOutwardPiece", - "Landingpad_GasCylinderTankPiece", - "Landingpad_LiquidConnectorInwardPiece", - "Landingpad_LiquidConnectorOutwardPiece", - "Landingpad_StraightPiece01", - "Landingpad_TaxiPieceCorner", - "Landingpad_TaxiPieceHold", - "Landingpad_TaxiPieceStraight", - "Landingpad_ThreshholdPiece", - "LogicStepSequencer8", - "PassiveSpeaker", - "RailingElegant01", - "RailingElegant02", - "RailingIndustrial02", - "RespawnPoint", - "RespawnPointWallMounted", - "Rover_MkI_build_states", - "StopWatch", - "StructureAccessBridge", - "StructureActiveVent", - "StructureAdvancedComposter", - "StructureAdvancedFurnace", - "StructureAdvancedPackagingMachine", - "StructureAirConditioner", - "StructureAirlock", - "StructureAirlockGate", - "StructureAngledBench", - "StructureArcFurnace", - "StructureAreaPowerControl", - "StructureAreaPowerControlReversed", - "StructureAutoMinerSmall", - "StructureAutolathe", - "StructureAutomatedOven", - "StructureBackLiquidPressureRegulator", - "StructureBackPressureRegulator", - "StructureBasketHoop", - "StructureBattery", - "StructureBatteryCharger", - "StructureBatteryChargerSmall", - "StructureBatteryLarge", - "StructureBatteryMedium", - "StructureBatterySmall", - "StructureBeacon", - "StructureBench", - "StructureBench1", - "StructureBench2", - "StructureBench3", - "StructureBench4", - "StructureBlastDoor", - "StructureBlockBed", - "StructureBlocker", - "StructureCableAnalysizer", - "StructureCableCorner", - "StructureCableCorner3", - "StructureCableCorner3Burnt", - "StructureCableCorner3HBurnt", - "StructureCableCorner4", - "StructureCableCorner4Burnt", - "StructureCableCorner4HBurnt", - "StructureCableCornerBurnt", - "StructureCableCornerH", - "StructureCableCornerH3", - "StructureCableCornerH4", - "StructureCableCornerHBurnt", - "StructureCableFuse100k", - "StructureCableFuse1k", - "StructureCableFuse50k", - "StructureCableFuse5k", - "StructureCableJunction", - "StructureCableJunction4", - "StructureCableJunction4Burnt", - "StructureCableJunction4HBurnt", - "StructureCableJunction5", - "StructureCableJunction5Burnt", - "StructureCableJunction6", - "StructureCableJunction6Burnt", - "StructureCableJunction6HBurnt", - "StructureCableJunctionBurnt", - "StructureCableJunctionH", - "StructureCableJunctionH4", - "StructureCableJunctionH5", - "StructureCableJunctionH5Burnt", - "StructureCableJunctionH6", - "StructureCableJunctionHBurnt", - "StructureCableStraight", - "StructureCableStraightBurnt", - "StructureCableStraightH", - "StructureCableStraightHBurnt", - "StructureCamera", - "StructureCapsuleTankGas", - "StructureCapsuleTankLiquid", - "StructureCargoStorageMedium", - "StructureCargoStorageSmall", - "StructureCentrifuge", - "StructureChair", - "StructureChairBacklessDouble", - "StructureChairBacklessSingle", - "StructureChairBoothCornerLeft", - "StructureChairBoothMiddle", - "StructureChairRectangleDouble", - "StructureChairRectangleSingle", - "StructureChairThickDouble", - "StructureChairThickSingle", - "StructureChuteBin", - "StructureChuteCorner", - "StructureChuteDigitalFlipFlopSplitterLeft", - "StructureChuteDigitalFlipFlopSplitterRight", - "StructureChuteDigitalValveLeft", - "StructureChuteDigitalValveRight", - "StructureChuteFlipFlopSplitter", - "StructureChuteInlet", - "StructureChuteJunction", - "StructureChuteOutlet", - "StructureChuteOverflow", - "StructureChuteStraight", - "StructureChuteUmbilicalFemale", - "StructureChuteUmbilicalFemaleSide", - "StructureChuteUmbilicalMale", - "StructureChuteValve", - "StructureChuteWindow", - "StructureCircuitHousing", - "StructureCombustionCentrifuge", - "StructureCompositeCladdingAngled", - "StructureCompositeCladdingAngledCorner", - "StructureCompositeCladdingAngledCornerInner", - "StructureCompositeCladdingAngledCornerInnerLong", - "StructureCompositeCladdingAngledCornerInnerLongL", - "StructureCompositeCladdingAngledCornerInnerLongR", - "StructureCompositeCladdingAngledCornerLong", - "StructureCompositeCladdingAngledCornerLongR", - "StructureCompositeCladdingAngledLong", - "StructureCompositeCladdingCylindrical", - "StructureCompositeCladdingCylindricalPanel", - "StructureCompositeCladdingPanel", - "StructureCompositeCladdingRounded", - "StructureCompositeCladdingRoundedCorner", - "StructureCompositeCladdingRoundedCornerInner", - "StructureCompositeCladdingSpherical", - "StructureCompositeCladdingSphericalCap", - "StructureCompositeCladdingSphericalCorner", - "StructureCompositeDoor", - "StructureCompositeFloorGrating", - "StructureCompositeFloorGrating2", - "StructureCompositeFloorGrating3", - "StructureCompositeFloorGrating4", - "StructureCompositeFloorGratingOpen", - "StructureCompositeFloorGratingOpenRotated", - "StructureCompositeWall", - "StructureCompositeWall02", - "StructureCompositeWall03", - "StructureCompositeWall04", - "StructureCompositeWindow", - "StructureCompositeWindowIron", - "StructureComputer", - "StructureCondensationChamber", - "StructureCondensationValve", - "StructureConsole", - "StructureConsoleDual", - "StructureConsoleLED1x2", - "StructureConsoleLED1x3", - "StructureConsoleLED5", - "StructureConsoleMonitor", - "StructureControlChair", - "StructureCornerLocker", - "StructureCrateMount", - "StructureCryoTube", - "StructureCryoTubeHorizontal", - "StructureCryoTubeVertical", - "StructureDaylightSensor", - "StructureDeepMiner", - "StructureDigitalValve", - "StructureDiode", - "StructureDiodeSlide", - "StructureDockPortSide", - "StructureDrinkingFountain", - "StructureElectrolyzer", - "StructureElectronicsPrinter", - "StructureElevatorLevelFront", - "StructureElevatorLevelIndustrial", - "StructureElevatorShaft", - "StructureElevatorShaftIndustrial", - "StructureEmergencyButton", - "StructureEngineMountTypeA1", - "StructureEvaporationChamber", - "StructureExpansionValve", - "StructureFairingTypeA1", - "StructureFairingTypeA2", - "StructureFairingTypeA3", - "StructureFiltration", - "StructureFlagSmall", - "StructureFlashingLight", - "StructureFlatBench", - "StructureFloorDrain", - "StructureFrame", - "StructureFrameCorner", - "StructureFrameCornerCut", - "StructureFrameIron", - "StructureFrameSide", - "StructureFridgeBig", - "StructureFridgeSmall", - "StructureFurnace", - "StructureFuselageTypeA1", - "StructureFuselageTypeA2", - "StructureFuselageTypeA4", - "StructureFuselageTypeC5", - "StructureGasGenerator", - "StructureGasMixer", - "StructureGasSensor", - "StructureGasTankStorage", - "StructureGasUmbilicalFemale", - "StructureGasUmbilicalFemaleSide", - "StructureGasUmbilicalMale", - "StructureGlassDoor", - "StructureGovernedGasEngine", - "StructureGroundBasedTelescope", - "StructureGrowLight", - "StructureHarvie", - "StructureHeatExchangeLiquidtoGas", - "StructureHeatExchangerGastoGas", - "StructureHeatExchangerLiquidtoLiquid", - "StructureHorizontalAutoMiner", - "StructureHydraulicPipeBender", - "StructureHydroponicsStation", - "StructureHydroponicsTray", - "StructureHydroponicsTrayData", - "StructureIceCrusher", - "StructureIgniter", - "StructureInLineTankGas1x1", - "StructureInLineTankGas1x2", - "StructureInLineTankLiquid1x1", - "StructureInLineTankLiquid1x2", - "StructureInsulatedInLineTankGas1x1", - "StructureInsulatedInLineTankGas1x2", - "StructureInsulatedInLineTankLiquid1x1", - "StructureInsulatedInLineTankLiquid1x2", - "StructureInsulatedPipeCorner", - "StructureInsulatedPipeCrossJunction", - "StructureInsulatedPipeCrossJunction3", - "StructureInsulatedPipeCrossJunction4", - "StructureInsulatedPipeCrossJunction5", - "StructureInsulatedPipeCrossJunction6", - "StructureInsulatedPipeLiquidCorner", - "StructureInsulatedPipeLiquidCrossJunction", - "StructureInsulatedPipeLiquidCrossJunction4", - "StructureInsulatedPipeLiquidCrossJunction5", - "StructureInsulatedPipeLiquidCrossJunction6", - "StructureInsulatedPipeLiquidStraight", - "StructureInsulatedPipeLiquidTJunction", - "StructureInsulatedPipeStraight", - "StructureInsulatedPipeTJunction", - "StructureInsulatedTankConnector", - "StructureInsulatedTankConnectorLiquid", - "StructureInteriorDoorGlass", - "StructureInteriorDoorPadded", - "StructureInteriorDoorPaddedThin", - "StructureInteriorDoorTriangle", - "StructureKlaxon", - "StructureLadder", - "StructureLadderEnd", - "StructureLargeDirectHeatExchangeGastoGas", - "StructureLargeDirectHeatExchangeGastoLiquid", - "StructureLargeDirectHeatExchangeLiquidtoLiquid", - "StructureLargeExtendableRadiator", - "StructureLargeHangerDoor", - "StructureLargeSatelliteDish", - "StructureLaunchMount", - "StructureLightLong", - "StructureLightLongAngled", - "StructureLightLongWide", - "StructureLightRound", - "StructureLightRoundAngled", - "StructureLightRoundSmall", - "StructureLiquidDrain", - "StructureLiquidPipeAnalyzer", - "StructureLiquidPipeHeater", - "StructureLiquidPipeOneWayValve", - "StructureLiquidPipeRadiator", - "StructureLiquidPressureRegulator", - "StructureLiquidTankBig", - "StructureLiquidTankBigInsulated", - "StructureLiquidTankSmall", - "StructureLiquidTankSmallInsulated", - "StructureLiquidTankStorage", - "StructureLiquidTurboVolumePump", - "StructureLiquidUmbilicalFemale", - "StructureLiquidUmbilicalFemaleSide", - "StructureLiquidUmbilicalMale", - "StructureLiquidValve", - "StructureLiquidVolumePump", - "StructureLockerSmall", - "StructureLogicBatchReader", - "StructureLogicBatchSlotReader", - "StructureLogicBatchWriter", - "StructureLogicButton", - "StructureLogicCompare", - "StructureLogicDial", - "StructureLogicGate", - "StructureLogicHashGen", - "StructureLogicMath", - "StructureLogicMathUnary", - "StructureLogicMemory", - "StructureLogicMinMax", - "StructureLogicMirror", - "StructureLogicReader", - "StructureLogicReagentReader", - "StructureLogicRocketDownlink", - "StructureLogicRocketUplink", - "StructureLogicSelect", - "StructureLogicSlotReader", - "StructureLogicSorter", - "StructureLogicSwitch", - "StructureLogicSwitch2", - "StructureLogicTransmitter", - "StructureLogicWriter", - "StructureLogicWriterSwitch", - "StructureManualHatch", - "StructureMediumConvectionRadiator", - "StructureMediumConvectionRadiatorLiquid", - "StructureMediumHangerDoor", - "StructureMediumRadiator", - "StructureMediumRadiatorLiquid", - "StructureMediumRocketGasFuelTank", - "StructureMediumRocketLiquidFuelTank", - "StructureMotionSensor", - "StructureNitrolyzer", - "StructureOccupancySensor", - "StructureOverheadShortCornerLocker", - "StructureOverheadShortLocker", - "StructurePassiveLargeRadiatorGas", - "StructurePassiveLargeRadiatorLiquid", - "StructurePassiveLiquidDrain", - "StructurePassiveVent", - "StructurePassiveVentInsulated", - "StructurePassthroughHeatExchangerGasToGas", - "StructurePassthroughHeatExchangerGasToLiquid", - "StructurePassthroughHeatExchangerLiquidToLiquid", - "StructurePictureFrameThickLandscapeLarge", - "StructurePictureFrameThickLandscapeSmall", - "StructurePictureFrameThickMountLandscapeLarge", - "StructurePictureFrameThickMountLandscapeSmall", - "StructurePictureFrameThickMountPortraitLarge", - "StructurePictureFrameThickMountPortraitSmall", - "StructurePictureFrameThickPortraitLarge", - "StructurePictureFrameThickPortraitSmall", - "StructurePictureFrameThinLandscapeLarge", - "StructurePictureFrameThinLandscapeSmall", - "StructurePictureFrameThinMountLandscapeLarge", - "StructurePictureFrameThinMountLandscapeSmall", - "StructurePictureFrameThinMountPortraitLarge", - "StructurePictureFrameThinMountPortraitSmall", - "StructurePictureFrameThinPortraitLarge", - "StructurePictureFrameThinPortraitSmall", - "StructurePipeAnalysizer", - "StructurePipeCorner", - "StructurePipeCowl", - "StructurePipeCrossJunction", - "StructurePipeCrossJunction3", - "StructurePipeCrossJunction4", - "StructurePipeCrossJunction5", - "StructurePipeCrossJunction6", - "StructurePipeHeater", - "StructurePipeIgniter", - "StructurePipeInsulatedLiquidCrossJunction", - "StructurePipeLabel", - "StructurePipeLiquidCorner", - "StructurePipeLiquidCrossJunction", - "StructurePipeLiquidCrossJunction3", - "StructurePipeLiquidCrossJunction4", - "StructurePipeLiquidCrossJunction5", - "StructurePipeLiquidCrossJunction6", - "StructurePipeLiquidStraight", - "StructurePipeLiquidTJunction", - "StructurePipeMeter", - "StructurePipeOneWayValve", - "StructurePipeOrgan", - "StructurePipeRadiator", - "StructurePipeRadiatorFlat", - "StructurePipeRadiatorFlatLiquid", - "StructurePipeStraight", - "StructurePipeTJunction", - "StructurePlanter", - "StructurePlatformLadderOpen", - "StructurePlinth", - "StructurePortablesConnector", - "StructurePowerConnector", - "StructurePowerTransmitter", - "StructurePowerTransmitterOmni", - "StructurePowerTransmitterReceiver", - "StructurePowerUmbilicalFemale", - "StructurePowerUmbilicalFemaleSide", - "StructurePowerUmbilicalMale", - "StructurePoweredVent", - "StructurePoweredVentLarge", - "StructurePressurantValve", - "StructurePressureFedGasEngine", - "StructurePressureFedLiquidEngine", - "StructurePressurePlateLarge", - "StructurePressurePlateMedium", - "StructurePressurePlateSmall", - "StructurePressureRegulator", - "StructureProximitySensor", - "StructurePumpedLiquidEngine", - "StructurePurgeValve", - "StructureRailing", - "StructureRecycler", - "StructureRefrigeratedVendingMachine", - "StructureReinforcedCompositeWindow", - "StructureReinforcedCompositeWindowSteel", - "StructureReinforcedWallPaddedWindow", - "StructureReinforcedWallPaddedWindowThin", - "StructureRocketAvionics", - "StructureRocketCelestialTracker", - "StructureRocketCircuitHousing", - "StructureRocketEngineTiny", - "StructureRocketManufactory", - "StructureRocketMiner", - "StructureRocketScanner", - "StructureRocketTower", - "StructureRocketTransformerSmall", - "StructureRover", - "StructureSDBHopper", - "StructureSDBHopperAdvanced", - "StructureSDBSilo", - "StructureSatelliteDish", - "StructureSecurityPrinter", - "StructureShelf", - "StructureShelfMedium", - "StructureShortCornerLocker", - "StructureShortLocker", - "StructureShower", - "StructureShowerPowered", - "StructureSign1x1", - "StructureSign2x1", - "StructureSingleBed", - "StructureSleeper", - "StructureSleeperLeft", - "StructureSleeperRight", - "StructureSleeperVertical", - "StructureSleeperVerticalDroid", - "StructureSmallDirectHeatExchangeGastoGas", - "StructureSmallDirectHeatExchangeLiquidtoGas", - "StructureSmallDirectHeatExchangeLiquidtoLiquid", - "StructureSmallSatelliteDish", - "StructureSmallTableBacklessDouble", - "StructureSmallTableBacklessSingle", - "StructureSmallTableDinnerSingle", - "StructureSmallTableRectangleDouble", - "StructureSmallTableRectangleSingle", - "StructureSmallTableThickDouble", - "StructureSmallTableThickSingle", - "StructureSolarPanel", - "StructureSolarPanel45", - "StructureSolarPanel45Reinforced", - "StructureSolarPanelDual", - "StructureSolarPanelDualReinforced", - "StructureSolarPanelFlat", - "StructureSolarPanelFlatReinforced", - "StructureSolarPanelReinforced", - "StructureSolidFuelGenerator", - "StructureSorter", - "StructureStacker", - "StructureStackerReverse", - "StructureStairs4x2", - "StructureStairs4x2RailL", - "StructureStairs4x2RailR", - "StructureStairs4x2Rails", - "StructureStairwellBackLeft", - "StructureStairwellBackPassthrough", - "StructureStairwellBackRight", - "StructureStairwellFrontLeft", - "StructureStairwellFrontPassthrough", - "StructureStairwellFrontRight", - "StructureStairwellNoDoors", - "StructureStirlingEngine", - "StructureStorageLocker", - "StructureSuitStorage", - "StructureTankBig", - "StructureTankBigInsulated", - "StructureTankConnector", - "StructureTankConnectorLiquid", - "StructureTankSmall", - "StructureTankSmallAir", - "StructureTankSmallFuel", - "StructureTankSmallInsulated", - "StructureToolManufactory", - "StructureTorpedoRack", - "StructureTraderWaypoint", - "StructureTransformer", - "StructureTransformerMedium", - "StructureTransformerMediumReversed", - "StructureTransformerSmall", - "StructureTransformerSmallReversed", - "StructureTurbineGenerator", - "StructureTurboVolumePump", - "StructureUnloader", - "StructureUprightWindTurbine", - "StructureValve", - "StructureVendingMachine", - "StructureVolumePump", - "StructureWallArch", - "StructureWallArchArrow", - "StructureWallArchCornerRound", - "StructureWallArchCornerSquare", - "StructureWallArchCornerTriangle", - "StructureWallArchPlating", - "StructureWallArchTwoTone", - "StructureWallCooler", - "StructureWallFlat", - "StructureWallFlatCornerRound", - "StructureWallFlatCornerSquare", - "StructureWallFlatCornerTriangle", - "StructureWallFlatCornerTriangleFlat", - "StructureWallGeometryCorner", - "StructureWallGeometryStreight", - "StructureWallGeometryT", - "StructureWallGeometryTMirrored", - "StructureWallHeater", - "StructureWallIron", - "StructureWallIron02", - "StructureWallIron03", - "StructureWallIron04", - "StructureWallLargePanel", - "StructureWallLargePanelArrow", - "StructureWallLight", - "StructureWallLightBattery", - "StructureWallPaddedArch", - "StructureWallPaddedArchCorner", - "StructureWallPaddedArchLightFittingTop", - "StructureWallPaddedArchLightsFittings", - "StructureWallPaddedCorner", - "StructureWallPaddedCornerThin", - "StructureWallPaddedNoBorder", - "StructureWallPaddedNoBorderCorner", - "StructureWallPaddedThinNoBorder", - "StructureWallPaddedThinNoBorderCorner", - "StructureWallPaddedWindow", - "StructureWallPaddedWindowThin", - "StructureWallPadding", - "StructureWallPaddingArchVent", - "StructureWallPaddingLightFitting", - "StructureWallPaddingThin", - "StructureWallPlating", - "StructureWallSmallPanelsAndHatch", - "StructureWallSmallPanelsArrow", - "StructureWallSmallPanelsMonoChrome", - "StructureWallSmallPanelsOpen", - "StructureWallSmallPanelsTwoTone", - "StructureWallVent", - "StructureWaterBottleFiller", - "StructureWaterBottleFillerBottom", - "StructureWaterBottleFillerPowered", - "StructureWaterBottleFillerPoweredBottom", - "StructureWaterDigitalValve", - "StructureWaterPipeMeter", - "StructureWaterPurifier", - "StructureWaterWallCooler", - "StructureWeatherStation", - "StructureWindTurbine", - "StructureWindowShutter" - ], - "devices": [ - "CompositeRollCover", - "DeviceLfoVolume", - "DeviceStepUnit", - "H2Combustor", - "Landingpad_DataConnectionPiece", - "Landingpad_GasConnectorInwardPiece", - "Landingpad_GasConnectorOutwardPiece", - "Landingpad_LiquidConnectorInwardPiece", - "Landingpad_LiquidConnectorOutwardPiece", - "Landingpad_ThreshholdPiece", - "LogicStepSequencer8", - "PassiveSpeaker", - "StopWatch", - "StructureAccessBridge", - "StructureActiveVent", - "StructureAdvancedComposter", - "StructureAdvancedFurnace", - "StructureAdvancedPackagingMachine", - "StructureAirConditioner", - "StructureAirlock", - "StructureAirlockGate", - "StructureAngledBench", - "StructureArcFurnace", - "StructureAreaPowerControl", - "StructureAreaPowerControlReversed", - "StructureAutoMinerSmall", - "StructureAutolathe", - "StructureAutomatedOven", - "StructureBackLiquidPressureRegulator", - "StructureBackPressureRegulator", - "StructureBasketHoop", - "StructureBattery", - "StructureBatteryCharger", - "StructureBatteryChargerSmall", - "StructureBatteryLarge", - "StructureBatteryMedium", - "StructureBatterySmall", - "StructureBeacon", - "StructureBench", - "StructureBench1", - "StructureBench2", - "StructureBench3", - "StructureBench4", - "StructureBlastDoor", - "StructureBlockBed", - "StructureCableAnalysizer", - "StructureCableFuse100k", - "StructureCableFuse1k", - "StructureCableFuse50k", - "StructureCableFuse5k", - "StructureCamera", - "StructureCapsuleTankGas", - "StructureCapsuleTankLiquid", - "StructureCargoStorageMedium", - "StructureCargoStorageSmall", - "StructureCentrifuge", - "StructureChair", - "StructureChairBacklessDouble", - "StructureChairBacklessSingle", - "StructureChairBoothCornerLeft", - "StructureChairBoothMiddle", - "StructureChairRectangleDouble", - "StructureChairRectangleSingle", - "StructureChairThickDouble", - "StructureChairThickSingle", - "StructureChuteBin", - "StructureChuteDigitalFlipFlopSplitterLeft", - "StructureChuteDigitalFlipFlopSplitterRight", - "StructureChuteDigitalValveLeft", - "StructureChuteDigitalValveRight", - "StructureChuteInlet", - "StructureChuteOutlet", - "StructureChuteUmbilicalFemale", - "StructureChuteUmbilicalFemaleSide", - "StructureChuteUmbilicalMale", - "StructureCircuitHousing", - "StructureCombustionCentrifuge", - "StructureCompositeDoor", - "StructureComputer", - "StructureCondensationChamber", - "StructureCondensationValve", - "StructureConsole", - "StructureConsoleDual", - "StructureConsoleLED1x2", - "StructureConsoleLED1x3", - "StructureConsoleLED5", - "StructureConsoleMonitor", - "StructureControlChair", - "StructureCornerLocker", - "StructureCryoTube", - "StructureCryoTubeHorizontal", - "StructureCryoTubeVertical", - "StructureDaylightSensor", - "StructureDeepMiner", - "StructureDigitalValve", - "StructureDiode", - "StructureDiodeSlide", - "StructureDockPortSide", - "StructureDrinkingFountain", - "StructureElectrolyzer", - "StructureElectronicsPrinter", - "StructureElevatorLevelFront", - "StructureElevatorLevelIndustrial", - "StructureElevatorShaft", - "StructureElevatorShaftIndustrial", - "StructureEmergencyButton", - "StructureEvaporationChamber", - "StructureExpansionValve", - "StructureFiltration", - "StructureFlashingLight", - "StructureFlatBench", - "StructureFridgeBig", - "StructureFridgeSmall", - "StructureFurnace", - "StructureGasGenerator", - "StructureGasMixer", - "StructureGasSensor", - "StructureGasTankStorage", - "StructureGasUmbilicalFemale", - "StructureGasUmbilicalFemaleSide", - "StructureGasUmbilicalMale", - "StructureGlassDoor", - "StructureGovernedGasEngine", - "StructureGroundBasedTelescope", - "StructureGrowLight", - "StructureHarvie", - "StructureHeatExchangeLiquidtoGas", - "StructureHeatExchangerGastoGas", - "StructureHeatExchangerLiquidtoLiquid", - "StructureHorizontalAutoMiner", - "StructureHydraulicPipeBender", - "StructureHydroponicsStation", - "StructureHydroponicsTrayData", - "StructureIceCrusher", - "StructureIgniter", - "StructureInteriorDoorGlass", - "StructureInteriorDoorPadded", - "StructureInteriorDoorPaddedThin", - "StructureInteriorDoorTriangle", - "StructureKlaxon", - "StructureLargeDirectHeatExchangeGastoGas", - "StructureLargeDirectHeatExchangeGastoLiquid", - "StructureLargeDirectHeatExchangeLiquidtoLiquid", - "StructureLargeExtendableRadiator", - "StructureLargeHangerDoor", - "StructureLargeSatelliteDish", - "StructureLightLong", - "StructureLightLongAngled", - "StructureLightLongWide", - "StructureLightRound", - "StructureLightRoundAngled", - "StructureLightRoundSmall", - "StructureLiquidDrain", - "StructureLiquidPipeAnalyzer", - "StructureLiquidPipeHeater", - "StructureLiquidPipeOneWayValve", - "StructureLiquidPipeRadiator", - "StructureLiquidPressureRegulator", - "StructureLiquidTankBig", - "StructureLiquidTankBigInsulated", - "StructureLiquidTankSmall", - "StructureLiquidTankSmallInsulated", - "StructureLiquidTankStorage", - "StructureLiquidTurboVolumePump", - "StructureLiquidUmbilicalFemale", - "StructureLiquidUmbilicalFemaleSide", - "StructureLiquidUmbilicalMale", - "StructureLiquidValve", - "StructureLiquidVolumePump", - "StructureLockerSmall", - "StructureLogicBatchReader", - "StructureLogicBatchSlotReader", - "StructureLogicBatchWriter", - "StructureLogicButton", - "StructureLogicCompare", - "StructureLogicDial", - "StructureLogicGate", - "StructureLogicHashGen", - "StructureLogicMath", - "StructureLogicMathUnary", - "StructureLogicMemory", - "StructureLogicMinMax", - "StructureLogicMirror", - "StructureLogicReader", - "StructureLogicReagentReader", - "StructureLogicRocketDownlink", - "StructureLogicRocketUplink", - "StructureLogicSelect", - "StructureLogicSlotReader", - "StructureLogicSorter", - "StructureLogicSwitch", - "StructureLogicSwitch2", - "StructureLogicTransmitter", - "StructureLogicWriter", - "StructureLogicWriterSwitch", - "StructureManualHatch", - "StructureMediumConvectionRadiator", - "StructureMediumConvectionRadiatorLiquid", - "StructureMediumHangerDoor", - "StructureMediumRadiator", - "StructureMediumRadiatorLiquid", - "StructureMediumRocketGasFuelTank", - "StructureMediumRocketLiquidFuelTank", - "StructureMotionSensor", - "StructureNitrolyzer", - "StructureOccupancySensor", - "StructureOverheadShortCornerLocker", - "StructureOverheadShortLocker", - "StructurePassiveLargeRadiatorGas", - "StructurePassiveLargeRadiatorLiquid", - "StructurePassiveLiquidDrain", - "StructurePassthroughHeatExchangerGasToGas", - "StructurePassthroughHeatExchangerGasToLiquid", - "StructurePassthroughHeatExchangerLiquidToLiquid", - "StructurePipeAnalysizer", - "StructurePipeHeater", - "StructurePipeIgniter", - "StructurePipeLabel", - "StructurePipeMeter", - "StructurePipeOneWayValve", - "StructurePipeRadiator", - "StructurePipeRadiatorFlat", - "StructurePipeRadiatorFlatLiquid", - "StructurePortablesConnector", - "StructurePowerConnector", - "StructurePowerTransmitter", - "StructurePowerTransmitterOmni", - "StructurePowerTransmitterReceiver", - "StructurePowerUmbilicalFemale", - "StructurePowerUmbilicalFemaleSide", - "StructurePowerUmbilicalMale", - "StructurePoweredVent", - "StructurePoweredVentLarge", - "StructurePressurantValve", - "StructurePressureFedGasEngine", - "StructurePressureFedLiquidEngine", - "StructurePressurePlateLarge", - "StructurePressurePlateMedium", - "StructurePressurePlateSmall", - "StructurePressureRegulator", - "StructureProximitySensor", - "StructurePumpedLiquidEngine", - "StructurePurgeValve", - "StructureRecycler", - "StructureRefrigeratedVendingMachine", - "StructureRocketAvionics", - "StructureRocketCelestialTracker", - "StructureRocketCircuitHousing", - "StructureRocketEngineTiny", - "StructureRocketManufactory", - "StructureRocketMiner", - "StructureRocketScanner", - "StructureRocketTransformerSmall", - "StructureSDBHopper", - "StructureSDBHopperAdvanced", - "StructureSDBSilo", - "StructureSatelliteDish", - "StructureSecurityPrinter", - "StructureShelfMedium", - "StructureShortCornerLocker", - "StructureShortLocker", - "StructureShower", - "StructureShowerPowered", - "StructureSign1x1", - "StructureSign2x1", - "StructureSingleBed", - "StructureSleeper", - "StructureSleeperLeft", - "StructureSleeperRight", - "StructureSleeperVertical", - "StructureSleeperVerticalDroid", - "StructureSmallDirectHeatExchangeGastoGas", - "StructureSmallDirectHeatExchangeLiquidtoGas", - "StructureSmallDirectHeatExchangeLiquidtoLiquid", - "StructureSmallSatelliteDish", - "StructureSolarPanel", - "StructureSolarPanel45", - "StructureSolarPanel45Reinforced", - "StructureSolarPanelDual", - "StructureSolarPanelDualReinforced", - "StructureSolarPanelFlat", - "StructureSolarPanelFlatReinforced", - "StructureSolarPanelReinforced", - "StructureSolidFuelGenerator", - "StructureSorter", - "StructureStacker", - "StructureStackerReverse", - "StructureStirlingEngine", - "StructureStorageLocker", - "StructureSuitStorage", - "StructureTankBig", - "StructureTankBigInsulated", - "StructureTankSmall", - "StructureTankSmallAir", - "StructureTankSmallFuel", - "StructureTankSmallInsulated", - "StructureToolManufactory", - "StructureTraderWaypoint", - "StructureTransformer", - "StructureTransformerMedium", - "StructureTransformerMediumReversed", - "StructureTransformerSmall", - "StructureTransformerSmallReversed", - "StructureTurbineGenerator", - "StructureTurboVolumePump", - "StructureUnloader", - "StructureUprightWindTurbine", - "StructureValve", - "StructureVendingMachine", - "StructureVolumePump", - "StructureWallCooler", - "StructureWallHeater", - "StructureWallLight", - "StructureWallLightBattery", - "StructureWaterBottleFiller", - "StructureWaterBottleFillerBottom", - "StructureWaterBottleFillerPowered", - "StructureWaterBottleFillerPoweredBottom", - "StructureWaterDigitalValve", - "StructureWaterPipeMeter", - "StructureWaterPurifier", - "StructureWaterWallCooler", - "StructureWeatherStation", - "StructureWindTurbine", - "StructureWindowShutter" - ], - "items": [ - "AccessCardBlack", - "AccessCardBlue", - "AccessCardBrown", - "AccessCardGray", - "AccessCardGreen", - "AccessCardKhaki", - "AccessCardOrange", - "AccessCardPink", - "AccessCardPurple", - "AccessCardRed", - "AccessCardWhite", - "AccessCardYellow", - "ApplianceChemistryStation", - "ApplianceDeskLampLeft", - "ApplianceDeskLampRight", - "ApplianceMicrowave", - "AppliancePackagingMachine", - "AppliancePaintMixer", - "AppliancePlantGeneticAnalyzer", - "AppliancePlantGeneticSplicer", - "AppliancePlantGeneticStabilizer", - "ApplianceReagentProcessor", - "ApplianceSeedTray", - "ApplianceTabletDock", - "AutolathePrinterMod", - "Battery_Wireless_cell", - "Battery_Wireless_cell_Big", - "CardboardBox", - "CartridgeAccessController", - "CartridgeAtmosAnalyser", - "CartridgeConfiguration", - "CartridgeElectronicReader", - "CartridgeGPS", - "CartridgeGuide", - "CartridgeMedicalAnalyser", - "CartridgeNetworkAnalyser", - "CartridgeOreScanner", - "CartridgeOreScannerColor", - "CartridgePlantAnalyser", - "CartridgeTracker", - "CircuitboardAdvAirlockControl", - "CircuitboardAirControl", - "CircuitboardAirlockControl", - "CircuitboardCameraDisplay", - "CircuitboardDoorControl", - "CircuitboardGasDisplay", - "CircuitboardGraphDisplay", - "CircuitboardHashDisplay", - "CircuitboardModeControl", - "CircuitboardPowerControl", - "CircuitboardShipDisplay", - "CircuitboardSolarControl", - "CrateMkII", - "DecayedFood", - "DynamicAirConditioner", - "DynamicCrate", - "DynamicGPR", - "DynamicGasCanisterAir", - "DynamicGasCanisterCarbonDioxide", - "DynamicGasCanisterEmpty", - "DynamicGasCanisterFuel", - "DynamicGasCanisterNitrogen", - "DynamicGasCanisterNitrousOxide", - "DynamicGasCanisterOxygen", - "DynamicGasCanisterPollutants", - "DynamicGasCanisterRocketFuel", - "DynamicGasCanisterVolatiles", - "DynamicGasCanisterWater", - "DynamicGasTankAdvanced", - "DynamicGasTankAdvancedOxygen", - "DynamicGenerator", - "DynamicHydroponics", - "DynamicLight", - "DynamicLiquidCanisterEmpty", - "DynamicMKIILiquidCanisterEmpty", - "DynamicMKIILiquidCanisterWater", - "DynamicScrubber", - "DynamicSkeleton", - "ElectronicPrinterMod", - "ElevatorCarrage", - "EntityChick", - "EntityChickenBrown", - "EntityChickenWhite", - "EntityRoosterBlack", - "EntityRoosterBrown", - "Fertilizer", - "FireArmSMG", - "FlareGun", - "Handgun", - "HandgunMagazine", - "HumanSkull", - "ImGuiCircuitboardAirlockControl", - "ItemActiveVent", - "ItemAdhesiveInsulation", - "ItemAdvancedTablet", - "ItemAlienMushroom", - "ItemAmmoBox", - "ItemAngleGrinder", - "ItemArcWelder", - "ItemAreaPowerControl", - "ItemAstroloyIngot", - "ItemAstroloySheets", - "ItemAuthoringTool", - "ItemAuthoringToolRocketNetwork", - "ItemBasketBall", - "ItemBatteryCell", - "ItemBatteryCellLarge", - "ItemBatteryCellNuclear", - "ItemBatteryCharger", - "ItemBatteryChargerSmall", - "ItemBeacon", - "ItemBiomass", - "ItemBreadLoaf", - "ItemCableAnalyser", - "ItemCableCoil", - "ItemCableCoilHeavy", - "ItemCableFuse", - "ItemCannedCondensedMilk", - "ItemCannedEdamame", - "ItemCannedMushroom", - "ItemCannedPowderedEggs", - "ItemCannedRicePudding", - "ItemCerealBar", - "ItemCharcoal", - "ItemChemLightBlue", - "ItemChemLightGreen", - "ItemChemLightRed", - "ItemChemLightWhite", - "ItemChemLightYellow", - "ItemChocolateBar", - "ItemChocolateCake", - "ItemChocolateCerealBar", - "ItemCoalOre", - "ItemCobaltOre", - "ItemCocoaPowder", - "ItemCocoaTree", - "ItemCoffeeMug", - "ItemConstantanIngot", - "ItemCookedCondensedMilk", - "ItemCookedCorn", - "ItemCookedMushroom", - "ItemCookedPowderedEggs", - "ItemCookedPumpkin", - "ItemCookedRice", - "ItemCookedSoybean", - "ItemCookedTomato", - "ItemCopperIngot", - "ItemCopperOre", - "ItemCorn", - "ItemCornSoup", - "ItemCreditCard", - "ItemCropHay", - "ItemCrowbar", - "ItemDataDisk", - "ItemDirtCanister", - "ItemDirtyOre", - "ItemDisposableBatteryCharger", - "ItemDrill", - "ItemDuctTape", - "ItemDynamicAirCon", - "ItemDynamicScrubber", - "ItemEggCarton", - "ItemElectronicParts", - "ItemElectrumIngot", - "ItemEmergencyAngleGrinder", - "ItemEmergencyArcWelder", - "ItemEmergencyCrowbar", - "ItemEmergencyDrill", - "ItemEmergencyEvaSuit", - "ItemEmergencyPickaxe", - "ItemEmergencyScrewdriver", - "ItemEmergencySpaceHelmet", - "ItemEmergencyToolBelt", - "ItemEmergencyWireCutters", - "ItemEmergencyWrench", - "ItemEmptyCan", - "ItemEvaSuit", - "ItemExplosive", - "ItemFern", - "ItemFertilizedEgg", - "ItemFilterFern", - "ItemFlagSmall", - "ItemFlashingLight", - "ItemFlashlight", - "ItemFlour", - "ItemFlowerBlue", - "ItemFlowerGreen", - "ItemFlowerOrange", - "ItemFlowerRed", - "ItemFlowerYellow", - "ItemFrenchFries", - "ItemFries", - "ItemGasCanisterCarbonDioxide", - "ItemGasCanisterEmpty", - "ItemGasCanisterFuel", - "ItemGasCanisterNitrogen", - "ItemGasCanisterNitrousOxide", - "ItemGasCanisterOxygen", - "ItemGasCanisterPollutants", - "ItemGasCanisterSmart", - "ItemGasCanisterVolatiles", - "ItemGasCanisterWater", - "ItemGasFilterCarbonDioxide", - "ItemGasFilterCarbonDioxideInfinite", - "ItemGasFilterCarbonDioxideL", - "ItemGasFilterCarbonDioxideM", - "ItemGasFilterNitrogen", - "ItemGasFilterNitrogenInfinite", - "ItemGasFilterNitrogenL", - "ItemGasFilterNitrogenM", - "ItemGasFilterNitrousOxide", - "ItemGasFilterNitrousOxideInfinite", - "ItemGasFilterNitrousOxideL", - "ItemGasFilterNitrousOxideM", - "ItemGasFilterOxygen", - "ItemGasFilterOxygenInfinite", - "ItemGasFilterOxygenL", - "ItemGasFilterOxygenM", - "ItemGasFilterPollutants", - "ItemGasFilterPollutantsInfinite", - "ItemGasFilterPollutantsL", - "ItemGasFilterPollutantsM", - "ItemGasFilterVolatiles", - "ItemGasFilterVolatilesInfinite", - "ItemGasFilterVolatilesL", - "ItemGasFilterVolatilesM", - "ItemGasFilterWater", - "ItemGasFilterWaterInfinite", - "ItemGasFilterWaterL", - "ItemGasFilterWaterM", - "ItemGasSensor", - "ItemGasTankStorage", - "ItemGlassSheets", - "ItemGlasses", - "ItemGoldIngot", - "ItemGoldOre", - "ItemGrenade", - "ItemHEMDroidRepairKit", - "ItemHardBackpack", - "ItemHardJetpack", - "ItemHardMiningBackPack", - "ItemHardSuit", - "ItemHardsuitHelmet", - "ItemHastelloyIngot", - "ItemHat", - "ItemHighVolumeGasCanisterEmpty", - "ItemHorticultureBelt", - "ItemHydroponicTray", - "ItemIce", - "ItemIgniter", - "ItemInconelIngot", - "ItemInsulation", - "ItemIntegratedCircuit10", - "ItemInvarIngot", - "ItemIronFrames", - "ItemIronIngot", - "ItemIronOre", - "ItemIronSheets", - "ItemJetpackBasic", - "ItemKitAIMeE", - "ItemKitAccessBridge", - "ItemKitAdvancedComposter", - "ItemKitAdvancedFurnace", - "ItemKitAdvancedPackagingMachine", - "ItemKitAirlock", - "ItemKitAirlockGate", - "ItemKitArcFurnace", - "ItemKitAtmospherics", - "ItemKitAutoMinerSmall", - "ItemKitAutolathe", - "ItemKitAutomatedOven", - "ItemKitBasket", - "ItemKitBattery", - "ItemKitBatteryLarge", - "ItemKitBeacon", - "ItemKitBeds", - "ItemKitBlastDoor", - "ItemKitCentrifuge", - "ItemKitChairs", - "ItemKitChute", - "ItemKitChuteUmbilical", - "ItemKitCompositeCladding", - "ItemKitCompositeFloorGrating", - "ItemKitComputer", - "ItemKitConsole", - "ItemKitCrate", - "ItemKitCrateMkII", - "ItemKitCrateMount", - "ItemKitCryoTube", - "ItemKitDeepMiner", - "ItemKitDockingPort", - "ItemKitDoor", - "ItemKitDrinkingFountain", - "ItemKitDynamicCanister", - "ItemKitDynamicGasTankAdvanced", - "ItemKitDynamicGenerator", - "ItemKitDynamicHydroponics", - "ItemKitDynamicLiquidCanister", - "ItemKitDynamicMKIILiquidCanister", - "ItemKitElectricUmbilical", - "ItemKitElectronicsPrinter", - "ItemKitElevator", - "ItemKitEngineLarge", - "ItemKitEngineMedium", - "ItemKitEngineSmall", - "ItemKitEvaporationChamber", - "ItemKitFlagODA", - "ItemKitFridgeBig", - "ItemKitFridgeSmall", - "ItemKitFurnace", - "ItemKitFurniture", - "ItemKitFuselage", - "ItemKitGasGenerator", - "ItemKitGasUmbilical", - "ItemKitGovernedGasRocketEngine", - "ItemKitGroundTelescope", - "ItemKitGrowLight", - "ItemKitHarvie", - "ItemKitHeatExchanger", - "ItemKitHorizontalAutoMiner", - "ItemKitHydraulicPipeBender", - "ItemKitHydroponicAutomated", - "ItemKitHydroponicStation", - "ItemKitIceCrusher", - "ItemKitInsulatedLiquidPipe", - "ItemKitInsulatedPipe", - "ItemKitInsulatedPipeUtility", - "ItemKitInsulatedPipeUtilityLiquid", - "ItemKitInteriorDoors", - "ItemKitLadder", - "ItemKitLandingPadAtmos", - "ItemKitLandingPadBasic", - "ItemKitLandingPadWaypoint", - "ItemKitLargeDirectHeatExchanger", - "ItemKitLargeExtendableRadiator", - "ItemKitLargeSatelliteDish", - "ItemKitLaunchMount", - "ItemKitLaunchTower", - "ItemKitLiquidRegulator", - "ItemKitLiquidTank", - "ItemKitLiquidTankInsulated", - "ItemKitLiquidTurboVolumePump", - "ItemKitLiquidUmbilical", - "ItemKitLocker", - "ItemKitLogicCircuit", - "ItemKitLogicInputOutput", - "ItemKitLogicMemory", - "ItemKitLogicProcessor", - "ItemKitLogicSwitch", - "ItemKitLogicTransmitter", - "ItemKitMotherShipCore", - "ItemKitMusicMachines", - "ItemKitPassiveLargeRadiatorGas", - "ItemKitPassiveLargeRadiatorLiquid", - "ItemKitPassthroughHeatExchanger", - "ItemKitPictureFrame", - "ItemKitPipe", - "ItemKitPipeLiquid", - "ItemKitPipeOrgan", - "ItemKitPipeRadiator", - "ItemKitPipeRadiatorLiquid", - "ItemKitPipeUtility", - "ItemKitPipeUtilityLiquid", - "ItemKitPlanter", - "ItemKitPortablesConnector", - "ItemKitPowerTransmitter", - "ItemKitPowerTransmitterOmni", - "ItemKitPoweredVent", - "ItemKitPressureFedGasEngine", - "ItemKitPressureFedLiquidEngine", - "ItemKitPressurePlate", - "ItemKitPumpedLiquidEngine", - "ItemKitRailing", - "ItemKitRecycler", - "ItemKitRegulator", - "ItemKitReinforcedWindows", - "ItemKitResearchMachine", - "ItemKitRespawnPointWallMounted", - "ItemKitRocketAvionics", - "ItemKitRocketBattery", - "ItemKitRocketCargoStorage", - "ItemKitRocketCelestialTracker", - "ItemKitRocketCircuitHousing", - "ItemKitRocketDatalink", - "ItemKitRocketGasFuelTank", - "ItemKitRocketLiquidFuelTank", - "ItemKitRocketManufactory", - "ItemKitRocketMiner", - "ItemKitRocketScanner", - "ItemKitRocketTransformerSmall", - "ItemKitRoverFrame", - "ItemKitRoverMKI", - "ItemKitSDBHopper", - "ItemKitSatelliteDish", - "ItemKitSecurityPrinter", - "ItemKitSensor", - "ItemKitShower", - "ItemKitSign", - "ItemKitSleeper", - "ItemKitSmallDirectHeatExchanger", - "ItemKitSmallSatelliteDish", - "ItemKitSolarPanel", - "ItemKitSolarPanelBasic", - "ItemKitSolarPanelBasicReinforced", - "ItemKitSolarPanelReinforced", - "ItemKitSolidGenerator", - "ItemKitSorter", - "ItemKitSpeaker", - "ItemKitStacker", - "ItemKitStairs", - "ItemKitStairwell", - "ItemKitStandardChute", - "ItemKitStirlingEngine", - "ItemKitSuitStorage", - "ItemKitTables", - "ItemKitTank", - "ItemKitTankInsulated", - "ItemKitToolManufactory", - "ItemKitTransformer", - "ItemKitTransformerSmall", - "ItemKitTurbineGenerator", - "ItemKitTurboVolumePump", - "ItemKitUprightWindTurbine", - "ItemKitVendingMachine", - "ItemKitVendingMachineRefrigerated", - "ItemKitWall", - "ItemKitWallArch", - "ItemKitWallFlat", - "ItemKitWallGeometry", - "ItemKitWallIron", - "ItemKitWallPadded", - "ItemKitWaterBottleFiller", - "ItemKitWaterPurifier", - "ItemKitWeatherStation", - "ItemKitWindTurbine", - "ItemKitWindowShutter", - "ItemLabeller", - "ItemLaptop", - "ItemLeadIngot", - "ItemLeadOre", - "ItemLightSword", - "ItemLiquidCanisterEmpty", - "ItemLiquidCanisterSmart", - "ItemLiquidDrain", - "ItemLiquidPipeAnalyzer", - "ItemLiquidPipeHeater", - "ItemLiquidPipeValve", - "ItemLiquidPipeVolumePump", - "ItemLiquidTankStorage", - "ItemMKIIAngleGrinder", - "ItemMKIIArcWelder", - "ItemMKIICrowbar", - "ItemMKIIDrill", - "ItemMKIIDuctTape", - "ItemMKIIMiningDrill", - "ItemMKIIScrewdriver", - "ItemMKIIWireCutters", - "ItemMKIIWrench", - "ItemMarineBodyArmor", - "ItemMarineHelmet", - "ItemMilk", - "ItemMiningBackPack", - "ItemMiningBelt", - "ItemMiningBeltMKII", - "ItemMiningCharge", - "ItemMiningDrill", - "ItemMiningDrillHeavy", - "ItemMiningDrillPneumatic", - "ItemMkIIToolbelt", - "ItemMuffin", - "ItemMushroom", - "ItemNVG", - "ItemNickelIngot", - "ItemNickelOre", - "ItemNitrice", - "ItemOxite", - "ItemPassiveVent", - "ItemPassiveVentInsulated", - "ItemPeaceLily", - "ItemPickaxe", - "ItemPillHeal", - "ItemPillStun", - "ItemPipeAnalyizer", - "ItemPipeCowl", - "ItemPipeDigitalValve", - "ItemPipeGasMixer", - "ItemPipeHeater", - "ItemPipeIgniter", - "ItemPipeLabel", - "ItemPipeLiquidRadiator", - "ItemPipeMeter", - "ItemPipeRadiator", - "ItemPipeValve", - "ItemPipeVolumePump", - "ItemPlainCake", - "ItemPlantEndothermic_Creative", - "ItemPlantEndothermic_Genepool1", - "ItemPlantEndothermic_Genepool2", - "ItemPlantSampler", - "ItemPlantSwitchGrass", - "ItemPlantThermogenic_Creative", - "ItemPlantThermogenic_Genepool1", - "ItemPlantThermogenic_Genepool2", - "ItemPlasticSheets", - "ItemPotato", - "ItemPotatoBaked", - "ItemPowerConnector", - "ItemPumpkin", - "ItemPumpkinPie", - "ItemPumpkinSoup", - "ItemPureIce", - "ItemPureIceCarbonDioxide", - "ItemPureIceHydrogen", - "ItemPureIceLiquidCarbonDioxide", - "ItemPureIceLiquidHydrogen", - "ItemPureIceLiquidNitrogen", - "ItemPureIceLiquidNitrous", - "ItemPureIceLiquidOxygen", - "ItemPureIceLiquidPollutant", - "ItemPureIceLiquidVolatiles", - "ItemPureIceNitrogen", - "ItemPureIceNitrous", - "ItemPureIceOxygen", - "ItemPureIcePollutant", - "ItemPureIcePollutedWater", - "ItemPureIceSteam", - "ItemPureIceVolatiles", - "ItemRTG", - "ItemRTGSurvival", - "ItemReagentMix", - "ItemRemoteDetonator", - "ItemReusableFireExtinguisher", - "ItemRice", - "ItemRoadFlare", - "ItemRocketMiningDrillHead", - "ItemRocketMiningDrillHeadDurable", - "ItemRocketMiningDrillHeadHighSpeedIce", - "ItemRocketMiningDrillHeadHighSpeedMineral", - "ItemRocketMiningDrillHeadIce", - "ItemRocketMiningDrillHeadLongTerm", - "ItemRocketMiningDrillHeadMineral", - "ItemRocketScanningHead", - "ItemScanner", - "ItemScrewdriver", - "ItemSecurityCamera", - "ItemSensorLenses", - "ItemSensorProcessingUnitCelestialScanner", - "ItemSensorProcessingUnitMesonScanner", - "ItemSensorProcessingUnitOreScanner", - "ItemSiliconIngot", - "ItemSiliconOre", - "ItemSilverIngot", - "ItemSilverOre", - "ItemSolderIngot", - "ItemSolidFuel", - "ItemSoundCartridgeBass", - "ItemSoundCartridgeDrums", - "ItemSoundCartridgeLeads", - "ItemSoundCartridgeSynth", - "ItemSoyOil", - "ItemSoybean", - "ItemSpaceCleaner", - "ItemSpaceHelmet", - "ItemSpaceIce", - "ItemSpaceOre", - "ItemSpacepack", - "ItemSprayCanBlack", - "ItemSprayCanBlue", - "ItemSprayCanBrown", - "ItemSprayCanGreen", - "ItemSprayCanGrey", - "ItemSprayCanKhaki", - "ItemSprayCanOrange", - "ItemSprayCanPink", - "ItemSprayCanPurple", - "ItemSprayCanRed", - "ItemSprayCanWhite", - "ItemSprayCanYellow", - "ItemSprayGun", - "ItemSteelFrames", - "ItemSteelIngot", - "ItemSteelSheets", - "ItemStelliteGlassSheets", - "ItemStelliteIngot", - "ItemSugar", - "ItemSugarCane", - "ItemSuitModCryogenicUpgrade", - "ItemTablet", - "ItemTerrainManipulator", - "ItemTomato", - "ItemTomatoSoup", - "ItemToolBelt", - "ItemTropicalPlant", - "ItemUraniumOre", - "ItemVolatiles", - "ItemWallCooler", - "ItemWallHeater", - "ItemWallLight", - "ItemWaspaloyIngot", - "ItemWaterBottle", - "ItemWaterPipeDigitalValve", - "ItemWaterPipeMeter", - "ItemWaterWallCooler", - "ItemWearLamp", - "ItemWeldingTorch", - "ItemWheat", - "ItemWireCutters", - "ItemWirelessBatteryCellExtraLarge", - "ItemWreckageAirConditioner1", - "ItemWreckageAirConditioner2", - "ItemWreckageHydroponicsTray1", - "ItemWreckageLargeExtendableRadiator01", - "ItemWreckageStructureRTG1", - "ItemWreckageStructureWeatherStation001", - "ItemWreckageStructureWeatherStation002", - "ItemWreckageStructureWeatherStation003", - "ItemWreckageStructureWeatherStation004", - "ItemWreckageStructureWeatherStation005", - "ItemWreckageStructureWeatherStation006", - "ItemWreckageStructureWeatherStation007", - "ItemWreckageStructureWeatherStation008", - "ItemWreckageTurbineGenerator1", - "ItemWreckageTurbineGenerator2", - "ItemWreckageTurbineGenerator3", - "ItemWreckageWallCooler1", - "ItemWreckageWallCooler2", - "ItemWrench", - "KitSDBSilo", - "KitStructureCombustionCentrifuge", - "Lander", - "Meteorite", - "MonsterEgg", - "MotherboardComms", - "MotherboardLogic", - "MotherboardMissionControl", - "MotherboardProgrammableChip", - "MotherboardRockets", - "MotherboardSorter", - "MothershipCore", - "NpcChick", - "NpcChicken", - "PipeBenderMod", - "PortableComposter", - "PortableSolarPanel", - "ReagentColorBlue", - "ReagentColorGreen", - "ReagentColorOrange", - "ReagentColorRed", - "ReagentColorYellow", - "Robot", - "RoverCargo", - "Rover_MkI", - "SMGMagazine", - "SeedBag_Cocoa", - "SeedBag_Corn", - "SeedBag_Fern", - "SeedBag_Mushroom", - "SeedBag_Potato", - "SeedBag_Pumpkin", - "SeedBag_Rice", - "SeedBag_Soybean", - "SeedBag_SugarCane", - "SeedBag_Switchgrass", - "SeedBag_Tomato", - "SeedBag_Wheet", - "SpaceShuttle", - "ToolPrinterMod", - "ToyLuna", - "UniformCommander", - "UniformMarine", - "UniformOrangeJumpSuit", - "WeaponEnergy", - "WeaponPistolEnergy", - "WeaponRifleEnergy", - "WeaponTorpedo" - ], - "logicableItems": [ - "Battery_Wireless_cell", - "Battery_Wireless_cell_Big", - "DynamicGPR", - "DynamicLight", - "ItemAdvancedTablet", - "ItemAngleGrinder", - "ItemArcWelder", - "ItemBatteryCell", - "ItemBatteryCellLarge", - "ItemBatteryCellNuclear", - "ItemBeacon", - "ItemDrill", - "ItemEmergencyAngleGrinder", - "ItemEmergencyArcWelder", - "ItemEmergencyDrill", - "ItemEmergencySpaceHelmet", - "ItemFlashlight", - "ItemHardBackpack", - "ItemHardJetpack", - "ItemHardSuit", - "ItemHardsuitHelmet", - "ItemIntegratedCircuit10", - "ItemJetpackBasic", - "ItemLabeller", - "ItemLaptop", - "ItemMKIIAngleGrinder", - "ItemMKIIArcWelder", - "ItemMKIIDrill", - "ItemMKIIMiningDrill", - "ItemMiningBeltMKII", - "ItemMiningDrill", - "ItemMiningDrillHeavy", - "ItemMkIIToolbelt", - "ItemNVG", - "ItemPlantSampler", - "ItemRemoteDetonator", - "ItemSensorLenses", - "ItemSpaceHelmet", - "ItemSpacepack", - "ItemTablet", - "ItemTerrainManipulator", - "ItemWearLamp", - "ItemWirelessBatteryCellExtraLarge", - "PortableSolarPanel", - "Robot", - "RoverCargo", - "Rover_MkI", - "WeaponEnergy", - "WeaponPistolEnergy", - "WeaponRifleEnergy" - ], - "suits": [ - "ItemEmergencyEvaSuit", - "ItemEvaSuit", - "ItemHardSuit" - ], - "circuitHolders": [ - "H2Combustor", - "ItemAdvancedTablet", - "ItemHardSuit", - "ItemLaptop", - "Robot", - "StructureAirConditioner", - "StructureCircuitHousing", - "StructureCombustionCentrifuge", - "StructureElectrolyzer", - "StructureFiltration", - "StructureNitrolyzer", - "StructureRocketCircuitHousing" - ] -} \ No newline at end of file diff --git a/ic10emu_wasm/Cargo.toml b/ic10emu_wasm/Cargo.toml index 5a0f233..8fd59bd 100644 --- a/ic10emu_wasm/Cargo.toml +++ b/ic10emu_wasm/Cargo.toml @@ -39,10 +39,6 @@ prefab_database = [ [lib] crate-type = ["cdylib", "rlib"] -[profile.release] -# Tell `rustc` to optimize for small code size. -opt-level = "s" - [package.metadata.wasm-pack.profile.dev] wasm-opt = ['-O'] diff --git a/ic10lsp_wasm/Cargo.toml b/ic10lsp_wasm/Cargo.toml index 6814c4e..a6ebbfc 100644 --- a/ic10lsp_wasm/Cargo.toml +++ b/ic10lsp_wasm/Cargo.toml @@ -28,10 +28,6 @@ wasm-streams = "0.4" ic10lsp = { git = "https://github.com/Ryex/ic10lsp.git", branch = "wasm" } # ic10lsp = { path = "../../ic10lsp" } -[profile.release] -# Tell `rustc` to optimize for small code size. -opt-level = "s" - [package.metadata.wasm-pack.profile.dev] wasm-opt = ['-O'] 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 index f37f96b..3cf93e7 100644 --- a/www/data/database.json +++ b/www/data/database.json @@ -1,46799 +1,62741 @@ { - "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" - ] + "prefabs": { + "AccessCardBlack": { + "prefab": { + "prefab_name": "AccessCardBlack", + "prefab_hash": -1330388999, + "desc": "", + "name": "Access Card (Black)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "AccessCard", + "sorting_class": "Default" + } + }, + "AccessCardBlue": { + "prefab": { + "prefab_name": "AccessCardBlue", + "prefab_hash": -1411327657, + "desc": "", + "name": "Access Card (Blue)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "AccessCard", + "sorting_class": "Default" + } + }, + "AccessCardBrown": { + "prefab": { + "prefab_name": "AccessCardBrown", + "prefab_hash": 1412428165, + "desc": "", + "name": "Access Card (Brown)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "AccessCard", + "sorting_class": "Default" + } + }, + "AccessCardGray": { + "prefab": { + "prefab_name": "AccessCardGray", + "prefab_hash": -1339479035, + "desc": "", + "name": "Access Card (Gray)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "AccessCard", + "sorting_class": "Default" + } + }, + "AccessCardGreen": { + "prefab": { + "prefab_name": "AccessCardGreen", + "prefab_hash": -374567952, + "desc": "", + "name": "Access Card (Green)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "AccessCard", + "sorting_class": "Default" + } + }, + "AccessCardKhaki": { + "prefab": { + "prefab_name": "AccessCardKhaki", + "prefab_hash": 337035771, + "desc": "", + "name": "Access Card (Khaki)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "AccessCard", + "sorting_class": "Default" + } + }, + "AccessCardOrange": { + "prefab": { + "prefab_name": "AccessCardOrange", + "prefab_hash": -332896929, + "desc": "", + "name": "Access Card (Orange)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "AccessCard", + "sorting_class": "Default" + } + }, + "AccessCardPink": { + "prefab": { + "prefab_name": "AccessCardPink", + "prefab_hash": 431317557, + "desc": "", + "name": "Access Card (Pink)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "AccessCard", + "sorting_class": "Default" + } + }, + "AccessCardPurple": { + "prefab": { + "prefab_name": "AccessCardPurple", + "prefab_hash": 459843265, + "desc": "", + "name": "Access Card (Purple)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "AccessCard", + "sorting_class": "Default" + } + }, + "AccessCardRed": { + "prefab": { + "prefab_name": "AccessCardRed", + "prefab_hash": -1713748313, + "desc": "", + "name": "Access Card (Red)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "AccessCard", + "sorting_class": "Default" + } + }, + "AccessCardWhite": { + "prefab": { + "prefab_name": "AccessCardWhite", + "prefab_hash": 2079959157, + "desc": "", + "name": "Access Card (White)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "AccessCard", + "sorting_class": "Default" + } + }, + "AccessCardYellow": { + "prefab": { + "prefab_name": "AccessCardYellow", + "prefab_hash": 568932536, + "desc": "", + "name": "Access Card (Yellow)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "AccessCard", + "sorting_class": "Default" + } + }, + "ApplianceChemistryStation": { + "prefab": { + "prefab_name": "ApplianceChemistryStation", + "prefab_hash": 1365789392, + "desc": "", + "name": "Chemistry Station" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "slots": [ + { + "name": "Output", + "typ": "None" + } + ], + "consumer_info": { + "consumed_resouces": [ + "ItemCharcoal", + "ItemCobaltOre", + "ItemFern", + "ItemSilverIngot", + "ItemSilverOre", + "ItemSoyOil" + ], + "processed_reagents": [] + } + }, + "ApplianceDeskLampLeft": { + "prefab": { + "prefab_name": "ApplianceDeskLampLeft", + "prefab_hash": -1683849799, + "desc": "", + "name": "Appliance Desk Lamp Left" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Appliance", + "sorting_class": "Appliances" + } + }, + "ApplianceDeskLampRight": { + "prefab": { + "prefab_name": "ApplianceDeskLampRight", + "prefab_hash": 1174360780, + "desc": "", + "name": "Appliance Desk Lamp Right" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Appliance", + "sorting_class": "Appliances" + } + }, + "ApplianceMicrowave": { + "prefab": { + "prefab_name": "ApplianceMicrowave", + "prefab_hash": -1136173965, + "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.", + "name": "Microwave" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "slots": [ + { + "name": "Output", + "typ": "None" + } + ], + "consumer_info": { + "consumed_resouces": [ + "ItemCorn", + "ItemEgg", + "ItemFertilizedEgg", + "ItemFlour", + "ItemMilk", + "ItemMushroom", + "ItemPotato", + "ItemPumpkin", + "ItemRice", + "ItemSoybean", + "ItemSoyOil", + "ItemTomato", + "ItemSugarCane", + "ItemCocoaTree", + "ItemCocoaPowder", + "ItemSugar" + ], + "processed_reagents": [] + } + }, + "AppliancePackagingMachine": { + "prefab": { + "prefab_name": "AppliancePackagingMachine", + "prefab_hash": -749191906, + "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 ", + "name": "Basic Packaging Machine" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "slots": [ + { + "name": "Export", + "typ": "None" + } + ], + "consumer_info": { + "consumed_resouces": [ + "ItemCookedCondensedMilk", + "ItemCookedCorn", + "ItemCookedMushroom", + "ItemCookedPowderedEggs", + "ItemCookedPumpkin", + "ItemCookedRice", + "ItemCookedSoybean", + "ItemCookedTomato", + "ItemEmptyCan", + "ItemMilk", + "ItemPotatoBaked", + "ItemSoyOil" + ], + "processed_reagents": [] + } + }, + "AppliancePaintMixer": { + "prefab": { + "prefab_name": "AppliancePaintMixer", + "prefab_hash": -1339716113, + "desc": "", + "name": "Paint Mixer" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "slots": [ + { + "name": "Output", + "typ": "Bottle" + } + ], + "consumer_info": { + "consumed_resouces": [ + "ItemSoyOil", + "ReagentColorBlue", + "ReagentColorGreen", + "ReagentColorOrange", + "ReagentColorRed", + "ReagentColorYellow" + ], + "processed_reagents": [] + } + }, + "AppliancePlantGeneticAnalyzer": { + "prefab": { + "prefab_name": "AppliancePlantGeneticAnalyzer", + "prefab_hash": -1303038067, + "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.", + "name": "Plant Genetic Analyzer" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "slots": [ + { + "name": "Input", + "typ": "Tool" + } + ] + }, + "AppliancePlantGeneticSplicer": { + "prefab": { + "prefab_name": "AppliancePlantGeneticSplicer", + "prefab_hash": -1094868323, + "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.", + "name": "Plant Genetic Splicer" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "slots": [ + { + "name": "Source Plant", + "typ": "Plant" + }, + { + "name": "Target Plant", + "typ": "Plant" + } + ] + }, + "AppliancePlantGeneticStabilizer": { + "prefab": { + "prefab_name": "AppliancePlantGeneticStabilizer", + "prefab_hash": 871432335, + "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 ", + "name": "Plant Genetic Stabilizer" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "slots": [ + { + "name": "Plant", + "typ": "Plant" + } + ] + }, + "ApplianceReagentProcessor": { + "prefab": { + "prefab_name": "ApplianceReagentProcessor", + "prefab_hash": 1260918085, + "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.", + "name": "Reagent Processor" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "slots": [ + { + "name": "Input", + "typ": "None" + }, + { + "name": "Output", + "typ": "None" + } + ], + "consumer_info": { + "consumed_resouces": [ + "ItemWheat", + "ItemSugarCane", + "ItemCocoaTree", + "ItemSoybean", + "ItemFlowerBlue", + "ItemFlowerGreen", + "ItemFlowerOrange", + "ItemFlowerRed", + "ItemFlowerYellow" + ], + "processed_reagents": [] + } + }, + "ApplianceSeedTray": { + "prefab": { + "prefab_name": "ApplianceSeedTray", + "prefab_hash": 142831994, + "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.", + "name": "Appliance Seed Tray" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "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" + } + ] + }, + "ApplianceTabletDock": { + "prefab": { + "prefab_name": "ApplianceTabletDock", + "prefab_hash": 1853941363, + "desc": "", + "name": "Tablet Dock" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Appliance", + "sorting_class": "Appliances" + }, + "slots": [ + { + "name": "", + "typ": "Tool" + } + ] + }, + "AutolathePrinterMod": { + "prefab": { + "prefab_name": "AutolathePrinterMod", + "prefab_hash": 221058307, + "desc": "Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", + "name": "Autolathe Printer Mod" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "Battery_Wireless_cell": { + "prefab": { + "prefab_name": "Battery_Wireless_cell", + "prefab_hash": -462415758, + "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", + "name": "Battery Wireless Cell" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Battery", + "sorting_class": "Default" + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Mode": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "Battery_Wireless_cell_Big": { + "prefab": { + "prefab_name": "Battery_Wireless_cell_Big", + "prefab_hash": -41519077, + "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", + "name": "Battery Wireless Cell (Big)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Battery", + "sorting_class": "Default" + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Mode": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "CardboardBox": { + "prefab": { + "prefab_name": "CardboardBox", + "prefab_hash": -1976947556, + "desc": "", + "name": "Cardboard Box" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Storage" + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, + "CartridgeAccessController": { + "prefab": { + "prefab_name": "CartridgeAccessController", + "prefab_hash": -1634532552, + "desc": "", + "name": "Cartridge (Access Controller)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Cartridge", + "sorting_class": "Default" + } + }, + "CartridgeAtmosAnalyser": { + "prefab": { + "prefab_name": "CartridgeAtmosAnalyser", + "prefab_hash": -1550278665, + "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.", + "name": "Atmos Analyzer" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Cartridge", + "sorting_class": "Default" + } + }, + "CartridgeConfiguration": { + "prefab": { + "prefab_name": "CartridgeConfiguration", + "prefab_hash": -932136011, + "desc": "", + "name": "Configuration" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Cartridge", + "sorting_class": "Default" + } + }, + "CartridgeElectronicReader": { + "prefab": { + "prefab_name": "CartridgeElectronicReader", + "prefab_hash": -1462180176, + "desc": "", + "name": "eReader" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Cartridge", + "sorting_class": "Default" + } + }, + "CartridgeGPS": { + "prefab": { + "prefab_name": "CartridgeGPS", + "prefab_hash": -1957063345, + "desc": "", + "name": "GPS" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Cartridge", + "sorting_class": "Default" + } + }, + "CartridgeGuide": { + "prefab": { + "prefab_name": "CartridgeGuide", + "prefab_hash": 872720793, + "desc": "", + "name": "Guide" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Cartridge", + "sorting_class": "Default" + } + }, + "CartridgeMedicalAnalyser": { + "prefab": { + "prefab_name": "CartridgeMedicalAnalyser", + "prefab_hash": -1116110181, + "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.", + "name": "Medical Analyzer" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Cartridge", + "sorting_class": "Default" + } + }, + "CartridgeNetworkAnalyser": { + "prefab": { + "prefab_name": "CartridgeNetworkAnalyser", + "prefab_hash": 1606989119, + "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.", + "name": "Network Analyzer" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Cartridge", + "sorting_class": "Default" + } + }, + "CartridgeOreScanner": { + "prefab": { + "prefab_name": "CartridgeOreScanner", + "prefab_hash": -1768732546, + "desc": "When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet.", + "name": "Ore Scanner" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Cartridge", + "sorting_class": "Default" + } + }, + "CartridgeOreScannerColor": { + "prefab": { + "prefab_name": "CartridgeOreScannerColor", + "prefab_hash": 1738236580, + "desc": "When inserted into a Handheld Tablet the scanner will display minerals hidden underground in different colors on the tablet.", + "name": "Ore Scanner (Color)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Cartridge", + "sorting_class": "Default" + } + }, + "CartridgePlantAnalyser": { + "prefab": { + "prefab_name": "CartridgePlantAnalyser", + "prefab_hash": 1101328282, + "desc": "", + "name": "Cartridge Plant Analyser" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Cartridge", + "sorting_class": "Default" + } + }, + "CartridgeTracker": { + "prefab": { + "prefab_name": "CartridgeTracker", + "prefab_hash": 81488783, + "desc": "", + "name": "Tracker" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Cartridge", + "sorting_class": "Default" + } + }, + "CircuitboardAdvAirlockControl": { + "prefab": { + "prefab_name": "CircuitboardAdvAirlockControl", + "prefab_hash": 1633663176, + "desc": "", + "name": "Advanced Airlock" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Circuitboard", + "sorting_class": "Default" + } + }, + "CircuitboardAirControl": { + "prefab": { + "prefab_name": "CircuitboardAirControl", + "prefab_hash": 1618019559, + "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. ", + "name": "Air Control" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Circuitboard", + "sorting_class": "Default" + } + }, + "CircuitboardAirlockControl": { + "prefab": { + "prefab_name": "CircuitboardAirlockControl", + "prefab_hash": 912176135, + "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.", + "name": "Airlock" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Circuitboard", + "sorting_class": "Default" + } + }, + "CircuitboardCameraDisplay": { + "prefab": { + "prefab_name": "CircuitboardCameraDisplay", + "prefab_hash": -412104504, + "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.", + "name": "Camera Display" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Circuitboard", + "sorting_class": "Default" + } + }, + "CircuitboardDoorControl": { + "prefab": { + "prefab_name": "CircuitboardDoorControl", + "prefab_hash": 855694771, + "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.", + "name": "Door Control" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Circuitboard", + "sorting_class": "Default" + } + }, + "CircuitboardGasDisplay": { + "prefab": { + "prefab_name": "CircuitboardGasDisplay", + "prefab_hash": -82343730, + "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).", + "name": "Gas Display" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Circuitboard", + "sorting_class": "Default" + } + }, + "CircuitboardGraphDisplay": { + "prefab": { + "prefab_name": "CircuitboardGraphDisplay", + "prefab_hash": 1344368806, + "desc": "", + "name": "Graph Display" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Circuitboard", + "sorting_class": "Default" + } + }, + "CircuitboardHashDisplay": { + "prefab": { + "prefab_name": "CircuitboardHashDisplay", + "prefab_hash": 1633074601, + "desc": "", + "name": "Hash Display" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Circuitboard", + "sorting_class": "Default" + } + }, + "CircuitboardModeControl": { + "prefab": { + "prefab_name": "CircuitboardModeControl", + "prefab_hash": -1134148135, + "desc": "Can't decide which mode you love most? This circuit board allows you to switch any connected device between operation modes.", + "name": "Mode Control" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Circuitboard", + "sorting_class": "Default" + } + }, + "CircuitboardPowerControl": { + "prefab": { + "prefab_name": "CircuitboardPowerControl", + "prefab_hash": -1923778429, + "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. ", + "name": "Power Control" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Circuitboard", + "sorting_class": "Default" + } + }, + "CircuitboardShipDisplay": { + "prefab": { + "prefab_name": "CircuitboardShipDisplay", + "prefab_hash": -2044446819, + "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.", + "name": "Ship Display" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Circuitboard", + "sorting_class": "Default" + } + }, + "CircuitboardSolarControl": { + "prefab": { + "prefab_name": "CircuitboardSolarControl", + "prefab_hash": 2020180320, + "desc": "Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel.", + "name": "Solar Control" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Circuitboard", + "sorting_class": "Default" + } + }, + "CompositeRollCover": { + "prefab": { + "prefab_name": "CompositeRollCover", + "prefab_hash": 1228794916, + "desc": "0.Operate\n1.Logic", + "name": "Composite Roll Cover" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "CrateMkII": { + "prefab": { + "prefab_name": "CrateMkII", + "prefab_hash": 8709219, + "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.", + "name": "Crate Mk II" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Storage" + }, + "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" + } + ] + }, + "DecayedFood": { + "prefab": { + "prefab_name": "DecayedFood", + "prefab_hash": 1531087544, + "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", + "name": "Decayed Food" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 25, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "DeviceLfoVolume": { + "prefab": { + "prefab_name": "DeviceLfoVolume", + "prefab_hash": -1844430312, + "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.", + "name": "Low frequency oscillator" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "Time": "ReadWrite", + "Bpm": "ReadWrite", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Whole Note", + "1": "Half Note", + "2": "Quarter Note", + "3": "Eighth Note", + "4": "Sixteenth Note" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "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 + } + }, + "DeviceStepUnit": { + "prefab": { + "prefab_name": "DeviceStepUnit", + "prefab_hash": 1762696475, + "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", + "name": "Device Step Unit" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Volume": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "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" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "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 + } + }, + "DynamicAirConditioner": { + "prefab": { + "prefab_name": "DynamicAirConditioner", + "prefab_hash": 519913639, + "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.", + "name": "Portable Air Conditioner" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "DynamicCrate": { + "prefab": { + "prefab_name": "DynamicCrate", + "prefab_hash": 1941079206, + "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.", + "name": "Dynamic Crate" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Storage" + }, + "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" + } + ] + }, + "DynamicGPR": { + "prefab": { + "prefab_name": "DynamicGPR", + "prefab_hash": -2085885850, + "desc": "", + "name": "" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "DynamicGasCanisterAir": { + "prefab": { + "prefab_name": "DynamicGasCanisterAir", + "prefab_hash": -1713611165, + "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.", + "name": "Portable Gas Tank (Air)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterCarbonDioxide": { + "prefab": { + "prefab_name": "DynamicGasCanisterCarbonDioxide", + "prefab_hash": -322413931, + "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.", + "name": "Portable Gas Tank (CO2)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterEmpty": { + "prefab": { + "prefab_name": "DynamicGasCanisterEmpty", + "prefab_hash": -1741267161, + "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.", + "name": "Portable Gas Tank" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterFuel": { + "prefab": { + "prefab_name": "DynamicGasCanisterFuel", + "prefab_hash": -817051527, + "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.", + "name": "Portable Gas Tank (Fuel)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterNitrogen": { + "prefab": { + "prefab_name": "DynamicGasCanisterNitrogen", + "prefab_hash": 121951301, + "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.", + "name": "Portable Gas Tank (Nitrogen)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterNitrousOxide": { + "prefab": { + "prefab_name": "DynamicGasCanisterNitrousOxide", + "prefab_hash": 30727200, + "desc": "", + "name": "Portable Gas Tank (Nitrous Oxide)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterOxygen": { + "prefab": { + "prefab_name": "DynamicGasCanisterOxygen", + "prefab_hash": 1360925836, + "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.", + "name": "Portable Gas Tank (Oxygen)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterPollutants": { + "prefab": { + "prefab_name": "DynamicGasCanisterPollutants", + "prefab_hash": 396065382, + "desc": "", + "name": "Portable Gas Tank (Pollutants)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterRocketFuel": { + "prefab": { + "prefab_name": "DynamicGasCanisterRocketFuel", + "prefab_hash": -8883951, + "desc": "", + "name": "Dynamic Gas Canister Rocket Fuel" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterVolatiles": { + "prefab": { + "prefab_name": "DynamicGasCanisterVolatiles", + "prefab_hash": 108086870, + "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.", + "name": "Portable Gas Tank (Volatiles)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasCanisterWater": { + "prefab": { + "prefab_name": "DynamicGasCanisterWater", + "prefab_hash": 197293625, + "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.", + "name": "Portable Liquid Tank (Water)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "LiquidCanister" + } + ] + }, + "DynamicGasTankAdvanced": { + "prefab": { + "prefab_name": "DynamicGasTankAdvanced", + "prefab_hash": -386375420, + "desc": "0.Mode0\n1.Mode1", + "name": "Gas Tank Mk II" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGasTankAdvancedOxygen": { + "prefab": { + "prefab_name": "DynamicGasTankAdvancedOxygen", + "prefab_hash": -1264455519, + "desc": "0.Mode0\n1.Mode1", + "name": "Portable Gas Tank Mk II (Oxygen)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "None" + } + ] + }, + "DynamicGenerator": { + "prefab": { + "prefab_name": "DynamicGenerator", + "prefab_hash": -82087220, + "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.", + "name": "Portable Generator" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "GasCanister" + }, + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "DynamicHydroponics": { + "prefab": { + "prefab_name": "DynamicHydroponics", + "prefab_hash": 587726607, + "desc": "", + "name": "Portable Hydroponics" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "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" + } + ] + }, + "DynamicLight": { + "prefab": { + "prefab_name": "DynamicLight", + "prefab_hash": -21970188, + "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.", + "name": "Portable Light" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Lock": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "DynamicLiquidCanisterEmpty": { + "prefab": { + "prefab_name": "DynamicLiquidCanisterEmpty", + "prefab_hash": -1939209112, + "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.", + "name": "Portable Liquid Tank" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.025, + "radiation_factor": 0.025 + }, + "slots": [ + { + "name": "Liquid Canister", + "typ": "LiquidCanister" + } + ] + }, + "DynamicMKIILiquidCanisterEmpty": { + "prefab": { + "prefab_name": "DynamicMKIILiquidCanisterEmpty", + "prefab_hash": 2130739600, + "desc": "An empty, insulated liquid Gas Canister.", + "name": "Portable Liquid Tank Mk II" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "slots": [ + { + "name": "Liquid Canister", + "typ": "LiquidCanister" + } + ] + }, + "DynamicMKIILiquidCanisterWater": { + "prefab": { + "prefab_name": "DynamicMKIILiquidCanisterWater", + "prefab_hash": -319510386, + "desc": "An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature.", + "name": "Portable Liquid Tank Mk II (Water)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "slots": [ + { + "name": "Liquid Canister", + "typ": "LiquidCanister" + } + ] + }, + "DynamicScrubber": { + "prefab": { + "prefab_name": "DynamicScrubber", + "prefab_hash": 755048589, + "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.", + "name": "Portable Air Scrubber" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Gas Filter", + "typ": "GasFilter" + }, + { + "name": "Gas Filter", + "typ": "GasFilter" + } + ] + }, + "DynamicSkeleton": { + "prefab": { + "prefab_name": "DynamicSkeleton", + "prefab_hash": 106953348, + "desc": "", + "name": "Skeleton" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ElectronicPrinterMod": { + "prefab": { + "prefab_name": "ElectronicPrinterMod", + "prefab_hash": -311170652, + "desc": "Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", + "name": "Electronic Printer Mod" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ElevatorCarrage": { + "prefab": { + "prefab_name": "ElevatorCarrage", + "prefab_hash": -110788403, + "desc": "", + "name": "Elevator" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "EntityChick": { + "prefab": { + "prefab_name": "EntityChick", + "prefab_hash": 1730165908, + "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.", + "name": "Entity Chick" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "slots": [ + { + "name": "Brain", + "typ": "Organ" + } + ] + }, + "EntityChickenBrown": { + "prefab": { + "prefab_name": "EntityChickenBrown", + "prefab_hash": 334097180, + "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.", + "name": "Entity Chicken Brown" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "slots": [ + { + "name": "Brain", + "typ": "Organ" + } + ] + }, + "EntityChickenWhite": { + "prefab": { + "prefab_name": "EntityChickenWhite", + "prefab_hash": 1010807532, + "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.", + "name": "Entity Chicken White" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "slots": [ + { + "name": "Brain", + "typ": "Organ" + } + ] + }, + "EntityRoosterBlack": { + "prefab": { + "prefab_name": "EntityRoosterBlack", + "prefab_hash": 966959649, + "desc": "This is a rooster. It is black. There is dignity in this.", + "name": "Entity Rooster Black" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "slots": [ + { + "name": "Brain", + "typ": "Organ" + } + ] + }, + "EntityRoosterBrown": { + "prefab": { + "prefab_name": "EntityRoosterBrown", + "prefab_hash": -583103395, + "desc": "The common brown rooster. Don't let it hear you say that.", + "name": "Entity Rooster Brown" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "slots": [ + { + "name": "Brain", + "typ": "Organ" + } + ] + }, + "Fertilizer": { + "prefab": { + "prefab_name": "Fertilizer", + "prefab_hash": 1517856652, + "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. ", + "name": "Fertilizer" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Default" + } + }, + "FireArmSMG": { + "prefab": { + "prefab_name": "FireArmSMG", + "prefab_hash": -86315541, + "desc": "0.Single\n1.Auto", + "name": "Fire Arm SMG" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Tools" + }, + "slots": [ + { + "name": "", + "typ": "Magazine" + } + ] + }, + "Flag_ODA_10m": { + "prefab": { + "prefab_name": "Flag_ODA_10m", + "prefab_hash": 1845441951, + "desc": "", + "name": "Flag (ODA 10m)" + }, + "structure": { + "small_grid": true + } + }, + "Flag_ODA_4m": { + "prefab": { + "prefab_name": "Flag_ODA_4m", + "prefab_hash": 1159126354, + "desc": "", + "name": "Flag (ODA 4m)" + }, + "structure": { + "small_grid": true + } + }, + "Flag_ODA_6m": { + "prefab": { + "prefab_name": "Flag_ODA_6m", + "prefab_hash": 1998634960, + "desc": "", + "name": "Flag (ODA 6m)" + }, + "structure": { + "small_grid": true + } + }, + "Flag_ODA_8m": { + "prefab": { + "prefab_name": "Flag_ODA_8m", + "prefab_hash": -375156130, + "desc": "", + "name": "Flag (ODA 8m)" + }, + "structure": { + "small_grid": true + } + }, + "FlareGun": { + "prefab": { + "prefab_name": "FlareGun", + "prefab_hash": 118685786, + "desc": "", + "name": "Flare Gun" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "slots": [ + { + "name": "Magazine", + "typ": "Flare" + }, + { + "name": "", + "typ": "Blocked" + } + ] + }, + "H2Combustor": { + "prefab": { + "prefab_name": "H2Combustor", + "prefab_hash": 1840108251, + "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.", + "name": "H2 Combustor" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "RatioLiquidNitrogenInput": "Read", + "RatioLiquidNitrogenOutput": "Read", + "RatioLiquidOxygen": "Read", + "RatioLiquidOxygenInput": "Read", + "RatioLiquidOxygenOutput": "Read", + "RatioLiquidVolatiles": "Read", + "RatioLiquidVolatilesInput": "Read", + "RatioLiquidVolatilesOutput": "Read", + "RatioSteam": "Read", + "RatioSteamInput": "Read", + "RatioSteamOutput": "Read", + "RatioLiquidCarbonDioxide": "Read", + "RatioLiquidCarbonDioxideInput": "Read", + "RatioLiquidCarbonDioxideOutput": "Read", + "RatioLiquidPollutant": "Read", + "RatioLiquidPollutantInput": "Read", + "RatioLiquidPollutantOutput": "Read", + "RatioLiquidNitrousOxide": "Read", + "RatioLiquidNitrousOxideInput": "Read", + "RatioLiquidNitrousOxideOutput": "Read", + "ReferenceId": "Read", + "RatioHydrogen": "Read", + "RatioLiquidHydrogen": "Read", + "RatioPollutedWater": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Idle", + "1": "Active" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": true + }, + "slots": [ + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": 2, + "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 + } + }, + "Handgun": { + "prefab": { + "prefab_name": "Handgun", + "prefab_hash": 247238062, + "desc": "", + "name": "Handgun" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Tools" + }, + "slots": [ + { + "name": "Magazine", + "typ": "Magazine" + } + ] + }, + "HandgunMagazine": { + "prefab": { + "prefab_name": "HandgunMagazine", + "prefab_hash": 1254383185, + "desc": "", + "name": "Handgun Magazine" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Magazine", + "sorting_class": "Default" + } + }, + "HumanSkull": { + "prefab": { + "prefab_name": "HumanSkull", + "prefab_hash": -857713709, + "desc": "", + "name": "Human Skull" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ImGuiCircuitboardAirlockControl": { + "prefab": { + "prefab_name": "ImGuiCircuitboardAirlockControl", + "prefab_hash": -73796547, + "desc": "", + "name": "Airlock (Experimental)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Circuitboard", + "sorting_class": "Default" + } + }, + "ItemActiveVent": { + "prefab": { + "prefab_name": "ItemActiveVent", + "prefab_hash": -842048328, + "desc": "When constructed, this kit places an Active Vent on any support structure.", + "name": "Kit (Active Vent)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemAdhesiveInsulation": { + "prefab": { + "prefab_name": "ItemAdhesiveInsulation", + "prefab_hash": 1871048978, + "desc": "", + "name": "Adhesive Insulation" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 20, + "slot_class": "Tool", + "sorting_class": "Tools" + } + }, + "ItemAdvancedTablet": { + "prefab": { + "prefab_name": "ItemAdvancedTablet", + "prefab_hash": 1722785341, + "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", + "name": "Advanced Tablet" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "logic": { + "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" + }, + "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" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "On": "ReadWrite", + "Volume": "ReadWrite", + "SoundAlert": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": true, + "circuit_holder": true + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Cartridge", + "typ": "Cartridge" + }, + { + "name": "Cartridge1", + "typ": "Cartridge" + }, + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + } + ] + }, + "ItemAlienMushroom": { + "prefab": { + "prefab_name": "ItemAlienMushroom", + "prefab_hash": 176446172, + "desc": "", + "name": "Alien Mushroom" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Default" + } + }, + "ItemAmmoBox": { + "prefab": { + "prefab_name": "ItemAmmoBox", + "prefab_hash": -9559091, + "desc": "", + "name": "Ammo Box" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemAngleGrinder": { + "prefab": { + "prefab_name": "ItemAngleGrinder", + "prefab_hash": 201215010, + "desc": "Angles-be-gone with the trusty angle grinder.", + "name": "Angle Grinder" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemArcWelder": { + "prefab": { + "prefab_name": "ItemArcWelder", + "prefab_hash": 1385062886, + "desc": "", + "name": "Arc Welder" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemAreaPowerControl": { + "prefab": { + "prefab_name": "ItemAreaPowerControl", + "prefab_hash": 1757673317, + "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.", + "name": "Kit (Power Controller)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemAstroloyIngot": { + "prefab": { + "prefab_name": "ItemAstroloyIngot", + "prefab_hash": 412924554, + "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.", + "name": "Ingot (Astroloy)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Astroloy": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + } + }, + "ItemAstroloySheets": { + "prefab": { + "prefab_name": "ItemAstroloySheets", + "prefab_hash": -1662476145, + "desc": "", + "name": "Astroloy Sheets" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "None", + "sorting_class": "Resources" + } + }, + "ItemAuthoringTool": { + "prefab": { + "prefab_name": "ItemAuthoringTool", + "prefab_hash": 789015045, + "desc": "", + "name": "Authoring Tool" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + } + }, + "ItemAuthoringToolRocketNetwork": { + "prefab": { + "prefab_name": "ItemAuthoringToolRocketNetwork", + "prefab_hash": -1731627004, + "desc": "", + "name": "" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + } + }, + "ItemBasketBall": { + "prefab": { + "prefab_name": "ItemBasketBall", + "prefab_hash": -1262580790, + "desc": "", + "name": "Basket Ball" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemBatteryCell": { + "prefab": { + "prefab_name": "ItemBatteryCell", + "prefab_hash": 700133157, + "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.", + "name": "Battery Cell (Small)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Battery", + "sorting_class": "Default" + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Mode": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "ItemBatteryCellLarge": { + "prefab": { + "prefab_name": "ItemBatteryCellLarge", + "prefab_hash": -459827268, + "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", + "name": "Battery Cell (Large)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Battery", + "sorting_class": "Default" + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Mode": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "ItemBatteryCellNuclear": { + "prefab": { + "prefab_name": "ItemBatteryCellNuclear", + "prefab_hash": 544617306, + "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.", + "name": "Battery Cell (Nuclear)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Battery", + "sorting_class": "Default" + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Mode": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "ItemBatteryCharger": { + "prefab": { + "prefab_name": "ItemBatteryCharger", + "prefab_hash": -1866880307, + "desc": "This kit produces a 5-slot Kit (Battery Charger).", + "name": "Kit (Battery Charger)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemBatteryChargerSmall": { + "prefab": { + "prefab_name": "ItemBatteryChargerSmall", + "prefab_hash": 1008295833, + "desc": "", + "name": "Battery Charger Small" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemBeacon": { + "prefab": { + "prefab_name": "ItemBeacon", + "prefab_hash": -869869491, + "desc": "", + "name": "Tracking Beacon" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemBiomass": { + "prefab": { + "prefab_name": "ItemBiomass", + "prefab_hash": -831480639, + "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).", + "name": "Biomass" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "Biomass": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Resources" + } + }, + "ItemBreadLoaf": { + "prefab": { + "prefab_name": "ItemBreadLoaf", + "prefab_hash": 893514943, + "desc": "", + "name": "Bread Loaf" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemCableAnalyser": { + "prefab": { + "prefab_name": "ItemCableAnalyser", + "prefab_hash": -1792787349, + "desc": "", + "name": "Kit (Cable Analyzer)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemCableCoil": { + "prefab": { + "prefab_name": "ItemCableCoil", + "prefab_hash": -466050668, + "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).", + "name": "Cable Coil" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Tool", + "sorting_class": "Resources" + } + }, + "ItemCableCoilHeavy": { + "prefab": { + "prefab_name": "ItemCableCoilHeavy", + "prefab_hash": 2060134443, + "desc": "Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW.", + "name": "Cable Coil (Heavy)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Tool", + "sorting_class": "Resources" + } + }, + "ItemCableFuse": { + "prefab": { + "prefab_name": "ItemCableFuse", + "prefab_hash": 195442047, + "desc": "", + "name": "Kit (Cable Fuses)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Resources" + } + }, + "ItemCannedCondensedMilk": { + "prefab": { + "prefab_name": "ItemCannedCondensedMilk", + "prefab_hash": -2104175091, + "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.", + "name": "Canned Condensed Milk" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemCannedEdamame": { + "prefab": { + "prefab_name": "ItemCannedEdamame", + "prefab_hash": -999714082, + "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.", + "name": "Canned Edamame" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemCannedMushroom": { + "prefab": { + "prefab_name": "ItemCannedMushroom", + "prefab_hash": -1344601965, + "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.", + "name": "Canned Mushroom" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemCannedPowderedEggs": { + "prefab": { + "prefab_name": "ItemCannedPowderedEggs", + "prefab_hash": 1161510063, + "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.", + "name": "Canned Powdered Eggs" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemCannedRicePudding": { + "prefab": { + "prefab_name": "ItemCannedRicePudding", + "prefab_hash": -1185552595, + "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.", + "name": "Canned Rice Pudding" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemCerealBar": { + "prefab": { + "prefab_name": "ItemCerealBar", + "prefab_hash": 791746840, + "desc": "Sustains, without decay. If only all our relationships were so well balanced.", + "name": "Cereal Bar" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemCharcoal": { + "prefab": { + "prefab_name": "ItemCharcoal", + "prefab_hash": 252561409, + "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.", + "name": "Charcoal" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 200, + "reagents": { + "Carbon": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + } + }, + "ItemChemLightBlue": { + "prefab": { + "prefab_name": "ItemChemLightBlue", + "prefab_hash": -772542081, + "desc": "A safe and slightly rave-some source of blue light. Snap to activate.", + "name": "Chem Light (Blue)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemChemLightGreen": { + "prefab": { + "prefab_name": "ItemChemLightGreen", + "prefab_hash": -597479390, + "desc": "Enliven the dreariest, airless rock with this glowy green light. Snap to activate.", + "name": "Chem Light (Green)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemChemLightRed": { + "prefab": { + "prefab_name": "ItemChemLightRed", + "prefab_hash": -525810132, + "desc": "A red glowstick. Snap to activate. Then reach for the lasers.", + "name": "Chem Light (Red)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemChemLightWhite": { + "prefab": { + "prefab_name": "ItemChemLightWhite", + "prefab_hash": 1312166823, + "desc": "Snap the glowstick to activate a pale radiance that keeps the darkness at bay.", + "name": "Chem Light (White)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemChemLightYellow": { + "prefab": { + "prefab_name": "ItemChemLightYellow", + "prefab_hash": 1224819963, + "desc": "Dispel the darkness with this yellow glowstick.", + "name": "Chem Light (Yellow)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemChocolateBar": { + "prefab": { + "prefab_name": "ItemChocolateBar", + "prefab_hash": 234601764, + "desc": "", + "name": "Chocolate Bar" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemChocolateCake": { + "prefab": { + "prefab_name": "ItemChocolateCake", + "prefab_hash": -261575861, + "desc": "", + "name": "Chocolate Cake" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemChocolateCerealBar": { + "prefab": { + "prefab_name": "ItemChocolateCerealBar", + "prefab_hash": 860793245, + "desc": "", + "name": "Chocolate Cereal Bar" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemCoalOre": { + "prefab": { + "prefab_name": "ItemCoalOre", + "prefab_hash": 1724793494, + "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).", + "name": "Ore (Coal)" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Hydrocarbon": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + } + }, + "ItemCobaltOre": { + "prefab": { + "prefab_name": "ItemCobaltOre", + "prefab_hash": -983091249, + "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.", + "name": "Ore (Cobalt)" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Cobalt": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + } + }, + "ItemCocoaPowder": { + "prefab": { + "prefab_name": "ItemCocoaPowder", + "prefab_hash": 457286516, + "desc": "", + "name": "Cocoa Powder" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 20, + "reagents": { + "Cocoa": 1.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + } + }, + "ItemCocoaTree": { + "prefab": { + "prefab_name": "ItemCocoaTree", + "prefab_hash": 680051921, + "desc": "", + "name": "Cocoa" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 20, + "reagents": { + "Cocoa": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemCoffeeMug": { + "prefab": { + "prefab_name": "ItemCoffeeMug", + "prefab_hash": 1800622698, + "desc": "", + "name": "Coffee Mug" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemConstantanIngot": { + "prefab": { + "prefab_name": "ItemConstantanIngot", + "prefab_hash": 1058547521, + "desc": "", + "name": "Ingot (Constantan)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Constantan": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + } + }, + "ItemCookedCondensedMilk": { + "prefab": { + "prefab_name": "ItemCookedCondensedMilk", + "prefab_hash": 1715917521, + "desc": "A high-nutrient cooked food, which can be canned.", + "name": "Condensed Milk" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 10, + "reagents": { + "Milk": 100.0 + }, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemCookedCorn": { + "prefab": { + "prefab_name": "ItemCookedCorn", + "prefab_hash": 1344773148, + "desc": "A high-nutrient cooked food, which can be canned.", + "name": "Cooked Corn" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 10, + "reagents": { + "Corn": 1.0 + }, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemCookedMushroom": { + "prefab": { + "prefab_name": "ItemCookedMushroom", + "prefab_hash": -1076892658, + "desc": "A high-nutrient cooked food, which can be canned.", + "name": "Cooked Mushroom" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 10, + "reagents": { + "Mushroom": 1.0 + }, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemCookedPowderedEggs": { + "prefab": { + "prefab_name": "ItemCookedPowderedEggs", + "prefab_hash": -1712264413, + "desc": "A high-nutrient cooked food, which can be canned.", + "name": "Powdered Eggs" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 10, + "reagents": { + "Egg": 1.0 + }, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemCookedPumpkin": { + "prefab": { + "prefab_name": "ItemCookedPumpkin", + "prefab_hash": 1849281546, + "desc": "A high-nutrient cooked food, which can be canned.", + "name": "Cooked Pumpkin" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 10, + "reagents": { + "Pumpkin": 1.0 + }, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemCookedRice": { + "prefab": { + "prefab_name": "ItemCookedRice", + "prefab_hash": 2013539020, + "desc": "A high-nutrient cooked food, which can be canned.", + "name": "Cooked Rice" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 10, + "reagents": { + "Rice": 1.0 + }, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemCookedSoybean": { + "prefab": { + "prefab_name": "ItemCookedSoybean", + "prefab_hash": 1353449022, + "desc": "A high-nutrient cooked food, which can be canned.", + "name": "Cooked Soybean" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 10, + "reagents": { + "Soy": 5.0 + }, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemCookedTomato": { + "prefab": { + "prefab_name": "ItemCookedTomato", + "prefab_hash": -709086714, + "desc": "A high-nutrient cooked food, which can be canned.", + "name": "Cooked Tomato" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 10, + "reagents": { + "Tomato": 1.0 + }, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemCopperIngot": { + "prefab": { + "prefab_name": "ItemCopperIngot", + "prefab_hash": -404336834, + "desc": "Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items.", + "name": "Ingot (Copper)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Copper": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + } + }, + "ItemCopperOre": { + "prefab": { + "prefab_name": "ItemCopperOre", + "prefab_hash": -707307845, + "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.", + "name": "Ore (Copper)" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Copper": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + } + }, + "ItemCorn": { + "prefab": { + "prefab_name": "ItemCorn", + "prefab_hash": 258339687, + "desc": "A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light.", + "name": "Corn" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 20, + "reagents": { + "Corn": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemCornSoup": { + "prefab": { + "prefab_name": "ItemCornSoup", + "prefab_hash": 545034114, + "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.", + "name": "Corn Soup" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemCreditCard": { + "prefab": { + "prefab_name": "ItemCreditCard", + "prefab_hash": -1756772618, + "desc": "", + "name": "Credit Card" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 100000, + "slot_class": "CreditCard", + "sorting_class": "Tools" + } + }, + "ItemCropHay": { + "prefab": { + "prefab_name": "ItemCropHay", + "prefab_hash": 215486157, + "desc": "", + "name": "Hay" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 100, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemCrowbar": { + "prefab": { + "prefab_name": "ItemCrowbar", + "prefab_hash": 856108234, + "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.", + "name": "Crowbar" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + } + }, + "ItemDataDisk": { + "prefab": { + "prefab_name": "ItemDataDisk", + "prefab_hash": 1005843700, + "desc": "", + "name": "Data Disk" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "DataDisk", + "sorting_class": "Default" + } + }, + "ItemDirtCanister": { + "prefab": { + "prefab_name": "ItemDirtCanister", + "prefab_hash": 902565329, + "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.", + "name": "Dirt Canister" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Ore", + "sorting_class": "Default" + } + }, + "ItemDirtyOre": { + "prefab": { + "prefab_name": "ItemDirtyOre", + "prefab_hash": -1234745580, + "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. ", + "name": "Dirty Ore" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "None", + "sorting_class": "Ores" + } + }, + "ItemDisposableBatteryCharger": { + "prefab": { + "prefab_name": "ItemDisposableBatteryCharger", + "prefab_hash": -2124435700, + "desc": "Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery.", + "name": "Disposable Battery Charger" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemDrill": { + "prefab": { + "prefab_name": "ItemDrill", + "prefab_hash": 2009673399, + "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.", + "name": "Hand Drill" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemDuctTape": { + "prefab": { + "prefab_name": "ItemDuctTape", + "prefab_hash": -1943134693, + "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.", + "name": "Duct Tape" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + } + }, + "ItemDynamicAirCon": { + "prefab": { + "prefab_name": "ItemDynamicAirCon", + "prefab_hash": 1072914031, + "desc": "", + "name": "Kit (Portable Air Conditioner)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemDynamicScrubber": { + "prefab": { + "prefab_name": "ItemDynamicScrubber", + "prefab_hash": -971920158, + "desc": "", + "name": "Kit (Portable Scrubber)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemEggCarton": { + "prefab": { + "prefab_name": "ItemEggCarton", + "prefab_hash": -524289310, + "desc": "Within, eggs reside in mysterious, marmoreal silence.", + "name": "Egg Carton" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Storage" + }, + "slots": [ + { + "name": "", + "typ": "Egg" + }, + { + "name": "", + "typ": "Egg" + }, + { + "name": "", + "typ": "Egg" + }, + { + "name": "", + "typ": "Egg" + }, + { + "name": "", + "typ": "Egg" + }, + { + "name": "", + "typ": "Egg" + } + ] + }, + "ItemElectronicParts": { + "prefab": { + "prefab_name": "ItemElectronicParts", + "prefab_hash": 731250882, + "desc": "", + "name": "Electronic Parts" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 20, + "slot_class": "None", + "sorting_class": "Resources" + } + }, + "ItemElectrumIngot": { + "prefab": { + "prefab_name": "ItemElectrumIngot", + "prefab_hash": 502280180, + "desc": "", + "name": "Ingot (Electrum)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Electrum": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + } + }, + "ItemEmergencyAngleGrinder": { + "prefab": { + "prefab_name": "ItemEmergencyAngleGrinder", + "prefab_hash": -351438780, + "desc": "", + "name": "Emergency Angle Grinder" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemEmergencyArcWelder": { + "prefab": { + "prefab_name": "ItemEmergencyArcWelder", + "prefab_hash": -1056029600, + "desc": "", + "name": "Emergency Arc Welder" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemEmergencyCrowbar": { + "prefab": { + "prefab_name": "ItemEmergencyCrowbar", + "prefab_hash": 976699731, + "desc": "", + "name": "Emergency Crowbar" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + } + }, + "ItemEmergencyDrill": { + "prefab": { + "prefab_name": "ItemEmergencyDrill", + "prefab_hash": -2052458905, + "desc": "", + "name": "Emergency Drill" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemEmergencyEvaSuit": { + "prefab": { + "prefab_name": "ItemEmergencyEvaSuit", + "prefab_hash": 1791306431, + "desc": "", + "name": "Emergency Eva Suit" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Suit", + "sorting_class": "Clothing" + }, + "thermal_info": { + "convection_factor": 0.2, + "radiation_factor": 0.2 + }, + "internal_atmo_info": { + "volume": 10.0 + }, + "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" + } + ], + "suit_info": { + "hygine_reduction_multiplier": 1.0, + "waste_max_pressure": 4053.0 + } + }, + "ItemEmergencyPickaxe": { + "prefab": { + "prefab_name": "ItemEmergencyPickaxe", + "prefab_hash": -1061510408, + "desc": "", + "name": "Emergency Pickaxe" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + } + }, + "ItemEmergencyScrewdriver": { + "prefab": { + "prefab_name": "ItemEmergencyScrewdriver", + "prefab_hash": 266099983, + "desc": "", + "name": "Emergency Screwdriver" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + } + }, + "ItemEmergencySpaceHelmet": { + "prefab": { + "prefab_name": "ItemEmergencySpaceHelmet", + "prefab_hash": 205916793, + "desc": "", + "name": "Emergency Space Helmet" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Helmet", + "sorting_class": "Clothing" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": { + "volume": 3.0 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "ItemEmergencyToolBelt": { + "prefab": { + "prefab_name": "ItemEmergencyToolBelt", + "prefab_hash": 1661941301, + "desc": "", + "name": "Emergency Tool Belt" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Belt", + "sorting_class": "Clothing" + }, + "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" + } + ] + }, + "ItemEmergencyWireCutters": { + "prefab": { + "prefab_name": "ItemEmergencyWireCutters", + "prefab_hash": 2102803952, + "desc": "", + "name": "Emergency Wire Cutters" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + } + }, + "ItemEmergencyWrench": { + "prefab": { + "prefab_name": "ItemEmergencyWrench", + "prefab_hash": 162553030, + "desc": "", + "name": "Emergency Wrench" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + } + }, + "ItemEmptyCan": { + "prefab": { + "prefab_name": "ItemEmptyCan", + "prefab_hash": 1013818348, + "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.", + "name": "Empty Can" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 10, + "reagents": { + "Steel": 1.0 + }, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemEvaSuit": { + "prefab": { + "prefab_name": "ItemEvaSuit", + "prefab_hash": 1677018918, + "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.", + "name": "Eva Suit" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Suit", + "sorting_class": "Clothing" + }, + "thermal_info": { + "convection_factor": 0.2, + "radiation_factor": 0.2 + }, + "internal_atmo_info": { + "volume": 10.0 + }, + "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" + } + ], + "suit_info": { + "hygine_reduction_multiplier": 1.0, + "waste_max_pressure": 4053.0 + } + }, + "ItemExplosive": { + "prefab": { + "prefab_name": "ItemExplosive", + "prefab_hash": 235361649, + "desc": "", + "name": "Remote Explosive" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemFern": { + "prefab": { + "prefab_name": "ItemFern", + "prefab_hash": 892110467, + "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.", + "name": "Fern" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "Fenoxitone": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemFertilizedEgg": { + "prefab": { + "prefab_name": "ItemFertilizedEgg", + "prefab_hash": -383972371, + "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.", + "name": "Egg" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 1, + "reagents": { + "Egg": 1.0 + }, + "slot_class": "Egg", + "sorting_class": "Resources" + } + }, + "ItemFilterFern": { + "prefab": { + "prefab_name": "ItemFilterFern", + "prefab_hash": 266654416, + "desc": "A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant.", + "name": "Darga Fern" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemFlagSmall": { + "prefab": { + "prefab_name": "ItemFlagSmall", + "prefab_hash": 2011191088, + "desc": "", + "name": "Kit (Small Flag)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemFlashingLight": { + "prefab": { + "prefab_name": "ItemFlashingLight", + "prefab_hash": -2107840748, + "desc": "", + "name": "Kit (Flashing Light)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemFlashlight": { + "prefab": { + "prefab_name": "ItemFlashlight", + "prefab_hash": -838472102, + "desc": "A flashlight with a narrow and wide beam options.", + "name": "Flashlight" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Low Power", + "1": "High Power" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemFlour": { + "prefab": { + "prefab_name": "ItemFlour", + "prefab_hash": -665995854, + "desc": "Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven).", + "name": "Flour" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Flour": 50.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + } + }, + "ItemFlowerBlue": { + "prefab": { + "prefab_name": "ItemFlowerBlue", + "prefab_hash": -1573623434, + "desc": "", + "name": "Flower (Blue)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 100, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemFlowerGreen": { + "prefab": { + "prefab_name": "ItemFlowerGreen", + "prefab_hash": -1513337058, + "desc": "", + "name": "Flower (Green)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 100, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemFlowerOrange": { + "prefab": { + "prefab_name": "ItemFlowerOrange", + "prefab_hash": -1411986716, + "desc": "", + "name": "Flower (Orange)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 100, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemFlowerRed": { + "prefab": { + "prefab_name": "ItemFlowerRed", + "prefab_hash": -81376085, + "desc": "", + "name": "Flower (Red)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 100, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemFlowerYellow": { + "prefab": { + "prefab_name": "ItemFlowerYellow", + "prefab_hash": 1712822019, + "desc": "", + "name": "Flower (Yellow)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 100, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemFrenchFries": { + "prefab": { + "prefab_name": "ItemFrenchFries", + "prefab_hash": -57608687, + "desc": "Because space would suck without 'em.", + "name": "Canned French Fries" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemFries": { + "prefab": { + "prefab_name": "ItemFries", + "prefab_hash": 1371786091, + "desc": "", + "name": "French Fries" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemGasCanisterCarbonDioxide": { + "prefab": { + "prefab_name": "ItemGasCanisterCarbonDioxide", + "prefab_hash": -767685874, + "desc": "", + "name": "Canister (CO2)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 64.0 + } + }, + "ItemGasCanisterEmpty": { + "prefab": { + "prefab_name": "ItemGasCanisterEmpty", + "prefab_hash": 42280099, + "desc": "", + "name": "Canister" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 64.0 + } + }, + "ItemGasCanisterFuel": { + "prefab": { + "prefab_name": "ItemGasCanisterFuel", + "prefab_hash": -1014695176, + "desc": "", + "name": "Canister (Fuel)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 64.0 + } + }, + "ItemGasCanisterNitrogen": { + "prefab": { + "prefab_name": "ItemGasCanisterNitrogen", + "prefab_hash": 2145068424, + "desc": "", + "name": "Canister (Nitrogen)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 64.0 + } + }, + "ItemGasCanisterNitrousOxide": { + "prefab": { + "prefab_name": "ItemGasCanisterNitrousOxide", + "prefab_hash": -1712153401, + "desc": "", + "name": "Gas Canister (Sleeping)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 64.0 + } + }, + "ItemGasCanisterOxygen": { + "prefab": { + "prefab_name": "ItemGasCanisterOxygen", + "prefab_hash": -1152261938, + "desc": "", + "name": "Canister (Oxygen)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 64.0 + } + }, + "ItemGasCanisterPollutants": { + "prefab": { + "prefab_name": "ItemGasCanisterPollutants", + "prefab_hash": -1552586384, + "desc": "", + "name": "Canister (Pollutants)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 64.0 + } + }, + "ItemGasCanisterSmart": { + "prefab": { + "prefab_name": "ItemGasCanisterSmart", + "prefab_hash": -668314371, + "desc": "0.Mode0\n1.Mode1", + "name": "Gas Canister (Smart)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": { + "volume": 64.0 + } + }, + "ItemGasCanisterVolatiles": { + "prefab": { + "prefab_name": "ItemGasCanisterVolatiles", + "prefab_hash": -472094806, + "desc": "", + "name": "Canister (Volatiles)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 64.0 + } + }, + "ItemGasCanisterWater": { + "prefab": { + "prefab_name": "ItemGasCanisterWater", + "prefab_hash": -1854861891, + "desc": "", + "name": "Liquid Canister (Water)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "LiquidCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 12.1 + } + }, + "ItemGasFilterCarbonDioxide": { + "prefab": { + "prefab_name": "ItemGasFilterCarbonDioxide", + "prefab_hash": 1635000764, + "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.", + "name": "Filter (Carbon Dioxide)" + }, + "item": { + "consumable": false, + "filter_type": "CarbonDioxide", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterCarbonDioxideInfinite": { + "prefab": { + "prefab_name": "ItemGasFilterCarbonDioxideInfinite", + "prefab_hash": -185568964, + "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.", + "name": "Catalytic Filter (Carbon Dioxide)" + }, + "item": { + "consumable": false, + "filter_type": "CarbonDioxide", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterCarbonDioxideL": { + "prefab": { + "prefab_name": "ItemGasFilterCarbonDioxideL", + "prefab_hash": 1876847024, + "desc": "", + "name": "Heavy Filter (Carbon Dioxide)" + }, + "item": { + "consumable": false, + "filter_type": "CarbonDioxide", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterCarbonDioxideM": { + "prefab": { + "prefab_name": "ItemGasFilterCarbonDioxideM", + "prefab_hash": 416897318, + "desc": "", + "name": "Medium Filter (Carbon Dioxide)" + }, + "item": { + "consumable": false, + "filter_type": "CarbonDioxide", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterNitrogen": { + "prefab": { + "prefab_name": "ItemGasFilterNitrogen", + "prefab_hash": 632853248, + "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.", + "name": "Filter (Nitrogen)" + }, + "item": { + "consumable": false, + "filter_type": "Nitrogen", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterNitrogenInfinite": { + "prefab": { + "prefab_name": "ItemGasFilterNitrogenInfinite", + "prefab_hash": 152751131, + "desc": "A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", + "name": "Catalytic Filter (Nitrogen)" + }, + "item": { + "consumable": false, + "filter_type": "Nitrogen", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterNitrogenL": { + "prefab": { + "prefab_name": "ItemGasFilterNitrogenL", + "prefab_hash": -1387439451, + "desc": "", + "name": "Heavy Filter (Nitrogen)" + }, + "item": { + "consumable": false, + "filter_type": "Nitrogen", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterNitrogenM": { + "prefab": { + "prefab_name": "ItemGasFilterNitrogenM", + "prefab_hash": -632657357, + "desc": "", + "name": "Medium Filter (Nitrogen)" + }, + "item": { + "consumable": false, + "filter_type": "Nitrogen", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterNitrousOxide": { + "prefab": { + "prefab_name": "ItemGasFilterNitrousOxide", + "prefab_hash": -1247674305, + "desc": "", + "name": "Filter (Nitrous Oxide)" + }, + "item": { + "consumable": false, + "filter_type": "NitrousOxide", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterNitrousOxideInfinite": { + "prefab": { + "prefab_name": "ItemGasFilterNitrousOxideInfinite", + "prefab_hash": -123934842, + "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.", + "name": "Catalytic Filter (Nitrous Oxide)" + }, + "item": { + "consumable": false, + "filter_type": "NitrousOxide", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterNitrousOxideL": { + "prefab": { + "prefab_name": "ItemGasFilterNitrousOxideL", + "prefab_hash": 465267979, + "desc": "", + "name": "Heavy Filter (Nitrous Oxide)" + }, + "item": { + "consumable": false, + "filter_type": "NitrousOxide", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterNitrousOxideM": { + "prefab": { + "prefab_name": "ItemGasFilterNitrousOxideM", + "prefab_hash": 1824284061, + "desc": "", + "name": "Medium Filter (Nitrous Oxide)" + }, + "item": { + "consumable": false, + "filter_type": "NitrousOxide", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterOxygen": { + "prefab": { + "prefab_name": "ItemGasFilterOxygen", + "prefab_hash": -721824748, + "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).", + "name": "Filter (Oxygen)" + }, + "item": { + "consumable": false, + "filter_type": "Oxygen", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterOxygenInfinite": { + "prefab": { + "prefab_name": "ItemGasFilterOxygenInfinite", + "prefab_hash": -1055451111, + "desc": "A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", + "name": "Catalytic Filter (Oxygen)" + }, + "item": { + "consumable": false, + "filter_type": "Oxygen", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterOxygenL": { + "prefab": { + "prefab_name": "ItemGasFilterOxygenL", + "prefab_hash": -1217998945, + "desc": "", + "name": "Heavy Filter (Oxygen)" + }, + "item": { + "consumable": false, + "filter_type": "Oxygen", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterOxygenM": { + "prefab": { + "prefab_name": "ItemGasFilterOxygenM", + "prefab_hash": -1067319543, + "desc": "", + "name": "Medium Filter (Oxygen)" + }, + "item": { + "consumable": false, + "filter_type": "Oxygen", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterPollutants": { + "prefab": { + "prefab_name": "ItemGasFilterPollutants", + "prefab_hash": 1915566057, + "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.", + "name": "Filter (Pollutant)" + }, + "item": { + "consumable": false, + "filter_type": "Pollutant", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterPollutantsInfinite": { + "prefab": { + "prefab_name": "ItemGasFilterPollutantsInfinite", + "prefab_hash": -503738105, + "desc": "A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", + "name": "Catalytic Filter (Pollutants)" + }, + "item": { + "consumable": false, + "filter_type": "Pollutant", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterPollutantsL": { + "prefab": { + "prefab_name": "ItemGasFilterPollutantsL", + "prefab_hash": 1959564765, + "desc": "", + "name": "Heavy Filter (Pollutants)" + }, + "item": { + "consumable": false, + "filter_type": "Pollutant", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterPollutantsM": { + "prefab": { + "prefab_name": "ItemGasFilterPollutantsM", + "prefab_hash": 63677771, + "desc": "", + "name": "Medium Filter (Pollutants)" + }, + "item": { + "consumable": false, + "filter_type": "Pollutant", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterVolatiles": { + "prefab": { + "prefab_name": "ItemGasFilterVolatiles", + "prefab_hash": 15011598, + "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.", + "name": "Filter (Volatiles)" + }, + "item": { + "consumable": false, + "filter_type": "Volatiles", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterVolatilesInfinite": { + "prefab": { + "prefab_name": "ItemGasFilterVolatilesInfinite", + "prefab_hash": -1916176068, + "desc": "A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", + "name": "Catalytic Filter (Volatiles)" + }, + "item": { + "consumable": false, + "filter_type": "Volatiles", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterVolatilesL": { + "prefab": { + "prefab_name": "ItemGasFilterVolatilesL", + "prefab_hash": 1255156286, + "desc": "", + "name": "Heavy Filter (Volatiles)" + }, + "item": { + "consumable": false, + "filter_type": "Volatiles", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterVolatilesM": { + "prefab": { + "prefab_name": "ItemGasFilterVolatilesM", + "prefab_hash": 1037507240, + "desc": "", + "name": "Medium Filter (Volatiles)" + }, + "item": { + "consumable": false, + "filter_type": "Volatiles", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterWater": { + "prefab": { + "prefab_name": "ItemGasFilterWater", + "prefab_hash": -1993197973, + "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)", + "name": "Filter (Water)" + }, + "item": { + "consumable": false, + "filter_type": "Steam", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterWaterInfinite": { + "prefab": { + "prefab_name": "ItemGasFilterWaterInfinite", + "prefab_hash": -1678456554, + "desc": "A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", + "name": "Catalytic Filter (Water)" + }, + "item": { + "consumable": false, + "filter_type": "Steam", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterWaterL": { + "prefab": { + "prefab_name": "ItemGasFilterWaterL", + "prefab_hash": 2004969680, + "desc": "", + "name": "Heavy Filter (Water)" + }, + "item": { + "consumable": false, + "filter_type": "Steam", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasFilterWaterM": { + "prefab": { + "prefab_name": "ItemGasFilterWaterM", + "prefab_hash": 8804422, + "desc": "", + "name": "Medium Filter (Water)" + }, + "item": { + "consumable": false, + "filter_type": "Steam", + "ingredient": false, + "max_quantity": 100, + "slot_class": "GasFilter", + "sorting_class": "Resources" + } + }, + "ItemGasSensor": { + "prefab": { + "prefab_name": "ItemGasSensor", + "prefab_hash": 1717593480, + "desc": "", + "name": "Kit (Gas Sensor)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemGasTankStorage": { + "prefab": { + "prefab_name": "ItemGasTankStorage", + "prefab_hash": -2113012215, + "desc": "This kit produces a Kit (Canister Storage) for refilling a Canister.", + "name": "Kit (Canister Storage)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemGlassSheets": { + "prefab": { + "prefab_name": "ItemGlassSheets", + "prefab_hash": 1588896491, + "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.", + "name": "Glass Sheets" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "None", + "sorting_class": "Resources" + } + }, + "ItemGlasses": { + "prefab": { + "prefab_name": "ItemGlasses", + "prefab_hash": -1068925231, + "desc": "", + "name": "Glasses" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Glasses", + "sorting_class": "Clothing" + } + }, + "ItemGoldIngot": { + "prefab": { + "prefab_name": "ItemGoldIngot", + "prefab_hash": 226410516, + "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. ", + "name": "Ingot (Gold)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Gold": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + } + }, + "ItemGoldOre": { + "prefab": { + "prefab_name": "ItemGoldOre", + "prefab_hash": -1348105509, + "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.", + "name": "Ore (Gold)" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Gold": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + } + }, + "ItemGrenade": { + "prefab": { + "prefab_name": "ItemGrenade", + "prefab_hash": 1544275894, + "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.", + "name": "Hand Grenade" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemHEMDroidRepairKit": { + "prefab": { + "prefab_name": "ItemHEMDroidRepairKit", + "prefab_hash": 470636008, + "desc": "Repairs damaged HEM-Droids to full health.", + "name": "HEMDroid Repair Kit" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemHardBackpack": { + "prefab": { + "prefab_name": "ItemHardBackpack", + "prefab_hash": 374891127, + "desc": "This backpack can be useful when you are working inside and don't need to fly around.", + "name": "Hardsuit Backpack" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Back", + "sorting_class": "Clothing" + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": 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" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, + "ItemHardJetpack": { + "prefab": { + "prefab_name": "ItemHardJetpack", + "prefab_hash": -412551656, + "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.", + "name": "Hardsuit Jetpack" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Back", + "sorting_class": "Clothing" + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Activate": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "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" + } + ] + }, + "ItemHardMiningBackPack": { + "prefab": { + "prefab_name": "ItemHardMiningBackPack", + "prefab_hash": 900366130, + "desc": "", + "name": "Hard Mining Backpack" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Back", + "sorting_class": "Clothing" + }, + "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" + } + ] + }, + "ItemHardSuit": { + "prefab": { + "prefab_name": "ItemHardSuit", + "prefab_hash": -1758310454, + "desc": "Connects to Logic Transmitter", + "name": "Hardsuit" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Suit", + "sorting_class": "Clothing" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 10.0 + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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" + }, + "transmission_receiver": false, + "wireless_logic": true, + "circuit_holder": true + }, + "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" + } + ], + "suit_info": { + "hygine_reduction_multiplier": 1.5, + "waste_max_pressure": 4053.0 + }, + "memory": { + "instructions": null, + "memory_access": "ReadWrite", + "memory_size": 0 + } + }, + "ItemHardsuitHelmet": { + "prefab": { + "prefab_name": "ItemHardsuitHelmet", + "prefab_hash": -84573099, + "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.", + "name": "Hardsuit Helmet" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Helmet", + "sorting_class": "Clothing" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": { + "volume": 3.0 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "ItemHastelloyIngot": { + "prefab": { + "prefab_name": "ItemHastelloyIngot", + "prefab_hash": 1579842814, + "desc": "", + "name": "Ingot (Hastelloy)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Hastelloy": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + } + }, + "ItemHat": { + "prefab": { + "prefab_name": "ItemHat", + "prefab_hash": 299189339, + "desc": "As the name suggests, this is a hat.", + "name": "Hat" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Helmet", + "sorting_class": "Clothing" + } + }, + "ItemHighVolumeGasCanisterEmpty": { + "prefab": { + "prefab_name": "ItemHighVolumeGasCanisterEmpty", + "prefab_hash": 998653377, + "desc": "", + "name": "High Volume Gas Canister" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "GasCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 83.0 + } + }, + "ItemHorticultureBelt": { + "prefab": { + "prefab_name": "ItemHorticultureBelt", + "prefab_hash": -1117581553, + "desc": "", + "name": "Horticulture Belt" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Belt", + "sorting_class": "Clothing" + }, + "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" + } + ] + }, + "ItemHydroponicTray": { + "prefab": { + "prefab_name": "ItemHydroponicTray", + "prefab_hash": -1193543727, + "desc": "This kits creates a Hydroponics Tray for growing various plants.", + "name": "Kit (Hydroponic Tray)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemIce": { + "prefab": { + "prefab_name": "ItemIce", + "prefab_hash": 1217489948, + "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.", + "name": "Ice (Water)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemIgniter": { + "prefab": { + "prefab_name": "ItemIgniter", + "prefab_hash": 890106742, + "desc": "This kit creates an Kit (Igniter) unit.", + "name": "Kit (Igniter)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemInconelIngot": { + "prefab": { + "prefab_name": "ItemInconelIngot", + "prefab_hash": -787796599, + "desc": "", + "name": "Ingot (Inconel)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Inconel": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + } + }, + "ItemInsulation": { + "prefab": { + "prefab_name": "ItemInsulation", + "prefab_hash": 897176943, + "desc": "Mysterious in the extreme, the function of this item is lost to the ages.", + "name": "Insulation" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Resources" + } + }, + "ItemIntegratedCircuit10": { + "prefab": { + "prefab_name": "ItemIntegratedCircuit10", + "prefab_hash": -744098481, + "desc": "", + "name": "Integrated Circuit (IC10)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "ProgrammableChip", + "sorting_class": "Default" + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "LineNumber": "Read", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "memory": { + "instructions": null, + "memory_access": "ReadWrite", + "memory_size": 512 + } + }, + "ItemInvarIngot": { + "prefab": { + "prefab_name": "ItemInvarIngot", + "prefab_hash": -297990285, + "desc": "", + "name": "Ingot (Invar)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Invar": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + } + }, + "ItemIronFrames": { + "prefab": { + "prefab_name": "ItemIronFrames", + "prefab_hash": 1225836666, + "desc": "", + "name": "Iron Frames" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 30, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemIronIngot": { + "prefab": { + "prefab_name": "ItemIronIngot", + "prefab_hash": -1301215609, + "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.", + "name": "Ingot (Iron)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Iron": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + } + }, + "ItemIronOre": { + "prefab": { + "prefab_name": "ItemIronOre", + "prefab_hash": 1758427767, + "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.", + "name": "Ore (Iron)" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Iron": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + } + }, + "ItemIronSheets": { + "prefab": { + "prefab_name": "ItemIronSheets", + "prefab_hash": -487378546, + "desc": "", + "name": "Iron Sheets" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "None", + "sorting_class": "Resources" + } + }, + "ItemJetpackBasic": { + "prefab": { + "prefab_name": "ItemJetpackBasic", + "prefab_hash": 1969189000, + "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.", + "name": "Jetpack Basic" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Back", + "sorting_class": "Clothing" + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Activate": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "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" + } + ] + }, + "ItemKitAIMeE": { + "prefab": { + "prefab_name": "ItemKitAIMeE", + "prefab_hash": 496830914, + "desc": "", + "name": "Kit (AIMeE)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitAccessBridge": { + "prefab": { + "prefab_name": "ItemKitAccessBridge", + "prefab_hash": 513258369, + "desc": "", + "name": "Kit (Access Bridge)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitAdvancedComposter": { + "prefab": { + "prefab_name": "ItemKitAdvancedComposter", + "prefab_hash": -1431998347, + "desc": "", + "name": "Kit (Advanced Composter)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitAdvancedFurnace": { + "prefab": { + "prefab_name": "ItemKitAdvancedFurnace", + "prefab_hash": -616758353, + "desc": "", + "name": "Kit (Advanced Furnace)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitAdvancedPackagingMachine": { + "prefab": { + "prefab_name": "ItemKitAdvancedPackagingMachine", + "prefab_hash": -598545233, + "desc": "", + "name": "Kit (Advanced Packaging Machine)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitAirlock": { + "prefab": { + "prefab_name": "ItemKitAirlock", + "prefab_hash": 964043875, + "desc": "", + "name": "Kit (Airlock)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitAirlockGate": { + "prefab": { + "prefab_name": "ItemKitAirlockGate", + "prefab_hash": 682546947, + "desc": "", + "name": "Kit (Hangar Door)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitArcFurnace": { + "prefab": { + "prefab_name": "ItemKitArcFurnace", + "prefab_hash": -98995857, + "desc": "", + "name": "Kit (Arc Furnace)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitAtmospherics": { + "prefab": { + "prefab_name": "ItemKitAtmospherics", + "prefab_hash": 1222286371, + "desc": "", + "name": "Kit (Atmospherics)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitAutoMinerSmall": { + "prefab": { + "prefab_name": "ItemKitAutoMinerSmall", + "prefab_hash": 1668815415, + "desc": "", + "name": "Kit (Autominer Small)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitAutolathe": { + "prefab": { + "prefab_name": "ItemKitAutolathe", + "prefab_hash": -1753893214, + "desc": "", + "name": "Kit (Autolathe)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitAutomatedOven": { + "prefab": { + "prefab_name": "ItemKitAutomatedOven", + "prefab_hash": -1931958659, + "desc": "", + "name": "Kit (Automated Oven)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitBasket": { + "prefab": { + "prefab_name": "ItemKitBasket", + "prefab_hash": 148305004, + "desc": "", + "name": "Kit (Basket)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitBattery": { + "prefab": { + "prefab_name": "ItemKitBattery", + "prefab_hash": 1406656973, + "desc": "", + "name": "Kit (Battery)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitBatteryLarge": { + "prefab": { + "prefab_name": "ItemKitBatteryLarge", + "prefab_hash": -21225041, + "desc": "", + "name": "Kit (Battery Large)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitBeacon": { + "prefab": { + "prefab_name": "ItemKitBeacon", + "prefab_hash": 249073136, + "desc": "", + "name": "Kit (Beacon)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitBeds": { + "prefab": { + "prefab_name": "ItemKitBeds", + "prefab_hash": -1241256797, + "desc": "", + "name": "Kit (Beds)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitBlastDoor": { + "prefab": { + "prefab_name": "ItemKitBlastDoor", + "prefab_hash": -1755116240, + "desc": "", + "name": "Kit (Blast Door)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitCentrifuge": { + "prefab": { + "prefab_name": "ItemKitCentrifuge", + "prefab_hash": 578182956, + "desc": "", + "name": "Kit (Centrifuge)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitChairs": { + "prefab": { + "prefab_name": "ItemKitChairs", + "prefab_hash": -1394008073, + "desc": "", + "name": "Kit (Chairs)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitChute": { + "prefab": { + "prefab_name": "ItemKitChute", + "prefab_hash": 1025254665, + "desc": "", + "name": "Kit (Basic Chutes)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitChuteUmbilical": { + "prefab": { + "prefab_name": "ItemKitChuteUmbilical", + "prefab_hash": -876560854, + "desc": "", + "name": "Kit (Chute Umbilical)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitCompositeCladding": { + "prefab": { + "prefab_name": "ItemKitCompositeCladding", + "prefab_hash": -1470820996, + "desc": "", + "name": "Kit (Cladding)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitCompositeFloorGrating": { + "prefab": { + "prefab_name": "ItemKitCompositeFloorGrating", + "prefab_hash": 1182412869, + "desc": "", + "name": "Kit (Floor Grating)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitComputer": { + "prefab": { + "prefab_name": "ItemKitComputer", + "prefab_hash": 1990225489, + "desc": "", + "name": "Kit (Computer)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitConsole": { + "prefab": { + "prefab_name": "ItemKitConsole", + "prefab_hash": -1241851179, + "desc": "", + "name": "Kit (Consoles)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitCrate": { + "prefab": { + "prefab_name": "ItemKitCrate", + "prefab_hash": 429365598, + "desc": "", + "name": "Kit (Crate)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitCrateMkII": { + "prefab": { + "prefab_name": "ItemKitCrateMkII", + "prefab_hash": -1585956426, + "desc": "", + "name": "Kit (Crate Mk II)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitCrateMount": { + "prefab": { + "prefab_name": "ItemKitCrateMount", + "prefab_hash": -551612946, + "desc": "", + "name": "Kit (Container Mount)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitCryoTube": { + "prefab": { + "prefab_name": "ItemKitCryoTube", + "prefab_hash": -545234195, + "desc": "", + "name": "Kit (Cryo Tube)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitDeepMiner": { + "prefab": { + "prefab_name": "ItemKitDeepMiner", + "prefab_hash": -1935075707, + "desc": "", + "name": "Kit (Deep Miner)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitDockingPort": { + "prefab": { + "prefab_name": "ItemKitDockingPort", + "prefab_hash": 77421200, + "desc": "", + "name": "Kit (Docking Port)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitDoor": { + "prefab": { + "prefab_name": "ItemKitDoor", + "prefab_hash": 168615924, + "desc": "", + "name": "Kit (Door)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitDrinkingFountain": { + "prefab": { + "prefab_name": "ItemKitDrinkingFountain", + "prefab_hash": -1743663875, + "desc": "", + "name": "Kit (Drinking Fountain)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitDynamicCanister": { + "prefab": { + "prefab_name": "ItemKitDynamicCanister", + "prefab_hash": -1061945368, + "desc": "", + "name": "Kit (Portable Gas Tank)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitDynamicGasTankAdvanced": { + "prefab": { + "prefab_name": "ItemKitDynamicGasTankAdvanced", + "prefab_hash": 1533501495, + "desc": "", + "name": "Kit (Portable Gas Tank Mk II)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemKitDynamicGenerator": { + "prefab": { + "prefab_name": "ItemKitDynamicGenerator", + "prefab_hash": -732720413, + "desc": "", + "name": "Kit (Portable Generator)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitDynamicHydroponics": { + "prefab": { + "prefab_name": "ItemKitDynamicHydroponics", + "prefab_hash": -1861154222, + "desc": "", + "name": "Kit (Portable Hydroponics)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitDynamicLiquidCanister": { + "prefab": { + "prefab_name": "ItemKitDynamicLiquidCanister", + "prefab_hash": 375541286, + "desc": "", + "name": "Kit (Portable Liquid Tank)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitDynamicMKIILiquidCanister": { + "prefab": { + "prefab_name": "ItemKitDynamicMKIILiquidCanister", + "prefab_hash": -638019974, + "desc": "", + "name": "Kit (Portable Liquid Tank Mk II)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitElectricUmbilical": { + "prefab": { + "prefab_name": "ItemKitElectricUmbilical", + "prefab_hash": 1603046970, + "desc": "", + "name": "Kit (Power Umbilical)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitElectronicsPrinter": { + "prefab": { + "prefab_name": "ItemKitElectronicsPrinter", + "prefab_hash": -1181922382, + "desc": "", + "name": "Kit (Electronics Printer)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitElevator": { + "prefab": { + "prefab_name": "ItemKitElevator", + "prefab_hash": -945806652, + "desc": "", + "name": "Kit (Elevator)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitEngineLarge": { + "prefab": { + "prefab_name": "ItemKitEngineLarge", + "prefab_hash": 755302726, + "desc": "", + "name": "Kit (Engine Large)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitEngineMedium": { + "prefab": { + "prefab_name": "ItemKitEngineMedium", + "prefab_hash": 1969312177, + "desc": "", + "name": "Kit (Engine Medium)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitEngineSmall": { + "prefab": { + "prefab_name": "ItemKitEngineSmall", + "prefab_hash": 19645163, + "desc": "", + "name": "Kit (Engine Small)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitEvaporationChamber": { + "prefab": { + "prefab_name": "ItemKitEvaporationChamber", + "prefab_hash": 1587787610, + "desc": "", + "name": "Kit (Phase Change Device)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitFlagODA": { + "prefab": { + "prefab_name": "ItemKitFlagODA", + "prefab_hash": 1701764190, + "desc": "", + "name": "Kit (ODA Flag)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemKitFridgeBig": { + "prefab": { + "prefab_name": "ItemKitFridgeBig", + "prefab_hash": -1168199498, + "desc": "", + "name": "Kit (Fridge Large)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitFridgeSmall": { + "prefab": { + "prefab_name": "ItemKitFridgeSmall", + "prefab_hash": 1661226524, + "desc": "", + "name": "Kit (Fridge Small)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitFurnace": { + "prefab": { + "prefab_name": "ItemKitFurnace", + "prefab_hash": -806743925, + "desc": "", + "name": "Kit (Furnace)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitFurniture": { + "prefab": { + "prefab_name": "ItemKitFurniture", + "prefab_hash": 1162905029, + "desc": "", + "name": "Kit (Furniture)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitFuselage": { + "prefab": { + "prefab_name": "ItemKitFuselage", + "prefab_hash": -366262681, + "desc": "", + "name": "Kit (Fuselage)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitGasGenerator": { + "prefab": { + "prefab_name": "ItemKitGasGenerator", + "prefab_hash": 377745425, + "desc": "", + "name": "Kit (Gas Fuel Generator)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitGasUmbilical": { + "prefab": { + "prefab_name": "ItemKitGasUmbilical", + "prefab_hash": -1867280568, + "desc": "", + "name": "Kit (Gas Umbilical)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitGovernedGasRocketEngine": { + "prefab": { + "prefab_name": "ItemKitGovernedGasRocketEngine", + "prefab_hash": 206848766, + "desc": "", + "name": "Kit (Pumped Gas Rocket Engine)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitGroundTelescope": { + "prefab": { + "prefab_name": "ItemKitGroundTelescope", + "prefab_hash": -2140672772, + "desc": "", + "name": "Kit (Telescope)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitGrowLight": { + "prefab": { + "prefab_name": "ItemKitGrowLight", + "prefab_hash": 341030083, + "desc": "", + "name": "Kit (Grow Light)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitHarvie": { + "prefab": { + "prefab_name": "ItemKitHarvie", + "prefab_hash": -1022693454, + "desc": "", + "name": "Kit (Harvie)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitHeatExchanger": { + "prefab": { + "prefab_name": "ItemKitHeatExchanger", + "prefab_hash": -1710540039, + "desc": "", + "name": "Kit Heat Exchanger" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitHorizontalAutoMiner": { + "prefab": { + "prefab_name": "ItemKitHorizontalAutoMiner", + "prefab_hash": 844391171, + "desc": "", + "name": "Kit (OGRE)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitHydraulicPipeBender": { + "prefab": { + "prefab_name": "ItemKitHydraulicPipeBender", + "prefab_hash": -2098556089, + "desc": "", + "name": "Kit (Hydraulic Pipe Bender)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitHydroponicAutomated": { + "prefab": { + "prefab_name": "ItemKitHydroponicAutomated", + "prefab_hash": -927931558, + "desc": "", + "name": "Kit (Automated Hydroponics)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitHydroponicStation": { + "prefab": { + "prefab_name": "ItemKitHydroponicStation", + "prefab_hash": 2057179799, + "desc": "", + "name": "Kit (Hydroponic Station)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitIceCrusher": { + "prefab": { + "prefab_name": "ItemKitIceCrusher", + "prefab_hash": 288111533, + "desc": "", + "name": "Kit (Ice Crusher)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitInsulatedLiquidPipe": { + "prefab": { + "prefab_name": "ItemKitInsulatedLiquidPipe", + "prefab_hash": 2067655311, + "desc": "", + "name": "Kit (Insulated Liquid Pipe)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 20, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitInsulatedPipe": { + "prefab": { + "prefab_name": "ItemKitInsulatedPipe", + "prefab_hash": 452636699, + "desc": "", + "name": "Kit (Insulated Pipe)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 20, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitInsulatedPipeUtility": { + "prefab": { + "prefab_name": "ItemKitInsulatedPipeUtility", + "prefab_hash": -27284803, + "desc": "", + "name": "Kit (Insulated Pipe Utility Gas)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitInsulatedPipeUtilityLiquid": { + "prefab": { + "prefab_name": "ItemKitInsulatedPipeUtilityLiquid", + "prefab_hash": -1831558953, + "desc": "", + "name": "Kit (Insulated Pipe Utility Liquid)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitInteriorDoors": { + "prefab": { + "prefab_name": "ItemKitInteriorDoors", + "prefab_hash": 1935945891, + "desc": "", + "name": "Kit (Interior Doors)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLadder": { + "prefab": { + "prefab_name": "ItemKitLadder", + "prefab_hash": 489494578, + "desc": "", + "name": "Kit (Ladder)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLandingPadAtmos": { + "prefab": { + "prefab_name": "ItemKitLandingPadAtmos", + "prefab_hash": 1817007843, + "desc": "", + "name": "Kit (Landing Pad Atmospherics)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLandingPadBasic": { + "prefab": { + "prefab_name": "ItemKitLandingPadBasic", + "prefab_hash": 293581318, + "desc": "", + "name": "Kit (Landing Pad Basic)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLandingPadWaypoint": { + "prefab": { + "prefab_name": "ItemKitLandingPadWaypoint", + "prefab_hash": -1267511065, + "desc": "", + "name": "Kit (Landing Pad Runway)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLargeDirectHeatExchanger": { + "prefab": { + "prefab_name": "ItemKitLargeDirectHeatExchanger", + "prefab_hash": 450164077, + "desc": "", + "name": "Kit (Large Direct Heat Exchanger)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLargeExtendableRadiator": { + "prefab": { + "prefab_name": "ItemKitLargeExtendableRadiator", + "prefab_hash": 847430620, + "desc": "", + "name": "Kit (Large Extendable Radiator)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLargeSatelliteDish": { + "prefab": { + "prefab_name": "ItemKitLargeSatelliteDish", + "prefab_hash": -2039971217, + "desc": "", + "name": "Kit (Large Satellite Dish)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLaunchMount": { + "prefab": { + "prefab_name": "ItemKitLaunchMount", + "prefab_hash": -1854167549, + "desc": "", + "name": "Kit (Launch Mount)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLaunchTower": { + "prefab": { + "prefab_name": "ItemKitLaunchTower", + "prefab_hash": -174523552, + "desc": "", + "name": "Kit (Rocket Launch Tower)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLiquidRegulator": { + "prefab": { + "prefab_name": "ItemKitLiquidRegulator", + "prefab_hash": 1951126161, + "desc": "", + "name": "Kit (Liquid Regulator)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLiquidTank": { + "prefab": { + "prefab_name": "ItemKitLiquidTank", + "prefab_hash": -799849305, + "desc": "", + "name": "Kit (Liquid Tank)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLiquidTankInsulated": { + "prefab": { + "prefab_name": "ItemKitLiquidTankInsulated", + "prefab_hash": 617773453, + "desc": "", + "name": "Kit (Insulated Liquid Tank)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLiquidTurboVolumePump": { + "prefab": { + "prefab_name": "ItemKitLiquidTurboVolumePump", + "prefab_hash": -1805020897, + "desc": "", + "name": "Kit (Turbo Volume Pump - Liquid)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLiquidUmbilical": { + "prefab": { + "prefab_name": "ItemKitLiquidUmbilical", + "prefab_hash": 1571996765, + "desc": "", + "name": "Kit (Liquid Umbilical)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLocker": { + "prefab": { + "prefab_name": "ItemKitLocker", + "prefab_hash": 882301399, + "desc": "", + "name": "Kit (Locker)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLogicCircuit": { + "prefab": { + "prefab_name": "ItemKitLogicCircuit", + "prefab_hash": 1512322581, + "desc": "", + "name": "Kit (IC Housing)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLogicInputOutput": { + "prefab": { + "prefab_name": "ItemKitLogicInputOutput", + "prefab_hash": 1997293610, + "desc": "", + "name": "Kit (Logic I/O)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLogicMemory": { + "prefab": { + "prefab_name": "ItemKitLogicMemory", + "prefab_hash": -2098214189, + "desc": "", + "name": "Kit (Logic Memory)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLogicProcessor": { + "prefab": { + "prefab_name": "ItemKitLogicProcessor", + "prefab_hash": 220644373, + "desc": "", + "name": "Kit (Logic Processor)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLogicSwitch": { + "prefab": { + "prefab_name": "ItemKitLogicSwitch", + "prefab_hash": 124499454, + "desc": "", + "name": "Kit (Logic Switch)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLogicTransmitter": { + "prefab": { + "prefab_name": "ItemKitLogicTransmitter", + "prefab_hash": 1005397063, + "desc": "", + "name": "Kit (Logic Transmitter)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitMotherShipCore": { + "prefab": { + "prefab_name": "ItemKitMotherShipCore", + "prefab_hash": -344968335, + "desc": "", + "name": "Kit (Mothership)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitMusicMachines": { + "prefab": { + "prefab_name": "ItemKitMusicMachines", + "prefab_hash": -2038889137, + "desc": "", + "name": "Kit (Music Machines)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitPassiveLargeRadiatorGas": { + "prefab": { + "prefab_name": "ItemKitPassiveLargeRadiatorGas", + "prefab_hash": -1752768283, + "desc": "", + "name": "Kit (Medium Radiator)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemKitPassiveLargeRadiatorLiquid": { + "prefab": { + "prefab_name": "ItemKitPassiveLargeRadiatorLiquid", + "prefab_hash": 1453961898, + "desc": "", + "name": "Kit (Medium Radiator Liquid)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitPassthroughHeatExchanger": { + "prefab": { + "prefab_name": "ItemKitPassthroughHeatExchanger", + "prefab_hash": 636112787, + "desc": "", + "name": "Kit (CounterFlow Heat Exchanger)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitPictureFrame": { + "prefab": { + "prefab_name": "ItemKitPictureFrame", + "prefab_hash": -2062364768, + "desc": "", + "name": "Kit Picture Frame" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitPipe": { + "prefab": { + "prefab_name": "ItemKitPipe", + "prefab_hash": -1619793705, + "desc": "", + "name": "Kit (Pipe)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 20, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitPipeLiquid": { + "prefab": { + "prefab_name": "ItemKitPipeLiquid", + "prefab_hash": -1166461357, + "desc": "", + "name": "Kit (Liquid Pipe)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 20, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitPipeOrgan": { + "prefab": { + "prefab_name": "ItemKitPipeOrgan", + "prefab_hash": -827125300, + "desc": "", + "name": "Kit (Pipe Organ)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitPipeRadiator": { + "prefab": { + "prefab_name": "ItemKitPipeRadiator", + "prefab_hash": 920411066, + "desc": "", + "name": "Kit (Pipe Radiator)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemKitPipeRadiatorLiquid": { + "prefab": { + "prefab_name": "ItemKitPipeRadiatorLiquid", + "prefab_hash": -1697302609, + "desc": "", + "name": "Kit (Pipe Radiator Liquid)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemKitPipeUtility": { + "prefab": { + "prefab_name": "ItemKitPipeUtility", + "prefab_hash": 1934508338, + "desc": "", + "name": "Kit (Pipe Utility Gas)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitPipeUtilityLiquid": { + "prefab": { + "prefab_name": "ItemKitPipeUtilityLiquid", + "prefab_hash": 595478589, + "desc": "", + "name": "Kit (Pipe Utility Liquid)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitPlanter": { + "prefab": { + "prefab_name": "ItemKitPlanter", + "prefab_hash": 119096484, + "desc": "", + "name": "Kit (Planter)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitPortablesConnector": { + "prefab": { + "prefab_name": "ItemKitPortablesConnector", + "prefab_hash": 1041148999, + "desc": "", + "name": "Kit (Portables Connector)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitPowerTransmitter": { + "prefab": { + "prefab_name": "ItemKitPowerTransmitter", + "prefab_hash": 291368213, + "desc": "", + "name": "Kit (Power Transmitter)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitPowerTransmitterOmni": { + "prefab": { + "prefab_name": "ItemKitPowerTransmitterOmni", + "prefab_hash": -831211676, + "desc": "", + "name": "Kit (Power Transmitter Omni)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitPoweredVent": { + "prefab": { + "prefab_name": "ItemKitPoweredVent", + "prefab_hash": 2015439334, + "desc": "", + "name": "Kit (Powered Vent)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitPressureFedGasEngine": { + "prefab": { + "prefab_name": "ItemKitPressureFedGasEngine", + "prefab_hash": -121514007, + "desc": "", + "name": "Kit (Pressure Fed Gas Engine)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitPressureFedLiquidEngine": { + "prefab": { + "prefab_name": "ItemKitPressureFedLiquidEngine", + "prefab_hash": -99091572, + "desc": "", + "name": "Kit (Pressure Fed Liquid Engine)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitPressurePlate": { + "prefab": { + "prefab_name": "ItemKitPressurePlate", + "prefab_hash": 123504691, + "desc": "", + "name": "Kit (Trigger Plate)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitPumpedLiquidEngine": { + "prefab": { + "prefab_name": "ItemKitPumpedLiquidEngine", + "prefab_hash": 1921918951, + "desc": "", + "name": "Kit (Pumped Liquid Engine)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitRailing": { + "prefab": { + "prefab_name": "ItemKitRailing", + "prefab_hash": 750176282, + "desc": "", + "name": "Kit (Railing)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitRecycler": { + "prefab": { + "prefab_name": "ItemKitRecycler", + "prefab_hash": 849148192, + "desc": "", + "name": "Kit (Recycler)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitRegulator": { + "prefab": { + "prefab_name": "ItemKitRegulator", + "prefab_hash": 1181371795, + "desc": "", + "name": "Kit (Pressure Regulator)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitReinforcedWindows": { + "prefab": { + "prefab_name": "ItemKitReinforcedWindows", + "prefab_hash": 1459985302, + "desc": "", + "name": "Kit (Reinforced Windows)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitResearchMachine": { + "prefab": { + "prefab_name": "ItemKitResearchMachine", + "prefab_hash": 724776762, + "desc": "", + "name": "Kit Research Machine" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemKitRespawnPointWallMounted": { + "prefab": { + "prefab_name": "ItemKitRespawnPointWallMounted", + "prefab_hash": 1574688481, + "desc": "", + "name": "Kit (Respawn)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitRocketAvionics": { + "prefab": { + "prefab_name": "ItemKitRocketAvionics", + "prefab_hash": 1396305045, + "desc": "", + "name": "Kit (Avionics)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitRocketBattery": { + "prefab": { + "prefab_name": "ItemKitRocketBattery", + "prefab_hash": -314072139, + "desc": "", + "name": "Kit (Rocket Battery)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitRocketCargoStorage": { + "prefab": { + "prefab_name": "ItemKitRocketCargoStorage", + "prefab_hash": 479850239, + "desc": "", + "name": "Kit (Rocket Cargo Storage)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitRocketCelestialTracker": { + "prefab": { + "prefab_name": "ItemKitRocketCelestialTracker", + "prefab_hash": -303008602, + "desc": "", + "name": "Kit (Rocket Celestial Tracker)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitRocketCircuitHousing": { + "prefab": { + "prefab_name": "ItemKitRocketCircuitHousing", + "prefab_hash": 721251202, + "desc": "", + "name": "Kit (Rocket Circuit Housing)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitRocketDatalink": { + "prefab": { + "prefab_name": "ItemKitRocketDatalink", + "prefab_hash": -1256996603, + "desc": "", + "name": "Kit (Rocket Datalink)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitRocketGasFuelTank": { + "prefab": { + "prefab_name": "ItemKitRocketGasFuelTank", + "prefab_hash": -1629347579, + "desc": "", + "name": "Kit (Rocket Gas Fuel Tank)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitRocketLiquidFuelTank": { + "prefab": { + "prefab_name": "ItemKitRocketLiquidFuelTank", + "prefab_hash": 2032027950, + "desc": "", + "name": "Kit (Rocket Liquid Fuel Tank)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitRocketManufactory": { + "prefab": { + "prefab_name": "ItemKitRocketManufactory", + "prefab_hash": -636127860, + "desc": "", + "name": "Kit (Rocket Manufactory)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitRocketMiner": { + "prefab": { + "prefab_name": "ItemKitRocketMiner", + "prefab_hash": -867969909, + "desc": "", + "name": "Kit (Rocket Miner)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitRocketScanner": { + "prefab": { + "prefab_name": "ItemKitRocketScanner", + "prefab_hash": 1753647154, + "desc": "", + "name": "Kit (Rocket Scanner)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitRocketTransformerSmall": { + "prefab": { + "prefab_name": "ItemKitRocketTransformerSmall", + "prefab_hash": -932335800, + "desc": "", + "name": "Kit (Transformer Small (Rocket))" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitRoverFrame": { + "prefab": { + "prefab_name": "ItemKitRoverFrame", + "prefab_hash": 1827215803, + "desc": "", + "name": "Kit (Rover Frame)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitRoverMKI": { + "prefab": { + "prefab_name": "ItemKitRoverMKI", + "prefab_hash": 197243872, + "desc": "", + "name": "Kit (Rover Mk I)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitSDBHopper": { + "prefab": { + "prefab_name": "ItemKitSDBHopper", + "prefab_hash": 323957548, + "desc": "", + "name": "Kit (SDB Hopper)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitSatelliteDish": { + "prefab": { + "prefab_name": "ItemKitSatelliteDish", + "prefab_hash": 178422810, + "desc": "", + "name": "Kit (Medium Satellite Dish)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitSecurityPrinter": { + "prefab": { + "prefab_name": "ItemKitSecurityPrinter", + "prefab_hash": 578078533, + "desc": "", + "name": "Kit (Security Printer)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitSensor": { + "prefab": { + "prefab_name": "ItemKitSensor", + "prefab_hash": -1776897113, + "desc": "", + "name": "Kit (Sensors)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitShower": { + "prefab": { + "prefab_name": "ItemKitShower", + "prefab_hash": 735858725, + "desc": "", + "name": "Kit (Shower)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitSign": { + "prefab": { + "prefab_name": "ItemKitSign", + "prefab_hash": 529996327, + "desc": "", + "name": "Kit (Sign)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitSleeper": { + "prefab": { + "prefab_name": "ItemKitSleeper", + "prefab_hash": 326752036, + "desc": "", + "name": "Kit (Sleeper)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitSmallDirectHeatExchanger": { + "prefab": { + "prefab_name": "ItemKitSmallDirectHeatExchanger", + "prefab_hash": -1332682164, + "desc": "", + "name": "Kit (Small Direct Heat Exchanger)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemKitSmallSatelliteDish": { + "prefab": { + "prefab_name": "ItemKitSmallSatelliteDish", + "prefab_hash": 1960952220, + "desc": "", + "name": "Kit (Small Satellite Dish)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitSolarPanel": { + "prefab": { + "prefab_name": "ItemKitSolarPanel", + "prefab_hash": -1924492105, + "desc": "", + "name": "Kit (Solar Panel)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitSolarPanelBasic": { + "prefab": { + "prefab_name": "ItemKitSolarPanelBasic", + "prefab_hash": 844961456, + "desc": "", + "name": "Kit (Solar Panel Basic)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemKitSolarPanelBasicReinforced": { + "prefab": { + "prefab_name": "ItemKitSolarPanelBasicReinforced", + "prefab_hash": -528695432, + "desc": "", + "name": "Kit (Solar Panel Basic Heavy)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemKitSolarPanelReinforced": { + "prefab": { + "prefab_name": "ItemKitSolarPanelReinforced", + "prefab_hash": -364868685, + "desc": "", + "name": "Kit (Solar Panel Heavy)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitSolidGenerator": { + "prefab": { + "prefab_name": "ItemKitSolidGenerator", + "prefab_hash": 1293995736, + "desc": "", + "name": "Kit (Solid Generator)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitSorter": { + "prefab": { + "prefab_name": "ItemKitSorter", + "prefab_hash": 969522478, + "desc": "", + "name": "Kit (Sorter)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitSpeaker": { + "prefab": { + "prefab_name": "ItemKitSpeaker", + "prefab_hash": -126038526, + "desc": "", + "name": "Kit (Speaker)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitStacker": { + "prefab": { + "prefab_name": "ItemKitStacker", + "prefab_hash": 1013244511, + "desc": "", + "name": "Kit (Stacker)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitStairs": { + "prefab": { + "prefab_name": "ItemKitStairs", + "prefab_hash": 170878959, + "desc": "", + "name": "Kit (Stairs)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitStairwell": { + "prefab": { + "prefab_name": "ItemKitStairwell", + "prefab_hash": -1868555784, + "desc": "", + "name": "Kit (Stairwell)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitStandardChute": { + "prefab": { + "prefab_name": "ItemKitStandardChute", + "prefab_hash": 2133035682, + "desc": "", + "name": "Kit (Powered Chutes)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitStirlingEngine": { + "prefab": { + "prefab_name": "ItemKitStirlingEngine", + "prefab_hash": -1821571150, + "desc": "", + "name": "Kit (Stirling Engine)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitSuitStorage": { + "prefab": { + "prefab_name": "ItemKitSuitStorage", + "prefab_hash": 1088892825, + "desc": "", + "name": "Kit (Suit Storage)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitTables": { + "prefab": { + "prefab_name": "ItemKitTables", + "prefab_hash": -1361598922, + "desc": "", + "name": "Kit (Tables)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitTank": { + "prefab": { + "prefab_name": "ItemKitTank", + "prefab_hash": 771439840, + "desc": "", + "name": "Kit (Tank)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitTankInsulated": { + "prefab": { + "prefab_name": "ItemKitTankInsulated", + "prefab_hash": 1021053608, + "desc": "", + "name": "Kit (Tank Insulated)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemKitToolManufactory": { + "prefab": { + "prefab_name": "ItemKitToolManufactory", + "prefab_hash": 529137748, + "desc": "", + "name": "Kit (Tool Manufactory)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitTransformer": { + "prefab": { + "prefab_name": "ItemKitTransformer", + "prefab_hash": -453039435, + "desc": "", + "name": "Kit (Transformer Large)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitTransformerSmall": { + "prefab": { + "prefab_name": "ItemKitTransformerSmall", + "prefab_hash": 665194284, + "desc": "", + "name": "Kit (Transformer Small)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitTurbineGenerator": { + "prefab": { + "prefab_name": "ItemKitTurbineGenerator", + "prefab_hash": -1590715731, + "desc": "", + "name": "Kit (Turbine Generator)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitTurboVolumePump": { + "prefab": { + "prefab_name": "ItemKitTurboVolumePump", + "prefab_hash": -1248429712, + "desc": "", + "name": "Kit (Turbo Volume Pump - Gas)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemKitUprightWindTurbine": { + "prefab": { + "prefab_name": "ItemKitUprightWindTurbine", + "prefab_hash": -1798044015, + "desc": "", + "name": "Kit (Upright Wind Turbine)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemKitVendingMachine": { + "prefab": { + "prefab_name": "ItemKitVendingMachine", + "prefab_hash": -2038384332, + "desc": "", + "name": "Kit (Vending Machine)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitVendingMachineRefrigerated": { + "prefab": { + "prefab_name": "ItemKitVendingMachineRefrigerated", + "prefab_hash": -1867508561, + "desc": "", + "name": "Kit (Vending Machine Refrigerated)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitWall": { + "prefab": { + "prefab_name": "ItemKitWall", + "prefab_hash": -1826855889, + "desc": "", + "name": "Kit (Wall)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 30, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitWallArch": { + "prefab": { + "prefab_name": "ItemKitWallArch", + "prefab_hash": 1625214531, + "desc": "", + "name": "Kit (Arched Wall)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 30, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitWallFlat": { + "prefab": { + "prefab_name": "ItemKitWallFlat", + "prefab_hash": -846838195, + "desc": "", + "name": "Kit (Flat Wall)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 30, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitWallGeometry": { + "prefab": { + "prefab_name": "ItemKitWallGeometry", + "prefab_hash": -784733231, + "desc": "", + "name": "Kit (Geometric Wall)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 30, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitWallIron": { + "prefab": { + "prefab_name": "ItemKitWallIron", + "prefab_hash": -524546923, + "desc": "", + "name": "Kit (Iron Wall)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 30, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitWallPadded": { + "prefab": { + "prefab_name": "ItemKitWallPadded", + "prefab_hash": -821868990, + "desc": "", + "name": "Kit (Padded Wall)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 30, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitWaterBottleFiller": { + "prefab": { + "prefab_name": "ItemKitWaterBottleFiller", + "prefab_hash": 159886536, + "desc": "", + "name": "Kit (Water Bottle Filler)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitWaterPurifier": { + "prefab": { + "prefab_name": "ItemKitWaterPurifier", + "prefab_hash": 611181283, + "desc": "", + "name": "Kit (Water Purifier)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitWeatherStation": { + "prefab": { + "prefab_name": "ItemKitWeatherStation", + "prefab_hash": 337505889, + "desc": "", + "name": "Kit (Weather Station)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemKitWindTurbine": { + "prefab": { + "prefab_name": "ItemKitWindTurbine", + "prefab_hash": -868916503, + "desc": "", + "name": "Kit (Wind Turbine)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitWindowShutter": { + "prefab": { + "prefab_name": "ItemKitWindowShutter", + "prefab_hash": 1779979754, + "desc": "", + "name": "Kit (Window Shutter)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemLabeller": { + "prefab": { + "prefab_name": "ItemLabeller", + "prefab_hash": -743968726, + "desc": "A labeller lets you set names and values on a variety of devices and structures, including Console and Logic.", + "name": "Labeller" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemLaptop": { + "prefab": { + "prefab_name": "ItemLaptop", + "prefab_hash": 141535121, + "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", + "name": "Laptop" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "PressureExternal": "Read", + "On": "ReadWrite", + "TemperatureExternal": "Read", + "PositionX": "Read", + "PositionY": "Read", + "PositionZ": "Read", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": true, + "circuit_holder": true + }, + "slots": [ + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + }, + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Motherboard", + "typ": "Motherboard" + } + ] + }, + "ItemLeadIngot": { + "prefab": { + "prefab_name": "ItemLeadIngot", + "prefab_hash": 2134647745, + "desc": "", + "name": "Ingot (Lead)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Lead": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + } + }, + "ItemLeadOre": { + "prefab": { + "prefab_name": "ItemLeadOre", + "prefab_hash": -190236170, + "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.", + "name": "Ore (Lead)" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Lead": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + } + }, + "ItemLightSword": { + "prefab": { + "prefab_name": "ItemLightSword", + "prefab_hash": 1949076595, + "desc": "A charming, if useless, pseudo-weapon. (Creative only.)", + "name": "Light Sword" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemLiquidCanisterEmpty": { + "prefab": { + "prefab_name": "ItemLiquidCanisterEmpty", + "prefab_hash": -185207387, + "desc": "", + "name": "Liquid Canister" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "LiquidCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.05 + }, + "internal_atmo_info": { + "volume": 12.1 + } + }, + "ItemLiquidCanisterSmart": { + "prefab": { + "prefab_name": "ItemLiquidCanisterSmart", + "prefab_hash": 777684475, + "desc": "0.Mode0\n1.Mode1", + "name": "Liquid Canister (Smart)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "LiquidCanister", + "sorting_class": "Atmospherics" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "internal_atmo_info": { + "volume": 18.1 + } + }, + "ItemLiquidDrain": { + "prefab": { + "prefab_name": "ItemLiquidDrain", + "prefab_hash": 2036225202, + "desc": "", + "name": "Kit (Liquid Drain)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemLiquidPipeAnalyzer": { + "prefab": { + "prefab_name": "ItemLiquidPipeAnalyzer", + "prefab_hash": 226055671, + "desc": "", + "name": "Kit (Liquid Pipe Analyzer)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemLiquidPipeHeater": { + "prefab": { + "prefab_name": "ItemLiquidPipeHeater", + "prefab_hash": -248475032, + "desc": "Creates a Pipe Heater (Liquid).", + "name": "Pipe Heater Kit (Liquid)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemLiquidPipeValve": { + "prefab": { + "prefab_name": "ItemLiquidPipeValve", + "prefab_hash": -2126113312, + "desc": "This kit creates a Liquid Valve.", + "name": "Kit (Liquid Pipe Valve)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemLiquidPipeVolumePump": { + "prefab": { + "prefab_name": "ItemLiquidPipeVolumePump", + "prefab_hash": -2106280569, + "desc": "", + "name": "Kit (Liquid Volume Pump)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemLiquidTankStorage": { + "prefab": { + "prefab_name": "ItemLiquidTankStorage", + "prefab_hash": 2037427578, + "desc": "This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister.", + "name": "Kit (Liquid Canister Storage)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemMKIIAngleGrinder": { + "prefab": { + "prefab_name": "ItemMKIIAngleGrinder", + "prefab_hash": 240174650, + "desc": "Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure.", + "name": "Mk II Angle Grinder" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemMKIIArcWelder": { + "prefab": { + "prefab_name": "ItemMKIIArcWelder", + "prefab_hash": -2061979347, + "desc": "", + "name": "Mk II Arc Welder" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemMKIICrowbar": { + "prefab": { + "prefab_name": "ItemMKIICrowbar", + "prefab_hash": 1440775434, + "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.", + "name": "Mk II Crowbar" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + } + }, + "ItemMKIIDrill": { + "prefab": { + "prefab_name": "ItemMKIIDrill", + "prefab_hash": 324791548, + "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.", + "name": "Mk II Drill" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Activate": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemMKIIDuctTape": { + "prefab": { + "prefab_name": "ItemMKIIDuctTape", + "prefab_hash": 388774906, + "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.", + "name": "Mk II Duct Tape" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + } + }, + "ItemMKIIMiningDrill": { + "prefab": { + "prefab_name": "ItemMKIIMiningDrill", + "prefab_hash": -1875271296, + "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.", + "name": "Mk II Mining Drill" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Default", + "1": "Flatten" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemMKIIScrewdriver": { + "prefab": { + "prefab_name": "ItemMKIIScrewdriver", + "prefab_hash": -2015613246, + "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.", + "name": "Mk II Screwdriver" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + } + }, + "ItemMKIIWireCutters": { + "prefab": { + "prefab_name": "ItemMKIIWireCutters", + "prefab_hash": -178893251, + "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.", + "name": "Mk II Wire Cutters" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + } + }, + "ItemMKIIWrench": { + "prefab": { + "prefab_name": "ItemMKIIWrench", + "prefab_hash": 1862001680, + "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.", + "name": "Mk II Wrench" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + } + }, + "ItemMarineBodyArmor": { + "prefab": { + "prefab_name": "ItemMarineBodyArmor", + "prefab_hash": 1399098998, + "desc": "", + "name": "Marine Armor" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Suit", + "sorting_class": "Clothing" + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, + "ItemMarineHelmet": { + "prefab": { + "prefab_name": "ItemMarineHelmet", + "prefab_hash": 1073631646, + "desc": "", + "name": "Marine Helmet" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Helmet", + "sorting_class": "Clothing" + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemMilk": { + "prefab": { + "prefab_name": "ItemMilk", + "prefab_hash": 1327248310, + "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.", + "name": "Milk" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "Milk": 1.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + } + }, + "ItemMiningBackPack": { + "prefab": { + "prefab_name": "ItemMiningBackPack", + "prefab_hash": -1650383245, + "desc": "", + "name": "Mining Backpack" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Back", + "sorting_class": "Clothing" + }, + "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" + } + ] + }, + "ItemMiningBelt": { + "prefab": { + "prefab_name": "ItemMiningBelt", + "prefab_hash": -676435305, + "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.", + "name": "Mining Belt" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Belt", + "sorting_class": "Clothing" + }, + "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" + } + ] + }, + "ItemMiningBeltMKII": { + "prefab": { + "prefab_name": "ItemMiningBeltMKII", + "prefab_hash": 1470787934, + "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. ", + "name": "Mining Belt MK II" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Belt", + "sorting_class": "Clothing" + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": 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" + }, + { + "name": "Ore", + "typ": "Ore" + }, + { + "name": "Ore", + "typ": "Ore" + }, + { + "name": "Ore", + "typ": "Ore" + }, + { + "name": "Ore", + "typ": "Ore" + }, + { + "name": "Ore", + "typ": "Ore" + } + ] + }, + "ItemMiningCharge": { + "prefab": { + "prefab_name": "ItemMiningCharge", + "prefab_hash": 15829510, + "desc": "A low cost, high yield explosive with a 10 second timer.", + "name": "Mining Charge" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemMiningDrill": { + "prefab": { + "prefab_name": "ItemMiningDrill", + "prefab_hash": 1055173191, + "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.'", + "name": "Mining Drill" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Default", + "1": "Flatten" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemMiningDrillHeavy": { + "prefab": { + "prefab_name": "ItemMiningDrillHeavy", + "prefab_hash": -1663349918, + "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.", + "name": "Mining Drill (Heavy)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Default", + "1": "Flatten" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemMiningDrillPneumatic": { + "prefab": { + "prefab_name": "ItemMiningDrillPneumatic", + "prefab_hash": 1258187304, + "desc": "0.Default\n1.Flatten", + "name": "Pneumatic Mining Drill" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "GasCanister" + } + ] + }, + "ItemMkIIToolbelt": { + "prefab": { + "prefab_name": "ItemMkIIToolbelt", + "prefab_hash": 1467558064, + "desc": "A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy.", + "name": "Tool Belt MK II" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Belt", + "sorting_class": "Clothing" + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": 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" + }, + { + "name": "Tool", + "typ": "Tool" + }, + { + "name": "Tool", + "typ": "Tool" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, + "ItemMuffin": { + "prefab": { + "prefab_name": "ItemMuffin", + "prefab_hash": -1864982322, + "desc": "A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin.", + "name": "Muffin" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemMushroom": { + "prefab": { + "prefab_name": "ItemMushroom", + "prefab_hash": 2044798572, + "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.", + "name": "Mushroom" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 20, + "reagents": { + "Mushroom": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemNVG": { + "prefab": { + "prefab_name": "ItemNVG", + "prefab_hash": 982514123, + "desc": "", + "name": "Night Vision Goggles" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Glasses", + "sorting_class": "Clothing" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemNickelIngot": { + "prefab": { + "prefab_name": "ItemNickelIngot", + "prefab_hash": -1406385572, + "desc": "", + "name": "Ingot (Nickel)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Nickel": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + } + }, + "ItemNickelOre": { + "prefab": { + "prefab_name": "ItemNickelOre", + "prefab_hash": 1830218956, + "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.", + "name": "Ore (Nickel)" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Nickel": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + } + }, + "ItemNitrice": { + "prefab": { + "prefab_name": "ItemNitrice", + "prefab_hash": -1499471529, + "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.", + "name": "Ice (Nitrice)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemOxite": { + "prefab": { + "prefab_name": "ItemOxite", + "prefab_hash": -1805394113, + "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.", + "name": "Ice (Oxite)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemPassiveVent": { + "prefab": { + "prefab_name": "ItemPassiveVent", + "prefab_hash": 238631271, + "desc": "This kit creates a Passive Vent among other variants.", + "name": "Passive Vent" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemPassiveVentInsulated": { + "prefab": { + "prefab_name": "ItemPassiveVentInsulated", + "prefab_hash": -1397583760, + "desc": "", + "name": "Kit (Insulated Passive Vent)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemPeaceLily": { + "prefab": { + "prefab_name": "ItemPeaceLily", + "prefab_hash": 2042955224, + "desc": "A fetching lily with greater resistance to cold temperatures.", + "name": "Peace Lily" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemPickaxe": { + "prefab": { + "prefab_name": "ItemPickaxe", + "prefab_hash": -913649823, + "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.", + "name": "Pickaxe" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + } + }, + "ItemPillHeal": { + "prefab": { + "prefab_name": "ItemPillHeal", + "prefab_hash": 1118069417, + "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.", + "name": "Pill (Medical)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemPillStun": { + "prefab": { + "prefab_name": "ItemPillStun", + "prefab_hash": 418958601, + "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.", + "name": "Pill (Paralysis)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemPipeAnalyizer": { + "prefab": { + "prefab_name": "ItemPipeAnalyizer", + "prefab_hash": -767597887, + "desc": "This kit creates a Pipe Analyzer.", + "name": "Kit (Pipe Analyzer)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemPipeCowl": { + "prefab": { + "prefab_name": "ItemPipeCowl", + "prefab_hash": -38898376, + "desc": "This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres.", + "name": "Pipe Cowl" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 20, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemPipeDigitalValve": { + "prefab": { + "prefab_name": "ItemPipeDigitalValve", + "prefab_hash": -1532448832, + "desc": "This kit creates a Digital Valve.", + "name": "Kit (Digital Valve)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemPipeGasMixer": { + "prefab": { + "prefab_name": "ItemPipeGasMixer", + "prefab_hash": -1134459463, + "desc": "This kit creates a Gas Mixer.", + "name": "Kit (Gas Mixer)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemPipeHeater": { + "prefab": { + "prefab_name": "ItemPipeHeater", + "prefab_hash": -1751627006, + "desc": "Creates a Pipe Heater (Gas).", + "name": "Pipe Heater Kit (Gas)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemPipeIgniter": { + "prefab": { + "prefab_name": "ItemPipeIgniter", + "prefab_hash": 1366030599, + "desc": "", + "name": "Kit (Pipe Igniter)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemPipeLabel": { + "prefab": { + "prefab_name": "ItemPipeLabel", + "prefab_hash": 391769637, + "desc": "This kit creates a Pipe Label.", + "name": "Kit (Pipe Label)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 20, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemPipeLiquidRadiator": { + "prefab": { + "prefab_name": "ItemPipeLiquidRadiator", + "prefab_hash": -906521320, + "desc": "This kit creates a Liquid Pipe Convection Radiator.", + "name": "Kit (Liquid Radiator)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemPipeMeter": { + "prefab": { + "prefab_name": "ItemPipeMeter", + "prefab_hash": 1207939683, + "desc": "This kit creates a Pipe Meter.", + "name": "Kit (Pipe Meter)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemPipeRadiator": { + "prefab": { + "prefab_name": "ItemPipeRadiator", + "prefab_hash": -1796655088, + "desc": "This kit creates a Pipe Convection Radiator.", + "name": "Kit (Radiator)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemPipeValve": { + "prefab": { + "prefab_name": "ItemPipeValve", + "prefab_hash": 799323450, + "desc": "This kit creates a Valve.", + "name": "Kit (Pipe Valve)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemPipeVolumePump": { + "prefab": { + "prefab_name": "ItemPipeVolumePump", + "prefab_hash": -1766301997, + "desc": "This kit creates a Volume Pump.", + "name": "Kit (Volume Pump)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemPlainCake": { + "prefab": { + "prefab_name": "ItemPlainCake", + "prefab_hash": -1108244510, + "desc": "", + "name": "Cake" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemPlantEndothermic_Creative": { + "prefab": { + "prefab_name": "ItemPlantEndothermic_Creative", + "prefab_hash": -1159179557, + "desc": "", + "name": "Endothermic Plant Creative" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemPlantEndothermic_Genepool1": { + "prefab": { + "prefab_name": "ItemPlantEndothermic_Genepool1", + "prefab_hash": 851290561, + "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.", + "name": "Winterspawn (Alpha variant)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemPlantEndothermic_Genepool2": { + "prefab": { + "prefab_name": "ItemPlantEndothermic_Genepool2", + "prefab_hash": -1414203269, + "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.", + "name": "Winterspawn (Beta variant)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemPlantSampler": { + "prefab": { + "prefab_name": "ItemPlantSampler", + "prefab_hash": 173023800, + "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.", + "name": "Plant Sampler" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Activate": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemPlantSwitchGrass": { + "prefab": { + "prefab_name": "ItemPlantSwitchGrass", + "prefab_hash": -532672323, + "desc": "", + "name": "Switch Grass" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Default" + } + }, + "ItemPlantThermogenic_Creative": { + "prefab": { + "prefab_name": "ItemPlantThermogenic_Creative", + "prefab_hash": -1208890208, + "desc": "", + "name": "Thermogenic Plant Creative" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemPlantThermogenic_Genepool1": { + "prefab": { + "prefab_name": "ItemPlantThermogenic_Genepool1", + "prefab_hash": -177792789, + "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.", + "name": "Hades Flower (Alpha strain)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemPlantThermogenic_Genepool2": { + "prefab": { + "prefab_name": "ItemPlantThermogenic_Genepool2", + "prefab_hash": 1819167057, + "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.", + "name": "Hades Flower (Beta strain)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemPlasticSheets": { + "prefab": { + "prefab_name": "ItemPlasticSheets", + "prefab_hash": 662053345, + "desc": "", + "name": "Plastic Sheets" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "None", + "sorting_class": "Resources" + } + }, + "ItemPotato": { + "prefab": { + "prefab_name": "ItemPotato", + "prefab_hash": 1929046963, + "desc": " Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies.", + "name": "Potato" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 20, + "reagents": { + "Potato": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemPotatoBaked": { + "prefab": { + "prefab_name": "ItemPotatoBaked", + "prefab_hash": -2111886401, + "desc": "", + "name": "Baked Potato" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 1, + "reagents": { + "Potato": 1.0 + }, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemPowerConnector": { + "prefab": { + "prefab_name": "ItemPowerConnector", + "prefab_hash": 839924019, + "desc": "This kit creates a Power Connector.", + "name": "Kit (Power Connector)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemPumpkin": { + "prefab": { + "prefab_name": "ItemPumpkin", + "prefab_hash": 1277828144, + "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.", + "name": "Pumpkin" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 20, + "reagents": { + "Pumpkin": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemPumpkinPie": { + "prefab": { + "prefab_name": "ItemPumpkinPie", + "prefab_hash": 62768076, + "desc": "", + "name": "Pumpkin Pie" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemPumpkinSoup": { + "prefab": { + "prefab_name": "ItemPumpkinSoup", + "prefab_hash": 1277979876, + "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", + "name": "Pumpkin Soup" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemPureIce": { + "prefab": { + "prefab_name": "ItemPureIce", + "prefab_hash": -1616308158, + "desc": "A frozen chunk of pure Water", + "name": "Pure Ice Water" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemPureIceCarbonDioxide": { + "prefab": { + "prefab_name": "ItemPureIceCarbonDioxide", + "prefab_hash": -1251009404, + "desc": "A frozen chunk of pure Carbon Dioxide", + "name": "Pure Ice Carbon Dioxide" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemPureIceHydrogen": { + "prefab": { + "prefab_name": "ItemPureIceHydrogen", + "prefab_hash": 944530361, + "desc": "A frozen chunk of pure Hydrogen", + "name": "Pure Ice Hydrogen" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemPureIceLiquidCarbonDioxide": { + "prefab": { + "prefab_name": "ItemPureIceLiquidCarbonDioxide", + "prefab_hash": -1715945725, + "desc": "A frozen chunk of pure Liquid Carbon Dioxide", + "name": "Pure Ice Liquid Carbon Dioxide" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemPureIceLiquidHydrogen": { + "prefab": { + "prefab_name": "ItemPureIceLiquidHydrogen", + "prefab_hash": -1044933269, + "desc": "A frozen chunk of pure Liquid Hydrogen", + "name": "Pure Ice Liquid Hydrogen" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemPureIceLiquidNitrogen": { + "prefab": { + "prefab_name": "ItemPureIceLiquidNitrogen", + "prefab_hash": 1674576569, + "desc": "A frozen chunk of pure Liquid Nitrogen", + "name": "Pure Ice Liquid Nitrogen" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemPureIceLiquidNitrous": { + "prefab": { + "prefab_name": "ItemPureIceLiquidNitrous", + "prefab_hash": 1428477399, + "desc": "A frozen chunk of pure Liquid Nitrous Oxide", + "name": "Pure Ice Liquid Nitrous" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemPureIceLiquidOxygen": { + "prefab": { + "prefab_name": "ItemPureIceLiquidOxygen", + "prefab_hash": 541621589, + "desc": "A frozen chunk of pure Liquid Oxygen", + "name": "Pure Ice Liquid Oxygen" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemPureIceLiquidPollutant": { + "prefab": { + "prefab_name": "ItemPureIceLiquidPollutant", + "prefab_hash": -1748926678, + "desc": "A frozen chunk of pure Liquid Pollutant", + "name": "Pure Ice Liquid Pollutant" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemPureIceLiquidVolatiles": { + "prefab": { + "prefab_name": "ItemPureIceLiquidVolatiles", + "prefab_hash": -1306628937, + "desc": "A frozen chunk of pure Liquid Volatiles", + "name": "Pure Ice Liquid Volatiles" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemPureIceNitrogen": { + "prefab": { + "prefab_name": "ItemPureIceNitrogen", + "prefab_hash": -1708395413, + "desc": "A frozen chunk of pure Nitrogen", + "name": "Pure Ice Nitrogen" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemPureIceNitrous": { + "prefab": { + "prefab_name": "ItemPureIceNitrous", + "prefab_hash": 386754635, + "desc": "A frozen chunk of pure Nitrous Oxide", + "name": "Pure Ice NitrousOxide" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemPureIceOxygen": { + "prefab": { + "prefab_name": "ItemPureIceOxygen", + "prefab_hash": -1150448260, + "desc": "A frozen chunk of pure Oxygen", + "name": "Pure Ice Oxygen" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemPureIcePollutant": { + "prefab": { + "prefab_name": "ItemPureIcePollutant", + "prefab_hash": -1755356, + "desc": "A frozen chunk of pure Pollutant", + "name": "Pure Ice Pollutant" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemPureIcePollutedWater": { + "prefab": { + "prefab_name": "ItemPureIcePollutedWater", + "prefab_hash": -2073202179, + "desc": "A frozen chunk of Polluted Water", + "name": "Pure Ice Polluted Water" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemPureIceSteam": { + "prefab": { + "prefab_name": "ItemPureIceSteam", + "prefab_hash": -874791066, + "desc": "A frozen chunk of pure Steam", + "name": "Pure Ice Steam" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemPureIceVolatiles": { + "prefab": { + "prefab_name": "ItemPureIceVolatiles", + "prefab_hash": -633723719, + "desc": "A frozen chunk of pure Volatiles", + "name": "Pure Ice Volatiles" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemRTG": { + "prefab": { + "prefab_name": "ItemRTG", + "prefab_hash": 495305053, + "desc": "This kit creates that miracle of modern science, a Kit (Creative RTG).", + "name": "Kit (Creative RTG)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemRTGSurvival": { + "prefab": { + "prefab_name": "ItemRTGSurvival", + "prefab_hash": 1817645803, + "desc": "This kit creates a Kit (RTG).", + "name": "Kit (RTG)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemReagentMix": { + "prefab": { + "prefab_name": "ItemReagentMix", + "prefab_hash": -1641500434, + "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.", + "name": "Reagent Mix" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ores" + } + }, + "ItemRemoteDetonator": { + "prefab": { + "prefab_name": "ItemRemoteDetonator", + "prefab_hash": 678483886, + "desc": "", + "name": "Remote Detonator" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemReusableFireExtinguisher": { + "prefab": { + "prefab_name": "ItemReusableFireExtinguisher", + "prefab_hash": -1773192190, + "desc": "Requires a canister filled with any inert liquid to opperate.", + "name": "Fire Extinguisher (Reusable)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "slots": [ + { + "name": "Liquid Canister", + "typ": "LiquidCanister" + } + ] + }, + "ItemRice": { + "prefab": { + "prefab_name": "ItemRice", + "prefab_hash": 658916791, + "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.", + "name": "Rice" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Rice": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemRoadFlare": { + "prefab": { + "prefab_name": "ItemRoadFlare", + "prefab_hash": 871811564, + "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.", + "name": "Road Flare" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 20, + "slot_class": "Flare", + "sorting_class": "Default" + } + }, + "ItemRocketMiningDrillHead": { + "prefab": { + "prefab_name": "ItemRocketMiningDrillHead", + "prefab_hash": 2109945337, + "desc": "Replaceable drill head for Rocket Miner", + "name": "Mining-Drill Head (Basic)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 100, + "slot_class": "DrillHead", + "sorting_class": "Default" + } + }, + "ItemRocketMiningDrillHeadDurable": { + "prefab": { + "prefab_name": "ItemRocketMiningDrillHeadDurable", + "prefab_hash": 1530764483, + "desc": "", + "name": "Mining-Drill Head (Durable)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 100, + "slot_class": "DrillHead", + "sorting_class": "Default" + } + }, + "ItemRocketMiningDrillHeadHighSpeedIce": { + "prefab": { + "prefab_name": "ItemRocketMiningDrillHeadHighSpeedIce", + "prefab_hash": 653461728, + "desc": "", + "name": "Mining-Drill Head (High Speed Ice)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 100, + "slot_class": "DrillHead", + "sorting_class": "Default" + } + }, + "ItemRocketMiningDrillHeadHighSpeedMineral": { + "prefab": { + "prefab_name": "ItemRocketMiningDrillHeadHighSpeedMineral", + "prefab_hash": 1440678625, + "desc": "", + "name": "Mining-Drill Head (High Speed Mineral)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 100, + "slot_class": "DrillHead", + "sorting_class": "Default" + } + }, + "ItemRocketMiningDrillHeadIce": { + "prefab": { + "prefab_name": "ItemRocketMiningDrillHeadIce", + "prefab_hash": -380904592, + "desc": "", + "name": "Mining-Drill Head (Ice)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 100, + "slot_class": "DrillHead", + "sorting_class": "Default" + } + }, + "ItemRocketMiningDrillHeadLongTerm": { + "prefab": { + "prefab_name": "ItemRocketMiningDrillHeadLongTerm", + "prefab_hash": -684020753, + "desc": "", + "name": "Mining-Drill Head (Long Term)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 100, + "slot_class": "DrillHead", + "sorting_class": "Default" + } + }, + "ItemRocketMiningDrillHeadMineral": { + "prefab": { + "prefab_name": "ItemRocketMiningDrillHeadMineral", + "prefab_hash": 1083675581, + "desc": "", + "name": "Mining-Drill Head (Mineral)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 100, + "slot_class": "DrillHead", + "sorting_class": "Default" + } + }, + "ItemRocketScanningHead": { + "prefab": { + "prefab_name": "ItemRocketScanningHead", + "prefab_hash": -1198702771, + "desc": "", + "name": "Rocket Scanner Head" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "ScanningHead", + "sorting_class": "Default" + } + }, + "ItemScanner": { + "prefab": { + "prefab_name": "ItemScanner", + "prefab_hash": 1661270830, + "desc": "A mysterious piece of technology, rumored to have Zrillian origins.", + "name": "Handheld Scanner" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemScrewdriver": { + "prefab": { + "prefab_name": "ItemScrewdriver", + "prefab_hash": 687940869, + "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.", + "name": "Screwdriver" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + } + }, + "ItemSecurityCamera": { + "prefab": { + "prefab_name": "ItemSecurityCamera", + "prefab_hash": -1981101032, + "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.", + "name": "Security Camera" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemSensorLenses": { + "prefab": { + "prefab_name": "ItemSensorLenses", + "prefab_hash": -1176140051, + "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.", + "name": "Sensor Lenses" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Glasses", + "sorting_class": "Clothing" + }, + "logic": { + "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", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Sensor Processing Unit", + "typ": "SensorProcessingUnit" + } + ] + }, + "ItemSensorProcessingUnitCelestialScanner": { + "prefab": { + "prefab_name": "ItemSensorProcessingUnitCelestialScanner", + "prefab_hash": -1154200014, + "desc": "", + "name": "Sensor Processing Unit (Celestial Scanner)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "SensorProcessingUnit", + "sorting_class": "Default" + } + }, + "ItemSensorProcessingUnitMesonScanner": { + "prefab": { + "prefab_name": "ItemSensorProcessingUnitMesonScanner", + "prefab_hash": -1730464583, + "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.", + "name": "Sensor Processing Unit (T-Ray Scanner)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "SensorProcessingUnit", + "sorting_class": "Default" + } + }, + "ItemSensorProcessingUnitOreScanner": { + "prefab": { + "prefab_name": "ItemSensorProcessingUnitOreScanner", + "prefab_hash": -1219128491, + "desc": "The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD.", + "name": "Sensor Processing Unit (Ore Scanner)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "SensorProcessingUnit", + "sorting_class": "Default" + } + }, + "ItemSiliconIngot": { + "prefab": { + "prefab_name": "ItemSiliconIngot", + "prefab_hash": -290196476, + "desc": "", + "name": "Ingot (Silicon)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Silicon": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + } + }, + "ItemSiliconOre": { + "prefab": { + "prefab_name": "ItemSiliconOre", + "prefab_hash": 1103972403, + "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.", + "name": "Ore (Silicon)" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Silicon": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + } + }, + "ItemSilverIngot": { + "prefab": { + "prefab_name": "ItemSilverIngot", + "prefab_hash": -929742000, + "desc": "", + "name": "Ingot (Silver)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Silver": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + } + }, + "ItemSilverOre": { + "prefab": { + "prefab_name": "ItemSilverOre", + "prefab_hash": -916518678, + "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.", + "name": "Ore (Silver)" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Silver": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + } + }, + "ItemSolderIngot": { + "prefab": { + "prefab_name": "ItemSolderIngot", + "prefab_hash": -82508479, + "desc": "", + "name": "Ingot (Solder)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Solder": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + } + }, + "ItemSolidFuel": { + "prefab": { + "prefab_name": "ItemSolidFuel", + "prefab_hash": -365253871, + "desc": "", + "name": "Solid Fuel (Hydrocarbon)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Hydrocarbon": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Resources" + } + }, + "ItemSoundCartridgeBass": { + "prefab": { + "prefab_name": "ItemSoundCartridgeBass", + "prefab_hash": -1883441704, + "desc": "", + "name": "Sound Cartridge Bass" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "SoundCartridge", + "sorting_class": "Default" + } + }, + "ItemSoundCartridgeDrums": { + "prefab": { + "prefab_name": "ItemSoundCartridgeDrums", + "prefab_hash": -1901500508, + "desc": "", + "name": "Sound Cartridge Drums" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "SoundCartridge", + "sorting_class": "Default" + } + }, + "ItemSoundCartridgeLeads": { + "prefab": { + "prefab_name": "ItemSoundCartridgeLeads", + "prefab_hash": -1174735962, + "desc": "", + "name": "Sound Cartridge Leads" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "SoundCartridge", + "sorting_class": "Default" + } + }, + "ItemSoundCartridgeSynth": { + "prefab": { + "prefab_name": "ItemSoundCartridgeSynth", + "prefab_hash": -1971419310, + "desc": "", + "name": "Sound Cartridge Synth" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "SoundCartridge", + "sorting_class": "Default" + } + }, + "ItemSoyOil": { + "prefab": { + "prefab_name": "ItemSoyOil", + "prefab_hash": 1387403148, + "desc": "", + "name": "Soy Oil" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "Oil": 1.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + } + }, + "ItemSoybean": { + "prefab": { + "prefab_name": "ItemSoybean", + "prefab_hash": 1924673028, + "desc": " Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil", + "name": "Soybean" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "Soy": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemSpaceCleaner": { + "prefab": { + "prefab_name": "ItemSpaceCleaner", + "prefab_hash": -1737666461, + "desc": "There was a time when humanity really wanted to keep space clean. That time has passed.", + "name": "Space Cleaner" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ItemSpaceHelmet": { + "prefab": { + "prefab_name": "ItemSpaceHelmet", + "prefab_hash": 714830451, + "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.", + "name": "Space Helmet" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Helmet", + "sorting_class": "Clothing" + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "internal_atmo_info": { + "volume": 3.0 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "ItemSpaceIce": { + "prefab": { + "prefab_name": "ItemSpaceIce", + "prefab_hash": 675686937, + "desc": "", + "name": "Space Ice" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 100, + "slot_class": "Ore", + "sorting_class": "Ores" + } + }, + "ItemSpaceOre": { + "prefab": { + "prefab_name": "ItemSpaceOre", + "prefab_hash": 2131916219, + "desc": "Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores.", + "name": "Dirty Ore" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 100, + "slot_class": "Ore", + "sorting_class": "Ores" + } + }, + "ItemSpacepack": { + "prefab": { + "prefab_name": "ItemSpacepack", + "prefab_hash": -1260618380, + "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.", + "name": "Spacepack" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Back", + "sorting_class": "Clothing" + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Activate": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "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" + } + ] + }, + "ItemSprayCanBlack": { + "prefab": { + "prefab_name": "ItemSprayCanBlack", + "prefab_hash": -688107795, + "desc": "Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses.", + "name": "Spray Paint (Black)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Bottle", + "sorting_class": "Default" + } + }, + "ItemSprayCanBlue": { + "prefab": { + "prefab_name": "ItemSprayCanBlue", + "prefab_hash": -498464883, + "desc": "What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'", + "name": "Spray Paint (Blue)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Bottle", + "sorting_class": "Default" + } + }, + "ItemSprayCanBrown": { + "prefab": { + "prefab_name": "ItemSprayCanBrown", + "prefab_hash": 845176977, + "desc": "In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed.", + "name": "Spray Paint (Brown)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Bottle", + "sorting_class": "Default" + } + }, + "ItemSprayCanGreen": { + "prefab": { + "prefab_name": "ItemSprayCanGreen", + "prefab_hash": -1880941852, + "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.", + "name": "Spray Paint (Green)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Bottle", + "sorting_class": "Default" + } + }, + "ItemSprayCanGrey": { + "prefab": { + "prefab_name": "ItemSprayCanGrey", + "prefab_hash": -1645266981, + "desc": "Arguably the most popular color in the universe, grey was invented so designers had something to do.", + "name": "Spray Paint (Grey)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Bottle", + "sorting_class": "Default" + } + }, + "ItemSprayCanKhaki": { + "prefab": { + "prefab_name": "ItemSprayCanKhaki", + "prefab_hash": 1918456047, + "desc": "Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode.", + "name": "Spray Paint (Khaki)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Bottle", + "sorting_class": "Default" + } + }, + "ItemSprayCanOrange": { + "prefab": { + "prefab_name": "ItemSprayCanOrange", + "prefab_hash": -158007629, + "desc": "Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove.", + "name": "Spray Paint (Orange)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Bottle", + "sorting_class": "Default" + } + }, + "ItemSprayCanPink": { + "prefab": { + "prefab_name": "ItemSprayCanPink", + "prefab_hash": 1344257263, + "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.", + "name": "Spray Paint (Pink)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Bottle", + "sorting_class": "Default" + } + }, + "ItemSprayCanPurple": { + "prefab": { + "prefab_name": "ItemSprayCanPurple", + "prefab_hash": 30686509, + "desc": "Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong.", + "name": "Spray Paint (Purple)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Bottle", + "sorting_class": "Default" + } + }, + "ItemSprayCanRed": { + "prefab": { + "prefab_name": "ItemSprayCanRed", + "prefab_hash": 1514393921, + "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.", + "name": "Spray Paint (Red)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Bottle", + "sorting_class": "Default" + } + }, + "ItemSprayCanWhite": { + "prefab": { + "prefab_name": "ItemSprayCanWhite", + "prefab_hash": 498481505, + "desc": "White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff.", + "name": "Spray Paint (White)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Bottle", + "sorting_class": "Default" + } + }, + "ItemSprayCanYellow": { + "prefab": { + "prefab_name": "ItemSprayCanYellow", + "prefab_hash": 995468116, + "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.", + "name": "Spray Paint (Yellow)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Bottle", + "sorting_class": "Default" + } + }, + "ItemSprayGun": { + "prefab": { + "prefab_name": "ItemSprayGun", + "prefab_hash": 1289723966, + "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.", + "name": "Spray Gun" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "slots": [ + { + "name": "Spray Can", + "typ": "Bottle" + } + ] + }, + "ItemSteelFrames": { + "prefab": { + "prefab_name": "ItemSteelFrames", + "prefab_hash": -1448105779, + "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.", + "name": "Steel Frames" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 30, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemSteelIngot": { + "prefab": { + "prefab_name": "ItemSteelIngot", + "prefab_hash": -654790771, + "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.", + "name": "Ingot (Steel)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Steel": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + } + }, + "ItemSteelSheets": { + "prefab": { + "prefab_name": "ItemSteelSheets", + "prefab_hash": 38555961, + "desc": "An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types.", + "name": "Steel Sheets" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "None", + "sorting_class": "Resources" + } + }, + "ItemStelliteGlassSheets": { + "prefab": { + "prefab_name": "ItemStelliteGlassSheets", + "prefab_hash": -2038663432, + "desc": "A stronger glass substitute.", + "name": "Stellite Glass Sheets" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "None", + "sorting_class": "Resources" + } + }, + "ItemStelliteIngot": { + "prefab": { + "prefab_name": "ItemStelliteIngot", + "prefab_hash": -1897868623, + "desc": "", + "name": "Ingot (Stellite)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Stellite": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + } + }, + "ItemSugar": { + "prefab": { + "prefab_name": "ItemSugar", + "prefab_hash": 2111910840, + "desc": "", + "name": "Sugar" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Sugar": 10.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + } + }, + "ItemSugarCane": { + "prefab": { + "prefab_name": "ItemSugarCane", + "prefab_hash": -1335056202, + "desc": "", + "name": "Sugarcane" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "Sugar": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemSuitModCryogenicUpgrade": { + "prefab": { + "prefab_name": "ItemSuitModCryogenicUpgrade", + "prefab_hash": -1274308304, + "desc": "Enables suits with basic cooling functionality to work with cryogenic liquid.", + "name": "Cryogenic Suit Upgrade" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "SuitMod", + "sorting_class": "Default" + } + }, + "ItemTablet": { + "prefab": { + "prefab_name": "ItemTablet", + "prefab_hash": -229808600, + "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.", + "name": "Handheld Tablet" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "logic": { + "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", + "Error": "Read", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Cartridge", + "typ": "Cartridge" + } + ] + }, + "ItemTerrainManipulator": { + "prefab": { + "prefab_name": "ItemTerrainManipulator", + "prefab_hash": 111280987, + "desc": "0.Mode0\n1.Mode1", + "name": "Terrain Manipulator" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Default" + }, + "logic": { + "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": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Dirt Canister", + "typ": "Ore" + } + ] + }, + "ItemTomato": { + "prefab": { + "prefab_name": "ItemTomato", + "prefab_hash": -998592080, + "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.", + "name": "Tomato" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 20, + "reagents": { + "Tomato": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemTomatoSoup": { + "prefab": { + "prefab_name": "ItemTomatoSoup", + "prefab_hash": 688734890, + "desc": "Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine.", + "name": "Tomato Soup" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Food" + } + }, + "ItemToolBelt": { + "prefab": { + "prefab_name": "ItemToolBelt", + "prefab_hash": -355127880, + "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.", + "name": "Tool Belt" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Belt", + "sorting_class": "Clothing" + }, + "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" + } + ] + }, + "ItemTropicalPlant": { + "prefab": { + "prefab_name": "ItemTropicalPlant", + "prefab_hash": -800947386, + "desc": "An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants.", + "name": "Tropical Lily" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Resources" + } + }, + "ItemUraniumOre": { + "prefab": { + "prefab_name": "ItemUraniumOre", + "prefab_hash": -1516581844, + "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.", + "name": "Ore (Uranium)" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 50, + "reagents": { + "Uranium": 1.0 + }, + "slot_class": "Ore", + "sorting_class": "Ores" + } + }, + "ItemVolatiles": { + "prefab": { + "prefab_name": "ItemVolatiles", + "prefab_hash": 1253102035, + "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", + "name": "Ice (Volatiles)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 50, + "slot_class": "Ore", + "sorting_class": "Ices" + } + }, + "ItemWallCooler": { + "prefab": { + "prefab_name": "ItemWallCooler", + "prefab_hash": -1567752627, + "desc": "This kit creates a Wall Cooler.", + "name": "Kit (Wall Cooler)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemWallHeater": { + "prefab": { + "prefab_name": "ItemWallHeater", + "prefab_hash": 1880134612, + "desc": "This kit creates a Kit (Wall Heater).", + "name": "Kit (Wall Heater)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemWallLight": { + "prefab": { + "prefab_name": "ItemWallLight", + "prefab_hash": 1108423476, + "desc": "This kit creates any one of ten Kit (Lights) variants.", + "name": "Kit (Lights)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemWaspaloyIngot": { + "prefab": { + "prefab_name": "ItemWaspaloyIngot", + "prefab_hash": 156348098, + "desc": "", + "name": "Ingot (Waspaloy)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 500, + "reagents": { + "Waspaloy": 1.0 + }, + "slot_class": "Ingot", + "sorting_class": "Resources" + } + }, + "ItemWaterBottle": { + "prefab": { + "prefab_name": "ItemWaterBottle", + "prefab_hash": 107741229, + "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.", + "name": "Water Bottle" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "LiquidBottle", + "sorting_class": "Default" + } + }, + "ItemWaterPipeDigitalValve": { + "prefab": { + "prefab_name": "ItemWaterPipeDigitalValve", + "prefab_hash": 309693520, + "desc": "", + "name": "Kit (Liquid Digital Valve)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemWaterPipeMeter": { + "prefab": { + "prefab_name": "ItemWaterPipeMeter", + "prefab_hash": -90898877, + "desc": "", + "name": "Kit (Liquid Pipe Meter)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemWaterWallCooler": { + "prefab": { + "prefab_name": "ItemWaterWallCooler", + "prefab_hash": -1721846327, + "desc": "", + "name": "Kit (Liquid Wall Cooler)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 5, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemWearLamp": { + "prefab": { + "prefab_name": "ItemWearLamp", + "prefab_hash": -598730959, + "desc": "", + "name": "Headlamp" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Helmet", + "sorting_class": "Clothing" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "ItemWeldingTorch": { + "prefab": { + "prefab_name": "ItemWeldingTorch", + "prefab_hash": -2066892079, + "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.", + "name": "Welding Torch" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + }, + "thermal_info": { + "convection_factor": 0.5, + "radiation_factor": 0.5 + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "GasCanister" + } + ] + }, + "ItemWheat": { + "prefab": { + "prefab_name": "ItemWheat", + "prefab_hash": -1057658015, + "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.", + "name": "Wheat" + }, + "item": { + "consumable": false, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "Carbon": 1.0 + }, + "slot_class": "Plant", + "sorting_class": "Default" + } + }, + "ItemWireCutters": { + "prefab": { + "prefab_name": "ItemWireCutters", + "prefab_hash": 1535854074, + "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.", + "name": "Wire Cutters" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + } + }, + "ItemWirelessBatteryCellExtraLarge": { + "prefab": { + "prefab_name": "ItemWirelessBatteryCellExtraLarge", + "prefab_hash": -504717121, + "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", + "name": "Wireless Battery Cell Extra Large" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Battery", + "sorting_class": "Default" + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Mode": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "ItemWreckageAirConditioner1": { + "prefab": { + "prefab_name": "ItemWreckageAirConditioner1", + "prefab_hash": -1826023284, + "desc": "", + "name": "Wreckage Air Conditioner" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Wreckage", + "sorting_class": "Default" + } + }, + "ItemWreckageAirConditioner2": { + "prefab": { + "prefab_name": "ItemWreckageAirConditioner2", + "prefab_hash": 169888054, + "desc": "", + "name": "Wreckage Air Conditioner" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Wreckage", + "sorting_class": "Default" + } + }, + "ItemWreckageHydroponicsTray1": { + "prefab": { + "prefab_name": "ItemWreckageHydroponicsTray1", + "prefab_hash": -310178617, + "desc": "", + "name": "Wreckage Hydroponics Tray" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Wreckage", + "sorting_class": "Default" + } + }, + "ItemWreckageLargeExtendableRadiator01": { + "prefab": { + "prefab_name": "ItemWreckageLargeExtendableRadiator01", + "prefab_hash": -997763, + "desc": "", + "name": "Wreckage Large Extendable Radiator" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Wreckage", + "sorting_class": "Default" + } + }, + "ItemWreckageStructureRTG1": { + "prefab": { + "prefab_name": "ItemWreckageStructureRTG1", + "prefab_hash": 391453348, + "desc": "", + "name": "Wreckage Structure RTG" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Wreckage", + "sorting_class": "Default" + } + }, + "ItemWreckageStructureWeatherStation001": { + "prefab": { + "prefab_name": "ItemWreckageStructureWeatherStation001", + "prefab_hash": -834664349, + "desc": "", + "name": "Wreckage Structure Weather Station" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Wreckage", + "sorting_class": "Default" + } + }, + "ItemWreckageStructureWeatherStation002": { + "prefab": { + "prefab_name": "ItemWreckageStructureWeatherStation002", + "prefab_hash": 1464424921, + "desc": "", + "name": "Wreckage Structure Weather Station" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Wreckage", + "sorting_class": "Default" + } + }, + "ItemWreckageStructureWeatherStation003": { + "prefab": { + "prefab_name": "ItemWreckageStructureWeatherStation003", + "prefab_hash": 542009679, + "desc": "", + "name": "Wreckage Structure Weather Station" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Wreckage", + "sorting_class": "Default" + } + }, + "ItemWreckageStructureWeatherStation004": { + "prefab": { + "prefab_name": "ItemWreckageStructureWeatherStation004", + "prefab_hash": -1104478996, + "desc": "", + "name": "Wreckage Structure Weather Station" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Wreckage", + "sorting_class": "Default" + } + }, + "ItemWreckageStructureWeatherStation005": { + "prefab": { + "prefab_name": "ItemWreckageStructureWeatherStation005", + "prefab_hash": -919745414, + "desc": "", + "name": "Wreckage Structure Weather Station" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Wreckage", + "sorting_class": "Default" + } + }, + "ItemWreckageStructureWeatherStation006": { + "prefab": { + "prefab_name": "ItemWreckageStructureWeatherStation006", + "prefab_hash": 1344576960, + "desc": "", + "name": "Wreckage Structure Weather Station" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Wreckage", + "sorting_class": "Default" + } + }, + "ItemWreckageStructureWeatherStation007": { + "prefab": { + "prefab_name": "ItemWreckageStructureWeatherStation007", + "prefab_hash": 656649558, + "desc": "", + "name": "Wreckage Structure Weather Station" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Wreckage", + "sorting_class": "Default" + } + }, + "ItemWreckageStructureWeatherStation008": { + "prefab": { + "prefab_name": "ItemWreckageStructureWeatherStation008", + "prefab_hash": -1214467897, + "desc": "", + "name": "Wreckage Structure Weather Station" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Wreckage", + "sorting_class": "Default" + } + }, + "ItemWreckageTurbineGenerator1": { + "prefab": { + "prefab_name": "ItemWreckageTurbineGenerator1", + "prefab_hash": -1662394403, + "desc": "", + "name": "Wreckage Turbine Generator" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Wreckage", + "sorting_class": "Default" + } + }, + "ItemWreckageTurbineGenerator2": { + "prefab": { + "prefab_name": "ItemWreckageTurbineGenerator2", + "prefab_hash": 98602599, + "desc": "", + "name": "Wreckage Turbine Generator" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Wreckage", + "sorting_class": "Default" + } + }, + "ItemWreckageTurbineGenerator3": { + "prefab": { + "prefab_name": "ItemWreckageTurbineGenerator3", + "prefab_hash": 1927790321, + "desc": "", + "name": "Wreckage Turbine Generator" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Wreckage", + "sorting_class": "Default" + } + }, + "ItemWreckageWallCooler1": { + "prefab": { + "prefab_name": "ItemWreckageWallCooler1", + "prefab_hash": -1682930158, + "desc": "", + "name": "Wreckage Wall Cooler" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Wreckage", + "sorting_class": "Default" + } + }, + "ItemWreckageWallCooler2": { + "prefab": { + "prefab_name": "ItemWreckageWallCooler2", + "prefab_hash": 45733800, + "desc": "", + "name": "Wreckage Wall Cooler" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Wreckage", + "sorting_class": "Default" + } + }, + "ItemWrench": { + "prefab": { + "prefab_name": "ItemWrench", + "prefab_hash": -1886261558, + "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", + "name": "Wrench" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Tool", + "sorting_class": "Tools" + } + }, + "KitSDBSilo": { + "prefab": { + "prefab_name": "KitSDBSilo", + "prefab_hash": 1932952652, + "desc": "This kit creates a SDB Silo.", + "name": "Kit (SDB Silo)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "KitStructureCombustionCentrifuge": { + "prefab": { + "prefab_name": "KitStructureCombustionCentrifuge", + "prefab_hash": 231903234, + "desc": "", + "name": "Kit (Combustion Centrifuge)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "KitchenTableShort": { + "prefab": { + "prefab_name": "KitchenTableShort", + "prefab_hash": -1427415566, + "desc": "", + "name": "Kitchen Table (Short)" + }, + "structure": { + "small_grid": true + } + }, + "KitchenTableSimpleShort": { + "prefab": { + "prefab_name": "KitchenTableSimpleShort", + "prefab_hash": -78099334, + "desc": "", + "name": "Kitchen Table (Simple Short)" + }, + "structure": { + "small_grid": true + } + }, + "KitchenTableSimpleTall": { + "prefab": { + "prefab_name": "KitchenTableSimpleTall", + "prefab_hash": -1068629349, + "desc": "", + "name": "Kitchen Table (Simple Tall)" + }, + "structure": { + "small_grid": true + } + }, + "KitchenTableTall": { + "prefab": { + "prefab_name": "KitchenTableTall", + "prefab_hash": -1386237782, + "desc": "", + "name": "Kitchen Table (Tall)" + }, + "structure": { + "small_grid": true + } + }, + "Lander": { + "prefab": { + "prefab_name": "Lander", + "prefab_hash": 1605130615, + "desc": "", + "name": "Lander" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "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" + } + ] + }, + "Landingpad_2x2CenterPiece01": { + "prefab": { + "prefab_name": "Landingpad_2x2CenterPiece01", + "prefab_hash": -1295222317, + "desc": "Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors", + "name": "Landingpad 2x2 Center Piece" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": {}, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "Landingpad_BlankPiece": { + "prefab": { + "prefab_name": "Landingpad_BlankPiece", + "prefab_hash": 912453390, + "desc": "", + "name": "Landingpad" + }, + "structure": { + "small_grid": true + } + }, + "Landingpad_CenterPiece01": { + "prefab": { + "prefab_name": "Landingpad_CenterPiece01", + "prefab_hash": 1070143159, + "desc": "The target point where the trader shuttle will land. Requires a clear view of the sky.", + "name": "Landingpad Center" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": {}, + "modes": { + "0": "None", + "1": "NoContact", + "2": "Moving", + "3": "Holding", + "4": "Landed" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [] + }, + "Landingpad_CrossPiece": { + "prefab": { + "prefab_name": "Landingpad_CrossPiece", + "prefab_hash": 1101296153, + "desc": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.", + "name": "Landingpad Cross" + }, + "structure": { + "small_grid": true + } + }, + "Landingpad_DataConnectionPiece": { + "prefab": { + "prefab_name": "Landingpad_DataConnectionPiece", + "prefab_hash": -2066405918, + "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.", + "name": "Landingpad Data And Power" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "None", + "1": "NoContact", + "2": "Moving", + "3": "Holding", + "4": "Landed" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + } + ], + "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 + } + }, + "Landingpad_DiagonalPiece01": { + "prefab": { + "prefab_name": "Landingpad_DiagonalPiece01", + "prefab_hash": 977899131, + "desc": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.", + "name": "Landingpad Diagonal" + }, + "structure": { + "small_grid": true + } + }, + "Landingpad_GasConnectorInwardPiece": { + "prefab": { + "prefab_name": "Landingpad_GasConnectorInwardPiece", + "prefab_hash": 817945707, + "desc": "", + "name": "Landingpad Gas Input" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + } + ], + "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 + } + }, + "Landingpad_GasConnectorOutwardPiece": { + "prefab": { + "prefab_name": "Landingpad_GasConnectorOutwardPiece", + "prefab_hash": -1100218307, + "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.", + "name": "Landingpad Gas Output" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Output" + } + ], + "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 + } + }, + "Landingpad_GasCylinderTankPiece": { + "prefab": { + "prefab_name": "Landingpad_GasCylinderTankPiece", + "prefab_hash": 170818567, + "desc": "Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders.", + "name": "Landingpad Gas Storage" + }, + "structure": { + "small_grid": true + } + }, + "Landingpad_LiquidConnectorInwardPiece": { + "prefab": { + "prefab_name": "Landingpad_LiquidConnectorInwardPiece", + "prefab_hash": -1216167727, + "desc": "", + "name": "Landingpad Liquid Input" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "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 + } + }, + "Landingpad_LiquidConnectorOutwardPiece": { + "prefab": { + "prefab_name": "Landingpad_LiquidConnectorOutwardPiece", + "prefab_hash": -1788929869, + "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.", + "name": "Landingpad Liquid Output" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "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 + } + }, + "Landingpad_StraightPiece01": { + "prefab": { + "prefab_name": "Landingpad_StraightPiece01", + "prefab_hash": -976273247, + "desc": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.", + "name": "Landingpad Straight" + }, + "structure": { + "small_grid": true + } + }, + "Landingpad_TaxiPieceCorner": { + "prefab": { + "prefab_name": "Landingpad_TaxiPieceCorner", + "prefab_hash": -1872345847, + "desc": "", + "name": "Landingpad Taxi Corner" + }, + "structure": { + "small_grid": true + } + }, + "Landingpad_TaxiPieceHold": { + "prefab": { + "prefab_name": "Landingpad_TaxiPieceHold", + "prefab_hash": 146051619, + "desc": "", + "name": "Landingpad Taxi Hold" + }, + "structure": { + "small_grid": true + } + }, + "Landingpad_TaxiPieceStraight": { + "prefab": { + "prefab_name": "Landingpad_TaxiPieceStraight", + "prefab_hash": -1477941080, + "desc": "", + "name": "Landingpad Taxi Straight" + }, + "structure": { + "small_grid": true + } + }, + "Landingpad_ThreshholdPiece": { + "prefab": { + "prefab_name": "Landingpad_ThreshholdPiece", + "prefab_hash": -1514298582, + "desc": "", + "name": "Landingpad Threshhold" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "LandingPad", + "role": "Input" + }, + { + "typ": "Data", + "role": "Input" + } + ], + "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 + } + }, + "LogicStepSequencer8": { + "prefab": { + "prefab_name": "LogicStepSequencer8", + "prefab_hash": 1531272458, + "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.", + "name": "Logic Step Sequencer" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "Time": "ReadWrite", + "Bpm": "ReadWrite", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Whole Note", + "1": "Half Note", + "2": "Quarter Note", + "3": "Eighth Note", + "4": "Sixteenth Note" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Sound Cartridge", + "typ": "SoundCartridge" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "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 + } + }, + "Meteorite": { + "prefab": { + "prefab_name": "Meteorite", + "prefab_hash": -99064335, + "desc": "", + "name": "Meteorite" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "MonsterEgg": { + "prefab": { + "prefab_name": "MonsterEgg", + "prefab_hash": -1667675295, + "desc": "", + "name": "" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "MotherboardComms": { + "prefab": { + "prefab_name": "MotherboardComms", + "prefab_hash": -337075633, + "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.", + "name": "Communications Motherboard" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Motherboard", + "sorting_class": "Default" + } + }, + "MotherboardLogic": { + "prefab": { + "prefab_name": "MotherboardLogic", + "prefab_hash": 502555944, + "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.", + "name": "Logic Motherboard" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Motherboard", + "sorting_class": "Default" + } + }, + "MotherboardMissionControl": { + "prefab": { + "prefab_name": "MotherboardMissionControl", + "prefab_hash": -127121474, + "desc": "", + "name": "" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Motherboard", + "sorting_class": "Default" + } + }, + "MotherboardProgrammableChip": { + "prefab": { + "prefab_name": "MotherboardProgrammableChip", + "prefab_hash": -161107071, + "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.", + "name": "IC Editor Motherboard" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Motherboard", + "sorting_class": "Default" + } + }, + "MotherboardRockets": { + "prefab": { + "prefab_name": "MotherboardRockets", + "prefab_hash": -806986392, + "desc": "", + "name": "Rocket Control Motherboard" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Motherboard", + "sorting_class": "Default" + } + }, + "MotherboardSorter": { + "prefab": { + "prefab_name": "MotherboardSorter", + "prefab_hash": -1908268220, + "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.", + "name": "Sorter Motherboard" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Motherboard", + "sorting_class": "Default" + } + }, + "MothershipCore": { + "prefab": { + "prefab_name": "MothershipCore", + "prefab_hash": -1930442922, + "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.", + "name": "Mothership Core" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "NpcChick": { + "prefab": { + "prefab_name": "NpcChick", + "prefab_hash": 155856647, + "desc": "", + "name": "Chick" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "slots": [ + { + "name": "Brain", + "typ": "Organ" + }, + { + "name": "Lungs", + "typ": "Organ" + } + ] + }, + "NpcChicken": { + "prefab": { + "prefab_name": "NpcChicken", + "prefab_hash": 399074198, + "desc": "", + "name": "Chicken" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "slots": [ + { + "name": "Brain", + "typ": "Organ" + }, + { + "name": "Lungs", + "typ": "Organ" + } + ] + }, + "PassiveSpeaker": { + "prefab": { + "prefab_name": "PassiveSpeaker", + "prefab_hash": 248893646, + "desc": "", + "name": "Passive Speaker" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Volume": "ReadWrite", + "PrefabHash": "ReadWrite", + "SoundAlert": "ReadWrite", + "ReferenceId": "ReadWrite", + "NameHash": "ReadWrite" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + } + ], + "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 + } + }, + "PipeBenderMod": { + "prefab": { + "prefab_name": "PipeBenderMod", + "prefab_hash": 443947415, + "desc": "Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", + "name": "Pipe Bender Mod" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "PortableComposter": { + "prefab": { + "prefab_name": "PortableComposter", + "prefab_hash": -1958705204, + "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", + "name": "Portable Composter" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "Battery" + }, + { + "name": "Liquid Canister", + "typ": "LiquidCanister" + } + ] + }, + "PortableSolarPanel": { + "prefab": { + "prefab_name": "PortableSolarPanel", + "prefab_hash": 2043318949, + "desc": "", + "name": "Portable Solar Panel" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Open": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "RailingElegant01": { + "prefab": { + "prefab_name": "RailingElegant01", + "prefab_hash": 399661231, + "desc": "", + "name": "Railing Elegant (Type 1)" + }, + "structure": { + "small_grid": false + } + }, + "RailingElegant02": { + "prefab": { + "prefab_name": "RailingElegant02", + "prefab_hash": -1898247915, + "desc": "", + "name": "Railing Elegant (Type 2)" + }, + "structure": { + "small_grid": false + } + }, + "RailingIndustrial02": { + "prefab": { + "prefab_name": "RailingIndustrial02", + "prefab_hash": -2072792175, + "desc": "", + "name": "Railing Industrial (Type 2)" + }, + "structure": { + "small_grid": false + } + }, + "ReagentColorBlue": { + "prefab": { + "prefab_name": "ReagentColorBlue", + "prefab_hash": 980054869, + "desc": "", + "name": "Color Dye (Blue)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "ColorBlue": 10.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + } + }, + "ReagentColorGreen": { + "prefab": { + "prefab_name": "ReagentColorGreen", + "prefab_hash": 120807542, + "desc": "", + "name": "Color Dye (Green)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "ColorGreen": 10.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + } + }, + "ReagentColorOrange": { + "prefab": { + "prefab_name": "ReagentColorOrange", + "prefab_hash": -400696159, + "desc": "", + "name": "Color Dye (Orange)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "ColorOrange": 10.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + } + }, + "ReagentColorRed": { + "prefab": { + "prefab_name": "ReagentColorRed", + "prefab_hash": 1998377961, + "desc": "", + "name": "Color Dye (Red)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "ColorRed": 10.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + } + }, + "ReagentColorYellow": { + "prefab": { + "prefab_name": "ReagentColorYellow", + "prefab_hash": 635208006, + "desc": "", + "name": "Color Dye (Yellow)" + }, + "item": { + "consumable": true, + "ingredient": true, + "max_quantity": 100, + "reagents": { + "ColorYellow": 10.0 + }, + "slot_class": "None", + "sorting_class": "Resources" + } + }, + "RespawnPoint": { + "prefab": { + "prefab_name": "RespawnPoint", + "prefab_hash": -788672929, + "desc": "Place a respawn point to set a player entry point to your base when loading in, or returning from the dead.", + "name": "Respawn Point" + }, + "structure": { + "small_grid": true + } + }, + "RespawnPointWallMounted": { + "prefab": { + "prefab_name": "RespawnPointWallMounted", + "prefab_hash": -491247370, + "desc": "", + "name": "Respawn Point (Mounted)" + }, + "structure": { + "small_grid": true + } + }, + "Robot": { + "prefab": { + "prefab_name": "Robot", + "prefab_hash": 434786784, + "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", + "name": "AIMeE Bot" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "logic": { + "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" + }, + "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" + } + }, + "logic_types": { + "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" + }, + "modes": { + "0": "None", + "1": "Follow", + "2": "MoveToTarget", + "3": "Roam", + "4": "Unload", + "5": "PathToTarget", + "6": "StorageFull" + }, + "transmission_receiver": false, + "wireless_logic": true, + "circuit_holder": true + }, + "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" + } + ] + }, + "RoverCargo": { + "prefab": { + "prefab_name": "RoverCargo", + "prefab_hash": 350726273, + "desc": "Connects to Logic Transmitter", + "name": "Rover (Cargo)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.01, + "radiation_factor": 0.01 + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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" + }, + "transmission_receiver": false, + "wireless_logic": true, + "circuit_holder": false + }, + "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": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, + "Rover_MkI": { + "prefab": { + "prefab_name": "Rover_MkI", + "prefab_hash": -2049946335, + "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", + "name": "Rover MkI" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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" + }, + "transmission_receiver": false, + "wireless_logic": true, + "circuit_holder": false + }, + "slots": [ + { + "name": "Entity", + "typ": "Entity" + }, + { + "name": "Entity", + "typ": "Entity" + }, + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, + "Rover_MkI_build_states": { + "prefab": { + "prefab_name": "Rover_MkI_build_states", + "prefab_hash": 861674123, + "desc": "", + "name": "Rover MKI" + }, + "structure": { + "small_grid": false + } + }, + "SMGMagazine": { + "prefab": { + "prefab_name": "SMGMagazine", + "prefab_hash": -256607540, + "desc": "", + "name": "SMG Magazine" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Magazine", + "sorting_class": "Default" + } + }, + "SeedBag_Cocoa": { + "prefab": { + "prefab_name": "SeedBag_Cocoa", + "prefab_hash": 1139887531, + "desc": "", + "name": "Cocoa Seeds" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Food" + } + }, + "SeedBag_Corn": { + "prefab": { + "prefab_name": "SeedBag_Corn", + "prefab_hash": -1290755415, + "desc": "Grow a Corn.", + "name": "Corn Seeds" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Food" + } + }, + "SeedBag_Fern": { + "prefab": { + "prefab_name": "SeedBag_Fern", + "prefab_hash": -1990600883, + "desc": "Grow a Fern.", + "name": "Fern Seeds" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Food" + } + }, + "SeedBag_Mushroom": { + "prefab": { + "prefab_name": "SeedBag_Mushroom", + "prefab_hash": 311593418, + "desc": "Grow a Mushroom.", + "name": "Mushroom Seeds" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Food" + } + }, + "SeedBag_Potato": { + "prefab": { + "prefab_name": "SeedBag_Potato", + "prefab_hash": 1005571172, + "desc": "Grow a Potato.", + "name": "Potato Seeds" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Food" + } + }, + "SeedBag_Pumpkin": { + "prefab": { + "prefab_name": "SeedBag_Pumpkin", + "prefab_hash": 1423199840, + "desc": "Grow a Pumpkin.", + "name": "Pumpkin Seeds" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Food" + } + }, + "SeedBag_Rice": { + "prefab": { + "prefab_name": "SeedBag_Rice", + "prefab_hash": -1691151239, + "desc": "Grow some Rice.", + "name": "Rice Seeds" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Food" + } + }, + "SeedBag_Soybean": { + "prefab": { + "prefab_name": "SeedBag_Soybean", + "prefab_hash": 1783004244, + "desc": "Grow some Soybean.", + "name": "Soybean Seeds" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Food" + } + }, + "SeedBag_SugarCane": { + "prefab": { + "prefab_name": "SeedBag_SugarCane", + "prefab_hash": -1884103228, + "desc": "", + "name": "Sugarcane Seeds" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Food" + } + }, + "SeedBag_Switchgrass": { + "prefab": { + "prefab_name": "SeedBag_Switchgrass", + "prefab_hash": 488360169, + "desc": "", + "name": "Switchgrass Seed" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Food" + } + }, + "SeedBag_Tomato": { + "prefab": { + "prefab_name": "SeedBag_Tomato", + "prefab_hash": -1922066841, + "desc": "Grow a Tomato.", + "name": "Tomato Seeds" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Food" + } + }, + "SeedBag_Wheet": { + "prefab": { + "prefab_name": "SeedBag_Wheet", + "prefab_hash": -654756733, + "desc": "Grow some Wheat.", + "name": "Wheat Seeds" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "Plant", + "sorting_class": "Food" + } + }, + "SpaceShuttle": { + "prefab": { + "prefab_name": "SpaceShuttle", + "prefab_hash": -1991297271, + "desc": "An antiquated Sinotai transport craft, long since decommissioned.", + "name": "Space Shuttle" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "slots": [ + { + "name": "Captain's Seat", + "typ": "Entity" + }, + { + "name": "Passenger Seat Left", + "typ": "Entity" + }, + { + "name": "Passenger Seat Right", + "typ": "Entity" + } + ] + }, + "StopWatch": { + "prefab": { + "prefab_name": "StopWatch", + "prefab_hash": -1527229051, + "desc": "", + "name": "Stop Watch" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "Time": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "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 + } + }, + "StructureAccessBridge": { + "prefab": { + "prefab_name": "StructureAccessBridge", + "prefab_hash": 1298920475, + "desc": "Extendable bridge that spans three grids", + "name": "Access Bridge" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Activate": "ReadWrite", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureActiveVent": { + "prefab": { + "prefab_name": "StructureActiveVent", + "prefab_hash": -1129453144, + "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 ...", + "name": "Active Vent" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Outward", + "1": "Inward" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + }, + { + "typ": "Pipe", + "role": "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 + } + }, + "StructureAdvancedComposter": { + "prefab": { + "prefab_name": "StructureAdvancedComposter", + "prefab_hash": 446212963, + "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", + "name": "Advanced Composter" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + } + ], + "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 + } + }, + "StructureAdvancedFurnace": { + "prefab": { + "prefab_name": "StructureAdvancedFurnace", + "prefab_hash": 545937711, + "desc": "The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure.", + "name": "Advanced Furnace" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Output2" + } + ], + "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 + } + }, + "StructureAdvancedPackagingMachine": { + "prefab": { + "prefab_name": "StructureAdvancedPackagingMachine", + "prefab_hash": -463037670, + "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.", + "name": "Advanced Packaging Machine" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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": { + "consumed_resouces": [ + "ItemCookedCondensedMilk", + "ItemCookedCorn", + "ItemCookedMushroom", + "ItemCookedPowderedEggs", + "ItemCookedPumpkin", + "ItemCookedRice", + "ItemCookedSoybean", + "ItemCookedTomato", + "ItemEmptyCan", + "ItemMilk", + "ItemPotatoBaked", + "ItemSoyOil" + ], + "processed_reagents": [] + }, + "fabricator_info": { + "tier": "Undefined", + "recipes": { + "ItemCannedCondensedMilk": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Milk": 200.0, + "Steel": 1.0 + } + }, + "ItemCannedEdamame": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Oil": 1.0, + "Soy": 15.0, + "Steel": 1.0 + } + }, + "ItemCannedMushroom": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Mushroom": 8.0, + "Oil": 1.0, + "Steel": 1.0 + } + }, + "ItemCannedPowderedEggs": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Egg": 5.0, + "Oil": 1.0, + "Steel": 1.0 + } + }, + "ItemCannedRicePudding": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Oil": 1.0, + "Rice": 5.0, + "Steel": 1.0 + } + }, + "ItemCornSoup": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Corn": 5.0, + "Oil": 1.0, + "Steel": 1.0 + } + }, + "ItemFrenchFries": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Oil": 1.0, + "Potato": 1.0, + "Steel": 1.0 + } + }, + "ItemPumpkinSoup": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Oil": 1.0, + "Pumpkin": 5.0, + "Steel": 1.0 + } + }, + "ItemTomatoSoup": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Oil": 1.0, + "Steel": 1.0, + "Tomato": 5.0 + } + } + } + }, + "memory": { + "instructions": { + "DeviceSetLock": { + "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 |", + "typ": "PrinterInstruction", + "value": 6 + }, + "EjectAllReagents": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 8 + }, + "EjectReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 7 + }, + "ExecuteRecipe": { + "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 |", + "typ": "PrinterInstruction", + "value": 2 + }, + "JumpIfNextInvalid": { + "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 |", + "typ": "PrinterInstruction", + "value": 4 + }, + "JumpToAddress": { + "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 |", + "typ": "PrinterInstruction", + "value": 5 + }, + "MissingRecipeReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 9 + }, + "StackPointer": { + "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 |", + "typ": "PrinterInstruction", + "value": 1 + }, + "WaitUntilNextValid": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 3 + } + }, + "memory_access": "ReadWrite", + "memory_size": 64 + } + }, + "StructureAirConditioner": { + "prefab": { + "prefab_name": "StructureAirConditioner", + "prefab_hash": -2087593337, + "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.", + "name": "Air Conditioner" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "RatioLiquidNitrogenInput": "Read", + "RatioLiquidNitrogenOutput": "Read", + "RatioLiquidNitrogenOutput2": "Read", + "RatioLiquidOxygenInput": "Read", + "RatioLiquidOxygenOutput": "Read", + "RatioLiquidOxygenOutput2": "Read", + "RatioLiquidVolatilesInput": "Read", + "RatioLiquidVolatilesOutput": "Read", + "RatioLiquidVolatilesOutput2": "Read", + "RatioSteamInput": "Read", + "RatioSteamOutput": "Read", + "RatioSteamOutput2": "Read", + "RatioLiquidCarbonDioxideInput": "Read", + "RatioLiquidCarbonDioxideOutput": "Read", + "RatioLiquidCarbonDioxideOutput2": "Read", + "RatioLiquidPollutantInput": "Read", + "RatioLiquidPollutantOutput": "Read", + "RatioLiquidPollutantOutput2": "Read", + "RatioLiquidNitrousOxideInput": "Read", + "RatioLiquidNitrousOxideOutput": "Read", + "RatioLiquidNitrousOxideOutput2": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Idle", + "1": "Active" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": true + }, + "slots": [ + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Waste" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": 2, + "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 + } + }, + "StructureAirlock": { + "prefab": { + "prefab_name": "StructureAirlock", + "prefab_hash": -2105052344, + "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.", + "name": "Airlock" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureAirlockGate": { + "prefab": { + "prefab_name": "StructureAirlockGate", + "prefab_hash": 1736080881, + "desc": "1 x 1 modular door piece for building hangar doors.", + "name": "Small Hangar Door" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureAngledBench": { + "prefab": { + "prefab_name": "StructureAngledBench", + "prefab_hash": 1811979158, + "desc": "", + "name": "Bench (Angled)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructureArcFurnace": { + "prefab": { + "prefab_name": "StructureArcFurnace", + "prefab_hash": -247344692, + "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.", + "name": "Arc Furnace" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Ore" + }, + { + "name": "Export", + "typ": "Ingot" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureAreaPowerControl": { + "prefab": { + "prefab_name": "StructureAreaPowerControl", + "prefab_hash": 1999523701, + "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.", + "name": "Area Power Control" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Idle", + "1": "Discharged", + "2": "Discharging", + "3": "Charging", + "4": "Charged" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Data Disk", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "Input" + }, + { + "typ": "Power", + "role": "Output" + } + ], + "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 + } + }, + "StructureAreaPowerControlReversed": { + "prefab": { + "prefab_name": "StructureAreaPowerControlReversed", + "prefab_hash": -1032513487, + "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.", + "name": "Area Power Control" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Idle", + "1": "Discharged", + "2": "Discharging", + "3": "Charging", + "4": "Charged" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Data Disk", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "Input" + }, + { + "typ": "Power", + "role": "Output" + } + ], + "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 + } + }, + "StructureAutoMinerSmall": { + "prefab": { + "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": { + "small_grid": true + }, + "logic": { + "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" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureAutolathe": { + "prefab": { + "prefab_name": "StructureAutolathe", + "prefab_hash": 336213101, + "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 ", + "name": "Autolathe" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Ingot" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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": { + "consumed_resouces": [ + "ItemAstroloyIngot", + "ItemConstantanIngot", + "ItemCopperIngot", + "ItemElectrumIngot", + "ItemGoldIngot", + "ItemHastelloyIngot", + "ItemInconelIngot", + "ItemInvarIngot", + "ItemIronIngot", + "ItemLeadIngot", + "ItemNickelIngot", + "ItemSiliconIngot", + "ItemSilverIngot", + "ItemSolderIngot", + "ItemSolidFuel", + "ItemSteelIngot", + "ItemStelliteIngot", + "ItemWaspaloyIngot", + "ItemWasteIngot" + ], + "processed_reagents": [] + }, + "fabricator_info": { + "tier": "Undefined", + "recipes": { + "CardboardBox": { + "tier": "TierOne", + "time": 2.0, + "energy": 120.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 2.0 + } + }, + "ItemCableCoil": { + "tier": "TierOne", + "time": 5.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Copper": 0.5 + } + }, + "ItemCoffeeMug": { + "tier": "TierOne", + "time": 1.0, + "energy": 70.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemEggCarton": { + "tier": "TierOne", + "time": 10.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 2.0 + } + }, + "ItemEmptyCan": { + "tier": "TierOne", + "time": 1.0, + "energy": 70.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 1.0 + } + }, + "ItemEvaSuit": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 5.0 + } + }, + "ItemGlassSheets": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 2.0 + } + }, + "ItemIronFrames": { + "tier": "TierOne", + "time": 4.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 4.0 + } + }, + "ItemIronSheets": { + "tier": "TierOne", + "time": 1.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemKitAccessBridge": { + "tier": "TierOne", + "time": 30.0, + "energy": 15000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Solder": 2.0, + "Steel": 10.0 + } + }, + "ItemKitArcFurnace": { + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 20.0 + } + }, + "ItemKitAutolathe": { + "tier": "TierOne", + "time": 180.0, + "energy": 36000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 2.0, + "Iron": 20.0 + } + }, + "ItemKitBeds": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 20.0 + } + }, + "ItemKitBlastDoor": { + "tier": "TierTwo", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 3.0, + "Steel": 15.0 + } + }, + "ItemKitCentrifuge": { + "tier": "TierOne", + "time": 60.0, + "energy": 18000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 20.0 + } + }, + "ItemKitChairs": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 20.0 + } + }, + "ItemKitChute": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemKitCompositeCladding": { + "tier": "TierOne", + "time": 1.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemKitCompositeFloorGrating": { + "tier": "TierOne", + "time": 3.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemKitCrate": { + "tier": "TierOne", + "time": 10.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 10.0 + } + }, + "ItemKitCrateMkII": { + "tier": "TierTwo", + "time": 10.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 5.0, + "Iron": 10.0 + } + }, + "ItemKitCrateMount": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 10.0 + } + }, + "ItemKitDeepMiner": { + "tier": "TierTwo", + "time": 180.0, + "energy": 72000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 5.0, + "Electrum": 5.0, + "Invar": 10.0, + "Steel": 50.0 + } + }, + "ItemKitDoor": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 3.0, + "Iron": 7.0 + } + }, + "ItemKitElectronicsPrinter": { + "tier": "TierOne", + "time": 120.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 2.0, + "Iron": 20.0 + } + }, + "ItemKitFlagODA": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 8.0 + } + }, + "ItemKitFurnace": { + "tier": "TierOne", + "time": 120.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Iron": 30.0 + } + }, + "ItemKitFurniture": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 20.0 + } + }, + "ItemKitHydraulicPipeBender": { + "tier": "TierOne", + "time": 180.0, + "energy": 18000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 2.0, + "Iron": 20.0 + } + }, + "ItemKitInteriorDoors": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 3.0, + "Iron": 5.0 + } + }, + "ItemKitLadder": { + "tier": "TierOne", + "time": 3.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 2.0 + } + }, + "ItemKitLocker": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemKitPipe": { + "tier": "TierOne", + "time": 5.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 0.5 + } + }, + "ItemKitRailing": { + "tier": "TierOne", + "time": 1.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemKitRecycler": { + "tier": "TierOne", + "time": 60.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Iron": 20.0 + } + }, + "ItemKitReinforcedWindows": { + "tier": "TierOne", + "time": 7.0, + "energy": 700.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 2.0 + } + }, + "ItemKitRespawnPointWallMounted": { + "tier": "TierOne", + "time": 20.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Iron": 3.0 + } + }, + "ItemKitRocketManufactory": { + "tier": "TierOne", + "time": 120.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 2.0, + "Iron": 20.0 + } + }, + "ItemKitSDBHopper": { + "tier": "TierOne", + "time": 10.0, + "energy": 700.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 15.0 + } + }, + "ItemKitSecurityPrinter": { + "tier": "TierOne", + "time": 180.0, + "energy": 36000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 20.0, + "Gold": 20.0, + "Steel": 20.0 + } + }, + "ItemKitSign": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemKitSorter": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 1.0, + "Iron": 10.0 + } + }, + "ItemKitStacker": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 10.0 + } + }, + "ItemKitStairs": { + "tier": "TierOne", + "time": 20.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 15.0 + } + }, + "ItemKitStairwell": { + "tier": "TierOne", + "time": 20.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 15.0 + } + }, + "ItemKitStandardChute": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 2.0, + "Electrum": 2.0, + "Iron": 3.0 + } + }, + "ItemKitTables": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 20.0 + } + }, + "ItemKitToolManufactory": { + "tier": "TierOne", + "time": 120.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Iron": 20.0 + } + }, + "ItemKitWall": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 1.0 + } + }, + "ItemKitWallArch": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 1.0 + } + }, + "ItemKitWallFlat": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 1.0 + } + }, + "ItemKitWallGeometry": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 1.0 + } + }, + "ItemKitWallIron": { + "tier": "TierOne", + "time": 1.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemKitWallPadded": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 1.0 + } + }, + "ItemKitWindowShutter": { + "tier": "TierOne", + "time": 7.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 1.0, + "Steel": 2.0 + } + }, + "ItemPlasticSheets": { + "tier": "TierOne", + "time": 1.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 0.5 + } + }, + "ItemSpaceHelmet": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Gold": 2.0 + } + }, + "ItemSteelFrames": { + "tier": "TierOne", + "time": 7.0, + "energy": 800.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 2.0 + } + }, + "ItemSteelSheets": { + "tier": "TierOne", + "time": 3.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 0.5 + } + }, + "ItemStelliteGlassSheets": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 2.0, + "Stellite": 1.0 + } + }, + "ItemWallLight": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Iron": 1.0, + "Silicon": 1.0 + } + }, + "KitSDBSilo": { + "tier": "TierOne", + "time": 120.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 20.0, + "Steel": 15.0 + } + }, + "KitStructureCombustionCentrifuge": { + "tier": "TierTwo", + "time": 120.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 5.0, + "Invar": 10.0, + "Steel": 20.0 + } + } + } + }, + "memory": { + "instructions": { + "DeviceSetLock": { + "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 |", + "typ": "PrinterInstruction", + "value": 6 + }, + "EjectAllReagents": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 8 + }, + "EjectReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 7 + }, + "ExecuteRecipe": { + "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 |", + "typ": "PrinterInstruction", + "value": 2 + }, + "JumpIfNextInvalid": { + "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 |", + "typ": "PrinterInstruction", + "value": 4 + }, + "JumpToAddress": { + "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 |", + "typ": "PrinterInstruction", + "value": 5 + }, + "MissingRecipeReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 9 + }, + "StackPointer": { + "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 |", + "typ": "PrinterInstruction", + "value": 1 + }, + "WaitUntilNextValid": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 3 + } + }, + "memory_access": "ReadWrite", + "memory_size": 64 + } + }, + "StructureAutomatedOven": { + "prefab": { + "prefab_name": "StructureAutomatedOven", + "prefab_hash": -1672404896, + "desc": "", + "name": "Automated Oven" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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": { + "consumed_resouces": [ + "ItemCorn", + "ItemEgg", + "ItemFertilizedEgg", + "ItemFlour", + "ItemMilk", + "ItemMushroom", + "ItemPotato", + "ItemPumpkin", + "ItemRice", + "ItemSoybean", + "ItemSoyOil", + "ItemTomato", + "ItemSugarCane", + "ItemCocoaTree", + "ItemCocoaPowder", + "ItemSugar" + ], + "processed_reagents": [] + }, + "fabricator_info": { + "tier": "TierOne", + "recipes": { + "ItemBreadLoaf": { + "tier": "TierOne", + "time": 10.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Flour": 200.0, + "Oil": 5.0 + } + }, + "ItemCerealBar": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Flour": 50.0 + } + }, + "ItemChocolateBar": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Cocoa": 2.0, + "Sugar": 10.0 + } + }, + "ItemChocolateCake": { + "tier": "TierOne", + "time": 30.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 5, + "reagents": { + "Cocoa": 2.0, + "Egg": 1.0, + "Flour": 50.0, + "Milk": 5.0, + "Sugar": 50.0 + } + }, + "ItemChocolateCerealBar": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Cocoa": 1.0, + "Flour": 50.0 + } + }, + "ItemCookedCondensedMilk": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Milk": 100.0 + } + }, + "ItemCookedCorn": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Corn": 1.0 + } + }, + "ItemCookedMushroom": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Mushroom": 1.0 + } + }, + "ItemCookedPowderedEggs": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Egg": 4.0 + } + }, + "ItemCookedPumpkin": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Pumpkin": 1.0 + } + }, + "ItemCookedRice": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Rice": 3.0 + } + }, + "ItemCookedSoybean": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Soy": 5.0 + } + }, + "ItemCookedTomato": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Tomato": 1.0 + } + }, + "ItemFries": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Oil": 5.0, + "Potato": 1.0 + } + }, + "ItemMuffin": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Egg": 1.0, + "Flour": 50.0, + "Milk": 10.0 + } + }, + "ItemPlainCake": { + "tier": "TierOne", + "time": 30.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Egg": 1.0, + "Flour": 50.0, + "Milk": 5.0, + "Sugar": 50.0 + } + }, + "ItemPotatoBaked": { + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Potato": 1.0 + } + }, + "ItemPumpkinPie": { + "tier": "TierOne", + "time": 10.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Egg": 1.0, + "Flour": 100.0, + "Milk": 10.0, + "Pumpkin": 10.0 + } + } + } + }, + "memory": { + "instructions": { + "DeviceSetLock": { + "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 |", + "typ": "PrinterInstruction", + "value": 6 + }, + "EjectAllReagents": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 8 + }, + "EjectReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 7 + }, + "ExecuteRecipe": { + "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 |", + "typ": "PrinterInstruction", + "value": 2 + }, + "JumpIfNextInvalid": { + "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 |", + "typ": "PrinterInstruction", + "value": 4 + }, + "JumpToAddress": { + "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 |", + "typ": "PrinterInstruction", + "value": 5 + }, + "MissingRecipeReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 9 + }, + "StackPointer": { + "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 |", + "typ": "PrinterInstruction", + "value": 1 + }, + "WaitUntilNextValid": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 3 + } + }, + "memory_access": "ReadWrite", + "memory_size": 64 + } + }, + "StructureBackLiquidPressureRegulator": { + "prefab": { + "prefab_name": "StructureBackLiquidPressureRegulator", + "prefab_hash": 2099900163, + "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.", + "name": "Liquid Back Volume Regulator" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureBackPressureRegulator": { + "prefab": { + "prefab_name": "StructureBackPressureRegulator", + "prefab_hash": -1149857558, + "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.", + "name": "Back Pressure Regulator" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureBasketHoop": { + "prefab": { + "prefab_name": "StructureBasketHoop", + "prefab_hash": -1613497288, + "desc": "", + "name": "Basket Hoop" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureBattery": { + "prefab": { + "prefab_name": "StructureBattery", + "prefab_hash": -400115994, + "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).", + "name": "Station Battery" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Charge": "Read", + "Maximum": "Read", + "Ratio": "Read", + "PowerPotential": "Read", + "PowerActual": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Input" + }, + { + "typ": "Power", + "role": "Output" + } + ], + "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 + } + }, + "StructureBatteryCharger": { + "prefab": { + "prefab_name": "StructureBatteryCharger", + "prefab_hash": 1945930022, + "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.", + "name": "Battery Cell Charger" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Battery", + "typ": "Battery" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureBatteryChargerSmall": { + "prefab": { + "prefab_name": "StructureBatteryChargerSmall", + "prefab_hash": -761772413, + "desc": "", + "name": "Battery Charger Small" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + }, + { + "name": "Battery", + "typ": "Battery" + } + ], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "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 + } + }, + "StructureBatteryLarge": { + "prefab": { + "prefab_name": "StructureBatteryLarge", + "prefab_hash": -1388288459, + "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). ", + "name": "Station Battery (Large)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Charge": "Read", + "Maximum": "Read", + "Ratio": "Read", + "PowerPotential": "Read", + "PowerActual": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Input" + }, + { + "typ": "Power", + "role": "Output" + } + ], + "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 + } + }, + "StructureBatteryMedium": { + "prefab": { + "prefab_name": "StructureBatteryMedium", + "prefab_hash": -1125305264, + "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", + "name": "Battery (Medium)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "Read", + "Charge": "Read", + "Maximum": "Read", + "Ratio": "Read", + "PowerPotential": "Read", + "PowerActual": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "Input" + }, + { + "typ": "Power", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureBatterySmall": { + "prefab": { + "prefab_name": "StructureBatterySmall", + "prefab_hash": -2123455080, + "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", + "name": "Auxiliary Rocket Battery " + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "Read", + "Charge": "Read", + "Maximum": "Read", + "Ratio": "Read", + "PowerPotential": "Read", + "PowerActual": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Empty", + "1": "Critical", + "2": "VeryLow", + "3": "Low", + "4": "Medium", + "5": "High", + "6": "Full" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "Input" + }, + { + "typ": "Power", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureBeacon": { + "prefab": { + "prefab_name": "StructureBeacon", + "prefab_hash": -188177083, + "desc": "", + "name": "Beacon" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Color": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureBench": { + "prefab": { + "prefab_name": "StructureBench", + "prefab_hash": -2042448192, + "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.", + "name": "Powered Bench" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Appliance 1", + "typ": "Appliance" + }, + { + "name": "Appliance 2", + "typ": "Appliance" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureBench1": { + "prefab": { + "prefab_name": "StructureBench1", + "prefab_hash": 406745009, + "desc": "", + "name": "Bench (Counter Style)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Appliance 1", + "typ": "Appliance" + }, + { + "name": "Appliance 2", + "typ": "Appliance" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureBench2": { + "prefab": { + "prefab_name": "StructureBench2", + "prefab_hash": -2127086069, + "desc": "", + "name": "Bench (High Tech Style)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Appliance 1", + "typ": "Appliance" + }, + { + "name": "Appliance 2", + "typ": "Appliance" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureBench3": { + "prefab": { + "prefab_name": "StructureBench3", + "prefab_hash": -164622691, + "desc": "", + "name": "Bench (Frame Style)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Appliance 1", + "typ": "Appliance" + }, + { + "name": "Appliance 2", + "typ": "Appliance" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureBench4": { + "prefab": { + "prefab_name": "StructureBench4", + "prefab_hash": 1750375230, + "desc": "", + "name": "Bench (Workbench Style)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Appliance 1", + "typ": "Appliance" + }, + { + "name": "Appliance 2", + "typ": "Appliance" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureBlastDoor": { + "prefab": { + "prefab_name": "StructureBlastDoor", + "prefab_hash": 337416191, + "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.", + "name": "Blast Door" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureBlockBed": { + "prefab": { + "prefab_name": "StructureBlockBed", + "prefab_hash": 697908419, + "desc": "Description coming.", + "name": "Block Bed" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Bed", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "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 + } + }, + "StructureBlocker": { + "prefab": { + "prefab_name": "StructureBlocker", + "prefab_hash": 378084505, + "desc": "", + "name": "Blocker" + }, + "structure": { + "small_grid": false + } + }, + "StructureCableAnalysizer": { + "prefab": { + "prefab_name": "StructureCableAnalysizer", + "prefab_hash": 1036015121, + "desc": "", + "name": "Cable Analyzer" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PowerPotential": "Read", + "PowerActual": "Read", + "PowerRequired": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "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 + } + }, + "StructureCableCorner": { + "prefab": { + "prefab_name": "StructureCableCorner", + "prefab_hash": -889269388, + "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).", + "name": "Cable (Corner)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableCorner3": { + "prefab": { + "prefab_name": "StructureCableCorner3", + "prefab_hash": 980469101, + "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).", + "name": "Cable (3-Way Corner)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableCorner3Burnt": { + "prefab": { + "prefab_name": "StructureCableCorner3Burnt", + "prefab_hash": 318437449, + "desc": "", + "name": "Burnt Cable (3-Way Corner)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableCorner3HBurnt": { + "prefab": { + "prefab_name": "StructureCableCorner3HBurnt", + "prefab_hash": 2393826, + "desc": "", + "name": "" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableCorner4": { + "prefab": { + "prefab_name": "StructureCableCorner4", + "prefab_hash": -1542172466, + "desc": "", + "name": "Cable (4-Way Corner)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableCorner4Burnt": { + "prefab": { + "prefab_name": "StructureCableCorner4Burnt", + "prefab_hash": 268421361, + "desc": "", + "name": "Burnt Cable (4-Way Corner)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableCorner4HBurnt": { + "prefab": { + "prefab_name": "StructureCableCorner4HBurnt", + "prefab_hash": -981223316, + "desc": "", + "name": "Burnt Heavy Cable (4-Way Corner)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableCornerBurnt": { + "prefab": { + "prefab_name": "StructureCableCornerBurnt", + "prefab_hash": -177220914, + "desc": "", + "name": "Burnt Cable (Corner)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableCornerH": { + "prefab": { + "prefab_name": "StructureCableCornerH", + "prefab_hash": -39359015, + "desc": "", + "name": "Heavy Cable (Corner)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableCornerH3": { + "prefab": { + "prefab_name": "StructureCableCornerH3", + "prefab_hash": -1843379322, + "desc": "", + "name": "Heavy Cable (3-Way Corner)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableCornerH4": { + "prefab": { + "prefab_name": "StructureCableCornerH4", + "prefab_hash": 205837861, + "desc": "", + "name": "Heavy Cable (4-Way Corner)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableCornerHBurnt": { + "prefab": { + "prefab_name": "StructureCableCornerHBurnt", + "prefab_hash": 1931412811, + "desc": "", + "name": "Burnt Cable (Corner)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableFuse100k": { + "prefab": { + "prefab_name": "StructureCableFuse100k", + "prefab_hash": 281380789, + "desc": "", + "name": "Fuse (100kW)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "StructureCableFuse1k": { + "prefab": { + "prefab_name": "StructureCableFuse1k", + "prefab_hash": -1103727120, + "desc": "", + "name": "Fuse (1kW)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "StructureCableFuse50k": { + "prefab": { + "prefab_name": "StructureCableFuse50k", + "prefab_hash": -349716617, + "desc": "", + "name": "Fuse (50kW)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "StructureCableFuse5k": { + "prefab": { + "prefab_name": "StructureCableFuse5k", + "prefab_hash": -631590668, + "desc": "", + "name": "Fuse (5kW)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "StructureCableJunction": { + "prefab": { + "prefab_name": "StructureCableJunction", + "prefab_hash": -175342021, + "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).", + "name": "Cable (Junction)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableJunction4": { + "prefab": { + "prefab_name": "StructureCableJunction4", + "prefab_hash": 1112047202, + "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).", + "name": "Cable (4-Way Junction)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableJunction4Burnt": { + "prefab": { + "prefab_name": "StructureCableJunction4Burnt", + "prefab_hash": -1756896811, + "desc": "", + "name": "Burnt Cable (4-Way Junction)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableJunction4HBurnt": { + "prefab": { + "prefab_name": "StructureCableJunction4HBurnt", + "prefab_hash": -115809132, + "desc": "", + "name": "Burnt Cable (4-Way Junction)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableJunction5": { + "prefab": { + "prefab_name": "StructureCableJunction5", + "prefab_hash": 894390004, + "desc": "", + "name": "Cable (5-Way Junction)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableJunction5Burnt": { + "prefab": { + "prefab_name": "StructureCableJunction5Burnt", + "prefab_hash": 1545286256, + "desc": "", + "name": "Burnt Cable (5-Way Junction)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableJunction6": { + "prefab": { + "prefab_name": "StructureCableJunction6", + "prefab_hash": -1404690610, + "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).", + "name": "Cable (6-Way Junction)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableJunction6Burnt": { + "prefab": { + "prefab_name": "StructureCableJunction6Burnt", + "prefab_hash": -628145954, + "desc": "", + "name": "Burnt Cable (6-Way Junction)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableJunction6HBurnt": { + "prefab": { + "prefab_name": "StructureCableJunction6HBurnt", + "prefab_hash": 1854404029, + "desc": "", + "name": "Burnt Cable (6-Way Junction)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableJunctionBurnt": { + "prefab": { + "prefab_name": "StructureCableJunctionBurnt", + "prefab_hash": -1620686196, + "desc": "", + "name": "Burnt Cable (Junction)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableJunctionH": { + "prefab": { + "prefab_name": "StructureCableJunctionH", + "prefab_hash": 469451637, + "desc": "", + "name": "Heavy Cable (3-Way Junction)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableJunctionH4": { + "prefab": { + "prefab_name": "StructureCableJunctionH4", + "prefab_hash": -742234680, + "desc": "", + "name": "Heavy Cable (4-Way Junction)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableJunctionH5": { + "prefab": { + "prefab_name": "StructureCableJunctionH5", + "prefab_hash": -1530571426, + "desc": "", + "name": "Heavy Cable (5-Way Junction)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableJunctionH5Burnt": { + "prefab": { + "prefab_name": "StructureCableJunctionH5Burnt", + "prefab_hash": 1701593300, + "desc": "", + "name": "Burnt Heavy Cable (5-Way Junction)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableJunctionH6": { + "prefab": { + "prefab_name": "StructureCableJunctionH6", + "prefab_hash": 1036780772, + "desc": "", + "name": "Heavy Cable (6-Way Junction)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableJunctionHBurnt": { + "prefab": { + "prefab_name": "StructureCableJunctionHBurnt", + "prefab_hash": -341365649, + "desc": "", + "name": "Burnt Cable (Junction)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableStraight": { + "prefab": { + "prefab_name": "StructureCableStraight", + "prefab_hash": 605357050, + "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).", + "name": "Cable (Straight)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableStraightBurnt": { + "prefab": { + "prefab_name": "StructureCableStraightBurnt", + "prefab_hash": -1196981113, + "desc": "", + "name": "Burnt Cable (Straight)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableStraightH": { + "prefab": { + "prefab_name": "StructureCableStraightH", + "prefab_hash": -146200530, + "desc": "", + "name": "Heavy Cable (Straight)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCableStraightHBurnt": { + "prefab": { + "prefab_name": "StructureCableStraightHBurnt", + "prefab_hash": 2085762089, + "desc": "", + "name": "Burnt Cable (Straight)" + }, + "structure": { + "small_grid": true + } + }, + "StructureCamera": { + "prefab": { + "prefab_name": "StructureCamera", + "prefab_hash": -342072665, + "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.", + "name": "Camera" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Mode": "ReadWrite", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureCapsuleTankGas": { + "prefab": { + "prefab_name": "StructureCapsuleTankGas", + "prefab_hash": -1385712131, + "desc": "", + "name": "Gas Capsule Tank Small" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + } + ], + "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 + } + }, + "StructureCapsuleTankLiquid": { + "prefab": { + "prefab_name": "StructureCapsuleTankLiquid", + "prefab_hash": 1415396263, + "desc": "", + "name": "Liquid Capsule Tank Small" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "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 + } + }, + "StructureCargoStorageMedium": { + "prefab": { + "prefab_name": "StructureCargoStorageMedium", + "prefab_hash": 1151864003, + "desc": "", + "name": "Cargo Storage (Medium)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "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" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Chute", + "role": "Input" + } + ], + "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 + } + }, + "StructureCargoStorageSmall": { + "prefab": { + "prefab_name": "StructureCargoStorageSmall", + "prefab_hash": -1493672123, + "desc": "", + "name": "Cargo Storage (Small)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "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" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Chute", + "role": "Input" + } + ], + "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 + } + }, + "StructureCentrifuge": { + "prefab": { + "prefab_name": "StructureCentrifuge", + "prefab_hash": 690945935, + "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.", + "name": "Centrifuge" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Reagents": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "ClearMemory": "Write", + "ExportCount": "Read", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureChair": { + "prefab": { + "prefab_name": "StructureChair", + "prefab_hash": 1167659360, + "desc": "One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs.", + "name": "Chair" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructureChairBacklessDouble": { + "prefab": { + "prefab_name": "StructureChairBacklessDouble", + "prefab_hash": 1944858936, + "desc": "", + "name": "Chair (Backless Double)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructureChairBacklessSingle": { + "prefab": { + "prefab_name": "StructureChairBacklessSingle", + "prefab_hash": 1672275150, + "desc": "", + "name": "Chair (Backless Single)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructureChairBoothCornerLeft": { + "prefab": { + "prefab_name": "StructureChairBoothCornerLeft", + "prefab_hash": -367720198, + "desc": "", + "name": "Chair (Booth Corner Left)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructureChairBoothMiddle": { + "prefab": { + "prefab_name": "StructureChairBoothMiddle", + "prefab_hash": 1640720378, + "desc": "", + "name": "Chair (Booth Middle)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructureChairRectangleDouble": { + "prefab": { + "prefab_name": "StructureChairRectangleDouble", + "prefab_hash": -1152812099, + "desc": "", + "name": "Chair (Rectangle Double)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructureChairRectangleSingle": { + "prefab": { + "prefab_name": "StructureChairRectangleSingle", + "prefab_hash": -1425428917, + "desc": "", + "name": "Chair (Rectangle Single)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructureChairThickDouble": { + "prefab": { + "prefab_name": "StructureChairThickDouble", + "prefab_hash": -1245724402, + "desc": "", + "name": "Chair (Thick Double)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructureChairThickSingle": { + "prefab": { + "prefab_name": "StructureChairThickSingle", + "prefab_hash": -1510009608, + "desc": "", + "name": "Chair (Thick Single)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructureChuteBin": { + "prefab": { + "prefab_name": "StructureChuteBin", + "prefab_hash": -850484480, + "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.", + "name": "Chute Bin" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Input", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureChuteCorner": { + "prefab": { + "prefab_name": "StructureChuteCorner", + "prefab_hash": 1360330136, + "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.", + "name": "Chute (Corner)" + }, + "structure": { + "small_grid": true + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ] + }, + "StructureChuteDigitalFlipFlopSplitterLeft": { + "prefab": { + "prefab_name": "StructureChuteDigitalFlipFlopSplitterLeft", + "prefab_hash": -810874728, + "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.", + "name": "Chute Digital Flip Flop Splitter Left" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Setting": "ReadWrite", + "Quantity": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "SettingOutput": "ReadWrite", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Chute", + "role": "Output2" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureChuteDigitalFlipFlopSplitterRight": { + "prefab": { + "prefab_name": "StructureChuteDigitalFlipFlopSplitterRight", + "prefab_hash": 163728359, + "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.", + "name": "Chute Digital Flip Flop Splitter Right" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Setting": "ReadWrite", + "Quantity": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "SettingOutput": "ReadWrite", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Chute", + "role": "Output2" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureChuteDigitalValveLeft": { + "prefab": { + "prefab_name": "StructureChuteDigitalValveLeft", + "prefab_hash": 648608238, + "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.", + "name": "Chute Digital Valve Left" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Quantity": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureChuteDigitalValveRight": { + "prefab": { + "prefab_name": "StructureChuteDigitalValveRight", + "prefab_hash": -1337091041, + "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.", + "name": "Chute Digital Valve Right" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Quantity": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureChuteFlipFlopSplitter": { + "prefab": { + "prefab_name": "StructureChuteFlipFlopSplitter", + "prefab_hash": -1446854725, + "desc": "A chute that toggles between two outputs", + "name": "Chute Flip Flop Splitter" + }, + "structure": { + "small_grid": true + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ] + }, + "StructureChuteInlet": { + "prefab": { + "prefab_name": "StructureChuteInlet", + "prefab_hash": -1469588766, + "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.", + "name": "Chute Inlet" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Lock": "ReadWrite", + "ClearMemory": "Write", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "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 + } + }, + "StructureChuteJunction": { + "prefab": { + "prefab_name": "StructureChuteJunction", + "prefab_hash": -611232514, + "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.", + "name": "Chute (Junction)" + }, + "structure": { + "small_grid": true + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ] + }, + "StructureChuteOutlet": { + "prefab": { + "prefab_name": "StructureChuteOutlet", + "prefab_hash": -1022714809, + "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.", + "name": "Chute Outlet" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Lock": "ReadWrite", + "ClearMemory": "Write", + "ExportCount": "Read", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Data", + "role": "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 + } + }, + "StructureChuteOverflow": { + "prefab": { + "prefab_name": "StructureChuteOverflow", + "prefab_hash": 225377225, + "desc": "The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied.", + "name": "Chute Overflow" + }, + "structure": { + "small_grid": true + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ] + }, + "StructureChuteStraight": { + "prefab": { + "prefab_name": "StructureChuteStraight", + "prefab_hash": 168307007, + "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.", + "name": "Chute (Straight)" + }, + "structure": { + "small_grid": true + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ] + }, + "StructureChuteUmbilicalFemale": { + "prefab": { + "prefab_name": "StructureChuteUmbilicalFemale", + "prefab_hash": -1918892177, + "desc": "", + "name": "Umbilical Socket (Chute)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + } + ], + "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 + } + }, + "StructureChuteUmbilicalFemaleSide": { + "prefab": { + "prefab_name": "StructureChuteUmbilicalFemaleSide", + "prefab_hash": -659093969, + "desc": "", + "name": "Umbilical Socket Angle (Chute)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + } + ], + "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 + } + }, + "StructureChuteUmbilicalMale": { + "prefab": { + "prefab_name": "StructureChuteUmbilicalMale", + "prefab_hash": -958884053, + "desc": "0.Left\n1.Center\n2.Right", + "name": "Umbilical (Chute)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Left", + "1": "Center", + "2": "Right" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureChuteValve": { + "prefab": { + "prefab_name": "StructureChuteValve", + "prefab_hash": 434875271, + "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.", + "name": "Chute Valve" + }, + "structure": { + "small_grid": true + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ] + }, + "StructureChuteWindow": { + "prefab": { + "prefab_name": "StructureChuteWindow", + "prefab_hash": -607241919, + "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.", + "name": "Chute (Window)" + }, + "structure": { + "small_grid": true + }, + "slots": [ + { + "name": "Transport Slot", + "typ": "None" + } + ] + }, + "StructureCircuitHousing": { + "prefab": { + "prefab_name": "StructureCircuitHousing", + "prefab_hash": -128473777, + "desc": "", + "name": "IC Housing" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "LineNumber": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "LineNumber": "ReadWrite", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": true + }, + "slots": [ + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": 6, + "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 + } + }, + "StructureCombustionCentrifuge": { + "prefab": { + "prefab_name": "StructureCombustionCentrifuge", + "prefab_hash": 1238905683, + "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 ", + "name": "Combustion Centrifuge" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.001, + "radiation_factor": 0.001 + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {}, + "2": {} + }, + "logic_types": { + "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", + "RatioLiquidNitrogenInput": "Read", + "RatioLiquidNitrogenOutput": "Read", + "RatioLiquidOxygen": "Read", + "RatioLiquidOxygenInput": "Read", + "RatioLiquidOxygenOutput": "Read", + "RatioLiquidVolatiles": "Read", + "RatioLiquidVolatilesInput": "Read", + "RatioLiquidVolatilesOutput": "Read", + "RatioSteam": "Read", + "RatioSteamInput": "Read", + "RatioSteamOutput": "Read", + "RatioLiquidCarbonDioxide": "Read", + "RatioLiquidCarbonDioxideInput": "Read", + "RatioLiquidCarbonDioxideOutput": "Read", + "RatioLiquidPollutant": "Read", + "RatioLiquidPollutantInput": "Read", + "RatioLiquidPollutantOutput": "Read", + "RatioLiquidNitrousOxide": "Read", + "RatioLiquidNitrousOxideInput": "Read", + "RatioLiquidNitrousOxideOutput": "Read", + "ReferenceId": "Read", + "RatioHydrogen": "Read", + "RatioLiquidHydrogen": "Read", + "RatioPollutedWater": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": true + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + }, + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + } + ], + "device_pins_length": 2, + "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 + } + }, + "StructureCompositeCladdingAngled": { + "prefab": { + "prefab_name": "StructureCompositeCladdingAngled", + "prefab_hash": -1513030150, + "desc": "", + "name": "Composite Cladding (Angled)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeCladdingAngledCorner": { + "prefab": { + "prefab_name": "StructureCompositeCladdingAngledCorner", + "prefab_hash": -69685069, + "desc": "", + "name": "Composite Cladding (Angled Corner)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeCladdingAngledCornerInner": { + "prefab": { + "prefab_name": "StructureCompositeCladdingAngledCornerInner", + "prefab_hash": -1841871763, + "desc": "", + "name": "Composite Cladding (Angled Corner Inner)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeCladdingAngledCornerInnerLong": { + "prefab": { + "prefab_name": "StructureCompositeCladdingAngledCornerInnerLong", + "prefab_hash": -1417912632, + "desc": "", + "name": "Composite Cladding (Angled Corner Inner Long)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeCladdingAngledCornerInnerLongL": { + "prefab": { + "prefab_name": "StructureCompositeCladdingAngledCornerInnerLongL", + "prefab_hash": 947705066, + "desc": "", + "name": "Composite Cladding (Angled Corner Inner Long L)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeCladdingAngledCornerInnerLongR": { + "prefab": { + "prefab_name": "StructureCompositeCladdingAngledCornerInnerLongR", + "prefab_hash": -1032590967, + "desc": "", + "name": "Composite Cladding (Angled Corner Inner Long R)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeCladdingAngledCornerLong": { + "prefab": { + "prefab_name": "StructureCompositeCladdingAngledCornerLong", + "prefab_hash": 850558385, + "desc": "", + "name": "Composite Cladding (Long Angled Corner)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeCladdingAngledCornerLongR": { + "prefab": { + "prefab_name": "StructureCompositeCladdingAngledCornerLongR", + "prefab_hash": -348918222, + "desc": "", + "name": "Composite Cladding (Long Angled Mirrored Corner)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeCladdingAngledLong": { + "prefab": { + "prefab_name": "StructureCompositeCladdingAngledLong", + "prefab_hash": -387546514, + "desc": "", + "name": "Composite Cladding (Long Angled)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeCladdingCylindrical": { + "prefab": { + "prefab_name": "StructureCompositeCladdingCylindrical", + "prefab_hash": 212919006, + "desc": "", + "name": "Composite Cladding (Cylindrical)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeCladdingCylindricalPanel": { + "prefab": { + "prefab_name": "StructureCompositeCladdingCylindricalPanel", + "prefab_hash": 1077151132, + "desc": "", + "name": "Composite Cladding (Cylindrical Panel)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeCladdingPanel": { + "prefab": { + "prefab_name": "StructureCompositeCladdingPanel", + "prefab_hash": 1997436771, + "desc": "", + "name": "Composite Cladding (Panel)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeCladdingRounded": { + "prefab": { + "prefab_name": "StructureCompositeCladdingRounded", + "prefab_hash": -259357734, + "desc": "", + "name": "Composite Cladding (Rounded)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeCladdingRoundedCorner": { + "prefab": { + "prefab_name": "StructureCompositeCladdingRoundedCorner", + "prefab_hash": 1951525046, + "desc": "", + "name": "Composite Cladding (Rounded Corner)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeCladdingRoundedCornerInner": { + "prefab": { + "prefab_name": "StructureCompositeCladdingRoundedCornerInner", + "prefab_hash": 110184667, + "desc": "", + "name": "Composite Cladding (Rounded Corner Inner)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeCladdingSpherical": { + "prefab": { + "prefab_name": "StructureCompositeCladdingSpherical", + "prefab_hash": 139107321, + "desc": "", + "name": "Composite Cladding (Spherical)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeCladdingSphericalCap": { + "prefab": { + "prefab_name": "StructureCompositeCladdingSphericalCap", + "prefab_hash": 534213209, + "desc": "", + "name": "Composite Cladding (Spherical Cap)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeCladdingSphericalCorner": { + "prefab": { + "prefab_name": "StructureCompositeCladdingSphericalCorner", + "prefab_hash": 1751355139, + "desc": "", + "name": "Composite Cladding (Spherical Corner)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeDoor": { + "prefab": { + "prefab_name": "StructureCompositeDoor", + "prefab_hash": -793837322, + "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.", + "name": "Composite Door" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureCompositeFloorGrating": { + "prefab": { + "prefab_name": "StructureCompositeFloorGrating", + "prefab_hash": 324868581, + "desc": "While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings.", + "name": "Composite Floor Grating" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeFloorGrating2": { + "prefab": { + "prefab_name": "StructureCompositeFloorGrating2", + "prefab_hash": -895027741, + "desc": "", + "name": "Composite Floor Grating (Type 2)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeFloorGrating3": { + "prefab": { + "prefab_name": "StructureCompositeFloorGrating3", + "prefab_hash": -1113471627, + "desc": "", + "name": "Composite Floor Grating (Type 3)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeFloorGrating4": { + "prefab": { + "prefab_name": "StructureCompositeFloorGrating4", + "prefab_hash": 600133846, + "desc": "", + "name": "Composite Floor Grating (Type 4)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeFloorGratingOpen": { + "prefab": { + "prefab_name": "StructureCompositeFloorGratingOpen", + "prefab_hash": 2109695912, + "desc": "", + "name": "Composite Floor Grating Open" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeFloorGratingOpenRotated": { + "prefab": { + "prefab_name": "StructureCompositeFloorGratingOpenRotated", + "prefab_hash": 882307910, + "desc": "", + "name": "Composite Floor Grating Open Rotated" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeWall": { + "prefab": { + "prefab_name": "StructureCompositeWall", + "prefab_hash": 1237302061, + "desc": "Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties.", + "name": "Composite Wall (Type 1)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeWall02": { + "prefab": { + "prefab_name": "StructureCompositeWall02", + "prefab_hash": 718343384, + "desc": "", + "name": "Composite Wall (Type 2)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeWall03": { + "prefab": { + "prefab_name": "StructureCompositeWall03", + "prefab_hash": 1574321230, + "desc": "", + "name": "Composite Wall (Type 3)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeWall04": { + "prefab": { + "prefab_name": "StructureCompositeWall04", + "prefab_hash": -1011701267, + "desc": "", + "name": "Composite Wall (Type 4)" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeWindow": { + "prefab": { + "prefab_name": "StructureCompositeWindow", + "prefab_hash": -2060571986, + "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.", + "name": "Composite Window" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeWindowIron": { + "prefab": { + "prefab_name": "StructureCompositeWindowIron", + "prefab_hash": -688284639, + "desc": "", + "name": "Iron Window" + }, + "structure": { + "small_grid": false + } + }, + "StructureComputer": { + "prefab": { + "prefab_name": "StructureComputer", + "prefab_hash": -626563514, + "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", + "name": "Computer" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {}, + "2": {} + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Data Disk", + "typ": "DataDisk" + }, + { + "name": "Data Disk", + "typ": "DataDisk" + }, + { + "name": "Motherboard", + "typ": "Motherboard" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureCondensationChamber": { + "prefab": { + "prefab_name": "StructureCondensationChamber", + "prefab_hash": 1420719315, + "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.", + "name": "Condensation Chamber" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.001, + "radiation_factor": 0.000050000002 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input2" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "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 + } + }, + "StructureCondensationValve": { + "prefab": { + "prefab_name": "StructureCondensationValve", + "prefab_hash": -965741795, + "desc": "Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction.", + "name": "Condensation Valve" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Input" + } + ], + "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 + } + }, + "StructureConsole": { + "prefab": { + "prefab_name": "StructureConsole", + "prefab_hash": 235638270, + "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.", + "name": "Console" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Circuit Board", + "typ": "Circuitboard" + }, + { + "name": "Data Disk", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureConsoleDual": { + "prefab": { + "prefab_name": "StructureConsoleDual", + "prefab_hash": -722284333, + "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.", + "name": "Console Dual" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Circuit Board", + "typ": "Circuitboard" + }, + { + "name": "Data Disk", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureConsoleLED1x2": { + "prefab": { + "prefab_name": "StructureConsoleLED1x2", + "prefab_hash": -53151617, + "desc": "0.Default\n1.Percent\n2.Power", + "name": "LED Display (Medium)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Color": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Default", + "1": "Percent", + "2": "Power" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureConsoleLED1x3": { + "prefab": { + "prefab_name": "StructureConsoleLED1x3", + "prefab_hash": -1949054743, + "desc": "0.Default\n1.Percent\n2.Power", + "name": "LED Display (Large)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Color": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Default", + "1": "Percent", + "2": "Power" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureConsoleLED5": { + "prefab": { + "prefab_name": "StructureConsoleLED5", + "prefab_hash": -815193061, + "desc": "0.Default\n1.Percent\n2.Power", + "name": "LED Display (Small)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Color": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Default", + "1": "Percent", + "2": "Power" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureConsoleMonitor": { + "prefab": { + "prefab_name": "StructureConsoleMonitor", + "prefab_hash": 801677497, + "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.", + "name": "Console Monitor" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Circuit Board", + "typ": "Circuitboard" + }, + { + "name": "Data Disk", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureControlChair": { + "prefab": { + "prefab_name": "StructureControlChair", + "prefab_hash": -1961153710, + "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.", + "name": "Control Chair" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Entity", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureCornerLocker": { + "prefab": { + "prefab_name": "StructureCornerLocker", + "prefab_hash": -1968255729, + "desc": "", + "name": "Corner Locker" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructureCrateMount": { + "prefab": { + "prefab_name": "StructureCrateMount", + "prefab_hash": -733500083, + "desc": "", + "name": "Container Mount" + }, + "structure": { + "small_grid": true + }, + "slots": [ + { + "name": "Container Slot", + "typ": "None" + } + ] + }, + "StructureCryoTube": { + "prefab": { + "prefab_name": "StructureCryoTube", + "prefab_hash": 1938254586, + "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.", + "name": "CryoTube" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Bed", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureCryoTubeHorizontal": { + "prefab": { + "prefab_name": "StructureCryoTubeHorizontal", + "prefab_hash": 1443059329, + "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.", + "name": "Cryo Tube Horizontal" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.005, + "radiation_factor": 0.005 + }, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Player", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureCryoTubeVertical": { + "prefab": { + "prefab_name": "StructureCryoTubeVertical", + "prefab_hash": -1381321828, + "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.", + "name": "Cryo Tube Vertical" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.005, + "radiation_factor": 0.005 + }, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Player", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureDaylightSensor": { + "prefab": { + "prefab_name": "StructureDaylightSensor", + "prefab_hash": 1076425094, + "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.", + "name": "Daylight Sensor" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Mode": "ReadWrite", + "Activate": "ReadWrite", + "Horizontal": "Read", + "Vertical": "Read", + "SolarAngle": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "SolarIrradiance": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Default", + "1": "Horizontal", + "2": "Vertical" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureDeepMiner": { + "prefab": { + "prefab_name": "StructureDeepMiner", + "prefab_hash": 265720906, + "desc": "Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s", + "name": "Deep Miner" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "ClearMemory": "Write", + "ExportCount": "Read", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureDigitalValve": { + "prefab": { + "prefab_name": "StructureDigitalValve", + "prefab_hash": -1280984102, + "desc": "The digital valve allows Stationeers to create logic-controlled valves and pipe networks.", + "name": "Digital Valve" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureDiode": { + "prefab": { + "prefab_name": "StructureDiode", + "prefab_hash": 1944485013, + "desc": "", + "name": "LED" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Color": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureDiodeSlide": { + "prefab": { + "prefab_name": "StructureDiodeSlide", + "prefab_hash": 576516101, + "desc": "", + "name": "Diode Slide" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureDockPortSide": { + "prefab": { + "prefab_name": "StructureDockPortSide", + "prefab_hash": -137465079, + "desc": "", + "name": "Dock (Port Side)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Data", + "role": "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 + } + }, + "StructureDrinkingFountain": { + "prefab": { + "prefab_name": "StructureDrinkingFountain", + "prefab_hash": 1968371847, + "desc": "", + "name": "" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureElectrolyzer": { + "prefab": { + "prefab_name": "StructureElectrolyzer", + "prefab_hash": -1668992663, + "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.", + "name": "Electrolyzer" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "RatioLiquidNitrogenInput": "Read", + "RatioLiquidNitrogenOutput": "Read", + "RatioLiquidOxygen": "Read", + "RatioLiquidOxygenInput": "Read", + "RatioLiquidOxygenOutput": "Read", + "RatioLiquidVolatiles": "Read", + "RatioLiquidVolatilesInput": "Read", + "RatioLiquidVolatilesOutput": "Read", + "RatioSteam": "Read", + "RatioSteamInput": "Read", + "RatioSteamOutput": "Read", + "RatioLiquidCarbonDioxide": "Read", + "RatioLiquidCarbonDioxideInput": "Read", + "RatioLiquidCarbonDioxideOutput": "Read", + "RatioLiquidPollutant": "Read", + "RatioLiquidPollutantInput": "Read", + "RatioLiquidPollutantOutput": "Read", + "RatioLiquidNitrousOxide": "Read", + "RatioLiquidNitrousOxideInput": "Read", + "RatioLiquidNitrousOxideOutput": "Read", + "ReferenceId": "Read", + "RatioHydrogen": "Read", + "RatioLiquidHydrogen": "Read", + "RatioPollutedWater": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Idle", + "1": "Active" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": true + }, + "slots": [ + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": 2, + "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 + } + }, + "StructureElectronicsPrinter": { + "prefab": { + "prefab_name": "StructureElectronicsPrinter", + "prefab_hash": 1307165496, + "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.", + "name": "Electronics Printer" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Ingot" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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": { + "consumed_resouces": [ + "ItemAstroloyIngot", + "ItemConstantanIngot", + "ItemCopperIngot", + "ItemElectrumIngot", + "ItemGoldIngot", + "ItemHastelloyIngot", + "ItemInconelIngot", + "ItemInvarIngot", + "ItemIronIngot", + "ItemLeadIngot", + "ItemNickelIngot", + "ItemSiliconIngot", + "ItemSilverIngot", + "ItemSolderIngot", + "ItemSolidFuel", + "ItemSteelIngot", + "ItemStelliteIngot", + "ItemWaspaloyIngot", + "ItemWasteIngot" + ], + "processed_reagents": [] + }, + "fabricator_info": { + "tier": "Undefined", + "recipes": { + "ApplianceChemistryStation": { + "tier": "TierOne", + "time": 45.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 1.0, + "Steel": 5.0 + } + }, + "ApplianceDeskLampLeft": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 2.0, + "Silicon": 1.0 + } + }, + "ApplianceDeskLampRight": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 2.0, + "Silicon": 1.0 + } + }, + "ApplianceMicrowave": { + "tier": "TierOne", + "time": 45.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 5.0 + } + }, + "AppliancePackagingMachine": { + "tier": "TierOne", + "time": 30.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 10.0 + } + }, + "AppliancePaintMixer": { + "tier": "TierOne", + "time": 45.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 1.0, + "Steel": 5.0 + } + }, + "AppliancePlantGeneticAnalyzer": { + "tier": "TierOne", + "time": 45.0, + "energy": 4500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 1.0, + "Steel": 5.0 + } + }, + "AppliancePlantGeneticSplicer": { + "tier": "TierOne", + "time": 50.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Inconel": 10.0, + "Stellite": 20.0 + } + }, + "AppliancePlantGeneticStabilizer": { + "tier": "TierOne", + "time": 50.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Inconel": 10.0, + "Stellite": 20.0 + } + }, + "ApplianceReagentProcessor": { + "tier": "TierOne", + "time": 45.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 5.0 + } + }, + "ApplianceTabletDock": { + "tier": "TierOne", + "time": 30.0, + "energy": 750.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 5.0, + "Silicon": 1.0 + } + }, + "AutolathePrinterMod": { + "tier": "TierTwo", + "time": 180.0, + "energy": 72000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 8.0, + "Electrum": 8.0, + "Solder": 8.0, + "Steel": 35.0 + } + }, + "Battery_Wireless_cell": { + "tier": "TierOne", + "time": 10.0, + "energy": 10000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 2.0, + "Iron": 2.0 + } + }, + "Battery_Wireless_cell_Big": { + "tier": "TierOne", + "time": 20.0, + "energy": 20000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 15.0, + "Gold": 5.0, + "Steel": 5.0 + } + }, + "CartridgeAtmosAnalyser": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CartridgeConfiguration": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CartridgeElectronicReader": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CartridgeGPS": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CartridgeMedicalAnalyser": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CartridgeNetworkAnalyser": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CartridgeOreScanner": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CartridgeOreScannerColor": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 5.0, + "Electrum": 5.0, + "Invar": 5.0, + "Silicon": 5.0 + } + }, + "CartridgePlantAnalyser": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CartridgeTracker": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CircuitboardAdvAirlockControl": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CircuitboardAirControl": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "CircuitboardAirlockControl": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CircuitboardDoorControl": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "CircuitboardGasDisplay": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "CircuitboardGraphDisplay": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "CircuitboardHashDisplay": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "CircuitboardModeControl": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "CircuitboardPowerControl": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "CircuitboardShipDisplay": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "CircuitboardSolarControl": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "DynamicLight": { + "tier": "TierOne", + "time": 20.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 5.0 + } + }, + "ElectronicPrinterMod": { + "tier": "TierOne", + "time": 180.0, + "energy": 72000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 8.0, + "Electrum": 8.0, + "Solder": 8.0, + "Steel": 35.0 + } + }, + "ItemAdvancedTablet": { + "tier": "TierTwo", + "time": 60.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 6, + "reagents": { + "Copper": 5.5, + "Electrum": 1.0, + "Gold": 12.0, + "Iron": 3.0, + "Solder": 5.0, + "Steel": 2.0 + } + }, + "ItemAreaPowerControl": { + "tier": "TierOne", + "time": 5.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Iron": 5.0, + "Solder": 3.0 + } + }, + "ItemBatteryCell": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 2.0, + "Iron": 2.0 + } + }, + "ItemBatteryCellLarge": { + "tier": "TierOne", + "time": 20.0, + "energy": 20000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 5.0, + "Steel": 5.0 + } + }, + "ItemBatteryCellNuclear": { + "tier": "TierTwo", + "time": 180.0, + "energy": 360000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Astroloy": 10.0, + "Inconel": 5.0, + "Steel": 5.0 + } + }, + "ItemBatteryCharger": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 10.0 + } + }, + "ItemBatteryChargerSmall": { + "tier": "TierOne", + "time": 1.0, + "energy": 250.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 2.0, + "Iron": 5.0 + } + }, + "ItemCableAnalyser": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Iron": 1.0, + "Silicon": 2.0 + } + }, + "ItemCableCoil": { + "tier": "TierOne", + "time": 1.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Copper": 0.5 + } + }, + "ItemCableCoilHeavy": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 0.5, + "Gold": 0.5 + } + }, + "ItemCableFuse": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 5.0 + } + }, + "ItemCreditCard": { + "tier": "TierOne", + "time": 5.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Silicon": 5.0 + } + }, + "ItemDataDisk": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "ItemElectronicParts": { + "tier": "TierOne", + "time": 5.0, + "energy": 10.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Iron": 3.0 + } + }, + "ItemFlashingLight": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 3.0, + "Iron": 2.0 + } + }, + "ItemHEMDroidRepairKit": { + "tier": "TierTwo", + "time": 40.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 10.0, + "Inconel": 5.0, + "Solder": 5.0 + } + }, + "ItemIntegratedCircuit10": { + "tier": "TierOne", + "time": 40.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Electrum": 5.0, + "Gold": 10.0, + "Solder": 2.0, + "Steel": 4.0 + } + }, + "ItemKitAIMeE": { + "tier": "TierTwo", + "time": 25.0, + "energy": 2200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 7, + "reagents": { + "Astroloy": 10.0, + "Constantan": 8.0, + "Copper": 5.0, + "Electrum": 15.0, + "Gold": 5.0, + "Invar": 7.0, + "Steel": 22.0 + } + }, + "ItemKitAdvancedComposter": { + "tier": "TierTwo", + "time": 55.0, + "energy": 20000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 15.0, + "Electrum": 20.0, + "Solder": 5.0, + "Steel": 30.0 + } + }, + "ItemKitAdvancedFurnace": { + "tier": "TierTwo", + "time": 180.0, + "energy": 36000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 6, + "reagents": { + "Copper": 25.0, + "Electrum": 15.0, + "Gold": 5.0, + "Silicon": 6.0, + "Solder": 8.0, + "Steel": 30.0 + } + }, + "ItemKitAdvancedPackagingMachine": { + "tier": "TierTwo", + "time": 60.0, + "energy": 18000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 10.0, + "Copper": 10.0, + "Electrum": 15.0, + "Steel": 20.0 + } + }, + "ItemKitAutoMinerSmall": { + "tier": "TierTwo", + "time": 90.0, + "energy": 9000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 5, + "reagents": { + "Copper": 15.0, + "Electrum": 50.0, + "Invar": 25.0, + "Iron": 15.0, + "Steel": 100.0 + } + }, + "ItemKitAutomatedOven": { + "tier": "TierTwo", + "time": 50.0, + "energy": 15000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 5, + "reagents": { + "Constantan": 5.0, + "Copper": 15.0, + "Gold": 10.0, + "Solder": 10.0, + "Steel": 25.0 + } + }, + "ItemKitBattery": { + "tier": "TierOne", + "time": 120.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 20.0, + "Gold": 20.0, + "Steel": 20.0 + } + }, + "ItemKitBatteryLarge": { + "tier": "TierTwo", + "time": 240.0, + "energy": 96000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 6, + "reagents": { + "Copper": 35.0, + "Electrum": 10.0, + "Gold": 35.0, + "Silicon": 5.0, + "Steel": 35.0, + "Stellite": 2.0 + } + }, + "ItemKitBeacon": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 2.0, + "Gold": 4.0, + "Solder": 2.0, + "Steel": 5.0 + } + }, + "ItemKitComputer": { + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 5.0, + "Iron": 5.0 + } + }, + "ItemKitConsole": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 3.0, + "Iron": 2.0 + } + }, + "ItemKitDynamicGenerator": { + "tier": "TierOne", + "time": 120.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Gold": 15.0, + "Nickel": 15.0, + "Solder": 5.0, + "Steel": 20.0 + } + }, + "ItemKitElevator": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 2.0, + "Gold": 4.0, + "Solder": 2.0, + "Steel": 2.0 + } + }, + "ItemKitFridgeBig": { + "tier": "TierOne", + "time": 10.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 10.0, + "Gold": 5.0, + "Iron": 20.0, + "Steel": 15.0 + } + }, + "ItemKitFridgeSmall": { + "tier": "TierOne", + "time": 10.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 2.0, + "Iron": 10.0 + } + }, + "ItemKitGasGenerator": { + "tier": "TierOne", + "time": 120.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Iron": 50.0 + } + }, + "ItemKitGroundTelescope": { + "tier": "TierOne", + "time": 150.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 15.0, + "Solder": 10.0, + "Steel": 25.0 + } + }, + "ItemKitGrowLight": { + "tier": "TierOne", + "time": 30.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Electrum": 10.0, + "Steel": 5.0 + } + }, + "ItemKitHarvie": { + "tier": "TierOne", + "time": 60.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 5, + "reagents": { + "Copper": 15.0, + "Electrum": 10.0, + "Silicon": 5.0, + "Solder": 5.0, + "Steel": 10.0 + } + }, + "ItemKitHorizontalAutoMiner": { + "tier": "TierTwo", + "time": 60.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 5, + "reagents": { + "Copper": 7.0, + "Electrum": 25.0, + "Invar": 15.0, + "Iron": 8.0, + "Steel": 60.0 + } + }, + "ItemKitHydroponicStation": { + "tier": "TierOne", + "time": 120.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 20.0, + "Gold": 5.0, + "Nickel": 5.0, + "Steel": 10.0 + } + }, + "ItemKitLandingPadAtmos": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Steel": 5.0 + } + }, + "ItemKitLandingPadBasic": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Steel": 5.0 + } + }, + "ItemKitLandingPadWaypoint": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Steel": 5.0 + } + }, + "ItemKitLargeSatelliteDish": { + "tier": "TierOne", + "time": 240.0, + "energy": 72000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Astroloy": 100.0, + "Inconel": 50.0, + "Waspaloy": 20.0 + } + }, + "ItemKitLogicCircuit": { + "tier": "TierOne", + "time": 40.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Solder": 2.0, + "Steel": 4.0 + } + }, + "ItemKitLogicInputOutput": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Gold": 1.0 + } + }, + "ItemKitLogicMemory": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Gold": 1.0 + } + }, + "ItemKitLogicProcessor": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Gold": 2.0 + } + }, + "ItemKitLogicSwitch": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Gold": 1.0 + } + }, + "ItemKitLogicTransmitter": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 1.0, + "Electrum": 3.0, + "Gold": 2.0, + "Silicon": 5.0 + } + }, + "ItemKitMusicMachines": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Gold": 2.0 + } + }, + "ItemKitPowerTransmitter": { + "tier": "TierOne", + "time": 20.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 7.0, + "Gold": 5.0, + "Steel": 3.0 + } + }, + "ItemKitPowerTransmitterOmni": { + "tier": "TierOne", + "time": 20.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 8.0, + "Gold": 4.0, + "Steel": 4.0 + } + }, + "ItemKitPressurePlate": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Gold": 2.0 + } + }, + "ItemKitResearchMachine": { + "tier": "TierOne", + "time": 5.0, + "energy": 10.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Iron": 9.0 + } + }, + "ItemKitSatelliteDish": { + "tier": "TierOne", + "time": 120.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 15.0, + "Solder": 10.0, + "Steel": 20.0 + } + }, + "ItemKitSensor": { + "tier": "TierOne", + "time": 5.0, + "energy": 10.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 3.0 + } + }, + "ItemKitSmallSatelliteDish": { + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Gold": 5.0 + } + }, + "ItemKitSolarPanel": { + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 20.0, + "Gold": 5.0, + "Steel": 15.0 + } + }, + "ItemKitSolarPanelBasic": { + "tier": "TierOne", + "time": 30.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 2.0, + "Iron": 10.0 + } + }, + "ItemKitSolarPanelBasicReinforced": { + "tier": "TierTwo", + "time": 120.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 10.0, + "Electrum": 2.0, + "Invar": 10.0, + "Steel": 10.0 + } + }, + "ItemKitSolarPanelReinforced": { + "tier": "TierTwo", + "time": 120.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Astroloy": 15.0, + "Copper": 20.0, + "Electrum": 5.0, + "Steel": 10.0 + } + }, + "ItemKitSolidGenerator": { + "tier": "TierOne", + "time": 120.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Iron": 50.0 + } + }, + "ItemKitSpeaker": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Steel": 5.0 + } + }, + "ItemKitStirlingEngine": { + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 20.0, + "Gold": 5.0, + "Steel": 30.0 + } + }, + "ItemKitTransformer": { + "tier": "TierOne", + "time": 60.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 5.0, + "Steel": 10.0 + } + }, + "ItemKitTransformerSmall": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 1.0, + "Iron": 10.0 + } + }, + "ItemKitTurbineGenerator": { + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 2.0, + "Gold": 4.0, + "Iron": 5.0, + "Solder": 4.0 + } + }, + "ItemKitUprightWindTurbine": { + "tier": "TierOne", + "time": 60.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 5.0, + "Iron": 10.0 + } + }, + "ItemKitVendingMachine": { + "tier": "TierOne", + "time": 60.0, + "energy": 15000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Electrum": 50.0, + "Gold": 50.0, + "Solder": 10.0, + "Steel": 20.0 + } + }, + "ItemKitVendingMachineRefrigerated": { + "tier": "TierTwo", + "time": 60.0, + "energy": 25000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Electrum": 80.0, + "Gold": 60.0, + "Solder": 30.0, + "Steel": 40.0 + } + }, + "ItemKitWeatherStation": { + "tier": "TierOne", + "time": 60.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Gold": 3.0, + "Iron": 8.0, + "Steel": 3.0 + } + }, + "ItemKitWindTurbine": { + "tier": "TierTwo", + "time": 60.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Electrum": 5.0, + "Steel": 20.0 + } + }, + "ItemLabeller": { + "tier": "TierOne", + "time": 15.0, + "energy": 800.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 3.0 + } + }, + "ItemLaptop": { + "tier": "TierTwo", + "time": 60.0, + "energy": 18000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 5, + "reagents": { + "Copper": 5.5, + "Electrum": 5.0, + "Gold": 12.0, + "Solder": 5.0, + "Steel": 2.0 + } + }, + "ItemPowerConnector": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 3.0, + "Iron": 10.0 + } + }, + "ItemResearchCapsule": { + "tier": "TierOne", + "time": 3.0, + "energy": 400.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Iron": 9.0 + } + }, + "ItemResearchCapsuleGreen": { + "tier": "TierOne", + "time": 5.0, + "energy": 10.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Astroloy": 2.0, + "Copper": 3.0, + "Gold": 2.0, + "Iron": 9.0 + } + }, + "ItemResearchCapsuleRed": { + "tier": "TierOne", + "time": 8.0, + "energy": 50.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Iron": 2.0 + } + }, + "ItemResearchCapsuleYellow": { + "tier": "TierOne", + "time": 5.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Astroloy": 3.0, + "Copper": 3.0, + "Gold": 2.0, + "Iron": 9.0 + } + }, + "ItemSoundCartridgeBass": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 2.0, + "Silicon": 2.0 + } + }, + "ItemSoundCartridgeDrums": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 2.0, + "Silicon": 2.0 + } + }, + "ItemSoundCartridgeLeads": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 2.0, + "Silicon": 2.0 + } + }, + "ItemSoundCartridgeSynth": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 2.0, + "Silicon": 2.0 + } + }, + "ItemTablet": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Solder": 5.0 + } + }, + "ItemWallLight": { + "tier": "TierOne", + "time": 5.0, + "energy": 10.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 1.0 + } + }, + "MotherboardComms": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Electrum": 2.0, + "Gold": 5.0, + "Silver": 5.0 + } + }, + "MotherboardLogic": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "MotherboardProgrammableChip": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + "MotherboardRockets": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 5.0, + "Solder": 5.0 + } + }, + "MotherboardSorter": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 5.0, + "Silver": 5.0 + } + }, + "PipeBenderMod": { + "tier": "TierTwo", + "time": 180.0, + "energy": 72000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 8.0, + "Electrum": 8.0, + "Solder": 8.0, + "Steel": 35.0 + } + }, + "PortableComposter": { + "tier": "TierOne", + "time": 55.0, + "energy": 20000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 15.0, + "Steel": 10.0 + } + }, + "PortableSolarPanel": { + "tier": "TierOne", + "time": 5.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 3.0, + "Iron": 5.0 + } + }, + "ToolPrinterMod": { + "tier": "TierTwo", + "time": 180.0, + "energy": 72000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 8.0, + "Electrum": 8.0, + "Solder": 8.0, + "Steel": 35.0 + } + } + } + }, + "memory": { + "instructions": { + "DeviceSetLock": { + "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 |", + "typ": "PrinterInstruction", + "value": 6 + }, + "EjectAllReagents": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 8 + }, + "EjectReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 7 + }, + "ExecuteRecipe": { + "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 |", + "typ": "PrinterInstruction", + "value": 2 + }, + "JumpIfNextInvalid": { + "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 |", + "typ": "PrinterInstruction", + "value": 4 + }, + "JumpToAddress": { + "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 |", + "typ": "PrinterInstruction", + "value": 5 + }, + "MissingRecipeReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 9 + }, + "StackPointer": { + "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 |", + "typ": "PrinterInstruction", + "value": 1 + }, + "WaitUntilNextValid": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 3 + } + }, + "memory_access": "ReadWrite", + "memory_size": 64 + } + }, + "StructureElevatorLevelFront": { + "prefab": { + "prefab_name": "StructureElevatorLevelFront", + "prefab_hash": -827912235, + "desc": "", + "name": "Elevator Level (Cabled)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "ElevatorSpeed": "ReadWrite", + "ElevatorLevel": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Elevator", + "role": "None" + }, + { + "typ": "Elevator", + "role": "None" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureElevatorLevelIndustrial": { + "prefab": { + "prefab_name": "StructureElevatorLevelIndustrial", + "prefab_hash": 2060648791, + "desc": "", + "name": "Elevator Level" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "ElevatorSpeed": "ReadWrite", + "ElevatorLevel": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Elevator", + "role": "None" + }, + { + "typ": "Elevator", + "role": "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 + } + }, + "StructureElevatorShaft": { + "prefab": { + "prefab_name": "StructureElevatorShaft", + "prefab_hash": 826144419, + "desc": "", + "name": "Elevator Shaft (Cabled)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "ElevatorSpeed": "ReadWrite", + "ElevatorLevel": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Elevator", + "role": "None" + }, + { + "typ": "Elevator", + "role": "None" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureElevatorShaftIndustrial": { + "prefab": { + "prefab_name": "StructureElevatorShaftIndustrial", + "prefab_hash": 1998354978, + "desc": "", + "name": "Elevator Shaft" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "ElevatorSpeed": "ReadWrite", + "ElevatorLevel": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Elevator", + "role": "None" + }, + { + "typ": "Elevator", + "role": "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 + } + }, + "StructureEmergencyButton": { + "prefab": { + "prefab_name": "StructureEmergencyButton", + "prefab_hash": 1668452680, + "desc": "Description coming.", + "name": "Important Button" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureEngineMountTypeA1": { + "prefab": { + "prefab_name": "StructureEngineMountTypeA1", + "prefab_hash": 2035781224, + "desc": "", + "name": "Engine Mount (Type A1)" + }, + "structure": { + "small_grid": false + } + }, + "StructureEvaporationChamber": { + "prefab": { + "prefab_name": "StructureEvaporationChamber", + "prefab_hash": -1429782576, + "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.", + "name": "Evaporation Chamber" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.001, + "radiation_factor": 0.000050000002 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input2" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "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 + } + }, + "StructureExpansionValve": { + "prefab": { + "prefab_name": "StructureExpansionValve", + "prefab_hash": 195298587, + "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.", + "name": "Expansion Valve" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "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 + } + }, + "StructureFairingTypeA1": { + "prefab": { + "prefab_name": "StructureFairingTypeA1", + "prefab_hash": 1622567418, + "desc": "", + "name": "Fairing (Type A1)" + }, + "structure": { + "small_grid": false + } + }, + "StructureFairingTypeA2": { + "prefab": { + "prefab_name": "StructureFairingTypeA2", + "prefab_hash": -104908736, + "desc": "", + "name": "Fairing (Type A2)" + }, + "structure": { + "small_grid": false + } + }, + "StructureFairingTypeA3": { + "prefab": { + "prefab_name": "StructureFairingTypeA3", + "prefab_hash": -1900541738, + "desc": "", + "name": "Fairing (Type A3)" + }, + "structure": { + "small_grid": false + } + }, + "StructureFiltration": { + "prefab": { + "prefab_name": "StructureFiltration", + "prefab_hash": -348054045, + "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", + "name": "Filtration" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {}, + "2": {} + }, + "logic_types": { + "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", + "RatioLiquidNitrogenInput": "Read", + "RatioLiquidNitrogenOutput": "Read", + "RatioLiquidNitrogenOutput2": "Read", + "RatioLiquidOxygenInput": "Read", + "RatioLiquidOxygenOutput": "Read", + "RatioLiquidOxygenOutput2": "Read", + "RatioLiquidVolatilesInput": "Read", + "RatioLiquidVolatilesOutput": "Read", + "RatioLiquidVolatilesOutput2": "Read", + "RatioSteamInput": "Read", + "RatioSteamOutput": "Read", + "RatioSteamOutput2": "Read", + "RatioLiquidCarbonDioxideInput": "Read", + "RatioLiquidCarbonDioxideOutput": "Read", + "RatioLiquidCarbonDioxideOutput2": "Read", + "RatioLiquidPollutantInput": "Read", + "RatioLiquidPollutantOutput": "Read", + "RatioLiquidPollutantOutput2": "Read", + "RatioLiquidNitrousOxideInput": "Read", + "RatioLiquidNitrousOxideOutput": "Read", + "RatioLiquidNitrousOxideOutput2": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Idle", + "1": "Active" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": true + }, + "slots": [ + { + "name": "Gas Filter", + "typ": "GasFilter" + }, + { + "name": "Gas Filter", + "typ": "GasFilter" + }, + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Waste" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": 2, + "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 + } + }, + "StructureFlagSmall": { + "prefab": { + "prefab_name": "StructureFlagSmall", + "prefab_hash": -1529819532, + "desc": "", + "name": "Small Flag" + }, + "structure": { + "small_grid": true + } + }, + "StructureFlashingLight": { + "prefab": { + "prefab_name": "StructureFlashingLight", + "prefab_hash": -1535893860, + "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'.", + "name": "Flashing Light" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureFlatBench": { + "prefab": { + "prefab_name": "StructureFlatBench", + "prefab_hash": 839890807, + "desc": "", + "name": "Bench (Flat)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Seat", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructureFloorDrain": { + "prefab": { + "prefab_name": "StructureFloorDrain", + "prefab_hash": 1048813293, + "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.", + "name": "Passive Liquid Inlet" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructureFrame": { + "prefab": { + "prefab_name": "StructureFrame", + "prefab_hash": 1432512808, + "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.", + "name": "Steel Frame" + }, + "structure": { + "small_grid": false + } + }, + "StructureFrameCorner": { + "prefab": { + "prefab_name": "StructureFrameCorner", + "prefab_hash": -2112390778, + "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.", + "name": "Steel Frame (Corner)" + }, + "structure": { + "small_grid": false + } + }, + "StructureFrameCornerCut": { + "prefab": { + "prefab_name": "StructureFrameCornerCut", + "prefab_hash": 271315669, + "desc": "0.Mode0\n1.Mode1", + "name": "Steel Frame (Corner Cut)" + }, + "structure": { + "small_grid": false + } + }, + "StructureFrameIron": { + "prefab": { + "prefab_name": "StructureFrameIron", + "prefab_hash": -1240951678, + "desc": "", + "name": "Iron Frame" + }, + "structure": { + "small_grid": false + } + }, + "StructureFrameSide": { + "prefab": { + "prefab_name": "StructureFrameSide", + "prefab_hash": -302420053, + "desc": "More durable than the Iron Frame, steel frames also provide variations for more ornate constructions.", + "name": "Steel Frame (Side)" + }, + "structure": { + "small_grid": false + } + }, + "StructureFridgeBig": { + "prefab": { + "prefab_name": "StructureFridgeBig", + "prefab_hash": 958476921, + "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.", + "name": "Fridge (Large)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": 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" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureFridgeSmall": { + "prefab": { + "prefab_name": "StructureFridgeSmall", + "prefab_hash": 751887598, + "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.", + "name": "Fridge Small" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + } + ], + "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 + } + }, + "StructureFurnace": { + "prefab": { + "prefab_name": "StructureFurnace", + "prefab_hash": 1947944864, + "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.", + "name": "Furnace" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Output2" + }, + { + "typ": "Data", + "role": "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 + } + }, + "StructureFuselageTypeA1": { + "prefab": { + "prefab_name": "StructureFuselageTypeA1", + "prefab_hash": 1033024712, + "desc": "", + "name": "Fuselage (Type A1)" + }, + "structure": { + "small_grid": false + } + }, + "StructureFuselageTypeA2": { + "prefab": { + "prefab_name": "StructureFuselageTypeA2", + "prefab_hash": -1533287054, + "desc": "", + "name": "Fuselage (Type A2)" + }, + "structure": { + "small_grid": false + } + }, + "StructureFuselageTypeA4": { + "prefab": { + "prefab_name": "StructureFuselageTypeA4", + "prefab_hash": 1308115015, + "desc": "", + "name": "Fuselage (Type A4)" + }, + "structure": { + "small_grid": false + } + }, + "StructureFuselageTypeC5": { + "prefab": { + "prefab_name": "StructureFuselageTypeC5", + "prefab_hash": 147395155, + "desc": "", + "name": "Fuselage (Type C5)" + }, + "structure": { + "small_grid": false + } + }, + "StructureGasGenerator": { + "prefab": { + "prefab_name": "StructureGasGenerator", + "prefab_hash": 1165997963, + "desc": "", + "name": "Gas Fuel Generator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.01, + "radiation_factor": 0.01 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureGasMixer": { + "prefab": { + "prefab_name": "StructureGasMixer", + "prefab_hash": 2104106366, + "desc": "Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%.", + "name": "Gas Mixer" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Input2" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureGasSensor": { + "prefab": { + "prefab_name": "StructureGasSensor", + "prefab_hash": -1252983604, + "desc": "Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents.", + "name": "Gas Sensor" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "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 + } + }, + "StructureGasTankStorage": { + "prefab": { + "prefab_name": "StructureGasTankStorage", + "prefab_hash": 1632165346, + "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.", + "name": "Gas Tank Storage" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Pressure": "Read", + "Temperature": "Read", + "RatioOxygen": "Read", + "RatioCarbonDioxide": "Read", + "RatioNitrogen": "Read", + "RatioPollutant": "Read", + "RatioVolatiles": "Read", + "RatioWater": "Read", + "Quantity": "Read", + "RatioNitrousOxide": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "GasCanister" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + } + ], + "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 + } + }, + "StructureGasUmbilicalFemale": { + "prefab": { + "prefab_name": "StructureGasUmbilicalFemale", + "prefab_hash": -1680477930, + "desc": "", + "name": "Umbilical Socket (Gas)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + } + ], + "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 + } + }, + "StructureGasUmbilicalFemaleSide": { + "prefab": { + "prefab_name": "StructureGasUmbilicalFemaleSide", + "prefab_hash": -648683847, + "desc": "", + "name": "Umbilical Socket Angle (Gas)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + } + ], + "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 + } + }, + "StructureGasUmbilicalMale": { + "prefab": { + "prefab_name": "StructureGasUmbilicalMale", + "prefab_hash": -1814939203, + "desc": "0.Left\n1.Center\n2.Right", + "name": "Umbilical (Gas)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Left", + "1": "Center", + "2": "Right" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureGlassDoor": { + "prefab": { + "prefab_name": "StructureGlassDoor", + "prefab_hash": -324331872, + "desc": "0.Operate\n1.Logic", + "name": "Glass Door" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureGovernedGasEngine": { + "prefab": { + "prefab_name": "StructureGovernedGasEngine", + "prefab_hash": -214232602, + "desc": "The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas.", + "name": "Pumped Gas Engine" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureGroundBasedTelescope": { + "prefab": { + "prefab_name": "StructureGroundBasedTelescope", + "prefab_hash": -619745681, + "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.", + "name": "Telescope" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureGrowLight": { + "prefab": { + "prefab_name": "StructureGrowLight", + "prefab_hash": -1758710260, + "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. ", + "name": "Grow Light" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureHarvie": { + "prefab": { + "prefab_name": "StructureHarvie", + "prefab_hash": 958056199, + "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.", + "name": "Harvie" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Idle", + "1": "Happy", + "2": "UnHappy", + "3": "Dead" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Plant" + }, + { + "name": "Export", + "typ": "None" + }, + { + "name": "Hand", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureHeatExchangeLiquidtoGas": { + "prefab": { + "prefab_name": "StructureHeatExchangeLiquidtoGas", + "prefab_hash": 944685608, + "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.", + "name": "Heat Exchanger - Liquid + Gas" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "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 + } + }, + "StructureHeatExchangerGastoGas": { + "prefab": { + "prefab_name": "StructureHeatExchangerGastoGas", + "prefab_hash": 21266291, + "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.", + "name": "Heat Exchanger - Gas" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Output" + } + ], + "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 + } + }, + "StructureHeatExchangerLiquidtoLiquid": { + "prefab": { + "prefab_name": "StructureHeatExchangerLiquidtoLiquid", + "prefab_hash": -613784254, + "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", + "name": "Heat Exchanger - Liquid" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "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 + } + }, + "StructureHorizontalAutoMiner": { + "prefab": { + "prefab_name": "StructureHorizontalAutoMiner", + "prefab_hash": 1070427573, + "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", + "name": "OGRE" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "ClearMemory": "Write", + "ExportCount": "Read", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureHydraulicPipeBender": { + "prefab": { + "prefab_name": "StructureHydraulicPipeBender", + "prefab_hash": -1888248335, + "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.", + "name": "Hydraulic Pipe Bender" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Ingot" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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": { + "consumed_resouces": [ + "ItemAstroloyIngot", + "ItemConstantanIngot", + "ItemCopperIngot", + "ItemElectrumIngot", + "ItemGoldIngot", + "ItemHastelloyIngot", + "ItemInconelIngot", + "ItemInvarIngot", + "ItemIronIngot", + "ItemLeadIngot", + "ItemNickelIngot", + "ItemSiliconIngot", + "ItemSilverIngot", + "ItemSolderIngot", + "ItemSolidFuel", + "ItemSteelIngot", + "ItemStelliteIngot", + "ItemWaspaloyIngot", + "ItemWasteIngot" + ], + "processed_reagents": [] + }, + "fabricator_info": { + "tier": "Undefined", + "recipes": { + "ApplianceSeedTray": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Iron": 10.0, + "Silicon": 15.0 + } + }, + "ItemActiveVent": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 1.0, + "Iron": 5.0 + } + }, + "ItemAdhesiveInsulation": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 1.0, + "Steel": 0.5 + } + }, + "ItemDynamicAirCon": { + "tier": "TierOne", + "time": 60.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Gold": 5.0, + "Silver": 5.0, + "Solder": 5.0, + "Steel": 20.0 + } + }, + "ItemDynamicScrubber": { + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Gold": 5.0, + "Invar": 5.0, + "Solder": 5.0, + "Steel": 20.0 + } + }, + "ItemGasCanisterEmpty": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemGasCanisterSmart": { + "tier": "TierTwo", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Silicon": 2.0, + "Steel": 15.0 + } + }, + "ItemGasFilterCarbonDioxide": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemGasFilterCarbonDioxideL": { + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + "ItemGasFilterCarbonDioxideM": { + "tier": "TierOne", + "time": 20.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 1.0, + "Iron": 5.0, + "Silver": 5.0 + } + }, + "ItemGasFilterNitrogen": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemGasFilterNitrogenL": { + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + "ItemGasFilterNitrogenM": { + "tier": "TierOne", + "time": 20.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 1.0, + "Iron": 5.0, + "Silver": 5.0 + } + }, + "ItemGasFilterNitrousOxide": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemGasFilterNitrousOxideL": { + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + "ItemGasFilterNitrousOxideM": { + "tier": "TierOne", + "time": 20.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 1.0, + "Iron": 5.0, + "Silver": 5.0 + } + }, + "ItemGasFilterOxygen": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemGasFilterOxygenL": { + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + "ItemGasFilterOxygenM": { + "tier": "TierOne", + "time": 20.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 1.0, + "Iron": 5.0, + "Silver": 5.0 + } + }, + "ItemGasFilterPollutants": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemGasFilterPollutantsL": { + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + "ItemGasFilterPollutantsM": { + "tier": "TierOne", + "time": 20.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 1.0, + "Iron": 5.0, + "Silver": 5.0 + } + }, + "ItemGasFilterVolatiles": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemGasFilterVolatilesL": { + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + "ItemGasFilterVolatilesM": { + "tier": "TierOne", + "time": 20.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 1.0, + "Iron": 5.0, + "Silver": 5.0 + } + }, + "ItemGasFilterWater": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemGasFilterWaterL": { + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + "ItemGasFilterWaterM": { + "tier": "TierOne", + "time": 20.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 1.0, + "Iron": 5.0, + "Silver": 5.0 + } + }, + "ItemHydroponicTray": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 10.0 + } + }, + "ItemKitAirlock": { + "tier": "TierOne", + "time": 50.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Steel": 15.0 + } + }, + "ItemKitAirlockGate": { + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Steel": 25.0 + } + }, + "ItemKitAtmospherics": { + "tier": "TierOne", + "time": 30.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 20.0, + "Gold": 5.0, + "Iron": 10.0 + } + }, + "ItemKitChute": { + "tier": "TierOne", + "time": 2.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemKitCryoTube": { + "tier": "TierTwo", + "time": 120.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 10.0, + "Gold": 10.0, + "Silver": 5.0, + "Steel": 35.0 + } + }, + "ItemKitDrinkingFountain": { + "tier": "TierOne", + "time": 20.0, + "energy": 620.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Iron": 5.0, + "Silicon": 8.0 + } + }, + "ItemKitDynamicCanister": { + "tier": "TierOne", + "time": 20.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 20.0 + } + }, + "ItemKitDynamicGasTankAdvanced": { + "tier": "TierTwo", + "time": 40.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Iron": 20.0, + "Silicon": 5.0, + "Steel": 15.0 + } + }, + "ItemKitDynamicHydroponics": { + "tier": "TierOne", + "time": 30.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Nickel": 5.0, + "Steel": 20.0 + } + }, + "ItemKitDynamicLiquidCanister": { + "tier": "TierOne", + "time": 20.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 20.0 + } + }, + "ItemKitDynamicMKIILiquidCanister": { + "tier": "TierTwo", + "time": 40.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Iron": 20.0, + "Silicon": 5.0, + "Steel": 15.0 + } + }, + "ItemKitEvaporationChamber": { + "tier": "TierOne", + "time": 30.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Silicon": 5.0, + "Steel": 10.0 + } + }, + "ItemKitHeatExchanger": { + "tier": "TierTwo", + "time": 30.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 10.0, + "Steel": 10.0 + } + }, + "ItemKitIceCrusher": { + "tier": "TierOne", + "time": 30.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 3.0 + } + }, + "ItemKitInsulatedLiquidPipe": { + "tier": "TierOne", + "time": 4.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 1.0, + "Steel": 1.0 + } + }, + "ItemKitInsulatedPipe": { + "tier": "TierOne", + "time": 4.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 1.0, + "Steel": 1.0 + } + }, + "ItemKitInsulatedPipeUtility": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 1.0, + "Steel": 5.0 + } + }, + "ItemKitInsulatedPipeUtilityLiquid": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 1.0, + "Steel": 5.0 + } + }, + "ItemKitLargeDirectHeatExchanger": { + "tier": "TierTwo", + "time": 30.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 10.0, + "Steel": 10.0 + } + }, + "ItemKitLargeExtendableRadiator": { + "tier": "TierTwo", + "time": 30.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Invar": 10.0, + "Steel": 10.0 + } + }, + "ItemKitLiquidRegulator": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 5.0 + } + }, + "ItemKitLiquidTank": { + "tier": "TierOne", + "time": 20.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 20.0 + } + }, + "ItemKitLiquidTankInsulated": { + "tier": "TierOne", + "time": 30.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Silicon": 30.0, + "Steel": 20.0 + } + }, + "ItemKitLiquidTurboVolumePump": { + "tier": "TierTwo", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 4.0, + "Electrum": 5.0, + "Gold": 4.0, + "Steel": 5.0 + } + }, + "ItemKitPassiveLargeRadiatorGas": { + "tier": "TierTwo", + "time": 30.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Invar": 5.0, + "Steel": 5.0 + } + }, + "ItemKitPassiveLargeRadiatorLiquid": { + "tier": "TierTwo", + "time": 30.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Invar": 5.0, + "Steel": 5.0 + } + }, + "ItemKitPassthroughHeatExchanger": { + "tier": "TierTwo", + "time": 30.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 10.0, + "Steel": 10.0 + } + }, + "ItemKitPipe": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 0.5 + } + }, + "ItemKitPipeLiquid": { + "tier": "TierOne", + "time": 2.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 0.5 + } + }, + "ItemKitPipeOrgan": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemKitPipeRadiator": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 3.0, + "Steel": 2.0 + } + }, + "ItemKitPipeRadiatorLiquid": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 3.0, + "Steel": 2.0 + } + }, + "ItemKitPipeUtility": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemKitPipeUtilityLiquid": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemKitPlanter": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 10.0 + } + }, + "ItemKitPortablesConnector": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemKitPoweredVent": { + "tier": "TierTwo", + "time": 20.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 5.0, + "Invar": 2.0, + "Steel": 5.0 + } + }, + "ItemKitRegulator": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 5.0 + } + }, + "ItemKitSensor": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "ItemKitShower": { + "tier": "TierOne", + "time": 30.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Iron": 5.0, + "Silicon": 5.0 + } + }, + "ItemKitSleeper": { + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 10.0, + "Steel": 25.0 + } + }, + "ItemKitSmallDirectHeatExchanger": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 3.0 + } + }, + "ItemKitStandardChute": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 2.0, + "Electrum": 2.0, + "Iron": 3.0 + } + }, + "ItemKitSuitStorage": { + "tier": "TierOne", + "time": 30.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Iron": 15.0, + "Silver": 5.0 + } + }, + "ItemKitTank": { + "tier": "TierOne", + "time": 20.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 20.0 + } + }, + "ItemKitTankInsulated": { + "tier": "TierOne", + "time": 30.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Silicon": 30.0, + "Steel": 20.0 + } + }, + "ItemKitTurboVolumePump": { + "tier": "TierTwo", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 4.0, + "Electrum": 5.0, + "Gold": 4.0, + "Steel": 5.0 + } + }, + "ItemKitWaterBottleFiller": { + "tier": "TierOne", + "time": 7.0, + "energy": 620.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Iron": 5.0, + "Silicon": 8.0 + } + }, + "ItemKitWaterPurifier": { + "tier": "TierOne", + "time": 30.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 20.0, + "Gold": 5.0, + "Iron": 10.0 + } + }, + "ItemLiquidCanisterEmpty": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemLiquidCanisterSmart": { + "tier": "TierTwo", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Silicon": 2.0, + "Steel": 15.0 + } + }, + "ItemLiquidDrain": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 5.0 + } + }, + "ItemLiquidPipeAnalyzer": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 2.0, + "Gold": 2.0, + "Iron": 2.0 + } + }, + "ItemLiquidPipeHeater": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 3.0, + "Iron": 5.0 + } + }, + "ItemLiquidPipeValve": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 3.0 + } + }, + "ItemLiquidPipeVolumePump": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Iron": 5.0 + } + }, + "ItemPassiveVent": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemPassiveVentInsulated": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 5.0, + "Steel": 1.0 + } + }, + "ItemPipeAnalyizer": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 2.0, + "Gold": 2.0, + "Iron": 2.0 + } + }, + "ItemPipeCowl": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemPipeDigitalValve": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Invar": 3.0, + "Steel": 5.0 + } + }, + "ItemPipeGasMixer": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 2.0, + "Iron": 2.0 + } + }, + "ItemPipeHeater": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 3.0, + "Iron": 5.0 + } + }, + "ItemPipeIgniter": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 2.0, + "Iron": 2.0 + } + }, + "ItemPipeLabel": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemPipeMeter": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 3.0 + } + }, + "ItemPipeValve": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 3.0 + } + }, + "ItemPipeVolumePump": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Iron": 5.0 + } + }, + "ItemWallCooler": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 1.0, + "Iron": 3.0 + } + }, + "ItemWallHeater": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 1.0, + "Iron": 3.0 + } + }, + "ItemWaterBottle": { + "tier": "TierOne", + "time": 4.0, + "energy": 120.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 2.0, + "Silicon": 4.0 + } + }, + "ItemWaterPipeDigitalValve": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Invar": 3.0, + "Steel": 5.0 + } + }, + "ItemWaterPipeMeter": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 3.0 + } + }, + "ItemWaterWallCooler": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 1.0, + "Iron": 3.0 + } + } + } + }, + "memory": { + "instructions": { + "DeviceSetLock": { + "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 |", + "typ": "PrinterInstruction", + "value": 6 + }, + "EjectAllReagents": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 8 + }, + "EjectReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 7 + }, + "ExecuteRecipe": { + "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 |", + "typ": "PrinterInstruction", + "value": 2 + }, + "JumpIfNextInvalid": { + "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 |", + "typ": "PrinterInstruction", + "value": 4 + }, + "JumpToAddress": { + "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 |", + "typ": "PrinterInstruction", + "value": 5 + }, + "MissingRecipeReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 9 + }, + "StackPointer": { + "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 |", + "typ": "PrinterInstruction", + "value": 1 + }, + "WaitUntilNextValid": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 3 + } + }, + "memory_access": "ReadWrite", + "memory_size": 64 + } + }, + "StructureHydroponicsStation": { + "prefab": { + "prefab_name": "StructureHydroponicsStation", + "prefab_hash": 1441767298, + "desc": "", + "name": "Hydroponics Station" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": 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" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "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 + } + }, + "StructureHydroponicsTray": { + "prefab": { + "prefab_name": "StructureHydroponicsTray", + "prefab_hash": 1464854517, + "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.", + "name": "Hydroponics Tray" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "slots": [ + { + "name": "Plant", + "typ": "Plant" + }, + { + "name": "Fertiliser", + "typ": "Plant" + } + ] + }, + "StructureHydroponicsTrayData": { + "prefab": { + "prefab_name": "StructureHydroponicsTrayData", + "prefab_hash": -1841632400, + "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.", + "name": "Hydroponics Device" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Plant", + "typ": "Plant" + }, + { + "name": "Fertiliser", + "typ": "Plant" + } + ], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "None" + }, + { + "typ": "Data", + "role": "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 + } + }, + "StructureIceCrusher": { + "prefab": { + "prefab_name": "StructureIceCrusher", + "prefab_hash": 443849486, + "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.", + "name": "Ice Crusher" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Ore" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Output2" + } + ], + "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 + } + }, + "StructureIgniter": { + "prefab": { + "prefab_name": "StructureIgniter", + "prefab_hash": 1005491513, + "desc": "It gets the party started. Especially if that party is an explosive gas mixture.", + "name": "Igniter" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureInLineTankGas1x1": { + "prefab": { + "prefab_name": "StructureInLineTankGas1x1", + "prefab_hash": -1693382705, + "desc": "A small expansion tank that increases the volume of a pipe network.", + "name": "In-Line Tank Small Gas" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructureInLineTankGas1x2": { + "prefab": { + "prefab_name": "StructureInLineTankGas1x2", + "prefab_hash": 35149429, + "desc": "A small expansion tank that increases the volume of a pipe network.", + "name": "In-Line Tank Gas" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructureInLineTankLiquid1x1": { + "prefab": { + "prefab_name": "StructureInLineTankLiquid1x1", + "prefab_hash": 543645499, + "desc": "A small expansion tank that increases the volume of a pipe network.", + "name": "In-Line Tank Small Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructureInLineTankLiquid1x2": { + "prefab": { + "prefab_name": "StructureInLineTankLiquid1x2", + "prefab_hash": -1183969663, + "desc": "A small expansion tank that increases the volume of a pipe network.", + "name": "In-Line Tank Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructureInsulatedInLineTankGas1x1": { + "prefab": { + "prefab_name": "StructureInsulatedInLineTankGas1x1", + "prefab_hash": 1818267386, + "desc": "", + "name": "Insulated In-Line Tank Small Gas" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructureInsulatedInLineTankGas1x2": { + "prefab": { + "prefab_name": "StructureInsulatedInLineTankGas1x2", + "prefab_hash": -177610944, + "desc": "", + "name": "Insulated In-Line Tank Gas" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructureInsulatedInLineTankLiquid1x1": { + "prefab": { + "prefab_name": "StructureInsulatedInLineTankLiquid1x1", + "prefab_hash": -813426145, + "desc": "", + "name": "Insulated In-Line Tank Small Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructureInsulatedInLineTankLiquid1x2": { + "prefab": { + "prefab_name": "StructureInsulatedInLineTankLiquid1x2", + "prefab_hash": 1452100517, + "desc": "", + "name": "Insulated In-Line Tank Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructureInsulatedPipeCorner": { + "prefab": { + "prefab_name": "StructureInsulatedPipeCorner", + "prefab_hash": -1967711059, + "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", + "name": "Insulated Pipe (Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructureInsulatedPipeCrossJunction": { + "prefab": { + "prefab_name": "StructureInsulatedPipeCrossJunction", + "prefab_hash": -92778058, + "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", + "name": "Insulated Pipe (Cross Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructureInsulatedPipeCrossJunction3": { + "prefab": { + "prefab_name": "StructureInsulatedPipeCrossJunction3", + "prefab_hash": 1328210035, + "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", + "name": "Insulated Pipe (3-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructureInsulatedPipeCrossJunction4": { + "prefab": { + "prefab_name": "StructureInsulatedPipeCrossJunction4", + "prefab_hash": -783387184, + "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", + "name": "Insulated Pipe (4-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructureInsulatedPipeCrossJunction5": { + "prefab": { + "prefab_name": "StructureInsulatedPipeCrossJunction5", + "prefab_hash": -1505147578, + "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", + "name": "Insulated Pipe (5-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructureInsulatedPipeCrossJunction6": { + "prefab": { + "prefab_name": "StructureInsulatedPipeCrossJunction6", + "prefab_hash": 1061164284, + "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", + "name": "Insulated Pipe (6-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructureInsulatedPipeLiquidCorner": { + "prefab": { + "prefab_name": "StructureInsulatedPipeLiquidCorner", + "prefab_hash": 1713710802, + "desc": "Liquid piping with very low temperature loss or gain.", + "name": "Insulated Liquid Pipe (Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructureInsulatedPipeLiquidCrossJunction": { + "prefab": { + "prefab_name": "StructureInsulatedPipeLiquidCrossJunction", + "prefab_hash": 1926651727, + "desc": "Liquid piping with very low temperature loss or gain.", + "name": "Insulated Liquid Pipe (3-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructureInsulatedPipeLiquidCrossJunction4": { + "prefab": { + "prefab_name": "StructureInsulatedPipeLiquidCrossJunction4", + "prefab_hash": 363303270, + "desc": "Liquid piping with very low temperature loss or gain.", + "name": "Insulated Liquid Pipe (4-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructureInsulatedPipeLiquidCrossJunction5": { + "prefab": { + "prefab_name": "StructureInsulatedPipeLiquidCrossJunction5", + "prefab_hash": 1654694384, + "desc": "Liquid piping with very low temperature loss or gain.", + "name": "Insulated Liquid Pipe (5-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructureInsulatedPipeLiquidCrossJunction6": { + "prefab": { + "prefab_name": "StructureInsulatedPipeLiquidCrossJunction6", + "prefab_hash": -72748982, + "desc": "Liquid piping with very low temperature loss or gain.", + "name": "Insulated Liquid Pipe (6-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructureInsulatedPipeLiquidStraight": { + "prefab": { + "prefab_name": "StructureInsulatedPipeLiquidStraight", + "prefab_hash": 295678685, + "desc": "Liquid piping with very low temperature loss or gain.", + "name": "Insulated Liquid Pipe (Straight)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructureInsulatedPipeLiquidTJunction": { + "prefab": { + "prefab_name": "StructureInsulatedPipeLiquidTJunction", + "prefab_hash": -532384855, + "desc": "Liquid piping with very low temperature loss or gain.", + "name": "Insulated Liquid Pipe (T Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructureInsulatedPipeStraight": { + "prefab": { + "prefab_name": "StructureInsulatedPipeStraight", + "prefab_hash": 2134172356, + "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", + "name": "Insulated Pipe (Straight)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructureInsulatedPipeTJunction": { + "prefab": { + "prefab_name": "StructureInsulatedPipeTJunction", + "prefab_hash": -2076086215, + "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", + "name": "Insulated Pipe (T Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructureInsulatedTankConnector": { + "prefab": { + "prefab_name": "StructureInsulatedTankConnector", + "prefab_hash": -31273349, + "desc": "", + "name": "Insulated Tank Connector" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "slots": [ + { + "name": "", + "typ": "None" + } + ] + }, + "StructureInsulatedTankConnectorLiquid": { + "prefab": { + "prefab_name": "StructureInsulatedTankConnectorLiquid", + "prefab_hash": -1602030414, + "desc": "", + "name": "Insulated Tank Connector Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "slots": [ + { + "name": "Portable Slot", + "typ": "None" + } + ] + }, + "StructureInteriorDoorGlass": { + "prefab": { + "prefab_name": "StructureInteriorDoorGlass", + "prefab_hash": -2096421875, + "desc": "0.Operate\n1.Logic", + "name": "Interior Door Glass" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "StructureInteriorDoorPadded": { + "prefab": { + "prefab_name": "StructureInteriorDoorPadded", + "prefab_hash": 847461335, + "desc": "0.Operate\n1.Logic", + "name": "Interior Door Padded" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "StructureInteriorDoorPaddedThin": { + "prefab": { + "prefab_name": "StructureInteriorDoorPaddedThin", + "prefab_hash": 1981698201, + "desc": "0.Operate\n1.Logic", + "name": "Interior Door Padded Thin" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "StructureInteriorDoorTriangle": { + "prefab": { + "prefab_name": "StructureInteriorDoorTriangle", + "prefab_hash": -1182923101, + "desc": "0.Operate\n1.Logic", + "name": "Interior Door Triangle" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "StructureKlaxon": { + "prefab": { + "prefab_name": "StructureKlaxon", + "prefab_hash": -828056979, + "desc": "Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output.", + "name": "Klaxon Speaker" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Volume": "ReadWrite", + "PrefabHash": "Read", + "SoundAlert": "ReadWrite", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "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" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureLadder": { + "prefab": { + "prefab_name": "StructureLadder", + "prefab_hash": -415420281, + "desc": "", + "name": "Ladder" + }, + "structure": { + "small_grid": true + } + }, + "StructureLadderEnd": { + "prefab": { + "prefab_name": "StructureLadderEnd", + "prefab_hash": 1541734993, + "desc": "", + "name": "Ladder End" + }, + "structure": { + "small_grid": true + } + }, + "StructureLargeDirectHeatExchangeGastoGas": { + "prefab": { + "prefab_name": "StructureLargeDirectHeatExchangeGastoGas", + "prefab_hash": -1230658883, + "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", + "name": "Large Direct Heat Exchanger - Gas + Gas" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Input2" + } + ], + "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 + } + }, + "StructureLargeDirectHeatExchangeGastoLiquid": { + "prefab": { + "prefab_name": "StructureLargeDirectHeatExchangeGastoLiquid", + "prefab_hash": 1412338038, + "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", + "name": "Large Direct Heat Exchanger - Gas + Liquid" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Input2" + } + ], + "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 + } + }, + "StructureLargeDirectHeatExchangeLiquidtoLiquid": { + "prefab": { + "prefab_name": "StructureLargeDirectHeatExchangeLiquidtoLiquid", + "prefab_hash": 792686502, + "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", + "name": "Large Direct Heat Exchange - Liquid + Liquid" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Input2" + } + ], + "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 + } + }, + "StructureLargeExtendableRadiator": { + "prefab": { + "prefab_name": "StructureLargeExtendableRadiator", + "prefab_hash": -566775170, + "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.", + "name": "Large Extendable Radiator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.02, + "radiation_factor": 2.0 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Horizontal": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "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 + } + }, + "StructureLargeHangerDoor": { + "prefab": { + "prefab_name": "StructureLargeHangerDoor", + "prefab_hash": -1351081801, + "desc": "1 x 3 modular door piece for building hangar doors.", + "name": "Large Hangar Door" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureLargeSatelliteDish": { + "prefab": { + "prefab_name": "StructureLargeSatelliteDish", + "prefab_hash": 1913391845, + "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.", + "name": "Large Satellite Dish" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureLaunchMount": { + "prefab": { + "prefab_name": "StructureLaunchMount", + "prefab_hash": -558953231, + "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.", + "name": "Launch Mount" + }, + "structure": { + "small_grid": false + } + }, + "StructureLightLong": { + "prefab": { + "prefab_name": "StructureLightLong", + "prefab_hash": 797794350, + "desc": "", + "name": "Wall Light (Long)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureLightLongAngled": { + "prefab": { + "prefab_name": "StructureLightLongAngled", + "prefab_hash": 1847265835, + "desc": "", + "name": "Wall Light (Long Angled)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureLightLongWide": { + "prefab": { + "prefab_name": "StructureLightLongWide", + "prefab_hash": 555215790, + "desc": "", + "name": "Wall Light (Long Wide)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureLightRound": { + "prefab": { + "prefab_name": "StructureLightRound", + "prefab_hash": 1514476632, + "desc": "Description coming.", + "name": "Light Round" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureLightRoundAngled": { + "prefab": { + "prefab_name": "StructureLightRoundAngled", + "prefab_hash": 1592905386, + "desc": "Description coming.", + "name": "Light Round (Angled)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureLightRoundSmall": { + "prefab": { + "prefab_name": "StructureLightRoundSmall", + "prefab_hash": 1436121888, + "desc": "Description coming.", + "name": "Light Round (Small)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureLiquidDrain": { + "prefab": { + "prefab_name": "StructureLiquidDrain", + "prefab_hash": 1687692899, + "desc": "When connected to power and activated, it pumps liquid from a liquid network into the world.", + "name": "Active Liquid Outlet" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "None" + }, + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "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 + } + }, + "StructureLiquidPipeAnalyzer": { + "prefab": { + "prefab_name": "StructureLiquidPipeAnalyzer", + "prefab_hash": -2113838091, + "desc": "", + "name": "Liquid Pipe Analyzer" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureLiquidPipeHeater": { + "prefab": { + "prefab_name": "StructureLiquidPipeHeater", + "prefab_hash": -287495560, + "desc": "Adds 1000 joules of heat per tick to the contents of your pipe network.", + "name": "Pipe Heater (Liquid)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureLiquidPipeOneWayValve": { + "prefab": { + "prefab_name": "StructureLiquidPipeOneWayValve", + "prefab_hash": -782453061, + "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..", + "name": "One Way Valve (Liquid)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "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 + } + }, + "StructureLiquidPipeRadiator": { + "prefab": { + "prefab_name": "StructureLiquidPipeRadiator", + "prefab_hash": 2072805863, + "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.", + "name": "Liquid Pipe Convection Radiator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 1.0, + "radiation_factor": 0.75 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "StructureLiquidPressureRegulator": { + "prefab": { + "prefab_name": "StructureLiquidPressureRegulator", + "prefab_hash": 482248766, + "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.", + "name": "Liquid Volume Regulator" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureLiquidTankBig": { + "prefab": { + "prefab_name": "StructureLiquidTankBig", + "prefab_hash": 1098900430, + "desc": "", + "name": "Liquid Tank Big" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "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 + } + }, + "StructureLiquidTankBigInsulated": { + "prefab": { + "prefab_name": "StructureLiquidTankBigInsulated", + "prefab_hash": -1430440215, + "desc": "", + "name": "Insulated Liquid Tank Big" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "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 + } + }, + "StructureLiquidTankSmall": { + "prefab": { + "prefab_name": "StructureLiquidTankSmall", + "prefab_hash": 1988118157, + "desc": "", + "name": "Liquid Tank Small" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "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 + } + }, + "StructureLiquidTankSmallInsulated": { + "prefab": { + "prefab_name": "StructureLiquidTankSmallInsulated", + "prefab_hash": 608607718, + "desc": "", + "name": "Insulated Liquid Tank Small" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "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 + } + }, + "StructureLiquidTankStorage": { + "prefab": { + "prefab_name": "StructureLiquidTankStorage", + "prefab_hash": 1691898022, + "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.", + "name": "Liquid Tank Storage" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Pressure": "Read", + "Temperature": "Read", + "RatioOxygen": "Read", + "RatioCarbonDioxide": "Read", + "RatioNitrogen": "Read", + "RatioPollutant": "Read", + "RatioVolatiles": "Read", + "RatioWater": "Read", + "Quantity": "Read", + "RatioNitrousOxide": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Liquid Canister", + "typ": "LiquidCanister" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "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 + } + }, + "StructureLiquidTurboVolumePump": { + "prefab": { + "prefab_name": "StructureLiquidTurboVolumePump", + "prefab_hash": -1051805505, + "desc": "Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction.", + "name": "Turbo Volume Pump (Liquid)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Right", + "1": "Left" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "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 + } + }, + "StructureLiquidUmbilicalFemale": { + "prefab": { + "prefab_name": "StructureLiquidUmbilicalFemale", + "prefab_hash": 1734723642, + "desc": "", + "name": "Umbilical Socket (Liquid)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "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 + } + }, + "StructureLiquidUmbilicalFemaleSide": { + "prefab": { + "prefab_name": "StructureLiquidUmbilicalFemaleSide", + "prefab_hash": 1220870319, + "desc": "", + "name": "Umbilical Socket Angle (Liquid)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "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 + } + }, + "StructureLiquidUmbilicalMale": { + "prefab": { + "prefab_name": "StructureLiquidUmbilicalMale", + "prefab_hash": -1798420047, + "desc": "0.Left\n1.Center\n2.Right", + "name": "Umbilical (Liquid)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Left", + "1": "Center", + "2": "Right" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureLiquidValve": { + "prefab": { + "prefab_name": "StructureLiquidValve", + "prefab_hash": 1849974453, + "desc": "", + "name": "Liquid Valve" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "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 + } + }, + "StructureLiquidVolumePump": { + "prefab": { + "prefab_name": "StructureLiquidVolumePump", + "prefab_hash": -454028979, + "desc": "", + "name": "Liquid Volume Pump" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureLockerSmall": { + "prefab": { + "prefab_name": "StructureLockerSmall", + "prefab_hash": -647164662, + "desc": "", + "name": "Locker (Small)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructureLogicBatchReader": { + "prefab": { + "prefab_name": "StructureLogicBatchReader", + "prefab_hash": 264413729, + "desc": "", + "name": "Batch Reader" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureLogicBatchSlotReader": { + "prefab": { + "prefab_name": "StructureLogicBatchSlotReader", + "prefab_hash": 436888930, + "desc": "", + "name": "Batch Slot Reader" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureLogicBatchWriter": { + "prefab": { + "prefab_name": "StructureLogicBatchWriter", + "prefab_hash": 1415443359, + "desc": "", + "name": "Batch Writer" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ForceWrite": "Write", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureLogicButton": { + "prefab": { + "prefab_name": "StructureLogicButton", + "prefab_hash": 491845673, + "desc": "", + "name": "Button" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Activate": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Data", + "role": "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 + } + }, + "StructureLogicCompare": { + "prefab": { + "prefab_name": "StructureLogicCompare", + "prefab_hash": -1489728908, + "desc": "0.Equals\n1.Greater\n2.Less\n3.NotEquals", + "name": "Logic Compare" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Equals", + "1": "Greater", + "2": "Less", + "3": "NotEquals" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureLogicDial": { + "prefab": { + "prefab_name": "StructureLogicDial", + "prefab_hash": 554524804, + "desc": "An assignable dial with up to 1000 modes.", + "name": "Dial" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Mode": "ReadWrite", + "Setting": "ReadWrite", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "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 + } + }, + "StructureLogicGate": { + "prefab": { + "prefab_name": "StructureLogicGate", + "prefab_hash": 1942143074, + "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.", + "name": "Logic Gate" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "AND", + "1": "OR", + "2": "XOR", + "3": "NAND", + "4": "NOR", + "5": "XNOR" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureLogicHashGen": { + "prefab": { + "prefab_name": "StructureLogicHashGen", + "prefab_hash": 2077593121, + "desc": "", + "name": "Logic Hash Generator" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Data", + "role": "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 + } + }, + "StructureLogicMath": { + "prefab": { + "prefab_name": "StructureLogicMath", + "prefab_hash": 1657691323, + "desc": "0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log", + "name": "Logic Math" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Add", + "1": "Subtract", + "2": "Multiply", + "3": "Divide", + "4": "Mod", + "5": "Atan2", + "6": "Pow", + "7": "Log" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureLogicMathUnary": { + "prefab": { + "prefab_name": "StructureLogicMathUnary", + "prefab_hash": -1160020195, + "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", + "name": "Math Unary" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "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" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureLogicMemory": { + "prefab": { + "prefab_name": "StructureLogicMemory", + "prefab_hash": -851746783, + "desc": "", + "name": "Logic Memory" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Data", + "role": "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 + } + }, + "StructureLogicMinMax": { + "prefab": { + "prefab_name": "StructureLogicMinMax", + "prefab_hash": 929022276, + "desc": "0.Greater\n1.Less", + "name": "Logic Min/Max" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Greater", + "1": "Less" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureLogicMirror": { + "prefab": { + "prefab_name": "StructureLogicMirror", + "prefab_hash": 2096189278, + "desc": "", + "name": "Logic Mirror" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": {}, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureLogicReader": { + "prefab": { + "prefab_name": "StructureLogicReader", + "prefab_hash": -345383640, + "desc": "", + "name": "Logic Reader" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureLogicReagentReader": { + "prefab": { + "prefab_name": "StructureLogicReagentReader", + "prefab_hash": -124308857, + "desc": "", + "name": "Reagent Reader" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureLogicRocketDownlink": { + "prefab": { + "prefab_name": "StructureLogicRocketDownlink", + "prefab_hash": 876108549, + "desc": "", + "name": "Logic Rocket Downlink" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "Input" + } + ], + "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 + } + }, + "StructureLogicRocketUplink": { + "prefab": { + "prefab_name": "StructureLogicRocketUplink", + "prefab_hash": 546002924, + "desc": "", + "name": "Logic Uplink" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureLogicSelect": { + "prefab": { + "prefab_name": "StructureLogicSelect", + "prefab_hash": 1822736084, + "desc": "0.Equals\n1.Greater\n2.Less\n3.NotEquals", + "name": "Logic Select" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Equals", + "1": "Greater", + "2": "Less", + "3": "NotEquals" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureLogicSlotReader": { + "prefab": { + "prefab_name": "StructureLogicSlotReader", + "prefab_hash": -767867194, + "desc": "", + "name": "Slot Reader" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Setting": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureLogicSorter": { + "prefab": { + "prefab_name": "StructureLogicSorter", + "prefab_hash": 873418029, + "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.", + "name": "Logic Sorter" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "ClearMemory": "Write", + "ExportCount": "Read", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "All", + "1": "Any", + "2": "None" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + }, + { + "name": "Export 2", + "typ": "None" + }, + { + "name": "Data Disk", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Output2" + }, + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "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": { + "instructions": { + "FilterPrefabHashEquals": { + "description": "| 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": { + "description": "| 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": { + "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 |", + "typ": "SorterInstruction", + "value": 5 + }, + "FilterSlotTypeCompare": { + "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 |", + "typ": "SorterInstruction", + "value": 4 + }, + "FilterSortingClassCompare": { + "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 |", + "typ": "SorterInstruction", + "value": 3 + }, + "LimitNextExecutionByCount": { + "description": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |", + "typ": "SorterInstruction", + "value": 6 + } + }, + "memory_access": "ReadWrite", + "memory_size": 32 + } + }, + "StructureLogicSwitch": { + "prefab": { + "prefab_name": "StructureLogicSwitch", + "prefab_hash": 1220484876, + "desc": "", + "name": "Lever" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Data", + "role": "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 + } + }, + "StructureLogicSwitch2": { + "prefab": { + "prefab_name": "StructureLogicSwitch2", + "prefab_hash": 321604921, + "desc": "", + "name": "Switch" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Data", + "role": "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 + } + }, + "StructureLogicTransmitter": { + "prefab": { + "prefab_name": "StructureLogicTransmitter", + "prefab_hash": -693235651, + "desc": "Connects to Logic Transmitter", + "name": "Logic Transmitter" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": {}, + "modes": { + "0": "Passive", + "1": "Active" + }, + "transmission_receiver": true, + "wireless_logic": true, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureLogicWriter": { + "prefab": { + "prefab_name": "StructureLogicWriter", + "prefab_hash": -1326019434, + "desc": "", + "name": "Logic Writer" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ForceWrite": "Write", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureLogicWriterSwitch": { + "prefab": { + "prefab_name": "StructureLogicWriterSwitch", + "prefab_hash": -1321250424, + "desc": "", + "name": "Logic Writer Switch" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ForceWrite": "Write", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Input" + }, + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureManualHatch": { + "prefab": { + "prefab_name": "StructureManualHatch", + "prefab_hash": -1808154199, + "desc": "Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock.", + "name": "Manual Hatch" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "StructureMediumConvectionRadiator": { + "prefab": { + "prefab_name": "StructureMediumConvectionRadiator", + "prefab_hash": -1918215845, + "desc": "A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere.", + "name": "Medium Convection Radiator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 1.25, + "radiation_factor": 0.4 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + } + ], + "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 + } + }, + "StructureMediumConvectionRadiatorLiquid": { + "prefab": { + "prefab_name": "StructureMediumConvectionRadiatorLiquid", + "prefab_hash": -1169014183, + "desc": "A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere.", + "name": "Medium Convection Radiator Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 1.25, + "radiation_factor": 0.4 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "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 + } + }, + "StructureMediumHangerDoor": { + "prefab": { + "prefab_name": "StructureMediumHangerDoor", + "prefab_hash": -566348148, + "desc": "1 x 2 modular door piece for building hangar doors.", + "name": "Medium Hangar Door" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureMediumRadiator": { + "prefab": { + "prefab_name": "StructureMediumRadiator", + "prefab_hash": -975966237, + "desc": "A stand-alone radiator unit optimized for radiating heat in vacuums.", + "name": "Medium Radiator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.2, + "radiation_factor": 4.0 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + } + ], + "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 + } + }, + "StructureMediumRadiatorLiquid": { + "prefab": { + "prefab_name": "StructureMediumRadiatorLiquid", + "prefab_hash": -1141760613, + "desc": "A stand-alone liquid radiator unit optimized for radiating heat in vacuums.", + "name": "Medium Radiator Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.2, + "radiation_factor": 4.0 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "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 + } + }, + "StructureMediumRocketGasFuelTank": { + "prefab": { + "prefab_name": "StructureMediumRocketGasFuelTank", + "prefab_hash": -1093860567, + "desc": "", + "name": "Gas Capsule Tank Medium" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Input" + } + ], + "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 + } + }, + "StructureMediumRocketLiquidFuelTank": { + "prefab": { + "prefab_name": "StructureMediumRocketLiquidFuelTank", + "prefab_hash": 1143639539, + "desc": "", + "name": "Liquid Capsule Tank Medium" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "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 + } + }, + "StructureMotionSensor": { + "prefab": { + "prefab_name": "StructureMotionSensor", + "prefab_hash": -1713470563, + "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.", + "name": "Motion Sensor" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Activate": "ReadWrite", + "Quantity": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureNitrolyzer": { + "prefab": { + "prefab_name": "StructureNitrolyzer", + "prefab_hash": 1898243702, + "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.", + "name": "Nitrolyzer" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "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", + "RatioLiquidNitrogenInput": "Read", + "RatioLiquidNitrogenInput2": "Read", + "RatioLiquidNitrogenOutput": "Read", + "RatioLiquidOxygen": "Read", + "RatioLiquidOxygenInput": "Read", + "RatioLiquidOxygenInput2": "Read", + "RatioLiquidOxygenOutput": "Read", + "RatioLiquidVolatiles": "Read", + "RatioLiquidVolatilesInput": "Read", + "RatioLiquidVolatilesInput2": "Read", + "RatioLiquidVolatilesOutput": "Read", + "RatioSteam": "Read", + "RatioSteamInput": "Read", + "RatioSteamInput2": "Read", + "RatioSteamOutput": "Read", + "RatioLiquidCarbonDioxide": "Read", + "RatioLiquidCarbonDioxideInput": "Read", + "RatioLiquidCarbonDioxideInput2": "Read", + "RatioLiquidCarbonDioxideOutput": "Read", + "RatioLiquidPollutant": "Read", + "RatioLiquidPollutantInput": "Read", + "RatioLiquidPollutantInput2": "Read", + "RatioLiquidPollutantOutput": "Read", + "RatioLiquidNitrousOxide": "Read", + "RatioLiquidNitrousOxideInput": "Read", + "RatioLiquidNitrousOxideInput2": "Read", + "RatioLiquidNitrousOxideOutput": "Read", + "ReferenceId": "Read", + "RatioHydrogen": "Read", + "RatioLiquidHydrogen": "Read", + "RatioPollutedWater": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Idle", + "1": "Active" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": true + }, + "slots": [ + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Input2" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + } + ], + "device_pins_length": 2, + "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 + } + }, + "StructureOccupancySensor": { + "prefab": { + "prefab_name": "StructureOccupancySensor", + "prefab_hash": 322782515, + "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.", + "name": "Occupancy Sensor" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Activate": "Read", + "Quantity": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureOverheadShortCornerLocker": { + "prefab": { + "prefab_name": "StructureOverheadShortCornerLocker", + "prefab_hash": -1794932560, + "desc": "", + "name": "Overhead Corner Locker" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructureOverheadShortLocker": { + "prefab": { + "prefab_name": "StructureOverheadShortLocker", + "prefab_hash": 1468249454, + "desc": "", + "name": "Overhead Locker" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": 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" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructurePassiveLargeRadiatorGas": { + "prefab": { + "prefab_name": "StructurePassiveLargeRadiatorGas", + "prefab_hash": 2066977095, + "desc": "Has been replaced by Medium Convection Radiator.", + "name": "Medium Convection Radiator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 1.0, + "radiation_factor": 0.4 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + } + ], + "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 + } + }, + "StructurePassiveLargeRadiatorLiquid": { + "prefab": { + "prefab_name": "StructurePassiveLargeRadiatorLiquid", + "prefab_hash": 24786172, + "desc": "Has been replaced by Medium Convection Radiator Liquid.", + "name": "Medium Convection Radiator Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 1.0, + "radiation_factor": 0.4 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "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 + } + }, + "StructurePassiveLiquidDrain": { + "prefab": { + "prefab_name": "StructurePassiveLiquidDrain", + "prefab_hash": 1812364811, + "desc": "Moves liquids from a pipe network to the world atmosphere.", + "name": "Passive Liquid Drain" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "StructurePassiveVent": { + "prefab": { + "prefab_name": "StructurePassiveVent", + "prefab_hash": 335498166, + "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. ", + "name": "Passive Vent" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructurePassiveVentInsulated": { + "prefab": { + "prefab_name": "StructurePassiveVentInsulated", + "prefab_hash": 1363077139, + "desc": "", + "name": "Insulated Passive Vent" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructurePassthroughHeatExchangerGasToGas": { + "prefab": { + "prefab_name": "StructurePassthroughHeatExchangerGasToGas", + "prefab_hash": -1674187440, + "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.", + "name": "CounterFlow Heat Exchanger - Gas + Gas" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Input2" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Output2" + } + ], + "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 + } + }, + "StructurePassthroughHeatExchangerGasToLiquid": { + "prefab": { + "prefab_name": "StructurePassthroughHeatExchangerGasToLiquid", + "prefab_hash": 1928991265, + "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.", + "name": "CounterFlow Heat Exchanger - Gas + Liquid" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Input2" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Output2" + } + ], + "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 + } + }, + "StructurePassthroughHeatExchangerLiquidToLiquid": { + "prefab": { + "prefab_name": "StructurePassthroughHeatExchangerLiquidToLiquid", + "prefab_hash": -1472829583, + "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.", + "name": "CounterFlow Heat Exchanger - Liquid + Liquid" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Input2" + }, + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Output2" + } + ], + "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 + } + }, + "StructurePictureFrameThickLandscapeLarge": { + "prefab": { + "prefab_name": "StructurePictureFrameThickLandscapeLarge", + "prefab_hash": -1434523206, + "desc": "", + "name": "Picture Frame Thick Landscape Large" + }, + "structure": { + "small_grid": true + } + }, + "StructurePictureFrameThickLandscapeSmall": { + "prefab": { + "prefab_name": "StructurePictureFrameThickLandscapeSmall", + "prefab_hash": -2041566697, + "desc": "", + "name": "Picture Frame Thick Landscape Small" + }, + "structure": { + "small_grid": true + } + }, + "StructurePictureFrameThickMountLandscapeLarge": { + "prefab": { + "prefab_name": "StructurePictureFrameThickMountLandscapeLarge", + "prefab_hash": 950004659, + "desc": "", + "name": "Picture Frame Thick Landscape Large" + }, + "structure": { + "small_grid": true + } + }, + "StructurePictureFrameThickMountLandscapeSmall": { + "prefab": { + "prefab_name": "StructurePictureFrameThickMountLandscapeSmall", + "prefab_hash": 347154462, + "desc": "", + "name": "Picture Frame Thick Landscape Small" + }, + "structure": { + "small_grid": true + } + }, + "StructurePictureFrameThickMountPortraitLarge": { + "prefab": { + "prefab_name": "StructurePictureFrameThickMountPortraitLarge", + "prefab_hash": -1459641358, + "desc": "", + "name": "Picture Frame Thick Mount Portrait Large" + }, + "structure": { + "small_grid": true + } + }, + "StructurePictureFrameThickMountPortraitSmall": { + "prefab": { + "prefab_name": "StructurePictureFrameThickMountPortraitSmall", + "prefab_hash": -2066653089, + "desc": "", + "name": "Picture Frame Thick Mount Portrait Small" + }, + "structure": { + "small_grid": true + } + }, + "StructurePictureFrameThickPortraitLarge": { + "prefab": { + "prefab_name": "StructurePictureFrameThickPortraitLarge", + "prefab_hash": -1686949570, + "desc": "", + "name": "Picture Frame Thick Portrait Large" + }, + "structure": { + "small_grid": true + } + }, + "StructurePictureFrameThickPortraitSmall": { + "prefab": { + "prefab_name": "StructurePictureFrameThickPortraitSmall", + "prefab_hash": -1218579821, + "desc": "", + "name": "Picture Frame Thick Portrait Small" + }, + "structure": { + "small_grid": true + } + }, + "StructurePictureFrameThinLandscapeLarge": { + "prefab": { + "prefab_name": "StructurePictureFrameThinLandscapeLarge", + "prefab_hash": -1418288625, + "desc": "", + "name": "Picture Frame Thin Landscape Large" + }, + "structure": { + "small_grid": true + } + }, + "StructurePictureFrameThinLandscapeSmall": { + "prefab": { + "prefab_name": "StructurePictureFrameThinLandscapeSmall", + "prefab_hash": -2024250974, + "desc": "", + "name": "Picture Frame Thin Landscape Small" + }, + "structure": { + "small_grid": true + } + }, + "StructurePictureFrameThinMountLandscapeLarge": { + "prefab": { + "prefab_name": "StructurePictureFrameThinMountLandscapeLarge", + "prefab_hash": -1146760430, + "desc": "", + "name": "Picture Frame Thin Landscape Large" + }, + "structure": { + "small_grid": true + } + }, + "StructurePictureFrameThinMountLandscapeSmall": { + "prefab": { + "prefab_name": "StructurePictureFrameThinMountLandscapeSmall", + "prefab_hash": -1752493889, + "desc": "", + "name": "Picture Frame Thin Landscape Small" + }, + "structure": { + "small_grid": true + } + }, + "StructurePictureFrameThinMountPortraitLarge": { + "prefab": { + "prefab_name": "StructurePictureFrameThinMountPortraitLarge", + "prefab_hash": 1094895077, + "desc": "", + "name": "Picture Frame Thin Portrait Large" + }, + "structure": { + "small_grid": true + } + }, + "StructurePictureFrameThinMountPortraitSmall": { + "prefab": { + "prefab_name": "StructurePictureFrameThinMountPortraitSmall", + "prefab_hash": 1835796040, + "desc": "", + "name": "Picture Frame Thin Portrait Small" + }, + "structure": { + "small_grid": true + } + }, + "StructurePictureFrameThinPortraitLarge": { + "prefab": { + "prefab_name": "StructurePictureFrameThinPortraitLarge", + "prefab_hash": 1212777087, + "desc": "", + "name": "Picture Frame Thin Portrait Large" + }, + "structure": { + "small_grid": true + } + }, + "StructurePictureFrameThinPortraitSmall": { + "prefab": { + "prefab_name": "StructurePictureFrameThinPortraitSmall", + "prefab_hash": 1684488658, + "desc": "", + "name": "Picture Frame Thin Portrait Small" + }, + "structure": { + "small_grid": true + } + }, + "StructurePipeAnalysizer": { + "prefab": { + "prefab_name": "StructurePipeAnalysizer", + "prefab_hash": 435685051, + "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.", + "name": "Pipe Analyzer" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructurePipeCorner": { + "prefab": { + "prefab_name": "StructurePipeCorner", + "prefab_hash": -1785673561, + "desc": "You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench.", + "name": "Pipe (Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructurePipeCowl": { + "prefab": { + "prefab_name": "StructurePipeCowl", + "prefab_hash": 465816159, + "desc": "", + "name": "Pipe Cowl" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructurePipeCrossJunction": { + "prefab": { + "prefab_name": "StructurePipeCrossJunction", + "prefab_hash": -1405295588, + "desc": "You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench.", + "name": "Pipe (Cross Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructurePipeCrossJunction3": { + "prefab": { + "prefab_name": "StructurePipeCrossJunction3", + "prefab_hash": 2038427184, + "desc": "You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", + "name": "Pipe (3-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructurePipeCrossJunction4": { + "prefab": { + "prefab_name": "StructurePipeCrossJunction4", + "prefab_hash": -417629293, + "desc": "You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", + "name": "Pipe (4-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructurePipeCrossJunction5": { + "prefab": { + "prefab_name": "StructurePipeCrossJunction5", + "prefab_hash": -1877193979, + "desc": "You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", + "name": "Pipe (5-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructurePipeCrossJunction6": { + "prefab": { + "prefab_name": "StructurePipeCrossJunction6", + "prefab_hash": 152378047, + "desc": "You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", + "name": "Pipe (6-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructurePipeHeater": { + "prefab": { + "prefab_name": "StructurePipeHeater", + "prefab_hash": -419758574, + "desc": "Adds 1000 joules of heat per tick to the contents of your pipe network.", + "name": "Pipe Heater (Gas)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructurePipeIgniter": { + "prefab": { + "prefab_name": "StructurePipeIgniter", + "prefab_hash": 1286441942, + "desc": "Ignites the atmosphere inside the attached pipe network.", + "name": "Pipe Igniter" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructurePipeInsulatedLiquidCrossJunction": { + "prefab": { + "prefab_name": "StructurePipeInsulatedLiquidCrossJunction", + "prefab_hash": -2068497073, + "desc": "Liquid piping with very low temperature loss or gain.", + "name": "Insulated Liquid Pipe (Cross Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + } + }, + "StructurePipeLabel": { + "prefab": { + "prefab_name": "StructurePipeLabel", + "prefab_hash": -999721119, + "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.", + "name": "Pipe Label" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "StructurePipeLiquidCorner": { + "prefab": { + "prefab_name": "StructurePipeLiquidCorner", + "prefab_hash": -1856720921, + "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench.", + "name": "Liquid Pipe (Corner)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructurePipeLiquidCrossJunction": { + "prefab": { + "prefab_name": "StructurePipeLiquidCrossJunction", + "prefab_hash": 1848735691, + "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", + "name": "Liquid Pipe (Cross Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructurePipeLiquidCrossJunction3": { + "prefab": { + "prefab_name": "StructurePipeLiquidCrossJunction3", + "prefab_hash": 1628087508, + "desc": "You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench.", + "name": "Liquid Pipe (3-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructurePipeLiquidCrossJunction4": { + "prefab": { + "prefab_name": "StructurePipeLiquidCrossJunction4", + "prefab_hash": -9555593, + "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", + "name": "Liquid Pipe (4-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructurePipeLiquidCrossJunction5": { + "prefab": { + "prefab_name": "StructurePipeLiquidCrossJunction5", + "prefab_hash": -2006384159, + "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", + "name": "Liquid Pipe (5-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructurePipeLiquidCrossJunction6": { + "prefab": { + "prefab_name": "StructurePipeLiquidCrossJunction6", + "prefab_hash": 291524699, + "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", + "name": "Liquid Pipe (6-Way Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructurePipeLiquidStraight": { + "prefab": { + "prefab_name": "StructurePipeLiquidStraight", + "prefab_hash": 667597982, + "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench.", + "name": "Liquid Pipe (Straight)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructurePipeLiquidTJunction": { + "prefab": { + "prefab_name": "StructurePipeLiquidTJunction", + "prefab_hash": 262616717, + "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", + "name": "Liquid Pipe (T Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructurePipeMeter": { + "prefab": { + "prefab_name": "StructurePipeMeter", + "prefab_hash": -1798362329, + "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\"", + "name": "Pipe Meter" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "StructurePipeOneWayValve": { + "prefab": { + "prefab_name": "StructurePipeOneWayValve", + "prefab_hash": 1580412404, + "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", + "name": "One Way Valve (Gas)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + } + ], + "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 + } + }, + "StructurePipeOrgan": { + "prefab": { + "prefab_name": "StructurePipeOrgan", + "prefab_hash": 1305252611, + "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.", + "name": "Pipe Organ" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructurePipeRadiator": { + "prefab": { + "prefab_name": "StructurePipeRadiator", + "prefab_hash": 1696603168, + "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.", + "name": "Pipe Convection Radiator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 1.0, + "radiation_factor": 0.75 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "StructurePipeRadiatorFlat": { + "prefab": { + "prefab_name": "StructurePipeRadiatorFlat", + "prefab_hash": -399883995, + "desc": "A pipe mounted radiator optimized for radiating heat in vacuums.", + "name": "Pipe Radiator" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.2, + "radiation_factor": 3.0 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "StructurePipeRadiatorFlatLiquid": { + "prefab": { + "prefab_name": "StructurePipeRadiatorFlatLiquid", + "prefab_hash": 2024754523, + "desc": "A liquid pipe mounted radiator optimized for radiating heat in vacuums.", + "name": "Pipe Radiator Liquid" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.2, + "radiation_factor": 3.0 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "StructurePipeStraight": { + "prefab": { + "prefab_name": "StructurePipeStraight", + "prefab_hash": 73728932, + "desc": "You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench.", + "name": "Pipe (Straight)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructurePipeTJunction": { + "prefab": { + "prefab_name": "StructurePipeTJunction", + "prefab_hash": -913817472, + "desc": "You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench.", + "name": "Pipe (T Junction)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + } + }, + "StructurePlanter": { + "prefab": { + "prefab_name": "StructurePlanter", + "prefab_hash": -1125641329, + "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).", + "name": "Planter" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "slots": [ + { + "name": "Plant", + "typ": "Plant" + }, + { + "name": "Plant", + "typ": "Plant" + } + ] + }, + "StructurePlatformLadderOpen": { + "prefab": { + "prefab_name": "StructurePlatformLadderOpen", + "prefab_hash": 1559586682, + "desc": "", + "name": "Ladder Platform" + }, + "structure": { + "small_grid": false + } + }, + "StructurePlinth": { + "prefab": { + "prefab_name": "StructurePlinth", + "prefab_hash": 989835703, + "desc": "", + "name": "Plinth" + }, + "structure": { + "small_grid": true + }, + "slots": [ + { + "name": "", + "typ": "None" + } + ] + }, + "StructurePortablesConnector": { + "prefab": { + "prefab_name": "StructurePortablesConnector", + "prefab_hash": -899013427, + "desc": "", + "name": "Portables Connector" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Open": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Input2" + } + ], + "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 + } + }, + "StructurePowerConnector": { + "prefab": { + "prefab_name": "StructurePowerConnector", + "prefab_hash": -782951720, + "desc": "Attaches a Kit (Portable Generator) to a power network.", + "name": "Power Connector" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Open": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Portable Slot", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "Input" + } + ], + "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 + } + }, + "StructurePowerTransmitter": { + "prefab": { + "prefab_name": "StructurePowerTransmitter", + "prefab_hash": -65087121, + "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.", + "name": "Microwave Power Transmitter" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Unlinked", + "1": "Linked" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "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 + } + }, + "StructurePowerTransmitterOmni": { + "prefab": { + "prefab_name": "StructurePowerTransmitterOmni", + "prefab_hash": -327468845, + "desc": "", + "name": "Power Transmitter Omni" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "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 + } + }, + "StructurePowerTransmitterReceiver": { + "prefab": { + "prefab_name": "StructurePowerTransmitterReceiver", + "prefab_hash": 1195820278, + "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", + "name": "Microwave Power Receiver" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Unlinked", + "1": "Linked" + }, + "transmission_receiver": false, + "wireless_logic": true, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Output" + } + ], + "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 + } + }, + "StructurePowerUmbilicalFemale": { + "prefab": { + "prefab_name": "StructurePowerUmbilicalFemale", + "prefab_hash": 101488029, + "desc": "", + "name": "Umbilical Socket (Power)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "Output" + } + ], + "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 + } + }, + "StructurePowerUmbilicalFemaleSide": { + "prefab": { + "prefab_name": "StructurePowerUmbilicalFemaleSide", + "prefab_hash": 1922506192, + "desc": "", + "name": "Umbilical Socket Angle (Power)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "Output" + } + ], + "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 + } + }, + "StructurePowerUmbilicalMale": { + "prefab": { + "prefab_name": "StructurePowerUmbilicalMale", + "prefab_hash": 1529453938, + "desc": "0.Left\n1.Center\n2.Right", + "name": "Umbilical (Power)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Left", + "1": "Center", + "2": "Right" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "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 + } + }, + "StructurePoweredVent": { + "prefab": { + "prefab_name": "StructurePoweredVent", + "prefab_hash": 938836756, + "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.", + "name": "Powered Vent" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "PressureExternal": "ReadWrite", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Outward", + "1": "Inward" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructurePoweredVentLarge": { + "prefab": { + "prefab_name": "StructurePoweredVentLarge", + "prefab_hash": -785498334, + "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.", + "name": "Powered Vent Large" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "PressureExternal": "ReadWrite", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Outward", + "1": "Inward" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructurePressurantValve": { + "prefab": { + "prefab_name": "StructurePressurantValve", + "prefab_hash": 23052817, + "desc": "Pumps gas into a liquid pipe in order to raise the pressure", + "name": "Pressurant Valve" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructurePressureFedGasEngine": { + "prefab": { + "prefab_name": "StructurePressureFedGasEngine", + "prefab_hash": -624011170, + "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.", + "name": "Pressure Fed Gas Engine" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Input2" + }, + { + "typ": "PowerAndData", + "role": "Output" + } + ], + "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 + } + }, + "StructurePressureFedLiquidEngine": { + "prefab": { + "prefab_name": "StructurePressureFedLiquidEngine", + "prefab_hash": 379750958, + "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.", + "name": "Pressure Fed Liquid Engine" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Input2" + }, + { + "typ": "PowerAndData", + "role": "Output" + } + ], + "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 + } + }, + "StructurePressurePlateLarge": { + "prefab": { + "prefab_name": "StructurePressurePlateLarge", + "prefab_hash": -2008706143, + "desc": "", + "name": "Trigger Plate (Large)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Data", + "role": "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 + } + }, + "StructurePressurePlateMedium": { + "prefab": { + "prefab_name": "StructurePressurePlateMedium", + "prefab_hash": 1269458680, + "desc": "", + "name": "Trigger Plate (Medium)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Data", + "role": "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 + } + }, + "StructurePressurePlateSmall": { + "prefab": { + "prefab_name": "StructurePressurePlateSmall", + "prefab_hash": -1536471028, + "desc": "", + "name": "Trigger Plate (Small)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Data", + "role": "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 + } + }, + "StructurePressureRegulator": { + "prefab": { + "prefab_name": "StructurePressureRegulator", + "prefab_hash": 209854039, + "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.", + "name": "Pressure Regulator" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureProximitySensor": { + "prefab": { + "prefab_name": "StructureProximitySensor", + "prefab_hash": 568800213, + "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.", + "name": "Proximity Sensor" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Activate": "Read", + "Setting": "ReadWrite", + "Quantity": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructurePumpedLiquidEngine": { + "prefab": { + "prefab_name": "StructurePumpedLiquidEngine", + "prefab_hash": -2031440019, + "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", + "name": "Pumped Liquid Engine" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "None" + }, + { + "typ": "PowerAndData", + "role": "Output" + } + ], + "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 + } + }, + "StructurePurgeValve": { + "prefab": { + "prefab_name": "StructurePurgeValve", + "prefab_hash": -737232128, + "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.", + "name": "Purge Valve" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureRailing": { + "prefab": { + "prefab_name": "StructureRailing", + "prefab_hash": -1756913871, + "desc": "\"Safety third.\"", + "name": "Railing Industrial (Type 1)" + }, + "structure": { + "small_grid": false + } + }, + "StructureRecycler": { + "prefab": { + "prefab_name": "StructureRecycler", + "prefab_hash": -1633947337, + "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.", + "name": "Recycler" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "Reagents": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "ClearMemory": "Write", + "ExportCount": "Read", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureRefrigeratedVendingMachine": { + "prefab": { + "prefab_name": "StructureRefrigeratedVendingMachine", + "prefab_hash": -1577831321, + "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. ", + "name": "Refrigerated Vending Machine" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "logic": { + "logic_slot_types": { + "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": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "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" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureReinforcedCompositeWindow": { + "prefab": { + "prefab_name": "StructureReinforcedCompositeWindow", + "prefab_hash": 2027713511, + "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.", + "name": "Reinforced Window (Composite)" + }, + "structure": { + "small_grid": false + } + }, + "StructureReinforcedCompositeWindowSteel": { + "prefab": { + "prefab_name": "StructureReinforcedCompositeWindowSteel", + "prefab_hash": -816454272, + "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.", + "name": "Reinforced Window (Composite Steel)" + }, + "structure": { + "small_grid": false + } + }, + "StructureReinforcedWallPaddedWindow": { + "prefab": { + "prefab_name": "StructureReinforcedWallPaddedWindow", + "prefab_hash": 1939061729, + "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.", + "name": "Reinforced Window (Padded)" + }, + "structure": { + "small_grid": false + } + }, + "StructureReinforcedWallPaddedWindowThin": { + "prefab": { + "prefab_name": "StructureReinforcedWallPaddedWindowThin", + "prefab_hash": 158502707, + "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.", + "name": "Reinforced Window (Thin)" + }, + "structure": { + "small_grid": false + } + }, + "StructureRocketAvionics": { + "prefab": { + "prefab_name": "StructureRocketAvionics", + "prefab_hash": 808389066, + "desc": "", + "name": "Rocket Avionics" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Invalid", + "1": "None", + "2": "Mine", + "3": "Survey", + "4": "Discover", + "5": "Chart" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureRocketCelestialTracker": { + "prefab": { + "prefab_name": "StructureRocketCelestialTracker", + "prefab_hash": 997453927, + "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.", + "name": "Rocket Celestial Tracker" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Horizontal": "Read", + "Vertical": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "Index": "ReadWrite", + "CelestialHash": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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": { + "instructions": { + "BodyOrientation": { + "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 |", + "typ": "CelestialTracking", + "value": 1 + } + }, + "memory_access": "Read", + "memory_size": 12 + } + }, + "StructureRocketCircuitHousing": { + "prefab": { + "prefab_name": "StructureRocketCircuitHousing", + "prefab_hash": 150135861, + "desc": "", + "name": "Rocket Circuit Housing" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "LineNumber": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "LineNumber": "ReadWrite", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": true + }, + "slots": [ + { + "name": "Programmable Chip", + "typ": "ProgrammableChip" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "Input" + } + ], + "device_pins_length": 6, + "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 + } + }, + "StructureRocketEngineTiny": { + "prefab": { + "prefab_name": "StructureRocketEngineTiny", + "prefab_hash": 178472613, + "desc": "", + "name": "Rocket Engine (Tiny)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureRocketManufactory": { + "prefab": { + "prefab_name": "StructureRocketManufactory", + "prefab_hash": 1781051034, + "desc": "", + "name": "Rocket Manufactory" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Ingot" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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": { + "consumed_resouces": [ + "ItemAstroloyIngot", + "ItemConstantanIngot", + "ItemCopperIngot", + "ItemElectrumIngot", + "ItemGoldIngot", + "ItemHastelloyIngot", + "ItemInconelIngot", + "ItemInvarIngot", + "ItemIronIngot", + "ItemLeadIngot", + "ItemNickelIngot", + "ItemSiliconIngot", + "ItemSilverIngot", + "ItemSolderIngot", + "ItemSolidFuel", + "ItemSteelIngot", + "ItemStelliteIngot", + "ItemWaspaloyIngot", + "ItemWasteIngot" + ], + "processed_reagents": [] + }, + "fabricator_info": { + "tier": "Undefined", + "recipes": { + "ItemKitAccessBridge": { + "tier": "TierOne", + "time": 30.0, + "energy": 9000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 3.0, + "Steel": 10.0 + } + }, + "ItemKitChuteUmbilical": { + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 3.0, + "Steel": 10.0 + } + }, + "ItemKitElectricUmbilical": { + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 5.0, + "Steel": 5.0 + } + }, + "ItemKitFuselage": { + "tier": "TierOne", + "time": 120.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 20.0 + } + }, + "ItemKitGasUmbilical": { + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 5.0 + } + }, + "ItemKitGovernedGasRocketEngine": { + "tier": "TierOne", + "time": 60.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 5.0, + "Iron": 15.0 + } + }, + "ItemKitLaunchMount": { + "tier": "TierOne", + "time": 240.0, + "energy": 120000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 60.0 + } + }, + "ItemKitLaunchTower": { + "tier": "TierOne", + "time": 30.0, + "energy": 30000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 10.0 + } + }, + "ItemKitLiquidUmbilical": { + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 5.0 + } + }, + "ItemKitPressureFedGasEngine": { + "tier": "TierOne", + "time": 60.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 10.0, + "Electrum": 5.0, + "Invar": 20.0, + "Steel": 20.0 + } + }, + "ItemKitPressureFedLiquidEngine": { + "tier": "TierOne", + "time": 60.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Astroloy": 10.0, + "Inconel": 5.0, + "Waspaloy": 15.0 + } + }, + "ItemKitPumpedLiquidEngine": { + "tier": "TierOne", + "time": 60.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 10.0, + "Electrum": 5.0, + "Steel": 15.0 + } + }, + "ItemKitRocketAvionics": { + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 2.0, + "Solder": 3.0 + } + }, + "ItemKitRocketBattery": { + "tier": "TierOne", + "time": 10.0, + "energy": 10000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 5.0, + "Solder": 5.0, + "Steel": 10.0 + } + }, + "ItemKitRocketCargoStorage": { + "tier": "TierOne", + "time": 30.0, + "energy": 30000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 10.0, + "Invar": 5.0, + "Steel": 10.0 + } + }, + "ItemKitRocketCelestialTracker": { + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 5.0, + "Steel": 5.0 + } + }, + "ItemKitRocketCircuitHousing": { + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 2.0, + "Solder": 3.0 + } + }, + "ItemKitRocketDatalink": { + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 2.0, + "Solder": 3.0 + } + }, + "ItemKitRocketGasFuelTank": { + "tier": "TierOne", + "time": 10.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 10.0 + } + }, + "ItemKitRocketLiquidFuelTank": { + "tier": "TierOne", + "time": 10.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 20.0 + } + }, + "ItemKitRocketMiner": { + "tier": "TierOne", + "time": 60.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 10.0, + "Electrum": 5.0, + "Invar": 5.0, + "Steel": 10.0 + } + }, + "ItemKitRocketScanner": { + "tier": "TierOne", + "time": 60.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Gold": 10.0 + } + }, + "ItemKitRocketTransformerSmall": { + "tier": "TierOne", + "time": 60.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 5.0, + "Steel": 10.0 + } + }, + "ItemKitStairwell": { + "tier": "TierOne", + "time": 20.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 15.0 + } + }, + "ItemRocketMiningDrillHead": { + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 20.0 + } + }, + "ItemRocketMiningDrillHeadDurable": { + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 10.0, + "Steel": 10.0 + } + }, + "ItemRocketMiningDrillHeadHighSpeedIce": { + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 5.0, + "Steel": 10.0 + } + }, + "ItemRocketMiningDrillHeadHighSpeedMineral": { + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 5.0, + "Steel": 10.0 + } + }, + "ItemRocketMiningDrillHeadIce": { + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 10.0, + "Steel": 10.0 + } + }, + "ItemRocketMiningDrillHeadLongTerm": { + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 5.0, + "Steel": 10.0 + } + }, + "ItemRocketMiningDrillHeadMineral": { + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 10.0, + "Steel": 10.0 + } + }, + "ItemRocketScanningHead": { + "tier": "TierOne", + "time": 60.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 3.0, + "Gold": 2.0 + } + } + } + }, + "memory": { + "instructions": { + "DeviceSetLock": { + "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 |", + "typ": "PrinterInstruction", + "value": 6 + }, + "EjectAllReagents": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 8 + }, + "EjectReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 7 + }, + "ExecuteRecipe": { + "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 |", + "typ": "PrinterInstruction", + "value": 2 + }, + "JumpIfNextInvalid": { + "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 |", + "typ": "PrinterInstruction", + "value": 4 + }, + "JumpToAddress": { + "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 |", + "typ": "PrinterInstruction", + "value": 5 + }, + "MissingRecipeReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 9 + }, + "StackPointer": { + "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 |", + "typ": "PrinterInstruction", + "value": 1 + }, + "WaitUntilNextValid": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 3 + } + }, + "memory_access": "ReadWrite", + "memory_size": 64 + } + }, + "StructureRocketMiner": { + "prefab": { + "prefab_name": "StructureRocketMiner", + "prefab_hash": -2087223687, + "desc": "Gathers available resources at the rocket's current space location.", + "name": "Rocket Miner" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Quantity": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "ClearMemory": "Write", + "ExportCount": "Read", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "DrillCondition": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Export", + "typ": "None" + }, + { + "name": "Drill Head Slot", + "typ": "DrillHead" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureRocketScanner": { + "prefab": { + "prefab_name": "StructureRocketScanner", + "prefab_hash": 2014252591, + "desc": "", + "name": "Rocket Scanner" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Scanner Head Slot", + "typ": "ScanningHead" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureRocketTower": { + "prefab": { + "prefab_name": "StructureRocketTower", + "prefab_hash": -654619479, + "desc": "", + "name": "Launch Tower" + }, + "structure": { + "small_grid": false + } + }, + "StructureRocketTransformerSmall": { + "prefab": { + "prefab_name": "StructureRocketTransformerSmall", + "prefab_hash": 518925193, + "desc": "", + "name": "Transformer Small (Rocket)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "Input" + }, + { + "typ": "Power", + "role": "Output" + }, + { + "typ": "Data", + "role": "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 + } + }, + "StructureRover": { + "prefab": { + "prefab_name": "StructureRover", + "prefab_hash": 806513938, + "desc": "", + "name": "Rover Frame" + }, + "structure": { + "small_grid": false + } + }, + "StructureSDBHopper": { + "prefab": { + "prefab_name": "StructureSDBHopper", + "prefab_hash": -1875856925, + "desc": "", + "name": "SDB Hopper" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "Open": "ReadWrite", + "ClearMemory": "Write", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "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 + } + }, + "StructureSDBHopperAdvanced": { + "prefab": { + "prefab_name": "StructureSDBHopperAdvanced", + "prefab_hash": 467225612, + "desc": "", + "name": "SDB Hopper Advanced" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "ClearMemory": "Write", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Chute", + "role": "Input" + } + ], + "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 + } + }, + "StructureSDBSilo": { + "prefab": { + "prefab_name": "StructureSDBSilo", + "prefab_hash": 1155865682, + "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.", + "name": "SDB Silo" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureSatelliteDish": { + "prefab": { + "prefab_name": "StructureSatelliteDish", + "prefab_hash": 439026183, + "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.", + "name": "Medium Satellite Dish" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureSecurityPrinter": { + "prefab": { + "prefab_name": "StructureSecurityPrinter", + "prefab_hash": -641491515, + "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", + "name": "Security Printer" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Ingot" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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": { + "consumed_resouces": [ + "ItemAstroloyIngot", + "ItemConstantanIngot", + "ItemCopperIngot", + "ItemElectrumIngot", + "ItemGoldIngot", + "ItemHastelloyIngot", + "ItemInconelIngot", + "ItemInvarIngot", + "ItemIronIngot", + "ItemLeadIngot", + "ItemNickelIngot", + "ItemSiliconIngot", + "ItemSilverIngot", + "ItemSolderIngot", + "ItemSolidFuel", + "ItemSteelIngot", + "ItemStelliteIngot", + "ItemWaspaloyIngot", + "ItemWasteIngot" + ], + "processed_reagents": [] + }, + "fabricator_info": { + "tier": "Undefined", + "recipes": { + "AccessCardBlack": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardBlue": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardBrown": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardGray": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardGreen": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardKhaki": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardOrange": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardPink": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardPurple": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardRed": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardWhite": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "AccessCardYellow": { + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + "CartridgeAccessController": { + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + "FireArmSMG": { + "tier": "TierOne", + "time": 120.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Nickel": 10.0, + "Steel": 30.0 + } + }, + "Handgun": { + "tier": "TierOne", + "time": 120.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Nickel": 10.0, + "Steel": 30.0 + } + }, + "HandgunMagazine": { + "tier": "TierOne", + "time": 60.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Lead": 1.0, + "Steel": 3.0 + } + }, + "ItemAmmoBox": { + "tier": "TierOne", + "time": 120.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 30.0, + "Lead": 50.0, + "Steel": 30.0 + } + }, + "ItemExplosive": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 5, + "reagents": { + "Copper": 5.0, + "Electrum": 1.0, + "Gold": 5.0, + "Lead": 10.0, + "Steel": 7.0 + } + }, + "ItemGrenade": { + "tier": "TierOne", + "time": 90.0, + "energy": 2900.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 15.0, + "Gold": 1.0, + "Lead": 25.0, + "Steel": 25.0 + } + }, + "ItemMiningCharge": { + "tier": "TierOne", + "time": 7.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 7.0, + "Lead": 10.0 + } + }, + "SMGMagazine": { + "tier": "TierOne", + "time": 60.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Lead": 1.0, + "Steel": 3.0 + } + }, + "WeaponPistolEnergy": { + "tier": "TierTwo", + "time": 120.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Electrum": 20.0, + "Gold": 10.0, + "Solder": 10.0, + "Steel": 10.0 + } + }, + "WeaponRifleEnergy": { + "tier": "TierTwo", + "time": 240.0, + "energy": 10000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 6, + "reagents": { + "Constantan": 10.0, + "Electrum": 20.0, + "Gold": 10.0, + "Invar": 10.0, + "Solder": 10.0, + "Steel": 20.0 + } + } + } + }, + "memory": { + "instructions": { + "DeviceSetLock": { + "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 |", + "typ": "PrinterInstruction", + "value": 6 + }, + "EjectAllReagents": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 8 + }, + "EjectReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 7 + }, + "ExecuteRecipe": { + "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 |", + "typ": "PrinterInstruction", + "value": 2 + }, + "JumpIfNextInvalid": { + "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 |", + "typ": "PrinterInstruction", + "value": 4 + }, + "JumpToAddress": { + "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 |", + "typ": "PrinterInstruction", + "value": 5 + }, + "MissingRecipeReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 9 + }, + "StackPointer": { + "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 |", + "typ": "PrinterInstruction", + "value": 1 + }, + "WaitUntilNextValid": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 3 + } + }, + "memory_access": "ReadWrite", + "memory_size": 64 + } + }, + "StructureShelf": { + "prefab": { + "prefab_name": "StructureShelf", + "prefab_hash": 1172114950, + "desc": "", + "name": "Shelf" + }, + "structure": { + "small_grid": true + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, + "StructureShelfMedium": { + "prefab": { + "prefab_name": "StructureShelfMedium", + "prefab_hash": 182006674, + "desc": "A shelf for putting things on, so you can see them.", + "name": "Shelf Medium" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Open": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": 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" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructureShortCornerLocker": { + "prefab": { + "prefab_name": "StructureShortCornerLocker", + "prefab_hash": 1330754486, + "desc": "", + "name": "Short Corner Locker" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructureShortLocker": { + "prefab": { + "prefab_name": "StructureShortLocker", + "prefab_hash": -554553467, + "desc": "", + "name": "Short Locker" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": 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" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructureShower": { + "prefab": { + "prefab_name": "StructureShower", + "prefab_hash": -775128944, + "desc": "", + "name": "Shower" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Open": "ReadWrite", + "Activate": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "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 + } + }, + "StructureShowerPowered": { + "prefab": { + "prefab_name": "StructureShowerPowered", + "prefab_hash": -1081797501, + "desc": "", + "name": "Shower (Powered)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureSign1x1": { + "prefab": { + "prefab_name": "StructureSign1x1", + "prefab_hash": 879058460, + "desc": "", + "name": "Sign 1x1" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "StructureSign2x1": { + "prefab": { + "prefab_name": "StructureSign2x1", + "prefab_hash": 908320837, + "desc": "", + "name": "Sign 2x1" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "StructureSingleBed": { + "prefab": { + "prefab_name": "StructureSingleBed", + "prefab_hash": -492611, + "desc": "Description coming.", + "name": "Single Bed" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Bed", + "typ": "Entity" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructureSleeper": { + "prefab": { + "prefab_name": "StructureSleeper", + "prefab_hash": -1467449329, + "desc": "", + "name": "Sleeper" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Bed", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureSleeperLeft": { + "prefab": { + "prefab_name": "StructureSleeperLeft", + "prefab_hash": 1213495833, + "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.", + "name": "Sleeper Left" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Safe", + "1": "Unsafe", + "2": "Unpowered" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Player", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureSleeperRight": { + "prefab": { + "prefab_name": "StructureSleeperRight", + "prefab_hash": -1812330717, + "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.", + "name": "Sleeper Right" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Safe", + "1": "Unsafe", + "2": "Unpowered" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Player", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureSleeperVertical": { + "prefab": { + "prefab_name": "StructureSleeperVertical", + "prefab_hash": -1300059018, + "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.", + "name": "Sleeper Vertical" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Safe", + "1": "Unsafe", + "2": "Unpowered" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Player", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureSleeperVerticalDroid": { + "prefab": { + "prefab_name": "StructureSleeperVerticalDroid", + "prefab_hash": 1382098999, + "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.", + "name": "Droid Sleeper Vertical" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Player", + "typ": "Entity" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureSmallDirectHeatExchangeGastoGas": { + "prefab": { + "prefab_name": "StructureSmallDirectHeatExchangeGastoGas", + "prefab_hash": 1310303582, + "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", + "name": "Small Direct Heat Exchanger - Gas + Gas" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Input2" + } + ], + "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 + } + }, + "StructureSmallDirectHeatExchangeLiquidtoGas": { + "prefab": { + "prefab_name": "StructureSmallDirectHeatExchangeLiquidtoGas", + "prefab_hash": 1825212016, + "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", + "name": "Small Direct Heat Exchanger - Liquid + Gas " + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Input2" + } + ], + "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 + } + }, + "StructureSmallDirectHeatExchangeLiquidtoLiquid": { + "prefab": { + "prefab_name": "StructureSmallDirectHeatExchangeLiquidtoLiquid", + "prefab_hash": -507770416, + "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", + "name": "Small Direct Heat Exchanger - Liquid + Liquid" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Input2" + } + ], + "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 + } + }, + "StructureSmallSatelliteDish": { + "prefab": { + "prefab_name": "StructureSmallSatelliteDish", + "prefab_hash": -2138748650, + "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.", + "name": "Small Satellite Dish" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Input" + } + ], + "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 + } + }, + "StructureSmallTableBacklessDouble": { + "prefab": { + "prefab_name": "StructureSmallTableBacklessDouble", + "prefab_hash": -1633000411, + "desc": "", + "name": "Small (Table Backless Double)" + }, + "structure": { + "small_grid": true + } + }, + "StructureSmallTableBacklessSingle": { + "prefab": { + "prefab_name": "StructureSmallTableBacklessSingle", + "prefab_hash": -1897221677, + "desc": "", + "name": "Small (Table Backless Single)" + }, + "structure": { + "small_grid": true + } + }, + "StructureSmallTableDinnerSingle": { + "prefab": { + "prefab_name": "StructureSmallTableDinnerSingle", + "prefab_hash": 1260651529, + "desc": "", + "name": "Small (Table Dinner Single)" + }, + "structure": { + "small_grid": true + } + }, + "StructureSmallTableRectangleDouble": { + "prefab": { + "prefab_name": "StructureSmallTableRectangleDouble", + "prefab_hash": -660451023, + "desc": "", + "name": "Small (Table Rectangle Double)" + }, + "structure": { + "small_grid": true + } + }, + "StructureSmallTableRectangleSingle": { + "prefab": { + "prefab_name": "StructureSmallTableRectangleSingle", + "prefab_hash": -924678969, + "desc": "", + "name": "Small (Table Rectangle Single)" + }, + "structure": { + "small_grid": true + } + }, + "StructureSmallTableThickDouble": { + "prefab": { + "prefab_name": "StructureSmallTableThickDouble", + "prefab_hash": -19246131, + "desc": "", + "name": "Small (Table Thick Double)" + }, + "structure": { + "small_grid": true + } + }, + "StructureSmallTableThickSingle": { + "prefab": { + "prefab_name": "StructureSmallTableThickSingle", + "prefab_hash": -291862981, + "desc": "", + "name": "Small Table (Thick Single)" + }, + "structure": { + "small_grid": true + } + }, + "StructureSolarPanel": { + "prefab": { + "prefab_name": "StructureSolarPanel", + "prefab_hash": -2045627372, + "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.", + "name": "Solar Panel" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Charge": "Read", + "Horizontal": "ReadWrite", + "Vertical": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureSolarPanel45": { + "prefab": { + "prefab_name": "StructureSolarPanel45", + "prefab_hash": -1554349863, + "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.", + "name": "Solar Panel (Angled)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Charge": "Read", + "Horizontal": "ReadWrite", + "Vertical": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureSolarPanel45Reinforced": { + "prefab": { + "prefab_name": "StructureSolarPanel45Reinforced", + "prefab_hash": 930865127, + "desc": "This solar panel is resistant to storm damage.", + "name": "Solar Panel (Heavy Angled)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Charge": "Read", + "Horizontal": "ReadWrite", + "Vertical": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureSolarPanelDual": { + "prefab": { + "prefab_name": "StructureSolarPanelDual", + "prefab_hash": -539224550, + "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.", + "name": "Solar Panel (Dual)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Charge": "Read", + "Horizontal": "ReadWrite", + "Vertical": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureSolarPanelDualReinforced": { + "prefab": { + "prefab_name": "StructureSolarPanelDualReinforced", + "prefab_hash": -1545574413, + "desc": "This solar panel is resistant to storm damage.", + "name": "Solar Panel (Heavy Dual)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Charge": "Read", + "Horizontal": "ReadWrite", + "Vertical": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureSolarPanelFlat": { + "prefab": { + "prefab_name": "StructureSolarPanelFlat", + "prefab_hash": 1968102968, + "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.", + "name": "Solar Panel (Flat)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Charge": "Read", + "Horizontal": "ReadWrite", + "Vertical": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureSolarPanelFlatReinforced": { + "prefab": { + "prefab_name": "StructureSolarPanelFlatReinforced", + "prefab_hash": 1697196770, + "desc": "This solar panel is resistant to storm damage.", + "name": "Solar Panel (Heavy Flat)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Charge": "Read", + "Horizontal": "ReadWrite", + "Vertical": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureSolarPanelReinforced": { + "prefab": { + "prefab_name": "StructureSolarPanelReinforced", + "prefab_hash": -934345724, + "desc": "This solar panel is resistant to storm damage.", + "name": "Solar Panel (Heavy)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Charge": "Read", + "Horizontal": "ReadWrite", + "Vertical": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureSolidFuelGenerator": { + "prefab": { + "prefab_name": "StructureSolidFuelGenerator", + "prefab_hash": 813146305, + "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.", + "name": "Generator (Solid Fuel)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Lock": "ReadWrite", + "On": "ReadWrite", + "ClearMemory": "Write", + "ImportCount": "Read", + "PowerGeneration": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Not Generating", + "1": "Generating" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Input", + "typ": "Ore" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Output" + } + ], + "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": { + "consumed_resouces": [ + "ItemCharcoal", + "ItemCoalOre", + "ItemSolidFuel" + ], + "processed_reagents": [] + } + }, + "StructureSorter": { + "prefab": { + "prefab_name": "StructureSorter", + "prefab_hash": -1009150565, + "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.", + "name": "Sorter" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "ClearMemory": "Write", + "ExportCount": "Read", + "ImportCount": "Read", + "Output": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Split", + "1": "Filter", + "2": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + }, + { + "name": "Export 2", + "typ": "None" + }, + { + "name": "Data Disk", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Output2" + }, + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureStacker": { + "prefab": { + "prefab_name": "StructureStacker", + "prefab_hash": -2020231820, + "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.", + "name": "Stacker" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Automatic", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + }, + { + "name": "Processing", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Chute", + "role": "Input" + } + ], + "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 + } + }, + "StructureStackerReverse": { + "prefab": { + "prefab_name": "StructureStackerReverse", + "prefab_hash": 1585641623, + "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.", + "name": "Stacker" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "modes": { + "0": "Automatic", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Chute", + "role": "Input" + } + ], + "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 + } + }, + "StructureStairs4x2": { + "prefab": { + "prefab_name": "StructureStairs4x2", + "prefab_hash": 1405018945, + "desc": "", + "name": "Stairs" + }, + "structure": { + "small_grid": false + } + }, + "StructureStairs4x2RailL": { + "prefab": { + "prefab_name": "StructureStairs4x2RailL", + "prefab_hash": 155214029, + "desc": "", + "name": "Stairs with Rail (Left)" + }, + "structure": { + "small_grid": false + } + }, + "StructureStairs4x2RailR": { + "prefab": { + "prefab_name": "StructureStairs4x2RailR", + "prefab_hash": -212902482, + "desc": "", + "name": "Stairs with Rail (Right)" + }, + "structure": { + "small_grid": false + } + }, + "StructureStairs4x2Rails": { + "prefab": { + "prefab_name": "StructureStairs4x2Rails", + "prefab_hash": -1088008720, + "desc": "", + "name": "Stairs with Rails" + }, + "structure": { + "small_grid": false + } + }, + "StructureStairwellBackLeft": { + "prefab": { + "prefab_name": "StructureStairwellBackLeft", + "prefab_hash": 505924160, + "desc": "", + "name": "Stairwell (Back Left)" + }, + "structure": { + "small_grid": false + } + }, + "StructureStairwellBackPassthrough": { + "prefab": { + "prefab_name": "StructureStairwellBackPassthrough", + "prefab_hash": -862048392, + "desc": "", + "name": "Stairwell (Back Passthrough)" + }, + "structure": { + "small_grid": false + } + }, + "StructureStairwellBackRight": { + "prefab": { + "prefab_name": "StructureStairwellBackRight", + "prefab_hash": -2128896573, + "desc": "", + "name": "Stairwell (Back Right)" + }, + "structure": { + "small_grid": false + } + }, + "StructureStairwellFrontLeft": { + "prefab": { + "prefab_name": "StructureStairwellFrontLeft", + "prefab_hash": -37454456, + "desc": "", + "name": "Stairwell (Front Left)" + }, + "structure": { + "small_grid": false + } + }, + "StructureStairwellFrontPassthrough": { + "prefab": { + "prefab_name": "StructureStairwellFrontPassthrough", + "prefab_hash": -1625452928, + "desc": "", + "name": "Stairwell (Front Passthrough)" + }, + "structure": { + "small_grid": false + } + }, + "StructureStairwellFrontRight": { + "prefab": { + "prefab_name": "StructureStairwellFrontRight", + "prefab_hash": 340210934, + "desc": "", + "name": "Stairwell (Front Right)" + }, + "structure": { + "small_grid": false + } + }, + "StructureStairwellNoDoors": { + "prefab": { + "prefab_name": "StructureStairwellNoDoors", + "prefab_hash": 2049879875, + "desc": "", + "name": "Stairwell (No Doors)" + }, + "structure": { + "small_grid": false + } + }, + "StructureStirlingEngine": { + "prefab": { + "prefab_name": "StructureStirlingEngine", + "prefab_hash": -260316435, + "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.", + "name": "Stirling Engine" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.15, + "radiation_factor": 0.15 + }, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Gas Canister", + "typ": "GasCanister" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureStorageLocker": { + "prefab": { + "prefab_name": "StructureStorageLocker", + "prefab_hash": -793623899, + "desc": "", + "name": "Locker" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Open": "ReadWrite", + "Lock": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": 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" + }, + { + "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" + } + ], + "device": { + "connection_list": [], + "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 + } + }, + "StructureSuitStorage": { + "prefab": { + "prefab_name": "StructureSuitStorage", + "prefab_hash": 255034731, + "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.", + "name": "Suit Storage" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Helmet", + "typ": "Helmet" + }, + { + "name": "Suit", + "typ": "Suit" + }, + { + "name": "Back", + "typ": "Back" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "Pipe", + "role": "Input2" + }, + { + "typ": "Pipe", + "role": "Output" + } + ], + "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 + } + }, + "StructureTankBig": { + "prefab": { + "prefab_name": "StructureTankBig", + "prefab_hash": -1606848156, + "desc": "", + "name": "Large Tank" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + } + ], + "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 + } + }, + "StructureTankBigInsulated": { + "prefab": { + "prefab_name": "StructureTankBigInsulated", + "prefab_hash": 1280378227, + "desc": "", + "name": "Tank Big (Insulated)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + } + ], + "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 + } + }, + "StructureTankConnector": { + "prefab": { + "prefab_name": "StructureTankConnector", + "prefab_hash": -1276379454, + "desc": "Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network.", + "name": "Tank Connector" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "slots": [ + { + "name": "", + "typ": "None" + } + ] + }, + "StructureTankConnectorLiquid": { + "prefab": { + "prefab_name": "StructureTankConnectorLiquid", + "prefab_hash": 1331802518, + "desc": "These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network.", + "name": "Liquid Tank Connector" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.010000001, + "radiation_factor": 0.0005 + }, + "slots": [ + { + "name": "Portable Slot", + "typ": "None" + } + ] + }, + "StructureTankSmall": { + "prefab": { + "prefab_name": "StructureTankSmall", + "prefab_hash": 1013514688, + "desc": "", + "name": "Small Tank" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "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 + } + }, + "StructureTankSmallAir": { + "prefab": { + "prefab_name": "StructureTankSmallAir", + "prefab_hash": 955744474, + "desc": "", + "name": "Small Tank (Air)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "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 + } + }, + "StructureTankSmallFuel": { + "prefab": { + "prefab_name": "StructureTankSmallFuel", + "prefab_hash": 2102454415, + "desc": "", + "name": "Small Tank (Fuel)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.05, + "radiation_factor": 0.002 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "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 + } + }, + "StructureTankSmallInsulated": { + "prefab": { + "prefab_name": "StructureTankSmallInsulated", + "prefab_hash": 272136332, + "desc": "", + "name": "Tank Small (Insulated)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.0, + "radiation_factor": 0.0 + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Input" + } + ], + "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 + } + }, + "StructureToolManufactory": { + "prefab": { + "prefab_name": "StructureToolManufactory", + "prefab_hash": -465741100, + "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.", + "name": "Tool Manufactory" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Ingot" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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": { + "consumed_resouces": [ + "ItemAstroloyIngot", + "ItemConstantanIngot", + "ItemCopperIngot", + "ItemElectrumIngot", + "ItemGoldIngot", + "ItemHastelloyIngot", + "ItemInconelIngot", + "ItemInvarIngot", + "ItemIronIngot", + "ItemLeadIngot", + "ItemNickelIngot", + "ItemSiliconIngot", + "ItemSilverIngot", + "ItemSolderIngot", + "ItemSolidFuel", + "ItemSteelIngot", + "ItemStelliteIngot", + "ItemWaspaloyIngot", + "ItemWasteIngot" + ], + "processed_reagents": [] + }, + "fabricator_info": { + "tier": "Undefined", + "recipes": { + "FlareGun": { + "tier": "TierOne", + "time": 10.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 10.0, + "Silicon": 10.0 + } + }, + "ItemAngleGrinder": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Iron": 3.0 + } + }, + "ItemArcWelder": { + "tier": "TierOne", + "time": 30.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Electrum": 10.0, + "Invar": 5.0, + "Solder": 10.0, + "Steel": 10.0 + } + }, + "ItemBasketBall": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 1.0 + } + }, + "ItemBeacon": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 2.0 + } + }, + "ItemChemLightBlue": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 1.0 + } + }, + "ItemChemLightGreen": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 1.0 + } + }, + "ItemChemLightRed": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 1.0 + } + }, + "ItemChemLightWhite": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 1.0 + } + }, + "ItemChemLightYellow": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 1.0 + } + }, + "ItemClothingBagOveralls_Aus": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_Brazil": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_Canada": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_China": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_EU": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_France": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_Germany": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_Japan": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_Korea": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_NZ": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_Russia": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_SouthAfrica": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_UK": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_US": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemClothingBagOveralls_Ukraine": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "ItemCrowbar": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + "ItemDirtCanister": { + "tier": "TierOne", + "time": 5.0, + "energy": 400.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemDisposableBatteryCharger": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 2.0, + "Iron": 2.0 + } + }, + "ItemDrill": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 5.0 + } + }, + "ItemDuctTape": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 2.0 + } + }, + "ItemEvaSuit": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 5.0 + } + }, + "ItemFlagSmall": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemFlashlight": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Gold": 2.0 + } + }, + "ItemGlasses": { + "tier": "TierOne", + "time": 20.0, + "energy": 250.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 15.0, + "Silicon": 10.0 + } + }, + "ItemHardBackpack": { + "tier": "TierTwo", + "time": 30.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Astroloy": 5.0, + "Steel": 15.0, + "Stellite": 5.0 + } + }, + "ItemHardJetpack": { + "tier": "TierTwo", + "time": 40.0, + "energy": 1750.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Astroloy": 8.0, + "Steel": 20.0, + "Stellite": 8.0, + "Waspaloy": 8.0 + } + }, + "ItemHardMiningBackPack": { + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 1.0, + "Steel": 6.0 + } + }, + "ItemHardSuit": { + "tier": "TierTwo", + "time": 60.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Astroloy": 10.0, + "Steel": 20.0, + "Stellite": 2.0 + } + }, + "ItemHardsuitHelmet": { + "tier": "TierTwo", + "time": 50.0, + "energy": 1750.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Astroloy": 2.0, + "Steel": 10.0, + "Stellite": 2.0 + } + }, + "ItemIgniter": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Copper": 3.0 + } + }, + "ItemJetpackBasic": { + "tier": "TierOne", + "time": 30.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Gold": 2.0, + "Lead": 5.0, + "Steel": 10.0 + } + }, + "ItemKitBasket": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 5.0 + } + }, + "ItemLabeller": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 1.0, + "Iron": 2.0 + } + }, + "ItemMKIIAngleGrinder": { + "tier": "TierTwo", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Electrum": 4.0, + "Iron": 3.0 + } + }, + "ItemMKIIArcWelder": { + "tier": "TierTwo", + "time": 30.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Electrum": 14.0, + "Invar": 5.0, + "Solder": 10.0, + "Steel": 10.0 + } + }, + "ItemMKIICrowbar": { + "tier": "TierTwo", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 5.0, + "Iron": 5.0 + } + }, + "ItemMKIIDrill": { + "tier": "TierTwo", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Electrum": 5.0, + "Iron": 5.0 + } + }, + "ItemMKIIDuctTape": { + "tier": "TierTwo", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 1.0, + "Iron": 2.0 + } + }, + "ItemMKIIMiningDrill": { + "tier": "TierTwo", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Electrum": 5.0, + "Iron": 3.0 + } + }, + "ItemMKIIScrewdriver": { + "tier": "TierTwo", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 2.0, + "Iron": 2.0 + } + }, + "ItemMKIIWireCutters": { + "tier": "TierTwo", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 5.0, + "Iron": 3.0 + } + }, + "ItemMKIIWrench": { + "tier": "TierTwo", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 3.0, + "Iron": 3.0 + } + }, + "ItemMarineBodyArmor": { + "tier": "TierOne", + "time": 60.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Nickel": 10.0, + "Silicon": 10.0, + "Steel": 20.0 + } + }, + "ItemMarineHelmet": { + "tier": "TierOne", + "time": 45.0, + "energy": 1750.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Gold": 4.0, + "Silicon": 4.0, + "Steel": 8.0 + } + }, + "ItemMiningBackPack": { + "tier": "TierOne", + "time": 8.0, + "energy": 800.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 6.0 + } + }, + "ItemMiningBelt": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemMiningBeltMKII": { + "tier": "TierTwo", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Constantan": 5.0, + "Steel": 10.0 + } + }, + "ItemMiningDrill": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 3.0 + } + }, + "ItemMiningDrillHeavy": { + "tier": "TierTwo", + "time": 30.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Electrum": 5.0, + "Invar": 10.0, + "Solder": 10.0, + "Steel": 10.0 + } + }, + "ItemMiningDrillPneumatic": { + "tier": "TierOne", + "time": 20.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 4.0, + "Solder": 4.0, + "Steel": 6.0 + } + }, + "ItemMkIIToolbelt": { + "tier": "TierTwo", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Constantan": 5.0, + "Iron": 3.0 + } + }, + "ItemNVG": { + "tier": "TierOne", + "time": 45.0, + "energy": 2750.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Hastelloy": 10.0, + "Silicon": 5.0, + "Steel": 5.0 + } + }, + "ItemPickaxe": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Iron": 2.0 + } + }, + "ItemPlantSampler": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 5.0 + } + }, + "ItemRemoteDetonator": { + "tier": "TierOne", + "time": 4.5, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 1.0, + "Iron": 3.0 + } + }, + "ItemReusableFireExtinguisher": { + "tier": "TierOne", + "time": 20.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 5.0 + } + }, + "ItemRoadFlare": { + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemScrewdriver": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 2.0 + } + }, + "ItemSensorLenses": { + "tier": "TierTwo", + "time": 45.0, + "energy": 3500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Inconel": 5.0, + "Silicon": 5.0, + "Steel": 5.0 + } + }, + "ItemSensorProcessingUnitCelestialScanner": { + "tier": "TierTwo", + "time": 15.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 5.0, + "Silicon": 5.0 + } + }, + "ItemSensorProcessingUnitMesonScanner": { + "tier": "TierTwo", + "time": 15.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 5.0, + "Silicon": 5.0 + } + }, + "ItemSensorProcessingUnitOreScanner": { + "tier": "TierTwo", + "time": 15.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 5.0, + "Silicon": 5.0 + } + }, + "ItemSpaceHelmet": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Gold": 2.0 + } + }, + "ItemSpacepack": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 5.0 + } + }, + "ItemSprayCanBlack": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanBlue": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanBrown": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanGreen": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanGrey": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanKhaki": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanOrange": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanPink": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanPurple": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanRed": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanWhite": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayCanYellow": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + "ItemSprayGun": { + "tier": "TierTwo", + "time": 10.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 5.0, + "Silicon": 10.0, + "Steel": 10.0 + } + }, + "ItemTerrainManipulator": { + "tier": "TierOne", + "time": 15.0, + "energy": 600.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Iron": 5.0 + } + }, + "ItemToolBelt": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemWearLamp": { + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Gold": 2.0 + } + }, + "ItemWeldingTorch": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Iron": 3.0 + } + }, + "ItemWireCutters": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ItemWrench": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + "ToyLuna": { + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 1.0, + "Iron": 5.0 + } + }, + "UniformCommander": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + "UniformMarine": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 10.0 + } + }, + "UniformOrangeJumpSuit": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 10.0 + } + }, + "WeaponPistolEnergy": { + "tier": "TierTwo", + "time": 120.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Electrum": 20.0, + "Gold": 10.0, + "Solder": 10.0, + "Steel": 10.0 + } + }, + "WeaponRifleEnergy": { + "tier": "TierTwo", + "time": 240.0, + "energy": 10000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 6, + "reagents": { + "Constantan": 10.0, + "Electrum": 20.0, + "Gold": 10.0, + "Invar": 10.0, + "Solder": 10.0, + "Steel": 20.0 + } + } + } + }, + "memory": { + "instructions": { + "DeviceSetLock": { + "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 |", + "typ": "PrinterInstruction", + "value": 6 + }, + "EjectAllReagents": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 8 + }, + "EjectReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 7 + }, + "ExecuteRecipe": { + "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 |", + "typ": "PrinterInstruction", + "value": 2 + }, + "JumpIfNextInvalid": { + "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 |", + "typ": "PrinterInstruction", + "value": 4 + }, + "JumpToAddress": { + "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 |", + "typ": "PrinterInstruction", + "value": 5 + }, + "MissingRecipeReagent": { + "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 |", + "typ": "PrinterInstruction", + "value": 9 + }, + "StackPointer": { + "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 |", + "typ": "PrinterInstruction", + "value": 1 + }, + "WaitUntilNextValid": { + "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "typ": "PrinterInstruction", + "value": 3 + } + }, + "memory_access": "ReadWrite", + "memory_size": 64 + } + }, + "StructureTorpedoRack": { + "prefab": { + "prefab_name": "StructureTorpedoRack", + "prefab_hash": 1473807953, + "desc": "", + "name": "Torpedo Rack" + }, + "structure": { + "small_grid": true + }, + "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" + } + ] + }, + "StructureTraderWaypoint": { + "prefab": { + "prefab_name": "StructureTraderWaypoint", + "prefab_hash": 1570931620, + "desc": "", + "name": "Trader Waypoint" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureTransformer": { + "prefab": { + "prefab_name": "StructureTransformer", + "prefab_hash": -1423212473, + "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.", + "name": "Transformer (Large)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "Input" + }, + { + "typ": "Power", + "role": "Output" + } + ], + "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 + } + }, + "StructureTransformerMedium": { + "prefab": { + "prefab_name": "StructureTransformerMedium", + "prefab_hash": -1065725831, + "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.", + "name": "Transformer (Medium)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "Output" + } + ], + "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 + } + }, + "StructureTransformerMediumReversed": { + "prefab": { + "prefab_name": "StructureTransformerMediumReversed", + "prefab_hash": 833912764, + "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.", + "name": "Transformer Reversed (Medium)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "Input" + } + ], + "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 + } + }, + "StructureTransformerSmall": { + "prefab": { + "prefab_name": "StructureTransformerSmall", + "prefab_hash": -890946730, + "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.", + "name": "Transformer (Small)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "Input" + }, + { + "typ": "Power", + "role": "Output" + } + ], + "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 + } + }, + "StructureTransformerSmallReversed": { + "prefab": { + "prefab_name": "StructureTransformerSmallReversed", + "prefab_hash": 1054059374, + "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.", + "name": "Transformer Reversed (Small)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "Output" + }, + { + "typ": "PowerAndData", + "role": "Input" + } + ], + "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 + } + }, + "StructureTurbineGenerator": { + "prefab": { + "prefab_name": "StructureTurbineGenerator", + "prefab_hash": 1282191063, + "desc": "", + "name": "Turbine Generator" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PowerGeneration": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureTurboVolumePump": { + "prefab": { + "prefab_name": "StructureTurboVolumePump", + "prefab_hash": 1310794736, + "desc": "Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction.", + "name": "Turbo Volume Pump (Gas)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Right", + "1": "Left" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Input" + } + ], + "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 + } + }, + "StructureUnloader": { + "prefab": { + "prefab_name": "StructureUnloader", + "prefab_hash": 750118160, + "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.", + "name": "Unloader" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Mode": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "ClearMemory": "Write", + "ExportCount": "Read", + "ImportCount": "Read", + "Output": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Automatic", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "None" + }, + { + "name": "Export", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "None" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Chute", + "role": "Input" + } + ], + "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 + } + }, + "StructureUprightWindTurbine": { + "prefab": { + "prefab_name": "StructureUprightWindTurbine", + "prefab_hash": 1622183451, + "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.", + "name": "Upright Wind Turbine" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PowerGeneration": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "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 + } + }, + "StructureValve": { + "prefab": { + "prefab_name": "StructureValve", + "prefab_hash": -692036078, + "desc": "", + "name": "Valve" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "None" + }, + { + "typ": "Pipe", + "role": "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 + } + }, + "StructureVendingMachine": { + "prefab": { + "prefab_name": "StructureVendingMachine", + "prefab_hash": -443130773, + "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.", + "name": "Vending Machine" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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": {} + }, + "logic_types": { + "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", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "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" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "Chute", + "role": "Output" + }, + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureVolumePump": { + "prefab": { + "prefab_name": "StructureVolumePump", + "prefab_hash": -321403609, + "desc": "The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks.", + "name": "Volume Pump" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "Output" + }, + { + "typ": "Pipe", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureWallArch": { + "prefab": { + "prefab_name": "StructureWallArch", + "prefab_hash": -858143148, + "desc": "", + "name": "Wall (Arch)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallArchArrow": { + "prefab": { + "prefab_name": "StructureWallArchArrow", + "prefab_hash": 1649708822, + "desc": "", + "name": "Wall (Arch Arrow)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallArchCornerRound": { + "prefab": { + "prefab_name": "StructureWallArchCornerRound", + "prefab_hash": 1794588890, + "desc": "", + "name": "Wall (Arch Corner Round)" + }, + "structure": { + "small_grid": true + } + }, + "StructureWallArchCornerSquare": { + "prefab": { + "prefab_name": "StructureWallArchCornerSquare", + "prefab_hash": -1963016580, + "desc": "", + "name": "Wall (Arch Corner Square)" + }, + "structure": { + "small_grid": true + } + }, + "StructureWallArchCornerTriangle": { + "prefab": { + "prefab_name": "StructureWallArchCornerTriangle", + "prefab_hash": 1281911841, + "desc": "", + "name": "Wall (Arch Corner Triangle)" + }, + "structure": { + "small_grid": true + } + }, + "StructureWallArchPlating": { + "prefab": { + "prefab_name": "StructureWallArchPlating", + "prefab_hash": 1182510648, + "desc": "", + "name": "Wall (Arch Plating)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallArchTwoTone": { + "prefab": { + "prefab_name": "StructureWallArchTwoTone", + "prefab_hash": 782529714, + "desc": "", + "name": "Wall (Arch Two Tone)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallCooler": { + "prefab": { + "prefab_name": "StructureWallCooler", + "prefab_hash": -739292323, + "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.", + "name": "Wall Cooler" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "Pipe", + "role": "None" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureWallFlat": { + "prefab": { + "prefab_name": "StructureWallFlat", + "prefab_hash": 1635864154, + "desc": "", + "name": "Wall (Flat)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallFlatCornerRound": { + "prefab": { + "prefab_name": "StructureWallFlatCornerRound", + "prefab_hash": 898708250, + "desc": "", + "name": "Wall (Flat Corner Round)" + }, + "structure": { + "small_grid": true + } + }, + "StructureWallFlatCornerSquare": { + "prefab": { + "prefab_name": "StructureWallFlatCornerSquare", + "prefab_hash": 298130111, + "desc": "", + "name": "Wall (Flat Corner Square)" + }, + "structure": { + "small_grid": true + } + }, + "StructureWallFlatCornerTriangle": { + "prefab": { + "prefab_name": "StructureWallFlatCornerTriangle", + "prefab_hash": 2097419366, + "desc": "", + "name": "Wall (Flat Corner Triangle)" + }, + "structure": { + "small_grid": true + } + }, + "StructureWallFlatCornerTriangleFlat": { + "prefab": { + "prefab_name": "StructureWallFlatCornerTriangleFlat", + "prefab_hash": -1161662836, + "desc": "", + "name": "Wall (Flat Corner Triangle Flat)" + }, + "structure": { + "small_grid": true + } + }, + "StructureWallGeometryCorner": { + "prefab": { + "prefab_name": "StructureWallGeometryCorner", + "prefab_hash": 1979212240, + "desc": "", + "name": "Wall (Geometry Corner)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallGeometryStreight": { + "prefab": { + "prefab_name": "StructureWallGeometryStreight", + "prefab_hash": 1049735537, + "desc": "", + "name": "Wall (Geometry Straight)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallGeometryT": { + "prefab": { + "prefab_name": "StructureWallGeometryT", + "prefab_hash": 1602758612, + "desc": "", + "name": "Wall (Geometry T)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallGeometryTMirrored": { + "prefab": { + "prefab_name": "StructureWallGeometryTMirrored", + "prefab_hash": -1427845483, + "desc": "", + "name": "Wall (Geometry T Mirrored)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallHeater": { + "prefab": { + "prefab_name": "StructureWallHeater", + "prefab_hash": 24258244, + "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.", + "name": "Wall Heater" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureWallIron": { + "prefab": { + "prefab_name": "StructureWallIron", + "prefab_hash": 1287324802, + "desc": "", + "name": "Iron Wall (Type 1)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallIron02": { + "prefab": { + "prefab_name": "StructureWallIron02", + "prefab_hash": 1485834215, + "desc": "", + "name": "Iron Wall (Type 2)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallIron03": { + "prefab": { + "prefab_name": "StructureWallIron03", + "prefab_hash": 798439281, + "desc": "", + "name": "Iron Wall (Type 3)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallIron04": { + "prefab": { + "prefab_name": "StructureWallIron04", + "prefab_hash": -1309433134, + "desc": "", + "name": "Iron Wall (Type 4)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallLargePanel": { + "prefab": { + "prefab_name": "StructureWallLargePanel", + "prefab_hash": 1492930217, + "desc": "", + "name": "Wall (Large Panel)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallLargePanelArrow": { + "prefab": { + "prefab_name": "StructureWallLargePanelArrow", + "prefab_hash": -776581573, + "desc": "", + "name": "Wall (Large Panel Arrow)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallLight": { + "prefab": { + "prefab_name": "StructureWallLight", + "prefab_hash": -1860064656, + "desc": "", + "name": "Wall Light" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureWallLightBattery": { + "prefab": { + "prefab_name": "StructureWallLightBattery", + "prefab_hash": -1306415132, + "desc": "", + "name": "Wall Light (Battery)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ], + "device": { + "connection_list": [ + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureWallPaddedArch": { + "prefab": { + "prefab_name": "StructureWallPaddedArch", + "prefab_hash": 1590330637, + "desc": "", + "name": "Wall (Padded Arch)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallPaddedArchCorner": { + "prefab": { + "prefab_name": "StructureWallPaddedArchCorner", + "prefab_hash": -1126688298, + "desc": "", + "name": "Wall (Padded Arch Corner)" + }, + "structure": { + "small_grid": true + } + }, + "StructureWallPaddedArchLightFittingTop": { + "prefab": { + "prefab_name": "StructureWallPaddedArchLightFittingTop", + "prefab_hash": 1171987947, + "desc": "", + "name": "Wall (Padded Arch Light Fitting Top)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallPaddedArchLightsFittings": { + "prefab": { + "prefab_name": "StructureWallPaddedArchLightsFittings", + "prefab_hash": -1546743960, + "desc": "", + "name": "Wall (Padded Arch Lights Fittings)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallPaddedCorner": { + "prefab": { + "prefab_name": "StructureWallPaddedCorner", + "prefab_hash": -155945899, + "desc": "", + "name": "Wall (Padded Corner)" + }, + "structure": { + "small_grid": true + } + }, + "StructureWallPaddedCornerThin": { + "prefab": { + "prefab_name": "StructureWallPaddedCornerThin", + "prefab_hash": 1183203913, + "desc": "", + "name": "Wall (Padded Corner Thin)" + }, + "structure": { + "small_grid": true + } + }, + "StructureWallPaddedNoBorder": { + "prefab": { + "prefab_name": "StructureWallPaddedNoBorder", + "prefab_hash": 8846501, + "desc": "", + "name": "Wall (Padded No Border)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallPaddedNoBorderCorner": { + "prefab": { + "prefab_name": "StructureWallPaddedNoBorderCorner", + "prefab_hash": 179694804, + "desc": "", + "name": "Wall (Padded No Border Corner)" + }, + "structure": { + "small_grid": true + } + }, + "StructureWallPaddedThinNoBorder": { + "prefab": { + "prefab_name": "StructureWallPaddedThinNoBorder", + "prefab_hash": -1611559100, + "desc": "", + "name": "Wall (Padded Thin No Border)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallPaddedThinNoBorderCorner": { + "prefab": { + "prefab_name": "StructureWallPaddedThinNoBorderCorner", + "prefab_hash": 1769527556, + "desc": "", + "name": "Wall (Padded Thin No Border Corner)" + }, + "structure": { + "small_grid": true + } + }, + "StructureWallPaddedWindow": { + "prefab": { + "prefab_name": "StructureWallPaddedWindow", + "prefab_hash": 2087628940, + "desc": "", + "name": "Wall (Padded Window)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallPaddedWindowThin": { + "prefab": { + "prefab_name": "StructureWallPaddedWindowThin", + "prefab_hash": -37302931, + "desc": "", + "name": "Wall (Padded Window Thin)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallPadding": { + "prefab": { + "prefab_name": "StructureWallPadding", + "prefab_hash": 635995024, + "desc": "", + "name": "Wall (Padding)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallPaddingArchVent": { + "prefab": { + "prefab_name": "StructureWallPaddingArchVent", + "prefab_hash": -1243329828, + "desc": "", + "name": "Wall (Padding Arch Vent)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallPaddingLightFitting": { + "prefab": { + "prefab_name": "StructureWallPaddingLightFitting", + "prefab_hash": 2024882687, + "desc": "", + "name": "Wall (Padding Light Fitting)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallPaddingThin": { + "prefab": { + "prefab_name": "StructureWallPaddingThin", + "prefab_hash": -1102403554, + "desc": "", + "name": "Wall (Padding Thin)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallPlating": { + "prefab": { + "prefab_name": "StructureWallPlating", + "prefab_hash": 26167457, + "desc": "", + "name": "Wall (Plating)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallSmallPanelsAndHatch": { + "prefab": { + "prefab_name": "StructureWallSmallPanelsAndHatch", + "prefab_hash": 619828719, + "desc": "", + "name": "Wall (Small Panels And Hatch)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallSmallPanelsArrow": { + "prefab": { + "prefab_name": "StructureWallSmallPanelsArrow", + "prefab_hash": -639306697, + "desc": "", + "name": "Wall (Small Panels Arrow)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallSmallPanelsMonoChrome": { + "prefab": { + "prefab_name": "StructureWallSmallPanelsMonoChrome", + "prefab_hash": 386820253, + "desc": "", + "name": "Wall (Small Panels Mono Chrome)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallSmallPanelsOpen": { + "prefab": { + "prefab_name": "StructureWallSmallPanelsOpen", + "prefab_hash": -1407480603, + "desc": "", + "name": "Wall (Small Panels Open)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallSmallPanelsTwoTone": { + "prefab": { + "prefab_name": "StructureWallSmallPanelsTwoTone", + "prefab_hash": 1709994581, + "desc": "", + "name": "Wall (Small Panels Two Tone)" + }, + "structure": { + "small_grid": false + } + }, + "StructureWallVent": { + "prefab": { + "prefab_name": "StructureWallVent", + "prefab_hash": -1177469307, + "desc": "Used to mix atmospheres passively between two walls.", + "name": "Wall Vent" + }, + "structure": { + "small_grid": true + } + }, + "StructureWaterBottleFiller": { + "prefab": { + "prefab_name": "StructureWaterBottleFiller", + "prefab_hash": -1178961954, + "desc": "", + "name": "Water Bottle Filler" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Error": "Read", + "Activate": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Bottle Slot", + "typ": "LiquidBottle" + }, + { + "name": "Bottle Slot", + "typ": "LiquidBottle" + } + ], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "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 + } + }, + "StructureWaterBottleFillerBottom": { + "prefab": { + "prefab_name": "StructureWaterBottleFillerBottom", + "prefab_hash": 1433754995, + "desc": "", + "name": "Water Bottle Filler Bottom" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Error": "Read", + "Activate": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Bottle Slot", + "typ": "LiquidBottle" + }, + { + "name": "Bottle Slot", + "typ": "LiquidBottle" + } + ], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + } + ], + "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 + } + }, + "StructureWaterBottleFillerPowered": { + "prefab": { + "prefab_name": "StructureWaterBottleFillerPowered", + "prefab_hash": -756587791, + "desc": "", + "name": "Waterbottle Filler" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Bottle Slot", + "typ": "LiquidBottle" + }, + { + "name": "Bottle Slot", + "typ": "LiquidBottle" + } + ], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureWaterBottleFillerPoweredBottom": { + "prefab": { + "prefab_name": "StructureWaterBottleFillerPoweredBottom", + "prefab_hash": 1986658780, + "desc": "", + "name": "Waterbottle Filler" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "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" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Bottle Slot", + "typ": "LiquidBottle" + }, + { + "name": "Bottle Slot", + "typ": "LiquidBottle" + } + ], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "None" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureWaterDigitalValve": { + "prefab": { + "prefab_name": "StructureWaterDigitalValve", + "prefab_hash": -517628750, + "desc": "", + "name": "Liquid Digital Valve" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureWaterPipeMeter": { + "prefab": { + "prefab_name": "StructureWaterPipeMeter", + "prefab_hash": 433184168, + "desc": "", + "name": "Liquid Pipe Meter" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [], + "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 + } + }, + "StructureWaterPurifier": { + "prefab": { + "prefab_name": "StructureWaterPurifier", + "prefab_hash": 887383294, + "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.", + "name": "Water Purifier" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "ClearMemory": "Write", + "ImportCount": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Import", + "typ": "Ore" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + }, + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Chute", + "role": "Input" + } + ], + "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 + } + }, + "StructureWaterWallCooler": { + "prefab": { + "prefab_name": "StructureWaterWallCooler", + "prefab_hash": -1369060582, + "desc": "", + "name": "Liquid Wall Cooler" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Lock": "ReadWrite", + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "", + "typ": "DataDisk" + } + ], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "None" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureWeatherStation": { + "prefab": { + "prefab_name": "StructureWeatherStation", + "prefab_hash": 1997212478, + "desc": "0.NoStorm\n1.StormIncoming\n2.InStorm", + "name": "Weather Station" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Mode": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "NextWeatherEventTime": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "NoStorm", + "1": "StormIncoming", + "2": "InStorm" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureWindTurbine": { + "prefab": { + "prefab_name": "StructureWindTurbine", + "prefab_hash": -2082355173, + "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.", + "name": "Wind Turbine" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "PowerGeneration": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Power", + "role": "None" + }, + { + "typ": "Data", + "role": "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 + } + }, + "StructureWindowShutter": { + "prefab": { + "prefab_name": "StructureWindowShutter", + "prefab_hash": 2056377335, + "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.", + "name": "Window Shutter" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Error": "Read", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Operate", + "1": "Logic" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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": true, + "has_reagents": false + } + }, + "ToolPrinterMod": { + "prefab": { + "prefab_name": "ToolPrinterMod", + "prefab_hash": 1700018136, + "desc": "Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", + "name": "Tool Printer Mod" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "ToyLuna": { + "prefab": { + "prefab_name": "ToyLuna", + "prefab_hash": 94730034, + "desc": "", + "name": "Toy Luna" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + } + }, + "UniformCommander": { + "prefab": { + "prefab_name": "UniformCommander", + "prefab_hash": -2083426457, + "desc": "", + "name": "Uniform Commander" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Uniform", + "sorting_class": "Clothing" + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "Access Card", + "typ": "AccessCard" + }, + { + "name": "Access Card", + "typ": "AccessCard" + }, + { + "name": "Credit Card", + "typ": "CreditCard" + } + ] + }, + "UniformMarine": { + "prefab": { + "prefab_name": "UniformMarine", + "prefab_hash": -48342840, + "desc": "", + "name": "Marine Uniform" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Uniform", + "sorting_class": "Clothing" + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "Access Card", + "typ": "AccessCard" + }, + { + "name": "Credit Card", + "typ": "CreditCard" + } + ] + }, + "UniformOrangeJumpSuit": { + "prefab": { + "prefab_name": "UniformOrangeJumpSuit", + "prefab_hash": 810053150, + "desc": "", + "name": "Jump Suit (Orange)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Uniform", + "sorting_class": "Clothing" + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "Access Card", + "typ": "AccessCard" + }, + { + "name": "Credit Card", + "typ": "CreditCard" + } + ] + }, + "WeaponEnergy": { + "prefab": { + "prefab_name": "WeaponEnergy", + "prefab_hash": 789494694, + "desc": "", + "name": "Weapon Energy" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "WeaponPistolEnergy": { + "prefab": { + "prefab_name": "WeaponPistolEnergy", + "prefab_hash": -385323479, + "desc": "0.Stun\n1.Kill", + "name": "Energy Pistol" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Stun", + "1": "Kill" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "WeaponRifleEnergy": { + "prefab": { + "prefab_name": "WeaponRifleEnergy", + "prefab_hash": 1154745374, + "desc": "0.Stun\n1.Kill", + "name": "Energy Rifle" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Tools" + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Charge": "Read", + "ChargeRatio": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "ReferenceId": "Read" + }, + "modes": { + "0": "Stun", + "1": "Kill" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Battery", + "typ": "Battery" + } + ] + }, + "WeaponTorpedo": { + "prefab": { + "prefab_name": "WeaponTorpedo", + "prefab_hash": -1102977898, + "desc": "", + "name": "Torpedo" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "Torpedo", + "sorting_class": "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 + } + }, + "Cocoa": { + "Hash": 678781198, + "Unit": "g", + "Sources": { + "ItemCocoaPowder": 1.0, + "ItemCocoaTree": 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 + } + }, + "Sugar": { + "Hash": 1778746875, + "Unit": "g", + "Sources": { + "ItemSugar": 10.0, + "ItemSugarCane": 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 + } + } + }, + "enums": { + "scriptEnums": { + "LogicBatchMethod": { + "enumName": "LogicBatchMethod", + "values": { + "Average": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Maximum": { + "value": 3, + "deprecated": false, + "description": "" + }, + "Minimum": { + "value": 2, + "deprecated": false, + "description": "" + }, + "Sum": { + "value": 1, + "deprecated": false, + "description": "" + } + } + }, + "LogicReagentMode": { + "enumName": "LogicReagentMode", + "values": { + "Contents": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Recipe": { + "value": 2, + "deprecated": false, + "description": "" + }, + "Required": { + "value": 1, + "deprecated": false, + "description": "" + }, + "TotalContents": { + "value": 3, + "deprecated": false, + "description": "" + } + } + }, + "LogicSlotType": { + "enumName": "LogicSlotType", + "values": { + "Charge": { + "value": 10, + "deprecated": false, + "description": "returns current energy charge the slot occupant is holding" + }, + "ChargeRatio": { + "value": 11, + "deprecated": false, + "description": "returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum" + }, + "Class": { + "value": 12, + "deprecated": false, + "description": "returns integer representing the class of object" + }, + "Damage": { + "value": 4, + "deprecated": false, + "description": "returns the damage state of the item in the slot" + }, + "Efficiency": { + "value": 5, + "deprecated": false, + "description": "returns the growth efficiency of the plant in the slot" + }, + "FilterType": { + "value": 25, + "deprecated": false, + "description": "No description available" + }, + "Growth": { + "value": 7, + "deprecated": false, + "description": "returns the current growth state of the plant in the slot" + }, + "Health": { + "value": 6, + "deprecated": false, + "description": "returns the health of the plant in the slot" + }, + "LineNumber": { + "value": 19, + "deprecated": false, + "description": "The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution" + }, + "Lock": { + "value": 23, + "deprecated": false, + "description": "No description available" + }, + "Mature": { + "value": 16, + "deprecated": false, + "description": "returns 1 if the plant in this slot is mature, 0 when it isn't" + }, + "MaxQuantity": { + "value": 15, + "deprecated": false, + "description": "returns the max stack size of the item in the slot" + }, + "None": { + "value": 0, + "deprecated": false, + "description": "No description" + }, + "OccupantHash": { + "value": 2, + "deprecated": false, + "description": "returns the has of the current occupant, the unique identifier of the thing" + }, + "Occupied": { + "value": 1, + "deprecated": false, + "description": "returns 0 when slot is not occupied, 1 when it is" + }, + "On": { + "value": 22, + "deprecated": false, + "description": "No description available" + }, + "Open": { + "value": 21, + "deprecated": false, + "description": "No description available" + }, + "PrefabHash": { + "value": 17, + "deprecated": false, + "description": "returns the hash of the structure in the slot" + }, + "Pressure": { + "value": 8, + "deprecated": false, + "description": "returns pressure of the slot occupants internal atmosphere" + }, + "PressureAir": { + "value": 14, + "deprecated": false, + "description": "returns pressure in the air tank of the jetpack in this slot" + }, + "PressureWaste": { + "value": 13, + "deprecated": false, + "description": "returns pressure in the waste tank of the jetpack in this slot" + }, + "Quantity": { + "value": 3, + "deprecated": false, + "description": "returns the current quantity, such as stack size, of the item in the slot" + }, + "ReferenceId": { + "value": 26, + "deprecated": false, + "description": "Unique Reference Identifier for this object" + }, + "Seeding": { + "value": 18, + "deprecated": false, + "description": "Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not." + }, + "SortingClass": { + "value": 24, + "deprecated": false, + "description": "No description available" + }, + "Temperature": { + "value": 9, + "deprecated": false, + "description": "returns temperature of the slot occupants internal atmosphere" + }, + "Volume": { + "value": 20, + "deprecated": false, + "description": "No description available" + } + } + }, + "LogicType": { + "enumName": "LogicType", + "values": { + "Acceleration": { + "value": 216, + "deprecated": false, + "description": "Change in velocity. Rockets that are deccelerating when landing will show this as negative value." + }, + "Activate": { + "value": 9, + "deprecated": false, + "description": "1 if device is activated (usually means running), otherwise 0" + }, + "AirRelease": { + "value": 75, + "deprecated": false, + "description": "The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On" + }, + "AlignmentError": { + "value": 243, + "deprecated": false, + "description": "The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target." + }, + "Apex": { + "value": 238, + "deprecated": false, + "description": "The lowest altitude that the rocket will reach before it starts travelling upwards again." + }, + "AutoLand": { + "value": 226, + "deprecated": false, + "description": "Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing." + }, + "AutoShutOff": { + "value": 218, + "deprecated": false, + "description": "Turns off all devices in the rocket upon reaching destination" + }, + "BestContactFilter": { + "value": 267, + "deprecated": false, + "description": "Filters the satellite's auto selection of targets to a single reference ID." + }, + "Bpm": { + "value": 103, + "deprecated": false, + "description": "Bpm" + }, + "BurnTimeRemaining": { + "value": 225, + "deprecated": false, + "description": "Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage." + }, + "CelestialHash": { + "value": 242, + "deprecated": false, + "description": "The current hash of the targeted celestial object." + }, + "CelestialParentHash": { + "value": 250, + "deprecated": false, + "description": "The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial." + }, + "Channel0": { + "value": 165, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel1": { + "value": 166, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel2": { + "value": 167, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel3": { + "value": 168, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel4": { + "value": 169, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel5": { + "value": 170, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel6": { + "value": 171, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel7": { + "value": 172, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Charge": { + "value": 11, + "deprecated": false, + "description": "The current charge the device has" + }, + "Chart": { + "value": 256, + "deprecated": false, + "description": "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." + }, + "ChartedNavPoints": { + "value": 259, + "deprecated": false, + "description": "The number of charted NavPoints at the rocket's target Space Map Location." + }, + "ClearMemory": { + "value": 62, + "deprecated": false, + "description": "When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned" + }, + "CollectableGoods": { + "value": 101, + "deprecated": false, + "description": "Gets the cost of fuel to return the rocket to your current world." + }, + "Color": { + "value": 38, + "deprecated": false, + "description": "\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 " + }, + "Combustion": { + "value": 98, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not." + }, + "CombustionInput": { + "value": 146, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not." + }, + "CombustionInput2": { + "value": 147, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not." + }, + "CombustionLimiter": { + "value": 153, + "deprecated": false, + "description": "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": { + "value": 148, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not." + }, + "CombustionOutput2": { + "value": 149, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not." + }, + "CompletionRatio": { + "value": 61, + "deprecated": false, + "description": "How complete the current production is for this device, between 0 and 1" + }, + "ContactTypeId": { + "value": 198, + "deprecated": false, + "description": "The type id of the contact." + }, + "CurrentCode": { + "value": 261, + "deprecated": false, + "description": "The Space Map Address of the rockets current Space Map Location" + }, + "CurrentResearchPodType": { + "value": 93, + "deprecated": false, + "description": "" + }, + "Density": { + "value": 262, + "deprecated": false, + "description": "The density of the rocket's target site's mine-able deposit." + }, + "DestinationCode": { + "value": 215, + "deprecated": false, + "description": "The Space Map Address of the rockets target Space Map Location" + }, + "Discover": { + "value": 255, + "deprecated": false, + "description": "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." + }, + "DistanceAu": { + "value": 244, + "deprecated": false, + "description": "The current distance to the celestial object, measured in astronomical units." + }, + "DistanceKm": { + "value": 249, + "deprecated": false, + "description": "The current distance to the celestial object, measured in kilometers." + }, + "DrillCondition": { + "value": 240, + "deprecated": false, + "description": "The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1." + }, + "DryMass": { + "value": 220, + "deprecated": false, + "description": "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": { + "value": 247, + "deprecated": false, + "description": "A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)." + }, + "ElevatorLevel": { + "value": 40, + "deprecated": false, + "description": "Level the elevator is currently at" + }, + "ElevatorSpeed": { + "value": 39, + "deprecated": false, + "description": "Current speed of the elevator" + }, + "EntityState": { + "value": 239, + "deprecated": false, + "description": "The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer." + }, + "EnvironmentEfficiency": { + "value": 104, + "deprecated": false, + "description": "The Environment Efficiency reported by the machine, as a float between 0 and 1" + }, + "Error": { + "value": 4, + "deprecated": false, + "description": "1 if device is in error state, otherwise 0" + }, + "ExhaustVelocity": { + "value": 235, + "deprecated": false, + "description": "The velocity of the exhaust gas in m/s" + }, + "ExportCount": { + "value": 63, + "deprecated": false, + "description": "How many items exported since last ClearMemory" + }, + "ExportQuantity": { + "value": 31, + "deprecated": true, + "description": "Total quantity of items exported by the device" + }, + "ExportSlotHash": { + "value": 42, + "deprecated": true, + "description": "DEPRECATED" + }, + "ExportSlotOccupant": { + "value": 32, + "deprecated": true, + "description": "DEPRECATED" + }, + "Filtration": { + "value": 74, + "deprecated": false, + "description": "The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On" + }, + "FlightControlRule": { + "value": 236, + "deprecated": false, + "description": "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." + }, + "Flush": { + "value": 174, + "deprecated": false, + "description": "Set to 1 to activate the flush function on the device" + }, + "ForceWrite": { + "value": 85, + "deprecated": false, + "description": "Forces Logic Writer devices to rewrite value" + }, + "ForwardX": { + "value": 227, + "deprecated": false, + "description": "The direction the entity is facing expressed as a normalized vector" + }, + "ForwardY": { + "value": 228, + "deprecated": false, + "description": "The direction the entity is facing expressed as a normalized vector" + }, + "ForwardZ": { + "value": 229, + "deprecated": false, + "description": "The direction the entity is facing expressed as a normalized vector" + }, + "Fuel": { + "value": 99, + "deprecated": false, + "description": "Gets the cost of fuel to return the rocket to your current world." + }, + "Harvest": { + "value": 69, + "deprecated": false, + "description": "Performs the harvesting action for any plant based machinery" + }, + "Horizontal": { + "value": 20, + "deprecated": false, + "description": "Horizontal setting of the device" + }, + "HorizontalRatio": { + "value": 34, + "deprecated": false, + "description": "Radio of horizontal setting for device" + }, + "Idle": { + "value": 37, + "deprecated": false, + "description": "Returns 1 if the device is currently idle, otherwise 0" + }, + "ImportCount": { + "value": 64, + "deprecated": false, + "description": "How many items imported since last ClearMemory" + }, + "ImportQuantity": { + "value": 29, + "deprecated": true, + "description": "Total quantity of items imported by the device" + }, + "ImportSlotHash": { + "value": 43, + "deprecated": true, + "description": "DEPRECATED" + }, + "ImportSlotOccupant": { + "value": 30, + "deprecated": true, + "description": "DEPRECATED" + }, + "Inclination": { + "value": 246, + "deprecated": false, + "description": "The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle." + }, + "Index": { + "value": 241, + "deprecated": false, + "description": "The current index for the device." + }, + "InterrogationProgress": { + "value": 157, + "deprecated": false, + "description": "Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1" + }, + "LineNumber": { + "value": 173, + "deprecated": false, + "description": "The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution" + }, + "Lock": { + "value": 10, + "deprecated": false, + "description": "1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values" + }, + "ManualResearchRequiredPod": { + "value": 94, + "deprecated": false, + "description": "Sets the pod type to search for a certain pod when breaking down a pods." + }, + "Mass": { + "value": 219, + "deprecated": false, + "description": "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": { + "value": 23, + "deprecated": false, + "description": "Maximum setting of the device" + }, + "MineablesInQueue": { + "value": 96, + "deprecated": false, + "description": "Returns the amount of mineables AIMEe has queued up to mine." + }, + "MineablesInVicinity": { + "value": 95, + "deprecated": false, + "description": "Returns the amount of potential mineables within an extended area around AIMEe." + }, + "MinedQuantity": { + "value": 266, + "deprecated": false, + "description": "The total number of resources that have been mined at the rocket's target Space Map Site." + }, + "MinimumWattsToContact": { + "value": 163, + "deprecated": false, + "description": "Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact" + }, + "Mode": { + "value": 3, + "deprecated": false, + "description": "Integer for mode state, different devices will have different mode states available to them" + }, + "NameHash": { + "value": 268, + "deprecated": false, + "description": "Provides the hash value for the name of the object as a 32 bit integer." + }, + "NavPoints": { + "value": 258, + "deprecated": false, + "description": "The number of NavPoints at the rocket's target Space Map Location." + }, + "NextWeatherEventTime": { + "value": 97, + "deprecated": false, + "description": "Returns in seconds when the next weather event is inbound." + }, + "None": { + "value": 0, + "deprecated": true, + "description": "No description" + }, + "On": { + "value": 28, + "deprecated": false, + "description": "The current state of the device, 0 for off, 1 for on" + }, + "Open": { + "value": 2, + "deprecated": false, + "description": "1 if device is open, otherwise 0" + }, + "OperationalTemperatureEfficiency": { + "value": 150, + "deprecated": false, + "description": "How the input pipe's temperature effects the machines efficiency" + }, + "OrbitPeriod": { + "value": 245, + "deprecated": false, + "description": "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." + }, + "Orientation": { + "value": 230, + "deprecated": false, + "description": "The orientation of the entity in degrees in a plane relative towards the north origin" + }, + "Output": { + "value": 70, + "deprecated": false, + "description": "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": { + "value": 234, + "deprecated": false, + "description": "The number of moles that passed through this device on the previous simulation tick" + }, + "Plant": { + "value": 68, + "deprecated": false, + "description": "Performs the planting action for any plant based machinery" + }, + "PlantEfficiency1": { + "value": 52, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantEfficiency2": { + "value": 53, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantEfficiency3": { + "value": 54, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantEfficiency4": { + "value": 55, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantGrowth1": { + "value": 48, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantGrowth2": { + "value": 49, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantGrowth3": { + "value": 50, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantGrowth4": { + "value": 51, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHash1": { + "value": 56, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHash2": { + "value": 57, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHash3": { + "value": 58, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHash4": { + "value": 59, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHealth1": { + "value": 44, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHealth2": { + "value": 45, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHealth3": { + "value": 46, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHealth4": { + "value": 47, + "deprecated": true, + "description": "DEPRECATED" + }, + "PositionX": { + "value": 76, + "deprecated": false, + "description": "The current position in X dimension in world coordinates" + }, + "PositionY": { + "value": 77, + "deprecated": false, + "description": "The current position in Y dimension in world coordinates" + }, + "PositionZ": { + "value": 78, + "deprecated": false, + "description": "The current position in Z dimension in world coordinates" + }, + "Power": { + "value": 1, + "deprecated": false, + "description": "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": { + "value": 26, + "deprecated": false, + "description": "How much energy the device or network is actually using" + }, + "PowerGeneration": { + "value": 65, + "deprecated": false, + "description": "Returns how much power is being generated" + }, + "PowerPotential": { + "value": 25, + "deprecated": false, + "description": "How much energy the device or network potentially provides" + }, + "PowerRequired": { + "value": 36, + "deprecated": false, + "description": "Power requested from the device and/or network" + }, + "PrefabHash": { + "value": 84, + "deprecated": false, + "description": "The hash of the structure" + }, + "Pressure": { + "value": 5, + "deprecated": false, + "description": "The current pressure reading of the device" + }, + "PressureEfficiency": { + "value": 152, + "deprecated": false, + "description": "How the pressure of the input pipe and waste pipe effect the machines efficiency" + }, + "PressureExternal": { + "value": 7, + "deprecated": false, + "description": "Setting for external pressure safety, in KPa" + }, + "PressureInput": { + "value": 106, + "deprecated": false, + "description": "The current pressure reading of the device's Input Network" + }, + "PressureInput2": { + "value": 116, + "deprecated": false, + "description": "The current pressure reading of the device's Input2 Network" + }, + "PressureInternal": { + "value": 8, + "deprecated": false, + "description": "Setting for internal pressure safety, in KPa" + }, + "PressureOutput": { + "value": 126, + "deprecated": false, + "description": "The current pressure reading of the device's Output Network" + }, + "PressureOutput2": { + "value": 136, + "deprecated": false, + "description": "The current pressure reading of the device's Output2 Network" + }, + "PressureSetting": { + "value": 71, + "deprecated": false, + "description": "The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa" + }, + "Progress": { + "value": 214, + "deprecated": false, + "description": "Progress of the rocket to the next node on the map expressed as a value between 0-1." + }, + "Quantity": { + "value": 27, + "deprecated": false, + "description": "Total quantity on the device" + }, + "Ratio": { + "value": 24, + "deprecated": false, + "description": "Context specific value depending on device, 0 to 1 based ratio" + }, + "RatioCarbonDioxide": { + "value": 15, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device atmosphere" + }, + "RatioCarbonDioxideInput": { + "value": 109, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device's input network" + }, + "RatioCarbonDioxideInput2": { + "value": 119, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device's Input2 network" + }, + "RatioCarbonDioxideOutput": { + "value": 129, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device's Output network" + }, + "RatioCarbonDioxideOutput2": { + "value": 139, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device's Output2 network" + }, + "RatioHydrogen": { + "value": 252, + "deprecated": false, + "description": "The ratio of Hydrogen in device's Atmopshere" + }, + "RatioLiquidCarbonDioxide": { + "value": 199, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's Atmosphere" + }, + "RatioLiquidCarbonDioxideInput": { + "value": 200, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's Input Atmosphere" + }, + "RatioLiquidCarbonDioxideInput2": { + "value": 201, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere" + }, + "RatioLiquidCarbonDioxideOutput": { + "value": 202, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere" + }, + "RatioLiquidCarbonDioxideOutput2": { + "value": 203, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere" + }, + "RatioLiquidHydrogen": { + "value": 253, + "deprecated": false, + "description": "The ratio of Liquid Hydrogen in device's Atmopshere" + }, + "RatioLiquidNitrogen": { + "value": 177, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device atmosphere" + }, + "RatioLiquidNitrogenInput": { + "value": 178, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device's input network" + }, + "RatioLiquidNitrogenInput2": { + "value": 179, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device's Input2 network" + }, + "RatioLiquidNitrogenOutput": { + "value": 180, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device's Output network" + }, + "RatioLiquidNitrogenOutput2": { + "value": 181, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device's Output2 network" + }, + "RatioLiquidNitrousOxide": { + "value": 209, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's Atmosphere" + }, + "RatioLiquidNitrousOxideInput": { + "value": 210, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's Input Atmosphere" + }, + "RatioLiquidNitrousOxideInput2": { + "value": 211, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere" + }, + "RatioLiquidNitrousOxideOutput": { + "value": 212, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere" + }, + "RatioLiquidNitrousOxideOutput2": { + "value": 213, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere" + }, + "RatioLiquidOxygen": { + "value": 183, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's Atmosphere" + }, + "RatioLiquidOxygenInput": { + "value": 184, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's Input Atmosphere" + }, + "RatioLiquidOxygenInput2": { + "value": 185, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's Input2 Atmosphere" + }, + "RatioLiquidOxygenOutput": { + "value": 186, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's device's Output Atmosphere" + }, + "RatioLiquidOxygenOutput2": { + "value": 187, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's Output2 Atmopshere" + }, + "RatioLiquidPollutant": { + "value": 204, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's Atmosphere" + }, + "RatioLiquidPollutantInput": { + "value": 205, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's Input Atmosphere" + }, + "RatioLiquidPollutantInput2": { + "value": 206, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's Input2 Atmosphere" + }, + "RatioLiquidPollutantOutput": { + "value": 207, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's device's Output Atmosphere" + }, + "RatioLiquidPollutantOutput2": { + "value": 208, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's Output2 Atmopshere" + }, + "RatioLiquidVolatiles": { + "value": 188, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's Atmosphere" + }, + "RatioLiquidVolatilesInput": { + "value": 189, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's Input Atmosphere" + }, + "RatioLiquidVolatilesInput2": { + "value": 190, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's Input2 Atmosphere" + }, + "RatioLiquidVolatilesOutput": { + "value": 191, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's device's Output Atmosphere" + }, + "RatioLiquidVolatilesOutput2": { + "value": 192, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's Output2 Atmopshere" + }, + "RatioNitrogen": { + "value": 16, + "deprecated": false, + "description": "The ratio of nitrogen in device atmosphere" + }, + "RatioNitrogenInput": { + "value": 110, + "deprecated": false, + "description": "The ratio of nitrogen in device's input network" + }, + "RatioNitrogenInput2": { + "value": 120, + "deprecated": false, + "description": "The ratio of nitrogen in device's Input2 network" + }, + "RatioNitrogenOutput": { + "value": 130, + "deprecated": false, + "description": "The ratio of nitrogen in device's Output network" + }, + "RatioNitrogenOutput2": { + "value": 140, + "deprecated": false, + "description": "The ratio of nitrogen in device's Output2 network" + }, + "RatioNitrousOxide": { + "value": 83, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device atmosphere" + }, + "RatioNitrousOxideInput": { + "value": 114, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device's input network" + }, + "RatioNitrousOxideInput2": { + "value": 124, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device's Input2 network" + }, + "RatioNitrousOxideOutput": { + "value": 134, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device's Output network" + }, + "RatioNitrousOxideOutput2": { + "value": 144, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device's Output2 network" + }, + "RatioOxygen": { + "value": 14, + "deprecated": false, + "description": "The ratio of oxygen in device atmosphere" + }, + "RatioOxygenInput": { + "value": 108, + "deprecated": false, + "description": "The ratio of oxygen in device's input network" + }, + "RatioOxygenInput2": { + "value": 118, + "deprecated": false, + "description": "The ratio of oxygen in device's Input2 network" + }, + "RatioOxygenOutput": { + "value": 128, + "deprecated": false, + "description": "The ratio of oxygen in device's Output network" + }, + "RatioOxygenOutput2": { + "value": 138, + "deprecated": false, + "description": "The ratio of oxygen in device's Output2 network" + }, + "RatioPollutant": { + "value": 17, + "deprecated": false, + "description": "The ratio of pollutant in device atmosphere" + }, + "RatioPollutantInput": { + "value": 111, + "deprecated": false, + "description": "The ratio of pollutant in device's input network" + }, + "RatioPollutantInput2": { + "value": 121, + "deprecated": false, + "description": "The ratio of pollutant in device's Input2 network" + }, + "RatioPollutantOutput": { + "value": 131, + "deprecated": false, + "description": "The ratio of pollutant in device's Output network" + }, + "RatioPollutantOutput2": { + "value": 141, + "deprecated": false, + "description": "The ratio of pollutant in device's Output2 network" + }, + "RatioPollutedWater": { + "value": 254, + "deprecated": false, + "description": "The ratio of polluted water in device atmosphere" + }, + "RatioSteam": { + "value": 193, + "deprecated": false, + "description": "The ratio of Steam in device's Atmosphere" + }, + "RatioSteamInput": { + "value": 194, + "deprecated": false, + "description": "The ratio of Steam in device's Input Atmosphere" + }, + "RatioSteamInput2": { + "value": 195, + "deprecated": false, + "description": "The ratio of Steam in device's Input2 Atmosphere" + }, + "RatioSteamOutput": { + "value": 196, + "deprecated": false, + "description": "The ratio of Steam in device's device's Output Atmosphere" + }, + "RatioSteamOutput2": { + "value": 197, + "deprecated": false, + "description": "The ratio of Steam in device's Output2 Atmopshere" + }, + "RatioVolatiles": { + "value": 18, + "deprecated": false, + "description": "The ratio of volatiles in device atmosphere" + }, + "RatioVolatilesInput": { + "value": 112, + "deprecated": false, + "description": "The ratio of volatiles in device's input network" + }, + "RatioVolatilesInput2": { + "value": 122, + "deprecated": false, + "description": "The ratio of volatiles in device's Input2 network" + }, + "RatioVolatilesOutput": { + "value": 132, + "deprecated": false, + "description": "The ratio of volatiles in device's Output network" + }, + "RatioVolatilesOutput2": { + "value": 142, + "deprecated": false, + "description": "The ratio of volatiles in device's Output2 network" + }, + "RatioWater": { + "value": 19, + "deprecated": false, + "description": "The ratio of water in device atmosphere" + }, + "RatioWaterInput": { + "value": 113, + "deprecated": false, + "description": "The ratio of water in device's input network" + }, + "RatioWaterInput2": { + "value": 123, + "deprecated": false, + "description": "The ratio of water in device's Input2 network" + }, + "RatioWaterOutput": { + "value": 133, + "deprecated": false, + "description": "The ratio of water in device's Output network" + }, + "RatioWaterOutput2": { + "value": 143, + "deprecated": false, + "description": "The ratio of water in device's Output2 network" + }, + "ReEntryAltitude": { + "value": 237, + "deprecated": false, + "description": "The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km" + }, + "Reagents": { + "value": 13, + "deprecated": false, + "description": "Total number of reagents recorded by the device" + }, + "RecipeHash": { + "value": 41, + "deprecated": false, + "description": "Current hash of the recipe the device is set to produce" + }, + "ReferenceId": { + "value": 217, + "deprecated": false, + "description": "Unique Reference Identifier for this object" + }, + "RequestHash": { + "value": 60, + "deprecated": false, + "description": "When set to the unique identifier, requests an item of the provided type from the device" + }, + "RequiredPower": { + "value": 33, + "deprecated": false, + "description": "Idle operating power quantity, does not necessarily include extra demand power" + }, + "ReturnFuelCost": { + "value": 100, + "deprecated": false, + "description": "Gets the fuel remaining in your rocket's fuel tank." + }, + "Richness": { + "value": 263, + "deprecated": false, + "description": "The richness of the rocket's target site's mine-able deposit." + }, + "Rpm": { + "value": 155, + "deprecated": false, + "description": "The number of revolutions per minute that the device's spinning mechanism is doing" + }, + "SemiMajorAxis": { + "value": 248, + "deprecated": false, + "description": "The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit." + }, + "Setting": { + "value": 12, + "deprecated": false, + "description": "A variable setting that can be read or written, depending on the device" + }, + "SettingInput": { + "value": 91, + "deprecated": false, + "description": "" + }, + "SettingOutput": { + "value": 92, + "deprecated": false, + "description": "" + }, + "SignalID": { + "value": 87, + "deprecated": false, + "description": "Returns the contact ID of the strongest signal from this Satellite" + }, + "SignalStrength": { + "value": 86, + "deprecated": false, + "description": "Returns the degree offset of the strongest contact" + }, + "Sites": { + "value": 260, + "deprecated": false, + "description": "The number of Sites that have been discovered at the rockets target Space Map location." + }, + "Size": { + "value": 264, + "deprecated": false, + "description": "The size of the rocket's target site's mine-able deposit." + }, + "SizeX": { + "value": 160, + "deprecated": false, + "description": "Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)" + }, + "SizeY": { + "value": 161, + "deprecated": false, + "description": "Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)" + }, + "SizeZ": { + "value": 162, + "deprecated": false, + "description": "Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)" + }, + "SolarAngle": { + "value": 22, + "deprecated": false, + "description": "Solar angle of the device" + }, + "SolarIrradiance": { + "value": 176, + "deprecated": false, + "description": "" + }, + "SoundAlert": { + "value": 175, + "deprecated": false, + "description": "Plays a sound alert on the devices speaker" + }, + "Stress": { + "value": 156, + "deprecated": false, + "description": "Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down" + }, + "Survey": { + "value": 257, + "deprecated": false, + "description": "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." + }, + "TargetPadIndex": { + "value": 158, + "deprecated": false, + "description": "The index of the trader landing pad on this devices data network that it will try to call a trader in to land" + }, + "TargetX": { + "value": 88, + "deprecated": false, + "description": "The target position in X dimension in world coordinates" + }, + "TargetY": { + "value": 89, + "deprecated": false, + "description": "The target position in Y dimension in world coordinates" + }, + "TargetZ": { + "value": 90, + "deprecated": false, + "description": "The target position in Z dimension in world coordinates" + }, + "Temperature": { + "value": 6, + "deprecated": false, + "description": "The current temperature reading of the device" + }, + "TemperatureDifferentialEfficiency": { + "value": 151, + "deprecated": false, + "description": "How the difference between the input pipe and waste pipe temperatures effect the machines efficiency" + }, + "TemperatureExternal": { + "value": 73, + "deprecated": false, + "description": "The temperature of the outside of the device, usually the world atmosphere surrounding it" + }, + "TemperatureInput": { + "value": 107, + "deprecated": false, + "description": "The current temperature reading of the device's Input Network" + }, + "TemperatureInput2": { + "value": 117, + "deprecated": false, + "description": "The current temperature reading of the device's Input2 Network" + }, + "TemperatureOutput": { + "value": 127, + "deprecated": false, + "description": "The current temperature reading of the device's Output Network" + }, + "TemperatureOutput2": { + "value": 137, + "deprecated": false, + "description": "The current temperature reading of the device's Output2 Network" + }, + "TemperatureSetting": { + "value": 72, + "deprecated": false, + "description": "The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)" + }, + "Throttle": { + "value": 154, + "deprecated": false, + "description": "Increases the rate at which the machine works (range: 0-100)" + }, + "Thrust": { + "value": 221, + "deprecated": false, + "description": "Total current thrust of all rocket engines on the rocket in Newtons." + }, + "ThrustToWeight": { + "value": 223, + "deprecated": false, + "description": "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": { + "value": 102, + "deprecated": false, + "description": "Time" + }, + "TimeToDestination": { + "value": 224, + "deprecated": false, + "description": "Estimated time in seconds until rocket arrives at target destination." + }, + "TotalMoles": { + "value": 66, + "deprecated": false, + "description": "Returns the total moles of the device" + }, + "TotalMolesInput": { + "value": 115, + "deprecated": false, + "description": "Returns the total moles of the device's Input Network" + }, + "TotalMolesInput2": { + "value": 125, + "deprecated": false, + "description": "Returns the total moles of the device's Input2 Network" + }, + "TotalMolesOutput": { + "value": 135, + "deprecated": false, + "description": "Returns the total moles of the device's Output Network" + }, + "TotalMolesOutput2": { + "value": 145, + "deprecated": false, + "description": "Returns the total moles of the device's Output2 Network" + }, + "TotalQuantity": { + "value": 265, + "deprecated": false, + "description": "The estimated total quantity of resources available to mine at the rocket's target Space Map Site." + }, + "TrueAnomaly": { + "value": 251, + "deprecated": false, + "description": "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)." + }, + "VelocityMagnitude": { + "value": 79, + "deprecated": false, + "description": "The current magnitude of the velocity vector" + }, + "VelocityRelativeX": { + "value": 80, + "deprecated": false, + "description": "The current velocity X relative to the forward vector of this" + }, + "VelocityRelativeY": { + "value": 81, + "deprecated": false, + "description": "The current velocity Y relative to the forward vector of this" + }, + "VelocityRelativeZ": { + "value": 82, + "deprecated": false, + "description": "The current velocity Z relative to the forward vector of this" + }, + "VelocityX": { + "value": 231, + "deprecated": false, + "description": "The world velocity of the entity in the X axis" + }, + "VelocityY": { + "value": 232, + "deprecated": false, + "description": "The world velocity of the entity in the Y axis" + }, + "VelocityZ": { + "value": 233, + "deprecated": false, + "description": "The world velocity of the entity in the Z axis" + }, + "Vertical": { + "value": 21, + "deprecated": false, + "description": "Vertical setting of the device" + }, + "VerticalRatio": { + "value": 35, + "deprecated": false, + "description": "Radio of vertical setting for device" + }, + "Volume": { + "value": 67, + "deprecated": false, + "description": "Returns the device atmosphere volume" + }, + "VolumeOfLiquid": { + "value": 182, + "deprecated": false, + "description": "The total volume of all liquids in Liters in the atmosphere" + }, + "WattsReachingContact": { + "value": 164, + "deprecated": false, + "description": "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": { + "value": 222, + "deprecated": false, + "description": "Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity." + }, + "WorkingGasEfficiency": { + "value": 105, + "deprecated": false, + "description": "The Working Gas Efficiency reported by the machine, as a float between 0 and 1" + } + } + } + }, + "basicEnums": { + "AirCon": { + "enumName": "AirConditioningMode", + "values": { + "Cold": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Hot": { + "value": 1, + "deprecated": false, + "description": "" + } + } + }, + "AirControl": { + "enumName": "AirControlMode", + "values": { + "Draught": { + "value": 4, + "deprecated": false, + "description": "" + }, + "None": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Offline": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Pressure": { + "value": 2, + "deprecated": false, + "description": "" + } + } + }, + "Color": { + "enumName": "ColorType", + "values": { + "Black": { + "value": 7, + "deprecated": false, + "description": "" + }, + "Blue": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Brown": { + "value": 8, + "deprecated": false, + "description": "" + }, + "Gray": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Green": { + "value": 2, + "deprecated": false, + "description": "" + }, + "Khaki": { + "value": 9, + "deprecated": false, + "description": "" + }, + "Orange": { + "value": 3, + "deprecated": false, + "description": "" + }, + "Pink": { + "value": 10, + "deprecated": false, + "description": "" + }, + "Purple": { + "value": 11, + "deprecated": false, + "description": "" + }, + "Red": { + "value": 4, + "deprecated": false, + "description": "" + }, + "White": { + "value": 6, + "deprecated": false, + "description": "" + }, + "Yellow": { + "value": 5, + "deprecated": false, + "description": "" + } + } + }, + "DaylightSensorMode": { + "enumName": "DaylightSensorMode", + "values": { + "Default": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Horizontal": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Vertical": { + "value": 2, + "deprecated": false, + "description": "" + } + } + }, + "ElevatorMode": { + "enumName": "ElevatorMode", + "values": { + "Downward": { + "value": 2, + "deprecated": false, + "description": "" + }, + "Stationary": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Upward": { + "value": 1, + "deprecated": false, + "description": "" + } + } + }, + "EntityState": { + "enumName": "EntityState", + "values": { + "Alive": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Dead": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Decay": { + "value": 3, + "deprecated": false, + "description": "" + }, + "Unconscious": { + "value": 2, + "deprecated": false, + "description": "" + } + } + }, + "GasType": { + "enumName": "GasType", + "values": { + "CarbonDioxide": { + "value": 4, + "deprecated": false, + "description": "" + }, + "Hydrogen": { + "value": 16384, + "deprecated": false, + "description": "" + }, + "LiquidCarbonDioxide": { + "value": 2048, + "deprecated": false, + "description": "" + }, + "LiquidHydrogen": { + "value": 32768, + "deprecated": false, + "description": "" + }, + "LiquidNitrogen": { + "value": 128, + "deprecated": false, + "description": "" + }, + "LiquidNitrousOxide": { + "value": 8192, + "deprecated": false, + "description": "" + }, + "LiquidOxygen": { + "value": 256, + "deprecated": false, + "description": "" + }, + "LiquidPollutant": { + "value": 4096, + "deprecated": false, + "description": "" + }, + "LiquidVolatiles": { + "value": 512, + "deprecated": false, + "description": "" + }, + "Nitrogen": { + "value": 2, + "deprecated": false, + "description": "" + }, + "NitrousOxide": { + "value": 64, + "deprecated": false, + "description": "" + }, + "Oxygen": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Pollutant": { + "value": 16, + "deprecated": false, + "description": "" + }, + "PollutedWater": { + "value": 65536, + "deprecated": false, + "description": "" + }, + "Steam": { + "value": 1024, + "deprecated": false, + "description": "" + }, + "Undefined": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Volatiles": { + "value": 8, + "deprecated": false, + "description": "" + }, + "Water": { + "value": 32, + "deprecated": false, + "description": "" + } + } + }, + "LogicSlotType": { + "enumName": "LogicSlotType", + "values": { + "Charge": { + "value": 10, + "deprecated": false, + "description": "returns current energy charge the slot occupant is holding" + }, + "ChargeRatio": { + "value": 11, + "deprecated": false, + "description": "returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum" + }, + "Class": { + "value": 12, + "deprecated": false, + "description": "returns integer representing the class of object" + }, + "Damage": { + "value": 4, + "deprecated": false, + "description": "returns the damage state of the item in the slot" + }, + "Efficiency": { + "value": 5, + "deprecated": false, + "description": "returns the growth efficiency of the plant in the slot" + }, + "FilterType": { + "value": 25, + "deprecated": false, + "description": "No description available" + }, + "Growth": { + "value": 7, + "deprecated": false, + "description": "returns the current growth state of the plant in the slot" + }, + "Health": { + "value": 6, + "deprecated": false, + "description": "returns the health of the plant in the slot" + }, + "LineNumber": { + "value": 19, + "deprecated": false, + "description": "The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution" + }, + "Lock": { + "value": 23, + "deprecated": false, + "description": "No description available" + }, + "Mature": { + "value": 16, + "deprecated": false, + "description": "returns 1 if the plant in this slot is mature, 0 when it isn't" + }, + "MaxQuantity": { + "value": 15, + "deprecated": false, + "description": "returns the max stack size of the item in the slot" + }, + "None": { + "value": 0, + "deprecated": false, + "description": "No description" + }, + "OccupantHash": { + "value": 2, + "deprecated": false, + "description": "returns the has of the current occupant, the unique identifier of the thing" + }, + "Occupied": { + "value": 1, + "deprecated": false, + "description": "returns 0 when slot is not occupied, 1 when it is" + }, + "On": { + "value": 22, + "deprecated": false, + "description": "No description available" + }, + "Open": { + "value": 21, + "deprecated": false, + "description": "No description available" + }, + "PrefabHash": { + "value": 17, + "deprecated": false, + "description": "returns the hash of the structure in the slot" + }, + "Pressure": { + "value": 8, + "deprecated": false, + "description": "returns pressure of the slot occupants internal atmosphere" + }, + "PressureAir": { + "value": 14, + "deprecated": false, + "description": "returns pressure in the air tank of the jetpack in this slot" + }, + "PressureWaste": { + "value": 13, + "deprecated": false, + "description": "returns pressure in the waste tank of the jetpack in this slot" + }, + "Quantity": { + "value": 3, + "deprecated": false, + "description": "returns the current quantity, such as stack size, of the item in the slot" + }, + "ReferenceId": { + "value": 26, + "deprecated": false, + "description": "Unique Reference Identifier for this object" + }, + "Seeding": { + "value": 18, + "deprecated": false, + "description": "Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not." + }, + "SortingClass": { + "value": 24, + "deprecated": false, + "description": "No description available" + }, + "Temperature": { + "value": 9, + "deprecated": false, + "description": "returns temperature of the slot occupants internal atmosphere" + }, + "Volume": { + "value": 20, + "deprecated": false, + "description": "No description available" + } + } + }, + "LogicType": { + "enumName": "LogicType", + "values": { + "Acceleration": { + "value": 216, + "deprecated": false, + "description": "Change in velocity. Rockets that are deccelerating when landing will show this as negative value." + }, + "Activate": { + "value": 9, + "deprecated": false, + "description": "1 if device is activated (usually means running), otherwise 0" + }, + "AirRelease": { + "value": 75, + "deprecated": false, + "description": "The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On" + }, + "AlignmentError": { + "value": 243, + "deprecated": false, + "description": "The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target." + }, + "Apex": { + "value": 238, + "deprecated": false, + "description": "The lowest altitude that the rocket will reach before it starts travelling upwards again." + }, + "AutoLand": { + "value": 226, + "deprecated": false, + "description": "Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing." + }, + "AutoShutOff": { + "value": 218, + "deprecated": false, + "description": "Turns off all devices in the rocket upon reaching destination" + }, + "BestContactFilter": { + "value": 267, + "deprecated": false, + "description": "Filters the satellite's auto selection of targets to a single reference ID." + }, + "Bpm": { + "value": 103, + "deprecated": false, + "description": "Bpm" + }, + "BurnTimeRemaining": { + "value": 225, + "deprecated": false, + "description": "Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage." + }, + "CelestialHash": { + "value": 242, + "deprecated": false, + "description": "The current hash of the targeted celestial object." + }, + "CelestialParentHash": { + "value": 250, + "deprecated": false, + "description": "The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial." + }, + "Channel0": { + "value": 165, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel1": { + "value": 166, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel2": { + "value": 167, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel3": { + "value": 168, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel4": { + "value": 169, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel5": { + "value": 170, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel6": { + "value": 171, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Channel7": { + "value": 172, + "deprecated": false, + "description": "Channel on a cable network which should be considered volatile" + }, + "Charge": { + "value": 11, + "deprecated": false, + "description": "The current charge the device has" + }, + "Chart": { + "value": 256, + "deprecated": false, + "description": "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." + }, + "ChartedNavPoints": { + "value": 259, + "deprecated": false, + "description": "The number of charted NavPoints at the rocket's target Space Map Location." + }, + "ClearMemory": { + "value": 62, + "deprecated": false, + "description": "When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned" + }, + "CollectableGoods": { + "value": 101, + "deprecated": false, + "description": "Gets the cost of fuel to return the rocket to your current world." + }, + "Color": { + "value": 38, + "deprecated": false, + "description": "\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 " + }, + "Combustion": { + "value": 98, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not." + }, + "CombustionInput": { + "value": 146, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not." + }, + "CombustionInput2": { + "value": 147, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not." + }, + "CombustionLimiter": { + "value": 153, + "deprecated": false, + "description": "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": { + "value": 148, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not." + }, + "CombustionOutput2": { + "value": 149, + "deprecated": false, + "description": "The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not." + }, + "CompletionRatio": { + "value": 61, + "deprecated": false, + "description": "How complete the current production is for this device, between 0 and 1" + }, + "ContactTypeId": { + "value": 198, + "deprecated": false, + "description": "The type id of the contact." + }, + "CurrentCode": { + "value": 261, + "deprecated": false, + "description": "The Space Map Address of the rockets current Space Map Location" + }, + "CurrentResearchPodType": { + "value": 93, + "deprecated": false, + "description": "" + }, + "Density": { + "value": 262, + "deprecated": false, + "description": "The density of the rocket's target site's mine-able deposit." + }, + "DestinationCode": { + "value": 215, + "deprecated": false, + "description": "The Space Map Address of the rockets target Space Map Location" + }, + "Discover": { + "value": 255, + "deprecated": false, + "description": "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." + }, + "DistanceAu": { + "value": 244, + "deprecated": false, + "description": "The current distance to the celestial object, measured in astronomical units." + }, + "DistanceKm": { + "value": 249, + "deprecated": false, + "description": "The current distance to the celestial object, measured in kilometers." + }, + "DrillCondition": { + "value": 240, + "deprecated": false, + "description": "The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1." + }, + "DryMass": { + "value": 220, + "deprecated": false, + "description": "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": { + "value": 247, + "deprecated": false, + "description": "A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory)." + }, + "ElevatorLevel": { + "value": 40, + "deprecated": false, + "description": "Level the elevator is currently at" + }, + "ElevatorSpeed": { + "value": 39, + "deprecated": false, + "description": "Current speed of the elevator" + }, + "EntityState": { + "value": 239, + "deprecated": false, + "description": "The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer." + }, + "EnvironmentEfficiency": { + "value": 104, + "deprecated": false, + "description": "The Environment Efficiency reported by the machine, as a float between 0 and 1" + }, + "Error": { + "value": 4, + "deprecated": false, + "description": "1 if device is in error state, otherwise 0" + }, + "ExhaustVelocity": { + "value": 235, + "deprecated": false, + "description": "The velocity of the exhaust gas in m/s" + }, + "ExportCount": { + "value": 63, + "deprecated": false, + "description": "How many items exported since last ClearMemory" + }, + "ExportQuantity": { + "value": 31, + "deprecated": true, + "description": "Total quantity of items exported by the device" + }, + "ExportSlotHash": { + "value": 42, + "deprecated": true, + "description": "DEPRECATED" + }, + "ExportSlotOccupant": { + "value": 32, + "deprecated": true, + "description": "DEPRECATED" + }, + "Filtration": { + "value": 74, + "deprecated": false, + "description": "The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On" + }, + "FlightControlRule": { + "value": 236, + "deprecated": false, + "description": "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." + }, + "Flush": { + "value": 174, + "deprecated": false, + "description": "Set to 1 to activate the flush function on the device" + }, + "ForceWrite": { + "value": 85, + "deprecated": false, + "description": "Forces Logic Writer devices to rewrite value" + }, + "ForwardX": { + "value": 227, + "deprecated": false, + "description": "The direction the entity is facing expressed as a normalized vector" + }, + "ForwardY": { + "value": 228, + "deprecated": false, + "description": "The direction the entity is facing expressed as a normalized vector" + }, + "ForwardZ": { + "value": 229, + "deprecated": false, + "description": "The direction the entity is facing expressed as a normalized vector" + }, + "Fuel": { + "value": 99, + "deprecated": false, + "description": "Gets the cost of fuel to return the rocket to your current world." + }, + "Harvest": { + "value": 69, + "deprecated": false, + "description": "Performs the harvesting action for any plant based machinery" + }, + "Horizontal": { + "value": 20, + "deprecated": false, + "description": "Horizontal setting of the device" + }, + "HorizontalRatio": { + "value": 34, + "deprecated": false, + "description": "Radio of horizontal setting for device" + }, + "Idle": { + "value": 37, + "deprecated": false, + "description": "Returns 1 if the device is currently idle, otherwise 0" + }, + "ImportCount": { + "value": 64, + "deprecated": false, + "description": "How many items imported since last ClearMemory" + }, + "ImportQuantity": { + "value": 29, + "deprecated": true, + "description": "Total quantity of items imported by the device" + }, + "ImportSlotHash": { + "value": 43, + "deprecated": true, + "description": "DEPRECATED" + }, + "ImportSlotOccupant": { + "value": 30, + "deprecated": true, + "description": "DEPRECATED" + }, + "Inclination": { + "value": 246, + "deprecated": false, + "description": "The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle." + }, + "Index": { + "value": 241, + "deprecated": false, + "description": "The current index for the device." + }, + "InterrogationProgress": { + "value": 157, + "deprecated": false, + "description": "Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1" + }, + "LineNumber": { + "value": 173, + "deprecated": false, + "description": "The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution" + }, + "Lock": { + "value": 10, + "deprecated": false, + "description": "1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values" + }, + "ManualResearchRequiredPod": { + "value": 94, + "deprecated": false, + "description": "Sets the pod type to search for a certain pod when breaking down a pods." + }, + "Mass": { + "value": 219, + "deprecated": false, + "description": "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": { + "value": 23, + "deprecated": false, + "description": "Maximum setting of the device" + }, + "MineablesInQueue": { + "value": 96, + "deprecated": false, + "description": "Returns the amount of mineables AIMEe has queued up to mine." + }, + "MineablesInVicinity": { + "value": 95, + "deprecated": false, + "description": "Returns the amount of potential mineables within an extended area around AIMEe." + }, + "MinedQuantity": { + "value": 266, + "deprecated": false, + "description": "The total number of resources that have been mined at the rocket's target Space Map Site." + }, + "MinimumWattsToContact": { + "value": 163, + "deprecated": false, + "description": "Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact" + }, + "Mode": { + "value": 3, + "deprecated": false, + "description": "Integer for mode state, different devices will have different mode states available to them" + }, + "NameHash": { + "value": 268, + "deprecated": false, + "description": "Provides the hash value for the name of the object as a 32 bit integer." + }, + "NavPoints": { + "value": 258, + "deprecated": false, + "description": "The number of NavPoints at the rocket's target Space Map Location." + }, + "NextWeatherEventTime": { + "value": 97, + "deprecated": false, + "description": "Returns in seconds when the next weather event is inbound." + }, + "None": { + "value": 0, + "deprecated": true, + "description": "No description" + }, + "On": { + "value": 28, + "deprecated": false, + "description": "The current state of the device, 0 for off, 1 for on" + }, + "Open": { + "value": 2, + "deprecated": false, + "description": "1 if device is open, otherwise 0" + }, + "OperationalTemperatureEfficiency": { + "value": 150, + "deprecated": false, + "description": "How the input pipe's temperature effects the machines efficiency" + }, + "OrbitPeriod": { + "value": 245, + "deprecated": false, + "description": "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." + }, + "Orientation": { + "value": 230, + "deprecated": false, + "description": "The orientation of the entity in degrees in a plane relative towards the north origin" + }, + "Output": { + "value": 70, + "deprecated": false, + "description": "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": { + "value": 234, + "deprecated": false, + "description": "The number of moles that passed through this device on the previous simulation tick" + }, + "Plant": { + "value": 68, + "deprecated": false, + "description": "Performs the planting action for any plant based machinery" + }, + "PlantEfficiency1": { + "value": 52, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantEfficiency2": { + "value": 53, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantEfficiency3": { + "value": 54, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantEfficiency4": { + "value": 55, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantGrowth1": { + "value": 48, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantGrowth2": { + "value": 49, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantGrowth3": { + "value": 50, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantGrowth4": { + "value": 51, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHash1": { + "value": 56, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHash2": { + "value": 57, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHash3": { + "value": 58, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHash4": { + "value": 59, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHealth1": { + "value": 44, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHealth2": { + "value": 45, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHealth3": { + "value": 46, + "deprecated": true, + "description": "DEPRECATED" + }, + "PlantHealth4": { + "value": 47, + "deprecated": true, + "description": "DEPRECATED" + }, + "PositionX": { + "value": 76, + "deprecated": false, + "description": "The current position in X dimension in world coordinates" + }, + "PositionY": { + "value": 77, + "deprecated": false, + "description": "The current position in Y dimension in world coordinates" + }, + "PositionZ": { + "value": 78, + "deprecated": false, + "description": "The current position in Z dimension in world coordinates" + }, + "Power": { + "value": 1, + "deprecated": false, + "description": "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": { + "value": 26, + "deprecated": false, + "description": "How much energy the device or network is actually using" + }, + "PowerGeneration": { + "value": 65, + "deprecated": false, + "description": "Returns how much power is being generated" + }, + "PowerPotential": { + "value": 25, + "deprecated": false, + "description": "How much energy the device or network potentially provides" + }, + "PowerRequired": { + "value": 36, + "deprecated": false, + "description": "Power requested from the device and/or network" + }, + "PrefabHash": { + "value": 84, + "deprecated": false, + "description": "The hash of the structure" + }, + "Pressure": { + "value": 5, + "deprecated": false, + "description": "The current pressure reading of the device" + }, + "PressureEfficiency": { + "value": 152, + "deprecated": false, + "description": "How the pressure of the input pipe and waste pipe effect the machines efficiency" + }, + "PressureExternal": { + "value": 7, + "deprecated": false, + "description": "Setting for external pressure safety, in KPa" + }, + "PressureInput": { + "value": 106, + "deprecated": false, + "description": "The current pressure reading of the device's Input Network" + }, + "PressureInput2": { + "value": 116, + "deprecated": false, + "description": "The current pressure reading of the device's Input2 Network" + }, + "PressureInternal": { + "value": 8, + "deprecated": false, + "description": "Setting for internal pressure safety, in KPa" + }, + "PressureOutput": { + "value": 126, + "deprecated": false, + "description": "The current pressure reading of the device's Output Network" + }, + "PressureOutput2": { + "value": 136, + "deprecated": false, + "description": "The current pressure reading of the device's Output2 Network" + }, + "PressureSetting": { + "value": 71, + "deprecated": false, + "description": "The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa" + }, + "Progress": { + "value": 214, + "deprecated": false, + "description": "Progress of the rocket to the next node on the map expressed as a value between 0-1." + }, + "Quantity": { + "value": 27, + "deprecated": false, + "description": "Total quantity on the device" + }, + "Ratio": { + "value": 24, + "deprecated": false, + "description": "Context specific value depending on device, 0 to 1 based ratio" + }, + "RatioCarbonDioxide": { + "value": 15, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device atmosphere" + }, + "RatioCarbonDioxideInput": { + "value": 109, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device's input network" + }, + "RatioCarbonDioxideInput2": { + "value": 119, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device's Input2 network" + }, + "RatioCarbonDioxideOutput": { + "value": 129, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device's Output network" + }, + "RatioCarbonDioxideOutput2": { + "value": 139, + "deprecated": false, + "description": "The ratio of Carbon Dioxide in device's Output2 network" + }, + "RatioHydrogen": { + "value": 252, + "deprecated": false, + "description": "The ratio of Hydrogen in device's Atmopshere" + }, + "RatioLiquidCarbonDioxide": { + "value": 199, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's Atmosphere" + }, + "RatioLiquidCarbonDioxideInput": { + "value": 200, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's Input Atmosphere" + }, + "RatioLiquidCarbonDioxideInput2": { + "value": 201, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere" + }, + "RatioLiquidCarbonDioxideOutput": { + "value": 202, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere" + }, + "RatioLiquidCarbonDioxideOutput2": { + "value": 203, + "deprecated": false, + "description": "The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere" + }, + "RatioLiquidHydrogen": { + "value": 253, + "deprecated": false, + "description": "The ratio of Liquid Hydrogen in device's Atmopshere" + }, + "RatioLiquidNitrogen": { + "value": 177, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device atmosphere" + }, + "RatioLiquidNitrogenInput": { + "value": 178, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device's input network" + }, + "RatioLiquidNitrogenInput2": { + "value": 179, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device's Input2 network" + }, + "RatioLiquidNitrogenOutput": { + "value": 180, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device's Output network" + }, + "RatioLiquidNitrogenOutput2": { + "value": 181, + "deprecated": false, + "description": "The ratio of Liquid Nitrogen in device's Output2 network" + }, + "RatioLiquidNitrousOxide": { + "value": 209, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's Atmosphere" + }, + "RatioLiquidNitrousOxideInput": { + "value": 210, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's Input Atmosphere" + }, + "RatioLiquidNitrousOxideInput2": { + "value": 211, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere" + }, + "RatioLiquidNitrousOxideOutput": { + "value": 212, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere" + }, + "RatioLiquidNitrousOxideOutput2": { + "value": 213, + "deprecated": false, + "description": "The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere" + }, + "RatioLiquidOxygen": { + "value": 183, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's Atmosphere" + }, + "RatioLiquidOxygenInput": { + "value": 184, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's Input Atmosphere" + }, + "RatioLiquidOxygenInput2": { + "value": 185, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's Input2 Atmosphere" + }, + "RatioLiquidOxygenOutput": { + "value": 186, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's device's Output Atmosphere" + }, + "RatioLiquidOxygenOutput2": { + "value": 187, + "deprecated": false, + "description": "The ratio of Liquid Oxygen in device's Output2 Atmopshere" + }, + "RatioLiquidPollutant": { + "value": 204, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's Atmosphere" + }, + "RatioLiquidPollutantInput": { + "value": 205, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's Input Atmosphere" + }, + "RatioLiquidPollutantInput2": { + "value": 206, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's Input2 Atmosphere" + }, + "RatioLiquidPollutantOutput": { + "value": 207, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's device's Output Atmosphere" + }, + "RatioLiquidPollutantOutput2": { + "value": 208, + "deprecated": false, + "description": "The ratio of Liquid Pollutant in device's Output2 Atmopshere" + }, + "RatioLiquidVolatiles": { + "value": 188, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's Atmosphere" + }, + "RatioLiquidVolatilesInput": { + "value": 189, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's Input Atmosphere" + }, + "RatioLiquidVolatilesInput2": { + "value": 190, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's Input2 Atmosphere" + }, + "RatioLiquidVolatilesOutput": { + "value": 191, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's device's Output Atmosphere" + }, + "RatioLiquidVolatilesOutput2": { + "value": 192, + "deprecated": false, + "description": "The ratio of Liquid Volatiles in device's Output2 Atmopshere" + }, + "RatioNitrogen": { + "value": 16, + "deprecated": false, + "description": "The ratio of nitrogen in device atmosphere" + }, + "RatioNitrogenInput": { + "value": 110, + "deprecated": false, + "description": "The ratio of nitrogen in device's input network" + }, + "RatioNitrogenInput2": { + "value": 120, + "deprecated": false, + "description": "The ratio of nitrogen in device's Input2 network" + }, + "RatioNitrogenOutput": { + "value": 130, + "deprecated": false, + "description": "The ratio of nitrogen in device's Output network" + }, + "RatioNitrogenOutput2": { + "value": 140, + "deprecated": false, + "description": "The ratio of nitrogen in device's Output2 network" + }, + "RatioNitrousOxide": { + "value": 83, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device atmosphere" + }, + "RatioNitrousOxideInput": { + "value": 114, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device's input network" + }, + "RatioNitrousOxideInput2": { + "value": 124, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device's Input2 network" + }, + "RatioNitrousOxideOutput": { + "value": 134, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device's Output network" + }, + "RatioNitrousOxideOutput2": { + "value": 144, + "deprecated": false, + "description": "The ratio of Nitrous Oxide in device's Output2 network" + }, + "RatioOxygen": { + "value": 14, + "deprecated": false, + "description": "The ratio of oxygen in device atmosphere" + }, + "RatioOxygenInput": { + "value": 108, + "deprecated": false, + "description": "The ratio of oxygen in device's input network" + }, + "RatioOxygenInput2": { + "value": 118, + "deprecated": false, + "description": "The ratio of oxygen in device's Input2 network" + }, + "RatioOxygenOutput": { + "value": 128, + "deprecated": false, + "description": "The ratio of oxygen in device's Output network" + }, + "RatioOxygenOutput2": { + "value": 138, + "deprecated": false, + "description": "The ratio of oxygen in device's Output2 network" + }, + "RatioPollutant": { + "value": 17, + "deprecated": false, + "description": "The ratio of pollutant in device atmosphere" + }, + "RatioPollutantInput": { + "value": 111, + "deprecated": false, + "description": "The ratio of pollutant in device's input network" + }, + "RatioPollutantInput2": { + "value": 121, + "deprecated": false, + "description": "The ratio of pollutant in device's Input2 network" + }, + "RatioPollutantOutput": { + "value": 131, + "deprecated": false, + "description": "The ratio of pollutant in device's Output network" + }, + "RatioPollutantOutput2": { + "value": 141, + "deprecated": false, + "description": "The ratio of pollutant in device's Output2 network" + }, + "RatioPollutedWater": { + "value": 254, + "deprecated": false, + "description": "The ratio of polluted water in device atmosphere" + }, + "RatioSteam": { + "value": 193, + "deprecated": false, + "description": "The ratio of Steam in device's Atmosphere" + }, + "RatioSteamInput": { + "value": 194, + "deprecated": false, + "description": "The ratio of Steam in device's Input Atmosphere" + }, + "RatioSteamInput2": { + "value": 195, + "deprecated": false, + "description": "The ratio of Steam in device's Input2 Atmosphere" + }, + "RatioSteamOutput": { + "value": 196, + "deprecated": false, + "description": "The ratio of Steam in device's device's Output Atmosphere" + }, + "RatioSteamOutput2": { + "value": 197, + "deprecated": false, + "description": "The ratio of Steam in device's Output2 Atmopshere" + }, + "RatioVolatiles": { + "value": 18, + "deprecated": false, + "description": "The ratio of volatiles in device atmosphere" + }, + "RatioVolatilesInput": { + "value": 112, + "deprecated": false, + "description": "The ratio of volatiles in device's input network" + }, + "RatioVolatilesInput2": { + "value": 122, + "deprecated": false, + "description": "The ratio of volatiles in device's Input2 network" + }, + "RatioVolatilesOutput": { + "value": 132, + "deprecated": false, + "description": "The ratio of volatiles in device's Output network" + }, + "RatioVolatilesOutput2": { + "value": 142, + "deprecated": false, + "description": "The ratio of volatiles in device's Output2 network" + }, + "RatioWater": { + "value": 19, + "deprecated": false, + "description": "The ratio of water in device atmosphere" + }, + "RatioWaterInput": { + "value": 113, + "deprecated": false, + "description": "The ratio of water in device's input network" + }, + "RatioWaterInput2": { + "value": 123, + "deprecated": false, + "description": "The ratio of water in device's Input2 network" + }, + "RatioWaterOutput": { + "value": 133, + "deprecated": false, + "description": "The ratio of water in device's Output network" + }, + "RatioWaterOutput2": { + "value": 143, + "deprecated": false, + "description": "The ratio of water in device's Output2 network" + }, + "ReEntryAltitude": { + "value": 237, + "deprecated": false, + "description": "The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km" + }, + "Reagents": { + "value": 13, + "deprecated": false, + "description": "Total number of reagents recorded by the device" + }, + "RecipeHash": { + "value": 41, + "deprecated": false, + "description": "Current hash of the recipe the device is set to produce" + }, + "ReferenceId": { + "value": 217, + "deprecated": false, + "description": "Unique Reference Identifier for this object" + }, + "RequestHash": { + "value": 60, + "deprecated": false, + "description": "When set to the unique identifier, requests an item of the provided type from the device" + }, + "RequiredPower": { + "value": 33, + "deprecated": false, + "description": "Idle operating power quantity, does not necessarily include extra demand power" + }, + "ReturnFuelCost": { + "value": 100, + "deprecated": false, + "description": "Gets the fuel remaining in your rocket's fuel tank." + }, + "Richness": { + "value": 263, + "deprecated": false, + "description": "The richness of the rocket's target site's mine-able deposit." + }, + "Rpm": { + "value": 155, + "deprecated": false, + "description": "The number of revolutions per minute that the device's spinning mechanism is doing" + }, + "SemiMajorAxis": { + "value": 248, + "deprecated": false, + "description": "The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit." + }, + "Setting": { + "value": 12, + "deprecated": false, + "description": "A variable setting that can be read or written, depending on the device" + }, + "SettingInput": { + "value": 91, + "deprecated": false, + "description": "" + }, + "SettingOutput": { + "value": 92, + "deprecated": false, + "description": "" + }, + "SignalID": { + "value": 87, + "deprecated": false, + "description": "Returns the contact ID of the strongest signal from this Satellite" + }, + "SignalStrength": { + "value": 86, + "deprecated": false, + "description": "Returns the degree offset of the strongest contact" + }, + "Sites": { + "value": 260, + "deprecated": false, + "description": "The number of Sites that have been discovered at the rockets target Space Map location." + }, + "Size": { + "value": 264, + "deprecated": false, + "description": "The size of the rocket's target site's mine-able deposit." + }, + "SizeX": { + "value": 160, + "deprecated": false, + "description": "Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)" + }, + "SizeY": { + "value": 161, + "deprecated": false, + "description": "Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)" + }, + "SizeZ": { + "value": 162, + "deprecated": false, + "description": "Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)" + }, + "SolarAngle": { + "value": 22, + "deprecated": false, + "description": "Solar angle of the device" + }, + "SolarIrradiance": { + "value": 176, + "deprecated": false, + "description": "" + }, + "SoundAlert": { + "value": 175, + "deprecated": false, + "description": "Plays a sound alert on the devices speaker" + }, + "Stress": { + "value": 156, + "deprecated": false, + "description": "Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down" + }, + "Survey": { + "value": 257, + "deprecated": false, + "description": "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." + }, + "TargetPadIndex": { + "value": 158, + "deprecated": false, + "description": "The index of the trader landing pad on this devices data network that it will try to call a trader in to land" + }, + "TargetX": { + "value": 88, + "deprecated": false, + "description": "The target position in X dimension in world coordinates" + }, + "TargetY": { + "value": 89, + "deprecated": false, + "description": "The target position in Y dimension in world coordinates" + }, + "TargetZ": { + "value": 90, + "deprecated": false, + "description": "The target position in Z dimension in world coordinates" + }, + "Temperature": { + "value": 6, + "deprecated": false, + "description": "The current temperature reading of the device" + }, + "TemperatureDifferentialEfficiency": { + "value": 151, + "deprecated": false, + "description": "How the difference between the input pipe and waste pipe temperatures effect the machines efficiency" + }, + "TemperatureExternal": { + "value": 73, + "deprecated": false, + "description": "The temperature of the outside of the device, usually the world atmosphere surrounding it" + }, + "TemperatureInput": { + "value": 107, + "deprecated": false, + "description": "The current temperature reading of the device's Input Network" + }, + "TemperatureInput2": { + "value": 117, + "deprecated": false, + "description": "The current temperature reading of the device's Input2 Network" + }, + "TemperatureOutput": { + "value": 127, + "deprecated": false, + "description": "The current temperature reading of the device's Output Network" + }, + "TemperatureOutput2": { + "value": 137, + "deprecated": false, + "description": "The current temperature reading of the device's Output2 Network" + }, + "TemperatureSetting": { + "value": 72, + "deprecated": false, + "description": "The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)" + }, + "Throttle": { + "value": 154, + "deprecated": false, + "description": "Increases the rate at which the machine works (range: 0-100)" + }, + "Thrust": { + "value": 221, + "deprecated": false, + "description": "Total current thrust of all rocket engines on the rocket in Newtons." + }, + "ThrustToWeight": { + "value": 223, + "deprecated": false, + "description": "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": { + "value": 102, + "deprecated": false, + "description": "Time" + }, + "TimeToDestination": { + "value": 224, + "deprecated": false, + "description": "Estimated time in seconds until rocket arrives at target destination." + }, + "TotalMoles": { + "value": 66, + "deprecated": false, + "description": "Returns the total moles of the device" + }, + "TotalMolesInput": { + "value": 115, + "deprecated": false, + "description": "Returns the total moles of the device's Input Network" + }, + "TotalMolesInput2": { + "value": 125, + "deprecated": false, + "description": "Returns the total moles of the device's Input2 Network" + }, + "TotalMolesOutput": { + "value": 135, + "deprecated": false, + "description": "Returns the total moles of the device's Output Network" + }, + "TotalMolesOutput2": { + "value": 145, + "deprecated": false, + "description": "Returns the total moles of the device's Output2 Network" + }, + "TotalQuantity": { + "value": 265, + "deprecated": false, + "description": "The estimated total quantity of resources available to mine at the rocket's target Space Map Site." + }, + "TrueAnomaly": { + "value": 251, + "deprecated": false, + "description": "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)." + }, + "VelocityMagnitude": { + "value": 79, + "deprecated": false, + "description": "The current magnitude of the velocity vector" + }, + "VelocityRelativeX": { + "value": 80, + "deprecated": false, + "description": "The current velocity X relative to the forward vector of this" + }, + "VelocityRelativeY": { + "value": 81, + "deprecated": false, + "description": "The current velocity Y relative to the forward vector of this" + }, + "VelocityRelativeZ": { + "value": 82, + "deprecated": false, + "description": "The current velocity Z relative to the forward vector of this" + }, + "VelocityX": { + "value": 231, + "deprecated": false, + "description": "The world velocity of the entity in the X axis" + }, + "VelocityY": { + "value": 232, + "deprecated": false, + "description": "The world velocity of the entity in the Y axis" + }, + "VelocityZ": { + "value": 233, + "deprecated": false, + "description": "The world velocity of the entity in the Z axis" + }, + "Vertical": { + "value": 21, + "deprecated": false, + "description": "Vertical setting of the device" + }, + "VerticalRatio": { + "value": 35, + "deprecated": false, + "description": "Radio of vertical setting for device" + }, + "Volume": { + "value": 67, + "deprecated": false, + "description": "Returns the device atmosphere volume" + }, + "VolumeOfLiquid": { + "value": 182, + "deprecated": false, + "description": "The total volume of all liquids in Liters in the atmosphere" + }, + "WattsReachingContact": { + "value": 164, + "deprecated": false, + "description": "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": { + "value": 222, + "deprecated": false, + "description": "Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity." + }, + "WorkingGasEfficiency": { + "value": 105, + "deprecated": false, + "description": "The Working Gas Efficiency reported by the machine, as a float between 0 and 1" + } + } + }, + "PowerMode": { + "enumName": "PowerMode", + "values": { + "Charged": { + "value": 4, + "deprecated": false, + "description": "" + }, + "Charging": { + "value": 3, + "deprecated": false, + "description": "" + }, + "Discharged": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Discharging": { + "value": 2, + "deprecated": false, + "description": "" + }, + "Idle": { + "value": 0, + "deprecated": false, + "description": "" + } + } + }, + "PrinterInstruction": { + "enumName": "PrinterInstruction", + "values": { + "DeviceSetLock": { + "value": 6, + "deprecated": false, + "description": "" + }, + "EjectAllReagents": { + "value": 8, + "deprecated": false, + "description": "" + }, + "EjectReagent": { + "value": 7, + "deprecated": false, + "description": "" + }, + "ExecuteRecipe": { + "value": 2, + "deprecated": false, + "description": "" + }, + "JumpIfNextInvalid": { + "value": 4, + "deprecated": false, + "description": "" + }, + "JumpToAddress": { + "value": 5, + "deprecated": false, + "description": "" + }, + "MissingRecipeReagent": { + "value": 9, + "deprecated": false, + "description": "" + }, + "None": { + "value": 0, + "deprecated": false, + "description": "" + }, + "StackPointer": { + "value": 1, + "deprecated": false, + "description": "" + }, + "WaitUntilNextValid": { + "value": 3, + "deprecated": false, + "description": "" + } + } + }, + "ReEntryProfile": { + "enumName": "ReEntryProfile", + "values": { + "High": { + "value": 3, + "deprecated": false, + "description": "" + }, + "Max": { + "value": 4, + "deprecated": false, + "description": "" + }, + "Medium": { + "value": 2, + "deprecated": false, + "description": "" + }, + "None": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Optimal": { + "value": 1, + "deprecated": false, + "description": "" + } + } + }, + "RobotMode": { + "enumName": "RobotMode", + "values": { + "Follow": { + "value": 1, + "deprecated": false, + "description": "" + }, + "MoveToTarget": { + "value": 2, + "deprecated": false, + "description": "" + }, + "None": { + "value": 0, + "deprecated": false, + "description": "" + }, + "PathToTarget": { + "value": 5, + "deprecated": false, + "description": "" + }, + "Roam": { + "value": 3, + "deprecated": false, + "description": "" + }, + "StorageFull": { + "value": 6, + "deprecated": false, + "description": "" + }, + "Unload": { + "value": 4, + "deprecated": false, + "description": "" + } + } + }, + "RocketMode": { + "enumName": "RocketMode", + "values": { + "Chart": { + "value": 5, + "deprecated": false, + "description": "" + }, + "Discover": { + "value": 4, + "deprecated": false, + "description": "" + }, + "Invalid": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Mine": { + "value": 2, + "deprecated": false, + "description": "" + }, + "None": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Survey": { + "value": 3, + "deprecated": false, + "description": "" + } + } + }, + "SlotClass": { + "enumName": "Class", + "values": { + "AccessCard": { + "value": 22, + "deprecated": false, + "description": "" + }, + "Appliance": { + "value": 18, + "deprecated": false, + "description": "" + }, + "Back": { + "value": 3, + "deprecated": false, + "description": "" + }, + "Battery": { + "value": 14, + "deprecated": false, + "description": "" + }, + "Belt": { + "value": 16, + "deprecated": false, + "description": "" + }, + "Blocked": { + "value": 38, + "deprecated": false, + "description": "" + }, + "Bottle": { + "value": 25, + "deprecated": false, + "description": "" + }, + "Cartridge": { + "value": 21, + "deprecated": false, + "description": "" + }, + "Circuit": { + "value": 24, + "deprecated": false, + "description": "" + }, + "Circuitboard": { + "value": 7, + "deprecated": false, + "description": "" + }, + "CreditCard": { + "value": 28, + "deprecated": false, + "description": "" + }, + "DataDisk": { + "value": 8, + "deprecated": false, + "description": "" + }, + "DirtCanister": { + "value": 29, + "deprecated": false, + "description": "" + }, + "DrillHead": { + "value": 35, + "deprecated": false, + "description": "" + }, + "Egg": { + "value": 15, + "deprecated": false, + "description": "" + }, + "Entity": { + "value": 13, + "deprecated": false, + "description": "" + }, + "Flare": { + "value": 37, + "deprecated": false, + "description": "" + }, + "GasCanister": { + "value": 5, + "deprecated": false, + "description": "" + }, + "GasFilter": { + "value": 4, + "deprecated": false, + "description": "" + }, + "Glasses": { + "value": 27, + "deprecated": false, + "description": "" + }, + "Helmet": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Ingot": { + "value": 19, + "deprecated": false, + "description": "" + }, + "LiquidBottle": { + "value": 32, + "deprecated": false, + "description": "" + }, + "LiquidCanister": { + "value": 31, + "deprecated": false, + "description": "" + }, + "Magazine": { + "value": 23, + "deprecated": false, + "description": "" + }, + "Motherboard": { + "value": 6, + "deprecated": false, + "description": "" + }, + "None": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Ore": { + "value": 10, + "deprecated": false, + "description": "" + }, + "Organ": { + "value": 9, + "deprecated": false, + "description": "" + }, + "Plant": { + "value": 11, + "deprecated": false, + "description": "" + }, + "ProgrammableChip": { + "value": 26, + "deprecated": false, + "description": "" + }, + "ScanningHead": { + "value": 36, + "deprecated": false, + "description": "" + }, + "SensorProcessingUnit": { + "value": 30, + "deprecated": false, + "description": "" + }, + "SoundCartridge": { + "value": 34, + "deprecated": false, + "description": "" + }, + "Suit": { + "value": 2, + "deprecated": false, + "description": "" + }, + "SuitMod": { + "value": 39, + "deprecated": false, + "description": "" + }, + "Tool": { + "value": 17, + "deprecated": false, + "description": "" + }, + "Torpedo": { + "value": 20, + "deprecated": false, + "description": "" + }, + "Uniform": { + "value": 12, + "deprecated": false, + "description": "" + }, + "Wreckage": { + "value": 33, + "deprecated": false, + "description": "" + } + } + }, + "SorterInstruction": { + "enumName": "SorterInstruction", + "values": { + "FilterPrefabHashEquals": { + "value": 1, + "deprecated": false, + "description": "" + }, + "FilterPrefabHashNotEquals": { + "value": 2, + "deprecated": false, + "description": "" + }, + "FilterQuantityCompare": { + "value": 5, + "deprecated": false, + "description": "" + }, + "FilterSlotTypeCompare": { + "value": 4, + "deprecated": false, + "description": "" + }, + "FilterSortingClassCompare": { + "value": 3, + "deprecated": false, + "description": "" + }, + "LimitNextExecutionByCount": { + "value": 6, + "deprecated": false, + "description": "" + }, + "None": { + "value": 0, + "deprecated": false, + "description": "" + } + } + }, + "SortingClass": { + "enumName": "SortingClass", + "values": { + "Appliances": { + "value": 6, + "deprecated": false, + "description": "" + }, + "Atmospherics": { + "value": 7, + "deprecated": false, + "description": "" + }, + "Clothing": { + "value": 5, + "deprecated": false, + "description": "" + }, + "Default": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Food": { + "value": 4, + "deprecated": false, + "description": "" + }, + "Ices": { + "value": 10, + "deprecated": false, + "description": "" + }, + "Kits": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Ores": { + "value": 9, + "deprecated": false, + "description": "" + }, + "Resources": { + "value": 3, + "deprecated": false, + "description": "" + }, + "Storage": { + "value": 8, + "deprecated": false, + "description": "" + }, + "Tools": { + "value": 2, + "deprecated": false, + "description": "" + } + } + }, + "Sound": { + "enumName": "SoundAlert", + "values": { + "AirlockCycling": { + "value": 22, + "deprecated": false, + "description": "" + }, + "Alarm1": { + "value": 45, + "deprecated": false, + "description": "" + }, + "Alarm10": { + "value": 12, + "deprecated": false, + "description": "" + }, + "Alarm11": { + "value": 13, + "deprecated": false, + "description": "" + }, + "Alarm12": { + "value": 14, + "deprecated": false, + "description": "" + }, + "Alarm2": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Alarm3": { + "value": 2, + "deprecated": false, + "description": "" + }, + "Alarm4": { + "value": 3, + "deprecated": false, + "description": "" + }, + "Alarm5": { + "value": 4, + "deprecated": false, + "description": "" + }, + "Alarm6": { + "value": 5, + "deprecated": false, + "description": "" + }, + "Alarm7": { + "value": 6, + "deprecated": false, + "description": "" + }, + "Alarm8": { + "value": 10, + "deprecated": false, + "description": "" + }, + "Alarm9": { + "value": 11, + "deprecated": false, + "description": "" + }, + "Alert": { + "value": 17, + "deprecated": false, + "description": "" + }, + "Danger": { + "value": 15, + "deprecated": false, + "description": "" + }, + "Depressurising": { + "value": 20, + "deprecated": false, + "description": "" + }, + "FireFireFire": { + "value": 28, + "deprecated": false, + "description": "" + }, + "Five": { + "value": 33, + "deprecated": false, + "description": "" + }, + "Floor": { + "value": 34, + "deprecated": false, + "description": "" + }, + "Four": { + "value": 32, + "deprecated": false, + "description": "" + }, + "HaltWhoGoesThere": { + "value": 27, + "deprecated": false, + "description": "" + }, + "HighCarbonDioxide": { + "value": 44, + "deprecated": false, + "description": "" + }, + "IntruderAlert": { + "value": 19, + "deprecated": false, + "description": "" + }, + "LiftOff": { + "value": 36, + "deprecated": false, + "description": "" + }, + "MalfunctionDetected": { + "value": 26, + "deprecated": false, + "description": "" + }, + "Music1": { + "value": 7, + "deprecated": false, + "description": "" + }, + "Music2": { + "value": 8, + "deprecated": false, + "description": "" + }, + "Music3": { + "value": 9, + "deprecated": false, + "description": "" + }, + "None": { + "value": 0, + "deprecated": false, + "description": "" + }, + "One": { + "value": 29, + "deprecated": false, + "description": "" + }, + "PollutantsDetected": { + "value": 43, + "deprecated": false, + "description": "" + }, + "PowerLow": { + "value": 23, + "deprecated": false, + "description": "" + }, + "PressureHigh": { + "value": 39, + "deprecated": false, + "description": "" + }, + "PressureLow": { + "value": 40, + "deprecated": false, + "description": "" + }, + "Pressurising": { + "value": 21, + "deprecated": false, + "description": "" + }, + "RocketLaunching": { + "value": 35, + "deprecated": false, + "description": "" + }, + "StormIncoming": { + "value": 18, + "deprecated": false, + "description": "" + }, + "SystemFailure": { + "value": 24, + "deprecated": false, + "description": "" + }, + "TemperatureHigh": { + "value": 41, + "deprecated": false, + "description": "" + }, + "TemperatureLow": { + "value": 42, + "deprecated": false, + "description": "" + }, + "Three": { + "value": 31, + "deprecated": false, + "description": "" + }, + "TraderIncoming": { + "value": 37, + "deprecated": false, + "description": "" + }, + "TraderLanded": { + "value": 38, + "deprecated": false, + "description": "" + }, + "Two": { + "value": 30, + "deprecated": false, + "description": "" + }, + "Warning": { + "value": 16, + "deprecated": false, + "description": "" + }, + "Welcome": { + "value": 25, + "deprecated": false, + "description": "" + } + } + }, + "TransmitterMode": { + "enumName": "LogicTransmitterMode", + "values": { + "Active": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Passive": { + "value": 0, + "deprecated": false, + "description": "" + } + } + }, + "Vent": { + "enumName": "VentDirection", + "values": { + "Inward": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Outward": { + "value": 0, + "deprecated": false, + "description": "" + } + } + }, + "_unnamed": { + "enumName": "ConditionOperation", + "values": { + "Equals": { + "value": 0, + "deprecated": false, + "description": "" + }, + "Greater": { + "value": 1, + "deprecated": false, + "description": "" + }, + "Less": { + "value": 2, + "deprecated": false, + "description": "" + }, + "NotEquals": { + "value": 3, + "deprecated": false, + "description": "" + } + } + } + } + }, + "prefabsByHash": { + "-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", + "-1884103228": "SeedBag_SugarCane", + "-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", + "-1351081801": "StructureLargeHangerDoor", + "-1348105509": "ItemGoldOre", + "-1344601965": "ItemCannedMushroom", + "-1339716113": "AppliancePaintMixer", + "-1339479035": "AccessCardGray", + "-1337091041": "StructureChuteDigitalValveRight", + "-1335056202": "ItemSugarCane", + "-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", + "-1108244510": "ItemPlainCake", + "-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", + "-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", + "-261575861": "ItemChocolateCake", + "-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", + "234601764": "ItemChocolateBar", + "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", + "457286516": "ItemCocoaPowder", + "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", + "680051921": "ItemCocoaTree", + "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", + "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", + "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", + "860793245": "ItemChocolateCerealBar", + "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", + "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", + "1139887531": "SeedBag_Cocoa", + "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", + "2111910840": "ItemSugar", + "2130739600": "DynamicMKIILiquidCanisterEmpty", + "2131916219": "ItemSpaceOre", + "2133035682": "ItemKitStandardChute", + "2134172356": "StructureInsulatedPipeStraight", + "2134647745": "ItemLeadIngot", + "2145068424": "ItemGasCanisterNitrogen" + }, + "structures": [ + "CompositeRollCover", + "DeviceLfoVolume", + "DeviceStepUnit", + "Flag_ODA_10m", + "Flag_ODA_4m", + "Flag_ODA_6m", + "Flag_ODA_8m", + "H2Combustor", + "KitchenTableShort", + "KitchenTableSimpleShort", + "KitchenTableSimpleTall", + "KitchenTableTall", + "Landingpad_2x2CenterPiece01", + "Landingpad_BlankPiece", + "Landingpad_CenterPiece01", + "Landingpad_CrossPiece", + "Landingpad_DataConnectionPiece", + "Landingpad_DiagonalPiece01", + "Landingpad_GasConnectorInwardPiece", + "Landingpad_GasConnectorOutwardPiece", + "Landingpad_GasCylinderTankPiece", + "Landingpad_LiquidConnectorInwardPiece", + "Landingpad_LiquidConnectorOutwardPiece", + "Landingpad_StraightPiece01", + "Landingpad_TaxiPieceCorner", + "Landingpad_TaxiPieceHold", + "Landingpad_TaxiPieceStraight", + "Landingpad_ThreshholdPiece", + "LogicStepSequencer8", + "PassiveSpeaker", + "RailingElegant01", + "RailingElegant02", + "RailingIndustrial02", + "RespawnPoint", + "RespawnPointWallMounted", + "Rover_MkI_build_states", + "StopWatch", + "StructureAccessBridge", + "StructureActiveVent", + "StructureAdvancedComposter", + "StructureAdvancedFurnace", + "StructureAdvancedPackagingMachine", + "StructureAirConditioner", + "StructureAirlock", + "StructureAirlockGate", + "StructureAngledBench", + "StructureArcFurnace", + "StructureAreaPowerControl", + "StructureAreaPowerControlReversed", + "StructureAutoMinerSmall", + "StructureAutolathe", + "StructureAutomatedOven", + "StructureBackLiquidPressureRegulator", + "StructureBackPressureRegulator", + "StructureBasketHoop", + "StructureBattery", + "StructureBatteryCharger", + "StructureBatteryChargerSmall", + "StructureBatteryLarge", + "StructureBatteryMedium", + "StructureBatterySmall", + "StructureBeacon", + "StructureBench", + "StructureBench1", + "StructureBench2", + "StructureBench3", + "StructureBench4", + "StructureBlastDoor", + "StructureBlockBed", + "StructureBlocker", + "StructureCableAnalysizer", + "StructureCableCorner", + "StructureCableCorner3", + "StructureCableCorner3Burnt", + "StructureCableCorner3HBurnt", + "StructureCableCorner4", + "StructureCableCorner4Burnt", + "StructureCableCorner4HBurnt", + "StructureCableCornerBurnt", + "StructureCableCornerH", + "StructureCableCornerH3", + "StructureCableCornerH4", + "StructureCableCornerHBurnt", + "StructureCableFuse100k", + "StructureCableFuse1k", + "StructureCableFuse50k", + "StructureCableFuse5k", + "StructureCableJunction", + "StructureCableJunction4", + "StructureCableJunction4Burnt", + "StructureCableJunction4HBurnt", + "StructureCableJunction5", + "StructureCableJunction5Burnt", + "StructureCableJunction6", + "StructureCableJunction6Burnt", + "StructureCableJunction6HBurnt", + "StructureCableJunctionBurnt", + "StructureCableJunctionH", + "StructureCableJunctionH4", + "StructureCableJunctionH5", + "StructureCableJunctionH5Burnt", + "StructureCableJunctionH6", + "StructureCableJunctionHBurnt", + "StructureCableStraight", + "StructureCableStraightBurnt", + "StructureCableStraightH", + "StructureCableStraightHBurnt", + "StructureCamera", + "StructureCapsuleTankGas", + "StructureCapsuleTankLiquid", + "StructureCargoStorageMedium", + "StructureCargoStorageSmall", + "StructureCentrifuge", + "StructureChair", + "StructureChairBacklessDouble", + "StructureChairBacklessSingle", + "StructureChairBoothCornerLeft", + "StructureChairBoothMiddle", + "StructureChairRectangleDouble", + "StructureChairRectangleSingle", + "StructureChairThickDouble", + "StructureChairThickSingle", + "StructureChuteBin", + "StructureChuteCorner", + "StructureChuteDigitalFlipFlopSplitterLeft", + "StructureChuteDigitalFlipFlopSplitterRight", + "StructureChuteDigitalValveLeft", + "StructureChuteDigitalValveRight", + "StructureChuteFlipFlopSplitter", + "StructureChuteInlet", + "StructureChuteJunction", + "StructureChuteOutlet", + "StructureChuteOverflow", + "StructureChuteStraight", + "StructureChuteUmbilicalFemale", + "StructureChuteUmbilicalFemaleSide", + "StructureChuteUmbilicalMale", + "StructureChuteValve", + "StructureChuteWindow", + "StructureCircuitHousing", + "StructureCombustionCentrifuge", + "StructureCompositeCladdingAngled", + "StructureCompositeCladdingAngledCorner", + "StructureCompositeCladdingAngledCornerInner", + "StructureCompositeCladdingAngledCornerInnerLong", + "StructureCompositeCladdingAngledCornerInnerLongL", + "StructureCompositeCladdingAngledCornerInnerLongR", + "StructureCompositeCladdingAngledCornerLong", + "StructureCompositeCladdingAngledCornerLongR", + "StructureCompositeCladdingAngledLong", + "StructureCompositeCladdingCylindrical", + "StructureCompositeCladdingCylindricalPanel", + "StructureCompositeCladdingPanel", + "StructureCompositeCladdingRounded", + "StructureCompositeCladdingRoundedCorner", + "StructureCompositeCladdingRoundedCornerInner", + "StructureCompositeCladdingSpherical", + "StructureCompositeCladdingSphericalCap", + "StructureCompositeCladdingSphericalCorner", + "StructureCompositeDoor", + "StructureCompositeFloorGrating", + "StructureCompositeFloorGrating2", + "StructureCompositeFloorGrating3", + "StructureCompositeFloorGrating4", + "StructureCompositeFloorGratingOpen", + "StructureCompositeFloorGratingOpenRotated", + "StructureCompositeWall", + "StructureCompositeWall02", + "StructureCompositeWall03", + "StructureCompositeWall04", + "StructureCompositeWindow", + "StructureCompositeWindowIron", + "StructureComputer", + "StructureCondensationChamber", + "StructureCondensationValve", + "StructureConsole", + "StructureConsoleDual", + "StructureConsoleLED1x2", + "StructureConsoleLED1x3", + "StructureConsoleLED5", + "StructureConsoleMonitor", + "StructureControlChair", + "StructureCornerLocker", + "StructureCrateMount", + "StructureCryoTube", + "StructureCryoTubeHorizontal", + "StructureCryoTubeVertical", + "StructureDaylightSensor", + "StructureDeepMiner", + "StructureDigitalValve", + "StructureDiode", + "StructureDiodeSlide", + "StructureDockPortSide", + "StructureDrinkingFountain", + "StructureElectrolyzer", + "StructureElectronicsPrinter", + "StructureElevatorLevelFront", + "StructureElevatorLevelIndustrial", + "StructureElevatorShaft", + "StructureElevatorShaftIndustrial", + "StructureEmergencyButton", + "StructureEngineMountTypeA1", + "StructureEvaporationChamber", + "StructureExpansionValve", + "StructureFairingTypeA1", + "StructureFairingTypeA2", + "StructureFairingTypeA3", + "StructureFiltration", + "StructureFlagSmall", + "StructureFlashingLight", + "StructureFlatBench", + "StructureFloorDrain", + "StructureFrame", + "StructureFrameCorner", + "StructureFrameCornerCut", + "StructureFrameIron", + "StructureFrameSide", + "StructureFridgeBig", + "StructureFridgeSmall", + "StructureFurnace", + "StructureFuselageTypeA1", + "StructureFuselageTypeA2", + "StructureFuselageTypeA4", + "StructureFuselageTypeC5", + "StructureGasGenerator", + "StructureGasMixer", + "StructureGasSensor", + "StructureGasTankStorage", + "StructureGasUmbilicalFemale", + "StructureGasUmbilicalFemaleSide", + "StructureGasUmbilicalMale", + "StructureGlassDoor", + "StructureGovernedGasEngine", + "StructureGroundBasedTelescope", + "StructureGrowLight", + "StructureHarvie", + "StructureHeatExchangeLiquidtoGas", + "StructureHeatExchangerGastoGas", + "StructureHeatExchangerLiquidtoLiquid", + "StructureHorizontalAutoMiner", + "StructureHydraulicPipeBender", + "StructureHydroponicsStation", + "StructureHydroponicsTray", + "StructureHydroponicsTrayData", + "StructureIceCrusher", + "StructureIgniter", + "StructureInLineTankGas1x1", + "StructureInLineTankGas1x2", + "StructureInLineTankLiquid1x1", + "StructureInLineTankLiquid1x2", + "StructureInsulatedInLineTankGas1x1", + "StructureInsulatedInLineTankGas1x2", + "StructureInsulatedInLineTankLiquid1x1", + "StructureInsulatedInLineTankLiquid1x2", + "StructureInsulatedPipeCorner", + "StructureInsulatedPipeCrossJunction", + "StructureInsulatedPipeCrossJunction3", + "StructureInsulatedPipeCrossJunction4", + "StructureInsulatedPipeCrossJunction5", + "StructureInsulatedPipeCrossJunction6", + "StructureInsulatedPipeLiquidCorner", + "StructureInsulatedPipeLiquidCrossJunction", + "StructureInsulatedPipeLiquidCrossJunction4", + "StructureInsulatedPipeLiquidCrossJunction5", + "StructureInsulatedPipeLiquidCrossJunction6", + "StructureInsulatedPipeLiquidStraight", + "StructureInsulatedPipeLiquidTJunction", + "StructureInsulatedPipeStraight", + "StructureInsulatedPipeTJunction", + "StructureInsulatedTankConnector", + "StructureInsulatedTankConnectorLiquid", + "StructureInteriorDoorGlass", + "StructureInteriorDoorPadded", + "StructureInteriorDoorPaddedThin", + "StructureInteriorDoorTriangle", + "StructureKlaxon", + "StructureLadder", + "StructureLadderEnd", + "StructureLargeDirectHeatExchangeGastoGas", + "StructureLargeDirectHeatExchangeGastoLiquid", + "StructureLargeDirectHeatExchangeLiquidtoLiquid", + "StructureLargeExtendableRadiator", + "StructureLargeHangerDoor", + "StructureLargeSatelliteDish", + "StructureLaunchMount", + "StructureLightLong", + "StructureLightLongAngled", + "StructureLightLongWide", + "StructureLightRound", + "StructureLightRoundAngled", + "StructureLightRoundSmall", + "StructureLiquidDrain", + "StructureLiquidPipeAnalyzer", + "StructureLiquidPipeHeater", + "StructureLiquidPipeOneWayValve", + "StructureLiquidPipeRadiator", + "StructureLiquidPressureRegulator", + "StructureLiquidTankBig", + "StructureLiquidTankBigInsulated", + "StructureLiquidTankSmall", + "StructureLiquidTankSmallInsulated", + "StructureLiquidTankStorage", + "StructureLiquidTurboVolumePump", + "StructureLiquidUmbilicalFemale", + "StructureLiquidUmbilicalFemaleSide", + "StructureLiquidUmbilicalMale", + "StructureLiquidValve", + "StructureLiquidVolumePump", + "StructureLockerSmall", + "StructureLogicBatchReader", + "StructureLogicBatchSlotReader", + "StructureLogicBatchWriter", + "StructureLogicButton", + "StructureLogicCompare", + "StructureLogicDial", + "StructureLogicGate", + "StructureLogicHashGen", + "StructureLogicMath", + "StructureLogicMathUnary", + "StructureLogicMemory", + "StructureLogicMinMax", + "StructureLogicMirror", + "StructureLogicReader", + "StructureLogicReagentReader", + "StructureLogicRocketDownlink", + "StructureLogicRocketUplink", + "StructureLogicSelect", + "StructureLogicSlotReader", + "StructureLogicSorter", + "StructureLogicSwitch", + "StructureLogicSwitch2", + "StructureLogicTransmitter", + "StructureLogicWriter", + "StructureLogicWriterSwitch", + "StructureManualHatch", + "StructureMediumConvectionRadiator", + "StructureMediumConvectionRadiatorLiquid", + "StructureMediumHangerDoor", + "StructureMediumRadiator", + "StructureMediumRadiatorLiquid", + "StructureMediumRocketGasFuelTank", + "StructureMediumRocketLiquidFuelTank", + "StructureMotionSensor", + "StructureNitrolyzer", + "StructureOccupancySensor", + "StructureOverheadShortCornerLocker", + "StructureOverheadShortLocker", + "StructurePassiveLargeRadiatorGas", + "StructurePassiveLargeRadiatorLiquid", + "StructurePassiveLiquidDrain", + "StructurePassiveVent", + "StructurePassiveVentInsulated", + "StructurePassthroughHeatExchangerGasToGas", + "StructurePassthroughHeatExchangerGasToLiquid", + "StructurePassthroughHeatExchangerLiquidToLiquid", + "StructurePictureFrameThickLandscapeLarge", + "StructurePictureFrameThickLandscapeSmall", + "StructurePictureFrameThickMountLandscapeLarge", + "StructurePictureFrameThickMountLandscapeSmall", + "StructurePictureFrameThickMountPortraitLarge", + "StructurePictureFrameThickMountPortraitSmall", + "StructurePictureFrameThickPortraitLarge", + "StructurePictureFrameThickPortraitSmall", + "StructurePictureFrameThinLandscapeLarge", + "StructurePictureFrameThinLandscapeSmall", + "StructurePictureFrameThinMountLandscapeLarge", + "StructurePictureFrameThinMountLandscapeSmall", + "StructurePictureFrameThinMountPortraitLarge", + "StructurePictureFrameThinMountPortraitSmall", + "StructurePictureFrameThinPortraitLarge", + "StructurePictureFrameThinPortraitSmall", + "StructurePipeAnalysizer", + "StructurePipeCorner", + "StructurePipeCowl", + "StructurePipeCrossJunction", + "StructurePipeCrossJunction3", + "StructurePipeCrossJunction4", + "StructurePipeCrossJunction5", + "StructurePipeCrossJunction6", + "StructurePipeHeater", + "StructurePipeIgniter", + "StructurePipeInsulatedLiquidCrossJunction", + "StructurePipeLabel", + "StructurePipeLiquidCorner", + "StructurePipeLiquidCrossJunction", + "StructurePipeLiquidCrossJunction3", + "StructurePipeLiquidCrossJunction4", + "StructurePipeLiquidCrossJunction5", + "StructurePipeLiquidCrossJunction6", + "StructurePipeLiquidStraight", + "StructurePipeLiquidTJunction", + "StructurePipeMeter", + "StructurePipeOneWayValve", + "StructurePipeOrgan", + "StructurePipeRadiator", + "StructurePipeRadiatorFlat", + "StructurePipeRadiatorFlatLiquid", + "StructurePipeStraight", + "StructurePipeTJunction", + "StructurePlanter", + "StructurePlatformLadderOpen", + "StructurePlinth", + "StructurePortablesConnector", + "StructurePowerConnector", + "StructurePowerTransmitter", + "StructurePowerTransmitterOmni", + "StructurePowerTransmitterReceiver", + "StructurePowerUmbilicalFemale", + "StructurePowerUmbilicalFemaleSide", + "StructurePowerUmbilicalMale", + "StructurePoweredVent", + "StructurePoweredVentLarge", + "StructurePressurantValve", + "StructurePressureFedGasEngine", + "StructurePressureFedLiquidEngine", + "StructurePressurePlateLarge", + "StructurePressurePlateMedium", + "StructurePressurePlateSmall", + "StructurePressureRegulator", + "StructureProximitySensor", + "StructurePumpedLiquidEngine", + "StructurePurgeValve", + "StructureRailing", + "StructureRecycler", + "StructureRefrigeratedVendingMachine", + "StructureReinforcedCompositeWindow", + "StructureReinforcedCompositeWindowSteel", + "StructureReinforcedWallPaddedWindow", + "StructureReinforcedWallPaddedWindowThin", + "StructureRocketAvionics", + "StructureRocketCelestialTracker", + "StructureRocketCircuitHousing", + "StructureRocketEngineTiny", + "StructureRocketManufactory", + "StructureRocketMiner", + "StructureRocketScanner", + "StructureRocketTower", + "StructureRocketTransformerSmall", + "StructureRover", + "StructureSDBHopper", + "StructureSDBHopperAdvanced", + "StructureSDBSilo", + "StructureSatelliteDish", + "StructureSecurityPrinter", + "StructureShelf", + "StructureShelfMedium", + "StructureShortCornerLocker", + "StructureShortLocker", + "StructureShower", + "StructureShowerPowered", + "StructureSign1x1", + "StructureSign2x1", + "StructureSingleBed", + "StructureSleeper", + "StructureSleeperLeft", + "StructureSleeperRight", + "StructureSleeperVertical", + "StructureSleeperVerticalDroid", + "StructureSmallDirectHeatExchangeGastoGas", + "StructureSmallDirectHeatExchangeLiquidtoGas", + "StructureSmallDirectHeatExchangeLiquidtoLiquid", + "StructureSmallSatelliteDish", + "StructureSmallTableBacklessDouble", + "StructureSmallTableBacklessSingle", + "StructureSmallTableDinnerSingle", + "StructureSmallTableRectangleDouble", + "StructureSmallTableRectangleSingle", + "StructureSmallTableThickDouble", + "StructureSmallTableThickSingle", + "StructureSolarPanel", + "StructureSolarPanel45", + "StructureSolarPanel45Reinforced", + "StructureSolarPanelDual", + "StructureSolarPanelDualReinforced", + "StructureSolarPanelFlat", + "StructureSolarPanelFlatReinforced", + "StructureSolarPanelReinforced", + "StructureSolidFuelGenerator", + "StructureSorter", + "StructureStacker", + "StructureStackerReverse", + "StructureStairs4x2", + "StructureStairs4x2RailL", + "StructureStairs4x2RailR", + "StructureStairs4x2Rails", + "StructureStairwellBackLeft", + "StructureStairwellBackPassthrough", + "StructureStairwellBackRight", + "StructureStairwellFrontLeft", + "StructureStairwellFrontPassthrough", + "StructureStairwellFrontRight", + "StructureStairwellNoDoors", + "StructureStirlingEngine", + "StructureStorageLocker", + "StructureSuitStorage", + "StructureTankBig", + "StructureTankBigInsulated", + "StructureTankConnector", + "StructureTankConnectorLiquid", + "StructureTankSmall", + "StructureTankSmallAir", + "StructureTankSmallFuel", + "StructureTankSmallInsulated", + "StructureToolManufactory", + "StructureTorpedoRack", + "StructureTraderWaypoint", + "StructureTransformer", + "StructureTransformerMedium", + "StructureTransformerMediumReversed", + "StructureTransformerSmall", + "StructureTransformerSmallReversed", + "StructureTurbineGenerator", + "StructureTurboVolumePump", + "StructureUnloader", + "StructureUprightWindTurbine", + "StructureValve", + "StructureVendingMachine", + "StructureVolumePump", + "StructureWallArch", + "StructureWallArchArrow", + "StructureWallArchCornerRound", + "StructureWallArchCornerSquare", + "StructureWallArchCornerTriangle", + "StructureWallArchPlating", + "StructureWallArchTwoTone", + "StructureWallCooler", + "StructureWallFlat", + "StructureWallFlatCornerRound", + "StructureWallFlatCornerSquare", + "StructureWallFlatCornerTriangle", + "StructureWallFlatCornerTriangleFlat", + "StructureWallGeometryCorner", + "StructureWallGeometryStreight", + "StructureWallGeometryT", + "StructureWallGeometryTMirrored", + "StructureWallHeater", + "StructureWallIron", + "StructureWallIron02", + "StructureWallIron03", + "StructureWallIron04", + "StructureWallLargePanel", + "StructureWallLargePanelArrow", + "StructureWallLight", + "StructureWallLightBattery", + "StructureWallPaddedArch", + "StructureWallPaddedArchCorner", + "StructureWallPaddedArchLightFittingTop", + "StructureWallPaddedArchLightsFittings", + "StructureWallPaddedCorner", + "StructureWallPaddedCornerThin", + "StructureWallPaddedNoBorder", + "StructureWallPaddedNoBorderCorner", + "StructureWallPaddedThinNoBorder", + "StructureWallPaddedThinNoBorderCorner", + "StructureWallPaddedWindow", + "StructureWallPaddedWindowThin", + "StructureWallPadding", + "StructureWallPaddingArchVent", + "StructureWallPaddingLightFitting", + "StructureWallPaddingThin", + "StructureWallPlating", + "StructureWallSmallPanelsAndHatch", + "StructureWallSmallPanelsArrow", + "StructureWallSmallPanelsMonoChrome", + "StructureWallSmallPanelsOpen", + "StructureWallSmallPanelsTwoTone", + "StructureWallVent", + "StructureWaterBottleFiller", + "StructureWaterBottleFillerBottom", + "StructureWaterBottleFillerPowered", + "StructureWaterBottleFillerPoweredBottom", + "StructureWaterDigitalValve", + "StructureWaterPipeMeter", + "StructureWaterPurifier", + "StructureWaterWallCooler", + "StructureWeatherStation", + "StructureWindTurbine", + "StructureWindowShutter" + ], + "devices": [ + "CompositeRollCover", + "DeviceLfoVolume", + "DeviceStepUnit", + "H2Combustor", + "Landingpad_DataConnectionPiece", + "Landingpad_GasConnectorInwardPiece", + "Landingpad_GasConnectorOutwardPiece", + "Landingpad_LiquidConnectorInwardPiece", + "Landingpad_LiquidConnectorOutwardPiece", + "Landingpad_ThreshholdPiece", + "LogicStepSequencer8", + "PassiveSpeaker", + "StopWatch", + "StructureAccessBridge", + "StructureActiveVent", + "StructureAdvancedComposter", + "StructureAdvancedFurnace", + "StructureAdvancedPackagingMachine", + "StructureAirConditioner", + "StructureAirlock", + "StructureAirlockGate", + "StructureAngledBench", + "StructureArcFurnace", + "StructureAreaPowerControl", + "StructureAreaPowerControlReversed", + "StructureAutoMinerSmall", + "StructureAutolathe", + "StructureAutomatedOven", + "StructureBackLiquidPressureRegulator", + "StructureBackPressureRegulator", + "StructureBasketHoop", + "StructureBattery", + "StructureBatteryCharger", + "StructureBatteryChargerSmall", + "StructureBatteryLarge", + "StructureBatteryMedium", + "StructureBatterySmall", + "StructureBeacon", + "StructureBench", + "StructureBench1", + "StructureBench2", + "StructureBench3", + "StructureBench4", + "StructureBlastDoor", + "StructureBlockBed", + "StructureCableAnalysizer", + "StructureCableFuse100k", + "StructureCableFuse1k", + "StructureCableFuse50k", + "StructureCableFuse5k", + "StructureCamera", + "StructureCapsuleTankGas", + "StructureCapsuleTankLiquid", + "StructureCargoStorageMedium", + "StructureCargoStorageSmall", + "StructureCentrifuge", + "StructureChair", + "StructureChairBacklessDouble", + "StructureChairBacklessSingle", + "StructureChairBoothCornerLeft", + "StructureChairBoothMiddle", + "StructureChairRectangleDouble", + "StructureChairRectangleSingle", + "StructureChairThickDouble", + "StructureChairThickSingle", + "StructureChuteBin", + "StructureChuteDigitalFlipFlopSplitterLeft", + "StructureChuteDigitalFlipFlopSplitterRight", + "StructureChuteDigitalValveLeft", + "StructureChuteDigitalValveRight", + "StructureChuteInlet", + "StructureChuteOutlet", + "StructureChuteUmbilicalFemale", + "StructureChuteUmbilicalFemaleSide", + "StructureChuteUmbilicalMale", + "StructureCircuitHousing", + "StructureCombustionCentrifuge", + "StructureCompositeDoor", + "StructureComputer", + "StructureCondensationChamber", + "StructureCondensationValve", + "StructureConsole", + "StructureConsoleDual", + "StructureConsoleLED1x2", + "StructureConsoleLED1x3", + "StructureConsoleLED5", + "StructureConsoleMonitor", + "StructureControlChair", + "StructureCornerLocker", + "StructureCryoTube", + "StructureCryoTubeHorizontal", + "StructureCryoTubeVertical", + "StructureDaylightSensor", + "StructureDeepMiner", + "StructureDigitalValve", + "StructureDiode", + "StructureDiodeSlide", + "StructureDockPortSide", + "StructureDrinkingFountain", + "StructureElectrolyzer", + "StructureElectronicsPrinter", + "StructureElevatorLevelFront", + "StructureElevatorLevelIndustrial", + "StructureElevatorShaft", + "StructureElevatorShaftIndustrial", + "StructureEmergencyButton", + "StructureEvaporationChamber", + "StructureExpansionValve", + "StructureFiltration", + "StructureFlashingLight", + "StructureFlatBench", + "StructureFridgeBig", + "StructureFridgeSmall", + "StructureFurnace", + "StructureGasGenerator", + "StructureGasMixer", + "StructureGasSensor", + "StructureGasTankStorage", + "StructureGasUmbilicalFemale", + "StructureGasUmbilicalFemaleSide", + "StructureGasUmbilicalMale", + "StructureGlassDoor", + "StructureGovernedGasEngine", + "StructureGroundBasedTelescope", + "StructureGrowLight", + "StructureHarvie", + "StructureHeatExchangeLiquidtoGas", + "StructureHeatExchangerGastoGas", + "StructureHeatExchangerLiquidtoLiquid", + "StructureHorizontalAutoMiner", + "StructureHydraulicPipeBender", + "StructureHydroponicsStation", + "StructureHydroponicsTrayData", + "StructureIceCrusher", + "StructureIgniter", + "StructureInteriorDoorGlass", + "StructureInteriorDoorPadded", + "StructureInteriorDoorPaddedThin", + "StructureInteriorDoorTriangle", + "StructureKlaxon", + "StructureLargeDirectHeatExchangeGastoGas", + "StructureLargeDirectHeatExchangeGastoLiquid", + "StructureLargeDirectHeatExchangeLiquidtoLiquid", + "StructureLargeExtendableRadiator", + "StructureLargeHangerDoor", + "StructureLargeSatelliteDish", + "StructureLightLong", + "StructureLightLongAngled", + "StructureLightLongWide", + "StructureLightRound", + "StructureLightRoundAngled", + "StructureLightRoundSmall", + "StructureLiquidDrain", + "StructureLiquidPipeAnalyzer", + "StructureLiquidPipeHeater", + "StructureLiquidPipeOneWayValve", + "StructureLiquidPipeRadiator", + "StructureLiquidPressureRegulator", + "StructureLiquidTankBig", + "StructureLiquidTankBigInsulated", + "StructureLiquidTankSmall", + "StructureLiquidTankSmallInsulated", + "StructureLiquidTankStorage", + "StructureLiquidTurboVolumePump", + "StructureLiquidUmbilicalFemale", + "StructureLiquidUmbilicalFemaleSide", + "StructureLiquidUmbilicalMale", + "StructureLiquidValve", + "StructureLiquidVolumePump", + "StructureLockerSmall", + "StructureLogicBatchReader", + "StructureLogicBatchSlotReader", + "StructureLogicBatchWriter", + "StructureLogicButton", + "StructureLogicCompare", + "StructureLogicDial", + "StructureLogicGate", + "StructureLogicHashGen", + "StructureLogicMath", + "StructureLogicMathUnary", + "StructureLogicMemory", + "StructureLogicMinMax", + "StructureLogicMirror", + "StructureLogicReader", + "StructureLogicReagentReader", + "StructureLogicRocketDownlink", + "StructureLogicRocketUplink", + "StructureLogicSelect", + "StructureLogicSlotReader", + "StructureLogicSorter", + "StructureLogicSwitch", + "StructureLogicSwitch2", + "StructureLogicTransmitter", + "StructureLogicWriter", + "StructureLogicWriterSwitch", + "StructureManualHatch", + "StructureMediumConvectionRadiator", + "StructureMediumConvectionRadiatorLiquid", + "StructureMediumHangerDoor", + "StructureMediumRadiator", + "StructureMediumRadiatorLiquid", + "StructureMediumRocketGasFuelTank", + "StructureMediumRocketLiquidFuelTank", + "StructureMotionSensor", + "StructureNitrolyzer", + "StructureOccupancySensor", + "StructureOverheadShortCornerLocker", + "StructureOverheadShortLocker", + "StructurePassiveLargeRadiatorGas", + "StructurePassiveLargeRadiatorLiquid", + "StructurePassiveLiquidDrain", + "StructurePassthroughHeatExchangerGasToGas", + "StructurePassthroughHeatExchangerGasToLiquid", + "StructurePassthroughHeatExchangerLiquidToLiquid", + "StructurePipeAnalysizer", + "StructurePipeHeater", + "StructurePipeIgniter", + "StructurePipeLabel", + "StructurePipeMeter", + "StructurePipeOneWayValve", + "StructurePipeRadiator", + "StructurePipeRadiatorFlat", + "StructurePipeRadiatorFlatLiquid", + "StructurePortablesConnector", + "StructurePowerConnector", + "StructurePowerTransmitter", + "StructurePowerTransmitterOmni", + "StructurePowerTransmitterReceiver", + "StructurePowerUmbilicalFemale", + "StructurePowerUmbilicalFemaleSide", + "StructurePowerUmbilicalMale", + "StructurePoweredVent", + "StructurePoweredVentLarge", + "StructurePressurantValve", + "StructurePressureFedGasEngine", + "StructurePressureFedLiquidEngine", + "StructurePressurePlateLarge", + "StructurePressurePlateMedium", + "StructurePressurePlateSmall", + "StructurePressureRegulator", + "StructureProximitySensor", + "StructurePumpedLiquidEngine", + "StructurePurgeValve", + "StructureRecycler", + "StructureRefrigeratedVendingMachine", + "StructureRocketAvionics", + "StructureRocketCelestialTracker", + "StructureRocketCircuitHousing", + "StructureRocketEngineTiny", + "StructureRocketManufactory", + "StructureRocketMiner", + "StructureRocketScanner", + "StructureRocketTransformerSmall", + "StructureSDBHopper", + "StructureSDBHopperAdvanced", + "StructureSDBSilo", + "StructureSatelliteDish", + "StructureSecurityPrinter", + "StructureShelfMedium", + "StructureShortCornerLocker", + "StructureShortLocker", + "StructureShower", + "StructureShowerPowered", + "StructureSign1x1", + "StructureSign2x1", + "StructureSingleBed", + "StructureSleeper", + "StructureSleeperLeft", + "StructureSleeperRight", + "StructureSleeperVertical", + "StructureSleeperVerticalDroid", + "StructureSmallDirectHeatExchangeGastoGas", + "StructureSmallDirectHeatExchangeLiquidtoGas", + "StructureSmallDirectHeatExchangeLiquidtoLiquid", + "StructureSmallSatelliteDish", + "StructureSolarPanel", + "StructureSolarPanel45", + "StructureSolarPanel45Reinforced", + "StructureSolarPanelDual", + "StructureSolarPanelDualReinforced", + "StructureSolarPanelFlat", + "StructureSolarPanelFlatReinforced", + "StructureSolarPanelReinforced", + "StructureSolidFuelGenerator", + "StructureSorter", + "StructureStacker", + "StructureStackerReverse", + "StructureStirlingEngine", + "StructureStorageLocker", + "StructureSuitStorage", + "StructureTankBig", + "StructureTankBigInsulated", + "StructureTankSmall", + "StructureTankSmallAir", + "StructureTankSmallFuel", + "StructureTankSmallInsulated", + "StructureToolManufactory", + "StructureTraderWaypoint", + "StructureTransformer", + "StructureTransformerMedium", + "StructureTransformerMediumReversed", + "StructureTransformerSmall", + "StructureTransformerSmallReversed", + "StructureTurbineGenerator", + "StructureTurboVolumePump", + "StructureUnloader", + "StructureUprightWindTurbine", + "StructureValve", + "StructureVendingMachine", + "StructureVolumePump", + "StructureWallCooler", + "StructureWallHeater", + "StructureWallLight", + "StructureWallLightBattery", + "StructureWaterBottleFiller", + "StructureWaterBottleFillerBottom", + "StructureWaterBottleFillerPowered", + "StructureWaterBottleFillerPoweredBottom", + "StructureWaterDigitalValve", + "StructureWaterPipeMeter", + "StructureWaterPurifier", + "StructureWaterWallCooler", + "StructureWeatherStation", + "StructureWindTurbine", + "StructureWindowShutter" + ], + "items": [ + "AccessCardBlack", + "AccessCardBlue", + "AccessCardBrown", + "AccessCardGray", + "AccessCardGreen", + "AccessCardKhaki", + "AccessCardOrange", + "AccessCardPink", + "AccessCardPurple", + "AccessCardRed", + "AccessCardWhite", + "AccessCardYellow", + "ApplianceChemistryStation", + "ApplianceDeskLampLeft", + "ApplianceDeskLampRight", + "ApplianceMicrowave", + "AppliancePackagingMachine", + "AppliancePaintMixer", + "AppliancePlantGeneticAnalyzer", + "AppliancePlantGeneticSplicer", + "AppliancePlantGeneticStabilizer", + "ApplianceReagentProcessor", + "ApplianceSeedTray", + "ApplianceTabletDock", + "AutolathePrinterMod", + "Battery_Wireless_cell", + "Battery_Wireless_cell_Big", + "CardboardBox", + "CartridgeAccessController", + "CartridgeAtmosAnalyser", + "CartridgeConfiguration", + "CartridgeElectronicReader", + "CartridgeGPS", + "CartridgeGuide", + "CartridgeMedicalAnalyser", + "CartridgeNetworkAnalyser", + "CartridgeOreScanner", + "CartridgeOreScannerColor", + "CartridgePlantAnalyser", + "CartridgeTracker", + "CircuitboardAdvAirlockControl", + "CircuitboardAirControl", + "CircuitboardAirlockControl", + "CircuitboardCameraDisplay", + "CircuitboardDoorControl", + "CircuitboardGasDisplay", + "CircuitboardGraphDisplay", + "CircuitboardHashDisplay", + "CircuitboardModeControl", + "CircuitboardPowerControl", + "CircuitboardShipDisplay", + "CircuitboardSolarControl", + "CrateMkII", + "DecayedFood", + "DynamicAirConditioner", + "DynamicCrate", + "DynamicGPR", + "DynamicGasCanisterAir", + "DynamicGasCanisterCarbonDioxide", + "DynamicGasCanisterEmpty", + "DynamicGasCanisterFuel", + "DynamicGasCanisterNitrogen", + "DynamicGasCanisterNitrousOxide", + "DynamicGasCanisterOxygen", + "DynamicGasCanisterPollutants", + "DynamicGasCanisterRocketFuel", + "DynamicGasCanisterVolatiles", + "DynamicGasCanisterWater", + "DynamicGasTankAdvanced", + "DynamicGasTankAdvancedOxygen", + "DynamicGenerator", + "DynamicHydroponics", + "DynamicLight", + "DynamicLiquidCanisterEmpty", + "DynamicMKIILiquidCanisterEmpty", + "DynamicMKIILiquidCanisterWater", + "DynamicScrubber", + "DynamicSkeleton", + "ElectronicPrinterMod", + "ElevatorCarrage", + "EntityChick", + "EntityChickenBrown", + "EntityChickenWhite", + "EntityRoosterBlack", + "EntityRoosterBrown", + "Fertilizer", + "FireArmSMG", + "FlareGun", + "Handgun", + "HandgunMagazine", + "HumanSkull", + "ImGuiCircuitboardAirlockControl", + "ItemActiveVent", + "ItemAdhesiveInsulation", + "ItemAdvancedTablet", + "ItemAlienMushroom", + "ItemAmmoBox", + "ItemAngleGrinder", + "ItemArcWelder", + "ItemAreaPowerControl", + "ItemAstroloyIngot", + "ItemAstroloySheets", + "ItemAuthoringTool", + "ItemAuthoringToolRocketNetwork", + "ItemBasketBall", + "ItemBatteryCell", + "ItemBatteryCellLarge", + "ItemBatteryCellNuclear", + "ItemBatteryCharger", + "ItemBatteryChargerSmall", + "ItemBeacon", + "ItemBiomass", + "ItemBreadLoaf", + "ItemCableAnalyser", + "ItemCableCoil", + "ItemCableCoilHeavy", + "ItemCableFuse", + "ItemCannedCondensedMilk", + "ItemCannedEdamame", + "ItemCannedMushroom", + "ItemCannedPowderedEggs", + "ItemCannedRicePudding", + "ItemCerealBar", + "ItemCharcoal", + "ItemChemLightBlue", + "ItemChemLightGreen", + "ItemChemLightRed", + "ItemChemLightWhite", + "ItemChemLightYellow", + "ItemChocolateBar", + "ItemChocolateCake", + "ItemChocolateCerealBar", + "ItemCoalOre", + "ItemCobaltOre", + "ItemCocoaPowder", + "ItemCocoaTree", + "ItemCoffeeMug", + "ItemConstantanIngot", + "ItemCookedCondensedMilk", + "ItemCookedCorn", + "ItemCookedMushroom", + "ItemCookedPowderedEggs", + "ItemCookedPumpkin", + "ItemCookedRice", + "ItemCookedSoybean", + "ItemCookedTomato", + "ItemCopperIngot", + "ItemCopperOre", + "ItemCorn", + "ItemCornSoup", + "ItemCreditCard", + "ItemCropHay", + "ItemCrowbar", + "ItemDataDisk", + "ItemDirtCanister", + "ItemDirtyOre", + "ItemDisposableBatteryCharger", + "ItemDrill", + "ItemDuctTape", + "ItemDynamicAirCon", + "ItemDynamicScrubber", + "ItemEggCarton", + "ItemElectronicParts", + "ItemElectrumIngot", + "ItemEmergencyAngleGrinder", + "ItemEmergencyArcWelder", + "ItemEmergencyCrowbar", + "ItemEmergencyDrill", + "ItemEmergencyEvaSuit", + "ItemEmergencyPickaxe", + "ItemEmergencyScrewdriver", + "ItemEmergencySpaceHelmet", + "ItemEmergencyToolBelt", + "ItemEmergencyWireCutters", + "ItemEmergencyWrench", + "ItemEmptyCan", + "ItemEvaSuit", + "ItemExplosive", + "ItemFern", + "ItemFertilizedEgg", + "ItemFilterFern", + "ItemFlagSmall", + "ItemFlashingLight", + "ItemFlashlight", + "ItemFlour", + "ItemFlowerBlue", + "ItemFlowerGreen", + "ItemFlowerOrange", + "ItemFlowerRed", + "ItemFlowerYellow", + "ItemFrenchFries", + "ItemFries", + "ItemGasCanisterCarbonDioxide", + "ItemGasCanisterEmpty", + "ItemGasCanisterFuel", + "ItemGasCanisterNitrogen", + "ItemGasCanisterNitrousOxide", + "ItemGasCanisterOxygen", + "ItemGasCanisterPollutants", + "ItemGasCanisterSmart", + "ItemGasCanisterVolatiles", + "ItemGasCanisterWater", + "ItemGasFilterCarbonDioxide", + "ItemGasFilterCarbonDioxideInfinite", + "ItemGasFilterCarbonDioxideL", + "ItemGasFilterCarbonDioxideM", + "ItemGasFilterNitrogen", + "ItemGasFilterNitrogenInfinite", + "ItemGasFilterNitrogenL", + "ItemGasFilterNitrogenM", + "ItemGasFilterNitrousOxide", + "ItemGasFilterNitrousOxideInfinite", + "ItemGasFilterNitrousOxideL", + "ItemGasFilterNitrousOxideM", + "ItemGasFilterOxygen", + "ItemGasFilterOxygenInfinite", + "ItemGasFilterOxygenL", + "ItemGasFilterOxygenM", + "ItemGasFilterPollutants", + "ItemGasFilterPollutantsInfinite", + "ItemGasFilterPollutantsL", + "ItemGasFilterPollutantsM", + "ItemGasFilterVolatiles", + "ItemGasFilterVolatilesInfinite", + "ItemGasFilterVolatilesL", + "ItemGasFilterVolatilesM", + "ItemGasFilterWater", + "ItemGasFilterWaterInfinite", + "ItemGasFilterWaterL", + "ItemGasFilterWaterM", + "ItemGasSensor", + "ItemGasTankStorage", + "ItemGlassSheets", + "ItemGlasses", + "ItemGoldIngot", + "ItemGoldOre", + "ItemGrenade", + "ItemHEMDroidRepairKit", + "ItemHardBackpack", + "ItemHardJetpack", + "ItemHardMiningBackPack", + "ItemHardSuit", + "ItemHardsuitHelmet", + "ItemHastelloyIngot", + "ItemHat", + "ItemHighVolumeGasCanisterEmpty", + "ItemHorticultureBelt", + "ItemHydroponicTray", + "ItemIce", + "ItemIgniter", + "ItemInconelIngot", + "ItemInsulation", + "ItemIntegratedCircuit10", + "ItemInvarIngot", + "ItemIronFrames", + "ItemIronIngot", + "ItemIronOre", + "ItemIronSheets", + "ItemJetpackBasic", + "ItemKitAIMeE", + "ItemKitAccessBridge", + "ItemKitAdvancedComposter", + "ItemKitAdvancedFurnace", + "ItemKitAdvancedPackagingMachine", + "ItemKitAirlock", + "ItemKitAirlockGate", + "ItemKitArcFurnace", + "ItemKitAtmospherics", + "ItemKitAutoMinerSmall", + "ItemKitAutolathe", + "ItemKitAutomatedOven", + "ItemKitBasket", + "ItemKitBattery", + "ItemKitBatteryLarge", + "ItemKitBeacon", + "ItemKitBeds", + "ItemKitBlastDoor", + "ItemKitCentrifuge", + "ItemKitChairs", + "ItemKitChute", + "ItemKitChuteUmbilical", + "ItemKitCompositeCladding", + "ItemKitCompositeFloorGrating", + "ItemKitComputer", + "ItemKitConsole", + "ItemKitCrate", + "ItemKitCrateMkII", + "ItemKitCrateMount", + "ItemKitCryoTube", + "ItemKitDeepMiner", + "ItemKitDockingPort", + "ItemKitDoor", + "ItemKitDrinkingFountain", + "ItemKitDynamicCanister", + "ItemKitDynamicGasTankAdvanced", + "ItemKitDynamicGenerator", + "ItemKitDynamicHydroponics", + "ItemKitDynamicLiquidCanister", + "ItemKitDynamicMKIILiquidCanister", + "ItemKitElectricUmbilical", + "ItemKitElectronicsPrinter", + "ItemKitElevator", + "ItemKitEngineLarge", + "ItemKitEngineMedium", + "ItemKitEngineSmall", + "ItemKitEvaporationChamber", + "ItemKitFlagODA", + "ItemKitFridgeBig", + "ItemKitFridgeSmall", + "ItemKitFurnace", + "ItemKitFurniture", + "ItemKitFuselage", + "ItemKitGasGenerator", + "ItemKitGasUmbilical", + "ItemKitGovernedGasRocketEngine", + "ItemKitGroundTelescope", + "ItemKitGrowLight", + "ItemKitHarvie", + "ItemKitHeatExchanger", + "ItemKitHorizontalAutoMiner", + "ItemKitHydraulicPipeBender", + "ItemKitHydroponicAutomated", + "ItemKitHydroponicStation", + "ItemKitIceCrusher", + "ItemKitInsulatedLiquidPipe", + "ItemKitInsulatedPipe", + "ItemKitInsulatedPipeUtility", + "ItemKitInsulatedPipeUtilityLiquid", + "ItemKitInteriorDoors", + "ItemKitLadder", + "ItemKitLandingPadAtmos", + "ItemKitLandingPadBasic", + "ItemKitLandingPadWaypoint", + "ItemKitLargeDirectHeatExchanger", + "ItemKitLargeExtendableRadiator", + "ItemKitLargeSatelliteDish", + "ItemKitLaunchMount", + "ItemKitLaunchTower", + "ItemKitLiquidRegulator", + "ItemKitLiquidTank", + "ItemKitLiquidTankInsulated", + "ItemKitLiquidTurboVolumePump", + "ItemKitLiquidUmbilical", + "ItemKitLocker", + "ItemKitLogicCircuit", + "ItemKitLogicInputOutput", + "ItemKitLogicMemory", + "ItemKitLogicProcessor", + "ItemKitLogicSwitch", + "ItemKitLogicTransmitter", + "ItemKitMotherShipCore", + "ItemKitMusicMachines", + "ItemKitPassiveLargeRadiatorGas", + "ItemKitPassiveLargeRadiatorLiquid", + "ItemKitPassthroughHeatExchanger", + "ItemKitPictureFrame", + "ItemKitPipe", + "ItemKitPipeLiquid", + "ItemKitPipeOrgan", + "ItemKitPipeRadiator", + "ItemKitPipeRadiatorLiquid", + "ItemKitPipeUtility", + "ItemKitPipeUtilityLiquid", + "ItemKitPlanter", + "ItemKitPortablesConnector", + "ItemKitPowerTransmitter", + "ItemKitPowerTransmitterOmni", + "ItemKitPoweredVent", + "ItemKitPressureFedGasEngine", + "ItemKitPressureFedLiquidEngine", + "ItemKitPressurePlate", + "ItemKitPumpedLiquidEngine", + "ItemKitRailing", + "ItemKitRecycler", + "ItemKitRegulator", + "ItemKitReinforcedWindows", + "ItemKitResearchMachine", + "ItemKitRespawnPointWallMounted", + "ItemKitRocketAvionics", + "ItemKitRocketBattery", + "ItemKitRocketCargoStorage", + "ItemKitRocketCelestialTracker", + "ItemKitRocketCircuitHousing", + "ItemKitRocketDatalink", + "ItemKitRocketGasFuelTank", + "ItemKitRocketLiquidFuelTank", + "ItemKitRocketManufactory", + "ItemKitRocketMiner", + "ItemKitRocketScanner", + "ItemKitRocketTransformerSmall", + "ItemKitRoverFrame", + "ItemKitRoverMKI", + "ItemKitSDBHopper", + "ItemKitSatelliteDish", + "ItemKitSecurityPrinter", + "ItemKitSensor", + "ItemKitShower", + "ItemKitSign", + "ItemKitSleeper", + "ItemKitSmallDirectHeatExchanger", + "ItemKitSmallSatelliteDish", + "ItemKitSolarPanel", + "ItemKitSolarPanelBasic", + "ItemKitSolarPanelBasicReinforced", + "ItemKitSolarPanelReinforced", + "ItemKitSolidGenerator", + "ItemKitSorter", + "ItemKitSpeaker", + "ItemKitStacker", + "ItemKitStairs", + "ItemKitStairwell", + "ItemKitStandardChute", + "ItemKitStirlingEngine", + "ItemKitSuitStorage", + "ItemKitTables", + "ItemKitTank", + "ItemKitTankInsulated", + "ItemKitToolManufactory", + "ItemKitTransformer", + "ItemKitTransformerSmall", + "ItemKitTurbineGenerator", + "ItemKitTurboVolumePump", + "ItemKitUprightWindTurbine", + "ItemKitVendingMachine", + "ItemKitVendingMachineRefrigerated", + "ItemKitWall", + "ItemKitWallArch", + "ItemKitWallFlat", + "ItemKitWallGeometry", + "ItemKitWallIron", + "ItemKitWallPadded", + "ItemKitWaterBottleFiller", + "ItemKitWaterPurifier", + "ItemKitWeatherStation", + "ItemKitWindTurbine", + "ItemKitWindowShutter", + "ItemLabeller", + "ItemLaptop", + "ItemLeadIngot", + "ItemLeadOre", + "ItemLightSword", + "ItemLiquidCanisterEmpty", + "ItemLiquidCanisterSmart", + "ItemLiquidDrain", + "ItemLiquidPipeAnalyzer", + "ItemLiquidPipeHeater", + "ItemLiquidPipeValve", + "ItemLiquidPipeVolumePump", + "ItemLiquidTankStorage", + "ItemMKIIAngleGrinder", + "ItemMKIIArcWelder", + "ItemMKIICrowbar", + "ItemMKIIDrill", + "ItemMKIIDuctTape", + "ItemMKIIMiningDrill", + "ItemMKIIScrewdriver", + "ItemMKIIWireCutters", + "ItemMKIIWrench", + "ItemMarineBodyArmor", + "ItemMarineHelmet", + "ItemMilk", + "ItemMiningBackPack", + "ItemMiningBelt", + "ItemMiningBeltMKII", + "ItemMiningCharge", + "ItemMiningDrill", + "ItemMiningDrillHeavy", + "ItemMiningDrillPneumatic", + "ItemMkIIToolbelt", + "ItemMuffin", + "ItemMushroom", + "ItemNVG", + "ItemNickelIngot", + "ItemNickelOre", + "ItemNitrice", + "ItemOxite", + "ItemPassiveVent", + "ItemPassiveVentInsulated", + "ItemPeaceLily", + "ItemPickaxe", + "ItemPillHeal", + "ItemPillStun", + "ItemPipeAnalyizer", + "ItemPipeCowl", + "ItemPipeDigitalValve", + "ItemPipeGasMixer", + "ItemPipeHeater", + "ItemPipeIgniter", + "ItemPipeLabel", + "ItemPipeLiquidRadiator", + "ItemPipeMeter", + "ItemPipeRadiator", + "ItemPipeValve", + "ItemPipeVolumePump", + "ItemPlainCake", + "ItemPlantEndothermic_Creative", + "ItemPlantEndothermic_Genepool1", + "ItemPlantEndothermic_Genepool2", + "ItemPlantSampler", + "ItemPlantSwitchGrass", + "ItemPlantThermogenic_Creative", + "ItemPlantThermogenic_Genepool1", + "ItemPlantThermogenic_Genepool2", + "ItemPlasticSheets", + "ItemPotato", + "ItemPotatoBaked", + "ItemPowerConnector", + "ItemPumpkin", + "ItemPumpkinPie", + "ItemPumpkinSoup", + "ItemPureIce", + "ItemPureIceCarbonDioxide", + "ItemPureIceHydrogen", + "ItemPureIceLiquidCarbonDioxide", + "ItemPureIceLiquidHydrogen", + "ItemPureIceLiquidNitrogen", + "ItemPureIceLiquidNitrous", + "ItemPureIceLiquidOxygen", + "ItemPureIceLiquidPollutant", + "ItemPureIceLiquidVolatiles", + "ItemPureIceNitrogen", + "ItemPureIceNitrous", + "ItemPureIceOxygen", + "ItemPureIcePollutant", + "ItemPureIcePollutedWater", + "ItemPureIceSteam", + "ItemPureIceVolatiles", + "ItemRTG", + "ItemRTGSurvival", + "ItemReagentMix", + "ItemRemoteDetonator", + "ItemReusableFireExtinguisher", + "ItemRice", + "ItemRoadFlare", + "ItemRocketMiningDrillHead", + "ItemRocketMiningDrillHeadDurable", + "ItemRocketMiningDrillHeadHighSpeedIce", + "ItemRocketMiningDrillHeadHighSpeedMineral", + "ItemRocketMiningDrillHeadIce", + "ItemRocketMiningDrillHeadLongTerm", + "ItemRocketMiningDrillHeadMineral", + "ItemRocketScanningHead", + "ItemScanner", + "ItemScrewdriver", + "ItemSecurityCamera", + "ItemSensorLenses", + "ItemSensorProcessingUnitCelestialScanner", + "ItemSensorProcessingUnitMesonScanner", + "ItemSensorProcessingUnitOreScanner", + "ItemSiliconIngot", + "ItemSiliconOre", + "ItemSilverIngot", + "ItemSilverOre", + "ItemSolderIngot", + "ItemSolidFuel", + "ItemSoundCartridgeBass", + "ItemSoundCartridgeDrums", + "ItemSoundCartridgeLeads", + "ItemSoundCartridgeSynth", + "ItemSoyOil", + "ItemSoybean", + "ItemSpaceCleaner", + "ItemSpaceHelmet", + "ItemSpaceIce", + "ItemSpaceOre", + "ItemSpacepack", + "ItemSprayCanBlack", + "ItemSprayCanBlue", + "ItemSprayCanBrown", + "ItemSprayCanGreen", + "ItemSprayCanGrey", + "ItemSprayCanKhaki", + "ItemSprayCanOrange", + "ItemSprayCanPink", + "ItemSprayCanPurple", + "ItemSprayCanRed", + "ItemSprayCanWhite", + "ItemSprayCanYellow", + "ItemSprayGun", + "ItemSteelFrames", + "ItemSteelIngot", + "ItemSteelSheets", + "ItemStelliteGlassSheets", + "ItemStelliteIngot", + "ItemSugar", + "ItemSugarCane", + "ItemSuitModCryogenicUpgrade", + "ItemTablet", + "ItemTerrainManipulator", + "ItemTomato", + "ItemTomatoSoup", + "ItemToolBelt", + "ItemTropicalPlant", + "ItemUraniumOre", + "ItemVolatiles", + "ItemWallCooler", + "ItemWallHeater", + "ItemWallLight", + "ItemWaspaloyIngot", + "ItemWaterBottle", + "ItemWaterPipeDigitalValve", + "ItemWaterPipeMeter", + "ItemWaterWallCooler", + "ItemWearLamp", + "ItemWeldingTorch", + "ItemWheat", + "ItemWireCutters", + "ItemWirelessBatteryCellExtraLarge", + "ItemWreckageAirConditioner1", + "ItemWreckageAirConditioner2", + "ItemWreckageHydroponicsTray1", + "ItemWreckageLargeExtendableRadiator01", + "ItemWreckageStructureRTG1", + "ItemWreckageStructureWeatherStation001", + "ItemWreckageStructureWeatherStation002", + "ItemWreckageStructureWeatherStation003", + "ItemWreckageStructureWeatherStation004", + "ItemWreckageStructureWeatherStation005", + "ItemWreckageStructureWeatherStation006", + "ItemWreckageStructureWeatherStation007", + "ItemWreckageStructureWeatherStation008", + "ItemWreckageTurbineGenerator1", + "ItemWreckageTurbineGenerator2", + "ItemWreckageTurbineGenerator3", + "ItemWreckageWallCooler1", + "ItemWreckageWallCooler2", + "ItemWrench", + "KitSDBSilo", + "KitStructureCombustionCentrifuge", + "Lander", + "Meteorite", + "MonsterEgg", + "MotherboardComms", + "MotherboardLogic", + "MotherboardMissionControl", + "MotherboardProgrammableChip", + "MotherboardRockets", + "MotherboardSorter", + "MothershipCore", + "NpcChick", + "NpcChicken", + "PipeBenderMod", + "PortableComposter", + "PortableSolarPanel", + "ReagentColorBlue", + "ReagentColorGreen", + "ReagentColorOrange", + "ReagentColorRed", + "ReagentColorYellow", + "Robot", + "RoverCargo", + "Rover_MkI", + "SMGMagazine", + "SeedBag_Cocoa", + "SeedBag_Corn", + "SeedBag_Fern", + "SeedBag_Mushroom", + "SeedBag_Potato", + "SeedBag_Pumpkin", + "SeedBag_Rice", + "SeedBag_Soybean", + "SeedBag_SugarCane", + "SeedBag_Switchgrass", + "SeedBag_Tomato", + "SeedBag_Wheet", + "SpaceShuttle", + "ToolPrinterMod", + "ToyLuna", + "UniformCommander", + "UniformMarine", + "UniformOrangeJumpSuit", + "WeaponEnergy", + "WeaponPistolEnergy", + "WeaponRifleEnergy", + "WeaponTorpedo" + ], + "logicableItems": [ + "Battery_Wireless_cell", + "Battery_Wireless_cell_Big", + "DynamicGPR", + "DynamicLight", + "ItemAdvancedTablet", + "ItemAngleGrinder", + "ItemArcWelder", + "ItemBatteryCell", + "ItemBatteryCellLarge", + "ItemBatteryCellNuclear", + "ItemBeacon", + "ItemDrill", + "ItemEmergencyAngleGrinder", + "ItemEmergencyArcWelder", + "ItemEmergencyDrill", + "ItemEmergencySpaceHelmet", + "ItemFlashlight", + "ItemHardBackpack", + "ItemHardJetpack", + "ItemHardSuit", + "ItemHardsuitHelmet", + "ItemIntegratedCircuit10", + "ItemJetpackBasic", + "ItemLabeller", + "ItemLaptop", + "ItemMKIIAngleGrinder", + "ItemMKIIArcWelder", + "ItemMKIIDrill", + "ItemMKIIMiningDrill", + "ItemMiningBeltMKII", + "ItemMiningDrill", + "ItemMiningDrillHeavy", + "ItemMkIIToolbelt", + "ItemNVG", + "ItemPlantSampler", + "ItemRemoteDetonator", + "ItemSensorLenses", + "ItemSpaceHelmet", + "ItemSpacepack", + "ItemTablet", + "ItemTerrainManipulator", + "ItemWearLamp", + "ItemWirelessBatteryCellExtraLarge", + "PortableSolarPanel", + "Robot", + "RoverCargo", + "Rover_MkI", + "WeaponEnergy", + "WeaponPistolEnergy", + "WeaponRifleEnergy" + ], + "suits": [ + "ItemEmergencyEvaSuit", + "ItemEvaSuit", + "ItemHardSuit" + ], + "circuitHolders": [ + "H2Combustor", + "ItemAdvancedTablet", + "ItemHardSuit", + "ItemLaptop", + "Robot", + "StructureAirConditioner", + "StructureCircuitHousing", + "StructureCombustionCentrifuge", + "StructureElectrolyzer", + "StructureFiltration", + "StructureNitrolyzer", + "StructureRocketCircuitHousing" + ] } \ No newline at end of file diff --git a/xtask/src/generate/database.rs b/xtask/src/generate/database.rs index 73b1746..83bfb0c 100644 --- a/xtask/src/generate/database.rs +++ b/xtask/src/generate/database.rs @@ -186,7 +186,7 @@ pub fn generate_database( circuit_holders, }; - let data_path = workspace.join("data"); + let data_path = workspace.join("www").join("data"); if !data_path.exists() { std::fs::create_dir(&data_path)?; } From c1f4cb23d43cf7f956a78781a40fe91f517d90f9 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Wed, 29 May 2024 00:27:28 -0700 Subject: [PATCH 34/50] refactor(frontend): use new frozen object to fill values for baseObject mixin, proxy vm to webworker to avoid hogging main thread --- ic10emu/src/errors.rs | 2 +- ic10emu/src/interpreter.rs | 11 +- ic10emu/src/vm.rs | 109 ++++- ic10emu/src/vm/object/stationpedia.rs | 19 +- .../structs/integrated_circuit.rs | 5 +- ic10emu/src/vm/object/templates.rs | 57 ++- ic10emu/src/vm/object/traits.rs | 52 +- ic10emu_wasm/src/lib.rs | 76 ++- ic10emu_wasm/src/types.rs | 76 --- ic10emu_wasm/src/types.ts | 169 ------- www/package.json | 1 + www/pnpm-lock.yaml | 7 + www/src/ts/utils.ts | 100 +++- www/src/ts/virtual_machine/base_device.ts | 327 ++++++++----- www/src/ts/virtual_machine/controls.ts | 4 +- .../ts/virtual_machine/device/add_device.ts | 8 +- www/src/ts/virtual_machine/device/card.ts | 42 +- .../ts/virtual_machine/device/device_list.ts | 4 +- www/src/ts/virtual_machine/device/fields.ts | 8 +- www/src/ts/virtual_machine/device/pins.ts | 8 +- www/src/ts/virtual_machine/device/slot.ts | 34 +- .../virtual_machine/device/slot_add_dialog.ts | 24 +- www/src/ts/virtual_machine/device/template.ts | 6 +- www/src/ts/virtual_machine/device_db.ts | 95 ---- www/src/ts/virtual_machine/index.ts | 455 ++++++++++-------- www/src/ts/virtual_machine/stack.ts | 2 +- www/src/ts/virtual_machine/vm_worker.ts | 41 ++ 27 files changed, 946 insertions(+), 796 deletions(-) delete mode 100644 ic10emu_wasm/src/types.rs delete mode 100644 ic10emu_wasm/src/types.ts delete mode 100644 www/src/ts/virtual_machine/device_db.ts create mode 100644 www/src/ts/virtual_machine/vm_worker.ts diff --git a/ic10emu/src/errors.rs b/ic10emu/src/errors.rs index 085680e..21d061f 100644 --- a/ic10emu/src/errors.rs +++ b/ic10emu/src/errors.rs @@ -207,7 +207,7 @@ pub enum ICError { WriteOnlyField(String), #[error("device has no field '{0}'")] DeviceHasNoField(String), - #[error("device has not ic")] + #[error("device has no ic")] DeviceHasNoIC, #[error("unknown device '{0}'")] UnknownDeviceId(f64), diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index 3050af9..4db630a 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -185,9 +185,10 @@ impl Program { } } - pub fn get_line(&self, line: usize) -> Result<&Instruction, ICError> { + pub fn get_line(&self, line: usize) -> Result { self.instructions .get(line) + .cloned() .ok_or(ICError::InstructionPointerOutOfRange(line)) } } @@ -236,8 +237,8 @@ mod tests { println!("VM built"); let frozen_ic = FrozenObject { - obj_info: ObjectInfo::with_prefab(Prefab::Hash( - StationpediaPrefab::ItemIntegratedCircuit10 as i32, + obj_info: ObjectInfo::with_prefab(Prefab::Name( + StationpediaPrefab::ItemIntegratedCircuit10.to_string(), )), database_template: true, template: None, @@ -246,8 +247,8 @@ mod tests { println!("Adding IC"); let ic = vm.add_object_from_frozen(frozen_ic)?; let frozen_circuit_holder = FrozenObject { - obj_info: ObjectInfo::with_prefab(Prefab::Hash( - StationpediaPrefab::StructureCircuitHousing as i32, + obj_info: ObjectInfo::with_prefab(Prefab::Name( + StationpediaPrefab::StructureCircuitHousing.to_string(), )), database_template: true, template: None, diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index 9666617..d8ca053 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -6,7 +6,7 @@ use crate::{ interpreter::ICState, network::{CableConnectionType, CableNetwork, Connection, FrozenCableNetwork}, vm::object::{ - templates::{FrozenObject, Prefab}, + templates::{FrozenObject, FrozenObjectFull, Prefab}, traits::ParentSlotInfo, ObjectID, SlotOccupantInfo, VMObject, }, @@ -46,7 +46,7 @@ pub struct VM { /// list of object id's touched on the last operation operation_modified: RefCell>, - template_database: Option>, + template_database: RefCell>>, } #[derive(Debug, Default)] @@ -92,7 +92,7 @@ impl VM { network_id_space: RefCell::new(network_id_space), random: Rc::new(RefCell::new(crate::rand_mscorlib::Random::new())), operation_modified: RefCell::new(Vec::new()), - template_database: stationeers_data::build_prefab_database(), + template_database: RefCell::new(stationeers_data::build_prefab_database()), }); let default_network = VMObject::new(CableNetwork::new(default_network_key, vm.clone())); @@ -105,30 +105,41 @@ impl VM { /// get a random f64 value using a mscorlib rand PRNG /// (Stationeers, being written in .net, using mscorlib's rand) - pub fn random_f64(&self) -> f64 { + pub fn random_f64(self: &Rc) -> f64 { self.random.borrow_mut().next_f64() } /// Take ownership of an iterable the produces (prefab hash, ObjectTemplate) pairs and build a prefab /// database pub fn import_template_database( - &mut self, + self: &Rc, db: impl IntoIterator, ) { - self.template_database.replace(db.into_iter().collect()); + self.template_database + .borrow_mut() + .replace(db.into_iter().collect()); } /// Get a Object Template by either prefab name or hash - pub fn get_template(&self, prefab: Prefab) -> Option { + 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 strusts. /// See also `add_objects_frozen` /// Returns the built objects' IDs @@ -334,7 +345,7 @@ impl VM { .ok_or(VMError::UnknownId(id))?; { let mut obj_ref = obj.borrow_mut(); - if let Some(programmable) = obj_ref.as_mut_programmable() { + if let Some(programmable) = obj_ref.as_mut_source_code() { programmable.set_source_code(code)?; return Ok(true); } @@ -393,6 +404,72 @@ impl VM { Err(VMError::NoIC(id)) } + /// Get program code + /// Object Id is the programmable Id or the circuit holder's id + 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 + 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 pub fn set_register( @@ -1216,13 +1293,27 @@ impl VM { Ok(last) } - pub fn freeze_object(self: &Rc, id: ObjectID) -> Result { + 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)?) } + 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() + } + pub fn save_vm_state(self: &Rc) -> Result { Ok(FrozenVM { objects: self diff --git a/ic10emu/src/vm/object/stationpedia.rs b/ic10emu/src/vm/object/stationpedia.rs index fc1ac74..6eb2f23 100644 --- a/ic10emu/src/vm/object/stationpedia.rs +++ b/ic10emu/src/vm/object/stationpedia.rs @@ -1,9 +1,6 @@ use std::rc::Rc; -use stationeers_data::{ - enums::prefabs::StationpediaPrefab, - templates::{ObjectTemplate}, -}; +use stationeers_data::{enums::prefabs::StationpediaPrefab, templates::ObjectTemplate}; use crate::{ errors::TemplateError, @@ -29,10 +26,12 @@ pub fn object_from_frozen( vm: &Rc, ) -> Result, TemplateError> { #[allow(clippy::cast_possible_wrap)] - let hash = match &obj.prefab { - Some(Prefab::Hash(hash)) => *hash, - Some(Prefab::Name(name)) => const_crc32::crc32(name.as_bytes()) as i32, - None => return Ok(None), + 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); @@ -84,7 +83,7 @@ pub fn object_from_frozen( .map(TryInto::try_into) .transpose() .map_err(|vec: Vec| TemplateError::MemorySize(vec.len(), 512))? - .unwrap_or( [0.0f64; 512]), + .unwrap_or([0.0f64; 512]), parent_slot: None, registers: obj .circuit @@ -92,7 +91,7 @@ pub fn object_from_frozen( .map(|circuit| circuit.registers.clone().try_into()) .transpose() .map_err(|vec: Vec| TemplateError::MemorySize(vec.len(), 18))? - .unwrap_or( [0.0f64; 18]), + .unwrap_or([0.0f64; 18]), ip: obj .circuit .as_ref() diff --git a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs index 90aab2c..c4f0947 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs @@ -231,9 +231,12 @@ impl SourceCode for ItemIntegratedCircuit10 { fn get_source_code(&self) -> String { self.code.clone() } - fn get_line(&self, line: usize) -> Result<&Instruction, ICError> { + 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 { diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index 9075312..16cbdd3 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -1,4 +1,4 @@ -use std::{collections::BTreeMap, rc::Rc, str::FromStr}; +use std::{collections::BTreeMap, fmt::Display, rc::Rc, str::FromStr}; use crate::{ errors::TemplateError, @@ -69,7 +69,7 @@ impl std::fmt::Display for Prefab { pub struct ObjectInfo { pub name: Option, pub id: Option, - pub prefab: Option, + pub prefab: Option, pub slots: Option>, pub damage: Option, pub device_pins: Option>, @@ -80,6 +80,7 @@ pub struct ObjectInfo { pub entity: Option, pub source_code: Option, pub circuit: Option, + pub socketed_ic: Option, } impl From<&VMObject> for ObjectInfo { @@ -88,7 +89,7 @@ impl From<&VMObject> for ObjectInfo { ObjectInfo { name: Some(obj_ref.get_name().value.clone()), id: Some(*obj_ref.get_id()), - prefab: Some(Prefab::Hash(obj_ref.get_prefab().hash)), + prefab: Some(obj_ref.get_prefab().value.clone()), slots: None, damage: None, device_pins: None, @@ -99,6 +100,7 @@ impl From<&VMObject> for ObjectInfo { entity: None, source_code: None, circuit: None, + socketed_ic: None, } } } @@ -106,10 +108,16 @@ impl From<&VMObject> for ObjectInfo { impl ObjectInfo { /// Build empty info with a prefab name pub fn with_prefab(prefab: Prefab) -> Self { + 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), + prefab: Some(prefab_name), slots: None, damage: None, device_pins: None, @@ -120,6 +128,7 @@ impl ObjectInfo { entity: None, source_code: None, circuit: None, + socketed_ic: None, } } @@ -151,6 +160,9 @@ impl ObjectInfo { 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 } @@ -298,6 +310,24 @@ impl ObjectInfo { }); 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, } #[derive(Debug, Clone, Deserialize, Serialize)] @@ -332,8 +362,9 @@ impl FrozenObject { .prefab .as_ref() .map(|prefab| { - vm.get_template(prefab.clone()) - .ok_or(TemplateError::NoTemplateForPrefab(prefab.clone())) + vm.get_template(Prefab::Name(prefab.clone())).ok_or( + TemplateError::NoTemplateForPrefab(Prefab::Name(prefab.clone())), + ) }) .transpose()? .ok_or(TemplateError::MissingPrefab) @@ -827,28 +858,24 @@ impl FrozenObject { } } - pub fn freeze_object(obj: &VMObject, vm: &Rc) -> Result { + 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 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)), + || try_template_from_interfaces(&interfaces, obj), |template| { - database_template = true; - Some(Ok(template)) + Ok(template) }, - ) - .transpose()?; + )?; - Ok(FrozenObject { + Ok(FrozenObjectFull { obj_info, template, - database_template, }) } diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index ccd20cb..c1172e0 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -143,7 +143,9 @@ tag_object_traits! { 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<&Instruction, ICError>; + 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 { @@ -497,3 +499,51 @@ impl Debug for dyn Object { ) } } + +impl SourceCode for T { + 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/src/lib.rs b/ic10emu_wasm/src/lib.rs index 8afdf0f..ebd7c35 100644 --- a/ic10emu_wasm/src/lib.rs +++ b/ic10emu_wasm/src/lib.rs @@ -3,18 +3,21 @@ mod utils; // mod types; use ic10emu::{ - errors::VMError, + errors::{ICError, VMError}, vm::{ - object::{templates::FrozenObject, ObjectID, VMObject}, + object::{templates::{FrozenObject, FrozenObjectFull}, ObjectID}, FrozenVM, VM, }, }; use itertools::Itertools; use serde_derive::{Deserialize, Serialize}; -use stationeers_data::enums::script::{LogicSlotType, LogicType}; +use stationeers_data::{ + enums::script::{LogicSlotType, LogicType}, + templates::ObjectTemplate, +}; -use std::rc::Rc; +use std::{collections::BTreeMap, rc::Rc}; use wasm_bindgen::prelude::*; @@ -39,6 +42,28 @@ pub struct VMRef { 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 FrozenObjects(Vec); + +#[derive(Clone, Debug, Serialize, Deserialize, Tsify)] +#[tsify(into_wasm_abi, from_wasm_abi)] +pub struct CompileErrors(Vec); + #[wasm_bindgen] impl VMRef { #[wasm_bindgen(constructor)] @@ -46,8 +71,18 @@ impl VMRef { VMRef { vm: VM::new() } } - #[wasm_bindgen(js_name = "addDeviceFromTemplate")] - pub fn add_device_from_template(&self, frozen: FrozenObject) -> Result { + #[wasm_bindgen(js_name = "importTemplateDatabase")] + pub fn import_template_database(&self, db: TemplateDatabase) { + self.vm.import_template_database(db); + } + + #[wasm_bindgen(js_name = "getTemplateDatabase")] + pub fn get_template_database(&self) -> TemplateDatabase { + TemplateDatabase(self.vm.get_template_database()) + } + + #[wasm_bindgen(js_name = "addObjectFromFrozen")] + pub fn add_object_from_frozen(&self, frozen: FrozenObject) -> Result { web_sys::console::log_2( &"(wasm) adding device".into(), &serde_wasm_bindgen::to_value(&frozen).unwrap(), @@ -55,14 +90,19 @@ impl VMRef { Ok(self.vm.add_object_from_frozen(frozen)?) } - #[wasm_bindgen(js_name = "getDevice")] - pub fn get_object(&self, id: ObjectID) -> Option { - self.vm.get_object(id) + // #[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 = "freezeDevice")] - 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 = "setCode")] @@ -77,6 +117,18 @@ impl VMRef { Ok(self.vm.set_code_invalid(id, code)?) } + #[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 = "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 = "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)?) diff --git a/ic10emu_wasm/src/types.rs b/ic10emu_wasm/src/types.rs deleted file mode 100644 index 954f698..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_derive::{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 dade7d4..0000000 --- a/ic10emu_wasm/src/types.ts +++ /dev/null @@ -1,169 +0,0 @@ -export type MemoryAccess = "Read" | "Write" | "ReadWrite"; - -export interface LogicField { - field_type: MemoryAccess; - 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 OperandLogicSlotType = { readonly LogicSlotType: 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 - | OperandLogicSlotType - | 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: LogicSlotType, value: number, force: boolean): void; - getSlotField(slot: number, field: LogicSlotType): number; -} - -export interface SlotOccupantTemplate { - id?: number; - fields: { [key in LogicSlotType]?: 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/www/package.json b/www/package.json index 6f0c503..29274c8 100644 --- a/www/package.json +++ b/www/package.json @@ -55,6 +55,7 @@ "bootstrap": "^5.3.3", "bson": "^6.6.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", diff --git a/www/pnpm-lock.yaml b/www/pnpm-lock.yaml index f9db843..0f5bb9f 100644 --- a/www/pnpm-lock.yaml +++ b/www/pnpm-lock.yaml @@ -32,6 +32,9 @@ dependencies: 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 @@ -1634,6 +1637,10 @@ packages: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: true + /comlink@4.4.1: + resolution: {integrity: sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==} + dev: false + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true diff --git a/www/src/ts/utils.ts b/www/src/ts/utils.ts index 9dcdbb7..386fe4c 100644 --- a/www/src/ts/utils.ts +++ b/www/src/ts/utils.ts @@ -13,7 +13,31 @@ export function docReady(fn: () => void) { } function isZeroNegative(zero: number) { - return Object.is(zero, -0) + return Object.is(zero, -0); +} + +function makeCRCTable() { + let c; + const crcTable = []; + for (let n = 0; n < 256; n++) { + c = n; + for (let k = 0; k < 8; k++) { + c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1; + } + crcTable[n] = c; + } + return crcTable; +} + +const crcTable = makeCRCTable(); + +// Signed crc32 for string +export function crc32(str: string): number { + let crc = 0 ^ -1; + for (let i = 0, len = str.length; i < len; i++) { + crc = (crc >>> 8) ^ crcTable[(crc ^ str.charCodeAt(i)) & 0xff]; + } + return crc ^ -1; } export function numberToString(n: number): string { @@ -68,10 +92,54 @@ export function fromJson(value: string): any { return JSON.parse(value, reviver); } + +export function compareMaps(map1: Map, map2: Map): boolean { + let testVal; + if (map1.size !== map2.size) { + return false; + } + for (let [key, val] of map1) { + testVal = map2.get(key); + if((testVal === undefined && !map2.has(key)) || !structuralEqual(val, testVal)) { + return false; + } + } + return true; +} + +export function compareArrays( array1: any[], array2: any[]): boolean { + if (array1.length !== array2.length) { + return false; + } + for ( let i = 0, len = array1.length; i < len; i++) { + if (!structuralEqual(array1[i], array2[i])) { + return false; + } + } + return true; +} + +export function compareStructuralObjects(a: object, b: object): boolean { + const aProps = new Map(Object.entries(a)); + const bProps = new Map(Object.entries(b)); + return compareMaps(aProps, bProps); +} export function structuralEqual(a: any, b: any): boolean { - const _a = JSON.stringify(a, replacer); - const _b = JSON.stringify(b, replacer); - return _a === _b; + const aType = typeof a; + const bType = typeof b; + if ( aType !== typeof bType) { + return false; + } + if (a instanceof Map && b instanceof Map) { + return compareMaps(a, b); + } + if (Array.isArray(a) && Array.isArray(b)) { + return compareArrays(a, b); + } + if (aType === "object" && bType === "object") { + return compareStructuralObjects(a, b); + } + return a !== b; } // probably not needed, fetch() exists now @@ -144,7 +212,7 @@ export async function saveFile(content: BlobPart) { } else { console.log("saving file via hidden link event"); var a = document.createElement("a"); - const date = new Date().valueOf().toString(16) ; + const date = new Date().valueOf().toString(16); a.download = `code_${date}.ic10`; a.href = window.URL.createObjectURL(blob); a.click(); @@ -243,6 +311,26 @@ export function parseIntWithHexOrBinary(s: string): number { return parseInt(s); } -export function clamp (val: number, min: number, max: number) { +export function clamp(val: number, min: number, max: number) { return Math.min(Math.max(val, min), max); } + +export type TypedEventTarget = { + new (): TypedEventTargetInterface; +}; + +interface TypedEventTargetInterface extends EventTarget { + addEventListener( + type: K, + callback: ( + event: EventMap[K] extends Event ? EventMap[K] : never, + ) => EventMap[K] extends Event ? void : never, + options?: boolean | AddEventListenerOptions, + ): void; + + addEventListener( + type: string, + callback: EventListenerOrEventListenerObject | null, + options?: EventListenerOptions | boolean, + ): void; +} diff --git a/www/src/ts/virtual_machine/base_device.ts b/www/src/ts/virtual_machine/base_device.ts index cdcae29..230da86 100644 --- a/www/src/ts/virtual_machine/base_device.ts +++ b/www/src/ts/virtual_machine/base_device.ts @@ -1,53 +1,51 @@ import { property, state } from "lit/decorators.js"; import type { - DeviceRef, - LogicFields, - Reagents, Slot, Connection, ICError, - Registers, - Stack, - Aliases, - Defines, - Pins, LogicType, + LogicField, + Operand, + ObjectID, + TemplateDatabase, + FrozenObjectFull, } from "ic10emu_wasm"; -import { structuralEqual } from "utils"; +import { crc32, structuralEqual } from "utils"; import { LitElement, PropertyValueMap } from "lit"; -import type { DeviceDB } from "./device_db"; type Constructor = new (...args: any[]) => T; -export declare class VMDeviceMixinInterface { - deviceID: number; - activeICId: number; - device: DeviceRef; +export declare class VMObjectMixinInterface { + objectID: ObjectID; + activeICId: ObjectID; + obj: FrozenObjectFull; name: string | null; nameHash: number | null; prefabName: string | null; - fields: LogicFields; + prefabHash: number | null; + fields: Map; slots: Slot[]; - reagents: Reagents; + reagents: Map; connections: Connection[]; icIP: number; icOpCount: number; icState: string; errors: ICError[]; - registers: Registers | null; - stack: Stack | null; - aliases: Aliases | null; - defines: Defines | null; - pins: Pins | null; + registers: number[] | null; + memory: number[] | null; + aliases: Map | null; + defines: Map | null; + numPins: number | null; + pins: Map | null; _handleDeviceModified(e: CustomEvent): void; updateDevice(): void; updateIC(): void; - subscribe(...sub: VMDeviceMixinSubscription[]): void; - unsubscribe(filter: (sub: VMDeviceMixinSubscription) => boolean): void; + subscribe(...sub: VMObjectMixinSubscription[]): void; + unsubscribe(filter: (sub: VMObjectMixinSubscription) => boolean): void; } -export type VMDeviceMixinSubscription = +export type VMObjectMixinSubscription = | "name" | "nameHash" | "prefabName" @@ -62,10 +60,10 @@ export type VMDeviceMixinSubscription = | { slot: number } | "visible-devices"; -export const VMDeviceMixin = >( +export const VMObjectMixin = >( superClass: T, ) => { - class VMDeviceMixinClass extends superClass { + class VMObjectMixinClass extends superClass { private _deviceID: number; get deviceID() { return this._deviceID; @@ -76,39 +74,41 @@ export const VMDeviceMixin = >( this.updateDevice(); } - @state() private deviceSubscriptions: VMDeviceMixinSubscription[] = []; + @state() private objectSubscriptions: VMObjectMixinSubscription[] = []; - subscribe(...sub: VMDeviceMixinSubscription[]) { - this.deviceSubscriptions = this.deviceSubscriptions.concat(sub); + subscribe(...sub: VMObjectMixinSubscription[]) { + this.objectSubscriptions = this.objectSubscriptions.concat(sub); } // remove subscripotions matching the filter - unsubscribe(filter: (sub: VMDeviceMixinSubscription) => boolean) { - this.deviceSubscriptions = this.deviceSubscriptions.filter( + unsubscribe(filter: (sub: VMObjectMixinSubscription) => boolean) { + this.objectSubscriptions = this.objectSubscriptions.filter( (sub) => !filter(sub), ); } - device: DeviceRef; + obj: FrozenObjectFull; @state() activeICId: number; @state() name: string | null = null; @state() nameHash: number | null = null; @state() prefabName: string | null; - @state() fields: LogicFields; + @state() prefabHash: number | null; + @state() fields: Map; @state() slots: Slot[]; - @state() reagents: Reagents; + @state() reagents: Map; @state() connections: Connection[]; @state() icIP: number; @state() icOpCount: number; @state() icState: string; @state() errors: ICError[]; - @state() registers: Registers | null; - @state() stack: Stack | null; - @state() aliases: Aliases | null; - @state() defines: Defines | null; - @state() pins: Pins | null; + @state() registers: number[] | null; + @state() memory: number[] | null; + @state() aliases: Map | null; + @state() defines: Map | null; + @state() numPins: number | null; + @state() pins: Map | null; connectedCallback(): void { const root = super.connectedCallback(); @@ -128,7 +128,7 @@ export const VMDeviceMixin = >( vm.addEventListener( "vm-devices-removed", this._handleDevicesRemoved.bind(this), - ) + ); }); this.updateDevice(); return root; @@ -151,23 +151,25 @@ export const VMDeviceMixin = >( vm.removeEventListener( "vm-devices-removed", this._handleDevicesRemoved.bind(this), - ) + ); }); } - _handleDeviceModified(e: CustomEvent) { + async _handleDeviceModified(e: CustomEvent) { const id = e.detail; const activeIcId = window.App.app.session.activeIC; if (this.deviceID === id) { this.updateDevice(); } else if ( id === activeIcId && - this.deviceSubscriptions.includes("active-ic") + this.objectSubscriptions.includes("active-ic") ) { this.updateDevice(); this.requestUpdate(); - } else if (this.deviceSubscriptions.includes("visible-devices")) { - const visibleDevices = window.VM.vm.visibleDeviceIds(this.deviceID); + } else if (this.objectSubscriptions.includes("visible-devices")) { + const visibleDevices = await window.VM.vm.visibleDeviceIds( + this.deviceID, + ); if (visibleDevices.includes(id)) { this.updateDevice(); this.requestUpdate(); @@ -175,116 +177,217 @@ export const VMDeviceMixin = >( } } - _handleDevicesModified(e: CustomEvent) { + async _handleDevicesModified(e: CustomEvent) { const activeIcId = window.App.app.session.activeIC; const ids = e.detail; if (ids.includes(this.deviceID)) { this.updateDevice(); - if (this.deviceSubscriptions.includes("visible-devices")) { + if (this.objectSubscriptions.includes("visible-devices")) { this.requestUpdate(); } } else if ( ids.includes(activeIcId) && - this.deviceSubscriptions.includes("active-ic") + this.objectSubscriptions.includes("active-ic") ) { this.updateDevice(); this.requestUpdate(); - } else if (this.deviceSubscriptions.includes("visible-devices")) { - const visibleDevices = window.VM.vm.visibleDeviceIds(this.deviceID); - if (ids.some( id => visibleDevices.includes(id))) { + } else if (this.objectSubscriptions.includes("visible-devices")) { + const visibleDevices = await window.VM.vm.visibleDeviceIds( + this.deviceID, + ); + if (ids.some((id) => visibleDevices.includes(id))) { this.updateDevice(); this.requestUpdate(); } } } - _handleDeviceIdChange(e: CustomEvent<{ old: number; new: number }>) { + async _handleDeviceIdChange(e: CustomEvent<{ old: number; new: number }>) { if (this.deviceID === e.detail.old) { this.deviceID = e.detail.new; - } else if (this.deviceSubscriptions.includes("visible-devices")) { - const visibleDevices = window.VM.vm.visibleDeviceIds(this.deviceID); - if (visibleDevices.some(id => id === e.detail.old || id === e.detail.new)) { - this.requestUpdate() + } else if (this.objectSubscriptions.includes("visible-devices")) { + const visibleDevices = await window.VM.vm.visibleDeviceIds( + this.deviceID, + ); + if ( + visibleDevices.some( + (id) => id === e.detail.old || id === e.detail.new, + ) + ) { + this.requestUpdate(); } } } _handleDevicesRemoved(e: CustomEvent) { const _ids = e.detail; - if (this.deviceSubscriptions.includes("visible-devices")) { - this.requestUpdate() + if (this.objectSubscriptions.includes("visible-devices")) { + this.requestUpdate(); } } updateDevice() { - this.device = window.VM.vm.devices.get(this.deviceID)!; + this.obj = window.VM.vm.objects.get(this.deviceID)!; - if (typeof this.device === "undefined") { + if (typeof this.obj === "undefined") { return; } - for (const sub of this.deviceSubscriptions) { + if ( + this.objectSubscriptions.includes("slots") || + this.objectSubscriptions.includes("slots-count") + ) { + const slotsOccupantInfo = this.obj.obj_info.slots; + const logicTemplate = + "logic" in this.obj.template ? this.obj.template.logic : null; + const slotsTemplate = + "slots" in this.obj.template ? this.obj.template.slots : []; + let slots: Slot[] | null = null; + if (slotsOccupantInfo.size !== 0) { + slots = slotsTemplate.map((template, index) => { + let slot = { + parent: this.obj.obj_info.id, + index: index, + name: template.name, + typ: template.typ, + readable_logic: Array.from( + logicTemplate?.logic_slot_types.get(index)?.entries() ?? [], + ) + .filter(([_, val]) => val === "Read" || val === "ReadWrite") + .map(([key, _]) => key), + writeable_logic: Array.from( + logicTemplate?.logic_slot_types.get(index)?.entries() ?? [], + ) + .filter(([_, val]) => val === "Write" || val === "ReadWrite") + .map(([key, _]) => key), + occupant: slotsOccupantInfo.get(index), + }; + return slot; + }); + } + + if (!structuralEqual(this.slots, slots)) { + this.slots = slots; + } + } + + for (const sub of this.objectSubscriptions) { if (typeof sub === "string") { if (sub == "name") { - const name = this.device.name ?? null; + const name = this.obj.obj_info.name ?? null; if (this.name !== name) { this.name = name; } } else if (sub === "nameHash") { - const nameHash = this.device.nameHash ?? null; + const nameHash = + typeof this.obj.obj_info.name !== "undefined" + ? crc32(this.obj.obj_info.name) + : null; if (this.nameHash !== nameHash) { this.nameHash = nameHash; } } else if (sub === "prefabName") { - const prefabName = this.device.prefabName ?? null; + const prefabName = this.obj.obj_info.prefab ?? null; if (this.prefabName !== prefabName) { this.prefabName = prefabName; + this.prefabHash = crc32(prefabName); } } else if (sub === "fields") { - const fields = this.device.fields; - if (!structuralEqual(this.fields, fields)) { - this.fields = fields; + const fields = this.obj.obj_info.logic_values ?? null; + const logicTemplate = + "logic" in this.obj.template ? this.obj.template.logic : null; + let logic_fields: Map | null = null; + if (fields !== null) { + logic_fields = new Map(); + for (const [lt, val] of fields) { + const access = logicTemplate?.logic_types.get(lt) ?? "Read"; + logic_fields.set(lt, { + value: val, + field_type: access, + }); + } } - } else if (sub === "slots") { - const slots = this.device.slots; - if (!structuralEqual(this.slots, slots)) { - this.slots = slots; - } - } else if (sub === "slots-count") { - const slots = this.device.slots; - if (typeof this.slots === "undefined") { - this.slots = slots; - } else if (this.slots.length !== slots.length) { - this.slots = slots; + if (!structuralEqual(this.fields, logic_fields)) { + this.fields = logic_fields; } } else if (sub === "reagents") { - const reagents = this.device.reagents; + const reagents = this.obj.obj_info.reagents; if (!structuralEqual(this.reagents, reagents)) { this.reagents = reagents; } } else if (sub === "connections") { - const connections = this.device.connections; + const connectionsMap = this.obj.obj_info.connections ?? new Map(); + const connectionList = + "device" in this.obj.template + ? this.obj.template.device.connection_list + : []; + let connections: Connection[] | null = null; + if (connectionList.length !== 0) { + connections = connectionList.map((conn, index) => { + if (conn.typ === "Data") { + return { + CableNetwork: { + typ: "Data", + role: conn.role, + net: connectionsMap.get(index), + }, + }; + } else if (conn.typ === "Power") { + return { + CableNetwork: { + typ: "Power", + role: conn.role, + net: connectionsMap.get(index), + }, + }; + } else if (conn.typ === "PowerAndData") { + return { + CableNetwork: { + typ: "Data", + role: conn.role, + net: connectionsMap.get(index), + }, + }; + } else if (conn.typ === "Pipe") { + return { Pipe: { role: conn.role } }; + } else if (conn.typ === "Chute") { + return { Chute: { role: conn.role } }; + } else if (conn.typ === "Elevator") { + return { Elevator: { role: conn.role } }; + } else if (conn.typ === "LaunchPad") { + return { LaunchPad: { role: conn.role } }; + } else if (conn.typ === "LandingPad") { + return { LandingPad: { role: conn.role } }; + } else if (conn.typ === "PipeLiquid") { + return { PipeLiquid: { role: conn.role } }; + } + return "None"; + }); + } if (!structuralEqual(this.connections, connections)) { this.connections = connections; } } else if (sub === "ic") { - if (typeof this.device.ic !== "undefined") { + if ( + typeof this.obj.obj_info.circuit !== "undefined" || + this.obj.obj_info.socketed_ic !== "undefined" + ) { this.updateIC(); } } else if (sub === "active-ic") { const activeIc = window.VM.vm?.activeIC; - if (this.activeICId !== activeIc.id) { - this.activeICId = activeIc.id; + if (this.activeICId !== activeIc.obj_info.id) { + this.activeICId = activeIc.obj_info.id; } } } else { if ("field" in sub) { - const fields = this.device.fields; + const fields = this.obj.obj_info.logic_values; if (this.fields.get(sub.field) !== fields.get(sub.field)) { this.fields = fields; } } else if ("slot" in sub) { - const slots = this.device.slots; + const slots = this.obj.slots; if ( typeof this.slots === "undefined" || this.slots.length < sub.slot @@ -301,54 +404,54 @@ export const VMDeviceMixin = >( } updateIC() { - const ip = this.device.ip!; + const ip = this.obj.ip!; if (this.icIP !== ip) { this.icIP = ip; } - const opCount = this.device.instructionCount!; + const opCount = this.obj.instructionCount!; if (this.icOpCount !== opCount) { this.icOpCount = opCount; } - const state = this.device.state!; + const state = this.obj.state!; if (this.icState !== state) { this.icState = state; } - const errors = this.device.program?.errors ?? null; + const errors = this.obj.program?.errors ?? null; if (!structuralEqual(this.errors, errors)) { this.errors = errors; } - const registers = this.device.registers ?? null; + const registers = this.obj.registers ?? null; if (!structuralEqual(this.registers, registers)) { this.registers = registers; } - const stack = this.device.stack ?? null; - if (!structuralEqual(this.stack, stack)) { - this.stack = stack; + const stack = this.obj.stack ?? null; + if (!structuralEqual(this.memory, stack)) { + this.memory = stack; } - const aliases = this.device.aliases ?? null; + const aliases = this.obj.aliases ?? null; if (!structuralEqual(this.aliases, aliases)) { this.aliases = aliases; } - const defines = this.device.defines ?? null; + const defines = this.obj.defines ?? null; if (!structuralEqual(this.defines, defines)) { this.defines = defines; } - const pins = this.device.pins ?? null; + const pins = this.obj.pins ?? null; if (!structuralEqual(this.pins, pins)) { this.pins = pins; } } } - return VMDeviceMixinClass as Constructor & T; + return VMObjectMixinClass as Constructor & T; }; export const VMActiveICMixin = >( superClass: T, ) => { - class VMActiveICMixinClass extends VMDeviceMixin(superClass) { + class VMActiveICMixinClass extends VMObjectMixin(superClass) { constructor() { super(); - this.deviceID = window.App.app.session.activeIC; + this.objectID = window.App.app.session.activeIC; } connectedCallback(): void { @@ -378,19 +481,19 @@ export const VMActiveICMixin = >( _handleActiveIC(e: CustomEvent) { const id = e.detail; - if (this.deviceID !== id) { - this.deviceID = id; - this.device = window.VM.vm.devices.get(this.deviceID)!; + if (this.objectID !== id) { + this.objectID = id; + this.obj = window.VM.vm.objects.get(this.objectID)!; } this.updateDevice(); } } - return VMActiveICMixinClass as Constructor & T; + return VMActiveICMixinClass as Constructor & T; }; export declare class VMDeviceDBMixinInterface { - deviceDB: DeviceDB; + templateDB: TemplateDatabase; _handleDeviceDBLoad(e: CustomEvent): void; postDBSetUpdate(): void; } @@ -405,8 +508,8 @@ export const VMDeviceDBMixin = >( "vm-device-db-loaded", this._handleDeviceDBLoad.bind(this), ); - if (typeof window.VM.vm.db !== "undefined") { - this.deviceDB = window.VM.vm.db!; + if (typeof window.VM.vm.templateDB !== "undefined") { + this.templateDB = window.VM.vm.templateDB!; } return root; } @@ -419,20 +522,20 @@ export const VMDeviceDBMixin = >( } _handleDeviceDBLoad(e: CustomEvent) { - this.deviceDB = e.detail; + this.templateDB = e.detail; } - private _deviceDB: DeviceDB; + private _templateDB: TemplateDatabase; - get deviceDB(): DeviceDB { - return this._deviceDB; + get templateDB(): TemplateDatabase { + return this._templateDB; } postDBSetUpdate(): void { } @state() - set deviceDB(val: DeviceDB) { - this._deviceDB = val; + set templateDB(val: TemplateDatabase) { + this._templateDB = val; this.postDBSetUpdate(); } } diff --git a/www/src/ts/virtual_machine/controls.ts b/www/src/ts/virtual_machine/controls.ts index 067ebd1..549ded0 100644 --- a/www/src/ts/virtual_machine/controls.ts +++ b/www/src/ts/virtual_machine/controls.ts @@ -65,7 +65,7 @@ export class VMICControls extends VMActiveICMixin(BaseElement) { @query(".active-ic-select") activeICSelect: SlSelect; protected render() { - const ics = Array.from(window.VM.vm.ics); + const ics = Array.from(window.VM.vm.circuitHolders); return html`

@@ -116,7 +116,7 @@ export class VMICControls extends VMActiveICMixin(BaseElement) { hoist size="small" placement="bottom" - value="${this.deviceID}" + value="${this.objectID}" @sl-change=${this._handleChangeActiveIC} class="active-ic-select" > diff --git a/www/src/ts/virtual_machine/device/add_device.ts b/www/src/ts/virtual_machine/device/add_device.ts index e1f294e..96f76c1 100644 --- a/www/src/ts/virtual_machine/device/add_device.ts +++ b/www/src/ts/virtual_machine/device/add_device.ts @@ -41,10 +41,10 @@ export class VMAddDeviceButton extends VMDeviceDBMixin(BaseElement) { postDBSetUpdate(): void { this._structures = new Map( - Object.values(this.deviceDB.db) - .filter((entry) => this.deviceDB.structures.includes(entry.name), this) + Object.values(this.templateDB.db) + .filter((entry) => this.templateDB.structures.includes(entry.name), this) .filter( - (entry) => this.deviceDB.logic_enabled.includes(entry.name), + (entry) => this.templateDB.logic_enabled.includes(entry.name), this, ) .map((entry) => [entry.name, entry]), @@ -133,7 +133,7 @@ export class VMAddDeviceButton extends VMDeviceDBMixin(BaseElement) { } _handleDeviceDBLoad(e: CustomEvent) { - this.deviceDB = e.detail; + this.templateDB = e.detail; } @state() private page = 0; diff --git a/www/src/ts/virtual_machine/device/card.ts b/www/src/ts/virtual_machine/device/card.ts index 75d8b92..91465dd 100644 --- a/www/src/ts/virtual_machine/device/card.ts +++ b/www/src/ts/virtual_machine/device/card.ts @@ -1,7 +1,7 @@ import { html, css, HTMLTemplateResult } from "lit"; import { customElement, property, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMDeviceDBMixin, VMDeviceMixin } from "virtual_machine/base_device"; +import { VMDeviceDBMixin, VMObjectMixin } from "virtual_machine/base_device"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; import { parseIntWithHexOrBinary, parseNumber } from "utils"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; @@ -15,7 +15,7 @@ import { repeat } from "lit/directives/repeat.js"; export type CardTab = "fields" | "slots" | "reagents" | "networks" | "pins"; @customElement("vm-device-card") -export class VMDeviceCard extends VMDeviceDBMixin(VMDeviceMixin(BaseElement)) { +export class VMDeviceCard extends VMDeviceDBMixin(VMObjectMixin(BaseElement)) { image_err: boolean; @property({ type: Boolean }) open: boolean; @@ -135,14 +135,14 @@ export class VMDeviceCard extends VMDeviceDBMixin(VMDeviceMixin(BaseElement)) { } renderHeader(): HTMLTemplateResult { - const thisIsActiveIc = this.activeICId === this.deviceID; + const thisIsActiveIc = this.activeICId === this.objectID; const badges: HTMLTemplateResult[] = []; if (thisIsActiveIc) { badges.push(html`db`); } const activeIc = window.VM.vm.activeIC; activeIc?.pins?.forEach((id, index) => { - if (this.deviceID == id) { + if (this.objectID == id) { badges.push( html`d${index}`, ); @@ -154,20 +154,20 @@ export class VMDeviceCard extends VMDeviceDBMixin(VMDeviceMixin(BaseElement)) { onerror="this.src = '${VMDeviceCard.transparentImg}'" />
- Id - + - Name - + - Hash - + ${badges.map((badge) => badge)}
@@ -183,7 +183,7 @@ export class VMDeviceCard extends VMDeviceDBMixin(VMDeviceMixin(BaseElement)) { renderFields() { return this.delayRenderTab( "fields", - html``, + html``, ); } @@ -202,7 +202,7 @@ export class VMDeviceCard extends VMDeviceDBMixin(VMDeviceMixin(BaseElement)) { ${repeat(this.slots, (slot, index) => slot.typ + index.toString(), (_slot, index) => html` - + `, )} @@ -242,7 +242,7 @@ export class VMDeviceCard extends VMDeviceDBMixin(VMDeviceMixin(BaseElement)) { return this.delayRenderTab( "pins", html`
- +
` ); } @@ -295,7 +295,7 @@ export class VMDeviceCard extends VMDeviceDBMixin(VMDeviceMixin(BaseElement)) { Slots Reagents Networks - Pins + Pins ${until(this.renderFields(), html``)} @@ -318,7 +318,7 @@ export class VMDeviceCard extends VMDeviceDBMixin(VMDeviceMixin(BaseElement)) { onerror="this.src = '${VMDeviceCard.transparentImg}'" />

Are you sure you want to remove this device?

- Id ${this.deviceID} : ${this.name ?? this.prefabName} + Id ${this.objectID} : ${this.name ?? this.prefabName}
@@ -350,12 +350,12 @@ export class VMDeviceCard extends VMDeviceDBMixin(VMDeviceMixin(BaseElement)) { const val = parseIntWithHexOrBinary(input.value); if (!isNaN(val)) { window.VM.get().then((vm) => { - if (!vm.changeDeviceID(this.deviceID, val)) { - input.value = this.deviceID.toString(); + if (!vm.changeDeviceID(this.objectID, val)) { + input.value = this.objectID.toString(); } }); } else { - input.value = this.deviceID.toString(); + input.value = this.objectID.toString(); } } @@ -363,7 +363,7 @@ export class VMDeviceCard extends VMDeviceDBMixin(VMDeviceMixin(BaseElement)) { const input = e.target as SlInput; const name = input.value.length === 0 ? undefined : input.value; window.VM.get().then((vm) => { - if (!vm.setDeviceName(this.deviceID, name)) { + if (!vm.setObjectName(this.objectID, name)) { input.value = this.name; } this.updateDevice(); @@ -375,7 +375,7 @@ export class VMDeviceCard extends VMDeviceDBMixin(VMDeviceMixin(BaseElement)) { _removeDialogRemove() { this.removeDialog.hide(); - window.VM.get().then((vm) => vm.removeDevice(this.deviceID)); + window.VM.get().then((vm) => vm.removeDevice(this.objectID)); } _handleChangeConnection(e: CustomEvent) { @@ -383,7 +383,7 @@ export class VMDeviceCard extends VMDeviceDBMixin(VMDeviceMixin(BaseElement)) { const conn = parseInt(select.getAttribute("key")!); const val = select.value ? parseInt(select.value as string) : undefined; window.VM.get().then((vm) => - vm.setDeviceConnection(this.deviceID, conn, val), + vm.setDeviceConnection(this.objectID, conn, val), ); this.updateDevice(); } diff --git a/www/src/ts/virtual_machine/device/device_list.ts b/www/src/ts/virtual_machine/device/device_list.ts index 04e0f64..871710f 100644 --- a/www/src/ts/virtual_machine/device/device_list.ts +++ b/www/src/ts/virtual_machine/device/device_list.ts @@ -43,7 +43,7 @@ export class VMDeviceList extends BaseElement { constructor() { super(); - this.devices = [...window.VM.vm.deviceIds]; + this.devices = [...window.VM.vm.objectIds]; } connectedCallback(): void { @@ -149,7 +149,7 @@ export class VMDeviceList extends BaseElement { if (this._filter) { const datapoints: [string, number][] = []; for (const device_id of this.devices) { - const device = window.VM.vm.devices.get(device_id); + const device = window.VM.vm.objects.get(device_id); if (device) { if (typeof device.name !== "undefined") { datapoints.push([device.name, device.id]); diff --git a/www/src/ts/virtual_machine/device/fields.ts b/www/src/ts/virtual_machine/device/fields.ts index e45c245..9592330 100644 --- a/www/src/ts/virtual_machine/device/fields.ts +++ b/www/src/ts/virtual_machine/device/fields.ts @@ -1,13 +1,13 @@ import { html, css } from "lit"; import { customElement, property } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMDeviceDBMixin, VMDeviceMixin } from "virtual_machine/base_device"; +import { VMDeviceDBMixin, VMObjectMixin } from "virtual_machine/base_device"; import { displayNumber, parseNumber } from "utils"; import type { LogicType } from "ic10emu_wasm"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; @customElement("vm-device-fields") -export class VMDeviceSlot extends VMDeviceMixin(VMDeviceDBMixin(BaseElement)) { +export class VMDeviceSlot extends VMObjectMixin(VMDeviceDBMixin(BaseElement)) { constructor() { super(); this.subscribe("fields"); @@ -15,7 +15,7 @@ export class VMDeviceSlot extends VMDeviceMixin(VMDeviceDBMixin(BaseElement)) { render() { const fields = Array.from(this.fields.entries()); - const inputIdBase = `vmDeviceCard${this.deviceID}Field`; + const inputIdBase = `vmDeviceCard${this.objectID}Field`; return html` ${fields.map(([name, field], _index, _fields) => { return html` { - if (!vm.setDeviceField(this.deviceID, field, val, true)) { + if (!vm.setObjectField(this.objectID, field, val, true)) { input.value = this.fields.get(field).value.toString(); } this.updateDevice(); diff --git a/www/src/ts/virtual_machine/device/pins.ts b/www/src/ts/virtual_machine/device/pins.ts index 1bb5cba..12b4e04 100644 --- a/www/src/ts/virtual_machine/device/pins.ts +++ b/www/src/ts/virtual_machine/device/pins.ts @@ -2,11 +2,11 @@ import { html, css } from "lit"; import { customElement, property } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMDeviceDBMixin, VMDeviceMixin } from "virtual_machine/base_device"; +import { VMDeviceDBMixin, VMObjectMixin } from "virtual_machine/base_device"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; @customElement("vm-device-pins") -export class VMDevicePins extends VMDeviceMixin(VMDeviceDBMixin(BaseElement)) { +export class VMDevicePins extends VMObjectMixin(VMDeviceDBMixin(BaseElement)) { constructor() { super(); this.subscribe("ic", "visible-devices"); @@ -14,7 +14,7 @@ export class VMDevicePins extends VMDeviceMixin(VMDeviceDBMixin(BaseElement)) { render() { const pins = this.pins; - const visibleDevices = window.VM.vm.visibleDevices(this.deviceID); + const visibleDevices = window.VM.vm.visibleDevices(this.objectID); const pinsHtml = pins?.map( (pin, index) => html` @@ -37,7 +37,7 @@ export class VMDevicePins extends VMDeviceMixin(VMDeviceDBMixin(BaseElement)) { const select = e.target as SlSelect; const pin = parseInt(select.getAttribute("key")!); const val = select.value ? parseInt(select.value as string) : undefined; - window.VM.get().then((vm) => vm.setDevicePin(this.deviceID, pin, val)); + window.VM.get().then((vm) => vm.setDevicePin(this.objectID, pin, val)); this.updateDevice(); } diff --git a/www/src/ts/virtual_machine/device/slot.ts b/www/src/ts/virtual_machine/device/slot.ts index fa16e0c..473223f 100644 --- a/www/src/ts/virtual_machine/device/slot.ts +++ b/www/src/ts/virtual_machine/device/slot.ts @@ -1,7 +1,7 @@ import { html, css } from "lit"; import { customElement, property} from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMDeviceDBMixin, VMDeviceMixin } from "virtual_machine/base_device"; +import { VMDeviceDBMixin, VMObjectMixin } from "virtual_machine/base_device"; import { clamp, displayNumber, @@ -21,7 +21,7 @@ export interface SlotModifyEvent { } @customElement("vm-device-slot") -export class VMDeviceSlot extends VMDeviceMixin(VMDeviceDBMixin(BaseElement)) { +export class VMDeviceSlot extends VMObjectMixin(VMDeviceDBMixin(BaseElement)) { private _slotIndex: number; get slotIndex() { @@ -72,7 +72,7 @@ export class VMDeviceSlot extends VMDeviceMixin(VMDeviceDBMixin(BaseElement)) { slotOccupantImg(): string { const slot = this.slots[this.slotIndex]; if (typeof slot.occupant !== "undefined") { - const hashLookup = (this.deviceDB ?? {}).names_by_hash ?? {}; + const hashLookup = (this.templateDB ?? {}).names_by_hash ?? {}; const prefabName = hashLookup[slot.occupant.prefab_hash] ?? "UnknownHash"; return `img/stationpedia/${prefabName}.png`; } else { @@ -83,7 +83,7 @@ export class VMDeviceSlot extends VMDeviceMixin(VMDeviceDBMixin(BaseElement)) { slotOccupantPrefabName(): string { const slot = this.slots[this.slotIndex]; if (typeof slot.occupant !== "undefined") { - const hashLookup = (this.deviceDB ?? {}).names_by_hash ?? {}; + const hashLookup = (this.templateDB ?? {}).names_by_hash ?? {}; const prefabName = hashLookup[slot.occupant.prefab_hash] ?? "UnknownHash"; return prefabName; } else { @@ -92,8 +92,8 @@ export class VMDeviceSlot extends VMDeviceMixin(VMDeviceDBMixin(BaseElement)) { } slotOcccupantTemplate(): { name: string; typ: SlotType } | undefined { - if (this.deviceDB) { - const entry = this.deviceDB.db[this.prefabName]; + if (this.templateDB) { + const entry = this.templateDB.db[this.prefabName]; return entry?.slots[this.slotIndex]; } else { return undefined; @@ -101,7 +101,7 @@ export class VMDeviceSlot extends VMDeviceMixin(VMDeviceDBMixin(BaseElement)) { } renderHeader() { - const inputIdBase = `vmDeviceSlot${this.deviceID}Slot${this.slotIndex}Head`; + const inputIdBase = `vmDeviceSlot${this.objectID}Slot${this.slotIndex}Head`; const slot = this.slots[this.slotIndex]; const slotImg = this.slotOccupantImg(); const img = html``; const template = this.slotOcccupantTemplate(); - const thisIsActiveIc = this.activeICId === this.deviceID; + const thisIsActiveIc = this.activeICId === this.objectID; const enableQuantityInput = false; @@ -202,7 +202,7 @@ export class VMDeviceSlot extends VMDeviceMixin(VMDeviceDBMixin(BaseElement)) { } _handleSlotOccupantRemove() { - window.VM.vm.removeDeviceSlotOccupant(this.deviceID, this.slotIndex); + window.VM.vm.removeSlotOccupant(this.objectID, this.slotIndex); } _handleSlotClick(_e: Event) { @@ -210,7 +210,7 @@ export class VMDeviceSlot extends VMDeviceMixin(VMDeviceDBMixin(BaseElement)) { new CustomEvent("device-modify-slot", { bubbles: true, composed: true, - detail: { deviceID: this.deviceID, slotIndex: this.slotIndex }, + detail: { deviceID: this.objectID, slotIndex: this.slotIndex }, }), ); } @@ -220,23 +220,23 @@ export class VMDeviceSlot extends VMDeviceMixin(VMDeviceDBMixin(BaseElement)) { const slot = this.slots[this.slotIndex]; const val = clamp(input.valueAsNumber, 1, slot.occupant.max_quantity); if ( - !window.VM.vm.setDeviceSlotField( - this.deviceID, + !window.VM.vm.setObjectSlotField( + this.objectID, this.slotIndex, "Quantity", val, true, ) ) { - input.value = this.device + input.value = this.obj .getSlotField(this.slotIndex, "Quantity") .toString(); } } renderFields() { - const inputIdBase = `vmDeviceSlot${this.deviceID}Slot${this.slotIndex}Field`; - const _fields = this.device.getSlotFields(this.slotIndex); + const inputIdBase = `vmDeviceSlot${this.objectID}Slot${this.slotIndex}Field`; + const _fields = this.obj.getSlotFields(this.slotIndex); const fields = Array.from(_fields.entries()); return html` @@ -273,9 +273,9 @@ export class VMDeviceSlot extends VMDeviceMixin(VMDeviceDBMixin(BaseElement)) { } window.VM.get().then((vm) => { if ( - !vm.setDeviceSlotField(this.deviceID, this.slotIndex, field, val, true) + !vm.setObjectSlotField(this.objectID, this.slotIndex, field, val, true) ) { - input.value = this.device + input.value = this.obj .getSlotField(this.slotIndex, field) .toString(); } diff --git a/www/src/ts/virtual_machine/device/slot_add_dialog.ts b/www/src/ts/virtual_machine/device/slot_add_dialog.ts index 393f101..1fa3dca 100644 --- a/www/src/ts/virtual_machine/device/slot_add_dialog.ts +++ b/www/src/ts/virtual_machine/device/slot_add_dialog.ts @@ -54,8 +54,8 @@ export class VMSlotAddDialog extends VMDeviceDBMixin(BaseElement) { postDBSetUpdate(): void { this._items = new Map( - Object.values(this.deviceDB.db) - .filter((entry) => this.deviceDB.items.includes(entry.name), this) + Object.values(this.templateDB.db) + .filter((entry) => this.templateDB.items.includes(entry.name), this) .map((entry) => [entry.name, entry]), ); this.setupSearch(); @@ -66,8 +66,8 @@ export class VMSlotAddDialog extends VMDeviceDBMixin(BaseElement) { setupSearch() { let filteredItemss = Array.from(this._items.values()); if( typeof this.deviceID !== "undefined" && typeof this.slotIndex !== "undefined") { - const device = window.VM.vm.devices.get(this.deviceID); - const dbDevice = this.deviceDB.db[device.prefabName] + const device = window.VM.vm.objects.get(this.deviceID); + const dbDevice = this.templateDB.db[device.prefabName] const slot = dbDevice.slots[this.slotIndex] const typ = slot.typ; @@ -157,17 +157,17 @@ export class VMSlotAddDialog extends VMDeviceDBMixin(BaseElement) { } _handleClickNone() { - window.VM.vm.removeDeviceSlotOccupant(this.deviceID, this.slotIndex); + window.VM.vm.removeSlotOccupant(this.deviceID, this.slotIndex); this.hide(); } _handleClickItem(e: Event) { const div = e.currentTarget as HTMLDivElement; const key = div.getAttribute("key"); - const entry = this.deviceDB.db[key]; - const device = window.VM.vm.devices.get(this.deviceID); - const dbDevice = this.deviceDB.db[device.prefabName] - const sorting = this.deviceDB.enums["SortingClass"][entry.item.sorting ?? "Default"] ?? 0; + const entry = this.templateDB.db[key]; + const device = window.VM.vm.objects.get(this.deviceID); + const dbDevice = this.templateDB.db[device.prefabName] + const sorting = this.templateDB.enums["SortingClass"][entry.item.sorting ?? "Default"] ?? 0; console.log("using entry", dbDevice); const fields: { [key in LogicSlotType]?: LogicField } = Object.fromEntries( Object.entries(dbDevice.slotlogic[this.slotIndex] ?? {}) @@ -175,7 +175,7 @@ export class VMSlotAddDialog extends VMDeviceDBMixin(BaseElement) { let slt = slt_s as LogicSlotType; let value = 0.0 if (slt === "FilterType") { - value = this.deviceDB.enums["GasType"][entry.item.filtertype] + value = this.templateDB.enums["GasType"][entry.item.filtertype] } const field: LogicField = { field_type, value}; return [slt, field]; @@ -189,7 +189,7 @@ export class VMSlotAddDialog extends VMDeviceDBMixin(BaseElement) { const template: SlotOccupantTemplate = { fields } - window.VM.vm.setDeviceSlotOccupant(this.deviceID, this.slotIndex, template); + window.VM.vm.setSlotOccupant(this.deviceID, this.slotIndex, template); this.hide(); } @@ -197,7 +197,7 @@ export class VMSlotAddDialog extends VMDeviceDBMixin(BaseElement) { @query(".device-search-input") searchInput: SlInput; render() { - const device = window.VM.vm.devices.get(this.deviceID); + const device = window.VM.vm.objects.get(this.deviceID); const name = device?.name ?? device?.prefabName ?? ""; const id = this.deviceID ?? 0; return html` diff --git a/www/src/ts/virtual_machine/device/template.ts b/www/src/ts/virtual_machine/device/template.ts index 711cb31..bd759ae 100644 --- a/www/src/ts/virtual_machine/device/template.ts +++ b/www/src/ts/virtual_machine/device/template.ts @@ -63,7 +63,7 @@ export class VmDeviceTemplate extends VMDeviceDBMixin(BaseElement) { constructor() { super(); - this.deviceDB = window.VM.vm.db; + this.templateDB = window.VM.vm.db; } private _prefab_name: string; @@ -79,7 +79,7 @@ export class VmDeviceTemplate extends VMDeviceDBMixin(BaseElement) { } get dbDevice(): DeviceDBEntry { - return this.deviceDB.db[this.prefab_name]; + return this.templateDB.db[this.prefab_name]; } setupState() { @@ -198,7 +198,7 @@ export class VmDeviceTemplate extends VMDeviceDBMixin(BaseElement) { } renderPins(): HTMLTemplateResult { - const device = this.deviceDB.db[this.prefab_name]; + const device = this.templateDB.db[this.prefab_name]; return html`
`; } diff --git a/www/src/ts/virtual_machine/device_db.ts b/www/src/ts/virtual_machine/device_db.ts deleted file mode 100644 index 770966c..0000000 --- a/www/src/ts/virtual_machine/device_db.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { - LogicType, - LogicSlotType, - SortingClass, - SlotType, - MemoryAccess, - ReagentMode, - BatchMode, - ConnectionType, - ConnectionRole, -} from "ic10emu_wasm"; -export interface DeviceDBItem { - slotclass: SlotType; - sorting: SortingClass; - maxquantity?: number; - filtertype?: string; - consumable?: boolean; - ingredient?: boolean; - reagents?: { [key: string]: number }; -} - -export interface DeviceDBDevice { - states: DBStates; - reagents: boolean; - atmosphere: boolean; - pins?: number; -} - -export interface DeviceDBConnection { - typ: ConnectionType; - role: ConnectionRole; - name: string; -} - -export interface DeviceDBInstruction { - typ: string; - value: number; - desc: string; -} - -export interface DeviceDBMemory { - size: number; - sizeDisplay: string; - access: MemoryAccess - instructions?: { [key: string]: DeviceDBInstruction }; -} - -export type MemoryAccess = "Read" | "Write" | "ReadWrite" | "None"; - - -export interface DeviceDBEntry { - name: string; - hash: number; - title: string; - desc: string; - slots?: { name: string; typ: SlotType }[]; - logic?: { [key in LogicType]?: MemoryAccess }; - slotlogic?: { [key: number]: {[key in LogicSlotType]?: MemoryAccess } }; - modes?: { [key: number]: string }; - conn?: { [key: number]: DeviceDBConnection } - item?: DeviceDBItem; - device?: DeviceDBDevice; - transmitter: boolean; - receiver: boolean; - memory?: DeviceDBMemory; -} - -export interface DBStates { - activate: boolean; - color: boolean; - lock: boolean; - mode: boolean; - onoff: boolean; - open: boolean; -} - -export interface DeviceDBReagent { - Hash: number; - Unit: string; - Sources?: { [key: string]: number }; -} - -export interface DeviceDB { - logic_enabled: string[]; - slot_logic_enabled: string[]; - devices: string[]; - items: string[]; - structures: string[]; - db: { - [key: string]: DeviceDBEntry; - }; - names_by_hash: { [key: number]: string }; - reagents: { [key: string]: DeviceDBReagent }; - enums: { [key: string]: { [key: string]: number } }; -} diff --git a/www/src/ts/virtual_machine/index.ts b/www/src/ts/virtual_machine/index.ts index b487c51..5143235 100644 --- a/www/src/ts/virtual_machine/index.ts +++ b/www/src/ts/virtual_machine/index.ts @@ -1,18 +1,19 @@ -import { - DeviceRef, - DeviceTemplate, +import type { + ObjectTemplate, + FrozenObject, FrozenVM, LogicType, LogicSlotType, - SlotOccupantTemplate, - Slots, VMRef, - init, + TemplateDatabase, + FrozenCableNetwork, + FrozenObjectFull, } from "ic10emu_wasm"; -import { DeviceDB } from "./device_db"; +import * as Comlink from "comlink"; import "./base_device"; import "./device"; import { App } from "app"; +import { structuralEqual, TypedEventTarget } from "utils"; export interface ToastMessage { variant: "warning" | "danger" | "success" | "primary" | "neutral"; icon: string; @@ -21,156 +22,168 @@ export interface ToastMessage { id: string; } -export interface CacheDeviceRef extends DeviceRef { - dirty: boolean; +export interface VirtualMachinEventMap { + "vm-template-db-loaded": CustomEvent; + "vm-objects-update": CustomEvent; + "vm-objects-removed": CustomEvent; + "vm-objects-modified": CustomEvent; + "vm-run-ic": CustomEvent; + "vm-object-id-change": CustomEvent<{ old: number; new: number }>; } -function cachedDeviceRef(ref: DeviceRef) { - let slotsDirty = true; - let cachedSlots: Slots = undefined; - return new Proxy(ref, { - get(target, prop, receiver) { - if (prop === "slots") { - if (typeof cachedSlots === undefined || slotsDirty) { - cachedSlots = target.slots; - slotsDirty = false; - } - return cachedSlots; - } else if (prop === "dirty") { - return slotsDirty; - } - return Reflect.get(target, prop, receiver); - }, - set(target, prop, value) { - if (prop === "dirty") { - slotsDirty = value; - return true; - } - return Reflect.set(target, prop, value); - }, - }) as CacheDeviceRef; -} +class VirtualMachine extends (EventTarget as TypedEventTarget) { + ic10vm: Comlink.Remote; + templateDBPromise: Promise; + templateDB: TemplateDatabase; -class VirtualMachine extends EventTarget { - ic10vm: VMRef; - _devices: Map; - _ics: Map; + private _objects: Map; + private _circuitHolders: Map; + private _networks: Map; + private _default_network: number; - db: DeviceDB; - dbPromise: Promise<{ default: DeviceDB }>; + private vm_worker: Worker; private app: App; constructor(app: App) { super(); this.app = app; - const vm = init(); + this.vm_worker = new Worker("./vm_worker.ts"); + const vm = Comlink.wrap(this.vm_worker); + this.ic10vm = vm; window.VM.set(this); - this.ic10vm = vm; + this._objects = new Map(); + this._circuitHolders = new Map(); + this._networks = new Map(); - this._devices = new Map(); - this._ics = new Map(); + this.templateDBPromise = this.ic10vm.getTemplateDatabase(); - this.dbPromise = import("../../../data/database.json", { - assert: { type: "json" }, - }) as Promise<{ default: DeviceDB }>; + this.templateDBPromise.then((db) => this.setupTemplateDatabase(db)); - this.dbPromise.then((module) => - this.setupDeviceDatabase(module.default as DeviceDB), - ); - - this.updateDevices(); + this.updateObjects(); this.updateCode(); } - get devices() { - return this._devices; + get objects() { + return this._objects; } - get deviceIds() { - const ids = Array.from(this.ic10vm.devices); + get objectIds() { + const ids = Array.from(this._objects.keys()); ids.sort(); return ids; } - get ics() { - return this._ics; + get circuitHolders() { + return this._circuitHolders; } - get icIds() { - return Array.from(this.ic10vm.ics); - } - - get networks() { - return Array.from(this.ic10vm.networks); - } - - get defaultNetwork() { - return this.ic10vm.defaultNetwork; - } - - get activeIC() { - return this._ics.get(this.app.session.activeIC); - } - - visibleDevices(source: number) { - const ids = Array.from(this.ic10vm.visibleDevices(source)); - return ids.map((id, _index) => this._devices.get(id)!); - } - - visibleDeviceIds(source: number) { - const ids = Array.from(this.ic10vm.visibleDevices(source)); + get circuitHolderIds() { + const ids = Array.from(this._circuitHolders.keys()); + ids.sort(); return ids; } - updateDevices() { - var update_flag = false; - const removedDevices = []; - const device_ids = this.ic10vm.devices; - for (const id of device_ids) { - if (!this._devices.has(id)) { - this._devices.set(id, cachedDeviceRef(this.ic10vm.getDevice(id)!)); - update_flag = true; - } - } - for (const id of this._devices.keys()) { - if (!device_ids.includes(id)) { - this._devices.delete(id); - update_flag = true; - removedDevices.push(id); - } - } + get networks() { + const ids = Array.from(this._networks.keys()); + ids.sort(); + return ids; + } - for (const [id, device] of this._devices) { - device.dirty = true; - if (typeof device.ic !== "undefined") { - if (!this._ics.has(id)) { - this._ics.set(id, device); - update_flag = true; + get defaultNetwork() { + return this._default_network; + } + + get activeIC() { + return this._circuitHolders.get(this.app.session.activeIC); + } + + async visibleDevices(source: number) { + const visDevices = await this.ic10vm.visibleDevices(source); + const ids = Array.from(visDevices); + ids.sort(); + return ids.map((id, _index) => this._objects.get(id)!); + } + + async visibleDeviceIds(source: number) { + const visDevices = await this.ic10vm.visibleDevices(source); + const ids = Array.from(visDevices); + ids.sort(); + return ids; + } + + async updateObjects() { + let updateFlag = false; + const removedObjects = []; + const objectIds = await this.ic10vm.objects; + const frozenObjects = await this.ic10vm.freezeObjects(objectIds); + const updatedObjects = []; + + for (const [index, id] of objectIds.entries()) { + if (!this._objects.has(id)) { + this._objects.set(id, frozenObjects[index]); + updateFlag = true; + updatedObjects.push(id); + } else { + if (!structuralEqual(this._objects.get(id), frozenObjects[index])) { + this._objects.set(id, frozenObjects[index]); + updatedObjects.push(id); + updateFlag = true; } } } - for (const id of this._ics.keys()) { - if (!this._devices.has(id)) { - this._ics.delete(id); - update_flag = true; + for (const id of this._objects.keys()) { + if (!objectIds.includes(id)) { + this._objects.delete(id); + updateFlag = true; + removedObjects.push(id); } } - if (update_flag) { - const ids = Array.from(device_ids); + for (const [id, obj] of this._objects) { + if (typeof obj.obj_info.socketed_ic !== "undefined") { + if (!this._circuitHolders.has(id)) { + this._circuitHolders.set(id, obj); + updateFlag = true; + if (!updatedObjects.includes(id)) { + updatedObjects.push(id); + } + } + } else { + if (this._circuitHolders.has(id)) { + updateFlag = true; + if (!updatedObjects.includes(id)) { + updatedObjects.push(id); + } + this._circuitHolders.delete(id); + } + } + } + + for (const id of this._circuitHolders.keys()) { + if (!this._objects.has(id)) { + this._circuitHolders.delete(id); + updateFlag = true; + if (!removedObjects.includes(id)) { + removedObjects.push(id); + } + } + } + + if (updateFlag) { + const ids = Array.from(updatedObjects); ids.sort(); this.dispatchEvent( - new CustomEvent("vm-devices-update", { + new CustomEvent("vm-objects-update", { detail: ids, }), ); - if (removedDevices.length > 0) { + if (removedObjects.length > 0) { this.dispatchEvent( - new CustomEvent("vm-devices-removed", { - detail: removedDevices, + new CustomEvent("vm-objects-removed", { + detail: removedObjects, }), ); } @@ -178,20 +191,24 @@ class VirtualMachine extends EventTarget { } } - updateCode() { + async updateCode() { const progs = this.app.session.programs; for (const id of progs.keys()) { const attempt = Date.now().toString(16); - const ic = this._ics.get(id); + const circuitHolder = this._circuitHolders.get(id); const prog = progs.get(id); - if (ic && prog && ic.code !== prog) { + if ( + circuitHolder && + prog && + circuitHolder.obj_info.source_code !== prog + ) { try { console.time(`CompileProgram_${id}_${attempt}`); - this.ics.get(id)!.setCodeInvalid(progs.get(id)!); - const compiled = this.ics.get(id)?.program!; - this.app.session.setProgramErrors(id, compiled.errors); + await this.ic10vm.setCodeInvalid(id, progs.get(id)!); + const errors = await this.ic10vm.getCompileErrors(id); + this.app.session.setProgramErrors(id, errors); this.dispatchEvent( - new CustomEvent("vm-device-modified", { detail: id }), + new CustomEvent("vm-object-modified", { detail: id }), ); } catch (err) { this.handleVmError(err); @@ -203,65 +220,65 @@ class VirtualMachine extends EventTarget { this.update(false); } - step() { + async step() { const ic = this.activeIC; if (ic) { try { - ic.step(false); + await this.ic10vm.stepProgrammable(ic.obj_info.id, false); } catch (err) { this.handleVmError(err); } this.update(); this.dispatchEvent( - new CustomEvent("vm-run-ic", { detail: this.activeIC!.id }), + new CustomEvent("vm-run-ic", { detail: this.activeIC!.obj_info.id }), ); } } - run() { + async run() { const ic = this.activeIC; if (ic) { try { - ic.run(false); + await this.ic10vm.runProgrammable(ic.obj_info.id, false); } catch (err) { this.handleVmError(err); } this.update(); this.dispatchEvent( - new CustomEvent("vm-run-ic", { detail: this.activeIC!.id }), + new CustomEvent("vm-run-ic", { detail: this.activeIC!.obj_info.id }), ); } } - reset() { + async reset() { const ic = this.activeIC; if (ic) { - ic.reset(); - this.update(); + await this.ic10vm.resetProgrammable(ic.obj_info.id); + await this.update(); } } - update(save: boolean = true) { - this.updateDevices(); - this.ic10vm.lastOperationModified.forEach((id, _index, _modifiedIds) => { - if (this.devices.has(id)) { - this.dispatchEvent( - new CustomEvent("vm-device-modified", { detail: id }), - ); + async update(save: boolean = true) { + await this.updateObjects(); + const lastModified = await this.ic10vm.lastOperationModified; + lastModified.forEach((id, _index, _modifiedIds) => { + if (this.objects.has(id)) { + this.updateDevice(id, false); } }, this); - this.updateDevice(this.activeIC.id, save); + this.updateDevice(this.activeIC.obj_info.id, false); if (save) this.app.session.save(); } updateDevice(id: number, save: boolean = true) { - const device = this._devices.get(id); - device.dirty = true; + const device = this._objects.get(id); this.dispatchEvent( - new CustomEvent("vm-device-modified", { detail: device.id }), + new CustomEvent("vm-device-modified", { detail: device.obj_info.id }), ); - if (typeof device.ic !== "undefined") { - this.app.session.setActiveLine(device.id, device.ip!); + if (typeof device.obj_info.socketed_ic !== "undefined") { + const ic = this._objects.get(device.obj_info.socketed_ic); + const ip = ic.obj_info.circuit?.instruction_pointer; + this.app.session.setActiveLine(device.obj_info.id, ip); } if (save) this.app.session.save(); } @@ -278,15 +295,15 @@ class VirtualMachine extends EventTarget { this.dispatchEvent(new CustomEvent("vm-message", { detail: message })); } - changeDeviceID(oldID: number, newID: number): boolean { + async changeDeviceID(oldID: number, newID: number): Promise { try { - this.ic10vm.changeDeviceId(oldID, newID); + await this.ic10vm.changeDeviceId(oldID, newID); if (this.app.session.activeIC === oldID) { this.app.session.activeIC = newID; } - this.updateDevices(); + await this.updateObjects(); this.dispatchEvent( - new CustomEvent("vm-device-id-change", { + new CustomEvent("vm-object-id-change", { detail: { old: oldID, new: newID, @@ -301,11 +318,11 @@ class VirtualMachine extends EventTarget { } } - setRegister(index: number, val: number): boolean { + async setRegister(index: number, val: number): Promise { const ic = this.activeIC!; try { - ic.setRegister(index, val); - this.updateDevice(ic.id); + await this.ic10vm.setRegister(ic.obj_info.id, index, val); + this.updateDevice(ic.obj_info.id); return true; } catch (err) { this.handleVmError(err); @@ -313,11 +330,11 @@ class VirtualMachine extends EventTarget { } } - setStack(addr: number, val: number): boolean { + async setStack(addr: number, val: number): Promise { const ic = this.activeIC!; try { - ic!.setStack(addr, val); - this.updateDevice(ic.id); + await this.ic10vm.setMemory(ic.obj_info.id, addr, val); + this.updateDevice(ic.obj_info.id); return true; } catch (err) { this.handleVmError(err); @@ -325,14 +342,12 @@ class VirtualMachine extends EventTarget { } } - setDeviceName(id: number, name: string): boolean { - const device = this._devices.get(id); - if (device) { + async setObjectName(id: number, name: string): Promise { + const obj = this._objects.get(id); + if (obj) { try { - device.setName(name); - this.dispatchEvent( - new CustomEvent("vm-device-modified", { detail: id }), - ); + await this.ic10vm.setObjectName(obj.obj_info.id, name); + this.updateDevice(obj.obj_info.id); this.app.session.save(); return true; } catch (e) { @@ -342,18 +357,18 @@ class VirtualMachine extends EventTarget { return false; } - setDeviceField( + async setObjectField( id: number, field: LogicType, val: number, force?: boolean, - ): boolean { + ): Promise { force = force ?? false; - const device = this._devices.get(id); - if (device) { + const obj = this._objects.get(id); + if (obj) { try { - device.setField(field, val, force); - this.updateDevice(device.id); + await this.ic10vm.setLogicField(obj.obj_info.id, field, val, force); + this.updateDevice(obj.obj_info.id); return true; } catch (err) { this.handleVmError(err); @@ -362,19 +377,25 @@ class VirtualMachine extends EventTarget { return false; } - setDeviceSlotField( + async setObjectSlotField( id: number, slot: number, field: LogicSlotType, val: number, force?: boolean, - ): boolean { + ): Promise { force = force ?? false; - const device = this._devices.get(id); - if (device) { + const obj = this._objects.get(id); + if (obj) { try { - device.setSlotField(slot, field, val, force); - this.updateDevice(device.id); + await this.ic10vm.setSlotLogicField( + obj.obj_info.id, + field, + slot, + val, + force, + ); + this.updateDevice(obj.obj_info.id); return true; } catch (err) { this.handleVmError(err); @@ -383,16 +404,16 @@ class VirtualMachine extends EventTarget { return false; } - setDeviceConnection( + async setDeviceConnection( id: number, conn: number, val: number | undefined, - ): boolean { - const device = this._devices.get(id); + ): Promise { + const device = this._objects.get(id); if (typeof device !== "undefined") { try { - this.ic10vm.setDeviceConnection(id, conn, val); - this.updateDevice(device.id); + await this.ic10vm.setDeviceConnection(id, conn, val); + this.updateDevice(device.obj_info.id); return true; } catch (err) { this.handleVmError(err); @@ -401,12 +422,16 @@ class VirtualMachine extends EventTarget { return false; } - setDevicePin(id: number, pin: number, val: number | undefined): boolean { - const device = this._devices.get(id); + async setDevicePin( + id: number, + pin: number, + val: number | undefined, + ): Promise { + const device = this._objects.get(id); if (typeof device !== "undefined") { try { - this.ic10vm.setPin(id, pin, val); - this.updateDevice(device.id); + await this.ic10vm.setPin(id, pin, val); + this.updateDevice(device.obj_info.id); return true; } catch (err) { this.handleVmError(err); @@ -415,22 +440,23 @@ class VirtualMachine extends EventTarget { return false; } - setupDeviceDatabase(db: DeviceDB) { - this.db = db; - console.log("Loaded Device Database", this.db); + setupTemplateDatabase(db: TemplateDatabase) { + this.templateDB = db; + console.log("Loaded Template Database", this.templateDB); this.dispatchEvent( - new CustomEvent("vm-device-db-loaded", { detail: this.db }), + new CustomEvent("vm-template-db-loaded", { detail: this.templateDB }), ); } - addDeviceFromTemplate(template: DeviceTemplate): boolean { + async addObjectFromFrozen(frozen: FrozenObject): Promise { try { - console.log("adding device", template); - const id = this.ic10vm.addDeviceFromTemplate(template); - this._devices.set(id, cachedDeviceRef(this.ic10vm.getDevice(id)!)); - const device_ids = this.ic10vm.devices; + console.log("adding device", frozen); + const id = await this.ic10vm.addObjectFromFrozen(frozen); + const refrozen = await this.ic10vm.freezeObject(id); + this._objects.set(id, refrozen); + const device_ids = await this.ic10vm.objects; this.dispatchEvent( - new CustomEvent("vm-devices-update", { + new CustomEvent("vm-objects-update", { detail: Array.from(device_ids), }), ); @@ -442,10 +468,10 @@ class VirtualMachine extends EventTarget { } } - removeDevice(id: number): boolean { + async removeDevice(id: number): Promise { try { - this.ic10vm.removeDevice(id); - this.updateDevices(); + await this.ic10vm.removeDevice(id); + await this.updateObjects(); return true; } catch (err) { this.handleVmError(err); @@ -453,17 +479,18 @@ class VirtualMachine extends EventTarget { } } - setDeviceSlotOccupant( + async setSlotOccupant( id: number, index: number, - template: SlotOccupantTemplate, - ): boolean { - const device = this._devices.get(id); + frozen: FrozenObject, + quantity: number, + ): Promise { + const device = this._objects.get(id); if (typeof device !== "undefined") { try { - console.log("setting slot occupant", template); - this.ic10vm.setSlotOccupant(id, index, template); - this.updateDevice(device.id); + console.log("setting slot occupant", frozen); + await this.ic10vm.setSlotOccupant(id, index, frozen, quantity); + this.updateDevice(device.obj_info.id); return true; } catch (err) { this.handleVmError(err); @@ -472,12 +499,12 @@ class VirtualMachine extends EventTarget { return false; } - removeDeviceSlotOccupant(id: number, index: number): boolean { - const device = this._devices.get(id); + async removeSlotOccupant(id: number, index: number): Promise { + const device = this._objects.get(id); if (typeof device !== "undefined") { try { this.ic10vm.removeSlotOccupant(id, index); - this.updateDevice(device.id); + this.updateDevice(device.obj_info.id); return true; } catch (err) { this.handleVmError(err); @@ -486,25 +513,25 @@ class VirtualMachine extends EventTarget { return false; } - saveVMState(): FrozenVM { + async saveVMState(): Promise { return this.ic10vm.saveVMState(); } - restoreVMState(state: FrozenVM) { + async restoreVMState(state: FrozenVM) { try { - this.ic10vm.restoreVMState(state); - this._devices = new Map(); - this._ics = new Map(); - this.updateDevices(); + await this.ic10vm.restoreVMState(state); + this._objects = new Map(); + this._circuitHolders = new Map(); + await this.updateObjects(); } catch (e) { this.handleVmError(e); } } - getPrograms() { - const programs: [number, string][] = Array.from(this._ics.entries()).map( - ([id, ic]) => [id, ic.code], - ); + getPrograms() : [number, string][] { + const programs: [number, string][] = Array.from( + this._circuitHolders.entries(), + ).map(([id, ic]) => [id, ic.obj_info.source_code]); return programs; } } diff --git a/www/src/ts/virtual_machine/stack.ts b/www/src/ts/virtual_machine/stack.ts index 5d72b85..4adb81d 100644 --- a/www/src/ts/virtual_machine/stack.ts +++ b/www/src/ts/virtual_machine/stack.ts @@ -46,7 +46,7 @@ export class VMICStack extends VMActiveICMixin(BaseElement) { return html`
- ${this.stack?.map((val, index) => { + ${this.memory?.map((val, index) => { return html`
diff --git a/www/src/ts/virtual_machine/vm_worker.ts b/www/src/ts/virtual_machine/vm_worker.ts new file mode 100644 index 0000000..70615c8 --- /dev/null +++ b/www/src/ts/virtual_machine/vm_worker.ts @@ -0,0 +1,41 @@ +import { VMRef, init } from "ic10emu_wasm"; +import type { StationpediaPrefab, ObjectTemplate } from "ic10emu_wasm"; + +import * as Comlink from "comlink"; + +import * as json_database from "../../../data/database.json" with { type: "json" }; + +export interface PrefabDatabase { + prefabs: { [key in StationpediaPrefab]: ObjectTemplate}; + reagents: { + [key: string]: { + Hash: number; + Unit: string; + Sources?: { + [key in StationpediaPrefab]: number; + }; + }; + }; + prefabsByHash: { + [key: number]: StationpediaPrefab; + }; + structures: StationpediaPrefab[]; + devices: StationpediaPrefab[]; + items: StationpediaPrefab[]; + logicableItems: StationpediaPrefab[]; + suits: StationpediaPrefab[]; + circuitHolders: StationpediaPrefab[]; +} + +const prefab_database = json_database as unknown as PrefabDatabase; + +const vm: VMRef = init(); + +const template_database = new Map( + Object.entries(prefab_database.prefabsByHash).map(([hash, name]) => { + return [parseInt(hash), prefab_database.prefabs[name]]; + }), +); +vm.importTemplateDatabase(template_database); + +Comlink.expose(vm); From 7b6909a323613fd607d1c8ea49ccc0466af5b85e Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Wed, 29 May 2024 20:08:16 -0700 Subject: [PATCH 35/50] refactor(vm, frontend): memory instructions, baseObject - parse and map meory instructions - use FrozenObjectFull to propogate data out of VM to componates (far less wasm calls) --- ic10emu/src/vm/object/templates.rs | 51 +- stationeers_data/src/database/prefab_map.rs | 3029 ++++++++++++++++- stationeers_data/src/templates.rs | 24 + www/data/database.json | 2811 ++++++++++++++- www/src/ts/utils.ts | 14 + www/src/ts/virtual_machine/base_device.ts | 289 +- .../ts/virtual_machine/device/add_device.ts | 4 +- www/src/ts/virtual_machine/device/card.ts | 153 +- .../ts/virtual_machine/device/device_list.ts | 8 +- www/src/ts/virtual_machine/device/fields.ts | 8 +- www/src/ts/virtual_machine/device/index.ts | 4 +- www/src/ts/virtual_machine/device/pins.ts | 41 +- www/src/ts/virtual_machine/device/slot.ts | 76 +- .../virtual_machine/device/slot_add_dialog.ts | 4 +- www/src/ts/virtual_machine/device/template.ts | 29 +- www/src/ts/virtual_machine/index.ts | 22 +- xtask/src/generate/database.rs | 77 +- 17 files changed, 6235 insertions(+), 409 deletions(-) diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index 16cbdd3..1328c53 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -1,7 +1,7 @@ -use std::{collections::BTreeMap, fmt::Display, rc::Rc, str::FromStr}; +use std::{collections::BTreeMap, rc::Rc, str::FromStr}; use crate::{ - errors::TemplateError, + errors::{ICError, TemplateError}, interpreter::ICInfo, network::Connection, vm::{ @@ -77,10 +77,13 @@ pub struct ObjectInfo { 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 { @@ -97,10 +100,13 @@ impl From<&VMObject> for ObjectInfo { 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, } } } @@ -125,10 +131,13 @@ impl ObjectInfo { 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, } } @@ -229,6 +238,8 @@ impl ObjectInfo { .collect(), ); } + let visible_devices = device.get_vm().visible_devices(*device.get_id()); + self.visible_devices.replace(visible_devices); self } @@ -254,6 +265,29 @@ impl ObjectInfo { }) .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 } @@ -282,6 +316,10 @@ impl ObjectInfo { 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 } @@ -868,15 +906,10 @@ impl FrozenObject { .get_template(Prefab::Hash(obj_ref.get_prefab().hash)) .map_or_else( || try_template_from_interfaces(&interfaces, obj), - |template| { - Ok(template) - }, + |template| Ok(template), )?; - Ok(FrozenObjectFull { - obj_info, - template, - }) + Ok(FrozenObjectFull { obj_info, template }) } pub fn freeze_object_sparse(obj: &VMObject, vm: &Rc) -> Result { diff --git a/stationeers_data/src/database/prefab_map.rs b/stationeers_data/src/database/prefab_map.rs index eb15523..415ad50 100644 --- a/stationeers_data/src/database/prefab_map.rs +++ b/stationeers_data/src/database/prefab_map.rs @@ -20460,31 +20460,353 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), typ : "PrinterInstruction".into(), value : 6i64 }), + .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(), typ : "PrinterInstruction".into(), value : 8i64 }), + .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(), typ : "PrinterInstruction".into(), value : 7i64 }), + .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(), typ : "PrinterInstruction".into(), value : 2i64 }), + .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(), typ : "PrinterInstruction".into(), value : 4i64 }), + .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(), typ : "PrinterInstruction".into(), value : 5i64 }), + .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(), typ : "PrinterInstruction".into(), value : 9i64 }), + .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(), typ : "PrinterInstruction".into(), value : 1i64 }), + .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(), typ : "PrinterInstruction".into(), value : 3i64 }) + .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(), @@ -21692,31 +22014,353 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), typ : "PrinterInstruction".into(), value : 6i64 }), + .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(), typ : "PrinterInstruction".into(), value : 8i64 }), + .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(), typ : "PrinterInstruction".into(), value : 7i64 }), + .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(), typ : "PrinterInstruction".into(), value : 2i64 }), + .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(), typ : "PrinterInstruction".into(), value : 4i64 }), + .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(), typ : "PrinterInstruction".into(), value : 5i64 }), + .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(), typ : "PrinterInstruction".into(), value : 9i64 }), + .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(), typ : "PrinterInstruction".into(), value : 1i64 }), + .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(), typ : "PrinterInstruction".into(), value : 3i64 }) + .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(), @@ -21952,31 +22596,353 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), typ : "PrinterInstruction".into(), value : 6i64 }), + .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(), typ : "PrinterInstruction".into(), value : 8i64 }), + .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(), typ : "PrinterInstruction".into(), value : 7i64 }), + .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(), typ : "PrinterInstruction".into(), value : 2i64 }), + .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(), typ : "PrinterInstruction".into(), value : 4i64 }), + .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(), typ : "PrinterInstruction".into(), value : 5i64 }), + .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(), typ : "PrinterInstruction".into(), value : 9i64 }), + .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(), typ : "PrinterInstruction".into(), value : 1i64 }), + .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(), typ : "PrinterInstruction".into(), value : 3i64 }) + .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(), @@ -29510,31 +30476,353 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), typ : "PrinterInstruction".into(), value : 6i64 }), + .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(), typ : "PrinterInstruction".into(), value : 8i64 }), + .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(), typ : "PrinterInstruction".into(), value : 7i64 }), + .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(), typ : "PrinterInstruction".into(), value : 2i64 }), + .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(), typ : "PrinterInstruction".into(), value : 4i64 }), + .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(), typ : "PrinterInstruction".into(), value : 5i64 }), + .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(), typ : "PrinterInstruction".into(), value : 9i64 }), + .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(), typ : "PrinterInstruction".into(), value : 1i64 }), + .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(), typ : "PrinterInstruction".into(), value : 3i64 }) + .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(), @@ -32726,31 +34014,353 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), typ : "PrinterInstruction".into(), value : 6i64 }), + .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(), typ : "PrinterInstruction".into(), value : 8i64 }), + .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(), typ : "PrinterInstruction".into(), value : 7i64 }), + .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(), typ : "PrinterInstruction".into(), value : 2i64 }), + .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(), typ : "PrinterInstruction".into(), value : 4i64 }), + .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(), typ : "PrinterInstruction".into(), value : 5i64 }), + .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(), typ : "PrinterInstruction".into(), value : 9i64 }), + .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(), typ : "PrinterInstruction".into(), value : 1i64 }), + .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(), typ : "PrinterInstruction".into(), value : 3i64 }) + .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(), @@ -36849,22 +38459,263 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), typ : "SorterInstruction".into(), value : 1i64 }), + .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(), typ : "SorterInstruction".into(), value : 2i64 }), + .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(), typ : "SorterInstruction".into(), value : 5i64 }), + .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(), typ : "SorterInstruction".into(), value : 4i64 }), + .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(), typ : "SorterInstruction".into(), value : 3i64 }), + .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(), typ : "SorterInstruction".into(), value : 6i64 }) + .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(), @@ -41203,7 +43054,61 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), typ : "CelestialTracking".into(), value : 1i64 }) + .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(), @@ -41704,31 +43609,353 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), typ : "PrinterInstruction".into(), value : 6i64 }), + .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(), typ : "PrinterInstruction".into(), value : 8i64 }), + .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(), typ : "PrinterInstruction".into(), value : 7i64 }), + .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(), typ : "PrinterInstruction".into(), value : 2i64 }), + .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(), typ : "PrinterInstruction".into(), value : 4i64 }), + .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(), typ : "PrinterInstruction".into(), value : 5i64 }), + .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(), typ : "PrinterInstruction".into(), value : 9i64 }), + .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(), typ : "PrinterInstruction".into(), value : 1i64 }), + .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(), typ : "PrinterInstruction".into(), value : 3i64 }) + .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(), @@ -42470,31 +44697,353 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), typ : "PrinterInstruction".into(), value : 6i64 }), + .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(), typ : "PrinterInstruction".into(), value : 8i64 }), + .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(), typ : "PrinterInstruction".into(), value : 7i64 }), + .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(), typ : "PrinterInstruction".into(), value : 2i64 }), + .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(), typ : "PrinterInstruction".into(), value : 4i64 }), + .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(), typ : "PrinterInstruction".into(), value : 5i64 }), + .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(), typ : "PrinterInstruction".into(), value : 9i64 }), + .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(), typ : "PrinterInstruction".into(), value : 1i64 }), + .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(), typ : "PrinterInstruction".into(), value : 3i64 }) + .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(), @@ -46611,31 +49160,353 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), typ : "PrinterInstruction".into(), value : 6i64 }), + .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(), typ : "PrinterInstruction".into(), value : 8i64 }), + .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(), typ : "PrinterInstruction".into(), value : 7i64 }), + .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(), typ : "PrinterInstruction".into(), value : 2i64 }), + .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(), typ : "PrinterInstruction".into(), value : 4i64 }), + .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(), typ : "PrinterInstruction".into(), value : 5i64 }), + .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(), typ : "PrinterInstruction".into(), value : 9i64 }), + .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(), typ : "PrinterInstruction".into(), value : 1i64 }), + .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(), typ : "PrinterInstruction".into(), value : 3i64 }) + .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(), diff --git a/stationeers_data/src/templates.rs b/stationeers_data/src/templates.rs index b079e9d..2c60da7 100644 --- a/stationeers_data/src/templates.rs +++ b/stationeers_data/src/templates.rs @@ -291,12 +291,36 @@ 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)] diff --git a/www/data/database.json b/www/data/database.json index 3cf93e7..7c9fb13 100644 --- a/www/data/database.json +++ b/www/data/database.json @@ -6212,8 +6212,7 @@ "hygine_reduction_multiplier": 1.5, "waste_max_pressure": 4053.0 }, - "memory": { - "instructions": null, + "memory": {, "memory_access": "ReadWrite", "memory_size": 0 } @@ -6493,8 +6492,7 @@ "circuit_holder": false }, "slots": [], - "memory": { - "instructions": null, + "memory": {, "memory_access": "ReadWrite", "memory_size": 512 } @@ -16637,48 +16635,345 @@ "instructions": { "DeviceSetLock": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 6 + "value": 6, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "LOCK_STATE", + "typ": "Bool8" + }, + { + "range": [ + 16, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 48 + } + } + ] }, "EjectAllReagents": { "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "description_stripped": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", "typ": "PrinterInstruction", - "value": 8 + "value": 8, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 56 + } + } + ] }, "EjectReagent": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 7 + "value": 7, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 39 + ], + "name": "REAGENT_HASH", + "typ": "Int32" + }, + { + "range": [ + 40, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 24 + } + } + ] }, "ExecuteRecipe": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 2 + "value": 2, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "QUANTITY", + "typ": "Byte8" + }, + { + "range": [ + 16, + 47 + ], + "name": "PREFAB_HASH", + "typ": "Int32" + }, + { + "range": [ + 48, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 16 + } + } + ] }, "JumpIfNextInvalid": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 4 + "value": 4, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "STACK_ADDRESS", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "JumpToAddress": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 5 + "value": 5, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "STACK_ADDRESS", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "MissingRecipeReagent": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 9 + "value": 9, + "valid": [ + 54, + 62 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "QUANTITY_CEIL", + "typ": "Byte8" + }, + { + "range": [ + 16, + 47 + ], + "name": "REAGENT_HASH", + "typ": "Int32" + }, + { + "range": [ + 48, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 16 + } + } + ] }, "StackPointer": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 1 + "value": 1, + "valid": [ + 63, + null + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "INDEX", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "WaitUntilNextValid": { "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "description_stripped": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", "typ": "PrinterInstruction", - "value": 3 + "value": 3, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 56 + } + } + ] } }, "memory_access": "ReadWrite", @@ -19070,48 +19365,345 @@ "instructions": { "DeviceSetLock": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 6 + "value": 6, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "LOCK_STATE", + "typ": "Bool8" + }, + { + "range": [ + 16, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 48 + } + } + ] }, "EjectAllReagents": { "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "description_stripped": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", "typ": "PrinterInstruction", - "value": 8 + "value": 8, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 56 + } + } + ] }, "EjectReagent": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 7 + "value": 7, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 39 + ], + "name": "REAGENT_HASH", + "typ": "Int32" + }, + { + "range": [ + 40, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 24 + } + } + ] }, "ExecuteRecipe": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 2 + "value": 2, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "QUANTITY", + "typ": "Byte8" + }, + { + "range": [ + 16, + 47 + ], + "name": "PREFAB_HASH", + "typ": "Int32" + }, + { + "range": [ + 48, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 16 + } + } + ] }, "JumpIfNextInvalid": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 4 + "value": 4, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "STACK_ADDRESS", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "JumpToAddress": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 5 + "value": 5, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "STACK_ADDRESS", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "MissingRecipeReagent": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 9 + "value": 9, + "valid": [ + 54, + 62 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "QUANTITY_CEIL", + "typ": "Byte8" + }, + { + "range": [ + 16, + 47 + ], + "name": "REAGENT_HASH", + "typ": "Int32" + }, + { + "range": [ + 48, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 16 + } + } + ] }, "StackPointer": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 1 + "value": 1, + "valid": [ + 63, + null + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "INDEX", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "WaitUntilNextValid": { "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "description_stripped": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", "typ": "PrinterInstruction", - "value": 3 + "value": 3, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 56 + } + } + ] } }, "memory_access": "ReadWrite", @@ -19689,48 +20281,345 @@ "instructions": { "DeviceSetLock": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 6 + "value": 6, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "LOCK_STATE", + "typ": "Bool8" + }, + { + "range": [ + 16, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 48 + } + } + ] }, "EjectAllReagents": { "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "description_stripped": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", "typ": "PrinterInstruction", - "value": 8 + "value": 8, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 56 + } + } + ] }, "EjectReagent": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 7 + "value": 7, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 39 + ], + "name": "REAGENT_HASH", + "typ": "Int32" + }, + { + "range": [ + 40, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 24 + } + } + ] }, "ExecuteRecipe": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 2 + "value": 2, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "QUANTITY", + "typ": "Byte8" + }, + { + "range": [ + 16, + 47 + ], + "name": "PREFAB_HASH", + "typ": "Int32" + }, + { + "range": [ + 48, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 16 + } + } + ] }, "JumpIfNextInvalid": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 4 + "value": 4, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "STACK_ADDRESS", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "JumpToAddress": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 5 + "value": 5, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "STACK_ADDRESS", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "MissingRecipeReagent": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 9 + "value": 9, + "valid": [ + 54, + 62 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "QUANTITY_CEIL", + "typ": "Byte8" + }, + { + "range": [ + 16, + 47 + ], + "name": "REAGENT_HASH", + "typ": "Int32" + }, + { + "range": [ + 48, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 16 + } + } + ] }, "StackPointer": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 1 + "value": 1, + "valid": [ + 63, + null + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "INDEX", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "WaitUntilNextValid": { "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "description_stripped": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", "typ": "PrinterInstruction", - "value": 3 + "value": 3, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 56 + } + } + ] } }, "memory_access": "ReadWrite", @@ -30132,48 +31021,345 @@ "instructions": { "DeviceSetLock": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 6 + "value": 6, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "LOCK_STATE", + "typ": "Bool8" + }, + { + "range": [ + 16, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 48 + } + } + ] }, "EjectAllReagents": { "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "description_stripped": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", "typ": "PrinterInstruction", - "value": 8 + "value": 8, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 56 + } + } + ] }, "EjectReagent": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 7 + "value": 7, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 39 + ], + "name": "REAGENT_HASH", + "typ": "Int32" + }, + { + "range": [ + 40, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 24 + } + } + ] }, "ExecuteRecipe": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 2 + "value": 2, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "QUANTITY", + "typ": "Byte8" + }, + { + "range": [ + 16, + 47 + ], + "name": "PREFAB_HASH", + "typ": "Int32" + }, + { + "range": [ + 48, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 16 + } + } + ] }, "JumpIfNextInvalid": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 4 + "value": 4, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "STACK_ADDRESS", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "JumpToAddress": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 5 + "value": 5, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "STACK_ADDRESS", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "MissingRecipeReagent": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 9 + "value": 9, + "valid": [ + 54, + 62 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "QUANTITY_CEIL", + "typ": "Byte8" + }, + { + "range": [ + 16, + 47 + ], + "name": "REAGENT_HASH", + "typ": "Int32" + }, + { + "range": [ + 48, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 16 + } + } + ] }, "StackPointer": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 1 + "value": 1, + "valid": [ + 63, + null + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "INDEX", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "WaitUntilNextValid": { "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "description_stripped": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", "typ": "PrinterInstruction", - "value": 3 + "value": 3, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 56 + } + } + ] } }, "memory_access": "ReadWrite", @@ -35333,48 +36519,345 @@ "instructions": { "DeviceSetLock": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 6 + "value": 6, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "LOCK_STATE", + "typ": "Bool8" + }, + { + "range": [ + 16, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 48 + } + } + ] }, "EjectAllReagents": { "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "description_stripped": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", "typ": "PrinterInstruction", - "value": 8 + "value": 8, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 56 + } + } + ] }, "EjectReagent": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 7 + "value": 7, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 39 + ], + "name": "REAGENT_HASH", + "typ": "Int32" + }, + { + "range": [ + 40, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 24 + } + } + ] }, "ExecuteRecipe": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 2 + "value": 2, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "QUANTITY", + "typ": "Byte8" + }, + { + "range": [ + 16, + 47 + ], + "name": "PREFAB_HASH", + "typ": "Int32" + }, + { + "range": [ + 48, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 16 + } + } + ] }, "JumpIfNextInvalid": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 4 + "value": 4, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "STACK_ADDRESS", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "JumpToAddress": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 5 + "value": 5, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "STACK_ADDRESS", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "MissingRecipeReagent": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 9 + "value": 9, + "valid": [ + 54, + 62 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "QUANTITY_CEIL", + "typ": "Byte8" + }, + { + "range": [ + 16, + 47 + ], + "name": "REAGENT_HASH", + "typ": "Int32" + }, + { + "range": [ + 48, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 16 + } + } + ] }, "StackPointer": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 1 + "value": 1, + "valid": [ + 63, + null + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "INDEX", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "WaitUntilNextValid": { "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "description_stripped": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", "typ": "PrinterInstruction", - "value": 3 + "value": 3, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 56 + } + } + ] } }, "memory_access": "ReadWrite", @@ -39351,33 +40834,255 @@ "instructions": { "FilterPrefabHashEquals": { "description": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | PREFAB_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |", + "description_stripped": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | PREFAB_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |", "typ": "SorterInstruction", - "value": 1 + "value": 1, + "valid": [ + 0, + null + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 39 + ], + "name": "PREFAB_HASH", + "typ": "Int32" + }, + { + "range": [ + 40, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 24 + } + } + ] }, "FilterPrefabHashNotEquals": { "description": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | PREFAB_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |", + "description_stripped": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | PREFAB_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |", "typ": "SorterInstruction", - "value": 2 + "value": 2, + "valid": [ + 0, + null + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 39 + ], + "name": "PREFAB_HASH", + "typ": "Int32" + }, + { + "range": [ + 40, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 24 + } + } + ] }, "FilterQuantityCompare": { "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 |", + "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 |", "typ": "SorterInstruction", - "value": 5 + "value": 5, + "valid": [ + 0, + null + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "CONDITION_OPERATION", + "typ": "Byte8" + }, + { + "range": [ + 16, + 31 + ], + "name": "QUANTITY", + "typ": "UShort16" + }, + { + "range": [ + 32, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 32 + } + } + ] }, "FilterSlotTypeCompare": { "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 |", + "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 |", "typ": "SorterInstruction", - "value": 4 + "value": 4, + "valid": [ + 0, + null + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "CONDITION_OPERATION", + "typ": "Byte8" + }, + { + "range": [ + 16, + 31 + ], + "name": "SLOT_TYPE", + "typ": "UShort16" + }, + { + "range": [ + 32, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 32 + } + } + ] }, "FilterSortingClassCompare": { "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 |", + "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 |", "typ": "SorterInstruction", - "value": 3 + "value": 3, + "valid": [ + 0, + null + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "CONDITION_OPERATION", + "typ": "Byte8" + }, + { + "range": [ + 16, + 31 + ], + "name": "SORTING_CLASS", + "typ": "UShort16" + }, + { + "range": [ + 32, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 32 + } + } + ] }, "LimitNextExecutionByCount": { "description": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |", + "description_stripped": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |", "typ": "SorterInstruction", - "value": 6 + "value": 6, + "valid": [ + 0, + null + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 39 + ], + "name": "COUNT", + "typ": "UInt32" + }, + { + "range": [ + 40, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 24 + } + } + ] } }, "memory_access": "ReadWrite", @@ -43813,8 +45518,57 @@ "instructions": { "BodyOrientation": { "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 |", + "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 |", "typ": "CelestialTracking", - "value": 1 + "value": 1, + "valid": [ + 0, + null + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "CELESTIAL_INDEX", + "typ": "Byte8" + }, + { + "range": [ + 16, + 31 + ], + "name": "HORIZONTAL_DECI_DEGREES", + "typ": "Short16" + }, + { + "range": [ + 32, + 47 + ], + "name": "VERTICAL_DECI_DEGREES", + "typ": "Short16" + }, + { + "range": [ + 48, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 16 + } + } + ] } }, "memory_access": "Read", @@ -44906,48 +46660,345 @@ "instructions": { "DeviceSetLock": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 6 + "value": 6, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "LOCK_STATE", + "typ": "Bool8" + }, + { + "range": [ + 16, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 48 + } + } + ] }, "EjectAllReagents": { "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "description_stripped": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", "typ": "PrinterInstruction", - "value": 8 + "value": 8, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 56 + } + } + ] }, "EjectReagent": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 7 + "value": 7, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 39 + ], + "name": "REAGENT_HASH", + "typ": "Int32" + }, + { + "range": [ + 40, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 24 + } + } + ] }, "ExecuteRecipe": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 2 + "value": 2, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "QUANTITY", + "typ": "Byte8" + }, + { + "range": [ + 16, + 47 + ], + "name": "PREFAB_HASH", + "typ": "Int32" + }, + { + "range": [ + 48, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 16 + } + } + ] }, "JumpIfNextInvalid": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 4 + "value": 4, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "STACK_ADDRESS", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "JumpToAddress": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 5 + "value": 5, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "STACK_ADDRESS", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "MissingRecipeReagent": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 9 + "value": 9, + "valid": [ + 54, + 62 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "QUANTITY_CEIL", + "typ": "Byte8" + }, + { + "range": [ + 16, + 47 + ], + "name": "REAGENT_HASH", + "typ": "Int32" + }, + { + "range": [ + 48, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 16 + } + } + ] }, "StackPointer": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 1 + "value": 1, + "valid": [ + 63, + null + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "INDEX", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "WaitUntilNextValid": { "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "description_stripped": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", "typ": "PrinterInstruction", - "value": 3 + "value": 3, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 56 + } + } + ] } }, "memory_access": "ReadWrite", @@ -46134,48 +48185,345 @@ "instructions": { "DeviceSetLock": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 6 + "value": 6, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "LOCK_STATE", + "typ": "Bool8" + }, + { + "range": [ + 16, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 48 + } + } + ] }, "EjectAllReagents": { "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "description_stripped": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", "typ": "PrinterInstruction", - "value": 8 + "value": 8, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 56 + } + } + ] }, "EjectReagent": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 7 + "value": 7, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 39 + ], + "name": "REAGENT_HASH", + "typ": "Int32" + }, + { + "range": [ + 40, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 24 + } + } + ] }, "ExecuteRecipe": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 2 + "value": 2, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "QUANTITY", + "typ": "Byte8" + }, + { + "range": [ + 16, + 47 + ], + "name": "PREFAB_HASH", + "typ": "Int32" + }, + { + "range": [ + 48, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 16 + } + } + ] }, "JumpIfNextInvalid": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 4 + "value": 4, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "STACK_ADDRESS", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "JumpToAddress": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 5 + "value": 5, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "STACK_ADDRESS", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "MissingRecipeReagent": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 9 + "value": 9, + "valid": [ + 54, + 62 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "QUANTITY_CEIL", + "typ": "Byte8" + }, + { + "range": [ + 16, + 47 + ], + "name": "REAGENT_HASH", + "typ": "Int32" + }, + { + "range": [ + 48, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 16 + } + } + ] }, "StackPointer": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 1 + "value": 1, + "valid": [ + 63, + null + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "INDEX", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "WaitUntilNextValid": { "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "description_stripped": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", "typ": "PrinterInstruction", - "value": 3 + "value": 3, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 56 + } + } + ] } }, "memory_access": "ReadWrite", @@ -52365,48 +54713,345 @@ "instructions": { "DeviceSetLock": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 6 + "value": 6, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "LOCK_STATE", + "typ": "Bool8" + }, + { + "range": [ + 16, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 48 + } + } + ] }, "EjectAllReagents": { "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "description_stripped": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", "typ": "PrinterInstruction", - "value": 8 + "value": 8, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 56 + } + } + ] }, "EjectReagent": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 7 + "value": 7, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 39 + ], + "name": "REAGENT_HASH", + "typ": "Int32" + }, + { + "range": [ + 40, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 24 + } + } + ] }, "ExecuteRecipe": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 2 + "value": 2, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "QUANTITY", + "typ": "Byte8" + }, + { + "range": [ + 16, + 47 + ], + "name": "PREFAB_HASH", + "typ": "Int32" + }, + { + "range": [ + 48, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 16 + } + } + ] }, "JumpIfNextInvalid": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 4 + "value": 4, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "STACK_ADDRESS", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "JumpToAddress": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 5 + "value": 5, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "STACK_ADDRESS", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "MissingRecipeReagent": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 9 + "value": 9, + "valid": [ + 54, + 62 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 15 + ], + "name": "QUANTITY_CEIL", + "typ": "Byte8" + }, + { + "range": [ + 16, + 47 + ], + "name": "REAGENT_HASH", + "typ": "Int32" + }, + { + "range": [ + 48, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 16 + } + } + ] }, "StackPointer": { "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 |", + "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 |", "typ": "PrinterInstruction", - "value": 1 + "value": 1, + "valid": [ + 63, + null + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 23 + ], + "name": "INDEX", + "typ": "UShort16" + }, + { + "range": [ + 24, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 40 + } + } + ] }, "WaitUntilNextValid": { "description": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", + "description_stripped": "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |", "typ": "PrinterInstruction", - "value": 3 + "value": 3, + "valid": [ + 0, + 53 + ], + "parts": [ + { + "range": [ + 0, + 7 + ], + "name": "OP_CODE", + "typ": "Byte8" + }, + { + "range": [ + 8, + 63 + ], + "name": "UNUSED", + "typ": { + "Unused": 56 + } + } + ] } }, "memory_access": "ReadWrite", diff --git a/www/src/ts/utils.ts b/www/src/ts/utils.ts index 386fe4c..50a176f 100644 --- a/www/src/ts/utils.ts +++ b/www/src/ts/utils.ts @@ -328,9 +328,23 @@ interface TypedEventTargetInterface extends EventTarget { options?: boolean | AddEventListenerOptions, ): void; + removeEventListener( + type: K, + callback: ( + event: EventMap[K] extends Event ? EventMap[K] : never, + ) => EventMap[K] extends Event ? void : never, + options?: boolean | AddEventListenerOptions, + ): void; + addEventListener( type: string, callback: EventListenerOrEventListenerObject | null, options?: EventListenerOptions | boolean, ): void; + + removeEventListener( + type: string, + callback: EventListenerOrEventListenerObject | null, + options?: EventListenerOptions | boolean, + ): void; } diff --git a/www/src/ts/virtual_machine/base_device.ts b/www/src/ts/virtual_machine/base_device.ts index 230da86..27c57ed 100644 --- a/www/src/ts/virtual_machine/base_device.ts +++ b/www/src/ts/virtual_machine/base_device.ts @@ -10,6 +10,10 @@ import type { ObjectID, TemplateDatabase, FrozenObjectFull, + Class, + LogicSlotType, + SlotOccupantInfo, + ICState, } from "ic10emu_wasm"; import { crc32, structuralEqual } from "utils"; import { LitElement, PropertyValueMap } from "lit"; @@ -24,20 +28,22 @@ export declare class VMObjectMixinInterface { nameHash: number | null; prefabName: string | null; prefabHash: number | null; - fields: Map; - slots: Slot[]; - reagents: Map; - connections: Connection[]; - icIP: number; - icOpCount: number; - icState: string; - errors: ICError[]; + logicFields: Map | null; + slots: VmObjectSlotInfo[] | null; + slotsCount: number | null; + reagents: Map | null; + connections: Connection[] | null; + icIP: number | null; + icOpCount: number | null; + icState: string | null; + errors: ICError[] | null; registers: number[] | null; memory: number[] | null; aliases: Map | null; - defines: Map | null; + defines: Map | null; numPins: number | null; pins: Map | null; + visibleDevices: ObjectID[] | null; _handleDeviceModified(e: CustomEvent): void; updateDevice(): void; updateIC(): void; @@ -54,23 +60,34 @@ export type VMObjectMixinSubscription = | "slots-count" | "reagents" | "connections" + | "memory" | "ic" | "active-ic" | { field: LogicType } | { slot: number } | "visible-devices"; +export interface VmObjectSlotInfo { + parent: ObjectID; + index: number; + name: string; + typ: Class; + logicFields: Map; + quantity: number; + occupant: FrozenObjectFull | undefined; +} + export const VMObjectMixin = >( superClass: T, ) => { class VMObjectMixinClass extends superClass { - private _deviceID: number; - get deviceID() { - return this._deviceID; + private _objectID: number; + get objectID() { + return this._objectID; } @property({ type: Number }) - set deviceID(val: number) { - this._deviceID = val; + set objectID(val: number) { + this._objectID = val; this.updateDevice(); } @@ -93,40 +110,42 @@ export const VMObjectMixin = >( @state() name: string | null = null; @state() nameHash: number | null = null; - @state() prefabName: string | null; - @state() prefabHash: number | null; - @state() fields: Map; - @state() slots: Slot[]; - @state() reagents: Map; - @state() connections: Connection[]; - @state() icIP: number; - @state() icOpCount: number; - @state() icState: string; - @state() errors: ICError[]; - @state() registers: number[] | null; - @state() memory: number[] | null; - @state() aliases: Map | null; - @state() defines: Map | null; - @state() numPins: number | null; - @state() pins: Map | null; + @state() prefabName: string | null = null; + @state() prefabHash: number | null = null; + @state() logicFields: Map | null = null; + @state() slots: VmObjectSlotInfo[] | null = null; + @state() slotsCount: number | null = null; + @state() reagents: Map | null = null; + @state() connections: Connection[] | null = null; + @state() icIP: number | null = null; + @state() icOpCount: number | null = null; + @state() icState: ICState | null = null; + @state() errors: ICError[] | null = null; + @state() registers: number[] | null = null; + @state() memory: number[] | null = null; + @state() aliases: Map | null = null; + @state() defines: Map | null = null; + @state() numPins: number | null = null; + @state() pins: Map | null = null; + @state() visibleDevices: ObjectID[] | null = null; connectedCallback(): void { const root = super.connectedCallback(); window.VM.get().then((vm) => { vm.addEventListener( - "vm-device-modified", + "vm-objects-modified", this._handleDeviceModified.bind(this), ); vm.addEventListener( - "vm-devices-update", + "vm-objects-update", this._handleDevicesModified.bind(this), ); vm.addEventListener( - "vm-device-id-change", + "vm-object-id-change", this._handleDeviceIdChange.bind(this), ); vm.addEventListener( - "vm-devices-removed", + "vm-objects-removed", this._handleDevicesRemoved.bind(this), ); }); @@ -137,19 +156,19 @@ export const VMObjectMixin = >( disconnectedCallback(): void { window.VM.get().then((vm) => { vm.removeEventListener( - "vm-device-modified", + "vm-objects-modified", this._handleDeviceModified.bind(this), ); vm.removeEventListener( - "vm-devices-update", + "vm-objects-update", this._handleDevicesModified.bind(this), ); vm.removeEventListener( - "vm-device-id-change", + "vm-object-id-change", this._handleDeviceIdChange.bind(this), ); vm.removeEventListener( - "vm-devices-removed", + "vm-objects-removed", this._handleDevicesRemoved.bind(this), ); }); @@ -158,7 +177,7 @@ export const VMObjectMixin = >( async _handleDeviceModified(e: CustomEvent) { const id = e.detail; const activeIcId = window.App.app.session.activeIC; - if (this.deviceID === id) { + if (this.objectID === id) { this.updateDevice(); } else if ( id === activeIcId && @@ -168,7 +187,7 @@ export const VMObjectMixin = >( this.requestUpdate(); } else if (this.objectSubscriptions.includes("visible-devices")) { const visibleDevices = await window.VM.vm.visibleDeviceIds( - this.deviceID, + this.objectID, ); if (visibleDevices.includes(id)) { this.updateDevice(); @@ -180,7 +199,7 @@ export const VMObjectMixin = >( async _handleDevicesModified(e: CustomEvent) { const activeIcId = window.App.app.session.activeIC; const ids = e.detail; - if (ids.includes(this.deviceID)) { + if (ids.includes(this.objectID)) { this.updateDevice(); if (this.objectSubscriptions.includes("visible-devices")) { this.requestUpdate(); @@ -193,7 +212,7 @@ export const VMObjectMixin = >( this.requestUpdate(); } else if (this.objectSubscriptions.includes("visible-devices")) { const visibleDevices = await window.VM.vm.visibleDeviceIds( - this.deviceID, + this.objectID, ); if (ids.some((id) => visibleDevices.includes(id))) { this.updateDevice(); @@ -203,11 +222,11 @@ export const VMObjectMixin = >( } async _handleDeviceIdChange(e: CustomEvent<{ old: number; new: number }>) { - if (this.deviceID === e.detail.old) { - this.deviceID = e.detail.new; + if (this.objectID === e.detail.old) { + this.objectID = e.detail.new; } else if (this.objectSubscriptions.includes("visible-devices")) { const visibleDevices = await window.VM.vm.visibleDeviceIds( - this.deviceID, + this.objectID, ); if ( visibleDevices.some( @@ -227,48 +246,86 @@ export const VMObjectMixin = >( } updateDevice() { - this.obj = window.VM.vm.objects.get(this.deviceID)!; + this.obj = window.VM.vm.objects.get(this.objectID)!; if (typeof this.obj === "undefined") { return; } + let newFields: Map | null = null; if ( - this.objectSubscriptions.includes("slots") || - this.objectSubscriptions.includes("slots-count") + this.objectSubscriptions.some( + (sub) => + sub === "fields" || (typeof sub === "object" && "field" in sub), + ) ) { - const slotsOccupantInfo = this.obj.obj_info.slots; + const logicValues = + this.obj.obj_info.logic_values ?? new Map(); + const logicTemplate = + "logic" in this.obj.template ? this.obj.template.logic : null; + newFields = new Map( + Array.from(logicTemplate?.logic_types.entries() ?? []).map( + ([lt, access]) => { + let field: LogicField = { + field_type: access, + value: logicValues.get(lt) ?? 0, + }; + return [lt, field]; + }, + ), + ); + } + + const visibleDevices = this.obj.obj_info.visible_devices ?? []; + if (!structuralEqual(this.visibleDevices, visibleDevices)) { + this.visibleDevices = visibleDevices; + } + + let newSlots: VmObjectSlotInfo[] | null = null; + if ( + this.objectSubscriptions.some( + (sub) => + sub === "slots" || (typeof sub === "object" && "slot" in sub), + ) + ) { + const slotsOccupantInfo = + this.obj.obj_info.slots ?? new Map(); + const slotsLogicValues = + this.obj.obj_info.slot_logic_values ?? + new Map>(); const logicTemplate = "logic" in this.obj.template ? this.obj.template.logic : null; const slotsTemplate = "slots" in this.obj.template ? this.obj.template.slots : []; - let slots: Slot[] | null = null; - if (slotsOccupantInfo.size !== 0) { - slots = slotsTemplate.map((template, index) => { - let slot = { - parent: this.obj.obj_info.id, - index: index, - name: template.name, - typ: template.typ, - readable_logic: Array.from( - logicTemplate?.logic_slot_types.get(index)?.entries() ?? [], - ) - .filter(([_, val]) => val === "Read" || val === "ReadWrite") - .map(([key, _]) => key), - writeable_logic: Array.from( - logicTemplate?.logic_slot_types.get(index)?.entries() ?? [], - ) - .filter(([_, val]) => val === "Write" || val === "ReadWrite") - .map(([key, _]) => key), - occupant: slotsOccupantInfo.get(index), - }; - return slot; - }); - } - - if (!structuralEqual(this.slots, slots)) { - this.slots = slots; - } + newSlots = slotsTemplate.map((template, index) => { + const fieldEntryInfos = Array.from( + logicTemplate?.logic_slot_types.get(index).entries() ?? [], + ); + const logicFields = new Map( + fieldEntryInfos.map(([slt, access]) => { + let field: LogicField = { + field_type: access, + value: slotsLogicValues.get(index)?.get(slt) ?? 0, + }; + return [slt, field]; + }), + ); + let occupantInfo = slotsOccupantInfo.get(index); + let occupant = + typeof occupantInfo !== "undefined" + ? window.VM.vm.objects.get(occupantInfo.id) + : null; + let slot: VmObjectSlotInfo = { + parent: this.obj.obj_info.id, + index: index, + name: template.name, + typ: template.typ, + logicFields: logicFields, + occupant: occupant, + quantity: occupantInfo?.quantity ?? 0, + }; + return slot; + }); } for (const sub of this.objectSubscriptions) { @@ -293,22 +350,20 @@ export const VMObjectMixin = >( this.prefabHash = crc32(prefabName); } } else if (sub === "fields") { - const fields = this.obj.obj_info.logic_values ?? null; - const logicTemplate = - "logic" in this.obj.template ? this.obj.template.logic : null; - let logic_fields: Map | null = null; - if (fields !== null) { - logic_fields = new Map(); - for (const [lt, val] of fields) { - const access = logicTemplate?.logic_types.get(lt) ?? "Read"; - logic_fields.set(lt, { - value: val, - field_type: access, - }); - } + if (!structuralEqual(this.logicFields, newFields)) { + this.logicFields = newFields; } - if (!structuralEqual(this.fields, logic_fields)) { - this.fields = logic_fields; + } else if (sub === "slots") { + if (!structuralEqual(this.slots, newSlots)) { + this.slots = newSlots; + this.slotsCount = newSlots.length; + } + } else if (sub === "slots-count") { + const slotsTemplate = + "slots" in this.obj.template ? this.obj.template.slots : []; + const slotsCount = slotsTemplate.length; + if (this.slotsCount !== slotsCount) { + this.slotsCount = slotsCount; } } else if (sub === "reagents") { const reagents = this.obj.obj_info.reagents; @@ -367,10 +422,15 @@ export const VMObjectMixin = >( if (!structuralEqual(this.connections, connections)) { this.connections = connections; } + } else if (sub === "memory") { + const stack = this.obj.obj_info.memory ?? null; + if (!structuralEqual(this.memory, stack)) { + this.memory = stack; + } } else if (sub === "ic") { if ( typeof this.obj.obj_info.circuit !== "undefined" || - this.obj.obj_info.socketed_ic !== "undefined" + typeof this.obj.obj_info.socketed_ic !== "undefined" ) { this.updateIC(); } @@ -382,21 +442,19 @@ export const VMObjectMixin = >( } } else { if ("field" in sub) { - const fields = this.obj.obj_info.logic_values; - if (this.fields.get(sub.field) !== fields.get(sub.field)) { - this.fields = fields; + if (this.logicFields.get(sub.field) !== newFields.get(sub.field)) { + this.logicFields = newFields; } } else if ("slot" in sub) { - const slots = this.obj.slots; if ( typeof this.slots === "undefined" || this.slots.length < sub.slot ) { - this.slots = slots; + this.slots = newSlots; } else if ( - !structuralEqual(this.slots[sub.slot], slots[sub.slot]) + !structuralEqual(this.slots[sub.slot], newSlots[sub.slot]) ) { - this.slots = slots; + this.slots = newSlots; } } } @@ -404,41 +462,42 @@ export const VMObjectMixin = >( } updateIC() { - const ip = this.obj.ip!; + const ip = this.obj.obj_info.circuit?.instruction_pointer ?? null; if (this.icIP !== ip) { this.icIP = ip; } - const opCount = this.obj.instructionCount!; + const opCount = + this.obj.obj_info.circuit?.yield_instruciton_count ?? null; if (this.icOpCount !== opCount) { this.icOpCount = opCount; } - const state = this.obj.state!; + const state = this.obj.obj_info.circuit?.state ?? null; if (this.icState !== state) { this.icState = state; } - const errors = this.obj.program?.errors ?? null; + const errors = this.obj.obj_info.compile_errors ?? null; if (!structuralEqual(this.errors, errors)) { this.errors = errors; } - const registers = this.obj.registers ?? null; + const registers = this.obj.obj_info.circuit?.registers ?? null; if (!structuralEqual(this.registers, registers)) { this.registers = registers; } - const stack = this.obj.stack ?? null; - if (!structuralEqual(this.memory, stack)) { - this.memory = stack; - } - const aliases = this.obj.aliases ?? null; + const aliases = this.obj.obj_info.circuit?.aliases ?? null; if (!structuralEqual(this.aliases, aliases)) { this.aliases = aliases; } - const defines = this.obj.defines ?? null; + const defines = this.obj.obj_info.circuit?.defines ?? null; if (!structuralEqual(this.defines, defines)) { this.defines = defines; } - const pins = this.obj.pins ?? null; + const pins = this.obj.obj_info.device_pins ?? new Map(); if (!structuralEqual(this.pins, pins)) { this.pins = pins; + this.numPins = + "device" in this.obj.template + ? this.obj.template.device.device_pins_length + : Math.max(...Array.from(this.pins?.keys() ?? [0])); } } } @@ -492,16 +551,16 @@ export const VMActiveICMixin = >( return VMActiveICMixinClass as Constructor & T; }; -export declare class VMDeviceDBMixinInterface { +export declare class VMTemplateDBMixinInterface { templateDB: TemplateDatabase; _handleDeviceDBLoad(e: CustomEvent): void; postDBSetUpdate(): void; } -export const VMDeviceDBMixin = >( +export const VMTemplateDBMixin = >( superClass: T, ) => { - class VMDeviceDBMixinClass extends superClass { + class VMTemplateDBMixinClass extends superClass { connectedCallback(): void { const root = super.connectedCallback(); window.VM.vm.addEventListener( @@ -540,5 +599,5 @@ export const VMDeviceDBMixin = >( } } - return VMDeviceDBMixinClass as Constructor & T; + return VMTemplateDBMixinClass as Constructor & T; }; diff --git a/www/src/ts/virtual_machine/device/add_device.ts b/www/src/ts/virtual_machine/device/add_device.ts index 96f76c1..56499ef 100644 --- a/www/src/ts/virtual_machine/device/add_device.ts +++ b/www/src/ts/virtual_machine/device/add_device.ts @@ -12,11 +12,11 @@ import { cache } from "lit/directives/cache.js"; import { default as uFuzzy } from "@leeoniya/ufuzzy"; import { when } from "lit/directives/when.js"; import { unsafeHTML } from "lit/directives/unsafe-html.js"; -import { VMDeviceDBMixin } from "virtual_machine/base_device"; +import { VMTemplateDBMixin } from "virtual_machine/base_device"; @customElement("vm-add-device-button") -export class VMAddDeviceButton extends VMDeviceDBMixin(BaseElement) { +export class VMAddDeviceButton extends VMTemplateDBMixin(BaseElement) { static styles = [ ...defaultCss, css` diff --git a/www/src/ts/virtual_machine/device/card.ts b/www/src/ts/virtual_machine/device/card.ts index 91465dd..77c21c5 100644 --- a/www/src/ts/virtual_machine/device/card.ts +++ b/www/src/ts/virtual_machine/device/card.ts @@ -1,7 +1,7 @@ import { html, css, HTMLTemplateResult } from "lit"; import { customElement, property, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMDeviceDBMixin, VMObjectMixin } from "virtual_machine/base_device"; +import { VMTemplateDBMixin, VMObjectMixin } from "virtual_machine/base_device"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; import { parseIntWithHexOrBinary, parseNumber } from "utils"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; @@ -15,7 +15,9 @@ import { repeat } from "lit/directives/repeat.js"; export type CardTab = "fields" | "slots" | "reagents" | "networks" | "pins"; @customElement("vm-device-card") -export class VMDeviceCard extends VMDeviceDBMixin(VMObjectMixin(BaseElement)) { +export class VMDeviceCard extends VMTemplateDBMixin( + VMObjectMixin(BaseElement), +) { image_err: boolean; @property({ type: Boolean }) open: boolean; @@ -141,7 +143,17 @@ export class VMDeviceCard extends VMDeviceDBMixin(VMObjectMixin(BaseElement)) { badges.push(html`db`); } const activeIc = window.VM.vm.activeIC; - activeIc?.pins?.forEach((id, index) => { + + const numPins = + "device" in activeIc?.template + ? activeIc.template.device.device_pins_length + : Math.max( + ...Array.from(activeIc?.obj_info.device_pins?.keys() ?? [0]), + ); + const pins = new Array(numPins) + .fill(true) + .map((_, index) => this.pins.get(index)); + pins.forEach((id, index) => { if (this.objectID == id) { badges.push( html`d${index}`, @@ -150,31 +162,71 @@ export class VMDeviceCard extends VMDeviceDBMixin(VMObjectMixin(BaseElement)) { }, this); return html` - +
- + Id - + - + Name - + - + Hash - + ${badges.map((badge) => badge)}
- - + +
`; @@ -199,13 +251,14 @@ export class VMDeviceCard extends VMDeviceDBMixin(VMObjectMixin(BaseElement)) { "slots", html`
- ${repeat(this.slots, - (slot, index) => slot.typ + index.toString(), - (_slot, index) => html` + ${repeat( + this.slots, + (slot, index) => slot.typ + index.toString(), + (_slot, index) => html` `, - )} + )}
`, ); @@ -219,15 +272,26 @@ export class VMDeviceCard extends VMDeviceDBMixin(VMObjectMixin(BaseElement)) { const vmNetworks = window.VM.vm.networks; const networks = this.connections.map((connection, index, _conns) => { const conn = - typeof connection === "object" ? connection.CableNetwork : null; + typeof connection === "object" && "CableNetwork" in connection + ? connection.CableNetwork + : null; return html` - + Connection:${index} ${vmNetworks.map( - (net) => - html`Network ${net}`, - )} + (net) => + html`Network ${net}`, + )} ${conn?.typ} `; @@ -243,7 +307,7 @@ export class VMDeviceCard extends VMDeviceDBMixin(VMObjectMixin(BaseElement)) { "pins", html`
-
` +
`, ); } @@ -295,7 +359,9 @@ export class VMDeviceCard extends VMDeviceDBMixin(VMObjectMixin(BaseElement)) { Slots Reagents Networks - Pins + Pins ${until(this.renderFields(), html``)} @@ -309,21 +375,37 @@ export class VMDeviceCard extends VMDeviceDBMixin(VMObjectMixin(BaseElement)) { ${until(this.renderNetworks(), html``)} - ${until(this.renderPins(), html``)} + ${until(this.renderPins(), html``)} + - +
- +

Are you sure you want to remove this device?

Id ${this.objectID} : ${this.name ?? this.prefabName}
- Close - Remove + Close + Remove
`; @@ -387,5 +469,4 @@ export class VMDeviceCard extends VMDeviceDBMixin(VMObjectMixin(BaseElement)) { ); this.updateDevice(); } - } diff --git a/www/src/ts/virtual_machine/device/device_list.ts b/www/src/ts/virtual_machine/device/device_list.ts index 871710f..bac5259 100644 --- a/www/src/ts/virtual_machine/device/device_list.ts +++ b/www/src/ts/virtual_machine/device/device_list.ts @@ -151,11 +151,11 @@ export class VMDeviceList extends BaseElement { for (const device_id of this.devices) { const device = window.VM.vm.objects.get(device_id); if (device) { - if (typeof device.name !== "undefined") { - datapoints.push([device.name, device.id]); + if (typeof device.obj_info.name !== "undefined") { + datapoints.push([device.obj_info.name, device.obj_info.id]); } - if (typeof device.prefabName !== "undefined") { - datapoints.push([device.prefabName, device.id]); + if (typeof device.obj_info.prefab !== "undefined") { + datapoints.push([device.obj_info.prefab, device.obj_info.id]); } } } diff --git a/www/src/ts/virtual_machine/device/fields.ts b/www/src/ts/virtual_machine/device/fields.ts index 9592330..a1afdf9 100644 --- a/www/src/ts/virtual_machine/device/fields.ts +++ b/www/src/ts/virtual_machine/device/fields.ts @@ -1,20 +1,20 @@ import { html, css } from "lit"; import { customElement, property } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMDeviceDBMixin, VMObjectMixin } from "virtual_machine/base_device"; +import { VMTemplateDBMixin, VMObjectMixin } from "virtual_machine/base_device"; import { displayNumber, parseNumber } from "utils"; import type { LogicType } from "ic10emu_wasm"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; @customElement("vm-device-fields") -export class VMDeviceSlot extends VMObjectMixin(VMDeviceDBMixin(BaseElement)) { +export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(BaseElement)) { constructor() { super(); this.subscribe("fields"); } render() { - const fields = Array.from(this.fields.entries()); + const fields = Array.from(this.logicFields.entries()); const inputIdBase = `vmDeviceCard${this.objectID}Field`; return html` ${fields.map(([name, field], _index, _fields) => { @@ -34,7 +34,7 @@ export class VMDeviceSlot extends VMObjectMixin(VMDeviceDBMixin(BaseElement)) { const val = parseNumber(input.value); window.VM.get().then((vm) => { if (!vm.setObjectField(this.objectID, field, val, true)) { - input.value = this.fields.get(field).value.toString(); + input.value = this.logicFields.get(field).value.toString(); } this.updateDevice(); }); diff --git a/www/src/ts/virtual_machine/device/index.ts b/www/src/ts/virtual_machine/device/index.ts index ef53140..4b1d15a 100644 --- a/www/src/ts/virtual_machine/device/index.ts +++ b/www/src/ts/virtual_machine/device/index.ts @@ -5,11 +5,11 @@ import "./add_device" import "./slot_add_dialog" import "./slot" -import { VmDeviceTemplate } from "./template"; +import { VmObjectTemplate } from "./template"; import { VMDeviceCard } from "./card"; import { VMDeviceList } from "./device_list"; import { VMAddDeviceButton } from "./add_device"; import { VMSlotAddDialog } from "./slot_add_dialog"; -export { VMDeviceCard, VmDeviceTemplate, VMDeviceList, VMAddDeviceButton, VMSlotAddDialog }; +export { VMDeviceCard, VmObjectTemplate as VmDeviceTemplate, VMDeviceList, VMAddDeviceButton, VMSlotAddDialog }; diff --git a/www/src/ts/virtual_machine/device/pins.ts b/www/src/ts/virtual_machine/device/pins.ts index 12b4e04..f4e5f42 100644 --- a/www/src/ts/virtual_machine/device/pins.ts +++ b/www/src/ts/virtual_machine/device/pins.ts @@ -1,34 +1,42 @@ - import { html, css } from "lit"; import { customElement, property } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMDeviceDBMixin, VMObjectMixin } from "virtual_machine/base_device"; +import { VMTemplateDBMixin, VMObjectMixin } from "virtual_machine/base_device"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; +import { ObjectID } from "ic10emu_wasm"; @customElement("vm-device-pins") -export class VMDevicePins extends VMObjectMixin(VMDeviceDBMixin(BaseElement)) { +export class VMDevicePins extends VMObjectMixin(VMTemplateDBMixin(BaseElement)) { constructor() { super(); this.subscribe("ic", "visible-devices"); } render() { - const pins = this.pins; - const visibleDevices = window.VM.vm.visibleDevices(this.objectID); + const pins = new Array(this.numPins ?? 0) + .fill(true) + .map((_, index) => this.pins.get(index)); + const visibleDevices = (this.visibleDevices ?? []).map((id) => window.VM.vm.objects.get(id)); const pinsHtml = pins?.map( (pin, index) => - html` - - d${index} - ${visibleDevices.map( - (device, _index) => - html` - - Device ${device.id} : ${device.name ?? device.prefabName} - - `, + html` + d${index} + ${visibleDevices.map( + (device, _index) => html` + + Device ${device.obj_info.id} : + ${device.obj_info.name ?? device.obj_info.prefab} + + `, )} - `, + `, ); return pinsHtml; } @@ -40,5 +48,4 @@ export class VMDevicePins extends VMObjectMixin(VMDeviceDBMixin(BaseElement)) { window.VM.get().then((vm) => vm.setDevicePin(this.objectID, pin, val)); this.updateDevice(); } - } diff --git a/www/src/ts/virtual_machine/device/slot.ts b/www/src/ts/virtual_machine/device/slot.ts index 473223f..eae273c 100644 --- a/www/src/ts/virtual_machine/device/slot.ts +++ b/www/src/ts/virtual_machine/device/slot.ts @@ -1,15 +1,19 @@ import { html, css } from "lit"; import { customElement, property} from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMDeviceDBMixin, VMObjectMixin } from "virtual_machine/base_device"; +import { VMTemplateDBMixin, VMObjectMixin } from "virtual_machine/base_device"; import { clamp, + crc32, displayNumber, parseNumber, } from "utils"; import { + LogicField, LogicSlotType, - SlotType, + SlotInfo, + Class as SlotType, + TemplateDatabase, } from "ic10emu_wasm"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; import { VMDeviceCard } from "./card"; @@ -21,7 +25,7 @@ export interface SlotModifyEvent { } @customElement("vm-device-slot") -export class VMDeviceSlot extends VMObjectMixin(VMDeviceDBMixin(BaseElement)) { +export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(BaseElement)) { private _slotIndex: number; get slotIndex() { @@ -72,8 +76,7 @@ export class VMDeviceSlot extends VMObjectMixin(VMDeviceDBMixin(BaseElement)) { slotOccupantImg(): string { const slot = this.slots[this.slotIndex]; if (typeof slot.occupant !== "undefined") { - const hashLookup = (this.templateDB ?? {}).names_by_hash ?? {}; - const prefabName = hashLookup[slot.occupant.prefab_hash] ?? "UnknownHash"; + const prefabName = slot.occupant.obj_info.prefab; return `img/stationpedia/${prefabName}.png`; } else { return `img/stationpedia/SlotIcon_${slot.typ}.png`; @@ -83,18 +86,16 @@ export class VMDeviceSlot extends VMObjectMixin(VMDeviceDBMixin(BaseElement)) { slotOccupantPrefabName(): string { const slot = this.slots[this.slotIndex]; if (typeof slot.occupant !== "undefined") { - const hashLookup = (this.templateDB ?? {}).names_by_hash ?? {}; - const prefabName = hashLookup[slot.occupant.prefab_hash] ?? "UnknownHash"; + const prefabName = slot.occupant.obj_info.prefab; return prefabName; } else { return undefined; } } - slotOcccupantTemplate(): { name: string; typ: SlotType } | undefined { - if (this.templateDB) { - const entry = this.templateDB.db[this.prefabName]; - return entry?.slots[this.slotIndex]; + slotOcccupantTemplate(): SlotInfo | undefined { + if ("slots" in this.obj.template) { + return this.obj.template.slots[this.slotIndex]; } else { return undefined; } @@ -139,10 +140,11 @@ export class VMDeviceSlot extends VMObjectMixin(VMDeviceDBMixin(BaseElement)) { class="absolute bottom-0 right-0 mr-1 mb-1 text-xs text-neutral-200/90 font-mono bg-neutral-500/40 rounded pl-1 pr-1" > - ${slot.occupant.quantity}/${slot.occupant - .max_quantity} + + ${slot.quantity}/${"item" in slot.occupant.template + ? slot.occupant.template.item.max_quantity + : 1} +
`, )}
@@ -170,13 +172,20 @@ export class VMDeviceSlot extends VMObjectMixin(VMDeviceDBMixin(BaseElement)) { ? html`
- Max Quantity: ${slot.occupant.max_quantity} + + Max Quantity: + ${"item" in slot.occupant.template + ? slot.occupant.template.item.max_quantity + : 1} +
` : ""} @@ -218,7 +227,13 @@ export class VMDeviceSlot extends VMObjectMixin(VMDeviceDBMixin(BaseElement)) { _handleSlotQuantityChange(e: Event) { const input = e.currentTarget as SlInput; const slot = this.slots[this.slotIndex]; - const val = clamp(input.valueAsNumber, 1, slot.occupant.max_quantity); + const val = clamp( + input.valueAsNumber, + 1, + "item" in slot.occupant.template + ? slot.occupant.template.item.max_quantity + : 1, + ); if ( !window.VM.vm.setObjectSlotField( this.objectID, @@ -228,15 +243,15 @@ export class VMDeviceSlot extends VMObjectMixin(VMDeviceDBMixin(BaseElement)) { true, ) ) { - input.value = this.obj - .getSlotField(this.slotIndex, "Quantity") - .toString(); + input.value = this.slots[this.slotIndex].quantity.toString(); } } renderFields() { const inputIdBase = `vmDeviceSlot${this.objectID}Slot${this.slotIndex}Field`; - const _fields = this.obj.getSlotFields(this.slotIndex); + const _fields = + this.slots[this.slotIndex].logicFields ?? + new Map(); const fields = Array.from(_fields.entries()); return html` @@ -269,14 +284,23 @@ export class VMDeviceSlot extends VMObjectMixin(VMDeviceDBMixin(BaseElement)) { let val = parseNumber(input.value); if (field === "Quantity") { const slot = this.slots[this.slotIndex]; - val = clamp(input.valueAsNumber, 1, slot.occupant.max_quantity); + val = clamp( + input.valueAsNumber, + 1, + "item" in slot.occupant.template + ? slot.occupant.template.item.max_quantity + : 1, + ); } window.VM.get().then((vm) => { if ( !vm.setObjectSlotField(this.objectID, this.slotIndex, field, val, true) ) { - input.value = this.obj - .getSlotField(this.slotIndex, field) + input.value = ( + this.slots[this.slotIndex].logicFields ?? + new Map() + ) + .get(field) .toString(); } this.updateDevice(); diff --git a/www/src/ts/virtual_machine/device/slot_add_dialog.ts b/www/src/ts/virtual_machine/device/slot_add_dialog.ts index 1fa3dca..0946397 100644 --- a/www/src/ts/virtual_machine/device/slot_add_dialog.ts +++ b/www/src/ts/virtual_machine/device/slot_add_dialog.ts @@ -1,7 +1,7 @@ import { html, css } from "lit"; import { customElement, property, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMDeviceDBMixin } from "virtual_machine/base_device"; +import { VMTemplateDBMixin } from "virtual_machine/base_device"; import type { DeviceDB, DeviceDBEntry } from "virtual_machine/device_db"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; import SlDialog from "@shoelace-style/shoelace/dist/components/dialog/dialog.component.js"; @@ -11,7 +11,7 @@ import uFuzzy from "@leeoniya/ufuzzy"; import { LogicField, LogicSlotType, SlotOccupantTemplate } from "ic10emu_wasm"; @customElement("vm-slot-add-dialog") -export class VMSlotAddDialog extends VMDeviceDBMixin(BaseElement) { +export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { static styles = [ ...defaultCss, css` diff --git a/www/src/ts/virtual_machine/device/template.ts b/www/src/ts/virtual_machine/device/template.ts index bd759ae..b71eee4 100644 --- a/www/src/ts/virtual_machine/device/template.ts +++ b/www/src/ts/virtual_machine/device/template.ts @@ -1,26 +1,23 @@ import type { Connection, - DeviceTemplate, + ObjectTemplate, LogicField, LogicType, Slot, - SlotTemplate, - ConnectionCableNetwork, } from "ic10emu_wasm"; import { html, css, HTMLTemplateResult } from "lit"; import { customElement, property, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import type { DeviceDB, DeviceDBEntry } from "virtual_machine/device_db"; import { connectionFromDeviceDBConnection } from "./dbutils"; -import { displayNumber, parseNumber } from "utils"; +import { crc32, displayNumber, parseNumber } from "utils"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; import { VMDeviceCard } from "./card"; -import { VMDeviceDBMixin } from "virtual_machine/base_device"; +import { VMTemplateDBMixin } from "virtual_machine/base_device"; @customElement("vm-device-template") -export class VmDeviceTemplate extends VMDeviceDBMixin(BaseElement) { +export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { static styles = [ ...defaultCss, @@ -56,14 +53,14 @@ export class VmDeviceTemplate extends VMDeviceDBMixin(BaseElement) { @state() fields: { [key in LogicType]?: LogicField }; @state() slots: SlotTemplate[]; - @state() template: DeviceTemplate; + @state() template: ObjectTemplate; @state() device_id: number | undefined; @state() device_name: string | undefined; @state() connections: Connection[]; constructor() { super(); - this.templateDB = window.VM.vm.db; + this.templateDB = window.VM.vm.templateDB; } private _prefab_name: string; @@ -78,27 +75,27 @@ export class VmDeviceTemplate extends VMDeviceDBMixin(BaseElement) { this.setupState(); } - get dbDevice(): DeviceDBEntry { - return this.templateDB.db[this.prefab_name]; + get dbTemplate(): ObjectTemplate { + return this.templateDB.get( crc32(this.prefab_name)); } setupState() { this.fields = Object.fromEntries( - Object.entries(this.dbDevice?.logic ?? {}).map(([lt, ft]) => { - const value = lt === "PrefabHash" ? this.dbDevice.hash : 0.0; + Object.entries(this.dbTemplate?.logic ?? {}).map(([lt, ft]) => { + const value = lt === "PrefabHash" ? this.dbTemplate.prefab.prefab_hash : 0.0; return [lt, { field_type: ft, value } as LogicField]; }), ); - this.slots = (this.dbDevice?.slots ?? []).map( + this.slots = (this.dbTemplate?.slots ?? []).map( (slot, _index) => ({ typ: slot.typ, }) as SlotTemplate, ); - const connections = Object.entries(this.dbDevice?.conn ?? {}).map( + const connections = Object.entries(this.dbTemplate?.conn ?? {}).map( ([index, conn]) => [index, connectionFromDeviceDBConnection(conn)] as const, ); @@ -203,7 +200,7 @@ export class VmDeviceTemplate extends VMDeviceDBMixin(BaseElement) { } render() { - const device = this.dbDevice; + const device = this.dbTemplate; return html`
diff --git a/www/src/ts/virtual_machine/index.ts b/www/src/ts/virtual_machine/index.ts index 5143235..f2ed99b 100644 --- a/www/src/ts/virtual_machine/index.ts +++ b/www/src/ts/virtual_machine/index.ts @@ -116,8 +116,15 @@ class VirtualMachine extends (EventTarget as TypedEventTarget [id, ic.obj_info.source_code]); diff --git a/xtask/src/generate/database.rs b/xtask/src/generate/database.rs index 83bfb0c..c169811 100644 --- a/xtask/src/generate/database.rs +++ b/xtask/src/generate/database.rs @@ -15,14 +15,15 @@ use crate::{ }; use stationeers_data::templates::{ - ConnectionInfo, ConsumerInfo, DeviceInfo, FabricatorInfo, Instruction, InternalAtmoInfo, - ItemCircuitHolderTemplate, ItemConsumerTemplate, ItemInfo, ItemLogicMemoryTemplate, - ItemLogicTemplate, ItemSlotsTemplate, ItemSuitCircuitHolderTemplate, ItemSuitLogicTemplate, - ItemSuitTemplate, ItemTemplate, LogicInfo, MemoryInfo, ObjectTemplate, PrefabInfo, Recipe, - RecipeGasMix, RecipeRange, SlotInfo, StructureCircuitHolderTemplate, StructureInfo, - StructureLogicDeviceConsumerMemoryTemplate, StructureLogicDeviceConsumerTemplate, - StructureLogicDeviceMemoryTemplate, StructureLogicDeviceTemplate, StructureLogicTemplate, - StructureSlotsTemplate, StructureTemplate, SuitInfo, ThermalInfo, + ConnectionInfo, ConsumerInfo, DeviceInfo, FabricatorInfo, Instruction, InstructionPart, + InstructionPartType, InternalAtmoInfo, ItemCircuitHolderTemplate, ItemConsumerTemplate, + ItemInfo, ItemLogicMemoryTemplate, ItemLogicTemplate, ItemSlotsTemplate, + ItemSuitCircuitHolderTemplate, ItemSuitLogicTemplate, ItemSuitTemplate, ItemTemplate, + LogicInfo, MemoryInfo, ObjectTemplate, PrefabInfo, Recipe, RecipeGasMix, RecipeRange, SlotInfo, + StructureCircuitHolderTemplate, StructureInfo, StructureLogicDeviceConsumerMemoryTemplate, + StructureLogicDeviceConsumerTemplate, StructureLogicDeviceMemoryTemplate, + StructureLogicDeviceTemplate, StructureLogicTemplate, StructureSlotsTemplate, + StructureTemplate, SuitInfo, ThermalInfo, }; #[allow(clippy::too_many_lines)] @@ -202,9 +203,9 @@ pub fn generate_database( // remove preceding comma if it exists, leave trailing comma intact if it exists, capture // repeating groups of null fields // - // https://regex101.com/r/V2tXIa/1 + // https://regex101.com/r/WFpjHV/1 // - let null_matcher = regex::Regex::new(r#"(?:(?:,\n)\s*"\w+":\snull)+(,?)"#).unwrap(); + let null_matcher = regex::Regex::new(r#"(?:(?:,?\n)\s*"\w+":\snull)+(,?)"#).unwrap(); let json = null_matcher.replace_all(&json, "$1"); write!(&mut database_file, "{json}")?; database_file.flush()?; @@ -1017,10 +1018,66 @@ impl From<&stationpedia::Structure> for StructureInfo { impl From<&stationpedia::Instruction> for Instruction { fn from(value: &stationpedia::Instruction) -> Self { + let color_re = regex::Regex::new(r"|").unwrap(); + let description_stripped = color_re.replace_all(&value.description, "").to_string(); + // https://regex101.com/r/GVNgq3/1 + let valid_range_re = + regex::Regex::new(r"VALID ONLY AT ADDRESS(?:ES)? (?\d+) (?:TO (?\d+))?") + .unwrap(); + // https://regex101.com/r/jwbISO/1 + let part_re = + regex::Regex::new(r"[ \|]+(?\d+)-(?\d+)[ \|]+(?[A-Z_]+)[ \|]+(?:(?[A-Z]+_[0-9]+)|(?\d+))") + .unwrap(); + let valid = { + if let Some(caps) = valid_range_re.captures(&description_stripped) { + ( + caps.name("start").unwrap().as_str().parse().unwrap(), + caps.name("end").map(|cap| cap.as_str().parse().unwrap()), + ) + } else { + (0, None) + } + }; + let parts = { + part_re + .captures_iter(&description_stripped) + .map(|caps| { + let typ = caps + .name("type") + .map(|cap| match cap.as_str() { + "BOOL_8" => InstructionPartType::Bool8, + "BYTE_8" => InstructionPartType::Byte8, + "INT_32" => InstructionPartType::Int32, + "UINT_32" => InstructionPartType::UInt32, + "SHORT_16" => InstructionPartType::Short16, + "USHORT_16" => InstructionPartType::UShort16, + s => InstructionPartType::Unknown(s.to_string()), + }) + .unwrap_or_else(|| { + let len = caps + .name("unused_len") + .and_then(|cap| cap.as_str().parse().ok()) + .unwrap_or(0); + InstructionPartType::Unused(len) + }); + InstructionPart { + range: ( + caps.name("start").unwrap().as_str().parse().unwrap(), + caps.name("end").unwrap().as_str().parse().unwrap(), + ), + name: caps.name("name").unwrap().as_str().to_string(), + typ, + } + }) + .collect() + }; Instruction { description: value.description.clone(), + description_stripped, typ: value.type_.clone(), value: value.value, + valid, + parts, } } } From 10997d41856832f2f9448770750ea4632cb4eea8 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Thu, 30 May 2024 17:53:48 -0700 Subject: [PATCH 36/50] refactor(frontend): fix base template component --- ic10emu/src/errors.rs | 2 + ic10emu/src/interpreter.rs | 4 +- ic10emu/src/vm.rs | 62 +++-- ic10emu_wasm/src/lib.rs | 77 +++++- www/src/ts/virtual_machine/controls.ts | 27 +- www/src/ts/virtual_machine/device/card.ts | 2 +- www/src/ts/virtual_machine/device/dbutils.ts | 66 ++++- www/src/ts/virtual_machine/device/template.ts | 231 ++++++++++++++---- www/src/ts/virtual_machine/index.ts | 128 ++++++++-- www/src/ts/virtual_machine/registers.ts | 21 +- 10 files changed, 495 insertions(+), 125 deletions(-) diff --git a/ic10emu/src/errors.rs b/ic10emu/src/errors.rs index 21d061f..d297848 100644 --- a/ic10emu/src/errors.rs +++ b/ic10emu/src/errors.rs @@ -62,6 +62,8 @@ pub enum VMError { 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)] diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index 4db630a..3559871 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -245,7 +245,7 @@ mod tests { }; println!("Adding IC"); - let ic = vm.add_object_from_frozen(frozen_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(), @@ -254,7 +254,7 @@ mod tests { template: None, }; println!("Adding circuit holder"); - let ch = vm.add_object_from_frozen(frozen_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)) diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index d8ca053..2a55f2d 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -2,7 +2,7 @@ pub mod instructions; pub mod object; use crate::{ - errors::{ICError, TemplateError, VMError}, + errors::{ICError, VMError}, interpreter::ICState, network::{CableConnectionType, CableNetwork, Connection, FrozenCableNetwork}, vm::object::{ @@ -183,7 +183,7 @@ impl VM { let mut net_ref = net.borrow_mut(); let net_interface = net_ref .as_mut_network() - .unwrap_or_else(|| panic!("non network network: {net_id}")); + .ok_or(VMError::NonNetworkNetwork(net_id))?; for id in trans_net.devices { net_interface.add_data(id); } @@ -200,7 +200,7 @@ impl VM { /// current database. /// Errors if the object can not be built do to a template error /// Returns the built object's ID - pub fn add_object_from_frozen( + pub fn add_object_frozen( self: &Rc, frozen: FrozenObject, ) -> Result { @@ -236,7 +236,7 @@ impl VM { let mut net_ref = net.borrow_mut(); let net_interface = net_ref .as_mut_network() - .unwrap_or_else(|| panic!("non network network: {net_id}")); + .ok_or(VMError::NonNetworkNetwork(net_id))?; for id in trans_net.devices { net_interface.add_data(id); } @@ -952,14 +952,14 @@ impl VM { network .borrow_mut() .as_mut_network() - .expect("non-network network") + .ok_or(VMError::NonNetworkNetwork(*net))? .remove_power(id); } _ => { network .borrow_mut() .as_mut_network() - .expect("non-network network") + .ok_or(VMError::NonNetworkNetwork(*net))? .remove_data(id); } } @@ -982,14 +982,14 @@ impl VM { network .borrow_mut() .as_mut_network() - .expect("non-network network") + .ok_or(VMError::NonNetworkNetwork(target_net))? .add_power(id); } _ => { network .borrow_mut() .as_mut_network() - .expect("non-network network") + .ok_or(VMError::NonNetworkNetwork(target_net))? .add_data(id); } } @@ -1025,7 +1025,7 @@ impl VM { network .borrow_mut() .as_mut_network() - .expect("non-network network") + .ok_or(VMError::NonNetworkNetwork(network_id))? .remove_all(id); Ok(true) } else { @@ -1314,7 +1314,38 @@ impl VM { .collect() } - pub fn save_vm_state(self: &Rc) -> Result { + 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()) + } + + 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>>() + } + + pub fn save_vm_state(self: &Rc) -> Result { Ok(FrozenVM { objects: self .objects @@ -1337,13 +1368,14 @@ impl VM { .borrow() .values() .map(|network| { - network + let net_id = network.get_id(); + Ok(network .borrow() .as_network() - .expect("non-network network") - .into() + .ok_or(VMError::NonNetworkNetwork(net_id))? + .into()) }) - .collect(), + .collect::, VMError>>()?, default_network_key: *self.default_network_key.borrow(), circuit_holders: self.circuit_holders.borrow().clone(), program_holders: self.program_holders.borrow().clone(), @@ -1412,7 +1444,7 @@ impl VM { let mut net_ref = net.borrow_mut(); let net_interface = net_ref .as_mut_network() - .unwrap_or_else(|| panic!("non network network: {net_id}")); + .ok_or(VMError::NonNetworkNetwork(net_id))?; for id in trans_net.devices { net_interface.add_data(id); } diff --git a/ic10emu_wasm/src/lib.rs b/ic10emu_wasm/src/lib.rs index ebd7c35..bfb2b28 100644 --- a/ic10emu_wasm/src/lib.rs +++ b/ic10emu_wasm/src/lib.rs @@ -4,8 +4,12 @@ mod utils; use ic10emu::{ errors::{ICError, VMError}, + network::FrozenCableNetwork, vm::{ - object::{templates::{FrozenObject, FrozenObjectFull}, ObjectID}, + object::{ + templates::{FrozenObject, FrozenObjectFull}, + ObjectID, + }, FrozenVM, VM, }, }; @@ -60,10 +64,50 @@ impl IntoIterator for TemplateDatabase { #[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() + } +} + #[wasm_bindgen] impl VMRef { #[wasm_bindgen(constructor)] @@ -81,13 +125,26 @@ impl VMRef { TemplateDatabase(self.vm.get_template_database()) } - #[wasm_bindgen(js_name = "addObjectFromFrozen")] - pub fn add_object_from_frozen(&self, frozen: FrozenObject) -> Result { + #[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(&frozen).unwrap(), ); - Ok(self.vm.add_object_from_frozen(frozen)?) + Ok(self.vm.add_object_frozen(frozen)?) + } + + #[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")] @@ -105,6 +162,16 @@ impl VMRef { 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: ObjectID, code: &str) -> Result { @@ -225,7 +292,7 @@ impl VMRef { // TODO: we just assume if the ID is found that the frozen object passed is the same object.. obj.get_id() } else { - self.vm.add_object_from_frozen(frozen)? + self.vm.add_object_frozen(frozen)? }; Ok(self .vm diff --git a/www/src/ts/virtual_machine/controls.ts b/www/src/ts/virtual_machine/controls.ts index 549ded0..2e3d63c 100644 --- a/www/src/ts/virtual_machine/controls.ts +++ b/www/src/ts/virtual_machine/controls.ts @@ -123,14 +123,14 @@ export class VMICControls extends VMActiveICMixin(BaseElement) { ${ics.map( ([id, device], _index) => html` - ${device.name - ? html`${device.prefabName}` + ${device.obj_info.name + ? html`${device.obj_info.prefab}` : ""} - Device:${id} ${device.name ?? device.prefabName} + Device:${id} ${device.obj_info.name ?? device.obj_info.prefab} `, )} @@ -156,13 +156,16 @@ export class VMICControls extends VMActiveICMixin(BaseElement) { Errors ${this.errors.map( (err) => - html`
- - Line: ${err.ParseError.line} - - ${err.ParseError.start}:${err.ParseError.end} - - ${err.ParseError.msg} -
`, + typeof err === "object" + && "ParseError" in err + ? html`
+ + Line: ${err.ParseError.line} - + ${"ParseError" in err ? err.ParseError.start : "N/A"}:${err.ParseError.end} + + ${err.ParseError.msg} +
` + : html`${JSON.stringify(err)}`, )}
diff --git a/www/src/ts/virtual_machine/device/card.ts b/www/src/ts/virtual_machine/device/card.ts index 77c21c5..14060db 100644 --- a/www/src/ts/virtual_machine/device/card.ts +++ b/www/src/ts/virtual_machine/device/card.ts @@ -432,7 +432,7 @@ export class VMDeviceCard extends VMTemplateDBMixin( const val = parseIntWithHexOrBinary(input.value); if (!isNaN(val)) { window.VM.get().then((vm) => { - if (!vm.changeDeviceID(this.objectID, val)) { + if (!vm.changeObjectID(this.objectID, val)) { input.value = this.objectID.toString(); } }); diff --git a/www/src/ts/virtual_machine/device/dbutils.ts b/www/src/ts/virtual_machine/device/dbutils.ts index 73b4e87..5c132b0 100644 --- a/www/src/ts/virtual_machine/device/dbutils.ts +++ b/www/src/ts/virtual_machine/device/dbutils.ts @@ -1,16 +1,58 @@ -import { Connection } from "ic10emu_wasm"; -import { DeviceDBConnection } from "../device_db"; - -const CableNetworkTypes: readonly string[] = Object.freeze(["Power", "Data", "PowerAndData"]); -export function connectionFromDeviceDBConnection(conn: DeviceDBConnection): Connection { - if (CableNetworkTypes.includes(conn.typ)) { - return { +import { + Connection, + ConnectionInfo, + CableConnectionType, +} from "ic10emu_wasm"; +export function connectionFromConnectionInfo(conn: ConnectionInfo): Connection { + let connection: Connection = "None"; + if ( + conn.typ === "Power" || + conn.typ === "Data" || + conn.typ === "PowerAndData" + ) { + connection = { CableNetwork: { - net: window.VM.vm.ic10vm.defaultNetwork, - typ: conn.typ - } + net: window.VM.vm.defaultNetwork, + typ: conn.typ as CableConnectionType, + role: conn.role, + }, + }; + } else if (conn.typ === "Pipe") { + connection = { + Pipe: { + role: conn.role, + }, + }; + } else if (conn.typ === "PipeLiquid") { + connection = { + PipeLiquid: { + role: conn.role, + }, + }; + } else if (conn.typ === "Chute") { + connection = { + Chute: { + role: conn.role, + }, + }; + } else if (conn.typ === "Elevator") { + connection = { + Elevator: { + role: conn.role, + }, + }; + } else if (conn.typ === "LaunchPad") { + connection = { + LaunchPad: { + role: conn.role, + }, + }; + } else if (conn.typ === "LandingPad") { + connection = { + LandingPad: { + role: conn.role, + }, }; - } else { - return "Other"; } + return connection; } diff --git a/www/src/ts/virtual_machine/device/template.ts b/www/src/ts/virtual_machine/device/template.ts index b71eee4..5e29a77 100644 --- a/www/src/ts/virtual_machine/device/template.ts +++ b/www/src/ts/virtual_machine/device/template.ts @@ -4,18 +4,42 @@ import type { LogicField, LogicType, Slot, + Class, + FrozenObject, + MemoryAccess, + SlotInfo, + ConnectionInfo, + ObjectID, + CableConnectionType, + ConnectionRole, + ObjectInfo, + SlotOccupantInfo, } from "ic10emu_wasm"; import { html, css, HTMLTemplateResult } from "lit"; import { customElement, property, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { connectionFromDeviceDBConnection } from "./dbutils"; +import { connectionFromConnectionInfo } from "./dbutils"; import { crc32, displayNumber, parseNumber } from "utils"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; import { VMDeviceCard } from "./card"; import { VMTemplateDBMixin } from "virtual_machine/base_device"; +export interface SlotTemplate { + typ: Class + quantity: number, + occupant?: FrozenObject, +} + +export interface ConnectionCableNetwork { + CableNetwork: { + net: ObjectID | undefined; + typ: CableConnectionType; + role: ConnectionRole; + }; +} + @customElement("vm-device-template") export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { @@ -51,11 +75,12 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { `, ]; - @state() fields: { [key in LogicType]?: LogicField }; + @state() fields: Map; @state() slots: SlotTemplate[]; - @state() template: ObjectTemplate; - @state() device_id: number | undefined; - @state() device_name: string | undefined; + @state() pins: (ObjectID | undefined)[]; + @state() template: FrozenObject; + @state() objectId: number | undefined; + @state() objectName: string | undefined; @state() connections: Connection[]; constructor() { @@ -63,41 +88,61 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { this.templateDB = window.VM.vm.templateDB; } - private _prefab_name: string; + private _prefabName: string; + private _prefabHash: number; - get prefab_name(): string { - return this._prefab_name; + + get prefabName(): string { + return this._prefabName; + } + get prefabHash(): number { + return this._prefabHash; } @property({ type: String }) - set prefab_name(val: string) { - this._prefab_name = val; + set prefabName(val: string) { + this._prefabName = val; + this._prefabHash = crc32(this._prefabName); this.setupState(); } get dbTemplate(): ObjectTemplate { - return this.templateDB.get( crc32(this.prefab_name)); + return this.templateDB.get(this._prefabHash); } setupState() { + const dbTemplate = this.dbTemplate; - this.fields = Object.fromEntries( - Object.entries(this.dbTemplate?.logic ?? {}).map(([lt, ft]) => { - const value = lt === "PrefabHash" ? this.dbTemplate.prefab.prefab_hash : 0.0; - return [lt, { field_type: ft, value } as LogicField]; + this.fields = new Map( + ( + Array.from( + "logic" in dbTemplate + ? dbTemplate.logic.logic_types.entries() ?? [] + : [], + ) as [LogicType, MemoryAccess][] + ).map(([lt, access]) => { + const value = + lt === "PrefabHash" ? this.dbTemplate.prefab.prefab_hash : 0.0; + return [lt, value]; }), ); - this.slots = (this.dbTemplate?.slots ?? []).map( + this.slots = ( + ("slots" in dbTemplate ? dbTemplate.slots ?? [] : []) as SlotInfo[] + ).map( (slot, _index) => ({ typ: slot.typ, + quantity: 0, }) as SlotTemplate, ); - const connections = Object.entries(this.dbTemplate?.conn ?? {}).map( - ([index, conn]) => - [index, connectionFromDeviceDBConnection(conn)] as const, + const connections = ( + "device" in dbTemplate + ? dbTemplate.device.connection_list + : ([] as ConnectionInfo[]) + ).map( + (conn, index) => [index, connectionFromConnectionInfo(conn)] as const, ); connections.sort((a, b) => { if (a[0] < b[0]) { @@ -110,12 +155,15 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { }); this.connections = connections.map((conn) => conn[1]); + + const numPins = "device" in dbTemplate ? dbTemplate.device.device_pins_length : 0; + this.pins = new Array(numPins).fill(undefined); } renderFields(): HTMLTemplateResult { const fields = Object.entries(this.fields); return html` ${fields.map(([name, field], _index, _fields) => { - return html` + return html` ${field.field_type} `; - })} + })} `; } @@ -135,9 +183,9 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { const input = e.target as SlInput; const field = input.getAttribute("key")! as LogicType; const val = parseNumber(input.value); - this.fields[field].value = val; + this.fields.set(field, val); if (field === "ReferenceId" && val !== 0) { - this.device_id = val; + this.objectId = val; } this.requestUpdate(); } @@ -161,9 +209,11 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { return html`
${connections.map((connection, index, _conns) => { - const conn = - typeof connection === "object" ? connection.CableNetwork : null; - return html` + const conn = + typeof connection === "object" && "CableNetwork" in connection + ? connection.CableNetwork + : null; + return html` Connection:${index} ${vmNetworks.map( - (net) => - html`Network ${net}`, - )} + (net) => + html`Network ${net}`, + )} ${conn?.typ} `; - })} + })}
`; } @@ -195,8 +245,48 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { } renderPins(): HTMLTemplateResult { - const device = this.templateDB.db[this.prefab_name]; - return html`
`; + const networks = this.connections.flatMap((connection, index) => { + return typeof connection === "object" && "CableNetwork" in connection + ? [connection.CableNetwork.net] + : []; + }); + const visibleDeviceIds = [ + ...new Set( + networks.flatMap((net) => window.VM.vm.networkDataDevices(net)), + ), + ]; + const visibleDevices = visibleDeviceIds.map((id) => + window.VM.vm.objects.get(id), + ); + const pinsHtml = this.pins?.map( + (pin, index) => + html` + d${index} + ${visibleDevices.map( + (device, _index) => html` + + Device ${device.obj_info.id} : + ${device.obj_info.name ?? device.obj_info.prefab} + + `, + )} + `, + ); + return html`
${pinsHtml}
`; + } + + _handleChangePin(e: CustomEvent) { + const select = e.target as SlSelect; + const pin = parseInt(select.getAttribute("key")!); + const val = select.value ? parseInt(select.value as string) : undefined; + this.pins[pin] = val } render() { @@ -204,17 +294,17 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { return html`
- +
- ${device.title} - ${device?.name} - ${device?.hash} + ${device.prefab.name} + ${device?.prefab.prefab_name} + ${device?.prefab.prefab_hash}
`; } - _handleAddButtonClick() { + async _handleAddButtonClick() { this.dispatchEvent( new CustomEvent("add-device-template", { bubbles: true }), ); - const template: DeviceTemplate = { - id: this.device_id, - name: this.device_name, - prefab_name: this.prefab_name, - slots: this.slots, - connections: this.connections, - fields: this.fields, + // Typescript doesn't like fileds defined as `X | undefined` not being present, hence cast + const objInfo: ObjectInfo = { + id: this.objectId, + name: this.objectName, + prefab: this.prefabName + } as ObjectInfo; + + if (this.slots.length > 0) { + const slotOccupants: [FrozenObject, number][] = this.slots.flatMap((slot, index) => { + return typeof slot.occupant !== "undefined" ? [[slot.occupant, index]] : []; + }) + let slotOccupantTemplates: FrozenObject[] | null = null; + let slotOccupantObjectIds: ObjectID[] | null = null; + + let slotOccupantIdsMap: Map = new Map(); + if (slotOccupants.length > 0) { + slotOccupantTemplates = slotOccupants.map(([slot, _]) => slot); + slotOccupantObjectIds = await window.VM.vm.addObjectsFrozen(slotOccupantTemplates); + slotOccupantIdsMap = new Map(slotOccupants.map((_, index) => { + return [index, slotOccupantObjectIds[index]]; + })) + } + objInfo.slots = new Map(this.slots.flatMap((slot, index) => { + const occupantId = slotOccupantIdsMap.get(index); + if (typeof occupantId !== "undefined") { + const info: SlotOccupantInfo = { + id: occupantId, + quantity: slot.quantity + }; + return [[index, info]] as [number, SlotOccupantInfo][]; + } else { + return [] as [number, SlotOccupantInfo][]; + } + })) + } + + if (this.connections.length > 0) { + objInfo.connections = new Map( + this.connections.flatMap((conn, index) => { + return typeof conn === "object" && + "CableNetwork" in conn && + typeof conn.CableNetwork.net !== "undefined" + ? ([[index, conn.CableNetwork.net]] as [number, number][]) + : ([] as [number, number][]); + }), + ); + } + + if (this.fields.size > 0) { + objInfo.logic_values = new Map(this.fields) + } + + const template: FrozenObject = { + obj_info: objInfo, + database_template: true, + template: undefined, }; - window.VM.vm.addDeviceFromTemplate(template); + await window.VM.vm.addObjectFrozen(template); // reset state for new device this.setupState(); diff --git a/www/src/ts/virtual_machine/index.ts b/www/src/ts/virtual_machine/index.ts index f2ed99b..185e9c7 100644 --- a/www/src/ts/virtual_machine/index.ts +++ b/www/src/ts/virtual_machine/index.ts @@ -8,6 +8,7 @@ import type { TemplateDatabase, FrozenCableNetwork, FrozenObjectFull, + ObjectID, } from "ic10emu_wasm"; import * as Comlink from "comlink"; import "./base_device"; @@ -29,6 +30,8 @@ export interface VirtualMachinEventMap { "vm-objects-modified": CustomEvent; "vm-run-ic": CustomEvent; "vm-object-id-change": CustomEvent<{ old: number; new: number }>; + "vm-networks-update": CustomEvent; + "vm-networks-removed": CustomEvent; } class VirtualMachine extends (EventTarget as TypedEventTarget) { @@ -62,6 +65,7 @@ class VirtualMachine extends (EventTarget as TypedEventTarget this.setupTemplateDatabase(db)); this.updateObjects(); + this.updateNetworks(); this.updateCode(); } @@ -113,11 +117,65 @@ class VirtualMachine extends (EventTarget as TypedEventTarget 0) { + this.dispatchEvent( + new CustomEvent("vm-networks-removed", { + detail: removedNetworks, + }), + ); + } + this.app.session.save(); + } + } + async updateObjects() { let updateFlag = false; const removedObjects = []; - let objectIds; - let frozenObjects; + let objectIds: Uint32Array; + let frozenObjects: FrozenObjectFull[]; try { objectIds = await this.ic10vm.objects; frozenObjects = await this.ic10vm.freezeObjects(objectIds); @@ -125,7 +183,7 @@ class VirtualMachine extends (EventTarget as TypedEventTarget { if (this.objects.has(id)) { - this.updateDevice(id, false); + this.updateObject(id, false); } }, this); - this.updateDevice(this.activeIC.obj_info.id, false); + this.updateObject(this.activeIC.obj_info.id, false); if (save) this.app.session.save(); } - async updateDevice(id: number, save: boolean = true) { + async updateObject(id: number, save: boolean = true) { let frozen; try { frozen = await this.ic10vm.freezeObject(id); @@ -287,7 +346,7 @@ class VirtualMachine extends (EventTarget as TypedEventTarget { + // return the data connected oject ids for a network + networkDataDevices(network: ObjectID): number[] { + return this._networks.get(network)?.devices ?? [] + } + + async changeObjectID(oldID: number, newID: number): Promise { try { await this.ic10vm.changeDeviceId(oldID, newID); if (this.app.session.activeIC === oldID) { @@ -336,7 +400,7 @@ class VirtualMachine extends (EventTarget as TypedEventTarget { + async addObjectFrozen(frozen: FrozenObject): Promise { try { console.log("adding device", frozen); - const id = await this.ic10vm.addObjectFromFrozen(frozen); + const id = await this.ic10vm.addObjectFrozen(frozen); const refrozen = await this.ic10vm.freezeObject(id); this._objects.set(id, refrozen); const device_ids = await this.ic10vm.objects; @@ -475,10 +539,32 @@ class VirtualMachine extends (EventTarget as TypedEventTarget { + try { + console.log("adding devices", frozenObjects); + const ids = await this.ic10vm.addObjectsFrozen(frozenObjects); + const refrozen = await this.ic10vm.freezeObjects(ids); + ids.forEach((id, index) => { + this._objects.set(id, refrozen[index]); + }) + const device_ids = await this.ic10vm.objects; + this.dispatchEvent( + new CustomEvent("vm-objects-update", { + detail: Array.from(device_ids), + }), + ); + this.app.session.save(); + return Array.from(ids); + } catch (err) { + this.handleVmError(err); + return undefined; } } @@ -504,7 +590,7 @@ class VirtualMachine extends (EventTarget as TypedEventTarget - "RegisterSpec" in target && target.RegisterSpec.indirection === 0, - ) as [string, RegisterSpec][] - ).map(([alias, target]) => [alias, target.RegisterSpec.target]) as [ - string, - number, - ][] - ).concat(VMICRegisters.defaultAliases); + const registerAliases: [string, number][] = + [...(Array.from(this.aliases?.entries() ?? []))].flatMap( + ([alias, target]) => { + if ("RegisterSpec" in target && target.RegisterSpec.indirection === 0) { + return [[alias, target.RegisterSpec.target]] as [string, number][]; + } else { + return [] as [string, number][]; + } + } + ).concat(VMICRegisters.defaultAliases); return html`
From 337ca505600570be02069e895caa121454f8b80c Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Thu, 30 May 2024 20:47:17 -0700 Subject: [PATCH 37/50] refactor(frontend): fix slot occupant and device add components --- ic10emu_wasm/src/lib.rs | 35 +++- www/src/ts/session.ts | 4 +- .../ts/virtual_machine/device/add_device.ts | 90 ++++---- .../virtual_machine/device/slot_add_dialog.ts | 193 ++++++++++-------- 4 files changed, 189 insertions(+), 133 deletions(-) diff --git a/ic10emu_wasm/src/lib.rs b/ic10emu_wasm/src/lib.rs index bfb2b28..96b1643 100644 --- a/ic10emu_wasm/src/lib.rs +++ b/ic10emu_wasm/src/lib.rs @@ -3,7 +3,7 @@ mod utils; // mod types; use ic10emu::{ - errors::{ICError, VMError}, + errors::{ICError, TemplateError, VMError}, network::FrozenCableNetwork, vm::{ object::{ @@ -288,11 +288,42 @@ impl VMRef { 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 { - self.vm.add_object_frozen(frozen)? + // 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 diff --git a/www/src/ts/session.ts b/www/src/ts/session.ts index 3037e3a..b98a87f 100644 --- a/www/src/ts/session.ts +++ b/www/src/ts/session.ts @@ -1,4 +1,4 @@ -import type { ICError, FrozenVM, SlotType } from "ic10emu_wasm"; +import type { ICError, FrozenVM, Class } from "ic10emu_wasm"; import { App } from "./app"; import { openDB, DBSchema } from "idb"; @@ -230,7 +230,7 @@ export class Session extends EventTarget { async saveLocal(name: string) { const state: VMState = { - vm: (await window.VM.get()).ic10vm.saveVMState(), + vm: await (await window.VM.get()).ic10vm.saveVMState(), activeIC: this.activeIC, }; const db = await this.openIndexDB(); diff --git a/www/src/ts/virtual_machine/device/add_device.ts b/www/src/ts/virtual_machine/device/add_device.ts index 56499ef..cafa83a 100644 --- a/www/src/ts/virtual_machine/device/add_device.ts +++ b/www/src/ts/virtual_machine/device/add_device.ts @@ -1,4 +1,3 @@ - import { html, css } from "lit"; import { customElement, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; @@ -6,14 +5,18 @@ import { BaseElement, defaultCss } from "components"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.js"; import SlDrawer from "@shoelace-style/shoelace/dist/components/drawer/drawer.js"; -import type { DeviceDBEntry } from "virtual_machine/device_db"; import { repeat } from "lit/directives/repeat.js"; import { cache } from "lit/directives/cache.js"; import { default as uFuzzy } from "@leeoniya/ufuzzy"; import { when } from "lit/directives/when.js"; import { unsafeHTML } from "lit/directives/unsafe-html.js"; import { VMTemplateDBMixin } from "virtual_machine/base_device"; +import { LogicInfo, ObjectTemplate, StructureInfo } from "ic10emu_wasm"; +type LogicableStrucutureTemplate = Extract< + ObjectTemplate, + { structure: StructureInfo; logic: LogicInfo } +>; @customElement("vm-add-device-button") export class VMAddDeviceButton extends VMTemplateDBMixin(BaseElement) { @@ -35,27 +38,30 @@ export class VMAddDeviceButton extends VMTemplateDBMixin(BaseElement) { @query("sl-drawer") drawer: SlDrawer; @query(".device-search-input") searchInput: SlInput; - private _structures: Map = new Map(); + private _structures: Map = new Map(); private _datapoints: [string, string][] = []; private _haystack: string[] = []; postDBSetUpdate(): void { this._structures = new Map( - Object.values(this.templateDB.db) - .filter((entry) => this.templateDB.structures.includes(entry.name), this) - .filter( - (entry) => this.templateDB.logic_enabled.includes(entry.name), - this, - ) - .map((entry) => [entry.name, entry]), + Array.from(this.templateDB.values()).flatMap((template) => { + if ("structure" in template && "logic" in template) { + return [[template.prefab.prefab_name, template]] as [ + string, + LogicableStrucutureTemplate, + ][]; + } else { + return [] as [string, LogicableStrucutureTemplate][]; + } + }), ); const datapoints: [string, string][] = []; for (const entry of this._structures.values()) { datapoints.push( - [entry.title, entry.name], - [entry.name, entry.name], - [entry.desc, entry.name], + [entry.prefab.name, entry.prefab.prefab_name], + [entry.prefab.prefab_name, entry.prefab.prefab_name], + [entry.prefab.desc, entry.prefab.prefab_name], ); } const haystack: string[] = datapoints.map((data) => data[0]); @@ -78,7 +84,7 @@ export class VMAddDeviceButton extends VMTemplateDBMixin(BaseElement) { } private _searchResults: { - entry: DeviceDBEntry; + entry: LogicableStrucutureTemplate; haystackEntry: string; ranges: number[]; }[] = []; @@ -116,7 +122,7 @@ export class VMAddDeviceButton extends VMTemplateDBMixin(BaseElement) { // return everything this._searchResults = [...this._structures.values()].map((st) => ({ entry: st, - haystackEntry: st.title, + haystackEntry: st.prefab.prefab_name, ranges: [], })); } @@ -143,28 +149,28 @@ export class VMAddDeviceButton extends VMTemplateDBMixin(BaseElement) { const totalPages = Math.ceil((this._searchResults?.length ?? 0) / perPage); let pageKeys = Array.from({ length: totalPages }, (_, index) => index); const extra: { - entry: { title: string; name: string }; + entry: { prefab: { name: string; prefab_name: string } }; haystackEntry: string; ranges: number[]; }[] = []; if (this.page < totalPages - 1) { extra.push({ - entry: { title: "", name: this.filter }, + entry: { prefab: { name: "", prefab_name: this.filter } }, haystackEntry: "...", ranges: [], }); } return when( typeof this._searchResults !== "undefined" && - this._searchResults.length < 20, + this._searchResults.length < 20, () => repeat( this._searchResults ?? [], - (result) => result.entry.name, + (result) => result.entry.prefab.prefab_name, (result) => cache(html` @@ -183,46 +189,46 @@ export class VMAddDeviceButton extends VMTemplateDBMixin(BaseElement) {
Page: ${pageKeys.map( - (key, index) => html` + (key, index) => html` ${key + 1}${index < totalPages - 1 ? "," : ""} `, - )} + )}
${[ - ...this._searchResults.slice( - perPage * this.page, - perPage * this.page + perPage, - ), - ...extra, - ].map((result) => { - let hay = result.haystackEntry.slice(0, 15); - if (result.haystackEntry.length > 15) hay += "..."; - const ranges = result.ranges.filter((pos) => pos < 20); - const key = result.entry.name; - return html` + ...this._searchResults.slice( + perPage * this.page, + perPage * this.page + perPage, + ), + ...extra, + ].map((result) => { + let hay = result.haystackEntry.slice(0, 15); + if (result.haystackEntry.length > 15) hay += "..."; + const ranges = result.ranges.filter((pos) => pos < 20); + const key = result.entry.prefab.prefab_name; + return html`
- ${result.entry.title} ( + ${result.entry.prefab.name} ( ${ranges.length - ? unsafeHTML(uFuzzy.highlight(hay, ranges)) - : hay} )
`; - })} + })}
`, @@ -278,8 +284,8 @@ export class VMAddDeviceButton extends VMTemplateDBMixin(BaseElement) { slot="footer" variant="primary" @click=${() => { - this.drawer.hide(); - }} + this.drawer.hide(); + }} > Close diff --git a/www/src/ts/virtual_machine/device/slot_add_dialog.ts b/www/src/ts/virtual_machine/device/slot_add_dialog.ts index 0946397..9523868 100644 --- a/www/src/ts/virtual_machine/device/slot_add_dialog.ts +++ b/www/src/ts/virtual_machine/device/slot_add_dialog.ts @@ -2,13 +2,21 @@ import { html, css } from "lit"; import { customElement, property, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; import { VMTemplateDBMixin } from "virtual_machine/base_device"; -import type { DeviceDB, DeviceDBEntry } from "virtual_machine/device_db"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; import SlDialog from "@shoelace-style/shoelace/dist/components/dialog/dialog.component.js"; import { VMDeviceCard } from "./card"; import { when } from "lit/directives/when.js"; import uFuzzy from "@leeoniya/ufuzzy"; -import { LogicField, LogicSlotType, SlotOccupantTemplate } from "ic10emu_wasm"; +import { + FrozenObject, + ItemInfo, + LogicField, + LogicSlotType, + ObjectInfo, + ObjectTemplate, +} from "ic10emu_wasm"; + +type SlotableItemTemplate = Extract; @customElement("vm-slot-add-dialog") export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { @@ -30,8 +38,8 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { `, ]; - private _items: Map = new Map(); - private _filteredItems: DeviceDBEntry[]; + private _items: Map = new Map(); + private _filteredItems: SlotableItemTemplate[]; private _datapoints: [string, string][] = []; private _haystack: string[] = []; @@ -47,42 +55,52 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { } private _searchResults: { - entry: DeviceDBEntry; + entry: SlotableItemTemplate; haystackEntry: string; ranges: number[]; }[] = []; postDBSetUpdate(): void { this._items = new Map( - Object.values(this.templateDB.db) - .filter((entry) => this.templateDB.items.includes(entry.name), this) - .map((entry) => [entry.name, entry]), + Array.from(this.templateDB.values()).flatMap((template) => { + if ("item" in template) { + return [[template.prefab.prefab_name, template]] as [ + string, + SlotableItemTemplate, + ][]; + } else { + return [] as [string, SlotableItemTemplate][]; + } + }), ); this.setupSearch(); this.performSearch(); } - setupSearch() { - let filteredItemss = Array.from(this._items.values()); - if( typeof this.deviceID !== "undefined" && typeof this.slotIndex !== "undefined") { - const device = window.VM.vm.objects.get(this.deviceID); - const dbDevice = this.templateDB.db[device.prefabName] - const slot = dbDevice.slots[this.slotIndex] + let filteredItems = Array.from(this._items.values()); + if ( + typeof this.objectID !== "undefined" && + typeof this.slotIndex !== "undefined" + ) { + const obj = window.VM.vm.objects.get(this.objectID); + const template = obj.template; + const slot = "slots" in template ? template.slots[this.slotIndex] : null; const typ = slot.typ; if (typeof typ === "string" && typ !== "None") { - filteredItemss = Array.from(this._items.values()).filter(item => item.item.slotclass === typ); + filteredItems = Array.from(this._items.values()).filter( + (item) => item.item.slot_class === typ, + ); } - } - this._filteredItems= filteredItemss; + this._filteredItems = filteredItems; const datapoints: [string, string][] = []; for (const entry of this._filteredItems) { datapoints.push( - [entry.title, entry.name], - [entry.name, entry.name], - [entry.desc, entry.name], + [entry.prefab.name, entry.prefab.prefab_name], + [entry.prefab.prefab_name, entry.prefab.prefab_name], + [entry.prefab.desc, entry.prefab.prefab_name], ); } @@ -93,7 +111,6 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { performSearch() { if (this._filter) { - const uf = new uFuzzy({}); const [_idxs, info, order] = uf.search( this._haystack, @@ -102,18 +119,17 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { 1e3, ); - const filtered = order?.map((infoIdx) => ({ - name: this._datapoints[info.idx[infoIdx]][1], - haystackEntry: this._haystack[info.idx[infoIdx]], - ranges: info.ranges[infoIdx], - })) ?? []; + const filtered = + order?.map((infoIdx) => ({ + name: this._datapoints[info.idx[infoIdx]][1], + haystackEntry: this._haystack[info.idx[infoIdx]], + ranges: info.ranges[infoIdx], + })) ?? []; const uniqueNames = new Set(filtered.map((obj) => obj.name)); - const unique = [...uniqueNames].map( - (result) => { - return filtered.find((obj) => obj.name === result); - }, - ); + const unique = [...uniqueNames].map((result) => { + return filtered.find((obj) => obj.name === result); + }); this._searchResults = unique.map(({ name, haystackEntry, ranges }) => ({ entry: this._items.get(name)!, @@ -124,7 +140,7 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { // return everything this._searchResults = [...this._filteredItems].map((st) => ({ entry: st, - haystackEntry: st.title, + haystackEntry: st.prefab.prefab_name, ranges: [], })); } @@ -133,63 +149,61 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { renderSearchResults() { const enableNone = false; const none = html` -
- None -
+
+ None +
`; return html`
${enableNone ? none : ""} ${this._searchResults.map((result) => { - const imgSrc = `img/stationpedia/${result.entry.name}.png`; - const img = html` - - `; - return html` -
- ${img} -
${result.entry.title}
-
- `; - })} + const imgSrc = `img/stationpedia/${result.entry.prefab.prefab_name}.png`; + const img = html` + + `; + return html` +
+ ${img} +
${result.entry.prefab.name}
+
+ `; + })}
`; } _handleClickNone() { - window.VM.vm.removeSlotOccupant(this.deviceID, this.slotIndex); + window.VM.vm.removeSlotOccupant(this.objectID, this.slotIndex); this.hide(); } _handleClickItem(e: Event) { const div = e.currentTarget as HTMLDivElement; - const key = div.getAttribute("key"); - const entry = this.templateDB.db[key]; - const device = window.VM.vm.objects.get(this.deviceID); - const dbDevice = this.templateDB.db[device.prefabName] - const sorting = this.templateDB.enums["SortingClass"][entry.item.sorting ?? "Default"] ?? 0; - console.log("using entry", dbDevice); - const fields: { [key in LogicSlotType]?: LogicField } = Object.fromEntries( - Object.entries(dbDevice.slotlogic[this.slotIndex] ?? {}) - .map(([slt_s, field_type]) => { - let slt = slt_s as LogicSlotType; - let value = 0.0 - if (slt === "FilterType") { - value = this.templateDB.enums["GasType"][entry.item.filtertype] - } - const field: LogicField = { field_type, value}; - return [slt, field]; - }) - ); - fields["PrefabHash"] = { field_type: "Read", value: entry.hash }; - fields["MaxQuantity"] = { field_type: "Read", value: entry.item.maxquantity ?? 1.0 }; - fields["SortingClass"] = { field_type: "Read", value: sorting }; - fields["Quantity"] = { field_type: "Read", value: 1 }; + const key = parseInt(div.getAttribute("key")); + const entry = this.templateDB.get(key) as SlotableItemTemplate; + const obj = window.VM.vm.objects.get(this.objectID); + const dbTemplate = obj.template; + console.log("using entry", dbTemplate); - const template: SlotOccupantTemplate = { - fields - } - window.VM.vm.setSlotOccupant(this.deviceID, this.slotIndex, template); + const template: FrozenObject = { + obj_info: { + prefab: entry.prefab.prefab_name, + } as ObjectInfo, + database_template: true, + template: undefined, + }; + window.VM.vm.setSlotOccupant(this.objectID, this.slotIndex, template, 1); this.hide(); } @@ -197,30 +211,35 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { @query(".device-search-input") searchInput: SlInput; render() { - const device = window.VM.vm.objects.get(this.deviceID); - const name = device?.name ?? device?.prefabName ?? ""; - const id = this.deviceID ?? 0; + const device = window.VM.vm.objects.get(this.objectID); + const name = device?.obj_info.name ?? device?.obj_info.prefab ?? ""; + const id = this.objectID ?? 0; return html` - + Search Items ${when( - typeof this.deviceID !== "undefined" && - typeof this.slotIndex !== "undefined", - () => html` + typeof this.objectID !== "undefined" && + typeof this.slotIndex !== "undefined", + () => html`
${this.renderSearchResults()}
`, - () => html``, - )} + () => html``, + )}
`; } @@ -239,15 +258,15 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { } _handleDialogHide() { - this.deviceID = undefined; + this.objectID = undefined; this.slotIndex = undefined; } - @state() private deviceID: number; + @state() private objectID: number; @state() private slotIndex: number; - show(deviceID: number, slotIndex: number) { - this.deviceID = deviceID; + show(objectID: number, slotIndex: number) { + this.objectID = objectID; this.slotIndex = slotIndex; this.setupSearch(); this.performSearch(); From d618f7b091fbdbf26481207daeb9a1b57f64dfa8 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Fri, 31 May 2024 21:41:09 -0700 Subject: [PATCH 38/50] refactor(vm, frontend): internally tag template enum, finish remap frontend --- Cargo.lock | 176 --- Cargo.toml | 4 - ic10emu/src/errors.rs | 5 +- ic10emu/src/interpreter.rs | 2 +- ic10emu/src/vm/object/stationpedia.rs | 3 +- ic10emu/src/vm/object/templates.rs | 25 +- stationeers_data/src/database/prefab_map.rs | 1253 ++++++++++++++++++ stationeers_data/src/templates.rs | 2 +- www/data/database.json | 1257 ++++++++++++++++++- www/src/ts/app/save.ts | 8 +- www/src/ts/presets/demo.ts | 146 +-- www/src/ts/session.ts | 411 +++++- www/src/ts/utils.ts | 54 +- www/src/ts/virtual_machine/base_device.ts | 6 +- www/src/ts/virtual_machine/controls.ts | 2 +- www/src/ts/virtual_machine/index.ts | 79 +- www/src/ts/virtual_machine/vm_worker.ts | 6 + xtask/Cargo.toml | 1 - xtask/src/generate/database.rs | 2 +- xtask/src/generate/utils.rs | 68 +- 20 files changed, 3059 insertions(+), 451 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c351575..f34c853 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -160,28 +160,6 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "bindgen" -version = "0.64.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" -dependencies = [ - "bitflags 1.3.2", - "cexpr", - "clang-sys", - "lazy_static", - "lazycell", - "log", - "peeking_take_while", - "proc-macro2", - "quote", - "regex", - "rustc-hash", - "shlex", - "syn 1.0.109", - "which", -] - [[package]] name = "bitflags" version = "1.3.2" @@ -232,15 +210,6 @@ version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4" -[[package]] -name = "cexpr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" -dependencies = [ - "nom", -] - [[package]] name = "cfg-if" version = "1.0.0" @@ -260,17 +229,6 @@ dependencies = [ "windows-targets 0.52.5", ] -[[package]] -name = "clang-sys" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" -dependencies = [ - "glob", - "libc", - "libloading", -] - [[package]] name = "clap" version = "4.5.4" @@ -445,16 +403,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" -[[package]] -name = "errno" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "eyre" version = "0.6.12" @@ -588,12 +536,6 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - [[package]] name = "gloo-utils" version = "0.1.7" @@ -643,15 +585,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] - [[package]] name = "httparse" version = "1.8.0" @@ -837,34 +770,12 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "libc" version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" -[[package]] -name = "libloading" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" -dependencies = [ - "cfg-if", - "windows-targets 0.52.5", -] - -[[package]] -name = "linux-raw-sys" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" - [[package]] name = "lock_api" version = "0.4.12" @@ -916,12 +827,6 @@ version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" version = "0.7.2" @@ -942,16 +847,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - [[package]] name = "num" version = "0.4.3" @@ -1065,27 +960,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "onig" -version = "6.4.0" -source = "git+https://github.com/rust-onig/rust-onig#fa90c0e97e90a056af89f183b23cd417b59ee6a2" -dependencies = [ - "bitflags 1.3.2", - "libc", - "once_cell", - "onig_sys", -] - -[[package]] -name = "onig_sys" -version = "69.8.1" -source = "git+https://github.com/rust-onig/rust-onig#fa90c0e97e90a056af89f183b23cd417b59ee6a2" -dependencies = [ - "bindgen", - "cc", - "pkg-config", -] - [[package]] name = "owo-colors" version = "3.5.0" @@ -1121,12 +995,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "peeking_take_while" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" - [[package]] name = "percent-encoding" version = "2.3.1" @@ -1261,12 +1129,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "pkg-config" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" - [[package]] name = "powerfmt" version = "0.2.0" @@ -1387,25 +1249,6 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustix" -version = "0.38.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" -dependencies = [ - "bitflags 2.5.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - [[package]] name = "rustversion" version = "1.0.14" @@ -1557,12 +1400,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -2140,18 +1977,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix", -] - [[package]] name = "windows-core" version = "0.52.0" @@ -2310,7 +2135,6 @@ dependencies = [ "indexmap 2.2.6", "num", "num-integer", - "onig", "phf_codegen", "prettyplease", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index ba3a694..24b1af4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,3 @@ opt-level = "s" lto = true [profile.dev] opt-level = 1 - - -[patch.crates-io] -onig_sys = { git = "https://github.com/rust-onig/rust-onig", revision = "fa90c0e97e90a056af89f183b23cd417b59ee6a2" } diff --git a/ic10emu/src/errors.rs b/ic10emu/src/errors.rs index d297848..7828fcf 100644 --- a/ic10emu/src/errors.rs +++ b/ic10emu/src/errors.rs @@ -7,6 +7,7 @@ use crate::vm::{ }, }; use serde_derive::{Deserialize, Serialize}; +use stationeers_data::templates::ObjectTemplate; use std::error::Error as StdError; use std::fmt::Display; use thiserror::Error; @@ -77,8 +78,8 @@ pub enum TemplateError { NoTemplateForPrefab(Prefab), #[error("no prefab provided")] MissingPrefab, - #[error("incorrect template for concreet impl {0} from prefab {1}")] - IncorrectTemplate(String, Prefab), + #[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) diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index 3559871..fe87755 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -46,7 +46,7 @@ pub struct ICInfo { pub defines: BTreeMap, pub labels: BTreeMap, pub state: ICState, - pub yield_instruciton_count: u16, + pub yield_instruction_count: u16, } impl Display for ICState { diff --git a/ic10emu/src/vm/object/stationpedia.rs b/ic10emu/src/vm/object/stationpedia.rs index 6eb2f23..38245ab 100644 --- a/ic10emu/src/vm/object/stationpedia.rs +++ b/ic10emu/src/vm/object/stationpedia.rs @@ -45,6 +45,7 @@ pub fn object_from_frozen( return Err(TemplateError::IncorrectTemplate( "ItemIntegratedCircuit10".to_string(), Prefab::Name("ItemIntegratedCircuit10".to_string()), + template, )); }; @@ -101,7 +102,7 @@ pub fn object_from_frozen( ic: obj .circuit .as_ref() - .map(|circuit| circuit.yield_instruciton_count) + .map(|circuit| circuit.yield_instruction_count) .unwrap_or(0), aliases: obj .circuit diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index 1328c53..7b6f1ba 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -70,6 +70,7 @@ pub struct ObjectInfo { pub name: Option, pub id: Option, pub prefab: Option, + pub prefab_hash: Option, pub slots: Option>, pub damage: Option, pub device_pins: Option>, @@ -93,6 +94,7 @@ impl From<&VMObject> for 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, damage: None, device_pins: None, @@ -114,6 +116,14 @@ impl From<&VMObject> for ObjectInfo { 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) @@ -124,6 +134,7 @@ impl ObjectInfo { name: None, id: None, prefab: Some(prefab_name), + prefab_hash: Some(prefab_hash), slots: None, damage: None, device_pins: None, @@ -141,7 +152,7 @@ impl ObjectInfo { } } - /// update the object info from the relavent implimented interfaces of a dyn object + /// 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 { @@ -344,7 +355,7 @@ impl ObjectInfo { .map(|(key, val)| (key.clone(), *val)) .collect(), state: circuit.get_state(), - yield_instruciton_count: circuit.get_instructions_since_yield(), + yield_instruction_count: circuit.get_instructions_since_yield(), }); self } @@ -405,6 +416,16 @@ impl FrozenObject { ) }) .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()), diff --git a/stationeers_data/src/database/prefab_map.rs b/stationeers_data/src/database/prefab_map.rs index 415ad50..7d20098 100644 --- a/stationeers_data/src/database/prefab_map.rs +++ b/stationeers_data/src/database/prefab_map.rs @@ -25,6 +25,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1330388999i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardBlack".into(), prefab_hash: -1330388999i32, @@ -48,6 +49,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1411327657i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardBlue".into(), prefab_hash: -1411327657i32, @@ -71,6 +73,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1412428165i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardBrown".into(), prefab_hash: 1412428165i32, @@ -94,6 +97,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1339479035i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardGray".into(), prefab_hash: -1339479035i32, @@ -117,6 +121,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -374567952i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardGreen".into(), prefab_hash: -374567952i32, @@ -140,6 +145,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 337035771i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardKhaki".into(), prefab_hash: 337035771i32, @@ -163,6 +169,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -332896929i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardOrange".into(), prefab_hash: -332896929i32, @@ -186,6 +193,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 431317557i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardPink".into(), prefab_hash: 431317557i32, @@ -209,6 +217,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 459843265i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardPurple".into(), prefab_hash: 459843265i32, @@ -232,6 +241,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1713748313i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardRed".into(), prefab_hash: -1713748313i32, @@ -255,6 +265,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2079959157i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardWhite".into(), prefab_hash: 2079959157i32, @@ -278,6 +289,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 568932536i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardYellow".into(), prefab_hash: 568932536i32, @@ -301,6 +313,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1365789392i32, ItemConsumerTemplate { + templateType: "ItemConsumer".into(), prefab: PrefabInfo { prefab_name: "ApplianceChemistryStation".into(), prefab_hash: 1365789392i32, @@ -336,6 +349,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1683849799i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ApplianceDeskLampLeft".into(), prefab_hash: -1683849799i32, @@ -359,6 +373,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1174360780i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ApplianceDeskLampRight".into(), prefab_hash: 1174360780i32, @@ -382,6 +397,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1136173965i32, ItemConsumerTemplate { + templateType: "ItemConsumer".into(), prefab: PrefabInfo { prefab_name: "ApplianceMicrowave".into(), prefab_hash: -1136173965i32, @@ -422,6 +438,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -749191906i32, ItemConsumerTemplate { + templateType: "ItemConsumer".into(), prefab: PrefabInfo { prefab_name: "AppliancePackagingMachine".into(), prefab_hash: -749191906i32, @@ -462,6 +479,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1339716113i32, ItemConsumerTemplate { + templateType: "ItemConsumer".into(), prefab: PrefabInfo { prefab_name: "AppliancePaintMixer".into(), prefab_hash: -1339716113i32, @@ -498,6 +516,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1303038067i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "AppliancePlantGeneticAnalyzer".into(), prefab_hash: -1303038067i32, @@ -525,6 +544,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1094868323i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "AppliancePlantGeneticSplicer".into(), prefab_hash: -1094868323i32, @@ -555,6 +575,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 871432335i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "AppliancePlantGeneticStabilizer".into(), prefab_hash: 871432335i32, @@ -582,6 +603,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1260918085i32, ItemConsumerTemplate { + templateType: "ItemConsumer".into(), prefab: PrefabInfo { prefab_name: "ApplianceReagentProcessor".into(), prefab_hash: 1260918085i32, @@ -623,6 +645,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 142831994i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ApplianceSeedTray".into(), prefab_hash: 142831994i32, @@ -661,6 +684,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1853941363i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ApplianceTabletDock".into(), prefab_hash: 1853941363i32, @@ -687,6 +711,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 221058307i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AutolathePrinterMod".into(), prefab_hash: 221058307i32, @@ -711,6 +736,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -462415758i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "Battery_Wireless_cell".into(), prefab_hash: -462415758i32, @@ -757,6 +783,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -41519077i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "Battery_Wireless_cell_Big".into(), prefab_hash: -41519077i32, @@ -803,6 +830,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1976947556i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "CardboardBox".into(), prefab_hash: -1976947556i32, @@ -835,6 +863,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1634532552i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeAccessController".into(), prefab_hash: -1634532552i32, @@ -858,6 +887,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1550278665i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeAtmosAnalyser".into(), prefab_hash: -1550278665i32, @@ -882,6 +912,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -932136011i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeConfiguration".into(), prefab_hash: -932136011i32, @@ -905,6 +936,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1462180176i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeElectronicReader".into(), prefab_hash: -1462180176i32, @@ -928,6 +960,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1957063345i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeGPS".into(), prefab_hash: -1957063345i32, @@ -951,6 +984,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 872720793i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeGuide".into(), prefab_hash: 872720793i32, @@ -974,6 +1008,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1116110181i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeMedicalAnalyser".into(), prefab_hash: -1116110181i32, @@ -998,6 +1033,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1606989119i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeNetworkAnalyser".into(), prefab_hash: 1606989119i32, @@ -1022,6 +1058,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1768732546i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeOreScanner".into(), prefab_hash: -1768732546i32, @@ -1046,6 +1083,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1738236580i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeOreScannerColor".into(), prefab_hash: 1738236580i32, @@ -1070,6 +1108,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1101328282i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgePlantAnalyser".into(), prefab_hash: 1101328282i32, @@ -1093,6 +1132,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 81488783i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeTracker".into(), prefab_hash: 81488783i32, @@ -1116,6 +1156,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1633663176i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardAdvAirlockControl".into(), prefab_hash: 1633663176i32, @@ -1139,6 +1180,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1618019559i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardAirControl".into(), prefab_hash: 1618019559i32, @@ -1163,6 +1205,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 912176135i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardAirlockControl".into(), prefab_hash: 912176135i32, @@ -1187,6 +1230,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -412104504i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardCameraDisplay".into(), prefab_hash: -412104504i32, @@ -1211,6 +1255,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 855694771i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardDoorControl".into(), prefab_hash: 855694771i32, @@ -1235,6 +1280,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -82343730i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardGasDisplay".into(), prefab_hash: -82343730i32, @@ -1259,6 +1305,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1344368806i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardGraphDisplay".into(), prefab_hash: 1344368806i32, @@ -1282,6 +1329,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1633074601i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardHashDisplay".into(), prefab_hash: 1633074601i32, @@ -1305,6 +1353,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1134148135i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardModeControl".into(), prefab_hash: -1134148135i32, @@ -1329,6 +1378,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1923778429i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardPowerControl".into(), prefab_hash: -1923778429i32, @@ -1353,6 +1403,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2044446819i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardShipDisplay".into(), prefab_hash: -2044446819i32, @@ -1377,6 +1428,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2020180320i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardSolarControl".into(), prefab_hash: 2020180320i32, @@ -1401,6 +1453,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1228794916i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "CompositeRollCover".into(), prefab_hash: 1228794916i32, @@ -1450,6 +1503,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 8709219i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "CrateMkII".into(), prefab_hash: 8709219i32, @@ -1486,6 +1540,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1531087544i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "DecayedFood".into(), prefab_hash: 1531087544i32, @@ -1510,6 +1565,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1844430312i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "DeviceLfoVolume".into(), prefab_hash: -1844430312i32, @@ -1572,6 +1628,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1762696475i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "DeviceStepUnit".into(), prefab_hash: 1762696475i32, @@ -1678,6 +1735,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 519913639i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicAirConditioner".into(), prefab_hash: 519913639i32, @@ -1708,6 +1766,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1941079206i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicCrate".into(), prefab_hash: 1941079206i32, @@ -1744,6 +1803,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2085885850i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "DynamicGPR".into(), prefab_hash: -2085885850i32, @@ -1796,6 +1856,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1713611165i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterAir".into(), prefab_hash: -1713611165i32, @@ -1826,6 +1887,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -322413931i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterCarbonDioxide".into(), prefab_hash: -322413931i32, @@ -1856,6 +1918,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1741267161i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterEmpty".into(), prefab_hash: -1741267161i32, @@ -1886,6 +1949,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -817051527i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterFuel".into(), prefab_hash: -817051527i32, @@ -1916,6 +1980,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 121951301i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterNitrogen".into(), prefab_hash: 121951301i32, @@ -1946,6 +2011,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 30727200i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterNitrousOxide".into(), prefab_hash: 30727200i32, @@ -1975,6 +2041,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1360925836i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterOxygen".into(), prefab_hash: 1360925836i32, @@ -2005,6 +2072,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 396065382i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterPollutants".into(), prefab_hash: 396065382i32, @@ -2034,6 +2102,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -8883951i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterRocketFuel".into(), prefab_hash: -8883951i32, @@ -2063,6 +2132,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 108086870i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterVolatiles".into(), prefab_hash: 108086870i32, @@ -2093,6 +2163,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 197293625i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterWater".into(), prefab_hash: 197293625i32, @@ -2125,6 +2196,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -386375420i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasTankAdvanced".into(), prefab_hash: -386375420i32, @@ -2154,6 +2226,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1264455519i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasTankAdvancedOxygen".into(), prefab_hash: -1264455519i32, @@ -2183,6 +2256,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -82087220i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGenerator".into(), prefab_hash: -82087220i32, @@ -2216,6 +2290,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 587726607i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicHydroponics".into(), prefab_hash: 587726607i32, @@ -2255,6 +2330,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -21970188i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "DynamicLight".into(), prefab_hash: -21970188i32, @@ -2309,6 +2385,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1939209112i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicLiquidCanisterEmpty".into(), prefab_hash: -1939209112i32, @@ -2341,6 +2418,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2130739600i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicMKIILiquidCanisterEmpty".into(), prefab_hash: 2130739600i32, @@ -2373,6 +2451,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -319510386i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicMKIILiquidCanisterWater".into(), prefab_hash: -319510386i32, @@ -2405,6 +2484,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 755048589i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicScrubber".into(), prefab_hash: 755048589i32, @@ -2439,6 +2519,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 106953348i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "DynamicSkeleton".into(), prefab_hash: 106953348i32, @@ -2462,6 +2543,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -311170652i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ElectronicPrinterMod".into(), prefab_hash: -311170652i32, @@ -2486,6 +2568,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -110788403i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ElevatorCarrage".into(), prefab_hash: -110788403i32, @@ -2509,6 +2592,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1730165908i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "EntityChick".into(), prefab_hash: 1730165908i32, @@ -2539,6 +2623,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 334097180i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "EntityChickenBrown".into(), prefab_hash: 334097180i32, @@ -2569,6 +2654,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1010807532i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "EntityChickenWhite".into(), prefab_hash: 1010807532i32, @@ -2599,6 +2685,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 966959649i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "EntityRoosterBlack".into(), prefab_hash: 966959649i32, @@ -2628,6 +2715,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -583103395i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "EntityRoosterBrown".into(), prefab_hash: -583103395i32, @@ -2658,6 +2746,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1517856652i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "Fertilizer".into(), prefab_hash: 1517856652i32, @@ -2682,6 +2771,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -86315541i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "FireArmSMG".into(), prefab_hash: -86315541i32, @@ -2708,6 +2798,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1845441951i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Flag_ODA_10m".into(), prefab_hash: 1845441951i32, @@ -2723,6 +2814,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1159126354i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Flag_ODA_4m".into(), prefab_hash: 1159126354i32, @@ -2738,6 +2830,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1998634960i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Flag_ODA_6m".into(), prefab_hash: 1998634960i32, @@ -2753,6 +2846,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -375156130i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Flag_ODA_8m".into(), prefab_hash: -375156130i32, @@ -2768,6 +2862,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 118685786i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "FlareGun".into(), prefab_hash: 118685786i32, @@ -2797,6 +2892,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1840108251i32, StructureCircuitHolderTemplate { + templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "H2Combustor".into(), prefab_hash: 1840108251i32, @@ -2924,6 +3020,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 247238062i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "Handgun".into(), prefab_hash: 247238062i32, @@ -2950,6 +3047,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1254383185i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "HandgunMagazine".into(), prefab_hash: 1254383185i32, @@ -2973,6 +3071,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -857713709i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "HumanSkull".into(), prefab_hash: -857713709i32, @@ -2996,6 +3095,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -73796547i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ImGuiCircuitboardAirlockControl".into(), prefab_hash: -73796547i32, @@ -3019,6 +3119,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -842048328i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemActiveVent".into(), prefab_hash: -842048328i32, @@ -3043,6 +3144,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1871048978i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAdhesiveInsulation".into(), prefab_hash: 1871048978i32, @@ -3066,6 +3168,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1722785341i32, ItemCircuitHolderTemplate { + templateType: "ItemCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "ItemAdvancedTablet".into(), prefab_hash: 1722785341i32, @@ -3151,6 +3254,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 176446172i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAlienMushroom".into(), prefab_hash: 176446172i32, @@ -3174,6 +3278,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -9559091i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAmmoBox".into(), prefab_hash: -9559091i32, @@ -3197,6 +3302,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 201215010i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemAngleGrinder".into(), prefab_hash: 201215010i32, @@ -3249,6 +3355,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1385062886i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemArcWelder".into(), prefab_hash: 1385062886i32, @@ -3301,6 +3408,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1757673317i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAreaPowerControl".into(), prefab_hash: 1757673317i32, @@ -3325,6 +3433,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 412924554i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAstroloyIngot".into(), prefab_hash: 412924554i32, @@ -3349,6 +3458,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1662476145i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAstroloySheets".into(), prefab_hash: -1662476145i32, @@ -3372,6 +3482,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 789015045i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAuthoringTool".into(), prefab_hash: 789015045i32, @@ -3395,6 +3506,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1731627004i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAuthoringToolRocketNetwork".into(), prefab_hash: -1731627004i32, @@ -3418,6 +3530,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1262580790i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemBasketBall".into(), prefab_hash: -1262580790i32, @@ -3441,6 +3554,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 700133157i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemBatteryCell".into(), prefab_hash: 700133157i32, @@ -3487,6 +3601,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -459827268i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemBatteryCellLarge".into(), prefab_hash: -459827268i32, @@ -3533,6 +3648,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 544617306i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemBatteryCellNuclear".into(), prefab_hash: 544617306i32, @@ -3579,6 +3695,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1866880307i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemBatteryCharger".into(), prefab_hash: -1866880307i32, @@ -3603,6 +3720,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1008295833i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemBatteryChargerSmall".into(), prefab_hash: 1008295833i32, @@ -3626,6 +3744,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -869869491i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemBeacon".into(), prefab_hash: -869869491i32, @@ -3678,6 +3797,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -831480639i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemBiomass".into(), prefab_hash: -831480639i32, @@ -3702,6 +3822,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 893514943i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemBreadLoaf".into(), prefab_hash: 893514943i32, @@ -3725,6 +3846,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1792787349i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCableAnalyser".into(), prefab_hash: -1792787349i32, @@ -3748,6 +3870,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -466050668i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCableCoil".into(), prefab_hash: -466050668i32, @@ -3772,6 +3895,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2060134443i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCableCoilHeavy".into(), prefab_hash: 2060134443i32, @@ -3796,6 +3920,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 195442047i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCableFuse".into(), prefab_hash: 195442047i32, @@ -3819,6 +3944,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2104175091i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCannedCondensedMilk".into(), prefab_hash: -2104175091i32, @@ -3843,6 +3969,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -999714082i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCannedEdamame".into(), prefab_hash: -999714082i32, @@ -3867,6 +3994,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1344601965i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCannedMushroom".into(), prefab_hash: -1344601965i32, @@ -3891,6 +4019,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1161510063i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCannedPowderedEggs".into(), prefab_hash: 1161510063i32, @@ -3915,6 +4044,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1185552595i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCannedRicePudding".into(), prefab_hash: -1185552595i32, @@ -3939,6 +4069,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 791746840i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCerealBar".into(), prefab_hash: 791746840i32, @@ -3963,6 +4094,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 252561409i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCharcoal".into(), prefab_hash: 252561409i32, @@ -3987,6 +4119,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -772542081i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChemLightBlue".into(), prefab_hash: -772542081i32, @@ -4011,6 +4144,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -597479390i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChemLightGreen".into(), prefab_hash: -597479390i32, @@ -4035,6 +4169,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -525810132i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChemLightRed".into(), prefab_hash: -525810132i32, @@ -4059,6 +4194,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1312166823i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChemLightWhite".into(), prefab_hash: 1312166823i32, @@ -4083,6 +4219,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1224819963i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChemLightYellow".into(), prefab_hash: 1224819963i32, @@ -4106,6 +4243,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 234601764i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChocolateBar".into(), prefab_hash: 234601764i32, @@ -4129,6 +4267,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -261575861i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChocolateCake".into(), prefab_hash: -261575861i32, @@ -4152,6 +4291,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 860793245i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChocolateCerealBar".into(), prefab_hash: 860793245i32, @@ -4175,6 +4315,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1724793494i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCoalOre".into(), prefab_hash: 1724793494i32, @@ -4199,6 +4340,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -983091249i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCobaltOre".into(), prefab_hash: -983091249i32, @@ -4223,6 +4365,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 457286516i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCocoaPowder".into(), prefab_hash: 457286516i32, @@ -4246,6 +4389,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 680051921i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCocoaTree".into(), prefab_hash: 680051921i32, @@ -4269,6 +4413,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1800622698i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCoffeeMug".into(), prefab_hash: 1800622698i32, @@ -4292,6 +4437,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1058547521i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemConstantanIngot".into(), prefab_hash: 1058547521i32, @@ -4315,6 +4461,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1715917521i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedCondensedMilk".into(), prefab_hash: 1715917521i32, @@ -4338,6 +4485,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1344773148i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedCorn".into(), prefab_hash: 1344773148i32, @@ -4361,6 +4509,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1076892658i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedMushroom".into(), prefab_hash: -1076892658i32, @@ -4384,6 +4533,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1712264413i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedPowderedEggs".into(), prefab_hash: -1712264413i32, @@ -4407,6 +4557,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1849281546i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedPumpkin".into(), prefab_hash: 1849281546i32, @@ -4430,6 +4581,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2013539020i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedRice".into(), prefab_hash: 2013539020i32, @@ -4453,6 +4605,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1353449022i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedSoybean".into(), prefab_hash: 1353449022i32, @@ -4476,6 +4629,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -709086714i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedTomato".into(), prefab_hash: -709086714i32, @@ -4499,6 +4653,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -404336834i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCopperIngot".into(), prefab_hash: -404336834i32, @@ -4523,6 +4678,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -707307845i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCopperOre".into(), prefab_hash: -707307845i32, @@ -4547,6 +4703,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 258339687i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCorn".into(), prefab_hash: 258339687i32, @@ -4571,6 +4728,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 545034114i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCornSoup".into(), prefab_hash: 545034114i32, @@ -4595,6 +4753,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1756772618i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCreditCard".into(), prefab_hash: -1756772618i32, @@ -4618,6 +4777,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 215486157i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCropHay".into(), prefab_hash: 215486157i32, @@ -4641,6 +4801,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 856108234i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCrowbar".into(), prefab_hash: 856108234i32, @@ -4665,6 +4826,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1005843700i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDataDisk".into(), prefab_hash: 1005843700i32, @@ -4688,6 +4850,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 902565329i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDirtCanister".into(), prefab_hash: 902565329i32, @@ -4712,6 +4875,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1234745580i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDirtyOre".into(), prefab_hash: -1234745580i32, @@ -4736,6 +4900,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2124435700i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDisposableBatteryCharger".into(), prefab_hash: -2124435700i32, @@ -4760,6 +4925,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2009673399i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemDrill".into(), prefab_hash: 2009673399i32, @@ -4813,6 +4979,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1943134693i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDuctTape".into(), prefab_hash: -1943134693i32, @@ -4837,6 +5004,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1072914031i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDynamicAirCon".into(), prefab_hash: 1072914031i32, @@ -4860,6 +5028,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -971920158i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDynamicScrubber".into(), prefab_hash: -971920158i32, @@ -4883,6 +5052,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -524289310i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemEggCarton".into(), prefab_hash: -524289310i32, @@ -4915,6 +5085,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 731250882i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemElectronicParts".into(), prefab_hash: 731250882i32, @@ -4938,6 +5109,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 502280180i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemElectrumIngot".into(), prefab_hash: 502280180i32, @@ -4961,6 +5133,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -351438780i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyAngleGrinder".into(), prefab_hash: -351438780i32, @@ -5013,6 +5186,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1056029600i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyArcWelder".into(), prefab_hash: -1056029600i32, @@ -5065,6 +5239,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 976699731i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyCrowbar".into(), prefab_hash: 976699731i32, @@ -5088,6 +5263,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2052458905i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyDrill".into(), prefab_hash: -2052458905i32, @@ -5140,6 +5316,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1791306431i32, ItemSuitTemplate { + templateType: "ItemSuit".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyEvaSuit".into(), prefab_hash: 1791306431i32, @@ -5180,6 +5357,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1061510408i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyPickaxe".into(), prefab_hash: -1061510408i32, @@ -5203,6 +5381,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 266099983i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyScrewdriver".into(), prefab_hash: 266099983i32, @@ -5226,6 +5405,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 205916793i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencySpaceHelmet".into(), prefab_hash: 205916793i32, @@ -5289,6 +5469,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1661941301i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyToolBelt".into(), prefab_hash: 1661941301i32, @@ -5322,6 +5503,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2102803952i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyWireCutters".into(), prefab_hash: 2102803952i32, @@ -5345,6 +5527,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 162553030i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyWrench".into(), prefab_hash: 162553030i32, @@ -5368,6 +5551,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1013818348i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemEmptyCan".into(), prefab_hash: 1013818348i32, @@ -5392,6 +5576,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1677018918i32, ItemSuitTemplate { + templateType: "ItemSuit".into(), prefab: PrefabInfo { prefab_name: "ItemEvaSuit".into(), prefab_hash: 1677018918i32, @@ -5433,6 +5618,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 235361649i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemExplosive".into(), prefab_hash: 235361649i32, @@ -5456,6 +5642,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 892110467i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFern".into(), prefab_hash: 892110467i32, @@ -5480,6 +5667,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -383972371i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFertilizedEgg".into(), prefab_hash: -383972371i32, @@ -5504,6 +5692,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 266654416i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFilterFern".into(), prefab_hash: 266654416i32, @@ -5528,6 +5717,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2011191088i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlagSmall".into(), prefab_hash: 2011191088i32, @@ -5551,6 +5741,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2107840748i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlashingLight".into(), prefab_hash: -2107840748i32, @@ -5574,6 +5765,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -838472102i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemFlashlight".into(), prefab_hash: -838472102i32, @@ -5630,6 +5822,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -665995854i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlour".into(), prefab_hash: -665995854i32, @@ -5654,6 +5847,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1573623434i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlowerBlue".into(), prefab_hash: -1573623434i32, @@ -5677,6 +5871,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1513337058i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlowerGreen".into(), prefab_hash: -1513337058i32, @@ -5700,6 +5895,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1411986716i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlowerOrange".into(), prefab_hash: -1411986716i32, @@ -5723,6 +5919,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -81376085i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlowerRed".into(), prefab_hash: -81376085i32, @@ -5746,6 +5943,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1712822019i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlowerYellow".into(), prefab_hash: 1712822019i32, @@ -5769,6 +5967,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -57608687i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFrenchFries".into(), prefab_hash: -57608687i32, @@ -5792,6 +5991,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1371786091i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFries".into(), prefab_hash: 1371786091i32, @@ -5815,6 +6015,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -767685874i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterCarbonDioxide".into(), prefab_hash: -767685874i32, @@ -5841,6 +6042,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 42280099i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterEmpty".into(), prefab_hash: 42280099i32, @@ -5867,6 +6069,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1014695176i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterFuel".into(), prefab_hash: -1014695176i32, @@ -5893,6 +6096,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2145068424i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterNitrogen".into(), prefab_hash: 2145068424i32, @@ -5919,6 +6123,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1712153401i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterNitrousOxide".into(), prefab_hash: -1712153401i32, @@ -5945,6 +6150,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1152261938i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterOxygen".into(), prefab_hash: -1152261938i32, @@ -5971,6 +6177,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1552586384i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterPollutants".into(), prefab_hash: -1552586384i32, @@ -5997,6 +6204,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -668314371i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterSmart".into(), prefab_hash: -668314371i32, @@ -6023,6 +6231,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -472094806i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterVolatiles".into(), prefab_hash: -472094806i32, @@ -6049,6 +6258,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1854861891i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterWater".into(), prefab_hash: -1854861891i32, @@ -6077,6 +6287,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1635000764i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterCarbonDioxide".into(), prefab_hash: 1635000764i32, @@ -6101,6 +6312,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -185568964i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterCarbonDioxideInfinite".into(), prefab_hash: -185568964i32, @@ -6125,6 +6337,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1876847024i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterCarbonDioxideL".into(), prefab_hash: 1876847024i32, @@ -6148,6 +6361,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 416897318i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterCarbonDioxideM".into(), prefab_hash: 416897318i32, @@ -6171,6 +6385,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 632853248i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrogen".into(), prefab_hash: 632853248i32, @@ -6195,6 +6410,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 152751131i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrogenInfinite".into(), prefab_hash: 152751131i32, @@ -6219,6 +6435,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1387439451i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrogenL".into(), prefab_hash: -1387439451i32, @@ -6242,6 +6459,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -632657357i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrogenM".into(), prefab_hash: -632657357i32, @@ -6265,6 +6483,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1247674305i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrousOxide".into(), prefab_hash: -1247674305i32, @@ -6288,6 +6507,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -123934842i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrousOxideInfinite".into(), prefab_hash: -123934842i32, @@ -6312,6 +6532,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 465267979i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrousOxideL".into(), prefab_hash: 465267979i32, @@ -6335,6 +6556,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1824284061i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrousOxideM".into(), prefab_hash: 1824284061i32, @@ -6358,6 +6580,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -721824748i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterOxygen".into(), prefab_hash: -721824748i32, @@ -6382,6 +6605,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1055451111i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterOxygenInfinite".into(), prefab_hash: -1055451111i32, @@ -6406,6 +6630,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1217998945i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterOxygenL".into(), prefab_hash: -1217998945i32, @@ -6429,6 +6654,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1067319543i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterOxygenM".into(), prefab_hash: -1067319543i32, @@ -6452,6 +6678,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1915566057i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterPollutants".into(), prefab_hash: 1915566057i32, @@ -6476,6 +6703,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -503738105i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterPollutantsInfinite".into(), prefab_hash: -503738105i32, @@ -6500,6 +6728,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1959564765i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterPollutantsL".into(), prefab_hash: 1959564765i32, @@ -6523,6 +6752,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 63677771i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterPollutantsM".into(), prefab_hash: 63677771i32, @@ -6546,6 +6776,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 15011598i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterVolatiles".into(), prefab_hash: 15011598i32, @@ -6570,6 +6801,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1916176068i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterVolatilesInfinite".into(), prefab_hash: -1916176068i32, @@ -6594,6 +6826,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1255156286i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterVolatilesL".into(), prefab_hash: 1255156286i32, @@ -6617,6 +6850,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1037507240i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterVolatilesM".into(), prefab_hash: 1037507240i32, @@ -6640,6 +6874,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1993197973i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterWater".into(), prefab_hash: -1993197973i32, @@ -6664,6 +6899,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1678456554i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterWaterInfinite".into(), prefab_hash: -1678456554i32, @@ -6688,6 +6924,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2004969680i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterWaterL".into(), prefab_hash: 2004969680i32, @@ -6711,6 +6948,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 8804422i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterWaterM".into(), prefab_hash: 8804422i32, @@ -6734,6 +6972,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1717593480i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasSensor".into(), prefab_hash: 1717593480i32, @@ -6757,6 +6996,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2113012215i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasTankStorage".into(), prefab_hash: -2113012215i32, @@ -6781,6 +7021,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1588896491i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGlassSheets".into(), prefab_hash: 1588896491i32, @@ -6805,6 +7046,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1068925231i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGlasses".into(), prefab_hash: -1068925231i32, @@ -6828,6 +7070,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 226410516i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGoldIngot".into(), prefab_hash: 226410516i32, @@ -6852,6 +7095,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1348105509i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGoldOre".into(), prefab_hash: -1348105509i32, @@ -6876,6 +7120,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1544275894i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGrenade".into(), prefab_hash: 1544275894i32, @@ -6900,6 +7145,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 470636008i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemHEMDroidRepairKit".into(), prefab_hash: 470636008i32, @@ -6923,6 +7169,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 374891127i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemHardBackpack".into(), prefab_hash: 374891127i32, @@ -7057,6 +7304,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -412551656i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemHardJetpack".into(), prefab_hash: -412551656i32, @@ -7220,6 +7468,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 900366130i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemHardMiningBackPack".into(), prefab_hash: 900366130i32, @@ -7268,6 +7517,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1758310454i32, ItemSuitCircuitHolderTemplate { + templateType: "ItemSuitCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "ItemHardSuit".into(), prefab_hash: -1758310454i32, @@ -7435,6 +7685,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -84573099i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemHardsuitHelmet".into(), prefab_hash: -84573099i32, @@ -7499,6 +7750,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1579842814i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemHastelloyIngot".into(), prefab_hash: 1579842814i32, @@ -7522,6 +7774,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 299189339i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemHat".into(), prefab_hash: 299189339i32, @@ -7545,6 +7798,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 998653377i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemHighVolumeGasCanisterEmpty".into(), prefab_hash: 998653377i32, @@ -7571,6 +7825,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1117581553i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemHorticultureBelt".into(), prefab_hash: -1117581553i32, @@ -7606,6 +7861,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1193543727i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemHydroponicTray".into(), prefab_hash: -1193543727i32, @@ -7630,6 +7886,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1217489948i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemIce".into(), prefab_hash: 1217489948i32, @@ -7654,6 +7911,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 890106742i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemIgniter".into(), prefab_hash: 890106742i32, @@ -7678,6 +7936,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -787796599i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemInconelIngot".into(), prefab_hash: -787796599i32, @@ -7701,6 +7960,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 897176943i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemInsulation".into(), prefab_hash: 897176943i32, @@ -7725,6 +7985,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -744098481i32, ItemLogicMemoryTemplate { + templateType: "ItemLogicMemory".into(), prefab: PrefabInfo { prefab_name: "ItemIntegratedCircuit10".into(), prefab_hash: -744098481i32, @@ -7767,6 +8028,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -297990285i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemInvarIngot".into(), prefab_hash: -297990285i32, @@ -7790,6 +8052,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1225836666i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemIronFrames".into(), prefab_hash: 1225836666i32, @@ -7813,6 +8076,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1301215609i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemIronIngot".into(), prefab_hash: -1301215609i32, @@ -7837,6 +8101,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1758427767i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemIronOre".into(), prefab_hash: 1758427767i32, @@ -7861,6 +8126,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -487378546i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemIronSheets".into(), prefab_hash: -487378546i32, @@ -7884,6 +8150,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1969189000i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemJetpackBasic".into(), prefab_hash: 1969189000i32, @@ -8009,6 +8276,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 496830914i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAIMeE".into(), prefab_hash: 496830914i32, @@ -8032,6 +8300,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 513258369i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAccessBridge".into(), prefab_hash: 513258369i32, @@ -8055,6 +8324,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1431998347i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAdvancedComposter".into(), prefab_hash: -1431998347i32, @@ -8078,6 +8348,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -616758353i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAdvancedFurnace".into(), prefab_hash: -616758353i32, @@ -8101,6 +8372,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -598545233i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAdvancedPackagingMachine".into(), prefab_hash: -598545233i32, @@ -8124,6 +8396,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 964043875i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAirlock".into(), prefab_hash: 964043875i32, @@ -8147,6 +8420,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 682546947i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAirlockGate".into(), prefab_hash: 682546947i32, @@ -8170,6 +8444,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -98995857i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitArcFurnace".into(), prefab_hash: -98995857i32, @@ -8193,6 +8468,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1222286371i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAtmospherics".into(), prefab_hash: 1222286371i32, @@ -8216,6 +8492,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1668815415i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAutoMinerSmall".into(), prefab_hash: 1668815415i32, @@ -8239,6 +8516,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1753893214i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAutolathe".into(), prefab_hash: -1753893214i32, @@ -8262,6 +8540,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1931958659i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAutomatedOven".into(), prefab_hash: -1931958659i32, @@ -8285,6 +8564,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 148305004i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitBasket".into(), prefab_hash: 148305004i32, @@ -8308,6 +8588,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1406656973i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitBattery".into(), prefab_hash: 1406656973i32, @@ -8331,6 +8612,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -21225041i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitBatteryLarge".into(), prefab_hash: -21225041i32, @@ -8354,6 +8636,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 249073136i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitBeacon".into(), prefab_hash: 249073136i32, @@ -8377,6 +8660,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1241256797i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitBeds".into(), prefab_hash: -1241256797i32, @@ -8400,6 +8684,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1755116240i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitBlastDoor".into(), prefab_hash: -1755116240i32, @@ -8423,6 +8708,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 578182956i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCentrifuge".into(), prefab_hash: 578182956i32, @@ -8446,6 +8732,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1394008073i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitChairs".into(), prefab_hash: -1394008073i32, @@ -8469,6 +8756,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1025254665i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitChute".into(), prefab_hash: 1025254665i32, @@ -8492,6 +8780,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -876560854i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitChuteUmbilical".into(), prefab_hash: -876560854i32, @@ -8515,6 +8804,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1470820996i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCompositeCladding".into(), prefab_hash: -1470820996i32, @@ -8538,6 +8828,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1182412869i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCompositeFloorGrating".into(), prefab_hash: 1182412869i32, @@ -8561,6 +8852,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1990225489i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitComputer".into(), prefab_hash: 1990225489i32, @@ -8584,6 +8876,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1241851179i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitConsole".into(), prefab_hash: -1241851179i32, @@ -8607,6 +8900,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 429365598i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCrate".into(), prefab_hash: 429365598i32, @@ -8630,6 +8924,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1585956426i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCrateMkII".into(), prefab_hash: -1585956426i32, @@ -8653,6 +8948,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -551612946i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCrateMount".into(), prefab_hash: -551612946i32, @@ -8676,6 +8972,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -545234195i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCryoTube".into(), prefab_hash: -545234195i32, @@ -8699,6 +8996,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1935075707i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDeepMiner".into(), prefab_hash: -1935075707i32, @@ -8722,6 +9020,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 77421200i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDockingPort".into(), prefab_hash: 77421200i32, @@ -8745,6 +9044,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 168615924i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDoor".into(), prefab_hash: 168615924i32, @@ -8768,6 +9068,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1743663875i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDrinkingFountain".into(), prefab_hash: -1743663875i32, @@ -8791,6 +9092,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1061945368i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDynamicCanister".into(), prefab_hash: -1061945368i32, @@ -8814,6 +9116,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1533501495i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDynamicGasTankAdvanced".into(), prefab_hash: 1533501495i32, @@ -8837,6 +9140,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -732720413i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDynamicGenerator".into(), prefab_hash: -732720413i32, @@ -8860,6 +9164,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1861154222i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDynamicHydroponics".into(), prefab_hash: -1861154222i32, @@ -8883,6 +9188,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 375541286i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDynamicLiquidCanister".into(), prefab_hash: 375541286i32, @@ -8906,6 +9212,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -638019974i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDynamicMKIILiquidCanister".into(), prefab_hash: -638019974i32, @@ -8929,6 +9236,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1603046970i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitElectricUmbilical".into(), prefab_hash: 1603046970i32, @@ -8952,6 +9260,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1181922382i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitElectronicsPrinter".into(), prefab_hash: -1181922382i32, @@ -8975,6 +9284,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -945806652i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitElevator".into(), prefab_hash: -945806652i32, @@ -8998,6 +9308,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 755302726i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitEngineLarge".into(), prefab_hash: 755302726i32, @@ -9021,6 +9332,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1969312177i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitEngineMedium".into(), prefab_hash: 1969312177i32, @@ -9044,6 +9356,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 19645163i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitEngineSmall".into(), prefab_hash: 19645163i32, @@ -9067,6 +9380,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1587787610i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitEvaporationChamber".into(), prefab_hash: 1587787610i32, @@ -9090,6 +9404,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1701764190i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitFlagODA".into(), prefab_hash: 1701764190i32, @@ -9113,6 +9428,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1168199498i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitFridgeBig".into(), prefab_hash: -1168199498i32, @@ -9136,6 +9452,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1661226524i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitFridgeSmall".into(), prefab_hash: 1661226524i32, @@ -9159,6 +9476,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -806743925i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitFurnace".into(), prefab_hash: -806743925i32, @@ -9182,6 +9500,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1162905029i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitFurniture".into(), prefab_hash: 1162905029i32, @@ -9205,6 +9524,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -366262681i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitFuselage".into(), prefab_hash: -366262681i32, @@ -9228,6 +9548,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 377745425i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitGasGenerator".into(), prefab_hash: 377745425i32, @@ -9251,6 +9572,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1867280568i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitGasUmbilical".into(), prefab_hash: -1867280568i32, @@ -9274,6 +9596,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 206848766i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitGovernedGasRocketEngine".into(), prefab_hash: 206848766i32, @@ -9297,6 +9620,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2140672772i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitGroundTelescope".into(), prefab_hash: -2140672772i32, @@ -9320,6 +9644,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 341030083i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitGrowLight".into(), prefab_hash: 341030083i32, @@ -9343,6 +9668,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1022693454i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitHarvie".into(), prefab_hash: -1022693454i32, @@ -9366,6 +9692,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1710540039i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitHeatExchanger".into(), prefab_hash: -1710540039i32, @@ -9389,6 +9716,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 844391171i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitHorizontalAutoMiner".into(), prefab_hash: 844391171i32, @@ -9412,6 +9740,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2098556089i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitHydraulicPipeBender".into(), prefab_hash: -2098556089i32, @@ -9435,6 +9764,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -927931558i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitHydroponicAutomated".into(), prefab_hash: -927931558i32, @@ -9458,6 +9788,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2057179799i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitHydroponicStation".into(), prefab_hash: 2057179799i32, @@ -9481,6 +9812,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 288111533i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitIceCrusher".into(), prefab_hash: 288111533i32, @@ -9504,6 +9836,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2067655311i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitInsulatedLiquidPipe".into(), prefab_hash: 2067655311i32, @@ -9527,6 +9860,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 452636699i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitInsulatedPipe".into(), prefab_hash: 452636699i32, @@ -9550,6 +9884,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -27284803i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitInsulatedPipeUtility".into(), prefab_hash: -27284803i32, @@ -9573,6 +9908,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1831558953i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitInsulatedPipeUtilityLiquid".into(), prefab_hash: -1831558953i32, @@ -9596,6 +9932,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1935945891i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitInteriorDoors".into(), prefab_hash: 1935945891i32, @@ -9619,6 +9956,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 489494578i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLadder".into(), prefab_hash: 489494578i32, @@ -9642,6 +9980,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1817007843i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLandingPadAtmos".into(), prefab_hash: 1817007843i32, @@ -9665,6 +10004,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 293581318i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLandingPadBasic".into(), prefab_hash: 293581318i32, @@ -9688,6 +10028,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1267511065i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLandingPadWaypoint".into(), prefab_hash: -1267511065i32, @@ -9711,6 +10052,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 450164077i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLargeDirectHeatExchanger".into(), prefab_hash: 450164077i32, @@ -9734,6 +10076,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 847430620i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLargeExtendableRadiator".into(), prefab_hash: 847430620i32, @@ -9757,6 +10100,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2039971217i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLargeSatelliteDish".into(), prefab_hash: -2039971217i32, @@ -9780,6 +10124,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1854167549i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLaunchMount".into(), prefab_hash: -1854167549i32, @@ -9803,6 +10148,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -174523552i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLaunchTower".into(), prefab_hash: -174523552i32, @@ -9826,6 +10172,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1951126161i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLiquidRegulator".into(), prefab_hash: 1951126161i32, @@ -9849,6 +10196,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -799849305i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLiquidTank".into(), prefab_hash: -799849305i32, @@ -9872,6 +10220,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 617773453i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLiquidTankInsulated".into(), prefab_hash: 617773453i32, @@ -9895,6 +10244,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1805020897i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLiquidTurboVolumePump".into(), prefab_hash: -1805020897i32, @@ -9918,6 +10268,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1571996765i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLiquidUmbilical".into(), prefab_hash: 1571996765i32, @@ -9941,6 +10292,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 882301399i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLocker".into(), prefab_hash: 882301399i32, @@ -9964,6 +10316,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1512322581i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLogicCircuit".into(), prefab_hash: 1512322581i32, @@ -9987,6 +10340,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1997293610i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLogicInputOutput".into(), prefab_hash: 1997293610i32, @@ -10010,6 +10364,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2098214189i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLogicMemory".into(), prefab_hash: -2098214189i32, @@ -10033,6 +10388,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 220644373i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLogicProcessor".into(), prefab_hash: 220644373i32, @@ -10056,6 +10412,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 124499454i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLogicSwitch".into(), prefab_hash: 124499454i32, @@ -10079,6 +10436,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1005397063i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLogicTransmitter".into(), prefab_hash: 1005397063i32, @@ -10102,6 +10460,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -344968335i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitMotherShipCore".into(), prefab_hash: -344968335i32, @@ -10125,6 +10484,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2038889137i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitMusicMachines".into(), prefab_hash: -2038889137i32, @@ -10148,6 +10508,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1752768283i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPassiveLargeRadiatorGas".into(), prefab_hash: -1752768283i32, @@ -10171,6 +10532,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1453961898i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPassiveLargeRadiatorLiquid".into(), prefab_hash: 1453961898i32, @@ -10194,6 +10556,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 636112787i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPassthroughHeatExchanger".into(), prefab_hash: 636112787i32, @@ -10217,6 +10580,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2062364768i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPictureFrame".into(), prefab_hash: -2062364768i32, @@ -10240,6 +10604,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1619793705i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipe".into(), prefab_hash: -1619793705i32, @@ -10263,6 +10628,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1166461357i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipeLiquid".into(), prefab_hash: -1166461357i32, @@ -10286,6 +10652,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -827125300i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipeOrgan".into(), prefab_hash: -827125300i32, @@ -10309,6 +10676,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 920411066i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipeRadiator".into(), prefab_hash: 920411066i32, @@ -10332,6 +10700,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1697302609i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipeRadiatorLiquid".into(), prefab_hash: -1697302609i32, @@ -10355,6 +10724,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1934508338i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipeUtility".into(), prefab_hash: 1934508338i32, @@ -10378,6 +10748,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 595478589i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipeUtilityLiquid".into(), prefab_hash: 595478589i32, @@ -10401,6 +10772,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 119096484i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPlanter".into(), prefab_hash: 119096484i32, @@ -10424,6 +10796,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1041148999i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPortablesConnector".into(), prefab_hash: 1041148999i32, @@ -10447,6 +10820,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 291368213i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPowerTransmitter".into(), prefab_hash: 291368213i32, @@ -10470,6 +10844,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -831211676i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPowerTransmitterOmni".into(), prefab_hash: -831211676i32, @@ -10493,6 +10868,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2015439334i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPoweredVent".into(), prefab_hash: 2015439334i32, @@ -10516,6 +10892,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -121514007i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPressureFedGasEngine".into(), prefab_hash: -121514007i32, @@ -10539,6 +10916,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -99091572i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPressureFedLiquidEngine".into(), prefab_hash: -99091572i32, @@ -10562,6 +10940,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 123504691i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPressurePlate".into(), prefab_hash: 123504691i32, @@ -10585,6 +10964,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1921918951i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPumpedLiquidEngine".into(), prefab_hash: 1921918951i32, @@ -10608,6 +10988,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 750176282i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRailing".into(), prefab_hash: 750176282i32, @@ -10631,6 +11012,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 849148192i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRecycler".into(), prefab_hash: 849148192i32, @@ -10654,6 +11036,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1181371795i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRegulator".into(), prefab_hash: 1181371795i32, @@ -10677,6 +11060,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1459985302i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitReinforcedWindows".into(), prefab_hash: 1459985302i32, @@ -10700,6 +11084,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 724776762i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitResearchMachine".into(), prefab_hash: 724776762i32, @@ -10723,6 +11108,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1574688481i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRespawnPointWallMounted".into(), prefab_hash: 1574688481i32, @@ -10746,6 +11132,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1396305045i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketAvionics".into(), prefab_hash: 1396305045i32, @@ -10769,6 +11156,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -314072139i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketBattery".into(), prefab_hash: -314072139i32, @@ -10792,6 +11180,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 479850239i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketCargoStorage".into(), prefab_hash: 479850239i32, @@ -10815,6 +11204,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -303008602i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketCelestialTracker".into(), prefab_hash: -303008602i32, @@ -10838,6 +11228,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 721251202i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketCircuitHousing".into(), prefab_hash: 721251202i32, @@ -10861,6 +11252,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1256996603i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketDatalink".into(), prefab_hash: -1256996603i32, @@ -10884,6 +11276,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1629347579i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketGasFuelTank".into(), prefab_hash: -1629347579i32, @@ -10907,6 +11300,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2032027950i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketLiquidFuelTank".into(), prefab_hash: 2032027950i32, @@ -10930,6 +11324,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -636127860i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketManufactory".into(), prefab_hash: -636127860i32, @@ -10953,6 +11348,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -867969909i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketMiner".into(), prefab_hash: -867969909i32, @@ -10976,6 +11372,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1753647154i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketScanner".into(), prefab_hash: 1753647154i32, @@ -10999,6 +11396,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -932335800i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketTransformerSmall".into(), prefab_hash: -932335800i32, @@ -11022,6 +11420,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1827215803i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRoverFrame".into(), prefab_hash: 1827215803i32, @@ -11045,6 +11444,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 197243872i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRoverMKI".into(), prefab_hash: 197243872i32, @@ -11068,6 +11468,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 323957548i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSDBHopper".into(), prefab_hash: 323957548i32, @@ -11091,6 +11492,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 178422810i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSatelliteDish".into(), prefab_hash: 178422810i32, @@ -11114,6 +11516,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 578078533i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSecurityPrinter".into(), prefab_hash: 578078533i32, @@ -11137,6 +11540,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1776897113i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSensor".into(), prefab_hash: -1776897113i32, @@ -11160,6 +11564,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 735858725i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitShower".into(), prefab_hash: 735858725i32, @@ -11183,6 +11588,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 529996327i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSign".into(), prefab_hash: 529996327i32, @@ -11206,6 +11612,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 326752036i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSleeper".into(), prefab_hash: 326752036i32, @@ -11229,6 +11636,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1332682164i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSmallDirectHeatExchanger".into(), prefab_hash: -1332682164i32, @@ -11252,6 +11660,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1960952220i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSmallSatelliteDish".into(), prefab_hash: 1960952220i32, @@ -11275,6 +11684,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1924492105i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSolarPanel".into(), prefab_hash: -1924492105i32, @@ -11298,6 +11708,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 844961456i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSolarPanelBasic".into(), prefab_hash: 844961456i32, @@ -11321,6 +11732,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -528695432i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSolarPanelBasicReinforced".into(), prefab_hash: -528695432i32, @@ -11344,6 +11756,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -364868685i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSolarPanelReinforced".into(), prefab_hash: -364868685i32, @@ -11367,6 +11780,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1293995736i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSolidGenerator".into(), prefab_hash: 1293995736i32, @@ -11390,6 +11804,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 969522478i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSorter".into(), prefab_hash: 969522478i32, @@ -11413,6 +11828,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -126038526i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSpeaker".into(), prefab_hash: -126038526i32, @@ -11436,6 +11852,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1013244511i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitStacker".into(), prefab_hash: 1013244511i32, @@ -11459,6 +11876,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 170878959i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitStairs".into(), prefab_hash: 170878959i32, @@ -11482,6 +11900,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1868555784i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitStairwell".into(), prefab_hash: -1868555784i32, @@ -11505,6 +11924,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2133035682i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitStandardChute".into(), prefab_hash: 2133035682i32, @@ -11528,6 +11948,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1821571150i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitStirlingEngine".into(), prefab_hash: -1821571150i32, @@ -11551,6 +11972,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1088892825i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSuitStorage".into(), prefab_hash: 1088892825i32, @@ -11574,6 +11996,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1361598922i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTables".into(), prefab_hash: -1361598922i32, @@ -11597,6 +12020,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 771439840i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTank".into(), prefab_hash: 771439840i32, @@ -11620,6 +12044,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1021053608i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTankInsulated".into(), prefab_hash: 1021053608i32, @@ -11643,6 +12068,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 529137748i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitToolManufactory".into(), prefab_hash: 529137748i32, @@ -11666,6 +12092,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -453039435i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTransformer".into(), prefab_hash: -453039435i32, @@ -11689,6 +12116,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 665194284i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTransformerSmall".into(), prefab_hash: 665194284i32, @@ -11712,6 +12140,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1590715731i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTurbineGenerator".into(), prefab_hash: -1590715731i32, @@ -11735,6 +12164,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1248429712i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTurboVolumePump".into(), prefab_hash: -1248429712i32, @@ -11758,6 +12188,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1798044015i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitUprightWindTurbine".into(), prefab_hash: -1798044015i32, @@ -11781,6 +12212,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2038384332i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitVendingMachine".into(), prefab_hash: -2038384332i32, @@ -11804,6 +12236,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1867508561i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitVendingMachineRefrigerated".into(), prefab_hash: -1867508561i32, @@ -11827,6 +12260,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1826855889i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWall".into(), prefab_hash: -1826855889i32, @@ -11850,6 +12284,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1625214531i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWallArch".into(), prefab_hash: 1625214531i32, @@ -11873,6 +12308,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -846838195i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWallFlat".into(), prefab_hash: -846838195i32, @@ -11896,6 +12332,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -784733231i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWallGeometry".into(), prefab_hash: -784733231i32, @@ -11919,6 +12356,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -524546923i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWallIron".into(), prefab_hash: -524546923i32, @@ -11942,6 +12380,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -821868990i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWallPadded".into(), prefab_hash: -821868990i32, @@ -11965,6 +12404,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 159886536i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWaterBottleFiller".into(), prefab_hash: 159886536i32, @@ -11988,6 +12428,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 611181283i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWaterPurifier".into(), prefab_hash: 611181283i32, @@ -12011,6 +12452,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 337505889i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWeatherStation".into(), prefab_hash: 337505889i32, @@ -12034,6 +12476,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -868916503i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWindTurbine".into(), prefab_hash: -868916503i32, @@ -12057,6 +12500,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1779979754i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWindowShutter".into(), prefab_hash: 1779979754i32, @@ -12080,6 +12524,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -743968726i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemLabeller".into(), prefab_hash: -743968726i32, @@ -12133,6 +12578,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 141535121i32, ItemCircuitHolderTemplate { + templateType: "ItemCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "ItemLaptop".into(), prefab_hash: 141535121i32, @@ -12208,6 +12654,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2134647745i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLeadIngot".into(), prefab_hash: 2134647745i32, @@ -12231,6 +12678,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -190236170i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLeadOre".into(), prefab_hash: -190236170i32, @@ -12255,6 +12703,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1949076595i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLightSword".into(), prefab_hash: 1949076595i32, @@ -12278,6 +12727,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -185207387i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidCanisterEmpty".into(), prefab_hash: -185207387i32, @@ -12306,6 +12756,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 777684475i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidCanisterSmart".into(), prefab_hash: 777684475i32, @@ -12334,6 +12785,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2036225202i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidDrain".into(), prefab_hash: 2036225202i32, @@ -12357,6 +12809,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 226055671i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidPipeAnalyzer".into(), prefab_hash: 226055671i32, @@ -12380,6 +12833,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -248475032i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidPipeHeater".into(), prefab_hash: -248475032i32, @@ -12404,6 +12858,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2126113312i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidPipeValve".into(), prefab_hash: -2126113312i32, @@ -12428,6 +12883,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2106280569i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidPipeVolumePump".into(), prefab_hash: -2106280569i32, @@ -12451,6 +12907,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2037427578i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidTankStorage".into(), prefab_hash: 2037427578i32, @@ -12475,6 +12932,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 240174650i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIAngleGrinder".into(), prefab_hash: 240174650i32, @@ -12528,6 +12986,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2061979347i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIArcWelder".into(), prefab_hash: -2061979347i32, @@ -12580,6 +13039,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1440775434i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMKIICrowbar".into(), prefab_hash: 1440775434i32, @@ -12604,6 +13064,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 324791548i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIDrill".into(), prefab_hash: 324791548i32, @@ -12657,6 +13118,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 388774906i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIDuctTape".into(), prefab_hash: 388774906i32, @@ -12681,6 +13143,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1875271296i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIMiningDrill".into(), prefab_hash: -1875271296i32, @@ -12740,6 +13203,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2015613246i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIScrewdriver".into(), prefab_hash: -2015613246i32, @@ -12764,6 +13228,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -178893251i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIWireCutters".into(), prefab_hash: -178893251i32, @@ -12788,6 +13253,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1862001680i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIWrench".into(), prefab_hash: 1862001680i32, @@ -12812,6 +13278,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1399098998i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemMarineBodyArmor".into(), prefab_hash: 1399098998i32, @@ -12842,6 +13309,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1073631646i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemMarineHelmet".into(), prefab_hash: 1073631646i32, @@ -12868,6 +13336,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1327248310i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMilk".into(), prefab_hash: 1327248310i32, @@ -12892,6 +13361,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1650383245i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemMiningBackPack".into(), prefab_hash: -1650383245i32, @@ -12937,6 +13407,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -676435305i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemMiningBelt".into(), prefab_hash: -676435305i32, @@ -12973,6 +13444,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1470787934i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMiningBeltMKII".into(), prefab_hash: 1470787934i32, @@ -13131,6 +13603,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 15829510i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMiningCharge".into(), prefab_hash: 15829510i32, @@ -13154,6 +13627,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1055173191i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMiningDrill".into(), prefab_hash: 1055173191i32, @@ -13213,6 +13687,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1663349918i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMiningDrillHeavy".into(), prefab_hash: -1663349918i32, @@ -13272,6 +13747,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1258187304i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemMiningDrillPneumatic".into(), prefab_hash: 1258187304i32, @@ -13300,6 +13776,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1467558064i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMkIIToolbelt".into(), prefab_hash: 1467558064i32, @@ -13434,6 +13911,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1864982322i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMuffin".into(), prefab_hash: -1864982322i32, @@ -13458,6 +13936,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2044798572i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMushroom".into(), prefab_hash: 2044798572i32, @@ -13482,6 +13961,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 982514123i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemNVG".into(), prefab_hash: 982514123i32, @@ -13534,6 +14014,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1406385572i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemNickelIngot".into(), prefab_hash: -1406385572i32, @@ -13557,6 +14038,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1830218956i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemNickelOre".into(), prefab_hash: 1830218956i32, @@ -13581,6 +14063,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1499471529i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemNitrice".into(), prefab_hash: -1499471529i32, @@ -13605,6 +14088,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1805394113i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemOxite".into(), prefab_hash: -1805394113i32, @@ -13629,6 +14113,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 238631271i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPassiveVent".into(), prefab_hash: 238631271i32, @@ -13653,6 +14138,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1397583760i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPassiveVentInsulated".into(), prefab_hash: -1397583760i32, @@ -13676,6 +14162,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2042955224i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPeaceLily".into(), prefab_hash: 2042955224i32, @@ -13700,6 +14187,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -913649823i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPickaxe".into(), prefab_hash: -913649823i32, @@ -13724,6 +14212,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1118069417i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPillHeal".into(), prefab_hash: 1118069417i32, @@ -13748,6 +14237,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 418958601i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPillStun".into(), prefab_hash: 418958601i32, @@ -13772,6 +14262,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -767597887i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeAnalyizer".into(), prefab_hash: -767597887i32, @@ -13796,6 +14287,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -38898376i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeCowl".into(), prefab_hash: -38898376i32, @@ -13820,6 +14312,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1532448832i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeDigitalValve".into(), prefab_hash: -1532448832i32, @@ -13844,6 +14337,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1134459463i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeGasMixer".into(), prefab_hash: -1134459463i32, @@ -13868,6 +14362,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1751627006i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeHeater".into(), prefab_hash: -1751627006i32, @@ -13892,6 +14387,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1366030599i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeIgniter".into(), prefab_hash: 1366030599i32, @@ -13915,6 +14411,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 391769637i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeLabel".into(), prefab_hash: 391769637i32, @@ -13939,6 +14436,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -906521320i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeLiquidRadiator".into(), prefab_hash: -906521320i32, @@ -13963,6 +14461,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1207939683i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeMeter".into(), prefab_hash: 1207939683i32, @@ -13987,6 +14486,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1796655088i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeRadiator".into(), prefab_hash: -1796655088i32, @@ -14011,6 +14511,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 799323450i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeValve".into(), prefab_hash: 799323450i32, @@ -14035,6 +14536,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1766301997i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeVolumePump".into(), prefab_hash: -1766301997i32, @@ -14059,6 +14561,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1108244510i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlainCake".into(), prefab_hash: -1108244510i32, @@ -14082,6 +14585,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1159179557i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantEndothermic_Creative".into(), prefab_hash: -1159179557i32, @@ -14105,6 +14609,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 851290561i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantEndothermic_Genepool1".into(), prefab_hash: 851290561i32, @@ -14129,6 +14634,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1414203269i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantEndothermic_Genepool2".into(), prefab_hash: -1414203269i32, @@ -14153,6 +14659,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 173023800i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemPlantSampler".into(), prefab_hash: 173023800i32, @@ -14211,6 +14718,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -532672323i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantSwitchGrass".into(), prefab_hash: -532672323i32, @@ -14234,6 +14742,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1208890208i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantThermogenic_Creative".into(), prefab_hash: -1208890208i32, @@ -14257,6 +14766,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -177792789i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantThermogenic_Genepool1".into(), prefab_hash: -177792789i32, @@ -14281,6 +14791,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1819167057i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantThermogenic_Genepool2".into(), prefab_hash: 1819167057i32, @@ -14305,6 +14816,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 662053345i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlasticSheets".into(), prefab_hash: 662053345i32, @@ -14328,6 +14840,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1929046963i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPotato".into(), prefab_hash: 1929046963i32, @@ -14352,6 +14865,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2111886401i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPotatoBaked".into(), prefab_hash: -2111886401i32, @@ -14375,6 +14889,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 839924019i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPowerConnector".into(), prefab_hash: 839924019i32, @@ -14399,6 +14914,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1277828144i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPumpkin".into(), prefab_hash: 1277828144i32, @@ -14423,6 +14939,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 62768076i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPumpkinPie".into(), prefab_hash: 62768076i32, @@ -14446,6 +14963,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1277979876i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPumpkinSoup".into(), prefab_hash: 1277979876i32, @@ -14470,6 +14988,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1616308158i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIce".into(), prefab_hash: -1616308158i32, @@ -14494,6 +15013,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1251009404i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceCarbonDioxide".into(), prefab_hash: -1251009404i32, @@ -14518,6 +15038,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 944530361i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceHydrogen".into(), prefab_hash: 944530361i32, @@ -14542,6 +15063,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1715945725i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidCarbonDioxide".into(), prefab_hash: -1715945725i32, @@ -14566,6 +15088,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1044933269i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidHydrogen".into(), prefab_hash: -1044933269i32, @@ -14590,6 +15113,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1674576569i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidNitrogen".into(), prefab_hash: 1674576569i32, @@ -14614,6 +15138,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1428477399i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidNitrous".into(), prefab_hash: 1428477399i32, @@ -14638,6 +15163,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 541621589i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidOxygen".into(), prefab_hash: 541621589i32, @@ -14662,6 +15188,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1748926678i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidPollutant".into(), prefab_hash: -1748926678i32, @@ -14686,6 +15213,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1306628937i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidVolatiles".into(), prefab_hash: -1306628937i32, @@ -14710,6 +15238,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1708395413i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceNitrogen".into(), prefab_hash: -1708395413i32, @@ -14734,6 +15263,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 386754635i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceNitrous".into(), prefab_hash: 386754635i32, @@ -14758,6 +15288,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1150448260i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceOxygen".into(), prefab_hash: -1150448260i32, @@ -14782,6 +15313,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1755356i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIcePollutant".into(), prefab_hash: -1755356i32, @@ -14806,6 +15338,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2073202179i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIcePollutedWater".into(), prefab_hash: -2073202179i32, @@ -14830,6 +15363,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -874791066i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceSteam".into(), prefab_hash: -874791066i32, @@ -14854,6 +15388,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -633723719i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceVolatiles".into(), prefab_hash: -633723719i32, @@ -14878,6 +15413,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 495305053i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRTG".into(), prefab_hash: 495305053i32, @@ -14902,6 +15438,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1817645803i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRTGSurvival".into(), prefab_hash: 1817645803i32, @@ -14926,6 +15463,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1641500434i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemReagentMix".into(), prefab_hash: -1641500434i32, @@ -14950,6 +15488,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 678483886i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemRemoteDetonator".into(), prefab_hash: 678483886i32, @@ -15002,6 +15541,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1773192190i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemReusableFireExtinguisher".into(), prefab_hash: -1773192190i32, @@ -15032,6 +15572,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 658916791i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRice".into(), prefab_hash: 658916791i32, @@ -15056,6 +15597,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 871811564i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRoadFlare".into(), prefab_hash: 871811564i32, @@ -15080,6 +15622,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2109945337i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHead".into(), prefab_hash: 2109945337i32, @@ -15104,6 +15647,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1530764483i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHeadDurable".into(), prefab_hash: 1530764483i32, @@ -15127,6 +15671,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 653461728i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHeadHighSpeedIce".into(), prefab_hash: 653461728i32, @@ -15150,6 +15695,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1440678625i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHeadHighSpeedMineral".into(), prefab_hash: 1440678625i32, @@ -15173,6 +15719,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -380904592i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHeadIce".into(), prefab_hash: -380904592i32, @@ -15196,6 +15743,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -684020753i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHeadLongTerm".into(), prefab_hash: -684020753i32, @@ -15219,6 +15767,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1083675581i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHeadMineral".into(), prefab_hash: 1083675581i32, @@ -15242,6 +15791,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1198702771i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketScanningHead".into(), prefab_hash: -1198702771i32, @@ -15265,6 +15815,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1661270830i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemScanner".into(), prefab_hash: 1661270830i32, @@ -15289,6 +15840,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 687940869i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemScrewdriver".into(), prefab_hash: 687940869i32, @@ -15313,6 +15865,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1981101032i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSecurityCamera".into(), prefab_hash: -1981101032i32, @@ -15337,6 +15890,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1176140051i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemSensorLenses".into(), prefab_hash: -1176140051i32, @@ -15400,6 +15954,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1154200014i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSensorProcessingUnitCelestialScanner".into(), prefab_hash: -1154200014i32, @@ -15423,6 +15978,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1730464583i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSensorProcessingUnitMesonScanner".into(), prefab_hash: -1730464583i32, @@ -15447,6 +16003,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1219128491i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSensorProcessingUnitOreScanner".into(), prefab_hash: -1219128491i32, @@ -15471,6 +16028,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -290196476i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSiliconIngot".into(), prefab_hash: -290196476i32, @@ -15494,6 +16052,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1103972403i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSiliconOre".into(), prefab_hash: 1103972403i32, @@ -15518,6 +16077,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -929742000i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSilverIngot".into(), prefab_hash: -929742000i32, @@ -15541,6 +16101,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -916518678i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSilverOre".into(), prefab_hash: -916518678i32, @@ -15565,6 +16126,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -82508479i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSolderIngot".into(), prefab_hash: -82508479i32, @@ -15588,6 +16150,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -365253871i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSolidFuel".into(), prefab_hash: -365253871i32, @@ -15611,6 +16174,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1883441704i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSoundCartridgeBass".into(), prefab_hash: -1883441704i32, @@ -15634,6 +16198,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1901500508i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSoundCartridgeDrums".into(), prefab_hash: -1901500508i32, @@ -15657,6 +16222,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1174735962i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSoundCartridgeLeads".into(), prefab_hash: -1174735962i32, @@ -15680,6 +16246,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1971419310i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSoundCartridgeSynth".into(), prefab_hash: -1971419310i32, @@ -15703,6 +16270,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1387403148i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSoyOil".into(), prefab_hash: 1387403148i32, @@ -15726,6 +16294,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1924673028i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSoybean".into(), prefab_hash: 1924673028i32, @@ -15750,6 +16319,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1737666461i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSpaceCleaner".into(), prefab_hash: -1737666461i32, @@ -15774,6 +16344,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 714830451i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemSpaceHelmet".into(), prefab_hash: 714830451i32, @@ -15838,6 +16409,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 675686937i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSpaceIce".into(), prefab_hash: 675686937i32, @@ -15861,6 +16433,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2131916219i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSpaceOre".into(), prefab_hash: 2131916219i32, @@ -15885,6 +16458,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1260618380i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemSpacepack".into(), prefab_hash: -1260618380i32, @@ -16010,6 +16584,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -688107795i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanBlack".into(), prefab_hash: -688107795i32, @@ -16034,6 +16609,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -498464883i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanBlue".into(), prefab_hash: -498464883i32, @@ -16058,6 +16634,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 845176977i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanBrown".into(), prefab_hash: 845176977i32, @@ -16082,6 +16659,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1880941852i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanGreen".into(), prefab_hash: -1880941852i32, @@ -16106,6 +16684,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1645266981i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanGrey".into(), prefab_hash: -1645266981i32, @@ -16130,6 +16709,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1918456047i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanKhaki".into(), prefab_hash: 1918456047i32, @@ -16154,6 +16734,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -158007629i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanOrange".into(), prefab_hash: -158007629i32, @@ -16178,6 +16759,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1344257263i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanPink".into(), prefab_hash: 1344257263i32, @@ -16202,6 +16784,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 30686509i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanPurple".into(), prefab_hash: 30686509i32, @@ -16226,6 +16809,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1514393921i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanRed".into(), prefab_hash: 1514393921i32, @@ -16250,6 +16834,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 498481505i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanWhite".into(), prefab_hash: 498481505i32, @@ -16274,6 +16859,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 995468116i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanYellow".into(), prefab_hash: 995468116i32, @@ -16298,6 +16884,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1289723966i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemSprayGun".into(), prefab_hash: 1289723966i32, @@ -16325,6 +16912,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1448105779i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSteelFrames".into(), prefab_hash: -1448105779i32, @@ -16349,6 +16937,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -654790771i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSteelIngot".into(), prefab_hash: -654790771i32, @@ -16373,6 +16962,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 38555961i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSteelSheets".into(), prefab_hash: 38555961i32, @@ -16397,6 +16987,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2038663432i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemStelliteGlassSheets".into(), prefab_hash: -2038663432i32, @@ -16420,6 +17011,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1897868623i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemStelliteIngot".into(), prefab_hash: -1897868623i32, @@ -16443,6 +17035,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2111910840i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSugar".into(), prefab_hash: 2111910840i32, @@ -16466,6 +17059,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1335056202i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSugarCane".into(), prefab_hash: -1335056202i32, @@ -16489,6 +17083,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1274308304i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSuitModCryogenicUpgrade".into(), prefab_hash: -1274308304i32, @@ -16513,6 +17108,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -229808600i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemTablet".into(), prefab_hash: -229808600i32, @@ -16575,6 +17171,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 111280987i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemTerrainManipulator".into(), prefab_hash: 111280987i32, @@ -16642,6 +17239,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -998592080i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemTomato".into(), prefab_hash: -998592080i32, @@ -16666,6 +17264,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 688734890i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemTomatoSoup".into(), prefab_hash: 688734890i32, @@ -16690,6 +17289,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -355127880i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemToolBelt".into(), prefab_hash: -355127880i32, @@ -16724,6 +17324,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -800947386i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemTropicalPlant".into(), prefab_hash: -800947386i32, @@ -16748,6 +17349,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1516581844i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemUraniumOre".into(), prefab_hash: -1516581844i32, @@ -16772,6 +17374,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1253102035i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemVolatiles".into(), prefab_hash: 1253102035i32, @@ -16796,6 +17399,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1567752627i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWallCooler".into(), prefab_hash: -1567752627i32, @@ -16820,6 +17424,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1880134612i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWallHeater".into(), prefab_hash: 1880134612i32, @@ -16844,6 +17449,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1108423476i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWallLight".into(), prefab_hash: 1108423476i32, @@ -16868,6 +17474,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 156348098i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWaspaloyIngot".into(), prefab_hash: 156348098i32, @@ -16891,6 +17498,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 107741229i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWaterBottle".into(), prefab_hash: 107741229i32, @@ -16915,6 +17523,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 309693520i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWaterPipeDigitalValve".into(), prefab_hash: 309693520i32, @@ -16938,6 +17547,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -90898877i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWaterPipeMeter".into(), prefab_hash: -90898877i32, @@ -16961,6 +17571,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1721846327i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWaterWallCooler".into(), prefab_hash: -1721846327i32, @@ -16984,6 +17595,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -598730959i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemWearLamp".into(), prefab_hash: -598730959i32, @@ -17036,6 +17648,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2066892079i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemWeldingTorch".into(), prefab_hash: -2066892079i32, @@ -17068,6 +17681,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1057658015i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWheat".into(), prefab_hash: -1057658015i32, @@ -17092,6 +17706,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1535854074i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWireCutters".into(), prefab_hash: 1535854074i32, @@ -17116,6 +17731,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -504717121i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemWirelessBatteryCellExtraLarge".into(), prefab_hash: -504717121i32, @@ -17162,6 +17778,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1826023284i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageAirConditioner1".into(), prefab_hash: -1826023284i32, @@ -17185,6 +17802,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 169888054i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageAirConditioner2".into(), prefab_hash: 169888054i32, @@ -17208,6 +17826,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -310178617i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageHydroponicsTray1".into(), prefab_hash: -310178617i32, @@ -17231,6 +17850,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -997763i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageLargeExtendableRadiator01".into(), prefab_hash: -997763i32, @@ -17254,6 +17874,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 391453348i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureRTG1".into(), prefab_hash: 391453348i32, @@ -17277,6 +17898,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -834664349i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation001".into(), prefab_hash: -834664349i32, @@ -17300,6 +17922,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1464424921i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation002".into(), prefab_hash: 1464424921i32, @@ -17323,6 +17946,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 542009679i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation003".into(), prefab_hash: 542009679i32, @@ -17346,6 +17970,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1104478996i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation004".into(), prefab_hash: -1104478996i32, @@ -17369,6 +17994,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -919745414i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation005".into(), prefab_hash: -919745414i32, @@ -17392,6 +18018,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1344576960i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation006".into(), prefab_hash: 1344576960i32, @@ -17415,6 +18042,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 656649558i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation007".into(), prefab_hash: 656649558i32, @@ -17438,6 +18066,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1214467897i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation008".into(), prefab_hash: -1214467897i32, @@ -17461,6 +18090,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1662394403i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageTurbineGenerator1".into(), prefab_hash: -1662394403i32, @@ -17484,6 +18114,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 98602599i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageTurbineGenerator2".into(), prefab_hash: 98602599i32, @@ -17507,6 +18138,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1927790321i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageTurbineGenerator3".into(), prefab_hash: 1927790321i32, @@ -17530,6 +18162,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1682930158i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageWallCooler1".into(), prefab_hash: -1682930158i32, @@ -17553,6 +18186,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 45733800i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageWallCooler2".into(), prefab_hash: 45733800i32, @@ -17576,6 +18210,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1886261558i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWrench".into(), prefab_hash: -1886261558i32, @@ -17600,6 +18235,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1932952652i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "KitSDBSilo".into(), prefab_hash: 1932952652i32, @@ -17624,6 +18260,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 231903234i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "KitStructureCombustionCentrifuge".into(), prefab_hash: 231903234i32, @@ -17647,6 +18284,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1427415566i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "KitchenTableShort".into(), prefab_hash: -1427415566i32, @@ -17662,6 +18300,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -78099334i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "KitchenTableSimpleShort".into(), prefab_hash: -78099334i32, @@ -17677,6 +18316,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1068629349i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "KitchenTableSimpleTall".into(), prefab_hash: -1068629349i32, @@ -17692,6 +18332,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1386237782i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "KitchenTableTall".into(), prefab_hash: -1386237782i32, @@ -17707,6 +18348,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1605130615i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "Lander".into(), prefab_hash: 1605130615i32, @@ -17741,6 +18383,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1295222317i32, StructureLogicTemplate { + templateType: "StructureLogic".into(), prefab: PrefabInfo { prefab_name: "Landingpad_2x2CenterPiece01".into(), prefab_hash: -1295222317i32, @@ -17766,6 +18409,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 912453390i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_BlankPiece".into(), prefab_hash: 912453390i32, @@ -17781,6 +18425,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1070143159i32, StructureLogicTemplate { + templateType: "StructureLogic".into(), prefab: PrefabInfo { prefab_name: "Landingpad_CenterPiece01".into(), prefab_hash: 1070143159i32, @@ -17814,6 +18459,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1101296153i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_CrossPiece".into(), prefab_hash: 1101296153i32, @@ -17830,6 +18476,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2066405918i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "Landingpad_DataConnectionPiece".into(), prefab_hash: -2066405918i32, @@ -17916,6 +18563,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 977899131i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_DiagonalPiece01".into(), prefab_hash: 977899131i32, @@ -17932,6 +18580,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 817945707i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "Landingpad_GasConnectorInwardPiece".into(), prefab_hash: 817945707i32, @@ -18007,6 +18656,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1100218307i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "Landingpad_GasConnectorOutwardPiece".into(), prefab_hash: -1100218307i32, @@ -18083,6 +18733,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 170818567i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_GasCylinderTankPiece".into(), prefab_hash: 170818567i32, @@ -18099,6 +18750,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1216167727i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "Landingpad_LiquidConnectorInwardPiece".into(), prefab_hash: -1216167727i32, @@ -18174,6 +18826,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1788929869i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "Landingpad_LiquidConnectorOutwardPiece".into(), prefab_hash: -1788929869i32, @@ -18250,6 +18903,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -976273247i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_StraightPiece01".into(), prefab_hash: -976273247i32, @@ -18266,6 +18920,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1872345847i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_TaxiPieceCorner".into(), prefab_hash: -1872345847i32, @@ -18281,6 +18936,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 146051619i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_TaxiPieceHold".into(), prefab_hash: 146051619i32, @@ -18296,6 +18952,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1477941080i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_TaxiPieceStraight".into(), prefab_hash: -1477941080i32, @@ -18311,6 +18968,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1514298582i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "Landingpad_ThreshholdPiece".into(), prefab_hash: -1514298582i32, @@ -18364,6 +19022,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1531272458i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "LogicStepSequencer8".into(), prefab_hash: 1531272458i32, @@ -18443,6 +19102,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -99064335i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "Meteorite".into(), prefab_hash: -99064335i32, @@ -18466,6 +19126,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1667675295i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MonsterEgg".into(), prefab_hash: -1667675295i32, @@ -18489,6 +19150,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -337075633i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MotherboardComms".into(), prefab_hash: -337075633i32, @@ -18513,6 +19175,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 502555944i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MotherboardLogic".into(), prefab_hash: 502555944i32, @@ -18537,6 +19200,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -127121474i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MotherboardMissionControl".into(), prefab_hash: -127121474i32, @@ -18560,6 +19224,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -161107071i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MotherboardProgrammableChip".into(), prefab_hash: -161107071i32, @@ -18584,6 +19249,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -806986392i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MotherboardRockets".into(), prefab_hash: -806986392i32, @@ -18607,6 +19273,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1908268220i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MotherboardSorter".into(), prefab_hash: -1908268220i32, @@ -18631,6 +19298,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1930442922i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MothershipCore".into(), prefab_hash: -1930442922i32, @@ -18655,6 +19323,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 155856647i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "NpcChick".into(), prefab_hash: 155856647i32, @@ -18687,6 +19356,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 399074198i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "NpcChicken".into(), prefab_hash: 399074198i32, @@ -18719,6 +19389,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 248893646i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "PassiveSpeaker".into(), prefab_hash: 248893646i32, @@ -18768,6 +19439,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 443947415i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "PipeBenderMod".into(), prefab_hash: 443947415i32, @@ -18792,6 +19464,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1958705204i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "PortableComposter".into(), prefab_hash: -1958705204i32, @@ -18824,6 +19497,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2043318949i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "PortableSolarPanel".into(), prefab_hash: 2043318949i32, @@ -18875,6 +19549,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 399661231i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "RailingElegant01".into(), prefab_hash: 399661231i32, @@ -18890,6 +19565,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1898247915i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "RailingElegant02".into(), prefab_hash: -1898247915i32, @@ -18905,6 +19581,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2072792175i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "RailingIndustrial02".into(), prefab_hash: -2072792175i32, @@ -18920,6 +19597,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 980054869i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ReagentColorBlue".into(), prefab_hash: 980054869i32, @@ -18943,6 +19621,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 120807542i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ReagentColorGreen".into(), prefab_hash: 120807542i32, @@ -18966,6 +19645,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -400696159i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ReagentColorOrange".into(), prefab_hash: -400696159i32, @@ -18991,6 +19671,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1998377961i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ReagentColorRed".into(), prefab_hash: 1998377961i32, @@ -19014,6 +19695,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 635208006i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ReagentColorYellow".into(), prefab_hash: 635208006i32, @@ -19039,6 +19721,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -788672929i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "RespawnPoint".into(), prefab_hash: -788672929i32, @@ -19055,6 +19738,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -491247370i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "RespawnPointWallMounted".into(), prefab_hash: -491247370i32, @@ -19070,6 +19754,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 434786784i32, ItemCircuitHolderTemplate { + templateType: "ItemCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "Robot".into(), prefab_hash: 434786784i32, @@ -19220,6 +19905,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 350726273i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "RoverCargo".into(), prefab_hash: 350726273i32, @@ -19426,6 +20112,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2049946335i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "Rover_MkI".into(), prefab_hash: -2049946335i32, @@ -19584,6 +20271,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 861674123i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Rover_MkI_build_states".into(), prefab_hash: 861674123i32, @@ -19599,6 +20287,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -256607540i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SMGMagazine".into(), prefab_hash: -256607540i32, @@ -19622,6 +20311,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1139887531i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Cocoa".into(), prefab_hash: 1139887531i32, @@ -19645,6 +20335,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1290755415i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Corn".into(), prefab_hash: -1290755415i32, @@ -19669,6 +20360,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1990600883i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Fern".into(), prefab_hash: -1990600883i32, @@ -19693,6 +20385,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 311593418i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Mushroom".into(), prefab_hash: 311593418i32, @@ -19717,6 +20410,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1005571172i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Potato".into(), prefab_hash: 1005571172i32, @@ -19741,6 +20435,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1423199840i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Pumpkin".into(), prefab_hash: 1423199840i32, @@ -19765,6 +20460,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1691151239i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Rice".into(), prefab_hash: -1691151239i32, @@ -19789,6 +20485,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1783004244i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Soybean".into(), prefab_hash: 1783004244i32, @@ -19813,6 +20510,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1884103228i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_SugarCane".into(), prefab_hash: -1884103228i32, @@ -19836,6 +20534,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 488360169i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Switchgrass".into(), prefab_hash: 488360169i32, @@ -19859,6 +20558,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1922066841i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Tomato".into(), prefab_hash: -1922066841i32, @@ -19883,6 +20583,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -654756733i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Wheet".into(), prefab_hash: -654756733i32, @@ -19907,6 +20608,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1991297271i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "SpaceShuttle".into(), prefab_hash: -1991297271i32, @@ -19938,6 +20640,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1527229051i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StopWatch".into(), prefab_hash: -1527229051i32, @@ -19989,6 +20692,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1298920475i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAccessBridge".into(), prefab_hash: 1298920475i32, @@ -20041,6 +20745,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1129453144i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureActiveVent".into(), prefab_hash: -1129453144i32, @@ -20116,6 +20821,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 446212963i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAdvancedComposter".into(), prefab_hash: 446212963i32, @@ -20194,6 +20900,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 545937711i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAdvancedFurnace".into(), prefab_hash: 545937711i32, @@ -20300,6 +21007,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -463037670i32, StructureLogicDeviceConsumerMemoryTemplate { + templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureAdvancedPackagingMachine".into(), prefab_hash: -463037670i32, @@ -20820,6 +21528,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2087593337i32, StructureCircuitHolderTemplate { + templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureAirConditioner".into(), prefab_hash: -2087593337i32, @@ -20951,6 +21660,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2105052344i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAirlock".into(), prefab_hash: -2105052344i32, @@ -21009,6 +21719,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1736080881i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAirlockGate".into(), prefab_hash: 1736080881i32, @@ -21066,6 +21777,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1811979158i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAngledBench".into(), prefab_hash: 1811979158i32, @@ -21121,6 +21833,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -247344692i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureArcFurnace".into(), prefab_hash: -247344692i32, @@ -21206,6 +21919,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1999523701i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAreaPowerControl".into(), prefab_hash: 1999523701i32, @@ -21298,6 +22012,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1032513487i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAreaPowerControlReversed".into(), prefab_hash: -1032513487i32, @@ -21390,6 +22105,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 7274344i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAutoMinerSmall".into(), prefab_hash: 7274344i32, @@ -21458,6 +22174,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 336213101i32, StructureLogicDeviceConsumerMemoryTemplate { + templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureAutolathe".into(), prefab_hash: 336213101i32, @@ -22374,6 +23091,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1672404896i32, StructureLogicDeviceConsumerMemoryTemplate { + templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureAutomatedOven".into(), prefab_hash: -1672404896i32, @@ -22956,6 +23674,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2099900163i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBackLiquidPressureRegulator".into(), prefab_hash: 2099900163i32, @@ -23012,6 +23731,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1149857558i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBackPressureRegulator".into(), prefab_hash: -1149857558i32, @@ -23067,6 +23787,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1613497288i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBasketHoop".into(), prefab_hash: -1613497288i32, @@ -23118,6 +23839,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -400115994i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBattery".into(), prefab_hash: -400115994i32, @@ -23182,6 +23904,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1945930022i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBatteryCharger".into(), prefab_hash: 1945930022i32, @@ -23296,6 +24019,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -761772413i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBatteryChargerSmall".into(), prefab_hash: -761772413i32, @@ -23375,6 +24099,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1388288459i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBatteryLarge".into(), prefab_hash: -1388288459i32, @@ -23439,6 +24164,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1125305264i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBatteryMedium".into(), prefab_hash: -1125305264i32, @@ -23503,6 +24229,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2123455080i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBatterySmall".into(), prefab_hash: -2123455080i32, @@ -23567,6 +24294,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -188177083i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBeacon".into(), prefab_hash: -188177083i32, @@ -23618,6 +24346,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2042448192i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBench".into(), prefab_hash: -2042448192i32, @@ -23696,6 +24425,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 406745009i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBench1".into(), prefab_hash: 406745009i32, @@ -23773,6 +24503,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2127086069i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBench2".into(), prefab_hash: -2127086069i32, @@ -23850,6 +24581,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -164622691i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBench3".into(), prefab_hash: -164622691i32, @@ -23927,6 +24659,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1750375230i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBench4".into(), prefab_hash: 1750375230i32, @@ -24004,6 +24737,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 337416191i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBlastDoor".into(), prefab_hash: 337416191i32, @@ -24062,6 +24796,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 697908419i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBlockBed".into(), prefab_hash: 697908419i32, @@ -24126,6 +24861,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 378084505i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureBlocker".into(), prefab_hash: 378084505i32, @@ -24141,6 +24877,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1036015121i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCableAnalysizer".into(), prefab_hash: 1036015121i32, @@ -24190,6 +24927,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -889269388i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner".into(), prefab_hash: -889269388i32, @@ -24206,6 +24944,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 980469101i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner3".into(), prefab_hash: 980469101i32, @@ -24222,6 +24961,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 318437449i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner3Burnt".into(), prefab_hash: 318437449i32, @@ -24237,6 +24977,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2393826i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner3HBurnt".into(), prefab_hash: 2393826i32, @@ -24252,6 +24993,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1542172466i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner4".into(), prefab_hash: -1542172466i32, @@ -24267,6 +25009,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 268421361i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner4Burnt".into(), prefab_hash: 268421361i32, @@ -24282,6 +25025,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -981223316i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner4HBurnt".into(), prefab_hash: -981223316i32, @@ -24297,6 +25041,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -177220914i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCornerBurnt".into(), prefab_hash: -177220914i32, @@ -24312,6 +25057,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -39359015i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCornerH".into(), prefab_hash: -39359015i32, @@ -24327,6 +25073,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1843379322i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCornerH3".into(), prefab_hash: -1843379322i32, @@ -24342,6 +25089,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 205837861i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCornerH4".into(), prefab_hash: 205837861i32, @@ -24357,6 +25105,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1931412811i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCornerHBurnt".into(), prefab_hash: 1931412811i32, @@ -24372,6 +25121,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 281380789i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCableFuse100k".into(), prefab_hash: 281380789i32, @@ -24413,6 +25163,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1103727120i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCableFuse1k".into(), prefab_hash: -1103727120i32, @@ -24454,6 +25205,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -349716617i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCableFuse50k".into(), prefab_hash: -349716617i32, @@ -24495,6 +25247,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -631590668i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCableFuse5k".into(), prefab_hash: -631590668i32, @@ -24536,6 +25289,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -175342021i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction".into(), prefab_hash: -175342021i32, @@ -24552,6 +25306,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1112047202i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction4".into(), prefab_hash: 1112047202i32, @@ -24568,6 +25323,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1756896811i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction4Burnt".into(), prefab_hash: -1756896811i32, @@ -24583,6 +25339,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -115809132i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction4HBurnt".into(), prefab_hash: -115809132i32, @@ -24598,6 +25355,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 894390004i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction5".into(), prefab_hash: 894390004i32, @@ -24613,6 +25371,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1545286256i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction5Burnt".into(), prefab_hash: 1545286256i32, @@ -24628,6 +25387,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1404690610i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction6".into(), prefab_hash: -1404690610i32, @@ -24644,6 +25404,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -628145954i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction6Burnt".into(), prefab_hash: -628145954i32, @@ -24659,6 +25420,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1854404029i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction6HBurnt".into(), prefab_hash: 1854404029i32, @@ -24674,6 +25436,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1620686196i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionBurnt".into(), prefab_hash: -1620686196i32, @@ -24689,6 +25452,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 469451637i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionH".into(), prefab_hash: 469451637i32, @@ -24704,6 +25468,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -742234680i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionH4".into(), prefab_hash: -742234680i32, @@ -24719,6 +25484,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1530571426i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionH5".into(), prefab_hash: -1530571426i32, @@ -24734,6 +25500,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1701593300i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionH5Burnt".into(), prefab_hash: 1701593300i32, @@ -24749,6 +25516,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1036780772i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionH6".into(), prefab_hash: 1036780772i32, @@ -24764,6 +25532,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -341365649i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionHBurnt".into(), prefab_hash: -341365649i32, @@ -24779,6 +25548,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 605357050i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableStraight".into(), prefab_hash: 605357050i32, @@ -24795,6 +25565,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1196981113i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableStraightBurnt".into(), prefab_hash: -1196981113i32, @@ -24810,6 +25581,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -146200530i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableStraightH".into(), prefab_hash: -146200530i32, @@ -24825,6 +25597,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2085762089i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableStraightHBurnt".into(), prefab_hash: 2085762089i32, @@ -24840,6 +25613,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -342072665i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCamera".into(), prefab_hash: -342072665i32, @@ -24893,6 +25667,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1385712131i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCapsuleTankGas".into(), prefab_hash: -1385712131i32, @@ -24967,6 +25742,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1415396263i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCapsuleTankLiquid".into(), prefab_hash: 1415396263i32, @@ -25041,6 +25817,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1151864003i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCargoStorageMedium".into(), prefab_hash: 1151864003i32, @@ -25247,6 +26024,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1493672123i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCargoStorageSmall".into(), prefab_hash: -1493672123i32, @@ -25768,6 +26546,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 690945935i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCentrifuge".into(), prefab_hash: 690945935i32, @@ -25836,6 +26615,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1167659360i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChair".into(), prefab_hash: 1167659360i32, @@ -25892,6 +26672,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1944858936i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairBacklessDouble".into(), prefab_hash: 1944858936i32, @@ -25947,6 +26728,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1672275150i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairBacklessSingle".into(), prefab_hash: 1672275150i32, @@ -26002,6 +26784,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -367720198i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairBoothCornerLeft".into(), prefab_hash: -367720198i32, @@ -26057,6 +26840,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1640720378i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairBoothMiddle".into(), prefab_hash: 1640720378i32, @@ -26112,6 +26896,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1152812099i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairRectangleDouble".into(), prefab_hash: -1152812099i32, @@ -26167,6 +26952,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1425428917i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairRectangleSingle".into(), prefab_hash: -1425428917i32, @@ -26222,6 +27008,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1245724402i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairThickDouble".into(), prefab_hash: -1245724402i32, @@ -26277,6 +27064,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1510009608i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairThickSingle".into(), prefab_hash: -1510009608i32, @@ -26332,6 +27120,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -850484480i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteBin".into(), prefab_hash: -850484480i32, @@ -26399,6 +27188,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1360330136i32, StructureSlotsTemplate { + templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteCorner".into(), prefab_hash: 1360330136i32, @@ -26418,6 +27208,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -810874728i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteDigitalFlipFlopSplitterLeft".into(), prefab_hash: -810874728i32, @@ -26494,6 +27285,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 163728359i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteDigitalFlipFlopSplitterRight".into(), prefab_hash: 163728359i32, @@ -26570,6 +27362,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 648608238i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteDigitalValveLeft".into(), prefab_hash: 648608238i32, @@ -26639,6 +27432,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1337091041i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteDigitalValveRight".into(), prefab_hash: -1337091041i32, @@ -26708,6 +27502,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1446854725i32, StructureSlotsTemplate { + templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteFlipFlopSplitter".into(), prefab_hash: -1446854725i32, @@ -26726,6 +27521,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1469588766i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteInlet".into(), prefab_hash: -1469588766i32, @@ -26790,6 +27586,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -611232514i32, StructureSlotsTemplate { + templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteJunction".into(), prefab_hash: -611232514i32, @@ -26809,6 +27606,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1022714809i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteOutlet".into(), prefab_hash: -1022714809i32, @@ -26874,6 +27672,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 225377225i32, StructureSlotsTemplate { + templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteOverflow".into(), prefab_hash: 225377225i32, @@ -26893,6 +27692,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 168307007i32, StructureSlotsTemplate { + templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteStraight".into(), prefab_hash: 168307007i32, @@ -26912,6 +27712,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1918892177i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteUmbilicalFemale".into(), prefab_hash: -1918892177i32, @@ -26972,6 +27773,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -659093969i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteUmbilicalFemaleSide".into(), prefab_hash: -659093969i32, @@ -27032,6 +27834,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -958884053i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteUmbilicalMale".into(), prefab_hash: -958884053i32, @@ -27105,6 +27908,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 434875271i32, StructureSlotsTemplate { + templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteValve".into(), prefab_hash: 434875271i32, @@ -27124,6 +27928,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -607241919i32, StructureSlotsTemplate { + templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteWindow".into(), prefab_hash: -607241919i32, @@ -27143,6 +27948,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -128473777i32, StructureCircuitHolderTemplate { + templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureCircuitHousing".into(), prefab_hash: -128473777i32, @@ -27213,6 +28019,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1238905683i32, StructureCircuitHolderTemplate { + templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureCombustionCentrifuge".into(), prefab_hash: 1238905683i32, @@ -27346,6 +28153,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1513030150i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngled".into(), prefab_hash: -1513030150i32, @@ -27361,6 +28169,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -69685069i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCorner".into(), prefab_hash: -69685069i32, @@ -27376,6 +28185,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1841871763i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCornerInner".into(), prefab_hash: -1841871763i32, @@ -27391,6 +28201,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1417912632i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCornerInnerLong".into(), prefab_hash: -1417912632i32, @@ -27406,6 +28217,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 947705066i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCornerInnerLongL".into(), prefab_hash: 947705066i32, @@ -27421,6 +28233,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1032590967i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCornerInnerLongR".into(), prefab_hash: -1032590967i32, @@ -27436,6 +28249,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 850558385i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCornerLong".into(), prefab_hash: 850558385i32, @@ -27451,6 +28265,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -348918222i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCornerLongR".into(), prefab_hash: -348918222i32, @@ -27466,6 +28281,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -387546514i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledLong".into(), prefab_hash: -387546514i32, @@ -27481,6 +28297,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 212919006i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingCylindrical".into(), prefab_hash: 212919006i32, @@ -27496,6 +28313,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1077151132i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingCylindricalPanel".into(), prefab_hash: 1077151132i32, @@ -27511,6 +28329,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1997436771i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingPanel".into(), prefab_hash: 1997436771i32, @@ -27526,6 +28345,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -259357734i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingRounded".into(), prefab_hash: -259357734i32, @@ -27541,6 +28361,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1951525046i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingRoundedCorner".into(), prefab_hash: 1951525046i32, @@ -27556,6 +28377,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 110184667i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingRoundedCornerInner".into(), prefab_hash: 110184667i32, @@ -27571,6 +28393,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 139107321i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingSpherical".into(), prefab_hash: 139107321i32, @@ -27586,6 +28409,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 534213209i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingSphericalCap".into(), prefab_hash: 534213209i32, @@ -27601,6 +28425,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1751355139i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingSphericalCorner".into(), prefab_hash: 1751355139i32, @@ -27616,6 +28441,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -793837322i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeDoor".into(), prefab_hash: -793837322i32, @@ -27674,6 +28500,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 324868581i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeFloorGrating".into(), prefab_hash: 324868581i32, @@ -27690,6 +28517,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -895027741i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeFloorGrating2".into(), prefab_hash: -895027741i32, @@ -27705,6 +28533,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1113471627i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeFloorGrating3".into(), prefab_hash: -1113471627i32, @@ -27720,6 +28549,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 600133846i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeFloorGrating4".into(), prefab_hash: 600133846i32, @@ -27735,6 +28565,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2109695912i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeFloorGratingOpen".into(), prefab_hash: 2109695912i32, @@ -27750,6 +28581,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 882307910i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeFloorGratingOpenRotated".into(), prefab_hash: 882307910i32, @@ -27765,6 +28597,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1237302061i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeWall".into(), prefab_hash: 1237302061i32, @@ -27781,6 +28614,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 718343384i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeWall02".into(), prefab_hash: 718343384i32, @@ -27796,6 +28630,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1574321230i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeWall03".into(), prefab_hash: 1574321230i32, @@ -27811,6 +28646,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1011701267i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeWall04".into(), prefab_hash: -1011701267i32, @@ -27826,6 +28662,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2060571986i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeWindow".into(), prefab_hash: -2060571986i32, @@ -27842,6 +28679,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -688284639i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeWindowIron".into(), prefab_hash: -688284639i32, @@ -27857,6 +28695,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -626563514i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureComputer".into(), prefab_hash: -626563514i32, @@ -27921,6 +28760,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1420719315i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCondensationChamber".into(), prefab_hash: 1420719315i32, @@ -28002,6 +28842,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -965741795i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCondensationValve".into(), prefab_hash: -965741795i32, @@ -28053,6 +28894,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 235638270i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureConsole".into(), prefab_hash: 235638270i32, @@ -28115,6 +28957,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -722284333i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureConsoleDual".into(), prefab_hash: -722284333i32, @@ -28178,6 +29021,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -53151617i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureConsoleLED1x2".into(), prefab_hash: -53151617i32, @@ -28236,6 +29080,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1949054743i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureConsoleLED1x3".into(), prefab_hash: -1949054743i32, @@ -28294,6 +29139,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -815193061i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureConsoleLED5".into(), prefab_hash: -815193061i32, @@ -28352,6 +29198,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 801677497i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureConsoleMonitor".into(), prefab_hash: 801677497i32, @@ -28414,6 +29261,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1961153710i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureControlChair".into(), prefab_hash: -1961153710i32, @@ -28514,6 +29362,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1968255729i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCornerLocker".into(), prefab_hash: -1968255729i32, @@ -28617,6 +29466,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -733500083i32, StructureSlotsTemplate { + templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureCrateMount".into(), prefab_hash: -733500083i32, @@ -28635,6 +29485,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1938254586i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCryoTube".into(), prefab_hash: 1938254586i32, @@ -28711,6 +29562,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1443059329i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCryoTubeHorizontal".into(), prefab_hash: 1443059329i32, @@ -28777,6 +29629,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1381321828i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCryoTubeVertical".into(), prefab_hash: -1381321828i32, @@ -28843,6 +29696,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1076425094i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDaylightSensor".into(), prefab_hash: 1076425094i32, @@ -28903,6 +29757,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 265720906i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDeepMiner".into(), prefab_hash: 265720906i32, @@ -28964,6 +29819,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1280984102i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDigitalValve".into(), prefab_hash: -1280984102i32, @@ -29019,6 +29875,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1944485013i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDiode".into(), prefab_hash: 1944485013i32, @@ -29069,6 +29926,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 576516101i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDiodeSlide".into(), prefab_hash: 576516101i32, @@ -29119,6 +29977,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -137465079i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDockPortSide".into(), prefab_hash: -137465079i32, @@ -29171,6 +30030,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1968371847i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDrinkingFountain".into(), prefab_hash: 1968371847i32, @@ -29221,6 +30081,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1668992663i32, StructureCircuitHolderTemplate { + templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureElectrolyzer".into(), prefab_hash: -1668992663i32, @@ -29349,6 +30210,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1307165496i32, StructureLogicDeviceConsumerMemoryTemplate { + templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureElectronicsPrinter".into(), prefab_hash: 1307165496i32, @@ -30836,6 +31698,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -827912235i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureElevatorLevelFront".into(), prefab_hash: -827912235i32, @@ -30893,6 +31756,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2060648791i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureElevatorLevelIndustrial".into(), prefab_hash: 2060648791i32, @@ -30947,6 +31811,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 826144419i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureElevatorShaft".into(), prefab_hash: 826144419i32, @@ -31002,6 +31867,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1998354978i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureElevatorShaftIndustrial".into(), prefab_hash: 1998354978i32, @@ -31051,6 +31917,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1668452680i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureEmergencyButton".into(), prefab_hash: 1668452680i32, @@ -31104,6 +31971,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2035781224i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureEngineMountTypeA1".into(), prefab_hash: 2035781224i32, @@ -31119,6 +31987,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1429782576i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureEvaporationChamber".into(), prefab_hash: -1429782576i32, @@ -31200,6 +32069,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 195298587i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureExpansionValve".into(), prefab_hash: 195298587i32, @@ -31251,6 +32121,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1622567418i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFairingTypeA1".into(), prefab_hash: 1622567418i32, @@ -31266,6 +32137,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -104908736i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFairingTypeA2".into(), prefab_hash: -104908736i32, @@ -31281,6 +32153,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1900541738i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFairingTypeA3".into(), prefab_hash: -1900541738i32, @@ -31296,6 +32169,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -348054045i32, StructureCircuitHolderTemplate { + templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureFiltration".into(), prefab_hash: -348054045i32, @@ -31425,6 +32299,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1529819532i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFlagSmall".into(), prefab_hash: -1529819532i32, @@ -31440,6 +32315,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1535893860i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureFlashingLight".into(), prefab_hash: -1535893860i32, @@ -31490,6 +32366,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 839890807i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureFlatBench".into(), prefab_hash: 839890807i32, @@ -31545,6 +32422,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1048813293i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFloorDrain".into(), prefab_hash: 1048813293i32, @@ -31564,6 +32442,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1432512808i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFrame".into(), prefab_hash: 1432512808i32, @@ -31580,6 +32459,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2112390778i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFrameCorner".into(), prefab_hash: -2112390778i32, @@ -31596,6 +32476,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 271315669i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFrameCornerCut".into(), prefab_hash: 271315669i32, @@ -31611,6 +32492,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1240951678i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFrameIron".into(), prefab_hash: -1240951678i32, @@ -31626,6 +32508,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -302420053i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFrameSide".into(), prefab_hash: -302420053i32, @@ -31642,6 +32525,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 958476921i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureFridgeBig".into(), prefab_hash: 958476921i32, @@ -31856,6 +32740,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 751887598i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureFridgeSmall".into(), prefab_hash: 751887598i32, @@ -31954,6 +32839,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1947944864i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureFurnace".into(), prefab_hash: 1947944864i32, @@ -32053,6 +32939,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1033024712i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFuselageTypeA1".into(), prefab_hash: 1033024712i32, @@ -32068,6 +32955,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1533287054i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFuselageTypeA2".into(), prefab_hash: -1533287054i32, @@ -32083,6 +32971,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1308115015i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFuselageTypeA4".into(), prefab_hash: 1308115015i32, @@ -32098,6 +32987,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 147395155i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFuselageTypeC5".into(), prefab_hash: 147395155i32, @@ -32113,6 +33003,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1165997963i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasGenerator".into(), prefab_hash: 1165997963i32, @@ -32190,6 +33081,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2104106366i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasMixer".into(), prefab_hash: 2104106366i32, @@ -32247,6 +33139,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1252983604i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasSensor".into(), prefab_hash: -1252983604i32, @@ -32313,6 +33206,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1632165346i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasTankStorage".into(), prefab_hash: 1632165346i32, @@ -32390,6 +33284,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1680477930i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasUmbilicalFemale".into(), prefab_hash: -1680477930i32, @@ -32438,6 +33333,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -648683847i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasUmbilicalFemaleSide".into(), prefab_hash: -648683847i32, @@ -32486,6 +33382,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1814939203i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasUmbilicalMale".into(), prefab_hash: -1814939203i32, @@ -32548,6 +33445,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -324331872i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGlassDoor".into(), prefab_hash: -324331872i32, @@ -32605,6 +33503,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -214232602i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGovernedGasEngine".into(), prefab_hash: -214232602i32, @@ -32678,6 +33577,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -619745681i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGroundBasedTelescope".into(), prefab_hash: -619745681i32, @@ -32744,6 +33644,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1758710260i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGrowLight".into(), prefab_hash: -1758710260i32, @@ -32795,6 +33696,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 958056199i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHarvie".into(), prefab_hash: 958056199i32, @@ -32895,6 +33797,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 944685608i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHeatExchangeLiquidtoGas".into(), prefab_hash: 944685608i32, @@ -32948,6 +33851,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 21266291i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHeatExchangerGastoGas".into(), prefab_hash: 21266291i32, @@ -33000,6 +33904,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -613784254i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHeatExchangerLiquidtoLiquid".into(), prefab_hash: -613784254i32, @@ -33053,6 +33958,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1070427573i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHorizontalAutoMiner".into(), prefab_hash: 1070427573i32, @@ -33126,6 +34032,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1888248335i32, StructureLogicDeviceConsumerMemoryTemplate { + templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureHydraulicPipeBender".into(), prefab_hash: -1888248335i32, @@ -34374,6 +35281,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1441767298i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHydroponicsStation".into(), prefab_hash: 1441767298i32, @@ -34559,6 +35467,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1464854517i32, StructureSlotsTemplate { + templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureHydroponicsTray".into(), prefab_hash: 1464854517i32, @@ -34584,6 +35493,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1841632400i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHydroponicsTrayData".into(), prefab_hash: -1841632400i32, @@ -34687,6 +35597,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 443849486i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureIceCrusher".into(), prefab_hash: 443849486i32, @@ -34754,6 +35665,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1005491513i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureIgniter".into(), prefab_hash: 1005491513i32, @@ -34802,6 +35714,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1693382705i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInLineTankGas1x1".into(), prefab_hash: -1693382705i32, @@ -34821,6 +35734,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 35149429i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInLineTankGas1x2".into(), prefab_hash: 35149429i32, @@ -34840,6 +35754,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 543645499i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInLineTankLiquid1x1".into(), prefab_hash: 543645499i32, @@ -34859,6 +35774,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1183969663i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInLineTankLiquid1x2".into(), prefab_hash: -1183969663i32, @@ -34878,6 +35794,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1818267386i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedInLineTankGas1x1".into(), prefab_hash: 1818267386i32, @@ -34896,6 +35813,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -177610944i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedInLineTankGas1x2".into(), prefab_hash: -177610944i32, @@ -34914,6 +35832,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -813426145i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedInLineTankLiquid1x1".into(), prefab_hash: -813426145i32, @@ -34932,6 +35851,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1452100517i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedInLineTankLiquid1x2".into(), prefab_hash: 1452100517i32, @@ -34950,6 +35870,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1967711059i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeCorner".into(), prefab_hash: -1967711059i32, @@ -34969,6 +35890,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -92778058i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeCrossJunction".into(), prefab_hash: -92778058i32, @@ -34988,6 +35910,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1328210035i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeCrossJunction3".into(), prefab_hash: 1328210035i32, @@ -35007,6 +35930,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -783387184i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeCrossJunction4".into(), prefab_hash: -783387184i32, @@ -35026,6 +35950,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1505147578i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeCrossJunction5".into(), prefab_hash: -1505147578i32, @@ -35045,6 +35970,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1061164284i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeCrossJunction6".into(), prefab_hash: 1061164284i32, @@ -35064,6 +35990,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1713710802i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidCorner".into(), prefab_hash: 1713710802i32, @@ -35082,6 +36009,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1926651727i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidCrossJunction".into(), prefab_hash: 1926651727i32, @@ -35100,6 +36028,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 363303270i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidCrossJunction4".into(), prefab_hash: 363303270i32, @@ -35118,6 +36047,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1654694384i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidCrossJunction5".into(), prefab_hash: 1654694384i32, @@ -35136,6 +36066,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -72748982i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidCrossJunction6".into(), prefab_hash: -72748982i32, @@ -35154,6 +36085,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 295678685i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidStraight".into(), prefab_hash: 295678685i32, @@ -35172,6 +36104,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -532384855i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidTJunction".into(), prefab_hash: -532384855i32, @@ -35190,6 +36123,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2134172356i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeStraight".into(), prefab_hash: 2134172356i32, @@ -35209,6 +36143,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2076086215i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeTJunction".into(), prefab_hash: -2076086215i32, @@ -35228,6 +36163,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -31273349i32, StructureSlotsTemplate { + templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedTankConnector".into(), prefab_hash: -31273349i32, @@ -35249,6 +36185,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1602030414i32, StructureSlotsTemplate { + templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedTankConnectorLiquid".into(), prefab_hash: -1602030414i32, @@ -35270,6 +36207,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2096421875i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureInteriorDoorGlass".into(), prefab_hash: -2096421875i32, @@ -35321,6 +36259,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 847461335i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureInteriorDoorPadded".into(), prefab_hash: 847461335i32, @@ -35372,6 +36311,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1981698201i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureInteriorDoorPaddedThin".into(), prefab_hash: 1981698201i32, @@ -35423,6 +36363,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1182923101i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureInteriorDoorTriangle".into(), prefab_hash: -1182923101i32, @@ -35474,6 +36415,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -828056979i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureKlaxon".into(), prefab_hash: -828056979i32, @@ -35553,6 +36495,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -415420281i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureLadder".into(), prefab_hash: -415420281i32, @@ -35568,6 +36511,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1541734993i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureLadderEnd".into(), prefab_hash: 1541734993i32, @@ -35583,6 +36527,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1230658883i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLargeDirectHeatExchangeGastoGas".into(), prefab_hash: -1230658883i32, @@ -35633,6 +36578,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1412338038i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLargeDirectHeatExchangeGastoLiquid".into(), prefab_hash: 1412338038i32, @@ -35683,6 +36629,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 792686502i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLargeDirectHeatExchangeLiquidtoLiquid".into(), prefab_hash: 792686502i32, @@ -35733,6 +36680,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -566775170i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLargeExtendableRadiator".into(), prefab_hash: -566775170i32, @@ -35791,6 +36739,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1351081801i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLargeHangerDoor".into(), prefab_hash: -1351081801i32, @@ -35848,6 +36797,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1913391845i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLargeSatelliteDish".into(), prefab_hash: 1913391845i32, @@ -35913,6 +36863,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -558953231i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureLaunchMount".into(), prefab_hash: -558953231i32, @@ -35929,6 +36880,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 797794350i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLightLong".into(), prefab_hash: 797794350i32, @@ -35978,6 +36930,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1847265835i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLightLongAngled".into(), prefab_hash: 1847265835i32, @@ -36027,6 +36980,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 555215790i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLightLongWide".into(), prefab_hash: 555215790i32, @@ -36076,6 +37030,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1514476632i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLightRound".into(), prefab_hash: 1514476632i32, @@ -36125,6 +37080,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1592905386i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLightRoundAngled".into(), prefab_hash: 1592905386i32, @@ -36174,6 +37130,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1436121888i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLightRoundSmall".into(), prefab_hash: 1436121888i32, @@ -36223,6 +37180,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1687692899i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidDrain".into(), prefab_hash: 1687692899i32, @@ -36278,6 +37236,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2113838091i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidPipeAnalyzer".into(), prefab_hash: -2113838091i32, @@ -36349,6 +37308,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -287495560i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidPipeHeater".into(), prefab_hash: -287495560i32, @@ -36401,6 +37361,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -782453061i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidPipeOneWayValve".into(), prefab_hash: -782453061i32, @@ -36451,6 +37412,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2072805863i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidPipeRadiator".into(), prefab_hash: 2072805863i32, @@ -36496,6 +37458,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 482248766i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidPressureRegulator".into(), prefab_hash: 482248766i32, @@ -36552,6 +37515,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1098900430i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidTankBig".into(), prefab_hash: 1098900430i32, @@ -36626,6 +37590,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1430440215i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidTankBigInsulated".into(), prefab_hash: -1430440215i32, @@ -36700,6 +37665,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1988118157i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidTankSmall".into(), prefab_hash: 1988118157i32, @@ -36774,6 +37740,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 608607718i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidTankSmallInsulated".into(), prefab_hash: 608607718i32, @@ -36848,6 +37815,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1691898022i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidTankStorage".into(), prefab_hash: 1691898022i32, @@ -36925,6 +37893,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1051805505i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidTurboVolumePump".into(), prefab_hash: -1051805505i32, @@ -36987,6 +37956,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1734723642i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidUmbilicalFemale".into(), prefab_hash: 1734723642i32, @@ -37035,6 +38005,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1220870319i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidUmbilicalFemaleSide".into(), prefab_hash: 1220870319i32, @@ -37083,6 +38054,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1798420047i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidUmbilicalMale".into(), prefab_hash: -1798420047i32, @@ -37145,6 +38117,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1849974453i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidValve".into(), prefab_hash: 1849974453i32, @@ -37195,6 +38168,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -454028979i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidVolumePump".into(), prefab_hash: -454028979i32, @@ -37250,6 +38224,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -647164662i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLockerSmall".into(), prefab_hash: -647164662i32, @@ -37335,6 +38310,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 264413729i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicBatchReader".into(), prefab_hash: 264413729i32, @@ -37387,6 +38363,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 436888930i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicBatchSlotReader".into(), prefab_hash: 436888930i32, @@ -37439,6 +38416,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1415443359i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicBatchWriter".into(), prefab_hash: 1415443359i32, @@ -37491,6 +38469,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 491845673i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicButton".into(), prefab_hash: 491845673i32, @@ -37540,6 +38519,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1489728908i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicCompare".into(), prefab_hash: -1489728908i32, @@ -37601,6 +38581,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 554524804i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicDial".into(), prefab_hash: 554524804i32, @@ -37649,6 +38630,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1942143074i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicGate".into(), prefab_hash: 1942143074i32, @@ -37712,6 +38694,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2077593121i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicHashGen".into(), prefab_hash: 2077593121i32, @@ -37760,6 +38743,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1657691323i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicMath".into(), prefab_hash: 1657691323i32, @@ -37824,6 +38808,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1160020195i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicMathUnary".into(), prefab_hash: -1160020195i32, @@ -37889,6 +38874,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -851746783i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicMemory".into(), prefab_hash: -851746783i32, @@ -37937,6 +38923,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 929022276i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicMinMax".into(), prefab_hash: 929022276i32, @@ -37995,6 +38982,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2096189278i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicMirror".into(), prefab_hash: 2096189278i32, @@ -38038,6 +39026,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -345383640i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicReader".into(), prefab_hash: -345383640i32, @@ -38090,6 +39079,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -124308857i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicReagentReader".into(), prefab_hash: -124308857i32, @@ -38142,6 +39132,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 876108549i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicRocketDownlink".into(), prefab_hash: 876108549i32, @@ -38190,6 +39181,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 546002924i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicRocketUplink".into(), prefab_hash: 546002924i32, @@ -38240,6 +39232,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1822736084i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicSelect".into(), prefab_hash: 1822736084i32, @@ -38301,6 +39294,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -767867194i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicSlotReader".into(), prefab_hash: -767867194i32, @@ -38353,6 +39347,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 873418029i32, StructureLogicDeviceMemoryTemplate { + templateType: "StructureLogicDeviceMemory".into(), prefab: PrefabInfo { prefab_name: "StructureLogicSorter".into(), prefab_hash: 873418029i32, @@ -38729,6 +39724,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1220484876i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicSwitch".into(), prefab_hash: 1220484876i32, @@ -38778,6 +39774,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 321604921i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicSwitch2".into(), prefab_hash: 321604921i32, @@ -38827,6 +39824,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -693235651i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicTransmitter".into(), prefab_hash: -693235651i32, @@ -38876,6 +39874,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1326019434i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicWriter".into(), prefab_hash: -1326019434i32, @@ -38928,6 +39927,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1321250424i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicWriterSwitch".into(), prefab_hash: -1321250424i32, @@ -38981,6 +39981,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1808154199i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureManualHatch".into(), prefab_hash: -1808154199i32, @@ -39033,6 +40034,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1918215845i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumConvectionRadiator".into(), prefab_hash: -1918215845i32, @@ -39086,6 +40088,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1169014183i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumConvectionRadiatorLiquid".into(), prefab_hash: -1169014183i32, @@ -39139,6 +40142,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -566348148i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumHangerDoor".into(), prefab_hash: -566348148i32, @@ -39196,6 +40200,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -975966237i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumRadiator".into(), prefab_hash: -975966237i32, @@ -39249,6 +40254,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1141760613i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumRadiatorLiquid".into(), prefab_hash: -1141760613i32, @@ -39302,6 +40308,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1093860567i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumRocketGasFuelTank".into(), prefab_hash: -1093860567i32, @@ -39376,6 +40383,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1143639539i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumRocketLiquidFuelTank".into(), prefab_hash: 1143639539i32, @@ -39450,6 +40458,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1713470563i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMotionSensor".into(), prefab_hash: -1713470563i32, @@ -39499,6 +40508,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1898243702i32, StructureCircuitHolderTemplate { + templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureNitrolyzer".into(), prefab_hash: 1898243702i32, @@ -39655,6 +40665,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 322782515i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureOccupancySensor".into(), prefab_hash: 322782515i32, @@ -39704,6 +40715,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1794932560i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureOverheadShortCornerLocker".into(), prefab_hash: -1794932560i32, @@ -39772,6 +40784,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1468249454i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureOverheadShortLocker".into(), prefab_hash: 1468249454i32, @@ -39910,6 +40923,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2066977095i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePassiveLargeRadiatorGas".into(), prefab_hash: 2066977095i32, @@ -39963,6 +40977,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 24786172i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePassiveLargeRadiatorLiquid".into(), prefab_hash: 24786172i32, @@ -40016,6 +41031,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1812364811i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePassiveLiquidDrain".into(), prefab_hash: 1812364811i32, @@ -40058,6 +41074,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 335498166i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePassiveVent".into(), prefab_hash: 335498166i32, @@ -40077,6 +41094,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1363077139i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePassiveVentInsulated".into(), prefab_hash: 1363077139i32, @@ -40095,6 +41113,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1674187440i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePassthroughHeatExchangerGasToGas".into(), prefab_hash: -1674187440i32, @@ -40147,6 +41166,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1928991265i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePassthroughHeatExchangerGasToLiquid".into(), prefab_hash: 1928991265i32, @@ -40200,6 +41220,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1472829583i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePassthroughHeatExchangerLiquidToLiquid".into(), prefab_hash: -1472829583i32, @@ -40253,6 +41274,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1434523206i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickLandscapeLarge".into(), prefab_hash: -1434523206i32, @@ -40268,6 +41290,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2041566697i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickLandscapeSmall".into(), prefab_hash: -2041566697i32, @@ -40283,6 +41306,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 950004659i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickMountLandscapeLarge".into(), prefab_hash: 950004659i32, @@ -40298,6 +41322,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 347154462i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickMountLandscapeSmall".into(), prefab_hash: 347154462i32, @@ -40313,6 +41338,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1459641358i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickMountPortraitLarge".into(), prefab_hash: -1459641358i32, @@ -40328,6 +41354,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2066653089i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickMountPortraitSmall".into(), prefab_hash: -2066653089i32, @@ -40343,6 +41370,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1686949570i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickPortraitLarge".into(), prefab_hash: -1686949570i32, @@ -40358,6 +41386,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1218579821i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickPortraitSmall".into(), prefab_hash: -1218579821i32, @@ -40373,6 +41402,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1418288625i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinLandscapeLarge".into(), prefab_hash: -1418288625i32, @@ -40388,6 +41418,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2024250974i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinLandscapeSmall".into(), prefab_hash: -2024250974i32, @@ -40403,6 +41434,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1146760430i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinMountLandscapeLarge".into(), prefab_hash: -1146760430i32, @@ -40418,6 +41450,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1752493889i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinMountLandscapeSmall".into(), prefab_hash: -1752493889i32, @@ -40433,6 +41466,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1094895077i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinMountPortraitLarge".into(), prefab_hash: 1094895077i32, @@ -40448,6 +41482,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1835796040i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinMountPortraitSmall".into(), prefab_hash: 1835796040i32, @@ -40463,6 +41498,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1212777087i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinPortraitLarge".into(), prefab_hash: 1212777087i32, @@ -40478,6 +41514,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1684488658i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinPortraitSmall".into(), prefab_hash: 1684488658i32, @@ -40493,6 +41530,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 435685051i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeAnalysizer".into(), prefab_hash: 435685051i32, @@ -40565,6 +41603,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1785673561i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCorner".into(), prefab_hash: -1785673561i32, @@ -40584,6 +41623,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 465816159i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCowl".into(), prefab_hash: 465816159i32, @@ -40602,6 +41642,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1405295588i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCrossJunction".into(), prefab_hash: -1405295588i32, @@ -40621,6 +41662,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2038427184i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCrossJunction3".into(), prefab_hash: 2038427184i32, @@ -40640,6 +41682,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -417629293i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCrossJunction4".into(), prefab_hash: -417629293i32, @@ -40659,6 +41702,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1877193979i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCrossJunction5".into(), prefab_hash: -1877193979i32, @@ -40678,6 +41722,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 152378047i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCrossJunction6".into(), prefab_hash: 152378047i32, @@ -40697,6 +41742,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -419758574i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeHeater".into(), prefab_hash: -419758574i32, @@ -40749,6 +41795,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1286441942i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeIgniter".into(), prefab_hash: 1286441942i32, @@ -40798,6 +41845,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2068497073i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeInsulatedLiquidCrossJunction".into(), prefab_hash: -2068497073i32, @@ -40816,6 +41864,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -999721119i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLabel".into(), prefab_hash: -999721119i32, @@ -40858,6 +41907,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1856720921i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidCorner".into(), prefab_hash: -1856720921i32, @@ -40877,6 +41927,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1848735691i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidCrossJunction".into(), prefab_hash: 1848735691i32, @@ -40896,6 +41947,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1628087508i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidCrossJunction3".into(), prefab_hash: 1628087508i32, @@ -40915,6 +41967,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -9555593i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidCrossJunction4".into(), prefab_hash: -9555593i32, @@ -40934,6 +41987,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2006384159i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidCrossJunction5".into(), prefab_hash: -2006384159i32, @@ -40953,6 +42007,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 291524699i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidCrossJunction6".into(), prefab_hash: 291524699i32, @@ -40972,6 +42027,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 667597982i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidStraight".into(), prefab_hash: 667597982i32, @@ -40991,6 +42047,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 262616717i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidTJunction".into(), prefab_hash: 262616717i32, @@ -41010,6 +42067,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1798362329i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeMeter".into(), prefab_hash: -1798362329i32, @@ -41052,6 +42110,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1580412404i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeOneWayValve".into(), prefab_hash: 1580412404i32, @@ -41102,6 +42161,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1305252611i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeOrgan".into(), prefab_hash: 1305252611i32, @@ -41121,6 +42181,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1696603168i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeRadiator".into(), prefab_hash: 1696603168i32, @@ -41166,6 +42227,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -399883995i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeRadiatorFlat".into(), prefab_hash: -399883995i32, @@ -41211,6 +42273,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2024754523i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeRadiatorFlatLiquid".into(), prefab_hash: 2024754523i32, @@ -41256,6 +42319,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 73728932i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeStraight".into(), prefab_hash: 73728932i32, @@ -41275,6 +42339,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -913817472i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeTJunction".into(), prefab_hash: -913817472i32, @@ -41294,6 +42359,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1125641329i32, StructureSlotsTemplate { + templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructurePlanter".into(), prefab_hash: -1125641329i32, @@ -41319,6 +42385,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1559586682i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePlatformLadderOpen".into(), prefab_hash: 1559586682i32, @@ -41334,6 +42401,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 989835703i32, StructureSlotsTemplate { + templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructurePlinth".into(), prefab_hash: 989835703i32, @@ -41352,6 +42420,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -899013427i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePortablesConnector".into(), prefab_hash: -899013427i32, @@ -41416,6 +42485,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -782951720i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerConnector".into(), prefab_hash: -782951720i32, @@ -41478,6 +42548,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -65087121i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerTransmitter".into(), prefab_hash: -65087121i32, @@ -41540,6 +42611,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -327468845i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerTransmitterOmni".into(), prefab_hash: -327468845i32, @@ -41590,6 +42662,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1195820278i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerTransmitterReceiver".into(), prefab_hash: 1195820278i32, @@ -41652,6 +42725,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 101488029i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerUmbilicalFemale".into(), prefab_hash: 101488029i32, @@ -41698,6 +42772,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1922506192i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerUmbilicalFemaleSide".into(), prefab_hash: 1922506192i32, @@ -41744,6 +42819,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1529453938i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerUmbilicalMale".into(), prefab_hash: 1529453938i32, @@ -41803,6 +42879,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 938836756i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePoweredVent".into(), prefab_hash: 938836756i32, @@ -41862,6 +42939,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -785498334i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePoweredVentLarge".into(), prefab_hash: -785498334i32, @@ -41921,6 +42999,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 23052817i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressurantValve".into(), prefab_hash: 23052817i32, @@ -41977,6 +43056,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -624011170i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressureFedGasEngine".into(), prefab_hash: -624011170i32, @@ -42051,6 +43131,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 379750958i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressureFedLiquidEngine".into(), prefab_hash: 379750958i32, @@ -42127,6 +43208,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2008706143i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressurePlateLarge".into(), prefab_hash: -2008706143i32, @@ -42175,6 +43257,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1269458680i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressurePlateMedium".into(), prefab_hash: 1269458680i32, @@ -42223,6 +43306,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1536471028i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressurePlateSmall".into(), prefab_hash: -1536471028i32, @@ -42271,6 +43355,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 209854039i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressureRegulator".into(), prefab_hash: 209854039i32, @@ -42326,6 +43411,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 568800213i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureProximitySensor".into(), prefab_hash: 568800213i32, @@ -42375,6 +43461,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2031440019i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePumpedLiquidEngine".into(), prefab_hash: -2031440019i32, @@ -42451,6 +43538,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -737232128i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePurgeValve".into(), prefab_hash: -737232128i32, @@ -42506,6 +43594,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1756913871i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureRailing".into(), prefab_hash: -1756913871i32, @@ -42521,6 +43610,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1633947337i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRecycler".into(), prefab_hash: -1633947337i32, @@ -42604,6 +43694,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1577831321i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRefrigeratedVendingMachine".into(), prefab_hash: -1577831321i32, @@ -42838,6 +43929,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2027713511i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureReinforcedCompositeWindow".into(), prefab_hash: 2027713511i32, @@ -42854,6 +43946,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -816454272i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureReinforcedCompositeWindowSteel".into(), prefab_hash: -816454272i32, @@ -42870,6 +43963,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1939061729i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureReinforcedWallPaddedWindow".into(), prefab_hash: 1939061729i32, @@ -42886,6 +43980,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 158502707i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureReinforcedWallPaddedWindowThin".into(), prefab_hash: 158502707i32, @@ -42902,6 +43997,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 808389066i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRocketAvionics".into(), prefab_hash: 808389066i32, @@ -43002,6 +44098,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 997453927i32, StructureLogicDeviceMemoryTemplate { + templateType: "StructureLogicDeviceMemory".into(), prefab: PrefabInfo { prefab_name: "StructureRocketCelestialTracker".into(), prefab_hash: 997453927i32, @@ -43122,6 +44219,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 150135861i32, StructureCircuitHolderTemplate { + templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureRocketCircuitHousing".into(), prefab_hash: 150135861i32, @@ -43191,6 +44289,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 178472613i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRocketEngineTiny".into(), prefab_hash: 178472613i32, @@ -43266,6 +44365,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1781051034i32, StructureLogicDeviceConsumerMemoryTemplate { + templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureRocketManufactory".into(), prefab_hash: 1781051034i32, @@ -43969,6 +45069,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2087223687i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRocketMiner".into(), prefab_hash: -2087223687i32, @@ -44035,6 +45136,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2014252591i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRocketScanner".into(), prefab_hash: 2014252591i32, @@ -44091,6 +45193,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -654619479i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureRocketTower".into(), prefab_hash: -654619479i32, @@ -44106,6 +45209,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 518925193i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRocketTransformerSmall".into(), prefab_hash: 518925193i32, @@ -44161,6 +45265,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 806513938i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureRover".into(), prefab_hash: 806513938i32, @@ -44176,6 +45281,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1875856925i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSDBHopper".into(), prefab_hash: -1875856925i32, @@ -44229,6 +45335,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 467225612i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSDBHopperAdvanced".into(), prefab_hash: 467225612i32, @@ -44284,6 +45391,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1155865682i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSDBSilo".into(), prefab_hash: 1155865682i32, @@ -44358,6 +45466,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 439026183i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSatelliteDish".into(), prefab_hash: 439026183i32, @@ -44423,6 +45532,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -641491515i32, StructureLogicDeviceConsumerMemoryTemplate { + templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureSecurityPrinter".into(), prefab_hash: -641491515i32, @@ -45057,6 +46167,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1172114950i32, StructureSlotsTemplate { + templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureShelf".into(), prefab_hash: 1172114950i32, @@ -45080,6 +46191,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 182006674i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureShelfMedium".into(), prefab_hash: 182006674i32, @@ -45260,6 +46372,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1330754486i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureShortCornerLocker".into(), prefab_hash: 1330754486i32, @@ -45328,6 +46441,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -554553467i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureShortLocker".into(), prefab_hash: -554553467i32, @@ -45466,6 +46580,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -775128944i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureShower".into(), prefab_hash: -775128944i32, @@ -45517,6 +46632,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1081797501i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureShowerPowered".into(), prefab_hash: -1081797501i32, @@ -45571,6 +46687,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 879058460i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSign1x1".into(), prefab_hash: 879058460i32, @@ -45612,6 +46729,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 908320837i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSign2x1".into(), prefab_hash: 908320837i32, @@ -45653,6 +46771,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -492611i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSingleBed".into(), prefab_hash: -492611i32, @@ -45708,6 +46827,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1467449329i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSleeper".into(), prefab_hash: -1467449329i32, @@ -45782,6 +46902,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1213495833i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSleeperLeft".into(), prefab_hash: 1213495833i32, @@ -45854,6 +46975,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1812330717i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSleeperRight".into(), prefab_hash: -1812330717i32, @@ -45926,6 +47048,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1300059018i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSleeperVertical".into(), prefab_hash: -1300059018i32, @@ -45998,6 +47121,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1382098999i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSleeperVerticalDroid".into(), prefab_hash: 1382098999i32, @@ -46055,6 +47179,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1310303582i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSmallDirectHeatExchangeGastoGas".into(), prefab_hash: 1310303582i32, @@ -46105,6 +47230,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1825212016i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSmallDirectHeatExchangeLiquidtoGas".into(), prefab_hash: 1825212016i32, @@ -46155,6 +47281,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -507770416i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSmallDirectHeatExchangeLiquidtoLiquid".into(), prefab_hash: -507770416i32, @@ -46205,6 +47332,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2138748650i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSmallSatelliteDish".into(), prefab_hash: -2138748650i32, @@ -46270,6 +47398,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1633000411i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableBacklessDouble".into(), prefab_hash: -1633000411i32, @@ -46285,6 +47414,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1897221677i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableBacklessSingle".into(), prefab_hash: -1897221677i32, @@ -46300,6 +47430,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1260651529i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableDinnerSingle".into(), prefab_hash: 1260651529i32, @@ -46315,6 +47446,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -660451023i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableRectangleDouble".into(), prefab_hash: -660451023i32, @@ -46330,6 +47462,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -924678969i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableRectangleSingle".into(), prefab_hash: -924678969i32, @@ -46345,6 +47478,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -19246131i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableThickDouble".into(), prefab_hash: -19246131i32, @@ -46360,6 +47494,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -291862981i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableThickSingle".into(), prefab_hash: -291862981i32, @@ -46375,6 +47510,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2045627372i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanel".into(), prefab_hash: -2045627372i32, @@ -46426,6 +47562,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1554349863i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanel45".into(), prefab_hash: -1554349863i32, @@ -46477,6 +47614,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 930865127i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanel45Reinforced".into(), prefab_hash: 930865127i32, @@ -46527,6 +47665,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -539224550i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanelDual".into(), prefab_hash: -539224550i32, @@ -46579,6 +47718,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1545574413i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanelDualReinforced".into(), prefab_hash: -1545574413i32, @@ -46630,6 +47770,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1968102968i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanelFlat".into(), prefab_hash: 1968102968i32, @@ -46681,6 +47822,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1697196770i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanelFlatReinforced".into(), prefab_hash: 1697196770i32, @@ -46731,6 +47873,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -934345724i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanelReinforced".into(), prefab_hash: -934345724i32, @@ -46781,6 +47924,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 813146305i32, StructureLogicDeviceConsumerTemplate { + templateType: "StructureLogicDeviceConsumer".into(), prefab: PrefabInfo { prefab_name: "StructureSolidFuelGenerator".into(), prefab_hash: 813146305i32, @@ -46861,6 +48005,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1009150565i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSorter".into(), prefab_hash: -1009150565i32, @@ -46970,6 +48115,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2020231820i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureStacker".into(), prefab_hash: -2020231820i32, @@ -47067,6 +48213,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1585641623i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureStackerReverse".into(), prefab_hash: 1585641623i32, @@ -47164,6 +48311,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1405018945i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairs4x2".into(), prefab_hash: 1405018945i32, @@ -47179,6 +48327,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 155214029i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairs4x2RailL".into(), prefab_hash: 155214029i32, @@ -47194,6 +48343,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -212902482i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairs4x2RailR".into(), prefab_hash: -212902482i32, @@ -47209,6 +48359,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1088008720i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairs4x2Rails".into(), prefab_hash: -1088008720i32, @@ -47224,6 +48375,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 505924160i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellBackLeft".into(), prefab_hash: 505924160i32, @@ -47239,6 +48391,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -862048392i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellBackPassthrough".into(), prefab_hash: -862048392i32, @@ -47254,6 +48407,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2128896573i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellBackRight".into(), prefab_hash: -2128896573i32, @@ -47269,6 +48423,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -37454456i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellFrontLeft".into(), prefab_hash: -37454456i32, @@ -47284,6 +48439,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1625452928i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellFrontPassthrough".into(), prefab_hash: -1625452928i32, @@ -47299,6 +48455,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 340210934i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellFrontRight".into(), prefab_hash: 340210934i32, @@ -47314,6 +48471,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2049879875i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellNoDoors".into(), prefab_hash: 2049879875i32, @@ -47329,6 +48487,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -260316435i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureStirlingEngine".into(), prefab_hash: -260316435i32, @@ -47417,6 +48576,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -793623899i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureStorageLocker".into(), prefab_hash: -793623899i32, @@ -47729,6 +48889,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 255034731i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSuitStorage".into(), prefab_hash: 255034731i32, @@ -47837,6 +48998,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1606848156i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTankBig".into(), prefab_hash: -1606848156i32, @@ -47912,6 +49074,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1280378227i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTankBigInsulated".into(), prefab_hash: 1280378227i32, @@ -47987,6 +49150,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1276379454i32, StructureSlotsTemplate { + templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureTankConnector".into(), prefab_hash: -1276379454i32, @@ -48009,6 +49173,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1331802518i32, StructureSlotsTemplate { + templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureTankConnectorLiquid".into(), prefab_hash: 1331802518i32, @@ -48031,6 +49196,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1013514688i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTankSmall".into(), prefab_hash: 1013514688i32, @@ -48106,6 +49272,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 955744474i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTankSmallAir".into(), prefab_hash: 955744474i32, @@ -48181,6 +49348,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2102454415i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTankSmallFuel".into(), prefab_hash: 2102454415i32, @@ -48256,6 +49424,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 272136332i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTankSmallInsulated".into(), prefab_hash: 272136332i32, @@ -48331,6 +49500,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -465741100i32, StructureLogicDeviceConsumerMemoryTemplate { + templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureToolManufactory".into(), prefab_hash: -465741100i32, @@ -49520,6 +50690,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1473807953i32, StructureSlotsTemplate { + templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureTorpedoRack".into(), prefab_hash: 1473807953i32, @@ -49547,6 +50718,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1570931620i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTraderWaypoint".into(), prefab_hash: 1570931620i32, @@ -49596,6 +50768,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1423212473i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTransformer".into(), prefab_hash: -1423212473i32, @@ -49651,6 +50824,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1065725831i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTransformerMedium".into(), prefab_hash: -1065725831i32, @@ -49705,6 +50879,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 833912764i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTransformerMediumReversed".into(), prefab_hash: 833912764i32, @@ -49759,6 +50934,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -890946730i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTransformerSmall".into(), prefab_hash: -890946730i32, @@ -49813,6 +50989,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1054059374i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTransformerSmallReversed".into(), prefab_hash: 1054059374i32, @@ -49867,6 +51044,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1282191063i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTurbineGenerator".into(), prefab_hash: 1282191063i32, @@ -49915,6 +51093,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1310794736i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTurboVolumePump".into(), prefab_hash: 1310794736i32, @@ -49976,6 +51155,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 750118160i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureUnloader".into(), prefab_hash: 750118160i32, @@ -50062,6 +51242,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1622183451i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureUprightWindTurbine".into(), prefab_hash: 1622183451i32, @@ -50110,6 +51291,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -692036078i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureValve".into(), prefab_hash: -692036078i32, @@ -50160,6 +51342,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -443130773i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureVendingMachine".into(), prefab_hash: -443130773i32, @@ -50370,6 +51553,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -321403609i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureVolumePump".into(), prefab_hash: -321403609i32, @@ -50425,6 +51609,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -858143148i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArch".into(), prefab_hash: -858143148i32, @@ -50440,6 +51625,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1649708822i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArchArrow".into(), prefab_hash: 1649708822i32, @@ -50455,6 +51641,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1794588890i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArchCornerRound".into(), prefab_hash: 1794588890i32, @@ -50470,6 +51657,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1963016580i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArchCornerSquare".into(), prefab_hash: -1963016580i32, @@ -50485,6 +51673,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1281911841i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArchCornerTriangle".into(), prefab_hash: 1281911841i32, @@ -50500,6 +51689,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1182510648i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArchPlating".into(), prefab_hash: 1182510648i32, @@ -50515,6 +51705,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 782529714i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArchTwoTone".into(), prefab_hash: 782529714i32, @@ -50530,6 +51721,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -739292323i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWallCooler".into(), prefab_hash: -739292323i32, @@ -50598,6 +51790,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1635864154i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallFlat".into(), prefab_hash: 1635864154i32, @@ -50613,6 +51806,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 898708250i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallFlatCornerRound".into(), prefab_hash: 898708250i32, @@ -50628,6 +51822,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 298130111i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallFlatCornerSquare".into(), prefab_hash: 298130111i32, @@ -50643,6 +51838,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2097419366i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallFlatCornerTriangle".into(), prefab_hash: 2097419366i32, @@ -50658,6 +51854,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1161662836i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallFlatCornerTriangleFlat".into(), prefab_hash: -1161662836i32, @@ -50673,6 +51870,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1979212240i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallGeometryCorner".into(), prefab_hash: 1979212240i32, @@ -50688,6 +51886,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1049735537i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallGeometryStreight".into(), prefab_hash: 1049735537i32, @@ -50703,6 +51902,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1602758612i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallGeometryT".into(), prefab_hash: 1602758612i32, @@ -50718,6 +51918,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1427845483i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallGeometryTMirrored".into(), prefab_hash: -1427845483i32, @@ -50733,6 +51934,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 24258244i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWallHeater".into(), prefab_hash: 24258244i32, @@ -50798,6 +52000,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1287324802i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallIron".into(), prefab_hash: 1287324802i32, @@ -50813,6 +52016,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1485834215i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallIron02".into(), prefab_hash: 1485834215i32, @@ -50828,6 +52032,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 798439281i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallIron03".into(), prefab_hash: 798439281i32, @@ -50843,6 +52048,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1309433134i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallIron04".into(), prefab_hash: -1309433134i32, @@ -50858,6 +52064,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1492930217i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallLargePanel".into(), prefab_hash: 1492930217i32, @@ -50873,6 +52080,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -776581573i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallLargePanelArrow".into(), prefab_hash: -776581573i32, @@ -50888,6 +52096,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1860064656i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWallLight".into(), prefab_hash: -1860064656i32, @@ -50937,6 +52146,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1306415132i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWallLightBattery".into(), prefab_hash: -1306415132i32, @@ -51002,6 +52212,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1590330637i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedArch".into(), prefab_hash: 1590330637i32, @@ -51017,6 +52228,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1126688298i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedArchCorner".into(), prefab_hash: -1126688298i32, @@ -51032,6 +52244,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1171987947i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedArchLightFittingTop".into(), prefab_hash: 1171987947i32, @@ -51047,6 +52260,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1546743960i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedArchLightsFittings".into(), prefab_hash: -1546743960i32, @@ -51062,6 +52276,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -155945899i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedCorner".into(), prefab_hash: -155945899i32, @@ -51077,6 +52292,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1183203913i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedCornerThin".into(), prefab_hash: 1183203913i32, @@ -51092,6 +52308,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 8846501i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedNoBorder".into(), prefab_hash: 8846501i32, @@ -51107,6 +52324,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 179694804i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedNoBorderCorner".into(), prefab_hash: 179694804i32, @@ -51122,6 +52340,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1611559100i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedThinNoBorder".into(), prefab_hash: -1611559100i32, @@ -51137,6 +52356,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1769527556i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedThinNoBorderCorner".into(), prefab_hash: 1769527556i32, @@ -51152,6 +52372,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2087628940i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedWindow".into(), prefab_hash: 2087628940i32, @@ -51167,6 +52388,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -37302931i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedWindowThin".into(), prefab_hash: -37302931i32, @@ -51182,6 +52404,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 635995024i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPadding".into(), prefab_hash: 635995024i32, @@ -51197,6 +52420,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1243329828i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddingArchVent".into(), prefab_hash: -1243329828i32, @@ -51212,6 +52436,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2024882687i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddingLightFitting".into(), prefab_hash: 2024882687i32, @@ -51227,6 +52452,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1102403554i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddingThin".into(), prefab_hash: -1102403554i32, @@ -51242,6 +52468,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 26167457i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPlating".into(), prefab_hash: 26167457i32, @@ -51257,6 +52484,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 619828719i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallSmallPanelsAndHatch".into(), prefab_hash: 619828719i32, @@ -51272,6 +52500,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -639306697i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallSmallPanelsArrow".into(), prefab_hash: -639306697i32, @@ -51287,6 +52516,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 386820253i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallSmallPanelsMonoChrome".into(), prefab_hash: 386820253i32, @@ -51302,6 +52532,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1407480603i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallSmallPanelsOpen".into(), prefab_hash: -1407480603i32, @@ -51317,6 +52548,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1709994581i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallSmallPanelsTwoTone".into(), prefab_hash: 1709994581i32, @@ -51332,6 +52564,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1177469307i32, StructureTemplate { + templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallVent".into(), prefab_hash: -1177469307i32, @@ -51347,6 +52580,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1178961954i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterBottleFiller".into(), prefab_hash: -1178961954i32, @@ -51429,6 +52663,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1433754995i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterBottleFillerBottom".into(), prefab_hash: 1433754995i32, @@ -51511,6 +52746,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -756587791i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterBottleFillerPowered".into(), prefab_hash: -756587791i32, @@ -51596,6 +52832,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1986658780i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterBottleFillerPoweredBottom".into(), prefab_hash: 1986658780i32, @@ -51681,6 +52918,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -517628750i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterDigitalValve".into(), prefab_hash: -517628750i32, @@ -51736,6 +52974,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 433184168i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterPipeMeter".into(), prefab_hash: 433184168i32, @@ -51777,6 +53016,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 887383294i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterPurifier".into(), prefab_hash: 887383294i32, @@ -51838,6 +53078,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1369060582i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterWallCooler".into(), prefab_hash: -1369060582i32, @@ -51905,6 +53146,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1997212478i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWeatherStation".into(), prefab_hash: 1997212478i32, @@ -51966,6 +53208,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2082355173i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWindTurbine".into(), prefab_hash: -2082355173i32, @@ -52015,6 +53258,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2056377335i32, StructureLogicDeviceTemplate { + templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWindowShutter".into(), prefab_hash: 2056377335i32, @@ -52073,6 +53317,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1700018136i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ToolPrinterMod".into(), prefab_hash: 1700018136i32, @@ -52097,6 +53342,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 94730034i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ToyLuna".into(), prefab_hash: 94730034i32, @@ -52120,6 +53366,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2083426457i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "UniformCommander".into(), prefab_hash: -2083426457i32, @@ -52152,6 +53399,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -48342840i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "UniformMarine".into(), prefab_hash: -48342840i32, @@ -52183,6 +53431,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 810053150i32, ItemSlotsTemplate { + templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "UniformOrangeJumpSuit".into(), prefab_hash: 810053150i32, @@ -52214,6 +53463,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 789494694i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "WeaponEnergy".into(), prefab_hash: 789494694i32, @@ -52265,6 +53515,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -385323479i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "WeaponPistolEnergy".into(), prefab_hash: -385323479i32, @@ -52323,6 +53574,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1154745374i32, ItemLogicTemplate { + templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "WeaponRifleEnergy".into(), prefab_hash: 1154745374i32, @@ -52381,6 +53633,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1102977898i32, ItemTemplate { + templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "WeaponTorpedo".into(), prefab_hash: -1102977898i32, diff --git a/stationeers_data/src/templates.rs b/stationeers_data/src/templates.rs index 2c60da7..d3eb3f4 100644 --- a/stationeers_data/src/templates.rs +++ b/stationeers_data/src/templates.rs @@ -13,7 +13,7 @@ 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(untagged)] +#[serde(tag = "templateType")] pub enum ObjectTemplate { Structure(StructureTemplate), StructureSlots(StructureSlotsTemplate), diff --git a/www/data/database.json b/www/data/database.json index 7c9fb13..5d51e87 100644 --- a/www/data/database.json +++ b/www/data/database.json @@ -1,6 +1,7 @@ { "prefabs": { "AccessCardBlack": { + "templateType": "Item", "prefab": { "prefab_name": "AccessCardBlack", "prefab_hash": -1330388999, @@ -16,6 +17,7 @@ } }, "AccessCardBlue": { + "templateType": "Item", "prefab": { "prefab_name": "AccessCardBlue", "prefab_hash": -1411327657, @@ -31,6 +33,7 @@ } }, "AccessCardBrown": { + "templateType": "Item", "prefab": { "prefab_name": "AccessCardBrown", "prefab_hash": 1412428165, @@ -46,6 +49,7 @@ } }, "AccessCardGray": { + "templateType": "Item", "prefab": { "prefab_name": "AccessCardGray", "prefab_hash": -1339479035, @@ -61,6 +65,7 @@ } }, "AccessCardGreen": { + "templateType": "Item", "prefab": { "prefab_name": "AccessCardGreen", "prefab_hash": -374567952, @@ -76,6 +81,7 @@ } }, "AccessCardKhaki": { + "templateType": "Item", "prefab": { "prefab_name": "AccessCardKhaki", "prefab_hash": 337035771, @@ -91,6 +97,7 @@ } }, "AccessCardOrange": { + "templateType": "Item", "prefab": { "prefab_name": "AccessCardOrange", "prefab_hash": -332896929, @@ -106,6 +113,7 @@ } }, "AccessCardPink": { + "templateType": "Item", "prefab": { "prefab_name": "AccessCardPink", "prefab_hash": 431317557, @@ -121,6 +129,7 @@ } }, "AccessCardPurple": { + "templateType": "Item", "prefab": { "prefab_name": "AccessCardPurple", "prefab_hash": 459843265, @@ -136,6 +145,7 @@ } }, "AccessCardRed": { + "templateType": "Item", "prefab": { "prefab_name": "AccessCardRed", "prefab_hash": -1713748313, @@ -151,6 +161,7 @@ } }, "AccessCardWhite": { + "templateType": "Item", "prefab": { "prefab_name": "AccessCardWhite", "prefab_hash": 2079959157, @@ -166,6 +177,7 @@ } }, "AccessCardYellow": { + "templateType": "Item", "prefab": { "prefab_name": "AccessCardYellow", "prefab_hash": 568932536, @@ -181,6 +193,7 @@ } }, "ApplianceChemistryStation": { + "templateType": "ItemConsumer", "prefab": { "prefab_name": "ApplianceChemistryStation", "prefab_hash": 1365789392, @@ -213,6 +226,7 @@ } }, "ApplianceDeskLampLeft": { + "templateType": "Item", "prefab": { "prefab_name": "ApplianceDeskLampLeft", "prefab_hash": -1683849799, @@ -228,6 +242,7 @@ } }, "ApplianceDeskLampRight": { + "templateType": "Item", "prefab": { "prefab_name": "ApplianceDeskLampRight", "prefab_hash": 1174360780, @@ -243,6 +258,7 @@ } }, "ApplianceMicrowave": { + "templateType": "ItemConsumer", "prefab": { "prefab_name": "ApplianceMicrowave", "prefab_hash": -1136173965, @@ -285,6 +301,7 @@ } }, "AppliancePackagingMachine": { + "templateType": "ItemConsumer", "prefab": { "prefab_name": "AppliancePackagingMachine", "prefab_hash": -749191906, @@ -323,6 +340,7 @@ } }, "AppliancePaintMixer": { + "templateType": "ItemConsumer", "prefab": { "prefab_name": "AppliancePaintMixer", "prefab_hash": -1339716113, @@ -355,6 +373,7 @@ } }, "AppliancePlantGeneticAnalyzer": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "AppliancePlantGeneticAnalyzer", "prefab_hash": -1303038067, @@ -376,6 +395,7 @@ ] }, "AppliancePlantGeneticSplicer": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "AppliancePlantGeneticSplicer", "prefab_hash": -1094868323, @@ -401,6 +421,7 @@ ] }, "AppliancePlantGeneticStabilizer": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "AppliancePlantGeneticStabilizer", "prefab_hash": 871432335, @@ -422,6 +443,7 @@ ] }, "ApplianceReagentProcessor": { + "templateType": "ItemConsumer", "prefab": { "prefab_name": "ApplianceReagentProcessor", "prefab_hash": 1260918085, @@ -461,6 +483,7 @@ } }, "ApplianceSeedTray": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "ApplianceSeedTray", "prefab_hash": 142831994, @@ -526,6 +549,7 @@ ] }, "ApplianceTabletDock": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "ApplianceTabletDock", "prefab_hash": 1853941363, @@ -547,6 +571,7 @@ ] }, "AutolathePrinterMod": { + "templateType": "Item", "prefab": { "prefab_name": "AutolathePrinterMod", "prefab_hash": 221058307, @@ -562,6 +587,7 @@ } }, "Battery_Wireless_cell": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "Battery_Wireless_cell", "prefab_hash": -462415758, @@ -597,6 +623,7 @@ "slots": [] }, "Battery_Wireless_cell_Big": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "Battery_Wireless_cell_Big", "prefab_hash": -41519077, @@ -632,6 +659,7 @@ "slots": [] }, "CardboardBox": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "CardboardBox", "prefab_hash": -1976947556, @@ -673,6 +701,7 @@ ] }, "CartridgeAccessController": { + "templateType": "Item", "prefab": { "prefab_name": "CartridgeAccessController", "prefab_hash": -1634532552, @@ -688,6 +717,7 @@ } }, "CartridgeAtmosAnalyser": { + "templateType": "Item", "prefab": { "prefab_name": "CartridgeAtmosAnalyser", "prefab_hash": -1550278665, @@ -703,6 +733,7 @@ } }, "CartridgeConfiguration": { + "templateType": "Item", "prefab": { "prefab_name": "CartridgeConfiguration", "prefab_hash": -932136011, @@ -718,6 +749,7 @@ } }, "CartridgeElectronicReader": { + "templateType": "Item", "prefab": { "prefab_name": "CartridgeElectronicReader", "prefab_hash": -1462180176, @@ -733,6 +765,7 @@ } }, "CartridgeGPS": { + "templateType": "Item", "prefab": { "prefab_name": "CartridgeGPS", "prefab_hash": -1957063345, @@ -748,6 +781,7 @@ } }, "CartridgeGuide": { + "templateType": "Item", "prefab": { "prefab_name": "CartridgeGuide", "prefab_hash": 872720793, @@ -763,6 +797,7 @@ } }, "CartridgeMedicalAnalyser": { + "templateType": "Item", "prefab": { "prefab_name": "CartridgeMedicalAnalyser", "prefab_hash": -1116110181, @@ -778,6 +813,7 @@ } }, "CartridgeNetworkAnalyser": { + "templateType": "Item", "prefab": { "prefab_name": "CartridgeNetworkAnalyser", "prefab_hash": 1606989119, @@ -793,6 +829,7 @@ } }, "CartridgeOreScanner": { + "templateType": "Item", "prefab": { "prefab_name": "CartridgeOreScanner", "prefab_hash": -1768732546, @@ -808,6 +845,7 @@ } }, "CartridgeOreScannerColor": { + "templateType": "Item", "prefab": { "prefab_name": "CartridgeOreScannerColor", "prefab_hash": 1738236580, @@ -823,6 +861,7 @@ } }, "CartridgePlantAnalyser": { + "templateType": "Item", "prefab": { "prefab_name": "CartridgePlantAnalyser", "prefab_hash": 1101328282, @@ -838,6 +877,7 @@ } }, "CartridgeTracker": { + "templateType": "Item", "prefab": { "prefab_name": "CartridgeTracker", "prefab_hash": 81488783, @@ -853,6 +893,7 @@ } }, "CircuitboardAdvAirlockControl": { + "templateType": "Item", "prefab": { "prefab_name": "CircuitboardAdvAirlockControl", "prefab_hash": 1633663176, @@ -868,6 +909,7 @@ } }, "CircuitboardAirControl": { + "templateType": "Item", "prefab": { "prefab_name": "CircuitboardAirControl", "prefab_hash": 1618019559, @@ -883,6 +925,7 @@ } }, "CircuitboardAirlockControl": { + "templateType": "Item", "prefab": { "prefab_name": "CircuitboardAirlockControl", "prefab_hash": 912176135, @@ -898,6 +941,7 @@ } }, "CircuitboardCameraDisplay": { + "templateType": "Item", "prefab": { "prefab_name": "CircuitboardCameraDisplay", "prefab_hash": -412104504, @@ -913,6 +957,7 @@ } }, "CircuitboardDoorControl": { + "templateType": "Item", "prefab": { "prefab_name": "CircuitboardDoorControl", "prefab_hash": 855694771, @@ -928,6 +973,7 @@ } }, "CircuitboardGasDisplay": { + "templateType": "Item", "prefab": { "prefab_name": "CircuitboardGasDisplay", "prefab_hash": -82343730, @@ -943,6 +989,7 @@ } }, "CircuitboardGraphDisplay": { + "templateType": "Item", "prefab": { "prefab_name": "CircuitboardGraphDisplay", "prefab_hash": 1344368806, @@ -958,6 +1005,7 @@ } }, "CircuitboardHashDisplay": { + "templateType": "Item", "prefab": { "prefab_name": "CircuitboardHashDisplay", "prefab_hash": 1633074601, @@ -973,6 +1021,7 @@ } }, "CircuitboardModeControl": { + "templateType": "Item", "prefab": { "prefab_name": "CircuitboardModeControl", "prefab_hash": -1134148135, @@ -988,6 +1037,7 @@ } }, "CircuitboardPowerControl": { + "templateType": "Item", "prefab": { "prefab_name": "CircuitboardPowerControl", "prefab_hash": -1923778429, @@ -1003,6 +1053,7 @@ } }, "CircuitboardShipDisplay": { + "templateType": "Item", "prefab": { "prefab_name": "CircuitboardShipDisplay", "prefab_hash": -2044446819, @@ -1018,6 +1069,7 @@ } }, "CircuitboardSolarControl": { + "templateType": "Item", "prefab": { "prefab_name": "CircuitboardSolarControl", "prefab_hash": 2020180320, @@ -1033,6 +1085,7 @@ } }, "CompositeRollCover": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "CompositeRollCover", "prefab_hash": 1228794916, @@ -1077,6 +1130,7 @@ } }, "CrateMkII": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "CrateMkII", "prefab_hash": 8709219, @@ -1134,6 +1188,7 @@ ] }, "DecayedFood": { + "templateType": "Item", "prefab": { "prefab_name": "DecayedFood", "prefab_hash": 1531087544, @@ -1149,6 +1204,7 @@ } }, "DeviceLfoVolume": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "DeviceLfoVolume", "prefab_hash": -1844430312, @@ -1207,6 +1263,7 @@ } }, "DeviceStepUnit": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "DeviceStepUnit", "prefab_hash": 1762696475, @@ -1387,6 +1444,7 @@ } }, "DynamicAirConditioner": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicAirConditioner", "prefab_hash": 519913639, @@ -1412,6 +1470,7 @@ ] }, "DynamicCrate": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicCrate", "prefab_hash": 1941079206, @@ -1469,6 +1528,7 @@ ] }, "DynamicGPR": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "DynamicGPR", "prefab_hash": -2085885850, @@ -1514,6 +1574,7 @@ ] }, "DynamicGasCanisterAir": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicGasCanisterAir", "prefab_hash": -1713611165, @@ -1539,6 +1600,7 @@ ] }, "DynamicGasCanisterCarbonDioxide": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicGasCanisterCarbonDioxide", "prefab_hash": -322413931, @@ -1564,6 +1626,7 @@ ] }, "DynamicGasCanisterEmpty": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicGasCanisterEmpty", "prefab_hash": -1741267161, @@ -1589,6 +1652,7 @@ ] }, "DynamicGasCanisterFuel": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicGasCanisterFuel", "prefab_hash": -817051527, @@ -1614,6 +1678,7 @@ ] }, "DynamicGasCanisterNitrogen": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicGasCanisterNitrogen", "prefab_hash": 121951301, @@ -1639,6 +1704,7 @@ ] }, "DynamicGasCanisterNitrousOxide": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicGasCanisterNitrousOxide", "prefab_hash": 30727200, @@ -1664,6 +1730,7 @@ ] }, "DynamicGasCanisterOxygen": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicGasCanisterOxygen", "prefab_hash": 1360925836, @@ -1689,6 +1756,7 @@ ] }, "DynamicGasCanisterPollutants": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicGasCanisterPollutants", "prefab_hash": 396065382, @@ -1714,6 +1782,7 @@ ] }, "DynamicGasCanisterRocketFuel": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicGasCanisterRocketFuel", "prefab_hash": -8883951, @@ -1739,6 +1808,7 @@ ] }, "DynamicGasCanisterVolatiles": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicGasCanisterVolatiles", "prefab_hash": 108086870, @@ -1764,6 +1834,7 @@ ] }, "DynamicGasCanisterWater": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicGasCanisterWater", "prefab_hash": 197293625, @@ -1789,6 +1860,7 @@ ] }, "DynamicGasTankAdvanced": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicGasTankAdvanced", "prefab_hash": -386375420, @@ -1814,6 +1886,7 @@ ] }, "DynamicGasTankAdvancedOxygen": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicGasTankAdvancedOxygen", "prefab_hash": -1264455519, @@ -1839,6 +1912,7 @@ ] }, "DynamicGenerator": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicGenerator", "prefab_hash": -82087220, @@ -1868,6 +1942,7 @@ ] }, "DynamicHydroponics": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicHydroponics", "prefab_hash": 587726607, @@ -1925,6 +2000,7 @@ ] }, "DynamicLight": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "DynamicLight", "prefab_hash": -21970188, @@ -1971,6 +2047,7 @@ ] }, "DynamicLiquidCanisterEmpty": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicLiquidCanisterEmpty", "prefab_hash": -1939209112, @@ -1996,6 +2073,7 @@ ] }, "DynamicMKIILiquidCanisterEmpty": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicMKIILiquidCanisterEmpty", "prefab_hash": 2130739600, @@ -2021,6 +2099,7 @@ ] }, "DynamicMKIILiquidCanisterWater": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicMKIILiquidCanisterWater", "prefab_hash": -319510386, @@ -2046,6 +2125,7 @@ ] }, "DynamicScrubber": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "DynamicScrubber", "prefab_hash": 755048589, @@ -2079,6 +2159,7 @@ ] }, "DynamicSkeleton": { + "templateType": "Item", "prefab": { "prefab_name": "DynamicSkeleton", "prefab_hash": 106953348, @@ -2094,6 +2175,7 @@ } }, "ElectronicPrinterMod": { + "templateType": "Item", "prefab": { "prefab_name": "ElectronicPrinterMod", "prefab_hash": -311170652, @@ -2109,6 +2191,7 @@ } }, "ElevatorCarrage": { + "templateType": "Item", "prefab": { "prefab_name": "ElevatorCarrage", "prefab_hash": -110788403, @@ -2124,6 +2207,7 @@ } }, "EntityChick": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "EntityChick", "prefab_hash": 1730165908, @@ -2149,6 +2233,7 @@ ] }, "EntityChickenBrown": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "EntityChickenBrown", "prefab_hash": 334097180, @@ -2174,6 +2259,7 @@ ] }, "EntityChickenWhite": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "EntityChickenWhite", "prefab_hash": 1010807532, @@ -2199,6 +2285,7 @@ ] }, "EntityRoosterBlack": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "EntityRoosterBlack", "prefab_hash": 966959649, @@ -2224,6 +2311,7 @@ ] }, "EntityRoosterBrown": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "EntityRoosterBrown", "prefab_hash": -583103395, @@ -2249,6 +2337,7 @@ ] }, "Fertilizer": { + "templateType": "Item", "prefab": { "prefab_name": "Fertilizer", "prefab_hash": 1517856652, @@ -2264,6 +2353,7 @@ } }, "FireArmSMG": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "FireArmSMG", "prefab_hash": -86315541, @@ -2285,6 +2375,7 @@ ] }, "Flag_ODA_10m": { + "templateType": "Structure", "prefab": { "prefab_name": "Flag_ODA_10m", "prefab_hash": 1845441951, @@ -2296,6 +2387,7 @@ } }, "Flag_ODA_4m": { + "templateType": "Structure", "prefab": { "prefab_name": "Flag_ODA_4m", "prefab_hash": 1159126354, @@ -2307,6 +2399,7 @@ } }, "Flag_ODA_6m": { + "templateType": "Structure", "prefab": { "prefab_name": "Flag_ODA_6m", "prefab_hash": 1998634960, @@ -2318,6 +2411,7 @@ } }, "Flag_ODA_8m": { + "templateType": "Structure", "prefab": { "prefab_name": "Flag_ODA_8m", "prefab_hash": -375156130, @@ -2329,6 +2423,7 @@ } }, "FlareGun": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "FlareGun", "prefab_hash": 118685786, @@ -2354,6 +2449,7 @@ ] }, "H2Combustor": { + "templateType": "StructureCircuitHolder", "prefab": { "prefab_name": "H2Combustor", "prefab_hash": 1840108251, @@ -2489,6 +2585,7 @@ } }, "Handgun": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "Handgun", "prefab_hash": 247238062, @@ -2510,6 +2607,7 @@ ] }, "HandgunMagazine": { + "templateType": "Item", "prefab": { "prefab_name": "HandgunMagazine", "prefab_hash": 1254383185, @@ -2525,6 +2623,7 @@ } }, "HumanSkull": { + "templateType": "Item", "prefab": { "prefab_name": "HumanSkull", "prefab_hash": -857713709, @@ -2540,6 +2639,7 @@ } }, "ImGuiCircuitboardAirlockControl": { + "templateType": "Item", "prefab": { "prefab_name": "ImGuiCircuitboardAirlockControl", "prefab_hash": -73796547, @@ -2555,6 +2655,7 @@ } }, "ItemActiveVent": { + "templateType": "Item", "prefab": { "prefab_name": "ItemActiveVent", "prefab_hash": -842048328, @@ -2570,6 +2671,7 @@ } }, "ItemAdhesiveInsulation": { + "templateType": "Item", "prefab": { "prefab_name": "ItemAdhesiveInsulation", "prefab_hash": 1871048978, @@ -2585,6 +2687,7 @@ } }, "ItemAdvancedTablet": { + "templateType": "ItemCircuitHolder", "prefab": { "prefab_name": "ItemAdvancedTablet", "prefab_hash": 1722785341, @@ -2676,6 +2779,7 @@ ] }, "ItemAlienMushroom": { + "templateType": "Item", "prefab": { "prefab_name": "ItemAlienMushroom", "prefab_hash": 176446172, @@ -2691,6 +2795,7 @@ } }, "ItemAmmoBox": { + "templateType": "Item", "prefab": { "prefab_name": "ItemAmmoBox", "prefab_hash": -9559091, @@ -2706,6 +2811,7 @@ } }, "ItemAngleGrinder": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemAngleGrinder", "prefab_hash": 201215010, @@ -2750,6 +2856,7 @@ ] }, "ItemArcWelder": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemArcWelder", "prefab_hash": 1385062886, @@ -2794,6 +2901,7 @@ ] }, "ItemAreaPowerControl": { + "templateType": "Item", "prefab": { "prefab_name": "ItemAreaPowerControl", "prefab_hash": 1757673317, @@ -2809,6 +2917,7 @@ } }, "ItemAstroloyIngot": { + "templateType": "Item", "prefab": { "prefab_name": "ItemAstroloyIngot", "prefab_hash": 412924554, @@ -2827,6 +2936,7 @@ } }, "ItemAstroloySheets": { + "templateType": "Item", "prefab": { "prefab_name": "ItemAstroloySheets", "prefab_hash": -1662476145, @@ -2842,6 +2952,7 @@ } }, "ItemAuthoringTool": { + "templateType": "Item", "prefab": { "prefab_name": "ItemAuthoringTool", "prefab_hash": 789015045, @@ -2857,6 +2968,7 @@ } }, "ItemAuthoringToolRocketNetwork": { + "templateType": "Item", "prefab": { "prefab_name": "ItemAuthoringToolRocketNetwork", "prefab_hash": -1731627004, @@ -2872,6 +2984,7 @@ } }, "ItemBasketBall": { + "templateType": "Item", "prefab": { "prefab_name": "ItemBasketBall", "prefab_hash": -1262580790, @@ -2887,6 +3000,7 @@ } }, "ItemBatteryCell": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemBatteryCell", "prefab_hash": 700133157, @@ -2922,6 +3036,7 @@ "slots": [] }, "ItemBatteryCellLarge": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemBatteryCellLarge", "prefab_hash": -459827268, @@ -2957,6 +3072,7 @@ "slots": [] }, "ItemBatteryCellNuclear": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemBatteryCellNuclear", "prefab_hash": 544617306, @@ -2992,6 +3108,7 @@ "slots": [] }, "ItemBatteryCharger": { + "templateType": "Item", "prefab": { "prefab_name": "ItemBatteryCharger", "prefab_hash": -1866880307, @@ -3007,6 +3124,7 @@ } }, "ItemBatteryChargerSmall": { + "templateType": "Item", "prefab": { "prefab_name": "ItemBatteryChargerSmall", "prefab_hash": 1008295833, @@ -3022,6 +3140,7 @@ } }, "ItemBeacon": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemBeacon", "prefab_hash": -869869491, @@ -3067,6 +3186,7 @@ ] }, "ItemBiomass": { + "templateType": "Item", "prefab": { "prefab_name": "ItemBiomass", "prefab_hash": -831480639, @@ -3085,6 +3205,7 @@ } }, "ItemBreadLoaf": { + "templateType": "Item", "prefab": { "prefab_name": "ItemBreadLoaf", "prefab_hash": 893514943, @@ -3100,6 +3221,7 @@ } }, "ItemCableAnalyser": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCableAnalyser", "prefab_hash": -1792787349, @@ -3115,6 +3237,7 @@ } }, "ItemCableCoil": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCableCoil", "prefab_hash": -466050668, @@ -3130,6 +3253,7 @@ } }, "ItemCableCoilHeavy": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCableCoilHeavy", "prefab_hash": 2060134443, @@ -3145,6 +3269,7 @@ } }, "ItemCableFuse": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCableFuse", "prefab_hash": 195442047, @@ -3160,6 +3285,7 @@ } }, "ItemCannedCondensedMilk": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCannedCondensedMilk", "prefab_hash": -2104175091, @@ -3175,6 +3301,7 @@ } }, "ItemCannedEdamame": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCannedEdamame", "prefab_hash": -999714082, @@ -3190,6 +3317,7 @@ } }, "ItemCannedMushroom": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCannedMushroom", "prefab_hash": -1344601965, @@ -3205,6 +3333,7 @@ } }, "ItemCannedPowderedEggs": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCannedPowderedEggs", "prefab_hash": 1161510063, @@ -3220,6 +3349,7 @@ } }, "ItemCannedRicePudding": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCannedRicePudding", "prefab_hash": -1185552595, @@ -3235,6 +3365,7 @@ } }, "ItemCerealBar": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCerealBar", "prefab_hash": 791746840, @@ -3250,6 +3381,7 @@ } }, "ItemCharcoal": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCharcoal", "prefab_hash": 252561409, @@ -3268,6 +3400,7 @@ } }, "ItemChemLightBlue": { + "templateType": "Item", "prefab": { "prefab_name": "ItemChemLightBlue", "prefab_hash": -772542081, @@ -3283,6 +3416,7 @@ } }, "ItemChemLightGreen": { + "templateType": "Item", "prefab": { "prefab_name": "ItemChemLightGreen", "prefab_hash": -597479390, @@ -3298,6 +3432,7 @@ } }, "ItemChemLightRed": { + "templateType": "Item", "prefab": { "prefab_name": "ItemChemLightRed", "prefab_hash": -525810132, @@ -3313,6 +3448,7 @@ } }, "ItemChemLightWhite": { + "templateType": "Item", "prefab": { "prefab_name": "ItemChemLightWhite", "prefab_hash": 1312166823, @@ -3328,6 +3464,7 @@ } }, "ItemChemLightYellow": { + "templateType": "Item", "prefab": { "prefab_name": "ItemChemLightYellow", "prefab_hash": 1224819963, @@ -3343,6 +3480,7 @@ } }, "ItemChocolateBar": { + "templateType": "Item", "prefab": { "prefab_name": "ItemChocolateBar", "prefab_hash": 234601764, @@ -3358,6 +3496,7 @@ } }, "ItemChocolateCake": { + "templateType": "Item", "prefab": { "prefab_name": "ItemChocolateCake", "prefab_hash": -261575861, @@ -3373,6 +3512,7 @@ } }, "ItemChocolateCerealBar": { + "templateType": "Item", "prefab": { "prefab_name": "ItemChocolateCerealBar", "prefab_hash": 860793245, @@ -3388,6 +3528,7 @@ } }, "ItemCoalOre": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCoalOre", "prefab_hash": 1724793494, @@ -3406,6 +3547,7 @@ } }, "ItemCobaltOre": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCobaltOre", "prefab_hash": -983091249, @@ -3424,6 +3566,7 @@ } }, "ItemCocoaPowder": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCocoaPowder", "prefab_hash": 457286516, @@ -3442,6 +3585,7 @@ } }, "ItemCocoaTree": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCocoaTree", "prefab_hash": 680051921, @@ -3460,6 +3604,7 @@ } }, "ItemCoffeeMug": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCoffeeMug", "prefab_hash": 1800622698, @@ -3475,6 +3620,7 @@ } }, "ItemConstantanIngot": { + "templateType": "Item", "prefab": { "prefab_name": "ItemConstantanIngot", "prefab_hash": 1058547521, @@ -3493,6 +3639,7 @@ } }, "ItemCookedCondensedMilk": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCookedCondensedMilk", "prefab_hash": 1715917521, @@ -3511,6 +3658,7 @@ } }, "ItemCookedCorn": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCookedCorn", "prefab_hash": 1344773148, @@ -3529,6 +3677,7 @@ } }, "ItemCookedMushroom": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCookedMushroom", "prefab_hash": -1076892658, @@ -3547,6 +3696,7 @@ } }, "ItemCookedPowderedEggs": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCookedPowderedEggs", "prefab_hash": -1712264413, @@ -3565,6 +3715,7 @@ } }, "ItemCookedPumpkin": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCookedPumpkin", "prefab_hash": 1849281546, @@ -3583,6 +3734,7 @@ } }, "ItemCookedRice": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCookedRice", "prefab_hash": 2013539020, @@ -3601,6 +3753,7 @@ } }, "ItemCookedSoybean": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCookedSoybean", "prefab_hash": 1353449022, @@ -3619,6 +3772,7 @@ } }, "ItemCookedTomato": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCookedTomato", "prefab_hash": -709086714, @@ -3637,6 +3791,7 @@ } }, "ItemCopperIngot": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCopperIngot", "prefab_hash": -404336834, @@ -3655,6 +3810,7 @@ } }, "ItemCopperOre": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCopperOre", "prefab_hash": -707307845, @@ -3673,6 +3829,7 @@ } }, "ItemCorn": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCorn", "prefab_hash": 258339687, @@ -3691,6 +3848,7 @@ } }, "ItemCornSoup": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCornSoup", "prefab_hash": 545034114, @@ -3706,6 +3864,7 @@ } }, "ItemCreditCard": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCreditCard", "prefab_hash": -1756772618, @@ -3721,6 +3880,7 @@ } }, "ItemCropHay": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCropHay", "prefab_hash": 215486157, @@ -3736,6 +3896,7 @@ } }, "ItemCrowbar": { + "templateType": "Item", "prefab": { "prefab_name": "ItemCrowbar", "prefab_hash": 856108234, @@ -3751,6 +3912,7 @@ } }, "ItemDataDisk": { + "templateType": "Item", "prefab": { "prefab_name": "ItemDataDisk", "prefab_hash": 1005843700, @@ -3766,6 +3928,7 @@ } }, "ItemDirtCanister": { + "templateType": "Item", "prefab": { "prefab_name": "ItemDirtCanister", "prefab_hash": 902565329, @@ -3781,6 +3944,7 @@ } }, "ItemDirtyOre": { + "templateType": "Item", "prefab": { "prefab_name": "ItemDirtyOre", "prefab_hash": -1234745580, @@ -3796,6 +3960,7 @@ } }, "ItemDisposableBatteryCharger": { + "templateType": "Item", "prefab": { "prefab_name": "ItemDisposableBatteryCharger", "prefab_hash": -2124435700, @@ -3811,6 +3976,7 @@ } }, "ItemDrill": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemDrill", "prefab_hash": 2009673399, @@ -3855,6 +4021,7 @@ ] }, "ItemDuctTape": { + "templateType": "Item", "prefab": { "prefab_name": "ItemDuctTape", "prefab_hash": -1943134693, @@ -3870,6 +4037,7 @@ } }, "ItemDynamicAirCon": { + "templateType": "Item", "prefab": { "prefab_name": "ItemDynamicAirCon", "prefab_hash": 1072914031, @@ -3885,6 +4053,7 @@ } }, "ItemDynamicScrubber": { + "templateType": "Item", "prefab": { "prefab_name": "ItemDynamicScrubber", "prefab_hash": -971920158, @@ -3900,6 +4069,7 @@ } }, "ItemEggCarton": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "ItemEggCarton", "prefab_hash": -524289310, @@ -3941,6 +4111,7 @@ ] }, "ItemElectronicParts": { + "templateType": "Item", "prefab": { "prefab_name": "ItemElectronicParts", "prefab_hash": 731250882, @@ -3956,6 +4127,7 @@ } }, "ItemElectrumIngot": { + "templateType": "Item", "prefab": { "prefab_name": "ItemElectrumIngot", "prefab_hash": 502280180, @@ -3974,6 +4146,7 @@ } }, "ItemEmergencyAngleGrinder": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemEmergencyAngleGrinder", "prefab_hash": -351438780, @@ -4018,6 +4191,7 @@ ] }, "ItemEmergencyArcWelder": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemEmergencyArcWelder", "prefab_hash": -1056029600, @@ -4062,6 +4236,7 @@ ] }, "ItemEmergencyCrowbar": { + "templateType": "Item", "prefab": { "prefab_name": "ItemEmergencyCrowbar", "prefab_hash": 976699731, @@ -4077,6 +4252,7 @@ } }, "ItemEmergencyDrill": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemEmergencyDrill", "prefab_hash": -2052458905, @@ -4121,6 +4297,7 @@ ] }, "ItemEmergencyEvaSuit": { + "templateType": "ItemSuit", "prefab": { "prefab_name": "ItemEmergencyEvaSuit", "prefab_hash": 1791306431, @@ -4173,6 +4350,7 @@ } }, "ItemEmergencyPickaxe": { + "templateType": "Item", "prefab": { "prefab_name": "ItemEmergencyPickaxe", "prefab_hash": -1061510408, @@ -4188,6 +4366,7 @@ } }, "ItemEmergencyScrewdriver": { + "templateType": "Item", "prefab": { "prefab_name": "ItemEmergencyScrewdriver", "prefab_hash": 266099983, @@ -4203,6 +4382,7 @@ } }, "ItemEmergencySpaceHelmet": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemEmergencySpaceHelmet", "prefab_hash": 205916793, @@ -4263,6 +4443,7 @@ "slots": [] }, "ItemEmergencyToolBelt": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "ItemEmergencyToolBelt", "prefab_hash": 1661941301, @@ -4312,6 +4493,7 @@ ] }, "ItemEmergencyWireCutters": { + "templateType": "Item", "prefab": { "prefab_name": "ItemEmergencyWireCutters", "prefab_hash": 2102803952, @@ -4327,6 +4509,7 @@ } }, "ItemEmergencyWrench": { + "templateType": "Item", "prefab": { "prefab_name": "ItemEmergencyWrench", "prefab_hash": 162553030, @@ -4342,6 +4525,7 @@ } }, "ItemEmptyCan": { + "templateType": "Item", "prefab": { "prefab_name": "ItemEmptyCan", "prefab_hash": 1013818348, @@ -4360,6 +4544,7 @@ } }, "ItemEvaSuit": { + "templateType": "ItemSuit", "prefab": { "prefab_name": "ItemEvaSuit", "prefab_hash": 1677018918, @@ -4412,6 +4597,7 @@ } }, "ItemExplosive": { + "templateType": "Item", "prefab": { "prefab_name": "ItemExplosive", "prefab_hash": 235361649, @@ -4427,6 +4613,7 @@ } }, "ItemFern": { + "templateType": "Item", "prefab": { "prefab_name": "ItemFern", "prefab_hash": 892110467, @@ -4445,6 +4632,7 @@ } }, "ItemFertilizedEgg": { + "templateType": "Item", "prefab": { "prefab_name": "ItemFertilizedEgg", "prefab_hash": -383972371, @@ -4463,6 +4651,7 @@ } }, "ItemFilterFern": { + "templateType": "Item", "prefab": { "prefab_name": "ItemFilterFern", "prefab_hash": 266654416, @@ -4478,6 +4667,7 @@ } }, "ItemFlagSmall": { + "templateType": "Item", "prefab": { "prefab_name": "ItemFlagSmall", "prefab_hash": 2011191088, @@ -4493,6 +4683,7 @@ } }, "ItemFlashingLight": { + "templateType": "Item", "prefab": { "prefab_name": "ItemFlashingLight", "prefab_hash": -2107840748, @@ -4508,6 +4699,7 @@ } }, "ItemFlashlight": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemFlashlight", "prefab_hash": -838472102, @@ -4557,6 +4749,7 @@ ] }, "ItemFlour": { + "templateType": "Item", "prefab": { "prefab_name": "ItemFlour", "prefab_hash": -665995854, @@ -4575,6 +4768,7 @@ } }, "ItemFlowerBlue": { + "templateType": "Item", "prefab": { "prefab_name": "ItemFlowerBlue", "prefab_hash": -1573623434, @@ -4590,6 +4784,7 @@ } }, "ItemFlowerGreen": { + "templateType": "Item", "prefab": { "prefab_name": "ItemFlowerGreen", "prefab_hash": -1513337058, @@ -4605,6 +4800,7 @@ } }, "ItemFlowerOrange": { + "templateType": "Item", "prefab": { "prefab_name": "ItemFlowerOrange", "prefab_hash": -1411986716, @@ -4620,6 +4816,7 @@ } }, "ItemFlowerRed": { + "templateType": "Item", "prefab": { "prefab_name": "ItemFlowerRed", "prefab_hash": -81376085, @@ -4635,6 +4832,7 @@ } }, "ItemFlowerYellow": { + "templateType": "Item", "prefab": { "prefab_name": "ItemFlowerYellow", "prefab_hash": 1712822019, @@ -4650,6 +4848,7 @@ } }, "ItemFrenchFries": { + "templateType": "Item", "prefab": { "prefab_name": "ItemFrenchFries", "prefab_hash": -57608687, @@ -4665,6 +4864,7 @@ } }, "ItemFries": { + "templateType": "Item", "prefab": { "prefab_name": "ItemFries", "prefab_hash": 1371786091, @@ -4680,6 +4880,7 @@ } }, "ItemGasCanisterCarbonDioxide": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasCanisterCarbonDioxide", "prefab_hash": -767685874, @@ -4702,6 +4903,7 @@ } }, "ItemGasCanisterEmpty": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasCanisterEmpty", "prefab_hash": 42280099, @@ -4724,6 +4926,7 @@ } }, "ItemGasCanisterFuel": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasCanisterFuel", "prefab_hash": -1014695176, @@ -4746,6 +4949,7 @@ } }, "ItemGasCanisterNitrogen": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasCanisterNitrogen", "prefab_hash": 2145068424, @@ -4768,6 +4972,7 @@ } }, "ItemGasCanisterNitrousOxide": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasCanisterNitrousOxide", "prefab_hash": -1712153401, @@ -4790,6 +4995,7 @@ } }, "ItemGasCanisterOxygen": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasCanisterOxygen", "prefab_hash": -1152261938, @@ -4812,6 +5018,7 @@ } }, "ItemGasCanisterPollutants": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasCanisterPollutants", "prefab_hash": -1552586384, @@ -4834,6 +5041,7 @@ } }, "ItemGasCanisterSmart": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasCanisterSmart", "prefab_hash": -668314371, @@ -4856,6 +5064,7 @@ } }, "ItemGasCanisterVolatiles": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasCanisterVolatiles", "prefab_hash": -472094806, @@ -4878,6 +5087,7 @@ } }, "ItemGasCanisterWater": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasCanisterWater", "prefab_hash": -1854861891, @@ -4900,6 +5110,7 @@ } }, "ItemGasFilterCarbonDioxide": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterCarbonDioxide", "prefab_hash": 1635000764, @@ -4916,6 +5127,7 @@ } }, "ItemGasFilterCarbonDioxideInfinite": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterCarbonDioxideInfinite", "prefab_hash": -185568964, @@ -4932,6 +5144,7 @@ } }, "ItemGasFilterCarbonDioxideL": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterCarbonDioxideL", "prefab_hash": 1876847024, @@ -4948,6 +5161,7 @@ } }, "ItemGasFilterCarbonDioxideM": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterCarbonDioxideM", "prefab_hash": 416897318, @@ -4964,6 +5178,7 @@ } }, "ItemGasFilterNitrogen": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterNitrogen", "prefab_hash": 632853248, @@ -4980,6 +5195,7 @@ } }, "ItemGasFilterNitrogenInfinite": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterNitrogenInfinite", "prefab_hash": 152751131, @@ -4996,6 +5212,7 @@ } }, "ItemGasFilterNitrogenL": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterNitrogenL", "prefab_hash": -1387439451, @@ -5012,6 +5229,7 @@ } }, "ItemGasFilterNitrogenM": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterNitrogenM", "prefab_hash": -632657357, @@ -5028,6 +5246,7 @@ } }, "ItemGasFilterNitrousOxide": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterNitrousOxide", "prefab_hash": -1247674305, @@ -5044,6 +5263,7 @@ } }, "ItemGasFilterNitrousOxideInfinite": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterNitrousOxideInfinite", "prefab_hash": -123934842, @@ -5060,6 +5280,7 @@ } }, "ItemGasFilterNitrousOxideL": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterNitrousOxideL", "prefab_hash": 465267979, @@ -5076,6 +5297,7 @@ } }, "ItemGasFilterNitrousOxideM": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterNitrousOxideM", "prefab_hash": 1824284061, @@ -5092,6 +5314,7 @@ } }, "ItemGasFilterOxygen": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterOxygen", "prefab_hash": -721824748, @@ -5108,6 +5331,7 @@ } }, "ItemGasFilterOxygenInfinite": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterOxygenInfinite", "prefab_hash": -1055451111, @@ -5124,6 +5348,7 @@ } }, "ItemGasFilterOxygenL": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterOxygenL", "prefab_hash": -1217998945, @@ -5140,6 +5365,7 @@ } }, "ItemGasFilterOxygenM": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterOxygenM", "prefab_hash": -1067319543, @@ -5156,6 +5382,7 @@ } }, "ItemGasFilterPollutants": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterPollutants", "prefab_hash": 1915566057, @@ -5172,6 +5399,7 @@ } }, "ItemGasFilterPollutantsInfinite": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterPollutantsInfinite", "prefab_hash": -503738105, @@ -5188,6 +5416,7 @@ } }, "ItemGasFilterPollutantsL": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterPollutantsL", "prefab_hash": 1959564765, @@ -5204,6 +5433,7 @@ } }, "ItemGasFilterPollutantsM": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterPollutantsM", "prefab_hash": 63677771, @@ -5220,6 +5450,7 @@ } }, "ItemGasFilterVolatiles": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterVolatiles", "prefab_hash": 15011598, @@ -5236,6 +5467,7 @@ } }, "ItemGasFilterVolatilesInfinite": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterVolatilesInfinite", "prefab_hash": -1916176068, @@ -5252,6 +5484,7 @@ } }, "ItemGasFilterVolatilesL": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterVolatilesL", "prefab_hash": 1255156286, @@ -5268,6 +5501,7 @@ } }, "ItemGasFilterVolatilesM": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterVolatilesM", "prefab_hash": 1037507240, @@ -5284,6 +5518,7 @@ } }, "ItemGasFilterWater": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterWater", "prefab_hash": -1993197973, @@ -5300,6 +5535,7 @@ } }, "ItemGasFilterWaterInfinite": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterWaterInfinite", "prefab_hash": -1678456554, @@ -5316,6 +5552,7 @@ } }, "ItemGasFilterWaterL": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterWaterL", "prefab_hash": 2004969680, @@ -5332,6 +5569,7 @@ } }, "ItemGasFilterWaterM": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasFilterWaterM", "prefab_hash": 8804422, @@ -5348,6 +5586,7 @@ } }, "ItemGasSensor": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasSensor", "prefab_hash": 1717593480, @@ -5363,6 +5602,7 @@ } }, "ItemGasTankStorage": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGasTankStorage", "prefab_hash": -2113012215, @@ -5378,6 +5618,7 @@ } }, "ItemGlassSheets": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGlassSheets", "prefab_hash": 1588896491, @@ -5393,6 +5634,7 @@ } }, "ItemGlasses": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGlasses", "prefab_hash": -1068925231, @@ -5408,6 +5650,7 @@ } }, "ItemGoldIngot": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGoldIngot", "prefab_hash": 226410516, @@ -5426,6 +5669,7 @@ } }, "ItemGoldOre": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGoldOre", "prefab_hash": -1348105509, @@ -5444,6 +5688,7 @@ } }, "ItemGrenade": { + "templateType": "Item", "prefab": { "prefab_name": "ItemGrenade", "prefab_hash": 1544275894, @@ -5459,6 +5704,7 @@ } }, "ItemHEMDroidRepairKit": { + "templateType": "Item", "prefab": { "prefab_name": "ItemHEMDroidRepairKit", "prefab_hash": 470636008, @@ -5474,6 +5720,7 @@ } }, "ItemHardBackpack": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemHardBackpack", "prefab_hash": 374891127, @@ -5657,6 +5904,7 @@ ] }, "ItemHardJetpack": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemHardJetpack", "prefab_hash": -412551656, @@ -5883,6 +6131,7 @@ ] }, "ItemHardMiningBackPack": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "ItemHardMiningBackPack", "prefab_hash": 900366130, @@ -6012,6 +6261,7 @@ ] }, "ItemHardSuit": { + "templateType": "ItemSuitCircuitHolder", "prefab": { "prefab_name": "ItemHardSuit", "prefab_hash": -1758310454, @@ -6212,12 +6462,13 @@ "hygine_reduction_multiplier": 1.5, "waste_max_pressure": 4053.0 }, - "memory": {, + "memory": { "memory_access": "ReadWrite", "memory_size": 0 } }, "ItemHardsuitHelmet": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemHardsuitHelmet", "prefab_hash": -84573099, @@ -6278,6 +6529,7 @@ "slots": [] }, "ItemHastelloyIngot": { + "templateType": "Item", "prefab": { "prefab_name": "ItemHastelloyIngot", "prefab_hash": 1579842814, @@ -6296,6 +6548,7 @@ } }, "ItemHat": { + "templateType": "Item", "prefab": { "prefab_name": "ItemHat", "prefab_hash": 299189339, @@ -6311,6 +6564,7 @@ } }, "ItemHighVolumeGasCanisterEmpty": { + "templateType": "Item", "prefab": { "prefab_name": "ItemHighVolumeGasCanisterEmpty", "prefab_hash": 998653377, @@ -6333,6 +6587,7 @@ } }, "ItemHorticultureBelt": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "ItemHorticultureBelt", "prefab_hash": -1117581553, @@ -6390,6 +6645,7 @@ ] }, "ItemHydroponicTray": { + "templateType": "Item", "prefab": { "prefab_name": "ItemHydroponicTray", "prefab_hash": -1193543727, @@ -6405,6 +6661,7 @@ } }, "ItemIce": { + "templateType": "Item", "prefab": { "prefab_name": "ItemIce", "prefab_hash": 1217489948, @@ -6420,6 +6677,7 @@ } }, "ItemIgniter": { + "templateType": "Item", "prefab": { "prefab_name": "ItemIgniter", "prefab_hash": 890106742, @@ -6435,6 +6693,7 @@ } }, "ItemInconelIngot": { + "templateType": "Item", "prefab": { "prefab_name": "ItemInconelIngot", "prefab_hash": -787796599, @@ -6453,6 +6712,7 @@ } }, "ItemInsulation": { + "templateType": "Item", "prefab": { "prefab_name": "ItemInsulation", "prefab_hash": 897176943, @@ -6468,6 +6728,7 @@ } }, "ItemIntegratedCircuit10": { + "templateType": "ItemLogicMemory", "prefab": { "prefab_name": "ItemIntegratedCircuit10", "prefab_hash": -744098481, @@ -6492,12 +6753,13 @@ "circuit_holder": false }, "slots": [], - "memory": {, + "memory": { "memory_access": "ReadWrite", "memory_size": 512 } }, "ItemInvarIngot": { + "templateType": "Item", "prefab": { "prefab_name": "ItemInvarIngot", "prefab_hash": -297990285, @@ -6516,6 +6778,7 @@ } }, "ItemIronFrames": { + "templateType": "Item", "prefab": { "prefab_name": "ItemIronFrames", "prefab_hash": 1225836666, @@ -6531,6 +6794,7 @@ } }, "ItemIronIngot": { + "templateType": "Item", "prefab": { "prefab_name": "ItemIronIngot", "prefab_hash": -1301215609, @@ -6549,6 +6813,7 @@ } }, "ItemIronOre": { + "templateType": "Item", "prefab": { "prefab_name": "ItemIronOre", "prefab_hash": 1758427767, @@ -6567,6 +6832,7 @@ } }, "ItemIronSheets": { + "templateType": "Item", "prefab": { "prefab_name": "ItemIronSheets", "prefab_hash": -487378546, @@ -6582,6 +6848,7 @@ } }, "ItemJetpackBasic": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemJetpackBasic", "prefab_hash": 1969189000, @@ -6743,6 +7010,7 @@ ] }, "ItemKitAIMeE": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitAIMeE", "prefab_hash": 496830914, @@ -6758,6 +7026,7 @@ } }, "ItemKitAccessBridge": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitAccessBridge", "prefab_hash": 513258369, @@ -6773,6 +7042,7 @@ } }, "ItemKitAdvancedComposter": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitAdvancedComposter", "prefab_hash": -1431998347, @@ -6788,6 +7058,7 @@ } }, "ItemKitAdvancedFurnace": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitAdvancedFurnace", "prefab_hash": -616758353, @@ -6803,6 +7074,7 @@ } }, "ItemKitAdvancedPackagingMachine": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitAdvancedPackagingMachine", "prefab_hash": -598545233, @@ -6818,6 +7090,7 @@ } }, "ItemKitAirlock": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitAirlock", "prefab_hash": 964043875, @@ -6833,6 +7106,7 @@ } }, "ItemKitAirlockGate": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitAirlockGate", "prefab_hash": 682546947, @@ -6848,6 +7122,7 @@ } }, "ItemKitArcFurnace": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitArcFurnace", "prefab_hash": -98995857, @@ -6863,6 +7138,7 @@ } }, "ItemKitAtmospherics": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitAtmospherics", "prefab_hash": 1222286371, @@ -6878,6 +7154,7 @@ } }, "ItemKitAutoMinerSmall": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitAutoMinerSmall", "prefab_hash": 1668815415, @@ -6893,6 +7170,7 @@ } }, "ItemKitAutolathe": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitAutolathe", "prefab_hash": -1753893214, @@ -6908,6 +7186,7 @@ } }, "ItemKitAutomatedOven": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitAutomatedOven", "prefab_hash": -1931958659, @@ -6923,6 +7202,7 @@ } }, "ItemKitBasket": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitBasket", "prefab_hash": 148305004, @@ -6938,6 +7218,7 @@ } }, "ItemKitBattery": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitBattery", "prefab_hash": 1406656973, @@ -6953,6 +7234,7 @@ } }, "ItemKitBatteryLarge": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitBatteryLarge", "prefab_hash": -21225041, @@ -6968,6 +7250,7 @@ } }, "ItemKitBeacon": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitBeacon", "prefab_hash": 249073136, @@ -6983,6 +7266,7 @@ } }, "ItemKitBeds": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitBeds", "prefab_hash": -1241256797, @@ -6998,6 +7282,7 @@ } }, "ItemKitBlastDoor": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitBlastDoor", "prefab_hash": -1755116240, @@ -7013,6 +7298,7 @@ } }, "ItemKitCentrifuge": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitCentrifuge", "prefab_hash": 578182956, @@ -7028,6 +7314,7 @@ } }, "ItemKitChairs": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitChairs", "prefab_hash": -1394008073, @@ -7043,6 +7330,7 @@ } }, "ItemKitChute": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitChute", "prefab_hash": 1025254665, @@ -7058,6 +7346,7 @@ } }, "ItemKitChuteUmbilical": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitChuteUmbilical", "prefab_hash": -876560854, @@ -7073,6 +7362,7 @@ } }, "ItemKitCompositeCladding": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitCompositeCladding", "prefab_hash": -1470820996, @@ -7088,6 +7378,7 @@ } }, "ItemKitCompositeFloorGrating": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitCompositeFloorGrating", "prefab_hash": 1182412869, @@ -7103,6 +7394,7 @@ } }, "ItemKitComputer": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitComputer", "prefab_hash": 1990225489, @@ -7118,6 +7410,7 @@ } }, "ItemKitConsole": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitConsole", "prefab_hash": -1241851179, @@ -7133,6 +7426,7 @@ } }, "ItemKitCrate": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitCrate", "prefab_hash": 429365598, @@ -7148,6 +7442,7 @@ } }, "ItemKitCrateMkII": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitCrateMkII", "prefab_hash": -1585956426, @@ -7163,6 +7458,7 @@ } }, "ItemKitCrateMount": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitCrateMount", "prefab_hash": -551612946, @@ -7178,6 +7474,7 @@ } }, "ItemKitCryoTube": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitCryoTube", "prefab_hash": -545234195, @@ -7193,6 +7490,7 @@ } }, "ItemKitDeepMiner": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitDeepMiner", "prefab_hash": -1935075707, @@ -7208,6 +7506,7 @@ } }, "ItemKitDockingPort": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitDockingPort", "prefab_hash": 77421200, @@ -7223,6 +7522,7 @@ } }, "ItemKitDoor": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitDoor", "prefab_hash": 168615924, @@ -7238,6 +7538,7 @@ } }, "ItemKitDrinkingFountain": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitDrinkingFountain", "prefab_hash": -1743663875, @@ -7253,6 +7554,7 @@ } }, "ItemKitDynamicCanister": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitDynamicCanister", "prefab_hash": -1061945368, @@ -7268,6 +7570,7 @@ } }, "ItemKitDynamicGasTankAdvanced": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitDynamicGasTankAdvanced", "prefab_hash": 1533501495, @@ -7283,6 +7586,7 @@ } }, "ItemKitDynamicGenerator": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitDynamicGenerator", "prefab_hash": -732720413, @@ -7298,6 +7602,7 @@ } }, "ItemKitDynamicHydroponics": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitDynamicHydroponics", "prefab_hash": -1861154222, @@ -7313,6 +7618,7 @@ } }, "ItemKitDynamicLiquidCanister": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitDynamicLiquidCanister", "prefab_hash": 375541286, @@ -7328,6 +7634,7 @@ } }, "ItemKitDynamicMKIILiquidCanister": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitDynamicMKIILiquidCanister", "prefab_hash": -638019974, @@ -7343,6 +7650,7 @@ } }, "ItemKitElectricUmbilical": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitElectricUmbilical", "prefab_hash": 1603046970, @@ -7358,6 +7666,7 @@ } }, "ItemKitElectronicsPrinter": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitElectronicsPrinter", "prefab_hash": -1181922382, @@ -7373,6 +7682,7 @@ } }, "ItemKitElevator": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitElevator", "prefab_hash": -945806652, @@ -7388,6 +7698,7 @@ } }, "ItemKitEngineLarge": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitEngineLarge", "prefab_hash": 755302726, @@ -7403,6 +7714,7 @@ } }, "ItemKitEngineMedium": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitEngineMedium", "prefab_hash": 1969312177, @@ -7418,6 +7730,7 @@ } }, "ItemKitEngineSmall": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitEngineSmall", "prefab_hash": 19645163, @@ -7433,6 +7746,7 @@ } }, "ItemKitEvaporationChamber": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitEvaporationChamber", "prefab_hash": 1587787610, @@ -7448,6 +7762,7 @@ } }, "ItemKitFlagODA": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitFlagODA", "prefab_hash": 1701764190, @@ -7463,6 +7778,7 @@ } }, "ItemKitFridgeBig": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitFridgeBig", "prefab_hash": -1168199498, @@ -7478,6 +7794,7 @@ } }, "ItemKitFridgeSmall": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitFridgeSmall", "prefab_hash": 1661226524, @@ -7493,6 +7810,7 @@ } }, "ItemKitFurnace": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitFurnace", "prefab_hash": -806743925, @@ -7508,6 +7826,7 @@ } }, "ItemKitFurniture": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitFurniture", "prefab_hash": 1162905029, @@ -7523,6 +7842,7 @@ } }, "ItemKitFuselage": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitFuselage", "prefab_hash": -366262681, @@ -7538,6 +7858,7 @@ } }, "ItemKitGasGenerator": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitGasGenerator", "prefab_hash": 377745425, @@ -7553,6 +7874,7 @@ } }, "ItemKitGasUmbilical": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitGasUmbilical", "prefab_hash": -1867280568, @@ -7568,6 +7890,7 @@ } }, "ItemKitGovernedGasRocketEngine": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitGovernedGasRocketEngine", "prefab_hash": 206848766, @@ -7583,6 +7906,7 @@ } }, "ItemKitGroundTelescope": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitGroundTelescope", "prefab_hash": -2140672772, @@ -7598,6 +7922,7 @@ } }, "ItemKitGrowLight": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitGrowLight", "prefab_hash": 341030083, @@ -7613,6 +7938,7 @@ } }, "ItemKitHarvie": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitHarvie", "prefab_hash": -1022693454, @@ -7628,6 +7954,7 @@ } }, "ItemKitHeatExchanger": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitHeatExchanger", "prefab_hash": -1710540039, @@ -7643,6 +7970,7 @@ } }, "ItemKitHorizontalAutoMiner": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitHorizontalAutoMiner", "prefab_hash": 844391171, @@ -7658,6 +7986,7 @@ } }, "ItemKitHydraulicPipeBender": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitHydraulicPipeBender", "prefab_hash": -2098556089, @@ -7673,6 +8002,7 @@ } }, "ItemKitHydroponicAutomated": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitHydroponicAutomated", "prefab_hash": -927931558, @@ -7688,6 +8018,7 @@ } }, "ItemKitHydroponicStation": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitHydroponicStation", "prefab_hash": 2057179799, @@ -7703,6 +8034,7 @@ } }, "ItemKitIceCrusher": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitIceCrusher", "prefab_hash": 288111533, @@ -7718,6 +8050,7 @@ } }, "ItemKitInsulatedLiquidPipe": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitInsulatedLiquidPipe", "prefab_hash": 2067655311, @@ -7733,6 +8066,7 @@ } }, "ItemKitInsulatedPipe": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitInsulatedPipe", "prefab_hash": 452636699, @@ -7748,6 +8082,7 @@ } }, "ItemKitInsulatedPipeUtility": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitInsulatedPipeUtility", "prefab_hash": -27284803, @@ -7763,6 +8098,7 @@ } }, "ItemKitInsulatedPipeUtilityLiquid": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitInsulatedPipeUtilityLiquid", "prefab_hash": -1831558953, @@ -7778,6 +8114,7 @@ } }, "ItemKitInteriorDoors": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitInteriorDoors", "prefab_hash": 1935945891, @@ -7793,6 +8130,7 @@ } }, "ItemKitLadder": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLadder", "prefab_hash": 489494578, @@ -7808,6 +8146,7 @@ } }, "ItemKitLandingPadAtmos": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLandingPadAtmos", "prefab_hash": 1817007843, @@ -7823,6 +8162,7 @@ } }, "ItemKitLandingPadBasic": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLandingPadBasic", "prefab_hash": 293581318, @@ -7838,6 +8178,7 @@ } }, "ItemKitLandingPadWaypoint": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLandingPadWaypoint", "prefab_hash": -1267511065, @@ -7853,6 +8194,7 @@ } }, "ItemKitLargeDirectHeatExchanger": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLargeDirectHeatExchanger", "prefab_hash": 450164077, @@ -7868,6 +8210,7 @@ } }, "ItemKitLargeExtendableRadiator": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLargeExtendableRadiator", "prefab_hash": 847430620, @@ -7883,6 +8226,7 @@ } }, "ItemKitLargeSatelliteDish": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLargeSatelliteDish", "prefab_hash": -2039971217, @@ -7898,6 +8242,7 @@ } }, "ItemKitLaunchMount": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLaunchMount", "prefab_hash": -1854167549, @@ -7913,6 +8258,7 @@ } }, "ItemKitLaunchTower": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLaunchTower", "prefab_hash": -174523552, @@ -7928,6 +8274,7 @@ } }, "ItemKitLiquidRegulator": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLiquidRegulator", "prefab_hash": 1951126161, @@ -7943,6 +8290,7 @@ } }, "ItemKitLiquidTank": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLiquidTank", "prefab_hash": -799849305, @@ -7958,6 +8306,7 @@ } }, "ItemKitLiquidTankInsulated": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLiquidTankInsulated", "prefab_hash": 617773453, @@ -7973,6 +8322,7 @@ } }, "ItemKitLiquidTurboVolumePump": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLiquidTurboVolumePump", "prefab_hash": -1805020897, @@ -7988,6 +8338,7 @@ } }, "ItemKitLiquidUmbilical": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLiquidUmbilical", "prefab_hash": 1571996765, @@ -8003,6 +8354,7 @@ } }, "ItemKitLocker": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLocker", "prefab_hash": 882301399, @@ -8018,6 +8370,7 @@ } }, "ItemKitLogicCircuit": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLogicCircuit", "prefab_hash": 1512322581, @@ -8033,6 +8386,7 @@ } }, "ItemKitLogicInputOutput": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLogicInputOutput", "prefab_hash": 1997293610, @@ -8048,6 +8402,7 @@ } }, "ItemKitLogicMemory": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLogicMemory", "prefab_hash": -2098214189, @@ -8063,6 +8418,7 @@ } }, "ItemKitLogicProcessor": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLogicProcessor", "prefab_hash": 220644373, @@ -8078,6 +8434,7 @@ } }, "ItemKitLogicSwitch": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLogicSwitch", "prefab_hash": 124499454, @@ -8093,6 +8450,7 @@ } }, "ItemKitLogicTransmitter": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitLogicTransmitter", "prefab_hash": 1005397063, @@ -8108,6 +8466,7 @@ } }, "ItemKitMotherShipCore": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitMotherShipCore", "prefab_hash": -344968335, @@ -8123,6 +8482,7 @@ } }, "ItemKitMusicMachines": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitMusicMachines", "prefab_hash": -2038889137, @@ -8138,6 +8498,7 @@ } }, "ItemKitPassiveLargeRadiatorGas": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPassiveLargeRadiatorGas", "prefab_hash": -1752768283, @@ -8153,6 +8514,7 @@ } }, "ItemKitPassiveLargeRadiatorLiquid": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPassiveLargeRadiatorLiquid", "prefab_hash": 1453961898, @@ -8168,6 +8530,7 @@ } }, "ItemKitPassthroughHeatExchanger": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPassthroughHeatExchanger", "prefab_hash": 636112787, @@ -8183,6 +8546,7 @@ } }, "ItemKitPictureFrame": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPictureFrame", "prefab_hash": -2062364768, @@ -8198,6 +8562,7 @@ } }, "ItemKitPipe": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPipe", "prefab_hash": -1619793705, @@ -8213,6 +8578,7 @@ } }, "ItemKitPipeLiquid": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPipeLiquid", "prefab_hash": -1166461357, @@ -8228,6 +8594,7 @@ } }, "ItemKitPipeOrgan": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPipeOrgan", "prefab_hash": -827125300, @@ -8243,6 +8610,7 @@ } }, "ItemKitPipeRadiator": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPipeRadiator", "prefab_hash": 920411066, @@ -8258,6 +8626,7 @@ } }, "ItemKitPipeRadiatorLiquid": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPipeRadiatorLiquid", "prefab_hash": -1697302609, @@ -8273,6 +8642,7 @@ } }, "ItemKitPipeUtility": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPipeUtility", "prefab_hash": 1934508338, @@ -8288,6 +8658,7 @@ } }, "ItemKitPipeUtilityLiquid": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPipeUtilityLiquid", "prefab_hash": 595478589, @@ -8303,6 +8674,7 @@ } }, "ItemKitPlanter": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPlanter", "prefab_hash": 119096484, @@ -8318,6 +8690,7 @@ } }, "ItemKitPortablesConnector": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPortablesConnector", "prefab_hash": 1041148999, @@ -8333,6 +8706,7 @@ } }, "ItemKitPowerTransmitter": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPowerTransmitter", "prefab_hash": 291368213, @@ -8348,6 +8722,7 @@ } }, "ItemKitPowerTransmitterOmni": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPowerTransmitterOmni", "prefab_hash": -831211676, @@ -8363,6 +8738,7 @@ } }, "ItemKitPoweredVent": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPoweredVent", "prefab_hash": 2015439334, @@ -8378,6 +8754,7 @@ } }, "ItemKitPressureFedGasEngine": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPressureFedGasEngine", "prefab_hash": -121514007, @@ -8393,6 +8770,7 @@ } }, "ItemKitPressureFedLiquidEngine": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPressureFedLiquidEngine", "prefab_hash": -99091572, @@ -8408,6 +8786,7 @@ } }, "ItemKitPressurePlate": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPressurePlate", "prefab_hash": 123504691, @@ -8423,6 +8802,7 @@ } }, "ItemKitPumpedLiquidEngine": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitPumpedLiquidEngine", "prefab_hash": 1921918951, @@ -8438,6 +8818,7 @@ } }, "ItemKitRailing": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitRailing", "prefab_hash": 750176282, @@ -8453,6 +8834,7 @@ } }, "ItemKitRecycler": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitRecycler", "prefab_hash": 849148192, @@ -8468,6 +8850,7 @@ } }, "ItemKitRegulator": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitRegulator", "prefab_hash": 1181371795, @@ -8483,6 +8866,7 @@ } }, "ItemKitReinforcedWindows": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitReinforcedWindows", "prefab_hash": 1459985302, @@ -8498,6 +8882,7 @@ } }, "ItemKitResearchMachine": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitResearchMachine", "prefab_hash": 724776762, @@ -8513,6 +8898,7 @@ } }, "ItemKitRespawnPointWallMounted": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitRespawnPointWallMounted", "prefab_hash": 1574688481, @@ -8528,6 +8914,7 @@ } }, "ItemKitRocketAvionics": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitRocketAvionics", "prefab_hash": 1396305045, @@ -8543,6 +8930,7 @@ } }, "ItemKitRocketBattery": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitRocketBattery", "prefab_hash": -314072139, @@ -8558,6 +8946,7 @@ } }, "ItemKitRocketCargoStorage": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitRocketCargoStorage", "prefab_hash": 479850239, @@ -8573,6 +8962,7 @@ } }, "ItemKitRocketCelestialTracker": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitRocketCelestialTracker", "prefab_hash": -303008602, @@ -8588,6 +8978,7 @@ } }, "ItemKitRocketCircuitHousing": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitRocketCircuitHousing", "prefab_hash": 721251202, @@ -8603,6 +8994,7 @@ } }, "ItemKitRocketDatalink": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitRocketDatalink", "prefab_hash": -1256996603, @@ -8618,6 +9010,7 @@ } }, "ItemKitRocketGasFuelTank": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitRocketGasFuelTank", "prefab_hash": -1629347579, @@ -8633,6 +9026,7 @@ } }, "ItemKitRocketLiquidFuelTank": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitRocketLiquidFuelTank", "prefab_hash": 2032027950, @@ -8648,6 +9042,7 @@ } }, "ItemKitRocketManufactory": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitRocketManufactory", "prefab_hash": -636127860, @@ -8663,6 +9058,7 @@ } }, "ItemKitRocketMiner": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitRocketMiner", "prefab_hash": -867969909, @@ -8678,6 +9074,7 @@ } }, "ItemKitRocketScanner": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitRocketScanner", "prefab_hash": 1753647154, @@ -8693,6 +9090,7 @@ } }, "ItemKitRocketTransformerSmall": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitRocketTransformerSmall", "prefab_hash": -932335800, @@ -8708,6 +9106,7 @@ } }, "ItemKitRoverFrame": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitRoverFrame", "prefab_hash": 1827215803, @@ -8723,6 +9122,7 @@ } }, "ItemKitRoverMKI": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitRoverMKI", "prefab_hash": 197243872, @@ -8738,6 +9138,7 @@ } }, "ItemKitSDBHopper": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitSDBHopper", "prefab_hash": 323957548, @@ -8753,6 +9154,7 @@ } }, "ItemKitSatelliteDish": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitSatelliteDish", "prefab_hash": 178422810, @@ -8768,6 +9170,7 @@ } }, "ItemKitSecurityPrinter": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitSecurityPrinter", "prefab_hash": 578078533, @@ -8783,6 +9186,7 @@ } }, "ItemKitSensor": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitSensor", "prefab_hash": -1776897113, @@ -8798,6 +9202,7 @@ } }, "ItemKitShower": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitShower", "prefab_hash": 735858725, @@ -8813,6 +9218,7 @@ } }, "ItemKitSign": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitSign", "prefab_hash": 529996327, @@ -8828,6 +9234,7 @@ } }, "ItemKitSleeper": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitSleeper", "prefab_hash": 326752036, @@ -8843,6 +9250,7 @@ } }, "ItemKitSmallDirectHeatExchanger": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitSmallDirectHeatExchanger", "prefab_hash": -1332682164, @@ -8858,6 +9266,7 @@ } }, "ItemKitSmallSatelliteDish": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitSmallSatelliteDish", "prefab_hash": 1960952220, @@ -8873,6 +9282,7 @@ } }, "ItemKitSolarPanel": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitSolarPanel", "prefab_hash": -1924492105, @@ -8888,6 +9298,7 @@ } }, "ItemKitSolarPanelBasic": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitSolarPanelBasic", "prefab_hash": 844961456, @@ -8903,6 +9314,7 @@ } }, "ItemKitSolarPanelBasicReinforced": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitSolarPanelBasicReinforced", "prefab_hash": -528695432, @@ -8918,6 +9330,7 @@ } }, "ItemKitSolarPanelReinforced": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitSolarPanelReinforced", "prefab_hash": -364868685, @@ -8933,6 +9346,7 @@ } }, "ItemKitSolidGenerator": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitSolidGenerator", "prefab_hash": 1293995736, @@ -8948,6 +9362,7 @@ } }, "ItemKitSorter": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitSorter", "prefab_hash": 969522478, @@ -8963,6 +9378,7 @@ } }, "ItemKitSpeaker": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitSpeaker", "prefab_hash": -126038526, @@ -8978,6 +9394,7 @@ } }, "ItemKitStacker": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitStacker", "prefab_hash": 1013244511, @@ -8993,6 +9410,7 @@ } }, "ItemKitStairs": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitStairs", "prefab_hash": 170878959, @@ -9008,6 +9426,7 @@ } }, "ItemKitStairwell": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitStairwell", "prefab_hash": -1868555784, @@ -9023,6 +9442,7 @@ } }, "ItemKitStandardChute": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitStandardChute", "prefab_hash": 2133035682, @@ -9038,6 +9458,7 @@ } }, "ItemKitStirlingEngine": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitStirlingEngine", "prefab_hash": -1821571150, @@ -9053,6 +9474,7 @@ } }, "ItemKitSuitStorage": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitSuitStorage", "prefab_hash": 1088892825, @@ -9068,6 +9490,7 @@ } }, "ItemKitTables": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitTables", "prefab_hash": -1361598922, @@ -9083,6 +9506,7 @@ } }, "ItemKitTank": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitTank", "prefab_hash": 771439840, @@ -9098,6 +9522,7 @@ } }, "ItemKitTankInsulated": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitTankInsulated", "prefab_hash": 1021053608, @@ -9113,6 +9538,7 @@ } }, "ItemKitToolManufactory": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitToolManufactory", "prefab_hash": 529137748, @@ -9128,6 +9554,7 @@ } }, "ItemKitTransformer": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitTransformer", "prefab_hash": -453039435, @@ -9143,6 +9570,7 @@ } }, "ItemKitTransformerSmall": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitTransformerSmall", "prefab_hash": 665194284, @@ -9158,6 +9586,7 @@ } }, "ItemKitTurbineGenerator": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitTurbineGenerator", "prefab_hash": -1590715731, @@ -9173,6 +9602,7 @@ } }, "ItemKitTurboVolumePump": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitTurboVolumePump", "prefab_hash": -1248429712, @@ -9188,6 +9618,7 @@ } }, "ItemKitUprightWindTurbine": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitUprightWindTurbine", "prefab_hash": -1798044015, @@ -9203,6 +9634,7 @@ } }, "ItemKitVendingMachine": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitVendingMachine", "prefab_hash": -2038384332, @@ -9218,6 +9650,7 @@ } }, "ItemKitVendingMachineRefrigerated": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitVendingMachineRefrigerated", "prefab_hash": -1867508561, @@ -9233,6 +9666,7 @@ } }, "ItemKitWall": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitWall", "prefab_hash": -1826855889, @@ -9248,6 +9682,7 @@ } }, "ItemKitWallArch": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitWallArch", "prefab_hash": 1625214531, @@ -9263,6 +9698,7 @@ } }, "ItemKitWallFlat": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitWallFlat", "prefab_hash": -846838195, @@ -9278,6 +9714,7 @@ } }, "ItemKitWallGeometry": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitWallGeometry", "prefab_hash": -784733231, @@ -9293,6 +9730,7 @@ } }, "ItemKitWallIron": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitWallIron", "prefab_hash": -524546923, @@ -9308,6 +9746,7 @@ } }, "ItemKitWallPadded": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitWallPadded", "prefab_hash": -821868990, @@ -9323,6 +9762,7 @@ } }, "ItemKitWaterBottleFiller": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitWaterBottleFiller", "prefab_hash": 159886536, @@ -9338,6 +9778,7 @@ } }, "ItemKitWaterPurifier": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitWaterPurifier", "prefab_hash": 611181283, @@ -9353,6 +9794,7 @@ } }, "ItemKitWeatherStation": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitWeatherStation", "prefab_hash": 337505889, @@ -9368,6 +9810,7 @@ } }, "ItemKitWindTurbine": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitWindTurbine", "prefab_hash": -868916503, @@ -9383,6 +9826,7 @@ } }, "ItemKitWindowShutter": { + "templateType": "Item", "prefab": { "prefab_name": "ItemKitWindowShutter", "prefab_hash": 1779979754, @@ -9398,6 +9842,7 @@ } }, "ItemLabeller": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemLabeller", "prefab_hash": -743968726, @@ -9443,6 +9888,7 @@ ] }, "ItemLaptop": { + "templateType": "ItemCircuitHolder", "prefab": { "prefab_name": "ItemLaptop", "prefab_hash": 141535121, @@ -9519,6 +9965,7 @@ ] }, "ItemLeadIngot": { + "templateType": "Item", "prefab": { "prefab_name": "ItemLeadIngot", "prefab_hash": 2134647745, @@ -9537,6 +9984,7 @@ } }, "ItemLeadOre": { + "templateType": "Item", "prefab": { "prefab_name": "ItemLeadOre", "prefab_hash": -190236170, @@ -9555,6 +10003,7 @@ } }, "ItemLightSword": { + "templateType": "Item", "prefab": { "prefab_name": "ItemLightSword", "prefab_hash": 1949076595, @@ -9570,6 +10019,7 @@ } }, "ItemLiquidCanisterEmpty": { + "templateType": "Item", "prefab": { "prefab_name": "ItemLiquidCanisterEmpty", "prefab_hash": -185207387, @@ -9592,6 +10042,7 @@ } }, "ItemLiquidCanisterSmart": { + "templateType": "Item", "prefab": { "prefab_name": "ItemLiquidCanisterSmart", "prefab_hash": 777684475, @@ -9614,6 +10065,7 @@ } }, "ItemLiquidDrain": { + "templateType": "Item", "prefab": { "prefab_name": "ItemLiquidDrain", "prefab_hash": 2036225202, @@ -9629,6 +10081,7 @@ } }, "ItemLiquidPipeAnalyzer": { + "templateType": "Item", "prefab": { "prefab_name": "ItemLiquidPipeAnalyzer", "prefab_hash": 226055671, @@ -9644,6 +10097,7 @@ } }, "ItemLiquidPipeHeater": { + "templateType": "Item", "prefab": { "prefab_name": "ItemLiquidPipeHeater", "prefab_hash": -248475032, @@ -9659,6 +10113,7 @@ } }, "ItemLiquidPipeValve": { + "templateType": "Item", "prefab": { "prefab_name": "ItemLiquidPipeValve", "prefab_hash": -2126113312, @@ -9674,6 +10129,7 @@ } }, "ItemLiquidPipeVolumePump": { + "templateType": "Item", "prefab": { "prefab_name": "ItemLiquidPipeVolumePump", "prefab_hash": -2106280569, @@ -9689,6 +10145,7 @@ } }, "ItemLiquidTankStorage": { + "templateType": "Item", "prefab": { "prefab_name": "ItemLiquidTankStorage", "prefab_hash": 2037427578, @@ -9704,6 +10161,7 @@ } }, "ItemMKIIAngleGrinder": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemMKIIAngleGrinder", "prefab_hash": 240174650, @@ -9748,6 +10206,7 @@ ] }, "ItemMKIIArcWelder": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemMKIIArcWelder", "prefab_hash": -2061979347, @@ -9792,6 +10251,7 @@ ] }, "ItemMKIICrowbar": { + "templateType": "Item", "prefab": { "prefab_name": "ItemMKIICrowbar", "prefab_hash": 1440775434, @@ -9807,6 +10267,7 @@ } }, "ItemMKIIDrill": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemMKIIDrill", "prefab_hash": 324791548, @@ -9851,6 +10312,7 @@ ] }, "ItemMKIIDuctTape": { + "templateType": "Item", "prefab": { "prefab_name": "ItemMKIIDuctTape", "prefab_hash": 388774906, @@ -9866,6 +10328,7 @@ } }, "ItemMKIIMiningDrill": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemMKIIMiningDrill", "prefab_hash": -1875271296, @@ -9917,6 +10380,7 @@ ] }, "ItemMKIIScrewdriver": { + "templateType": "Item", "prefab": { "prefab_name": "ItemMKIIScrewdriver", "prefab_hash": -2015613246, @@ -9932,6 +10396,7 @@ } }, "ItemMKIIWireCutters": { + "templateType": "Item", "prefab": { "prefab_name": "ItemMKIIWireCutters", "prefab_hash": -178893251, @@ -9947,6 +10412,7 @@ } }, "ItemMKIIWrench": { + "templateType": "Item", "prefab": { "prefab_name": "ItemMKIIWrench", "prefab_hash": 1862001680, @@ -9962,6 +10428,7 @@ } }, "ItemMarineBodyArmor": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "ItemMarineBodyArmor", "prefab_hash": 1399098998, @@ -9995,6 +10462,7 @@ ] }, "ItemMarineHelmet": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "ItemMarineHelmet", "prefab_hash": 1073631646, @@ -10016,6 +10484,7 @@ ] }, "ItemMilk": { + "templateType": "Item", "prefab": { "prefab_name": "ItemMilk", "prefab_hash": 1327248310, @@ -10034,6 +10503,7 @@ } }, "ItemMiningBackPack": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "ItemMiningBackPack", "prefab_hash": -1650383245, @@ -10147,6 +10617,7 @@ ] }, "ItemMiningBelt": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "ItemMiningBelt", "prefab_hash": -676435305, @@ -10204,6 +10675,7 @@ ] }, "ItemMiningBeltMKII": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemMiningBeltMKII", "prefab_hash": 1470787934, @@ -10426,6 +10898,7 @@ ] }, "ItemMiningCharge": { + "templateType": "Item", "prefab": { "prefab_name": "ItemMiningCharge", "prefab_hash": 15829510, @@ -10441,6 +10914,7 @@ } }, "ItemMiningDrill": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemMiningDrill", "prefab_hash": 1055173191, @@ -10492,6 +10966,7 @@ ] }, "ItemMiningDrillHeavy": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemMiningDrillHeavy", "prefab_hash": -1663349918, @@ -10543,6 +11018,7 @@ ] }, "ItemMiningDrillPneumatic": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "ItemMiningDrillPneumatic", "prefab_hash": 1258187304, @@ -10564,6 +11040,7 @@ ] }, "ItemMkIIToolbelt": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemMkIIToolbelt", "prefab_hash": 1467558064, @@ -10747,6 +11224,7 @@ ] }, "ItemMuffin": { + "templateType": "Item", "prefab": { "prefab_name": "ItemMuffin", "prefab_hash": -1864982322, @@ -10762,6 +11240,7 @@ } }, "ItemMushroom": { + "templateType": "Item", "prefab": { "prefab_name": "ItemMushroom", "prefab_hash": 2044798572, @@ -10780,6 +11259,7 @@ } }, "ItemNVG": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemNVG", "prefab_hash": 982514123, @@ -10825,6 +11305,7 @@ ] }, "ItemNickelIngot": { + "templateType": "Item", "prefab": { "prefab_name": "ItemNickelIngot", "prefab_hash": -1406385572, @@ -10843,6 +11324,7 @@ } }, "ItemNickelOre": { + "templateType": "Item", "prefab": { "prefab_name": "ItemNickelOre", "prefab_hash": 1830218956, @@ -10861,6 +11343,7 @@ } }, "ItemNitrice": { + "templateType": "Item", "prefab": { "prefab_name": "ItemNitrice", "prefab_hash": -1499471529, @@ -10876,6 +11359,7 @@ } }, "ItemOxite": { + "templateType": "Item", "prefab": { "prefab_name": "ItemOxite", "prefab_hash": -1805394113, @@ -10891,6 +11375,7 @@ } }, "ItemPassiveVent": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPassiveVent", "prefab_hash": 238631271, @@ -10906,6 +11391,7 @@ } }, "ItemPassiveVentInsulated": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPassiveVentInsulated", "prefab_hash": -1397583760, @@ -10921,6 +11407,7 @@ } }, "ItemPeaceLily": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPeaceLily", "prefab_hash": 2042955224, @@ -10936,6 +11423,7 @@ } }, "ItemPickaxe": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPickaxe", "prefab_hash": -913649823, @@ -10951,6 +11439,7 @@ } }, "ItemPillHeal": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPillHeal", "prefab_hash": 1118069417, @@ -10966,6 +11455,7 @@ } }, "ItemPillStun": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPillStun", "prefab_hash": 418958601, @@ -10981,6 +11471,7 @@ } }, "ItemPipeAnalyizer": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPipeAnalyizer", "prefab_hash": -767597887, @@ -10996,6 +11487,7 @@ } }, "ItemPipeCowl": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPipeCowl", "prefab_hash": -38898376, @@ -11011,6 +11503,7 @@ } }, "ItemPipeDigitalValve": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPipeDigitalValve", "prefab_hash": -1532448832, @@ -11026,6 +11519,7 @@ } }, "ItemPipeGasMixer": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPipeGasMixer", "prefab_hash": -1134459463, @@ -11041,6 +11535,7 @@ } }, "ItemPipeHeater": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPipeHeater", "prefab_hash": -1751627006, @@ -11056,6 +11551,7 @@ } }, "ItemPipeIgniter": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPipeIgniter", "prefab_hash": 1366030599, @@ -11071,6 +11567,7 @@ } }, "ItemPipeLabel": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPipeLabel", "prefab_hash": 391769637, @@ -11086,6 +11583,7 @@ } }, "ItemPipeLiquidRadiator": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPipeLiquidRadiator", "prefab_hash": -906521320, @@ -11101,6 +11599,7 @@ } }, "ItemPipeMeter": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPipeMeter", "prefab_hash": 1207939683, @@ -11116,6 +11615,7 @@ } }, "ItemPipeRadiator": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPipeRadiator", "prefab_hash": -1796655088, @@ -11131,6 +11631,7 @@ } }, "ItemPipeValve": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPipeValve", "prefab_hash": 799323450, @@ -11146,6 +11647,7 @@ } }, "ItemPipeVolumePump": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPipeVolumePump", "prefab_hash": -1766301997, @@ -11161,6 +11663,7 @@ } }, "ItemPlainCake": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPlainCake", "prefab_hash": -1108244510, @@ -11176,6 +11679,7 @@ } }, "ItemPlantEndothermic_Creative": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPlantEndothermic_Creative", "prefab_hash": -1159179557, @@ -11191,6 +11695,7 @@ } }, "ItemPlantEndothermic_Genepool1": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPlantEndothermic_Genepool1", "prefab_hash": 851290561, @@ -11206,6 +11711,7 @@ } }, "ItemPlantEndothermic_Genepool2": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPlantEndothermic_Genepool2", "prefab_hash": -1414203269, @@ -11221,6 +11727,7 @@ } }, "ItemPlantSampler": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemPlantSampler", "prefab_hash": 173023800, @@ -11271,6 +11778,7 @@ ] }, "ItemPlantSwitchGrass": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPlantSwitchGrass", "prefab_hash": -532672323, @@ -11286,6 +11794,7 @@ } }, "ItemPlantThermogenic_Creative": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPlantThermogenic_Creative", "prefab_hash": -1208890208, @@ -11301,6 +11810,7 @@ } }, "ItemPlantThermogenic_Genepool1": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPlantThermogenic_Genepool1", "prefab_hash": -177792789, @@ -11316,6 +11826,7 @@ } }, "ItemPlantThermogenic_Genepool2": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPlantThermogenic_Genepool2", "prefab_hash": 1819167057, @@ -11331,6 +11842,7 @@ } }, "ItemPlasticSheets": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPlasticSheets", "prefab_hash": 662053345, @@ -11346,6 +11858,7 @@ } }, "ItemPotato": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPotato", "prefab_hash": 1929046963, @@ -11364,6 +11877,7 @@ } }, "ItemPotatoBaked": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPotatoBaked", "prefab_hash": -2111886401, @@ -11382,6 +11896,7 @@ } }, "ItemPowerConnector": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPowerConnector", "prefab_hash": 839924019, @@ -11397,6 +11912,7 @@ } }, "ItemPumpkin": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPumpkin", "prefab_hash": 1277828144, @@ -11415,6 +11931,7 @@ } }, "ItemPumpkinPie": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPumpkinPie", "prefab_hash": 62768076, @@ -11430,6 +11947,7 @@ } }, "ItemPumpkinSoup": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPumpkinSoup", "prefab_hash": 1277979876, @@ -11445,6 +11963,7 @@ } }, "ItemPureIce": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPureIce", "prefab_hash": -1616308158, @@ -11460,6 +11979,7 @@ } }, "ItemPureIceCarbonDioxide": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPureIceCarbonDioxide", "prefab_hash": -1251009404, @@ -11475,6 +11995,7 @@ } }, "ItemPureIceHydrogen": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPureIceHydrogen", "prefab_hash": 944530361, @@ -11490,6 +12011,7 @@ } }, "ItemPureIceLiquidCarbonDioxide": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPureIceLiquidCarbonDioxide", "prefab_hash": -1715945725, @@ -11505,6 +12027,7 @@ } }, "ItemPureIceLiquidHydrogen": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPureIceLiquidHydrogen", "prefab_hash": -1044933269, @@ -11520,6 +12043,7 @@ } }, "ItemPureIceLiquidNitrogen": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPureIceLiquidNitrogen", "prefab_hash": 1674576569, @@ -11535,6 +12059,7 @@ } }, "ItemPureIceLiquidNitrous": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPureIceLiquidNitrous", "prefab_hash": 1428477399, @@ -11550,6 +12075,7 @@ } }, "ItemPureIceLiquidOxygen": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPureIceLiquidOxygen", "prefab_hash": 541621589, @@ -11565,6 +12091,7 @@ } }, "ItemPureIceLiquidPollutant": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPureIceLiquidPollutant", "prefab_hash": -1748926678, @@ -11580,6 +12107,7 @@ } }, "ItemPureIceLiquidVolatiles": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPureIceLiquidVolatiles", "prefab_hash": -1306628937, @@ -11595,6 +12123,7 @@ } }, "ItemPureIceNitrogen": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPureIceNitrogen", "prefab_hash": -1708395413, @@ -11610,6 +12139,7 @@ } }, "ItemPureIceNitrous": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPureIceNitrous", "prefab_hash": 386754635, @@ -11625,6 +12155,7 @@ } }, "ItemPureIceOxygen": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPureIceOxygen", "prefab_hash": -1150448260, @@ -11640,6 +12171,7 @@ } }, "ItemPureIcePollutant": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPureIcePollutant", "prefab_hash": -1755356, @@ -11655,6 +12187,7 @@ } }, "ItemPureIcePollutedWater": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPureIcePollutedWater", "prefab_hash": -2073202179, @@ -11670,6 +12203,7 @@ } }, "ItemPureIceSteam": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPureIceSteam", "prefab_hash": -874791066, @@ -11685,6 +12219,7 @@ } }, "ItemPureIceVolatiles": { + "templateType": "Item", "prefab": { "prefab_name": "ItemPureIceVolatiles", "prefab_hash": -633723719, @@ -11700,6 +12235,7 @@ } }, "ItemRTG": { + "templateType": "Item", "prefab": { "prefab_name": "ItemRTG", "prefab_hash": 495305053, @@ -11715,6 +12251,7 @@ } }, "ItemRTGSurvival": { + "templateType": "Item", "prefab": { "prefab_name": "ItemRTGSurvival", "prefab_hash": 1817645803, @@ -11730,6 +12267,7 @@ } }, "ItemReagentMix": { + "templateType": "Item", "prefab": { "prefab_name": "ItemReagentMix", "prefab_hash": -1641500434, @@ -11745,6 +12283,7 @@ } }, "ItemRemoteDetonator": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemRemoteDetonator", "prefab_hash": 678483886, @@ -11790,6 +12329,7 @@ ] }, "ItemReusableFireExtinguisher": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "ItemReusableFireExtinguisher", "prefab_hash": -1773192190, @@ -11811,6 +12351,7 @@ ] }, "ItemRice": { + "templateType": "Item", "prefab": { "prefab_name": "ItemRice", "prefab_hash": 658916791, @@ -11829,6 +12370,7 @@ } }, "ItemRoadFlare": { + "templateType": "Item", "prefab": { "prefab_name": "ItemRoadFlare", "prefab_hash": 871811564, @@ -11844,6 +12386,7 @@ } }, "ItemRocketMiningDrillHead": { + "templateType": "Item", "prefab": { "prefab_name": "ItemRocketMiningDrillHead", "prefab_hash": 2109945337, @@ -11859,6 +12402,7 @@ } }, "ItemRocketMiningDrillHeadDurable": { + "templateType": "Item", "prefab": { "prefab_name": "ItemRocketMiningDrillHeadDurable", "prefab_hash": 1530764483, @@ -11874,6 +12418,7 @@ } }, "ItemRocketMiningDrillHeadHighSpeedIce": { + "templateType": "Item", "prefab": { "prefab_name": "ItemRocketMiningDrillHeadHighSpeedIce", "prefab_hash": 653461728, @@ -11889,6 +12434,7 @@ } }, "ItemRocketMiningDrillHeadHighSpeedMineral": { + "templateType": "Item", "prefab": { "prefab_name": "ItemRocketMiningDrillHeadHighSpeedMineral", "prefab_hash": 1440678625, @@ -11904,6 +12450,7 @@ } }, "ItemRocketMiningDrillHeadIce": { + "templateType": "Item", "prefab": { "prefab_name": "ItemRocketMiningDrillHeadIce", "prefab_hash": -380904592, @@ -11919,6 +12466,7 @@ } }, "ItemRocketMiningDrillHeadLongTerm": { + "templateType": "Item", "prefab": { "prefab_name": "ItemRocketMiningDrillHeadLongTerm", "prefab_hash": -684020753, @@ -11934,6 +12482,7 @@ } }, "ItemRocketMiningDrillHeadMineral": { + "templateType": "Item", "prefab": { "prefab_name": "ItemRocketMiningDrillHeadMineral", "prefab_hash": 1083675581, @@ -11949,6 +12498,7 @@ } }, "ItemRocketScanningHead": { + "templateType": "Item", "prefab": { "prefab_name": "ItemRocketScanningHead", "prefab_hash": -1198702771, @@ -11964,6 +12514,7 @@ } }, "ItemScanner": { + "templateType": "Item", "prefab": { "prefab_name": "ItemScanner", "prefab_hash": 1661270830, @@ -11979,6 +12530,7 @@ } }, "ItemScrewdriver": { + "templateType": "Item", "prefab": { "prefab_name": "ItemScrewdriver", "prefab_hash": 687940869, @@ -11994,6 +12546,7 @@ } }, "ItemSecurityCamera": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSecurityCamera", "prefab_hash": -1981101032, @@ -12009,6 +12562,7 @@ } }, "ItemSensorLenses": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemSensorLenses", "prefab_hash": -1176140051, @@ -12066,6 +12620,7 @@ ] }, "ItemSensorProcessingUnitCelestialScanner": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSensorProcessingUnitCelestialScanner", "prefab_hash": -1154200014, @@ -12081,6 +12636,7 @@ } }, "ItemSensorProcessingUnitMesonScanner": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSensorProcessingUnitMesonScanner", "prefab_hash": -1730464583, @@ -12096,6 +12652,7 @@ } }, "ItemSensorProcessingUnitOreScanner": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSensorProcessingUnitOreScanner", "prefab_hash": -1219128491, @@ -12111,6 +12668,7 @@ } }, "ItemSiliconIngot": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSiliconIngot", "prefab_hash": -290196476, @@ -12129,6 +12687,7 @@ } }, "ItemSiliconOre": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSiliconOre", "prefab_hash": 1103972403, @@ -12147,6 +12706,7 @@ } }, "ItemSilverIngot": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSilverIngot", "prefab_hash": -929742000, @@ -12165,6 +12725,7 @@ } }, "ItemSilverOre": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSilverOre", "prefab_hash": -916518678, @@ -12183,6 +12744,7 @@ } }, "ItemSolderIngot": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSolderIngot", "prefab_hash": -82508479, @@ -12201,6 +12763,7 @@ } }, "ItemSolidFuel": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSolidFuel", "prefab_hash": -365253871, @@ -12219,6 +12782,7 @@ } }, "ItemSoundCartridgeBass": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSoundCartridgeBass", "prefab_hash": -1883441704, @@ -12234,6 +12798,7 @@ } }, "ItemSoundCartridgeDrums": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSoundCartridgeDrums", "prefab_hash": -1901500508, @@ -12249,6 +12814,7 @@ } }, "ItemSoundCartridgeLeads": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSoundCartridgeLeads", "prefab_hash": -1174735962, @@ -12264,6 +12830,7 @@ } }, "ItemSoundCartridgeSynth": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSoundCartridgeSynth", "prefab_hash": -1971419310, @@ -12279,6 +12846,7 @@ } }, "ItemSoyOil": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSoyOil", "prefab_hash": 1387403148, @@ -12297,6 +12865,7 @@ } }, "ItemSoybean": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSoybean", "prefab_hash": 1924673028, @@ -12315,6 +12884,7 @@ } }, "ItemSpaceCleaner": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSpaceCleaner", "prefab_hash": -1737666461, @@ -12330,6 +12900,7 @@ } }, "ItemSpaceHelmet": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemSpaceHelmet", "prefab_hash": 714830451, @@ -12390,6 +12961,7 @@ "slots": [] }, "ItemSpaceIce": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSpaceIce", "prefab_hash": 675686937, @@ -12405,6 +12977,7 @@ } }, "ItemSpaceOre": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSpaceOre", "prefab_hash": 2131916219, @@ -12420,6 +12993,7 @@ } }, "ItemSpacepack": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemSpacepack", "prefab_hash": -1260618380, @@ -12581,6 +13155,7 @@ ] }, "ItemSprayCanBlack": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSprayCanBlack", "prefab_hash": -688107795, @@ -12596,6 +13171,7 @@ } }, "ItemSprayCanBlue": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSprayCanBlue", "prefab_hash": -498464883, @@ -12611,6 +13187,7 @@ } }, "ItemSprayCanBrown": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSprayCanBrown", "prefab_hash": 845176977, @@ -12626,6 +13203,7 @@ } }, "ItemSprayCanGreen": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSprayCanGreen", "prefab_hash": -1880941852, @@ -12641,6 +13219,7 @@ } }, "ItemSprayCanGrey": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSprayCanGrey", "prefab_hash": -1645266981, @@ -12656,6 +13235,7 @@ } }, "ItemSprayCanKhaki": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSprayCanKhaki", "prefab_hash": 1918456047, @@ -12671,6 +13251,7 @@ } }, "ItemSprayCanOrange": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSprayCanOrange", "prefab_hash": -158007629, @@ -12686,6 +13267,7 @@ } }, "ItemSprayCanPink": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSprayCanPink", "prefab_hash": 1344257263, @@ -12701,6 +13283,7 @@ } }, "ItemSprayCanPurple": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSprayCanPurple", "prefab_hash": 30686509, @@ -12716,6 +13299,7 @@ } }, "ItemSprayCanRed": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSprayCanRed", "prefab_hash": 1514393921, @@ -12731,6 +13315,7 @@ } }, "ItemSprayCanWhite": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSprayCanWhite", "prefab_hash": 498481505, @@ -12746,6 +13331,7 @@ } }, "ItemSprayCanYellow": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSprayCanYellow", "prefab_hash": 995468116, @@ -12761,6 +13347,7 @@ } }, "ItemSprayGun": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "ItemSprayGun", "prefab_hash": 1289723966, @@ -12782,6 +13369,7 @@ ] }, "ItemSteelFrames": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSteelFrames", "prefab_hash": -1448105779, @@ -12797,6 +13385,7 @@ } }, "ItemSteelIngot": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSteelIngot", "prefab_hash": -654790771, @@ -12815,6 +13404,7 @@ } }, "ItemSteelSheets": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSteelSheets", "prefab_hash": 38555961, @@ -12830,6 +13420,7 @@ } }, "ItemStelliteGlassSheets": { + "templateType": "Item", "prefab": { "prefab_name": "ItemStelliteGlassSheets", "prefab_hash": -2038663432, @@ -12845,6 +13436,7 @@ } }, "ItemStelliteIngot": { + "templateType": "Item", "prefab": { "prefab_name": "ItemStelliteIngot", "prefab_hash": -1897868623, @@ -12863,6 +13455,7 @@ } }, "ItemSugar": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSugar", "prefab_hash": 2111910840, @@ -12881,6 +13474,7 @@ } }, "ItemSugarCane": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSugarCane", "prefab_hash": -1335056202, @@ -12899,6 +13493,7 @@ } }, "ItemSuitModCryogenicUpgrade": { + "templateType": "Item", "prefab": { "prefab_name": "ItemSuitModCryogenicUpgrade", "prefab_hash": -1274308304, @@ -12914,6 +13509,7 @@ } }, "ItemTablet": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemTablet", "prefab_hash": -229808600, @@ -12972,6 +13568,7 @@ ] }, "ItemTerrainManipulator": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemTerrainManipulator", "prefab_hash": 111280987, @@ -13036,6 +13633,7 @@ ] }, "ItemTomato": { + "templateType": "Item", "prefab": { "prefab_name": "ItemTomato", "prefab_hash": -998592080, @@ -13054,6 +13652,7 @@ } }, "ItemTomatoSoup": { + "templateType": "Item", "prefab": { "prefab_name": "ItemTomatoSoup", "prefab_hash": 688734890, @@ -13069,6 +13668,7 @@ } }, "ItemToolBelt": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "ItemToolBelt", "prefab_hash": -355127880, @@ -13118,6 +13718,7 @@ ] }, "ItemTropicalPlant": { + "templateType": "Item", "prefab": { "prefab_name": "ItemTropicalPlant", "prefab_hash": -800947386, @@ -13133,6 +13734,7 @@ } }, "ItemUraniumOre": { + "templateType": "Item", "prefab": { "prefab_name": "ItemUraniumOre", "prefab_hash": -1516581844, @@ -13151,6 +13753,7 @@ } }, "ItemVolatiles": { + "templateType": "Item", "prefab": { "prefab_name": "ItemVolatiles", "prefab_hash": 1253102035, @@ -13166,6 +13769,7 @@ } }, "ItemWallCooler": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWallCooler", "prefab_hash": -1567752627, @@ -13181,6 +13785,7 @@ } }, "ItemWallHeater": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWallHeater", "prefab_hash": 1880134612, @@ -13196,6 +13801,7 @@ } }, "ItemWallLight": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWallLight", "prefab_hash": 1108423476, @@ -13211,6 +13817,7 @@ } }, "ItemWaspaloyIngot": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWaspaloyIngot", "prefab_hash": 156348098, @@ -13229,6 +13836,7 @@ } }, "ItemWaterBottle": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWaterBottle", "prefab_hash": 107741229, @@ -13244,6 +13852,7 @@ } }, "ItemWaterPipeDigitalValve": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWaterPipeDigitalValve", "prefab_hash": 309693520, @@ -13259,6 +13868,7 @@ } }, "ItemWaterPipeMeter": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWaterPipeMeter", "prefab_hash": -90898877, @@ -13274,6 +13884,7 @@ } }, "ItemWaterWallCooler": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWaterWallCooler", "prefab_hash": -1721846327, @@ -13289,6 +13900,7 @@ } }, "ItemWearLamp": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemWearLamp", "prefab_hash": -598730959, @@ -13333,6 +13945,7 @@ ] }, "ItemWeldingTorch": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "ItemWeldingTorch", "prefab_hash": -2066892079, @@ -13358,6 +13971,7 @@ ] }, "ItemWheat": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWheat", "prefab_hash": -1057658015, @@ -13376,6 +13990,7 @@ } }, "ItemWireCutters": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWireCutters", "prefab_hash": 1535854074, @@ -13391,6 +14006,7 @@ } }, "ItemWirelessBatteryCellExtraLarge": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "ItemWirelessBatteryCellExtraLarge", "prefab_hash": -504717121, @@ -13426,6 +14042,7 @@ "slots": [] }, "ItemWreckageAirConditioner1": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWreckageAirConditioner1", "prefab_hash": -1826023284, @@ -13441,6 +14058,7 @@ } }, "ItemWreckageAirConditioner2": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWreckageAirConditioner2", "prefab_hash": 169888054, @@ -13456,6 +14074,7 @@ } }, "ItemWreckageHydroponicsTray1": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWreckageHydroponicsTray1", "prefab_hash": -310178617, @@ -13471,6 +14090,7 @@ } }, "ItemWreckageLargeExtendableRadiator01": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWreckageLargeExtendableRadiator01", "prefab_hash": -997763, @@ -13486,6 +14106,7 @@ } }, "ItemWreckageStructureRTG1": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWreckageStructureRTG1", "prefab_hash": 391453348, @@ -13501,6 +14122,7 @@ } }, "ItemWreckageStructureWeatherStation001": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWreckageStructureWeatherStation001", "prefab_hash": -834664349, @@ -13516,6 +14138,7 @@ } }, "ItemWreckageStructureWeatherStation002": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWreckageStructureWeatherStation002", "prefab_hash": 1464424921, @@ -13531,6 +14154,7 @@ } }, "ItemWreckageStructureWeatherStation003": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWreckageStructureWeatherStation003", "prefab_hash": 542009679, @@ -13546,6 +14170,7 @@ } }, "ItemWreckageStructureWeatherStation004": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWreckageStructureWeatherStation004", "prefab_hash": -1104478996, @@ -13561,6 +14186,7 @@ } }, "ItemWreckageStructureWeatherStation005": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWreckageStructureWeatherStation005", "prefab_hash": -919745414, @@ -13576,6 +14202,7 @@ } }, "ItemWreckageStructureWeatherStation006": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWreckageStructureWeatherStation006", "prefab_hash": 1344576960, @@ -13591,6 +14218,7 @@ } }, "ItemWreckageStructureWeatherStation007": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWreckageStructureWeatherStation007", "prefab_hash": 656649558, @@ -13606,6 +14234,7 @@ } }, "ItemWreckageStructureWeatherStation008": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWreckageStructureWeatherStation008", "prefab_hash": -1214467897, @@ -13621,6 +14250,7 @@ } }, "ItemWreckageTurbineGenerator1": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWreckageTurbineGenerator1", "prefab_hash": -1662394403, @@ -13636,6 +14266,7 @@ } }, "ItemWreckageTurbineGenerator2": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWreckageTurbineGenerator2", "prefab_hash": 98602599, @@ -13651,6 +14282,7 @@ } }, "ItemWreckageTurbineGenerator3": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWreckageTurbineGenerator3", "prefab_hash": 1927790321, @@ -13666,6 +14298,7 @@ } }, "ItemWreckageWallCooler1": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWreckageWallCooler1", "prefab_hash": -1682930158, @@ -13681,6 +14314,7 @@ } }, "ItemWreckageWallCooler2": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWreckageWallCooler2", "prefab_hash": 45733800, @@ -13696,6 +14330,7 @@ } }, "ItemWrench": { + "templateType": "Item", "prefab": { "prefab_name": "ItemWrench", "prefab_hash": -1886261558, @@ -13711,6 +14346,7 @@ } }, "KitSDBSilo": { + "templateType": "Item", "prefab": { "prefab_name": "KitSDBSilo", "prefab_hash": 1932952652, @@ -13726,6 +14362,7 @@ } }, "KitStructureCombustionCentrifuge": { + "templateType": "Item", "prefab": { "prefab_name": "KitStructureCombustionCentrifuge", "prefab_hash": 231903234, @@ -13741,6 +14378,7 @@ } }, "KitchenTableShort": { + "templateType": "Structure", "prefab": { "prefab_name": "KitchenTableShort", "prefab_hash": -1427415566, @@ -13752,6 +14390,7 @@ } }, "KitchenTableSimpleShort": { + "templateType": "Structure", "prefab": { "prefab_name": "KitchenTableSimpleShort", "prefab_hash": -78099334, @@ -13763,6 +14402,7 @@ } }, "KitchenTableSimpleTall": { + "templateType": "Structure", "prefab": { "prefab_name": "KitchenTableSimpleTall", "prefab_hash": -1068629349, @@ -13774,6 +14414,7 @@ } }, "KitchenTableTall": { + "templateType": "Structure", "prefab": { "prefab_name": "KitchenTableTall", "prefab_hash": -1386237782, @@ -13785,6 +14426,7 @@ } }, "Lander": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "Lander", "prefab_hash": 1605130615, @@ -13838,6 +14480,7 @@ ] }, "Landingpad_2x2CenterPiece01": { + "templateType": "StructureLogic", "prefab": { "prefab_name": "Landingpad_2x2CenterPiece01", "prefab_hash": -1295222317, @@ -13857,6 +14500,7 @@ "slots": [] }, "Landingpad_BlankPiece": { + "templateType": "Structure", "prefab": { "prefab_name": "Landingpad_BlankPiece", "prefab_hash": 912453390, @@ -13868,6 +14512,7 @@ } }, "Landingpad_CenterPiece01": { + "templateType": "StructureLogic", "prefab": { "prefab_name": "Landingpad_CenterPiece01", "prefab_hash": 1070143159, @@ -13894,6 +14539,7 @@ "slots": [] }, "Landingpad_CrossPiece": { + "templateType": "Structure", "prefab": { "prefab_name": "Landingpad_CrossPiece", "prefab_hash": 1101296153, @@ -13905,6 +14551,7 @@ } }, "Landingpad_DataConnectionPiece": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "Landingpad_DataConnectionPiece", "prefab_hash": -2066405918, @@ -13996,6 +14643,7 @@ } }, "Landingpad_DiagonalPiece01": { + "templateType": "Structure", "prefab": { "prefab_name": "Landingpad_DiagonalPiece01", "prefab_hash": 977899131, @@ -14007,6 +14655,7 @@ } }, "Landingpad_GasConnectorInwardPiece": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "Landingpad_GasConnectorInwardPiece", "prefab_hash": 817945707, @@ -14090,6 +14739,7 @@ } }, "Landingpad_GasConnectorOutwardPiece": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "Landingpad_GasConnectorOutwardPiece", "prefab_hash": -1100218307, @@ -14173,6 +14823,7 @@ } }, "Landingpad_GasCylinderTankPiece": { + "templateType": "Structure", "prefab": { "prefab_name": "Landingpad_GasCylinderTankPiece", "prefab_hash": 170818567, @@ -14184,6 +14835,7 @@ } }, "Landingpad_LiquidConnectorInwardPiece": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "Landingpad_LiquidConnectorInwardPiece", "prefab_hash": -1216167727, @@ -14267,6 +14919,7 @@ } }, "Landingpad_LiquidConnectorOutwardPiece": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "Landingpad_LiquidConnectorOutwardPiece", "prefab_hash": -1788929869, @@ -14350,6 +15003,7 @@ } }, "Landingpad_StraightPiece01": { + "templateType": "Structure", "prefab": { "prefab_name": "Landingpad_StraightPiece01", "prefab_hash": -976273247, @@ -14361,6 +15015,7 @@ } }, "Landingpad_TaxiPieceCorner": { + "templateType": "Structure", "prefab": { "prefab_name": "Landingpad_TaxiPieceCorner", "prefab_hash": -1872345847, @@ -14372,6 +15027,7 @@ } }, "Landingpad_TaxiPieceHold": { + "templateType": "Structure", "prefab": { "prefab_name": "Landingpad_TaxiPieceHold", "prefab_hash": 146051619, @@ -14383,6 +15039,7 @@ } }, "Landingpad_TaxiPieceStraight": { + "templateType": "Structure", "prefab": { "prefab_name": "Landingpad_TaxiPieceStraight", "prefab_hash": -1477941080, @@ -14394,6 +15051,7 @@ } }, "Landingpad_ThreshholdPiece": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "Landingpad_ThreshholdPiece", "prefab_hash": -1514298582, @@ -14448,6 +15106,7 @@ } }, "LogicStepSequencer8": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "LogicStepSequencer8", "prefab_hash": 1531272458, @@ -14527,6 +15186,7 @@ } }, "Meteorite": { + "templateType": "Item", "prefab": { "prefab_name": "Meteorite", "prefab_hash": -99064335, @@ -14542,6 +15202,7 @@ } }, "MonsterEgg": { + "templateType": "Item", "prefab": { "prefab_name": "MonsterEgg", "prefab_hash": -1667675295, @@ -14557,6 +15218,7 @@ } }, "MotherboardComms": { + "templateType": "Item", "prefab": { "prefab_name": "MotherboardComms", "prefab_hash": -337075633, @@ -14572,6 +15234,7 @@ } }, "MotherboardLogic": { + "templateType": "Item", "prefab": { "prefab_name": "MotherboardLogic", "prefab_hash": 502555944, @@ -14587,6 +15250,7 @@ } }, "MotherboardMissionControl": { + "templateType": "Item", "prefab": { "prefab_name": "MotherboardMissionControl", "prefab_hash": -127121474, @@ -14602,6 +15266,7 @@ } }, "MotherboardProgrammableChip": { + "templateType": "Item", "prefab": { "prefab_name": "MotherboardProgrammableChip", "prefab_hash": -161107071, @@ -14617,6 +15282,7 @@ } }, "MotherboardRockets": { + "templateType": "Item", "prefab": { "prefab_name": "MotherboardRockets", "prefab_hash": -806986392, @@ -14632,6 +15298,7 @@ } }, "MotherboardSorter": { + "templateType": "Item", "prefab": { "prefab_name": "MotherboardSorter", "prefab_hash": -1908268220, @@ -14647,6 +15314,7 @@ } }, "MothershipCore": { + "templateType": "Item", "prefab": { "prefab_name": "MothershipCore", "prefab_hash": -1930442922, @@ -14662,6 +15330,7 @@ } }, "NpcChick": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "NpcChick", "prefab_hash": 155856647, @@ -14691,6 +15360,7 @@ ] }, "NpcChicken": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "NpcChicken", "prefab_hash": 399074198, @@ -14720,6 +15390,7 @@ ] }, "PassiveSpeaker": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "PassiveSpeaker", "prefab_hash": 248893646, @@ -14761,6 +15432,7 @@ } }, "PipeBenderMod": { + "templateType": "Item", "prefab": { "prefab_name": "PipeBenderMod", "prefab_hash": 443947415, @@ -14776,6 +15448,7 @@ } }, "PortableComposter": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "PortableComposter", "prefab_hash": -1958705204, @@ -14809,6 +15482,7 @@ ] }, "PortableSolarPanel": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "PortableSolarPanel", "prefab_hash": 2043318949, @@ -14852,6 +15526,7 @@ ] }, "RailingElegant01": { + "templateType": "Structure", "prefab": { "prefab_name": "RailingElegant01", "prefab_hash": 399661231, @@ -14863,6 +15538,7 @@ } }, "RailingElegant02": { + "templateType": "Structure", "prefab": { "prefab_name": "RailingElegant02", "prefab_hash": -1898247915, @@ -14874,6 +15550,7 @@ } }, "RailingIndustrial02": { + "templateType": "Structure", "prefab": { "prefab_name": "RailingIndustrial02", "prefab_hash": -2072792175, @@ -14885,6 +15562,7 @@ } }, "ReagentColorBlue": { + "templateType": "Item", "prefab": { "prefab_name": "ReagentColorBlue", "prefab_hash": 980054869, @@ -14903,6 +15581,7 @@ } }, "ReagentColorGreen": { + "templateType": "Item", "prefab": { "prefab_name": "ReagentColorGreen", "prefab_hash": 120807542, @@ -14921,6 +15600,7 @@ } }, "ReagentColorOrange": { + "templateType": "Item", "prefab": { "prefab_name": "ReagentColorOrange", "prefab_hash": -400696159, @@ -14939,6 +15619,7 @@ } }, "ReagentColorRed": { + "templateType": "Item", "prefab": { "prefab_name": "ReagentColorRed", "prefab_hash": 1998377961, @@ -14957,6 +15638,7 @@ } }, "ReagentColorYellow": { + "templateType": "Item", "prefab": { "prefab_name": "ReagentColorYellow", "prefab_hash": 635208006, @@ -14975,6 +15657,7 @@ } }, "RespawnPoint": { + "templateType": "Structure", "prefab": { "prefab_name": "RespawnPoint", "prefab_hash": -788672929, @@ -14986,6 +15669,7 @@ } }, "RespawnPointWallMounted": { + "templateType": "Structure", "prefab": { "prefab_name": "RespawnPointWallMounted", "prefab_hash": -491247370, @@ -14997,6 +15681,7 @@ } }, "Robot": { + "templateType": "ItemCircuitHolder", "prefab": { "prefab_name": "Robot", "prefab_hash": 434786784, @@ -15190,6 +15875,7 @@ ] }, "RoverCargo": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "RoverCargo", "prefab_hash": 350726273, @@ -15469,6 +16155,7 @@ ] }, "Rover_MkI": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "Rover_MkI", "prefab_hash": -2049946335, @@ -15672,6 +16359,7 @@ ] }, "Rover_MkI_build_states": { + "templateType": "Structure", "prefab": { "prefab_name": "Rover_MkI_build_states", "prefab_hash": 861674123, @@ -15683,6 +16371,7 @@ } }, "SMGMagazine": { + "templateType": "Item", "prefab": { "prefab_name": "SMGMagazine", "prefab_hash": -256607540, @@ -15698,6 +16387,7 @@ } }, "SeedBag_Cocoa": { + "templateType": "Item", "prefab": { "prefab_name": "SeedBag_Cocoa", "prefab_hash": 1139887531, @@ -15713,6 +16403,7 @@ } }, "SeedBag_Corn": { + "templateType": "Item", "prefab": { "prefab_name": "SeedBag_Corn", "prefab_hash": -1290755415, @@ -15728,6 +16419,7 @@ } }, "SeedBag_Fern": { + "templateType": "Item", "prefab": { "prefab_name": "SeedBag_Fern", "prefab_hash": -1990600883, @@ -15743,6 +16435,7 @@ } }, "SeedBag_Mushroom": { + "templateType": "Item", "prefab": { "prefab_name": "SeedBag_Mushroom", "prefab_hash": 311593418, @@ -15758,6 +16451,7 @@ } }, "SeedBag_Potato": { + "templateType": "Item", "prefab": { "prefab_name": "SeedBag_Potato", "prefab_hash": 1005571172, @@ -15773,6 +16467,7 @@ } }, "SeedBag_Pumpkin": { + "templateType": "Item", "prefab": { "prefab_name": "SeedBag_Pumpkin", "prefab_hash": 1423199840, @@ -15788,6 +16483,7 @@ } }, "SeedBag_Rice": { + "templateType": "Item", "prefab": { "prefab_name": "SeedBag_Rice", "prefab_hash": -1691151239, @@ -15803,6 +16499,7 @@ } }, "SeedBag_Soybean": { + "templateType": "Item", "prefab": { "prefab_name": "SeedBag_Soybean", "prefab_hash": 1783004244, @@ -15818,6 +16515,7 @@ } }, "SeedBag_SugarCane": { + "templateType": "Item", "prefab": { "prefab_name": "SeedBag_SugarCane", "prefab_hash": -1884103228, @@ -15833,6 +16531,7 @@ } }, "SeedBag_Switchgrass": { + "templateType": "Item", "prefab": { "prefab_name": "SeedBag_Switchgrass", "prefab_hash": 488360169, @@ -15848,6 +16547,7 @@ } }, "SeedBag_Tomato": { + "templateType": "Item", "prefab": { "prefab_name": "SeedBag_Tomato", "prefab_hash": -1922066841, @@ -15863,6 +16563,7 @@ } }, "SeedBag_Wheet": { + "templateType": "Item", "prefab": { "prefab_name": "SeedBag_Wheet", "prefab_hash": -654756733, @@ -15878,6 +16579,7 @@ } }, "SpaceShuttle": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "SpaceShuttle", "prefab_hash": -1991297271, @@ -15907,6 +16609,7 @@ ] }, "StopWatch": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StopWatch", "prefab_hash": -1527229051, @@ -15956,6 +16659,7 @@ } }, "StructureAccessBridge": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureAccessBridge", "prefab_hash": 1298920475, @@ -16005,6 +16709,7 @@ } }, "StructureActiveVent": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureActiveVent", "prefab_hash": -1129453144, @@ -16081,6 +16786,7 @@ } }, "StructureAdvancedComposter": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureAdvancedComposter", "prefab_hash": 446212963, @@ -16171,6 +16877,7 @@ } }, "StructureAdvancedFurnace": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureAdvancedFurnace", "prefab_hash": 545937711, @@ -16293,6 +17000,7 @@ } }, "StructureAdvancedPackagingMachine": { + "templateType": "StructureLogicDeviceConsumerMemory", "prefab": { "prefab_name": "StructureAdvancedPackagingMachine", "prefab_hash": -463037670, @@ -16981,6 +17689,7 @@ } }, "StructureAirConditioner": { + "templateType": "StructureCircuitHolder", "prefab": { "prefab_name": "StructureAirConditioner", "prefab_hash": -2087593337, @@ -17119,6 +17828,7 @@ } }, "StructureAirlock": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureAirlock", "prefab_hash": -2105052344, @@ -17174,6 +17884,7 @@ } }, "StructureAirlockGate": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureAirlockGate", "prefab_hash": 1736080881, @@ -17229,6 +17940,7 @@ } }, "StructureAngledBench": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureAngledBench", "prefab_hash": 1811979158, @@ -17280,6 +17992,7 @@ } }, "StructureArcFurnace": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureArcFurnace", "prefab_hash": -247344692, @@ -17375,6 +18088,7 @@ } }, "StructureAreaPowerControl": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureAreaPowerControl", "prefab_hash": 1999523701, @@ -17471,6 +18185,7 @@ } }, "StructureAreaPowerControlReversed": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureAreaPowerControlReversed", "prefab_hash": -1032513487, @@ -17567,6 +18282,7 @@ } }, "StructureAutoMinerSmall": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureAutoMinerSmall", "prefab_hash": 7274344, @@ -17639,6 +18355,7 @@ } }, "StructureAutolathe": { + "templateType": "StructureLogicDeviceConsumerMemory", "prefab": { "prefab_name": "StructureAutolathe", "prefab_hash": 336213101, @@ -19711,6 +20428,7 @@ } }, "StructureAutomatedOven": { + "templateType": "StructureLogicDeviceConsumerMemory", "prefab": { "prefab_name": "StructureAutomatedOven", "prefab_hash": -1672404896, @@ -20627,6 +21345,7 @@ } }, "StructureBackLiquidPressureRegulator": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureBackLiquidPressureRegulator", "prefab_hash": 2099900163, @@ -20682,6 +21401,7 @@ } }, "StructureBackPressureRegulator": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureBackPressureRegulator", "prefab_hash": -1149857558, @@ -20737,6 +21457,7 @@ } }, "StructureBasketHoop": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureBasketHoop", "prefab_hash": -1613497288, @@ -20785,6 +21506,7 @@ } }, "StructureBattery": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureBattery", "prefab_hash": -400115994, @@ -20851,6 +21573,7 @@ } }, "StructureBatteryCharger": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureBatteryCharger", "prefab_hash": 1945930022, @@ -20986,6 +21709,7 @@ } }, "StructureBatteryChargerSmall": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureBatteryChargerSmall", "prefab_hash": -761772413, @@ -21066,6 +21790,7 @@ } }, "StructureBatteryLarge": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureBatteryLarge", "prefab_hash": -1388288459, @@ -21132,6 +21857,7 @@ } }, "StructureBatteryMedium": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureBatteryMedium", "prefab_hash": -1125305264, @@ -21196,6 +21922,7 @@ } }, "StructureBatterySmall": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureBatterySmall", "prefab_hash": -2123455080, @@ -21260,6 +21987,7 @@ } }, "StructureBeacon": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureBeacon", "prefab_hash": -188177083, @@ -21309,6 +22037,7 @@ } }, "StructureBench": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureBench", "prefab_hash": -2042448192, @@ -21390,6 +22119,7 @@ } }, "StructureBench1": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureBench1", "prefab_hash": 406745009, @@ -21471,6 +22201,7 @@ } }, "StructureBench2": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureBench2", "prefab_hash": -2127086069, @@ -21552,6 +22283,7 @@ } }, "StructureBench3": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureBench3", "prefab_hash": -164622691, @@ -21633,6 +22365,7 @@ } }, "StructureBench4": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureBench4", "prefab_hash": 1750375230, @@ -21714,6 +22447,7 @@ } }, "StructureBlastDoor": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureBlastDoor", "prefab_hash": 337416191, @@ -21769,6 +22503,7 @@ } }, "StructureBlockBed": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureBlockBed", "prefab_hash": 697908419, @@ -21830,6 +22565,7 @@ } }, "StructureBlocker": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureBlocker", "prefab_hash": 378084505, @@ -21841,6 +22577,7 @@ } }, "StructureCableAnalysizer": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureCableAnalysizer", "prefab_hash": 1036015121, @@ -21883,6 +22620,7 @@ } }, "StructureCableCorner": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableCorner", "prefab_hash": -889269388, @@ -21894,6 +22632,7 @@ } }, "StructureCableCorner3": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableCorner3", "prefab_hash": 980469101, @@ -21905,6 +22644,7 @@ } }, "StructureCableCorner3Burnt": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableCorner3Burnt", "prefab_hash": 318437449, @@ -21916,6 +22656,7 @@ } }, "StructureCableCorner3HBurnt": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableCorner3HBurnt", "prefab_hash": 2393826, @@ -21927,6 +22668,7 @@ } }, "StructureCableCorner4": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableCorner4", "prefab_hash": -1542172466, @@ -21938,6 +22680,7 @@ } }, "StructureCableCorner4Burnt": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableCorner4Burnt", "prefab_hash": 268421361, @@ -21949,6 +22692,7 @@ } }, "StructureCableCorner4HBurnt": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableCorner4HBurnt", "prefab_hash": -981223316, @@ -21960,6 +22704,7 @@ } }, "StructureCableCornerBurnt": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableCornerBurnt", "prefab_hash": -177220914, @@ -21971,6 +22716,7 @@ } }, "StructureCableCornerH": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableCornerH", "prefab_hash": -39359015, @@ -21982,6 +22728,7 @@ } }, "StructureCableCornerH3": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableCornerH3", "prefab_hash": -1843379322, @@ -21993,6 +22740,7 @@ } }, "StructureCableCornerH4": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableCornerH4", "prefab_hash": 205837861, @@ -22004,6 +22752,7 @@ } }, "StructureCableCornerHBurnt": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableCornerHBurnt", "prefab_hash": 1931412811, @@ -22015,6 +22764,7 @@ } }, "StructureCableFuse100k": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureCableFuse100k", "prefab_hash": 281380789, @@ -22049,6 +22799,7 @@ } }, "StructureCableFuse1k": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureCableFuse1k", "prefab_hash": -1103727120, @@ -22083,6 +22834,7 @@ } }, "StructureCableFuse50k": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureCableFuse50k", "prefab_hash": -349716617, @@ -22117,6 +22869,7 @@ } }, "StructureCableFuse5k": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureCableFuse5k", "prefab_hash": -631590668, @@ -22151,6 +22904,7 @@ } }, "StructureCableJunction": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableJunction", "prefab_hash": -175342021, @@ -22162,6 +22916,7 @@ } }, "StructureCableJunction4": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableJunction4", "prefab_hash": 1112047202, @@ -22173,6 +22928,7 @@ } }, "StructureCableJunction4Burnt": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableJunction4Burnt", "prefab_hash": -1756896811, @@ -22184,6 +22940,7 @@ } }, "StructureCableJunction4HBurnt": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableJunction4HBurnt", "prefab_hash": -115809132, @@ -22195,6 +22952,7 @@ } }, "StructureCableJunction5": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableJunction5", "prefab_hash": 894390004, @@ -22206,6 +22964,7 @@ } }, "StructureCableJunction5Burnt": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableJunction5Burnt", "prefab_hash": 1545286256, @@ -22217,6 +22976,7 @@ } }, "StructureCableJunction6": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableJunction6", "prefab_hash": -1404690610, @@ -22228,6 +22988,7 @@ } }, "StructureCableJunction6Burnt": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableJunction6Burnt", "prefab_hash": -628145954, @@ -22239,6 +23000,7 @@ } }, "StructureCableJunction6HBurnt": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableJunction6HBurnt", "prefab_hash": 1854404029, @@ -22250,6 +23012,7 @@ } }, "StructureCableJunctionBurnt": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableJunctionBurnt", "prefab_hash": -1620686196, @@ -22261,6 +23024,7 @@ } }, "StructureCableJunctionH": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableJunctionH", "prefab_hash": 469451637, @@ -22272,6 +23036,7 @@ } }, "StructureCableJunctionH4": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableJunctionH4", "prefab_hash": -742234680, @@ -22283,6 +23048,7 @@ } }, "StructureCableJunctionH5": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableJunctionH5", "prefab_hash": -1530571426, @@ -22294,6 +23060,7 @@ } }, "StructureCableJunctionH5Burnt": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableJunctionH5Burnt", "prefab_hash": 1701593300, @@ -22305,6 +23072,7 @@ } }, "StructureCableJunctionH6": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableJunctionH6", "prefab_hash": 1036780772, @@ -22316,6 +23084,7 @@ } }, "StructureCableJunctionHBurnt": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableJunctionHBurnt", "prefab_hash": -341365649, @@ -22327,6 +23096,7 @@ } }, "StructureCableStraight": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableStraight", "prefab_hash": 605357050, @@ -22338,6 +23108,7 @@ } }, "StructureCableStraightBurnt": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableStraightBurnt", "prefab_hash": -1196981113, @@ -22349,6 +23120,7 @@ } }, "StructureCableStraightH": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableStraightH", "prefab_hash": -146200530, @@ -22360,6 +23132,7 @@ } }, "StructureCableStraightHBurnt": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCableStraightHBurnt", "prefab_hash": 2085762089, @@ -22371,6 +23144,7 @@ } }, "StructureCamera": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureCamera", "prefab_hash": -342072665, @@ -22416,6 +23190,7 @@ } }, "StructureCapsuleTankGas": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureCapsuleTankGas", "prefab_hash": -1385712131, @@ -22489,6 +23264,7 @@ } }, "StructureCapsuleTankLiquid": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureCapsuleTankLiquid", "prefab_hash": 1415396263, @@ -22562,6 +23338,7 @@ } }, "StructureCargoStorageMedium": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureCargoStorageMedium", "prefab_hash": 1151864003, @@ -23132,6 +23909,7 @@ } }, "StructureCargoStorageSmall": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureCargoStorageSmall", "prefab_hash": -1493672123, @@ -23972,6 +24750,7 @@ } }, "StructureCentrifuge": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureCentrifuge", "prefab_hash": 690945935, @@ -24044,6 +24823,7 @@ } }, "StructureChair": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureChair", "prefab_hash": 1167659360, @@ -24095,6 +24875,7 @@ } }, "StructureChairBacklessDouble": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureChairBacklessDouble", "prefab_hash": 1944858936, @@ -24146,6 +24927,7 @@ } }, "StructureChairBacklessSingle": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureChairBacklessSingle", "prefab_hash": 1672275150, @@ -24197,6 +24979,7 @@ } }, "StructureChairBoothCornerLeft": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureChairBoothCornerLeft", "prefab_hash": -367720198, @@ -24248,6 +25031,7 @@ } }, "StructureChairBoothMiddle": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureChairBoothMiddle", "prefab_hash": 1640720378, @@ -24299,6 +25083,7 @@ } }, "StructureChairRectangleDouble": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureChairRectangleDouble", "prefab_hash": -1152812099, @@ -24350,6 +25135,7 @@ } }, "StructureChairRectangleSingle": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureChairRectangleSingle", "prefab_hash": -1425428917, @@ -24401,6 +25187,7 @@ } }, "StructureChairThickDouble": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureChairThickDouble", "prefab_hash": -1245724402, @@ -24452,6 +25239,7 @@ } }, "StructureChairThickSingle": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureChairThickSingle", "prefab_hash": -1510009608, @@ -24503,6 +25291,7 @@ } }, "StructureChuteBin": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureChuteBin", "prefab_hash": -850484480, @@ -24569,6 +25358,7 @@ } }, "StructureChuteCorner": { + "templateType": "StructureSlots", "prefab": { "prefab_name": "StructureChuteCorner", "prefab_hash": 1360330136, @@ -24586,6 +25376,7 @@ ] }, "StructureChuteDigitalFlipFlopSplitterLeft": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureChuteDigitalFlipFlopSplitterLeft", "prefab_hash": -810874728, @@ -24665,6 +25456,7 @@ } }, "StructureChuteDigitalFlipFlopSplitterRight": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureChuteDigitalFlipFlopSplitterRight", "prefab_hash": 163728359, @@ -24744,6 +25536,7 @@ } }, "StructureChuteDigitalValveLeft": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureChuteDigitalValveLeft", "prefab_hash": 648608238, @@ -24815,6 +25608,7 @@ } }, "StructureChuteDigitalValveRight": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureChuteDigitalValveRight", "prefab_hash": -1337091041, @@ -24886,6 +25680,7 @@ } }, "StructureChuteFlipFlopSplitter": { + "templateType": "StructureSlots", "prefab": { "prefab_name": "StructureChuteFlipFlopSplitter", "prefab_hash": -1446854725, @@ -24903,6 +25698,7 @@ ] }, "StructureChuteInlet": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureChuteInlet", "prefab_hash": -1469588766, @@ -24966,6 +25762,7 @@ } }, "StructureChuteJunction": { + "templateType": "StructureSlots", "prefab": { "prefab_name": "StructureChuteJunction", "prefab_hash": -611232514, @@ -24983,6 +25780,7 @@ ] }, "StructureChuteOutlet": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureChuteOutlet", "prefab_hash": -1022714809, @@ -25047,6 +25845,7 @@ } }, "StructureChuteOverflow": { + "templateType": "StructureSlots", "prefab": { "prefab_name": "StructureChuteOverflow", "prefab_hash": 225377225, @@ -25064,6 +25863,7 @@ ] }, "StructureChuteStraight": { + "templateType": "StructureSlots", "prefab": { "prefab_name": "StructureChuteStraight", "prefab_hash": 168307007, @@ -25081,6 +25881,7 @@ ] }, "StructureChuteUmbilicalFemale": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureChuteUmbilicalFemale", "prefab_hash": -1918892177, @@ -25137,6 +25938,7 @@ } }, "StructureChuteUmbilicalFemaleSide": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureChuteUmbilicalFemaleSide", "prefab_hash": -659093969, @@ -25193,6 +25995,7 @@ } }, "StructureChuteUmbilicalMale": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureChuteUmbilicalMale", "prefab_hash": -958884053, @@ -25265,6 +26068,7 @@ } }, "StructureChuteValve": { + "templateType": "StructureSlots", "prefab": { "prefab_name": "StructureChuteValve", "prefab_hash": 434875271, @@ -25282,6 +26086,7 @@ ] }, "StructureChuteWindow": { + "templateType": "StructureSlots", "prefab": { "prefab_name": "StructureChuteWindow", "prefab_hash": -607241919, @@ -25299,6 +26104,7 @@ ] }, "StructureCircuitHousing": { + "templateType": "StructureCircuitHolder", "prefab": { "prefab_name": "StructureCircuitHousing", "prefab_hash": -128473777, @@ -25367,6 +26173,7 @@ } }, "StructureCombustionCentrifuge": { + "templateType": "StructureCircuitHolder", "prefab": { "prefab_name": "StructureCombustionCentrifuge", "prefab_hash": 1238905683, @@ -25519,6 +26326,7 @@ } }, "StructureCompositeCladdingAngled": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeCladdingAngled", "prefab_hash": -1513030150, @@ -25530,6 +26338,7 @@ } }, "StructureCompositeCladdingAngledCorner": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeCladdingAngledCorner", "prefab_hash": -69685069, @@ -25541,6 +26350,7 @@ } }, "StructureCompositeCladdingAngledCornerInner": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeCladdingAngledCornerInner", "prefab_hash": -1841871763, @@ -25552,6 +26362,7 @@ } }, "StructureCompositeCladdingAngledCornerInnerLong": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeCladdingAngledCornerInnerLong", "prefab_hash": -1417912632, @@ -25563,6 +26374,7 @@ } }, "StructureCompositeCladdingAngledCornerInnerLongL": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeCladdingAngledCornerInnerLongL", "prefab_hash": 947705066, @@ -25574,6 +26386,7 @@ } }, "StructureCompositeCladdingAngledCornerInnerLongR": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeCladdingAngledCornerInnerLongR", "prefab_hash": -1032590967, @@ -25585,6 +26398,7 @@ } }, "StructureCompositeCladdingAngledCornerLong": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeCladdingAngledCornerLong", "prefab_hash": 850558385, @@ -25596,6 +26410,7 @@ } }, "StructureCompositeCladdingAngledCornerLongR": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeCladdingAngledCornerLongR", "prefab_hash": -348918222, @@ -25607,6 +26422,7 @@ } }, "StructureCompositeCladdingAngledLong": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeCladdingAngledLong", "prefab_hash": -387546514, @@ -25618,6 +26434,7 @@ } }, "StructureCompositeCladdingCylindrical": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeCladdingCylindrical", "prefab_hash": 212919006, @@ -25629,6 +26446,7 @@ } }, "StructureCompositeCladdingCylindricalPanel": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeCladdingCylindricalPanel", "prefab_hash": 1077151132, @@ -25640,6 +26458,7 @@ } }, "StructureCompositeCladdingPanel": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeCladdingPanel", "prefab_hash": 1997436771, @@ -25651,6 +26470,7 @@ } }, "StructureCompositeCladdingRounded": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeCladdingRounded", "prefab_hash": -259357734, @@ -25662,6 +26482,7 @@ } }, "StructureCompositeCladdingRoundedCorner": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeCladdingRoundedCorner", "prefab_hash": 1951525046, @@ -25673,6 +26494,7 @@ } }, "StructureCompositeCladdingRoundedCornerInner": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeCladdingRoundedCornerInner", "prefab_hash": 110184667, @@ -25684,6 +26506,7 @@ } }, "StructureCompositeCladdingSpherical": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeCladdingSpherical", "prefab_hash": 139107321, @@ -25695,6 +26518,7 @@ } }, "StructureCompositeCladdingSphericalCap": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeCladdingSphericalCap", "prefab_hash": 534213209, @@ -25706,6 +26530,7 @@ } }, "StructureCompositeCladdingSphericalCorner": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeCladdingSphericalCorner", "prefab_hash": 1751355139, @@ -25717,6 +26542,7 @@ } }, "StructureCompositeDoor": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureCompositeDoor", "prefab_hash": -793837322, @@ -25772,6 +26598,7 @@ } }, "StructureCompositeFloorGrating": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeFloorGrating", "prefab_hash": 324868581, @@ -25783,6 +26610,7 @@ } }, "StructureCompositeFloorGrating2": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeFloorGrating2", "prefab_hash": -895027741, @@ -25794,6 +26622,7 @@ } }, "StructureCompositeFloorGrating3": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeFloorGrating3", "prefab_hash": -1113471627, @@ -25805,6 +26634,7 @@ } }, "StructureCompositeFloorGrating4": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeFloorGrating4", "prefab_hash": 600133846, @@ -25816,6 +26646,7 @@ } }, "StructureCompositeFloorGratingOpen": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeFloorGratingOpen", "prefab_hash": 2109695912, @@ -25827,6 +26658,7 @@ } }, "StructureCompositeFloorGratingOpenRotated": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeFloorGratingOpenRotated", "prefab_hash": 882307910, @@ -25838,6 +26670,7 @@ } }, "StructureCompositeWall": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeWall", "prefab_hash": 1237302061, @@ -25849,6 +26682,7 @@ } }, "StructureCompositeWall02": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeWall02", "prefab_hash": 718343384, @@ -25860,6 +26694,7 @@ } }, "StructureCompositeWall03": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeWall03", "prefab_hash": 1574321230, @@ -25871,6 +26706,7 @@ } }, "StructureCompositeWall04": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeWall04", "prefab_hash": -1011701267, @@ -25882,6 +26718,7 @@ } }, "StructureCompositeWindow": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeWindow", "prefab_hash": -2060571986, @@ -25893,6 +26730,7 @@ } }, "StructureCompositeWindowIron": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureCompositeWindowIron", "prefab_hash": -688284639, @@ -25904,6 +26742,7 @@ } }, "StructureComputer": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureComputer", "prefab_hash": -626563514, @@ -25970,6 +26809,7 @@ } }, "StructureCondensationChamber": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureCondensationChamber", "prefab_hash": 1420719315, @@ -26059,6 +26899,7 @@ } }, "StructureCondensationValve": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureCondensationValve", "prefab_hash": -965741795, @@ -26106,6 +26947,7 @@ } }, "StructureConsole": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureConsole", "prefab_hash": 235638270, @@ -26163,6 +27005,7 @@ } }, "StructureConsoleDual": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureConsoleDual", "prefab_hash": -722284333, @@ -26224,6 +27067,7 @@ } }, "StructureConsoleLED1x2": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureConsoleLED1x2", "prefab_hash": -53151617, @@ -26275,6 +27119,7 @@ } }, "StructureConsoleLED1x3": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureConsoleLED1x3", "prefab_hash": -1949054743, @@ -26326,6 +27171,7 @@ } }, "StructureConsoleLED5": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureConsoleLED5", "prefab_hash": -815193061, @@ -26377,6 +27223,7 @@ } }, "StructureConsoleMonitor": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureConsoleMonitor", "prefab_hash": 801677497, @@ -26434,6 +27281,7 @@ } }, "StructureControlChair": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureControlChair", "prefab_hash": -1961153710, @@ -26538,6 +27386,7 @@ } }, "StructureCornerLocker": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureCornerLocker", "prefab_hash": -1968255729, @@ -26666,6 +27515,7 @@ } }, "StructureCrateMount": { + "templateType": "StructureSlots", "prefab": { "prefab_name": "StructureCrateMount", "prefab_hash": -733500083, @@ -26683,6 +27533,7 @@ ] }, "StructureCryoTube": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureCryoTube", "prefab_hash": 1938254586, @@ -26764,6 +27615,7 @@ } }, "StructureCryoTubeHorizontal": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureCryoTubeHorizontal", "prefab_hash": 1443059329, @@ -26835,6 +27687,7 @@ } }, "StructureCryoTubeVertical": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureCryoTubeVertical", "prefab_hash": -1381321828, @@ -26906,6 +27759,7 @@ } }, "StructureDaylightSensor": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureDaylightSensor", "prefab_hash": 1076425094, @@ -26957,6 +27811,7 @@ } }, "StructureDeepMiner": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureDeepMiner", "prefab_hash": 265720906, @@ -27021,6 +27876,7 @@ } }, "StructureDigitalValve": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureDigitalValve", "prefab_hash": -1280984102, @@ -27076,6 +27932,7 @@ } }, "StructureDiode": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureDiode", "prefab_hash": 1944485013, @@ -27120,6 +27977,7 @@ } }, "StructureDiodeSlide": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureDiodeSlide", "prefab_hash": 576516101, @@ -27164,6 +28022,7 @@ } }, "StructureDockPortSide": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureDockPortSide", "prefab_hash": -137465079, @@ -27214,6 +28073,7 @@ } }, "StructureDrinkingFountain": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureDrinkingFountain", "prefab_hash": 1968371847, @@ -27261,6 +28121,7 @@ } }, "StructureElectrolyzer": { + "templateType": "StructureCircuitHolder", "prefab": { "prefab_name": "StructureElectrolyzer", "prefab_hash": -1668992663, @@ -27396,6 +28257,7 @@ } }, "StructureElectronicsPrinter": { + "templateType": "StructureLogicDeviceConsumerMemory", "prefab": { "prefab_name": "StructureElectronicsPrinter", "prefab_hash": 1307165496, @@ -31367,6 +32229,7 @@ } }, "StructureElevatorLevelFront": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureElevatorLevelFront", "prefab_hash": -827912235, @@ -31427,6 +32290,7 @@ } }, "StructureElevatorLevelIndustrial": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureElevatorLevelIndustrial", "prefab_hash": 2060648791, @@ -31479,6 +32343,7 @@ } }, "StructureElevatorShaft": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureElevatorShaft", "prefab_hash": 826144419, @@ -31535,6 +32400,7 @@ } }, "StructureElevatorShaftIndustrial": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureElevatorShaftIndustrial", "prefab_hash": 1998354978, @@ -31580,6 +32446,7 @@ } }, "StructureEmergencyButton": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureEmergencyButton", "prefab_hash": 1668452680, @@ -31631,6 +32498,7 @@ } }, "StructureEngineMountTypeA1": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureEngineMountTypeA1", "prefab_hash": 2035781224, @@ -31642,6 +32510,7 @@ } }, "StructureEvaporationChamber": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureEvaporationChamber", "prefab_hash": -1429782576, @@ -31731,6 +32600,7 @@ } }, "StructureExpansionValve": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureExpansionValve", "prefab_hash": 195298587, @@ -31778,6 +32648,7 @@ } }, "StructureFairingTypeA1": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureFairingTypeA1", "prefab_hash": 1622567418, @@ -31789,6 +32660,7 @@ } }, "StructureFairingTypeA2": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureFairingTypeA2", "prefab_hash": -104908736, @@ -31800,6 +32672,7 @@ } }, "StructureFairingTypeA3": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureFairingTypeA3", "prefab_hash": -1900541738, @@ -31811,6 +32684,7 @@ } }, "StructureFiltration": { + "templateType": "StructureCircuitHolder", "prefab": { "prefab_name": "StructureFiltration", "prefab_hash": -348054045, @@ -31952,6 +32826,7 @@ } }, "StructureFlagSmall": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureFlagSmall", "prefab_hash": -1529819532, @@ -31963,6 +32838,7 @@ } }, "StructureFlashingLight": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureFlashingLight", "prefab_hash": -1535893860, @@ -32006,6 +32882,7 @@ } }, "StructureFlatBench": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureFlatBench", "prefab_hash": 839890807, @@ -32057,6 +32934,7 @@ } }, "StructureFloorDrain": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureFloorDrain", "prefab_hash": 1048813293, @@ -32072,6 +32950,7 @@ } }, "StructureFrame": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureFrame", "prefab_hash": 1432512808, @@ -32083,6 +32962,7 @@ } }, "StructureFrameCorner": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureFrameCorner", "prefab_hash": -2112390778, @@ -32094,6 +32974,7 @@ } }, "StructureFrameCornerCut": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureFrameCornerCut", "prefab_hash": 271315669, @@ -32105,6 +32986,7 @@ } }, "StructureFrameIron": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureFrameIron", "prefab_hash": -1240951678, @@ -32116,6 +32998,7 @@ } }, "StructureFrameSide": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureFrameSide", "prefab_hash": -302420053, @@ -32127,6 +33010,7 @@ } }, "StructureFridgeBig": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureFridgeBig", "prefab_hash": 958476921, @@ -32430,6 +33314,7 @@ } }, "StructureFridgeSmall": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureFridgeSmall", "prefab_hash": 751887598, @@ -32530,6 +33415,7 @@ } }, "StructureFurnace": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureFurnace", "prefab_hash": 1947944864, @@ -32642,6 +33528,7 @@ } }, "StructureFuselageTypeA1": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureFuselageTypeA1", "prefab_hash": 1033024712, @@ -32653,6 +33540,7 @@ } }, "StructureFuselageTypeA2": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureFuselageTypeA2", "prefab_hash": -1533287054, @@ -32664,6 +33552,7 @@ } }, "StructureFuselageTypeA4": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureFuselageTypeA4", "prefab_hash": 1308115015, @@ -32675,6 +33564,7 @@ } }, "StructureFuselageTypeC5": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureFuselageTypeC5", "prefab_hash": 147395155, @@ -32686,6 +33576,7 @@ } }, "StructureGasGenerator": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureGasGenerator", "prefab_hash": 1165997963, @@ -32770,6 +33661,7 @@ } }, "StructureGasMixer": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureGasMixer", "prefab_hash": 2104106366, @@ -32829,6 +33721,7 @@ } }, "StructureGasSensor": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureGasSensor", "prefab_hash": -1252983604, @@ -32888,6 +33781,7 @@ } }, "StructureGasTankStorage": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureGasTankStorage", "prefab_hash": 1632165346, @@ -32962,6 +33856,7 @@ } }, "StructureGasUmbilicalFemale": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureGasUmbilicalFemale", "prefab_hash": -1680477930, @@ -33004,6 +33899,7 @@ } }, "StructureGasUmbilicalFemaleSide": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureGasUmbilicalFemaleSide", "prefab_hash": -648683847, @@ -33046,6 +33942,7 @@ } }, "StructureGasUmbilicalMale": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureGasUmbilicalMale", "prefab_hash": -1814939203, @@ -33104,6 +34001,7 @@ } }, "StructureGlassDoor": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureGlassDoor", "prefab_hash": -324331872, @@ -33159,6 +34057,7 @@ } }, "StructureGovernedGasEngine": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureGovernedGasEngine", "prefab_hash": -214232602, @@ -33229,6 +34128,7 @@ } }, "StructureGroundBasedTelescope": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureGroundBasedTelescope", "prefab_hash": -619745681, @@ -33293,6 +34193,7 @@ } }, "StructureGrowLight": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureGrowLight", "prefab_hash": -1758710260, @@ -33340,6 +34241,7 @@ } }, "StructureHarvie": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureHarvie", "prefab_hash": 958056199, @@ -33452,6 +34354,7 @@ } }, "StructureHeatExchangeLiquidtoGas": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureHeatExchangeLiquidtoGas", "prefab_hash": 944685608, @@ -33506,6 +34409,7 @@ } }, "StructureHeatExchangerGastoGas": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureHeatExchangerGastoGas", "prefab_hash": 21266291, @@ -33560,6 +34464,7 @@ } }, "StructureHeatExchangerLiquidtoLiquid": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureHeatExchangerLiquidtoLiquid", "prefab_hash": -613784254, @@ -33614,6 +34519,7 @@ } }, "StructureHorizontalAutoMiner": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureHorizontalAutoMiner", "prefab_hash": 1070427573, @@ -33691,6 +34597,7 @@ } }, "StructureHydraulicPipeBender": { + "templateType": "StructureLogicDeviceConsumerMemory", "prefab": { "prefab_name": "StructureHydraulicPipeBender", "prefab_hash": -1888248335, @@ -36865,6 +37772,7 @@ } }, "StructureHydroponicsStation": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureHydroponicsStation", "prefab_hash": 1441767298, @@ -37098,6 +38006,7 @@ } }, "StructureHydroponicsTray": { + "templateType": "StructureSlots", "prefab": { "prefab_name": "StructureHydroponicsTray", "prefab_hash": 1464854517, @@ -37123,6 +38032,7 @@ ] }, "StructureHydroponicsTrayData": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureHydroponicsTrayData", "prefab_hash": -1841632400, @@ -37232,6 +38142,7 @@ } }, "StructureIceCrusher": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureIceCrusher", "prefab_hash": 443849486, @@ -37309,6 +38220,7 @@ } }, "StructureIgniter": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureIgniter", "prefab_hash": 1005491513, @@ -37349,6 +38261,7 @@ } }, "StructureInLineTankGas1x1": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInLineTankGas1x1", "prefab_hash": -1693382705, @@ -37364,6 +38277,7 @@ } }, "StructureInLineTankGas1x2": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInLineTankGas1x2", "prefab_hash": 35149429, @@ -37379,6 +38293,7 @@ } }, "StructureInLineTankLiquid1x1": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInLineTankLiquid1x1", "prefab_hash": 543645499, @@ -37394,6 +38309,7 @@ } }, "StructureInLineTankLiquid1x2": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInLineTankLiquid1x2", "prefab_hash": -1183969663, @@ -37409,6 +38325,7 @@ } }, "StructureInsulatedInLineTankGas1x1": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInsulatedInLineTankGas1x1", "prefab_hash": 1818267386, @@ -37424,6 +38341,7 @@ } }, "StructureInsulatedInLineTankGas1x2": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInsulatedInLineTankGas1x2", "prefab_hash": -177610944, @@ -37439,6 +38357,7 @@ } }, "StructureInsulatedInLineTankLiquid1x1": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInsulatedInLineTankLiquid1x1", "prefab_hash": -813426145, @@ -37454,6 +38373,7 @@ } }, "StructureInsulatedInLineTankLiquid1x2": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInsulatedInLineTankLiquid1x2", "prefab_hash": 1452100517, @@ -37469,6 +38389,7 @@ } }, "StructureInsulatedPipeCorner": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInsulatedPipeCorner", "prefab_hash": -1967711059, @@ -37484,6 +38405,7 @@ } }, "StructureInsulatedPipeCrossJunction": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInsulatedPipeCrossJunction", "prefab_hash": -92778058, @@ -37499,6 +38421,7 @@ } }, "StructureInsulatedPipeCrossJunction3": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInsulatedPipeCrossJunction3", "prefab_hash": 1328210035, @@ -37514,6 +38437,7 @@ } }, "StructureInsulatedPipeCrossJunction4": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInsulatedPipeCrossJunction4", "prefab_hash": -783387184, @@ -37529,6 +38453,7 @@ } }, "StructureInsulatedPipeCrossJunction5": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInsulatedPipeCrossJunction5", "prefab_hash": -1505147578, @@ -37544,6 +38469,7 @@ } }, "StructureInsulatedPipeCrossJunction6": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInsulatedPipeCrossJunction6", "prefab_hash": 1061164284, @@ -37559,6 +38485,7 @@ } }, "StructureInsulatedPipeLiquidCorner": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInsulatedPipeLiquidCorner", "prefab_hash": 1713710802, @@ -37574,6 +38501,7 @@ } }, "StructureInsulatedPipeLiquidCrossJunction": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInsulatedPipeLiquidCrossJunction", "prefab_hash": 1926651727, @@ -37589,6 +38517,7 @@ } }, "StructureInsulatedPipeLiquidCrossJunction4": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInsulatedPipeLiquidCrossJunction4", "prefab_hash": 363303270, @@ -37604,6 +38533,7 @@ } }, "StructureInsulatedPipeLiquidCrossJunction5": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInsulatedPipeLiquidCrossJunction5", "prefab_hash": 1654694384, @@ -37619,6 +38549,7 @@ } }, "StructureInsulatedPipeLiquidCrossJunction6": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInsulatedPipeLiquidCrossJunction6", "prefab_hash": -72748982, @@ -37634,6 +38565,7 @@ } }, "StructureInsulatedPipeLiquidStraight": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInsulatedPipeLiquidStraight", "prefab_hash": 295678685, @@ -37649,6 +38581,7 @@ } }, "StructureInsulatedPipeLiquidTJunction": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInsulatedPipeLiquidTJunction", "prefab_hash": -532384855, @@ -37664,6 +38597,7 @@ } }, "StructureInsulatedPipeStraight": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInsulatedPipeStraight", "prefab_hash": 2134172356, @@ -37679,6 +38613,7 @@ } }, "StructureInsulatedPipeTJunction": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureInsulatedPipeTJunction", "prefab_hash": -2076086215, @@ -37694,6 +38629,7 @@ } }, "StructureInsulatedTankConnector": { + "templateType": "StructureSlots", "prefab": { "prefab_name": "StructureInsulatedTankConnector", "prefab_hash": -31273349, @@ -37715,6 +38651,7 @@ ] }, "StructureInsulatedTankConnectorLiquid": { + "templateType": "StructureSlots", "prefab": { "prefab_name": "StructureInsulatedTankConnectorLiquid", "prefab_hash": -1602030414, @@ -37736,6 +38673,7 @@ ] }, "StructureInteriorDoorGlass": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureInteriorDoorGlass", "prefab_hash": -2096421875, @@ -37782,6 +38720,7 @@ } }, "StructureInteriorDoorPadded": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureInteriorDoorPadded", "prefab_hash": 847461335, @@ -37828,6 +38767,7 @@ } }, "StructureInteriorDoorPaddedThin": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureInteriorDoorPaddedThin", "prefab_hash": 1981698201, @@ -37874,6 +38814,7 @@ } }, "StructureInteriorDoorTriangle": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureInteriorDoorTriangle", "prefab_hash": -1182923101, @@ -37920,6 +38861,7 @@ } }, "StructureKlaxon": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureKlaxon", "prefab_hash": -828056979, @@ -38013,6 +38955,7 @@ } }, "StructureLadder": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureLadder", "prefab_hash": -415420281, @@ -38024,6 +38967,7 @@ } }, "StructureLadderEnd": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureLadderEnd", "prefab_hash": 1541734993, @@ -38035,6 +38979,7 @@ } }, "StructureLargeDirectHeatExchangeGastoGas": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLargeDirectHeatExchangeGastoGas", "prefab_hash": -1230658883, @@ -38081,6 +39026,7 @@ } }, "StructureLargeDirectHeatExchangeGastoLiquid": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLargeDirectHeatExchangeGastoLiquid", "prefab_hash": 1412338038, @@ -38127,6 +39073,7 @@ } }, "StructureLargeDirectHeatExchangeLiquidtoLiquid": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLargeDirectHeatExchangeLiquidtoLiquid", "prefab_hash": 792686502, @@ -38173,6 +39120,7 @@ } }, "StructureLargeExtendableRadiator": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLargeExtendableRadiator", "prefab_hash": -566775170, @@ -38230,6 +39178,7 @@ } }, "StructureLargeHangerDoor": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLargeHangerDoor", "prefab_hash": -1351081801, @@ -38285,6 +39234,7 @@ } }, "StructureLargeSatelliteDish": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLargeSatelliteDish", "prefab_hash": 1913391845, @@ -38347,6 +39297,7 @@ } }, "StructureLaunchMount": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureLaunchMount", "prefab_hash": -558953231, @@ -38358,6 +39309,7 @@ } }, "StructureLightLong": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLightLong", "prefab_hash": 797794350, @@ -38401,6 +39353,7 @@ } }, "StructureLightLongAngled": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLightLongAngled", "prefab_hash": 1847265835, @@ -38444,6 +39397,7 @@ } }, "StructureLightLongWide": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLightLongWide", "prefab_hash": 555215790, @@ -38487,6 +39441,7 @@ } }, "StructureLightRound": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLightRound", "prefab_hash": 1514476632, @@ -38530,6 +39485,7 @@ } }, "StructureLightRoundAngled": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLightRoundAngled", "prefab_hash": 1592905386, @@ -38573,6 +39529,7 @@ } }, "StructureLightRoundSmall": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLightRoundSmall", "prefab_hash": 1436121888, @@ -38616,6 +39573,7 @@ } }, "StructureLiquidDrain": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLiquidDrain", "prefab_hash": 1687692899, @@ -38671,6 +39629,7 @@ } }, "StructureLiquidPipeAnalyzer": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLiquidPipeAnalyzer", "prefab_hash": -2113838091, @@ -38738,6 +39697,7 @@ } }, "StructureLiquidPipeHeater": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLiquidPipeHeater", "prefab_hash": -287495560, @@ -38786,6 +39746,7 @@ } }, "StructureLiquidPipeOneWayValve": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLiquidPipeOneWayValve", "prefab_hash": -782453061, @@ -38832,6 +39793,7 @@ } }, "StructureLiquidPipeRadiator": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLiquidPipeRadiator", "prefab_hash": 2072805863, @@ -38870,6 +39832,7 @@ } }, "StructureLiquidPressureRegulator": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLiquidPressureRegulator", "prefab_hash": 482248766, @@ -38925,6 +39888,7 @@ } }, "StructureLiquidTankBig": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLiquidTankBig", "prefab_hash": 1098900430, @@ -38998,6 +39962,7 @@ } }, "StructureLiquidTankBigInsulated": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLiquidTankBigInsulated", "prefab_hash": -1430440215, @@ -39071,6 +40036,7 @@ } }, "StructureLiquidTankSmall": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLiquidTankSmall", "prefab_hash": 1988118157, @@ -39144,6 +40110,7 @@ } }, "StructureLiquidTankSmallInsulated": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLiquidTankSmallInsulated", "prefab_hash": 608607718, @@ -39217,6 +40184,7 @@ } }, "StructureLiquidTankStorage": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLiquidTankStorage", "prefab_hash": 1691898022, @@ -39291,6 +40259,7 @@ } }, "StructureLiquidTurboVolumePump": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLiquidTurboVolumePump", "prefab_hash": -1051805505, @@ -39355,6 +40324,7 @@ } }, "StructureLiquidUmbilicalFemale": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLiquidUmbilicalFemale", "prefab_hash": 1734723642, @@ -39397,6 +40367,7 @@ } }, "StructureLiquidUmbilicalFemaleSide": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLiquidUmbilicalFemaleSide", "prefab_hash": 1220870319, @@ -39439,6 +40410,7 @@ } }, "StructureLiquidUmbilicalMale": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLiquidUmbilicalMale", "prefab_hash": -1798420047, @@ -39497,6 +40469,7 @@ } }, "StructureLiquidValve": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLiquidValve", "prefab_hash": 1849974453, @@ -39544,6 +40517,7 @@ } }, "StructureLiquidVolumePump": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLiquidVolumePump", "prefab_hash": -454028979, @@ -39599,6 +40573,7 @@ } }, "StructureLockerSmall": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLockerSmall", "prefab_hash": -647164662, @@ -39697,6 +40672,7 @@ } }, "StructureLogicBatchReader": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicBatchReader", "prefab_hash": 264413729, @@ -39749,6 +40725,7 @@ } }, "StructureLogicBatchSlotReader": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicBatchSlotReader", "prefab_hash": 436888930, @@ -39801,6 +40778,7 @@ } }, "StructureLogicBatchWriter": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicBatchWriter", "prefab_hash": 1415443359, @@ -39853,6 +40831,7 @@ } }, "StructureLogicButton": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicButton", "prefab_hash": 491845673, @@ -39899,6 +40878,7 @@ } }, "StructureLogicCompare": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicCompare", "prefab_hash": -1489728908, @@ -39962,6 +40942,7 @@ } }, "StructureLogicDial": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicDial", "prefab_hash": 554524804, @@ -40004,6 +40985,7 @@ } }, "StructureLogicGate": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicGate", "prefab_hash": 1942143074, @@ -40069,6 +41051,7 @@ } }, "StructureLogicHashGen": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicHashGen", "prefab_hash": 2077593121, @@ -40113,6 +41096,7 @@ } }, "StructureLogicMath": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicMath", "prefab_hash": 1657691323, @@ -40180,6 +41164,7 @@ } }, "StructureLogicMathUnary": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicMathUnary", "prefab_hash": -1160020195, @@ -40250,6 +41235,7 @@ } }, "StructureLogicMemory": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicMemory", "prefab_hash": -851746783, @@ -40294,6 +41280,7 @@ } }, "StructureLogicMinMax": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicMinMax", "prefab_hash": 929022276, @@ -40355,6 +41342,7 @@ } }, "StructureLogicMirror": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicMirror", "prefab_hash": 2096189278, @@ -40398,6 +41386,7 @@ } }, "StructureLogicReader": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicReader", "prefab_hash": -345383640, @@ -40450,6 +41439,7 @@ } }, "StructureLogicReagentReader": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicReagentReader", "prefab_hash": -124308857, @@ -40502,6 +41492,7 @@ } }, "StructureLogicRocketDownlink": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicRocketDownlink", "prefab_hash": 876108549, @@ -40543,6 +41534,7 @@ } }, "StructureLogicRocketUplink": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicRocketUplink", "prefab_hash": 546002924, @@ -40590,6 +41582,7 @@ } }, "StructureLogicSelect": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicSelect", "prefab_hash": 1822736084, @@ -40653,6 +41646,7 @@ } }, "StructureLogicSlotReader": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicSlotReader", "prefab_hash": -767867194, @@ -40705,6 +41699,7 @@ } }, "StructureLogicSorter": { + "templateType": "StructureLogicDeviceMemory", "prefab": { "prefab_name": "StructureLogicSorter", "prefab_hash": 873418029, @@ -41090,6 +42085,7 @@ } }, "StructureLogicSwitch": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicSwitch", "prefab_hash": 1220484876, @@ -41136,6 +42132,7 @@ } }, "StructureLogicSwitch2": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicSwitch2", "prefab_hash": 321604921, @@ -41182,6 +42179,7 @@ } }, "StructureLogicTransmitter": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicTransmitter", "prefab_hash": -693235651, @@ -41233,6 +42231,7 @@ } }, "StructureLogicWriter": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicWriter", "prefab_hash": -1326019434, @@ -41285,6 +42284,7 @@ } }, "StructureLogicWriterSwitch": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureLogicWriterSwitch", "prefab_hash": -1321250424, @@ -41338,6 +42338,7 @@ } }, "StructureManualHatch": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureManualHatch", "prefab_hash": -1808154199, @@ -41384,6 +42385,7 @@ } }, "StructureMediumConvectionRadiator": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureMediumConvectionRadiator", "prefab_hash": -1918215845, @@ -41434,6 +42436,7 @@ } }, "StructureMediumConvectionRadiatorLiquid": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureMediumConvectionRadiatorLiquid", "prefab_hash": -1169014183, @@ -41484,6 +42487,7 @@ } }, "StructureMediumHangerDoor": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureMediumHangerDoor", "prefab_hash": -566348148, @@ -41539,6 +42543,7 @@ } }, "StructureMediumRadiator": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureMediumRadiator", "prefab_hash": -975966237, @@ -41589,6 +42594,7 @@ } }, "StructureMediumRadiatorLiquid": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureMediumRadiatorLiquid", "prefab_hash": -1141760613, @@ -41639,6 +42645,7 @@ } }, "StructureMediumRocketGasFuelTank": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureMediumRocketGasFuelTank", "prefab_hash": -1093860567, @@ -41712,6 +42719,7 @@ } }, "StructureMediumRocketLiquidFuelTank": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureMediumRocketLiquidFuelTank", "prefab_hash": 1143639539, @@ -41785,6 +42793,7 @@ } }, "StructureMotionSensor": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureMotionSensor", "prefab_hash": -1713470563, @@ -41827,6 +42836,7 @@ } }, "StructureNitrolyzer": { + "templateType": "StructureCircuitHolder", "prefab": { "prefab_name": "StructureNitrolyzer", "prefab_hash": 1898243702, @@ -41993,6 +43003,7 @@ } }, "StructureOccupancySensor": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureOccupancySensor", "prefab_hash": 322782515, @@ -42034,6 +43045,7 @@ } }, "StructureOverheadShortCornerLocker": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureOverheadShortCornerLocker", "prefab_hash": -1794932560, @@ -42102,6 +43114,7 @@ } }, "StructureOverheadShortLocker": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureOverheadShortLocker", "prefab_hash": 1468249454, @@ -42290,6 +43303,7 @@ } }, "StructurePassiveLargeRadiatorGas": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePassiveLargeRadiatorGas", "prefab_hash": 2066977095, @@ -42340,6 +43354,7 @@ } }, "StructurePassiveLargeRadiatorLiquid": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePassiveLargeRadiatorLiquid", "prefab_hash": 24786172, @@ -42390,6 +43405,7 @@ } }, "StructurePassiveLiquidDrain": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePassiveLiquidDrain", "prefab_hash": 1812364811, @@ -42424,6 +43440,7 @@ } }, "StructurePassiveVent": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePassiveVent", "prefab_hash": 335498166, @@ -42439,6 +43456,7 @@ } }, "StructurePassiveVentInsulated": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePassiveVentInsulated", "prefab_hash": 1363077139, @@ -42454,6 +43472,7 @@ } }, "StructurePassthroughHeatExchangerGasToGas": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePassthroughHeatExchangerGasToGas", "prefab_hash": -1674187440, @@ -42508,6 +43527,7 @@ } }, "StructurePassthroughHeatExchangerGasToLiquid": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePassthroughHeatExchangerGasToLiquid", "prefab_hash": 1928991265, @@ -42562,6 +43582,7 @@ } }, "StructurePassthroughHeatExchangerLiquidToLiquid": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePassthroughHeatExchangerLiquidToLiquid", "prefab_hash": -1472829583, @@ -42616,6 +43637,7 @@ } }, "StructurePictureFrameThickLandscapeLarge": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePictureFrameThickLandscapeLarge", "prefab_hash": -1434523206, @@ -42627,6 +43649,7 @@ } }, "StructurePictureFrameThickLandscapeSmall": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePictureFrameThickLandscapeSmall", "prefab_hash": -2041566697, @@ -42638,6 +43661,7 @@ } }, "StructurePictureFrameThickMountLandscapeLarge": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePictureFrameThickMountLandscapeLarge", "prefab_hash": 950004659, @@ -42649,6 +43673,7 @@ } }, "StructurePictureFrameThickMountLandscapeSmall": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePictureFrameThickMountLandscapeSmall", "prefab_hash": 347154462, @@ -42660,6 +43685,7 @@ } }, "StructurePictureFrameThickMountPortraitLarge": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePictureFrameThickMountPortraitLarge", "prefab_hash": -1459641358, @@ -42671,6 +43697,7 @@ } }, "StructurePictureFrameThickMountPortraitSmall": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePictureFrameThickMountPortraitSmall", "prefab_hash": -2066653089, @@ -42682,6 +43709,7 @@ } }, "StructurePictureFrameThickPortraitLarge": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePictureFrameThickPortraitLarge", "prefab_hash": -1686949570, @@ -42693,6 +43721,7 @@ } }, "StructurePictureFrameThickPortraitSmall": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePictureFrameThickPortraitSmall", "prefab_hash": -1218579821, @@ -42704,6 +43733,7 @@ } }, "StructurePictureFrameThinLandscapeLarge": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePictureFrameThinLandscapeLarge", "prefab_hash": -1418288625, @@ -42715,6 +43745,7 @@ } }, "StructurePictureFrameThinLandscapeSmall": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePictureFrameThinLandscapeSmall", "prefab_hash": -2024250974, @@ -42726,6 +43757,7 @@ } }, "StructurePictureFrameThinMountLandscapeLarge": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePictureFrameThinMountLandscapeLarge", "prefab_hash": -1146760430, @@ -42737,6 +43769,7 @@ } }, "StructurePictureFrameThinMountLandscapeSmall": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePictureFrameThinMountLandscapeSmall", "prefab_hash": -1752493889, @@ -42748,6 +43781,7 @@ } }, "StructurePictureFrameThinMountPortraitLarge": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePictureFrameThinMountPortraitLarge", "prefab_hash": 1094895077, @@ -42759,6 +43793,7 @@ } }, "StructurePictureFrameThinMountPortraitSmall": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePictureFrameThinMountPortraitSmall", "prefab_hash": 1835796040, @@ -42770,6 +43805,7 @@ } }, "StructurePictureFrameThinPortraitLarge": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePictureFrameThinPortraitLarge", "prefab_hash": 1212777087, @@ -42781,6 +43817,7 @@ } }, "StructurePictureFrameThinPortraitSmall": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePictureFrameThinPortraitSmall", "prefab_hash": 1684488658, @@ -42792,6 +43829,7 @@ } }, "StructurePipeAnalysizer": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePipeAnalysizer", "prefab_hash": 435685051, @@ -42859,6 +43897,7 @@ } }, "StructurePipeCorner": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePipeCorner", "prefab_hash": -1785673561, @@ -42874,6 +43913,7 @@ } }, "StructurePipeCowl": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePipeCowl", "prefab_hash": 465816159, @@ -42889,6 +43929,7 @@ } }, "StructurePipeCrossJunction": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePipeCrossJunction", "prefab_hash": -1405295588, @@ -42904,6 +43945,7 @@ } }, "StructurePipeCrossJunction3": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePipeCrossJunction3", "prefab_hash": 2038427184, @@ -42919,6 +43961,7 @@ } }, "StructurePipeCrossJunction4": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePipeCrossJunction4", "prefab_hash": -417629293, @@ -42934,6 +43977,7 @@ } }, "StructurePipeCrossJunction5": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePipeCrossJunction5", "prefab_hash": -1877193979, @@ -42949,6 +43993,7 @@ } }, "StructurePipeCrossJunction6": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePipeCrossJunction6", "prefab_hash": 152378047, @@ -42964,6 +44009,7 @@ } }, "StructurePipeHeater": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePipeHeater", "prefab_hash": -419758574, @@ -43012,6 +44058,7 @@ } }, "StructurePipeIgniter": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePipeIgniter", "prefab_hash": 1286441942, @@ -43055,6 +44102,7 @@ } }, "StructurePipeInsulatedLiquidCrossJunction": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePipeInsulatedLiquidCrossJunction", "prefab_hash": -2068497073, @@ -43070,6 +44118,7 @@ } }, "StructurePipeLabel": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePipeLabel", "prefab_hash": -999721119, @@ -43104,6 +44153,7 @@ } }, "StructurePipeLiquidCorner": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePipeLiquidCorner", "prefab_hash": -1856720921, @@ -43119,6 +44169,7 @@ } }, "StructurePipeLiquidCrossJunction": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePipeLiquidCrossJunction", "prefab_hash": 1848735691, @@ -43134,6 +44185,7 @@ } }, "StructurePipeLiquidCrossJunction3": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePipeLiquidCrossJunction3", "prefab_hash": 1628087508, @@ -43149,6 +44201,7 @@ } }, "StructurePipeLiquidCrossJunction4": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePipeLiquidCrossJunction4", "prefab_hash": -9555593, @@ -43164,6 +44217,7 @@ } }, "StructurePipeLiquidCrossJunction5": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePipeLiquidCrossJunction5", "prefab_hash": -2006384159, @@ -43179,6 +44233,7 @@ } }, "StructurePipeLiquidCrossJunction6": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePipeLiquidCrossJunction6", "prefab_hash": 291524699, @@ -43194,6 +44249,7 @@ } }, "StructurePipeLiquidStraight": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePipeLiquidStraight", "prefab_hash": 667597982, @@ -43209,6 +44265,7 @@ } }, "StructurePipeLiquidTJunction": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePipeLiquidTJunction", "prefab_hash": 262616717, @@ -43224,6 +44281,7 @@ } }, "StructurePipeMeter": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePipeMeter", "prefab_hash": -1798362329, @@ -43258,6 +44316,7 @@ } }, "StructurePipeOneWayValve": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePipeOneWayValve", "prefab_hash": 1580412404, @@ -43304,6 +44363,7 @@ } }, "StructurePipeOrgan": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePipeOrgan", "prefab_hash": 1305252611, @@ -43319,6 +44379,7 @@ } }, "StructurePipeRadiator": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePipeRadiator", "prefab_hash": 1696603168, @@ -43357,6 +44418,7 @@ } }, "StructurePipeRadiatorFlat": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePipeRadiatorFlat", "prefab_hash": -399883995, @@ -43395,6 +44457,7 @@ } }, "StructurePipeRadiatorFlatLiquid": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePipeRadiatorFlatLiquid", "prefab_hash": 2024754523, @@ -43433,6 +44496,7 @@ } }, "StructurePipeStraight": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePipeStraight", "prefab_hash": 73728932, @@ -43448,6 +44512,7 @@ } }, "StructurePipeTJunction": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePipeTJunction", "prefab_hash": -913817472, @@ -43463,6 +44528,7 @@ } }, "StructurePlanter": { + "templateType": "StructureSlots", "prefab": { "prefab_name": "StructurePlanter", "prefab_hash": -1125641329, @@ -43488,6 +44554,7 @@ ] }, "StructurePlatformLadderOpen": { + "templateType": "Structure", "prefab": { "prefab_name": "StructurePlatformLadderOpen", "prefab_hash": 1559586682, @@ -43499,6 +44566,7 @@ } }, "StructurePlinth": { + "templateType": "StructureSlots", "prefab": { "prefab_name": "StructurePlinth", "prefab_hash": 989835703, @@ -43516,6 +44584,7 @@ ] }, "StructurePortablesConnector": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePortablesConnector", "prefab_hash": -899013427, @@ -43580,6 +44649,7 @@ } }, "StructurePowerConnector": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePowerConnector", "prefab_hash": -782951720, @@ -43637,6 +44707,7 @@ } }, "StructurePowerTransmitter": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePowerTransmitter", "prefab_hash": -65087121, @@ -43697,6 +44768,7 @@ } }, "StructurePowerTransmitterOmni": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePowerTransmitterOmni", "prefab_hash": -327468845, @@ -43744,6 +44816,7 @@ } }, "StructurePowerTransmitterReceiver": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePowerTransmitterReceiver", "prefab_hash": 1195820278, @@ -43804,6 +44877,7 @@ } }, "StructurePowerUmbilicalFemale": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePowerUmbilicalFemale", "prefab_hash": 101488029, @@ -43843,6 +44917,7 @@ } }, "StructurePowerUmbilicalFemaleSide": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePowerUmbilicalFemaleSide", "prefab_hash": 1922506192, @@ -43882,6 +44957,7 @@ } }, "StructurePowerUmbilicalMale": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePowerUmbilicalMale", "prefab_hash": 1529453938, @@ -43937,6 +45013,7 @@ } }, "StructurePoweredVent": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePoweredVent", "prefab_hash": 938836756, @@ -43995,6 +45072,7 @@ } }, "StructurePoweredVentLarge": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePoweredVentLarge", "prefab_hash": -785498334, @@ -44053,6 +45131,7 @@ } }, "StructurePressurantValve": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePressurantValve", "prefab_hash": 23052817, @@ -44108,6 +45187,7 @@ } }, "StructurePressureFedGasEngine": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePressureFedGasEngine", "prefab_hash": -624011170, @@ -44182,6 +45262,7 @@ } }, "StructurePressureFedLiquidEngine": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePressureFedLiquidEngine", "prefab_hash": 379750958, @@ -44259,6 +45340,7 @@ } }, "StructurePressurePlateLarge": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePressurePlateLarge", "prefab_hash": -2008706143, @@ -44303,6 +45385,7 @@ } }, "StructurePressurePlateMedium": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePressurePlateMedium", "prefab_hash": 1269458680, @@ -44347,6 +45430,7 @@ } }, "StructurePressurePlateSmall": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePressurePlateSmall", "prefab_hash": -1536471028, @@ -44391,6 +45475,7 @@ } }, "StructurePressureRegulator": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePressureRegulator", "prefab_hash": 209854039, @@ -44446,6 +45531,7 @@ } }, "StructureProximitySensor": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureProximitySensor", "prefab_hash": 568800213, @@ -44488,6 +45574,7 @@ } }, "StructurePumpedLiquidEngine": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePumpedLiquidEngine", "prefab_hash": -2031440019, @@ -44565,6 +45652,7 @@ } }, "StructurePurgeValve": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructurePurgeValve", "prefab_hash": -737232128, @@ -44620,6 +45708,7 @@ } }, "StructureRailing": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureRailing", "prefab_hash": -1756913871, @@ -44631,6 +45720,7 @@ } }, "StructureRecycler": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureRecycler", "prefab_hash": -1633947337, @@ -44723,6 +45813,7 @@ } }, "StructureRefrigeratedVendingMachine": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureRefrigeratedVendingMachine", "prefab_hash": -1577831321, @@ -45324,6 +46415,7 @@ } }, "StructureReinforcedCompositeWindow": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureReinforcedCompositeWindow", "prefab_hash": 2027713511, @@ -45335,6 +46427,7 @@ } }, "StructureReinforcedCompositeWindowSteel": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureReinforcedCompositeWindowSteel", "prefab_hash": -816454272, @@ -45346,6 +46439,7 @@ } }, "StructureReinforcedWallPaddedWindow": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureReinforcedWallPaddedWindow", "prefab_hash": 1939061729, @@ -45357,6 +46451,7 @@ } }, "StructureReinforcedWallPaddedWindowThin": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureReinforcedWallPaddedWindowThin", "prefab_hash": 158502707, @@ -45368,6 +46463,7 @@ } }, "StructureRocketAvionics": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureRocketAvionics", "prefab_hash": 808389066, @@ -45469,6 +46565,7 @@ } }, "StructureRocketCelestialTracker": { + "templateType": "StructureLogicDeviceMemory", "prefab": { "prefab_name": "StructureRocketCelestialTracker", "prefab_hash": 997453927, @@ -45576,6 +46673,7 @@ } }, "StructureRocketCircuitHousing": { + "templateType": "StructureCircuitHolder", "prefab": { "prefab_name": "StructureRocketCircuitHousing", "prefab_hash": 150135861, @@ -45640,6 +46738,7 @@ } }, "StructureRocketEngineTiny": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureRocketEngineTiny", "prefab_hash": 178472613, @@ -45716,6 +46815,7 @@ } }, "StructureRocketManufactory": { + "templateType": "StructureLogicDeviceConsumerMemory", "prefab": { "prefab_name": "StructureRocketManufactory", "prefab_hash": 1781051034, @@ -47006,6 +48106,7 @@ } }, "StructureRocketMiner": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureRocketMiner", "prefab_hash": -2087223687, @@ -47071,6 +48172,7 @@ } }, "StructureRocketScanner": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureRocketScanner", "prefab_hash": 2014252591, @@ -47122,6 +48224,7 @@ } }, "StructureRocketTower": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureRocketTower", "prefab_hash": -654619479, @@ -47133,6 +48236,7 @@ } }, "StructureRocketTransformerSmall": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureRocketTransformerSmall", "prefab_hash": 518925193, @@ -47188,6 +48292,7 @@ } }, "StructureRover": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureRover", "prefab_hash": 806513938, @@ -47199,6 +48304,7 @@ } }, "StructureSDBHopper": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSDBHopper", "prefab_hash": -1875856925, @@ -47252,6 +48358,7 @@ } }, "StructureSDBHopperAdvanced": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSDBHopperAdvanced", "prefab_hash": 467225612, @@ -47310,6 +48417,7 @@ } }, "StructureSDBSilo": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSDBSilo", "prefab_hash": 1155865682, @@ -47389,6 +48497,7 @@ } }, "StructureSatelliteDish": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSatelliteDish", "prefab_hash": 439026183, @@ -47451,6 +48560,7 @@ } }, "StructureSecurityPrinter": { + "templateType": "StructureLogicDeviceConsumerMemory", "prefab": { "prefab_name": "StructureSecurityPrinter", "prefab_hash": -641491515, @@ -48531,6 +49641,7 @@ } }, "StructureShelf": { + "templateType": "StructureSlots", "prefab": { "prefab_name": "StructureShelf", "prefab_hash": 1172114950, @@ -48564,6 +49675,7 @@ ] }, "StructureShelfMedium": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureShelfMedium", "prefab_hash": 182006674, @@ -48826,6 +49938,7 @@ } }, "StructureShortCornerLocker": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureShortCornerLocker", "prefab_hash": 1330754486, @@ -48894,6 +50007,7 @@ } }, "StructureShortLocker": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureShortLocker", "prefab_hash": -554553467, @@ -49082,6 +50196,7 @@ } }, "StructureShower": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureShower", "prefab_hash": -775128944, @@ -49130,6 +50245,7 @@ } }, "StructureShowerPowered": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureShowerPowered", "prefab_hash": -1081797501, @@ -49186,6 +50302,7 @@ } }, "StructureSign1x1": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSign1x1", "prefab_hash": 879058460, @@ -49220,6 +50337,7 @@ } }, "StructureSign2x1": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSign2x1", "prefab_hash": 908320837, @@ -49254,6 +50372,7 @@ } }, "StructureSingleBed": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSingleBed", "prefab_hash": -492611, @@ -49305,6 +50424,7 @@ } }, "StructureSleeper": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSleeper", "prefab_hash": -1467449329, @@ -49384,6 +50504,7 @@ } }, "StructureSleeperLeft": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSleeperLeft", "prefab_hash": 1213495833, @@ -49459,6 +50580,7 @@ } }, "StructureSleeperRight": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSleeperRight", "prefab_hash": -1812330717, @@ -49534,6 +50656,7 @@ } }, "StructureSleeperVertical": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSleeperVertical", "prefab_hash": -1300059018, @@ -49609,6 +50732,7 @@ } }, "StructureSleeperVerticalDroid": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSleeperVerticalDroid", "prefab_hash": 1382098999, @@ -49666,6 +50790,7 @@ } }, "StructureSmallDirectHeatExchangeGastoGas": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSmallDirectHeatExchangeGastoGas", "prefab_hash": 1310303582, @@ -49712,6 +50837,7 @@ } }, "StructureSmallDirectHeatExchangeLiquidtoGas": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSmallDirectHeatExchangeLiquidtoGas", "prefab_hash": 1825212016, @@ -49758,6 +50884,7 @@ } }, "StructureSmallDirectHeatExchangeLiquidtoLiquid": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSmallDirectHeatExchangeLiquidtoLiquid", "prefab_hash": -507770416, @@ -49804,6 +50931,7 @@ } }, "StructureSmallSatelliteDish": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSmallSatelliteDish", "prefab_hash": -2138748650, @@ -49866,6 +50994,7 @@ } }, "StructureSmallTableBacklessDouble": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureSmallTableBacklessDouble", "prefab_hash": -1633000411, @@ -49877,6 +51006,7 @@ } }, "StructureSmallTableBacklessSingle": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureSmallTableBacklessSingle", "prefab_hash": -1897221677, @@ -49888,6 +51018,7 @@ } }, "StructureSmallTableDinnerSingle": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureSmallTableDinnerSingle", "prefab_hash": 1260651529, @@ -49899,6 +51030,7 @@ } }, "StructureSmallTableRectangleDouble": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureSmallTableRectangleDouble", "prefab_hash": -660451023, @@ -49910,6 +51042,7 @@ } }, "StructureSmallTableRectangleSingle": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureSmallTableRectangleSingle", "prefab_hash": -924678969, @@ -49921,6 +51054,7 @@ } }, "StructureSmallTableThickDouble": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureSmallTableThickDouble", "prefab_hash": -19246131, @@ -49932,6 +51066,7 @@ } }, "StructureSmallTableThickSingle": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureSmallTableThickSingle", "prefab_hash": -291862981, @@ -49943,6 +51078,7 @@ } }, "StructureSolarPanel": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSolarPanel", "prefab_hash": -2045627372, @@ -49987,6 +51123,7 @@ } }, "StructureSolarPanel45": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSolarPanel45", "prefab_hash": -1554349863, @@ -50031,6 +51168,7 @@ } }, "StructureSolarPanel45Reinforced": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSolarPanel45Reinforced", "prefab_hash": 930865127, @@ -50075,6 +51213,7 @@ } }, "StructureSolarPanelDual": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSolarPanelDual", "prefab_hash": -539224550, @@ -50123,6 +51262,7 @@ } }, "StructureSolarPanelDualReinforced": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSolarPanelDualReinforced", "prefab_hash": -1545574413, @@ -50171,6 +51311,7 @@ } }, "StructureSolarPanelFlat": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSolarPanelFlat", "prefab_hash": 1968102968, @@ -50215,6 +51356,7 @@ } }, "StructureSolarPanelFlatReinforced": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSolarPanelFlatReinforced", "prefab_hash": 1697196770, @@ -50259,6 +51401,7 @@ } }, "StructureSolarPanelReinforced": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSolarPanelReinforced", "prefab_hash": -934345724, @@ -50303,6 +51446,7 @@ } }, "StructureSolidFuelGenerator": { + "templateType": "StructureLogicDeviceConsumer", "prefab": { "prefab_name": "StructureSolidFuelGenerator", "prefab_hash": 813146305, @@ -50384,6 +51528,7 @@ } }, "StructureSorter": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSorter", "prefab_hash": -1009150565, @@ -50512,6 +51657,7 @@ } }, "StructureStacker": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureStacker", "prefab_hash": -2020231820, @@ -50622,6 +51768,7 @@ } }, "StructureStackerReverse": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureStackerReverse", "prefab_hash": 1585641623, @@ -50732,6 +51879,7 @@ } }, "StructureStairs4x2": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureStairs4x2", "prefab_hash": 1405018945, @@ -50743,6 +51891,7 @@ } }, "StructureStairs4x2RailL": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureStairs4x2RailL", "prefab_hash": 155214029, @@ -50754,6 +51903,7 @@ } }, "StructureStairs4x2RailR": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureStairs4x2RailR", "prefab_hash": -212902482, @@ -50765,6 +51915,7 @@ } }, "StructureStairs4x2Rails": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureStairs4x2Rails", "prefab_hash": -1088008720, @@ -50776,6 +51927,7 @@ } }, "StructureStairwellBackLeft": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureStairwellBackLeft", "prefab_hash": 505924160, @@ -50787,6 +51939,7 @@ } }, "StructureStairwellBackPassthrough": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureStairwellBackPassthrough", "prefab_hash": -862048392, @@ -50798,6 +51951,7 @@ } }, "StructureStairwellBackRight": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureStairwellBackRight", "prefab_hash": -2128896573, @@ -50809,6 +51963,7 @@ } }, "StructureStairwellFrontLeft": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureStairwellFrontLeft", "prefab_hash": -37454456, @@ -50820,6 +51975,7 @@ } }, "StructureStairwellFrontPassthrough": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureStairwellFrontPassthrough", "prefab_hash": -1625452928, @@ -50831,6 +51987,7 @@ } }, "StructureStairwellFrontRight": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureStairwellFrontRight", "prefab_hash": 340210934, @@ -50842,6 +51999,7 @@ } }, "StructureStairwellNoDoors": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureStairwellNoDoors", "prefab_hash": 2049879875, @@ -50853,6 +52011,7 @@ } }, "StructureStirlingEngine": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureStirlingEngine", "prefab_hash": -260316435, @@ -50948,6 +52107,7 @@ } }, "StructureStorageLocker": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureStorageLocker", "prefab_hash": -793623899, @@ -51436,6 +52596,7 @@ } }, "StructureSuitStorage": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureSuitStorage", "prefab_hash": 255034731, @@ -51559,6 +52720,7 @@ } }, "StructureTankBig": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureTankBig", "prefab_hash": -1606848156, @@ -51633,6 +52795,7 @@ } }, "StructureTankBigInsulated": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureTankBigInsulated", "prefab_hash": 1280378227, @@ -51707,6 +52870,7 @@ } }, "StructureTankConnector": { + "templateType": "StructureSlots", "prefab": { "prefab_name": "StructureTankConnector", "prefab_hash": -1276379454, @@ -51728,6 +52892,7 @@ ] }, "StructureTankConnectorLiquid": { + "templateType": "StructureSlots", "prefab": { "prefab_name": "StructureTankConnectorLiquid", "prefab_hash": 1331802518, @@ -51749,6 +52914,7 @@ ] }, "StructureTankSmall": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureTankSmall", "prefab_hash": 1013514688, @@ -51823,6 +52989,7 @@ } }, "StructureTankSmallAir": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureTankSmallAir", "prefab_hash": 955744474, @@ -51897,6 +53064,7 @@ } }, "StructureTankSmallFuel": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureTankSmallFuel", "prefab_hash": 2102454415, @@ -51971,6 +53139,7 @@ } }, "StructureTankSmallInsulated": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureTankSmallInsulated", "prefab_hash": 272136332, @@ -52045,6 +53214,7 @@ } }, "StructureToolManufactory": { + "templateType": "StructureLogicDeviceConsumerMemory", "prefab": { "prefab_name": "StructureToolManufactory", "prefab_hash": -465741100, @@ -55059,6 +56229,7 @@ } }, "StructureTorpedoRack": { + "templateType": "StructureSlots", "prefab": { "prefab_name": "StructureTorpedoRack", "prefab_hash": 1473807953, @@ -55104,6 +56275,7 @@ ] }, "StructureTraderWaypoint": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureTraderWaypoint", "prefab_hash": 1570931620, @@ -55147,6 +56319,7 @@ } }, "StructureTransformer": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureTransformer", "prefab_hash": -1423212473, @@ -55202,6 +56375,7 @@ } }, "StructureTransformerMedium": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureTransformerMedium", "prefab_hash": -1065725831, @@ -55253,6 +56427,7 @@ } }, "StructureTransformerMediumReversed": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureTransformerMediumReversed", "prefab_hash": 833912764, @@ -55304,6 +56479,7 @@ } }, "StructureTransformerSmall": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureTransformerSmall", "prefab_hash": -890946730, @@ -55355,6 +56531,7 @@ } }, "StructureTransformerSmallReversed": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureTransformerSmallReversed", "prefab_hash": 1054059374, @@ -55406,6 +56583,7 @@ } }, "StructureTurbineGenerator": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureTurbineGenerator", "prefab_hash": 1282191063, @@ -55450,6 +56628,7 @@ } }, "StructureTurboVolumePump": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureTurboVolumePump", "prefab_hash": 1310794736, @@ -55514,6 +56693,7 @@ } }, "StructureUnloader": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureUnloader", "prefab_hash": 750118160, @@ -55607,6 +56787,7 @@ } }, "StructureUprightWindTurbine": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureUprightWindTurbine", "prefab_hash": 1622183451, @@ -55647,6 +56828,7 @@ } }, "StructureValve": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureValve", "prefab_hash": -692036078, @@ -55694,6 +56876,7 @@ } }, "StructureVendingMachine": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureVendingMachine", "prefab_hash": -443130773, @@ -56269,6 +57452,7 @@ } }, "StructureVolumePump": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureVolumePump", "prefab_hash": -321403609, @@ -56324,6 +57508,7 @@ } }, "StructureWallArch": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallArch", "prefab_hash": -858143148, @@ -56335,6 +57520,7 @@ } }, "StructureWallArchArrow": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallArchArrow", "prefab_hash": 1649708822, @@ -56346,6 +57532,7 @@ } }, "StructureWallArchCornerRound": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallArchCornerRound", "prefab_hash": 1794588890, @@ -56357,6 +57544,7 @@ } }, "StructureWallArchCornerSquare": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallArchCornerSquare", "prefab_hash": -1963016580, @@ -56368,6 +57556,7 @@ } }, "StructureWallArchCornerTriangle": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallArchCornerTriangle", "prefab_hash": 1281911841, @@ -56379,6 +57568,7 @@ } }, "StructureWallArchPlating": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallArchPlating", "prefab_hash": 1182510648, @@ -56390,6 +57580,7 @@ } }, "StructureWallArchTwoTone": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallArchTwoTone", "prefab_hash": 782529714, @@ -56401,6 +57592,7 @@ } }, "StructureWallCooler": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureWallCooler", "prefab_hash": -739292323, @@ -56469,6 +57661,7 @@ } }, "StructureWallFlat": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallFlat", "prefab_hash": 1635864154, @@ -56480,6 +57673,7 @@ } }, "StructureWallFlatCornerRound": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallFlatCornerRound", "prefab_hash": 898708250, @@ -56491,6 +57685,7 @@ } }, "StructureWallFlatCornerSquare": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallFlatCornerSquare", "prefab_hash": 298130111, @@ -56502,6 +57697,7 @@ } }, "StructureWallFlatCornerTriangle": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallFlatCornerTriangle", "prefab_hash": 2097419366, @@ -56513,6 +57709,7 @@ } }, "StructureWallFlatCornerTriangleFlat": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallFlatCornerTriangleFlat", "prefab_hash": -1161662836, @@ -56524,6 +57721,7 @@ } }, "StructureWallGeometryCorner": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallGeometryCorner", "prefab_hash": 1979212240, @@ -56535,6 +57733,7 @@ } }, "StructureWallGeometryStreight": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallGeometryStreight", "prefab_hash": 1049735537, @@ -56546,6 +57745,7 @@ } }, "StructureWallGeometryT": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallGeometryT", "prefab_hash": 1602758612, @@ -56557,6 +57757,7 @@ } }, "StructureWallGeometryTMirrored": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallGeometryTMirrored", "prefab_hash": -1427845483, @@ -56568,6 +57769,7 @@ } }, "StructureWallHeater": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureWallHeater", "prefab_hash": 24258244, @@ -56629,6 +57831,7 @@ } }, "StructureWallIron": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallIron", "prefab_hash": 1287324802, @@ -56640,6 +57843,7 @@ } }, "StructureWallIron02": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallIron02", "prefab_hash": 1485834215, @@ -56651,6 +57855,7 @@ } }, "StructureWallIron03": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallIron03", "prefab_hash": 798439281, @@ -56662,6 +57867,7 @@ } }, "StructureWallIron04": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallIron04", "prefab_hash": -1309433134, @@ -56673,6 +57879,7 @@ } }, "StructureWallLargePanel": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallLargePanel", "prefab_hash": 1492930217, @@ -56684,6 +57891,7 @@ } }, "StructureWallLargePanelArrow": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallLargePanelArrow", "prefab_hash": -776581573, @@ -56695,6 +57903,7 @@ } }, "StructureWallLight": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureWallLight", "prefab_hash": -1860064656, @@ -56738,6 +57947,7 @@ } }, "StructureWallLightBattery": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureWallLightBattery", "prefab_hash": -1306415132, @@ -56800,6 +58010,7 @@ } }, "StructureWallPaddedArch": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallPaddedArch", "prefab_hash": 1590330637, @@ -56811,6 +58022,7 @@ } }, "StructureWallPaddedArchCorner": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallPaddedArchCorner", "prefab_hash": -1126688298, @@ -56822,6 +58034,7 @@ } }, "StructureWallPaddedArchLightFittingTop": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallPaddedArchLightFittingTop", "prefab_hash": 1171987947, @@ -56833,6 +58046,7 @@ } }, "StructureWallPaddedArchLightsFittings": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallPaddedArchLightsFittings", "prefab_hash": -1546743960, @@ -56844,6 +58058,7 @@ } }, "StructureWallPaddedCorner": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallPaddedCorner", "prefab_hash": -155945899, @@ -56855,6 +58070,7 @@ } }, "StructureWallPaddedCornerThin": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallPaddedCornerThin", "prefab_hash": 1183203913, @@ -56866,6 +58082,7 @@ } }, "StructureWallPaddedNoBorder": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallPaddedNoBorder", "prefab_hash": 8846501, @@ -56877,6 +58094,7 @@ } }, "StructureWallPaddedNoBorderCorner": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallPaddedNoBorderCorner", "prefab_hash": 179694804, @@ -56888,6 +58106,7 @@ } }, "StructureWallPaddedThinNoBorder": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallPaddedThinNoBorder", "prefab_hash": -1611559100, @@ -56899,6 +58118,7 @@ } }, "StructureWallPaddedThinNoBorderCorner": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallPaddedThinNoBorderCorner", "prefab_hash": 1769527556, @@ -56910,6 +58130,7 @@ } }, "StructureWallPaddedWindow": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallPaddedWindow", "prefab_hash": 2087628940, @@ -56921,6 +58142,7 @@ } }, "StructureWallPaddedWindowThin": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallPaddedWindowThin", "prefab_hash": -37302931, @@ -56932,6 +58154,7 @@ } }, "StructureWallPadding": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallPadding", "prefab_hash": 635995024, @@ -56943,6 +58166,7 @@ } }, "StructureWallPaddingArchVent": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallPaddingArchVent", "prefab_hash": -1243329828, @@ -56954,6 +58178,7 @@ } }, "StructureWallPaddingLightFitting": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallPaddingLightFitting", "prefab_hash": 2024882687, @@ -56965,6 +58190,7 @@ } }, "StructureWallPaddingThin": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallPaddingThin", "prefab_hash": -1102403554, @@ -56976,6 +58202,7 @@ } }, "StructureWallPlating": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallPlating", "prefab_hash": 26167457, @@ -56987,6 +58214,7 @@ } }, "StructureWallSmallPanelsAndHatch": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallSmallPanelsAndHatch", "prefab_hash": 619828719, @@ -56998,6 +58226,7 @@ } }, "StructureWallSmallPanelsArrow": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallSmallPanelsArrow", "prefab_hash": -639306697, @@ -57009,6 +58238,7 @@ } }, "StructureWallSmallPanelsMonoChrome": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallSmallPanelsMonoChrome", "prefab_hash": 386820253, @@ -57020,6 +58250,7 @@ } }, "StructureWallSmallPanelsOpen": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallSmallPanelsOpen", "prefab_hash": -1407480603, @@ -57031,6 +58262,7 @@ } }, "StructureWallSmallPanelsTwoTone": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallSmallPanelsTwoTone", "prefab_hash": 1709994581, @@ -57042,6 +58274,7 @@ } }, "StructureWallVent": { + "templateType": "Structure", "prefab": { "prefab_name": "StructureWallVent", "prefab_hash": -1177469307, @@ -57053,6 +58286,7 @@ } }, "StructureWaterBottleFiller": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureWaterBottleFiller", "prefab_hash": -1178961954, @@ -57134,6 +58368,7 @@ } }, "StructureWaterBottleFillerBottom": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureWaterBottleFillerBottom", "prefab_hash": 1433754995, @@ -57215,6 +58450,7 @@ } }, "StructureWaterBottleFillerPowered": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureWaterBottleFillerPowered", "prefab_hash": -756587791, @@ -57303,6 +58539,7 @@ } }, "StructureWaterBottleFillerPoweredBottom": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureWaterBottleFillerPoweredBottom", "prefab_hash": 1986658780, @@ -57391,6 +58628,7 @@ } }, "StructureWaterDigitalValve": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureWaterDigitalValve", "prefab_hash": -517628750, @@ -57446,6 +58684,7 @@ } }, "StructureWaterPipeMeter": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureWaterPipeMeter", "prefab_hash": 433184168, @@ -57480,6 +58719,7 @@ } }, "StructureWaterPurifier": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureWaterPurifier", "prefab_hash": 887383294, @@ -57549,6 +58789,7 @@ } }, "StructureWaterWallCooler": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureWaterWallCooler", "prefab_hash": -1369060582, @@ -57617,6 +58858,7 @@ } }, "StructureWeatherStation": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureWeatherStation", "prefab_hash": 1997212478, @@ -57673,6 +58915,7 @@ } }, "StructureWindTurbine": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureWindTurbine", "prefab_hash": -2082355173, @@ -57717,6 +58960,7 @@ } }, "StructureWindowShutter": { + "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureWindowShutter", "prefab_hash": 2056377335, @@ -57772,6 +59016,7 @@ } }, "ToolPrinterMod": { + "templateType": "Item", "prefab": { "prefab_name": "ToolPrinterMod", "prefab_hash": 1700018136, @@ -57787,6 +59032,7 @@ } }, "ToyLuna": { + "templateType": "Item", "prefab": { "prefab_name": "ToyLuna", "prefab_hash": 94730034, @@ -57802,6 +59048,7 @@ } }, "UniformCommander": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "UniformCommander", "prefab_hash": -2083426457, @@ -57839,6 +59086,7 @@ ] }, "UniformMarine": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "UniformMarine", "prefab_hash": -48342840, @@ -57872,6 +59120,7 @@ ] }, "UniformOrangeJumpSuit": { + "templateType": "ItemSlots", "prefab": { "prefab_name": "UniformOrangeJumpSuit", "prefab_hash": 810053150, @@ -57905,6 +59154,7 @@ ] }, "WeaponEnergy": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "WeaponEnergy", "prefab_hash": 789494694, @@ -57948,6 +59198,7 @@ ] }, "WeaponPistolEnergy": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "WeaponPistolEnergy", "prefab_hash": -385323479, @@ -58000,6 +59251,7 @@ ] }, "WeaponRifleEnergy": { + "templateType": "ItemLogic", "prefab": { "prefab_name": "WeaponRifleEnergy", "prefab_hash": 1154745374, @@ -58052,6 +59304,7 @@ ] }, "WeaponTorpedo": { + "templateType": "Item", "prefab": { "prefab_name": "WeaponTorpedo", "prefab_hash": -1102977898, diff --git a/www/src/ts/app/save.ts b/www/src/ts/app/save.ts index 51c5754..a4fe9ca 100644 --- a/www/src/ts/app/save.ts +++ b/www/src/ts/app/save.ts @@ -1,7 +1,7 @@ import { HTMLTemplateResult, html, css, CSSResultGroup } from "lit"; import { customElement, property, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMState } from "session"; +import { SessionDB } from "session"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.js"; import { repeat } from "lit/directives/repeat.js"; @@ -34,21 +34,21 @@ export class SaveDialog extends BaseElement { `, ]; - private _saves: { name: string; date: Date; session: VMState }[]; + private _saves: { name: string; date: Date; session: SessionDB.CurrentDBVmState }[]; get saves() { return this._saves; } @state() - set saves(val: { name: string; date: Date; session: VMState }[]) { + set saves(val: { name: string; date: Date; session: SessionDB.CurrentDBVmState }[]) { this._saves = val; this.performSearch(); } @state() mode: SaveDialogMode; - private searchResults: { name: string; date: Date; session: VMState }[]; + private searchResults: { name: string; date: Date; session: SessionDB.CurrentDBVmState }[]; constructor() { super(); diff --git a/www/src/ts/presets/demo.ts b/www/src/ts/presets/demo.ts index dd817e4..03aed6f 100644 --- a/www/src/ts/presets/demo.ts +++ b/www/src/ts/presets/demo.ts @@ -1,4 +1,5 @@ -import { VMState } from "../session"; +import { ObjectInfo } from "ic10emu_wasm"; +import { SessionDB } from "../session"; export const demoCode = `# Highlighting Demo @@ -63,92 +64,83 @@ j ra `; -export const demoVMState: VMState = { +export const demoVMState: SessionDB.CurrentDBVmState = { vm: { - ics: [ + objects: [ { - device: 1, - id: 2, - registers: Array(18).fill(0), - ip: 0, - ic: 0, - stack: Array(512).fill(0), - aliases: new Map(), - defines: new Map(), - pins: Array(6).fill(undefined), - state: "Start", - code: demoCode, - }, - ], - devices: [ - { - id: 1, - prefab_name: "StructureCircuitHousing", - slots: [ - { - typ: "ProgrammableChip", - occupant: { - id: 2, - fields: { - "PrefabHash": { - field_type: "Read", - value: -744098481, - }, - "Quantity":{ - field_type: "Read", - value: 1 - }, - "MaxQuantity": { - field_type: "Read", - value: 1, - }, - "SortingClass": { - field_type: "Read", - value: 0, - }, - }, - }, - }, - ], - connections: [ - { - CableNetwork: { - net: 1, - typ: "Data", - }, - }, - { - CableNetwork: { - net: undefined, - typ: "Power", - }, - }, - ], - fields: { - "PrefabHash": { - field_type: "Read", - value: -128473777, - }, - "Setting": { - field_type: "ReadWrite", - value: 0, - }, - "RequiredPower": { - field_type: "Read", - value: 0, - } + obj_info: { + id: 1, + prefab: "StructureCircuitHousing", + socketed_ic: 2, + slots: new Map([[0, { id: 2, quantity: 1 }]]), + connections: new Map([[0, 1]]), + + // unused, provided to make compiler happy + name: undefined, + prefab_hash: undefined, + compile_errors: undefined, + damage: undefined, + device_pins: undefined, + reagents: undefined, + logic_values: undefined, + slot_logic_values: undefined, + entity: undefined, + visible_devices: undefined, + memory: undefined, + source_code: undefined, + circuit: undefined }, + template: undefined, + database_template: true, }, + { + obj_info: { + id: 2, + prefab: "ItemIntegratedCircuit10", + source_code: demoCode, + memory: new Array(512).fill(0), + circuit: { + instruction_pointer: 0, + yield_instruction_count: 0, + state: "Start", + aliases: new Map(), + defines: new Map(), + labels: new Map(), + registers: new Array(18).fill(0) + }, + + // unused, provided to make compiler happy + name: undefined, + prefab_hash: undefined, + compile_errors: undefined, + slots: undefined, + damage: undefined, + device_pins: undefined, + connections: undefined, + reagents: undefined, + logic_values: undefined, + slot_logic_values: undefined, + entity: undefined, + socketed_ic: undefined, + visible_devices: undefined, + }, + template: undefined, + database_template: true + } ], networks: [ { id: 1, devices: [1], power_only: [], - channels: Array(8).fill(NaN), - }, + channels: Array(8).fill(NaN) as [number, number, number, number, number, number, number, number], + } ], - default_network: 1, + program_holders: [2], + circuit_holders: [1], + default_network_key: 1, + wireless_receivers: [], + wireless_transmitters: [], }, activeIC: 1, -}; +} diff --git a/www/src/ts/session.ts b/www/src/ts/session.ts index b98a87f..d02f15c 100644 --- a/www/src/ts/session.ts +++ b/www/src/ts/session.ts @@ -1,15 +1,22 @@ -import type { ICError, FrozenVM, Class } from "ic10emu_wasm"; +import type { ICError, FrozenVM, RegisterSpec, DeviceSpec, LogicType, LogicSlotType, LogicField, Class as SlotType, FrozenCableNetwork, FrozenObject, ObjectInfo, ICState, ObjectID } from "ic10emu_wasm"; import { App } from "./app"; -import { openDB, DBSchema } from "idb"; -import { fromJson, toJson } from "./utils"; +import { openDB, DBSchema, IDBPTransaction, IDBPDatabase } from "idb"; +import { TypedEventTarget, crc32, dispatchTypedEvent, fromJson, toJson } from "./utils"; import * as presets from "./presets"; const { demoVMState } = presets; -const LOCAL_DB_VERSION = 1; +export interface SessionEventMap { + "sessions-local-update": CustomEvent, + "session-active-ic": CustomEvent, + "session-id-change": CustomEvent<{ old: ObjectID, new: ObjectID }>, + "session-errors": CustomEvent, + "session-load": CustomEvent, + "active-line": CustomEvent, +} -export class Session extends EventTarget { +export class Session extends TypedEventTarget() { private _programs: Map; private _errors: Map; private _activeIC: number; @@ -51,9 +58,7 @@ export class Session extends EventTarget { set activeIC(val: number) { this._activeIC = val; - this.dispatchEvent( - new CustomEvent("session-active-ic", { detail: this.activeIC }), - ); + this.dispatchCustomEvent("session-active-ic", this.activeIC); } changeID(oldID: number, newID: number) { @@ -61,11 +66,7 @@ export class Session extends EventTarget { this.programs.set(newID, this.programs.get(oldID)); this.programs.delete(oldID); } - this.dispatchEvent( - new CustomEvent("session-id-change", { - detail: { old: oldID, new: newID }, - }), - ); + this.dispatchCustomEvent("session-id-change", { old: oldID, new: newID }) } onIDChange( @@ -108,11 +109,7 @@ export class Session extends EventTarget { } _fireOnErrors(ids: number[]) { - this.dispatchEvent( - new CustomEvent("session-errors", { - detail: ids, - }), - ); + this.dispatchCustomEvent("session-errors", ids); } onErrors(callback: (e: CustomEvent) => any) { @@ -124,11 +121,7 @@ export class Session extends EventTarget { } _fireOnLoad() { - this.dispatchEvent( - new CustomEvent("session-load", { - detail: this, - }), - ); + this.dispatchCustomEvent("session-load", this); } onActiveLine(callback: (e: CustomEvent) => any) { @@ -136,11 +129,7 @@ export class Session extends EventTarget { } _fireOnActiveLine(id: number) { - this.dispatchEvent( - new CustomEvent("active-line", { - detail: id, - }), - ); + this.dispatchCustomEvent("active-line", id); } save() { @@ -164,7 +153,7 @@ export class Session extends EventTarget { } } - async load(data: VMState | OldPrograms | string) { + async load(data: SessionDB.CurrentDBVmState | OldPrograms | string) { if (typeof data === "string") { this._activeIC = 1; this.app.vm.restoreVMState(demoVMState.vm); @@ -207,7 +196,7 @@ export class Session extends EventTarget { this.load(data as OldPrograms); return; } else if ("vm" in data && "activeIC" in data) { - this.load(data as VMState); + this.load(data as SessionDB.CurrentDBVmState); } else { console.log("Bad session data:", data); } @@ -216,40 +205,56 @@ export class Session extends EventTarget { } async openIndexDB() { - return await openDB("ic10-vm-sessions", LOCAL_DB_VERSION, { - upgrade(db, oldVersion, newVersion, transaction, event) { - // only db verison currently known is v1 - if (oldVersion < 1) { + return await openDB("ic10-vm-sessions", SessionDB.LOCAL_DB_VERSION, { + async upgrade(db, oldVersion, newVersion, transaction, event) { + if (oldVersion < SessionDB.DBVersion.V1) { const sessionStore = db.createObjectStore("sessions"); sessionStore.createIndex("by-date", "date"); sessionStore.createIndex("by-name", "name"); } + if (oldVersion < SessionDB.DBVersion.V2) { + const v1Transaction = transaction as unknown as IDBPTransaction; + const v1SessionStore = v1Transaction.objectStore("sessions"); + const v1Sessions = await v1SessionStore.getAll(); + const v2SessionStore = db.createObjectStore("sessionsV2"); + v2SessionStore.createIndex("by-date", "date"); + v2SessionStore.createIndex("by-name", "name"); + for (const v1Session of v1Sessions) { + await v2SessionStore.add({ + name: v1Session.name, + date: v1Session.date, + version: SessionDB.DBVersion.V2, + session: SessionDB.V2.fromV1State(v1Session.session) + }) + } + } }, }); } async saveLocal(name: string) { - const state: VMState = { + const state: SessionDB.CurrentDBVmState = { vm: await (await window.VM.get()).ic10vm.saveVMState(), activeIC: this.activeIC, }; const db = await this.openIndexDB(); - const transaction = db.transaction(["sessions"], "readwrite"); - const sessionStore = transaction.objectStore("sessions"); + const transaction = db.transaction([SessionDB.LOCAL_DB_SESSION_STORE], "readwrite"); + const sessionStore = transaction.objectStore(SessionDB.LOCAL_DB_SESSION_STORE); await sessionStore.put( { name, date: new Date(), + version: SessionDB.LOCAL_DB_VERSION, session: state, }, name, ); - this.dispatchEvent(new CustomEvent("sessions-local-update")); + this.dispatchCustomEvent("sessions-local-update"); } async loadFromLocal(name: string) { const db = await this.openIndexDB(); - const save = await db.get("sessions", name); + const save = await db.get(SessionDB.LOCAL_DB_SESSION_STORE, name); if (typeof save !== "undefined") { const { session } = save; this.load(session); @@ -258,37 +263,323 @@ export class Session extends EventTarget { async deleteLocalSave(name: string) { const db = await this.openIndexDB(); - const transaction = db.transaction(["sessions"], "readwrite"); - const sessionStore = transaction.objectStore("sessions"); + const transaction = db.transaction([SessionDB.LOCAL_DB_SESSION_STORE], "readwrite"); + const sessionStore = transaction.objectStore(SessionDB.LOCAL_DB_SESSION_STORE); await sessionStore.delete(name); - this.dispatchEvent(new CustomEvent("sessions-local-update")); + this.dispatchCustomEvent("sessions-local-update"); } async getLocalSaved() { const db = await this.openIndexDB(); - const sessions = await db.getAll("sessions"); + const sessions = await db.getAll(SessionDB.LOCAL_DB_SESSION_STORE); return sessions; } } -export interface VMState { - activeIC: number; - vm: FrozenVM; +export namespace SessionDB { + + export namespace V1 { + + export interface VMState { + activeIC: number; + vm: FrozenVM; + } + + export interface FrozenVM { + ics: FrozenIC[]; + devices: DeviceTemplate[]; + networks: FrozenNetwork[]; + default_network: number; + } + + export interface FrozenNetwork { + id: number; + devices: number[]; + power_only: number[]; + channels: number[]; + } + 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 Alias = RegisterSpec | DeviceSpec; + + export type Aliases = Map; + + export type Defines = Map; + + export type Pins = (number | undefined)[]; + export interface SlotOccupantTemplate { + id?: number; + fields: { [key in LogicSlotType]?: LogicField }; + } + export interface ConnectionCableNetwork { + CableNetwork: { + net: number | undefined; + typ: string; + }; + } + export type Connection = ConnectionCableNetwork | "Other"; + + 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 namespace V2 { + + export interface VMState { + activeIC: number; + vm: FrozenVM; + } + + function objectFromIC(ic: SessionDB.V1.FrozenIC): FrozenObject { + return { + obj_info: { + name: undefined, + id: ic.id, + prefab: "ItemIntegratedCircuit10", + prefab_hash: crc32("ItemIntegratedCircuit10"), + memory: ic.stack, + source_code: ic.code, + compile_errors: undefined, + circuit: { + instruction_pointer: ic.ip, + yield_instruction_count: ic.ic, + state: ic.state as ICState, + aliases: ic.aliases, + defines: ic.defines, + labels: new Map(), + registers: ic.registers, + }, + + // unused + slots: undefined, + damage: undefined, + device_pins: undefined, + connections: undefined, + reagents: undefined, + logic_values: undefined, + slot_logic_values: undefined, + entity: undefined, + socketed_ic: undefined, + visible_devices: undefined, + }, + database_template: true, + template: undefined, + } + } + function objectsFromV1Template(template: SessionDB.V1.DeviceTemplate, idFn: () => number, socketedIcFn: (id: number) => number | undefined): FrozenObject[] { + const slotOccupantsPairs = new Map(template.slots.flatMap((slot, index) => { + if (typeof slot.occupant !== "undefined") { + return [ + [ + index, + [ + { + obj_info: { + name: undefined, + id: slot.occupant.id ?? idFn(), + prefab: undefined, + prefab_hash: slot.occupant.fields.PrefabHash?.value, + damage: slot.occupant.fields.Damage?.value, + + socketed_ic: undefined, + // unused + memory: undefined, + source_code: undefined, + compile_errors: undefined, + circuit: undefined, + slots: undefined, + device_pins: undefined, + connections: undefined, + reagents: undefined, + logic_values: undefined, + slot_logic_values: undefined, + entity: undefined, + visible_devices: undefined, + }, + database_template: true, + template: undefined + }, + slot.occupant.fields.Quantity ?? 1 + ] + ] + ] as [number, [FrozenObject, number]][]; + } else { + return [] as [number, [FrozenObject, number]][]; + } + })); + return [ + ...Array.from(slotOccupantsPairs.entries()).map(([_index, [obj, _quantity]]) => obj), + { + obj_info: { + name: template.name, + id: template.id, + prefab: template.prefab_name, + prefab_hash: undefined, + slots: new Map( + Array.from(slotOccupantsPairs.entries()) + .map(([index, [obj, quantity]]) => [index, { + quantity, + id: obj.obj_info.id, + }]) + ), + socketed_ic: socketedIcFn(template.id), + + logic_values: new Map(Object.entries(template.fields).map(([key, val]) => { + return [key as LogicType, val.value] + })), + + // unused + memory: undefined, + source_code: undefined, + compile_errors: undefined, + circuit: undefined, + damage: undefined, + device_pins: undefined, + connections: undefined, + reagents: undefined, + slot_logic_values: undefined, + entity: undefined, + visible_devices: undefined, + + }, + database_template: true, + template: undefined, + } + ]; + } + + export function fromV1State(v1State: SessionDB.V1.VMState): VMState { + const highestObjetId = Math.max(... + v1State.vm + .devices + .map(device => device.id ?? -1) + .concat( + v1State.vm + .ics + .map(ic => ic.id ?? -1) + ) + ); + let nextId = highestObjetId + 1; + const deviceIcs = new Map(v1State.vm.ics.map(ic => [ic.device, objectFromIC(ic)])); + const objects = v1State.vm.devices.flatMap(device => { + return objectsFromV1Template(device, () => nextId++, (id) => deviceIcs.get(id)?.obj_info.id ?? undefined) + }) + const vm: FrozenVM = { + objects, + circuit_holders: objects.flatMap(obj => "socketed_ic" in obj.obj_info && typeof obj.obj_info.socketed_ic !== "undefined" ? [obj.obj_info.id] : []), + program_holders: objects.flatMap(obj => "source_code" in obj.obj_info && typeof obj.obj_info.source_code !== "undefined" ? [obj.obj_info.id] : []), + default_network_key: v1State.vm.default_network, + networks: v1State.vm.networks as FrozenCableNetwork[], + wireless_receivers: [], + wireless_transmitters: [], + }; + const v2State: VMState = { + activeIC: v1State.activeIC, + vm, + }; + return v2State; + } + + } + + export enum DBVersion { + V1 = 1, + V2 = 2, + } + + export const LOCAL_DB_VERSION = DBVersion.V2 as const; + export type CurrentDBSchema = AppDBSchemaV2; + export type CurrentDBVmState = V2.VMState; + export const LOCAL_DB_SESSION_STORE = "sessionsV2" as const + + export interface AppDBSchemaV1 extends DBSchema { + sessions: { + key: string; + value: { + name: string; + date: Date; + session: V1.VMState; + }; + indexes: { + "by-date": Date; + "by-name": string; + }; + }; + } + + export interface AppDBSchemaV2 extends DBSchema { + sessions: { + key: string; + value: { + name: string; + date: Date; + session: V1.VMState; + }; + indexes: { + "by-date": Date; + "by-name": string; + }; + }; + sessionsV2: { + key: string; + value: { + name: string; + date: Date; + version: DBVersion.V2; + session: V2.VMState; + }; + indexes: { + "by-date": Date; + "by-name": string; + }; + }; + } } -interface AppDBSchemaV1 extends DBSchema { - sessions: { - key: string; - value: { - name: string; - date: Date; - session: VMState; - }; - indexes: { - "by-date": Date; - "by-name": string; - }; - }; -} + export interface OldPrograms { programs: [number, string][]; diff --git a/www/src/ts/utils.ts b/www/src/ts/utils.ts index 50a176f..514a851 100644 --- a/www/src/ts/utils.ts +++ b/www/src/ts/utils.ts @@ -100,18 +100,18 @@ export function compareMaps(map1: Map, map2: Map): boolean { } for (let [key, val] of map1) { testVal = map2.get(key); - if((testVal === undefined && !map2.has(key)) || !structuralEqual(val, testVal)) { + if ((testVal === undefined && !map2.has(key)) || !structuralEqual(val, testVal)) { return false; } } return true; } -export function compareArrays( array1: any[], array2: any[]): boolean { +export function compareArrays(array1: any[], array2: any[]): boolean { if (array1.length !== array2.length) { return false; } - for ( let i = 0, len = array1.length; i < len; i++) { + for (let i = 0, len = array1.length; i < len; i++) { if (!structuralEqual(array1[i], array2[i])) { return false; } @@ -127,7 +127,7 @@ export function compareStructuralObjects(a: object, b: object): boolean { export function structuralEqual(a: any, b: any): boolean { const aType = typeof a; const bType = typeof b; - if ( aType !== typeof bType) { + if (aType !== typeof bType) { return false; } if (a instanceof Map && b instanceof Map) { @@ -315,9 +315,29 @@ export function clamp(val: number, min: number, max: number) { return Math.min(Math.max(val, min), max); } -export type TypedEventTarget = { - new (): TypedEventTargetInterface; -}; +// export type TypedEventTarget = { +// new(): TypedEventTargetInterface; +// }; + +type Constructor = new (...args: any[]) => T +export const TypedEventTarget = ( +) => { + class TypedEventTargetClass extends EventTarget { + dispatchCustomEvent( + type: K, + data?: EventMap[K] extends CustomEvent ? DetailData : never, + eventInitDict?: EventInit, + ): boolean { + return this.dispatchEvent(new CustomEvent(type as string, { + detail: data, + bubbles: eventInitDict?.bubbles, + cancelable: eventInitDict?.cancelable, + composed: eventInitDict?.composed + })) + } + } + return TypedEventTargetClass as Constructor>; +} interface TypedEventTargetInterface extends EventTarget { addEventListener( @@ -336,15 +356,35 @@ interface TypedEventTargetInterface extends EventTarget { options?: boolean | AddEventListenerOptions, ): void; + /** + * @deprecated This method is untyped because the event name is not present in the event map + */ addEventListener( type: string, callback: EventListenerOrEventListenerObject | null, options?: EventListenerOptions | boolean, ): void; + /** + * @deprecated This method is untyped because the event name is not present in the event map + */ removeEventListener( type: string, callback: EventListenerOrEventListenerObject | null, options?: EventListenerOptions | boolean, ): void; + + dispatchCustomEvent( + type: K, + data?: EventMap[K] extends CustomEvent ? DetailData : never, + eventInitDict?: EventInit, + ): boolean; +} + +export function dispatchTypedEvent( + target: TypedEventTargetInterface, + type: K, + data: EventMap[K] extends CustomEvent ? DetailData : never +): boolean { + return target.dispatchEvent(new CustomEvent(type as string, { detail: data })) } diff --git a/www/src/ts/virtual_machine/base_device.ts b/www/src/ts/virtual_machine/base_device.ts index 27c57ed..6f910bb 100644 --- a/www/src/ts/virtual_machine/base_device.ts +++ b/www/src/ts/virtual_machine/base_device.ts @@ -133,7 +133,7 @@ export const VMObjectMixin = >( const root = super.connectedCallback(); window.VM.get().then((vm) => { vm.addEventListener( - "vm-objects-modified", + "vm-object-modified", this._handleDeviceModified.bind(this), ); vm.addEventListener( @@ -156,7 +156,7 @@ export const VMObjectMixin = >( disconnectedCallback(): void { window.VM.get().then((vm) => { vm.removeEventListener( - "vm-objects-modified", + "vm-object-modified", this._handleDeviceModified.bind(this), ); vm.removeEventListener( @@ -467,7 +467,7 @@ export const VMObjectMixin = >( this.icIP = ip; } const opCount = - this.obj.obj_info.circuit?.yield_instruciton_count ?? null; + this.obj.obj_info.circuit?.yield_instruction_count ?? null; if (this.icOpCount !== opCount) { this.icOpCount = opCount; } diff --git a/www/src/ts/virtual_machine/controls.ts b/www/src/ts/virtual_machine/controls.ts index 2e3d63c..27ef8a3 100644 --- a/www/src/ts/virtual_machine/controls.ts +++ b/www/src/ts/virtual_machine/controls.ts @@ -154,7 +154,7 @@ export class VMICControls extends VMActiveICMixin(BaseElement) {
Errors - ${this.errors.map( + ${this.errors?.map( (err) => typeof err === "object" && "ParseError" in err diff --git a/www/src/ts/virtual_machine/index.ts b/www/src/ts/virtual_machine/index.ts index 185e9c7..acd1c6e 100644 --- a/www/src/ts/virtual_machine/index.ts +++ b/www/src/ts/virtual_machine/index.ts @@ -23,18 +23,19 @@ export interface ToastMessage { id: string; } -export interface VirtualMachinEventMap { +export interface VirtualMachineEventMap { "vm-template-db-loaded": CustomEvent; "vm-objects-update": CustomEvent; "vm-objects-removed": CustomEvent; - "vm-objects-modified": CustomEvent; + "vm-object-modified": CustomEvent; "vm-run-ic": CustomEvent; "vm-object-id-change": CustomEvent<{ old: number; new: number }>; "vm-networks-update": CustomEvent; "vm-networks-removed": CustomEvent; + "vm-message": CustomEvent; } -class VirtualMachine extends (EventTarget as TypedEventTarget) { +class VirtualMachine extends TypedEventTarget() { ic10vm: Comlink.Remote; templateDBPromise: Promise; templateDB: TemplateDatabase; @@ -51,7 +52,7 @@ class VirtualMachine extends (EventTarget as TypedEventTarget(this.vm_worker); this.ic10vm = vm; window.VM.set(this); @@ -155,17 +156,9 @@ class VirtualMachine extends (EventTarget as TypedEventTarget 0) { - this.dispatchEvent( - new CustomEvent("vm-networks-removed", { - detail: removedNetworks, - }), - ); + this.dispatchCustomEvent("vm-networks-removed", removedNetworks); } this.app.session.save(); } @@ -240,17 +233,9 @@ class VirtualMachine extends (EventTarget as TypedEventTarget 0) { - this.dispatchEvent( - new CustomEvent("vm-objects-removed", { - detail: removedObjects, - }), - ); + this.dispatchCustomEvent("vm-objects-removed", removedObjects); } this.app.session.save(); } @@ -272,9 +257,7 @@ class VirtualMachine extends (EventTarget as TypedEventTarget { @@ -533,11 +504,7 @@ class VirtualMachine extends (EventTarget as TypedEventTarget String { - let color_regex = Regex::with_options( - r#"((:?(?!).)+?)"#, - RegexOptions::REGEX_OPTION_MULTILINE | RegexOptions::REGEX_OPTION_CAPTURE_GROUP, - Syntax::default(), - ) - .unwrap(); - let mut new = s.to_owned(); - loop { - new = color_regex.replace_all(&new, |caps: &Captures| caps.at(2).unwrap_or("").to_string()); - if !color_regex.is_match(&new) { - break; - } - } - new + let color_re = Regex::new(r"|").unwrap(); + color_re.replace_all(s, "").to_string() } #[allow(dead_code)] -pub fn color_to_heml(s: &str) -> String { - let color_regex = Regex::with_options( - r#"((:?(?!).)+?)"#, - RegexOptions::REGEX_OPTION_MULTILINE | RegexOptions::REGEX_OPTION_CAPTURE_GROUP, - Syntax::default(), - ) - .unwrap(); - let mut new = s.to_owned(); - loop { - new = color_regex.replace_all(&new, |caps: &Captures| { - format!( - r#"
{}
"#, - caps.at(1).unwrap_or(""), - caps.at(2).unwrap_or("") - ) - }); - if !color_regex.is_match(&new) { - break; - } - } - new +pub fn color_to_html(s: &str) -> String { + // not currently used + // onig regex: r#"((:?(?!).)+?)"# + let color_re_start = Regex::new(r#"#?\w+)>"#).unwrap(); + let color_re_end = Regex::new("").unwrap(); + let start_replaced = color_re_start.replace_all(s, |caps: &Captures| { + format!( + r#"
"#, + caps.name("color").unwrap().as_str() + ) + }); + let replaced = color_re_end.replace_all(&start_replaced, "
"); + replaced.to_string() } #[allow(dead_code)] pub fn strip_link(s: &str) -> String { - let link_regex = Regex::with_options( - r#"(.+?)"#, - RegexOptions::REGEX_OPTION_MULTILINE | RegexOptions::REGEX_OPTION_CAPTURE_GROUP, - Syntax::default(), - ) - .unwrap(); - let mut new = s.to_owned(); - loop { - new = link_regex.replace_all(&new, |caps: &Captures| caps.at(2).unwrap_or("").to_string()); - if !link_regex.is_match(&new) { - break; - } - } - new + let link_re = Regex::new(r"|").unwrap(); + link_re.replace_all(s, "").to_string() } From 6c26a37ca019b3c7e0ece8ce284eeb02bf1ef27e Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sat, 1 Jun 2024 04:22:58 -0700 Subject: [PATCH 39/50] refactor(vm, frontend): turns out that the serde_wasm_bindgen facilities of TSify are borken... --- Cargo.lock | 17 +- ic10emu/Cargo.toml | 2 +- ic10emu_wasm/Cargo.toml | 5 +- ic10emu_wasm/src/lib.rs | 29 + stationeers_data/Cargo.toml | 2 +- stationeers_data/src/database/prefab_map.rs | 1253 ----------------- .../{base_device.ts => baseDevice.ts} | 0 www/src/ts/virtual_machine/controls.ts | 2 +- .../ts/virtual_machine/device/add_device.ts | 2 +- www/src/ts/virtual_machine/device/card.ts | 2 +- www/src/ts/virtual_machine/device/fields.ts | 2 +- www/src/ts/virtual_machine/device/pins.ts | 2 +- www/src/ts/virtual_machine/device/slot.ts | 2 +- .../virtual_machine/device/slot_add_dialog.ts | 2 +- www/src/ts/virtual_machine/device/template.ts | 2 +- www/src/ts/virtual_machine/index.ts | 19 +- .../ts/virtual_machine/prefabDatabase.ts} | 4 +- www/src/ts/virtual_machine/registers.ts | 2 +- www/src/ts/virtual_machine/stack.ts | 2 +- www/src/ts/virtual_machine/vmWorker.ts | 1158 +++++++++++++++ www/src/ts/virtual_machine/vm_worker.ts | 47 - xtask/src/generate/database.rs | 18 +- 22 files changed, 1236 insertions(+), 1338 deletions(-) rename www/src/ts/virtual_machine/{base_device.ts => baseDevice.ts} (100%) rename www/{data/database.json => src/ts/virtual_machine/prefabDatabase.ts} (99%) create mode 100644 www/src/ts/virtual_machine/vmWorker.ts delete mode 100644 www/src/ts/virtual_machine/vm_worker.ts diff --git a/Cargo.lock b/Cargo.lock index f34c853..e87609c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -645,13 +645,16 @@ dependencies = [ 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-wasm-bindgen", "serde_derive", + "serde_ignored", + "serde_path_to_error", "serde_with", "stationeers_data", "strum", @@ -1276,17 +1279,6 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "serde-wasm-bindgen" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" -dependencies = [ - "js-sys", - "serde", - "wasm-bindgen", -] - [[package]] name = "serde-wasm-bindgen" version = "0.6.5" @@ -1802,7 +1794,6 @@ checksum = "d6b26cf145f2f3b9ff84e182c448eaf05468e247f148cf3d2a7d67d78ff023a0" dependencies = [ "gloo-utils", "serde", - "serde-wasm-bindgen 0.5.0", "serde_json", "tsify-macros", "wasm-bindgen", diff --git a/ic10emu/Cargo.toml b/ic10emu/Cargo.toml index 2c71833..39bd02f 100644 --- a/ic10emu/Cargo.toml +++ b/ic10emu/Cargo.toml @@ -29,7 +29,7 @@ time = { version = "0.3.36", features = [ "serde", "local-offset", ] } -tsify = { version = "0.4.5", optional = true, features = ["js"] } +tsify = { version = "0.4.5", optional = true, features = ["json"] } wasm-bindgen = { version = "0.2.92", optional = true } [target.'cfg(target_arch = "wasm32")'.dependencies] diff --git a/ic10emu_wasm/Cargo.toml b/ic10emu_wasm/Cargo.toml index 8fd59bd..73264a6 100644 --- a/ic10emu_wasm/Cargo.toml +++ b/ic10emu_wasm/Cargo.toml @@ -16,10 +16,13 @@ wasm-bindgen-futures = { version = "0.4.42", features = [ ] } wasm-streams = "0.4" serde-wasm-bindgen = "0.6.5" +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"] } +tsify = { version = "0.4.5", features = ["json"] } thiserror = "1.0.61" serde_derive = "1.0.203" diff --git a/ic10emu_wasm/src/lib.rs b/ic10emu_wasm/src/lib.rs index 96b1643..a087fb3 100644 --- a/ic10emu_wasm/src/lib.rs +++ b/ic10emu_wasm/src/lib.rs @@ -108,6 +108,23 @@ impl IntoIterator for CompileErrors { } } +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| { + log!("Found ignored key: {path}"); + }; + serde_ignored::deserialize(path, &mut fun).map_err(|e| { + eyre::eyre!( + "path: {track} | error = {e}", + track = track.path().to_string(), + ) + }) +} + #[wasm_bindgen] impl VMRef { #[wasm_bindgen(constructor)] @@ -120,6 +137,18 @@ impl VMRef { self.vm.import_template_database(db); } + #[wasm_bindgen(js_name = "importTemplateDatabaseSerde")] + pub fn import_template_database_serde(&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 = "getTemplateDatabase")] pub fn get_template_database(&self) -> TemplateDatabase { TemplateDatabase(self.vm.get_template_database()) diff --git a/stationeers_data/Cargo.toml b/stationeers_data/Cargo.toml index 798fabd..47caab2 100644 --- a/stationeers_data/Cargo.toml +++ b/stationeers_data/Cargo.toml @@ -16,5 +16,5 @@ phf = "0.11.2" serde = "1.0.202" serde_derive = "1.0.202" strum = { version = "0.26.2", features = ["derive", "phf", "strum_macros"] } -tsify = { version = "0.4.5", optional = true, features = ["js"] } +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 index 7d20098..415ad50 100644 --- a/stationeers_data/src/database/prefab_map.rs +++ b/stationeers_data/src/database/prefab_map.rs @@ -25,7 +25,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1330388999i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardBlack".into(), prefab_hash: -1330388999i32, @@ -49,7 +48,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1411327657i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardBlue".into(), prefab_hash: -1411327657i32, @@ -73,7 +71,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1412428165i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardBrown".into(), prefab_hash: 1412428165i32, @@ -97,7 +94,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1339479035i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardGray".into(), prefab_hash: -1339479035i32, @@ -121,7 +117,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -374567952i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardGreen".into(), prefab_hash: -374567952i32, @@ -145,7 +140,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 337035771i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardKhaki".into(), prefab_hash: 337035771i32, @@ -169,7 +163,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -332896929i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardOrange".into(), prefab_hash: -332896929i32, @@ -193,7 +186,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 431317557i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardPink".into(), prefab_hash: 431317557i32, @@ -217,7 +209,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 459843265i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardPurple".into(), prefab_hash: 459843265i32, @@ -241,7 +232,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1713748313i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardRed".into(), prefab_hash: -1713748313i32, @@ -265,7 +255,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2079959157i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardWhite".into(), prefab_hash: 2079959157i32, @@ -289,7 +278,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 568932536i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardYellow".into(), prefab_hash: 568932536i32, @@ -313,7 +301,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1365789392i32, ItemConsumerTemplate { - templateType: "ItemConsumer".into(), prefab: PrefabInfo { prefab_name: "ApplianceChemistryStation".into(), prefab_hash: 1365789392i32, @@ -349,7 +336,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1683849799i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ApplianceDeskLampLeft".into(), prefab_hash: -1683849799i32, @@ -373,7 +359,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1174360780i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ApplianceDeskLampRight".into(), prefab_hash: 1174360780i32, @@ -397,7 +382,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1136173965i32, ItemConsumerTemplate { - templateType: "ItemConsumer".into(), prefab: PrefabInfo { prefab_name: "ApplianceMicrowave".into(), prefab_hash: -1136173965i32, @@ -438,7 +422,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -749191906i32, ItemConsumerTemplate { - templateType: "ItemConsumer".into(), prefab: PrefabInfo { prefab_name: "AppliancePackagingMachine".into(), prefab_hash: -749191906i32, @@ -479,7 +462,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1339716113i32, ItemConsumerTemplate { - templateType: "ItemConsumer".into(), prefab: PrefabInfo { prefab_name: "AppliancePaintMixer".into(), prefab_hash: -1339716113i32, @@ -516,7 +498,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1303038067i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "AppliancePlantGeneticAnalyzer".into(), prefab_hash: -1303038067i32, @@ -544,7 +525,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1094868323i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "AppliancePlantGeneticSplicer".into(), prefab_hash: -1094868323i32, @@ -575,7 +555,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 871432335i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "AppliancePlantGeneticStabilizer".into(), prefab_hash: 871432335i32, @@ -603,7 +582,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1260918085i32, ItemConsumerTemplate { - templateType: "ItemConsumer".into(), prefab: PrefabInfo { prefab_name: "ApplianceReagentProcessor".into(), prefab_hash: 1260918085i32, @@ -645,7 +623,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 142831994i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ApplianceSeedTray".into(), prefab_hash: 142831994i32, @@ -684,7 +661,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1853941363i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ApplianceTabletDock".into(), prefab_hash: 1853941363i32, @@ -711,7 +687,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 221058307i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AutolathePrinterMod".into(), prefab_hash: 221058307i32, @@ -736,7 +711,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -462415758i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "Battery_Wireless_cell".into(), prefab_hash: -462415758i32, @@ -783,7 +757,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -41519077i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "Battery_Wireless_cell_Big".into(), prefab_hash: -41519077i32, @@ -830,7 +803,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1976947556i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "CardboardBox".into(), prefab_hash: -1976947556i32, @@ -863,7 +835,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1634532552i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeAccessController".into(), prefab_hash: -1634532552i32, @@ -887,7 +858,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1550278665i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeAtmosAnalyser".into(), prefab_hash: -1550278665i32, @@ -912,7 +882,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -932136011i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeConfiguration".into(), prefab_hash: -932136011i32, @@ -936,7 +905,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1462180176i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeElectronicReader".into(), prefab_hash: -1462180176i32, @@ -960,7 +928,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1957063345i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeGPS".into(), prefab_hash: -1957063345i32, @@ -984,7 +951,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 872720793i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeGuide".into(), prefab_hash: 872720793i32, @@ -1008,7 +974,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1116110181i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeMedicalAnalyser".into(), prefab_hash: -1116110181i32, @@ -1033,7 +998,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1606989119i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeNetworkAnalyser".into(), prefab_hash: 1606989119i32, @@ -1058,7 +1022,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1768732546i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeOreScanner".into(), prefab_hash: -1768732546i32, @@ -1083,7 +1046,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1738236580i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeOreScannerColor".into(), prefab_hash: 1738236580i32, @@ -1108,7 +1070,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1101328282i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgePlantAnalyser".into(), prefab_hash: 1101328282i32, @@ -1132,7 +1093,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 81488783i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeTracker".into(), prefab_hash: 81488783i32, @@ -1156,7 +1116,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1633663176i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardAdvAirlockControl".into(), prefab_hash: 1633663176i32, @@ -1180,7 +1139,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1618019559i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardAirControl".into(), prefab_hash: 1618019559i32, @@ -1205,7 +1163,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 912176135i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardAirlockControl".into(), prefab_hash: 912176135i32, @@ -1230,7 +1187,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -412104504i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardCameraDisplay".into(), prefab_hash: -412104504i32, @@ -1255,7 +1211,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 855694771i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardDoorControl".into(), prefab_hash: 855694771i32, @@ -1280,7 +1235,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -82343730i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardGasDisplay".into(), prefab_hash: -82343730i32, @@ -1305,7 +1259,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1344368806i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardGraphDisplay".into(), prefab_hash: 1344368806i32, @@ -1329,7 +1282,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1633074601i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardHashDisplay".into(), prefab_hash: 1633074601i32, @@ -1353,7 +1305,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1134148135i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardModeControl".into(), prefab_hash: -1134148135i32, @@ -1378,7 +1329,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1923778429i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardPowerControl".into(), prefab_hash: -1923778429i32, @@ -1403,7 +1353,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2044446819i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardShipDisplay".into(), prefab_hash: -2044446819i32, @@ -1428,7 +1377,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2020180320i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardSolarControl".into(), prefab_hash: 2020180320i32, @@ -1453,7 +1401,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1228794916i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "CompositeRollCover".into(), prefab_hash: 1228794916i32, @@ -1503,7 +1450,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 8709219i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "CrateMkII".into(), prefab_hash: 8709219i32, @@ -1540,7 +1486,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1531087544i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "DecayedFood".into(), prefab_hash: 1531087544i32, @@ -1565,7 +1510,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1844430312i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "DeviceLfoVolume".into(), prefab_hash: -1844430312i32, @@ -1628,7 +1572,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1762696475i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "DeviceStepUnit".into(), prefab_hash: 1762696475i32, @@ -1735,7 +1678,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 519913639i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicAirConditioner".into(), prefab_hash: 519913639i32, @@ -1766,7 +1708,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1941079206i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicCrate".into(), prefab_hash: 1941079206i32, @@ -1803,7 +1744,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2085885850i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "DynamicGPR".into(), prefab_hash: -2085885850i32, @@ -1856,7 +1796,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1713611165i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterAir".into(), prefab_hash: -1713611165i32, @@ -1887,7 +1826,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -322413931i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterCarbonDioxide".into(), prefab_hash: -322413931i32, @@ -1918,7 +1856,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1741267161i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterEmpty".into(), prefab_hash: -1741267161i32, @@ -1949,7 +1886,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -817051527i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterFuel".into(), prefab_hash: -817051527i32, @@ -1980,7 +1916,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 121951301i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterNitrogen".into(), prefab_hash: 121951301i32, @@ -2011,7 +1946,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 30727200i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterNitrousOxide".into(), prefab_hash: 30727200i32, @@ -2041,7 +1975,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1360925836i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterOxygen".into(), prefab_hash: 1360925836i32, @@ -2072,7 +2005,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 396065382i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterPollutants".into(), prefab_hash: 396065382i32, @@ -2102,7 +2034,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -8883951i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterRocketFuel".into(), prefab_hash: -8883951i32, @@ -2132,7 +2063,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 108086870i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterVolatiles".into(), prefab_hash: 108086870i32, @@ -2163,7 +2093,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 197293625i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterWater".into(), prefab_hash: 197293625i32, @@ -2196,7 +2125,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -386375420i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasTankAdvanced".into(), prefab_hash: -386375420i32, @@ -2226,7 +2154,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1264455519i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasTankAdvancedOxygen".into(), prefab_hash: -1264455519i32, @@ -2256,7 +2183,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -82087220i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGenerator".into(), prefab_hash: -82087220i32, @@ -2290,7 +2216,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 587726607i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicHydroponics".into(), prefab_hash: 587726607i32, @@ -2330,7 +2255,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -21970188i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "DynamicLight".into(), prefab_hash: -21970188i32, @@ -2385,7 +2309,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1939209112i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicLiquidCanisterEmpty".into(), prefab_hash: -1939209112i32, @@ -2418,7 +2341,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2130739600i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicMKIILiquidCanisterEmpty".into(), prefab_hash: 2130739600i32, @@ -2451,7 +2373,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -319510386i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicMKIILiquidCanisterWater".into(), prefab_hash: -319510386i32, @@ -2484,7 +2405,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 755048589i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicScrubber".into(), prefab_hash: 755048589i32, @@ -2519,7 +2439,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 106953348i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "DynamicSkeleton".into(), prefab_hash: 106953348i32, @@ -2543,7 +2462,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -311170652i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ElectronicPrinterMod".into(), prefab_hash: -311170652i32, @@ -2568,7 +2486,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -110788403i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ElevatorCarrage".into(), prefab_hash: -110788403i32, @@ -2592,7 +2509,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1730165908i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "EntityChick".into(), prefab_hash: 1730165908i32, @@ -2623,7 +2539,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 334097180i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "EntityChickenBrown".into(), prefab_hash: 334097180i32, @@ -2654,7 +2569,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1010807532i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "EntityChickenWhite".into(), prefab_hash: 1010807532i32, @@ -2685,7 +2599,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 966959649i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "EntityRoosterBlack".into(), prefab_hash: 966959649i32, @@ -2715,7 +2628,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -583103395i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "EntityRoosterBrown".into(), prefab_hash: -583103395i32, @@ -2746,7 +2658,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1517856652i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "Fertilizer".into(), prefab_hash: 1517856652i32, @@ -2771,7 +2682,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -86315541i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "FireArmSMG".into(), prefab_hash: -86315541i32, @@ -2798,7 +2708,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1845441951i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Flag_ODA_10m".into(), prefab_hash: 1845441951i32, @@ -2814,7 +2723,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1159126354i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Flag_ODA_4m".into(), prefab_hash: 1159126354i32, @@ -2830,7 +2738,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1998634960i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Flag_ODA_6m".into(), prefab_hash: 1998634960i32, @@ -2846,7 +2753,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -375156130i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Flag_ODA_8m".into(), prefab_hash: -375156130i32, @@ -2862,7 +2768,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 118685786i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "FlareGun".into(), prefab_hash: 118685786i32, @@ -2892,7 +2797,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1840108251i32, StructureCircuitHolderTemplate { - templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "H2Combustor".into(), prefab_hash: 1840108251i32, @@ -3020,7 +2924,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 247238062i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "Handgun".into(), prefab_hash: 247238062i32, @@ -3047,7 +2950,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1254383185i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "HandgunMagazine".into(), prefab_hash: 1254383185i32, @@ -3071,7 +2973,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -857713709i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "HumanSkull".into(), prefab_hash: -857713709i32, @@ -3095,7 +2996,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -73796547i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ImGuiCircuitboardAirlockControl".into(), prefab_hash: -73796547i32, @@ -3119,7 +3019,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -842048328i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemActiveVent".into(), prefab_hash: -842048328i32, @@ -3144,7 +3043,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1871048978i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAdhesiveInsulation".into(), prefab_hash: 1871048978i32, @@ -3168,7 +3066,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1722785341i32, ItemCircuitHolderTemplate { - templateType: "ItemCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "ItemAdvancedTablet".into(), prefab_hash: 1722785341i32, @@ -3254,7 +3151,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 176446172i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAlienMushroom".into(), prefab_hash: 176446172i32, @@ -3278,7 +3174,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -9559091i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAmmoBox".into(), prefab_hash: -9559091i32, @@ -3302,7 +3197,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 201215010i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemAngleGrinder".into(), prefab_hash: 201215010i32, @@ -3355,7 +3249,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1385062886i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemArcWelder".into(), prefab_hash: 1385062886i32, @@ -3408,7 +3301,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1757673317i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAreaPowerControl".into(), prefab_hash: 1757673317i32, @@ -3433,7 +3325,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 412924554i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAstroloyIngot".into(), prefab_hash: 412924554i32, @@ -3458,7 +3349,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1662476145i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAstroloySheets".into(), prefab_hash: -1662476145i32, @@ -3482,7 +3372,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 789015045i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAuthoringTool".into(), prefab_hash: 789015045i32, @@ -3506,7 +3395,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1731627004i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAuthoringToolRocketNetwork".into(), prefab_hash: -1731627004i32, @@ -3530,7 +3418,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1262580790i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemBasketBall".into(), prefab_hash: -1262580790i32, @@ -3554,7 +3441,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 700133157i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemBatteryCell".into(), prefab_hash: 700133157i32, @@ -3601,7 +3487,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -459827268i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemBatteryCellLarge".into(), prefab_hash: -459827268i32, @@ -3648,7 +3533,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 544617306i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemBatteryCellNuclear".into(), prefab_hash: 544617306i32, @@ -3695,7 +3579,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1866880307i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemBatteryCharger".into(), prefab_hash: -1866880307i32, @@ -3720,7 +3603,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1008295833i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemBatteryChargerSmall".into(), prefab_hash: 1008295833i32, @@ -3744,7 +3626,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -869869491i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemBeacon".into(), prefab_hash: -869869491i32, @@ -3797,7 +3678,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -831480639i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemBiomass".into(), prefab_hash: -831480639i32, @@ -3822,7 +3702,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 893514943i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemBreadLoaf".into(), prefab_hash: 893514943i32, @@ -3846,7 +3725,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1792787349i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCableAnalyser".into(), prefab_hash: -1792787349i32, @@ -3870,7 +3748,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -466050668i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCableCoil".into(), prefab_hash: -466050668i32, @@ -3895,7 +3772,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2060134443i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCableCoilHeavy".into(), prefab_hash: 2060134443i32, @@ -3920,7 +3796,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 195442047i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCableFuse".into(), prefab_hash: 195442047i32, @@ -3944,7 +3819,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2104175091i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCannedCondensedMilk".into(), prefab_hash: -2104175091i32, @@ -3969,7 +3843,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -999714082i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCannedEdamame".into(), prefab_hash: -999714082i32, @@ -3994,7 +3867,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1344601965i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCannedMushroom".into(), prefab_hash: -1344601965i32, @@ -4019,7 +3891,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1161510063i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCannedPowderedEggs".into(), prefab_hash: 1161510063i32, @@ -4044,7 +3915,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1185552595i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCannedRicePudding".into(), prefab_hash: -1185552595i32, @@ -4069,7 +3939,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 791746840i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCerealBar".into(), prefab_hash: 791746840i32, @@ -4094,7 +3963,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 252561409i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCharcoal".into(), prefab_hash: 252561409i32, @@ -4119,7 +3987,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -772542081i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChemLightBlue".into(), prefab_hash: -772542081i32, @@ -4144,7 +4011,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -597479390i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChemLightGreen".into(), prefab_hash: -597479390i32, @@ -4169,7 +4035,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -525810132i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChemLightRed".into(), prefab_hash: -525810132i32, @@ -4194,7 +4059,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1312166823i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChemLightWhite".into(), prefab_hash: 1312166823i32, @@ -4219,7 +4083,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1224819963i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChemLightYellow".into(), prefab_hash: 1224819963i32, @@ -4243,7 +4106,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 234601764i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChocolateBar".into(), prefab_hash: 234601764i32, @@ -4267,7 +4129,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -261575861i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChocolateCake".into(), prefab_hash: -261575861i32, @@ -4291,7 +4152,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 860793245i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChocolateCerealBar".into(), prefab_hash: 860793245i32, @@ -4315,7 +4175,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1724793494i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCoalOre".into(), prefab_hash: 1724793494i32, @@ -4340,7 +4199,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -983091249i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCobaltOre".into(), prefab_hash: -983091249i32, @@ -4365,7 +4223,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 457286516i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCocoaPowder".into(), prefab_hash: 457286516i32, @@ -4389,7 +4246,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 680051921i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCocoaTree".into(), prefab_hash: 680051921i32, @@ -4413,7 +4269,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1800622698i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCoffeeMug".into(), prefab_hash: 1800622698i32, @@ -4437,7 +4292,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1058547521i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemConstantanIngot".into(), prefab_hash: 1058547521i32, @@ -4461,7 +4315,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1715917521i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedCondensedMilk".into(), prefab_hash: 1715917521i32, @@ -4485,7 +4338,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1344773148i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedCorn".into(), prefab_hash: 1344773148i32, @@ -4509,7 +4361,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1076892658i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedMushroom".into(), prefab_hash: -1076892658i32, @@ -4533,7 +4384,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1712264413i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedPowderedEggs".into(), prefab_hash: -1712264413i32, @@ -4557,7 +4407,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1849281546i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedPumpkin".into(), prefab_hash: 1849281546i32, @@ -4581,7 +4430,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2013539020i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedRice".into(), prefab_hash: 2013539020i32, @@ -4605,7 +4453,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1353449022i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedSoybean".into(), prefab_hash: 1353449022i32, @@ -4629,7 +4476,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -709086714i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedTomato".into(), prefab_hash: -709086714i32, @@ -4653,7 +4499,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -404336834i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCopperIngot".into(), prefab_hash: -404336834i32, @@ -4678,7 +4523,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -707307845i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCopperOre".into(), prefab_hash: -707307845i32, @@ -4703,7 +4547,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 258339687i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCorn".into(), prefab_hash: 258339687i32, @@ -4728,7 +4571,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 545034114i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCornSoup".into(), prefab_hash: 545034114i32, @@ -4753,7 +4595,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1756772618i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCreditCard".into(), prefab_hash: -1756772618i32, @@ -4777,7 +4618,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 215486157i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCropHay".into(), prefab_hash: 215486157i32, @@ -4801,7 +4641,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 856108234i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCrowbar".into(), prefab_hash: 856108234i32, @@ -4826,7 +4665,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1005843700i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDataDisk".into(), prefab_hash: 1005843700i32, @@ -4850,7 +4688,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 902565329i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDirtCanister".into(), prefab_hash: 902565329i32, @@ -4875,7 +4712,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1234745580i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDirtyOre".into(), prefab_hash: -1234745580i32, @@ -4900,7 +4736,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2124435700i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDisposableBatteryCharger".into(), prefab_hash: -2124435700i32, @@ -4925,7 +4760,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2009673399i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemDrill".into(), prefab_hash: 2009673399i32, @@ -4979,7 +4813,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1943134693i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDuctTape".into(), prefab_hash: -1943134693i32, @@ -5004,7 +4837,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1072914031i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDynamicAirCon".into(), prefab_hash: 1072914031i32, @@ -5028,7 +4860,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -971920158i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDynamicScrubber".into(), prefab_hash: -971920158i32, @@ -5052,7 +4883,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -524289310i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemEggCarton".into(), prefab_hash: -524289310i32, @@ -5085,7 +4915,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 731250882i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemElectronicParts".into(), prefab_hash: 731250882i32, @@ -5109,7 +4938,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 502280180i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemElectrumIngot".into(), prefab_hash: 502280180i32, @@ -5133,7 +4961,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -351438780i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyAngleGrinder".into(), prefab_hash: -351438780i32, @@ -5186,7 +5013,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1056029600i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyArcWelder".into(), prefab_hash: -1056029600i32, @@ -5239,7 +5065,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 976699731i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyCrowbar".into(), prefab_hash: 976699731i32, @@ -5263,7 +5088,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2052458905i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyDrill".into(), prefab_hash: -2052458905i32, @@ -5316,7 +5140,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1791306431i32, ItemSuitTemplate { - templateType: "ItemSuit".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyEvaSuit".into(), prefab_hash: 1791306431i32, @@ -5357,7 +5180,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1061510408i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyPickaxe".into(), prefab_hash: -1061510408i32, @@ -5381,7 +5203,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 266099983i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyScrewdriver".into(), prefab_hash: 266099983i32, @@ -5405,7 +5226,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 205916793i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencySpaceHelmet".into(), prefab_hash: 205916793i32, @@ -5469,7 +5289,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1661941301i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyToolBelt".into(), prefab_hash: 1661941301i32, @@ -5503,7 +5322,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2102803952i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyWireCutters".into(), prefab_hash: 2102803952i32, @@ -5527,7 +5345,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 162553030i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyWrench".into(), prefab_hash: 162553030i32, @@ -5551,7 +5368,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1013818348i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemEmptyCan".into(), prefab_hash: 1013818348i32, @@ -5576,7 +5392,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1677018918i32, ItemSuitTemplate { - templateType: "ItemSuit".into(), prefab: PrefabInfo { prefab_name: "ItemEvaSuit".into(), prefab_hash: 1677018918i32, @@ -5618,7 +5433,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 235361649i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemExplosive".into(), prefab_hash: 235361649i32, @@ -5642,7 +5456,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 892110467i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFern".into(), prefab_hash: 892110467i32, @@ -5667,7 +5480,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -383972371i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFertilizedEgg".into(), prefab_hash: -383972371i32, @@ -5692,7 +5504,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 266654416i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFilterFern".into(), prefab_hash: 266654416i32, @@ -5717,7 +5528,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2011191088i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlagSmall".into(), prefab_hash: 2011191088i32, @@ -5741,7 +5551,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2107840748i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlashingLight".into(), prefab_hash: -2107840748i32, @@ -5765,7 +5574,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -838472102i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemFlashlight".into(), prefab_hash: -838472102i32, @@ -5822,7 +5630,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -665995854i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlour".into(), prefab_hash: -665995854i32, @@ -5847,7 +5654,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1573623434i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlowerBlue".into(), prefab_hash: -1573623434i32, @@ -5871,7 +5677,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1513337058i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlowerGreen".into(), prefab_hash: -1513337058i32, @@ -5895,7 +5700,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1411986716i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlowerOrange".into(), prefab_hash: -1411986716i32, @@ -5919,7 +5723,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -81376085i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlowerRed".into(), prefab_hash: -81376085i32, @@ -5943,7 +5746,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1712822019i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlowerYellow".into(), prefab_hash: 1712822019i32, @@ -5967,7 +5769,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -57608687i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFrenchFries".into(), prefab_hash: -57608687i32, @@ -5991,7 +5792,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1371786091i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFries".into(), prefab_hash: 1371786091i32, @@ -6015,7 +5815,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -767685874i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterCarbonDioxide".into(), prefab_hash: -767685874i32, @@ -6042,7 +5841,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 42280099i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterEmpty".into(), prefab_hash: 42280099i32, @@ -6069,7 +5867,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1014695176i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterFuel".into(), prefab_hash: -1014695176i32, @@ -6096,7 +5893,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2145068424i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterNitrogen".into(), prefab_hash: 2145068424i32, @@ -6123,7 +5919,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1712153401i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterNitrousOxide".into(), prefab_hash: -1712153401i32, @@ -6150,7 +5945,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1152261938i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterOxygen".into(), prefab_hash: -1152261938i32, @@ -6177,7 +5971,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1552586384i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterPollutants".into(), prefab_hash: -1552586384i32, @@ -6204,7 +5997,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -668314371i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterSmart".into(), prefab_hash: -668314371i32, @@ -6231,7 +6023,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -472094806i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterVolatiles".into(), prefab_hash: -472094806i32, @@ -6258,7 +6049,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1854861891i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterWater".into(), prefab_hash: -1854861891i32, @@ -6287,7 +6077,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1635000764i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterCarbonDioxide".into(), prefab_hash: 1635000764i32, @@ -6312,7 +6101,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -185568964i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterCarbonDioxideInfinite".into(), prefab_hash: -185568964i32, @@ -6337,7 +6125,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1876847024i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterCarbonDioxideL".into(), prefab_hash: 1876847024i32, @@ -6361,7 +6148,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 416897318i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterCarbonDioxideM".into(), prefab_hash: 416897318i32, @@ -6385,7 +6171,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 632853248i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrogen".into(), prefab_hash: 632853248i32, @@ -6410,7 +6195,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 152751131i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrogenInfinite".into(), prefab_hash: 152751131i32, @@ -6435,7 +6219,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1387439451i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrogenL".into(), prefab_hash: -1387439451i32, @@ -6459,7 +6242,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -632657357i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrogenM".into(), prefab_hash: -632657357i32, @@ -6483,7 +6265,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1247674305i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrousOxide".into(), prefab_hash: -1247674305i32, @@ -6507,7 +6288,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -123934842i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrousOxideInfinite".into(), prefab_hash: -123934842i32, @@ -6532,7 +6312,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 465267979i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrousOxideL".into(), prefab_hash: 465267979i32, @@ -6556,7 +6335,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1824284061i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrousOxideM".into(), prefab_hash: 1824284061i32, @@ -6580,7 +6358,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -721824748i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterOxygen".into(), prefab_hash: -721824748i32, @@ -6605,7 +6382,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1055451111i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterOxygenInfinite".into(), prefab_hash: -1055451111i32, @@ -6630,7 +6406,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1217998945i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterOxygenL".into(), prefab_hash: -1217998945i32, @@ -6654,7 +6429,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1067319543i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterOxygenM".into(), prefab_hash: -1067319543i32, @@ -6678,7 +6452,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1915566057i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterPollutants".into(), prefab_hash: 1915566057i32, @@ -6703,7 +6476,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -503738105i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterPollutantsInfinite".into(), prefab_hash: -503738105i32, @@ -6728,7 +6500,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1959564765i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterPollutantsL".into(), prefab_hash: 1959564765i32, @@ -6752,7 +6523,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 63677771i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterPollutantsM".into(), prefab_hash: 63677771i32, @@ -6776,7 +6546,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 15011598i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterVolatiles".into(), prefab_hash: 15011598i32, @@ -6801,7 +6570,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1916176068i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterVolatilesInfinite".into(), prefab_hash: -1916176068i32, @@ -6826,7 +6594,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1255156286i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterVolatilesL".into(), prefab_hash: 1255156286i32, @@ -6850,7 +6617,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1037507240i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterVolatilesM".into(), prefab_hash: 1037507240i32, @@ -6874,7 +6640,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1993197973i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterWater".into(), prefab_hash: -1993197973i32, @@ -6899,7 +6664,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1678456554i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterWaterInfinite".into(), prefab_hash: -1678456554i32, @@ -6924,7 +6688,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2004969680i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterWaterL".into(), prefab_hash: 2004969680i32, @@ -6948,7 +6711,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 8804422i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterWaterM".into(), prefab_hash: 8804422i32, @@ -6972,7 +6734,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1717593480i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasSensor".into(), prefab_hash: 1717593480i32, @@ -6996,7 +6757,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2113012215i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasTankStorage".into(), prefab_hash: -2113012215i32, @@ -7021,7 +6781,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1588896491i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGlassSheets".into(), prefab_hash: 1588896491i32, @@ -7046,7 +6805,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1068925231i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGlasses".into(), prefab_hash: -1068925231i32, @@ -7070,7 +6828,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 226410516i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGoldIngot".into(), prefab_hash: 226410516i32, @@ -7095,7 +6852,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1348105509i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGoldOre".into(), prefab_hash: -1348105509i32, @@ -7120,7 +6876,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1544275894i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGrenade".into(), prefab_hash: 1544275894i32, @@ -7145,7 +6900,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 470636008i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemHEMDroidRepairKit".into(), prefab_hash: 470636008i32, @@ -7169,7 +6923,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 374891127i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemHardBackpack".into(), prefab_hash: 374891127i32, @@ -7304,7 +7057,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -412551656i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemHardJetpack".into(), prefab_hash: -412551656i32, @@ -7468,7 +7220,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 900366130i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemHardMiningBackPack".into(), prefab_hash: 900366130i32, @@ -7517,7 +7268,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1758310454i32, ItemSuitCircuitHolderTemplate { - templateType: "ItemSuitCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "ItemHardSuit".into(), prefab_hash: -1758310454i32, @@ -7685,7 +7435,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -84573099i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemHardsuitHelmet".into(), prefab_hash: -84573099i32, @@ -7750,7 +7499,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1579842814i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemHastelloyIngot".into(), prefab_hash: 1579842814i32, @@ -7774,7 +7522,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 299189339i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemHat".into(), prefab_hash: 299189339i32, @@ -7798,7 +7545,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 998653377i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemHighVolumeGasCanisterEmpty".into(), prefab_hash: 998653377i32, @@ -7825,7 +7571,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1117581553i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemHorticultureBelt".into(), prefab_hash: -1117581553i32, @@ -7861,7 +7606,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1193543727i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemHydroponicTray".into(), prefab_hash: -1193543727i32, @@ -7886,7 +7630,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1217489948i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemIce".into(), prefab_hash: 1217489948i32, @@ -7911,7 +7654,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 890106742i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemIgniter".into(), prefab_hash: 890106742i32, @@ -7936,7 +7678,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -787796599i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemInconelIngot".into(), prefab_hash: -787796599i32, @@ -7960,7 +7701,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 897176943i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemInsulation".into(), prefab_hash: 897176943i32, @@ -7985,7 +7725,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -744098481i32, ItemLogicMemoryTemplate { - templateType: "ItemLogicMemory".into(), prefab: PrefabInfo { prefab_name: "ItemIntegratedCircuit10".into(), prefab_hash: -744098481i32, @@ -8028,7 +7767,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -297990285i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemInvarIngot".into(), prefab_hash: -297990285i32, @@ -8052,7 +7790,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1225836666i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemIronFrames".into(), prefab_hash: 1225836666i32, @@ -8076,7 +7813,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1301215609i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemIronIngot".into(), prefab_hash: -1301215609i32, @@ -8101,7 +7837,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1758427767i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemIronOre".into(), prefab_hash: 1758427767i32, @@ -8126,7 +7861,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -487378546i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemIronSheets".into(), prefab_hash: -487378546i32, @@ -8150,7 +7884,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1969189000i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemJetpackBasic".into(), prefab_hash: 1969189000i32, @@ -8276,7 +8009,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 496830914i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAIMeE".into(), prefab_hash: 496830914i32, @@ -8300,7 +8032,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 513258369i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAccessBridge".into(), prefab_hash: 513258369i32, @@ -8324,7 +8055,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1431998347i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAdvancedComposter".into(), prefab_hash: -1431998347i32, @@ -8348,7 +8078,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -616758353i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAdvancedFurnace".into(), prefab_hash: -616758353i32, @@ -8372,7 +8101,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -598545233i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAdvancedPackagingMachine".into(), prefab_hash: -598545233i32, @@ -8396,7 +8124,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 964043875i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAirlock".into(), prefab_hash: 964043875i32, @@ -8420,7 +8147,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 682546947i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAirlockGate".into(), prefab_hash: 682546947i32, @@ -8444,7 +8170,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -98995857i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitArcFurnace".into(), prefab_hash: -98995857i32, @@ -8468,7 +8193,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1222286371i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAtmospherics".into(), prefab_hash: 1222286371i32, @@ -8492,7 +8216,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1668815415i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAutoMinerSmall".into(), prefab_hash: 1668815415i32, @@ -8516,7 +8239,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1753893214i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAutolathe".into(), prefab_hash: -1753893214i32, @@ -8540,7 +8262,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1931958659i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAutomatedOven".into(), prefab_hash: -1931958659i32, @@ -8564,7 +8285,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 148305004i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitBasket".into(), prefab_hash: 148305004i32, @@ -8588,7 +8308,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1406656973i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitBattery".into(), prefab_hash: 1406656973i32, @@ -8612,7 +8331,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -21225041i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitBatteryLarge".into(), prefab_hash: -21225041i32, @@ -8636,7 +8354,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 249073136i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitBeacon".into(), prefab_hash: 249073136i32, @@ -8660,7 +8377,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1241256797i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitBeds".into(), prefab_hash: -1241256797i32, @@ -8684,7 +8400,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1755116240i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitBlastDoor".into(), prefab_hash: -1755116240i32, @@ -8708,7 +8423,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 578182956i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCentrifuge".into(), prefab_hash: 578182956i32, @@ -8732,7 +8446,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1394008073i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitChairs".into(), prefab_hash: -1394008073i32, @@ -8756,7 +8469,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1025254665i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitChute".into(), prefab_hash: 1025254665i32, @@ -8780,7 +8492,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -876560854i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitChuteUmbilical".into(), prefab_hash: -876560854i32, @@ -8804,7 +8515,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1470820996i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCompositeCladding".into(), prefab_hash: -1470820996i32, @@ -8828,7 +8538,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1182412869i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCompositeFloorGrating".into(), prefab_hash: 1182412869i32, @@ -8852,7 +8561,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1990225489i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitComputer".into(), prefab_hash: 1990225489i32, @@ -8876,7 +8584,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1241851179i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitConsole".into(), prefab_hash: -1241851179i32, @@ -8900,7 +8607,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 429365598i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCrate".into(), prefab_hash: 429365598i32, @@ -8924,7 +8630,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1585956426i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCrateMkII".into(), prefab_hash: -1585956426i32, @@ -8948,7 +8653,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -551612946i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCrateMount".into(), prefab_hash: -551612946i32, @@ -8972,7 +8676,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -545234195i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCryoTube".into(), prefab_hash: -545234195i32, @@ -8996,7 +8699,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1935075707i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDeepMiner".into(), prefab_hash: -1935075707i32, @@ -9020,7 +8722,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 77421200i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDockingPort".into(), prefab_hash: 77421200i32, @@ -9044,7 +8745,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 168615924i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDoor".into(), prefab_hash: 168615924i32, @@ -9068,7 +8768,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1743663875i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDrinkingFountain".into(), prefab_hash: -1743663875i32, @@ -9092,7 +8791,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1061945368i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDynamicCanister".into(), prefab_hash: -1061945368i32, @@ -9116,7 +8814,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1533501495i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDynamicGasTankAdvanced".into(), prefab_hash: 1533501495i32, @@ -9140,7 +8837,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -732720413i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDynamicGenerator".into(), prefab_hash: -732720413i32, @@ -9164,7 +8860,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1861154222i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDynamicHydroponics".into(), prefab_hash: -1861154222i32, @@ -9188,7 +8883,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 375541286i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDynamicLiquidCanister".into(), prefab_hash: 375541286i32, @@ -9212,7 +8906,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -638019974i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDynamicMKIILiquidCanister".into(), prefab_hash: -638019974i32, @@ -9236,7 +8929,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1603046970i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitElectricUmbilical".into(), prefab_hash: 1603046970i32, @@ -9260,7 +8952,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1181922382i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitElectronicsPrinter".into(), prefab_hash: -1181922382i32, @@ -9284,7 +8975,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -945806652i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitElevator".into(), prefab_hash: -945806652i32, @@ -9308,7 +8998,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 755302726i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitEngineLarge".into(), prefab_hash: 755302726i32, @@ -9332,7 +9021,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1969312177i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitEngineMedium".into(), prefab_hash: 1969312177i32, @@ -9356,7 +9044,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 19645163i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitEngineSmall".into(), prefab_hash: 19645163i32, @@ -9380,7 +9067,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1587787610i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitEvaporationChamber".into(), prefab_hash: 1587787610i32, @@ -9404,7 +9090,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1701764190i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitFlagODA".into(), prefab_hash: 1701764190i32, @@ -9428,7 +9113,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1168199498i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitFridgeBig".into(), prefab_hash: -1168199498i32, @@ -9452,7 +9136,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1661226524i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitFridgeSmall".into(), prefab_hash: 1661226524i32, @@ -9476,7 +9159,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -806743925i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitFurnace".into(), prefab_hash: -806743925i32, @@ -9500,7 +9182,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1162905029i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitFurniture".into(), prefab_hash: 1162905029i32, @@ -9524,7 +9205,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -366262681i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitFuselage".into(), prefab_hash: -366262681i32, @@ -9548,7 +9228,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 377745425i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitGasGenerator".into(), prefab_hash: 377745425i32, @@ -9572,7 +9251,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1867280568i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitGasUmbilical".into(), prefab_hash: -1867280568i32, @@ -9596,7 +9274,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 206848766i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitGovernedGasRocketEngine".into(), prefab_hash: 206848766i32, @@ -9620,7 +9297,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2140672772i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitGroundTelescope".into(), prefab_hash: -2140672772i32, @@ -9644,7 +9320,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 341030083i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitGrowLight".into(), prefab_hash: 341030083i32, @@ -9668,7 +9343,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1022693454i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitHarvie".into(), prefab_hash: -1022693454i32, @@ -9692,7 +9366,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1710540039i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitHeatExchanger".into(), prefab_hash: -1710540039i32, @@ -9716,7 +9389,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 844391171i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitHorizontalAutoMiner".into(), prefab_hash: 844391171i32, @@ -9740,7 +9412,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2098556089i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitHydraulicPipeBender".into(), prefab_hash: -2098556089i32, @@ -9764,7 +9435,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -927931558i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitHydroponicAutomated".into(), prefab_hash: -927931558i32, @@ -9788,7 +9458,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2057179799i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitHydroponicStation".into(), prefab_hash: 2057179799i32, @@ -9812,7 +9481,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 288111533i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitIceCrusher".into(), prefab_hash: 288111533i32, @@ -9836,7 +9504,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2067655311i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitInsulatedLiquidPipe".into(), prefab_hash: 2067655311i32, @@ -9860,7 +9527,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 452636699i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitInsulatedPipe".into(), prefab_hash: 452636699i32, @@ -9884,7 +9550,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -27284803i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitInsulatedPipeUtility".into(), prefab_hash: -27284803i32, @@ -9908,7 +9573,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1831558953i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitInsulatedPipeUtilityLiquid".into(), prefab_hash: -1831558953i32, @@ -9932,7 +9596,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1935945891i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitInteriorDoors".into(), prefab_hash: 1935945891i32, @@ -9956,7 +9619,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 489494578i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLadder".into(), prefab_hash: 489494578i32, @@ -9980,7 +9642,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1817007843i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLandingPadAtmos".into(), prefab_hash: 1817007843i32, @@ -10004,7 +9665,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 293581318i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLandingPadBasic".into(), prefab_hash: 293581318i32, @@ -10028,7 +9688,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1267511065i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLandingPadWaypoint".into(), prefab_hash: -1267511065i32, @@ -10052,7 +9711,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 450164077i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLargeDirectHeatExchanger".into(), prefab_hash: 450164077i32, @@ -10076,7 +9734,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 847430620i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLargeExtendableRadiator".into(), prefab_hash: 847430620i32, @@ -10100,7 +9757,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2039971217i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLargeSatelliteDish".into(), prefab_hash: -2039971217i32, @@ -10124,7 +9780,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1854167549i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLaunchMount".into(), prefab_hash: -1854167549i32, @@ -10148,7 +9803,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -174523552i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLaunchTower".into(), prefab_hash: -174523552i32, @@ -10172,7 +9826,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1951126161i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLiquidRegulator".into(), prefab_hash: 1951126161i32, @@ -10196,7 +9849,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -799849305i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLiquidTank".into(), prefab_hash: -799849305i32, @@ -10220,7 +9872,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 617773453i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLiquidTankInsulated".into(), prefab_hash: 617773453i32, @@ -10244,7 +9895,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1805020897i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLiquidTurboVolumePump".into(), prefab_hash: -1805020897i32, @@ -10268,7 +9918,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1571996765i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLiquidUmbilical".into(), prefab_hash: 1571996765i32, @@ -10292,7 +9941,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 882301399i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLocker".into(), prefab_hash: 882301399i32, @@ -10316,7 +9964,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1512322581i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLogicCircuit".into(), prefab_hash: 1512322581i32, @@ -10340,7 +9987,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1997293610i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLogicInputOutput".into(), prefab_hash: 1997293610i32, @@ -10364,7 +10010,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2098214189i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLogicMemory".into(), prefab_hash: -2098214189i32, @@ -10388,7 +10033,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 220644373i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLogicProcessor".into(), prefab_hash: 220644373i32, @@ -10412,7 +10056,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 124499454i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLogicSwitch".into(), prefab_hash: 124499454i32, @@ -10436,7 +10079,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1005397063i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLogicTransmitter".into(), prefab_hash: 1005397063i32, @@ -10460,7 +10102,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -344968335i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitMotherShipCore".into(), prefab_hash: -344968335i32, @@ -10484,7 +10125,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2038889137i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitMusicMachines".into(), prefab_hash: -2038889137i32, @@ -10508,7 +10148,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1752768283i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPassiveLargeRadiatorGas".into(), prefab_hash: -1752768283i32, @@ -10532,7 +10171,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1453961898i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPassiveLargeRadiatorLiquid".into(), prefab_hash: 1453961898i32, @@ -10556,7 +10194,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 636112787i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPassthroughHeatExchanger".into(), prefab_hash: 636112787i32, @@ -10580,7 +10217,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2062364768i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPictureFrame".into(), prefab_hash: -2062364768i32, @@ -10604,7 +10240,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1619793705i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipe".into(), prefab_hash: -1619793705i32, @@ -10628,7 +10263,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1166461357i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipeLiquid".into(), prefab_hash: -1166461357i32, @@ -10652,7 +10286,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -827125300i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipeOrgan".into(), prefab_hash: -827125300i32, @@ -10676,7 +10309,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 920411066i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipeRadiator".into(), prefab_hash: 920411066i32, @@ -10700,7 +10332,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1697302609i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipeRadiatorLiquid".into(), prefab_hash: -1697302609i32, @@ -10724,7 +10355,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1934508338i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipeUtility".into(), prefab_hash: 1934508338i32, @@ -10748,7 +10378,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 595478589i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipeUtilityLiquid".into(), prefab_hash: 595478589i32, @@ -10772,7 +10401,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 119096484i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPlanter".into(), prefab_hash: 119096484i32, @@ -10796,7 +10424,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1041148999i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPortablesConnector".into(), prefab_hash: 1041148999i32, @@ -10820,7 +10447,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 291368213i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPowerTransmitter".into(), prefab_hash: 291368213i32, @@ -10844,7 +10470,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -831211676i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPowerTransmitterOmni".into(), prefab_hash: -831211676i32, @@ -10868,7 +10493,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2015439334i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPoweredVent".into(), prefab_hash: 2015439334i32, @@ -10892,7 +10516,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -121514007i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPressureFedGasEngine".into(), prefab_hash: -121514007i32, @@ -10916,7 +10539,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -99091572i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPressureFedLiquidEngine".into(), prefab_hash: -99091572i32, @@ -10940,7 +10562,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 123504691i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPressurePlate".into(), prefab_hash: 123504691i32, @@ -10964,7 +10585,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1921918951i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPumpedLiquidEngine".into(), prefab_hash: 1921918951i32, @@ -10988,7 +10608,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 750176282i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRailing".into(), prefab_hash: 750176282i32, @@ -11012,7 +10631,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 849148192i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRecycler".into(), prefab_hash: 849148192i32, @@ -11036,7 +10654,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1181371795i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRegulator".into(), prefab_hash: 1181371795i32, @@ -11060,7 +10677,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1459985302i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitReinforcedWindows".into(), prefab_hash: 1459985302i32, @@ -11084,7 +10700,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 724776762i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitResearchMachine".into(), prefab_hash: 724776762i32, @@ -11108,7 +10723,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1574688481i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRespawnPointWallMounted".into(), prefab_hash: 1574688481i32, @@ -11132,7 +10746,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1396305045i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketAvionics".into(), prefab_hash: 1396305045i32, @@ -11156,7 +10769,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -314072139i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketBattery".into(), prefab_hash: -314072139i32, @@ -11180,7 +10792,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 479850239i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketCargoStorage".into(), prefab_hash: 479850239i32, @@ -11204,7 +10815,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -303008602i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketCelestialTracker".into(), prefab_hash: -303008602i32, @@ -11228,7 +10838,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 721251202i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketCircuitHousing".into(), prefab_hash: 721251202i32, @@ -11252,7 +10861,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1256996603i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketDatalink".into(), prefab_hash: -1256996603i32, @@ -11276,7 +10884,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1629347579i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketGasFuelTank".into(), prefab_hash: -1629347579i32, @@ -11300,7 +10907,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2032027950i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketLiquidFuelTank".into(), prefab_hash: 2032027950i32, @@ -11324,7 +10930,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -636127860i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketManufactory".into(), prefab_hash: -636127860i32, @@ -11348,7 +10953,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -867969909i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketMiner".into(), prefab_hash: -867969909i32, @@ -11372,7 +10976,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1753647154i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketScanner".into(), prefab_hash: 1753647154i32, @@ -11396,7 +10999,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -932335800i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketTransformerSmall".into(), prefab_hash: -932335800i32, @@ -11420,7 +11022,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1827215803i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRoverFrame".into(), prefab_hash: 1827215803i32, @@ -11444,7 +11045,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 197243872i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRoverMKI".into(), prefab_hash: 197243872i32, @@ -11468,7 +11068,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 323957548i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSDBHopper".into(), prefab_hash: 323957548i32, @@ -11492,7 +11091,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 178422810i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSatelliteDish".into(), prefab_hash: 178422810i32, @@ -11516,7 +11114,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 578078533i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSecurityPrinter".into(), prefab_hash: 578078533i32, @@ -11540,7 +11137,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1776897113i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSensor".into(), prefab_hash: -1776897113i32, @@ -11564,7 +11160,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 735858725i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitShower".into(), prefab_hash: 735858725i32, @@ -11588,7 +11183,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 529996327i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSign".into(), prefab_hash: 529996327i32, @@ -11612,7 +11206,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 326752036i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSleeper".into(), prefab_hash: 326752036i32, @@ -11636,7 +11229,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1332682164i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSmallDirectHeatExchanger".into(), prefab_hash: -1332682164i32, @@ -11660,7 +11252,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1960952220i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSmallSatelliteDish".into(), prefab_hash: 1960952220i32, @@ -11684,7 +11275,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1924492105i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSolarPanel".into(), prefab_hash: -1924492105i32, @@ -11708,7 +11298,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 844961456i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSolarPanelBasic".into(), prefab_hash: 844961456i32, @@ -11732,7 +11321,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -528695432i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSolarPanelBasicReinforced".into(), prefab_hash: -528695432i32, @@ -11756,7 +11344,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -364868685i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSolarPanelReinforced".into(), prefab_hash: -364868685i32, @@ -11780,7 +11367,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1293995736i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSolidGenerator".into(), prefab_hash: 1293995736i32, @@ -11804,7 +11390,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 969522478i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSorter".into(), prefab_hash: 969522478i32, @@ -11828,7 +11413,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -126038526i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSpeaker".into(), prefab_hash: -126038526i32, @@ -11852,7 +11436,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1013244511i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitStacker".into(), prefab_hash: 1013244511i32, @@ -11876,7 +11459,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 170878959i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitStairs".into(), prefab_hash: 170878959i32, @@ -11900,7 +11482,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1868555784i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitStairwell".into(), prefab_hash: -1868555784i32, @@ -11924,7 +11505,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2133035682i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitStandardChute".into(), prefab_hash: 2133035682i32, @@ -11948,7 +11528,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1821571150i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitStirlingEngine".into(), prefab_hash: -1821571150i32, @@ -11972,7 +11551,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1088892825i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSuitStorage".into(), prefab_hash: 1088892825i32, @@ -11996,7 +11574,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1361598922i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTables".into(), prefab_hash: -1361598922i32, @@ -12020,7 +11597,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 771439840i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTank".into(), prefab_hash: 771439840i32, @@ -12044,7 +11620,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1021053608i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTankInsulated".into(), prefab_hash: 1021053608i32, @@ -12068,7 +11643,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 529137748i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitToolManufactory".into(), prefab_hash: 529137748i32, @@ -12092,7 +11666,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -453039435i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTransformer".into(), prefab_hash: -453039435i32, @@ -12116,7 +11689,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 665194284i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTransformerSmall".into(), prefab_hash: 665194284i32, @@ -12140,7 +11712,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1590715731i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTurbineGenerator".into(), prefab_hash: -1590715731i32, @@ -12164,7 +11735,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1248429712i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTurboVolumePump".into(), prefab_hash: -1248429712i32, @@ -12188,7 +11758,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1798044015i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitUprightWindTurbine".into(), prefab_hash: -1798044015i32, @@ -12212,7 +11781,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2038384332i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitVendingMachine".into(), prefab_hash: -2038384332i32, @@ -12236,7 +11804,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1867508561i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitVendingMachineRefrigerated".into(), prefab_hash: -1867508561i32, @@ -12260,7 +11827,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1826855889i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWall".into(), prefab_hash: -1826855889i32, @@ -12284,7 +11850,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1625214531i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWallArch".into(), prefab_hash: 1625214531i32, @@ -12308,7 +11873,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -846838195i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWallFlat".into(), prefab_hash: -846838195i32, @@ -12332,7 +11896,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -784733231i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWallGeometry".into(), prefab_hash: -784733231i32, @@ -12356,7 +11919,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -524546923i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWallIron".into(), prefab_hash: -524546923i32, @@ -12380,7 +11942,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -821868990i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWallPadded".into(), prefab_hash: -821868990i32, @@ -12404,7 +11965,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 159886536i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWaterBottleFiller".into(), prefab_hash: 159886536i32, @@ -12428,7 +11988,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 611181283i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWaterPurifier".into(), prefab_hash: 611181283i32, @@ -12452,7 +12011,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 337505889i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWeatherStation".into(), prefab_hash: 337505889i32, @@ -12476,7 +12034,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -868916503i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWindTurbine".into(), prefab_hash: -868916503i32, @@ -12500,7 +12057,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1779979754i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWindowShutter".into(), prefab_hash: 1779979754i32, @@ -12524,7 +12080,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -743968726i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemLabeller".into(), prefab_hash: -743968726i32, @@ -12578,7 +12133,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 141535121i32, ItemCircuitHolderTemplate { - templateType: "ItemCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "ItemLaptop".into(), prefab_hash: 141535121i32, @@ -12654,7 +12208,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2134647745i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLeadIngot".into(), prefab_hash: 2134647745i32, @@ -12678,7 +12231,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -190236170i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLeadOre".into(), prefab_hash: -190236170i32, @@ -12703,7 +12255,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1949076595i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLightSword".into(), prefab_hash: 1949076595i32, @@ -12727,7 +12278,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -185207387i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidCanisterEmpty".into(), prefab_hash: -185207387i32, @@ -12756,7 +12306,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 777684475i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidCanisterSmart".into(), prefab_hash: 777684475i32, @@ -12785,7 +12334,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2036225202i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidDrain".into(), prefab_hash: 2036225202i32, @@ -12809,7 +12357,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 226055671i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidPipeAnalyzer".into(), prefab_hash: 226055671i32, @@ -12833,7 +12380,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -248475032i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidPipeHeater".into(), prefab_hash: -248475032i32, @@ -12858,7 +12404,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2126113312i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidPipeValve".into(), prefab_hash: -2126113312i32, @@ -12883,7 +12428,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2106280569i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidPipeVolumePump".into(), prefab_hash: -2106280569i32, @@ -12907,7 +12451,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2037427578i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidTankStorage".into(), prefab_hash: 2037427578i32, @@ -12932,7 +12475,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 240174650i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIAngleGrinder".into(), prefab_hash: 240174650i32, @@ -12986,7 +12528,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2061979347i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIArcWelder".into(), prefab_hash: -2061979347i32, @@ -13039,7 +12580,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1440775434i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMKIICrowbar".into(), prefab_hash: 1440775434i32, @@ -13064,7 +12604,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 324791548i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIDrill".into(), prefab_hash: 324791548i32, @@ -13118,7 +12657,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 388774906i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIDuctTape".into(), prefab_hash: 388774906i32, @@ -13143,7 +12681,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1875271296i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIMiningDrill".into(), prefab_hash: -1875271296i32, @@ -13203,7 +12740,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2015613246i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIScrewdriver".into(), prefab_hash: -2015613246i32, @@ -13228,7 +12764,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -178893251i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIWireCutters".into(), prefab_hash: -178893251i32, @@ -13253,7 +12788,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1862001680i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIWrench".into(), prefab_hash: 1862001680i32, @@ -13278,7 +12812,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1399098998i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemMarineBodyArmor".into(), prefab_hash: 1399098998i32, @@ -13309,7 +12842,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1073631646i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemMarineHelmet".into(), prefab_hash: 1073631646i32, @@ -13336,7 +12868,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1327248310i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMilk".into(), prefab_hash: 1327248310i32, @@ -13361,7 +12892,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1650383245i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemMiningBackPack".into(), prefab_hash: -1650383245i32, @@ -13407,7 +12937,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -676435305i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemMiningBelt".into(), prefab_hash: -676435305i32, @@ -13444,7 +12973,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1470787934i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMiningBeltMKII".into(), prefab_hash: 1470787934i32, @@ -13603,7 +13131,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 15829510i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMiningCharge".into(), prefab_hash: 15829510i32, @@ -13627,7 +13154,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1055173191i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMiningDrill".into(), prefab_hash: 1055173191i32, @@ -13687,7 +13213,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1663349918i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMiningDrillHeavy".into(), prefab_hash: -1663349918i32, @@ -13747,7 +13272,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1258187304i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemMiningDrillPneumatic".into(), prefab_hash: 1258187304i32, @@ -13776,7 +13300,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1467558064i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMkIIToolbelt".into(), prefab_hash: 1467558064i32, @@ -13911,7 +13434,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1864982322i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMuffin".into(), prefab_hash: -1864982322i32, @@ -13936,7 +13458,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2044798572i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMushroom".into(), prefab_hash: 2044798572i32, @@ -13961,7 +13482,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 982514123i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemNVG".into(), prefab_hash: 982514123i32, @@ -14014,7 +13534,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1406385572i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemNickelIngot".into(), prefab_hash: -1406385572i32, @@ -14038,7 +13557,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1830218956i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemNickelOre".into(), prefab_hash: 1830218956i32, @@ -14063,7 +13581,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1499471529i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemNitrice".into(), prefab_hash: -1499471529i32, @@ -14088,7 +13605,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1805394113i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemOxite".into(), prefab_hash: -1805394113i32, @@ -14113,7 +13629,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 238631271i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPassiveVent".into(), prefab_hash: 238631271i32, @@ -14138,7 +13653,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1397583760i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPassiveVentInsulated".into(), prefab_hash: -1397583760i32, @@ -14162,7 +13676,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2042955224i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPeaceLily".into(), prefab_hash: 2042955224i32, @@ -14187,7 +13700,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -913649823i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPickaxe".into(), prefab_hash: -913649823i32, @@ -14212,7 +13724,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1118069417i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPillHeal".into(), prefab_hash: 1118069417i32, @@ -14237,7 +13748,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 418958601i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPillStun".into(), prefab_hash: 418958601i32, @@ -14262,7 +13772,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -767597887i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeAnalyizer".into(), prefab_hash: -767597887i32, @@ -14287,7 +13796,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -38898376i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeCowl".into(), prefab_hash: -38898376i32, @@ -14312,7 +13820,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1532448832i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeDigitalValve".into(), prefab_hash: -1532448832i32, @@ -14337,7 +13844,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1134459463i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeGasMixer".into(), prefab_hash: -1134459463i32, @@ -14362,7 +13868,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1751627006i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeHeater".into(), prefab_hash: -1751627006i32, @@ -14387,7 +13892,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1366030599i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeIgniter".into(), prefab_hash: 1366030599i32, @@ -14411,7 +13915,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 391769637i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeLabel".into(), prefab_hash: 391769637i32, @@ -14436,7 +13939,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -906521320i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeLiquidRadiator".into(), prefab_hash: -906521320i32, @@ -14461,7 +13963,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1207939683i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeMeter".into(), prefab_hash: 1207939683i32, @@ -14486,7 +13987,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1796655088i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeRadiator".into(), prefab_hash: -1796655088i32, @@ -14511,7 +14011,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 799323450i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeValve".into(), prefab_hash: 799323450i32, @@ -14536,7 +14035,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1766301997i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeVolumePump".into(), prefab_hash: -1766301997i32, @@ -14561,7 +14059,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1108244510i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlainCake".into(), prefab_hash: -1108244510i32, @@ -14585,7 +14082,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1159179557i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantEndothermic_Creative".into(), prefab_hash: -1159179557i32, @@ -14609,7 +14105,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 851290561i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantEndothermic_Genepool1".into(), prefab_hash: 851290561i32, @@ -14634,7 +14129,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1414203269i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantEndothermic_Genepool2".into(), prefab_hash: -1414203269i32, @@ -14659,7 +14153,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 173023800i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemPlantSampler".into(), prefab_hash: 173023800i32, @@ -14718,7 +14211,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -532672323i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantSwitchGrass".into(), prefab_hash: -532672323i32, @@ -14742,7 +14234,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1208890208i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantThermogenic_Creative".into(), prefab_hash: -1208890208i32, @@ -14766,7 +14257,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -177792789i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantThermogenic_Genepool1".into(), prefab_hash: -177792789i32, @@ -14791,7 +14281,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1819167057i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantThermogenic_Genepool2".into(), prefab_hash: 1819167057i32, @@ -14816,7 +14305,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 662053345i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlasticSheets".into(), prefab_hash: 662053345i32, @@ -14840,7 +14328,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1929046963i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPotato".into(), prefab_hash: 1929046963i32, @@ -14865,7 +14352,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2111886401i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPotatoBaked".into(), prefab_hash: -2111886401i32, @@ -14889,7 +14375,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 839924019i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPowerConnector".into(), prefab_hash: 839924019i32, @@ -14914,7 +14399,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1277828144i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPumpkin".into(), prefab_hash: 1277828144i32, @@ -14939,7 +14423,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 62768076i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPumpkinPie".into(), prefab_hash: 62768076i32, @@ -14963,7 +14446,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1277979876i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPumpkinSoup".into(), prefab_hash: 1277979876i32, @@ -14988,7 +14470,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1616308158i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIce".into(), prefab_hash: -1616308158i32, @@ -15013,7 +14494,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1251009404i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceCarbonDioxide".into(), prefab_hash: -1251009404i32, @@ -15038,7 +14518,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 944530361i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceHydrogen".into(), prefab_hash: 944530361i32, @@ -15063,7 +14542,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1715945725i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidCarbonDioxide".into(), prefab_hash: -1715945725i32, @@ -15088,7 +14566,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1044933269i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidHydrogen".into(), prefab_hash: -1044933269i32, @@ -15113,7 +14590,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1674576569i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidNitrogen".into(), prefab_hash: 1674576569i32, @@ -15138,7 +14614,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1428477399i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidNitrous".into(), prefab_hash: 1428477399i32, @@ -15163,7 +14638,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 541621589i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidOxygen".into(), prefab_hash: 541621589i32, @@ -15188,7 +14662,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1748926678i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidPollutant".into(), prefab_hash: -1748926678i32, @@ -15213,7 +14686,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1306628937i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidVolatiles".into(), prefab_hash: -1306628937i32, @@ -15238,7 +14710,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1708395413i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceNitrogen".into(), prefab_hash: -1708395413i32, @@ -15263,7 +14734,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 386754635i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceNitrous".into(), prefab_hash: 386754635i32, @@ -15288,7 +14758,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1150448260i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceOxygen".into(), prefab_hash: -1150448260i32, @@ -15313,7 +14782,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1755356i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIcePollutant".into(), prefab_hash: -1755356i32, @@ -15338,7 +14806,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2073202179i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIcePollutedWater".into(), prefab_hash: -2073202179i32, @@ -15363,7 +14830,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -874791066i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceSteam".into(), prefab_hash: -874791066i32, @@ -15388,7 +14854,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -633723719i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceVolatiles".into(), prefab_hash: -633723719i32, @@ -15413,7 +14878,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 495305053i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRTG".into(), prefab_hash: 495305053i32, @@ -15438,7 +14902,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1817645803i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRTGSurvival".into(), prefab_hash: 1817645803i32, @@ -15463,7 +14926,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1641500434i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemReagentMix".into(), prefab_hash: -1641500434i32, @@ -15488,7 +14950,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 678483886i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemRemoteDetonator".into(), prefab_hash: 678483886i32, @@ -15541,7 +15002,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1773192190i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemReusableFireExtinguisher".into(), prefab_hash: -1773192190i32, @@ -15572,7 +15032,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 658916791i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRice".into(), prefab_hash: 658916791i32, @@ -15597,7 +15056,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 871811564i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRoadFlare".into(), prefab_hash: 871811564i32, @@ -15622,7 +15080,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2109945337i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHead".into(), prefab_hash: 2109945337i32, @@ -15647,7 +15104,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1530764483i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHeadDurable".into(), prefab_hash: 1530764483i32, @@ -15671,7 +15127,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 653461728i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHeadHighSpeedIce".into(), prefab_hash: 653461728i32, @@ -15695,7 +15150,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1440678625i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHeadHighSpeedMineral".into(), prefab_hash: 1440678625i32, @@ -15719,7 +15173,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -380904592i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHeadIce".into(), prefab_hash: -380904592i32, @@ -15743,7 +15196,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -684020753i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHeadLongTerm".into(), prefab_hash: -684020753i32, @@ -15767,7 +15219,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1083675581i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHeadMineral".into(), prefab_hash: 1083675581i32, @@ -15791,7 +15242,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1198702771i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketScanningHead".into(), prefab_hash: -1198702771i32, @@ -15815,7 +15265,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1661270830i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemScanner".into(), prefab_hash: 1661270830i32, @@ -15840,7 +15289,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 687940869i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemScrewdriver".into(), prefab_hash: 687940869i32, @@ -15865,7 +15313,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1981101032i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSecurityCamera".into(), prefab_hash: -1981101032i32, @@ -15890,7 +15337,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1176140051i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemSensorLenses".into(), prefab_hash: -1176140051i32, @@ -15954,7 +15400,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1154200014i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSensorProcessingUnitCelestialScanner".into(), prefab_hash: -1154200014i32, @@ -15978,7 +15423,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1730464583i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSensorProcessingUnitMesonScanner".into(), prefab_hash: -1730464583i32, @@ -16003,7 +15447,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1219128491i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSensorProcessingUnitOreScanner".into(), prefab_hash: -1219128491i32, @@ -16028,7 +15471,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -290196476i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSiliconIngot".into(), prefab_hash: -290196476i32, @@ -16052,7 +15494,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1103972403i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSiliconOre".into(), prefab_hash: 1103972403i32, @@ -16077,7 +15518,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -929742000i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSilverIngot".into(), prefab_hash: -929742000i32, @@ -16101,7 +15541,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -916518678i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSilverOre".into(), prefab_hash: -916518678i32, @@ -16126,7 +15565,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -82508479i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSolderIngot".into(), prefab_hash: -82508479i32, @@ -16150,7 +15588,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -365253871i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSolidFuel".into(), prefab_hash: -365253871i32, @@ -16174,7 +15611,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1883441704i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSoundCartridgeBass".into(), prefab_hash: -1883441704i32, @@ -16198,7 +15634,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1901500508i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSoundCartridgeDrums".into(), prefab_hash: -1901500508i32, @@ -16222,7 +15657,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1174735962i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSoundCartridgeLeads".into(), prefab_hash: -1174735962i32, @@ -16246,7 +15680,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1971419310i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSoundCartridgeSynth".into(), prefab_hash: -1971419310i32, @@ -16270,7 +15703,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1387403148i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSoyOil".into(), prefab_hash: 1387403148i32, @@ -16294,7 +15726,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1924673028i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSoybean".into(), prefab_hash: 1924673028i32, @@ -16319,7 +15750,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1737666461i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSpaceCleaner".into(), prefab_hash: -1737666461i32, @@ -16344,7 +15774,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 714830451i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemSpaceHelmet".into(), prefab_hash: 714830451i32, @@ -16409,7 +15838,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 675686937i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSpaceIce".into(), prefab_hash: 675686937i32, @@ -16433,7 +15861,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2131916219i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSpaceOre".into(), prefab_hash: 2131916219i32, @@ -16458,7 +15885,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1260618380i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemSpacepack".into(), prefab_hash: -1260618380i32, @@ -16584,7 +16010,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -688107795i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanBlack".into(), prefab_hash: -688107795i32, @@ -16609,7 +16034,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -498464883i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanBlue".into(), prefab_hash: -498464883i32, @@ -16634,7 +16058,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 845176977i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanBrown".into(), prefab_hash: 845176977i32, @@ -16659,7 +16082,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1880941852i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanGreen".into(), prefab_hash: -1880941852i32, @@ -16684,7 +16106,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1645266981i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanGrey".into(), prefab_hash: -1645266981i32, @@ -16709,7 +16130,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1918456047i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanKhaki".into(), prefab_hash: 1918456047i32, @@ -16734,7 +16154,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -158007629i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanOrange".into(), prefab_hash: -158007629i32, @@ -16759,7 +16178,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1344257263i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanPink".into(), prefab_hash: 1344257263i32, @@ -16784,7 +16202,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 30686509i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanPurple".into(), prefab_hash: 30686509i32, @@ -16809,7 +16226,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1514393921i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanRed".into(), prefab_hash: 1514393921i32, @@ -16834,7 +16250,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 498481505i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanWhite".into(), prefab_hash: 498481505i32, @@ -16859,7 +16274,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 995468116i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanYellow".into(), prefab_hash: 995468116i32, @@ -16884,7 +16298,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1289723966i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemSprayGun".into(), prefab_hash: 1289723966i32, @@ -16912,7 +16325,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1448105779i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSteelFrames".into(), prefab_hash: -1448105779i32, @@ -16937,7 +16349,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -654790771i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSteelIngot".into(), prefab_hash: -654790771i32, @@ -16962,7 +16373,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 38555961i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSteelSheets".into(), prefab_hash: 38555961i32, @@ -16987,7 +16397,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2038663432i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemStelliteGlassSheets".into(), prefab_hash: -2038663432i32, @@ -17011,7 +16420,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1897868623i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemStelliteIngot".into(), prefab_hash: -1897868623i32, @@ -17035,7 +16443,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2111910840i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSugar".into(), prefab_hash: 2111910840i32, @@ -17059,7 +16466,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1335056202i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSugarCane".into(), prefab_hash: -1335056202i32, @@ -17083,7 +16489,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1274308304i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSuitModCryogenicUpgrade".into(), prefab_hash: -1274308304i32, @@ -17108,7 +16513,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -229808600i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemTablet".into(), prefab_hash: -229808600i32, @@ -17171,7 +16575,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 111280987i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemTerrainManipulator".into(), prefab_hash: 111280987i32, @@ -17239,7 +16642,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -998592080i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemTomato".into(), prefab_hash: -998592080i32, @@ -17264,7 +16666,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 688734890i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemTomatoSoup".into(), prefab_hash: 688734890i32, @@ -17289,7 +16690,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -355127880i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemToolBelt".into(), prefab_hash: -355127880i32, @@ -17324,7 +16724,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -800947386i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemTropicalPlant".into(), prefab_hash: -800947386i32, @@ -17349,7 +16748,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1516581844i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemUraniumOre".into(), prefab_hash: -1516581844i32, @@ -17374,7 +16772,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1253102035i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemVolatiles".into(), prefab_hash: 1253102035i32, @@ -17399,7 +16796,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1567752627i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWallCooler".into(), prefab_hash: -1567752627i32, @@ -17424,7 +16820,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1880134612i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWallHeater".into(), prefab_hash: 1880134612i32, @@ -17449,7 +16844,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1108423476i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWallLight".into(), prefab_hash: 1108423476i32, @@ -17474,7 +16868,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 156348098i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWaspaloyIngot".into(), prefab_hash: 156348098i32, @@ -17498,7 +16891,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 107741229i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWaterBottle".into(), prefab_hash: 107741229i32, @@ -17523,7 +16915,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 309693520i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWaterPipeDigitalValve".into(), prefab_hash: 309693520i32, @@ -17547,7 +16938,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -90898877i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWaterPipeMeter".into(), prefab_hash: -90898877i32, @@ -17571,7 +16961,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1721846327i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWaterWallCooler".into(), prefab_hash: -1721846327i32, @@ -17595,7 +16984,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -598730959i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemWearLamp".into(), prefab_hash: -598730959i32, @@ -17648,7 +17036,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2066892079i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemWeldingTorch".into(), prefab_hash: -2066892079i32, @@ -17681,7 +17068,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1057658015i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWheat".into(), prefab_hash: -1057658015i32, @@ -17706,7 +17092,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1535854074i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWireCutters".into(), prefab_hash: 1535854074i32, @@ -17731,7 +17116,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -504717121i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemWirelessBatteryCellExtraLarge".into(), prefab_hash: -504717121i32, @@ -17778,7 +17162,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1826023284i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageAirConditioner1".into(), prefab_hash: -1826023284i32, @@ -17802,7 +17185,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 169888054i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageAirConditioner2".into(), prefab_hash: 169888054i32, @@ -17826,7 +17208,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -310178617i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageHydroponicsTray1".into(), prefab_hash: -310178617i32, @@ -17850,7 +17231,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -997763i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageLargeExtendableRadiator01".into(), prefab_hash: -997763i32, @@ -17874,7 +17254,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 391453348i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureRTG1".into(), prefab_hash: 391453348i32, @@ -17898,7 +17277,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -834664349i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation001".into(), prefab_hash: -834664349i32, @@ -17922,7 +17300,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1464424921i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation002".into(), prefab_hash: 1464424921i32, @@ -17946,7 +17323,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 542009679i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation003".into(), prefab_hash: 542009679i32, @@ -17970,7 +17346,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1104478996i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation004".into(), prefab_hash: -1104478996i32, @@ -17994,7 +17369,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -919745414i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation005".into(), prefab_hash: -919745414i32, @@ -18018,7 +17392,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1344576960i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation006".into(), prefab_hash: 1344576960i32, @@ -18042,7 +17415,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 656649558i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation007".into(), prefab_hash: 656649558i32, @@ -18066,7 +17438,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1214467897i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation008".into(), prefab_hash: -1214467897i32, @@ -18090,7 +17461,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1662394403i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageTurbineGenerator1".into(), prefab_hash: -1662394403i32, @@ -18114,7 +17484,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 98602599i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageTurbineGenerator2".into(), prefab_hash: 98602599i32, @@ -18138,7 +17507,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1927790321i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageTurbineGenerator3".into(), prefab_hash: 1927790321i32, @@ -18162,7 +17530,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1682930158i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageWallCooler1".into(), prefab_hash: -1682930158i32, @@ -18186,7 +17553,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 45733800i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageWallCooler2".into(), prefab_hash: 45733800i32, @@ -18210,7 +17576,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1886261558i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWrench".into(), prefab_hash: -1886261558i32, @@ -18235,7 +17600,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1932952652i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "KitSDBSilo".into(), prefab_hash: 1932952652i32, @@ -18260,7 +17624,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 231903234i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "KitStructureCombustionCentrifuge".into(), prefab_hash: 231903234i32, @@ -18284,7 +17647,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1427415566i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "KitchenTableShort".into(), prefab_hash: -1427415566i32, @@ -18300,7 +17662,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -78099334i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "KitchenTableSimpleShort".into(), prefab_hash: -78099334i32, @@ -18316,7 +17677,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1068629349i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "KitchenTableSimpleTall".into(), prefab_hash: -1068629349i32, @@ -18332,7 +17692,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1386237782i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "KitchenTableTall".into(), prefab_hash: -1386237782i32, @@ -18348,7 +17707,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1605130615i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "Lander".into(), prefab_hash: 1605130615i32, @@ -18383,7 +17741,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1295222317i32, StructureLogicTemplate { - templateType: "StructureLogic".into(), prefab: PrefabInfo { prefab_name: "Landingpad_2x2CenterPiece01".into(), prefab_hash: -1295222317i32, @@ -18409,7 +17766,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 912453390i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_BlankPiece".into(), prefab_hash: 912453390i32, @@ -18425,7 +17781,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1070143159i32, StructureLogicTemplate { - templateType: "StructureLogic".into(), prefab: PrefabInfo { prefab_name: "Landingpad_CenterPiece01".into(), prefab_hash: 1070143159i32, @@ -18459,7 +17814,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1101296153i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_CrossPiece".into(), prefab_hash: 1101296153i32, @@ -18476,7 +17830,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2066405918i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "Landingpad_DataConnectionPiece".into(), prefab_hash: -2066405918i32, @@ -18563,7 +17916,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 977899131i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_DiagonalPiece01".into(), prefab_hash: 977899131i32, @@ -18580,7 +17932,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 817945707i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "Landingpad_GasConnectorInwardPiece".into(), prefab_hash: 817945707i32, @@ -18656,7 +18007,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1100218307i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "Landingpad_GasConnectorOutwardPiece".into(), prefab_hash: -1100218307i32, @@ -18733,7 +18083,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 170818567i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_GasCylinderTankPiece".into(), prefab_hash: 170818567i32, @@ -18750,7 +18099,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1216167727i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "Landingpad_LiquidConnectorInwardPiece".into(), prefab_hash: -1216167727i32, @@ -18826,7 +18174,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1788929869i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "Landingpad_LiquidConnectorOutwardPiece".into(), prefab_hash: -1788929869i32, @@ -18903,7 +18250,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -976273247i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_StraightPiece01".into(), prefab_hash: -976273247i32, @@ -18920,7 +18266,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1872345847i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_TaxiPieceCorner".into(), prefab_hash: -1872345847i32, @@ -18936,7 +18281,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 146051619i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_TaxiPieceHold".into(), prefab_hash: 146051619i32, @@ -18952,7 +18296,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1477941080i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_TaxiPieceStraight".into(), prefab_hash: -1477941080i32, @@ -18968,7 +18311,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1514298582i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "Landingpad_ThreshholdPiece".into(), prefab_hash: -1514298582i32, @@ -19022,7 +18364,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1531272458i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "LogicStepSequencer8".into(), prefab_hash: 1531272458i32, @@ -19102,7 +18443,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -99064335i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "Meteorite".into(), prefab_hash: -99064335i32, @@ -19126,7 +18466,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1667675295i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MonsterEgg".into(), prefab_hash: -1667675295i32, @@ -19150,7 +18489,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -337075633i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MotherboardComms".into(), prefab_hash: -337075633i32, @@ -19175,7 +18513,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 502555944i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MotherboardLogic".into(), prefab_hash: 502555944i32, @@ -19200,7 +18537,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -127121474i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MotherboardMissionControl".into(), prefab_hash: -127121474i32, @@ -19224,7 +18560,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -161107071i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MotherboardProgrammableChip".into(), prefab_hash: -161107071i32, @@ -19249,7 +18584,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -806986392i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MotherboardRockets".into(), prefab_hash: -806986392i32, @@ -19273,7 +18607,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1908268220i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MotherboardSorter".into(), prefab_hash: -1908268220i32, @@ -19298,7 +18631,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1930442922i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MothershipCore".into(), prefab_hash: -1930442922i32, @@ -19323,7 +18655,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 155856647i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "NpcChick".into(), prefab_hash: 155856647i32, @@ -19356,7 +18687,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 399074198i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "NpcChicken".into(), prefab_hash: 399074198i32, @@ -19389,7 +18719,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 248893646i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "PassiveSpeaker".into(), prefab_hash: 248893646i32, @@ -19439,7 +18768,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 443947415i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "PipeBenderMod".into(), prefab_hash: 443947415i32, @@ -19464,7 +18792,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1958705204i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "PortableComposter".into(), prefab_hash: -1958705204i32, @@ -19497,7 +18824,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2043318949i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "PortableSolarPanel".into(), prefab_hash: 2043318949i32, @@ -19549,7 +18875,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 399661231i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "RailingElegant01".into(), prefab_hash: 399661231i32, @@ -19565,7 +18890,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1898247915i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "RailingElegant02".into(), prefab_hash: -1898247915i32, @@ -19581,7 +18905,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2072792175i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "RailingIndustrial02".into(), prefab_hash: -2072792175i32, @@ -19597,7 +18920,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 980054869i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ReagentColorBlue".into(), prefab_hash: 980054869i32, @@ -19621,7 +18943,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 120807542i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ReagentColorGreen".into(), prefab_hash: 120807542i32, @@ -19645,7 +18966,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -400696159i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ReagentColorOrange".into(), prefab_hash: -400696159i32, @@ -19671,7 +18991,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1998377961i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ReagentColorRed".into(), prefab_hash: 1998377961i32, @@ -19695,7 +19014,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 635208006i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ReagentColorYellow".into(), prefab_hash: 635208006i32, @@ -19721,7 +19039,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -788672929i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "RespawnPoint".into(), prefab_hash: -788672929i32, @@ -19738,7 +19055,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -491247370i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "RespawnPointWallMounted".into(), prefab_hash: -491247370i32, @@ -19754,7 +19070,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 434786784i32, ItemCircuitHolderTemplate { - templateType: "ItemCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "Robot".into(), prefab_hash: 434786784i32, @@ -19905,7 +19220,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 350726273i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "RoverCargo".into(), prefab_hash: 350726273i32, @@ -20112,7 +19426,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2049946335i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "Rover_MkI".into(), prefab_hash: -2049946335i32, @@ -20271,7 +19584,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 861674123i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Rover_MkI_build_states".into(), prefab_hash: 861674123i32, @@ -20287,7 +19599,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -256607540i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SMGMagazine".into(), prefab_hash: -256607540i32, @@ -20311,7 +19622,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1139887531i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Cocoa".into(), prefab_hash: 1139887531i32, @@ -20335,7 +19645,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1290755415i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Corn".into(), prefab_hash: -1290755415i32, @@ -20360,7 +19669,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1990600883i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Fern".into(), prefab_hash: -1990600883i32, @@ -20385,7 +19693,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 311593418i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Mushroom".into(), prefab_hash: 311593418i32, @@ -20410,7 +19717,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1005571172i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Potato".into(), prefab_hash: 1005571172i32, @@ -20435,7 +19741,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1423199840i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Pumpkin".into(), prefab_hash: 1423199840i32, @@ -20460,7 +19765,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1691151239i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Rice".into(), prefab_hash: -1691151239i32, @@ -20485,7 +19789,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1783004244i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Soybean".into(), prefab_hash: 1783004244i32, @@ -20510,7 +19813,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1884103228i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_SugarCane".into(), prefab_hash: -1884103228i32, @@ -20534,7 +19836,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 488360169i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Switchgrass".into(), prefab_hash: 488360169i32, @@ -20558,7 +19859,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1922066841i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Tomato".into(), prefab_hash: -1922066841i32, @@ -20583,7 +19883,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -654756733i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Wheet".into(), prefab_hash: -654756733i32, @@ -20608,7 +19907,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1991297271i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "SpaceShuttle".into(), prefab_hash: -1991297271i32, @@ -20640,7 +19938,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1527229051i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StopWatch".into(), prefab_hash: -1527229051i32, @@ -20692,7 +19989,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1298920475i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAccessBridge".into(), prefab_hash: 1298920475i32, @@ -20745,7 +20041,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1129453144i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureActiveVent".into(), prefab_hash: -1129453144i32, @@ -20821,7 +20116,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 446212963i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAdvancedComposter".into(), prefab_hash: 446212963i32, @@ -20900,7 +20194,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 545937711i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAdvancedFurnace".into(), prefab_hash: 545937711i32, @@ -21007,7 +20300,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -463037670i32, StructureLogicDeviceConsumerMemoryTemplate { - templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureAdvancedPackagingMachine".into(), prefab_hash: -463037670i32, @@ -21528,7 +20820,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2087593337i32, StructureCircuitHolderTemplate { - templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureAirConditioner".into(), prefab_hash: -2087593337i32, @@ -21660,7 +20951,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2105052344i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAirlock".into(), prefab_hash: -2105052344i32, @@ -21719,7 +21009,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1736080881i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAirlockGate".into(), prefab_hash: 1736080881i32, @@ -21777,7 +21066,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1811979158i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAngledBench".into(), prefab_hash: 1811979158i32, @@ -21833,7 +21121,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -247344692i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureArcFurnace".into(), prefab_hash: -247344692i32, @@ -21919,7 +21206,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1999523701i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAreaPowerControl".into(), prefab_hash: 1999523701i32, @@ -22012,7 +21298,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1032513487i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAreaPowerControlReversed".into(), prefab_hash: -1032513487i32, @@ -22105,7 +21390,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 7274344i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAutoMinerSmall".into(), prefab_hash: 7274344i32, @@ -22174,7 +21458,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 336213101i32, StructureLogicDeviceConsumerMemoryTemplate { - templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureAutolathe".into(), prefab_hash: 336213101i32, @@ -23091,7 +22374,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1672404896i32, StructureLogicDeviceConsumerMemoryTemplate { - templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureAutomatedOven".into(), prefab_hash: -1672404896i32, @@ -23674,7 +22956,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2099900163i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBackLiquidPressureRegulator".into(), prefab_hash: 2099900163i32, @@ -23731,7 +23012,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1149857558i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBackPressureRegulator".into(), prefab_hash: -1149857558i32, @@ -23787,7 +23067,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1613497288i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBasketHoop".into(), prefab_hash: -1613497288i32, @@ -23839,7 +23118,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -400115994i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBattery".into(), prefab_hash: -400115994i32, @@ -23904,7 +23182,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1945930022i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBatteryCharger".into(), prefab_hash: 1945930022i32, @@ -24019,7 +23296,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -761772413i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBatteryChargerSmall".into(), prefab_hash: -761772413i32, @@ -24099,7 +23375,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1388288459i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBatteryLarge".into(), prefab_hash: -1388288459i32, @@ -24164,7 +23439,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1125305264i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBatteryMedium".into(), prefab_hash: -1125305264i32, @@ -24229,7 +23503,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2123455080i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBatterySmall".into(), prefab_hash: -2123455080i32, @@ -24294,7 +23567,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -188177083i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBeacon".into(), prefab_hash: -188177083i32, @@ -24346,7 +23618,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2042448192i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBench".into(), prefab_hash: -2042448192i32, @@ -24425,7 +23696,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 406745009i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBench1".into(), prefab_hash: 406745009i32, @@ -24503,7 +23773,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2127086069i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBench2".into(), prefab_hash: -2127086069i32, @@ -24581,7 +23850,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -164622691i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBench3".into(), prefab_hash: -164622691i32, @@ -24659,7 +23927,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1750375230i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBench4".into(), prefab_hash: 1750375230i32, @@ -24737,7 +24004,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 337416191i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBlastDoor".into(), prefab_hash: 337416191i32, @@ -24796,7 +24062,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 697908419i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBlockBed".into(), prefab_hash: 697908419i32, @@ -24861,7 +24126,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 378084505i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureBlocker".into(), prefab_hash: 378084505i32, @@ -24877,7 +24141,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1036015121i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCableAnalysizer".into(), prefab_hash: 1036015121i32, @@ -24927,7 +24190,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -889269388i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner".into(), prefab_hash: -889269388i32, @@ -24944,7 +24206,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 980469101i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner3".into(), prefab_hash: 980469101i32, @@ -24961,7 +24222,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 318437449i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner3Burnt".into(), prefab_hash: 318437449i32, @@ -24977,7 +24237,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2393826i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner3HBurnt".into(), prefab_hash: 2393826i32, @@ -24993,7 +24252,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1542172466i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner4".into(), prefab_hash: -1542172466i32, @@ -25009,7 +24267,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 268421361i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner4Burnt".into(), prefab_hash: 268421361i32, @@ -25025,7 +24282,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -981223316i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner4HBurnt".into(), prefab_hash: -981223316i32, @@ -25041,7 +24297,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -177220914i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCornerBurnt".into(), prefab_hash: -177220914i32, @@ -25057,7 +24312,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -39359015i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCornerH".into(), prefab_hash: -39359015i32, @@ -25073,7 +24327,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1843379322i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCornerH3".into(), prefab_hash: -1843379322i32, @@ -25089,7 +24342,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 205837861i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCornerH4".into(), prefab_hash: 205837861i32, @@ -25105,7 +24357,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1931412811i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCornerHBurnt".into(), prefab_hash: 1931412811i32, @@ -25121,7 +24372,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 281380789i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCableFuse100k".into(), prefab_hash: 281380789i32, @@ -25163,7 +24413,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1103727120i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCableFuse1k".into(), prefab_hash: -1103727120i32, @@ -25205,7 +24454,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -349716617i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCableFuse50k".into(), prefab_hash: -349716617i32, @@ -25247,7 +24495,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -631590668i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCableFuse5k".into(), prefab_hash: -631590668i32, @@ -25289,7 +24536,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -175342021i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction".into(), prefab_hash: -175342021i32, @@ -25306,7 +24552,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1112047202i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction4".into(), prefab_hash: 1112047202i32, @@ -25323,7 +24568,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1756896811i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction4Burnt".into(), prefab_hash: -1756896811i32, @@ -25339,7 +24583,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -115809132i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction4HBurnt".into(), prefab_hash: -115809132i32, @@ -25355,7 +24598,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 894390004i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction5".into(), prefab_hash: 894390004i32, @@ -25371,7 +24613,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1545286256i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction5Burnt".into(), prefab_hash: 1545286256i32, @@ -25387,7 +24628,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1404690610i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction6".into(), prefab_hash: -1404690610i32, @@ -25404,7 +24644,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -628145954i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction6Burnt".into(), prefab_hash: -628145954i32, @@ -25420,7 +24659,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1854404029i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction6HBurnt".into(), prefab_hash: 1854404029i32, @@ -25436,7 +24674,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1620686196i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionBurnt".into(), prefab_hash: -1620686196i32, @@ -25452,7 +24689,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 469451637i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionH".into(), prefab_hash: 469451637i32, @@ -25468,7 +24704,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -742234680i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionH4".into(), prefab_hash: -742234680i32, @@ -25484,7 +24719,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1530571426i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionH5".into(), prefab_hash: -1530571426i32, @@ -25500,7 +24734,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1701593300i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionH5Burnt".into(), prefab_hash: 1701593300i32, @@ -25516,7 +24749,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1036780772i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionH6".into(), prefab_hash: 1036780772i32, @@ -25532,7 +24764,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -341365649i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionHBurnt".into(), prefab_hash: -341365649i32, @@ -25548,7 +24779,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 605357050i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableStraight".into(), prefab_hash: 605357050i32, @@ -25565,7 +24795,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1196981113i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableStraightBurnt".into(), prefab_hash: -1196981113i32, @@ -25581,7 +24810,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -146200530i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableStraightH".into(), prefab_hash: -146200530i32, @@ -25597,7 +24825,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2085762089i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableStraightHBurnt".into(), prefab_hash: 2085762089i32, @@ -25613,7 +24840,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -342072665i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCamera".into(), prefab_hash: -342072665i32, @@ -25667,7 +24893,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1385712131i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCapsuleTankGas".into(), prefab_hash: -1385712131i32, @@ -25742,7 +24967,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1415396263i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCapsuleTankLiquid".into(), prefab_hash: 1415396263i32, @@ -25817,7 +25041,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1151864003i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCargoStorageMedium".into(), prefab_hash: 1151864003i32, @@ -26024,7 +25247,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1493672123i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCargoStorageSmall".into(), prefab_hash: -1493672123i32, @@ -26546,7 +25768,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 690945935i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCentrifuge".into(), prefab_hash: 690945935i32, @@ -26615,7 +25836,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1167659360i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChair".into(), prefab_hash: 1167659360i32, @@ -26672,7 +25892,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1944858936i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairBacklessDouble".into(), prefab_hash: 1944858936i32, @@ -26728,7 +25947,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1672275150i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairBacklessSingle".into(), prefab_hash: 1672275150i32, @@ -26784,7 +26002,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -367720198i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairBoothCornerLeft".into(), prefab_hash: -367720198i32, @@ -26840,7 +26057,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1640720378i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairBoothMiddle".into(), prefab_hash: 1640720378i32, @@ -26896,7 +26112,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1152812099i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairRectangleDouble".into(), prefab_hash: -1152812099i32, @@ -26952,7 +26167,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1425428917i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairRectangleSingle".into(), prefab_hash: -1425428917i32, @@ -27008,7 +26222,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1245724402i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairThickDouble".into(), prefab_hash: -1245724402i32, @@ -27064,7 +26277,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1510009608i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairThickSingle".into(), prefab_hash: -1510009608i32, @@ -27120,7 +26332,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -850484480i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteBin".into(), prefab_hash: -850484480i32, @@ -27188,7 +26399,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1360330136i32, StructureSlotsTemplate { - templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteCorner".into(), prefab_hash: 1360330136i32, @@ -27208,7 +26418,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -810874728i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteDigitalFlipFlopSplitterLeft".into(), prefab_hash: -810874728i32, @@ -27285,7 +26494,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 163728359i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteDigitalFlipFlopSplitterRight".into(), prefab_hash: 163728359i32, @@ -27362,7 +26570,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 648608238i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteDigitalValveLeft".into(), prefab_hash: 648608238i32, @@ -27432,7 +26639,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1337091041i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteDigitalValveRight".into(), prefab_hash: -1337091041i32, @@ -27502,7 +26708,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1446854725i32, StructureSlotsTemplate { - templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteFlipFlopSplitter".into(), prefab_hash: -1446854725i32, @@ -27521,7 +26726,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1469588766i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteInlet".into(), prefab_hash: -1469588766i32, @@ -27586,7 +26790,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -611232514i32, StructureSlotsTemplate { - templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteJunction".into(), prefab_hash: -611232514i32, @@ -27606,7 +26809,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1022714809i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteOutlet".into(), prefab_hash: -1022714809i32, @@ -27672,7 +26874,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 225377225i32, StructureSlotsTemplate { - templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteOverflow".into(), prefab_hash: 225377225i32, @@ -27692,7 +26893,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 168307007i32, StructureSlotsTemplate { - templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteStraight".into(), prefab_hash: 168307007i32, @@ -27712,7 +26912,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1918892177i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteUmbilicalFemale".into(), prefab_hash: -1918892177i32, @@ -27773,7 +26972,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -659093969i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteUmbilicalFemaleSide".into(), prefab_hash: -659093969i32, @@ -27834,7 +27032,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -958884053i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteUmbilicalMale".into(), prefab_hash: -958884053i32, @@ -27908,7 +27105,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 434875271i32, StructureSlotsTemplate { - templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteValve".into(), prefab_hash: 434875271i32, @@ -27928,7 +27124,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -607241919i32, StructureSlotsTemplate { - templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteWindow".into(), prefab_hash: -607241919i32, @@ -27948,7 +27143,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -128473777i32, StructureCircuitHolderTemplate { - templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureCircuitHousing".into(), prefab_hash: -128473777i32, @@ -28019,7 +27213,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1238905683i32, StructureCircuitHolderTemplate { - templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureCombustionCentrifuge".into(), prefab_hash: 1238905683i32, @@ -28153,7 +27346,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1513030150i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngled".into(), prefab_hash: -1513030150i32, @@ -28169,7 +27361,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -69685069i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCorner".into(), prefab_hash: -69685069i32, @@ -28185,7 +27376,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1841871763i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCornerInner".into(), prefab_hash: -1841871763i32, @@ -28201,7 +27391,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1417912632i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCornerInnerLong".into(), prefab_hash: -1417912632i32, @@ -28217,7 +27406,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 947705066i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCornerInnerLongL".into(), prefab_hash: 947705066i32, @@ -28233,7 +27421,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1032590967i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCornerInnerLongR".into(), prefab_hash: -1032590967i32, @@ -28249,7 +27436,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 850558385i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCornerLong".into(), prefab_hash: 850558385i32, @@ -28265,7 +27451,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -348918222i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCornerLongR".into(), prefab_hash: -348918222i32, @@ -28281,7 +27466,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -387546514i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledLong".into(), prefab_hash: -387546514i32, @@ -28297,7 +27481,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 212919006i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingCylindrical".into(), prefab_hash: 212919006i32, @@ -28313,7 +27496,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1077151132i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingCylindricalPanel".into(), prefab_hash: 1077151132i32, @@ -28329,7 +27511,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1997436771i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingPanel".into(), prefab_hash: 1997436771i32, @@ -28345,7 +27526,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -259357734i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingRounded".into(), prefab_hash: -259357734i32, @@ -28361,7 +27541,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1951525046i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingRoundedCorner".into(), prefab_hash: 1951525046i32, @@ -28377,7 +27556,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 110184667i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingRoundedCornerInner".into(), prefab_hash: 110184667i32, @@ -28393,7 +27571,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 139107321i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingSpherical".into(), prefab_hash: 139107321i32, @@ -28409,7 +27586,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 534213209i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingSphericalCap".into(), prefab_hash: 534213209i32, @@ -28425,7 +27601,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1751355139i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingSphericalCorner".into(), prefab_hash: 1751355139i32, @@ -28441,7 +27616,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -793837322i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeDoor".into(), prefab_hash: -793837322i32, @@ -28500,7 +27674,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 324868581i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeFloorGrating".into(), prefab_hash: 324868581i32, @@ -28517,7 +27690,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -895027741i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeFloorGrating2".into(), prefab_hash: -895027741i32, @@ -28533,7 +27705,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1113471627i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeFloorGrating3".into(), prefab_hash: -1113471627i32, @@ -28549,7 +27720,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 600133846i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeFloorGrating4".into(), prefab_hash: 600133846i32, @@ -28565,7 +27735,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2109695912i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeFloorGratingOpen".into(), prefab_hash: 2109695912i32, @@ -28581,7 +27750,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 882307910i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeFloorGratingOpenRotated".into(), prefab_hash: 882307910i32, @@ -28597,7 +27765,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1237302061i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeWall".into(), prefab_hash: 1237302061i32, @@ -28614,7 +27781,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 718343384i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeWall02".into(), prefab_hash: 718343384i32, @@ -28630,7 +27796,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1574321230i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeWall03".into(), prefab_hash: 1574321230i32, @@ -28646,7 +27811,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1011701267i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeWall04".into(), prefab_hash: -1011701267i32, @@ -28662,7 +27826,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2060571986i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeWindow".into(), prefab_hash: -2060571986i32, @@ -28679,7 +27842,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -688284639i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeWindowIron".into(), prefab_hash: -688284639i32, @@ -28695,7 +27857,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -626563514i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureComputer".into(), prefab_hash: -626563514i32, @@ -28760,7 +27921,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1420719315i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCondensationChamber".into(), prefab_hash: 1420719315i32, @@ -28842,7 +28002,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -965741795i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCondensationValve".into(), prefab_hash: -965741795i32, @@ -28894,7 +28053,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 235638270i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureConsole".into(), prefab_hash: 235638270i32, @@ -28957,7 +28115,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -722284333i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureConsoleDual".into(), prefab_hash: -722284333i32, @@ -29021,7 +28178,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -53151617i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureConsoleLED1x2".into(), prefab_hash: -53151617i32, @@ -29080,7 +28236,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1949054743i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureConsoleLED1x3".into(), prefab_hash: -1949054743i32, @@ -29139,7 +28294,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -815193061i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureConsoleLED5".into(), prefab_hash: -815193061i32, @@ -29198,7 +28352,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 801677497i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureConsoleMonitor".into(), prefab_hash: 801677497i32, @@ -29261,7 +28414,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1961153710i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureControlChair".into(), prefab_hash: -1961153710i32, @@ -29362,7 +28514,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1968255729i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCornerLocker".into(), prefab_hash: -1968255729i32, @@ -29466,7 +28617,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -733500083i32, StructureSlotsTemplate { - templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureCrateMount".into(), prefab_hash: -733500083i32, @@ -29485,7 +28635,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1938254586i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCryoTube".into(), prefab_hash: 1938254586i32, @@ -29562,7 +28711,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1443059329i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCryoTubeHorizontal".into(), prefab_hash: 1443059329i32, @@ -29629,7 +28777,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1381321828i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCryoTubeVertical".into(), prefab_hash: -1381321828i32, @@ -29696,7 +28843,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1076425094i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDaylightSensor".into(), prefab_hash: 1076425094i32, @@ -29757,7 +28903,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 265720906i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDeepMiner".into(), prefab_hash: 265720906i32, @@ -29819,7 +28964,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1280984102i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDigitalValve".into(), prefab_hash: -1280984102i32, @@ -29875,7 +29019,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1944485013i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDiode".into(), prefab_hash: 1944485013i32, @@ -29926,7 +29069,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 576516101i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDiodeSlide".into(), prefab_hash: 576516101i32, @@ -29977,7 +29119,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -137465079i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDockPortSide".into(), prefab_hash: -137465079i32, @@ -30030,7 +29171,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1968371847i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDrinkingFountain".into(), prefab_hash: 1968371847i32, @@ -30081,7 +29221,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1668992663i32, StructureCircuitHolderTemplate { - templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureElectrolyzer".into(), prefab_hash: -1668992663i32, @@ -30210,7 +29349,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1307165496i32, StructureLogicDeviceConsumerMemoryTemplate { - templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureElectronicsPrinter".into(), prefab_hash: 1307165496i32, @@ -31698,7 +30836,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -827912235i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureElevatorLevelFront".into(), prefab_hash: -827912235i32, @@ -31756,7 +30893,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2060648791i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureElevatorLevelIndustrial".into(), prefab_hash: 2060648791i32, @@ -31811,7 +30947,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 826144419i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureElevatorShaft".into(), prefab_hash: 826144419i32, @@ -31867,7 +31002,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1998354978i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureElevatorShaftIndustrial".into(), prefab_hash: 1998354978i32, @@ -31917,7 +31051,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1668452680i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureEmergencyButton".into(), prefab_hash: 1668452680i32, @@ -31971,7 +31104,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2035781224i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureEngineMountTypeA1".into(), prefab_hash: 2035781224i32, @@ -31987,7 +31119,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1429782576i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureEvaporationChamber".into(), prefab_hash: -1429782576i32, @@ -32069,7 +31200,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 195298587i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureExpansionValve".into(), prefab_hash: 195298587i32, @@ -32121,7 +31251,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1622567418i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFairingTypeA1".into(), prefab_hash: 1622567418i32, @@ -32137,7 +31266,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -104908736i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFairingTypeA2".into(), prefab_hash: -104908736i32, @@ -32153,7 +31281,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1900541738i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFairingTypeA3".into(), prefab_hash: -1900541738i32, @@ -32169,7 +31296,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -348054045i32, StructureCircuitHolderTemplate { - templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureFiltration".into(), prefab_hash: -348054045i32, @@ -32299,7 +31425,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1529819532i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFlagSmall".into(), prefab_hash: -1529819532i32, @@ -32315,7 +31440,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1535893860i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureFlashingLight".into(), prefab_hash: -1535893860i32, @@ -32366,7 +31490,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 839890807i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureFlatBench".into(), prefab_hash: 839890807i32, @@ -32422,7 +31545,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1048813293i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFloorDrain".into(), prefab_hash: 1048813293i32, @@ -32442,7 +31564,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1432512808i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFrame".into(), prefab_hash: 1432512808i32, @@ -32459,7 +31580,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2112390778i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFrameCorner".into(), prefab_hash: -2112390778i32, @@ -32476,7 +31596,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 271315669i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFrameCornerCut".into(), prefab_hash: 271315669i32, @@ -32492,7 +31611,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1240951678i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFrameIron".into(), prefab_hash: -1240951678i32, @@ -32508,7 +31626,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -302420053i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFrameSide".into(), prefab_hash: -302420053i32, @@ -32525,7 +31642,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 958476921i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureFridgeBig".into(), prefab_hash: 958476921i32, @@ -32740,7 +31856,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 751887598i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureFridgeSmall".into(), prefab_hash: 751887598i32, @@ -32839,7 +31954,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1947944864i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureFurnace".into(), prefab_hash: 1947944864i32, @@ -32939,7 +32053,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1033024712i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFuselageTypeA1".into(), prefab_hash: 1033024712i32, @@ -32955,7 +32068,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1533287054i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFuselageTypeA2".into(), prefab_hash: -1533287054i32, @@ -32971,7 +32083,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1308115015i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFuselageTypeA4".into(), prefab_hash: 1308115015i32, @@ -32987,7 +32098,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 147395155i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFuselageTypeC5".into(), prefab_hash: 147395155i32, @@ -33003,7 +32113,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1165997963i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasGenerator".into(), prefab_hash: 1165997963i32, @@ -33081,7 +32190,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2104106366i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasMixer".into(), prefab_hash: 2104106366i32, @@ -33139,7 +32247,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1252983604i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasSensor".into(), prefab_hash: -1252983604i32, @@ -33206,7 +32313,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1632165346i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasTankStorage".into(), prefab_hash: 1632165346i32, @@ -33284,7 +32390,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1680477930i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasUmbilicalFemale".into(), prefab_hash: -1680477930i32, @@ -33333,7 +32438,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -648683847i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasUmbilicalFemaleSide".into(), prefab_hash: -648683847i32, @@ -33382,7 +32486,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1814939203i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasUmbilicalMale".into(), prefab_hash: -1814939203i32, @@ -33445,7 +32548,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -324331872i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGlassDoor".into(), prefab_hash: -324331872i32, @@ -33503,7 +32605,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -214232602i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGovernedGasEngine".into(), prefab_hash: -214232602i32, @@ -33577,7 +32678,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -619745681i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGroundBasedTelescope".into(), prefab_hash: -619745681i32, @@ -33644,7 +32744,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1758710260i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGrowLight".into(), prefab_hash: -1758710260i32, @@ -33696,7 +32795,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 958056199i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHarvie".into(), prefab_hash: 958056199i32, @@ -33797,7 +32895,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 944685608i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHeatExchangeLiquidtoGas".into(), prefab_hash: 944685608i32, @@ -33851,7 +32948,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 21266291i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHeatExchangerGastoGas".into(), prefab_hash: 21266291i32, @@ -33904,7 +33000,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -613784254i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHeatExchangerLiquidtoLiquid".into(), prefab_hash: -613784254i32, @@ -33958,7 +33053,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1070427573i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHorizontalAutoMiner".into(), prefab_hash: 1070427573i32, @@ -34032,7 +33126,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1888248335i32, StructureLogicDeviceConsumerMemoryTemplate { - templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureHydraulicPipeBender".into(), prefab_hash: -1888248335i32, @@ -35281,7 +34374,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1441767298i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHydroponicsStation".into(), prefab_hash: 1441767298i32, @@ -35467,7 +34559,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1464854517i32, StructureSlotsTemplate { - templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureHydroponicsTray".into(), prefab_hash: 1464854517i32, @@ -35493,7 +34584,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1841632400i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHydroponicsTrayData".into(), prefab_hash: -1841632400i32, @@ -35597,7 +34687,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 443849486i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureIceCrusher".into(), prefab_hash: 443849486i32, @@ -35665,7 +34754,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1005491513i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureIgniter".into(), prefab_hash: 1005491513i32, @@ -35714,7 +34802,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1693382705i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInLineTankGas1x1".into(), prefab_hash: -1693382705i32, @@ -35734,7 +34821,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 35149429i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInLineTankGas1x2".into(), prefab_hash: 35149429i32, @@ -35754,7 +34840,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 543645499i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInLineTankLiquid1x1".into(), prefab_hash: 543645499i32, @@ -35774,7 +34859,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1183969663i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInLineTankLiquid1x2".into(), prefab_hash: -1183969663i32, @@ -35794,7 +34878,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1818267386i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedInLineTankGas1x1".into(), prefab_hash: 1818267386i32, @@ -35813,7 +34896,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -177610944i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedInLineTankGas1x2".into(), prefab_hash: -177610944i32, @@ -35832,7 +34914,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -813426145i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedInLineTankLiquid1x1".into(), prefab_hash: -813426145i32, @@ -35851,7 +34932,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1452100517i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedInLineTankLiquid1x2".into(), prefab_hash: 1452100517i32, @@ -35870,7 +34950,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1967711059i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeCorner".into(), prefab_hash: -1967711059i32, @@ -35890,7 +34969,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -92778058i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeCrossJunction".into(), prefab_hash: -92778058i32, @@ -35910,7 +34988,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1328210035i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeCrossJunction3".into(), prefab_hash: 1328210035i32, @@ -35930,7 +35007,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -783387184i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeCrossJunction4".into(), prefab_hash: -783387184i32, @@ -35950,7 +35026,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1505147578i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeCrossJunction5".into(), prefab_hash: -1505147578i32, @@ -35970,7 +35045,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1061164284i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeCrossJunction6".into(), prefab_hash: 1061164284i32, @@ -35990,7 +35064,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1713710802i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidCorner".into(), prefab_hash: 1713710802i32, @@ -36009,7 +35082,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1926651727i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidCrossJunction".into(), prefab_hash: 1926651727i32, @@ -36028,7 +35100,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 363303270i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidCrossJunction4".into(), prefab_hash: 363303270i32, @@ -36047,7 +35118,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1654694384i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidCrossJunction5".into(), prefab_hash: 1654694384i32, @@ -36066,7 +35136,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -72748982i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidCrossJunction6".into(), prefab_hash: -72748982i32, @@ -36085,7 +35154,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 295678685i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidStraight".into(), prefab_hash: 295678685i32, @@ -36104,7 +35172,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -532384855i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidTJunction".into(), prefab_hash: -532384855i32, @@ -36123,7 +35190,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2134172356i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeStraight".into(), prefab_hash: 2134172356i32, @@ -36143,7 +35209,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2076086215i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeTJunction".into(), prefab_hash: -2076086215i32, @@ -36163,7 +35228,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -31273349i32, StructureSlotsTemplate { - templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedTankConnector".into(), prefab_hash: -31273349i32, @@ -36185,7 +35249,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1602030414i32, StructureSlotsTemplate { - templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedTankConnectorLiquid".into(), prefab_hash: -1602030414i32, @@ -36207,7 +35270,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2096421875i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureInteriorDoorGlass".into(), prefab_hash: -2096421875i32, @@ -36259,7 +35321,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 847461335i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureInteriorDoorPadded".into(), prefab_hash: 847461335i32, @@ -36311,7 +35372,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1981698201i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureInteriorDoorPaddedThin".into(), prefab_hash: 1981698201i32, @@ -36363,7 +35423,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1182923101i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureInteriorDoorTriangle".into(), prefab_hash: -1182923101i32, @@ -36415,7 +35474,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -828056979i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureKlaxon".into(), prefab_hash: -828056979i32, @@ -36495,7 +35553,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -415420281i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureLadder".into(), prefab_hash: -415420281i32, @@ -36511,7 +35568,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1541734993i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureLadderEnd".into(), prefab_hash: 1541734993i32, @@ -36527,7 +35583,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1230658883i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLargeDirectHeatExchangeGastoGas".into(), prefab_hash: -1230658883i32, @@ -36578,7 +35633,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1412338038i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLargeDirectHeatExchangeGastoLiquid".into(), prefab_hash: 1412338038i32, @@ -36629,7 +35683,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 792686502i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLargeDirectHeatExchangeLiquidtoLiquid".into(), prefab_hash: 792686502i32, @@ -36680,7 +35733,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -566775170i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLargeExtendableRadiator".into(), prefab_hash: -566775170i32, @@ -36739,7 +35791,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1351081801i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLargeHangerDoor".into(), prefab_hash: -1351081801i32, @@ -36797,7 +35848,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1913391845i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLargeSatelliteDish".into(), prefab_hash: 1913391845i32, @@ -36863,7 +35913,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -558953231i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureLaunchMount".into(), prefab_hash: -558953231i32, @@ -36880,7 +35929,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 797794350i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLightLong".into(), prefab_hash: 797794350i32, @@ -36930,7 +35978,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1847265835i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLightLongAngled".into(), prefab_hash: 1847265835i32, @@ -36980,7 +36027,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 555215790i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLightLongWide".into(), prefab_hash: 555215790i32, @@ -37030,7 +36076,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1514476632i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLightRound".into(), prefab_hash: 1514476632i32, @@ -37080,7 +36125,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1592905386i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLightRoundAngled".into(), prefab_hash: 1592905386i32, @@ -37130,7 +36174,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1436121888i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLightRoundSmall".into(), prefab_hash: 1436121888i32, @@ -37180,7 +36223,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1687692899i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidDrain".into(), prefab_hash: 1687692899i32, @@ -37236,7 +36278,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2113838091i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidPipeAnalyzer".into(), prefab_hash: -2113838091i32, @@ -37308,7 +36349,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -287495560i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidPipeHeater".into(), prefab_hash: -287495560i32, @@ -37361,7 +36401,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -782453061i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidPipeOneWayValve".into(), prefab_hash: -782453061i32, @@ -37412,7 +36451,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2072805863i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidPipeRadiator".into(), prefab_hash: 2072805863i32, @@ -37458,7 +36496,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 482248766i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidPressureRegulator".into(), prefab_hash: 482248766i32, @@ -37515,7 +36552,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1098900430i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidTankBig".into(), prefab_hash: 1098900430i32, @@ -37590,7 +36626,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1430440215i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidTankBigInsulated".into(), prefab_hash: -1430440215i32, @@ -37665,7 +36700,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1988118157i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidTankSmall".into(), prefab_hash: 1988118157i32, @@ -37740,7 +36774,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 608607718i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidTankSmallInsulated".into(), prefab_hash: 608607718i32, @@ -37815,7 +36848,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1691898022i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidTankStorage".into(), prefab_hash: 1691898022i32, @@ -37893,7 +36925,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1051805505i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidTurboVolumePump".into(), prefab_hash: -1051805505i32, @@ -37956,7 +36987,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1734723642i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidUmbilicalFemale".into(), prefab_hash: 1734723642i32, @@ -38005,7 +37035,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1220870319i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidUmbilicalFemaleSide".into(), prefab_hash: 1220870319i32, @@ -38054,7 +37083,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1798420047i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidUmbilicalMale".into(), prefab_hash: -1798420047i32, @@ -38117,7 +37145,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1849974453i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidValve".into(), prefab_hash: 1849974453i32, @@ -38168,7 +37195,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -454028979i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidVolumePump".into(), prefab_hash: -454028979i32, @@ -38224,7 +37250,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -647164662i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLockerSmall".into(), prefab_hash: -647164662i32, @@ -38310,7 +37335,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 264413729i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicBatchReader".into(), prefab_hash: 264413729i32, @@ -38363,7 +37387,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 436888930i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicBatchSlotReader".into(), prefab_hash: 436888930i32, @@ -38416,7 +37439,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1415443359i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicBatchWriter".into(), prefab_hash: 1415443359i32, @@ -38469,7 +37491,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 491845673i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicButton".into(), prefab_hash: 491845673i32, @@ -38519,7 +37540,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1489728908i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicCompare".into(), prefab_hash: -1489728908i32, @@ -38581,7 +37601,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 554524804i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicDial".into(), prefab_hash: 554524804i32, @@ -38630,7 +37649,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1942143074i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicGate".into(), prefab_hash: 1942143074i32, @@ -38694,7 +37712,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2077593121i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicHashGen".into(), prefab_hash: 2077593121i32, @@ -38743,7 +37760,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1657691323i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicMath".into(), prefab_hash: 1657691323i32, @@ -38808,7 +37824,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1160020195i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicMathUnary".into(), prefab_hash: -1160020195i32, @@ -38874,7 +37889,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -851746783i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicMemory".into(), prefab_hash: -851746783i32, @@ -38923,7 +37937,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 929022276i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicMinMax".into(), prefab_hash: 929022276i32, @@ -38982,7 +37995,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2096189278i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicMirror".into(), prefab_hash: 2096189278i32, @@ -39026,7 +38038,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -345383640i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicReader".into(), prefab_hash: -345383640i32, @@ -39079,7 +38090,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -124308857i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicReagentReader".into(), prefab_hash: -124308857i32, @@ -39132,7 +38142,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 876108549i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicRocketDownlink".into(), prefab_hash: 876108549i32, @@ -39181,7 +38190,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 546002924i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicRocketUplink".into(), prefab_hash: 546002924i32, @@ -39232,7 +38240,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1822736084i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicSelect".into(), prefab_hash: 1822736084i32, @@ -39294,7 +38301,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -767867194i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicSlotReader".into(), prefab_hash: -767867194i32, @@ -39347,7 +38353,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 873418029i32, StructureLogicDeviceMemoryTemplate { - templateType: "StructureLogicDeviceMemory".into(), prefab: PrefabInfo { prefab_name: "StructureLogicSorter".into(), prefab_hash: 873418029i32, @@ -39724,7 +38729,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1220484876i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicSwitch".into(), prefab_hash: 1220484876i32, @@ -39774,7 +38778,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 321604921i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicSwitch2".into(), prefab_hash: 321604921i32, @@ -39824,7 +38827,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -693235651i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicTransmitter".into(), prefab_hash: -693235651i32, @@ -39874,7 +38876,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1326019434i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicWriter".into(), prefab_hash: -1326019434i32, @@ -39927,7 +38928,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1321250424i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicWriterSwitch".into(), prefab_hash: -1321250424i32, @@ -39981,7 +38981,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1808154199i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureManualHatch".into(), prefab_hash: -1808154199i32, @@ -40034,7 +39033,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1918215845i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumConvectionRadiator".into(), prefab_hash: -1918215845i32, @@ -40088,7 +39086,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1169014183i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumConvectionRadiatorLiquid".into(), prefab_hash: -1169014183i32, @@ -40142,7 +39139,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -566348148i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumHangerDoor".into(), prefab_hash: -566348148i32, @@ -40200,7 +39196,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -975966237i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumRadiator".into(), prefab_hash: -975966237i32, @@ -40254,7 +39249,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1141760613i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumRadiatorLiquid".into(), prefab_hash: -1141760613i32, @@ -40308,7 +39302,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1093860567i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumRocketGasFuelTank".into(), prefab_hash: -1093860567i32, @@ -40383,7 +39376,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1143639539i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumRocketLiquidFuelTank".into(), prefab_hash: 1143639539i32, @@ -40458,7 +39450,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1713470563i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMotionSensor".into(), prefab_hash: -1713470563i32, @@ -40508,7 +39499,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1898243702i32, StructureCircuitHolderTemplate { - templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureNitrolyzer".into(), prefab_hash: 1898243702i32, @@ -40665,7 +39655,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 322782515i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureOccupancySensor".into(), prefab_hash: 322782515i32, @@ -40715,7 +39704,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1794932560i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureOverheadShortCornerLocker".into(), prefab_hash: -1794932560i32, @@ -40784,7 +39772,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1468249454i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureOverheadShortLocker".into(), prefab_hash: 1468249454i32, @@ -40923,7 +39910,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2066977095i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePassiveLargeRadiatorGas".into(), prefab_hash: 2066977095i32, @@ -40977,7 +39963,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 24786172i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePassiveLargeRadiatorLiquid".into(), prefab_hash: 24786172i32, @@ -41031,7 +40016,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1812364811i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePassiveLiquidDrain".into(), prefab_hash: 1812364811i32, @@ -41074,7 +40058,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 335498166i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePassiveVent".into(), prefab_hash: 335498166i32, @@ -41094,7 +40077,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1363077139i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePassiveVentInsulated".into(), prefab_hash: 1363077139i32, @@ -41113,7 +40095,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1674187440i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePassthroughHeatExchangerGasToGas".into(), prefab_hash: -1674187440i32, @@ -41166,7 +40147,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1928991265i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePassthroughHeatExchangerGasToLiquid".into(), prefab_hash: 1928991265i32, @@ -41220,7 +40200,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1472829583i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePassthroughHeatExchangerLiquidToLiquid".into(), prefab_hash: -1472829583i32, @@ -41274,7 +40253,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1434523206i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickLandscapeLarge".into(), prefab_hash: -1434523206i32, @@ -41290,7 +40268,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2041566697i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickLandscapeSmall".into(), prefab_hash: -2041566697i32, @@ -41306,7 +40283,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 950004659i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickMountLandscapeLarge".into(), prefab_hash: 950004659i32, @@ -41322,7 +40298,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 347154462i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickMountLandscapeSmall".into(), prefab_hash: 347154462i32, @@ -41338,7 +40313,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1459641358i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickMountPortraitLarge".into(), prefab_hash: -1459641358i32, @@ -41354,7 +40328,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2066653089i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickMountPortraitSmall".into(), prefab_hash: -2066653089i32, @@ -41370,7 +40343,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1686949570i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickPortraitLarge".into(), prefab_hash: -1686949570i32, @@ -41386,7 +40358,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1218579821i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickPortraitSmall".into(), prefab_hash: -1218579821i32, @@ -41402,7 +40373,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1418288625i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinLandscapeLarge".into(), prefab_hash: -1418288625i32, @@ -41418,7 +40388,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2024250974i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinLandscapeSmall".into(), prefab_hash: -2024250974i32, @@ -41434,7 +40403,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1146760430i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinMountLandscapeLarge".into(), prefab_hash: -1146760430i32, @@ -41450,7 +40418,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1752493889i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinMountLandscapeSmall".into(), prefab_hash: -1752493889i32, @@ -41466,7 +40433,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1094895077i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinMountPortraitLarge".into(), prefab_hash: 1094895077i32, @@ -41482,7 +40448,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1835796040i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinMountPortraitSmall".into(), prefab_hash: 1835796040i32, @@ -41498,7 +40463,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1212777087i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinPortraitLarge".into(), prefab_hash: 1212777087i32, @@ -41514,7 +40478,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1684488658i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinPortraitSmall".into(), prefab_hash: 1684488658i32, @@ -41530,7 +40493,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 435685051i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeAnalysizer".into(), prefab_hash: 435685051i32, @@ -41603,7 +40565,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1785673561i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCorner".into(), prefab_hash: -1785673561i32, @@ -41623,7 +40584,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 465816159i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCowl".into(), prefab_hash: 465816159i32, @@ -41642,7 +40602,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1405295588i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCrossJunction".into(), prefab_hash: -1405295588i32, @@ -41662,7 +40621,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2038427184i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCrossJunction3".into(), prefab_hash: 2038427184i32, @@ -41682,7 +40640,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -417629293i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCrossJunction4".into(), prefab_hash: -417629293i32, @@ -41702,7 +40659,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1877193979i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCrossJunction5".into(), prefab_hash: -1877193979i32, @@ -41722,7 +40678,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 152378047i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCrossJunction6".into(), prefab_hash: 152378047i32, @@ -41742,7 +40697,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -419758574i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeHeater".into(), prefab_hash: -419758574i32, @@ -41795,7 +40749,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1286441942i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeIgniter".into(), prefab_hash: 1286441942i32, @@ -41845,7 +40798,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2068497073i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeInsulatedLiquidCrossJunction".into(), prefab_hash: -2068497073i32, @@ -41864,7 +40816,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -999721119i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLabel".into(), prefab_hash: -999721119i32, @@ -41907,7 +40858,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1856720921i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidCorner".into(), prefab_hash: -1856720921i32, @@ -41927,7 +40877,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1848735691i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidCrossJunction".into(), prefab_hash: 1848735691i32, @@ -41947,7 +40896,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1628087508i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidCrossJunction3".into(), prefab_hash: 1628087508i32, @@ -41967,7 +40915,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -9555593i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidCrossJunction4".into(), prefab_hash: -9555593i32, @@ -41987,7 +40934,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2006384159i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidCrossJunction5".into(), prefab_hash: -2006384159i32, @@ -42007,7 +40953,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 291524699i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidCrossJunction6".into(), prefab_hash: 291524699i32, @@ -42027,7 +40972,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 667597982i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidStraight".into(), prefab_hash: 667597982i32, @@ -42047,7 +40991,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 262616717i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidTJunction".into(), prefab_hash: 262616717i32, @@ -42067,7 +41010,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1798362329i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeMeter".into(), prefab_hash: -1798362329i32, @@ -42110,7 +41052,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1580412404i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeOneWayValve".into(), prefab_hash: 1580412404i32, @@ -42161,7 +41102,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1305252611i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeOrgan".into(), prefab_hash: 1305252611i32, @@ -42181,7 +41121,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1696603168i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeRadiator".into(), prefab_hash: 1696603168i32, @@ -42227,7 +41166,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -399883995i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeRadiatorFlat".into(), prefab_hash: -399883995i32, @@ -42273,7 +41211,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2024754523i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeRadiatorFlatLiquid".into(), prefab_hash: 2024754523i32, @@ -42319,7 +41256,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 73728932i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeStraight".into(), prefab_hash: 73728932i32, @@ -42339,7 +41275,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -913817472i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeTJunction".into(), prefab_hash: -913817472i32, @@ -42359,7 +41294,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1125641329i32, StructureSlotsTemplate { - templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructurePlanter".into(), prefab_hash: -1125641329i32, @@ -42385,7 +41319,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1559586682i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePlatformLadderOpen".into(), prefab_hash: 1559586682i32, @@ -42401,7 +41334,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 989835703i32, StructureSlotsTemplate { - templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructurePlinth".into(), prefab_hash: 989835703i32, @@ -42420,7 +41352,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -899013427i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePortablesConnector".into(), prefab_hash: -899013427i32, @@ -42485,7 +41416,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -782951720i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerConnector".into(), prefab_hash: -782951720i32, @@ -42548,7 +41478,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -65087121i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerTransmitter".into(), prefab_hash: -65087121i32, @@ -42611,7 +41540,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -327468845i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerTransmitterOmni".into(), prefab_hash: -327468845i32, @@ -42662,7 +41590,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1195820278i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerTransmitterReceiver".into(), prefab_hash: 1195820278i32, @@ -42725,7 +41652,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 101488029i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerUmbilicalFemale".into(), prefab_hash: 101488029i32, @@ -42772,7 +41698,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1922506192i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerUmbilicalFemaleSide".into(), prefab_hash: 1922506192i32, @@ -42819,7 +41744,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1529453938i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerUmbilicalMale".into(), prefab_hash: 1529453938i32, @@ -42879,7 +41803,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 938836756i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePoweredVent".into(), prefab_hash: 938836756i32, @@ -42939,7 +41862,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -785498334i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePoweredVentLarge".into(), prefab_hash: -785498334i32, @@ -42999,7 +41921,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 23052817i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressurantValve".into(), prefab_hash: 23052817i32, @@ -43056,7 +41977,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -624011170i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressureFedGasEngine".into(), prefab_hash: -624011170i32, @@ -43131,7 +42051,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 379750958i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressureFedLiquidEngine".into(), prefab_hash: 379750958i32, @@ -43208,7 +42127,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2008706143i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressurePlateLarge".into(), prefab_hash: -2008706143i32, @@ -43257,7 +42175,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1269458680i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressurePlateMedium".into(), prefab_hash: 1269458680i32, @@ -43306,7 +42223,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1536471028i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressurePlateSmall".into(), prefab_hash: -1536471028i32, @@ -43355,7 +42271,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 209854039i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressureRegulator".into(), prefab_hash: 209854039i32, @@ -43411,7 +42326,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 568800213i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureProximitySensor".into(), prefab_hash: 568800213i32, @@ -43461,7 +42375,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2031440019i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePumpedLiquidEngine".into(), prefab_hash: -2031440019i32, @@ -43538,7 +42451,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -737232128i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePurgeValve".into(), prefab_hash: -737232128i32, @@ -43594,7 +42506,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1756913871i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureRailing".into(), prefab_hash: -1756913871i32, @@ -43610,7 +42521,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1633947337i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRecycler".into(), prefab_hash: -1633947337i32, @@ -43694,7 +42604,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1577831321i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRefrigeratedVendingMachine".into(), prefab_hash: -1577831321i32, @@ -43929,7 +42838,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2027713511i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureReinforcedCompositeWindow".into(), prefab_hash: 2027713511i32, @@ -43946,7 +42854,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -816454272i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureReinforcedCompositeWindowSteel".into(), prefab_hash: -816454272i32, @@ -43963,7 +42870,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1939061729i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureReinforcedWallPaddedWindow".into(), prefab_hash: 1939061729i32, @@ -43980,7 +42886,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 158502707i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureReinforcedWallPaddedWindowThin".into(), prefab_hash: 158502707i32, @@ -43997,7 +42902,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 808389066i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRocketAvionics".into(), prefab_hash: 808389066i32, @@ -44098,7 +43002,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 997453927i32, StructureLogicDeviceMemoryTemplate { - templateType: "StructureLogicDeviceMemory".into(), prefab: PrefabInfo { prefab_name: "StructureRocketCelestialTracker".into(), prefab_hash: 997453927i32, @@ -44219,7 +43122,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 150135861i32, StructureCircuitHolderTemplate { - templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureRocketCircuitHousing".into(), prefab_hash: 150135861i32, @@ -44289,7 +43191,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 178472613i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRocketEngineTiny".into(), prefab_hash: 178472613i32, @@ -44365,7 +43266,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1781051034i32, StructureLogicDeviceConsumerMemoryTemplate { - templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureRocketManufactory".into(), prefab_hash: 1781051034i32, @@ -45069,7 +43969,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2087223687i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRocketMiner".into(), prefab_hash: -2087223687i32, @@ -45136,7 +44035,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2014252591i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRocketScanner".into(), prefab_hash: 2014252591i32, @@ -45193,7 +44091,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -654619479i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureRocketTower".into(), prefab_hash: -654619479i32, @@ -45209,7 +44106,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 518925193i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRocketTransformerSmall".into(), prefab_hash: 518925193i32, @@ -45265,7 +44161,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 806513938i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureRover".into(), prefab_hash: 806513938i32, @@ -45281,7 +44176,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1875856925i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSDBHopper".into(), prefab_hash: -1875856925i32, @@ -45335,7 +44229,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 467225612i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSDBHopperAdvanced".into(), prefab_hash: 467225612i32, @@ -45391,7 +44284,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1155865682i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSDBSilo".into(), prefab_hash: 1155865682i32, @@ -45466,7 +44358,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 439026183i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSatelliteDish".into(), prefab_hash: 439026183i32, @@ -45532,7 +44423,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -641491515i32, StructureLogicDeviceConsumerMemoryTemplate { - templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureSecurityPrinter".into(), prefab_hash: -641491515i32, @@ -46167,7 +45057,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1172114950i32, StructureSlotsTemplate { - templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureShelf".into(), prefab_hash: 1172114950i32, @@ -46191,7 +45080,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 182006674i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureShelfMedium".into(), prefab_hash: 182006674i32, @@ -46372,7 +45260,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1330754486i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureShortCornerLocker".into(), prefab_hash: 1330754486i32, @@ -46441,7 +45328,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -554553467i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureShortLocker".into(), prefab_hash: -554553467i32, @@ -46580,7 +45466,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -775128944i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureShower".into(), prefab_hash: -775128944i32, @@ -46632,7 +45517,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1081797501i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureShowerPowered".into(), prefab_hash: -1081797501i32, @@ -46687,7 +45571,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 879058460i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSign1x1".into(), prefab_hash: 879058460i32, @@ -46729,7 +45612,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 908320837i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSign2x1".into(), prefab_hash: 908320837i32, @@ -46771,7 +45653,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -492611i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSingleBed".into(), prefab_hash: -492611i32, @@ -46827,7 +45708,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1467449329i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSleeper".into(), prefab_hash: -1467449329i32, @@ -46902,7 +45782,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1213495833i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSleeperLeft".into(), prefab_hash: 1213495833i32, @@ -46975,7 +45854,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1812330717i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSleeperRight".into(), prefab_hash: -1812330717i32, @@ -47048,7 +45926,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1300059018i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSleeperVertical".into(), prefab_hash: -1300059018i32, @@ -47121,7 +45998,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1382098999i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSleeperVerticalDroid".into(), prefab_hash: 1382098999i32, @@ -47179,7 +46055,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1310303582i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSmallDirectHeatExchangeGastoGas".into(), prefab_hash: 1310303582i32, @@ -47230,7 +46105,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1825212016i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSmallDirectHeatExchangeLiquidtoGas".into(), prefab_hash: 1825212016i32, @@ -47281,7 +46155,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -507770416i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSmallDirectHeatExchangeLiquidtoLiquid".into(), prefab_hash: -507770416i32, @@ -47332,7 +46205,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2138748650i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSmallSatelliteDish".into(), prefab_hash: -2138748650i32, @@ -47398,7 +46270,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1633000411i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableBacklessDouble".into(), prefab_hash: -1633000411i32, @@ -47414,7 +46285,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1897221677i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableBacklessSingle".into(), prefab_hash: -1897221677i32, @@ -47430,7 +46300,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1260651529i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableDinnerSingle".into(), prefab_hash: 1260651529i32, @@ -47446,7 +46315,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -660451023i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableRectangleDouble".into(), prefab_hash: -660451023i32, @@ -47462,7 +46330,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -924678969i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableRectangleSingle".into(), prefab_hash: -924678969i32, @@ -47478,7 +46345,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -19246131i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableThickDouble".into(), prefab_hash: -19246131i32, @@ -47494,7 +46360,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -291862981i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableThickSingle".into(), prefab_hash: -291862981i32, @@ -47510,7 +46375,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2045627372i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanel".into(), prefab_hash: -2045627372i32, @@ -47562,7 +46426,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1554349863i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanel45".into(), prefab_hash: -1554349863i32, @@ -47614,7 +46477,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 930865127i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanel45Reinforced".into(), prefab_hash: 930865127i32, @@ -47665,7 +46527,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -539224550i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanelDual".into(), prefab_hash: -539224550i32, @@ -47718,7 +46579,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1545574413i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanelDualReinforced".into(), prefab_hash: -1545574413i32, @@ -47770,7 +46630,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1968102968i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanelFlat".into(), prefab_hash: 1968102968i32, @@ -47822,7 +46681,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1697196770i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanelFlatReinforced".into(), prefab_hash: 1697196770i32, @@ -47873,7 +46731,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -934345724i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanelReinforced".into(), prefab_hash: -934345724i32, @@ -47924,7 +46781,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 813146305i32, StructureLogicDeviceConsumerTemplate { - templateType: "StructureLogicDeviceConsumer".into(), prefab: PrefabInfo { prefab_name: "StructureSolidFuelGenerator".into(), prefab_hash: 813146305i32, @@ -48005,7 +46861,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1009150565i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSorter".into(), prefab_hash: -1009150565i32, @@ -48115,7 +46970,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2020231820i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureStacker".into(), prefab_hash: -2020231820i32, @@ -48213,7 +47067,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1585641623i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureStackerReverse".into(), prefab_hash: 1585641623i32, @@ -48311,7 +47164,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1405018945i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairs4x2".into(), prefab_hash: 1405018945i32, @@ -48327,7 +47179,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 155214029i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairs4x2RailL".into(), prefab_hash: 155214029i32, @@ -48343,7 +47194,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -212902482i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairs4x2RailR".into(), prefab_hash: -212902482i32, @@ -48359,7 +47209,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1088008720i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairs4x2Rails".into(), prefab_hash: -1088008720i32, @@ -48375,7 +47224,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 505924160i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellBackLeft".into(), prefab_hash: 505924160i32, @@ -48391,7 +47239,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -862048392i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellBackPassthrough".into(), prefab_hash: -862048392i32, @@ -48407,7 +47254,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2128896573i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellBackRight".into(), prefab_hash: -2128896573i32, @@ -48423,7 +47269,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -37454456i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellFrontLeft".into(), prefab_hash: -37454456i32, @@ -48439,7 +47284,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1625452928i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellFrontPassthrough".into(), prefab_hash: -1625452928i32, @@ -48455,7 +47299,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 340210934i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellFrontRight".into(), prefab_hash: 340210934i32, @@ -48471,7 +47314,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2049879875i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellNoDoors".into(), prefab_hash: 2049879875i32, @@ -48487,7 +47329,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -260316435i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureStirlingEngine".into(), prefab_hash: -260316435i32, @@ -48576,7 +47417,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -793623899i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureStorageLocker".into(), prefab_hash: -793623899i32, @@ -48889,7 +47729,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 255034731i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSuitStorage".into(), prefab_hash: 255034731i32, @@ -48998,7 +47837,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1606848156i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTankBig".into(), prefab_hash: -1606848156i32, @@ -49074,7 +47912,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1280378227i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTankBigInsulated".into(), prefab_hash: 1280378227i32, @@ -49150,7 +47987,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1276379454i32, StructureSlotsTemplate { - templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureTankConnector".into(), prefab_hash: -1276379454i32, @@ -49173,7 +48009,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1331802518i32, StructureSlotsTemplate { - templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureTankConnectorLiquid".into(), prefab_hash: 1331802518i32, @@ -49196,7 +48031,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1013514688i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTankSmall".into(), prefab_hash: 1013514688i32, @@ -49272,7 +48106,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 955744474i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTankSmallAir".into(), prefab_hash: 955744474i32, @@ -49348,7 +48181,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2102454415i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTankSmallFuel".into(), prefab_hash: 2102454415i32, @@ -49424,7 +48256,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 272136332i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTankSmallInsulated".into(), prefab_hash: 272136332i32, @@ -49500,7 +48331,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -465741100i32, StructureLogicDeviceConsumerMemoryTemplate { - templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureToolManufactory".into(), prefab_hash: -465741100i32, @@ -50690,7 +49520,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1473807953i32, StructureSlotsTemplate { - templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureTorpedoRack".into(), prefab_hash: 1473807953i32, @@ -50718,7 +49547,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1570931620i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTraderWaypoint".into(), prefab_hash: 1570931620i32, @@ -50768,7 +49596,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1423212473i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTransformer".into(), prefab_hash: -1423212473i32, @@ -50824,7 +49651,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1065725831i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTransformerMedium".into(), prefab_hash: -1065725831i32, @@ -50879,7 +49705,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 833912764i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTransformerMediumReversed".into(), prefab_hash: 833912764i32, @@ -50934,7 +49759,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -890946730i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTransformerSmall".into(), prefab_hash: -890946730i32, @@ -50989,7 +49813,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1054059374i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTransformerSmallReversed".into(), prefab_hash: 1054059374i32, @@ -51044,7 +49867,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1282191063i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTurbineGenerator".into(), prefab_hash: 1282191063i32, @@ -51093,7 +49915,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1310794736i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTurboVolumePump".into(), prefab_hash: 1310794736i32, @@ -51155,7 +49976,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 750118160i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureUnloader".into(), prefab_hash: 750118160i32, @@ -51242,7 +50062,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1622183451i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureUprightWindTurbine".into(), prefab_hash: 1622183451i32, @@ -51291,7 +50110,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -692036078i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureValve".into(), prefab_hash: -692036078i32, @@ -51342,7 +50160,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -443130773i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureVendingMachine".into(), prefab_hash: -443130773i32, @@ -51553,7 +50370,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -321403609i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureVolumePump".into(), prefab_hash: -321403609i32, @@ -51609,7 +50425,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -858143148i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArch".into(), prefab_hash: -858143148i32, @@ -51625,7 +50440,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1649708822i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArchArrow".into(), prefab_hash: 1649708822i32, @@ -51641,7 +50455,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1794588890i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArchCornerRound".into(), prefab_hash: 1794588890i32, @@ -51657,7 +50470,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1963016580i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArchCornerSquare".into(), prefab_hash: -1963016580i32, @@ -51673,7 +50485,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1281911841i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArchCornerTriangle".into(), prefab_hash: 1281911841i32, @@ -51689,7 +50500,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1182510648i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArchPlating".into(), prefab_hash: 1182510648i32, @@ -51705,7 +50515,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 782529714i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArchTwoTone".into(), prefab_hash: 782529714i32, @@ -51721,7 +50530,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -739292323i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWallCooler".into(), prefab_hash: -739292323i32, @@ -51790,7 +50598,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1635864154i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallFlat".into(), prefab_hash: 1635864154i32, @@ -51806,7 +50613,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 898708250i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallFlatCornerRound".into(), prefab_hash: 898708250i32, @@ -51822,7 +50628,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 298130111i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallFlatCornerSquare".into(), prefab_hash: 298130111i32, @@ -51838,7 +50643,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2097419366i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallFlatCornerTriangle".into(), prefab_hash: 2097419366i32, @@ -51854,7 +50658,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1161662836i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallFlatCornerTriangleFlat".into(), prefab_hash: -1161662836i32, @@ -51870,7 +50673,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1979212240i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallGeometryCorner".into(), prefab_hash: 1979212240i32, @@ -51886,7 +50688,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1049735537i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallGeometryStreight".into(), prefab_hash: 1049735537i32, @@ -51902,7 +50703,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1602758612i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallGeometryT".into(), prefab_hash: 1602758612i32, @@ -51918,7 +50718,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1427845483i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallGeometryTMirrored".into(), prefab_hash: -1427845483i32, @@ -51934,7 +50733,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 24258244i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWallHeater".into(), prefab_hash: 24258244i32, @@ -52000,7 +50798,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1287324802i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallIron".into(), prefab_hash: 1287324802i32, @@ -52016,7 +50813,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1485834215i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallIron02".into(), prefab_hash: 1485834215i32, @@ -52032,7 +50828,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 798439281i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallIron03".into(), prefab_hash: 798439281i32, @@ -52048,7 +50843,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1309433134i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallIron04".into(), prefab_hash: -1309433134i32, @@ -52064,7 +50858,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1492930217i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallLargePanel".into(), prefab_hash: 1492930217i32, @@ -52080,7 +50873,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -776581573i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallLargePanelArrow".into(), prefab_hash: -776581573i32, @@ -52096,7 +50888,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1860064656i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWallLight".into(), prefab_hash: -1860064656i32, @@ -52146,7 +50937,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1306415132i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWallLightBattery".into(), prefab_hash: -1306415132i32, @@ -52212,7 +51002,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1590330637i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedArch".into(), prefab_hash: 1590330637i32, @@ -52228,7 +51017,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1126688298i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedArchCorner".into(), prefab_hash: -1126688298i32, @@ -52244,7 +51032,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1171987947i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedArchLightFittingTop".into(), prefab_hash: 1171987947i32, @@ -52260,7 +51047,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1546743960i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedArchLightsFittings".into(), prefab_hash: -1546743960i32, @@ -52276,7 +51062,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -155945899i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedCorner".into(), prefab_hash: -155945899i32, @@ -52292,7 +51077,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1183203913i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedCornerThin".into(), prefab_hash: 1183203913i32, @@ -52308,7 +51092,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 8846501i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedNoBorder".into(), prefab_hash: 8846501i32, @@ -52324,7 +51107,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 179694804i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedNoBorderCorner".into(), prefab_hash: 179694804i32, @@ -52340,7 +51122,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1611559100i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedThinNoBorder".into(), prefab_hash: -1611559100i32, @@ -52356,7 +51137,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1769527556i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedThinNoBorderCorner".into(), prefab_hash: 1769527556i32, @@ -52372,7 +51152,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2087628940i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedWindow".into(), prefab_hash: 2087628940i32, @@ -52388,7 +51167,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -37302931i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedWindowThin".into(), prefab_hash: -37302931i32, @@ -52404,7 +51182,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 635995024i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPadding".into(), prefab_hash: 635995024i32, @@ -52420,7 +51197,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1243329828i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddingArchVent".into(), prefab_hash: -1243329828i32, @@ -52436,7 +51212,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2024882687i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddingLightFitting".into(), prefab_hash: 2024882687i32, @@ -52452,7 +51227,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1102403554i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddingThin".into(), prefab_hash: -1102403554i32, @@ -52468,7 +51242,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 26167457i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPlating".into(), prefab_hash: 26167457i32, @@ -52484,7 +51257,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 619828719i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallSmallPanelsAndHatch".into(), prefab_hash: 619828719i32, @@ -52500,7 +51272,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -639306697i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallSmallPanelsArrow".into(), prefab_hash: -639306697i32, @@ -52516,7 +51287,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 386820253i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallSmallPanelsMonoChrome".into(), prefab_hash: 386820253i32, @@ -52532,7 +51302,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1407480603i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallSmallPanelsOpen".into(), prefab_hash: -1407480603i32, @@ -52548,7 +51317,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1709994581i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallSmallPanelsTwoTone".into(), prefab_hash: 1709994581i32, @@ -52564,7 +51332,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1177469307i32, StructureTemplate { - templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallVent".into(), prefab_hash: -1177469307i32, @@ -52580,7 +51347,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1178961954i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterBottleFiller".into(), prefab_hash: -1178961954i32, @@ -52663,7 +51429,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1433754995i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterBottleFillerBottom".into(), prefab_hash: 1433754995i32, @@ -52746,7 +51511,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -756587791i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterBottleFillerPowered".into(), prefab_hash: -756587791i32, @@ -52832,7 +51596,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1986658780i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterBottleFillerPoweredBottom".into(), prefab_hash: 1986658780i32, @@ -52918,7 +51681,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -517628750i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterDigitalValve".into(), prefab_hash: -517628750i32, @@ -52974,7 +51736,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 433184168i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterPipeMeter".into(), prefab_hash: 433184168i32, @@ -53016,7 +51777,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 887383294i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterPurifier".into(), prefab_hash: 887383294i32, @@ -53078,7 +51838,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1369060582i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterWallCooler".into(), prefab_hash: -1369060582i32, @@ -53146,7 +51905,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1997212478i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWeatherStation".into(), prefab_hash: 1997212478i32, @@ -53208,7 +51966,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2082355173i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWindTurbine".into(), prefab_hash: -2082355173i32, @@ -53258,7 +52015,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 2056377335i32, StructureLogicDeviceTemplate { - templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWindowShutter".into(), prefab_hash: 2056377335i32, @@ -53317,7 +52073,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1700018136i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ToolPrinterMod".into(), prefab_hash: 1700018136i32, @@ -53342,7 +52097,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 94730034i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ToyLuna".into(), prefab_hash: 94730034i32, @@ -53366,7 +52120,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -2083426457i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "UniformCommander".into(), prefab_hash: -2083426457i32, @@ -53399,7 +52152,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -48342840i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "UniformMarine".into(), prefab_hash: -48342840i32, @@ -53431,7 +52183,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 810053150i32, ItemSlotsTemplate { - templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "UniformOrangeJumpSuit".into(), prefab_hash: 810053150i32, @@ -53463,7 +52214,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 789494694i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "WeaponEnergy".into(), prefab_hash: 789494694i32, @@ -53515,7 +52265,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -385323479i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "WeaponPistolEnergy".into(), prefab_hash: -385323479i32, @@ -53574,7 +52323,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( 1154745374i32, ItemLogicTemplate { - templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "WeaponRifleEnergy".into(), prefab_hash: 1154745374i32, @@ -53633,7 +52381,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< map.insert( -1102977898i32, ItemTemplate { - templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "WeaponTorpedo".into(), prefab_hash: -1102977898i32, diff --git a/www/src/ts/virtual_machine/base_device.ts b/www/src/ts/virtual_machine/baseDevice.ts similarity index 100% rename from www/src/ts/virtual_machine/base_device.ts rename to www/src/ts/virtual_machine/baseDevice.ts diff --git a/www/src/ts/virtual_machine/controls.ts b/www/src/ts/virtual_machine/controls.ts index 27ef8a3..7b65585 100644 --- a/www/src/ts/virtual_machine/controls.ts +++ b/www/src/ts/virtual_machine/controls.ts @@ -1,7 +1,7 @@ import { html, css } from "lit"; import { customElement, query } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMActiveICMixin } from "virtual_machine/base_device"; +import { VMActiveICMixin } from "virtual_machine/baseDevice"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.js"; diff --git a/www/src/ts/virtual_machine/device/add_device.ts b/www/src/ts/virtual_machine/device/add_device.ts index cafa83a..3591423 100644 --- a/www/src/ts/virtual_machine/device/add_device.ts +++ b/www/src/ts/virtual_machine/device/add_device.ts @@ -10,7 +10,7 @@ import { cache } from "lit/directives/cache.js"; import { default as uFuzzy } from "@leeoniya/ufuzzy"; import { when } from "lit/directives/when.js"; import { unsafeHTML } from "lit/directives/unsafe-html.js"; -import { VMTemplateDBMixin } from "virtual_machine/base_device"; +import { VMTemplateDBMixin } from "virtual_machine/baseDevice"; import { LogicInfo, ObjectTemplate, StructureInfo } from "ic10emu_wasm"; type LogicableStrucutureTemplate = Extract< diff --git a/www/src/ts/virtual_machine/device/card.ts b/www/src/ts/virtual_machine/device/card.ts index 14060db..3bc2bdd 100644 --- a/www/src/ts/virtual_machine/device/card.ts +++ b/www/src/ts/virtual_machine/device/card.ts @@ -1,7 +1,7 @@ import { html, css, HTMLTemplateResult } from "lit"; import { customElement, property, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMTemplateDBMixin, VMObjectMixin } from "virtual_machine/base_device"; +import { VMTemplateDBMixin, VMObjectMixin } from "virtual_machine/baseDevice"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; import { parseIntWithHexOrBinary, parseNumber } from "utils"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; diff --git a/www/src/ts/virtual_machine/device/fields.ts b/www/src/ts/virtual_machine/device/fields.ts index a1afdf9..ea2d432 100644 --- a/www/src/ts/virtual_machine/device/fields.ts +++ b/www/src/ts/virtual_machine/device/fields.ts @@ -1,7 +1,7 @@ import { html, css } from "lit"; import { customElement, property } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMTemplateDBMixin, VMObjectMixin } from "virtual_machine/base_device"; +import { VMTemplateDBMixin, VMObjectMixin } from "virtual_machine/baseDevice"; import { displayNumber, parseNumber } from "utils"; import type { LogicType } from "ic10emu_wasm"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; diff --git a/www/src/ts/virtual_machine/device/pins.ts b/www/src/ts/virtual_machine/device/pins.ts index f4e5f42..86595c8 100644 --- a/www/src/ts/virtual_machine/device/pins.ts +++ b/www/src/ts/virtual_machine/device/pins.ts @@ -1,7 +1,7 @@ import { html, css } from "lit"; import { customElement, property } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMTemplateDBMixin, VMObjectMixin } from "virtual_machine/base_device"; +import { VMTemplateDBMixin, VMObjectMixin } from "virtual_machine/baseDevice"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; import { ObjectID } from "ic10emu_wasm"; diff --git a/www/src/ts/virtual_machine/device/slot.ts b/www/src/ts/virtual_machine/device/slot.ts index eae273c..2ef6351 100644 --- a/www/src/ts/virtual_machine/device/slot.ts +++ b/www/src/ts/virtual_machine/device/slot.ts @@ -1,7 +1,7 @@ import { html, css } from "lit"; import { customElement, property} from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMTemplateDBMixin, VMObjectMixin } from "virtual_machine/base_device"; +import { VMTemplateDBMixin, VMObjectMixin } from "virtual_machine/baseDevice"; import { clamp, crc32, diff --git a/www/src/ts/virtual_machine/device/slot_add_dialog.ts b/www/src/ts/virtual_machine/device/slot_add_dialog.ts index 9523868..67dacc2 100644 --- a/www/src/ts/virtual_machine/device/slot_add_dialog.ts +++ b/www/src/ts/virtual_machine/device/slot_add_dialog.ts @@ -1,7 +1,7 @@ import { html, css } from "lit"; import { customElement, property, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMTemplateDBMixin } from "virtual_machine/base_device"; +import { VMTemplateDBMixin } from "virtual_machine/baseDevice"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; import SlDialog from "@shoelace-style/shoelace/dist/components/dialog/dialog.component.js"; import { VMDeviceCard } from "./card"; diff --git a/www/src/ts/virtual_machine/device/template.ts b/www/src/ts/virtual_machine/device/template.ts index 5e29a77..eb79b41 100644 --- a/www/src/ts/virtual_machine/device/template.ts +++ b/www/src/ts/virtual_machine/device/template.ts @@ -24,7 +24,7 @@ import { crc32, displayNumber, parseNumber } from "utils"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; import { VMDeviceCard } from "./card"; -import { VMTemplateDBMixin } from "virtual_machine/base_device"; +import { VMTemplateDBMixin } from "virtual_machine/baseDevice"; export interface SlotTemplate { typ: Class diff --git a/www/src/ts/virtual_machine/index.ts b/www/src/ts/virtual_machine/index.ts index acd1c6e..1859292 100644 --- a/www/src/ts/virtual_machine/index.ts +++ b/www/src/ts/virtual_machine/index.ts @@ -11,7 +11,7 @@ import type { ObjectID, } from "ic10emu_wasm"; import * as Comlink from "comlink"; -import "./base_device"; +import "./baseDevice"; import "./device"; import { App } from "app"; import { structuralEqual, TypedEventTarget } from "utils"; @@ -52,15 +52,24 @@ class VirtualMachine extends TypedEventTarget() { constructor(app: App) { super(); this.app = app; - this.vm_worker = new Worker( new URL("./vm_worker.ts", import.meta.url)); - const vm = Comlink.wrap(this.vm_worker); - this.ic10vm = vm; - window.VM.set(this); this._objects = new Map(); this._circuitHolders = new Map(); this._networks = new Map(); + this.setupVM(); + } + + async setupVM() { + this.vm_worker = new Worker(new URL("./vmWorker.ts", import.meta.url)); + const loaded = (w: Worker) => + new Promise((r) => w.addEventListener("message", r, { once: true })); + await Promise.all([loaded(this.vm_worker)]); + console.info("VM Worker loaded"); + const vm = Comlink.wrap(this.vm_worker); + this.ic10vm = vm; + window.VM.set(this); + this.templateDBPromise = this.ic10vm.getTemplateDatabase(); this.templateDBPromise.then((db) => this.setupTemplateDatabase(db)); diff --git a/www/data/database.json b/www/src/ts/virtual_machine/prefabDatabase.ts similarity index 99% rename from www/data/database.json rename to www/src/ts/virtual_machine/prefabDatabase.ts index 5d51e87..6f67f81 100644 --- a/www/data/database.json +++ b/www/src/ts/virtual_machine/prefabDatabase.ts @@ -1,4 +1,4 @@ -{ +export default { "prefabs": { "AccessCardBlack": { "templateType": "Item", @@ -66636,4 +66636,4 @@ "StructureNitrolyzer", "StructureRocketCircuitHousing" ] -} \ No newline at end of file +} as const \ No newline at end of file diff --git a/www/src/ts/virtual_machine/registers.ts b/www/src/ts/virtual_machine/registers.ts index 0b69796..4c98b92 100644 --- a/www/src/ts/virtual_machine/registers.ts +++ b/www/src/ts/virtual_machine/registers.ts @@ -1,7 +1,7 @@ import { html, css } from "lit"; import { customElement } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMActiveICMixin } from "virtual_machine/base_device"; +import { VMActiveICMixin } from "virtual_machine/baseDevice"; import { RegisterSpec } from "ic10emu_wasm"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.js"; diff --git a/www/src/ts/virtual_machine/stack.ts b/www/src/ts/virtual_machine/stack.ts index 4adb81d..ae77740 100644 --- a/www/src/ts/virtual_machine/stack.ts +++ b/www/src/ts/virtual_machine/stack.ts @@ -1,7 +1,7 @@ import { html, css } from "lit"; import { customElement } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMActiveICMixin } from "virtual_machine/base_device"; +import { VMActiveICMixin } from "virtual_machine/baseDevice"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.js"; import { displayNumber, parseNumber } from "utils"; diff --git a/www/src/ts/virtual_machine/vmWorker.ts b/www/src/ts/virtual_machine/vmWorker.ts new file mode 100644 index 0000000..714633e --- /dev/null +++ b/www/src/ts/virtual_machine/vmWorker.ts @@ -0,0 +1,1158 @@ +import { VMRef, init } from "ic10emu_wasm"; +import type { + StationpediaPrefab, + ObjectTemplate, + InternalAtmoInfo, + ThermalInfo, + LogicSlotType, + MemoryAccess, + LogicType, + MachineTier, + RecipeRange, + Instruction, + Recipe, + InstructionPart, + InstructionPartType, + GasType, + TemplateDatabase, +} from "ic10emu_wasm"; + +import * as Comlink from "comlink"; + +import prefabDatabase from "./prefabDatabase"; +import { parseNumber } from "utils"; + +export interface PrefabDatabase { + prefabs: Map; + reagents: Map< + string, + { + Hash: number; + Unit: string; + Sources?: Map; + } + >; + prefabsByHash: Map; + structures: StationpediaPrefab[]; + devices: StationpediaPrefab[]; + items: StationpediaPrefab[]; + logicableItems: StationpediaPrefab[]; + suits: StationpediaPrefab[]; + circuitHolders: StationpediaPrefab[]; +} + +type JsonDBPrefabs = typeof prefabDatabase.prefabs; + +// function buildObjectTemplate( +// template: JsonDBPrefabs[K], +// ): ObjectTemplate { +// switch (template.templateType) { +// case "Structure": +// return { +// templateType: "Structure", +// prefab: template.prefab, +// structure: template.structure, +// thermal_info: +// "thermal_info" in template ? template.thermal_info : undefined, +// internal_atmo_info: +// "internal_atmo_info" in template +// ? (template.internal_atmo_info as InternalAtmoInfo) +// : undefined, +// }; +// case "StructureSlots": +// return { +// templateType: "StructureSlots", +// prefab: template.prefab, +// structure: template.structure, +// thermal_info: +// "thermal_info" in template ? template.thermal_info : undefined, +// internal_atmo_info: +// "internal_atmo_info" in template +// ? (template.internal_atmo_info as InternalAtmoInfo) +// : undefined, +// slots: template.slots.map((slot) => slot), +// }; +// case "StructureLogic": +// return { +// templateType: "StructureLogic", +// prefab: template.prefab, +// structure: template.structure, +// thermal_info: +// "thermal_info" in template +// ? (template.thermal_info as ThermalInfo) +// : undefined, +// internal_atmo_info: +// "internal_atmo_info" in template +// ? (template.internal_atmo_info as InternalAtmoInfo) +// : undefined, +// slots: [...template.slots], +// logic: { +// logic_slot_types: new Map( +// Object.entries(template.logic.logic_slot_types).map( +// ([key, values]) => [ +// parseInt(key), +// new Map( +// Object.entries(values).map(([key, val]) => [ +// key as LogicSlotType, +// val as MemoryAccess, +// ]), +// ), +// ], +// ), +// ), +// logic_types: new Map( +// Object.entries(template.logic.logic_types).map(([key, val]) => [ +// key as LogicType, +// val as MemoryAccess, +// ]), +// ), +// modes: +// "modes" in template.logic +// ? new Map( +// Object.entries(template.logic.modes).map(([key, val]) => [ +// parseInt(key), +// val, +// ]), +// ) +// : undefined, +// transmission_receiver: template.logic.transmission_receiver, +// wireless_logic: template.logic.wireless_logic, +// circuit_holder: template.logic.circuit_holder, +// }, +// }; +// case "StructureLogicDevice": +// return { +// templateType: "StructureLogicDevice", +// prefab: template.prefab, +// structure: template.structure, +// thermal_info: +// "thermal_info" in template +// ? (template.thermal_info as ThermalInfo) +// : undefined, +// internal_atmo_info: +// "internal_atmo_info" in template +// ? (template.internal_atmo_info as InternalAtmoInfo) +// : undefined, +// slots: [...template.slots], +// logic: { +// logic_slot_types: new Map( +// Object.entries(template.logic.logic_slot_types).map( +// ([key, values]) => [ +// parseInt(key), +// new Map( +// Object.entries(values).map(([key, val]) => [ +// key as LogicSlotType, +// val as MemoryAccess, +// ]), +// ), +// ], +// ), +// ), +// logic_types: new Map( +// Object.entries(template.logic.logic_types).map(([key, val]) => [ +// key as LogicType, +// val as MemoryAccess, +// ]), +// ), +// modes: +// "modes" in template.logic +// ? new Map( +// Object.entries(template.logic.modes).map(([key, val]) => [ +// parseInt(key), +// val, +// ]), +// ) +// : undefined, +// transmission_receiver: template.logic.transmission_receiver, +// wireless_logic: template.logic.wireless_logic, +// circuit_holder: template.logic.circuit_holder, +// }, +// device: { +// connection_list: [...template.device.connection_list], +// device_pins_length: +// "device_pins_length" in template.device +// ? (template.device.device_pins_length as number) +// : undefined, +// has_activate_state: template.device.has_activate_state, +// has_atmosphere: template.device.has_atmosphere, +// has_color_state: template.device.has_color_state, +// has_lock_state: template.device.has_lock_state, +// has_mode_state: template.device.has_mode_state, +// has_on_off_state: template.device.has_on_off_state, +// has_open_state: template.device.has_open_state, +// has_reagents: template.device.has_reagents, +// }, +// }; +// case "StructureLogicDeviceConsumer": +// return { +// templateType: "StructureLogicDeviceConsumer", +// prefab: template.prefab, +// structure: template.structure, +// thermal_info: +// "thermal_info" in template +// ? (template.thermal_info as ThermalInfo) +// : undefined, +// internal_atmo_info: +// "internal_atmo_info" in template +// ? (template.internal_atmo_info as InternalAtmoInfo) +// : undefined, +// slots: [...template.slots], +// logic: { +// logic_slot_types: new Map( +// Object.entries(template.logic.logic_slot_types).map( +// ([key, values]) => [ +// parseInt(key), +// new Map( +// Object.entries(values).map(([key, val]) => [ +// key as LogicSlotType, +// val as MemoryAccess, +// ]), +// ), +// ], +// ), +// ), +// logic_types: new Map( +// Object.entries(template.logic.logic_types).map(([key, val]) => [ +// key as LogicType, +// val as MemoryAccess, +// ]), +// ), +// modes: +// "modes" in template.logic +// ? new Map( +// Object.entries(template.logic.modes).map(([key, val]) => [ +// parseInt(key), +// val, +// ]), +// ) +// : undefined, +// transmission_receiver: template.logic.transmission_receiver, +// wireless_logic: template.logic.wireless_logic, +// circuit_holder: template.logic.circuit_holder, +// }, +// device: { +// connection_list: [...template.device.connection_list], +// device_pins_length: +// "device_pins_length" in template.device +// ? (template.device.device_pins_length as number) +// : undefined, +// has_activate_state: template.device.has_activate_state, +// has_atmosphere: template.device.has_atmosphere, +// has_color_state: template.device.has_color_state, +// has_lock_state: template.device.has_lock_state, +// has_mode_state: template.device.has_mode_state, +// has_on_off_state: template.device.has_on_off_state, +// has_open_state: template.device.has_open_state, +// has_reagents: template.device.has_reagents, +// }, +// consumer_info: { +// consumed_resouces: [...template.consumer_info.consumed_resouces], +// processed_reagents: [...template.consumer_info.processed_reagents], +// }, +// fabricator_info: undefined, +// }; +// case "StructureLogicDeviceConsumerMemory": +// return { +// templateType: "StructureLogicDeviceConsumerMemory", +// prefab: template.prefab, +// structure: template.structure, +// thermal_info: +// "thermal_info" in template +// ? (template.thermal_info as ThermalInfo) +// : undefined, +// internal_atmo_info: +// "internal_atmo_info" in template +// ? (template.internal_atmo_info as InternalAtmoInfo) +// : undefined, +// slots: [...template.slots], +// logic: { +// logic_slot_types: new Map( +// Object.entries(template.logic.logic_slot_types).map( +// ([key, values]) => [ +// parseInt(key), +// new Map( +// Object.entries(values).map(([key, val]) => [ +// key as LogicSlotType, +// val as MemoryAccess, +// ]), +// ), +// ], +// ), +// ), +// logic_types: new Map( +// Object.entries(template.logic.logic_types).map(([key, val]) => [ +// key as LogicType, +// val as MemoryAccess, +// ]), +// ), +// modes: +// "modes" in template.logic +// ? new Map( +// Object.entries(template.logic.modes).map(([key, val]) => [ +// parseInt(key), +// val, +// ]), +// ) +// : undefined, +// transmission_receiver: template.logic.transmission_receiver, +// wireless_logic: template.logic.wireless_logic, +// circuit_holder: template.logic.circuit_holder, +// }, +// device: { +// connection_list: [...template.device.connection_list], +// device_pins_length: +// "device_pins_length" in template.device +// ? (template.device.device_pins_length as number) +// : undefined, +// has_activate_state: template.device.has_activate_state, +// has_atmosphere: template.device.has_atmosphere, +// has_color_state: template.device.has_color_state, +// has_lock_state: template.device.has_lock_state, +// has_mode_state: template.device.has_mode_state, +// has_on_off_state: template.device.has_on_off_state, +// has_open_state: template.device.has_open_state, +// has_reagents: template.device.has_reagents, +// }, +// consumer_info: { +// consumed_resouces: [...template.consumer_info.consumed_resouces], +// processed_reagents: [...template.consumer_info.processed_reagents], +// }, +// fabricator_info: +// "fabricator_info" in template +// ? { +// tier: template.fabricator_info.tier as MachineTier, +// recipes: new Map( +// Object.entries(template.fabricator_info.recipes).map( +// ([key, val]) => { +// const recipe: Recipe = { +// tier: val.tier as MachineTier, +// time: val.time as number, +// energy: val.energy as number, +// temperature: val.temperature as RecipeRange, +// pressure: val.pressure as RecipeRange, +// required_mix: { +// rule: val.required_mix.rule as number, +// is_any: val.required_mix.is_any as boolean, +// is_any_to_remove: val.required_mix +// .is_any_to_remove as boolean, +// reagents: new Map( +// Object.entries(val.required_mix.reagents), +// ) as Map, +// }, +// count_types: val.count_types, +// reagents: new Map(Object.entries(val.reagents)) as Map< +// string, +// number +// >, +// }; +// +// return [key, recipe]; +// }, +// ), +// ), +// } +// : undefined, +// memory: { +// memory_access: template.memory.memory_access as MemoryAccess, +// memory_size: template.memory.memory_size, +// instructions: +// "instructions" in template.memory +// ? new Map( +// Object.entries(template.memory.instructions).map( +// ([key, val]) => { +// const instruction: Instruction = { +// description: val.description, +// description_stripped: val.description_stripped, +// typ: val.typ, +// value: val.value, +// valid: [ +// val.valid[0], +// typeof val.valid[1] === "number" +// ? val.valid[1] +// : undefined, +// ], +// parts: val.parts.map((part) => { +// const instPart: InstructionPart = { +// range: [...part.range], +// name: part.name, +// typ: part.typ as InstructionPartType, +// }; +// return instPart; +// }), +// }; +// return [key, instruction]; +// }, +// ), +// ) +// : undefined, +// }, +// }; +// case "StructureLogicDeviceMemory": +// return { +// templateType: "StructureLogicDeviceMemory", +// prefab: template.prefab, +// structure: template.structure, +// thermal_info: +// "thermal_info" in template +// ? (template.thermal_info as ThermalInfo) +// : undefined, +// internal_atmo_info: +// "internal_atmo_info" in template +// ? (template.internal_atmo_info as InternalAtmoInfo) +// : undefined, +// slots: [...template.slots], +// logic: { +// logic_slot_types: new Map( +// Object.entries(template.logic.logic_slot_types).map( +// ([key, values]) => [ +// parseInt(key), +// new Map( +// Object.entries(values).map(([key, val]) => [ +// key as LogicSlotType, +// val as MemoryAccess, +// ]), +// ), +// ], +// ), +// ), +// logic_types: new Map( +// Object.entries(template.logic.logic_types).map(([key, val]) => [ +// key as LogicType, +// val as MemoryAccess, +// ]), +// ), +// modes: +// "modes" in template.logic +// ? new Map( +// Object.entries(template.logic.modes).map(([key, val]) => [ +// parseInt(key), +// val, +// ]), +// ) +// : undefined, +// transmission_receiver: template.logic.transmission_receiver, +// wireless_logic: template.logic.wireless_logic, +// circuit_holder: template.logic.circuit_holder, +// }, +// device: { +// connection_list: [...template.device.connection_list], +// device_pins_length: +// "device_pins_length" in template.device +// ? (template.device.device_pins_length as number) +// : undefined, +// has_activate_state: template.device.has_activate_state, +// has_atmosphere: template.device.has_atmosphere, +// has_color_state: template.device.has_color_state, +// has_lock_state: template.device.has_lock_state, +// has_mode_state: template.device.has_mode_state, +// has_on_off_state: template.device.has_on_off_state, +// has_open_state: template.device.has_open_state, +// has_reagents: template.device.has_reagents, +// }, +// memory: { +// memory_access: template.memory.memory_access as MemoryAccess, +// memory_size: template.memory.memory_size, +// instructions: +// "instructions" in template.memory +// ? new Map( +// Object.entries(template.memory.instructions).map( +// ([key, val]) => { +// const instruction: Instruction = { +// description: val.description, +// description_stripped: val.description_stripped, +// typ: val.typ, +// value: val.value, +// valid: [ +// val.valid[0], +// typeof val.valid[1] === "number" +// ? val.valid[1] +// : undefined, +// ], +// parts: val.parts.map( +// (part: { +// range: readonly [number, number]; +// name: string; +// typ: string; +// }) => { +// const instPart: InstructionPart = { +// range: [...part.range], +// name: part.name, +// typ: part.typ as InstructionPartType, +// }; +// return instPart; +// }, +// ), +// }; +// return [key, instruction]; +// }, +// ), +// ) +// : undefined, +// }, +// }; +// case "StructureCircuitHolder": +// return { +// templateType: "StructureCircuitHolder", +// prefab: template.prefab, +// structure: template.structure, +// thermal_info: +// "thermal_info" in template +// ? (template.thermal_info as ThermalInfo) +// : undefined, +// internal_atmo_info: +// "internal_atmo_info" in template +// ? (template.internal_atmo_info as InternalAtmoInfo) +// : undefined, +// slots: [...template.slots], +// logic: { +// logic_slot_types: new Map( +// Object.entries(template.logic.logic_slot_types).map( +// ([key, values]) => [ +// parseInt(key), +// new Map( +// Object.entries(values).map(([key, val]) => [ +// key as LogicSlotType, +// val as MemoryAccess, +// ]), +// ), +// ], +// ), +// ), +// logic_types: new Map( +// Object.entries(template.logic.logic_types).map(([key, val]) => [ +// key as LogicType, +// val as MemoryAccess, +// ]), +// ), +// modes: +// "modes" in template.logic +// ? new Map( +// Object.entries(template.logic.modes).map(([key, val]) => [ +// parseInt(key), +// val, +// ]), +// ) +// : undefined, +// transmission_receiver: template.logic.transmission_receiver, +// wireless_logic: template.logic.wireless_logic, +// circuit_holder: template.logic.circuit_holder, +// }, +// device: { +// connection_list: [...template.device.connection_list], +// device_pins_length: +// "device_pins_length" in template.device +// ? (template.device.device_pins_length as number) +// : undefined, +// has_activate_state: template.device.has_activate_state, +// has_atmosphere: template.device.has_atmosphere, +// has_color_state: template.device.has_color_state, +// has_lock_state: template.device.has_lock_state, +// has_mode_state: template.device.has_mode_state, +// has_on_off_state: template.device.has_on_off_state, +// has_open_state: template.device.has_open_state, +// has_reagents: template.device.has_reagents, +// }, +// }; +// case "Item": +// return { +// templateType: "Item", +// prefab: template.prefab, +// thermal_info: +// "thermal_info" in template +// ? (template.thermal_info as ThermalInfo) +// : undefined, +// internal_atmo_info: +// "internal_atmo_info" in template +// ? (template.internal_atmo_info as InternalAtmoInfo) +// : undefined, +// item: { +// consumable: template.item.consumable, +// ingredient: template.item.ingredient, +// max_quantity: template.item.max_quantity, +// slot_class: template.item.slot_class, +// sorting_class: template.item.sorting_class, +// filter_type: +// "filter_type" in template.item +// ? template.item.filter_type +// : undefined, +// reagents: +// "reagents" in template.item +// ? (new Map(Object.entries(template.item.reagents)) as Map< +// string, +// number +// >) +// : undefined, +// }, +// }; +// case "ItemSlots": +// return { +// templateType: "ItemSlots", +// prefab: template.prefab, +// thermal_info: +// "thermal_info" in template +// ? (template.thermal_info as ThermalInfo) +// : undefined, +// internal_atmo_info: +// "internal_atmo_info" in template +// ? (template.internal_atmo_info as InternalAtmoInfo) +// : undefined, +// item: { +// consumable: template.item.consumable, +// ingredient: template.item.ingredient, +// max_quantity: template.item.max_quantity, +// slot_class: template.item.slot_class, +// sorting_class: template.item.sorting_class, +// filter_type: +// "filter_type" in template.item +// ? (template.item.filter_type as GasType) +// : undefined, +// reagents: +// "reagents" in template.item +// ? (new Map(Object.entries(template.item.reagents)) as Map< +// string, +// number +// >) +// : undefined, +// }, +// slots: [...template.slots], +// }; +// case "ItemConsumer": +// return { +// templateType: "ItemConsumer", +// prefab: template.prefab, +// thermal_info: +// "thermal_info" in template +// ? (template.thermal_info as ThermalInfo) +// : undefined, +// internal_atmo_info: +// "internal_atmo_info" in template +// ? (template.internal_atmo_info as InternalAtmoInfo) +// : undefined, +// item: { +// consumable: template.item.consumable, +// ingredient: template.item.ingredient, +// max_quantity: template.item.max_quantity, +// slot_class: template.item.slot_class, +// sorting_class: template.item.sorting_class, +// filter_type: +// "filter_type" in template.item +// ? (template.item.filter_type as GasType) +// : undefined, +// reagents: +// "reagents" in template.item +// ? (new Map(Object.entries(template.item.reagents)) as Map< +// string, +// number +// >) +// : undefined, +// }, +// slots: [...template.slots], +// consumer_info: { +// consumed_resouces: [...template.consumer_info.consumed_resouces], +// processed_reagents: [...template.consumer_info.processed_reagents], +// }, +// }; +// case "ItemLogic": +// return { +// templateType: "ItemLogic", +// prefab: template.prefab, +// thermal_info: +// "thermal_info" in template +// ? (template.thermal_info as ThermalInfo) +// : undefined, +// internal_atmo_info: +// "internal_atmo_info" in template +// ? (template.internal_atmo_info as InternalAtmoInfo) +// : undefined, +// item: { +// consumable: template.item.consumable, +// ingredient: template.item.ingredient, +// max_quantity: template.item.max_quantity, +// slot_class: template.item.slot_class, +// sorting_class: template.item.sorting_class, +// filter_type: +// "filter_type" in template.item +// ? (template.item.filter_type as GasType) +// : undefined, +// reagents: +// "reagents" in template.item +// ? (new Map(Object.entries(template.item.reagents)) as Map< +// string, +// number +// >) +// : undefined, +// }, +// slots: [...template.slots], +// logic: { +// logic_slot_types: new Map( +// Object.entries(template.logic.logic_slot_types).map( +// ([key, values]) => [ +// parseInt(key), +// new Map( +// Object.entries(values).map(([key, val]) => [ +// key as LogicSlotType, +// val as MemoryAccess, +// ]), +// ), +// ], +// ), +// ), +// logic_types: new Map( +// Object.entries(template.logic.logic_types).map(([key, val]) => [ +// key as LogicType, +// val as MemoryAccess, +// ]), +// ), +// modes: +// "modes" in template.logic +// ? new Map( +// Object.entries(template.logic.modes).map(([key, val]) => [ +// parseInt(key), +// val, +// ]), +// ) +// : undefined, +// transmission_receiver: template.logic.transmission_receiver, +// wireless_logic: template.logic.wireless_logic, +// circuit_holder: template.logic.circuit_holder, +// }, +// }; +// case "ItemLogicMemory": +// return { +// templateType: "ItemLogicMemory", +// prefab: template.prefab, +// thermal_info: +// "thermal_info" in template +// ? (template.thermal_info as ThermalInfo) +// : undefined, +// internal_atmo_info: +// "internal_atmo_info" in template +// ? (template.internal_atmo_info as InternalAtmoInfo) +// : undefined, +// item: { +// consumable: template.item.consumable, +// ingredient: template.item.ingredient, +// max_quantity: template.item.max_quantity, +// slot_class: template.item.slot_class, +// sorting_class: template.item.sorting_class, +// filter_type: +// "filter_type" in template.item +// ? (template.item.filter_type as GasType) +// : undefined, +// reagents: +// "reagents" in template.item +// ? (new Map(Object.entries(template.item.reagents)) as Map< +// string, +// number +// >) +// : undefined, +// }, +// slots: [...template.slots], +// logic: { +// logic_slot_types: new Map( +// Object.entries(template.logic.logic_slot_types).map( +// ([key, values]) => [ +// parseInt(key), +// new Map( +// Object.entries(values).map(([key, val]) => [ +// key as LogicSlotType, +// val as MemoryAccess, +// ]), +// ), +// ], +// ), +// ), +// logic_types: new Map( +// Object.entries(template.logic.logic_types).map(([key, val]) => [ +// key as LogicType, +// val as MemoryAccess, +// ]), +// ), +// modes: +// "modes" in template.logic +// ? new Map( +// Object.entries(template.logic.modes).map(([key, val]) => [ +// parseInt(key), +// val, +// ]), +// ) +// : undefined, +// transmission_receiver: template.logic.transmission_receiver, +// wireless_logic: template.logic.wireless_logic, +// circuit_holder: template.logic.circuit_holder, +// }, +// memory: { +// memory_access: template.memory.memory_access as MemoryAccess, +// memory_size: template.memory.memory_size, +// instructions: +// "instructions" in template.memory +// ? new Map( +// Object.entries(template.memory.instructions).map( +// ([key, val]) => { +// const instruction: Instruction = { +// description: val.description, +// description_stripped: val.description_stripped, +// typ: val.typ, +// value: val.value, +// valid: [ +// val.valid[0], +// typeof val.valid[1] === "number" +// ? val.valid[1] +// : undefined, +// ], +// parts: val.parts.map( +// (part: { +// range: readonly [number, number]; +// name: string; +// typ: string; +// }) => { +// const instPart: InstructionPart = { +// range: [...part.range], +// name: part.name, +// typ: part.typ as InstructionPartType, +// }; +// return instPart; +// }, +// ), +// }; +// return [key, instruction]; +// }, +// ), +// ) +// : undefined, +// }, +// }; +// case "ItemCircuitHolder": +// return { +// templateType: "ItemCircuitHolder", +// prefab: template.prefab, +// thermal_info: +// "thermal_info" in template +// ? (template.thermal_info as ThermalInfo) +// : undefined, +// internal_atmo_info: +// "internal_atmo_info" in template +// ? (template.internal_atmo_info as InternalAtmoInfo) +// : undefined, +// item: { +// consumable: template.item.consumable, +// ingredient: template.item.ingredient, +// max_quantity: template.item.max_quantity, +// slot_class: template.item.slot_class, +// sorting_class: template.item.sorting_class, +// filter_type: +// "filter_type" in template.item +// ? (template.item.filter_type as GasType) +// : undefined, +// reagents: +// "reagents" in template.item +// ? (new Map(Object.entries(template.item.reagents)) as Map< +// string, +// number +// >) +// : undefined, +// }, +// slots: [...template.slots], +// logic: { +// logic_slot_types: new Map( +// Object.entries(template.logic.logic_slot_types).map( +// ([key, values]) => [ +// parseInt(key), +// new Map( +// Object.entries(values).map(([key, val]) => [ +// key as LogicSlotType, +// val as MemoryAccess, +// ]), +// ), +// ], +// ), +// ), +// logic_types: new Map( +// Object.entries(template.logic.logic_types).map(([key, val]) => [ +// key as LogicType, +// val as MemoryAccess, +// ]), +// ), +// modes: +// "modes" in template.logic +// ? new Map( +// Object.entries(template.logic.modes).map(([key, val]) => [ +// parseInt(key), +// val, +// ]), +// ) +// : undefined, +// transmission_receiver: template.logic.transmission_receiver, +// wireless_logic: template.logic.wireless_logic, +// circuit_holder: template.logic.circuit_holder, +// }, +// }; +// case "ItemSuit": +// return { +// templateType: "ItemSuit", +// prefab: template.prefab, +// thermal_info: +// "thermal_info" in template +// ? (template.thermal_info as ThermalInfo) +// : undefined, +// internal_atmo_info: +// "internal_atmo_info" in template +// ? (template.internal_atmo_info as InternalAtmoInfo) +// : undefined, +// item: { +// consumable: template.item.consumable, +// ingredient: template.item.ingredient, +// max_quantity: template.item.max_quantity, +// slot_class: template.item.slot_class, +// sorting_class: template.item.sorting_class, +// filter_type: +// "filter_type" in template.item +// ? (template.item.filter_type as GasType) +// : undefined, +// reagents: +// "reagents" in template.item +// ? (new Map(Object.entries(template.item.reagents)) as Map< +// string, +// number +// >) +// : undefined, +// }, +// slots: [...template.slots], +// suit_info: template.suit_info, +// }; +// // case "ItemSuitLogic": +// // return { +// // templateType: "ItemSuitLogic", +// // prefab: template.prefab, +// // thermal_info: "thermal_info" in template ? template.thermal_info as ThermalInfo : undefined, +// // internal_atmo_info: "internal_atmo_info" in template ? template.internal_atmo_info as InternalAtmoInfo : undefined, +// // item: { +// // consumable: template.item.consumable, +// // ingredient: template.item.ingredient, +// // max_quantity: template.item.max_quantity, +// // slot_class: template.item.slot_class, +// // sorting_class: template.item.sorting_class, +// // filter_type: "filter_type" in template.item ? template.item.filter_type as GasType : undefined, +// // reagents: "reagents" in template.item ? new Map(Object.entries(template.item.reagents)) as Map : undefined, +// // }, +// // slots: [...template.slots], +// // suit_info: template.suit_info, +// // logic: { +// // logic_slot_types: new Map( +// // Object.entries(template.logic.logic_slot_types) +// // .map(([key, values]) => [ +// // parseInt(key), +// // new Map( +// // Object.entries(values) +// // .map(([key, val]) => [key as LogicSlotType, val as MemoryAccess]) +// // ) +// // ]) +// // ), +// // logic_types: new Map( +// // Object.entries(template.logic.logic_types) +// // .map(([key, val]) => [key as LogicType, val as MemoryAccess]) +// // ), +// // modes: "modes" in template.logic +// // ? new Map( +// // Object.entries(template.logic.modes).map(([key, val]) => [parseInt(key), val]) +// // ) +// // : undefined, +// // transmission_receiver: template.logic.transmission_receiver, +// // wireless_logic: template.logic.wireless_logic, +// // circuit_holder: template.logic.circuit_holder +// // }, +// // } +// case "ItemSuitCircuitHolder": +// return { +// templateType: "ItemSuitCircuitHolder", +// prefab: template.prefab, +// thermal_info: +// "thermal_info" in template +// ? (template.thermal_info as ThermalInfo) +// : undefined, +// internal_atmo_info: +// "internal_atmo_info" in template +// ? (template.internal_atmo_info as InternalAtmoInfo) +// : undefined, +// item: { +// consumable: template.item.consumable, +// ingredient: template.item.ingredient, +// max_quantity: template.item.max_quantity, +// slot_class: template.item.slot_class, +// sorting_class: template.item.sorting_class, +// filter_type: +// "filter_type" in template.item +// ? (template.item.filter_type as GasType) +// : undefined, +// reagents: +// "reagents" in template.item +// ? (new Map(Object.entries(template.item.reagents)) as Map< +// string, +// number +// >) +// : undefined, +// }, +// slots: [...template.slots], +// suit_info: template.suit_info, +// logic: { +// logic_slot_types: new Map( +// Object.entries(template.logic.logic_slot_types).map( +// ([key, values]) => [ +// parseInt(key), +// new Map( +// Object.entries(values).map(([key, val]) => [ +// key as LogicSlotType, +// val as MemoryAccess, +// ]), +// ), +// ], +// ), +// ), +// logic_types: new Map( +// Object.entries(template.logic.logic_types).map(([key, val]) => [ +// key as LogicType, +// val as MemoryAccess, +// ]), +// ), +// modes: +// "modes" in template.logic +// ? new Map( +// Object.entries(template.logic.modes).map(([key, val]) => [ +// parseInt(key), +// val, +// ]), +// ) +// : undefined, +// transmission_receiver: template.logic.transmission_receiver, +// wireless_logic: template.logic.wireless_logic, +// circuit_holder: template.logic.circuit_holder, +// }, +// memory: { +// memory_access: template.memory.memory_access as MemoryAccess, +// memory_size: template.memory.memory_size, +// instructions: +// "instructions" in template.memory +// ? new Map( +// Object.entries(template.memory.instructions).map( +// ([key, val]) => { +// const instruction: Instruction = { +// description: val.description, +// description_stripped: val.description_stripped, +// typ: val.typ, +// value: val.value, +// valid: [ +// val.valid[0], +// typeof val.valid[1] === "number" +// ? val.valid[1] +// : undefined, +// ], +// parts: val.parts.map( +// (part: { +// range: readonly [number, number]; +// name: string; +// typ: string; +// }) => { +// const instPart: InstructionPart = { +// range: [...part.range], +// name: part.name, +// typ: part.typ as InstructionPartType, +// }; +// return instPart; +// }, +// ), +// }; +// return [key, instruction]; +// }, +// ), +// ) +// : undefined, +// }, +// }; +// default: +// return undefined; +// } +// } +// +// function buildPrefabDatabase(): PrefabDatabase { +// return { +// prefabs: new Map( +// Object.entries(prefabDatabase.prefabs).flatMap(([key, val]) => { +// const template = buildObjectTemplate(val); +// if (typeof template !== "undefined") { +// return [[key as StationpediaPrefab, template]]; +// } else { +// return []; +// } +// }), +// ), +// prefabsByHash: new Map( +// Object.entries(prefabDatabase.prefabsByHash).map(([key, val]) => [ +// parseInt(key), +// val as StationpediaPrefab, +// ]), +// ), +// structures: [...prefabDatabase.structures] as StationpediaPrefab[], +// devices: [...prefabDatabase.devices] as StationpediaPrefab[], +// items: [...prefabDatabase.items] as StationpediaPrefab[], +// logicableItems: [...prefabDatabase.logicableItems] as StationpediaPrefab[], +// circuitHolders: [...prefabDatabase.circuitHolders] as StationpediaPrefab[], +// suits: [...prefabDatabase.suits] as StationpediaPrefab[], +// reagents: new Map( +// Object.entries(prefabDatabase.reagents).map(([key, val]) => { +// return [ +// key, +// { +// Hash: val.Hash, +// Unit: val.Unit, +// Sources: +// "Sources" in val +// ? (new Map(Object.entries(val.Sources)) as Map< +// StationpediaPrefab, +// number +// >) +// : undefined, +// }, +// ]; +// }), +// ), +// }; +// } +// +console.info("Processing Json prefab Database ", prefabDatabase); +// +// const prefab_database = buildPrefabDatabase(); +// +// console.info("Prcessed prefab Database ", prefab_database); + +const vm: VMRef = init(); + +// const template_database = new Map( +// Array.from(prefab_database.prefabsByHash.entries()).map(([hash, name]) => { +// return [hash, prefab_database.prefabs.get(name)]; +// }), +// ); + +// console.info("Loading Prefab Template Database into VM", template_database); +try { + const start_time = performance.now(); + // vm.importTemplateDatabase(template_database); + vm.importTemplateDatabase( + Object.fromEntries( + Object.entries(prefabDatabase.prefabsByHash) + .map(([hash, prefabName]) => [parseInt(hash), prefabDatabase.prefabs[prefabName]]) + ) as TemplateDatabase + ); + const now = performance.now(); + const time_elapsed = (now - start_time) / 1000; + console.info(`Prefab Template Database loaded in ${time_elapsed} seconds`); +} catch (e) { + if ("stack" in e) { + console.error("Error importing template database:", e.toString(), e.stack); + } else { + console.error("Error importing template database:", e.toString()); + } +} + +postMessage("ready"); + +Comlink.expose(vm); diff --git a/www/src/ts/virtual_machine/vm_worker.ts b/www/src/ts/virtual_machine/vm_worker.ts deleted file mode 100644 index d550bfb..0000000 --- a/www/src/ts/virtual_machine/vm_worker.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { VMRef, init } from "ic10emu_wasm"; -import type { StationpediaPrefab, ObjectTemplate } from "ic10emu_wasm"; - -import * as Comlink from "comlink"; - -import * as json_database from "../../../data/database.json" with { type: "json" }; - -export interface PrefabDatabase { - prefabs: { [key in StationpediaPrefab]: ObjectTemplate}; - reagents: { - [key: string]: { - Hash: number; - Unit: string; - Sources?: { - [key in StationpediaPrefab]: number; - }; - }; - }; - prefabsByHash: { - [key: number]: StationpediaPrefab; - }; - structures: StationpediaPrefab[]; - devices: StationpediaPrefab[]; - items: StationpediaPrefab[]; - logicableItems: StationpediaPrefab[]; - suits: StationpediaPrefab[]; - circuitHolders: StationpediaPrefab[]; -} - -const prefab_database = json_database as unknown as PrefabDatabase; - -const vm: VMRef = init(); - -const template_database = new Map( - Object.entries(prefab_database.prefabsByHash).map(([hash, name]) => { - return [parseInt(hash), prefab_database.prefabs[name]]; - }), -); - -console.info("Loading Prefab Template Database into VM", template_database); -const start_time = performance.now(); -vm.importTemplateDatabase(template_database); -const now = performance.now(); -const time_elapsed = (now - start_time) / 1000; -console.log(`Prefab Templat Database loaded in ${time_elapsed} seconds`); - -Comlink.expose(vm); diff --git a/xtask/src/generate/database.rs b/xtask/src/generate/database.rs index 38bb912..ff750c1 100644 --- a/xtask/src/generate/database.rs +++ b/xtask/src/generate/database.rs @@ -187,12 +187,16 @@ pub fn generate_database( circuit_holders, }; - let data_path = workspace.join("www").join("data"); + let data_path = workspace + .join("www") + .join("src") + .join("ts") + .join("virtual_machine"); if !data_path.exists() { std::fs::create_dir(&data_path)?; } { - let database_path = data_path.join("database.json"); + let database_path = data_path.join("prefabDatabase.ts"); let mut database_file = std::io::BufWriter::new(std::fs::File::create(database_path)?); let json = serde_json::to_string_pretty(&db)?; // this may seem anathema but I don't want to write a separate struct set to skip Nones @@ -205,9 +209,11 @@ pub fn generate_database( // // https://regex101.com/r/WFpjHV/1 // - let null_matcher = regex::Regex::new(r#"(?:,\n\s*"\w+":\snull)+(,?)|(?:(?:\n)?\s*"\w+":\snull),"#).unwrap(); + let null_matcher = + regex::Regex::new(r#"(?:,\n\s*"\w+":\snull)+(,?)|(?:(?:\n)?\s*"\w+":\snull),"#) + .unwrap(); let json = null_matcher.replace_all(&json, "$1"); - write!(&mut database_file, "{json}")?; + write!(&mut database_file, "export default {json} as const")?; database_file.flush()?; } @@ -236,11 +242,13 @@ fn write_prefab_map( use crate::templates::*; } )?; + let enum_tag_regex = regex::Regex::new(r#"templateType:\s"\w+"\.into\(\),"#).unwrap(); let entries = prefabs .values() .map(|prefab| { let hash = prefab.prefab().prefab_hash; - let obj = syn::parse_str::(&uneval::to_string(prefab)?)?; + let uneval_src = &uneval::to_string(prefab)?; + let obj = syn::parse_str::(&enum_tag_regex.replace_all(&uneval_src, ""))?; let entry = quote! { map.insert(#hash, #obj.into()); }; From 3da16d1f03cc79621c76809003ec30b1711a6efa Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sat, 1 Jun 2024 17:31:24 -0700 Subject: [PATCH 40/50] refactor(frontend): Maps are dea dlong live Objects, also delay main body render untill VM is fully loaded --- Cargo.lock | 2 + ic10emu_wasm/Cargo.toml | 1 + ic10emu_wasm/src/lib.rs | 39 +- stationeers_data/Cargo.toml | 1 + stationeers_data/src/templates.rs | 6 + www/src/ts/app/app.ts | 43 +- www/src/ts/index.ts | 2 +- www/src/ts/presets/demo.ts | 38 +- www/src/ts/session.ts | 348 ++--- .../baseDevice.ts | 88 +- .../controls.ts | 2 +- .../device/addDevice.ts} | 48 +- .../device/card.ts | 42 +- .../device/dbutils.ts | 0 .../device/deviceList.ts} | 4 +- .../device/fields.ts | 2 +- .../device/index.ts | 12 +- .../device/pins.ts | 2 +- .../device/slot.ts | 2 +- .../device/slotAddDialog.ts} | 24 +- .../device/template.ts | 102 +- .../index.ts | 19 +- .../prefabDatabase.ts | 2 +- .../registers.ts | 2 +- .../stack.ts | 4 +- .../{virtual_machine => virtualMachine}/ui.ts | 0 www/src/ts/virtualMachine/vmWorker.ts | 42 + www/src/ts/virtual_machine/vmWorker.ts | 1158 ----------------- 28 files changed, 550 insertions(+), 1485 deletions(-) rename www/src/ts/{virtual_machine => virtualMachine}/baseDevice.ts (87%) rename www/src/ts/{virtual_machine => virtualMachine}/controls.ts (99%) rename www/src/ts/{virtual_machine/device/add_device.ts => virtualMachine/device/addDevice.ts} (89%) rename www/src/ts/{virtual_machine => virtualMachine}/device/card.ts (94%) rename www/src/ts/{virtual_machine => virtualMachine}/device/dbutils.ts (100%) rename www/src/ts/{virtual_machine/device/device_list.ts => virtualMachine/device/deviceList.ts} (98%) rename www/src/ts/{virtual_machine => virtualMachine}/device/fields.ts (95%) rename www/src/ts/{virtual_machine => virtualMachine}/device/index.ts (53%) rename www/src/ts/{virtual_machine => virtualMachine}/device/pins.ts (95%) rename www/src/ts/{virtual_machine => virtualMachine}/device/slot.ts (99%) rename www/src/ts/{virtual_machine/device/slot_add_dialog.ts => virtualMachine/device/slotAddDialog.ts} (93%) rename www/src/ts/{virtual_machine => virtualMachine}/device/template.ts (85%) rename www/src/ts/{virtual_machine => virtualMachine}/index.ts (97%) rename www/src/ts/{virtual_machine => virtualMachine}/prefabDatabase.ts (99%) rename www/src/ts/{virtual_machine => virtualMachine}/registers.ts (97%) rename www/src/ts/{virtual_machine => virtualMachine}/stack.ts (94%) rename www/src/ts/{virtual_machine => virtualMachine}/ui.ts (100%) create mode 100644 www/src/ts/virtualMachine/vmWorker.ts delete mode 100644 www/src/ts/virtual_machine/vmWorker.ts diff --git a/Cargo.lock b/Cargo.lock index e87609c..a8ba1fc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -654,6 +654,7 @@ dependencies = [ "serde-wasm-bindgen", "serde_derive", "serde_ignored", + "serde_json", "serde_path_to_error", "serde_with", "stationeers_data", @@ -1440,6 +1441,7 @@ dependencies = [ "phf 0.11.2", "serde", "serde_derive", + "serde_with", "strum", "tsify", "wasm-bindgen", diff --git a/ic10emu_wasm/Cargo.toml b/ic10emu_wasm/Cargo.toml index 73264a6..8f08cae 100644 --- a/ic10emu_wasm/Cargo.toml +++ b/ic10emu_wasm/Cargo.toml @@ -25,6 +25,7 @@ serde_with = "3.8.1" tsify = { version = "0.4.5", features = ["json"] } thiserror = "1.0.61" serde_derive = "1.0.203" +serde_json = "1.0.117" [build-dependencies] ic10emu = { path = "../ic10emu" } diff --git a/ic10emu_wasm/src/lib.rs b/ic10emu_wasm/src/lib.rs index a087fb3..86cd082 100644 --- a/ic10emu_wasm/src/lib.rs +++ b/ic10emu_wasm/src/lib.rs @@ -137,8 +137,8 @@ impl VMRef { self.vm.import_template_database(db); } - #[wasm_bindgen(js_name = "importTemplateDatabaseSerde")] - pub fn import_template_database_serde(&self, db: JsValue) -> Result<(), JsError> { + #[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( @@ -148,6 +148,17 @@ impl VMRef { 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 { @@ -240,33 +251,33 @@ impl VMRef { Ok(self.vm.reset_programmable(id)?) } - #[wasm_bindgen(getter, js_name = "defaultNetwork")] - pub fn default_network(&self) -> ObjectID { + #[wasm_bindgen(js_name = "getDefaultNetwork")] + pub fn get_default_network(&self) -> ObjectID { *self.vm.default_network_key.borrow() } - #[wasm_bindgen(getter)] - pub fn objects(&self) -> Vec { + #[wasm_bindgen(js_name = "getObjects")] + pub fn get_objects(&self) -> Vec { self.vm.objects.borrow().keys().copied().collect_vec() } - #[wasm_bindgen(getter)] - pub fn networks(&self) -> Vec { + #[wasm_bindgen(js_name = "getNetworks")] + pub fn get_networks(&self) -> Vec { self.vm.networks.borrow().keys().copied().collect_vec() } - #[wasm_bindgen(getter)] - pub fn circuit_holders(&self) -> Vec { + #[wasm_bindgen(js_name = "getCircuitHolders")] + pub fn get_circuit_holders(&self) -> Vec { self.vm.circuit_holders.borrow().clone() } - #[wasm_bindgen(getter)] - pub fn program_holders(&self) -> Vec { + #[wasm_bindgen(js_name = "getProgramHolders")] + pub fn get_program_holders(&self) -> Vec { self.vm.program_holders.borrow().clone() } - #[wasm_bindgen(getter, js_name = "lastOperationModified")] - pub fn last_operation_modified(&self) -> Vec { + #[wasm_bindgen(js_name = "getLastOperationModified")] + pub fn get_last_operation_modified(&self) -> Vec { self.vm.last_operation_modified() } diff --git a/stationeers_data/Cargo.toml b/stationeers_data/Cargo.toml index 47caab2..4e72fcd 100644 --- a/stationeers_data/Cargo.toml +++ b/stationeers_data/Cargo.toml @@ -15,6 +15,7 @@ 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/templates.rs b/stationeers_data/src/templates.rs index d3eb3f4..8d1564c 100644 --- a/stationeers_data/src/templates.rs +++ b/stationeers_data/src/templates.rs @@ -5,6 +5,9 @@ use crate::enums::{ script::{LogicSlotType, LogicType}, ConnectionRole, ConnectionType, MachineTier, MemoryAccess, Species, }; + +use serde_with::{serde_as, DisplayFromStr, Map}; + use serde_derive::{Deserialize, Serialize}; #[cfg(feature = "tsify")] use tsify::Tsify; @@ -195,11 +198,14 @@ pub struct SlotInfo { pub typ: Class, } +#[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")] pub logic_slot_types: BTreeMap>, pub logic_types: BTreeMap, + #[serde_as( as = "Option>")] pub modes: Option>, pub transmission_receiver: bool, pub wireless_logic: bool, diff --git a/www/src/ts/app/app.ts b/www/src/ts/app/app.ts index cc5828d..3a7c53d 100644 --- a/www/src/ts/app/app.ts +++ b/www/src/ts/app/app.ts @@ -7,10 +7,10 @@ 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 "../virtual_machine/ui"; +import "../virtualMachine/ui"; import "./save"; import { SaveDialog } from "./save"; import "./welcome"; @@ -22,6 +22,7 @@ declare global { } import packageJson from "../../../package.json" +import { until } from "lit/directives/until.js"; @customElement("ic10emu-app") export class App extends BaseElement { @@ -83,20 +84,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 + + +

+
+
+ ` + )}
diff --git a/www/src/ts/index.ts b/www/src/ts/index.ts index 07daf7e..61798f8 100644 --- a/www/src/ts/index.ts +++ b/www/src/ts/index.ts @@ -111,6 +111,6 @@ window.App = new DeferedApp(); window.VM = new DeferedVM(); import type { App } from "./app"; -import type { VirtualMachine } from "./virtual_machine"; +import type { VirtualMachine } from "./virtualMachine"; import("./app"); diff --git a/www/src/ts/presets/demo.ts b/www/src/ts/presets/demo.ts index 03aed6f..09bc94c 100644 --- a/www/src/ts/presets/demo.ts +++ b/www/src/ts/presets/demo.ts @@ -72,9 +72,12 @@ export const demoVMState: SessionDB.CurrentDBVmState = { id: 1, prefab: "StructureCircuitHousing", socketed_ic: 2, - slots: new Map([[0, { id: 2, quantity: 1 }]]), - connections: new Map([[0, 1]]), - + slots: { + 0: { id: 2, quantity: 1 }, + }, + connections: { + 0: 1, + }, // unused, provided to make compiler happy name: undefined, prefab_hash: undefined, @@ -88,7 +91,7 @@ export const demoVMState: SessionDB.CurrentDBVmState = { visible_devices: undefined, memory: undefined, source_code: undefined, - circuit: undefined + circuit: undefined, }, template: undefined, database_template: true, @@ -103,10 +106,10 @@ export const demoVMState: SessionDB.CurrentDBVmState = { instruction_pointer: 0, yield_instruction_count: 0, state: "Start", - aliases: new Map(), - defines: new Map(), - labels: new Map(), - registers: new Array(18).fill(0) + aliases: {}, + defines: {}, + labels: {}, + registers: new Array(18).fill(0), }, // unused, provided to make compiler happy @@ -125,16 +128,25 @@ export const demoVMState: SessionDB.CurrentDBVmState = { visible_devices: undefined, }, template: undefined, - database_template: true - } + database_template: true, + }, ], networks: [ { id: 1, devices: [1], power_only: [], - channels: Array(8).fill(NaN) as [number, number, number, number, number, number, number, number], - } + channels: Array(8).fill(NaN) as [ + number, + number, + number, + number, + number, + number, + number, + number, + ], + }, ], program_holders: [2], circuit_holders: [1], @@ -143,4 +155,4 @@ export const demoVMState: SessionDB.CurrentDBVmState = { wireless_transmitters: [], }, activeIC: 1, -} +}; diff --git a/www/src/ts/session.ts b/www/src/ts/session.ts index d02f15c..641e510 100644 --- a/www/src/ts/session.ts +++ b/www/src/ts/session.ts @@ -1,19 +1,39 @@ -import type { ICError, FrozenVM, RegisterSpec, DeviceSpec, LogicType, LogicSlotType, LogicField, Class as SlotType, FrozenCableNetwork, FrozenObject, ObjectInfo, ICState, ObjectID } from "ic10emu_wasm"; +import type { + ICError, + FrozenVM, + RegisterSpec, + DeviceSpec, + LogicType, + LogicSlotType, + LogicField, + Class as SlotType, + FrozenCableNetwork, + FrozenObject, + ObjectInfo, + ICState, + ObjectID, +} from "ic10emu_wasm"; import { App } from "./app"; import { openDB, DBSchema, IDBPTransaction, IDBPDatabase } from "idb"; -import { TypedEventTarget, crc32, dispatchTypedEvent, fromJson, toJson } from "./utils"; +import { + TypedEventTarget, + crc32, + dispatchTypedEvent, + fromJson, + toJson, +} from "./utils"; import * as presets from "./presets"; const { demoVMState } = presets; export interface SessionEventMap { - "sessions-local-update": CustomEvent, - "session-active-ic": CustomEvent, - "session-id-change": CustomEvent<{ old: ObjectID, new: ObjectID }>, - "session-errors": CustomEvent, - "session-load": CustomEvent, - "active-line": CustomEvent, + "sessions-local-update": CustomEvent; + "session-active-ic": CustomEvent; + "session-id-change": CustomEvent<{ old: ObjectID; new: ObjectID }>; + "session-errors": CustomEvent; + "session-load": CustomEvent; + "active-line": CustomEvent; } export class Session extends TypedEventTarget() { @@ -66,16 +86,14 @@ export class Session extends TypedEventTarget() { this.programs.set(newID, this.programs.get(oldID)); this.programs.delete(oldID); } - this.dispatchCustomEvent("session-id-change", { old: oldID, new: newID }) + this.dispatchCustomEvent("session-id-change", { old: oldID, new: newID }); } - onIDChange( - callback: (e: CustomEvent<{ old: number; new: number }>) => any, - ) { + onIDChange(callback: (e: CustomEvent<{ old: number; new: number }>) => any) { this.addEventListener("session-id-change", callback); } - onActiveIc(callback: (e: CustomEvent) => any,) { + onActiveIc(callback: (e: CustomEvent) => any) { this.addEventListener("session-active-ic", callback); } @@ -168,8 +186,9 @@ export class Session extends TypedEventTarget() { // assign first so it's present when the // vm fires events this._activeIC = data.activeIC; - this.app.vm.restoreVMState(state); - this.programs = this.app.vm.getPrograms(); + const vm = await window.VM.get() + await vm.restoreVMState(state); + this.programs = vm.getPrograms(); // assign again to fire event this.activeIC = data.activeIC; } @@ -205,31 +224,36 @@ export class Session extends TypedEventTarget() { } async openIndexDB() { - return await openDB("ic10-vm-sessions", SessionDB.LOCAL_DB_VERSION, { - async upgrade(db, oldVersion, newVersion, transaction, event) { - if (oldVersion < SessionDB.DBVersion.V1) { - const sessionStore = db.createObjectStore("sessions"); - sessionStore.createIndex("by-date", "date"); - sessionStore.createIndex("by-name", "name"); - } - if (oldVersion < SessionDB.DBVersion.V2) { - const v1Transaction = transaction as unknown as IDBPTransaction; - const v1SessionStore = v1Transaction.objectStore("sessions"); - const v1Sessions = await v1SessionStore.getAll(); - const v2SessionStore = db.createObjectStore("sessionsV2"); - v2SessionStore.createIndex("by-date", "date"); - v2SessionStore.createIndex("by-name", "name"); - for (const v1Session of v1Sessions) { - await v2SessionStore.add({ - name: v1Session.name, - date: v1Session.date, - version: SessionDB.DBVersion.V2, - session: SessionDB.V2.fromV1State(v1Session.session) - }) + return await openDB( + "ic10-vm-sessions", + SessionDB.LOCAL_DB_VERSION, + { + async upgrade(db, oldVersion, newVersion, transaction, event) { + if (oldVersion < SessionDB.DBVersion.V1) { + const sessionStore = db.createObjectStore("sessions"); + sessionStore.createIndex("by-date", "date"); + sessionStore.createIndex("by-name", "name"); } - } + if (oldVersion < SessionDB.DBVersion.V2) { + const v1Transaction = + transaction as unknown as IDBPTransaction; + const v1SessionStore = v1Transaction.objectStore("sessions"); + const v1Sessions = await v1SessionStore.getAll(); + const v2SessionStore = db.createObjectStore("sessionsV2"); + v2SessionStore.createIndex("by-date", "date"); + v2SessionStore.createIndex("by-name", "name"); + for (const v1Session of v1Sessions) { + await v2SessionStore.add({ + name: v1Session.name, + date: v1Session.date, + version: SessionDB.DBVersion.V2, + session: SessionDB.V2.fromV1State(v1Session.session), + }); + } + } + }, }, - }); + ); } async saveLocal(name: string) { @@ -238,8 +262,13 @@ export class Session extends TypedEventTarget() { activeIC: this.activeIC, }; const db = await this.openIndexDB(); - const transaction = db.transaction([SessionDB.LOCAL_DB_SESSION_STORE], "readwrite"); - const sessionStore = transaction.objectStore(SessionDB.LOCAL_DB_SESSION_STORE); + const transaction = db.transaction( + [SessionDB.LOCAL_DB_SESSION_STORE], + "readwrite", + ); + const sessionStore = transaction.objectStore( + SessionDB.LOCAL_DB_SESSION_STORE, + ); await sessionStore.put( { name, @@ -263,8 +292,13 @@ export class Session extends TypedEventTarget() { async deleteLocalSave(name: string) { const db = await this.openIndexDB(); - const transaction = db.transaction([SessionDB.LOCAL_DB_SESSION_STORE], "readwrite"); - const sessionStore = transaction.objectStore(SessionDB.LOCAL_DB_SESSION_STORE); + const transaction = db.transaction( + [SessionDB.LOCAL_DB_SESSION_STORE], + "readwrite", + ); + const sessionStore = transaction.objectStore( + SessionDB.LOCAL_DB_SESSION_STORE, + ); await sessionStore.delete(name); this.dispatchCustomEvent("sessions-local-update"); } @@ -276,9 +310,7 @@ export class Session extends TypedEventTarget() { } export namespace SessionDB { - export namespace V1 { - export interface VMState { activeIC: number; vm: FrozenVM; @@ -306,14 +338,14 @@ export namespace SessionDB { export type DeviceSpec = { readonly DeviceSpec: { readonly device: - | "Db" - | { readonly Numbered: number } - | { - readonly Indirect: { - readonly indirection: number; - readonly target: number; - }; - }; + | "Db" + | { readonly Numbered: number } + | { + readonly Indirect: { + readonly indirection: number; + readonly target: number; + }; + }; readonly connection: number | undefined; }; }; @@ -363,11 +395,9 @@ export namespace SessionDB { state: string; code: string; } - } export namespace V2 { - export interface VMState { activeIC: number; vm: FrozenVM; @@ -387,9 +417,9 @@ export namespace SessionDB { instruction_pointer: ic.ip, yield_instruction_count: ic.ic, state: ic.state as ICState, - aliases: ic.aliases, - defines: ic.defines, - labels: new Map(), + aliases: Object.fromEntries(ic.aliases.entries()), + defines: Object.fromEntries(ic.defines.entries()), + labels: {}, registers: ic.registers, }, @@ -407,110 +437,135 @@ export namespace SessionDB { }, database_template: true, template: undefined, - } + }; } - function objectsFromV1Template(template: SessionDB.V1.DeviceTemplate, idFn: () => number, socketedIcFn: (id: number) => number | undefined): FrozenObject[] { - const slotOccupantsPairs = new Map(template.slots.flatMap((slot, index) => { - if (typeof slot.occupant !== "undefined") { - return [ - [ - index, + function objectsFromV1Template( + template: SessionDB.V1.DeviceTemplate, + idFn: () => number, + socketedIcFn: (id: number) => number | undefined, + ): FrozenObject[] { + const slotOccupantsPairs = new Map( + template.slots.flatMap((slot, index) => { + if (typeof slot.occupant !== "undefined") { + return [ [ - { - obj_info: { - name: undefined, - id: slot.occupant.id ?? idFn(), - prefab: undefined, - prefab_hash: slot.occupant.fields.PrefabHash?.value, - damage: slot.occupant.fields.Damage?.value, + index, + [ + { + obj_info: { + name: undefined, + id: slot.occupant.id ?? idFn(), + prefab: undefined, + prefab_hash: slot.occupant.fields.PrefabHash?.value, + damage: slot.occupant.fields.Damage?.value, - socketed_ic: undefined, - // unused - memory: undefined, - source_code: undefined, - compile_errors: undefined, - circuit: undefined, - slots: undefined, - device_pins: undefined, - connections: undefined, - reagents: undefined, - logic_values: undefined, - slot_logic_values: undefined, - entity: undefined, - visible_devices: undefined, + socketed_ic: undefined, + // unused + memory: undefined, + source_code: undefined, + compile_errors: undefined, + circuit: undefined, + slots: undefined, + device_pins: undefined, + connections: undefined, + reagents: undefined, + logic_values: undefined, + slot_logic_values: undefined, + entity: undefined, + visible_devices: undefined, + }, + database_template: true, + template: undefined, }, - database_template: true, - template: undefined - }, - slot.occupant.fields.Quantity ?? 1 - ] - ] - ] as [number, [FrozenObject, number]][]; - } else { - return [] as [number, [FrozenObject, number]][]; - } - })); - return [ - ...Array.from(slotOccupantsPairs.entries()).map(([_index, [obj, _quantity]]) => obj), - { - obj_info: { - name: template.name, - id: template.id, - prefab: template.prefab_name, - prefab_hash: undefined, - slots: new Map( - Array.from(slotOccupantsPairs.entries()) - .map(([index, [obj, quantity]]) => [index, { + slot.occupant.fields.Quantity ?? 1, + ], + ], + ] as [number, [FrozenObject, number]][]; + } else { + return [] as [number, [FrozenObject, number]][]; + } + }), + ); + const frozen: FrozenObject = { + obj_info: { + name: template.name, + id: template.id, + prefab: template.prefab_name, + prefab_hash: undefined, + slots: Object.fromEntries( + Array.from(slotOccupantsPairs.entries()).map( + ([index, [obj, quantity]]) => [ + index, + { quantity, id: obj.obj_info.id, - }]) + }, + ], ), - socketed_ic: socketedIcFn(template.id), + ), + socketed_ic: socketedIcFn(template.id), - logic_values: new Map(Object.entries(template.fields).map(([key, val]) => { - return [key as LogicType, val.value] - })), + logic_values: Object.fromEntries( + Object.entries(template.fields).map(([key, val]) => { + return [key, val.value]; + }), + ) as Record, - // unused - memory: undefined, - source_code: undefined, - compile_errors: undefined, - circuit: undefined, - damage: undefined, - device_pins: undefined, - connections: undefined, - reagents: undefined, - slot_logic_values: undefined, - entity: undefined, - visible_devices: undefined, - - }, - database_template: true, - template: undefined, - } + // unused + memory: undefined, + source_code: undefined, + compile_errors: undefined, + circuit: undefined, + damage: undefined, + device_pins: undefined, + connections: undefined, + reagents: undefined, + slot_logic_values: undefined, + entity: undefined, + visible_devices: undefined, + }, + database_template: true, + template: undefined, + }; + return [ + ...Array.from(slotOccupantsPairs.entries()).map( + ([_index, [obj, _quantity]]) => obj, + ), + frozen, ]; } export function fromV1State(v1State: SessionDB.V1.VMState): VMState { - const highestObjetId = Math.max(... - v1State.vm - .devices - .map(device => device.id ?? -1) - .concat( - v1State.vm - .ics - .map(ic => ic.id ?? -1) - ) + const highestObjetId = Math.max( + ...v1State.vm.devices + .map((device) => device.id ?? -1) + .concat(v1State.vm.ics.map((ic) => ic.id ?? -1)), ); let nextId = highestObjetId + 1; - const deviceIcs = new Map(v1State.vm.ics.map(ic => [ic.device, objectFromIC(ic)])); - const objects = v1State.vm.devices.flatMap(device => { - return objectsFromV1Template(device, () => nextId++, (id) => deviceIcs.get(id)?.obj_info.id ?? undefined) - }) + const deviceIcs = new Map( + v1State.vm.ics.map((ic) => [ic.device, objectFromIC(ic)]), + ); + const objects = v1State.vm.devices.flatMap((device) => { + return objectsFromV1Template( + device, + () => nextId++, + (id) => deviceIcs.get(id)?.obj_info.id ?? undefined, + ); + }); const vm: FrozenVM = { objects, - circuit_holders: objects.flatMap(obj => "socketed_ic" in obj.obj_info && typeof obj.obj_info.socketed_ic !== "undefined" ? [obj.obj_info.id] : []), - program_holders: objects.flatMap(obj => "source_code" in obj.obj_info && typeof obj.obj_info.source_code !== "undefined" ? [obj.obj_info.id] : []), + circuit_holders: objects.flatMap((obj) => + "socketed_ic" in obj.obj_info && + typeof obj.obj_info.socketed_ic !== "undefined" + ? [obj.obj_info.id] + : [], + ), + program_holders: objects.flatMap((obj) => + "source_code" in obj.obj_info && + typeof obj.obj_info.source_code !== "undefined" + ? [obj.obj_info.id] + : [], + ), default_network_key: v1State.vm.default_network, networks: v1State.vm.networks as FrozenCableNetwork[], wireless_receivers: [], @@ -522,7 +577,6 @@ export namespace SessionDB { }; return v2State; } - } export enum DBVersion { @@ -533,7 +587,7 @@ export namespace SessionDB { export const LOCAL_DB_VERSION = DBVersion.V2 as const; export type CurrentDBSchema = AppDBSchemaV2; export type CurrentDBVmState = V2.VMState; - export const LOCAL_DB_SESSION_STORE = "sessionsV2" as const + export const LOCAL_DB_SESSION_STORE = "sessionsV2" as const; export interface AppDBSchemaV1 extends DBSchema { sessions: { @@ -579,8 +633,6 @@ export namespace SessionDB { } } - - export interface OldPrograms { programs: [number, string][]; } diff --git a/www/src/ts/virtual_machine/baseDevice.ts b/www/src/ts/virtualMachine/baseDevice.ts similarity index 87% rename from www/src/ts/virtual_machine/baseDevice.ts rename to www/src/ts/virtualMachine/baseDevice.ts index 6f910bb..0d84630 100644 --- a/www/src/ts/virtual_machine/baseDevice.ts +++ b/www/src/ts/virtualMachine/baseDevice.ts @@ -260,17 +260,22 @@ export const VMObjectMixin = >( ) ) { const logicValues = - this.obj.obj_info.logic_values ?? new Map(); + this.obj.obj_info.logic_values != null + ? (new Map(Object.entries(this.obj.obj_info.logic_values)) as Map< + LogicType, + number + >) + : null; const logicTemplate = "logic" in this.obj.template ? this.obj.template.logic : null; newFields = new Map( - Array.from(logicTemplate?.logic_types.entries() ?? []).map( + Array.from(Object.entries(logicTemplate?.logic_types) ?? []).map( ([lt, access]) => { let field: LogicField = { field_type: access, - value: logicValues.get(lt) ?? 0, + value: logicValues.get(lt as LogicType) ?? 0, }; - return [lt, field]; + return [lt as LogicType, field]; }, ), ); @@ -289,25 +294,44 @@ export const VMObjectMixin = >( ) ) { const slotsOccupantInfo = - this.obj.obj_info.slots ?? new Map(); + this.obj.obj_info.slots != null + ? new Map( + Object.entries(this.obj.obj_info.slots).map(([key, val]) => [ + parseInt(key), + val, + ]), + ) + : null; const slotsLogicValues = - this.obj.obj_info.slot_logic_values ?? - new Map>(); + this.obj.obj_info.slot_logic_values != null + ? new Map>( + Object.entries(this.obj.obj_info.slot_logic_values).map( + ([index, values]) => [ + parseInt(index), + new Map(Object.entries(values)) as Map< + LogicSlotType, + number + >, + ], + ), + ) + : null; const logicTemplate = "logic" in this.obj.template ? this.obj.template.logic : null; const slotsTemplate = "slots" in this.obj.template ? this.obj.template.slots : []; newSlots = slotsTemplate.map((template, index) => { const fieldEntryInfos = Array.from( - logicTemplate?.logic_slot_types.get(index).entries() ?? [], + Object.entries(logicTemplate?.logic_slot_types[index]) ?? [], ); const logicFields = new Map( fieldEntryInfos.map(([slt, access]) => { let field: LogicField = { field_type: access, - value: slotsLogicValues.get(index)?.get(slt) ?? 0, + value: + slotsLogicValues.get(index)?.get(slt as LogicSlotType) ?? 0, }; - return [slt, field]; + return [slt as LogicSlotType, field]; }), ); let occupantInfo = slotsOccupantInfo.get(index); @@ -366,12 +390,26 @@ export const VMObjectMixin = >( this.slotsCount = slotsCount; } } else if (sub === "reagents") { - const reagents = this.obj.obj_info.reagents; + const reagents = + this.obj.obj_info.reagents != null + ? new Map( + Object.entries(this.obj.obj_info.reagents).map( + ([key, val]) => [parseInt(key), val], + ), + ) + : null; if (!structuralEqual(this.reagents, reagents)) { this.reagents = reagents; } } else if (sub === "connections") { - const connectionsMap = this.obj.obj_info.connections ?? new Map(); + const connectionsMap = + this.obj.obj_info.connections != null + ? new Map( + Object.entries(this.obj.obj_info.connections).map( + ([key, val]) => [parseInt(key), val], + ), + ) + : null; const connectionList = "device" in this.obj.template ? this.obj.template.device.connection_list @@ -483,15 +521,31 @@ export const VMObjectMixin = >( if (!structuralEqual(this.registers, registers)) { this.registers = registers; } - const aliases = this.obj.obj_info.circuit?.aliases ?? null; + const aliases = + this.obj.obj_info.circuit?.aliases != null + ? new Map(Object.entries(this.obj.obj_info.circuit.aliases)) + : null; if (!structuralEqual(this.aliases, aliases)) { this.aliases = aliases; } - const defines = this.obj.obj_info.circuit?.defines ?? null; + const defines = + this.obj.obj_info.circuit?.defines != null + ? new Map( + Object.entries(this.obj.obj_info.circuit.defines), + // .map(([key, val]) => []) + ) + : null; if (!structuralEqual(this.defines, defines)) { - this.defines = defines; + this.defines = new Map(defines); } - const pins = this.obj.obj_info.device_pins ?? new Map(); + const pins = + this.obj.obj_info.device_pins != null + ? new Map( + Object.entries(this.obj.obj_info.device_pins).map( + ([key, val]) => [parseInt(key), val], + ), + ) + : null; if (!structuralEqual(this.pins, pins)) { this.pins = pins; this.numPins = @@ -590,7 +644,7 @@ export const VMTemplateDBMixin = >( return this._templateDB; } - postDBSetUpdate(): void { } + postDBSetUpdate(): void {} @state() set templateDB(val: TemplateDatabase) { diff --git a/www/src/ts/virtual_machine/controls.ts b/www/src/ts/virtualMachine/controls.ts similarity index 99% rename from www/src/ts/virtual_machine/controls.ts rename to www/src/ts/virtualMachine/controls.ts index 7b65585..4a712d0 100644 --- a/www/src/ts/virtual_machine/controls.ts +++ b/www/src/ts/virtualMachine/controls.ts @@ -1,7 +1,7 @@ import { html, css } from "lit"; import { customElement, query } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMActiveICMixin } from "virtual_machine/baseDevice"; +import { VMActiveICMixin } from "virtualMachine/baseDevice"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.js"; diff --git a/www/src/ts/virtual_machine/device/add_device.ts b/www/src/ts/virtualMachine/device/addDevice.ts similarity index 89% rename from www/src/ts/virtual_machine/device/add_device.ts rename to www/src/ts/virtualMachine/device/addDevice.ts index 3591423..f824483 100644 --- a/www/src/ts/virtual_machine/device/add_device.ts +++ b/www/src/ts/virtualMachine/device/addDevice.ts @@ -10,7 +10,7 @@ import { cache } from "lit/directives/cache.js"; import { default as uFuzzy } from "@leeoniya/ufuzzy"; import { when } from "lit/directives/when.js"; import { unsafeHTML } from "lit/directives/unsafe-html.js"; -import { VMTemplateDBMixin } from "virtual_machine/baseDevice"; +import { VMTemplateDBMixin } from "virtualMachine/baseDevice"; import { LogicInfo, ObjectTemplate, StructureInfo } from "ic10emu_wasm"; type LogicableStrucutureTemplate = Extract< @@ -44,7 +44,7 @@ export class VMAddDeviceButton extends VMTemplateDBMixin(BaseElement) { postDBSetUpdate(): void { this._structures = new Map( - Array.from(this.templateDB.values()).flatMap((template) => { + Array.from(Object.values(this.templateDB)).flatMap((template) => { if ("structure" in template && "logic" in template) { return [[template.prefab.prefab_name, template]] as [ string, @@ -162,7 +162,7 @@ export class VMAddDeviceButton extends VMTemplateDBMixin(BaseElement) { } return when( typeof this._searchResults !== "undefined" && - this._searchResults.length < 20, + this._searchResults.length < 20, () => repeat( this._searchResults ?? [], @@ -189,33 +189,33 @@ export class VMAddDeviceButton extends VMTemplateDBMixin(BaseElement) {
Page: ${pageKeys.map( - (key, index) => html` + (key, index) => html` ${key + 1}${index < totalPages - 1 ? "," : ""} `, - )} + )}
${[ - ...this._searchResults.slice( - perPage * this.page, - perPage * this.page + perPage, - ), - ...extra, - ].map((result) => { - let hay = result.haystackEntry.slice(0, 15); - if (result.haystackEntry.length > 15) hay += "..."; - const ranges = result.ranges.filter((pos) => pos < 20); - const key = result.entry.prefab.prefab_name; - return html` + ...this._searchResults.slice( + perPage * this.page, + perPage * this.page + perPage, + ), + ...extra, + ].map((result) => { + let hay = result.haystackEntry.slice(0, 15); + if (result.haystackEntry.length > 15) hay += "..."; + const ranges = result.ranges.filter((pos) => pos < 20); + const key = result.entry.prefab.prefab_name; + return html`
${result.entry.prefab.name} ( ${ranges.length - ? unsafeHTML(uFuzzy.highlight(hay, ranges)) - : hay} )
`; - })} + })}
`, @@ -284,8 +284,8 @@ export class VMAddDeviceButton extends VMTemplateDBMixin(BaseElement) { slot="footer" variant="primary" @click=${() => { - this.drawer.hide(); - }} + this.drawer.hide(); + }} > Close diff --git a/www/src/ts/virtual_machine/device/card.ts b/www/src/ts/virtualMachine/device/card.ts similarity index 94% rename from www/src/ts/virtual_machine/device/card.ts rename to www/src/ts/virtualMachine/device/card.ts index 3bc2bdd..8f79967 100644 --- a/www/src/ts/virtual_machine/device/card.ts +++ b/www/src/ts/virtualMachine/device/card.ts @@ -1,7 +1,7 @@ import { html, css, HTMLTemplateResult } from "lit"; import { customElement, property, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMTemplateDBMixin, VMObjectMixin } from "virtual_machine/baseDevice"; +import { VMTemplateDBMixin, VMObjectMixin } from "virtualMachine/baseDevice"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; import { parseIntWithHexOrBinary, parseNumber } from "utils"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; @@ -148,8 +148,14 @@ export class VMDeviceCard extends VMTemplateDBMixin( "device" in activeIc?.template ? activeIc.template.device.device_pins_length : Math.max( - ...Array.from(activeIc?.obj_info.device_pins?.keys() ?? [0]), - ); + ...Array.from( + activeIc?.obj_info.device_pins != null + ? Object.keys(activeIc?.obj_info.device_pins).map((key) => + parseInt(key), + ) + : [0], + ), + ); const pins = new Array(numPins) .fill(true) .map((_, index) => this.pins.get(index)); @@ -217,8 +223,8 @@ export class VMDeviceCard extends VMTemplateDBMixin(
${repeat( - this.slots, - (slot, index) => slot.typ + index.toString(), - (_slot, index) => html` + this.slots, + (slot, index) => slot.typ + index.toString(), + (_slot, index) => html` `, - )} + )}
`, ); @@ -287,11 +293,11 @@ export class VMDeviceCard extends VMTemplateDBMixin( > Connection:${index} ${vmNetworks.map( - (net) => - html` + html`Network ${net}`, - )} + )} ${conn?.typ} `; @@ -318,12 +324,12 @@ export class VMDeviceCard extends VMTemplateDBMixin( resolver?: (result: HTMLTemplateResult) => void; }; } = { - fields: {}, - slots: {}, - reagents: {}, - networks: {}, - pins: {}, - }; + fields: {}, + slots: {}, + reagents: {}, + networks: {}, + pins: {}, + }; delayRenderTab( name: CardTab, diff --git a/www/src/ts/virtual_machine/device/dbutils.ts b/www/src/ts/virtualMachine/device/dbutils.ts similarity index 100% rename from www/src/ts/virtual_machine/device/dbutils.ts rename to www/src/ts/virtualMachine/device/dbutils.ts diff --git a/www/src/ts/virtual_machine/device/device_list.ts b/www/src/ts/virtualMachine/device/deviceList.ts similarity index 98% rename from www/src/ts/virtual_machine/device/device_list.ts rename to www/src/ts/virtualMachine/device/deviceList.ts index bac5259..e9ef09f 100644 --- a/www/src/ts/virtual_machine/device/device_list.ts +++ b/www/src/ts/virtualMachine/device/deviceList.ts @@ -7,8 +7,8 @@ import { structuralEqual } from "utils"; import { repeat } from "lit/directives/repeat.js"; import { default as uFuzzy } from "@leeoniya/ufuzzy"; -import { VMSlotAddDialog } from "./slot_add_dialog"; -import "./add_device" +import { VMSlotAddDialog } from "./slotAddDialog"; +import "./addDevice" import { SlotModifyEvent } from "./slot"; @customElement("vm-device-list") diff --git a/www/src/ts/virtual_machine/device/fields.ts b/www/src/ts/virtualMachine/device/fields.ts similarity index 95% rename from www/src/ts/virtual_machine/device/fields.ts rename to www/src/ts/virtualMachine/device/fields.ts index ea2d432..7016872 100644 --- a/www/src/ts/virtual_machine/device/fields.ts +++ b/www/src/ts/virtualMachine/device/fields.ts @@ -1,7 +1,7 @@ import { html, css } from "lit"; import { customElement, property } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMTemplateDBMixin, VMObjectMixin } from "virtual_machine/baseDevice"; +import { VMTemplateDBMixin, VMObjectMixin } from "virtualMachine/baseDevice"; import { displayNumber, parseNumber } from "utils"; import type { LogicType } from "ic10emu_wasm"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; diff --git a/www/src/ts/virtual_machine/device/index.ts b/www/src/ts/virtualMachine/device/index.ts similarity index 53% rename from www/src/ts/virtual_machine/device/index.ts rename to www/src/ts/virtualMachine/device/index.ts index 4b1d15a..2920e00 100644 --- a/www/src/ts/virtual_machine/device/index.ts +++ b/www/src/ts/virtualMachine/device/index.ts @@ -1,15 +1,15 @@ import "./template" import "./card" -import "./device_list" -import "./add_device" -import "./slot_add_dialog" +import "./deviceList" +import "./addDevice" +import "./slotAddDialog" import "./slot" import { VmObjectTemplate } from "./template"; import { VMDeviceCard } from "./card"; -import { VMDeviceList } from "./device_list"; -import { VMAddDeviceButton } from "./add_device"; -import { VMSlotAddDialog } from "./slot_add_dialog"; +import { VMDeviceList } from "./deviceList"; +import { VMAddDeviceButton } from "./addDevice"; +import { VMSlotAddDialog } from "./slotAddDialog"; export { VMDeviceCard, VmObjectTemplate as VmDeviceTemplate, VMDeviceList, VMAddDeviceButton, VMSlotAddDialog }; diff --git a/www/src/ts/virtual_machine/device/pins.ts b/www/src/ts/virtualMachine/device/pins.ts similarity index 95% rename from www/src/ts/virtual_machine/device/pins.ts rename to www/src/ts/virtualMachine/device/pins.ts index 86595c8..93d47e7 100644 --- a/www/src/ts/virtual_machine/device/pins.ts +++ b/www/src/ts/virtualMachine/device/pins.ts @@ -1,7 +1,7 @@ import { html, css } from "lit"; import { customElement, property } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMTemplateDBMixin, VMObjectMixin } from "virtual_machine/baseDevice"; +import { VMTemplateDBMixin, VMObjectMixin } from "virtualMachine/baseDevice"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; import { ObjectID } from "ic10emu_wasm"; diff --git a/www/src/ts/virtual_machine/device/slot.ts b/www/src/ts/virtualMachine/device/slot.ts similarity index 99% rename from www/src/ts/virtual_machine/device/slot.ts rename to www/src/ts/virtualMachine/device/slot.ts index 2ef6351..82ab084 100644 --- a/www/src/ts/virtual_machine/device/slot.ts +++ b/www/src/ts/virtualMachine/device/slot.ts @@ -1,7 +1,7 @@ import { html, css } from "lit"; import { customElement, property} from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMTemplateDBMixin, VMObjectMixin } from "virtual_machine/baseDevice"; +import { VMTemplateDBMixin, VMObjectMixin } from "virtualMachine/baseDevice"; import { clamp, crc32, diff --git a/www/src/ts/virtual_machine/device/slot_add_dialog.ts b/www/src/ts/virtualMachine/device/slotAddDialog.ts similarity index 93% rename from www/src/ts/virtual_machine/device/slot_add_dialog.ts rename to www/src/ts/virtualMachine/device/slotAddDialog.ts index 67dacc2..de6fd41 100644 --- a/www/src/ts/virtual_machine/device/slot_add_dialog.ts +++ b/www/src/ts/virtualMachine/device/slotAddDialog.ts @@ -1,7 +1,7 @@ import { html, css } from "lit"; import { customElement, property, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMTemplateDBMixin } from "virtual_machine/baseDevice"; +import { VMTemplateDBMixin } from "virtualMachine/baseDevice"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; import SlDialog from "@shoelace-style/shoelace/dist/components/dialog/dialog.component.js"; import { VMDeviceCard } from "./card"; @@ -62,7 +62,7 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { postDBSetUpdate(): void { this._items = new Map( - Array.from(this.templateDB.values()).flatMap((template) => { + Array.from(Object.values(this.templateDB)).flatMap((template) => { if ("item" in template) { return [[template.prefab.prefab_name, template]] as [ string, @@ -160,15 +160,15 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) {
${enableNone ? none : ""} ${this._searchResults.map((result) => { - const imgSrc = `img/stationpedia/${result.entry.prefab.prefab_name}.png`; - const img = html` + const imgSrc = `img/stationpedia/${result.entry.prefab.prefab_name}.png`; + const img = html` `; - return html` + return html`
${result.entry.prefab.name}
`; - })} + })} `; } @@ -191,7 +191,7 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { _handleClickItem(e: Event) { const div = e.currentTarget as HTMLDivElement; const key = parseInt(div.getAttribute("key")); - const entry = this.templateDB.get(key) as SlotableItemTemplate; + const entry = this.templateDB[key] as SlotableItemTemplate; const obj = window.VM.vm.objects.get(this.objectID); const dbTemplate = obj.template; console.log("using entry", dbTemplate); @@ -231,15 +231,15 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { ${when( - typeof this.objectID !== "undefined" && - typeof this.slotIndex !== "undefined", - () => html` + typeof this.objectID !== "undefined" && + typeof this.slotIndex !== "undefined", + () => html`
${this.renderSearchResults()}
`, - () => html``, - )} + () => html``, + )} `; } diff --git a/www/src/ts/virtual_machine/device/template.ts b/www/src/ts/virtualMachine/device/template.ts similarity index 85% rename from www/src/ts/virtual_machine/device/template.ts rename to www/src/ts/virtualMachine/device/template.ts index eb79b41..5970b77 100644 --- a/www/src/ts/virtual_machine/device/template.ts +++ b/www/src/ts/virtualMachine/device/template.ts @@ -24,12 +24,12 @@ import { crc32, displayNumber, parseNumber } from "utils"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; import { VMDeviceCard } from "./card"; -import { VMTemplateDBMixin } from "virtual_machine/baseDevice"; +import { VMTemplateDBMixin } from "virtualMachine/baseDevice"; export interface SlotTemplate { - typ: Class - quantity: number, - occupant?: FrozenObject, + typ: Class; + quantity: number; + occupant?: FrozenObject; } export interface ConnectionCableNetwork { @@ -42,7 +42,6 @@ export interface ConnectionCableNetwork { @customElement("vm-device-template") export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { - static styles = [ ...defaultCss, css` @@ -91,7 +90,6 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { private _prefabName: string; private _prefabHash: number; - get prefabName(): string { return this._prefabName; } @@ -107,7 +105,7 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { } get dbTemplate(): ObjectTemplate { - return this.templateDB.get(this._prefabHash); + return this.templateDB[this._prefabHash]; } setupState() { @@ -117,7 +115,7 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { ( Array.from( "logic" in dbTemplate - ? dbTemplate.logic.logic_types.entries() ?? [] + ? Object.entries(dbTemplate.logic.logic_types) : [], ) as [LogicType, MemoryAccess][] ).map(([lt, access]) => { @@ -156,14 +154,15 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { this.connections = connections.map((conn) => conn[1]); - const numPins = "device" in dbTemplate ? dbTemplate.device.device_pins_length : 0; + const numPins = + "device" in dbTemplate ? dbTemplate.device.device_pins_length : 0; this.pins = new Array(numPins).fill(undefined); } renderFields(): HTMLTemplateResult { const fields = Object.entries(this.fields); return html` ${fields.map(([name, field], _index, _fields) => { - return html` + return html` ${field.field_type} `; - })} + })} `; } @@ -209,11 +208,11 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { return html`
${connections.map((connection, index, _conns) => { - const conn = - typeof connection === "object" && "CableNetwork" in connection - ? connection.CableNetwork - : null; - return html` + const conn = + typeof connection === "object" && "CableNetwork" in connection + ? connection.CableNetwork + : null; + return html` Connection:${index} ${vmNetworks.map( - (net) => - html`Network ${net}`, - )} + (net) => + html`Network ${net}`, + )} ${conn?.typ} `; - })} + })}
`; } @@ -270,13 +269,13 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { > d${index} ${visibleDevices.map( - (device, _index) => html` + (device, _index) => html` Device ${device.obj_info.id} : ${device.obj_info.name ?? device.obj_info.prefab} `, - )} + )} `, ); return html`
${pinsHtml}
`; @@ -286,7 +285,7 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { const select = e.target as SlSelect; const pin = parseInt(select.getAttribute("key")!); const val = select.value ? parseInt(select.value as string) : undefined; - this.pins[pin] = val + this.pins[pin] = val; } render() { @@ -342,40 +341,50 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { const objInfo: ObjectInfo = { id: this.objectId, name: this.objectName, - prefab: this.prefabName + prefab: this.prefabName, } as ObjectInfo; if (this.slots.length > 0) { - const slotOccupants: [FrozenObject, number][] = this.slots.flatMap((slot, index) => { - return typeof slot.occupant !== "undefined" ? [[slot.occupant, index]] : []; - }) + const slotOccupants: [FrozenObject, number][] = this.slots.flatMap( + (slot, index) => { + return typeof slot.occupant !== "undefined" + ? [[slot.occupant, index]] + : []; + }, + ); let slotOccupantTemplates: FrozenObject[] | null = null; let slotOccupantObjectIds: ObjectID[] | null = null; let slotOccupantIdsMap: Map = new Map(); if (slotOccupants.length > 0) { slotOccupantTemplates = slotOccupants.map(([slot, _]) => slot); - slotOccupantObjectIds = await window.VM.vm.addObjectsFrozen(slotOccupantTemplates); - slotOccupantIdsMap = new Map(slotOccupants.map((_, index) => { - return [index, slotOccupantObjectIds[index]]; - })) + slotOccupantObjectIds = await window.VM.vm.addObjectsFrozen( + slotOccupantTemplates, + ); + slotOccupantIdsMap = new Map( + slotOccupants.map((_, index) => { + return [index, slotOccupantObjectIds[index]]; + }), + ); } - objInfo.slots = new Map(this.slots.flatMap((slot, index) => { - const occupantId = slotOccupantIdsMap.get(index); - if (typeof occupantId !== "undefined") { - const info: SlotOccupantInfo = { - id: occupantId, - quantity: slot.quantity - }; - return [[index, info]] as [number, SlotOccupantInfo][]; - } else { - return [] as [number, SlotOccupantInfo][]; - } - })) + objInfo.slots = Object.fromEntries( + this.slots.flatMap((slot, index) => { + const occupantId = slotOccupantIdsMap.get(index); + if (typeof occupantId !== "undefined") { + const info: SlotOccupantInfo = { + id: occupantId, + quantity: slot.quantity, + }; + return [[index, info]] as [number, SlotOccupantInfo][]; + } else { + return [] as [number, SlotOccupantInfo][]; + } + }), + ); } if (this.connections.length > 0) { - objInfo.connections = new Map( + objInfo.connections = Object.fromEntries( this.connections.flatMap((conn, index) => { return typeof conn === "object" && "CableNetwork" in conn && @@ -387,7 +396,10 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { } if (this.fields.size > 0) { - objInfo.logic_values = new Map(this.fields) + objInfo.logic_values = Object.fromEntries(this.fields) as Record< + LogicType, + number + >; } const template: FrozenObject = { diff --git a/www/src/ts/virtual_machine/index.ts b/www/src/ts/virtualMachine/index.ts similarity index 97% rename from www/src/ts/virtual_machine/index.ts rename to www/src/ts/virtualMachine/index.ts index 1859292..2719f6f 100644 --- a/www/src/ts/virtual_machine/index.ts +++ b/www/src/ts/virtualMachine/index.ts @@ -83,7 +83,7 @@ class VirtualMachine extends TypedEventTarget() { return this._objects; } - get objectIds() { + get objectIds(): ObjectID[] { const ids = Array.from(this._objects.keys()); ids.sort(); return ids; @@ -93,13 +93,13 @@ class VirtualMachine extends TypedEventTarget() { return this._circuitHolders; } - get circuitHolderIds() { + get circuitHolderIds(): ObjectID[] { const ids = Array.from(this._circuitHolders.keys()); ids.sort(); return ids; } - get networks() { + get networks(): ObjectID[] { const ids = Array.from(this._networks.keys()); ids.sort(); return ids; @@ -320,7 +320,10 @@ class VirtualMachine extends TypedEventTarget() { this.updateObject(id, false); } }, this); - this.updateObject(this.activeIC.obj_info.id, false); + const activeIC = this.activeIC; + if (activeIC != null) { + this.updateObject(activeIC.obj_info.id, false); + } if (save) this.app.session.save(); } @@ -356,7 +359,7 @@ class VirtualMachine extends TypedEventTarget() { // return the data connected oject ids for a network networkDataDevices(network: ObjectID): number[] { - return this._networks.get(network)?.devices ?? [] + return this._networks.get(network)?.devices ?? []; } async changeObjectID(oldID: number, newID: number): Promise { @@ -522,14 +525,16 @@ class VirtualMachine extends TypedEventTarget() { } } - async addObjectsFrozen(frozenObjects: FrozenObject[]): Promise { + async addObjectsFrozen( + frozenObjects: FrozenObject[], + ): Promise { try { console.log("adding devices", frozenObjects); const ids = await this.ic10vm.addObjectsFrozen(frozenObjects); const refrozen = await this.ic10vm.freezeObjects(ids); ids.forEach((id, index) => { this._objects.set(id, refrozen[index]); - }) + }); const device_ids = await this.ic10vm.objects; this.dispatchCustomEvent("vm-objects-update", Array.from(device_ids)); this.app.session.save(); diff --git a/www/src/ts/virtual_machine/prefabDatabase.ts b/www/src/ts/virtualMachine/prefabDatabase.ts similarity index 99% rename from www/src/ts/virtual_machine/prefabDatabase.ts rename to www/src/ts/virtualMachine/prefabDatabase.ts index 6f67f81..68f5796 100644 --- a/www/src/ts/virtual_machine/prefabDatabase.ts +++ b/www/src/ts/virtualMachine/prefabDatabase.ts @@ -66636,4 +66636,4 @@ export default { "StructureNitrolyzer", "StructureRocketCircuitHousing" ] -} as const \ No newline at end of file +} as const diff --git a/www/src/ts/virtual_machine/registers.ts b/www/src/ts/virtualMachine/registers.ts similarity index 97% rename from www/src/ts/virtual_machine/registers.ts rename to www/src/ts/virtualMachine/registers.ts index 4c98b92..eb60df6 100644 --- a/www/src/ts/virtual_machine/registers.ts +++ b/www/src/ts/virtualMachine/registers.ts @@ -1,7 +1,7 @@ import { html, css } from "lit"; import { customElement } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMActiveICMixin } from "virtual_machine/baseDevice"; +import { VMActiveICMixin } from "virtualMachine/baseDevice"; import { RegisterSpec } from "ic10emu_wasm"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.js"; diff --git a/www/src/ts/virtual_machine/stack.ts b/www/src/ts/virtualMachine/stack.ts similarity index 94% rename from www/src/ts/virtual_machine/stack.ts rename to www/src/ts/virtualMachine/stack.ts index ae77740..6f96199 100644 --- a/www/src/ts/virtual_machine/stack.ts +++ b/www/src/ts/virtualMachine/stack.ts @@ -1,7 +1,7 @@ import { html, css } from "lit"; import { customElement } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMActiveICMixin } from "virtual_machine/baseDevice"; +import { VMActiveICMixin } from "virtualMachine/baseDevice"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.js"; import { displayNumber, parseNumber } from "utils"; @@ -41,7 +41,7 @@ export class VMICStack extends VMActiveICMixin(BaseElement) { } protected render() { - const sp = this.registers![16]; + const sp = this.registers != null ? this.registers[16] : 0; return html` diff --git a/www/src/ts/virtual_machine/ui.ts b/www/src/ts/virtualMachine/ui.ts similarity index 100% rename from www/src/ts/virtual_machine/ui.ts rename to www/src/ts/virtualMachine/ui.ts diff --git a/www/src/ts/virtualMachine/vmWorker.ts b/www/src/ts/virtualMachine/vmWorker.ts new file mode 100644 index 0000000..6f34aaa --- /dev/null +++ b/www/src/ts/virtualMachine/vmWorker.ts @@ -0,0 +1,42 @@ +import { VMRef, init } from "ic10emu_wasm"; +import type { + TemplateDatabase, +} from "ic10emu_wasm"; + +import * as Comlink from "comlink"; + +import prefabDatabase from "./prefabDatabase"; +import { parseNumber } from "utils"; + + +console.info("Processing Json prefab Database ", prefabDatabase); + +const vm: VMRef = init(); + + +const template_database = Object.fromEntries( + Object.entries(prefabDatabase.prefabsByHash).map(([hash, prefabName]) => [ + parseInt(hash), + prefabDatabase.prefabs[prefabName], + ]), +) as TemplateDatabase; + +try { + console.info("Loading Prefab Template Database into VM", template_database); + const start_time = performance.now(); + // vm.importTemplateDatabase(template_database); + vm.importTemplateDatabase(template_database); + const now = performance.now(); + const time_elapsed = (now - start_time) / 1000; + console.info(`Prefab Template Database loaded in ${time_elapsed} seconds`); +} catch (e) { + if ("stack" in e) { + console.error("Error importing template database:", e.toString(), e.stack); + } else { + console.error("Error importing template database:", e.toString()); + } + console.info(JSON.stringify(template_database)); +} +postMessage("ready"); + +Comlink.expose(vm); diff --git a/www/src/ts/virtual_machine/vmWorker.ts b/www/src/ts/virtual_machine/vmWorker.ts deleted file mode 100644 index 714633e..0000000 --- a/www/src/ts/virtual_machine/vmWorker.ts +++ /dev/null @@ -1,1158 +0,0 @@ -import { VMRef, init } from "ic10emu_wasm"; -import type { - StationpediaPrefab, - ObjectTemplate, - InternalAtmoInfo, - ThermalInfo, - LogicSlotType, - MemoryAccess, - LogicType, - MachineTier, - RecipeRange, - Instruction, - Recipe, - InstructionPart, - InstructionPartType, - GasType, - TemplateDatabase, -} from "ic10emu_wasm"; - -import * as Comlink from "comlink"; - -import prefabDatabase from "./prefabDatabase"; -import { parseNumber } from "utils"; - -export interface PrefabDatabase { - prefabs: Map; - reagents: Map< - string, - { - Hash: number; - Unit: string; - Sources?: Map; - } - >; - prefabsByHash: Map; - structures: StationpediaPrefab[]; - devices: StationpediaPrefab[]; - items: StationpediaPrefab[]; - logicableItems: StationpediaPrefab[]; - suits: StationpediaPrefab[]; - circuitHolders: StationpediaPrefab[]; -} - -type JsonDBPrefabs = typeof prefabDatabase.prefabs; - -// function buildObjectTemplate( -// template: JsonDBPrefabs[K], -// ): ObjectTemplate { -// switch (template.templateType) { -// case "Structure": -// return { -// templateType: "Structure", -// prefab: template.prefab, -// structure: template.structure, -// thermal_info: -// "thermal_info" in template ? template.thermal_info : undefined, -// internal_atmo_info: -// "internal_atmo_info" in template -// ? (template.internal_atmo_info as InternalAtmoInfo) -// : undefined, -// }; -// case "StructureSlots": -// return { -// templateType: "StructureSlots", -// prefab: template.prefab, -// structure: template.structure, -// thermal_info: -// "thermal_info" in template ? template.thermal_info : undefined, -// internal_atmo_info: -// "internal_atmo_info" in template -// ? (template.internal_atmo_info as InternalAtmoInfo) -// : undefined, -// slots: template.slots.map((slot) => slot), -// }; -// case "StructureLogic": -// return { -// templateType: "StructureLogic", -// prefab: template.prefab, -// structure: template.structure, -// thermal_info: -// "thermal_info" in template -// ? (template.thermal_info as ThermalInfo) -// : undefined, -// internal_atmo_info: -// "internal_atmo_info" in template -// ? (template.internal_atmo_info as InternalAtmoInfo) -// : undefined, -// slots: [...template.slots], -// logic: { -// logic_slot_types: new Map( -// Object.entries(template.logic.logic_slot_types).map( -// ([key, values]) => [ -// parseInt(key), -// new Map( -// Object.entries(values).map(([key, val]) => [ -// key as LogicSlotType, -// val as MemoryAccess, -// ]), -// ), -// ], -// ), -// ), -// logic_types: new Map( -// Object.entries(template.logic.logic_types).map(([key, val]) => [ -// key as LogicType, -// val as MemoryAccess, -// ]), -// ), -// modes: -// "modes" in template.logic -// ? new Map( -// Object.entries(template.logic.modes).map(([key, val]) => [ -// parseInt(key), -// val, -// ]), -// ) -// : undefined, -// transmission_receiver: template.logic.transmission_receiver, -// wireless_logic: template.logic.wireless_logic, -// circuit_holder: template.logic.circuit_holder, -// }, -// }; -// case "StructureLogicDevice": -// return { -// templateType: "StructureLogicDevice", -// prefab: template.prefab, -// structure: template.structure, -// thermal_info: -// "thermal_info" in template -// ? (template.thermal_info as ThermalInfo) -// : undefined, -// internal_atmo_info: -// "internal_atmo_info" in template -// ? (template.internal_atmo_info as InternalAtmoInfo) -// : undefined, -// slots: [...template.slots], -// logic: { -// logic_slot_types: new Map( -// Object.entries(template.logic.logic_slot_types).map( -// ([key, values]) => [ -// parseInt(key), -// new Map( -// Object.entries(values).map(([key, val]) => [ -// key as LogicSlotType, -// val as MemoryAccess, -// ]), -// ), -// ], -// ), -// ), -// logic_types: new Map( -// Object.entries(template.logic.logic_types).map(([key, val]) => [ -// key as LogicType, -// val as MemoryAccess, -// ]), -// ), -// modes: -// "modes" in template.logic -// ? new Map( -// Object.entries(template.logic.modes).map(([key, val]) => [ -// parseInt(key), -// val, -// ]), -// ) -// : undefined, -// transmission_receiver: template.logic.transmission_receiver, -// wireless_logic: template.logic.wireless_logic, -// circuit_holder: template.logic.circuit_holder, -// }, -// device: { -// connection_list: [...template.device.connection_list], -// device_pins_length: -// "device_pins_length" in template.device -// ? (template.device.device_pins_length as number) -// : undefined, -// has_activate_state: template.device.has_activate_state, -// has_atmosphere: template.device.has_atmosphere, -// has_color_state: template.device.has_color_state, -// has_lock_state: template.device.has_lock_state, -// has_mode_state: template.device.has_mode_state, -// has_on_off_state: template.device.has_on_off_state, -// has_open_state: template.device.has_open_state, -// has_reagents: template.device.has_reagents, -// }, -// }; -// case "StructureLogicDeviceConsumer": -// return { -// templateType: "StructureLogicDeviceConsumer", -// prefab: template.prefab, -// structure: template.structure, -// thermal_info: -// "thermal_info" in template -// ? (template.thermal_info as ThermalInfo) -// : undefined, -// internal_atmo_info: -// "internal_atmo_info" in template -// ? (template.internal_atmo_info as InternalAtmoInfo) -// : undefined, -// slots: [...template.slots], -// logic: { -// logic_slot_types: new Map( -// Object.entries(template.logic.logic_slot_types).map( -// ([key, values]) => [ -// parseInt(key), -// new Map( -// Object.entries(values).map(([key, val]) => [ -// key as LogicSlotType, -// val as MemoryAccess, -// ]), -// ), -// ], -// ), -// ), -// logic_types: new Map( -// Object.entries(template.logic.logic_types).map(([key, val]) => [ -// key as LogicType, -// val as MemoryAccess, -// ]), -// ), -// modes: -// "modes" in template.logic -// ? new Map( -// Object.entries(template.logic.modes).map(([key, val]) => [ -// parseInt(key), -// val, -// ]), -// ) -// : undefined, -// transmission_receiver: template.logic.transmission_receiver, -// wireless_logic: template.logic.wireless_logic, -// circuit_holder: template.logic.circuit_holder, -// }, -// device: { -// connection_list: [...template.device.connection_list], -// device_pins_length: -// "device_pins_length" in template.device -// ? (template.device.device_pins_length as number) -// : undefined, -// has_activate_state: template.device.has_activate_state, -// has_atmosphere: template.device.has_atmosphere, -// has_color_state: template.device.has_color_state, -// has_lock_state: template.device.has_lock_state, -// has_mode_state: template.device.has_mode_state, -// has_on_off_state: template.device.has_on_off_state, -// has_open_state: template.device.has_open_state, -// has_reagents: template.device.has_reagents, -// }, -// consumer_info: { -// consumed_resouces: [...template.consumer_info.consumed_resouces], -// processed_reagents: [...template.consumer_info.processed_reagents], -// }, -// fabricator_info: undefined, -// }; -// case "StructureLogicDeviceConsumerMemory": -// return { -// templateType: "StructureLogicDeviceConsumerMemory", -// prefab: template.prefab, -// structure: template.structure, -// thermal_info: -// "thermal_info" in template -// ? (template.thermal_info as ThermalInfo) -// : undefined, -// internal_atmo_info: -// "internal_atmo_info" in template -// ? (template.internal_atmo_info as InternalAtmoInfo) -// : undefined, -// slots: [...template.slots], -// logic: { -// logic_slot_types: new Map( -// Object.entries(template.logic.logic_slot_types).map( -// ([key, values]) => [ -// parseInt(key), -// new Map( -// Object.entries(values).map(([key, val]) => [ -// key as LogicSlotType, -// val as MemoryAccess, -// ]), -// ), -// ], -// ), -// ), -// logic_types: new Map( -// Object.entries(template.logic.logic_types).map(([key, val]) => [ -// key as LogicType, -// val as MemoryAccess, -// ]), -// ), -// modes: -// "modes" in template.logic -// ? new Map( -// Object.entries(template.logic.modes).map(([key, val]) => [ -// parseInt(key), -// val, -// ]), -// ) -// : undefined, -// transmission_receiver: template.logic.transmission_receiver, -// wireless_logic: template.logic.wireless_logic, -// circuit_holder: template.logic.circuit_holder, -// }, -// device: { -// connection_list: [...template.device.connection_list], -// device_pins_length: -// "device_pins_length" in template.device -// ? (template.device.device_pins_length as number) -// : undefined, -// has_activate_state: template.device.has_activate_state, -// has_atmosphere: template.device.has_atmosphere, -// has_color_state: template.device.has_color_state, -// has_lock_state: template.device.has_lock_state, -// has_mode_state: template.device.has_mode_state, -// has_on_off_state: template.device.has_on_off_state, -// has_open_state: template.device.has_open_state, -// has_reagents: template.device.has_reagents, -// }, -// consumer_info: { -// consumed_resouces: [...template.consumer_info.consumed_resouces], -// processed_reagents: [...template.consumer_info.processed_reagents], -// }, -// fabricator_info: -// "fabricator_info" in template -// ? { -// tier: template.fabricator_info.tier as MachineTier, -// recipes: new Map( -// Object.entries(template.fabricator_info.recipes).map( -// ([key, val]) => { -// const recipe: Recipe = { -// tier: val.tier as MachineTier, -// time: val.time as number, -// energy: val.energy as number, -// temperature: val.temperature as RecipeRange, -// pressure: val.pressure as RecipeRange, -// required_mix: { -// rule: val.required_mix.rule as number, -// is_any: val.required_mix.is_any as boolean, -// is_any_to_remove: val.required_mix -// .is_any_to_remove as boolean, -// reagents: new Map( -// Object.entries(val.required_mix.reagents), -// ) as Map, -// }, -// count_types: val.count_types, -// reagents: new Map(Object.entries(val.reagents)) as Map< -// string, -// number -// >, -// }; -// -// return [key, recipe]; -// }, -// ), -// ), -// } -// : undefined, -// memory: { -// memory_access: template.memory.memory_access as MemoryAccess, -// memory_size: template.memory.memory_size, -// instructions: -// "instructions" in template.memory -// ? new Map( -// Object.entries(template.memory.instructions).map( -// ([key, val]) => { -// const instruction: Instruction = { -// description: val.description, -// description_stripped: val.description_stripped, -// typ: val.typ, -// value: val.value, -// valid: [ -// val.valid[0], -// typeof val.valid[1] === "number" -// ? val.valid[1] -// : undefined, -// ], -// parts: val.parts.map((part) => { -// const instPart: InstructionPart = { -// range: [...part.range], -// name: part.name, -// typ: part.typ as InstructionPartType, -// }; -// return instPart; -// }), -// }; -// return [key, instruction]; -// }, -// ), -// ) -// : undefined, -// }, -// }; -// case "StructureLogicDeviceMemory": -// return { -// templateType: "StructureLogicDeviceMemory", -// prefab: template.prefab, -// structure: template.structure, -// thermal_info: -// "thermal_info" in template -// ? (template.thermal_info as ThermalInfo) -// : undefined, -// internal_atmo_info: -// "internal_atmo_info" in template -// ? (template.internal_atmo_info as InternalAtmoInfo) -// : undefined, -// slots: [...template.slots], -// logic: { -// logic_slot_types: new Map( -// Object.entries(template.logic.logic_slot_types).map( -// ([key, values]) => [ -// parseInt(key), -// new Map( -// Object.entries(values).map(([key, val]) => [ -// key as LogicSlotType, -// val as MemoryAccess, -// ]), -// ), -// ], -// ), -// ), -// logic_types: new Map( -// Object.entries(template.logic.logic_types).map(([key, val]) => [ -// key as LogicType, -// val as MemoryAccess, -// ]), -// ), -// modes: -// "modes" in template.logic -// ? new Map( -// Object.entries(template.logic.modes).map(([key, val]) => [ -// parseInt(key), -// val, -// ]), -// ) -// : undefined, -// transmission_receiver: template.logic.transmission_receiver, -// wireless_logic: template.logic.wireless_logic, -// circuit_holder: template.logic.circuit_holder, -// }, -// device: { -// connection_list: [...template.device.connection_list], -// device_pins_length: -// "device_pins_length" in template.device -// ? (template.device.device_pins_length as number) -// : undefined, -// has_activate_state: template.device.has_activate_state, -// has_atmosphere: template.device.has_atmosphere, -// has_color_state: template.device.has_color_state, -// has_lock_state: template.device.has_lock_state, -// has_mode_state: template.device.has_mode_state, -// has_on_off_state: template.device.has_on_off_state, -// has_open_state: template.device.has_open_state, -// has_reagents: template.device.has_reagents, -// }, -// memory: { -// memory_access: template.memory.memory_access as MemoryAccess, -// memory_size: template.memory.memory_size, -// instructions: -// "instructions" in template.memory -// ? new Map( -// Object.entries(template.memory.instructions).map( -// ([key, val]) => { -// const instruction: Instruction = { -// description: val.description, -// description_stripped: val.description_stripped, -// typ: val.typ, -// value: val.value, -// valid: [ -// val.valid[0], -// typeof val.valid[1] === "number" -// ? val.valid[1] -// : undefined, -// ], -// parts: val.parts.map( -// (part: { -// range: readonly [number, number]; -// name: string; -// typ: string; -// }) => { -// const instPart: InstructionPart = { -// range: [...part.range], -// name: part.name, -// typ: part.typ as InstructionPartType, -// }; -// return instPart; -// }, -// ), -// }; -// return [key, instruction]; -// }, -// ), -// ) -// : undefined, -// }, -// }; -// case "StructureCircuitHolder": -// return { -// templateType: "StructureCircuitHolder", -// prefab: template.prefab, -// structure: template.structure, -// thermal_info: -// "thermal_info" in template -// ? (template.thermal_info as ThermalInfo) -// : undefined, -// internal_atmo_info: -// "internal_atmo_info" in template -// ? (template.internal_atmo_info as InternalAtmoInfo) -// : undefined, -// slots: [...template.slots], -// logic: { -// logic_slot_types: new Map( -// Object.entries(template.logic.logic_slot_types).map( -// ([key, values]) => [ -// parseInt(key), -// new Map( -// Object.entries(values).map(([key, val]) => [ -// key as LogicSlotType, -// val as MemoryAccess, -// ]), -// ), -// ], -// ), -// ), -// logic_types: new Map( -// Object.entries(template.logic.logic_types).map(([key, val]) => [ -// key as LogicType, -// val as MemoryAccess, -// ]), -// ), -// modes: -// "modes" in template.logic -// ? new Map( -// Object.entries(template.logic.modes).map(([key, val]) => [ -// parseInt(key), -// val, -// ]), -// ) -// : undefined, -// transmission_receiver: template.logic.transmission_receiver, -// wireless_logic: template.logic.wireless_logic, -// circuit_holder: template.logic.circuit_holder, -// }, -// device: { -// connection_list: [...template.device.connection_list], -// device_pins_length: -// "device_pins_length" in template.device -// ? (template.device.device_pins_length as number) -// : undefined, -// has_activate_state: template.device.has_activate_state, -// has_atmosphere: template.device.has_atmosphere, -// has_color_state: template.device.has_color_state, -// has_lock_state: template.device.has_lock_state, -// has_mode_state: template.device.has_mode_state, -// has_on_off_state: template.device.has_on_off_state, -// has_open_state: template.device.has_open_state, -// has_reagents: template.device.has_reagents, -// }, -// }; -// case "Item": -// return { -// templateType: "Item", -// prefab: template.prefab, -// thermal_info: -// "thermal_info" in template -// ? (template.thermal_info as ThermalInfo) -// : undefined, -// internal_atmo_info: -// "internal_atmo_info" in template -// ? (template.internal_atmo_info as InternalAtmoInfo) -// : undefined, -// item: { -// consumable: template.item.consumable, -// ingredient: template.item.ingredient, -// max_quantity: template.item.max_quantity, -// slot_class: template.item.slot_class, -// sorting_class: template.item.sorting_class, -// filter_type: -// "filter_type" in template.item -// ? template.item.filter_type -// : undefined, -// reagents: -// "reagents" in template.item -// ? (new Map(Object.entries(template.item.reagents)) as Map< -// string, -// number -// >) -// : undefined, -// }, -// }; -// case "ItemSlots": -// return { -// templateType: "ItemSlots", -// prefab: template.prefab, -// thermal_info: -// "thermal_info" in template -// ? (template.thermal_info as ThermalInfo) -// : undefined, -// internal_atmo_info: -// "internal_atmo_info" in template -// ? (template.internal_atmo_info as InternalAtmoInfo) -// : undefined, -// item: { -// consumable: template.item.consumable, -// ingredient: template.item.ingredient, -// max_quantity: template.item.max_quantity, -// slot_class: template.item.slot_class, -// sorting_class: template.item.sorting_class, -// filter_type: -// "filter_type" in template.item -// ? (template.item.filter_type as GasType) -// : undefined, -// reagents: -// "reagents" in template.item -// ? (new Map(Object.entries(template.item.reagents)) as Map< -// string, -// number -// >) -// : undefined, -// }, -// slots: [...template.slots], -// }; -// case "ItemConsumer": -// return { -// templateType: "ItemConsumer", -// prefab: template.prefab, -// thermal_info: -// "thermal_info" in template -// ? (template.thermal_info as ThermalInfo) -// : undefined, -// internal_atmo_info: -// "internal_atmo_info" in template -// ? (template.internal_atmo_info as InternalAtmoInfo) -// : undefined, -// item: { -// consumable: template.item.consumable, -// ingredient: template.item.ingredient, -// max_quantity: template.item.max_quantity, -// slot_class: template.item.slot_class, -// sorting_class: template.item.sorting_class, -// filter_type: -// "filter_type" in template.item -// ? (template.item.filter_type as GasType) -// : undefined, -// reagents: -// "reagents" in template.item -// ? (new Map(Object.entries(template.item.reagents)) as Map< -// string, -// number -// >) -// : undefined, -// }, -// slots: [...template.slots], -// consumer_info: { -// consumed_resouces: [...template.consumer_info.consumed_resouces], -// processed_reagents: [...template.consumer_info.processed_reagents], -// }, -// }; -// case "ItemLogic": -// return { -// templateType: "ItemLogic", -// prefab: template.prefab, -// thermal_info: -// "thermal_info" in template -// ? (template.thermal_info as ThermalInfo) -// : undefined, -// internal_atmo_info: -// "internal_atmo_info" in template -// ? (template.internal_atmo_info as InternalAtmoInfo) -// : undefined, -// item: { -// consumable: template.item.consumable, -// ingredient: template.item.ingredient, -// max_quantity: template.item.max_quantity, -// slot_class: template.item.slot_class, -// sorting_class: template.item.sorting_class, -// filter_type: -// "filter_type" in template.item -// ? (template.item.filter_type as GasType) -// : undefined, -// reagents: -// "reagents" in template.item -// ? (new Map(Object.entries(template.item.reagents)) as Map< -// string, -// number -// >) -// : undefined, -// }, -// slots: [...template.slots], -// logic: { -// logic_slot_types: new Map( -// Object.entries(template.logic.logic_slot_types).map( -// ([key, values]) => [ -// parseInt(key), -// new Map( -// Object.entries(values).map(([key, val]) => [ -// key as LogicSlotType, -// val as MemoryAccess, -// ]), -// ), -// ], -// ), -// ), -// logic_types: new Map( -// Object.entries(template.logic.logic_types).map(([key, val]) => [ -// key as LogicType, -// val as MemoryAccess, -// ]), -// ), -// modes: -// "modes" in template.logic -// ? new Map( -// Object.entries(template.logic.modes).map(([key, val]) => [ -// parseInt(key), -// val, -// ]), -// ) -// : undefined, -// transmission_receiver: template.logic.transmission_receiver, -// wireless_logic: template.logic.wireless_logic, -// circuit_holder: template.logic.circuit_holder, -// }, -// }; -// case "ItemLogicMemory": -// return { -// templateType: "ItemLogicMemory", -// prefab: template.prefab, -// thermal_info: -// "thermal_info" in template -// ? (template.thermal_info as ThermalInfo) -// : undefined, -// internal_atmo_info: -// "internal_atmo_info" in template -// ? (template.internal_atmo_info as InternalAtmoInfo) -// : undefined, -// item: { -// consumable: template.item.consumable, -// ingredient: template.item.ingredient, -// max_quantity: template.item.max_quantity, -// slot_class: template.item.slot_class, -// sorting_class: template.item.sorting_class, -// filter_type: -// "filter_type" in template.item -// ? (template.item.filter_type as GasType) -// : undefined, -// reagents: -// "reagents" in template.item -// ? (new Map(Object.entries(template.item.reagents)) as Map< -// string, -// number -// >) -// : undefined, -// }, -// slots: [...template.slots], -// logic: { -// logic_slot_types: new Map( -// Object.entries(template.logic.logic_slot_types).map( -// ([key, values]) => [ -// parseInt(key), -// new Map( -// Object.entries(values).map(([key, val]) => [ -// key as LogicSlotType, -// val as MemoryAccess, -// ]), -// ), -// ], -// ), -// ), -// logic_types: new Map( -// Object.entries(template.logic.logic_types).map(([key, val]) => [ -// key as LogicType, -// val as MemoryAccess, -// ]), -// ), -// modes: -// "modes" in template.logic -// ? new Map( -// Object.entries(template.logic.modes).map(([key, val]) => [ -// parseInt(key), -// val, -// ]), -// ) -// : undefined, -// transmission_receiver: template.logic.transmission_receiver, -// wireless_logic: template.logic.wireless_logic, -// circuit_holder: template.logic.circuit_holder, -// }, -// memory: { -// memory_access: template.memory.memory_access as MemoryAccess, -// memory_size: template.memory.memory_size, -// instructions: -// "instructions" in template.memory -// ? new Map( -// Object.entries(template.memory.instructions).map( -// ([key, val]) => { -// const instruction: Instruction = { -// description: val.description, -// description_stripped: val.description_stripped, -// typ: val.typ, -// value: val.value, -// valid: [ -// val.valid[0], -// typeof val.valid[1] === "number" -// ? val.valid[1] -// : undefined, -// ], -// parts: val.parts.map( -// (part: { -// range: readonly [number, number]; -// name: string; -// typ: string; -// }) => { -// const instPart: InstructionPart = { -// range: [...part.range], -// name: part.name, -// typ: part.typ as InstructionPartType, -// }; -// return instPart; -// }, -// ), -// }; -// return [key, instruction]; -// }, -// ), -// ) -// : undefined, -// }, -// }; -// case "ItemCircuitHolder": -// return { -// templateType: "ItemCircuitHolder", -// prefab: template.prefab, -// thermal_info: -// "thermal_info" in template -// ? (template.thermal_info as ThermalInfo) -// : undefined, -// internal_atmo_info: -// "internal_atmo_info" in template -// ? (template.internal_atmo_info as InternalAtmoInfo) -// : undefined, -// item: { -// consumable: template.item.consumable, -// ingredient: template.item.ingredient, -// max_quantity: template.item.max_quantity, -// slot_class: template.item.slot_class, -// sorting_class: template.item.sorting_class, -// filter_type: -// "filter_type" in template.item -// ? (template.item.filter_type as GasType) -// : undefined, -// reagents: -// "reagents" in template.item -// ? (new Map(Object.entries(template.item.reagents)) as Map< -// string, -// number -// >) -// : undefined, -// }, -// slots: [...template.slots], -// logic: { -// logic_slot_types: new Map( -// Object.entries(template.logic.logic_slot_types).map( -// ([key, values]) => [ -// parseInt(key), -// new Map( -// Object.entries(values).map(([key, val]) => [ -// key as LogicSlotType, -// val as MemoryAccess, -// ]), -// ), -// ], -// ), -// ), -// logic_types: new Map( -// Object.entries(template.logic.logic_types).map(([key, val]) => [ -// key as LogicType, -// val as MemoryAccess, -// ]), -// ), -// modes: -// "modes" in template.logic -// ? new Map( -// Object.entries(template.logic.modes).map(([key, val]) => [ -// parseInt(key), -// val, -// ]), -// ) -// : undefined, -// transmission_receiver: template.logic.transmission_receiver, -// wireless_logic: template.logic.wireless_logic, -// circuit_holder: template.logic.circuit_holder, -// }, -// }; -// case "ItemSuit": -// return { -// templateType: "ItemSuit", -// prefab: template.prefab, -// thermal_info: -// "thermal_info" in template -// ? (template.thermal_info as ThermalInfo) -// : undefined, -// internal_atmo_info: -// "internal_atmo_info" in template -// ? (template.internal_atmo_info as InternalAtmoInfo) -// : undefined, -// item: { -// consumable: template.item.consumable, -// ingredient: template.item.ingredient, -// max_quantity: template.item.max_quantity, -// slot_class: template.item.slot_class, -// sorting_class: template.item.sorting_class, -// filter_type: -// "filter_type" in template.item -// ? (template.item.filter_type as GasType) -// : undefined, -// reagents: -// "reagents" in template.item -// ? (new Map(Object.entries(template.item.reagents)) as Map< -// string, -// number -// >) -// : undefined, -// }, -// slots: [...template.slots], -// suit_info: template.suit_info, -// }; -// // case "ItemSuitLogic": -// // return { -// // templateType: "ItemSuitLogic", -// // prefab: template.prefab, -// // thermal_info: "thermal_info" in template ? template.thermal_info as ThermalInfo : undefined, -// // internal_atmo_info: "internal_atmo_info" in template ? template.internal_atmo_info as InternalAtmoInfo : undefined, -// // item: { -// // consumable: template.item.consumable, -// // ingredient: template.item.ingredient, -// // max_quantity: template.item.max_quantity, -// // slot_class: template.item.slot_class, -// // sorting_class: template.item.sorting_class, -// // filter_type: "filter_type" in template.item ? template.item.filter_type as GasType : undefined, -// // reagents: "reagents" in template.item ? new Map(Object.entries(template.item.reagents)) as Map : undefined, -// // }, -// // slots: [...template.slots], -// // suit_info: template.suit_info, -// // logic: { -// // logic_slot_types: new Map( -// // Object.entries(template.logic.logic_slot_types) -// // .map(([key, values]) => [ -// // parseInt(key), -// // new Map( -// // Object.entries(values) -// // .map(([key, val]) => [key as LogicSlotType, val as MemoryAccess]) -// // ) -// // ]) -// // ), -// // logic_types: new Map( -// // Object.entries(template.logic.logic_types) -// // .map(([key, val]) => [key as LogicType, val as MemoryAccess]) -// // ), -// // modes: "modes" in template.logic -// // ? new Map( -// // Object.entries(template.logic.modes).map(([key, val]) => [parseInt(key), val]) -// // ) -// // : undefined, -// // transmission_receiver: template.logic.transmission_receiver, -// // wireless_logic: template.logic.wireless_logic, -// // circuit_holder: template.logic.circuit_holder -// // }, -// // } -// case "ItemSuitCircuitHolder": -// return { -// templateType: "ItemSuitCircuitHolder", -// prefab: template.prefab, -// thermal_info: -// "thermal_info" in template -// ? (template.thermal_info as ThermalInfo) -// : undefined, -// internal_atmo_info: -// "internal_atmo_info" in template -// ? (template.internal_atmo_info as InternalAtmoInfo) -// : undefined, -// item: { -// consumable: template.item.consumable, -// ingredient: template.item.ingredient, -// max_quantity: template.item.max_quantity, -// slot_class: template.item.slot_class, -// sorting_class: template.item.sorting_class, -// filter_type: -// "filter_type" in template.item -// ? (template.item.filter_type as GasType) -// : undefined, -// reagents: -// "reagents" in template.item -// ? (new Map(Object.entries(template.item.reagents)) as Map< -// string, -// number -// >) -// : undefined, -// }, -// slots: [...template.slots], -// suit_info: template.suit_info, -// logic: { -// logic_slot_types: new Map( -// Object.entries(template.logic.logic_slot_types).map( -// ([key, values]) => [ -// parseInt(key), -// new Map( -// Object.entries(values).map(([key, val]) => [ -// key as LogicSlotType, -// val as MemoryAccess, -// ]), -// ), -// ], -// ), -// ), -// logic_types: new Map( -// Object.entries(template.logic.logic_types).map(([key, val]) => [ -// key as LogicType, -// val as MemoryAccess, -// ]), -// ), -// modes: -// "modes" in template.logic -// ? new Map( -// Object.entries(template.logic.modes).map(([key, val]) => [ -// parseInt(key), -// val, -// ]), -// ) -// : undefined, -// transmission_receiver: template.logic.transmission_receiver, -// wireless_logic: template.logic.wireless_logic, -// circuit_holder: template.logic.circuit_holder, -// }, -// memory: { -// memory_access: template.memory.memory_access as MemoryAccess, -// memory_size: template.memory.memory_size, -// instructions: -// "instructions" in template.memory -// ? new Map( -// Object.entries(template.memory.instructions).map( -// ([key, val]) => { -// const instruction: Instruction = { -// description: val.description, -// description_stripped: val.description_stripped, -// typ: val.typ, -// value: val.value, -// valid: [ -// val.valid[0], -// typeof val.valid[1] === "number" -// ? val.valid[1] -// : undefined, -// ], -// parts: val.parts.map( -// (part: { -// range: readonly [number, number]; -// name: string; -// typ: string; -// }) => { -// const instPart: InstructionPart = { -// range: [...part.range], -// name: part.name, -// typ: part.typ as InstructionPartType, -// }; -// return instPart; -// }, -// ), -// }; -// return [key, instruction]; -// }, -// ), -// ) -// : undefined, -// }, -// }; -// default: -// return undefined; -// } -// } -// -// function buildPrefabDatabase(): PrefabDatabase { -// return { -// prefabs: new Map( -// Object.entries(prefabDatabase.prefabs).flatMap(([key, val]) => { -// const template = buildObjectTemplate(val); -// if (typeof template !== "undefined") { -// return [[key as StationpediaPrefab, template]]; -// } else { -// return []; -// } -// }), -// ), -// prefabsByHash: new Map( -// Object.entries(prefabDatabase.prefabsByHash).map(([key, val]) => [ -// parseInt(key), -// val as StationpediaPrefab, -// ]), -// ), -// structures: [...prefabDatabase.structures] as StationpediaPrefab[], -// devices: [...prefabDatabase.devices] as StationpediaPrefab[], -// items: [...prefabDatabase.items] as StationpediaPrefab[], -// logicableItems: [...prefabDatabase.logicableItems] as StationpediaPrefab[], -// circuitHolders: [...prefabDatabase.circuitHolders] as StationpediaPrefab[], -// suits: [...prefabDatabase.suits] as StationpediaPrefab[], -// reagents: new Map( -// Object.entries(prefabDatabase.reagents).map(([key, val]) => { -// return [ -// key, -// { -// Hash: val.Hash, -// Unit: val.Unit, -// Sources: -// "Sources" in val -// ? (new Map(Object.entries(val.Sources)) as Map< -// StationpediaPrefab, -// number -// >) -// : undefined, -// }, -// ]; -// }), -// ), -// }; -// } -// -console.info("Processing Json prefab Database ", prefabDatabase); -// -// const prefab_database = buildPrefabDatabase(); -// -// console.info("Prcessed prefab Database ", prefab_database); - -const vm: VMRef = init(); - -// const template_database = new Map( -// Array.from(prefab_database.prefabsByHash.entries()).map(([hash, name]) => { -// return [hash, prefab_database.prefabs.get(name)]; -// }), -// ); - -// console.info("Loading Prefab Template Database into VM", template_database); -try { - const start_time = performance.now(); - // vm.importTemplateDatabase(template_database); - vm.importTemplateDatabase( - Object.fromEntries( - Object.entries(prefabDatabase.prefabsByHash) - .map(([hash, prefabName]) => [parseInt(hash), prefabDatabase.prefabs[prefabName]]) - ) as TemplateDatabase - ); - const now = performance.now(); - const time_elapsed = (now - start_time) / 1000; - console.info(`Prefab Template Database loaded in ${time_elapsed} seconds`); -} catch (e) { - if ("stack" in e) { - console.error("Error importing template database:", e.toString(), e.stack); - } else { - console.error("Error importing template database:", e.toString()); - } -} - -postMessage("ready"); - -Comlink.expose(vm); From 70833e0b00d76029fe71d69ce27b36bf816604f7 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Fri, 16 Aug 2024 23:40:17 -0700 Subject: [PATCH 41/50] refactor(ui): start using signals smaller DOM updates & easier data update paths. fix sl-select problems with force update on signal sub Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- rust-testing.ipynb | 223 + www/cspell.json | 8 +- www/package.json | 39 +- www/pnpm-lock.yaml | 6286 +++++++++-------- www/src/ts/virtualMachine/baseDevice.ts | 692 +- www/src/ts/virtualMachine/device/addDevice.ts | 12 +- www/src/ts/virtualMachine/device/card.ts | 55 +- www/src/ts/virtualMachine/device/fields.ts | 36 +- www/src/ts/virtualMachine/device/pins.ts | 44 +- www/src/ts/virtualMachine/device/slot.ts | 321 +- www/src/ts/virtualMachine/index.ts | 241 +- 11 files changed, 4368 insertions(+), 3589 deletions(-) create mode 100644 rust-testing.ipynb 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/www/cspell.json b/www/cspell.json index 2f5b439..d88329c 100644 --- a/www/cspell.json +++ b/www/cspell.json @@ -54,6 +54,8 @@ "brnez", "Circuitboard", "codegen", + "Comlink", + "datapoints", "Depressurising", "deviceslength", "endpos", @@ -62,13 +64,16 @@ "hardwrap", "hashables", "hstack", + "idxs", "infile", "jetpack", "Keybind", "labelledby", "lbns", "logicable", + "LogicSlotType", "logicslottypes", + "LogicSlotTypes", "logictype", "logictypes", "lparen", @@ -82,6 +87,7 @@ "pedia", "pinf", "popperjs", + "preact", "preproc", "Pressurising", "putd", @@ -103,8 +109,6 @@ "slotclass", "slotlogic", "slotlogicable", - "LogicSlotType", - "LogicSlotTypes", "slottype", "sltz", "snan", diff --git a/www/package.json b/www/package.json index 29274c8..9adc17e 100644 --- a/www/package.json +++ b/www/package.json @@ -25,12 +25,12 @@ "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": "^0.7.10", + "@rsbuild/plugin-image-compress": "^0.7.10", + "@rsbuild/plugin-type-check": "^0.7.10", + "@rspack/cli": "^0.7.5", + "@rspack/core": "^0.7.5", + "@swc/helpers": "^0.5.12", "@types/ace": "^0.0.52", "@types/bootstrap": "^5.2.10", "@types/wicg-file-system-access": "^2023.10.5", @@ -38,34 +38,35 @@ "lit-scss-loader": "^2.0.1", "mini-css-extract-plugin": "^2.9.0", "postcss-loader": "^8.1.1", - "sass": "^1.75.0", - "tailwindcss": "^3.4.3", + "sass": "^1.77.8", + "tailwindcss": "^3.4.10", "ts-lit-plugin": "^2.0.2", "ts-loader": "^9.5.1", - "typescript": "^5.4.5", + "typescript": "^5.5.4", "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.35.4", + "ace-linters": "^1.2.3", "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.0.0", "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 0f5bb9f..a66c849 100644 --- a/www/pnpm-lock.yaml +++ b/www/pnpm-lock.yaml @@ -1,538 +1,2766 @@ -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 - 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.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.35.4 + version: 1.35.4 + ace-linters: + specifier: ^1.2.3 + version: 1.2.3 + 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.0.0 + version: 14.0.0 + 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: ^0.7.10 + version: 0.7.10 + '@rsbuild/plugin-image-compress': + specifier: ^0.7.10 + version: 0.7.10(@rsbuild/core@0.7.10) + '@rsbuild/plugin-type-check': + specifier: ^0.7.10 + version: 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.12)(typescript@5.5.4) + '@rspack/cli': + specifier: ^0.7.5 + version: 0.7.5(@rspack/core@0.7.5(@swc/helpers@0.5.12))(@types/express@4.17.21)(webpack@5.93.0) + '@rspack/core': + specifier: ^0.7.5 + version: 0.7.5(@swc/helpers@0.5.12) + '@swc/helpers': + specifier: ^0.5.12 + version: 0.5.12 + '@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.5.4)(webpack@5.93.0) + lit-scss-loader: + specifier: ^2.0.1 + version: 2.0.1(webpack@5.93.0) + mini-css-extract-plugin: + specifier: ^2.9.0 + version: 2.9.0(webpack@5.93.0) + postcss-loader: + specifier: ^8.1.1 + version: 8.1.1(@rspack/core@0.7.5(@swc/helpers@0.5.12))(postcss@8.4.41)(typescript@5.5.4)(webpack@5.93.0) + sass: + specifier: ^1.77.8 + version: 1.77.8 + tailwindcss: + specifier: ^3.4.10 + version: 3.4.10 + ts-lit-plugin: + specifier: ^2.0.2 + version: 2.0.2 + ts-loader: + specifier: ^9.5.1 + version: 9.5.1(typescript@5.5.4)(webpack@5.93.0) + typescript: + specifier: ^5.5.4 + version: 5.5.4 + 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.0': + resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - dev: true - /@ctrl/tinycolor@4.1.0: + '@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.7': + resolution: {integrity: sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==} - /@floating-ui/utils@0.2.1: - resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} - dev: false + '@floating-ui/dom@1.6.10': + resolution: {integrity: sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==} - /@isaacs/cliui@8.0.2: + '@floating-ui/utils@0.2.7': + resolution: {integrity: sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==} + + '@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: + '@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: + '@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@0.1.6: + '@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/sdk@0.1.6: + '@module-federation/sdk@0.1.6': resolution: {integrity: sha512-qifXpyYLM7abUeEOIfv0oTkguZgRZuwh89YOAYIZJlkP6QbRG7DJMQvtM8X2yHXm9PTk0IYNnOJH0vNQCo6auQ==} - dev: true - /@module-federation/webpack-bundler-runtime@0.1.6: + '@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 - /@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@0.7.10': + resolution: {integrity: sha512-m+JbPpuMFuVsMRcsjMxvVk6yc//OW+h72kV2DAD4neoiM0YhkEAN4TXBz3RSOomXHODhhxqhpCqz9nIw6PtvBA==} + engines: {node: '>=16.0.0'} + hasBin: true + + '@rsbuild/plugin-image-compress@0.7.10': + resolution: {integrity: sha512-Wu81DXQR3jl+JqrrLAAfz52uA+Z4GnNyQ1wRxVpvyz6mWs3yGF0iXIg1JebJ8eLtkYWQIGMgTttJJYI4g0cYqQ==} + peerDependencies: + '@rsbuild/core': ^0.7.10 + + '@rsbuild/plugin-type-check@0.7.10': + resolution: {integrity: sha512-EGNeHEZEWvABqTGt+CEtw5kQskNrg2nch4wRuAechPgmHmzU/k65EoXTMsB/ImmcdUeU2ax2kdlQOdxs6fNgoA==} + peerDependencies: + '@rsbuild/core': ^0.7.10 + + '@rsbuild/shared@0.7.10': + resolution: {integrity: sha512-FwTm11DP7KxQKT2mWLvwe80O5KpikgMSlqnw9CQhBaIHSYEypdJU9ZotbNsXsHdML3xcqg+S9ae3bpovC7KlwQ==} + + '@rspack/binding-darwin-arm64@0.7.5': + resolution: {integrity: sha512-mNBIm36s1BA7v4SL/r4f3IXIsjyH5CZX4eXMRPE52lBc3ClVuUB7d/8zk8dkyjJCMAj8PsZSnAJ3cfXnn7TN4g==} + cpu: [arm64] + os: [darwin] + + '@rspack/binding-darwin-x64@0.7.5': + resolution: {integrity: sha512-teLK0TB1x0CsvaaiCopsFx4EvJe+/Hljwii6R7C9qOZs5zSOfbT/LQ202eA0sAGodCncARCGaXVrsekbrRYqeA==} + cpu: [x64] + os: [darwin] + + '@rspack/binding-linux-arm64-gnu@0.7.5': + resolution: {integrity: sha512-/24UytJXrK+7CsucDb30GCKYIJ8nG6ceqbJyOtsJv9zeArNLHkxrYGSyjHJIpQfwVN17BPP4RNOi+yIZ3ZgDyA==} + cpu: [arm64] + os: [linux] + + '@rspack/binding-linux-arm64-musl@0.7.5': + resolution: {integrity: sha512-6RcxG42mLM01Pa6UYycACu/Nu9qusghAPUJumb8b8x5TRIDEtklYC5Ck6Rmagm+8E0ucMude2E/D4rMdIFcS3A==} + cpu: [arm64] + os: [linux] + + '@rspack/binding-linux-x64-gnu@0.7.5': + resolution: {integrity: sha512-R0Lu4CJN2nWMW7WzPBuCIju80cQPpcaqwKJDj/quwQySpJJZ6c5qGwB8mntqjxIzZDrNH6u0OkpiUTbvWZj8ww==} + cpu: [x64] + os: [linux] + + '@rspack/binding-linux-x64-musl@0.7.5': + resolution: {integrity: sha512-dDgi/ThikMy1m4llxPeEXDCA2I8F8ezFS/eCPLZGU2/J1b4ALwDjuRsMmo+VXSlFCKgIt98V6h1woeg7nu96yg==} + cpu: [x64] + os: [linux] + + '@rspack/binding-win32-arm64-msvc@0.7.5': + resolution: {integrity: sha512-nEF4cUdLfgEK6FrgJSJhUlr2/7LY1tmqBNQCFsCjtDtUkQbJIEo1b8edT94G9tJcQoFE4cD+Re30yBYbQO2Thg==} + cpu: [arm64] + os: [win32] + + '@rspack/binding-win32-ia32-msvc@0.7.5': + resolution: {integrity: sha512-hEcHRwJIzpZsePr+5x6V/7TGhrPXhSZYG4sIhsrem1za9W+qqCYYLZ7KzzbRODU07QaAH2RxjcA1bf8F2QDYAQ==} + cpu: [ia32] + os: [win32] + + '@rspack/binding-win32-x64-msvc@0.7.5': + resolution: {integrity: sha512-PpVpP6J5/2b4T10hzSUwjLvmdpAOj3ozARl1Nrf/lsbYwhiXivoB8Gvoy/xe/Xpgr732Dk9VCeeW8rreWOOUVQ==} + cpu: [x64] + os: [win32] + + '@rspack/binding@0.7.5': + resolution: {integrity: sha512-XcdOvaCz1mWWwr5vmEY9zncdInrjINEh60EWkYdqtCA67v7X7rB1fe6n4BeAI1+YLS2Eacj+lytlr+n7I+DYVg==} + + '@rspack/cli@0.7.5': + resolution: {integrity: sha512-3Lp1RSyTRzBUi232hjRmF6wLHaMJXXMJIlX5dR662HwfCRwgm+q/Nz3829/UbjHXI2aGN4fFBgNI+LJU1TOZVQ==} + hasBin: true + peerDependencies: + '@rspack/core': '>=0.4.0' + + '@rspack/core@0.7.5': + resolution: {integrity: sha512-zVTe4WCyc3qsLPattosiDYZFeOzaJ32/BYukPP2I1VJtCVFa+PxGVRPVZhSoN6fXw5oy48yHg9W9v1T8CaEFhw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@swc/helpers': '>=0.5.1' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@rspack/dev-server@0.7.5': + resolution: {integrity: sha512-jDXfccjlHMXOxOK++uxWhLUKb0L3NuA6Ujc/J75NhWYq1YxmVhNOtUWCdunuJQ1BNeLlgG/S5X5iBCbZ09S0Jg==} + peerDependencies: + '@rspack/core': '*' + + '@shoelace-style/animations@1.1.0': + resolution: {integrity: sha512-Be+cahtZyI2dPKRm8EZSx3YJQ+jLvEcn3xzRP7tM4tqBnvd/eW/64Xh0iOf0t2w5P8iJKfdBbpVNE9naCaOf2g==} + + '@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.12': + resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==} + + '@swc/helpers@0.5.3': + resolution: {integrity: sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==} + + '@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/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.0': + resolution: {integrity: sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==} + + '@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.3.0': + resolution: {integrity: sha512-nrWpWVaDZuaVc5X84xJ0vNrLvomM205oQyLsRt7OHNZbSHslcWsvgFR7O7hire2ZonjLrWBbedmotmIlJDVd6g==} + + '@types/prop-types@15.7.12': + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + + '@types/qs@6.9.15': + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} + + '@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/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.11': + resolution: {integrity: sha512-cJuycq8j3mSBwTvUS5fCjUG/VV0n1ht/iJF6n1nR3BbZ51ICK/51pTtYqFNZQmYuH/PxzMvqzhy1H15Vz6l0UQ==} + + '@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.35.4: + resolution: {integrity: sha512-r0KQclhZ/uk5a4zOqRYQkJuQuu4vFMiA6VTj54Tk4nI1TUR3iEMMppZkWbNoWEgWwv4ciDloObb9Rf4V55Qgjw==} + + ace-linters@1.2.3: + resolution: {integrity: sha512-kfr3WG3zeAQWYLX9NwD+2AYVShvkyfVGJQLuh/wX2qIh2f71bYaFL9h7wHWtl8hofkKgDsWqfsX2LjXjoCqv5g==} + + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + + acorn-walk@8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} + 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.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + 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==} + + 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.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + 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-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==} + + 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.30001651: + resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==} + + 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.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + 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.36.1: + resolution: {integrity: sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA==} + + 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.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + 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-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@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + 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.7: + resolution: {integrity: sha512-6FTNWIWMxMy/ZY6799nBlPtF1DFDQ6VQJ7yyDP27SJNt5lwtQ5ufqVvHylb3fdQefvRcgA3fKcFMJi9OLwBRNw==} + + 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==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + 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.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + 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.19.2: + resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} + 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.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + 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==} + + html-rspack-plugin@5.7.2: + resolution: {integrity: sha512-uVXGYq19bcsX7Q/53VqXQjCKXw0eUMHlFGDLTaqzgj/ckverfhZQvXyA6ecFBaF9XUH16jfCTCyALYi0lJcagg==} + engines: {node: '>=10.13.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + peerDependenciesMeta: + '@rspack/core': + optional: true + + 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'} + + 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.0: + resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} + engines: {node: '>= 0.4'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + 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-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@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + 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.8.1: + resolution: {integrity: sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==} + + 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'} + + 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.0.0: + resolution: {integrity: sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==} + 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'} + + merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + + 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.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + 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.0: + resolution: {integrity: sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==} + 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.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + 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@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + opener@1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} + hasBin: true + + p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + + 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.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + + 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.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + 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.41: + resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} + 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.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + 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'} + + 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@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + 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@1.77.8: + resolution: {integrity: sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==} + 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@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + 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.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + 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.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + 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.10: + resolution: {integrity: sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==} + 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.31.6: + resolution: {integrity: sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==} + 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==} + + 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==} + + 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.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + + 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.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.18.2: + resolution: {integrity: sha512-5ruQbENj95yDYJNS3TvcaxPMshV7aizdv/hWYjGIKoANWKjhWNBsr2YEuYZKodQulB1b8l7ILOuDQep3afowQQ==} + + 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 + + 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.0: + resolution: {integrity: sha512-nU92imtkgzpCL0xikrIb8WvedV553F2BENzgz23wFuok/HLN5BeQmroMy26pUwFxV2eV8oNRmYCUv8iO7kSMhw==} + + 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.0: + resolution: {integrity: sha512-C4Z3KsP5Ih+fjHpiBc5jxmvCl+4iEwvXegIrzu2F5pktbWvQaBT3YkVPk8N+QlSSMk8oCG6PKtZ/Sq2YHb5e8g==} + + vscode-json-languageservice@5.4.0: + resolution: {integrity: sha512-NCkkCr63OHVkE4lcb0xlUAaix6vE5gHQW4NrswbLEh3ArXj81lrGuFTsGEYEUXlNHdnc53vWPcjeSy/nMTrfXg==} + + 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@5.3.4: + resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + + webpack-dev-middleware@6.1.2: + resolution: {integrity: sha512-Wu+EHmX326YPYUpQLKmKbTyZZJIB8/n6R09pTmB03kJmnMsVPTo9COzHZFr01txwaCAuZvfBJE4ZCHRcKs5JaQ==} + engines: {node: '>= 14.15.0'} + peerDependencies: + webpack: ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true + + webpack-dev-server@4.13.1: + 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-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack@5.93.0: + resolution: {integrity: sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==} + 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 + + 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 + + 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.0: + resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} + 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.0.1 + + '@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.0.1 + + '@babel/runtime@7.25.0': + dependencies: + regenerator-runtime: 0.14.1 + + '@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.6.3 + optional: true + + '@emnapi/runtime@1.2.0': + dependencies: + tslib: 2.6.3 + optional: true + + '@emnapi/wasi-threads@1.0.1': + dependencies: + tslib: 2.6.3 + optional: true + + '@floating-ui/core@1.6.7': + dependencies: + '@floating-ui/utils': 0.2.7 + + '@floating-ui/dom@1.6.10': + dependencies: + '@floating-ui/core': 1.6.7 + '@floating-ui/utils': 0.2.7 + + '@floating-ui/utils@0.2.7': {} + + '@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 + + '@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.1.6': + dependencies: + '@module-federation/runtime': 0.1.6 + '@module-federation/webpack-bundler-runtime': 0.1.6 + + '@module-federation/runtime@0.1.6': + dependencies: + '@module-federation/sdk': 0.1.6 + + '@module-federation/sdk@0.1.6': {} + + '@module-federation/webpack-bundler-runtime@0.1.6': + dependencies: + '@module-federation/runtime': 0.1.6 + '@module-federation/sdk': 0.1.6 + + '@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@0.7.10': dependencies: - '@rsbuild/shared': 0.6.4(@swc/helpers@0.5.3) - '@rspack/core': 0.6.2(@swc/helpers@0.5.3) + '@rsbuild/shared': 0.7.10(@swc/helpers@0.5.3) + '@rspack/core': 0.7.5(@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 + html-webpack-plugin: html-rspack-plugin@5.7.2(@rspack/core@0.7.5(@swc/helpers@0.5.3)) + postcss: 8.4.41 - /@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@0.7.10(@rsbuild/core@0.7.10)': 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 + '@rsbuild/core': 0.7.10 + svgo: 3.3.2 - /@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-type-check@0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.12)(typescript@5.5.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': 0.7.10 + '@rsbuild/shared': 0.7.10(@swc/helpers@0.5.12) + fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.5.4)(webpack@5.93.0) + json5: 2.2.3 + webpack: 5.93.0 transitivePeerDependencies: - '@swc/core' - '@swc/helpers' @@ -540,123 +2768,73 @@ packages: - 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==} + '@rsbuild/shared@0.7.10(@swc/helpers@0.5.12)': 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 - 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 - 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 - optional: true - - /@rspack/binding-linux-arm64-musl@0.6.2: - resolution: {integrity: sha512-1IyPH6hQreOvcNZmwK4XD8E5NEYqrtzKvsUPB13AV3+mO1EHxhnwQ7Dtk82mqwtaTTUPXJRREp+UNjwUTeJ6bA==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rspack/binding-linux-x64-gnu@0.6.2: - resolution: {integrity: sha512-NbqU05wIy1qC+66qlQjE9Zo4oAd70lZRgfO8iuLvon0GxG7plpffefhsAoAsh5vFg17ac6NWdwUUzWImYv2jhQ==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - 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 - optional: true - - /@rspack/binding-win32-arm64-msvc@0.6.2: - resolution: {integrity: sha512-00FdIoh2X8zt2i07R89zyI0HONof91PiM5JgY8BAfSPur+M9Uj7stqYHezr0KtVdgH2sASMURFGmgcz62pLViw==} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - 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 - optional: true - - /@rspack/binding-win32-x64-msvc@0.6.2: - resolution: {integrity: sha512-1Ycfry5nk5SMDYOjlOmVXf4tJHOp2H2Wwupf5j2pUYPD9lyETt7O7GIQbdCLOcBLuyt0OSscDARTcqGlLw27gQ==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@rspack/binding@0.6.2: - resolution: {integrity: sha512-1LVccU/LRIMqp2g1ct2ebDS1DL7MnBlQNcUGf3szIiDsYXuGe3Pk4qdiLbVLzBQoDQFYKJmIgmUA1UkKZ5UN5g==} + '@rspack/core': 0.7.5(@swc/helpers@0.5.12) + caniuse-lite: 1.0.30001651 + html-webpack-plugin: html-rspack-plugin@5.7.2(@rspack/core@0.7.5(@swc/helpers@0.5.12)) + postcss: 8.4.41 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 + fsevents: 2.3.3 + transitivePeerDependencies: + - '@swc/helpers' - /@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' + '@rsbuild/shared@0.7.10(@swc/helpers@0.5.3)': + dependencies: + '@rspack/core': 0.7.5(@swc/helpers@0.5.3) + caniuse-lite: 1.0.30001651 + html-webpack-plugin: html-rspack-plugin@5.7.2(@rspack/core@0.7.5(@swc/helpers@0.5.3)) + postcss: 8.4.41 + optionalDependencies: + fsevents: 2.3.3 + transitivePeerDependencies: + - '@swc/helpers' + + '@rspack/binding-darwin-arm64@0.7.5': + optional: true + + '@rspack/binding-darwin-x64@0.7.5': + optional: true + + '@rspack/binding-linux-arm64-gnu@0.7.5': + optional: true + + '@rspack/binding-linux-arm64-musl@0.7.5': + optional: true + + '@rspack/binding-linux-x64-gnu@0.7.5': + optional: true + + '@rspack/binding-linux-x64-musl@0.7.5': + optional: true + + '@rspack/binding-win32-arm64-msvc@0.7.5': + optional: true + + '@rspack/binding-win32-ia32-msvc@0.7.5': + optional: true + + '@rspack/binding-win32-x64-msvc@0.7.5': + optional: true + + '@rspack/binding@0.7.5': + optionalDependencies: + '@rspack/binding-darwin-arm64': 0.7.5 + '@rspack/binding-darwin-x64': 0.7.5 + '@rspack/binding-linux-arm64-gnu': 0.7.5 + '@rspack/binding-linux-arm64-musl': 0.7.5 + '@rspack/binding-linux-x64-gnu': 0.7.5 + '@rspack/binding-linux-x64-musl': 0.7.5 + '@rspack/binding-win32-arm64-msvc': 0.7.5 + '@rspack/binding-win32-ia32-msvc': 0.7.5 + '@rspack/binding-win32-x64-msvc': 0.7.5 + + '@rspack/cli@0.7.5(@rspack/core@0.7.5(@swc/helpers@0.5.12))(@types/express@4.17.21)(webpack@5.93.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': 0.7.5(@swc/helpers@0.5.12) + '@rspack/dev-server': 0.7.5(@rspack/core@0.7.5(@swc/helpers@0.5.12))(@types/express@4.17.21)(webpack@5.93.0) colorette: 2.0.19 exit-hook: 3.2.0 interpret: 3.1.1 @@ -672,71 +2850,37 @@ 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@0.7.5(@swc/helpers@0.5.12)': 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 + '@rspack/binding': 0.7.5 + caniuse-lite: 1.0.30001651 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 + optionalDependencies: + '@swc/helpers': 0.5.12 - /@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/core@0.7.5(@swc/helpers@0.5.3)': dependencies: '@module-federation/runtime-tools': 0.1.6 - '@rspack/binding': 0.6.2 + '@rspack/binding': 0.7.5 + caniuse-lite: 1.0.30001651 + tapable: 2.2.1 + webpack-sources: 3.2.3 + optionalDependencies: '@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': '*' + '@rspack/dev-server@0.7.5(@rspack/core@0.7.5(@swc/helpers@0.5.12))(@types/express@4.17.21)(webpack@5.93.0)': dependencies: - '@rspack/core': 0.6.2(@swc/helpers@0.5.10) + '@rspack/core': 0.7.5(@swc/helpers@0.5.12) chokidar: 3.5.3 connect-history-api-fallback: 2.0.0 - express: 4.18.1 + express: 4.19.2 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) + webpack-dev-middleware: 6.1.2(webpack@5.93.0) + webpack-dev-server: 4.13.1(webpack@5.93.0) ws: 8.8.1 transitivePeerDependencies: - '@types/express' @@ -746,293 +2890,190 @@ 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 + '@shoelace-style/animations@1.1.0': {} - /@shoelace-style/localize@3.1.2: - resolution: {integrity: sha512-Hf45HeO+vdQblabpyZOTxJ4ZeZsmIUYXXPmoYrrR4OJ5OKxL+bhMz5mK8JXgl7HsoEowfz7+e248UGi861de9Q==} - dev: false + '@shoelace-style/localize@3.2.1': {} - /@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/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) + '@floating-ui/dom': 1.6.10 + '@lit/react': 1.0.5(@types/react@18.2.79) '@shoelace-style/animations': 1.1.0 - '@shoelace-style/localize': 3.1.2 + '@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.12': dependencies: - tslib: 2.6.2 - dev: true + tslib: 2.6.3 - /@swc/helpers@0.5.3: - resolution: {integrity: sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==} + '@swc/helpers@0.5.3': dependencies: - tslib: 2.6.2 - dev: true + tslib: 2.6.3 - /@trysound/sax@0.2.0: - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - dev: true + '@trysound/sax@0.2.0': {} - /@tybys/wasm-util@0.8.2: - resolution: {integrity: sha512-kzI0zdUtC/ymNQCVQiqHCKobSSyppUHet+pHaiOdKUV48B/uKCEDznwf4N9tOoDKdh7Uuhm8V60xPU8VYbBbrQ==} - requiresBuild: true + '@tybys/wasm-util@0.9.0': dependencies: - tslib: 2.6.2 - dev: true + tslib: 2.6.3 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.3.0 - /@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.3.0 - /@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.3.0 - /@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.3.0 - /@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/eslint-scope@3.7.7': dependencies: - '@types/eslint': 8.56.9 + '@types/eslint': 9.6.0 '@types/estree': 1.0.5 - dev: true - /@types/eslint@8.56.9: - resolution: {integrity: sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==} + '@types/eslint@9.6.0': 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/estree@1.0.5': {} - /@types/express-serve-static-core@4.19.0: - resolution: {integrity: sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==} + '@types/express-serve-static-core@4.19.5': dependencies: - '@types/node': 20.12.7 + '@types/node': 22.3.0 '@types/qs': 6.9.15 '@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/express-serve-static-core': 4.19.5 '@types/qs': 6.9.15 '@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.3.0 - /@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.3.0 - /@types/node@20.12.7: - resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + '@types/node@22.3.0': dependencies: - undici-types: 5.26.5 - dev: true + undici-types: 6.18.2 - /@types/prop-types@15.7.12: - resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} - dev: false + '@types/prop-types@15.7.12': {} - /@types/qs@6.9.15: - resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} - dev: true + '@types/qs@6.9.15': {} - /@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 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/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.12.7 - dev: true + '@types/node': 22.3.0 - /@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.3.0 '@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.3.0 - /@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.3.0 - /@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.11': {} - /@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 @@ -1042,29 +3083,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 @@ -1072,87 +3107,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.35.4: {} - /ace-linters@1.2.0: - resolution: {integrity: sha512-xvayDhn3iCmB1oEloK7ZNRZHvRwDIGu+EWtlpXNL8wAwSdQjo05bTbnXEpSCy/sBlJg5tyEwsTYesNrx05DiAg==} + ace-linters@1.2.3: dependencies: '@xml-tools/ast': 5.0.5 '@xml-tools/constraints': 1.1.1 @@ -1161,199 +3169,103 @@ 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.0 + vscode-html-languageservice: 5.3.0 + vscode-json-languageservice: 5.4.0 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-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.3: 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.0.1: {} - /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 + binary-extensions@2.3.0: {} - /bn.js@4.12.0: - resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} - dev: false + bn.js@4.12.0: {} - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - dev: false + bn.js@5.2.1: {} - /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} - 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.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} + body-parser@1.20.2: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -1369,52 +3281,34 @@ packages: 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 @@ -1422,142 +3316,93 @@ 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.30001651 + electron-to-chromium: 1.5.7 + 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-from@1.1.2: {} - /buffer-xor@1.0.3: - resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} - dev: false + buffer-xor@1.0.3: {} - /buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + 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 + bytes@3.0.0: {} - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: true + bytes@3.1.2: {} - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} + 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.30001651: {} - /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.5.3: 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 @@ -1565,14 +3410,11 @@ 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'} + 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 @@ -1580,100 +3422,55 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true - /chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} - engines: {node: '>=6.0'} - dev: true + chrome-trace-event@1.0.4: {} - /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: {} - /comlink@4.4.1: - resolution: {integrity: sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==} - dev: false + commander@2.20.3: {} - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true + commander@4.1.1: {} - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - dev: true + commander@7.2.0: {} - /commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - dev: true + commander@9.5.0: {} - /commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - dev: false + composed-offset-position@0.0.4: {} - /composed-offset-position@0.0.4: - resolution: {integrity: sha512-vMlvu1RuNegVE0YsCDSV/X4X10j56mq7PCIyOKK74FxkXzGLwhOUmdkJLSdOBOMwWycobGUMgft2lp+YgTe8hw==} - dev: false - - /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 @@ -1684,101 +3481,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.36.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.5.4): 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.5.4 - /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.5.4): 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.5.4 - /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 @@ -1786,19 +3539,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 @@ -1811,208 +3559,117 @@ 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 - /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 - /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.6: dependencies: ms: 2.1.2 - dev: true - /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-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@2.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.0 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.7: {} - /elliptic@6.5.5: - resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==} + elliptic@6.5.7: dependencies: bn.js: 4.12.0 brorand: 1.1.0 @@ -2021,132 +3678,65 @@ 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 + encodeurl@1.0.2: {} - /enhanced-resolve@5.12.0: - resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} - engines: {node: '>=10.13.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.1.2: {} - /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 @@ -2157,55 +3747,10 @@ 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'} - 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'} + express@4.19.2: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 @@ -2240,50 +3785,34 @@ 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.7 - /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.2.0: dependencies: debug: 2.6.9 encodeurl: 1.0.2 @@ -2294,140 +3823,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.6: {} - /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.5.4)(webpack@5.93.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.5.4) 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.5.4 + webpack: 5.93.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 @@ -2436,125 +3907,74 @@ 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 + html-rspack-plugin@5.7.2(@rspack/core@0.7.5(@swc/helpers@0.5.12)): + optionalDependencies: + '@rspack/core': 0.7.5(@swc/helpers@0.5.12) - /htmlhint@1.1.4: - resolution: {integrity: sha512-tSKPefhIaaWDk/vKxAOQbN+QwZmDeJCq3bZZGbJMoMQAfTjepudC+MkuT9MOBbuQI3dLLzDWbmU7fLV3JASC7Q==} - hasBin: true + html-rspack-plugin@5.7.2(@rspack/core@0.7.5(@swc/helpers@0.5.3)): + optionalDependencies: + '@rspack/core': 0.7.5(@swc/helpers@0.5.3) + + htmlhint@1.1.4: dependencies: async: 3.2.3 chalk: 4.1.2 @@ -2566,296 +3986,172 @@ 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.7 + 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 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'} + 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.0: 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@2.2.1: {} - /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-number@7.0.0: {} - /is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - dev: true + is-plain-obj@3.0.0: {} - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true + is-stream@2.0.1: {} - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 - dev: true - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isarray@1.0.0: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isexe@2.0.0: {} - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} + 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.3.0 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.8.1: dependencies: - picocolors: 1.0.0 + picocolors: 1.0.1 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.11 chalk: 2.4.2 didyoumean2: 4.1.0 fast-glob: 3.3.2 @@ -2864,363 +4160,195 @@ 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.93.0): dependencies: clean-css: 4.2.4 - webpack: 5.91.0 - dev: true + webpack: 5.93.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.deburr@4.1.0: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lodash@4.17.21: {} - /lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} - engines: {node: 14 || >=16.14} - dev: true + lru-cache@10.4.3: {} - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: true + luaparse@0.3.1: {} - /luaparse@0.3.1: - resolution: {integrity: sha512-b21h2bFEbtGXmVqguHogbyrMAA0wOHyp9u/rx+w6Yc9pW1t9YjhGUsp87lYcp7pFRqSWN/PhFkrdIqKEUzRjjQ==} - hasBin: true - dev: false + lzma-web@3.0.1: {} - /lzma-web@3.0.1: - resolution: {integrity: sha512-sb5cdfd+PLNljK/HUgYzvnz4G7r0GFK8sonyGrqJS0FVyUQjFYcnmU2LqTWFi6r48lH1ZBstnxyLWepKM/t7QA==} - dev: false + marked@14.0.0: {} - /marked@12.0.2: - resolution: {integrity: sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==} - engines: {node: '>= 18'} - hasBin: true - dev: false - - /md5.js@1.3.5: - resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + 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-descriptors@1.0.1: {} - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + merge-stream@2.0.0: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + merge2@1.4.1: {} - /methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - dev: true + methods@1.1.2: {} - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + micromatch@4.0.7: dependencies: - braces: 3.0.2 + 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.0(webpack@5.93.0): dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.91.0 - dev: true + webpack: 5.93.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.2: {} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true + ms@2.1.3: {} - /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@8.4.2: dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 - dev: true - /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'} + 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 @@ -3228,193 +4356,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.7: {} - /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.0.1: {} - /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.41): dependencies: - postcss: 8.4.38 + postcss: 8.4.41 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.41): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.38 - dev: true + postcss: 8.4.41 - /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.41): dependencies: - lilconfig: 3.1.1 - postcss: 8.4.38 - yaml: 2.4.1 - dev: true + lilconfig: 3.1.2 + yaml: 2.5.0 + optionalDependencies: + postcss: 8.4.41 - /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@0.7.5(@swc/helpers@0.5.12))(postcss@8.4.41)(typescript@5.5.4)(webpack@5.93.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.5.4) + jiti: 1.21.6 + postcss: 8.4.41 + semver: 7.6.3 + optionalDependencies: + '@rspack/core': 0.7.5(@swc/helpers@0.5.12) + webpack: 5.93.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.41): dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true + postcss: 8.4.41 + 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.41: dependencies: nanoid: 3.3.7 - picocolors: 1.0.0 + picocolors: 1.0.1 source-map-js: 1.2.0 - dev: true - /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 @@ -3422,80 +4463,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.11.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 @@ -3505,161 +4506,92 @@ 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 + regenerator-runtime@0.14.1: {} - /regexp-to-ast@0.5.0: - resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==} - dev: false + regexp-to-ast@0.5.0: {} - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true + require-directory@2.1.1: {} - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true + require-from-string@2.0.2: {} - /requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: true + requires-port@1.0.0: {} - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true + resolve-from@4.0.0: {} - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true + resolve@1.22.8: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.0 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@3.0.2: dependencies: glob: 7.2.3 - dev: true - /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-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + safe-buffer@5.1.2: {} - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-buffer@5.2.1: {} - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safer-buffer@2.1.2: {} - /sass@1.75.0: - resolution: {integrity: sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==} - engines: {node: '>=14.0.0'} - hasBin: true + sass@1.77.8: dependencies: chokidar: 3.6.0 - immutable: 4.3.5 + immutable: 4.3.7 source-map-js: 1.2.0 - dev: true - /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@6.3.1: {} - /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 + semver@7.6.3: {} - /send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} + send@0.18.0: dependencies: debug: 2.6.9 depd: 2.0.0 @@ -3676,17 +4608,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 @@ -3697,11 +4624,8 @@ 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.15.0: dependencies: encodeurl: 1.0.2 escape-html: 1.0.3 @@ -3709,11 +4633,8 @@ packages: send: 0.18.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 @@ -3721,109 +4642,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.0: {} - /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.6 detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -3831,133 +4708,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.6 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 - /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 @@ -3965,13 +4792,9 @@ packages: css-tree: 2.3.1 css-what: 6.1.0 csso: 5.0.5 - picocolors: 1.0.0 - dev: true + picocolors: 1.0.1 - /tailwindcss@3.4.3: - resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==} - engines: {node: '>=14.0.0'} - hasBin: true + tailwindcss@3.4.10: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -3981,448 +4804,268 @@ 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.7 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.0.1 + postcss: 8.4.41 + postcss-import: 15.1.0(postcss@8.4.41) + postcss-js: 4.0.1(postcss@8.4.41) + postcss-load-config: 4.0.2(postcss@8.4.41) + postcss-nested: 6.2.0(postcss@8.4.41) + 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.93.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.31.6 + webpack: 5.93.0 - /terser@5.30.3: - resolution: {integrity: sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==} - engines: {node: '>=10'} - hasBin: true + terser@5.31.6: 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 + thunky@1.1.0: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.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 + ts-interface-checker@0.1.13: {} - /ts-lit-plugin@2.0.2: - resolution: {integrity: sha512-DPXlVxhjWHxg8AyBLcfSYt2JXgpANV1ssxxwjY98o26gD8MzeiM68HFW9c2VeDd1CjoR3w7B/6/uKxwBQe+ioA==} + 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.5.4)(webpack@5.93.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.7 + semver: 7.6.3 source-map: 0.7.4 - typescript: 5.4.5 - webpack: 5.91.0 - dev: true + typescript: 5.5.4 + webpack: 5.93.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.6.3: {} - /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.5.4: {} - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true + undici-types@6.18.2: {} - /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 + browserslist: 4.23.3 escalade: 3.1.2 - picocolors: 1.0.0 - dev: true + picocolors: 1.0.1 - /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 + vary@1.1.2: {} - /vm-browserify@1.1.2: - resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} - dev: false + vm-browserify@1.1.2: {} - /vscode-css-languageservice@3.0.13: - resolution: {integrity: sha512-RWkO/c/A7iXhHEy3OuEqkCqavDjpD4NF2Ca8vjai+ZtEYNeHrm1ybTnBYLP4Ft1uXvvaaVtYA9HrDjD6+CUONg==} + 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.0: 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.0: 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.0: 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.3 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@5.3.4(webpack@5.93.0): dependencies: - colorette: 2.0.20 + colorette: 2.0.19 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: 5.93.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 + webpack-dev-middleware@6.1.2(webpack@5.93.0): dependencies: - colorette: 2.0.20 + colorette: 2.0.19 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 + optionalDependencies: + webpack: 5.93.0 - /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@4.13.1(webpack@5.93.0): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -4430,11 +5073,11 @@ 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 + chokidar: 3.5.3 + colorette: 2.0.19 compression: 1.7.4 connect-history-api-fallback: 2.0.0 default-gateway: 6.0.3 @@ -4442,8 +5085,8 @@ packages: 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 + ipaddr.js: 2.2.0 + launch-editor: 2.8.1 open: 8.4.2 p-retry: 4.6.2 rimraf: 3.0.2 @@ -4452,42 +5095,31 @@ packages: 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: 5.3.4(webpack@5.93.0) + ws: 8.18.0 + optionalDependencies: + webpack: 5.93.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.93.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 @@ -4498,131 +5130,60 @@ 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.93.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 + ws@8.8.1: {} - /xml@1.0.1: - resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} - dev: false + xml@1.0.1: {} - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + y18n@5.0.8: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + yaml@2.5.0: {} - /yaml@2.4.1: - resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} - engines: {node: '>= 14'} - hasBin: true - dev: true + yargs-parser@21.1.1: {} - /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 @@ -4631,11 +5192,8 @@ packages: 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 @@ -4644,27 +5202,3 @@ packages: 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/src/ts/virtualMachine/baseDevice.ts b/www/src/ts/virtualMachine/baseDevice.ts index 0d84630..88db46d 100644 --- a/www/src/ts/virtualMachine/baseDevice.ts +++ b/www/src/ts/virtualMachine/baseDevice.ts @@ -14,58 +14,15 @@ import type { LogicSlotType, SlotOccupantInfo, ICState, + ObjectTemplate, } from "ic10emu_wasm"; import { crc32, structuralEqual } from "utils"; import { LitElement, PropertyValueMap } from "lit"; -type Constructor = new (...args: any[]) => T; - -export declare class VMObjectMixinInterface { - objectID: ObjectID; - activeICId: ObjectID; - obj: FrozenObjectFull; - name: string | null; - nameHash: number | null; - prefabName: string | null; - prefabHash: number | null; - logicFields: Map | null; - slots: VmObjectSlotInfo[] | null; - slotsCount: number | null; - reagents: Map | null; - connections: Connection[] | null; - icIP: number | null; - icOpCount: number | null; - icState: string | null; - errors: ICError[] | null; - registers: number[] | null; - memory: number[] | null; - aliases: Map | null; - defines: Map | null; - numPins: number | null; - pins: Map | null; - visibleDevices: ObjectID[] | null; - _handleDeviceModified(e: CustomEvent): void; - updateDevice(): void; - updateIC(): void; - subscribe(...sub: VMObjectMixinSubscription[]): void; - unsubscribe(filter: (sub: VMObjectMixinSubscription) => boolean): void; -} - -export type VMObjectMixinSubscription = - | "name" - | "nameHash" - | "prefabName" - | "fields" - | "slots" - | "slots-count" - | "reagents" - | "connections" - | "memory" - | "ic" - | "active-ic" - | { field: LogicType } - | { slot: number } - | "visible-devices"; +import { + computed, +} from '@lit-labs/preact-signals'; +import type { Signal } from '@lit-labs/preact-signals'; export interface VmObjectSlotInfo { parent: ObjectID; @@ -74,9 +31,309 @@ export interface VmObjectSlotInfo { typ: Class; logicFields: Map; quantity: number; - occupant: FrozenObjectFull | undefined; + occupant: ComputedObjectSignals | null; } +export class ComputedObjectSignals { + obj: Signal; + id: Signal; + template: Signal; + + name: Signal; + nameHash: Signal; + prefabName: Signal; + prefabHash: Signal; + displayName: Signal; + logicFields: Signal | null>; + slots: Signal; + slotsCount: Signal; + reagents: Signal | null>; + + connections: Signal; + visibleDevices: Signal; + + memory: Signal; + icIP: Signal; + icOpCount: Signal; + icState: Signal; + errors: Signal; + registers: Signal; + aliases: Signal | null>; + defines: Signal | null>; + + numPins: Signal; + pins: Signal | null>; + + + constructor(obj: Signal) { + this.obj = obj + this.id = computed(() => { return this.obj.value.obj_info.id; }); + + this.template = computed(() => { return this.obj.value.template; }); + + this.name = computed(() => { return this.obj.value.obj_info.name; }); + this.nameHash = computed(() => { return this.name.value !== "undefined" ? crc32(this.name.value) : null; }); + this.prefabName = computed(() => { return this.obj.value.obj_info.prefab; }); + this.prefabHash = computed(() => { return this.obj.value.obj_info.prefab_hash; }); + this.displayName = computed(() => { return this.obj.value.obj_info.name ?? this.obj.value.obj_info.prefab; }); + + this.logicFields = computed(() => { + const obj_info = this.obj.value.obj_info; + const template = this.obj.value.template; + + const logicValues = + obj_info.logic_values != null + ? (new Map(Object.entries(obj_info.logic_values)) as Map< + LogicType, + number + >) + : null; + const logicTemplate = + "logic" in template ? template.logic : null; + + return new Map( + Array.from(Object.entries(logicTemplate?.logic_types) ?? []).map( + ([lt, access]) => { + let field: LogicField = { + field_type: access, + value: logicValues.get(lt as LogicType) ?? 0, + }; + return [lt as LogicType, field]; + }, + ), + ) + }); + + this.slots = computed(() => { + const obj_info = this.obj.value.obj_info; + const template = this.obj.value.template; + + const slotsOccupantInfo = + obj_info.slots != null + ? new Map( + Object.entries(obj_info.slots).map(([key, val]) => [ + parseInt(key), + val, + ]), + ) + : null; + const slotsLogicValues = + obj_info.slot_logic_values != null + ? new Map>( + Object.entries(obj_info.slot_logic_values).map( + ([index, values]) => [ + parseInt(index), + new Map(Object.entries(values)) as Map< + LogicSlotType, + number + >, + ], + ), + ) + : null; + const logicTemplate = + "logic" in template ? template.logic : null; + const slotsTemplate = + "slots" in template ? template.slots : []; + + return slotsTemplate.map((template, index) => { + const fieldEntryInfos = Array.from( + Object.entries(logicTemplate?.logic_slot_types[index]) ?? [], + ); + const logicFields = new Map( + fieldEntryInfos.map(([slt, access]) => { + let field: LogicField = { + field_type: access, + value: + slotsLogicValues.get(index)?.get(slt as LogicSlotType) ?? 0, + }; + return [slt as LogicSlotType, field]; + }), + ); + let occupantInfo = slotsOccupantInfo.get(index); + let occupant = + typeof occupantInfo !== "undefined" + ? globalObjectSignalMap.get(occupantInfo.id) ?? null + : null; + let slot: VmObjectSlotInfo = { + parent: obj_info.id, + index: index, + name: template.name, + typ: template.typ, + logicFields: logicFields, + occupant: occupant, + quantity: occupantInfo?.quantity ?? 0, + }; + return slot; + }); + }); + + this.slotsCount = computed(() => { + const slotsTemplate = + "slots" in this.obj.value.template ? this.obj.value.template.slots : []; + return slotsTemplate.length; + }); + + this.reagents = computed(() => { + const reagents = + this.obj.value.obj_info.reagents != null + ? new Map( + Object.entries(this.obj.value.obj_info.reagents).map( + ([key, val]) => [parseInt(key), val], + ), + ) + : null; + return reagents; + }); + + this.connections = computed(() => { + const obj_info = this.obj.value.obj_info; + const template = this.obj.value.template; + + const connectionsMap = + obj_info.connections != null + ? new Map( + Object.entries(obj_info.connections).map( + ([key, val]) => [parseInt(key), val], + ), + ) + : null; + const connectionList = + "device" in template + ? template.device.connection_list + : []; + let connections: Connection[] | null = null; + if (connectionList.length !== 0) { + connections = connectionList.map((conn, index) => { + if (conn.typ === "Data") { + return { + CableNetwork: { + typ: "Data", + role: conn.role, + net: connectionsMap.get(index), + }, + }; + } else if (conn.typ === "Power") { + return { + CableNetwork: { + typ: "Power", + role: conn.role, + net: connectionsMap.get(index), + }, + }; + } else if (conn.typ === "PowerAndData") { + return { + CableNetwork: { + typ: "Data", + role: conn.role, + net: connectionsMap.get(index), + }, + }; + } else if (conn.typ === "Pipe") { + return { Pipe: { role: conn.role } }; + } else if (conn.typ === "Chute") { + return { Chute: { role: conn.role } }; + } else if (conn.typ === "Elevator") { + return { Elevator: { role: conn.role } }; + } else if (conn.typ === "LaunchPad") { + return { LaunchPad: { role: conn.role } }; + } else if (conn.typ === "LandingPad") { + return { LandingPad: { role: conn.role } }; + } else if (conn.typ === "PipeLiquid") { + return { PipeLiquid: { role: conn.role } }; + } + return "None"; + }); + } + return connections; + }); + + this.visibleDevices = computed(() => { + return this.obj.value.obj_info.visible_devices.map((id) => globalObjectSignalMap.get(id)) + }); + + this.memory = computed(() => { + return this.obj.value.obj_info.memory ?? null; + }); + + this.icIP = computed(() => { + return this.obj.value.obj_info.circuit?.instruction_pointer ?? null; + }); + + this.icOpCount = computed(() => { + return this.obj.value.obj_info.circuit?.yield_instruction_count ?? null; + }); + + this.icState = computed(() => { + return this.obj.value.obj_info.circuit?.state ?? null; + }); + + this.errors = computed(() => { + return this.obj.value.obj_info.compile_errors ?? null; + }); + + this.registers = computed(() => { + return this.obj.value.obj_info.circuit?.registers ?? null; + }); + + this.aliases = computed(() => { + const aliases = this.obj.value.obj_info.circuit?.aliases ?? null; + return aliases != null ? new Map(Object.entries(aliases)) : null; + }); + + this.defines = computed(() => { + const defines = this.obj.value.obj_info.circuit?.defines ?? null; + return defines != null ? new Map(Object.entries(defines)) : null; + }); + + this.pins = computed(() => { + const pins = this.obj.value.obj_info.device_pins; + return pins != null ? new Map(Object.entries(pins).map(([key, val]) => [parseInt(key), val])) : null; + }); + + this.numPins = computed(() => { + return "device" in this.obj.value.template + ? this.obj.value.template.device.device_pins_length + : Math.max(...Array.from(this.pins.value?.keys() ?? [0])); + }); + + } +} + +class ObjectComputedSignalMap extends Map { + get(id: ObjectID): ComputedObjectSignals { + if (!this.has(id)) { + const obj = window.VM.vm.objects.get(id) + if (typeof obj !== "undefined") { + this.set(id, new ComputedObjectSignals(obj)); + } + } + return super.get(id); + } + set(id: ObjectID, value: ComputedObjectSignals): this { + super.set(id, value); + return this + } +} + +export const globalObjectSignalMap = new ObjectComputedSignalMap(); + +type Constructor = new (...args: any[]) => T; + +export declare class VMObjectMixinInterface { + objectID: ObjectID; + activeICId: ObjectID; + objectSignals: ComputedObjectSignals | null; + _handleDeviceModified(e: CustomEvent): void; + updateDevice(): void; + subscribe(...sub: VMObjectMixinSubscription[]): void; + unsubscribe(filter: (sub: VMObjectMixinSubscription) => boolean): void; +} + +export type VMObjectMixinSubscription = + | "active-ic" + | "visible-devices"; + export const VMObjectMixin = >( superClass: T, ) => { @@ -104,31 +361,10 @@ export const VMObjectMixin = >( ); } - obj: FrozenObjectFull; + @state() objectSignals: ComputedObjectSignals | null; @state() activeICId: number; - @state() name: string | null = null; - @state() nameHash: number | null = null; - @state() prefabName: string | null = null; - @state() prefabHash: number | null = null; - @state() logicFields: Map | null = null; - @state() slots: VmObjectSlotInfo[] | null = null; - @state() slotsCount: number | null = null; - @state() reagents: Map | null = null; - @state() connections: Connection[] | null = null; - @state() icIP: number | null = null; - @state() icOpCount: number | null = null; - @state() icState: ICState | null = null; - @state() errors: ICError[] | null = null; - @state() registers: number[] | null = null; - @state() memory: number[] | null = null; - @state() aliases: Map | null = null; - @state() defines: Map | null = null; - @state() numPins: number | null = null; - @state() pins: Map | null = null; - @state() visibleDevices: ObjectID[] | null = null; - connectedCallback(): void { const root = super.connectedCallback(); window.VM.get().then((vm) => { @@ -246,315 +482,20 @@ export const VMObjectMixin = >( } updateDevice() { - this.obj = window.VM.vm.objects.get(this.objectID)!; + const newObjSignals = globalObjectSignalMap.get(this.objectID); + if (newObjSignals !== this.objectSignals) { + this.objectSignals = newObjSignals + } - if (typeof this.obj === "undefined") { + if (typeof this.objectSignals === "undefined") { return; } - let newFields: Map | null = null; - if ( - this.objectSubscriptions.some( - (sub) => - sub === "fields" || (typeof sub === "object" && "field" in sub), - ) - ) { - const logicValues = - this.obj.obj_info.logic_values != null - ? (new Map(Object.entries(this.obj.obj_info.logic_values)) as Map< - LogicType, - number - >) - : null; - const logicTemplate = - "logic" in this.obj.template ? this.obj.template.logic : null; - newFields = new Map( - Array.from(Object.entries(logicTemplate?.logic_types) ?? []).map( - ([lt, access]) => { - let field: LogicField = { - field_type: access, - value: logicValues.get(lt as LogicType) ?? 0, - }; - return [lt as LogicType, field]; - }, - ), - ); - } + // other updates needed - const visibleDevices = this.obj.obj_info.visible_devices ?? []; - if (!structuralEqual(this.visibleDevices, visibleDevices)) { - this.visibleDevices = visibleDevices; - } - - let newSlots: VmObjectSlotInfo[] | null = null; - if ( - this.objectSubscriptions.some( - (sub) => - sub === "slots" || (typeof sub === "object" && "slot" in sub), - ) - ) { - const slotsOccupantInfo = - this.obj.obj_info.slots != null - ? new Map( - Object.entries(this.obj.obj_info.slots).map(([key, val]) => [ - parseInt(key), - val, - ]), - ) - : null; - const slotsLogicValues = - this.obj.obj_info.slot_logic_values != null - ? new Map>( - Object.entries(this.obj.obj_info.slot_logic_values).map( - ([index, values]) => [ - parseInt(index), - new Map(Object.entries(values)) as Map< - LogicSlotType, - number - >, - ], - ), - ) - : null; - const logicTemplate = - "logic" in this.obj.template ? this.obj.template.logic : null; - const slotsTemplate = - "slots" in this.obj.template ? this.obj.template.slots : []; - newSlots = slotsTemplate.map((template, index) => { - const fieldEntryInfos = Array.from( - Object.entries(logicTemplate?.logic_slot_types[index]) ?? [], - ); - const logicFields = new Map( - fieldEntryInfos.map(([slt, access]) => { - let field: LogicField = { - field_type: access, - value: - slotsLogicValues.get(index)?.get(slt as LogicSlotType) ?? 0, - }; - return [slt as LogicSlotType, field]; - }), - ); - let occupantInfo = slotsOccupantInfo.get(index); - let occupant = - typeof occupantInfo !== "undefined" - ? window.VM.vm.objects.get(occupantInfo.id) - : null; - let slot: VmObjectSlotInfo = { - parent: this.obj.obj_info.id, - index: index, - name: template.name, - typ: template.typ, - logicFields: logicFields, - occupant: occupant, - quantity: occupantInfo?.quantity ?? 0, - }; - return slot; - }); - } - - for (const sub of this.objectSubscriptions) { - if (typeof sub === "string") { - if (sub == "name") { - const name = this.obj.obj_info.name ?? null; - if (this.name !== name) { - this.name = name; - } - } else if (sub === "nameHash") { - const nameHash = - typeof this.obj.obj_info.name !== "undefined" - ? crc32(this.obj.obj_info.name) - : null; - if (this.nameHash !== nameHash) { - this.nameHash = nameHash; - } - } else if (sub === "prefabName") { - const prefabName = this.obj.obj_info.prefab ?? null; - if (this.prefabName !== prefabName) { - this.prefabName = prefabName; - this.prefabHash = crc32(prefabName); - } - } else if (sub === "fields") { - if (!structuralEqual(this.logicFields, newFields)) { - this.logicFields = newFields; - } - } else if (sub === "slots") { - if (!structuralEqual(this.slots, newSlots)) { - this.slots = newSlots; - this.slotsCount = newSlots.length; - } - } else if (sub === "slots-count") { - const slotsTemplate = - "slots" in this.obj.template ? this.obj.template.slots : []; - const slotsCount = slotsTemplate.length; - if (this.slotsCount !== slotsCount) { - this.slotsCount = slotsCount; - } - } else if (sub === "reagents") { - const reagents = - this.obj.obj_info.reagents != null - ? new Map( - Object.entries(this.obj.obj_info.reagents).map( - ([key, val]) => [parseInt(key), val], - ), - ) - : null; - if (!structuralEqual(this.reagents, reagents)) { - this.reagents = reagents; - } - } else if (sub === "connections") { - const connectionsMap = - this.obj.obj_info.connections != null - ? new Map( - Object.entries(this.obj.obj_info.connections).map( - ([key, val]) => [parseInt(key), val], - ), - ) - : null; - const connectionList = - "device" in this.obj.template - ? this.obj.template.device.connection_list - : []; - let connections: Connection[] | null = null; - if (connectionList.length !== 0) { - connections = connectionList.map((conn, index) => { - if (conn.typ === "Data") { - return { - CableNetwork: { - typ: "Data", - role: conn.role, - net: connectionsMap.get(index), - }, - }; - } else if (conn.typ === "Power") { - return { - CableNetwork: { - typ: "Power", - role: conn.role, - net: connectionsMap.get(index), - }, - }; - } else if (conn.typ === "PowerAndData") { - return { - CableNetwork: { - typ: "Data", - role: conn.role, - net: connectionsMap.get(index), - }, - }; - } else if (conn.typ === "Pipe") { - return { Pipe: { role: conn.role } }; - } else if (conn.typ === "Chute") { - return { Chute: { role: conn.role } }; - } else if (conn.typ === "Elevator") { - return { Elevator: { role: conn.role } }; - } else if (conn.typ === "LaunchPad") { - return { LaunchPad: { role: conn.role } }; - } else if (conn.typ === "LandingPad") { - return { LandingPad: { role: conn.role } }; - } else if (conn.typ === "PipeLiquid") { - return { PipeLiquid: { role: conn.role } }; - } - return "None"; - }); - } - if (!structuralEqual(this.connections, connections)) { - this.connections = connections; - } - } else if (sub === "memory") { - const stack = this.obj.obj_info.memory ?? null; - if (!structuralEqual(this.memory, stack)) { - this.memory = stack; - } - } else if (sub === "ic") { - if ( - typeof this.obj.obj_info.circuit !== "undefined" || - typeof this.obj.obj_info.socketed_ic !== "undefined" - ) { - this.updateIC(); - } - } else if (sub === "active-ic") { - const activeIc = window.VM.vm?.activeIC; - if (this.activeICId !== activeIc.obj_info.id) { - this.activeICId = activeIc.obj_info.id; - } - } - } else { - if ("field" in sub) { - if (this.logicFields.get(sub.field) !== newFields.get(sub.field)) { - this.logicFields = newFields; - } - } else if ("slot" in sub) { - if ( - typeof this.slots === "undefined" || - this.slots.length < sub.slot - ) { - this.slots = newSlots; - } else if ( - !structuralEqual(this.slots[sub.slot], newSlots[sub.slot]) - ) { - this.slots = newSlots; - } - } - } - } - } - - updateIC() { - const ip = this.obj.obj_info.circuit?.instruction_pointer ?? null; - if (this.icIP !== ip) { - this.icIP = ip; - } - const opCount = - this.obj.obj_info.circuit?.yield_instruction_count ?? null; - if (this.icOpCount !== opCount) { - this.icOpCount = opCount; - } - const state = this.obj.obj_info.circuit?.state ?? null; - if (this.icState !== state) { - this.icState = state; - } - const errors = this.obj.obj_info.compile_errors ?? null; - if (!structuralEqual(this.errors, errors)) { - this.errors = errors; - } - const registers = this.obj.obj_info.circuit?.registers ?? null; - if (!structuralEqual(this.registers, registers)) { - this.registers = registers; - } - const aliases = - this.obj.obj_info.circuit?.aliases != null - ? new Map(Object.entries(this.obj.obj_info.circuit.aliases)) - : null; - if (!structuralEqual(this.aliases, aliases)) { - this.aliases = aliases; - } - const defines = - this.obj.obj_info.circuit?.defines != null - ? new Map( - Object.entries(this.obj.obj_info.circuit.defines), - // .map(([key, val]) => []) - ) - : null; - if (!structuralEqual(this.defines, defines)) { - this.defines = new Map(defines); - } - const pins = - this.obj.obj_info.device_pins != null - ? new Map( - Object.entries(this.obj.obj_info.device_pins).map( - ([key, val]) => [parseInt(key), val], - ), - ) - : null; - if (!structuralEqual(this.pins, pins)) { - this.pins = pins; - this.numPins = - "device" in this.obj.template - ? this.obj.template.device.device_pins_length - : Math.max(...Array.from(this.pins?.keys() ?? [0])); - } } } + return VMObjectMixinClass as Constructor & T; }; @@ -596,7 +537,6 @@ export const VMActiveICMixin = >( const id = e.detail; if (this.objectID !== id) { this.objectID = id; - this.obj = window.VM.vm.objects.get(this.objectID)!; } this.updateDevice(); } @@ -618,7 +558,7 @@ export const VMTemplateDBMixin = >( connectedCallback(): void { const root = super.connectedCallback(); window.VM.vm.addEventListener( - "vm-device-db-loaded", + "vm-template-db-loaded", this._handleDeviceDBLoad.bind(this), ); if (typeof window.VM.vm.templateDB !== "undefined") { @@ -644,7 +584,7 @@ export const VMTemplateDBMixin = >( return this._templateDB; } - postDBSetUpdate(): void {} + postDBSetUpdate(): void { } @state() set templateDB(val: TemplateDatabase) { diff --git a/www/src/ts/virtualMachine/device/addDevice.ts b/www/src/ts/virtualMachine/device/addDevice.ts index f824483..4c034ef 100644 --- a/www/src/ts/virtualMachine/device/addDevice.ts +++ b/www/src/ts/virtualMachine/device/addDevice.ts @@ -13,7 +13,7 @@ import { unsafeHTML } from "lit/directives/unsafe-html.js"; import { VMTemplateDBMixin } from "virtualMachine/baseDevice"; import { LogicInfo, ObjectTemplate, StructureInfo } from "ic10emu_wasm"; -type LogicableStrucutureTemplate = Extract< +type LogicableStructureTemplate = Extract< ObjectTemplate, { structure: StructureInfo; logic: LogicInfo } >; @@ -38,7 +38,7 @@ export class VMAddDeviceButton extends VMTemplateDBMixin(BaseElement) { @query("sl-drawer") drawer: SlDrawer; @query(".device-search-input") searchInput: SlInput; - private _structures: Map = new Map(); + private _structures: Map = new Map(); private _datapoints: [string, string][] = []; private _haystack: string[] = []; @@ -48,10 +48,10 @@ export class VMAddDeviceButton extends VMTemplateDBMixin(BaseElement) { if ("structure" in template && "logic" in template) { return [[template.prefab.prefab_name, template]] as [ string, - LogicableStrucutureTemplate, + LogicableStructureTemplate, ][]; } else { - return [] as [string, LogicableStrucutureTemplate][]; + return [] as [string, LogicableStructureTemplate][]; } }), ); @@ -84,7 +84,7 @@ export class VMAddDeviceButton extends VMTemplateDBMixin(BaseElement) { } private _searchResults: { - entry: LogicableStrucutureTemplate; + entry: LogicableStructureTemplate; haystackEntry: string; ranges: number[]; }[] = []; @@ -132,7 +132,7 @@ export class VMAddDeviceButton extends VMTemplateDBMixin(BaseElement) { super.connectedCallback(); window.VM.get().then((vm) => vm.addEventListener( - "vm-device-db-loaded", + "vm-template-db-loaded", this._handleDeviceDBLoad.bind(this), ), ); diff --git a/www/src/ts/virtualMachine/device/card.ts b/www/src/ts/virtualMachine/device/card.ts index 8f79967..348a08e 100644 --- a/www/src/ts/virtualMachine/device/card.ts +++ b/www/src/ts/virtualMachine/device/card.ts @@ -1,7 +1,8 @@ import { html, css, HTMLTemplateResult } from "lit"; import { customElement, property, query, state } from "lit/decorators.js"; +import { watch, SignalWatcher, computed } from '@lit-labs/preact-signals'; import { BaseElement, defaultCss } from "components"; -import { VMTemplateDBMixin, VMObjectMixin } from "virtualMachine/baseDevice"; +import { VMTemplateDBMixin, VMObjectMixin, globalObjectSignalMap } from "virtualMachine/baseDevice"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; import { parseIntWithHexOrBinary, parseNumber } from "utils"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; @@ -16,7 +17,7 @@ export type CardTab = "fields" | "slots" | "reagents" | "networks" | "pins"; @customElement("vm-device-card") export class VMDeviceCard extends VMTemplateDBMixin( - VMObjectMixin(BaseElement), + VMObjectMixin(SignalWatcher(BaseElement)), ) { image_err: boolean; @@ -26,13 +27,6 @@ export class VMDeviceCard extends VMTemplateDBMixin( super(); this.open = false; this.subscribe( - "prefabName", - "name", - "nameHash", - "reagents", - "slots-count", - "reagents", - "connections", "active-ic", ); } @@ -142,23 +136,12 @@ export class VMDeviceCard extends VMTemplateDBMixin( if (thisIsActiveIc) { badges.push(html`db`); } - const activeIc = window.VM.vm.activeIC; + const activeIc = globalObjectSignalMap.get(this.activeICId); - const numPins = - "device" in activeIc?.template - ? activeIc.template.device.device_pins_length - : Math.max( - ...Array.from( - activeIc?.obj_info.device_pins != null - ? Object.keys(activeIc?.obj_info.device_pins).map((key) => - parseInt(key), - ) - : [0], - ), - ); + const numPins = activeIc.numPins.value; const pins = new Array(numPins) .fill(true) - .map((_, index) => this.pins.get(index)); + .map((_, index) => this.objectSignals.pins.value.get(index)); pins.forEach((id, index) => { if (this.objectID == id) { badges.push( @@ -167,10 +150,10 @@ export class VMDeviceCard extends VMTemplateDBMixin( } }, this); return html` - + @@ -194,8 +177,8 @@ export class VMDeviceCard extends VMTemplateDBMixin( class="device-name me-1" size="small" pill - placeholder=${this.prefabName} - value=${this.name} + placeholder=${watch(this.objectSignals.prefabName)} + value=${watch(this.objectSignals.name)} @sl-change=${this._handleChangeName} > Name @@ -209,7 +192,7 @@ export class VMDeviceCard extends VMTemplateDBMixin( size="small" pill class="device-name-hash me-1" - value="${this.nameHash.toString()}" + value="${watch(this.objectSignals.nameHash)}" readonly > Hash @@ -257,9 +240,7 @@ export class VMDeviceCard extends VMTemplateDBMixin( "slots", html`
- ${repeat( - this.slots, - (slot, index) => slot.typ + index.toString(), + ${repeat(Array(this.objectSignals.slotsCount), (_slot, index) => html` @@ -276,7 +257,7 @@ export class VMDeviceCard extends VMTemplateDBMixin( renderNetworks() { const vmNetworks = window.VM.vm.networks; - const networks = this.connections.map((connection, index, _conns) => { + const networks = this.objectSignals.connections.value.map((connection, index, _conns) => { const conn = typeof connection === "object" && "CableNetwork" in connection ? connection.CableNetwork @@ -357,6 +338,8 @@ export class VMDeviceCard extends VMTemplateDBMixin( } render(): HTMLTemplateResult { + const disablePins = computed(() => {return !this.objectSignals.numPins.value;}); + const displayName = computed(() => { return this.objectSignals.name.value ?? this.objectSignals.prefabName.value}) return html`
${this.renderHeader()}
@@ -365,7 +348,7 @@ export class VMDeviceCard extends VMTemplateDBMixin( Slots Reagents Networks - Pins @@ -394,12 +377,12 @@ export class VMDeviceCard extends VMTemplateDBMixin(

Are you sure you want to remove this device?

- Id ${this.objectID} : ${this.name ?? this.prefabName} + Id ${this.objectID} : ${watch(displayName)}
@@ -452,7 +435,7 @@ export class VMDeviceCard extends VMTemplateDBMixin( const name = input.value.length === 0 ? undefined : input.value; window.VM.get().then((vm) => { if (!vm.setObjectName(this.objectID, name)) { - input.value = this.name; + input.value = this.objectSignals.name.value; } this.updateDevice(); }); diff --git a/www/src/ts/virtualMachine/device/fields.ts b/www/src/ts/virtualMachine/device/fields.ts index 7016872..6b4fea3 100644 --- a/www/src/ts/virtualMachine/device/fields.ts +++ b/www/src/ts/virtualMachine/device/fields.ts @@ -5,26 +5,46 @@ import { VMTemplateDBMixin, VMObjectMixin } from "virtualMachine/baseDevice"; import { displayNumber, parseNumber } from "utils"; import type { LogicType } from "ic10emu_wasm"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; +import { computed, Signal, watch } from "@lit-labs/preact-signals"; @customElement("vm-device-fields") export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(BaseElement)) { constructor() { super(); - this.subscribe("fields"); + this.setupSignals(); } + setupSignals() { + this.logicFieldNames = computed(() => { + return Array.from(this.objectSignals.logicFields.value.keys()); + }); + } + + logicFieldNames: Signal; + render() { - const fields = Array.from(this.logicFields.entries()); const inputIdBase = `vmDeviceCard${this.objectID}Field`; - return html` - ${fields.map(([name, field], _index, _fields) => { - return html` { + return this.logicFieldNames.value.map((name) => { + const field = computed(() => { + return this.objectSignals.logicFields.value.get(name); + }); + const typ = computed(() => { + return field.value.field_type; + }); + const value = computed(() => { + return displayNumber(field.value.value); + }); + return html` ${name} - ${field.field_type} + ${watch(typ)} `; - })} + }) + }); + return html` + ${watch(fieldsHtml)} `; } @@ -34,7 +54,7 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(BaseElement)) const val = parseNumber(input.value); window.VM.get().then((vm) => { if (!vm.setObjectField(this.objectID, field, val, true)) { - input.value = this.logicFields.get(field).value.toString(); + input.value = this.objectSignals.logicFields.value.get(field).value.toString(); } this.updateDevice(); }); diff --git a/www/src/ts/virtualMachine/device/pins.ts b/www/src/ts/virtualMachine/device/pins.ts index 93d47e7..13609b5 100644 --- a/www/src/ts/virtualMachine/device/pins.ts +++ b/www/src/ts/virtualMachine/device/pins.ts @@ -4,22 +4,30 @@ import { BaseElement, defaultCss } from "components"; import { VMTemplateDBMixin, VMObjectMixin } from "virtualMachine/baseDevice"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; import { ObjectID } from "ic10emu_wasm"; +import { effect, watch } from "@lit-labs/preact-signals"; +import { SlOption } from "@shoelace-style/shoelace"; @customElement("vm-device-pins") export class VMDevicePins extends VMObjectMixin(VMTemplateDBMixin(BaseElement)) { constructor() { super(); - this.subscribe("ic", "visible-devices"); + // this.subscribe("visible-devices"); } render() { - const pins = new Array(this.numPins ?? 0) + const pins = new Array(this.objectSignals.numPins.value ?? 0) .fill(true) - .map((_, index) => this.pins.get(index)); - const visibleDevices = (this.visibleDevices ?? []).map((id) => window.VM.vm.objects.get(id)); + .map((_, index) => this.objectSignals.pins.value.get(index)); + const visibleDevices = (this.objectSignals.visibleDevices.value ?? []); + const forceSelectUpdate = () => { + const slSelect = this.renderRoot.querySelector("sl-select") as SlSelect; + if (slSelect != null) { + slSelect.handleValueChange(); + } + }; const pinsHtml = pins?.map( - (pin, index) => - html` { + return html` d${index} ${visibleDevices.map( - (device, _index) => html` - - Device ${device.obj_info.id} : - ${device.obj_info.name ?? device.obj_info.prefab} - - `, + (device, _index) => { + device.id.subscribe((id: ObjectID) => { + forceSelectUpdate(); + }); + device.displayName.subscribe((_: string) => { + forceSelectUpdate(); + }); + return html` + + Device ${watch(device.id)} : + ${watch(device.displayName)} + + ` + } + )} - `, + `; + } ); return pinsHtml; } diff --git a/www/src/ts/virtualMachine/device/slot.ts b/www/src/ts/virtualMachine/device/slot.ts index 82ab084..04c442b 100644 --- a/www/src/ts/virtualMachine/device/slot.ts +++ b/www/src/ts/virtualMachine/device/slot.ts @@ -1,7 +1,7 @@ import { html, css } from "lit"; -import { customElement, property} from "lit/decorators.js"; +import { customElement, property } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMTemplateDBMixin, VMObjectMixin } from "virtualMachine/baseDevice"; +import { VMTemplateDBMixin, VMObjectMixin, VmObjectSlotInfo, ComputedObjectSignals } from "virtualMachine/baseDevice"; import { clamp, crc32, @@ -18,6 +18,7 @@ import { import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; import { VMDeviceCard } from "./card"; import { when } from "lit/directives/when.js"; +import { computed, signal, Signal, SignalWatcher, watch } from "@lit-labs/preact-signals"; export interface SlotModifyEvent { deviceID: number; @@ -25,24 +26,29 @@ export interface SlotModifyEvent { } @customElement("vm-device-slot") -export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(BaseElement)) { - private _slotIndex: number; +export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(SignalWatcher(BaseElement))) { + private _slotIndex: Signal; + + slotSignal: Signal; get slotIndex() { - return this._slotIndex; + return this._slotIndex.value; } @property({ type: Number }) set slotIndex(val: number) { - this._slotIndex = val; - this.unsubscribe((sub) => typeof sub === "object" && "slot" in sub); - this.subscribe({ slot: val }); + this._slotIndex.value = val; } - constructor() { super(); - this.subscribe("active-ic", "prefabName"); + this._slotIndex = signal(0); + this.subscribe("active-ic"); + this.slotSignal = computed(() => { + const index = this._slotIndex.value; + return this.objectSignals.slots.value[index]; + }); + this.setupSignals(); } static styles = [ @@ -73,49 +79,158 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(BaseElement)) `, ]; - slotOccupantImg(): string { - const slot = this.slots[this.slotIndex]; - if (typeof slot.occupant !== "undefined") { - const prefabName = slot.occupant.obj_info.prefab; - return `img/stationpedia/${prefabName}.png`; - } else { - return `img/stationpedia/SlotIcon_${slot.typ}.png`; - } + setupSignals() { + this.slotOccupant = computed(() => { + const slot = this.slotSignal.value ?? null; + return slot?.occupant ?? null; + }); + this.slotFieldTypes = computed(() => { + return Array.from(this.slotSignal.value?.logicFields.keys() ?? []) ; + }); + this.slotOccupantImg = computed(() => { + const slot = this.slotSignal.value ?? null; + if (slot != null && slot.occupant != null) { + const prefabName = slot.occupant.prefabName; + return `img/stationpedia/${watch(prefabName)}.png`; + } else { + return `img/stationpedia/SlotIcon_${slot.typ}.png`; + } + }); + this.slotOccupantPrefabName = computed(() => { + const slot = this.slotSignal.value ?? null; + if (slot != null && slot.occupant != null) { + const prefabName = slot.occupant.prefabName.value; + return prefabName; + } else { + return null; + } + }); + this.slotOccupantTemplate = computed(() => { + if (this.objectSignals != null && "slots" in this.objectSignals.template.value) { + return this.objectSignals.template.value.slots[this.slotIndex]; + } else { + return null; + } + }); } - slotOccupantPrefabName(): string { - const slot = this.slots[this.slotIndex]; - if (typeof slot.occupant !== "undefined") { - const prefabName = slot.occupant.obj_info.prefab; - return prefabName; - } else { - return undefined; - } - } - - slotOcccupantTemplate(): SlotInfo | undefined { - if ("slots" in this.obj.template) { - return this.obj.template.slots[this.slotIndex]; - } else { - return undefined; - } - } + slotOccupant: Signal; + slotFieldTypes: Signal; + slotOccupantImg: Signal; + slotOccupantPrefabName: Signal; + slotOccupantTemplate: Signal; renderHeader() { const inputIdBase = `vmDeviceSlot${this.objectID}Slot${this.slotIndex}Head`; - const slot = this.slots[this.slotIndex]; - const slotImg = this.slotOccupantImg(); + // const slot = this.slotSignal.value; + const slotImg = this.slotOccupantImg; const img = html``; - const template = this.slotOcccupantTemplate(); - - const thisIsActiveIc = this.activeICId === this.objectID; + const template = this.slotOccupantTemplate; + const templateName = computed(() => { + return template.value?.name ?? null; + }); + const slotTyp = computed(() => { + return this.slotSignal.value.typ; + }) const enableQuantityInput = false; + const quantity = computed(() => { + const slot = this.slotSignal.value; + return slot.quantity; + }); + + const maxQuantity = computed(() => { + const slotOccupant = this.slotSignal.value.occupant; + const template = slotOccupant?.template.value ?? null; + if (template != null && "item" in template) { + return template.item.max_quantity; + } else { + return 1; + } + }); + + const slotDisplayName = computed(() => { + return this.slotOccupantPrefabName.value ?? this.slotSignal.value.typ; + }); + + const tooltipContent = computed(() => { + return this.activeICId === this.objectID && slotTyp.value === "ProgrammableChip" + ? "Removing the selected Active IC is disabled" + : "Remove Occupant" + }) + + const removeDisabled = computed(() => { + return this.activeICId === this.objectID && slotTyp.value === "ProgrammableChip" + }); + + const quantityContent = computed(() => { + if (this.slotOccupant.value != null) { + return html` +
+ + ${watch(quantity)}/${watch(maxQuantity)} + +
` + } else { + return null + } + }); + + const slotName = computed(() => { + if(this.slotOccupant.value != null) { + return html` ${watch(this.slotOccupantPrefabName)} ` + } else { + html` ${watch(templateName)} ` + } + }); + + const inputContent = computed(() => { + if (this.slotOccupant.value != null) { + return html` +
+ ${enableQuantityInput + ? html` +
+ + Max Quantity: + ${watch(maxQuantity)} + +
+
` + : ""} + + + +
+ ` + } else { + return null; + } + }); + return html`
${this.slotIndex}
- + ${img} - ${when( - typeof slot.occupant !== "undefined", - () => - html`
- - ${slot.quantity}/${"item" in slot.occupant.template - ? slot.occupant.template.item.max_quantity - : 1} - -
`, - )} + ${watch(quantityContent)}
- ${when( - typeof slot.occupant !== "undefined", - () => html` ${this.slotOccupantPrefabName()} `, - () => html` ${template?.name} `, - )} + ${watch(slotName)}
Type:${slot.typ} + >${watch(slotTyp)}
- ${when( - typeof slot.occupant !== "undefined", - () => html` -
- ${enableQuantityInput - ? html` -
- - Max Quantity: - ${"item" in slot.occupant.template - ? slot.occupant.template.item.max_quantity - : 1} - -
-
` - : ""} - - - -
- `, - () => html``, - )} + ${watch(inputContent)}
`; } @@ -226,12 +283,12 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(BaseElement)) _handleSlotQuantityChange(e: Event) { const input = e.currentTarget as SlInput; - const slot = this.slots[this.slotIndex]; + const slot = this.slotSignal.value; const val = clamp( input.valueAsNumber, 1, - "item" in slot.occupant.template - ? slot.occupant.template.item.max_quantity + "item" in slot.occupant.template.value + ? slot.occupant.template.value.item.max_quantity : 1, ); if ( @@ -243,25 +300,33 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(BaseElement)) true, ) ) { - input.value = this.slots[this.slotIndex].quantity.toString(); + input.value = this.slotSignal.value.quantity.toString(); } } renderFields() { const inputIdBase = `vmDeviceSlot${this.objectID}Slot${this.slotIndex}Field`; - const _fields = - this.slots[this.slotIndex].logicFields ?? - new Map(); - const fields = Array.from(_fields.entries()); - - return html` -
- ${fields.map( - ([name, field], _index, _fields) => html` + const fields = computed(() => { + const slot = this.slotSignal.value; + const _fields = + slot.logicFields?? + new Map(); + return this.slotFieldTypes.value.map( + (name, _index, _types) => { + const slotField = computed(() => { + return this.slotSignal.value.logicFields.get(name); + }); + const fieldValue = computed(() => { + return displayNumber(slotField.value.value); + }) + const fieldAccessType = computed(() => { + return slotField.value.field_type; + }) + return html` @@ -270,10 +335,16 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(BaseElement)) slot="suffix" from="${inputIdBase}${name}.value" > - ${field.field_type} + ${watch(fieldAccessType)} - `, - )} + ` + } + ) + }); + + return html` +
+ ${watch(fields)}
`; } @@ -283,12 +354,12 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(BaseElement)) const field = input.getAttribute("key")! as LogicSlotType; let val = parseNumber(input.value); if (field === "Quantity") { - const slot = this.slots[this.slotIndex]; + const slot = this.slotSignal.value; val = clamp( input.valueAsNumber, 1, - "item" in slot.occupant.template - ? slot.occupant.template.item.max_quantity + "item" in slot.occupant.template.value + ? slot.occupant.template.value.item.max_quantity : 1, ); } @@ -297,7 +368,7 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(BaseElement)) !vm.setObjectSlotField(this.objectID, this.slotIndex, field, val, true) ) { input.value = ( - this.slots[this.slotIndex].logicFields ?? + this.slotSignal.value.logicFields ?? new Map() ) .get(field) diff --git a/www/src/ts/virtualMachine/index.ts b/www/src/ts/virtualMachine/index.ts index 2719f6f..06df283 100644 --- a/www/src/ts/virtualMachine/index.ts +++ b/www/src/ts/virtualMachine/index.ts @@ -22,6 +22,12 @@ export interface ToastMessage { msg: string; id: string; } +import { + signal, + computed, + effect, +} from '@lit-labs/preact-signals'; +import type { Signal } from '@lit-labs/preact-signals'; export interface VirtualMachineEventMap { "vm-template-db-loaded": CustomEvent; @@ -40,10 +46,12 @@ class VirtualMachine extends TypedEventTarget() { templateDBPromise: Promise; templateDB: TemplateDatabase; - private _objects: Map; - private _circuitHolders: Map; - private _networks: Map; - private _default_network: number; + private _vmState: Signal; + + private _objects: Map>; + private _circuitHolders: Map>; + private _networks: Map>; + private _default_network: Signal; private vm_worker: Worker; @@ -61,6 +69,9 @@ class VirtualMachine extends TypedEventTarget() { } async setupVM() { + this.templateDBPromise = this.ic10vm.getTemplateDatabase(); + this.templateDBPromise.then((db) => this.setupTemplateDatabase(db)); + this.vm_worker = new Worker(new URL("./vmWorker.ts", import.meta.url)); const loaded = (w: Worker) => new Promise((r) => w.addEventListener("message", r, { once: true })); @@ -68,17 +79,21 @@ class VirtualMachine extends TypedEventTarget() { console.info("VM Worker loaded"); const vm = Comlink.wrap(this.vm_worker); this.ic10vm = vm; + this._vmState.value = await this.ic10vm.saveVMState(); window.VM.set(this); - this.templateDBPromise = this.ic10vm.getTemplateDatabase(); + effect(() => { + this.updateObjects(this._vmState.value); + this.updateNetworks(this._vmState.value); + }); - this.templateDBPromise.then((db) => this.setupTemplateDatabase(db)); - - this.updateObjects(); - this.updateNetworks(); this.updateCode(); } + get state() { + return this._vmState; + } + get objects() { return this._objects; } @@ -113,41 +128,42 @@ class VirtualMachine extends TypedEventTarget() { return this._circuitHolders.get(this.app.session.activeIC); } - async visibleDevices(source: number) { - const visDevices = await this.ic10vm.visibleDevices(source); - const ids = Array.from(visDevices); - ids.sort(); - return ids.map((id, _index) => this._objects.get(id)!); + async visibleDevices(source: number): Promise[]> { + try { + const visDevices = await this.ic10vm.visibleDevices(source); + const ids = Array.from(visDevices); + ids.sort(); + return ids.map((id, _index) => this._objects.get(id)!); + } catch (err) { + this.handleVmError(err); + } } - async visibleDeviceIds(source: number) { + async visibleDeviceIds(source: number): Promise { const visDevices = await this.ic10vm.visibleDevices(source); const ids = Array.from(visDevices); ids.sort(); return ids; } - async updateNetworks() { + async updateNetworks(state: FrozenVM) { let updateFlag = false; const removedNetworks = []; - let networkIds: Uint32Array; - let frozenNetworks: FrozenCableNetwork[]; - try { - networkIds = await this.ic10vm.networks; - frozenNetworks = await this.ic10vm.freezeNetworks(networkIds); - } catch (e) { - this.handleVmError(e); - return; - } + const networkIds: ObjectID[] = []; + const frozenNetworks: FrozenCableNetwork[] = state.networks; const updatedNetworks: ObjectID[] = []; - for (const [index, id] of networkIds.entries()) { + + for (const [index, net] of frozenNetworks.entries()) { + const id = net.id; + networkIds.push(id); if (!this._networks.has(id)) { - this._networks.set(id, frozenNetworks[index]); + this._networks.set(id, signal(net)); updateFlag = true; updatedNetworks.push(id); } else { - if (!structuralEqual(this._networks.get(id), frozenNetworks[index])) { - this._networks.set(id, frozenNetworks[index]); + const mappedNet = this._networks.get(id); + if (!structuralEqual(mappedNet.peek(), net)) { + mappedNet.value = net; updatedNetworks.push(id); updateFlag = true; } @@ -173,28 +189,24 @@ class VirtualMachine extends TypedEventTarget() { } } - async updateObjects() { - let updateFlag = false; + async updateObjects(state: FrozenVM) { const removedObjects = []; - let objectIds: Uint32Array; - let frozenObjects: FrozenObjectFull[]; - try { - objectIds = await this.ic10vm.objects; - frozenObjects = await this.ic10vm.freezeObjects(objectIds); - } catch (e) { - this.handleVmError(e); - return; - } + const frozenObjects = state.objects; + const objectIds: ObjectID[] = []; const updatedObjects: ObjectID[] = []; + let updateFlag = false; - for (const [index, id] of objectIds.entries()) { + for (const [index, obj] of frozenObjects.entries()) { + const id = obj.obj_info.id; + objectIds.push(id); if (!this._objects.has(id)) { - this._objects.set(id, frozenObjects[index]); + this._objects.set(id, signal(obj)); updateFlag = true; updatedObjects.push(id); } else { - if (!structuralEqual(this._objects.get(id), frozenObjects[index])) { - this._objects.set(id, frozenObjects[index]); + const mappedObject = this._objects.get(id); + if (!structuralEqual(obj, mappedObject.peek())) { + mappedObject.value = obj; updatedObjects.push(id); updateFlag = true; } @@ -210,7 +222,7 @@ class VirtualMachine extends TypedEventTarget() { } for (const [id, obj] of this._objects) { - if (typeof obj.obj_info.socketed_ic !== "undefined") { + if (typeof obj.peek().obj_info.socketed_ic !== "undefined") { if (!this._circuitHolders.has(id)) { this._circuitHolders.set(id, obj); updateFlag = true; @@ -259,7 +271,7 @@ class VirtualMachine extends TypedEventTarget() { if ( circuitHolder && prog && - circuitHolder.obj_info.source_code !== prog + circuitHolder.peek().obj_info.source_code !== prog ) { try { console.time(`CompileProgram_${id}_${attempt}`); @@ -281,12 +293,12 @@ class VirtualMachine extends TypedEventTarget() { const ic = this.activeIC; if (ic) { try { - await this.ic10vm.stepProgrammable(ic.obj_info.id, false); + await this.ic10vm.stepProgrammable(ic.peek().obj_info.id, false); } catch (err) { this.handleVmError(err); } this.update(); - this.dispatchCustomEvent("vm-run-ic", this.activeIC!.obj_info.id); + this.dispatchCustomEvent("vm-run-ic", this.activeIC!.peek().obj_info.id); } } @@ -294,55 +306,30 @@ class VirtualMachine extends TypedEventTarget() { const ic = this.activeIC; if (ic) { try { - await this.ic10vm.runProgrammable(ic.obj_info.id, false); + await this.ic10vm.runProgrammable(ic.peek().obj_info.id, false); } catch (err) { this.handleVmError(err); } this.update(); - this.dispatchCustomEvent("vm-run-ic", this.activeIC!.obj_info.id); + this.dispatchCustomEvent("vm-run-ic", this.activeIC!.peek().obj_info.id); } } async reset() { const ic = this.activeIC; if (ic) { - await this.ic10vm.resetProgrammable(ic.obj_info.id); + await this.ic10vm.resetProgrammable(ic.peek().obj_info.id); await this.update(); } } async update(save: boolean = true) { - await this.updateObjects(); - await this.updateNetworks(); - const lastModified = await this.ic10vm.lastOperationModified; - lastModified.forEach((id, _index, _modifiedIds) => { - if (this.objects.has(id)) { - this.updateObject(id, false); - } - }, this); - const activeIC = this.activeIC; - if (activeIC != null) { - this.updateObject(activeIC.obj_info.id, false); - } - if (save) this.app.session.save(); - } - - async updateObject(id: number, save: boolean = true) { - let frozen; try { - frozen = await this.ic10vm.freezeObject(id); - this._objects.set(id, frozen); - } catch (e) { - this.handleVmError(e); + this._vmState.value = await this.ic10vm.saveVMState(); + if (save) this.app.session.save(); + } catch (err) { + this.handleVmError(err); } - const device = this._objects.get(id); - this.dispatchCustomEvent("vm-object-modified", device.obj_info.id); - if (typeof device.obj_info.socketed_ic !== "undefined") { - const ic = this._objects.get(device.obj_info.socketed_ic); - const ip = ic.obj_info.circuit?.instruction_pointer; - this.app.session.setActiveLine(device.obj_info.id, ip); - } - if (save) this.app.session.save(); } handleVmError(err: Error) { @@ -359,7 +346,7 @@ class VirtualMachine extends TypedEventTarget() { // return the data connected oject ids for a network networkDataDevices(network: ObjectID): number[] { - return this._networks.get(network)?.devices ?? []; + return this._networks.get(network)?.peek().devices ?? []; } async changeObjectID(oldID: number, newID: number): Promise { @@ -368,7 +355,7 @@ class VirtualMachine extends TypedEventTarget() { if (this.app.session.activeIC === oldID) { this.app.session.activeIC = newID; } - await this.updateObjects(); + await this.update(); this.dispatchCustomEvent("vm-object-id-change", { old: oldID, new: newID, @@ -383,25 +370,29 @@ class VirtualMachine extends TypedEventTarget() { async setRegister(index: number, val: number): Promise { const ic = this.activeIC!; - try { - await this.ic10vm.setRegister(ic.obj_info.id, index, val); - this.updateObject(ic.obj_info.id); + if (ic) { + try { + await this.ic10vm.setRegister(ic.peek().obj_info.id, index, val); + } catch (err) { + this.handleVmError(err); + return false; + } + await this.update(); return true; - } catch (err) { - this.handleVmError(err); - return false; } } async setStack(addr: number, val: number): Promise { const ic = this.activeIC!; - try { - await this.ic10vm.setMemory(ic.obj_info.id, addr, val); - this.updateObject(ic.obj_info.id); + if (ic) { + try { + await this.ic10vm.setMemory(ic.peek().obj_info.id, addr, val); + } catch (err) { + this.handleVmError(err); + return false; + } + await this.update(); return true; - } catch (err) { - this.handleVmError(err); - return false; } } @@ -409,13 +400,13 @@ class VirtualMachine extends TypedEventTarget() { const obj = this._objects.get(id); if (obj) { try { - await this.ic10vm.setObjectName(obj.obj_info.id, name); - this.updateObject(obj.obj_info.id); - this.app.session.save(); - return true; + await this.ic10vm.setObjectName(obj.peek().obj_info.id, name); } catch (e) { this.handleVmError(e); + return false; } + await this.update(); + return true; } return false; } @@ -430,12 +421,13 @@ class VirtualMachine extends TypedEventTarget() { const obj = this._objects.get(id); if (obj) { try { - await this.ic10vm.setLogicField(obj.obj_info.id, field, val, force); - this.updateObject(obj.obj_info.id); - return true; + await this.ic10vm.setLogicField(obj.peek().obj_info.id, field, val, force); } catch (err) { this.handleVmError(err); + return false; } + await this.update(); + return true; } return false; } @@ -452,17 +444,18 @@ class VirtualMachine extends TypedEventTarget() { if (obj) { try { await this.ic10vm.setSlotLogicField( - obj.obj_info.id, + obj.peek().obj_info.id, field, slot, val, force, ); - this.updateObject(obj.obj_info.id); - return true; } catch (err) { this.handleVmError(err); + return false; } + await this.update(); + return true; } return false; } @@ -476,11 +469,12 @@ class VirtualMachine extends TypedEventTarget() { if (typeof device !== "undefined") { try { await this.ic10vm.setDeviceConnection(id, conn, val); - this.updateObject(device.obj_info.id); - return true; } catch (err) { this.handleVmError(err); + return false; } + await this.update(); + return true; } return false; } @@ -494,11 +488,12 @@ class VirtualMachine extends TypedEventTarget() { if (typeof device !== "undefined") { try { await this.ic10vm.setPin(id, pin, val); - this.updateObject(device.obj_info.id); - return true; } catch (err) { this.handleVmError(err); + return false; } + await this.update(); + return true; } return false; } @@ -513,11 +508,7 @@ class VirtualMachine extends TypedEventTarget() { try { console.log("adding device", frozen); const id = await this.ic10vm.addObjectFrozen(frozen); - const refrozen = await this.ic10vm.freezeObject(id); - this._objects.set(id, refrozen); - const device_ids = await this.ic10vm.objects; - this.dispatchCustomEvent("vm-objects-update", Array.from(device_ids)); - this.app.session.save(); + await this.update(); return id; } catch (err) { this.handleVmError(err); @@ -531,13 +522,7 @@ class VirtualMachine extends TypedEventTarget() { try { console.log("adding devices", frozenObjects); const ids = await this.ic10vm.addObjectsFrozen(frozenObjects); - const refrozen = await this.ic10vm.freezeObjects(ids); - ids.forEach((id, index) => { - this._objects.set(id, refrozen[index]); - }); - const device_ids = await this.ic10vm.objects; - this.dispatchCustomEvent("vm-objects-update", Array.from(device_ids)); - this.app.session.save(); + await this.update(); return Array.from(ids); } catch (err) { this.handleVmError(err); @@ -548,12 +533,12 @@ class VirtualMachine extends TypedEventTarget() { async removeDevice(id: number): Promise { try { await this.ic10vm.removeDevice(id); - await this.updateObjects(); - return true; } catch (err) { this.handleVmError(err); return false; } + await this.update(); + return true; } async setSlotOccupant( @@ -567,7 +552,7 @@ class VirtualMachine extends TypedEventTarget() { try { console.log("setting slot occupant", frozen); await this.ic10vm.setSlotOccupant(id, index, frozen, quantity); - this.updateObject(device.obj_info.id); + await this.update(); return true; } catch (err) { this.handleVmError(err); @@ -580,8 +565,8 @@ class VirtualMachine extends TypedEventTarget() { const device = this._objects.get(id); if (typeof device !== "undefined") { try { - this.ic10vm.removeSlotOccupant(id, index); - this.updateObject(device.obj_info.id); + await this.ic10vm.removeSlotOccupant(id, index); + await this.update(); return true; } catch (err) { this.handleVmError(err); @@ -591,7 +576,7 @@ class VirtualMachine extends TypedEventTarget() { } async saveVMState(): Promise { - return this.ic10vm.saveVMState(); + return await this.ic10vm.saveVMState(); } async restoreVMState(state: FrozenVM) { @@ -599,7 +584,7 @@ class VirtualMachine extends TypedEventTarget() { await this.ic10vm.restoreVMState(state); this._objects = new Map(); this._circuitHolders = new Map(); - await this.updateObjects(); + await this.update(); } catch (e) { this.handleVmError(e); } @@ -608,7 +593,7 @@ class VirtualMachine extends TypedEventTarget() { getPrograms(): [number, string][] { const programs: [number, string][] = Array.from( this._circuitHolders.entries(), - ).map(([id, ic]) => [id, ic.obj_info.source_code]); + ).map(([id, ic]) => [id, ic.peek().obj_info.source_code]); return programs; } } From b1c9db278d08c2b8ce14bd97a435304e2481cc0d Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Mon, 19 Aug 2024 22:22:39 -0700 Subject: [PATCH 42/50] refactor(frontend) finish signal conversion, fix passing data to VM Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- Cargo.lock | 16 +- cspell.json | 149 +- ic10emu/Cargo.toml | 4 +- ic10emu/src/interpreter/instructions.rs | 4 +- ic10emu/src/network.rs | 8 + ic10emu/src/vm/object/generic/traits.rs | 2 +- ic10emu/src/vm/object/humans.rs | 2 +- ic10emu/src/vm/object/macros.rs | 10 +- .../stationpedia/structs/circuit_holder.rs | 2 +- ic10emu/src/vm/object/templates.rs | 14 + ic10emu/src/vm/object/traits.rs | 8 +- ic10emu_wasm/Cargo.toml | 7 +- ic10emu_wasm/build.rs | 92 - stationeers_data/src/database/prefab_map.rs | 3387 +++++++++++------ stationeers_data/src/enums/basic.rs | 15 +- stationeers_data/src/enums/prefabs.rs | 349 +- stationeers_data/src/enums/script.rs | 10 +- stationeers_data/src/lib.rs | 1 + stationeers_data/src/templates.rs | 6 +- www/cspell.json | 9 + www/package.json | 1 + www/pnpm-lock.yaml | 258 ++ www/rsbuild.config.ts | 3 +- www/src/scss/styles.scss | 36 +- www/src/ts/presets/demo.ts | 22 +- www/src/ts/session.ts | 18 +- www/src/ts/utils.ts | 21 + www/src/ts/virtualMachine/baseDevice.ts | 76 +- www/src/ts/virtualMachine/controls.ts | 109 +- www/src/ts/virtualMachine/device/card.ts | 78 +- www/src/ts/virtualMachine/device/dbutils.ts | 2 +- .../ts/virtualMachine/device/deviceList.ts | 112 +- www/src/ts/virtualMachine/device/fields.ts | 4 +- www/src/ts/virtualMachine/device/pins.ts | 4 +- www/src/ts/virtualMachine/device/slot.ts | 10 +- .../ts/virtualMachine/device/slotAddDialog.ts | 226 +- www/src/ts/virtualMachine/device/template.ts | 236 +- www/src/ts/virtualMachine/index.ts | 98 +- www/src/ts/virtualMachine/jsonErrorUtils.ts | 192 + www/src/ts/virtualMachine/prefabDatabase.ts | 1591 ++++++-- www/src/ts/virtualMachine/registers.ts | 73 +- www/src/ts/virtualMachine/stack.ts | 61 +- www/src/ts/virtualMachine/vmWorker.ts | 10 +- xtask/src/generate/database.rs | 22 +- xtask/src/stationpedia.rs | 14 +- 45 files changed, 5009 insertions(+), 2363 deletions(-) delete mode 100644 ic10emu_wasm/build.rs create mode 100644 www/src/ts/virtualMachine/jsonErrorUtils.ts diff --git a/Cargo.lock b/Cargo.lock index a8ba1fc..a12273f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -621,7 +621,6 @@ dependencies = [ "color-eyre", "const-crc32", "getrandom", - "ic10emu", "itertools", "macro_rules_attribute", "paste", @@ -651,14 +650,13 @@ dependencies = [ "itertools", "js-sys", "serde", - "serde-wasm-bindgen", + "serde-wasm-bindgen 0.6.5", "serde_derive", "serde_ignored", "serde_json", "serde_path_to_error", "serde_with", "stationeers_data", - "strum", "thiserror", "tsify", "wasm-bindgen", @@ -1280,6 +1278,17 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-wasm-bindgen" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + [[package]] name = "serde-wasm-bindgen" version = "0.6.5" @@ -1796,6 +1805,7 @@ checksum = "d6b26cf145f2f3b9ff84e182c448eaf05468e247f148cf3d2a7d67d78ff023a0" dependencies = [ "gloo-utils", "serde", + "serde-wasm-bindgen 0.5.0", "serde_json", "tsify-macros", "wasm-bindgen", diff --git a/cspell.json b/cspell.json index 104950d..db8a446 100644 --- a/cspell.json +++ b/cspell.json @@ -1 +1,148 @@ -{"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","LogicSlotType","LogicSlotTypes","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": [ + "arn't", + "Astroloy", + "Atmo", + "Autolathe", + "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", + "brap", + "brapz", + "brdns", + "brdse", + "breq", + "breqz", + "brge", + "brgez", + "brgt", + "brgtz", + "brle", + "brlez", + "brlt", + "brltz", + "brna", + "brnan", + "brnaz", + "brne", + "brnez", + "Circuitboard", + "codegen", + "conv", + "cstyle", + "Depressurising", + "dylib", + "endpos", + "getd", + "Hardsuit", + "hashables", + "hstack", + "impls", + "indexmap", + "inext", + "inextp", + "infile", + "Instructable", + "intf", + "itertools", + "jetpack", + "kbshortcutmenu", + "Keybind", + "lbns", + "logicable", + "LogicSlotType", + "logicslottypes", + "LogicSlotTypes", + "logictype", + "logictypes", + "lparen", + "lzma", + "Mineables", + "mscorlib", + "MSEED", + "ninf", + "nomatch", + "nops", + "oprs", + "overcolumn", + "Overlength", + "pedia", + "peekable", + "prec", + "preproc", + "Pressurising", + "putd", + "QUICKFIX", + "reagentmode", + "reagentmodes", + "repr", + "retval", + "rocketstation", + "rparen", + "sapz", + "sattellite", + "sdns", + "sdse", + "searchbox", + "searchbtn", + "seqz", + "serde", + "settingsmenu", + "sgez", + "sgtz", + "slez", + "slotlogic", + "slotlogicable", + "slottype", + "sltz", + "snan", + "snanz", + "snaz", + "snez", + "splitn", + "Stationeers", + "stationpedia", + "stdweb", + "tbody", + "thiserror", + "tokentype", + "toolbelt", + "trunc", + "Tsify", + "uneval", + "whos" + ] +} diff --git a/ic10emu/Cargo.toml b/ic10emu/Cargo.toml index 39bd02f..b001d41 100644 --- a/ic10emu/Cargo.toml +++ b/ic10emu/Cargo.toml @@ -29,7 +29,7 @@ time = { version = "0.3.36", features = [ "serde", "local-offset", ] } -tsify = { version = "0.4.5", optional = true, features = ["json"] } +tsify = { version = "0.4.5", optional = true, features = ["js"] } wasm-bindgen = { version = "0.2.92", optional = true } [target.'cfg(target_arch = "wasm32")'.dependencies] @@ -46,7 +46,7 @@ color-eyre = "0.6.3" serde_json = "1.0.117" # Self dev dependency to enable prefab_database feature for tests -ic10emu = { path = ".", features = ["prefab_database"] } +# ic10emu = { path = ".", features = ["prefab_database"] } [features] default = [] diff --git a/ic10emu/src/interpreter/instructions.rs b/ic10emu/src/interpreter/instructions.rs index 079f2c6..f36df66 100644 --- a/ic10emu/src/interpreter/instructions.rs +++ b/ic10emu/src/interpreter/instructions.rs @@ -2540,7 +2540,7 @@ impl LrInstruction for T { .as_reagent_interface() .ok_or(ICError::NotReagentReadable(*logicable.get_id()))?; reagent_interface - .get_current_recipie() + .get_current_recipe() .iter() .find(|(hash, _)| *hash as f64 == int) .map(|(_, quantity)| *quantity) @@ -2686,7 +2686,7 @@ impl HcfInstruction for T { .borrow_mut() .as_mut_circuit_holder() .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? - .hault_and_catch_fire(); + .halt_and_catch_fire(); } self.set_state(ICState::HasCaughtFire); Ok(()) diff --git a/ic10emu/src/network.rs b/ic10emu/src/network.rs index 3b6c010..a7e98a0 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -53,6 +53,9 @@ pub enum Connection { PipeLiquid { role: ConnectionRole, }, + RoboticArmRail { + role: ConnectionRole, + }, #[default] None, } @@ -83,6 +86,7 @@ impl Connection { ConnectionType::LandingPad => Self::LandingPad { role }, ConnectionType::LaunchPad => Self::LaunchPad { role }, ConnectionType::PipeLiquid => Self::PipeLiquid { role }, + ConnectionType::RoboticArmRail => Self::RoboticArmRail { role }, } } @@ -140,6 +144,10 @@ impl Connection { typ: ConnectionType::LaunchPad, role: *role, }, + Self::RoboticArmRail { role } => ConnectionInfo { + typ: ConnectionType::RoboticArmRail, + role: *role + }, } } diff --git a/ic10emu/src/vm/object/generic/traits.rs b/ic10emu/src/vm/object/generic/traits.rs index a74a555..7f170a6 100644 --- a/ic10emu/src/vm/object/generic/traits.rs +++ b/ic10emu/src/vm/object/generic/traits.rs @@ -701,7 +701,7 @@ where fn get_ic(&self) -> Option { self.get_ic_gw() } - fn hault_and_catch_fire(&mut self) { + fn halt_and_catch_fire(&mut self) { self.hault_and_catch_fire_gw() } } diff --git a/ic10emu/src/vm/object/humans.rs b/ic10emu/src/vm/object/humans.rs index 10a1b06..d66a0b4 100644 --- a/ic10emu/src/vm/object/humans.rs +++ b/ic10emu/src/vm/object/humans.rs @@ -327,7 +327,7 @@ impl Human for HumanPlayer { fn set_hygiene(&mut self, hygiene: f32) { self.hygiene = hygiene.clamp(0.0, MAX_HYGIENE); } - fn hygine_state(&self) -> StatState { + fn hygiene_state(&self) -> StatState { if self.hygiene < CRITICAL_HYGIENE { return StatState::Critical; } diff --git a/ic10emu/src/vm/object/macros.rs b/ic10emu/src/vm/object/macros.rs index 5b0d2c5..830409f 100644 --- a/ic10emu/src/vm/object/macros.rs +++ b/ic10emu/src/vm/object/macros.rs @@ -22,13 +22,13 @@ macro_rules! object_trait { paste::paste! { $( - #[doc = "Return a `& dyn " $trt "` if implimented by the object"] + #[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 implimented by the object"] + #[doc = "Return a `&mut dyn " $trt "` if implemented by the object"] #[inline(always)] fn [](&mut self) -> Option<[<$trt RefMut>]> { None @@ -74,7 +74,7 @@ macro_rules! object_trait { } } - /// call func on the dyn refrence or a borrow of the vm object + /// 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 @@ -103,12 +103,12 @@ macro_rules! object_trait { } pub fn get_id(&self) -> u32 { match self { - Self::DynRef(refrence) => *refrence.get_id(), + Self::DynRef(reference) => *reference.get_id(), Self::VMObject(obj) => *obj.borrow().get_id(), } } - /// call func on the dyn refrence or a borrow of the vm object + /// 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 diff --git a/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs b/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs index 9940952..0072712 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs @@ -411,7 +411,7 @@ impl CircuitHolder for StructureCircuitHousing { .and_then(|info| self.vm.get_object(info.id)) } - fn hault_and_catch_fire(&mut self) { + fn halt_and_catch_fire(&mut self) { // TODO: do something here?? } } diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index 7b6f1ba..5cb1307 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -72,6 +72,8 @@ pub struct ObjectInfo { 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>, @@ -96,6 +98,8 @@ impl From<&VMObject> for ObjectInfo { 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, @@ -136,6 +140,8 @@ impl ObjectInfo { 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, @@ -215,6 +221,14 @@ impl ObjectInfo { } 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 } diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs index c1172e0..ed7e003 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -190,7 +190,7 @@ tag_object_traits! { /// Get the programmable circuit object slotted into this circuit holder fn get_ic(&self) -> Option; /// Execute a `hcf` instruction - fn hault_and_catch_fire(&mut self); + fn halt_and_catch_fire(&mut self); } pub trait Item { @@ -403,7 +403,7 @@ tag_object_traits! { pub trait ReagentInterface: Device { /// Reagents required by current recipe - fn get_current_recipie(&self) -> Vec<(i32, f64)>; + fn get_current_recipe(&self) -> Vec<(i32, f64)>; /// Reagents required to complete current recipe fn get_current_required(&self) -> Vec<(i32, f64)>; } @@ -465,8 +465,8 @@ tag_object_traits! { fn set_mood(&mut self, mood: f32); fn mood_state(&self) -> StatState; fn get_hygiene(&self) -> f32; - fn set_hygiene(&mut self, hygine: f32); - fn hygine_state(&self) -> StatState; + 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; diff --git a/ic10emu_wasm/Cargo.toml b/ic10emu_wasm/Cargo.toml index 8f08cae..e21606b 100644 --- a/ic10emu_wasm/Cargo.toml +++ b/ic10emu_wasm/Cargo.toml @@ -22,16 +22,11 @@ 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 = ["json"] } +tsify = { version = "0.4.5", features = ["js"] } thiserror = "1.0.61" serde_derive = "1.0.203" serde_json = "1.0.117" -[build-dependencies] -ic10emu = { path = "../ic10emu" } -strum = { version = "0.26.2" } -itertools = "0.13.0" - [features] default = ["console_error_panic_hook"] console_error_panic_hook = ["dep:console_error_panic_hook"] diff --git a/ic10emu_wasm/build.rs b/ic10emu_wasm/build.rs deleted file mode 100644 index ab4a158..0000000 --- a/ic10emu_wasm/build.rs +++ /dev/null @@ -1,92 +0,0 @@ - - - - - -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::LogicSlotType::iter() - // .map(|slt| format!("\"{}\"", slt.as_ref())), - // "\n | ".to_owned(), - // ) - // .collect(); - // let slt_tstype = format!("\nexport type LogicSlotType = {};", 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/stationeers_data/src/database/prefab_map.rs b/stationeers_data/src/database/prefab_map.rs index 415ad50..67a6065 100644 --- a/stationeers_data/src/database/prefab_map.rs +++ b/stationeers_data/src/database/prefab_map.rs @@ -322,7 +322,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), consumer_info: ConsumerInfo { - consumed_resouces: vec![ + consumed_resources: vec![ "ItemCharcoal".into(), "ItemCobaltOre".into(), "ItemFern".into(), "ItemSilverIngot".into(), "ItemSilverOre".into(), "ItemSoyOil".into() ] @@ -404,7 +404,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), consumer_info: ConsumerInfo { - consumed_resouces: vec![ + consumed_resources: vec![ "ItemCorn".into(), "ItemEgg".into(), "ItemFertilizedEgg".into(), "ItemFlour".into(), "ItemMilk".into(), "ItemMushroom".into(), "ItemPotato".into(), "ItemPumpkin".into(), "ItemRice".into(), @@ -444,7 +444,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), consumer_info: ConsumerInfo { - consumed_resouces: vec![ + consumed_resources: vec![ "ItemCookedCondensedMilk".into(), "ItemCookedCorn".into(), "ItemCookedMushroom".into(), "ItemCookedPowderedEggs".into(), "ItemCookedPumpkin".into(), "ItemCookedRice".into(), @@ -483,7 +483,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), consumer_info: ConsumerInfo { - consumed_resouces: vec![ + consumed_resources: vec![ "ItemSoyOil".into(), "ReagentColorBlue".into(), "ReagentColorGreen" .into(), "ReagentColorOrange".into(), "ReagentColorRed".into(), "ReagentColorYellow".into() @@ -607,7 +607,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), consumer_info: ConsumerInfo { - consumed_resouces: vec![ + consumed_resources: vec![ "ItemWheat".into(), "ItemSugarCane".into(), "ItemCocoaTree".into(), "ItemSoybean".into(), "ItemFlowerBlue".into(), "ItemFlowerGreen" .into(), "ItemFlowerOrange".into(), "ItemFlowerRed".into(), @@ -739,9 +739,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), - (5u32, "High".into()), (6u32, "Full".into()) + ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), + ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" + .into(), "Medium".into()), ("5".into(), "High".into()), ("6" + .into(), "Full".into()) ] .into_iter() .collect(), @@ -785,9 +786,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), - (5u32, "High".into()), (6u32, "Full".into()) + ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), + ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" + .into(), "Medium".into()), ("5".into(), "High".into()), ("6" + .into(), "Full".into()) ] .into_iter() .collect(), @@ -863,7 +865,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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: "Atmos Analyzer".into(), + name: "Cartridge (Atmos Analyzer)".into(), }, item: ItemInfo { consumable: false, @@ -886,7 +888,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "CartridgeConfiguration".into(), prefab_hash: -932136011i32, desc: "".into(), - name: "Configuration".into(), + name: "Cartridge (Configuration)".into(), }, item: ItemInfo { consumable: false, @@ -909,7 +911,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "CartridgeElectronicReader".into(), prefab_hash: -1462180176i32, desc: "".into(), - name: "eReader".into(), + name: "Cartridge (eReader)".into(), }, item: ItemInfo { consumable: false, @@ -932,7 +934,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "CartridgeGPS".into(), prefab_hash: -1957063345i32, desc: "".into(), - name: "GPS".into(), + name: "Cartridge (GPS)".into(), }, item: ItemInfo { consumable: false, @@ -955,7 +957,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "CartridgeGuide".into(), prefab_hash: 872720793i32, desc: "".into(), - name: "Guide".into(), + name: "Cartridge (Guide)".into(), }, item: ItemInfo { consumable: false, @@ -979,7 +981,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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: "Medical Analyzer".into(), + name: "Cartridge (Medical Analyzer)".into(), }, item: ItemInfo { consumable: false, @@ -1003,7 +1005,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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: "Network Analyzer".into(), + name: "Cartridge (Network Analyzer)".into(), }, item: ItemInfo { consumable: false, @@ -1027,7 +1029,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_hash: -1768732546i32, desc: "When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet." .into(), - name: "Ore Scanner".into(), + name: "Cartridge (Ore Scanner)".into(), }, item: ItemInfo { consumable: false, @@ -1051,7 +1053,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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: "Ore Scanner (Color)".into(), + name: "Cartridge (Ore Scanner Color)".into(), }, item: ItemInfo { consumable: false, @@ -1074,7 +1076,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "CartridgePlantAnalyser".into(), prefab_hash: 1101328282i32, desc: "".into(), - name: "Cartridge Plant Analyser".into(), + name: "Cartridge (Plant Analyser)".into(), }, item: ItemInfo { consumable: false, @@ -1097,7 +1099,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "CartridgeTracker".into(), prefab_hash: 81488783i32, desc: "".into(), - name: "Tracker".into(), + name: "Cartridge (Tracker)".into(), }, item: ItemInfo { consumable: false, @@ -1423,7 +1425,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Operate".into()), (1u32, "Logic".into())] + vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] .into_iter() .collect(), ), @@ -1463,7 +1465,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ingredient: false, max_quantity: 1u32, reagents: None, - slot_class: Class::None, + slot_class: Class::Crate, sorting_class: SortingClass::Storage, }, thermal_info: None, @@ -1536,9 +1538,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Whole Note".into()), (1u32, "Half Note".into()), (2u32, - "Quarter Note".into()), (3u32, "Eighth Note".into()), (4u32, - "Sixteenth Note".into()) + ("0".into(), "Whole Note".into()), ("1".into(), "Half Note" + .into()), ("2".into(), "Quarter Note".into()), ("3".into(), + "Eighth Note".into()), ("4".into(), "Sixteenth Note".into()) ] .into_iter() .collect(), @@ -1597,54 +1599,68 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "C-2".into()), (1u32, "C#-2".into()), (2u32, "D-2" - .into()), (3u32, "D#-2".into()), (4u32, "E-2".into()), (5u32, - "F-2".into()), (6u32, "F#-2".into()), (7u32, "G-2".into()), - (8u32, "G#-2".into()), (9u32, "A-2".into()), (10u32, "A#-2" - .into()), (11u32, "B-2".into()), (12u32, "C-1".into()), (13u32, - "C#-1".into()), (14u32, "D-1".into()), (15u32, "D#-1".into()), - (16u32, "E-1".into()), (17u32, "F-1".into()), (18u32, "F#-1" - .into()), (19u32, "G-1".into()), (20u32, "G#-1".into()), (21u32, - "A-1".into()), (22u32, "A#-1".into()), (23u32, "B-1".into()), - (24u32, "C0".into()), (25u32, "C#0".into()), (26u32, "D0" - .into()), (27u32, "D#0".into()), (28u32, "E0".into()), (29u32, - "F0".into()), (30u32, "F#0".into()), (31u32, "G0".into()), - (32u32, "G#0".into()), (33u32, "A0".into()), (34u32, "A#0" - .into()), (35u32, "B0".into()), (36u32, "C1".into()), (37u32, - "C#1".into()), (38u32, "D1".into()), (39u32, "D#1".into()), - (40u32, "E1".into()), (41u32, "F1".into()), (42u32, "F#1" - .into()), (43u32, "G1".into()), (44u32, "G#1".into()), (45u32, - "A1".into()), (46u32, "A#1".into()), (47u32, "B1".into()), - (48u32, "C2".into()), (49u32, "C#2".into()), (50u32, "D2" - .into()), (51u32, "D#2".into()), (52u32, "E2".into()), (53u32, - "F2".into()), (54u32, "F#2".into()), (55u32, "G2".into()), - (56u32, "G#2".into()), (57u32, "A2".into()), (58u32, "A#2" - .into()), (59u32, "B2".into()), (60u32, "C3".into()), (61u32, - "C#3".into()), (62u32, "D3".into()), (63u32, "D#3".into()), - (64u32, "E3".into()), (65u32, "F3".into()), (66u32, "F#3" - .into()), (67u32, "G3".into()), (68u32, "G#3".into()), (69u32, - "A3".into()), (70u32, "A#3".into()), (71u32, "B3".into()), - (72u32, "C4".into()), (73u32, "C#4".into()), (74u32, "D4" - .into()), (75u32, "D#4".into()), (76u32, "E4".into()), (77u32, - "F4".into()), (78u32, "F#4".into()), (79u32, "G4".into()), - (80u32, "G#4".into()), (81u32, "A4".into()), (82u32, "A#4" - .into()), (83u32, "B4".into()), (84u32, "C5".into()), (85u32, - "C#5".into()), (86u32, "D5".into()), (87u32, "D#5".into()), - (88u32, "E5".into()), (89u32, "F5".into()), (90u32, "F#5" - .into()), (91u32, "G5 ".into()), (92u32, "G#5".into()), (93u32, - "A5".into()), (94u32, "A#5".into()), (95u32, "B5".into()), - (96u32, "C6".into()), (97u32, "C#6".into()), (98u32, "D6" - .into()), (99u32, "D#6".into()), (100u32, "E6".into()), (101u32, - "F6".into()), (102u32, "F#6".into()), (103u32, "G6".into()), - (104u32, "G#6".into()), (105u32, "A6".into()), (106u32, "A#6" - .into()), (107u32, "B6".into()), (108u32, "C7".into()), (109u32, - "C#7".into()), (110u32, "D7".into()), (111u32, "D#7".into()), - (112u32, "E7".into()), (113u32, "F7".into()), (114u32, "F#7" - .into()), (115u32, "G7".into()), (116u32, "G#7".into()), (117u32, - "A7".into()), (118u32, "A#7".into()), (119u32, "B7".into()), - (120u32, "C8".into()), (121u32, "C#8".into()), (122u32, "D8" - .into()), (123u32, "D#8".into()), (124u32, "E8".into()), (125u32, - "F8".into()), (126u32, "F#8".into()), (127u32, "G8".into()) + ("0".into(), "C-2".into()), ("1".into(), "C#-2".into()), ("2" + .into(), "D-2".into()), ("3".into(), "D#-2".into()), ("4".into(), + "E-2".into()), ("5".into(), "F-2".into()), ("6".into(), "F#-2" + .into()), ("7".into(), "G-2".into()), ("8".into(), "G#-2" + .into()), ("9".into(), "A-2".into()), ("10".into(), "A#-2" + .into()), ("11".into(), "B-2".into()), ("12".into(), "C-1" + .into()), ("13".into(), "C#-1".into()), ("14".into(), "D-1" + .into()), ("15".into(), "D#-1".into()), ("16".into(), "E-1" + .into()), ("17".into(), "F-1".into()), ("18".into(), "F#-1" + .into()), ("19".into(), "G-1".into()), ("20".into(), "G#-1" + .into()), ("21".into(), "A-1".into()), ("22".into(), "A#-1" + .into()), ("23".into(), "B-1".into()), ("24".into(), "C0" + .into()), ("25".into(), "C#0".into()), ("26".into(), "D0" + .into()), ("27".into(), "D#0".into()), ("28".into(), "E0" + .into()), ("29".into(), "F0".into()), ("30".into(), "F#0" + .into()), ("31".into(), "G0".into()), ("32".into(), "G#0" + .into()), ("33".into(), "A0".into()), ("34".into(), "A#0" + .into()), ("35".into(), "B0".into()), ("36".into(), "C1".into()), + ("37".into(), "C#1".into()), ("38".into(), "D1".into()), ("39" + .into(), "D#1".into()), ("40".into(), "E1".into()), ("41".into(), + "F1".into()), ("42".into(), "F#1".into()), ("43".into(), "G1" + .into()), ("44".into(), "G#1".into()), ("45".into(), "A1" + .into()), ("46".into(), "A#1".into()), ("47".into(), "B1" + .into()), ("48".into(), "C2".into()), ("49".into(), "C#2" + .into()), ("50".into(), "D2".into()), ("51".into(), "D#2" + .into()), ("52".into(), "E2".into()), ("53".into(), "F2".into()), + ("54".into(), "F#2".into()), ("55".into(), "G2".into()), ("56" + .into(), "G#2".into()), ("57".into(), "A2".into()), ("58".into(), + "A#2".into()), ("59".into(), "B2".into()), ("60".into(), "C3" + .into()), ("61".into(), "C#3".into()), ("62".into(), "D3" + .into()), ("63".into(), "D#3".into()), ("64".into(), "E3" + .into()), ("65".into(), "F3".into()), ("66".into(), "F#3" + .into()), ("67".into(), "G3".into()), ("68".into(), "G#3" + .into()), ("69".into(), "A3".into()), ("70".into(), "A#3" + .into()), ("71".into(), "B3".into()), ("72".into(), "C4".into()), + ("73".into(), "C#4".into()), ("74".into(), "D4".into()), ("75" + .into(), "D#4".into()), ("76".into(), "E4".into()), ("77".into(), + "F4".into()), ("78".into(), "F#4".into()), ("79".into(), "G4" + .into()), ("80".into(), "G#4".into()), ("81".into(), "A4" + .into()), ("82".into(), "A#4".into()), ("83".into(), "B4" + .into()), ("84".into(), "C5".into()), ("85".into(), "C#5" + .into()), ("86".into(), "D5".into()), ("87".into(), "D#5" + .into()), ("88".into(), "E5".into()), ("89".into(), "F5".into()), + ("90".into(), "F#5".into()), ("91".into(), "G5 ".into()), ("92" + .into(), "G#5".into()), ("93".into(), "A5".into()), ("94".into(), + "A#5".into()), ("95".into(), "B5".into()), ("96".into(), "C6" + .into()), ("97".into(), "C#6".into()), ("98".into(), "D6" + .into()), ("99".into(), "D#6".into()), ("100".into(), "E6" + .into()), ("101".into(), "F6".into()), ("102".into(), "F#6" + .into()), ("103".into(), "G6".into()), ("104".into(), "G#6" + .into()), ("105".into(), "A6".into()), ("106".into(), "A#6" + .into()), ("107".into(), "B6".into()), ("108".into(), "C7" + .into()), ("109".into(), "C#7".into()), ("110".into(), "D7" + .into()), ("111".into(), "D#7".into()), ("112".into(), "E7" + .into()), ("113".into(), "F7".into()), ("114".into(), "F#7" + .into()), ("115".into(), "G7".into()), ("116".into(), "G#7" + .into()), ("117".into(), "A7".into()), ("118".into(), "A#7" + .into()), ("119".into(), "B7".into()), ("120".into(), "C8" + .into()), ("121".into(), "C#8".into()), ("122".into(), "D8" + .into()), ("123".into(), "D#8".into()), ("124".into(), "E8" + .into()), ("125".into(), "F8".into()), ("126".into(), "F#8" + .into()), ("127".into(), "G8".into()) ] .into_iter() .collect(), @@ -1699,7 +1715,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { + name : "Liquid Canister".into(), typ : Class::LiquidCanister } + ] .into_iter() .collect(), } @@ -1721,7 +1740,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ingredient: false, max_quantity: 1u32, reagents: None, - slot_class: Class::None, + slot_class: Class::Crate, sorting_class: SortingClass::Storage, }, thermal_info: None, @@ -1763,7 +1782,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -1809,7 +1828,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ingredient: false, max_quantity: 1u32, reagents: None, - slot_class: Class::None, + slot_class: Class::Portables, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { @@ -1829,7 +1848,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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." + 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(), }, @@ -1839,7 +1858,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ingredient: false, max_quantity: 1u32, reagents: None, - slot_class: Class::None, + slot_class: Class::Portables, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { @@ -1869,7 +1888,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ingredient: false, max_quantity: 1u32, reagents: None, - slot_class: Class::None, + slot_class: Class::Portables, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { @@ -1899,7 +1918,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ingredient: false, max_quantity: 1u32, reagents: None, - slot_class: Class::None, + slot_class: Class::Portables, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { @@ -1929,7 +1948,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ingredient: false, max_quantity: 1u32, reagents: None, - slot_class: Class::None, + slot_class: Class::Portables, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { @@ -1958,7 +1977,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ingredient: false, max_quantity: 1u32, reagents: None, - slot_class: Class::None, + slot_class: Class::Portables, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { @@ -1988,7 +2007,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ingredient: false, max_quantity: 1u32, reagents: None, - slot_class: Class::None, + slot_class: Class::Portables, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { @@ -2017,7 +2036,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ingredient: false, max_quantity: 1u32, reagents: None, - slot_class: Class::None, + slot_class: Class::Portables, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { @@ -2046,7 +2065,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ingredient: false, max_quantity: 1u32, reagents: None, - slot_class: Class::None, + slot_class: Class::Portables, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { @@ -2076,7 +2095,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ingredient: false, max_quantity: 1u32, reagents: None, - slot_class: Class::None, + slot_class: Class::Portables, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { @@ -2106,7 +2125,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ingredient: false, max_quantity: 1u32, reagents: None, - slot_class: Class::None, + slot_class: Class::Portables, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { @@ -2137,7 +2156,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ingredient: false, max_quantity: 1u32, reagents: None, - slot_class: Class::None, + slot_class: Class::Portables, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { @@ -2166,7 +2185,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ingredient: false, max_quantity: 1u32, reagents: None, - slot_class: Class::None, + slot_class: Class::Portables, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { @@ -2275,7 +2294,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -2322,7 +2341,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ingredient: false, max_quantity: 1u32, reagents: None, - slot_class: Class::None, + slot_class: Class::Portables, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { @@ -2354,7 +2373,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ingredient: false, max_quantity: 1u32, reagents: None, - slot_class: Class::None, + slot_class: Class::Portables, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { @@ -2386,7 +2405,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ingredient: false, max_quantity: 1u32, reagents: None, - slot_class: Class::None, + slot_class: Class::Portables, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { @@ -2811,7 +2830,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] + logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -2884,7 +2903,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Idle".into()), (1u32, "Active".into())] + vec![("0".into(), "Idle".into()), ("1".into(), "Active".into())] .into_iter() .collect(), ), @@ -3069,7 +3088,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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 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" + 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(), }, @@ -3086,7 +3105,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -3094,20 +3113,20 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::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()), (2u32, + MemoryAccess::Read)] .into_iter().collect()), ("2".into(), vec![(LogicSlotType::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()), (3u32, + MemoryAccess::Read)] .into_iter().collect()), ("3".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -3129,7 +3148,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] .into_iter() .collect(), ), @@ -3216,7 +3235,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -3268,7 +3287,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -3306,7 +3325,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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 (Power Controller)".into(), + name: "Kit (Area Power Controller)".into(), }, item: ItemInfo { consumable: false, @@ -3469,9 +3488,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), - (5u32, "High".into()), (6u32, "Full".into()) + ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), + ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" + .into(), "Medium".into()), ("5".into(), "High".into()), ("6" + .into(), "Full".into()) ] .into_iter() .collect(), @@ -3515,9 +3535,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), - (5u32, "High".into()), (6u32, "Full".into()) + ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), + ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" + .into(), "Medium".into()), ("5".into(), "High".into()), ("6" + .into(), "Full".into()) ] .into_iter() .collect(), @@ -3561,9 +3582,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), - (5u32, "High".into()), (6u32, "Full".into()) + ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), + ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" + .into(), "Medium".into()), ("5".into(), "High".into()), ("6" + .into(), "Full".into()) ] .into_iter() .collect(), @@ -3645,7 +3667,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -3775,7 +3797,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab: PrefabInfo { prefab_name: "ItemCableCoilHeavy".into(), prefab_hash: 2060134443i32, - desc: "Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW." + 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(), }, @@ -3960,6 +3982,70 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< } .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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None } + ] + .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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ); map.insert( 252561409i32, ItemTemplate { @@ -4464,7 +4550,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< filter_type: None, ingredient: true, max_quantity: 10u32, - reagents: Some(vec![("Soy".into(), 5f64)].into_iter().collect()), + reagents: Some(vec![("Soy".into(), 1f64)].into_iter().collect()), slot_class: Class::None, sorting_class: SortingClass::Food, }, @@ -4780,7 +4866,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -4980,7 +5066,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -5032,7 +5118,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -5107,7 +5193,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -5171,7 +5257,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), suit_info: SuitInfo { - hygine_reduction_multiplier: 1f32, + hygiene_reduction_multiplier: 1f32, waste_max_pressure: 4053f32, }, } @@ -5286,6 +5372,38 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< } .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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ); map.insert( 1661941301i32, ItemSlotsTemplate { @@ -5424,7 +5542,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), suit_info: SuitInfo { - hygine_reduction_multiplier: 1f32, + hygiene_reduction_multiplier: 1f32, waste_max_pressure: 4053f32, }, } @@ -5437,16 +5555,16 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemExplosive".into(), prefab_hash: 235361649i32, desc: "".into(), - name: "Remote Explosive".into(), + name: "Demolition Charge".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, - max_quantity: 1u32, + max_quantity: 3u32, reagents: None, - slot_class: Class::None, - sorting_class: SortingClass::Default, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, @@ -5593,7 +5711,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -5613,7 +5731,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Low Power".into()), (1u32, "High Power".into())] + vec![ + ("0".into(), "Low Power".into()), ("1".into(), "High Power" + .into()) + ] .into_iter() .collect(), ), @@ -6943,83 +7064,83 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::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()), (1u32, + MemoryAccess::Read)] .into_iter().collect()), ("1".into(), vec![(LogicSlotType::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()), (2u32, + MemoryAccess::Read)] .into_iter().collect()), ("2".into(), vec![(LogicSlotType::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()), (3u32, + MemoryAccess::Read)] .into_iter().collect()), ("3".into(), vec![(LogicSlotType::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()), (4u32, + MemoryAccess::Read)] .into_iter().collect()), ("4".into(), vec![(LogicSlotType::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()), (5u32, + MemoryAccess::Read)] .into_iter().collect()), ("5".into(), vec![(LogicSlotType::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()), (6u32, + MemoryAccess::Read)] .into_iter().collect()), ("6".into(), vec![(LogicSlotType::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()), (7u32, + MemoryAccess::Read)] .into_iter().collect()), ("7".into(), vec![(LogicSlotType::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()), (8u32, + MemoryAccess::Read)] .into_iter().collect()), ("8".into(), vec![(LogicSlotType::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()), (9u32, + MemoryAccess::Read)] .into_iter().collect()), ("9".into(), vec![(LogicSlotType::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()), (10u32, + MemoryAccess::Read)] .into_iter().collect()), ("10".into(), vec![(LogicSlotType::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()), (11u32, + MemoryAccess::Read)] .into_iter().collect()), ("11".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -7077,7 +7198,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -7086,97 +7207,97 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::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()), (2u32, + MemoryAccess::Read)] .into_iter().collect()), ("2".into(), vec![(LogicSlotType::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()), (3u32, + MemoryAccess::Read)] .into_iter().collect()), ("3".into(), vec![(LogicSlotType::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()), (4u32, + MemoryAccess::Read)] .into_iter().collect()), ("4".into(), vec![(LogicSlotType::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()), (5u32, + MemoryAccess::Read)] .into_iter().collect()), ("5".into(), vec![(LogicSlotType::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()), (6u32, + MemoryAccess::Read)] .into_iter().collect()), ("6".into(), vec![(LogicSlotType::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()), (7u32, + MemoryAccess::Read)] .into_iter().collect()), ("7".into(), vec![(LogicSlotType::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()), (8u32, + MemoryAccess::Read)] .into_iter().collect()), ("8".into(), vec![(LogicSlotType::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()), (9u32, + MemoryAccess::Read)] .into_iter().collect()), ("9".into(), vec![(LogicSlotType::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()), (10u32, + MemoryAccess::Read)] .into_iter().collect()), ("10".into(), vec![(LogicSlotType::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()), (11u32, + MemoryAccess::Read)] .into_iter().collect()), ("11".into(), vec![(LogicSlotType::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()), (12u32, + MemoryAccess::Read)] .into_iter().collect()), ("12".into(), vec![(LogicSlotType::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()), (13u32, + MemoryAccess::Read)] .into_iter().collect()), ("13".into(), vec![(LogicSlotType::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()), (14u32, + MemoryAccess::Read)] .into_iter().collect()), ("14".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -7291,7 +7412,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: Some(InternalAtmoInfo { volume: 10f32 }), logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -7300,7 +7421,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -7309,7 +7430,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (2u32, vec![(LogicSlotType::Occupied, + .collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -7317,13 +7438,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (3u32, vec![(LogicSlotType::Occupied, + .collect()), ("3".into(), vec![(LogicSlotType::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()), (4u32, + MemoryAccess::Read)] .into_iter().collect()), ("4".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -7331,21 +7452,21 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::FilterType, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (5u32, vec![(LogicSlotType::Occupied, + .collect()), ("5".into(), vec![(LogicSlotType::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()), (6u32, vec![(LogicSlotType::Occupied, + .collect()), ("6".into(), vec![(LogicSlotType::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()), (7u32, vec![(LogicSlotType::Occupied, + .collect()), ("7".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -7421,7 +7542,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), suit_info: SuitInfo { - hygine_reduction_multiplier: 1.5f32, + hygiene_reduction_multiplier: 1.5f32, waste_max_pressure: 4053f32, }, memory: MemoryInfo { @@ -7698,6 +7819,32 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< } .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![SlotInfo { name : "".into(), typ : Class::None }] + .into_iter() + .collect(), + } + .into(), + ); map.insert( 897176943i32, ItemTemplate { @@ -7904,7 +8051,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -7913,62 +8060,62 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::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()), (2u32, + MemoryAccess::Read)] .into_iter().collect()), ("2".into(), vec![(LogicSlotType::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()), (3u32, + MemoryAccess::Read)] .into_iter().collect()), ("3".into(), vec![(LogicSlotType::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()), (4u32, + MemoryAccess::Read)] .into_iter().collect()), ("4".into(), vec![(LogicSlotType::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()), (5u32, + MemoryAccess::Read)] .into_iter().collect()), ("5".into(), vec![(LogicSlotType::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()), (6u32, + MemoryAccess::Read)] .into_iter().collect()), ("6".into(), vec![(LogicSlotType::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()), (7u32, + MemoryAccess::Read)] .into_iter().collect()), ("7".into(), vec![(LogicSlotType::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()), (8u32, + MemoryAccess::Read)] .into_iter().collect()), ("8".into(), vec![(LogicSlotType::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()), (9u32, + MemoryAccess::Read)] .into_iter().collect()), ("9".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -9823,6 +9970,29 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< } .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 { @@ -10681,7 +10851,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemKitReinforcedWindows".into(), prefab_hash: 1459985302i32, desc: "".into(), - name: "Kit (Reinforced Windows)".into(), + name: "Kit (Reinforced Walls)".into(), }, item: ItemInfo { consumable: false, @@ -10743,6 +10913,52 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< } .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 { @@ -12061,7 +12277,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemKitWindowShutter".into(), prefab_hash: 1779979754i32, desc: "".into(), - name: "Kit (Window Shutter)".into(), + name: "Kit (Composite Window Shutter)".into(), }, item: ItemInfo { consumable: false, @@ -12100,7 +12316,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -12153,13 +12369,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::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()), (1u32, + MemoryAccess::Read)] .into_iter().collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -12168,7 +12384,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (2u32, vec![(LogicSlotType::Occupied, + .collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -12407,7 +12623,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab: PrefabInfo { prefab_name: "ItemLiquidPipeValve".into(), prefab_hash: -2126113312i32, - desc: "This kit creates a Liquid Valve." + desc: "This kit creates a Valve (Liquid)." .into(), name: "Kit (Liquid Pipe Valve)".into(), }, @@ -12495,7 +12711,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -12547,7 +12763,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -12624,7 +12840,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -12701,7 +12917,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -12723,7 +12939,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Default".into()), (1u32, "Flatten".into())] + vec![("0".into(), "Default".into()), ("1".into(), "Flatten".into())] .into_iter() .collect(), ), @@ -12993,104 +13209,104 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::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()), (1u32, + MemoryAccess::Read)] .into_iter().collect()), ("1".into(), vec![(LogicSlotType::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()), (2u32, + MemoryAccess::Read)] .into_iter().collect()), ("2".into(), vec![(LogicSlotType::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()), (3u32, + MemoryAccess::Read)] .into_iter().collect()), ("3".into(), vec![(LogicSlotType::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()), (4u32, + MemoryAccess::Read)] .into_iter().collect()), ("4".into(), vec![(LogicSlotType::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()), (5u32, + MemoryAccess::Read)] .into_iter().collect()), ("5".into(), vec![(LogicSlotType::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()), (6u32, + MemoryAccess::Read)] .into_iter().collect()), ("6".into(), vec![(LogicSlotType::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()), (7u32, + MemoryAccess::Read)] .into_iter().collect()), ("7".into(), vec![(LogicSlotType::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()), (8u32, + MemoryAccess::Read)] .into_iter().collect()), ("8".into(), vec![(LogicSlotType::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()), (9u32, + MemoryAccess::Read)] .into_iter().collect()), ("9".into(), vec![(LogicSlotType::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()), (10u32, + MemoryAccess::Read)] .into_iter().collect()), ("10".into(), vec![(LogicSlotType::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()), (11u32, + MemoryAccess::Read)] .into_iter().collect()), ("11".into(), vec![(LogicSlotType::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()), (12u32, + MemoryAccess::Read)] .into_iter().collect()), ("12".into(), vec![(LogicSlotType::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()), (13u32, + MemoryAccess::Read)] .into_iter().collect()), ("13".into(), vec![(LogicSlotType::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()), (14u32, + MemoryAccess::Read)] .into_iter().collect()), ("14".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -13141,10 +13357,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< consumable: false, filter_type: None, ingredient: false, - max_quantity: 1u32, + max_quantity: 3u32, reagents: None, - slot_class: Class::None, - sorting_class: SortingClass::Default, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, @@ -13174,7 +13390,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -13196,7 +13412,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Default".into()), (1u32, "Flatten".into())] + vec![("0".into(), "Default".into()), ("1".into(), "Flatten".into())] .into_iter() .collect(), ), @@ -13233,7 +13449,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -13255,7 +13471,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Default".into()), (1u32, "Flatten".into())] + vec![("0".into(), "Default".into()), ("1".into(), "Flatten".into())] .into_iter() .collect(), ), @@ -13297,6 +13513,38 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< } .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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ); map.insert( 1467558064i32, ItemLogicTemplate { @@ -13320,83 +13568,83 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::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()), (1u32, + MemoryAccess::Read)] .into_iter().collect()), ("1".into(), vec![(LogicSlotType::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()), (2u32, + MemoryAccess::Read)] .into_iter().collect()), ("2".into(), vec![(LogicSlotType::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()), (3u32, + MemoryAccess::Read)] .into_iter().collect()), ("3".into(), vec![(LogicSlotType::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()), (4u32, + MemoryAccess::Read)] .into_iter().collect()), ("4".into(), vec![(LogicSlotType::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()), (5u32, + MemoryAccess::Read)] .into_iter().collect()), ("5".into(), vec![(LogicSlotType::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()), (6u32, + MemoryAccess::Read)] .into_iter().collect()), ("6".into(), vec![(LogicSlotType::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()), (7u32, + MemoryAccess::Read)] .into_iter().collect()), ("7".into(), vec![(LogicSlotType::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()), (8u32, + MemoryAccess::Read)] .into_iter().collect()), ("8".into(), vec![(LogicSlotType::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()), (9u32, + MemoryAccess::Read)] .into_iter().collect()), ("9".into(), vec![(LogicSlotType::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()), (10u32, + MemoryAccess::Read)] .into_iter().collect()), ("10".into(), vec![(LogicSlotType::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()), (11u32, + MemoryAccess::Read)] .into_iter().collect()), ("11".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -13501,7 +13749,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -13632,9 +13880,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab: PrefabInfo { prefab_name: "ItemPassiveVent".into(), prefab_hash: 238631271i32, - desc: "This kit creates a Passive Vent among other variants." + desc: "This kit creates a Kit (Passive Vent) among other variants." .into(), - name: "Passive Vent".into(), + name: "Kit (Passive Vent)".into(), }, item: ItemInfo { consumable: false, @@ -14014,7 +14262,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab: PrefabInfo { prefab_name: "ItemPipeValve".into(), prefab_hash: 799323450i32, - desc: "This kit creates a Valve." + desc: "This kit creates a Valve (Gas)." .into(), name: "Kit (Pipe Valve)".into(), }, @@ -14173,7 +14421,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -14194,7 +14442,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] .into_iter() .collect(), ), @@ -14325,6 +14573,38 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< } .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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ); map.insert( 1929046963i32, ItemTemplate { @@ -14953,7 +15233,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab: PrefabInfo { prefab_name: "ItemRemoteDetonator".into(), prefab_hash: 678483886i32, - desc: "".into(), + desc: "0.Mode0\n1.Mode1".into(), name: "Remote Detonator".into(), }, item: ItemInfo { @@ -14969,7 +15249,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -14982,13 +15262,19 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), logic_types: vec![ - (LogicType::Power, MemoryAccess::Read), (LogicType::Error, - MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (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: None, + modes: Some( + vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] + .into_iter() + .collect(), + ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, @@ -14999,6 +15285,38 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< } .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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ); map.insert( -1773192190i32, ItemSlotsTemplate { @@ -15357,7 +15675,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -15365,7 +15683,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -15905,7 +16223,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -15914,62 +16232,62 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::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()), (2u32, + MemoryAccess::Read)] .into_iter().collect()), ("2".into(), vec![(LogicSlotType::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()), (3u32, + MemoryAccess::Read)] .into_iter().collect()), ("3".into(), vec![(LogicSlotType::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()), (4u32, + MemoryAccess::Read)] .into_iter().collect()), ("4".into(), vec![(LogicSlotType::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()), (5u32, + MemoryAccess::Read)] .into_iter().collect()), ("5".into(), vec![(LogicSlotType::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()), (6u32, + MemoryAccess::Read)] .into_iter().collect()), ("6".into(), vec![(LogicSlotType::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()), (7u32, + MemoryAccess::Read)] .into_iter().collect()), ("7".into(), vec![(LogicSlotType::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()), (8u32, + MemoryAccess::Read)] .into_iter().collect()), ("8".into(), vec![(LogicSlotType::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()), (9u32, + MemoryAccess::Read)] .into_iter().collect()), ("9".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -16516,7 +16834,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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 Atmos Analyzer or Tracker, Medical Analyzer, Ore Scanner, eReader, and various other functions." + 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(), }, @@ -16533,7 +16851,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -16541,7 +16859,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -16594,7 +16912,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -16602,7 +16920,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -16622,7 +16940,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] .into_iter() .collect(), ), @@ -16775,7 +17093,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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 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" + 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(), }, @@ -16912,6 +17230,70 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< } .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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None } + ] + .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![ + SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" + .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : + Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo + { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ + : Class::None } + ] + .into_iter() + .collect(), + } + .into(), + ); map.insert( 309693520i32, ItemTemplate { @@ -17003,7 +17385,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -17144,9 +17526,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), - (5u32, "High".into()), (6u32, "Full".into()) + ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), + ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" + .into(), "Medium".into()), ("5".into(), "High".into()), ("6" + .into(), "Full".into()) ] .into_iter() .collect(), @@ -17166,7 +17549,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemWreckageAirConditioner1".into(), prefab_hash: -1826023284i32, desc: "".into(), - name: "Wreckage Air Conditioner".into(), + name: "Wreckage".into(), }, item: ItemInfo { consumable: false, @@ -17189,7 +17572,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemWreckageAirConditioner2".into(), prefab_hash: 169888054i32, desc: "".into(), - name: "Wreckage Air Conditioner".into(), + name: "Wreckage".into(), }, item: ItemInfo { consumable: false, @@ -17212,7 +17595,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemWreckageHydroponicsTray1".into(), prefab_hash: -310178617i32, desc: "".into(), - name: "Wreckage Hydroponics Tray".into(), + name: "Wreckage".into(), }, item: ItemInfo { consumable: false, @@ -17235,7 +17618,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemWreckageLargeExtendableRadiator01".into(), prefab_hash: -997763i32, desc: "".into(), - name: "Wreckage Large Extendable Radiator".into(), + name: "Wreckage".into(), }, item: ItemInfo { consumable: false, @@ -17258,7 +17641,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemWreckageStructureRTG1".into(), prefab_hash: 391453348i32, desc: "".into(), - name: "Wreckage Structure RTG".into(), + name: "Wreckage".into(), }, item: ItemInfo { consumable: false, @@ -17281,7 +17664,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemWreckageStructureWeatherStation001".into(), prefab_hash: -834664349i32, desc: "".into(), - name: "Wreckage Structure Weather Station".into(), + name: "Wreckage".into(), }, item: ItemInfo { consumable: false, @@ -17304,7 +17687,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemWreckageStructureWeatherStation002".into(), prefab_hash: 1464424921i32, desc: "".into(), - name: "Wreckage Structure Weather Station".into(), + name: "Wreckage".into(), }, item: ItemInfo { consumable: false, @@ -17327,7 +17710,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemWreckageStructureWeatherStation003".into(), prefab_hash: 542009679i32, desc: "".into(), - name: "Wreckage Structure Weather Station".into(), + name: "Wreckage".into(), }, item: ItemInfo { consumable: false, @@ -17350,7 +17733,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemWreckageStructureWeatherStation004".into(), prefab_hash: -1104478996i32, desc: "".into(), - name: "Wreckage Structure Weather Station".into(), + name: "Wreckage".into(), }, item: ItemInfo { consumable: false, @@ -17373,7 +17756,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemWreckageStructureWeatherStation005".into(), prefab_hash: -919745414i32, desc: "".into(), - name: "Wreckage Structure Weather Station".into(), + name: "Wreckage".into(), }, item: ItemInfo { consumable: false, @@ -17396,7 +17779,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemWreckageStructureWeatherStation006".into(), prefab_hash: 1344576960i32, desc: "".into(), - name: "Wreckage Structure Weather Station".into(), + name: "Wreckage".into(), }, item: ItemInfo { consumable: false, @@ -17419,7 +17802,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemWreckageStructureWeatherStation007".into(), prefab_hash: 656649558i32, desc: "".into(), - name: "Wreckage Structure Weather Station".into(), + name: "Wreckage".into(), }, item: ItemInfo { consumable: false, @@ -17442,7 +17825,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemWreckageStructureWeatherStation008".into(), prefab_hash: -1214467897i32, desc: "".into(), - name: "Wreckage Structure Weather Station".into(), + name: "Wreckage".into(), }, item: ItemInfo { consumable: false, @@ -17465,7 +17848,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemWreckageTurbineGenerator1".into(), prefab_hash: -1662394403i32, desc: "".into(), - name: "Wreckage Turbine Generator".into(), + name: "Wreckage".into(), }, item: ItemInfo { consumable: false, @@ -17488,7 +17871,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemWreckageTurbineGenerator2".into(), prefab_hash: 98602599i32, desc: "".into(), - name: "Wreckage Turbine Generator".into(), + name: "Wreckage".into(), }, item: ItemInfo { consumable: false, @@ -17511,7 +17894,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemWreckageTurbineGenerator3".into(), prefab_hash: 1927790321i32, desc: "".into(), - name: "Wreckage Turbine Generator".into(), + name: "Wreckage".into(), }, item: ItemInfo { consumable: false, @@ -17534,7 +17917,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemWreckageWallCooler1".into(), prefab_hash: -1682930158i32, desc: "".into(), - name: "Wreckage Wall Cooler".into(), + name: "Wreckage".into(), }, item: ItemInfo { consumable: false, @@ -17557,7 +17940,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "ItemWreckageWallCooler2".into(), prefab_hash: 45733800i32, desc: "".into(), - name: "Wreckage Wall Cooler".into(), + name: "Wreckage".into(), }, item: ItemInfo { consumable: false, @@ -17725,13 +18108,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : - "Entity".into(), typ : Class::Entity } + SlotInfo { name : "".into(), typ : Class::Crate }, SlotInfo { name : "" + .into(), typ : Class::Crate }, SlotInfo { name : "".into(), typ : + Class::Crate }, SlotInfo { name : "".into(), typ : Class::Crate }, + SlotInfo { name : "".into(), typ : Class::Crate }, SlotInfo { name : "" + .into(), typ : Class::Crate }, SlotInfo { name : "".into(), typ : + Class::Portables }, SlotInfo { name : "".into(), typ : Class::Portables + }, SlotInfo { name : "".into(), typ : Class::Crate } ] .into_iter() .collect(), @@ -17796,9 +18179,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< logic_types: vec![].into_iter().collect(), modes: Some( vec![ - (0u32, "None".into()), (1u32, "NoContact".into()), (2u32, - "Moving".into()), (3u32, "Holding".into()), (4u32, "Landed" - .into()) + ("0".into(), "None".into()), ("1".into(), "NoContact".into()), + ("2".into(), "Moving".into()), ("3".into(), "Holding".into()), + ("4".into(), "Landed".into()) ] .into_iter() .collect(), @@ -17876,9 +18259,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "None".into()), (1u32, "NoContact".into()), (2u32, - "Moving".into()), (3u32, "Holding".into()), (4u32, "Landed" - .into()) + ("0".into(), "None".into()), ("1".into(), "NoContact".into()), + ("2".into(), "Moving".into()), ("3".into(), "Holding".into()), + ("4".into(), "Landed".into()) ] .into_iter() .collect(), @@ -18376,7 +18759,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -18402,9 +18785,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Whole Note".into()), (1u32, "Half Note".into()), (2u32, - "Quarter Note".into()), (3u32, "Eighth Note".into()), (4u32, - "Sixteenth Note".into()) + ("0".into(), "Whole Note".into()), ("1".into(), "Half Note" + .into()), ("2".into(), "Quarter Note".into()), ("3".into(), + "Eighth Note".into()), ("4".into(), "Sixteenth Note".into()) ] .into_iter() .collect(), @@ -18492,7 +18875,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab: PrefabInfo { prefab_name: "MotherboardComms".into(), prefab_hash: -337075633i32, - 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." + 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(), }, @@ -18516,7 +18899,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab: PrefabInfo { prefab_name: "MotherboardLogic".into(), prefab_hash: 502555944i32, - 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." + 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(), }, @@ -18563,7 +18946,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab: PrefabInfo { prefab_name: "MotherboardProgrammableChip".into(), prefab_hash: -161107071i32, - 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." + 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(), }, @@ -18610,7 +18993,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab: PrefabInfo { prefab_name: "MotherboardSorter".into(), prefab_hash: -1908268220i32, - 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." + 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(), }, @@ -18843,7 +19226,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -19090,7 +19473,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -19098,62 +19481,62 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::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()), (2u32, + MemoryAccess::Read)] .into_iter().collect()), ("2".into(), vec![(LogicSlotType::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()), (3u32, + MemoryAccess::Read)] .into_iter().collect()), ("3".into(), vec![(LogicSlotType::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()), (4u32, + MemoryAccess::Read)] .into_iter().collect()), ("4".into(), vec![(LogicSlotType::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()), (5u32, + MemoryAccess::Read)] .into_iter().collect()), ("5".into(), vec![(LogicSlotType::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()), (6u32, + MemoryAccess::Read)] .into_iter().collect()), ("6".into(), vec![(LogicSlotType::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()), (7u32, + MemoryAccess::Read)] .into_iter().collect()), ("7".into(), vec![(LogicSlotType::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()), (8u32, + MemoryAccess::Read)] .into_iter().collect()), ("8".into(), vec![(LogicSlotType::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()), (9u32, + MemoryAccess::Read)] .into_iter().collect()), ("9".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -19190,10 +19573,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "None".into()), (1u32, "Follow".into()), (2u32, - "MoveToTarget".into()), (3u32, "Roam".into()), (4u32, "Unload" - .into()), (5u32, "PathToTarget".into()), (6u32, "StorageFull" - .into()) + ("0".into(), "None".into()), ("1".into(), "Follow".into()), ("2" + .into(), "MoveToTarget".into()), ("3".into(), "Roam".into()), + ("4".into(), "Unload".into()), ("5".into(), "PathToTarget" + .into()), ("6".into(), "StorageFull".into()) ] .into_iter() .collect(), @@ -19243,20 +19626,20 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::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()), (1u32, + MemoryAccess::Read)] .into_iter().collect()), ("1".into(), vec![(LogicSlotType::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()), (2u32, + MemoryAccess::Read)] .into_iter().collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -19264,21 +19647,21 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::FilterType, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (3u32, vec![(LogicSlotType::Occupied, + .collect()), ("3".into(), vec![(LogicSlotType::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()), (4u32, vec![(LogicSlotType::Occupied, + .collect()), ("4".into(), vec![(LogicSlotType::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()), (5u32, vec![(LogicSlotType::Occupied, + .collect()), ("5".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -19287,7 +19670,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (6u32, vec![(LogicSlotType::Occupied, + .collect()), ("6".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -19296,7 +19679,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (7u32, vec![(LogicSlotType::Occupied, + .collect()), ("7".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -19305,7 +19688,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (8u32, vec![(LogicSlotType::Occupied, + .collect()), ("8".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -19314,7 +19697,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (9u32, vec![(LogicSlotType::Occupied, + .collect()), ("9".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -19322,7 +19705,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (10u32, vec![(LogicSlotType::Occupied, + .collect()), ("10".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -19330,7 +19713,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (11u32, vec![(LogicSlotType::Occupied, + .collect()), ("11".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -19338,27 +19721,27 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (12u32, vec![(LogicSlotType::Occupied, + .collect()), ("12".into(), vec![(LogicSlotType::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()), (13u32, + MemoryAccess::Read)] .into_iter().collect()), ("13".into(), vec![(LogicSlotType::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()), (14u32, + MemoryAccess::Read)] .into_iter().collect()), ("14".into(), vec![(LogicSlotType::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()), (15u32, + MemoryAccess::Read)] .into_iter().collect()), ("15".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -19449,20 +19832,20 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::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()), (1u32, + MemoryAccess::Read)] .into_iter().collect()), ("1".into(), vec![(LogicSlotType::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()), (2u32, + MemoryAccess::Read)] .into_iter().collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -19471,7 +19854,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (3u32, vec![(LogicSlotType::Occupied, + .collect()), ("3".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -19479,7 +19862,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (4u32, vec![(LogicSlotType::Occupied, + .collect()), ("4".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -19487,41 +19870,41 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (5u32, vec![(LogicSlotType::Occupied, + .collect()), ("5".into(), vec![(LogicSlotType::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()), (6u32, + MemoryAccess::Read)] .into_iter().collect()), ("6".into(), vec![(LogicSlotType::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()), (7u32, + MemoryAccess::Read)] .into_iter().collect()), ("7".into(), vec![(LogicSlotType::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()), (8u32, + MemoryAccess::Read)] .into_iter().collect()), ("8".into(), vec![(LogicSlotType::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()), (9u32, + MemoryAccess::Read)] .into_iter().collect()), ("9".into(), vec![(LogicSlotType::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()), (10u32, + MemoryAccess::Read)] .into_iter().collect()), ("10".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -20044,7 +20427,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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 ..." + 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(), }, @@ -20053,7 +20436,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -20081,7 +20464,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Outward".into()), (1u32, "Inward".into())] + vec![("0".into(), "Outward".into()), ("1".into(), "Inward".into())] .into_iter() .collect(), ), @@ -20128,8 +20511,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()) ] .into_iter() .collect(), @@ -20151,7 +20534,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] .into_iter() .collect(), ), @@ -20209,8 +20592,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()) ] .into_iter() .collect(), @@ -20255,7 +20638,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] .into_iter() .collect(), ), @@ -20312,8 +20695,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()) ] .into_iter() .collect(), @@ -20366,7 +20749,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_reagents: true, }, consumer_info: ConsumerInfo { - consumed_resouces: vec![ + consumed_resources: vec![ "ItemCookedCondensedMilk".into(), "ItemCookedCorn".into(), "ItemCookedMushroom".into(), "ItemCookedPowderedEggs".into(), "ItemCookedPumpkin".into(), "ItemCookedRice".into(), @@ -20402,7 +20785,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< pressure : RecipeRange { start : 0f64, stop : 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(), 8f64), ("Oil" + count_types : 3i64, reagents : vec![("Mushroom".into(), 5f64), ("Oil" .into(), 1f64), ("Steel".into(), 1f64)] .into_iter().collect() }), ("ItemCannedPowderedEggs".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : @@ -20441,7 +20824,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 0f64, stop : 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(), 5f64), + reagents : vec![("Oil".into(), 1f64), ("Pumpkin".into(), 2f64), ("Steel".into(), 1f64)] .into_iter().collect() }), ("ItemTomatoSoup" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, @@ -20834,7 +21217,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] + logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -20909,7 +21292,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Idle".into()), (1u32, "Active".into())] + vec![("0".into(), "Idle".into()), ("1".into(), "Active".into())] .into_iter() .collect(), ), @@ -20976,7 +21359,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Operate".into()), (1u32, "Logic".into())] + vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] .into_iter() .collect(), ), @@ -21033,7 +21416,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Operate".into()), (1u32, "Logic".into())] + vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] .into_iter() .collect(), ), @@ -21077,7 +21460,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -21133,7 +21516,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -21141,7 +21524,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -21218,7 +21601,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -21228,7 +21611,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -21257,9 +21640,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Idle".into()), (1u32, "Discharged".into()), (2u32, - "Discharging".into()), (3u32, "Charging".into()), (4u32, - "Charged".into()) + ("0".into(), "Idle".into()), ("1".into(), "Discharged".into()), + ("2".into(), "Discharging".into()), ("3".into(), "Charging" + .into()), ("4".into(), "Charged".into()) ] .into_iter() .collect(), @@ -21310,7 +21693,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -21320,7 +21703,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -21349,9 +21732,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Idle".into()), (1u32, "Discharged".into()), (2u32, - "Discharging".into()), (3u32, "Charging".into()), (4u32, - "Charged".into()) + ("0".into(), "Idle".into()), ("1".into(), "Discharged".into()), + ("2".into(), "Discharging".into()), ("3".into(), "Charging" + .into()), ("4".into(), "Charged".into()) ] .into_iter() .collect(), @@ -21402,8 +21785,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()) ] .into_iter() .collect(), @@ -21470,8 +21853,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()) ] .into_iter() .collect(), @@ -21524,7 +21907,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_reagents: true, }, consumer_info: ConsumerInfo { - consumed_resouces: vec![ + consumed_resources: vec![ "ItemAstroloyIngot".into(), "ItemConstantanIngot".into(), "ItemCopperIngot".into(), "ItemElectrumIngot".into(), "ItemGoldIngot" .into(), "ItemHastelloyIngot".into(), "ItemInconelIngot".into(), @@ -21548,6 +21931,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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() }), + ("ItemAstroloySheets".into(), Recipe { 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() }), ("ItemCableCoil".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : @@ -21803,7 +22193,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< pressure : RecipeRange { start : 0f64, stop : 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)] + count_types : 1i64, reagents : vec![("Astroloy".into(), 2f64)] .into_iter().collect() }), ("ItemKitRespawnPointWallMounted".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : @@ -21812,6 +22202,14 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< : 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() }), + ("ItemKitRobotArmDoor".into(), Recipe { 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() }), ("ItemKitRocketManufactory".into(), Recipe { tier : MachineTier::TierOne, time : 120f64, energy : 12000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, @@ -21942,7 +22340,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< false }, pressure : RecipeRange { start : 0f64, stop : 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(), + .collect() }, count_types : 2i64, reagents : vec![("Solder".into(), 1f64), ("Steel".into(), 2f64)] .into_iter().collect() }), ("ItemPlasticSheets".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 200f64, temperature : RecipeRange { start : @@ -22385,8 +22783,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()) ] .into_iter() .collect(), @@ -22439,7 +22837,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_reagents: true, }, consumer_info: ConsumerInfo { - consumed_resouces: vec![ + consumed_resources: vec![ "ItemCorn".into(), "ItemEgg".into(), "ItemFertilizedEgg".into(), "ItemFlour".into(), "ItemMilk".into(), "ItemMushroom".into(), "ItemPotato".into(), "ItemPumpkin".into(), "ItemRice".into(), @@ -22533,14 +22931,14 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< pressure : RecipeRange { start : 0f64, stop : 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(), 3f64)] + count_types : 1i64, reagents : vec![("Rice".into(), 1f64)] .into_iter().collect() }), ("ItemCookedSoybean".into(), Recipe { 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(), 5f64)] + count_types : 1i64, reagents : vec![("Soy".into(), 1f64)] .into_iter().collect() }), ("ItemCookedTomato".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, @@ -23145,9 +23543,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), - (5u32, "High".into()), (6u32, "Full".into()) + ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), + ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" + .into(), "Medium".into()), ("5".into(), "High".into()), ("6" + .into(), "Full".into()) ] .into_iter() .collect(), @@ -23194,7 +23593,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -23204,7 +23603,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -23214,7 +23613,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (2u32, vec![(LogicSlotType::Occupied, + .collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -23224,7 +23623,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (3u32, vec![(LogicSlotType::Occupied, + .collect()), ("3".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -23234,7 +23633,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (4u32, vec![(LogicSlotType::Occupied, + .collect()), ("4".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -23307,7 +23706,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -23317,7 +23716,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -23402,9 +23801,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), - (5u32, "High".into()), (6u32, "Full".into()) + ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), + ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" + .into(), "Medium".into()), ("5".into(), "High".into()), ("6" + .into(), "Full".into()) ] .into_iter() .collect(), @@ -23465,9 +23865,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), - (5u32, "High".into()), (6u32, "Full".into()) + ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), + ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" + .into(), "Medium".into()), ("5".into(), "High".into()), ("6" + .into(), "Full".into()) ] .into_iter() .collect(), @@ -23529,9 +23930,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, - "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), - (5u32, "High".into()), (6u32, "Full".into()) + ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), + ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" + .into(), "Medium".into()), ("5".into(), "High".into()), ("6" + .into(), "Full".into()) ] .into_iter() .collect(), @@ -23630,7 +24032,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -23639,7 +24041,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -23707,7 +24109,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -23716,7 +24118,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -23784,7 +24186,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -23793,7 +24195,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -23861,7 +24263,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -23870,7 +24272,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -23938,7 +24340,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -23947,7 +24349,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -24029,7 +24431,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Operate".into()), (1u32, "Logic".into())] + vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] .into_iter() .collect(), ), @@ -24065,7 +24467,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab: PrefabInfo { prefab_name: "StructureBlockBed".into(), prefab_hash: 697908419i32, - desc: "Description coming.".into(), + desc: "".into(), name: "Block Bed".into(), }, structure: StructureInfo { small_grid: true }, @@ -24073,7 +24475,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -24861,7 +25263,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] .into_iter() .collect(), ), @@ -25052,68 +25454,82 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()), (2u32, vec![] .into_iter().collect()), (3u32, vec![] - .into_iter().collect()), (4u32, vec![] .into_iter().collect()), - (5u32, vec![] .into_iter().collect()), (6u32, vec![] .into_iter() - .collect()), (7u32, vec![] .into_iter().collect()), (8u32, vec![] - .into_iter().collect()), (9u32, vec![] .into_iter().collect()), - (10u32, vec![] .into_iter().collect()), (11u32, vec![] .into_iter() - .collect()), (12u32, vec![] .into_iter().collect()), (13u32, vec![] - .into_iter().collect()), (14u32, vec![] .into_iter().collect()), - (15u32, vec![] .into_iter().collect()), (16u32, vec![] .into_iter() - .collect()), (17u32, vec![] .into_iter().collect()), (18u32, vec![] - .into_iter().collect()), (19u32, vec![] .into_iter().collect()), - (20u32, vec![] .into_iter().collect()), (21u32, vec![] .into_iter() - .collect()), (22u32, vec![] .into_iter().collect()), (23u32, vec![] - .into_iter().collect()), (24u32, vec![] .into_iter().collect()), - (25u32, vec![] .into_iter().collect()), (26u32, vec![] .into_iter() - .collect()), (27u32, vec![] .into_iter().collect()), (28u32, vec![] - .into_iter().collect()), (29u32, vec![] .into_iter().collect()), - (30u32, vec![] .into_iter().collect()), (31u32, vec![] .into_iter() - .collect()), (32u32, vec![] .into_iter().collect()), (33u32, vec![] - .into_iter().collect()), (34u32, vec![] .into_iter().collect()), - (35u32, vec![] .into_iter().collect()), (36u32, vec![] .into_iter() - .collect()), (37u32, vec![] .into_iter().collect()), (38u32, vec![] - .into_iter().collect()), (39u32, vec![] .into_iter().collect()), - (40u32, vec![] .into_iter().collect()), (41u32, vec![] .into_iter() - .collect()), (42u32, vec![] .into_iter().collect()), (43u32, vec![] - .into_iter().collect()), (44u32, vec![] .into_iter().collect()), - (45u32, vec![] .into_iter().collect()), (46u32, vec![] .into_iter() - .collect()), (47u32, vec![] .into_iter().collect()), (48u32, vec![] - .into_iter().collect()), (49u32, vec![] .into_iter().collect()), - (50u32, vec![] .into_iter().collect()), (51u32, vec![] .into_iter() - .collect()), (52u32, vec![] .into_iter().collect()), (53u32, vec![] - .into_iter().collect()), (54u32, vec![] .into_iter().collect()), - (55u32, vec![] .into_iter().collect()), (56u32, vec![] .into_iter() - .collect()), (57u32, vec![] .into_iter().collect()), (58u32, vec![] - .into_iter().collect()), (59u32, vec![] .into_iter().collect()), - (60u32, vec![] .into_iter().collect()), (61u32, vec![] .into_iter() - .collect()), (62u32, vec![] .into_iter().collect()), (63u32, vec![] - .into_iter().collect()), (64u32, vec![] .into_iter().collect()), - (65u32, vec![] .into_iter().collect()), (66u32, vec![] .into_iter() - .collect()), (67u32, vec![] .into_iter().collect()), (68u32, vec![] - .into_iter().collect()), (69u32, vec![] .into_iter().collect()), - (70u32, vec![] .into_iter().collect()), (71u32, vec![] .into_iter() - .collect()), (72u32, vec![] .into_iter().collect()), (73u32, vec![] - .into_iter().collect()), (74u32, vec![] .into_iter().collect()), - (75u32, vec![] .into_iter().collect()), (76u32, vec![] .into_iter() - .collect()), (77u32, vec![] .into_iter().collect()), (78u32, vec![] - .into_iter().collect()), (79u32, vec![] .into_iter().collect()), - (80u32, vec![] .into_iter().collect()), (81u32, vec![] .into_iter() - .collect()), (82u32, vec![] .into_iter().collect()), (83u32, vec![] - .into_iter().collect()), (84u32, vec![] .into_iter().collect()), - (85u32, vec![] .into_iter().collect()), (86u32, vec![] .into_iter() - .collect()), (87u32, vec![] .into_iter().collect()), (88u32, vec![] - .into_iter().collect()), (89u32, vec![] .into_iter().collect()), - (90u32, vec![] .into_iter().collect()), (91u32, vec![] .into_iter() - .collect()), (92u32, vec![] .into_iter().collect()), (93u32, vec![] - .into_iter().collect()), (94u32, vec![] .into_iter().collect()), - (95u32, vec![] .into_iter().collect()), (96u32, vec![] .into_iter() - .collect()), (97u32, vec![] .into_iter().collect()), (98u32, vec![] - .into_iter().collect()), (99u32, vec![] .into_iter().collect()), - (100u32, vec![] .into_iter().collect()), (101u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()), ("2".into(), vec![] .into_iter().collect()), + ("3".into(), vec![] .into_iter().collect()), ("4".into(), vec![] + .into_iter().collect()), ("5".into(), vec![] .into_iter().collect()), + ("6".into(), vec![] .into_iter().collect()), ("7".into(), vec![] + .into_iter().collect()), ("8".into(), vec![] .into_iter().collect()), + ("9".into(), vec![] .into_iter().collect()), ("10".into(), vec![] + .into_iter().collect()), ("11".into(), vec![] .into_iter() + .collect()), ("12".into(), vec![] .into_iter().collect()), ("13" + .into(), vec![] .into_iter().collect()), ("14".into(), vec![] + .into_iter().collect()), ("15".into(), vec![] .into_iter() + .collect()), ("16".into(), vec![] .into_iter().collect()), ("17" + .into(), vec![] .into_iter().collect()), ("18".into(), vec![] + .into_iter().collect()), ("19".into(), vec![] .into_iter() + .collect()), ("20".into(), vec![] .into_iter().collect()), ("21" + .into(), vec![] .into_iter().collect()), ("22".into(), vec![] + .into_iter().collect()), ("23".into(), vec![] .into_iter() + .collect()), ("24".into(), vec![] .into_iter().collect()), ("25" + .into(), vec![] .into_iter().collect()), ("26".into(), vec![] + .into_iter().collect()), ("27".into(), vec![] .into_iter() + .collect()), ("28".into(), vec![] .into_iter().collect()), ("29" + .into(), vec![] .into_iter().collect()), ("30".into(), vec![] + .into_iter().collect()), ("31".into(), vec![] .into_iter() + .collect()), ("32".into(), vec![] .into_iter().collect()), ("33" + .into(), vec![] .into_iter().collect()), ("34".into(), vec![] + .into_iter().collect()), ("35".into(), vec![] .into_iter() + .collect()), ("36".into(), vec![] .into_iter().collect()), ("37" + .into(), vec![] .into_iter().collect()), ("38".into(), vec![] + .into_iter().collect()), ("39".into(), vec![] .into_iter() + .collect()), ("40".into(), vec![] .into_iter().collect()), ("41" + .into(), vec![] .into_iter().collect()), ("42".into(), vec![] + .into_iter().collect()), ("43".into(), vec![] .into_iter() + .collect()), ("44".into(), vec![] .into_iter().collect()), ("45" + .into(), vec![] .into_iter().collect()), ("46".into(), vec![] + .into_iter().collect()), ("47".into(), vec![] .into_iter() + .collect()), ("48".into(), vec![] .into_iter().collect()), ("49" + .into(), vec![] .into_iter().collect()), ("50".into(), vec![] + .into_iter().collect()), ("51".into(), vec![] .into_iter() + .collect()), ("52".into(), vec![] .into_iter().collect()), ("53" + .into(), vec![] .into_iter().collect()), ("54".into(), vec![] + .into_iter().collect()), ("55".into(), vec![] .into_iter() + .collect()), ("56".into(), vec![] .into_iter().collect()), ("57" + .into(), vec![] .into_iter().collect()), ("58".into(), vec![] + .into_iter().collect()), ("59".into(), vec![] .into_iter() + .collect()), ("60".into(), vec![] .into_iter().collect()), ("61" + .into(), vec![] .into_iter().collect()), ("62".into(), vec![] + .into_iter().collect()), ("63".into(), vec![] .into_iter() + .collect()), ("64".into(), vec![] .into_iter().collect()), ("65" + .into(), vec![] .into_iter().collect()), ("66".into(), vec![] + .into_iter().collect()), ("67".into(), vec![] .into_iter() + .collect()), ("68".into(), vec![] .into_iter().collect()), ("69" + .into(), vec![] .into_iter().collect()), ("70".into(), vec![] + .into_iter().collect()), ("71".into(), vec![] .into_iter() + .collect()), ("72".into(), vec![] .into_iter().collect()), ("73" + .into(), vec![] .into_iter().collect()), ("74".into(), vec![] + .into_iter().collect()), ("75".into(), vec![] .into_iter() + .collect()), ("76".into(), vec![] .into_iter().collect()), ("77" + .into(), vec![] .into_iter().collect()), ("78".into(), vec![] + .into_iter().collect()), ("79".into(), vec![] .into_iter() + .collect()), ("80".into(), vec![] .into_iter().collect()), ("81" + .into(), vec![] .into_iter().collect()), ("82".into(), vec![] + .into_iter().collect()), ("83".into(), vec![] .into_iter() + .collect()), ("84".into(), vec![] .into_iter().collect()), ("85" + .into(), vec![] .into_iter().collect()), ("86".into(), vec![] + .into_iter().collect()), ("87".into(), vec![] .into_iter() + .collect()), ("88".into(), vec![] .into_iter().collect()), ("89" + .into(), vec![] .into_iter().collect()), ("90".into(), vec![] + .into_iter().collect()), ("91".into(), vec![] .into_iter() + .collect()), ("92".into(), vec![] .into_iter().collect()), ("93" + .into(), vec![] .into_iter().collect()), ("94".into(), vec![] + .into_iter().collect()), ("95".into(), vec![] .into_iter() + .collect()), ("96".into(), vec![] .into_iter().collect()), ("97" + .into(), vec![] .into_iter().collect()), ("98".into(), vec![] + .into_iter().collect()), ("99".into(), vec![] .into_iter() + .collect()), ("100".into(), vec![] .into_iter().collect()), ("101" + .into(), vec![] .into_iter().collect()) ] .into_iter() .collect(), @@ -25258,7 +25674,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25266,7 +25682,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25274,7 +25690,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (2u32, vec![(LogicSlotType::Occupied, + .collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25282,7 +25698,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (3u32, vec![(LogicSlotType::Occupied, + .collect()), ("3".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25290,7 +25706,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (4u32, vec![(LogicSlotType::Occupied, + .collect()), ("4".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25298,7 +25714,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (5u32, vec![(LogicSlotType::Occupied, + .collect()), ("5".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25306,7 +25722,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (6u32, vec![(LogicSlotType::Occupied, + .collect()), ("6".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25314,7 +25730,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (7u32, vec![(LogicSlotType::Occupied, + .collect()), ("7".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25322,7 +25738,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (8u32, vec![(LogicSlotType::Occupied, + .collect()), ("8".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25330,7 +25746,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (9u32, vec![(LogicSlotType::Occupied, + .collect()), ("9".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25338,7 +25754,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (10u32, vec![(LogicSlotType::Occupied, + .collect()), ("10".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25346,7 +25762,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (11u32, vec![(LogicSlotType::Occupied, + .collect()), ("11".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25354,7 +25770,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (12u32, vec![(LogicSlotType::Occupied, + .collect()), ("12".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25362,7 +25778,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (13u32, vec![(LogicSlotType::Occupied, + .collect()), ("13".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25370,7 +25786,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (14u32, vec![(LogicSlotType::Occupied, + .collect()), ("14".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25378,7 +25794,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (15u32, vec![(LogicSlotType::Occupied, + .collect()), ("15".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25386,7 +25802,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (16u32, vec![(LogicSlotType::Occupied, + .collect()), ("16".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25394,7 +25810,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (17u32, vec![(LogicSlotType::Occupied, + .collect()), ("17".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25402,7 +25818,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (18u32, vec![(LogicSlotType::Occupied, + .collect()), ("18".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25410,7 +25826,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (19u32, vec![(LogicSlotType::Occupied, + .collect()), ("19".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25418,7 +25834,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (20u32, vec![(LogicSlotType::Occupied, + .collect()), ("20".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25426,7 +25842,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (21u32, vec![(LogicSlotType::Occupied, + .collect()), ("21".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25434,7 +25850,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (22u32, vec![(LogicSlotType::Occupied, + .collect()), ("22".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25442,7 +25858,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (23u32, vec![(LogicSlotType::Occupied, + .collect()), ("23".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25450,7 +25866,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (24u32, vec![(LogicSlotType::Occupied, + .collect()), ("24".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25458,7 +25874,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (25u32, vec![(LogicSlotType::Occupied, + .collect()), ("25".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25466,7 +25882,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (26u32, vec![(LogicSlotType::Occupied, + .collect()), ("26".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25474,7 +25890,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (27u32, vec![(LogicSlotType::Occupied, + .collect()), ("27".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25482,7 +25898,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (28u32, vec![(LogicSlotType::Occupied, + .collect()), ("28".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25490,7 +25906,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (29u32, vec![(LogicSlotType::Occupied, + .collect()), ("29".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25498,7 +25914,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (30u32, vec![(LogicSlotType::Occupied, + .collect()), ("30".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25506,7 +25922,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (31u32, vec![(LogicSlotType::Occupied, + .collect()), ("31".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25514,7 +25930,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (32u32, vec![(LogicSlotType::Occupied, + .collect()), ("32".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25522,7 +25938,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (33u32, vec![(LogicSlotType::Occupied, + .collect()), ("33".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25530,7 +25946,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (34u32, vec![(LogicSlotType::Occupied, + .collect()), ("34".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25538,7 +25954,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (35u32, vec![(LogicSlotType::Occupied, + .collect()), ("35".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25546,7 +25962,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (36u32, vec![(LogicSlotType::Occupied, + .collect()), ("36".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25554,7 +25970,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (37u32, vec![(LogicSlotType::Occupied, + .collect()), ("37".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25562,7 +25978,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (38u32, vec![(LogicSlotType::Occupied, + .collect()), ("38".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25570,7 +25986,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (39u32, vec![(LogicSlotType::Occupied, + .collect()), ("39".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25578,7 +25994,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (40u32, vec![(LogicSlotType::Occupied, + .collect()), ("40".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25586,7 +26002,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (41u32, vec![(LogicSlotType::Occupied, + .collect()), ("41".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25594,7 +26010,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (42u32, vec![(LogicSlotType::Occupied, + .collect()), ("42".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25602,7 +26018,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (43u32, vec![(LogicSlotType::Occupied, + .collect()), ("43".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25610,7 +26026,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (44u32, vec![(LogicSlotType::Occupied, + .collect()), ("44".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25618,7 +26034,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (45u32, vec![(LogicSlotType::Occupied, + .collect()), ("45".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25626,7 +26042,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (46u32, vec![(LogicSlotType::Occupied, + .collect()), ("46".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25634,7 +26050,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (47u32, vec![(LogicSlotType::Occupied, + .collect()), ("47".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25642,7 +26058,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (48u32, vec![(LogicSlotType::Occupied, + .collect()), ("48".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25650,7 +26066,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (49u32, vec![(LogicSlotType::Occupied, + .collect()), ("49".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25658,7 +26074,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (50u32, vec![(LogicSlotType::Occupied, + .collect()), ("50".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25666,7 +26082,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (51u32, vec![(LogicSlotType::Occupied, + .collect()), ("51".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25780,8 +26196,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()) ] .into_iter() .collect(), @@ -25848,7 +26264,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25903,7 +26319,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25958,7 +26374,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26013,7 +26429,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26068,7 +26484,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26123,7 +26539,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26178,7 +26594,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26233,7 +26649,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26288,7 +26704,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26337,14 +26753,14 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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 Bin".into(), + name: "Chute Import Bin".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26430,7 +26846,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26456,7 +26872,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] .into_iter() .collect(), ), @@ -26506,7 +26922,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26532,7 +26948,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] .into_iter() .collect(), ), @@ -26582,7 +26998,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26651,7 +27067,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26705,6 +27121,72 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< } .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".into(), vec![(LogicSlotType::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![SlotInfo { name : "Input".into(), typ : Class::None }] + .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 { @@ -26738,7 +27220,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26821,7 +27303,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26923,7 +27405,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26983,7 +27465,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -27043,7 +27525,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -27068,8 +27550,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Left".into()), (1u32, "Center".into()), (2u32, "Right" - .into()) + ("0".into(), "Left".into()), ("1".into(), "Center".into()), ("2" + .into(), "Right".into()) ] .into_iter() .collect(), @@ -27154,7 +27636,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -27228,8 +27710,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()), (2u32, vec![] .into_iter().collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()), ("2".into(), vec![] .into_iter().collect()) ] .into_iter() .collect(), @@ -27641,7 +28123,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Operate".into()), (1u32, "Logic".into())] + vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] .into_iter() .collect(), ), @@ -27854,23 +28336,169 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< } .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: "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" + desc: "This unit operates with a wide range of motherboards." .into(), - name: "Computer".into(), + name: "Computer (Modern)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()), (2u32, vec![] .into_iter().collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()), ("2".into(), 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![ + SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk }, SlotInfo { + name : "Data Disk".into(), typ : Class::DataDisk }, SlotInfo { name : + "Motherboard".into(), typ : Class::Motherboard } + ] + .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".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()), ("2".into(), vec![] .into_iter().collect()) ] .into_iter() .collect(), @@ -28065,8 +28693,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()) ] .into_iter() .collect(), @@ -28127,8 +28755,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()) ] .into_iter() .collect(), @@ -28202,8 +28830,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Default".into()), (1u32, "Percent".into()), (2u32, - "Power".into()) + ("0".into(), "Default".into()), ("1".into(), "Percent".into()), + ("2".into(), "Power".into()) ] .into_iter() .collect(), @@ -28260,8 +28888,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Default".into()), (1u32, "Percent".into()), (2u32, - "Power".into()) + ("0".into(), "Default".into()), ("1".into(), "Percent".into()), + ("2".into(), "Power".into()) ] .into_iter() .collect(), @@ -28318,8 +28946,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Default".into()), (1u32, "Percent".into()), (2u32, - "Power".into()) + ("0".into(), "Default".into()), ("1".into(), "Percent".into()), + ("2".into(), "Power".into()) ] .into_iter() .collect(), @@ -28364,8 +28992,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()) ] .into_iter() .collect(), @@ -28429,7 +29057,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -28479,7 +29107,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] .into_iter() .collect(), ), @@ -28525,7 +29153,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -28533,7 +29161,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -28541,7 +29169,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (2u32, vec![(LogicSlotType::Occupied, + .collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -28549,7 +29177,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (3u32, vec![(LogicSlotType::Occupied, + .collect()), ("3".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -28557,7 +29185,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (4u32, vec![(LogicSlotType::Occupied, + .collect()), ("4".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -28565,7 +29193,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (5u32, vec![(LogicSlotType::Occupied, + .collect()), ("5".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -28626,7 +29254,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "Container Slot".into(), typ : Class::None }] + slots: vec![SlotInfo { name : "Container Slot".into(), typ : Class::Crate }] .into_iter() .collect(), } @@ -28650,7 +29278,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -28725,7 +29353,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] + logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -28791,7 +29419,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] + logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -28869,8 +29497,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Default".into()), (1u32, "Horizontal".into()), (2u32, - "Vertical".into()) + ("0".into(), "Default".into()), ("1".into(), "Horizontal" + .into()), ("2".into(), "Vertical".into()) ] .into_iter() .collect(), @@ -28914,7 +29542,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] + logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -29174,8 +29802,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab: PrefabInfo { prefab_name: "StructureDrinkingFountain".into(), prefab_hash: 1968371847i32, - desc: "".into(), - name: "".into(), + 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, @@ -29235,7 +29864,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] + logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -29308,7 +29937,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Idle".into()), (1u32, "Active".into())] + vec![("0".into(), "Idle".into()), ("1".into(), "Active".into())] .into_iter() .collect(), ), @@ -29361,8 +29990,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()) ] .into_iter() .collect(), @@ -29415,7 +30044,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_reagents: true, }, consumer_info: ConsumerInfo { - consumed_resouces: vec![ + consumed_resources: vec![ "ItemAstroloyIngot".into(), "ItemConstantanIngot".into(), "ItemCopperIngot".into(), "ItemElectrumIngot".into(), "ItemGoldIngot" .into(), "ItemHastelloyIngot".into(), "ItemInconelIngot".into(), @@ -30063,14 +30692,21 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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() }), ("ItemKitLogicCircuit".into(), Recipe { tier : - MachineTier::TierOne, time : 40f64, energy : 2000f64, temperature : + .collect() }), ("ItemKitLinearRail".into(), Recipe { 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(), 10f64), - ("Solder".into(), 2f64), ("Steel".into(), 4f64)] .into_iter() + count_types : 1i64, reagents : vec![("Steel".into(), 3f64)] + .into_iter().collect() }), ("ItemKitLogicCircuit".into(), Recipe { + 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() }), ("ItemKitLogicInputOutput".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, @@ -30148,6 +30784,14 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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() }), + ("ItemKitRoboticArm".into(), Recipe { 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() }), ("ItemKitSatelliteDish".into(), Recipe { tier : MachineTier::TierOne, time : 120f64, energy : 24000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { @@ -30156,8 +30800,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Electrum".into(), 15f64), ("Solder".into(), 10f64), ("Steel".into(), 20f64)] .into_iter().collect() }), ("ItemKitSensor" - .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : - 10f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + .into(), Recipe { 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![] @@ -31054,7 +31698,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab: PrefabInfo { prefab_name: "StructureEmergencyButton".into(), prefab_hash: 1668452680i32, - desc: "Description coming.".into(), + desc: "".into(), name: "Important Button".into(), }, structure: StructureInfo { small_grid: true }, @@ -31308,8 +31952,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()), (2u32, vec![] .into_iter().collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()), ("2".into(), vec![] .into_iter().collect()) ] .into_iter() .collect(), @@ -31382,7 +32026,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Idle".into()), (1u32, "Active".into())] + vec![("0".into(), "Idle".into()), ("1".into(), "Active".into())] .into_iter() .collect(), ), @@ -31501,7 +32145,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -31657,7 +32301,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -31665,7 +32309,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -31673,7 +32317,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (2u32, vec![(LogicSlotType::Occupied, + .collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -31681,7 +32325,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (3u32, vec![(LogicSlotType::Occupied, + .collect()), ("3".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -31689,7 +32333,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (4u32, vec![(LogicSlotType::Occupied, + .collect()), ("4".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -31697,7 +32341,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (5u32, vec![(LogicSlotType::Occupied, + .collect()), ("5".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -31705,7 +32349,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (6u32, vec![(LogicSlotType::Occupied, + .collect()), ("6".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -31713,7 +32357,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (7u32, vec![(LogicSlotType::Occupied, + .collect()), ("7".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -31721,7 +32365,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (8u32, vec![(LogicSlotType::Occupied, + .collect()), ("8".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -31729,7 +32373,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (9u32, vec![(LogicSlotType::Occupied, + .collect()), ("9".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -31737,7 +32381,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (10u32, vec![(LogicSlotType::Occupied, + .collect()), ("10".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -31745,7 +32389,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (11u32, vec![(LogicSlotType::Occupied, + .collect()), ("11".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -31753,7 +32397,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (12u32, vec![(LogicSlotType::Occupied, + .collect()), ("12".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -31761,7 +32405,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (13u32, vec![(LogicSlotType::Occupied, + .collect()), ("13".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -31769,7 +32413,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (14u32, vec![(LogicSlotType::Occupied, + .collect()), ("14".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -31871,7 +32515,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -31879,7 +32523,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -31969,8 +32613,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()) ] .into_iter() .collect(), @@ -32009,7 +32653,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] .into_iter() .collect(), ), @@ -32325,7 +32969,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -32513,8 +33157,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Left".into()), (1u32, "Center".into()), (2u32, "Right" - .into()) + ("0".into(), "Left".into()), ("1".into(), "Center".into()), ("2" + .into(), "Right".into()) ] .into_iter() .collect(), @@ -32572,7 +33216,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Operate".into()), (1u32, "Logic".into())] + vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] .into_iter() .collect(), ), @@ -32807,7 +33451,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -32815,7 +33459,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -32823,7 +33467,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (2u32, vec![(LogicSlotType::Occupied, + .collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -32852,8 +33496,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Idle".into()), (1u32, "Happy".into()), (2u32, "UnHappy" - .into()), (3u32, "Dead".into()) + ("0".into(), "Idle".into()), ("1".into(), "Happy".into()), ("2" + .into(), "UnHappy".into()), ("3".into(), "Dead".into()) ] .into_iter() .collect(), @@ -33065,8 +33709,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()) ] .into_iter() .collect(), @@ -33085,7 +33729,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] .into_iter() .collect(), ), @@ -33138,8 +33782,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()) ] .into_iter() .collect(), @@ -33192,7 +33836,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_reagents: true, }, consumer_info: ConsumerInfo { - consumed_resouces: vec![ + consumed_resources: vec![ "ItemAstroloyIngot".into(), "ItemConstantanIngot".into(), "ItemCopperIngot".into(), "ItemElectrumIngot".into(), "ItemGoldIngot" .into(), "ItemHastelloyIngot".into(), "ItemInconelIngot".into(), @@ -33728,69 +34372,62 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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() }), - ("ItemKitSensor".into(), Recipe { tier : MachineTier::TierOne, time : - 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + ("ItemKitShower".into(), Recipe { 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(), 1f64)] .into_iter().collect() }), ("ItemKitShower" - .into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : - 3000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + reagents : vec![("Copper".into(), 5f64), ("Iron".into(), 5f64), + ("Silicon".into(), 5f64)] .into_iter().collect() }), + ("ItemKitSleeper".into(), Recipe { 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() }), + ("ItemKitSmallDirectHeatExchanger".into(), Recipe { 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() }), ("ItemKitStandardChute" + .into(), Recipe { 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), ("Iron".into(), 5f64), ("Silicon" - .into(), 5f64)] .into_iter().collect() }), ("ItemKitSleeper".into(), - Recipe { 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() }), ("ItemKitSmallDirectHeatExchanger".into(), Recipe { - tier : MachineTier::TierOne, time : 10f64, energy : 500f64, + vec![("Constantan".into(), 2f64), ("Electrum".into(), 2f64), ("Iron" + .into(), 3f64)] .into_iter().collect() }), ("ItemKitSuitStorage" + .into(), Recipe { 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() }), ("ItemKitTank".into(), + Recipe { 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(), 3f64)] .into_iter().collect() }), - ("ItemKitStandardChute".into(), Recipe { tier : MachineTier::TierOne, - time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 5f64), ("Steel".into(), 20f64)] .into_iter().collect() }), + ("ItemKitTankInsulated".into(), Recipe { 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![("Constantan".into(), 2f64), ("Electrum".into(), - 2f64), ("Iron".into(), 3f64)] .into_iter().collect() }), - ("ItemKitSuitStorage".into(), Recipe { 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() }), ("ItemKitTank" - .into(), Recipe { 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() }), ("ItemKitTankInsulated".into(), Recipe { 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() }), ("ItemKitTurboVolumePump".into(), Recipe { tier : + reagents : vec![("Copper".into(), 5f64), ("Silicon".into(), 30f64), + ("Steel".into(), 20f64)] .into_iter().collect() }), + ("ItemKitTurboVolumePump".into(), Recipe { tier : MachineTier::TierTwo, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : @@ -34388,7 +35025,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -34400,7 +35037,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -34412,7 +35049,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (2u32, vec![(LogicSlotType::Occupied, + .collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -34424,7 +35061,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (3u32, vec![(LogicSlotType::Occupied, + .collect()), ("3".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -34436,7 +35073,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (4u32, vec![(LogicSlotType::Occupied, + .collect()), ("4".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -34448,7 +35085,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (5u32, vec![(LogicSlotType::Occupied, + .collect()), ("5".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -34460,7 +35097,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (6u32, vec![(LogicSlotType::Occupied, + .collect()), ("6".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -34472,7 +35109,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (7u32, vec![(LogicSlotType::Occupied, + .collect()), ("7".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -34599,7 +35236,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -34612,7 +35249,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Seeding, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -34701,7 +35338,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] + logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -35294,7 +35931,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Operate".into()), (1u32, "Logic".into())] + vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] .into_iter() .collect(), ), @@ -35345,7 +35982,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Operate".into()), (1u32, "Logic".into())] + vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] .into_iter() .collect(), ), @@ -35396,7 +36033,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Operate".into()), (1u32, "Logic".into())] + vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] .into_iter() .collect(), ), @@ -35447,7 +36084,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Operate".into()), (1u32, "Logic".into())] + vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] .into_iter() .collect(), ), @@ -35499,27 +36136,32 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "None".into()), (1u32, "Alarm2".into()), (2u32, "Alarm3" - .into()), (3u32, "Alarm4".into()), (4u32, "Alarm5".into()), - (5u32, "Alarm6".into()), (6u32, "Alarm7".into()), (7u32, "Music1" - .into()), (8u32, "Music2".into()), (9u32, "Music3".into()), - (10u32, "Alarm8".into()), (11u32, "Alarm9".into()), (12u32, - "Alarm10".into()), (13u32, "Alarm11".into()), (14u32, "Alarm12" - .into()), (15u32, "Danger".into()), (16u32, "Warning".into()), - (17u32, "Alert".into()), (18u32, "StormIncoming".into()), (19u32, - "IntruderAlert".into()), (20u32, "Depressurising".into()), - (21u32, "Pressurising".into()), (22u32, "AirlockCycling".into()), - (23u32, "PowerLow".into()), (24u32, "SystemFailure".into()), - (25u32, "Welcome".into()), (26u32, "MalfunctionDetected".into()), - (27u32, "HaltWhoGoesThere".into()), (28u32, "FireFireFire" - .into()), (29u32, "One".into()), (30u32, "Two".into()), (31u32, - "Three".into()), (32u32, "Four".into()), (33u32, "Five".into()), - (34u32, "Floor".into()), (35u32, "RocketLaunching".into()), - (36u32, "LiftOff".into()), (37u32, "TraderIncoming".into()), - (38u32, "TraderLanded".into()), (39u32, "PressureHigh".into()), - (40u32, "PressureLow".into()), (41u32, "TemperatureHigh".into()), - (42u32, "TemperatureLow".into()), (43u32, "PollutantsDetected" - .into()), (44u32, "HighCarbonDioxide".into()), (45u32, "Alarm1" + ("0".into(), "None".into()), ("1".into(), "Alarm2".into()), ("2" + .into(), "Alarm3".into()), ("3".into(), "Alarm4".into()), ("4" + .into(), "Alarm5".into()), ("5".into(), "Alarm6".into()), ("6" + .into(), "Alarm7".into()), ("7".into(), "Music1".into()), ("8" + .into(), "Music2".into()), ("9".into(), "Music3".into()), ("10" + .into(), "Alarm8".into()), ("11".into(), "Alarm9".into()), ("12" + .into(), "Alarm10".into()), ("13".into(), "Alarm11".into()), + ("14".into(), "Alarm12".into()), ("15".into(), "Danger".into()), + ("16".into(), "Warning".into()), ("17".into(), "Alert".into()), + ("18".into(), "StormIncoming".into()), ("19".into(), + "IntruderAlert".into()), ("20".into(), "Depressurising".into()), + ("21".into(), "Pressurising".into()), ("22".into(), + "AirlockCycling".into()), ("23".into(), "PowerLow".into()), ("24" + .into(), "SystemFailure".into()), ("25".into(), "Welcome" + .into()), ("26".into(), "MalfunctionDetected".into()), ("27" + .into(), "HaltWhoGoesThere".into()), ("28".into(), "FireFireFire" + .into()), ("29".into(), "One".into()), ("30".into(), "Two" + .into()), ("31".into(), "Three".into()), ("32".into(), "Four" + .into()), ("33".into(), "Five".into()), ("34".into(), "Floor" + .into()), ("35".into(), "RocketLaunching".into()), ("36".into(), + "LiftOff".into()), ("37".into(), "TraderIncoming".into()), ("38" + .into(), "TraderLanded".into()), ("39".into(), "PressureHigh" + .into()), ("40".into(), "PressureLow".into()), ("41".into(), + "TemperatureHigh".into()), ("42".into(), "TemperatureLow" + .into()), ("43".into(), "PollutantsDetected".into()), ("44" + .into(), "HighCarbonDioxide".into()), ("45".into(), "Alarm1" .into()) ] .into_iter() @@ -35815,7 +36457,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Operate".into()), (1u32, "Logic".into())] + vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] .into_iter() .collect(), ), @@ -35851,7 +36493,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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 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." + 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(), }, @@ -36079,7 +36721,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab: PrefabInfo { prefab_name: "StructureLightRound".into(), prefab_hash: 1514476632i32, - desc: "Description coming.".into(), + desc: "".into(), name: "Light Round".into(), }, structure: StructureInfo { small_grid: true }, @@ -36128,7 +36770,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab: PrefabInfo { prefab_name: "StructureLightRoundAngled".into(), prefab_hash: 1592905386i32, - desc: "Description coming.".into(), + desc: "".into(), name: "Light Round (Angled)".into(), }, structure: StructureInfo { small_grid: true }, @@ -36177,7 +36819,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab: PrefabInfo { prefab_name: "StructureLightRoundSmall".into(), prefab_hash: 1436121888i32, - desc: "Description coming.".into(), + desc: "".into(), name: "Light Round (Small)".into(), }, structure: StructureInfo { small_grid: true }, @@ -36398,56 +37040,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< } .into(), ); - map.insert( - -782453061i32, - StructureLogicDeviceTemplate { - prefab: PrefabInfo { - prefab_name: "StructureLiquidPipeOneWayValve".into(), - prefab_hash: -782453061i32, - 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.." - .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::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( 2072805863i32, StructureLogicDeviceTemplate { @@ -36860,7 +37452,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -36951,7 +37543,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Right".into()), (1u32, "Left".into())] + vec![("0".into(), "Right".into()), ("1".into(), "Left".into())] .into_iter() .collect(), ), @@ -37110,8 +37702,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Left".into()), (1u32, "Center".into()), (2u32, "Right" - .into()) + ("0".into(), "Left".into()), ("1".into(), "Center".into()), ("2" + .into(), "Right".into()) ] .into_iter() .collect(), @@ -37149,7 +37741,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "StructureLiquidValve".into(), prefab_hash: 1849974453i32, desc: "".into(), - name: "Liquid Valve".into(), + name: "Valve (Liquid)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, @@ -37261,7 +37853,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -37269,7 +37861,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -37277,7 +37869,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (2u32, vec![(LogicSlotType::Occupied, + .collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -37285,7 +37877,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (3u32, vec![(LogicSlotType::Occupied, + .collect()), ("3".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -37564,8 +38156,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Equals".into()), (1u32, "Greater".into()), (2u32, "Less" - .into()), (3u32, "NotEquals".into()) + ("0".into(), "Equals".into()), ("1".into(), "Greater".into()), + ("2".into(), "Less".into()), ("3".into(), "NotEquals".into()) ] .into_iter() .collect(), @@ -37674,9 +38266,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "AND".into()), (1u32, "OR".into()), (2u32, "XOR".into()), - (3u32, "NAND".into()), (4u32, "NOR".into()), (5u32, "XNOR" - .into()) + ("0".into(), "AND".into()), ("1".into(), "OR".into()), ("2" + .into(), "XOR".into()), ("3".into(), "NAND".into()), ("4".into(), + "NOR".into()), ("5".into(), "XNOR".into()) ] .into_iter() .collect(), @@ -37785,10 +38377,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Add".into()), (1u32, "Subtract".into()), (2u32, - "Multiply".into()), (3u32, "Divide".into()), (4u32, "Mod" - .into()), (5u32, "Atan2".into()), (6u32, "Pow".into()), (7u32, - "Log".into()) + ("0".into(), "Add".into()), ("1".into(), "Subtract".into()), ("2" + .into(), "Multiply".into()), ("3".into(), "Divide".into()), ("4" + .into(), "Mod".into()), ("5".into(), "Atan2".into()), ("6" + .into(), "Pow".into()), ("7".into(), "Log".into()) ] .into_iter() .collect(), @@ -37849,12 +38441,14 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Ceil".into()), (1u32, "Floor".into()), (2u32, "Abs" - .into()), (3u32, "Log".into()), (4u32, "Exp".into()), (5u32, - "Round".into()), (6u32, "Rand".into()), (7u32, "Sqrt".into()), - (8u32, "Sin".into()), (9u32, "Cos".into()), (10u32, "Tan" - .into()), (11u32, "Asin".into()), (12u32, "Acos".into()), (13u32, - "Atan".into()), (14u32, "Not".into()) + ("0".into(), "Ceil".into()), ("1".into(), "Floor".into()), ("2" + .into(), "Abs".into()), ("3".into(), "Log".into()), ("4".into(), + "Exp".into()), ("5".into(), "Round".into()), ("6".into(), "Rand" + .into()), ("7".into(), "Sqrt".into()), ("8".into(), "Sin" + .into()), ("9".into(), "Cos".into()), ("10".into(), "Tan" + .into()), ("11".into(), "Asin".into()), ("12".into(), "Acos" + .into()), ("13".into(), "Atan".into()), ("14".into(), "Not" + .into()) ] .into_iter() .collect(), @@ -37960,7 +38554,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Greater".into()), (1u32, "Less".into())] + vec![("0".into(), "Greater".into()), ("1".into(), "Less".into())] .into_iter() .collect(), ), @@ -38264,8 +38858,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Equals".into()), (1u32, "Greater".into()), (2u32, "Less" - .into()), (3u32, "NotEquals".into()) + ("0".into(), "Equals".into()), ("1".into(), "Greater".into()), + ("2".into(), "Less".into()), ("3".into(), "NotEquals".into()) ] .into_iter() .collect(), @@ -38365,7 +38959,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -38373,7 +38967,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -38381,7 +38975,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (2u32, vec![(LogicSlotType::Occupied, + .collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -38389,7 +38983,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (3u32, vec![(LogicSlotType::Occupied, + .collect()), ("3".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -38416,7 +39010,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "All".into()), (1u32, "Any".into()), (2u32, "None".into()) + ("0".into(), "All".into()), ("1".into(), "Any".into()), ("2" + .into(), "None".into()) ] .into_iter() .collect(), @@ -38841,7 +39436,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< logic_slot_types: vec![].into_iter().collect(), logic_types: vec![].into_iter().collect(), modes: Some( - vec![(0u32, "Passive".into()), (1u32, "Active".into())] + vec![("0".into(), "Passive".into()), ("1".into(), "Active".into())] .into_iter() .collect(), ), @@ -39006,7 +39601,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Operate".into()), (1u32, "Logic".into())] + vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] .into_iter() .collect(), ), @@ -39163,7 +39758,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Operate".into()), (1u32, "Logic".into())] + vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] .into_iter() .collect(), ), @@ -39514,7 +40109,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -39613,7 +40208,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Idle".into()), (1u32, "Active".into())] + vec![("0".into(), "Idle".into()), ("1".into(), "Active".into())] .into_iter() .collect(), ), @@ -39715,7 +40310,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -39723,7 +40318,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -39783,7 +40378,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -39791,7 +40386,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -39799,7 +40394,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (2u32, vec![(LogicSlotType::Occupied, + .collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -39807,7 +40402,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (3u32, vec![(LogicSlotType::Occupied, + .collect()), ("3".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -39815,7 +40410,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (4u32, vec![(LogicSlotType::Occupied, + .collect()), ("4".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -39823,7 +40418,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (5u32, vec![(LogicSlotType::Occupied, + .collect()), ("5".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -39831,7 +40426,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (6u32, vec![(LogicSlotType::Occupied, + .collect()), ("6".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -39839,7 +40434,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (7u32, vec![(LogicSlotType::Occupied, + .collect()), ("7".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -39847,7 +40442,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (8u32, vec![(LogicSlotType::Occupied, + .collect()), ("8".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -39855,7 +40450,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (9u32, vec![(LogicSlotType::Occupied, + .collect()), ("9".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -40496,7 +41091,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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 via a {Logic system." + 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(), }, @@ -40969,6 +41564,56 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< } .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 { @@ -41050,13 +41695,12 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into(), ); map.insert( - 1580412404i32, + 1289581593i32, StructureLogicDeviceTemplate { prefab: PrefabInfo { - prefab_name: "StructurePipeOneWayValve".into(), - prefab_hash: 1580412404i32, - 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" - .into(), + prefab_name: "StructurePipeOneWayValveLever".into(), + prefab_hash: 1289581593i32, + desc: "".into(), name: "One Way Valve (Gas)".into(), }, structure: StructureInfo { small_grid: true }, @@ -41067,8 +41711,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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) + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), @@ -41092,7 +41737,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_color_state: false, has_lock_state: false, has_mode_state: false, - has_on_off_state: false, + has_on_off_state: true, has_open_state: false, has_reagents: false, }, @@ -41363,7 +42008,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -41389,7 +42034,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "".into(), typ : Class::None }] + slots: vec![SlotInfo { name : "Portables".into(), typ : Class::Portables }] .into_iter() .collect(), device: DeviceInfo { @@ -41428,7 +42073,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -41507,7 +42152,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Unlinked".into()), (1u32, "Linked".into())] + vec![("0".into(), "Unlinked".into()), ("1".into(), "Linked".into())] .into_iter() .collect(), ), @@ -41619,7 +42264,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Unlinked".into()), (1u32, "Linked".into())] + vec![("0".into(), "Unlinked".into()), ("1".into(), "Linked".into())] .into_iter() .collect(), ), @@ -41768,8 +42413,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Left".into()), (1u32, "Center".into()), (2u32, "Right" - .into()) + ("0".into(), "Left".into()), ("1".into(), "Center".into()), ("2" + .into(), "Right".into()) ] .into_iter() .collect(), @@ -41828,7 +42473,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Outward".into()), (1u32, "Inward".into())] + vec![("0".into(), "Outward".into()), ("1".into(), "Inward".into())] .into_iter() .collect(), ), @@ -41887,7 +42532,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Outward".into()), (1u32, "Inward".into())] + vec![("0".into(), "Outward".into()), ("1".into(), "Inward".into())] .into_iter() .collect(), ), @@ -42533,7 +43178,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -42541,7 +43186,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -42619,68 +43264,82 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()), (2u32, vec![] .into_iter().collect()), (3u32, vec![] - .into_iter().collect()), (4u32, vec![] .into_iter().collect()), - (5u32, vec![] .into_iter().collect()), (6u32, vec![] .into_iter() - .collect()), (7u32, vec![] .into_iter().collect()), (8u32, vec![] - .into_iter().collect()), (9u32, vec![] .into_iter().collect()), - (10u32, vec![] .into_iter().collect()), (11u32, vec![] .into_iter() - .collect()), (12u32, vec![] .into_iter().collect()), (13u32, vec![] - .into_iter().collect()), (14u32, vec![] .into_iter().collect()), - (15u32, vec![] .into_iter().collect()), (16u32, vec![] .into_iter() - .collect()), (17u32, vec![] .into_iter().collect()), (18u32, vec![] - .into_iter().collect()), (19u32, vec![] .into_iter().collect()), - (20u32, vec![] .into_iter().collect()), (21u32, vec![] .into_iter() - .collect()), (22u32, vec![] .into_iter().collect()), (23u32, vec![] - .into_iter().collect()), (24u32, vec![] .into_iter().collect()), - (25u32, vec![] .into_iter().collect()), (26u32, vec![] .into_iter() - .collect()), (27u32, vec![] .into_iter().collect()), (28u32, vec![] - .into_iter().collect()), (29u32, vec![] .into_iter().collect()), - (30u32, vec![] .into_iter().collect()), (31u32, vec![] .into_iter() - .collect()), (32u32, vec![] .into_iter().collect()), (33u32, vec![] - .into_iter().collect()), (34u32, vec![] .into_iter().collect()), - (35u32, vec![] .into_iter().collect()), (36u32, vec![] .into_iter() - .collect()), (37u32, vec![] .into_iter().collect()), (38u32, vec![] - .into_iter().collect()), (39u32, vec![] .into_iter().collect()), - (40u32, vec![] .into_iter().collect()), (41u32, vec![] .into_iter() - .collect()), (42u32, vec![] .into_iter().collect()), (43u32, vec![] - .into_iter().collect()), (44u32, vec![] .into_iter().collect()), - (45u32, vec![] .into_iter().collect()), (46u32, vec![] .into_iter() - .collect()), (47u32, vec![] .into_iter().collect()), (48u32, vec![] - .into_iter().collect()), (49u32, vec![] .into_iter().collect()), - (50u32, vec![] .into_iter().collect()), (51u32, vec![] .into_iter() - .collect()), (52u32, vec![] .into_iter().collect()), (53u32, vec![] - .into_iter().collect()), (54u32, vec![] .into_iter().collect()), - (55u32, vec![] .into_iter().collect()), (56u32, vec![] .into_iter() - .collect()), (57u32, vec![] .into_iter().collect()), (58u32, vec![] - .into_iter().collect()), (59u32, vec![] .into_iter().collect()), - (60u32, vec![] .into_iter().collect()), (61u32, vec![] .into_iter() - .collect()), (62u32, vec![] .into_iter().collect()), (63u32, vec![] - .into_iter().collect()), (64u32, vec![] .into_iter().collect()), - (65u32, vec![] .into_iter().collect()), (66u32, vec![] .into_iter() - .collect()), (67u32, vec![] .into_iter().collect()), (68u32, vec![] - .into_iter().collect()), (69u32, vec![] .into_iter().collect()), - (70u32, vec![] .into_iter().collect()), (71u32, vec![] .into_iter() - .collect()), (72u32, vec![] .into_iter().collect()), (73u32, vec![] - .into_iter().collect()), (74u32, vec![] .into_iter().collect()), - (75u32, vec![] .into_iter().collect()), (76u32, vec![] .into_iter() - .collect()), (77u32, vec![] .into_iter().collect()), (78u32, vec![] - .into_iter().collect()), (79u32, vec![] .into_iter().collect()), - (80u32, vec![] .into_iter().collect()), (81u32, vec![] .into_iter() - .collect()), (82u32, vec![] .into_iter().collect()), (83u32, vec![] - .into_iter().collect()), (84u32, vec![] .into_iter().collect()), - (85u32, vec![] .into_iter().collect()), (86u32, vec![] .into_iter() - .collect()), (87u32, vec![] .into_iter().collect()), (88u32, vec![] - .into_iter().collect()), (89u32, vec![] .into_iter().collect()), - (90u32, vec![] .into_iter().collect()), (91u32, vec![] .into_iter() - .collect()), (92u32, vec![] .into_iter().collect()), (93u32, vec![] - .into_iter().collect()), (94u32, vec![] .into_iter().collect()), - (95u32, vec![] .into_iter().collect()), (96u32, vec![] .into_iter() - .collect()), (97u32, vec![] .into_iter().collect()), (98u32, vec![] - .into_iter().collect()), (99u32, vec![] .into_iter().collect()), - (100u32, vec![] .into_iter().collect()), (101u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()), ("2".into(), vec![] .into_iter().collect()), + ("3".into(), vec![] .into_iter().collect()), ("4".into(), vec![] + .into_iter().collect()), ("5".into(), vec![] .into_iter().collect()), + ("6".into(), vec![] .into_iter().collect()), ("7".into(), vec![] + .into_iter().collect()), ("8".into(), vec![] .into_iter().collect()), + ("9".into(), vec![] .into_iter().collect()), ("10".into(), vec![] + .into_iter().collect()), ("11".into(), vec![] .into_iter() + .collect()), ("12".into(), vec![] .into_iter().collect()), ("13" + .into(), vec![] .into_iter().collect()), ("14".into(), vec![] + .into_iter().collect()), ("15".into(), vec![] .into_iter() + .collect()), ("16".into(), vec![] .into_iter().collect()), ("17" + .into(), vec![] .into_iter().collect()), ("18".into(), vec![] + .into_iter().collect()), ("19".into(), vec![] .into_iter() + .collect()), ("20".into(), vec![] .into_iter().collect()), ("21" + .into(), vec![] .into_iter().collect()), ("22".into(), vec![] + .into_iter().collect()), ("23".into(), vec![] .into_iter() + .collect()), ("24".into(), vec![] .into_iter().collect()), ("25" + .into(), vec![] .into_iter().collect()), ("26".into(), vec![] + .into_iter().collect()), ("27".into(), vec![] .into_iter() + .collect()), ("28".into(), vec![] .into_iter().collect()), ("29" + .into(), vec![] .into_iter().collect()), ("30".into(), vec![] + .into_iter().collect()), ("31".into(), vec![] .into_iter() + .collect()), ("32".into(), vec![] .into_iter().collect()), ("33" + .into(), vec![] .into_iter().collect()), ("34".into(), vec![] + .into_iter().collect()), ("35".into(), vec![] .into_iter() + .collect()), ("36".into(), vec![] .into_iter().collect()), ("37" + .into(), vec![] .into_iter().collect()), ("38".into(), vec![] + .into_iter().collect()), ("39".into(), vec![] .into_iter() + .collect()), ("40".into(), vec![] .into_iter().collect()), ("41" + .into(), vec![] .into_iter().collect()), ("42".into(), vec![] + .into_iter().collect()), ("43".into(), vec![] .into_iter() + .collect()), ("44".into(), vec![] .into_iter().collect()), ("45" + .into(), vec![] .into_iter().collect()), ("46".into(), vec![] + .into_iter().collect()), ("47".into(), vec![] .into_iter() + .collect()), ("48".into(), vec![] .into_iter().collect()), ("49" + .into(), vec![] .into_iter().collect()), ("50".into(), vec![] + .into_iter().collect()), ("51".into(), vec![] .into_iter() + .collect()), ("52".into(), vec![] .into_iter().collect()), ("53" + .into(), vec![] .into_iter().collect()), ("54".into(), vec![] + .into_iter().collect()), ("55".into(), vec![] .into_iter() + .collect()), ("56".into(), vec![] .into_iter().collect()), ("57" + .into(), vec![] .into_iter().collect()), ("58".into(), vec![] + .into_iter().collect()), ("59".into(), vec![] .into_iter() + .collect()), ("60".into(), vec![] .into_iter().collect()), ("61" + .into(), vec![] .into_iter().collect()), ("62".into(), vec![] + .into_iter().collect()), ("63".into(), vec![] .into_iter() + .collect()), ("64".into(), vec![] .into_iter().collect()), ("65" + .into(), vec![] .into_iter().collect()), ("66".into(), vec![] + .into_iter().collect()), ("67".into(), vec![] .into_iter() + .collect()), ("68".into(), vec![] .into_iter().collect()), ("69" + .into(), vec![] .into_iter().collect()), ("70".into(), vec![] + .into_iter().collect()), ("71".into(), vec![] .into_iter() + .collect()), ("72".into(), vec![] .into_iter().collect()), ("73" + .into(), vec![] .into_iter().collect()), ("74".into(), vec![] + .into_iter().collect()), ("75".into(), vec![] .into_iter() + .collect()), ("76".into(), vec![] .into_iter().collect()), ("77" + .into(), vec![] .into_iter().collect()), ("78".into(), vec![] + .into_iter().collect()), ("79".into(), vec![] .into_iter() + .collect()), ("80".into(), vec![] .into_iter().collect()), ("81" + .into(), vec![] .into_iter().collect()), ("82".into(), vec![] + .into_iter().collect()), ("83".into(), vec![] .into_iter() + .collect()), ("84".into(), vec![] .into_iter().collect()), ("85" + .into(), vec![] .into_iter().collect()), ("86".into(), vec![] + .into_iter().collect()), ("87".into(), vec![] .into_iter() + .collect()), ("88".into(), vec![] .into_iter().collect()), ("89" + .into(), vec![] .into_iter().collect()), ("90".into(), vec![] + .into_iter().collect()), ("91".into(), vec![] .into_iter() + .collect()), ("92".into(), vec![] .into_iter().collect()), ("93" + .into(), vec![] .into_iter().collect()), ("94".into(), vec![] + .into_iter().collect()), ("95".into(), vec![] .into_iter() + .collect()), ("96".into(), vec![] .into_iter().collect()), ("97" + .into(), vec![] .into_iter().collect()), ("98".into(), vec![] + .into_iter().collect()), ("99".into(), vec![] .into_iter() + .collect()), ("100".into(), vec![] .into_iter().collect()), ("101" + .into(), vec![] .into_iter().collect()) ] .into_iter() .collect(), @@ -42867,6 +43526,21 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< } .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 { @@ -42899,6 +43573,216 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< } .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".into(), vec![(LogicSlotType::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![SlotInfo { name : "Arm Slot".into(), typ : Class::None }] + .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 { @@ -42961,15 +43845,15 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicType::Size, MemoryAccess::Read), (LogicType::TotalQuantity, MemoryAccess::Read), (LogicType::MinedQuantity, MemoryAccess::Read), (LogicType::NameHash, - MemoryAccess::Read) + MemoryAccess::Read), (LogicType::Altitude, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ - (0u32, "Invalid".into()), (1u32, "None".into()), (2u32, "Mine" - .into()), (3u32, "Survey".into()), (4u32, "Discover".into()), - (5u32, "Chart".into()) + ("0".into(), "Invalid".into()), ("1".into(), "None".into()), ("2" + .into(), "Mine".into()), ("3".into(), "Survey".into()), ("4" + .into(), "Discover".into()), ("5".into(), "Chart".into()) ] .into_iter() .collect(), @@ -43133,7 +44017,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -43277,8 +44161,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()) ] .into_iter() .collect(), @@ -43331,7 +44215,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_reagents: true, }, consumer_info: ConsumerInfo { - consumed_resouces: vec![ + consumed_resources: vec![ "ItemAstroloyIngot".into(), "ItemConstantanIngot".into(), "ItemCopperIngot".into(), "ItemElectrumIngot".into(), "ItemGoldIngot" .into(), "ItemHastelloyIngot".into(), "ItemInconelIngot".into(), @@ -43981,8 +44865,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()) ] .into_iter() .collect(), @@ -44045,7 +44929,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] + logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -44186,7 +45070,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] + logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -44239,7 +45123,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] + logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -44296,8 +45180,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()) ] .into_iter() .collect(), @@ -44317,7 +45201,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] + vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] .into_iter() .collect(), ), @@ -44361,7 +45245,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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 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." + 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(), }, @@ -44435,8 +45319,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()) ] .into_iter() .collect(), @@ -44489,7 +45373,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_reagents: true, }, consumer_info: ConsumerInfo { - consumed_resouces: vec![ + consumed_resources: vec![ "ItemAstroloyIngot".into(), "ItemConstantanIngot".into(), "ItemCopperIngot".into(), "ItemElectrumIngot".into(), "ItemGoldIngot" .into(), "ItemHastelloyIngot".into(), "ItemInconelIngot".into(), @@ -44638,38 +45522,37 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 30f64), ("Lead".into(), 50f64), ("Steel" .into(), 30f64)] .into_iter().collect() }), ("ItemExplosive".into(), - Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, + Recipe { 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 : 5i64, reagents : vec![("Copper".into(), - 5f64), ("Electrum".into(), 1f64), ("Gold".into(), 5f64), ("Lead" - .into(), 10f64), ("Steel".into(), 7f64)] .into_iter().collect() }), - ("ItemGrenade".into(), Recipe { tier : MachineTier::TierOne, time : - 90f64, energy : 2900f64, temperature : RecipeRange { start : 1f64, + .collect() }, count_types : 3i64, reagents : vec![("Electrum".into(), + 1f64), ("Silicon".into(), 3f64), ("Solder".into(), 1f64)] + .into_iter().collect() }), ("ItemGrenade".into(), Recipe { 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() }), ("ItemMiningCharge".into(), Recipe { 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() }), + ("SMGMagazine".into(), Recipe { 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 : 4i64, - reagents : vec![("Copper".into(), 15f64), ("Gold".into(), 1f64), - ("Lead".into(), 25f64), ("Steel".into(), 25f64)] .into_iter() - .collect() }), ("ItemMiningCharge".into(), Recipe { tier : - MachineTier::TierOne, time : 7f64, 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 : 4i64, reagents : vec![("Copper".into(), 5f64), ("Gold" - .into(), 5f64), ("Iron".into(), 7f64), ("Lead".into(), 10f64)] - .into_iter().collect() }), ("SMGMagazine".into(), Recipe { 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() }), + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 3f64), ("Lead".into(), 1f64), + ("Steel".into(), 3f64)] .into_iter().collect() }), ("WeaponPistolEnergy".into(), Recipe { tier : MachineTier::TierTwo, time : 120f64, energy : 3000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { @@ -45091,7 +45974,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45099,7 +45982,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45107,7 +45990,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (2u32, vec![(LogicSlotType::Occupied, + .collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45115,7 +45998,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (3u32, vec![(LogicSlotType::Occupied, + .collect()), ("3".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45123,7 +46006,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (4u32, vec![(LogicSlotType::Occupied, + .collect()), ("4".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45131,7 +46014,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (5u32, vec![(LogicSlotType::Occupied, + .collect()), ("5".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45139,7 +46022,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (6u32, vec![(LogicSlotType::Occupied, + .collect()), ("6".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45147,7 +46030,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (7u32, vec![(LogicSlotType::Occupied, + .collect()), ("7".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45155,7 +46038,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (8u32, vec![(LogicSlotType::Occupied, + .collect()), ("8".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45163,7 +46046,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (9u32, vec![(LogicSlotType::Occupied, + .collect()), ("9".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45171,7 +46054,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (10u32, vec![(LogicSlotType::Occupied, + .collect()), ("10".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45179,7 +46062,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (11u32, vec![(LogicSlotType::Occupied, + .collect()), ("11".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45187,7 +46070,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (12u32, vec![(LogicSlotType::Occupied, + .collect()), ("12".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45195,7 +46078,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (13u32, vec![(LogicSlotType::Occupied, + .collect()), ("13".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45203,7 +46086,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (14u32, vec![(LogicSlotType::Occupied, + .collect()), ("14".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45271,7 +46154,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45279,7 +46162,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45339,7 +46222,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45347,7 +46230,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45355,7 +46238,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (2u32, vec![(LogicSlotType::Occupied, + .collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45363,7 +46246,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (3u32, vec![(LogicSlotType::Occupied, + .collect()), ("3".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45371,7 +46254,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (4u32, vec![(LogicSlotType::Occupied, + .collect()), ("4".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45379,7 +46262,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (5u32, vec![(LogicSlotType::Occupied, + .collect()), ("5".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45387,7 +46270,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (6u32, vec![(LogicSlotType::Occupied, + .collect()), ("6".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45395,7 +46278,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (7u32, vec![(LogicSlotType::Occupied, + .collect()), ("7".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45403,7 +46286,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (8u32, vec![(LogicSlotType::Occupied, + .collect()), ("8".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45411,7 +46294,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (9u32, vec![(LogicSlotType::Occupied, + .collect()), ("9".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45656,7 +46539,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab: PrefabInfo { prefab_name: "StructureSingleBed".into(), prefab_hash: -492611i32, - desc: "Description coming.".into(), + desc: "".into(), name: "Single Bed".into(), }, structure: StructureInfo { small_grid: true }, @@ -45664,7 +46547,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45722,7 +46605,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45796,7 +46679,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] + logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -45816,8 +46699,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Safe".into()), (1u32, "Unsafe".into()), (2u32, - "Unpowered".into()) + ("0".into(), "Safe".into()), ("1".into(), "Unsafe".into()), ("2" + .into(), "Unpowered".into()) ] .into_iter() .collect(), @@ -45868,7 +46751,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] + logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -45888,8 +46771,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Safe".into()), (1u32, "Unsafe".into()), (2u32, - "Unpowered".into()) + ("0".into(), "Safe".into()), ("1".into(), "Unsafe".into()), ("2" + .into(), "Unpowered".into()) ] .into_iter() .collect(), @@ -45940,7 +46823,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] + logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -45960,8 +46843,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Safe".into()), (1u32, "Unsafe".into()), (2u32, - "Unpowered".into()) + ("0".into(), "Safe".into()), ("1".into(), "Unsafe".into()), ("2" + .into(), "Unpowered".into()) ] .into_iter() .collect(), @@ -46009,7 +46892,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] + logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -46208,7 +47091,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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 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." + 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(), }, @@ -46793,7 +47676,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -46816,7 +47699,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Not Generating".into()), (1u32, "Generating".into())] + vec![ + ("0".into(), "Not Generating".into()), ("1".into(), "Generating" + .into()) + ] .into_iter() .collect(), ), @@ -46847,7 +47733,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_reagents: false, }, consumer_info: ConsumerInfo { - consumed_resouces: vec![ + consumed_resources: vec![ "ItemCharcoal".into(), "ItemCoalOre".into(), "ItemSolidFuel".into() ] .into_iter() @@ -46873,7 +47759,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -46881,7 +47767,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -46889,7 +47775,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (2u32, vec![(LogicSlotType::Occupied, + .collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -46897,7 +47783,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (3u32, vec![(LogicSlotType::Occupied, + .collect()), ("3".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -46925,8 +47811,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "Split".into()), (1u32, "Filter".into()), (2u32, "Logic" - .into()) + ("0".into(), "Split".into()), ("1".into(), "Filter".into()), ("2" + .into(), "Logic".into()) ] .into_iter() .collect(), @@ -46982,7 +47868,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -46990,7 +47876,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -46998,7 +47884,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (2u32, vec![(LogicSlotType::Occupied, + .collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47027,7 +47913,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Automatic".into()), (1u32, "Logic".into())] + vec![("0".into(), "Automatic".into()), ("1".into(), "Logic".into())] .into_iter() .collect(), ), @@ -47079,7 +47965,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47087,7 +47973,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47095,7 +47981,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (2u32, vec![(LogicSlotType::Occupied, + .collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47124,7 +48010,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Automatic".into()), (1u32, "Logic".into())] + vec![("0".into(), "Automatic".into()), ("1".into(), "Logic".into())] .into_iter() .collect(), ), @@ -47332,7 +48218,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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." + 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(), }, @@ -47343,7 +48229,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] + logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -47428,7 +48314,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47436,7 +48322,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47444,7 +48330,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (2u32, vec![(LogicSlotType::Occupied, + .collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47452,7 +48338,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (3u32, vec![(LogicSlotType::Occupied, + .collect()), ("3".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47460,7 +48346,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (4u32, vec![(LogicSlotType::Occupied, + .collect()), ("4".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47468,7 +48354,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (5u32, vec![(LogicSlotType::Occupied, + .collect()), ("5".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47476,7 +48362,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (6u32, vec![(LogicSlotType::Occupied, + .collect()), ("6".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47484,7 +48370,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (7u32, vec![(LogicSlotType::Occupied, + .collect()), ("7".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47492,7 +48378,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (8u32, vec![(LogicSlotType::Occupied, + .collect()), ("8".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47500,7 +48386,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (9u32, vec![(LogicSlotType::Occupied, + .collect()), ("9".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47508,7 +48394,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (10u32, vec![(LogicSlotType::Occupied, + .collect()), ("10".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47516,7 +48402,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (11u32, vec![(LogicSlotType::Occupied, + .collect()), ("11".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47524,7 +48410,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (12u32, vec![(LogicSlotType::Occupied, + .collect()), ("12".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47532,7 +48418,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (13u32, vec![(LogicSlotType::Occupied, + .collect()), ("13".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47540,7 +48426,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (14u32, vec![(LogicSlotType::Occupied, + .collect()), ("14".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47548,7 +48434,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (15u32, vec![(LogicSlotType::Occupied, + .collect()), ("15".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47556,7 +48442,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (16u32, vec![(LogicSlotType::Occupied, + .collect()), ("16".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47564,7 +48450,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (17u32, vec![(LogicSlotType::Occupied, + .collect()), ("17".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47572,7 +48458,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (18u32, vec![(LogicSlotType::Occupied, + .collect()), ("18".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47580,7 +48466,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (19u32, vec![(LogicSlotType::Occupied, + .collect()), ("19".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47588,7 +48474,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (20u32, vec![(LogicSlotType::Occupied, + .collect()), ("20".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47596,7 +48482,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (21u32, vec![(LogicSlotType::Occupied, + .collect()), ("21".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47604,7 +48490,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (22u32, vec![(LogicSlotType::Occupied, + .collect()), ("22".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47612,7 +48498,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (23u32, vec![(LogicSlotType::Occupied, + .collect()), ("23".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47620,7 +48506,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (24u32, vec![(LogicSlotType::Occupied, + .collect()), ("24".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47628,7 +48514,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (25u32, vec![(LogicSlotType::Occupied, + .collect()), ("25".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47636,7 +48522,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (26u32, vec![(LogicSlotType::Occupied, + .collect()), ("26".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47644,7 +48530,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (27u32, vec![(LogicSlotType::Occupied, + .collect()), ("27".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47652,7 +48538,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (28u32, vec![(LogicSlotType::Occupied, + .collect()), ("28".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47660,7 +48546,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (29u32, vec![(LogicSlotType::Occupied, + .collect()), ("29".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47741,7 +48627,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -47755,7 +48641,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::ReadWrite), (LogicSlotType::Lock, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, - MemoryAccess::Read)] .into_iter().collect()), (1u32, + MemoryAccess::Read)] .into_iter().collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -47770,7 +48656,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (2u32, vec![(LogicSlotType::Occupied, + .collect()), ("2".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -48343,8 +49229,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()) ] .into_iter() .collect(), @@ -48397,7 +49283,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< has_reagents: true, }, consumer_info: ConsumerInfo { - consumed_resouces: vec![ + consumed_resources: vec![ "ItemAstroloyIngot".into(), "ItemConstantanIngot".into(), "ItemCopperIngot".into(), "ItemElectrumIngot".into(), "ItemGoldIngot" .into(), "ItemHastelloyIngot".into(), "ItemInconelIngot".into(), @@ -48640,68 +49526,76 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< : 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() }), - ("ItemFlagSmall".into(), Recipe { tier : MachineTier::TierOne, time : - 1f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop - : 80000f64, is_valid : false }, pressure : RecipeRange { start : + ("ItemExplosive".into(), Recipe { 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 : 1i64, - reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }), - ("ItemFlashlight".into(), Recipe { tier : MachineTier::TierOne, time - : 15f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Electrum".into(), 1f64), ("Silicon".into(), 7f64), + ("Solder".into(), 2f64)] .into_iter().collect() }), ("ItemFlagSmall" + .into(), Recipe { 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() }), ("ItemFlashlight".into(), + Recipe { 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() }), + ("ItemGlasses".into(), Recipe { 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![("Copper".into(), 2f64), ("Gold".into(), 2f64)] - .into_iter().collect() }), ("ItemGlasses".into(), Recipe { tier : - MachineTier::TierOne, time : 20f64, energy : 250f64, temperature : + reagents : vec![("Iron".into(), 15f64), ("Silicon".into(), 10f64)] + .into_iter().collect() }), ("ItemHardBackpack".into(), Recipe { 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 : 2i64, reagents : vec![("Iron".into(), 15f64), - ("Silicon".into(), 10f64)] .into_iter().collect() }), - ("ItemHardBackpack".into(), Recipe { 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() }), - ("ItemHardJetpack".into(), Recipe { 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() }), ("ItemHardMiningBackPack".into(), Recipe { tier : - MachineTier::TierOne, time : 10f64, energy : 1000f64, temperature : + count_types : 3i64, reagents : vec![("Astroloy".into(), 5f64), + ("Steel".into(), 15f64), ("Stellite".into(), 5f64)] .into_iter() + .collect() }), ("ItemHardJetpack".into(), Recipe { 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 : 2i64, reagents : vec![("Invar".into(), 1f64), ("Steel" - .into(), 6f64)] .into_iter().collect() }), ("ItemHardSuit".into(), - Recipe { 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() }), ("ItemHardsuitHelmet".into(), Recipe { - 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() }), ("ItemIgniter".into(), Recipe { tier : + count_types : 4i64, reagents : vec![("Astroloy".into(), 8f64), + ("Steel".into(), 20f64), ("Stellite".into(), 8f64), ("Waspaloy" + .into(), 8f64)] .into_iter().collect() }), ("ItemHardMiningBackPack" + .into(), Recipe { 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() }), ("ItemHardSuit".into(), Recipe { 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() }), ("ItemHardsuitHelmet".into(), Recipe { 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() }), ("ItemIgniter".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : @@ -48837,22 +49731,30 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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() }), ("ItemMiningDrill".into(), Recipe { tier : - MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + .into_iter().collect() }), ("ItemMiningCharge".into(), Recipe { 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(), 2f64), ("Iron" - .into(), 3f64)] .into_iter().collect() }), ("ItemMiningDrillHeavy" - .into(), Recipe { 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() }), + count_types : 3i64, reagents : vec![("Gold".into(), 1f64), ("Iron" + .into(), 1f64), ("Silicon".into(), 5f64)] .into_iter().collect() }), + ("ItemMiningDrill".into(), Recipe { 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() }), ("ItemMiningDrillHeavy".into(), Recipe { + 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() }), ("ItemMiningDrillPneumatic".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 2000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, @@ -48892,15 +49794,15 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron".into(), 5f64)] .into_iter() .collect() }), ("ItemRemoteDetonator".into(), Recipe { tier : - MachineTier::TierOne, time : 4.5f64, energy : 500f64, temperature : + 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 : 2i64, reagents : vec![("Gold".into(), 1f64), ("Iron" - .into(), 3f64)] .into_iter().collect() }), - ("ItemReusableFireExtinguisher".into(), Recipe { tier : - MachineTier::TierOne, time : 20f64, energy : 1000f64, temperature : + count_types : 3i64, reagents : vec![("Copper".into(), 5f64), + ("Solder".into(), 5f64), ("Steel".into(), 5f64)] .into_iter() + .collect() }), ("ItemReusableFireExtinguisher".into(), Recipe { 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, @@ -49941,7 +50843,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Right".into()), (1u32, "Left".into())] + vec![("0".into(), "Right".into()), ("1".into(), "Left".into())] .into_iter() .collect(), ), @@ -49988,7 +50890,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -49996,7 +50898,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), (1u32, vec![(LogicSlotType::Occupied, + .collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -50023,7 +50925,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Automatic".into()), (1u32, "Logic".into())] + vec![("0".into(), "Automatic".into()), ("1".into(), "Logic".into())] .into_iter() .collect(), ), @@ -50114,7 +51016,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< prefab_name: "StructureValve".into(), prefab_hash: -692036078i32, desc: "".into(), - name: "Valve".into(), + name: "Valve (Gas)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, @@ -50172,68 +51074,82 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() - .collect()), (2u32, vec![] .into_iter().collect()), (3u32, vec![] - .into_iter().collect()), (4u32, vec![] .into_iter().collect()), - (5u32, vec![] .into_iter().collect()), (6u32, vec![] .into_iter() - .collect()), (7u32, vec![] .into_iter().collect()), (8u32, vec![] - .into_iter().collect()), (9u32, vec![] .into_iter().collect()), - (10u32, vec![] .into_iter().collect()), (11u32, vec![] .into_iter() - .collect()), (12u32, vec![] .into_iter().collect()), (13u32, vec![] - .into_iter().collect()), (14u32, vec![] .into_iter().collect()), - (15u32, vec![] .into_iter().collect()), (16u32, vec![] .into_iter() - .collect()), (17u32, vec![] .into_iter().collect()), (18u32, vec![] - .into_iter().collect()), (19u32, vec![] .into_iter().collect()), - (20u32, vec![] .into_iter().collect()), (21u32, vec![] .into_iter() - .collect()), (22u32, vec![] .into_iter().collect()), (23u32, vec![] - .into_iter().collect()), (24u32, vec![] .into_iter().collect()), - (25u32, vec![] .into_iter().collect()), (26u32, vec![] .into_iter() - .collect()), (27u32, vec![] .into_iter().collect()), (28u32, vec![] - .into_iter().collect()), (29u32, vec![] .into_iter().collect()), - (30u32, vec![] .into_iter().collect()), (31u32, vec![] .into_iter() - .collect()), (32u32, vec![] .into_iter().collect()), (33u32, vec![] - .into_iter().collect()), (34u32, vec![] .into_iter().collect()), - (35u32, vec![] .into_iter().collect()), (36u32, vec![] .into_iter() - .collect()), (37u32, vec![] .into_iter().collect()), (38u32, vec![] - .into_iter().collect()), (39u32, vec![] .into_iter().collect()), - (40u32, vec![] .into_iter().collect()), (41u32, vec![] .into_iter() - .collect()), (42u32, vec![] .into_iter().collect()), (43u32, vec![] - .into_iter().collect()), (44u32, vec![] .into_iter().collect()), - (45u32, vec![] .into_iter().collect()), (46u32, vec![] .into_iter() - .collect()), (47u32, vec![] .into_iter().collect()), (48u32, vec![] - .into_iter().collect()), (49u32, vec![] .into_iter().collect()), - (50u32, vec![] .into_iter().collect()), (51u32, vec![] .into_iter() - .collect()), (52u32, vec![] .into_iter().collect()), (53u32, vec![] - .into_iter().collect()), (54u32, vec![] .into_iter().collect()), - (55u32, vec![] .into_iter().collect()), (56u32, vec![] .into_iter() - .collect()), (57u32, vec![] .into_iter().collect()), (58u32, vec![] - .into_iter().collect()), (59u32, vec![] .into_iter().collect()), - (60u32, vec![] .into_iter().collect()), (61u32, vec![] .into_iter() - .collect()), (62u32, vec![] .into_iter().collect()), (63u32, vec![] - .into_iter().collect()), (64u32, vec![] .into_iter().collect()), - (65u32, vec![] .into_iter().collect()), (66u32, vec![] .into_iter() - .collect()), (67u32, vec![] .into_iter().collect()), (68u32, vec![] - .into_iter().collect()), (69u32, vec![] .into_iter().collect()), - (70u32, vec![] .into_iter().collect()), (71u32, vec![] .into_iter() - .collect()), (72u32, vec![] .into_iter().collect()), (73u32, vec![] - .into_iter().collect()), (74u32, vec![] .into_iter().collect()), - (75u32, vec![] .into_iter().collect()), (76u32, vec![] .into_iter() - .collect()), (77u32, vec![] .into_iter().collect()), (78u32, vec![] - .into_iter().collect()), (79u32, vec![] .into_iter().collect()), - (80u32, vec![] .into_iter().collect()), (81u32, vec![] .into_iter() - .collect()), (82u32, vec![] .into_iter().collect()), (83u32, vec![] - .into_iter().collect()), (84u32, vec![] .into_iter().collect()), - (85u32, vec![] .into_iter().collect()), (86u32, vec![] .into_iter() - .collect()), (87u32, vec![] .into_iter().collect()), (88u32, vec![] - .into_iter().collect()), (89u32, vec![] .into_iter().collect()), - (90u32, vec![] .into_iter().collect()), (91u32, vec![] .into_iter() - .collect()), (92u32, vec![] .into_iter().collect()), (93u32, vec![] - .into_iter().collect()), (94u32, vec![] .into_iter().collect()), - (95u32, vec![] .into_iter().collect()), (96u32, vec![] .into_iter() - .collect()), (97u32, vec![] .into_iter().collect()), (98u32, vec![] - .into_iter().collect()), (99u32, vec![] .into_iter().collect()), - (100u32, vec![] .into_iter().collect()), (101u32, vec![] .into_iter() - .collect()) + ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] + .into_iter().collect()), ("2".into(), vec![] .into_iter().collect()), + ("3".into(), vec![] .into_iter().collect()), ("4".into(), vec![] + .into_iter().collect()), ("5".into(), vec![] .into_iter().collect()), + ("6".into(), vec![] .into_iter().collect()), ("7".into(), vec![] + .into_iter().collect()), ("8".into(), vec![] .into_iter().collect()), + ("9".into(), vec![] .into_iter().collect()), ("10".into(), vec![] + .into_iter().collect()), ("11".into(), vec![] .into_iter() + .collect()), ("12".into(), vec![] .into_iter().collect()), ("13" + .into(), vec![] .into_iter().collect()), ("14".into(), vec![] + .into_iter().collect()), ("15".into(), vec![] .into_iter() + .collect()), ("16".into(), vec![] .into_iter().collect()), ("17" + .into(), vec![] .into_iter().collect()), ("18".into(), vec![] + .into_iter().collect()), ("19".into(), vec![] .into_iter() + .collect()), ("20".into(), vec![] .into_iter().collect()), ("21" + .into(), vec![] .into_iter().collect()), ("22".into(), vec![] + .into_iter().collect()), ("23".into(), vec![] .into_iter() + .collect()), ("24".into(), vec![] .into_iter().collect()), ("25" + .into(), vec![] .into_iter().collect()), ("26".into(), vec![] + .into_iter().collect()), ("27".into(), vec![] .into_iter() + .collect()), ("28".into(), vec![] .into_iter().collect()), ("29" + .into(), vec![] .into_iter().collect()), ("30".into(), vec![] + .into_iter().collect()), ("31".into(), vec![] .into_iter() + .collect()), ("32".into(), vec![] .into_iter().collect()), ("33" + .into(), vec![] .into_iter().collect()), ("34".into(), vec![] + .into_iter().collect()), ("35".into(), vec![] .into_iter() + .collect()), ("36".into(), vec![] .into_iter().collect()), ("37" + .into(), vec![] .into_iter().collect()), ("38".into(), vec![] + .into_iter().collect()), ("39".into(), vec![] .into_iter() + .collect()), ("40".into(), vec![] .into_iter().collect()), ("41" + .into(), vec![] .into_iter().collect()), ("42".into(), vec![] + .into_iter().collect()), ("43".into(), vec![] .into_iter() + .collect()), ("44".into(), vec![] .into_iter().collect()), ("45" + .into(), vec![] .into_iter().collect()), ("46".into(), vec![] + .into_iter().collect()), ("47".into(), vec![] .into_iter() + .collect()), ("48".into(), vec![] .into_iter().collect()), ("49" + .into(), vec![] .into_iter().collect()), ("50".into(), vec![] + .into_iter().collect()), ("51".into(), vec![] .into_iter() + .collect()), ("52".into(), vec![] .into_iter().collect()), ("53" + .into(), vec![] .into_iter().collect()), ("54".into(), vec![] + .into_iter().collect()), ("55".into(), vec![] .into_iter() + .collect()), ("56".into(), vec![] .into_iter().collect()), ("57" + .into(), vec![] .into_iter().collect()), ("58".into(), vec![] + .into_iter().collect()), ("59".into(), vec![] .into_iter() + .collect()), ("60".into(), vec![] .into_iter().collect()), ("61" + .into(), vec![] .into_iter().collect()), ("62".into(), vec![] + .into_iter().collect()), ("63".into(), vec![] .into_iter() + .collect()), ("64".into(), vec![] .into_iter().collect()), ("65" + .into(), vec![] .into_iter().collect()), ("66".into(), vec![] + .into_iter().collect()), ("67".into(), vec![] .into_iter() + .collect()), ("68".into(), vec![] .into_iter().collect()), ("69" + .into(), vec![] .into_iter().collect()), ("70".into(), vec![] + .into_iter().collect()), ("71".into(), vec![] .into_iter() + .collect()), ("72".into(), vec![] .into_iter().collect()), ("73" + .into(), vec![] .into_iter().collect()), ("74".into(), vec![] + .into_iter().collect()), ("75".into(), vec![] .into_iter() + .collect()), ("76".into(), vec![] .into_iter().collect()), ("77" + .into(), vec![] .into_iter().collect()), ("78".into(), vec![] + .into_iter().collect()), ("79".into(), vec![] .into_iter() + .collect()), ("80".into(), vec![] .into_iter().collect()), ("81" + .into(), vec![] .into_iter().collect()), ("82".into(), vec![] + .into_iter().collect()), ("83".into(), vec![] .into_iter() + .collect()), ("84".into(), vec![] .into_iter().collect()), ("85" + .into(), vec![] .into_iter().collect()), ("86".into(), vec![] + .into_iter().collect()), ("87".into(), vec![] .into_iter() + .collect()), ("88".into(), vec![] .into_iter().collect()), ("89" + .into(), vec![] .into_iter().collect()), ("90".into(), vec![] + .into_iter().collect()), ("91".into(), vec![] .into_iter() + .collect()), ("92".into(), vec![] .into_iter().collect()), ("93" + .into(), vec![] .into_iter().collect()), ("94".into(), vec![] + .into_iter().collect()), ("95".into(), vec![] .into_iter() + .collect()), ("96".into(), vec![] .into_iter().collect()), ("97" + .into(), vec![] .into_iter().collect()), ("98".into(), vec![] + .into_iter().collect()), ("99".into(), vec![] .into_iter() + .collect()), ("100".into(), vec![] .into_iter().collect()), ("101" + .into(), vec![] .into_iter().collect()) ] .into_iter() .collect(), @@ -50542,7 +51458,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -50745,7 +51661,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -50948,7 +51864,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -51358,7 +52274,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -51370,7 +52286,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, - MemoryAccess::Read)] .into_iter().collect()), (1u32, + MemoryAccess::Read)] .into_iter().collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -51440,7 +52356,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -51452,7 +52368,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, - MemoryAccess::Read)] .into_iter().collect()), (1u32, + MemoryAccess::Read)] .into_iter().collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -51522,7 +52438,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -51534,7 +52450,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, - MemoryAccess::Read)] .into_iter().collect()), (1u32, + MemoryAccess::Read)] .into_iter().collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -51607,7 +52523,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -51619,7 +52535,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, - MemoryAccess::Read)] .into_iter().collect()), (1u32, + MemoryAccess::Read)] .into_iter().collect()), ("1".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -51776,7 +52692,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< ); map.insert( 887383294i32, - StructureLogicDeviceTemplate { + StructureLogicDeviceConsumerTemplate { prefab: PrefabInfo { prefab_name: "StructureWaterPurifier".into(), prefab_hash: 887383294i32, @@ -51788,7 +52704,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] + logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -51832,6 +52748,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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(), ); @@ -51849,7 +52770,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -51931,8 +52852,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - (0u32, "NoStorm".into()), (1u32, "StormIncoming".into()), (2u32, - "InStorm".into()) + ("0".into(), "NoStorm".into()), ("1".into(), "StormIncoming" + .into()), ("2".into(), "InStorm".into()) ] .into_iter() .collect(), @@ -52012,64 +52933,6 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< } .into(), ); - map.insert( - 2056377335i32, - StructureLogicDeviceTemplate { - prefab: PrefabInfo { - prefab_name: "StructureWindowShutter".into(), - prefab_hash: 2056377335i32, - 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." - .into(), - name: "Window Shutter".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::Error, MemoryAccess::Read), (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![(0u32, "Operate".into()), (1u32, "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: false, - has_mode_state: true, - has_on_off_state: true, - has_open_state: true, - has_reagents: false, - }, - } - .into(), - ); map.insert( 1700018136i32, ItemTemplate { @@ -52233,7 +53096,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -52284,7 +53147,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -52306,7 +53169,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Stun".into()), (1u32, "Kill".into())] + vec![("0".into(), "Stun".into()), ("1".into(), "Kill".into())] .into_iter() .collect(), ), @@ -52342,7 +53205,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -52364,7 +53227,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![(0u32, "Stun".into()), (1u32, "Kill".into())] + vec![("0".into(), "Stun".into()), ("1".into(), "Kill".into())] .into_iter() .collect(), ), diff --git a/stationeers_data/src/enums/basic.rs b/stationeers_data/src/enums/basic.rs index 46d5f1e..6c811ce 100644 --- a/stationeers_data/src/enums/basic.rs +++ b/stationeers_data/src/enums/basic.rs @@ -583,9 +583,9 @@ pub enum ReEntryProfile { #[strum(props(docs = "", value = "0"))] #[default] None = 0u8, - #[strum(serialize = "Optimal")] + #[strum(serialize = "Low")] #[strum(props(docs = "", value = "1"))] - Optimal = 1u8, + Low = 1u8, #[strum(serialize = "Medium")] #[strum(props(docs = "", value = "2"))] Medium = 2u8, @@ -874,6 +874,12 @@ pub enum Class { #[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; @@ -1559,6 +1565,7 @@ impl std::str::FromStr for BasicEnum { "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)), @@ -2103,10 +2110,10 @@ impl std::str::FromStr for BasicEnum { 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)), - "reentryprofile.optimal" => Ok(Self::ReEntryProfile(ReEntryProfile::Optimal)), "robotmode.follow" => Ok(Self::RobotMode(RobotMode::Follow)), "robotmode.movetotarget" => Ok(Self::RobotMode(RobotMode::MoveToTarget)), "robotmode.none" => Ok(Self::RobotMode(RobotMode::None)), @@ -2130,6 +2137,7 @@ impl std::str::FromStr for BasicEnum { "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)), @@ -2150,6 +2158,7 @@ impl std::str::FromStr for BasicEnum { "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" => { diff --git a/stationeers_data/src/enums/prefabs.rs b/stationeers_data/src/enums/prefabs.rs index d3ed521..f13adc1 100644 --- a/stationeers_data/src/enums/prefabs.rs +++ b/stationeers_data/src/enums/prefabs.rs @@ -47,11 +47,14 @@ pub enum StationpediaPrefab { #[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 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.", + 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, @@ -62,7 +65,7 @@ pub enum StationpediaPrefab { #[strum( props( name = "Kit (Liquid Pipe Valve)", - desc = "This kit creates a Liquid Valve.", + desc = "This kit creates a Valve (Liquid).", value = "-2126113312" ) )] @@ -189,6 +192,15 @@ pub enum StationpediaPrefab { ) )] StructureWindTurbine = -2082355173i32, + #[strum(serialize = "StructureCompositeWindowShutterController")] + #[strum( + props( + name = "Composite Window Shutter Controller", + desc = "", + value = "-2078371660" + ) + )] + StructureCompositeWindowShutterController = -2078371660i32, #[strum(serialize = "StructureInsulatedPipeTJunction")] #[strum( props( @@ -455,7 +467,7 @@ pub enum StationpediaPrefab { )] PortableComposter = -1958705204i32, #[strum(serialize = "CartridgeGPS")] - #[strum(props(name = "GPS", desc = "", value = "-1957063345"))] + #[strum(props(name = "Cartridge (GPS)", desc = "", value = "-1957063345"))] CartridgeGps = -1957063345i32, #[strum(serialize = "StructureConsoleLED1x3")] #[strum( @@ -545,7 +557,7 @@ pub enum StationpediaPrefab { #[strum( props( name = "Sorter Motherboard", - 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.", + 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" ) )] @@ -725,11 +737,20 @@ pub enum StationpediaPrefab { #[strum(props(name = "Kit (Wall)", desc = "", value = "-1826855889"))] ItemKitWall = -1826855889i32, #[strum(serialize = "ItemWreckageAirConditioner1")] - #[strum(props(name = "Wreckage Air Conditioner", desc = "", value = "-1826023284"))] + #[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( @@ -822,6 +843,9 @@ pub enum StationpediaPrefab { ) )] LandingpadLiquidConnectorOutwardPiece = -1788929869i32, + #[strum(serialize = "StructureRoboticArmRailStraight")] + #[strum(props(name = "Linear Rail Straight", desc = "", value = "-1785844184"))] + StructureRoboticArmRailStraight = -1785844184i32, #[strum(serialize = "StructurePipeCorner")] #[strum( props( @@ -846,7 +870,7 @@ pub enum StationpediaPrefab { #[strum(serialize = "CartridgeOreScanner")] #[strum( props( - name = "Ore Scanner", + name = "Cartridge (Ore Scanner)", desc = "When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet.", value = "-1768732546" ) @@ -1064,7 +1088,7 @@ pub enum StationpediaPrefab { #[strum(props(name = "Appliance Desk Lamp Left", desc = "", value = "-1683849799"))] ApplianceDeskLampLeft = -1683849799i32, #[strum(serialize = "ItemWreckageWallCooler1")] - #[strum(props(name = "Wreckage Wall Cooler", desc = "", value = "-1682930158"))] + #[strum(props(name = "Wreckage", desc = "", value = "-1682930158"))] ItemWreckageWallCooler1 = -1682930158i32, #[strum(serialize = "StructureGasUmbilicalFemale")] #[strum(props(name = "Umbilical Socket (Gas)", desc = "", value = "-1680477930"))] @@ -1121,9 +1145,7 @@ pub enum StationpediaPrefab { #[strum(props(name = "Astroloy Sheets", desc = "", value = "-1662476145"))] ItemAstroloySheets = -1662476145i32, #[strum(serialize = "ItemWreckageTurbineGenerator1")] - #[strum( - props(name = "Wreckage Turbine Generator", desc = "", value = "-1662394403") - )] + #[strum(props(name = "Wreckage", desc = "", value = "-1662394403"))] ItemWreckageTurbineGenerator1 = -1662394403i32, #[strum(serialize = "ItemMiningBackPack")] #[strum(props(name = "Mining Backpack", desc = "", value = "-1650383245"))] @@ -1248,7 +1270,7 @@ pub enum StationpediaPrefab { #[strum(serialize = "CartridgeAtmosAnalyser")] #[strum( props( - name = "Atmos Analyzer", + 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" ) @@ -1391,7 +1413,7 @@ pub enum StationpediaPrefab { #[strum(props(name = "Sleeper", desc = "", value = "-1467449329"))] StructureSleeper = -1467449329i32, #[strum(serialize = "CartridgeElectronicReader")] - #[strum(props(name = "eReader", desc = "", value = "-1462180176"))] + #[strum(props(name = "Cartridge (eReader)", desc = "", value = "-1462180176"))] CartridgeElectronicReader = -1462180176i32, #[strum(serialize = "StructurePictureFrameThickMountPortraitLarge")] #[strum( @@ -1622,6 +1644,9 @@ pub enum StationpediaPrefab { #[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, @@ -1798,6 +1823,9 @@ pub enum StationpediaPrefab { ) )] StructureLargeDirectHeatExchangeGastoGas = -1230658883i32, + #[strum(serialize = "ItemKitRoboticArm")] + #[strum(props(name = "Kit (LArRE)", desc = "", value = "-1228287398"))] + ItemKitRoboticArm = -1228287398i32, #[strum(serialize = "ItemSensorProcessingUnitOreScanner")] #[strum( props( @@ -1823,13 +1851,7 @@ pub enum StationpediaPrefab { #[strum(props(name = "Landingpad Liquid Input", desc = "", value = "-1216167727"))] LandingpadLiquidConnectorInwardPiece = -1216167727i32, #[strum(serialize = "ItemWreckageStructureWeatherStation008")] - #[strum( - props( - name = "Wreckage Structure Weather Station", - desc = "", - value = "-1214467897" - ) - )] + #[strum(props(name = "Wreckage", desc = "", value = "-1214467897"))] ItemWreckageStructureWeatherStation008 = -1214467897i32, #[strum(serialize = "ItemPlantThermogenic_Creative")] #[strum( @@ -2025,7 +2047,7 @@ pub enum StationpediaPrefab { #[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 ...", + 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" ) )] @@ -2057,7 +2079,7 @@ pub enum StationpediaPrefab { #[strum(serialize = "CartridgeMedicalAnalyser")] #[strum( props( - name = "Medical Analyzer", + 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" ) @@ -2076,13 +2098,7 @@ pub enum StationpediaPrefab { #[strum(props(name = "Cake", desc = "", value = "-1108244510"))] ItemPlainCake = -1108244510i32, #[strum(serialize = "ItemWreckageStructureWeatherStation004")] - #[strum( - props( - name = "Wreckage Structure Weather Station", - desc = "", - value = "-1104478996" - ) - )] + #[strum(props(name = "Wreckage", desc = "", value = "-1104478996"))] ItemWreckageStructureWeatherStation004 = -1104478996i32, #[strum(serialize = "StructureCableFuse1k")] #[strum(props(name = "Fuse (1kW)", desc = "", value = "-1103727120"))] @@ -2301,6 +2317,9 @@ pub enum StationpediaPrefab { #[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( @@ -2337,7 +2356,7 @@ pub enum StationpediaPrefab { )] ItemKitRocketTransformerSmall = -932335800i32, #[strum(serialize = "CartridgeConfiguration")] - #[strum(props(name = "Configuration", desc = "", value = "-932136011"))] + #[strum(props(name = "Cartridge (Configuration)", desc = "", value = "-932136011"))] CartridgeConfiguration = -932136011i32, #[strum(serialize = "ItemSilverIngot")] #[strum(props(name = "Ingot (Silver)", desc = "", value = "-929742000"))] @@ -2353,13 +2372,7 @@ pub enum StationpediaPrefab { )] StructureSmallTableRectangleSingle = -924678969i32, #[strum(serialize = "ItemWreckageStructureWeatherStation005")] - #[strum( - props( - name = "Wreckage Structure Weather Station", - desc = "", - value = "-919745414" - ) - )] + #[strum(props(name = "Wreckage", desc = "", value = "-919745414"))] ItemWreckageStructureWeatherStation005 = -919745414i32, #[strum(serialize = "ItemSilverOre")] #[strum( @@ -2465,7 +2478,7 @@ pub enum StationpediaPrefab { #[strum(serialize = "StructureChuteBin")] #[strum( props( - name = "Chute Bin", + 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" ) @@ -2493,13 +2506,7 @@ pub enum StationpediaPrefab { )] ItemFlashlight = -838472102i32, #[strum(serialize = "ItemWreckageStructureWeatherStation001")] - #[strum( - props( - name = "Wreckage Structure Weather Station", - desc = "", - value = "-834664349" - ) - )] + #[strum(props(name = "Wreckage", desc = "", value = "-834664349"))] ItemWreckageStructureWeatherStation001 = -834664349i32, #[strum(serialize = "ItemBiomass")] #[strum( @@ -2650,15 +2657,6 @@ pub enum StationpediaPrefab { ) )] StructurePowerConnector = -782951720i32, - #[strum(serialize = "StructureLiquidPipeOneWayValve")] - #[strum( - props( - name = "One Way Valve (Liquid)", - 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..", - value = "-782453061" - ) - )] - StructureLiquidPipeOneWayValve = -782453061i32, #[strum(serialize = "StructureWallLargePanelArrow")] #[strum(props(name = "Wall (Large Panel Arrow)", desc = "", value = "-776581573"))] StructureWallLargePanelArrow = -776581573i32, @@ -2695,6 +2693,9 @@ pub enum StationpediaPrefab { #[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( @@ -2791,7 +2792,7 @@ pub enum StationpediaPrefab { )] StructureLogicTransmitter = -693235651i32, #[strum(serialize = "StructureValve")] - #[strum(props(name = "Valve", desc = "", value = "-692036078"))] + #[strum(props(name = "Valve (Gas)", desc = "", value = "-692036078"))] StructureValve = -692036078i32, #[strum(serialize = "StructureCompositeWindowIron")] #[strum(props(name = "Iron Window", desc = "", value = "-688284639"))] @@ -2919,8 +2920,8 @@ pub enum StationpediaPrefab { #[strum(serialize = "StructureComputer")] #[strum( props( - name = "Computer", - 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", + name = "Computer (Modern)", + desc = "This unit operates with a wide range of motherboards.", value = "-626563514" ) )] @@ -3082,6 +3083,9 @@ pub enum StationpediaPrefab { ) )] ItemEggCarton = -524289310i32, + #[strum(serialize = "StructurePipeLiquidOneWayValveLever")] + #[strum(props(name = "One Way Valve (Liquid)", desc = "", value = "-523832822"))] + StructurePipeLiquidOneWayValveLever = -523832822i32, #[strum(serialize = "StructureWaterDigitalValve")] #[strum(props(name = "Liquid Digital Valve", desc = "", value = "-517628750"))] StructureWaterDigitalValve = -517628750i32, @@ -3127,6 +3131,9 @@ pub enum StationpediaPrefab { #[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, @@ -3190,6 +3197,9 @@ pub enum StationpediaPrefab { ) )] StructureVendingMachine = -443130773i32, + #[strum(serialize = "ItemKitLinearRail")] + #[strum(props(name = "Kit (Linear Rail)", desc = "", value = "-441759975"))] + ItemKitLinearRail = -441759975i32, #[strum(serialize = "StructurePipeHeater")] #[strum( props( @@ -3229,6 +3239,15 @@ pub enum StationpediaPrefab { ) )] 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( @@ -3238,6 +3257,9 @@ pub enum StationpediaPrefab { ) )] 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, @@ -3359,7 +3381,7 @@ pub enum StationpediaPrefab { #[strum( props( name = "Communications Motherboard", - 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.", + 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" ) )] @@ -3379,7 +3401,7 @@ pub enum StationpediaPrefab { #[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.", + 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" ) )] @@ -3415,7 +3437,7 @@ pub enum StationpediaPrefab { )] ElectronicPrinterMod = -311170652i32, #[strum(serialize = "ItemWreckageHydroponicsTray1")] - #[strum(props(name = "Wreckage Hydroponics Tray", desc = "", value = "-310178617"))] + #[strum(props(name = "Wreckage", desc = "", value = "-310178617"))] ItemWreckageHydroponicsTray1 = -310178617i32, #[strum(serialize = "ItemKitRocketCelestialTracker")] #[strum( @@ -3449,6 +3471,9 @@ pub enum StationpediaPrefab { ) )] 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, @@ -3456,7 +3481,7 @@ pub enum StationpediaPrefab { #[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.", + 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" ) )] @@ -3491,7 +3516,7 @@ pub enum StationpediaPrefab { #[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 Atmos Analyzer or Tracker, Medical Analyzer, Ore Scanner, eReader, and various other functions.", + 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" ) )] @@ -3575,7 +3600,7 @@ pub enum StationpediaPrefab { #[strum( props( name = "IC Editor Motherboard", - 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.", + 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" ) )] @@ -3707,6 +3732,9 @@ pub enum StationpediaPrefab { 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, @@ -3785,6 +3813,9 @@ pub enum StationpediaPrefab { #[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, @@ -3835,12 +3866,10 @@ pub enum StationpediaPrefab { )] ItemPureIcePollutant = -1755356i32, #[strum(serialize = "ItemWreckageLargeExtendableRadiator01")] - #[strum( - props(name = "Wreckage Large Extendable Radiator", desc = "", value = "-997763") - )] + #[strum(props(name = "Wreckage", desc = "", value = "-997763"))] ItemWreckageLargeExtendableRadiator01 = -997763i32, #[strum(serialize = "StructureSingleBed")] - #[strum(props(name = "Single Bed", desc = "Description coming.", value = "-492611"))] + #[strum(props(name = "Single Bed", desc = "", value = "-492611"))] StructureSingleBed = -492611i32, #[strum(serialize = "StructureCableCorner3HBurnt")] #[strum( @@ -3971,7 +4000,7 @@ pub enum StationpediaPrefab { #[strum(props(name = "Canister", desc = "", value = "42280099"))] ItemGasCanisterEmpty = 42280099i32, #[strum(serialize = "ItemWreckageWallCooler2")] - #[strum(props(name = "Wreckage Wall Cooler", desc = "", value = "45733800"))] + #[strum(props(name = "Wreckage", desc = "", value = "45733800"))] ItemWreckageWallCooler2 = 45733800i32, #[strum(serialize = "ItemPumpkinPie")] #[strum(props(name = "Pumpkin Pie", desc = "", value = "62768076"))] @@ -3992,13 +4021,13 @@ pub enum StationpediaPrefab { #[strum(props(name = "Kit (Docking Port)", desc = "", value = "77421200"))] ItemKitDockingPort = 77421200i32, #[strum(serialize = "CartridgeTracker")] - #[strum(props(name = "Tracker", desc = "", value = "81488783"))] + #[strum(props(name = "Cartridge (Tracker)", desc = "", value = "81488783"))] CartridgeTracker = 81488783i32, #[strum(serialize = "ToyLuna")] #[strum(props(name = "Toy Luna", desc = "", value = "94730034"))] ToyLuna = 94730034i32, #[strum(serialize = "ItemWreckageTurbineGenerator2")] - #[strum(props(name = "Wreckage Turbine Generator", desc = "", value = "98602599"))] + #[strum(props(name = "Wreckage", desc = "", value = "98602599"))] ItemWreckageTurbineGenerator2 = 98602599i32, #[strum(serialize = "StructurePowerUmbilicalFemale")] #[strum(props(name = "Umbilical Socket (Power)", desc = "", value = "101488029"))] @@ -4165,7 +4194,7 @@ pub enum StationpediaPrefab { #[strum(props(name = "Kit (Door)", desc = "", value = "168615924"))] ItemKitDoor = 168615924i32, #[strum(serialize = "ItemWreckageAirConditioner2")] - #[strum(props(name = "Wreckage Air Conditioner", desc = "", value = "169888054"))] + #[strum(props(name = "Wreckage", desc = "", value = "169888054"))] ItemWreckageAirConditioner2 = 169888054i32, #[strum(serialize = "Landingpad_GasCylinderTankPiece")] #[strum( @@ -4312,7 +4341,7 @@ pub enum StationpediaPrefab { #[strum(props(name = "Chocolate Bar", desc = "", value = "234601764"))] ItemChocolateBar = 234601764i32, #[strum(serialize = "ItemExplosive")] - #[strum(props(name = "Remote Explosive", desc = "", value = "235361649"))] + #[strum(props(name = "Demolition Charge", desc = "", value = "235361649"))] ItemExplosive = 235361649i32, #[strum(serialize = "StructureConsole")] #[strum( @@ -4326,8 +4355,8 @@ pub enum StationpediaPrefab { #[strum(serialize = "ItemPassiveVent")] #[strum( props( - name = "Passive Vent", - desc = "This kit creates a Passive Vent among other variants.", + name = "Kit (Passive Vent)", + desc = "This kit creates a Kit (Passive Vent) among other variants.", value = "238631271" ) )] @@ -4620,6 +4649,9 @@ pub enum StationpediaPrefab { ) )] StructurePressureFedLiquidEngine = 379750958i32, + #[strum(serialize = "ItemMiningPackage")] + #[strum(props(name = "Mining Supplies Package", desc = "", value = "384478267"))] + ItemMiningPackage = 384478267i32, #[strum(serialize = "ItemPureIceNitrous")] #[strum( props( @@ -4644,7 +4676,7 @@ pub enum StationpediaPrefab { )] ItemMkiiDuctTape = 388774906i32, #[strum(serialize = "ItemWreckageStructureRTG1")] - #[strum(props(name = "Wreckage Structure RTG", desc = "", value = "391453348"))] + #[strum(props(name = "Wreckage", desc = "", value = "391453348"))] ItemWreckageStructureRtg1 = 391453348i32, #[strum(serialize = "ItemPipeLabel")] #[strum( @@ -4723,7 +4755,7 @@ pub enum StationpediaPrefab { #[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 via a {Logic system.", + 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" ) )] @@ -4735,7 +4767,7 @@ pub enum StationpediaPrefab { #[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 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.", + 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" ) )] @@ -4855,7 +4887,7 @@ pub enum StationpediaPrefab { #[strum( props( name = "Logic Motherboard", - 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.", + 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" ) )] @@ -4863,6 +4895,11 @@ pub enum StationpediaPrefab { #[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, @@ -4903,13 +4940,7 @@ pub enum StationpediaPrefab { )] ItemPureIceLiquidOxygen = 541621589i32, #[strum(serialize = "ItemWreckageStructureWeatherStation003")] - #[strum( - props( - name = "Wreckage Structure Weather Station", - desc = "", - value = "542009679" - ) - )] + #[strum(props(name = "Wreckage", desc = "", value = "542009679"))] ItemWreckageStructureWeatherStation003 = 542009679i32, #[strum(serialize = "StructureInLineTankLiquid1x1")] #[strum( @@ -5056,13 +5087,7 @@ pub enum StationpediaPrefab { )] ItemRocketMiningDrillHeadHighSpeedIce = 653461728i32, #[strum(serialize = "ItemWreckageStructureWeatherStation007")] - #[strum( - props( - name = "Wreckage Structure Weather Station", - desc = "", - value = "656649558" - ) - )] + #[strum(props(name = "Wreckage", desc = "", value = "656649558"))] ItemWreckageStructureWeatherStation007 = 656649558i32, #[strum(serialize = "ItemRice")] #[strum( @@ -5092,7 +5117,9 @@ pub enum StationpediaPrefab { #[strum(props(name = "Space Ice", desc = "", value = "675686937"))] ItemSpaceIce = 675686937i32, #[strum(serialize = "ItemRemoteDetonator")] - #[strum(props(name = "Remote Detonator", desc = "", value = "678483886"))] + #[strum( + props(name = "Remote Detonator", desc = "0.Mode0\n1.Mode1", value = "678483886") + )] ItemRemoteDetonator = 678483886i32, #[strum(serialize = "ItemCocoaTree")] #[strum(props(name = "Cocoa", desc = "", value = "680051921"))] @@ -5128,9 +5155,7 @@ pub enum StationpediaPrefab { )] StructureCentrifuge = 690945935i32, #[strum(serialize = "StructureBlockBed")] - #[strum( - props(name = "Block Bed", desc = "Description coming.", value = "697908419") - )] + #[strum(props(name = "Block Bed", desc = "", value = "697908419"))] StructureBlockBed = 697908419i32, #[strum(serialize = "ItemBatteryCell")] #[strum( @@ -5221,6 +5246,15 @@ pub enum StationpediaPrefab { #[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( @@ -5249,7 +5283,7 @@ pub enum StationpediaPrefab { #[strum( props( name = "Kit (Pipe Valve)", - desc = "This kit creates a Valve.", + desc = "This kit creates a Valve (Gas).", value = "799323450" ) )] @@ -5349,6 +5383,9 @@ pub enum StationpediaPrefab { ) )] StructureCompositeCladdingAngledCornerLong = 850558385i32, + #[strum(serialize = "ItemEmergencySuppliesBox")] + #[strum(props(name = "Emergency Supplies", desc = "", value = "851103794"))] + ItemEmergencySuppliesBox = 851103794i32, #[strum(serialize = "ItemPlantEndothermic_Genepool1")] #[strum( props( @@ -5401,7 +5438,7 @@ pub enum StationpediaPrefab { )] ItemRoadFlare = 871811564i32, #[strum(serialize = "CartridgeGuide")] - #[strum(props(name = "Guide", desc = "", value = "872720793"))] + #[strum(props(name = "Cartridge (Guide)", desc = "", value = "872720793"))] CartridgeGuide = 872720793i32, #[strum(serialize = "StructureLogicSorter")] #[strum( @@ -5841,7 +5878,7 @@ pub enum StationpediaPrefab { )] LandingpadCrossPiece = 1101296153i32, #[strum(serialize = "CartridgePlantAnalyser")] - #[strum(props(name = "Cartridge Plant Analyser", desc = "", value = "1101328282"))] + #[strum(props(name = "Cartridge (Plant Analyser)", desc = "", value = "1101328282"))] CartridgePlantAnalyser = 1101328282i32, #[strum(serialize = "ItemSiliconOre")] #[strum( @@ -6053,7 +6090,7 @@ pub enum StationpediaPrefab { #[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 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", + 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" ) )] @@ -6131,6 +6168,9 @@ pub enum StationpediaPrefab { #[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( @@ -6243,13 +6283,7 @@ pub enum StationpediaPrefab { #[strum(props(name = "Graph Display", desc = "", value = "1344368806"))] CircuitboardGraphDisplay = 1344368806i32, #[strum(serialize = "ItemWreckageStructureWeatherStation006")] - #[strum( - props( - name = "Wreckage Structure Weather Station", - desc = "", - value = "1344576960" - ) - )] + #[strum(props(name = "Wreckage", desc = "", value = "1344576960"))] ItemWreckageStructureWeatherStation006 = 1344576960i32, #[strum(serialize = "ItemCookedCorn")] #[strum( @@ -6384,13 +6418,7 @@ pub enum StationpediaPrefab { #[strum(props(name = "Water Bottle Filler Bottom", desc = "", value = "1433754995"))] StructureWaterBottleFillerBottom = 1433754995i32, #[strum(serialize = "StructureLightRoundSmall")] - #[strum( - props( - name = "Light Round (Small)", - desc = "Description coming.", - value = "1436121888" - ) - )] + #[strum(props(name = "Light Round (Small)", desc = "", value = "1436121888"))] StructureLightRoundSmall = 1436121888i32, #[strum(serialize = "ItemRocketMiningDrillHeadHighSpeedMineral")] #[strum( @@ -6432,17 +6460,14 @@ pub enum StationpediaPrefab { 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 Windows)", desc = "", value = "1459985302"))] + #[strum(props(name = "Kit (Reinforced Walls)", desc = "", value = "1459985302"))] ItemKitReinforcedWindows = 1459985302i32, #[strum(serialize = "ItemWreckageStructureWeatherStation002")] - #[strum( - props( - name = "Wreckage Structure Weather Station", - desc = "", - value = "1464424921" - ) - )] + #[strum(props(name = "Wreckage", desc = "", value = "1464424921"))] ItemWreckageStructureWeatherStation002 = 1464424921i32, #[strum(serialize = "StructureHydroponicsTray")] #[strum( @@ -6477,6 +6502,12 @@ pub enum StationpediaPrefab { #[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, @@ -6496,9 +6527,7 @@ pub enum StationpediaPrefab { )] ItemSprayCanRed = 1514393921i32, #[strum(serialize = "StructureLightRound")] - #[strum( - props(name = "Light Round", desc = "Description coming.", value = "1514476632") - )] + #[strum(props(name = "Light Round", desc = "", value = "1514476632"))] StructureLightRound = 1514476632i32, #[strum(serialize = "Fertilizer")] #[strum( @@ -6590,15 +6619,9 @@ pub enum StationpediaPrefab { #[strum(serialize = "ItemHastelloyIngot")] #[strum(props(name = "Ingot (Hastelloy)", desc = "", value = "1579842814"))] ItemHastelloyIngot = 1579842814i32, - #[strum(serialize = "StructurePipeOneWayValve")] - #[strum( - props( - name = "One Way Valve (Gas)", - 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", - value = "1580412404" - ) - )] - StructurePipeOneWayValve = 1580412404i32, + #[strum(serialize = "StructureCompositeWindowShutter")] + #[strum(props(name = "Composite Window Shutter", desc = "", value = "1580592998"))] + StructureCompositeWindowShutter = 1580592998i32, #[strum(serialize = "StructureStackerReverse")] #[strum( props( @@ -6624,13 +6647,7 @@ pub enum StationpediaPrefab { #[strum(props(name = "Wall (Padded Arch)", desc = "", value = "1590330637"))] StructureWallPaddedArch = 1590330637i32, #[strum(serialize = "StructureLightRoundAngled")] - #[strum( - props( - name = "Light Round (Angled)", - desc = "Description coming.", - value = "1592905386" - ) - )] + #[strum(props(name = "Light Round (Angled)", desc = "", value = "1592905386"))] StructureLightRoundAngled = 1592905386i32, #[strum(serialize = "StructureWallGeometryT")] #[strum(props(name = "Wall (Geometry T)", desc = "", value = "1602758612"))] @@ -6644,7 +6661,7 @@ pub enum StationpediaPrefab { #[strum(serialize = "CartridgeNetworkAnalyser")] #[strum( props( - name = "Network Analyzer", + 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" ) @@ -6750,13 +6767,7 @@ pub enum StationpediaPrefab { #[strum(props(name = "Emergency Tool Belt", desc = "", value = "1661941301"))] ItemEmergencyToolBelt = 1661941301i32, #[strum(serialize = "StructureEmergencyButton")] - #[strum( - props( - name = "Important Button", - desc = "Description coming.", - value = "1668452680" - ) - )] + #[strum(props(name = "Important Button", desc = "", value = "1668452680"))] StructureEmergencyButton = 1668452680i32, #[strum(serialize = "ItemKitAutoMinerSmall")] #[strum(props(name = "Kit (Autominer Small)", desc = "", value = "1668815415"))] @@ -6881,7 +6892,7 @@ pub enum StationpediaPrefab { #[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 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", + 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" ) )] @@ -6919,7 +6930,7 @@ pub enum StationpediaPrefab { #[strum(serialize = "CartridgeOreScannerColor")] #[strum( props( - name = "Ore Scanner (Color)", + 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" ) @@ -6943,7 +6954,7 @@ pub enum StationpediaPrefab { #[strum(serialize = "ItemAreaPowerControl")] #[strum( props( - name = "Kit (Power Controller)", + 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" ) @@ -6977,7 +6988,9 @@ pub enum StationpediaPrefab { )] StructureWallPaddedThinNoBorderCorner = 1769527556i32, #[strum(serialize = "ItemKitWindowShutter")] - #[strum(props(name = "Kit (Window Shutter)", desc = "", value = "1779979754"))] + #[strum( + props(name = "Kit (Composite Window Shutter)", desc = "", value = "1779979754") + )] ItemKitWindowShutter = 1779979754i32, #[strum(serialize = "StructureRocketManufactory")] #[strum(props(name = "Rocket Manufactory", desc = "", value = "1781051034"))] @@ -7000,6 +7013,11 @@ pub enum StationpediaPrefab { #[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, @@ -7118,7 +7136,7 @@ pub enum StationpediaPrefab { )] ItemCookedPumpkin = 1849281546i32, #[strum(serialize = "StructureLiquidValve")] - #[strum(props(name = "Liquid Valve", desc = "", value = "1849974453"))] + #[strum(props(name = "Valve (Liquid)", desc = "", value = "1849974453"))] StructureLiquidValve = 1849974453i32, #[strum(serialize = "ApplianceTabletDock")] #[strum(props(name = "Tablet Dock", desc = "", value = "1853941363"))] @@ -7167,7 +7185,7 @@ pub enum StationpediaPrefab { #[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 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.", + 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" ) )] @@ -7217,7 +7235,7 @@ pub enum StationpediaPrefab { )] StructureInsulatedPipeLiquidCrossJunction = 1926651727i32, #[strum(serialize = "ItemWreckageTurbineGenerator3")] - #[strum(props(name = "Wreckage Turbine Generator", desc = "", value = "1927790321"))] + #[strum(props(name = "Wreckage", desc = "", value = "1927790321"))] ItemWreckageTurbineGenerator3 = 1927790321i32, #[strum(serialize = "StructurePassthroughHeatExchangerGasToLiquid")] #[strum( @@ -7336,6 +7354,9 @@ pub enum StationpediaPrefab { ) )] 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, @@ -7354,8 +7375,8 @@ pub enum StationpediaPrefab { #[strum(serialize = "StructureDrinkingFountain")] #[strum( props( - name = "", - desc = "", + name = "Drinking Fountain", + desc = "The Drinking Fountain can be interacted with directly to increase hydration. It needs a Water supply.", value = "1968371847" ) )] @@ -7372,6 +7393,9 @@ pub enum StationpediaPrefab { #[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 = "StructureWallGeometryCorner")] #[strum(props(name = "Wall (Geometry Corner)", desc = "", value = "1979212240"))] StructureWallGeometryCorner = 1979212240i32, @@ -7541,15 +7565,6 @@ pub enum StationpediaPrefab { #[strum(serialize = "StructureStairwellNoDoors")] #[strum(props(name = "Stairwell (No Doors)", desc = "", value = "2049879875"))] StructureStairwellNoDoors = 2049879875i32, - #[strum(serialize = "StructureWindowShutter")] - #[strum( - props( - name = "Window Shutter", - 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.", - value = "2056377335" - ) - )] - StructureWindowShutter = 2056377335i32, #[strum(serialize = "ItemKitHydroponicStation")] #[strum(props(name = "Kit (Hydroponic Station)", desc = "", value = "2057179799"))] ItemKitHydroponicStation = 2057179799i32, @@ -7557,7 +7572,7 @@ pub enum StationpediaPrefab { #[strum( props( name = "Cable Coil (Heavy)", - desc = "Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW.", + 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" ) )] diff --git a/stationeers_data/src/enums/script.rs b/stationeers_data/src/enums/script.rs index 293729a..1f6566d 100644 --- a/stationeers_data/src/enums/script.rs +++ b/stationeers_data/src/enums/script.rs @@ -153,7 +153,7 @@ pub enum LogicSlotType { #[strum(serialize = "OccupantHash")] #[strum( props( - docs = "returns the has of the current occupant, the unique identifier of the thing", + docs = "returns the hash of the current occupant, the unique identifier of the thing", value = "2" ) )] @@ -2095,6 +2095,14 @@ pub enum LogicType { ) )] 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, } impl TryFrom for LogicType { type Error = super::ParseError; diff --git a/stationeers_data/src/lib.rs b/stationeers_data/src/lib.rs index 88d5931..6e2a3dd 100644 --- a/stationeers_data/src/lib.rs +++ b/stationeers_data/src/lib.rs @@ -69,6 +69,7 @@ pub mod enums { LandingPad, LaunchPad, PowerAndData, + RoboticArmRail, #[serde(other)] #[default] None, diff --git a/stationeers_data/src/templates.rs b/stationeers_data/src/templates.rs index 8d1564c..e498615 100644 --- a/stationeers_data/src/templates.rs +++ b/stationeers_data/src/templates.rs @@ -6,7 +6,7 @@ use crate::enums::{ ConnectionRole, ConnectionType, MachineTier, MemoryAccess, Species, }; -use serde_with::{serde_as, DisplayFromStr, Map}; +use serde_with::{serde_as, DisplayFromStr}; use serde_derive::{Deserialize, Serialize}; #[cfg(feature = "tsify")] @@ -250,7 +250,7 @@ pub struct DeviceInfo { #[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_resouces: Vec, + pub consumed_resources: Vec, pub processed_reagents: Vec, } @@ -353,7 +353,7 @@ pub struct InternalAtmoInfo { #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] #[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct SuitInfo { - pub hygine_reduction_multiplier: f32, + pub hygiene_reduction_multiplier: f32, pub waste_max_pressure: f32, } diff --git a/www/cspell.json b/www/cspell.json index d88329c..380c6ea 100644 --- a/www/cspell.json +++ b/www/cspell.json @@ -56,6 +56,7 @@ "codegen", "Comlink", "datapoints", + "dbutils", "Depressurising", "deviceslength", "endpos", @@ -64,12 +65,14 @@ "hardwrap", "hashables", "hstack", + "IDBP", "idxs", "infile", "jetpack", "Keybind", "labelledby", "lbns", + "leeoniya", "logicable", "LogicSlotType", "logicslottypes", @@ -97,6 +100,8 @@ "regen", "rocketstation", "rparen", + "rsbuild", + "rspack", "sapz", "sattellite", "sdns", @@ -106,6 +111,7 @@ "sgez", "sgtz", "slez", + "Slotable", "slotclass", "slotlogic", "slotlogicable", @@ -124,6 +130,9 @@ "themelist", "tokentype", "trunc", + "ufuzzy", + "VMIC", + "vstack", "whos" ], "flagWords": [], diff --git a/www/package.json b/www/package.json index 9adc17e..f3416a1 100644 --- a/www/package.json +++ b/www/package.json @@ -27,6 +27,7 @@ "@oneidentity/zstd-js": "^1.0.3", "@rsbuild/core": "^0.7.10", "@rsbuild/plugin-image-compress": "^0.7.10", + "@rsbuild/plugin-sass": "^0.7.10", "@rsbuild/plugin-type-check": "^0.7.10", "@rspack/cli": "^0.7.5", "@rspack/core": "^0.7.5", diff --git a/www/pnpm-lock.yaml b/www/pnpm-lock.yaml index a66c849..bc60e5d 100644 --- a/www/pnpm-lock.yaml +++ b/www/pnpm-lock.yaml @@ -84,6 +84,9 @@ importers: '@rsbuild/plugin-image-compress': specifier: ^0.7.10 version: 0.7.10(@rsbuild/core@0.7.10) + '@rsbuild/plugin-sass': + specifier: ^0.7.10 + version: 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.12) '@rsbuild/plugin-type-check': specifier: ^0.7.10 version: 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.12)(typescript@5.5.4) @@ -158,6 +161,9 @@ packages: resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} engines: {node: '>=6.9.0'} + '@bufbuild/protobuf@1.10.0': + resolution: {integrity: sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==} + '@ctrl/tinycolor@4.1.0': resolution: {integrity: sha512-WyOx8cJQ+FQus4Mm4uPIZA64gbk3Wxh0so5Lcii0aJifqwoVOlfFtorjLE0Hen4OYyHZMXDWqMmaQemBhgxFRQ==} engines: {node: '>=14'} @@ -363,6 +369,11 @@ packages: peerDependencies: '@rsbuild/core': ^0.7.10 + '@rsbuild/plugin-sass@0.7.10': + resolution: {integrity: sha512-gtYNH+xgxWyroG1z2wqh/l7v88CiH89HtrIs+BbEgn1CV12dQvMI3YtF4aEwS6Ogr+byomdirFLhdBy0WBCbzQ==} + peerDependencies: + '@rsbuild/core': ^0.7.10 + '@rsbuild/plugin-type-check@0.7.10': resolution: {integrity: sha512-EGNeHEZEWvABqTGt+CEtw5kQskNrg2nch4wRuAechPgmHmzU/k65EoXTMsB/ImmcdUeU2ax2kdlQOdxs6fNgoA==} peerDependencies: @@ -734,6 +745,9 @@ packages: 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'} @@ -797,6 +811,9 @@ packages: 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==} @@ -1099,6 +1116,10 @@ packages: 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'} @@ -1566,6 +1587,10 @@ packages: 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==} @@ -1991,6 +2016,9 @@ packages: 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==} @@ -2000,6 +2028,125 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sass-embedded-android-arm64@1.77.8: + resolution: {integrity: sha512-EmWHLbEx0Zo/f/lTFzMeH2Du+/I4RmSRlEnERSUKQWVp3aBSO04QDvdxfFezgQ+2Yt/ub9WMqBpma9P/8MPsLg==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [android] + hasBin: true + + sass-embedded-android-arm@1.77.8: + resolution: {integrity: sha512-GpGL7xZ7V1XpFbnflib/NWbM0euRzineK0iwoo31/ntWKAXGj03iHhGzkSiOwWSFcXgsJJi3eRA5BTmBvK5Q+w==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [android] + hasBin: true + + sass-embedded-android-ia32@1.77.8: + resolution: {integrity: sha512-+GjfJ3lDezPi4dUUyjQBxlNKXNa+XVWsExtGvVNkv1uKyaOxULJhubVo2G6QTJJU0esJdfeXf5Ca5/J0ph7+7w==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [android] + hasBin: true + + sass-embedded-android-x64@1.77.8: + resolution: {integrity: sha512-YZbFDzGe5NhaMCygShqkeCWtzjhkWxGVunc7ULR97wmxYPQLPeVyx7XFQZc84Aj0lKAJBJS4qRZeqphMqZEJsQ==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [android] + hasBin: true + + sass-embedded-darwin-arm64@1.77.8: + resolution: {integrity: sha512-aifgeVRNE+i43toIkDFFJc/aPLMo0PJ5s5hKb52U+oNdiJE36n65n2L8F/8z3zZRvCa6eYtFY2b7f1QXR3B0LA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [darwin] + hasBin: true + + sass-embedded-darwin-x64@1.77.8: + resolution: {integrity: sha512-/VWZQtcWIOek60Zj6Sxk6HebXA1Qyyt3sD8o5qwbTgZnKitB1iEBuNunyGoAgMNeUz2PRd6rVki6hvbas9hQ6w==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [darwin] + hasBin: true + + sass-embedded-linux-arm64@1.77.8: + resolution: {integrity: sha512-6iIOIZtBFa2YfMsHqOb3qake3C9d/zlKxjooKKnTSo+6g6z+CLTzMXe1bOfayb7yxeenElmFoK1k54kWD/40+g==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + hasBin: true + + sass-embedded-linux-arm@1.77.8: + resolution: {integrity: sha512-2edZMB6jf0whx3T0zlgH+p131kOEmWp+I4wnKj7ZMUeokiY4Up05d10hSvb0Q63lOrSjFAWu6P5/pcYUUx8arQ==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + hasBin: true + + sass-embedded-linux-ia32@1.77.8: + resolution: {integrity: sha512-63GsFFHWN5yRLTWiSef32TM/XmjhCBx1DFhoqxmj+Yc6L9Z1h0lDHjjwdG6Sp5XTz5EmsaFKjpDgnQTP9hJX3Q==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [linux] + hasBin: true + + sass-embedded-linux-musl-arm64@1.77.8: + resolution: {integrity: sha512-j8cgQxNWecYK+aH8ESFsyam/Q6G+9gg8eJegiRVpA9x8yk3ykfHC7UdQWwUcF22ZcuY4zegrjJx8k+thsgsOVA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-musl-arm@1.77.8: + resolution: {integrity: sha512-nFkhSl3uu9btubm+JBW7uRglNVJ8W8dGfzVqh3fyQJKS1oyBC3vT3VOtfbT9YivXk28wXscSHpqXZwY7bUuopA==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-musl-ia32@1.77.8: + resolution: {integrity: sha512-oWveMe+8TFlP8WBWPna/+Ec5TV0CE+PxEutyi0ltSruBds2zxRq9dPVOqrpPcDN9QUx50vNZC0Afgch0aQEd0g==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [linux] + + sass-embedded-linux-musl-x64@1.77.8: + resolution: {integrity: sha512-2NtRpMXHeFo9kaYxuZ+Ewwo39CE7BTS2JDfXkTjZTZqd8H+8KC53eBh516YQnn2oiqxSiKxm7a6pxbxGZGwXOQ==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-linux-x64@1.77.8: + resolution: {integrity: sha512-ND5qZLWUCpOn7LJfOf0gLSZUWhNIysY+7NZK1Ctq+pM6tpJky3JM5I1jSMplNxv5H3o8p80n0gSm+fcjsEFfjQ==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + hasBin: true + + sass-embedded-win32-arm64@1.77.8: + resolution: {integrity: sha512-7L8zT6xzEvTYj86MvUWnbkWYCNQP+74HvruLILmiPPE+TCgOjgdi750709BtppVJGGZSs40ZuN6mi/YQyGtwXg==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [win32] + hasBin: true + + sass-embedded-win32-ia32@1.77.8: + resolution: {integrity: sha512-7Buh+4bP0WyYn6XPbthkIa3M2vtcR8QIsFVg3JElVlr+8Ng19jqe0t0SwggDgbMX6AdQZC+Wj4F1BprZSok42A==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [win32] + hasBin: true + + sass-embedded-win32-x64@1.77.8: + resolution: {integrity: sha512-rZmLIx4/LLQm+4GW39sRJW0MIlDqmyV0fkRzTmhFP5i/wVC7cuj8TUubPHw18rv2rkHFfBZKZJTCkPjCS5Z+SA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [win32] + hasBin: true + + sass-embedded@1.77.8: + resolution: {integrity: sha512-WGXA6jcaoBo5Uhw0HX/s6z/sl3zyYQ7ZOnLOJzqwpctFcFmU4L07zn51e2VSkXXFpQZFAdMZNqOGz/7h/fvcRA==} + engines: {node: '>=16.0.0'} + sass@1.77.8: resolution: {integrity: sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==} engines: {node: '>=14.0.0'} @@ -2313,6 +2460,9 @@ packages: 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'} @@ -2551,6 +2701,8 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 + '@bufbuild/protobuf@1.10.0': {} + '@ctrl/tinycolor@4.1.0': {} '@discoveryjs/json-ext@0.5.7': {} @@ -2754,6 +2906,16 @@ snapshots: '@rsbuild/core': 0.7.10 svgo: 3.3.2 + '@rsbuild/plugin-sass@0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.12)': + dependencies: + '@rsbuild/core': 0.7.10 + '@rsbuild/shared': 0.7.10(@swc/helpers@0.5.12) + loader-utils: 2.0.4 + postcss: 8.4.41 + sass-embedded: 1.77.8 + transitivePeerDependencies: + - '@swc/helpers' + '@rsbuild/plugin-type-check@0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.12)(typescript@5.5.4)': dependencies: '@rsbuild/core': 0.7.10 @@ -3259,6 +3421,8 @@ snapshots: batch@0.6.1: {} + big.js@5.2.2: {} + binary-extensions@2.3.0: {} bn.js@4.12.0: {} @@ -3357,6 +3521,8 @@ snapshots: bson@6.8.0: {} + buffer-builder@0.2.0: {} + buffer-from@1.1.2: {} buffer-xor@1.0.3: {} @@ -3683,6 +3849,8 @@ snapshots: emoji-regex@9.2.2: {} + emojis-list@3.0.0: {} + encodeurl@1.0.2: {} enhanced-resolve@5.17.1: @@ -4184,6 +4352,12 @@ snapshots: loader-runner@4.3.0: {} + loader-utils@2.0.4: + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + lodash.deburr@4.1.0: {} lodash@4.17.21: {} @@ -4555,12 +4729,94 @@ snapshots: dependencies: queue-microtask: 1.2.3 + rxjs@7.8.1: + dependencies: + tslib: 2.6.3 + safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} safer-buffer@2.1.2: {} + sass-embedded-android-arm64@1.77.8: + optional: true + + sass-embedded-android-arm@1.77.8: + optional: true + + sass-embedded-android-ia32@1.77.8: + optional: true + + sass-embedded-android-x64@1.77.8: + optional: true + + sass-embedded-darwin-arm64@1.77.8: + optional: true + + sass-embedded-darwin-x64@1.77.8: + optional: true + + sass-embedded-linux-arm64@1.77.8: + optional: true + + sass-embedded-linux-arm@1.77.8: + optional: true + + sass-embedded-linux-ia32@1.77.8: + optional: true + + sass-embedded-linux-musl-arm64@1.77.8: + optional: true + + sass-embedded-linux-musl-arm@1.77.8: + optional: true + + sass-embedded-linux-musl-ia32@1.77.8: + optional: true + + sass-embedded-linux-musl-x64@1.77.8: + optional: true + + sass-embedded-linux-x64@1.77.8: + optional: true + + sass-embedded-win32-arm64@1.77.8: + optional: true + + sass-embedded-win32-ia32@1.77.8: + optional: true + + sass-embedded-win32-x64@1.77.8: + optional: true + + sass-embedded@1.77.8: + 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.77.8 + sass-embedded-android-arm64: 1.77.8 + sass-embedded-android-ia32: 1.77.8 + sass-embedded-android-x64: 1.77.8 + sass-embedded-darwin-arm64: 1.77.8 + sass-embedded-darwin-x64: 1.77.8 + sass-embedded-linux-arm: 1.77.8 + sass-embedded-linux-arm64: 1.77.8 + sass-embedded-linux-ia32: 1.77.8 + sass-embedded-linux-musl-arm: 1.77.8 + sass-embedded-linux-musl-arm64: 1.77.8 + sass-embedded-linux-musl-ia32: 1.77.8 + sass-embedded-linux-musl-x64: 1.77.8 + sass-embedded-linux-x64: 1.77.8 + sass-embedded-win32-arm64: 1.77.8 + sass-embedded-win32-ia32: 1.77.8 + sass-embedded-win32-x64: 1.77.8 + sass@1.77.8: dependencies: chokidar: 3.6.0 @@ -4929,6 +5185,8 @@ snapshots: uuid@8.3.2: {} + varint@6.0.0: {} + vary@1.1.2: {} vm-browserify@1.1.2: {} diff --git a/www/rsbuild.config.ts b/www/rsbuild.config.ts index 6b91272..f4e7536 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"); @@ -72,5 +73,5 @@ export default defineConfig({ template: "./src/index.html", }, }, - plugins: [pluginTypeCheck(), pluginImageCompress()], + plugins: [pluginSass(), pluginTypeCheck(), pluginImageCompress()], }); diff --git a/www/src/scss/styles.scss b/www/src/scss/styles.scss index b78d870..78f35dc 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,11 +63,11 @@ $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"; diff --git a/www/src/ts/presets/demo.ts b/www/src/ts/presets/demo.ts index 09bc94c..6b31100 100644 --- a/www/src/ts/presets/demo.ts +++ b/www/src/ts/presets/demo.ts @@ -72,16 +72,18 @@ export const demoVMState: SessionDB.CurrentDBVmState = { id: 1, prefab: "StructureCircuitHousing", socketed_ic: 2, - slots: { - 0: { id: 2, quantity: 1 }, - }, - connections: { - 0: 1, - }, + slots: new Map([ + [0, { id: 2, quantity: 1 }], + ]), + connections: new Map([ + [0, 1], + ]), // unused, provided to make compiler happy name: undefined, prefab_hash: undefined, compile_errors: undefined, + parent_slot: undefined, + root_parent_human: undefined, damage: undefined, device_pins: undefined, reagents: undefined, @@ -106,9 +108,9 @@ export const demoVMState: SessionDB.CurrentDBVmState = { instruction_pointer: 0, yield_instruction_count: 0, state: "Start", - aliases: {}, - defines: {}, - labels: {}, + aliases: new Map(), + defines: new Map(), + labels: new Map(), registers: new Array(18).fill(0), }, @@ -117,6 +119,8 @@ export const demoVMState: SessionDB.CurrentDBVmState = { prefab_hash: undefined, compile_errors: undefined, slots: undefined, + parent_slot: undefined, + root_parent_human: undefined, damage: undefined, device_pins: undefined, connections: undefined, diff --git a/www/src/ts/session.ts b/www/src/ts/session.ts index 641e510..2fdef21 100644 --- a/www/src/ts/session.ts +++ b/www/src/ts/session.ts @@ -417,14 +417,16 @@ export namespace SessionDB { instruction_pointer: ic.ip, yield_instruction_count: ic.ic, state: ic.state as ICState, - aliases: Object.fromEntries(ic.aliases.entries()), - defines: Object.fromEntries(ic.defines.entries()), - labels: {}, + aliases: ic.aliases, + defines: ic.defines, + labels: new Map(), registers: ic.registers, }, // unused slots: undefined, + parent_slot: undefined, + root_parent_human: undefined, damage: undefined, device_pins: undefined, connections: undefined, @@ -492,7 +494,7 @@ export namespace SessionDB { id: template.id, prefab: template.prefab_name, prefab_hash: undefined, - slots: Object.fromEntries( + slots: new Map( Array.from(slotOccupantsPairs.entries()).map( ([index, [obj, quantity]]) => [ index, @@ -505,17 +507,19 @@ export namespace SessionDB { ), socketed_ic: socketedIcFn(template.id), - logic_values: Object.fromEntries( + logic_values: new Map( Object.entries(template.fields).map(([key, val]) => { - return [key, val.value]; + return [key as LogicType, val.value]; }), - ) as Record, + ), // unused memory: undefined, source_code: undefined, compile_errors: undefined, circuit: undefined, + parent_slot: undefined, + root_parent_human: undefined, damage: undefined, device_pins: undefined, connections: undefined, diff --git a/www/src/ts/utils.ts b/www/src/ts/utils.ts index 514a851..2f7b4ed 100644 --- a/www/src/ts/utils.ts +++ b/www/src/ts/utils.ts @@ -1,4 +1,5 @@ import { Ace } from "ace-builds"; +import { TransferHandler } from "comlink"; export function docReady(fn: () => void) { // see if DOM is already available @@ -92,6 +93,26 @@ export function fromJson(value: string): any { return JSON.parse(value, reviver); } +// this is a hack that *may* not be needed +type SuitableForSpecialJson = any; +export const comlinkSpecialJsonTransferHandler: TransferHandler = { + canHandle: (obj: unknown): obj is SuitableForSpecialJson => { + return typeof obj === "object" + || ( + typeof obj === "number" + && (!Number.isFinite(obj) || Number.isNaN(obj) || isZeroNegative(obj)) + ) + || typeof obj === "undefined"; + }, + serialize: (obj: SuitableForSpecialJson) => { + const sJson = toJson(obj); + return [ + sJson, + [], + ] + }, + deserialize: (obj: string) => fromJson(obj) +}; export function compareMaps(map1: Map, map2: Map): boolean { let testVal; diff --git a/www/src/ts/virtualMachine/baseDevice.ts b/www/src/ts/virtualMachine/baseDevice.ts index 88db46d..d7c4fef 100644 --- a/www/src/ts/virtualMachine/baseDevice.ts +++ b/www/src/ts/virtualMachine/baseDevice.ts @@ -21,6 +21,7 @@ import { LitElement, PropertyValueMap } from "lit"; import { computed, + signal, } from '@lit-labs/preact-signals'; import type { Signal } from '@lit-labs/preact-signals'; @@ -138,7 +139,7 @@ export class ComputedObjectSignals { return slotsTemplate.map((template, index) => { const fieldEntryInfos = Array.from( - Object.entries(logicTemplate?.logic_slot_types[index]) ?? [], + Object.entries(logicTemplate?.logic_slot_types.get(index)) ?? [], ); const logicFields = new Map( fieldEntryInfos.map(([slt, access]) => { @@ -321,11 +322,11 @@ export const globalObjectSignalMap = new ObjectComputedSignalMap(); type Constructor = new (...args: any[]) => T; export declare class VMObjectMixinInterface { - objectID: ObjectID; - activeICId: ObjectID; + objectID: Signal; + activeICId: Signal; objectSignals: ComputedObjectSignals | null; _handleDeviceModified(e: CustomEvent): void; - updateDevice(): void; + updateObject(): void; subscribe(...sub: VMObjectMixinSubscription[]): void; unsubscribe(filter: (sub: VMObjectMixinSubscription) => boolean): void; } @@ -338,14 +339,12 @@ export const VMObjectMixin = >( superClass: T, ) => { class VMObjectMixinClass extends superClass { - private _objectID: number; - get objectID() { - return this._objectID; - } - @property({ type: Number }) - set objectID(val: number) { - this._objectID = val; - this.updateDevice(); + objectID: Signal; + + constructor (...args: any[]) { + super(...args); + this.objectID = signal(null); + this.objectID.subscribe((_) => {this.updateObject()}) } @state() private objectSubscriptions: VMObjectMixinSubscription[] = []; @@ -354,16 +353,16 @@ export const VMObjectMixin = >( this.objectSubscriptions = this.objectSubscriptions.concat(sub); } - // remove subscripotions matching the filter + // remove subscriptions matching the filter unsubscribe(filter: (sub: VMObjectMixinSubscription) => boolean) { this.objectSubscriptions = this.objectSubscriptions.filter( (sub) => !filter(sub), ); } - @state() objectSignals: ComputedObjectSignals | null; + @state() objectSignals: ComputedObjectSignals | null = null; - @state() activeICId: number; + activeICId: Signal = signal(null); connectedCallback(): void { const root = super.connectedCallback(); @@ -385,7 +384,7 @@ export const VMObjectMixin = >( this._handleDevicesRemoved.bind(this), ); }); - this.updateDevice(); + this.updateObject(); return root; } @@ -413,20 +412,20 @@ export const VMObjectMixin = >( async _handleDeviceModified(e: CustomEvent) { const id = e.detail; const activeIcId = window.App.app.session.activeIC; - if (this.objectID === id) { - this.updateDevice(); + if (this.objectID.peek() === id) { + this.updateObject(); } else if ( id === activeIcId && this.objectSubscriptions.includes("active-ic") ) { - this.updateDevice(); + this.updateObject(); this.requestUpdate(); } else if (this.objectSubscriptions.includes("visible-devices")) { const visibleDevices = await window.VM.vm.visibleDeviceIds( - this.objectID, + this.objectID.peek(), ); if (visibleDevices.includes(id)) { - this.updateDevice(); + this.updateObject(); this.requestUpdate(); } } @@ -435,8 +434,8 @@ export const VMObjectMixin = >( async _handleDevicesModified(e: CustomEvent) { const activeIcId = window.App.app.session.activeIC; const ids = e.detail; - if (ids.includes(this.objectID)) { - this.updateDevice(); + if (ids.includes(this.objectID.peek())) { + this.updateObject(); if (this.objectSubscriptions.includes("visible-devices")) { this.requestUpdate(); } @@ -444,25 +443,25 @@ export const VMObjectMixin = >( ids.includes(activeIcId) && this.objectSubscriptions.includes("active-ic") ) { - this.updateDevice(); + this.updateObject(); this.requestUpdate(); } else if (this.objectSubscriptions.includes("visible-devices")) { const visibleDevices = await window.VM.vm.visibleDeviceIds( - this.objectID, + this.objectID.peek(), ); if (ids.some((id) => visibleDevices.includes(id))) { - this.updateDevice(); + this.updateObject(); this.requestUpdate(); } } } async _handleDeviceIdChange(e: CustomEvent<{ old: number; new: number }>) { - if (this.objectID === e.detail.old) { - this.objectID = e.detail.new; + if (this.objectID.peek() === e.detail.old) { + this.objectID.value = e.detail.new; } else if (this.objectSubscriptions.includes("visible-devices")) { const visibleDevices = await window.VM.vm.visibleDeviceIds( - this.objectID, + this.objectID.peek(), ); if ( visibleDevices.some( @@ -481,8 +480,9 @@ export const VMObjectMixin = >( } } - updateDevice() { - const newObjSignals = globalObjectSignalMap.get(this.objectID); + updateObject() { + this.activeICId.value = window.App.app.session.activeIC; + const newObjSignals = globalObjectSignalMap.get(this.objectID.peek()); if (newObjSignals !== this.objectSignals) { this.objectSignals = newObjSignals } @@ -503,9 +503,9 @@ export const VMActiveICMixin = >( superClass: T, ) => { class VMActiveICMixinClass extends VMObjectMixin(superClass) { - constructor() { - super(); - this.objectID = window.App.app.session.activeIC; + constructor(...args: any[]) { + super(...args); + this.objectID.value = window.App.app.session.activeIC; } connectedCallback(): void { @@ -535,10 +535,10 @@ export const VMActiveICMixin = >( _handleActiveIC(e: CustomEvent) { const id = e.detail; - if (this.objectID !== id) { - this.objectID = id; + if (this.objectID.value !== id) { + this.objectID.value = id; } - this.updateDevice(); + this.updateObject(); } } @@ -569,7 +569,7 @@ export const VMTemplateDBMixin = >( disconnectedCallback(): void { window.VM.vm.removeEventListener( - "vm-device-db-loaded", + "vm-template-db-loaded", this._handleDeviceDBLoad.bind(this), ); } diff --git a/www/src/ts/virtualMachine/controls.ts b/www/src/ts/virtualMachine/controls.ts index 4a712d0..1f100d8 100644 --- a/www/src/ts/virtualMachine/controls.ts +++ b/www/src/ts/virtualMachine/controls.ts @@ -1,16 +1,28 @@ -import { html, css } from "lit"; +import { html, css, nothing } from "lit"; import { customElement, query } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMActiveICMixin } from "virtualMachine/baseDevice"; +import { ComputedObjectSignals, globalObjectSignalMap, VMActiveICMixin } from "virtualMachine/baseDevice"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.js"; +import { computed, Signal, watch } from "@lit-labs/preact-signals"; +import { FrozenObjectFull } from "ic10emu_wasm"; @customElement("vm-ic-controls") export class VMICControls extends VMActiveICMixin(BaseElement) { + circuitHolders: Signal; + constructor() { super(); - this.subscribe("ic", "active-ic") + this.subscribe("active-ic") + this.circuitHolders = computed(() => { + const ids = window.VM.vm.circuitHolderIds.value; + const circuitHolders = []; + for (const id of ids) { + circuitHolders.push(globalObjectSignalMap.get(id)); + } + return circuitHolders; + }); } static styles = [ @@ -64,8 +76,49 @@ export class VMICControls extends VMActiveICMixin(BaseElement) { @query(".active-ic-select") activeICSelect: SlSelect; + forceSelectUpdate() { + if (this.activeICSelect != null) { + this.activeICSelect.handleValueChange(); + } + } + protected render() { - const ics = Array.from(window.VM.vm.circuitHolders); + const icsOptions = computed(() => { + return this.circuitHolders.value.map((circuitHolder) => { + + circuitHolder.prefabName.subscribe((_) => {this.forceSelectUpdate()}); + circuitHolder.id.subscribe((_) => {this.forceSelectUpdate()}); + circuitHolder.displayName.subscribe((_) => {this.forceSelectUpdate()}); + + const span = circuitHolder.name ? html`${watch(circuitHolder.prefabName)}` : nothing ; + return html` + + ${span} + Device:${watch(circuitHolder.id)} ${watch(circuitHolder.displayName)} + ` + }); + }); + icsOptions.subscribe((_) => {this.forceSelectUpdate()}); + + const icErrors = computed(() => { + return this.objectSignals?.errors.value?.map( + (err) => + typeof err === "object" + && "ParseError" in err + ? html`
+ + Line: ${err.ParseError.line} - + ${"ParseError" in err ? err.ParseError.start : "N/A"}:${err.ParseError.end} + + ${err.ParseError.msg} +
` + : html`${JSON.stringify(err)}`, + ) ?? nothing; + }); + return html`
@@ -116,57 +169,33 @@ export class VMICControls extends VMActiveICMixin(BaseElement) { hoist size="small" placement="bottom" - value="${this.objectID}" + value="${watch(this.objectID)}" @sl-change=${this._handleChangeActiveIC} class="active-ic-select" > - ${ics.map( - ([id, device], _index) => - html` - ${device.obj_info.name - ? html`${device.obj_info.prefab}` - : ""} - Device:${id} ${device.obj_info.name ?? device.obj_info.prefab} - `, - )} + ${watch(icsOptions)}
Instruction Pointer - ${this.icIP} + ${this.objectSignals ? watch(this.objectSignals.icIP) : nothing}
Last Run Operations Count - ${this.icOpCount} + ${this.objectSignals ? watch(this.objectSignals.icOpCount) : nothing}
Last State - ${this.icState} + ${this.objectSignals ? watch(this.objectSignals.icState) : nothing}
Errors - ${this.errors?.map( - (err) => - typeof err === "object" - && "ParseError" in err - ? html`
- - Line: ${err.ParseError.line} - - ${"ParseError" in err ? err.ParseError.start : "N/A"}:${err.ParseError.end} - - ${err.ParseError.msg} -
` - : html`${JSON.stringify(err)}`, - )} + ${watch(icErrors)}
@@ -183,18 +212,6 @@ export class VMICControls extends VMActiveICMixin(BaseElement) { window.VM.get().then((vm) => vm.reset()); } - updateIC(): void { - super.updateIC(); - this.activeICSelect?.dispatchEvent(new Event("slotchange")); - // if (this.activeICSelect) { - // const val = this.activeICSelect.value; - // this.activeICSelect.value = ""; - // this.activeICSelect.requestUpdate(); - // this.activeICSelect.value = val; - // this.activeICSelect. - // } - } - _handleChangeActiveIC(e: CustomEvent) { const select = e.target as SlSelect; const icId = parseInt(select.value as string); diff --git a/www/src/ts/virtualMachine/device/card.ts b/www/src/ts/virtualMachine/device/card.ts index 348a08e..c238983 100644 --- a/www/src/ts/virtualMachine/device/card.ts +++ b/www/src/ts/virtualMachine/device/card.ts @@ -122,7 +122,7 @@ export class VMDeviceCard extends VMTemplateDBMixin( _handleDeviceDBLoad(e: CustomEvent): void { super._handleDeviceDBLoad(e); - this.updateDevice(); + this.updateObject(); } onImageErr(e: Event) { @@ -131,24 +131,38 @@ export class VMDeviceCard extends VMTemplateDBMixin( } renderHeader(): HTMLTemplateResult { - const thisIsActiveIc = this.activeICId === this.objectID; - const badges: HTMLTemplateResult[] = []; - if (thisIsActiveIc) { - badges.push(html`db`); - } - const activeIc = globalObjectSignalMap.get(this.activeICId); + const thisIsActiveIc = computed(() => { + return this.activeICId.value === this.objectID.value; + }); - const numPins = activeIc.numPins.value; - const pins = new Array(numPins) - .fill(true) - .map((_, index) => this.objectSignals.pins.value.get(index)); - pins.forEach((id, index) => { - if (this.objectID == id) { - badges.push( - html`d${index}`, - ); + const activeIc = computed(() => { + return globalObjectSignalMap.get(this.activeICId.value); + }); + + const numPins = computed(() => { + return activeIc.value.numPins.value; + }); + + const pins = computed(() => { + return new Array(numPins.value) + .fill(true) + .map((_, index) => this.objectSignals.pins.value.get(index)); + }); + const badgesHtml = computed(() => { + + const badges: HTMLTemplateResult[] = []; + if (thisIsActiveIc.value) { + badges.push(html`db`); } - }, this); + pins.value.forEach((id, index) => { + if (this.objectID.value == id) { + badges.push( + html`d${index}`, + ); + } + }, this); + return badges + }); return html`
Id Name - ${badges.map((badge) => badge)} + ${watch(badgesHtml)}
{ const conn = typeof connection === "object" && "CableNetwork" in connection @@ -273,7 +287,7 @@ export class VMDeviceCard extends VMTemplateDBMixin( @sl-change=${this._handleChangeConnection} > Connection:${index} - ${vmNetworks.map( + ${vmNetworks.value.map( (net) => html`Network ${net} { - if (!vm.changeObjectID(this.objectID, val)) { + if (!vm.changeObjectID(this.objectID.peek(), val)) { input.value = this.objectID.toString(); } }); @@ -434,10 +448,10 @@ export class VMDeviceCard extends VMTemplateDBMixin( const input = e.target as SlInput; const name = input.value.length === 0 ? undefined : input.value; window.VM.get().then((vm) => { - if (!vm.setObjectName(this.objectID, name)) { + if (!vm.setObjectName(this.objectID.peek(), name)) { input.value = this.objectSignals.name.value; } - this.updateDevice(); + this.updateObject(); }); } _handleDeviceRemoveButton(_e: Event) { @@ -446,7 +460,7 @@ export class VMDeviceCard extends VMTemplateDBMixin( _removeDialogRemove() { this.removeDialog.hide(); - window.VM.get().then((vm) => vm.removeDevice(this.objectID)); + window.VM.get().then((vm) => vm.removeDevice(this.objectID.peek())); } _handleChangeConnection(e: CustomEvent) { @@ -454,8 +468,8 @@ export class VMDeviceCard extends VMTemplateDBMixin( const conn = parseInt(select.getAttribute("key")!); const val = select.value ? parseInt(select.value as string) : undefined; window.VM.get().then((vm) => - vm.setDeviceConnection(this.objectID, conn, val), + vm.setDeviceConnection(this.objectID.peek(), conn, val), ); - this.updateDevice(); + this.updateObject(); } } diff --git a/www/src/ts/virtualMachine/device/dbutils.ts b/www/src/ts/virtualMachine/device/dbutils.ts index 5c132b0..d9b66a1 100644 --- a/www/src/ts/virtualMachine/device/dbutils.ts +++ b/www/src/ts/virtualMachine/device/dbutils.ts @@ -12,7 +12,7 @@ export function connectionFromConnectionInfo(conn: ConnectionInfo): Connection { ) { connection = { CableNetwork: { - net: window.VM.vm.defaultNetwork, + net: window.VM.vm.defaultNetwork.peek(), typ: conn.typ as CableConnectionType, role: conn.role, }, diff --git a/www/src/ts/virtualMachine/device/deviceList.ts b/www/src/ts/virtualMachine/device/deviceList.ts index e9ef09f..178a13a 100644 --- a/www/src/ts/virtualMachine/device/deviceList.ts +++ b/www/src/ts/virtualMachine/device/deviceList.ts @@ -10,10 +10,15 @@ import { default as uFuzzy } from "@leeoniya/ufuzzy"; import { VMSlotAddDialog } from "./slotAddDialog"; import "./addDevice" import { SlotModifyEvent } from "./slot"; +import { computed, Signal, signal, SignalWatcher, watch } from "@lit-labs/preact-signals"; +import { globalObjectSignalMap } from "virtualMachine/baseDevice"; +import { ObjectID } from "ic10emu_wasm"; @customElement("vm-device-list") -export class VMDeviceList extends BaseElement { - @state() devices: number[]; +export class VMDeviceList extends SignalWatcher(BaseElement) { + devices: Signal; + private _filter: Signal = signal(""); + private _filteredDeviceIds: Signal; static styles = [ ...defaultCss, @@ -43,17 +48,50 @@ export class VMDeviceList extends BaseElement { constructor() { super(); - this.devices = [...window.VM.vm.objectIds]; - } + this.devices = computed(() => { + const objIds = window.VM.vm.objectIds.value; + const deviceIds = []; + for (const id of objIds) { + const obj = window.VM.vm.objects.get(id); + const info = obj.value.obj_info; + if (!(info.parent_slot != null || info.root_parent_human != null)) { + deviceIds.push(id) + } + } + deviceIds.sort(); + return deviceIds; + }); + this._filteredDeviceIds = computed(() => { + if (this._filter.value) { + const datapoints: [string, number][] = []; + for (const device_id of this.devices.value) { + const device = globalObjectSignalMap.get(device_id); + if (device) { + const name = device.name.peek(); + const id = device.id.peek(); + const prefab = device.prefabName.peek(); + if (name != null) { + datapoints.push([name, id]); + } + if (prefab != null) { + datapoints.push([prefab, id]); + } + } + } + const haystack: string[] = datapoints.map((data) => data[0]); + const uf = new uFuzzy({}); + const [_idxs, info, order] = uf.search(haystack, this._filter.value, 0, 1e3); - connectedCallback(): void { - super.connectedCallback(); - window.VM.get().then((vm) => - vm.addEventListener( - "vm-devices-update", - this._handleDevicesUpdate.bind(this), - ), - ); + const filtered = order?.map((infoIdx) => datapoints[info.idx[infoIdx]]); + const deviceIds: number[] = + filtered + ?.map((data) => data[1]) + ?.filter((val, index, arr) => arr.indexOf(val) === index) ?? []; + return deviceIds; + } else { + return Array.from(this.devices.value); + } + }); } protected firstUpdated(_changedProperties: PropertyValueMap | Map): void { @@ -63,27 +101,20 @@ export class VMDeviceList extends BaseElement { ); } - _handleDevicesUpdate(e: CustomEvent) { - const ids = e.detail; - if (!structuralEqual(this.devices, ids)) { - this.devices = ids; - this.devices.sort(); - } - } - protected render(): HTMLTemplateResult { const deviceCards = repeat( - this.filteredDeviceIds, + this.filteredDeviceIds.value, (id) => id, (id) => html` `, ); + const numDevices = computed(() => this.devices.value.length); const result = html`
Devices: - ${this.devices.length} + ${watch(numDevices)} data[0]); - const uf = new uFuzzy({}); - const [_idxs, info, order] = uf.search(haystack, this._filter, 0, 1e3); - - const filtered = order?.map((infoIdx) => datapoints[info.idx[infoIdx]]); - const deviceIds: number[] = - filtered - ?.map((data) => data[1]) - ?.filter((val, index, arr) => arr.indexOf(val) === index) ?? []; - this._filteredDeviceIds = deviceIds; - } else { - this._filteredDeviceIds = undefined; - } - } } diff --git a/www/src/ts/virtualMachine/device/fields.ts b/www/src/ts/virtualMachine/device/fields.ts index 6b4fea3..d71b1ad 100644 --- a/www/src/ts/virtualMachine/device/fields.ts +++ b/www/src/ts/virtualMachine/device/fields.ts @@ -53,10 +53,10 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(BaseElement)) const field = input.getAttribute("key")! as LogicType; const val = parseNumber(input.value); window.VM.get().then((vm) => { - if (!vm.setObjectField(this.objectID, field, val, true)) { + if (!vm.setObjectField(this.objectID.peek(), field, val, true)) { input.value = this.objectSignals.logicFields.value.get(field).value.toString(); } - this.updateDevice(); + this.updateObject(); }); } } diff --git a/www/src/ts/virtualMachine/device/pins.ts b/www/src/ts/virtualMachine/device/pins.ts index 13609b5..240a8b3 100644 --- a/www/src/ts/virtualMachine/device/pins.ts +++ b/www/src/ts/virtualMachine/device/pins.ts @@ -63,7 +63,7 @@ export class VMDevicePins extends VMObjectMixin(VMTemplateDBMixin(BaseElement)) const select = e.target as SlSelect; const pin = parseInt(select.getAttribute("key")!); const val = select.value ? parseInt(select.value as string) : undefined; - window.VM.get().then((vm) => vm.setDevicePin(this.objectID, pin, val)); - this.updateDevice(); + window.VM.get().then((vm) => vm.setDevicePin(this.objectID.peek(), pin, val)); + this.updateObject(); } } diff --git a/www/src/ts/virtualMachine/device/slot.ts b/www/src/ts/virtualMachine/device/slot.ts index 04c442b..6f05e04 100644 --- a/www/src/ts/virtualMachine/device/slot.ts +++ b/www/src/ts/virtualMachine/device/slot.ts @@ -268,7 +268,7 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(SignalWatcher( } _handleSlotOccupantRemove() { - window.VM.vm.removeSlotOccupant(this.objectID, this.slotIndex); + window.VM.vm.removeSlotOccupant(this.objectID.peek(), this.slotIndex); } _handleSlotClick(_e: Event) { @@ -276,7 +276,7 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(SignalWatcher( new CustomEvent("device-modify-slot", { bubbles: true, composed: true, - detail: { deviceID: this.objectID, slotIndex: this.slotIndex }, + detail: { deviceID: this.objectID.peek(), slotIndex: this.slotIndex }, }), ); } @@ -293,7 +293,7 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(SignalWatcher( ); if ( !window.VM.vm.setObjectSlotField( - this.objectID, + this.objectID.peek(), this.slotIndex, "Quantity", val, @@ -365,7 +365,7 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(SignalWatcher( } window.VM.get().then((vm) => { if ( - !vm.setObjectSlotField(this.objectID, this.slotIndex, field, val, true) + !vm.setObjectSlotField(this.objectID.peek(), this.slotIndex, field, val, true) ) { input.value = ( this.slotSignal.value.logicFields ?? @@ -374,7 +374,7 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(SignalWatcher( .get(field) .toString(); } - this.updateDevice(); + this.updateObject(); }); } diff --git a/www/src/ts/virtualMachine/device/slotAddDialog.ts b/www/src/ts/virtualMachine/device/slotAddDialog.ts index de6fd41..4650aef 100644 --- a/www/src/ts/virtualMachine/device/slotAddDialog.ts +++ b/www/src/ts/virtualMachine/device/slotAddDialog.ts @@ -1,7 +1,7 @@ -import { html, css } from "lit"; +import { html, css, nothing } from "lit"; import { customElement, property, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMTemplateDBMixin } from "virtualMachine/baseDevice"; +import { ComputedObjectSignals, globalObjectSignalMap, VMTemplateDBMixin } from "virtualMachine/baseDevice"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; import SlDialog from "@shoelace-style/shoelace/dist/components/dialog/dialog.component.js"; import { VMDeviceCard } from "./card"; @@ -15,6 +15,8 @@ import { ObjectInfo, ObjectTemplate, } from "ic10emu_wasm"; +import { computed, ReadonlySignal, signal, Signal, watch } from "@lit-labs/preact-signals"; +import { repeat } from "lit/directives/repeat.js"; type SlotableItemTemplate = Extract; @@ -38,30 +40,33 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { `, ]; - private _items: Map = new Map(); - private _filteredItems: SlotableItemTemplate[]; - private _datapoints: [string, string][] = []; - private _haystack: string[] = []; + private _items: Signal> = signal({}); + private _filteredItems: ReadonlySignal; + private _datapoints: ReadonlySignal<[string, string][]>; + private _haystack: ReadonlySignal; - private _filter: string = ""; + private _filter: Signal = signal(""); get filter() { - return this._filter; + return this._filter.peek(); } - @state() set filter(val: string) { - this._filter = val; - this.performSearch(); + this._filter.value = val; } - private _searchResults: { + private _searchResults: ReadonlySignal<{ entry: SlotableItemTemplate; haystackEntry: string; ranges: number[]; - }[] = []; + }[]>; + + constructor() { + super(); + this.setupSearch(); + } postDBSetUpdate(): void { - this._items = new Map( + this._items.value = Object.fromEntries( Array.from(Object.values(this.templateDB)).flatMap((template) => { if ("item" in template) { return [[template.prefab.prefab_name, template]] as [ @@ -73,77 +78,84 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { } }), ); - this.setupSearch(); - this.performSearch(); } setupSearch() { - let filteredItems = Array.from(this._items.values()); - if ( - typeof this.objectID !== "undefined" && - typeof this.slotIndex !== "undefined" - ) { - const obj = window.VM.vm.objects.get(this.objectID); - const template = obj.template; - const slot = "slots" in template ? template.slots[this.slotIndex] : null; - const typ = slot.typ; + const filteredItems = computed(() => { + let filtered = Array.from(Object.values(this._items.value)); + const obj = globalObjectSignalMap.get(this.objectID.value ?? null); + if (obj != null) { + const template = obj.template; + const slot = "slots" in template.value ? template.value.slots[this.slotIndex.value] : null; + const typ = slot.typ; - if (typeof typ === "string" && typ !== "None") { - filteredItems = Array.from(this._items.values()).filter( - (item) => item.item.slot_class === typ, + if (typeof typ === "string" && typ !== "None") { + filtered = Array.from(Object.values(this._items.value)).filter( + (item) => item.item.slot_class === typ, + ); + } + } + return filtered; + }); + this._filteredItems = filteredItems; + + const datapoints = computed(() => { + const datapoints: [string, string][] = []; + for (const entry of this._filteredItems.value) { + datapoints.push( + [entry.prefab.name, entry.prefab.prefab_name], + [entry.prefab.prefab_name, entry.prefab.prefab_name], + [entry.prefab.desc, entry.prefab.prefab_name], ); } - } - this._filteredItems = filteredItems; - const datapoints: [string, string][] = []; - for (const entry of this._filteredItems) { - datapoints.push( - [entry.prefab.name, entry.prefab.prefab_name], - [entry.prefab.prefab_name, entry.prefab.prefab_name], - [entry.prefab.desc, entry.prefab.prefab_name], - ); - } - - const haystack: string[] = datapoints.map((data) => data[0]); + return datapoints; + }); this._datapoints = datapoints; + + const haystack: Signal = computed(() => { + return datapoints.value.map((data) => data[0]); + }); this._haystack = haystack; - } - performSearch() { - if (this._filter) { - const uf = new uFuzzy({}); - const [_idxs, info, order] = uf.search( - this._haystack, - this._filter, - 0, - 1e3, - ); + const searchResults = computed(() => { + let results; + if (this._filter.value) { + const uf = new uFuzzy({}); + const [_idxs, info, order] = uf.search( + this._haystack.value, + this._filter.value, + 0, + 1e3, + ); - const filtered = - order?.map((infoIdx) => ({ - name: this._datapoints[info.idx[infoIdx]][1], - haystackEntry: this._haystack[info.idx[infoIdx]], - ranges: info.ranges[infoIdx], - })) ?? []; + const filtered = + order?.map((infoIdx) => ({ + name: this._datapoints.value[info.idx[infoIdx]][1], + haystackEntry: this._haystack.value[info.idx[infoIdx]], + ranges: info.ranges[infoIdx], + })) ?? []; - const uniqueNames = new Set(filtered.map((obj) => obj.name)); - const unique = [...uniqueNames].map((result) => { - return filtered.find((obj) => obj.name === result); - }); + const uniqueNames = new Set(filtered.map((obj) => obj.name)); + const unique = [...uniqueNames].map((result) => { + return filtered.find((obj) => obj.name === result); + }); - this._searchResults = unique.map(({ name, haystackEntry, ranges }) => ({ - entry: this._items.get(name)!, - haystackEntry, - ranges, - })); - } else { - // return everything - this._searchResults = [...this._filteredItems].map((st) => ({ - entry: st, - haystackEntry: st.prefab.prefab_name, - ranges: [], - })); - } + results = unique.map(({ name, haystackEntry, ranges }) => ({ + entry: this._items.value[name]!, + haystackEntry, + ranges, + })); + } else { + // return everything + results = [...this._filteredItems.value].map((st) => ({ + entry: st, + haystackEntry: st.prefab.prefab_name, + ranges: [], + })); + } + return results; + }); + this._searchResults = searchResults; } renderSearchResults() { @@ -156,10 +168,13 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { None
`; - return html` -
- ${enableNone ? none : ""} - ${this._searchResults.map((result) => { + const resultsHtml = computed(() => { + return repeat( + this._searchResults.value, + (result) => { + return result.entry.prefab.prefab_hash; + }, + (result) => { const imgSrc = `img/stationpedia/${result.entry.prefab.prefab_name}.png`; const img = html` ${result.entry.prefab.name}
`; - })} + } + ); + }); + return html` +
+ ${enableNone ? none : ""} + ${watch(resultsHtml)}
`; } _handleClickNone() { - window.VM.vm.removeSlotOccupant(this.objectID, this.slotIndex); + window.VM.vm.removeSlotOccupant(this.objectID.peek(), this.slotIndex.peek()); this.hide(); } _handleClickItem(e: Event) { const div = e.currentTarget as HTMLDivElement; const key = parseInt(div.getAttribute("key")); - const entry = this.templateDB[key] as SlotableItemTemplate; - const obj = window.VM.vm.objects.get(this.objectID); - const dbTemplate = obj.template; + const entry = this.templateDB.get(key) as SlotableItemTemplate; + const obj = window.VM.vm.objects.get(this.objectID.peek()); + const dbTemplate = obj.peek().template; console.log("using entry", dbTemplate); const template: FrozenObject = { @@ -203,7 +224,7 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { database_template: true, template: undefined, }; - window.VM.vm.setSlotOccupant(this.objectID, this.slotIndex, template, 1); + window.VM.vm.setSlotOccupant(this.objectID.peek(), this.slotIndex.peek(), template, 1); this.hide(); } @@ -211,12 +232,22 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { @query(".device-search-input") searchInput: SlInput; render() { - const device = window.VM.vm.objects.get(this.objectID); - const name = device?.obj_info.name ?? device?.obj_info.prefab ?? ""; - const id = this.objectID ?? 0; + const device = computed(() => { + return globalObjectSignalMap.get(this.objectID.value) ?? null; + }); + const name = computed(() => { + return device.value?.displayName.value ?? nothing; + + }); + const id = computed(() => this.objectID.value ?? 0); + const resultsHtml = html` +
+ ${this.renderSearchResults()} +
+ `; return html` @@ -230,16 +261,7 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { Search Items - ${when( - typeof this.objectID !== "undefined" && - typeof this.slotIndex !== "undefined", - () => html` -
- ${this.renderSearchResults()} -
- `, - () => html``, - )} + ${resultsHtml}
`; } @@ -262,14 +284,12 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { this.slotIndex = undefined; } - @state() private objectID: number; - @state() private slotIndex: number; + private objectID: Signal = signal(null); + private slotIndex: Signal = signal(0); show(objectID: number, slotIndex: number) { - this.objectID = objectID; - this.slotIndex = slotIndex; - this.setupSearch(); - this.performSearch(); + this.objectID.value = objectID; + this.slotIndex.value = slotIndex; this.dialog.show(); this.searchInput.select(); } diff --git a/www/src/ts/virtualMachine/device/template.ts b/www/src/ts/virtualMachine/device/template.ts index 5970b77..897af10 100644 --- a/www/src/ts/virtualMachine/device/template.ts +++ b/www/src/ts/virtualMachine/device/template.ts @@ -24,7 +24,9 @@ import { crc32, displayNumber, parseNumber } from "utils"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; import { VMDeviceCard } from "./card"; -import { VMTemplateDBMixin } from "virtualMachine/baseDevice"; +import { globalObjectSignalMap, VMTemplateDBMixin } from "virtualMachine/baseDevice"; +import { computed, Signal, watch } from "@lit-labs/preact-signals"; +import { createRef, ref, Ref } from "lit/directives/ref.js"; export interface SlotTemplate { typ: Class; @@ -74,13 +76,13 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { `, ]; - @state() fields: Map; - @state() slots: SlotTemplate[]; - @state() pins: (ObjectID | undefined)[]; - @state() template: FrozenObject; - @state() objectId: number | undefined; - @state() objectName: string | undefined; - @state() connections: Connection[]; + fields: Signal>; + slots: Signal; + pins: Signal<(ObjectID | undefined)[]>; + template: Signal; + objectId: Signal; + objectName: Signal; + connections: Signal; constructor() { super(); @@ -105,13 +107,13 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { } get dbTemplate(): ObjectTemplate { - return this.templateDB[this._prefabHash]; + return this.templateDB.get(this._prefabHash); } setupState() { const dbTemplate = this.dbTemplate; - this.fields = new Map( + this.fields.value = Object.fromEntries( ( Array.from( "logic" in dbTemplate @@ -123,9 +125,9 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { lt === "PrefabHash" ? this.dbTemplate.prefab.prefab_hash : 0.0; return [lt, value]; }), - ); + ) as Record; - this.slots = ( + this.slots.value = ( ("slots" in dbTemplate ? dbTemplate.slots ?? [] : []) as SlotInfo[] ).map( (slot, _index) => @@ -152,17 +154,18 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { } }); - this.connections = connections.map((conn) => conn[1]); + this.connections.value = connections.map((conn) => conn[1]); const numPins = "device" in dbTemplate ? dbTemplate.device.device_pins_length : 0; - this.pins = new Array(numPins).fill(undefined); + this.pins.value = new Array(numPins).fill(undefined); } + renderFields(): HTMLTemplateResult { const fields = Object.entries(this.fields); return html` ${fields.map(([name, field], _index, _fields) => { - return html` + return html` ${field.field_type} `; - })} + })} `; } @@ -182,13 +185,22 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { const input = e.target as SlInput; const field = input.getAttribute("key")! as LogicType; const val = parseNumber(input.value); - this.fields.set(field, val); + this.fields.value = { ...this.fields.value, [field]: val}; if (field === "ReferenceId" && val !== 0) { - this.objectId = val; + this.objectId.value = val; } - this.requestUpdate(); } + forceSelectUpdate(...slSelects: Ref[]) { + for (const slSelect of slSelects) { + if (slSelect.value != null && "handleValueChange" in slSelect.value) { + slSelect.value.handleValueChange(); + } + } + } + + private networksSelectRef: Ref = createRef(); + renderSlot(slot: Slot, slotIndex: number): HTMLTemplateResult { return html` `; } @@ -203,34 +215,37 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { renderNetworks() { const vm = window.VM.vm; - const vmNetworks = vm.networks; - const connections = this.connections; + const vmNetworks = computed(() => { + return vm.networkIds.value.map((net) => html`Network ${net}`); + }); + const connections = computed(() => { + this.connections.value.map((connection, index, _conns) => { + const conn = + typeof connection === "object" && "CableNetwork" in connection + ? connection.CableNetwork + : null; + return html` + + Connection:${index} + ${watch(vmNetworks)} + ${conn?.typ} + + `; + }); + }); + vmNetworks.subscribe((_) => { this.forceSelectUpdate(this.networksSelectRef)}) return html`
- ${connections.map((connection, index, _conns) => { - const conn = - typeof connection === "object" && "CableNetwork" in connection - ? connection.CableNetwork - : null; - return html` - - Connection:${index} - ${vmNetworks.map( - (net) => - html`Network ${net}`, - )} - ${conn?.typ} - - `; - })} + ${watch(connections)}
`; } @@ -239,53 +254,89 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { const select = e.target as SlSelect; const conn = parseInt(select.getAttribute("key")!); const val = select.value ? parseInt(select.value as string) : undefined; - (this.connections[conn] as ConnectionCableNetwork).CableNetwork.net = val; - this.requestUpdate(); + const copy = [...this.connections.value]; + (copy[conn] as ConnectionCableNetwork).CableNetwork.net = val; + this.connections.value = copy; + } + + private _pinsSelectRefMap: Map> = new Map(); + + getPinRef(index: number) : Ref { + if (!this._pinsSelectRefMap.has(index)) { + this._pinsSelectRefMap.set(index, createRef()); + } + return this._pinsSelectRefMap.get(index); + } + + forcePinSelectUpdate() { + this.forceSelectUpdate(...this._pinsSelectRefMap.values()); } renderPins(): HTMLTemplateResult { - const networks = this.connections.flatMap((connection, index) => { - return typeof connection === "object" && "CableNetwork" in connection - ? [connection.CableNetwork.net] - : []; + const networks = computed(() => { + return this.connections.value.flatMap((connection, index) => { + return typeof connection === "object" && "CableNetwork" in connection + ? [connection.CableNetwork.net] + : []; + }); }); - const visibleDeviceIds = [ + const visibleDeviceIds = computed(() => { + return [ ...new Set( - networks.flatMap((net) => window.VM.vm.networkDataDevices(net)), + networks.value.flatMap((net) => window.VM.vm.networkDataDevicesSignal(net).value), ), ]; - const visibleDevices = visibleDeviceIds.map((id) => - window.VM.vm.objects.get(id), - ); - const pinsHtml = this.pins?.map( - (pin, index) => - html` - d${index} - ${visibleDevices.map( - (device, _index) => html` - - Device ${device.obj_info.id} : - ${device.obj_info.name ?? device.obj_info.prefab} - - `, - )} - `, - ); - return html`
${pinsHtml}
`; + + }); + const visibleDevices = computed(() => { + return visibleDeviceIds.value.map((id) => + globalObjectSignalMap.get(id), + ); + }); + const visibleDevicesHtml = computed(() => { + return visibleDevices.value.map( + (device, _index) => { + device.id.subscribe((_) => { this.forcePinSelectUpdate(); }); + device.displayName.subscribe((_) => { this.forcePinSelectUpdate(); }); + return html` + + Device ${watch(device.id)} : + ${watch(device.displayName)} + + ` + } + ) + }); + visibleDeviceIds.subscribe((_) => { this.forcePinSelectUpdate(); }); + const pinsHtml = computed(() => { + this.pins.value.map( + (pin, index) => { + const pinRef = this.getPinRef(index) + return html` + d${index} + ${watch(visibleDevicesHtml)} + ` + } + ); + }); + return html`
${watch(pinsHtml)}
`; } _handleChangePin(e: CustomEvent) { const select = e.target as SlSelect; const pin = parseInt(select.getAttribute("key")!); - const val = select.value ? parseInt(select.value as string) : undefined; - this.pins[pin] = val; + const val = select.value ? parseInt(select.value as string) : null; + const copy = [...this.pins.value]; + copy[pin] = val; + this.pins.value = copy; } render() { @@ -339,13 +390,13 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { ); // Typescript doesn't like fileds defined as `X | undefined` not being present, hence cast const objInfo: ObjectInfo = { - id: this.objectId, - name: this.objectName, + id: this.objectId.value, + name: this.objectName.value, prefab: this.prefabName, } as ObjectInfo; - if (this.slots.length > 0) { - const slotOccupants: [FrozenObject, number][] = this.slots.flatMap( + if (this.slots.value.length > 0) { + const slotOccupants: [FrozenObject, number][] = this.slots.value.flatMap( (slot, index) => { return typeof slot.occupant !== "undefined" ? [[slot.occupant, index]] @@ -367,8 +418,8 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { }), ); } - objInfo.slots = Object.fromEntries( - this.slots.flatMap((slot, index) => { + objInfo.slots = new Map( + this.slots.value.flatMap((slot, index) => { const occupantId = slotOccupantIdsMap.get(index); if (typeof occupantId !== "undefined") { const info: SlotOccupantInfo = { @@ -383,9 +434,9 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { ); } - if (this.connections.length > 0) { - objInfo.connections = Object.fromEntries( - this.connections.flatMap((conn, index) => { + if (this.connections.value.length > 0) { + objInfo.connections = new Map( + this.connections.value.flatMap((conn, index) => { return typeof conn === "object" && "CableNetwork" in conn && typeof conn.CableNetwork.net !== "undefined" @@ -395,11 +446,8 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { ); } - if (this.fields.size > 0) { - objInfo.logic_values = Object.fromEntries(this.fields) as Record< - LogicType, - number - >; + if (Object.keys(this.fields.value).length > 0) { + objInfo.logic_values = new Map(Object.entries(this.fields.value) as [LogicType, number][]); } const template: FrozenObject = { diff --git a/www/src/ts/virtualMachine/index.ts b/www/src/ts/virtualMachine/index.ts index 06df283..f402d75 100644 --- a/www/src/ts/virtualMachine/index.ts +++ b/www/src/ts/virtualMachine/index.ts @@ -14,7 +14,7 @@ import * as Comlink from "comlink"; import "./baseDevice"; import "./device"; import { App } from "app"; -import { structuralEqual, TypedEventTarget } from "utils"; +import { comlinkSpecialJsonTransferHandler, structuralEqual, TypedEventTarget } from "utils"; export interface ToastMessage { variant: "warning" | "danger" | "success" | "primary" | "neutral"; icon: string; @@ -26,8 +26,10 @@ import { signal, computed, effect, + batch, } from '@lit-labs/preact-signals'; import type { Signal } from '@lit-labs/preact-signals'; +import { getJsonContext } from "./jsonErrorUtils"; export interface VirtualMachineEventMap { "vm-template-db-loaded": CustomEvent; @@ -41,16 +43,23 @@ export interface VirtualMachineEventMap { "vm-message": CustomEvent; } +Comlink.transferHandlers.set("SpecialJson", comlinkSpecialJsonTransferHandler); + +const jsonErrorRegex = /((invalid type: .*)|(missing field .*)) at line (?\d+) column (?\d+)/; + class VirtualMachine extends TypedEventTarget() { ic10vm: Comlink.Remote; templateDBPromise: Promise; templateDB: TemplateDatabase; - private _vmState: Signal; + private _vmState: Signal = signal(null); private _objects: Map>; + private _objectIds: Signal; private _circuitHolders: Map>; + private _circuitHolderIds: Signal; private _networks: Map>; + private _networkIds: Signal; private _default_network: Signal; private vm_worker: Worker; @@ -62,15 +71,17 @@ class VirtualMachine extends TypedEventTarget() { this.app = app; this._objects = new Map(); + this._objectIds = signal([]); this._circuitHolders = new Map(); + this._circuitHolderIds = signal([]); this._networks = new Map(); + this._networkIds = signal([]); + this._networkDevicesSignals = new Map(); this.setupVM(); } async setupVM() { - this.templateDBPromise = this.ic10vm.getTemplateDatabase(); - this.templateDBPromise.then((db) => this.setupTemplateDatabase(db)); this.vm_worker = new Worker(new URL("./vmWorker.ts", import.meta.url)); const loaded = (w: Worker) => @@ -82,6 +93,9 @@ class VirtualMachine extends TypedEventTarget() { this._vmState.value = await this.ic10vm.saveVMState(); window.VM.set(this); + this.templateDBPromise = this.ic10vm.getTemplateDatabase(); + this.templateDBPromise.then((db) => this.setupTemplateDatabase(db)); + effect(() => { this.updateObjects(this._vmState.value); this.updateNetworks(this._vmState.value); @@ -98,26 +112,24 @@ class VirtualMachine extends TypedEventTarget() { return this._objects; } - get objectIds(): ObjectID[] { - const ids = Array.from(this._objects.keys()); - ids.sort(); - return ids; + get objectIds(): Signal { + return this._objectIds; } get circuitHolders() { return this._circuitHolders; } - get circuitHolderIds(): ObjectID[] { - const ids = Array.from(this._circuitHolders.keys()); - ids.sort(); - return ids; + get circuitHolderIds(): Signal { + return this._circuitHolderIds; } - get networks(): ObjectID[] { - const ids = Array.from(this._networks.keys()); - ids.sort(); - return ids; + get networks() { + return this._networks; + } + + get networkIds(): Signal { + return this._networkIds; } get defaultNetwork() { @@ -187,6 +199,9 @@ class VirtualMachine extends TypedEventTarget() { } this.app.session.save(); } + + networkIds.sort(); + this._networkIds.value = networkIds; } async updateObjects(state: FrozenVM) { @@ -260,6 +275,15 @@ class VirtualMachine extends TypedEventTarget() { } this.app.session.save(); } + + objectIds.sort(); + const circuitHolderIds = Array.from(this._circuitHolders.keys()); + circuitHolderIds.sort(); + + batch(() => { + this._objectIds.value = objectIds; + this._circuitHolderIds.value = circuitHolderIds; + }); } async updateCode() { @@ -332,23 +356,52 @@ class VirtualMachine extends TypedEventTarget() { } } - handleVmError(err: Error) { - console.log("Error in Virtual Machine", err); - const message: ToastMessage = { + handleVmError(err: Error, args: { context?: string, jsonContext?: string, trace?: boolean } = {}) { + const message = args.context ? `Error in Virtual Machine {${args.context}}` : "Error in Virtual Machine"; + console.log(message, err); + if (args.jsonContext != null) { + const jsonTypeError = err.message.match(jsonErrorRegex) + if (jsonTypeError) { + console.log( + "Json Error context", + getJsonContext( + parseInt(jsonTypeError.groups["errorLine"]), + parseInt(jsonTypeError.groups["errorColumn"]), + args.jsonContext, + 100 + ) + ) + } + } + if (args.trace) { + console.trace(); + } + const toastMessage: ToastMessage = { variant: "danger", icon: "bug", title: `Error in Virtual Machine ${err.name}`, msg: err.message, id: Date.now().toString(16), }; - this.dispatchCustomEvent("vm-message", message); + this.dispatchCustomEvent("vm-message", toastMessage); } // return the data connected oject ids for a network - networkDataDevices(network: ObjectID): number[] { + networkDataDevices(network: ObjectID): ObjectID[] { return this._networks.get(network)?.peek().devices ?? []; } + private _networkDevicesSignals: Map>; + + networkDataDevicesSignal(network: ObjectID): Signal { + if (!this._networkDevicesSignals.has(network) && this._networks.get(network) != null) { + this._networkDevicesSignals.set(network, computed( + () => this._networks.get(network).value.devices ?? [] + )); + } + return this._networkDevicesSignals.get(network); + } + async changeObjectID(oldID: number, newID: number): Promise { try { await this.ic10vm.changeDeviceId(oldID, newID); @@ -581,12 +634,13 @@ class VirtualMachine extends TypedEventTarget() { async restoreVMState(state: FrozenVM) { try { + console.info("Restoring VM State from", state); await this.ic10vm.restoreVMState(state); this._objects = new Map(); this._circuitHolders = new Map(); await this.update(); } catch (e) { - this.handleVmError(e); + this.handleVmError(e, {jsonContext: JSON.stringify(state)}); } } diff --git a/www/src/ts/virtualMachine/jsonErrorUtils.ts b/www/src/ts/virtualMachine/jsonErrorUtils.ts new file mode 100644 index 0000000..3cbdb83 --- /dev/null +++ b/www/src/ts/virtualMachine/jsonErrorUtils.ts @@ -0,0 +1,192 @@ +function jsonMatchingBrace(char: string): string { + switch (char) { + case "[": + return "]"; + case "]": + return "["; + case "{": + return "}"; + case "}": + return "{"; + default: + return char; + } +} + +function readJsonContextBack(ctx: string, maxLen: number, stringCanEnd: boolean): string { + const tokenContexts: string[] = []; + let inStr: boolean = false; + let foundOpen: boolean = false; + let ctxEnd: number = 0; + let lastChar: string | null = null; + let lastNonWhitespaceChar: string | null = null; + let countStringOpens: number = 0; + let countObjectsFound: number = 0; + const chars = ctx.split(""); + for (let i = chars.length; i >= 0; i--) { + const c = chars[i]; + if (c === ":" && inStr && countStringOpens === 1 && lastNonWhitespaceChar === '"') { + inStr = false; + tokenContexts.pop(); + } + if (c === "\\" && !inStr && lastChar === '"') { + if (lastChar != null) { + tokenContexts.push(lastChar); + } + foundOpen = false; + inStr = true; + continue; + } + if (c === '"') { + if (inStr && (tokenContexts.length > 0 ? tokenContexts[tokenContexts.length - 1] : null) === c) { + inStr = false; + if (stringCanEnd) { + foundOpen = true; + } + tokenContexts.pop(); + } else { + inStr = true; + countStringOpens += 1; + tokenContexts.push(c); + } + } + if ((c === "]" || c === "}") && !inStr) { + tokenContexts.push(c); + } + if ( + (c === "[" || c === "{") + && !inStr + && (tokenContexts.length > 0 ? tokenContexts[tokenContexts.length - 1] : null) === jsonMatchingBrace(c) + ) { + tokenContexts.pop(); + foundOpen = true; + } + if ( + (c === ",") + && !inStr + && (lastNonWhitespaceChar === "[" || lastNonWhitespaceChar === "{" || lastNonWhitespaceChar === '"') + ) { + foundOpen = true; + } + + lastChar = c; + if (!(' \t\n\r\v'.indexOf(c) > -1)) { + lastNonWhitespaceChar = c; + } + if (foundOpen && !tokenContexts.length) { + countObjectsFound += 1; + } + if (countObjectsFound >= 2) { + ctxEnd = i; + break; + } + } + if (ctxEnd > 0) { + ctx = ctx.substring(ctxEnd); + } + if (maxLen > 0 && ctx.length > maxLen) { + ctx = "... " + ctx.substring(maxLen); + } + return ctx; +} + +function readJsonContextForward(ctx: string, maxLen: number, stringCanEnd: boolean): string { + const tokenContexts: string[] = []; + let inStr: boolean = false; + let foundClose: boolean = false; + let ctxEnd: number = 0; + let lastChar: string | null = null; + let lastNonWhitespaceChar: string | null = null; + let countStringOpens: number = 0; + let countObjectsFound: number = 0; + const chars = ctx.split(""); + for (let i = 0; i < chars.length; i++) { + const c = chars[i]; + if (c === ":" && inStr && countStringOpens === 1 && lastNonWhitespaceChar === '"') { + inStr = false; + tokenContexts.pop(); + } + if (c === "\\" && !inStr && lastChar === "'") { + if (lastChar != null) { + tokenContexts.push(lastChar); + } + foundClose = false; + inStr = true; + continue; + } + if (c === '"') { + if ( + inStr + && (tokenContexts.length > 0 ? tokenContexts[tokenContexts.length - 1] : null) === c + ) { + inStr = false; + if (stringCanEnd) { + foundClose = true; + } + tokenContexts.pop(); + } else { + inStr = true; + countStringOpens += 1; + tokenContexts.push(c); + } + } + if ( + (c === "]" || c === "}") + && !inStr + ) { + tokenContexts.pop(); + foundClose = true; + } + if ( + (c === "[" || c === "{") + && !inStr + && (tokenContexts.length > 0 ? tokenContexts[tokenContexts.length - 1] : null) === jsonMatchingBrace(c) + ) { + tokenContexts.push(c); + } + if ( + (c === ",") + && !inStr + && (lastNonWhitespaceChar === "]" || lastNonWhitespaceChar === "}" || lastNonWhitespaceChar === '"') + ) { + foundClose = true; + } + + lastChar = c; + if (!(' \t\n\r\v'.indexOf(c) > -1)) { + lastNonWhitespaceChar = c; + } + if (foundClose && !tokenContexts.length) { + countObjectsFound += 1; + } + if (countObjectsFound >= 2) { + ctxEnd = i; + break; + } + } + if (ctxEnd > 0) { + ctx = ctx.substring(0, ctxEnd); + } + if (maxLen > 0 && ctx.length > maxLen) { + ctx = ctx.substring(0, maxLen) + " ..."; + } + return ctx +} + +export function getJsonContext(errLine: number, errColumn: number, body: string, maxLen: number): string { + if (!body.length) { + return body; + } + + const stringCanEnd = body[0] !== '[' && body[0] !== "{"; + + const lineOffset = (body.split("").map((c, i) => [c, i]).filter(([c, _]) => c === "\n")[errLine - 1] as [string, number] ?? ["", 0] as [string, number])[1]; + + const preLine = body.substring(0, lineOffset); + const ctxLine = body.substring(lineOffset); + + const ctxBefore = preLine + ctxLine.substring(0, errColumn); + const ctxAfter = ctxLine.substring(errColumn); + + return readJsonContextBack(ctxBefore, maxLen, stringCanEnd) + "<~~" + readJsonContextForward(ctxAfter, maxLen, stringCanEnd); +} diff --git a/www/src/ts/virtualMachine/prefabDatabase.ts b/www/src/ts/virtualMachine/prefabDatabase.ts index 68f5796..a6ef4f4 100644 --- a/www/src/ts/virtualMachine/prefabDatabase.ts +++ b/www/src/ts/virtualMachine/prefabDatabase.ts @@ -214,7 +214,7 @@ export default { } ], "consumer_info": { - "consumed_resouces": [ + "consumed_resources": [ "ItemCharcoal", "ItemCobaltOre", "ItemFern", @@ -279,7 +279,7 @@ export default { } ], "consumer_info": { - "consumed_resouces": [ + "consumed_resources": [ "ItemCorn", "ItemEgg", "ItemFertilizedEgg", @@ -322,7 +322,7 @@ export default { } ], "consumer_info": { - "consumed_resouces": [ + "consumed_resources": [ "ItemCookedCondensedMilk", "ItemCookedCorn", "ItemCookedMushroom", @@ -361,7 +361,7 @@ export default { } ], "consumer_info": { - "consumed_resouces": [ + "consumed_resources": [ "ItemSoyOil", "ReagentColorBlue", "ReagentColorGreen", @@ -468,7 +468,7 @@ export default { } ], "consumer_info": { - "consumed_resouces": [ + "consumed_resources": [ "ItemWheat", "ItemSugarCane", "ItemCocoaTree", @@ -722,7 +722,7 @@ export default { "prefab_name": "CartridgeAtmosAnalyser", "prefab_hash": -1550278665, "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.", - "name": "Atmos Analyzer" + "name": "Cartridge (Atmos Analyzer)" }, "item": { "consumable": false, @@ -738,7 +738,7 @@ export default { "prefab_name": "CartridgeConfiguration", "prefab_hash": -932136011, "desc": "", - "name": "Configuration" + "name": "Cartridge (Configuration)" }, "item": { "consumable": false, @@ -754,7 +754,7 @@ export default { "prefab_name": "CartridgeElectronicReader", "prefab_hash": -1462180176, "desc": "", - "name": "eReader" + "name": "Cartridge (eReader)" }, "item": { "consumable": false, @@ -770,7 +770,7 @@ export default { "prefab_name": "CartridgeGPS", "prefab_hash": -1957063345, "desc": "", - "name": "GPS" + "name": "Cartridge (GPS)" }, "item": { "consumable": false, @@ -786,7 +786,7 @@ export default { "prefab_name": "CartridgeGuide", "prefab_hash": 872720793, "desc": "", - "name": "Guide" + "name": "Cartridge (Guide)" }, "item": { "consumable": false, @@ -802,7 +802,7 @@ export default { "prefab_name": "CartridgeMedicalAnalyser", "prefab_hash": -1116110181, "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.", - "name": "Medical Analyzer" + "name": "Cartridge (Medical Analyzer)" }, "item": { "consumable": false, @@ -818,7 +818,7 @@ export default { "prefab_name": "CartridgeNetworkAnalyser", "prefab_hash": 1606989119, "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.", - "name": "Network Analyzer" + "name": "Cartridge (Network Analyzer)" }, "item": { "consumable": false, @@ -834,7 +834,7 @@ export default { "prefab_name": "CartridgeOreScanner", "prefab_hash": -1768732546, "desc": "When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet.", - "name": "Ore Scanner" + "name": "Cartridge (Ore Scanner)" }, "item": { "consumable": false, @@ -850,7 +850,7 @@ export default { "prefab_name": "CartridgeOreScannerColor", "prefab_hash": 1738236580, "desc": "When inserted into a Handheld Tablet the scanner will display minerals hidden underground in different colors on the tablet.", - "name": "Ore Scanner (Color)" + "name": "Cartridge (Ore Scanner Color)" }, "item": { "consumable": false, @@ -866,7 +866,7 @@ export default { "prefab_name": "CartridgePlantAnalyser", "prefab_hash": 1101328282, "desc": "", - "name": "Cartridge Plant Analyser" + "name": "Cartridge (Plant Analyser)" }, "item": { "consumable": false, @@ -882,7 +882,7 @@ export default { "prefab_name": "CartridgeTracker", "prefab_hash": 81488783, "desc": "", - "name": "Tracker" + "name": "Cartridge (Tracker)" }, "item": { "consumable": false, @@ -1141,7 +1141,7 @@ export default { "consumable": false, "ingredient": false, "max_quantity": 1, - "slot_class": "None", + "slot_class": "Crate", "sorting_class": "Storage" }, "slots": [ @@ -1466,6 +1466,10 @@ export default { { "name": "Battery", "typ": "Battery" + }, + { + "name": "Liquid Canister", + "typ": "LiquidCanister" } ] }, @@ -1481,7 +1485,7 @@ export default { "consumable": false, "ingredient": false, "max_quantity": 1, - "slot_class": "None", + "slot_class": "Crate", "sorting_class": "Storage" }, "slots": [ @@ -1585,7 +1589,7 @@ export default { "consumable": false, "ingredient": false, "max_quantity": 1, - "slot_class": "None", + "slot_class": "Portables", "sorting_class": "Atmospherics" }, "thermal_info": { @@ -1604,14 +1608,14 @@ export default { "prefab": { "prefab_name": "DynamicGasCanisterCarbonDioxide", "prefab_hash": -322413931, - "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.", + "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.", "name": "Portable Gas Tank (CO2)" }, "item": { "consumable": false, "ingredient": false, "max_quantity": 1, - "slot_class": "None", + "slot_class": "Portables", "sorting_class": "Default" }, "thermal_info": { @@ -1637,7 +1641,7 @@ export default { "consumable": false, "ingredient": false, "max_quantity": 1, - "slot_class": "None", + "slot_class": "Portables", "sorting_class": "Default" }, "thermal_info": { @@ -1663,7 +1667,7 @@ export default { "consumable": false, "ingredient": false, "max_quantity": 1, - "slot_class": "None", + "slot_class": "Portables", "sorting_class": "Default" }, "thermal_info": { @@ -1689,7 +1693,7 @@ export default { "consumable": false, "ingredient": false, "max_quantity": 1, - "slot_class": "None", + "slot_class": "Portables", "sorting_class": "Default" }, "thermal_info": { @@ -1715,7 +1719,7 @@ export default { "consumable": false, "ingredient": false, "max_quantity": 1, - "slot_class": "None", + "slot_class": "Portables", "sorting_class": "Default" }, "thermal_info": { @@ -1741,7 +1745,7 @@ export default { "consumable": false, "ingredient": false, "max_quantity": 1, - "slot_class": "None", + "slot_class": "Portables", "sorting_class": "Default" }, "thermal_info": { @@ -1767,7 +1771,7 @@ export default { "consumable": false, "ingredient": false, "max_quantity": 1, - "slot_class": "None", + "slot_class": "Portables", "sorting_class": "Default" }, "thermal_info": { @@ -1793,7 +1797,7 @@ export default { "consumable": false, "ingredient": false, "max_quantity": 1, - "slot_class": "None", + "slot_class": "Portables", "sorting_class": "Default" }, "thermal_info": { @@ -1819,7 +1823,7 @@ export default { "consumable": false, "ingredient": false, "max_quantity": 1, - "slot_class": "None", + "slot_class": "Portables", "sorting_class": "Default" }, "thermal_info": { @@ -1845,7 +1849,7 @@ export default { "consumable": false, "ingredient": false, "max_quantity": 1, - "slot_class": "None", + "slot_class": "Portables", "sorting_class": "Atmospherics" }, "thermal_info": { @@ -1871,7 +1875,7 @@ export default { "consumable": false, "ingredient": false, "max_quantity": 1, - "slot_class": "None", + "slot_class": "Portables", "sorting_class": "Default" }, "thermal_info": { @@ -1897,7 +1901,7 @@ export default { "consumable": false, "ingredient": false, "max_quantity": 1, - "slot_class": "None", + "slot_class": "Portables", "sorting_class": "Atmospherics" }, "thermal_info": { @@ -2058,7 +2062,7 @@ export default { "consumable": false, "ingredient": false, "max_quantity": 1, - "slot_class": "None", + "slot_class": "Portables", "sorting_class": "Atmospherics" }, "thermal_info": { @@ -2084,7 +2088,7 @@ export default { "consumable": false, "ingredient": false, "max_quantity": 1, - "slot_class": "None", + "slot_class": "Portables", "sorting_class": "Atmospherics" }, "thermal_info": { @@ -2110,7 +2114,7 @@ export default { "consumable": false, "ingredient": false, "max_quantity": 1, - "slot_class": "None", + "slot_class": "Portables", "sorting_class": "Atmospherics" }, "thermal_info": { @@ -2691,7 +2695,7 @@ export default { "prefab": { "prefab_name": "ItemAdvancedTablet", "prefab_hash": 1722785341, - "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", + "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", "name": "Advanced Tablet" }, "item": { @@ -2906,7 +2910,7 @@ export default { "prefab_name": "ItemAreaPowerControl", "prefab_hash": 1757673317, "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.", - "name": "Kit (Power Controller)" + "name": "Kit (Area Power Controller)" }, "item": { "consumable": false, @@ -3257,7 +3261,7 @@ export default { "prefab": { "prefab_name": "ItemCableCoilHeavy", "prefab_hash": 2060134443, - "desc": "Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW.", + "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.", "name": "Cable Coil (Heavy)" }, "item": { @@ -3380,6 +3384,90 @@ export default { "sorting_class": "Food" } }, + "ItemCerealBarBag": { + "templateType": "ItemSlots", + "prefab": { + "prefab_name": "ItemCerealBarBag", + "prefab_hash": -75205276, + "desc": "", + "name": "Cereal Bar Bag" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Storage" + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, + "ItemCerealBarBox": { + "templateType": "ItemSlots", + "prefab": { + "prefab_name": "ItemCerealBarBox", + "prefab_hash": -401648353, + "desc": "", + "name": "Cereal Bar Box" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Storage" + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, "ItemCharcoal": { "templateType": "Item", "prefab": { @@ -3765,7 +3853,7 @@ export default { "ingredient": true, "max_quantity": 10, "reagents": { - "Soy": 5.0 + "Soy": 1.0 }, "slot_class": "None", "sorting_class": "Food" @@ -4345,7 +4433,7 @@ export default { } ], "suit_info": { - "hygine_reduction_multiplier": 1.0, + "hygiene_reduction_multiplier": 1.0, "waste_max_pressure": 4053.0 } }, @@ -4442,6 +4530,48 @@ export default { }, "slots": [] }, + "ItemEmergencySuppliesBox": { + "templateType": "ItemSlots", + "prefab": { + "prefab_name": "ItemEmergencySuppliesBox", + "prefab_hash": 851103794, + "desc": "", + "name": "Emergency Supplies" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, "ItemEmergencyToolBelt": { "templateType": "ItemSlots", "prefab": { @@ -4592,7 +4722,7 @@ export default { } ], "suit_info": { - "hygine_reduction_multiplier": 1.0, + "hygiene_reduction_multiplier": 1.0, "waste_max_pressure": 4053.0 } }, @@ -4602,14 +4732,14 @@ export default { "prefab_name": "ItemExplosive", "prefab_hash": 235361649, "desc": "", - "name": "Remote Explosive" + "name": "Demolition Charge" }, "item": { "consumable": false, "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" + "max_quantity": 3, + "slot_class": "Tool", + "sorting_class": "Tools" } }, "ItemFern": { @@ -6459,7 +6589,7 @@ export default { } ], "suit_info": { - "hygine_reduction_multiplier": 1.5, + "hygiene_reduction_multiplier": 1.5, "waste_max_pressure": 4053.0 }, "memory": { @@ -6711,6 +6841,28 @@ export default { "sorting_class": "Resources" } }, + "ItemInsulatedCanisterPackage": { + "templateType": "ItemSlots", + "prefab": { + "prefab_name": "ItemInsulatedCanisterPackage", + "prefab_hash": 1485675617, + "desc": "", + "name": "Insulated Canister Package" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Default" + }, + "slots": [ + { + "name": "", + "typ": "None" + } + ] + }, "ItemInsulation": { "templateType": "Item", "prefab": { @@ -8273,6 +8425,22 @@ export default { "sorting_class": "Kits" } }, + "ItemKitLinearRail": { + "templateType": "Item", + "prefab": { + "prefab_name": "ItemKitLinearRail", + "prefab_hash": -441759975, + "desc": "", + "name": "Kit (Linear Rail)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, "ItemKitLiquidRegulator": { "templateType": "Item", "prefab": { @@ -8871,7 +9039,7 @@ export default { "prefab_name": "ItemKitReinforcedWindows", "prefab_hash": 1459985302, "desc": "", - "name": "Kit (Reinforced Windows)" + "name": "Kit (Reinforced Walls)" }, "item": { "consumable": false, @@ -8913,6 +9081,38 @@ export default { "sorting_class": "Kits" } }, + "ItemKitRobotArmDoor": { + "templateType": "Item", + "prefab": { + "prefab_name": "ItemKitRobotArmDoor", + "prefab_hash": -753675589, + "desc": "", + "name": "Kit (Linear Rail Door)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 10, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitRoboticArm": { + "templateType": "Item", + "prefab": { + "prefab_name": "ItemKitRoboticArm", + "prefab_hash": -1228287398, + "desc": "", + "name": "Kit (LArRE)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, "ItemKitRocketAvionics": { "templateType": "Item", "prefab": { @@ -9831,7 +10031,7 @@ export default { "prefab_name": "ItemKitWindowShutter", "prefab_hash": 1779979754, "desc": "", - "name": "Kit (Window Shutter)" + "name": "Kit (Composite Window Shutter)" }, "item": { "consumable": false, @@ -10117,7 +10317,7 @@ export default { "prefab": { "prefab_name": "ItemLiquidPipeValve", "prefab_hash": -2126113312, - "desc": "This kit creates a Liquid Valve.", + "desc": "This kit creates a Valve (Liquid).", "name": "Kit (Liquid Pipe Valve)" }, "item": { @@ -10908,9 +11108,9 @@ export default { "item": { "consumable": false, "ingredient": false, - "max_quantity": 1, - "slot_class": "None", - "sorting_class": "Default" + "max_quantity": 3, + "slot_class": "Tool", + "sorting_class": "Tools" } }, "ItemMiningDrill": { @@ -11039,6 +11239,48 @@ export default { } ] }, + "ItemMiningPackage": { + "templateType": "ItemSlots", + "prefab": { + "prefab_name": "ItemMiningPackage", + "prefab_hash": 384478267, + "desc": "", + "name": "Mining Supplies Package" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Storage" + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, "ItemMkIIToolbelt": { "templateType": "ItemLogic", "prefab": { @@ -11379,8 +11621,8 @@ export default { "prefab": { "prefab_name": "ItemPassiveVent", "prefab_hash": 238631271, - "desc": "This kit creates a Passive Vent among other variants.", - "name": "Passive Vent" + "desc": "This kit creates a Kit (Passive Vent) among other variants.", + "name": "Kit (Passive Vent)" }, "item": { "consumable": false, @@ -11635,7 +11877,7 @@ export default { "prefab": { "prefab_name": "ItemPipeValve", "prefab_hash": 799323450, - "desc": "This kit creates a Valve.", + "desc": "This kit creates a Valve (Gas).", "name": "Kit (Pipe Valve)" }, "item": { @@ -11857,6 +12099,48 @@ export default { "sorting_class": "Resources" } }, + "ItemPortablesPackage": { + "templateType": "ItemSlots", + "prefab": { + "prefab_name": "ItemPortablesPackage", + "prefab_hash": 1459105919, + "desc": "", + "name": "Portables Package" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Storage" + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, "ItemPotato": { "templateType": "Item", "prefab": { @@ -12287,7 +12571,7 @@ export default { "prefab": { "prefab_name": "ItemRemoteDetonator", "prefab_hash": 678483886, - "desc": "", + "desc": "0.Mode0\n1.Mode1", "name": "Remote Detonator" }, "item": { @@ -12313,10 +12597,17 @@ export default { }, "logic_types": { "Power": "Read", + "Mode": "ReadWrite", "Error": "Read", + "Activate": "ReadWrite", + "Lock": "ReadWrite", "On": "ReadWrite", "ReferenceId": "Read" }, + "modes": { + "0": "Mode0", + "1": "Mode1" + }, "transmission_receiver": false, "wireless_logic": false, "circuit_holder": false @@ -12328,6 +12619,48 @@ export default { } ] }, + "ItemResidentialPackage": { + "templateType": "ItemSlots", + "prefab": { + "prefab_name": "ItemResidentialPackage", + "prefab_hash": 509629504, + "desc": "", + "name": "Residential Supplies Package" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Storage" + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, "ItemReusableFireExtinguisher": { "templateType": "ItemSlots", "prefab": { @@ -13513,7 +13846,7 @@ export default { "prefab": { "prefab_name": "ItemTablet", "prefab_hash": -229808600, - "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.", + "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.", "name": "Handheld Tablet" }, "item": { @@ -13757,7 +14090,7 @@ export default { "prefab": { "prefab_name": "ItemVolatiles", "prefab_hash": 1253102035, - "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", + "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", "name": "Ice (Volatiles)" }, "item": { @@ -13851,6 +14184,90 @@ export default { "sorting_class": "Default" } }, + "ItemWaterBottleBag": { + "templateType": "ItemSlots", + "prefab": { + "prefab_name": "ItemWaterBottleBag", + "prefab_hash": 1476318823, + "desc": "", + "name": "Water Bottle Bag" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Storage" + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, + "ItemWaterBottlePackage": { + "templateType": "ItemSlots", + "prefab": { + "prefab_name": "ItemWaterBottlePackage", + "prefab_hash": -971586619, + "desc": "", + "name": "Water Bottle Package" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Storage" + }, + "slots": [ + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + }, + { + "name": "", + "typ": "None" + } + ] + }, "ItemWaterPipeDigitalValve": { "templateType": "Item", "prefab": { @@ -14047,7 +14464,7 @@ export default { "prefab_name": "ItemWreckageAirConditioner1", "prefab_hash": -1826023284, "desc": "", - "name": "Wreckage Air Conditioner" + "name": "Wreckage" }, "item": { "consumable": false, @@ -14063,7 +14480,7 @@ export default { "prefab_name": "ItemWreckageAirConditioner2", "prefab_hash": 169888054, "desc": "", - "name": "Wreckage Air Conditioner" + "name": "Wreckage" }, "item": { "consumable": false, @@ -14079,7 +14496,7 @@ export default { "prefab_name": "ItemWreckageHydroponicsTray1", "prefab_hash": -310178617, "desc": "", - "name": "Wreckage Hydroponics Tray" + "name": "Wreckage" }, "item": { "consumable": false, @@ -14095,7 +14512,7 @@ export default { "prefab_name": "ItemWreckageLargeExtendableRadiator01", "prefab_hash": -997763, "desc": "", - "name": "Wreckage Large Extendable Radiator" + "name": "Wreckage" }, "item": { "consumable": false, @@ -14111,7 +14528,7 @@ export default { "prefab_name": "ItemWreckageStructureRTG1", "prefab_hash": 391453348, "desc": "", - "name": "Wreckage Structure RTG" + "name": "Wreckage" }, "item": { "consumable": false, @@ -14127,7 +14544,7 @@ export default { "prefab_name": "ItemWreckageStructureWeatherStation001", "prefab_hash": -834664349, "desc": "", - "name": "Wreckage Structure Weather Station" + "name": "Wreckage" }, "item": { "consumable": false, @@ -14143,7 +14560,7 @@ export default { "prefab_name": "ItemWreckageStructureWeatherStation002", "prefab_hash": 1464424921, "desc": "", - "name": "Wreckage Structure Weather Station" + "name": "Wreckage" }, "item": { "consumable": false, @@ -14159,7 +14576,7 @@ export default { "prefab_name": "ItemWreckageStructureWeatherStation003", "prefab_hash": 542009679, "desc": "", - "name": "Wreckage Structure Weather Station" + "name": "Wreckage" }, "item": { "consumable": false, @@ -14175,7 +14592,7 @@ export default { "prefab_name": "ItemWreckageStructureWeatherStation004", "prefab_hash": -1104478996, "desc": "", - "name": "Wreckage Structure Weather Station" + "name": "Wreckage" }, "item": { "consumable": false, @@ -14191,7 +14608,7 @@ export default { "prefab_name": "ItemWreckageStructureWeatherStation005", "prefab_hash": -919745414, "desc": "", - "name": "Wreckage Structure Weather Station" + "name": "Wreckage" }, "item": { "consumable": false, @@ -14207,7 +14624,7 @@ export default { "prefab_name": "ItemWreckageStructureWeatherStation006", "prefab_hash": 1344576960, "desc": "", - "name": "Wreckage Structure Weather Station" + "name": "Wreckage" }, "item": { "consumable": false, @@ -14223,7 +14640,7 @@ export default { "prefab_name": "ItemWreckageStructureWeatherStation007", "prefab_hash": 656649558, "desc": "", - "name": "Wreckage Structure Weather Station" + "name": "Wreckage" }, "item": { "consumable": false, @@ -14239,7 +14656,7 @@ export default { "prefab_name": "ItemWreckageStructureWeatherStation008", "prefab_hash": -1214467897, "desc": "", - "name": "Wreckage Structure Weather Station" + "name": "Wreckage" }, "item": { "consumable": false, @@ -14255,7 +14672,7 @@ export default { "prefab_name": "ItemWreckageTurbineGenerator1", "prefab_hash": -1662394403, "desc": "", - "name": "Wreckage Turbine Generator" + "name": "Wreckage" }, "item": { "consumable": false, @@ -14271,7 +14688,7 @@ export default { "prefab_name": "ItemWreckageTurbineGenerator2", "prefab_hash": 98602599, "desc": "", - "name": "Wreckage Turbine Generator" + "name": "Wreckage" }, "item": { "consumable": false, @@ -14287,7 +14704,7 @@ export default { "prefab_name": "ItemWreckageTurbineGenerator3", "prefab_hash": 1927790321, "desc": "", - "name": "Wreckage Turbine Generator" + "name": "Wreckage" }, "item": { "consumable": false, @@ -14303,7 +14720,7 @@ export default { "prefab_name": "ItemWreckageWallCooler1", "prefab_hash": -1682930158, "desc": "", - "name": "Wreckage Wall Cooler" + "name": "Wreckage" }, "item": { "consumable": false, @@ -14319,7 +14736,7 @@ export default { "prefab_name": "ItemWreckageWallCooler2", "prefab_hash": 45733800, "desc": "", - "name": "Wreckage Wall Cooler" + "name": "Wreckage" }, "item": { "consumable": false, @@ -14443,39 +14860,39 @@ export default { "slots": [ { "name": "", - "typ": "None" + "typ": "Crate" }, { "name": "", - "typ": "None" + "typ": "Crate" }, { "name": "", - "typ": "None" + "typ": "Crate" }, { "name": "", - "typ": "None" + "typ": "Crate" }, { "name": "", - "typ": "None" + "typ": "Crate" }, { "name": "", - "typ": "None" + "typ": "Crate" }, { "name": "", - "typ": "None" + "typ": "Portables" }, { "name": "", - "typ": "None" + "typ": "Portables" }, { - "name": "Entity", - "typ": "Entity" + "name": "", + "typ": "Crate" } ] }, @@ -15222,7 +15639,7 @@ export default { "prefab": { "prefab_name": "MotherboardComms", "prefab_hash": -337075633, - "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.", + "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.", "name": "Communications Motherboard" }, "item": { @@ -15238,7 +15655,7 @@ export default { "prefab": { "prefab_name": "MotherboardLogic", "prefab_hash": 502555944, - "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.", + "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.", "name": "Logic Motherboard" }, "item": { @@ -15270,7 +15687,7 @@ export default { "prefab": { "prefab_name": "MotherboardProgrammableChip", "prefab_hash": -161107071, - "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.", + "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.", "name": "IC Editor Motherboard" }, "item": { @@ -15302,7 +15719,7 @@ export default { "prefab": { "prefab_name": "MotherboardSorter", "prefab_hash": -1908268220, - "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.", + "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.", "name": "Sorter Motherboard" }, "item": { @@ -16713,7 +17130,7 @@ export default { "prefab": { "prefab_name": "StructureActiveVent", "prefab_hash": -1129453144, - "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 ...", + "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...", "name": "Active Vent" }, "structure": { @@ -17076,7 +17493,7 @@ export default { "has_reagents": true }, "consumer_info": { - "consumed_resouces": [ + "consumed_resources": [ "ItemCookedCondensedMilk", "ItemCookedCorn", "ItemCookedMushroom", @@ -17170,7 +17587,7 @@ export default { }, "count_types": 3, "reagents": { - "Mushroom": 8.0, + "Mushroom": 5.0, "Oil": 1.0, "Steel": 1.0 } @@ -17306,7 +17723,7 @@ export default { "count_types": 3, "reagents": { "Oil": 1.0, - "Pumpkin": 5.0, + "Pumpkin": 2.0, "Steel": 1.0 } }, @@ -18431,7 +18848,7 @@ export default { "has_reagents": true }, "consumer_info": { - "consumed_resouces": [ + "consumed_resources": [ "ItemAstroloyIngot", "ItemConstantanIngot", "ItemCopperIngot", @@ -18482,6 +18899,31 @@ export default { "Silicon": 2.0 } }, + "ItemAstroloySheets": { + "tier": "TierOne", + "time": 3.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Astroloy": 3.0 + } + }, "ItemCableCoil": { "tier": "TierOne", "time": 5.0, @@ -19377,7 +19819,7 @@ export default { }, "count_types": 1, "reagents": { - "Steel": 2.0 + "Astroloy": 2.0 } }, "ItemKitRespawnPointWallMounted": { @@ -19406,6 +19848,33 @@ export default { "Iron": 3.0 } }, + "ItemKitRobotArmDoor": { + "tier": "TierTwo", + "time": 10.0, + "energy": 400.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 3.0, + "Steel": 12.0 + } + }, "ItemKitRocketManufactory": { "tier": "TierOne", "time": 120.0, @@ -19864,7 +20333,7 @@ export default { }, "count_types": 2, "reagents": { - "Iron": 1.0, + "Solder": 1.0, "Steel": 2.0 } }, @@ -20504,7 +20973,7 @@ export default { "has_reagents": true }, "consumer_info": { - "consumed_resouces": [ + "consumed_resources": [ "ItemCorn", "ItemEgg", "ItemFertilizedEgg", @@ -20806,7 +21275,7 @@ export default { }, "count_types": 1, "reagents": { - "Rice": 3.0 + "Rice": 1.0 } }, "ItemCookedSoybean": { @@ -20831,7 +21300,7 @@ export default { }, "count_types": 1, "reagents": { - "Soy": 5.0 + "Soy": 1.0 } }, "ItemCookedTomato": { @@ -22507,7 +22976,7 @@ export default { "prefab": { "prefab_name": "StructureBlockBed", "prefab_hash": 697908419, - "desc": "Description coming.", + "desc": "", "name": "Block Bed" }, "structure": { @@ -25296,7 +25765,7 @@ export default { "prefab_name": "StructureChuteBin", "prefab_hash": -850484480, "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.", - "name": "Chute Bin" + "name": "Chute Import Bin" }, "structure": { "small_grid": true @@ -25679,6 +26148,73 @@ export default { "has_reagents": false } }, + "StructureChuteExportBin": { + "templateType": "StructureLogicDevice", + "prefab": { + "prefab_name": "StructureChuteExportBin", + "prefab_hash": 1957571043, + "desc": "", + "name": "Chute Export Bin" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Input", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "Chute", + "role": "Input" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, "StructureChuteFlipFlopSplitter": { "templateType": "StructureSlots", "prefab": { @@ -26741,13 +27277,154 @@ export default { "small_grid": false } }, + "StructureCompositeWindowShutter": { + "templateType": "Structure", + "prefab": { + "prefab_name": "StructureCompositeWindowShutter", + "prefab_hash": 1580592998, + "desc": "", + "name": "Composite Window Shutter" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeWindowShutterConnector": { + "templateType": "Structure", + "prefab": { + "prefab_name": "StructureCompositeWindowShutterConnector", + "prefab_hash": 791407452, + "desc": "", + "name": "Composite Window Shutter Connector" + }, + "structure": { + "small_grid": false + } + }, + "StructureCompositeWindowShutterController": { + "templateType": "StructureLogicDevice", + "prefab": { + "prefab_name": "StructureCompositeWindowShutterController", + "prefab_hash": -2078371660, + "desc": "", + "name": "Composite Window Shutter Controller" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, "StructureComputer": { "templateType": "StructureLogicDevice", "prefab": { "prefab_name": "StructureComputer", "prefab_hash": -626563514, - "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", - "name": "Computer" + "desc": "This unit operates with a wide range of motherboards.", + "name": "Computer (Modern)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {}, + "2": {} + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Lock": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Data Disk", + "typ": "DataDisk" + }, + { + "name": "Data Disk", + "typ": "DataDisk" + }, + { + "name": "Motherboard", + "typ": "Motherboard" + } + ], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureComputerUpright": { + "templateType": "StructureLogicDevice", + "prefab": { + "prefab_name": "StructureComputerUpright", + "prefab_hash": -405593895, + "desc": "This unit operates with a wide range of motherboards.", + "name": "Computer (Retro)" }, "structure": { "small_grid": true @@ -27528,7 +28205,7 @@ export default { "slots": [ { "name": "Container Slot", - "typ": "None" + "typ": "Crate" } ] }, @@ -28077,8 +28754,8 @@ export default { "prefab": { "prefab_name": "StructureDrinkingFountain", "prefab_hash": 1968371847, - "desc": "", - "name": "" + "desc": "The Drinking Fountain can be interacted with directly to increase hydration. It needs a Water supply.", + "name": "Drinking Fountain" }, "structure": { "small_grid": true @@ -28333,7 +29010,7 @@ export default { "has_reagents": true }, "consumer_info": { - "consumed_resouces": [ + "consumed_resources": [ "ItemAstroloyIngot", "ItemConstantanIngot", "ItemCopperIngot", @@ -30501,6 +31178,31 @@ export default { "Waspaloy": 20.0 } }, + "ItemKitLinearRail": { + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 3.0 + } + }, "ItemKitLogicCircuit": { "tier": "TierOne", "time": 40.0, @@ -30793,6 +31495,33 @@ export default { "Iron": 9.0 } }, + "ItemKitRoboticArm": { + "tier": "TierOne", + "time": 150.0, + "energy": 10000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Astroloy": 15.0, + "Hastelloy": 5.0, + "Inconel": 10.0 + } + }, "ItemKitSatelliteDish": { "tier": "TierOne", "time": 120.0, @@ -30822,8 +31551,8 @@ export default { }, "ItemKitSensor": { "tier": "TierOne", - "time": 5.0, - "energy": 10.0, + "time": 10.0, + "energy": 500.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -32450,7 +33179,7 @@ export default { "prefab": { "prefab_name": "StructureEmergencyButton", "prefab_hash": 1668452680, - "desc": "Description coming.", + "desc": "", "name": "Important Button" }, "structure": { @@ -34673,7 +35402,7 @@ export default { "has_reagents": true }, "consumer_info": { - "consumed_resouces": [ + "consumed_resources": [ "ItemAstroloyIngot", "ItemConstantanIngot", "ItemCopperIngot", @@ -36465,33 +37194,6 @@ export default { "Iron": 5.0 } }, - "ItemKitSensor": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, "ItemKitShower": { "tier": "TierOne", "time": 30.0, @@ -39238,7 +39940,7 @@ export default { "prefab": { "prefab_name": "StructureLargeSatelliteDish", "prefab_hash": 1913391845, - "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.", + "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.", "name": "Large Satellite Dish" }, "structure": { @@ -39445,7 +40147,7 @@ export default { "prefab": { "prefab_name": "StructureLightRound", "prefab_hash": 1514476632, - "desc": "Description coming.", + "desc": "", "name": "Light Round" }, "structure": { @@ -39489,7 +40191,7 @@ export default { "prefab": { "prefab_name": "StructureLightRoundAngled", "prefab_hash": 1592905386, - "desc": "Description coming.", + "desc": "", "name": "Light Round (Angled)" }, "structure": { @@ -39533,7 +40235,7 @@ export default { "prefab": { "prefab_name": "StructureLightRoundSmall", "prefab_hash": 1436121888, - "desc": "Description coming.", + "desc": "", "name": "Light Round (Small)" }, "structure": { @@ -39745,53 +40447,6 @@ export default { "has_reagents": false } }, - "StructureLiquidPipeOneWayValve": { - "templateType": "StructureLogicDevice", - "prefab": { - "prefab_name": "StructureLiquidPipeOneWayValve", - "prefab_hash": -782453061, - "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..", - "name": "One Way Valve (Liquid)" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "PipeLiquid", - "role": "Input" - }, - { - "typ": "PipeLiquid", - "role": "Output" - } - ], - "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 - } - }, "StructureLiquidPipeRadiator": { "templateType": "StructureLogicDevice", "prefab": { @@ -40474,7 +41129,7 @@ export default { "prefab_name": "StructureLiquidValve", "prefab_hash": 1849974453, "desc": "", - "name": "Liquid Valve" + "name": "Valve (Liquid)" }, "structure": { "small_grid": true @@ -43833,7 +44488,7 @@ export default { "prefab": { "prefab_name": "StructurePipeAnalysizer", "prefab_hash": 435685051, - "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.", + "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.", "name": "Pipe Analyzer" }, "structure": { @@ -44248,6 +44903,54 @@ export default { "radiation_factor": 0.0005 } }, + "StructurePipeLiquidOneWayValveLever": { + "templateType": "StructureLogicDevice", + "prefab": { + "prefab_name": "StructurePipeLiquidOneWayValveLever", + "prefab_hash": -523832822, + "desc": "", + "name": "One Way Valve (Liquid)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Setting": "ReadWrite", + "Maximum": "Read", + "Ratio": "Read", + "On": "ReadWrite", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "PipeLiquid", + "role": "Input" + }, + { + "typ": "PipeLiquid", + "role": "Output" + } + ], + "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 + } + }, "StructurePipeLiquidStraight": { "templateType": "Structure", "prefab": { @@ -44315,12 +45018,12 @@ export default { "has_reagents": false } }, - "StructurePipeOneWayValve": { + "StructurePipeOneWayValveLever": { "templateType": "StructureLogicDevice", "prefab": { - "prefab_name": "StructurePipeOneWayValve", - "prefab_hash": 1580412404, - "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", + "prefab_name": "StructurePipeOneWayValveLever", + "prefab_hash": 1289581593, + "desc": "", "name": "One Way Valve (Gas)" }, "structure": { @@ -44332,6 +45035,7 @@ export default { "Setting": "ReadWrite", "Maximum": "Read", "Ratio": "Read", + "On": "ReadWrite", "PrefabHash": "Read", "ReferenceId": "Read", "NameHash": "Read" @@ -44357,7 +45061,7 @@ export default { "has_color_state": false, "has_lock_state": false, "has_mode_state": false, - "has_on_off_state": false, + "has_on_off_state": true, "has_open_state": false, "has_reagents": false } @@ -44623,8 +45327,8 @@ export default { }, "slots": [ { - "name": "", - "typ": "None" + "name": "Portables", + "typ": "Portables" } ], "device": { @@ -46438,6 +47142,18 @@ export default { "small_grid": false } }, + "StructureReinforcedWall": { + "templateType": "Structure", + "prefab": { + "prefab_name": "StructureReinforcedWall", + "prefab_hash": -475746988, + "desc": "", + "name": "Reinforced Wall" + }, + "structure": { + "small_grid": false + } + }, "StructureReinforcedWallPaddedWindow": { "templateType": "Structure", "prefab": { @@ -46462,6 +47178,198 @@ export default { "small_grid": false } }, + "StructureRobotArmDoor": { + "templateType": "StructureLogicDevice", + "prefab": { + "prefab_name": "StructureRobotArmDoor", + "prefab_hash": -2131782367, + "desc": "", + "name": "Linear Rail Door" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [], + "device": { + "connection_list": [ + { + "typ": "Data", + "role": "None" + }, + { + "typ": "Power", + "role": "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 + } + }, + "StructureRoboticArmDock": { + "templateType": "StructureLogicDevice", + "prefab": { + "prefab_name": "StructureRoboticArmDock", + "prefab_hash": -1818718810, + "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.", + "name": "LArRE Dock" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": { + "Occupied": "Read", + "OccupantHash": "Read", + "Quantity": "Read", + "Damage": "Read", + "Class": "Read", + "MaxQuantity": "Read", + "PrefabHash": "Read", + "SortingClass": "Read", + "ReferenceId": "Read" + } + }, + "logic_types": { + "Power": "Read", + "Error": "Read", + "Activate": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "Index": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": [ + { + "name": "Arm Slot", + "typ": "None" + } + ], + "device": { + "connection_list": [ + { + "typ": "RoboticArmRail", + "role": "None" + }, + { + "typ": "RoboticArmRail", + "role": "None" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureRoboticArmRailCorner": { + "templateType": "Structure", + "prefab": { + "prefab_name": "StructureRoboticArmRailCorner", + "prefab_hash": -1323992709, + "desc": "", + "name": "Linear Rail Corner" + }, + "structure": { + "small_grid": true + } + }, + "StructureRoboticArmRailCornerStop": { + "templateType": "Structure", + "prefab": { + "prefab_name": "StructureRoboticArmRailCornerStop", + "prefab_hash": 1974053060, + "desc": "", + "name": "Linear Rail Corner Station" + }, + "structure": { + "small_grid": true + } + }, + "StructureRoboticArmRailInnerCorner": { + "templateType": "Structure", + "prefab": { + "prefab_name": "StructureRoboticArmRailInnerCorner", + "prefab_hash": -267108827, + "desc": "", + "name": "Linear Rail Inner Corner" + }, + "structure": { + "small_grid": true + } + }, + "StructureRoboticArmRailOuterCorner": { + "templateType": "Structure", + "prefab": { + "prefab_name": "StructureRoboticArmRailOuterCorner", + "prefab_hash": -33470826, + "desc": "", + "name": "Linear Rail Outer Corner" + }, + "structure": { + "small_grid": true + } + }, + "StructureRoboticArmRailStraight": { + "templateType": "Structure", + "prefab": { + "prefab_name": "StructureRoboticArmRailStraight", + "prefab_hash": -1785844184, + "desc": "", + "name": "Linear Rail Straight" + }, + "structure": { + "small_grid": true + } + }, + "StructureRoboticArmRailStraightStop": { + "templateType": "Structure", + "prefab": { + "prefab_name": "StructureRoboticArmRailStraightStop", + "prefab_hash": 1800701885, + "desc": "", + "name": "Linear Rail Straight Station" + }, + "structure": { + "small_grid": true + } + }, "StructureRocketAvionics": { "templateType": "StructureLogicDevice", "prefab": { @@ -46532,7 +47440,8 @@ export default { "Size": "Read", "TotalQuantity": "Read", "MinedQuantity": "Read", - "NameHash": "Read" + "NameHash": "Read", + "Altitude": "Read" }, "modes": { "0": "Invalid", @@ -46891,7 +47800,7 @@ export default { "has_reagents": true }, "consumer_info": { - "consumed_resouces": [ + "consumed_resources": [ "ItemAstroloyIngot", "ItemConstantanIngot", "ItemCopperIngot", @@ -48501,7 +49410,7 @@ export default { "prefab": { "prefab_name": "StructureSatelliteDish", "prefab_hash": 439026183, - "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.", + "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.", "name": "Medium Satellite Dish" }, "structure": { @@ -48636,7 +49545,7 @@ export default { "has_reagents": true }, "consumer_info": { - "consumed_resouces": [ + "consumed_resources": [ "ItemAstroloyIngot", "ItemConstantanIngot", "ItemCopperIngot", @@ -49120,7 +50029,7 @@ export default { } }, "ItemExplosive": { - "tier": "TierOne", + "tier": "TierTwo", "time": 10.0, "energy": 500.0, "temperature": { @@ -49139,13 +50048,11 @@ export default { "is_any_to_remove": false, "reagents": {} }, - "count_types": 5, + "count_types": 3, "reagents": { - "Copper": 5.0, "Electrum": 1.0, - "Gold": 5.0, - "Lead": 10.0, - "Steel": 7.0 + "Silicon": 3.0, + "Solder": 1.0 } }, "ItemGrenade": { @@ -49178,7 +50085,7 @@ export default { }, "ItemMiningCharge": { "tier": "TierOne", - "time": 7.0, + "time": 5.0, "energy": 200.0, "temperature": { "start": 1.0, @@ -49196,12 +50103,11 @@ export default { "is_any_to_remove": false, "reagents": {} }, - "count_types": 4, + "count_types": 3, "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 7.0, - "Lead": 10.0 + "Gold": 1.0, + "Iron": 1.0, + "Silicon": 3.0 } }, "SMGMagazine": { @@ -50376,7 +51282,7 @@ export default { "prefab": { "prefab_name": "StructureSingleBed", "prefab_hash": -492611, - "desc": "Description coming.", + "desc": "", "name": "Single Bed" }, "structure": { @@ -50935,7 +51841,7 @@ export default { "prefab": { "prefab_name": "StructureSmallSatelliteDish", "prefab_hash": -2138748650, - "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.", + "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.", "name": "Small Satellite Dish" }, "structure": { @@ -51519,7 +52425,7 @@ export default { "has_reagents": false }, "consumer_info": { - "consumed_resouces": [ + "consumed_resources": [ "ItemCharcoal", "ItemCoalOre", "ItemSolidFuel" @@ -52015,7 +52921,7 @@ export default { "prefab": { "prefab_name": "StructureStirlingEngine", "prefab_hash": -260316435, - "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.", + "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.", "name": "Stirling Engine" }, "structure": { @@ -53290,7 +54196,7 @@ export default { "has_reagents": true }, "consumer_info": { - "consumed_resouces": [ + "consumed_resources": [ "ItemAstroloyIngot", "ItemConstantanIngot", "ItemCopperIngot", @@ -54102,6 +55008,33 @@ export default { "Iron": 5.0 } }, + "ItemExplosive": { + "tier": "TierTwo", + "time": 90.0, + "energy": 9000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 1.0, + "Silicon": 7.0, + "Solder": 2.0 + } + }, "ItemFlagSmall": { "tier": "TierOne", "time": 1.0, @@ -54787,6 +55720,33 @@ export default { "Steel": 10.0 } }, + "ItemMiningCharge": { + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Gold": 1.0, + "Iron": 1.0, + "Silicon": 5.0 + } + }, "ItemMiningDrill": { "tier": "TierOne", "time": 5.0, @@ -54974,9 +55934,9 @@ export default { } }, "ItemRemoteDetonator": { - "tier": "TierOne", - "time": 4.5, - "energy": 500.0, + "tier": "TierTwo", + "time": 30.0, + "energy": 1500.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -54993,10 +55953,11 @@ export default { "is_any_to_remove": false, "reagents": {} }, - "count_types": 2, + "count_types": 3, "reagents": { - "Gold": 1.0, - "Iron": 3.0 + "Copper": 5.0, + "Solder": 5.0, + "Steel": 5.0 } }, "ItemReusableFireExtinguisher": { @@ -56833,7 +57794,7 @@ export default { "prefab_name": "StructureValve", "prefab_hash": -692036078, "desc": "", - "name": "Valve" + "name": "Valve (Gas)" }, "structure": { "small_grid": true @@ -58719,7 +59680,7 @@ export default { } }, "StructureWaterPurifier": { - "templateType": "StructureLogicDevice", + "templateType": "StructureLogicDeviceConsumer", "prefab": { "prefab_name": "StructureWaterPurifier", "prefab_hash": 887383294, @@ -58786,6 +59747,12 @@ export default { "has_on_off_state": true, "has_open_state": false, "has_reagents": false + }, + "consumer_info": { + "consumed_resources": [ + "ItemCharcoal" + ], + "processed_reagents": [] } }, "StructureWaterWallCooler": { @@ -58959,62 +59926,6 @@ export default { "has_reagents": false } }, - "StructureWindowShutter": { - "templateType": "StructureLogicDevice", - "prefab": { - "prefab_name": "StructureWindowShutter", - "prefab_hash": 2056377335, - "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.", - "name": "Window Shutter" - }, - "structure": { - "small_grid": true - }, - "logic": { - "logic_slot_types": {}, - "logic_types": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "NameHash": "Read" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "transmission_receiver": false, - "wireless_logic": false, - "circuit_holder": false - }, - "slots": [], - "device": { - "connection_list": [ - { - "typ": "Data", - "role": "None" - }, - { - "typ": "Power", - "role": "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": true, - "has_reagents": false - } - }, "ToolPrinterMod": { "templateType": "Item", "prefab": { @@ -59773,7 +60684,7 @@ export default { "OccupantHash": { "value": 2, "deprecated": false, - "description": "returns the has of the current occupant, the unique identifier of the thing" + "description": "returns the hash of the current occupant, the unique identifier of the thing" }, "Occupied": { "value": 1, @@ -59865,6 +60776,11 @@ export default { "deprecated": false, "description": "The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target." }, + "Altitude": { + "value": 269, + "deprecated": false, + "description": "The altitude that the rocket above the planet's surface. -1 if the rocket is in space." + }, "Apex": { "value": 238, "deprecated": false, @@ -61525,7 +62441,7 @@ export default { "OccupantHash": { "value": 2, "deprecated": false, - "description": "returns the has of the current occupant, the unique identifier of the thing" + "description": "returns the hash of the current occupant, the unique identifier of the thing" }, "Occupied": { "value": 1, @@ -61617,6 +62533,11 @@ export default { "deprecated": false, "description": "The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target." }, + "Altitude": { + "value": 269, + "deprecated": false, + "description": "The altitude that the rocket above the planet's surface. -1 if the rocket is in space." + }, "Apex": { "value": 238, "deprecated": false, @@ -63032,6 +63953,11 @@ export default { "deprecated": false, "description": "" }, + "Low": { + "value": 1, + "deprecated": false, + "description": "" + }, "Max": { "value": 4, "deprecated": false, @@ -63046,11 +63972,6 @@ export default { "value": 0, "deprecated": false, "description": "" - }, - "Optimal": { - "value": 1, - "deprecated": false, - "description": "" } } }, @@ -63182,6 +64103,11 @@ export default { "deprecated": false, "description": "" }, + "Crate": { + "value": 40, + "deprecated": false, + "description": "" + }, "CreditCard": { "value": 28, "deprecated": false, @@ -63282,6 +64208,11 @@ export default { "deprecated": false, "description": "" }, + "Portables": { + "value": 41, + "deprecated": false, + "description": "" + }, "ProgrammableChip": { "value": 26, "deprecated": false, @@ -63729,6 +64660,7 @@ export default { "prefabsByHash": { "-2140672772": "ItemKitGroundTelescope", "-2138748650": "StructureSmallSatelliteDish", + "-2131782367": "StructureRobotArmDoor", "-2128896573": "StructureStairwellBackRight", "-2127086069": "StructureBench2", "-2126113312": "ItemLiquidPipeValve", @@ -63750,6 +64682,7 @@ export default { "-2085885850": "DynamicGPR", "-2083426457": "UniformCommander", "-2082355173": "StructureWindTurbine", + "-2078371660": "StructureCompositeWindowShutterController", "-2076086215": "StructureInsulatedPipeTJunction", "-2073202179": "ItemPureIcePollutedWater", "-2072792175": "RailingIndustrial02", @@ -63833,6 +64766,7 @@ export default { "-1826855889": "ItemKitWall", "-1826023284": "ItemWreckageAirConditioner1", "-1821571150": "ItemKitStirlingEngine", + "-1818718810": "StructureRoboticArmDock", "-1814939203": "StructureGasUmbilicalMale", "-1812330717": "StructureSleeperRight", "-1808154199": "StructureManualHatch", @@ -63845,6 +64779,7 @@ export default { "-1794932560": "StructureOverheadShortCornerLocker", "-1792787349": "ItemCableAnalyser", "-1788929869": "Landingpad_LiquidConnectorOutwardPiece", + "-1785844184": "StructureRoboticArmRailStraight", "-1785673561": "StructurePipeCorner", "-1776897113": "ItemKitSensor", "-1773192190": "ItemReusableFireExtinguisher", @@ -63977,6 +64912,7 @@ export default { "-1332682164": "ItemKitSmallDirectHeatExchanger", "-1330388999": "AccessCardBlack", "-1326019434": "StructureLogicWriter", + "-1323992709": "StructureRoboticArmRailCorner", "-1321250424": "StructureLogicWriterSwitch", "-1309433134": "StructureWallIron04", "-1306628937": "ItemPureIceLiquidVolatiles", @@ -64005,6 +64941,7 @@ export default { "-1240951678": "StructureFrameIron", "-1234745580": "ItemDirtyOre", "-1230658883": "StructureLargeDirectHeatExchangeGastoGas", + "-1228287398": "ItemKitRoboticArm", "-1219128491": "ItemSensorProcessingUnitOreScanner", "-1218579821": "StructurePictureFrameThickPortraitSmall", "-1217998945": "ItemGasFilterOxygenL", @@ -64082,6 +65019,7 @@ export default { "-976273247": "Landingpad_StraightPiece01", "-975966237": "StructureMediumRadiator", "-971920158": "ItemDynamicScrubber", + "-971586619": "ItemWaterBottlePackage", "-965741795": "StructureCondensationValve", "-958884053": "StructureChuteUmbilicalMale", "-945806652": "ItemKitElevator", @@ -64137,7 +65075,6 @@ export default { "-784733231": "ItemKitWallGeometry", "-783387184": "StructureInsulatedPipeCrossJunction4", "-782951720": "StructurePowerConnector", - "-782453061": "StructureLiquidPipeOneWayValve", "-776581573": "StructureWallLargePanelArrow", "-775128944": "StructureShower", "-772542081": "ItemChemLightBlue", @@ -64146,6 +65083,7 @@ export default { "-767597887": "ItemPipeAnalyizer", "-761772413": "StructureBatteryChargerSmall", "-756587791": "StructureWaterBottleFillerPowered", + "-753675589": "ItemKitRobotArmDoor", "-749191906": "AppliancePackagingMachine", "-744098481": "ItemIntegratedCircuit10", "-743968726": "ItemLabeller", @@ -64205,6 +65143,7 @@ export default { "-525810132": "ItemChemLightRed", "-524546923": "ItemKitWallIron", "-524289310": "ItemEggCarton", + "-523832822": "StructurePipeLiquidOneWayValveLever", "-517628750": "StructureWaterDigitalValve", "-507770416": "StructureSmallDirectHeatExchangeLiquidtoLiquid", "-504717121": "ItemWirelessBatteryCellExtraLarge", @@ -64212,6 +65151,7 @@ export default { "-498464883": "ItemSprayCanBlue", "-491247370": "RespawnPointWallMounted", "-487378546": "ItemIronSheets", + "-475746988": "StructureReinforcedWall", "-472094806": "ItemGasCanisterVolatiles", "-466050668": "ItemCableCoil", "-465741100": "StructureToolManufactory", @@ -64221,12 +65161,15 @@ export default { "-454028979": "StructureLiquidVolumePump", "-453039435": "ItemKitTransformer", "-443130773": "StructureVendingMachine", + "-441759975": "ItemKitLinearRail", "-419758574": "StructurePipeHeater", "-417629293": "StructurePipeCrossJunction4", "-415420281": "StructureLadder", "-412551656": "ItemHardJetpack", "-412104504": "CircuitboardCameraDisplay", + "-405593895": "StructureComputerUpright", "-404336834": "ItemCopperIngot", + "-401648353": "ItemCerealBarBox", "-400696159": "ReagentColorOrange", "-400115994": "StructureBattery", "-399883995": "StructurePipeRadiatorFlat", @@ -64266,6 +65209,7 @@ export default { "-291862981": "StructureSmallTableThickSingle", "-290196476": "ItemSiliconIngot", "-287495560": "StructureLiquidPipeHeater", + "-267108827": "StructureRoboticArmRailInnerCorner", "-261575861": "ItemChocolateCake", "-260316435": "StructureStirlingEngine", "-259357734": "StructureCompositeCladdingRounded", @@ -64312,6 +65256,7 @@ export default { "-82087220": "DynamicGenerator", "-81376085": "ItemFlowerRed", "-78099334": "KitchenTableSimpleShort", + "-75205276": "ItemCerealBarBag", "-73796547": "ImGuiCircuitboardAirlockControl", "-72748982": "StructureInsulatedPipeLiquidCrossJunction6", "-69685069": "StructureCompositeCladdingAngledCorner", @@ -64324,6 +65269,7 @@ export default { "-38898376": "ItemPipeCowl", "-37454456": "StructureStairwellFrontLeft", "-37302931": "StructureWallPaddedWindowThin", + "-33470826": "StructureRoboticArmRailOuterCorner", "-31273349": "StructureInsulatedTankConnector", "-27284803": "ItemKitInsulatedPipeUtility", "-21970188": "DynamicLight", @@ -64469,6 +65415,7 @@ export default { "377745425": "ItemKitGasGenerator", "378084505": "StructureBlocker", "379750958": "StructurePressureFedLiquidEngine", + "384478267": "ItemMiningPackage", "386754635": "ItemPureIceNitrous", "386820253": "StructureWallSmallPanelsMonoChrome", "388774906": "ItemMKIIDuctTape", @@ -64512,6 +65459,7 @@ export default { "502280180": "ItemElectrumIngot", "502555944": "MotherboardLogic", "505924160": "StructureStairwellBackLeft", + "509629504": "ItemResidentialPackage", "513258369": "ItemKitAccessBridge", "518925193": "StructureRocketTransformerSmall", "519913639": "DynamicAirConditioner", @@ -64576,6 +65524,7 @@ export default { "782529714": "StructureWallArchTwoTone", "789015045": "ItemAuthoringTool", "789494694": "WeaponEnergy", + "791407452": "StructureCompositeWindowShutterConnector", "791746840": "ItemCerealBar", "792686502": "StructureLargeDirectHeatExchangeLiquidtoLiquid", "797794350": "StructureLightLong", @@ -64598,6 +65547,7 @@ export default { "847461335": "StructureInteriorDoorPadded", "849148192": "ItemKitRecycler", "850558385": "StructureCompositeCladdingAngledCornerLong", + "851103794": "ItemEmergencySuppliesBox", "851290561": "ItemPlantEndothermic_Genepool1", "855694771": "CircuitboardDoorControl", "856108234": "ItemCrowbar", @@ -64728,6 +65678,7 @@ export default { "1282191063": "StructureTurbineGenerator", "1286441942": "StructurePipeIgniter", "1287324802": "StructureWallIron", + "1289581593": "StructurePipeOneWayValveLever", "1289723966": "ItemSprayGun", "1293995736": "ItemKitSolidGenerator", "1298920475": "StructureAccessBridge", @@ -64775,6 +65726,7 @@ export default { "1443059329": "StructureCryoTubeHorizontal", "1452100517": "StructureInsulatedInLineTankLiquid1x2", "1453961898": "ItemKitPassiveLargeRadiatorLiquid", + "1459105919": "ItemPortablesPackage", "1459985302": "ItemKitReinforcedWindows", "1464424921": "ItemWreckageStructureWeatherStation002", "1464854517": "StructureHydroponicsTray", @@ -64782,6 +65734,8 @@ export default { "1468249454": "StructureOverheadShortLocker", "1470787934": "ItemMiningBeltMKII", "1473807953": "StructureTorpedoRack", + "1476318823": "ItemWaterBottleBag", + "1485675617": "ItemInsulatedCanisterPackage", "1485834215": "StructureWallIron02", "1492930217": "StructureWallLargePanel", "1512322581": "ItemKitLogicCircuit", @@ -64803,7 +65757,7 @@ export default { "1574321230": "StructureCompositeWall03", "1574688481": "ItemKitRespawnPointWallMounted", "1579842814": "ItemHastelloyIngot", - "1580412404": "StructurePipeOneWayValve", + "1580592998": "StructureCompositeWindowShutter", "1585641623": "StructureStackerReverse", "1587787610": "ItemKitEvaporationChamber", "1588896491": "ItemGlassSheets", @@ -64867,6 +65821,7 @@ export default { "1791306431": "ItemEmergencyEvaSuit", "1794588890": "StructureWallArchCornerRound", "1800622698": "ItemCoffeeMug", + "1800701885": "StructureRoboticArmRailStraightStop", "1811979158": "StructureAngledBench", "1812364811": "StructurePassiveLiquidDrain", "1817007843": "ItemKitLandingPadAtmos", @@ -64917,12 +65872,14 @@ export default { "1949076595": "ItemLightSword", "1951126161": "ItemKitLiquidRegulator", "1951525046": "StructureCompositeCladdingRoundedCorner", + "1957571043": "StructureChuteExportBin", "1959564765": "ItemGasFilterPollutantsL", "1960952220": "ItemKitSmallSatelliteDish", "1968102968": "StructureSolarPanelFlat", "1968371847": "StructureDrinkingFountain", "1969189000": "ItemJetpackBasic", "1969312177": "ItemKitEngineMedium", + "1974053060": "StructureRoboticArmRailCornerStop", "1979212240": "StructureWallGeometryCorner", "1981698201": "StructureInteriorDoorPaddedThin", "1986658780": "StructureWaterBottleFillerPoweredBottom", @@ -64954,7 +65911,6 @@ export default { "2043318949": "PortableSolarPanel", "2044798572": "ItemMushroom", "2049879875": "StructureStairwellNoDoors", - "2056377335": "StructureWindowShutter", "2057179799": "ItemKitHydroponicStation", "2060134443": "ItemCableCoilHeavy", "2060648791": "StructureElevatorLevelIndustrial", @@ -65110,6 +66066,7 @@ export default { "StructureChuteDigitalFlipFlopSplitterRight", "StructureChuteDigitalValveLeft", "StructureChuteDigitalValveRight", + "StructureChuteExportBin", "StructureChuteFlipFlopSplitter", "StructureChuteInlet", "StructureChuteJunction", @@ -65154,7 +66111,11 @@ export default { "StructureCompositeWall04", "StructureCompositeWindow", "StructureCompositeWindowIron", + "StructureCompositeWindowShutter", + "StructureCompositeWindowShutterConnector", + "StructureCompositeWindowShutterController", "StructureComputer", + "StructureComputerUpright", "StructureCondensationChamber", "StructureCondensationValve", "StructureConsole", @@ -65276,7 +66237,6 @@ export default { "StructureLiquidDrain", "StructureLiquidPipeAnalyzer", "StructureLiquidPipeHeater", - "StructureLiquidPipeOneWayValve", "StructureLiquidPipeRadiator", "StructureLiquidPressureRegulator", "StructureLiquidTankBig", @@ -65371,10 +66331,11 @@ export default { "StructurePipeLiquidCrossJunction4", "StructurePipeLiquidCrossJunction5", "StructurePipeLiquidCrossJunction6", + "StructurePipeLiquidOneWayValveLever", "StructurePipeLiquidStraight", "StructurePipeLiquidTJunction", "StructurePipeMeter", - "StructurePipeOneWayValve", + "StructurePipeOneWayValveLever", "StructurePipeOrgan", "StructurePipeRadiator", "StructurePipeRadiatorFlat", @@ -65409,8 +66370,17 @@ export default { "StructureRefrigeratedVendingMachine", "StructureReinforcedCompositeWindow", "StructureReinforcedCompositeWindowSteel", + "StructureReinforcedWall", "StructureReinforcedWallPaddedWindow", "StructureReinforcedWallPaddedWindowThin", + "StructureRobotArmDoor", + "StructureRoboticArmDock", + "StructureRoboticArmRailCorner", + "StructureRoboticArmRailCornerStop", + "StructureRoboticArmRailInnerCorner", + "StructureRoboticArmRailOuterCorner", + "StructureRoboticArmRailStraight", + "StructureRoboticArmRailStraightStop", "StructureRocketAvionics", "StructureRocketCelestialTracker", "StructureRocketCircuitHousing", @@ -65558,8 +66528,7 @@ export default { "StructureWaterPurifier", "StructureWaterWallCooler", "StructureWeatherStation", - "StructureWindTurbine", - "StructureWindowShutter" + "StructureWindTurbine" ], "devices": [ "CompositeRollCover", @@ -65632,6 +66601,7 @@ export default { "StructureChuteDigitalFlipFlopSplitterRight", "StructureChuteDigitalValveLeft", "StructureChuteDigitalValveRight", + "StructureChuteExportBin", "StructureChuteInlet", "StructureChuteOutlet", "StructureChuteUmbilicalFemale", @@ -65640,7 +66610,9 @@ export default { "StructureCircuitHousing", "StructureCombustionCentrifuge", "StructureCompositeDoor", + "StructureCompositeWindowShutterController", "StructureComputer", + "StructureComputerUpright", "StructureCondensationChamber", "StructureCondensationValve", "StructureConsole", @@ -65717,7 +66689,6 @@ export default { "StructureLiquidDrain", "StructureLiquidPipeAnalyzer", "StructureLiquidPipeHeater", - "StructureLiquidPipeOneWayValve", "StructureLiquidPipeRadiator", "StructureLiquidPressureRegulator", "StructureLiquidTankBig", @@ -65780,8 +66751,9 @@ export default { "StructurePipeHeater", "StructurePipeIgniter", "StructurePipeLabel", + "StructurePipeLiquidOneWayValveLever", "StructurePipeMeter", - "StructurePipeOneWayValve", + "StructurePipeOneWayValveLever", "StructurePipeRadiator", "StructurePipeRadiatorFlat", "StructurePipeRadiatorFlatLiquid", @@ -65807,6 +66779,8 @@ export default { "StructurePurgeValve", "StructureRecycler", "StructureRefrigeratedVendingMachine", + "StructureRobotArmDoor", + "StructureRoboticArmDock", "StructureRocketAvionics", "StructureRocketCelestialTracker", "StructureRocketCircuitHousing", @@ -65885,8 +66859,7 @@ export default { "StructureWaterPurifier", "StructureWaterWallCooler", "StructureWeatherStation", - "StructureWindTurbine", - "StructureWindowShutter" + "StructureWindTurbine" ], "items": [ "AccessCardBlack", @@ -66012,6 +66985,8 @@ export default { "ItemCannedPowderedEggs", "ItemCannedRicePudding", "ItemCerealBar", + "ItemCerealBarBag", + "ItemCerealBarBox", "ItemCharcoal", "ItemChemLightBlue", "ItemChemLightGreen", @@ -66061,6 +67036,7 @@ export default { "ItemEmergencyPickaxe", "ItemEmergencyScrewdriver", "ItemEmergencySpaceHelmet", + "ItemEmergencySuppliesBox", "ItemEmergencyToolBelt", "ItemEmergencyWireCutters", "ItemEmergencyWrench", @@ -66140,6 +67116,7 @@ export default { "ItemIce", "ItemIgniter", "ItemInconelIngot", + "ItemInsulatedCanisterPackage", "ItemInsulation", "ItemIntegratedCircuit10", "ItemInvarIngot", @@ -66227,6 +67204,7 @@ export default { "ItemKitLargeSatelliteDish", "ItemKitLaunchMount", "ItemKitLaunchTower", + "ItemKitLinearRail", "ItemKitLiquidRegulator", "ItemKitLiquidTank", "ItemKitLiquidTankInsulated", @@ -66267,6 +67245,8 @@ export default { "ItemKitReinforcedWindows", "ItemKitResearchMachine", "ItemKitRespawnPointWallMounted", + "ItemKitRobotArmDoor", + "ItemKitRoboticArm", "ItemKitRocketAvionics", "ItemKitRocketBattery", "ItemKitRocketCargoStorage", @@ -66357,6 +67337,7 @@ export default { "ItemMiningDrill", "ItemMiningDrillHeavy", "ItemMiningDrillPneumatic", + "ItemMiningPackage", "ItemMkIIToolbelt", "ItemMuffin", "ItemMushroom", @@ -66393,6 +67374,7 @@ export default { "ItemPlantThermogenic_Genepool1", "ItemPlantThermogenic_Genepool2", "ItemPlasticSheets", + "ItemPortablesPackage", "ItemPotato", "ItemPotatoBaked", "ItemPowerConnector", @@ -66420,6 +67402,7 @@ export default { "ItemRTGSurvival", "ItemReagentMix", "ItemRemoteDetonator", + "ItemResidentialPackage", "ItemReusableFireExtinguisher", "ItemRice", "ItemRoadFlare", @@ -66489,6 +67472,8 @@ export default { "ItemWallLight", "ItemWaspaloyIngot", "ItemWaterBottle", + "ItemWaterBottleBag", + "ItemWaterBottlePackage", "ItemWaterPipeDigitalValve", "ItemWaterPipeMeter", "ItemWaterWallCooler", @@ -66636,4 +67621,4 @@ export default { "StructureNitrolyzer", "StructureRocketCircuitHousing" ] -} as const +} as const \ No newline at end of file diff --git a/www/src/ts/virtualMachine/registers.ts b/www/src/ts/virtualMachine/registers.ts index eb60df6..e664547 100644 --- a/www/src/ts/virtualMachine/registers.ts +++ b/www/src/ts/virtualMachine/registers.ts @@ -1,4 +1,4 @@ -import { html, css } from "lit"; +import { html, css, nothing } from "lit"; import { customElement } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; import { VMActiveICMixin } from "virtualMachine/baseDevice"; @@ -6,6 +6,7 @@ import { VMActiveICMixin } from "virtualMachine/baseDevice"; import { RegisterSpec } from "ic10emu_wasm"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.js"; import { displayNumber, parseNumber } from "utils"; +import { computed, Signal, watch } from "@lit-labs/preact-signals"; @customElement("vm-ic-registers") export class VMICRegisters extends VMActiveICMixin(BaseElement) { @@ -40,12 +41,12 @@ export class VMICRegisters extends VMActiveICMixin(BaseElement) { constructor() { super(); - this.subscribe("ic", "active-ic") + this.subscribe("active-ic") } protected render() { - const registerAliases: [string, number][] = - [...(Array.from(this.aliases?.entries() ?? []))].flatMap( + const registerAliases: Signal<[string, number][]> = computed(() => { + return [...(Array.from(this.objectSignals.aliases.value?.entries() ?? []))].flatMap( ([alias, target]) => { if ("RegisterSpec" in target && target.RegisterSpec.indirection === 0) { return [[alias, target.RegisterSpec.target]] as [string, number][]; @@ -54,33 +55,49 @@ export class VMICRegisters extends VMActiveICMixin(BaseElement) { } } ).concat(VMICRegisters.defaultAliases); + }); + + const registerHtml = this.objectSignals?.registers.peek().map((val, index) => { + const aliases = computed(() => { + return registerAliases.value + .filter(([_alias, target]) => index === target) + .map(([alias, _target]) => alias); + }); + const aliasesList = computed(() => { + return aliases.value.join(", "); + }); + const aliasesText = computed(() => { + return aliasesList.value || "None"; + }); + const valDisplay = computed(() => { + const val = this.objectSignals.registers.value[index]; + return displayNumber(val); + }); + return html` + +
+ Register r${index} Aliases: + ${watch(aliasesText)} +
+ + r${index} + ${watch(aliasesList)} + +
+ `; + }) ?? nothing; + return html`
- ${this.registers?.map((val, index) => { - const aliases = registerAliases - .filter(([_alias, target]) => index === target) - .map(([alias, _target]) => alias); - return html` - -
- Register r${index} Aliases: - ${aliases.join(", ") || "None"} -
- - r${index} - ${aliases.join(", ")} - -
- `; - })} + ${registerHtml}
`; diff --git a/www/src/ts/virtualMachine/stack.ts b/www/src/ts/virtualMachine/stack.ts index 6f96199..6dd6e15 100644 --- a/www/src/ts/virtualMachine/stack.ts +++ b/www/src/ts/virtualMachine/stack.ts @@ -1,10 +1,11 @@ -import { html, css } from "lit"; +import { html, css, nothing } from "lit"; import { customElement } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; import { VMActiveICMixin } from "virtualMachine/baseDevice"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.js"; import { displayNumber, parseNumber } from "utils"; +import { computed, watch } from "@lit-labs/preact-signals"; @customElement("vm-ic-stack") export class VMICStack extends VMActiveICMixin(BaseElement) { @@ -37,35 +38,49 @@ export class VMICStack extends VMActiveICMixin(BaseElement) { constructor() { super(); - this.subscribe("ic", "active-ic") + this.subscribe("active-ic") } protected render() { - const sp = this.registers != null ? this.registers[16] : 0; + const sp = computed(() => { + return this.objectSignals.registers.value != null ? this.objectSignals.registers.value[16] : 0; + }); + + const memoryHtml = this.objectSignals?.memory.peek()?.map((val, index) => { + const content = computed(() => { + return sp.value === index ? html`Stack Pointer` : nothing; + }); + const pointerClass = computed(() => { + return sp.value === index ? "stack-pointer" : nothing; + }); + const displayVal = computed(() => { + return displayNumber(this.objectSignals.memory.value[index]); + }); + + return html` + +
+ ${watch(content)} + Address ${index} +
+ + ${index} + +
+ `; + }) ?? nothing; return html`
- ${this.memory?.map((val, index) => { - return html` - -
- ${sp === index ? html`Stack Pointer` : ""} - Address ${index} -
- - ${index} - -
- `; - })} + ${memoryHtml}
`; diff --git a/www/src/ts/virtualMachine/vmWorker.ts b/www/src/ts/virtualMachine/vmWorker.ts index 6f34aaa..9f38b0b 100644 --- a/www/src/ts/virtualMachine/vmWorker.ts +++ b/www/src/ts/virtualMachine/vmWorker.ts @@ -6,24 +6,24 @@ import type { import * as Comlink from "comlink"; import prefabDatabase from "./prefabDatabase"; -import { parseNumber } from "utils"; +import { comlinkSpecialJsonTransferHandler, parseNumber } from "utils"; +Comlink.transferHandlers.set("SpecialJson", comlinkSpecialJsonTransferHandler); console.info("Processing Json prefab Database ", prefabDatabase); const vm: VMRef = init(); -const template_database = Object.fromEntries( +const start_time = performance.now(); +const template_database = new Map( Object.entries(prefabDatabase.prefabsByHash).map(([hash, prefabName]) => [ parseInt(hash), prefabDatabase.prefabs[prefabName], ]), ) as TemplateDatabase; - +console.info("Loading Prefab Template Database into VM", template_database); try { - console.info("Loading Prefab Template Database into VM", template_database); - const start_time = performance.now(); // vm.importTemplateDatabase(template_database); vm.importTemplateDatabase(template_database); const now = performance.now(); diff --git a/xtask/src/generate/database.rs b/xtask/src/generate/database.rs index ff750c1..205fa7d 100644 --- a/xtask/src/generate/database.rs +++ b/xtask/src/generate/database.rs @@ -191,7 +191,7 @@ pub fn generate_database( .join("www") .join("src") .join("ts") - .join("virtual_machine"); + .join("virtualMachine"); if !data_path.exists() { std::fs::create_dir(&data_path)?; } @@ -860,7 +860,7 @@ fn slot_inserts_to_info(slots: &[stationpedia::SlotInsert]) -> Vec { typ: slot .slot_type .parse() - .unwrap_or_else(|err| panic!("faild to parse slot class: {err}")), + .unwrap_or_else(|err| panic!("failed to parse slot class: {err}")), }) .collect() } @@ -891,7 +891,7 @@ pub struct ObjectDatabase { impl From<&stationpedia::SuitInfo> for SuitInfo { fn from(value: &stationpedia::SuitInfo) -> Self { SuitInfo { - hygine_reduction_multiplier: value.hygine_reduction_multiplier, + hygiene_reduction_multiplier: value.hygiene_reduction_multiplier, waste_max_pressure: value.waste_max_pressure, } } @@ -979,11 +979,17 @@ impl From<&stationpedia::Item> for ItemInfo { slot_class: item .slot_class .parse() - .unwrap_or_else(|err| panic!("failed to parse slot class: {err}")), + .unwrap_or_else(|err| { + let slot_class = &item.slot_class; + panic!("failed to parse slot class `{slot_class}`: {err}"); + }), sorting_class: item .sorting_class .parse() - .unwrap_or_else(|err| panic!("failed to parse sorting class: {err}")), + .unwrap_or_else(|err| { + let sorting_class = &item.sorting_class; + panic!("failed to parse sorting class `{sorting_class}`: {err}"); + }), } } } @@ -997,10 +1003,10 @@ impl From<&stationpedia::Device> for DeviceInfo { .map(|(typ, role)| ConnectionInfo { typ: typ .parse() - .unwrap_or_else(|err| panic!("failed to parse connection type: {err}")), + .unwrap_or_else(|err| panic!("failed to parse connection type `{typ}`: {err}")), role: role .parse() - .unwrap_or_else(|err| panic!("failed to parse connection role: {err}")), + .unwrap_or_else(|err| panic!("failed to parse connection role `{role}`: {err}")), }) .collect(), device_pins_length: value.devices_length, @@ -1111,7 +1117,7 @@ impl From<&stationpedia::Memory> for MemoryInfo { impl From<&stationpedia::ResourceConsumer> for ConsumerInfo { fn from(value: &stationpedia::ResourceConsumer) -> Self { ConsumerInfo { - consumed_resouces: value.consumed_resources.clone(), + consumed_resources: value.consumed_resources.clone(), processed_reagents: value.processed_reagents.clone(), } } diff --git a/xtask/src/stationpedia.rs b/xtask/src/stationpedia.rs index ab3bb2d..e20cc2c 100644 --- a/xtask/src/stationpedia.rs +++ b/xtask/src/stationpedia.rs @@ -91,7 +91,7 @@ pub struct Page { #[serde(rename = "SourceCode", default)] pub source_code: bool, #[serde(rename = "Chargeable")] - pub chargeable: Option, + pub chargeable: Option, #[serde(rename = "ResourceConsumer")] pub resource_consumer: Option, #[serde(rename = "InternalAtmosphere")] @@ -257,8 +257,8 @@ pub struct Item { #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct SuitInfo { - #[serde(rename = "HygineReductionMultiplier")] - pub hygine_reduction_multiplier: f32, + #[serde(rename = "HygieneReductionMultiplier")] + pub hygiene_reduction_multiplier: f32, #[serde(rename = "WasteMaxPressure")] pub waste_max_pressure: f32, } @@ -269,9 +269,9 @@ pub struct Recipe { pub creator_prefab_name: String, #[serde(rename = "TierName")] pub tier_name: String, - #[serde(rename = "Time")] + #[serde(rename = "Time", default)] pub time: f64, - #[serde(rename = "Energy")] + #[serde(rename = "Energy", default)] pub energy: f64, #[serde(rename = "Temperature")] pub temperature: RecipeTemperature, @@ -279,7 +279,7 @@ pub struct Recipe { pub pressure: RecipePressure, #[serde(rename = "RequiredMix")] pub required_mix: RecipeGasMix, - #[serde(rename = "CountTypes")] + #[serde(rename = "CountTypes", default)] pub count_types: i64, #[serde(flatten)] pub reagents: indexmap::IndexMap, @@ -354,7 +354,7 @@ pub struct Fabricator { } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] -pub struct Chargable { +pub struct Chargeable { #[serde(rename = "PowerMaximum")] pub power_maximum: f32, } From 6e503f957af7027eefba50489fa526236d7282c5 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sat, 24 Aug 2024 16:38:07 -0700 Subject: [PATCH 43/50] refactor(frontend): fix signal graph --- ic10emu/src/vm.rs | 26 +- stationeers_data/src/templates.rs | 2 + www/cspell.json | 1 + www/src/ts/editor/index.ts | 4 +- www/src/ts/index.ts | 12 +- www/src/ts/session.ts | 95 +-- www/src/ts/utils.ts | 12 + www/src/ts/virtualMachine/baseDevice.ts | 580 +---------------- www/src/ts/virtualMachine/controls.ts | 131 ++-- www/src/ts/virtualMachine/device/addDevice.ts | 388 ++++++----- www/src/ts/virtualMachine/device/card.ts | 263 +++++--- www/src/ts/virtualMachine/device/dbutils.ts | 2 +- .../ts/virtualMachine/device/deviceList.ts | 85 +-- www/src/ts/virtualMachine/device/fields.ts | 28 +- www/src/ts/virtualMachine/device/pins.ts | 132 ++-- www/src/ts/virtualMachine/device/slot.ts | 243 +++---- .../ts/virtualMachine/device/slotAddDialog.ts | 162 ++--- www/src/ts/virtualMachine/device/template.ts | 152 +++-- www/src/ts/virtualMachine/index.ts | 444 +++---------- www/src/ts/virtualMachine/registers.ts | 79 ++- www/src/ts/virtualMachine/stack.ts | 45 +- www/src/ts/virtualMachine/state.ts | 600 ++++++++++++++++++ 22 files changed, 1770 insertions(+), 1716 deletions(-) create mode 100644 www/src/ts/virtualMachine/state.ts diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index 2a55f2d..073a05f 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -155,7 +155,7 @@ impl VM { obj_ids.push(obj_id) } - transaction.finialize()?; + transaction.finalize()?; let transaction_ids = transaction.id_space.in_use_ids(); self.id_space.borrow_mut().use_new_ids(&transaction_ids); @@ -200,15 +200,12 @@ impl VM { /// current database. /// Errors if the object can not be built do to a template error /// Returns the built object's ID - pub fn add_object_frozen( - self: &Rc, - frozen: FrozenObject, - ) -> Result { + 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.finialize()?; + transaction.finalize()?; let transaction_ids = transaction.id_space.in_use_ids(); self.id_space.borrow_mut().use_new_ids(&transaction_ids); @@ -1351,17 +1348,7 @@ impl VM { .objects .borrow() .iter() - .filter_map(|(_obj_id, obj)| { - if obj - .borrow() - .as_item() - .is_some_and(|item| item.get_parent_slot().is_some()) - { - None - } else { - Some(FrozenObject::freeze_object_sparse(obj, self)) - } - }) + .map(|(_obj_id, obj)| FrozenObject::freeze_object_sparse(obj, self)) .collect::, _>>()?, networks: self .networks @@ -1406,7 +1393,7 @@ impl VM { for frozen in state.objects { let _ = transaction.add_object_from_frozen(frozen)?; } - transaction.finialize()?; + transaction.finalize()?; self.circuit_holders.borrow_mut().clear(); self.program_holders.borrow_mut().clear(); @@ -1423,6 +1410,7 @@ impl VM { 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); @@ -1557,7 +1545,7 @@ impl VMTransaction { Ok(obj_id) } - pub fn finialize(&mut self) -> Result<(), VMError> { + pub fn finalize(&mut self) -> Result<(), VMError> { for (child, (slot, parent)) in &self.object_parents { let child_obj = self .objects diff --git a/stationeers_data/src/templates.rs b/stationeers_data/src/templates.rs index e498615..4f7f19d 100644 --- a/stationeers_data/src/templates.rs +++ b/stationeers_data/src/templates.rs @@ -203,9 +203,11 @@ pub struct SlotInfo { #[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(type = "Map | undefined"))] pub modes: Option>, pub transmission_receiver: bool, pub wireless_logic: bool, diff --git a/www/cspell.json b/www/cspell.json index 380c6ea..522f907 100644 --- a/www/cspell.json +++ b/www/cspell.json @@ -132,6 +132,7 @@ "trunc", "ufuzzy", "VMIC", + "VMUI", "vstack", "whos" ], diff --git a/www/src/ts/editor/index.ts b/www/src/ts/editor/index.ts index f9b6660..41fdafa 100644 --- a/www/src/ts/editor/index.ts +++ b/www/src/ts/editor/index.ts @@ -243,7 +243,7 @@ export class IC10Editor extends BaseElement { app.session.onLoad((_e) => { const session = app.session; const updated_ids: number[] = []; - for (const [id, code] of session.programs) { + for (const [id, code] of session.programs.value) { updated_ids.push(id); that.createOrSetSession(id, code); } @@ -271,7 +271,7 @@ export class IC10Editor extends BaseElement { that.activeLineMarkers.set( id, session.addMarker( - new Range(active_line, 0, active_line, 1), + new Range(active_line.value, 0, active_line.value, 1), "vm_ic_active_line", "fullLine", true, diff --git a/www/src/ts/index.ts b/www/src/ts/index.ts index 61798f8..a879a4e 100644 --- a/www/src/ts/index.ts +++ b/www/src/ts/index.ts @@ -39,7 +39,7 @@ import "@shoelace-style/shoelace/dist/components/relative-time/relative-time.js" import "ace-builds"; import "ace-builds/esm-resolver"; -class DeferedApp { +class DeferredApp { app: App; private resolvers: ((value: App) => void)[]; @@ -69,7 +69,7 @@ class DeferedApp { } -class DeferedVM { +class DeferredVM { vm: VirtualMachine; private resolvers: ((value: VirtualMachine) => void)[]; @@ -102,13 +102,13 @@ class DeferedVM { declare global { interface Window { - App: DeferedApp; - VM: DeferedVM; + App: DeferredApp; + VM: DeferredVM; } } -window.App = new DeferedApp(); -window.VM = new DeferedVM(); +window.App = new DeferredApp(); +window.VM = new DeferredVM(); import type { App } from "./app"; import type { VirtualMachine } from "./virtualMachine"; diff --git a/www/src/ts/session.ts b/www/src/ts/session.ts index 2fdef21..b224e0e 100644 --- a/www/src/ts/session.ts +++ b/www/src/ts/session.ts @@ -25,6 +25,7 @@ import { } from "./utils"; import * as presets from "./presets"; +import { batch, computed, effect, signal, Signal } from "@lit-labs/preact-signals"; const { demoVMState } = presets; export interface SessionEventMap { @@ -37,63 +38,64 @@ export interface SessionEventMap { } export class Session extends TypedEventTarget() { - private _programs: Map; - private _errors: Map; - private _activeIC: number; - private _activeLines: Map; + private _programs: Signal>; + private _errors: Signal>; + private _activeIC: Signal; + private _activeLines: Signal>; private _save_timeout?: ReturnType; - private _vm_state: FrozenVM; private app: App; constructor(app: App) { super(); this.app = app; - this._programs = new Map(); - this._errors = new Map(); + this._programs = signal(new Map()); + this._errors = signal(new Map()); this._save_timeout = undefined; - this._activeIC = 1; - this._activeLines = new Map(); - this._vm_state = undefined; + this._activeIC = signal(null); + this._activeLines = signal(new Map()); this.loadFromFragment(); const that = this; window.addEventListener("hashchange", (_event) => { that.loadFromFragment(); }); + + this._programs.subscribe((_) => {this._fireOnLoad()}); } - get programs(): Map { + get programs(): Signal> { return this._programs; } set programs(programs: Iterable<[number, string]>) { - this._programs = new Map([...programs]); - this._fireOnLoad(); + this._programs.value = new Map(programs); } - get activeIC() { + get activeIC(): Signal { return this._activeIC; } - set activeIC(val: number) { - this._activeIC = val; - this.dispatchCustomEvent("session-active-ic", this.activeIC); + set activeIC(val: ObjectID) { + this._activeIC.value = val; + this.dispatchCustomEvent("session-active-ic", this.activeIC.peek()); } - changeID(oldID: number, newID: number) { - if (this.programs.has(oldID)) { - this.programs.set(newID, this.programs.get(oldID)); - this.programs.delete(oldID); + changeID(oldID: ObjectID, newID: ObjectID) { + if (this.programs.peek().has(oldID)) { + const newVal = new Map(this.programs.value); + newVal.set(newID, newVal.get(oldID)); + newVal.delete(oldID); + this.programs.value = newVal; } this.dispatchCustomEvent("session-id-change", { old: oldID, new: newID }); } - onIDChange(callback: (e: CustomEvent<{ old: number; new: number }>) => any) { + onIDChange(callback: (e: CustomEvent<{ old: ObjectID; new: ObjectID}>) => any) { this.addEventListener("session-id-change", callback); } - onActiveIc(callback: (e: CustomEvent) => any) { + onActiveIc(callback: (e: CustomEvent) => any) { this.addEventListener("session-active-ic", callback); } @@ -101,36 +103,36 @@ export class Session extends TypedEventTarget() { return this._errors; } - getActiveLine(id: number) { - return this._activeLines.get(id); + getActiveLine(id: ObjectID) { + return computed(() => this._activeLines.value.get(id)); } - setActiveLine(id: number, line: number) { - const last = this._activeLines.get(id); + setActiveLine(id: ObjectID, line: number) { + const last = this._activeLines.peek().get(id); if (last !== line) { - this._activeLines.set(id, line); + this._activeLines.value = new Map([ ... this._activeLines.value.entries(), [id, line]]); this._fireOnActiveLine(id); } } - setProgramCode(id: number, code: string) { - this._programs.set(id, code); + setProgramCode(id: ObjectID, code: string) { + this._programs.value = new Map([ ...this._programs.value.entries(), [id, code]]); if (this.app.vm) { this.app.vm.updateCode(); } this.save(); } - setProgramErrors(id: number, errors: ICError[]) { - this._errors.set(id, errors); + setProgramErrors(id: ObjectID, errors: ICError[]) { + this._errors.value = new Map([ ...this._errors.value.entries(), [id, errors]]); this._fireOnErrors([id]); } - _fireOnErrors(ids: number[]) { + _fireOnErrors(ids: ObjectID[]) { this.dispatchCustomEvent("session-errors", ids); } - onErrors(callback: (e: CustomEvent) => any) { + onErrors(callback: (e: CustomEvent) => any) { this.addEventListener("session-errors", callback); } @@ -142,7 +144,7 @@ export class Session extends TypedEventTarget() { this.dispatchCustomEvent("session-load", this); } - onActiveLine(callback: (e: CustomEvent) => any) { + onActiveLine(callback: (e: CustomEvent) => any) { this.addEventListener("active-line", callback); } @@ -159,7 +161,8 @@ export class Session extends TypedEventTarget() { } async saveToFragment() { - const toSave = { vm: this.app.vm.saveVMState(), activeIC: this.activeIC }; + const vm = await window.VM.get() + const toSave = { vm: vm.state.vm.value, activeIC: this.activeIC }; const bytes = new TextEncoder().encode(toJson(toSave)); try { const c_bytes = await compress(bytes, defaultCompression); @@ -172,21 +175,21 @@ export class Session extends TypedEventTarget() { } async load(data: SessionDB.CurrentDBVmState | OldPrograms | string) { + const vm = await window.VM.get() if (typeof data === "string") { - this._activeIC = 1; - this.app.vm.restoreVMState(demoVMState.vm); - this._programs = new Map([[1, data]]); + this.activeIC = 1; + await vm.restoreVMState(demoVMState.vm); + this.programs = [[1, data]]; } else if ("programs" in data) { - this._activeIC = 1; - this.app.vm.restoreVMState(demoVMState.vm); - this._programs = new Map(data.programs); + this.activeIC = 1; + await vm.restoreVMState(demoVMState.vm); + this.programs = data.programs; } else if ("vm" in data) { - this._programs = new Map(); + this.programs = []; const state = data.vm; // assign first so it's present when the // vm fires events - this._activeIC = data.activeIC; - const vm = await window.VM.get() + this._activeIC.value = data.activeIC; await vm.restoreVMState(state); this.programs = vm.getPrograms(); // assign again to fire event @@ -259,7 +262,7 @@ export class Session extends TypedEventTarget() { async saveLocal(name: string) { const state: SessionDB.CurrentDBVmState = { vm: await (await window.VM.get()).ic10vm.saveVMState(), - activeIC: this.activeIC, + activeIC: this.activeIC.peek(), }; const db = await this.openIndexDB(); const transaction = db.transaction( diff --git a/www/src/ts/utils.ts b/www/src/ts/utils.ts index 2f7b4ed..f937d5e 100644 --- a/www/src/ts/utils.ts +++ b/www/src/ts/utils.ts @@ -1,6 +1,18 @@ import { Ace } from "ace-builds"; import { TransferHandler } from "comlink"; +export function isSome(object: T | null | undefined): object is T { + return typeof object !== "undefined" && object !== null; +} + +export function range(size: number, start: number = 0): number[] { + const base = [...Array(size ?? 0).keys()] + if (start != 0) { + return base.map(i => i + start); + } + return base +} + export function docReady(fn: () => void) { // see if DOM is already available if ( diff --git a/www/src/ts/virtualMachine/baseDevice.ts b/www/src/ts/virtualMachine/baseDevice.ts index d7c4fef..642ede9 100644 --- a/www/src/ts/virtualMachine/baseDevice.ts +++ b/www/src/ts/virtualMachine/baseDevice.ts @@ -1,334 +1,22 @@ -import { property, state } from "lit/decorators.js"; - import type { - Slot, - Connection, - ICError, - LogicType, - LogicField, - Operand, ObjectID, TemplateDatabase, - FrozenObjectFull, - Class, - LogicSlotType, - SlotOccupantInfo, - ICState, - ObjectTemplate, } from "ic10emu_wasm"; -import { crc32, structuralEqual } from "utils"; -import { LitElement, PropertyValueMap } from "lit"; +import { LitElement } from "lit"; import { - computed, signal, } from '@lit-labs/preact-signals'; import type { Signal } from '@lit-labs/preact-signals'; - -export interface VmObjectSlotInfo { - parent: ObjectID; - index: number; - name: string; - typ: Class; - logicFields: Map; - quantity: number; - occupant: ComputedObjectSignals | null; -} - -export class ComputedObjectSignals { - obj: Signal; - id: Signal; - template: Signal; - - name: Signal; - nameHash: Signal; - prefabName: Signal; - prefabHash: Signal; - displayName: Signal; - logicFields: Signal | null>; - slots: Signal; - slotsCount: Signal; - reagents: Signal | null>; - - connections: Signal; - visibleDevices: Signal; - - memory: Signal; - icIP: Signal; - icOpCount: Signal; - icState: Signal; - errors: Signal; - registers: Signal; - aliases: Signal | null>; - defines: Signal | null>; - - numPins: Signal; - pins: Signal | null>; - - - constructor(obj: Signal) { - this.obj = obj - this.id = computed(() => { return this.obj.value.obj_info.id; }); - - this.template = computed(() => { return this.obj.value.template; }); - - this.name = computed(() => { return this.obj.value.obj_info.name; }); - this.nameHash = computed(() => { return this.name.value !== "undefined" ? crc32(this.name.value) : null; }); - this.prefabName = computed(() => { return this.obj.value.obj_info.prefab; }); - this.prefabHash = computed(() => { return this.obj.value.obj_info.prefab_hash; }); - this.displayName = computed(() => { return this.obj.value.obj_info.name ?? this.obj.value.obj_info.prefab; }); - - this.logicFields = computed(() => { - const obj_info = this.obj.value.obj_info; - const template = this.obj.value.template; - - const logicValues = - obj_info.logic_values != null - ? (new Map(Object.entries(obj_info.logic_values)) as Map< - LogicType, - number - >) - : null; - const logicTemplate = - "logic" in template ? template.logic : null; - - return new Map( - Array.from(Object.entries(logicTemplate?.logic_types) ?? []).map( - ([lt, access]) => { - let field: LogicField = { - field_type: access, - value: logicValues.get(lt as LogicType) ?? 0, - }; - return [lt as LogicType, field]; - }, - ), - ) - }); - - this.slots = computed(() => { - const obj_info = this.obj.value.obj_info; - const template = this.obj.value.template; - - const slotsOccupantInfo = - obj_info.slots != null - ? new Map( - Object.entries(obj_info.slots).map(([key, val]) => [ - parseInt(key), - val, - ]), - ) - : null; - const slotsLogicValues = - obj_info.slot_logic_values != null - ? new Map>( - Object.entries(obj_info.slot_logic_values).map( - ([index, values]) => [ - parseInt(index), - new Map(Object.entries(values)) as Map< - LogicSlotType, - number - >, - ], - ), - ) - : null; - const logicTemplate = - "logic" in template ? template.logic : null; - const slotsTemplate = - "slots" in template ? template.slots : []; - - return slotsTemplate.map((template, index) => { - const fieldEntryInfos = Array.from( - Object.entries(logicTemplate?.logic_slot_types.get(index)) ?? [], - ); - const logicFields = new Map( - fieldEntryInfos.map(([slt, access]) => { - let field: LogicField = { - field_type: access, - value: - slotsLogicValues.get(index)?.get(slt as LogicSlotType) ?? 0, - }; - return [slt as LogicSlotType, field]; - }), - ); - let occupantInfo = slotsOccupantInfo.get(index); - let occupant = - typeof occupantInfo !== "undefined" - ? globalObjectSignalMap.get(occupantInfo.id) ?? null - : null; - let slot: VmObjectSlotInfo = { - parent: obj_info.id, - index: index, - name: template.name, - typ: template.typ, - logicFields: logicFields, - occupant: occupant, - quantity: occupantInfo?.quantity ?? 0, - }; - return slot; - }); - }); - - this.slotsCount = computed(() => { - const slotsTemplate = - "slots" in this.obj.value.template ? this.obj.value.template.slots : []; - return slotsTemplate.length; - }); - - this.reagents = computed(() => { - const reagents = - this.obj.value.obj_info.reagents != null - ? new Map( - Object.entries(this.obj.value.obj_info.reagents).map( - ([key, val]) => [parseInt(key), val], - ), - ) - : null; - return reagents; - }); - - this.connections = computed(() => { - const obj_info = this.obj.value.obj_info; - const template = this.obj.value.template; - - const connectionsMap = - obj_info.connections != null - ? new Map( - Object.entries(obj_info.connections).map( - ([key, val]) => [parseInt(key), val], - ), - ) - : null; - const connectionList = - "device" in template - ? template.device.connection_list - : []; - let connections: Connection[] | null = null; - if (connectionList.length !== 0) { - connections = connectionList.map((conn, index) => { - if (conn.typ === "Data") { - return { - CableNetwork: { - typ: "Data", - role: conn.role, - net: connectionsMap.get(index), - }, - }; - } else if (conn.typ === "Power") { - return { - CableNetwork: { - typ: "Power", - role: conn.role, - net: connectionsMap.get(index), - }, - }; - } else if (conn.typ === "PowerAndData") { - return { - CableNetwork: { - typ: "Data", - role: conn.role, - net: connectionsMap.get(index), - }, - }; - } else if (conn.typ === "Pipe") { - return { Pipe: { role: conn.role } }; - } else if (conn.typ === "Chute") { - return { Chute: { role: conn.role } }; - } else if (conn.typ === "Elevator") { - return { Elevator: { role: conn.role } }; - } else if (conn.typ === "LaunchPad") { - return { LaunchPad: { role: conn.role } }; - } else if (conn.typ === "LandingPad") { - return { LandingPad: { role: conn.role } }; - } else if (conn.typ === "PipeLiquid") { - return { PipeLiquid: { role: conn.role } }; - } - return "None"; - }); - } - return connections; - }); - - this.visibleDevices = computed(() => { - return this.obj.value.obj_info.visible_devices.map((id) => globalObjectSignalMap.get(id)) - }); - - this.memory = computed(() => { - return this.obj.value.obj_info.memory ?? null; - }); - - this.icIP = computed(() => { - return this.obj.value.obj_info.circuit?.instruction_pointer ?? null; - }); - - this.icOpCount = computed(() => { - return this.obj.value.obj_info.circuit?.yield_instruction_count ?? null; - }); - - this.icState = computed(() => { - return this.obj.value.obj_info.circuit?.state ?? null; - }); - - this.errors = computed(() => { - return this.obj.value.obj_info.compile_errors ?? null; - }); - - this.registers = computed(() => { - return this.obj.value.obj_info.circuit?.registers ?? null; - }); - - this.aliases = computed(() => { - const aliases = this.obj.value.obj_info.circuit?.aliases ?? null; - return aliases != null ? new Map(Object.entries(aliases)) : null; - }); - - this.defines = computed(() => { - const defines = this.obj.value.obj_info.circuit?.defines ?? null; - return defines != null ? new Map(Object.entries(defines)) : null; - }); - - this.pins = computed(() => { - const pins = this.obj.value.obj_info.device_pins; - return pins != null ? new Map(Object.entries(pins).map(([key, val]) => [parseInt(key), val])) : null; - }); - - this.numPins = computed(() => { - return "device" in this.obj.value.template - ? this.obj.value.template.device.device_pins_length - : Math.max(...Array.from(this.pins.value?.keys() ?? [0])); - }); - - } -} - -class ObjectComputedSignalMap extends Map { - get(id: ObjectID): ComputedObjectSignals { - if (!this.has(id)) { - const obj = window.VM.vm.objects.get(id) - if (typeof obj !== "undefined") { - this.set(id, new ComputedObjectSignals(obj)); - } - } - return super.get(id); - } - set(id: ObjectID, value: ComputedObjectSignals): this { - super.set(id, value); - return this - } -} - -export const globalObjectSignalMap = new ObjectComputedSignalMap(); +import { VirtualMachine } from "virtualMachine"; +import { property } from "lit/decorators.js"; type Constructor = new (...args: any[]) => T; export declare class VMObjectMixinInterface { - objectID: Signal; - activeICId: Signal; - objectSignals: ComputedObjectSignals | null; - _handleDeviceModified(e: CustomEvent): void; - updateObject(): void; - subscribe(...sub: VMObjectMixinSubscription[]): void; - unsubscribe(filter: (sub: VMObjectMixinSubscription) => boolean): void; + objectIDSignal: Signal; + objectID: ObjectID; + vm: Signal; } export type VMObjectMixinSubscription = @@ -339,259 +27,33 @@ export const VMObjectMixin = >( superClass: T, ) => { class VMObjectMixinClass extends superClass { - objectID: Signal; + objectIDSignal: Signal = signal(null); + vm: Signal = signal(null); + + @property({type: Number}) + get objectID(): number { + return this.objectIDSignal.peek(); + } + + set objectID(value: number) { + this.objectIDSignal.value = value; + } constructor (...args: any[]) { super(...args); - this.objectID = signal(null); - this.objectID.subscribe((_) => {this.updateObject()}) + this.setupVM(); } - @state() private objectSubscriptions: VMObjectMixinSubscription[] = []; - - subscribe(...sub: VMObjectMixinSubscription[]) { - this.objectSubscriptions = this.objectSubscriptions.concat(sub); - } - - // remove subscriptions matching the filter - unsubscribe(filter: (sub: VMObjectMixinSubscription) => boolean) { - this.objectSubscriptions = this.objectSubscriptions.filter( - (sub) => !filter(sub), - ); - } - - @state() objectSignals: ComputedObjectSignals | null = null; - - activeICId: Signal = signal(null); - - connectedCallback(): void { - const root = super.connectedCallback(); - window.VM.get().then((vm) => { - vm.addEventListener( - "vm-object-modified", - this._handleDeviceModified.bind(this), - ); - vm.addEventListener( - "vm-objects-update", - this._handleDevicesModified.bind(this), - ); - vm.addEventListener( - "vm-object-id-change", - this._handleDeviceIdChange.bind(this), - ); - vm.addEventListener( - "vm-objects-removed", - this._handleDevicesRemoved.bind(this), - ); - }); - this.updateObject(); - return root; - } - - disconnectedCallback(): void { - window.VM.get().then((vm) => { - vm.removeEventListener( - "vm-object-modified", - this._handleDeviceModified.bind(this), - ); - vm.removeEventListener( - "vm-objects-update", - this._handleDevicesModified.bind(this), - ); - vm.removeEventListener( - "vm-object-id-change", - this._handleDeviceIdChange.bind(this), - ); - vm.removeEventListener( - "vm-objects-removed", - this._handleDevicesRemoved.bind(this), - ); - }); - } - - async _handleDeviceModified(e: CustomEvent) { - const id = e.detail; - const activeIcId = window.App.app.session.activeIC; - if (this.objectID.peek() === id) { - this.updateObject(); - } else if ( - id === activeIcId && - this.objectSubscriptions.includes("active-ic") - ) { - this.updateObject(); - this.requestUpdate(); - } else if (this.objectSubscriptions.includes("visible-devices")) { - const visibleDevices = await window.VM.vm.visibleDeviceIds( - this.objectID.peek(), - ); - if (visibleDevices.includes(id)) { - this.updateObject(); - this.requestUpdate(); - } - } - } - - async _handleDevicesModified(e: CustomEvent) { - const activeIcId = window.App.app.session.activeIC; - const ids = e.detail; - if (ids.includes(this.objectID.peek())) { - this.updateObject(); - if (this.objectSubscriptions.includes("visible-devices")) { - this.requestUpdate(); - } - } else if ( - ids.includes(activeIcId) && - this.objectSubscriptions.includes("active-ic") - ) { - this.updateObject(); - this.requestUpdate(); - } else if (this.objectSubscriptions.includes("visible-devices")) { - const visibleDevices = await window.VM.vm.visibleDeviceIds( - this.objectID.peek(), - ); - if (ids.some((id) => visibleDevices.includes(id))) { - this.updateObject(); - this.requestUpdate(); - } - } - } - - async _handleDeviceIdChange(e: CustomEvent<{ old: number; new: number }>) { - if (this.objectID.peek() === e.detail.old) { - this.objectID.value = e.detail.new; - } else if (this.objectSubscriptions.includes("visible-devices")) { - const visibleDevices = await window.VM.vm.visibleDeviceIds( - this.objectID.peek(), - ); - if ( - visibleDevices.some( - (id) => id === e.detail.old || id === e.detail.new, - ) - ) { - this.requestUpdate(); - } - } - } - - _handleDevicesRemoved(e: CustomEvent) { - const _ids = e.detail; - if (this.objectSubscriptions.includes("visible-devices")) { - this.requestUpdate(); - } - } - - updateObject() { - this.activeICId.value = window.App.app.session.activeIC; - const newObjSignals = globalObjectSignalMap.get(this.objectID.peek()); - if (newObjSignals !== this.objectSignals) { - this.objectSignals = newObjSignals - } - - if (typeof this.objectSignals === "undefined") { - return; - } - - // other updates needed - + private async setupVM() { + this.vm.value = await window.VM.get(); } } return VMObjectMixinClass as Constructor & T; }; -export const VMActiveICMixin = >( - superClass: T, -) => { - class VMActiveICMixinClass extends VMObjectMixin(superClass) { - constructor(...args: any[]) { - super(...args); - this.objectID.value = window.App.app.session.activeIC; - } - - connectedCallback(): void { - const root = super.connectedCallback(); - window.VM.get().then((vm) => - vm.addEventListener("vm-run-ic", this._handleDeviceModified.bind(this)), - ); - window.App.app.session.addEventListener( - "session-active-ic", - this._handleActiveIC.bind(this), - ); - return root; - } - - disconnectedCallback(): void { - window.VM.get().then((vm) => - vm.removeEventListener( - "vm-run-ic", - this._handleDeviceModified.bind(this), - ), - ); - window.App.app.session.removeEventListener( - "session-active-ic", - this._handleActiveIC.bind(this), - ); - } - - _handleActiveIC(e: CustomEvent) { - const id = e.detail; - if (this.objectID.value !== id) { - this.objectID.value = id; - } - this.updateObject(); - } - } - - return VMActiveICMixinClass as Constructor & T; -}; - export declare class VMTemplateDBMixinInterface { - templateDB: TemplateDatabase; + templateDB: Signal; _handleDeviceDBLoad(e: CustomEvent): void; postDBSetUpdate(): void; } - -export const VMTemplateDBMixin = >( - superClass: T, -) => { - class VMTemplateDBMixinClass extends superClass { - connectedCallback(): void { - const root = super.connectedCallback(); - window.VM.vm.addEventListener( - "vm-template-db-loaded", - this._handleDeviceDBLoad.bind(this), - ); - if (typeof window.VM.vm.templateDB !== "undefined") { - this.templateDB = window.VM.vm.templateDB!; - } - return root; - } - - disconnectedCallback(): void { - window.VM.vm.removeEventListener( - "vm-template-db-loaded", - this._handleDeviceDBLoad.bind(this), - ); - } - - _handleDeviceDBLoad(e: CustomEvent) { - this.templateDB = e.detail; - } - - private _templateDB: TemplateDatabase; - - get templateDB(): TemplateDatabase { - return this._templateDB; - } - - postDBSetUpdate(): void { } - - @state() - set templateDB(val: TemplateDatabase) { - this._templateDB = val; - this.postDBSetUpdate(); - } - } - - return VMTemplateDBMixinClass as Constructor & T; -}; diff --git a/www/src/ts/virtualMachine/controls.ts b/www/src/ts/virtualMachine/controls.ts index 1f100d8..29645e2 100644 --- a/www/src/ts/virtualMachine/controls.ts +++ b/www/src/ts/virtualMachine/controls.ts @@ -1,29 +1,15 @@ import { html, css, nothing } from "lit"; import { customElement, query } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { ComputedObjectSignals, globalObjectSignalMap, VMActiveICMixin } from "virtualMachine/baseDevice"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.js"; -import { computed, Signal, watch } from "@lit-labs/preact-signals"; +import { computed, Signal, SignalWatcher, watch } from "@lit-labs/preact-signals"; import { FrozenObjectFull } from "ic10emu_wasm"; +import { VMObjectMixin } from "./baseDevice"; +import { createRef, Ref, ref } from "lit/directives/ref.js"; @customElement("vm-ic-controls") -export class VMICControls extends VMActiveICMixin(BaseElement) { - - circuitHolders: Signal; - - constructor() { - super(); - this.subscribe("active-ic") - this.circuitHolders = computed(() => { - const ids = window.VM.vm.circuitHolderIds.value; - const circuitHolders = []; - for (const id of ids) { - circuitHolders.push(globalObjectSignalMap.get(id)); - } - return circuitHolders; - }); - } +export class VMICControls extends VMObjectMixin(SignalWatcher(BaseElement)) { static styles = [ ...defaultCss, @@ -74,37 +60,89 @@ export class VMICControls extends VMActiveICMixin(BaseElement) { `, ]; - @query(".active-ic-select") activeICSelect: SlSelect; - - forceSelectUpdate() { - if (this.activeICSelect != null) { - this.activeICSelect.handleValueChange(); - } + constructor() { + super(); + this.activeIC.subscribe(() => this.forceSelectUpdate()); + this.icOptions.subscribe(() => this.forceSelectUpdate()); } - protected render() { - const icsOptions = computed(() => { - return this.circuitHolders.value.map((circuitHolder) => { + activeICSelect: Ref = createRef(); - circuitHolder.prefabName.subscribe((_) => {this.forceSelectUpdate()}); - circuitHolder.id.subscribe((_) => {this.forceSelectUpdate()}); - circuitHolder.displayName.subscribe((_) => {this.forceSelectUpdate()}); + selectUpdateTimeout: ReturnType = null; - const span = circuitHolder.name ? html`${watch(circuitHolder.prefabName)}` : nothing ; - return html` - - ${span} - Device:${watch(circuitHolder.id)} ${watch(circuitHolder.displayName)} - ` + forceSelectUpdate() { + if (this.selectUpdateTimeout) { + clearTimeout(this.selectUpdateTimeout); + } + this.selectUpdateTimeout = setTimeout(() => { + if (this.activeICSelect.value != null) { + this.activeICSelect.value.value = this.activeIC.value.toString(); + this.activeICSelect.value.handleValueChange(); + } + }, 100); + } + + activeIC = computed(() => { + return this.vm.value?.activeIC.value + }) + + circuitHolderIds = computed(() => { + return this.vm.value?.state.circuitHolderIds.value ?? []; + }); + + errors = computed(() => { + const obj = this.vm.value?.state.getObject(this.activeIC.value).value; + return obj?.obj_info.compile_errors ?? []; + }); + + icIP = computed(() => { + const circuit = this.vm.value?.state.getCircuitInfo(this.activeIC.value).value; + return circuit?.instruction_pointer ?? null; + }); + + icOpCount = computed(() => { + const circuit = this.vm.value?.state.getCircuitInfo(this.activeIC.value).value; + return circuit?.yield_instruction_count ?? 0; + }); + + icState = computed(() => { + const circuit = this.vm.value?.state.getCircuitInfo(this.activeIC.value).value; + return circuit?.state ?? null; + }); + + + icOptions = computed(() => { + return this.circuitHolderIds.value.map(id => { + const circuitHolder = computed(() => { + return this.vm.value?.state.getObject(id).value; }); + + const prefabName = computed(() => { + return circuitHolder.value?.obj_info.prefab ?? ""; + }); + const displayName = computed(() => { + return circuitHolder.value?.obj_info.name ?? circuitHolder.value?.obj_info.prefab ?? ""; + }); + + prefabName.subscribe(() => this.forceSelectUpdate()); + displayName.subscribe(() => this.forceSelectUpdate()); + + const span = html`${watch(displayName)}`; + return html` + + ${span} + Device:${id} ${watch(displayName)} + ` }); - icsOptions.subscribe((_) => {this.forceSelectUpdate()}); + }); + + render() { const icErrors = computed(() => { - return this.objectSignals?.errors.value?.map( + return this.errors.value.map( (err) => typeof err === "object" && "ParseError" in err @@ -169,28 +207,29 @@ export class VMICControls extends VMActiveICMixin(BaseElement) { hoist size="small" placement="bottom" - value="${watch(this.objectID)}" + value="${this.activeIC.value}" @sl-change=${this._handleChangeActiveIC} class="active-ic-select" + ${ref(this.activeICSelect)} > - ${watch(icsOptions)} + ${watch(this.icOptions)}
Instruction Pointer - ${this.objectSignals ? watch(this.objectSignals.icIP) : nothing} + ${watch(this.icIP)}
Last Run Operations Count - ${this.objectSignals ? watch(this.objectSignals.icOpCount) : nothing} + ${watch(this.icOpCount)}
Last State - ${this.objectSignals ? watch(this.objectSignals.icState) : nothing} + ${watch(this.icState)}
diff --git a/www/src/ts/virtualMachine/device/addDevice.ts b/www/src/ts/virtualMachine/device/addDevice.ts index 4c034ef..a916dfe 100644 --- a/www/src/ts/virtualMachine/device/addDevice.ts +++ b/www/src/ts/virtualMachine/device/addDevice.ts @@ -1,4 +1,4 @@ -import { html, css } from "lit"; +import { html, css, nothing } from "lit"; import { customElement, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; @@ -10,16 +10,24 @@ import { cache } from "lit/directives/cache.js"; import { default as uFuzzy } from "@leeoniya/ufuzzy"; import { when } from "lit/directives/when.js"; import { unsafeHTML } from "lit/directives/unsafe-html.js"; -import { VMTemplateDBMixin } from "virtualMachine/baseDevice"; import { LogicInfo, ObjectTemplate, StructureInfo } from "ic10emu_wasm"; +import { VMObjectMixin } from "virtualMachine/baseDevice"; +import { computed, ReadonlySignal, signal, Signal, watch } from "@lit-labs/preact-signals"; +import { isSome, range, structuralEqual } from "utils"; type LogicableStructureTemplate = Extract< ObjectTemplate, { structure: StructureInfo; logic: LogicInfo } >; +type SearchResult = { + entry: LogicableStructureTemplate; + haystackEntry: string; + ranges: number[]; +}; + @customElement("vm-add-device-button") -export class VMAddDeviceButton extends VMTemplateDBMixin(BaseElement) { +export class VMAddDeviceButton extends VMObjectMixin(BaseElement) { static styles = [ ...defaultCss, css` @@ -38,214 +46,262 @@ export class VMAddDeviceButton extends VMTemplateDBMixin(BaseElement) { @query("sl-drawer") drawer: SlDrawer; @query(".device-search-input") searchInput: SlInput; - private _structures: Map = new Map(); - private _datapoints: [string, string][] = []; - private _haystack: string[] = []; + templateDB = computed(() => { + return this.vm.value?.state.templateDB.value ?? null; + }); - postDBSetUpdate(): void { - this._structures = new Map( - Array.from(Object.values(this.templateDB)).flatMap((template) => { - if ("structure" in template && "logic" in template) { - return [[template.prefab.prefab_name, template]] as [ - string, - LogicableStructureTemplate, - ][]; - } else { - return [] as [string, LogicableStructureTemplate][]; - } - }), - ); - - const datapoints: [string, string][] = []; - for (const entry of this._structures.values()) { - datapoints.push( - [entry.prefab.name, entry.prefab.prefab_name], - [entry.prefab.prefab_name, entry.prefab.prefab_name], - [entry.prefab.desc, entry.prefab.prefab_name], + structures = (() => { + let last: Map = null + return computed(() => { + const next = new Map( + Array.from(Object.values(this.templateDB.value ?? {})).flatMap((template) => { + if ("structure" in template && "logic" in template) { + return [[template.prefab.prefab_name, template]] as [ + string, + LogicableStructureTemplate, + ][]; + } else { + return [] as [string, LogicableStructureTemplate][]; + } + }), ); - } - const haystack: string[] = datapoints.map((data) => data[0]); - this._datapoints = datapoints; - this._haystack = haystack; - this.performSearch(); - } + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; + }); + })(); - private _filter: string = ""; + datapoints = (() => { + let last: [string, string][] = null; + return computed(() => { + const next = [...this.structures.value.values()].flatMap((entry): [string, string][] => { + return [ + [entry.prefab.name, entry.prefab.prefab_name], + [entry.prefab.prefab_name, entry.prefab.prefab_name], + [entry.prefab.desc, entry.prefab.prefab_name], + ] + }); + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; + }); + })(); + + haystack = (() => { + let last: string[] = null; + return computed(() => { + const next = this.datapoints.value.map(data => data[0]); + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; + }); + })(); + + private _filter: Signal = signal(""); + private page = signal(0); get filter() { - return this._filter; + return this._filter.peek(); } - @state() set filter(val: string) { - this._filter = val; - this.page = 0; - this.performSearch(); + this._filter.value = val; + this.page.value = 0; } - private _searchResults: { - entry: LogicableStructureTemplate; - haystackEntry: string; - ranges: number[]; - }[] = []; + private searchResults: ReadonlySignal = (() => { + let last: SearchResult[] = null; + return computed((): SearchResult[] => { + let next: SearchResult[]; + if (this._filter.value) { + const uf = new uFuzzy({}); + const [_idxs, info, order] = uf.search( + this.haystack.value, + this._filter.value, + 0, + 1e3, + ); - private filterTimeout: number | undefined; + const filtered = order?.map((infoIdx) => ({ + name: this.datapoints.value[info.idx[infoIdx]][1], + haystackEntry: this.haystack.value[info.idx[infoIdx]], + ranges: info.ranges[infoIdx], + })); - performSearch() { - if (this._filter) { - const uf = new uFuzzy({}); - const [_idxs, info, order] = uf.search( - this._haystack, - this._filter, - 0, - 1e3, - ); + const unique = [...new Set(filtered.map((obj) => obj.name))].map( + (result) => { + return filtered.find((obj) => obj.name === result); + }, + ); - const filtered = order?.map((infoIdx) => ({ - name: this._datapoints[info.idx[infoIdx]][1], - haystackEntry: this._haystack[info.idx[infoIdx]], - ranges: info.ranges[infoIdx], - })); + next = unique.map(({ name, haystackEntry, ranges }) => ({ + entry: this.structures.value.get(name)!, + haystackEntry, + ranges, + })); + } else { + // return everything + next = [...this.structures.value.values()].map((st) => ({ + entry: st, + haystackEntry: st.prefab.prefab_name, + ranges: [], + })); + } + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; + }); + })(); - const unique = [...new Set(filtered.map((obj) => obj.name))].map( - (result) => { - return filtered.find((obj) => obj.name === result); - }, - ); + numSearchResults = computed(() => { + return this.searchResults.value?.length ?? 0; + }) - this._searchResults = unique.map(({ name, haystackEntry, ranges }) => ({ - entry: this._structures.get(name)!, - haystackEntry, - ranges, - })); - } else { - // return everything - this._searchResults = [...this._structures.values()].map((st) => ({ - entry: st, - haystackEntry: st.prefab.prefab_name, - ranges: [], - })); - } - } + private filterTimeout: ReturnType; - connectedCallback(): void { - super.connectedCallback(); - window.VM.get().then((vm) => - vm.addEventListener( - "vm-template-db-loaded", - this._handleDeviceDBLoad.bind(this), - ), - ); - } - - _handleDeviceDBLoad(e: CustomEvent) { - this.templateDB = e.detail; - } - - @state() private page = 0; + perPage: Signal = signal(40); + maxResultsRendered: Signal = signal(20); renderSearchResults() { - const perPage = 40; - const totalPages = Math.ceil((this._searchResults?.length ?? 0) / perPage); - let pageKeys = Array.from({ length: totalPages }, (_, index) => index); - const extra: { + const totalPages = computed(() => Math.ceil((this.searchResults.value?.length ?? 0) / this.perPage.value)); + const pageKeys = computed(() => range(totalPages.value)); + const extra = computed((): { entry: { prefab: { name: string; prefab_name: string } }; haystackEntry: string; ranges: number[]; - }[] = []; - if (this.page < totalPages - 1) { - extra.push({ - entry: { prefab: { name: "", prefab_name: this.filter } }, - haystackEntry: "...", - ranges: [], - }); - } - return when( - typeof this._searchResults !== "undefined" && - this._searchResults.length < 20, - () => - repeat( - this._searchResults ?? [], + }[] => { + const next: { + entry: { prefab: { name: string; prefab_name: string } }; + haystackEntry: string; + ranges: number[]; + }[] = []; + + if (this.page.value < totalPages.value - 1) { + next.push({ + entry: { prefab: { name: "", prefab_name: this.filter } }, + haystackEntry: "...", + ranges: [], + }); + } + return next; + }); + const pageKeyButtons = computed(() => { + return pageKeys.value.map( + (key, index) => { + const textColorClass = computed(() => index === this.page.value ? "text-purple-500" : nothing) + return html` + + ${key + 1}${index < totalPages.value - 1 ? "," : nothing} + + ` + } + ) + }) + + const results = computed(() => [ + ...this.searchResults.value.slice( + this.perPage.value * this.page.value, + this.perPage.value * this.page.value + this.perPage.value, + ), + ...extra.value, + ].map((result) => { + let hay = result.haystackEntry.slice(0, 15); + if (result.haystackEntry.length > 15) hay += "..."; + const ranges = result.ranges.filter((pos) => pos < 20); + const key = result.entry.prefab.prefab_name; + return html` +
+ ${result.entry.prefab.name} ( + ${ranges.length + ? unsafeHTML(uFuzzy.highlight(hay, ranges)) + : hay + } ) +
+ `; + })); + + const cards = computed(() => { + if (this.numSearchResults.value <= this.maxResultsRendered.value) { + return repeat( + this.searchResults.value ?? [], (result) => result.entry.prefab.prefab_name, (result) => - cache(html` - - - `), - ), - () => html` + html` + + + `, + ); + } else { + return nothing; + } + }); + const searchResultsHtml = computed(() => { + if (this.numSearchResults.value > 0 && this.numSearchResults.value <= this.maxResultsRendered.value) { + return html`${watch(cards)}` + } else { + const excessResults = this.numSearchResults.value - this.maxResultsRendered.value + const filterText = (() => { + if (this.numSearchResults.value > this.maxResultsRendered.value) { + return html`, filter ${excessResults} more to get cards` + } + return nothing + })(); + return html`

- results, filter more to get cards + results${filterText}

Page: - ${pageKeys.map( - (key, index) => html` - ${key + 1}${index < totalPages - 1 ? "," : ""} - `, - )} + ${watch(pageKeyButtons)}
- ${[ - ...this._searchResults.slice( - perPage * this.page, - perPage * this.page + perPage, - ), - ...extra, - ].map((result) => { - let hay = result.haystackEntry.slice(0, 15); - if (result.haystackEntry.length > 15) hay += "..."; - const ranges = result.ranges.filter((pos) => pos < 20); - const key = result.entry.prefab.prefab_name; - return html` -
- ${result.entry.prefab.name} ( - ${ranges.length - ? unsafeHTML(uFuzzy.highlight(hay, ranges)) - : hay} ) -
- `; - })} + ${watch(results)}
- `, - ); + ` + + } + }); + return html`${watch(searchResultsHtml)}`; } _handlePageChange(e: Event) { const span = e.currentTarget as HTMLSpanElement; const key = parseInt(span.getAttribute("key")); - this.page = key; + this.page.value = key; } _handleHaystackClick(e: Event) { const div = e.currentTarget as HTMLDivElement; const key = div.getAttribute("key"); if (key === this.filter) { - this.page += 1; + this.page.value += 1; } else { this.filter = key; this.searchInput.value = key; @@ -284,8 +340,8 @@ export class VMAddDeviceButton extends VMTemplateDBMixin(BaseElement) { slot="footer" variant="primary" @click=${() => { - this.drawer.hide(); - }} + this.drawer.hide(); + }} > Close diff --git a/www/src/ts/virtualMachine/device/card.ts b/www/src/ts/virtualMachine/device/card.ts index c238983..0f738c8 100644 --- a/www/src/ts/virtualMachine/device/card.ts +++ b/www/src/ts/virtualMachine/device/card.ts @@ -1,10 +1,10 @@ -import { html, css, HTMLTemplateResult } from "lit"; -import { customElement, property, query, state } from "lit/decorators.js"; -import { watch, SignalWatcher, computed } from '@lit-labs/preact-signals'; +import { html, css, HTMLTemplateResult, nothing } from "lit"; +import { customElement, property, query } from "lit/decorators.js"; +import { watch, computed } from '@lit-labs/preact-signals'; import { BaseElement, defaultCss } from "components"; -import { VMTemplateDBMixin, VMObjectMixin, globalObjectSignalMap } from "virtualMachine/baseDevice"; +import { VMObjectMixin } from "virtualMachine/baseDevice"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; -import { parseIntWithHexOrBinary, parseNumber } from "utils"; +import { crc32, isSome, parseIntWithHexOrBinary, range } from "utils"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; import SlDialog from "@shoelace-style/shoelace/dist/components/dialog/dialog.component.js"; import "./slot"; @@ -12,13 +12,13 @@ import "./fields"; import "./pins"; import { until } from "lit/directives/until.js"; import { repeat } from "lit/directives/repeat.js"; +import { Connection } from "ic10emu_wasm"; +import { createRef, ref, Ref } from "lit/directives/ref.js"; export type CardTab = "fields" | "slots" | "reagents" | "networks" | "pins"; @customElement("vm-device-card") -export class VMDeviceCard extends VMTemplateDBMixin( - VMObjectMixin(SignalWatcher(BaseElement)), -) { +export class VMDeviceCard extends VMObjectMixin(BaseElement) { image_err: boolean; @property({ type: Boolean }) open: boolean; @@ -26,9 +26,6 @@ export class VMDeviceCard extends VMTemplateDBMixin( constructor() { super(); this.open = false; - this.subscribe( - "active-ic", - ); } static styles = [ @@ -120,114 +117,117 @@ export class VMDeviceCard extends VMTemplateDBMixin( `, ]; - _handleDeviceDBLoad(e: CustomEvent): void { - super._handleDeviceDBLoad(e); - this.updateObject(); - } - onImageErr(e: Event) { this.image_err = true; console.log("Image load error", e); } + thisIsActiveIc = computed(() => { + return this.vm.value?.activeIC.value === this.objectIDSignal.value; + }); + + activeIcPins = computed(() => { + return this.vm.value?.state.getDevicePins(this.vm.value?.activeIC.value).value ?? []; + }); + + prefabName = computed(() => { + return this.vm.value?.state.getObject(this.objectIDSignal.value).value?.obj_info.prefab ?? "unknown"; + }); + + objectName = computed(() => { + return this.vm.value?.state.getObject(this.objectIDSignal.value).value?.obj_info.name ?? ""; + }); + + objectNameHash = computed(() => { + return crc32(this.vm.value?.state.getObject(this.objectIDSignal.value).value?.obj_info.name ?? ""); + }); + + renderHeader(): HTMLTemplateResult { - const thisIsActiveIc = computed(() => { - return this.activeICId.value === this.objectID.value; - }); - - const activeIc = computed(() => { - return globalObjectSignalMap.get(this.activeICId.value); - }); - - const numPins = computed(() => { - return activeIc.value.numPins.value; - }); - - const pins = computed(() => { - return new Array(numPins.value) - .fill(true) - .map((_, index) => this.objectSignals.pins.value.get(index)); - }); const badgesHtml = computed(() => { - const badges: HTMLTemplateResult[] = []; - if (thisIsActiveIc.value) { + if (this.thisIsActiveIc.value) { badges.push(html`db`); } - pins.value.forEach((id, index) => { - if (this.objectID.value == id) { + this.activeIcPins.value.forEach(([pin, id]) => { + if (this.objectIDSignal.value == id) { badges.push( - html`d${index}`, + html`d${pin}`, ); } }, this); return badges }); + + const removeText = computed(() => { + return this.thisIsActiveIc.value + ? "Removing the selected Active IC is disabled" + : "Remove Device"; + }); + return html` - +
Id Name Hash ${watch(badgesHtml)}
@@ -238,7 +238,7 @@ export class VMDeviceCard extends VMTemplateDBMixin( renderFields() { return this.delayRenderTab( "fields", - html``, + html``, ); } @@ -249,17 +249,24 @@ export class VMDeviceCard extends VMTemplateDBMixin( static transparentImg = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" as const; + objectSlotCount = computed(() => { + return this.vm.value?.state.getObjectSlotCount(this.objectIDSignal.value).value; + }); + async renderSlots() { + const slotsHtml = computed(() => { + return repeat(range(this.objectSlotCount.value), + (_slot, index) => html` + + + `, + ); + }); return this.delayRenderTab( "slots", html`
- ${repeat(Array(this.objectSignals.slotsCount), - (_slot, index) => html` - - - `, - )} + ${watch(slotsHtml)}
`, ); @@ -269,37 +276,86 @@ export class VMDeviceCard extends VMTemplateDBMixin( return this.delayRenderTab("reagents", html``); } - renderNetworks() { - const vmNetworks = window.VM.vm.networkIds; - const networks = this.objectSignals.connections.value.map((connection, index, _conns) => { - const conn = - typeof connection === "object" && "CableNetwork" in connection - ? connection.CableNetwork - : null; + networkIds = computed(() => { + return this.vm.value?.state.networkIds.value ?? []; + }); + + numConnections = computed(() => { + return this.vm.value?.state.getObjectConnectionCount(this.objectIDSignal.value).value; + }) + + private _connectionsSelectRefMap: Map> = new Map(); + + getConnectionSelectRef(index: number): Ref { + if (!this._connectionsSelectRefMap.has(index)) { + this._connectionsSelectRefMap.set(index, createRef()); + } + return this._connectionsSelectRefMap.get(index); + } + + forceSelectUpdate(...slSelects: Ref[]) { + for (const slSelect of slSelects) { + if (slSelect.value != null && "handleValueChange" in slSelect.value) { + slSelect.value.handleValueChange(); + } + } + } + + renderConnections() { + const connectionsHtml = computed(() => range(this.numConnections.value).map(index => { + const conn = computed(() => { + return this.vm.value?.state.getObjectConnection(this.objectIDSignal.value, index).value; + }); + const connNet = computed(() => { + const connection: Connection = conn.value ?? "None"; + if (typeof connection === "object" && "CableNetwork" in connection) { + return connection.CableNetwork.net; + } + return null; + }); + const selectDisabled = computed(() => !isSome(connNet.value)); + const selectOptions = computed(() => { + return this.networkIds.value.map(id => html` + + Network ${id} + + `); + }); + const connTyp = computed(() => { + const connection: Connection = conn.value ?? "None"; + return typeof connection === "object" ? Object.keys(connection)[0] : connection; + }); + + const connectionSelectRef = this.getConnectionSelectRef(index); + selectOptions.subscribe(() => {this.forceSelectUpdate(connectionSelectRef)}) + + connNet.subscribe((net) => { + if (isSome(connectionSelectRef.value)) { + connectionSelectRef.value.value = net.toString(0) + connectionSelectRef.value.handleValueChange(); + } + }) + return html` Connection:${index} - ${vmNetworks.value.map( - (net) => - html`Network ${net}`, - )} - ${conn?.typ} + ${watch(selectOptions)} + ${watch(connTyp)} `; - }); + })); return this.delayRenderTab( "networks", - html`
${networks}
`, + html`
${watch(connectionsHtml)}
`, ); } @@ -307,7 +363,7 @@ export class VMDeviceCard extends VMTemplateDBMixin( return this.delayRenderTab( "pins", html`
- +
`, ); } @@ -319,12 +375,12 @@ export class VMDeviceCard extends VMTemplateDBMixin( resolver?: (result: HTMLTemplateResult) => void; }; } = { - fields: {}, - slots: {}, - reagents: {}, - networks: {}, - pins: {}, - }; + fields: {}, + slots: {}, + reagents: {}, + networks: {}, + pins: {}, + }; delayRenderTab( name: CardTab, @@ -351,9 +407,22 @@ export class VMDeviceCard extends VMTemplateDBMixin( } } + numPins = computed(() => { + return this.vm.value?.state.getDeviceNumPins(this.objectIDSignal.value) + }); + + displayName = computed(() => { + const obj = this.vm.value?.state.getObject(this.objectIDSignal.value).value; + return obj?.obj_info.name ?? obj?.obj_info.prefab ?? null; + }); + + imageName = computed(() => { + const obj = this.vm.value?.state.getObject(this.objectIDSignal.value).value; + return obj?.obj_info.prefab ?? "error"; + }); + render(): HTMLTemplateResult { - const disablePins = computed(() => {return !this.objectSignals.numPins.value;}); - const displayName = computed(() => { return this.objectSignals.name.value ?? this.objectSignals.prefabName.value}) + const disablePins = computed(() => { return !this.numPins.value; }); return html`
${this.renderHeader()}
@@ -376,7 +445,7 @@ export class VMDeviceCard extends VMTemplateDBMixin( ${until(this.renderReagents(), html``)} - ${until(this.renderNetworks(), html``)} + ${until(this.renderConnections(), html``)} ${until(this.renderPins(), html``)} @@ -391,12 +460,12 @@ export class VMDeviceCard extends VMTemplateDBMixin(

Are you sure you want to remove this device?

- Id ${this.objectID} : ${watch(displayName)} + Id ${watch(this.objectIDSignal)} : ${watch(this.displayName)}
@@ -435,7 +504,7 @@ export class VMDeviceCard extends VMTemplateDBMixin( const val = parseIntWithHexOrBinary(input.value); if (!isNaN(val)) { window.VM.get().then((vm) => { - if (!vm.changeObjectID(this.objectID.peek(), val)) { + if (!vm.changeObjectID(this.objectID, val)) { input.value = this.objectID.toString(); } }); @@ -448,10 +517,9 @@ export class VMDeviceCard extends VMTemplateDBMixin( const input = e.target as SlInput; const name = input.value.length === 0 ? undefined : input.value; window.VM.get().then((vm) => { - if (!vm.setObjectName(this.objectID.peek(), name)) { - input.value = this.objectSignals.name.value; + if (!vm.setObjectName(this.objectID, name)) { + input.value = this.objectName.peek(); } - this.updateObject(); }); } _handleDeviceRemoveButton(_e: Event) { @@ -460,7 +528,7 @@ export class VMDeviceCard extends VMTemplateDBMixin( _removeDialogRemove() { this.removeDialog.hide(); - window.VM.get().then((vm) => vm.removeDevice(this.objectID.peek())); + window.VM.get().then((vm) => vm.removeDevice(this.objectID)); } _handleChangeConnection(e: CustomEvent) { @@ -468,8 +536,7 @@ export class VMDeviceCard extends VMTemplateDBMixin( const conn = parseInt(select.getAttribute("key")!); const val = select.value ? parseInt(select.value as string) : undefined; window.VM.get().then((vm) => - vm.setDeviceConnection(this.objectID.peek(), conn, val), + vm.setDeviceConnection(this.objectID, conn, val), ); - this.updateObject(); } } diff --git a/www/src/ts/virtualMachine/device/dbutils.ts b/www/src/ts/virtualMachine/device/dbutils.ts index d9b66a1..6348fb8 100644 --- a/www/src/ts/virtualMachine/device/dbutils.ts +++ b/www/src/ts/virtualMachine/device/dbutils.ts @@ -12,7 +12,7 @@ export function connectionFromConnectionInfo(conn: ConnectionInfo): Connection { ) { connection = { CableNetwork: { - net: window.VM.vm.defaultNetwork.peek(), + net: window.VM.vm.state.defaultNetworkId.peek(), typ: conn.typ as CableConnectionType, role: conn.role, }, diff --git a/www/src/ts/virtualMachine/device/deviceList.ts b/www/src/ts/virtualMachine/device/deviceList.ts index 178a13a..bc54390 100644 --- a/www/src/ts/virtualMachine/device/deviceList.ts +++ b/www/src/ts/virtualMachine/device/deviceList.ts @@ -3,23 +3,19 @@ import { customElement, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.js"; -import { structuralEqual } from "utils"; +import { isSome, structuralEqual } from "utils"; import { repeat } from "lit/directives/repeat.js"; import { default as uFuzzy } from "@leeoniya/ufuzzy"; import { VMSlotAddDialog } from "./slotAddDialog"; import "./addDevice" import { SlotModifyEvent } from "./slot"; -import { computed, Signal, signal, SignalWatcher, watch } from "@lit-labs/preact-signals"; -import { globalObjectSignalMap } from "virtualMachine/baseDevice"; +import { computed, ReadonlySignal, Signal, signal, SignalWatcher, watch } from "@lit-labs/preact-signals"; import { ObjectID } from "ic10emu_wasm"; +import { VMObjectMixin } from "virtualMachine/baseDevice"; @customElement("vm-device-list") -export class VMDeviceList extends SignalWatcher(BaseElement) { - devices: Signal; - private _filter: Signal = signal(""); - private _filteredDeviceIds: Signal; - +export class VMDeviceList extends VMObjectMixin(BaseElement) { static styles = [ ...defaultCss, css` @@ -48,34 +44,42 @@ export class VMDeviceList extends SignalWatcher(BaseElement) { constructor() { super(); - this.devices = computed(() => { - const objIds = window.VM.vm.objectIds.value; - const deviceIds = []; - for (const id of objIds) { - const obj = window.VM.vm.objects.get(id); - const info = obj.value.obj_info; - if (!(info.parent_slot != null || info.root_parent_human != null)) { - deviceIds.push(id) + } + + devices: ReadonlySignal = (() => { + let last: ObjectID[] = null; + return computed(() => { + const vm = this.vm.value; + const next: ObjectID[] = vm?.state.vm.value?.objects.flatMap((obj): ObjectID[] => { + if (!isSome(obj.obj_info.parent_slot) && !isSome(obj.obj_info.root_parent_human)) { + return [obj.obj_info.id] } + return []; + }) + if (structuralEqual(last, next)) { + return last; } - deviceIds.sort(); - return deviceIds; + last = next; + return next; }); - this._filteredDeviceIds = computed(() => { + })(); + + private _filter: Signal = signal(""); + private _filteredDeviceIds: ReadonlySignal = (() => { + let last: ObjectID[] = null; + return computed(() => { + const vm = this.vm.value; + let next = this.devices.value; if (this._filter.value) { const datapoints: [string, number][] = []; for (const device_id of this.devices.value) { - const device = globalObjectSignalMap.get(device_id); - if (device) { - const name = device.name.peek(); - const id = device.id.peek(); - const prefab = device.prefabName.peek(); - if (name != null) { - datapoints.push([name, id]); - } - if (prefab != null) { - datapoints.push([prefab, id]); - } + const name = vm?.state.getObjectName(device_id).value; + const prefab = vm?.state.getObjectPrefabName(device_id).value; + if (name != null) { + datapoints.push([name, device_id]); + } + if (prefab != null) { + datapoints.push([prefab, device_id]); } } const haystack: string[] = datapoints.map((data) => data[0]); @@ -87,12 +91,15 @@ export class VMDeviceList extends SignalWatcher(BaseElement) { filtered ?.map((data) => data[1]) ?.filter((val, index, arr) => arr.indexOf(val) === index) ?? []; - return deviceIds; - } else { - return Array.from(this.devices.value); + next = deviceIds; } + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; }); - } + })(); protected firstUpdated(_changedProperties: PropertyValueMap | Map): void { this.renderRoot.querySelector(".device-list").addEventListener( @@ -102,13 +109,13 @@ export class VMDeviceList extends SignalWatcher(BaseElement) { } protected render(): HTMLTemplateResult { - const deviceCards = repeat( + const deviceCards = computed(() => repeat( this.filteredDeviceIds.value, (id) => id, (id) => - html` + html` `, - ); + )); const numDevices = computed(() => this.devices.value.length); const result = html`
@@ -126,7 +133,7 @@ export class VMDeviceList extends SignalWatcher(BaseElement) {
-
${deviceCards}
+
${watch(deviceCards)}
`; @@ -138,7 +145,7 @@ export class VMDeviceList extends SignalWatcher(BaseElement) { _showDeviceSlotDialog( e: CustomEvent, ) { - this.slotDialog.show(e.detail.deviceID, e.detail.slotIndex); + this.slotDialog.show(e.detail.objectID, e.detail.slotIndex); } get filteredDeviceIds() { diff --git a/www/src/ts/virtualMachine/device/fields.ts b/www/src/ts/virtualMachine/device/fields.ts index d71b1ad..dfd6b00 100644 --- a/www/src/ts/virtualMachine/device/fields.ts +++ b/www/src/ts/virtualMachine/device/fields.ts @@ -1,41 +1,36 @@ import { html, css } from "lit"; import { customElement, property } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMTemplateDBMixin, VMObjectMixin } from "virtualMachine/baseDevice"; +import { VMObjectMixin } from "virtualMachine/baseDevice"; import { displayNumber, parseNumber } from "utils"; import type { LogicType } from "ic10emu_wasm"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; import { computed, Signal, watch } from "@lit-labs/preact-signals"; @customElement("vm-device-fields") -export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(BaseElement)) { +export class VMDeviceSlot extends VMObjectMixin(BaseElement) { constructor() { super(); - this.setupSignals(); } - setupSignals() { - this.logicFieldNames = computed(() => { - return Array.from(this.objectSignals.logicFields.value.keys()); - }); - } - - logicFieldNames: Signal; + logicFieldNames = computed(() => { + return this.vm.value?.state.getObjectFieldNames(this.objectIDSignal.value).value; + }); render() { const inputIdBase = `vmDeviceCard${this.objectID}Field`; const fieldsHtml = computed(() => { return this.logicFieldNames.value.map((name) => { const field = computed(() => { - return this.objectSignals.logicFields.value.get(name); + return this.vm.value?.state.getObjectField(this.objectIDSignal.value, name).value ?? null; }); const typ = computed(() => { - return field.value.field_type; + return field.value?.field_type ?? null; }); const value = computed(() => { - return displayNumber(field.value.value); + return displayNumber(field.value?.value ?? null); }); - return html` ${name} @@ -53,10 +48,9 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(BaseElement)) const field = input.getAttribute("key")! as LogicType; const val = parseNumber(input.value); window.VM.get().then((vm) => { - if (!vm.setObjectField(this.objectID.peek(), field, val, true)) { - input.value = this.objectSignals.logicFields.value.get(field).value.toString(); + if (!vm.setObjectField(this.objectID, field, val, true)) { + input.value = displayNumber(this.vm.value?.state.getObjectField(this.objectIDSignal.value, field).value?.value ?? null); } - this.updateObject(); }); } } diff --git a/www/src/ts/virtualMachine/device/pins.ts b/www/src/ts/virtualMachine/device/pins.ts index 240a8b3..8a8bcd1 100644 --- a/www/src/ts/virtualMachine/device/pins.ts +++ b/www/src/ts/virtualMachine/device/pins.ts @@ -1,61 +1,86 @@ -import { html, css } from "lit"; -import { customElement, property } from "lit/decorators.js"; -import { BaseElement, defaultCss } from "components"; -import { VMTemplateDBMixin, VMObjectMixin } from "virtualMachine/baseDevice"; +import { html } from "lit"; +import { customElement } from "lit/decorators.js"; +import { BaseElement } from "components"; +import { VMObjectMixin } from "virtualMachine/baseDevice"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; -import { ObjectID } from "ic10emu_wasm"; -import { effect, watch } from "@lit-labs/preact-signals"; -import { SlOption } from "@shoelace-style/shoelace"; +import { ObjectID, ObjectTemplate } from "ic10emu_wasm"; +import { computed, watch } from "@lit-labs/preact-signals"; +import { createRef, ref, Ref } from "lit/directives/ref.js"; +import { isSome, range } from "utils"; @customElement("vm-device-pins") -export class VMDevicePins extends VMObjectMixin(VMTemplateDBMixin(BaseElement)) { - constructor() { - super(); - // this.subscribe("visible-devices"); +export class VMDevicePins extends VMObjectMixin(BaseElement) { + + forceSelectUpdate(...slSelects: Ref[]) { + for (const slSelect of slSelects) { + if (slSelect.value != null && "handleValueChange" in slSelect.value) { + slSelect.value.handleValueChange(); + } + } } - render() { - const pins = new Array(this.objectSignals.numPins.value ?? 0) - .fill(true) - .map((_, index) => this.objectSignals.pins.value.get(index)); - const visibleDevices = (this.objectSignals.visibleDevices.value ?? []); - const forceSelectUpdate = () => { - const slSelect = this.renderRoot.querySelector("sl-select") as SlSelect; - if (slSelect != null) { - slSelect.handleValueChange(); - } - }; - const pinsHtml = pins?.map( - (pin, index) => { - return html` - d${index} - ${visibleDevices.map( - (device, _index) => { - device.id.subscribe((id: ObjectID) => { - forceSelectUpdate(); - }); - device.displayName.subscribe((_: string) => { - forceSelectUpdate(); - }); - return html` - - Device ${watch(device.id)} : - ${watch(device.displayName)} - - ` - } + private _pinSelectRefMap: Map> = new Map(); - )} - `; - } - ); + getPinSelectRef(index: number): Ref { + if (!this._pinSelectRefMap.has(index)) { + this._pinSelectRefMap.set(index, createRef()); + } + return this._pinSelectRefMap.get(index); + } + + visibleDeviceIds = computed(() => { + const vm = this.vm.value; + const obj = vm?.state.getObject(this.objectIDSignal.value).value + return obj?.obj_info.visible_devices ?? []; + }); + + numPins = computed(() => { + const vm = this.vm.value; + return vm?.state.getDeviceNumPins(this.objectIDSignal.value).value; + }) + + deviceOptions = computed(() => { + return this.visibleDeviceIds.value.map(id => { + const deviceDisplayName = this.vm.value?.state.getObjectDisplayName(id); + deviceDisplayName.subscribe(() => { + this.forceSelectUpdate(...this._pinSelectRefMap.values()); + }); + return html` + + Device ${id} : + ${watch(deviceDisplayName)} + + ` + }); + }); + + render() { + const pinsHtml = computed(() => { + return range(this.numPins.value).map( + index => { + const selectRef = this.getPinSelectRef(index); + const pin = computed(() => { + const vm = this.vm.value; + return vm?.state.getDevicePin(this.objectIDSignal.value, index).value; + }); + + return html` + + d${index} + ${watch(this.deviceOptions)} + + `; + } + ); + }); return pinsHtml; } @@ -63,7 +88,6 @@ export class VMDevicePins extends VMObjectMixin(VMTemplateDBMixin(BaseElement)) const select = e.target as SlSelect; const pin = parseInt(select.getAttribute("key")!); const val = select.value ? parseInt(select.value as string) : undefined; - window.VM.get().then((vm) => vm.setDevicePin(this.objectID.peek(), pin, val)); - this.updateObject(); + window.VM.get().then((vm) => vm.setDevicePin(this.objectID, pin, val)); } } diff --git a/www/src/ts/virtualMachine/device/slot.ts b/www/src/ts/virtualMachine/device/slot.ts index 6f05e04..cf34878 100644 --- a/www/src/ts/virtualMachine/device/slot.ts +++ b/www/src/ts/virtualMachine/device/slot.ts @@ -1,11 +1,12 @@ import { html, css } from "lit"; import { customElement, property } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMTemplateDBMixin, VMObjectMixin, VmObjectSlotInfo, ComputedObjectSignals } from "virtualMachine/baseDevice"; +import { VMObjectMixin, } from "virtualMachine/baseDevice"; import { clamp, crc32, displayNumber, + isSome, parseNumber, } from "utils"; import { @@ -21,34 +22,22 @@ import { when } from "lit/directives/when.js"; import { computed, signal, Signal, SignalWatcher, watch } from "@lit-labs/preact-signals"; export interface SlotModifyEvent { - deviceID: number; + objectID: number; slotIndex: number; } -@customElement("vm-device-slot") -export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(SignalWatcher(BaseElement))) { - private _slotIndex: Signal; +@customElement("vm-object-slot") +export class VMDeviceSlot extends VMObjectMixin(BaseElement) { - slotSignal: Signal; - - get slotIndex() { - return this._slotIndex.value; - } + slotIndexSignal: Signal = signal(0); @property({ type: Number }) - set slotIndex(val: number) { - this._slotIndex.value = val; + get slotIndex() { + return this.slotIndexSignal.peek(); } - constructor() { - super(); - this._slotIndex = signal(0); - this.subscribe("active-ic"); - this.slotSignal = computed(() => { - const index = this._slotIndex.value; - return this.objectSignals.slots.value[index]; - }); - this.setupSignals(); + set slotIndex(val: number) { + this.slotIndexSignal.value = val; } static styles = [ @@ -79,93 +68,86 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(SignalWatcher( `, ]; - setupSignals() { - this.slotOccupant = computed(() => { - const slot = this.slotSignal.value ?? null; - return slot?.occupant ?? null; - }); - this.slotFieldTypes = computed(() => { - return Array.from(this.slotSignal.value?.logicFields.keys() ?? []) ; - }); - this.slotOccupantImg = computed(() => { - const slot = this.slotSignal.value ?? null; - if (slot != null && slot.occupant != null) { - const prefabName = slot.occupant.prefabName; - return `img/stationpedia/${watch(prefabName)}.png`; - } else { - return `img/stationpedia/SlotIcon_${slot.typ}.png`; - } - }); - this.slotOccupantPrefabName = computed(() => { - const slot = this.slotSignal.value ?? null; - if (slot != null && slot.occupant != null) { - const prefabName = slot.occupant.prefabName.value; - return prefabName; - } else { - return null; - } - }); - this.slotOccupantTemplate = computed(() => { - if (this.objectSignals != null && "slots" in this.objectSignals.template.value) { - return this.objectSignals.template.value.slots[this.slotIndex]; - } else { - return null; - } - }); - } - slotOccupant: Signal; - slotFieldTypes: Signal; - slotOccupantImg: Signal; - slotOccupantPrefabName: Signal; - slotOccupantTemplate: Signal; + slotInfo = computed(() => { + return this.vm.value?.state.getObjectSlotInfo(this.objectIDSignal.value, this.slotIndexSignal.value).value ?? null; + }); + + slotOccupantId = computed(() => { + const slot = this.slotInfo.value ?? null; + return slot?.occupant ?? null; + }); + + slotOccupant = computed(() => { + return this.vm.value?.state.getObject(this.slotOccupantId.value).value; + }); + + slotFieldTypes = computed(() => { + return this.vm.value?.state.getObjectSlotFieldNames(this.objectIDSignal.value, this.slotIndexSignal.value).value ?? []; + }); + + slotOccupantImg = computed(() => { + const occupant = this.slotOccupant.value; + if (isSome(occupant)) { + const prefabName = occupant.obj_info.prefab; + return `img/stationpedia/${prefabName}.png`; + } else { + const slot = this.vm.value?.state.getObjectSlotInfo(this.objectIDSignal.value, this.slotIndexSignal.value).value ?? null; + return `img/stationpedia/SlotIcon_${slot?.typ}.png`; + } + }); + + slotOccupantPrefabName = computed(() => { + const occupant = this.slotOccupant.value; + return occupant?.obj_info.prefab ?? null; + }); + + slotQuantity = computed(() => { + const slot = this.slotInfo.value ?? null; + return slot?.quantity; + }); + + slotTyp = computed(() => { + const slot = this.slotInfo.value ?? null; + return slot?.typ; + }); + + slotName = computed(() => { + const slot = this.slotInfo.value ?? null; + return slot?.name ?? slot?.typ; + }); + + slotDisplayName = computed(() => { + return this.slotOccupantPrefabName.value ?? this.slotName ?? ""; + }); + + maxQuantity = computed(() => { + const occupant = this.slotOccupant.value; + const template = occupant?.template ?? null; + if (isSome(template) && "item" in template) { + return template.item.max_quantity; + } + return 1; + }); renderHeader() { - const inputIdBase = `vmDeviceSlot${this.objectID}Slot${this.slotIndex}Head`; - // const slot = this.slotSignal.value; - const slotImg = this.slotOccupantImg; + // const inputIdBase = computed(() => `vmDeviceSlot${this.objectIDSignal.value}Slot${this.slotIndexSignal.value}Head`); const img = html``; - const template = this.slotOccupantTemplate; - const templateName = computed(() => { - return template.value?.name ?? null; - }); - const slotTyp = computed(() => { - return this.slotSignal.value.typ; - }) const enableQuantityInput = false; - const quantity = computed(() => { - const slot = this.slotSignal.value; - return slot.quantity; - }); - - const maxQuantity = computed(() => { - const slotOccupant = this.slotSignal.value.occupant; - const template = slotOccupant?.template.value ?? null; - if (template != null && "item" in template) { - return template.item.max_quantity; - } else { - return 1; - } - }); - - const slotDisplayName = computed(() => { - return this.slotOccupantPrefabName.value ?? this.slotSignal.value.typ; + const removeDisabled = computed(() => { + return this.vm.value?.activeIC.value === this.objectIDSignal.value && this.slotTyp.value === "ProgrammableChip" }); const tooltipContent = computed(() => { - return this.activeICId === this.objectID && slotTyp.value === "ProgrammableChip" + return removeDisabled.value ? "Removing the selected Active IC is disabled" : "Remove Occupant" - }) - - const removeDisabled = computed(() => { - return this.activeICId === this.objectID && slotTyp.value === "ProgrammableChip" }); const quantityContent = computed(() => { @@ -176,7 +158,7 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(SignalWatcher( text-neutral-200/90 font-mono bg-neutral-500/40 rounded pl-1 pr-1" > - ${watch(quantity)}/${watch(maxQuantity)} + ${watch(this.slotQuantity)}/${watch(this.maxQuantity)}
` } else { @@ -185,34 +167,30 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(SignalWatcher( }); const slotName = computed(() => { - if(this.slotOccupant.value != null) { - return html` ${watch(this.slotOccupantPrefabName)} ` - } else { - html` ${watch(templateName)} ` - } + return html` ${watch(this.slotDisplayName)} ` }); const inputContent = computed(() => { - if (this.slotOccupant.value != null) { + if (isSome(this.slotOccupant.value)) { return html`
${enableQuantityInput - ? html`
Max Quantity: - ${watch(maxQuantity)} + ${watch(this.maxQuantity)}
` - : ""} + : ""} @@ -245,7 +223,7 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(SignalWatcher( > ${this.slotIndex}
- + ${img} ${watch(quantityContent)} @@ -258,7 +236,7 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(SignalWatcher(
Type:${watch(slotTyp)} + >${watch(this.slotTyp)}
@@ -268,7 +246,7 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(SignalWatcher( } _handleSlotOccupantRemove() { - window.VM.vm.removeSlotOccupant(this.objectID.peek(), this.slotIndex); + window.VM.vm.removeSlotOccupant(this.objectID, this.slotIndex); } _handleSlotClick(_e: Event) { @@ -276,64 +254,57 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(SignalWatcher( new CustomEvent("device-modify-slot", { bubbles: true, composed: true, - detail: { deviceID: this.objectID.peek(), slotIndex: this.slotIndex }, + detail: { objectID: this.objectID, slotIndex: this.slotIndex }, }), ); } _handleSlotQuantityChange(e: Event) { const input = e.currentTarget as SlInput; - const slot = this.slotSignal.value; const val = clamp( input.valueAsNumber, 1, - "item" in slot.occupant.template.value - ? slot.occupant.template.value.item.max_quantity - : 1, + this.maxQuantity.peek() ); if ( !window.VM.vm.setObjectSlotField( - this.objectID.peek(), + this.objectID, this.slotIndex, "Quantity", val, true, ) ) { - input.value = this.slotSignal.value.quantity.toString(); + input.value = this.slotQuantity.value.toString(); } } renderFields() { - const inputIdBase = `vmDeviceSlot${this.objectID}Slot${this.slotIndex}Field`; + const inputIdBase = computed(() => `vmDeviceSlot${this.objectIDSignal.value}Slot${this.slotIndexSignal.value}Field`); const fields = computed(() => { - const slot = this.slotSignal.value; - const _fields = - slot.logicFields?? - new Map(); return this.slotFieldTypes.value.map( - (name, _index, _types) => { + field => { const slotField = computed(() => { - return this.slotSignal.value.logicFields.get(name); + return this.vm.value?.state.getObjectSlotField(this.objectIDSignal.value, this.slotIndexSignal.value, field).value ?? null; }); const fieldValue = computed(() => { - return displayNumber(slotField.value.value); + return displayNumber(slotField.value?.value ?? null); }) const fieldAccessType = computed(() => { - return slotField.value.field_type; + return slotField.value?.field_type ?? null; }) return html` - ${name} + ${field} ${watch(fieldAccessType)} @@ -354,27 +325,19 @@ export class VMDeviceSlot extends VMObjectMixin(VMTemplateDBMixin(SignalWatcher( const field = input.getAttribute("key")! as LogicSlotType; let val = parseNumber(input.value); if (field === "Quantity") { - const slot = this.slotSignal.value; + const slot = this.slotIndexSignal.value; val = clamp( input.valueAsNumber, 1, - "item" in slot.occupant.template.value - ? slot.occupant.template.value.item.max_quantity - : 1, + this.maxQuantity.peek(), ); } window.VM.get().then((vm) => { if ( - !vm.setObjectSlotField(this.objectID.peek(), this.slotIndex, field, val, true) + !vm.setObjectSlotField(this.objectID, this.slotIndex, field, val, true) ) { - input.value = ( - this.slotSignal.value.logicFields ?? - new Map() - ) - .get(field) - .toString(); + input.value = (vm.state.getObjectSlotField(this.objectIDSignal.value, this.slotIndexSignal.value, field).value.value ?? null).toString(); } - this.updateObject(); }); } diff --git a/www/src/ts/virtualMachine/device/slotAddDialog.ts b/www/src/ts/virtualMachine/device/slotAddDialog.ts index 4650aef..10eebcd 100644 --- a/www/src/ts/virtualMachine/device/slotAddDialog.ts +++ b/www/src/ts/virtualMachine/device/slotAddDialog.ts @@ -1,27 +1,25 @@ import { html, css, nothing } from "lit"; -import { customElement, property, query, state } from "lit/decorators.js"; +import { customElement, query } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { ComputedObjectSignals, globalObjectSignalMap, VMTemplateDBMixin } from "virtualMachine/baseDevice"; +import { VMObjectMixin } from "virtualMachine/baseDevice"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; import SlDialog from "@shoelace-style/shoelace/dist/components/dialog/dialog.component.js"; import { VMDeviceCard } from "./card"; -import { when } from "lit/directives/when.js"; import uFuzzy from "@leeoniya/ufuzzy"; import { FrozenObject, ItemInfo, - LogicField, - LogicSlotType, ObjectInfo, ObjectTemplate, } from "ic10emu_wasm"; import { computed, ReadonlySignal, signal, Signal, watch } from "@lit-labs/preact-signals"; import { repeat } from "lit/directives/repeat.js"; +import { isSome, structuralEqual } from "utils"; type SlotableItemTemplate = Extract; @customElement("vm-slot-add-dialog") -export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { +export class VMSlotAddDialog extends VMObjectMixin(BaseElement) { static styles = [ ...defaultCss, css` @@ -40,11 +38,6 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { `, ]; - private _items: Signal> = signal({}); - private _filteredItems: ReadonlySignal; - private _datapoints: ReadonlySignal<[string, string][]>; - private _haystack: ReadonlySignal; - private _filter: Signal = signal(""); get filter() { return this._filter.peek(); @@ -54,75 +47,104 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { this._filter.value = val; } - private _searchResults: ReadonlySignal<{ - entry: SlotableItemTemplate; - haystackEntry: string; - ranges: number[]; - }[]>; + templateDB = computed(() => { + return this.vm.value?.state.templateDB.value ?? null; + }); - constructor() { - super(); - this.setupSearch(); - } + items = (() => { + let last: { [k: string]: SlotableItemTemplate } = null; + return computed(() => { + const next = Object.fromEntries( + Array.from(Object.values(this.templateDB.value ?? {})).flatMap((template) => { + if ("item" in template) { + return [[template.prefab.prefab_name, template]] as [ + string, + SlotableItemTemplate, + ][]; + } else { + return [] as [string, SlotableItemTemplate][]; + } + }), + ); + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; + }); + })(); - postDBSetUpdate(): void { - this._items.value = Object.fromEntries( - Array.from(Object.values(this.templateDB)).flatMap((template) => { - if ("item" in template) { - return [[template.prefab.prefab_name, template]] as [ - string, - SlotableItemTemplate, - ][]; - } else { - return [] as [string, SlotableItemTemplate][]; - } - }), - ); - } - - setupSearch() { - const filteredItems = computed(() => { - let filtered = Array.from(Object.values(this._items.value)); - const obj = globalObjectSignalMap.get(this.objectID.value ?? null); - if (obj != null) { + filteredItems = (() => { + let last: SlotableItemTemplate[] = null; + return computed(() => { + let filtered = Array.from(Object.values(this.items.value)); + const obj = this.vm.value?.state.getObject(this.objectIDSignal.value).value; + if (isSome(obj)) { const template = obj.template; - const slot = "slots" in template.value ? template.value.slots[this.slotIndex.value] : null; + const slot = "slots" in template ? template.slots[this.slotIndex.value] : null; const typ = slot.typ; if (typeof typ === "string" && typ !== "None") { - filtered = Array.from(Object.values(this._items.value)).filter( + filtered = Array.from(Object.values(this.items.value)).filter( (item) => item.item.slot_class === typ, ); } } + if (structuralEqual(last, filtered)) { + return last; + } + last = filtered; return filtered; }); - this._filteredItems = filteredItems; + })(); - const datapoints = computed(() => { + datapoints = (() => { + let last: [string, string][] = null; + return computed(() => { const datapoints: [string, string][] = []; - for (const entry of this._filteredItems.value) { + for (const entry of this.filteredItems.value) { datapoints.push( [entry.prefab.name, entry.prefab.prefab_name], [entry.prefab.prefab_name, entry.prefab.prefab_name], [entry.prefab.desc, entry.prefab.prefab_name], ); } + if (structuralEqual(last, datapoints)) { + return last; + } + last = datapoints; return datapoints; }); - this._datapoints = datapoints; + })(); - const haystack: Signal = computed(() => { - return datapoints.value.map((data) => data[0]); + haystack = (() => { + let last: string[] = null; + return computed(() => { + const hay = this.datapoints.value.map(data => data[0]) + if (structuralEqual(last, hay)) { + return last; + } + last = hay; + return hay }); - this._haystack = haystack; + })(); - const searchResults = computed(() => { + searchResults: ReadonlySignal<{ + entry: SlotableItemTemplate + haystackEntry: string, + ranges: number[] + }[]> = (() => { + let last: { + entry: SlotableItemTemplate + haystackEntry: string, + ranges: number[] + }[] = null; + return computed(() => { let results; if (this._filter.value) { const uf = new uFuzzy({}); const [_idxs, info, order] = uf.search( - this._haystack.value, + this.haystack.value, this._filter.value, 0, 1e3, @@ -130,8 +152,8 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { const filtered = order?.map((infoIdx) => ({ - name: this._datapoints.value[info.idx[infoIdx]][1], - haystackEntry: this._haystack.value[info.idx[infoIdx]], + name: this.datapoints.value[info.idx[infoIdx]][1], + haystackEntry: this.haystack.value[info.idx[infoIdx]], ranges: info.ranges[infoIdx], })) ?? []; @@ -141,22 +163,25 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { }); results = unique.map(({ name, haystackEntry, ranges }) => ({ - entry: this._items.value[name]!, + entry: this.items.value[name]!, haystackEntry, ranges, })); } else { // return everything - results = [...this._filteredItems.value].map((st) => ({ + results = [...this.filteredItems.value].map((st) => ({ entry: st, haystackEntry: st.prefab.prefab_name, ranges: [], })); } + if (structuralEqual(last, results)) { + return last; + } + last = results return results; }); - this._searchResults = searchResults; - } + })(); renderSearchResults() { const enableNone = false; @@ -170,7 +195,7 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { `; const resultsHtml = computed(() => { return repeat( - this._searchResults.value, + this.searchResults.value, (result) => { return result.entry.prefab.prefab_hash; }, @@ -205,15 +230,15 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { } _handleClickNone() { - window.VM.vm.removeSlotOccupant(this.objectID.peek(), this.slotIndex.peek()); + window.VM.vm.removeSlotOccupant(this.objectID, this.slotIndex.peek()); this.hide(); } _handleClickItem(e: Event) { const div = e.currentTarget as HTMLDivElement; const key = parseInt(div.getAttribute("key")); - const entry = this.templateDB.get(key) as SlotableItemTemplate; - const obj = window.VM.vm.objects.get(this.objectID.peek()); + const entry = this.templateDB.value.get(key) as SlotableItemTemplate; + const obj = window.VM.vm.state.getObject(this.objectID); const dbTemplate = obj.peek().template; console.log("using entry", dbTemplate); @@ -224,7 +249,7 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { database_template: true, template: undefined, }; - window.VM.vm.setSlotOccupant(this.objectID.peek(), this.slotIndex.peek(), template, 1); + window.VM.vm.setSlotOccupant(this.objectID, this.slotIndex.peek(), template, 1); this.hide(); } @@ -232,14 +257,10 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { @query(".device-search-input") searchInput: SlInput; render() { - const device = computed(() => { - return globalObjectSignalMap.get(this.objectID.value) ?? null; + const name = computed(() => { + return this.vm.value?.state.getObjectDisplayName(this.objectIDSignal.value) ?? ""; }); - const name = computed(() => { - return device.value?.displayName.value ?? nothing; - - }); - const id = computed(() => this.objectID.value ?? 0); + const id = computed(() => this.objectIDSignal.value ?? 0); const resultsHtml = html`
${this.renderSearchResults()} @@ -284,11 +305,10 @@ export class VMSlotAddDialog extends VMTemplateDBMixin(BaseElement) { this.slotIndex = undefined; } - private objectID: Signal = signal(null); private slotIndex: Signal = signal(0); show(objectID: number, slotIndex: number) { - this.objectID.value = objectID; + this.objectIDSignal.value = objectID; this.slotIndex.value = slotIndex; this.dialog.show(); this.searchInput.select(); diff --git a/www/src/ts/virtualMachine/device/template.ts b/www/src/ts/virtualMachine/device/template.ts index 897af10..67840bc 100644 --- a/www/src/ts/virtualMachine/device/template.ts +++ b/www/src/ts/virtualMachine/device/template.ts @@ -20,12 +20,12 @@ import { customElement, property, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; import { connectionFromConnectionInfo } from "./dbutils"; -import { crc32, displayNumber, parseNumber } from "utils"; +import { crc32, displayNumber, parseNumber, structuralEqual } from "utils"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; import { VMDeviceCard } from "./card"; -import { globalObjectSignalMap, VMTemplateDBMixin } from "virtualMachine/baseDevice"; -import { computed, Signal, watch } from "@lit-labs/preact-signals"; +import { VMObjectMixin } from "virtualMachine/baseDevice"; +import { computed, effect, signal, Signal, watch } from "@lit-labs/preact-signals"; import { createRef, ref, Ref } from "lit/directives/ref.js"; export interface SlotTemplate { @@ -43,7 +43,7 @@ export interface ConnectionCableNetwork { } @customElement("vm-device-template") -export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { +export class VmObjectTemplate extends VMObjectMixin(BaseElement) { static styles = [ ...defaultCss, css` @@ -84,34 +84,40 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { objectName: Signal; connections: Signal; - constructor() { - super(); - this.templateDB = window.VM.vm.templateDB; - } - - private _prefabName: string; - private _prefabHash: number; + private prefabNameSignal = signal(null); + private prefabHashSignal = computed(() => crc32(this.prefabNameSignal.value)); get prefabName(): string { - return this._prefabName; + return this.prefabNameSignal.peek(); } get prefabHash(): number { - return this._prefabHash; + return this.prefabHashSignal.peek(); } @property({ type: String }) set prefabName(val: string) { - this._prefabName = val; - this._prefabHash = crc32(this._prefabName); - this.setupState(); + this.prefabNameSignal.value = val; } - get dbTemplate(): ObjectTemplate { - return this.templateDB.get(this._prefabHash); + dbTemplate = (() => { + let last: ObjectTemplate = null; + return computed(() => { + const next = this.vm.value?.state.templateDB.value.get(this.prefabHashSignal.value) ?? null; + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; + }); + })(); + + constructor() { + super(); + this.dbTemplate.subscribe(() => this.setupState()) } setupState() { - const dbTemplate = this.dbTemplate; + const dbTemplate = this.dbTemplate.value; this.fields.value = Object.fromEntries( ( @@ -122,7 +128,7 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { ) as [LogicType, MemoryAccess][] ).map(([lt, access]) => { const value = - lt === "PrefabHash" ? this.dbTemplate.prefab.prefab_hash : 0.0; + lt === "PrefabHash" ? dbTemplate.prefab.prefab_hash : 0.0; return [lt, value]; }), ) as Record; @@ -187,7 +193,7 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { const val = parseNumber(input.value); this.fields.value = { ...this.fields.value, [field]: val}; if (field === "ReferenceId" && val !== 0) { - this.objectId.value = val; + this.objectIDSignal.value = val; } } @@ -213,11 +219,16 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { return html``; } + networkOptions = computed(() => { + const vm = this.vm.value; + return vm?.state.networkIds.value.map(net => html`Network ${net}`); + }); + renderNetworks() { const vm = window.VM.vm; - const vmNetworks = computed(() => { - return vm.networkIds.value.map((net) => html`Network ${net}`); - }); + this.networkOptions.subscribe((_) => { + this.forceSelectUpdate(this.networksSelectRef); + }) const connections = computed(() => { this.connections.value.map((connection, index, _conns) => { const conn = @@ -236,13 +247,12 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { ${ref(this.networksSelectRef)} > Connection:${index} - ${watch(vmNetworks)} + ${watch(this.networkOptions)} ${conn?.typ} `; }); }); - vmNetworks.subscribe((_) => { this.forceSelectUpdate(this.networksSelectRef)}) return html`
${watch(connections)} @@ -272,42 +282,50 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { this.forceSelectUpdate(...this._pinsSelectRefMap.values()); } - renderPins(): HTMLTemplateResult { - const networks = computed(() => { - return this.connections.value.flatMap((connection, index) => { - return typeof connection === "object" && "CableNetwork" in connection - ? [connection.CableNetwork.net] - : []; - }); + networks = computed(() => { + return this.connections.value.flatMap(connection => { + return typeof connection === "object" && "CableNetwork" in connection + ? [connection.CableNetwork.net] + : []; }); - const visibleDeviceIds = computed(() => { - return [ - ...new Set( - networks.value.flatMap((net) => window.VM.vm.networkDataDevicesSignal(net).value), - ), - ]; + }); + visibleDeviceIds = (() => { + let last: ObjectID[] = null; + return computed(() => { + const vm = this.vm.value; + const next = [ + ...new Set( + this.networks.value.flatMap((net) => vm?.state.getNetwork(net).value.devices ?? []), + ), + ]; + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; }); - const visibleDevices = computed(() => { - return visibleDeviceIds.value.map((id) => - globalObjectSignalMap.get(id), - ); - }); - const visibleDevicesHtml = computed(() => { - return visibleDevices.value.map( - (device, _index) => { - device.id.subscribe((_) => { this.forcePinSelectUpdate(); }); - device.displayName.subscribe((_) => { this.forcePinSelectUpdate(); }); - return html` - - Device ${watch(device.id)} : - ${watch(device.displayName)} - - ` - } - ) - }); - visibleDeviceIds.subscribe((_) => { this.forcePinSelectUpdate(); }); + })(); + + visibleDeviceOptions = computed(() => { + return this.visibleDeviceIds.value.map( + id => { + const displayName = computed(() => { + this.vm.value?.state.getObjectDisplayName(id).value; + }); + displayName.subscribe((_) => { this.forcePinSelectUpdate(); }); + return html` + + Device ${id} : + ${watch(displayName)} + + ` + } + ) + }); + + renderPins(): HTMLTemplateResult { + this.visibleDeviceOptions.subscribe((_) => { this.forcePinSelectUpdate(); }); const pinsHtml = computed(() => { this.pins.value.map( (pin, index) => { @@ -322,7 +340,7 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { ${ref(pinRef)} > d${index} - ${watch(visibleDevicesHtml)} + ${watch(this.visibleDeviceOptions)} ` } ); @@ -341,20 +359,22 @@ export class VmObjectTemplate extends VMTemplateDBMixin(BaseElement) { render() { const device = this.dbTemplate; + const prefabName = computed(() => device.value.prefab.prefab_name); + const name = computed(() => device.value.prefab.name); return html`
- +
- ${device.prefab.name} - ${device?.prefab.prefab_name} - ${device?.prefab.prefab_hash} + ${watch(name)} + ${watch(prefabName)} + ${watch(prefabName)}
; @@ -50,17 +52,8 @@ const jsonErrorRegex = /((invalid type: .*)|(missing field .*)) at line (?() { ic10vm: Comlink.Remote; templateDBPromise: Promise; - templateDB: TemplateDatabase; - private _vmState: Signal = signal(null); - - private _objects: Map>; - private _objectIds: Signal; - private _circuitHolders: Map>; - private _circuitHolderIds: Signal; - private _networks: Map>; - private _networkIds: Signal; - private _default_network: Signal; + state: VMState = new VMState(); private vm_worker: Worker; @@ -69,15 +62,6 @@ class VirtualMachine extends TypedEventTarget() { constructor(app: App) { super(); this.app = app; - - this._objects = new Map(); - this._objectIds = signal([]); - this._circuitHolders = new Map(); - this._circuitHolderIds = signal([]); - this._networks = new Map(); - this._networkIds = signal([]); - this._networkDevicesSignals = new Map(); - this.setupVM(); } @@ -90,207 +74,30 @@ class VirtualMachine extends TypedEventTarget() { console.info("VM Worker loaded"); const vm = Comlink.wrap(this.vm_worker); this.ic10vm = vm; - this._vmState.value = await this.ic10vm.saveVMState(); - window.VM.set(this); - + this.state.vm.value = await this.ic10vm.saveVMState(); this.templateDBPromise = this.ic10vm.getTemplateDatabase(); this.templateDBPromise.then((db) => this.setupTemplateDatabase(db)); - - effect(() => { - this.updateObjects(this._vmState.value); - this.updateNetworks(this._vmState.value); - }); - this.updateCode(); - } - get state() { - return this._vmState; - } - - get objects() { - return this._objects; - } - - get objectIds(): Signal { - return this._objectIds; - } - - get circuitHolders() { - return this._circuitHolders; - } - - get circuitHolderIds(): Signal { - return this._circuitHolderIds; - } - - get networks() { - return this._networks; - } - - get networkIds(): Signal { - return this._networkIds; - } - - get defaultNetwork() { - return this._default_network; + window.VM.set(this); } get activeIC() { - return this._circuitHolders.get(this.app.session.activeIC); + return computed(() => this.app.session.activeIC.value); } - async visibleDevices(source: number): Promise[]> { - try { - const visDevices = await this.ic10vm.visibleDevices(source); - const ids = Array.from(visDevices); - ids.sort(); - return ids.map((id, _index) => this._objects.get(id)!); - } catch (err) { - this.handleVmError(err); - } - } - - async visibleDeviceIds(source: number): Promise { + async visibleDeviceIds(source: ObjectID): Promise { const visDevices = await this.ic10vm.visibleDevices(source); const ids = Array.from(visDevices); ids.sort(); return ids; } - async updateNetworks(state: FrozenVM) { - let updateFlag = false; - const removedNetworks = []; - const networkIds: ObjectID[] = []; - const frozenNetworks: FrozenCableNetwork[] = state.networks; - const updatedNetworks: ObjectID[] = []; - - for (const [index, net] of frozenNetworks.entries()) { - const id = net.id; - networkIds.push(id); - if (!this._networks.has(id)) { - this._networks.set(id, signal(net)); - updateFlag = true; - updatedNetworks.push(id); - } else { - const mappedNet = this._networks.get(id); - if (!structuralEqual(mappedNet.peek(), net)) { - mappedNet.value = net; - updatedNetworks.push(id); - updateFlag = true; - } - } - } - - for (const id of this._networks.keys()) { - if (!networkIds.includes(id)) { - this._networks.delete(id); - updateFlag = true; - removedNetworks.push(id); - } - } - - if (updateFlag) { - const ids = Array.from(updatedNetworks); - ids.sort(); - this.dispatchCustomEvent("vm-networks-update", ids); - if (removedNetworks.length > 0) { - this.dispatchCustomEvent("vm-networks-removed", removedNetworks); - } - this.app.session.save(); - } - - networkIds.sort(); - this._networkIds.value = networkIds; - } - - async updateObjects(state: FrozenVM) { - const removedObjects = []; - const frozenObjects = state.objects; - const objectIds: ObjectID[] = []; - const updatedObjects: ObjectID[] = []; - let updateFlag = false; - - for (const [index, obj] of frozenObjects.entries()) { - const id = obj.obj_info.id; - objectIds.push(id); - if (!this._objects.has(id)) { - this._objects.set(id, signal(obj)); - updateFlag = true; - updatedObjects.push(id); - } else { - const mappedObject = this._objects.get(id); - if (!structuralEqual(obj, mappedObject.peek())) { - mappedObject.value = obj; - updatedObjects.push(id); - updateFlag = true; - } - } - } - - for (const id of this._objects.keys()) { - if (!objectIds.includes(id)) { - this._objects.delete(id); - updateFlag = true; - removedObjects.push(id); - } - } - - for (const [id, obj] of this._objects) { - if (typeof obj.peek().obj_info.socketed_ic !== "undefined") { - if (!this._circuitHolders.has(id)) { - this._circuitHolders.set(id, obj); - updateFlag = true; - if (!updatedObjects.includes(id)) { - updatedObjects.push(id); - } - } - } else { - if (this._circuitHolders.has(id)) { - updateFlag = true; - if (!updatedObjects.includes(id)) { - updatedObjects.push(id); - } - this._circuitHolders.delete(id); - } - } - } - - for (const id of this._circuitHolders.keys()) { - if (!this._objects.has(id)) { - this._circuitHolders.delete(id); - updateFlag = true; - if (!removedObjects.includes(id)) { - removedObjects.push(id); - } - } - } - - if (updateFlag) { - const ids = Array.from(updatedObjects); - ids.sort(); - this.dispatchCustomEvent("vm-objects-update", ids); - if (removedObjects.length > 0) { - this.dispatchCustomEvent("vm-objects-removed", removedObjects); - } - this.app.session.save(); - } - - objectIds.sort(); - const circuitHolderIds = Array.from(this._circuitHolders.keys()); - circuitHolderIds.sort(); - - batch(() => { - this._objectIds.value = objectIds; - this._circuitHolderIds.value = circuitHolderIds; - }); - } - async updateCode() { - const progs = this.app.session.programs; + const progs = this.app.session.programs.peek(); for (const id of progs.keys()) { const attempt = Date.now().toString(16); - const circuitHolder = this._circuitHolders.get(id); + const circuitHolder = this.state.getObject(id); const prog = progs.get(id); if ( circuitHolder && @@ -314,42 +121,43 @@ class VirtualMachine extends TypedEventTarget() { } async step() { - const ic = this.activeIC; + const ic = this.activeIC.peek(); if (ic) { try { - await this.ic10vm.stepProgrammable(ic.peek().obj_info.id, false); + await this.ic10vm.stepProgrammable(ic, false); } catch (err) { this.handleVmError(err); } this.update(); - this.dispatchCustomEvent("vm-run-ic", this.activeIC!.peek().obj_info.id); + this.dispatchCustomEvent("vm-run-ic", ic); } } async run() { - const ic = this.activeIC; + const ic = this.activeIC.peek(); if (ic) { try { - await this.ic10vm.runProgrammable(ic.peek().obj_info.id, false); + await this.ic10vm.runProgrammable(ic, false); } catch (err) { this.handleVmError(err); } this.update(); - this.dispatchCustomEvent("vm-run-ic", this.activeIC!.peek().obj_info.id); + this.dispatchCustomEvent("vm-run-ic", this.activeIC.peek()); } } async reset() { - const ic = this.activeIC; + const ic = this.activeIC.peek(); if (ic) { - await this.ic10vm.resetProgrammable(ic.peek().obj_info.id); + await this.ic10vm.resetProgrammable(ic); await this.update(); } } async update(save: boolean = true) { try { - this._vmState.value = await this.ic10vm.saveVMState(); + const newState = await this.ic10vm.saveVMState(); + this.state.vm.value = newState; if (save) this.app.session.save(); } catch (err) { this.handleVmError(err); @@ -386,46 +194,30 @@ class VirtualMachine extends TypedEventTarget() { this.dispatchCustomEvent("vm-message", toastMessage); } - // return the data connected oject ids for a network - networkDataDevices(network: ObjectID): ObjectID[] { - return this._networks.get(network)?.peek().devices ?? []; - } - - private _networkDevicesSignals: Map>; - - networkDataDevicesSignal(network: ObjectID): Signal { - if (!this._networkDevicesSignals.has(network) && this._networks.get(network) != null) { - this._networkDevicesSignals.set(network, computed( - () => this._networks.get(network).value.devices ?? [] - )); - } - return this._networkDevicesSignals.get(network); - } - async changeObjectID(oldID: number, newID: number): Promise { try { await this.ic10vm.changeDeviceId(oldID, newID); - if (this.app.session.activeIC === oldID) { - this.app.session.activeIC = newID; - } - await this.update(); - this.dispatchCustomEvent("vm-object-id-change", { - old: oldID, - new: newID, - }); - this.app.session.changeID(oldID, newID); - return true; } catch (err) { this.handleVmError(err); return false; } + if (this.app.session.activeIC.peek() === oldID) { + this.app.session.activeIC = newID; + } + await this.update(); + this.dispatchCustomEvent("vm-object-id-change", { + old: oldID, + new: newID, + }); + this.app.session.changeID(oldID, newID); + return true; } async setRegister(index: number, val: number): Promise { - const ic = this.activeIC!; + const ic = this.activeIC.peek(); if (ic) { try { - await this.ic10vm.setRegister(ic.peek().obj_info.id, index, val); + await this.ic10vm.setRegister(ic, index, val); } catch (err) { this.handleVmError(err); return false; @@ -436,10 +228,10 @@ class VirtualMachine extends TypedEventTarget() { } async setStack(addr: number, val: number): Promise { - const ic = this.activeIC!; + const ic = this.activeIC.peek(); if (ic) { try { - await this.ic10vm.setMemory(ic.peek().obj_info.id, addr, val); + await this.ic10vm.setMemory(ic, addr, val); } catch (err) { this.handleVmError(err); return false; @@ -450,18 +242,14 @@ class VirtualMachine extends TypedEventTarget() { } async setObjectName(id: number, name: string): Promise { - const obj = this._objects.get(id); - if (obj) { - try { - await this.ic10vm.setObjectName(obj.peek().obj_info.id, name); - } catch (e) { - this.handleVmError(e); - return false; - } - await this.update(); - return true; + try { + await this.ic10vm.setObjectName(id, name); + } catch (e) { + this.handleVmError(e); + return false; } - return false; + await this.update(); + return true; } async setObjectField( @@ -471,18 +259,14 @@ class VirtualMachine extends TypedEventTarget() { force?: boolean, ): Promise { force = force ?? false; - const obj = this._objects.get(id); - if (obj) { - try { - await this.ic10vm.setLogicField(obj.peek().obj_info.id, field, val, force); - } catch (err) { - this.handleVmError(err); - return false; - } - await this.update(); - return true; + try { + await this.ic10vm.setLogicField(id, field, val, force); + } catch (err) { + this.handleVmError(err); + return false; } - return false; + await this.update(); + return true; } async setObjectSlotField( @@ -493,24 +277,20 @@ class VirtualMachine extends TypedEventTarget() { force?: boolean, ): Promise { force = force ?? false; - const obj = this._objects.get(id); - if (obj) { - try { - await this.ic10vm.setSlotLogicField( - obj.peek().obj_info.id, - field, - slot, - val, - force, - ); - } catch (err) { - this.handleVmError(err); - return false; - } - await this.update(); - return true; + try { + await this.ic10vm.setSlotLogicField( + id, + field, + slot, + val, + force, + ); + } catch (err) { + this.handleVmError(err); + return false; } - return false; + await this.update(); + return true; } async setDeviceConnection( @@ -518,18 +298,14 @@ class VirtualMachine extends TypedEventTarget() { conn: number, val: number | undefined, ): Promise { - const device = this._objects.get(id); - if (typeof device !== "undefined") { - try { - await this.ic10vm.setDeviceConnection(id, conn, val); - } catch (err) { - this.handleVmError(err); - return false; - } - await this.update(); - return true; + try { + await this.ic10vm.setDeviceConnection(id, conn, val); + } catch (err) { + this.handleVmError(err); + return false; } - return false; + await this.update(); + return true; } async setDevicePin( @@ -537,50 +313,48 @@ class VirtualMachine extends TypedEventTarget() { pin: number, val: number | undefined, ): Promise { - const device = this._objects.get(id); - if (typeof device !== "undefined") { - try { - await this.ic10vm.setPin(id, pin, val); - } catch (err) { - this.handleVmError(err); - return false; - } - await this.update(); - return true; + try { + await this.ic10vm.setPin(id, pin, val); + } catch (err) { + this.handleVmError(err); + return false; } - return false; + await this.update(); + return true; } setupTemplateDatabase(db: TemplateDatabase) { - this.templateDB = db; - console.log("Loaded Template Database", this.templateDB); - this.dispatchCustomEvent("vm-template-db-loaded", this.templateDB); + this.state.templateDB.value = db; + console.log("Loaded Template Database", this.state.templateDB.value); + this.dispatchCustomEvent("vm-template-db-loaded", this.state.templateDB.value); } async addObjectFrozen(frozen: FrozenObject): Promise { + let id = undefined; try { console.log("adding device", frozen); - const id = await this.ic10vm.addObjectFrozen(frozen); - await this.update(); - return id; + id = await this.ic10vm.addObjectFrozen(frozen); } catch (err) { this.handleVmError(err); return undefined; } + await this.update(); + return id; } async addObjectsFrozen( frozenObjects: FrozenObject[], ): Promise { + let ids = undefined; try { console.log("adding devices", frozenObjects); - const ids = await this.ic10vm.addObjectsFrozen(frozenObjects); - await this.update(); - return Array.from(ids); + ids = await this.ic10vm.addObjectsFrozen(frozenObjects); } catch (err) { this.handleVmError(err); return undefined; } + await this.update(); + return Array.from(ids ?? []); } async removeDevice(id: number): Promise { @@ -600,32 +374,26 @@ class VirtualMachine extends TypedEventTarget() { frozen: FrozenObject, quantity: number, ): Promise { - const device = this._objects.get(id); - if (typeof device !== "undefined") { - try { - console.log("setting slot occupant", frozen); - await this.ic10vm.setSlotOccupant(id, index, frozen, quantity); - await this.update(); - return true; - } catch (err) { - this.handleVmError(err); - } + try { + console.log("setting slot occupant", frozen); + await this.ic10vm.setSlotOccupant(id, index, frozen, quantity); + } catch (err) { + this.handleVmError(err); + return false; } - return false; + await this.update(); + return true; } async removeSlotOccupant(id: number, index: number): Promise { - const device = this._objects.get(id); - if (typeof device !== "undefined") { - try { - await this.ic10vm.removeSlotOccupant(id, index); - await this.update(); - return true; - } catch (err) { - this.handleVmError(err); - } + try { + await this.ic10vm.removeSlotOccupant(id, index); + } catch (err) { + this.handleVmError(err); + return false; } - return false; + await this.update(); + return true; } async saveVMState(): Promise { @@ -636,18 +404,16 @@ class VirtualMachine extends TypedEventTarget() { try { console.info("Restoring VM State from", state); await this.ic10vm.restoreVMState(state); - this._objects = new Map(); - this._circuitHolders = new Map(); - await this.update(); } catch (e) { - this.handleVmError(e, {jsonContext: JSON.stringify(state)}); + this.handleVmError(e, { jsonContext: JSON.stringify(state) }); + return; } + // TODO: Cleanup old state + await this.update(); } getPrograms(): [number, string][] { - const programs: [number, string][] = Array.from( - this._circuitHolders.entries(), - ).map(([id, ic]) => [id, ic.peek().obj_info.source_code]); + const programs: [number, string][] = this.state.circuitHolderIds.value.map((id) => [id, this.state.getObjectProgramSource(id).value]); return programs; } } diff --git a/www/src/ts/virtualMachine/registers.ts b/www/src/ts/virtualMachine/registers.ts index e664547..54acd23 100644 --- a/www/src/ts/virtualMachine/registers.ts +++ b/www/src/ts/virtualMachine/registers.ts @@ -1,15 +1,14 @@ import { html, css, nothing } from "lit"; import { customElement } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMActiveICMixin } from "virtualMachine/baseDevice"; +import { VMObjectMixin } from "virtualMachine/baseDevice"; -import { RegisterSpec } from "ic10emu_wasm"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.js"; -import { displayNumber, parseNumber } from "utils"; -import { computed, Signal, watch } from "@lit-labs/preact-signals"; +import { displayNumber, parseNumber, range, structuralEqual } from "utils"; +import { computed, ReadonlySignal, Signal, watch } from "@lit-labs/preact-signals"; @customElement("vm-ic-registers") -export class VMICRegisters extends VMActiveICMixin(BaseElement) { +export class VMICRegisters extends VMObjectMixin(BaseElement) { static styles = [ ...defaultCss, css` @@ -39,38 +38,56 @@ export class VMICRegisters extends VMActiveICMixin(BaseElement) { ["ra", 17], ]; - constructor() { - super(); - this.subscribe("active-ic") + + circuit = computed(() => { + return this.vm.value?.state.getCircuitInfo(this.vm.value?.activeIC.value).value; + }); + + registerCount = computed(() => { + return this.vm.value?.state.getCircuitRegistersCount(this.vm.value.activeIC.value).value; + }) + + registerAliases = (() => { + let last: [string, number][] = null; + return computed(() => { + const aliases = this.vm.value?.state.getCircuitAliases(this.vm.value?.activeIC.value).value + const forRegisters = [...(Object.entries(aliases ?? {}) ?? [])].flatMap(([alias, target]): [string, number][] => { + if ("RegisterSpec" in target && target.RegisterSpec.indirection === 0) { + return [[alias, target.RegisterSpec.target]]; + } + return []; + }).concat(VMICRegisters.defaultAliases); + if (structuralEqual(last, forRegisters)) { + return last; + } + last = forRegisters; + return forRegisters; + }); + })(); + + aliasesFor(index: number): ReadonlySignal { + return computed(() => { + return this.registerAliases.value?.flatMap(([alias, target]): string[] => target === index ? [alias] : []) + }); + } + + registerAt(index: number): ReadonlySignal { + return computed(() => { + return this.vm.value?.state.getCircuitRegistersAt(this.vm.value?.activeIC.value, index).value + }) } protected render() { - const registerAliases: Signal<[string, number][]> = computed(() => { - return [...(Array.from(this.objectSignals.aliases.value?.entries() ?? []))].flatMap( - ([alias, target]) => { - if ("RegisterSpec" in target && target.RegisterSpec.indirection === 0) { - return [[alias, target.RegisterSpec.target]] as [string, number][]; - } else { - return [] as [string, number][]; - } - } - ).concat(VMICRegisters.defaultAliases); - }); - const registerHtml = this.objectSignals?.registers.peek().map((val, index) => { - const aliases = computed(() => { - return registerAliases.value - .filter(([_alias, target]) => index === target) - .map(([alias, _target]) => alias); - }); + const registerHtml = computed(() => range(this.registerCount.value).map(index => { const aliasesList = computed(() => { - return aliases.value.join(", "); - }); + return this.aliasesFor(index).value?.join(", ") ?? nothing; + }) const aliasesText = computed(() => { - return aliasesList.value || "None"; + return this.aliasesFor(index).value?.join(", ") ?? "None"; }); const valDisplay = computed(() => { - const val = this.objectSignals.registers.value[index]; + const val = this.registerAt(index).value; return displayNumber(val); }); return html` @@ -92,12 +109,12 @@ export class VMICRegisters extends VMActiveICMixin(BaseElement) {
`; - }) ?? nothing; + }) ?? nothing); return html`
- ${registerHtml} + ${watch(registerHtml)}
`; diff --git a/www/src/ts/virtualMachine/stack.ts b/www/src/ts/virtualMachine/stack.ts index 6dd6e15..ade1418 100644 --- a/www/src/ts/virtualMachine/stack.ts +++ b/www/src/ts/virtualMachine/stack.ts @@ -1,14 +1,14 @@ import { html, css, nothing } from "lit"; import { customElement } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { VMActiveICMixin } from "virtualMachine/baseDevice"; +import { VMObjectMixin } from "virtualMachine/baseDevice"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.js"; -import { displayNumber, parseNumber } from "utils"; +import { displayNumber, parseNumber, range } from "utils"; import { computed, watch } from "@lit-labs/preact-signals"; @customElement("vm-ic-stack") -export class VMICStack extends VMActiveICMixin(BaseElement) { +export class VMICStack extends VMObjectMixin(BaseElement) { static styles = [ ...defaultCss, css` @@ -36,25 +36,38 @@ export class VMICStack extends VMActiveICMixin(BaseElement) { `, ]; - constructor() { - super(); - this.subscribe("active-ic") + circuit = computed(() => { + return this.vm.value?.state.getCircuitInfo(this.vm.value?.activeIC.value).value; + }); + + sp = computed(() => { + return this.circuit.value?.registers[16] ?? 0; + }); + + socketedIc = computed(() => { + return this.vm.value?.state.getObject(this.vm.value?.activeIC.value).value?.obj_info.socketed_ic ?? null; + }) + + memorySize = computed(() => { + return this.vm.value?.state.getObjectMemorySize(this.socketedIc.value).value; + }); + + memoryAt(index: number) { + return computed(() => { + return this.vm.value?.state.getObjectMemoryAt(this.socketedIc.value, index).value + }); } protected render() { - const sp = computed(() => { - return this.objectSignals.registers.value != null ? this.objectSignals.registers.value[16] : 0; - }); - - const memoryHtml = this.objectSignals?.memory.peek()?.map((val, index) => { + const memoryHtml = computed(() => range(this.memorySize.value).map(index => { const content = computed(() => { - return sp.value === index ? html`Stack Pointer` : nothing; + return this.sp.value === index ? html`Stack Pointer` : nothing; }); const pointerClass = computed(() => { - return sp.value === index ? "stack-pointer" : nothing; + return this.sp.value === index ? "stack-pointer" : nothing; }); const displayVal = computed(() => { - return displayNumber(this.objectSignals.memory.value[index]); + return displayNumber(this.memoryAt(index).value); }); return html` @@ -75,12 +88,12 @@ export class VMICStack extends VMActiveICMixin(BaseElement) { `; - }) ?? nothing; + })); return html`
- ${memoryHtml} + ${watch(memoryHtml)}
`; diff --git a/www/src/ts/virtualMachine/state.ts b/www/src/ts/virtualMachine/state.ts new file mode 100644 index 0000000..e60fe2f --- /dev/null +++ b/www/src/ts/virtualMachine/state.ts @@ -0,0 +1,600 @@ +import { computed, ReadonlySignal, signal, Signal } from "@lit-labs/preact-signals"; +import { Obj } from "@popperjs/core"; +import { Class, Connection, FrozenCableNetwork, FrozenNetworks, FrozenObject, FrozenObjectFull, FrozenVM, ICInfo, LogicField, LogicSlotType, LogicType, ObjectID, Operand, Slot, TemplateDatabase } from "ic10emu_wasm"; +import { fromJson, isSome, structuralEqual } from "utils"; + + +export interface ObjectSlotInfo { + parent: ObjectID; + index: number; + name: string; + typ: Class; + quantity: number; + occupant: ObjectID; +} + +export class VMState { + + vm: Signal = signal(null); + templateDB: Signal = signal(null); + + objectIds: ReadonlySignal = computed(() => this.vm.value?.objects.map((obj) => obj.obj_info.id) ?? []); + circuitHolderIds: ReadonlySignal = computed(() => this.vm.value?.circuit_holders ?? []); + programHolderIds: ReadonlySignal = computed(() => this.vm.value?.program_holders ?? []); + networkIds: ReadonlySignal = computed(() => this.vm.value?.networks.map((net) => net.id) ?? []); + wirelessTransmitterIds: ReadonlySignal = computed(() => this.vm.value?.wireless_transmitters ?? []); + wirelessReceivers: ReadonlySignal = computed(() => this.vm.value?.wireless_receivers ?? []); + defaultNetworkId: ReadonlySignal = computed(() => this.vm.value?.default_network_key ?? null); + + private _signalCache: Map>> = new Map(); + private _signalRegistry = new FinalizationRegistry((key: string) => { + const s = this._signalCache.get(key); + if (s && !s.deref()) this._signalCache.delete(key); + }); + + signalCacheHas(key: string): boolean { + return this._signalCache.has(key) && typeof this._signalCache.get(key).deref() !== undefined + } + signalCacheGet(key: string): any { + return this._signalCache.get(key).deref(); + } + signalCacheSet(key: string, s: ReadonlySignal) { + this._signalCache.set(key, new WeakRef(s)); + this._signalRegistry.register(s, key); + } + + getObject(id: ObjectID): ReadonlySignal { + const key = `obj:${id}`; + if (!this.signalCacheHas(key)) { + let last: FrozenObject = null; + const s = computed(() => { + const obj = this.vm.value?.objects.find((o) => o.obj_info.id === id) ?? null; + if (obj?.database_template ?? false) { + return { ...obj, template: this.templateDB.value?.get(obj.obj_info.prefab_hash) } + } + if (structuralEqual(last, obj)) { + return last; + } + last = obj; + return obj; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getObjectName(id: ObjectID): ReadonlySignal { + const key = `obj:${id},name`; + if (!this.signalCacheHas(key)) { + const s = computed(() => { + const obj = this.getObject(id); + return obj.value?.obj_info.name ?? ""; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getObjectPrefabName(id: ObjectID): ReadonlySignal { + const key = `obj:${id},prefabName`; + if (!this.signalCacheHas(key)) { + const s = computed(() => { + const obj = this.getObject(id); + return obj.value?.obj_info.prefab ?? ""; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getObjectDisplayName(id: ObjectID): ReadonlySignal { + const key = `obj:${id},DisplayName`; + if (!this.signalCacheHas(key)) { + const s = computed(() => { + const obj = this.getObject(id).value; + return obj?.obj_info.name ?? obj?.obj_info.prefab ?? ""; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getNetwork(id: ObjectID): Signal { + const key = `network:${id}`; + if (!this.signalCacheHas(key)) { + let last: FrozenCableNetwork = null + const s = computed(() => { + const next = this.vm.value?.networks.find((n) => n.id === id) ?? null + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getObjectFieldNames(id: ObjectID): ReadonlySignal { + const key = `obj:${id},fieldNames`; + if (!this.signalCacheHas(key)) { + let last: LogicType[] = null; + const s = computed((): LogicType[] => { + const obj = this.getObject(id).value; + const template = obj?.template; + const logicAccess = isSome(template) && "logic" in template ? template.logic.logic_types : null; + const next = Array.from(logicAccess?.keys() ?? []) + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getObjectField(id: ObjectID, field: LogicType): ReadonlySignal { + const key = `obj:${id},field:${field}`; + if (!this.signalCacheHas(key)) { + const s = computed((): LogicField => { + const obj = this.getObject(id).value; + const template = obj?.template; + const logicAccess = isSome(template) && "logic" in template ? template.logic.logic_types.get(field) : null; + const logicValue = obj?.obj_info.logic_values.get(field) ?? null; + return isSome(logicAccess) || isSome(logicValue) ? { + field_type: logicAccess, + value: logicValue, + } : null; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getObjectSlotCount(id: ObjectID): ReadonlySignal { + const key = `obj:${id},slotsCount`; + if (!this.signalCacheHas(key)) { + const s = computed((): number => { + const obj = this.getObject(id).value; + const template = obj?.template; + return isSome(template) && "slots" in template ? template.slots.length : 0 + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getObjectSlotInfo(id: ObjectID, index: number): ReadonlySignal { + const key = `obj:${id},slot${index}`; + if (!this.signalCacheHas(key)) { + let last: ObjectSlotInfo = null; + const s = computed((): ObjectSlotInfo => { + const obj = this.getObject(id).value; + const info = obj?.obj_info.slots.get(index); + const template = obj?.template; + const slotTemplate = isSome(template) && "slots" in template ? template.slots[index] : null; + if (isSome(obj)) { + const next = { + parent: obj?.obj_info.id, + index, + name: slotTemplate?.name, + typ: slotTemplate?.typ, + quantity: info?.quantity, + occupant: info?.id + } + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; + } + return null; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getObjectSlotFieldNames(id: ObjectID, index: number): ReadonlySignal { + const key = `obj:${id},slot:${index},fieldNames`; + if (!this.signalCacheHas(key)) { + let last: LogicSlotType[] = null; + const s = computed((): LogicSlotType[] => { + const obj = this.getObject(id).value; + const template = obj?.template; + let logicTemplate = null; + if (isSome(template) && ("logic" in template)) { + logicTemplate = template.logic.logic_slot_types.get(index.toString()); + } + const next = Array.from(logicTemplate?.keys() ?? []); + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getObjectSlotField(id: ObjectID, index: number, field: LogicSlotType): ReadonlySignal { + const key = `obj:${id},slot:${index},field:${field}`; + if (!this.signalCacheHas(key)) { + let last: LogicField = null + const s = computed((): LogicField => { + const obj = this.getObject(id).value; + const template = obj?.template; + const logicTemplate = isSome(template) && "logic" in template ? template.logic.logic_slot_types.get(index.toString()) : null; + const slotFieldValue = obj?.obj_info.slot_logic_values?.get(index)?.get(field) ?? null; + const slotFieldAccess = logicTemplate?.get(field) + const next = isSome(slotFieldValue) || isSome(slotFieldAccess) ? { + field_type: slotFieldAccess, + value: slotFieldValue + + } : null + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getObjectSlotOccupantId(id: ObjectID, index: number): ReadonlySignal { + const key = `obj:${id},slot:${index},occupant` + if (!this.signalCacheHas(key)) { + const s = computed((): ObjectID => { + const obj = this.getObject(id).value; + const info = obj?.obj_info.slots.get(index); + return info?.id ?? null; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getObjectSocketedIcId(id: ObjectID): ReadonlySignal { + const key = `obj:${id},socketedIc` + if (!this.signalCacheHas(key)) { + const s = computed((): ObjectID => { + const obj = this.getObject(id).value; + return obj?.obj_info.socketed_ic ?? null; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getObjectConnectionCount(id: ObjectID): ReadonlySignal { + const key = `obj:${id},connectionCount`; + if (!this.signalCacheHas(key)) { + const s = computed((): number => { + const obj = this.getObject(id).value; + const template = obj?.template; + const connectionList = + isSome(template) && "device" in template + ? template.device.connection_list + : []; + return connectionList.length; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getObjectConnections(id: ObjectID): ReadonlySignal { + const key = `obj:${id},connections` + if (!this.signalCacheHas(key)) { + let last: Connection[] = null; + const s = computed((): Connection[] => { + const obj = this.getObject(id).value; + const template = obj?.template; + const connectionsMap = obj?.obj_info.connections ?? null; + const connectionList = + isSome(template) && "device" in template + ? template.device.connection_list + : []; + const connections = connectionList.map((conn, index): Connection => { + if (conn.typ === "Data") { + return { + CableNetwork: { + typ: "Data", + role: conn.role, + net: connectionsMap.get(index), + }, + }; + } else if (conn.typ === "Power") { + return { + CableNetwork: { + typ: "Power", + role: conn.role, + net: connectionsMap.get(index), + }, + }; + } else if (conn.typ === "PowerAndData") { + return { + CableNetwork: { + typ: "Data", + role: conn.role, + net: connectionsMap.get(index), + }, + }; + } else if (conn.typ === "Pipe") { + return { Pipe: { role: conn.role } }; + } else if (conn.typ === "Chute") { + return { Chute: { role: conn.role } }; + } else if (conn.typ === "Elevator") { + return { Elevator: { role: conn.role } }; + } else if (conn.typ === "LaunchPad") { + return { LaunchPad: { role: conn.role } }; + } else if (conn.typ === "LandingPad") { + return { LandingPad: { role: conn.role } }; + } else if (conn.typ === "PipeLiquid") { + return { PipeLiquid: { role: conn.role } }; + } else if (conn.typ === "RoboticArmRail") { + return { RoboticArmRail: { role: conn.role } } + } + return "None"; + }); + if (structuralEqual(last, connections)) { + return last; + } + last = connections; + return connections; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getObjectConnection(id: ObjectID, index: number): ReadonlySignal { + const key = `obj:${id},connection:${index}`; + if (!this.signalCacheHas(key)) { + let last: Connection = null; + const s = computed((): Connection => { + const connections = this.getObjectConnections(id).value ?? []; + const next = connections[index] ?? null; + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; + }) + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key) + } + + getCircuitInfo(id: ObjectID): ReadonlySignal { + const key = `obj:${id},socketedIc` + if (!this.signalCacheHas(key)) { + let last: ICInfo = null; + const s = computed((): ICInfo => { + const obj = this.getObject(id).value; + if (!isSome(obj)) { + return null; + } + let circuitInfo: ICInfo = obj.obj_info.circuit; + if (!isSome(circuitInfo)) { + const icObj = this.getObject(obj.obj_info.socketed_ic).value; + if (!isSome(icObj)) { + return null; + } + circuitInfo = icObj.obj_info.circuit; + } + if (structuralEqual(last, circuitInfo)) { + return last; + } + last = circuitInfo; + return circuitInfo; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getObjectMemorySize(id: ObjectID): ReadonlySignal { + const key = `obj:${id},memorySize`; + if (!this.signalCacheHas(key)) { + const s = computed((): number => { + return this.getObject(id).value?.obj_info.memory?.length ?? null; + }) + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getObjectMemory(id: ObjectID): ReadonlySignal { + const key = `obj:${id},memory`; + if (!this.signalCacheHas(key)) { + let last: number[] = null; + const s = computed((): number[] => { + const next = this.getObject(id).value?.obj_info.memory ?? null; + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; + }) + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getObjectMemoryAt(id: ObjectID, index: number): ReadonlySignal { + const key = `obj:${id},memory:${index}`; + if (!this.signalCacheHas(key)) { + const s = computed((): number => { + return (this.getObject(id).value?.obj_info.memory ?? [])[index] ?? null; + }) + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getCircuitRegistersCount(id: ObjectID): ReadonlySignal { + const key = `obj:${id},registersCount`; + if (!this.signalCacheHas(key)) { + const s = computed((): number => { + return this.getCircuitInfo(id).value?.registers.length ?? null; + }) + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getCircuitRegisters(id: ObjectID): ReadonlySignal { + const key = `obj:${id},registers`; + if (!this.signalCacheHas(key)) { + let last: number[] = null; + const s = computed((): number[] => { + const next = this.getCircuitInfo(id).value?.registers ?? null; + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; + }) + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getCircuitRegistersAt(id: ObjectID, index: number): ReadonlySignal { + const key = `obj:${id},register:${index}`; + if (!this.signalCacheHas(key)) { + const s = computed((): number => { + return (this.getCircuitInfo(id).value?.registers ?? [])[index] ?? null; + }) + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getCircuitAliases(id: ObjectID): ReadonlySignal> { + const key = `obj:${id},circuitAliases`; + if (!this.signalCacheHas(key)) { + let last: Record = null; + const s = computed(() => { + const circuit = this.getCircuitInfo(id).value; + const aliases = circuit?.aliases; + const next = Object.fromEntries(aliases?.entries() ?? []) + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key) + } + + getDeviceNumPins(id: ObjectID): ReadonlySignal { + const key = `obj:${id},numPins`; + if (!this.signalCacheHas(key)) { + const s = computed((): number => { + const obj = this.getObject(id).value; + return [...obj?.obj_info.device_pins?.keys() ?? []].length; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getDevicePins(id: ObjectID): ReadonlySignal<[number, ObjectID][]> { + const key = `obj:${id},pins`; + if (!this.signalCacheHas(key)) { + let last: [number, ObjectID][] = null; + const s = computed((): [number, ObjectID][] => { + const obj = this.getObject(id).value; + const next = [...obj?.obj_info.device_pins?.entries() ?? []]; + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getDevicePin(id: ObjectID, pin: number): ReadonlySignal { + const key = `obj:${id},pin:${id}`; + if (!this.signalCacheHas(key)) { + const s = computed((): ObjectID => { + const obj = this.getObject(id).value; + return obj?.obj_info.device_pins?.get(pin); + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getNetworkDevices(id: ObjectID): ReadonlySignal { + const key = `network:${id},devices`; + if (!this.signalCacheHas(key)) { + let last: ObjectID[] = null; + const s = computed(() => { + const next = this.vm.value.networks.find((net) => net.id === id)?.devices ?? null; + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; + }) + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key) + } + + getObjectProgramSource(id: ObjectID): ReadonlySignal { + const key = `obj:${id},source`; + if (!this.signalCacheHas(key)) { + const s = computed(() => { + return this.getObject(id).value?.obj_info.source_code ?? null; + }) + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key) + } + + +} From f40437e94e7c5607c19856f450d0cd20280dae98 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sun, 25 Aug 2024 18:20:46 -0700 Subject: [PATCH 44/50] refactor(frontend) fix template searching, update database images Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- www/assets_finding.ipynb | 140 ++++++++++++++---- .../stationpedia/DynamicAirConditioner.png | Bin 17563 -> 17533 bytes www/img/stationpedia/FlareGun.png | Bin 11478 -> 11145 bytes www/img/stationpedia/H2Combustor.png | Bin 14863 -> 14736 bytes .../stationpedia/ItemAdhesiveInsulation.png | Bin 0 -> 11311 bytes .../stationpedia/ItemCannedPowderedEggs.png | Bin 108813 -> 18286 bytes www/img/stationpedia/ItemCerealBar.png | Bin 12860 -> 11342 bytes www/img/stationpedia/ItemCerealBarBag.png | Bin 0 -> 14395 bytes www/img/stationpedia/ItemCerealBarBox.png | Bin 0 -> 16475 bytes www/img/stationpedia/ItemChocolateBar.png | Bin 0 -> 14475 bytes www/img/stationpedia/ItemChocolateCake.png | Bin 0 -> 9806 bytes .../stationpedia/ItemChocolateCerealBar.png | Bin 0 -> 11339 bytes www/img/stationpedia/ItemCocoaPowder.png | Bin 0 -> 16297 bytes www/img/stationpedia/ItemCocoaTree.png | Bin 0 -> 7141 bytes www/img/stationpedia/ItemCookedCorn.png | Bin 11350 -> 12817 bytes www/img/stationpedia/ItemCookedTomato.png | Bin 11086 -> 15939 bytes .../stationpedia/ItemEmergencySuppliesBox.png | Bin 0 -> 12882 bytes .../ItemInsulatedCanisterPackage.png | Bin 0 -> 13273 bytes .../ItemKitInsulatedPipeUtility.png | Bin 0 -> 14889 bytes .../ItemKitInsulatedPipeUtilityLiquid.png | Bin 0 -> 13924 bytes www/img/stationpedia/ItemKitLinearRail.png | Bin 0 -> 11033 bytes www/img/stationpedia/ItemKitRegulator.png | Bin 16999 -> 15014 bytes www/img/stationpedia/ItemKitRobotArmDoor.png | Bin 0 -> 13183 bytes www/img/stationpedia/ItemKitRoboticArm.png | Bin 0 -> 11886 bytes www/img/stationpedia/ItemMiningPackage.png | Bin 0 -> 11947 bytes www/img/stationpedia/ItemPlainCake.png | Bin 0 -> 13151 bytes www/img/stationpedia/ItemPortablesPackage.png | Bin 0 -> 11731 bytes .../stationpedia/ItemResidentialPackage.png | Bin 0 -> 11868 bytes www/img/stationpedia/ItemSugar.png | Bin 0 -> 17820 bytes www/img/stationpedia/ItemSugarCane.png | Bin 0 -> 14511 bytes www/img/stationpedia/ItemWaterBottleBag.png | Bin 0 -> 13797 bytes .../stationpedia/ItemWaterBottlePackage.png | Bin 0 -> 11350 bytes www/img/stationpedia/SeedBag_Cocoa.png | Bin 0 -> 15775 bytes www/img/stationpedia/SeedBag_SugarCane.png | Bin 0 -> 16159 bytes .../stationpedia/StructureChuteExportBin.png | Bin 0 -> 11960 bytes .../StructureCompositeWindowShutter.png | Bin 0 -> 9570 bytes ...ructureCompositeWindowShutterConnector.png | Bin 0 -> 7220 bytes ...uctureCompositeWindowShutterController.png | Bin 0 -> 17004 bytes .../stationpedia/StructureComputerUpright.png | Bin 0 -> 10081 bytes www/img/stationpedia/StructureCrateMount.png | Bin 15329 -> 15693 bytes .../StructureElevatorShaftIndustrial.png | Bin 5260 -> 3811 bytes .../StructureInsulatedInLineTankGas1x1.png | Bin 0 -> 16689 bytes .../StructureInsulatedInLineTankGas1x2.png | Bin 0 -> 12118 bytes .../StructureInsulatedInLineTankLiquid1x1.png | Bin 0 -> 15317 bytes .../StructureInsulatedInLineTankLiquid1x2.png | Bin 0 -> 11929 bytes www/img/stationpedia/StructureLiquidValve.png | Bin 13597 -> 11675 bytes .../StructurePipeLiquidOneWayValveLever.png | Bin 0 -> 12007 bytes .../StructurePipeOneWayValveLever.png | Bin 0 -> 12194 bytes .../stationpedia/StructureReinforcedWall.png | Bin 0 -> 7541 bytes .../stationpedia/StructureRobotArmDoor.png | Bin 0 -> 13662 bytes .../stationpedia/StructureRoboticArmDock.png | Bin 0 -> 12061 bytes .../StructureRoboticArmRailCorner.png | Bin 0 -> 9141 bytes .../StructureRoboticArmRailCornerStop.png | Bin 0 -> 9847 bytes .../StructureRoboticArmRailInnerCorner.png | Bin 0 -> 8837 bytes .../StructureRoboticArmRailOuterCorner.png | Bin 0 -> 8017 bytes .../StructureRoboticArmRailStraight.png | Bin 0 -> 7765 bytes .../StructureRoboticArmRailStraightStop.png | Bin 0 -> 8736 bytes www/img/stationpedia/StructureValve.png | Bin 8273 -> 11889 bytes www/src/ts/utils.ts | 2 +- www/src/ts/virtualMachine/controls.ts | 2 +- www/src/ts/virtualMachine/device/addDevice.ts | 4 +- www/src/ts/virtualMachine/device/pins.ts | 2 +- .../ts/virtualMachine/device/slotAddDialog.ts | 15 +- www/src/ts/virtualMachine/device/template.ts | 111 +++++++------- www/src/ts/virtualMachine/state.ts | 7 +- 65 files changed, 187 insertions(+), 96 deletions(-) create mode 100644 www/img/stationpedia/ItemAdhesiveInsulation.png create mode 100644 www/img/stationpedia/ItemCerealBarBag.png create mode 100644 www/img/stationpedia/ItemCerealBarBox.png create mode 100644 www/img/stationpedia/ItemChocolateBar.png create mode 100644 www/img/stationpedia/ItemChocolateCake.png create mode 100644 www/img/stationpedia/ItemChocolateCerealBar.png create mode 100644 www/img/stationpedia/ItemCocoaPowder.png create mode 100644 www/img/stationpedia/ItemCocoaTree.png create mode 100644 www/img/stationpedia/ItemEmergencySuppliesBox.png create mode 100644 www/img/stationpedia/ItemInsulatedCanisterPackage.png create mode 100644 www/img/stationpedia/ItemKitInsulatedPipeUtility.png create mode 100644 www/img/stationpedia/ItemKitInsulatedPipeUtilityLiquid.png create mode 100644 www/img/stationpedia/ItemKitLinearRail.png create mode 100644 www/img/stationpedia/ItemKitRobotArmDoor.png create mode 100644 www/img/stationpedia/ItemKitRoboticArm.png create mode 100644 www/img/stationpedia/ItemMiningPackage.png create mode 100644 www/img/stationpedia/ItemPlainCake.png create mode 100644 www/img/stationpedia/ItemPortablesPackage.png create mode 100644 www/img/stationpedia/ItemResidentialPackage.png create mode 100644 www/img/stationpedia/ItemSugar.png create mode 100644 www/img/stationpedia/ItemSugarCane.png create mode 100644 www/img/stationpedia/ItemWaterBottleBag.png create mode 100644 www/img/stationpedia/ItemWaterBottlePackage.png create mode 100644 www/img/stationpedia/SeedBag_Cocoa.png create mode 100644 www/img/stationpedia/SeedBag_SugarCane.png create mode 100644 www/img/stationpedia/StructureChuteExportBin.png create mode 100644 www/img/stationpedia/StructureCompositeWindowShutter.png create mode 100644 www/img/stationpedia/StructureCompositeWindowShutterConnector.png create mode 100644 www/img/stationpedia/StructureCompositeWindowShutterController.png create mode 100644 www/img/stationpedia/StructureComputerUpright.png create mode 100644 www/img/stationpedia/StructureInsulatedInLineTankGas1x1.png create mode 100644 www/img/stationpedia/StructureInsulatedInLineTankGas1x2.png create mode 100644 www/img/stationpedia/StructureInsulatedInLineTankLiquid1x1.png create mode 100644 www/img/stationpedia/StructureInsulatedInLineTankLiquid1x2.png create mode 100644 www/img/stationpedia/StructurePipeLiquidOneWayValveLever.png create mode 100644 www/img/stationpedia/StructurePipeOneWayValveLever.png create mode 100644 www/img/stationpedia/StructureReinforcedWall.png create mode 100644 www/img/stationpedia/StructureRobotArmDoor.png create mode 100644 www/img/stationpedia/StructureRoboticArmDock.png create mode 100644 www/img/stationpedia/StructureRoboticArmRailCorner.png create mode 100644 www/img/stationpedia/StructureRoboticArmRailCornerStop.png create mode 100644 www/img/stationpedia/StructureRoboticArmRailInnerCorner.png create mode 100644 www/img/stationpedia/StructureRoboticArmRailOuterCorner.png create mode 100644 www/img/stationpedia/StructureRoboticArmRailStraight.png create mode 100644 www/img/stationpedia/StructureRoboticArmRailStraightStop.png 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/img/stationpedia/DynamicAirConditioner.png b/www/img/stationpedia/DynamicAirConditioner.png index 03a7d85c7555fee107b8f61eae205e3628cd4b45..c9a208e35022e7be2f8360ef8a39b5d6d4ab7ef9 100644 GIT binary patch literal 17533 zcmV)rK$*XZP)_3uRQg^wyMwPg(%1*@<`&>yXSN=GAr1hO_uhy&8TAtY%QA3dg2SW@w z;D7|t#AmY`4di*=MmM@a00ielqjlv6K7701e!Kha=l6Slj|V=*h(sa~jYJ_5kFfJv zxdw7ThKAZ;=Zd0$U-CntSOD2Cvuj>40HP>@rfF;>B$H8SG&FW>7zWNuP^&2rjV1w_ zDwIkk5Cnl;*L5AD!6;}=jRkZv#Bm&`stS@Mfp%a%t6r%?zL*E4q&(?VJutjadIN(% zrLIBC*iPb9rD>8QJCqOG@Lnm z=1HgPfx$oN4fMhyo+`hjl=`kA2cSwM5m4p#16AyCU^xIm5O}jihywP0L58-c4L+X_?OkJ|k84A0EC!|BA~f-S@JjgnCf>obQS#$+s4ZYA zwCE-H7nFivv<%h)EC*<}+t6yYz$f|GwN|^u_DFkcHCuSQ7d&kbcmy9LC#S)K@Aaa; zs&(~Ar+6ryr~}AB86wdL3k#HFf@R^(%Cz8ifHFqq$ahVqCTA(|aQ3LRLmfbKw+0I& zOhPzpx>suQEKHtCGx2?z!9S@NCnh>J+2hny^&|o->CWD4fgC`RBqjpcA0GCamoWYV zjJee5)GP+vFYMC%)m(1#DvocJ_lt*a5_!=Ufkm{nA0nDW&?`(!80B)w76D;?ejbX& zq8WR|CzbAj_{0T3#8c&4XzVv!*PRYPNv5!>%K|w-Nhz^o%K>_XFfGgS-%TVE-<+SF znjzxt3sdZP4#(GU%q)Mn{9CtkxBpz(SGKJ+y$;|+uLJZ7!%4n{SS)6bg`EN@itP4YY2*%^%kc=f+-=|(*ZB&^AC0SxS@pwI~pHjc2{z_t?UhixNlxT7QnkNTn z)a$@wvpqOyz}$Qqcn|y{=V|}i;=LwfAkL4=kfitC)$tC=VPQ(&@}?hTf)_GA3lMDrq%#Y zy9Lc=lLZPA;_*00K?&r542^Pw?VAtq5I=bmg1FCSOUL_~fBghNgsz_2w_3?WPyz7ucki^Fkt? zu=jEz5(dA|b`(?@jE#?vKYwoV+*gR8wanTM&hJ?ZsH*!BZ3(ki7&Pzq``LXoPflUo z$6U?O!6*4x5Kc{>f#l>AM91QwHtJ9i`rN zE?#&Q$^UH}U%&9o1^J6#_#*4MgxwPB`H-GYvnmwCo=w1lMqN4s%8q71W;DW5D15GK45PmDEmPveR3^=e_X_eLt*TPW?wFs%YD~L zf&{9ry7}lNj8zK~ZjtVUU-CmqDT&F69m#-{+wDcEP%@s?8RM`X~)FPTdd!%bLZyj6ftnaYqh9No@W#gUO zcOC~dhw#W904oR*i3CJWL|B#959-*T4}inI$YJ&I9nFpE0AA6{+60A{_gW4ziz4{B zpZ@Ak|MREjp89cFk|#t?1PYJf0bbwj48jH?N zO;3G3F`hi#_Hdc|yQMwc0JJ?i2D$&pl!67lliewB+QE+qgp?} z?*q1ua`H(y!6OrZ9FQRzi82LKg%X%mBN=L41rhr$$GZij;V^M$D5>e zfdY7SeqsLWFMRQZuP;2cFc%7h1WGu)i$+lrnScmhB$N{GhWCgsX?Nen^JC*<@k{5P zT6irUi^1~BDz=5@o-2VJ0a&epL{9`#wbMMk-x7k=O2`cewR#Qw!4OE88v%3EBsXcB zg88IG@JL!fV%)S?>aiC2mQ|N)<$?G0+CPCvqhwjuY5{xr3=Y5e+>br?RUGG#d^S&s z)^rVfXV5;UL|c~qh%kpDxPs%=rIn@sXLV)yPx090(U!gUTD?WK)fyU&#^8LQ_$3D; zpF}%&s4PvyCty4=&OXfQ({21wB@-Tz1I!@#KljSZul!>AO!_}MbN0;1csy?J!6*3a zcQast4<~G2$cf2n59- zBc1v=kx8wGD!etJ$pwk@G>UY=X1ElNa%f_DH0?zm7Gle_`>4C-0sfqSaG+whtqo` z;9xKa)v8Gp3Hvw>!13mK%KrfFGUs2$CMbBfanSe*K&X zS8M9PXZE=#j>JEQ<7FIY&z(Cz*Smo1kgRqPN=mmvR8_~d-ThW7H7M>$_PHF8K=5^I zAlec2G4a}0zxLJHmF1P!Fs|JE_~u`2Z*T8d7cH_$v_xv7F_<_N+n*$HY#p_beu$36 zSd{jP*cQxq7>wiq7WrYcY9DU!;NXDS65$a#z*85WyZEj2%-lbE`Q=wGjgKc{{r1vo zYIgNga_`=|%f?!x#zM!(Hqmw|BnfR-5?R$#ghMiTJsuDRo&}*?t7760V0&j58tQ?W zR7GKJi>hvr1N0ykACJ$W8(hNbpTel22sR$X0l?#B0w=-HJt5i8){`jAe3>uw`vXh} z;6=~Dk8WBQj)|cT5DG;gelp3bPF2lnt(FZiblQwrNovOv`qd;6UfZj&V*!5>{uEWQ zuX{KT*;*=ncJ}8NpFaN+=gy!12`>_CnY2d7yxX$XmI&M1o0z-`R&WR_#S6&^yF*}x z+^*7Sx+_lT;WHYLU87Pp@2}Mj$ll3=>=z&riw{nc^MM|2?&5`ub8rEk#uo9N?49iY zS=uSB5%C1(TzDvlWvt-Rp+}JeApIzE6id)_f|{y<-tN|^x1}**kU$8@i6qF93}vMZ z6{P}dbFkwcO8}Fn&OkUE1;b-fYgL`-6IgYO0;6f5x=}ouxv9p1n~eF{`B!B*{I@&g zr`hw7a3bD1wy?Xm%f_8O(_ItelUSj{Eqf)CfreIf&G~(@dr`}M8jiZjE)O{vC*q5H-9Fck_>J5KG3t7fdeMe|X-caQ@R;Ucyz zBA=X~u41+GZrie2NH3TWf?+5rCAf3v&S)ID&b$IlCZ}BFw>@oE{ZIGOacv>ssQOa1 z1S_j6*qa-0dh#?(O-_NA_pxiWS{aqT1J|zKfc^b_$RTn2<$c)L%t5iV2eGj+w(jiN zX^3^Imqx$8>i{RhVZ66ulTX;XpNH-H+bk-z3be3i*BT9MH|BQ*u~lr|+lD&MF%e)J zbEEA#Lk?qOvG}Fg`GrekvDj>JZ)YdJmEWVZQCsx~L!9IjWr6ZVCGGJt=M+SN<=ijv zIJVIZJ8eWafaiI}MH~0l>a{RD^-F%%wnuRSmjD>~^id=@45Nh><1y`@R7Wpv)KzF1 zt$_ld7q{`(Y&O|=&^%xtV}S807XIIV<;$=Cllht1i#`;@STu@`(113s4e$c9BkEyI ze9ra`lCZrEVjv8&^NXlW5wA5-R25jey$V14=qCKd2S0%Oh5I1*d5BNMAruKg468uL zEO49`CgNkPf9ggX46g@TI5##P2hs0ifhvWzPlQ-v90EZZc*zHeiE(uDCfr_KX5V9= z*sCZkucw8gt3a(|!_+)~eNN z5k(sg1^xdtou2v6B!3{jeQ)z7-vZrBZi~-Ficu6;?d=wbqG$_%>BM6Sk6glwKTq3( z`)-?z;vP;-oB}B*nXR+KCyUmA7GU@MrrB4xj^b={@S0yHVxJ-hI0k0VpF95=#v6D% zml%s+HTj`dZ?K@_UhEdp_R(^wV&xOvo|{9f&)hbxd=SF24CR`9Xr5fC7n*K$U4kY)r(***JYV1siua(XP!r#mC~KMXVrs`*T7rlq>8N~q_2MzH1x_KVt1YBx5 z?dlOkyhV1KdYZ>1pVYywoZ}+T7f;h4DGgoYdj$E!t7jn?i(+?{L(-8>}Nmw zO;le*K*7-Zw#V#`K1pQ9R(Ksvb9wngIDv{CNAjE0?=i05_>d7plH+|otiTp1X%;p($7s#PoHysGu`V{Ej^Epnb6F=vyBx?MVLK1)2;j;ybqg&9aOT@AO`J4a(dOMvC|Ammnl#;~*;FBsNDLOhA+)UnF%%BXFU&4nip64= z@Vtn~SoyI)dt$=iOyN>)eV7+UKF-trn?{ql0F9Me#cT~2lqZ_2)lGL{-RH!2Hb2EE4~96u_^(^re?B#S?L-{O!$J#9QQd)nN{Ix9&o~9{@Qh+vMlA zwxHVSxkNr8h_*(=6L$6$2y_G>2V`^x1@xxQDv)f^DF7ml_Cf+^YIrR2=3YGJ-sl>G zr<-WHCU621fCYLE?U9~M5ex=l3-^iSVJi*8e!0lr-*thJ1z_bPhV5@|VV((LwpLe_ z%KrYQQvgF90KbDsj)Wuj_fmeWm`F~ry;<#m3x%WXVU`0>a;%B z1rmQ5MG&L=EQ@u*NxUVlUI9=Kjg7^a1?RRlVZTygfrSbx_BREO2_dv}pQFcCstT)2 z_JKGmbWX<|0nkVZp=3}`G+G@8;ya|`^Id}M2*7dzYb0psb}T0dOQ@8x%rWH+0)ghdF>%eAH&C;>AwUP<|;d1e)g(iBrrH zt)x&m9RO#{Bzes7K+}Q(&;Qg^D)ryJ^wO8UhSvCe8xHCU~k0tQjf=xM5L3@@q4`3fZL9r$5Mbz4;BSJo3#VH z)W)7|_0KjwvZ_>}(P)rg!}$0(7Lx$gstS{*rcn$;LXQAEJ<%%w%DvZPM>G6;mE#$T*(rHglOdzjX1!XMQmnJ@I@r8X3b4cy!IQY0+mAVp%4=h!X6odQYzd zwBhdNUA8$2`iSMs8ftkS&dtqzDISdnX#$HT)8iO+)sq0!1JxWc7bK8swaP|1 zr(+r=%mEjTjDvu-PS$N%wbKDQ0+_}4I`)rWJv(#yC)4TaF(ltiq#R2#|QY zZ}vK19|5ecuG#{izW;H?{I&{iwB9uBj6^^o`TdM|0tums#C!3a!w=W-qpJ-SiH|Vy zX0a^caVP*FfWFng> zuy`l@&hM|RuKY2+`>t~VIRNE{D&4AfHm{m_q;o$O05@?e<*Iz@`K;<&@alASb7&NhmpszzHcmnM=06|Q2P?oUodx2?*DxdYSPI!8v7uZwxEBman z0>J=mZs)P*;s&vAQ}_hx*%J1!7WO&pbw-<2tQG9NO!Wp5sA0bsA&zz*ijI-o@s%93 z@x6mW#NHX8%GWi})dqgH*)Of0N*chA=i=6Y7BnrYE%>+5(=5i3>3bKMU5Hg~=#ubxiubLpAsML8r-; zc2gtzaD=I|Q_RJittQJa5$=ik$S zK1^5`t#us9_e<3Cox~nxdA%@`n!S@{{j;!Jgta@HXx#zVb!sWpT0{>9X9iQWb^vu% z@2v5ljg#etS(v@sJM`_|w)uRj7}hsiX5}B+V$XLF`4sJD8xC*}JA1oqJ{pd))-{=& zfD}3=6Mz#fw}^=N>p%REMfOe(mOi@0<|j@j*my_)u8q*M+GFG6Q{Xe*h=WnjAtU@AY=5-Lb*!W4; z1UkSQI9w(x8Xu3s>C>m#JXJrt0jvK&H!IGEJ+QanAJhQ~g#y%SHP(izwK`Pm4M>j1 zz(BilLhuUcqB^rMih~1EbBk3!#R1wliNJD!Q5>MOUxI8d%N#%u{oS3BBf8uT$!~SZ zCwsLVfWjyGARw7}I=3(f;ZSIx1HAj*_u<1^%dowD-*x%asRw!*{be#i$+z&y}b)tn`YHZL34iM9p-&$5tg zOX}vs6sFA|Lt@;ld|mDCw;%YC*ckxL&_Gr2BP9)@k>JBT3SzMs6F@H-nhJigOPhwt zvB+T`-m!iH34lEd`zMLuy+3&ewr_7hdS=#MFFD#tb|VL+x@p@HB)=cw_Io<>y#`mV zl+pUj*!Rm!02WBdy(r}KaBFGFCf~w^XD&egex4mKEH1#x@~Z3ljhi>^<4Y)lUKl-^ z*xcI8q$X1tI@a|g1V9OOfD^sq*m22IQDr5iiY_67EcMpdXo$zKa$`lcY;Jf$gZ!mupk8^u5}S?b3}f$BLFAiBmxp!ZyV?Z5ziuI z3SeSl0`htDJFN5;5D~GB+)0%TGf!v+y=E;Vs?^9B!)hSL_pz*wCp~3TrA8lfGB2} z2vVoa3aX(sTOcPeJSH&~LD=*_Yr1XL0*N3T47uj=_luC8p0dx|KF&qH(Qy~&JDiR~ z4nWpV;j~vL`N;`)^%MDo^Pjx{p-{9ZZzb3H%JK>u=bt((0>bqhrW;rS=&k+^GM7Gg zi5(p2070Lt$NI6?kE@Mt(wA2=EDF23u(+@Q$U397k!TDW2VGb7{N)Gm%*6{ZdGR7U z4+i|M=jC_I3ialeU?wWU4+OK&6l{k(yAdeuDz5cN5Qu_kpX)sWDD9T+=kMk}vd$}w z%5VWlL6=2H&;+~GLm?T|J=3C=S4=f(nAqtvsi6;59hJdEa7--BVjs+`FcG8@N!Tpp zVQXjGd>&ewBnn49!>ZtbWUkdwIMgaQzI!jnizr}|U?SfM%T+|a-}g28zH@4-D}?Je zZm{vE9prCay9SBEGN>P4HTTyx1&r=90vXu&Vw7$Ne*VHqo0VdRg;W3Y>=ENquxUn#T2kw_RkJr&#rv(lPq z%_M{-CekGW&+vWgMV{xcA>evDr5SC3F56eMlw@hLrp8z}(+Qjulbi3VVz1oYF zPNQ{h?XHFE{3x6@cyOMCVD72WY=A(O&zyuhN)wOGJ&O4JhI)YCpxdG1IaNN}V|*ME zu`zc1;+I~8$cYG4sx_PZ3)rg{FI<2W3Sjw<{s;wd9isO>v_G}EyA8hkKLpQy!OY!> z1lAuCy0c>vyR!>rWgk?BqX;|?U-|MYFmci({D(_Rm?N`DWf=>$T77qKZ|^s)^;%OK znr`0c>7QIDWvNsG%H^6}`7|yr%(LU%#+JSQWGV##VQ@u~2uez|+Y*ieasm;>Ob$R! zz>-qTvxKMzNQP!Qjezf`itlv*Mq;O$sroG#NTekI!Fzb`w4TV<9Jx`|S|?C^Xu}j1 zhc|PW;?ZH9Bab7#3@e|=wWxQ~52 z4nqj{tW+xK06ez*CcXmSi`OYs72o0Ifm%3)fsR4;@9(sYX3K-;Ef7Uh0N!>J-J%IR zNAIU+NuZ&?blqT4CDOG6<}_$8*u(Li_z9DfCt-dr4XLRVURSYYWneXP8&+1=*uK8` z^FNQh{~|<#L2O$*oIHIRl-n8L?;x4fw>uF^-31{~h3I?`Lf$OYu>h-$0E~q~Ebi_U z*>@?$0vn%s`W(FWldrP9H|jN5yOU)p3y1wopw((6i6611l$8wSUd4Bis|FOzaiDV^PLi;H*%1ko`Uq5>4EnV2^0n z!e@dcg4uL7J=+n13%#w9mnGSG-cXzBZRbQdC_}HV$pvgeIv^2HT>Q*Afcg2MB47!x z)L1W%27-ruXatZ5D3(9&_D2#!WxvwhCst=0y2KN7XSH`g#53~gSU%yp7CsR$iJ$Be zPx$^1z7JblTObJXk(KX66a^46n0_h zqg9wSU3d;fV7tJu{q#%yefA&wM>3g!n;*%2Z)`LgU>q2j0GETnwGVH>?tT@frlw#T z36k6ngw-e^C8$IU1D&9xl|T;2c25Sr$FeVWUGyyFY&Yglamu{6g_xfG-47l7KLay>RO%O%|kw)hxPS!cCMn!M57YK;$|^? z_ucp5`HN`jP4hk8R-pTBgkVoXnm+~7Gd~6UwJV@(z7NT!=~@%~GCI&KErv zYBD+a;Z1PeyY%rAY;SMdb3{Bvd^`aw%S(s9wa0P?A)30x1YmztYZaW#B>FfiaS)Hk zol}3By`6m;1wd*{yz)0*`42a?a=(kmN6NkI`?ZRnl0S}Apovs^@2rT>W2ND5=c7SdW4nFj|9|frD ziFgVpi2US468xd)(EBaYX>7Gx?3l=>c<(RXga795VD+E=og?>Az_vyL2nWNA{64tT z2|xirM*y&Nb15+Fxja>z6Ovz|de>AWK}Gx14pf*zi_C3gJ9l&~UvKJQ=!V+?+C6XZ zm?9{Z6i{~eFmaR25r#q6bSNw220?5|M$hxO;pfLi+ZcFhV`BrB*E6tn_l`X`@AZO# z?W2`SnHJsbI>Hwg79qb=f@?Q#!mB^|6*gDbi1e1d<}d&9efZ$o2XOt?b&#SGEXmKo z#m==#{0rc(-muq3+aE!x5@yFJ=z(8>|swHS@!V__WcfW&{zk!zTAUG6`fd2G3laS3#a}tHn_x`{59=!O)7aT3* z&oKTR)|Xb<`E$=*g6E#U1TQ}Sti9&O+6NFR*Wme>eCT=PHu>#5WY#k5oXGFNdS`Ur zEJq_zmyI`iZsN&uKS_`qP^7a{Oa!C2LA8u-;1gLqZcx<|@f1!>o<0NN6Hy>J5c%8| z#TGhf*wuA3}56OSQB%g>k$3KVfe*e!Q8BE&bKaTT1hDt&;hzLg5$tSF5%tG&Rfc52-WeOtS=>WHpe3yNz4b}BtUY6Z< zgZ;dY!^fELuatHbw4Mk^fq>on1y9%ZIqdfhv`7gYsOmvf;kLTg{ZvEeot7YKg znTwDw<>6NT7X0fU{$XcD_xmfMzk}jZp|)RxfGEQjicXTu>wYW*3e|Lw)znn#!*~AO zJ8z)npA-etDf9R88O>l@x8e1;)4{_NMz= zv`sv8#%Iu}Eb=W(6$+3`n5}lUBY+GB31I%zBAZ{$cb|WK<2sAq{LXI_Q4(hu#*im>VnmP#-g)O; z$f3QCf?B->)mjxE21e^J`PnNXAd|_$ z!l`pi1oO$oW9{wYsjdJvJLFGJPO_0i;KZ{Rp0)Uzn@CPT@>J5g^c`xg!-B8Z>;2xp z<~*67pM}-6^}YhIEYt<>gAqa^P-+#Jn%u&e#7GTYPi{aWAj^9YH{fue=gysD$0Py@ zDJU`WEdhM+XYU^Sx#R)_<^oThV2dX@^C}Xsi$7Nco7ou1W23&+lm6pz6wg& z6t=uD3x#_*s0Gb8i}`Ifl4sRSj!LAsZRr4N4yFMi?k z@cH?Rpcl2n0%*EVU*KPW*U!HWB{dIHlY=aB7!QZpHMLTK;(ig*(`k@+b3fP)Gg`yQ z-dI}YfcJYMk*M{|TX_626~|Bk$dc@uFgz@QWGSSoIe0?Y#^hc5;2NBNdJ(1_c033* zwFVlmF(-HsH%LvHZc|Zp$llJfNS`&|E1xmP+MUDI%g9f}*>R|_3leHkMGICtHk{ks zf_LBhK1`)jObE%HBrI*;z_@wnS>O2FH(=q!0z1wZ@+@j7$Rj{pkv;!IjM-=;!X{A| zYs%600T=#FcDA?&ZnP+^T}snDSv~VTLt>; zC;JO+rvPj)N~Dka`1t+XjMMBfD_~dd9T38-<~ubgNP>( z`Qe=+T1X946s{!#!c=OqBZ5uPC4&iog5dm=8(TLZd=TzS{s3s_&n;R4comPW`L&Xw z5PzU+`p^gPy5U}+x9syj;tsg~I2w&Ig+yWzh{Pk%Yb%0BaQ893=MB9AZ1>Ey`&@Ux zs>sz$7IumXaCm+8tiuU<-v_3Eb-jf)SOz&D^|*mFbbk_W*vB(xCLypbu;bi;24!5k zTv5T_afC)T3(EJu$BzGb#B>6{-n_B33Ez#HR_u?SWTWU6p}b#$_uu{i-iHq$i2|X3 zrs{hCdVUKut?Q~H*aZniwamnCc)ifMt9pHTIa4Z^XXr!@hahV1BXiJHsWpJNr41JV z$8oL+ui&-!LUC((m(1u)x*qwp|p zK*E_mm2!V?+}tRUuXdd28v)t1W_qUpxdKKaVb6t6m;&K=KjhINu6=MF1%Ot6&wNI5 z0tJywBKgM9Jx!*jAa#1$P6q6yi+IAQYy#%<;CmU+dKctFZn-zHa!g#%1#kfRmFC&Y_7m3lxrp1;*Nyp zi0i$rpgrKcBa-FiTcFmfke;4`^qFbaBVFjRz(%tH&4VV0EsLm8c#s>{Q1s=3Wa>01v_mtu!2~x?Ect2aeR@+zpT-UXbsy3d&vGY3hmReSC31EJQmluYn zn;*dz-^||0K{mT_C5-}DTwJs-*dllmXmv%9-N>;>W4!*8fAh#&$qgt7VjuhNhjOiJ zzp-?hjU<50GigXU+`vUX!b!gA1d4&eZ2DV%GH&XmACMaD(~#n zwCxNV;S=GUbz-!Qq0i)xN9T(U{TPETO zTR3NRb0Xh@MScSNeZO2$<(CwSG7|u`fPNzAIKbK;{Qe(MF=jf`ZYu$JH#IeBpB(7` zLT`^awBDY`Y;J7+x4W``wy;~A3x{MVS85=K9s~K_A=ixI_fenBZEQiQsKD0U98Arm zVfJi#;4OmDWTRHYQ4kNc1gktU8yn_2(CurX$w}DmY&I5;0oA9fC|J=YxTTcXyn^SE zNCcvhC=wk#M6AL2*q9iPK?T>U*xv)82p9+EoAu79VC$g!uU)_P9o;bgFV>dPeIy<} zFL(@?o;(TARCn>aZ`2&^3WVXQ=8s9u2bF5=bsVphtF_l?g5!^P!*S3$g8XCLkNbq> zwJc~J^L&^H`oU;*i1Kz_VfofF%$#$(3K8!FkzX1>{wN^w`yq|{&)&{nEh+oIhU8oJ zLYjLjl}cI5K29VO_m1{P!^d>@bi4BmkG`2}{qfa5mW`|i#z6nBd(+6}YkTI8QipB?%=zIz$2i@RMEB`#eWKmqft!hilX6!y>S(pL%Ai z?bw9Zox#=BRW@28AXwxRln$BcGwGpKPvo~+EvVvpvVI~z92vYG$zOwR-?#AP$<(Av z02tbF^37N33drHGJt4GuEWPbcfY3<@C8}0y{CcZhTMI~mD^>5k6arOgx&-;2M zyw|{<=n>$+E5ZS`?T{B;!AVkY3u$%_*H^R9(hN{l4Mi|*P9pEoa5wR_hS@)hdnJgC z(Y#sFWu*Y)i4auE7096oVv-Em0|T<#+pwA2uwGAK#-w+w0ztD4O}@uxe^Z zypC&To?e77zN?JyY}Hg?#$bsW$HIN)_*dEULo#Rw8t57;%;|a)#VSgm;&<*AcW-gN z_)HIudHOc8W3adLu<`TKbmHC1GbOjQDTCaf=FvUv8YTaBLjzpN{3n9Nv{t!@pGl`Q4DD0P^R$(qR zBZ$Im?;2-ei~`;|utgAXi@@9JW(}*|b&V2Fb6EY>)VJ{XPjUQZ6v0J!NYp9{6!Q(1 zz-S_2&S4T|JTL4NaK8zVWX|5pQRpXvUJ&VQ?1;cg{LPy;;R~0(aOj?`PSsoF6PylU z?VTM*-Hvj60q1Jr zhN~w#9Dsp@(DoR=$4T6WDyaVgpZ;nKyPoq2g2(khfVTV8RqxFP=!ObPLBaPB@qUPe zO@-5_9n_$~%OD9}d`qVVw0nC%&kG#;r)rTT$tCcqGf8M@Din(f8#zIO)ahw9lJ(|L zG^xoHTfe!r38ElE5yhxc z;<4zJ-C}9o%Xzp1-95+>L$OJ9Wtge1vOsj23^urlR_3Zau}w9zt~QyXPaQD4zx+TKx!#Ud<71QtjH zn^@uH(h?({&7lxhR##l)_kxJGpdDzSR<}WLiq3QNeu~ACHO>_Gm6`57&FU`|i*G8$ z;#+2$QIGYl-hPuLf?BzJ{U|=OtW=c$7svkvV;x06 zmH&&#*aalN*s1>ak^JAq$UNvv_+b}G1aNB7ZU-&=39W7wkpo!78;0cuJtAqU|GQdI ze+Gpy=f^&+^X>`|JUuSrXxScmAD#=|u2JbtQ*dgf0*ammaXbbdvD>bMp7+BLixs>* z*YQ}dV^Z3F5IqtK#1H2eCCFqlu)Dnpv$L}>f&F~}U2gfKCENPFj{S+)lDr&!qxqd2 z*Xxq*bI$8_CACvPh5Lp71LMt|`-O~vg{JGqhdBKPG~onj_%kp$0ClxyppAFGxph=a zY3p5nw+sDSK(7b}wF9gAyX5x;sq=M=wNkNwf+@hGf~u-exQqMSFF&$p4*ZDq3=;xj z@%(vv-bsF|)p``KT0`P56Zsgul}(AJmRiNA_r06A7#1B6`L$~8XaO80f>HCQHfl@+ zs#<#_B5)?2L{P|W9{U;bu_$X}7A!&cBYzO6;yKP;#naOd)&k1q^3A22OK(#2A%8T` zUIv9|wmXY_md8<_`v^twt|fwoYHnf>1VK79N5os?J4H|{SC|NnaHGTd>apNjUG2MW zeSN*}yryYP0L=PvKT{7u{?@&%e?gW1AosVLx_hEu^^;>d$S3f}c?sPN2>>}5c3*Jx zZO-m-W?~I@PtJg9`~r?|XifDps913=4g3MW<9^O1Wb-Umq#iJ-83RL?z92ydbY zs3m-tL{KW0Y#~@8;5d;9fMQhCDwUDfrcx=_xvuw5bU)&!&d%G%7V*aw09NF0U;pSj zk^h$K0y%1{>#UL_jQq@_dVVh+NC1RdwZcT8soH=QMjrz_1agC4!uVHeLj@9oVd#gP zfH0~Hd{W5WJ}ioOEY4yS5cx|VE&bC@4i1CJM+fjr;z-YHH9O)xqUZO5f0!hY2nc~d zfc3vVJ^xV8rVk^lwtAsq7&mbEI>&KjDgWuVQamBcGWK8@bnM3xP6|E&`??IA$bq6L zuE!ZiYHaWqM2^W9yH+UVzrFO)^$yIy0fq2iV*CsquGMNaps?VV{1A;q(F!F9g&v<1sG2(P+RSXa?|gD{ z(k6cdtRwlqj^zJiJia|JKRox)-*QytTi_r1O&yR3*yhEf`<2rHdhl;+_1f!lK)!+k zc#T9bj@C~CAdm<+Z}+~+G5Y;+AP40m*W~VGVd_j8lBW_QlYeb#=^tXCdd{2O!)P#S zANzfN*v@a88R5H`;r!%2D%2Wfc1&$ZtE=$*XD))^$IWm(J-_GuYE!+nw6yd;6m|+` z<$K)Q@p{}f*n*yZkNNR{4wkV>0SR=i0xcc))ufiCf+%rN-Y>H_4*8GV0W6RcXqqLw;+MjlGr5$Ug%4 z`}wsF`M)!0O{>+ii^Y+kZj1nn{7U)wE%C7kfG|u1Cm+APMilUrQC6ze~0ue3WAM7N*X#m%@dc0e3x$W$4ZRR$A1MfG<@9FvM1KZf=JH4M;KtI&>&8oM^ z@8;7aJhzd1B>X(K7U0CNb}$G7+5~0eEffK@gsU{6>?tEXkK>N-3}tKqTX(k(&9^kY z-}1FWp>PGs|DP-Sl@IONUIBPGlYA0EdjR=JJhqNQBR|Lb_1PUO7&w3rl z%XFUK%tNVIdTe{2JUw~TlC`C!r8k#8T6)t(KA~TREeG%%zG#vEN#PR{0D(j>YR@u8 zXqG4d>a+g|#)oP{Wg^g3{gLgL9N^G94_qRqM!?8N(njm~R!izr{SCG8iIPv?Khd{= z*~5@HkY$;jbKoY-==AVG4#2hC^G4hF4IKUqE&ku22V`!PM1?`^wltOX9@9U}Oo zEB}c&fCXLG*#{4638OfG0~r+6-|9F5bAm>_@zDERy16v)8j`=3-`;w2doxSqSNbkO zt#Ukf62D=)kN*;uA zwd^`4@&^e3$-j!^U)kQ?dh22HK;+lzwMUZE2f-5)fQ5R!&V*pK1PkN<4i zPz1l`5BO(WtroNIVdOh-fTWi(PGGoHIh~%Sp@rnXef@_&xD5UJeJ>2wq6S{h@8&_R ztB*UyL-E7~Kp+8>t2GcM86@6x1(U88=1>@ZbGvs!ZQ{Q_GMYwSt$Kbr5Q+W!awN#E zluKm@OJVc*Uh@rB`jv7GGOKImmBPkIA`&}y|^;N7w3e*r(?>fqNfg@4ztdHV$_8N}x5HpG!_8zm_~1lVv|T zQmc8r*@WN4Z8TVG?-Na2;0))rmDOb^?(9D4)VlDgbO0MzJ@uw}c)XTibVgI(oEL?F zy%^(TrKEfd%xZrlIu>Ou0iEVG?8|?QhnF$l8uH*mdB3b4=Mzdw@kwWKC_dc+=-~J* z;jpn;A|Rj$-o#kL!z*D~oTKMr%%KRV=Tlq>g+rN2xk3U-SkEXFb_<(ZJN4u2T@Fi6 zI(=NKK?(uq8KrX(+2%Tn_#V8KUC+LroQS@WNF**h#PwPy)=&g<&KnYm z_(#AU$B6*KC&Fyp*vLW-$=$6KYj`(kVQIA1MJ?pq4-w zECQ?IxkL63ecYf{sl8d)Do{&!O%R34G#80Q*tJ+ZM#CDCf2Fuv%t!)vti2j-jg5Hk zlTKS-c%JkI9tMISfWx|b9KeL(H3eX`0(RVW01We*9Fj>0boeTge>ob9&SHST2}ItT z6l`JhcvUP&?Ee2>0FM*ymS72hDxG5jaKf(N!2)1N&!=qxtbV*|`#3p(+UTy6{PNKA za<%-aC7l_A6{&?a7*| zC6nrUmF1sbX~{9E1+qI`?M_rrx*}MQ?rj-P5t;UZ69XXCjUnOf2{;S z&~+8vz%2p;tKP6GpGJoWj_UxCXbdhq{{=QO@Yp6ioGpaolK=k|2L}QG0000${;y?V Y1IyuHDXDvxY5)KL07*qoM6N<$f|a}My8r+H literal 17563 zcmV);K!(4GP)*L-vE+Esb{FmOagu<&a1JOvs9jutKq6 zg?H#j$g$yn=Q>YkqN>FH`#R~3q= z0s#UA778c;31k7t#P6J&$V4W9LOn=!&#Zn2ad01b^X9$h`_6YfFv4U-hRB%+RB9DA zzO--&QmGW{ClU$PZ)goRo}HbA*Is=MN@@*K>+5js^*7l3ryqU*ON&cz@BMoa4u|2& zi&x;@4?bqk-gxC2_V1Z}Tu*Dv`8U{nSP8?@b4#%L#VVU$er_2)#&_vl7v?V2V_W`PuPU{D$F}<^8AJK zU)h0v8qETpDL|j;y3SexpZYwnf(C(h9V@-&ThvMmO+3D^(#F}~)k=ZM1QLLl3h47M)!~ zz<8{dUU6O#MZ0WjnwE^5j~MxK-W(gpPyi$Z^$B4002RP1f#4Htf+$l_5d0M+0eZc9 z=((Sk*#ziielN%-3I1Bze7C)^IDe7#7Z>Ii(C2wa$|N_EcQKp)9J_Z9+h{-m(5${B zNziOI*_=fR@bWkxVqPd@K&@1t=|$OfWCiO_smz?RL7t5Kbpqc4dpoE}1lOoS&a3nIF0F z(!vt?&9#lS8|xeEH`iCz-@|D;aHmlKr-cF`=9zrvnUKI6LWb#@$x`Y!4S+^n{p!HC zGOQa1o^RQYSRbEDA;}CT_7BBcSLEt^UkqV&eO`ABr+qpjxhiT6=ofc%^{kn&8{L{!gj` zWV2a_%`$18@A|@Qbk>scOIKfd^+NP)>;esz7tQIy<03?+!we8B>!=mHf(<^qe_sZU zG>>~2jmk>&8*kl21zAXLCT}4T?hboxlmc)_I6)BXd8a7>1^l8P3i-lQBY`)SObswv zo{an?fq#+yBGVBD_U!EJVi){{>#ts)7X@)4b~Xm&WLn$(G6C=Gi;~YCQ=p+Qp^r4r z(Mzy&+~^YX_UCJ#|8s0}&gY{QKxg2S0vN{d!$oEyi~yEDiFs)=r%?&;k4s;+0*s-H z=z(xJdo9iX491z*P=uXEXKwk;DdiCnt zl?{GSWj;LL93(fP|RAL7L;pc++QB40J@EDJUI#-=&553+R7;Z6o>S>e|Zxy!l}B zuJ!CF1z@0eTOxr4KIrCiN?NO})GAOdS5I_jZ!i#Kooqe}^rK74lab?sKj$EkRin9X ze*ydRSFT;BXA7}&bB9pQZ3MbS05V0Masxi09P46h>uao4yP2_ie+8B=UB(ipyVeO@ zS1}NLQUGN#>UvJ`Aa^PW)!jnAz=$A@i+HBcvCf1f`1e~ajWXdjlHfM`K7xG`1!!Tm zGw_K7sAdGZlLSSvf@jMfn*g5YpL^bB51Ec1Ar+u9P~I!Rr57#{)dPiGArOg1zSgKV zo{!E%=P*moZK7Z8za8A|)RrZ=v7LWpbMceuwSdrvR*kioNd>30f_^rvM%ExswDGZxzR;AFT$S z=P$qLnyB|)nqPcw`Nn)A@iz9CgTdfqtt zRLZRHi_b5@RAh>kjNHQvzc z6Ig5DnnIxfYJGS~_sCN-t_daJ2h99$|Kc~ldCNZGF$pl#Mi3yA&Oqy+1+(#4yN>$3 ze%5ZMw;`QQ!(ZI{3)efdGqVt$3ik+6(@+)6Y)>SXT<0Sa_%RUu1R!JJleLdHKR(Yq z+_s0gTpH5bCLxFjiHpmw<>9bo_lXEck-!RXDw*6!Z6qrmi;X?yNb<`I1M z*=O+C%4e`&*~e^*!t~TM?CzStwKTH^kB^U=tt58?*ET4fHM76bwTHdm|Fz#mjV6b{cCE4<3&WH>QD z|Euk$Hm+&f7CIw=;1kTSdpJe{!|3!B06KUcFH-;pCdauHfE2ldKQc*@*k1i4;LpX* zxd?FW%9X$W`YW&goFAn{#S3;2@eb}m-lkxAbl^BA3%D-I9!HUPy7L(Z!i$IJypVeE z5NdS|E_0hw14kb0Ihmjdlz2n900v493Si z;P(r7;W1E~Eoe2HOg1~n{4s3zs%4M^NPv#coa20W3OonJ4BgWuCn%uaK7hxM3y2E``z000*v3*Z#@a@`)TaXOm=J(oB&p?z zi*v6cSPR6TVzHRU=Pmn9JY!oo@4-l5w4sG@b1DFV?(<<;z&P+U*WsZ-a8<<^VyG1kOz|#YpxYX&Gl zl!x;d&m(xIGP)iPs13?^nvn9(#>u9UG1dT=b_GcN|g z3;CS_%5bkl)U`Uu!B8*bbj%vQmytvO&UMF5?+Tv5+fX9VnH5E0M9bxKP^;F=jK}t% zd0?-ltP@2qThk+fw;RdBB-Mbasi}+D`4;*ls>~X;d%g4PBNd>72W+FP2$;;&*RjNM zNQjPMfWZ{OT&s0!4{ym8+Qp^i%fAyG_n&h?$D0aZGLSy0vyFQsI1T|Em&AAS**rUd zJSp1*_~Zv4A^|o*KxvM)aOVWSAdpcf}9y^O@6X&Hl-uy_91pJ8!P~I!M2te8Y$wxn6j~|yxOaaKK z6|iIw*p>pc^d1>#JRzAt7jREf0IJg#0j9!JFfE6`j|Av>09|BG=0lA)uv~OpS!u~# zuS5(Z0G-{786KUDLbY0DBp?DXqM{QKCMQkxiOxhF1ONvKh7-WDNqKT%QklF?{Zgs4 zhXmL=tpa%PIVA);yXa>m;9t4^GaxII5DEs~R)W$mw($UMLx&x#Y2yK0B#12YE${pAh$iRS13VS(-9MjomnC&ZXT-fm~mRO4R5^ks)?7p)A7&y`8FQcb>?}N~ zDT*SYzdbIFFRX8@-(F9y-@)l*C?G+lrXt~O92xke0CYYBYXs-xSgSX6P?>V{jDPjz zS1?O>@*6n5p4xthwP7DWIKdWpky%axuuO37;L(}X^a#Kmah2ZNIt{TfVT=?VsW=jFM>zCI}F2L~F< zU|lzz_xe~6t&-R8W*!@$R#npx2ulGh3!>UhVEpE0W4#(`$B8=z^zM={rA&pF7M5;= zC&LR!f}&b)C7s|8R{(PlK@wQW;4vt+U%PtEdi6%*pn3hX&sP}%Ox8_+f%S!eut-4n z=DI3r5x~j@lLW^j0M$>ep)u*VOpz6koR?wW>)6@Pz-Tw|j^;P1u4!5uOMn-&y2kd) zXSX4MwbmlRaS1@#pMA82dt&{>>^1My?n?h~0$@FcLcRcnN9ef%d&eSx7fVY}3c})Z z^GpF`D~Y(1DP=zatl?C6Y5_@b9rTtD6<`&oG>ZUjj43Gqi`{|F6rf{tSQ+(?j~z~c zTD@^Sx07ds5>tUGybxA01eP`>r7$qqIK^r+bEXKK84x_22Xlgm*DIvlp$gz1S75)i z2Rzo@urdjHy91Sa6=tTVLBhI5F8aM#mpceD&)kD`k>`EP+w@)h8At>UFVoUnkjp=Y zjm=GHwN&&v1|o>r(6*gwzO$z1cJuHk_mFvUcNaoR1o!jc&bSU+`nC)B7P@Xafl*Z} zaL_uyv$UY5)og$k<}bk2t1rS_{4B&`vyOx}PUw9`!KDmD<(rz0gqNRR`i5GqNa#ty z%a`g+1JBGeEHEm#)Nm<);1j@u@wVJW01Xu&x3j|r`FtJ%fdG?dobQ3wm!WnFd58@< z8~4fqj3fZ65kw+WtgosKkfd=uum^IF3s9@8%+;m_EhL}iUQcgtFMg-lY~i~Eb_?H^ zuw;4IKB=t?`a{TMl2ENxkQiC^PByy*g+k8uy}ieW@etExYvS?fc$x&m68Py+>pyL{m zfV@!H#o&7&8i_!zU`ndqX@Vq*_F7FdmCiE%xWouxl1RmU!mj6}0{JfZ)XK6v@O=WF zEHq())oPnD@p%PQB`j@TlXR?)KLVbN+SK;8y^poG1^!8`uv1{M%Vx~;&Z2U}&c*sx zSqY$b-83Y@0yejlNOb<)fBo)l>?diSz_%2D7kKb-KKmVEOaO1WY6edfd`BLTNZ|3b zAcFl-Bp^vXDGA7k1OiGMflnkL%j{&J(9JHDz&A^*eO|*+)JXyKgGP5RlL)%*&Ol8w z?;Dw(VQm8y#sZ$K)ovm1KAQ*xxPicPUb8K$RWtLuB(Q*2WQD2a`RMGC;1f}8@5Z0N zXEE;Hm5hi$=Sd_ILw2!DW=_E=AQ3{6j84*>2S1<^c-{AIw%v+Awb4Cx4@InjJ}(Ci3@n*f@I$?! z*(&3sbF_OwZRqAYIOq}t2~^zafxkR|iM21k@-l1RK;ng;zidCR9`v$QPbVRVamzf+ z!REtsH=bqp`J|xTU;SboY6w)}aS@gl=UpmeU#~BovLM3M=av^{Lh>Ic&P4z4-uw4V zHQ>83>m3K0^`;$8D3#nmlc}{Tt8e}D)h(NPI>w-Q)2yyG~@5Tk4+=3DH~ zWOJ;|VoPK=u1Q$a)rM-13H)KEc1uf8lvqnaX8>sp*E%KSXPIW%^H)sZEdqomhASh1 zZ`pi2&ODh;L$NHm)9E+Zf%IG&|&c_%2^pC%D3#abV ze7#cx+X;xQJ0Ve%^|F7=u?n0}1(Dfz+13`#JqXQpk;yVZEKFl0TGEIQpz;-$Y zmJJVZ9OotgF_*k!Nq_~6G4w*AP>^|SHVVN|0A^>+Gx_}@gaQGm)@noFYjrc-zA)!; zjXBP#U;z82Dya1y=l3fO3iX|x zUYvCEe%!<)^GGlNd;9xrZgOG*1(b&%mQ%|q9?Q#1wgPBfViE~?g!*5#dwQ3HvxbX&d7icU6LQDZh87Tpe1n^J$-5Ku4 zZUSD{%`ts&(D;$x7-q39_|#HKBFp4Vg=qDagi={UKurZ8B@lQwL3yt!{Zs-ZEPq_w zBy$9%oSDz>TAxp+hMwt_t^!zJU;k%+$Xcb{lX&jjMG#;6o0$D`Y@AGQW2VMfKldne z?sqwmb;@|nNaY&J{QbFVC$0l-ZE zLiBc8`8-Gh4tasRyBTXe;S}@yi;7trh3;N>N%J_I;Cg>|FXtLhP4)%Mao5654tBF9Fy)e25};+C z?Zqos;rZpOa3&Uo*|QNg7Yd=Au7mbh??L*n-e<9sxCTT7B*H3^XX9T3oWIQc z@`cM#c(l#losF4$e2gV-ZDS2MjPuMn8FKlYtM2FWW%N(*Y-M=s8*f75d;)xe4=A(Q z{m0z*6&?MzzxhkQ{ulr6U07LJ`7dn(EH5mNWL-Y*4%jfurn9Iu&?CVirnf10I+DN* zEbmsap}-%e7bal_*9n3!04Q1Pth=0%#OAu{LBTe{wz_NHO4xjvBm8r9n1Z2t06eN==xcc%{IIcyf-^c_)E7qxZ-> zGQrMvTfLfWP&;Tsu~=Yp)Rt@RjE1&0uxI4VOt+1?2wK`JLOeRl zvfl(B4h4UX6yW`PQ274)BV)loUI$qDE+c{cu7d;$mgFr+Jw=q<=2h!<0Cd48|PD)>Delz@3|&ftLOd*^LA%A54UHBdf!*E|Q9Ng)T^YP0-G3I9I;RhWg=;w312 zVJcHBItS^;8boJjVD$^JSBe}dn>c?81;G1D<5Ke7zkHX<0C>y$b_sZ>OoYZdBAqZ`h?1>O_vSQyF zC-}oGaV`#tc>GwgNPO)owEoV2XO9aXz6Z_qe{PTEmtM#JRo0jG{uESf|{#r>X)Qi8+%zNPwz6TiUNY^p6Qoyt_q$0Rr?HDM4MU17I?_NZ>iy_ZaX) zOqOMkf@bE0Cc0-CBKekuQ8{=_i01s#z_Vhpc<6gN65FW)mMPIF{`F!IdG+g1TA72= z5AO}#$Jbbexic4B1Rx_4^b_Ffi&x+YENK%!o(T31JP~?mOU)A+ksyPIj!_VNKG!qO z!!htJbCKW#;L8YZ^lX&%EfNsuPHEKI!{5!MGpv2XXt8#xOWG8^&+qLHC;<^591b6P z79xRR;GMjKL~xq&@*AujMgjo|pusPo3W$sZ@o8*x$B&0jA?@hwEM$z7Sdw|py)L!g zBa?S|ao+hXzyNZvnF!Hn>d@#0(s@1B@7uiTn5fn?sHhcNZrLNOUMW@JMa=m1^>qwL!`ugxN<^}PgWwb? zt=+Q6L`V*FMoPX*OpNnB5@6LnUfEHzMNvG8WG-V+bSz*7pEsLL$fmPc*q}#(A;x)4 zGU!;JN7eAdEP6J^+T5co6m|;?_{em`er|zZ-q?iHgy>%#0X!#jS7O4_;v#F;?|*ve zw|9%XP_CIJJvM9Jk&?^)M)#iaSp0!C=L$Dv;YmqgncgMBFbQ{(z^av&Ou6c!bjKL)%@b7(i58nUqeb8!d$&V`0L-!>G7#T~>yqr8l0mw)NECsms(%@c1fNa(* zg%$|}Or|Er(@L=IhufR!Oxk|OTdOymd+f+lGc7?7*-41KbipjX5IZ+#Zqirtfpepe zd>eW>Rn?%SUs(i7ZMN>B_x3aYOTVM!970x@yd^T zC7`-rwl@e)$Q#`wpRNv!Fr(cYCHLMxz)u&I;R+Qw6JZ3fj7YGuy#l_V5BRZeSv%+v^^N5>SS!kXp>zP2 zTz?m?oZxQ3KoE8gdG_hb3Vizc3hSp*Db^AJ$cPw30JVms#U!7ZnX%vVF28WqxlayV zi$w6Ug~Evfe;gxFtNT@Z+#|u^>nS_?>!@X-ATlWs{XHQ4LXS{R0+7uh2@c9;<`W6X zeUqltf7BJS>r-Kt`Ta%&AS2KTe9Ko3R_ry52ng`K)q8Agkzkk+_@^~efnoMzBtUdJ z3WWG~__;VGh}-^ldnp?LHyM zEK1Sc1-`m^o!s0yaoC&&~Pe>E)7us&s0O*}Basid`FAK2tX$mf1yv+P+ zagzi= z*{shMeAji(ee;}&xj9Iol95y2vX#$QSsM<^-Bv*Ylp(p9g86x~B+Oq-9HcYpymMb~ zqv6VIO$>_k<>;`(rXOY?oyju)+1Fl$__-K7i4h61=`28eSUEr~@cTxBKa2#U%s(!H zrdD8kXWO0=<^<5DdSyczM~yktVtszc2hH_fxgY{8KexyTu)4a=2yiKSH~~bT*ejVw z*dL}%0(|4ep`mA){UDt}X-_inoo0c5`T1oAJlPZxAY5YoWYQ!7`qsd^jffPD}5kna9t>Vd^b+ z%@-Z@m=R$e>u6K8vwwMck+npEKl#(|!Y_aG7rP|*7X0atz5`lIGl4&a5dlJS)Xx5D znUYmz@=r!8P~I)s>r>m?E)^h~>Jq@RO;Ui132P|D&&6k)&%KF6!a2rN5Vv@|fWIr1 ziwhSq^G)DMKCP==oQt!zR8mKR)DMo{H^F0uRQIc3=mrR50*sGwY(6+1#M&hf)cn>E zxQEGpVJ8Q&GzMC`1Af0BETzkpiug@|-87AvB<=8^%=Loi_qxGrgj8sHkN{v3-~i7V zQbI7l5QjXHD4EJ&e;zKKdl>{xhL!z~U?sQW4(SL}MDyEJO0Hb_7Nqhi9C;vHXhAxy zLg8@=ng>m29hj;FW_ZlIJj#NIF>9#!jW)pS*(ivP^9zCpN|@kkRRyia&f$&5V`EyQ zr)pfI(FCWnLn-E=WLbuI+@0lDU%Co!|Ki&aJ!?vpmAwPjl|KEL5~$Yjvbh55ho{0Y zH9d8_7a0Teo;z%Hb+rd9l7K7`pLeY(Zd7GVi% z>qyfbK#$me^@~+VEG!Sq6A4mjvkaEE%TPiRSSrxenjnb6z&j$fP%8Gad43^rRERkQ-36dm6n*`R?xCj|{axei;h0C5X>LH zwV8wlp4nOGEBh)`%O;8XP4tW4!E0;yqgIg>a7Hh`TgC(^LF7!hM;zSW&-G&J9kMT_ z#U1no8f-tzz}&eQ#ACCN&SZh}ehk;HUUQRxfo_t3+I|u|4I}U^+kI@-WXeFNB-$i! zST5sMu4Hm;=>DlkrW*LiCRiJmBg{qonR0)$RZC^&`D_+)v*vdjwO+O{xiS#vyTbzITt{83-#q!2RCA zAn)#&1T13PL}C)?{YE5U)~9${%dK#$KVCU?JpAMSlfKf}PH%5GC%nx@&9%Ze#sWwR zuptM73u;wmB(MlT_Q{Vv#{X*rB#7af46Z#92`u?Pq=q}qKmri>P6ANYlM0X%8HSmY z0Q2)ptR*EN5?l#fb}#l02Gvp=`Yr)l>=NKOw)(jn;Bw7P7STbl#Knssho>Owh;?cs z1)0=?L(9O*{Z-apzO+2>tnhf?ob_}%y^(&H?p;@ho`fH4gQPa^gVrcP;=(1@>r+!oh#AszLfe8bbaMOa((AM6f=OhoDd>K)q>z;q9*X@(`VlLhdn2?A9jC#^+!T>#-Ox z0S+k&YxRyXaR1WYt_c>ZjfM$8S?(+~k|Z5^e%+Dr>8;ejb0^>zmljd6c!9a+UnNoTvq}U7Z>2z*3sd#Mxdyw zIxrufOF()%#hgr@QU=zPie13*er3lU8K4I`Qx;2INO6Y73yGp)y;n8$&@(O~;B>?J zB~yjwpIaKJ@rB2`P}uFA;o`y)%r7p%JMi68$Hr-wuU>X#ytk<}T?>pJhgcav;1>vZ zA_Dm?W(NUpSvHe)wfz_J`TP)z$BsVPF~FxFub`x^IArz8_3IEp6(9nnQoW2zJ#c5A zMSyDE4NxJQ9{J6~vYp7r2#3ce;D@DDoD^rw2TNVRmk{tq-#&$0&NZ&qD!pe&gidFT z5uo3KfgprX0kiqy(DQAl2GxhA3%NqYIpHO#behq&B{5kjWbVYz#uf;8%dWkA4RVii z%$-CSW_eTrMTtOVzXBnYp(iyWz$hcI^n=kVP_4UbjOac3yH*Jxr@l*R9E6X|M6kq2 z5Kkmv4xKDIL~)W|tl9mL^yG0FWu!Wmt*x#7c;(ZTs`I(G)pjWYGN4za)vETtS5)mr zXhN}dT=e>}?kfRIKBs&7kL(5r zcj#RpwT;=IWOJ2T12Xu{nOp(J1QF|d9QMlkbS{i%aYPKM9CIY2W z31YF>e(bDUjlKPnjaA$^_^h&Dx{U<5)xSy{_rnZ%EDEEo0iS%9f>gQyiFo9QwTD}B zBk3B)=LX9Pks!6P3isasfQ{e(s}JDq|KLsgc_?&vwpFU8GM39Og@jtoJ?^(Sf=*80 zlV$RmF8HoQ1E05-SeEMctFO}tuyVN!PuT|QofrBuu;U(9_sh34=?6Dr@e4Oj`_=OZ z{1y^`kzh6o{xRWH`)npR2XC~UMl!??eTTAs81PmNZ|Y_SR=a>nV$fbgHF#X~9lEzH z%kcG|?-6YKK?;O%w?a697qD-P0R1E;jf=se5bB{X) zk>DmO!Jj)z!AVS+kf2PyuR=Mbo|*ub#ph-*+f4;%91(+THp>V=L?9zsbk=aEY?2Y^ z&KA1Q32btwT}WK8`viW!g#tm)+h$365=*59_m+@oqX>{1JkK`nlP=fXs^aB%-^h>q zy^PVxa-s0M0uTR_7*GPv=e%e11@&&tkA$aiV6d9XVXX^wYn{NEMVfc;ZnucFZ`K6Z zs>#hp1xi$pk+M=if<~XdMyOqR!bjJ2XA^~e_Yk+6P+F8cBExH5PU-H_$ z8o&Ale#?vQyi!*Y^Z7jZML%=PX3w7o5#y7}^fKS?!x~MhiuY+z-8ZjiwwBsjBA`3w z`mJN072^#)A7-u1Q?sKUG(pvn$oRRd*RJ3>L|42>c|=hJVGPggXJ>1^_4Y5cD%Fzf zGu%k@=tDKt^4~Ay3cm-ZG)a;m5{a;Wwp%A%L@`dbAA$e0jDTn0Tc8{k3x{$nKDP`@ z%aVa!?_o9}-><1r4fZsJ)F%>6?gg&XIA7W`d*DH<5WD1g-gG%D9YpszR ziEc6=2{JzyiN>y?)()u;^Fh%K>2{?rGrM=RKa|F>tP$*;(!9o1C z)7!&d+nB$Y0JY-Y*Q@o{L^vW4ZTO2)ap$)szwZ{ipSM>N$#{=Ga;$fFMgl{RLLDVl zkwoAH!Cj->ie)P=Nu*C5G4pm0xE75YkC8h>h}439toOF zdRfC~0Lu$eR38TkaGl{XV-=f=!|dz~G#U-i+s$NRZWe?ww^Dlb?!oPgc}L?ZtJ|V z$I*6r(*%BGW|s9+o10JNjOpz(NI|!X4Zy7*frnKPkOVg?mCB!oCjASiJ&-8+fyWHe z@uNJ?pK1>Ro(OOnTUim20A+X*Yc|aUBJc%t!{{o8mF1nj7d%6ZU>(J0doTGZ${i26+zu@?uD2n!ZbWD7D#oOUA>viy0 z=N#+%py2@97|eEXavznjjeCtrBA%-O@{|m@Odgy8YPD4mW+Ko~RdyG{BMjV;)QHZS zNX&uXXXa-7T-^MG&%NGTE|sCQR{~{Hv1{20tlru$->&SJZiFV3Q znZs0!%7ei70YuA&m4nt(w!W4mr@kaBu4jzjTMxEu0-VB<*>vhA z#NiH-0Dc;*=?M0-G#4qXGSFWFh(NSX5X?S$I1+*4W0M5Ahnb;!Yoq{@1T$wML!Zab z&Dwnge`9@pedsz{;8L3@RtlKRoxpr!Z2evITj)2xl*m2>JE77YYNPzyw6WTO;-Kp$n>=|RFQEiT#p3KGX@HUX#apfNq1RoH4>fOBX1T+c2$*eZU4?SF3>x0A+17^? zZTJ0y!S1!J{NP*W8Sz^@&-K6`Chy=lkI_d2JH9;Q3g5xj;6V;Y@l$>%*D6*d%yW2s z!08>P0Ko|vm0PmoqT(E#L(?=yN=oJiVZ-ss`R6WmzuO#60J2iK1k%3jS|IvHD}t`u z=xvfC0lo$&G`x?S1Ye>xHTCIkI1GH^hTd%tTXO=VQk#V>Y-NzfhbzK7s<~yU&E$sF z7e$|Ior?gJ5uyDu+t?0JQyY1hR?9~20s8MZn~mQW1pkRH^i_dR_dTsSWz}WYU7R56 zU3WeoVtPkMq2M9Elf&8`g&ek-A(CF%FP-G58%ThpH6V3x+5iERJ_4M?aPxmvua|#_ z1bFEr?|qdDz3zU4UEh!Q}S+Dd^e&)8#ebOq?Q2eoSZ|C9p_n*cf|V3d2e=j~J&Zmed} zlJ+4BXx>q#eUA1xM{PFE0ORNd7Suj zL(c1b%ymD|CA?beWn?a&1Ig!yx$~xcXHzNgdED^|1?BGjMF>iwUGrINv9GEs%*;es zUr`h&l}db5tJ%ypc*C`ycUX{8TkDWGzi8gKHo64#o95N-WOA81v1sguJxT0#kYJcS zD-{qAVQ?rIGJRZN(0VIXcbgk-YYWT$)Yn+P=X5UzxNmK zLVDYs%|zOh+V=MLR(dUhaZHMx~%qQyK7rU}lOmZq`_vFvl^JUq%G<1_oS1 z;I)PdqF(~vm=9*ppNEjrjSH5DTrS5{AfL}eE_F2U*-XBFN=5L~AND7(Y-?)19 zig@kn74~3mZf+ZX&H=%ZCBRX$Qpr_Ves0hMrA25akK<^gwI5xU>k8XC(6t3*hCvkgy3I43#Y*MTD?=tc_P!oC4Y zz|Y3Hb`zTD@?@Be^Z8xZ_bl07e&MREI4ri9>8Z^Wlq+Q@RZ5^8nDZR|cxRS41sJD! z&Hzbb&o@%ZR5G70e}et@@8J*I*JWAxndRp%L#f*6mh)8Ib)deA?j038%8ue*(KRQI ziKDSGdJHR-O8=XSiA&<43fKNTxG~d?--+xkbg0A){29^Nluzmg2 z>+YBPO6So8z!!>-i?FV*Gnvu)HW2%E=u-fSsIE2Ce^e-zE`}zQ8=}`u5WeG-`$se-*B8+;PO(C&HPFXKtjnQ=|gP;y#uf zuL!|l&|30BG&%!QN(hvoAJ*2B4=ZY`<}M@d?Y+m1VG-F)%#$YEO3-ZUBj4*1B3aol z-@~hhTucueBuUn z{~Y~hE}OfX$zaC+;KfRyxBty23ow(p?7g+AZ6bno(umq+g9J?Y2GyLl)DL{Mb2_Gxf3 zAZxYuf6sBvSCBfa6o}#w1);jvK4o<1J*rB^X>WLh_0>?H$9J;#JMLkt(;B&)7d}OqYk^7%2JX>2^ zpnOd^Z3vTCt8Rxvp<6W2b^Yiv^4HXw2hELUyLqQtt=@S;@Y$M3 zG@>B*|26B+MC^By50ZB_Q=7@766w_W(Ul~jSega%fTufHW)sY`OH36`eL#bQ>f8caVfULfa z7rKG0#!?{swNwF?JRD@Pj%RWBFVKI`YPPm~f-gDZwcpF<^VI$Z`g{w_xDoiM2CR?Z zZ(#P{VS{I-0AyR4EjS++K$#5NbK>!LOsf0EZ;L*-Eqajz-Ges356w}cLhGDm&C|Vw zqc)482rHkjz|71Hjo_Ku32Qo@pB5yW&1SOMYQEEIwLZ}e{XWm}WqOP)csVaFGWQX^ zB2&#)qXov80jkkxNaOzB-F%Sxmp}e|_1C0;^b5Fb{_^FeWGcD3x%#6|{%xU9_@1h& zNlB6bTk!dOfZwrOiceRGpNs$mM!8gU5y0B`nD$PkR=E=jk_!C0ZLFRjH1A-BujBA8 zg0V^S2>!9&C(xXRBv>o#mH)2V(EiuRbod)9D{JrI^d{eNW(R;Q%S^2ad~zZMjjjE> zPkJ#TKx%Ux5*HWQnB%w;y@rZ z>7N|74wVMR$H$>wuQTu|K`jM{Mx#$o05T#$Y0s?$C$J=v;8vwtng3~40;=bRVeHlF zwU2T5Z!pvU4Ynz)=ey71d#C^ad*#EQJLI3-QUVKnYIC{V(;)y^@o^6P0*{jBRseB~ zANd~DB(%HveBmD&9^rSV!{S(IA_!W$yTEFP)qOJF(c&BxpjM~%o+)(Bvg8|i9^P=D zSA)?d4P%+no6Ya(E%H`M=k!mpj+gACc0BGE@Lar?ADlnJ2sFRwx5u^uv^8+bzR!zw zzTINrkBgZ3ZOnW@f@Zr3KG6qiMTIaXY7r9_o<<3XsVXvdEa-jzxAxYY1M4Yj#2<30+}4Z%&(Q%m|U8a z82ABL1Z>&&ruB;Wgf1VacZsd->iSJI)~jWG+tW1^sM80Y{PoKfqti@ zwX9nH)avv)uB_aDj7|2_)zvz-Z#bXbd+$BF&v7R|1O*KPm_tvsjrMo2o>Rsrv7RTj zI@Zr|@o9(c#C9A7P&JilJduIMqy(}k+u%PF0?0DkhWmND^-r^z z^vmI?@Xc&y3k088D=TUhqS0u1zqIq+=7IXXk3arsE0f8j>Y8!s<(IDhZ(2h;>-YOv z&F6e}@dpEs;i}?B>(H}PmK!bOV^pmlHCxTQIF;vl9&dwnn=|V+Cvc#5bijG@ynJsz zoo=T;?TDJDX&U%Nzdb&V0#N1~UITcqc~)xkyLl)S3i!Ut=AJqM$f}hxRQ5{{novO3 z`y#^kB>ylg?iO!jb7N|HY9W^^An+09xqM^;3GiD8ytC#$QJt`*z1bp3zk@(CX>YYK zYka>Cf`| z&(w~i0IH?}FPaHR;FI^;GbI3(0<|u?2*97>LSdKMw1Bb~{x%6FZ|0Vi<*8x1Hw~Q7D9yd94!_+7a zf6#fB(dov6b1Nj39*UQt8{Gvy%w`=P?-n640U`w5`x65>;5YBNUjgWz)%8C92vyb+ z2D{Y(*>@WEtS`8=wFL;mXt;)QR&zQiYDHEY%?J){`GXBfDj3O(nr3~vBokP9dZiBAtw(}l7S*=#- z)f@CTIW@`lK@wa?N!zPcYUOA&`YY%VJsV~3quqYv^*8QPC!f!|4?>CM={fFiXT8&O z%sP(an3HiHv)^nrUGvTq>U26xHE69JV7_mE{J!&j=QC6-=7q;5Xru;CYc-qrvX_BR zM9>Zn@OuUX1Hs;+?x!pG{Bhwi)M~YnxO^!Dpi7CO2!7Fz@foeFR&Z=LZ}ed(6uOSS zuwUJWa=8qO!U#40F#XVn;GabgS_F8Qc}NQI;kk3?Am|UWVA@&m6G8xs@C~iOK%zTQ zocci@h-J%wd|}t|(cuIj@T-;Tk=S^jHTafMDe%NRAWz9BI{`~*fMT)uKN^M+L+O8k z#;J`IH46y5h{RAho`XiCL4hoP^3f-&*6X4qffPWp>{`KSn6*#xiDE6_xxz*rq?yDzN-SeFe? zh24|f5ifP`ftj5~r#k-2!C(+b@~QPp{t2A((Y{ktQkLk+W^_AFP*Y=3f6K&C{; zv@cBo$moEntrUWhu;-|(jWWRzPsH|*a{1gWc7L13M1mo<8J~;W11Tuk{X`-T?|D10 z{>Az;zpGWx^IHCyf9px?OCV&E73P_NZN*Y)9F z;mmq&=%!3lD+mIUZEDF_mSat(azSpijjtk{Ph_62^5fFD1k;h}lM=u-B*5Q}OhtYP zyBp|t(385SlXR}(zzwip^0U@b03ra@^?qw&ZDN4yZcu5hmEk{4nSPjkr34_8W!WwV zWKF#XhA@Vi<`tpo2(*DRt7&R)gSLCW7hk&S8cXA%-LF(C5Sk1@@p17)1W;A;dum<% zs>Aiv?JFk$nTrJdMakO(keOyM0@x&Q5Fn0wpaMX#RA%F_A~OZ3R;z3r3M z2+TT(Y=#lRu>c+*i0|iT1o00LJy(9wI2^je#6zU1H4p%`h5gZHPi11Tqi}3VG8*C##aPIWD#RPEFA|OcerCZEe ziEDHd!La}i0gCp|J;{k51xM`wS^JmOFNHvHAdwZpu>eMd%=iUl|MO>xFsbp1*F}`; zIjTZ_z3X>hqn`uBZFQtU5F?qn5G?lI5Om;+?|8|xWdBkGyz-?3Btjq&*m}&ystAq+ zFd`)J5>cCzJ_?T70SF`l*a?tqAIY~^AGhO<3s7%r8VZ3cRf^zP07GK2V8aUwMX>F| zuhq{1x?l<0C2@Tj+iJhbM1F*>A$wiZJ0c*=N_zq>f@1;nfsLm#J8r|`3Eqwh!#IF# zXkRGV*3T95<`;_N*7?#n%kf)Y2+J1%u2puuKgPC!_co>d6J+Hl#HDK;rd3M?N5z? z?mZX6uJ1n{4sdbWVQqQKWvw5G_*u~&6nZ$oi|3}COY@WCf0u}tHzo11CpnZS@^pFO zg{AzjU$biWuYXYMM1x8;Il=xhCttdP{!p3t5Fp8y%@276-uL6wytzpeo|(4c>8TSi zX(e?buc)#$Yz9_(E~nu&FL_;~YyKNSQ{2GEGxjluLCj@nM=);c&7aqB0~mI^26=F_JNFzt-N1iCfNCro1uICfs$_V}!mU&4NSbI04>-1WA{4821- z5w2D~ADbx=e5@VdN9K!gdLqd?!a^Y#-`NQm@zmxE>3I(lvC=diRxnj}^{YZ6BO>~taji_-=8CEVkgQeKDh z`2M(Yu6<9@@6Zs;N?cnuwpB;G`DD_&&=H7lCbX!W_Z0qmb{I7HA?((h%!q^C*yYvUO9-y7RON#OBYx60FBNR-e0hQs zJv+(w<(NtJmz_MbY6-_e2S95g;w2>U-GCyvaIswaB~<`}@UapAW&W%^+*~?bH+Y~T zAmYD-#D9^9FXR&vCHX3de06VX)$@D2Zv)?RzK0M{06%)MQu~`y1VP~U-Q*)LfKKL* zW99Gpuo1?XsoVvKU}>=`;W)WV0EFjGVdguW=tzrrb)&`09PI`hzuXItbQ_(F$985)WV$52BzhC~ zR8TCPlaIX+s-)HydynysDG0W(*MtM;Aihl@U*c~(IeqEs2h~@uZd6wXZTgWGz$8}6 zlsKpjS6H2nrP2)8rGvj0#=48(2+5bkUvg~yd_m_#N&%E?PHD*&1Z&BD3TW#=9CpZ; zuodC*s!zrp;?-+OejWj7M4jhj0A9I(u7hMLd(VEnC1-rI|;xsyOU2ifCDU*C(M@u2!48Q(mBK4Rd7HSvlM`h z7GF@SS|Oh*TuA`jgN{YZ2{#p+H@j5*K13q&B*M%X;Hia4dwzaA>buM%A%G%Q#bUwg z`Fo|#Kc0j@#FGmU9Eys=I{?dgB>z%*!a5H*ixDp&iJz7kpHnh^tVhNh>5M1HoY$0j zR?6x{Yb!)Y_?@vr@O}{t#79~HRHZZd?p5Cp6afxqD2d?^4zQ$a`j?RSFEZk3-AS@* zPWZeKLD!5Q>yz;yGT!K&@%xBZdr3SYrd~^k4};V?=m604y}lp$Km|}N6~QzU3*2e! z;3m^^ys-NQXOP5M#{?~tahb%!OpP#~`RO!Veo$p}3nI6=8^OX!2RuBNmaie{Hk9%j zZ0_zrUA(r1?>}WE6&-+i3g7W7r;GNl;PC8XDbMat<@t9M933XvH%Ufxu$8E>bxycx z@>5C{CHe;_xi`Ns&q%0k*E;t+q0oB0&JWOc8S$VTP_H_U#K+AmmTW6uROYdP$u%p#&3Ch(P`}e?aI9!DFR0PLXipN(rH1wtbD3m z!t}VvcumQ83-4*d(uES#-z~hSMcp&r>P|UFBqSdx(hs~8@e-2wK*mCP-MiwIJ$>NF z1uzQvDv111AsyiEPQrQ-9mWwh>+VJQwW@mw+j(>Vx^@1Ua^as~JNN4HI*H&M692b} z{L>}jBJFmEe1ari1tVU8BwxZ(#*%m#hWJj^3*uw^z(|Qm6oKl7F$zJ;X$tuXR%`D1 z?YjG|e&iF5Q~-?p(~Dr{xLrp0A-Z}1n9KAzx}AqWD4G;(jahhT;!s2CJ!r+4**0cf ztM~rN0enA#aZ#lN4-dr)JHs)z*>v=_2i3VET%0RG$-tKb{M6?bN=ZlL|lb5D! z{p9l9I#Bz$&j2h;7U1+r$G|p2lM1#EwH80L63cnMC?{VbUS_-yn`MZM7nX18X2*cl zjF-~rDu6KJzl52nQ*vIy&&=_~_gV`163f-rt>vnBnXad7v+o%mi2zjFmt^!Hye55>GrOl-eQ-cyYm8LiEG+H;Fn-*s_BxPTNXO^}BA+11H%0bC#K)2( zWVHJN*_`*eGfCoQAH>P|kqB(cct3eIAwFWn6Bfr!C<&LUq2S)Ys2dgs5FOS*l)+r&K5c%cy0MEtW|g5g$uw$;KV*S?Eose z)0r>H&l?tKnv(G-f+!kf_j)?#V?_vompY?3PTWB{fJ%Nn2%r^qCtk(Eq1t`bO zt}i9>B`jI}0MBh1as^ZSj)@Vg6@iWb?FaW`3@_2(tGNffteZmx=t-B?mK}uPH@f8%ZgU&EvVH z96%*M3unwi;wRE`3rU;|6ak$>B<)=hfnxEDbRht;dJX>q#VJ(sUA*rh-;DSmP5iK! zb*v9IoMcUJ!2E#%=$H9yoFO|irqd;cV$qsIe+j@zI~ToNE;?UC^3N0b5~>3bWWEzR z4j@Zi;{wTBe2zV&=M{tyT(?UF$pVOkT}$$*kJ|iNh(K1n%y~(EA_9#OF9on6mMUP* z&pXx##|2Oe;azlqtF!8Jhlv2&wo~M@55ZiF=^Hhj_mJ%|#oC=5`-i4!{*<`h#`V63 zy&vsGAK=^#wq6v!hnf049rM-mJt&SlW8lM&2M_iDRv+6bUfE+gS- zBP78k-z%<#Gvr04nmOr4{C9JVuR#f+nTeoujYmn;bfIY3px;Lqz}(hRWL}780!q$@ zWcN8fpIzhgLJXaZS2DeY>*SQ`7pDa-ZmotnU&lx2+vad<1;I?DrK{hI)2`YIJC~PV zU9EiO|82FtnVNvpEi70cMN56GC+{b>99R!)@2+R=46>un2A7J(!X?MDf1;q+Dm#4B zWQ|~1)@^b7wvD8Cp{sdg&X3!Byz*$)ozQ{>14R&;uvO*vpPu5RWiwwB#M_1-T8P86 z`1^DtsR%9t{=06bU8OU}Fj=({p_cM2CqE%R62$8Y`6}^Q5aEOkMtqE7(_j(pes&B- z#jTZX_Z4iHS8DF6l{3Lbw{bMl>t=_1>giZ~v7Lbe@O>Y=`VJfrm+JMMOT`IZX{rb; zVaEdJ7-3^J>ph__6ank&9zR$qf@ko6ZuAg=gd{(2@TijH(|gIaW%Xx?*DZ&g2vt8J zZYB0FE!&m?7lcP@_ABJe`BDm=5P>I%=M^8bj3(ksBjmim?d5y!*T1@2`AxiDl{blW zGp8w4&dFzciqVglBP1f|DF6+#ld_)M`hl<{FB&@y)@PkyRFDYtY7H(R@gxEgKsNK+ z3i$*gUlp7r-x|xao&>>&9{?hhTES2bL?J)!2qH?01|6hBei(O%Cs5TtS+GVv2PFP$ z%UkZh$M$t(u&(|_mG8It`$z~A`0cw`$Rq+2IW_c{kuOEi*8xZXilq+;R&7N7rOx5t zDF;CS9#*rR$?vG0UfQ-&;}N{Gz6sjtIe7ZieqouW$awLE znjpC&22K2)*$-@OFdJv`$zvp`V5H!bXqWUfxJk`rUy9_qa}>@sUl zdllBQ`ECi~yI~87Cpv0M&X)!8BjOg3kL{J!`~GSbNuRQLVVH)-$d`}~VBvRmoIp#Q zAOJ3gJ8lGT+zWaOfT~TBbpTK%y^QTOXWU^Ta2#HN&1Mq`G7lsI6;cE@wi+o1NRcnV zi0=&Si~vLh?;){!>FRy0Rf0E*i=8nEfNb3~`2Gnh`DFDJEL)=DtJqhC-OHS}NBhhT zB>fKs`B&IED(@x)7%M)$SBk)m16KLc1&D95|Be%A3HgM+4nQKH4AqTM6x;bk62VVm z`(13GNo_hv4q7*dUpp37rsC$-4&1nxh(Ho=St8?w*b)&a6hugVD2Vriq4p4DES`>9 z&3G3Nx*PE$Vq@)o>)Pvg>c8_&-TQC-CiZdw2}wTntL8xL`Y)V-$2+sbEk6n9@mG>whmV}8}P}q z3;cr(zBU*lH1nPdn1$iYrEbxB>$^O{#SAMzLPUM)$5>`13WGp_uw&7Ew-1e19YmN#_fQq zl*V^3^RM1Z3wWRa*rq)%iG$1s$EbR$XtH&(cY?Hd(UTK=xrG*+ALAkz3IlY(1keqF z_)edNB%ZKa$L|pb;x#(AiG0E&_2Pu?jF$nnd++DZKH$$>t++kOAAnoS_uR{G-D~`p zwfo+i-6l{K2SPA`0M>lw%i>l?!!`2&h9#+1r$E!cLrnO2|K`Y((JiHlW({;hrZB zd$$G7gpO-c*5{!hK7Qp+9iA9PYY@yu$a0q;Z(yz0-uGr9{u zKVG4SZ>{+DZ(+Mq+iIG?!DHHq~uYc5Rmsd_?Fsm7L@s_;k<9SOqZ zm>pUeK%^XafCs+lZLn+V7rjkbLGq_;4W2Gq1JCMe#f2+=8CD`*Fx0=gTfBvrzmDw+ z-LsAKx8#*E`z<+&p&US>pY5v{NdPkwW`_L1C_AZx`VzLEQEx;U0W`h-f+F%yD*~vA z=_}u_!aLYLJ5xwMpjta#M_tw=;#1=&nMI^ilc1`fw)LUEUy|P$2YIr3M*cHqi&ec! zdP^D8Z%!`xZ5Rh23`;&?Bmq1>vQ*Tl3{FWjH zICI1fFbesEp#^Yp+QGcF;LWv-p%>>L!MdgA7s~&vG-3aMzvrWRlf#X2?eqhA%66=5 zw9j`cb@eA-k120r77Z~n%X59_<}Nc zfj-8oBid_WBPHkHZLEH3sXbuzlK^^Q!7<^qV%Z!waSM!~0K2**v!0Sj@ zY;x$l`Tdjb7B(V$^=dV^jBQoizkv!yc{4eIRk2->2V^jsDx+HFbdcb5e(x1L_D>-%^2!oe>w(Xpa7nk zwqZ*-=)m(wS>IkP*`KsCZ*2KKbR2behlyI(u=00esN$>C+_!Q5FMMJSKKVp}jWuE6 zaXT#r!mNP~67sjTM5X82{LowC6R4nk#Rb%BI^g_R+LT*D9lFNjf|??jTd%)g``xmo zU;g>CMOdkMu+idq>{~W83#HUro%+s3Lq^GdPjiDD_b!W-YQmlb=QSE z9ti+oCpaME84MJ_xsn4*CzGmg?3tsiZ#$+opS_v4EGB|1sPezDk*@qtJTciJpAnJc zB#;ndk>7+lo+KUOC0ZGikc4N6m(@NbZY@{c%hcZZz`Y`Gk^qV}7m($9>97ak03=}A zH}&F`g~09llJYoyROm7C3IA*Jh*(!(jQT)9WcHBAJElJ0>qk$q#BR3#3`Wl{ej@!i zRU%bRHxYE!&4|ELh7lZ!_zIH#7uddntwa1XC7Y42f*c@=eGUNq1yE`F&_EX;0o*=B z&i6xK0odZ#)$L@1K{R{>OpcjnpPeps6#$V>jgE=Pr>26)|JffXcU@PC07MiJ=EwGv z@5OOv9v=fZA~r@O9@cmKKl#?C`-j)I>R+QHQGX-yvjXVr0MZ56$Dpg4PFE2uZ#Q9O z7ak}E3gDAd1t{hd+qb$XyAMvAx;`E$B!)0Ku>fNK@^7Peo#zU8iZ_>Q8< z*C4UkNaieB^`c|LwW??(4avQloa%^(7aTvqs14kWV;( z&36M;{OWV39C)`DLCyEUR@U4=tKMh@u!*f`>-`--AddH2`o?`ci*@g?dmRY_1yF0I zl{o5II%aqAOi$+d`r;s@2%ejn?2w-Yi6P2VD3M=QzCx03X;N^9BVSbiSFYa^4uuXv z-X0h z-k;;}&+GU)+c5DgxCpge3;|slavhC10JUpX7d+uWy&NED2N2^QJ_fbz8oayl;gJu6 z1VDNE&DHvdo{>Uhu3+yy{X}V^-=sp`VoknN7bL1#u7b!{Z9i`u{vej`xtEu>+{@qI za{oIH-(Q^UE_4!EkTE23fDLp?ih!c6_jdrXS4RH#-aY)r4~Zi;vb!7w6_`5k4P+Q~&w)&rQzRDUlK^>Pn^jrSU@>u=nx|3@8k z62R&xA4M)@C8@+5;QDsD-g`Mft?|(zpD@q?8c2k#kZzCuhVW*!4h=s*QgiU^Y%%q- z-eU(+2(q8TehLRgJqBNyr)ECEBI2=0e!O(%-+Fz$_VsHO_YXGQ;JdSqdC$h@HA4e8 zOy)UQsdYu?am;PsF?H}`K92-Sdn=9e@eAWNytf;{s-K)t$!mdSad&7on^37#pi=vA zGk;_O5L_km^!7;W@8WTM7yE_H9T%?Mt$>Axy>zND(jpg4AFH1qv`RiBd2qGEjqTR0 z8`~aP{N+F0sQ(4__eMP^B42eFDNF(pPq>49J>sEMZ+X~k2u^Uq8Tt1qZ(g71( zoQUA`gw8~8XEz29xBv)D1m9hLz(;&I3>1KiA6m8!wm8}(oyPmw`@KY9#t}M9gyaX1 zkA(-@9ecL&YNPfq zSMGbiL*wU+jjmfWH4VH-2YUz)#Hrwg5loKh;CV6MjxeQnb^*S*^=Oh$7%Bo9DExwc zuoqzA{BP`TV>_qb-$3Rznm)8bev(oEhs8>*McwQ4-!ny2*VfS;7KuROP7^J^MJ+zM z7kmgXMtwjZT?pTUE&@?AyORxwV{D(NkJjcCE*y$JM zOcZNct$9O-%_eu5w?0PX6NYkt9VDQEt$?##Fh_d9-wNNQeo4fGMY5;Y^V&fkw@ocFioW2`jxa`jzyW{gxh_}+lK*QzT!f`{ti1Ihs!x*dVeiEW@e-2wF1XTawr)d4PkNlV z1)*V=Sevh}^%X%4#Yv=J-|`N3!XI%A6hILp(t)HTqY)M_f_M6~4S(mE=^{)uebBd? zu(6x`?u9xwe%%Ur+Z5xsF}mNzxo>X;P?#)0p}<>3eL)Vz(C!d?6YW221*+-eezlBX zJWlBP#4IdM&%)iUyLbu~N|paysW)Jy=D`LkaMMeR=i`Wh0&p^v+XE!vDJ4kNfAQq_ zJYAQ^Ex3rinFF}9lT_8rgq?c6L%a~m{M7TOqG1DS}x=02@0kBtG9E|C18{L6-bn*G&=m zs|VevDuBlgeFZR&+}RL}w4i2p9N#!$*({(Q z0HZp*uwabCUm*1aa{r3hwi zJ@w4D?*m-D&#x`p8v0$IG5zY2Zhvp24JwgD0`S5kIK@X8Jq0i&cyKIhv=u{^!AsfO zQUpsUPyqR~03`XJ#^0KzKJ=^ZM*5pU;MPalU&;Y?4t;=+I=TvA$^@wT!U24LqyAff8*XHNc*$JyZ@}>L2I{u)aUugVPFK{ zk&U<_Bm7*ipC`xC*3hU|VX`;{1tNb0T+F%DojT};f4*$PZ+sUXd-RNeL*Q($A8bR1 z!kB&}8y5n2_S!v<6gqSaMD67IbEjiWJ0LTLbB@*B0rEzg z{Kj4cJM}tqfKjpBcHknow~N zlmj#{k87a~#S`V>859{F85*<<`{bLOUWt~HKYQV52Vg(u>M;gQa4f6;gfMe_x;}C) zmrj-ry8rTG(VkRq_|fnW->yB*)N>3Jfb08xe>dByp$@sIZ0W=0{I@E>fj7Pq=JEf! z`@&+WdeAkltk%HWe7r@lPXOrB&`>zHw7BmALE3WjW-j`{UIIAn?7v?u6%V}mmC#^T!U*MF1XJ=(NI9Thm5aA%=Fmmx=|$?p)5==|{gGM3B>S={2%?%Z#;l z;_znIP->QGe$Ntg5 zKsw*`Pz108C?fc53D(|3E_TA`uOiHJY_}}iS{39U32;U|w0Sd$+JZ?;G}~u>TVhz-No_?rULm_t0OFt^CaRnEc)t zn$CI%;A1|Y&fISs{Vl-@W0{%|-DGoy+i z;{ZnwJv}@oe|Q|YG)V;Sp$Ky5=;;QjMwqfSPLlBezCdPvn>Wh*WAcZ`p}e_CPT&om zSM?rF>>p?T=s0vZ?}URzz#QNKdno#yAxFX2jBp3ocTuq3${Qu(MKmY&$007AU bwG3JqyTvT_u)5_P0W5d`MfxlTv@AFlRB_QM3y|fcl9UrCW#`Lss+=m) zPRaR^{K>!k%14<}oH(`|yT~JJ{Q~ zotxR2&HK(w@AS;ge$3$@d>GGFUr+b+cK5u`^FD6|9^;-u%K|)APzPhV?|>o+*hI+5 zB2=`3H-Dwkg66gv`R(&_8fZD$d)93W%1RC{-MRyY?Luiv0u_HxsCWF|y|=DI%}jSc z;eH3`QN~BEYnLmYsnV*(Yo%2`#_XwvBO~La; z^`7l-*pAm&_A{KGQ&WlHu>kfFO4iSMBELK(-_x^HEFmRThVrzs>s=ZVWbaF)9w8_} z1fSA;B8pi*rz~(l&Wey1aohv1m-|lo14O^hgALI2#+dy*7gRwEm*AP+9QF>l-rPyN zkBp0JF^7obu>kH8MEu!fn)h7QO=w_~viH_l)nI?4=isv#nPVs@A{6FCaMm4I>DWW} zdMtoFf~>xb?TB`7tv(5q?MZWLg7A(6rC^u{9t$8P81eVI#*YFKO_|TK-*b>qh{T$v12{Q=kimQO0i;Z@f1nF0RU-b?I?+2m7Qh7f{P7Yz zeMp5Xw+*cEoqgZG-tNYy&YmpJoO`;MKjFG?4aeuPRf9GXG7@e(yXOmv2!%NjtaS(0 zI45{4fDt%#XbPU1osP`e$cQ8e`+5#JKz+;0%omXOzlp?q1lrKC# zU--f^hqV&_t`d|U1PS7VmJ^?^wT$0J@_z@%H7WrO!y2sbXM8cp!8P54^LPitmmF9c?C4&TntF|a&p^(c}?~9DaaD6rF8(R?b)D5hZZkL6|g@2iq*R8a`3+S{n}b-f>aH)VfTzTzsec)i+y+U+~9;8cyRVWd-^H0E*Yu=Z#Q;MCjd!3S+WIXBM8Gnh&-}q=RN_IL}u_o1B6d0*(Dte-* zo|Do6&Q=QQOY<}8x%qr}H%2_c%k;iaJP$^=LgEVuR01Ii!B~u$!BQ!Ic6p=yIzC?E zujr1skY09egugiOmabS%G? z^2pIY!3Mo+`vuy$P!1 zKdX`mwu>3glb-bnX11TfUJ7iU>|W%EXIUTl0`zz>nD|67|LMOdbBA-WImY{9jy#sJqM5}-Ca9;TvNd7UJIC?OL7B56HTnQpfjPO^G{7!^W)eD z2O!m*MdE)Ei9d(Uo79xu_hIBmi4T$EN9eYwN7AM6 ze$3*texT*J#nU}G%Cgz8#uGAPIQGcxhgmOXq82|Y^I^yGn_xq|*;?G%GQH`oG4Xxi z1wh1W2a-Qq#^5<3)2=|At0Ur@a)N(vwm&qIx6J%O+DGWX1gXOLpq zK9+a_BYy}M3%Nz=uvJAVH*%{7P5@NrH6;v~6-ZnbvByBVqMv0D^emVvl46))P)aj0 zIDH4CAYmE#PCrb+ZqEb_33k9;EULM4pPVnes7T@o5(|$RDP(2(fKNVO;|WqQ&IbL! z&heg+njWlYb7T?Xq`@Jpw;iwSF^ED`)a!ofhv{5yqAedN0nATHP@3|?!D?+1x|jhu zIhut$`QWR6F?ha;?ZY8k(V7bBl-7b2MSt+8%R$65iHIhRL?COR9{>?q=Un;M9T!pRV{JSUjBn5p2-9(}I>^4t_`E^Tdk*!At}~@LCb0 z#1DFA=iHU}I`8o0j|xDL@kzzc98wWC@x_V}zSM2kXc*S3_*kDb?t2yhk-sp%0R8@6 zcZls5kWb*rX5hz`vnwJ*{EIJ~ES>v!>Cg!h0O7xV`vz>8E-cRGNdVqlK~=mq5JAHI zc?VEp_lS@mBc7gviV@cNNr)%d(Q3_Hz)rXy5#RKh3uf$9!?3@bChmI@03&}tk=6kM z5op+c0kfaTKf%^g=Chu}P~B|9Sy&i|fDjSE5Ref1K~Cm^vsret8t-K|FM`a3R!{f$ zYP^&9t#Nqvk7eegj^z>0Lz4uks4|s;4_>Gg>S^MhS^!k@wOMWO%h^H!nyn_-wt@8# zpxaBkqmSVZ;78IGWN`aoHlYY8>tFtfrG=lGn^DBMyyDI0lzF*9`N+daJvcChpm^nO{Cyj?5AH`+;!|5X0H0W@lbT zYd^7A470k7B5>Sj_Sl#$l|%lTTB{AKoi6;$Qs`bY!jJ-s$REJK_I&awvx!_rJP&cw zk0iS{qgEf|a~FmYUqlNk9uQ%6DsuYGk}BD0;y$qe?uG47<^T~qiS0L${Bwi4?)tL4z0`Rgtk$!A81ZY{yA^VBMuOP` zyH70Tq?>9a-MvKhzJ4;WiIgfDG9#zy*0SH zvE_}IG!<>0tlovTBfxe)x|cj6o^s#_W67U@c!psaPoS)SIxi31Yx(x}O=CM<4IV3i zc+ID=VHjBRZLF0NlGt3X5_XMIhX9;FmsCf&cNH8hjIlaP)`EP(D0`L<(T;*wDq_AHZ*QIAVk# z>v<<&7)pLn=i>#&cB2l>k2XytemlYL6|{Q=?H=2%6MKUbsY8Kc`a1ygcvG-VYbgQUsctC81@4L z2MF=vd_jHjGsh2~paGFjC~&opo+T+793r1hk$t-uQ#In_t|x*)kTVXibk3}S7Wo5;C?gqj1 z>Rhn%R%gq5mJi5~Q*zJ}bU$Xc>CM|&pP+IU$F6yHdZF?gpDImN7J{s#%;P^w!SjUR zH!Aiv)FEFDQjAK7pF&t>@V2joH5)xm+Z!3}Ak0P-bb(42D&39{ey06skn6J={OeZQt zCuT09;0_mnnp2^2tTOa$BA$tWjZ06I_$7-$UmfuYNub}osLsy6q^VNmMN##IIIHHo zUI1%AK7o<11Y;@SUKWSfO5I(GYB;6*}MlX$SG=4J7|dNPfg+ z2O`M$H()Wjv*X9Za{S)x`4S}ZzkYLj9|YjzEVlEN#R|OenHNT{jDH};hOeQHtQzMB}eYb@)Ro2@@ZBD+=~>Z~ARLWEx=WnC&J0EFqTJ#omw7 z^^WTGOau(2fOwN5pTK8)ocM9%PXcR1bs(#6F zf9HFRe}~TlyC*_f_EVq5nDGvvN|KlPw2q#60aRn;6ZS&@)u5eV6TAo(o>%};OrL8^ z1cPVuu4(ziH)6yS zPR>ZMke+xz;=gfe)A+CNZyMjkq0YZ!_8xbDk|KEy&~Yq}cq`_DME=)f+652v=-*o3y;hGw$~x*H z4#1o$;|KfRsc_#(k0Odd7-Fm9C;{wPUfaTqT2@MfX(J;+!QF!GfL|pW7VuTP6S>x3 zG{f>Vi+3wx)<2zO_X&vU=Gs>;*MFm?TYspV?hP0eIX|j|r$)z!yrZn2O`rAGma)da z@|m`VNgi`f3e|NaZEx%{^%^LktYXX)6cWp5Kb~E`0@7!v`FMnbI z$&b!kfp+OmqOj{{8%X>+%bUi_*j}dzO%Xtk*#fKQL^##=BnL<&WDNO)T>`NCw)ZGx zf=z=DaPbmo^B7P+q)t$G+54c*lL)?O+jbSpz<(HaX#G}w=!HhTn*`!G0W;#gXZluY z?4GNc8EzD2{94zAOGx}Xx3&_0x4GlMv>z8QQypw_pvYCjx_ohC`?tRJ{no2N+&sj| zhY1~^q)5I4c;7U<=Esp8_QLH47hx%cdT{Yi4lIUEo7{RE562owQ~%MmT%zLd;_pt6 zJh2xYD!XptpO6KdU>M_<(vT8bPgOYW@2(O_#m6NjmUZ@5PWza8=k?8zbsFC z!&*;)3P*}=`0FbNCAjT6@cY*{B6n?>;TKS{yxG&d=g(kRXqT40zVT+$dgHC8^;-7TmBhBM)6mq&uT7%GG%O7L<`ZY{wUR9JOo_D!t}_c)ypSb|)0i zUz_J$0^nlXZ+|*nfHO+h6Tq9M@+aM<^?OME8?nUB5-0SI(A6Og5o>NyLxm@Wk!NZJ}Q9P9n)(^ zrgEMD5=B6nWbUrniNtew)@{Q7W@jVujC@9Xcn3Q%ZjAhkSQ*aDcD=cOt7}B~zxn1> z<4qc$DJGX5MlK`VyWa>0;6;FCB^CLEkpdt)S(?qm(&0Sp5kK3t%@+p2%Zp&fEZ;P{ zk#XJJy~(ibCjtEU#}aIxh_|i8-!Ssspyx$n({r%b-?pxJeZjmQaRBtBu^-LIKRpw1 zoEvYMxf|ntyH^Jw@-J>|rzU8m06tNg0yXPEt<{=%!>R1xQi}_k`cGzZQw17qdC|pM z?uH?0?_kZE3dyY-4w%z<5Vt#^^nzNe6=1#~K{@a5%MzN(vWX-b2ChBezw`d1z#Q(3 zc#U_t?6+_aH|`oee|`~~VBuO@(cl@RQO)_p^HS{gLh;HO5eiuazC8UrTzvDZu=FFR zL49HYOvV4*yYIjI2j;CC--p?XH-4)}?z9aj@$R|438ed+EF-Bf(gEDQpF~+f_P(Xw zF=2Jvf$!Y5Q#}BuxJOjhm}pUqbR3>bL6W*Ke(#k47G)G%Z6D4{BxP03*Ms%5a1upFs(x zJONm{KR${0IP8QHU~%q{1bO#WBKXGlTNfIJ^@pYMJbkP%a2Fu!e+l~&Y$DG^j(vdd05Y`D0Vw;at$QxuryG$! zi|uGWx;b+IUI;vR^4-3>tHwK-s0iq^VZ=+B!F7g#Sfl#*C)B>Ns{cvD)Ynh|=g|pX z#8$o9bt&^h@=YVgK=dQVIlxC92i{uWz8ii<3!tJYP{`%*V1Hbc(urYK%RN_A)W4!( zJ@h{)n&nD1WTd^_1$_%^AKF?YGXr%+hWvCu4z^DmLK0ld3&a3eYgHu0z-_3X!(&Wy zcOEcfh}U>KMmA4Ay(7})O!&?XiUzv_FW~i#`ITH2{yje4G%TxEo|5rf09NkUNPOd8 z;;$?RYrTXd%Z%u$@b{*T_YThQ26H*A@mX|9s_*P9a)1>~jupd%m2Gz)Xb%w)0M)va zMb&Ez&9;?hzxh*h+CMGNC}lPwB4Ke$CJ_1UZ6YoMt33(UdeM^e6kcHwo9Kvx;PbY~ zpb5#uGeX7qe6XJ1iV@Gqmxbs)NmyBH{q942rCPX_=k~s2_%p zIu=}Q-#hXNyRQFqaSY+3cUZty9=4Q(Ky{gA|5n#T0VI>ZIKefT0J>a!+?b`uYdj;K zbVW^=Ahvl~gtq0Zt!>*EF5Yba9tz;~_?r5*mE;1u96-#tp7ne7k5IC^oq&j6>DXQ~ z)3K2n5&D#@1U0>rY6E3pvdDa1IU0|s?N##-t%mLgY)6Euork892R;Nxr%b3|AuR+q zV?N4umAM+cfNL@_0>vQftyrxe)OS>bfW4UUH+6<&Jgp-->s`BRSoYUnt+oF6s&4+V zka4c}TnDCQpKPkr3yR{2#N_VABjNxoZU+>wEDKcAkB51v46C=>VBc;+&9FeX?_JjO zhzOuOErH&()9ui+c>x?7wY0U>_4?|LfK7z!*c2&zUr`)5IR!AAkVwSSu#h<13(7Mq z<^p_u_lS>SNF{+y)7rSw>VD;GH}wCE!|OChWyr8?u+U2Q@-zy(1AyblOOhn8?J#yk z{#py0ey?*rikJXoIQ3*9-40>2kCpSep#mWCTOAXcmN+1v2a*3m!5(BjgBXxXh>M_< z^~rbmn$LnBBYrQqs&9W4$^W&;=OXcvAVkP-?>LY@FkB2#2MEn-VZW07$-$4PkILbb+SKJQo>Bl^0L5T> zjduXHL)#i{*GUfG&C@=2?jQMthyW_n3JNk^?Xjf6`bDgPni8{bC8+Q@DF-`B2HxFK zuvUg=l(Rnh&(8#NG1A0-j3``R#P+nmt)~o^bAW80tMPB3_FAS;gX@SIFL*l>m{-$vrht+N`zQWI7asa*zi~_6m zUdG#gkDt*O2_`u-~Yd&2jSEI}YRz3>O1)0BS1!`I&$J z$tUa*z>yGd--#nWa2fdO_U@SodM1Cc~oaD)pFaq`y%*$@I z)m}d7P0#kJIovBTXni484FfqcI0eju+=GAoruH0(F(;v$ZT_g&AKt%j=TxURtGh{s@pD-JU zK)j0&X2id@;n#SYD=5ipS+*1T1PR4PXPY=@;=2M0W2YDWO+KIe?W=364;=Y~T>_x= zQnJFt8<@Q?~Cl9l# zMAjnv0BJL(@$X{;pLl1|-;)Cn`MeV_2Vf!~e7j-5 z+O}6gJmV*_iFCq7>%kX-0~k*B3FX0dj%* z_yS1eJNT;{^%?BZvFLp+xYAA^;KI5IwT`{(Gt38^c!pj1W#LCzT#jV>lW&F@w}Rz# z8y^ogw@rBa#yVJmKzI?10+Ii;viA>S#J_*bukqaorRm^heh>>Yu>On~`qYJWBa!@v z3A+Sf_x;Shj2dXiJEVkFoy`Vb=CL1Ns#FMxpj zU&Z!yhzam+Kn{QsfG+mr06JE;_jKo>&w3ua9RO>cBSdUH4Q>k-)MObdgPERh!Ohz` zY~g8k!1s?o>AQiDiEbc!>q8f?V>RB6(Oc`7u<9z;ZslhF=8J08RY9A{R4BNVT7V?Z0DtA^xJi9j(Qi+ZN1D$;q4a z96$IY@Mg>J7jpntObM=<{$6&e0*=x0M8FGSFYxYxlBuHQSCRPZj~Mxc#1g=ZKoV2# zh)II~sa5X9g^Bn#k=M7dozVsv{xW+n7``$bRr4ndW6x)i2&?*|OFkhx>_st1PBZO} zBHS4Es&1H2IjHREqSaOxUcaHkYrV2JJ`?c!s;-{L?sc}#RSS{dxekih+?xm*=A%tM zAyEK|D1qLaH1(qrk+RYbcKz^e7(69mOSc~#*9-^Bs1dX0|L)7mk3*x;faUKk<0uE^ zXUZ^tcphXm@4eTnm%mf5*N5CK2Z~kzWxEARSBD%nF&h(M5k zkSKsQ); z8FmR^CM!Tb8nK>0c>R7Nc!akeZ7R*kC!Ef(4u-dlavMmI} z`{2osV{3cs4NcQ-^K+R@Cb9+{A~J4h3n+j#l=L-k%=J;OmBHXAgwY!) zoC7EV{L1NB_4ujT0vuMl;P!N=bAdH_A+b*1g>KJ;_34T?{z`QfE^YW^%`eQu!omV9 zJh=dZD}ce-y4W9B_%)?o|Fc$h@{&R*_VGRka`2AhJITuW3Yfk775@8=hyYaKuJ&4d zMw8B+p7ZPN!gLN`4&ePw9cp^C?rKW3Y!jO37!Y(01#p6YMIxA;2Dos;7Xh`;9TOu0xYTHSU#vN7r;EBZ9F}zt+C`zGwe$_moukHSM5k^voYz zlpkOW1VH3_0?4M@pcm9oujY>diQveTxF7efsW3x@rq*cg#~mIC4Cr1C z?77iNml=w`!{XYsdE)e30c0#CmYck`6eGX3Wx@K5I?Nrbq&m~stY0%W*S+Vp)DB=g z766AxzLN+_*}ZMFhQhhH-h$^)1O;ih2zXpr_v?2#r2r7;(E+@Ny*R*y?_J%O;5`b+ zvivzYy|)bl2RK3h46LhHS}j;m6>NS<==c4sFW|ZYC%KC)2fk%0pnd!qC|8~ty1y9X zSG@l2)uygr9!&Jo-M6mm_dco*5wiQV&mwzRGr|(WL_i={;BirRy#D0LlWEWTsH7?% zv4PNYQvJC8nEwbo0nFtDsBim$%n4%ZP0$5SXk01gMKC{=^Rk}@Wj_2YEhgSuhCpMLOI06aValye~w`2$MYJxpFmifavCG`B3!r7m=5LIwQ3`xIPR zeG7i*$s@3I<}pA6H@PROarJ46G2fC_wBN? zJp;=5+>i2e&KNG^a;|lB_|EO^eY?}cj)4HmQ$A5d3T6NC32Zm-SI{0MWR+}4K0#CDw0kT@MuIzd6mf46MPLSLNLpz2urD8hdRFu1 zr1)-`;RkI2-c8XCUc6jCz~;=B&{p9EObXimM{o?eod05rk z-gE9iZsc#`4s+q7#(u}}p@!!GC9Y1JJt58Sry*VfV%U$&4+Y@K^FwU41ugH*iPC7v zD*GI;M-5pkHlZo0JOIbd-azbo9f{x{qX>Szq{1iJI~0W17%uBL z*6fir-|U$in;V-SHaD9d>CM~C{|7FT9^Au`BoM{$SB~RE#&Oubwqd=s1a7Z|nCnz7IUI!(NaGPGK+$u@ypA7(9zv5$v9w z^z&+?>-?(=_3qad1wM`A_oyiu=g&>saa(sidsx($W~7J{xVn;P)u`E`*PvOHGh90j9WlX z(AaSj-^Io7g8=UUk8A$jBRk0=62TJoyb~mW%l>-?-T@xh{JV!R=|U1g-As7V7sG}) zkd?gFMRTC#IeaE$K=vBV*`p5XdyDmkp&qjOTXk_1KqN9Gq|X0?@M;nuKZEn1;RB-s zrfITwJkLYvsRnl+DVH7gsli?5WZA1(Mm`bG$VU+QK}eEx>4z9JCy8McNFY%(Pn+H~ z32GEXQDlS?G+kpNAS{Z5$Gc-$EC7chGl|D1kIHT-ZcDxd3wlPGllLiG3lQ;8FzOkv{-m zQ1a)niRc_u3%0QgET@vGU&QO>TpsHXlJ5>oID*bx$rL{;fA)6$tp0mQWR1$13vvL~ zpJ|}YCg8PHcrlOs09+C594la0Kfgd+SOANQi%=*Q{0Cj%T1ojv*9?ikv`o-V44&aW zp(;ed7*8mYOyek^r)>A#UXMN3Gz|o&6wJ)bu=>rmWA$Vl_p&s{O452hpa13b)m#Bh zm^Pi3BK~@H`8J;?}ntPfv=<)B4*egnjp&+EGDH$WTH3FNdojn>!d6?;Dgy zCdGvLa}&YT0vKicE?k?u%rekwwIG>H(&d`-=#?arol0j|-Cn+)F9t0f;t@73j*ZOK z`3+}{x9X2;@6tmee;9~-w+tAZzaJT$OvOHfPC%_xIRXXG_aZTs0L~*{6h$wiF6aO; zuk_u@rKP2pu`i@jDH1?In#(MQz6g|{=LrHEgI2$n%!!SU``l}l{qtmePekSFu-m|c-V{e{m z!0{4TJ!>s_CB2Go*A|u**D_Z#zmUu23SwN$;j@o>yk1^f{h1Dj`5k<;PiIkZNm8YV-h{vhic0amYr7QX%E*S4K^%;H_c)VuoN8La0UAQy5%3iq?D z=OLTkSXo{9_WOVRKHa|!Ps)&+34cp5h{lGX;^!{$7B2#4+Gi{*6`;{(~=YFo( zxC1@gk4T2^*(AGUM|&2mIaVLnsi~T_l}=|F*_q6I5$D?&wJskeKI#BgM08wKaJ|tE z5cpn_1kk$1FtSI2901#|=bF9%YG=4VqZ29v2IorJ767%N1BgA}!I%ij&sPLvIly@} zKV)%{9uK{)o~r+OZZY>?$Vn1HBJo^LGy!;y2T2qd@q~mV;<0DH1W^DLgk7RtGgrhYx@SZYSL_-jebYTXwZAN4c78I@Ci&}Ljav#xe&wJlJ z-nrXZJS`=)xttxV)7s-oqw{-s`Cqw%nrHrb8>R?~ZXeK$3#{=m-rGyCbd(NCpePDl zHpX&*qjJe7gqw5)iDd+e0F`_KD=V2xKSUI+Wy`YUNqm@%530=&Jfk(>Sr9&-aVeEf zYT%Ji-L;kZ%$wzt206jo^dQ3<-UlUP4s^+$*ouq5VYv%BMNj~RwZd}|0YA>5nHfKL zTx`M>xcJ{y+nqP)QkG}otla@QnetzAz0sdXUYk9i39|04W!af6#L+V67}1%`93x*8 zWK$pd5ZS6t%MA-)+0UEjt zHN_HfJ$v$)V{L*GR2el_u60tyDNrBpGhD0zfF1co3 z9Fg)QUCDrA^k>M*LS_TIH`y7w+W&){(J+PK=S1=;`-2YPfu^)AT92`Q(SyqX=Bgvf^p zGJCxjd4#dhtR6jS9v}US)^X)OGvcsNuB!l>ITFDyy}w)j77lqgI9|YH2xh&XJU;1t zPJnJhI4E7r3HWgakvdJxT+^vjJq-G|4LI1uPySwTE`mIlL_wUwOG|lJUYuvOn_3*} zbv#tF!&b?2VZzU&KNiXG=y)#HZ`p3}*%@NPSJ2uToSmJ4VHlt^6;L}W7-%tPr_DPv zbE$b0z^}f%Aj7kc0ptSdS#fUj*Z=<4Q&+AO@$>!Gvu97wdNDgr?*8!Fa|1^l?ta|Z zxkyL}kkA=v?dK{0xBl80XQGW-<2TEC2@mrh2L(XH6AJ5_urQwiQ5a=J&sP9F++#?z zmLpvEJqmz=-|co8(WlQ&LF;IsJXKi#Onqh(-!)hRPJo$YY8FNCI(?r6Ehqr!F5Sqc z(&?`+udQx0m1p%6rCG)pnQm-oZ6e)u16K%9@;woVD1w>kMKD$g;Nv`&ezzEM6D`15 z5aW9RojEnDRyhW36NA`J!MtNDZBA)8+WF)3rQ-v>Aov9{#^(kTpx#0W#&{^~FP%8ViW1orm#-lh0b z!U()zJ8q!%yFHsfF0gUz8pUQv24tiR@ChC&k1C*@Y7_A@mIK7&L7l`VS^yJh3lH!g z4SILIa2>9suCVKwnHknw=hXB*3y_r9I9lb$E*F<>G%9WPgn}%Qd?BUkHX;O13 zm=R}SR+?q~!qo-VtH+1%tgXY!dCzm*S@s{YydTE`zB!(_9p zP$?n-kSM6d(9(K=DD)ghr1;T#je27ue&Q32zGR%#PGDtu<+;so2e1FRs;YkP#FEG! z2XaCVU5la^dQTbZf~py1aeM8g**Bj`;c>;7aF04!0wVg^1p19R0|D)2oXRO~zRHZchy5&FJkLoi#qr zdjc4QL_EA6C))dyWjVAT_dd8EP1Qg-RY2EG&<$H~G1Fc@<^-yIiuaNPZ9WMKq#=m{ zRXZBYXKbQ$OJ_Y2ys@>t_1~du+}_>YeQWpA-FF9_*NXdDFU?6{p7{wtB31F1kutz1 zc&I$8fOe{lM)%4AEoKuSog zv7pX|vy%isrNV8dL$ubm=Z*S_qaQGPXxUiL^O-bM8wz_?ecAwBX+Soe@x});J0T@< zH@0uwcJDnA1i-~Pu)0==bY0i`&PL^c@NnicI?j5golWkV(GoEUNDS4dZuZ-K9*^kS|0s|MuoZuF{YU@T&fT4VRy(c@ z6hTOw1CY65uQf~rV+kN8h+tPX%rJh!AXs4!=OdQhIBmeu(GleHc_{6pQHYTYwv3VU z3xYpBl}uqqxivdAaJ+VE$MNXV5$jv+R_J{?9nM(YjHG-ld@J_+2PXcwNX^pbe6m-r zuRsCMNzUgwkZy(Tn`Fqv>^ZQ6Y<%OFzVV-?ucV*-;UE0rJNRfnX#dgk)4U>tom!JL z$VeIB6FgKNRhVl8@r7`J>T%V(&abYF97}cEyT$<0q1}3CBb>1f<;1&IlscGBy`*3e zny1asc&hQ)h3uuAOT@%^oSxxbbcH51_dF$?n_O_M>HV z)IB)UxG{RT_b~K2HqJrhq@NX&I)H9*OW6GoTVap`@L(%?ad8pyi+Rwx8Wh$y{k0`A z6tGcso1m%&HlNgJ`6wThSYN4D`o2vjlhA6kVDpttPXv5S7`YxFb%2^?mw4gH4dUqfj?tJNA> zW>H~zif5dQd&{uoAz zU<5K(?2_b)V59(&NPZscRw!%d!Wo!|+y@no_32wFIrBf(>a~K}Q6qFX0kr(dl@kSG z@fd8P1EgId1Bz}uYrvUt#;#9lCs41UrT6T>YnsN|($W&-a=8#iE=mtdOpKB!_1Pvh zBE!HR3BX%dh=wSfV!UOah<8q=bH3OGQ9%87*m}~86xHLv6qUmz92t^4cOuNs&;MO? z8SCD?d+^b{kN$O|)o8;6(9Sf-q%*9QN~PffAo75=c_1nd*uipAK=klR(X8dg0{eAaee0R72Qh~ZZ z1-^yt&0rwp&UhjqR324e>7^wm0;3zUK$i9OC-u-XBHtx1w_s;~tyT*;fuh&~qD*(m zr*B;0&~uLCz_P5q{qRniH+vTe3A*J>qR(@MxbL7TbW>?Y2oHz|z&$640A1kMPM)4j zB!HIUm&-z-FjxST{i&3li>4K+ZPqy}#8^hX8GTGHKDCt$M4eeXPsDAKoX-CD0!s}#+t zr8#i=R66aw;bRd+^5@REjO`WohI8ggrjpDF8qE_V(pRCt`HEs0h9yJb1u%4@Z{o(& z2ADC^vu+~J&mF4CnCRR_``qn z|Ndx{zAg_GXliWJu~bL^gRFKC7>UmmFI!#03GOrZo)9E4b0q`H6@`88lCNPoa<83W zvX+_^r#|QA<|YUZu|>SLiBGZhg9#KQpXb6Eg?=<}Ze7<0Juct8d2^yYN^yVf-~Qiz z`^5+#h|Cqco*jH%nd*BY*)WWdebY0yrn`vRcwwagrE&?Br>%kHv%O_97@+a?QCKao zJ|(9Z@!tNB+~VezKk!WRL`dj#JFIt|%0-Z1Q@2H6k~?8i(0QYxCzKD%W$WCU9LD3y zcqK!$T4PD{T{CA-%x* z4}bC@>jw*f1nAbDxHTz94Q$>=biv2$O><~>%~Sh8*{j#^WgN4%G2X0}vnOnB&1E$l ze^$>~4z-X@rD1V#ap*MpeE3~7;}df}LEBr~kiKdYoL|h@{X*6g59>v{e)EF8CvhfR zLfnk^a2mc1x)wo+-1otW-?jN``fIPfb|%e8ld%)`h4sC6zc*L_&6a{{x0O4j_Kbum ziVv|{ckd}vXE9*-9AqbO^^-be=d(~b8czU}rHX=e{G?y;=__eg->F|(Tw<9zDK=l( zX8oL;V8pw~FD-}0QNShHFCPy7z>AJEbthYQXJ^N|p0J+pJ8dew|HJoLKePlin>H~f z7n^DUB0C5JEiU+s$S0_31C&O6tT_vX0#s&dpf;PJw(Rmjq!ZRw)|lN&()k&&zHZxh z5&M+$Jz;D62Bah3E4WTRpY!fJXC@>90>E7IuBdkN=yGb?&w4HphWnr12d!m~zxT6y ztpDh5K4SgNFWnp}fStd&V~_djYu>ZcK?zESB}mRCC*p;^2_inx*B1b}0AYS1T$|%) zosFj_P^g9LhWeqOnD4@_wBP$Up=l4TxaLw9p(nh#Ui_}KB~f<5AQXQb`GB?vo_jm2}l6I!%*KG0Cs#U0=7;bLf zfZg3)*xufT?6oX38utA6zWdMN_}_j2zmC^`+nIaz0mkR%4R-yFU;f5}rRz&Q+V3QA z9rB<4FaMNXpX&g8jGt%$E@cfKtC0iwH1&&>7S1LwzyslU2`*b2H)7W=Sip2q47rB@UC;Y93wTD;X!oHI^brM+EH1b5>s&h z!M-=9i4I1@6Lvn`1?|+Y_k_Y$Av|epqVSE4a=FZUQ4lBkj!H`q@#nL>(I6M7)=v6d zfbjLNy#_}Wf0Jb0M4U^Y7!#pb^hF>AO2Qzx-?|8rPhubk(44xh=^Ar9mwa2SH70<) zeOm-o%-SG=4#ei@856~Vtbf-L)F=qIZUt{2paAxRjxsK?nJj$p!8s0~wp(7U=uIe* z8Gtr+pY{NLjqYQ;$N;CNl7bUr9Fpmz_iFk2GOOXQec2x_VMb>&epaXEY`c~c_Wq=} zF93RGSy;p80vX;7FW)$)h6e-s$?hj`=Vv>h9M>GN$&kVQ2$BH2Q|dGb6E2;T@$T$3 zM@XHn35`w%wr|{ogph#5NfrM52k$`%_i^(VUWad7^#xp-^W$*q%eEjwXB`uC#=rWj zzhc+V%K`S!8&Gd3aPqVPT%3cY<)zTOEY|U?Q_Ceed_bP}$qx!3G236q)l(JpGu^vy zJZnHEm9c|)P-1;%J~MQWl$jdNkuMf56pT0c9eCfo8G4pmTs-$X5&)FS-o1Qy2nZzpvBs|zHzzvyN~{ViTonm_&AG0_Dp$k%@HldS^F*-o(+}bA zT@9Bo_8eV_8jFvrPPD(MWBlA4fIu!#IjXShs0+C8h>yS}ykm4g>-e_aR}(qAQ=a)& zUpg##J(YyJcki#&?D|)@yKrdP#F7wJIi>HLTD3aX+~feN zWnZhSE7(@OcRM>f#c5nXZHEOjQ~+)mrS7ClF!&A-w<52&&|Rri1!*P;x%oUK;t5t? zsVsO1tlw-k!Hk7dNm0T9?%2BU-)nZTKiR{K-rI$vXJu$T^n;+_FMBNu^~ZHk(hAmO z`?(1`NRk9Gto0n&^`2mX=v^)g zJ>LgE{b0BN2_i!G5MDPLNggV^NDm9&C@3C&9|__gG0EIzS1|x zy&c=q?|pm+3|_+^@A@xWc9&eY=gG-AM*c7eabe(dBL5fTd!c7k=SzB+u%nJJaSU#3 z_%1}E2;x2pIfzEHInmtGYzoR{zYGo)fSk%O5g?h9?!Ty=X&ZDgtq9n`8nytfZrDMH z^eEgKPQ8id@zKY3{g;s~5b>#XUqq>%P1qwv4w3Gj)$Jo?j&}SGZPDguG6#?&oD39zj^qh5cI^t*;BkO8dSCAv?}(y! zyK$;OCY>Jr0q#J@imP^YXlNbCVBJ+a2Jl=PQnHLeFxaqrAMIkh1AFQYXb%nVb4}71 z>B&`_2!6%4TzO7{9F`JUvV*VV8f~0U79>b?ZKX(=1ZdCjJ*|z`Zg||P&&PSJ`(|Ln zVN2E`@sTBe{qj)-YrZ{G`N$S6#Bpt`?Qi@$+px5>4D*>Z6_?sH+O7I~wOZ}_s;Z8~2ha1N`~9P1I6gYZ0SsMZA`mCHe{huf7Pca` z4gE~Vc|^D<{^jp}H*_zp+kqA^z$u6P)S8R|xA&~JI-p`uWl07xZm&-QAmrpUsJbn1 zDOw{g2qHb$OHPDWmRDHIU0)52*V?Bx@d$DTJ}zJa*n5)`Ui^vtH!J1JyN2Osye!-2 zcEvF0Ueh#hJPHSD)mmu%_^^W*XZDADOqeVJC^*B=aijX%f*`)-I>;yyJluZ>#f{?7 z_mufAhc2=a8{Xxgxj-npmIhUV#=icgB_FCDtTddo@5h z<@QnK$d7ZUKa+`gdDbRBHJ^c_^3neC%F?@ZfAFvwB0DOEVfT#uC$+w{h6}(64lhk8 z03UB-yG>0$GcLsi2rl`Fq6nRRedsur{U`vJe1Z_S&qBnL0H{Ix{58$4UjkI8E>{i? z><5m(lUVAuzxpaG0V~&+z43{-?J$R*AF^KOY{6C>5m;yb1{U*69`O;71F(x+F2^!F zn(g#_&^Tg~ZW2;b$|KlH#K7WWApsbs1+tD7 zt78CPa?bRO1FdO-l*zE`j$zkd4Q*IM5h=&V-uI=0l2>9@R##YGEN(&G2{xgjbwEQ= z)E?UbH+%khOZ)qv8M;kK&3?bUybOzri;!Q;LuNh)Tr4bV3u7RmW-=+q5#|E8Rb0<6Eh4y(a&PGGAJq0LUmdqpB>HWhoGhx@EWiw+4O2tF2$uZ6$) z?EF49cCU3OD_fZ>8Tj5Ge{bmf_&AfOsse)G1k~at+JI$Qza=N+b-es9)wT-4jBufH zK-r(2v&r7dFGEdhLeptM5fEf&&o24Y(}8P`>g=BSY%>d`!*bs`n_HW#pI?}VLZQ(2 z{_xPYbWyM^-W7n_?s(+0=a0&a_+g;zC*48BQv&`??NkLb&Vw{3L#$`A8tKB7mT`u`Bi`s;FEUThw_2@bz1^F-uNf4k>aY#2gI5_q*Txz9RpN2(PSzdwsm$Hz%mS>IDC>#aPZekz7MuhKHZ&DFnB`i>7Ma_7^9L%As%l{3kBu7;s@y`3S$Z~`4V>360rr>h z2;YASQ{v(MhtmsyM*&O>)7du9e+&QLWI>r@wSS+4ASTmA6El*RM`yCyQbA72V=vn{ zvwKlH&8>+j2x4jha1QyVOX!&3W8U~T!3j)eG560pr|NH^0R9P*Uleo8a1or;Z2PWb zZ#I2PRt{Ufr65+8mVh@UB)$lRd~xV}wZ~QOy80+Ao*?-IDQ+(yCG0-di-jk1oQcS% zHh(n(_xC@$*m>(G2k@M5jsr|ltK(iaJivCFE|B~`NAe$%14y{yI1Vrjb(j1nb`Qrs zRxvu8`55zccNwX3M&l>-YluT76rLJT!L%34~ zcmb{RYSs(5Zs_c~)9t_v{zf-*~VK+s!8Irffkz$z0UZ9sKq6ROD`fdW=v^I5=lsRO z68mnqTJrW{J4nL67A1Bs#dy!SOe^fTSYjR~lgU7UN5|jL!@M0mJ{mcGqyy-hiY_38 zo|)F@4eX>v5gw|{}pN5`{WGpOB<*9P+0_RMJ6GlW3 zTwo9a4uHWkzk`{-%E)&z%oPB8|JfdtXJuGfS@A>=P3Xj22JY|f4qcCkub9~ALUSYYC;=!syEMH5`oqfSBJT|@v@&+0Z?&3Y>kv-2P&`~WJAOAr8a zfta89{5dr!3Z-NH@3NqONuJSf%efrYG*FNIEQOOQz;Yh4`8=p+ZD?RUrk2-iA~fUJ z8(KZCf_WAWXeyP4^23sMzxUn`pn&^j&Dm>`;~<6mr^chge2M@%U1uF2_JSuiV?n}Z~fqrU@YJ`-!(Pp_+;T;64>Ui`lWymj_qh2 zaYn3VXR>3*TW$IAX*3$pZnZBa0CsT07|;F(V_$8y-opO2d?f|)VvaRe1S)1t9f>87 z2&%PO=wt274`}uH7?cxxEMaqF6K;L&Z?Wrt`JLakgBn@fCEpA11REz21kp!6k%hzq zH+fKU3%PNI-OuH7&50(S_b*EarE`bJ$DP-$eN*CH6v3P7v*x!`+02HVM-k-h00@RZ zs9voCpOjz`gF`~d=lmcM`2-@J^_!cpwYdd~7Pjom24z1HPmK^FAEqNei1d}@(05oq zTD8Zu&Ls2Y=5rIRKehlYv@%`SAtJnqs)6|wpC6S$$J%#-XA>!dv5vzPhuA^^ZJGli zF0dMznM;5y%d8O+LIP_l$J~fqN$aAEP*ys%T#7UUg-dT_$Gzy^OxX5{M_bP-Qay^GMj6B)B>D_>8@U|@#nZ4>~&2G?#f(#4>4Hx*j|S2FB&>7~5) z$|c^tcFDJw;xBY~bBb>!S+e!4HMDf*ui0mm6C;K9)$DxkO}dy?1i5RAtgk&j9{7GN z0l4H7Mv@;4R9r+6F#j$JZMBH~ZEBSH;)HcOD1vDqUr;C)fngXI73%G+?VA+8Uq5+L z+n-COrkdovzxcC(&(9TrAlk(1XEteCFZ{l3I7Qk4XN1W84Q&4y+lJxPS-#7`G$MFW z5Cmc5d(!%(d=7Jg^H3>QF!SqlxiPSU^tr>aS3w&)La4vk$PA@1g)!q73U#!H4Q7PD;vd^i|;m0m5J!kIvv*k=m+oF z_ucSX@loXGa?7Aw`a}zwJuk3tN;A^N*3FmM4Uu23)hC+kvLFvjzFvRnx@-{XjCj{6 z&v61Go=`5AS-<}BIw0|M`C$LEeasVUqV-eBB<$b6KlJ@@0myb%h@v>nxr8ydsS_C@7{Rh4Om^-0wkWu-)HYT?TPl$ z#MqC*PywiFlZimrr*nYBOoH_%=WO6bL7t!li}8NZ^8=oZ0wdpXfFLM;m-2abee|db zrGqNFUR=zver06^Nnedl_cpfuY0h2T+C&G~8~T2z0Q9Z_kLy(s`DvDgeXXVZsg#ia z;mm9{p2^O`+9trk-X3Tu5Dg1por)mB)LN{Uv7WLJQ;o95w`L7%u5JZR(ha{S8Dc30 zs(ccjg~RoE$3Xc&x+r3#0}_kG z2hZ|HfA|MOhYuBip=%(g(jW=bDFE>uZ2wTH+jXBrpk(V{JZr-LU(skZpx#iJ0HP>t zuCqS7kb&2K;dSr1;fT={K{Azsc_iLNr`3VVQROrDUh{-F9v(k_Jo0_~ya_Vd+|&W- zwAFp>Ont?@PiM36#1Vij37~2Q2y}=sz?@xeRJ`l&{qW!XAXrkw-sqrrz}~xy zhkFl4jvpxi{Y-<-S$M)&?`-6RT~2T>4@F)$5CpLx%}SuPaV}K@c}9TTOH1B(Gwx^9 z(#p!{(~W@=TCR%%ieLu`zNrnan|DMcUlgF=*m5a8ex2C9vCaDI)hyin@=fn~3!Nf2 zpS9bi`;xK$?-p4on1p ziS6%5a{u=?U;jGmr8z$!N99Af3sEX{U{ z!umSv)7g|qJ|VY|^Us7rXq~D9i5~}_eDVpXEfqez^C7#(eos5qJ`axRbi)Z5g{X+$ zb@}u1xeh*30PU87ij_hF;QS0f7rJTup8|;gK3={`BGAwQ;A#?TSOUEHB!9z|av8RY zH^-iTPz`rMBA|9B@;vATucEt^dL|QqoBc$(+f%!-c?$}~qEA5E&cGWtZm@oFaWORi zxa8}&w%SynTCKwFC%fz!^`*~CBfrZpZ6|f(Y|hGWbpdbIt_UK{}m&^_TWb&^T#$ zbsLAo8jl{X8K+E@#(K658JWL(IS;+<&kSTN}Rh4hrhM zd-tGnRDqjcvdczD2)Zo-+h5Q<@=L5I2S~3MS<9fcCx#HPwYkN5mgQ4`_Qv|V_q=O{ za~vXq63_D!t!s3RiN?pLI^Be5VHP%X6K2Vddp5;JJM$e_lqL{FpT;9Z19z zAf=re3KAs0@)elN&f~Zhe?Kw%961yQH6elZd`5%>wsFwubVB#LpWcDPgF`4EmRTd{ zrtYo7LnI@4A$%KMz_i@j`NxvPKbm$M&y1KK;+5+wkeQVo0nASw zfgQ~59Vf$gKG_SsGcD62{{nb0D+%w=g%zJ{E=rh&(inUE3l)IYR*~oil5Up*+Gt_T z76b{PRJsqmrNfFN66&Khm@=^Z`4PPTZ$4o6e2<7P!Z-ijZ?Suh(?jElbh}?={WKNb ztLI3%i5a%@(MN#@o>MZoz_m5rdV1H~Z)=95?8$062_RZFN8yDEfIypb1wc4B*n_pT zO-}^nV8)^V4$Ft^+I0m@H~kWTE|5rO`ql_KfHdI!IH;jp?R>lgM@L6~J!c!xCZCLm z=bYAi5m6o=;|YK^ZO45;(Haf3L?x(w9s~HKas;_0+rp6|Xk)!vUR(kZvq{%f*nen? zU+?Phr1peeZ*JKl$*wGi<|oCo=b1EQuVx@MCj-y>n>=s3!J5AFvmK}%*P!;e>a=6f zV_eA6`FOa7L(dG|^08>_aC|I4ygQd0k(k-HCo#@H5a;Z16U(g&Uu*{;sI3;L%_hjH z6uYmT)FC&Yg`3-3Fq@o(@?qHvLDLSjV#$pNjwh$#;dzO{xPE)Sz#eoNpm&r-e>v-=Cb+K$`nH ztS;vvIh%ykl@x1cpo;T?h!N=wt>FYsvn|}s@SWWq*xTQOdZX@*krT4r&&pWBd!g_9 zYW#VY*H`n$bkboC6X*YLG47WD@x1s(N>*7>U=ob4e=mb4uYu9*_kv-W@DRyaFK!P1 zRya2V9zMMDA>8@N9d`ZEy^mP0K{!AJwWE3>_<12zs=7LL@30o*e?K%Z<~!)1J{X<7 zhb2&+n*g38&J)2f+`oSxTF+XHcmnkj{-Vfc?6Q%)ngv6*O;v4^G1;XeNXCl*t>=`e zzW~el6MRH9|6O_~N}^ZBq6svx@7dl=r)gEf=AC%b1#c!UPV0BB1rG@J2cAyziKrN!@Q@dlMpB(wuvx)r8W)E@YDu zG?fO-fAuxcPBlAKKP__h)yZ@wCAj`wkDjw6x^Sm%o;W)zww+zIsxHYPISw z*bT4G;Q>M}(3>!Vf$|p3TmsJ<4PA%N@DfP}BAx6?@y3!HU<^$PuS0Oukwjh$)qK%S zN+f@Ge{$Q8RG0}z$0ihjACw}h_RoNWjo@no{KGCSEka6&VdlQd?r&jV$HU$E=^bxO zsay(8FVD)bytK@k3v!9_VVPa;9qxJ07Z(>HKcDa0B8k8aI?qinfS?GlXEhx&oh<76 z6elYnes>%z2bOb<0uThDFXo||A8_M~Wd8I5Kn8<{o~^pP=C{i1b_<(&;p0(wR#YfJ5kCVE-pb zx>wVKaT-Sek|c$lB*GAnSx>kO@(J;YM)xL`3{!3ZlofxC?N=|laU!1@;m7~>$E>eZ zDy(dbf@_yS0bBrR?>bq!SJP>U%b3^|2jMbneiZSEzaR^W`BJtbH9d;R>wV7T{%1Ul zCjfyrLkHHh4$LO)3>Rk-ps4min@SVkX&|K~kYyPpL4r=J1J%S09lJ1ZQL@b>U%t*dxG_YQOX7-SDY?u(Nru&Iu_9sm!PW-tcc8O=W9Gq))2?;5|t}#TwS>X&fof_;B zkNcAowmYaD71HT62$JCK8?*Zm+h3w!{t~~TzCz2<_b7n=n(n}IYWwuHa0s4r&5z>Z z4nPjYP4y)O`X6EYJ#4GfOrU96-?Lz?7X>lI4+$ZeNJ3(k3Ftwm-Fcgj^M8WZ2d-;; zk?=ffeiRoM0A+#|xSvc6A7Idb7lZ%bPP@D~BZeQuoadtbTsL*r6Z!J2>uB$? z=Slg(A-HV3DDnvx7XX1oKmx!-;;jk4<@rzX{|{i80Gu7lS5N@D3YO_FkdP9977j+& z=$|$ouFYCkBjVpVGtPb!%R(h4#C-8SSMWoQ?L5bt?~S0Ee^dqK1(8p<903rVQegHb ztfThuw=p2MvA;cRm@LbX!yk0R&&9aNn%=do-U`(tV5FN}bKmQEr(`+ge-TPR<5?3F zYR%RQU;A5I$uLAX2t5ZqEQ9jGS1jqNwFNdw-K&sPk?c!>Qbwk&(f0ZSV! z1K-E)`$+iv*zXTrCFlUS*B6!jB-(bn4UHxe-~9QK9>k>!z>JxF**O8e3z~MS#ae$y zO32@Io*78$Ut-T13g85T`DMJmMs*ZR&Y38QpWuC&1`9C(Ow%btrsGI%RdR`U4Z)md zi+sQ6N4!@Q1yohFTU)) zjA(93{!D+rm+b-#rNM}&_C?2~3%~`D6LbQ)r;HtSAHl)%*%;U&pr(%=I*Bm8C^daj zJU0QjP7n-Ylw@Y%_-p|Amj+j8?plm^bFlq;V*+RBv-|**Qw17NFILn4zvAFP00000 e0LcHf3~T^Bu1?HY98wGb00002P8p~ z+sQvUAV3lX2m%B!4wuW!p5x%KaDLn$=fE(|_S!Q(Z`StiWN+tYw#PlI8BMFzLy03c z)of9$CRJjoidD?}e)YRVQY5AB9poWCe)Z$4@5lQ*@AJmsicwrFLV7OGt|eIp=ypI5 z1elqb0bSRjTCGAlorXjr0kv8U@-O9~Uay0UWAphuJUM*Az7?lLP>vLsUzi7_p@5W- zAd}0$!F~;dDGA>v@O=#mg#w$$oAasttkda$qA2XT`Lv1O2yD*Aaf3Z0(02>-3s60* zLUJYvshJeJURhaT-%^{uKF`J~&lJ|{r+VnTmSsV+)r3qc!|t`N2CpUo3R5`$89p#N zV45a-$MZatk2U!4v2xX6pBUU#PL{ovW#kj_jC=%!jsf zlc0t{6h%fTLDMxR0>Zr5f4n=kkdollm(o`rgGmv;s)>mF_4Rd}F&ucqFwTkKiwbmr z#r8>?)KtQ@hE7mQh>11l^_%Dd@AUgl5+#tP1`C_WCl_E&z==!*D6ubu6I_V^Jo5YC z3rhYBHW8hJYQZL!fyGoZ^^17Dm@i-*Lh{{#2}jVG*-YuP%4csi&KkduMAoUCxgZB% z{h0>ZbOP?A!i#z22jGfe>res1`uPRo(gK*DpNC?p=s)QC)=J7Zx@JfOre%U|V(<+2 z2~{Bq#%My3WEw{SJz=}=_Im8OrfDEJrC@4miq&tn9jhnfxR<3FR+3f=g~BhVujPwq z!nEnM92c(RJ`>nDMid`jFF@Sd;{4)&r|AYL&Boh!zsuft?f2*&tWWj~I5jJjTg@uKeu`i}lDH1?Yn#nANz6g|{=Lr>CcUI$tMu$ zF6xo7#f3#EAJ)9`^&&8~0M6HZ|I$@@r_=H74Z{E#>#uI;j84PC`>B+-de6eTj=g!N z0mn;V^{kcTY_#3&|R4Fx^daJTuc^e^ImufqwrmH@@Y zB9vogbONQ{_OBdc31F0(-_QDnfYs}ug>QcO&ZhH@S-fkQdROm1gY|p^^rOUp~&e)os((*0ZTv;z65@V69$Xlw{7e(n-)@gi`hea7NK5t^+g>^2#Knoyp`%IN#c^b@?dqQ3tRhqT`~1>kW5+ z!1t0QfYvnzkv$aT0N8#r-|_`eKg0bQolqGtI9JlP0H_5WK&!oI(-c9`?E{)|fi*tHdwU6%j`Cg^6h(on z#z+ouP$~O_aO18Zv5Y_wppuVZX(@B%hls+pY+05(i4U^zezh5bXSDh}3&Q6!E~U~* z4LtIxyS|jmyiqx7k`uf|4>G*reNZ-LK$q-^t+)srmb;)+1O-rBDLxkw@S_Zxn(~9k z#l~ELi~qWM+IgKWWqBITPCFncQ~qnNH~jO+YqRGwLDt>1EIYG>I9lcmBRZ3rVdRTq zoIR&DFaWV|2uv=*bgUck$%s|=!j_|1G3bg^>QE873M<#==(6MBJLzp|MwK>aC|L@bcADNx(3kO)S_71!*` zBT}BE*$gPg`3zZ_%dBDd20KGn`+u-Anx-)LoJc-pf6xJ3kO*J}U~g~lN{%p+077-x z8gBv9RJ|hEYSQ<3C{Y4lumd2?gllS~!h)2NKoIOk5XDH=#)j9VsAE}C!->2XduHff zKX=|v_%>_+(9ty3KY7~PZXF)w4tmPmQdWlLtbDhli)ZD;#yj-BwqF4$ZqIL_i+Nek zhf9+y0=G2KH4{M*MezCFx%J1z3v&R1s;Z!2fb!Q1P=8Wmy$iB&LdxkSuV#lOA@X5@ z%wF$B9$_T3Y6nkShX?<(eOUdEjX2Cz8Y;kgo<#6V?`~JVg+ty6ju$W)f?4k;k5BqJ zCqTC$?3FL)1pFw2NS!8TuIbdN9tM5X1{|#8C;xVEE`mIhL_wUuOA7^9oX@e^O)ZY~ zIv%RoVXNf1FyR-`AB$vobUYV3Z`p3}*%@MkSI|y1I6FH7!!ST;DWG;#FwkPoPFnY- zW>Ps6z^}eMC&ROj0ptSdX>n%#H~;q6Q?s)r{Cv0l?Ah^IFJ{Nd-5*|iZs3T+-H#hP z7YQi=5;`NT{agj$)?Yj0OtevJ^k!Kv;bH!xpa6(?LUDB+=5iSjg<(eYdNA`8uE82`0!$@S(LFQ%smgjoH$c~Q z&<)+b?-@g<6YL4+vW0mNlQI_jU4SzYYg-;5ox*@fj4;IAum19{Oc}!au(P}K4#k%e zM&Je8aRasA?b-ZsfsJF=C^kbfAR}dfPw-HETm|h!8;hTj93UPK>LfPS0+>J>c!2+~ z-@6;d8!(%iW!F?cxsOje{JhC6N7ZqrC_y!$a6X8KCSK4-O8h+`shg*H8NzJ5S zN}PgeX`1zO*XCHS9`3`lQyrFaDM-sx5MS8zzCj^e|I+4{=Cjwb*YNhZfj>Tm$!1xh zQbYnEQBaGarS$?)=sAu^@uT&cjpkVV#K#(a#W<=T!P4T=bDQ4|-udUMs`|YXOCoy| z$O$=gEsA33J!Pm15`~1sSB~1}=5btL8r$8CwT%+?C3J$fP=vc~-6y#72g`vA*9pA! zQYl!uu>yOa?~NRzpQ`{G^#-&~TK49Xsfp%rt8K(Y zNdR21?vGaiz!Jq-Gw`_?n5)rNf$#C4V&BQx#3Y17==+WlA#8}FGaJ|K8m)JA*7!K@ z37{Vm@$h<_Xzx#!< zq58NA+KD!lpBLc(DIu}O zf;t_}P7(l>3b&aK(b}m!Z`4m5{eam+%f@RKVvbzMJqHYx{%M>~&(k~6XZ#JD)>&=4^D$%{w?#Zd$hB0m7H zZl9<_Yj&^(2O&u|u{_6n+3fbi)@$o+@0y`|!FhY(l2o{s4&65tWuO3Dgha5l{T_DB zerr*7(-~Oi;~ove2r)_`Sh=w>v>dz$2N(&JG76z+3qd>6SR;_S-Ao@BBwBe!rp)r5 zxkB)Q=w!0ian>{KY;xC(mWXjcVyGRv*>Cp+Jfds=!$2ayR{HUcAOD|QA8!4V`eD7V z2twlQgUqbG)*um#B!HM8f?e4#!}u|SV1+%Lk63#1qzMNH2T&*!puCGlAx1LTGKS7C z$NelOvO)5lN=~8;Mn2b0{5aO@b*Me9dH1Q=)H#9ZW+dff;ajoiKQQsfMQWBdtC!w&sG;}Q0ZSR^a+;E6@kqBpOQ#tak6{P{Z6F(xK zQ2o5>y|3agol8TpSiF*RiI_OA|MKghXZg8&sQjES0Ur78gSDGCZ+;v8eJE{zvi%me z-QZ|fOoQ&hnTE;%;nB{cey=Y$$doiNgD-;Fi_yw|4;xDbE|NhU^x)*=gk2|Rl5o^` z0-0-B@4bwKQXn%}Hz{bDjNQAnk8C~&RqKFq{1nua7HjR+GtlrEHNw%8ddN1P;d{cu z(gJgUr%#_U7f3il;$p)?#04y&hrd`X7OL-=YzCH>mI1SvwP|UZ?c4h%*7L@490fP- zIe@)BQ*3r_Ztm+Sgtf!NL$%RpeCmDQ>xCLQgk||HnBr4YQy}pYC@sZ%cA*2v$u#5_ z{EX;nD%Mm#<2sRht?OHieuhEE+Ddi&BH+PTpUGvQdE9`POB?JyJtGbLhKN*~*iHg< z@Z4~pKyrZk)4G?1gyd|J5l_vn{feS6p^XBveI9?*M?pjr`NMGD0Vv6W&q6iq?r;4& zza{+fAN?`xJlOdcFaa{N_PO>x-(&qy0VI+90@kfi)(7ntk%-(&ai0OKPv1((ng5~Q zs2A0a+ShVS%b#31QXm$O!TRbtq}^H^D8bEVEjTky+4WK52rv_HLca#4@Ni~L#dOJr zC~{FQm)U%cW`mUtIVnSKW|6(qoOO(j!R9UAa6~UeL(~nEW!Wd#9qB5RIpekP|3KF4f@7HG3?PPY%#hJ3jdXz&mB#>|G`#=$2E7bDk^2eL<#BoYIsK z9uN@#37$YAKo|IpqvNBo1khI6-gU89>@NVy{#42ilxan3n{~koF;>^!h(0D4Aapd< z3+T8|T5V{x8Z1M-EDe-^gGw3NM?R530TB5v>b1JPr=-27Ao-!WM}*lkFC4?jcOW_C zEs;n7*Ap<=*XN>+2vm-(*F%l;Zx{zx%)b?u!vX5SdxKp6z{Jop=r+f3dI#t#%7|bN~_owPLae^-6_hb5sCS z@5<#es91tr@(*eUAo8L&W*qA;E*Dv!l2eR$7d(<%THo*op4m0q6+x%lVSPeMgystp zZ0fcMOma6&3d8W-5X-A~UD>ZxtP5*$7*DECLiaCB0A|fKj*|!~pI0C?gWsRDSWji?BJydyRLXAibMqkq6bgm#;E02S zvL6N$uN%4-C(H0j)w)_}yeokHz5RU>fO4XY6~DRk9P2-L{{zw!G^x>-nzJCc?WvdYAPBOF*k-6Jv6* zi54KTgD}wIg3pM2f~qz_X*NchlSI%~!x=)P6UYHFnGADlc{OXC@>90>E7IuBdkN=yK|*pY>cI3=cki09xA~fB$FqS^v@Be8l=& zU%E9=09zm4v&X!8$9q=ZD?@p|49S`FSiF??!<!>Z35+l-3x-?eM|Ok znU+_k2vjSB=qTZmrJN|C``Xhc%S>vFs0Z8jdPzI*g%w+T^;!+;D27|>H(`5w8#XsL zA$vUw&89v7```U8RQ~mQ@bBUEuQ_v1?_zwue3M;&bAu`(O)+Yn`;%_4f7yyWa~tS^lL3&#?%ald?p9{qPXB z&GRL8ABiXOqY%G(+aFWee+U!ey`T7VUn~G_JOOmQ+#QTsz2OPq<|`ZCbGrT)fBL6G zzb&nnLf71soxwLZ?RnDaa7{E$4evUi&ofek86HIEtOIUFsU4N|DKP~P9{P2&g$_o< z6Sh9x2JOVJ_k`j`F+6E(tniJDN~OYjQ4q)auJ$-wg5u9-d&5C4P^%xEa{ zs{SU)x`{ZKKrtplspN}5nvsUC<$miTNIr>y96)pGwx(;$@m%t4vDTRYc6MzM)G%v< z2s#j(qi2j23$p%gM^M8c+`b*WeTV|s4LZuG$Y!$e-g_4~fO^{YYDI5MiA({UV)tne z;5X<#){6{qYAPu>A;uw@PI|8vZ!EGJe&@^n@N_O6%IrkKwreS2?@x;R0-$G>g*AL8 zkl|hblI+@y2ONq+F@AnH@GPHfe**V@wgt*z-4UA%8Qg~;3BWt0PJ=Mv(ghjs(p7ha z)ajbg>~vuB<}FAF2}m5(;Lrc^2XKhQ-ui{t;MHq>`8bsPv)=x)Er`%rM+AxHumAe5 z+4b{sfZdA*G@1$=9XElCbFi?u5PFxzI-YfEx!%<==o$Yd=aU~4Kw|oQ9am3OFuOM4 zZmpKnGF0{}-WZV|Y@w8y8qQHD6)zQx*ZD1Y*Sr;amY<)$@H-L!ly?TjcX!hLT<8E- zfYK;~8YqB#J{x-GlAoQkpKBdEXEK>g-yM?xI;S1h2;=}nybBT#p?%V}*L>FKyO;a- z@5AkY%~JMnV~t-at&er^rC1G?xEd0E$GL96GFQj@@HldSi$t*X(+}X+0}dcn_CYHY zU<+M|8bMXnvGx~rjGvnW5Xc3p2UT_*bpaP1@e#O$cZ`lF5<;{lYTffS(scmp4-O9C z{zv!O{olpk?QpHV5JkQY8BT?JMv-0r3il!GTQ;#Igk?@S_f5T48)5rkYtw7^b`*|nlkKa1}0B(0}0r2>fu;%ij z5ZS+9Y8GNg@J((D3C{x+qE)D)BjLBWMGf2c(FKa49ZAzLJ;xGwdrmIK!}h}+ENKbY zyt&TA44C1+^q>AG@RgIlgV~ybS}yF6O09{d^I7ReafJyW-iwVzOvj1mdp~_|umI#_ z8q`+P{s6{CNt%-GCZ-bOe;FXu&3q!=1=VpmDUUSId-v=EzPJ4&_~_#g0}I&u%D$3j zeNRjeormZ7zR!vLUyO(AGu8RB9wzLdBa9t`d|}bQF~STy*!d)M-)yzUnp>JqL8Vgm z?gt7$PGy(~kj!!SU((LBHM*Eo1ngi>&GC2ZNYR&BFU1*xCI7_N|Ux<6QwH zBK#8Z*-ihU)Uo$?@VLJ%4-!DNmxG^RHpvjS)JJAv?6cn5+#LG8p)|4iPWNDEdv^yL z+kYZ8)>_6<<6;4*ZGSPPeZGcW1WA+tMQ|wrL_ygfM5R)3S`9wK3jAc&8Gh&T5I2}%V3cJ1-VN2E` z@sTBej>h|_0(QNJ=LIf z>N(8AgG%-7({|$r^?LpLs;Z8}N7TV~4-Vn*-~tCQFfb$naeVs+N11P8D`8vH&vcwe zgv;WC_upg9MRMKFyyWyWJ80Ti5J=(th+EkO|9bRA@v2p;V|g3?-Pr0I$H)VgoGQgVv* z`OO^bGu<$$M0^L`g_?xHl?914%KoSTic6*O&WdO$w$NH=(`{^SxR(|eSd(!5*v-QECAgRfHbB6 ze7uG2E;Su({3=|41;ioW?e*I58b!prBA7Ju&93QPQ(Y!h_x9`u&hkktb(>#(m6d>{ z8;jofMBJ{q`=9UI`{is)t~w&H&Q86t^MwVE_z1`W*hM~{XBi&Nc6#3Lo*ZBh`Goke zgOdmZtXX0pU|8cv4jj6`e;ZO1QmD%5j95c^C)v!#e1i?g@1)0T5146%>HK zD9`ibtp7f?-@*2eRJ1xKfGYx#&jKPPL(ducQ!?uZ2BqG>49T+V-OA3;b%=Bq#g!tg zzPt*{%Yi!X1h(c7+Uj)tbx;JYmSWHIXqPoDGCv6*2tF2$uZ6!{Hn)q7-D}uG;<@+x`?jTvf^G4x0MyftM?QQ0 zxWb4Z1j>Fwp->n&=BRP>(7iTHW8&EL!-WDM;yv<#5jxKNQ`lB9`%5SSAQzYh`BDNP z5b@`pN&Yj}0aTrY(6Ox_p<+pE1cM?B#>t80On5N*42#_HI2s7~`T9MzkUyOv?kJ8=z88X5@8 zwx}|7yB@2Li3kpkblV*sJ$c0X^hw%V`)doo1clWC0p*?9a~gx@14ib6?9GwO#HENeL|I=%d<0Pv)Mr0{1RY)36Jspr!XNN zJ$N*^0C*I@*f5=K^Zd8){|y$D8CLsuNeE&xT{6`c@N#PCG-?}bc~b8C&LuyH=Dtm| z^3?9jHRs@6pOMw;tFU?VHoIP4ux(wE65jjzlN#ujoiQW=0+HW1@&%wOt#et*^FC>M zPY(%T7-U%m}E-~=W!pZ_PF6ZLmc0RITdFNyg@ zxGav2o2=J61}OVJDax~_-gU9C3Y;!M>3WGZ8&YTx13TE_c?((cYy4HUJkmzy!5A?q$P6Y=Q!^u)t2+D~P8Y@ZR?_J_ALcOj)u{aNk zqS*T!0#*VB0Ld@!?Cij#sMqU5-wzak)iowskn4I5@KB8NmNYGK@T~b?OUYDCQW{DI zGlat+^8#AuwJg?sn*iO=*>%U%VTw-zmylV_cXudH36McD8b9=dxw^OtsreKOAhldJ zhc(rC=?p7J2;KhKC!zc1!)@4XwV<4`1t}%cfO}@wiRlDz_!9$(V0EpKGQyX{)pa|PQ${E{Py61$gTyyr`%6?R-KF^`hTWFWx9<8SC;-VUA|3>`nz0d!48 z7Z5_vOl$ZCcz=WMV0(xM+kj;18_;h3ZM?t1g4k@>W3LTXeiX0Xd6o4os|BSSc6PHq zKHB&4woUwM)elIiS_S>I1vlGm_#a&XOrOtiA~q<3U|A$F(0gix8EM9QccPsP-BTu; z8T#JrnZ)M9#f3o06h;miG_g$TXZp}FL&HZd5EZ~6^?T@f!69@04z{=0T{87wu^xl% zioiT>z|t$5P^nZxQz*x_Kr+{I-m^P*?yx=~CPHJ;BEx&G9)|AoAH2tU`O|IIXRj|X z;s-@QJJmuWFfaxJ#=sQ;kxwyjMSvu+=dM6pA-GUg6)pj-)oLAwo?IaKpg5J|;iYGU z>2Sh`2!adrL%;zrc;bBagMmrF*iy$R@@hZ(L5CC(5n4kIl1vMxNrDOeXvY>xSp3?8i`8?G$P!H?=fTJ3~ zVga&+0;p%F(8PL7tlM<~*a1SbAO(I!5o#ej?36VW{%=YflH7!yA1h!i7yN8kFJBf(g} zalUJ6(DBK_y(F;ZuKA^a5033<9dSymXQxIlm1^4;T(jAP)As4*1i%h%7^B&Lf9$HQ z_M6z>m1k2R&*xclMWABVG>}*ViJ(@mhd$QM{D9UD4?#Jy#}d}p*5UTo{tb5he|_h7 z?Vv^$cggnxJjTXJ1VNl5pU6Vufg3+4`MLZk!ye=d`PNty`&ARld*us<$48ylt$h>X z9TdSE>a*6jQ`yX#TtE>N>;MRcKd4cw0iTp$9)m+dDCGSh5%~lno%QSMu(7@YO2p!? z8kGG+JT*dye3*>=p90+lN)yT|D0%TccjgSx$SW`LXM&wFb7hQz1(y8TAq!}n& zdLujTMgMNnvM2bxXmNdtM}MFX+V$Sifa?g}`<`F2x>gqx#|%&4EY6{bq<8}73V*M4 zeMj5h-@jQuYW!N`sQwN-CyXqB>13LbuVc_fJU#U;LibK&%&x6`Jt2dE8K$42007pw z(-tFL3|e~-jVYdq}6}(q2@$R)tzP%KGsl%HSd^66H?Pu+QrL%C|KBJr%D!i{| zbNM&uVp0+0ug|l-{^YRl`;i3Tl1~^)elSpR5k(a?`~|~qWJyh(bM|wOfogmBtQ6zKkNJaLIDV(O}u_)lcx2;?@tYNLhZx)q;N9by_bRJl)VinwIR{ z()_&tPQqtA*4@sDJyZJJh9ppNZrP1L)?^FoF9d4yy%|5NjGh5PTwrzH27M@?o7t`= zy63Z;y+jg%?cd$IVZtQw?`2+jD8(u3ujQo6l5p+u*YeBQ;1@;YTN?O~v^)kC5@*DNW zSaV$!&U?1y2X093WbM4;=FIY446!TO^MHt?b#k5Pif_<7Ou zeVz>iBj0g=ASizq3I%q3@VEx$y&AiopU<;?X=w>bUye@q7Pj3<&RyDAM+ev$_v~X9bj)~2Q(Cjh6S)eMG#?XZPv?JPg#hm zMp>gn!>aKRCzT)1evsrlR2tbwuP&EUDnKT$D3OsK}W9qoo zZZQ`y&J1=hPT3{EbqY48B(a`|R}_V{refFdrR5^)XJi@4FR?}tx?#s4;)^TG!?yC- z*M9M9-px#MX86VRIQ;RS&C>oJo53qF@v63W4YRNr>=Hr^9*|L_D=+M*x{ZCN%$Rue}zIQ6h2C)+zfv zOQ}7n4Ij;o7nh3#&>e5W$d^-TtZ~Xy1+){av(p{OuC9amxC-@J6*Gt|&CViCIfR9z zXzys)A*lA6{~ey8xi9jDL3Fm(Kd4xph3q$z3Sz(nv@*#4Fzpa1^WYhP!*G~);4pt3(P@j(Pdu#RoZsnrAy z-Q`0(&xZ~X&2GmNz`0<~$Y5!=UgUYu3tmNcEB8z$05|)IbhoE= zbNx0HOC_IxQ#%81-n_~B`T6h*fyjvM6@e>BfOP9@WjN@du6tJQ+V#YNVSipEg` zvKah+*xK5Ht&g|7dm_GY=93_`!vWKB>2q@wZ-2$NfbUad*iKT^bFRkC%({!VI%>lr|Lup55g4yfyhs#QugzN0QtOK zM@eWqyN@sfOYq>~E^Ms%*4rOmE5ed!i^77~JPi@^35bdQ2vR>%R;t0mSl zXzhss1Z=Etu%2c41fadK{=@s;HNyoC5kZ;f`LWhDy2e=J;}e~3OtdizTdn3f7hu=N zc0gPaRG&29dvE_atd~~Vy`qFO_~9el6+gQF5$m(rEE9lBer+njn(G8Te6PJ^ldrwB z2;Y45X5T#)zj~YX^V0AV*AHsjcC-3nm7VSWNB3D{=uQ?h?acU0(+%J_bG#27JzuE< za2yBYD$xbs<9~)-xlunXiqi?0asvFgR)b7B1N;;Zjb{x=X0ovK@&@qSE>u3RpiO?v zniL^Ka{{`wxWL-R%`dZi>;4ub;t7z_P7MVKl3)1>%w%&oZpq(I%sxjRg+Wb7U_GA_ zA%SfabUK~T{r0E#V1I8PD*F}I2)e0z>+lfCNL~ovMi($Gw|4%qB=N`N#=E20`@2#B zTosyV@$*Ydp=arI7PGv;S|*c&*I$1fDiu4B)Juu50P^{H)-T<#9i+Uw>%A+kuEN|x z7H)s#w)f14`5|7qu>_fE*%3f);s|VEc5gWuzV*pY=$&bq9{HER!)Zx)n=Y*Qcym$0 zG?nJa<6o!%v{My{ZX)S+DWHuOS8PF$0LtYDz*{;jIU=DxT7xMAE1w_0yZ`DvcF*^S z_!4~c-})B2=Quqyo=CU*W!6tp(Y<<(q??#wTOWNCh~Nb!g9}_+qphcR&D~SYaFjh> zO(y|F%jPh=PyrBVbFKggdwV;uva;@ppc2ej6u^FEpIy7Ipy{Sx0?-8#$;`Pmf({_{ zc|Qv3=vG@FZ^6OAfnU$r2DI@fBjP!y^{M_7DMxs;@R^|8nV|ikeZQ! z=lxAywB2A$-}>1W)DP=We^PVWA?PtKWa)f7T*IMfhHm*-G~UkutqWgl2Oy~JHmI!@$f*>&uOBrapUc9n%?+4NPD5qC;*BNZUGfQy&ME8j z*Roj0vmlEy8;&|T@c1<_n*CldEE66fIjg1h!QToOhQPxI_dbAo@84tBAKm|m^%{f&L{K}bCxV|B zLZzy!Q};G&G5-G!4UG8?+OH2rXXjBFl;y%QzTD`U|F>f85hZzl2^O=ax8 zj3xkQkx79{eG@l(cjE62mLXthD(vs?!_I>p`_R~LKinSp-B)gZ1$faXw{dKj0hj!r z1DZ(g2iU%ES=RUQ{xhtoiq$oMJ6C#qm(Wd}k?od?(7k0$Og>=@2S5?fdRBO&9Cy)o zOwFY3H?h3|5iM!Xz0z($d2buCNeNm?6LMd@1KNoO%E=*nfA0g^+CTi+htNE3vc|r{ zgD)&Bc=Hvm7hrjL*}JbD)u2|Z`3rW#>vMR3kPGz2j9{R=MKhPc^F~wG;WNBM(t$`P zyHdQdgszgsS~B;9xEI+5rEs z3k&m*5@MLSud@5w*f;QS_kMcM8&j^7L(|LCGAu4EvgU$ZqOxCM*E{<=-t+nSc_`!x z=e9^9aD&cslM5gy0_<5$$4n=S`aZ?U3W(nw$I5}_T%!O4K{yxlP|Xjx@ntf9aseQN z!9$NB0K&KNz;6a01O-6YTnQ62zp&z6fB4f6nP;UlX?CBvmVtaW&&WTh9ipc9-&gA|lJd7s*fj2`3*0c^xC+!RurxKv3_CZ@p3*TuVr6rJM z86-i1PP+rOlNzY13iZQ!-xCR@ZK;M~Fni_Wye*RMfCxk^oe<1OzGpPCUVmoxkaTRA z5Ui&AiD8~knoykh3q$M@&v3;xKZ^K7U-d>hM}L^i8mSDtG0tZs077ym38|Ts{p_R# z>WRu4L7tI8Khr(JtbjVt)z)#h?bLL`0=uTiE;ZfYb+8N!u~T!lGGO+9M=J!N6n97asl+57MX#Ak*)R*(M0|OJmRkeA9k=!1s^!I z+UOc~aJnWWqy)Rh5CLa}Gu(7)utz-ZPfpnGpmtP9r_&%vg12wX?tN^3g@XAj{D%4} zEl1y@0M6HR2bNRYC$EJA@SJOY6qk1Zawu-1FDcOf0Nd|lTb^VBP1DXj3)Xs35JUWs z5R!=`B&L~w9(GPUZ}D;dPw;xrb&W3)o=44(;_?EZOt1p?DJ#tuepl`A_lx z4`7f0oE^%uC;(jr%k&pWNC`j-2cv78pEe$@&01F@;@>_q&VC!qLNzADeDOY4@B@zR zJja^vji8!;Py^)!kx#f90T7&0VD`qWqxSH(Fd%oazdLA{EX$C`A9Tad#kk0t-nFgX z3e_WEq?=uH*XwzwWI5!25lTSwSql_ut@aCF`)UP%NyW$b@xJqizlp7cZEes{5`liI zgRbjdjdwvJAh?;XYx*v_03$u*2Bx#7<+Ps@n$Ma@x&q4ai_7+YxHecqGLR}I5>g#9|UEPKiUOB*Z$-^cFzNcg+h?+#og=m5Ca7nS`a+SAihXtt2} z*3XypAg){hX3RX7onzp;plK&sto^s7g#1nCnSrGK751#50FE%2U&ia}R7bJooQab7 z3Eo#|un-f#G@UYJI*#O4C6{>D5X?!o$e$PekoStBfU2r?J5{eV+*g6C6#&>ZRns&O z1YzuNkl0n2|5AY zQ^pRvk6`clYz%A>P}7GG9Y+{nl$t&+o|^z%CkO^HN;0!>eAb8jD}yUEcP&P|+28)X zF@ZCjv-|**69t;bm#gXjUvY3C000000ObE#1~xbfg&z@AwWI(5002ovPDHLkV1nm> B_Xz+1 diff --git a/www/img/stationpedia/ItemAdhesiveInsulation.png b/www/img/stationpedia/ItemAdhesiveInsulation.png new file mode 100644 index 0000000000000000000000000000000000000000..4a2f2a6c4e039539ec7acb4e19a2f7b0cde10333 GIT binary patch literal 11311 zcmV+~EYQ=5P)6AERn=8pJnoGIqVgm6YhgvSlw40m(yvfJ^`*d5HkS4*{Y831BG? zMv^DT3hW?x(1Sq&`auL+L1e(lix40%l>`Y8AP!(5UIj93O3T?Lcb8;0o5PuA&-8S4 z{pOr|>sH;WuI}j`&J6$d49?uDy0>rDJ>Pe}PlHcl=`c+bY_|o>U=W27fA;#N4gNd` z0%)~xj^SJs@zJuZ?6>2CF%0?x*gxEd;c)n@kCFv@)*tYq1cB_jF6f2;HHi~GHXC)Y zZJQH-MqSq-NfJI%$T9E(a2qZ(n@zrs!t=ameJn7Z^#{BNQLonv-TbuCZnd-PXRQXG z5MV*rh7ESZKC}JFGUy${(GWcU*{H!M1eg=1h2S?^*}e4jRl|=Guxbt@Y$6_n_{{gg zGA(W!PQ!s%i-C<9jE~0Weop<|-}nMVeXRv<34C=ti|BT{(B15w`&mCBfD+X81in=( z%D(LUlPJI{;kqujh4YM02#^MWPhDRIpW-|eK*pPIya{i-@y5BG+c>v3J;$MTy{Q+w zJcxz&6ZmJL01^I~H8VqEG#&vn8Ekep;b3$Cp68wE*MRe;kb0W*+X zVFbSC^Xt}zuz==;CXAkp;Qib0pJ@$VSqmWW$#bdmt7Kmd3Hq5RKq$y%*%l`Nfi8nc z@W#)dtsT6Q1gO{R9DEu6bg|5;3UJy%p!07)1t2mI=xVgr+h3 zV^&`P9?zvm{U~lD8^65 zT%Cd-;F;hbMXS|<;c$5B^>}3nU|Ke~P2sOpbXoXix>{8L3FMsEPRE^Pzl)_rBn6;r z0-D0Itirl>s}1|ZeYkt~?y1)0l^{TUtu^EGvhcFI7e!eCFy5knwq?@z8O&|haWB(o z)i`iB(%d}>JGlk6u+&R zU@_6Xx}kGG0e^0p7Wjex0RsN#_aF5B2TtD@JnVC2Aip0SjG(#J6mKbgZ{P=o`vm_e zhQlGxrw#V306NQ1{a!B>l**SR2~S9``8r(}1<~}v`dG|g!TdhvI|#l`z}FoIHgMGN z1q3{SP4Z9s&@;NHG<87^$8p+@?R>Vo^=Tr~Iz1bY4|j-oQ-8{{R;z(&o8Y((-;2`5 zv)Fc?xCc+N1G;}&61;Q-Ajx;!Ms{B&K$yxo6`sJC;{pN@_}5V4FH_OiTcT45dHgFC;e}AGEJzY0CZe#5oydtfC>`f+n2>wJWKpe%{UgE+0vl0>PI+9@jWyutc#JnTPlgXmiNp^=L`!wEY8VAbIN<@ zIjO_F`}h9q{rmU7h56qggh}Cpjm2kAxTyiRf|J<63r_%&d%}9LEg($6m)zH@r)y2qvTu+?Xf~Vcm~VxCSUWsC zBm(eu4&!j?nmBf92P-JS3rPS1-)*)y;A)TpkZGzUC=&qC;|Xx-{pq-kKv36TrLJ#N zHk+IPZmVASxsC76x*ogNOy!=gIhjyY3HXczT2knI0$&AQj%lnrHRm&QAxW?b0Vq}_ z!3#%#wbnY+9Czk9$vPEX`mc;K0SqmIBnqHrGCt~t^<@O%KjG9DTCEne*Vn;qxL~^o zw1tY2XuRv0#yI$~9)n@xbF>-)Uq_AC&}U-&Gmwx}P%Vjg=d0k$&SwS_#;fJFBj+gH zHP_v|xOr)?Klrmp!$#WFrd6w)ry}ys z#*SH}02=ma93xzDyp1yc+o%`6iH|RF@LO$g9aNWkZY#Caqow2%_!L&^@ml%M1yGcsgSn2mH#wTzR==MiacSMWbnGTy*KT#d^N<8blZACPo;9$` z1c7g&*QUmmanUTErVQsUPXd~ql5o@XXnoE;qBgX znq6!X4FbU5zjziPCEv0|7YdI@-zA^d^ep2#FCfv_S-kIs(oz9bczEQ*H23o7e*8nL7`8j%ff_tFoXR^=d zsl{}Wx}oRS4A(F%w*^cc&%>|v)bnv_v$gq}Q+FmG-uv)JA=;Z3p@~Jwf(!~-x9eb| ztql){V&C`$Ab=|Q+}Bf(xwmS$BvZu79AAq?(q|=h8${RtI%429FSMX}q0Q4|!jz@Q z6EJ2h(`U4ONA}r=YH<{YmC&v?f&xtB?B z7lkZx6#DYfI_B3guOaZ4yX!6Jb_D1Wd>LhrFMGM{_Nr&A`nv4;O7IuN>#x0j6^E-& zgITNDn*C0A4uT|q?ZSH2eFV5F{U=ZWlKg*<`IWZqbXpghu)f{~%e1({*p>+fbvtIw z5*?}(-7n$gA7!5sF5klwe*&#`3x@l{?AbFVKo$6EWL=$ud)(UJ!2BAd;I}bd zg#a=*@M)C6m%yu0kaMl5o0XC-!Cznn>Y8Q4vaO3ad}**d_@k57{J9_iNxq4|F9M%p z1qIl~wZDhs6$GAFx}6fhwu|pj!MAG`-&=xjS=RAhUeRy`FK5-~$U=7g37x#V+5J*? zxBJ)e^8c)=02KT7KHUA_Zgzj}1Ry|6yN=!`if!t}0|apnc$ES~acMt;Oa4E>{JYIH z?0DDBQVrSZs^k-J%*Y85Au0?tTa|qkJo%i@87VPR#IrfAs0^GOC0i(1Mk%6%<|N^9 z_mWMtTCFd%)>^+bcr@Sy@Ir4j01|*pTbH2U>(Ars*+soxhnjl1h>R&0ehNq8|6 z9I5y;QpzH0#n!pP^yIrZ{xX5zY&Q8jRPbxH8sCRNr_nG3=QF?8G)_kOO@^*5247Ra zr!g)O1An8ZXIce(T1&r+5-AU24_!-&_{HKL3Gk;l?1gc-G7f8NYZ(E~MFFVz5|k+P z)8bjj{;o;^(%8nlhIy54B>0qBr(@7N>35mWTSdt)e+OMNEh@-%8C=;ik_0pJRkom= zT=J`;+wETM4!Tr>onYl27K-uXKl?Es&zt}%_*F$;6cYFn_$2vX!@O$Q7Bn3*178jK zP8EE$^W}Y1MFdtX>dd_{TlABFPwS#sT3b~7UE%90<0`7a55ZWC0N!NGM`;6RN`U%W z3#^)5=;m@~S4HOcII<)F+qS{;JoI~p;79)vr#8?Fq1|e83fuS&l6qcmG))tI9cjZy z2^QU32r~Z1=Q>E?v{G=W^Tqd+I-4oJo&u!D3Zkqi>)DyKYVrt)PrnI|$&{_4B%1Mj zdX`0;U$!<{pJ6t0@F0^_Frivfj2@4$p7z-gz_e^I5tK6cvZE^`y%6d;2m=D2@VVzlD;D((!KXMC0!YaROtaK2K^&b#0k-isspJ#r zYuNQoKH;pPtZU-;B!8AJz|}L^PruOOZy{oHd|p)t z33^flzbb5Ne%-6W!@oD*d=u{6y~FRHiU0&e+3)8`=8_8Vk1+ow=4ArE$ukFEzLUbT z($0q*eD!^m;8*zfQj)LD@q2g*@G0VxgYUZTTV3dK1zRQB&7ystm;fAn*IjDu5(@Ap z=2z0}68NuQ>K1@kLxMj8JSl*dOME53rFuOT_-7SKKC0kHNq#*ZkKe}xlbI`R?bMvY z{fP)rueT5cdj{NjQBVLpL=>WoqgPw_b}x(w{C|b{57*Y3uz{o^0?@9c05W9f69}f3 z9~yT?;2BSHP`t|h9>da+AX3J8cf|!ip8?e<`Mo+#*J0_bT6MS2lWbN}zs&RH_r=BE zOV5|#g<^cXH~Q(I-y1VcTM4^KFyZ51cL1K}txf(9*z$Y+}X~i$VfA1evwjCDFZz#lVBbxGTC2#-E9Q_ z23<@hlZCaPi4^h2yN_2_fO@@N0RI?2uT%h%F;f8c)ig8kn@uEuop*P0&CT|gB%t8H zXR^-<;|y4_0Dh6AtBO$uexW_k^92nk_n!+WMalCQf}gG#^m;c2{r(T(1VM@;!KYZ7 z00Mk#F1X7o0LuS1US7kzO3zgA)gbUG3c%z0)o!EvD7ApOovMPzucP_kvkJejzUF2A_7JQhl9%^rL&^~fvUjg^Rla}>_98} zeo{JbSrE$2felbur@5YwKCMRY?wvo`-R<4dQ{;lFIJ|5i&lmfUl~Rn4yu!U7c`$f5 z$o4Z<0$+`^kZcJX;NYX&o0k36Aco5Xey7#ua{~O_RwUTv(K1xouU4WN@Jq6OY}d0A z`1-6RRQdh9SSbA~tdY^{^?tg$zyCeF{E+S+4~N)PP*6~Bcb|`L-QiN2 zQUYYZPZkq2i6_}L5n%4>xt%WyLLQ~*C53Zx|kAT>=Z0;&~(o0%_rx~7nTF7Z6{d%bwBxuMMgHU}W7 z1fM)VN&h7HlvG;;9}xUnzu$k;G>k7#Jn!$NKWm}=1+`ku=l+Hf!!h5PgxRI-*wqS9 z^n7#Seq{wv0>OuCwgH!0so%E|d=+dOV;#HL5Fc%#$FtOwB;dM{+k=Jk5Enasrt?{K z*Up_+h*EV9{TRtF7toLV*+sD;7fI1FgJiMi?+^Fkz4zXO$B!Qi(DHf^lAagB``yjX zKga9;&c8QV-cl%x@`K9G=iScok-sSg0E!2~$RwX`2>f>1^=<5WS}O@aLEsbc6a=s; z`D$3{nniwJCHeE_3u{VUug)hc6tlAPx!})>R1K)G zDXYJN`EM~dGVt9Z_%h1xQ2|!LFVB_N$tc^wy!lFS&lCKl1U?kOmjsaD_j~;cjV^+Z z@%~`&`2FlSC$WH4JUWPto}lbGtw5a@==?{RR&Q zaOX}6enq_f_S>*^F$4b^lI41Tx4#1?jPZC3#)-hEh@)-%e+`d#m2L@q$1d(QJ{o7; zPa#Rb6p1g(_gv3rvjFn3LL%q-ebqkN$&OzMew=rP9jud=I!8d1smmwvN#>r#?aVR8^cYjKRd0-U;wK;P9YwzRL3n{F9v^ z?R*7%3L{7*dC71rgK_YQ$*ookoJP_2lPGT?BEj@%nt`v9fP#qNr1-e?d~P1t{JMmF zd0r|*IZj>jDdN?@kHV+-eA)S{hAR7N7^Y#avX6tOek}vvcKAc;eyIRV&ksooAYU$3 zz;xDNZLOJq*ksJJi+@CdlY%!-ITrn%tl+pVT?l?sy+-aCCpklW&xbgSVeojs!Ka)T zCC~r;)Aamu7?xqJvez0icB|FyfKwB{^N)NOAB{P9mSq7-RJJ&n2H;~2P&IhchnQHK zF-l$&rN6o6@_CATyFKW3JAhC5+)U_#`Fgwr;MxMa(277M3p}5IogqkAQ59v6%=6Pw zJ-;{T!EiK$$HT`;=db4ZP!@oa3LWS9IFJ?-W|z-A@xsdwvuZujeRq??I1e|51PL zUZ4M~==t5V_55-m0fJTbe3O~%g1qsN04n&0<3m1LCMrSTLlEHJh7GQ5aRs25q#ZO$ ziQr?=sPknUCpBe3JbP{8G5Ci`Lmv!9R1)FNYDwD=7e&On6olqIINJpn^{w z?)#Ix_?Q*~W0^<tQjtuwl<|{&xP#g4cA>c?q(AV+@EDWfyxVLR_A3Cc zHb@D40zOLrWRxs_WzR2z&s9zd&o6rZoe%H8aCazbhi3_tdapIsU~8ibTd$?E|6mEv zpZWgcp^x+Ya;&N^4>7sU^X|sLkIlfR>+yIWj*f;rgTTvV9#SI64xtaF7$1#!QVa$I z*ncuAym0W~K8#1BnGZQm_E+ipWj$YALqu6*CsOuR@YT3<@e*uZ+)}~6hDo0PmvF+M z&hPK`SNaVzjFns-0qAEhZe-+s;5Fkdt2)tzzyZvusk^hS9!ihH# z(wP=fV-^QqMwEVFgvDbBoN46%(&$Y+E~9SUjI2cP+TzI{P}9-y)WND3l>mHw8c zL{Q04)%C{_ATD)2Umq8Nr?aWx%g!e-`PvlxBku?v4Ia$}pMq>o0sj!!ep`Ys>bE)p zP6|G+8Fn-;=8_qNVYpRuTUVwCN}`((qTf?-WC9fwlg^=I6`4kbqk<7hLj11-sg8#G zQHEGRFNpECfU1GuAB~`9FqnE`U%O`Gb}@L92{62OH#Q(4#X;aHnT9V)Gf|pWCgU2U zi%v;IJ!QtJ=O^-y)|QFNZ& z?j_;*n_K+1y?*c8w|;i(JEOzV&j@%9zOH;=1^6)*OunCTf4C2$gAtx3J{bX4v;c~s z&WtNKt~0}gD413=6TvD-bsByoifJIoPR%OJg{UyD<79R~%--DG%;sI!gd~i_2NMBIg$P7| z!1ppcAQI3X1Uv;1LT6$>NrK}DkW>_>(({v9@C(05&nO8%l22Xq=hUBa z+0Ve|XDNIBr5t>KzkK&6?|!rYsDC}f`ve3yE$}&hv5pdnr(ZVF_>(XU6O-A$o?tyl zKvV)ykw{g@yLC65S3{mhO7P9UxXB45ZI0?7En3QcyTd#G_RX6& zuMZv#uIo<$7QNFu^58Us#j)tbWs^E9j>Ekm@DODCDpi2MR6WwM9bOEXk|Y$Grt$8f zdm>4QiXejsP_Ngsdm;g(k~+oWPp4C8w=SUkO>nJP=QuVe*j(?9a|thaz9Rec{J!A% zz92B3J_jGTBWB=Bi&H(HI$we>6h2xBpwssJ83LdLAcNV`smSUc65z6?MVHk=(MW*E zg2>{?d)X~VDB*NXfRm&KsrO%KUf{$i6F`!HzJb7(B=CX>v@f)00ILKR|hTGu3CDl<0Ac0jqpMxJ4JzsX%JkR$+56_ms!@)!FrXIX^EBAZ? zpVjb8hR(Cw?ZRh1`+0Cs$%N;>`^{bM`4M`4v=sPf?fDfJ5Er_2#n{n6|Dw*=TXcgX zoqz-BIxd%VFp4TrV>QuDY1hY7q(>BUuqmk9YE~`FCkKZxo}k^BVk3rSq-eIAd<-LD zAyNehIJK(_k`KksFQ|oLVKOG(1T4P$;~adt*HXeR8)xnL}t>+;j@Q?N4e$Z7it=kUY%rLIT2(D?Eys*@5hGlS2D5$IH zkOTzH@in0sWlC$1QE$}wcZEU7?SSd5M8HHS4F+{hr_-rCXc_z}&mSL6xZ?DB==uF# z0sNQ6^XC$P%Q+risK5#bNWVXh!XM%Aj%}HjrJPb8935nxNd%aBQ}6>nlU$~_P?-Q^ z6IRXQ1fcNH22=vje(m*kMgS?xwry8@r}$8AL+Q1Yd{GmKo?i~5>LIgilymDO`|bD<{2CbS zkMWu-0U`$n!vpZf9yDA5jKK`>eV-EqDa1)Y-cPlQkdl!uI-X*9;DJ*UzRdY**tk3| zvUljg$QVJVEu`O%L-4}*e!Bndn?HH? z+k?mbKTtVdCj3m4rpfcYBk$AzT{T$cHzH^n`8#&zs)@hd3#J}Qw|$iZz_hHp2?Wcs z3Vp&vdo@F|RW6M=Um zfKZCDOb~f6u8&7UaGR}bbVD9a(oT6eKIH32=KTOwpu|D?y=A+FXOpRqDv&FZA4bry zEjaWLY=bTQo_VrQ;8RHOWmKJ40e>`j*!vUAYY6@iPg-;WfADB<(x0Dd7>g#U7-cYy z3q4n7^2Ke;-=N1T393TQ>GmuDoc?g!XvIz1tIcy zp2tsQQWu9_mF04>P!I^Wev06y3T#?}ctI=(dg-k09Lq zX)gN`d>I+|m=p;9HO%XM>U^D_Z1v864#B5jORv-_ewi$FzlQ|4VHgHrz9RvrNRk8+ zt@sIgVH4Uy2gi2!Z@6m2Aw<~u1U{*W+>4^wY;sE1tQx>z(X?Wrk~n#8!Cy`RR3%U&TIqfVmEfOYehsfD^nid{rGuq)_<;|W zX=T?{ad3E0xK}-21-~3_(=CGku=j%k_*J1TR)gmmd zFc>_758nR(?qYK9jz#A)RG%Pb5GOiz{w4VIr#_9~U*h}m&hPcUF?c+9U(+>^iJDbx zhSK?yDB)dCd3bR6T!Rm1LV&Urq@n95?n#0i2!3Q3)@{SI$PPL}4a_WkZ_L4?unY?c zz`#L|w$hR8K*kIK)|%OgUc2}jAA9{i^d8)Ye(!$vJJs_E{7V-}_C==PU+eX;^ZWfB z0$q(t0#uy$dGGwQBfuQ+38*-Zx$k?E@y_9Bcms)W6^YPM*RELtVDfpM=u&aF>lz8g=EUnTf;$E`r z+T zjMQ5*LL@~sAQDiJ_Zp}O6Yq#__d-AXU!mvy7YM_#0q|M7X}e>zfglceMquJLT9!4k zht%U~^kNU{^*XfMZ3yEK!YBl@X2R|FZo}?iH|u%=o^sanGucPafAEdLZqf70F++eP z&le4Riqj*246XVx*#MD%fOAmhN#3O*7|a+VaQ_p#_Rl7h$rJ4Cb+_SmsKZUe;iL&s z`YDhss2)bPZ@p2^yFYz@|9&5a`$K+Pmi$#czZ~-{;6;*sHMBF^k*G!1oe1y=OyBo8 z=mcmG2H8(+%g(Mn-=pCQ65wl?+qzM|Op-36rihBneakF!X$qQVJpfTEH*Z zw*3p~^cJps-F9ri+{611hDSqs!xu4snHD&Pv#!2gB>;K;n?JW*^!x|+epmJUl?Xtd zfAHdh4`)JvV}iP$^2j^l_qvAaz^rUO(jtf=k`Cai0jT_~R*T=Gg0Lh12nE4~cBe}) z98J&?Ja6LS^|onR+fL2=8+d({8P;X`O{leT9i-2U}*O~02=Yt~ZW%xPZYJ~aa zi`@A#*m=E(6d*|wU^)ZGav+K$t_Yf@@nnF-zk$;~dNSOD!^1;(d;9Iq+S(f5Q}ui(dH$?`l?*@S z!^;3Z#kmlGz^85|P^r5Kd@29)2*95+Rwe)-0RRaANC5tf2tdy{xo|xbEll>XqwDNP zQ5gIoUK1I(%zK`9L-qWV5MVGE!0^fNJW6-wVVuWH2zZolK2necP)HKY`^_oF4uQUP zY3n+UfZ(5Omq>s=J{q4#+0G^O^Lmj4R7da$_Gk&!;9;!xwG5R5U&fOu{@uLL1TXTy zS!;_u)6~;#WyYmH?)hmB9==@QpDO{>V1{+VHV?7 zuq=6AW$-DUYXX!b178I!^uRmB=Nir*A!%wZf9yIgSh@vqB<#d8EaCTfV%KdU@I4qj z>WgQuaJ*0iSQv@O@kEe=k9%UOyV)%)&A|U8sBd1K;6yO=BKWVk0=!ZL;8E7RXH0}8H6Cwo)B1oDtZM77~Z?W4QPr7ZTd$LxXtW0Jy_kNi9Huoko zYi0g``7+;f*Sgd0J1=V{H?xwJOeg7fCf!L(zDbmqR>!g1Ew$9NC{myyL8M7RgaCmo zpjd?}%--kJD+rPREy@1&#ObD9jWfIhyqP8Vv(% z+Xhut!7vO^VhR|V#-7=x337A^6g_D;VOToO?cLF#$T_*=n_()N2n4 z0{lF+vKpIatt_huB!Lf>Wr5)gG`%V{K@fyp3laD<-U$is>1<<|-^`yX0FmG@8_Z4Q zpuAdsYzOdI36LJmz*OPn<9x-SL0&zF;1Jm7u_XdbTWt=rp=;>C97x-Cq@%MNYSNv zV3pUlQqVC^VSWA*cAXLh;Z1Ch<2czM|8ZoTfE21m|5(7;aQ{cdf68CqpYpVuM z6>yBZ1_M8WZ;Oa*FLWPL07-@XWCq@NE&ruU9c_NIvOW+2nmbL%Je7gUy$Z~o%)?@_ z^hoh~qy!irABPuTdEL9;ykGH1@C3s3^It*mPFZd96m^<<(;FZ-prYR+Fbca?yH0@U zMBzRM+v23476EpN5hN0ej!VluBa1}%x~^?q#B06Zj~b2-vzACe`GqCG3opC?6XO%! zJ%RrOf?oKmm<9B40w4X{3<1NcoTYN$Vx&}}LK=faXd7V?bOG!V!F!jZ0KI|~z=?C1 zDSXd*zaOY5;e87dT29-3WC!?22+$2a1y%lIB*9CVFQaV#hI75E()R+LfaNU*PREwX zzZ0IfyB6TBAqM{ab(s89IN%4@ipS&d$}9680kF+3-dH)MHMPD8P_Na!Yf=D3RY2d? zAK5{ECIXP(pPoAn$CsyH+O2>f$r&w(JTJ)hGdcOTFp z<1JAXN#2>nH=E%#W3gCBCJA)S;MHkjH4C-?0+Prdqwe`4vH({B_6x82frCy23syeG z8(${yvmW?jn}Md}#^YZtuWA3gH-A6`XwA}{&zS%&`1{2p0RJt_-$CHc2Z51g0h3p_ zqG0P(ER7)`Osswx0hg)8v^!$oFGQjR-XrhwUkU=>wGUTGT=1!-*)I5OO&@#~ljHHJ zGLir<|Ay|jG;N?m;p<+7M-{?Aqov*8n>+fR3UG)>0tfyF2z3a27z;JV2~gJcviAUSbGrLB}@?f(j5-IC5^FkV#>)wM}BhbvrG@g zKngIEpMi8b4IM#-Xe~0bW9V^^{UN0h9T~DVOvKqrarOWeq<=b6rI$VUpsXWXU3NV`= zX7@&83FgvO&?6@xJ30#M_cp=AYv^nZPh{1((rSZ^BefbNlA}o&i7M<|c7N~S(Ki8R zraAci1}Q)vBq(5>M}V2fTWt&H_!7*kir>>SQ#Ya0>9G4~G|CU)pf}hK;6iUj2!c<0 zrh6BBH-fU?^K1%J9Q;1^KR&!gm?$Aa1ecn*Tq))?>~k|n091pGEq96Yr~nrSR)7|_jz^^e`@WvQ zA4z4vK#Zs&2{5r^a3oO$_9H?M@QLx?#LE8)t`jA2-H63vUd8Ke9S;!?pTI{YfFYIn z@a6+lf*n3bmK7W?V|B;DLV`pQ>=uHLqrq$k)PSO6qx$6ZMU-?Qh)7p>_UiwNBS zoqJk^`Ll08CYxvXrN#GIn~k?19oHc~n&pHjuE6q21%#0q7)qv~W@JHaPk<5OYg--t zbbbtu*0e+vf`fcv~G|2Bd?9R!}F z-m6sLz*+b~1iXU%M1<{z4`w`pL=nUO3|)RrYcT0|QUELT+^yl-$7&3G3KtFnpCUUp&f4{jHOOWsVDe-h?%XaxZZdzWe5aHjiOB;Ipx)pG zI6s$zg`1B_0fL@Szz18ZC93{|!U6x^pp^gjy?_t;Jjs2t+2qf#vRNMjY2zFvil7e# zfa*a&s(#(cAo#t46rdOIzTAsFfuE&(`ZT`3#(;OhKbzA%@F|vx74P~#e{&wzTN7~Q z>Ibla1n7!WNP=Iw{&DFFUUv=y-u%-!_~@t0@L59Y$Mbg`_&(C_#G6=Q{}vDREd*ZL zuj)hK<1@3#JyIrHh#yR}AowbdSB83n-wSw(y}UjiQz4T{!Sm-{=D<7Qg72z8I)2rA zwp>YK<#Xx(#@FUq-}?G0YsXLthzLrjO4ZN$NCix-7Q;)eZ^Y!Nce$|mh!tQaHv`FJ z(vy2u^&JZ=R7FJ{W{2elsQ?kd#36xWCAt4CV@LmOIvdk4!L)lF?L#*I&5h=13Yt_lU8O0Z0!lW7;)a+3VNqs^+{ESLSY69sDg#*S*X>b zP`j^#46FE^s}O50!!JEc`&(q=7q`yBdYNBul&?bWx!;6pdjYnjdHCoyK+QQDqVd zNXp624Sk!D0NSm+)*|q~iJ+V}cY=qzyXsx=we1Fekng!Ff*(!nU-d5V^bUE5sx%XN z?(TOlso&S*5%hEOIR?D9cL#V11=b*!3-6D>-@qKp&B57M--c|CSN_7s3o!r8d}wUu zSOy7J_3mf0TTkb*BQKTLx4z@{DUy8vV&QKZ&!%B*z1lb6Jqh4~&p=RB))M%v9r7!m zTI!|h?~1pOFyADv2Mep-KyVbkPK=~n32)j3U)$z#uSVk>{Mg>$w-9)ph~)quPb5+9 zqgb`(=>@Xe^NPrK20*4MM`P3M5Oah9@zT?Rv$~J|L_v(=B&xjzP5fP$M zwa{wm-xLM-nyKreg?>-&Whwqxo6e%`+d*SXgL=Id247Mc#-^sBpKD<0T4;mnaLQ99 z6;&l-=^)_VXn!J+s~!FzUGMGfZe-ELawn%S3y{kf@WAoV>n%`Wojs3rmLZ##F*$J? zt%=b5Z~t%;R*EHmz1%t0e)l`yr5!>pn}s*tcmqnM63f?KaOc-y>Fz~1H?{?tq>SIi z_mtR3D0Cvb#~;A8ArJw-#A@ zvWm@zKDgs!8Bn79nQH}Z#D{r*+5tR1k~nbl1}X-idf1NC3z7_W;Q8278MbZ#fv2QU z9fFigMb_qyH5l-{V!dj>+C2_D#mvbJ6wYz4FW$O=O0dYlKYjW%ES~0MxOC|fYe@wt zR?EJnOyp(}{DocbnV(grQ32>&i-v9t1fU`fG<;V`!^6Y-4(M3^hN44?*b&v=2B-2# zZX=H5k}TU~7mgp-HY=dFG?1k@BoKte2=CY1VekncmddvNMV;;RVYzb4705F-{C zlE5E!EL=@MFER}u6AA@x z8GlnO!tzi402Y^4U~YB_-u{)>;mXJB@JVqA&VFegRM~?6>=#CnbXh1Be*pE>OOVZ` z;4438LjJ^x^HI*Xiu?>!mA!9T7>a%a%kh#3wZSBy&Cek}nLiu>)M#(d^MZh78&%)J z=7J9n_goW!l^qh8SbZ+|ZfK1(1@dWuf$zrR$Jb%*nKN*Do@Yv3giG&Tg3?L}@@P9} zXKDz3G`yI&8{;#lt*Prb#Hp69FAlP==mCm(P)MoK%>EGf+C*&a&l|c2XU2~*d76V`(5F^7Qu(fSM?t}w+E(f!xCPQOt8&?o`U)E=i#X0bM z#L`^@mRI@vXC`Dgljr*@j7QXt*_%{}=!A|wE z2R_RadiaGAUQpd}=Cob7cG@aj{h2%v0ieU1{A7-0=}vi|=@NN$p9(M?jYfApcEMK= zNlHl$%Q=z3*lF##d^h-lLo7Gq!<aSIaPeg0H6zkFj<% zzT4y1D;mp<`x?l@egXW|zcgVT``&sX#qOuZRVc0$nFY8uu=vxzLEww*nv~$=>?`o@ zpZyVh_fP+j^_{}kzVWp;_C8O++Up6u;7w5!-@~?l8)*BNhay14wD(_MaVplZAv&T$ z9P!Ya98gg}&$lD&nmk^XWlXdJlY_wSks!Jr@zztsFyLyJgaySTb8HOq$KxQ!CqTiZ zsMl+-zER_2BNfme@G4A>Sn%qs1;>xN1ia1uYwa;_y=ynup=qmFp=GSjImkaZ2Wm`( z{HfC%flqG0m4Eqr_?v4cy!Lzs@~8$sS@;-M@6N(Rehxmk^e(L3yaHpBbMW?Wybjru zr=fA<_fYjv-8yA>@w5tOW}*;Nmz?6T!+?txSRMb?LVHsszc_yW=f=Kt{d$8Kx$5?{ z+Fc5=D+K@S;t3cuq=9E(#ACh^XgmG~65wvQB%l}>j-zyItTo$v%W)d*C>|9clgYAl zObQHbm8FTP4y73I6j7l9L*pW(5_?t^1D&-?yq%s-VTHa8`NC;Wp-Komk$`fu{2`P- z<$Ih&^8I81V6C*s2r!PB$(&@sQ>@><0Sh;D20YIwDi|+b27WL^e~;E4r=A?qPUlX< zUn<|#zT@^Oa##_&0~I5%0KnK-1~xV-ePb!DR`wq(N4=7~fO&rONId);Hy8w4aTG)D z+BkvlMkejct}Lqz_|ap$FX>2rrNRM=OG^m+nm2wlwia5q7x;J9TTtH6S#BG=`;=TVp`~)UFabgU9}rPhf$X3JXf(C`NBGY#RIAksTVrGAGwEbV z1zfOQ@ZFXHsPgNCLx6aUw;l-sn!kC!0;{(-L$9AWQt#_SY7G(UnAKX10Z)+|Q{nlu zbL{#L|MCh`ftS9@$6tEyyJ!WAF!$V9c26XrAkZ&kTXqOAesYcxV70`bmv3BQz*CSF zym)#ew2z+Pi+d|nFj5H(a=FY)@FO6Zyz`?mm!Y&HW|e+qqv6op#9V~d#oZ=-6Q z*BVt26%M2r;T{%Gq*#uRa6l7BxP+_8u*YjUKaA2kuW)^P-FucEHXtEwK|09^HJVb; zBg326+{uOR7dJAn`0+Ko;_F&U7G}OQ2eWe=_^8Ce8a*Py;^GQ?vb+SRPoIHS%Yw1v zGcZ1uWqJ8Oy$eeV{|sMwehyBb+=SBYGSs(D!duU+!1roxc<(R%n5{E+LWdWgRT;S^ zvl}2pI6z_qQ|N)q5N5>hR>F9J?v8bMb8fDlS$IaCzy7hw2oP1n=XX#z1Y#w{%_!rIbBc1_?1V-891?sxtO5>fNO_svc! zUORS#fRFZfTCRF`@FLQs0+FuPC&o19dCZFgV&la?1hDLZ*1n4@r&4&$GC8oC5&p0( zYbSKCba;ixF)sNEge5(n-Jjv)=M=7|Lz`Fh)YKHqpM1oDotx(bxVFfjFW+2bslqzU z%}v4EzxF09-Y8;TV+ug|F8mRc(FSr;bMWfd-iFBnsYabufBvMeG_xlamK0rr26hLr zi*#+8z}(BayMc$mSm!9uJflpb0u=DF2$nVwKzqNqcSy!y1c0c(Eb|3&D+t ztHTAp-`K1ftgY5fmg}1>?-|MN-03%=FjesSnynv(=DWbpJUz#karrAvIhd_Fhe!S@KUkN(K+$7kl1!nKc$0+OJ3nAhefCotFgQUSDp z!91qbhL1%X{+%d_-^4_ZZiSxLw%VY^8jyV|!R|GU1DZRLbw-30;2(b)R*+iLf|cU3 zcmK=Z_;tvRPq3s&q9-mm7C=N8pK8FhYuDg|kFLR)FP(uGfBt!vv(vM%bZZGJtBdf1 z_pW>E)obf;^`lF0?zvf(>h^bG>606#~zA1m?i2OI-}1(qCUh0yV@=~b%4taMtHly9g~^pf7zjY06Sb{ecr zC*!bwPX%4q_Z=?|4-dnj(dl#^Ao%C8OaZGh3Oeih6h#n@-Kdkfxo`C3b$_FfTg9I z@Z*nu>=9t>_!uL=*w`4$iR=VaaULZRpjzQoFf}~~FTDI^P(=U4*Ec?epDx~p_kXqx z)rW1E$*J(_GZN&F`zj`hSfU-$d4aVOL#*TLHQoydtl%IiNG{qUZv}T8Z#$B2_N+U? zN4v9pg2999AB#V3+xq4}*fZo#WBjl=lK*I^6NAeBkJT2_QP2Wm(n*BmkB4baF&y zefrMs56(?wc?K+?e7C^}K;eSFT3&*+@-kWgALZHrflhJmg_l@M7T`t^tw3vO4E*cY zuEVvTUW2c^_7x`oZnjKrQN`s&mJ|fM+rBbgKKP?u67&uHUWaFS3^MH$$U=>sXD!5+wptFX)V|O9sEfM#6ZmmsIW9& z6r9d>tNVm`YxBIn<*N}u9`|x3JU;M&&mK>`cKzeZx9M2?7s~rHKuvg;nM{2DvGiSv zB7+j}B>{ISMy!6bB}6)Jbt2Lcn%jxs!73sQDGKZuCL@5ZZ?kppuCBr==7akS5Fb7Y znWqYj0M)t%Gqb0?Ja?)MrPVs*PoyAqB#Pj23nT(8-Mj%m`lr8!#T)$4PMqHkr=!(E5WZkufXha5mHB0kOSXKz;$f$ao#6( zwJxrL%K)eNT|tOA*PcKKU7jm(z^*J>u)f)W|Ma5@EH3jZydlEp>bPM9DKS>nq16dP@522&~nH5ogm(8_X zp$#;)H3U&%*W}%ly0*!HCjw9w%f1AY66l*XMu1E2m%RSvrA3bf#hX`<09V;P5g|X$ z*MIx`3~LE=irmR5)_(QbW@y7L{N8Bbd#$#`D%fpJEO8l2+`yJpzt*buv{o@ml$00MC zgvw@pKLXg$O@aaA&&7`Z8%Tl^dkv_f^b`2h#?fIa_f|X-5CI7I?C}ZK)+=>p0W47k z40#T||Gjrv^}9AOclxZi_TsH7%uT1^^zIRoB(yS)U!|XHP6n8a6JEpx84m@g3_7>ae4mM@+a%R zgUJp`l?KCy9OXa!!JqgY-3~>6TiYhewSk_E8x;=4gA1x`p2v0?EJw=3Frli|3e3#R zL+(VD0q-5)oi*OxUS;jV_M-Q!e76MaHO}~%Nfl->)3|KmMARFTjQQ_q8R&aM{My3u zbV0Pp9&MilZqOJZLgP4TEX(l51n2jP8>JR3mUO7s|D)HJFPw$56VD^?v!SsBJcVhR zOhw$V+xyEo5n%RIb{fH-##=@JO*aMtMwAqoI+=r&+vT3mJw7#%1cxF3{|4IJg;cyb zUEjtI8%f}(SylHXi%6i=O{jcYhRV9Xq5R}HT>7UE*md@p4{q*69-e=;1+ymufFGcM zA>g}>+V(dbR0+%Cny?pz0+VCM#g$1iB6{KqPR9u(8Q2_R@z<)~@Rc z1ODw_Ov33r5_96e9r&R30>1@Q2>x!rMinS5pUS>PHlPeh0J4BWJ_qmpL+|GyN73{q zC|#SA_g5*fe95>N5!CC+WH$kLMU17Zkccagh{`-;M6?FT>NaDw`(bg#_j?6F6dcbI zC7#xf5~^NVwz$N*eGYISIBnbXDuGf|RgVM|*Q#To-7b~uq5G|dTM!Do@r&o+zj)>a z5EV|+7X599$9H?IZPdJL(X2p2PlTSQMp9sC3D7jYW)oKYhsi03Mp=PO+Yxyh!FV4SgR1pmM7*3!*W9QLF29-C=iphM?U2zN#v(;AOUZTthP$ z0rm=`Z7~uUSe42i)obD53by6TbD#~5VMKA-y<*`Gm*!6@>#$th=y@VDGkMk$@cF#| zNrtxM59(OEHP;T1qJ@XruHd>E*2XQL07fK(Yc)WLPxAAxTn2F6F8L~6PkLkLXLIKl zmdfASZ2|i$HfkAb^C!m{0lFh}L?#xC-U<`opdcv?#8pE#t}3dM?KPH>Aj;*o(KH+t z!1p5f!4C_Pz$VbU01bjquMd#{c9X%4rLqQ#8*K#N^!k#L4l@O=0<#6&wwm&u%_0HT z*YyziW^)+?Io(6n>w6y(f$zfAsf4b#wM=-dn&WK%d?yM>g2L*Z@~v?9{shq5OsDW0 z&|?4L!~F@sCbYtuFGluVAG-Lzf&TU%vHj)laa$Tc^oFAXE)h($99i;7WLkJH^7~$D zV50&Ef?xUF_uVS6^r^=B2>j){8tBp(%un)n&rd2KC+1*wI>6Uxn7cvny*-#!kYh9a zT?PkKkdi(Lgk)f}79xUS=^-MRS{W4}$5cRr%Y2+mf*IDiHb1U(555zG5Vx4H>*w-q~4ZwJ(FCFh`2T4(pvma1Ip0c4n( zeg@9WPeO8J1ihC_aTHa^kmCrdhLs%$Rk9FB9rvMvf@&ZH&YJpFR18rbK?q9NCcsco zvuzh-T(eE@!$VY1NvsxrTRe0=u^|ggqk&f=sJL4=G6}h36EK=VwJ9Z`W~Cr0XCaF3 z=N0VFotY_orLtN5^GdbqdDe)$zgnAt$NA~Wg9$*fwqZh|(7z3IMG^h{0{Z#+?gv(w zD_-cP1*-EQs3434Y&`ZGqOStI6v2%fWe&paD_79#d{3Wx?inbYnqWzxhAoSM?uMwu zv0@BNb>9!P5I7=%Wg?KWW7;mzxCR(C{3s-$z)57G44ZnLlS)Z20>}y{VEWi3f?x2~ zR@D)Rs)?TOO^&F~VUx|I)7}Rfnzrv=eX|3|97|%Rp>n_K^+|h8Y&a@l82hfjE9^FV z)?X;EM>HWjNrwmESHoE!vZu#DP(!1csqA72pKYLEB#S2taC(3RM5WdyWog z(xYF`q^m!0Z9tagedm~6_e22r*uUSC09)HOphbf^-1Xo9c?8FwG5!+sH%$RD!N=rj zjUBA+mI<~Tfw2)4bo7R(==y_i1(Z~QX5eGK|1$$NR=LNIO^m}UFHgeANE{|6_-m-f zWGQec?HX2}zlCTV8Et8xcW^ZkJzs1f$asm{7V%zi2rJ^r(6vH}6ye__$_j`b1m31r z;|e9yM3Vh9R{>e&yReWz0)mfQG4NirTQDr^U<}iN@^6hFI~O`nTgt)OW*JgRfBUk) z-)(hx`|`_k&#qTCzf`%WU1WPwqx-_qt(*CYup&zPO|Dc8$PEuD0e)P<{5#D5vim`O z%S1L0wr=rL1Ji^D_bcrF?8`5*c6>au=bSjQS5`S0L|CeQKp1F@sGpj`e0^5cGgr{jBP2Y;r` zAzNH3e}K({wzFQp;ks>K1aJ`>8TN(3vLpMB7Q&B9AXr}!MRBH^06G$hRG@7SLA}ZQ zYIue}yR`$C5bzQLUPr)>9vOlcW>qL0msvh_>NEr1jUywm&bOMYj76FsQ4uYP+{tQGSDD5b@9R!b(eUBXF;F6@{b6Mzc;Nz!o4Famo$sssO z5phnK#*mz}w;2ICNCs-r)lmB1=vn=Zhcyt-cap=xk-5C!~J3q2oQocX$#2KC5OxOM{+=j3z?pW!`M z1lo`2jCb~Eg;BpFoQO<>FD+1rZU0;fd z!$$D9)dLXK9l@BInuGPV>cIqH%xqXFv*KXD`*8vDmg8GqXf1{t@+-GBJwwbgsegAicH zv_kiNDZtj2{h3t2H0_WI#G^7M%74tS-p%{#j06NcMcrvrNB3Tr6hMte7y&Hudr3iZ zIDlH5>4Jp>5ji=i6(wHzqRdI;0&kmJ&KQ$hfSSQIH4u#!uYP6)v><&CS^%nsfvq$Y z=hDwU6#dfX>-eg%ffD63 zk_JKUY+;3tpqj5EQ3ybMp@@5-7bC#R5Z{+=R3Sn{=@{PH&~`js&0)XE-=CbrzZtNl zQ4T&mkMuq(eH*`JSPk`w5eHF62+Y9wCz40rOs3TD;0yl2?IU&VHzubh`zOF>RRIiA z0kVPV?g#a{M_@>e7zntsYjP9;Z|(Tt8qT#kgbEQu&^*&r(YGrw9M6Oo zY;i9aW0Q;k6hr_5pMba8fpxS}XeucKn~PS#ka0~2#PSsU{V1KS#Ie4XR~R#c@b5h2pz5G+AaxnomWmv z=Mt`>hwD2!1D{A>;x#1$cgJTtflnlm)sqNf(#u`pNItYtswE$I2B<>>3PqjpWnE5& zz<1LNPXY8U@N>Pv?*!6`^|d>!O(pt=5G^!5H@qo?zw~gINxrwjNn+iy@TF9fqvwrF+l3D zF+aWfPcRf4f{CY&u#<~8zYgx15yc@)#J2FeJ1l9BLsBQPdiP#K*UXE0Q^)TI?CU>; zK?$(6ZHDftI0r~7^^0I*wOYJl4WorssQ3MTvu!aFP%1L#uMxBYlyf%?V>RUEZdDry zaxmnf6s}QYDG#OhCcojY1^PNxdzP=OjDs@r0+Nl}hH3LN5+nWBSNZlb-wTm77=0i# zH#0GfO@XdkJH|kHC^2tr8;}@Q98VlG$#wqX~1YKaVuZI|usz*Ew-1-j?uB;&y_kpQYg5_6~OtSx%r+a}oqraBe| zKk*`bmbg<|I(U#{7b2;Y9VQ79pfESHT3B3OD@KPnF8#(K3BVanBp8?g5`qu#EzE!K zs(>4u3}Fw{TN_+b7EdKZKa9YFeah6PB*n?>#!FeRW z#r4hlKzJOA0AvFRI&iEYF*4X(t7BLQ-e2S8zoCs=1Zu}o0c=eR??nL`tro~p0aOG) z*S8UTta8DCwkfcxv?B)SNIq54aZM4nQ5{4jj%QW(YjsEPC z)<(fKeM@UwSXl_Z86dU!a4ocdbz}~V*jca@t^n>@RGFfP>3%19HTE$@kL)eyNvQ_^ zQe1$ki9Eys_ZaCq&`#G}T#w%4K8vdSI+aTNYJNKVC+c1JU=V~4MF5J%mWCui0*Hgn z6ZjDo6-m561TYaBHJJxPtDwYcP_1!QNFU|ZuD5g!z9-YRC(CR-nUAwfM@=LSzU%iK zcs~rY&Qg(+>|RlbD1i#!LBNN`{cFj2w>pJcK=9K(_)d7>cO3>J0rhpb_w5Q+!2m18 z5=<5HhlRq86PPb+P5pyz&)qK$O@J*VK%>D)aF{UK)&(TNdAyvadnKMhsnx)2HujvO zH(Q`8Q80G62NDrPBmjYLI|Q)XmZtzD`yeSysTdJZ^3Cpj7$y>ezf+NsG-Mw;PSq0; zh$sj=L<@Xm0y&Jo@pi$LXSfX`aJyWFGtcH= zbVT1DY_}C0HR(dIh03W))l9B1|I2DJ>l2`@KRyCL8-dco1RxLxh|8Ei#5u1SMsMN> z5(mR>*Z0{+#rc{H1D^%8%9!8pjIpF~ZyH^TG7=>IqQ8GNEb%V*g9NF7EXW7SfAvAN zzXc=vSAHOd=I3T#sNCN?j@O^EZ;b4}_s>QE46Uhsmg)CQ)BIy109y;mq{gV4(Ow>E zkT}ALB_atFlwzx0L%>Y5ige%$_V~ac_->17s=2Oly**u&qdog=+Xg`hqiI~ zQ6C^tN+I}ou*xXEr?#tNVKf=OS5pIj&tBjkI8WRM@E$6VPNjRVgTPt?0;@M&n**q9 zRzG#GWkv4OkPjJc{4hJhKW+yBln#>1NH{wk<34oSmLdq}6_i`u(9tH_Fr-Le?(D!$ zTZD)tL2LxAMQDQs++x~R8)Qiay)EHk;mZXHfm5&whv>7hC689HVk3A>rzzpPB47(5 zV!_7?k^&O$pDI-rWl->5z|$9S1a1ZI1&9a{oY!Gh?VJU&(n1s+U+*WhqW49zjl>X@qA%|ktBlWhokX=XQb;#Yk_m#7XEBgfYw$8t-gwT z?!fY@eWm)K_UG<9Iy(lm_sK`109#uq*CTOAB;o_l6?j=(z`TVy9gD@F*=&YXg<|vm zCX5~%_3ooXyh>#`Tvn!Ou~w0H6Ojl(AW^06Rju9f9+Z5N_~7%P;od(xYLyZ0)od2~5)t zkwESO-nLByZMO{W1yDEO`+>L%{C&pK^X@3$DY15bX8h3S-a_CBdwJO2a=_Vc*(FQE2*XuY$M4uNSbu`T^!$9v+WffYj7N{!us|wZ*f+3(S$QJW- zt4;SJw6U5Me1+J-vuW!fOQ;4mjuGhI1WStZ@p#J$xb2*ZTN=*2CJW+5$v`N zf)sYgAo#4Z88G55A{bb~iliW^xbo@Euw4=O#TD-T1tdV~sC?kQy1{ot+adyR@RycL z7nd=@?F|7n5m*`9{ZzmuL@yH9wlCQfMu!7W1TfKJ&>+0(Z)`Of_*DIGe(en?6p#SJ zwVuZ!I)L|*f2#b-+5)?Fs=tWfe~a3!t*wFZdgKJCZ|e{rwh@^4q27Q+^vBrz7UncR z0FCvJB(aiB4SjPF)Tw!})nSJ}CNy;u;v)&zv36j{RG@{G9F4|7H!O%t9R`vuD4?UC z%aVom?tqCuD`J2kh-g)KjX$Hqt;01CE8xitSc3yh)YIYbl@ zw0enM-ML$aGNy^X{mKh7Fq$wRrE>6vhyyxn9Yt{ZY}*XI|4yk0wqEA*)Eu6-+F4pI zE`M;Pv_#tt7QyF20E))8<`KX-ufD^!?IPMh5doR*ex^9zR(n9w2dD-a@0o_xMI_L5 z4V55{cAzm57^aT0j^r^~2wIelrOK2gnN_JM^F{HUj0C-upjQwPhy?820ht$ZleKEa zyN`-K_~q3yyz<-(Odwsit;8#5GMNH({EhNA@*i~fjQ=U7meS~3{FocIg*-OIqiw+-OMKJzrb{}{~NyDJZwCKS6_Y=PG;jC_!N;Y1cX3`)v@sVJ0AFy zD;0!fDi zqy*8J>^+YU`wBooDnJ~UNdX)sa20@&2UWl{ZG0|ZYcVpJ?Xcu4!3rhYpfM(&PpyCq z(OSL&s0!OZ)KLW}ul($Nc2D3>p2$IdRNw#m5p)qrKrLBJ5PU`u2Yif%QTyRveE+Zh z@txrOdc8i-c}G4QynBZlRUw&9LR<(_oVeg9P$lS=HN4IX%$%ev;pQe_k4L6W&aohA8st%_~yHR_U=1+ zTVH{&Q1%^Hu3mY31fUq37=u)|Cmo;hzl+a0rlcveC4lQmI1aeii1Q znStcdoHvw+Km?$0NuZFXW5kE!-S1;WXzUn}I1(U)5w2JjEv8cOJw6fh34Nzrf~|)f zc#4^mS@`O!^X!^|kAbe#H~2c{#u|TDZ0uD~MkYaT``}}D5eaZ8YzX{~jg7}kfaK96 zWP*o@VRf5cSBOH}yOxmv%8>H)&;V!0>!D}ZHa;r(^O`>$=Tv9^rhm+zJ!iu)npXYyH?#ncVM1HT^vxWH3V zkfOWbW8A;;(;NSf3qExmh5#=3kJSR$;iC;?(FSDMuaZFsfbmv5KKvbQeZ-s{yEfnw zfP#^rra^APSAq1g3Eny+cq$bpq&lp2?>cMU7ZmmJ3O_sqGBbT2AeOv7y zZnwVum+$|t3pW zcwG6tUSl(;F3F>DMgW%tjfea|FMqhqS{3;;_7n#{i|tm^Kak9^EHtzlWS;UX)-)UZ zSti50etWACdT0H?7Hemw#$a|T3z^XryU(BGYs3`}3>di~xeYgft~+=ZLm zyH&}jWaZulq>d#~88S=(C{AQJVNMq&S({1@{{42x_FAJ=ae#LLQ5o=JY=Wf|<;$18 z_wDlS`Mh9r02IX`;T|QWH!D0_VN3Z`e;!WH&3gBXi>1H#;Q<&2=lJCx z{$J(0WdeSK)-yEU7HyLQ-;V<9SNU!{5e1;oG*p3jeBgNqJ~hSGPU{wuV7mKxrMkty zuT&cz3A#g;MFfZgC)%7CiG*WGs_czRBobg+Ef0JSGzXqSK~ho05%~QCRXU*TbKqTD z;cE-g99Db|PA9ms+*n+?wYa$S&efk@|8uHYj zxxkCDNw@13f`8%Nzxe(;^qt-7ib!0`9E=40f=}_}2+-sTps1;V=8*+Bae=9TpiF}x z?m1rHFRuIh zI&dAoemXj2dXH6U2pSJ@U6fj@qrk+N0_M&RL}dwO7v;l7-*ySn#tM!J&@x&ORrtCV za77ZG$`%CP?_e=5SXFf!yDTgB!=U=`gODfB7tt|pvtO80;_E>@ZI*HXldNb zb*BY;Yu6Y8UQOg6ivFGrobZjCOBWVDDgHG9kGCt-N8l@p!m66Jx(R06WCZ9|fc;_+ z*$>7OC4kwsp(Zic(*kSu12H)ZUhxz zuQ)9D6i<`@{2;Z@L;@6%|BYHAL9oAG=R`=QJj-B8;DS#r4?DCTjkenk2%v#1=;-G@ zshSWbgev(OMxG8z!U2DRuP3LV)wpv{ZAXo%kRMAj%^1eyeS< zq_KyQ{a{26J@YdLd1*44bRY>;THN{2ia*oWS=ukh;{t-N=g9?gQ*=G8fw=YXqH(tBQ9DPAalTK=&1p!S2? zpWH4cQ^^Melp>>_H#JBlksNvp473~9PMI+J*8iz_QD7x23X_`c8KAO+Yf9tHRmpBn)v zI0?`Wl6%{M=rF+QVS_{hten5aLp+bS)0hQBlv+;#JkTkI5JWj#@gOGx*SL>(+!@O& zd~`T8di73emCCVLzP-wTUq<9Z5qr8WP9baw780V> zMj0Roi5zyo6tK^*@vkFd%NSBbRe7hTsehogBiZt%er{rH>-EG)Bc2xB z4ilhWFD+wpv(cz6HMZ(EC&sgSsaS933#pE_t$-yPfbc+FuS2|%^iGfn>XEd~o2VFt z?e_M*-`=eN5l?p6Q-zB?HBA3l2U zDZVfSpkO4Zq8+3&ey1RQ=5<~0zlhPT0N|SyY~J65m0K&Ywzl@z-YoTiXzg@pWYU ziKr^JWrHY+AP53jZOgl+@rn=uP1C^MF%Mi`u!O+2%w4>sb**j-a|aQhC7b*GkjPrS zuEUktyXNP_6+y_F{tt9MsnZFP<1lZ-E%1q6eWpt5_%!WVt# zgT?0sKE)SS0o>4ajgcUk%~-ehU96vD$|#x-$R(002ovPDHLkV1m0hyXF7@ literal 108813 zcmV))K#ISKP)E$s7Lok~8MuV(b$*+TxOm&jfH$ z6_-N_2f`gCVj>)KS2;|sauCR(HI9S8ImbX^%gNzD9atv^zUc< z?V0JGomtK9NcMc&HQUqk`n}h$-}|1hch6oBAwq-*5zah_VLK2ZLWBqr!a>vkB1DJ~ z;S5F803t+)5aA4kB&b5zK17HRAwq-@AcpNgga{ELLFXvf`;=OjJb?|CPb$wW`8`wb~r+W2oWL#10JhOs-Th=S=BnjTU z(LWiDf;ZPEc|8gcXaSoZmkABUx>s`O=SkY0!0Ld_5Ysnc-3VB7z>-urO_k@r!ZO4& z=YBdDNv6ZLgNQ5{`cAVz5IMWZUdbx&9&NzSAEzymA9LP8TrLZENJ7PDt}-vEU<5?R zUXc?+cWol85ZwJ_s^Yz*V8B*iil0D6qAMpfNnn`4a!q$<493!zEoDwas{CPQ3WwE+cwyz(v34;W&U# z)}n{KE+JAlp12=G^cHhwg^T>gz_g-p@|CAq@o<}ppA&g;UUUt<$u$M^i+*xdbWKIY z^#=VOkj1S93ZbAaW^Q=77twXS=z?N8AbPGW#oKMVxGMUrTrV0#d#BHPtGFhH;*C5- zKg{Dv0J7%v1UkfQ@{lD79Wu}%X?O-%p162Owu_#30oUV*EVlv6)q-*J66cs}NNq-A zoOPb7F%K>g>n?e3%TdU3fEhr*38v^FM1X%-7tKro(ZlUPKX+G9%zNa$)F9C&vI>po z8}k!n#e{qn9Y&qy4EaUv9gr19Xl55IRHV#+L&q5*pT~Gi;=(`fH4a^0MXS*m6@TcO zKcG;V7m=S5?}H2bGwWHkE+W^=u=#`>lE^wooVrC;8EAbLycOCma=3@Ap15cRj!$GG zSycI+xOj_L3TZ!)Bf^Nai+Po(Q2$n0{&;bo=RY%mPFuW$Mw~c9*DH43g-gCE6!9TW zLNbrfizjmR&?%#G^dm@h=y#0%CK|>6^1` zRsQyZJjT2`XAnRk8U&6w@InL}48yE1#35T3PV-W;Gzv5TyDTgt&$ml#ecwiSuCWz{K}I&*#q0IKYyXWFfxe9lV>xhUE@mUebkV)<$K1}XjK zCxz0QZ($;3MFB{n<7pm&K8`h33LSrFJr^AlQ%C;3Dg@{}n*H7dI*EjwCTo=FJEi>* z9NHwuxpIktC)z#ceS?%c$dbnNc|}!^o@&xGd8MQkS|>T_sBX)~eYOeKPt?+S=v^vx zkAQN9c1fTj0V(gGCI1n#2(5XN-&?_{9TFdj$_LxcD%J>5=0u5AN5nVDnq$@+KveOH zR1OQ4Y%ni9A5H6dA?NORb|F=y_*@bz_e5%oHCDhGH=9d@(`+1K^Nm==oIvv%qsKT% ziSi9GImAuIT8}he@v6{;{pnb-AXpU&oIcBgT1a6LQ2lI&-n2ohdpx(*F}Up|I7}H> zlya9i3x!rx$E(WUTg1f)R-Nv?oqm90*eiGz3pSEPD^&fQ$R#s{LRnfO2!%d*q&UIn z^|@GASrux#Dd@wrYXh*UX39b;7Q}YJGmNDSRM#A(a|L-wU#v}GU8g{8^x|+JB`26+ zB&HP)SqM2HQu*1#OH;ub$+2`_8qnLK7(@)m0T4A9-$1cp6uoU!t;OgU0xKs~&v`C5 z=z_Tg`pGDjrC%u2v5M$Wjj}7mEPohePDliD)u7(L>i=hEuan8GT~0D>)ACs8&9QP`MiOz%vmnL`oAKS)_ARD~kfErys_NGyUM!1C~$VDbii zccS^EYgRGE3A?ZN0f^L-=6cczkoA>rJ486@0lGi#bIs3Wg$?jJbxp>8W1ysf&a@-8{R2tQ`5v$#?sP20u)fB5qE+b8zsT_lAQHqMmW}Q>*7vM?(M& z4j%j69|laBN`E@JcRgbKU4Cgp?bI45Y1e?VXwTb&hyLGj#$Jh|Q}XAI9@{D8b$}er z@3|bPKd*Z3UpLrSnc0P?^b_$#`36;0QC*M67Sl(K|%B51}Ey%^c z{=CTz4U>%?fX5z8ILurM#N4#%xfeHRmngc*G1=co2$>L2ey*DK@xN+5`KXKuSaI@| z1IZpd`T~v$3!5Km-SgJqlh5uegRQxjPP^yM=I4^{JinvgUFOO;joOQG83GkDK_JuA zZ~GJXr(Dc++&*XCWp$5l>3#DLhXX&$!}ql;y1G%OvS4_4r04bb*FCnY43TV^H+{pJ z`Rg9p)wBEkGMKyj*4baWxOUb3J!PeT~@2Sbk1b@Lk^f3StTCLY|;^F}%7IKmjw_5H=T z2QV6d6J`TQeD~$l&c3i6k5CMHf4Nd?00g|d=HU4^J~#UdvukT>wXIb15KH84vgbhg zV>I4?`Q2S0boR&i^{)PJZRj!PFaM@LV*iPP_WQOcf9<2nBKDuqSo?5KDb$vv0VH2J zknD+44L5*3mmW~CJ(LaGf0OG0coMcR5qtpmfPMR-D?20b>)-Z|j*bSdR^okt)Euc9 zeF*}Dpa7Zjh_n)fhK?MgEp%<_GNz*=!5<)TPlA4px5eX2;+m~Y@V17AhSqObPp`DL zwYDy41sOLP15>I6GEb+q=l0hu4WM&VC#|O z6KPESYu0yf-*uQQ&cAB@vcFvxcnm>Id!$}UrMgq}^2&c$IeXUZoCu5sVyddT%9yPG z?)v_N7NXRmZ6Fi;5lfPj6?)usfNXww={>2g?=OyDHv`W{(x>ttgnSGuE47+U{kBgl z_iWy!Qq%~(U+3ipn77VcN~})UmOCHs4BS*jrG5dp>8@_4<6nxr&7fRT?tgp#PoDY- zSsyxbvY{^L1_TOOM?yY{q3X{E$%iaL9>4B?_lWJIQ2=z{f`YBs^0rEVx8Hf&wu0Fo zk4jL3YZlCEnia@dS{Ai5U)F4K zm12L4>C>k#y?JTiF&x1^!<>~Pa1|~4n}GYxNH%9{!D|a_4M1z#I&3iy1f|GHBW|s2 ztvGIpyDj?L@7vymP3S!!54u_*Oul-cJY{0|X}jD2^OliItL^Kh$XkOcoh4a{ye0VA zfBuYq{oTI)hPo*wI97yG;&WF&q5aX3#*J{@_OSf|y}$3Z^?(TDAGilRyz$|C*WODn z8a?2;`3+%v7h!@y^dSpjkYZ;BQm^)f?SdO{4+z_Z2)?ms(IVUfY>T)D^!Fdlzeiqa+4x5a&NrBw2tX9`GO{GgXUQ0No<5NdslxEdEH|qU%5*U{0DN~O}-bRf>VqkCI7PLlKq-?j!n7%akEaXDEu z>dyC<01w>vK;jz=_nMoVw}367xHJ}Yzto*rtsSR4xfDR&`eDivMe_15H59ker5|vQ z1y!BMAp!`hfR|9BY0AQe|}Isx!RX}8vk$`kmZ_5 zHAg-^GFHD8fY~2WjS;FakbvN5;F$P0mrka$8fW1iP*I(a;gm^J3YVghDMBEQ7XXet zepW~owyt?5<9px#-i!-p+;rnjc#clxbBQ0Kd>!Iw#=`cW1}-an#YUBt96{ynI7r3M zPOTx-A!@Y3f{l|4p%7am2UV%mV19})?y>gUYr}RSf^V!?wc>>rUkKZa2;tzFjV(}u zfvXh@i$F&k8GAd85FtW@2%hoge-D*HEx!R^-Zutvv>jD{O4dceu@WHy2e*IaqDTJe z%CNmC6>hnqF>DvY#PWC}9$|ZNy5aGE-;c7$n8O(Kv_~`vo=@{GoNd~GKoE4wSMdx1 zMHWTf4+SU|y&}NN_>)@Lxw>g}%WqxoF92CEqhUrRsKis;l*SUu|NXC(#$?i2c~@fs z`ucZzUVNn=Ok{LzXo)Xu1R`|>iWaNxSNjtW_N23EV{P&|lYOhsYLB^B%$3iUc_PEd zhK)(8J4F_IpTDKHb_#igYHspO>TRB$^a;(+x~X-y-Fn+ddZav|^O%!cpWRC453QNI z?8e!-b1C_pJkWRS`EC9ZY0%6`B;*$%1nm#>BztsKdZotBipjEk^3+M5o(iB>2rgE^ zcLWL^KmAFX+^msHMk!UsV%n0RM?h5YqvL@dS;8_ttk1c0PE%8pFNcqxIF6smWYYIh zJsj4COg3Xou(@_B$PqUZA=8A=Z?R-!{zG;{$cii zDMdGc9lHl^yGd&RNKYIndbKrs_UsL_Hu>HEX!y!3T9QHTgts+L2JY;yX>j{!usO}_DufVO z1PJ>FmkJRANB67!VY{I5T3FOJfiST{q)uq>&qVMW0DYIFs|W}o#~s_)Kk5PF4{g^r zhV4QGPe2o~dI(oUwO?L9=m@xR7x*H)-37M+h*BmupdtbolaMH2X=s?lPdtp3+`wYy z08)vMtwJ*V?v-Wm=AMDN8W|5&L}X|_i=}nDY!Cs8;oH%lHIrmKUVCGp)R*D{NDWVr zs6hbgXsfb1%w%d6#P_GM20M7WKq!uR7iVZ^a&H5PLKB^l%swF#;aw8 z2$$^cBX|UaxhFzlyFxmE;R((SHEd@}bVL!^CPhNkqZA>6D@cu#XAY{R$_(mu(IdLq z5G*}_p7UA?-hxik3ZFnQcz?XGzvhaWl&5uWAO!}Xg;eBe9jgeX0xmS1hEjfk$JGWT z-Uq_|km@Hcu*es}bH8{laZe)bP~}|39m|W)69^F6Cqbd3qa&3{rL$@8TNcf0$jy8P zxqDkTPLlKq%~rfE-t}Y`Q*8I^yO(}#Df5#o$==PmgMu_u@d>G|70GxkF>m^zuB1NB>s$p)TiuwB%6w9Y^3w+nNerr1b+rxIG zBxqmP1J-fB5<)!o@iE`3jZE?1DVuM3-nn@DS1!2ZucmPQ)CspjssP#CO0qk-vVCRe zk2;A=MXbV@%$+y4Yjaoos&=OyUyaHIJc79Yhi~HHTwi`eqhAwsSO27dgdU2_sSMAV z9F&|Si0PGxgM>iMx$<+{5AbWfDCkxyo1S1CKi-HhC!Gz{oQ~?r)j_E$5XNx}a)|~x zV?dy)P*s75i5hb$d)|UC>de_)B&CWIrBZAO3U)WRWm40bIpIANC?d2ofaN!w4oUL#=BIDE@g^S|kp6^W`yF8%LmJCw zK|p~x(YgN0+v2l|+xyOYN4F;X-DQp+JMK%TjDG;6)9K+8!+!ng>+7=zRRti6gB3`q zET{yP6`;b$xh84n>V2yhKcPwygY02*);vqt(0af(R(1YpGg%=)XuZC5^OKtsiCl+B zXVb~=lbRkpSmUlJc&GMIbG za>WKe7z`p(R&#|g!bu>Eg)jl~|o9T1jeKPog8y`9!DlQ(Idb zev%$wpy&0%AzFI#QanHqs5`%|piEE+(A(R~Tt`SF1qgkVN+2%b`}K0UZA;ql&}LbG z`VlCG?8ctAJalgAY+cf7%q#J)%phcFM8!WLiv_fk;amiciBq_^BLRnU=Q9vn5p-bo zZ(r3Owig93eOeX$no6Z`4`52-9?;oo=?z{Qz(fS5+AW*6&@1tUjr1$h5w@EVN&qJb z13oSD!EXT2m7NPNjvbI?0+zBv?X+pN^on~ApkI65I2^Y7!2`2@ zVzuS?@s`H0or+LKK*uYSGhM-N0ICW^b6~xyu2Hjr@2Y?ue$=dm3zj}D61eIjS zI$qxX^3ty@_2^GYfm4E{2iqA@edL=L)l34$Frf8-Z>$;}86{(Ico2`qnT=X9m{@#O zJ*`TXWbLalN{xVWas-T!G5pc+&!7Fdjr}pc`Sm7E&=>+BBb^<|WJishG%^aOR+;bD zOO5!}!@0q-=B->+^jUcD#FLPap*aA}koq9x$suIm)&OiML#ae4FJ5@@g%zt-gzbe7 zv@Mw4xo*B~F}1BH@l6XA&bw@$O~%#$COUTP*m3XLdu@wPZ)}-0vxc`NzHoZjUPl;@ z5Pis&yqiWSA0{088({Zz1==Q{L%hwSEF zO5ss6xh8O1=}*$Q)NPCFzq`KvGxdS!-}>xU+sY%~nzQDyedKl5u3g_=`|ZHbHGFKC zxsH#v;I#$D{NyJmodTC!G{uO6ou!N52$bUN%=-;6Z)qGqah$nc zioDHaGt6~5Z%0Q*1F=<6QDIDi;Yn8rd-v?kzo-I!4h;?M|I_}v7r%ql+`6LbY@2&= z=n$zn{wjjxj{f#_J;p*hUD%1E`&Qa%-Q64!(7uj*eeJFncf22XXq=F#cA3tW!C?99 zc5RrCIimf6UCEwuM6!sp|8U*qZP(;!ZpZFJi4D8lbFB4>X`Som8S~U@1Bs2l%Y7*0 z-IY2Yo_V}=-kcg^E>guJP*sWaXZbHTta>?JarE~qHQqD2gW}*xk$UP7h5X*9e$_Pl z3$tr$Yw=taOlG%|Hy;J*STR58uknSA@s>u9r@C>`bZr+Iz_r0p$0L)Qu!aa@fWiKF z5^ou&kz9OD{q@&0&?{{VrgyHJ@3!TtJo{s`&Tk0&5W%B!{d~gy1uH)=~bKT_z z`(xlq>w@}nT3>K^trxM!*3HFF2oSw!^nliD7*~(k|FL_U?I&G(c{z_(YGC$nyOy2y z5Hc3=tP7 z;3F-gZ(Fmf`Q85EzZ^}U_$13b(s%B@7!Q4KjIGBDR82YV0iVC{oJ@A~y@Mx$47?SR z9@*Awr~m4wZE{8Sqob!jIyzc9a~R96uU~dU!@oWD<@XMLj0axHDuF3)y{3NqQ;TMP zc5>`2i7bBks%bMnTa730{rPxFk2dG?HSNo0{Qb?17t~kb*FPUR>6DpP0~TCSpL}YO zxsdl0LhUjxy5Jn#20%7@A1b=z@LxxmH2X}ohx6}d|vX&MHf!j%B1i8 z(wejIq^R>GTH&OrF(>JxYwzjIO$|ff4-LqHw|Nrc@Z;U6$dFNMEPj^qx&hBW& zvl(;4)mkg%NK?0nES_yfvJ~IxAc-Nhk}N~U0R|3tFJkybVjwsp7X*G~*a>pD3lhK= z9Go|P7sG^!Q%J7GlTJSA^vAR*@f^@*q|jcTvg=)sb~1CbJ3GJW?y5@t>8gIJtEzuJ zyGu&4Rp{xdUvMuU^n(A|IcjWhc0AO(S+TQ-{h5q5{ zapQD-;fL2Bc(Bx7d$*6?xVayFsZoD%&-OR!`r_L+@yN9scW&Ql7x!UvqP^pxjmW#hqI}c{B$1ZFPnS`#l5u`F{ws)J{M3Fo~BEE|39G!GyW9R%s<@y;Qol#V# z{Wv&ST>DPzCh0S-pDNF9uQjCfODp0hkWMn+FQ}%=jr~PkvU;sbW-A~&T((!=*k9sj zG4?qz9^}=~9(~6t?t-g)J~(Wyedlg8t6mNBU=`E!-|)o04p|95YH@ut*>YVZ9U=hT~v;nx4JKifH( z&!|7`r2^N*bDMat8-ICl+m+-4KcU^uUaq=jyf1EQ6hMFC9Dw0*ecAT*|Hbb;cIj_k zQW~HwQR(MQT|1bi{GQ-n0&jVrco)xaCY%=cE-DjE5wnNpThh*-J3SuCf#X3ml?{sw zau@bn*#2bG;}Y?}V+UAa6d%{I0(>W@a$+tS|;Cfn$1 z&Qx;8rN)2IW;O28grLs%c;k~94en6V{FJ8u{c^PXYha+S=nszms(v{)L6F~9SA6pJ z7SrIniy*u^_CYB@S@aJ(*X+hv_?vR#G9RNKO>mvRa-qP@)8MV)z*|Rud%sjcZ;GEV zLS?~4w>%ET)UMoE1Q3Dg(v0c)6J$K@&8qwpiCpV^Pml_YAK3$l@%&Z%!`jSP9@`I( zc9gMsl=FYaoLm^YOmt^xEl;NuubMsrf|Mpk+~BWLVNgGrd6R*O48xJCdLYca^(WUE zprF>tA@Gz8bm4Ru=W;Mwia!3z4Z)1hQoot;qqmQXQ1Ic#ID$9}FWjER&*>+Mbi|Qw z4W3Vl%1v%!QlU*7WCv$nN7GkPz~F}Z&&@Pt8IVk>>*8*C#nL_pR{`jl_*im|`YxDv z6&YnzeS91=o!9QzSD@78!g;ly_ZS?PR`lT$|-3g$`LXNgiiY4dE+on@z3 z5`oZcKrQo?pEUOb61kJdT;1L1Hcxh(WuZ`6F-nX$Pq=qLjt`PB?*)L~>ow5jKED<1 z!R?ZDn0|M>D(>?z9w zbP$$Wa(^7;eYjafD+llef+mGGPr=W`evxA{Dzne}BBw2*rFxZO?j|dLYpfo>4 zR3_8VcO~F+*vDA~xh(WDj!q8X@`oZHX2`VP!Y7IKvCPdD!=WHN1UfSG8i2Dp8EwQ0 z;qQ(mU^)bl>cr;$npj@~!yp+l-;UUy0|!VznDIt(d<9GL-1{8bQJc1+=OjbnZ9T!A z=XN7-PHOuxDt*M9SN@D61o=2XUIVfMP?|5?RynNtyI_1cKbNf!C@TtFY=W(408xS@^d&VSm?8LgOOmqiGv=+d}E4TY*2mQ_cG>b zX-7&{48^Dp*>NZ`qH9_)@y*g7R60qNmNX$L+KD)gXu9tYkh3E9{Oy$*Xfyyb!Zq*rf4e?+}5e?#6qTd_2SGmjhO0MAfw+|W5a z{Y?h}iUt{}JZDjm$MLc-ppF{;q_v|zM*kpXku}YG9D0(-!nd|5D8neWkO@MO%AwI& zqRMS?JY;Wm$R)Q2_o7b+0Vh)&2yz~9{6`w$FPDX<@WJ=Tw_p|Kj?^mXuN{>e7!8;z zNnDr%^`e4RZ#ikfbHlrd5j4sjUmz!<6GjuDK=t|&W^_XCY4%2v@7T}u!eYs-PYD3H zEFv?K2bSI9oKG_w%odvyZ909^OB|St(kM&tUFuqueHwUlY7GEWF3eR?vQhMjX4DD$ zCuRpf&Q`>i%DfwYYMKt$Q1Cb|0^vi3Upx06Ihi{VcQbi@+FRQoR#qOByL}hYGzdEo zL~>?iAo2nTKR*Jl$LIXzMnqX8!?%%zpSG^rt9 z&M<+3`$H4tI62SAo5#{(e(d@yW`rw_n49#Sahv{1g0BJk-wFg2VKTXf^cc`Mh>2f9JBJRaWa7CTIZGV zR*({~}o9uNAs zAXu;vuwyCU;4jIb51A+ zTc1o>;5N>kOvwi$LeEEa6~{`tVl!U>&EYU46mXW*g}|cVLt)F|`ay`klFiD>CNf2l z@pGkt6b=!pW}Z_uyJ=xoX6Vn+2Tc{74Li!HRUMiWj8i`LXEX=-z(f0l zYL5a*8#Ra+(7MTNpkyig3F^*O$V)(C@8c|>B2=--y{zkxHbRzQ& zEXOg>CDL+=_>Pm)j4&46ujy2JCU?i-M7s1=F;rvrlSDNRExOGjuFyyx+7UNg|7g%l zS)|LHId+*j0}vus`0PMGTg=HMufT8#;}=2{8y+4ZUX6JhYhgS-Fpy44HAw*{(I|S7 zHW*5s0UuKvFWHEkeC<-pbIx-A#%Ik}Ne_L;Ha1=hv3;*Gqf7IV_qRZu!O=``&oXV( zH92b7xIo^DG|-W{giRo8ko79z)@US2|B1$@51b#z%Xxl+THYbYAmuR6oRm3bMF&v~ zDyLoY4X2;AFEdAg@fn64WGD-GmP8%qQj5BcSZbzNmj6Q`m{m5Tc1+gj zcbj}bKFk1VvBU(Myh}D2TzVgObN}a0=H>TDQ}l<12pAt3`N`w6h$!IFu|`DIl00~d zUpxf~LcwT2N|bO)`1)t#vd^NDA!~BjFxbTd2qxi6Pja)^6ibnjPi7q~6A8Z@CS}lT z0LyHFbHK$D*yPb<6bhJDxIqdaS#c1>nWoZ7pqbPq!z8@Ge`1{QN(%rBQ3E_tzYhcm z57y2-H+(MfRyj#$xwC9aY(?a^p>LLCovh_Nd<#RIXo~*C$bd8jG@`bvLBN$L+#C_k zAJwXy{24WbfRL{;18{*nnGW^RCYB)*LKz?@J6htXJWp_bLTgEXtV^BS3(FWx>Y0yf z6hno6m{FrcG?KRv2iZ6WxufGD=HQ+qyUz#aCP!#VN8MHdKAoaJpU~I`QMUB^K_uQn zH;So`(%n5yGTH^2kLSo#M*8`4+Q<&;(sfQ})W1y4Or9mSMnelraYMuNCYRVji*H*q zr73{URf|BEf!0EJ7Yl+4tV1>xvXz`rZq^P}1O+2a!eua3?hw%WQWi`M*y4!DUU--p z@kdS(M}4mdY23|oiWr1ZMIC9V!4ZT2GTh{xr=gE%E)lVCy6Jt@EVB!zoJ)J?z~?3> zb!aaxhp0P3R*Xu~2y>!cjA=#bsX*!N)k&Q{}KyqWM(1o02ZJBgS*W zK#aB=%K#?;FoahO`KfI(7_JY$^?mDZsg|m^NMnZvN`|7!U8VD0Hhjz(pQ<$(@nix8 z$xm~*G)P@Hmo{<92TVx8ZNi5@al7n^<~X*ju_a$*q(wACSeiNp4L?oHiK97jJek^p zhSq3aPDh){Xkkuu<|uP;c_I1}&e^fVdisa%OKgQGzj39xk4SQzv(bXZ%`jnRM(6*GmtEJxN@ zj2=G55oSz-e#%VYu>=OK0E|aRM8nxN+IK1U@%)jU2i<`3<%LH=%8weKF%4#{N+?3! z6B-Tj#7d4XeOTyj(kzX(!03_DCmBj{ za!Jy+rAB0UF%u_ES{Q|N^bk`XEHz(5eTIHggjD-hsIrfpnY{R+ggIsmjJ}W*FGT7@ z{!rlxVEVD06JUMh!&34>!YuDqje`w^z~( z2M=$Y2QdrPmh+KkBR_p+3iCmr&m3ioqJL%V%l-+hi7+8K5^pwxZle;TDgKbC@JVWL zDZU62Dw4OK+fgn9mkf_Qf{aW-OfEa@C^!~-SPY7SFO;F$wl)p3D>oB3 zSwMz)BIR?>g}!U;^adp1%q5>1FWvkWs|x}V+EGfxWeFZn&@Z-tZ~KS=DL5h>v;T#D zbJZ7iTGMF{0L;|>1vt0WPmpFSGrxk?UkU_O(t1}LyU@}(Vl(J)a(ou5RmR^n3}`M9 z5W$4Vgo~k=R~+%&Yd?fE8Szo3NQ$-!y=~D3Z6M|p?IO@L3B-tHtvdd$eU4G&Scf!# zy07>MJ+n{}P}G^DuWwR|x4s8t(bT1|`(qbHS|u~nEGT$%*^}qXOEFF7(}|DaJ2c}C zi{{XI%l-IhVR9tt)kNIqFR{(8f)JfFRPs>+H^`#P0r$4G)EUwhBQ~Kh3b(v6?-Bip z>GP1hJlf975|12?V-gckvDcoxblg7*_vM-6M%jehlTuKvKv zfE_WbxdpTOWZ!xm5Kk@Xo5(H70W&M2Kg2=tE&&okY~#pXaT|p(ZrpP@m3wxA7{?f< zfIt$GEL}!bxwv1u#8pfN-+=p;F5_TP?AvVM$6fxNMbt>W}8n7 z8K&v{R)qITq66C6uF>gYRb$~jflGa?f+JR<9l5JFFvf)qok&5Uavccyjmn|X;sdRV8khpev6hOuw zpN9pKfgw5FRIfucLaGc?QASC^P^ANsoKZ0{R5e9Z{#XcE{(ycmjfg~D&g2M=g+w4b zBwSnM1=gNx5h--5W3ML2IUFIb=VpsB%?hP zF^i@&HOjukhf$(tXU}ecba51-`)oz%whVW)3ZcYOgfaBa6zGf$rK@yOoeYu7e4d=r zMIpw3CMd&8pZuIi80tMYe?+&!U3U`#m%0R_VR?cp6A?)iL*)Y@dE$HIC{QHK_9XN$ zphn}kTD>I1D$YYK@w|#-!q5Rp=%+;N;vtS=xQ)IpDVynBrZ}LGP*Lq1*V8)Z2SYA; z&4kQaTvXPM*R-KL0F^XHWdLY7PsD|4m=+fFv zx-o%lh=+=_IR1y$!dLQ}aPr~rppq{&Ll#5IiS z)8}eSSmD04MA&h?Wgl?f5q0CB>P3Aro=a3XG*-koR+v@{`5$A~=RjpT4Pg}#j4){i zX=}n|ENGuW|I}&(1L%D`3zUrlr5OzighoEIF!3N_f?v{^4s-Fu_2{v{(D;(9a%>rX zLY4z$!a~G^0?=CS3g7rfGAznnWfE>2`Ai+atE`XtLsaHr`2dk9V`75bLyJ?;k0;IY zC<^zp`~5cvou|lo=}N*EgN$(JTYNJjI=a+PzpdFwjO>e$j|h~5R3}5qC(A=-7TVR_ zj3{9O()+kF9v$tiY$Jt$lw-Ic`7#$raj^GjGJ%^uEQOBUnx-zuxCG`&G>O~>*RlP^ ze5%q}X%laVf=FdA4}m39Lhtj6Msh{-;TrLW=VNjYImRDQUQKWb9(3wLXpKc9VJoH% z@10}w4tCEJh7-y1jG5mH8h{(7Elzsse$uEIMz|kO(-te}xnRXWHAbUy;`xM@Z$hrC z)4QAkkva+wFKD!{MI>9sIX?OGO>PRH91KPw^dF)euq;k$0Kjriv4rZ6?G&LMiIRlh zYa#FqVYBp)nswWMrHIiJKp$zq{A-0b2L%rtBX13?yg`w{5o+u~Z~lX}EO9A{x=g8p zZL@Dip`XXgJqW7Q8u=y%pmUx06qqR-IirZimsLDRs~(7-_Y?b`G=1^7O^AywC96QTo3Qt;l|%MnL+|hk?h~q7iYh z1;5tjv2+tCnomE$3g6J!-0@8GYnbK}9wGF+NMfF3&(nYQ^JT6dIhNoa|0vZQ9$aSX&ni3~LguuZn zk)0M995$nB4WQaj0!XG=T2Rr`L<}p`VYMeIk_hE3bu5$U_NegVfZPWhhaBIrt04Lj zytnO35u~MAg+s*=8Bhl*{^AL=&NgWyvXXBnQ)N7d@hLVp{=FYX8nOQXV-CH&n9 z?E{5=RS821(Tv7OmrlZI04_R+q>;MXC(-2e1)zfROc)`Ex!A@9F2mST=Wty9GUF0O zbwrVGV>I#fS^ONCcaLT!u!tm4%L~A0dwe!O$RZlDlphl1APw!rLc*f!N&3U`-o|EW zbe2)ZC+VMDMMC>{M7YU5+z`PFm3q%<8SaAPAlw^o=gDh;8{aIT!Y<9^RxG*XgazAy zo~^?BK*m0d8y`bi8PUtVEsSjzF>zG9ew>HQ<;%_>26o$MaI_8w%}(%$w`b>W+)kL< zg-u4#9|0z1!$t*lC?;9)|_m)L;MX9yiO>4NWzRK00Z58x&%cy=%+5ka(+=TNmpFU%nVOufpJa>u1 zB}dGL5dHp>K%S($?Ey*+%@Ow+w2z-=0XG`Q^j8z~!^4fR4~o})#ap68qdz(y}V)B^yICvL18E%o0E?*dNHshM1lQk^d-HSvP0t-lo!Kdi2 z!QmVea`NDj*Q26l$uwcnE%1Z}q*Y|ZQ63uM5kN6Uc^Z5HMWdUl+#6iKH)gReNyWmu zlH-om1GP&6*D}c8rHEMxlP97;CokMcfxhCPi~ym2c5ZTqmfHrQ*QCPj+h&9g3JtrKaB)#&C3nrL*9P2F|!z(mJ>^K5WWy+Aj2qhF9a2 zLkvowc85+cZR{sXgx}W}QbYkjUpXo`A)((?XD2E|Kd68x+hJVIXMG%6os0bvhH_9y zIRu}F#R-uTsIXvu{5tsDK42B`Zcd?$*D`za)vDEpraPHJy|RGt)}N_o!g zRf@1GVZ0HTC;_TR?h40eg72ukYExMj@pi`|WQai3jorfp7%^nTKg=i+*~iE62x1YV zS%gOtAxnh5VWy4P!Vt=flyYF_{h_*)ZlzjY09Z7oNUbX}_Hvz(FcgzcC5;zL98XLr z=EVTZQgZ7qbr3((ms4fltw~wmeEwq)+a;w-`VrA+xVCjOnOpAf$Y)ZlVb+-@GAk!z z5`li!eCAfM2zki{A^LeZKF31XPQGGR!>s0!@3Y*3$V)poZAI$=cpV)#g;X{&ooXY> zvl-LyIjQ;CxqT=~yu!f?%s35E9;*?J!cvC2#986rwv;Njoj}uarJCf-h#}n!tl=dh z1;%Mok!ACfzI9P&f@VvtvIb58cKqtTAI>$k?*is0SGqB7v22Zl?O`<pph z6epzrJ%p8-Yc0Z&&fPUb5RfV7Cp>}4B!rX#lZe8(Hj^_arO^HH@&xTZIa$ng`z;rM z@0WHDN1IdFuyioL7=OXVCfwT%a-O2s{WO{KLv5pg^Khe$t8bn3F;?GCUrKlbHHJo7X1wg{B7O zNhXs_#w4fF*VbF~W^aE(w$U1Ti5Y*|tD4eX1}bTZD$v&*rT6R^f&r`y#0XUOUV`z_CL8 z7JIW;B)!}`UHksgBB`-t(G6?sAnWVpVZif|onURTY^gv$I>J$o0YkYC+A7Eg<0nI<0Vdx#Lu=zOQ&d(%iSbb2t@^>RBSU_& z&?rS_1@aI=5uJwBiKs&7F^7f>xo2+NPn*NH8O5F#02XqsFl9+k;u)P06d6v7?*L}+ zd!k#X%S5Y)a5={ZaOfvS33TI*`_)hYJPNhQ`3VHmlTO~K`)WX;>F=9Zs-O^@*TXrR zIy^JXGap84VMZ|Doc7=R&#x-*UHR(HQ}5qaKUK$$KlT2Hu6*_891C{gZ~XG52j z>J8hu^3@xQg?isqG&et|fbP-ne%_q9on83OPkjLoKJ`;($FJP9o!|J!k0-)r)DZx5 zr-*{amk?5+Km9?NHC6_eYC!Ovqk^2$fXu$31`q@R8s&4m1q)LXIFW7+HS;CPXMqxu zrJS*ox$EH6ovwOtt4KuWImJF|MTjiymGzuEgTlP6t1?;=ql}}Uc9&cbum!Qi`Mdx~ z0AxU$zcp#(h8qFqN}ZBcl9G@%8I9Bp@=>8o z-*`YQ%eTokIpNx09;)a1Umm{rhkNShb6=TDd zF05YusfQoEuui7KbkB;YxG(a=x9Q}X$_Jj-fXFKC=eNSFlB9yr$C&<}Wq!hh5;6A% zt6R!CxWUGF4gt9&g0)BC$iA-MA`OFf(-@sVH|DNl@bI?;<#za5rT%xMFU^QbMSz=0f&GqpG^EeNGzc5{eS& zv@PzhTSm8{<_d;VPm2o|L)P`PWd1^3+u7H&{@fqzeD0;4&%d-o?zLIyFKI=_pJKV6 z_uP~iT=@$5XaC1lKcXZ-y?^5$KfanPr4FSa1{|U-cYXo|6KBg%!ukx+KPhvJkwVbc zc7-H$QD)+RpwfYIqBJ|!Dn8O=%ZRt5!Xc3)=+qD)V4MM!;eM?&^tUpgCp1JvWk8xD zV$M1>l3?G-A}ykN7a_zZ7{W5aWFfew8PXw*jA=$PZj8o9&XW+TNhV`EJadpK0f2lc zu^&Zv<^l;?5svs{7oi|~5hjsxuu!5sz6GK=K6#hoK6XqX$3_=`!(HU%VI=iKUD+6` zOl|s1?VHVMH=^j@R>K6HxOTM(x8lC4Y8g{G{3)ZGF2Y@+a5?D{>ioobv=_sZ6jQz}8L`7#iGD?`SNipOlxSY2d;QJ=n=Iu*{_gi?r zEA*?Gs)$NlWr!gRaUcdgi}*gmF^LEsFOR9sQXR}C5jr-KqL`l|Qk0Qzc%u$={J1wY zdAG%qTQ3k3{i#^wItc^HQc{M`Q$%XkA>%CEFa8ssRUu?X(=V-5I)Uo+7E(tSa{ELd4+4=VMhtX`@5BMP#1sr^6)a@eNL^S;?F3pPBAnYf5Xl>A69OQXI6eJo>9o<;iF}^9OYUcp z>W?%g9!$oDAw9K(RlKG+K~-9dA$Yhdd{s%R)7KUW9VlZ;OZ1avNc>Tw(O2elYox@S zv{omS2oxYXw8YAS)v8Xr3q+`~Hff(&+NYYa3Fg^5(#QF){-;;f`^r~#((_SNYl7+9 zw);E5r?-Mp8@@l<-7VX=AXHIXd)#so%?Cn=Xur=E+R{*MQ z-e|7?)dMTnMeAH`hwI?7XHdDaB{t9T_JDT>dc2d1h2E~NH-Kv6?|SW#t6MenDN+o)M3xO!b{%y0bi<3V_ihwf^vHK4z3WT&2} z0yoI{aFI}9T^}w+c-7Y_s!|#frUb&haG>FCp&uVAL!ffV18Hd3Q0t1w;C}e3s?Vez zHImSuaT0hqEX8EFmMSdEBatmL!e(sBQWRn{Fvuop8Mb2CDSyzC%_h6bX3!ddGm^OU zWBEMfdBe6sMhIqTmH#9&Td;5!3wl+b0tU;Wyj z+WzOi^on|a@hh)P2jt3EwG6!TQ&*n)z(cC@)CbS0hdhwR4Wemyt&qQ8Kxr|O0h@b8 zNO_pygG9{N*T}GuNTy0E1)2AzDE=BLy zrcBXU1ubn$=JIcn?aFp{i!;WCk75vsx*XP4b)Y~X57nbO3!&$0?pNDotv6L2GiBjAsvW_~CO_WO zGu_Q90T7)Q9#-gm>w43UudZ$$-tBm^D_X4+n*WCW2M4<&|KI<ixwp>xg~f z3xBBIU;cwvC!%!a%QyS?|CrT`%m29+iQoK{$L9y1OQZowa7&jz6HT}@qew_%zGFM1 z^yZ;*@X!u!iJ~wIq(wh2Lq3(PKWI_=fdHJed3c+&8}bj~d<6HnarE|0=K1Rz&F8iq zSK8B=X_)?5Yusu8pKvww^Rr*u`Lk<>fApssk)QeE37~)R?GIhNa85mIZ(Atz+rhf1 zPZatd{i$|vTf1~{XaDS34SL?K5kr67r@Bw%!qVS9dc3hxu^4{Jjvw#qSRU_l*_10= z)yi2tqg(J+YXCP&;2TtD``EVw^py-Oj`k-`@zWpBuzupl-l^XI_G_IANj;jYf1Q}pTD?qrrcbw)T1*2GOQ;V)=QH}7!N8-020$| zPO?0{@fI>F0Z7$Ca+g3_+yY;NeaThi2kj(nLI7AGyv)4kE2~}0CYOx9GIYl?SB*Rr z`6VQze*gpXWmw? zzfBKSaID^Cb*5Zd7lrW+G@xsfiM-RuUS%Z*&3fPmo2)hF&XaPT6dSs4z+Hoi|2koM z8l!jC)}TG!J*&UhWwB8jYbC3M)W#V-god+fqgsDN@3QzNy32|zZV++=WS{fKMhi}{ zx;-RHpIA+*vvsFb#Gt=gC+(g7-WEsoYDY>FKB3~a!w7@wobmRNAr5zjy|~oD<(-aX z`8K`NQ%^qf;lH!>`WyNtUVh~@^}P0f?VVoKzB8AfzS+qXWoZm|h8KjzHk1?(_L9l@rTc_6Ag4lk?8FpW$}WhHzxP0-#G@r@5m(P>$@stbWg zoLb0b5lng*o08F2JE1_gOVFz1CCShYp3yUKwZxtCekMiHix<*RBs#QvWuWdHv-BtP z+VB2rML_cG7wr4y%vHJez9$}g{}YcvRVnn_k(%rs{0Ap2j{eok`hYQh*ckNd*c5Au z{$2p|P_eG*PYn7E{dGIFZRt0s}ZmRcUv8T|l?Wp(4Hmq#(;~n(~ zvBQdOw;dRSJKxH!syf>XU?kUbW861xw(=}5X#ivC|qmnkNm`YHL!l-z3*1<&%XH8FMjnk^^iBGea77H=KHRw z_b2|25rbcSeD30<^ta6xqt9?$tvsu6qE+4>5lIM(+>WElmS1UJ00gq`k6Jho zVzBz3@8z=0DEfs=8a z$V_-43YTzpc$jv?IVqe}#Jey=|7ExSFMt1rdKSEA!2@g-{qO(J9@9UHRs3oFZT(M1 z&non*PIG)fsF471*oUxK1M^t)5A;`0dq6t%IQo~{L|oSoJ!5`vsK09EY;%08?FPas z`YZGUJLE#!)abVyFD?451{@jzQ0^U-C2tM!tp<>COAA1|%a3ns56xOpY?P&b%-Ve- zc8vg>txlg;^jD8)RaEy$am`(#Qf8$X`|4>>K&q83<#7K4`TV!v|8Diz{=fak-sisX zRonmamtJ|Wm!;Zge&2|}2e074Pkrd2vLL_p>lsy0XQJSBwEs?EO8xygwr>UlDi9)FQ&h*1e&S} z;f&XV1~e_NR*YCOXpFHssm(*i^9?e{+ z=-(b6K-ChqrXN@2C%V`m60e=CYsG9`BYbTblmIyDi_>Bb|Pq zSuxxfz1jY*R<^5CmwNkJQ5NPgt6GidyLZ2(o?6krx4vtcrxxmXb3JG6^gDG7`5nS{ z^`o6W57jyKC=F(%)N}jb_5-+4l_y`gSr=sUeZ4BY_eVEA^po4a_FrEb)1QS9u-RC- zdLbt5MFg@D1bxFP4es5b!49#?S3NV|q*<^q@4C?%AfTU9pfbb=Vj;c=;t!^TKr)7D zgJ(imynrelZ_1pO_{kD^$jn=!`6N7S;Vg&{7cr~~x6usx>yv%`<*yGvq(1J>&d#fU z^6EeOFTXLI$D?2OBf$Gzi!gRY7>EvGcjQx-8X@6c9UGrkApGSHiG9QK`|w5fvHTS1 z)@@&!grh3MDn$acO*_6Y65f**AvV5M9=a+WAUvKi`V}6Prmc)@9(_! z#^Kb>7fb9A!}p=@=0ElHQ-A;OKjp{y@q%}U>JiW#WyA0kLk+YTcKM1fe#fSv|a z(VQ?S0V)7CIxs7@pxkP$B#2u??h<)-ILnc~l6J9UV^Xg6%mot$W*}Zsb04rp;OwHP zS+@t4>9pl^OE7byZl8(0-p^)#urF)g>2V_i+GuG+g`2wus!zAz3mY_{HP0%R4iuE4 zUVFG+JFjQ9+RuaiYwEp!q>;Symp9e>&;R{jsP`-1ctyRhJa@(KyI3re_rB;BOLM@t z_g>n#uw8%hL+3vEch9Mx8>j1ZF6DBJhJA?A8$u;05dA5V88AP4Yvo{*wF5duJ)qWW zm53lP@Fe5_LrVxMe-@$!gOMOP?2x+P1nk%5m?knoWaA5p*@fo>0x-<^XaD<;U;3Mu zwzqY@Nh+6Kox76JA>-*HI;!2ih}5J@OgMP#!GNs8wrEt62Xi}2WF zfAZs>RPQIB{@ec3-mRnE-K**`sB-kz5Z8!o2gbQus#tmEk^VrcID7h^wGiaT*ZA>u z$=l%EhW>)@cby{gepwsKi(U2Tjq0s(RS44SfkMBff4Q%X$r6P=ozZ^oMd2s!eiyhwxqdl-)WnHro24k^v$F$X!t5YN^m*5=;vrF`kpf z8`>*nq1@~ZQk`L~5j-ak2UY`&e6Fj9w?|H8ciZOf;!xf1A1WEx+WhhL&GYI}pU$KF z{19@u{>}Qi=bp3ugTsR>&-Z$8<;5%amJhGIy03)gGhev*4}awqKltg7JgnZo^S?fE z0z(w#KSbysjo^yFY9T{K0p3rOsE$~IkO2fl$O;nHJB!GUQNuzol86{0MHsSdB-cdV zEQ$C$-|X_aMYKoUSnB+v!1uvL^Y0WgN1jAW-++zXIKP~#zqx&XG<;r%Y9@tj&_sbRiD<=R7{Z;^g>;pMaj~+MZ z$2)S~sHb8rDbARiU03vnO0VV3ZcqQHRjb?ntz@pbyVu^`FHdc#%ktoM*R7X>f_}Hp z3-$E7gE0%@h|>+=dz@|xwn2(ba(a_2uJU%z+fm1~9i;(6-Y(h0z31J*paCv!{Pz3_sc@Y}!p+v@%K&wc)$GsmVMee7BF{`5zU z82m5u!~jC##}$DQZ|fRQ7}0-(i_yZECn5uxWMdI7MttZZF~D=WWvml3CXjg!i+LwP zZJt=L(1{q+B7@_kouyu~NIWJ^Ec;TY@`P7q7srTyX)nP_HBNX~=XKU-? z?ryIEivD08)n6=jh@t;l{Z3NU7H5`d3Ss8G3uSE=s=iub>2F(4e?`WQcmYu8uU32Z z)tm3Mo#yD4MZbyh`r5iCdvmE(Z4#i zsR^!^@2Lm4*_Y`ZiO|;!RvKyRS1J0Nw?lTfr!6RvXm2VFuw#eKtCHwc_nTuLSbQilvqTv9mbTv8va4sjxD@S1xY<@HzF&On|4Ke%kjRf8uf9-@CE* z#V>tPb=3RYfAQ^|n>&Yh4o{R?HZ83f5TgedF0B94|Msz9l0~zpKS7;QvokSjedSWr z2UjpM5(bvx#);@ZXJ#=ur?_wCEJZ7uLF4-p0D<0&Eg|*vG1!UD%$A2^Iy!9fIBa&D zSQH4oTm%V6qaAT(b0nb>jidge8~U}u(KF9qd*=D;*RCIa?cePuyu!B^tQ}bP*rmrl z@WBtL&IdpE!Ap-_+Ww*KwNq=@#?kQ+mBTR>-NN^8+`6IOd*8Xbf9vYuo!vD!w5)HA z59>ltE9>pDs6}yBpS!zt=9C6swQ{anQJn>Ec1WduR{$;$#Ww3Jb^)be0D|_e)~7F+ z{|!0%2BA>VLqgXSyUX%46k4A&7CWa3B@p&#A7j`i&7RVp#X^T@?M#nCR&Eg}`#HrX zUtAN5Z{xVJN|Uq#18%h!Tj%_U^FGd%|`rEUVMgU}EZgwBUelOir z?+9?L6arwKfSP9F+1*f^HmgK*?jE}%(e9M>c_`MQe1uC)+X~dp)y=WJ%Tui}35C+0 zTflf(pK2G^$>CnTx~WbF#s}WKe)yeN{{7yWsy<(z+FD)zk^UaZaE~}2B$ulzz20w} z-Wc-W9ppXldC%d|;otlDzqfZw$N9ByzNVfV*Kb_8a;3Lz_Qnak?I|ota0b2t>^|MWDwF9qBH>0u1?b%7?XxV%g z^=Ni(G4-W$fi{Jpql!f))>46lT7uT^#)`GDNv;HUpDQx*cUU>bCv-FTJGl`I#54FPWEWmoHzgtNQZCF6;isF5^Po zs5cJp9;!#X-xmy794}U@)!5F?U;Jsui9)}6^!x%uci4X`H2R4V0AZ3t(VrOf+waZs z4WKP=cXT|;ZBh-Osj5|lat$&Y#g%QZ4W!%APano@!g`_7=(kPLv)C}tCLx>sAm1_c z*9$i`F4bp#1fPO;d+p+?#_r0Oz9q`U<&9*Ao=E8-Skh=%pvKj`JraV+qooO`?kPVHd8% z7@9Lco}&&zKg;uh%%DxKVeXMU>vD8rlhh)q-E(N2fZk-w3jmJ}U}d07`9U&gOLlM* z%Z{2P{%Ec5$2x?!wr@}WDi!hM&9O-EM%QKys(foBS@I$=Aq=J|=r20*?C;$R^gsIH zkN)h>{46o_SMR#0lhZW)k9x|KWw~g2ZDE)PJ1;!{!olIei~s6H)wl1N?HQBa^y0Ihe#$7p zKYt=iRcT75Lx}3oS1^xvIi!68BO+DfNmk$j7ZIZ;WFTpOME_VMa*pLBMC3JKG#^jP zc|IiokckVMaqNj0#i5xn!j?s6zJ1>+^qy#=;#ZI}n3Y{U5`YAM_+UBO2uSb*y=)N!utp=!{rRCRwL%(ZE zEzEqyeg7WluR4mMouRV^=z!hY$cdu=;%JAl{#;OQapR8yE)<(!lmqG?v8UG#9A8sU z1+7LrJww<4Zh#FUja=hT{D3Hf9S}=idm=TnGMd!sQxkqoYXDg_R<`t`_Od<~n>Oiq ze}u!~T(nm7*L}JMD{Ia1EhPYJ>yO%e;LRK=#`iL@Fn|{Wyv`g zLQGqD=1Q*w@B6Wh5B=2kul;wI#xp456E(GF`$@wzxrvj7r4UQ9Vh+~G40Mo5+_94^ zWRw20dvQB204mah@*qo0oFo|E+ilLh3X5=q15u=x3rB7l$~B_@0u|ja|LQBRUp;*B z-|UR{LgwqDMr-xr%OAh2o`?VAhadUTN7T==|IyiCt+9V}d}O-%N7FRgZ(%%F9nM<` z!~708)RDd2*Z1}FXM`9$DH_+?<(Z!NWw`}V0jzTcLDi0Tc(cVbfp^jnzdxHiy*EAjFUZ14n%RtC|AW>!6sjMh%auKPj}io z*Lr`dhXLJPxnfUxjj`QI-nE0xo!47)_Oeu|@?0DM zHE1qOtms4LqM5?CS;#mqRG%O3h-RlIH+58sbyzun)R_tVA<|ye`lQrL90F;$I(uot z2(=Xkpa3ceH(KbTPJ#@}b+5X7(M?dn>L)GpczVt^gsgciq?z1m`?#0FaBAMIRhp+v+ef9kM zKmXSIethHn53l{szjz`+CX}|izN8_(x?7sT7ZpetI9i()itp*>*{db+!LzqGp*JTK z!@n9$@)>gi+>^{r{exe6=`+7~ebJp@^UIenfB2&xzWj;H_GeuW!f!QN^P%u;sjGHt=bN{0T~!@Jf88|t>urzzsydr=tgQ5$svZ)eT3O}Y zVgF;LglgTe{(v_c^iXZ_<`yA$75zoK!^&-7C4pXJcuRPBN(1V5f)h?y z*#>Te@4o?EROV3uWHL}eZ8z7CdF`@O0kDi z7iDW2V@&0S>XfC4lF8NPSf>+62taJwYON2owx;iKdwY9xL%Z?hho4j$pmOiZ^H&GAixn?!suT^_R#z32vT8Sp5*x=V0|*O*Wh3YwA;L-aY-54s|#1xvFYa2|!ua z3To^FRXijm#xVo;MiZoTR)mRPS*9Q9cmuMqAh%P_gv2QH^D-T-%&>FzZ1+WbT zVkpmXyq!L|HM{D59`vHJ_PFu*B5CxAv<7rqRNA{QvGQTkwwC_J+ifKP?c!Af?kz9O zi{l%b{sYtZtpL=gw$-CG;I495+i4fq)x)YSLU-k-j#!}~kGnG%DU z^p~7am^byWX*;0+yg4fLSF;%b`1xOaX%70&oIZ2@q4STu_c4Y3pZ%GiRU?Z<8v3`s zbIbRE!B_^OCQMVvG6_umEp>}1ct=iph_5z?riZv)Vd23ik z7eH&?!#8Nv%6X*$rRJBCoI!_pyKC*+wsv|`|0_1^&!#y@2FC~hzOvhdo*{Iduyrd` zL>v+9#^TTU@&6~99Y@;%pc?(X(M>3N!Qkyp^XZK9@_@iPsm>eR?-TX)@Ea!P7xZ9% zz(=*ihkqcH7%Y_dU2v}UhZRZ&+FkqT3j%Xer2$$7bYF=5#o`qr9<~}_q|{vcLg%4q zuB%5WmR2t~Tb8GmX3KDToN0(0tr(=Ds;YRQl7aekefblYpZkm!fIt5FA3yi}bKm-Z zzBRFzYR^2U9saprc&K^JJdP zI@PDUP{nQ(Z|gQMa6t$dXzrROMiwQlG_q-ONCLtNONSJ@ONEvSdHu2DnO(`=o!AYJ z|8Qu$Bd;~ynUGcvt~Am{tQ58wgaJ~5#E^syuQZgv(Ez4=O$b*28o26KHw#^=Vs)Rc zQ<*38?DJ-xbL#Zh#RZ8EiBR6W*;#q=%h$`JHZT9I#9Y3ECIoH&R4&hIA2RvREG0BGD-mJwXSDOC zuS8T+j9K1X30EP9@_0=pTP$9#WyN;WwR&cbcf7jvRN~i0DdRA>S5F=@H=|0EfZ&vY zrva&j6>d`RbS%UWwRuOY_pI5Y9Rp`!ryE%_6S5~%Pv_O6(3QLELUfxKrnQSbRP9>O zEXFFiqLRD3cpTX5g?i6prY^A#-ELmiKsVcXFFb@mRqOQ*GnVgan>lliq$R9d?X%d+ z_5SjMdT-O!`Cc3M&|{Te^Y=~8jnyi;LTI&^YwNHRLU7J65`b>fZU3C-^x|1Yfw!}} zv%9@mb{O+u+Mb{`&CVd(xl!C+}YlwM6LTk2>gKSIL(Gz%LMug0toZ zZMIxA{$`ZGmVli%;jEwhnQy)JA6^>{DYna~Jl}eRq*}O&n*D90o_RBY(T<+7*KOGYKtp|#onc@(C0i9}IMSsLi zW{URMG%Po(26Y+o~B8TP~ARC8UwIIPhVT2LZ59wPJG0`6}@@JsRu$CMsk= z$W)~FHX6Xd>wxUIPrilT$g7fPwZe@BmkbU;O_*ZGr<5;Oc?M$qXKC{@Dol7cS-nXH@BIFGM{afA`p@REi4heuC7AgqFoP0t8fN6vq z!u{EjU#|ops_+CE&}H?}I*il3tO*|Qs_aN7Z0jwodtTI=TbBd$ju*W$!+_7z5nZ!%r+vukwqzv?LLb@q!NkDn{ zdmj#+k3RfSw4d|kqC-Q9g>?Jn|M%_5KxtWYtBYKiL2nst-o6vxd;#EZ-14{nJ#M4? zga7MuH+N^ZM*joX9{AD!{6~TQ@H2^%bEi$G(>K<=(}V5F=rsCK*7{cjqjUxRjmcEU zkAnWJqQ5!5fmXDj>mA*TS+r^&fV9B78 z0ecz^fq*hjFT9ecKUF3J{ll=3z0)%zY~mO!$>}c4)e>Ss(j~dTeH&Phwmj{BAum-L z;OS3-CtY(Eq%No(WI(7Zpg&|l@T9q{)%&KPJA(dUP$gGDfBJg-A}tIWfH@FIXu!fd zjXqCsqP65tA+dR_VfhX#4z0}q{l*NHZdpCU2x|~Ld&aJO%kmm($PDVJx>RQ)v{nmi zMy?*GfZ2XbrkB%qy^n3+>Gt4vKlP!%HvFgm_}Ych;=HxDrvE#;+@1gwd*dgyzp4ps+YaGuXGt`{18 zwANK;nZktBqT?+MhP(>>@DqI{)Vb!g3({=%r`xE9lWopR*`=ew++HtY(Haw5L_`0e zidm%+$+XEwG8u|EwWUG7+6S4e`qjOX1ek05!(%C8AtbY+N?;*}^hfVdjX3Z0MQ0P0 z28&63g(OY=2-@O+*B5a4F5}hZxwxc8*o;L93}9}~6#Os6%6+)Ks{L$>DJxp4 zA9buuT{&Q-k>sZ;L=%-WwVq{jV-C$?SIV`OJ1!eN%cozE*ieO+73bsyMjNV@tchVB zRbB@Do4z}dK@^;UCKNxhn2aY$m+a}Tbgj1O3c2f{k396DkA3L7{^RfZ(wDyU2VeSw zCqMUOdwJ7;_WBg{SAKo(=sgpEu(yR|h@6aLVlo0DtTJ z@Mox$%WywcKJg<@|I%Z-w_g2`hd%P*k9`>E4?n?uR);T=CkTMihR3|3f2&k5yJi2P zG8w<{@{P|oKUMD@pdXcf1p3p}W~^`wutUvvOflne3i^{Jp8gO6TH9S|9o-W#5y29; z$!1&3P+h#wV<<;W|7N~Nzg_I125yLiMgVO3fvr%B(JA9We~$(-Mte()n^xZ(&|mlQ zYhD44cdv$ywHc}h=ZPZxo)B_tNI8V`wDmkitI95|g(A|qy&wRL`NuuJ5i|hk_w7Ka zO2rAjWmYR++B&QU4bVldl1)^|0CPv-i$30A{w^w6N42h6KF@Zda?FAQQ98b}7%?>z zWpx*8_O;1uaahd({dqTBo)zQe;k80TsOI^87_r6JE~ck_5^vf95=FO`lCEqE2^nZ6 znByDPjD=hmYU@_fR-WAU3}@RTr?Vu4Z3-3EbqWFFFGzJo{{o>0%Zt z=&wBSbxr@({F37jG$b>hE?6FC;TbVaIbG6Cjply#wKl4?-0-#oCiBKuHPxKFagZl(}(g4^4^y|5g z8Gi*Y02^i0Uv3B?L=74MPj-A=jD(MeU^D11{By#X&ki=w4+ZEy zOCy=ervK58`E2^{sCn#PJ@%Ww^_yq+{PYv#;UD&;9hzJa>x;-})bY>)-j?f9HcA`{21>EA-#8+!p#nY0=+WZOrlB&EIRIKa|7C zHY+OnlK{9GbG3Q_=pbF(W673^DcL|m^74}Y#P>^t{-y*CpwcDuQ{8IG#%>S*Pl}93%#}Hh5)ma#;TD^yG%qG$ zu*che!TA zVP=A=I?!GSaEdBq1u3gD+AW;u4oyBW`JN5};Eq6l69j<7bzSFlqU`oBeB1@eFf>3E z-hQz1yk0vtv&D3N^ekjRB=2i9fIQQ?Y8MmH>03i_X!2*t zY<^kFo-s4D&NCS@5Hx_xbqIjh0LNuNpFWFLrSQBwVQO?D6yK1N&FLxo>1qE28Tj`1 zfBSFz=5L_hLI%F`!%uziKOX-0e|hZ{Z&N5mKN=6N;H+IwXm!Z0h+l?CJC6U^~l-m zgv}llocDzoh{n&D;|>59fvPsFm4xQX=X+L6Ej~vtH}>#GE4^ntjqW(u{>E2+qVd3XX|)q#KU*ArMz>c z;}I7zIYoMjT}@WerYmWacYC9~XaD`PzxWHk_~esMUUbU$J$(5W{>2CStF56}v2Xa| z&I1Z(Klw8cUi%NP4TqE+WwaFS`0cj$?JKuKUdDdllTV*Qf4e;N@Iw!M??VrN^xpuZ`(rd&-_8qnYGzrXqb`h$ROY`k`W{$UvOUz!y6 zP#Z*s5vkTa3ab%YWUj~pZb&}MEC`#m8R*YN3Xn7#IyMgUKkap_Z56xN@$D`vbD%#= zum#ksI#jM)Ju$!7tJ>&*jVa!GQf>PZh-wJ8cRAZS2f zGU$J<=kvJ_iOwCZ-8O>&P#cU~km$jDW-O@ zhZ;0MF#mWRve}xc^*Setk&qUu8LEgbtIkk$K6o^{Zrm)J{*F#=DqPdc0P`{c^wV8C zo2WX!+4Ag+3GW}M8pm;D3^YKdrx^8_|~sIa6>A%3%^4HoT1Oghip_v z&8Nw1vN_yDMgKc~`a7Qd)h9zayU7#3y8Fq$^Yr8YpAUTPcD@73J6Hf-t9<(Lolif$ zdlCJA>SuoH;qR@vUo6K1`cD-ZBTXyfgZ@qXHJ9iA;Iree+{g<$YyHj#0{wx0bdpXg zu~qFM>QoC*by~p)H_*+lE<20aw@GW2F%@Kgu zz1_Dz<%^aN_(ir=b3XIL&7b^#T>stQpPrrZ!4H4%XaD=34gLAi9Ie(Gt;tOo9Ig+~ zjbLkOu;G5m%hm%dpTIU?#bjod>q`psgIAxw@rS>{ig{R}l3^lASBx2>uJ?LM4a4+= zX94B3XQWuXDMaAul-Y?=hDC|!0F+%_?Ada92R2Nvu+9)wmX_yVtvnJXJg#z#N10hn zQN7U#SHwrR7&*(F9n)H3ai5joKB1o_v{2YY*e)-O(KD&M4aH$ic4KUQ%26`C3SXri z+$&>6Ce%=<)H*s;B$q{tGCIl|r)ldIqSzOarCS4?VCW*VW(tX-e!zVr04@>`n8IVR zm|H!zq((xzYJ$-tQ&jsW09U$(M zI^Q<=b~nBxZH5gsv5)o_af+JfjLS7#fK2ObG@GPpHxc&+wQ!9%L8lQL$zNh#1B6Q~ z(*UUGY{FK>9$?4YdcM6{`rFCNAiK2#ZAMH_6~rLx6za_c zozAU~94{nEBm?pd8L&-Xlgo_lApX1`Fmsl_`jqTl6P+sjUbFBzADwdn{XzJu$oFaD z%2u8Roxn`aW=Hf!!WaBZk}5vm@5_fi_@Q6<*T3@9KmXIs(%e7eFMWFVxj%a93%~Zk zW;|I{uWe|-m-K9Nr{7o4=Ev<`R{k|Jk4ao{xM_ z^Rq&~Axs-r!J0=Lfy-N*dP54(KR&pD$~^bOAixpOkG_=aO1&E$YiFp5>R0qHX4cJ= z+6tdUWQ>{J;GK1K#}y_9p(?%|CPN00^k$LyebQ>f z0`%K_xABIB-h@EsYoHsd;E6SR^vUcqcwn(pO?6rAt3gmi>ovgYL(nY%j(NfM0>C(z zs-ak%=bpUPp#Z3FdAt%vRQjO0BhlH-`fAV9K?-nWTvTvTE4WU#^^%oHc&W~9k)hJ9 zSMKwh&zw2bix+914(($LN@n3-+!brBeFTe#R7qlK2fNrqh0^21P}x`i4Kuq`@$Ty0 zuDGi8$kOCQb*^}WZ#un?iiOYsUdOO6N$`X5E|Lh3;Dj=F^+O<>DpN#{cZOzm-FE1` zZeIp2D%QV9NTuay4CrZqkr$zw$J|C>EN3m zoBYwoUxz8LnaA#SIs0d}yu$?GmJb%_e|G%){ukf(3qSV@=uGlSGgzVD7%3(5@fyZo zH~pi!Q=b3*`Rkt@PyYDqIM{)cfqqZ_4aTN<{$-3yxz*6$0Oe{eX)3z$Eq!IWNWqy|abip#=@)FLfWq@GX$bjf

kKni9X(Dd?^4@ z(s2N>5UCKN3M9x(ktY2IgzD*R2TuUwgZ+XfJQ)T7VE#=R1PnDEuwulLYyN^cp`TQ3 zKc79P=cJ&jdsRUi@$T*rb)Ii4ImDq}0C2mzQ1#-KdG4^x#f}(GO!b37i~ZT9D-*tnn!)L0v+1Cb<~64Cw|w# zFCq~H0G( zmf&Zx5q{3yPM{kwXGN;g2R+cSNe%=<1N_^J0{wNq&B9H|;5E^`w-GR)UnsKK>M<(= zAH&fk0D11+avMdc%S~UcTn+Ts^KB-&D)CTGt_n7c_)pxga!i|%;7}bLXMz5p0ajF7k%X9Spnti~ zVwBCULj%D5?BMsH0sdm^2n?FbKwGX#LUTYK&^kKg>?{~xZ`vBZ+q zDwwvnw-ZMF>^RHjnJp~}eufs@M+@|0e7R*i+RO8YPXuynjwz~0oxJ+O{?3=?N85q* zie;^}IY%CLV3kecp76ORtdX>(r@w$m?0N7_dE6H#f`f!4uvM`cOD+>uimz}x#)vah zF8gZjDvJ!uw}p907spX~*i8mpb(2I2Ma!)oGEVR*^07RR#?U2m{OV=K#1sN53p&%#4#{U9em!!^&Nj@1hUt z3B)N>jlGK{cX=khBDBkLg1eN~8q1;=)C#eQ`OO7dXn-&_%PeV6SIVK1wf3w?5UMP{ z3RGEnDPcNslG)bIP>rryPk+=Zmwh8MNAt4=9FZELE)F;e--|J^1Yp z{*(XPfBR!U`eRk*990=Uyze(gFMYV#K1tN;;|72I0(Ne3{EgZ3>sb5F5P(}2(EkU2 z_;-M?Qw8*A9{tqLsU`f|DpDKzH|=W`%(1s)&r8q!`t;yM#^yl3r)S2yo<2xmoU7JV z?|#pPgFuG>2w4ZQwKHROXlCGS+XA4fLlCr!5sTNUwh9k8uoJ4ypr20*m9={2lMVYH zR`gf>ASX}-R90#kFLNo--xSoYq0h89}uAkUSn-C02+O@vZ=Ti zzqr?I3;Nsqrna;2)0i0)f{vT-sP2|x&$kR1dHQ3Y%hD^2^499(FYEap=uh^{_jBJ# zx|d`!@T*AMn8?pQ4N0%6{j4X9S3zToF|&Tv@eRm;l>=+&UXI$8quK9yodEjR>|zHR zKr*njk{%0+Tm2-dyHvl|CLTAmbX2ZV3m&$(g2fR=W%USbI{^u zXdweEzUv(Nho3e5ZF#zLn+5X))V?6iKr398kC!$see|OrMW@k#P!10dyLUb|fA!<+ z9bf)J0N7)X-#j}Q=pRa;e`rxSuh9QG!_=M>fO9ls^6CrQfB5<8bDRSGXuGRd1(!%* zE-61%@2)oe+slRMf&R|T0{uliu*Jmq{FmyI>TCu9Ao`;q+vNr`2k5A7ui;AtGEs>~ zqZy3t1p#p8P>H*Ktkg zoSTykvU>?KpjJKlJ>psXu0VfO0kW0 z54`s7-_YfqE&!kSCpDH0Sm_KZnsmmf7wGT1g&T4IUGjvu})tMjf zfX`{N=EW|axt~xzb zy_lg^9`hPN{?A8~y{8}p@!;OtQM|(a*;3vv{m(7A&J$I8lCh8a^6CA|3V>@}m%F#+!g)<7lqY{}@0UJv^OPsP@IOAA#7X80e$KNwYb*_O z%BpWI#jZdp1wACjqx!2aHd+R^^|<#dn5ynh?cUxW%>MM1-Ism`{a){~H8X1t)yid= zq#~9`G>ikIB0!L7!6vLDY?PSe-LSLZ4oSu06nncektQtWWSQM($gXGms;#Hu!$uC^Kp^R7H0<-HaY15 zVXv5l>+8kXTJ5~^WYS|iVKKqFdj|=INIc35zw^pfG$~s*`3*<{XUS>`pImOF80zTn zI|y$IK^5$f4e$RPuoqz5%fkzR!=WmY%wU7hBS6PmkhdwsE(8g=b z?B>O>SI2e0S8&5P9Gf$oj^*kqkr$^UFH|bLn2~X!%j}$)DKr3ag?ovWO*k1?55gnl zo#=aO`p)cIl1938@+3@7gDj2tX{PXQ1uF+uh>4zpM&bl?pDrTvFt#sT|s2qY@0lv z^b^VRoiv=YISjzrVHm?cvhfRo+?w_%l}i z*?)WE)X3f+@1bqzpB;l8Cp4Nz)z3ixsx;hh2jodH2umOqep(e|*T48LM_;)f`fGzL z)&mIir!?lr1nJ?UquW0`!n)o8z)Pr z5wrRNtf8+5tUP4V8qpuf(__#-OcV9CWq#21TXS);+L6F;E-Ul$5$;~0pHAKrEMw#W zwiJVQaejo;hOU^RTEC&wl?|aN=w(2EQ}hmK?w{4)i?1_*3aSp4b6R$uDxiODz?iDV zPe}qmMo&aJJsBwT%7^|&LED1&YB!P%K@UP~1OcFcF*6~1*34K$$g_)}bE~W~WQ)=A zf(ae1^B0b$zo(L|FnBb5dbR%n{3IREcU|u9%ibl`WoSS)`@JN3Uv(X5dAwoG$oY!b zw2Lqq0@=f4XAe1)lGKQNVzOOrc9s7c1oi0P*VW3ssO&Y%DIkZOie7tNDA~M>DZ?LYN1p9&qq|8W&J&bhDgfb#S} zMSovLyVpYvF97=c^rrL(In&VJ7Rbk($7>mB z-yCPXV2F-n#XkLxFA?`WBdAqtM1Pu>F`k6HB_%Lf%lNMKR8nd{r0!OSs^UP;i87T2 zcwBj7(&}iFaphs8J&gFFKeQJpOvS@dh_n$Em8|Q0EE5`!;%>E%XIz7RR@1)$WyQ)k zXF0q&Wbgx9+E3^&XF+>xVMRO$8qlV{^p{e;wfQT)y-6ccOYEJWEbn7tgVn;rvX_`R zT+XpGs+IVygZ@H!0f5+q<P zZ_`)N>5I;Q;j)4LdZdffVX5;SdcNW~^dSJkOF}IGOm?HO#;bcH1AK*_)qv;z=#xw0QYA?^g{W;AO7O0kw?Dwk&7mC z&Y=W6;)qLIw!*Z<^w%tiZ_GEwJon7MB=pxM&_AFbITO;xvyA8uC6GxUX^B*K#UaQd zS1yMMh;ZgPNZmLE{XK}U^N2O{w{wsF?q&KB=pRa;KP|+nIndxONSloH1{1P5AVp8N z@crb(jphK#1n95mkFQicvP zgMQ~*$`X0`3viyhr(CC?aVDIwE*R9eKobZ)x@(>O6wg|rMA?{y+FU2 zzbL!!HH*E;tG}A|9#owZ3P+C>wSJbTaw)_xyPX31r`;6o+R7S!LIXbk=Vs| zPd{<<9jgHs3qTQE?mf-j8*^Hl{%_EhueXH6`oxbsoy06Jmg74w?j&)N9cKs>R3FN8 zcM%if9dle%^hZlyxfP&RaMA^VD9WWg%s9-Nug3>W>O|fCafGW zPDk@7SFwWEIcMqWR+1!I?^%mvo+jNpl=6hKnK5G?CnEND;#^6o7kia1#p|{hyMnkT zlFO_ll<=q~saR#MG>ft9tTX);Huv~LpWZtc%uj>1sUArVKE-R&O*v1U$#|h~sOLe}-%Bfn}1mm@TDOQY+iiL85o|t!4!j8Q6 za8Ot88ke&&!yIS!Sgl?NV;fn^LzE&QjdTdA4G5uK96;Ed9<%%vQYIl;a;H2#Fq#ZA zN83r#moil{)zP{sRpqFoKTysHwFw(^0jy71{v~Ti7!gS#Rt8o;t!_9r6$0-vz)K@> zjJwmAL$??w=@lsl$Jq@psD~0_<{wDjkyyR%3}SdMiF0?o4{kGK` zEcuQmew0w>=2Xd-QV^d=JaN8SM92)T3yqvGhh})^aP;cvhd%j3PdvF40K76{BhTqI z6LlL9aVJsshLkshho!eNYI){NiQhKk-q!NiXLs8_KlQ0kr7LMe|A78m7ts#5+baiO zdH%*9d@l5XezdA1xyLur-xuUV)!}PG^ia{yvTd}+Op#7X1;tYpf=UK?6*_ zhZ?2@1cUynJFMlE>7(c29l3HUy_$&r8VLIP4=JQJoD`J$v5eyDXlO2H-7vTY6Cmq&1aE&;VEVf*IZ| z&kD0AhJVp4d4x^2j5P1o}54LYxRV9#x7jYB_}fSoYdF z(Uf!PuR5x*M1Q5aTF-qZkN^mks+hoJ?aY`HS_LkLmh)8jeXOSg=#MsCdq0$5o^RV? z?20ju*VXF1qPu11J2v0tYj=VErwo&wb(yY%6drH~LZsN7=rU9VJB8k1NvpsN3BK9Gb_?T1H2EH z4`glcLcc=;3Nn(hOG0|>G!rx5ZcS+2t0u3ILl(`gp+ha8wit=dkm#>z0+0JAmiry- zqDScWR}gN-%3$ys-o#gW9MXV>@{W*H>F7z=DV!eW0QC47(|uj>>IrM1L*5K)^EzV5 zwOp>l`KYYZ4{r)yJLioFK5S0u^tcbUQ$?r^#oiCxLk7YKmzN*_WP=_ztz0Fn+hWpa zfcEq^{wp*9H7lhprZz~XBMnfi_do++JTw4f&;ZMO){9oq9yWW5b*`e?(zeqLdT=WZ zD8&+X$kg(jDb_BX3=R0F|Mfq8@UJ|`-tpxY0$|^6+up3QRC`}Q|E3=_AjC>r16=7O zmnXerPiw%buxrWh-XDMA#`UL~pFqEFRh>ND&=DsS@)Z50Tyh7PMrH9_=TleYs4UI{ z{h9)bSVxt^ZO%O-u53{XJ{oE`+A z1-ovNB=dYpG}Yazy*6V4Hg8dOTSR_2N86G-Fb@9l)zsqCeNSsuqd@UM#Z2p| zb2%z&&9@7h3=KdvrK#wDN&^(do7UNKRrP#A$W8yVav(Ioj~K`ac7_I+{ACECi2HIumrMwl%Zy^9~2{++WJ~;o>ZsKC4I5ofdd1}eI zo1dL?t|W1MVgt2{uEpfcV~w$a-p^O<*f0v&|wiUO8m4 zCX*ii*pjY4KYEVo=LyGPVY1d;SyLTyg3foWJ`{|^j}lvW@l%#@r29aCmDpdd3zZ5z z5@rO;=Y<})gC>*U;PIDtt$|zMG%+IU& z{!zS?GFQMqpi*j!4hxbG7&623uFE~wFqh{n!qsvVmQO3}#);F@5Nd`ilFuO0)xln0 zO9%H>Pn>%>gxkex z-#vBCiBg3a!+bJW3|ORWaSWBREVV4l3y*$^s6%BPi~L&iqAn8nUqn5qpz2C(c0*_h z+Rcj9_cHcgruU(jkXQm8q5MR>6ntP5{&2x;kkyiDaJfr7x8*~2k?i-X`sJQer7ST1z5wJCL|I4d-tQG7q9sC zrUH7rV1VrN*<8=}{FUakzpB{Olx%W6bVvY_WTpRp2nLooyC3Ku zxZli|K6^la)dgNFQw>OG$YY>?lJrDOq_)Kj?50DLOCs4^UN-g<0>#KAxFTn2Sp96o zPmikQ@tR7u;6~MKZs^4!gtTOh(BFJg8=>QD zeydp2FZt+ALyOvls8jW&%&77qWWbt{HDl5MFT>sB0a~qhEIWkK(B$-f#y41gy@@5D z9~ywlSRhz8(8QQ+KMew~0a|H~SI}PwbrM)W>dT=I^rH>*KbrmaiD_n9 z&FNkW9euo~>@H<&JVceTHThm`KbTVSOV4-EntaFPn4HUmj6}QAf3Ir5 zjs(DspaE*-KJSFFKEA<{KHM%uPpPeWY)Jr6v*%goewJLLa4JS3TE4r}+l==a)Db1# z6so$5E2pe@hH;VyB?j70I3WZ6zN_h$*4`WHGHJl!7ujN$^**q?l(T}@%I;c_DsctD z@Ck#_i8Q2*Yx-yNEbUfa`uyiV&)y;BVwlIbTISwvyWg&IhW_W3Mh2Yl=yxaSzxVHc zZu*t&<|ok4JY_`O6*3j7ibCr%0WIf!p@yKppFDQVaW1Vj#vCUx0a~bm)f4NcJnp-q z;=AgsAI+Xe$GBaouC(bdJkv{`W1zoJyc6g&`94~iT*BsR^`6$ar@!ZZ5CGL3!g4PU zdn6m>G5VmtS{){>2-2nY%V(&vOEhfk3}rr_3EZhT1pNt2@vx!)2@QyruxlJu{q(H2 zdPMqBFFBfBuPoQ2m?uCsDrpbsFDd~ba0L2$?wddvBtX(N`P9Z(l?X4)K>*<7=1`SX z3r#*&>T2_9=fp&Zo{tsnE6q<&QeOC7hFkax4h1KG+Qm3Xh&|p58nBc`FV(^?^riGa z{nd)fS3<5kXU>{LE{#{282BF(!S?I$g#zhX1K=p-Cyby0)>`bQ()+9)TQ=8bSJ)Xe zfJG^jkg;{rfc!e1&wCI-E5p-3n_WRM5X8o6>{@96nFbATlo8tVNJI&gAYc3mGgXl2 z$S4J+=~Ws~jqb9er$}t#=K61D`G$nv#WaiGS&lgG(#dLqc0Qd8A%NR(ch0zTKrnAp zUAX0sT2qB^jwOj|?RT*E%#DBh-=im^ z8*?b3J^IiGUf3yH`YnQU`!?!ZHt51&!c&vjb7+HS6SqYs;#3I9iaGP5$Z8XHIgzWE zT`{&g1F5aeENg?W&nz9PVo2J=nuBWC84Hx)uO2&il~vrFd#6YRgXgQgN(DtHg)(>- zkc)Cg^t6$++*T0~p5OURY>tjQev!FDNTa|5#h0pCiyb%S?(GC$PC?{*p)F|WssHa&Z3uk- z!r< z#;6Ths08{i@4Gz9a~5t)mv^Clj|tB;J7GoEqJKb1-xjn3(Lb(iV8y|iTy8yz$#TCW z=?+mj?^!!T6{08n6NL=}=Bg#d(%`13j=!e&Ftvaq{N|=X1H3A1*acK)QlC4;e}B(v zH%H*ZBaTG35S^{svlAA40#P*8qZ30LFF^x9uH>q}shOHV$v^-RJv4jRJpU#r6~?Zy3yNKMj|pkLZ=nGkt{^+7sHV^|Azz_|a+rKiCS+$ozw)t7 z8i00wQ*^Je+bIZ?aOGA83vnW0f9_|0?)rJzEe|dCRjxQl@KGQ$J=Q8D_4p8UI0h~m}iP-uI#9#45;tg=|9a`@6xP3(FbnA}mEV-{Pwzl&MM7s>Cvry%b=pXbfoNi}S z1(dZ%8_V^e0m9#!JYbgZ8^B$=abD>+MP?Topv|t5mlsjqZtNGG zdzSm?SKw+)YetOsgJ5)D)uWlVIHK|7ep?&}ZQ22b2n79Amufb7rVi=8&Zj`Xh!e}a z0OU6*wD{1}uCulH33nc?TGVsSwKZTin?3u?v+cRR{4YLG^~$%2fp6+r7jGWlYFYUf z-v2Eu-~YXrKmDt_&Ce%3`$Xs@Nz!NlB8Ky21U1kP9alOi0sR!x2_<}hg8nc6+sE1m zf&NNT4rrZ=jyUlN=2o@FVedSAD$pmjLd>EQ-K1>CY?J6{dZYW-C8D>0M>JzrWXfhF-8saM^#QI2&dI4~Us5;*h z@`RU&({l2r6xZs+Z}jHTg_+oo3i4z@Z>+D)@?eO>zb9h`mc=IllA+Cu6Zemdlf}TgygIB*a zKKRnS*lxflrBo6$L^l^gi*mVBe|3{3cQYg>rE;F-JFYxtaaVe^Krui}l1R^JTg*b> znquZfs>?XgLn(^9q6`PW@|Re-NRtf^EoV8O-*mt_VdvWzaNHrrvBeHDMSyXg%{<;r z@`+yTnZ+L2Ukd=U$HL`YuFGye=v;ucH8WG@f&MGK`$YF%p}cK+FJBP*gd_`j%vA4N z0?kE~c!o|0UceK1{*du?!C6iDzK(i=_aJ6g-_&}{EO3?qa3bkf+;kJhbGmP&e5_JL zig?2n&X)V|m@V-n-EL}v`6S;#IY1Vch}cW1x|b1{a=RGW1!g2Ffy!PEOEl~x`wQy| zK^(7`u8&9BOR|yzkBANN5G+nA_|h7|V_CDZueh$R=>w{H>--3oFdlUjoE%NO5+~#n z^MdHC3qdn^F=j>P3L>V?wO=>$(q78|=d83W@;_-G%|wqzthR_8+}BwM9(U5(nZPG5 z-7?&m=BaWN54NzPoLW7rx0S5p{jd;SQ>$H>6_!NE%n9`L7SQJT^8(R0#{(JW5(t%8 zeTBtCR=h%XvO^{j_J=CDYo3GSeFeem_Oqk0F=IO)!K|dWrHwE-yfMo$*~cw{bA52X zp6@usMsd>~Yp6oHc2ys33wwx2NV+|U!;!84Wb!ZN>`EN#IKB%%=id2&Qpgb-!b8*@ zF06%vbmNDsTUSHpQ$O>mcKUzEU&b9TCWbo&f;YbuZ_qvs_r--%E*1d$#@)x>%7WLo z{OjE6;?hegyJlIH8$e8>0aOACOT!|0c5R?PYWNBCqg4<9rEDwysuK5o^$Ac+G$VM) zc+DUOXzk$mcw5T8B%1dKI(11C;<)AhVTdEOOOT&MmA$qg95as+Fiv#0s)H6gRFSHk zO{$AMT}(iKv)Dgnom{z3s12(REK=80r^5`SsO+p)Kh0j#X`nDb?$pfHEjK=sLj~O>NVN}vPalGKZwaQwE&pHa7$MZ z!1wWWW`<1C&f1KO8A&-rN9c3*f!2CGsQa{Lr->#%O84b*?mSx|A%gq)q=-|ynArtx z=jZs4=5e^uP7rUBD4xO_eo0ox;f%rBs80fbYAfd}wFUIEVot69sf)ac3dehhLV>lg zQO|V!tg-a=bSSP^VSs)n$OfedxT?FE{pqtd-xmq#sLl7PdvR})k1I`^oItd$%fVwqQ4x3 zlEoA$>^B>1#1g?bP&;akQOO;8X zAl`xoB-cdLx)%nErGMHQa87}RC1q3408t`irl`w4M>w^f_(nhKHvWIm2`j_WZib_dj&`(@*X;KR@w9pZJM?_7hvftyxA1tP*7l3jsi7^2}nc!rwsu z?A7a&d@qcwZ@e!*CZ=djm~-x!b14MUQdiL!$cVHIndyIm{wv9475B8>GsXvc3tsdS zpFI8P2YAZ+%n-6|!P*(lPRamHnD2jXPeq5oc0$U;(B)7X}?wtgEY43Zv#W!Qs)Bw6{!WD zDYx3IEQHxbEEz(C$Px&-H|DJ8nO!=N%UTZcaKiURUvzdM0F?%){?ZM}RuBNvfCP%- zwrzyk zd`e*-52)rZx%qy}YqY0po(~TvPI|RE`by9M71JGq00jECxsN{5FfVeTpK7<->eqkm z*V~)D|62dV=C{L~*UP0hgN?UyR+EDl!~9|aaId8*wpmSvJp1VaRp94W*7PT9xl@k9Yq~cDU`m*p-|sAzXe_An;1- zO7F5bp+BOFM*2q(EVoC`oUsyVpR(BhEXJ%j@@8^x!(sK#B25@Dn)`mjI)h-CLLM6L z2L*^H`C^-B>oG07uY~lsjwPWJ*zF7jsSemjnX^*MA!XtmX-`-YG3g(JDsZa89$P&Y zGN=OOp>?4Dv>Vp(1O&7WTI)X<&yBB}~|Aly_tiVHyBv1x&=;46|7 z%Xtt;26;eedMB)<-OX%HsFhKsWItzgLE)<@7xbLRFB`|i>OEq0Ac~pIcLmofuIOwF zO!V55kLK|v>)gjmZOsmon{4$iwovSFB+OXnJ7VRENQOqEKNoUyWss2TVnK1ZdXFsy zb_kwCB$LF-OL*4fY|5hp!RJCDZU>3n)QbbN7`p&7JVB8s$(PIGN|Kj(aTiOfJKDm^ zL{j+Yv}eK+n_Iam*X~&B_bFmO_bZ>99@QGd*u7WMuZvg38^o@!hiMm;+Yp#r3P4yN z`A*dO+1|bRdUo*C+US;MMQ60Dyxe7hY}Xj}!uI7}M4x-k-=LE+T$vWesLTdFVJZp3mnZPDAy)t}iIou$6^F=w)9uixG${)e!d*ionO^nkxx3g!{9l z7?B3h)AXp8{+XIbsp6(SD}1Fu+&MbV&)Kd0Sa@h(TuFBn2s(_Qo_sZv@5#yUS-iFJAS#^n5V*dO+}c+vWDptCeeKVl!~AL(ZvgD>qw!!z+jq}vE&-d zud~Bv*kY6Q9%Sr6cKDQ=-=u{b-_3Z>*zk+_@2cKK9sS?XTbe(B+^h=fLVL zcGyYa+yYSS40&z=!?WNzTcX#3XLRvy(S^HSEC6Nes?kYX5eB>-41IRyK2a?p{LGxj z8drDt$(@_6_<0v_t&5c{OU|~ZuESd=GWN({yY&D1^vma7JzYt&<1A>vd@(=u74*;l z^o550O;JLiT4#ZN{4~xmE&^6iK!2A{L4Vc13Sa^Kc0oY2ED0n!K`2UZ8|beW6D5pC zKeJ^2>m@w%Y8VT%JoKPn_7Xn^(CfeZwi1p0eudPSL39N~Rp zO5|~DM$H`q=vi3-1sc$dJ3Zo%LJw{sd&q6d@M_u;d=32tj$l4fy)hxxg8+z@S4F26 zS_r_oj|Ge_>Bu}8JDDc8TtjDH6jV2@uB>MpT5(D_SVQ~gsSJn|h|dfiRD7W%ld;W}cV zR)^34lZ~p-4JDvIL9EW_#V`m!65q6TlUygr+l>J9`~7q^ZPWiVpZUzGYkvR3TNH+E z1hqT7MXK^VQn{0)axMNeoOCTJp4z-2RdgN$*%`*3JKNl+AQOI)V(quRO3vg`Cy4jam!_G)QJ60o%z3Tv0+ z`EG@_xF^&)s?}rSujnu5h#bO5m8`8iEMzLmGLS{oWcR>YVi!g8E|+FH9QeA#gqpXX}oG?mBLle(W_d>n62eApg&Z+ zsq-wRH!{mN()m(Zi^JA#xm3fT0ml0f8laM`Jm0VO*Do=C57`iTB@itkuRH(&7^tMD zAxb!J7M`04U4<@ zF)yw_1JJITUCq~m0EChxNw?c=(;wvrfA9y}KKcHKF5ilBw-~=Qsod?+>>_r(=FHn% z*!(Onn12fauA^J5^Uz1=pp}Vq&hLV@U6qVrKc(Ke)?evvog>j4IcP^(R1-XNb&)9sr6=41uIOWHw(+a_3#Npq3}=OdkSg zqH(OEoU{czI}^Z%+7xmXVOZf-RE-b~cXDkGbPg71A^mgk#FkPik7>1(KoRYUL?oQ{ zXUP>7Z%9|YBacR^)Hs&Z3p>I~@usy(=Tq$tM5iZ!;9^h8TmVTy2K;*oya$)21d?Vg zJp6pGkuoj&$@UW z6&5CO57F)&h4{Sb%#>Rpv^B{+^($HcTnLR{UNzt)IE)z0457J)jbJll}!pKYu zrEulv7{5<4x+!Gj@+Ior`R?_N%_aR=mES&yd<=a2uMP8QE~R{{@bhP`#Ba9&Z*^&N z|3e=b{^rx8=I7@=_qj(Nc?2D;b&)W3{mG;i?lqi(1b3{)Y)!Df0eRgE+RU}LWE2n z=ueYX66oJ72mL*1uPm*alM`%SxdP}%wfRndxb2hFA6INQ^MQU`znX0QT3dM)^bf6w zD?kIgu#JI$9)f3!$;Xwv!TvG_$QbJ~(Qmz(_k)`<-uHm>+XlS)q7R>`JkwbY3bigu zk{-JtaC0wRWK1XkF>wT}NEI&YH9)FVcIaHam{_LUMhevfqn)QVBp)?AM199Crg!|K zUS?)@xlE6MepKiD-MPOM9a`xjv|)KmXn^X~F?88$oAKi#R1sf>a5^_dWj0|D(MCt( z4ao5FQ12qW7@-N$cHC{2cbovU%ZD!z0MI`W4Q-%53Och1rBKj-0D@|zCojRv(;rnA z8p#6)N?C(UB7b_w87|jWx-IzH3N%vEL4he6ERJlI3_eRk0-%*~8t8vCxsD@bpg(50 z9O#DzP?bSos+1TPsws1iP!Ozz#{1z-tW(BDJQ;vadq%5$BcRE3}c5P*jJc1q}PN`OdQkqCgW z9uR8v#)&WyQS7pS0Ku}5}hJ=2yJZd4Bn zw`V)3-E_0k0IxSrk5M55jBAl>wq>a@2_oSY0vf;yVRe0-*1Zr@jmF#gS3>ZMxGPu{ zIS>HnvLFB<>{M|>$M>1|{;QYhzM%i9hj{E?KgQm^@@J6#>=pt5y?VQCdvi*;?0)#$ zhyTTYxBU4zUxEfW=fYr?WvMUdLjcw#yNwT8Us>k#ZrUCsy1L|j(AS;AVa-RSR=nouY8qvACwVHZB z>kOI9gATQdQXuIZ9b>$C<|fdOs?sYg?%Me)bkqE1xGHa*Yo;V}f&Rvy#n?2^zs^aI ze&CxE{W<4Q&G3oG(iNtTB0?v#OO>@g$t|!BvyTaLGVy5e2xe}+1VLzdpX#Yn99Sm; z9Gw{zi;?l@p%-YOs-b`Q>GU2~o1_8iw4anOUf7S6owimF2zuv?A98>%x5qA0OE zUaQ;$oBD1e*DzPFZ|aJeuJ~_Hp+zpAWC6vR(=a|F!qt^B)vZEfkjPMX5R6Jq9K=FBWf)70{tB(>V~}*DzCBo{$RS z7Al&<1`z{cqKiGF8S^2eO6Acnt;5dJvfwK%;#kCeRPr0^YCY2C82!1K30VX(QmXSc zn(hvRoiw+|l9-%e&162^)&(&F=CRmxy)XlyFrp|ku7vg4JTDTUP>FSrF#we8F=NR~ z=Dz9~%>-x8Oam?zPyMujo~|tqwU-&?EZ&={6h#a~Iy=89%3AOWVRh<&VEqbHgmM`n zfYwB(PXZ8cTANtsiB`-Vn^iKiLdY}u4HBthraCEZ#PABGX1pVkyZqiH8{~~VW07Du zvE#)6(+aOQ#TcPQ%yp8n4Lp5!^>Ta+!;Iv2h!`^PZmUNK4(F`n+OT<&44CZ}IpTlc zb?A+lB&;)=Rl)DFE=A4?V|^BvN5?OE%BOe%RnB0H>fNQ4wT087}dJrqk>B5i;>we#H7)f9dY6&B1%FHdF(_@_F?%Kl#spvYq??>Hqp_&{W!% zePi;CJ03bB`1HJTp#U`We`gjY6K!&XJTF>LTDv%aJkYmjjYU1s-=id}>7TOVkOTmo ze3a!of&TPKZO}}=mdDbss={3=*}jfU?xwF|AUd0Nu}4FC1RS*I2(?Zd7GH5VjuNle zM1V{$%cR;+=M!+(nQ;X#A7dl{fxPHPVWzjF1g%mbdd(?b11cjCeqI0q$O3BNtC4_D z%%PBLLiL!u%&^=B%?K6&RT_VerZ0sh75(Y@^Li!;Mt%27^aq;S8G8D^o&s^DwW}9? z&-d!y?94YZ&yuw*CpZ3Ix*f1457>C@0CB8aWT5k8l+1#y zw3f?0B+Y`wbdaA3Op|6%)pmMfRmanRu~S=?1`P<>6VR`-ku{l+(EG9yq_ZU)1R2mf zEPt75JY`WI=y!`LDqjHDKqtSsQ+C#&0oArELwh`O^N|%$%AQ@2C%GITL5$C!CX{*H z6OqLPbGVB(>D}L)3HtZ9-Zyy9`xh8)$Itt}?QcH+#h=~#%5~=HALa!51DZ*<^0i*f zP2mFlrR?!e1woOlD=!AhkAVK>kT&6JokdBYKLaIsMSp-*)NF+e0R8y8I=B`FtS1!V z7>P{=P_iUme!K!{5SGTJM~q_)eFPKEEU7^>_j1x)#|r@61@x!+;t+VXMGo4sVjAcl z(BG^Qk!o6oHmW{Zdj^hFBH%ia&v9QL!duu_zC)>)r(nZ&0;1TB@EahI_s?T5eICQGh3LjgaiPPMFj$gwpw`&2=uqQ z0+}lekEMv!MR&1gLhQy_olOC1EJj=o0~$R2*TaU~%_{mMr9I|U>fx9_7xv+CBGi3h zzBg~&)`04oTrttF5Ks$%5Wxv)i{s7~6%GXJDm6sadc?}on#00$yu@ySgXRSN z3wmAXlkmz)GyPerehUZytLcxb#5tMdHNanl;5chThsmvKpU%*^nKc;%K&Z4}6=bo$ zh?Yv_iUR_1qXBv(I;S;&d-<#-+%_5@VyhQ)N29aYWjwh;J3t2NIONIYrES=xsNoJ7 zh+1MSD%+fyHX0zLH=~JFgftF1-lnm*77X|S+{b*p9nBBi$0k#&mwpp*OLVbezS9c& z5!LFfK@In*o^3+|L}!4z=*2-L01H6;8Z-daM9-VquAc3v-d4yRt!L1H{D__#0qKev z$ll0+b0*M#Fu0a%J#Z2IQ9k$CC)z*neNTE$hMWP2p5vOe2Jj2!pW@G{!HYn23u>J# zwstvb0DCPP&MT)$ezL^3bFjOWg#39f9wXoPJ(r&NH~Y=lKm0%c!(aTRU-Ygar$({T zxelKu(>R&vV|A^JHNf(uqmn9W>7A>oQ+nuF{GRdv|y_t9SSUVIkr`SIHeXG#tR{d9o9^($l(fG z?1LsEsYs#Z8Z%Z$!qVDI@*~EMAV{z z%X)&1Euga)$9k+*{aM1d*aQoKKO!J`##$V0AgJV!P>LM}-oYEigu5f?hfLQzgKCn- z>(-F~2)SeFUdFeD%WRa{a>VSKH=E{n z;pD}hTDjZl{W;#3XF|+`n1pDv#i5FAnr!L?%MM8-MBy0}Cn8=`jBKzA%j=k`hiaPvABat8=_f>(@_>h*;R7a);Gf zHJYSo?)lcgG5M1(@4b))`kyXfnXDKgeFyY6=5S?Yy&haklb)wP(~B7)329u+&Na+= zOq?pb({~FRUy&6rI3wRt*fY-KR$ymT5!6jx05)J{>o#n_YyH9)lt2i2Fd6S_WH*kk7>{og}{g@O3N zR9jTaC*pN3S6g24_f;OI#Q{;$ul2MVJ3ZzK&UZ}SU3>8G#8nof6IX+IKz}e2Eh=YR ztt}_S6@6@(izpGii|Tzy=5e|1e8-XTfTITePX<4EOnblS#aMOLAq$}D=?GLCV&$7{ zzGuA#uvi8^(0e6Y6fmJCRa}Llv+F{Vc~+zl093D!OXEdn6BQbOR%e9x&|gMEG1DFd zQe857e`z+v8xJb{9K3$4!aml|!Hb~cfpoT0&!4IEUZ5WWkiYu7TwW3@o2c~daNo?U zoz+SZwjne?bo$l@ww`TgaTO%#9ap8gFZBE0^nv7?K5*i`p8h8s7aa+}-vZ|1Z~v{o-Ta8~k06zeULE~MTiZ~-vZRXTq4Q=`_GWH=>&pG< zkN(xoKYaP{`B#pD6SCuMG#Y*Q!ygVmIpY&oj>fLmbeici2M8=hV zT*Mur`aYhMNZuhjRh|o}>|zqd32H3JPSBrBji_IiWyB+&1I#)Tp~DrA*UI7u91-rQ zd3SA(BiQ7lv%(5$Q}UQqDW2TL4C;$k0J8^Z{mp zGE%)qsw;8amEEhfM5I7Flj}^7RWXkP$O^dBjO?6v6p0m)+(lx88{xRp3x*{bu+|IA zV&wFQ6^9l5VIi*-&*f1>YaOjuFD3Ykd(&;Fo zepwplGFK|2$IiExeJe%upjc!=9m*^3L!g)hUQT@Af!S%1eUhLoAa`A?eA=G6(uGhu*ro z6;}C(J>q;NRPFs4u3Q|x9K|a#eGjhbj$fsj{*{?n6<)uET(j^wVmS92EV?qKb4#1+ z!+n(uvafEV6+!_0oA>{X?%Gz-0@)(VoU5RYcw;^V$Xl-biU0dg)XzsN{=xtDoA1AS zjb60$H9~g0Z3uc(YgFG0&Uj|`>Tozr(=dD@ zENo$gN`d}naPlW#9(>ccg#PAxzZ-S$#oyll^8ar#zJ6jcsOpO`v(V9c*8Z*+^iy?u zCvL3|g<2Dx9;#Zs+A@WviOvS~i#^d9Km*V!o;OomS!IH?R>bnew)vjt*uIN_5fT+7 z6pyls{+M9qf&PB~QPqiuMAfD=^!MDaPd!{300}HC(X%@K|NJA|aRZu|&V&~7oDz)a! zn9KFB2`h2|_$I_elW#Y-6GvZW?fqe-x0$?Q==q!(@px$9B0Un2D>tGVmb<=PAcQuB zN4%&(@7>$;t~=B&1SfrRsv-xT&n~_K0nlbw@HJL%f@+Umu*En$kcumRT0JvgebLNr zu-<*Dcb`pid%V~7hFsZPqCa%<8SBBM0cxH-3;GYQd@#M^YJcnf=QwjVGEPZZhk8YS zDxdt3Pqt@1@;#Rx`K$h#WfQC?fcQ3I=glj(fO&k2Wwu^sia)y-_nk>ubTSBxE3`xHh55Oc=eR4Hh{q!m3= zX2-dnS}-(D6&9K)DiG{B73S&&y2C@Q?yz(9hfX#MD^Lh_3)wlVc%lBn0D_^NzH-1+(ezpo%Fy~MIaP88!qC2?y zopSYZdg%i#??6M`{c9o_>cvffFMJY2u`|U^m|L)#^#Okj zcp^f%Kr}8=2g=ayGfLOy3aTf#(nSAi5cF4Fzg1DuKa6wPuhvAZB(WZ;WWcnFnkYpT zooWs=KqyLPtE<2R{e>c|*t{NzW$x*t%|uB8N+STem}_VZb@Iez=le_ed!a=I=2&$R zTb!7$^;n(so-^ZS4m#T5vKfb#W3y!xPwm2Q-x*LXBWvi&R!=OK&2u=o*;*k4wUw~q z$UOvvHG9tN(@%hpuPu*{tG?hpU=CG-!Y!MH+OTF^|7sA&c)idSheY;focEpcPfwqw z-0Ks0vhYa@&lDpI!kRIc-s}=&Uq%9J-nSiD#jL4ayf62zcC#f*;|<@!^AuNe9}h`~ zw#tupn|%}{N~~Kurn=BJr+bNHU34~VXY3YZJ$qineUWUU>gh8qA43kC@CcoB{rx;z z4gKDwZ&i0*J7KEU));5JL%3&?QY09+QGWU#Tsxoc-vBiGno4|&Z_roXpudEqixXaJ z`r%V(PnBB?HZ4kYOYh%$|JPi8c4o5`I`({(f8vQJLPy0kQy2EM1~AzMOrBE^=lN`~ zvC#|<-}6^cM}O>PV4q~5zj5F6;6^h62xiF@pdWpkkE|XUJ(6muIvAPL;KFmEoG{U6 zHsF4P2_hHM$n$AMf56mM1W{_3gQS7}#UZjp$~Dk`d1$9s9bFgDAN7<61TeuP=H{%- zsY0mCcJ(dt2B75-fPq~c)R}3Z0YL^p|K(P(3a#~oGG;10gM=rSEhajD*%lS}OpyyV zm0sk?52bDh#iF)>v!-<|IBNf(+ViyQ@z-K2PE5}{b+D68cY4|yr^Bq5D_g4s@zm~F ze}pkw#3XOb>@m4{VoT6JXcfE)h{wJUwwjq}J%pG4APii{MzQi>FpW61+!LF`>un7X z!h4U@=1eI@rWjT9XD8?%2l^}0U9ljD3po(@3Ae|+AOPf5cRC(U?thqjUqJv+trI4% zG(dEbA{#`1hg*<~k-S*FizH=G#6%dyDTmY+6<#y(r#SZi2Y4^W|olkAm-mp!!+vH(gE))Rg zl|QsBvgf$$ta0Z~xW!=El91c+<3-b6bNShsXO{fbe{t>a{lxVr|A$dC^7!MAKlv^9Qfq4x|ts|VD=|fp!dG%{?G|BFg8J%B)eGri8@ zJb#bJ9NrFtQeAONb<r{cVfX3j4=ox%H>0nEarN zT*e9H3h4JLSfL-)(RB`qttjpgB=hvIcI1Erq%#*8#F*qV5Ca#vFK0~PXzCV z6T_h-UDhw*@}h@sG=PFCxeN_J3;KJj)*%2kUrH~y&pYd=0k&rPtWEY4pUj6|3s}Qk_Q(B&{19dqe0H;d%T8R4^Xmio3uajfvntD6?pI74BJ5qfu zcm8u#p5A$2?OpREru@kZ8u{TL{^3Wz_fdEV>5rU`nTsN8gBBvxobPaoH>8O5PIslV zT2Ye4YH~15x+@s$rWD-CrT1@MdjI;-EZg6mz53hZoj<_f{Ae$aCzS)(sk z6q4l=24p9Ftpled=p(GGRR(o{Na` z8J(QHP@U_bI_rTxRv(BGNRf<#{$Lg$h_jGpIyV#pva_nhK--B~kPWhvs(d2sSn!M` zI4<{)?F*3I8A^28KeMc)L-7w6%;`84D8q;#f*Dq1B2H*+K{vHLHSy5Jn>3}EGj~L@ z;ywr6T*VZZ&;4HysiYe;z=Nj441I!zX~~o%;@~PO&MKUVp7xI@qFf1=7XffEe#W>C z!sZIiNp&g()e9*c50Ekifyt7=sdfZw0o-xVotQoe(G5st%p;p`Fio;&ZPymNq-4f# zi%0Z&jFL@Wlq;9u6F~vcr?bk$`^*=wKGx${#E_qv;);n?*uqHjAOndj_E7~KF8WMD zP7H_N42&GmTSNzpXGW9j$Ten4PaqU5m*8eRw8aQd-{gW*DZVh+K+l1GpM|Iow7{(q zFgo*!O){{$>aWaU44!gQ`NWB?@-$XMTOJ~(9IM!!B=7cr7v4Vz)zzebZ_>X{bnjJZ z8s>x?^nS{X^X@9$>7;dzN2CEF5;oE-qT^s`;K}7@#t%=704ncAPES> z%A*C+TThQB$;w)uQR=2Egb%gaQ}^~Z@4brt!5@EVyz`};&BpuBUbuB!g=U}+^B@qS zSK}ZB`u%ap?QFS9_L!NG7@*W?WA)7Hqk1<0I%lN^P;@f-{m#_dnXQzDnf%xkx$Gdr zLBo-;M`kgVo&IS*#H|tGGudX0r{JS4=0Lpl$O|O$m>^NH`RL>(sXdkH!r$E;HUqlQ zuBen)#R_`1G~djDej$NHCS^}4PhqSMB8p8!&+!3wweD7a^KDt(H^_jLYsSOc24wqJ zAfKNsc0u+F?;LCMMguB8d#Qu-oq?i|sEBwb{GjY!B5%z1sXgAWt^>uY-x`2x9^K6k zx$4`+v9@4MV$6;;ZoLI z6MHtr;l+kj^+@%$>|#ch;;M>0YasSFgrKv~TC-RAAwnn~o{jFL|3K1zZ?}JcJKC+* z)<8(ia$b3MslTvS%@DZFJQ`|!a^wA9T4{i9q@t*gg=6Qaw_Y8iH_n*lQT1rsN zEBeP>p;F|$&$Jnfbf7<-=y~et?~@0_k85@meog`2rC}ie6uxljF&z(BO$VR4hrZDgunG{P8L{;Acg9+$QSZIc#JL>R=0tN5{Cq;&yciURs8U{1-OcKVc}0Jn?Wt6r zIE!R>=KOOwU9*@kJ!#p=fCTy>0HQDAJkTGl>d;H6&W2tbAmicr%J^c$6&8|{f3n-7LIKX`67d0{qvp|wfZ1I~kkAb!YV!}(eu0xOzn>n!OrFbk9i z`hnV_N<7kxlLc@@H37#Zwa$#WTn`#hA<~`5TbZnIelH93UyNjWx9kMMVy4f02mpr$ z%sp|YB5tt{GEkf_K&ti1wtTeg)JaZwt^1<0dCK^p0jCCSO$zFqgoXB(G7tca<7&_n zFDH%2k=-Ij z)QZ1g#LV$Ns$99mT6&}H)SY~Y6QvkcPfy19eOx$l0u2!50_bBdU_-TSmUJiz>Pr0bqhOK=AcIf5k7;81MBq--k|m z2MGXMy>#w{bVi%F+S^=KPw7hbddp*vJ=XsD(0}qB>@UiB)Mdet*4m z_x5mKJZs7u6EbuWteilFcNPU34jD2&&}UJUyr3ZA4hDo6)X82TXMtx*3tDuT{H4P= zh#1R+-JFl%urXoFtkKmCFfI9Nbwr9Aid0%Sr_Kw*p0a$Fn=Tz1>|^zo)AD zrMjnkUiNKv$@y-fx2C$P`l+X?KHuxk89XFU+g*na?A?Fi!fS6O?Kj_i^Xx~nNTX-b z4_QbkF^P~Dp-I)QAng{M^T2PwKixk2!8|Zk7N_Fcq%t_7+pE>xRkRx_OAAZhNAG)A z-hm=xn^ytA-2$+N0GEh&o&v5ru)_t1u>S!HuE@9HRnJ6ZC_hRpn^+@`6(Bl{9La8% zETI&Cu0|e+F^}3KjBys$sYT>>D;g6F*vCoT9^UQ@X)Z4@e+~(GX{iIN_9&1HyD$Uu zYd%pH7|2K}5GhQHAr3S;1R#za)b|IOW(~}MW&T-&PKaTQg4+t@Dhu@e5B=p@ooNyb zGFBUOWx&)Lfj9{Q>_(ibRG_`CEr+8T_vTpWId0YGBXZ6G2`^V06@=*#LhK|}kR8Ya z7#LLD!4V(%4kT@G%!-0+02u{?mC7IqrbxtQLtMfcr7~2ue3e_$M7dzx2ZxA{3Tsg5 z%|3-AVmV~MaR8y=EIflnwV5!)uPu;J|i^XWL$*?kW!uG@YvQiCdvS zW$B~0DGlnEFV25-5q=JD-#LHvk~ujTfSL;Ee^nMG&x^nc00sI(g~F36U@?V>K2?Py>L{fe2WPEkzaXA+As^VTxGH zSPB7{7g$E6-DMCZP?IUG6{gV-(sn?9Qcvh_+mgIU)b$#D<LfQ2>sx@kaNc3|qQ{?*}(B)w|aD(b_ z1E5^9o9cyxSE5h5V|uUU6V5D;(=NY0CYQtEZ4{^N-bCFUUhOTnx?BDxGBfV>T{^3P z{xm;+lt>nn8VrCT0_aDbOZx(xA`BiJT_{RvLVwW7Z=WQ zfBOToW#VfSvxjGO-LV}%@H?LkjwU=AV@Oq`SWE%s0iJ#?%KPc6OXUv9XJtrTc;y7H zg+|8YjRG4$OPABxz1g&`>2JyFhr+1cbq8(B%?30gi}rwlPpan*stiEVAE*(02=wQn zjE7i~r%bJvVR=h!MGBxK3u-*ZF!SDY6r%a${zZn*J%`BiONU zF=@nT7`A|^blEEBn*Pa01Hd$o=TRO2?n`ZzF(S`N5Y(X9wi;C#%Xt6|>e>TjnSX~Z zU!?p4 zUC$0qAX*)BZ^6?Z&@5>K3$r8JcS5~>^%9-m;Vnzn!_&0~Bl;s$9Uc2{_C26K6ojcJ zIJF(bo1z6qCM8d=r|q;dfOg$oDtuzBbFaY?jw1IFKu{p$Q(gR>0nKA%~)4fSq)J=~28*cSxv{I$? zN8QlBTzfya*Zett=bkl~^x9Ra0j$MdY$Xw+eqjIZ-@9ku%(>U0?s*b4FZ|~hrvAf} z7kbdo8jwj_3YUu0B+@Dk5&%(zku2uV_`6idl8ABEs5e0IO{R<^XF$@^8K?-hy)q~P z;oNw$&FeD4`MNhhZ=<(^+Piv)=gn0|<2xC66e*qthz{QZ{~L3c;OSNnvBxL|JA(cn zD*AsE)c+4cp&BNKxD}6M%K5TtaS{Hn~EuL#a=x%%R8G zlI})`YLGS{4M3eA2ZJqBZ%D3)!Y3eXYYcD?xeC0?;qsgld$#TFpw0;M>p@WW*+RT1 z-*s=4^EjgvFdlj=xEd_I&qLTFLW5a|jS}RE2IGNFq0dw_`YEUVq~q@Jz1e8nl`2qQ zkok8#abkSXF!I({j|uZgGZgN(T%?hV3tVJXACL%1*d(J$QP=nI#W1Q>k-U z+Ahq?(^>+Y!@RP{Rda&g`}uoj`{zGU98{R8vo$*s=2-v*pNj0Y5p#s`ofU}=v2OvpRWgXoAd#;E1M)dCOjmzQj7aH&z(9#9!cpPm;H->?1L z4I5tVZP{3Rr*$B}Sy|8sTfWSfHFM!IOA@NO1-J+9BRVDxAci|*l5QGsNCcAprbuK1 zn*Ja#fSBeCmdrc}Q0k7dunzQ(M)6wfQ0;*#wWI-LT7zgf5L2;rP|_bt)EXNw9&{X^ zDeB2510Xg!KMV{2${G}_b&;4mVa>14(}C@5`Knr)1iEdz=_uyw?aS=EN(DTHKTz-` zYeX(VEkpymvG_|h?Qq525oOmNM(hfMv_m)S0P&$XgSS%W21=v>sBOLK2gLWTI_`FO zauat@rLHWo2LS!S1Gx8Ib2#4ICAYd0D*9PbPc7FVhZoa7LVuuRhcm<|j<$fJ46h^O zT&Z&OPjuv~N6eoG{^{Vvd`_ znfF@JSx-REV6|_<&?h|0?t5VrmalKsJxFMMo)4M=`$+=ywJ*_vKg?&QWVr{t9Fg5CAdu08LM+ z$ODG7V@XfqkpWO(Uw|kX1P_ol05Mo&$>$tb)&uXd>)7r<uBA%j(I~ucoWM|>hYW37X88Vg`q=x4t z=Rqa08U3t9?n(sc=Yp5LoqloJ{0Rnt`f91Z0hDU$$rC$v-eb0$JaO`k-+d$Bk7R8? zlz4#IF7k6QV+bXbB{Vb?`0^SD=4Cb@OleJ5qyZSJd}3ExS%~^He)ThdvBvz%EV!J` zkQzX8pDjs$z#jwdry&LYVzhK>Q=)1TD5DAe0lNwPZQD-h9|WALU(8dHSaw8z#r@<- zjZ^6i5NBXigOXa+)>|e$Agmh(ki59;`+$3o5{W!Y2lbOds3-=RHRf1=!pqtNTzjE1 zVDL-XfJ4UuOF=WNHGkc4T;KPgI8L;koCk~%N=RX}dR=O^x^ZAsgw~)e&WIlvul%S^ zi35=_p|)Q+0S_eZ8TJZ4M0L!1l57qgcZYtGZJ%^TZqtpfoA&p@;#7OSY3ZO3iB zLHWQ?*J`Fe7^|+l^x{joR|odpf%Q1;@Bh9x^Wx0-_&C%Z z>iB`WfgELcZ5-;fol+(WxSwxPpkVMvz${Wv5TTsMCN>j{Tj>RWYe#Sd7jGfHdkeF+ zil4d_c>1*^M^&VJQrRZSNI$;U9f`o_Ei?vs-T&3kgSmGVEC3J*BfK=iAYG&9%_Vg{ zd^7lkYmd10jb5;b!Ye3jpwOdM5OW-S0G2<3Y(#+m7EOH7L5i@l^9Z9ZwPGM5k2+(% zH>*}Lf(Ay}@)cQ$uR08O!mEsOBvH;CNV=RFax@6gl@o(avHE8i1vu$=xFFu5rCm;mkR4)=sK3|dy? z-9wG?eVGbQqBSz#r#xM+ON`Si;_q@KC@DVQq~zQen`0Y+4J0QY41h72(ii^A3tpHm z;=X(K?cRN}AFgEn>qmV9Xr+_KAA0BA*_j``nY2tyOw7*C>N>TkzT~FhEYg@$$#+;Ae z61}io|5q2~eDK5)Nx}R(xi1di@Y$puEMF}S8oROxbs^P#r*@S(qsXct|4JNcgK7w7 zrO~gSmC6{U@|}%XLm5L7qRazzBoLWjXF=Vu!Ftqpoe>%` z7S^EXfLItU$B%awDiZfWlHMz6oWAck%EJ=b(mUZ3`e0DycJezk>gF>)+A?WKknIuV ze#+6V0}dzcK{k6!btsDdHC13&-zD~^bw%0syDbikTm5Yb|QxjN1>< zFfXEKV_8`g7`HrcjH`+|heY}-Jmm>D4l_>9;tGMjVkK7$boT67^VNM{-nXHlY)$nI zppB+ZP44)u`^^^cfT^jeTsJ1vg~v3){aQk7=NI#zKq};cQEpTN(XKQgN*mE?(_DcrG=hJ$Os+BWru~BAXl@)S$4Srl}ekK!*M` z{ft?xed|MNxy+CJMtgwo{X+H$i{Q9Cmr@CAz=`P}%rU#(LFhDH6~>c}nzCwTj-+AJPa1UMADnoU>=o_9mb$ zF8nut{Ws|kA?bDb^5u*F`{LJsZ)dM#+Z5vJLhksj`{C(%5g@j?_QgwYCw-XDB>J0_ zgLQk6?z(GZpp-I}{d#;kx!^?g;XKHV^||~Q=L$mxI9!V$AeVv{ArcVIHi-<1d}kvA7ffpqCW5m#!``&zpNM_MVjQD4Z*vCj+u*PInXzq+EqJchOvkTis>C z$out0cX*esJ0rg-gQ-ilviVERb4pdJCD}FBXn2xokls?sP}?n>2Mn#G|7hBKD7ts< z@QrxzH*DL5;yA83jcMwcc*24{Y`Gy%Na(XrW>203p-u>Hf;hCmw)6BH!hZ+Z@oN?u z2b7YMv)$zxE)$l~WMhjBAPN8^(ikek6*DJum;NH^Z>>!{TU~$p!lhmRc-Pq27}Nz$ zH@=^qjx_beqZ5;-lAnuSaO|7MzWd~NTaVJNkh1}3?AjPgq|u+Jzah9Sl*$W3sm)lx zsk+Qeg21ulSeQXJm}5dNizV9vEPDn^4S2c(#9yfEE=vZWspTZ~K_`I)nB)zzD2-YL zU}{`_8{yQJh`Qn46$y8*_VebocypIB;7;0W7xOLiQA=$;edVr6##bkI`>w)z#cVes z^?fg?WcJAT!GCS!#I~8*EGdJZEQU1)53tm592YIq2}q9NOxXfbPqFbygEP#fDW%fK z-fS7&F>3xid~n~!$GJt-H-L^besJ&jkKTCUhp#0q=gyt$WFQy3xp8ehAeu9#c@7Xr zL_fd-qENIA2%hxU{}?w|03HD74^z0%l+`G(j32QX3=R!8mSq3IN=L9A+8pHV zSH3CCK!5317Yo+NOW=rncsA zNH64VJ8%2hrJw0K0G-9CMT+|b6HWhS4}e!@XFYtC;idF1c;zrAQHZD`pSs@MO|yUy zO@EMG8BAXXjn)A)7BU^2F#Wj{&L{QC$jz%+X655CTTSql)fI9FM{a8YU)Q_=RA&z_m9 z%|V^2OXA0PZRUQl^x;Mx67;yv)p!@;|UT)t<)LSo*;14@RiXk0NDG%{Derf}RpsS2E32 zqi&)z?c{ZG1FT{*FwJJkn188e_VExmfCa{%n7xSFDKIV0G&NC6>P(IG{V2(f+81i2 zeVB0ss9Q--omGLo$gP9G2I(^c-9%$1JeuAc?DxK!lL=Z0m&! z7KDM^kp-Fg#F!8Kv(J-0)jC!`RbA-J>B-T5bidg${ln>(reFHP7rtONwncwJMqnR9 z@`lS>O-o4ET5u&rk)yP3DOXt-GE@a?7GtYW=|zQ0n_Z(8tTdfdfh_U>O-XnX8a*R_ zDft{LhK_Ie5i-6DZ;IP#mxj1Wryih)$`FE2a&7QpQKi^8)FT8f)PwrG1aDing^#F=WIB2*D zY4&W~&dN!we=FxyI#B?WP3;iJXw)4po&N9y0kg<8JLs`ho zh395S?WARLGCS4%Ml^?AypYy2xBD&^JTU|CUXJoWZ*krrw`85@zG_WOOypX|@7mw% zpthbi>F#cF?foaao_p%CTqAfuac|KP{gJw>P?Dc*P>5AolMSS59@1(yjfu|933?`_ ztGBX|!MbpTsc_ujMrrI%lye);vJ<>gmiMlm8yj(2{w;I1Nr`!JQRQxi7Am{asR z3mYX(dB#~snC@!kqJjBFYCKIb!x7{EjIj=b$#sK)#r=3>0B}4q=PFUVW6+BG9Z#}( z1oWSonK4@q?Atwl*Zy9|wI$UzfG$LgIuFsA@0}QZ`5v>wtvhe|+rPV*{7mqjFkLI9 z23FTQnUnCu223X~`}pvu*ddw7dnaQvODs;Az86|9abI}hg{W@1y7K4GJx=;0 zTaiew1K8Sn?(}2k&miQ-zIiOyhnWoPKwNNL$`B@7lq6`FDnb<&Kg)!Ta@`1+E(?iD zVIP^yl2qsIJgf9IZYqVk{_?+unwg$?;HwYh8pjXr>2+LNSbYOnmF_*X|L~!GX3M#A z=h_bwaiuB!1Q+j!2`0^*$N)sgvErftIudDDo$F+skH-OdZ z-b4GUL$29!+s@mPIs;Inl-+qXz2SnJb+dp6Xd95|HzkbHtio5g>t&h_)a{Tc?D83M z1gFR-<}0PvvE{zf{83t@%-74|2(#t;oAHQj+S8p(p>N9E>$D>#g{9M+vyQfjahAH; zrZfXsa4|(+lMjJm6=Sex?zo+l%id&QgOb zOz>iBhWj9KCXAmvoi%ffp}F}|i_W;;NgpF-Oxq6-Ok_~lbY0j3=>6-q<|F7y;^Y-$20RaTVPj=-gq@Tffi$3QV$nx3Mu!7ja_2`^!zfj zEt{J4g%ZUl)%SdO&M4(xO+7i;>!7a%^$lRn^wblN=2{+^d?e=q#rINVp~LeG;(~K^ zLv%$Kxa9htXKuSWl_>EWQDQtTWqw6_&k8I-jzUIR(IhK_W=F#DGgpwhD5S`n3CUFo z=ESLyo2A>ev^KM3Q<}5de!qHZY;g=EDux`_0S}m%n8@`VKe(sY;a(%MdL6*EAlG%_ zdH>-90En+0J!QTE5BQxg{*J6!u0*)PJB^(HDxnCYt^!%uN-=F-b{g40^QRLoGoB6* zBnCW(4K}uzWYJ%E?L~K75L^_GE$eS~>VSb5w-18q1R1%C?KaJc30zSYXeq;SKAt4O zoF^uo^uhuc=7b}jhGBHU1Q+MC$Z2wOS|wLFvvzY~xMVLn$U~{R_Oc=gZZ46lYcVr3 z(@g)vckes%^oh0l>~*ew4%brmj~_UEXkV`Jj@@_UT3AyhRWt5rt1nVa+r%VP;p@KD z6ohH}c-Bd{gO=4yo|KLStWU}cz6t4En>=h~fdS-N68iVGCh8l&8tcsI6U`oQ{P=P6 zCo@V$8rC`S;tz4bp)eumfTyk$NY9Cj+(wjqv7Pki%D$*=ASvsT<-%pQZCOLLG=mjG z-xOnPZSt^XHKWw)D6Vn!4PfmB9*}GK@%bOW@mCj`d*8r1nno!C$?)mJ_Gf$uBb!gX=`UbEDB1S=$EdS}5e_0)J%{~twefYnhe-)ab zaOTUxS-=_QI4R5!5=a&hQ-$XXXPk?u1Ux_now*WLiaxJrWATL9san}aBA5xoP^K$M z!3669VRSN&x!%>}oFW<(Oa&H&g;0`|%qAHniC-3!EwNhXBq{s!IZw;^^XI)-`tA6^J!gOLc;>G4wQBX# zxGuWq;NGX6cr@4e$ni&73~7(xcIs$`qAtMD#5}g1M6Ux_A2GJt^RRVw~&n%p!x=|UIGt*Q=4nNZTD?aO>hLf7L3JZ^!N?=2_i~axrQ+`Yl~S6 z?sWjyy@3AH)6-^4pZ@Eoz5%SG;MBJAfF`v-K%ObtQbyY(&+||b{kLt~)~Emasc!&lEMgSba-V0(WD5@1P6}M(gp3RWyrYu2^BMs}J$XqHh{MFHC*v$FdP2=#b53(CDk4sc(t#wN zRLQk-2orIPFzyVu1e2sh3(@&0+W4GLcj^$%-dmq40)&Z6lQ3I57BL2ec~9%*;$4KbdPhd}!a9 z(j1805hJ_zA38u!+YcW7j@jW` z$G>GGbk~=@q<{J`6Pe&h;j+yKL`(tE84hrEY+;?73qWnrFPMNhqi)?GX_cn3?))`# zf>#~`CdGpV&l?e?6wKZxcG42UUy&GQg>h1p9vHDEMz?m#WWiY0Pv83KSHJqzT<7sS z_dNgoKK(aB>wJs)GIZ~u{m-3#EZ6wR@o&9){(NEoVnm9#U{#1J<>b{a(uTGo<_KQN zx>knr_V(6m0pE4mn9l+Id%fa~*35sM`Qn{l%ryf2r%p}wI<)IWeFNA~t=t2IfoZda zsUq?Nx!}4aGe9L#@tmSyo>fvl{d7^;u(YqC*3c3tEw@12WX9Mi$qZz(n`jFG{U`p# zM6R(<{|#2(05)3S0pED=zFZ@Cz(&V`J7~#jiz0i|Ds|!&&%jG&z`b5u2kO&*Gsx<7 z0N0C%k?F_3{m=&=UY>sCb+f}~KKI$5y!F?aAzVHg;+hl`Q+Ns@qSpd8&q}VkNoUGw zQs;V>$n9glXX-CjG^cu4=8-V*0v{5HVV2C1gj6VsXc7{pDUbvc`T5mLY(R?=ny$+T zf(vfWpU#PmIk}m^4mL)Va1+B!yr6#vY{dlUVuM7Ky=7Ee-SY+-8mxG6cP(1nofdZ} z6u071+!NfL;$9pI6n7~Ummnp@-3t`ggq!#Gzn|{6`zdQ>pS9PlIrBUtXYZLKCq|;C zq>fuWcxq3-K75`&m|11$h+bhI<+#I5squ6DB=yt&yO}HZ)0cfSiCvtIp2Ww;Ic8yI zXxVh0(50MRZrqsr_KhzpZOnne|QLpo~hxm>TUjknx+JO>6Gwa z5hfPVRBaT=(0q2k$fUODZ`9O8^H(+!pIw~OoUP9|*4v$GYx)5gM`pfMkDpu-h1$&j zV#wcgLeNSH00cLprRUZ}dv3^>Jup)(Hv#Ril^2(%%yu-aG0n>vg}F{rDn$^2162aU z89pScYG@oRKV6>}*COH)iP#~-KG#60Uv}Gne6BUPCb`!JtGR1W}3xB-*Sk69J{XU6I zHH{~+gmAlD2z@=)boLV#1;i|VICcBS<@^OjPsVOkN~E5FJQ{Jd(#3Q3&75a~ji2Iv z2&3>%CCQ;w`4ckvkT_d;{od8zl^heMhfFtxy*Kl=g#ouWFBkrGGX*O?1rP9;f=G}_ zP2m-_<8vJhk$Q1J+YeEE{`NA=GinnTk!Gq^nQPAuaTlEb6cMtWXA%M>{xZ>=%PRh- z7uS}nCT-Mo&4Dv}B44Wxy1Xysp9ei}7G#4xeb=SIQgOgEVIJ${c>^HL9H zQez2gK~K{Mg(76bIhuz1oQI zi4Q}3bGCj1y2>R1Mr%Z!VU~Bm1-wzkkf3Eq;bg@f$-^d8O~v|)Z-g?CeuKOda#pDa z8a5=^SjQX9=p;#0;dZhgyiWKw0)|hW20gmU8us86)$5j16h7a|b$P$+hkfV+dU0Q; z-ik@K-6iz-%jt6QcE0vcghl-Zz-j(L%%ra6-U%L_~B{HEg zJMiLTfDCDmGZugH=gX!8jQ%xKr8P@^7LE-`PyBUUPYU7vE}m9%7NH>8Wn=t9Gu)mg z&xC>NM-6jYQMmWE-#&&yX8A|KRz^oVm*R{CmL&Cppf8;r|DjIuWm3t+%2M9JyPD9l(ufN_K$7o3E(646Zw6IFzet++3ut=t= z%>D~WHM6>^4ygEO=6AEoeo(~U_v*1wB&Y<6bgRcv14X+2{eBZ^`tAq_x*zHA{s(@7 zpY@J?V7}3yF8AE81e~SMQC@Gc3@|=a1<96t`1Tf)<1ia5Dpu|9T=bWEoz@#Y#amh2 z!wxP)UFv~G+$=KK_x7kS`}Z^e4!Rvj8&2HmJ-@Q`S(l{tqveb&rq98k%fY95f6W$Z ztwor?YneWdZTZLU&4L{yUFl>f6!1~jT0lOJ)X5oBTNmBaq_l-VSktjNB4;s?O6EA5 zP-A2i-1MU(Dy+FcdI0v6?L3~%a*=>dO z&{tK+e6n{hFe;Gy<`oFOmhy73_C{zw`{i-6qc7;-?yd@#BU;rpcKKBBnMn3BXV;w> zEQZbY0pkLxh0m^>;Ovj|CT*m?$4^B(8!qHB`qRm!NsT?8@v3)W-J(g-#w^v;we-tkwoP)?Fz%$>MhMYc5mzG=@i-c5jgUF}5Q*(Zf&*~1{t4(=wh)-DF- zxz6fW9nhXv8iH0|z8E9EvP3?vM2Mojg7rO|i$9WdjmolY{?3%VxCnq>*CfG@VPcN3 zC{xmhUuKWK-}$t7PiyT;U(Ya77H33c77<45uH?zh!d&7BX~9q#O$zNyoPBkf-~KYc zb8j#?{$>%FLU2ih4j{R3&|`YV3qFJ%4(Jv|P{ihsDAA_@;QJ3aP|@$$cDRt1;yzxm z=*CxhE`J+{Oi10~heW;2^0wyav4cM?rn1Xe?ifDCZ~G>%(sRA=0a6C?8Pd7~Ch8iV zpqq6JA=3VVFtnGB)QT5vXvsrIz)i)|-Cw(FFbnn5<&N1ys*8q(hU0bE9ESo5Oo7=m z#hDI}zsT5Jq+|8QE;qK>;sIx2+JZDcx^1gl(wUq4sN_Aa5i|a@Atx$PCi?ZuHcjx4 zH!wMxrQ@T%WsgGZIgI1pM5`miDgnsE! zp&rE1{JS*(DMH2blYi)dVv>D2N;oyE?w5me!G^ADcMsgj6UPqstGnu>DWQ$LT)3%< z+BzVkx*rJN?LPqB!1G&z|A7(B<1`Ye$s%4QRn1*rduorqSH{&uS>8nIj8^>)_0y;Wu3h>sJMOG~^)UWttfyj;U(NMtKYx4A6p9agyo&4p_|LoeW--@QVD1IJ z=CgQID0X+!(oXc>`^l`=2z;hy1;I(8KszDaP*aJET>_t=>pCi*Q^4bjI-NXevd^J?K}r|SOeAsR{M<+$q5(D0PvboV2RYuE;^0e(?k?-;2(9mt0(%YD)SF@ ztUZU0vr1?F@5{s7W_~1#J4^sI9`Lk!(Mt#jwwZ%yBPJ?VKanm3E@Q^5d_`8+eohVl zaO4V~U~wAV{Y83wF7X0msE>E^mnKt!}w~{ZBiA42OO=q_n)fJ2G2Toq=a`ltO zasRSZP?DoZ_jHg|MBlM+4LF zv9Ym_rerHmGt|Bhd*3=)Vk*?ET1(wizZQijEiH=gX|8_k+~|ymA3I4#InK_oQzY8< znoY5B+hR?<&oSw2?bFoiK4lYouu;if{aVx7qEOxa@lvAI{HQNo@Z>k0D?mkuYU31k zxBdV!4JMbI82$%(X>p}h02$3K5sFK%NatJ}2_sQJ)XimP_;8rAmHJVgDsBKKfXv8! zzpwipZy^IItl@;FULn3~^Y*~^?Rhd8mJ_f)(%<-g<3c!1{*I5Ae^+@SQF!M(%~|Nk zcm_(D&@-iU|59DfI-qdJ3l5kt%jx~#3RKZT81Pq|z=r`B>VKCLA9OZ@#U&&j68XW5 zJ)T>sts(qrG(3O69LkCzrW62eb#pOJ*y$u-NH^;P5VsC+u-&4JAyJ)S5#uz~+dXjb zxZCyAsybHf@oCoaJNqo9WO(QK_3^HbmJF!UxnOzJWTv2SJ*v59T?_>?9}Fc@^1wd! zCbT!D`SY?F_JDL42#d z`5@8R^*w6h$z}_>rGIg4KRRJBwk-vFtP|v2nf$qcRqKNBISv?;=nC zHc^i<1yY5&W~Y;8}5rB_lHf7Txtt1Q1Nt+dekn5_59m$HnprDfCiENP8+6` zg#lZK3{QO)Vmc|kPia1j@C8wru!Mw-nSBv14vwq@!OY>b_rhX=uYPe}Q6*Ep`DgFQ zNPI4(R37Hp!qP|-E>F8nfT9e(84}Z9kd!+ISr?#i>7!os+V7 zvox)M0K*BnIm%j(*2b}qfv-LuR7_<+IBR$dODv`t&wspL@S9#^KJUgMt4(6Bp$$G{ zXbZjz*l0=Gso1EdjKISt*=;#gAQnZcuPKx0ayhxh$deZ8M=eq{N&d`JMmU0TH~t!c z80)Hh`vy`UP?Tcbc=(~<3u^}Rr=GM0BtfiX43zF_;zcZyT8t_HVU|(Ohu(G%cSu>W6(;q@{UivOodpgXKkL6Nzl;#Iy%W+|m>Z+!8Iepsf8kD?*a zry}!Wf`6T{ojy>APh`@ck&CnuD15<1?d3>C$HrLul~0iXfErKXP4kycTKNzz2ZcEx zkMcY}mR#v5K5FrMCGg&il65F@X6`U}Ly1s`JY#{#!21@a&I|Bf-9tK`k~{ z!|JY%xAyf49Ik)~Lz=bTF#)hu1+(Py)d3L2MOPXrosq-D zdgYC_GW!!MT1i(cdnlph%r^Ij7e#Vo!HN1fz&IMhnAv_s5vE$t{+dMqJ&W$Jr5@!a>{HJ1VW`Z!=T>52)7xbFjB!!F`OgT-<>_`^IXBT`yJ zlF6;WV`Lf86-aw*Gn(a3hW)$jpO5*~CQu0Z>3Ua8ORJplSB(oBqWL!8;@$$AxDI$Srxu>lz`!L&vg@5gx0xshj1%*(2xh7>6#EM{J1(Lcwek;o8~DPbT1_NFxeL61dU2E792uqcTXf#NWlTS7BJX`EQMQ&dYSqIp0!I@bF#DT+g2#ALPA3BWjQj5J>A@R zrmZQm?ahm`XnEV+A)+!Owij`jua+9A0l|zfjN{3n`007+R))jkr^G?U<1SR5Gi}SYKwwc0b?zG@E}+9U$r#zuw^np~ zcM6k}UtxZc9RB}vN&(E|tQm;bO9s3~?rwL9#apxQo`i1)chH@U2GrNO_x2yL{=MsJ zAjZeTFCyhp+6jGQU$C4!aJ#vX?j9Ygvx)uq<+$VsO;!GTWh=3743ls)I=$8_LKXZ> zC}5Qb%gboc1j=73z%ee)hLVLp!sr!Wx3(vWwrIHY#z>~ain_-p>Y8A+|8ckqW4v?v z?Mmr{BBtdDB~FEiMougH5pLOg5G2j)9&6!NyE~&9fdfn=<8W3dFv8RsoRkX64Le`9 zdc-6jz!W&t{g_bzip_pw6th!$a`why#a;KemGgh3&6dGWHEiAHZf<1HOWhmg2O07g~f!CtfQhW>ToKT+*+`_(J4!%29<-`hL=etCL)R!rxQ$2m2Aj z3JSlV|22Q-Bb}$R?_JV?Rx73^i@L)l;|EP|-*mUvYUwPU=$sDrv#@D+laV{|_4S{s zOWuHK9mh@`l5$!s$jj)rC()1X=T>big7=-h!U1oBa`K?tDMDaJ*)AU}?4-mFiJkfc zxgMK|44s_{msMYeW=CpT$LZIC8?D~2*r)sfJ-aBH!M`^b76`F^AobVkv4507aFi~d zuoRyF4aAK6b&+uj6-2|sfo3XpeE6E1(5+q!3AX&(oD-P2_^2i+oFc(_Bg*3zC8|)B zz>+QZB{a)jm@FG<3sZ`{7yM|Tm1q+oV2T>IMkjvcDBSM)Wm17*$L8nS-abcGL#tYT z(2{+>r-Jsh-|aTp8tKzk%~SA8T&vXEY1_LsxhK$hq5Jq?hB&q|P}Y7}1XFI`fb3Ge zp>!A9{2{v9RpVPS0ynwg-+A;DQ6yjsa=6a}G`LCB9#P#_XB|5%BhY%2?=)rDlRC>@ z&G=|;c`U67A_=zJm7G5$`%%le)U!#r=4G#Z%zyQJI=NFv)03iOOL%|Q{}dh4n|fB9 zx6H{GQSlz>(lhLh{zT#JPzIG<8K=x$=4~<=@J#+8ZzxJjB2S)cYTV{MZNru^gmmT>RbZbJ8H)}kRW_v5I0>Gl z+7xA$Ng0gOU)q(u1;Pei+l6oc#MO)~(Jw7_eT^>RpZmG#k5a1el^E=-5rKb-6aLn9 zUU8zUuwXU&yy-V7VzeVv(Bebfbq(|*XMn$%o6gxoq5tUuqEcp8`f}D4bt}~fm5k*4 z%-LGn2S@UKWzw=as z*1G%iR#3}5{Sk8zVo_I_w#mjWNXc^QKXqUnAE_t=pG|hiBbpHzC-p_-2>n$(C)0A3HPu!TQ0fPM`%CXbnJ{z`WM9pbb7>Z6(u>(RmrIjysYVqaV_8#~((9HWtC?jn+eM-* z13zOOe#P7sc5PdJyG6=&NTKlKD4aQVPL&zUi@ek(UfRDl*rqE@d^W+`s5d`5f7U`N zm9<%5ViJ!ub(~zp(Mzjxx!! zBz0=3;OC(WnlWudrPGsMlQyZ2b3V7~&Duz~$TwqC8f-Qj-IssD`)*akKb6cVEXg+>ggIr#ba1GPR!s7xbq`n3J=<|sP-|$z z(dmlnObc4I$34yjG2*@#(z$26B_MuH37o;V9j_C;{%KJ;GBVP4V^&~~1-XujEbH42 zRs!`zxcmH>2PutH^k1gj006}ODgoeN#1Vl>=9YVI@#hl>aey*m5ofOJoWzNXK|O_| zWJ9Yg=xNW9{4&&78r8TWxy0Iqx-mTbGxZUYVlvM{QV!e#Z#g9LNlRBUbs@Vw-l?fI z!6&73*7cD}!Q!1QrK3X*Y2r_MniFI%B2)m{G?mn;t-D^tXQ>g(#8K(aaNFsxqrE*{mpk0aiS7!o<|d^SUi=hSq%mFq^Qv27NButh=6_87 z$myt(Tsx{n=La7+Mu)Phos8&ZE(_ly3(Id}F~A)$d=5 z*DG)#(iugJK0>WT5oaWfPtRNNid-S*g?jyZV;vmLN&&y!l-+L*vhOv&3^4H*#Sn2LyJ3F|jd@)v zGJ#o}PEBmNG&pb2JEjH)7vj~lFWC#o7C)EBQ)5!`pzzTAj%LBo;z;I5I{?DQ@j3j+ zva-8;bjjtSGphKame18ACFLFcHgf?L+;erHq!(})%jDAHh!qr8jVAg>G^${uYhVSj^nG0!+O&KxQ9Pn zZbB!2Qr3a9v@Vk>O-t5#=L;vRYn)o1#2pgga@_IM{#%N9zk0&X*95K?XaW~cXRmD$ zGkwMgA30$Y!p2H}9LEq&?K1Ti5Ft3lu}P?jD-IAvDN#yoNDe{kZ_8JF3@#c~5_{GYEq9=pY#1WZ|4J#Hy56AQ8B-a&o`4wlC4st(;z$W=@ z7;u?zqR%)U)819<2sn-_4Y^Dem&qFIG!V|t*9x0jV$R(D$__=`zB(M4ckM2xh{8=0 ze_2(O>LZbsT1YxwIq`l4+d8nI5r7q|V?0je1Uz!1A$*|s+g>H0=ED*1gyisK)Kmnk z#HRMK`oBL6sAx}px7U0dVsim41ob^QDC9;`o;rD|-%UO8&s>|p$SLJgo1vns{A96_ zOW=u?kLKpg7X6ZM0PZka-M(P_4%$CXxpC>K4R#)+btf*4*+ex?nXqX*iB)-gYbbA| z{7Kr0mFp#7UM@@%{a{irE!={v;w;W`4@r5fHY8Y-B5Is=o@|NlfvW3F4MbqM4Bm%;EXXe=xU(L2Z9nx+=TJ z`3!M~>eZOHt_*KMX0roqx6`sLV*6ajGQth7;Tv!aZt1ok!w{N{-R+j$t%ZLkVZ)sW8q7GP>x>t;m|IMO($Da%nEJXHgq8PS~Jpp z4KQ9072W!Sr8M5Mobp=IV_&t|AwleFYj*aHVd9WsAlXOPj*a`pA~Wcy0Kh{SD;`^{ zk8=YGbec~n2Y_jOme7wsuBfWtiCj;0jU7<1bJ;&bl|}w4dLnbzfQ*J>}cXW z;*9U^w0<`#?)6$(92mO_t6_rwWSvU^(3%TrHDs{KC9usf4ZUIZ*J)hboEG`X?}-Jp z%xe`ztBoYQ&b0bLRU;ivtLJilOTr$q54|B(v<7N_sT7#1-J6fVhoVHA>q6Z&dumG)hn zyJq*?n(`5s)%+@2#F_IbIQ(JFtr-Qe#O8bM=gg5G`y##H0Oi7WBJClq&e3?ISbfP; z=`gLXFDGA&hbe>n{w_FHj397r;@ZI`=^{B;v?Y#Uch4OSvlrapqr_a-W!jNyzL4y_ zU=P0?3zZfnWjU))4SSFaKKv{i%rteCn-tAbNIg!SrJHYJ!0jjeOH{Xn*O|A{dmrj_ z1OJ$#ayAMy`h!7k>aKWX0gR2u zixo|X8LWtJbJ2Ol(|x7QHL7n#sxhc|rdj6O2h&D@!%?#y{(}r|xx00V=7Rz{yT40J zGg9u8+#IYlyzk>M7kjyIxzn+ODkd)g)vg;qseyt2w@ntkaG(Vjo%oI^{IA8KJI_EYpOMP^XV108YtwUTRj-K>eQ@6Y6(=MsbHA(odyQBi&)9(Zo zHXYRzRASz>sCz$Xyt5!Qpq<#o_D8ds?`=-YI5sEcR6fov`C52WB9QfTC-z4Q+{4jq zl*U2^(>nmC#)}OnA~w@%@5tTV`}p0LOJR%V{r=9(n~^zuytEC8G1^HtDWE)SnIVR` z0Ds6%kLb9rc z-W*oY6;<@Z_Q3fo$utRBDhWO~Ax&@Ha*y0)&Mo@4U95_^PDB6{kbDW2PriIx<@1dlcp4xZrjPe=jHv)(*uI$w|<}qTg>*E5j$0?OoHFo zlM$$R_@A8m6iMDqcZqI}oU59)FXRnY6U|0?)p$L1dN~%a`wog$qA?tWw!J)mu7uW_ zIPcV(bq%+gK)O0i3bKBL%mGCEJ}p|_6cmYrf{Hu$qciW~PTF?7z9YiI7Di)1cC(=M zKXJ(K>Iu(8Fo}fwvF*^mzSi!eO<_CH+_b7@@mQtT8-7Jxg2j;LVU0hswOP%tHZ?9n zl%35tWWo7`ir7YLr`34V zPwh7paFZ$os6VTAtLn!%0FzE*i*SDBS36~Y&j@S5jt0vbY#~iX^4SJ+A!D=eTE;Ua zqIvG>^p=#meM|4^|6WPkqntH)Lb@;i)>=K>k*W4g*H`;hj|mUr#z?PhD|~fvugm(~ z#Vlsz=;`^Z%hXHMO#uzI?S(9Z{xunGE`x#E_E4TrJ9_z-iT%L0Go>+yJRtqhcE@G= zwCv)#U@a|SA9N3MY>H~zIwJnID%z>1)2EXK+vzvw$9e^DQ?=tq0)~gxFq8tb?o55D z1MilZR$fphX`7j6E}H3XwB;|VJ1FwiLF8w^)h?A*kVAxiQI+_q^nIg*v;&W*wR|*XIt%@TVT;|D8fm zF_zDktBX#mrkt%SO8(7p2d(&1*As$Ve7d-)!h1x=q-1dhzO3aTo}J+q?QT??E-R|H z)6a_-6>~d}uI5P;b`}>~UARTQ%jrV^#w1&Q3#oM6QZ{8XfkC;F=n$CRRr(Ewz%N5~ zDpVA$ICELuC%^96=3|4Bs8942lUEBl+A7ywF55;=AFt8+M{iTp1cYL}Z0OZF9r7bp z^TFHQ+t^_DSXNK+-MzgP_3JQvo_O=#KV9Qlp1q9ayw(zYyIIo-Pc8&*H_C;Ay`3wU zpVm9+fwT{@6@C1_XF5zyoAS?}OOt|S_6t4$THX6IEscmwBai&P1`7X}8hU)i@U={~ zVydfFWr&E1gc=}_3i4wI;q7?@xA->Di*VZRd@HJX2X9cQ38Gv8Bbpj zlcZ0Hm^b?=3bC4@=(+csEdDY<-S-$u4;cCALt<+BX&ul_EX%cdDS91qrH>aI{z|+& zJw1J|yHxVpV=G5Gj5RnZuXwQ2Q=jrTfn7sQ?P|`UH#s%T^!yt_kv)j3X7@y+HHNY_ zioh;*->KviY)pFc$$Y>OwttC(R?zijXAVMBHw7`*WPBg3}I_x_v; z=c+oGNX%E&RRxDt1*PN*tyXnp*Yq65os~KYiJ4rK?)>?onnSN<*k}~bs2m`zNh_a{ zN;#22nO~^IgB}7v&$|jjzx<`hV?$BFwCIf` zMM$*&f0j}cpNiWK^AX$8`Y5~4Qb^+=%Mb(qZ%4$M%o7y!MPs_;PK04wV)e?o_oO%Q zJahG+d$Ds$e8P=;q9JPKud~)W2351nk5lVZuBYVzaeKd}u%s2+YqKe9Zz6QH-HLHU zJ3iRSO-aoOp5nrWq#nZv-UX1l#koIiDdB`ZJa|0~hJ|^*J?aF`ZP47G)G>)c5`^K zgnhCLhmU+i9+ONM{Fx(nlLu?p=7|sdIX+G|T8kwf6(l&D7f)168XIb5#{MX7@Bv@p zjDZFm=Xi{twEC`3fyRD(kTy#J#>i`qu*09lv^z9A!Q{AiS=2t4b2@i|7AAIg2<6bS zvT(n98d=}J3QGx7VivNfZr3P)6g-dH4d!=WUG!&NpN6qj5b{5MIoO}Z&rV}txx_1J zJ&p8UuaM1)7ET+Z$g(i_o2LWxa&SssP6+sw&*Z{#E`<~PQtXkdMP?~Gk^gSmwj*>& z$~i-`un2z=JkqpYFGoS4Dq83U!D)Zr9Vwqmh_Hy{ugKT{89ZwRr5QmdytVv854qG? z7{ffWl`$P@TI|UIlxoQDH&#I05>RTGDtkB~P~g{t&8ly(>R;;57P|qi_X$6)zV3of3($4enJP?(Nuc80&xN3M&&lU3 z=yRJ$RPHZ1AD4GL^(|-Hc~YR4wzvnsz2$3|&q4Fqln0B~$Uz5|j|7b~8CfCo&jO9z z;%qW&10U`GaHF4k?F*egOT2rrn+=dd{IL(HeAN8&LGh1Qu7vQvgD-)B#$r_{u*9ZA z7y|-uLehi^i*;wZK0ZFMV7fz^cYxuRk&?S41b`<)YDauQ&HrJU)=Xkd!4;u>WJ9c@ zZ@3@g)`6i2pabT@hRkOJ{)boT{||8gUn(di=?Uqgf2TMZG%aJFD0_oe=_b|6(OzC?VtjDG>D||V07+= zkzL6)8sB;zGwjG?Vm|e}*B8g-u1F`+(+bg)LQv;wK{Ap&OD_wgOj(Jvy!&lUn^_Jy zZ~{=^dql5<0KbmrW+%LLMK^TdQ9Fl_+vp*c5ptaym zXO;@3`HX@v<7~7A!1Ag0x7h}Aee3N5m4`;-atZq9DT;~@?uGkZ_Suge(=W>TMgJ-r znCoV#`N0qE61c)I?PoQyIV+<|6shTHz0WSW-#=efzox)^^^*^{jU0<1-y1OurrjCZ z3%1@4I}1BhF?>Cqx#2MX?Y9F}J~c{@gp9tmwywx@cn0U)c@$Fo2Y|5@8uztmDAsFXb-*jugsvyNxJFp&Y=S4$#w(4_b28-&$X{*rI~kk92#HpO^oWpa1Su<>_#@a@Gzq%@zY%3!m$B>43UeZ*Qyv0=xZa zFRETEQE#<$KVT>L_Fs%xEx#6QK(xM@{^5ie6_464CPi6dC?xY(3@Ld12JkWX6oIk_ zCKotGoFonZQC2Xn7U9)HAlYr(k*kJk+%up7Ne$|0Qjru(U!%E@KWdZ7DU7$vwRx3~ zHn+s1M2BlH!!_0%k9B!DE6ifWG1y4ax}!RNX0+GKql6~CGyq%}d3&<&QK<3k{ZX^c z`jb2zX%p5%uQ4j%O;Pr8{M`A7vg_kB9`bm(?8@<)5XAS9cYb~-{g z<|Q$XA&9N2-bZ(lU<;Vs(Hr5#e%-!Z6ikOS*r1~$cQ_7Xo6A4iZ%RYjNUQv z0wmFu_wdtCl?~|Cc+e(}J57k$3FOK0fV9{m^r?tdUt64n;#pL$Ikm_^ORTbLh~^G3 zak|t#vYf&kc?qgdl$3-UHM&?hzv0Kl#IkUR-h}pQ}Ib7+LBa}>% z&iFt&+%ioLLidQOlW9A^Gbu4a!u!E5dC??uaFC6T7W-Sg$z3EtH)F9dDZ4Oi@ePnE z>%EalBv?ARE0PSn*63K#!ZznhhU`)Kq_xc+Taunu9xFM+(J=!wDtojtF-Qq0S~0&J zbPcOhkdPJ=BkmqT!>!b>!4!sR^;RPNo1Wq7ug%478VHq6A%cKF$t>mTFbZh@IdsP( z*53V4_gc>|q1$|=bxi!g`gPl>pv0%|#Mv7tYZ3V=pRNte%w{CU2NXBL=jd6sk<4Wq zJhqj~1qPCH|e9#Kf0TgK4KAo zW-MZ!q%eP}&Yv5y-Pj)7>n&leE{QA!Uc%eGjm2tS7oa(f=N@N_pOEgU?88H`H&5$b zk3{gVqO{4rxbFO%hx(xxubesOY;F-iT(%d~Q9?$i3#yMb>d$T$2@-UGsSg z^~u*9Oh{es(uHq3Pb^Lg!1B=jcb_+rK+m^H#p({g4>U=KliX&#@<8cceOXih;=HUc z`swj!0S;Jlh1XyMi;~n=%qrR+)H!0w_c9XY6m^@S*Yn=IDWwVUA}NcN%W~C|7C5<% zN5<3VwQ#-XArg9bsX0{j8TDd3io@6D0Pa3eM=Yw_CtPEGZ5W;WbtiQN{4bGdbS}x% zXcrm~J+#WFNrD6;LK9a2XqYlVB;|0lhrrfR@bO#{hE^?MTU%@KzkG8fbAUN8^Z-et z&+qL7oDLDen-Or_sjbx73rx_9yqd#B#Vdw0v+bnqUOlLa4mOAG^#)lOMG~<+iZ1{b z=NvWpfOzG8V2v4#z|nbGCJ6FqP|p1js%7(DmsAkRDH4kS?^XtejjL@E?D2*ItPkA` zm0=xtEOz?%-ug}H#^vU({M4WQkGMpg?Ofc5|0=WzBz7+z%Ists`=e2m?tKQ6qwhKs5*ga8l21hsGjIxXHnInu4Dj zuYnPPNbccY4w3H(XqLYqj2{&sa07sP8NS4$_Jda|V$AB||Gpd^Lg#a49ZZt?u=kOs z-!z7NOJg`y4U-iws^&F(s>TAxNba0=wPmOc{m^Co8e8W6L)@M9!-q&4&lMJLeV zvuuuT(F{uD_4iC$ev@`=sj^?_o8U zH|RBxHsm#{5qO_L{Xi_ohm}t#*uCbQwkKHX?Dh03j^tUj!nQ(Fnn{`lr&l6bXw3Gq z+#TBSQig3F`bgn5&%-%b8}S+a10cSe^gWn|en{Ly2wafJejt962(xj}j12M;x5 zK}Nh7uIZ|ft797F=lRDYj$@jXds*Q-`|V728&m0g(;}Aq4Y79= z*g1$vz3#zbviY>rzJv&F`fEripDd;Zl@9d<;#rDsR(zCtqjw>04sz|&{MWO~{tlq| zlB3n6MzK6|Tlh83CU`Q}Y=c||`JRNCWZ-9o0(jFbk~KCWkS=p(;AZ~pF6!LuPecY1U$d!f&bc`zigVa;P-Doa>%@$LVqF zC#@qZr)|vOvk7H^F1jj*5HB4dpd+%A@1Md(W34JZLC>rwWK!91F+=6@-XLpHT!=1( zY9uBvez`xfQ;vr2LPN43@3^Aa!W<|S_yP<-{`Ly!dnFaTeIC^GL1NRC9N-b`-_HEQ z_toh2`n2hmmYd$+3W!ZQM%jTzp+*uwW)zro$-_cuYe(HL1;52zX|>N40@ux#CBQ14 zx{`cqHgwBE7n*Y;UAmv3T^s8#RH>K~dWv(LP#=pcF)^_&v98)Ea-*(U)WW1y>Xd(+ zL>Som?dI*DyPU7AXbJmSvh>hRA(YTWN86T*LI_r}P2>#B;08^tGN8)UJ?1=Svq?&v z{o^Q)79I;raFy;S0%*Zs@r%NqX9vOD+H&f_xF=P&9VRXMo5+tOjKT3i7IOA~5+awP z^HAj}wP}hrP{?4%H#Lx~i@&HoepevZzZoXq^#@Rp9!=7_Mq$^hwpary&z?7TrG2^_ zKMb<*klhWL%ka16q~Lc+sxXF!3DEQ2Q6J)l0&W}o9^)Yr?)}pS{H&R39Z1T;!lH?2 zD`UfCpCpfJ+)(bgBPjjIKUX!*NQi(k0O;%UjDynvPqi?g>~dL zM5L$}!{KPT32Ce*PP^CuESs_T_i*SAuiLo%MrDgh@3r7(@e3P6Nj#i&P@q{2Hb}em z{5t1s5l~lOpFJcMaLZ8&kBW*azIf0ssFFfX4zAnKePr3Wjjnz?ra?I^+(i0dvdUCYp5cpS8F-C2@Pam z$VGHTcNFys`(Vx@Uz-chaZAP=Aj_SltctdDdj0G(#=Za$=YAuJLcM7uTk|@t>s87d z2Y?R#OC}Uz#!9k4mlDGr?=M}kK_}%$ooq65*(lfK0*JNTG(qmp zL7@Jpw7U_SL^;<}iIo-qZl>>PEA(2ID_b^Ky!_0W6Q@#38yjmgpPP10Zo4TYB}8C1 zAkf|u+P@DJuz@rd4fyk5A&e$>R2+~BpdiT+(gK0 z4U(^clir*h8R++KQ|1@2^cl%!M}`Np%|$f(v-9Z4CYlDpvyTq0xjL`&K9X08M!tro ze^0@@_g_p)@s9~Ld1z{ZBVijNjJ`8WSM%M8s)3^y!ELy68vhSTSK$?9_jP9&O1e|J zq(K_#lJ4$Cx>I22M!H*&?(Pl|=>};K0f~_sa=v+g-&)TfaMyj#z4z>W_Bs1=S#K7! zjqDlmNkc%#r_=Me9Qg|N_tw#OQ@)!4H5`!>AQ=L1rLBzDno+jXX*>Q|-SXS&K01eL z@mQ_UdnNZ_u4U%u=?|XU?jDu`d)7r-Su}bi9D2m7*9(b|&|MWqhV_}B`zuz0Br&Km zB9Om*zGly~p*xqC@6b-90q2`R$iI9d-b{lY&KWz*DEh&nPxA=#1d$-9j{8lneO%{go zHNM4V7ej&YlVT4K4tgzzA)K_TRzZrVk=A$A&yzQg@TpCc&9sXMvJleTd6$kRRqz^T z?pSNGt-o0A5bgkStvl>o&DA+C=77rVrO7(|56KnTDA@P*%d@`6fHq5kS$>w%C`~b8 zpHIU>iO?HH5eV+i>)vL|qrK`3+I7`d3r+t^Fl?opkTGI-OiCjqJ=cJ>D4nLj00VuU zVvOWh{4mwSB14$_pk;2hW&rIVXR|2T6>Sekzv3c;hA_q}ZCVndk1B2KG8rj#$sNSglPB2a(>qCW+4h3l1GiB2{?8ls>7`c6IGX zn4$~~1WO1-H*{a1`@3B`U1#e1X2C%Q@J1hS13s=ZwM zonymi$Hjm>#(vWQg^spCwp3rJ%K95yVUClnrXTcLZ!I)Xw+FVHVdQ-6~zV0cD#vmp1fFcX(?x2UI|oCAt4mzG#h{ZygJ;0 z)$@mYF-;_N$znSo9b_%L)!Q+27uAn4IL*Sp&VO+~vhy>W=g9ES~Sicyf)4n26{22H_{1yFd+Xir8{u~0tKn@pw zfv8dO0VLQfZMS~b_**O^Q{U_M)E!=zpnTU^l)<*_=9TpeDIx9jc;u873aLNw|DoJ|yvlGmH`dyqG>Z%W)^yf#1mXn105EKA5HOwaRZq~UUHVqDh8RAqkD$JjW!>;o#VgIJQ z5k^H1yCR?aP z+roY`h{%3nj1ywe1dH&zFDt@8FY4=|q>vU3Y2Q50hEC@(NJ|leO8ipB?uHo>#&CnUQ!(N{?>WL+yW4HL3|%4LKA= z>mQYub z`rbROM*w$q11(jC1wcuz$-wjW2Veb;DU9Ra;h8?RNBSz{sAtyqU_emPdADV3U9hV;V%H z!OE9$QQ@d840vKqW?#{y48#2xh*jKfaE`PHSoYiMrNoNHfwgSpr0S?QAuznEi7QuV z@#Fru+TSGB0-7w&m>h3mEA7*9(J>qM_saO=TV$j217M95t==jEHMV`G(Tq5F4AKx( z_)6+bEBwKis!eJ3)JhJ*8OYNmx61)-#l#Y#cn)G&Q#LII>da{~-${isR7*+@2@Hm- zg(6sL3{ABlU^!LWGy|azxnJbcG~B2*iVx#ymeE5vo+g}*=rALJ*<6bsEvrXobj zo-Li$rUW?8VHZ0W=J<_mV4n1+MQc2 zXWdx06-O*i4E-997kQV(L7z5#?+9bWlUA4FyA60SN2pzC&U9;>+rl+MZ04~O%Nt0b z+*QfBxu!o9ldl86X--A~>?ABA@-y%)5%N_u*}g|u(<+1|#3YB(l`S^2RcKa8RTbNl z5e?x#MRYE@Jzad_9lohe|0ecvoJ~!XG6|BOz=X>Cem$YO@`ext?^JDbrhw-P<#%i> zf1&EmkkO+&_EVjH$0-E)m5I?_zE`jLwZ{U%Zr6HCWm_alToa z5=bwXoB#M?5kE?#LM{Jq`VWdz2pOTt$Eh^F6E#av>38Id%S(Hv&z5C48vs54b=pkG zR=GkY1r+$SGDn5g`yIr>L@4#FgB{Zvd;*--#eZ=_vcwqR2Mwy+zumuM==0JTFnkg^f4n0k?3o}9IqSwI0T58_KV4M#E`j(l;WXFnlnxFeHo1gY zk$~bj9fky|Xt6$X08PXk;3`3+xVRb8i&7c)14BpGTKC<9v6$`HJm3p7!TdHsv-f;E z?0t9r>U020&exZM9@R~U7KrxC)Y$tV!m0rr_o7Oe0H;05D22~(`peOn(vpY~Q|hZv zUMc~Iy11FXC_gA8!xPo3T(<*_AvgjESOTnx#bQQC)sh}6D4X+!70%teA^jHKyAr|x z>|u&J5h91E`T;V1FW%lYl@R*_yh4N#FM(Vd+n}p7GEhrI#eo8HvcAOL*G?C+5kT>4 zOj*9n1y1KlULJYy5C4~5CyAFx-I{AGSuSi=fIud}P3r4@9`PHRHdNQ>QOo{W%0GYB z1AWB1VNW|SRh~{uz@*^r_~Hoxf{G z+z4lZxAr12KTQ&(9h;t7+3>5?WqgslCaDzo79uo+v0Lqb)Fb9awIl~YUIgfDoOlO6 zT%n7shIE`o|RZSQY2gyNo~*S{FI@^A-`QD z$}b5_9tf<%GJb$c~C%f*Khz#^fpjQf|YOOa4xdMy+?$w>bdtKB@yL&8peVB%mC?%w> z&}ne5KYMR|uFj}9?BUj|A3S23Qim31pX;YN|B-^)+^Pu$e#0Hhu3m&eQ>jgYz3oYm z&m%N9XH@qGg6=cHNEBfIhtz40x6wYCQ#LBgYh3RzhEF~yKhATpjGN~D#i=^+W@q8( zn~D3UuFbk!slgtp=DF&SgVTyBsW%??!3!6fV=NPALx3S0FL3#w{tuY<`dDN-@Nh1KfXEWIrZ6l&t*p5+&Gxb9Gwy9HqkWoM_oS zE>)vjkfB*3HVN`~nd3IPUz+0&$&!D|vXjxdIYDDb2-}pBa6KJES?w1jjppu^9oQ@K zLekZxDEQA_mv@}+<$R+sX3b*%bE z)f&!Ri7SKGupy}K)cWx$`r z*Js$P=ejrZ(U>9o^T+@KR#_6jZOBJ*fXM{9BsidCUvHY_i%ahEH?$dCamBY>E<(SL4)&wZ2wE5TLr)-;T-c-WQV5)%?HTP2%k zx0O-ZOz;%NZfAoRuyfrr?b5Op@u($f<}bQ)Y@NdBcRwOmv(@j6-79(4&R|mp?Roz5 zz?(NM71NT#);f0bVF{4>CZ$@uu*$7y3B-61o2nNv2Pz+0B9&3i8K;WarkBEgi4_nh zjtZw~LQ;tYHeQa8!hRwH3L>}XL#X#JVt&sc85`AU#>W*ehK8&B#{ZR^p5A!5Vb5M; zTd`<=P#!wmb(YLll(bu>gH)Slb8fm(y@&qaLeU%Vy{#Ed3+v9Xi#g7Lx&R6I-gN(qqxVhL8u*-`>`qi+cd+6Ccn2FU1LTzfDsj5>6n+F&cc9tc64OJH!1*z z{(c@4lA4+PX86rZb1d7~6e60Wl2cy~AP?yqLLQAkeJC$TxU^I(V?roiHN~k*o3?e| zR%Vn24+E|;+gZoZoad}GbwYetkxs$0NzFofK7BY#Q z3oS_j$8xrh(XOpz0tMv!<(0&<9I@tI?eR*HMvZz6{lSrGSG4_1D;R(U_`E2zz3z+B zNT@n}+N5pi$=xJzeB{0s20-nXuUL_*CwKWbxd0}AC*12dKOeQ^ar4VGKJ4G~!dwh@uWRpw z5{))Yv#HF1g#tjkv+n!On*jXHc(TU7`gOP(sDAR%?|%D-T$YC>OO}V?#q+=Cp4FX< znxlZWdN#>O!oiUIa*4+&CY{lTcqIc3MV)<=@HQLiLF9`7U(-MM`q9T9I+YK_BC?4} z=35g9_7p?`R^v2tEB|m)@&r^~@!^mJML-3ga<>!fJOU-=t2|N~LQ5r?`BfG-pi=yT zu-`=BYnyL32bv{$>Z`)%G_)AVct<`T`v`Yq6 zzb5mu{7955T|ED_vs2oxaVXKBY`0hilz`-&|K2Rx4%p-+tATT5(l4B*#_5hW^3Ub| zTp((BkF?`PL?<(5y_x`nEP4ffLL!zqC`UR9f3ahCHl9C+7Ip{_wS+SD z9yymDb%8T113pE1sd?1<-s5>3_$hdInW{yzYAMVz>2fA@(ch9%HZ@|oCAnb58@)=o zV$n?={8t)m9~1Vyy&I2N-WTsn}gBV)pI%GoxO6;;K|?-o*;7Vl?{MohX?bY(@%%a8A<2;N!uRTANvBlI{4u|L6C zrTgXhhGg4A{tS8V4IMxTl;Cq7q0fxHh9f21EFdg|y7riA!kQ5mxFbBno+ejZQBGp4f1m{JK697=uD zXC}9i=Ar(O{P~gaZ>Su2?f#>ft-U|{3;Kf-uZevaiKy{QF$6 zQ}kt?PJDV;5&A68+=B?vB3%bwiN->ctz(5nk~t4GJOdP%Ha~n|5`7R+cnOrPU0tbg z!Pb&=*YC(o)kAw2UV%JGuqNlXN)H$J?!Vg9yRF-&%dY|KJi6X)RHhEO!4Khv-EGT% ziF>R>7ZvW#+!+%tM5BhihA;u)pB0A$zNu-y4F2g(Pswi-cSGt_=|jqhle) z5vs+R3k1I>FD3~XxpO8r1d1BueMwtD775|6G`41T_H~?Fmak9&FvN&1rsHkfs~e$O{Nq=L$Ld?LGU2v(`GD zLzS}kKO z5IQm7;7c~Nd=jzV%6DT$v-fusW2<4EY2`nH0GfXZE6(xN;>L*Jbea0IZSTvHzoGJWbInXBlvERkoiOc-EKCJGCDhUbQe*$%OcRwDza6*EIr=lW# zdbZAylku)(NhG>7LXbaFfRbB#J~R(7@|@@Ey7)0dx(kl5YxN(AAZtkRjd( zbSA|CvaAcUo0WfIBlG1=kK(uu8`kO0p{omU(<}_Nj5!@42u_dIz!T7L!EIwd*j?YE zx8@{4JlsEey2e#K9cP*_R5cQ>fWU#N?K<8wo$QdX3VwYw zCOR$!cj*!_q~O8JGq+Bh3}v6-0Na3e)YaRt7~_a~mUHb$@yw9C+_Og&hG~`q1MLg5WPZFkd*Ue8U*QAGCV=z_sek4S zu_w`f>UUIz8iHHPu20Gn+iuM8aZqnOl8AR1edIr+U}_L;mB1NG`2^zJ>SFP<$=#mq zxl*bhEC!!~-ZwRVUhz6azh$d0KuW3fp_M;2Aw>=2`0ay_Y*6O^+K>MoTP<) zEnIDS|2E6`>U5Ra^yOsP{(K3PNhyKnaY<*+1l?b0aYDK#6lCS`3EAR65V4@5y`L6c zC)g(ZFVwY?chUaTgOBe_>WXz#S!!D#B{VX<#Ob}7HOq62Pd;$kiF+D!fYXML^34|b2X_@}$ZL=O4<&-AJ?1GPh17|( zH)?^cp$=_7FaRMc4!QgY=W%xp8Fa9|=YI_X08CK|^*#F%97vZMgZ9alTfIUqACm6{>PO@cf7;E3tX5``Hss z2OQBnI#QI)ZtEzTb5;103_?3CSCL0RycuOP6ag25R-{%6rMqviT3rlVEmo!l z&!yo{sFnC?>pt~cCqO5A#bvGcFhKu9fx@B@{p$3VvFW7i_C?{RHp9GASAxX0w-EDF zwdQB;6FUhcCw7EW;E`sRHcQ=Q9c~bXKt~$^rLVQ|sr^g(OT>y6_Ml#MMyE_R_Z3~; z_Cext3|;&1buS!)+pp)!aCJq)aq*zqHsFu>LRZlv&pu4CF#|g7^c(qMkEAgZ6%iUrk7atw`y#Kqs@u*CTHEaqe{^<2@9z_iiJtT?B5r+Fb&n=vw zimJGp2*cz7nu@t>jJ!8rIT&S$-e93qO1<@xBvGj8qlILdxyvRKtr=mFItPFk)~`o(yrL{h(r$q`&s67Jp0a~%-s6J$U!-an=SZ|k59@j~YwulDYw zsS%xAV@&)D-|!G2*!^v$rmM}2ydRqME*rLG9$!suo_IW#mBwXVQ1r~3It8=beTXA!+b@_6fR}wC~j(6!< z*`N(BI@z_c1Viixufh?8sM(73E<48bVH0 z-!(V_W~Xo;U6jmt1nw{DDgR+6fjCc;i)vH7gQ|v@VZ!NYmvE@;L41Btdo~RvrKf*z zm+CVNGTy8kQ>0+SE3y0wn0owpFD87H&o-H25Fl*{U>tPMpMUu4B?~q@&pv>wqw*O4 zf#>G2_yIJ%CmF&dZc^Bvu{l%qz`O3JoNf$wbxDc_>|wf|CMU(OM~V-m%S8y3)Df|! zi%05VdUpW0%CXi9{l?=pbf!#3yMN&F5HiJKrqU{f+L6A1_=KtWPJ#6Gb@85j$JX69j0h z(#E~r!AaDuIa@(q0P-%u&=27xC(cmvC*7aDv+-1Gp zmi~Nnc^JLI(GQOTo8yfadSF=M zo3P^fPcp|U3cP*|$o0Y94qI{^ZM#?V`NU{QW>*G*oev=xf)a#!|iTO8zI-4CUN z_~vF()NrylZSN+w_K!m>jxa{Uce#9 z52WUpb$4;~qznfKMu(jV14$^eLln8mYoTM7U*yr={CAurZ%cd(!}XhjUjFT6Z98+) zS$|44CTvq?2@jW6Wh#A>@m^ME!5_(*l9Q>hpkT5&!Fay2yFY9ueadE=B)5)niJHtT zDF!?@O=%8jCtvR@x368K=yYtC;}C3Z>m0yI65sXwa=!KXnKtjtsoSwmH{6%f#W^~3 zz&uW_rD?@V_vb3uZ~C4KB#2tkrqx&MO4(&tHC|v6@1C^vWw}|*0__VlI&>>3rpO@k zW$iwCC>hgy)Ql&@qe+=uv?scvWJ37jZc<)H>o&DtA@KG1NH5C~3&J|YV~m&FRd zr$>Xaki%8>S#uG_nEXjR9&;*0DUbZx3{9@brdxF@QBfVvf+uxBH%acbKVs&w+^ zdAI7+b@R)?=)(_YJ7PPdnVqJ>1M6sDJ6o;pHHSoL%@LGnv*Y}u9{|sVAYq#B`gZSu z(iN~w=5N!M1b@bPLdZf)=XflRKnK*>%1llGy8aI_NRpg#Kel`5P8-ge=A>UxE<)nM z^V6uP#cW@Mmthux_Y;@eIyT}0vDly(O>QrP1zw#J%0U2d{YG|?_kp_?C4WT?;?yRd z2&^@^;{Zt<^N@tJSo%8JLIFQ>A7W-H&=gWvPMg=ATqq{V0avIXfFB6JHuY6Vr*cgru5!NwfmSDo9EX@*mM6ZwxcfUW&O6oIol1baY+CT9=*W)|1{#Q zYa$tY=|{uXJ|4(z7i!V&e9&qw6&GQ;k{FkwOmEPL#O+}duSEkdPt!mlJ^ej+ZyV>& znPpeX zlM>h$z3B@U$+6aG+#p(C!~G}%9O89*j7UgZm&r!v?M<0L{+_B#9sxD(le`ETqC!6? z+@ce&u~D?!^hCJ;h+1lWkaQu1K-Dg*Cx1*Y!pT0Afm#ijCPO;199S<_~%CY z2OEf1HK~O_mp}_GyqFB7>RS?>?Mi7@1cU~7-7g#-^byGF?9z)iWE~wH>Cj2*g(4`g zanj;d@ocZ|5vPn^GYx1)zUnjrI#n8l^85%#dgwzN0fLqkImr&oycb zR$CR?k2ywYLqzri*@&tImLn4cXb22bmcQ=aZZ!8_8d03-sXhk{iU5$+;k)&E=lppZ z6jN6p5P}y*rNy45|Ct!#-%+`OMfci|Y~FKcIBU&o;cSp9uncpD`?pEMREUPiRu0!3 z1h7ru6kAlw`vyamijVzUB{2cH7g+LNt1}jUKT?Yo^$oc-@((&(Dn0jMP~(Jkaebs~ zI5MaZ_y^DUR2Pxgy;x3{&~n+PCS_8Q27bficIf`YRwq_M@6b$_Q2(-nLTYQXMqmI9 zsute$n8lFQf6@IzEPCdLuhy@>Hf6{5WXqauKAQ1b0y3vzHf}pdgZFT<-rZmz9mzm7 zt@sD!Ho6$bJwpL0_sICF10Q%_?RasNc1TJPej2abrqz}7u@YItX@l30A-GO4SnQl+ z=^4X*jEKM}QX8ubzA!2%Bt6XKQ!nr*c03aChw;CqAQ4?J>T;;Vwjk;vK!csMyS@cD z^e#IFpXd-eiWKvU2SoiQz4e`mmStMjZLYFHKfM^Wjn&C@wEJl>PXx53ieCQdm$%1k zZn009{U#<@4^|>U^tWU>n8p8Sj*v_s(QbY6qs7iT6$Ovc&rfs(%GWPfb~QGlQ~W;z zGTJuJ?>07nt1RBX%%&yN1%pYFCXyKYH+>5}*wroiw6~16J5R)-kRye&99#l=fx8KU z%rK%iOG_DVSrq95+#*pj`Bc){I`F`==L}RqT!y6BUJjArCZQceNo0Vcu-Sxlul5zK znq|s6!1ZBO58oNKiI8l~^4CPTe#jY7^6Fc&*QhH67eHi{;8cD8Y)l@Qb0>+9IRagX zep2ST$w<3smf%Emc6`V{6#D{&pC+-*%_)HKs!0uKV+26H`8N>J55)B^>MIL&l7Qn` zb@#xnC=wUEp0@3KWf>I$TvD}6Yus4Dzn5tERjcQVDOgv8_8@&Q4|Gtr>WqU za$;RLHA}Xym^^YPNp$ek+z;D2K@;L!eZF-y2uxWN@?<&RZkzXocnRo8Agbnv4% z`S9PRh4of@N%PqE(NVKdw@rspTNxkGHGVXX9if`Fj!qsi# z&Vjs}cDFntpM5SDzwO8D2#CxYovj;s2k*LKd7_-rQB15Kmp!@vz)z9vSo5XV)K$D8ZHf7lO>$e|9sjUfXCp=`12E-hKEkwgV*~D61^$6j{|X|FP|=V z`ds09V0JWGOyl$TMdH`Bon|{qc&qz^Dn~in|AGOT+`JOm@$R{U~<#d4vOYF_fc(VpNF*$- zsrrckz$lD!2lj2t@ZOYUu%+w_c=bz@AhIn7_%`x2h7)1jog^eXfp?25L3-664Fa}v zGx4q2a#`-MqX~9s&{&-I_gK3G2VPk2)X6hjh67*K<>Dm8ST6KEsty!1c(q5`&mF1) z{QdpCz1#TlDCf@ZsK3J9lTZq>hwfiiRL-7YuP?U0RnID-T(UDV9QEB$RN3$xg+|3z zXNQlNhA`DQI?I^8s&J-0f1=4o{+pGb+2IttKNS|Z7Mdg&W`PdrNXVV9R(A6;VLOhS zC(x~Frj7q&qNy)0H(K#4DMn54Ww9{fcmvJnM8~qf?emN?Z_ZjhNN`>lVy`Myr}RB` z-CC|^(UNSP`epxu6=y&2@k1x}{$)<|k|*OW`VdzP%AamimaLdx4Ya6XU>NwdZ{7)> zH;(Z)Qjx7Dngzdp+j4O24|^-T_p@EdQD(uv=MX#pm;`_Rc0_}*ktHnt zL>+(rn1Qx9UNX8c-c8?3V@Lpa(^Kg-_dc$F_ZI8(qgY9oO|!k}OR+E>A) zpScDC^K;%oBII_>qar@B5Gm*yuzZ-7J4q}Z=lEABeyrb;h{^zM!gGkXBB_F+!Xb4H z6J~@29{on<;=hLF{Uj(mV2sD)WX>8hu%dwkvN$k;3*5Ob z!LamDsHvi^O676m@9%>m9xDWD8~JUY!`_i!TcxEWX*zMTDd@E~~G!FJZANw2VAYuBb5 zRDTN(j75tq6p>u$fQJYj#IbFou;7XMq0@c|j}rb9X1#YsY2s*|)v=2cHBp&4MFZ9s z@bobk)RtjNL*y9xd886GFUfnWst#suBOjm3OMWj0McHWPm^8q(Ms1XEuCHpKgw*V@ z*o-8Us`j>XBS(FD)zS-e8(ovL@o2~-&ENCcNUSq$4$DV(XJRr&eKIvCM6UVK4 z91(H0ND>?uZQSJ==<%({*2|BwnY|}#1H=1S&%lvg97`lA05w1 zUE2!2a=1`KP?IJizC|-5IyQA1_)cV2i{K~}mNkbJSgr%%q%|r;w|j| zjtl#)Zp}b~Jm)2=gO!Wg44-@B{^f|6cyzF|0(1fuf`5l7(Ldnp3uj*BYJeJ@GsK z-Z1Jb7C$IVf})_PJ$K^E^u%vmxJ5!md-PZ`p_G0h2BuY-(mYP9KFBkd%YcABN|dJa7NAq|c;j3wJkhWA-b2cR0HeU; zo3a^_B;cgNdF73K>Zt2U7oMd7BvOYJo5Hz0n*o0^dKum^Bf2{NMQ|TiAD`KDV33S` zAWd+$;PR=N4Sa$h$asZ(#RciGOoYzH!=X%pGCaT9UZb)*#Mp?dMm3SlmIM9q#_Jlu z1gjl%#gEnNJP^NmEXpSQCQ09)_7rRNL5>FRkE|tRK8V9MK9S)KhC$)9-KX6gT^)Ff ztEiBzFom;K>{ZXN)SmX_wQW(ep9Y)l&NVH)-%sv@<>~Q^t{EA=i!EOB7U>%xf$3|O zU*P)^*G>8sX#w~b9%hZ%6i{f zz4EFq!T5c<{){U@pGy+Vpst=Pt9k(EU%H03icnQ?11?xajX!q4wy7sM@Mg%*2F@-S zq%znYc`@>H^tg&oHH+x-icODI--ti?l43?&5&1GhOBx0BDhrm{3-8xwJx0Y*)kQ?6 znbQM*9bo#hw3Rz_*Ee`)#xcM%Th}12;&DnGziq$wuM6Xh6Ww0~UkA;6>JEk4&9kI3RnH=BE5fSLDSZ6Nm?`M2`W@kLb zekSF<*x7+|nC!|AR40VCR5!=JQ{y0`o6NAF5i-yV{bQi`F#Yc-T}emQWT%aYW^;2B zoyo#boX*;qSJj2Fjd?G{dse!3#a3jgZlCtB{B2}XGRppQODvA%lQzb%RSQxCwHA$s zV10PY)tYYmY9K4G-BV>687(Q(2^)ioRQP~V+GxqKn;uEpwo8%@cW|zApQG;>kJvLK z>oY0!Z)J)%Fa$JKUT&hr@Y^z%-eZ6=-sFrz(+PGA zGZ|FzG12zva`d9U7kFC{jk}KSEK~4&UlQRjimno8>R(wQs^>^J$RlxT>n0Ka%$C|# z`FbrB>j@|@9`!imRb0j(n>*OL>*f6Qy6<_T!0&&if*B$dD2U;&RI_Zz4WEy{A0YsV zx^Bn=`llI9wM2eCX%;abwCcFMi`r4OeYpPcWrX}ZX!By-y3mw$&sfmx=@(%?5*z+N z#9=NPrr?y^dqj;H1IGI?r)!J;Q32)^}>UcN+bt*IpnX zr*W9SlL)=-DRdBg+l+=Gky@5vbS&?Zsv+EchSwP4o%QdnMymbckSL=&N5Q7u_Rh}b zZ2-fqSq=vwiwI(Md9`x}OnKkhUwIM`xPu+#kAD9K_T!^ajxtma%(5>{;?CrzTUW>K zXGh|8dn~TBi-@x1Ola;+0;pN*Q;8j@0uJUkX=pF-vajgIi|9YZO}>jw{ZmgIP1>06 zM>i`#_)AIeCx~9sx8rjKDPv3Q0bAujU(tXI^N3>Q(!lV@Q0y#WFQN!8P4{`j%D(K>9{pS_qXwC zvdtpJS*A7D`uBByMEApEW6jAn>)UM_?z6`3BF_1ss_481fin*+M))@Iw=X+G?7UQj zu+DX@Wpm}(zEabsT3+;XDd%3RU+;Y)Nz-4Tm*z_zeEp{8;xX-DU7Y52@_pBzQhrGS zCNk&4?I7a4Cm0(|5UF1K~if3QO$FhPrBWe`+sxuB;w7&i!7o-z;}> zvd--9a#b&~bN!(9zwJI&5ShJyIZ{6Dd09woQp7<#CO)pbxeG9RLSP9*Hy_20-uq)a zYG`Q0?hfDqNa&zRlE_Kxa{GK5e|({hRvF>N2<}A_#v35?W;|&w{Bl-_#b?2Tl?(8{Tk-86$|y{4(Xz8xCU&io;$u&@!tcg7-Ho- z2K@Vp!X&RCBOjY09q$W5WE6HUI>-ix;z9EO{crC>(2@{T1LpzlZO&rUamUDwb#YVy zdK@(*w(FoyAR=kzOVmi0SLcujy2MLTQqqH(L5dz;Q4SSG$Y($g%CGi5$CmK;19TA1 zM%Hpspb!Yq+Ag<34!8^h#!v#z`zJ)D<~IV2oc!hB1`gscx7tpUcwW9e_t|j_XrNCc zjP9IU3nq{NlBjq0_jdz#6xvXq!I+}$vR))gYAkayOwcEVx`mG4s)cu4fQHMX#HdLT z^PGA0!Df`3qBNA7r+Us>5m2TfwZ0w8r8 zmitH`Z|sHvFQ8W|P1j47$x6x!v{yJ&F2ZO%T-vcI&3_m^PJab5HqIZ%T-a@z%(ry% zn#sY57muT9p_NyO`MYFSG$XSY^+**A?zFA4EI;~owe3Y|Y){n8GNnQ`^DQkQ?Q4+H zZ~Vgi!s5T@xAKu_Nr>g&U*~2OL>cRTe+AN$Lh_P7^Avnzdk)2yO^5n4RGchHJs!W% z|GZxLL-vmQILGt1Y1f~EpNwq9zAQ{)G!QPICyp4i-~EGG>)ra3+p@n5sAOV(F&%C} zKFkB&L9mHqs3stvcrEusjFy*;nM`(&N+sQNwA|TeGU&(v%R)IJ(E79A?CTU9a{M=3l^sVMR1-gH2Ui|^XywKjHc#%zj)M1B zumm-j8Gf60s@y??C|My;mkAWx=dNY%C``yCGwkz}aN_Q4v)70_xBmTb{@{W<=g^jo zQp*Fl(|+gey!T=b_`Bwdgt2=xq|`JfZFm85?2B`Ikvvvh#U`@hIRQ`j{o@*j*W ztPu&Xysbs28@S`shL!__9i3V9e*wO~hm;bIMgys}zxzkegc7*`;D@XjyzJXx43Q4B z;KYS7e;#BUO*$ZX4_BowQLUEPF@9vHL46K&^-9PXjehh5;n=mDHv`SHyX&^?H{ln2 z8adz|prbXWy_;0lF-7S%koWDrHCv~mNVTXOCBL8`BX#i9@Lmg?dK3yxtARa?3ArBD zQ~Shbs+SCxhRh4a(Om#-_GkG@WCBSf#H6F!r2(QlR_x^#hUJlpJ7*&xxk>qF9Li!2 zJSxgv|LxWOSVDbWn9aWQOVCdABTt_7=`296xMQ9hcWTt`6gy_L!}mM`*=@DJ)f&*U zkr2Jy^zYhuA~1wrY2WYeP|%uKZJVAgEF#y;S=WlYK*hh-$oG9-R3i_M(pq`M`&U{L(|$!?R^O_4ziC@Et!^Rlo=L#WkqGwqXuFde z11Zy__wdA&N|%mnlW_Nf!jDt=(lkhT#at2D{OPB~V3Vq8T|+B4ywP;dW1 zM?mhmmYWPQ_IR?HO(E5Sj08Y&NLhUTsTQ{@cT}Nt#k>S3tdSj^k>=v~@AKi!4X8%I z5tEXSh6s!L%9nAJwgJ6%8PTHm`-`7)uJLu=enk8RoDoSpL^CWl+bOQV60s-K+emT2vE z#k-DcPQx5fMs_KufN&o6Xex^V+iivd(Vxuk{&fq&Ibj)ZWAIgWhmdK2!|%=g-Qx9P zq>sg$iINVB%MAwcdiA}%kU&Sn9B6fQoOtOwOF~h){$D@%X!>I{az8K%07AUy#|vt4 z3*C-rM&A(1a$}UrJX7E70VQ{X&RI(Y{b3hYvC#6{$K|vCtLZAkqH3e<83u=N5C!S} zqy$8|L|Qr}6p@lvI;5Eqq*Gd2T3Qs49zs$;N)cXf9E;pt-aS; zdu>&lu1Hyc=cjJ9!-_c$F7anEXCR@qz$pha`ea=9sMzqQ`&*9)Pna8?^{O)wwC&RJ zRtoCD`#aQ^j{!IV=n0kGZ7h)6@4MQMvMlCb@u~C-NMmmYPaDA_m9bYAmd@`lJLLk* z3;Q<-?mk_VK{#p+#9u%I{^sEyUl&(EAGS4d-&BckVv%y2S<^!lM_-A9*^)|~lKx3R zWZ_+u!KM3!Bnr1p-NwK7fzt_;CmbXYJGf5SMu8r>fx=RuM9&_^zto3S>%-JZh-ivz z;KSwc?m|!yKI2FlHN$||sV)1zOAsyfe}q37u?sfOYH z)0}pt@YW*rklt?*%wUw-U^!RAi+I|Q#;j`Fob}$?lpR}gQT?Xr>fa_}F|OQ_RgX2O zy-i!hD@PQpNna&%W-d?ZXcs!)=j|^-xl1`~>Hslc+S^CYfg3K)E-rfk@p0Ha4orH# zH`Jw>bumsu`DrTI6nm^w^=OeWwfgr6ioNGVJI|#;XjeA-Clm8W<z^7kCJ6axW}`1#e&JG$2aOSh`! zFIUSovZ97#htZvF{pJefVmhrGaeMB1;MqTaTAG^~;?>G4D~1A#cnk5R-_+Iai<5l* z(c(!tz^8tT82_63-R4%s%&uoYg4jU4n)0IekJ?W8(b*c)Zc|KE)UvAx{*}_yP=w?d zDdM2DGZ%NhS7xbJWU$jy)XB=yCX4wAauo+IXW4G1sZq80pG4Sd04g(gj$~wI_Z?YG z@E1K}J?`H-J7K3yMS+}(;pExC%Yo>`pS9HGK}!bt)bh$Qx}P6cadgz|j+lskRCXPV zQJT{n)|L!P94f5%JcANHfun-#O{W_R>eyQq+EG$0x3JlnRIoQ6FbFV(!u5_tb7%17 z!719%-uyp>>!Vv8MZ06ZX}Mg-Z3s2Yui!}`(C>)ur{C!FslK7R z?WQrKs+=Fn zy5x&xk4*1j>jl>CM#7{88uYlSNuLU7XI{RkoMI!g^NxATJI&ooH=XZ}JbE03@s)s^ zy7cWu*b9N_e-x!pDaE#wB)HOklZvK#90)NK=Mj7I*9h^^*mSyKKRo9CkJnC%g@Pm8 zZ3!f#^xf=SpZ!EI)I`QE1z*CGT4TPw+q2DvKd?z5dn)ikUE~gJ*xbf^P4y!Lqqc*g z2_Yh1nfS1E&{FVM9gL!Gb@=M5)koGc`f$|X=-}C|7~9#lT=gkf3FA1u3e}~aqPH@9clc+VGUPD+k@;t`{dlI)?-iP z(V4w34GU-_avfwuBNyjYxSw@lo+%T2XNHqT1j5?QIX`V zP|~}#=;wjnqE`u4$5f|_9kYM2lxnhMOSt8xHkOxspXIggNPJfcmxtzH%6&(2ZWe+7 z1MRa6ZkL&wncY(dW?}P9hV|VTiS~qn^6Tn4&=Z2W zIkd-z$=;klN>5?~cQC=$FATNuI#Uy%&ac29k|Q&uaI4rzg6Q9<07n_rPr?K*Rqp>l zGN?nf+&h#Ws%mUFZ9NCp|1CZ^%tU~>>c`f zel^ce=L_6n+r@A8OIBI@hs%bwtumu)WZyCojw#D!K)tkiM@lD|vnu>2uu`tiRkrzy zXKaB6B2+ncUN5lIII^P?GyE#wkkT`aUlufc0xCB{hBqSJu*?Hh$<_$o9Fn;o-V01w`?# z$^!k$O>OKlODFX--fFqAMIw83eJdpt^K0U9_UFzV5B&Zq^s9BnkwpmlSTdLxTyP#z zO{gZ_^)tF&KPcR?jGP&lICwJK`}T20tC;Kdl=KGcag^hI^6ml4&{8F_0qSl`JF@R4 zCW9w#I|poZVq}6>uZG9R4Q6%=kwEP3STek;S;|Xr)L`cT4S(1&NKRv-G(!&l9*!}9 zND(tpx>Ldnn%2{^Kv{&~*okYESxoz@O8}VieTl?vOkA6hLv_PxYLgu?-<2)frR)qt zOXV>t>d3q~-aENcJ_V<}V9@tbM*(|hm3>bf8bIq+gTvk+Q&Y-BuxSgtH({@&%EFNs_* zanUiy7*x6(S7#DWwrw0=^|S|P73jmfbMy00y3T8Y{rsdldo~9n^K)ap0^RUGEGV7O z$E_9mt2MWq<#V+&qAA6Bqx1&+WK^5e-u)b)&x|vrQ-Qx$sw^2GHxl^>mVi@%Q)$!Q z{FxWtc))PB&aLR4j}R&uFKh_tyPUHk=`E zZ)+?3_vqmEzj$iFXJLFKYM~Ivfc|`GX70#7)p;a?@)6t2I{tgS;rs9cqD%16{8z;q z$c_uDCh^28LKNuoBBxRb!Mzl8(qo7-kHX2V$%(JnDP-mTM{S;wYVHrI>22oOKX0o; ze*1WNiL&VJHOR0smC&!vc}HX{N@dypeokY^Vc#$p7sTyej?7$7fUqx6lAL1EmM}HX zx_hF`Sgd1hlNuuG{>8z}@?}P_Dt+>2e72+;W^44~h=+$wqz8jrS+P1>;xocbWb&{Q zvz*%Yk~B1>xp)}q2Ca+xQTWuPq)#YC%XsHg7M*EupBlc}wFj3=mJjs+hz}5hMw*~- zg&QV>;@$|(9!`QBpP$WU!imwGlF3Iz*DcFR{vKVSg|n)Y`crN!Qw1!iuYev1e zz_s1P23MqBC-%^sg55msiXFGdW_dCqMK>Cmn2PzA;0W=2+cWr%7Xm*Yh-7@a3Q3n_ zeB!|wpm3k2{G!Z8+DpjPxZf#j;pK^S<~w7dY|MqN1l=$N+VJZ7hqI6^R+fno@m~QB zE9bmK!}JNaXr4tp5bfK4Bm`fYkR=0*jpx++Jy^DgoE5KDSFOK}bJFkyxePq`c!zDJ zck6VkS5M8q#H3cSS6JZ`Zkt;7f#4K=^1h7KJq6RDmkW>!@_Q>(-cYs5Om`yniRL7` zr|#6vCw#|NH%QgxRt*j@CXe3_l(THozP@?9^seUc=ztA-=2+6WK$++Sv?a(| zrODE~_!d`){31%JzOnDeYZjlCNv>XMMc`Q)RVXnKD4^jU6vW&wd?(>)xje^FNI<{g zdma#iBtPeR^JQKUb|hO8W6GcqUIvU}$Efl@Z>6{W2oQD_DTVnTNp0jS8*}6u{c$Tl z6$JyODfhE!OD3Lb_Yg{1*sr>@$N+6*`ot|KmH;y?T;tEiO_ilyXV23wehH%B18tS;-+bE;OYTc zf43%u9PIH`TI{32ghJO! zzqKXHfU1KO9wLuF2OYkJ)VEckW@aQusqqA9f_V_G4B> zMO7Y@`r&c1!GE{ve4XpUrax7OY>SGMKzkJEz;`%7L1b_tI4J7iC##sb@|?5y+_}Cc zMRcMDkJH_)A#jSq9QqO&Qs)>(h|ox7%IsWEJX5a)DBKB%A>tpq0&9KW_ET%wMX!{_ju= zgHa7SGu{n6DdG5oK%m2#DYhfVg?}bAw=u-UQOVHw5DDaR`pU#Eq{arA*)tU|iBG-K z&%#qeKt!GyN2Z3=EH~2*bu+}adLzHzjNqh_PgqN_)D0S=lXO2t-xIuvXw6?bdw3s} zi1YBS^F7A6p}C*{nMc4|##=k>vnJM?NyoM&B;MZAOkpZyvQ4SvKOy@yKVWinU|td6 zc?$8NokRse(y0L#?w4ozdY;jq(bi6&Li9ij0H7P>2Y*c~ouklIOPiX&pwOO1-RF^G zhn#aCn3rdVm`iRw7YY4gG$#u;$~a9J-EB+uAuXD$Kb<_; z&2q{zx>TIyZ#o)_)+0YOL%1piZFM)BW2I53={?EXrq^a;eLz$a`2rYO!pW!=TY(oD!jd4U&v_A6dfAS>&}uU_`x5(BrMk&S?dVc?c^UV5B+LrktLf2$3Fjr z>+e6E*T(KVFox)_Mt`ye2s2~bW^oP=sI0LsknbZ-jTDRB)fVPbRlP{2C|E>qeHD-X zXYnDMFd%voD-Jcu`@d(UGi&FMygviFlQWroX}Es4n*FgcO9p^5yi-Jj9<2VVD( z4?oNMt3rfwbxgT*p3Zog@-gqTeJf7)s~%kd_f1}>{RzmvkPcfrFS4$am2WFnXT0+i zRX*W-Z3-?AUZSIgT1k&UBctofI|{zWd=XRCCL(S3+G!(v#IEX$ zl&qAPPZl<9`B2{tMkIN*$Vp41Ei>Z^7&6}Mh8 zn*0HHa5+fD+uHWju$3$A&rfzGcXlzgZ(633V$Mw}%M(@iL@0^;87fZ->)717rfJ`FAIr5$Hf-^N++Cho~z7 zvKEQZN?17g*o}gV_uBeoqGFAAO$Rmj#-hh$*=unmITT^taH_@p1{+`S< ziAfgAB$Hox@tPRDeluxUk_$Y8Nnul5r_8g~*YSQs!PN~4aH8N{%u-2UhiAG7YPr)a zJ!*OvCQy#gGoOf2Q#-K4pVg}6d&^}14FJQwe-NY3-%&bHa>&=pXCS%y)=2me+vYPXuk%j1Tz{1S^wx;2Lj5)Ve69^whY zAB#)bpbT8hYb-)R5tHYlQGwj1RBbp^1BSyGpPyhoqK!Q;H`~vhwok-a5CCynDK*|K z&H;rVO&ZXiO;*IpqXfFOD&JLg7By|Dr#mFE48saA`>( zqJ)Hm@5+FuVaQb{!P`l(y=l4VV=9*~*CkEfy-WtUxSUXN3>i|HndfP2Vsuc`PsiJz zxb|3b0}-#0DI(~bTaGoX)SRJh+Oe-IP50Ff?-thnobEo6b(if(!14!>e>keQqSCJj z#f)fQiV7@iM`I9I`OBindGo8Q&Y)%2Cey2oO&ps8pb#cTXzB5hV2P;7=A7LjOug;H zTF_|BSf5GZboa)%kA!F2Tc^^zx_5WDKW2BCQvhyyTKVa?g>$VHGK1uhdJAkdw28CJ z_hF~a6%PS>@XND;D2PyQUj?fM`6<|FeQ4V9*1dnl(*N$eGCIZJQ+0U3m_g$^@rB5j z?u*aqCtp6c_&{zPDIZ4K`xd0t-e)aaRNh$ zc{(_?stTKY?169fQR_06cYE{o!`WBihh8k`W{?8fns7&0>Rl5+bDx77JDs_h^=vVK zoit2uEB`r*M1ju%GE9Jjx!?30;9%<2in9g;B<9AHLgI(#8i|@1;a_a{=U=-naP%f19{f+==nd3m<=?M~&t(@QNC3KyVSu5;c6d4YjsYXVXfvi(r6VFI%4 zcWw8)DN<$K&v2XG%^faov)=e~ify7+o!qT69Fy*3`pCq$jQ?=;YcJ0-98?9Cl^_ij zD%Q>JtUhk>&|VhTEVQB*fbrXdVZi$Ds3b>vmHm{lW^{1UNOYu{(_yB)L(SS;QNT0S zZc1h69PweDkFc2Had9kxVnhZVmh4@1tjUzmo6rAg3b0S~F)p-RH6xM)KRhi|?2W2* z%KBrVbx$!UiD;-pHkwnT)IJnp{czQnhwbsTL!uYuhROwwNZNb<>&ODJbA&?o2q#e1DAcNiLWoDm=aT-H zNvf=!BkND~yTrrN9`fLUWs9OWA4^Sl&q8IvnkOfmLfS=de0|L6I)_paW61??CTAP` z-RuCG4lZ{vpn@EZ(Y7%Yj8CMmDN6hLIYv{NZe8i=_OrOZ;KX$0^Mf!bLP!M3#Qizt z#^TrtC@crV-%N?je#EVG{n`}!uJ#AI)(NNzHNu?kP*?T0k#Qgsw64DPD#98uJf8D(mHlO&&T!Q7?0XDgwEXZU z>6V;|cG|QZGB6BrfsMPfy!)cPowYdM2kTD(w|JQ>l@J!GYMxhQ3%1z)p^;d@koBy81D`C)UMe+so#ML(p9a z5-miY?q%J|wEu`<3weA-qL@4fiNas@&v<^7+Rq;a(o@3xff?VIc1`meHnaEQkpw)E zH#)NB?z4|jbprU+onka^L)5!$GZ#W=n;(3I{`%@I@GEsutL$h3 z@v!yZ{PKUQJ$8V6hy9DAl`rqDJ)G7z&;Q2#qd@z@8hkra%Jkl$&4i-__nL;5tA>t- zOQoZY9f;6u=!c2NdGASqdU-)yP0>8%t4vjA7b(~G zqH*0=c@{AH+>^jOx(HK=m3AZJu}}dyC<_DR7+y~i=Vlge7q)cY+w}L%43kanF~siF zfn**VgVkYX)P^8>=l~tejaAWy{T2I{gw)>X!?Hs|t#4mSqgFxe#TBDzVh{S%pu?VR zdD(;pvGI^M<7YRLxrtDV{*Q^#{Y)&Y5=gXS5cxTEmAs#a)!V-x^xj?R4FmL{&^i$J zB|$NlM-dwp)TACo!79+j){jYGG8bn}aD8$5WJVKDAf3+UnoMR?+kO`3uipR1;aT4N z4=s%{NYtnrgWU&6jpCx)gm5NyE9OgX)F$|L8?x$Yw;)l=b(SrZZWTY;N+5(FJ#%_jqpj++Xr%`7L~Ar%4+@9LF<3Vc6<3GRA?K0_0oYJ#evmR z+@4we%mh@XIs^LiG88(`feXSM&E|*SZ#U9yz_PqI5=R8(t zH)2!-@ZscgtA!F4fn5~j7h+ix=~fAC`dOrIM8k{fLNmPNkPN$nBPCPryjHXaR5yj8 z(#vmprzF|sRsuULwcnVgJ7vXT6zl*>aR8D|@!rW7;-^rg=xwZ)n+B8JK8aLHsJE?$ zPKpGYBvMxXd(ZqAX8<~ixG91p$-&GMT4+gwM1csukrzW@zS-G^urA#ysCgy7gbCzW z3WD$m*iq>L6k%c~s`PNa&&iw(B0=NviYHEkF0c-gB4r=8u8<*2b`c@(q;c(+0jqD) z%p!Obcx&!0-4q3iO9@^JruYpg(5sisscQpsePXM9vqwm~Xa6jKzq10m5=*ZfM1A#6 zZ`gfRSe?63{;Y-US^DkIwZo*y|yTNrBRvcG$vzKiP&oQ!N z8xvDOr%ks99nwUmOuwp6z^waw;+cejJN%xn1iU4~TYlxmrOeZbYZoap+K$Y7$@X)W z>#sJi&>ngrQ^-)kuoG#wEjhz$0_Y^GcL)oE=o5MV*REke77E9?CRx$12WvsByrC$w zuQpWoEB7;b?XH7wjR}+S8Tkp$=3M2ejj(G@@@Af}$oE+JbAIm(#k^Nf_HIRH9234y zfPyfm4d6-wk>b;f%+o{h6*i;Y`w=kF5$S_5-+ ztp90Le%?iXmA`jQ0ILiVz$YBC33}vy94znH6+j$IbLU!;eUBI570ZP2zzWC9056wU z_j|=_yJ7Yy1o5k@$l96%tOE8Sp^rMePhdZ%ksuYVJ`VyU@tRro zTQ=*AU5*H%a#464pS7>1c@wgx&$hzhb-Yg^pc&u6Wz`B16ok6Wx34+CWny2Xn=4@_ z=WjC+-xYaAS;2b;amhzkfxR^cxD0HobKYn<9NHJkVG*b+d_Rfczk>wNmrd_l5uN8) zx&AfQ1h7I7`KdbRk^{IRxX=JO_2Q2N8J@Rn5w!7Pv3=bDI9B7?wFp=Ng5>jMyRH^^ zrzB^L^E%|5k&4`;4exeiu+aEhq5^ku)oET6K!a$c^DBX@KWP61Wd-Y)4b1&bbckvq zSQ9`4SSk6g{kw?9fO-|ay_yKt1W+d~r}K9PHa7S?P3Xnp(LrA5qw^j?e)OEFjpO0LM%E-j2zAVp zah7Jw#~B6Y1W%Y6yn(`8bATFH4e}%C#5#cFKN!52;)Ji@(3?j>8i85I93tJVAV>t{ z1Zx7Qf-6M+!6^BJ6uJS5;D>lf?!Yy&=p57*jqLb@T){6$1Zxpc0nyB_2T7Lh069Cw z*;yI1-k2emlDPSKfZy*1c-X!Rtn*|n&9Ki?K#?H)03Uh*49L>87|53dL7j6RnNUHU zz-KNt@>{6$TkuV;14ww}o>Q#}AcB>4{z=P(0bW2M@MPz#%aK&-Xfb84*&UoueXD_; zUhj8N=LhZIJ$J`70R(V4wvXf!*$0sH2U8Kd zr8RREp0S(?Lay-+jEbMb;TaUc=b%mz1j!F}z6<_}?BorI%gp>CtOHm}$amqm0E-5S zmEgwfPLT_goT>&CL0^*Nf7?CpS|+62><@On9Qa1z3h(O;foSFnfr^5z@qt1-{0J{S zv5DjNke!w}0F$$C(lK8SKTp>L&VH8WbDZx2G#buWc8<$t;DJLCe7sb)=2a*k zN5Sdq@L~aP&f!zEW(?PC#TU#W;U@l~W==qX@pzX9i$j@lWmYOabIS`L+WE_ENW?OS zi2OlbNPG7kg1z&I00d-6;Qe*nxk5k)^avfB&M`R0Lf`{X1V66;mn)ayQZw-D&w&0R zT_*v=QB`q{hax^r6qAq?&K4BM`S!2leePNla4k{E_G=qzNFYNG@zR04Xvx9*azG(O zG~4wc#PF$R1&)dBvQ4%X`6k(2Kk_`TKSsk0nBz36NN@)yuxr_}IgW<^r)n7%NdP#a zK()~0x2yoFWqzFkVB`-V`AX!zD*(Y20(K(A9r}uz?derOVlab(0AC31ceN}PKzI$_ z@9+*@7@Gq45+1%$?VaM4*xc(GL|Bk~HF95H=6Mvr!w&hL?FVgKh-3sj@UsA4c*s6} z>PdhX4~K3`frg~G(1I;Vj^LcDP8Q5N{K{PAOfoH7qHR16-J%SVsabP1M0d+Mz-<}%+X zlx_0+Wtn2&QLIC?=HD_75Xb6(%C=u8hCVL9fdTNzCj`k4fym$gX`B30Cjm~60`%_$ zxc5GP4vC-wC`KqWNC-mUI=KLKzAKJOXoP&iEg^uoQ-oaPp0LcbPI?dR^Y1lRtfLTJGs(=XOfem%echDRq> zb89Q^mIemcnP&z{U#1Wb@8zW@I(d1kf&DV$T&K=SV3nNn#j;)Snf<_j{uh8B902pg zo4_A_34m!GP4e{O0AXhq^7qzms?JUtA@oyK!|g8 z&$dYt8wG2@n_sZt;7nQjUL!y7rWF8@PtY!$U+EG<_oD4b$q#}=5EOvEvBM*uAfp(V zce~`jhH;Ra31z<$I1a*f1QLNuK7ojDlkH%dMOSlyE+fymEb z=M&IynFDAaTwv$1`j%kiZ{aEPmC%jo^LxPVd>3t99gKKS2(gqs68T^IV}R+Y(DUKd zAru7y9t*rreoB!s(v%SKt^=GmS?(Xy%Z=@ou%p4&5I*|;55SnR ziI!3*01ai>u>nf$?a-_)f}EWNkr!EkWiZk?r{uEzE-F#rp$Y9@L>pKqH^Ih43e<&p z_KW})Sf&n|S%x|6ew4vM{HY(B_*}V0@sZzqQwe}NpOGJgTnM7^5fc_iohz1Lv*~H0Yn9G(?o!q z`SEgC(-LQIk}H535ioQ&+I}yu^aU?c*N0XV?SYZM|I^U%GarMQqeo%(^`p>s_daOf zwac4Ydh0DvUpVZYE1$Rr;xk#0zxi$N8gHtMd;&H+5)`H=CCVQ8MO6jGAzgRIf@KZo zf!Y5!otw+-Q?%p7t3%I~MKJT1{32{Htx)g;Pz8+q49ooG;gSDypN5&2o@L~_0th0u zcP~1^UMT(KRZy|=|ND<2WrWuXk{^YPncvaklOKg{Sq73n3=a8?B6l+gAel@;I@4Wa zh6>tTq3T`A{JVMSK+yJuK&J?i9ZF&scYXc~kQy9>+-pbR%wPVMef?)X332THTs{v4 z6a!TP1(Dc`qS!eA=YRA9%pr+WxZVz&-|nu@E1~seu!(kUU(M&hR5fsCSx%;rUZY!iS@&mGvUi6uLJnKj zjVk~mKeMGe`PxDeiXUb{GOKQ&WBWe&E`%zbB)7GP&PfcV(mbT@+|AA>zV%m-|GQ8_ zhKLVh)~P&pa!1)NLXdox`PBt5oaEu4)!@DroCgj&`*K4HU^(&$a&sID=NK3Pg+kN; zs%CyA;;HkAd~J4yb$#yLK}g*`$ecjYOKeW=?c`YeA`~b$V z4#fDz_l^YMc7HvQaowS_B?%k1QqvlBm9n70hf@~;c#+j+%XoM|R-V`rYuU<43JAtL zZh{3om>{vt=YgkVtauK9!@^}jps~yYSLRrW_&u_PIcyogDNP`3>;!S@63D87-vzA7 zpkvv8hE;~eGMFK|a|vGxtnvgZy^Iy>3<^r2x; z&yCynHf2~fV;n4AxBwa!fygJ~**kD)BAy)!&iha$N-Pekwhky^Y^nMpq(i<=LIyCM zYiQiV3J3pz{Wfm-isC;Z`IF_ccg|gFQtJhgPl%Tr)U0o%UrA@WzVg8AY{>RwrGiI3 zK@ja@BERjvdm(e*&$IJ$PyHPVVJ9g4e)Qyyy#@J~k3jy-qmcY(`&j9PJY0DEfHz0t zeewys#e3w_s7QiOeyIp)-GseH=m&V@BmNB6`6C?1>;3t;z*@hJ< zp^5cz>)BERjv``9s&pFcgyj?)1Fr1tEE z)Xu$-d*dh*!Fzv-#LwiHe1j0k>LB@S4J4mHtvOn#&2Om`0T_xBL_cLuM^ zI|o^j2!yxZ0{!?2?;erg{iR3P@xwG`I(39YefEgUpoNFefzv;W`2AaX0ZrC z@`H$8Bl2TP42sz)&^6zYqA1zqKMD=leh{_DCvb3`g2>NoSxSDr4nX9mH>JNe(BHEo zcwbSHq4^57fcExr6v1(Je%Jr_s&_B<4hp0UkU#+t&VTPaaOsCHF!HJUQ&`2UN1YL+1pS{9GP8e?A-;3f6xAbZW|gPeKFaD}m$ZO%wi|uGgG@T?(KY z`Gk4|;F6Ekmuii1%L#x$A|NC%uakESLh25ibTI6pfH80Z1)yx)>XA=wF!$rFmM?LTIyO9-SlcOdyVJc{rCUL$+wMgWoj7?Ph~X8v^-0hgQkilRKy--ouJ zNjsgdfF$wuTDX`T30Xx{AU-hx@r5E3ySpLRB*FB1laS5jK;DvpfxZDYPfesCdEciY zu^|cVpSmArUi>l4z5EgsUVH`kav<};A>5H&DD&4N`7+x6Y!;!FD=`I9Z7ImjV&>09O*!-fr%?d^8eH-T%LqUT2;eXt ze_gX0+V|@s0%~P`JqTug^jPvDE54M=Q|^i z!YZM?&+Zz8VmgiCt5)0*<*6S4-i6#9gP?r=7a+bl4ceP;f&S((d%|+$uSeIW0WKVHwi zMFsHqWsrZ(1W+sU>k)uUeg-pNYKn2e`-~i@T`JZKXMW_y!0|8PL8tk#f@pq@=omP-B9Y-$aXY#(YEOn65n#_j88t6z;hn? z>~*}qWjua-lM^>$a}1I@dI09_yozFp}!>!dL|Edb0n(fysfNGg9 z$u{|Zg!l_4C*FtD+b0fDiB5=aEm~amQWq zgWXT$3!DJ5<2(x5K0#cUfcft~75G9&0Dk5Z`PBKZ*RyX?0UXs$c+xaijhCw;fLfVP z`$t9{CLO^I%-~fRzm+nE5j(fZxFJP`!H>6u_&v)Z^Iws|j&cSF3<%=1a@GQIBMH z5;MQQzyGoHrp%6L=2Pd(VmvfIg_#~78G-n_BWSRrkbUTvK=0{c_k?#wKuxAVS7MOw z>qiA(J|`9L+5Fx6oUSnZ%t!WkUP2P>uCp)#EVQMV;zUBT{eBZW(=<%5lq8tU6zuG0 znQxnf+xa!g=ZwnTeH6R?>$<+`{9I81Q0E89XB*YP^VInc`F94dyX04bOFmWhmmh&* zZ?Ap*)M<#H#(ckXH=O_M=e_yDToKGxUqpf^MKWLV?+FqkKOVD16K__4kI5eSHBcA% z)j;GQxB}!8u9yI7*?v86ZQtvB2ers=y)YRje{hg>Ig#J-)YIO)%nzT2#P}I@Jn=8S z1f|yScZM?G>3kxe5F|g|9E14)`BrriT$kh%_$#sKYLQQwAH5eOKbZMMe&+Qfw)F=P zCEq2!(7S_`*%FSBVAcmaKeVPpKA{r%(kJc>P9KI9l0Of&0Inof-2s+lezaN3;Zr^G z`_dayj|>bBJl2s;?+A9iOTHZGe#Q9(`qnKlTiOF{3kIZ)pMchPPqIqA`8wqG?qNk( z*xCaocCp#)XMfQ4@eS;lr&n5j<|~RlUuv?+*YLwN%KT{8kXpM1SW?j!jJa5#867QfWU9?UswzJbFVSC)H*RTIEv z+dh)t)s_BQu=5GQ%#U_|a^ii+JoO|yJ`WEu@(KAncl(pdI;7q@2JnqPXD%>z+d!!M zYeB%*$xS}_N~}Ke5sZAS@n_mP8rp~W2UBdk8sxLzxEhPpB46NZKWmkJ@-toOKB+0j z1@9}etrYyxaXW@&WSM zeNpttCm4oNm3&RpN|XP1k`P%}S zzs!6+@_Ujk$|L=K{g0(LWvXO;JT#yBF>&TJWS)73ofr1q59jZ{x9a=yyY{l0y?+7{ z6BAIv?*-9!03P2_c8|einNJ{L#$$1i1QV22n|xE#mXNQis&_m-HvZ$|XUG3MACHf_ z*S753vCMvig?&;j0ZdQB)xu>7fMx!+%d!2gq5i&JBERm;CnV0CVPj#(j+*3?P(YHQ z(B177IC&mL)M1Exf|5$Hk;td2VVYy(vcZPPUYtViuO9h?6${|< zGrtRMKl8O<=M!pWetdQo(m#2X34oFRxzDrfiT5ViSlG5DG@s@rvROC}`)%^8pc?t{ zW_$F>kHGTWVC>NFp@V0~&mICpZIA(5kVO8-iDN6?&y|8-$wR9}ex@ta7rj@D{0<_t z0{NMjk3i!6$h0(2}&&Vp5QT&PqhsBlpZem2Uofu*NS{X!w#@IncwSY zzPL>0J73s(X$sQM{{yJ=c~I}&2QeH8iPw)pL6M-az7_25Qy}xgAxKP4LSf)`IDgMQ zxUg^gl9TbWfTM|-FZiSjI4_A)<8cLKSpZEdfWBykY(JR!i1EYE|L_mao*I3!-u+V| z5j64B2^bw2g=+<&k;&BgU6F2DZUM{kkGr}$hwivz_wNNWUy}Jy=L@_Xdfw3nC}`zu z-UYkU<0nU0wN9LeOZR;O3OoDR^~?(|K;qn4DD-TH^A8N+#Fp^)3ig5mZ;xf(H$hnv zA<-H~@?|7nV`W85(l9(lj~#yD(81A>lYfiHbM@|_DEd8@y_kg)$4|huMBNT>`L^GQ zwx3>-`Gi`wPo1A19Q3MvbH*c|Q26-$KKW0g?ayR=@}p>qp&~WA`y+_Q6tsLLME(-^ znGX}^#)l^+&K_({w1%eW{4y=!I0%tHa$;n~`?*@E%K<{<^NlS)4&aiX=}PxWQj81U zR~(P`$+yql%x^t6X75`^2OG<+2`CN>g1(`HiJ)m-gQiQfkQhA!iBp*QgSUstmmG}~ z`G{EH`$-5!fc$uKYzg_E132UxrbXl*IQ*k$Df2&Em|FmCQS-_`f@>8y0Fh5sEEd7A zjH^z15X(Bi>STU@{h1GThop}kMJu0x+#Ne%Zc_)S?w8{C5K8yl3%n>neDpMQympjb z%kAC;#oIAmT4LUMuGI^iO<*wd=}k$@WT^?sPozLAm7o~Od}J;3eWRyFzcq5=t#7ER zI=+$}&dsSXF*ymdGj^n1Yt(GuYm)iclbII|Gx7^P-EeWwoltbTpWP3vU+l_2{?6S{ z+PKjXz-}n^^nlgmugP;9=Dzc;i1kzFD=2`Lluf>d9cnH4LB66-kBuKVcI=I>XD?2_ z6R?Qdh&blSk&)|$d;(YPhG+W`1=s5UuI=~r4umpaQus*bE8ab_eYf+8{PPd&2UYR! z6O`o~Q;CI6Wy${HO5`)!Px$1s?~ktMH~^9V%ptUWBhvZHeNSNjMv(mM)b&Gt)d&b> z{t6Jx{OCQG{3zVa50YOC9j_mS_=O9Q>)y^>pcblUuBptJuCGD!>a8@JN0M z9D)KqsFuQFz^p&{?z|J8bI*p zE&Zuy55I8e50U)8b}y*&YC}6pu9`uJVZ zIhJKDc}@sKL1J{&J5If0Z&oD{WS)6CM1Em#a7pIZBA->OJ)e;uLJ$LALko@nj zbaS)W>zjN+NC5G8935H?P2dH-<^sB7nH?KC(;Xe@FW_NU=y|l{r~oX(Vr7aZki5=6 z^v{_KkPtdX{0$3=AaUk2)|oK*b;7l6CDs`EXV0E}ex)1B$ba|xCZFI5Al@8@R5FEE zl!g|t%J#TnV`lfBkL~T_qoG3iiW)-7aV`nLL>qRy(*#vX+DEtT2E8*4&~y|MD1sPP z%Lydf5kUewsj#UFiude;QfJ2N{CYB9k+7N-h@lWlb2$(k!c7{ju%+kn`LQEMUioj6 zKb^EY->CijOYR0Zh#A}sLq5S50Chh?TP&?;q29jU2XW}DbdTq3l1Ko$VY@+G2|JA* zi$gBf4W(b{W&$9qXLa1($il8cRz$wunyB~Brc;pjmk^k&-hrg;C>ifa# z`Fy_S?+Hf0#M$>Cd+7!g00d&pv}!+~NA9QFQ}?vQ<6n%qL~_w5!VkFlD{%J9R5cI0 zD1odv5yXcHb%__8>t-bPD`h?*nZVAE*_ltjiFdrt(!*bupI7H6&P_ab_(z9-4^Pj5 zq1OEU24{pXI18V_*qXh;$R~*Ln7#2UMR!m4!&sZ^nafBoFTHLVI%sOq6G6~+1xpKe zJLi)hg(OLA{bZ8JN82xz82M(o`Zqb`{|+9WTj?I$sN@s)%Xzr1t!) z!f-{P>srNp4-)Pk2d^>mAxyrisv+{Nh!Ccx&OdW2lTQ#k+B!lPO3OST2%cs(_V4Kb zom$<$9O==xAQ4y~K(RQFgv!hbmUKE-o&0z_9wI-q_EPfSJofhM-+&1D$@XO3oA>HZ zUcI5oCx{?Rp$oC-41THAB6^YduV8&y)4~=VoKEMO88I0?!g@J;U%-gfQ3$4Pf@NXi z%L>Gr{jZ9C4aYB+q351Hh~z)c=2*4AN7KWeC^vD8 z{E-tQt3trFMxz4g2$CNK3Bh#s(-naWoBYN=B2W$A%3Tq-#1n$#s|zadvQU-$si~_1kE1{#iuluXrTf2WfNIvDXiJQ&J=_cKfI+FoO zlKcs{*Ag#*j=2lCRLSXB5&@MYnoI~L-e)67q4fnWLRPtgAUT%Zpz10Jl7O}h(AL%l zskV0ZKFzdkpK{+)Bbo1f&+N?XH%3QBztt=^M}A=V)QpHnkvKL^eJ}+mpliw16@j>1 z1|q30`Hyz@_IexSi69UnIx<7ob=}Y5pc`n034$0F05lQ}`0Cl&Sw_AKt)zL!mQgYD zVSH@-!1(z1u9ov{r3oj7kOm2B%wrP|ZY>y+(y-m|s4n=P=juR9f7(6o3kozAy#ELnbMs<@tj zjw1*HD}uz)xg3^U5D|Wp$rPkJJFEU6B8@O{cKpEM=bk-?=V$S>T=$MBig!42>@CPn z-@N1#m;i`;>TFHZuv2wr=hW53LJ_Z-Xq&Taax&RQ$34!oJzKVQLv|*=^Pw+(u6JN( zza0~z0;Xo?G6})NKXp;}UZ^`(?TUZ|V4pi8h$d3xyt6Y6sbsS14A>?S6jKj7 zK?S6ecG{EzT}_eViXflQpM3S@A3rg1_Us||zM9WBv?1AC?v^2+Ahe>b>xKm;b{>ra zcHg4D$U0R=QaHW|@`ZU2Wwb_K01-QLetsTWT3Vo^eFI3M2wb@gGnZx-(wnw@QfXG! zhu*-8xHc}z3HZ3^*?$?I;gLMB3_P}2QP-Q6-Tmxd0Ie-?=vcoFRLx)p;Z~_sV&cWl z9XtHop+6Zrefpb*VQ5%D)d;fLESx?yilVfxH7{2UqHE7F%zWxn-9RT$&!(|*_X=nXgTUE2@B1pAtW@1?@o{&S*#oInB80Fi$XJO5y%chrI# zNksn0yCYX;*RLb6mQwf(joLy1IUQ>ABIA&_NL z>@bvl!fXN1XoW;T-Cs!nQy)y7&*x^J#LORdZGR;KxK+s~i21n%NVYb!6LJHqjM*6gIVtn+K=-Q2l;8rG|Krsp(om~)bu?cGu%ao^}C<+@nF$Po9Q|z1-dIpUytgu6H z9UIg8as0zATekMl1x0CUAJ{qIO$a{gf(WA=C#Z%Rx+n1fy*=G@I5vK6Vtn$#)HCPb zn;_EPp^J0#c`$Vh62m54mgKsBJj?tur@eRIis0M>R|F)0m=a^xN@@uf4K5@AK!V5t z2qX~dU|ESH0UDMLy3IrPEvVssdbMUdnsXpPB`FW~b$2dUOL zY}wKcZR1UEx^WP1Ni4ZX4&XWi zxd2(eti-YVHOB#jiZ4<%9ZHKDOupx)0{rCtiHYx~H>P{=xXrz|wY!^!u~%L^d=Tdz zB(jJ|8j0LmAO~Q!AG{{4WqvL2)ozdoit~jf*NJ?xekwW^&;2^- z52nW4^Yo@P4IcUI19|%s-LV!-!}RRmtu^v%qh?DL=jU+eMRZ@oivUAYStQUkD)Mbz zUBC`C(Spg!c`$Sx)KU?YSR5pQN1Ikb#7-2kLxHT`!AJT0`3)VLHX-r5u$uAG86^L4 zmwZC7qnV}SdWMPLBVZggDWM1;2ap^Qx)CrlGqXm14T#H4$j?l((KMQw{U;J}h$sAL zz{Cx8zGZ~-waiP9Or`=3poQ*_zVp_%w`96LlT4(#$Hz{87s>w%O*cW7Y;DT2T=$P5 z2N3YNpzTxUuc11`dM8qs>#zXod>-O+1?cF?ubP zP!vw*PpoBrLl7@_fjJbxd31tAYXTC9M8!Eod`rU5{#4+YEISBt03Bn5GM}7)NGDj9 z1%gn$`)85-Gi#mSFfLmF1QG$EngDdC+jHmw1d0R_0l7jd8IFM#bO7r7C|n^#LBzAV zl)Xk39vC-FQUi-qQr15oEzLeK$5M&5$#rD@1J zqFTesuxbJzkO@sieL5;EJm*|8LPBXxU6dj~rvQp=nKy5Wn$HHhrRER393%lOrX za5Y|{sVdA&PeYTU!2J9oyC%ybT6i7=u?(qoDRxcQb!cghfxvT27*u7>S|k4o;;INB zh)h=+QmGau09g_t*3<;?<~X}Y0*HRn#q9J=P5%Ec4h{qW0001h{9nt!1~4~`eT$QR Q(f|Me07*qoM6N<$f@e|%hX4Qo literal 12860 zcmV-CGQ-V@P)HticNPmQce&saAVH82K!BhiQJ`hhdfATZhp76|$gYolB0Eh|r;!t}_KA-j zCypKGq;Zea)5fIJy2(k~)NZU(H+CY~CM7$RZOO7J%c4lF2;w1uq5y$fV!5jY7CV?{ z@BQYnGlSj5gQWNn|KR1!_sz^Vv)}K3@8#f{E{OWwSP0BzF)|pM8?6{cj57_^P-qRF zhi*ZD$8{aL@mv54N|t*aX>|(D`5?O+U=mbF0FNO+1x);NZvI;n;HbU)cMF$#kzyr9vq4y!cXBM>v1Lq93)+IB``q7v5xm; z@oXN)q}{m0jNRC5we_#*yhPyNgE8PnVg=8r%`b0u!?`z*#U*smoSWhGL=_;Y-$IWJ zbIlQpmt@zj5_N!MfYHF*!ZOb^gP#KUAeR68whF@3Y18}zoSIIpqDDszK>95~_RpWT zOepa>OreLKbbWNq0Bcmeo?lPIPj}C~Tnu7TYNz+#B}w~l798Sb0iK+;tpmZe5}3`~ zI02?D9eCbd#RZwbH<1C9NKrq7mKzimC?ot`oC$q`^Tsb}8a!@UunK=&lc!+Mr;<;V zAmxUaZ@PPpw%aS(*v6siUi0SM47~qC2!9CSM>6tAoEOg}5IP0*`EEgiS<8SV=b$Uv z7QT~X*Rpt~2JDr_@giqIk{4jnwqX(PSiJAAV3> zys&rLH22~us{$3ob6d{sXi;qk$Q1WO*IJ3;TJI`VdVzEit+J! z@I7tjg!>b`(1o!qd~gjw@Y8-BT3*)-utE|1d%!8*!SGbZI1_nBirhoFsA3RGYz_DS zD@ppRK3f0{6IOF8w?;%nC%R;zZ!-tKD&d1Ed`hzf5G?0L9V-F_dkVFHii7!z(RQ3|U>$u$LuDnW&7Y=*IG23TG}_@qV#=yH#FSOTAb_x1Ap z-abK~*dDw{;K=|KB(KnGH4|({6HquZgz>CxPGmWO%s^(N<5%fC2%kiiV9vH0{FGI&qtvLCAekVGl6FWuV=_hoAmY}L8kTg(!j)~ zP_)cGg#U@P{6_Az+s-RXn}GpjJu?%Sx0ZQMagT#MfB*Ysd4CH66l^Ezi7JThp6h{m z$ve6RsAGhXp4K!n#39qKA&$;kI`oJN_Ind5SRwia847_PajgQ>kq6&X&;ZdEphm_e zVDP_!@b`Ih)YmCw+IUL2fEnb-^GnQt_exx-CDc`?Ancnl%|omConzKD11wP#KB+x$ zt~7sqLnqIFE(kv;4FSpoe;E^yd?Q3!0_C?*#|UVEy+?KZt|C~z3Ho`d>BsitI{d}o z(kn+juoV6(w4oE=Pa47Z#YG|@G6Gc?DG($wffpu4gFZAYN&7M!?-#6gURd^{g^RkQ zSCA<4Y4a%~f_!K$;|68F(ct-Rp8ryhDE?j=(^J3)72YY`VAoa@I1$%pIgCR$>@ZE< zEe@i4q$j;Q*byf<&M^YL$N4I{TZ9%6dgg8JWz!a)jN^CW+#JFybs z_*IM~cg+Ay!LlDoN{C@(q1OAwNT4D55dIgsu?KGz1hCx&1b-ptMBtpQu3K`sT2J8I ztP~>OLt`sy1`@u|wr$`!o&uLQ`e?e9gY|7Vnzi6ui@Qh_YE^~i#;m2k_jRXe&yND4 zYj+05O89a|lIQ;i!rx2qNharJz9*~z9(+>6jI&MW{gH}5Bh5Y6-5`1Ikf64{z)HUA zKRaW>xM{)!o{kr6n7|mv3NVV}Nj!%P_c}KK_529X)fk{74sf7Xl0M+UCq)e)_&Mi} zlWr|pM68SYl5gUz@LbRiWCYz^TeqF}2zaFIubCkHyc+3QXpb{^_*<+DpQEw(+Hd>i zAR-;wrlUBkEQREa9+nCtI?Bkz{LU=wsc2K?#O9cTh4Th^13uY zwCt}&XKbslgX8z_M))+Q45cmh`Zn)wc(CmI`s6-sP+Mrg9c_%vJJbZ0CFYaw~ zLB|5?P;eaQ!(vCt#YOOMLFln~;A6TlUELg~{$eV1p1V4JWa zA-EPG_^8=$R4adg@DBuk-|I%y^CJa$MFt?XA$&X>=n?q$&ASlD1ach%1hbzRz=KaZ zejMPRzU`co0d{P!y$nqt20sW*z@q^K-dWFf|LT1o9hnih==VDl30&i_TKbcp8rFXa zUcc&FKu6%5%3n+5dbHgO|__Yt!%Kq_V z0N?tSbN-gMI=io87q_u4*;Wzgs6*7A5?mkU370Z~B?90Ls1c~JVp&jS3)JDdT* z|Hjvy^N)T6;HF*9`D2d({P~x{4_a2p1ioaMK{gGOh5sJcl{&&txzCkw4e$K4q3u6y zIAuQ-sd-m*3&^HYu)eDYOl^^crD;nlKva zK#*c%_@vXP0q8yo(u*%S2H+g3A{VVu|N|7BBFyZ*XoSaZX*E>5p*)j2^JuEVB z*t7HlfBKknd;*VxT$_J+2H@CHcIv%D4i*3o4PjfMrIL}Qb;B{lj0xjU>u|RU>O|dN z=<2Gg073X`ln=k&#UOkkVve3q{yro#?NE90h#&l|w?q14_l0jH@J~GMoR`$_`cicL z##KOKRW1&iS_NHIS$IUz00%mGn5aNt!8#Hy(7s<5qMqNeB@ExN4B!?QL71Ckb6zcg=$U+ z&V7NuzE`B_0#*PiCS&OrS+u6oAQ}d!^YadT_Xi^UgY!20dm75vMr1A+5Q?kD0Mzf( zt*x-28?cCd(F+N)gKg;Y2G}$#Du352^6v^>uV;YZ92vlaPZHyCc9gpu14sx^eflXD zV&^8u1l?N!Zo}UH(u)A&FND@duB^%kyjN{Rr}TU87o2l~Pg z>iI%2Y{xXBn=RDy3Az^@_kI+*-}7D&B?;z6M`7eI|0`5y@{qoM2;@y&Anm#Vtj{u*e% ze9HMYJSJ@d&g0rnE(*bH$2l{wjuKBmVqMaCcCNhSI|~34c-Wuir4{er6>Wg*hAd<@ zX3l4cP0PXeR1bdowkUj@|L})=0~DXlfvlF90lb)hInTg*3c=^;X!_%z2!1+~1wcbr zrl-&VbD`^${b+zsBzWQ6YBu1CZ2<&7kw}0jM?LI}O-%z0H;GploF5w5Fw~}DMftn! zeDj_!x?`^ju$~`)KX)Pk|APpB*G=r4;7@+@0kD4d6VT7hF!)TBYRCX-%Y83{4YMFpgC z8F*|JGH#sP5S+3P@OCKzTnKC*L6-w-GqtAieKIKS&S~u(5bqm=w%%Syzxj5ye(}-6 zEYx2-0W(NYDpg=+WDMlaEL4w-7y#o|sqyzmX{WJ>}h?O3)eny_>t(u@QWH zW@gG{@DHWjZ`@6`hNaLh76SQUXws7CO0O$F01Kwng0VXg%Ff)2V`3rSsI_X*nK zt%9cg?^|T~Ey3rbJ)d{8-<#(Jk-=}j<89EgbsMyFVae}uz)bzaw?XH5h^5ypG?rPuz(dUwk-S#!pGTtxYC0PuHl8uJ0@rps{1_z|Lc~1Wf&mT z^TEbH@PileS8*Jh)>FFDci>;DEezxRE$8}M4owrwD9+5|e9qxjfi$Upi+h@UY>&1a=7PL zfh`HondS!>YdGN_^Jyhcd+x~v&Ufan_q|QJMV_Bx8LdC zGmEWY?5q3PdFD-fVC!%EwsZeaAA`yN^d;am2e9DK20=2N2Wd=U)ZjBf*{t)spC5xn zu>fgN34I?K-~mnBm$R$`E7?DbuNjO~#yD)%%941I`JI-=6&_!vA9rK1sM? zhy|HI|Kmj25&UreJDVy9a$v^r;SUWCeSTnIM_;}5`HflNaKo*IR{_q| zdaQ^gJ_vtqEGs~?=Qoqg3!yTuD2jxK zcinvR&41i;T~9C0uz9}{iUH5R@n%S3$=5ot8n`VX{o!AO&UZOwzkKRNnEcka@EHZ+ ze+bf8IY3pRcq|8#-*^C0Hx5CvyNBJ|{sycBa}_B5QIPl31L-^jRds_}Ozi7cK>Sp{y7?XAGzw8XK zma?DO;AD^UeCBr%JcXb6kv7QWR1N`Tgi100_f9+5{FdAOd&)05S?t3{dGJZ;8=X1Q z?2isZ0mFG8A9{!XPEiI)3HNk@AJ4Qi_-dhk=|8M#`zPJ9-^MlH3%$-9!5?dIKet*y z7gP1%FINE)N<3(QkL}rW^QXh`Ya321Oil>(89J`B9v5-Rz!P=n9DN34C1(wczyhWhYX1;Cgz&4U`#8;!zYQd5~=_^{sIrab98c!!N(|0zEC&w z=@;bz{@=7=du$rDPM2ePbfRboyyRW~$@8bjgeb`Ku zaLIRjzUcyK6~dlRO-w@14<2Uclko(U-nbhy%*g!nV^G3dhi<=vU85FIeC19^;#_*q z&1`P=(Zg{1pZ)>hy-J%QutG*c5u$N_TeeQSDNmJYMG%i)smcTVyvuHT+$X$uk0^Z;P`+6 zHg|RZ#n27cf6;?a@=Cr}_HB+2^?V191D`@JpR2)lUf>*BT0q*e1&q@#LFt7_P||6L zV~{-f6rva|qC6+~@JUiz8@7cQJ0}w;>(e#(sA_~$7(PCajuc!_^&*46ug#5l+lF7P z0{$g6z*>90X8?k~=a$>=>+9Pp2d^*N^8@fRxg4C`bwdq)zyO}M^lxX!Grv3v)nWup+wq(~95MTuqt8C*KG4sF^-$S01C8kQv-MaXRs1H zZRzmzvO5@-c)^ISLg&--QOW*+!GDMGsh*x%S@!#Wq~{Bfp0CUoA@$3jL*m2;Onl%T znA^P@6r)yzRo0Pf(oY`YD8Eu@^ivO}06vSZSyRt{Of%v58lHR2D?l{!S5xvy2!0>Nmj`wX`rtYD z7O&(7GoJUI0gyWVB6NN4yO2cqQv`qKPD){D%ZM;~MNEOd0%?msyS9p8Hh5@Taf zLIYI#2mA_QojDVR@1C2s;rDxzl3MS>*Jlfu@y3$hIBA*(j~d24JWh~t%UH@AMG@oG zK)i_Yh+)8S%UTnU*R%pOD*G$d<}KZSL7DHt4=R}G!JhAl;9vLC$3a2(<(-2Ld=$Y? zKIcUF`oR$Vo(CTS6?Z8A?)Uif^6+l|oGL-I3WVU}c@Ta*5&Xlt?)Uu3Wk9Ntv55v> zEBx2A0-SfxNBDbg$DZH2J<{{T@S{E7-?()tP+ol%+D1=8?CdPYSvH?MIl$GRj9|{pfV5zOsjI*XPA+j$r00)6AA%pO0FwYeJgjNI z2QK`TC|W;`*{kdMQE}(>^a_>jK=`eR`oAEmr8OyyS^wJ@|1p~RJbgV^15MCdqdi}( zhQ@6pIY>T>k;^#~stQy0egx)j+~r)KoP@6Le4Cw@@qN#~_im8dQnh!``()RHr4pEj z9t8b(t@}#z73}$0%=|27eh%U1K?@{k#XX;)vX7ast^z*$J??P^qYQi!1zoMK7sf8K16!H9O(HO1fBiiBbeb1Y%QAwtuyOikLB}dNCV0U zU)$ILZO4y6*Z052t`Yp{d)^ORqBZn;czT~_GDU%wn|1-eaU&aAue<_EGR@#?XY;Ul zdNKr`q}vSsIL5v6wms2`>nZqSRvHG@%nJqoq8lIz-_M{X3K*cbdrQxKJBMz#KMFr2 z+`wSZcN%~LpQ7#AXRzGo{o6JCCT(LD=582**eiL6z5FtpPa^yn0*qA_eE1|=s+A-m z77zCult_L+^LUD53nBOmCmqw7kqV6l7#}wb>iJK$GN=Luzv7s;EqLq#GP-CjpdNgZ z#7Rw`(`}s&4F2u6-}&**EgkXTbC<|~Jq?S~2B{Sw?F zJ!+Zo-3tt#bioY}gkKNvGV1l<_iZ2WC;2*cs@}TUXE2kWpMd1(2$Tn~jK7aExr)6# z=igKA@Au(*n!BzCMy~rU=Usek$+|or9{cd=JOE!+RgiZMK_&8h4L&r5-$)F;rLX1D zWpzOfuz3r@Pt@SAQoY?>-5+lTpUS=&fFCpg!OtE;15BR|zy}6D>BiK(AA+;H-?-ur zvgCLOKE2Kg^mHXAhu~90MexhE>BDc{0C7zS8~fNrgipF)24L{lA$(&^k2Cmp+36@k;Rg}?aK&+sUiLHi7|r0LWf{O6rqU!t&fGcd?v<=ICnhkledC#{Z4p&6j+|%3phdsT0zZr$kQ@?k? zdzs%_r}WcI65$g9bzK6KGm~sS{o@}%;`uTEzU1+zAc;9fD&91V->!sqfJaEOH|Fq- zyx_HP5JV}Q`4}VuUk$)N)1HFS>xZH6%cJ8s+_w{~P}vuuu2BLvINz7U%zxk_!@nQ~ z2*O{3dOi3(eSM(|48E&+{XVGDO}j8#J_;$S0uMd}mC;c)pBNp3;?2Xg`-XSp|4Q98 zcsE0t=-qtnostwT+#dX5c^;~Z4a@VId%gqz;+6fN&dUI-?4Jkx?(Xj2T@C!;dE3MU zB%hyv>37}5#$*DLJYQtsNtJwd0DYc_!2^VcQ@|BlWv48Q9UC%G!m9P{C`V|x;^|MZ}5 zg4EHc-OR7A5d0=0__Ev_eyLQ_W}kZcYj}Df^9HB#9IcdAwJ`!3AZNb@wcnMvww_O! z@4*lEe5-DUu1Qg_=U<0q|2pjX0r%E@u0gv|l)W`{p5l~7cDDD^pwXZ+)D@xmX zz}$NmBzt=xIW`782M@!flz`HXfh7fi!RKn98ErL`{eoK!*0nglw>Vb>P1F7FU6`u@ zetsnPwId@ZzYHz$X>YExCBEXV&7aM~sEO~hUONK_t9@W|R}lV6mI(A#%>3>By`Lxe z7)#-k5K0h)%-5dJJez}cqbDJKa)iM@bk*X3bT-Sr2uKH25Ke) zYI{4HrRElnHef8jbCP}+(u2?4cYUn=Q9p|3S9mM#euIn$Z1q8v*oy>t{zIO0Q zt1>|SvcF;ju(Cg}W8mYB;0t)p3sR`;dn1BRk(?Ow;V<=9SY!eb)iZ$Lmtr~80;qs`@H4p_%-lR&gHNi{#M;J2*^vwYM&u&)AP>Ity2kLS=f_3G zhaWX8m4AZ&z&9UY@SX2bRs|rT2sQX5V^xozx5Sn8{B2nFoiZr!;ht~WkqQtQDx$Kb z=enLh!uXAF&v$S1!3!bqo>FIKAamrWkidR^`rYq=!du?P+IZUutOgi`>xZCp!%*%1 z6Qhtie#}`5H?wr(uCUoSw`9~QT&(B2?_cM(xndE^zODi9wxWfF1^@oh@fQyM=+Pg2 zL1|ScY8$f5e%j&T)Tyc09C}dvayJCw*A*9uuzC^v7YRPbQuwZ-&^>j|&Or9N4>I_b z{(g)BHt)fw2r7kDg5al*A7|qw@FVXFzSqlqlA<_S%;0O9KOZdbqa!B{KJ=Y$?=Q`l ze$jM4n(WWi^c3Lpa4FTa0&L#041AK^@CqyYtAXFh2tftmmv`2(pTWmSW1A@6cw=4o ztj(+demov$@KsgyGrt~uJUz75jVJhXb8~R1#WlLX;ICT>e}yf;>-oQzN~NUW<)8sr z9~PFvR~D=6sK(;Zi7g<3Jw5x~hn$P8adsg1(;xT{sA7Hio&iGe*@@H;exkJ%;%ER5 zK6@Sw;K8S36uxSxtJ`to@_|nh>&X`o?(dun^!$nEC&nND(W8H^ z8t`~+zm%pMY^s&eIDaO8*}$)BfDn9A1n@HIL-2ot@s_RIoU+f?sWFX8eFn3*ZJb~_ z1_joN~^P%h1mj&Qt8t6{HQ_(*mhk6{_51%-POJSjtY66Nooa~RPgk@h^bO4bFm=W63KK#;+yAiNj7rghbAbd#@Kz89*vF)gf zs-OAw;N$5bB^F5tZns1^EUlx4$rE+OW=396S!l$`-Y*iHzs(Ka1PL5rc z@JY-7*^Vr>N*&A78SLT9^fWze2%Qs>{R92K|BiRQ!-pR#`<%P^UJs5%dj5$M(DwW& z%lw%)VGqCS?r>j?G%4)ApuX`|(6LgPUENUH{YEHtb^4jl^R*0T@ZFxzdp%!v-Y+9a zf?1q%d%nms@Vde7V)vXF8yP=x;c>9pIrnXEz$XwXzlP4!HTlj2y6RioL@Kjx_ z^}xD6kPiby_;1Jfoo3H8>iOBD#~}6m1f)-lKyl|F_Ib+u#s*BC$f2PmC~Y6`BWjR( z@8p;CdU02pV-b9c^yw*>#4&@v%zNm_bAgJ0Wj_dCU2F>f0LGzI zCKb9S$K%a+RCOv5gMaq&hEH0OKZ-0he?qHm*3KJtz8m4cBY2s5y=jLZF-@~B{OmKw zKy6P$2@TLpK75SgO>b&?ZxDWH9^q5@55iX$b-=>!-$OnB1Xd##{sEdR6-tpel$yR@ z*LBF}^H&6Xk{FX>t9zi;&w#$`Z@B&wl<`6&>q91RkEVeejsFBJx%t6+QGRD~k1-Fd4(Svj)h3Y+u8K`2A~!YtN;Yx zIhx`9UB7{4KQlmK7L>eGJ{f$B;tc`#Y{SC_@G6jJ0uJ1Yfbc2O$+Qoj!m{kp^Uvi1 z@awF<5(8YR@Y((?cSBr>hsLQ?>b9X>!}oxwI1_fb2Lk8xOo4MuK#iZy*^xFg(lb>> z02Sfti3Ic3UF^Cb)!%f5^~ zU&WqZ!K~N)`#epIkHS;GJocy9^Z$=GC&iVf`=P3OXspjyu2}daQC1Sm++u}BJ-xl3 z=;`b0TFK&`2`Jb(F6Ed&SaNS^`v6ShG4-=2ApOi!4*cPp9r#PuUHZIN`UyUX!C%x6 zzE*=D5W%0A7~7BVzkk$6$?73yneVF~B%cg1i8{bGF6VOC66V!oTcg?`Fl>PJ#6zOE#hp#Ty zhk5AWLkvEiPDHQCa(vl$UoG%Sq9mH33Bf^BlcHpLdwW0A*W35oJv}|3EvSKv!_Ai@ zGy!d#^PCy(7)wl`8MQIB15M`f*~TVZ((_&LZpFu*k8_eUr?evcDnO;8v9ZKSFjt)m zt@p&EhyMoQ{|7wH)3{YxRS|@lvokO@GVP>*k|d|+Ct6$Cu~M1$ujzWY0v!I~;r)~2BR>4qDt|T) zBe|;wKB<`jda>-^7lrRtdoqC&k(8%W%&qL@WC8(r&~ztb$pl`;H|qI8_};hp@aLPt zKR7u#No79_pAWxpiQL~u@N*}xj%D2Fo{yDV+ww`IR`>U!7iWGx*EWYGJgFT-l z%MvIt$1omz0KGS%#BEbhH9BMUHG{R8%EA90Z2Jv1~RDnjl)Gm6!uRjxk%R z!H;TmH%yxoMKLal(vnh18OsHFy-nHcm1^6`WKQ7mo*G4-vqS6H5KeC!pEJx_ zy_F@2fhQxdo{xt0;H!&E;TwkG!^hzv8m~nJe{OE>QuDd!;%<4%TiHoGk$`HY0_uVW zGgFhe(TNyNXOioZ{doM9?rlBWw)XV=%J27lrL*nGn zbpf={SmSCHgPuz$5+quaY@BFILL6I62)+@1;o(OQAIar%pUj`l|7;~2z}immdu-u# z1E0hV?igez3L1b^t!hv@mnQ>&T17*IiEc}`cfRMIUw!xegM$Ox*^C%x2JlRvW5St+ zS!)RhjK}n)ib1i&031FSC<;LXkYwIu2FP}Hv9Y=k$^3u;CdMbmzklfazaE4yMJiWR z>SEYHGgC9K8~7xVz`O6s~(dztmY%|aCope|_P3gF(+-`fxE>)SESS^1qP7E1?J1GXz-;9e}> zk~`)Bjezh?lLuXQO@M!z=u`>IHGvTE0zMJ>!Z^rE!q5CjOM=OXk+G+b=l-k;@O>J~ zR`_u_7H&D38F`^mg|V@**Cl+CSi;ON;fdDEs!=e_jFF4_pb-`@~Zd))- zkfeYKj2a;_0$mrPE^wtt5+vd+{#et(-!}RD#00^gc_sh#wQj)c89qr&Wy2*CI4M*C z2>w9dz>){gOixeDOizvX^lslCy+-hT6IdF;Z)^f&+|UGyB!eu=OTd!|{^3U+{sdflv!m@Exd0JbLqtaymc_EaEglCA&7$c#m^ep4_jvH}k%tZH z8o~GCJ8j!;7^dxf2ZKMGztsDG$t9-RJ3|vX_C%@xa!i6vTe~3C<55-3_RmX|%Fisz z+=qeL?aV3Ivporb6#$=?G1P?$2of!3gerjsJZl9O8b(K&lBok01vFl(bC0$F!B05+ zgCGAOm&^T8{%rmiG)}cDq3^4hffPrnh8h|Rwg6MpQ!qC-cd7UOvXHnm3k?6PTr9%u zq8_>`h?0L^I#>Gfi4D1fc)EAz&`{GCDJ={uuioXEevdwx_L{TDO=RRA&o!B3{rpkW0_CKK#Rxm*cV z0Mg7$lc8~GUfni))9_Y2ecSNx?ze5~Oy87RpG{E(aF(wkC?{*{nII9DnE_@C#md;& zX_wHk6n(|!k%}(_n!R&J9biqU;s>0 zV_{i3D2f6zGfo@o?98(FkB*FtkBy8R7&|#~kOzK(+Ju6=p4Ltz5}_X;Nm6Le#B^G@XE2U}y%k zv?id6^ILj*)NR|gO%w{VfCku0&zQQCskUumSRjfbYcUk0=N$O^5dPoe@Elzy1912q zbR?6>vdo~R0RSW zU&+T{CHMux|2)E9Qt|~+03H9lY$xMov)QKWjh)P0gTIXU=)@eFfWi|2Pqn95c<`wb z1jqG6257ID;LzyF69=1p2*E%4Ozv}ZZ~uq4E}8XQt$6&FQL%| zGJ#<@C89D{0f84_zB~^c$AP+_G9Xk1O4yf0EWx}e!TiD^J|M#Ijn_kq62ty$fTcTu z<$3*vjT`r}u}S6MdA%4FZEi|nR6JsZ#R4iWVy}cqNG`ncxhObK|A-OKe#xaCSy_k9}dl-+eA^?S8 zqv+VZc@wn6<4e|>pPO6Xnrz$CmT1d(bDf=CFfuwaK6z?#AGRM>_FLjIyH-J%)Z0k} zo{UFEAn-I#MqtObG_ z+SjKWEk}SSyaByVmnp zD{eJ6r`kIp)8=eEnSm-orHYx@nuKge7n>KrZ1}t^2|I9&Kf=>9`F#Enj2{R>xQc+` z98^_hM@f=c*;f>W&C%FXCX<2Ee2G=4Yni_`t;ztBtYDAd%;0;PIWxly;DxGIA>9^- z;#?IHiVPK1W8?X%2C^tXzEFhxStnD6t{(zZuY_M>Iq*xR5`#|iz>^U?0}y;t?!>jS ze?AgdbF;3gF#Xar%lx1T>PbS_nh~xB(J@v4=;~+>%~h*a|2&xS)C$M|o(hEmi)--D zPyAXQ@;1GZ2{hdV9bvb|Wyc8am?}U}*=#m6t}Z(8Df7J`@Fdd=n}-?TT;Wph-xV)m zwGSAU!D4=49x96!ux%R>EiJIFtrg3+0mRt0O?DJz5f-XC2$;o&VK5VbrNi93Q}!ji zXKvwDFigW=Kd!`C*1tOcD%kkPtBSc2pNtcqRV|%*|cP{0kv*tqsle*o_4Q`tfZ3}4Bdc5wd%Kku8u6bR!`;mGK<35!c`6b{}%@b0ssI206_k) aWncqQ*BcrGX~WO}0000*!g#=CaxI5u`2;Rrh% zw!>0*{RcR9{{n|&{Hy(oWA+zE%sAHGsM;Nkc3M(M(>+qZRO;$3vYTBjvVcMnL=r#( z$$Y`*+?!7je1OmD10LRcGw&9Akfp6ekV&ZIG%IpELx)|%G7sE?;Tlfz6L8x zE6~~RfVppi+5PH~;o1q120tNlWYbC(S%PU~a z8kuJixDn{bj7cg+z>3C;VMGFoXvIJ>m>os}DktPGs$Clan0&6ROuf!=V_E<27MB)R zu@2vBK5K4(02@^ARY?U=;_49KkLV$Kd`$1Co{yVN6cQAcy{9%YiC{!d*LB$$WaV<1 z6M<9#EiMr+3|+6A0JYkAmao3~)|=nQc5SJ?^n=E;#yxTzubXZ2{&juRQ5Ka5vPcMHAexrVu9J}kd=LY&cQU)AvT<7;qGE#-8M3A-HZRquS z*LI(4BLIOoipZl>RmBu1$EohRQ-tWVnZCtnWPD`AZD;Ut=9+2L?fKU7wsW zB0=;$WZiBTy1g#+hP^8-6IV_E%J}LWpm*80XHTgB(#lGG!T-<7>d)A?>wPCX!Bat& zSWUjWxV-rHmY0|RQTuuOXYJkg&&iPp?_~mv5in*{Xg+I(50ne~Qjz`7jdF+H;2q*v zL<&f)VHjW!ZRqYJ5xQIzY|p+F9IjOXhyan*s?Jnvm+SB!-gzBfKI(l4eq2Q00Mt*KK*1WNtO}( z3;{lS(qL`dte<@LeD#*@=|8B|Yd^r@y;h@jZ)0=gBkVs8{e`gdOgV0&K9(^?go`GF zc-0@b@`?ln{mjc}UtX&Jx3&3%0CUwZSz9$Y5#(HfwSGX!PZA(xHt>R2|JU@Aes{hy z|NHeD^_PpqqJhs$&-I3$=lPP95dyyo#QUd6R&DXysfr8&g-+me|<^)j1T;y+jPj>zX zc)VXy?LHKx0YJfnvSu=0sBD8QbYX-)9mlp;L{zdtmINu|2+l0}H)qN-|Iys++#dvf z?#{^b>D}k(xxVAUC?_Iuh&;Gn23A-G!vO!I9d4?K3KX=$g^}P&39z(?pj5{`Y;^pZQ7S-&CjQT_jFfK>_~f27 z0;z_du!%2!jc%dO@wtV3k9n#3jEyS>Cxs&WaNuZ308rXP0)*$WkW>r0zBX5@-L2PW z?-q;tDm_FZ5CIq&u9E=l`!0wCS4w~iR#~Gc;YUK^SV~9!(GGIFd}*bs{5N$+S}NX_ z!G7k0dIPU-p&mcSxAT0`uCmC0kAsaeuW3EzmC6nj3OUHz&}umD)P z;L-Y{GwpX}1W*w-6V>X2zCGQ#F#fNvsCU2iin<2dICu|zG4vm!|L%l^zf8JvO8})M zf_29|H0`yOAHi;CB_6lUh0|PXzFaQ<=j7O5Z!{Vkjb`H>65$?>H!d@dimrg~@RCJD zAgflZ@GAb!LV_zR0mU-<3}u)As+>Eud!f9}SEPSI1epH~nFIeiIx4+HlD!`uf(ih$ zVZVW1M*%5v@LBM%6+dtw*XKGvDp8txD5WOMRW_Mx`hdMFXk8fEWt3tE-ACDuLUkyG zu|$;C>h=2FH8fq*zfBLVfkn+8D*=U+iUj8?0dzdg@m-&_qQvi2C=^&pXz#UOOahPs zNL0^9xvAEL1Xx7^d>;u=oiBw1AS;Iwwx1%wOX#1WzXq%{=$m;E2LcRNJkY+BvBrDg ztx6y^c@~XI*`i<2hcGw0!}?Wh1DJ{5aUzV4yDlR@tycS|x~{Kc`(}68?E<4JaOpcI z0ko3F`m#pB1Q2pbtsxS~7-Z8lPaWUfIWV2d3bXveAo0MT)&hY6^!BU2Rl7G=*WuOM zC0MTd@KTinx1eTAis-1&?I1TQz}mS#!yq9UM0EFGu{@%WR!c`G|%Ob{sJ$*3;-zJGxCZ|$~sf8K7lncIE)-Q&I&*MRG~So+k% z?*boWQD)LFDk39EI&yBM*au{k;hWb%S<&WRxGyoo2DFG2?1mc>u^C#>ev)U1VHfr zMWLvy5dkF3jQyd&ob1!*c`(DiITS(ng&2Hl34CFW6M&t+g8$aS%{Pz$m5=~r&v5Q9 zaSq}tbU6{+`D`YZj1J6I!V+O%I}$P2eI!GP2UHX@?I@S|-WepoTJ1*dpRL?pS;PLf zktptPFl5(14FO1T2yox^841We#{=K<*>h3g=bn}XS3&@_ES)L)$+2dyBKY55UaM4T zy%b6#l>xE?1l+Vm*z73$to8^Fh6w@U4}C2p)U)tGKP15GUYz~#1+cO}1n`%5tM-Rb z*=~Z~=5^Jt@KRRLdd%l$cR3km8>}TFM0Y0=;QfyZ3lZQ=qhkCgw_dvSJ*}XS=eOEQ?Ic_cQuOGh8SqhOqUxuU9nXw0ks`jtDp4y#2K zjJZ@+j_`xUgvVOge|gq{N+E!XA;8LfN~e2v+quoOP{Ykps53+UejaDL)| zza4xbC? zA+|)x&ZM}MW=hc8?PWdO`mlrl^4+&RPR&BLdzza3HVdSxZ1W4vzDA){c)AMS+Ne0CPNS|*G1lZi=MA+Vw67U%-&~Kqr zjJn~Pe%NAJ7fJ#Hf7BguuOo?miSO#1ES?*#4GHk5QDxvqByb&`mF}nyicrcBfk==; z1!J`x62gU6LEvAhE!6JTYPC19e;1$4dcOAv!Dli;Bmi7WV6*XrHrhKPL9gG-oOkIZ zKrV6xh|E8-Bu=zBQBv=(eBJn4kpfT&D3oMS@*#JRC;_pJmC{I%mkkHqg_q{s>;wue zm2(341H7-{^LuZH?KcB1|4+l|-v|jnh6(nkkBr0nq3HtE6f9}NO(+Nkw)`f(?=vS0 z0^EB%KH2-PH+CEU6}CT%pG+4|__II%Gq7#@sPJ68@yu7p#;3L$l{xjMj-acmn%sDl z`f$RV0vH1Ccn*ky$ec$tY{U2V$YELbsI9;wQ-Q^{!=5izTv(cQfgQ6F?)?@{ZOCAu zdRUSOwcl_+Amw-k-)VT}hc2{y8J2;Q=%>#M5Ms$p!G1J!JYEtkp$UB=fLLL!jtpLg z$b`cI@Z%l$mgcUxN78;;3xq^ccAxLYWQ*)_34r<{pj12d=`TDMgs&rc%IOEPG$Bgj z;Y#KQenJAsl7yY%bKmJG>=Cs)9S2rsIhf1yyw&Fe<`9BB{CW0Umc#j5d-9Q=BnJX0 zBN3b&5560i%pJc2!;u1NuEw5gLhablw9WR95x^&+c>2m6j1mH{v)!!XT{;0o%pCGF z+MQBG)u&w)fzMicAdH9}1Z?dQR|k7k0~fc|Lqg~&Ld;d>7y%GKOAv(92O~B0(Wj3Ny}n!mgopcHR(6iH zT+&6R*Uox$Mgg$TNI)uZ%Ghn~D$Kv@*`V(t3FcBnsEgd0*+(jXLM1&oJy=8p8_Sy& z5<*8pK(7W>qe{caL;&_VL2&v&gvXQoPqIrTfUJeVpTgXvX058a_y@Y7VG)qyo67Xs zp*0PF|$q4$?c05Ok2D=Sm2@lyblXH<~Y!^mZ7AO;U|DKbEoa9A_h{HSG$Jv#k; z^e{pelB|XC+x%3A9V`!Ii&!E=(MJM^u=zZ>Qv_~&->4k1d!9af^->9Hb46IXRfp{- zjrHyA2DtrUW{z{h9&V3+z}7}<;`_@j0Tj5dGu8aG0xT^XtCQwr2r#XU#@b^{IbzPv zE+;j$3-eY6{A>w8;Dy5qNCb)JAUPZ)r<~)@TqFnqPo|g4uvEK2T>}5!4iZ2eL(D$m z8+4ds?X?l$9JYGV8!{Du!(dSv7%vgZDHC-P_>}zwezO1ZWl+f_bCr_LS^}S(46}a& zn~lY#`XL24sUWz$qroS;R060)b?P;`76)TZH8fF@0-$_TQG!*hvokTwc@|Rn zcLf)-iU&Cmv!5gg3XD>j?B}wzU&In3(z9re>nF8{GB~xJ5DGZ8bozMqVKo5X#SCZL z`LX<`O~V|Q)l^wj6cADbkw#Li3>BjSL%ZWV-fsPW&25uN0J0!V6;C%ffUarrKuxeq zBY<2Gz_IAV{HfO2eU6MVudhwqH+MJyB&n_#WTf>t^QXH~Y!Ud!nR>zuS>{P0E4&p2 z&PXRk0xAJf_M;K-|27&Z`RU4^I}E^VT1URWJObz_gXl0pa*qulSAbQcrcW#ZB$p0m zEd`9Sgyhx{r$bZ>uaqW&9}bR#?EX zb=KylUC3{=HdB&8i*84o2>hK8a7GE3NfZkw=f@-<0%Qt)v|TQ>PcFp(?8|ZjyqID~ zOe`d^9M*9<*%pQjT7ms{Gk^$rytB*as&dHu5|4u%V3`sEP;tKHJ6Ov2JRk2Xx#9UL zuEB56%S0L*T8-8(4{Ynh%A9)o_@(Z%yVC`;bqxeC7Lp6gd10!xu8#pI%6IjWa_qdc z^g9A4frCH>r#&u3gf#F0DvOGHsUZRUQ|uRktttvCfDrfD`Ve?!Br@r6@gIRt*-k`= zP2Ps zsP_aqfltOrkk5`?B!e$bCE4`KpOnh*xVv7AC&#=o!*J_FHHeD4V!<|lnS6|;$3Xkk^l>bGJn#zFFR0l z70fXI z9&z_^W7&TSyKn-iMXX-79gl5KooanW4((oRBK@yM6eiy>`QGk^&z_`6OLdD5(d8dk?`!Wm=5W@-UJDzJ}%~r#@ zL!=S$JQ3Hqv<==(2|~aF8%)UtRZv04AysBkL>lG8tyEMJLxrK&VdMRN|I>~+9FFk< z33x&P9hb-54j=`?k#^w(khN^2odai@<)~lE*EL-^abhH?A|gZX;4eThSkOHjOGhZd zqzoE`C1T8mIVJ%7ECiBT^@ws1DTWvVluCTigXB!24t-q|6<_6KlEap)@nrX2bGvr;0;+_w?YCT?zrLcEVa$ zOr^pJ<{r3rV9}U4sirz3o{eO_5S9WAGL-@XJt6?L!O3EBtVQRfO$!0F#Vj~OR3sS{ zhJY83kZNVD?~jB3WOp5#^=Pab+En+Y68z}B)~V-TC;$MCt31{veLepnrVO$4XLfH<${u3nhSt2b_fplFShg%QC3}5r9A^uw#+{2cHojtVKcyz8JQVb@w{$t~vaRlA%6J zXnIl&8fHeHzu%tfyDqi_oWn$}9IHpY_dS}!`&3qxu;x2qh7v#oyy2-}N_J8vym12f z**22u-0_4UwP9!Bo=1^jh-#vS#Bvju89A}n-ABwS2LjYw2hE#xzNDvW2Ap%TPfia6q(cwEd z2&@v;{o{;Oz)1mKM98D;C-9j%An+0RVu9)b&tS}c=ylBd2tLbxA_4m@;V{wC<_?ng ztuF^t$NfSHpn6sOYJaLVdeU8E(f4fd9sX3%aKE6JBrOFw9dN;gx|d{<>Lnm4A&`oz zfQvzNLqdQwcE4ySL=T1_1TqX!d8=MA0T0RPcz%2XB9`SkAQNd*+z@RM%RF~M5+K0o z5{*kb=w%(`BEN4}_Ms;QIFIkw?py25f$-PHoHkw1y`E6_sT^Iojqskmqd8&0{ z9C%oB+%7h~Lv#EPB=MLetj)cO{u*?iKZJIBBlAu_;0vw1k9+yJ&)7zzkO)+6llwqd zax$bk&iv?-Sm|9aEyE({A^2(QDM4nuz16?oStYe-KQ!V9YL*02OrGJJSuQ z_OB{R8A|2WF+s*~rfyu)YEa8Bu>PIb|A@6hkOY662w9+j6JeBkIhuT~5|$=X07;s> zUqq}l_|(@+giG@Tmkqd8Ud! z#~ya~caL00;4jVHfjdjz$vmH{t}-XvMFKp3^bX7XNCg}@0gJUGk!L=EpPPJE-*zTG zx2Zml5nh&L=8B}SaYTo-0*n&?jk5n9b*!#4Rs8gV0_~?3v>O(j#V(8hT2VjKIzeVN zaV;7To)qCu?G4u7@phn{|3y4EK#+8)!uqxH3e-xANH|_o!RLWfRU@9iRQzqQ2D>oa z{hWfY#`e1RPpQdhhR4CGoZ%pLI_ZvNeG}Q(@_`|fb^Pawt`u=SYOP% zug|P9ClZj8#lWY{=YjM47Wn%n1YHy4TQ7q+Q^}A(_Z0-+iAg}jCkg|=yI9}7C)mSB;cD!gw~VpeImeFV?XTJ=fdv7NWnG5gm}nnxrcb5NkS+n*gKfrv=B18|>w$%X=|5)pw2Ko*ezc7M$XFm8dz zrQULE(3K>^34B@Oq^4HUW!Bep4!DpT#o$Lq3gCt$U|SLRA#ujCe~933MA^^2Z+|*K z8xKu5kDZ$UD%M~npTk;YrYhq!=Kj7S^WaoU74Sz2?y0A47-pIv!s^1epgZV7yVXGd z8B~orEX~)`w~1?EpmSA{dtDIcYpj1~={xX2-Uaj7M{KNkBJ3iiM2vzc3GA7Odk}@o zz=0O?A_RfYT1}Cmmao82<|H?D7c~4ae8-eqFQU?PkgiysR80iC%iElrDmUBxXO8Xu z(6LWnHWevR*!GSE=I%8sfU1oF?w|f+&}twme{5M6=sE|zS}`&c2>7(kRXE^nvjLC3 z`~Vb$tQG>y3}qiM^O<95@^@RzmDleuA}kBP$);_EBsk8>xVx&#pd-mG+h#49=87>1 zB6E;GN|1~Rd>$VJe>hncx1Y8D3Y*Urb&9g-oiLu#&P4!05DpVy6ilxcfznBD}Rv8oY&4p07X$iD`;omK#>3L z_@j1*my+siDB&UaiYPLVj7UH#&~BQONkG1}$&Z<~2m=fc72- zz1^@lde>P3)PfFT?r8a(ye2LgchT3PL2a%&_4$QD0qP4&tWP8$lSLVpZoZUEqU_&o zB|aST=cE?sE5aQ%BodGj_{Uj*SuLuEvU%(qMKIeg7*%=V`|YQlb!_gjxyEz~s&Zk3 zN55=M9j{4tW&)_1&RTyo9RZvH&kntyuj!Z_nqFpOB0z0^4u&=dsNHU}c21hZELK6y zb6}$Er}E=C4%F*Q@!muNF~`A)Nk9aMNI>@FaoE4Z32@_1ygnkqp*veX3|hQY%S$rL z{z;|>{JDk%um?UPfo5<87_*I?hPlDw=S&wrQ4yj2^!(Bv*|`azh{{y!1Q~Ubk8+S4!=(rmb&yaNiTq^+AbiucM zP%6oHTVen;myd@CJb}++BxJ$2a6H2lfU{Nd`d@K$Llw`S=s_Sa-wo^%(=|_)e4p*l9k( zRKbkR1+co3l60d4<@^fxPq!g>x&y+^MNs-Cd-ZD5f|Y;w0N%f&z-FDF(ZK>utDOKr zMDBS$o_PRJo=31fUc7xr086pK!d4Fymi@hb{;pQXBvJ7mBYyl49B4EGbNXRcmk$G``!cEkFA=bh<06jxF0>jJ zlvZTqPNEjAM)$8;&E7k4ET!pU+3DKniTxpyE_Aok8G*mbvOi_x;8XTbGOGP)(*-`Z ztS)Pp>MQX(B7yI*YJVgN*!cEqaew8rM~nnNfGuTcY0c_7U_QHM1sIns;e`2qkQpvjYV|)<5Max8pjN9weW6BSKvIRE=cumxp!lKW zO8j}?1t|AelZ)B&4^gqm=dZ5afz_2)!E$ZrSv{a@Sgr*XDIuTucngHjJ^}H!z6G*D z_dt;T%l{hnAIrzT{}FuWZyfm9vJZ`Fs5(VlgLn=c7sT+oK2LU#0|CLtJ7ak+l?3SZ zERe+#maT*=TMs*bff@fSbAR#p_@(J(4ufgoI?<*kfUL^rIq$o*`RdJRP^--`;A8O7 zbd-KwpF#mNE$I)3V_&C08B0bvREMZ#_Ix+)`X9c}ND$i!D##}Kmz(gdM-~#mVI&}r z04Ebu*K~ydbYDg)`waY2Y2r704vuewBAzLDt*6#`Vn5NQB7iK(AWCPuJXx_^`8#15 zh%F7iHYWXPBFI1e3GckL2(W-sUaucMfXLuF6VJ|oPc}ctTzTs|i~!`!W-FWkD`6S= z^dZ#SNgg&tB?ElgoSYBka`KY;HgL(_e%{&G*){Kjiz?wJvhR+RFC@9~mM2GS< z;>s$(Z=+NrAtKXE6X54RiN`~u3UH$qyCU)uVTUA9i)!|MQ3SBALm%gOHYZnTs+Y`N z!S~g0+`@7|K78F^W1>gl=@67z9Ri#~PSLd`cJBHx=l>flP;R9#oq|T(zKraLsR)qg z%I(9L0-R{^2d^Ewzs&ciR*{d$;FrS8Tz)Bewz^$#n(DT0IOm&_F%B5xh z)FpuIj0AWav;S_TQpvojR;vu~2z<);$kKgyyqUDaZk7OK+gnNhtv8cC5rEE*z+XoU zd<5WW1GOB>NPPidl=_~({oD9_2jI)iQ+*kcpe*nd9VdX8cMkJ`W9n5?;4L&vN(cFrvO%*sQ0hcBJWTzqk z11StdkPD_eVPsR<|52r=vHB|KOR#)v8I~58*y}^UOPH~e3{Eh@ceo~p8MAg9;AI5P z#h|x403EFRBb+PJJPQNjNRTg(Ab+oeoC{=OTqmN1US3BLf$cXfJ@cVbgQGYb)C0{k$LS)6>z?d zT-e!R&Wdhiizx9oZY1N|s}LaI1il}s2bwrrVFaKyfF!ez|0-0azdZc7vGXu9ZnZi; zsm&X4jgm$2*lov8-!ga39{E$)sR(eaJfCde15N_|L8*HE5=wTv(}HTHc1%QEP67vO z_YwE-QBC|%Q8EHcDj=txtggmgA_1BGtPMhilZvUplQ7^jWx6c*LoUDKOD{2x?TfHP zpe=p013SOP&#y1Op1GO{n_HO&&hfz-*9WV=d7jvxXeScjoY_xwe`Wk(M1rj+TQE1T zL)GL2s2Vk>N;Obqb@Fb=}ZM?d7}dH8NP1X0siTa;8N>#MN(_74u9Jn%np zTJL^Za8qS3cYMGq`C{CE{}=CHGXe0jf*>4vHidly3A08W0$)=xXs#c>BqEq?Gqb?4 zhOmM18j)aOA<@jGn=eiMf!)5986U2|$&=v25AdD|VFV;cFya8%o0}l$I@kyN{yu(> zs3znS-+dSSH{ZR69`tlyS)wr`SDU1el2wV2HuhH9daqJ3fd4 z-!LLVvR*k>vE=aVhzR2Xt`y4?uP%hj5Rdib z-U9BK0slP&|J!dK+GF#J&mUvsqMaU)JZ~FM8_;Mp;Ii#_0!#wipJMkByfOYLaJig| z^5M;i1Zq*uC_rR8jjha$X-uTpf}PAfQW>(UQ4Oz~%|3Pf6W2FR{EXwkXJ#P&`b zw1N&sF&k`INdRp>?}0i7M)$c10oLsXY-08spsSO=xLo1{X;wI4!9~)#D|kyKj9WtEEp@UZ0Kt5k;Mm15L9Dmu=D|?o9+(qfR-L z*>1nfT9U-5F8aRDz>iuod&uS59#|mfs-UMbFm3&AA4Y+IMBxM*4je35DQT8e(2EIS ztbQ-U&{Lzq!P`mCGtqX{HqSZF~>icG5>P#6tYO^K2VhPq$hBqhEcr{_%s4 zk!bo8Tn|eI=g-r0w)TK+u8^P-|>2*)X!_-AukGZRRr$e9G>tHWziP}HFv=%HlI1eU_AoPFmBxxRPPbhiG*!lTBmTJ4=`iIm#xfFxA4xET zVINC@szIbDvdE>~vNh;Kz)>@Avx%oD6#5=(;MW2&d$gxTccL;hmzfoablM$|~G>;|@Id z_yHS7z_Y$AG9aRoMQxPPx}_hAAR`4XK?2;{+T1)7AP$znt;aiXRdyr+NOs8uQJ88& zP12~jiv(E9JP+kQmlt6;7=l{h0EigIoI?0?~_r)MUl>JnL zr!n90<9=rkr4>O?F^EI}a@#|o3R<#YT^6w72-EWa-<|@1-i~~0Gd1=r>(44STgh~RA=YXOr5P19^68@;)Y&OA| zGeCocOs0w8p$6;4gaDqm3*~Yd+GY#yWEC+uo>@%KZK#cPc>Idp)>HJCf$MV}m40P@XBXER0<%aDa3! zw^6o5W0jA)_QAnDZ0|{;xEV_H8p-r%G=hVJ1IXt&kz|xyIjp&n34#Ek$e#&vQi4Xo zC^OIZ5N<(a_lnH(xP&MQ-(M61b{;t&=fNJL3Td1;f$PLIpUM)gCn9Zrxyjn0%M}g3 z2TM#IBq>W^DODj`&s&4xp!dIF7XQk24lsrX;JF^|=^yEGN@=W~1;2jq88`>d^%Ec> zf$MMvQ~jkt_xm;rpgph|NL0_$<6ghdf~8`xFkoFIzKI!_Rgq?#I&z(Z2<%;t9}l}hn? zB7ltqF!#I6hq%7i?eN&x1Lng)pWPuW1I=HrKm1>b3(+2$Dl?Fe^0d)+JbBW%QUXXP zO^E7St;TC)v0P*qq->{_#*xt&<^QOy?qfjj=OFj@G01<|?RNhNpWPJm0oZvLl|yD_ zAj*8-_nAY8Jpn}SJ3J#J(9?I+buQ0VzstO~u*Al_UM~jM?3k=?R1E0sb)byp#XaDA zMQXMZ)^D=S?M6ZfBmtES(`UXT)y zHp(n2&Dfx14)CKL4BC*jmVLlvcxa;%9M~-T$we`TwHPH+kuVDb=x%oq4rO9Nz=jpfM< zOjHwMyUv1l!!)jGvP-MM@RfZl|-3%{?(M22&xB z3YFQp+UzG2r)l{(Y?sOmej;O5o{s`4TiPy|m62fB%%czndP<`V24{ZCr?Pl{|dR-g5 zfp==}^#^#51LiM00V3eZDq&z0wZMQN1)$8R7)chLk^rb6RASt{a!G#=32+}DzmMQo zhzORI07yj0BRGnrfFJnm*$6lw1O^cy0(=q)s2>r42umcOyR+{ILC@hD55F-Yft31I zvIFOUeJ7O;elEYqlVc!u4yTk%0SPy~Kn2s0=Cs zGzt&|h1cxJb4UyVH3$Mu0wEy*sRv?5OaPG-0G}x$CytB?Lu+sc{3st}YVkc*cL;F5 z5|ZHN@**rQzYLth}-kt3rKY z9-g(H{VDptVh@Dr;wa&QMzaO|K9A2;6F@r8;=#a#R?9`;xa?EgdT#Q57~qRAYhc|c z*Dd|+Qc3^k_~>?JrhJ>;*#n!oisxwsjg_N=?# zjo+8_5~wP_`_LYOs45fhL?j^ZJa529zxrt7jXQ7fy?WiLzAYCVzy}{bxUg7FYtnf) zKwwx~tJQcrZ-8almvUJmfgc1v#x8;X-=qJ>nx?;ut!NK95i~Ui1+~D45PcyLAR>WQ z)L0vlKpi82EOO#RBnUh=K3|j)rAgU3`n_mSDOaZYCev(QN~}(6=OzFdk>FXYgCzii zW_H*!!@$6z+G_Y~589xf@gzCt$9*3QxbG>~G3y$wV#i&3<;_GE0&(C%oB$WuA z-CZ!k^%ZR2-`@P`(#@rfXn!K&G!ft2++=aOF1ru{kWo3naHA3!S9SM;!1F(7J#T#g z&*7e4(C?xOF(S~*Zif@m8HlVjMP-V;>+)=mh+u{Fmqq!tkg^s)iEmMBO%`;h?K=AQYh^hJUoIQF7ZsfqgS-S$<+ z>5yG00mw{bz!ig^Hj?5$>6+#}bVdZdsQnIt&r+F4K%f%|(%B!Cfbsh?63A+X0BQSj zXXia^eq~gW?>(sms8X`m&Xb+%ic@SCP5?3rqJ3b4?b$q|a#(L2m%S@XJ_s_v&>ddL zSpxn7k7u19_`px$L};7l|JAka-@%&xHjc?x{hlRSJ&Tc{JX3~}WFRSs7#1wutb^UR zAy>-9`#VUOZS-oj3c8|!rf>e;@m6B){b4Sx&@71b_Q!1LkHcr`q_FN1v=?bI&<& zK*=jpUu2+ocg8ZSB3J&Q)vILk7&)4fOvhr)vK@4)2y`N_Vkc-Dxz} z((~K{p3(JsJ^Kx9{tca82fp^|*Qk3Bed8?Pzesi^1W4PXPai>bt{VF_7%LCG{obD- z38*am1N8p@iSV2B(sylWG#gNF)ENm3gV%Q|0g++$!^1}pH_$%Tk-C)YFzVX?{y~cI} zbWNY?K8mV9153?|Apd07LV(Cj)69&^GnFg9gNhQ41o&(0lK#NsA2NIytEAV(4Oi%H*l}~8;`SVB|zGGT@xNY_yEho0#rlUy$0J3{eHPz zej7<}*RrgCgyT>K0PMaETiaXr&Uye5h7{mMu@{B_k+o43$ghzEkr4^*BLV&u_Wv;| z!5=R!FA@>fG4taBj%8%3O&>mb2+cJU==&dE~eb_H*1)>*^HBj_@%Lm5{Kn2TMek^P;T2%q7y*Wy z0J^3_KA*pmb5&JkErF{jO1ea_F_9p$s02jzqJmHMl~I66Mno9c1FW-lOl5z}VH8dd zLI(#_g&sOnofRv9AY#x2+(QN57I>z9K1L zpxWrV&QyTFR}_W4n+E*ZGVm5UFosj?l002ovPDHLkV1kh5 BXX5|> literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/ItemCerealBarBox.png b/www/img/stationpedia/ItemCerealBarBox.png new file mode 100644 index 0000000000000000000000000000000000000000..cf5c7bcc877cfda7076356249dc64a5a541bd1a6 GIT binary patch literal 16475 zcmV)KK)Sz)P)(^9a3g#`mkYbdTPgZgVpariML)ts5GuI}otuIkLmuB?p8 z%*ePIU->`h-uSMpkL>Q59#J}pllR7r8~5Yq{8s*}zH8oIIQ#^Bv)N3Z1EYUpj&5qeZ0}Xy^`%=tsUG){%o-AhZn<%@js$R^ z+A!d=(1Py4fIC_D@$gk2J7>>DfVH(XXsxxN)oKCr8FahdGv_ngebx7T<%o>-?T-)0fB@Qdb97yszHoFth1O`9xt0w9`iEFDBIk%wCA{G6 zmGi*gd~Fi~tZAB}VJ+6capx~WGZjD*jVy~!=pevY7rh1TKWfzE-yz504G;Q-#YDNS zY3du;ywNatjsI_OL1wSY_uNvjy(*b|IQCb%ukVFZ?L(Rngmhb6f8ydjK)4);<)o;H zQ#9O<6~A*$t*GEKL{O7Oy+^^-bQ<%(SkS?tff5LS@w{qXg=W15^(!VwiUeaU6Z?-W z7+M!o>Qf02XTG5t;Cd7^?YS>?0R^~jHl#adL%vgMXupEb8z;`A>bzZ4<=psC+>>7F zrXhV%FT)qBOMK41LVw)t0ja`$^c~lR`{siD%Tqd#)Ik`4jKn7JHC=--*s$?h4F*Vn z10=$EHj@BZ*&m_ClDWP}4O!ObKIcpY5cV|${d3rI@MoR{fser_GbN%w%HBk*X&QnM zwiBHAc5obA)lB&+txwMys;2I1_w8Xo1Rzqpqv{gn*~7?xX{=hqm?06)Bf$v*6l*?7 zf6{->5>QkC-BiDZWB(QUe`qW?TeH5w5+E+(mZ6~;$vE>x%Gb-{Tr9eQS&_jW2QUap z>pA$R9p{F*DBl15lIN_eNHz!y+cR(Zko^XqQtCM=?yRiklD%fDxO zUV#`(Yn_a9>(O`hh8S~7DG^u@h_l4co`>b%tzq{cM;^!va1?m*`?3Phu>CIHXD673 zJJf=LdzI!_lgiV(4kIDeHGTzS(x?Yj*p#S&iHy8%Z@`W1I6g8RDRCMk&U5r%~u^%ferarUt1B>&WOIK4xqdr5$ zAi|S}et^YPUX|70YtfW{E(-$Q4?IZ9hK6LoQ|!DH1V1Jt@HuAw+2w!};H;Xj$r>j? ztOOvd7d^u_K*%gPNiHyyXsF~T#lSZeA@jO2doihJgN(k=69jNqO!57p1a>V2)n3$Q zes9DCj#}orLJefGp&St|2-9zn2(d!lz-!+KT)4BK!|&nqeN%@WB*Hrwm3tsc$b*j) z(0Pr(=Ol=pPa}bHUd>PXkrKGU^sIfG=x;#;yxn(i$mNr@cnf8|9_?c)i8LlYq7ey#jT&_JQxYhfuiZrXlM#4y zRX$Pkv(H2VHtzH1sT>hO2i4TgYqzi5ri}lON7DY=*e+~8{+W0!dAUP;7PH+n){^I@ z8Rk!knm@p34p4K4p$BUvEV^Y>okdamTN4fXM;=(n8PC)}Js5#*i9HT$D#%O*oq3@5 zY0QSU`Uwkgu^{p#g|72@(>%T+49tZdyg8#RkWRkcA-G3C2?6J|jg z+n5B|a!~rUUw=FIp?nSpna^NtZS5Pawbq?ht99qIH$HnKH=&SWj}QKqxAz|ZNJJ+? z0DE|V`Y95qstaIr%!sNi`urm0JW#A_fmKPL`xxX#UtF?bxgZ-dCjo!Pcdgx2?uY~} zt_;|3M1)vR+0tpCdbkB*Xc@r6fCMUMp(Nf1ZWOl=BNzcsE%=4y#My`h;M(vG3f=#M zb06T`2lS2WOI(d@RI&Pk4i00WVQgG{Ht2bTCm;nO0mfJ%B{N5rp&gY&N?c9?J~vVT ze!i3t1B*fF?YF;{CxCP&{!pn_2>kyA!RNpmWdR^6z)S+@N*dsMkADcEGX#6EFB}P= z>eU2%K0m|1Di+{=VZF}C%02fp0VX2IQSEC)<5U7#STYEBt^(2hTD?d)baB3RL%d*B z+!IM;8BxHryz;Tkd0YfNCO~2Zz%TI3Yb+Ar&#`&nFzNe9fE^^j4idnAUIN65%?SVz z39@Zur7!*FmtY=iRMfAB?#llgKVSdMCU2Xo8@yfHsO9DxnVOmnK;P;DV>ZbBd;Hlx zjMXroV~(GHW`zLidVW9V=Ls_K1;8N_<7*uUTElcrE8^#VSvWMW<-QL~Av6}(dB2B* zEv|pU6zBXP`f2MH-vwNOdVweZKvsiy1BbUe_`HKH;Pa`=YIv9ZU9qC9MDt4dIkK1T zsGE8*UoU2oc6fj!;8E!w?nB%*S2n;6M#;R*s~d3GJ%p9!%851VwWjE-3FWY#?FbS~ z9k6>3E_M*3kuX|a5=0D`nZNKP&-iwAimpRzAV^?%d4e6_-s=rPf{n&?*tqm7$-6^T zt(A%(dUvqPJ+|&}_hM&OBKJkBiR>3=r_wi z2PpwgF#^Bdtm6@a{>2U+gkZvJ zv9P&%ojdqMfb?#MAKgv*oEQYU(@Vw(c#Zp2aE~8@QoWwMb8XyzvWKLw5(Vf~ja)1B z+9~+uG&?!?4Y3vh&(B}o$VvF^jjyK!h{&KS60`^RpflW_9YH@sg6LU}`qT!lAOU}- zR_u2J`&4r8$O;l^<=Z~RT-I^I38rKyOPa*+tj}Lfjv4^63 z_!;moVj03A*rN7lOrB~(RE`Je{|*WCpxcI@1%B`$D!|NIrOWvRO8@kCDs!9$;O0{J zKWJCre~O=3Plo=n3D!UW+4k3R^H+2g?9oQ@{O0Fdylpi_5Nj)W0vft;=Kjw3SnTV0 z+~bmCJ3}yyMa)1v%dy41wp2qv@Jtw$&NBi0+S)p_uzIx*51@k%YFZ+8+my9=0y375 zqh4#}4>an-wT;ig^^MQ-$Iuhf+gK7M4)YZTcDhC&JFxfB2i(Pd3l}_x98SJsAwkl3 zHP>o^E}JBoe}Mk)XiN^YGuKl#*3OZ*Z6b0FVw(XNIz+J z^EVhcf;gL3L=8WDb_gr0E2nO6Xj;-bF6yOL1A9C`@P!h&o&fZ<&DZc;xWAv@F9x4% z4f_Vx!mZ11@aNs9_dt~efIA0w;Q{)!E1%1Ke=vM@;!F?rf1dQ0bV2ssahH=|^Rg%- zM1rbWgFbWSi}wW#fsb1`ES0W}x^D6=2!k`fE&a=Xxj5HmYqIxWpaT4#?vv=ktpX)u z2|N;q>P5<6kA#fcES2Q7)h*D<0=Uf$K>(7x#!4fZqZxwX)dh2Qi8$}T1p>5@U|Flz z^JLrqNR*oE>$iE!ApiY-_aMLiWR!b+cGye$M1a~-gM&YeRN&CbmugMTFBg;wfQ4b< zLV3wBSM&3c03#&8e-4oX1n$}4DSiDn_47iQv(HW8H_R__0&I-`1_AiT)tm~%1c+@n z6K^6x_pn-6v7YpZ1g0W@j!6)xS_(d0*pNgR)F^V=ISN)FKrw)<@Ln&RzeoUGsTbCF zPOaIq);~|;Pt0fe=l(nCWNt3-bE~6@cNuN}jhauS2W) zS>A6C-UoJMfozKRUWl=0t!YV3RpFcp0LsSNIT=(iPY)kpLppgq8C*mEDV->4$<`yk zn*YAOFihJ1XaF7txND`V5Cj4A`YCI+pWH=9MW_lA$WVi3BP9g$@)=^9X8w7ce^zA` zs!P?m?mU-GGyPJby`Zs4dMDjwl z(}5W9walbni`s+2_ek`c%S|jRc5Z&P znu6QB)P!EQmwR8SRA6vCNC(t30jSi-QAQStG|K`%KthUG1W~HVQWTrg8NkQcKTX$( z+c2v6CxBlPO4siG1lq$7po3mCRnjq`FpiH>#V9IX(UgOZckV^A)>y`ko(4Od1V6@a z|55a!lbICBKPSLm)PEASNP_-oF;Rl75fMmW8_NQ;-cbV_I~AIQ1d$OD3=kO+8*}mm z@+RVb4J;*O!{frfnUXO?GU;s8{PyTN9ZzIPSy2lSi=Y|LLjN@DhM#*7OJQ*fc!5#4BY(J##|Q zc74ffE_vHcV9@=l3eBHjfG^<-B3)U`(GYkUN#IgH8iPahkI<1o^}iaXrQrz^$`Gl8 zktyjL%LnL!3;`(tD*p#;Jy$ZEQ6BJqJFU^X?KaewL?HX4z5pqdq1jAJNU_2*BmiUS zn!28!VW@e+xg{x6Qanzetm#Vrdj|RQ>aq@ftDijAFAL>qHQtCnK)Jt*S$`Kg{#`MU zg$(;La?~ZhhC1>2_~x5iVLIV#g;!p0%%=cuDP0hW0Ps2N{5%>!BFHE?K|}y<`{-Ya zTJp*%3;#6;62u8wC>L@|w6{@Kx_u$xL-q93AP?QJpi>FW#F1n3A2*V;Ob(kKJ}%HTovPF$5Jlm z$0NmxTN0RBt;WHx*YoTBWc%Mj$Nj;{#bXjg;0JE{N|K6-E}tGqf@k;WxhS-AcaM|c zMzf$Gl=<4P%{VOC6%Y#WSCA(PvxHgtU?XCPlTC2lcyF0{SuG-Ll z7O8-jXAGrN!0G$L*ItZ(Kf(B;U&eh02!%3;5`qFNB~x-Q5Utnu?{=^0P4?% zu)ZwDHmFtbhOzvwr}Ou}tilG7Wd$GJN2j(bgSGzwbc4SEdwL*Zqom)FOVM*oGcWpH zyn z=A!@pl)bN^H!{!P2La$N2oh|a{N#<6$mGMJ$%!!Nt5B_pJ5bA(g+vW{VrXj8?(zs&)($@@<4!JAWgQEo+awe zIM`$8$@#sr0anJ=neS(O!GYXS%hC?EH?psY2)e2v5zu?0FkPQP2CfXTIuQ7OgT5d2 zx6au60Xl+^kcGbaOw`|vT6*^+BI%VhR4a=%_a3y61X40yZOBPWBrs~?***%u?x$pk zi2xA+OhaTAD@eQ-h_%gyYHpl^za+r#e$?X%5L*m>Z@dfo0y`aiw|dxW@Ym}RNzh+F?R3Sb|g9Z0|Zfx-0o@I zo68K=F%dSF#rwL>QUJH2_3=LKBSEy*Uqx9+F(kdYl3D!o=4&O3+NwtVvS!D zQx@*^fL+GUW$~>0eP~Zo)(2i5F;>O7=U>lZR8B9Ltjlc5gl zfNaS8ogU5KKYkzDr2+2efn)?ASE6K+@}R2{4rHp5=W6-=Ms+N?*U+z{>h8dU9V?JC z9|U~CGYD{N>&?0F*R^E9omTTIN|p|L-FvXvyooK5Kt?irkRI4)SSQmUQJElr_aSg1 zm~sU+S3J17k_V!-99<$SGE^$4@T>}waIZw~eiZqygD5WtQJVojYo>-0?_$PJ1E|Xy zIHB0cor==s2BOtU8Ye?cij9b@gMI*2EEgVv+I=)v2tlq5gx80lY6XA_lAi^CmJ#@0 zy!j0gTO`1|rp*0CYWL&LX7i1t-RtgRdkfnS5+V=@$g)I;$)JM>E(tF}fSI=0{A{Lw3-0cH zAM0hGlYkRJo&6n=fNXGxK|pnA)dS&|3uMTa03raDfFEbZ;>?dq051legn3BQEf+!95A|m|!A^K~lU&q9(wnO*i zI3C7M4u(>SXEEe_)(7}gGwdZ2r~yObGbDkCldPUDvYZ5^^zP@`+TvCMKH1xE{-@Ad z*y7;Frs{YiMZPecFH!;?o%SLKg$hs`-;7AW-}yGy{s%L`=lzlZo(~lQPDHTAs3=Do zY%aU7*HfX1L2MxS2?5A9BHu?JpMMdxB%{m+Jo9MBEclGy0hJ&+iyYmDz>oVTsX&yq zb|@6e!&b#)@rIcBi{^v2A;<58RA|*O%)=g0Ie+ zC&14ek)T;=!v4_?y!+tKXR1J05|NZ-Nf1Gr9UUS8j~yyxZ=k_8Dnz5|!W-qW0H2In z@BBMyF#$5x1P!|2LLdneut))7(Bqb}p5P@C*o7+-38-WahIT>%Rlhj+vHZVz`RmZC z3Z)2ceAT06vHA8sHc!kV)JN7gHs1 zJ-ixmTP}-NQjjvj8yZP}4MA^JZ$WE$lRvjsHlek875e=?^sPQ0Gg@`9$2PbVWICP$ zd^VYj0Ie&nIbqMz7w%cT?pQa>ie542TBWs0jQ%=2dh#>a?c7bqgG}t?Q^-uf*9?uf zEcBr7+MEQ2%ppLTl(}zH5RWTjzq*Hk%*z4IsTnT+j!3|7hv3Ht4ET3@_5P*UJBKu>2 zJAE-mZM*M+=bbH)ajmyJ7iy|@0@NiCnNMaSSq7m1KhE3!oYBmhj7mVaOTdrpKl#eP z;BEWaV{k@60)DIl8T0IsH`fsqHfD1kGtHtb;LNePs|yuSQ9d;-75}qHu+_Sq^oazq z0%U<-tKR}^w2z<VB~B506;Oy^et0$&adxP9fz&|2Dp_VF%n-@5e`{+_@mCD>XM@ruEJq!AFebSHh95e643q-bRC(jqipI%q8Bl+CqgYTB*Ar9tW-f) ztMI{-pQKkIfQ>rbdhIRjy#?=m_?KWg;(k$d1>+%<2Yx6db_x}Dq42Cu|7q@s^tbqmfr8?A>YM_^q zIGPM0o{up+RG~&^@tR41;cy7IZry@YYW$1?=M7~Wd(R&5vCY+MaP75!#7hNPYxTc|&cQw2-|gOm-Dlez_(i?OT@ZsI_+kSGL9D7N z<%k4cL@c#*@(fiZ0UM+Aqk8FqEXn}}u!;m5L@HqWf=H$kl?R++d7^z0Bk;)y{2IoB zgAXzI1K3#K;Lp854{FsKz85iJ^9p#uPH@s0+h=}YXt|rZ?u3oBvN3b6Wm!l7#uXt; zgg}(>6GR{qynXu{u-Dyzzy8IaN1$)z=4>_J$UV2MpC=^XfJER^_7effsu_t7N`eG2 z5j;07X`BFIDiK@(3i)g*Dv}_Te>HU@%AqRK+~=183~yo)O&9S@X|QgVSuYc^%$9XATj8{3kmye9(C>M*=ntIru~Z z%3LBqOac#8z&b+~*YJ!4JgI=?x}Zyf0M(KP2cZp$FZ1jtkBLBKM-T>1(f^BE7JO2I zg_2NY!l=4fRLoJz%<-Qv+U)3o2k3;@x^{3p4~xo3-nYzK4-&aDQv<%g|KU;RoA)4IXk+HbP#+ z7#@Q>#q2#@iXY-Zd^#iUr!ZSKO+$Y=>qUTpi%Afh%TjVBY7hk&3Udj37Xztf?C(G1Ew|+r0sg~n z(MCoj`1PA#!C1X!B|;t5f}Htb?z>u44u}M~^<*8c!@-cZ`+NIv_woPlh4xeE@37m2m1gsW7K%wAX=$A&1qgi+ zSV_qTh%Tt>$o3`kMD`bLfR`uVz<$-J16+F}QG)&6<76I@;PuU4hyL+C>^}JcA0z3H zOF-7@(K&6D{uulLwpq|?x(Y^wbsx!D$8&mR{R9D=&^`0~R^NvDvU%ZHQfv|xIE++a zQK$eLvqS|r5lSxv8&(Y;YZyve%shR53LW781N3Y3DEltfI02|ErNNAe042=yl6cS6 zAV3l{YRS9+A_9ddlh~J48SCFV9CQv~=kYFVHa%EbZVDwpYmEjV4=e~!CWE6sw3;nw z>1(j1tb?`v9_;$NSgA3nQTeIqb<9>NA%TK5vI`8lQ90a}qZecZnDtRnT~NyvjH?da z_CDyU2F;ZwbPu~=R!mUqX(BDw7eV%FaPR34VKD9^c^wat4ChvWgZ(|&xU$IyY{#Ap zf6Q_M|AAi7uO%S*8R;(xCCJ${NMxTf&gxky3Br?Qqe^vr4LAw5AKt~0+kymW?&j;D z?LAE9_P2imdZPsfI^4t{4Kc$j;)1! z`B=nqMg$lTIq+WOHr|n3n;Y`H*~0f+{)f@rXG~`~BQaNpELiPt#4#oofCI;A4(mA9Cx{^Z737{Grcpf{voEOfe zz%z|9pYMm|jY>d51jFQ@Q|41kO290Z{nVa!FNG*@(Ak48{^}P_p~QKnkMZwA=EHB% zlNw8SBt$_(1X&WT>Wddz6v%A2hy(*=02(nnDidl+OVoqNWL6g;kbIEJ5=y%T-`j4( z`r0OJw1mVvx&ivEZmNih3lY=3H znyQ044)9q919`#lCr^-U7#xQaJ_HHye7+3wf(-5iGrug__}-q2-|@>aXsj%rNQ7bv zjsgo-%q;{N%hT9N6>*Ab-RnYYwZ#*lz1N23`bP9ImM?|jNkVW@ksOC<;Oo=pD*;dU zVdL@!F5k$~^BBI=|TDT>?K2M_CN{TDV+p z!GM>Ft?FmtMJ<=_L;|YW^BJZFzqZI?9mB?lCTai~Nk5nW3))#pW>gI5 zANB?KQ3;5_?+^O8y~axbR{`{D&CGs2a$Pr^2R9|DSrZRhtrpB}fam&(099_IWlzLY^Lj>l-F?=qbi8iA30FdO)zk+emKHwDqQ+a$>rc^ zx(ox~fhrPbAYu7rC0N1t9p45P(!E4H!YQ#w+%xb{$+YMuQT#Qf0=kY;?*_m;1piWW zCQO|Aa-Ek33Igj{qgn z=oN8MS)GDr7|Clc+YzADmrD6ek!NU7Op;vYU%=#w3AN&Smp9TrmN;m4kq8*vH*a$i zm{>lV?{&dmGr?||z^WSPNCI-+$8yE|lag*uHLy!A2mfVTt&tKkRs^#8N*w{WczXBp^=c$h+#I$&gdoP46wwC7%}ET ztKNYA@c?!{Iz+sXP`Gr@I)JT9x1sNk3jnc;!Dsb*;sTR7YnqqzcCy2+E9$0%>uKdo zIq>oFik$R|7Gwf-q7*cn_-zUp5r7*3AGhzLyg%4R&1@hM@J>@4BS|GkNyYR7xN$RG zb9e9byB+L-UaA3Got+dCk`dW3^IbzVQt;l zy4zOE^C?5F1oSarMn!(EL!;fV)$-X!B#;ylgdz!&%Q`}O&4}SK0SJ6vGO`PH5yZ=z z$)nuFGVtBM6b~^8FzY!1V*Bu}0DdJ?FK=cDK#CCCKB~+#V)TI^hH=P%J#!Kg1iTF7 zt!s-rHqG>oJ&)eMtd#?SIxleeC zku=USZ;}s!CYO*D(g^~P5ec&LPeyV`nGap`U)%+D?=BygR@VdpV&KUh?}`#Y*-u8Q z_S&WZpNR08+W@QB-@ccAb7dpnk0hKEfV|hupGVQSCq!^hA;5EHKV^OwiB3*^cM@>$ zUt3@2?-}zr_*4Rj0557e0+g_xwQ3u=3Fj4rj5vOX-X6)LmgkEs;`MqOK!Ej3(L{|z zszB)HLFP5ll<{&bsmU=BSUmOhYXEBv&@mt|9E!S+rNmpnZ0RA;+aHM4TS$sp6@mrK zmW_2DFfRLg9pD(rR>wUuvO>EB2m2teNB53_yVT?gq$3Hchj@+~xA?GGO;yewTd>$~ z!@&Lkoxx)V-^t>8dt~vo`-+$!O!a8Dvx&h*s5oN=t<@G+fbK_Kymk{xk_OJ$hI-ZH z<+_e)JH;R2bIe>=EN{W~*T3ik1+7x0q3CS%uMH z1Pj##a6K0^Rm-iBRgbs?kWm>(jA|cw@x;~q`COJtbhuCjd4L+ZjNl(xhz9!Jj(B-B zQ%VqgB0+$erhV@7C+=wOcffqo2K!1&JexK2I`412_GQ>_zt8&zoe$;;{>*qH$jzu+ zQNPv@eFEP=g|sXSsMM0zYxNi2Pbtxfjk_+pMf_?|QEe;vEOYwFc+m`3$Fc)BdBsZIn)0IJKHYVv1>>vs-C zP+iXfQx|j1MUlzcLMF(Vy(h1y7oPGnSm8Y=;@Pg~&|TBv)`!-GA{0z;Z_H-3iKRm} zK`z&UAvk(5f<}gbD|4X>F)&?dE_e&CJC7GATyiro<&}f)QEEC#Yp&VOVThKr5 zW0FYl`sVB6hS3#wpYA}%`2ddCE(}@QVXVK~-=8l@P7uHzuoEQE@Vr5YK0Wt&f{#>W zf4^%TTsPU^cTKJF+oo2(k=?`f1)F0M5b!R7>!I6Lbi2+0mB1p)y!H5_Ne&_A}I{byMJeydh){TJsH;uB2UJU zD1jdVmDFfg5XdMIg|y{e76 zPY2&Y|F_+z;OlC4F2v6yz-c5XX8r}0AU2Yz|IMyT}s) zM5RKG+G&)r9DGy~RV`#(@v)$0)#V1*&Vc)gy+H%DkimwopLsbtW-JK2KVy#T1)yoO zl_Ac2YRR+UZ=?6e58$A)lguaZ@BV2253u`?o|$uY@Pp9JJu4SMtVn`l=Fd`s3m6gM zfjzOlgZ>R90+Ha3Dc5hznjFh)5Kb{G(=3-}kWN+2^dS-=EIFbR+PS%*AAo68#XXS( zDrCMbm?qJ?bbb<4-$g=dC)A&xTbeH@l=-9p1U~i2V(`hb;G=yL!T%p20{?kTx#+|! z38X?6y#)IGGE5~Orqe0+*yK~>j>i@cBuynKOJxXy@Mt=f-*vso zznO&gyIyHH!bx>iEj0kwC6`JRY(H^7RL~)D*PTKcYpg=j5YjhlZcAwz@UuzM$<)-# zCI%<~-}lq|lqxu1OV$S;zeSyJF%}R=z$Of)D1j5(0m&2cKMnlEeXLNv>%#;F;FP;i zl2I*65_h`0?;3pFD~(%FtE|F;ei`aZtEgBNxcBg<@Z}?2sTMJPb>Cen?y@dFWGkdVd6iXYR!n;Iwi;M)(r5g6X`g zooU}?j`Ljx&UMR%>$++hl9W2jA%)4E_N9xn+NU z+lJwhC+_t;3&cubq7sk-5b!bfb16VHrG$&fs9gbOr>uy%CCt!hjU)6OKlJ`&#H@Gx z(u5a5e>%CLqH6H8o2sXtHLlI^nX(EHk7X4>MLAa#B_RQ2C%un}pitt5p*Sz9gsdYaAAKPy}eK`EXEcm6; z*;zN8<|TT6`#1srxd~7#2iY?4F%TeYM@WEoSupqk`a4L1Bcl>tg_2JxCuND?N5xKx zGB*ZUjsjK$KikiezzfoO{9JfOA^^V^p4r2nkEJGdh(y)HGD2RhX&ih$b^!t$bRQ+) zQ)`Xe3HZI+v{c{tbNP@WPP@SHJ7)Y#fQ<8?#^ATWL%E$@` zDdt%!;&uc9ssc>@Vl*24Uw+6w1eq~aXP0$FH5A2101=Fm3t=#UimZc7;9|zox>@k2 zC6y~!?EX{|wO&FpNeCtuao@#^MsTNrhZQ&EXP8P;@InvaR(LH>T*_C~q2+OBV1ZV* zVIn!8p=!vH;s74AVO)lWdKGp$KZZxgKLxim#LV9Yi?yM;TpM+s9Da*3zX*N|@L3+) z{x*TnPC)QN1SpmR$Pj=ZE_{9h(05q^Br+{!zLhv0eLwJj%qHyLjK-rMd((-9ZovMG5fq=wSjrw%>gEVDyJs@FgTP5%V;kW`lMP_%DqBSrSMp5uo%*DL|0` zNr~{n$-C%(5`y>Lq1!v2_zsP4Dw={*GUvg7a`16)T9o8Jo6)2IilUq#K?&~|m%1KbDeq@*gqVimwBxz%UohYP782p#k66F!16!80 zQUhBA7XIW+U$Q|pd?b#`!Izbk0Axf0va+!_BH5?RC-8|+luxmj@N8KRY2VB*w$p0<$4Y?M ze0K_L7=k|upTAg<$p0hKs`#3J& zFf=oFo~*^d#`_!QBG|Ug-Sa$R05HZ9b?}k+s;VX5E2>Zo#q>c%59J95pWL0`eL>6Z z*L~vTYQB_KpqVz!D?YdLWIt;k3jtyyBG@AjtS-ay5P-R)y-EUzOqNw}J$8itF8ZHX zPWK1QvyUvhyNq8n48_bHFRt%oqy|$g8K!BXs%e}AzRQxbAP7K&u%l-WN}~z~zes=} z5Nl=$(Eo^iv-7A}^XDVLJm7!q1juH*hiX7XAgPuW1YDI~B>}SM+d%?+8~q(5!48{t zd@pe7_{P-aNB4+1!|a0s*aby8jPXits*HYz-0JH#GvVtl97++ zB*3&3^17*D-3~FM<8uXGaD+47wI`GR<9K}hz2ix5+@G{nDNtIK@?t^+IzsFfU4!~+ z9VSQu*LQR3M&Of=P$5R{2+S)C2*`|IklVs1%;WG z_+C#YjJ<=k{hi*Z^Bu<>HhQBrjW=R4WY1TvR-s%Lne4i5;ilp~)k^^71?q`%QD4=0 zOWTo_-j=`|f1QMObYqJ=_*h!i!o?0dvll4K6F zBr=*i$uzZIMy`nzG!}%|;x}#}-UWe|TRz0PE+a@TPSa#);?Ql=So|%sQYF7uTi7zQ z^Sej8ylq^n!OEpN=yhwR<-A-I(gfN5=v0u2cYR1e=bWp7^VUJZeL+G^Q+5?x%sqL4viwIUUJPZn({H=@rj!~@VLX1 zF)X4QR3rbC8HY0PkQ}Bq*M}b$_+-Bn1jyR(ka0i2J|{yRz47TGgRIJP&Hp&ThZ%zN zOJ(lZhv5-}$yn%UxuQTxl3+TWf`n~|vL9PK#@iCg_*A@`PQ%=q(=f#Mn8{O;Z!8Ir z)@ZU4{-)s+WJQElDJh_8Dxmy>@A)82B`o_s?j3@xogM!6hZYQ8a?LN=FP#F+G9m%_ z!7i#oRVYHD3Q>)fDHpIWD^&A6h_PV-b`We{pQ*)nFJkI~diI2D&HtFeC;NLrfW-U^ z8SWz)mUY;8z4nP7!DAli3ul+4k6ZS$_Dfv?&NJ8X;qd7QCQei$49o|~&&~1UDp3;6 zbn3rQ38+*JUTRLW{rjIB_<#Qt;1r{PlOH?;sIBRsS0vC)84UB~=Lac(mnkDbn3AFU zbPVhhko~Ov0|5$Vbp!yFnhKgOLwzlh>#1nu2rn(-MhSw#3i<2~L(zITP1ccIdS3on zBskqi)+Y}B-}@49mU%1$Hu5K@3b~uLfRjL7kTKgY z_$?}coGB6A&KUmx#niC?0002MAb;!L87zp7`^K$)K0|D_e%m7GSLGk>JI&*3+0(ORXVmnrwCztC&?; zm6e%M85zI+&b{%Qm03S*Hj6#ohdgy7B5&Nd_k7>^K8?PPQ{&qk4eB@+4PBqSASQu| z>7}ZZQ+c*X z0p>}-@ns`|e%Tv%*|M za2^FvVaUI;FaiNAYBg;rgCO@MA;MRh01W;c8x9G^NTj(yrNbyWL4c(S!1tx}uYdBtS*>=kY6Hp`$vsrOWh!=zIz=7xM&oWpy?GjfoIU zXEZ$a$gxba@WB^N2Ju3__7cQ-JbyksKRWSDf5yt~4@XOXTWdSC-m%FxUmPsP3;WVb z5S_Y7udmL5AD;eB97X6%q9C2eZeZ!p4p6&cpZa?ph}2gsnu2t!I>YG~s|a5i0xmfamV%Jd$`_w)_wSaPnKn!Ij;`ZaXPh#wuiwNR+p~? z0m|S9a~;q9WtxlMW1I}djJJ{RBJY?&f8d4Dd$@ikB3Pz%q4{lFr}nx|BkzkLg8tlB ze93~r=d7FRsNDT=T%;is(95D>iMK67ycdP?NgiQvm%Se)YD|)Z z48xFFR)FDfLc?PZw!+bXw6>fcck z=Qc1Gw~^mR{@YWZ*8DK-l@w6NraO+I|F<^jcU{lF7liS9i+54|-dPG@in;xzdowll z{f#F6Ap0YqU`OPIpRYzgw+g`E-&_Mc08AG}5>?R_TC(W%+pynvG56JYr`ru zO?6*tB?5Tev7iP*Xm5c81DdmiC{f=#uL9^=MDzT~z*p<2)^}<;-qECm`C;(i=YA>NHO`JLosoBE=fOBwwzCrgTenMQcB9m$gMFHe(Br=23U}FumK6SGz%E%D7;3YR0R1`58e3|i13%j)8HDwXEiuj zX*Q|ZYLZ=a8HMmciYTVr=;n8EdzW!3d%i9-+1VTnQlhE#*!(%U@P@8_XF>!ZRU9jO zKsb#?^R0$$-<^6MVLV7QaUj>OnH1u~=OI8<0jlT82*8hJVyXi*I4=plv;<)A-@JM9 zd6@viVN3!AjZm3o8N@<@&z{fkd492$p;rmOBNKoXfWc=l7`QM>Bndc$9%tZ7BIuBO zM2|_(>vZmDx_FHH#|*yQ=LHquJOto4FA0px2J%^A8TjR3@Hviy;IwJFY3SbvV0W#w z65REf0?1LQbr>KY?XF{96jed0TRJQwIj{>mg|LNBhb2-Bpoq-NiT3Le!+HzhL#1sdRWBk)JE$$LU?*eXn!SoUh&s{Q%B!-Zo`?U%-r^*d&Sy$M+TZoK5h_4^=V=f-nH-L}ei#ogV~h{S17L_DZ)h&zrii7(oDC-edfA zbpNk+8YXod^8p^+L;i2bKPbN!B+-RzAWBZ!(OTQ0{>UfSkH35hka<3PY6~)1Pm?1| z&Q^e|Yj})fjmF3R?I@0a3y*q`fB8I9i40n{dFD)rk(-^rCz~GK#b9TEM{$y0GcgQP zm6W@`W<##Xl=loi$CLd7IWh@2Q}97%t5>)5w=7Hl9)9k`aq{ zSP48ZJPf}?1XxEy{pnkfDxs3*GK}U3PzM2U=IyN@1qkhoB1KBS->#YZZ(#iQ{2=}{ zmc?1%fdes$9Lx4kbc2{vk~o@D1b$WWj2{cwh@r^ARuIQirXjUjO+1Ix;`!>;8@OMU z;CtbeLS97IXp6!3NA$_|QyLtN<#}H1w&~^-UGABI0S}!w7}zSCTl`PLlWl zO9N2;UMxY+vLMD{3t%#ovjLKp?ck**05>ytf9Cm|!!dHAk|nuj&Jn;-3b4PgXb$Lk zxUCEA@7R{{TbTM63`2a2ABHG`7b>D;_oiu8_E1&?&eSR7$e)Z;Pp{R~cURYLkmIzA zHPhd>QrZ6$;14IBynY?*zJ{q&aMVk;5vC1m8Pr4mS?u|4r0k2O;{eJ~>#8YS*`4s36O!mjqwnjpMl?P z+7$X>4n7B~3llp?Wg4~vBItLKcY-jw0s=h7vG#{LAcsN$^q&PxSX#pt#Mx%%cuv)Xk@8I^X4>M=K&Pb3E!PFCc&%kvoN#OZqMTp4KixTlCRM!_| z@coG-0E6FdcL9Kz&v)GsJsAvh@HtubGw?Y)Pa$pNHRc?Dj?cxRNRaRQ4ikZd@dj*Q z4DiQLfXN~SV5w&nSd^>)SuhD+Is&XW0d7-jw@l3_3eV}_eyv5)Go^1bBSgv!blWRe zEPxi#?w)nqFpS@^YVqBHo4}ie%qT1hEQx@EvFz6Ikh>mMLDN|viGc2t1`@;(8KzDN zb1f?N%B0dQi>_XKmD;^EEC>|+soV$WE`xtOlCpm|Ql5WnRmr|dAx+#+p3$~gjSTEZ zCsuFXgJl3ns8irW=CN-kn}HtNBmhLkIPBXGFtel@@*zMrHc#D=YPX2jg4FcigD}_(8P*RFPMzo2pob zo{p*Xqua<$wVBm{L)t>oKvGSZeC?Gk)$DZRp<4WLD*Kz~?WhVL zNMJ2p;_WxDo8NEs;_u1zdNF-;A3#n7^^XeF%#z1SB3P=W>sAVasP=?gGH4IV;8?Z< z=CsJb=dlca7xpyuy^80Tqh2Bct4kI()Q8gxU~7_JtzD=S1|Z*-b@dB!FRd5Yc26t*V_8`k$0xHT{+Wm-v$99nX<667{yh; zF#&YV&x_0?n5MtEo_g*_3V5~zj=EvXE@d^4L;w)iZ{CtBFgiM<;ZU_UgU@Lj1^9|Y zUcNW>eYetNnX%AopLWSOgVO?|}plD6xJUm%n%3`dvB!)**?%{QCLl zX8>jKjSjv0`kMLg;!=uhw_E%+JPv5;RVlSKwCVn5#l1JTo?TKPE;QUYzaQ-PXJ0_IxRDod9T1-!6zDd{^X@NS7k4|3 zDqfezRMI<+>Z~X=?N!*z{t;1g#ipM=CYelxc>+XXF0V3zu*qNcgsXD3lb#poF!4!4p^8n0`PmfB!IF9S%aEI?ksxH9|w{I zrkJw>{nXnR7YzOl?%8=pCTF~;$gaS@MRzIEaQFl=C{Q#(owkunV%M>#(Fm!LiU5xx z7{p}w7A&WS@n9loGA%v|i$#|e604O;)LUJntE*CI$em8*cywGamI*KeLhGwdfUOu* zFBG1_h`$5SL_skARvaf1&?t&Q*MtmA;JKVhQtXY1F!Pffd?rl|BZJQ*Xz|Ceo@Iz$ z5XNNb+WUM00hP%U_9aA-mqLIXe0nAV6yPH|&`btjb&Vjqu1VnY4ieQC4@(llL?Eq3 z<7u3eASo#j1C313pIff{7|8T4bfN`~5wH#Aa4;05DU%L)*(GA5A zCIM$iYCe-dNq7N1gX;V0_d3qais8Yh82tRa#s1$4qT~Ps`k?&%D2XJgvV7qL=roC5 zeFcRzRq}Z?O{H$hTh--AQNz8F%6^)++Vq1zah?86oP#)9m?OZNmMy3O0@P|6aZPbN zbiW`YHt?E(PC>z-mo*efpi4~@RQCe9+VMaj{+>bmZVjIe(HSI@_foS>+PL;At#mT4 z;!T?%K$}JrpDdcv1d`94Z{Q43e2lYzW=5QjmRc-L0ZHb)g#bIj*8~_>w-QMRi68hH zhKW=I4ZqC*Is+d-<$Pb&z`p_0~@u$__*4A#24EAswV!fuSL^r( z9Hk{RAs&3q8KfyPVx*nzfaH8u_`JMlTeB9Ucn`|>UQ|-FMe)KEfWg0Y9ROqBv$Wnk ziqZ}eb*9RFoIYFY(A&2*=v_Uajk#I*6}(R>hh-|=wBV0v{p5EzLodBgD;uQmUu~;O zZFF1o@TuD1tyfHHtlT_tmJIxz{(v5B@5yWSe9l^pyIF%0B;=(ag((WAp~F(DmJo#^ z2UndzWu^#RuOxlN2G{~p32B%2OoV!Be;iC4{w0i(d&qa}ntq_60=ih9FH8X#d=BpV za(HLF*KNq*?Kf}HyBP2A&1$J3MO+l19PY6ye!HRP-Jhw8Zj@LT7S(4Z*cn>%=e|QA zftu{PqsqFYRI(WS-MxXl&bmJb5q`|+`;kvy&gf999?^|nRtWDxZwsTdetX^fe{XMix8#Gsp^cWC z|8Ay*560@=M$tMQlj^oQxLxzfcF-xvsf$XcmQqiPHw`>lJh=u&9n0;ETC_86(=Kvz zt4e_Wo(u2yXnS|4P6ypy!}lD!3g>&?p%4o(PD1FO| zDjn{D0NyC3PTQnuD$mj~4Anv0jXZm!J(l_7ZG8V5KKT%lh=o z*SBd11>?v_PzL|TdMAH_0p?I^skIdmiuITXY#|v510ThR1SQ=8$WEja7Hw@exLfXJFT7QNjMzJD6IJW^0E3S8oE<6}c(U~D# zz0#x_UNG=R2EHsPJ|D%2OudAnh3^GnLJi)FP&Hu^gi*0}2(vddowQQPlBDSVmSf`G z;-h!v{OqEh{)G|1G#nJU1;AU_Rb6I8R$7#Dn&~$5(stx;ZzKPfA(A)v(45z< z_2~82dK6h#=!jmS$A>1}XiXSnnIW3dY9^Ez2?;x-PypP-B+)R*gO|F2MiCUE4(Sas zzYerCfZ0~>x(%FN$M-Z|8{{#e5PUzK1pqRTbEP^nL94f8~8^^QGmCmt)i)d0z|x7<|WG!+|U?SW!4ai^fRfgtpD!%lQDG-bLO? z?`7P&{VJ{WULj$%Wa`cawXBe8$uOV8MGw%?PBUFCh78x#H->wdi=ui#0sw?e6Uki| zM(R5{_-I)GMpy47NlflcT|2dizVn7oYb$91kMKQTU9YXGIe<8SHwKVw;X$Yrh9BFe z`prn^7^z(ZkUCD!FX~~Y?e1WYT}N4H27aLO9=82opu|3xd11!Ydr^{zhx?P~PXGp= zQ%|KnBY=?fR7E(0044BqLeScJk8a($iOy6{8GI%|CW#pd%KWmdf&lI)qF|O#=12^_ zB!aD8@MekxwYruA==%{(1NDMCV?T$o0I;=A@r^JMT zYD`e9419O2K(2t$~QkKEz(4H6g zCct-WZVhYh7eBv>q6kHq|2@hsROg3f@Ik6(oo>EKCk5YW zIq-bD@{VPx`@?<}h5mF^re{L|RtGr=+*E2a6{x2LVd6!`Pu&6En%ky*cIBsf@6 z?=K?3d4fS-bj{$yLf#>9hUYJd{>aN^zenc0sy@NeyiEa!ROF4#o>0l3xBRt7%I)%efTkX$74F4_!9Um4u%nJ z?)M}K4vrhtb^>&^27g!kYdG-ZK!LB$Sa>*(9)5#bO9HTjhob1A)mBWVW6-TviMnl) zf0^LL_LM{`^@t>d_M)B=>3zPpHy$>eiw<5;D7XFxDdl< zRsh*~#!2v_xXLN+{HhJ)2jkBFoAACnWiH-$eS_B4*JN_6p^|0Ucj`{AJRFv(#(Jie z_LR0h*`bkVl4!k7I@+~6L&^RtHUfbUlD?mVCmrtAKP{>U+0)0SMsJue_?$PkyR?`{Q)Xz~?dY z)weUH@O}TUM{)eO&kc@ISmFSkzcX}CpH3HyGWd%kLcw(Hq_eORq$J3}_qdge0({O) z(HQ(J%ATKfK7()Bb*h&RJUTk8fWQ5a?b1B;Jdd9i_K=fc8bfJ>Bti|#k5WR+lR)kx z1>ZDv)CIq%+i~6C#9Su9^`=hW{RMUZlYdF{5C0#%LIREqeB|%q_HXN=M5^R;e9CP$ zfaj0Bllv&gg$Tf&KQH^yf(s?y^#&rdJDVBj>RsaUS z91Q-}KVtb^To&4eJ2p z>s{m;gjSbVm?|$UdO0xj}&{G}1^Q2EZpAE=^#JgNj z*UrB#gr2LA=`<_5Yil0)-bXYV^ywoAz_)Leis{9Wf4pbKWQdrKfqvpEuoG6fDXgI> zXf(ne?TDN>ppLEV$d4>)nRPncvvNXkbd6Ev``>&$qK7*XdZ3Gd&v7OJJ}3C=R099{8#k!iE7oEnn6aLNe}V+9qVvln$l~ze zkanIb@OK|60+45)EK&}>o|iKxLP`JzKa0Ugt-&N1jn%Vufg9PDSa{g}(4r)@yo>~v zJsH!y)ZF+NYgQ2kL&?B_F<=15H)gkA(8xC{g!iB8aF@dOV;Y($SgRl}M_~kt;Kp z)@gG>bhF{nK5F}#rH;P;vr1Mt&BB~d?n;?lE(u?&32Qh-JA#TL{>0e)+>Qvsht zf-lE*wd0#bhuf9{->zAewYNUqL5H~#{N0oQA{Lb{7xBrCUvw{@fdCTppm^3vx8eC9 z7l3@cSC@J7sv=0ILYnToX<}Hq1j}CeLl@;{uu;_NqTfH``z^}bvhlH6eOfI;Q39K zeRO`aO?AT}$4NoQn5g&3Hqy%JF?pd!TaQ%Ny9em9kx#)a-KP*$Ks773Dc!<#7?O@} zMCtzY1XlucFH=TH~9{K-gyB5&>PlygDgH!8m+f^cK zIM4l``OgG?P5=qM{>-wUgWp+g7vQI%z~`}@gI*pvR=eH&Is=|VcD;A9r799%0$+|s zNp?$s&tKb(8|l>$1W3VO5)l=9rIdhKe0ZSN*_rlfqu!@mIrXaH!dr3@q_MLfk-ecm zz~yH4?AA@|)M94@%wh;vdAJ>42(WS(pA-Dt^CkEx0kY_JQ_oMq?=B#LooeR(;UNuh zn&Fc}dA~^V%^HdyFP8L0p_|r;&d;Kr62Lnio_NoX&HOqd1xQW;-CX#s-RYW4GPh*+ zm&1k6ICk;g&R!(JM~psx}5CE4%Psn=~&uh&Djac61NN*m>U#Uo(R=}w%YcmrYWLM`oJlv;`A3g+$M&x;FUUbZzZ=w!51(TQ#NqzX? zQS?9k{vQVKVfQ~P@6SC0Fu!C0_qT}#Rs(oZ>^XAsK6%)eg=AZ zEQ5bI*r&nM0{p>~aRq$k=_#;bL~&R;tX9CX$PR)~5yMKAcRF*)Lq`6b#0uWmT5&CW z1^g+If$uchxr5_^u&WKV&yOEP@BaP|16I$?D0~J4C1P*H&MfUgKJpyA+T$6N&b>U;Xa?U%tnS1joM41C?J zenXNVRN&8dKa*gN07v%+!QcJ((Y=gMS)Ml9abUL3L+MT zpGN>co&#Tx;rl|ly(B?87t?h9xujV9Y8@RPiQ*Koh;l&l$lL^vg;li(t4s(0&}gW0 z_1cQ`4?lZIqsd4nS8MF;%IDhymp=U1qfW<8aQooL_k;HyKaJks8^oJgQ{i}2mMlJY zG$&zxP+UK6@FfAxJJB@gu8#uPHTd|7+9i*=z9X+kp#pw5Jj9{9`Fjk$8tZao@Hw+^ z532<)ck&7F8LM>E=M_NAZCG2Z2&aKhi(et9ft^gn~zHRK%mZwNC91bf4 zD1-01(+c>zeC?eyLFwh?YE)!D>wE@X&pW>oOTb@9gm^jldJPJ9eJv+}97DBV27ize zfTIjP;(g@i!yV`L{K4U1 z(emu?|B)mBRA3sqr&d@$WxGs{FA{tXgQllX2x97xMgKM87q1H1ETY79n%A=z&ty==m z7pdp7G9RrcC9q%5feYD$c zIqvN5(&6Euv^rTIF91*;nY^dSdjQw^8+iOvwc3cfIM(4rS}0kD5}b@$2d$wUAs{5oti2TlYp~JkL7*Oc}(~B{tWq}hn3~J8x9@r zxcR*Vz7+Ewt-x2dpcLSA&(FY@1y1~VC8Kn?yz|5vCYS-AMHzgyJ2Tx6gOA}IQu4nr z7+k|Bz?TGw7tehW;By!hoH^sK%+FyGa4->ew~G^GO0eoE5)l0p8jgM?|J`igs;tvl zcgUX<3K@i6eqHhCxj2vPbN9zdPyt_#@p9SK0glsjmX=~`YpVi&(aC3n&lYNy$i{nE zw2v>^^XKC%0<1^{F!==4PRfX&H>)J*UN3%UBJ6GT=!a9O z1~GX#0WurNyMIx|mVh6`?m~~(=dPm?_`0bGkdeTh6iUV5kH!j>Iq-RSk4^z!Dcwm6 zII-{W#ey%--N2@TWNG?wKz|sAvvzW0f{w2vTTbqE1+7`AWPI_#%P;Ji@?DI1vFKW z@J^zMJO!hMF;ALOn9RV}kYX(%1J5wXG=%c}7^7Z;yWyH8oNYzm_s(hu2O+BQk2seF zI~jxIdpmtP+8^LqLX(k;wPL)3mrxj;;{U}I^xt5M6aIRf6eiwnPw>qUwNa|Ynalw` z^V1q4KmP2+f-ecMVycY^ZAlUx#4&w<4L-n`d+^LVl@(GsHc&Hflpee*Xn2^&u?|bF zHGFFK#u#UGt$QHn98EfMv`}pJ?aaFqzpw<$s>y=tqG($Nz35=8vK2p?(ll|=)kUA_ z>HMto8GO^MZr^U&WS~7cMI>l8n^CP+lfUn5_i4D_m)CMc0g@y_=SxYvXNvegz_^>$ zD~y*DAi}nUD8T2;2=Ssjze0c{S)N*2OKf~Iis(lm1DEe#$qtecfK`A=z`&PD;20~C z031B7)(crxBw&Co5JAaq&9Ef!K`@i|?rcm`KeYv+x<4lafCv+xB9LSnPUI+CIU|t9 zTTQC6U#k|N0q`j$fjkZf&~CTo^=LGrC!akjz-Qpl{TcYkcPNP;m+Q4m0Z=#9Xd#1lSOm6Bck8vVSoJNYXA(3m0h= z#0mW&e)}h2?<wvH|v4HI~HObtDt$&p7+T@bKD!9y|{DlKzB-@Z8m z@G*_Yb*w(2&ju560|3jNZq+H8d1OH9eY_l_jS^%8Daz6m0Wc4XY*U?-OzQ6*(37n`J>4CU=gs6xY%3wFRqSoU`~Mma z_hTgX6ID}ViQx|#Aiz)(VC*UI*$%@JU;f2oqW#h3fqyOq$Rnu?OpYDo4}rm_xV?=v zdb|$v-}hC*O3A_tD^P+X5Q0Z;kXl`>!Q)1^u!P~LLldvMK?4N~QD`Osr-lwsQaRGm z)8LwYn{J5!={@1(i}NGuYXqe!oxsy`t-*m~BS>{=n3d{|w*# z`~2-iSq3;GKo&t%Sinb*i2B3J1^-+MAQe?h3zt+S3^4&oK0s4Gz;zFKCn;G1lOR4; zZ)7B>8EQgCf;zgZyK+RgZa$XdvFp&`xRI|>*DN_Q2_$|gpdzhgnE*Q4j0tf4wKe+o zcW=pO)3JMk0N1~99pA6f4Bb6DE;c+mbm{5#lcnGz-_a@ld#4q25dntBN&zzOe_6nn zHLIhbmVR*s$m^-*Y=Q(olJ^FE2ZNdY-U5CMJO`6N3yXp?377zR!9ai;otUn)j^#ZQ zffc~i6$w}YqGTq)&yqEVJDeE2R&Rj}<3x_^5Kd=GYp)G39+U4mw13bl zKA5g&z}z`uH1htJfAyE>);C|Ho$Vdk+1;Vt-Cb%no3ws&ot%~+QBiv-`@jB z`vaL0{0OoiDa$dE_#VFU+qgVX+NGUdQ7yot?=_C7t>f<$g#Hq?tFhb|+5E-t75 z`N1oXSq*-V$C^dIgt5&JnFQ-yEeD^+PEXIl=dra?SOgQ{JKq@6YHuv>nFt{?Dg!?Z zS+9Hme-i}w4n4g8DeVoEe>3l@O~-LaB%NrIqGK^Tx_DqHD4d0K!^s`E4O5x;9D z@qdhQvxM;J6)h3KL)$-mI;7o$%Z7P*=;a$GK^;#l{h1Y@5+K0`0R4}U-)`7+gP%<$ z_yq~bhXqX3s!V_+T9d$MVT5(M+MDF}!{bg0yi$QMoXYO+_Bu2i9HHn_34E)mRKxWY z_-ohJBmw%{;{yDHKJ7o*%fXlD(;^UGs>JUi|2ie{R+64u^}_iG@aV~qhGUP0)0a&1 z=i&r(6L^({lgbjs>5SCk{CJKObW#DLQn3>C`(q6MXy(%_PUy{jkL;|5xSp8ZWvYq4z>l~)2Y@_AK-DdG0R^a z95@sjAsvkX?2%H9-VOHr2K9IL<^B3Mpaxxsc0TFL3~`u#zpoPZ5MxsuL8!n=;@JaT z=nfG6~L7fF%UT;uAc$#}^>MTRdLt zXgT;i#xsrVmX?zs4AjE2X{3nY8MNAS^97%dYI0-}aO}Yb`nv;inhkmHblW-j98b1( za`5H0;{tq)JC-i~eO$hOF7T03CDRzqMzlNLy=+V`6#8jDG70#Ax^@Nu&Q^f(g99!w z@&F{b?NHKdw+a$irXX*UJnYl%)14fAj?gc_Hx2t87|%brPz6&0F!-=R3!1$F@WD{cg0Dph9>(UJ`Nbb}OfR1(yLyfv1LU^3WbnKXdqk!tRM!`6ssTq>K zrcqcAW!}EFNxjAqU9}Cey*3R)8*3ZnjslrBK?y=ZJKIlbr@uo-2O}x_TB5)Y;M4dj z6Z0=){0AC5Jb_;=OCiLG`W(s5|MG!MMNk1Zq99OTsI^Qv8nI37?lfPpZQ0bH6dSUQx*Q*T@<4V!gC7I{ zJyzZ?!H=VN@xu=&iKNV(MgTwZDU8BAHO-{q@g45yrRbf_e--lYn!jrKT|nYE7Mltw$c>){JQ6 zHE9RHPuz)2?)(gVCIY^Hk2LYyB=iF$)pVWoQ_|GUNo3{h}|NP=n8> z0ObdpD-F6AdkHj~-T?SE6G0pY2|_<6KP5n|W#k0N;+Y948bYR%r@Z{{#H=zlTBM8cA|n^Wz?Rj%L12^+cz53PRX|l29Y>Frsh@z;us} zM-ysX!ES^{_0|sckH+LQpOU*-qyPJ(k1>Bj0~g@qJF!2>6yP2b;0u7yA6FUE=^4fz zGNirn9>D+dc77JmOaR8si;Md*38M75SVn+F8(|_DM0KPW(g%3-0ND!zy5j(J*GtHO zKX~{tIF89`=oll4!h{+fgN}zGMw99>RAI%F=^oki!;e(Q!(vo~@*ZnPzlq&#D$P1A z=XV^EJ9B9`9bO7x&pY(byFdW2-B1xABY^}yIfVe)=>*^a&H#sgZ{{Uj>DwT|6(&L5 zNxuscaL%TRZA^lU0Ok1S|B~pRZIvE`F2GOT!PN)nJ7JXo?(B&AuU#+p1O?c7Tp_?dg_FO6 zUA=#H=Vw`zXzCr()5+5>9F!Ls&y4^aOn@=4sOc&>#9YemKZgRC06$jqVojq5lUedl z-AR1hw9G#fhC0;}of1!w5y1PW3Dq#yg6uTy35CZhCwosx47RC%IHLY={D8tCz&9=c zegZ-tk*-Z?c)U-0?%`$Q_1r^z5sUUcl}jUere*I>BKof%?FR1*C((n$akOyK;7L>& zOYt7^{bxPX;Mn~lN_FXBd{GOtB`^sbLuDnnv!9Iw1LS+dNqi6EyU4rs!+<*1Od383 z4)TVFTDv8d=KOI z>o)x-0RL)6f@Y(bG}wvVkDi$SBdP9}(QRC;lRr9ie{Q>EU)K7ktK6+~esvI0Aw7DO>`?LM{y*Q#z%HK)E`S!bWMD*cj^m7e9#|tAs7HkQu z2+o}OoJRo`5C90t%L9<$eIDB#h44Rp9I@h#rk0T)C;@CO(K8ck>iEs~ zu}-ph4ujwSihpHw~J$6rC&FNe774J?XX0P-P#**OO=X6Xd} zX;QHuzKWhdANpl);Iv>OjArV(omxVzB;f+!$0_JKp4Z{^R9B)lJdVf<(fZoF<|{e) zD$9O3UOEeykL|HajvH+Ntt&szf)yaM0agI(9BY0Jei1LV0+fSE;CZ+J*jH+)cg5-e zdfMcy08`wwYJ#>712QlvjJe~BWX~Ub4SpWtvNv#%cnIMB;0eajv%UYd=bwx(6#=qf z68ypT#oqZ^_7}&O#scPJ=p$!DZOFe5zc@G$00000 d0P=q=0~;J4hBw2`1up;q002ovPDHLkV1l=u3zq-@ literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/ItemChocolateCake.png b/www/img/stationpedia/ItemChocolateCake.png new file mode 100644 index 0000000000000000000000000000000000000000..b63004244bab74a227867bafa8920ffd13554a63 GIT binary patch literal 9806 zcmV-UCb8LxP)tBF{4P7gY(1LbX2w7TzEDqC%3tV?43&9ED;Sb;d7Y>LU zaO28K3#`P+?v~JEb`jcLv(jqOcnz)^&ls3txADxhd-~gzm6;LAd+{UVMP%f!s_N>p zU9S|C`OS=sc=0};_xZ4!xQUy%iJQ2Io4ARaxQUy%iJSOoisDr#aNVQg_Nsb&)%~l^ z=yK!Q5r8MZ_0k-70#O8zq_EdUoudK-U|jQ1+I3pD*8SIZ=K8d5SlwxM@3qSOuAA0g zyH{PoZBf4J1eSuQ0K-6haWpKv6Tk|kE`R?y675RP-ne^c?mvFEH`lwjfiye8_O&tt z8N6@wt1jbYTzdl0&c2Rude*RmTQd6&iEvn2Ioh8oJFXcSt~~*MQsVHIFvG`nA;gsv zAoX}7-F@hE@k-0FKG6BwPMf^VZ%DjtTgJN`{Mx~_W&$jtgI^Lk?h%vhCMrN*(WfrIMLuPld` zPJjXUn^+7a!J%aAKBxnd;3|ml(g=XS3j)4!oqrSaf#CZq65t7pr!SERmrelmc;n-} z8>#6RVv10p;FHTcAi%Z^JUfR}pl(+KKIj{A3a zW*`xsJiA;);5R=1;}b}NFMaMFyXS1;GUCDnNWK0hUVdCA3HU{TH{j!s-d@e%ZoDjF z6fW!1-6x@Ye=Kh97l%#;dDp`4qTpuWJq{l&{wq0C&hlEcZeB4}SPwVXOVC#Vd&z~<5^21#fKhWyf-M#m! z50#6b1rmJkkDjs*pV#O5elr1HG3e+rC6MoRri~JQ7RHyray|ps&q%>Ovn#9Dccu92 z!v`flxVw{djec%}IyIKA{t;gGXX;(JybE9dFSvdPdwj3%jNE^RSx0zQH!Z6Usy*DR zt1QYzNU#b{PUT+P(}{@{hIy{ciYP`pPdTrh3qbi#!{v)G{+hX#>{HOC2)OC;yE}1M zalWgBFk}{$U}C1{l}_?V=Bh+6s${+?fQ=Vg<8*Zj_xrk4Z`ZA6oL5ia_q+S1MZ$dR zpk)7dCo6{JFj4NCw1~)fN?C4q!gYH=dxl00M+HMK_XwG=brEhX|$_2f`iKXU$37vTwruV@H6K z3n>6bH%@5_3C=};xfNCr;PWtk9_IZ5Tz^59{L6>8#1X!LE8Fej0YaZs?yAAi!g#+uwlN{4V@{vPl67SK|o_ zT}y&umF&~dME-LtB){8080>76^k0VSUpzdhb}-nX)IhQd4jNEV_3jFc*m;EGfZgxsl|jp+ko*5CDPyIuHPXHxhq$2flt= z#`|fzT1tYUl#T$xBisd|n&)Lq0Hv!Wp*FH0k#zkM2}bpC1(KB*3hw0^2{2Lv783~b z6=gQ+C1 z>(^PY|291OQ+EvL72CPPV1004U83&mV?alg?1|iCl)=vhA*<41ekAXls0H1}e?ywl zeAf{>aeUFFs9al8@T5`vHwR@&eHoCP)(H2oh9H0YD|Fhe8rCAi%w9Cm(j5`e-0QNmL*=lKS3HNFX+K zKT!Y#AA#qh_&fL*!QV;2e&)4XY$Q=hQE352{7Y=0@T75)@a;XqkUk+ttk*U^LB zI1sr1-T~@bR-Ebez)geId+1au&Q{(8O>>=oRbWFbd9%-{8Q{tYTncH7m5W4qQ^h zA^W0*n+}eJ?>bnkU={E0mnHwjTB-jIlRltm!x!;i5syQV{JVe`S`QX`GXWsaH{tRx zU>xl#4zg6js8F8lgo1Q14;}2o|MXIb1n{iKuBF|t9k9a5bhJ(%Uq^~lWIA`|tX}51 zOGdix<$#D$jj4JNQW+)k9Sz`F1yG3s*aWq<^NQpg)I#jAxmXL~tcCA8*yBKoFO;1B zg}Ui}i+Lr0=#Vr>u!(V6D^|A(zu&9?4`BQ<5a6G9@ZUI;Ap2zipAx_Uaf@5IHAU&I zuTdZL1fU@Mw^Y)3qRmu#X_$3*4%m4Dc#Eh&W(;7k5O%5n0?a6B0Ka!Vs4ck*N2Ic} z(ykof9HguP^%L+Bl7Kb{wGdANS=z&R68Iu@mS|sqE`Hc)HQ0d~bwnISfn6X8%GK~Q z_H`I<`5!y4v)Nt3t#TWB5KzmJ1T?e`;3Ei%ycRRt(093cxHs6baq{jV-2GsB#^Gfqzsiu@NrnH&_gc5@qwOG zfI^DGTL9D>$Rpga``gRM`{xhqwtdX?IzW9a&Ni~$vxf+N?!CycQV?JC1xGUI72T9J zM3je~{?3zdC=3Y?ewyD@v@jpXzHNtR*tIw)*$2xZwiAKxy<WIv9rsUb;L}@W-_b zdwJ!w)BY4=+Ot1KCYA}7U8)6OX-?jsUXq%uAy<(>q}btjc& z$&)H)$WSFodGJ%h;n@Y4s>-M?1>e_&)~ZPWoU$hc3PcqkJ|DbumD*JjF?y5r;xXG0 zYY6ZrjE7S%Qw2bvqC?<4sk!F1aJev#MVRl`q3iiV8H+IYI!{0-(!p&pNaO%OpQu41 z7+BEAYZoenOEzu%%ztmLA|VZt|FrYdbNb)P+Yrv{!ubpl!ue34AJ%pKAA#^{K5KeB zJwE}Q>#u;X9#ti06>RvL6s#JnY*hS6%6Kpu1PxQ;MP>mX9Z`wGTC$&wS5d|!P}+K= z=xs4}?(7HBe#JpHr3@=HUEJA}AQ*Ky&WFaSad|>mNU((>dey+KY!lc$D^iOVL4_eB z)!}0jVtqIPo~S_&)scp#aqdW#N{FwhihT-x{=Z?*zMaLlT%gKlgjE0oK9xZ%q@3vv z<@|ohZ*_)%oO~mQb*PMocz-u?43(@Cb;0kOCXfKn(2V^v$a4A~JDjd52>5RQ0KSO8 z&($OK^{B&>@bjkLQ!MP+*ca+E_UGaDH`&T4XL=Fi=U_ZoyI5)kBd^vY{J@{{B%oF@ zcYO4BPXfG-_zrDXRUBkm#f)-*V>eO2>y#X@bW1>{)`29z=Q3^Kc>9RZp(YMoZTC~o znnb~8$xzK(((7&8ewsc|3k^7{0I=n+z~#O<2o}rHg?7L1y!dcdrU%wLKQlvy?n#U3 z6+x5lynP5a{DC|<8f{6y5=E$6d);B~En!$cecrZ%d0=(sYKm>wr64O2*1|^zXp$3w z;3Cj^VowkLSS?hf68;|7lJf-ELHyOGX?}fp!sk7{WC=qEl-T)S!Gd8SDhGZG;6p=& zwyfN}J0yCxUqpE6?gI&of9KSpu=6PY%@#UNP9zN?(*vdrq~n7L6(%5YRS^g*D|#QR)6*dk<_Z^lR4zl zr|}TRQTni&SkJRP?QBMrKoP7)hu{t)rv_9dQi~7^zBOVrnJ>r>1YS&-pvY{ZoIOy< zZxYK8X~U)6U(EadRQUS(W=hxh^*SiU1K=n&?}>S^VDfVWnDl-rraf)^JSKr>Y>vrm zKvtQ$rE~q9;kgQmrC8{AV_&2|L)XuM-y{h%4oGj06jVWYIe?j@k|%YFN01_Z5?zfXYLH==(tcv>}2j6xg5`4x|&s z;kjB52g^(Id;zQYL9gPDpV0J4g0L7^b6eyj$nU2|kG-rb@(#UUK{0#-ddn29VYsW; zKz>Jzm}82yePfDtwl7Hp&Hgec#us1tv8xBz$oSYH;9KHl-j)B>zqU z2)K?Q#F>f|^hJrzgd{KN=c>C{iw=HGK`y2xbSZ?BPC@eZzz@%i0*F{>bV36a>IU8a z{+1ldh4;S)<7$y zfZSh#E>mk_+W;4YAm*O<`Ox+BAbR3?L>$2y)nwlR0X~p3_@pss0T>^^Qm1gelg^_m zFh>Gw4R%pO1o#fY58Wu3YlMLa6x^Hwq&AY)sUaVUWHMToSb^bChjcDEmyzWa1oOTg zJcUgHyaYZY3ZP9>MKw5mUN`^ETK2kFvVcEO2?6RFI(jFNX+Q#C9C|!Wwol}e2B-l_ zruJE5VT3Yswevo87N#5j6R{;s*+$qSe%GdxA%&LIr%ELp_KFI~TKta zx-pXbDw21*eUT_yyuW~bkeq18X0{`P!>y5$eIVs}l`7RdSw4dCHjJ-EMRnb~MQVIk zO%Yo;6gg>;29=;3clq=hfq2@3xL|T^n-l=PugXxs^o;3m0mMx`*>^okHJXNrLi#KN z_;caj+cofPR`Q!}R&jnLrTk;IA<6|g#O{9^fJ+FVp-7<+#@odfD&H(QT;5}262jg#C*Zc0*x@BD_<}CZa!g#VJ-z5vcct7?e50-{n zYt}%^NH5dqdeHh|+%&cb?a+XnELyb$8!n!U$1#u^1U zapOVmW!u>WysUapPwij;ZnDys6KbR^_S&e#o0HtKKt1>&B*7qW~Bux$bJA*#5ZK{nT5Hp99dk4+S&@p4lV|&S*~Z z0D<9Kk3AhJ3A}<0O6L6AUj=s_F0F@i8O|U<1!Ui|!#i(~iig|NPoA0U{`vEv+v~G^ z-2EHkumT0x*jsB905SO9P?Tf?1DHd;p=a( zUY)|6(Bbm%jc9&d*XFwa_=ooQ^SuFn$ae(%OyF7iN##4KTYXY3uM));3qTSa%}r{c z`Uew~(ivhRj*9r3NSI-W0MC@YEV9QCrpUafgb{Ixsw)1CDzIWi{^pwB7o->a*i}ufbXLHtQ&x zw59WL0-bgOWI5Wj`a}@SnJUx(JdyzmB61++0>8^z22}txB8@0%m-kHGItagD?g1eH zzNa02NbYGob3m&?vij8eI9^-t^PT`*{wQPc{fngQ`)v0!kbi7a#`|qplybdAq5?b= zJ}Hu*;?^E8kWdo4)+I7Xv`?ByvN)+(h?rwEVk24DV{_c%~a$hsIv@nFeCReF4-~2(oY| zw?J!O%)$Y$l8!Ipnx(GjE7!KIv1!$*)qtAgsf;vF1S&ubK9P4dZnRY~@^EDp!Cwa} zaGq1-U{IQo^4VJiVB@KFa7`9~5|R56eUFj@KH=s=DNz&AwT zYGeb-fnbQ$#sH1#r4kQK)aB{fe)e2dRhcVvr2Slnj?~7VGl;6x>nFN+Lh1H3kg~S> zRqG)zQO?R|9LO*v!BOs|SAh!FYv4wnM-E5~U900_Xs`@k*rbgbxaX}?fl8(-Ad}+8 z0H+v>FwD(QBt*nVg(@U_@+ZRF2m+%anwtJK{!b>feVH(eeb3YgwPElgK7F#1;j> z_&q4(*OrAa4hnwi{ryw{i$pb&LuZMwutq+xVB>iM33{(Kd^NDcHxp8?QqNDrpKSpf z1RKC-b)%2hB{q(7HK8S*Djo1t0aPE8AYTBHJ?w}C=M7{Xrpd?M?_(rb z{kBfYdVB)D#%_(yi5`js%rz-rt0*KA)zCsk>10)f=G;v;!M+ChZ`%^) zx8cOwh`QARK7#Q!6!oif;8PVi*g`PE^u_mm-Ud>OiNh6p)Oksypm;@E~aNaGpDgbu>+c3V0#EHJ0S;xyBDuMP=20)G0FwYmfzF42ET|e*f z1DI>Ndad`H+|{OnP6h#7O%ShcHIt?I&llNdD_>ENzT;J6PCZZsS^!=VHBgBkj-nrY zZ8__S%oR}(G4l9K=y}QB6#XTDkNGTskKJFlg92P=yK?IX0Q&n_*ntErC$%<^1a-&R zt`uhe0bC7*c+!+q_KPtoqWcw;MG_2FQ1}~{aNh?>$25BD_kKQ5Had@@mLkYfJ;`?} zC(nI8ah^mS&2Q)V==BJGquXRn;Z(~IjZoicmA9j)@LoNoA#NM#*)`Z z7Y_1q-JGk0o&c+(b~1IkL9X!d*#fM{SmeN2F;@`_G5}0??3*i7g+*eH>WC4cN#1pehALM_)6+|HOO^kF1CPw?w}Un!&`wS zzx&L*45>W$^vtPR`e?g`zWNP#_hd`z4cQ;DDcRP7^~OZL0plNx3e~+D}A1`XX)b6FrJUIff?6<<@G0G=Pz_6bp z>jPbx=&Ja9$${09CwK9@cJe(N8fOT|y=_>hI`)l<@e_K!sYuD!bYkd!j8dFm1KxoS zdk3yR7Y^@8Fk=lB9>OVrEX5$3!Xd6KAA} zQv#>YM-7)*TTRr`)e3=s%+47#v0jX_IllsYABG`-AdFo)A6h_FS|rc{4rK673=W=8 zizLb*v?$`0aScNP+7Q|%kRt(IGZ%w>h?oRTQb0i!LXQE@kzlCBMD5jt)wuXq z&^YgeBhD*;NDz3xuH*NpfJHI8#$0>^4$}4<-4C?n5tS~G8x^J`3_h*Vd`DFZVyn8YGGZ&}=k6=86ai6bL z6VF@UPzo4s6`_xQE7yVaL*J1+$4)-p2$cmpXlih>kXI9)S=_(NeK!@V3+jZ?>9_;C zxplN{7y$nffd4D->)T5$nNx%*@G&lf02l)afB^T`ePYj7f@BC+00g}UkEg#actJ)T zKbWtnx0a#cWG)Wj>}3vg`aJh6eK$8}^o{!r05o<%0c=qT967Tj&=!2SdkgIDB>jF3 z0p`HJOacrf05HA+*FUlLquwE^i30fUw?&Q#fEHtj;I3Xl{QI;%1p%Wd!fEC@Iqmcd zkHN_i^xm9RdqTOrM+8vpL-_yC;ro9E*AolwHUga1jQ#QRW_JEEzR8Sb(PIx_d=th| z?xo1=SUDO>xN_&&_P5A>@7EBROgW!SMfO{=+w+7X4JT%bGuS>kpUp{(TT!!PK=LgZ zk3j(j1Rb8*IYMHuV=#>ftMW&yNCES{HdY5|7#zEcZSh#>o3VP~ya+j%(0 z&!>vQR~$(BHHz^w8hv6vW+d|vMm&cljIaeQNMSwrj6KF@-g<(H@C$i<8ZUzY7@h=2 zsS->T+>?NVOnZq$B7h+b1vAAUB=F!z1yA;H4iny!Z_TR&FiIxuTAZWYx_I@2t}*1Y zqBy)L1Na`#u;;&qh5kNVza2c(;GS*M0Rl7(Wl=@4@(6a}&|uD@RM2p=ZT|hei@Qk&qlK zq_rFEu7w3A8+srU^Md~>2teaaW{H4=`21P|V4;0+XF6-q;|5ZQt)7_F zAt6ANTMYg&j7N=Pk3iWTqXGc|7!ZJY0?a7@29h8pz(v4+)dcW?mhg9(wTREtZq1P( zE%aam6Cvin-$H;1o1vYb0snNjCL0+4Z>00E4({a z@(A%+W|iP;Fn-ZJJ3^p538cI7B3OW2kpJ9snLaP$pCXn11xetHWl=mDvYy1yV?~jK2)(a0J&+ z!8lFMcgQA)jy~*(V(wuc;M&8pJ>2h^VsC>5{66^h4`94^Te2U()*OKs3)XO+KvM9T zh4(Y#oWez)6e~37ow(N({pDz#+q4W6_g=Xdt^MgOZs&k(e6=GD+OZNOUeq0n_ zDW1EL>-BeEb#iM16~K@ni6_q*wr})H+4Cob06!6tg1pziyz@ zxON24ef*mj<2k}vY@^`5SMHfJSAEe86s!qrb>tqG)v!+|nDG0Q`E}YCuk84MOG>{Mm=;Bpp5@HVt9ZE6Wn`;Yzx7Q!=G_E}XFpvZ|u)Y;^8q}Iq z;_CJvK!z&n+a literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/ItemChocolateCerealBar.png b/www/img/stationpedia/ItemChocolateCerealBar.png new file mode 100644 index 0000000000000000000000000000000000000000..2a1a7422dfee7892093b93ef6efef340b3bb2cfd GIT binary patch literal 11339 zcmV-REVR>!P)cHY7L!UZk}0U`wxB1D-YDB7}Cwp{Nz-Kc3sZFl8#lTLQF9XFGiHu=#>XKGJ> zG_$`tX_6-COlLY1DU;brwwr9zq{&ROX}a5$?0B`CwQ9xQjk%U-QzAjpqC^1#Nf818 z;_`l>=e+j=_g(@Z_+fpS59jdxxbJ=6i}!iXb0V;ZU40Sxa~Sbw-*0htGwUaI?^n_k})0MGM` zd_tpXLjFLK^$UwtNI2_n+*4s5WBRVTtKTa;=nH$CFp^ea6tnzrzbyblN(c&oP_C)W z0bID`he1LpEv~Ts;e9fTOj3nQA60hko4E&lX^#tt{L`bE0QsHZCx5FLPRVfU$<(fW z_nrWD0i$U7KQ*2K8MB?kY&J9v8ft@;0}ugp!}Nl(pTYwcVUuj$X%m73G2Dk@bxi{; z!m}_r3H>_8ULg_u#7K&rw^Qs1V22oW>U}p1rCJ$J*&lWQiI-T*BhkGghvncihj#7+ zyP%;@E;6#%)4GL<8W@uU_(fn^rq@@Zz2_u};N|CrV6s&8<{Fv>vv=z~@3AL6fpr{RnyNrdnkQz zB%A(@EQ-IOp#!+F+YpgqS+HA*)A?+`34{lIxeq&bTJs5?!OU}k9Otolb$GurM&n#E z@oIHlD`1?Xu_WwnPV!u>BwJppvU$3*_QF!>I~Pz2uwTLh8aJd`q@kF;7pNCbN&pbf$`zZc*u z44U2qUANy6B`zNWXzY_jsO#3RWfbvCnx+BI+j~>1HBFF29+HAI#&PghIQ<4jnY|ye z7A0O=;9$Oc4pZj4OUMC4t~DlS*b_hqyO8;>WRhN%Q$`Dl!~@2NyTCMC zq9QUhM=*()bPStg?z42CjA8fd>uk+;R_ewtRoC@GuOH*rhwB7>QS1r8haHknWS`9> z6B{g^1W?y(k}2z50Z^-1_8JM#b%j8VuwjoVoBKzmA$a@Ud0VV){xX=ufgy|#7_#Gz%G}IIJK7gp)Kechwt$bT!3v8 zf<&9RARns(BM}~!n1!NX6^!9aK z1Kr|46oKspcs6bAj+r1H^yNQjY{>jJr2D~0Z{f_TvCLP7_bXXV!}CJBJE zgFq(0g%SHfv)N=p0&vHEA)p987ZvywWONbR{nd5tE(w5yhhr8f5+s@f%L;x2 zjYX&UM;-x(_cch$l0Bzt=T$?vNYfpE&wab?hYX!+evbmM$=@Fv13?Zv-yi_= zY;fx|+H^YsxF8{zk=8evrpW}*s^=VT6{`70Xpd%#Yjla3Vom+$*nO|lnZn0?(GMd! zkx%etczXy~^PfcW)3L07ns=<95AmDIKMNzL&anR6r3+BGH5GWynJvO(RF7u*H^6T( ze1gD74b2fKXV3GIpkOuKp3kKf)>c+m0vtC!=?>71{2p-TR6g~!0Qu+uZp{x1Aam?R z82ZdUpRy6`{Udf=Dw=iM;{OwSqF=?OPH2*KB&L4Se6ku^YKmA5Amz7b^90 zb**Wx8%=OS55*^<1Q7YMlPYy1c;Vb8ZVYqbdoar)Td$a#nUiwXatsSPQmoI{*=uhed&vkK9Ywa zKXwA@rH?>eDSPMn-Gnk9I1zY}%JNEnZf({i*-LY}!iSNt!9CH2pHy`RW~rRU>C zUtb^OhH}uT*P*iLUb4B#TLA%_IXbxiYXb?%SMy_DmxPc_Dy{MU3_SbKe!(Gs4yG?( z1VF1N@(0F_u{9(BKjyys4JiHaqBr&nz@88T>m`S8C2G%eP0M>WSzLK_s#N`YRkfwSEBHLQ;W_V<`YP^IebwsB87DY~heE zkM**c$fxXIxmyMmvwr#J2#kN$E(7ijU;Fl7z;a;<)LOBp58$0l_xqJ1D@cB8Twm9~ zEdWG5HifO;6%UUYQUfU%%8jBo3U*iq)G8G)bl2LOp*LvW@&(oWcqg9(N0sTn4iR+EK>zh|+I*?+Hg zPUPUO(d6-0a6QLkB>>9&{R4v_3N4Ey0T5aa5Eg*tADpqtZ`pnX3Fjhioa)b>o8lYq%}l*<&LBx8`eDb8EGV7e=kYvcIzf zcmi;2-_Cp&l>Odiajokj^2eY5EDS$&0_L%{zyHqn+5Eo#G$T5D^tdeq6aW(f3WCsB zx(Q1kUT*E#wD+XFNnDXg@cZIY)FYpLeX~^*NC3y<7Zvlr<(7=uE{}ivY$E$ z&;G-I0*8-`!;R_pko-Sk^F;pe*a%dXDsbcKdoX|PJs2K;77jo4EW{4xVc`dF!Td@E zR$?5aC7uOAk;CNMV_6a*os5C1HZbk6=9_lrn^vo2mG3paSE)z-w`NE^-UqtuZc0M$mAqlJ`j4~# zi2U4eXYw_*4)qGwU902eoEbTg>Y4m@ATg+T&hVIR{g=*v1K#`Yw*zZj;=>>ju#H$kmd zx_`XyJeiNcs=-0SY34cp~3k-VD6nY_jppOu6=-YU{>3mequ>4U4B0Zibg;kgD+l)X9ggrE@OYtA_ahOG zk$Br0;m5!5MR@UZUx5ADL!j3xaQ(^;;QHj>!E*UFWDXw(1CLhr9RN9& z0JCYJKw9T-uvN4 zi@&;1sr{K@8DQa`*)%&w*v)FH3U}8uxVF?_<3~yWeSLkfe_#+q%xgyPLP)=wYEvKY#rfO|_txVKzl^ZpvkG=;?bOO1(VilPXKgu>>`bpz6}?D{OxhJcpv{7!b6$o7FX#D6M&8;X#wyD~NnT1?#%sWaUlXQ&I5_ zUKt!3dLUc95m1l-CV%iYT>SH|!N{=*jFX^gXs_2M zHtx^0|2{wYwOSoga_5{ZRvUj9U3~59m>6eqcONO0p;atV2Mk=)c=0FCKr9x63xD!e_ALLY=UJqG{Kr9w3ov)(GAknlmt=_#3ew~yaA(r#6l*oL zjzrk0tn2vHX#EJ)00YUtP^_x|8T(r&9~r)NPlb1GRXRO>c+r;(lD}09W(UuVj~^lO zpL6FjPqs2Rb2twx^HZ?=(X=;5o5iZ5A%t zl@qV#JAFU-meJYAiG0lbe~;bS?c4z)|7NA*^M_UdM1F2~XXIxOW`7&WKiclOD}+ow z4@+~`V0q3K0SUkb>o>t8|I+K<^vHL!-z9(A5rCh3yQG*K<~{N?tt^qzZnKb#=ZW0!4bmPxE;>3`PpmC4gBO6-hVeh zz8^OE8*9Fz#95!n*ED?t0n4i8l3$vx=>N5}s=nrbuE2{NZkdUy#AhVmAzD{_Xh+%x{wYgvf&?+>dsdFK!}H-7Tu%)cmm{zm?0iYQ8Ai z87Dd$Nm6h_?d}q+eee$J$DjEO#0IjgU%k5w)sSU!ZHKTXS9FWn{$`o) z;-L{hC)@8;0IuyH8$S}L`6K|*w~1c>+F}vbu1>H%kuPO(z=tlpdS}7wlMvK;)gzzn z9}xrVnE*PF-$2`6*VckRASi%Rqt^HZB>#dp6Z#$*zrT+AcnAq#a%rt+@(B-x0J_!u zUIgH;`RTq`;5WtNeO`Yv@(E!9q~bA{pDVEb{6_^SPF)UupHBdOCvYKS`ADOS5cw+B z{0Qj51wjG)917rnp#bc&6Edjlt@UzL0#$8nC;=`mW6htds9U=G2QC1r`Pp2s=68c0 zHkVyq26?L5X$0scPIC&CS)3YCn8;{cbY zZ^8WC)h*vYzvVY}5tR8uhk}{UbKT#ud>1f;nSbKMv%k`bd;-UDE%FiCt@h;CC*KCW zya3W*OAIupm2ZJjyT=3|^zDQGCx#$*^f)B@Gd2M$<-qreoZus0LGo+8lK(2kT_Tu^ za9%KmBEAR-z_7MY{sR?2C)@8;07U)}+WyGM=re)$u?YKXJ_*1jUtKDJapObKi?hJ@ z?T6U-XK+KqCVz1OcqQoxz?~zco;$^|pCAgh<&ywN2oW*P#*KT+o&a3(wRNod>y2K? zw^bP;7{d1vdj7qu+b92l37}ie??nJE`8lllVl-IuWuGTg&F7?+C0m98*5WO&YAYJqZrr)65w#xuHfs6Qa zp9d+M2lf3oLA^B%a_%U`ILL>Ffp_$HKRuXxW@J#=`B zz+mQgLP!7&XTM97`Ae%i=HtFPK)aeB*(Brr3DmCU(*+UvqQIkja4h`LigTbACO|LE z**~~1&Fo(~m?iX12#U_BS;=(TUK8C1b3c6D zTh~SaL_THyJ3U=oNC4N%Rm}c{UE}4x2%uZdC+DUs>=c%@g_`dZ0+GLVbpourH__ft zgE(lPuiu_-{djT!%Wld3NeI#XLmv4AQ4%_m&*o78F8KsAjZd~uT#^-#@EVa*>OAOCXpAo_Bs=2PbTNq0fE&n&-I zg!nV3KuTxry%*4N5;gV12f&BBZP4a7+#su(jV%G(*q2`B^wHX}h zp?k|7NWXmS_^~f%ve~2ltar)ZQ1b=Z>vBhqgNQ{&zcr0fuw!YSJ&Qm0dDhAYa=^>2 zcX+%3zwP4*j`ia|t5x%5=N&O>lds{2Ye;%K;zj)QmH9Gt&&&6g|J9Z*&{Vzd)TaAd1Lt!9UM3qiI(`$6 z$4Su^`EqP)Xz5ylxn|vE?_EXDQE%IHs!E~8CFGaK$Hu>$J(%lI^Of)wfmXf+YahI0ugQ&q^7M-x&r6Pc z3REQxYG2l#Kr$uf08KXJkaW9;eat?p`2-6mm6!q|Z-U%slW%I;2J%(4RkI5-h3`#G zP5*b*k_zq|Kh!-jbR#J2!u#(+={{vYVMhXBHUG(-Wd6{Z@v%IS-*e3;=;Z}_&4Hn= zVCKU43+HAFvlqZnw{{T%xsgr&$&C=`FiQ2w&br}eFyZVg~0my#3d#G8P|4#B*y~h`1?dY#U|vFow($m+wOflDDnwg zc7WZf`T17O7dEN+&KH_%%b;F;3wtVv`4a%RuU0G|@kJ2jJ`fX_=a_vm*7pjLzl7xH zhC$AcBa!3*PR(~}yu@Q`V$J7Ur1PQ-DNIO3kwKDp(6lP(>t?|A{WTv^xcJxK{*BqI zQ{U+I{^=EpU|@a zc5eHFX#3d>HJ{MQ_6gcT0i>b47usCT5x}hdZtjFfetqIi&?}1``C&*>3=B)Nvp)nS zCZkixA@W0L)qI${UN}EDH+!xx*%w%%bDId+aS$SZ^2#JUX!In2-6B6Xl-+X8H&^f2 z&yjrAX7k<}5&_kDBHkWj=07>!mV6g}@~KaBxa2GGSg+)tz4)EiSj}IpZY}w#1Q7WY z4+Az8!0y!i@!o4bqXhroxB~j(0@m>n;8W?=m*NFVBga{2)9-?HuMFy~Y5P%b6l4;J z5NmD6*=O-cwuyh>69Ao*!u`Z3lAlb2)@VRIRP(_I)O?t_I`#F*EAM_)Rn@|FZg^!? zg}M28SYCPr1n{70etq(7M!tAp2*lx|!0+pCyG}a#JV3F8q0u4f%vfrw5+xha}Rg1Gu(7mOmD#`J&8) zY+v@CnXAi~`I8>`%JCOj#s?5`7&$CqfA-TEqW#6~$Y-{n43e*he~{w z%r`c<5a0JrPEJC(`0$Y5(E;v9%@2df*Gtnu^1Fc9|8fc7$)g}2%6DDck$kH8y=DIS z=|X{O{s!BZ!vYOKbp*u7UwpX8C$tp+WyMOR($fZ#*bIz^p2&V4ZU5K2nvdYH4igDB z5l&4;A+T!eT#!2ZE|NbFV*d~m00_>-hBIuj1ZruH1woD_0$I=dYJNNNW!#tJMc|P9 z2Avxszs>l=4?dXu6YF2Gtt$D02pBcC7+1~I+QfL1KP z+K*ndg;25`LClVVcree%=i~ObhOvQsDqnaUBR?L4##+NW&ws8T^Yb_U2a^9s?l>Ng zcm3V66m-n_>FGy?d_o{!>-9P`Bi${(9Y*u{GmZedf`s6Tpss361blR(<49R2>q~`} z0FZnMgO_6)))Vnz@?E6*Qy%&1nu_kznf$`+-2a@PZ;{WwB}8x-LI1F=|4{-H0NFp0 zPY@+>i#y0&vp)<`um$FdK*r-biGV^Y7wqvtTNGh*BA&88l}sb~vPV9l8~Lxje(|?d zL%rdjuT&~se~-Te%*}oT<;6!(0N^WQrq%rgJ@h;~kp65!QGS-{D?=pwM(_o<{_+v~ zFdcKqY?>g+wykqgkkI6?O+3%p^Jb{-x2yStR1z~kX4icBO`PL(mLB}NN=>cJU7vgX z;&(3o3J$M>p?3ZKM#KnCI2%t-PQvmdMm|AMV#|N84{S82M(i^EWx<|1x&3Z}$!!Rq_ekPG0Ws?>|8T z*lZmU&u?&sAY2jXy4JS7`w4gZ{y9cI1j$!bH9)=<5<;sy~>@(DtwKNFZ}Z1Mun zdzyJ-{OI^Ecgz0GNDr3_5`hIg)ax}QRANrBA=4wB$yXF5Kz?BFjpYB`#E;(jDul>S z4WxR$ytgjD^+=OX5I_R)|999LtNZt8 zde9T4XoQhJd1Z1}2zb!gssJ*6^1~n@n9hB=B5+}ozcr8uRHJ3(t_WP>34Zd`H5E9C z??`^JSiJJ~h@#k9fOjo&BIsCm0k>*68A~Fd5CxM7!NljR1u?Kc9|@7wY$M1BtKFdLD)1tY zwhYkU-w)~j0d}5d+O|)1-%>+0-}#>9rRA?qO-_A1F2zGXFgP?r;*rG&Ym2vwfC74u zTzxDMHmiY1s!RT>Bl)~{L7oVFMMOttXkOP_b=dC)nqdMj1O)(FDGhk^^71kx--XuD zyuM|$t@%)xDV!}73g=zN+6r6&P5j;CM?PUw2N)S0dFk}$&%El61KE#|q7rE98i-MQ zo`cqYt`PhpFqsJWUH>5+$gd*#fB4#k*Un+TKogZprRzS;W-~CZtX5d|Kdulq$q4el zynmwIdJ=&PK5XGl(<=wIVYHs_R0vDUOTcp-_oz-?o%%~Z`CA2*9U{L}EWzW7$kDN* zEK^MvtpuALh`inpN zh5WIn$L%s9$Y5%AT_z!z_@}Px-hsMf)vgFg0QT4sLAWA?#)E@dNT*UAe-H@($v=qi=;89qn zZi0-0B9IW=%r{M22wbG)5KIJ=tC4oc5;yV&@=3IzvNS{450352UBuE3B$!VM`2;2a z*Z$-2I7o3j^GO6G26BLIc>1ZM)D%9Px^^B#Fy_wl4kvo1I+7CMqEM;UK#D|p8YrR9S+F@%fPh2NdIcI^)g!_Y8*Vk;<@%W&=L6pGS%(7fC?2(CTHu;x>i>IOQ2j7}h+ z6R79}9qur-(OSPhcfIg8CkI{_4L@+}y=(h^m|)LYcrFF5ZoMb8`biW(7ZCa9F!Rr~ zJEI%il0@WBelU4|Zv7zwOG(wK`P7nguc>QTJjoG)g!tjwu^%Xaua7=;^h`3DJlO6X zR|sU;RCXAeEy8R8P-_K5K-u3;0L9zITa}gNZ(z+o@7n%$1n@~EpCD9L*C5pwX9IEr ztBJK=5E=P)yYVH;{*}rK>z9J{^2Wl#!uPQKITS(1L#bX9NC>LX+w#$g<4Zh!BHfsmR7G&@-rY zVFeu`l6fL~8r$C-9zJ}8CS*A}aO~-0-U9!-E{HIy;{?@E1J6VbAb(_px-*6AbA|bZ z;gqs4YdL5MkF8r zK!V5t2qX~7U`bYx01ZP2-R5Cr{^mRk9~wSVU9FPWk3Id=(|Ky2J#n0#=Z_zMcFaAS z1VCX~RzLuB-bgMBNc?$>v$Jz^g+5s>tX3+}=X`@-0OS_nR1dOt<^+-859YZ~cFhk% za69GF0*U|~Al1k0-R}T?(7Y=Ug6jaTmFp(Ura9-a+g_NuI>kCuS10nvpE*HdcojwP zQl}52b5f}^b!Qy%FKqT>mnsU)DbR)eP1^nys|*!MUQX~ojw607-CYW845XgBGW10|8%@QfV5 zbp~<)vVKWcF#9#f0r<8DshSRrbq(e}a;pMdzA-oVXW1vRN3h@TP97c^p=RdI?_NBI zYtIo`L?pFDZa0tvFx&Uf@q0DD8@NsnNCfp-b;CT7Pu5RCeI8waKtgc)?I24VpCQ3- z6>k@3+;R3`mKu+I_JN%JiEi5sreS*a@5Uba-O)9r>a|t8c>&$m@JfK8sjMW>90mEd zuC8H*nrOjf_3@QKuNYr z16JHX=37RvzBV}#QmM4h0kpvLsrTRgqv71p=Tph_NMYvMpCS2Q({vLg(blFUNj?7< zasVFR^V>ev{5^Dr(Cb3Vavjz{tyMr-twLrf$L6W-OR|Ek#`^6{g~(5%aBL{y#~&f_ z{}BUb3)A22OZ9_}BC4x;V38=;B_N@676dtfi#^-#4Z?O_s;{m>dEpilft&rjU=tH| z0D`L7WEPhyCx8s&&s5B76ka>Z`1u+?NC;))ELgfo19-MC>ugaUjQ2P^}dql}fR*8gyO+ zMd4)r++NM!5`>*@u!jh z*4NkS5BlyN3q&OGa`a+v_#<=MEOn`Ca>((_}vD7 zKMv7U6_!dRh{`h5YU^xHk_5Ey3h+V`()-eEPS`%uz0nf)6U8Dm znoWA<(FJk;?&S?J=5_hqvDq0aO%%yUtyRPPvSo?uX2+K68Y)$arnv4qJ`EgKTyJbO z$TIP@s)>8Y_r*9jRU*f8$n{*ROjI&^eQSAzHluYvE}`DbA1_Z9X>PuffS)gzS3v7Z8@Vt%Glex+j3nMT|GecXSqc^l-KJ3k$H z5MX9XlH%h)g1brp2HwyO>H=s^+x4k$^XQ75Snz7YHiZ1M0>qJ4fW9Z6O%{t3hInUL zl@kwEzkvK3Cm%fWg^jBX+Njk}H@Ds^R&+XVy8)3Wr9BV7ACNnCZ$_m40sa(4NvJ4<1Nw(#Xg^{mW0Y+mV z1$gC!&z$~M1|HWBUAeYJCJ7|Z&K|AO=8gJtd7`-dVfNkWb~1ZP_x!?anSxsTBdr8? zoB$cWN1?d$<7oG7+SqJ}YbF4PVHjd$1?cvA;ySGW98W*8@X9lfES!Dj(S@@__7Xp1 z@Hx=^Vw{_);vN0-X50QI#`DNqBEm#*BDogI1O-UP87og0R%;(w65LS&7^;!=dyE>X z;vFkM3j~;(tx%)cp=Prylz_XfQZ8rKi4?$k{M6htKlkKgzb=8NrTBde{%C*%OO*-t zf5PQ*qupI@cDnx%*ME-OKzau`11mr}x+4me2LWcLB*{ODBv9_u!b#_cJ{9v8I^U+5 z=`uCiL(gOdI5l4t;EQkIx0_qpA_8nC>BFZ_%)auK7oPb#u1_M3)=rB!y91Y8+ZHKe zl+sz4n=AFkk1&3)vby;@JT{vBW_rTx(IPe5-CgR%kqJ0>pmLl5grN718Z0Ya3$pBS2UI*6I!6``r0#0eqcxSrIRP`Gu#y{>X{BSNMiO zkH_{-oBU{!VOb)B8M>8t>(1WrrcHRjASIkZrqA0fU+y(QOa?wO@Yee}Mdd5d;w^{A`tNn<&^BD)!{mB)Q6nh~f9F z$x?Eg-(?9|iSDN?iHXo|H?CpdKScgM9=*YKV3|gu0vv{6kn6f*Ymm3{RNLvw{0NZX zwh*A4>N*3(YWHk9cC<|EH=1Mt0PcKNfSKts)!SJBO1W$YFU(ec<>eQj`|9GU`7iUm z4R7yuyGinTR$l&|RVb3}OCaKB`ABgLQ?9E)0aV>c*4F~rvA*k201zEiz!}Irxft{4 z;M#VhR%6jp|XF^_!OpUW6|Z>$CLors0ADxT9h#ILz6kLD+rRSfzjSW8R5}y?#`5Jg3Oq-EUj*=# zN(G&r^>84X5F*bbKx81zTppv50Y3}?JOE^G_^f54+Tu87N}Hf-@jI%-75I(@ghL@SOJ&-tN;vttN^8=l_`|cr9K}Lj zkl@)fON(Fp+%vDf{Ngj`@VH9B5PS~1*Ad`za>NbDU>g9P6(GLn$XOEjals@2qvW=I zDb+z3Cg6_}K+Fq* zgV6;WwJiyd=Tp7c7vpBLB?`cu-|F_o=sGr)U3vJ%P7CTF3-92$q0uX6j#vJZ=O0`6 zQoQ~~qY2;dliP30--ALJNGAf!Do6zgb;;elsiG^Lrs+&EFM}t`hpCxq$bH?fBsj1IFu0Ye3CNsF_Fy2g2?E$c61_w+ zx$7O=v;6b*MBaoHx*|EeAY26a{}I6dd(WPEWQip?2EV@Dq;{txuFK`J@N?+4xQ~gT zqw{0%^B6D1$gM#%&8Zj z`^>8V{#?9H8vHuszXIU7^V1Q7pU0Tf%>;aoH24RO7<`QVo+K`JzuoUb~)Pz_2Bt2UTvLdgk z+5KxC?`7xu9V>fh?x?jPZi zumZ=wSy%g+yRv0a)4qR{U|#|V&wp@k&-blvm)_r~QL&JxBEV+_D1$7k8}-b*&wT1( z`2FHHpFOiEWHbi9*=zv(t^lEc?idB1!^#&kBZJPFju>=*)bIm8<8r?5kP`v!+ID8@ z&sMG=S0(tVh=J#1A{8x@&+sZp@D1_X+TjYWg|IN)C)*p{?7azPuNSfG$C8^IAoa!i zjT#Oj=XN6kj5Nf|3!i@Y*T44bue^%u2z*-r&(Ul)$xs0(fFB3GiP5mM1pIuVNUEM~ zag$^rWAHNy00Q`~pMW0(F1mjRemutDzjt{R6XgQj{g#1iZMZKc0285WJ4p8&@>_>5 zx!jNK-5(?v%ipx;ci@pWy2gsUwgaymxGo*7R48Yd)aZ0+e)cH2t|z{GV0wynI(<4Z zSDpFt=b!!u|KXQD_g~|)YP|O5<_$42_#Bp%-xGXJ3+lqb;BzQyma`g#na)pMbN7cn zg~1SfQTSdKe2(wG{Syg3M<^H2!F0>e$P0&z3d2w+f~kwLEg~=ZL9ndglY?ds4As?$ zWcL99b}0aRetDueeBfn0tO{FL-)^SfXQi}KF0($r{8xYZrT_eyM;BfpT>{9mFC-tf z;etShfzAhkOjUxfS`qM=ZdsA+V^mOVo~y-Lt40~`cb~)gPM@?uA=~cDf&+AWMEc+Q z$whkWy$@)!F3)5{i$m(g=tRd4!rkjPJN6$mI`*%opBZXap?2*_9ZIB&+P3X`O9DN8 zGuHE!Apt5=MQSu{Dn(t{>h)>8wnMCy?QyNny$I}+$=*)J9>A?cY2h6ifwbV<{Vb;Q;R^u&Z^htqr2T#r zd=s{!>O=73h{4bEIBHT1f)b6R!Jh9q;?j4AfXCpEl3?w6T@WAxh(6X8MT{ZA#7wF9 zYOU41gzNL-OxoVxi+!co%Va2;8a2m|^KOM8K-%+f7Og%M0P|xNh!kMqsYe$6!BdYe zd||F!PW=9@pRSPNW)GJJKaLoD4eO#GZoY|8@MDrjJ|BZ0V2o?K3w(6{ItVb@{pJ_~ zXpvF+<48xeRLmLYYVF=Ku9t7Nbu}DS2#pG8ik^FbbKil`El^<6GN|8`o!|x zUnq-)y%umuU0 zQfvVGKp7=~pCQ61KUD0|vdpu7=>E;F?fw@&slCjEQFRZpo~5fUnRujNhh6vXTY>)c zqmLcx15L>=_?4G`{^`F9@IMk2_r* zq7VZwuK~I`1m6Yud{WAwZ+m z$~;JW{J5wT6QExG%U}51t8;VZrTD?SAFL5W&A@Y%rzS!8-I8jg{Qjok2cwdidX|z? z20w7n?V$vIzgW3iO9&9x+}OjqwGk}$f~aVjG*hOpZ8UARfeUmCQ8ezp3h2#tmH>9B z?fb!cO%(T)GYcnP#h3w~BMpA0km!Dn7<}%2Nr1h<=dR_hq)}OB;6qs`---O*8Fqaf zeC_$(@II3N(e7vYH}^mGfdVA>;)E4^!}0vTo;>vT|HjmYfETfe4Opn{efYf`G<1LD z$BdioSeB5M9nV>Ab{b2x(Wh3c3n?dRwJ~ZY{M$gWth z+xb2$Kuc9W0yYSu!l-Jd)6+fZK>kg1e19N8w=pWwYbpI|0(u;8|8#{ejuOB$6LVKb z)I}R1U;57HIZC{5In0)=udda*@8I%VqQIJa69}x#T^YAc+W`sgjuPk$z@b7);_`b} zH|b}q8}!)xi~v3h(y{8Bh~|bN4g&94ej}raYmB&h~>4^-?Gd<(fPyD5$Dx5CS>sfh#>fO2-|5Fdn(= z`4|U-tjq_n4F*1pIysD#gu&;$a=o6}ucaGeFT(?dnfEGo$Uv(KUxmBtG3Hs$(5fK7 zlH&#c1V^O(Gt8uiee2PFykPg*x19hvfWn18XwtA&+tsOwvquWKYA!eI>@ZXW_;D&o z20re7O_#00;0qFr5I~JOj=>iMh$Y`+A_QbR5_k@meLt#^9TUNmlIvp}1^<1d7i2xJ zII2njT4b~*Lm3{JNia$T(Gbe+!j=l=(!lk%v4^)bg#sjvPuQWNBx&NIo+9L(CV@UT zVcqJt%XzoEytUm}vh?A@i6bR3vWMHYO_LB9^ca*5er@I{F=+W0k-?6NAN- zynf~f`+b`0)$Kq2?8=Zmpu!In}Aucen#_pl`1 zAIW#Zy29+d#1arkriy>J*6d!w<@xxTN!k5TOzuO|s_O0S`pwQ>aha*7x zfJI9ley!FJ!vZm(@*q^VmnFtt!E%2w1%4b1 zz7hGpHl}+I8mw@>mtxRJpfQdXE#n+Wxs2Q8gRE(4qt_NS?K?*T{dO(1UTcbcFZ=Hlt5^lZM5ygN{KAJk5v=njV0U06bhHJY8SxaVSPZ*o zQy(&HiwrXR8x2EOX~GymJRGU`K9&INDGWnWQ>?MWEHGM-?O;on9e-@P@Z0O#y~{3{ zKTW?^)vO|@BMK2j3Ta{AwtM?k;Lr+S>_M2-MptBV4>kDTzxy_wIaNa*qcaQh;(237 z0$iCYMa0NTx@Be8W#D7*S2iH&w{S=Xo zin3n>k*HXPoOioPplgRz0AtLv)$Q({^DkUpPp)GUaKuE&=Y}0)rO;o!-at0#XIC~4 zwLewOb~rbynU?*yqNd`kz4 zJ1QRYqZ+5C&MQdZ3Ig~M0n9Ym%E45@DZ;yp(eJnR-``Bh{4Z-QXBC(K=2p&EG)-#S zx1xjNL${Q}ec-3&b9dSBTqlqgAZj|YUXUsplVEMDPA@!qicTJ_(B_Rg%}rF2_e_TM zW|Jz?K?0{MyGz?40eF67zM_m4 zEKi!@lU0Uymr}Sf%p1PWp^_PHX5>J<|-v|ePO*e_FI;A0jws0PYS$i|5{cJg8d1Q z4!0P9VEAMTK<-2&*cq906E*0u%dKHw?bME73273Piq<(0V7cA1zXjSKs{RcA?F^kh z#CkqRxB>8QMgRuh0%)A^aT5}hkBE`M-)Od|)|P9{OiE3SflsEW(CUJC&LJ_SldoM{OA3`P(jKhk2RXC~LB9Q}2>-(>~(R&qS=;9Xrs zjk=Egp#c0)3b57cQ?0eP{BzBXn^;V(-G=Y49s0Ku5F_A8jmBW)y_#kM?Q*;zB8Ewt zAOT<`tw19E9$vJfiKXazT)n$DSE%s{spX57@oKHvdkwe33QXm2Ym_a6n)a<*fxgx0 zAMT4(2iDs*7`XS3`yo0c@>pXZ8D|p2VPieZG?IJQb;&f0y}MT(PmEmz80!C?`(P5- zsRJ?zT;^sedce|-a+#gfM+IMWzX(ADpVV!s0zO9C*}Ie=02M8BX{JoCc5U|?hgAR$ zD`b21$@Xr|3iS6jn}_=%YZ=!L^J#1Y2aW!~p}epHNdnU}5AB0!=}uo+zYL6(Fd!MR8U&eLHn85+(Oddmc8 zc0QDcd>i=^a%ry#exM2~(4r#nwVB2ss)YvWbHo{J@)e(4ykNj>9|jCX&~VLKRn$jY zex&mQIjS+xVKguLeND+0-_H%N1K*{&zC|7UraLJMI$`0y=}74Z|1>=i!1f~o@b757 zyif}&BK!TJu?F&Y)kxL@u?IhPBkawmyqXu6^V9U(YunAsHrYQ-@6S;7_fQ4rH8G_K zukE^rC&8_m*D$U}>XI7Ult@$+wK8COn2=m_iS~AIiPv4CCa$^>(_B{fAkbQ1&N4L=ZD7svCrNl>i)X zAX)65-;V$S{F@L!jJlD4=R>wNQ{FT99;`se$E+qMkPxaeq5ujCDu9njK&ky`Ml_k< zaRLl3m&#o#!1o0KGzY3>1{CD*-oqZCI!u7T3nc;K*pUPq7#tXz}^@ zw?YAW3Z!sYj8Y;0V#jfR0?WI2SOUc0-wOh8ER$4$>Rtp0qC+!N(*$5bWSTm$ia-GA zLXHLaPyrruXh{Y>wiH#DogIg+4hbYW9?~dOApX%9{OB81F%s~3WE)6Fn1kd4crCIX zRgDT9sep^U>m}L!i2_*BdtBzX4ROYpjc=2MDHcwZDb0_U4~SV3P4r0KoG#vB@xuo6sjJIycvQus+l!#6boM zxkbzgb@EEsQvs^vU=}(X5=0KpV+Drnc4oq4NL~;z0i)^~WYsAlfNTIh4+$mX(Ti*> zPW<#qLsu_1yZtw~X;e&LhuSm4kyNFfx&FbF;C2y!<4t4*b^YwPmwZ0nl8Hj=0LTNN z1|z;p;j$0dHUb}@>*##ggU;WZCJH6Bm_bkGYNjNQK2!uvkCb5FgaQOUh`>ZMumaQ| zDoq$D9>&p9N$KM5&6VkEVH8%TYBngT$EALg5s{@0&Lb( zB4^N#T1G~`SQMaV>KB2prPfbhkB09_@HCja?>W(aaZQdG&6a%cOi63d3j6nr+C}ph z$G=Nk-_y@NFEUW1V7~b$-={Z!_=EWMQmJU2YxV5&eeZAp1isvF5kxo$32vtXa5SI* zT&Z79KMW%Uh%H!Gr3x5B%}+J{s3bu8A?t|>@b~EcSOu5>qVv(coR}iII^F&IMcn=I zb>K-BvI>ZTvh|?zV*&(bAi6(vr3$F^X#G6Cn-0iL)!eM%v9r7D8Th~Uo9Afm*gQRW zVu2oP72?+(^uyX5!|1?_ABTXsbZUC zrPk*7wJ&{%p8kcGs4_b%AJ}p;&p-P#%|B2P1$*-cQVHg#E5EsAIj^;Q-R1auHQ1lf z>4K|T4=P~qJNg2j!!WT1_ zOMq9SmSY8A-__;idQ1eP73~MO z>gaHFfO$3)qU=(T4~Sia!M9o(84d`e4}0wC=bopRzVv09TUZz#%##|Qv+_s_`!W&& zAdcv!wFCnEllVc-$cZ}and&g}u+9N$Ttc70OEQ81uCJ_i{38q(k53gn_%wfpv6CjiF=6#W;W)7216;A92}EHDOu14d33 zd^N;9A6+n(=f#;K1CxLqg1NwKCy>EF_oF!ISV&{8K)GCAJP)xTr^@V7BjzD<69v)= zI_U-eRwvCg;j1Q@1v%Q#@GwwBx&V^9DDm3#q?iBQuh7iV8L|NW)#Vkceeg5ddjBHTKlpR0SOC9pbXJ_-!2c&t9tTkj z`qMwXfb!VndxL5*r|XT)jqm!Z>G=UvAWGMD;UZp=e4ow$b9j3$$n5&TT_?cx$kNXy zKt=#Y4nVpn9u6M)fTrxdB|!p=Ar2LHwbN^(dkP{4c8^L^t6g5c|fT_Ox ztxyledT1(uAX716F_tD$)jt9*h3g~Xg?IGMF-@)gixa#Y$lGUpZg5`;@L0J z{6mZ4e(i&0+Wg=W)mGk<`zu#z^U}NGdj9dJGUmZ%Y?}bnhB}0I)g!hG^#G9@e zf$xjajI4&i|LWJjM$^@q1pIX*$I74nK!9Jn{2m>9{K;gk5>y~2Kpgejb=uzE7T43$ z(+{_L?souuJ$|n$DVZD-TqW0+XXF@FfxAHf4n8@nKy{P=9IOI5z>ifxRYt}X35HaV zB+&5AiNI$P7?$+Bm;j>VQv{&s{7eE)8-O$ToZQ@_1YiZ=aBL@1ji`$v1<(f(F+y2n zCO{0nI2#s@!Czl_pX|m~0{+aY({%EwPfOs(5P(%+ef0`0FE7WBrbE^0fdFsoy52{k zZXoAA$=x4kF$artY&6|nB!G}?qHQF~NiP9wLl!I|0nV$i*|TQ{=uiM)LYh@2kT3Zi zR$%NnDf%viH;YAt-vcZtiGpH>c$v!=$js+(P^@L-Ktg4hkaeBC-_S(n0-bUWWV;8j z9E}1$q<}%kKPH!uS#hn2^ji3F+n_?jq~gF5Ud?HmmdIZ_`!c=srB|qOq>AS{ZCu-= z#*GcS{O*s%c>>r};5n3^n54?=F*^SE(=-j>OO+#JVZJ}20LK>|r)z6#w1Et9#>#~C z!qv5{?|P26jHH3vBgY*aIIWxxD+ul$0aEcMvV#0H16$)@TW~r`)^vP`A`2Uo%suAXzt_*aldh8mFk;o^xltO7x$+>{Q^~wouc}h^z}li zLe=97bo9s(%3Bs0I0JX+#^n|2G@BxIYcg4X^V&MKy926B6|2ow_lJ129V-5zKrIy}J0&u*KCj30`eqfXU9InSc8fNTZ_ZHOzd>#X~0T3Vn_)LPH-K9byMFOix z`C>lt@w6SpmJox_L{JB+0N!*Y3Bo=I=BXm{ZG)5@8`tB(f9mOH=;&-U0iUy3Tc>_! zM?9-OctWUFOn~E`dWNPSm=oZ0^le)xz@paBAagY?Tn##zph-2E{L0vgJbB*AV1NF|T}vh2I) znwSKtp$qVt1e}(cCsmW+kBy8UYEts!dscwnARz#Uhu_)@d=AUf6Yw{YW=^Byk31m( zZtqaPQKx>ZNvD7ArKJ1g=yW=?xw?{o-`Q!>jaFX}fO7*1aCP-615Xb=P?-h^E|Kaj z9~S(W0Bi+!n*eO#Z-E5U7@ud%q38nB0B<-w0f<6*%>WqiW!;QGm#ISX6eUchRDm$? zg`yamDM+Q^J{Acj!VmL{u_|hqhm{t)69eO zbnL__veETSI?k=Dm+7ZJ`abP!tdiI3h^#ztgib&580GO>&r z+_Arhqi!S708x7cH%}AIW8gx)+XN8%3+Y=JF7dUW>cDjLJ?U+ZcXN-^G|6M%_o>^L z9m-?3x7(;;f0;~&I(n}gBlp>I{pJ7QKc?q?@fDhXXi?m+eXvX$m)=EQ6!&vWk7ef1 zoLr=151$q}zxYVz-NwqY$Z@e%+YsaFPd!aDu#8lEu9UaVrXO&<4w@!gBHf$dlYR>p zG&XF=fQ=3IQ=8o{m;f;eMx%bCM)g_^MXZhgc7zC;P@Lf?uXkGrgMa3Ur!wHL3j$o+ z^&7Rz%T&9voDg6f_-}vrJK}og#3J(H==$MZYmE?qN(Jjx46ocO5c;it_+f)p03FBG zJI5-ZjZo2+UVzX9Q)9;N6)^#Vh*ZVAm3d!}2rxH0lliT^6lkwFbLL3_JZBs+`0D_& zv2u~-7G>u%8P+~{F9Cn%)FOU=HnUzDd=4f+`nozlPe*1X=)Xxqd}HW` z>*?E10OjCQQTu-k+dqpATpB(d9>Df^JqNnx!vi(kyJYEEU{z(P4k}Kg!3GR+NR5Ck z85X(C>r^ULNbhyY?R02j`bhGPAIR_hFj@z{K?Vqib;vY9KRr{a7oL2A&b;so$@iO^ z8`P|C(fY*;0P6(JKDA~jW(!oYeO);FOjoSrkR_E&!O%k<>WeJ;7Lt*%gGbDipItJH7p(DBEgpu&+E z@ow{HKcVu2C#X7iOn^UsI+Fc}m<;|p(gkbn`UZ8@mPs#6klpRj`up$EDa@k$L@m_APxRVEW-A_juQQCT(=Hd{Clkc@$}_L1*)nt zxE~Q~_b1e8To(jj@aGAbI-aLybl(F>n{fsW420DOQ26W-a{q)R`3ou(o0M^7zM^~A$8=y$18 zzede^9l$&n3%IaM@6PPZQ0={v8X7Tf8% z?3MR}1;p`fpt0AHFWgMp7R;}(d&g# zAg?SZ*OdoPCfDV;6I86u(6J?S@X{l@)~>-K8mtbO7sm$tK8|Nz{z|r`5pVs;_mHpC z+dq6=+?)FF%m%IlPu@G&s|i8}y0$bAHEs26w$_^}^8G{rj&J)ReGyIjL`(u!e>HW8 zt|PlN2A@IFwDCj`&pmh7^EyZnM{zJom1HN?~9Rd&(=TtNr&(l8tmv~g)-oM`W zn*zjyVgEXdTpHKcE~ME|RpEQBR+CDl@`2aycDqz87L$>qxm6cq<>-;jTvmdM?_Q*L zk&i$ASmxc4xj8XvP@rP~ejNDgm)=XdzO}VMr6Y5hIo$ba@Z(_c-+AK)*}a4}?|3I- zM6Kmqimmcyao-Ujie+s79LCr75_Tp5hlvTJB$z!ei#ms{tjx%wUwGqtR9nybFq440 zyL_a&?`AHJApi%H;K_GYAl7=DyIs-@E=W84IisF&^7wEXS`I{$zE9`#|`OxmqZ5Bmv8g~d47Zzz}t zxV%7Iar!9&*se$QPXBkpF#L8X1Mm3dNP5U%nD?s%#PL()H(k$NG<0LBXcehCH=CKj z=U|}Ys7&UmTCIvaQiZ4MQi8W`)WlewJx2A-b#cvO@#tjoZL8HHD=?@yRob<-~)K@gm^Op6MW6V%#i(qLetyDe~9p>nw_ zvQnu~6`jT4bM*Q>q)mllQ6xuxa*BGL7WF%Axt+kFTrP+824d9Bf_QFPIr;0}a3f5D z6Q@qlbagtj!36xv??a1ia{FB}3q@+Ktx#?C3U!+eI`jFLB>^hZia54vHG22$w=&>! z=QHS>P1}{2sVUzHhO%ShvLAtu+jF8;urIc)gXTwp032^1pZ5cQNx`OLzt35DvMkx* zHoTQ1^j)gg>*BiK?~CM!Nw8Jh6!)WcRlcpCaa2)bo zUu3u4B^L@f3E3@|N@xa+W@aB0BP#}{Kj_jFl!9@+zEvX+#0fML9vYx)OHfFUa)t>I zvA(YW1TMOl z_df7_>e+)!uIqd~41)_ucz%%C>$vRVw_R_T_dfxKaTU3P{58JGSp@*vCoAe+(=-Lp zdQPKBbb6=T73tc2YQr)(m;k3wKSFf?Up*>)c&BzvSV{bTGH*$H$>l}5flG#Fi1&S` zPl~2c4WP|DFpHd%9lL!)yzgvp(Xq#$r1_=CM3$;Ysfhg@J$f`b1kZo#Prfhm?H~St zyl_|mCZQDxP~7<3CoCWgFE^Nz-JP027{g;NK67q0)Uq! z;0U7%F$p~169h=dG(euLN`N<(FH&iCP5@tuo)x40#qq}Lf1H3XKnJ**ux zXu`yALF&CA#D2pBe2AUsd!vRFl2`^ z_+oxU09FBxN73 z2aYKd5c)y*8vye>0}2(`w^$5$93~XydTR*&N0k6u$W2vIpLe>QYGJ}61Hgq!DAEgb z`0_ybrU$8XL!TxlCWQ3ay$*TM#QbDQXllFLAsa;{72mYlF$XV2x1cgX;FAV` z6r>3f@aPW!fg6hKG<@4j8`q8<{+{Rh|6SmPSUwc*_RBEp zdQP^FE47YT=c7yjj%7eVK^UCXq7E_P*BpFE%an>>>vd5VOoW+S8)TWfo(e->J`7-@z zEe^IVUXQ!o2EZIDKo21Q@>&%n>I?A2``5t9uYvqsBpoEf=)4@<`Hh~PDdb0$036$j zqAUe&e<^;zB+zvUzKt&G;ILjG3(h3q$QSY;MS<*oUnV-Q)7+-HQ;UKGt`kr(Z_4!q z5gY-0Oa$&s4%c>KJ5WvdHG8T-Itr;9 zDop_Vm;i%8PZm2O0HNTMm1#i&j?Q)?1-_q)*TM=6t3ZK2Kvy@YJ8(so zupT$5jztFp5QcOz3?tc2yVoY$wyE9j(At$%vQg-(m#>QafB)$}qxUcUgq(pxKD3*? z-3Nf2Y~Sp}F0714PF+XmN0#JaudeTaeCn3xg};T*e~c8w*)KiC6QIX`P3&iNyK@Kn z?|xAPsi6Ne@?3d(hRRcA%17PKVWYC;$s(0YMXDgJQdvANPgUdu&!Nh6Ra`c<>vUsn zg)Y4Ddh&gB(t;&e;<^a?AhO7^EXwEkn&8jX=9EV8OA@<@g$y_)N8 z&k;rpj>B<=;N$jO7;695VG0p@{z1V1I1zvi{F3Lnzrh5spa34clS#m}w;{bu0!~AW zR-yoQw#D5>J6+w1eZGfE+ko_ zo#u`JFK3vf15{Q48}IU_M)^tw@9Q*h2GqCvWVf1>%NGHYN&~PduLh*Urai~Th#yvT z33{BajnPYzJ3jGez6bbW{1*UxfB3EA`be7`pI-Ar`uj*hk8qzqFU)#A#~M7p?|7dO z0t|!A_#Nbvj$<#CCd)K{%qzM^ObAVvM=e+ds#dFXq$(v}$8&oypuCk6qk*y2+@?}x zTD)&uTO}Jru%HecdCX_>umb3?3oM*$z(MzFQAfwX$FWQDW2K00`{;g~yWbC9!|gee zs)kVaJ@lxBaOblE95g;o1mIv2{0R9I%J_v(EviAZ1U*XAbf&gpT;~b0tw*o%L{ZD|y z2Up~W$miJ#LeCezU&u}1u$t&pRZ&S((5o<6*Bg)mfH-XsBbUz!k1z6Q=rr(ED1=Kp z%_iB7OF2^)PCEejIRGER65L1?7>oe(gHXj4tO8&MOa%6FB*2xPFO8l0P@aL?W!b-k zx&IC3yu*YKhf{XDzK0Bk$^2m8+4pZHK8^&4gGq1}BoJ1RiDg04f77eV<9dAjN9HN)UJW&<2JrFGvu3KEP+| zaf9HJ;|tF}&(GDHDPEAht@muv{kIw)X98?T<6lGy^qB;?TrQcwB=Q` zkY%1%DwU`@GY{Zz2okI=U!(7J;9TKsChkFpRx9i*(ZrKB<}t6$wO2&jxV8FbBPsARw&dwJ`L5+r_g0 zULGftCzHOK`QD3ieWybY0UVwHh6JXfYvyWk~R262yonB!~#W;M=f{zURCagyA{f6GkHCCJ>Ae;C6!lNg@Ep z8_4HF&t8fj2ogj9F$qfL66JDGfxI=A0DK>4Cbb$YDzJcNL+G-u4N0J>3i$yOAtFIA z1Rr@G4KKh?7Ci(3R+<36cl*Hqq!EDQJ^1G@^liJE%NI#iH8KIJ0^m4RGfz3-edK|o ztQOSibjWiQjP@{FTeP!vgNl=r0^CO920#qRFhY2UHYu?1=~Z$bSqx9!@{hREdzGLC%quW%;Ss%jDS;7+0bMpvF~A6)I78eCNFh19z%+J$?@Y z)H1(1Y60H(&56!$-dXTDKFI{&I0?8P!?;9J6_%m~WY1nURCUn}0_1}9l+;5ky> zFEdFr!=i`)1OgBUklb?^_yH~5^#>rp-2#8yc0OrwCCc;TUIP3N{R7&~JbxtaCiooc zUHhd^X!t>PjIZNN2YdeA1fS!Rt^jn<9v7;v24rLKqtw^}M&|ip_F1d|X(h<0LbQRq z-TD7k0q#=x2VmH}0-xjG65tMpc9ROt;Y(SZyA006)s ff9rONr_h-n3mbY?P`i^l00000NkvXXu0mjfmbYdm literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/ItemCocoaTree.png b/www/img/stationpedia/ItemCocoaTree.png new file mode 100644 index 0000000000000000000000000000000000000000..14afec6166e283fd167bbdb5a3eef310eae2d34b GIT binary patch literal 7141 zcmVaguJj8#&lz2yb#95pq+OfVZ89#V6-)O z8f@^!wl>zn8#97xqruvE{dlV&*yC(Sc)|o1&2t)aXp-fn zVypag>-X_xU*IZ(KZiX`u%C=mmL^Fvrgg>=VF{MdFW^1roC!DfaZ$h`x|yHG30p{s zzZhE?5J5h=|6TwCKr+P4Z}b^OR?`OLzp`95V;^OCLw-Hqk?#e-PyhpX?dXWfQddg(8R&k=e;{La2;CbXn7@VoUs=@MPXzm4 zc>z3ci*khAhIS8|Wb8K>sm^(vvR4-=O(L3_--D)RZb=0LOQ)}=+|qQkcsbU$7AV3f ziRv*98y?V)Z^41JTfw+qY5g#-)c@2URNdo*K62#+@SM>Q?^=T+-~n44cO~h`a`=1_ z%UK)d;XtHWD(ISGd;xA}Xs28!g8K)Fd_+YtguMVPkodPCkoO>tcl_WoN!TqQ6p4T3 z022{BI*eG^eO#ZzVRBOMxwCNTgcg*X26ag=HQ^88*YVW7Zn6N-$A2B#pD~;59pdXI zC3}g>hWyKdCtn#2M2|ZH*gum0XzJQmP5>8O^Nqdpo6!Ce+TGMEw3k8JnZi%4xt!Gx<`J%F|-XGub?tBgBSh#bY zl8P7mT~m{=oIO(+Hwj+2VNw#AACoNt?-sFD<}=hsnp@m0qT*Rs?$F z0KQfWM@+0Sz^u1!^&_V+FYB$XaCxs>D@%ge9nF^vH)IZmh?Y%eFteISPJ&+iTCIuA3+6x zD5&iR7;^wIknWyX#kwMBvc9svhq6D{`a8MN@9L3r_2JS5aNafF*!uo8Xupds4JQc0 zj-bXLxf=fp^cdK>!C}1RH|x2YY+N1IRa@h0IP3SMgyHAa#`)NgwIgIW#=8R9AU{so zx>O9ve+Qmcf)5mj0bHs8&Y65~^?wcR4IH2~9&rnZ7jR=F{}m?y$%nJDuJKjZ0rbeB zx8dJ1j2 zA_(n1d=4Rk+TR%uNSAI-xS|Ye{k#Ajr*ZPg-X)s#;iU+G_XKMP{2sJFhxR*+5RdTW zW1UYDSrdQgNKd!i*puyRyzcXC2Qe__>-2^ooIQtvq2!Bs{Gt6nWF-5qdS?`5O6=(`)5U|zm>$( zvtH}#D*z<_ZDwoz29SJgM=4fWsPk#J&i8?mU%21A8vn)x<~iY2r2k^Cp87a#zB-U~AJRc6V54Ijemrg6${fz2OqyK|Zh2L#=( z@CP*g2R4<>N)h=|(1u?OWPd_Pk9&xwSsqrSFvE-ByxjFTFTn@6XBtcPIRE50D~op$ zGfx1*sJegr^yBAW0>u1JeCEH__i~BEL-rp+k2sW)=^jhfL+Lbh&ZzCTO;3W1_u#Zv zSKW1!EjI7Zi{I(Mp_Xw&__3X%X9W~bdy?mD1r2fG0ubbqdY%Y68tfUWQq|1^vy}!4C$<22cj22iIF`CLgO<;KH5JO zz%ouA**#`bSgy}k0DQ#e^#t;R0N;lB-+-|{86p5{KH7er`9ShAl^chkp2Z< z)gG`RwMQtO8ZUHbTvVcQ4iuS)H)9fJewY+EuHejySiX;)|3*OVuOJ$$GCxtqd~a%c zY14gwO2~h14loh7p}h^^yf-wVujcoW-^uz3Sv~{_^Ee?Nt-h1}?%fpEU?U|^ky6!{ zIBCqG*)NsWKZNex)-mS!Yo=)7xnKc^>1CiMp9SR8?`h5NvwRzz_II!4PlTLM=RNtf zzKaR>*8}lT~x_0JL^-tEk*rk~+7&o;(p3xJQ;@U52( zp6^2YJ6Pklht<#6rx%X=djB^2(acQQZ=J$5K5{k@ysYO7m)SnU1CosqEcM@kSQ4^G zQJF>{USNeGgu?G4*i-cgnx03x>_@Ch^PjNB|D7WzLC$~jtk`&ep$?$O#e(Ex=HD6m z9j@N}3fOn}b`S`VH?7s-!C*-VIS?}}+ zr?DMya+L5x!c9R7ry{8LMlvUnZ%>Kj;~rE5bWhCwtTe~WI>1iYSpaiuK1D#zZD?;n z`%_rs)uHu{;uPvWhX%E_K3y8DIb2x!&SroJT9-Zf!e=^=kPyN#!xG*VOZ}aZ{<$~+v*e@Y-=idLWPY5m6r!Idf-U4Gotxxu7vvcE*n4YFgaCUNHGzp+6px^_ zwc_rcqH`YIW8Vci-`Zt-4q`I{_n=5YWT|LxmKEwaD~bnKuBCf^j|D}LKzj1+?{1x!f&FWDauflcX*1JX@(W`3xhoO$9^K!t5AM%H&#iHc zC2!f2lxdxk^EQFW&JzdEc;u@57+Gcj(Y087Xh~pAW63MXwTMpzImqbTvQAN z8TaI4?}al4%>IQtQ>GL+K=IJOo8th8vFt}|2;eL=Kft8SKY|k+rHQNe7}($hCI}Yq zuAqZ8d1%*exx@u7MlxL8NAgh&{u?A8Yi~y=QM*rPU){BT6iIztZqI|yIlPN10b&px zcT!{>s&}Yxw1?WlNZEbN@+YIyFUkS#GE4rQG4gMLtsT9Tuth9; z7tu|%oi9j1gy6}S&t1O-FUWwbiPfE>J zO1(qpaXs!HlDDzUo~>&K83Ugf&pFs2Uks3cn2eJ@1TnDY#yoO68Pt4Bx;WR1dlBTM z9}B?Q|VZUEpxAyL)%c}(T9-9SPl`~DC-qd!uM|6ljg}^xL!Hyr|<;Ia0_lzRt?qh zs@sRZ#~{dAJ^9$9?R#XUY8Y9m;vx14Rr^FB`A??`fX`lj^J2`Be=p4bB;xE4?EU~e z*9Tiiwl%1D$GSJDCjqYOb`^|6z!Fj?Wu!YoNdodwa3~&hj=TiH(3go6W@ z_1$O94DXgR?VpY9sq8WPv3y9u!3ljSv=)-XAMU+^GkuWP_Wxj+ButfhOZ)?I&*X2z z0rboT9BvC|{}f0}!Z}=+1gS^Ro_qnpo3lR>$=$cI5yAKhof!_cF~0jlW~{l9$8e!5z*IXDjid>O9vMXSbcFcz?S0R)j4G0t7h_p_r2 zg4WIu72nvvuZtGVA%Mt7=`vq(MMR)$N1=kkInur@bVOgN6&F5ULZS-pW;?rk4m zMM94jnj~rkgTG_=y?{F}M1SVL56QZQ#d3|A&%d6q_(5kvSTX~L^0|I;nz0}M{PAq^ z;-O&Az?Y!CKIa25aTiYPUXnmi%lG7ul@hn|7J!yqjwe1!z(`kld_M0tdrsR7p zf%xS>=3DYL+CFCfgAKw%^xR=r@)2isfFo#M?R$|D>(?&J5L3wa9?)cd)Mh5{sfl6M z57lC1kJfliL_vu|^1T4c0nupEqcbUT=7flLAvPTi;cee$z9WAJoP~VESq1Q`&^||l z64HPH7DUw=ZQ9MkKFp~kAYTyjDP%*q-s#}lH4_kA1T}sNRL__fZJ7N?dMg0)A=*CM zk$kNAXCWUE&$WCS9{BdRSdaauG0-TW#gah@g*pb2aGA?%(h0$?=JUvsEr?+1XWq^F zw&wej$jN8NwF=V;(ci+?c!c7^_qDSZop;i7>6cuB``JZOh%Se=Chs#?VU3wz+L{ju z@L=1SJ8;iWvW)%c!?Tf(IFkcF0PYP5Xc2D`Gi1}er|x+XAlaf*^V@o_u_jkt$LK3N z9;&B+d-8Rd`8c)OTq*q?*Gub|p|NRfnPCnu+0=Ns;yVv)kc7TcCB-_W} z#Y5+LA>f!N9D85aH8MozW1ZLAN`@E71oA1pOVK_Jk^fjJmKk~cf%SLD=UarY%XY`pT(R$;gY8qqdiQVd)madQEJ3g!02pK$_mfR8Z;Z_( z%vK4{JhmK2KaY1yNnwPm&KtWrz+Eh_WdLk3wPCLXHJY}1OM^R60}dgo0vJqRged;;VrV)KNV+kXuioY&19!{dD*bf=s{ z@~@HrdhI`nhN%)g*6-m7m!O@p=e?f%WPxN$a+Z*MHBu&o&wf{qhJfTRpmEqo5&>jH zcp2;qS?|e5>wh#q)QtV;$>R$lAF-_;H^S!GZFJCl#)>%G;J3nL$~ivYe1?Th}Q zs4RmiT7QfIPHTd>v7~Y&0xsf9!G;s?E)fz5t!U}cqzpg}hZ(q|wRjL5SMZwztr{0m z_+CVtrti#X@7fWMSU|7M zCh>@xe0KF~eu%jO_$=!YKyCjcp!UzBP3!epD$a0`qS`)(nk}AK_LKld>N@sSWQlL? zLde(PM#^2iCcoZ+UmNlfa|Q5+&^{9mLQX(16SlyR0uiRJqwZy7vxxN&jP}|P5II(0 zHh$qVnUYqQ44?U~D>k$j?y~6=X~*Wf?01c2n<4F^N=Jwj3?u}(2wF`7V2GKSf&C)oTDc(5MAI)SdqU&Q^a z7r}2$$oC-RUklr(m?Hor|Mpoo6eEs^B$q@SD1^w>07|~n)A!>&g~6AA1&FeO2n>;r z`~u!L6p z@9iGXL`~ZhA3_mjdE&7ziG&I!%BT4!-^t4Y$-ke*N&lU6yBOaR(W^v0Vu}Dh5ABZz z-$Ko&buNNn8y9e_mIppa25b_t(L|QCf(?|nvWHNL1%UE^VvXZQ1G>Ra&pgCv1@Q0Gm#d1C4SrWy|9RU;oUMF3xc_Quo& zeKydbXdp#I!ioTTYP;u+l#su`Gtg3FTH>t;y5h-{VkOrP;pcs5nDvjQ-g#RYxQgT> z;tB7+GBzPMZT_b{K`@nJJUWBVJ9u9h3UlhnOx=V~Y>NPj4iQpJsmr z{SVTZm9y`r+p?vdRPnBbQSAMXo?cn<5!(cCk696H&rS$BR?j5_RaY%p6;GP%l^Faj z8sLsBKaEbupmI_^Bod8vp3I4uJx9Bs6@hzMla5%|#Oq^a%s;}9|AteZ`W*{xvl>g* z6i^4Cr+M$>YLk!HCV=0EmP}blK^Dj@R=9?M3KI-g5Hd%qAeBNp@~La!?}ThIwx9Cr z1p6WJd7-erznv!XLEpFAEIkA|K={p7wtb2*0sJzwH_y63UbR_-b-EzWi6ggmjL4DY zL_oCATRMiwS3&P*<4!byj?|=Gqb#2H;#3NVz z6==(CRS@ab#?%cm3rMnrCra3w4}wVJmiDOXeqW#j{TTEIWG;T6MfLty>BgAM@Uz7O4PW}RRgXsKvC--#j0%i<0E0ev%RnItR&$AGtN`I4p8_f!NF zb*AZUp2UtF`46Ch=;jAyiUUwwSMm{K;kobngJ3)go_X+m7(8Q|f1W(w!hbdSH42ug z+RT4*`7C9xe(ESX;Ib(JKu3kypBsHU)#6jk=%&o)T7-A_7iPqNoHZy@$5(jGvrlHR;!xc#qiG{SKje z?r4N4LJxWlK++K}3h^HCWgpN#yoj@9((Mu#~yp^vBw^J?6Jold+c!)@&Aj10|5X4001EW b*D|mH72wgaI|0tO00000NkvXXu0mjf6Gskl literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/ItemCookedCorn.png b/www/img/stationpedia/ItemCookedCorn.png index bfccded86a8d49f76127b498e9baec697eecf5ae..bab421b9053d899e8d41996299db49d89a369acb 100644 GIT binary patch literal 12817 zcmV+sGVaZZP)aGcr1o_2!xN01<}6aNSjCowVu z2MAyTi2*x+;~0*C&CJ4%FZR#1f%}1beXl?6qG#?k#_;Z5uV=h>dZ(?Ko{`k8j}}FW zB1MX1k)L-^y8U_#9`8a|if{BR4tvI~mpb{V!eCpldqbShf0N z7vl=9rghPOzhJ|$T3DEp&sKMVKUy07-njriA~1;8co_KnB@GK{wLgAm%^DGbHXiEt zzjRqg&@lSH-&nCQqz?hBS?l*%0F5T_`ugCxde#U3v?EUZ#e*^el#W+3F~mY1V&N`a zSHXehfc^lF$frgRI8eF{E|6Ff5gl4!Q1qAYHPNvT>{=*KNrALMVPWs3rOP68omh51@IKW z#D~XabjjuuB!H@U*1M7-I2XW&h-gq|d&H2xsXRkdWZ$5IUTet`Fs3}cJ?SJs*9BBs z*LKbY@S%W-k5SayXT6gL!Q>CO=K^>_@NGUhA%E9fqt7|}KMLT?_Z`6X&IRz;7_RTf zK@WU1M9?Sy+yNdB@sOxvYjP9kV_&IRzu z@QF`^nT7-|7%MS2Sf!^B-yTG{v90HRbraB!Sm%n}DI8*e1te<1u zpFpjC z6bCqj=P5o5N#bg+T}&mk{)A+>UrQb!`uQ)#q0l<>lflJ}avO7#24bj*XWw47nf#wL zG58kaQ!4;=Mq%}IAF=T#`|U?`fE>m1Uw$_Je0Ius-U!rY%(em%R-bHKU+7sAeIq?( z^vA76?<2E8(Qe#tgUKfmh~L$64I32~n-%XB`nl>r9a;QSCjhSTh9-l-R?o@F1lcyV zR3nvM-POjxRr8TC;sAl6I#2zeF1yq&P~7<88T=Ie{Glt)>7mIqkw(IKcd01mq^Aw& znk3sYZRAoasuc&-qJ>;GF2*aag(PMA*8M6fWeb%ixkOZfYMV&LR9Hx(X4^M4!@eoL z8H|kV^;07Nwt3EUouX}jxN9Bd07GEwzH$ATun2>MS1Fhy6Jjv~^|~b@Hx=rSua#V6 zB2u|)TQ#IE$Y+B1UcfL&0IDFrQg^XhvGIOUkk2KB#5uaLPrLwp;>E>MYdwWEM;u^) z7p`24-blr~8`NJU@`bI}EGYm#!eMtr1Pso61`B|ZN``3-8>PJ#Vuo}GK|bNitkx&L z(h&2x_TPNiUO$ln;JPkCmzG~Yc*^S!9AK8>A2RV*=3)z1=VFVdS?SMPS~X#emSjPC z_F^2d2@=4*1+yvb$`=8b0486o6Qo0Shsb|6j-)a2xjoAMSC)&;sy`46G)5+Tq6849 z5^B(esB|j5cM;-hx`RFscf7|~Bp`z+&;#LKw&^y_55~ceOJwgDQ&Fl|xPB!r z+Hy_0K{Bq5d@nbxue^TSd^uw1mE+d^SPOt{UJFR_6J)#9)|qW(fk~(K# zOiHv%Z!TdbK{a|N)_>M2k6LnSI!ffrF%|(GOAyZ@U@-AZ%QZp1h#gCi?+ZX?zi3z2 zcF6iqVEAJvfZ_Vi=qhKn73Stgi1=T~&1#(ai@8}{Sn=AnErNghA3YyONb*oE$xo`p6v*Ma4-@P2Wv$(BNAss z*#AnQ=HB$bs|M6#5A~5109$;RG9?+7zw6eSZRG`u8%+MfjJBAX86|UaHYr+P1oc7z z^=F1>l2)kV#51{VXr-I)Yesfa0zc!<)BT`10pumOH&f z;O9JVy%@%&856ap#_|4J>#bLY58{5DN&wsaWP~>D4#Mi~P^H%GJpLNpfI=19>;H~) zdmZ|=t`NrtevE$olV=v9UtOR&t&N$e6l!9M64Vi&k{OpN7tk!5NJeDlPlhd&iYA-} zsV5ypYL*DkWUzL-L@q`LsYzGx_DwpJT=M#}8peYfHuFxO35%vy8!rChZ4+Hhp{$mB zjRYm>_qJ73+cZ!m0X0;#y*lFioaIysD(*K_#of^L;jI4{IKbgLud0&#r-%iL8@Y^j zBa<+03_nQD#zpIkU>J>Z4NEkfnhA?w)JX&kApr5aiV9^a$1qZp3WbVzLKgzq*s?L7 zl`c?gcp`GM8ZMI}-+HGt^6vV!L(g4YqUTn-KfFS5lgM`-<=|&7fK2?sv8PD>^AtbD z#8WKhGCEvHB3DelG9r{Dn3$0N$WxICkOH8-oIh99u)9|z8QMszZc%(Iu^GFy=BLBvYCY zKypfwFXoT{IN}NP$!C1=ImzI?ygl;G0=@s%l8N{QLu5WXz#7fDHm&>Qi`w5bN8dZi z4xYLIm~giI=(x0ft0Twkq5A$fd_x?2^_-gKQERwq%N7t^P zwkyesCliRrr6t7zB~*$PRNj^9oD8Y(Xuk#eW@a*sM4Ym*(}J}xH(UKHS>r7trY225 zWcFlG_8T*rJby1mJ6#vsq@9hPQ}ABrrWF_=1L+mf5uP_{qnEE|Q7zT6_D){3 zv0w$sbh7`vl&^?3l}Y0Im#;us&Wqn$WfOUdTF1a#h_YCgeyDqnAbuFRi^Cq({2Dz3a3kEl1OzewccDiL9+GQ-#I)%p_?shA+2oggx z6+ylqG1b9e-YE(4j{=kL3&6MaVQdu~5hL$R%d)V!wLUtgQvw~H~>rRM~V0wskr(=Dxofh#+4CM%w0~5 zyuie>0616xKKWOE;EHg9{JYCXF2rSkMZnoVH=K1Ii$G>L3xKnJ7@YOueJTkYPS4)w zdm?yeZ9x1NJ{L!M$He<2#Tc+8de0!5L*A`tzaaJt?g zVj+2|M!UN}F7q=){IC4b=Mz7ZjO$;Cjl1IZW3d2Y69HteUPO>cXAy*`Rl$2|_k+dL z*tZai8_3MZF?CUvh%k{Fjs?-_bWq)<@=$1qh{kn6ULr2D+-f@b%(aLR03%IUInNjcmb^W0)u?Skl5y$L<$qi${Cf<)>umG+-8^^c5C%?V1ZDB$KQk30{QpE;qqgHnik7-Cu=txI^w>RvS zw>O+uZf`g@+a0VPwWfZEN&N_B>j$IcGag$2Ogz_l4)fr2@34()J?lCOs`{V^+zx03 z`~Z>u)7hkYgJO}#mEdpz2H5(ywk#1`0v?9=Oj3kXC?UU56Tt%T;fr8qDvHExOpLJu z41=AZS~P|A`xquYN3|jmc2U?FJVD z)+7Iwqt5ZLJM>}E(y?(#{#Ij@e8yu5z@WFMNTCV3pDHDuLVh0f=nyR;aa?=od&fDz zIJtYR-6NgsFFg*vjUR_WLG9m6d(Wh@F{FA{{qDvt@>R;jd>GjT#YG~qT|#}2h*@r+ zYdNCMC3;%0nljrn^HCx^42$O1DdRZae>abqR)OTB~8Url`fnv z(dA3*$ksYgaQB{#%C3uA!$olTFk~LNXOl1{EEI|s-d(5jSQf2i%l*(g(FwV+rL~r5 zpZ^m7_VDg~7k9SY-@a4!{>QeBcR-0&qbYo=RLRh^dUoFvfiHx^HQyyps@8*<|JVYc zk|_jWj6ZyiO7#wCJurTf1H^+u1Pj#Opr3!AEdIv_PY1S}66Cdn0616x^~&Hmi$GQ6 z@0n~8X^PF2(vfR!-jnlE$w9W3${unvy|vN?Qbhx|Z<$zF3}ba=uuiSvi4g0|NTRy|w9|)91z;>LPR4H5`fMKL&m|P35-7Mjmg~6WUQKc^c#uvX7 zM}Y(&f*5203?oLhosqxa66e2iDMSL$QK{K@W5pu!y_e|mtN#4M*&iacTiD z>2cpiJEwc+1317BCW81?CjRgPUj(aO{Ma>_^z32^v7~eZvpSmbT<3iOa73fwBfrBU zU;&gUYfD68>JW){SEaZv&1+NwRjlQ0A%b+z0k~xW-1>fvvfn^jhzG&}>if3Hejk;Z z=r@+vTmRRcE&Lva$T!Fsg8HZk^r5>ue1|91{0BHX4Uxm-Gdi>xg31BiUTCn5F z&5qFnC7_~9HO_9ygQ|+$xEhd~=K9@!|8$)%gh)%1G zRMSZm1RrRPsa1ZR`9xuehxG|U2UZnnFzA}1RUj$ZVAcDgE z3aWLBYOWy!ATGA9s` zCS57fI_J!j$YQMCP|=E{jA68hV%Or|CuVnd&B!U zP4*9$fMN2t9+7;((MjZUGuE>)r8maqmunK0dO?WBb)9N?hc+FgGmdF06go-Qb742- z1yK2;%vBbm=zcw+<39w)kWNk*SiBg+{QLz>1XVP48<+^uH#?NUArqy14OOboT-!Ke z6HzQ&jN{^B4w>vUqO@+fYvHq(LPDTbBH_+5XQPH>)S^1>VwyOQB1L(db@E*wvxb_}&<7h$@X>`VxgwC{itz!+V~ z{k(KHN-Dy&NBf?ItBk8;^{@Nty4Hr=DO-N2<#h zaex=oN%h6BsxR`7e8HkxIjsW2*K%3?ZTK5vR(%uy-W+!&MrAF25)N*j3;iUY|H z_Ze3gbeL`F43%O7$(fkw=W=r0wRMY}z!j03Q$?GM(%goOBu&rF4i3In@GzCIFh8{K zkv&m{TSFuylToFYgUb6Es+;JGWK%HJg6e*1eh z%=JXT*6yRUYl|#pBrgocd*r`N@rq?(^|(7@()Cj&+r0{~Ud3afFMx-U&)LuT01mJ~ z4)9NBlGaaCf6*Vz&W;M8Qa1a)hx=k~HcS?p68*Ui=>(kh;3{~%opdOGVsQ_vqIgQ zOg^;_C7&HY4V*svtK>Ab4`BI+Ap|f&{vi>ZnEYz*D}#wa&vJe|6~(_vC-D!#@2csch}{2(g`9W ztBIhK;7|Ua774|Hrs`Az=wV0Bnf#xP{6v|wb z>4(2B>K7^Fax)qtbYT;;uPV##DQeEx3?9H!!7W$pdef7+_!k7DDX8FVJP zE8CN`oWqB1ND(mc!!E#ki(t@K>D{-shv-POld!n zPH9M|bW{tHd`7kEqM+GFzBo4@7O{EH#OAtmg3UD(SDzz`->4kBs1U$KSxSE5??mw0 zpO$c!zOzaZAwF`?3`kiX%E2pCoPvft*xHt~I;zn~PpKpXRS00MIGT#j|3HYw91)ED zwsYj3-o9tweEXjBGLirP($7YnN<*wCbcQxIDgd`9GA8~w7g(!3Ir15Sqio+N-iLCc z4Pb$?`$cMRV94%|LSbicVKdVj4$Q&txl7@`_Vdunut$N>m&vn>-R=8Xf78Pncx4$ z5!uh=OT=;e`#lldw?{<40uV&qHAmh}UXTJ9hA#pZ0B8MMcWmJR{pT~I8Q_!85aeg& zx+H*QBLC||{!R4ieN;ZeX&gWe9G(5|=V{N44?^$BP`M@v!iU2L^%aV-G3f#vDsP-N z+wJ0oaSgvo@Be&I#ne1qY=U?>sCgKpA~$9^2zDGy#yupWT@gXe!!zk1E@mUhUW{R! zJ{F*F?o~{rl41I-BVe_mkn#ewFO}LvYz&os4;^yon9;%2XA#neO>i*vMZMaNxoj5cNFxUS*ZOCj1r0L>wWEF7}&UG${S-jw}_i&=_3Gj;RX@YPAl>%IoiRzJBYT`whE;k|5O+ z_tXzTFpqa7`Ql6dz0$KT-Rl^Q^AfC$GVT5TKCnwISBTDsAbMT9B8HJlhe3R!v}>YNl9{TwHu42&beXh4S!0X- zCXvIDo~(=C^K&uTQr2(YcSMN2jvasCg*hFoa}Mrq%K2;L9J!uz_{fuRvME&rdt{~N zQg|Y+T+;BBYdW@eUF4}myq_1Tdh<`-bof3*)<-B2NCeOWvONmJ4&cfoj)1RYY4<~5 z{15^->cS3Fctu)=9Bsrj0eWBm<=FC zzXNs`D&0%aP$)Y?h{bgnU3sypt0F{mqq+yj^iU?^_iGN-Sr_&F1GK6Qs=r;#P%Y)} zg{Y334Ue6d>h>6nkWS(;5TJzvR4|wCS=iaN>01qyb{bUcDf{yS5(AXH7a~MvS`qCS zeXnhKRBu&u+yE{_RZ)BkB?kw#hh5U7MFjltb0J*26ojSHK096P64BgdY3%AVL1Z)I z=#Ukb_H9&5@8+GN_iJyL@CRHTxu&bEIa<5Zk+ok{Wb4D}l>{E@j>+J?vRNp!r84CM z>$-GuUOZ6*6zzDs)5qi~bPX$JYhe9zGb-jNTS`=?8Z|j5Mwt>zg+8trDCP$z zD)jm@8JQNvyfv~`nrt;3lKWv&ISf_KnZG-y-Vh#~Et3HQsvaVQb-OWQaT1Wq}R54%dXznG;= z^~q<%5-RF7SBQXHA1s3WJF@SKfZI4_WjZq;^RNi!vxD0_Oz1FJ1dL$;9Q95%Ex*SC z;81%fo=a;YzPHpX1>25@#DxL*Ts|0g)`Ul|-dT5kXSIw!9wuK^AKaTyI=901jX_vL z$K|YFCkG-yof!gpSU-M7r@!MBiW?_=kTajjXGEvMu$lw%8GiPsvq!rCgGJyIxp_}M z_uFBxm=22uo_p;6Hc13O@`VuQd%~#f^~f(cR5mn0e(sWd#sVPHx%(Q$?@<5$t^)1h z@42oF76OMplv1KU(7F(VuNNkNncTBxJsyFNi-0>86&-a*$}XMAaU3XA^SppK!3*e- zuQqG2NVVuW085&t!XmXBjt8?!*;1~GM~2#cV8JolLhQl}g7E|{$LSJoFQHO)&@faK zn+6gIId5)O!zK|>qzf`P=pE7&M|wh`pmI|2L;=;PmZF#R^V2#?^sRiwg+W`;$^DIp z1=pe9JtD$}f_lS2H6qK_9F-PT_Ye#?$YfPqTZr}dnwcjNRIEQNHQk@5D1hEgP!(_X zNaMQBwci&2!_R)-{>`2qO(LB4%?>~gf~Dfw67NHe#|(74T|qjB56|-u2n6W39+Uqv z#UhU#yIjuwVCtu(oXkbi`r-BHuux-a&=(d*(s_Z?9S_Z{M|k^{oy2H`n&uLRgn)?sVv` zJpYb*WDglom&PJ=WS+w!u!an&Nq2O&OrqL5YuX10s7DpC0e&t%Vf=faeCh-DIQ=Pe z-*b?hR8WyW>Dl0=<@Z|jOcRkx=^~bvOq6yXUej3wjE(yzZ#tcnduA8lx}KfU9+;D_ zNOoA$*Po$%T#)aqUE@xUB@?>pahFqf5tavQFbrI#pc%?CG`PAVwmJ#3K(wt7O~toO+m z>n4;w`KLgOi2sHp9;+k!C-PYYNkh7b557LX1aS0)0omsgP}m2G^{2$>BO;&=`xj%( zoudE0MDZ`_Xutv0#&jI1n9P#!XBJS+SKu});x}7#k}Nqhr6N14qEa!?D%U88kl8TV zo{q_xFhU0=;*l1rbqz+)M&Ym5P}s3i+p$C~7neMxz-|+HUDS|l3ud*kFV>?v8 z=_2Ff94hEja5WE`75SXo23fd47eCi?1)Gkr)~mNwB0^8<$R!8IWir>+L{VRPH*ep( zowt6c=}Ph)@mUWc`d+muTj2nK!MmC^5P%TGkT}}ZuQflq1Vwmtk?)yLIeljJ{$ zEM;vqFHQ?7MsPD3tZAV>9nZOg*zZ`RONg`=(9$vdxb zXhW9H1cphB6=5swdUCpjHPt!DN`AlB)Z2vtNpZlJU?B1&Y_Dv>X1_hxxu?~GVz zAOPMPlRux9Yi<+<--%BsRH9Tt{xFF2o7B8a?W>0`#~G?*em(acK(stI_TZ&fT9WvW zI{6GW9vw%w+x5fibi5k@O}*UdxQI*yabZK{~ZMB)-AeqZpS-STdWI}M5>a89L-m>jV32=@Y22jZ$q^29#WNN`oou*T z?_$3t$GA;Ix)|>zJh#3W_Q}Tuac-B$=kF>AQdsnAA{M}{JI(!Cqx1V6Mg5ON{+s;^ z86uQz-ScF|b3VA#XTPw9^vPqcTnY+3tdQj|?@9arI6zHIPzsHW`9bV-Cs+iNl=m3m)TvSRe5iAIc z7?_zU>qF{TH`aBs`$lOKr&a6P9( zp}l)V0=JucE-WIYLSj)3%J|C@m`nvxJMeHo^i^vP+yBbaefz&S-LYRja9pB`NbM0u zONgZA?@>;OaC)}S)gnwn@VbL5>riwlSjM|V{^p+Se_RkaVvH?ug<>&19V61U2PT9g zOcD{-Y#==sNAZ45gm~tT&Mow6e0oaM+7YCwj;ATJmzHgmDso;lVj(>}u<26S8F?o| z&XM049ZOwMMJ%n_{dZE68d6g_7A}VS^IrRIiNvI>ld#^F(CT-9iQ~W@I|1_B}D5xz%cQL!6GnvHMUTe#IXag07@14ySOuWzp!)kw|p1iF!$xy z^=C*R3py;rKxx;O!l70Rm`wiNyIbb((zM?t^6RI$7_RFq1m6Mlz^DT-OcKa??J2VL zAs}E3+*TlJ#QE?y6-8e$jNoDyRO^F5w5_%XSYxoMo*E%Th#)ydLg;P+U-nSEw~02@ z!4%bZpVZR62bY}Irn=dt3pA#}h$}YMms{e7(^I{5gDR?Y$pvx;w`(I`v~m54j>%-G zzc-eH5g{_Fz}$?6%`FGMM3kroV^RknXNNMfN+ebD4wlwSe|)cm|AB_T$@6kqAVh1S z;lU0%h-?w!xGHmVr-~6qlj#|<|t>R##@ZhH8d|97U)6#)T zJGKZAX-qt0E=zV_ll^>Aw%K&wvDn3K68Zmot%X9aC$vPEgl4)YUW{J`dE2AOq2o3k~zjMz=5$bApomoA=nc^nuuo<$N`3l7X5%vs=V~nwEP`UYC-^; z#X~imh-U#Dg%Vjl=}!>vLo+1#z5s6Bbylc(rMLfnt*;Vkms1aZGZB(?d>B6YwmlfD zn6h2oJp-0LL5-UfI7whu~x&c(a+T@ z7qyXdCBlz(F`@W~PE9zz!Uzivx=L1r~vWZ6bc(^gwUI9#he!a2yr2IXn9uXKc#>ByE^gTl-H=}hd(xTPr5l_+a zWXoaEJ9%2C+CFQlJ{$y&d)Pj(3!C{W<}-=@n0;VFAJ^fGJ80EgBmfWLupz=nY&wqo z?RC*l&5|>uR1``sio0~_Lo4$5<&1$s*%86Wr61hKOlFY2l|37!Jvo=!n^4{VO5N9E zLG{>!#ta#WuuA2?J=Nt@nq>LKGhpQ@BH+5Cm!XUe`qqK-&CPu6A8+KVNnZq<`78i! zToZkUXvjOd_2f2%xZ1 z#nP&IWSu__bxR81FcKlk?jx-I(?C8$VF3)sA$*hK6>@=!Kft8>F2G>&IT*t(konvt z(cXH;5!ug}nNp72M0#o<0w&%kKRr2`)l^zGN_+OprKID#)rRGr>YzuF|1dD| zp9b<7YM89E+wJzF<9Z`8*6I9trP6GsE==T7$%zTuJD@VpS>1sV4p43HK&K)eHVo04 zW(R7(KxiU?eTVF%S)-EQ#f9kzE-p-BGGdXlbYZr;qSjJ_`hiQ|@eqruxO8n2O{&M% zn1*s&MZIF8yKmy{clK}Idf)uzr5*eC0=iPT5Z0hjo!0_V09*pf^kS2;S*O~r>xziI zdItx+`pzy8AdB-zk2T8hDO#`I^2mjN2EDhn*Q@u(X6<-~)s18~ewso2;Zb-GO= zezPj$(}oiT5TB0u-PcG2n7bIBrv6v_!EkW!K8rx@ap4QW_;Lm%N-GXu1g8Yo_OC;h zp@-J_(~!^L>_1!vHp?#V?0h7hv)kcB|bd zpWE=5B;6N5p=FET$%KL=xj`_Zp;D4Au)Ji#gu`UNx^~}W@>io_#XW9&kKzD_v03&$ z)#Nh*)$*Ym2ppa=dUN@5{m-7c82=S2r2jT%s4qY>)Zyn9s^`PS!3yS34U|xToYp8b zMEix$g)lj-BM~u>odw?AuvYGDSgQ%we0j^lx2P1iVzd{}^}sEa^21vZIEj3f-nB?V zCcSTRZQm86Sf=b>E1&iCpFITKZQDgqS4FFOho{(Z90!`FiB?rr+`V6W)qko5jlVZP zn>cQb6^fgXHvS^TA`cdJ9HdDA3?ly~k^eGvUwzaAoYnz+tO?>dyfe7&j~*V#cb$Y_ zlMwut!Q}g`=gEunMR4tEIlTjToIOgLSt=^apAj?(h=mW5dO(GL((G`Kc( zI=w!5TKxb>MQM|5BECkpUjb_Ev%cz&CPWFy@3w>pVwA0};*LyE74?t<4EpY1YSlV$ ztHwCdA5c%T?uYKfufAvF?s=U*5dpu$B4C804<}G%ayz49a5`swgi)-Pr7F+KKOF+Y zKUf4g)qoK{z8>4QY}HdG`_sWj#l?4)9U}g$ck=N<;PAj&(L%;mL^(Km2B7PMzDf?z zuNs}B=RXc?Pn2?K0r`E+&|p$)`TN~-@KzouHqQ7aKc+a6F25Y~Meq=~MEqHr!0N7x z*WNqB4SWLd(0uKSVB+B-5GA1V^f%3Q{MV@EcFs0qFaV4Fn-uUUs!4ALXge=NsqbKS=~mGpSz= z!VfP89~R!oOXAP*;Xpa58aw4dtc)~e^^f7l2-%48OS+w~9*Y2vr8t51AGYkQJ- zj&pqY2t4Ww#j=IWjDlE1mIIqgvY|*JSRGlr8LlmBwbigNHm0NI&=VsFr_+RCQGM@d zFv1$#N((Cakl6-qZ2%QnZO-wO5cnW3<%`794EiEC35BvLf{_b9_`G8F;+*`aj=%?f zkws9CI7nRxANjmeHL-lJBwS$_cQg&xW~FfMY&++~pE1TB_X7q=C^H*JEM}lyw_vp$ zLB5Z}0$^NAYofhVaL)St=XerO#-tFG$ClGM&T)=&oZ}qlILA58agKAG;~bx8{Qt$l jfdBvi005BxYZ=%8=W#^V8*AL(00000NkvXXu0mjfF^R?X literal 11350 zcmZ{KRa6^H7i|&(1SdGff_sr-#U)sa1gAi8EA9jc?rud|DApEtch^#&E$;3V{cyYe z@5_C<4|8U%d6+e`W}m&z?6ad0YKnN+FR%ds0G_fET=U-?^uGbY_!s*m%|-zLE*fRH zj5ZQ@)Nt?2_|A(iK!1RP^c|CY3=#92snAz;m;b4p{JbicuonveD^!0{!+kdGR!Hhr zdIC&15W!>stPwOrN&&-t`^Jk{M67CS{lRz+M2pJmGdGp9IcMYJ7Dc=Hl%8)7X1*#X z7r<-awZodEWj7MLD;%}OicQ~i-(IX0-S6qXpXu;CL`m+t=Os$s?S1|Kgc~D9m*1Fs zn`e1PZNh5J#?5;KdzC@xzesyf#o&i&() z+gdz5)|d$QoeC*RIFw9M0M7HwC%FNk)F)6Yr}Z(`dOu z13VN&uP*$7*=WN%pQaAChWE|;bb%KP2d2mj>^ERs$fXmi)u+}oX) z1Qwr1qn!WimIs_Vjf1{Ue>uTf11l*2zQI_HudLJ*&)G}Tsm#I?X@`O1Z^1$laRW}R zj=2UP^ypx?G}2=FKz!91I0S%72@f(tUq4V@(sQqg(@4V;9J6A(i2)7Zc`M&Qu|1qM zdW4l)Cpoyz^QP`j&H(Vb+b5V~)vJ{u?*}W8+5yuD{76-5g%SL$wJnZ@y-6LvGlDSkIk7`1 zw(Q5!@rcg?a7_Ev;jeE=df8ve;=7QHPXa~LcxVDnWboa7qs(Ze(~wMk51n_JOf<8= zgy>I^4_?tv-y)gVj;d=}M#fvaIwH~n5??yZ9(VjWS!!xVL*B?@1#!JvFVmjBxOnyN z+8PWZVGnR|T%K@CBs*nIpo_?Y32-!p@agJ$vX_SF45p`Vi-ed+;y9qG*I z=Am=5XLq4iUka^rUxZX`++0ZAek~z)p)nXGeHb#rcSXgl|IQ`>kaDt) z8v{#U>nE-(JoWwB#)p+xNGY*Zcfg|?jj{vgWsOIVKej-Fwscz$u5L1`W^*wg@RQ!K z!5v0mZ*`PPn~#3ZFQq?BM_5w(%hYu@G9fUK zWxp0d6x`_Ff&evn*E)cc^o!@0qNXps$E^Zos9^^wpJF^ls&Z17Px`n9mcE@IEPdq9 z`hwu8sM4Wpg}qJ>TlXM3UNHva$s^dkb9wBI-l>42*6E>*-bXo?Ewxymm= zgOU?n*{QX{MztOg-m|y)g*L4q*q>Aj*YX>1?4MrIx&R(qW@uHKy#t=k(}vyGi(a<@ zv;Gsz)^6`}t3xrtN6Yl8=3CDE{f~CJKp-MfkC}EYfKw+pgJ`G%;#=v8QQ+cY(O1U* z1K*gc*;$m*pYp_5b+o}|kpB$V_*Ei)Fh=wU=h4~kzvwQF)xD`?ObXh=VfK0S8S&KP zR_94M+A_Gp`Pz;8gqkJ1mVX#fJUqcmjWY4WH=P(L7d^!dW`r#0+pl9z9jf}zc+oOB zVYi+a*Jr51vnaP(0uM?P6JeQG+3HPz;bY?SaN6Lz`%C)?`KrmwhF$ZFJa$=8Vnu#p z1QG$n8=2d8k#ln2s2UF!V>nG(+*`@uBqNp<=iono zWc$0&^rmf`|9zy|a3C>yhjF8seEOZw%MHaxK^)WDOH)Kv^#D+RSxsUBRXmGYS zQ$z|kZdhp}-F{1-a}o{>?8{(bQ?Z447q_GGQ}#o&mQp0@}DG#eq-M>t*RpzKi4GINc^^ z0xvLFR}(i0{jqtohHgrZ!p;S8^AH$Ad76Ku7dLchsnn%ChP!g{hf!jhpoQkb zuqEWy|2g{xf{|vb2Wz3BiZM7jA?FC%T#)eJqKpZGN+px<_8)#ysTyF_#3DO++;?OF zy8#H8K+IpePoXv}(2wpIM)z;1|7>Ct1Cnzo(>?*%xIDfURAIBCLg-1BR{yX^4=BDS zUc|7+x;_`1X>wV*l5(cFl9TdUJTl(p#LVp=1S0#jwBwJFB;!#Jbm>+%CA&r6a>tkk z-nP`@iPV;|mT&nH5Yk1zB9B79Js~#vWTu8th&A|6=l4v-Mm`TCkVL4sm74_+!WuIE zO37u=GpI>wDwCqUwCJikzUOTjnS!w@L&vK++o+Cx6fs^DZv8?e3%KE!qSd;ag_2QtgNZUCI!qQAkAl%x zPcnt}(jlu)k~J){leI7?C^HMIPLP=>)G|l_R_#8CWCpr;Pe#bcaZ)l(@Et#`J6_~+ zlYNmIV#ZV6d;G7vQ#7{Np@xlqT}r5h2wZ^`VM7(L$%El%f%t;|H zyQQ@!NIY|~oXF;Io}#MdX+dG@+2?u;u^J0m^cKjZB&hpkN2YCmET$k&)LYSXy!cEr z^8DUeYV`Fxq9~N;p$2jTgw)T~!+_7(i>`?nfs4F?UKa9I5}t_|4?%YdwWWbKwEO?VgsMJxpfPVbXfl>oA?F6?c*<9l~@72D`k_1QkxC)XCdmmm;UH!(0-jlmQ|p=Ek6 zLwa0!;NlaJ%TAjHgKmcCFWYt#u9)m>t=?=BRAi-za?uITGU%o*AFpIkA!oiQmIt$f zYfI+`Q5Xxb&?yQM&Z-eFeq;u(YLhUJju7d(?CSXeoJPLP93 zvZ>2|OssF)w_%4SJ9kkyC|jLm&&$eW$*OH+&)wnEb;;?x()3KF#!a=;(@yj|6b*&j z+^?mS8JF&kI?v4nkT9`xo$*2C7JE8$cmZxoU}Dy26ee>l8hFWi=Y}f*ERBha z-Ck5ydoLCp96-LdUBmnE$TK$htRb5J5T9I}@^d_l_ctE|ADs8W5O!os*o%#00ZBm5 z@}c?9E_Gl}pM>ZDfUAHBi?Tr;f1>DT0BzNn&HV5rgZA{dz^3ZSaMznGtNP7w%Y0aE zqzV590!Zf_Kq!ydp!hK|0T0Zx)xTaOC_dGgW)mBi0 zo8uA^=Dddg{N1wmL9-Soz7hVyxEH8P>09DXd*#r*5=Q_cTRU#p_b}mnf#xA{-Pt? zGq!t(l`VGxHOqpeiRrl;IjL;=>!5~v9sQv^4Ue}BT@e#1iu9@LjX4u%#>YcSONcZ{3J#VR`%ujDesccj53jo&HjoCPb_92 z$|Z8u=6ya=sfd&%XpzpISE!&G2HcvteHZmGmlxJ=_!jARn6+Bxw9(w23!NN`KDw|= zM7g1N5hmE*2V_SBM7MGQtR6vKpQHP#hDb8y&qL=)nm(na_^kEtW!zkoy;T9jTUi0J z*8GDCMAFAHX_u;{PkquaT?9v$!?V{aPCmFe-{uh$-p(t(3?lWwE)5_GqT44S2k1Pd zm7&y0`o4s>KW5>)-raeUu%OQ$0=C=N`izWa&=t|=Zd20|yM9ax19j^TQ@uKkX{4F? zO8;U|ZWEJYSSQK1mC$r66-{KWnXPyT9kkp)d+O^Yin|(xzD`E~P?5$7tGDaruhh!QoJ5hz-PZ3WiLR;9CDU6vpQb1WQu0TrNj*Dr4=c}Om5s+ z$jq8!u%KLUZL>`f5`?z74}`!B%d)tWPSFbV&%~N{S*`-&3{S|90u4CC0)txI`T-{= z#`uPr832~TeY4x@5OGGWId%&p%&87e_vo9~=$93b|M-cM1_D`kbwq3p<_yMi}8pD&m|oz=MC zL%dA8QaAzL1WJRgOvvJN!6*gI>duw7Pe&xq>`Xx$>66f4Oa?wN`WoahJJt*i84gkR zRM?MR;%@lo6P>{e#IMielCLj98&vO`GyqMfUY~Y;N#`BwwwOQ)4x<9@ZB}QGCEX1c zuQ#>1yH_t3k7Y&%JKi)d6Zq)k5Qc)>0d~Opgd^kh_37Wur#zj$@=tcwVO`Q>n6PAs zHyE+{GSqn2KXY)3H!#ELG$X?GWK@fz&1vmPqkZ)Usae&BJmP*cz^mJb45I2b`<|Dr z;7e_y?q7Kju{I%Xj*jhO9iKsBKBzHDD6Fz~qQP)?LhvWxXoia{bPuDZ7}A0lnoKuH zcKOpGs-mOA6yk~vpRRLBB`89Y> zp+Q6Og4fKs3FDUg3$t01UH2~++?+>EG8PuiytR9UNQTp+H~_Zp^nnE0l?Ud=Ier`y z^U(zh#1XA_E+aM6QAt4~Y7RbXKxHsDX#s^AAO{7@uY5yal%ws_ldxW$zHd*IuW8kC zj7o%e+cnVVI!nvfNypdI$ML8aF*W;D_2jSy6PTy{(&u_N)^u{Ttk1FVZ2F-IC z}?cKa5Z6J_Qi&-``L2@y4EA9(_B< znP*4Wohhk}A5R>CqBkZdEk%rnB>8g;45rn!KxMuA zRJy3SGds5JJdyQG#S>_6HQJ)+PF8E%c%#Jo#rQCggtqA)+H25HdC#$mV9(pO+AYBY z0nx)nFp4Zp;%uJ1IYXV{xU$nwDc7{*6Y}nb4p6xTq4@c=1(IoyIJ2zxDt!c;L|ypg z&@GYiP*lXMbfMMh%2bEqAvV_Ys2biB%KBcIOqyuQ>CD+0Dyi{@<7JS>jX`RK(%-Qhj z>S#J2#n9JLboxr5Q=^~|I4^&{NozpW@SuRML^vzB)U7lC6deSvMi%vK@FGDl5(HRX z)m#2_@ZR>8Ey&(v$A*&xkIm^_+zolvdEMBmum)hpo?^9o@tK_9k|ms@%gKWVU{r9O z+9j3ov9uk-CPDF+Z}qMivbm9`o!}JT!9vQu&76=ogvpgUp6sWB_Kl%C^d>Q*t~Yl6 zOsKwW&!!Mdj-JZT6Nk2Z)~xBcnl|w-v1T+3tby9eiN>lkHCG5nQj}HbM5;^bhblpG z`vz}EB1w6ZCfG@aar7*aPwz+#BCzO7&@W3tW-WM(u0N5ZK?`1JE4Te&j$_vOY#=6L zhCNkGyH>Ob8&V~B$S(oVX?KMXA8f5V{PWkVhr7h0WdE#n}rH9dR-G=FZd6 zV*5A|j#**Ct+yB$tmqV@P#?1Y@~FHIO~Ln0b=U?tjjp>6|avFiECvMm>YX z47nnAIRU!2_u>T|tDl$dg>noaE`OB4A)J74vF*{!I1^n@hp~P;3T;Mtl6W;p%q?$ADk~edwxN6eH|8OVonhU}>#h8kmeq83D#7DX;6X3iH=G18*r5iM3JlaIgQDzW0)cl0H!2)sC)qjkc2VNdcPC> z@U_#eRw@y^7Zu<>WPCRxHaK>&%;&tP;1|B5=?aW?@*ZXaeIet)?`!a{8z{?7CNKg7 zByI27*{HWiu5HeB(gk3iuJc$t^ufWE7QD7rhr<$uzgl+-b@W$xeRl$nSou%ya<@(W zD=?RjbzL2)p_xh`E zx75{t@QQ*?dun|SL;Ys(;%4zjZHK=wVrDF@IJYu(v>eCutYXaFzR`bFMHYyB+=xsL zRKd*bIXf|X;1KQB8;s<|;@9(!;sA06IuMn4@Po~&#kSOotSHo6M&~MAyQruVdl&3T zX-o+)Hqm&)G`wGt#pCm0!f;t%M-$9=iz$|UMI-rL*fc7x5E1%6ew=rOzV8O&Ir=*( zgoua&1{B#o`cbu$L|TAwN|nlO+46~hW%lPZ8~)|BTH&1Q3hsZ#9$a)7)a&_AymbYL z3A=9+7aN+Lcci;*?hFy_tP7sdYVxanpqt{nL}`}jVVbvHdz-CF+#HXfyDU!(^FJ`G zbSk-H;f_4UkhpQS4v0|q-JAKEVRM9Yu;56EBoAIwx!k%z&b{?`aUm3cLvX9G0vbF8BU;^%XD5%fnz<+b^X_r^`*ZwQ+yBJ;?huj7C*{%7a@R8ALDS8<8x{nDpkUcrUMQC%SwCKKzL+MYV~4OsHS+{J^q z^H^5W>c(!fn|$z8G5CT`C=(z#Jm2JUhmow_RTuE@C#H4n^G*XNq8n$|=y7*~mder+kUoNF=OEM{VV4;cYVGuD^JA*IAImEz0T09nzd z0rQp&Y$SNIK-9O&11^a1w7rvTkv~X(wO;I--|12h&qu85BZ0!fW;V^N84m0!fn=)r;`uZi_-QQuKJSF@Cqy@nw)F)6etqquqc54 zbJT7rE0A(C!tu=JjebSglu{Mpab+e9&*k}T!r66N>_b3rg@>#tl?}eMs}DbFts?;X zEfQbKU6h#*xE0gEkV&z5a<=o;m9lWKjXQkUyC&xBi!fP*NuTSy^L3&9e#!*amPO;Z zI?fqw|Kk=;3JBzzEj9N*?|%F+N+HbqG8yqvmuAWZ@Sj2!mf0vN8htrfdel=Q5uOKD zE!KIRzXgzSfO`Jt$&gD(y+@nQG3z2WWhxNVAI(eco(aJgn^Ud+{FNS9Pzv$<&wxn! z!=l;Y+>=rO7mIAe$`||3_~L=DL%73ZVNF)DCFWHHkI(pnRkN!4XRL8bP46Emt*g+I z2*aeELztT|N|DFnIegwd>HiA1DHjsIiZTqSy8YtK>hTKW!?o992Y&6UF9Coaac=@r-x%->Sx3=kuCTiOz6$J%ra4L;T9?r+=j31@~#Ch;j|K>rLGOlO9 zy-T0x$4tQ7cUaec_gy-g#Rn+D?MT=`X%3s3E$J_#TsTdZPFAG8CP**#!2u&V=q;6C!Tq~Ysd}FIwZ_1K5 zN)f%f2#!5ORTF(z!DTsj8jTV&I&Ly^7Fc@Nc_GOsCYM`+i66MsX~TEE|Cv{)cR-J= zWw-R~wxp!;uOD(Z!F994>f#!kbk}bsn+eu(gWb`T%G>Mtbry)<=Xa}~v3;WWi#Lv# zhbW|%lP&1*Cwg^C@tp*2BCFVJ4uoa!HP$Cr%KzTyj2QJCMRoT*+%xY`(6U%>B+>j4 zyJiAJ>;hMwewoX%^*btb(!rnfWlb;kT}elTKLMNqmrVP$5Di^V5f~>cf^6w7^W4EfST>8)LZat=2Z3D4Q1!e^O<7J`{OL=Y`R* z*duyM{Pd1F7dD8YV~ZJPf%z2PIN7;XpM4m50QecFNKcFR6)HlA7inrMg3W(d7~{TP z4KXjn5|ju^Bkq-?Mzfg+iE!#m*pbE~uGjl*s`tvQX(1xN84&s#P;3YAsKcZG4Q4J6 z5v2eMl12Q%znYf7?7dmhSHWPho2+?X|3XMGyUp#;c4x^Ieq z$_}}C;u6=>psi#(KPVVC1+bfZc&y_7a_xXMTZX+VCoMr)Ocm>mM|k$iVPR@tL21v} zUNs0iVA5ZpbGak7@G28TL5-Vh3&a8hYj`?0V0dLN&C^hw4d?$m63|d0MzG=3bdv>6wVLQKDPlAjU z;^7l%3NL(#QU8vdu5y@j@TW4IN*l#Ol7%9cgz^?_`&bVvsBRs1tsBtkCQ%h56XXMW z(MXoX^)%Hm;xn~HN1$Y00&J@+z>YLl?0pZ4j8J^Lb=y+*y&8T=#$E&%F+V-8)bN!B zS?j498XfloycV6eBt&@@VC1hL3!Rg2XP@nSYl!jjje;V0J7&NfzbX|A>quhd0!Iwx z@0(rq){F`Uqz?JM)cDAe^88{suO<)HD&_n5-pfy-hjEHHNSNogRyZ-;z z%=@4(=U!KG_@N$E8ZZHbtHe-a*TCreO^Hi&aO|9L^L2!?#J`Sw3wtyQnu1J}C#1F1 z*}pp1*{M)c8#80bJ1F8^J|eyyp{HcxntpMt=P~k9&v95y>6kWnyp1saA>wJ*`(j7x zY}lsTg1|I!wes9>0@%LdWYGRY8C;HjBOs5DkONlQ=Bl1kn#jqa%^fZ*OJkJS(2}ls z@FU{zBPwnF{9fi5n^}MM!_-P=k&oE{{1s?*;|C{*`{Upe~Jr4Uu< zI!si9@Z|(W|-O{Oa>0`esJs!C!C00HI95A-9)y_sgC;Vfv`9a7#6T z@aWu0ctPlm3<&#syt_7tWNMeZvH3Dk*R>jbu0!{Muw1WfOprSFj75{ZKH%t4A@zD6 zp&vZ;Q`<)7gCmW(l29y9boD7T(5cP5&qX$D^d04jp+G)j$L3UlK>6U}>(U48EEXJD z-}=RDZYKn9VD4k1cICfPr@ckLKK+9%*0~6F?TK(J%Q-XCifoG2lU)SASN%YR`}RRJ ztU1@Ywq>)xK=7$u`_B_Lx5XCYN8Xd^fE#(hnCz~b`J0dj3?4e7ph($yGa2Oihv;~# zqcf72eq|nqbI*L4mw=ewLcBwHhTKOloFOU&LgOr|RNrwq(66|@u4qwQ^txwVZ)3M6 z*v31Q0(YQPCZONx_>t^cY07T!@H=-!&YJW*e^kLf)zBivbER5=B=>?F|eTsYy z2&T>pp5S)MeI=((VXj2Ii?4 z$Y}&o^)|3SuZh2gPLZV2NY27H7Uy)mGz>m$I|}7|Incu|iDLU)e11sac*XO#4#Z4QZny$9DM_t!HRm7C z{b}CZ9%zpIz4+eRk$v7kbhYAgB5^?TZKZ@ZiScOYO$%qz1QnPlXl0M(lL09FgI5)u zn|eS1v3zxXyYBvx*+wE0D8zXBT@ql5jWq!-eF}HMyMNFRxu0lUWQeGd_~=dZtKNw^ zVuRmra^KC4^F(g1?%E4fkro?vB7ZL_3wlL zAtG8|o^Jf7@7Q3E;Cy|7?0S`0tZs$yC}|dY4?GL4|=}nvOAZlrp`P@`lE1B|~T^NyflLVd+P zmEPR|n!U^6UGq^Y{e+_(H7BvVK5D_fz-@F=1XjwbB&RrK;S)=0cJpNhBrhgubB*acF2UOLZ#? zKlnEEgdF~nGsQ%)?JZR4I|)(uj$O^A?>qa)^NrFoJZf(R2GslCe^0}%~o@E~3YHNMxzLj319RXIn3?`a2B`L&75Y$bv z5m#VStHtWjVea6~Tju&__G?9^=Vwkw$}UWq?TI9m?xp*ytwmPOi9YI}VMXp*dxn6g zp4T>yT49W%*>FPJp_*AKBk-6+-L7%^r!PD_LJ=yF`N8AH2z)yhde6s?%|DEXtW2l`N7DSyh5t!@U-48 zg3%H|Z@bq`?>ZXl?ES-LZ;|ab6aU;vMdtkNs4m>xa;KiAO|$><{4LASSf9JM*48)J zV7E=N>Mv_@NyTe_?=}e(AG}cngXScX_6BU72Y-ePF$X5Tf#Jv(Z+sOiNyE^!U{%qi`W#?8acFmQxR1mp3_HD!Tb4R+m z8*ft3FG*0;L*3w}sI<>)aLDg}4h2P=yn)Dn$Y8XV7XPz|uM#O1@}YIS+mJhq6zfF< zdJ0nrwQjz_bPq2sLY62HK6LB8mIGIC9s)_CLt?h^5>P6OPS3>bvRVA?PxP+Pu*-Mv?Xj=z>ThT6| zxQjQ_yTmpO08lgx)-R*c41p)fh+BI1xt&r%aUU?v0p>C!F=z-!P(KEIW^wT*d#h6L z)ENFMzhh;9R^8g-2L5|!bG^neh>r6$Ug_O@hGof0yyUG->??Nw!7cX+zPVi!O*R=R zQ+tH(XC7m?T_=TzJCKl;1yma-TlXQf@KbfIT@TzSNX6*LCt-M&H|CM{8SZ)oa^V&= z`PEIU3zHDVpr4ZY*P1G1EKwl!SnjWucGf?7S8*)Oz$8mN`vUGuy8AO$ZHyc(nDsH_ z$gX?6xAT56=TV!T-#`06@~SJ>?u=IstCL22C&h--@!l8oW~0 HH01vP(?EKU diff --git a/www/img/stationpedia/ItemCookedTomato.png b/www/img/stationpedia/ItemCookedTomato.png index 84bfeabfbe0e7f83543cf6a4ebac29b91611019b..c2665d1fb33200ef051f04e833b08fdb78cc78a7 100644 GIT binary patch literal 15939 zcmV-JKD@z+P)jWpb#~WOPtWU_?)SXb?5>{qu>!4SX~eFlkuVa-7-)=iX-uokGc|TiQ+TG;uhe&3+7ALcm>o)pUUmSFGgG;xp2M}@`MChU zXIbRh7Ts*StKa>kT+1Zrs(GaLv|254tzvf~TaA;5R}iI{q?nKAP|g2wvL9&zFc>Y8 zKrtMgekMb_wkC{Y3Q_oW%OVf@5QGt#hE5io3DR>VA;O9Z6p(8GwaII28}6(KFb-y7 zU&|=;rbWYWPU9%0gD8I4skt=!ktIM;srn`DHx8by1-OPq1F*wxNDcbOg#_Bm4q)B5 z0=pF{PA_TSLIp0vwwfk=yVIiUmidCSbNTioqX3*ru6DZu{$<*;D!{sJH7()0VMu#u zInyM20a?0yd+7?mV0RiCbu^Pqj2uv^{4#@kS_OyzY_727(bhBJi!34=<@4=sm%i^W7<997dZ)k4n!0QSsM?K|P5;u3>$L6s;iJGyZ2{K}nXo83z0+T|0{HXi zM*_B=>UZf4j314B8ZJWdj&E4pjz_CeuJ3~Pw$+mHS(X@0D9Vj)Pt5oHG5yZxpFh`_ zUz!4RA^DH9KP(EcZf}DKgNhpHYvZ~V;IA7K;h%xB^q-@$yl@5Jt8`7199^bk!HGd> zq-jceUWfb-n*#W_M}&4Z@I3lvrc<yM2rqcDodMn2ekMuTjHN`&{fY=>@b zJ2adx=%XW_4#MzKV}9`j&?KyjR0$(4ofh*oV>(lFf!X4B1H0ciBS3C9;!1q3~NysTku6vXT{GIGsLo z{z8S28_2jQmw7TRn_RC)e**Jf!=mp#8a~zj&z}J6JwHDg!FdYsgc5c8ly^JN`;MpC zWh#Ifot~d)xe%jh3p98t5>OSm@l9J4D4Ms?x^uj@#D7F zq3sRPb8q*%W$)#=+wFdW>92gW_mIDPSAECx`)XPB;7_USJfAd8gGovk|az-%)5x)P!&uD)-*TzBct>X1ow@V#cK6zlH(;&ARU$5!7FoJL6@u#Ds zAx**sJp32P$o`%Eg#I$#-wU&Bhi_pwDjzes)$@x|fGl3p81b2!%=dNN?WeDF>F*z1 zj0BfYfXDQFJx@V^vVe5sg!~tB{~lFj-m^^dnx+81Ai&U5B@&MR&uJn32k)F?H8RlwURRB%Xepb)3U!e-{Yz6pU(^`REj8P-12Qe!NP#6Q>b7i4>MfEEZ zunFKjc8A=CT*u(ESJxKGL6V@q3I70v`8P4{ujk@LDL@DXD2!F$Nl9>N1h{C=PqX?( zSOH)^3;%f#;ZIYNIjajcWUpuNtH$6L1Q^#l3|^GeTfHvXh9%|&0g8Y;+YxTL`H8y} zz!z4mWeZC+V3K~v4;SxX{L2e;oR_Hp@mgNlm;~==UHb0f*(7K@YjEp5pK79enuWEe zoU}iS;jh8BLbL`4gy>W%p47d9*@+%ut!b(fHHh$p827_**|T z^c8zP+Ix5+zN%esBd(+bZhNy&R@{^=EZW|7*5kZi&6n8ae>%hUeD4D8Og$S}TD# zA+auEDZsCNkBVkzB4|nZ{^94ljZ6f@N5P`JlbLBqyeH4Y$k7b?y|+Mu zUxxqfA0AKt3%uH?9RKb!r1!(~eyl10TU7;g6bggSc3wMpCIS>`4lA;6l78Xu<1G7m z_*U`Uvt3lZR$Ehm-|ef)RRFF_EQ9arC(jP&L2aJ4yC>GTBk61m`dP+AFk_60cd}Uk6{fs(zOLb+cP##8cm|5nyGCXGI(6ZApF(4~O!HxFi%4VLFd$XPDQv?!Nu{ zjoXRFj$uKC zQvrMdeql_4ceE~j_prQs<7v?|pOOHT`uB@3nodj0)GSvkMqW=ge38Js1Yew&CDh;ArdG$3o;3sk zqC^7SH65~5>*$(XJ+T0vZ4rf#(uN>FYhy#a%a==vDpg8GUe1G=yQIL6PQhOrGmd&+Cx``DRb%Ga8y8wjPt4S!AxYF~?XvJBa^JlBV5lN_9J0M)6UW z6*+NKj#REA304tuRWvWH%x;z41*pZzNaF9slZR4!V$-948Q0odEBUg-*1}K zZMEp?m7V~9G7HFGELPyNg{s22`rEjKg_{-NZ$jd_Zo3xi#{W~t7(hsX96tIZsy0wa(^ZQ&RWjrB?-7)#o5XyNH7D>1Ymo#kVIPm zd?rDf$%+q`A?+U?&==mAcAZj^yC|*xU_du--J(s5w(W?x7l?zcX*c^Iz}>6;-d(Y8 z7=4vy`K0(>({fT=5M$xRbD<9f37(1oc4e+BS-*(qa{M_!{(f<=r4rBJZ#Jz}PXxOK z0Y>3s1wNah88icxZQP~PL^ahy1-_hx0{nsm8)yLz z_8(7u^5I`!l|*6%7{o56k5*Vx3oWC6^_qx(6C@VJ2Y{PRp#Xj4=q?EG(?J+bpaB10 zoXC3=Re!2inm&`D@igFTPs18%w-EaOXg9Q<5_>gtax_SvWs}>Kj@pn3L9Y*DcA4C9 z6p1SJRWb)qjsZwx=^6FCQt}5ahur>Pa?+?vs7JPd$*Lu*IeXMD@x z7iM)qW2r^V;(k2)U1zZ~(uK_QBw@d0k1`Gz`c~ z${aBGRqJ{<13sQef{pyqY1g>}5^ziSprJh(I#0B^sa$(HzXks#RR0@^Xa*z*P~dMF zii?e0fX^0Za@{ORMD?>&C%Jrg3z9#86uRxU0KR3TcW(5^>0e!eA1?yheDf^|r!zYE zgo}hI$r5r~EkS_cqeGf~HKHs`gclZsAq5L5%}3)gEf$g-JSK(=_~76W{dY+-)ti|J zj@?A%qp#{3Dm5b=Yl}Oq_MS*JnD}z+gc&Wha*cx)S5&`CghP`?o9*xm+PmitJ?U3(JX^9N_$5Zk*Ce#H9bYN-89(}@C z1$t;fEd8Bs*|t~#CPpeo*Dk?lW7*%`+Y?G4)~bq`phbG7PP1}*R)D)5#@dk8%`F;!xlf+@K0qd1%x%vi4?ylcczA;Fw(a0q zzKO$#9E?&YFoFd8aL#BSeY>v!OQ8S*sMCa11jeZPu?g90t)5$nBZz$ic{kC~^ zb43IOpGm;xLA`EV-^SPx&)waS+~KNCvYz}r{H=>(`a}v~sS}>kZa;Pf2oPvW0RVmw z*DK3v=t2Ps@Y&YE7w^WtPy!~w1i!D_=s<$c=2{lci3AbET&-ahs475sMHk-vK}Jz1 zNy#M8RcngU^n?l=f&@1lPmo{-F`Z@%zEps{@>@th8^r5y$C4!MbR@A0iK~}umao#g6N_-C3w&PW?MI?ZJ4w`0yDI?1acoH z35A*TG_QcqfHf_;?sddCoCKt&4eE6^$kI%ZVL`KrPYZxD$6WYgK`Hjm^PDtPXu^BL zdm9_n>u%6I*T_p^QOV*Q#N^$)MJ;cGwDBQ8oQiK81mYpl39xq)oeWJU-M}}gfwL`2 zV(g#m)YKayR`%sQB&X@n7UF%R_L=d`ndGSc0Z4fDjV+PX^w_5+&JOX-0&zzG+Pd1I z*I$2~Ow*tQ3SeRE%;wax9I{&-@~&Q|Z){zocDoJI&&W;@mtmL>W{b^H82@?#UKq@c zbNs>tuoYXD@Ir9XC-a}f_div9mnlNAc>r^%Drklz#aT`PKn!pLz0nZw9o+;OawJ%z zLC2+FDWlkOr4+{aECJB9ID*G5G8PV6EQuG$gVS$D}1I8724Hmhd>3 z((uvY>V3LMshP->s-kCpxdLX z+gtTSqW~h1pxLr%ayX`K{NC!wJ1(X(oDX6^@nWTHmfIw!#e}fQANiEX>)m-U3%-YO z=WzvlAp*22V5x$n#}Mm;6x zxsYHI!27eAAOT01sPB1fKqb)YULhUxDgg=-uA<17|LWoHuThDEz*MLow6YrdS%Y6NIOMf}fp$$}#E-nvBz6l{9v3la!F zmh!*(+LrKEtGfc9$Km*R6-z;Y4Yac3C_cjYVX6sLINP5D{KuK8#`uii*TLucBs#g8 zE8hju>?mSXZJnpXX&_WUtOfY&>lUig)VUhrQ6&3zZJ$R&x`lq4w&Y&=A}C|{dSAYC zbjlX>{$4c(-$Mnmv+W*+G)6ooz_%*oW)hrd!Pi5OZU9;DiOOdZu#NT)q<^(feGs5$ zw#nTbP;fY`0ngU$cWH4f=Ok5tT5F28Zs!u zH)RDKOsAsNu%`upm9=S>QW(b6N779IIzB|F1Vi*1K~SNM6n#^p7(LatJw*t0p5jWU zD?xv7bSOwb@G;cKf@0`U18XW1*+^RCqm8(Uq_?h=z;osIUeBZ6hCE|@JfTj~r)V~z z(QHb65Ni=jQaPyfMN-Kcw>$*nf^@@!J%HCI`g~X1o%hS2hNDL#T3GVD#o>rXXd#y4 z(%?#8yc=BEq%@So8c*ao{xU^dbg6II&B#u-(A@T)iU5zR{0sFCWwxf>#&G+z->$3v zR?J=W)`yeniFFKq%HXKy(Oe?g(KW%ef&@`kCfRJ9WPbsCVLmEm44Lh1^n?fgAx$Qe z)$cA>_K{D)0$?erUxDw|_hR5e5OOq=-!lnpsF-b>ovrcc5EVR<1W?u=Y_8^qss)4~ z40{8l8IDIZ=*jh+mM*~e6#@1GnHP}Yo&9<64XEjp6W~c?{|tK*{uWOF{vRU={vB~S zmBeCn?RpYDa?z%OjHkeB2=GE}+V(8ZdnarH9+y!P7uiU1S8lzSgZ zX77Rk#l4vXp68u;!7BJ%`NbHdXSa*fjKQyxAv@*su%eny<^AwzM2AOepQ*Y}MGd!F z?yX*y{y*oPe}VuP1%JH-RP1Nqf7Mb1fVKIbjeh9B8MMuoy;|ID*OMFs6F~sBLJ6WQ z7DTXg?3$eH_f>Ml3Vb#f>zM!(^gn*fi5czm8SNsREP71;F

F zSHNc2=DZMn3sdhix5v_Gv^6N6vQQ!)XFX_TaLk+fnjS0yK? zREgWMYSOObQ-50a{K-6cf-Gk3uKH}`K=K?dJzO43c13*txy8)ZB$ z)|}Qx+;&Ii$AF5eVjB5l2|9z1JB^UHiOL<{5jlR{^(TKEkH1~)V>V79z%y1p_xJBG z_^V(Q_^ws%I=CW95cNC}9_}t6zW}o@^0S5=`=N zl_2)Tumqop;3+^KM+8sFtPKSz=4|mIqhMLDGbVwpl~V3C%c|w-XXEN;cL7O30vG+f z8ik8?*|ja|_ap&$>?s91RKQOwWXAnA$e&yd@^TMz?H(WnD{&vTuYx)|;;s9W{q(>ozzE221*)aFHnF=Wui==A+RFmk(%+s@_6B_c4wu`LY{2r417t(J51{p-68!3#s#FpPcQR zl#a&~PG#a|OBtV*1*8MqeS0CEdq}PW;`%tx)7K5>sHLGRaL= zG?0$f5#-~JHX9S|JsOw90wDsN8z!8xDi zAs1BwaP_;DZ**40ycW;@NoRmB*4r0OnXo?t|1SajonFg;1e&zf>WCk1crJRHMOOx| zt@=D$hD7@_f7L%{s^=LkixNoiO}k$^pqZCVsnu%XLb7Q)hUBWFB#w!|eKl`1R=_iu z1*2O?+|9RcQKA_%{(2vhI1}$9eA86xdDQVen-5^ZC=%10M>oRDqG zbxB^XWg;w){AHd?@LB%T9C1pQ_rM-F$FrnTTG4{00KRF;dpD>gq?_oJ0NhBCvI(*c zu5Hs2g%GJiinB5Rp657QYiR6#lt#Z6=IJlRdFsQ7oyn0@{7Dqxw%O2rxt(WsuDcT4 zEw4+R-lj}YzfT@qrU`uwr8F&e?=Fa&=D?N4$(_t_8F!ln8sO7GWD! z?f%&;#Ey#K{*-$E)E0nF>Cxf7%sYrvL}26mFcE9-M_Ky*JWoGtX>0qbd+{C9Cm{g9 zf6r>@cdmCm+UiLVx32U^yHc-U27V-5_V#|OF6ml@u_`3-|K_c?WMD`d_x_b}1u_Ym z><;xvCUOiCbXgv?iev@>xmMW|$HRRZez8kIMKV|0qC%MjkpePOVWo-?#b_e=lS zeN_7U@DKSpuD63C-K#cXXpaFtli1)@?ozKO5 z1aSJUOX;GXoGi%%_&49YE%$pQnSFu;>`S-@60{|$#+BZ9nlS;^!H*%!mTCc2;AOJP zPxqfd8E;`1@mDsKEZwShRo} z-~6T^!n6V!gWtclMegum1^&8uINeXm1TYB>vRHuM?@MJFO@kT<#xqG_CIS0CB$6v% zR6m~~BvpccmaVEEqoyh@UK6GwNd@@D7-h0#riuiLOP>uj?%nI^}zOhWq>)9{)OgSgrc%+*F{~6hJrX4Arx`WSCm| z3+OF(NOhVU8xlyjWswU2Y{#SF#~;(gA5(~Gvy+epH@0c8HQ-}tv}IHJU_sfjysWJf z-dAme5}zhtJ|y$4TX+bm`;A+)Jsi{Yp==>(t`cZE6au7ylB^(=`whGfveu#D(NH{Z z^{&(IxKj1&O%C^sD}dW45?X?h%>!2tz0J3|kTu_FV{W3CD>0eBH|XJXBG zZ+8`!X;=@ZIsGR<<-Zj#u#Qut>lVeyqNV^`#2M8~emyV+9gWAxU$1z)Hw>e{ z3bOp&LM0?|Srz0xSOJ&>JaW5WV$`nJ*6JM4@|70e24nsQRKGwo$#QaVz?D`@{AgKV z7^G`FEM>om%e?W8*Gup@fUl>NFUzc71Nh&%{U)^>M?AL&n}Pr{|Crj{4RSWRw4Bbw zZxKebkx+t=SV`Fv6<&ogJD@f4m zrf<(Ce`&ak|L#zM@GuO20>f+Ye-XaDt^l^Ghk;otS4Wdc+r~TZ`j(hafzp z&<3)#xDr!jM#8s_4BEh5o47|0@%Fq9*_N?#gA$Pw_B;WLCo@XZIYphAGAPG}-l8w& z3tFP~XV@dfJsXH4%=7!REdBMPdGL$#DE(hd1Jp%zhfpLN@$+3=j0>dzrf!NnSy-px z`@$(%fFTL}UuY$NFrQIf|4Vzn#=x{>QB^StmKCrxohmF6@{A*Z@m_TrBYhV=IJ0p0F;Z|(S#)qB+S zyBOXpo^4g#UZvM}%u*&9^lGKiWK3qWt{dA2t;$m=RlTM|-L31?du@xxU+t5>e{eEx z$eYgcb{NUg*6Ah`_JLB2FpclS?}b@>4|4ut&$7{qt#fn13b3y1Rr_${)29omGN%%N zf9h4h53@D>eT*^C1^80xJW=hnGh!KFoXWjD5P}IHz^jm8d?4FNI9C#?NuaC(Fc2hF zdou|N8zO;2nZ&n1f;T~e&oKWP5a2uUT5CHEe9u(xvbwyQrcD-r4L}63ZdM1QtGLju zkc0_PkYN1jr{o`&MWU|KLGGMPm+HPg~`R4t;zp7_~KldnmO*P zmMPz%1*CbhB7mXE_d~R+@A-%H$vmtbhmJ$&Hl=f75dJ@n&wh#*Bx+#-pqc=+jRZB2 zm;}AYY+7Wh3$y^#X17BI_iiM|19&!)=e_nC>FB2iyPu28CYs!nRfRpqzU%?^TS9H( zv;q0b5sL;TnUULaXakAsbh{KIIVP&z!g|we;*t$&;2RzLL`guV3@pEyQa=4O5Vev1x$-oYySZ1n69(0({l; z|K8X?0lpx>h625C#lJh)>~6BQ`1NiNK$`;m!Z|U50FIJ8uw5#E1$B05^R2gNKAq8M ze_!bn(d;dkqAQZcdI<1RSw<-?0vrW6F%ty)A5DC60Zb6e;2o>lZ<$k4K}=*k!E^@p z&*QQzSq?w){ht8Az9lLY&oizJoYB!`b##zCuPNt!TdE0Hu?;ZOOlG0GwN2gEZjf$h zG&vemq~htf+tjMayDNrCvX%=N(b|W_+fS4rfsAK{oCOtkwUe@66P(ju(|!B&_vF})xQuP9 z6>BVE(1RdY%|)#f%QqrH7PI2h9P>jU{4NWgh2a#hXea5njI41X?2vR|&AH&XXu3oGj%qQdP8 zfB3%NhZ>&+z90Zy(E3RHrV6sxEiV)vj!#{`y3i@s{uBUydJ;qiKg&xpFbRq#IfRS~ zkT$o-bWW0h!7m7~N)(7NOiJ+Oy7i{Zz?&=Z*?c68NziMejVa*S#$WA;>Yt8fES+AL zzIAO&%ny%c9)b!u>)^97@Js-9aTXA8TQXOI2+cBYgSJP5+4Nr>hSA@^Dmif7qo--_c6ayyic)lh+uU{kn4iou4K2$1qD+dNpxspAs`zb@6xLAU7M+M-}QrmgN4>7Osj_oYM!vycw633WSi{ctD&r)5T6TY~6^5sf41 z0^I3@Y(+#?h5@`|+uk?~n=2e>4Y4)A*YWg>^BDn%kbsJt%GZqp5*LHa1VPDi+bZR9 zJUOWb6C`J27^C& z_^`Id1u5LNvw9BJ?$}XP&A=Beag{SeUyZgd=ONl%2<7uuPXFEKF5b2s%lfv$r7TjDpo26UA+4e{Ns`{A(gAGsk zS;p1RR;zwk4`;D=Iua;PjVHl>DBRoLUVY2p*Kz^y3j#3k?4B!~!CzJX8O9{AwUd=P z1`*ysy9EiJi2&Cv^UU9jccw1(cBL8|H7<%XVkwKdrq|RU%_RxG|H)^f6|gY@xDBxFFQeL-T>T7wwfehf$fD=D zk^n01&-Onf$6rzh;CtIQ1QA%;*9qXFwFRfB923BG26YuMoZ1>kFYi|8JJW=o%o2&qK@^|*vr#|3)>7_+1b2(y1I{bHq!#$Trxb0hGYpaLG&}ibHwfOyfkxw8&yAQp$JR5J|}pvm?lM9ea9+$7|W-F*%Xo z;TK=f1pRn2ol^T7H>o}F$p8FfdZgMwir&q42@l5P{FqJ7)h!CY9?|5{5cgMPMVLJ_ z)#&;g^k6tG@8BeqUa?3&O2{6gql2I^Vkn3Z#_>w|Vvu832>23Tt@;H%mb=(U%qo8d4v8y%tsRmS^yx}?K7&aAc3hU*zYM4R2a?#h|+pR zo7m67HxURm0}$z`-ev|&Mw~k=h;YumwitNZlmviJP;rysPyo+%rZKn4P^)6R^{9QqLK!`1F^cx;Inge$4N{rbnYc&stLw6EAnNbce6K9 z?UrE(@MW>(WN3}mJPb=fL&#DXE~#ZVspT}OikNr@_oo3Zpdv*pXj*dA(KA!*H=Zt_ zKBfE~#|Z_AWD$=A!wVYneXlF>ee+5W{n{4bvpqWUL4p~1oeo{yyo#3K(G1U)tzv^6 z9UZUc+_sARHC?&KG7OLdOORlRd>I>Evh*W_`>X&f6D#3}zId9Z;pnpaSG4r-t%aJ5vE%m7K!0(r+TPy9m{d zQE5S*QQT;djV9Lu5FN0baWycHkq8~YEtgB0Mj^#%f~qm7ccmk`OjuEaHt^X%(ic&H z=a`bj5c^C}8N!z{nn3oxM(^Wsmc|t24Qe0}G1!q)1Flhm^Kvj;M;saATA)%yZou+I z6#dIzEfzWA|0$7UtRt*p_lz9m?9tZdfNpHvKp8tAX-w16F`1e{TfI%X;&x~b<@x&2 zAvN$WpU1SEAeIT#XvuNoeyG$0XZkob#C@;yu8`hrl7TyRplmvRV{Zar=e5^Bq7AaY z`jYl$A#w)guuL(cVpa)vy$-c|8{{BAG4ef&7EnYa2j`iT^}{II3Dfj<2(99xJ_U(5 zJ`30Pp`_tjPXv6j=nAiN>|G>uoKfS)(md~Hsx%P*^`QWBj4fQiPz+7-T=-%cQ5;K} zx~_wQ?8xsF3BU`m+@fB)C!Txl4Jd~#TvYp7&z~#VLJUIob%4lYVN3@8jV+VocM#jJ zjNa=(nu^;{t--{YV9sZ@rp?$D5<+wQvLFs@68@fhX!>v5j`wo2rCa84>Axq<`*A;sOER0}g3<$5WzaqXKx zwVA=q8)7WLpU&%29<0eH18r91d3ZRak3Rm0ZbMa4$gQr{hmU0MXS2~J>@Rk4FG+IS z)NA0ooqDU;ACCaKY@OV0Y(xL!*U93f1&_h)RD}1Jr?i0P+Kct{=8eV?3rBo;Z)= zVYkeZ1grvYS~jJf4rQvhvl1Ap`guG)JU~?^qN>?8x?KUj$XT?cDh0rHz>0Dn0rE9ZMc);6gg3v1Fn%BXw(sfY9g}oQ z8f%Agk~m9R1APk}yJezs6C_(6Y%qmzp)84MHix9*h5?wFG2kq-QGzoy^uIaQL&VU7 zS!y+qjkO`;9U$d8JTK{b51{-d_}&*t9OA>8MgsqHz`w)&)Bzb;t`qFPg&y0&r#WKi zIZz^i7B6u2JlL>N?3J=4GL?=No zY0mf8T?d~d^55VTU&Og}7k_P#=n?KbO{B`M2%sylPcu!PFAVuW7_@`wufx9w@1r-} zIiWh5tU6|`30da~59Ue%@SB0lGpl74NDx`x*_SCU4Z?7*WzUghts?tTURJar-`|73 z58oLsBRW8`V+mFl{!Wr*uXEebmCKAub1jQpfEfeyU=dJ^~o%7p=ob+)N-L-Z7Jx4!D1Ro5} zf`#huwje>M*k@NRT3C$Wsy)ayZ3-1L)AZCxeiip{#>hYhunzoDapXCRu z+OKB;4caAW3_iO6wF3USF#rYlY#mhn;EH?>{1VjZ@u(y~g+cxV=j1Yuf&`9X3*hB` zwosBDTEciXk+Dwd?H+l41AY_J2lN!S6V7YTMyeFxEaTs@^Y+WK58(I0G(D9FK@gJb z+9y5?A#qFs2Hn(7Mj*hC%igOi0QGFekYB}_|1r*dB*Bkp7{zA>8Yu!HU?hqXT!aE{&A*Wl9%uLpVCu;zdH+Q4@Fru zV?811W1bljR2KRl&olISv1TU%5zs9EK4Seh@aisH5W$W@^gJd1(3>$NeoLLo-wP5H zrvTefXp%DY=CD+&`|uqziM|(8cF!h@tNy5-#6x8+AUM zRD;JTK#d@n|6Y`&?DvqU_u+TX3%0NaWs>d>+BWS$H68}x&bDjc&l(!-&F2jEy&J98 zj;Ea-%~0);)?@!+F)!{}5PqcAzh*Lp0V0UNBsi}fTBb#A#}j~yZ!nr50Ka2%A>Aeb zo`48bCE@)}r=Bm6-ye_8JR=BZtGS8TA|tDTpC#u-c)AJjkNi`AGnnyaB{7dvfOXSP zU-MxQ#vcY0ziV3BU&QlU${}a8vk$r6U&f#E^Nkk$5CqtP-@j?wI}wxx;M2o-DEj(V zyLF*U4%aJ9#`PQUe;3og0KZ)YpH-j$UVw+dc&@SJuH7w;WoxmlQZHq-lOO=k8GI&! z4FY(bQpUr0L5Gvc>N$4MjpA7_9oWI4BSz5UR<|E91C6;mg1xpe^SfKz0h`=qa zP=M;49!Gu#-mJDPSfnJrAVC5CNU4S=2(T&U*8}BX7 z1%K7y3KE#75FmQof!cZi8AV`B+K|s-mIaos|G;0wKj7zHTPIG&L&P1EBZYSFgwu?HS~s)t zG+|$!okH9I82qncPVd9NgXjATfbA=Q$5Hu3l%*>#tlM(WJ+Ejb3-oCAaTp1&g3mUc z2DG;)f$_Zho{KVun(RNR3Gg2cFSNE+zi~wkif)%)U=#fmu;ct`LccuI&wjT9{{<$3 zpV2+c56{{o&g-}DxsdN`Tf$GXf&^hwj^P;zoJ^GDqw+(LFpMSmAl-fV`|uB|1iYv{ z3HWTriAz`JmP%Uom`zv#)=9t$@FGdDuX=i_;!c%UiLmy})%771;6K3lZ$jR`br$&R z)j$4ve>D#PlB<=wR>5DrQwg+Hxv>fq#`t5*3zbUq2HE%;#=(0330C(4^~ z+RIoaYaRIPM_2(Ebo&h8s|v85&P76h1!Vo7aEJe_q0!IScHFK0?qb&vAar|OvbRwA zwoS37LEa_dOjDx}J6j;Z6r`~$nPu!Ul^-q=&WWWmK3ymUFdQQM9%iES{<|U9*tO0WBaNlC1Wns(L?d`xt~P0~}qHcuhN^R!__0qBg_ %);Qz`bivBFdd*`0> zRN?z8BWRXc9N3#NaKKFwQcHI;9eSm)u#ZUa5ao&$i0!}Nl#5!l) zkAecM_x_72z?%IZ<1qT%HuU!#L%)mXJH-#ZD?KqX_~#NJKRrL``T1b*S^9UVp+Dw^ zCw2H~!DllrvgmO{;LEL(fED0nkf196>#g8|rL}|p{R{AWAj11ygZ>oWwZ=!|Ge3wR z{T7`KTowF<#BT@>{ER+ALt)8h0_?07PJBP(@hv5Psg}dWr^d&#{n%0+IL;E<+vLAG9`^zv4 zk2NwUdNr!NoV%J%L57U4iYpU&E^_^>;IkP|^U*ZVgtK{PF#km<0E7Q93~TSAGuA#y zb4}%9e=i8QFW~=pZo_8lf>__n)&q085 z&(s01)-c7~0{BsulCIU)#Hs^a2Ka2ovwZw8i;?`8woQ{fy-tLe1wN<5JY)S?3UKOL zU6SC2>k`0cus?V>4?YNyv73(jT<()Xi$t4M;Gboe1wNZ`8Jj$eW11jaOoEmsiSWD? z;56{rinN?Yf~Qab2LJh8;tUJYQo{skv&-xG>vkywV4I?cvIpp4T|=iHT(1D~B*x!_ z#faV-s%rT7D8M|XC@uToS>N*)mhx03lAb~VJWWz*oJ1lf;&{@WTuaJ%m;{3CRn=?T zavX;dxlNON1sH$tJ@)Q#rRU507k1g;vt1ei3iFdpx*>_+81>e0o=ui9eKPV_&!a^s z{ArAfhU-Xs%6p_0rZD&~!gP-MIrsc^yL18+RuEwu)i6oQYz~7mnE`J1@nH%0R9x`# zE}5>!!W1o4sV?6wcv{t6m*7?NrUtD@Ch&2%25Bg1pY;U&-UCE;784v z1e{XyG3#Em0;E}5dwvn%v;C1#fT|U0a2~8LOaY4XG+j8`ivpkRkDLNjjY*JYnV5T3 z#OdWIK$@p76nwTnk_u3@5dH`x*o`E}dR}+7%T#~`_DmWw?L20>C1QwC{r_M(f1%*B z{gEd?VLnLkdtpeUBt7xli%@{?`#v4u{1 z8zq_WzLC;Z`|@jKw2Y-g?hj^1FZHgCmwNgi0&_Ku29{KSVT4v-=rr)$)$jYL-l) lFAfd_00000fc#&}zy`{9o@`o8ki!4~002ovPDHLkV1f_F>wy3O literal 11086 zcmb7~Wl$Wv_qKNzC@jS(?i48Q?pmO@yA&zK-CvN3lx`KC~jMz6n8J~4*%!( z`Tg|HoFp@u$y{eL$()>=J6c^;9uu7u9RL7eDk{io{x?GZ*U;Yl*Z&g#JO%);5Gcw@ zY5M?=JWb-r4Kn^luf+`yE87Sk|Ep>lS`o9nZG^s|0scbbc*`=iDiEfhq#sR0N2z{G zO=tR%rJ<|Hm$U=bXFpIjWCt8=vUtgP3H@lO^8ROz$#3qJ*~6Bllg2Tf$(r%FxZ%4U zk=xbbyUH3j>-M8Yo5M8Km0>c06S3QXwRwCia;;9DFg&`m&GS1MH(~h zVZ6vL2{{7M9bWf;|BQL(+iK+WQ-@-46Q}Jm-McDp(S^U>oA=qv0p6a}W^t@z>UABq zQ2c8yX==BF2wV+hl~)4ReoH|y5C*Kf@*&8uCs|H}2sAaTG=M^BW6(WUh!b-Ib|mYw z19l-jLrkO7{#e2MZYE4iyhj1o7%UWFmb`h2f_n00R;~G3=R3}GS6Y89zU|DQF-2CC z_07=8?JuzIp)gk}K-8$0Ig;p&@kVlp^=Ps$4I*R>99ImH^AZ~=AL1~UZm-Z<78g8b+<~mO$ zx{UC{FEz;dj;S^VdlaL|H=0I(@?H%@bIh(OdYB``bc)C90}5L5)H_`NGF5SiyoQ3~ z7>@XWdseP@n5VxjGGkSKZ`|J}{=f+Z^(-6G?XO;r?8<$YSk+%RN>Sde6IJT#O`6G{ zEj*P_de-m!{@59~`g!&!oJF#E&3%Ul{1@di3>}_rExng6^b%Ovknrnl{ZuexR#9sj z!$dP>h&T2XBQeO0(Ax%OJ&VMrWrUUv(J~Tid9hI+(yb0UYp%w#%xx@YIdtxO{d{c_ zAwrz+%l>XCCtGNW(mq{GsP^_oEmVl;36a>jTAo*DO`k6a~iDQ*+HavwneRx(A@bkN5(K{yS9S zR<%^5BEXmT_~X!+aK*c)5eOEKX@A))i+wu!UzV68J?uGVj(_(Xr%uI=PanEo01}Y{ zT`1<5D&JW%VXrU2P99pdF&1JCZ1O&g{YmB~U+L_#?}i z@+0??nD+CrAik7XGv-!hElHSV_(9H9)iFId-nA^A$Tee2xcw`e1|HHQ23IEYw6t+R z;-v$sjVkoZjyoi#%ovB-ma-=YKykM=l(RN)muJxkpfpdiH~53JFL%A9@D)$)9s6eK zH+>@wlhR&UMg@qUymXgDlU-3$z`J3AQTBYGr?x<6Q=Bbl{r`IQVnp5cCpsz}A1#6f5< znMS@p!iy&T=jBaF9cAOPHN=j=Xq(=e^*79GWg1Z#E*VjxOXE$8!@h(5-=}608*YgM zWUe1{JbTv(0scvsedu_+wE&m|dD5O2cDK#h+ok;*`_t(z2bbZ4;Ch#@#V~; z?nk7+96AN5kWGrjj6JkcDOUrU2y@HL##21g3|SMn*WKz8{70wFD?Y!?AW8>jo51yvN(qH zM$;7Kz`3-b5xJ7A%2*k4;nzxJhL1sCyx+A)e5G)llfz*5bOt__ zJ}fvI$h{K3i0}Cj6uqGk;_c}DSdP7|d5u*npr+!OTdC&<%6DPpE*mR@wjhv;~lkp&zwcZ}N$m zgdkd`Y_-gSdkI;@F(N}GwyhfgkRVaQm)OsAXzEE&Fua8hXcz$?Lx)2}m^U&&eZ$tG zl<(x0J9S{0_P*QKkK34Z2M_c`kgLnb+n48{`?a8}HG3-2_n#r;Yz1a-fa5a(9@F`2 zPbM_I{&c-C9asSC&6hLOeB{7i>E$LGVZ)AjZ@Nm!qR0S$Xw5ovxO zPW`wxxwIpm7PRw;{?1u_Q5K)P_~U!4y&SYNXcR>BtJTS)Ylv9F1acOa54(E+V_=j+cIT4a9tD(5QUqYkLq#5=BkdhjOqgWv&zP=P28u!)IZwun&;P zikHP6=i!t~s&XZQeKn-cjxb3-W5aI1(&bCpGD#d%GJ1n?fcbfkZZ90~{09~uie0(9fn~^mY zc2W%|`d86R=s39|w34YhO6^>ef_-HD!0kvVWpVB?bn!-NT0xv{;rC8{#AkIydRj7= zH+v~Bgh+NZvEp?hcNy|}DJF4;*|oaMr_p0NeL|&ta0~NO;22e{0U*HQOOGXRoAm`@ zz|5~fWq?FV^bLa#5z|N$w!k>otwVQi;<<=%*!~0_9Op626>P}CW%u1%8T$*~)mjIQ zajxg7IEq<-u92noq^b2J1Y`aA-=A8R{4wuW_E)sOM+fY7S52YdK>loTvzx>p_yV#v zc>|I0{x9-lGJNq46Yz@fb^wbEwALw?W4cT@*{59NnlZP=tvJo`9iPdI=>_Ego1By} z#a#6iMQ_QPw14zAdc24+mp1m`%#)NE7+t{GjZxpqON2gI#b1j9h68G;geG?a8FU+q zGh(feU#RnrsV6EOjWUZs1&A%HB{e+sITxkqt5{li^gC$vn)ovb>ob+8J#Mw+gki)P zF|J{Q18N9z6=+MDVZI@+@qwuEVIgl6B6rct#fuPwGjr(G3XWn+1^P}k+&MELiq zSLV}<_OOIe{^&d{-?UwD+knvB(a7E82%nx~`H1`Kv8NdtSXKLvSPDA4;oBll?!UT& z2h@tYpiv#fY~SNg&v;RpAwO+g?Ltdhdtc^dFC4tx&MZ56rsnrDSGF2EXBaf@n#$U= zk7t^R4l_8E%Gm1nG`m7}e;1Lf9qm3#NBVg<;_unbmtV08M73{c6GA6!aUZRyC%4b> z8*SYG{Vc*b=65vhRP{^Ipk!kN8R(0y~fIUDQ;ms+$^W%@5|{<&W$t4rS!v+i@Z)^ z>=fTv$^o#ST=CcIrV6oUwDH?lM9ItGH-14A~U1^eKvY(;M z)GsFGc<};iIu_B`Z&C2vZIWY2ekz*0_MPpAcM-qp5`p_?95nKQm8@Lb?%r7MiWnSO zFO~0Pbhb7e7%w&{*7$<(w9Jvjdmay8Xk@_M{2sNq(Hn9lfU0x3kgpr)ht~@h+Lq?MDjV>tSH3WdsL)Qyk%wum}$_K>fJvNpaD1p8b zoQcV`(QzpLLjL+Wzt_h3+RvgOL_Ie2-mNys1;E!!>DX)Y8C=Dy1J?tqlP7<>fKUT4 z$sboV(j@v361)bp>k$e118s|?DT+&y0cMEzF)ZgWb&#$!ChO^>A*py%!*^*Vha+^rfDn3l?af+x}%)1E-nM5 z2!0VY0BLM>ZMk?O9do0rTrmRxxm^uBf9`!r-Fd-^!a;uPi>;ME_Fn{@{wW101tEj3 ze$jP=Rz@2aNxYBu)B$hi4l26o-sv^Y{&;zS>K%*8%s9XOEeHlkL@Y<6BQw@4Ms)a~ zs!X(CxEVA3GSM2f?{#hMoq`O}?~NwqP8?dqdvO*`onTd&X4Zb@`lZ-@n@5$XvQw_-@hwd5SetKN037zUSS?v=Y_ZX?ygL z^;)7KlTyL@I972yVBt%NoX79*EHV}Hvij@b>iZV1zT-E231IAPYLhJrOQLs9V31fR z_)G%s6HA}Ph77FQt?WSrPBeUi=C!QQJxzBQeY4<=z5lQl>!!5E{*3{S0 z*Dz%By)@^=+e%M}tdYU|(sOq1!5YAuetH}j$czXDi3%e}!_WTYU zAo6KWiM{nV&Bcv0_;*kOCQ#f=Ra@eglW>7kguF&C`L6h3VereR=MvLvl)G+$Rz?bk zq)yMgkUZ2K0X0gB#h}A~433Tt$xacQx7(G-tnhdf6g&xgc^r1~v1<%JHi4Cw6l6F2 zNH3`x%%nISIIz_}^G#p4NlFZ%av=Jw>0D>Gkvd><##=4bk^zq6EBqFZ-0mj^B%a`~ z8G7q6-S!Y^{48uGG>$iAPjR(eXPsQ`$8~EZ1!DVB6DWeZ6%tV776 zedk#gvvHuG(JhWMxu>9XwD;HX>`gnC*j{2-wtk#t1GG4`@IEnoCoXcHk8kC;k{vfL zcw@u`lo$DNh7|LdvkHWO`cI1h(R$%o6PBFIe-q-e(mgVOd=64;CY0@ zraVAL+#QRDGaxpu$?4BI*6tFM5DEF>%mmh*cGr@_cI0kMi}RJfy=~|M9lVKEEJx~e z>z*Ih>M2CF6Tj+AT;UhU^xDjS#*2p)T&6Po^mixzVr4gj_*Wi9&QaR)s=sCGQ8(^A zmmVQt@WmD)_sg=Om2&__;iPJ^~0yamaP0D1n%%UQYjyndsB4(e6GGRMZk;X=W7 zfNQ9lTY$yO|6Gy|8)as?!-2%gNK`$%wFj9syO_`Ra_j;jcl*gMb$+Muwe%!e00-me zBi2`)x9ZO*cg?=lRiL^HZhREnV#^dVD%YXKK$dhw%l8{L1!%ytHCZ8%)Bez7(Q~|3 zNVzhjr0a3gYwZX_z$Jp*glM_|32+>BYF)@gH(umK&%_SXn%!;o-~Or1Tg6QUxhdb4 zpcuK$ME$ep1t^qOxcI)X|69m1Ncx*IOy)gfQmCgF9YR0HS_^IZE7$7Q!gmydG8Nr& zdB>;4Kxtkv;<3_-FLiZx;o*wZA7$DLKCNeAun*^1HPXLJS7V&dcPiqekrC9AL0Jpx zQad$;slwduF`dkU9$$O{@L5`SP=`{hDmh!ejL4|kqG7U1bhmOn8M@CHkj`$yoJR{$ zhqPglF=yI3KjJA*r&lCiBz`^)m|Vzj(F1b^qfHr%7QSUv62e-(>X8*8V+_LAjYikGSY*T^CS8*LPj( z6R7FvtFhm853DteQedoF3y&NbkvM5~a1$}b^l9OO+i;ANUDU1*z>{TZZAlK-~ zEVa_^pV`u8t&LwMi9L;1;W!#D}i9nQ*7|4N|&2A1C;xz$cq4rQw{;wOtQOL?$|(@dUqSUEUp3Q}sNjZms8%66Qnn;8QiH}Yy1N}NsT zgT!fulJ{gk{|x&Bc67_%eb)ol)EDxLler4pF=La&nyyGuVI3i5wyfkQ4khkHeY~pv z%g|otIpaz0gtVmCLJ7c137GK30!3Nn(4QA@}57n-C`?>zM$1@u1hOSg6sp;pa z+*ADTJIWcNkBk|hO}(>|Z0bHkl}Ip^Qh)Mj{AohoC=Nn8^!C0>rx zU74;%)>j<32{>7^;}urtm%ZN*M*6{J+(I4{RKSo7`%`q7DL}{Ba5TeJ^&XlloS~9> zkhVDhvZr?eZo6lk1-rGz?GSEJh7I$VM5+g4AYW05@CI1E9hX)b(V(YRi+i4*MoXz< z{yUJbi=!EKdo%c^`;iEe-WRRbc}X#aK95;074>nciDh=})Q=b8);JZef9d7A24LoX zGxboXNx}R4ypSu(?Y!}24gJ^kBDBtJ4+#ks@%h5d2r4O3s~s>a`dz$pDl`2UvmWpy zCI#*DQ&6ZsPTo?01~P`$r_scH-}(B}?Oar$H%-Lz`WKz{JzPd{2tF~L(C^4~5ixlE}!W13?<7LoA;g&%&xr**A zHA-|Q!pM2LQB?IyG9zCx+3?b{i>HX_B(m(ufe}Fdac=6N=X-U#@=V71k~&g^J5oC0 zM2P*Ge=R8*Yc~Y&IYZ%WgH5}`HU}@jhkPh)`<{Cq2PU)ZolFM`a0S)|6j(auA7sgx zw|h)wJ}boX{qYH?FF%sF9hYBW#3r7A+w19Zp-k{CWyNtZ*SIyQ= ztLeN~5s8vFAmp zY}}!Al0!kSu9A$Z!q&ZVc>_xddIPzy1r-dLEc*k}$xtqwX8#e{=T4e6jYCrRsY8bz~Y0nHFOLy8%&mY$*C`v>^%djxTx8=rT7) z6)F_ml(04AHh7qs2D^(#R~`WQf$0S668*#C8f@mI17o`CTnL_c*jBbM!3*n_Zl_0* z^{>XiePhP<*WfskLuz88RXTX+2mkGH2HtRVWB*5rf0zJCoG5RMmv?p5FNX8XcqGG0 zRc-6~lQd_R*D4yNDrBchAa*dEpToMH8j$E3kd@@BJGjj_LFPdZ+*Dq*xjj(usZt8} ztBB&P4j7|zVMaqPrXYqT3?*)O`?7yZM0gwEsZ%TwBG1RGt5*c%0A%yprU=lCx8cHvJaJ&@6``o`CW|t${AVPx zyKp2{i5D}=fII>_{m7^S;&DO`)@mjiW0Npa&n&)Zq6;?c!BgIUje>UB))|+yW@isQGTrgD z)zXHo3_m^0yiXg}m1R_hCOV6Hdxi^ta})Rc;Z)Ba4cX@yy1`w0EDB>ERszKXdrXth z&=AT7EvS#3f3*C=t6(B6&0U#or=p_V61Ms1UW_BK!nV7j8(MF@DhX?UtBiCFK-nuz_q&s%k#Y2fC=Re!!IWd;gJ7tt4BDp*T%b5G)FXf zk5^HB-or4{rIp@4w%$;(L*JxHgWYm{mq%moVn64<@5FNJR3K*+VX?&H+bh4W+wa_E ztO#b(PXa|=0$fhjYajT(9v`5oyJ(pmw*ATgRfHf{g5tsObu-({SzUU`=1)26dexA0 z-*hnp%xTE`{A$2w4q>lEW^fti#BPQZ3)E~C$$M**LjkS}MV$DRGTe%0dfg0$0BB8X zl$x?URKBeIE*X_NcG@VXmRuA(rSn>8IMB)|_*!d#5;Owi!zg-<)_K+qMiAlF{r2!F z-74(kx!41y6k6fU*vjehoOdou=-}lFyZub=6x3LAYYrAwZHv^fLmZ-LJ03GtP(HRC$zW$FSo`!FL@@4?p)5Xcx;=RguPFXyqvB+ml^{t5m-ay(5*e73?`P3r98l($PBIH|h(vb!2S>W}H8K93)sx;t7 zh5XudgdqdI-PiQzq*NhsXT3i;_)LQ!7wc}X?(%Y9gXb*+gHnv1qb>S7o%QONj4ve6 zse$2!k!$WtovbWmtg3nd4E^b%-Hij=J4$;-z@r`iGI^q*x zQ8O6_@Y=cOyfazU;1-d+<^+n)RVEku_3pYaGw=1GcbW`|y&JMRd5gyyT_^xBDT;Fq zr&F=~U2XX}BgN54U;NL12V`xLbXc%Vd@(n1)fDmzSz)59MGe^1n7FYP=}fkB^D{tv z)BE%7U*v-0a7L&CGv1ejSp^-ukPgv-;mBEYkJOF7(!yh}8k>ZZbiHMm2S+qvQhF)D zLuVsd46%(6nwV!;?#XsW%hTv*3&eM(-p!zQgXyPK8Mbd; z{m;Y{+dkoHYd74jI4oeisLlNc#Q|P4w-&ZNypP}72?OH!Q1_PX2l>povt9sFsK$`@ zg}F@?FPMFsbb`xrJqQ|tr#5WpH-bNX_2w^T1vAF(WcSeYwoRwjTAalLePP+{ANW8#bh|TLbEGZ-w(hoN@XtPN^wD~R;v&Jz3M#{7R7N62T5k$58 z1B&rcF@(giJ{sTqD*-Nqr3cYV)4^d!h`IVF(%>rA-+z}S^}=M$Gr2I{nl`~N3HWMz zzSoVdwP;3KfxDh2>SytiLz!t(S$my@EWa@@kCawB!&HiB_0jGT-0fSkxU^{a&;}fY zJEc^yX{&s#uF?bid#}rn8owECPL7$bC<~Vv2BPEs#_fIMe<@qOW0$-$%p>5~@6Z&w zBD!?djsUY|MQ1u8`sM+mZ{}-|Stl^M)B*bM6vdPZO_f7>zkS>6 z>f6;vq$9eG1vgpX-VUhx86<4*MB`+8&`BR1IW&PGlHb84}f3$yqOD8aV;q=5-MPADzDckI>UREtzw zVW;g?dzq2IXw+bB&}67IW1nXhT11NSo7eLHY6V7Yi?S-)1U7%|hJ18C)7u>~_1rU+ zNrXmuHLPK#NK?n@NbbeRm+D7^J9~1f6Q!?lkE-Kol={^^EO^v3(TtQiO_yfKm}qx2 z-AACw%6QtVL$g@0!lutND|^PY7(&LU!v)8n7qZF7!q89Sd%-RlCnEs~Ex6xT81ZOz zW#gIUwUcf!X6v>n2{$pHz{fT;H=~SwpM968c{Uy^{G$lr5{)riff+%Y>?vzrdm~8h z`RXgZKy9(1NvDnMOM9-ns*IDWQMG)smp8ziV{;vZp>@Y1qfSZhC6Ri_+OI9N7xq=` z*k%mgM_QGEEb8n8QWZcdbM%+WIfCYxRRprRjr;FUtFjVhW0|%tTWq9jFtv?s06}h4 zppQgs@TAq^!ch#wZS1pI1y{c}m&NGWIJ0p|VsBEN`LE3gr`N|sWzEi>ZrUxvJXyUoczL4>U0$v->eqfTK|gTL+kuOZQ-wp}cK75BvKx2iQcDvp5cM8+}~+$kS! z{P#xn$C|fa`1QpUqNICeLcGhC!Vnsh%{xJ{WJ=;zOI3#q>0D0FXUtnlWM_4ESJ)3C< zTgFqmX--LbQ~p6nqR!>6pUP@=%%dNu>jn38>YwVIa&-NaugOqfn?+^PZLI$7%9xZF z>=?elG)J9;JK9GMJyqlf%8FkNbC##z#&cfh@p7uIYR3Zg8iFKK94~i!S3aU;1}O?2 zeDNM*#pGmLxce107}ijge%=>rvZz1q zX>+G&#gK%J$FsGa8~T&#O)PCAm$!UqdQ|tRD-HXP9Aj}a0sZ5=EJB9zKnppL5-t!O zFgMIKpl237wTU%Ykln%6?-NS^WhpSB`~9SUtqyvy2XsUT3_>aYPdtm+Tri)B})G;M6`H%aI z=1y*bc*;Rlm~h#9z(q#8>krkJUgd8`X1A=*NC<8xe}2LRe#h&sot_QWl03Uv-rt`2 zQm(D%{(tTQD^{31DQ$5>dmPnoY;&hy;g{tXDkJaSLYK~Zto7jadOm1E&)^5K+vopu zaJ~XjbH=ANQbM5^C;Z+|f|l_x%%HWVgTIsg^~visM^ePedw&l6gEWwKFSXSqdWX-W z8Zs5k*>)L3KOO2!qQePGG;xl_9>K*z@k%I`7mE zed_-v6FwD}&NeUpK1@mCe`g_qx3|m&No3k3FiTsDm6UD%C2_v^a|Lmi(I)St5rKLC z_U(`#?H^4ZTBwtN)tZ{pkJe|L#vsUgQyvp=K7m$B3SgAV?1Bd({#S2D4ZZ*RFX(OJ zX~X-#ApG|%;lozciF;p03m-n?<)C+!m(UU2@CC@{t?Ajrw%07thnkU88i-bY(Ep$Y z@PXC!0QO*E{6f@wZ)Q3dOvQPT&MkM;g5z;8d~lxdKQ)?q&%+`*9M_HjPf}A}Lv~B> z3zazn7QFC5&{?f^_>aNXCTaq@!-&LZ6q4B6ggULY4BSx83eBG_U80R^nNX1gDWv{G z1-vQ1oxvUdBsW)M!{$B#!RXm-g5H;nE`P|(I8g)BhxGb#fnn;Dwl_Pn*HkbF@@ul| zI4E$Zhk!pfnCp(PDwjoKVtdk-eTezap&swffg|jHiR$iIRtbB(eKDpBz1@&hz{?;y zd=Qz_gTS6a(PfUKcXv+@9KiovN*DEsHtc=`mWqC6_g}4m5pWxz3)sL!!C8la#9+1@ z+Q1w_76h|9Zq>5XMa&;o3IZ}(!gTvQPR*?`I&p)NKaZ3JY_j%|Kxdx{Wqf}Gm&wtau+8NQ@)XIcKGS9q``=rQJlgb zTz{acf}f@@v8>tr^Q>TY_2fYGNA9?A(zsMTSh1PYe&?3 ziFopl4+%yB5tDD76uZsa^RxC;&Qg=OM}MyF9+g9a50alB6_pFZ#iPu7kKLntu{AgR zRCzI*E>%aev%OYbI;G^7iikCKTmVW$UEPL;ery Ccb8HC diff --git a/www/img/stationpedia/ItemEmergencySuppliesBox.png b/www/img/stationpedia/ItemEmergencySuppliesBox.png new file mode 100644 index 0000000000000000000000000000000000000000..96d3d5144bf1ea6c15675b34a877bf5e96ae0dcb GIT binary patch literal 12882 zcmV-YGOf*tP)Nkl4HZdG-47rWIQ&h!pNinGL$E3d7MEyd8r&Kht8$JW3>VjD1G_(SqxfglF5 z{tNO~WIrTd0_4knGi)SYTZ&`owXwp!?~K>dYrk60YS^50e9yU6 zxBAxY>K`2blGcYfywz2=ZryvH=RA)FpP^_ro3MI!6>Qt)zdg@`2>%@0;lEwa1yeV{ zvMg|2m)~QI@v$}R!z+jTP{->4a~X4p8D+mI(p7MsI32qUYmf|XFPA=!_{m;Cr*h#w0fM}bXBe|Zj1o+MjaY2G{9sgEH|lN z0Zw`+H&%#EB*Lcj`@=XT0+FcmQ%s0!C4gy~U{`He-&oJ@jfSI}u0d(MjD&a@#+J~@ zY~wu~NsCTzdV`k~S55%o=gyLoCi=M^>)gl5<1O3b&q?CNwHypmk7pW#82@rjXBXI1 zwuXsGxHj>3FCIUlU62(}_t&#meo0U7y^7-=&fQPa>|AvLuQ;xh03`Fvx0X5Zd4xB8 z|_`36t2Kcgg zC9{`TFh3y2!rX;%lI;XHy-6u9OaOby2B+#kYo*11`>~%t^L-y!!Z<m{h4PB*j*CkH|ozd7Pwq6LD?=2;i5S%W%>=xtU%6lmwB1 zi1Bjv`@=X@fa@g0xd=dVFTlUSxP$qtreXezAPjzh*AF1I*X~Vj>N4VGJtcrlhx?05NYXGO%O?55xZ-&>jA{AQfT8posvRTkK&Fp$4 zmB`AjtEd4dg`&lLK0SX$vWuf6&5o%$e=xcYGuRUbnAx)0Y&1biINEei<3N$pm!( z-idtJU2?!34xalPa|s}Wf6eixuIt$GjKH4&{_FdDaBnaGJM`2?+YWG|+{Y36nzz%? zpxsa4Exbp0hWX>`KFn3brpCa#yUwrOVV@@{h&yx_USlQ!$n&om{1)cFg{OIq zYQW$ZKTd&PG#WZ5&vqkSbEg-=GaSE{<&Tj*|1XZG*LA?F3TLUolgzDq*j<7rY`Xn4PqE{@c`Ftt^w49a*lyzU zCcrNOw+raw^G7(ovyAqN*A?q)>kE-!f&i-L6X;PAjYqgJ2?%H|@wRQ>m;2QTeb6=hW)efB>DX;1 zf}eIUk$@8cJD{BrfD<9a(Mwlp+crF^HQ;eg^e^Q7znk5&B|+%m8EvDW5O1sx`)_>t zqkX#Gp(P#0XcT1lToHmuu)DWA(+&y*DD!*)J_R3>=ibjtnD=#E|1I?P`|<+<-U$Pq zCx{RMAL|*>N)-3WQVJ#?hbPd^2=D~o^^EF;igwg&!2kUV4Or>*w<))VgZoH=KZJ}B zNfQ4#jvr(G9p)~4#-nw&1>M8$R1)L_nCAJ^@li1h|Q-5&^q&Ye$Z$_XE-XnUsVB>TG;nT+$+B?w{@s&K=Mo;nu&~arfOhB&oPF} zE3kLF1y7M+>%AW3wqvku#|wzO&maZ=dq~zt*d%YCCUM(F)ryliGWo7j<_4G+x;c#w z*3#owR~HffF=MRKHvVm_Z%nlVe*Af!PvHAL{$}Tr|2MNv|7}RSzYrV!6WAE^;2x$3 zA^}wFxeF8U&mFFtrXax!PT{e7#{K3p&%Its1m*{@dVKT(KKd$U1C^=)tlf_zZV^XG z{AZsI8Q;z{D8sMt`oXIqCL0?j%&I)YWo<0J8S3yH8r7mb+x zCmeQKcmx-sw{Uwu#NSUae{`vcK1UDEhUDB z`{8MOoCvz5^K;IM!<7}DM1)tKbbwSqiEWg7%KPal;0co9|71k?8%Wime}!02jn>^3 zbPu~Z3A8W&%$K>x3*Vq?ifO;e-b~ZvMRHyDO{c<0;@`yFP(QZON6`B&v^*D_Fc7a7 zqD)UBY4kLK7(gpu-@%q4p_&Y0LKI#Lv4`fP=j!oxC&y3H3Xf1ZP zj4A8i_wL?>qiQ2pXRgo|8)HQgN_)}uTp{;%(GL0pFa-Dl=zOPBerM|NP0ag_|47cJ76y64?Ht^AruFv7i6<9OB)Uu=Q(V)pw#VD4bHkpyqm zLEi}=Zf6Q{X+aGu>^sitxxTT^NnlvERqXINp~w0+vHSl^*|QClm5pa7Iq(8}`PvM} z9ZRtYA=Frv3QPbO;L(e79fbrenFMDQEr5~}p%%koZM@dTj zNT9|x_AurB^gIy};w?8-g}2}m$Uxx7xF1Sc5s3uGIoC4FJf496mBUN|6-A(~mq{?K zEV@Dlmi?YbOJ{*i%X7r;8W|B}atI>8F~EDbS~(H=!|^P~8LI@h13lfLAb~aPL(})q zO9E-HY#WDdCq4O254<1YxR28RKXLp%=Cd+kn-(Pdyz_A{qy#}yY(VYje)i|iv%fDQ z0sacdd*a427VP!IJy;*6T_0tRH3l;RRrrIcG$?K20tx03LYLlV+3ZOAew=+f%F-|F zi{44!@8i_~^TWCg`;{^1cej34*_*rqK0kU2>qk9UKko70w%TG!gXqd(HQg-yj>7!J zBg`(o|D@AwzJu5A;P}y_TJ?Y)dj5D_r#hy56pYWV8#)Aj0A?lqMsOAYYf198K>QZ6 z>Gx$Es$mFUJKUE5Fn9@B-o*(os>qoC*7Bs^Y9vx>%I`>-qmo5~%>4QD^sl&fl9P<~ zXGvMbtl;xAT!Y32ey!z?pwA2#7%7sc{uww+4e7i^azCq8^6SRP14G?l92WPhDf`!o z6i?!O0Ya^b?{8w$z489tyWi+EmtPH|@So!SZ5&azNW1VXrX{_faNudwbS<}f0{`3! zfZ+cR%zrQ6d*x}jKmeftWu59v#Tu(ZTqxlzZP2IfOB(g5vx*9^Nc3?nH=F;U-sDO^ zZAb(VsVac1Hfu*Gz>seny&l}_rHXI?1>n(HvH?3Eb6GH6#Ey67wGp59@cKWCn@OTH zm_j&%{9(cPBF_EQ!sgKf*U1Q_?5`k5*zmgu)^6{F-@A=OsGoVzphVdYGJH&J z{(jzHUxoJ&{3)^BY&5s4)#_{Rsmm>b*E;fNu4xD&1QC*;laYYZ`Qqlx`iXvjoOSGDy9#yRhei#gK47H0ACR`l~>uV+Vl9J!~ zE)~z!mBka>!Prp&wh*iyGoWV}{P)@6A%tgVDOQ!r#J<9b8zJ~u&w*vZQ`-hT2;rsE zp|k;`F#VmE*5Lgw+<~5*uB}NYjKi28guu593mYi{W~S%yPQ7o(*jaHrJB^w2D8~I+ z51CL3si09ZeSYCtiQY4@jx-OoqR`2U*o3SOs#UQPx=srx8%a>#Kqcs$*<1+@sn~-7 zPx#3`gv~mi*H~)seBS8P>+sInI?O`Iv{T?kSY~={Rje();&0()I|`zi-&vFZZ$b$H z?hOYM6NR*sth2OXVfGe^WMGOHS{dX%u3~agk8={Jk{?f5U%jtO@2dm|l-#86w@|Ysp`U zGDJzPO$ov{i6KJ!2$E@3m?XrRqEdSHlqpIfq9KuvX8zv6KEHNx7EdFBHcE0EJ2U7F zAV8TP;h%`r+sm+qwOb!h4!|~S@QkzuA0znR$FBEg?43H^G|dTy3MCNZNE`jD0D}J> z1i|U7S{P9@uRl2fCc1wU4?ywYZVUF89C-b(%YUyA-Pvm?9lnrF#O36ovq!Pw;fklv zBg52hOZAN=dm$%)6#DX37$5-xey^RKw~Y$0b>=}+0$&6Hzl&YJJEQ9b=-lru z3w+<_BWROzN23wgw*4i~^S*>X|G!!1G~#%6flxxoOSaVen|J_{D*~V5ArgV&G1B*y zqb{^YiEp3Th2J8+ z`{LS6;2{H_z^2sWw16CZDJ&C75%?T@1fCNBZ~r0;e%T(=++!q^-fUoTxj?~xkW%Z8D^0}wTVI@^b{gLPWyI(3}h29A7~NsJbi{5 z%!@6*DC~RKJP%Or!6;fFDBoiU{?gLY)Hwt^KQDssdf0T~_!*Mm*O3hW6)&gSfH98( zOlPmjziGQ0C}DJ*kLxLO|9ESYTL8)b`mn?Az59if2nWqoc&~}xck04x$6aW8(^Y{- zIG!-V!?Q#wkb*#zcm*Ov86>#xf{*8LMLq}zjX4?8r_d_IGR5geU z53!pGNKyexvH>Chbw7;+I(5DX0{(T0FprTCAFM3H8+!-v!L25&pjS3=!_@t1FiEqb zxJZO~phr^(Wl87q@tiUdf`kl(ahniUFppF|zHcSzESFjEptZt*pA`f?GZ@e1`f~Bi zOxbZL`8@{^;0>(x=IK>}&zO~Gs-^Ifa zad-}=C__$!qHMDaBH`^+umTZ`=@KfFf!-$YA@;Zmh)x#-2$FK?46t5gTzhp?In0Ab zT>&sXkCQb;6hvIs?HYD{t(p@}M65{kiRAgz=`UjqH@)#aG!OU+*0f#8n$Cb1K!Zv? zLBZSbeSd;sVtvcDw&h1H1g7b`FhcLl@8QQ<8Hf}I4eWYJatOrtS6c9DMug4GLOLjk zL;w+_45T2xG(6z*DCxc5*xSwLtV`dS7fk8(XiD!!$~9A!LQlyrltx$9EhEB%7hAC3 zNCA-Hqz;e6I0v5tR<(2R=f$u;EP($em;A{Fd6}#hv3gwN-`NiQfSS2owx(fO)-(m! zRwuVc^8r}Rr04)Y{%SV`y-0+o1>i*x0VvEU%DewPXywl+xz(Kdu!icfUb4ol5QLZ~ z;gL#)c&s*J9oZ^m0_>r({q>8h<=;2b`7-zp*2rm$f6od6KR63GK4b6~i{|YnVfi-y zp(vs;QGhTK8@{hTTZ8~21Q9&^!s=cpC&D{x>s$rM0w{m|0escx8tHH_e`u-l=9;HMuGbNkX`K+Y#+heyePrF{M-9M5d$!FvbU3 z9`+zp!aPPr%L0Z3l0nd^gOUi=eC+Ij3s0-5H@^Rc+i4-f0D6`QP0xc@j!xj+wX}oI zEXG0aWF7MJPrLa@>T=*X9Q?m&t-&r5VgpIFfuy>pD1%yf(E<bcG7a??~5+-5(V# z(>84Q?u%=jl;U@3;CCI|bA$@lY&M}mI2n zlJOwY0X2Ths@J#;`11&m#f1E?W!@c?bdwszLotXlxzw>^*6~1;dxJ6iyXb$d(-A6+ zmv{Qt4pYFtx7vccZhG&%JEmV@1DwKx&V>_OPB8g&Hzt^~dcle|-5Q%nM69h>0?&1D#&jd*84 zsr4B_Sd<)7Gv^*mUgUWRAcp{7c)p0ej0gu=;i#(#*!QuRtLTG55#C)}huwZk0&W4H zrtj0d6C~I!uJbOWMA#bkq3QZi4dMa`(jra*ArnF+!zr_1w?4i5^YgXReNGEOg1{SN zLEx`<_uD=G^xl4LaXQVc}vKPy9nChQrh+J%kPD$8f;|Nq{hei4uSvmPoDDM1k`SG zh39X6)Pb`~I~vBh{y29}KPcTrxuHLIu~*%~DM4YY>kJIi3215f&9 z?`g02u|W#>&mVPRV>GE+ZmhJNo^H<8()%O))^d=nX*Q$)pH=Hz95zJM|9s~h|{Hq`m z0lt1XE@Zxr>*ls1u4xVa4z9C_9k@O?E!_hrf&|EZ-I=-PW%OUmN*m1gC+n;dV55Ih z0G}dAila@yvoS8V1il)*?Ay49_Ov}3L0CfT)B@hZ+!iF*UuvK~4<@=?RRa++8KMQ1 z;5@+z(eA(}^*Wb#0V3?}=5y{1ixRqvlKj=KDD}A(;gTs zR+yO~7l-hj*s#9gg#kaMi$2#gY^a4^-qAFc>4&9|p&02CrW{cGjxtSP;!db2hH}Vz zC!fM?B<9OckHEETaB%)(?7YokvAaIF)kMsv*WbRF6lvM%@dL z^okD~>Ci#qonSqfrW`NZ9;-00muxQia%~S_#4nw*5jgm+d)$N9dtF%f((kx9Np4CT zzh|P&u_BrUkpnB%c|nqYt$1GBurO_&>2JH>i{9ZO`nU$0{S)|Q zTuT^&k3JtGz>YQ*3*KCsD%+Y;P^ke9Z2s*-%d$euQoM|*NTxv*AshIEd{HOupjjl4 zBT_)5Yk4ca^o-3|1Ee{sDMa#}WULI4R178+YI)@HgkykL5um-LNm~%-ta<*#v(8du z=9$R?%EB9si9`g*_m3nZ@Og-R#zipAtZo;Td^L<|%n*A+>H2RdW4{hU1+Xxb2d)dN zlyis>OQW7`UbP50Lh0I)-kU~-(r+e3dyvUc_Rjin@(gswyLdh;EVf~1seZwdr?ENc z<={seD`$L?0uNHtJO}t4@63~Jz3|XD>5Z8LK&d^F8g40lck2QeGkRulz61a<}e&8`-n_Yk38!-0JyLn{EdgNIu`l{^#VYiZqV z6yUQ7zc23BD&Id6BF6XP87GJeRuF?-d|!E$#p#Y({eHHe@s18^Hgv7x`w)#6Fe@fl zH4DEH1J%{3IpBF-&fHIWpP=cFVD02-?)?Ft%)=(KwPK5#(wPh3>&o$x@>73Ub%1E5 zYkF-~c?_n{78PdjUfuD|g8P`@pj@FPOw4m}nGU7B4Et_+yfxQT$S@hIMaU$Ocjhbi zrtNy3MMQ-eWDN{VZSr}UsvI~rxHBxXtSsqktrthrIQJYz05XC6M2N2FER3!apGu$)CKv6WveaWrDv*7*VX2R4Gnc;T_vDpX&pMXbqGU2S|j~kq=GJg=!egd`~8W z_%f-03Wu&JgfT@e<<6f5DiLAUDG!~Z{mlw@gy2`xb5k50AI+Rk;8*qWo-Ydihtjua z#asn2wXAR%B0XgE3i{ZaC+UGYCW8a~*kQ(Wbw$|#K0+c;wmcitvcG=n`jxuFEX@5>VEl!D2$+5sY2if(20Be zwxw&Z8pZI+r&Ko`df6^*tdNbrZTxP6@0u+AzHkOjEk`mBu{5@jfPY_eLjTlzTG+3$ ze}m}@NgP?g4(4`#!!ThByLc5pM0qfBI1yr8uItQZU)Qekq*y~$pj@A04=Ny$jMtr3A=#a$=(oy!JaioWACe^B_Yg18Yy(IN}A z8DnGv+ji)|K3;6b5$|?W>9QJ!A&oC0crg;;?x_bS6&re(hqfe(B^0DJKO#jy20MuA zt}{Z5@X#VWX-0Vv31aE{;;yU^qa-LirTb;nj5BI62;fP51;3hp*Nn}=JhNs_yc=O{ z{J;mxu%OrOWR-W|_dQYs3+ma*v{O?n+Pby~8d4;R9-d|AXR!}<$UHFYnXYmv3cyOF zR*q%#MM@YTpa^U?lP6M!X%XN#dXy-k`wpg?5`j8%o<$Vafm9hHMFHfV6N+IiupTuG zHbc4wo87s7IM$+#L7$JN^c@;6+4J*gtBp1#jCqHUVh8j7w1=_>&x+Q_^=6Nhp$Cn?Tll;2 zlxyo8XIZ3ihy)^30$fwf?U3^jfD|C|vgQc1?Cns8S*1{wp$5gGN4Um{=klcc{mdeS zJ$T9vRhS<&t8h?b&_vH&4gw^^Ou~a77um)1ICIS+_~P12@C0E=#aMPNUe3(hk5JT& z^wj>@2u7n3d>NH$S-h{1TbttnlaJ$>^GP8;B#Sld>}%f47mO&57TrPn9Ck4gLMhms zXTl=L9*77Y-t0QFEuv>xJU_zgu9^1O8d}8q0u~WW+0V3-#$j4dW)x>w)?{z{XDMA@ z9xY~7R}hbDwc6>d3C4BqhADuTJrf~_Kqc(D4ky7pB2esSb7`Z($USMtu!J{N1M3xDA zXb%HxzMFCqU=j($xIFT~jOIIid>Mz#f+YE-RKWNBna|Io0MsCs@IxPob7C`C^@<;u zq*KxK)Y2Dwhn^QpZ|B|(aChi}h2x6lLBC?d0JF1HoqHm#3i#f>?LZ5=vo-Q~^7TWn zU<300X(uO`UO4V#Q%iTO>v%4#g;_DdGRI`J5-r_tkk*BESD(}IXFkD4hFfCG4dwy;W4|AGTunFuqqT#(@a z-=lX`BAnPZ^eW|6L*8#KU_%sJ*DU{!Dnd8shk;$a(8NqBaz^cAVfXOX>J=V@cDAS& z3-FeG7rJgr03t%y&d4xBOG!B>-^c4sZv;)xgUwzKdNT-MnxA=PAgn%i8qJxL7FK|a zD7%pPVH2e>piUd~l$rWM5<^72=8}WoP$Rr`|-^s{O$8n>IB%rLNMDXI-73kPi zFs&+dmX^UUAx)43U>atAOr|lAn~1#MGOb0+S`zX3rYFUEy@&fhG11}-JD}~&(}INw z5JeF%#*XkZl;87p9jrLMz=1CwatUZBRq6LK%5Mv^J4%T_^c7^776C5Uo6TbgLbL$G zy3up1@gbh?y;=hftugF`+pI9=O^^fUwvhx>!=;-%DD_(;sYxW=lS3v#D8%zV#yj&CL6;^fSSQ_BL&lRkS*!Ah=aTttgnk}5>ZguS{0 zgDGCm7u1W_)crNPmVVPHH#I->udNmWd?^V0Z_$Nq&o%)AJNi7|`eCG*pWs;UqdR+v z1>ZGe*g(m-mldhmQ^}zIo~^C(b`#Bc-<+5~rUYHp@L!NoxHWLW#uivP^Pq3qFu-#h zsP!_c1y*@+T2zw%(&FOw{K!w+BwVDV7xVl_OI7%@<`{en;y=RSo0x}-tbSev$n}Jz zg>tu&Lbi+gyP*L*t0Eaj*RKfEf|Xc@sTJom0*@!0A{k5tRAaygVHxu}>N=y1dy>J2 zwDWWD7pjk@X^H$MHjOLMh__$CUR(0Kl^e5*T=`>pIUQPC#cmP(3N42(>4Q zxgx!J+?{d!^PVVOfWZIXDEm@%3H(1qly=Xv8dEJGis(Qz0w0wP#xdxB8^`h6nDp{3 zB)|)h={k|XwyW^WG-0<^oB@~8=f|o;ZARqiLuBaD}u<`1kul# z>3SMorx{@;S?UND5k#~A?U~`ZnXct&;d8owhJYV8Z-Hi;oB$D?i|LGmu50uTsLB=LGkBEzdu{y$auLyZ}O5WAuFd+JB_ZUj%$V)N$`xo{WI! z-${xu=fAb73Ql%$%JB7#^*5TFVw0iI9tDgM{37W}YUlOMiC;KMmQ zpFkJUdGa_VKi~NL@0b3j!z1v=c=-^oAK*2~(F#37BCNQ$wu@5eWJDO&9oToO&^HYn zZQfx{5ZpKc;5i9E9Z&TWc~t};@E?-}jpMmIUl4%6@0}b06S6Ut1d9O*I0%%GWLk|<~?R~QXdyNKIhJ~{< zz7RuI;})7^B+$nM2>pHc*-+^JJf`Vpnf)n@zxKKcG&3`kUcRvxpgdzdvDL^Eh z?``b-4=?QbQGVTd(n0Whh3BkToDw^@7y&p!8JUi;NDq+!4>Ac`AtHoHN&pHXL5STp zz;Pd~;ZbuLM%Z~2^}xST0vyyE1p(It>_PM6l5w zOe_<5Gm+t@2%v&56M%mwBR~tueO>}g10SBt^P{QYQ?T+PNhHY3mb{J*q*i<$0RsMB z#FvRR6FWQ^S4lV8CM4fsN%H;BKWisZcy}}$v>*=AYw>*?4a?x)9NI{P41`cOpb{kz z<9CfX$Y7n8+O-fsSOKpU?h7rC-@6^fuzfn5N&xbF0$t=g==mRBs^?G2{#*i-DS_zX z^AaHDB+7h9%u6zG@EJ>|?P9^+#r%$Gn4JK-#&z9odO(CBYY^e$br>e>VRdW|t`?xCDVUWR|rmke75M&+!G!ubG5H*&KkP<~st2vFG)E=YiUttoS`(L`76V^RNlI2clQwCP6R2irBfHnG={X~7Y8)Q=m> zFt9Rv@ck+0Iv)X;$qIhYwCuMwDgP8I0YYi*oA7)!*m))w7%2mHJp>SiJ+>_CA%gz^ zvppCLNRz)*siZ)w!R=wGF_j4CB>*Xn>i2Y3ab9_^6kl}*uBnapr27%wpJab&Jpigv3@?pb4m{<>Jzq!AwLCi??VMZoFNpwC zR6zhLdE!L~pw1yhV2l;~mVRSWefPZ4=xy)ReJezJpyyS~+AiC1fbS3qX4ylA5RU_# zM=Bx|Ky*40La2clMM;PNcY**mkpL9$VCVnCg*|_)Se+-25&V-2A$LgxP*ov|OHhDw z5P<&OvBukw<*A-?AcYc zhdRIS8D`$`qWg(3x$lejv;ESjfJ~i#PS20>>&}x7g5SGTNUoOvJS0`%Rbtmk01g<1 z=XuArZ9feCkgTCi@2NzPgTNO-1Q0er>*d$kvnd1+vVTs`PwT?LKe=4+DQBSR({?Hy$tjl<>tF1Z}e`j z*V}L`=ijtit#9JJ?ei`YMbTS`C%t?4Jezp@`0<sIp{PObVH-dhzD(5r_?f<9ilNEQPBTl~G? zd>`t$Jvcf#x)$&$KKlfqAQEszK(9{b%ndL4v8uFID!+cppfI=R<7Zq33&_)a+VB?=pqB5%Al2#M!w-bU*C^TF79>m4t$EA3I$Muh(KO?Q;HzSNVYV~njSxX485l} z2R_A5jRKU#>FFs?5w>k#%XdkExC+e(0{`gv=tk>9@l#CzIXutfs!*%dcvsE?=prGk wNQ~+}j*gCU@c;kf;6MNX0002U|FsNk0FBt~$m1HOL;wH)07*qoM6N<$g7j$2-~a#s literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/ItemInsulatedCanisterPackage.png b/www/img/stationpedia/ItemInsulatedCanisterPackage.png new file mode 100644 index 0000000000000000000000000000000000000000..10b778678c49ae6ff04fe1cb51133b94e1c1f0f3 GIT binary patch literal 13273 zcmV;~GbYT5P)|3i|HMIn*!q!Q zNqz+W=fFT5U?wjhj^kY1iwj@eAJ>Kf^4hwx4B3)rAkT~>T9k&xX|h?x?yjy^*YnhQ z-nI6red?U*>h7v$H(%q`T-;~x+Gp>5_V=yt6W}REVYvX=d=`>=5_)EjjY;??iXwYf zRTXl%95kCvFin${h9w=Em`{eEl-K@vXpN^oWb;FV9;FCidqgaxi^o%x5Uy2@Hn5JA;~ zXKQFN(nTYi%6_bs;7kY*m3?WV#3f0=L>*Y!ngc~)`1EzC!~Uhfh1+w=lg0Gu0C zK8B(xkW3`OvVy*$D3RkM$VwxZO*Xc7T7S5?`J+GB+1V+Di#qdt zL$gssCFq>pjX!5`Y6J*9Ul_|iul{JC2tdFGN)RUiMK+hG=Bt=Dvy1tgxy9s0Y=SpZ z4>9g7*=zy~U2T}A`OfzC_O0!m?OQ~IgsRN-9V)Kd+;5{2RL=C`pO-il3z+8l)4&h< zL;#f$U?SE~0lti&|AXA((#`Sk;NXT6;8U2UO#~oIxLGU~*O37C@VRu7@5wD>poJv( zI4FViqzfGId>_E~r-M%+Fog&RAR>?=u*qweFJJy`1n!?3$%WVBJ4|S}F9jP2Vr*EJ zB_aSg4x67JH6(P3SrbNrL?qa$)}A#!XC6jxI`=w+0Af4qn!xVSbg9*hOg07*^7HB~&1$@-u9ob*|Mm9KpFukOZG zz&+-p{K&JZ!}}%kOfLR;i4!XTuY7;x`F`Z$rr7}hU6ljQWpmlDp1*MZw~DW<{$o{D zFHPMfTy(s+i2I4+xcd2XE|+8Hahxu^xq1iQIJZf%l=$Jj-EUyqnF{bRp{oMi-LlT` z`k#HAhyYR97e^X$nC$aD{Z3<=A~W#U*4N%L4C4lXlAOAUH(J1tv?%+E96vG<02L%W z4-sH(p$a*@N160}e{XBgem8t!4gwe&?uUv~X?SN2#Ip)<-WLvdz8jbMqxwjOB!d5& z1U_~*4&7ub_)?IOAo-`WM9)LuQ}W}k7Syj{dm)_QACnWYl9$dNg=ZLZecdGZ6yhAY zyj1uX>sPP*D^*gjN(d&Ui&f2j6e5d8rGG>MMU_Fqd9oz4s;A5^=V5VqF}BIYybs02 zZSoqHITbGN?>i6n+s?ZrR?eKoY#1`M1}>%-?D3L`fjsL(0-vOI-q4MZFu!^2`fI<5 z_j%ckN`x@+f*1L16pE@G7$flWg*@1n9UIT;wF7gnt?D;Fd}Q9j$I?kI>CM-Z@IU^n z1utXFqySOyNdZ(Yltk@^Ihvzkp zC4jE$&@~6p-FnFShM~^20lxpK>(}4-B=1}Pr07gY{s?$Q4lZ6E9g$S%wbx#Yoj9M( zL90=Pwd^)a9h#u00!YbbY};X zE-RQx0g4wcV6L#|!G3eD4J5_*Ic!$Lfk}^_VnQ5z3T{7>3N+~Vz#R10Gbcc7SxI6f z;F?{k=9jSfwfxfg_v*Es|Ci6(c8bT`P+TL@sSS5xU(GKSOGtnc4IlTO=*3Cqp=1#W?w0Pt%MiyBptauvLD++VIbeNBoL;$M_%VrJ zS2g4Hp=l$CdCVnTC;q+^nXi%`$R1vDAls&6!i{ggjyjV5CxD4051nv%#Qg$}6e0U$#A{wwkTqYj@gv(et=4VNsKz2F>NQ%kbdQ z0|4jgfpr#fBmoprfm}9_d_y-*vi>h(W~zJjaKOczr^*fYP<^a;_2^Za-^OxBCowLu z?wgnIFakt_z$OB?BmAVJd3t5->e@eh|9kI$RIkg1KrV@?HVpaQT5QUHpmZ*wA8j>Sm8+XG>4g^zDu-#Y+4CxGh)B$x!hRLf60>6Ob@ zF8{isDVs=wcV||BNX6$CaOi{{pP7UV`RM5A+oKjm^+y@@5-cBts$9g!Ls8lKLnO6Z9n= zFV|(6%}}Kk<6CeFdjWYQe`HmN^Jeor)Q2kwbX>u#p#}EPX8qh!@k_|t-`aYx^>yr) z=Dk46@gZM04`x3gfa$zgM385h)a$#DOawRWy7Lf#N%Py-+#DsmzS4{RuIl58E~HwJ zN$Cvu$5~rER%Wz54~9cRS`i`B<8oX<|yizH&6lc|Ku}w*uZW(0HT>5@0a!``IG%`vbjB(mP8@PX z0IL4_Ak7FMA~6I^Ud#kOC&6H(0x%*$z25qP>o}W|BqM=k&=nOFSvfS-L<%(BV42D0 z&nlFwG%uE0qy-vr=Oe8!6b)3FW6?Ax79)cL;4`ui9XW#t%@?{5|XKBHQey;&L zt$mOLABMIIDa6zoqU~gVqZhN;{mlU;xi9cEFo$yb_6vqkR z#4?x2F#?#w7lQH8AejTn+nM%$4hRc<@uBj?iiEGl8Y+`Rxl*nJi5*4M%@0>ei#2_yp;oB$(b zVoD&(GM_7gC~vG>T*;Tqm3J!TO2Z|oHzV0UItPOR=(--P_X3b$J_2AB4v_?z#CQzv z4?#OT2euEE6K1>J^FR4YUj5{SB^4+iH|>xBgP{)wS^xphNk9bfa9>UWPJmX|gSDa> z65y|Qeg^I~J^{^sGInMz$CCu$Bv2Fu9LEVsK;MY5F`81+WT`=bhMB@l9G-@3fT0KW z)M~e$HNMA&H17)*UXX@&r73eO08;@~mdg0rFLD)-P*NY&oR9<_db}zNApv|LP=HAS zZ0^`d0vD8p4fs*xI#jwV0f0{Yye|HEh$>fsC;@mlqnD^15dbm^nMG_G`;Gct3xkw` zr8jC1NojPYL;_vYpL-I_O#rfX&r?9tGk94#yD-O-4^0aJi{@TSFaPMF@4T`g-@K4j zU^y!z$T`?sVV#s%2!uR+Z$K&f*DhT{3r zIq-bqL?Yg{WwWCb2_Rx8Jh&Z5k_4hp3ppV9emUc!aX47sI*lJOapNbBC^#F)XOpdr+&_jwAsAVGnIa0+Mh^Jji>h zehR8sKA&Rc!pco*E0s!#a^8C)%gJW5&}u!ORv?}9MN$DGfGcQoy@$rYAIW2HKI#`? zcR%3aZd(Ca)?@R@OXENZvHs8rfI5l*;hB*D&S-y8I4A`^suK}_2dMzf!^+ml1eSsimSf>rT}Y;rSJCBLJCAq%%5jiJJn7Giq%)CL&?+*XO_!nD z?mlbGVelSzr0 zOd6#&4g351p(nFMkhyPD`r>$fCgZrAZlJt2TdYkOiHY-!=HeJtHLLy@?vc48C7^xD z3aBL_42MHLBViBit$MxwokKs+Kd3y>AeHEKd+@x(6A{4oJm%SwES;DDlA?SS+w{tX zA{!W5L+JPWtojH55BK2Uvx+Co5hwzm6M(`rgQ{LgEr6^}w*ex6Dyi(*ah);dLi9|2 zNI)V1y`yOwCqY7yl*Rs_|F?s|;L%A4KsIDsHp}NBo>&3si&agZnE>Rgk*qq7`=xX$ zdG*rj3j19aG-$O4Xahdzs(~P*bc^WAp3l5gzyYQN2n@Bt=#QQ|oeo&I{Zc+Rb#JB& z_z!nxB=UR@9NWP?aUFawNP(sA;`%sF6-$ADvptbqulOML%8#qJ9S_etAvUhyvTw77 z79$xEn25x4I2eLHy01x_dln%+=>oQ8KFRBS%s<_FRDp+E<>~7?HdxN_7sWlhUT;CI z-aK~xguhQG3x;7Btkv}~$&1Cp&GY9A>yz)0RZ);4Ql;xDJv>{q&15o=NoU}Bh*MAi zyevt^kLI%L&-u2{#s7W*bCFaaok*gb55dF=qSVxg{Ese|E}HthjfU+8`yZwPQF*5z z1&FRgzfq-g%b*e=<&j6pcvc0$q2BpkYP3;i@`;=+8x#s0Z2yKVex`J{EHDHLI48Kv>cRc z6O4ooiG*?Ju0#L^HWDUE00L-|0HhWKJWq;rI=R^C_HGS&-39|*7>VhqAp&R#4OCeL zLpRv^sbmT?O*@dbWj`|#oC*Ov^g2C};(*SXKwqBQZ+C8{QEr!)mhr;0Pz6K;oGy|1 zFIJ)J;bpTw^l1;hTol5~Cm;=70khvl031kX(qZL}4;yfl{GCz|1O^tbVo&s#hf{`N zj?{t(W0@B29Q^r$W7hZT--<3zC({%S2K@mzNJeuwwn$oMU=G+bZ%GZfy;zp@ViMq> z4a^-4%$tUx=PzBn7!HyOpyG!hQtRUdOJb1GiX##*A|R)9Lx)zg#oBZ_9p5P`P{J5o zt}=YR*egg35%;6HnykUlViKOfyg;&!VE@W!YKajlLKr#|c|VO&OA&2}0GUjN^*f!; zX~8jboEiZ_8^9{W8=F0Y>SYAL+&Fjce4qe$F+>2z4JwGhcTj00R09Iv#pZOn#U%Uy0fez_P=peE2m!)pw2Tn}(4MqBdOV%`Mk0~8K~;|gC}Dp5F4h=P#TG z2iHoc6Hu$wMwKst=X*i5R7ng}--dKH&DNt71bMtWZbC&gZyJ;O|6AO5!)IJunA> zqzCG;as3n57qNX8$-`VjzcrG6UCCR#YkO~a!LExfi6sM{H6a<#4$FBIu`4ivv*mU4K z_a9W=xU{+pYnLv8p3*nGIf2tbj=YHGDR z!TOHPTBN3e~iPA*@cVpT!@gWyif#~JH!JnR2t>_ z=EH}K1UVuAUG#_qJP0^RF=At$KURXtDDRY!Oj$sSiLJp&bs9n7QxE~J{nRxuyXND1 zqyCuxZm7o53rrx=Y&1{tvY!$G?0FR6U=aAXQ2~Bq?b7Pudmw0sslc@0Dp09ZVg#Ud zq683yU`?(9?noV`sla5AQgH%|S`(}Pd(k=VcKhhBk03&dMb>qeA)Updp6g&?%P5oh zHKeJ&KTh!D{mFDKA3VoT>e@fGEeqDx*4UavDzn!G-}6Bb1)S=GD2rtNAd-q8aK0~s zfF?`QPrp+uj{Y1pc3F^NuZt=o(i%RPXjc@1AcV=zH%dVWEP&Rc5JfTYaN1K4k#H95 z?rg)*?4h&+EM^zr@~fBGttQe5YCpLDll%X1Xbx+R?EodMbyT{(0-h(b>~?xkd9;Pk z-kA|VJgbEXFcwrf(G-u#AZ}y6)$8@3TCK8yLZQIYwyR{WaXHQR;09aiXk$^5On%*%v zieA6>HWJ_-C&09@h8Bv29Rq)o1X0kaf=Q-ZNPt;MzzGmthlgpJN50!?w7!QbfkI}% ztQmX1SwAay!jR8$aZ&*ls|X@h1im}#>m?#Vb+7un{G3!_%}x{goj#kOXn|jQ5f4YG zK#_xSB7r>mL;{kM@4mTJhTNw4v4n$SN zJzRWMK(DmXw>5BF^iv4DR1h5oAR9qqC`d@6gxT#fFHbF|z!&^51^lCbJjs_yIfwxC zY?&4~j>FDUDwUvT^_Y&ndhJ!n<#MpMw+F?gB7g(wo$5{p^G{4vL!R{ha5y|PU8ZP3 z%90E%{MHwi0GtFOeuztCz(j=DMb4N#ynNEZ8*7&?<=KIC1BO_67MEXfT-`yn20ki^ zqrT{2j$|AyhMqZqbh*h?5;Q{#&nx&s?EG{Nt^!P=y8>J7;%sQ)oK+sA8Z0A zAc22v{Td^HuIpeRNeMW7UT{3YtJkZ49A3C^^pz9noY0hx=Rl|3IWt_I3IVtZ5COQ9 z&YGMAm^U%=X(WM$7p&n$Gb307=zCVK*34Ci9ldd4$UF1rG+YR6anaYcYBu+ zpx5t(1h{tf8l+QcxOe{^T)c3R4HE$tZ45Wxn$0hI2S!ZDKjwe>YtskEMv zG#DvpAJ4_}sE`u{v0dHUzl}R00dYOrf~OdH#`GutR9|IhZ?#)5HUT`(V?ao%hH4;< z^Ee9_(cH#IA)a!LH5(Xp^ zi6aR>(QS8OU=F}Eg9Yg&6N|lG|6Z>@C`m$mJ&132AVgmb zECu)Ds&bm~^b~+D#IezTQ31#XM(JR>M`T1Yo7QmHKo|Mq%Egt1=mn7++qTU}AV>lu z8~1wx-S_;kNEajJC1mNpXwD;RgajH92*xA`(V_CE#B7k8Su=98) zMgU2cz;#^ke6~g&vr*lv-#!Tec$|d_JXHd)4{}k~lF3j3q+>Fo02Ch$`km{UOy;v( z1+czZrEvlfpj-hcIrv-!NC60BK4!aiYy$$5h!L%P0-tiPx(Cfxb6oxBi%?uCvg)U? zNd-_fHJr;;z#Q~Su}L!$;H*?YJ~O0`2wjPE{P|9Z7g6}Z2R~rspz5P4B(Ll}=rJYG z42@MEd9dl2pr>>|En(HjFB09ES0<=JU>!{aSQR>uTv&?j*V?PHwpwe!Hda5tfPr2t z1_=(pR%Z(eg#s9g0hVKh@4CJV3WOiKabc+1?=a#@o z8lb2OOHm}i)LHY(DBS-Rmtm+80c24gR|lr7$Y?7LT1{~A1UC133Lh1SS&KXx8!3#T zYm5Y_7m!RP*%--vb+-!lN}JH__SjhQ{PGxlj9RV6>|^!9D(kzR8`=+rjGjdbMS<&{ z+wXSYH~WK!;dz9kDE1iXp%aHjd$7B=3l}e3goKd@3BbW;R)QA934pO+d9L58)&GbO%tHWL z*TKI|yK`!oJXHcLEiJLCkH^d|^kvL{jRer6gQ-+1Q~(MtkwgFrK@`CAf-)z-xdKp{ z0~5BZbq4+p`a8AqNI5n?+Js(@SA7AlZLGnyYiq2(y}b?h?%iY0S1wy~}=rE|Hj?bIrN!G8DR z1)&J>*ImJ#xDbHMLgv&|;HfHriaze5EIJ4V&!J_p3p^}6#|0QzW25>Ttx z;Dhgf03IsKh1E4!KKBZnHym`CFLQ|&<#@%qK3aktTr&}X0xf0{&vCEU@0BJYkR}K) z86N(z?>!|Ic&Y@TKvzUC?J&_InM5C!j)m#4Y&f=yakO0&V ziRcFvOazRaBahjr?p1G}gaABFLj|5H0Z5LC09X6c+ zlO&0yVHlt#G-d&*ObU#o0hv@L1ejU|I3~@ZBqESXaGThz?n1d-hHKZZ!Rp0Ta3*-9 zj4D6;93()Lgq#3JtAIE+0ZvN=geQ9Ygpo!69DAHH*SnH$e--8V76C{>6`sjt#=lF! zMH9Hk1%XVSJ?IZuzg2IAzcF%PW(#@d^JA+X14{K4>q3&i>Gb@{4z*(DSTnRBZ%OYuxc9kc#}MOad8ne zO$(FOD##NM1xd;QbVg4T7e2=Qpv)8r}O?`(0e#mfTQoji>QUH>Zk&}CsKiDLICo1 zPJ$Bt+a{`rDHa$}sX#>&=X=WXi2|W=K zh@wB};@X3d1S(2A0ZiZ@I2)3HzKejKBmwXHt{)NrBWpXJSFcz9_#^}f!hue^b7Cx> z2?3%cAQqEs(*@0v;5mGWcj-UVG{1Gz&r_bt`1Rvo$-1sWKoV^FaB-~ zO;|oxWPMe^b4cQm-!_c^p$Z@YG3ifSzM2fgoe6_}R*nl7OV3{R{A@~I;`M^L3^ z1P`vQub*^@-^=E+>$%0;*ZDwwzgSC&hYq1wR&t#QO!HK{s8cE1f3|bz#q%$Si ze)JJsS-W!Z1VS7TdX@Vi92#BeZ5*p|@8Z(+XmsIv2JyVG4?xlqj01X-4G z?hrxjU~8dDj6vbb69r0;NKR4c&;|$z1Ww2|!VA)LENIB-ka9sb#6i4c*Ym4&H4w zTBVO3JbJf-1juC4H!#r>l5A}v0L3H$1OzY&6bFAY_~nwF#9|5onADE|kG2$?0Fo>* zRq$Mox~6ggL1S zJU0ZO7z`cI6d9{jV<1O^_vuneDF_HAmpC_-$$}s$P}$vuVRuNE(&+4Wbr6-GEf$xV z1P}>aX9(870?+Y4l~nL-kFBAIN^p^*%Zw62i2Ruj&2i!?aEt{UxNsMN^YPkoEz!f@ z#o*gsUE0aNb|uw>-S6Eh8ZF?NPMDB4x`(C#UC5|iD5h(WN#fH+ zwiNuBlydONhbIA)u-|F#$5r4E0`SV`DiFqqWc+)u;^Atx4C~nn{7mu3=XUGv2lcl1 zkWW|TE~uh;XePBFRT+ty>_V&KL96G_eC6V^#(Y{-9#XGYo z+U?&fm&+gW{>sG_NG6ydK(F76&9xkByr1JvT~9^H&1SREY&B>44sJ7(W7B?H&sC_o zd~H?z)hD^TwR7{;^m9o7iYN&<&;&kji2#;028|S8N_?|YuKe%iN98&nC=?2@3ASUi zoEC=>q19?Zv)P>aTexD)60feRfA88w<%=i1HzL5=x!GZTzARuO$PUt(G^A5$W(h^yiuY6jW`@bM?S;d%a$00hEs8L%Y*MH3+I$ zl+eS4af0VG_FJt*{AvBt+FG72D6^1*T6Krbcd##`v@41fg7126*m4kg2)+O+l7{V% zduA82Gkpgq01rk69Fvd`3tAUeGr@VlF=08YEY|j&dzht@5FnQlq1E#+{bQ#;_XMCI z5|~)E6x2ouVA(z@#n{g+-(uCpQwpl`T_nNHg=}ski{Mjenhu>dRh`5L;Go!6H2mz{Z60#$W_4eyqF4b@Fxkt&tlmY!Eu_~}<3LOwkNMU~N#5Jg$0%!{dw-v9chduOMcZeapttLs3mD<7KM4a`=M zx~9QS!+d!NK-EbXNdSxqAk4mi?^f`?>z6KFy2^)!gCVMj#ZtoyBgu^_KoopV0Pf!c z?mZX|*gByK95~Oo0wpmn(G*wnkKq%`n_=Iv#(>p(slxkP$*o?m^Zr=jbtKX;DU8#! zU9g7Mp;z)k5rBeZmntp{nLv|f&E|fy-rwKf|16SVkzUWFGEl44*iu9SQ4TbeTL=fA zS_*CfTm>{kgI23GR)Hf3FhVelLaGg~E^R?Z>xE;S06*D1414L6b=yZZhl2L{U zcv2fq1n%2`XN#=z34FG_;4|<|(+pH#4g%a*y$_cbDzTqA0lxdu1`z;~+01gU*WMhf zfIQb-X$cL6=I~Gzke@Y}Cy9Q)&stSg5g~QHmmS#0|No!O`;|A(<_~r1yxpARfQo0L~M0>u)Vzv#bWX3{YN*xn%#!;+0CHujrV|5 zHfRm3UKBdB+iGRfImFN&9pdQaCx2GZcdByrxZ}KdK~}&B;97IO$p~}1QrUjHT-knW z{na%#npwy&0@zk?(Tb+9mO!T`$K7W(Ir)=-HV}41psZXpw4SWh+ zQ<(~s%Vk(uSvhv|tyVE00Rc}0m`(ze2>5nksc?9SPek@SL$}bKs|`0tKl+yVGV>m&s&K?1341pOFCjg71ZCs8~;q3FU{SL(iMVDX%YY!|R1@$dS1C(zt9%1;Ajb=mzL1 z9R}tgg$c7JSmW#=8IOw>S^+2sD3WSbn?nW0v5)yyxxBT$a`Dmz4MeSgQc38j1Ul|v zGPSWB+)EDjqGw4^L5c`LW+993w=kRdoQrL?maD=im&Wi%9|y_>>30C-O`vQ)w>` z_iK52EadXJ1h(Ci+{^akZMgg6yGPD>IS3F@ft1>x>)ipc3cH0Wa0}a;M1rUa*j7+c zTm=+OiM{WR^o|(!d%OFXmRA-bYWhN9$>8taY7W-CSzG+Cr*{*@A>-!cxYB zT3d$?D>?YuX9rMRGQ$0Qh%hBs38F(E?tdEDhHl_gVe3)#Tb*9JebPH=wOhx|d1(kh zQN{0FJs-bd_h|gV^F99ft?KrNe-4+f|Jsd>v5iO&zkgTBgwKUk9SNX7Aw9lmePr20 z0)QrL*C0lKqv9t!E79(~t#b92X*TCGb$|Rw7I0j=R0QbZRW;idVw*J#~){5b%^lf|JH} z&7Aj@TU7n@prfSBlRRbtpF%nl6rN$2sNPA#15I_X=YS}BN2ZJ=5KXhOT`MFSpLQH` zqnLN0SV+Te!v||H027Pf^F$a9eb6MFjP4;x0ul+GT?%SRp3qd&F`;Xkcpd;vLwgr} z5MZ2+N6MhE^h6aNch1*8_~38Nk@Fuv}%XcM+%3ckh^Q;p6%jK4oms*y=e6wsr%xXb)V-7~{IJEEiOD+$U9u+D;*- zLlteDvaoo#T|8_RU<pwgX_)V zbUp*`Hj?1hcYZk7c=PiHBS4e{Z2dkGA#soh+*YC_pkO3un6O$nNP=%ac#VNiv9gke za%DUGZAD(0>${t^=3E4L=`4VUWuxR`@e7gyu8;DHz|NA9iYQ^;y!?uqUr33J0Q)^3 zwrT;unu1nf`=Fo&1b~ao3Pf>C5>XU!oGeL(o=KJjkjrM#1{@eTI@J2h@V)YS2tI}5 z;12-*UnY~@!~`Rmf@Cr|dm2gj;hi7Od`~Z}0#H<23S`ppic`d+IX@UbmcDsM`EODp z`5*qxKMV%YVIikC@xg_DKL9$DF~Igcu!kP&tEvtjK2qBDc(JZ~0e*5n4^|=%Z(K3q z{YN^y_mK{QR)}tY???AG|D?QCuJ8fdwU0cnp%}4#v(udGj$Ud4*bD*v#P6G?{ri9U zBlz;Se*`yw{u2O{|9LAP{+`q7hrV0h&$6~&4FIm}FR}K$kF-%6KUeut`5xxmm2&0( z#BMD-gJT|f#*W{Kuk*M(*Ehb@1fZz5JCH{yJz=ykzm6n$3)`DCu-SPv{INN#!DA~> zl;Q$S1^7wxJZmfaIo29_yh7jq$T+YG0{_-K-+kw82y7=7ilW4x?TD;Uf7ly_{c5!e zt!8Vk4-`)GvY*QsQT*D)3y@#PfC)!e6gcs&$t)Sxf9?|j3F`j!BVX53@yd=6z`}gc zG_wTq@@K9LP)}g5QuTfp!M_Dlz^8Bpmw_H7LbUH$f%Oph)xGLTujeI>5ulab7J9Xc zUmOQW0r$w)?LdM{?{DV+?`!MVK3!bO$|5&m@WXhK#@Y<3*!=Td<+L zRfbMGZUwW(%TIt&^!h#M^?Hz8h!cQa<`H2#f#lYk_1~{I>X&WbPTcwNo&SnM_h~$v z&8|~x4$XBW!iHsAWEJ-?OYLs^-d=6*hxlAcr_<2sbRe6~l1zUC!T(095y&-xk0gL7 z2`F42i4fr@%~4e~>?64V&vat&DLys?pdg9N4qecb$?>3cGy$SFgqQvAO!t6=FzH4D zl#l?o5%jk+sSNv}(>(~xq(>8|oCMKel@AkR6LVUv))RqGA)em#z8GPm5>OaO0!l?! zm~V@+$a1nzk9DzpR03Sfh5oS5$}X45f#-S9>2-oK#AJlSf4+|fF91v1 zlW;8wm!PwXczzRhcXpw@-#(T5_}D1`k7}a|y^$J3LpPLIo^}vvq9Mr=OCGM{PJQN4 z-YP$_>__8cO8^Q+f?jXxZv?(Mu&0vbNuoE1uSXz9f#zhOR@K$m-164use(`Ou_gdT zb?+bvviT(F2^F%72`DTVPIbRRKEB@nUs@St0000W?Ek+`64|w}7mRXbF2Gt6|Nnd< XH^#oxHB~eO00000NkvXXu0mjf=O?iR literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/ItemKitInsulatedPipeUtility.png b/www/img/stationpedia/ItemKitInsulatedPipeUtility.png new file mode 100644 index 0000000000000000000000000000000000000000..5a4948b74650927dad32390adaf4252ae7a823e7 GIT binary patch literal 14889 zcmV+^I@ZOBP)TsOzq5e!}6?lHIO}6t-EGN@Y?bZ3H~7)UKkLh z9l?f-g)PJWDgUqxt9!63!)rtE0@f@H*gtlqs+rZaJ)WLN_w00eW_qWlDziGfvNAif zS;=H1$smLA^f~v&4Ms$g%w%R(Rrl&7PTmN{jT`r#?>pa@gU?zh!JuzTC)>)kIGp`F)2&8Z;E zGW*SO9B6mj@X<#fjW^*v?}D6JIX@dgpi_#F^8C7SwaG?%cW2^z1m3g|;2#x4gj%%* zwO_75$LxS4KX*rGK(L`1mK|AB!B?0H~?wVaOL=y12whYPL;ix7*O(Z$Izy9V=!yL-FP+HHZ= zx1RTwCdQ|R0M%-h$-MynFH#sKgN>g?5KndIMVR)~AL9&y)bFszM#*UV#6vYZwKCjh_Y*JbeO0Ul3hiuhzk` zE#~igX+d|@z?&;8$$KRF3SSW#R7~l{4_^J<@qA?E- z{rR^P;$Je1q5+aDfsc#X_Vd-iXQBWE{_C&3&TkM5#~T;iaeZ*TfL&{fjL)9QxmTm{ zR^s|P{p%XMJ2BQUZ)4th8XG9&ISs9x3BBR-Bf(Q8z>Uw{M7dK_zftGAp36FlLQ@HJ z-d19K3h^TSLkqeFq5W0hz*Ahe&efrH`K5SbXWWrA=WDo6B7w;Dv)mMsK=%3fo)-z8 z8UYCWdZPigk`6mNJMr%%`)8;Cq}bH5mFS+>_BpWy%(`J1ui$u1(=#XWjDe5e@+RsM`&Yl3c;?0+DLgPY%-8zmBx?W?Wrpc#Q z02Kk3Sx5f{=Cwzqon3ErZ1~A= z8^qeB+q#-l`KIx|EX(|YEI&7S`+m-6^L(F= zwEhjrf!C0SKk%xsv1^_=B+rxpN$@EMbjxzjN&()${Le72MG5tVIxJjRm^iuhWDka} z2|KMeyI*S5p_X{Qj=b3IY{Tx(Htc+iM7X$&bJA;}Z7{HcAQ1I>L(l7!>qvsH`;PxF z=CKA&5*~~MIJQF>+P(~RB*zdfb9d;TH7rx(ObKxFb7}A?sPj|zCsTk`%r{AnZQlZ; z-%dT;L!d=`WLnVL8$Z|WaYqpWL=gB72jdD52`Jmkm!a`OgC&IkOmr=!*b|cAe{{k9 zyN=_$h4;7TAws-1Voku;CEf&$x&iOEt!G98`K%UV;5X9XQ{)R8%ACiPK$aztb6Cg# znJ>{jS%MEXlBAI5NcaJl08$E^cMj+Mr-gjsP5kML{b3&#cYl#0z}i58t<5cHBj_yc zbm0__OZei2I+TqfTo@g&`}dF+9hxeoC1*4oLF*{O;@Eispb`X1IWRF%6{Qnj&Nmj4#f3hQOZ0!Q2QPkmzJTA!3 zvHMLgjJt_4^6EHhSYZJ^#p0zE_|f}!ll4zUF2{RN0ES^}6hLQjrvXUU~&Q z)%kor|Cca-1M?cT*w2Ty?hxOFEm(E7)2wVV;BZ> zo^;rCrBbA<0(d0C-@)5*W5 z3s5527vPg;N(z%IA^X^poB((oU{PH+h%JB$?K&XJ?svfT-B|u9X@AR?F2l{6 zuYsbd;No^Xw419hzslD8)_1=TTboeMU&FjbH^EI=8e^13?lc!`bcXek>H9;9DNHdXHUb&yc$Z1n4g8xQ$6 zUL5bMR;|ItM_grUwHgiAQ3?JYU9{WQzf7)E!TNO3CVMX5h@nVed5QWVLVF{wa5u^- zbn%SaXQ%{o5#UJA&&gvYh{ACW$um{zcYuRG6?oyV1b&hLA~x0@&V5)SfVtm3v*Hm6 z0wg<;VEx1Om;@2%&@nsl^+J7t5giGzh65$keJj@BvdSB%fNIb{-?u!UB{6g%KNjjQ z)@67X?cl6PaBK^h>iN|9B%4ABByk_IF|VuGDIO_72`%7n;CcQ4{r)SKWx@9LHavRt zD3<$dtSqm<=U)9>>NlmRV;8T-1n>fnjeaD}vdR^p+dE)cE|*cN+bn{Z=d%uRq?}Il#-GAo#<}z6m94!I2-bE_cu` zsry|dm42KooE!(r9)9J9{kdLw*1c^!~&eXiL1UBgD4fSnUzyBcK zxy&3bpIiuv`0p8jwTyQ7W!5~nP%b0G0jQlkj z2A;%1GBk@2gD>K}Cj)pEVeXl@x6POU6a;(=_iG{HjViMP@`=BP`3B}4%zuIzAF%Jt z{zeIViqwMQMp*?5Rd4eYb}-WdUi;2m^X#8MVy&(P2j)Rcf{IZ9P1nIi>!CdF+t98o(WCPVy`6vaQc0mE z*>Bq(BY}Yus>#!nqNqr5Ueskc!1EoP&<>P&UvO+|_VZ{|Rh2AYH6{16Lhvec4g&qS z(a_V~zkyrbj%0ti$jxaP=a7d^3)`D~--^1q)Fa6tJV)sU^ z#?r!CytMv(xDT&0643Y`2lsB#oCl^&1X%Cbv(HEtlMF+a;c`Jfu?oy2fbi>+gl*fw z?kBs$Znv9H{;mcb2tSMtk`a`o2RHkh=z|=P^r@2*R$uy9xNj0#sPm~`7*rw#5y#eNFe>-Ux59kzY#x^ zYfJE}muj%2cHwPh34-%W@cv#)Y8KkR`Q_JEzK2u(;3xO)KS_Sh^4!b@(i^7oy;PBz z`n|jFg6YkN(@X+vZEk_AWGW;bd+mRP`MbKJ{{tMa&zdMFPzVA}fMvyj6=i(*EmxiS zv8L{0j>)rS^KQRVQW5;|`i7Q%&(PBAN@2RgDuwj<-GJXW&vB}>Py)W#;G}xDWx;oz zjNkvmUzqS$mp5Sb#b*55hFXWF+lHpI2OHV~yj{HkUp5~=({BIvhF*v5zWa}o->d4! zD>kXx*3bvDH=h#7vmQDl2W;1d#l|A&=wp-wmZoaQO4oCL>Jd_v4AR~#<^0^V8!4`@nXHe#!m*k6-7gyM+;yC zkg8Dg2k`o63rwj1J30Oy5};P|h9F77FYtD|f`(72U=8rIQ_~C5B-pV7=zHPW5Fpv{ z_Q+=G`Yr)`tc)tKA9%rS1eTE?>+!TckqVzNFa-gAMIXddNdC87UMMf{*jxf%%zeG& zp;d$_0#qVxQ!*MS2tbz3Y(1C5t_~UaY<@0;8Ztu=pqNh+NRcv1lmq}tkT0n4g$o6E zp{T%5_iT7#n(SGu0v@LXQvuAKKm+Q0Qz;S&UX-Np+E(BF1uDUI&p|L9n3-+IhprpO zxs2cMdB-Qg(FDK)+C%ParE?`H>t!ftg+u8FJ{wDViH$P;xg(c#EP}R=J^N$KFCf?# znQ>vtDhFN!5kN!6UqSi5D!UBIwS`w;y*mKg?n2d2VWGYV6~lmPsSLGp1-?|x!HU$6 z*Rb&|D)GKvg`LtObSo?1Njg~CIgqiPJ*^03`v7F$V;SK0iAXjAL#c#RbT7{H`69k2 zv#g-1Azwg_vVdFHG(lo475(lyPz1CiRGtMbgrA`l^|~hLpRB|6!DG;uUj{p0fqSJU z%irw&f6$jIu%#_RA8Xq*w5DFvhx?=9dO=tA3wW9W7GhdfPzI8D3003c`{0;Xpd4!! za1xkp6M|BD;ZWvG6J77*oQdya$9^A&zmKB-&tyfuj+uSVk{n@09(%ut=EY^GRVpw< zU{lfV#g~?3z)s~7boE;No0~5{4+~DQjY&4vwp#J?hTmmlE%9463@yD^Eth^S9@AJ; zxKcgpIq+8&4fy#;g&*wnSW^7z=MS&n^xCkYEU+fxD-_{jr9p;Jv zUaIg7{mIAfk+bD_mi8j~s-d50NPSAjb3nsGi_T|@VmnZ}uFJZbx;*Oi$GISP8^Pyx z5Cs7*MpRw+6>Tj4d&LV3_(DF<_n_#hJ*{@{kHJPi{rKF~)N@r$OSXcZFw~4V`{yo# zX*6J`)@1i8DpnD_Sj0I!kHC&qN=-O|MxBo>M2|%ZOQ@oaP} z{F;bB>3cr214@!s;q4-j3j2W<+|EfkMgr0KG>5>sB-tqiAOeW!bi1(kWFPwIs~+yb zwk&9do%s27eg$kK;!y;cc5fpA4)Rqfc!QV(BR|IoAV?tPBH)DzNSOjDjMQi zlv2M7?`#iYXTJ}oq;W zIrt@K`VovIa zL_Eg)bIjMuxJGfBa!X#L(~cy13uvhIA2Hsstpkb#`{wc z04c}cy;M>$75JCiHf$gC*>5Y=G7PIrV9G@>r2;hFHmo|IAc+gGj&^W9804;L?sb}b zx7A-aN8Y}PBsU%J*tuflp{`9Q!HEeVNT3&WSYBL)N~tnA&n;lqrf13c^$Qm+T%+~6 zDDm=W$OsUB0~A;-1~Cbe1fU3g2l{@%k^wU0#nsN&Ip|0X0$z}SJd&(QQ?!%?uIxnnr?C5ukd$3a?y$ zg~{pEES4dUHZdVDVg8f6Dt}dg-|cn5N6G32N=yPGKr;3+XCMNIAQIHD?twi7e>mhM z2zcjfng)hpU^ygkg-VbTMBSeRKS_d1`)l#NX}fR^_g>P*bEwOcAw}zsN#LcP69HDL zrI-Yt|HA9z^^pV>r;D9Gr0!<~P`B<80qQkfUEMga*UX{4;Ra!d3CBsHbnTJPM<+NN z0@Sg%FW-0>WQBLm)MOkSX9xtCw~G0Dn19`NZ0HSo&^hQZJLx0tA3F-wTM($5>aFv&ky(D zmvtK+_bhnaAHd!Be+CyS24)EqJl}S41pjcaoA6cj{moBY^)*=^M0j)JovI`o$r~$ux zu>u>t5v+9s*m$%Fwdy&{DkJe`z5$;fY(Ukw82B670=EaZeO1AAe%3PA4@T}jCMsqC zuJ2FJ05jxCv4H1&(05NxfF$@QAiyFL;GYWc&9(`o02JiKj06eABocH7BX-^Oax4Sv z+y>HGkif@7ruGnw7cdcI>O7-d8E@c)7nmKmj>`xD(W`<4DK&_QVCxl@L;~t28%dyR zG88b00BV9Tw4ls65rZy8_l!UZ1tt=FYghsE;DFsXuUz3uhH)SpaK&j+=QHq$1T}vE z*Yn=_2>gAVwvTQAGZWIeh^klDq?iPA5umzIg_p0toce7J0xV*_g#`F_WAIUyA@O>a z02I9eR{-jMhHt<}L4qM3fk+VIVJRg@d)x@+okiDP7t|q?^u&d-8f(hJX9nWFvuchxp8;wS*YY$D=(RA zY=5>NK=WLUNj|MBMJc*|k_}K|?O7JEj79v^$6Fu4x3>>)uO94m+Hk&ho~0l`IdI^L ze*g_|VBc7TE|TKXpk2Rc7}xcs)rWUCHa{})3?f}Tw1wct>7{cYvyTmPu^@xzyO5^u zEby;3*|lRkGv_A#l)^{v(em2wKqUK)<8bfALNf_Y&h@!Zi8;x5fVX5k^$cZe^0=kU zfIqZ?qtB!%=;1nktLT7*R&kv0CH3%m6Y`$y`sDAke#^%ChwE%yeQ}kI?^Rwx|GN(> zPMeM2%wK`G@%JzH9(=LswEt1Ftp6>%-G~o zU99`G%v#%#1fcF;T3m|nk0L;ZfeI4f?;-)d;*1;^4Mz~>!kGjZjYjb^$|M0O1OfEu z9BMQY2}lhJc#m!ZZuFU>2;e&IAp%SSe-Z%-ssdGAO@W&PKO4dxl7x6-^8@|Wiv}Bs z2$M+AMZie~nuAXm_(X!5H-M%ze3hQx-RpnbbUY+LFf;p--7Er6!QujePn*dUn zV!*F!vi3It&&VVlzb1QfEcH?#F)tSKPwK!(5#6(SY5aS7wW_0xsci(K5n3K!i@+DrKpYz?&qoA^8wM!_NEH?dAXOT3Z940bQ){CiW>*$`W;K(nAT=*Y zk-*1$BEffehKv9YA8*3W<|A0Te1$##V;L180-xe1eOSYM>!*FVL-)>%KcvG7J2y z{Ld2+_}8=Df1D8AAC0{jd{oRy^GO9L8;TDN$vx42RaHII{fCrl2012ze~fw4;!8^f zHd^Hd-2L7=>^eb$x9Jh)P0ZT}{#)X`hn_aqxu+7KaiIY^`ja)vbYu|DTu|bSA9w%A zWnMq#d%8=><9*j>^K8e)4v@f)J|QV8=$fi)n)aL2`J@hb9lz@PK05)8l$&+{9sE>9 z=1GyW9nf)|VW$I2SDT041c)2{lMJbhA&nf`vcSYZ$2>HO`LLBFV)tQ>*>+{ zriE;Ek0wC!ibI=eQE`4|PfFki#G?jU&>NK+yRfX;(LM!&1gaD{-tJfdg0Y{=S-9EX)y_WId}NEf6Vm?2>vk9JYOgWe;J2%LD9a0 zB!HV$UW;{)gIx`6Fmrkge0(1PU-j``9-ooGr#M7_WcQySP(xYw19iXaxHC*<9QMd& z@}GzwVqT~12=GND6@|c_r7&ew)5WXPK|f7Y^Ro#ez@L{$6op6yXtWcGh$Q%`R$w6h zcSr)J0H@$*`kRxx&;u&P>M!|u5y_+WD@{_PMvm0~6Rt2fu)i2z@q3+DA2_xGe^ z+g`Lu1jlh5F1-@(-U#e1SyAb$m*^%b`B^ogXKsk^gp)T@zj_r4r5d|#EHt31k2`?Y zWaOc^BOf}T!%_lZ37?DF`H3Zyk-c}BXGb+bJ1L~r zJM8JNDe%=|-c_pV;Oh@M);IC_Y=p81_aDLHd4PL(u6w4Ne#{O)+p+9Jza2B0=&|`^ zSF1U7VwaLaP_pZU%wzmqRkFuA7t*Sh`DTh3Cy7aQ zl5Uu6*>REVFP%5uh;G;0c6fiDeJ+)>`1%k5Xv2C@PZ0p-!XI7`1eg>I zwAt(JVE2 zNuO2D052kl&Wj{ieXwuAX+t^n3P;4O?sxIfnNIv})cqCe{s0L;){s?!S-vk~R`-jb z?~+mx_Yr&RSqEY0XnK}Ms8&XA2h%AX&MfkZIYRaI^23Vem`$!9s^qxZ2W zfgjB5z#s@fN1tzAZNk#R5--qFV{##|>-%;e?19bRiIoKREJ#O$OM+N7cObxh@dE-Z z$YHvIxx=7K88y%ZLB!e7<0XkeA+pPd6u=MD#L%PfZFYxiOC|Nbq0MJmy2cyh+fQ0- z?}rqiSX4pNPUeFcH?V;0W!tuAPIM!HMfW54cQEO)6y2viI^+dT-9zTL2~jK-5B=8d zcgF=m@F@#AhgE<-DJuKh@pYr5L!&IHFhTZ@V*?aHTFt2UlI5Rf1)E)aZL?>?aQ0Uw zd^fE)Pu&8NA*7q+pTdoNFY5lUYnrx-xBn4l39lIeTrWd{DM8&&LETTuuA5CH^JIx6 z67>2#>?nQWb740k%KKYT>7)se1)p_)5_r5mM1$lH$FQ<20fZu4uITIR9G*WH20J4@ z{@@dfjmoS;pJfpEi~y4x><;F7lz)o(@6nG;1-!!^nGFFxlky`X+5O@j(fzYxTKA{G z7a>SMzhQ@`Z2@aQb@rn%m=C~YAPGQ|a&x`Y@%Z?Uqx%#AbUc{d>w!JbiU|+KZu=!# z!?G-pH2!+*2)qD>qap8pTwhjXgv4iK?BmHU_V~9ouL}jQ!xUrj zT!ncz13nA7%oRsiiJY|*aVwfFL?Y#SW5tmCRM)4;15l879pBkD*Wd)93q|xM5FjpU zILC@%F!hl&u%Mt6Sm7A}t}|^aNk5pb54vnWqH9~`1vZQ-zCR{F5ZEz^67li!^5s6} zFVRi?d>!ibdTIjgAtD z0X<#qDc_!1^|j_XZUL4vpMrF8`rF%9e6P&)_A$dS45k7U0{mn+BLriVlJ@ngDnV71 zR|~HBUk@eysvrObDM2!X)Dsb~>j8nkh_`wAZ5sF@sQYaslpd{_1wYmOQPlP~e?dQ|CT~9$7mNgh@rPz~ zKLwMsnkL_}ZTD{{!Jic*@d!R$GVoXMx?ZcK2q3_x?xz&pe^dzRO?E%U)b3A6HGw~s z0Lj4S?+kii4lSq_jFXsX5tVMm@yUg+aH(YbU(>|Az$F%2*zET_1qU9{aNhyHyTyuol-Q1fh?tE zUz4!FIVt|Glu;Nh(Os=>7h3%e&~9DdfqGsA727|nLVlza^t&6-wTuc-X1`fMFc$&t zAGpxLGuYECfPhTJ5pv|Z;|*B0b5%0ipjCMXvavf>f%ri94L|W61pi`9hTp==<)Ng4 zEo&3M6-4heF4UpX;NM7rKP8e%G*499kK*gPp<@=(;ENI^Wj_}cETaIjtRC|GR<8?f z2MMgH4E$*^$(EYuq8iEb5umPX@Q;7mitm*ZRVERtGG>U1Y-Z@^S7cz z@YR{$OM)*5FbRA?G8YTXioMSdo$dZvQEP9e2#}2=31Zn7U`5a5+~f|T?$5?TUIRbK zG~k4Id(&ErZ{|d>Fs|NUKOTbs%eAOx9Xz|8 z`95{MkWsx@UDTD{)H?$6p#GTgvjYo1fr#r?b%Fp~hBeD+)mk|&CN6DG8x+i#-}^B;8`i+8>b zR^I~O@!8?p_&hE&es52!FHc*(woqeZy&>n)-4T+WC{J_~$`4bxt0R+PA-hDX3-C+b1*|Lmlj@zfSDE&Og9@QAxRewGzJ~Hjd7P;3KjH+4qFym3 z&P#T;9Dy#tmlfgBhY8j)#|>bhg%bFJ07t~bJDZ(^iews1(v?-t4De zND;umJq*2L)o4;&DqkT&-==7{+c3oJMMS9J@0CIYDwRt7j_Y!c3k9fE zCWG%d{9vRqv%pVw|Fo#>C%`Wou#h1@68L1dbI|=5d|B1TN-;hW`%ffjRH+W>9+oom zgD{rthu?V6`UeR9AJYwv>__tm!S=gu>i(VGLF)dH0@x=cfUZnd0ZY>v=#zpGp`IoQ zD22=%4t%}NL9dn4;0xd#myfRP#^96v$f|to&ZjtT_a7Au{P-ri_W2&u3UIvcNAQ3D zgSPdj+23!}^qKDo1$g%pi)A)au!Sc&>iC#+o+_@`&FQf1VrT4k@ux26*o8WRP{1S! zPey{_EQtSlp607;zFtZnP=K2a0le+m_&pup=kIA)d@0~vCCf7R*j)4yj)4@U_ObNv zowz5L3>_AVGQRJ}T`x-te;?OkC&r~^d8`5&fl0D2Iyp%`R0i|I51@rsSS^;p$c3mD zGWe1Ns?13cglRJ1dHNqbvA*?ZpIHAF-dZ(1T@UvN(Aon|x^He<6Q3XI+ew{#%(y=7 zf$g{~&7K82dmSjFB2=OjVMLvlSBngI5u(F2jsHgeKJgoo?CZrb_=SAo*qf)$uO_6Q zz^9ZX^;qx6wvZqLB&>p>)3xBk?ih#~o>P^a82m{=;D6&6t^WcqKV)khA^CQY_IL{w zeZA*Sou7icrc9#5v13(SR6-lNfek%rvOM*$11P&lfQv6I#NdkU@iXMZ%WE4(T33;;Rmby506WLQ^tDoW+gD;p0t>nKvtk?57j=3#;`c)~gMJ^gSy#E-ONzw2luo1NH1K`$?8sBc8qKa{Z@l5^0fN6d2ESn# zuv95PRafK61c8hyfbpbqr{4I7Iu~0rK!NHiDCr zp@JmH(!hoxt+w{gcIO)#ru}0*NRZ8NQQ zJH961D-#qTinVWiu=UmlPkLXcn@;}-(^u2qCIwjU+VIVf&0}rewT zo4%Gf|NDC;{9xCfYl|@f47@5}O1YDrRmi^`aF4bm32KTCRlL5OLlU_B(9S4C!uaT& ze7^5F@gX#n5h;>(84D+)_tJinfJ%|v`Z?|mvL~}5v!wg14+TLy-q`#h)U56JQN5tU z>iNoeE&Pt0;|2GFXuXN#mSeAVNPz$+p=#jUSVZYXd!zHmprk$jC`Y!v@%6mmQ^W-5;zAX?8@Tg>FCts}E*7PN;4aB7?D!7s z2HLUK5#S%ItB)B3e*IuOJ~4s+(n1X+X}Wx6_YgP>8QP))35r4b|cp z*hNKKJ| zjkb*h;K0-j9TSP+qyX$A`2VW_|9EviydMJp)CA~xle>71n0bI$1$b?+OY{?e=(wTV z9k|@Op923zy$TCO-k~RsFqlX-vNKQ;Bu4_w>i&CX=j|-`@*EcIU{k!a+dDD%6e$HD zKk<(;ootNf-$#-UWl-bl4sg8|GXA9sKlB%JJs9Oz*|m%BnSC1;7pOQs7S9Kgzly}~ zLF3DC!uzobhyn*8|1k4iCdrWsM75~)cA&X?7j$KO%BBEc6nRpyqostxODMU_l4SlJ zCs6TPW7q84K7T=uUa(_V$Fujl;G;?yc@35fex3wWYv11J{C-t0tj|;Kr03t+Y@G^x zm}CKdINt(C2}auqU~lBZLSAP1@52UcfdSi?yxvtfi>M>u6pj84)cU)Jo)h@BQ*{1O z7UZD1Y4W(c_xcvJF)yF1Oq#y-2X{Yw>+Y_3N1kF^)1s2+-&jAe;9=J~b=^_~u#n7U z<-}`!%kkiw1qFU9`=A{WK*S1IEGfE{11+@*E$wJecCo<8a@DOCED!eB^}+3tq~9m-zxlXzCTB^( z-Ez^JvBFaBWQ(~T{5}%k-@?mOTPIZ@8x7ZF*}|mQP@5oY`o#6Cwh2bgVZbj~ya4(U zdpZm7MfWoclGGFl*tvZ-vNabTb<7z2dMO4T9vxV3zw@~DN8f+kc^eX*Phq(}7^-}% z`?Ca};toT5BHNM^=Myqab2Q0M%@=@! zcwgb8ri|sDVhiPXt7pNJ5%f?;&C?xjLQE{L<)>9(&bZ@vaC;gFlF>oh*CIY>GXG!@ z&VGkLrx1W=2{Obr3khNgKxah?^hr~R1O$w9_@MxQ8*{nLB%gp^$9(gHCq3r#N$@EI z_!jO}%C0HSpL_b?Q%oelDOCVwselL*yP%rzISL}dQSv5$pEu%;o>v9rgazWg$3Bk=0Mise&X};D0G>#&*?W56Q%n`uSOu~jnVY>J z7e=@vp$Zg`1VN_g9ovR5P@#sMoWp0Xq5_pLhu~}IujL3^!3}C=N`Zr(<6yGl;rlj@ zQjQmr=5XNn+$46{pcNv`i9iV0d_Tt(#*g-02&2WK(GA9H+}j_58RV!!Ywz#$-`eTB z*zxvy6>W%!Y~tp01&OX3&>p&YE#dD$48D<2DhJoq@cYBW9yhz(^Pgr+CBSJ_0OL)} zTl2m|1y&>A81NGaca*G?ugXUdRh~9qcs`MAhGG!-_xA0zouPjlfqx4U9iI%_;|h_C zqyjhzLb2=U>;(QhA3t62Vf?wtVU5*p?!XSXGei|QYM$kdD`0u^eNZUDaU?xEUt9$V zg%ipF(R|3PKlJ%Mg1?5~zj?1?e+9w+`!EH33SHrfk_-X9<)EeD_nnN&J}dAklvxi+ z1v zK814BgdVnqk=Uy=TQsnU?br_Mz4ijloAIq29mati(bxgkB5YP$de>KF?GM`ao9hSm zpJ@PlPP7GaUQO1R!Xzb~VwM6J=yAhDU6|*$o*noUM-qTkpm}l?FkKJcOcEd)v%0}X zOVE}1KYkn)5SBnBARCaT&tLn-gU(wBK6U-Nu8dU!i2y_dAIUP!j*hDU&${zPNXMCE z`KS8E9mj*)$sc;y;$3%I!GcqL%+L7gB#-yQ$=}YtyVY}k8iD^7Bz#`H?L;G~z(h5H z*$QAee5L0FKE<&J&^k=wxq?(+((hd?fQ4kBju6E-_L}~9K7mZ&`5Eqrd+~gpAn@PY zwf=_){8S_r08Xd?BAzGs6v}ZYk_s4j@*qrCSvrQ)LZkv@1sd><7-3xoAucFMprXuI zu!C&$b6LTA?ygaBBkvFSF9JyNaaKn;l6#!Pc9!EEs%0r2Kj-TPQO61}6H4K{-?Hx9 zZCSr}_lfmQ`azZWB8J9S_30KDb8=|~m_&lSQjD*M9#@UUJYQ$CkDkBx{J=l90#G~+ z6|lVNU7vg=#DT^jlJ99Ue%zSWu@U(H`84n;@&5ge^}qcuf8P49b_edmxIobX$#OKA6pNpUlqh7X zk;CAzuFFKA?K+4VLu7ls#5}^CR zm_*4fVQwSvj~(6N+e7RnbZq*C&t%aftRh@fgP3IpdOMa{r;=QCIKKp>!>C z-?5>E!-reF;l_5~{_P z^2U?UB#Z;p*^d3gsj(O;Q38$5Dbr{CSkO+e3d9$6Fz|w`#h2ecn9{QKDlK zBw}ZP8wFUy@iva@t)Bbm2>ix!Nhbn8v7k;|&yTPo@F}#!+DQc%&hYR}%VjF|X#`$` za?%%Pk>CWe9_1a=cHhGB7Uu7u3S75bv;kEH3)_)YfDtOH=LAU?v9>pGXuaDH4y?7M zg1Wvlbk~=rfSnBjKTBN8aq#IYc-)?!Jw+`xxQp361Ee~1~%po0%X#KnpL6QhRD zf*{?>v4|gOGuUv z(HcG^OAw(e(wP=U$h-hw$bT}n`VM^b83kU%nGk?t775NU9%G9?Cbf8)LEvYJYdKDe z1n=%zu-$jzvkN_sGa~>6k)VUJSWB!bEZ~fk;JJk=%V-Hcv}_;V+Z{ab?VMShDFG-< zB!C-?mB5Xplp;V9NV)mf#JYou@5vE~WJyLs`CxlzUl2KR64Ds*_(0|d*tA^O8Tzn0 z49@_HsJe821*201WpVb&f>hc#Ee2S+=016^O=PAha zvkKFOztG@QJQWK_hKU65kq8x;rycot5FYiWn;2D0AM=s`{b+vOg= zYh&k|f3d-*cLzdkJ2-I0&argPj5IM5ph{N0VN3+6Mf$Nyg(90&ja0002_ bzm|awiG2;K9_6hu00000NkvXXu0mjfwU(d# literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/ItemKitInsulatedPipeUtilityLiquid.png b/www/img/stationpedia/ItemKitInsulatedPipeUtilityLiquid.png new file mode 100644 index 0000000000000000000000000000000000000000..1b5e069236ef0a1297f5068553486a86bdfa0f78 GIT binary patch literal 13924 zcmV-qHk-+bP)2pQHC0_T*_B;c znHiap5pg5-oO|Oxe=4)Odb)?F`t*&AxDof>^L^+06!?ILshMKjDC=T8WEQC9hPYxjb9&;Bao&oQG4zGeGCuo_)90z#+0K8G} zaUc8KLVMgBI7@6)E!eC|fUcNoa{plDLbrMaL2m*d9iRWgrU{mL1zh_WJiGTpL4*$! z0V*5U;5q0e;2#X_$FdK@YKkNxIKv(U;}0$oJ`e=Zt1Yk)d=bMZr`SY-pd{6Xk3X11 zc%liQH#Wd(Yywo9@`mq1Z~b|I$q`%`ya`wEmgxZW%(i%3t|J)S0S3+rC-XAbe0mRs z-&~QF!E9Vx*+B%qP7W8)C zd}2xP_z9qypjR7UZIGj5=b+Cs4gD2IdiH^cAR1Kwrt8UV(;wp*%Fwv<2_(TSBthqK z?{q5E$GNzU9begaCINqHbDI7*w|B15xb!@jc-|*19vcA&e0{AAMzuM2PT+fwYkQ9* zBneuNdmFiU-w7bP{=?6Mg~d2^b3a515J%(EwI_-MkDdVJ<5B93EzsAW0cJJ;e0-)? z^j^gECCgr~$KC4gQ-;Mca$=hww=cX%X#ClXK!5(GR2o~|wwmY);F8>*`RQ4n}H;SmslND#bt3p)279|;~A0SJ6+>l$8_ zbN3&i0L8+;gb2e}t9FmocBg>t~*K?mU})3BecRJ`zEMKh8eBZWz_i;9hTI z-b5mN9`D_u?VnejEX#s6{yi=dJQ4!vwKjtPy!??ZsH(57016U@NJDddE_Q4v0W>uM z?$vMi-~}68u&bNIww7U)afb6zW+)YAlq=3~93cy^<#*w-=HNF>@%zpQpnuW(@QmfpN=jha)(4vaQud!;IA>)A z&;?-#?9YL2A@ITW^P^kI9J{(93phLw~Tzk~S_ z=5?}x=bgVw9(HsD%1^t8M2^v zMk>5E&_Pl11!ZBF`+dcf>o=bJI5^$+;Oh?x04l{Eh~6h6xehAAA#i6PzirlF3XweD zOjQlG4WsmrF+YXBFEB;@W_E%K`Ta5X1h=4IEkcp1DhXLKN+JjS!NWqdFdoVRW_tc9 znnKbaD}b;8^8Hl$|2F2o!6ZoqcX$LFye}SX^1Q0v8PDhL*2OK66wh3{oPT)q`pV}d z5{NuGKxoPksLx%wI$s_-8m?B;dVaS7g1pA;8}ZQUXx-7YPtx$C8wO^2a_7 z7e9P4_pJHXJ^{yn^_S55!RrrItdt0CBtkn!glgRqWB*uM9)d5@@tj|FZTnp$!Jp3i zu29B#B&gTL_^3#5CIT$<{9vXuW=|^yW|ZZ%YWxHI`5#bOUl4_x+=JfXVKmu zdT2k2yZCUYC>SZY*YDsO$1pnH!#!PtdOIbYT5E#c>wq4qnyH&VsaD{Bwe8+#@#hZD zxNZs0?}?^J@2Oh8paGswkN|J*AMQ^%(8I>c1eo&tuu!yci6Y9liupOrpTpdA?PKsT zd!w||Kl#^x9IkA&lHV6EU!ME1jSsb9^FwJzQnW7OeBXgLzW;s9H_o?mK0-I_!T$H8 z#m6Kt$`-heB}f3!7QYR{+;&~_bDrn?%lLIOaFN^|Oi;Oa+!ROzkG`7;77<3+!3L6G z?|hX&U1jo8p1&OU1pFVN3cQ5CZ`z%=VRZivc2x@g*5(FWe0p>0#ho{I;H}$lP2Deo z9|wW|h2Q2FZo?<%DoT?T-TBJs*RU)-TYiU#|)(ssj4b~k5xd|bg)cI zjFj0R5^O!ab*_6~S^-Y={NitQrVacA=6^!quXA@S0C#!^GuPXSz%O<^5nxsvyhj~} zlCSdQUUz>NzVL_t_qi5qUi3TrIV)&xUV-C-I|%_$1t>`czJuNWb?SbKAX0#s0Hgqh zW{9*MJ5hi*gdJe)-#Z^ASgK$1o*%CENlAiO?yrMC-gZZQ@Wzw_Pz%%R==oPJZo!Lx z<5M%g{#*ao7op>%GHFKRryDL@HUk)&4cN80%uygLARCQFBlp`Wda9G3?-br&6pdyJ zHh=6hxqAoiz5%Vwnq|$nZ4dh|;pI)aKrh)>uh)Z$Aw`)8LBt5uLKj8*?GO8~f4HCg zK5LvxfGN*EjR2vN|7rj~i~qljxlKRa{(CTbkg|6c0VrPlsZYx1*de>`>?Y5@_udiM zep(bFKny+w5#ZI1E5R29a|AFkKoCgjjl&D`9R`y;;9kh{&v^iyqt4vp*Pglr7oY!h z^4lF8Ko^0HNq_{1AKgGAyo?0+0bbup&a<>8Ml$;A0LS9G z)o8+KXp3tL{oJb6Z-;|>|0j0-Z(s@%#0n5cQ1sEl&wjuEPr?U(N#dWy+Qdg=b{B$+_?mLbuz$f4-E?Erh82Bif&1Rtjc|yemS$}GM z_VclP-d=Bu@z@!|@q;ehef!O1%KrCW#s5!;@Ha5~;2hVvn|7V5<{8ei9v8@hf2v}` zMdvM9VBdsqyA|j)HpFi;0_ck2!i)7@WCBs)t6T8QdL5e4Eqj)vdikGb0belkH*`ZP zgy+i_^;#|c6sl8gphB%`fmJb~i>h#Vc$ko&ZGI9)=4M*Yry5Aw9@ygsbcP;|L)h4? zKDAjb|J+~_{BifVf0Mx=#{drcDFt_+exWYxV9+1Hs=*dL4Ezc3aX+63CU@+`IT86b zW)rygx3b?1Gn8hGftuAc?0yX&|CBXKZr$<9u*1vQO^M-!iUUneFa`~@2Cuv-|UX z4q-4q)yR_TYjv176L2T)`4J%WU6G1jO6!jV2(cUHCeP(p7}Ka4pNZdBnI=>qR)QP> z@bYrWg^NbormwqI7=|oIfEQ~vTq(tKv;=&LcbyU(4pCAancay7W1QL@%RKQV0Y<*e zk|DoMB%lmI7Lb4^B5*9Sp&5b%B6XIKm(ouaPY~g$_6AfVl{h@uht9k2K>O0wWKPcw z1Obv7ds5LV<MSdC9cAqLM24*-bqR0kTAhNe~u2>a+;_ z?;z+85)!ESB@+U05Z(9jGD;eg_x4;JzUS9+^Ix=1GT;Mz4KAYs)S(9@k)-$}`%YW~ z6$yaXae64JT_Q%5p%=hlEY~9yV7Ru={X_*=VZV^CHxz44#jn-s$?xHCEJkbXf+PTv zjJp3yORC7wwgEd|T%!s=79+J@xp;BV4c5{8}#CFFgBk!ADz`zKx`9i)R zm0X$?6O|0D0Gn2jH8>{%NVpW)!3;se#VM53(iguShF`*=8LHaf%xyqTTk2!R5E`mv z^gG;w@A78SaaU9uUeJ3Hc=X(aSG^|kUlT;j+lu@KXEiLglyo)fWbASJk!-w#gz^G4 zN(G+=NCNb06d4)?0ir0E%K75qH{*3Fi5!M*h$Jbt$`&Y0huythIO(5=cPfodF%In! z)T|0zumteX9Y|GcRgG5bLi6f)Jia}4oE=MxtY^tY+Csfvhsgv<;JW8Y0HOcUTZSZp zDp{W`!lK0Z5)xnlu^nUxa7lCE<3=i7-}Ret64E*n{1=T*^h6Ti4_)c|0d{fh$Jrnf zkS>G>04h*Q098mxv^axtAn#im2is@BQR&*2d`u)Df{+!&;3JVG@Jhi83K0{*sx@G( zzLt`}d`bWxli;Z}Ll9s*;erGe#eqt>OeAO_3BGaMKYZZ$4lJ9r*Ej})!8sEkCIJ>y zkbpj*ge$$ygYY|H5IjIx{)}N(@msQ6v)xbes@G0D_XVv7O*Qs?4Ze=De-cU{xuWN~ zKXL{` z$0Rr&xX`K_B8dd!ldiarB-o~L-0y!&XZi>emdP+WOQ}?Xl2L+zy_f{66CfgiUao^t zsbf)5ehmx7fXNYkS7iK~MiWQF6sZ}OkA8d~{rEc0Yn7@^c-HixrTMU~IzmzQ)fU_{ zE(;&uh9P`hi@P7-_uR{1g8>?XNU5MTDS9d0o03nOp=cI5{{*SS!J#ALoJw)FkiZ0boY@d0P)kw?&XWLotqrUcw@69a0V#rBPLv_B2?Iw1?`veJ26m8kRbkr8 zn4c2Uuuy9V%g5m``Tlp|!*Bw!Lp}v>qb$bV5AcSGjbY$3ZwxS!-4YnlUSa}dLJeFo zat+BEOt9p7#tt&aPdZx`am-aHYXQ_E+aJ4JNVRT6H{#bqMc7ZQK%@|{N@TC88z~Jc6OGpoqTy-Z5YMLXu zF(!dkF6ZnkJ4ES*n0cuZO#*RFJ!~I=x&!|5o#+U>x%Mj}k0mdGOR#|Pe zF0@+X@wkg%?gTs#gi8|VGHrg6{MYOCxg=PL0A_Uq<-Afju(J52lmHu;uOI>be*DO= z(4PYzf$rr9kR`&<*I^V&aK|W@oyybE%W@ywa}Z#u5P}4AwnGF6Fu6ZYx?d6?dO?ZE z5atb&1tT%WBq%WrRX|UlEAoD<0!7e^F+>bDw^9;}YnP#J%5M+}HfoXp1U`|V!m$;~ zm2DycDS_vD52ot7D5B#K3674ArXDX%0KL%$wNjBEOu8nN85dC$FaKLbi$Kt?Qs)!+ z0X;TMV3jJ8sSM7@fgdw^@T}orw_!(NZfIjDa~tjt9k|mQ!tRKRf}BiTm@wQ!tUySD zu{VLxvr%{^z;P{AnR6txpP+sb0mXT~mnT5>9bsKslEa`%FT+O31vL!8aZnLT6{uh% zQ1=VanJS4FrDm}U#g7re>%*^ksImcyHv$zq zn-V{s@$)o7ydRkB0Pb)G0aU3{+4o{az#ZFIWJ^Q&*JV3dmIa0}$8zG|5ebw+i-v); zm}a91uf6^njC;r6*?q9u7iB#>296s-(_&!iDw1F#mB3(Sw1?+?-`_ht-20~Ej6tOD zEKH87;(4A(QYq6kVK5vlPk_aI7s`-RkubSxm%aG} zD0Y8xdo}?mhycFpgEtx^B%rQ!yikBoB&eW|69Fhc+$@)MUH=FIzeCw*v_Rzw=uDrR zWKjfsoQ7_|#GQcax=Rp1)xlU>FBHdEg#f>#8RknN`aIK3(92TxWAORJfiS8Ek>Cx# z2>~j?rBX@)^2~;YD&VV<0HhHv62P#86%YZ$wjvb(t$Zp0eAh_{pv>s}{F@SVRDhWT zP-g?b3;}v4Jvh2AeVIsLST(3v7vwXvJtDz{vQFJE2tYQtR#KbIX6phH;6bm~-J!Vw zTF1O(1&Bi|c)eOrNT4mkU&qeZ%^Iu}Jh>w2f5{6RK{JL-Hmgl+S(GJ?e#$xM2twd` z;Bv`Ek9+V9w+U9@!4=KUefFp8BRIgh2Wk_J%{KImy7(5Djc8q5#Gk({X4Y{VD2v4h zf&`hL*>^{g~>F;Vivkc$-4c>p}RCdR7x`;KoxFOY?=sb2EI8VkS~ zNn-R&X#u`gl|{EZpn9YXvlRf$rcej!{+t5P+>DIJ9UFrfgIhs6T91^ed7+soz$)O& zGp6%z@4NxM2ff_$!Tntnwl$IBe27=OmVWc7KR`v$pj9h3X*_vwco%Q?(*+2E1%Ijp zs8lLJ39(h@ZB(x`P?DOffu9C-f8zTDzEMg$CfRF{f?EtC0p)=^&FH4nfpZHbKZ>qD z1;lx=>U$d-ThLl>P2KNzc9U!B`dbICAVIq-zyIc854wZ#vq*w}-dJn=!#u%)g_(_d zy*^(7>RTTbW0+~_rHX)ErK;+$px1nsqs(iiis*dN{S+Am2x&w3uc!cVkO~}6I1IVu z=@4b!kDeb?ubhtpu#5uWGAzuOWR?P0RVz^dMNtIsMJ1T32|lOv^B6$M)SyzSi0koa zEJk;90u%d0SOLwq-4HB86(rC#4Z1_Q4^n|9t4L{36_|;HR8|1Gwtptp|<)hCB2y_q@2!LRaECoI&NSH843CHoB zKKj%l7C`ak^F91b551mWxPk}56-!mnaA|dns=#dl@=O9$&@xJO@SP!OxMnQ>Dk}-u zr_```_+RcwDx?1*0vJy8Tm`FsLA#+u>4C?-VU+6+Ogw^7GUldfn7N!u zTfJOgzU8OmpI|z0iO8NIt1;81fb+51p{4;%L)_cnG?-L2E zdMo)&1Qib=pS z@8f*6NCtVp=ozTfz=RC>e<_1j{M} zhRLZNj5c_F^zgyk_#e(S+j%dJLa#i9i$-e?s7Pf9 znCyP)3#OH&xAU~~WAIsY!Ih{XG+t0AQw!h7 z^dk@XPyFPwoByiQ?dX^{V}-~AAT$0-aYrU|a_7h$iMr*C7C`cUb=Cu;R0eP22=M0x z_oeT19|_{*=f&WQ!!$0Y2OjQW?&FCpJcTt4Od0K>A{E0$W%I^^sOx0+6ZlZ@`y%-B zqF${}-J1nI-QxjIK&9)432aie-D+Qte(q4N`ps6O1(z;ff>;0SRq=a@)AM}%VL~sN zDFI@F`B7^|LEuk&ej^Wl90L43c|8MsF&_yKhd1ua@0Dvpm1fRg0DeQap=n5&tyODN z1jvFvZ6|Ezwb)O=0*q5?AA?OKh=}lt`I1eiC6#+epyjxl8q=Mbp^pp>r4CJH^` zP^=ufq66oWsf;?WBmuJOO>lc17zOeWjz5y~RTaEM_DwJwO;9T}w0a4;=c9TI<#W|J z0^{T@yoq4wB>mGJLo+Mc?sp_`s%`?Kz2J#e#U(iv_c?)1=;Nr00dl1+Mn2}v*SV-#9NT#PG%pZ$EbHk)nwn4fzT;{mfpen@_VL*dp7HWFg*H3BKwh|5ZFb)XMzxc-RX9~ z3q8=0oURgrQ7VHTELIFpL(@_D?ZczPv*8s&PN5S5aHk&?Nnh!EJP@$nU?uA|WR!pk zK_p1z+OyN7&WyTK)lwB;lVjWGfIglTh*n7w1$}2!d2m`h!07hqC5I$y}-C>#g-2xVG4S=0&g9 zgV(jN8sZA6YvG0&7}KRi5PrwUCUe5ESXQv8iOB=s*-w4mIN{QdSp%1{maHt_vm(f z-S78TI#)5Y><>W#Z8b*a-k;cjN-+DO5q0q-vtcAb4tNBVYu0j$5%~3IrKM0H_~3Mf z>?h!xdEnxh^5rGFf8Mup-z$_aR){!=0LAXlfWei6(mU?COx#)QqtzoDf>Rtz0H62`#Dzt8`gUVF|$w>CY z!qf(0z^J?BMFBvyu%H*6$&c0y70}U>6A~)3>l{CK9GG0b^qhP7QuM%gR>JE~{`^mJ zzY_xJu@9-MDL{5M$AiEk6-bK0rdws%5a3_TsZI>OiVCA@5%}5y>zMUfb($cpx&f71 zB?Uk0{TbDW!KZuiR~Qmn)HQQV&nNU#*(PhDcW3%|mIz_)-aGx1o5%}5e zp9fl26;cI=-*dr0Lb}nuvfV$E0NE(o2X3#v*4+J(k2TYKD_8)nee3(Ta`$osa3}aN zMO~?AOisV5Yiye?xMBex+URRoyb6L6t_Fgana>pyxS9c%0!@&+WAH{j@l$v{Nrn+9A-?=%$WB}@RyDROl7zYOjU)tN-``%zMNbc3j zwT16^VIFYKdG7ZV0b);EHrSl$SrT|-NdO`PE&zrp!HvTO37`iCcr0J|82G@o(>)^i zEG9s5lEvWjkYmTs293bKSnegii{PJbeR?AMN#_>`bJRUb2tW!@F4SP^o6%kaNE&kI z;PBu}2>#vdyet`Jg;`DOgztmr%~1fOWUh4RI8^C++eT5!G7*zOTzecm(*YfeKt!;? zO28N23&xRj%5Kc=m%JVb$OwF9lxG;_;(`{V2!65q7kcz53XqK~_-EMX&bMFt_AehE z9)4-MWtR&AAK#z4f5y*cLKVPWb&;rsVL-FY1*rBomYP&@1ejVG!PdcZ0vMrZ3)2(@ zL*P-Kg4mPA?$9eEd1q0FbJdFGM?v0BMGK;JmIRFCzo8@ewG?~{t*X7=UR)KH=bWM9 zjW7_($rL0fO$ah`w5a<}y5gETpKL8wT2@e8FUarT@dw|(b?erzc8)r~FZOkc=kp*h z@y^hJe!mZg_YP;ye|Q4O*hz~h50DZdBhe!D)VpI=#BEN+P$lqk4oZEbEHMEf>X5T^ zW;O`?XR8J9+ig^(#a6P^x&=|ndOv|rNkI)$1gsG62=MQBe&?*`B=Gm|?azHK2%sCO zEOEYYLsLQXb=|m{y+{~+Bojsv!`eKZk_}X zflozIRwLlDajkB{dMOY7SvtQ+$lSBSxk&!)kvxBPt$FWLMBx8xynOqtXBFTN220Hq z1n?#qSy5J20Fvpq@bYT$8IhpT0O<8HB=Eh|2F@ChIxHKffzMGYSk{JCu)zS&qvClu zjx2MotoKv*7fCQHj(f+iBLQ;Yo7LqTb37Wa1U|(hX*W^>G?(;nlJQ`MX|5Pv zm;z}rZ>i3Y!6zaVW7fT**Uk$f0D({IEd&1DyLbN!65!08-+Rzo3498v0Iq`@ZOrzh z(_@VJ1I*8e!i2Ke91L*Kzc$xRa3&`71`htF?ysT>ph5Z$`mYLu0J|pcKI-Z)NL7f6 zT=e|7J7ZvCyhCZars|0~Et88}FUk7^M7!OVbK`F+@_mkfOerWzAlrixq5RCcEV6-U z&uWO1Jf8Tk<4ZN|bUUJ!hG8sJ7sqkv&h59}eCyW{{QnJqgQ{lwvdFW-??9F3>!0-D z@bGYD@TTCN$M{oXCwE8;*K@_;DH=6NfMN{BxcSQIAD@!wQ-Xkhu9;{xl$IRGjMLB=f8sBf1ZBlz+W;5{QYvyN|#p;8Vm+GdBt)A*DGh_!Kz>Fbos8ayA9P zyp6e?y-6K$+#d@9#7VZ$AIUZPV-7jTnni>;Dq!jab^vW7m3i51`S)gmp8+{Q>rl~h zcv!H3FtULqgGk_^#VzXoa=Dy+rQhrJeh<6iJ7BUGzF4ff#W|-G~e=yjRw}g^NC?R zNf1XXBE!6>S5lDA(m^x9Bsre}a1aE-M&kE)m;ywep9Q~Ot78MPS>WHhbN2_|?)AFA z@x~i({C@TU&Cim6YLc^-FrDW*?zw_bp-mNMVvD;>oSDGV7k;2nvaj$E{&yT-if^bH z67f($Vv(&f{JsH>k6u|~IWR)z7j{?$T~jd`7?=b`&dcLkDUn}C9WAk(fFL%0~U&H)!{CTfoHlR1`;dykC z0saxVxtg-sd+&5Q=L-Hz0#Jv#t~<9oPYFVgY~VV~u!3y369Za|y|4&a9VQ?iQ=IBP>e>SJor`){CDo`-T8ygLFW$;{F`)R>*ChjeZ&e7XhETV znROq5=NChp_rP&I2+*gI4*3l#i$563j=qV7{UgkOp@cj+QGhIWH4{ZW1cUCPS8_!c zAS4~_M{3|lFR2owm>_`w3rAXpIy~ABi@TTZXB!`%lh4N8t>Rx1V92OIph`f3P>$Y6 zo}YlX$9AGB^?F^5=;!xw`0B0KZv8rrU+Wynj&C#?U=MB3RUK8&1KrTU%kHYhdF_!=VN)*a@+|f%1d2Td*9s&DVynJq%_g3n91Q2EcICuU6iI2O#paR(- z87J^b?kU>sb_~#s-FJ4s&^hdUwY|~4v*&bFT}|Vjh*I+@2V=^3&jWuK2*rp1JLL>-e*J#VfB(6YN(0@L!7I|grV06>1Z=_ zUk&7YaT4IZ>kANuqamo}3V0CSJ~+DnJ9qc@er+&3{vWu+eOksDIpUp4ts?AYJRXDR z%g(keX&2P#0hhKY6d+nd)Pc^aL}$V{xOecrf={8HN&q|%_uaEv0mlN|z=Ph#>+M++ zNE(aXQM81(KxYk(O2JgN)c5*>KJKl+Tm+Q_scobNc-Rd?M@( zyuOZ-{8_xdx#&By2y7H=lSopqN0B7?j|+SXZJ9|AsR9tGzzw{-p1nUVkbt_#^8?T| z$xGMcVCZZq6^Oe$=k0S;U`8D6?d`of7!3Y+4C7na`Q-0AOP}wI3J??Eae+^vEqzF5 z1k4P8Yi91gDlK|$M9+7)>--8Qh_^=8AC>%scH`SaHFa(%~ z>9s8U%-hW40IQlmBY{u(xI35rovf(0SG)*0D1aU>#KhZ6fm96y5K*RvDn zsQ}5js;Wu%BWNAG*TF~sFXs2Wk@uB|0AQV>G{rbi1t0=+4m;2rJ{iErp`G&G9LU_B{aW?g?_P8tGtL^{v!J3rV$g(N5D;a zO)gGf!qtz71g`IX1?RneaB%Qt?8xsRAYGv#NQ^kR$`i|oM-~4FKpF!-$Zhp33PAo& z5rgmf9&|b#;rUNuXb;5 zX@WZ*(;#G>Mu$(nSTQSaW1-(R<|xv#p=xUG_roZ_lP2}^LVMT`6zw1j_6oqyi@WyN zeg(%H*g;p@>+Nm3*SoEo=8oq$J65A{uEjVH1)%sK03XLg6M&*ff=3Y4?K?< z52FASs9JD$@9v}A;JaYdWs{vRMvt}_GZY{_ z+iY+Z9zO0PE+4ZLAP&>CL^@7i{NCH$gF%1rxVQY!aqa}5 zD3aiV60;P*o;c!~6oAs5xUm23{^Q>2xy2(P00ohNnE?cvDSii$5^5NH87zLQjf zY>Xn7|FRA+I7WXzv4zzCu*D-I00k9OH`NcE62x(EZ~*)J`#+Sx$MHxBK=DDcgRwmZ zbIlaM9~>UQ;o;%q-qItFM@|5WED3n{1ONa40D$~o%fJSRR%SrY0-+!P0000GtBRVq0F>T4_nsqBtTs;%J65 z?DM?u3}=QSDN>f~-97$f#S~LaF~t;9{Ny3=yf^TZhQhqw z8w>L}s6MX3o%`F*Z9mfUPROSn`CP^yvyh+5LbKK8#P8JE{X#wqg<1ouyUpjazo`ID z5GrO)DL>+HPa$drSlv)#o6DsQ@NLU&eG*g-nJMzO+~Xt7SnhtwPJP z!RdH-S7ECIm`zXbKYFu5WU;Q%MX>v+#(KTh9wTuDJu*}d!2YzaRR0?6wb zj4YcgGQU^I^XoR+YYr61-HJV9yYY8O1PthEmhBw-+n;CwP*oIWR5&-wt(-P@zsY(=U+$y-8{{4PW;@EiJ^28MwmuqGG5$6f%0&&+YcU(Kta`XzA*$-iq@kP|(q zyF%|-MHX4ujytfjo+Fki@_Ob=c|E&)skB7b#O4=~_?sB(!Go@(fY`BPFO%B^ZNPCH zkWoxg==$+Q@UaxYwVc`;uNOiOc&}#lh#v+{y!*V5Ksc{wGUrjRm-BPk8<&fhu1^uX(Q3N-Fc~k^K zp9=(SfDu0gdKN{{7+(aZE`WX-{q_x4{VIPQZG9;#L*u~3@SqJY3L)GXS)YmWH?gt{ zN$i%`Q?pVyvM*3#kZa2Hrt3V_>Ewin9XT8Ye~sRlpl>;}uVqbDmQ$MYVn)-hX8nK! zoWV%+7CfZE!R|#Oz#7Pi%^Fk<^R}k)DsOv~C$C3-)By+yJgyeba&879AQ0)UOF8nG0|X)<@}mNXwSzH4aB2ehOiqSZF;p?^XRl(l zuQx14{GDB12}C>z;G{qTKobG8dm_udgmF2qBjLJ!;ZmtInD9XuLB3h9^U$(E@83A6MQ{cT_n~kc( zEB?KjbyA-iiih}#YAUS$aYf*ESaM}S5=z;u_BzH(7(a*iUdpBQixX`kAfANi+rPbU zg55U3p>Wzryb(Sxr3Nlj(9>_>aG~5${-tGEe@^#2k1t5XM>&oKXHf)=;Ubt= z0D9yN>f`4$fTG3~Nn?xgtiUU2$^ftax@EKe-Nr;yg_;&0p)={%2LV5rz{Lb~5lIAB z;CrzS_<_YPPnw2RV|6VYRj^vUaXBTaFBTT^pTkE!mrZM*%Vsnk$(zBT9geZbK4IH@ zF!y+sH+F0Msa7K-JW6_}-J5E99;;giIi-O@F{9m((Jg9*@ixY7+ELf-#8~U%+1rkX z@A2)@e4$o3HZ491pCs3(BK5MASu;m0I zh#=_U7qEvfW8A<#PHZgop5S@wRqwdy*?KVU8DqUiq*JhYZvN2k^SRuOpdFwHZh_wt z0ub4wt^+L2>7fWB7+V0p_VNr0KmlD1`}fBY)`1-*e-R^<&t-1p=dwt6_QL#JVf;Qm z0%m>3@8eZ}JeqJdodq$;3rCyHvcS7XzK0^Xfbr$K8ym3oc;|QV)^6|{ReC^rQ2Eho zF%Yyb0;6ex*$(*|O8^1+pCqVB`S0l2^sisOP<#B9fsGT`nI5ip`Xw`b?$+ImPhk}V-Qxd`c<0WSpBc!UtN6gmYu zDG|s>ZGd3Lx6^RsV^PnF~;6=43%2qOTC~=X2>-aK4O@ z3?90g5#c*$bf`TsV5eG#`9hA79#l3PJMEDll2x8y8kJNElw=>_lMuj!5Q;#-sfg`C zOYvN5Gs;-&1>_T~{+2W$4hevI{)~WDap1C8(iGTkV(-V@W|L3#t$`3w@oh(BBbFnG z34Y)9t43E9usSaGN^dzO!7>W+YB8-|Drm~*H6=BVJ#{{K$Hji?MT)GAOZ-Fq0R8}5 z!H?ftWA|P;R|vnY$l&!0!0+kWEU)rxHV1NsyP=p=K=9&);B`i4RE55(_kS-eEbuiU z5&Kz${z4OCS1ueh&HZ-x&=GYh$no!INo1WN+l^K}A(s@92!O>5JTFj1-#`&8W8BE4 zn6)1Q5kCsQx|D`L*lNLA(}B&$H8^)Rf9M%a=l8TZE)Z=tcSMt%3<2TM^$H6`uq_9& z`0Z?N9=0~_!oE>Ga;@sF@t}9%9PzLmzigQC7kb+XdVWy(L_UpKNr9$K4gja(0DX8F zdlMu^YHuM__NsWOaOx_KN!(+p>c4cxd}j-p{y@sW&Z+>CG6wB zfZtm>&SIYL0%VRxMC3tw-*4El=U)n3Kz};oWtm&Fj8>~)o784F;aM$cCA{)`ghw3U z&gu&2{`Z$kmrfVHYVHk_*@l5 zXkZ@~5_~NhDeV^Cql1gs!?BMq;rO{?T7JElOMR}0W`k`|D`r9gPJ(^E#ogWI-}KzR zp6mB`qN9lYtc?9{bGrub>oq7A@=)xvc&q;deLY^0;_K(~v%R^VFMym5+so1mMNm~P zh;q3K#Bzx`1ews#IdlugKFGJKzcaO8Qd4m^tPs@)m=e5&t6is#0zrHlE# z#N+R!jNEGhm{M5G9E+O(%XwA4f#Z!l_VP=)G;tADIpx#ygCLBzXxSHRHF7=@L6hw{ z{5|EFP@3h9aHA1gL%GUZfh)_fbap%!$mex1_YAD&#oj$Fn`R@CPssTrVGBua?3qwp zD8$wwVT7=t*=$ad&qw9$@@8;hA0dFF%1WwXqH5@y`IN}UGpUdPa)JV`(6om;Kp!YG zMDX(1ecT)Wa{8(od|yShb!!!+2jhne(fq7-L88$X)ka=kr2f3 z({U_RcN?*5>E5mbKfA;ana8B%B*m}%zzG~^91LBLvY~6T_&JQ%HAQ^=jeMF;b7A70 zQ4dc)_K23SI`A4>|q5Z+(X^ApxWYV6w+Ajh6(3Sp)K3+Ox;a;4~v4Dir`mPv?B$%1@VXNHOwV{s0f9r{F=`#Z4aH}8S zSqvnmgxeHl8>$CMlDQ1H!L<0^WcqWiS#bwf{@YQ_L>IG zZ|d@7Nw3)+e7?X%P9l(g_pgo7Z%BL~@-c4Ar<5Zr`6$xyq&&hy^$;cAbX-tGPJAGM z6`%Y!&&bRLhHG_ij`D4|O*o;^vIYD*67KwZlE!?b>K}o5gW_5Po z+N(obO0zkUUo2p}P+)zZ$R}H;3J*{wTX!u+{811iMKB2cd5VbOYZ&&J+3z6`fi&(5 zcWTysj2o|=O$~lvhy#$VL!`=;=t14XRZbw{`RKtmSw0fKQ4g!Wq=}4tLQdku6G#YG z)VL?gA{T76Wpfeid93n}LiI;0%n9@tOU(X_%@5dpBE4KK!1b$Fd(Q^_oP^-CO*Sw4 zJv}9RBfm40czO-@=`xSx0`U6m0Y&iT^N#gDaatLd$18gL`bYtYZjaUVKijn6>e=}3 zY9Hyl{XO4~_6Y3hk~8vq^$33(n9I8#y3jBk$Z9GEim$bUE?_|st(>BfgB?rr#AMu3*}~&qfb2qck3>g9#uCd zpRkCrRLHUUR<#bI;KFrXfwJYY(6Xb~Tsz>zulcQos9@BE5?7fknp<(zju#DHB@{FKcPw~bbvO7#a*E5!io`oa~Z_2`Vr*=u{Tz*x~xvS z_uH>z6u1ofSm!KUyUs>?pDS@|{Vp`?HHbHuA)w0lhPOq6+u>&xA>4c0sKeuC{0pDm zUWr}%mERi+qH+O;xBZ`Q9_avmkklh2ASS{VfN>w=0*N3H0D(lXvBy7bbmA6#c>VYR z%YDz6!ex6P@(J5d40zzLx8V1lM%!i4YvF68?Q+xpe!1m*o!=R~@46coiF9a#!|@2K`5}(ydpGt> zB)$u)mIK#R8H%XJ`kny~KYSQ|uoWl3@-NSwB`G1PE?4|oi(BogKQ5Ap; zoq-Fw?em)QOFXzPN=j^B(j!JcuNfv>_XYS0 zPL}E7%nU52`5Nmj8-Cz<;|l=A0{*k^0snsVRe84x*(Y0^_-Ckca>|3d>g95PD{gxa9x&XFZvFAF}erX=PCPBQv7v@lsh4BR-3d{lE zT$WeVCW@fak(mHU2;>5)a=331@x`Lj+r*>CHnsu2iAKv~-%lk z&W7ue5G>%rTLfOQg#`c25O^z5yYX*Zez(ah8gqhci~PIGIbUSyK1Gg#=f?Uu2_Wd_ zBmmDw0=y>3^(rWJF1l2wJ#tARKRPaTwtEghAkx47(0nT({QB(hwa5Y59j`|;fhu3^ zEAuO}3KPNCKimgNoIn7y2}{-C9_H}g6C2*NT)5YAK}iX4HBX83pw6`cMUiK|?4c++ zCe%OV#HqU~Y&#Y+zBL?6$nRUY=1U#CgS~lUo+qq)0I-64vwT4astdH$QqNo*C}DpO ztZgB%(!Q2<1&LmmL3`A=VDczZF%g!jV;Q}9GhG6(U2r57oM4^4p5DJcwCbR>b}(uz z`k~43g2;%8*mYDOk7kOn>Zx#UPJ_aXF97KaeMUAAScNQ)6qxQxkp4ODo^ zU+xhuz0#oPf_IS*tc)d<2ZuUxgBN{|zZ8tQu$>TGFKiLVg=Uml1oMH2*!fx*A9!;`pm0$HsYj~=*U2VD7HVJR_xJp7Jr2nyNXIyTFN0M9$yY>F>+r)8 z>19WOisNs@DKp|Jt|&;3UtmQ3Cc9AKdWPRCCh5{1xtZk*PuQ~GDz46@j&Y{n z&!_HkJ6FltyY^7h34@3)bVCl>iJRf36eZP3&3{q061l7x~_^yzW-Zw-(^B5yWDEaE|TskG0R+#ZFplw=fwLU z;t8C5>~Yzn_d(Xr#!RX=KT)*J-l&^3Mtp!2jPB`#Km=^G+E7iXJcJaiNX1EZLIS8q zZ#cOE)N^lwws8j(BivWu09_c}^ZOx*(gX?scu}<)U8}=|*}!)f53oWSBAmnPa?^r_ zslzr3gNy<@G?cK1E~Hc_QY5pG!m6&iVTILHPP`V}=;Jdu3=vJC$_dbA8B**U^p&`! zyRn)f(TdpC!)Ls1yhTOnT&&%NjUBXiyA7J(rtEz_W_?nfq!xRBLFoHnB>6u|=%HshlPc8Pb+~%*V(*?6w|sbcXB}2My>IM;QSQbb@V9TK7g?xVyd|u+9e7n!pxSZ| z-aH*FB^9q9Gxa6a2?wS7dR;!5unbk{4c%D?T8VK#|8C`?Z!~@36lumBaH1F zCZyeQk$kLh6hejEz%K$4z?LAuk{4D*dA|+CnN&;wRgWjHAZR_}gE5!#=UM*FDHwc= z^hYM|k5!Y4R+&+I)lbOw2_P$k?nNNd?}<8_-xG6(zkyXx#23yKK+`l7WQP$Sh1%Ew zwOM2Hx|oG)k_p!({vCPFjQ5}=`LJv|^kTJ`-P@&f^Ub*UEpDXmJ*Nb9q-cuRs#I3)ob z1xZbcljQa<8a8|zI@V{Yw=_H%1VLdxRFTIVvTtGAszwjz`J2Gr|LVL7qNFo>FJ(E= zi<$^xBD#m8dwLX3XLwI17_EJ%AGj=xgZSE1-F2IEEENE6<;1ok_B((EGTJ*h1c#tv)+OD0gphmd@`w{ zi%GI4aR82WB0eh|-q+3nz~6c)6T7GQ7E0t3UN6RN()A|({*eg!dDPki^jmsBd_Uf4 zaA&G!i|`=gYe7nNo!h=5E3x-vZ6E$ADo$b)#kNXJldQcg%>$e_XeYd|q-U z5CBEV*xEEN^?-1r>W{zVDPo{`I1txQ;d9mim$u>*tsen_o8^2bvi5{SFd; z*o~;46YNfyyc`N4)s3H*NT*ocQAA7Wl3hCND2rz zx*!HU8dB&cHoB3B#X%wX^B!oP03L)+rBE=A`vFA zYK_qXs&_S4rx6ljdy+L%K7D`j z#DX90j3EHi>rdF&J^KO1S9RF`&7#T^N!33t`mH^{|J{rCP_t2wU2Bp4O>@n6pLt&d zLAExPJZvWOP|Yv1>vQ{M_`>cg=tw@bf&g#iJq+>N@6_C9E`VIK43Gr4yUR(xw`;9$ z)~#DOC-UKPUIi7;n36?kJ7K;?U%QO_|Mb_!SbKQd{z9$bI~ZRms=U`)o#7(rC*AAv zci!9A;Jr4FRowjFoNZ%->Mf)quGHmTs>%F2DZgjzxFXzh6fn>Djx?t?TAH62AOhP_E0?U9I zb%ymf4r7wzJpf7l*M^`Lb22Pn*8$ehcHS);a5c}@OZ7>t?RT`m+Qp6oE1nFio(`*B zT%c5hZ{Y8X_PcQ1+eY%~>CpO9kzTs46yUaSIg~P16C`!4avf61xV2_5wF`DUy(9+9 zap29fqW%5H)^C0HvGq+0)PJff@>|)nD56dqx~>Ygi~CeH)^0NNeV2<)qkbsxHC@*Q z2m8G$cs*egL?_<1axJUTs6KkIUETcJ+LO(%(LGrZAg%CxMNK<}x4K;}*nTHaeJ8X! zc25lNR8082bpx-*Cy>$ObRwHf9Pvg%h+QfI+}_w{>Rm2r0N2iF179nfJZW1^JJ!pK zSlrizDx0smh2H&Daghn2A4K|kl0V1B78k6VMvBu}NMRfY|Lik4_|l)2AL8^Yv~+#1 z@#WlX_5vefHU}qw`{i=^mig$;`;8}?e~Q;1&`lzL6ppI=04rE{zk`);O}ME;Ex_xJ ze!+#fg({KxhKYSEjUp(7B3P-m*jP55k?WEORy_Ff3O zpRep%-^3{q51&7)!XG_mKi$M2TmCY}mG)l!Jc{7_u|DDxU#^sC&GkulI;ira*CdF5 z{Ntb}fS?7q-e?U8(62xyh;?)U1`+^arE0R#IEWJ;>*s`s`&=Ut`14h934WUnoE$Bj zamin{%F)Zs+Z*-YUpK7(ezy%P!A)!d(Jo9b@Rgin%~^X!$$*FdN}bhz5zdw1vYvy6 z%^gj2?B1fvzFDn%&JV49b5)(u=!2E=_SSoqN`>|Jg@uKQ2?{EHSkHeN@(H~bpmaE4 zjlK#$3@^SBu84aye`J`Tp3B49o(*rD;XT;u#(S~W=Q$~f-`G$KkifW%L}^N}2L)0y zX%NsRMeMH>gy5PXXj#$LC4^hmwps4sN%1^9f%EtEJKuWuJLUR+-E3Ju#@mlINrfe! z^S?rOF;D}p=YfO0JDb)ZCmMr7Sta#+8=B-tZ!~K zt#6j49BH_=_{v4d&gJ>GB>n-TVZx^Ez>J`R;*Dq4L9ZX#^N&q`!~x7eVbW0oh(mT+ z1>AQ;1@;vU-a$paF|Qta?uy?P>Yec3*31HYsLV6+185$vC@mQ$J4$|lo(KqCUj##1 z>fQ3rt-F=l+ohfQDw6+r&@+p;?TrE1R5KYGzK8LZbF=Di;JA#j{@u;`{jv>zcrL4c zu-UXeI4W0a65Y?9jG&Y5`TgjtM@&2n{@^flUH-i6I!plH+u>UZ93UV*0Fl0}6ztOtwM?~`3Tt+b% z*RPMYZd3@dNuh|-EsFxjyn<@aOT=1hpVelf|P|M8%+=WBLSkzRU#+&`wF%+&$J+mZd0`fdFsbOzR$>?5F?!7K9YZH^+&5W1M)|qe85GpprBI?I$K5ur)jW&vpO6X$8mrF zC)M-&aY(Pu@dUv8p$Hd(8zh8kn=78Ge;9~(u}NWo{X%Kzb0b|Kj{7UCD>o~Z%B`qX zQ}rttFkp$m0fr&HSc2B}20Sf}=KyfxwjYIbDy#Y+5o~q`|JG(pgR=e4L7s;>pC4Zm_q{IM5FxJemjxG$uE=8J|9uCFnScm@&nqT;vEV>SFxmBQ+Xk$uDK;mf z3Ff{TTdx@I?>@%*+LrMHvu(a>TIRcWz3XDnbQ5mxA;${^q+-7p{NG%GuP;X&V6{2; zVCF{;d#&JU&~pI%v<)gK9SbB?;lFkKJx22XPT4x~p5Koc-3`o5Ry_7vLwl_rA%yT6 z68~D#gr7;q$t@*Ja68r5J=2btj49>s?>w&Fs`0pO=sD0-?a0k#yf!R(#=sUp4nQJU zKrYq>yi3HB127jjAqODx2PUz>A6RcX@Su6TmN5wq37|heVt4GdZVFgoiU@Dhg)7M* zcESUY2y$3;ME*a@RtGNdrdWl`)+U?Zl?rS;yWe~EgLOIofBwgh%U>trgPY@!-#cGI zg+(wA-47gK7}AR+Xl-vib+UU7fUqUCCxVR@Cw-&kuy~e;380DAyc()qWZ*^ReK$`RI3E>#O=-P14SB_IXM8K zGNeD-jXJM>!U;M6iQsz`^O=(##i5Q*nyg_zDhz7{2|s*iaB(gQ{@i1|?6>guAL8ZD zJA(Wp*>?V}EW$qt*3R0({!~TzV4fB81tn$OWD#KaJfrOw! zwM&r#z2ovz1YKspzE#f#OHjbUA0-@7sF0HQgR1{LS?_9PpUv|*4HW#rLXy;09o8#E zz6w_tbpI5?VRm_9lo<^y%Yrt`k-xbl_LwJa*vGZLyK6yZ-+0!1AA&Ua5CBzogb2ER zqTQkE{>TqN@~M=631fMj4I%lr-rF&6;q=yzcTAX3<@FkpPUIgKL_Uc??G7$+BL5p7 z?f0&?Kip@`4}5qkpQ7>~T_<1!S^7Wv+5HK^^@_z#_@I>L!V8ucTIpo|+X4toj-rFMEq07Se` zKGxL(S%Ck5PVkTMa`~PSOCUY;2#NnqB7gOXxt<#0D^E*4xquNN@J`KyYTJR05qvfq zO}NwGa}og)!VwNoeO!r*t6*3kpK2cj>Bz)EpA&TBzZ3bQ5Y9pHFBFBjfD7IMzW#45 z7ru|r{rgG_e#Xzq{X4tuTelw>|E2A^e}&fvD!$wHJkU`w4)*pWjtcf_6?>?8z;%(B z@PKNxVsUF5XybPb8>*H!*89QRoA};UMm~3gMqnB^uI$*bX*#gE@0=o4rvqu6hmLFq zV*ttj9tz|uIQ=yw9`5W~x9-%f+wG2pgv*dZE3sToa!wxnAr6~YPo1!@Kir3}!zY{cD1=EKCJ~f7V?OK)z&%F6j&gwG;H1d^G(wp4 z1*+RB=axbA;sIUyhaq_WJdTX)LMF*avVVf(uNy2&4lwZB!F}2_X(8}05@pv9oZD?1 zw4}zya;1Kvba#b`)R^D>E`jFwv*w8|+tz=1t@;cBf8X4?W|r*gU(`;PIGY*LDe1o%p;TccEWe6CVcCO6CrYT#sijeZh2Q3F4wf3Q6J?}L9=|;r|y02Lb>9002P#uVr8Z@}A!a THF?cV00000NkvXXu0mjf+jn*G literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/ItemKitRegulator.png b/www/img/stationpedia/ItemKitRegulator.png index 52a0790252f76df4d38ac777f03f72c2014ec426..1b77ed2b269007cf6ff6861b2817bc1e1f748b1b 100644 GIT binary patch literal 15014 zcmV;XI$6buP)6VLM{~Y|Msty_RFW+GUScs~J7qGt#J=OE%PKl3*7B0xY12 zLKW+QO6042&b|4r2dY3e$=2)v4{v7H&71e0?>pa@fR{MldPRoSiy~+f{Jz!z$YoUj z_w3RiL4Esuc>kk1orgC3s$@fH?{5wnUMd2pxSQ9P0`MtD z?fPdCm(PoECe6QHLS>*VKXJf7$8dg4Iq^~vfWZF(g3!W(r%-P@Kh&I|7s*nQTs}Y(l9XTg-aVReQR4X$auSz6U;q z=}LM0{&`37oQ$a;5e(RVY{JGK-^l%61FLu`2oUysuj6TyMGk)W{zb>q8IdIg5use; z&u^E^7rnI;#S0}sKhGzysnZQH==`?9?_ZPx3<@H`Z+}UJTb~+m<)VzE38rbnb`_x6 zdC|KYEnX-A26;Y3yz{-^)zFSLysoP`d{%~by92dO2DE3rNx=aXzumEPyavGkLB`SU z0yvnpmJXRDpZeujX!HC4ceV|vHXSH!N0-yB7g_P%cwqz>#q+(+kN^I8h|6<)(|`0$ z6+YfHV13hM`Le|eA;2)tKkokX8Y>Gj%jy#oHXd;%-!D5adRxz*0AcVc!k+JS_@H}? zQ<(pOoSI+3@h9#Q_c1@ArCwMS$B3nKB1;M)f_WrD<%!L+@%#z#+zIf;k_gE$j9LIW zeEZhIg_XZA&%U!LW{Q6g@6GJ_t3Q9U_<#OyN@op;u>I-#YtRh8pu4J@OyWBA=Oe+g z0AP0k9L$amkV|=caX`0%-{;SWu#i`wTr;3t2TTX5H37Ev0wU1-&oZ7X0Tv4aw6P$R zqlRq$8p3 z3nClmr!!DKK+C9cWvsT)2hEdP+jAqpm5U-|(F;vW9_ziCDR%Is)r;!iUb(2H?9Ced z+3g&_N8e+=XQx#t=Jw(0GM{hbpD2m``-QAVeo@S)v~ONrgxXG}bL-BQPKxkjw2B|s zbs&O3?vx6(f!hyI>76n!p2^X z{hrClP@Jj`eBTHaM3Eqes_+d=y8Q;)#Dlg8x7RoI8+gCr=I1KrW|C~2#gT|`zuX?{ z{bxo1>Tb%5XL*O0c5O_~+Ld{cC50xbW36i>Q2s8e*YVQraZUn81Pry$32e&_U5f;K zzqo)zxX`iS8!HRiyLf+ZeY3N%Uedph*Bk2(^&ikA-E>vpB@d4Xy4iu9eP`tNo(Tai zoJ9#u@#|ti^v6=!hH}-8%x&oQSZk}ANZo&Z)cGFxj!y#3|4kWw+GQld^2)6C4qk7p zZ*}gkZ|Q$lYwEXj13txPHLCBksMlu|M1tvb1AhLAF)|6BngCZX03@--?GC>;3@o(5 zuTQ5%>`)W*BL}v2`7>oa0f4Vu5dQ$X-0yxhrA2r@m;sldA5ns&4-tP&)p3oHW zwKpzludQ5Az70aIx?M5KI~C)@++*`!u5arfnNDC8xwHzq^(ZgQ(Hrmtp@S%xAd3!D zzunGRn9h~}tg_oM0AIhVz|U?Qu(fymMxKfQZ@q%7n?~>t0|E?+e1_|&BMhI{)`LyY zPRnOkFC>4z@4P22&|?2}?2q{GjV(Ur{#|9{b9D@#MD$W&ZbqSe1FwG%ZQ|bmvkUzO zCJ|xdX=?ac#aCY+jRYqq0D(_23iw`3XOv^VXoUP53GjO}IptFLcOUrpdmp>cf9YDl z8b7#>1XV8!k@Xcx9Qa+w=A$b2WmW-gqJZOd9N$GU+yk2t;0ETs^@sX<@Dc@);Kw(I z+rfzl;B|gDjw3;}VY0DljI57mudO714@dt?m6`!bLG+10DSu$Fd-G$yuGZ>ZNWC0@ zd5DH?A_3$W2}~q_>5_oJ*G>0&LL9h3B*8LRu)H#_UB}yd>sy_T(w_cjrCsAM>MiF1 zK6?T$IIg{-z|TJ!OoFiqaCHggG(}R)?~~~1ZKHQ3Y9x_89q%Oa4NxNRI8tXjGpVd3CzFT)9R$)3( z<5ffyJNSqjoS70s47< zG9;a&lAzYWv`xsS0&znV z68k!i@2-_P_Ykbx+mDS8clOO2m}SR-JyC@2(|m)GK#VGY7uQ}<;OCzNBsi7;anDyo z0oq6W<>Z6_vg`~6-*5~NMP5MNrqKp19sI7wc7Rr0eDhWHJMo<*(;_7C{pu?=?5rL7 z&kL<66YZFB#smf+{d_ z{K|s5Yzm3xl_l+W8ZG-j-Ptv6uW#vpjz7KUS_Pz&&@Cfa-YE%C5t~L4dTU3~HaPg6 z66glE1yTeWRV>KYzkqhIj&^|S4kbW8&sPKlVnRd`*by}t#|DPQ;;j1hrCIG8{eDZT zBIvIwF!Kihm4ABpRNrYV@YDwUuB>v>3c|BF*D;aGq{LKaNn2dGp#2@Zzqh{G*+3F7 zy8vzzBUy#)c0Pe0RsymErU-5We07DBU?2eod4An8S?9B7s06Y-KKP}w4W(U9AT??M z#ou`=`=9iChrp+(TKv7_t1`4dHenwXW%>lpP2hW>-skCs@>;N-`0UhwoLF92&?w0+ z;Lc{}#@$Vwh;ZZQYx)|F15MED{J0X30uTwr5TS_#eF-qk^K%-%AO#>LFdQ>NkWqrb zFYR(I3=8->Uy}cDQ1|;JXc72Mq8ix*t#&)|MtEuCYq$b16ln9ju-TM^y_S;vK|6EMiQ2-JF z0yf&~N=k!D&4B!}25YhdnT8GPp9Jjd7}4|OV&_xwuj2$KSNAbDgZt)11ukF$I!tb+ z7k$%746k6Uz)H+Qx$BG|B6WFPpSkpS0^+pL%fisF%=vSI=?iSqw&6%v;P5HImf+jnhf zaHoOHeSXm?4kmz!1n|tIU-$O~Dc13yC4F{lh>ukw1?cxP)f^jG9cxWS00Mu0=46{X ziz0@=|M9Ey3IVuWuCvF>NCLWl7xM$mEz@z{H*EWTG}V6tOkn*WwYZMmf8xTB3fSv5 zh@UtNe2)M$me3v2_mK#TB9g!c`9koX`Y8e)BS3Zl@HXSGq~b(Y zQHXZ27;}%4#LjjJ{^~D(1aoto1X;KP)$LpNs@u2kon$>}1q)Kh%V4@{oIZv?x*09d z8%ywaRu|Pj#LEKR7txoKSd%2KlhgqA8{(I$4f{)tCj5TKG9QCwuHm#Ff|UNDEW)R? zqnW>d?UJ#aO>s^LiKuCIV;+ev>0f2>L+_*&C~bA1^g2K(r^DMb^a;L`XmrX@yYO2;l ztjKvo$EQmhkJ3Iwa!=T>QnX>a(}vp*N^l?Z_1QL@J-rFDS=iXwRha@9hx&K~Se=)n z03X@I-w+}Mn4QVV|JlrxQm7n6J7eZlPbW#$rc-d?_-(M7_mKqHgYee1OXgUc_ClfN zL!gTDyr{)_6=VcIlN9^7g^lGJ|Gkjoz;p~=UriZZ@sc4zUqR3*gF0)l{kTKjzv0(pjF93F)QRC6 z(?eKYdqw`v>QeFzwvj0X;v|SiJ}p4C<`;btq|73AKb({R;qXY%Kmvye5RO{Q9%(HC z-U|=-o9JrRLOprh2PD1AhPlaL?`K3lhiwy>{n zc=!5v0svBTm`7s z1MsVL6V}TaxcMMhGkbdQw>N6jDDeRy?$>7EYIYsYW;;;G>Wl=M#y8-RKoms~6QiAt zNTB!j*gYh`jg!_(lI8JUIB4+>UOBH`ySkkFhVDulF*`G0Ze^G%-V2a{sOzso#Mn0h2Tqu zVSwTAmQ*B{3@(DoL_m(+&J4@)VFfNHHeoKg71>+k(2kH`;29E}1mW0zY<#e@AFko> zdUkCgaxWF9$18L$tpb6+GOsPuy^22OslYfv;J4kK=+6)JkDW5Xn%AQIFo^RS)dB%o|`5PVG>nFK+nWAp1! zMesjB1@NEOTf?!Ch3Ge=_R)An%%!ROwd+p{1`&WFsYaih&hhVxPy2BmNgzuB5XO7Gz)qA=g){2kLZ4gq?sfEBKoziYBq7i(8#GOUCf3QOlVD*?ON2INjpnLF zccX16PGk35oyhuiefXxcDJ|-gR`hozt`=e0#Qmr)!OArbWKHMi|L315u+|bGhgP4> zWzvY*@j$q z2ik}HxvE6ZCrHunc{bL;ZNC?9{tgZ8JCDo_bfpVSpDZ<(&PYMD*>w-_=dwVFnXKV}=w5_)X zeoNPNMu5m!jsz&f9J?+|?u@C&9? zTm9y>(aR{ks5~)Q_KPy2HTioAAh)*#~@RTu@ z0$iR?{w@w@!q573e;D{m!_6kYr|u7j2Y$Vyu-r3WgPm63ks9_0MY&ahLaG94q7nrH z1yhzqFik!xg2-f2^ptpjP*C^p)=dOo^9kUE*Zm&QVFJ*-2R_NWshbf3sFDhklanqf z6(4*GB12ovAqk>2yIK7W{Qs|*3Ye~<97h7|{!(ejEP)(d%ZyoKJUj*XzkkB_ETQHO zf1~S~4!}}+65jHGcX?wPe8GByHX=f`;eePBp>kkA^}vRPo`Fg&DA2-`gYw_-?~e|# z<2&=PtKI#T`?F3(F5crj94HZuZ0X0_uUPH%m(3?A~)74289KpfU zsB8`IJ-t;&l4Ju_aMy0=DNr2^WLz(k6hU+?ZjjN{j?`a4I{DaW*P=fphQoP>mk(?? z4Z7rjluar_U#Pb@(u=d|^`%+udiXbw1Ql0OD|L4~=x;>xXOeI>*ZW%lel+$Q6)YmdOTm5lK!&zm=mDRAuQs{V?=%BYi3C|E$*wQE``T$Q zu%y^dZo*RTKD(YvbE-FxCmAgu!f~N0>ala$A%MN`iQsS|cqAYjppYf`*mWz$JY){< z`1hm)1LEF4_}6^h4QUp}iOfU;ZaoOdD(%+wp)b^1Y*_mCTe<7uu8$~y2Y#Kiioov| z3rGO$g~&7N{&3vcS@Xf~DNw6|q~exvcSnayNP@X@!S6(b>d`5_Zi^FOL0gZkk($76 zD@A>itJm?F&*jt%25UGPuvASkmNL%PTB1ON9UxnYnyB|s}9`8uHO1<*VLwM zmT#xO!EW!@IjHwrD=@2W!koGVbJ`Y^Q8Dvr5iP{__adTi%J>H{7Y3R4+TFVgg=I4mpC5#)hb@!1!?8NaLFU-nm?<2JN#__ z2?xK*Mh_my}1g7&a4`uX9x z582~Fx&Va?SBo&ol8LRp-=3bz4cwPU29E^T6f6m3!!Y{3L%;jqoaDBZOeUGdgcW9- zu)BO*+wm2vblh4;=28Fi=JSB92GVxL82EDY(1C0UmcDj1wd6gEf)5OQFNg%qW&nJp z?l6W^_xB?}xmAdOUok4Y`w@J_B>E4{?#5mhH>w|yu(M_KK6pRGbAH%3Y-R%KQ5>C-RZ2P}^zlBvmoDieHyWQ`< zGo)j6B7iV_Pt^TuJ3e6_6iye0&ab!Xpy+q~`%L~SlYfd!mo9-++SZ3IuyO&uqPIHi zx`y4Y>)4$M^my$2DgxbT@%QB}dA<#fr2yGZt!+aGJ*<#b;hSGnxWCdGE@3}yE`ly) zxzAx#U>hK%gOgA}M!6?z;r{GIHzaXO@WRe`7f3qCf%-xPRIH-DZ?gR9-JinOE`80P zuS`s{ar03FI`zjmHw%q}if;in?p?t1bu1e}*KkP(WY>lm2^1L&JzBG{+=qWjr;;Gz zIz$3b0hpf;;J9hv8DjjP&JTD0tx6F@fsyc&YQx+Xx~<53ClTtX+8U@`-u>AOC$MZ` zQ=CEN!i_38Ra&_))I-w6v+|cc@Vy}LE1{0xZ*uV2JOrN7i#IQc@a0R<6PJ(XVfQHT z<%&~=N|$%7ARW^J@eswxwR##sc#NGp%|Y9`w*{NkO<2e;3|*#nun)PZ>0>{qsJy!s z1f7T=3emI4q3vgo07+N!8Tc?5{86IPNHX=!pOQ&^@AaM3sqj&+up~mN6VaNwJqv9d zrS%6x72q5aV9^7=h9EaFJ@9F4bpr6KEyq7${m_Bzq`(Mp?7_O_$h|0^ph`XwOeBHg zlVJW}e&8$fg*24v$1iQ${CuMOjerCi*zI;?uIg@sz-RZ8I{sOP5FivA`HT#0XU>1n zD*qfLtI5IlEoX2;C2?!g>}h%6giKPT?q9080M`-Vs_X9_38LUbr28+o;J`L?zJU(#;l)he3Y0Ds(OfB!#YT^bv zgMO3!Cb?B6=w(et78)cpxa0sQ5n$^oIrgD{CH%g ziVwa&rcJoDX~6AGg=MkWyR2avpvb&Vj!SR?*CT~bf{;yk<1p~UF(YlljJySDt^Zlq z9_3-JOe$5Q+YRse{8<6EcAe4c;|77BO#^5XNPwI721>>v5rDw=fUndX=n4V&^`^rP z=##(*UVihH;hmebH)AB2Wdva0g-AdI@QX`CaG4!={@}NTj>>(HL7K?Qcf zagU>$9x(jFX(tL)lQ!k5N8ZT$g`b(&gsfU-zMoAipib~}7tdmGH*NU$f5QaRXhW%) z#YH->au%6^OPT6r&{WL_-ms8_lE|(jL~wz&1#SzzJ#<4PhPYk)ABfrY6C z5>EsXNlj_vd+ko(-4xULIk4Ckvo*-OBoMO&P6oWE1gnSyD6^!f zKs^e$P>*w*1D=?H8DYkMIy1pLOjUY2Y;{3oB%raxw+QRINlpTcMzaB#bjF|Wk$?f? zT2enX@JTQv<`MjP1fIYj6d&*9VSSG)z$^mqflrZ9{q;q>o>FA-8+iSV%jabxz=IFh z&D%I`VBT;?4!#@G<@x@eR%_VHB=;Q`?0Sp8WGDJ>(g+F8rOQhUe2Q)5??&dyuolca z+kv}v6{^_jlnkJ(4%uwhCjkQw3M?4`>}V2wO&@!}oFd zJp0}S%9)%(gn*5Q#=VV)=DXPa?}gu&-v1~nNtzV>K*t*R?Y`l4e>@s4AbAK>fbyT0 z-eC7t)F>iB-A#&mwhqZT)d!ye+?`=bQR!Bo2KzxVx;ZF_g`RJd{QC+pF}Nd%1ftW1 zR|{?UxXcMqas|dC!DKqiNZ^Hn^%4Z3hXnpJfdg+^CQDV~3Y8Vmj>KJd9qxW{K!bTP z8|wae5E=9VcrBe*(0pN8l*A|j;xD-OOR5Y@-m|dJ4^V$r2+B7vwn3L{xLN03p3Q0j z2_97;k4l;hWDEZ8>d&B3$3o2k8@K8l+_mi_GN1!H`#IQgWq;*N4a7-QgFG)H=|c_P zi0ng+5m?_ZK~lo^ku=2|7Ek0J>(5WQXT)=x*bDRLc(*2#I$S*6hFj$sSldCbeZoO% zAGIUvXH(h8y{2l>4OpGn{z|Zj>n_dkb>^lVR2_}gjuAj`_w8D5X@5v$&U?B+HWq?SbO0g`k6p1iBS~ACESYVDlgg zTeaN4b!8;9iAp02Zc_<%^eBMsvd;&O_$r+J>?-3xWM%Tz_ z(GJUN=*fFEc1;ARc5+ZT;I>6$wtAOcXY+Z;VS2!uohC2x*{H`VgB^gA0K3NnpJFBx z-A@}US{edKII>a&a;c6FK9R8HB>nF1cm829KUIhHB>3I$1(CoDvupEnxT+S8?R|4A zetao6fYi122s`Qqm(=}4fR9UD@;nmg)%NHojK%8tHk8rgSI&4AP=~*)71?#As`EUk zvimxY^=cjpnP>-uyMNpuBGmb(nF>&ra6d=^_N;{6soF>W{QaXmI!sXF91`G-V$=e{ z;2#%l17PbQYBBLp-0vASKerfb>5v_4?jQkn_oKf{dW>AAH6;zNp7ZX>GnME8gosB$Qq%lviekY=Kjeqg4I91! zKW5i;37?$-*r?91`@3aiva=1vln%2wUi8^19V7+SLQz0_K)~0|S9D zO`gRWgYAQ&kgY=}Qon7#eiTVfM1c5tR6MpiK?vbL*N18B3egXCEXUvHlTIN2#atCG zPwj%Hc%X}*l8USD46msCX0na5Q$^dSx@%oedi9XY6;*esOoVfAduIG6e{BU?g@CXo( z;yHB#6M8H_j!}RLtg2k@TmqMI_(!${{}|acgJgIG@85B=h?5I!qMU`ciR>XTDP5(} z!}~$7*LNv1kXDm0mz{<;FL1lKa-MgxD#ZYdd9o6^C-NjUZK#5D<0gMh#4I`fd92uY z3tBxNh~6d~r|%0o78)BC6;y{yXKIj4qWUpMNTU18!8rvpdhQrMRA9f~d;eGZJyt*H zqX0<+JZuF^_T(} z*2y-hre+?9YWjai0{k}KE`~cDJYoxjS}7X0x05W14!5=%NCHB}IyMKS@ZKRD&XWb``Yr4A^GtBHmu~f9Uqnjc})q zprE%OW>`}E@;>^^nFdRWV!j!%fnUdy-&UOMBFYOwB_jg*+*Cidn zk8lV96bBSIotuT!sdUh_veHV6QbQJB>4J*$lZRc?%ZA9sQthGgt!8Xx^V)3Zs{5rN1e!XS(3ltj_lsC zha9l4#MuL7EKDRSOc~i*ZlP7|B;l4zfVUTGZ2a=Vua8x%p#lsHs+BOHUeH&%H)qeN zo8C=E(;`0}OMuzMxBTnI!8UqGGW@eDPbRg?x_4EBIJ&ALuN-QPc=7C;&rj_tk9Pj>c#XFF2#cPW`Y3p2$x25wB1)M5KR zgZTx+3jC%AK<|DS5j+x*ymiMT0tJEZjl~qe`fLMMFe!>>nxK5Psy=pjeJb`L0d@ac znWMg1sP$jKaaS0q1U%X%Jl@{Ze}W3&KWiLDRYID~T>`-gRVW6OVH?p+MvM7{q^72b zB&KDu6k>Aj_je+;`F;fPi4fX{Jsu%SXcMJ78Tirt4CL_K`E(mr&+()vWTPDrH8cbz zw!LF&+!Jw+H>}tMD@KHv25(n_>#S6VOsbBX!lFyu)9o$?Ky*Dm9!@s^duOk`?%3L$ zju9M6jMY(^o0}W&gwYLu2@jNvD8TU*3ZgrR2z}leQyFwDbQ#G|ZY8m!&@Mipj%q_% zwc(BV2Ik9W6V-+QTTik*&of#t3vI74-G&qUGj$WeuW8C)7E6srBl_eR&yFd;xm-E} z3bK>Bf25%Iy(UQv06V^yVS5_GDu@Uw68PrB41Bo7&wXW~0juW&GAN>hs`u!X;k9ZS3ZxYSG|6V2Pf=}(u+_-1>v=Jvy=VwD{+p=stCwzaio=x1Qvo zB>aaUC}>G&;f~RUqVv8#{Uh=$i+@j%JD_SEkZ=u!`Mub?KKq7yV4P!j@kfUvZdm$1 z!?o_HsyYx$22bNjE%HE?hR%n^QN%JTs+NXowFY^Y1Yt5fbtDE@z&L~$Lmlc^`}$52 zZevp1LINn*p>HnmGkf zHk*Z7y#`t;hcak@s&W!&vcf^297cjT86ZRmaNi%M45N@?j3DqSHum_qy4`@)xdzOo zMaWLJK~v0Q*C^Gdp*USZ;EO%KZG{LBR)BC23CIbAgwX5zw)=gq05@D*K$hj9dtz@} z$fyLq=yZE6+s5K|6QRWKlGOxhl`Y5mh3#112gmx6=_GEMR@Xe#4YPHqr`oNiVi^W> zEerI+4jdUrFsV&)Q0V<`HB9<^QB{wd2kf&(n+HOnFZWZ2mk;b&_W6y%RVmoH!~S}dPz{~V?!DzIKo zLAjNIlu(A{vo$zkc^1;A8~ovKy2YN$DW~flh}Jypc!&(b26N{ai*;{IctG|1sYG0LLG6be-rt z)o8Wzn8*rD3HRDWQdACQsI+8Q zD{D|eGThqc@?JQ_I~sY|F!q5)*f<3h$%jGr>^VFH$*Ww8MU_PDuDON@Hj$jxcMGt z0rQ)f@1PPCK~k?(YxQJ4mxby<4Khg$rBMfUQe`h{iWUIX?_)yj+8F`R?tm`uj!2FX z;^xB)8`n!5AnJaKOtMdLD*WN%=>T{yOl%?!JiiuQzy-I##1MjLy9WsV4=_jGXJ0`i zB~V=Esj=VeKJz2bT!|*{GHe5h<3vbA0J+4WQ_a{QtRj=YMM*V4uS;S8CHww_47sUk ze|a_TQPS`O3NgiS;=p$MoTxiawT}5Mz7}q$nCn1sN@uBeO7PRIOR&|LhWX4stWMp9 zv?f4iQe>&c0O+DsYf5mYFw~_-#t%QffA}BaeX zSD61RUN53${5v>aZ@1gaG%1}_p>|M366D!S)D6?FWjvEe^Z{v*GIU3nlNc~JbYH4z zEa5&N=rRMJV*XUMXL}tZAgBj?_*o)EhSDSRhn4#1;8P6jACClT9}_389G5V!+eUj8$9L+rDr9qclsq}|l7<9HqHR1?46}kk_R$?ero@Pfg5iUY-5-y} zp$*Ce2V0dz4tzJb?^C}YCgYNQObiuJB7v^!Aj>j{V(`IdqyWQW!_D_F3z**oPJ$vx z>Pod%Kb_BI+1{15h6KbD3n0?hoEUM0%WQM7V+^rIKG3=3rRG}g;3)V_o8TjYe*?k4aev2zq-Kw`{gLU?MbQBuSts_`ALh(E0>7+k~^Z321b>ehPvOrqu;S64+=v z0$7N#<>D-33;$wW|1N@0cFE?9lVj-x+dTeDAP63NUoZhslKrnAVEzK@@jV=WfO(&Y zU|H5Ajv5kzee%#a1k*Ix3vBGhyRi=ehD47A^qeQQUdTffML`lk3tH>nNAL}Nl-hhO zFm@97nMnj2n@*7uK44w6C;}hfW8=|52^FS8 z7NN#Xcbp2cu8;LpH?%w2JLewAvdr?(aemyWZU52EgJ00&YxwoACsnwPxr_<3GcudM zaE7m&O-1*&{y_h4KP?;oeXs>*tnH7b0C77IV|Ebk2vOjGd4zaY3Lu1^_3Kf0J$Jr| z8+w4ZH&H3RXWRCNhG~AFpl+gFK)a*oO|*!rYY~TN5eD8*YTD?Ep?NPxF-T*N$u zq`-3|82BCmsB;BDU?b&82td+L>$ThMe^zaj|2=PNqrL-X-EZc8u|xy_P6h)0J>+XQ zn-ZYja?l)v520ziC(b7;aSN^2_OzxpGayu z5t4~^S2%~aZ;J`>H$_4GO_1OXPZcy(g9*IOWpn--xpb^&hjbuX5Pm=ebwXviyTAKx ztycSPc#gh*Gx`qn^=tt-xn;F)7Y-@mmPfIq@^pFSMRWNE_Tv1E7&;~}N4>+j)6ow|hA zzlYU8wUYPHUo&}bg|?;ahQxIUiQ;W8s&+on|BvaQ3`pIWx{i+GLX zi6qvi&9digp)-3Vm~efal+07he)9?ZN~0H(=SqNnWH68nmStm+2n-P%fgjpSryCpH z^sdEcOaLL#jU@dbg$gAJ&_%1LV&232f#o>=!tUC)@Tan_8?tWbg(r;$5}^&94(hLI zL8sM0Use!Q3nWC#a;zKmM)SLPri0GWAx<&&0ErGM z0g*s*=Xgn;|1s*=ezQLgi5EqHK{2jP$Pn{M_e9*!`52CHhbSU1n)h7nQw`QxAwP}- zVs|4C&O2S_HC0uY@%lREQdVQvEOJvhNT15m<-5Qw1*D1SM>`g`l->1z$TtC zzJevnr=q_*F-wShemq_}0)%4}GQ4C2K&5iRw@WG~0w+T*yPVAA?&0spgxlKy-6kV=IN}PBiyfal|L)Fk*$;>GnIQBThvPUb zO_StPAIU0SmawgWF}7tRfdc(vWN_NZ(#-Me*qi|I7zccc&m{rk;aDb16AoW`GKdnF z5K$6Y+6Gqu_Ke1EX0&zsfKReN4)_$m76b@KoD7N}bF*~Aljj!|VFd_xJ|)}V2^C;e z&yUBi9Rb2YM9`56f~B+WqO=8pd#xL02oI+ZF@$HlCr<%L{z(D6&S&z^6oB@oLtEEy z)F3}miM&r9PmxQV%=6>%YfS(z9LHg4nkKuaQI_Qh5uR6s6@W<4FWT)kR329#Ihh36 zosyaCzuwb;Pa!_{3cLj2kwMpWyyg`ag#M*Sgj9e8LP$h^?}k)^=5-T%PI#_&O*x?^ zgU*+N&iBT4^9ci=g7(<#0LvrJU0?Qf17P<6pw@c2TKtVrfMG#4L21Gv2$GB_eYVOF zR)Bca>NTkESNi_u5rHC$@?UQ~oBjNaCqOue2-tVnT}TE&U_@{v6~d4?gYjeYgk!!T zDtv~G$|K^RBH&w=4rZr45d3&NEAaouTEHmLMQyh%3oPS!n+QkZ7z;p|VZ`zzA6e&n z{)>ozs{kWJ+$KbpC$kAfj=uLI!Ke7Q3NU7L(F2GKo-&9e{6f%23Ag(xsN?N!a2;2G wMzaC`fAMo50{{TPFw7ry$>wm3*PzMuGxAwN8QLL0NdN!<07*qoM6N<$f=iUpTL1t6 literal 16999 zcmV)oK%BpcP) zE_ao?O6qcsbC=pm{x~1$a$K=p*{tuwcV)Zk65opJv*q2htzF3sxsqs6Btb!<009C4 z&R{S--P51v(p1mWK4zsrb_tC z!h4C|`{5kV0}w_09j`k!f2QEQA0+FVPz6n;HvnGvi5J;el5Dv1-U>?!ySu@@Wf%Z5 zez%N!FnWBxLF>8z)oOT;@8~)}+u*s|1+d(YyLy8|`nWeREC~EYCAlZ?Z6_fBfu9fC z=HRnyBtlt9NDzewa(>!k>Uz1~ej@ORjBNcv^38NqbUs?`kGq0{;}b`K=?Q?DI=^1u z#*THezuUQc>U=xbWke2AfGG9@-v&LtUwCx!t2mrnSX^BE@ZGoQ(M$8k7cQa-3?)L; z`RS;HDlpdom@EOTwonbMkGrz_$0vdSvy%d*2y>X0o2}H^M)uuE0iv+?k=V2XP~;Ur zgm?i7!T*I9zWCyW=)v(53zSQL`kj}T@b)}}YT!8B0!WQE+gt%+HPHDtog6ud1SC`y z?lPZ95{Mu52g!0Jq}|+<0H^0AI9B&zycEEh1qC!Ls*9#ctn8wHHg^GbIslrI%x`1S zMJe%oLBKgk0s&7F**k$B`205-UAitLzf;Iy!Dk+Wzw^XjS^9g8Bgd;Mu1ER)-45D{ z3!k33we;*`W1q6R+iRr;5 z&o$}0+wZaGmHP3_dy~S-r=MPuNgd8#U3Miy#*CBV~vsUg&Sd61v!sv}5D6|K2`)y@tx*0^EExD!_`Pa5nX9658M%Gb$9UfS z;G?X3|M*BOV7dnIIjrlLM)IHKT&K$`G*y$J=L9IPKD+N>2kn|T+KJr9;QGlk0-vNg z?fDV-WC6gJJMmLLQu?o+e?t4^r+>%7(J!cMt_)-Xq`uiUuN=-M-XuX<)=z`=bKaJ_&5PvoMJLNEFm z#wd~~&eWwPOtO$$8{6)(i@=uD0t25dFLE^?&?U|xrUrD~LGr3aR0Ex>1HD^IljLKF zheiMbzfr{x6p~NW$3+JEK?tzZ!7fai5ZV^+o<0OPg1~>4fdA5GwDTn05eQLuW&r{_ zh*J=KMt~?vY7k#@V(cvu5}=O5S-M{R&|OAio6&D&EqRZwnN2`K3^(9pp!vQZ3K5ouu4ii8Hb@QJ zKC1RGLORUF>SO5l=%=#G4`0SZm+%W+JYfk>r(m@V+dI&j4q}(|BuRD%e(0&yDl9#{ zsQ&F|mRO!JQ}0^$JShAd3l>{+$E)fI4tPcWyN{z##<80EUY%POJi^hb&WqVfrTFs9 zDHTpXqW<@n-?qko{ok}M;-lr3#eY-PaDQ^Pv!m;1tm5|zILE@WXgFsYiO@1IyN8KP z|2Q-Pq`_Ch8rsNaaQR6cWCZ0QYR=-br{r^=e@6d%1bqHS0-sX0vd=}ECyQOot=v2a zk@;gB7X+|=MnK;lyy<5jQ_ufARF^K_ur6G?ZC%>47bo#~A_n<>)9Ak*sRhMHL4rde z0D(_Q5rMy7$f$Wv;63p75cn4{&p-Q^a!!j{ZAd8AeViCo!0P!!2@sOt91e@7<^A04 zHRn6&-_%r1hy~e4nP~Ol=l9nC}H>K;sF()^vE=P z{)?X~eU*S8^dfaW8=F3qto!&9c0RL!M-H}GB*BtignxDEHRB&63H~)bivXlrsS20+ zhzM$*W{K2+&B3i~bl{=IeGx#%rfY=0>4ZR6Lj|xMo)l#~KuMCJi>IaTS7Z^495X}^ z_yu};MG>JH&aI#~-u?h@BoNOmsxN-_36_7CeiKq%lkOlNZQimF@sO1AjtxHE%EG}; zN*FmI_+vIs7DX`K{omDc>!KYks1khr`igb*`n%R|u57_wdfv(r(F)I5#dAVP67v2+ zfX_;tEOcM40Zd|U?qIgz(Br`UNWj<1sRuqE)FRecVzpv6K%z$QxW-R z9ely;@!uxL_%qAF3ZRr?PR!KBiPWH1@*7qZMxN4AGp`?(Y@$5>UxrQ zDh2igt69h5*X;Y@_L*8BNrZ4|J#;#wcb`c2iIMwaey+hr(cK*Qp3+CwC`bjI!0Y$( zBU`)PqgczI!fPh+PoI?GuRc>*I*fx74|6yTKF1$B;Jt%;{c9>1AKIWFQ8K?kSL z3aTAHkD}})$=`UP`g8TE_T1~YoC|L(JC~x)H*HP?W)CT1lH|AC{?^bK=jYfyL`&#P zfciuoPM$mo3&%A0v+rIz(4q>~DyQ@;m;xkq!sEg`=I6IN{!iRkw;#ppM;jGUC*Yqs zsXWlZ>^pmjc2E+CD?V(#(S^p7B}M}F3_-J29I)PXK*dr0RC1vGNbuB>LS!aIJ5MBt zz$GH|1Dbw|QkOXJWC0W>rvYwm93Bbw5I|K`sMhM?uNu@QPs8lwd$6&3n>`{)iU1}h zck+dIcv6%R;wpZjiC(6w+zRYKK4IJ5e}tD`xU=S;z#Yt?XG#mxBAi)}Veyy(GgUQN zFb9~Q`(9r>sk>GI)^jIZ$iL?fu1Mv50d^PpSA`Xn`x}_=`#?MNdLCG4i7+dGI4gpQ zms-whYFN)NJfSWfuiM`!%iVu^<(Bm;R;oG3I@w-+WMG$fW44;JnHJ>A587s5i@Gnhy5EH#k>|1PDUAq)}0nnNsEDZP-HsGqrC5-*}c^Yu7{I_X+QqfZ&TGZ-Yqi zl`rb&uPxi~JAc?^BuJ}46&17P4z>oZn0;2!_;|l0hzW4=SQYByDr3~J7^(m{f}pg0 zwbg|SbWPGlz%Q~yxu43;HEj=LRw!8T#wFr#n6gN9lZS^B94*0G(cW6Av;B!T_IA@~>~c6{aa{nztQ zO}tYgG!~N1(6RFef2!w{mKrDL#?}l}PsR zd@8hdM<;=JVqS+L7ADGWPk~;K8%kw-5@wD}!TRblblM!KLV+uQhfO9R`Jw`==uHyJ zdr=l+@NqnMbY>bB9$jMKQ*7C@nGJOO8g$$-mK){_s6vN5A5#oA3I&OMCyv7KL&@0n zQ7UqhjvIg%_)x8Lz~)cNASeL?UcP~O6VD**1>XG;34%#f6eK{=D=^@d3SUDNauW&% zBSF0;)t_2Y&uwhG6Cd7lmn|Fam9d+NQw)58U%O$QC50;m1t|ao1(3ynrR9i-*94M> zJG+JK8cG1YC@|ooAOesA5DEGbfWT+q>?MGN1o%66dtqT#J$q(RhocLh0==BH9RZyQ zLCV~^UZUwl0?)_d`^onXTHtgL38JFxZ1Y2Ce;zR4L*B&%u%}RZ7x4L##DFIPP)tl0 zGi&Z~$^-5%0v1Vd_Q-^^bms%>&5i{h68MzVR8tkKo5hI`5rCW|O#lWs62Nl#KGouA zB#;dBd=Y)9qN5F9)9tng%ZD%Q@4u~GfQ4%P7tSmizl^t4PdN^DaRFMLh0Of*)fF}x zr8XObVzS_5aS}VyhIY3K1$iDe&}vTCzKI_Ko=)PSeG6Xjv-d%=zG-_{AXK5ZZD`%# z+B$xhs+zpsR4uTN$>7XWDlk=*p(1%u(fGRBFhmOn`&~;N=cxttocI$}xO~I9fO#qE zORqp@@EIXIBY9sYi|C1f#{$O_p&+8gP1HE>trgJ5vBU9td$<2~#K(?H(8Gm$q1On- z`alJMoZ>-P?}cOa7Z>L1za(oDvu^1b@bqUOkZR!C{P!()6S}?ue#c?p8+scYr3Y=( zK;JiE)m(+H+l6B#et_-W9!!oEu|sxI2|CG!v4Ub+cJ~xK=v#487t8UXyXC>^D?Ko` zeVFmH3e;UF#NboRRQdCw%-40%0_40;Jb(hE-}>X`X;n$TL`|*vS4r#B@$5Hycxi$ zqm`HhqRb^XB7q`^XbV9?f)NS8y5I4TPyr*rcBlXm0k&pTc>h!xibvcSd65d_>r5QIcH1OiYH z37&gQJ=d{a4Q=`|g5Mkef)%aqG{IPYU_n~PIIFP zO<_B}e^Q9xWRY6{5uiHB8_;U4FajuG#P3>2n9Uth z*0cp2sWRYwm+Ok6dRh1ZP z*1N}{scM71^Rj{@#=&W|& zRO1-?ZF|>($uSLFw;9_3g{EXZ+zmVE+KLC8tpM(I$Kb84W3akgXL+Z61eSN^p@T|C z8DQ(Wt{W$*1la^7sRp&SB#H6*y`Tyk<_zpQWe$Lkidi%=2+N{ycmzOYnW;-llvIX| zZ8t*#0$!6j0sMdzirY6?KtWVMmmR>eu~1QL>*HA^5RYK7ML9{smKgXHNPr(h0(@z4 z>GaQF{;i4n)cI$RuUFF>Sm`{Dq|xL1_3j#W{Y|h0z7eS^#obTfXZ$i1M1laNS}B&m z#Ws#eaPxgP?tUVH7|KUPf;0i%+q7W?8y_(tI z^_}N3_f6v->;5Q2oh!g7!IS_AD3|1f1Ru(96Jw3N3)4A;koNyJGP8i-2dQVI2DByD^W$f7N)0G>?INu0HlW?(hg8Hw zofruYi2xx9>c^&p=kM-#H6+11_^1^TzzYhD0Hgo}JSADcq|Qk|+a@KDWln&4g)4!m zdMzlUXN%r0D1rlvmG^~H$1CSP^_kE9+SItDSwan5L1VemG@#o1J}3pW3*Uv!-7>7) zErFsXU3I7U4wwpd12qfDJz9W}sTuA7#3TbTdoLm_B^LzM2ftuLttLQc{0{8m_4L>h zNQw-dpavVgdH8oLI=r{uh1YI)@cmmhe0WcQ8}GKEIyDc+mYxPjIR>s+2OB}Ruu+`= z_mT%*M&Lz61%FU91pyaXxBJxjXbCpTYJp^{AV3dW$d~XPMTJ0+pi~+IsaR%ddgJh6 zw*k7+g`&`AVW8-@wme@e}9K5cSaQ*2?IsLt(n12`ZSNd&evzv6FE?Z!5el z#?R`|fWrt;5g9m)`ReSx@3gn>z>VcixOsaMwvn8a)5lK2%sk~O_Ks~^;5a;E3St{X zsi3S!IVc>LTY+Kmb#ztBZCJ&HtFUR!Wggq%yu*&4{?Y2so}5>I@)$8nGdG2}G+TLQ<+uPfa$N$UWLIb4CR}5`d0c@I(1RaRloRQgQRnvjzKaCdZYIEOPP;$0$zu~9-2^a}J|DErP)U@Z{xV?Lc zok?%R1n?aLtZ)tyfVQ2dqqM#iA_VXO{hP&R+g`gKzwpNU*wyuVe6P!9a;;cvwL%*9rJ4dN@}VC29u@qiuj=hZ{}pS1xAR zPAVYo2d0=Jg4=^@txx0WzsE@6pluum3G(1a@zi2v35N@q7m)-PNdck|WF6FEq6Xw- zY7PTYRx8l46_y(>W<7XwO@y7+8q|)QWDA!-hw`=xTjdr6KCuyNgM5+D+wm^RLXsZ(rcHi@{^Xcs|33)3LsADS@ByLWft`){s*WlJm_7>7GMT1cHx;mqgx0G)|3qu+`?L*xD7KxzmAKeTLm@r7`H@pIJy$qab)7 zg!7~D@Y_My@P4ZC>wX;;f(4it=l2xmtv9d2Zo7r5f*^#_;`I#Z;#x)Y^J3)be)Qb} z$O`UV-~bT#ls#fxv=97v;PG-hj>FOq_yTmT$O>bVA{UVWJQ?`d-2%23W%NA@CP0OI zcrX*eCjx{p77j)LNOe9nhUvJ_hLf15U>8$T_2F`DRy20{+NFZ=7V{t6e@davU+C)u3x*#x0~`6v8cm%t+p=#s89qD5g-De zl7Y4l0es)*BtYrXOWa!01gO=fLMzFVIr?4{HTiu8zU34+3GR~sUf8h~vY-cb*n%I4 z&lLrd0FDaR&f?|L?Nwu&h>%u*{W4F09ui<`qXl1z9xNSmGy9Q+hiRBc~Cs8fjm1Z=An z&JPJ-yLL>>sQdW~kRgCx9s^ykuBJW;Opa98LO~oQR5JSL{UsghS#>u$wVZYG`|HWr<+h83l&sT4@Lk# zQ2-l{VYwD8Z;rvY{&J2zpP73+^ZJvuD=??8v+Gr3=E|LQ*329Imfzc6C>voeZEoA} z%3J(!84~0|Q<4HaKIg>OM1ps&UxPZYylzxodjOweRmXsZ(+7J)?@J1 zauu2#URWIqtCuwX90`zgy&MyOji>^erZWOC66|xV2>b~2^q2-e0z6Fs3Pn+35*$|0 zC&X~Ci;Z0*K^t!0&DvvKUXQO4e9Ea!+mi;Z+waGhFwfCNL;#9WNMPB1h6Gn{Z)Ql) zh=3j;NR~+rBJf#;fJZ^VM+&fS;YdvoFE1iN_*_-FLRf~8Q2@*0iOT4hGD?_couw=iGiRzd3NtK?JykxkNV^5}X=L z0?X!yj!3YwGY74$O(y@O0HXu}A9=E8tTEu@qGQ*S0?dh&C_P-$cR2+}1=t8k zFx!mZl|?xQo<@C~zt_m^eHi$p0^M#G4l}X@;3}oxy%ImWX*>g~=FEZC+(Q6?YvQu) zh|5?sBmghYD{rBM7XhArB>TQ5XYXre70jLo7Um;$2Y!5M6<)_~d*kg@c(QW?*5$>_ z`_&N0cs>uwtokr$T5cUO@gB-Qli#HfTi!SH_vHeYepa03ho79TQL7zHi#Mf`E z>aegd{E!6vY-JPXFxy=L8WRe8-ni$$!n6Y`8-wRtJqOex2gdWfJsuqaNTX6vaupHS zpz9oXaI^166^ovEz5a^$u;aa*S-8G=lz~5Lm_2he0zl3NDArrpfk>#!`1IMO!5@l9 zV3~e~1iJ&~G*s;PBX`&}fzO^zBmgxgWLPkf1W15kB#6TI{XGQGR4u+%rCdklDv|+z zANeP#r?72%@3$>1SQ#El5cqe{Ue}DtL9cDucGe^1oCpmfz;c*-p#F8F#?QlOB(O{_ zi4h5WxXyQGjfFelg(L7OXDaGjzy3VfI7*p!k0MFlT)t&`m zo(Deu4c|R`G7IRXH{ie#fuANpWD`{X7<>d)54%4@0@z>j`vskqfq$Ptz~2eeat}21 zp4m0C1jrF=7y))X&;B+lz~9{OMWTkXyf0@Zzy}-F-;q#nm_kE zF9w*xc5McJG)6)1h$--+$b+8`>i+adQI%GqCaod(!hN4}(`dkr?c)si`-yg^eXn(| z3PjU@P+X&Xq#D{m*)!$@$L5s_fwh{tl}Lk_TI@$;%`cE5QNj1ro%|Cy=# znfyCRZ3%qC#RYg)`q$9Ha?L-7P+nUt%sWhxY?P8)!hoLbtttx9uLFrQ*bxx4Yxj3A6U*& z;JNL&M1aBZ`g=S-%24HG`%j+mcmZ2YJ~o?~ckP~i-`}w;i=}Cr2zootbm%TW{5*m` zKf!-HKC#QdA60l(n$z&=`W(ErF~(y-lyzb=pR!EgM3=sOm`&;Hm0 z?|o=!N+|iLNlz{K?D~y&MQF8J?7CL1vC*-)Ov^<%p6j9aiz)ASsOu#eYC0z}~J?j4vvl7P=uWB6GJ_?6ZSOFGeE27x>%M3oAG{@6Ez;AG$j z|45X?37Qb(M56#%i|O?MKE&pG>XAMY^`MdZoa+T(^*Hz+w)ltE?g=4KJhY<5q#O6o zGVpzrd>VOSB#EC#6gW~sWEJQYqKN$w?%#D?mYuGJXY9f5?k=+i-CtwB6Zn)9RWSyi zFPL-LRQXJ+2CF-hDe(6(>0$ND{a#4b$LJd0M(ndct#k(1D-dcR7)i6kfh4|2ka%xa|Z$H z@-068#MAK5qoOBgn3*CVZFqe}WR?)coo$topxtgJ^C~rHcZ}q|tmA#w+XdU```y{G zO{l2|e(3pgW42c^YJKJ@tG43 z=WwJ3e%JvK3B16ErxtiOKegb&>mOJQd+JK~=L7RY{>KI@s-F4!fR1 z@aHO<&@9$QuwwW_EU{Kr!464kSPsmOn=H2{0k#n<8w<3yO}@{G zV7Y2$zL~mTm^7Hg*T?vMy@CY6{i?En$%5aSc6LksQo3(Te#rKJOhWtcdjMZKeTk9srMC11PWrQU~aWJ zc$7`YhS_@Ji@s}S3+!hL))>#OT`kF=4KsNRlKGWZ0}MwW3H-cQ+fH(yuD9>!I>yhb zK)AK$4!1hPFa~~CYPFi9)^*wH*%xb-@;^}&rJCRHu!u-7i3OcI919#8j0h-!la=I| z4o>zZ*BQ8mVXK+>kW;w*A_AXsP!MPlxDnuvGk8COAS62>z@_Ax){20~cz2Wt zd_l}g?ys7bd0JDo{}M^SSnD4^!ifZPHGch3k>Eii3x5BwJr%pX23ObTMgl$>3HU*v z6X0nX-y`X%Tl%d$UXDqyFu(AgcLDfzh01kfqU*+d$g`MQkYL%?0n)jL z`Kly}OR^*`3BCYcka$!u1VKdz;PNuS(Fx2t9d<~;A94uzy~2PDhRk1S&cfA=1(q#q zu-BVpn+TZQv%%_G41C+Q8Ss)Qfm&3ds1zBn=_HjV@JS7XLXxcBxq1m<0gJ^V<#Rhb zJJ#mi&DV6D@6G5M;JR*{qE;H)^T9z$zKY=Ab3JbxRp6`;2=yQcuu#Fs1fYmWaQw)} zOMqdY>qmh1c4pws&699>{n3$t$9jQ<-Ph}y4EVSnvciCuB;E-`hIGBtp1<$@`VfEu z2|yb=hj|b4HF~C%G*DGFPDz#&1XVeR1w>bu&dnkKtG#aqExw(icu!;D@tJw8@0CV|3GS9}q2G4cC!K9$BBT1*A?)O5EH{Jc0)1<-2 z6AIY_cVDj!Ezd zjFn~sf#=yT$j`kVKfBel_~`RdmSmQwmJE0b1?$xh_$WM=6G=RXO6TItnKPsUd>2RE!&s-PZpb%AyCFJh9ApA$vi;rBy=Pa*+E0iMDRfubPrEjt8Wm16>s+>5+k z415aF&vvAclOS(TN21nB;z5tGOjbbA>@;($h2eWHvdskvH|hn!$mt-^E++citGLXP zQk0j-`+|UPJjiKyUXelI@4df`xdm`~8f8x%G~s}8(D`A#+r0|hZaxaD?b=A-QxfQ| z?Z)7%iVBh}fu?9N@IrytgK9(>eNYT6kb@4Cf*nu-gTGTyz;zr5e4p6}+n&$o2S^M- z5Qd(wfXid|-!cs25+;apmOL4Uad6{Z+ITTR0Jk}6>6Q)G`iCIui&{}zGJBlaLXe&B zLv{l~N&>IH2k`Z81N{6?CC`R=plN0AwS!979?L_(n{@=8a&qYO$WuKVE9H3LI2p z*q-tddx-!s38Vv+^D5?f%nNA}j2g`jz~!4fpFKJJecPo%WC>-4O03Ycl##^ui}~?&Ha>S`C4RP0Z-MRW@qMM_!9r;@zF%)v;Kp4UZf_@~AQg#hw_jlA zFUQwCJM-JVGl>L}D1nQ%;NxE;SEHokIm_gMNPu(Xdw~~VlO=7o*AlWVC<~kbN9#Q0 z?CUHDc=ARXh1?M=>x`O%&waz-(ye^xfS$@ot>SRTCLVa z+~YmAPa#{czSN0)%yBupM@=_ysW`8>u6vJ2AmS&2AR)mh1fYmWFf)Oh6!KlqN5}P{ z8ytam?5APNJqA5r1Hs#7zq_H5%0m<^0-kcGHx|#^FFfCap55d1LGYhG9+S-4Om#-zb`rx`r z4lIv{{;jJzsOsp(8Ucjyf8qw7(Nyg}CLc6I=?U_j%XzSw%!hAXM(~mF&!0|yH#(^T zc#p!n!HXcPRd(NYEs*WwQ1fpTQgvG!eIB46$8|e)P{bAqRf>onR)>OckO zU){j7BTmV8lk=@_tbfOHt?vyw(?Ij^eZHH65I{sGhDj&>uImM7WJz4YL}l>yD1eY> zKw-J23nye*A*u_-@{|0CUt^{Lhp5rnD{_5re%T`w#>0Ice zY&2~Xc6WDKZ3y(DT+DWU3cwj{6^@KGWANv2ln`YCo<>a(L~{&a0Bh z2(WZe0#LkvFS#ZXLQ0^|wM?ABqUTjQONnFlN% z9`2W;D^C)US%zc!P3?L-HWtNd+hcNf`Jpb$U9mQI@TqeL*WKi5zGU{yf36j^ zuW1rY*gh85k4TW8pSySYd#_x>u10cKV>?=d=AExYtMZkcXSP68Ho>a!`=(lh)pi}$ zD0gd_j-%*Tdr=hGnLCz^%7&_ETOcc_Hn=@SR6rHNeYjR;-hz4+>SY`16&tD*73Y{Z zhj*nSCTAnL55+3p1iAuv0v|^WS+Uu8a(bOu3s-J#!^)a?5ox|m&rPTfoIf%FD5w)q zR+6K_lvV2lpI-FQeU%f~zt=v!-ZZT1hJp?# z(ziN6mMO=lJeaNpXYumZMpIZG6E{FESbg(A1W0eNtaB15s?L0{Un2f7Stvz8{2orP zA~_fdJbxGivcJoM4A|9-IJJP}gyp8U#pD7v(XXzK_!G_L2bu5S=AmAkFD3v%x03k@ao2AHpV!*S+r4=DLu_|z%j#J{#N$Op+e*!$6 zL=1Z8SR<%^@2$46)3*OOTTeB;8YKF3z@P#-j)N@JGtV7&u=j<(FJqp^{H9jamgs@) zdI$Rc@`nJI-oRp18}YN(*BekCQ|{|LM%ekbZO7ot*lMa0`hD2>QB;IgsEBJ&MTe=S zN+1jSo44nA%o1_HG5=fknS~`%<^Fqp^=%toy|I6tKmR13c=oh{DgU_FlP}`!dh~l< z5bv7+6hr_D>XMNoX}E|4UsojY$o-OlK!4DPz&A`Q13o21ty0@Fhrp-g9hD_PIwIiX z>%wRx*e_naiNN1-`hrjK`fUf!J|>3*P@a9|`|#6icb$KkypjEg_@KqJEQ@(N$s(nX ze|gzYCnOA>6$v-{v z!jb(HgtCvHtKym}iW#{L0ss5owJ>|Iw(SqBj)V)$O>$W0rf3ujZNvL^MHf4mP}T() z!?mN79+UtStyT+4V^wx7+BtR(p_o{(zHS=uG)nAw1z)xWPL%!&Wbd2HFT-y649v`M zB?xkW`#H$PwC5wB0@l;O4VV^BP1Zn>xs9-~i0=Uhp02H}>##Vr3O0;EL*E4%w`05f zX9cV2;qe8DgCyeO0&wzp;X5FC40L7(v^8ps)NyNL{Cq9s;uQq`<$veHYSV^Y%O9zr z7OLoXt~qe}n2fjpOi!t2Z?CsviB^kQl|2*!P&hpc^hy=fgRaQ;^NW~EnCD`-^hdXY z^^MJ#0Ha3K%>=$-@zhm4_Ih2{S(>hyOzLeyqts@X1b!4m00N&z5l06{neLGcqUa$> z#DUfj#SC_=6#{?drUO?ot^35|GFruROUj<-Rxhg{herS#CA8fFK`&*0C=8zGyL>}d z&pNLb)eD-gor{Zf0216!;5ReiM-hR)Cx`&!?d-WDutO5$pR;Q(Awe2=b{)z;floo; z|JEOLANXvSmt!S<=j41W0I+Lj-#at{L?q}Up0Xk*&wOXp>C2esMOpm6(0iYb9(w-p ziKGDQ>!Ygxbw7b`*_;3o_)GyxT3_(N-W<3tk$?&+r-|VEAfw5rNstc$fBmipSKoHv z_x{v+U>qo(UE~=iUwy39@Y)+P1-GSthi$Tj7d)O+`{bmgUU*R+j^!+smLpi+OytMDOtP z+330HJ&_7Teos#Yx(`__3O*RUWc|gXd>+aE?|jFC%P9H7JbqY2RTl%o0$^?1`dtT? zjgFPKXyJjr)+bu679Q%pnS2R5^gLaVAB%!`==(Ff3HX(AB_1nd6+rdb^S1!u_pAy3e{J%iS{}+E?gy0`uJoP9;{0+l^@6!d5z}e>$hpqro z5D7>H(jCQOh^;#U+vO#c=<~Ho?E(Qpo#^?4CvJYY4vix-eSfDlY{zEcM_sLIiAoXp z`@K)#mz}HebIak~tjZ!Ifr1B;C2@}xC}|sTv$ha{zx;v6fPWa^Keed9>&y0=2>R_o z?>;mFq$5LuAzu^=aWOBV5-g$$oEJmy97ckE5rOGoH3)pmw6frrv*1TT@9Ri_{laoQ zMgk5n-BvH@M!<7c)%Sklv; zgbnsTiamQtDJtiP1a=RVAlRP-qyVkfI?PPwRDggG6!cyLn(Zb7pF$D2)Yofu(8@_! z%t*3vj_0>wef191$3>VN=lk{x0A1Gyy$I0rQ4M@fZV~^;bJY;+sJMY7#I~?FqcFd} zvTVbZ+YVg4{otOTmsCx%;N)=?nikx8{dV`y);8^dvmd$w5DCZ*k}s+UnSK{bd>+RO zL;_Z5RET~g=obV$MQayr3BRBA{WSRbFxuODpY?!&AB~X`kR51BLIMgib^Z7;PB;Sp zxBjsE(CSU#pE{w!jd!hOyj^ZgDg)pDNGyOzpsFfMuOJ_2u3Ug+?0h1?BIc53bMW^g zLGxZSqX1+XV%T9338EnI^S+-BqrC;j?lxFEe*7#_fiww9>R=M2ha&r za9nRX@tm0nZg*F1*>H8)d8l*0d`l^>NE0j}Ngeq&?Xc`f~$q70tyA* zC+UyC$NbIw@18e!{>MT9Rxl(1g(|Dr4F^MZEU=<4x4Xvwq*s(#O%$KBU7SGCy-#0m!5Th7awY2XmAB z+Xgz2Wveh(=iUGMJ2qT@_prfF>T~9}3@<(-Ld%3(*H)~5w!G$SMdwY+d{V-zV_ToKWEM+wBY3`In;S6>adme04u|0#FbMR7Kr?heN{g;a8jO4n!od9CJ_S zQ&9I03nBn1Ksqc}-D3k$kmRpz`7k@lH$6ASRe-wxVG@AA|H|iexc097(xunB7xSbX zct+kMSZ}hcPY3}bXVWWHEcSg({a;MW{Gz66=X5-o)!7Bx<=sr{9iN*?PMWj)v?o|S z3w9kbBirjO6&5BF0?2-LI=UF#UiIPZV=C0kL>7Q6%T8(y@qy~1LROW2{8IuvwMcuk zUV7y(jq|n(%LiF6+CG85vT@*kdwAj478vc;gDi0#N$`>)WeYxo(myjo_eWv(%stOG z+oh4_o;|I?U)-|c^76y!{x5${M(`DQec8V7jc*y}-?;58J4m#HBt^5s!EbdwK?*=Y zBxtpABoO4mll-{Y%c`oL_dxvZvZ{PKdN?zJ_eat0w2=UN<=(IrBmqF9(*4+KL*PGt zLcI6t+xGwZ`fcYTfltqMHF*cs02FEPJt+VIPf78KA^?SjnuEPzmM^`fVaWzaSDAJqN~A2gJhO->Lg4F5f!*?vKEK>s{~H5d42l=ZyEYm#=ZB z?{~f4O2DW1#1VjE4+#zswhw=9+V;Y=HgUBWq7V8b9n9)tv5-(Swm%dj{Vz#~UQxcry)FI{`bxwz3x)^1eslPQ3e zebDq%*LSwE;8T1e2|z($5CLRa9<^R99Dx<+lH*wCb-i}s&^9EBoCK{Z7QU4s!P!%s zFt5IC!D`b!l+O|PU-?lTEXTU_JAY(cytd+8WZOt_le%9BJ6o2LZjbKS`x5v3wCtzj z6H9<}WJoY{$FU_`v~6>7b8GwjsNbpA>d@Ra!7{CZ?->?HA)^F`7!mjwYY6^%1pm^0 z@98QhfSpr;^nKp*^YMu$09gS$sIHGbDXn=(0?cEZcenoi#?<7{sr89EY}XA~UtQn- z1x0am$y&jy?;;6qApw3CuTMq_@Sw3Uqr%xo1tfq%x3B%qpBeuU$3IHHL$Xh?vcVOg zC}n+~BCP~@&(FsvngA3;0!p%jQ9=CyZMD8j4Q1&VI^Za~#;t4>} zYPFzRtuhjL2#$z;JnD$CyuG>oib zCXOV*xA)oF?_rX~T%eohA6LQgZT7>fH=Lp8I&)mcZs)+$_pYs2FWvdT_`g@yoR{KX!X0<^na1&9Qcat^^^o}Z5&2m(-~Nx%-81-bt{a1w+G+s$p3==X~^Z{J*;o}6Z6 zs8wrhY&P5U-b+Y?m)18om;3EUP(v+-*2P!evKH~;JQ3jRW6DV2f8}!}?0hEmK)_>O zxc07fX{G@L0{i{E|N8_!k$`+(55>eLyYJ6{%F(CpTAw{2mx%D*y ze%RR=_?Yzy?|h290*vDM`S^h%07aez)aB_Y>%4_JMh6r$WlusCkVG&H1Du}2T0||P zl{g-|E))vveOZ?2dRYl8V)YDQ*Ob&&WVR8%@LrI)0@TWF8kXO_WB+IW`=7La{mcJe z^{<^hqW~p~904s0thesi%h&HXzlQmTmSx?pBCr+`#X|S+3Igc50=Dfzx9h|RMG9cK zNs<-Vsr5(k{Cxbt5r863f+z@Z0^V^P2I#{K-{cCgV#bfwU%qPpV_7!jlk+lJ0x8KY zqeJWgc;=)ES8iGeymteEzm1P>@3*cjCn_e(0yqJmPv8>?3_E!@Qh4{lT|E|T@+iK=5&unz0=ZIYk7^4KQ=LJ!@D+OY2i%_2S$Qq<0Ocaz=kd7 zPkzLK5hq5F#DJYdW5luHHIf((0tDH>cCwNkcwxhi{qDTGGw%*Gs~xGet<|=Mtx~gD zU1X8f^~Lv`d#lJQHpwPitr=-{p2q3>!Kz#L-sd^z5#R$H3x*&H9(}ac$aBF)9R!^Di5p~Z76W=uj396z5jbuHmT!x#gYXJCswOVC!-EJ4) z2!;YbfVSO+d-v`g>m1^HeUZ;1h~vu1Jg6!P9e+rxa=CYwz_&rXY%~SQsPxrZu99P#&=?nC%lF6Ac~`@A5BRfCwzQNAQ1>_0&Hz>joyE+Fa4xp zmNYo~!gCM?0cffWo*&NjUYhxnGGdVYMFZ~rgTa8ciY!AL+q$m9L$rlDUit$+{w@&Z z9}Q#p7cYd-Kkl~nzV{{F_(&DR7lMAjyo;}S7`re~zC%@?tH%Al2I22Jr%%D&OD};e z>Q_!J*MAe^lLfu>2{fB;#e0N?L{EEkY$1$QDsgb&E{C&(bg z0)!Ecai4-9uqfyS&@>Hf+h%8YUsZtfXIEkM`5NnA`pC=Be7Fm4kCXOb$6_%Fvoe1Y zBqTeE`MPHmx_H>YxN<)Tu3S)+i`akRLV?XgpivUd@?K+!E1pm9!aW-*|0?9Nc?oq|H{m`HITh6fv&igD$;i$(a>#Di}g@XOB26Sqj4&N_k{&y$(I#=q;jdqDuAvPbI;O6UHazr;aGO^naKn|OAMy8nD`==QnZ03 zw1B^d`ugWs1wQ&il?s^Xxm!s5E?PkfUD05DsS5R?K}3CeDe%Ai2~|6f+0TlO9ePZE zH!oiN8`xZ~ma0c`QYaK^l}hEK7@vxwL5OGioGf$U6=e-8l*B4P6i0C2A28x|v?&Sq z7ltEC)HVItuK??3S8|!J7e-l7DOEs>eNZtgeV@1Gq6U4u18P?^5v-C1Zr2;WBN5T* z9ZhOUAcGhr0e;Ls@UAtGu1~5W+}dx!EzGhDxSs?>_*Y(8JO5+Sxt9Ust<}%|?x)+Y zeest!3}cC8_xq15_=IUvT3-FuU?5qI21vMHB5H`SiW9*|Ty#ELhL^R%D6=y^qgG=S zJU^S7R3=U1W=Hoyc%}s~sq8NbV@v>Zf_Z)m$@wT|7ZK0M$A0;RM*7S*Rn9cNNm5sd zd>VgWw0ZkKA^9J}cyzp=gY58lCO|DqsHeBQQgFimcDX);jz z%nINn$S05hjv)df|H^s1Ya;zKy&h{RoHIiKR8RmQl^OXE-FcgQXPwC3blrb>x99%I zOGRF-td$j@>|X>#J_X_pv%-lbAw)sMEP%>?jFl<{RRR)0v6#2SXHozsMShB`0FFw< zq{3dIf6FKU%6tNm|6$CkKe*pynbdtGQf4nnYEeE zOW;u^Um(i1F#gKw1^D>(ZLF&?w0#dg6j#9d$VJRH6xKrvYHxlCUM%rU|C1dnuB^ZC zsm8u-r0f0JOBVp}JeoWz;e(9v%QF9gN9{`%k#`-ZHZ@rTFZ3XY zgWR4Kc_fOC*TKEwxy6{>*E1!6lg|7sjHOfnN8&|{v*}=i$WO4jb{+yGpHP4ECKCXW z|Fy0Qf4XDQwD@s|82Qa56W%!UAutQd%#RI;AA=;TAeGdQX{GANaCpbHgyU&Q1-y`G;8bEB2FH=F-VZQcUEaRL12FTf359EyMh z@L?p~NP>`(e+Gp>0a&_I@`orJhxVc>Dr;qFtO88NIip;mxKgPYcW5i^{q}Wx-=_ZO zG1_PsP%f2+FOUEzo(TaQnfWI`{v24rcopOOQt|_gyQTa?l=)etazdysw zfA6Umz+ulHXIprz^+ib>_WNDTGHpE5nCEV^Tf5inR_n^nsXAQjw&7-L3jm|~EuVn5 zsxPxA%a69;|A5B&wcRb&etda+R)mY7at>v`9?YQ7}d3acX z&SC=H1j->Kk7GXjdSfn`(ui({1+U)Lvz6($UXm53t%qKfAZNsB;Vd^!9`U; z0od@@ckaP|TR96NlHN&dgWAsN2GkyL@<{}5FV$K9cG42@hIY8*8$|=$p3BI$cDQ{I zi2Q1`vhb$U^(@PJ;JWTR)1G^31uz%+gtP#hfDl~F9&g{vPOXTcJ0w2^2_S8^k>m=7 zv%EeOLJM085<;z*&o~mmIEXCv{XWn7;XGQ$ami2DL%d@c8No^UXP-&|%uRlZ!J#uz zUF|LUT?^mX*|XCj^ZXUnzd{4^RE%f0^nE|$sbP@b$i})VUBmWDd+!0fgp1O`o1O;-F0q3B+xX*|&;xPc zV6Cr#-fBSuMNkhLuqD>P7SpUF9RWNr3iz%KG)umo!qX&ph-7)L!veR;1dx)ii0VwW z$AdUGR#g>RP8(Vs_YMw!PE5Ri_`956@2L{N!kM4P#@cHATD@XiNyeYhRd(1recuO7 zQLlS}zgam|ql?*0V&Xa}`84=J(`4k|ux+@D0{DJe8$L)ip@qcvQ2-QPjaP~F*n;-J z09(KS{=6$!S@__BiGd?F-%p5V_8<{P>JfggaytJqbH8J4xKgJU=A=;}sQFyl6;%7PU;Di1%vCte?uGI&fJ$@Ej!GWaJa5 z2JqlQ0QY{L{FURAPq12TYOar+X)2xy0X#wSC&Jm=J%I+jBAV z$@e`X|7!Ys5Ck*V65u@sdH#x7&CDF(`S~qxG#cj5H_YnaOeZ2aU-G0d%8lE08{AzB zg1$R(bq)7o)_4|rc&Xk_7qog6JgW`fBO6}na>D!=UH5+?`OE?; zrOJ^4kmh3Qgi$lg@WRUJW0rj;fMMAm_ppH|=Eh>o1x4gr4<115_ol8~KeG<1rsw9u zv1df|=ot4MCwn)L6c-8ReHEg3bfqHOO9*lzN@_zCKq2;^g0?_yjE@B3=$oxU4f=xu z>lcLsT!g<%iW<hK(|9I(FcKh%K=o{JWeO96f4?=Tu&50jI4@g_e1dIT zke2o=67sWC=P>)vVS8PXl^e76^{xuQtQb&VUdA#hf{&$HWtp+K=V#0Qyq*tXf65K$ zP+wgIqf(h@irU!rJlh7dY_PLbF}5G|LBm^&!T=O1sAB&6Fc_6^vV`I(ll6nZV<`em|JU>VNJm<)eKMBzQeP1}*SrtX&5vTT{ zuu5_kEU>{~k%jK<96n#q1^>VY4~3DEKNNsrT*tU^)IQ!70i@&;i2NXou?k3wEOGp@ zKP~eiDf{E(Qw5k(l<1Pj$zLw%a2s;vcOoeJvrtu@$?Dj1Qs_bzD?&RF!R-7cTd;HF z*Xwm6{|5+0DJEsV)v|JPw8sqjoAZ40iB&?+P%)6`!PpCO%-;$5&~<&No?1S1B6pwLkWnx|VrNMAJ@Ry# zG0LO!k<=;yo(I=(!_m{|?JTmsuVLA*V)lCn-ZiXXH|FK&i3uRheDcHb@;4_o)-m%N z?}q26C105QPPu3x`Nmv(NXc*S?P9dRe$?XkQ8S@ht0v@62Kz;rT`f}bnE*1-`2Mcr zBEPlBB|i}Xd~Ql0x8L_S?|V|o5}Y84bhlKEMzpI>L>9|uOM zisZL*bM-`!w7))9S3U84Y&RkF7Fz#A1yD1~aQ6B7(DTQUwSsnOowZ(=d*pIcd*wHp z`>!LmxZ}7iJhY%x_|?-@%+MyY~PLRl&@6KvYKy z^aHGRF<9V9{|1Ni`M&&w1VH4UKf5;d_bmBSa2ewo#wrb30T)p#lL_fIdK0`Cuc#Fsm9XsvG3IF9rF4+uH$Yh1?7%f zP{BX&H{&>d%RBHsmp-6~%FH!;2ff_*LQMb*87HamXLvtT{69$x@Qkx!5$i3QuR$1_*=IbrpJ$;e+TxaVlxhAQm({D3WN z(@HQ2%|4cUwFWlE7LH9^^X1qYUE&(q%>156Wt+%D>`f3{q{hzegT?sKh;^p>wm>WPD?g*;8dyAsVMh1jXF% zMp zvPoOEnN!ET363+3D%{_(alZzO9I_-Q;;NJ?yfemt+ePxNQ56GY`8xi86$~!y$aw&g zm$$np^bc=Hn7q#{`NtMON#>#EZQ z(ex-Kba>F`g4*u&p^DnwsKSZh%!&ztGQmEGbYTMd37mar*tSCzT8RK^_4)&BuAvAv z(`N&z1W|uCCjv=UnFuJPF`;F#buUjoVPOGe$tO@rnip6pWTUM8z{?wJ*Kl}lk?(%B z*=80n&ed{Y4clE5!OOK6+5z8F8!G@+foUKi?7_(iU?wu;J6#7J>^$HTVg9jJmsiu) zBX+JogkU@8`&!QQMiqcWzz50iQvMkt-?r^T?=B>OnptL^ucjX(2uB#^U{s4R>wn<+ zdi_@wK{-3zycFjim%_ZA&~e)LzY4;>4U>7|*<3%f3hPTev(_A*~g#3OXDS*17K_JlDNJgZvIaR{U6vobj zBKBMl`u%=x|0&eKVMJ9iv3ig0e;W$qB2M4T-bae^QW@eX0KI^G3=)q=IRrQJO(>0g?c%_282o``MDpP+miUwE@EpS|C;_qJ1&1ESP_|1x> zT*dA`n7XEM*m8*cv?W`aMm}LK0h|>180VsVLd=A91o?_?K=pLv5c$(ULTF?A@iUz0 z&)pwg-rb(TL~y3)E=<0)--nxD&+n76KMO{FYeas<;Cpslp1DN6*XR36ZIxPjZx$pu zzgbZnRjgD1vv8yU9+P|-$^U_r{Dm$R$#;(+-&n5CO@4~?r6AMy;f>61B!IPoI~*S+ z1Rwp|M)IxwQDGh@of;6#eye@nF25?==m?yb8|6_rSKp> z6hX>nKJ$D{hO_8p{8Ggr|3Y~9yEDm8JiJ=R%&#E%;*0~}-n`8I%o2*GSRRh6=#TYq z7c5w2W2yo#Y6h%h6^J8l@0vc@^9i=?!UNlfCYEhYQCNUL!jbTn_&rIY#4@qfZt>DQ ze%`Rp=Djg-P-(ALt9NjnKU;**ARKM*(cYt(<$tCCi2U_4Yp7^A7SgiM$R8JsF#Wxw zGM`XiUFGC2vL7U$qEh4na(aCz>l)NMt)T!2TYWBod0?Rcnixa!fs>yi?NjNWl>Pk! zPJZh9Y4#KO^?Ds#*L@Y&`0PRlO&GNvT5$8tn@2t_&LaP~$a?<72L{J4`!mTOOkO)B zzgjx%r*&vy><-5yfUVx>xhS4aK1CL~nlJxR6ip?c;2lgSA8{S~uZpq=i^On$59f0Z z@hI{mtcBS)0`igM!|^kpdHy_^KbVjF6eNNyNCcAvkoJlAoA>wyr`bPF{&3Iw%<(CajJv+(U zbL1o~T|pbk_l_ce$%Lv|<@O=WSa-~_s-+5;RqfE@T2X~q6tGOANPx20g8N>DkwF4@ zyKBIU8kToFznAg-+q)iEmIEH1&nRl3s2cP6NZ=nHjO|TP6)2a=(COyAxU=5@&*cJ; zWNsfuiG6<;E5|S4aC064gF*hl?MK$!-{Kc@UsuHR8>>@ACOMd;#hZf#Y zxoAMqP^SK_V9D$!{WF@w1d!ss#|4nZE|q;G-|cyfd;*c5_5DexAhB5iptrM@m3ncs zKch_FkNye%`$ISetcOj^{x=qSCno?pSht%$w0y+jGI$X9(YA-8HZ-3fNK;u%-SGDI z;^Yfc9;Eq9=_m5n=z^#4uPXU-kpL(x;KY&uzJ~E~A_5}6g^?xSFsMEHen$EAOS3jya4(h1VMlsD-P%4tO*{0Ac$X+WcX{Y7qDx`7Qf(vfo0Gr za3Q2Ek?(doGuP9w1|HU>froR6=3Sej9GanK_n<_wNRuz;**89I0bYrW-89a~M4_GjQ zM1G0gcAK@Ou?3<6&yGs1hOs=hLqt4#Y*tJ#O=Fb#12O-A5D(u`vAQ)-WbT2_qAokI zDm1Z_RoU|TIv1Z~#`r`0;vL5TcHX%6xyI9f_RVNJDRRcQ~$u3Bdz7~RK| z^#_NiEX&H0PyJs*;{P*|?}w8GAPLei#>eSgikojf9{B`$(qubR1^ggbbj^2;vk?*k zLBkzoMbI}&pvWSqvczK2rKjXm92cnw9OQ)rFs%wi5hre{5R&X?;H{1R)>NfWLt-0 z0S1E*bX2N@?+SQkR!5T%(bB>&gnefp&nAL@;N$ay>li zS!Qdb8Bc;3Wd7*TjC||y$)9Ke1gm8~&YGJT*N=KgH!7eRWr#CbkoLWo#gbGHp`rwe_&+;T~SN?AXV%NU-2&jqWUw?aqZdLGN_9I8vaYEW6Wc6lJ~U|dV? zjT7b1@qX^niuZ_y!ya>2uTvt`~>WS@g0zAwfiZjoh?7EZ4Cv?~k-I4RE` z$5a6{cUw?i(n0d`E)iuEIT2*_OaQ^As!Hczpp5-IDr;KNU{(+XB!GYkppQg&E?%O@ zGeI0PsW{4izaRD&JFzgf|AcSH3E|hE?W&JU_dOTFc$bY!MHR*94n^VhJm&W&o%t!I3ZT{Q zuvU`tCFv*uD2Zx)KSCRjt{k-iBAkwIPvUeh%f--u2b)7097r@wkjw1-XTty%}De?(3EugjMK%-VW z?%LO34jY&R-N;|SlY$>act($rzmxHO5`lN%aWQnT+-F1(7!B|-RJWO1i^%sdor54? z#HXlMsuUZ;i6c!nZ+o7HCE~3ocL(CEA6sn)FDb|cgfKILAWmZwtH9=y+xiI2-S)!o z5cxeX$dSKNHHH-+TM0-2S@i0c4y{MzQ>5fmtEws!05D5@Ix$m^ek9GI*zpxd+3QAd zM^hnZ1MwjLc+O(t2>dXy1W{rEW6z6;#SC9b#TQID5qW;bwY+fnW%$}o3wAm#dq+_; za3Tft!e~EAtUyyNO0RY2n&?$j@Ww0|GP;jk4- zdwqE7-1y74z6?(i;!zK{crHJjKT_CsiyBgX{6tT1Ozhe&wCvQcH5RI>=bkB5O03m= z3$%mDK1}4>w$1vQHmVx+dL0bIp!5GK#yiK^W3$R0dJj_tP_CG;c4i$E%#I+O zKT?=x?ehBi`Ja|lReYi+K;)4TB;KA6>!sHV) z_u9}{u5!=MBBQ+~lD}znfhbcHg@rDo=!B8b{DBH&=bq<+-L)YMN1G2&$bNGR;_5nx zJtVBl$xpJKp>hg+KaQ?zy7upZNp3b$!KY|+U^KI&J&JY9wM&Nds92tdWM+G|75uj|isWIOG#Z0G{d$ z1uz9I^!ii;|1KItHx}6&8W3xV{F`sRyW|s?0P4@JU^Li-+vC1AF9cbq=BF{PeB{zA zu!igGws_`iMGXSq&0Hu7O+rSOYQs5IkD%2Op_gzTg*@}UeuuSsfL@D#QGt`Dj@xQR zD|W|*MlD|fZtZwrwHyGnDnr+>L}S^HrJ=>71f8^5y)Hrj zy6-#h;Hc{t%9Qmx^&`Y3C4x@jh5WwnZ{G*c^G=G_xgitzkBQ3|S5{Y7U~RR*E}GCv zL{KS@ETq|NLd~pUrQtT?c3p7y9H`Z}AX=>!il&lVT#Pxx@qr6sVYVH)y?mxN_gqH4 z+xHmx6cLQbA3~VErqk(9oR5vhb-#Y;RqdV6<>sTo?8}-|$8NrP6Rd~tp6_QNr)rJo@R`|D!j3|}`6)VQ>aIB9BAP$1L z599WIMtb9v!P;iq9g?47Uh*mXE!@A;&1L257?+a%28sY+^*aF`yf#{2Sd4)8l6=A; z0nBF_L#&@Z%__(p3?>31Jrw|9XJ=>Fzx2u_s5eFeBO!ELd*WwOAsi};5oV-X0`R+} zj@(afpN~`WciJQS$%^185czJ8#N%eCo1L!r3s8h#OwLLrA4}XC|J8Yrs{nD*ierLE z<=1YvVe8)3drCe*-oEo?EXyO`^yG!!|E)o<`xdr$F@C~3we}MYQ7RfTzwAo23TCYi z_FjwM;I0kE*LL8{i|fM$w2}uBT67e9NH&TgDubpdpe0_a78ByIrEFFTHLNOF)|u5P z*zXM2DjQ{Zd#B6#yike>Nv&2Z`_rqfN7fDM5ZMGGKSj1bFWlyBcpAX+okVc{EDS4w z8S(?!vN6|K+hgVLF1B}J<68%q`2vyOK@uV4C7c96VtB5)oD)E$W=`E42?5z;<$DtO zY4)$ySBG;%JOx3eDv~9ikgWiNu`x^}|N8A)H?OyLt;@CD`nk$qe1%yZ%lcyw|FmIP z@LNb03E)z9YoP_&J428DOBg?~y;Tv`*4Lq8nk?Li`!bPlw_A*SvVc?swS&_~euGNC z)oM@7{xtIspXdmTRRYTXrrjKppSITS{VPcRXMy`ZBOS@Vu2$+dj&w2lAz~yD^F!FiX^}?97iY#JC5QGs%3|ivvDPDQ5OwDDCYddaGtVn&ZKm)bfV86%q z$mjIa4d$8dfe)1uC+*hV`@`S;Km=9s#6jcQTN(sS2_IK>)tip#n0INebxC*ny26k3^AhExQ8<^p}p zz@W>0pU7VXjC}g8&8@^qNR{Fd`GgGlU=)q6CMs94yO~UFPFg!~ZBPtzVymjfA^8+f z8;&esDf#0d@-Nm)Kd;Gfmd02CCO%i`w^%s6788Os{`=`VY~Q*G9VEYuLI?u>y#nVbYLGDKWLN5dZ57w8ojqg5FqRc-FA!ZYjrJ#3K6$z@#`SR_>B8npb zEp{M!*n+xhfm`4g=oYG=%N|I(_d&zUHB1d~gd#}3g{?Fgtw+833k|54&*d#YQ}!ds z3)Vxz9mfId(Kdg6FlH~fZ_o1}E%U0zD_MXaClS<7S6S&YiW&&A4h7UjwO~X00IMaE zZx(PY;TT&R=ayj?>X`JFyUW(uwj^-B_U3!d^Hj)d#+Zj51qn7#0N1d0Zv3Y*3LwS{ zHDrFtE>;h6l!l=&5%3m?_W5PI2R7VyJn%*yiy4_0WT~JJ`?XpPOtX>y=nT)t5Ss(4CiiDF0sLhV`0=K&Q>17n%F4&uYe&VE^B*X=u zmy!IRUSHC$jQ>zcJe$Zjlu^Ht2#m-dM=FFYJTJ&atJPvbAORf0VDd(Ze7EPq_BPM_ zO1Z*XRUHZ5_x+pza_@5sXkvVJ+GV8VPa9jitp%_5-G_Y3_7-|!t4kKZYyd;g{YD~C z#e{qmft&a_iJIlhAgKmKKEc|v^7}&(1m5WT zROTmTKV?1&fXM$DjLqX*EM@;QA%Ml`hcJl5Yj5uP(cMmT*|5BgbzM}}k>D+tm+n`V zmxd4XN}z+)_o1d@i{*W_n$KeIQ47 z09_{!>0D*81B!ysc7yo$F>VA=ym8z0U$*@S>>y^*?8of6YC#&l!>U0TF-tfly3mS7 zW%$cI8Qy?3*6%_A3Q=AFBBphbmt*L;F2n*)cUk6^A_;j9P!*Mt-|2P^?R^jrAc{ps zzSnml40$y$O2)7)86~ob>p1)wNs?e74Y*NGi#Y#{Fb?7NS8hYU*MARbogZ=(FZO~L z=U&*Le_K6%k?TbTEh1pC-t}R(URtX3%7hHJzz<}ErZ$Le_en&E(9J$lK z?|Uq?1B`+Osy-4EWxvyPCX!FtAE5}np2x_i$db?cW$edr2ebd`@PZbs04*&0t!JS0 zj|4C{-iwAJZeV6_xc*2GBm^@lr6VD@P}dX;m5HF)8IgP2Hx8{!0+@v?`IP49m82`K??Zsq!Nv>GME;D1TG(=Z7N+7sRh6J2 zb6@^b@d7l>258~Pr_aZ`P~U9>nlL;-F;!w0Dn2Jm7C+3tALl(k!tXg9hh@0yxex?F ze#6P*k|2T8cQWK_>_!Ag=Zr*wiD11D~H*Fs-nxis` z9HCEQ42~RAs{KYU2>vLDqALoDz);mI9$q+$Bylue5Wq%)DB9)<+!7jaOKcq4%*%ro z7>1IYd*B3f9mMY1Gk@U=1ft7 zOX7%dm@%eS5yd^s{MRr(AI0%zQIS+!>O(RvgiAv=3Q!CK7Mdi0rWvp+lvyyuyoP=< zdYcKLf-gHLlnN@%31a9R#Gq8`pq}CuAV^Z~0BJ>v<0+*&*|#Dq%+F;t@9DD0#@E9z zyo#|mz!xH{GE*bU$3Pgs%{Om8vjP|v{5sZcsszdy*(t^=K{|&5VErH^K-5S}AIJD{ z9DTnR`Iz}5a?YM!fzL>nMvI^YQ0f26apIi`Kig;b*J+FmTfIisry58%Wrj0URo_%48F#0~(&E2iL&n)?boa3)xHT=}Ac)h}b}+u!9}GT^?Iul_5}dO^ zgI%?exzUi3Z^SMewgSGMfu)GTW;CHrR2`!Tkuc8iXgoN?J}?0g`PjQU7z{SUAnaqc z2sM=p9m_tq1`I_}KthX|6=7mo?+5Y;Ts02q*zJ-o8lFqja! zf~KPY&JG_)1mH>r3-7=Ks~>}lwqf-nP({8E&!`<&0C$k&Pho7L03Zq@W*3tLKz&-H z@Auhn??=xchcsz2D*`J0;i&4dD^A5QrvTFKUUvYm?Wrq&(vhoF=XoRo7;Y#&$n0SN zRh5^ZV+z1R0sKSE+}9|(DGt1Yi2|UO0`NHWdm0e43c`Zy;_bKJe&3KkRR9FK{61bt z4Lx9xTr-6rxGX+2ZkO{QoQ2{T%oxfB*$h)EL>J&jp}q8kEar zc1TrLhao5eh_cAy{YE}Pp7rAn`fqIeaM4tUb1E_u#d%AZ7cQvK7K?0YjL%}cj`8cs z&sUcRohy-o&mpI7%%dtF`)uUVt#LBKW_JMRyJk z4w&z!r9BNQ<*Wi|i3KDTAhiLiSnp@gABQy0Ls=0JA=sVY0x|+{u+V>9L@yUcpQQw^ z4IDrL&~Wo0g5L`U@I@3sm4x6W-vYl6&}l&&cp#`+gd*6d*HHk&#RT*x{N5c=6t7~u zhTae3K_Ft&Oiu-n3MBpg{p$JSkmh}mM9{|zsug5LDFq2Zk&aOTV$41w7DJ9bcrkp) z)=Grs;TvB*h~YCh{(`EAm69f((-gkd=PG6Rt8n-3JC6I~?{wTR$feQ-expX;Vc!bj zCvn~1LD!!67sesPehjk8y(JX@RfKZ646zu$uRVVp(jpIcF+s9+Kv+ZotO5X5fXrtx z_n;Bm!*QnKVs&k>{%>Ra zQd-J=-#^r%1|W`OkYv7xtOY2F!URHiKbQS13PCaZ4{eB+=MfipxpCBLSrQ?dg zMdI7&_Q!=6L^o#qyqO(jNzaZc^Ct;_{GM?4*4=Ly@(JQ`UnCLy*{%m)*zH3+h%yo9 zB8#*F%!Du&2qkGXT(6H6+DBfa!Pt8^r%EbBLWI9XtYz}X7>@C@68@3jqw}x`f&g?~ zXL0xLHx~JD+zODw!wcNOZ2IiB2P?V=muj;s!sAwexj>p5ByB41L1umeEX(5Y=o^cC zf_PF3?ew`2ZnpfX&&*W;PU1vVF^KFa31K?w lFAfd_00000fc#&}zy<(&RW-zPr-1+f002ovPDHLkV1gy8V0r)m literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/ItemKitRoboticArm.png b/www/img/stationpedia/ItemKitRoboticArm.png new file mode 100644 index 0000000000000000000000000000000000000000..b02a227e30845a63c989b32cacef0e453606a9d9 GIT binary patch literal 11886 zcma)iRa6{27wrH84DN1&Q(OuZcZULn7I!J`t~0oOXmR%zihFT~;)UWcxEF`Px%_YU z?cRqZYh@)l@squ?qcuJ%V4;(v0{{RlB}Lg!Zz<$|0fh1v_luj20RWu*O0rVgJ_sjG z!44F*el#yGL9QdT@BVyi-BM0VH(rXTw1S_ku33}#x8ex3J#pC2yCVXN4Du9~QJc>5r{}FAS(bFk(LKUzy z38DMGwT>&cSp6T4IH=ye^nxH!I)sC?c@Npy*@+*^3msbu>-B|tQg`z9aawxrir0IJ z0eBx18PJ4t<5TX_tf1^;xCz5j_>9wnH<9}EROx1-xqwWPjX9e>GW!gUr*6-=VHi>H z8S+Mw`T;XQ6F2t)6%WeJmYC=x-@za$pG5l(l&C(K^WC{g14!e9x)JY(6p5BZ0DtC8 zja=1rGC9M)AUwQ2J=;&=9hu#ae<1f7EcONY1H2zZn`c~Y9WPX+_7;y!v;4fZJL9Rs@{Hqs%+$pP>+(T1|v zG(ta&Q~8q*Z7Jn=1Fx5V`QPE_DB;GN&p7a+{q=jE-h+?O0KLY%^pW{QNJbolGEs~c zGG%t$G>m_VoCkfg5E|)a*LE_IXylV%p^gS5qalBCS}Z$^vr2h4QuYZ@iE+Maf!@*C zcT{7x0lk#T-^D*cej~OpxZ;^GM(wwUG zr-)f{)EXGfqiabCo%&vYgnEDFQ39h4uom@$FGT36!GLMek-{8GLb6>Uj zeRnr_X9IPDDB}YPcY^nOli^q!F?J-JNF-MP-Ak-`+4I+lfLhEYv{@FAG#=N9zo(8E z0;TNU3X29h^{WHBOotEmN9huH|6$2N;}!q0J>oc}pBPcG>l+)D~Z+>Sf8rp_Bx=EmEm?wz<9Myh(6(IgWW z`O(v`&Fg|k5tp{vNVxOPs~t;M2&be+W36e0y%mHFYAs{wZ!^TV)bp|n;%=5Qok2;n z`Z62>qH!H!Z%=ssq&9Rl%@$x;>u`pVg|rQ{nOy%b0^uED6^TcebV%fnyO}7{jnB~m z=s0PCfb>Sxp8^(NPgT+4mDAKps=tKojo>D}hU8DUo!8Tg2WX2rZv z`b18my3Hq6!PLIpKahu_JP_<84dr{67DRm?ww!i9LJ5&}TlyeE*E>Gab^IP5vBorq z7ZZuq{_k|c5A7pu-pqi(Kxg%gvLzA0=wn90UO|@HV6<(DmZB7xOK>Q@#IOAhJ8-m} zfzQ+d(Drb;#>*QOyuy6xpA;Wc;G~xrt(=j1OYaTA5%|S`ODo#Vp&oeNL!eatT^*5I z1JE|ZzB5GnZn;dJt~F{+$B-F-0VA+#I}1qL{i){O73S)Cd3~t$!y$cRD+^OmyvqA% zv`TK;aogym#=m>atKqD}wmLgD)25}gn95pcQ4?T1afV6<>rPbI0RT&x>Azzd)-2hi z-#XEKV5HB?^gzjyC(vF%7DWKxulqBEq_dCteMW^9@m-@2>BWhVy2m5~jGPS#J-d zFjI_A68`rKJRhD3-lLn9xW>F=wR6NLdZg}62JFjXU+&Xyl3JBLZOzG_G5~*~-%pmm zShRZn!%EzJNBID3&R2ZxS!y^nv?uKzKE6G>kiW`rUQxYUmM1!`UItr{UL5LT)ffGj z6q4+LkjG|nPef^4Bim5(=j>M}AhoRN-=r8ScUx`tRx_;{95VJpF?>eY62XTb7J6cx z1{EpjV)x*yYPJd?Tv`ye%p~a)&c+w2AIT;il*E8~=@2rEMdMp<=*LDLT4VHn&<@0=?B&lBu(!fx4(e(44l ztGeiRit{|N8QlU0l|2*cf>ycNm+WB1me09fa?|j*9RLF&ouPL+;aYo@qvn#;^KL(( zWOvpXS`P^#s{|EMF7Mkm(@pESi3C3f%fz+E>^7D#Bi=Is6jj$Fv;qbWUtcM zx9DZYm?DJR*3-sbiIE3d*PAb_Km3~EY@!RxO#@1T@e%=10fsGtRd)W_;iF(A(e<(%zXc<{L@03xYo@+$M7l9zM=e#i+b4CESFmL~< z9TCZPm5xZ&#ua=lR6Xo4@cpx0*XFzrK4f-y0`H!hz1?3|mU3HxXr1=aeDv)c@JL=3 znq`ykQR0mdD$^VWJ0NQkh5%ybF?QEt7{RkF1B7-%0pSJmkN=If3^!P5OWSMFjQ@g#%YYVk&wu=S&?M5GSgzS65>C>qXH~CS`bt zmLL{?P~w<`GRB9@*zJ0l^7ur=vH$)jZ0(K;WJKVQf?x?D3o4)|I&(_6vg758<|)l{ zJFU%-=eD$rw&Jp{?PkMN4KHC6 zicjwaxKafs(*5_VZTY`z&*ubLH61nnsutP27SuB!A!P3P-h-ONp7T#T=R$}RHE$s& z{-@`es=230{O?4ew56MI!6EC-@uQm!qd@w*_Vjz;U}wli!?15enyQ8T_t14eQt8Ae zV>}HCLd2$jkX?EniO>nIgR;Qi6nsWwtOcKmYJ=OVL-Dn8TyUq=SyTJ^mmZf{s`=G4 zEBG-A8PuBQ;DYLl&6B z^4dJ~h%^zEZUhGd4P)V+4*hw~MeB0`>&6Q~|EY z44NSs_@OrMkAP?!(eWrky%9^_!yPH;@F--BS6%xnX0l!$gjWsid)rC5i(O`Ul7f-9 ztvo`$5)0DWZ-|?>(jal@?vM%DoK3>3J_031{>um?H)Q1W~+?u5Q84)^yQ(R(;#EC57p`-0ii)CR<`rt1UD=v^ z98^C8(5nSGG$>Td2;A!ZdvEv^X%7iP(6)2Xcy&#SN8SFN`ZUpD)6kLcq!zVLsa;hxeRF}070W8q;6vC=E}%P&eV(o}6wFnlxpq@2STHdM~T z?M}gX7v|PaX0R(;>xuNQY-?aE0$b&)#9{D?1HUVrM_2YztwRB+xZ_JGcCu3=`^dg~ zBHq&a@}X-+|DEgOLwV31>ZVTDZD*x+eN2;B{Ss~;+VSV^UHDSu5cQKI0RR)be8~K+ znd?`H7F*k{x#L*a>^tPiX0_I?(PEJ9b;wA024Pj8^TreC^&MePx!8?8 zbheKwi05E`#=6a?U{^1Pr_$rfF%xCht!npoVsZRy_9D+2m{)9}E0A+6dcKiIL-H)H zKw4C;N0M=P;t{LMdsZPj7fv3h#~rRFT@hLjJ`u&P)<|T04ZwN3Q+Hz-&z8|RWyZdan6C%BS4XtnAlL`3ZRhdc)!Ax-}67xuU3*I2xqL!M?Vq{C1Tu zy1=kna?i3*rAyG6Q++}%PQ{*MyJ>AN`o_nrVQ|tH1^L|M)tn3kS;ET!jNoBuV?>#{ zk;${*2RYVs=;_)%K#^xVQ7VdS%0K>q_gPuT#$!U+6hdz6v8@PEkzu{8G)V!;%VJju3)|eum^#GdU9;b~ zY1g|drLj6)n96%T=Y5z*oOCzdw%uPQ|k(pfrJ9<~>wmRyWWh#oq zg`LTZZ&snk&tJK(y-8qaThy?M*Phq_<)@>Uqn~Qh#-Sl*8V|u20fWRijGh&g#STor zBZl{_45Wsbe=>I6h9O!u$G$(<^y~Wf{Jd15`x+XxO`EtT9|Ta)g%tuDuovbrzdH3< z5HN3STcgbjA={A>ldPZjb(V6Qcw&9b7so1I(iE6>g0iwC)_Jlxd>*%9dQm7I^+7^n z(Kg)If$1HiFE-0q{nzhbf-AR|(=i~@eTWrkf{4p7b9EV5WRX^F=XDqm!-aX7xs$Y- zGEIBAHh%0$gd>>cp-3_LmGRC9MC0O=DwcwQ8{{W|w7{z7V=)MkuLpejX2pW1KC)<> z9DdA$r|vVEyWe*m_i9jDD8zx*V=r;`BCuA`!$G@$&0PNR4p!1Fh&c|k~jzAbto_vN;-+Qa53X{pxt74w2J5)3p||`p&bBSg2G@)wWuM2 zI{Ct195?;+f`-+VfU?3ukVx?T))%agUTHG0CrBUfen%gta4`FR%2_Xc-m-n=#I&;< zL+(g9i}_EIyo+FZ+MJxMFgDmT_%N{g=dGkit z{l}EJQ(s>+4HWLQ7Cst{>_7r$8(4zY{nU6PK4h$lH{&|1nZPLmlC{6jFA3WV7}5}N z!d3Ch>V;}|zDcBMs+j)t6H{6N=Zitc#4=X}=>U0I? z_?h$%Gi7tW5E>3Zmo4`qB1-xF}V6b7(_tY`{XA3dmzCd#_`xk1qy`X=(N^ zKAd<+MQ2CPG4v3}$BJW?IZ?y)*CZuhxyS(imgCsGU4OdsoB|SmA*kuK(0Mg?&VzT- z%b4sE)1JWc`7j34cmaVWHx%Qdx9nu_RVx!YKTYlKUbCNu%gOcQt+Pl;Pa$Y=)7CcO zDW9gM_dt;tdAdq-N?hm=u5wIn+4!gVzPc$>vfA^LMi$rOHp3epT~n99J^Z*bjVkV~ zNgcdja~54|$ufINrG;UxEgC+-Xg}uH1gD@|BY?tH&-38;(4HI32`5n6<8m5S=7)p< z_jnKsx}~Y^XLKh<7I3NR#P^B>Wb5>5VAVL-Yn= zx8V4aKL*0mM=cQ%NAit$<8%zS)P1)<%?YK@gW9cLxg2VcM^FDn4)pxvL^PYNN5O}* z==_%=h0nl(!IOcf=Hr^|D58hYy`YXf)*y%NE&>h9`_0vbXj1S@nD)6*lh*86+*Y*PNi4BcW(`@z; zft*^s2;ZvAi3o9tSk%iA=8`IrLYRfqR##e1xcPh3y`fvxqS!H71R@4-CP)>Jf_}Hwtd*^$Ssxp@T=s4A?d;$RFv0*pzww{ndaoJrrKuxd6{fBhN!Zn|x&n z>6XM>9Xc&{eVz3{2_aIH)Wi?mB8ZkfzXE?Ooo#a_jd-EEjivNJDN^@R>0(BdN-lvi z0n%LMOzB)4eiK04H-Ct#-b8Jvb{KrvIbDm?*!kmNF{%`K7o;o6qs?Z7L65fxy|Nc; zR-w~PZnreHf9E2P;|x*MLDWN$e#P>mJC9=4M)bdsT!Jyu3$2E-OB+)?j5sOn&KKgsVAeCcPuf>kBR5LPI{+Ma``NEFA zDS&h9Z2H>5EgpLjVgL)wu)gbx<3KW+09iU`10@s6r;$xHP|qdlzzDKiZmqz^!tAQR znTf=Fyp`LU(u7hbE&|!3)pPGT#>?kth)KZ6;YIb;5 zE$#M=LqEZzTRql?#4IFx*MHZf@3xXu-TVoyT97Khth63qKUfPEW+;HFoU@j1%LC2e zNTFPOhr|u=F%8Mj&yPIv^Q<|B5p`R*2K=c0(w(LHRb6aAG*GkhZ$a5SI3!raj45O( z|J0fr%@n2K#i8hN(wiXsT;b9yl6DI%Q+23L5vO#8ariI_V(VzHd zTGPM8Ys-JPtIY_b<+s@fQd~u#@6??qh8o(p_Hp}&zT%z3!;xjN~BxYGkD>Co}j>6}Sjg4;el>j+Cz1O3M zUFrK#03$H}GEwixoqQCkNz;-)@!L;1Dlf;SmJcbdsIUm$!#H|C-@t%u)DxIG;>oV* z$g-OY5Yl&qJ_5x&z&L{oJWg&-`-~`xjyJPnUr?iyF~76vo9e2{>JHz3Qet?{+@Ka!{iqu9x3Re@lGA0j)4j(W zh*Vh4Aj}AnO+=Od$xezi@wFCB{V%yNsV*1eXqYxDa@vGI*B2xAJ|r64{#Ki9zv9CC z$!PvYjI?m%(TF&`$e--LXv5k4>ej=Sv(U4KpfiaZKT5DfnF?l(jP;d9`hm+Y@6vs^ z{$5Wov5dZ7%smaz>3T%?cKS{FF=>~yBk*4AZs018Uc4_dm}F63U0p4tUK2siVqOed zEj+5kEfm2f@4g2AED+qh#IAZc1Sg&wZ@D^LiM!4pbIEmT3MAOkO$}Z>KkD+B{N6~WQWhN(+e-#UFUvPp3hNqtlyXZ_RfD# z_t)8@?8~RnB=0KfuBi4h5OYa2C@pbLZv1vs8iCcmiE1jDV$6vEV79sbr|VRDhLsyn zX3Ih`V3mIt&vLM(!0eyAt0tbTebGv za~QG;deeqoDDaJTdBliG9J4BfWE$%0hFyb1BI^djJV=H=ZaC9U|2h3~lSFwyA#|6d zonTcn@vm`p0&dT;AsQ_yvi@k{^`62{fTJPG^Oc|a4n`W5ugkvIn5sO8_E}4&8zWS8 z9tTCs18@6toX$h13^pzhFJHlbO2zR*wlUW8e8LlJ%&bh+((3Kw;{l-a4V1Pc>bmhg zo@niRiK=i4qLVRn?Io)R^010v*Vfh!0Bd8Vl0n3t&GBb|Ko`f(Xfwk6-y;xbt|E*( zY*T@W>2^g?{+h#xmzugxqS)b_qF5_H2%~AuR|P<2s-yn}vW9aLl*DD$@Ggw*1bf|7 zz`=bh-~6h<=3YW^Dy9fxWhMY3)2Iz92g)ZpaP($c2#kvlo{rf>S6MA6SjO_nVEz+0%Ssu? z+ zbp2iKy{NVOvULh?Tw5&jN99GwIVx*_r$dEU8x1yb#QH*)r~(95%utv93y@X>d}+r* zv94nGYUoQYF~S*Iq8+|#%F=&SWXipdb|h&ulX5B%;YvCK^)Lnt^iviL)R7x)>DdD( z^`r%%cImk4K-nOsaG<>~0afx@)30 z9B(3gT_TXeE&bKb_5Rx@r0&lfT8mtXxTo6Vf`z3oXzNBv#$dcL>BS_*bdsr;P)5i@ z9@2-Mn$Pf#_O1nc4>~aO;waxExBxYs=Y`MsX^O&NuW{8$*fxJxz?7*I;6BD1V2{0^ z;mHz*sH(@yZfAQ}kP7t^MLKkxt;0yP+M}*xUg|nsuarEjsgW_`#Zji)?XF@$x5+}G zi}?@|+>1}Bva!pr4dGxY8;ol3({Udz|5R^r%vb$OL=J$YE;xh5HO`z-M zL7Jc85;Uc*8bbLwr=*UUQ-+M{N8&*yO@i5PrB-Xju|$Z)7~AIx)?moRK4Cq8P5iLc zyPPhiSV*+7o%n42E@R~OSO=)JK6?u%23W_$e94~NL$QVpI-7SyToA=g%}CM?S3jsR zbTR!R08ymkzUhoh6(1s*f+Ev5$Jp{u?-YQemiRkw7*!jKg^N?_ zS~1mN*lFFGmy8R+a*|Kut;cCsABqqE@H$R zo77uuK3t)T8BpBhj+d1+ZpOr#s2m|Dxsw6{d6n-MX8^}oAeWtkiJFBnn|xd+ZlRb~jZXo*dyQfCYOjwb!O8-`(nM9M`{lWASENJAoJ34q zXFhZIKM$2MYEC$pDcl(uOx8#wsJ+(SK5wSucQPm$yb|w6(Zpk2iK!$N5CT?&2mniY z^btSufMpNIQVX8kB3=jH9^%6K!FPQ}+$e?BN?8;vq`=G(P*m;zQv%g5+p(ubFP2n zaD{KCeMU1}^&_8}dPkT+kACzUeY}gI<0hZ5w*TvE_5Fgp-DS7JrDi4jeXcb9H*1F~ z*Y^VsAmx8I)vOtCESQhr(2M-Ib2) z2KB#3do$_16I1UrW|wGkk9|CdlpE+IT*_l>>QeL=wPqqhBc(XnS*w5t%dXqu3c z*AxNnxupeJa@%`V*1A*QUyT2q?lxIA5_eP@^~z~jiZT8-5`64T6BiIto1d--%mY}O zflOJUUNlh&4QZcNSy!hpB>teUFq$Tj%_d?U>i9Q9FcKx;p$B=D zTdgpCIaP0mK5Hz=3 zY{S?a^~S}naa~~sz(L)35O^z8*TBeq`ADB=mNzG(SL`22>@TgLd1BA)BLl3Lsakb3 z$!LUSVm7WH2kUTh4*=ck8k{CRpidGJ(DPEMSA}BF2HzZ;4#}6M7ZM6I><)a+ zyR@PV!rrI4_>I~0-(R`c75!oqWrOg{;l(RohX%hMtlFG1AL~wK_R~gl!bii^;LzHA`_=*~7g6!G$A&D@_MZn}Y5qI47OER$wIASl>#R%b&K_Q?!tocMyB8#1eVjGKh;fPbc0h_D!clX=!O@eT*=nDe>qQgJyzX$Hr2G z3r*xn32QV+@-OM4WAJm+oqlMtIxfm{LCo=#P6kMn_8Px4l5O=?_yFxV8!Y+i)*g1 zE2@~^w3~4KmVij`U}E~j+qyHw;G^io8#`;rqx|#|)-w``6nPG&Ndh^PNJalbLRewC z{Bh#;LH=t)ow{dif2t}5n7C;X*`dhOn?Z4~$b<`KlG9U|e&@CStxxvgv0#6Df*{*ptR0L9H5t|c`$Co0LQ<^CO~L$ezC(&s5|{GHNO+8f05_r`tCBH% zc-Nh#jefHA`Qsg$evjPok71ZSh7tn4cn){bXL`c=I1N{9Myr{e|_mGT$IURTIg7MedWObhs#B-Nt zV;!JWk_(r3NIw?G)L)(Tzt&)(-R#G4& zs@(ejj9||0j`FPg;_%zGsg-{MHd%X?f>v#)#a17-uOHz^@v4BZHjxau;r87g8Ls=V z%rLia1~*bWcAi*AH-0b}$C&UD2X+`e5r9?~8^pAhPsE9(faNITUR3=z!H*3!o}L6i z%MudGkaz4m53hYSRjc{I|7Cb#uDB~tW-wCvZD_riIEm^W!{>OG+3$)P&5$Ua&AEsl zCX44lap4afXv$aw{!GmRt80yc_3t|T)(vL6VLzXwE(-AgW~bQr?i~i$)F^TjVdiTg z1~)IV_?xnqTYrkKI<(&2nbZiS7O2FpDVmvG@@tUGNaUJJXBN~2QNC4<1 zK%k8l3HX|tDcnThh{vRr{K}bREZwKVc{rr${PKvI^rmt)PPF>DuG_cbR7aEG>LSi2 zMP~2YX4~)95IAQ*`TrrY{=bTV`d&>aDM4?laRA`HI}M5z!6P&Iw@SP1e;G=0A7!hh HO+)?<8lun7 literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/ItemMiningPackage.png b/www/img/stationpedia/ItemMiningPackage.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c613bafaddbf6146b926e4559c5b2f230cf858 GIT binary patch literal 11947 zcmV;cE>zKpP)Nkl+rzt~`dAV7j3G2n0pGa$K~<$laanpI>wwr4HZQnBJhmC6s>RY|#0mAEQi zrz)vR{>2qnrToMBGhcitQ52UB4QVkE{SD4G(@{Idkh*sUW3hGFUs;2=5`rA{DM#=> zKSU>@AY*xw4=$b?TsQ%c%c5=6ZiB`S60Dy0wp?g-077(gYm1@rOdv@TjeI_T;Y4s@ z1Q3mk(-4P*I{DeH;WOY4{p>=N}Otmr77}9Dso3 zY}>EzueL!l-6;i*JJ7xkAc_+3Sn4v{=P!aY6F_t_N@EyFCB$EFB;)aT65H8$eEN&i z@o6f6x8DB2|IU7t`wDh9oPkc(J1r4|L%ah=AmlyN+yhlbZspuXaH;|bVWv-Co~C_5 zK0#%-c&-O-gG4+QO8~<>kEAal=~MvC175lP*?&JCj!dT3Q(xXlZBP+7L_1mTfRODK zf)}<3LMVdLxgGjc1aS4*RoaFz)5GD5o9!&iPQ<37FJSl8_@&sZ)0bk`fDy|X<*cc|C&nJd?R5s6P=pVoEWXY{pTG#Y*FPV~;pGt)Ew^UeEj-p5xd z@}AUtZ^n~%1XKu3?}-SAa0sMf5u)e>oB6YKg1!VWHB}=V+gL60v-$j)ZoCV0tmy;5 z6uQB$W1CE^r|x4(c;I9^X^*ph>JnyCzbWIX2=G4h+h=!|T?;_;ix3(QK`auX&#_n( zve^qqdKgK+3EkK9L0}d|FzbkGZDZrFk#wzjK(i23Yz6lCh2#STBq@we5CvJ5@mW6g z3+pI=P(Xxntm`Bq;}K9b6=X%G$`wVPJ`;$3-af3^ba1ne9Xa*VBE=KeM$iL{_zR_b$oSweBsuw1*Q@&iJ~~wSk9e-jHjl1VOT7<`0cH?onUJ|qlk~%EGenke;v`dbPDqw3?;e5+Lg%C%upbEnhgZGUImdiq^ zq`+ySqW}o;^K-PoG79{rA{Z3=BQ*nm=f?6~NWYaVmg|f>1z; z2YKcN?9LMMNt8pAP{^d|?wk`zrn8Lt&#y9^ycQx^9 zawe8crPBA_{KmKLc>FbN zmg4d0+3EOn5`~-*$eGhU`{8 zv|CkCK@f$O3k|v))CJ(wd}8|qJG({NYNqcr?l4Hsg81x2H2SZOBi)N|auJHDWiX3R zyZV4j1l}?*0QBkxH7v!(B!6~S`mflhB2csjkwgS6*LlT3ihw&(^F2jT@Qb}&42M-( zb5<8@zeufx&phz<3@#dS^W~UbEZ;nU?0+LF3uj%L7~90YfR%m?3+K_ zDgQ3U1J+{ciTC$yGO=XP6?jpyzwa&5x_v=J1jSMjayunB2{>=fR}=+^D4bT72T}r( zX!FG4my%beU&QBlU#kSdz=v!yn?=wPD8AD!2VM};Ntku@NLIwkryn?vOYumM2w(?l<$$iGt00JhdcPBb0Tc|n zLBAs43dIt2fO^eW4{7E*LQwRc*7IXbA@Q$b{JSgDv1?dlCI)@sHj%e##C8Xl2)t#W zM;HfX8fJAL7`+H)vluyl%XwNU1KDb$gb*iq#W2LJg8bhy1^MlM_j3{v_!brxK*SoY zRBfw|jfX(S%qQX0*sC*fDD9Q$v){*h*C16iIWrwk&Rm{;Ef|(QKRhf=3xYspZ1%Vz z%k)}~dj-w3zi%AMpq2BWctqgUtE+?}Im6QnZYSWx4m+ydL(#rmwzLK6VHLDP`#p2a z3H^e-$Es?;q3X_J(Ib%R#2l=Au>1hKzlZIcB`&PF$1@%F*Z6+1RE1nF*VBEoBY_br z0A1H`xmBVf1knH=fhyoCiUuG3%S_pZ2YLx(!q!$!1_mO1Gtu3QPJ8#*#|wB z1_Q$^<&n@Tm_|cpzS{l>={(DTZdg!3+bkWZplAm09{#u{_Yos;P<#UX^qo6Nd>q5r z-74&_xySpuzA(SY!w}xdensy3x;ZENLzwvlnrdf%Vrr`H0v;se@feAv>FL;#$cY1~ z?frlql7Jnbp?#&W+4VeEIXDJ{cp?<7l!H$GK!_)qUX*RZ2}GWS(6F5Y%?==iqQHy6 zI{E&IX^7SIcVlt!HPYraVRz$k`g{G}Nw4L=m$;gM&{&9yfQX?~E`cQ4$0ltVMSvw> z6dz~8qrrbV6N~*bB%Uai5-)l!)RR!BRRSE4?<<9;Q~)H}mH-ciuc8Ph614A>6r)n4 z#MjsN%rTh8{z$S^Yab+}H@Efg4~OdHOW`O$$Spe2v%z$(^!KU9=|92ve^3Y?^-=;T zYWpdp3v?p_j$UBd&U8gX5#XOuOMF5;{*5HBUit0$Wa9Jq>bfX)$_Y1^_S-!IpU3hn z)4c-ExCNrLl3Ljw*ow;5HBA`GLk194{s7qG_{p6%31oM(rE;Cj?Nt{4{m z#~zquIL&f@03Z-*`k8kPS3T#CMM9s7MQ)Bo!y{rLpZz2J+{e&%hPTGp`wxaBFklLD zxm?@(=CV84wgbYE@HK2G`EY?Dj6`Uwktnr4lY`Z@Jh0p|h)#|l`ORM=UPXIXYt~LL zjBUN1IDw>3#_joN?35Wc^Li=*SCZ-cGGCa~UbkGlQ z+<(9ri;RVV{>beRQr3%`i1uV;efYwf0%W8;03ddk*bQ}VS1rVcg7)jg!UJBA^1s}9g5Ouuz zhQpEZu|zO9!mg##X?!l(uZ^BAY={$J2*tdQCE+-*0Vx2wp|=bl=Nl>%OVk0d3|wdd z*dp))BaYNX;0T~pk}(b-li8!hH_)gNQeYTN6wuCox$zE59wFYrFxGOxKLX+S91Z_W zvLoru=s^Gk;nC5N*>Oy~h6s8S0I9h|0Ifv8iUG`W%!-y_FsiP@FCA*e>`rM95{VdI zs$LI{=}izmPjnK5&*yUmi(y%2ZKj0+@YFy?2UZ#Z3q?@b&O))MKyIf3x!nWIXdUmv zz(0!y%Q09%8C;izy}c^z7RnGD9mQ`5_zji@kL!`FAI1z1UAuvqp1^higzyA6tUf+`=`w_`zku-~2!RmrNVfByY=@9|m&FSf z$a}kxc|<#|ec>;2d}LP=3KAb*zYR09zJ0Tn?|3bJb(8?|!Kn*i+dyUPJ9 z4hPx_0DTA)MIA#C{0f;+EEMaD5fPl100>k=g~Po9DETxTY%YU_0#Nq0Y4$tt^Bjmm zLj;GaN;93Wxd2mh5}s$l@8=@##6@ViGc5-qG1fFjlcu^!cu$FwLIgTAD?(Knz;})|bvkKO;4HUsPfObfO!wHcr3%Zk7U!=4>8t{o2Hf3{9KmL7a<)q*6?kpuO5Ke*TC;6!F*>QXd$ z?P_B2u&VFu>~5!RlAZ9izhToB1QCFLhzE8m8l{=gAxKgDWsGr0(51b7j51~p4`bob ziA2yAt^`2hcekLDc?6Y@S3pLky9xr!zK~#WbYvkI42+nDUV65@ zvvIsf9(SLO`w~zDEGLf8de|X$S;n`7LYQrKG$H~HYiu%c<@8QmBTy+I@molI)+WAj zBld>;co?2#p{gFj&c0gzS@Q^JbaWI(Ljf8yi5U1@#&_w%_Wb)C#EU; zEEE89dUw$f00j|&$Zd07Vbl@&vV2M$&UhBo2 zP5c%TU)?`aQvJM$*=}IASD|zu({}-pLknkURM8=#m!@gRt zKh!|ibsE8u0Cj|u09_jnu)b^63Mkn%kh9D9jXk_$%MO#Lq;m{U?Z2X-NG$RjL%;3E zn(jjqoEV!)!ua(?h+KaG>-hxe;smg0>z1y7w!eL(#PFPjXN7tQk=taGmgW?QX<<4Z` z8D3P7_(~NNO#_kV(dzwn_SYaqVlXlHG6;cD2w#5@+ty`?9}WUHJOb)o0W3prT!`m* zjK@-aLw?|g8t1coZi1Qmf4eMnE(vZ+?&JXI#J~`@sm-&R<_Ci#3+RGDLPwsK1CsUa zOTx+g+5_SQK}mu|>_?-KwquRMDq3&}l-(=}AlGsnA)gSh=(blA;zi!=M1*)66IjmL zkbayKDEUoLc5+>f*Gf4kIdg-NE@pI>{cO`XqwC!tkHy7>*PK3a0+wyR2QDB5x?TH2 zj4bLc*8I}PxIggl{S}B#j-wjwbw$o?(F)dHwV1`rw1Z|)vq%jV>$q+63fA|kZri?C zld7Nd*M~|IaR^7EAdN*q7?$jp=8+U`o6*wv4Dh%Ir{pN6Cu2PGSrmbc<9)-n0C>(# znc;B+uLw-5xjf+gct#uT6BeD=yRQ9$$HXA0?rFmH%gKK}ECeGnml6d#w}Kh1tGIi9ZhhAte4lg>0!<&-UX$h?k-yrcdl) z!q_xz9RYL$GFHX2ICDGQpJBCfhh{ObeV>6p=ALf7xcIs3v;60LLq>Z6C>;dAH}>@e zBh8Ec&vn|+Moj<&iHJmrCy?>t{Kt%^#N$4SMc-+2+Z#05YeF10xu4q;L8r-{Z)TLJdepj zxbXrV;G=zcr|o>s-$4K#d;pe50>0Koi-@4~v%9!n_ToDNsn@Dvs zJ~%N0LCh{bI0^z@Fw3>rr|x-Xdc47=5)zo6r}MQ!!wHB#wxY-&Vqtg)%-w1b;`3y1 zt>!y#SJ(B4n=S~1o@&nH_l>k$5dZ{N*H&=?aa@z9v#fsAP zUGW^VA^AlayHYpf4J0#_E786qfI9Ki=8x7chxlOh$`OK29f1%C<8hY&nsJ;tYlR$C z*4}Z6;G|%^BC3Jfyyeb%qn0qo;r6E%fn$!|aWi_oULq&G>w_@%K~k9#Ja{`zogf|x z9$Vv&5Z?px+qTU`Cn9iC2;&<99D!#yk!RWi{=_Ha9x+|R3@7Taj1g;s)uSXd)X5> zHqEkZL+YNxTApW?5kWq%%fL5(l!Jvi4i;ayMxPg7SOmX_0&J>lUPJSibSGIJeVBrk z)fCLl&%^a(0;)A%@^hwpg7?wmd5nivv$g|a>N;qK0YWL~`u(WkHcF_xxq|hW1p(cx zxeU55$o(j=trO6(dc5zJJ7B#RR6DO}8D?}cq{-znv;(K~CV(pI6AJDPbq^wh<>eA3 zo`k&vv9GlV`KJjX7y-3h0L>$Swopo->}=AmzexnW!d2sq)-}EZQZw-w7&Gn55+@D` zy)3FA`GsC42m)~c_q*lymm2~&0ajKwApJB0Z+-*d`t<~T=hV~r*@Ua@2Z8B%Pz4F( zjkmkMpqc;(dKE!4@h8P*Cc92rQS49x{JjZ)7|hybqMJh_$ zfn2eo^t7^{gAGw^W7|IWqv|17(M8yNRzWLy3Y#SrzVP`wt~xDno%ir)Ed?tZ8?bQW zI{d_EUW8~gQvaoZD2h2*JrhbpS*p`-XGh(#B%*De{$qM z&eC>eWfc|{=6jlZV=f6RbE#v03yua|?Tv*6+NNrb@MtYf-NA8))yFjt?Vp90avm z2Cce((3M8WA^;q z4qmDsW7z(|yB+iBo+9I68pQs`!(p2J1chP=a?iG5Wp#tbHtwxi1iTaklCY+xfTh`` z)AD}L*VwVPUx3|mwVwTOjOAMR*J65qFiqIoue^o52cy9e;DsR&{lhJTlMkvrt&b(E zfCi?qEsB$O|BeEg(Q%M17L-Z}R80eaz_w@>e@}010)uVh@+9~}ATPkS1f_BX(wiAbf0Th+FD&AC-Zefvy#V=x0w{;J z3moxJ%Y-75UfNe^h++}uK0VVk&TaY3NeTBr(LqynSeu%R+4not-r+fMNa*PUEN&R< z*E)8WdYLDPeh{YoP|O`)^ERGr!h>&p2R{3$n`pz+U9BmN3`2Bsd|;Osj)WkL0!+-b z|GqSC*LAtD>3Uz>L*gqo@#l$5CYy5lVnAv;mh<;0fErT$ZZ164`f`Z~CL__V1t8$w z7hjz3?!!(gVEWy81C9U)b{?yI*woc&@Ow1b@aEj zRN4*{!lys;B3w&!UtS3Lp9JFR*$o3rUNn0rdZ+%bs<)rRDLo2+w;hMvb_zvsDh}X) zh#(ve!kumeu$qFk)eW@T_Tx&W{jR<(iMBI}qIjY+OeMN^Fip{b;jt+B*uK7n0ysbi zc-Z`|qX7H@*V9KB#x6=oJ}Ci9mgP=4pU>xd_9mpS!}^xbUG%>9!-p^yiK2bm7wPwG zx2oE;^}W?v+3+3*FJNK*Iz|$1JeNH3yIHHkb(6r(FgdtgYMj?uejUP~xxG zh;IRJeJ3_L2*hXSAU-z_(MvOJ$8CL_g$xFrb14Qq!=L1{x$*JP$GuG8kjS3Cz_9fU zy@#>H4~a_yxv@4_OKsHqFE4Z!fh*%%SfGemF7hZ~mLFJsACF_UkA^7m(-`zSZLs zPu+xR%=|$hzng!y`8cceGKbsV-gXH9*!K0uQ}I&Tq4I}V3hp{DtUl{keSM$%3yfKJ z9N2u4f$x|$KTO+y{e>^sFT|rouG!`V-X`93*0gkmvR2!!G4 z^NSFUMr&`|Cs1jp2pj8k0OVgjpNDAu z0KLI9&3ot?NtR__hf{{4D6qD+0jp~%n4fcJIm6q`nRRMOwqsov9rA6PH_gG+c!Kz~ zIS7tLdY-qux<-QtV33GSMz=0~{!UMGr~u>x8Dv=oNs{{du%>DEuvtP8%ntNK9xx0; z1cxF>(Pys+98ls(2>#j$PX~RG|KTbnpWsj4_!^`hZ`6NVd|?4XqhUy1OZ2rLEG=6; ztv7+!uP48qhlG^q_byWC0{2h=cl%wS7Z4Y4aO-(Hi&&loR$xJ7YQ$eK6!*&TzUDr1(1kbWR z>9Z`ThmQeL)t%@SxPmJH*CZ$uiXaUMcuALGYGMqAu`hBwa01qN#%ct(!-q>W#}W8E zammfx8HpWFWiJr-+U3SUAYXFrb9*1ai3g0N;^C7cq0vRMaH>R zn3#y-e6t=Lhvx&PDe8FkEdT5eds=UI8dr4#eTUNmCLvpr}*{ds$>-~4}Jn#L(L)u^YaE-xW7_>0$8)a`tn%`fFQSBIIBaGgIVv?^3+YpZEUrL!=PPC~*NZ|EAtrzQdT z-uA||`XRrahbaEpBIp?@6u?~+0FnIcX`a@iDlS1c(#eWSeq z4p0C>e*z#t5!}b-I~YGjo;6hirBnp5W?TOlU}q{&yFLks2q=uknqOSH1GjG8qWzmM z+wH(gfP+%0gmqc~ao8>eEa+{=dn$fPmn**-kOE)F{w(=gv6O=l&w^hH)`nP~6?|>i zw|q>!&#(Yh{Y3YA3SjF!RaZgNtMJo5aT9C*(ch1~G0(FoiuL}dZ@vWa$p}Oy>;(Gh ze?mwXVP$QVWIuHPWl!#Dw_G=al&V}8Kp#j|j$|K@N%ke=+W@tgrR80N3q6A_C<=25ESxuMer3dKa4{#;hZPDsh65&}m)H zxno$AAQbnz-Wi5LGx>zbZDsTCz5Nf%|M$v=kA46(`|k%_FN2kXGKfNNgf&&P2N-{d zCiUBfX}>LP7l7qO5QHY%VtTurbUF=+-gp)}O}Cl`Fvr#46T)h&Cm_+vp;>=^_x(rk z%FP=9=nQpmyk`N=0d&Rnxbh_ZH(QzPSKfa6oj=3J4Bs?g5(6L~RzTD2^+TaB$mL4o z_h0}@rDFYgd3miz0VoROaybx1vHp%{db*xJFbwq)>tkOZ?5$sX5c1!Be+4p`P59C; zyw>yl)s6J}+D7_bp;UY;lgYmAyeDPG5rM2A**@fiuRY5Z*BZ@YAmryU0l9t-LxkXn zKvR`orV{zxLjf#7trYxY0U`gr{fybjYKpMdN4K+PiP1&ohL8J6({6v5ZA6wJy8vbzMF6_~U86v=)< zzJqQAP~0s(eeyW{wQqg@`(FdQd>#wO0h*n_v3cqQO%+Z%)L?nFK|TR{l7n%eqryaB zeOx_EOK&^Jvj28X%hXw3xFh*RUKsK>2Kaho#xD-RrT8RVnw|nqKs}pQ`w2eF4yc9i zBsbt(AyW^o(5xhYhXEvg8u%BO9U3=r< z`|tnvhsz)Qp0Zy}>8cI^X#_Zi15xmUp&DRnCY}{Z9rtvx5{G*D*9_N(JnJ+7yYrYpJ5`dFzydd_qB9i}QYCPVpuPV)4dYGx?PG^yAID>GWm_$ES{4yH%NV$S0s;=uq>$;0AGUDH!T^ z#SNZ;-@^9yF=B(*%X#9-M;RCSUR=LA13&fIR~+&y=mOu!=kx!E5RcEPc58QXfVvZy z?Q6alCl&zFcS$ZmXxtV73!Y7yMu!!cKUWXcpB09L*U6J*xof!3*S<(AiUNj)-_X0< z@QG`_=le|={=*-=b0p(K0TJes*I|A(Nh1^r@2#w^e$$S%zrrDpLxFI8yvW&Zs_H5n zD02OMO9x%Vm(pI{&kpi~to6&fPw6)1q;pogr9;FE}V-+Kh_y|?1J z(Z%^WxcTA&CBBCHUwPw=KX-^HFPbg99|vegH#Ogjfe3(rh(I||KpGbMnvWv5hs_c% zinD{-(^=wOLVgW|cpA^mJ2!m)jjunrPuh<%8JE=)>+S}f$Ztlsz8lIEbZ~+kH^LdaYi3U+_FJM^ao~o%3kOFs4V{e0mbGFxh{*Lo% z9f|)cB_3d-n>7aI0KM3LGfqVS@_|fSB7k0M7XiaCq`8NY#CZKQ_BSYyvmL1Ptm~MpD)4r{Qbb)&UFDwb7fA+NY zctU8UQgJi&H2s%^_>GP91M)Hy3iq@~zYb8^D`V`_@^ccLng9s$+j$6$g+Lr`h=7Hz zYjjFc)nCCw|1tI(B4FG#nCNTe(Hea2{&U4IFWR8Y5a&1D+K?KCIH`sbG+{xoj4;cM7ol;TjAArz!w?VO7N? zfFAL-dWcRiB-}mieRc_A^(5mTV8*{m-!$<@vvi2>X~AwCU^BCYk%7&pnSmbYOaxFW zlpr)7>T5m`0BO%!1ct5x%hfHH5KprH?gt+{deCZ)ZP8Xw-#Ov{$AA)_87%P*PF(;5 zLCt^xS7fqy75`Y1ws0u00b%(BPU{Pom2 zW_&7rHhJ7JYYhWz0U*AQw)`8w3I7-Nlc%*uB>p}Ue}4mmJc@oK-q+pSejK0~TOVg> zwx0#@4$f2n1aeh&3BWLpW>PZ@OK*PsKHl+{Q8fQ+(ED0lOWj{vOFdXy-}pLou=-Z$ z$^kqeq!VPY&17?fK2}GZivaS4JV<`YC4_FFYU-Cs+bn|jmREXOgV;V1o~CJKtnYtU zBmM!{#GCz|tyc%AqTQbt@ea;h00h(p{5JXC8tjGlR~?wDYQh_!8$Ty-?2^dUYO`Y$ zT>JI*t3_ftDO%&#(+>)JrLUE?i(5@AQ1CntQh?Ow?lYP?K#SpIt?aWr_yt=a%O9>m zey4C&SKbomA^?K?ZXTle#|$y9_pGlyfd)ft7E+pSz78UM9qFI#_M5BgsrCIz`Rjyu ztnm-7CljC^sslR{bpTohTH~S+@8H}7KtMz=6`SgJdP>!e*RlO$jPZ5@k@)*-DH0p^ zz;-(~5kO`6O}}3flff!nq27ptN6t&`1dULw=|pR(qO@EmtopB zEwkr6s|Nn7l`7L{l#r=lklyI#<`zZ<@cZX|y&ZAx0w6dzH~>x4XrE=-p5}_8NSfaz z|GxM3JCOM}{}sIWzdet0Y-YA7>7NAR9b5pJdTgrmS)dX>Q>5=g_ZPMIJdUC$Rp9XZ z`Fz2S?ZSCq+lg?Y1VEta8f}RPR9yvAH|xL22QuApd@2r^-1%hOj|=e*E}Q@ennmEn zLUMt&&2(kRg%Ho%i(&6cI8Ol*zz7oLDfW9F z^Dpcm2?F>jNCG<#8^drsv+xhtjgsNZl4iX+)Ya{(x^?T^^L^+0$cuOpFXBbKh!^o9Uc`%d5ijCJyojHraGrMpPa2fc z^0)8%q`MgK--DAO>2^ZWme(^!YF-{cIw3*J=f9(im<*$Y|7MJlEXzoeB+t79PZaL+ zPGFu4yPYM%r~qSlHYDLq6I`@`1v*Vouc) z2rywj>8&6AMiB@{<97QU(HB>x88i6UmrX;CQ&frzu$WECb|9L zHi>}%`x+s>Xz_(200Q1w62-+%#t4Fd1OL+$N)d3*fB@?-uV3wv9|9qgi;Nr{pFZyt z%XlsX@H~&tVTf`qI#>bzw>gjqLD1&Ej~)tA9~>N!Ay`Y2=FcUkXHI}F6d{DJ#(@#| zK1uR~c+}%F#W~4k*vs`>4Co}5k(OvK<|oBKAe#RonAF}w1=TZrPz=s`> z`fdom?3eem7<`x?_4ic9e9pSDP`2pI_$&v9seROH&%KbKA#UGasbwFa7oti#01dg{zW|f zSX~xGz_<(&JP`r9iy%)oR-boGe&*sbN$}VNSOTwKzj2+=EGEohB*_!;AS0J*?HPDt z=1}ol&U*N8g1{9giPDIyvXEpKF;Pb3&zVeQe1gHAM}#;9ziPKV5}kpK%cFXpXI7A2 z-nr{yG4RPK6~C9RbcomTNd~DM9X~z^9xLT*uU;e90sOK|lo9GY<rM-qK_5HJ1V`ErHi}yWsbg1m#5zU7GRv3lulC`APL?OU`$n_n}lUCXR$8z(5jg z-nsu+N-#445d7=c!0+9_xR0HW3Xm1ggajxvitblntigB<#?{qscQp*!tINwvS5{Y7 z5ct<|(aqP^7xWFfd&{80Yf-rm`}dv&?@>B`j}_yRdPIy}aC6PLkA(|HbBlD1L9(39zD1ZU@m%n_C|K9l0HNI}+HS_y{4NwgMu=8s>9y?1Cx6G|5jQ4%@ zZYH}c*9f8!VIpBF0!RfbW9uiI+x^Y{z2Af1{r=tEJD>n}U?yQ(teRH=^d{72j9E$G zG=hKQdTmE28^F#-GUy600|BswzaEDE*KuC%cK+_QwN(V4Twh-$>+9Xdgr^Yz5@>wi zx4I`IrUfvp2=mRC(veAm$0GobC>mW5p#*pO+xPn)_dor!;rZyVhv(4&5MVe90Ww|X zwBP!B7_*R|mH@i!GqXM2AsDux)O&mG+1J-yzI}CX8*d(hBd|g<8)6Dc?zC%-PRGv=& zl?N^M+5O#v-QC@T_hEc@dwcs&n+QJAtQMQkwgEj5o1NXmMiPt>V9fI^0%Z9V1sErQ z0A7xp8*2oC$5C5QivYwG2V@c)=4c0=5qzeB1R2j^f;FUY&3j&+nal0>?Hs9gJ^&90 zpg+C;@#gk-H#fK6h4J1b0_a^o_3ZGCCM7VAZ-YOH00=sEyytmM3V^`>IuPLPn>W_D z#NWIDz`wrU+)=rZK$U#vm<4Pk00+YYq%a9E)-Z+ic&cfw?fv?5*Cd8#=U3E#gKJc- zrUKXmP_gx~Ai=wvpX~i5Tt83`bOo@zf6|OGi3F?(e4ek>Aw^OBMgk!4r~ql2^725u z&ZvVj|DDCa|HtdAE6WJ{*MIH}(z~)mEXy6ccB#vgrm|3lgM{$m8t*ZYfSUD@2j%7DU3I~W@NLvH2b0P{-z#oNNaS(YApYz{17jnku zs)#VVUM&HZSC)I<{K^|Qzu8+@di8X8K0G@gox}ZetTO^z$UX2Hf8#x@nSHJ5xcpLw zj7Aqgpm3xxC@~=9S73BeV$Abd=Q<$&cxV}nmyt+zWUhj|vZ(*|Jx@G}N zkJr7lE>x#64Pa0JmYd6bl8k$)>(xpSh5I=%JD-w@@p&2nzzldWEbj&OevV(Cr>;`U zLU6Ve&~v=9xv;U?;`yh4{1-p`?d|*fzx|UBw?EL=M`@)9brG;Cx9B1vd!HYZ{Re|8 z-LcMZAOMC=0!)zb#wXu~@f{eq-q^Uof&UT=p&;gl%mO@PToX69Qcj2-x_McFfGGFsD0tMJR7?dP%>tuggAowW#Ft0)R{vF)<4ZOd4 zwQGQHhmXZ1l`qu-JuC3#{mgh*5vdH{Dt)<);3uh7_ ziz|ZQci}pbf`i~E393<*&&^lYe|ha{@9IAz-y%SQcko_sF(h+EN32%_VC!pF$(Sh= z)y!bd(01iq2_jj8B;Nss{YwP?=FK%2>*Tdp*Uar4hXc=~uTs}6cws3-sTj&X?Xd4- z2k=6B++Pt;1^`p|9#vkBfgnRMp+0MJh;*Z=^$sD=ZFD4e1k@UCDU99n@*AeB$Yx}qxXtIMK0w?wPythpu;^X2NS?s zXbCW|z&J8<6hI({ufcOM&4M%_sVhL@c?wdyuF!7R!5PkmUWjKaB^Qh8^7Ssv3_jqy zEx;eX(P}{fAbTe#0X%cz8+^b!F4PEn1ZN5(0uVD)3fP~qoGgKhwSBU@x*Uc@o*eBR zoPC1(mm^QPtEd6YHU{Fs5F;3!#TId~t37#E1mCg@evc`ihB?VAzrXhKGMD}J)nynf zWLhZcXS2%uq_Qu0LLH@zcmXA<}Z5%kb~)=4LSK+3TKpP>)umQPbn4JH;fEa&86D7<}^ z^C1~>34l%ljc_U|5>)q*1mE~t%o|;ipx5h?dBUA_Apn8E{|5e6;9q}vg>07$-q46|NzE>1!LP$bB3@f;*$p6g5fBdb^3O`F7Hbzpw$oVE2>23rQFTWT_L7 zZZ80ziaAJ3CF)p((hh)Ym~19q41>=ie48we)(w0w^Es8>nJbWJRe0(uITY{YP+)#X z5dvpi?#XqSQz6(#Q7SnItWpU4elekifOrh#nUO@)fQbj0Qj-6dn8|o?e2E7?^&@ud`@|J-o^`vQX9a%cr-C(PwuU3W~@JQEB9RHQZzS`Q7dLz(4?+2&nM<2 z5elJHK*isAlkfMi^N!>D$8US zqw90+37O@K+!0 zbl~UVOy?!j6<`&{xA6xOV5Jw5S)$GsbRwXSmVSzBIbeZV6qOg9^cDHM(7uHQ!4lzK z>13I&4Mjlg_`IsR-q+MMyO-y$=ZpZV7mx%B;tf6RhbJ&g8ZAz5-uG&=MqQx5n~n0|9kBT<7r>U<1Z42QI1D55Cc%iz2gcYG>J7f52Zu>e32Btd`= zWkUt+fVA2za^vOIug1f;e1CY6Hy*)_<9Y?~efBm?xA1qjyHwr}gJ61LrUm!6apEy4 zuh?-}8jH@$Gm<4wAnWQoI3pOYO@NvXvBB2?CRRc9XQ(t|=VFz$0EoFH2&JZ!=QeR_ zB4{x~0m}RB3X_f3uWx+s58ub;?c?<*ZQj#uc(yU=!Bi4pmrwJ_DKSxYxy)wsZ>TIP zO-TR#vA-!J5co?=tmt>l}aT~xxSnQr9m@SR^Ghge- zR4xQ%5Pms@4EA#bjDsB4ujjJf6gDBOX0R1UO1Cm{=7?)18zh5fK_Vy;Fefp*Ur9ek z+af``<#WT*6#xTO00#ekeAcX`Is88qRK6Rz0~ey$786Zv@mubBWLkhn%a+=zBS3VKa5gFu@OuEhA^|33kN^v& zlVE~3jsaiO{o_RN#|bjce%xt_V|A>yp0z>%(X1D9&F?W=5$q_fD<6C0dkpFylmsw= z7omgix7viZD6w(+^B-)MzjyBKHkYHj7)&Zq9|qdMt)rt8eq&|1GqynlIuy9HBteF< zOe+!)xaOcJ5K_OJO-40j}ND3stRDF&lf&|jY#6hV9nJHV)3-4(Dtlw9iZK(mX6oifW zUNENu1WgW)o?u?v@?G~FNi5fSG$u)^(Ttg$50xUJ?C>z~;e1);^>Y6JR8^J3_eDWG zKNHfg_Q?cM_6DO*-ulY5k^sJwHv?SSJBKcl@%GsMYafQA}WTCX22U18j&et5E9oG2%}kY+-f03Y&m+>$H2G ztSgiG1X8;Fsyv{wa4(Mq@G=5T;@j|>deoGDjbLEAc)Aa6ys}!|8%JKsw11YpCRA60-(=vGWg{^rih>sXd)5xHF+YF_bL+9DFrGE z)!st_LGBqbfn>Ids52;VClN#j0`E)kaV{j$+Y-RQvLqe+HvBHMwJL1iNBIZv;YbO3 z;b%GlrdmLEu~8y^45K6f#@^l@S%0ZT7QKu_r^nz$T{u{kP)e$z`k)HA<|&wpK@Tim zk}0ymbp!>6!vGOfS$#T1#;HvZY64>wnCbvybscU0EUyuQ$h<6?)4>Q^S`9o+-Vt1? zJU%T68w5eQ#*r05-^XZ!B^Va#RtcgdCaEGkBgdyv`oWLy9FaM~9S-BB=MTL$z3uz{ zxAdEP2LnE@ulC6BTofo=Fp1=AiBj!1Ni*}hCRm~6qzFuB^mAL9b-?kN*0HEaS%dn| z6M+;QCJ7nJPG+9DxdOJl*1*@F2h!uc);RDA{7l(i6(?&~yPwUIx9fS0ryqf&--g*F zz=HvR-!&Ev&qpN*6!rZwmNhEvCqzEJ8h2Ks!(b#~a^9Nxg-xZ)y;>++5*V z>zP!TK=RX{z@|#t3&YnH&=rxY_xU<^e6I=MW9)wYt((X5oX4H=JWZ11Z|ZzqsX!N0 z03%!oYDr*A*EIOEES>xi$xz6Y3n>lQaD|jXB!arHI$Z%K2{Tra^hC%hFHAfzmO4wHbi3X82+&<@PgxQ4;eQ+(`t8%R z2!J1vqrov*?)J#x@iAHH^~i8IBw-kqb951NDI39ztk=QE0mm{dVyqvt=Jc4|F`7g( z_+1p%22OSDGx&O8e$jKy^{mDs17-O5yKQ;+f^{vyS2OPJX|i7`W2r<;*xiJ#&x*!! z+yx6D^MpH$niYWLY2R!4eZS>z*pE(t1nV&CBzSo_G)S-j1yUqXvZYAC55=rP*dL*O zV|t95GHAcA#Kl*@Go1iAvFm9QDpwt@(g2&$2~Z1qSX~F6=JyLBi2+<+)}l6a@Uw&i zKEdzp*na;9n|Jq*2eYg#!}Z)Lt_%l;g!_{o9}NZoezzpSm;%HJ6i*aPsem220{CP3 zOv#T}if1{7uXj8}!kL6=yXLj!K;`F40x)rwwlw{M3b5M?LP-lpP^ulaO>0m&G=MK8 zUI4G(vm>9Z0(aN0cF8;e$Mu?5IKas`-t>KuxUPuNC?ca%j|^Etdc6*}1)l}POGMIM z0tZQ9K*KxI>lk)`>%$>L;XUj7nIo>1BvNWBly7xBNrOfJgK)>ZO1%ipaZ+~>}qo4n|FYhEt z-i)Vxyd<4s0m4(a6ai+5;V^>k4`3dVa8Y!^=sbch2}p7wzNdFW20E=&fOi2iyI#MR z?xE#pt+k%p%b9B-YKi(;=cGhsiU~#HOK%fO|!MJ5V9t=*)->3o=_+mzt5Csc3 z2|U?i@rCfhOcg}40wsI3L?|qRSb$piK|#$MzH1fEBDU|D*Iv6KKpO}^@~l(?0ia)j zZwK%6qynGcGdn!9uO;Y@0sa;eAc~@iP}YSzjLw=@2nFbSp5F%*xHZ@AS|AaS1c{V5 z55VUnV9kuhj@MPeo-0b zY6H}4!M5M);Acfe@3+2k1DkYy1@J7!kAEg<1ym>!=pod=MPk{F73%=+H!nrTK}SRJFHh8VfEG@C<34v&uK%F7*|4X0(U ze)YYUem^0V5m*TFB$Bw}e#Z+_)Q zU)>8j&GolqE#Y@x7x#r6?;sk<1WmA*`{5Saz`vI^|uRjS-?YAHGf$ zNGHKqF(nB~GB_FuSPcoZ=b5z^KY1bV>Pk>l!0W%~iAJd}#?OZ5|L~)G1iF7q-8+0Z zrv=2&wN1gOpR0*mn2YxK#F>hgHnMy;*0}csQ|45 z0t>A`CKH~ku-`{pQK|?;$N?Ct0Y42)HY4bz^G@h`3|U8%|55?wwt&uJXP)&x&Y3^T z#|WS&6_H`Yh=0b23mxJu23+=hM^q__GZM5sl4Jt#vy^f$eJD+ya#I536<&?^Jv4vW znOQE1k6oOrQpUpDg{8u~g_P@57Lw(J0)fUb(WOSD>_skIO^ zZ7yJBGa%PIKR0csjv#rORC^6i;KTXo7r(J_q3-#fHy;58XLCu$!v)g0?FZqv%-hVU z=HP5ddW)tPot%wGXR$33zeqR<^w7In$vNJmo{(odbZ^(erF=F$JI^POV8VWrf`h^; zzc;;HkW_Upon!&|^m`@vnMRJ9IDT|O?tOZ&vvdF8Q+2Nsw&uZ;xC=oz&w7;q+c3UW z|Cp7hIR+A7tbziZoJ9b>umK(X=prUwE2stElu1;9s>^gBv6FRhv4N?S|0X=kJ(Tau zdjeplse$ZlIxgF`&+B{TO@2B6Z3 zFw86n$njuA!oVY*(lsbLb-+Vo^igs06n=rrb0Xw$c%T}P4SoY?=zd=A@ggB$IQ#JV ztjIagIn2tliRxlmKmMGPAgKI2t6G4Aj@_Rz!_^cZ==r(k(G?MV!>9S)&g}KH;ms`q zxT(0Ih%n++AmrfSh#WmQK7Dw2_>;rINx6O+6@#E-?%!SP%|!qxSRek!u`zAw*$4;_ zdW~z61UlUtPg_?5UMRRmBB<_EU299d?ejX=f&`+I?fW)(wo;UxX?+igVEcVmBmX)n zjOR{0_@xzS3V=0Xre>dfeE0tL(crYa5lq2k6z`jG4$h9rT#=Ig!cy4xTmDo6pu7*X zGw@E;0GYL=u^!If;$TW5s0BUV3l*c?b ztx*64x*|;Zj`eN{y!MR-8+i1U*RCJT1K%jBe*f^VH;L=H-aPLs3GA2G00x=S1CNhS zI0-O@QOrq@BsnO6*ffsCK|PmNM8Ho<@Od`?VAP?U1j02Km*=Wzrq=_W=rm(WQF^+Z zO9h}72?_yz*|iqg>LRaEfO(!{9!hcW%!#xC{#`i#&Zm1~+~4~PPyoZjr=sb!%b)w7 z9}zc6lbOKN^Gim_{{jX0xBLoyx3G*$i{rC|q(G2hX;FfTG9`5EB+5zGr~ICh+bpBJ z_`naY2r*Isp8KV{c^m^&1YStIO)G%>%qyLcOR6V|sX9M%;!4`7woV2-73xt`o~lc> z$|6f8G04R3taWAeY1P%4?b@l9%f$%JSjoublIKS>J3MNJu2?<&r94;p9mdGUrOYpsBJ1FOx zj@13T-s>xiK=o1zGUNI5Dzu0x&HZTY2i_T=#j%h69h0Ttp^jE1G@4|R{Y(b$N$f>BW zNZ|V+pF4{ICjkb6uSmcTpX4P87|n?1YHENvxU?*sB0>p}V|6$HfF5smq5>+X+RfY~ zf!@WFd_T+U?T^7n>z-w~*sS#R)T*yjfsb>fkxe53f{*nlQ8c%O^C$@rr?Hv%6hX+` zQZGLO@*t|Av7pF}-;`APngF0DgG1uc4p|gJ0PqBGP?19$x_y+$d|W|H7RR7kKFKBE zF%VW!HishOU0+j!j0y>61ylV;eC72}%q;bI(MwyQ;=Xz=98Qr4yIm3uEQ!BAs_dz; zPEu9?Li2$Ic$ALJ8xl`}3nk9QdG%;GBv}$a`uL+yekW)LXaOV|MRNh4rHmXsJSneT zKQI*_n6g2fmw?`p<7=~iJdR=#wndj8LJ})4bwC9ot_Bzft9JVR<1|Af z0KN*H1Q;l5iUb5e4m^*OfY(#n3U(n90R)~~gaSDS89tYa1IAU z5_ZFxH%JmAx&H*?I*{O(Y8Uh3F@p$5X+;8z#RWo^0DMIP1%5ee-$NoKTK6FdN-tIS zBnebtCoAxE6{zl2UB{G_7?@NS`HbLuavvm%-QiaK#v;|emjDsYCHNR8=fm4D8QmW) z`ZHrUJd2I)=Wy&F4#=tl8-=0+&2mD=IHq*!*IAnX0hDqZe*Qj?;8v})$!ap`!>R)^ zxPN*+6d=lXj*tX?Kpd%i7iS4+1uZg4&<@%piXl5ECPB;RM8FZWp}XM|ZMcUd8)*gS z_s(IBv?P!-`d>T z{VzM8AKfo~0U}D9^NB`L`TOATWbC=4eym>YmLzB*fE_tVnCE#Lp68b&Fj#LjO-TfZ z?(zcZ0I(fUpiWPy5QFt$TjUWgv`GPfK~Uw@UJ&b$1R}w#`pr*7jcYt$;8owGu4mFgiO%@V^7#zq8rj?WfLs7UVLqAA*1T zqusIR<=2Mi5p<(Vd|#s%9>8h#7z79;_aR8zyOgrG8Dq=n!9`K11x8S7zi^=iUG9?$ zko;ELCluBvY07g+k`&10k`%68SLBuD4oNdn)D(#3f(Ph{%@@ z$Q8&c_R8QHgS=x@iQF8xE(Yng@7IkS_Di)mQ z0_^}L*!Rs7&1eY^VZ00D7D(+alv!>G=(CU@w+0z#2}xX4spV2Gmk1V@P389>|1RW% zb->@s78u;XH8^9Z6&b#h^1;B)3Ms+Df5m>vgI#!z1kkUuBr4x8M_!E!7%7lW4F^W9 z51tPmuuN2jcl936MAn zd;z)uAHl*I-&Z8TxyWMyKC~LnMPYh$>Age(pG)xJ9?nc2FNq})a&ttuhc;+#?$1D$ z5%>}iA~vL;bVv+j1n+zp-1o)fdjS4__}-uV@IT)F?DI{%o-L@wSl2fYfP4Oo;5S-; z9+T{#))F+5@~#xcScAiV9mc-~`TkXXxo!`*K5Tp7i(cuCowl?C>GO0!%Dpc=)DKH} z7X{A@$;>38Og{I(0}!M#f7z1i{b|8+({nQ__m!Qj+{%;Rw|!d=0R7#a`-49_esuB& zaQVsIo!w)PiSs3ykalGOYOma~Al+hS@%*_IK*c0Gz-UqgF8f06&tTpHiT=~{BKae@ zUIwslsWr+TaHN{d`2bX!i-RX1?>OUm8GxE)1)s42B+0l1;mEeo}WA)hr;D7LgA8oz!e}B|} z=l<^g@4~&kAZSH{N2k&rJg!U_dF~iQO4FpQ6%M5^O7?4A;zfvyda4Q(bF#F!v%Sn!XyCjmT4 zV2uZBaOOU3*#ie$-e=M@@tPBk2(U3Y0o-L$DF zDE(BD9F>4khWnVd3fF3W67VtHd0*H+9FSF~OTti)ATO%q1S3sQathCJi7Z@BwDr(T zS)Tt-5|i)4!G8e?`fGtlzagLAI(bA$x9gI#?#Sbu1dH&!qVh#XMMsN| zLO#qd*E7qHp|({&6@oN*UghU|00dJj#Owzq`4?T^Ja3c~5lOZ<=sO4R9*<6b6pi8s zgTZ;$?Jkh>!3AH3a{#1cKnEXc=Ad!IZ?7fDnrAsD!{|cG2lE5c0`>UXqoX1B{3i+b zab7|tSS1w+9y^@!*XQ7`-@^fn*^u{ezBL#O-|lw9jpO6ttzIuAC#OTwSqdj^sdupP zTY^tD4&Y<75)7pnL91RZn&RH>!4^#Y9hk4LbP)W$?0C{$nXg7@Nj{JY!PmpL$or(7 zufl!Y7cY$joDq`i3QB(S5e2myoc?jMldeX_B%7;fx2-Zz#OgKu76>v1xGinI{?IF7~nQW65l zm6-ztPzAD#lK_OD7uNA)p``^3@pyyN^X>b4hqvMPJs3L&ho?L1FE9KAz~?(50WLeR z^Qj|MiFuq53jE9Ld=>7KZm@p{O5oHh0eY1wWPlzuyG-|7Qs4sNsT@F>^9+5rAj2pj zPUexs0h1sUy>N4QHiB{V`|)x&Tv_QY;&}qsNBb0o+Pu5`#?5Q1i-BKy26coAC`x3G z=U8@eaew#V-t}v%hw%G+v%fRCwzgVy7DF-^9Fy*X2cts7{>9dGSR{#}Ag5lY4{6X9e(})bCh=gHC zdflLU__tIIay+*>KmG@vK1xnW7iakELJe>}csL-t_YcUy(U1&B$#co|sS`j&k|bm> z7{DN8^=cQ$5ImOye-UEm(<8ETUySD+&x`cRzjppzHBm2%rLq z5F7_2XnUl$96s+_JeAn{?1+#3y)PE16(Gb+YCt;A6&wT2WpjD8t z?UR$!A>0W`G~!Qq=G<$uA@KuEMN%VFAqSlI4hQ`Cy`4RB=iYvq&lfeGI{{QANlpfXhzzQ7lU*2VU=w=>1G2u_ecmZf zjN2dW@WFrgcb<1TbHx{i0Fz?>f#@il|LSkB7Y7Fd00000K>n{~U;_;J0BDk7`%M4<002ovPDHLk FV1iet#F792 literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/ItemPortablesPackage.png b/www/img/stationpedia/ItemPortablesPackage.png new file mode 100644 index 0000000000000000000000000000000000000000..efff07e3438dac5ea151e6fc9dcd78338388a9f3 GIT binary patch literal 11731 zcmV;^EiBTBP)f zYiuJ~cHUvVR8&zEDN2;sWUHIql(g#AJbHHBvsmoLc8}K>+3_Pre%bzI1V{|T;{XZZ z{4`=9@DCdSx*ad_uzw^*;3US{&f3#GyY@Ki$9QLUcgDM`8I2^W*{uxY%kCI49v-yOhd#iZwt$XkHo%03Y6AqEH+L`G%Brv402z_Q*77W7xz!S0@ z_I1O0@3YU3@DLmg(thEi0#vJ2+BZz=yR0CBs;VFe0&Nct51>>mUG%l|4fdipa8{%e zahSWAhIx#dEF)PGG#U*WLNHYlm2_1o7}ttEikehm~wX^~H$)ERD!$n7$+AUlg1bfPhp0C;2vr2CNf`9>0~~}UY4iqp7aS8GRjaUXR{#Q*v&w#J zf6Wb&>9!Tv)q(bP08x~HN2|*}yLb_tn*id|aT=pYDk1)oBa=)fGuX~0lc}FdB~w%Y zZ@=@+|5W&>_!aDK+5_#Zw_73xn|K?xK*)P&Ru5Daxs?kS!B7Pd!AwtGP0>CfpP;r| zxzGc5K{}a8q=8{RjifIl=~MvD0WaVA+&_;+C#SO;*)MNqH>n70qU|iVLCE$B!3#?S z5fnl7!VWzY0bIXvowiZT^l0?*W;@HWQ;C`QbJ%?)c_r~m>Pq4UaN<;#DK|57nO`O? z1`)y6>>unBfAV)a{}z@+xJVJ4T>#A$W~QtRkH%t9)I<2{O*ghso8)3#)CH=;HxZoPyF7S z@#Gx=6@ueE5djenfix;Y94o3l1}sRS@H(ybtvB^Z{T7tHG~e zo5^luAD|^Xw6mSGCzXC$B}_-(k?~Xnc%P+b=XaNV3qTBt5Q#+~F*!+}6Nxw!3YU)b zD3X2~`uFrfU=BqvXNzlnbMr5ebj>-yDFhW;fjxO4`A`8#iee>*gDlJVED!y{dI}&C z5+R1ZPGT}P396=otjJWkqR7){0x`&2hcz7sH&3x6+b%AOTQeNNxvY9;!JxvcM38dPxr!Tu;AjyGoEMM>uIJn8b$CUlT)#A z5QMqSN4b_IXf-5tRDy$=45n#Wj*2Q^o2A13mVpW(6`=uj7?l{jZ%nXa0jgC6hKZg6 zAjB`sFThTDXQ&%F1v2r8@Uko)ekzts|M+Aoov}_No_S%LV%FcZU?dX#{Hs59cPjfR zmwDqa-n}b#bE3A#7qJVz2urdXml08^{YuLfXjkNNJ@rz<~i)n z5%NjwN2Z~i&(Yse1OxpZ5d!Of+Fa%a?&HVq&Y=+Qz5l({zs7fmC$3Mj-q9yel{y3+ zB1p}|VY@gy5p)y)AwN1E9?D1ig>s|-$!8?~PL#x$^m8*2F$GP(b;1@w^y<7T%gzd; zVYO_)*EAvmx<|9FnA?TY-y(sBEz)s+HsM}D1f|fi_rnyyF#(`|LM$4A@Yom_W&;n- z(orV1@=+Z<@a&gs=sNlxLtBn#LDB1Nuf=<*R4OogZ8j61iZ5qI4?cr$?_eyFp9SKi+UZG9F^tfSVYj!M23Jo?r~TXT0jSYa_0MY;+Oyk`6O(}@?byM z0~ta*#`3l6*Oq~1x&rmx5>z)=de2579X@^+J1>FY5W%2eQ{8V0V4@4AiPa#J{uO|` z85F^Ne4XtyUJ_8?qrr~rC1w&}47d`w1VG9@$$Wyzi70LN>%$j7GMRi8o8@FOHJ3`J zGTFWb75qNE2 z0PtH4npjRuNWsFc^lR9sB2ct8kwgS6*L%f5ihw)j`5sdgf}+2R;n1Zudv$^Odl1(! ztt-nUt|rnmQ}Lfk#N$7NamS>l+&1Qh>0VDW+ux7Q+yuFyf>tdYBLYq!q{@jOWp#ch=+aTEk6{+0Z;YXg?c!C1Ce=z)<#S%#yuK27iQaM1MWMv;R9757`Dw zPkeA-k%^W;SKvj-`o7nsb?btN2rAVI6nCm{7I0qAR}=+^DC}022VwykEc2wqFK4c$ zp2z3psa6R^fsa^ZIz`YCD86Caffs~y66T&|R|e?E#-ygg%XUBaOn%+@n@xN_h(@9) z5CQVV{;csNa5nk2=U1whq7pMRP)8B4jZ?3ko=qmw>FcvUgC(9Ec<#)%3+-&~O8`v_ zTLea>07i2^X03BZvLZU4erP`~Cnv*106WmM1G<*3f*^)k{ay%%P%u~xPAdYgT&dCu z(DHosh-SVm1V#6?UJzpjiGKy-pIu8OZlK9b4f?_@B426}+aFva@Y;Y+7>D~b%=!T^ zdIe0U7`b4_d0I6Og?igUNF{jLFvRV${BQGR`JL15=PV)!EG{mBh#sxftx}(eML@>P zCt-W+_1Pp;_x9;?Fu;1(ATFAjO(iq4S5vQsqtcf~N2Qb?2vo+V&kZ$9Z^?15pqbY9 zjUySf{Sqi15qS0LvQQ*vG_~li1f1AoN6mYvSeMIIw?RFsgLY)SXHGa_P_Xt`R}DB) z-B~Pp1X7=xht>C29%A=DV*5swi)!xiOppDwzh9}=p;#>Xx^H$YG)4uW>pE=@t8;%bnEBG$HU9wXmFBcS)oNJ_(Y@o z3$tN;pF!^nU@%xF_4-~1xmfCK|EN>zV8k(CgJaDBT*s}bSlU530KJ$41H-JAkkC4q zMq6fq=KcujJj;M?G@yoMvwEn4q8Y$@_~RVaN1RN85)j~r@7~Se;{?X;cKKl4JwDL) zg#|?(M(|D!YI5J#&Dq%>!OSPnR4e<_Gc&C!;6WytOpsVkr4q{`Cl18hPXl&D0yZ{F z`$~DM?|CjeI01xsA{4D!gkJT55Kl6_B3pzLh&&6CQ7Z?W6+nu_ffvIq@`F<;NHq0# zYia3K(v~z~ck@y1t<&C#Upok-ucsk05uqX=VyNy{K@zQFlXf3PfEF;0kF(M7@IRVO zBz_W!CyJ%Si{29INvL62fDQ6}rTl~nfJ9dd@L=>hieM^D`?jSRwF)J^wZ3PL!L;{B zlBM4KAR*n^w!S|aX^}5Q;{Xx2=tR#3bH(a+vX63qi19yB2p{>e0E*^*_OS}|BLa?I z;J%gViiRSw?;5Up&Yzf!d?qn@dm=e2V zh)zatU_;4=OAKLblC~O&YWFkQSX(av%RPnobnMt~!6xx4mUp#T+UbR{o!1kmko4)K zH6P3S8IWF>%ls1Q{O>=0;}5WTe40g~ksz?p-457vDh*?!V;w^W{Se3f3yg`$i70R! zcb0=eW55&4M!RCLBcu32cL_lEBy^+EfO1)e?d>Ym>l(=NK9ru8TOtUJ@W8Xg*Hx$~ zbQE zW7o5}96ndA*M_eP8{q^PK`|eoC7c8{B!xgX^o|kW0wd*0l~w?>flDm_O9Vk+#IcqL zYyniOGR7g~^Lv!|HrgH`g+{?d0qq>@x8I@V5#nu(qL&N7F^DGTX#{68JxO=MhX4qo zc0vcrFn@ClRn>2(uisqGK40s_XFcN18FWQ{97fI)Rs}w}NB*2_oQ$ zUV;b&0;}&Lm8rww>qElG&MQeW7KaP@aN6-6V zSXXciGd43lH9H-jFdjYL%<8&!V4vNJK=&JFa1372h$vw4icqW7+yc0oOhRx(=osQ? z5YIVs2gkl#sqVwXcnBsYBCQ4d3gE02fgFnokWy^TJSKokhihBVvI96l0G)3*DDu=2oRxqLjg4cL8y%x|ctiv+hhvwm8@Ec7ErN>> z05nBF!s+qqUJ3TM-lxRZwm0ZI5iP4)Q(9w2FzZ#_prX*Q9YNw;~?5Cgn&=!F|0iXv`0oWp7 zr>AE?;Q7vh7e#`D#&Waj(T>?xOO;#|JfGlXg&D4(F~G2#}4H8esHhO;6!F@=1M$s<9d4OsIKqq z>^{p`B-;__e#53E2qJ*s2oLN`JWeyAM-Wr|1&o+2=<419#y(~a4-?VInMBYPt^`2h zcekOI{{U(quY#@|U>SESJSbo`V@cPI2GkTR^Ue9vSeV9MrQRAldwm9`Cq`j55rt7Q z(fL_T0Rtl-@W79TJr`e!=W+L(5p|M?QEW0BTu@| z_I(K`0+tiUs2}!-U6u(fqY&nt6^)31Lyyg*uMO|SO#+oN62Fba7cAo2H)3rlh=<`> z7V7E|>>Q}ApEZww#>dBDJQAWYn@&KGH9LPA1whUljHMiJotDSo6XVFf1`2=~-d(f> zKtV(xavV`-r7eQ~1wg=tj+MBRfj009UI7pgADM`Z54;K(XfZ1KwO%P&#BU?<^@C%U z8stUHb_27$4%I`Mz6*&QmT-nf9VAaFec$-jf+U#1s8vaT8Wkp{Z1(+H1+ zXhk>+uxi60`ny)Ifl^opxv+xY*uy(+SYh&%bdKR^`LAgxk_P#Wq2CUorw5P(J0@l` z5WBeqlQ*A3Kc50!oB|fhdP7%0J9u`?VtB5BXN6V>&;de0k-M+ z3=O_v;0-mJ!5p^)k0qmITovS)!oAaRP5}SeQP(v#G7(*n#zNAOs+V_mo;`A|$Cx+{ zyRC4{CBcy_>l0bx87E=$(N?R!bZg=CDg8*O&_->JDZhqzVE%skKePtM-#3a$R3Sm-#At=hJ{oz@lW6m6)n5+{^}e3&SOKN z5E!P>PfVZyei6JSu3?pwN@b6>#115B)Ys+-@wM#@j4YVSF2;eY=n>+1%W82x5_|Y(Mqhp}%m7!ti?F;c7kMWe$z(^4I zk@oo-0XM-+>%V0Sy)D6Al6zGEti-^OYSWz8aLf;f#}=^)h6x=dY6m3iyIaE9>a_=? z5`-lQmard>Pj($^9M!P|S3%h=pa6;;#}V=g@rrKMYC^ooyDJePp2if~Sr^hzssu`D z3zVH=U*olE5vumw@MIq|`pbUSG0y0F_a|d%Y4KINPbvY+cHaXRl0yBi{UJsH^_FnH z3^48wy!ZW8h)>5*jn=v%=PuC-daqh3;AL7tGsr1YgGC>=%DjU9Ue~R%FE*tbeG|4Y&WwyW5!UTa@^d5FA0`4^=2sE3Irl350klP9k;Y8YWDnXlo0g zACR#sp2eQq>;8;Jr|RGo1AFQ-@F(2UOV2NTzVNj4`M`+LT>wfC0r2g8J;uoKV(|05 zHniCk06}_EqQn!(cyYlK##7>PAC>(YD5~Zv^NML*k~E2gPo{9JXc0d^5F*vxye|>R zo9|fn6QAulwto@8sf3_uT1y0p>A0`CoH*k4(;gK78htKoi$L1j?>V-x)695*hlpLu zo3M$OrYzEfqUigA`avl3GSsqfgF-}L_BV%!1}iP_;^-N^Y!iMu_b0^jm@I@FFR%i9 zbRh3^ozDe(2*88)q2ZB0ptETa5mcX4Ad`$>MCm)RSpzCEW;-fZL_$ResdmPPr)D9H z*~N#)LBI=UIcuK{&*uW(dkgryL5GEeQVZ1cwQ{=>kowq(B7=y9;UP5tQk#%~Cxe@w zZ@*w>Y1BBXZLFJ_utSB%80o!*_DD5+ozx6FvSI z@qTeu@|zH1DNtkijv_b-Lw^o72swZGIbK2lBp*kS2ofFV5^~B#>9)H3P+_1(a5^+;ARZZTnb{)+r{sd5G z146mI8Gj%`SXrr3;z?LL5Kpz%upxveLESHd<`F+wC1olT~| zn4RuAh!aPAeMCX>%YG&ZSi8;3dd+`lg{z&@0$$+7|;D#-1qW**A3JEU%2yi&*P0F$#BFyxvm+X?A|##X*SvY%Ffo!ySBls&yGmx!TtpZNCiVtt`ZlctSpbB!%D{u<^I=yh}S`j}+%r z-KPRg>Pe3$33Hj?71hc6G1pSMi zf{Nfs1GSXvO9a|M87c>s2iXERFU%$rv^7+<>o`t6tovFREvt+LOk*u`ItGu0wG_yV z$3Skdpwz0MY8sLdrtew&J-59D47Ta3(-4eAT=P3w{@QvLvKa5Z|GxWs4wt_3x!X{# zRAFno1l6iS+gxrNZY^fIn4sx;VgkJDIhtC8(qS2tBTE3sq|`8>vR{YlfkHzRD=`1r zS;shc!g)RatWb2&R2|l5rY!-4M!Jig6GsGJA7F9A=wBPyUG_6i5Q8Ah1ffzqx#Da- z-hzj3{tbNYGq)jqE!A^9B7pUEcjm`XJTekZK*&#BO~9Lf{WcVzmgzgvuC7`(;SzyQ zNHNRT;mt zny=M)tMYGzq|i`ypL>$W*zPHU`T3i)Wmy5se8q}tl~#acYK97+6Nm^F7tiL&Lkxz^9>bmFc;YiJH%(X)B1}^Ubq{-+j>{m zyW10|_!IzdRUA?QvM7R~Q~(=91kq?1?m7fOFi%9#6aXpzON$FodbUHK6A7z47n>p| zd|aYcfQW#gU-BiNNm@2=O#h*C3He59RzMQ8naBK2)HzQ>GE0jL`&;MkP9?v|D<*^{AluS(khE z?3qgdz;^c>kK<*vBjxwd3hvo28Ugl92Mq+=Utr8u#euEId1Bg-oNW^?35;vJ$(YC1 zbe4I6w}`h#F%7riS@&{X5lJLqF%*UCpI(A!Jl=fkO`z@xr6^j*-&Q_Y1MNtLC;5VP zer%OPYy8sE0#vJ2h)1G$2bKWjiu_S_Gv`kL&f_Uoy{$QHseXJT8mStaqAwy9V zSYO|Swe>74%x8Lz7kTt`(I($2^QJi%k0(gpn1}GhJr7 z4n>fq&z(d-i6)i+5gv!cLWv zUwT%i0&rlP2tcWyQUC;nVgVwP3D*GDRJ$(V_}u@%>`Y?G{WaGBhCS2em=HMeJrRL4 zBESouN@MAZIyTI^chzvuV*))s*z0#Vn}sO4+w))l`kRzcrDm0S+p=1~ijcmRgu6fd zGUOg_!&`5C&l<;xFne{@$zWX&N1sAK_O&0*>#+*jfjD|9D=1?X_DZ)p7|Uu{iA$U-bhNz}K+~{2LU(Z=LUzesW-wPY|E7eBAc)n>RD9ahXgS z-uw2qTIBZtR)8d^M`y4A8%kXU6Bm*sVg+si7`+#iP1F2StOl>3c$UHJF@s@GeUXL< z5cYcJrGxu?tN-v_;29o1y|@V1t|p*TS6aUnJ}zOl=V*UnJ`G!2Iatd+hJ2~iVhT-~ zwzroSVextbKyS`BHJH6J4TjI_>{u{L&q@%-KT8C@kwpRALje#u&kgf>x3&wzTz;VV z_PgJ8$>GUI1;{?mL$Oe5zeGmn=Pe6fThCeKdqBv){oJDa9`c0^(()s`uRV2j3|W?e z=Xt<#?)$J<1sO8ic~3VcqYg1|gqBc73bkn3+Tz!chr+`XAq=r#Ax>t~QsmskJt$*P>Q_o5WxQ*Sh_V2D<7;w0sX#E zw0yltS`Pz60ABPUA6D118yK`-uWP>c)wcku#^!o=@aNh)=~Z zyHk*uioo_nyUdq&_h9A2O*)1^7_l<=?iW7~x1V1+w*Knl-2dIq7rye&JMVr4AM-rN zw|z@EDEiKS?8?!r=O3)UGgv}>K*SMMKI3%VmtEH{3(Ei$HZex8jcfVY%d?lYR zWdY{}=6pV5U-X-Q^%iZ#=8Y$l zGw?EcyiNAfV#fMC6s2w9Y3T{ZpZ(Q0zVT;Z+2@I{D}b{S*kztp0*AwCM;ffGwaF*o z&U88~Pdwumfo68E2xh}1O%~h#zzgDUqlE;|ddbu)wX#U=?pJAwoMy>l< zT$rbA;z|l)(FjHqViQqNboYH#Yn4(ixAm8~$6Nmu<4xtj%J@js5{4KOL9VrZo)7Y^ zN+5}t`G>Vu){{!$@_Y~Z1ZNU}O77Bg03R!U8SUdH#=jme1s4aBfj{@tKSleC3k$u5 zZ{!|5$*!)g{}vLT!{?myM^#l%td!2omzCb0@5Pw}U^cS|Gx=02BKcp&=0`DJf*(MT z4D6Tq+@q~~nE6?(2-%Ycb+SpDd;%(l9-i+7H;{vdBd1+)6D{C3u>D<(#31(a2|{gs z^U>F`8=L=y5RcEwkgIk0POH>qn8Zs;R20aHzjU_(8?mdiKHlAAayBHu2=0vxIj; zrwZUiKc4T!Km#du?VGxxio!Jrp_c1aUuMJ~=g9afUgY5Z1;pwxipShauzXCW>DwVA` z1^EO+5dZ-Zfh@~_<cf3Ui?{*b(k zM54YHIc)`~?(Jh7K<;twOoten00>IYN)VZdfH>L~0SkS5bXHN-U&KTI0ruM>VB8)| z^tJlII(+`cmzr-3_bLIuyLPXy=!*MU*(VCkW;b&WNo;LyzlGj@Kz@rvk$j^8el~Ed z0yG)X>KgE@0P<0tKF@^1v@I42@NB0HD<7`IATU$`&2$aLqSAwPpmQe)D z=ds_`zH60IHedV>As#b6i?6aheR_Zupj0eD`Cxx&L;$urB26+^NNPM8bxu>ZBPHcZ%pxJ&N#M?Mm0T9S_*(CtO zo01+F4c+%m@lf7OAht0w#((2XAxICfd&n%-;|3a%9JAnp6$}D6x-Fyv1cpd4V>-U>$8`+J6+WzZ=c=Y&(H#2EakJN#kiBc6wITjn}aK1B_U=fk^y=^(=|a2g&J~ERsKz^K>GgWIl-^ zhJt1PGT}l6Ku|rXLS!rg!I2=;kLteWVih31eGlWcl@HcpOScwUzwPhu7xN$I|1O(* z@(n^fSpGg#cq@QhtHIi%$CUWXiVGKjQd3~x+y_NyW`@~ohU|LE)hhoEn+a8se?`R8 z6pMx2ldbJqNj%CBNZ#GQdd)D=~O_^rfLT18Y zdZSxg+ZcJk?_c!w_QZt?fZ*`(5HwAreU@c?%@swFG`~asz4gw!kpH;!6}9qq35h{#Nyry3CgUjSKLEtrxO4&_aEic-#mpjY_e1+| zP&+ucJ#BwnfINvp@uIJ1ptzI*Ah1Qia%}5e`g)qS+r@3#j)lfRQ?!A7lfiG9y3w|y pb0Gfz6$b|b00000K>n{~U<2K%B2)1^=kNdk002ovPDHLkV1m;i83F(R literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/ItemResidentialPackage.png b/www/img/stationpedia/ItemResidentialPackage.png new file mode 100644 index 0000000000000000000000000000000000000000..7aa9d73e458bcfeb0c82162db2b2e73a2172cb5f GIT binary patch literal 11868 zcmV-iE~C+jP)yhR+qJ%1O{T*{$&J648-dI zG2r|N0wV?j|L`HmjN?N->>sfaIEis_?Dfs;oxQ=G?fcj}-{$tTqm@JrXSCvy%MryE z#THxL>}KAoW|QoeM6xC7<7_{|tEz5RRae#Xyzdi$?{SEn-A-LeLJC6;N9i-mvS6Af z0G^QLu-`Q8_dfgl7!OiVqW$6rMNkxl_D#$FE-Q$j>pBR6K-<0jJt&vT7kw>5gT3et zoEGU+5@v5?U=E|Msz{a$tyYT$5drO6ElMhB{q_yr=m?-*tAnO#9r6j9_+VKUG@DHb z1Oikrv56R+N8+-ByXXy^1XD2?QY0p1s9G}3{PP6M*sUW3hG9Atz(H~;+0J6wnur#8<2z^J$zbN!p00L40ddYV{M9`==pj0Yd*j@+W(g{HH>?oBGK^AzB zv9uB}?euF|CP)Gc5_+|IU;;ZPgDig|sZWDAZ61c8u`?^p{=v%7!NM+d?e z5+o;+prSpg`zVY_g|5NdU(&w?e;S6-L-f4*#9O4}~0wM3AT|H1$HCJK*KppZursSmH`hd+y)haL$s6S4hY#^ zA$VbnAc`VTF6_`}B7kexuhBM!nI4N>-fU-Cb}}`Ud>*^6Oh1!)CH+k5I&k7-pD8!8 zv)P{~Ed~+67o8uR5`Xk}j{hwpi*S)5IK2ScD@;w=86JzrAvGDL{l=N#f`>32ke>sdIKX}9ElhzQs~6v{gaXw4B_$$1HY z5T8ogl-|pr?-j zQ&tOf>}pgYa1JXiliI81A2v^V=J&nFQo2kAj>hV1W8a;6`$2J zzp#MMB^4Z8|2IAwGV5K4` zIR7j$PymGZ`MG)6u56#_Moxfiaw4*%s{0>{PiKBKkfYSpe+JIz5|E&PQTgh(`QcV{GOUhfmtfM=8qbE1#s=zX)1urf@nyd zj_}O$*qtThlc+_nK&6nUzoQ67`aL29*8jBG>~-A7kKCC>A>4iM-IcH4yZs~ACt2Uq zC(yA1NMct6>8T`aouLSh6#yYWHXb>Xj}8m%Km(G`Nc`;>iLm^SrlMjR+J4&$M+C8F z=UiEKT9_@nWdpvZ5fRWmS`E$GDwh8o3Ec0Hj{9>6_XY83d|8#0+#?t*(aG#keGir^HJWNzisMs^y{9J4+D|5Fz-igG2;)raQCc)o=dFI~(PS%%>9xsAX+d)SFj^~rIPq4jHrLAEF&f*RuC8nm&LnvkX9j{M8mry|gdE|Ek8EH`+?QHp>&{<+$GB}#Q|=mb%W|)0Sl#c(rfz`R(!o%Qhlqe9 z2-)9SvCq&`2~5T#2FCN~(L3w$c%$Ve$Z8p$9dw_~-7>JXZ7{VOjTy3+g!DsvEA}ge z?b>f(JYWMXJ@H<{CezaF6~vI#zC+IjoAw0}5mc2bl(rQ(4LGmoYnlc`6i%zEBe8%i zmU&X*m$FyWFW~d^iB<{4fREZ__KM(Gp!m+(4!j_wldyJeyE379XiR!CvgGvh74-|f zzwuc9hp7Stv1km(3Q#BwXN^aJbI5l*zpB`ZN=;2c14Y2LPP}$zW;&J0T$}j`Eb-*P zv!l3RhsdD>(8gJdz^oR*Z12aaAD@w|h|bsCcOI9f6A>bSZD`v8U8`vhEdYW@NCv=a za8eO)m8wE3K*#g-1Dg4c5VWSR^+?^CLgHV+_$OD>sq1JmlOw+GHj%g5#103S2)s7n z6Xt%6hSk^urdb86SB#u=>^ws$K(Wy!msEn6O;g<3QU6t;s!|d7A>YAiL=ae5SO5_{ zT5H&)J{6CGikVNs@z`rK)1d6u=(7|!v_WE0*_rfocIMgitC5)e>0nS!3xW_LKUzLF z)Uv!K$Gw7K+21!0R4{5~&^#jW>XmanNDxdfxGMoC4%kuq9;)``vdR|d2MsU|?DxzO zCzJ$xj}6^~gMItn9Ef7f^<0b3!Ro{12iX0OYY&&-RJfSo8qYBU_SgM>RcSz}RPuG- zY&aCA0%$gywB1wdAaEQg^*Y2tAvnPI(eVgq2M2TlA8>7m5dSmJKX>z=KfieMr^m-5 zOJYz;uq-Qd2nC;L^?zZt?C&$^eE|%nsiW2J9wQf9o!uXs)H)b346GDx58#g7ijJin zv^{8+@?c_EN*NCH23TfSW`Xwp2)EIv+P>=Y_{YrT8mn845%CW$jVn{LRHzNn2^MI~$KSzk1R;@oNWx%(V(jJF`4fENU}8AA0(vrww>>f1wo#$g+|+Gs_*%W+r_`kJ=**| zjQ@c`_`r_^P_*|`!zwV02snCyH9ONa14V#;W;^i-`S=&kUc35h^V!U&@zo7c9F!Ao zF#WfC2mw#YYgz6Uc*ZRdt%;i*zXA+{7jGKCVdnOt;ZcNXc6T6duiygq_{vAyZHx2l zP!L>?hNmjVMCr%_lMJWX&WAt<27zs_!+={LmdD~!iPR@BCX&&(SoyI0+vp}Ax<8=z zzhTbaeHoROyHyG{ytZ5?|M$t~J0oXaUPIAYf@HZL8H4gBVMJI39;kW&y+K9Pw;!t7cupT}p#er@`?urW@6F%E@o5#l=+ z8chNxg&{OOM9 z=>x-@-BxxXlS$#FHao#F{sa;5#2`Tg0s&XB7_FAop4r0t@^~QA1Xd113q??WT7+s< zgVJ^#N;~_Q(M`M$6aQK?SdKwD7+jZy-Q5Q4RB8|zAIEP9_zji@kL!`F4`PN#uipeI znSt2#1(0Hsz@s=A;PD*n(BVCC!28EAuHYCpJauJq=1OwHeDruD*KD$TK-Y1??0>@y zeh;r`OcXGAMX1;7ZUH}@^47JVoDDm~Jb^1<3%TnrEXUrI8z1}pb zC=6`Jkoevb9~4@k?(RV5#oLhi_-&A%ou|Yfzn^mv009+2Bob!3c0l0I5{LkL?SK`7 zp}qpZIs}@gPoM~XmQ1Kts-4A%2rfzh1iGoi!EOb#avt_Km%%^*XuD5o_B)Vx4n(0V zf&*Qrna;PX0Mo7{JkNq8@i2Y$8m$0MfFKUo&$$VJAT~Z8&c-KV&=r9{0iXv`0XQOH zuUwe|f#;78yeJYJw3Y&v6~_)#cXz=;aXdS91*?Mur$Jy)VD%1I-GFvz+gs2mtU~Lf z4HUss0ONoLhZDF!i$-{ifl5OMmJfj0*uiSh1jZ6UV32$?MiPv`!ek->>C^<=xSE9E z7)yg=(T`aX_(;sPU*h^4?#u}mFW3&ocH}_^8hm0`1Q-%bCpdwPOr<8X*RMUhc+k+c zw|AcAZIYb`^uOV@pojpZF&@~dWRhmWfFP#$GZ=AbS4(Ag52J>e!^1=@dMXk0h2?(K zcDA5icnI|mSD>lwVHtNTToN#wv7|T67SuH?^X>U^I6`B$+USg(xi$q?CW0`Nib0S} z?ES2vfr$|ic;JJP&U>zN!K^2{?29qI_kU`*&)2e_Ba!j&LL?FjH_fI}e!9KU9Wh`7 zJrzYj5wM&XrhYgec338`ghH5wu3b_QaOknw%+*n!`j7y$3KGAC#20PiyEkHQNW#PL zEDH_&0Jit^&d-KNK;z@%Fdhxjn8~C-Vy)vpjRJ7a>xjS>fK&FFp0IIF0-zuw!22f~ zt9C^&ya4R;oDv(4HzAjQGI9}^XfcLi0PJp4^0i9g$Q={n8|dp*wGJAN7kLJvLB8|5 z+B6~gOq%vd8w&wE$rp#-hx1)2Zm$8pJ^yU6xVZ4D(_emX z$G=Q3fMi`eng<3nn@t*#aEMlf(*UbB?4!RM4J5R<25NB`zp;x+*0RImLE=T=7@n5@ zx}ig}MSf%GwXH zOvL6x;gEcwH!IuQPapNpXRH7Ou-l11z!jXXcgy7fT}9rUKRNl8BB)QF z(7sVE9Qs}2$Yt6Yuk5SzohXWj#>rP^I<0)=aAk6`xl>h!fcp3y`+KR3?{l#z46}9O zYdI3-a+$WtXOgr{PpAGN+@_*s{Zs-r6bgZ9nZv{c3gBlU(DgftmVL5nb(gji(Q%OF zps&La;_F-M7&)-C9gIDf>k;C4%J4fJr)j&$?EYaB7#yW56Q`7rvm6LVk5Ky&~|Zg;Z(CcXEGH{tA4Am02&8+U)FmSj24gwj{uHB4l4mc_PX1D)txQO z_DxFsQIN)v_iM}ZJ8CrPAFUBiTlG;JLL3R4)LS#`}|fB!aDTQALjs#x6qRDfsu3qTtn0KS{x zkI5c+QTo)NgKV?~K#)nulz0LaFHSmQJS86YQLWWM(+yXd*DO1O2G2^*W!Cm%!h(VUR*hF!MA zb`7YinC%8;I}$4Pkm_W7WO4=~N%ZH)IQm}@SkB&O%k#N_$7135?HqFh-EJs7Pd(qL zbSnX=k4_Qve##_bVR#75-RivK2YNp1UW4)c-WH$L(qJY%3F$-CPV0V45P=O!z%xBo z*)*J9?(yToN>v#kfNEVE`mT76*}yWTVpkq!yoqGyN_Hu81kfR#mifaT?+_nJUOhz6 zK=>u!i%=AV__Rv^yG6k%_lwh#--ZxRgB~v&D}tjyM4(rS zI5#!?J_mSdI_1rLBt0kq&oY$wLD>4RoGW}--Vpc!0*HltdFlr4dmr0z@ChOUA^-x1 zd`S>M2v44lc<8y%5s4r)_cCVnH##D4a*XXWM_qddU=AH2HVrJx4*p1Bum~Iw;#t97 zQ{aZ?D_1C%K^z+(fX0FD=Wccdj?Lo%yHXFh58LuQvy2GpzHI|v`c?@R<~Ue<{yKeL ze0~um5f9XRsHUIooW24u9$Kw7-NMujFiaB!rR4hkaKY_bsJgj=e$0Y^)vRlSmS?`@ z+Otz7dp6VokJ-y(vbY81-T~V)zI_0@X_;2?O4LwmwZ7-)G=BnUumPbml){ey5yJAa zLWw6~@8D=fFTcM^+r`CsxCjW51n9L27#;!ig{FYEy-B-Lj|lw2Azr`=X`07-`~c); zrc+?f^tUBW925L3sv-FmKNAFjQ~>w8vvZ@}XG9E4*LxH>(Aw~o*P z9E8&IpbIjn8*dMPL2UsL_!U7=lxYPZ#Ge+Mh2lDCMR9-yNd5#s3e4K6cLzNpuu$R5 z;fg}YUtV1Ull*oYE=&Z%L>ly+0vOf8&~u0g#KiFA6XFG~%>y@*ZLgyMa`tAlz5}^x zUGufF#KDFr9$mI6JOt<-abd+!?nV zWWiMH9e*dVTIR^_ww?X70#tXl`;O&eA<^&pe~R%4$#qGoWfJ6#$8cYq_CCK*p}n*l@iUu>zb#0McZdwt7PaOI3!NW7H~8*~~#4i6`U} z$Z`nI0qcMM_P5*T?LUwmk4}JTwT6#oGl=tEVHn01K)_qH+%U}+6@h6SfYsFT4F__# zdkG(H?{xZ;lL_E^mYax0JN@lSm6Dl=hH>0vcTmsxs-i*u@niVP*WQLd``S0@9D=!Q z2I3PjsO%`PtJG;f5s$UE@7=%K!&*K5#LE#N32PY|v<%x?T8E~0=No$!*r_#W-w}Y9 zj~2K+E#R?G->@v$-K&2Cdk@AVVc>-^5T)R;!KwQVU+be~Rj_~=>@nu#-M^ziW;_mR ziv_K&fNmHdg(CDli@)c$Hqna#GS6NCDH?UncQW3|Us`K zeGWFax+QvH?go776Sp9hN%RZpE)hz9%xN4^d_uLT}j#ZJJ!F#bK;ob z>jNxq82xJi`4n6(d_c|gVt#j3L z*&8r7n}tulbUdL%1Pk-+iqaNA>PnKn_X9@&1lx~RX{+pNG=M+p&5R7WUI8?k{l&;t zYjt0%^LFK556Pi3*?s;=0b}b(5s<8AO^Xumh`=F!ezu$K{XojT10sTGBtk30Nkl*@ zK!^BCgxj}ob^4XvTHmqUneT>S`~PmaAB)8zeEU1g(9kuwxqxIfyT6etkhz{l|JGsU zeLI6iL4+5d@5y?`RUeT!NcNWcI>ByNtKTt*+%@er~u5;9!0>1FP#9Sj**Utgh$jyQ4rvM%ytF zLpqBij|}B1T?iR%)QNu^<7{sye9 zZcq{Ab2+&AG53Wt;9k!<=C~s7lz9nwzSpNs&&aOlYD(4Z`2>8AVDQtisTuTrvCn#= zgV8js+(x11XAXDLkLkLeJ8K(ou(nPL4s=A|AeM-t0PJ@}1S_jKdg(WP*g=PQY(+r= zGcX#0rf271dTt()&&-_59ko%4$D<$mnZO~DzP`Y)os7DNvBZywOJ{wmwcJLh|M3Mk zxxE=rMBpUoAQ6a|JWi| z`wNWK_3+Kd1^ANnb@;K@UhTY-+Wg&I%!0DFNBh&MDQH^l19BFU?fAP00?m4W_Rqk0 zO1_`nM^h4`;&!zV$Lun1S?&`ufnjdwXo=Kz zwjnZ+@ce#$gnRc>{HXj(0mJ;PpV=Jwr|zqusw&8`e4;HFhH(#@B^1HzSss;P7%GCb zwH$q(@8k37XHsXm6^g^;Uo21nTPOfub2z6{ep-f%d}9B~nWlLU1#tH~4!YL%d4i9> z;13tXI`P_fU?3@-w@t0i#7(cFh7}hbSK|~;r z3Gm{_GLTC4WMZrT1^6%daKR;hXfz_B;79s_;cJph0Gg(OhISwZPh-tNA zApGcgocNvZuE0w#ExHBp*A$x{Y~^Os>6{rjg#ZYYoia=XPi6%ufVCF1K6hRMASgYp zoY$u=JJ$dF>)!y8lYC9$j(Vw7$`FkwX&-&v*Mca3FJTq(R8Zd)lPkdt20*HvB`(4XDh7Fu}`AdQU z_tVtu)-qt`nJZxWyiV@8AIeY5ki!jt!cwcL9{eDzc6?mQpEa$#AhgIMKTERV>d)Ikauhk(G30?HP{gptiuJ%5z zqX2TG)2M5{*6A;ReH4IjG64{v2<~I^XBdBnJR7j3^8h9j zxlhoWCKNF9!yy^cQ^}46{J`y7v>llRI8YP?eOdr9Xj=gb&A#J3*PUys^`8sLp)X*6 zmVB+MlpxBpAjx*=LWVpm^f&ERfa&xJ#|_VRjQyJ3VtnV}D$LE@gjh7vv%qB+#L*0D zng+GK8f<=8qR-+O3mTFyaw4p(u9EDh6+mmKzP`o{Gl(qe2;cSfqZ2!ha~YUXGUJP!GM9xtW)9FpBuReV~6mtdj$ zqSdoL+Zrp|O*PUd4Jc=Gsh{*AZ3_O&;_w$CHsRDj+};FNh<33?pM zI51#&wM#w$cdFf@C-ID11cueWB3LbpG&yYlJuir#MGKKmduh4HPhfFzp7uT2a|kFt zmzA@u+v63r$0HxE!gt?YgN;X<^!aan|E)oX>CmY5wu%f5mu9 z+p{x18ne$OhD1>7U7zPAzEcTg5i@_k-pP7W30$70?^4NdJf=Y#m}LA+`#yk zaLGW3Uw*hoL*&Hs`s{lC(UaWD>e{a(@p*jC_x`Bs`jM5gH}h3(u;+VmDgjt6yTwdC z(TYg^=dk%|Qz-H02ughZ(dJ#u{2W$<+);y$vq^`10xE_9p6>-W ziWA6@=t)=HKnwU)Y=0BuY|XU?PTAKq4c69jHu>+{q!$&1wu?9CXq#KxJd-`t>a}{I zRQO^(xAk8L@#Ite#t*6hol0Q!_k1r-EdXKwimE^~Zi|2g&n7K%zzWPC=m+`_3uD6T znmS(2|x-BV+ZV@0lO=!t6#EX?N9LeQ8X0m{ODMY-qc}VQ#@`v?&FGeN+0%ZsNlMz7{yPI|V_Bgc6 zPRY-q2tI=X_Fx7^wgVlbZHWNMMk;QnOkbfEx5b}TO zAOHAS9J3eepMT>4+4KG4(@M_IM5F1y0`#I>uGnz`@(IpF00cw?s;UB(KVS2jrd@Nf z3fvQTVF?dDOG_u>w3XmASoqit?<+%5s++|R3xB+_mb<^Qo_j!EMx!xb>z=d%D7!U` zJ;*=KpXyv^CIEu+(=tRSq96vlB4B|Zc6v_J^`FJ|cTp6x4Xpt&a=Dhx zmS>ef-)|hM0BuH$h5Jl(FqGM;%9I8y=8>uYE(0r~&@|1rt(+9eWD+95Y0_O^ez=-jezpc6@z~F` zqrXp&umY4zWvJ}c&WwD5a}fZ6vV&ECi9$@2T<>*D?>o<87}{#O{;L)vBt${@eqse3 z0iYwBO%t@HMjvT)Xm;nfSQcGe>pb(O`@&iLy%+6u)^qFmTrQWtTPPL3h3joQRxaZH z^@a`>e$$JgDu8F2EV?a?RJdZX3`HcrgmKn5HvteR+X@I10?0wR^KMWko4`2TubEB# z7l9N0o4^a%s#2xvjJgsa@%NGV`x_YKQIt?nf#K$!qyqF}>%$_=_VXa#!MO^6Ky9cl z0hp%Qcf8r^NoN!R-tp&<^v{w9w1$BKSb0A;)V@~Na`)HPau3$lH@*M^O8s#dsseaG zNGB*@TPT*`ym27{C|AlLOR`G{!vabFT)X>OtOT_4?z=0#)*xk{2+uH#T5co%7j5Dn zfK9x0(zE%k01Yhn7e%~-a~A*stpbuwzSo1j@c!BarlDK#hXTj`2*#4giOvrc(U1f$ z+?s=TAFk2oSWE&D+G7w(qe@Cnj(Yrh{y}9|c|&#+LhF(v-8;=%=>)itPDHPD21W>|w}sII4cz4~vlnb39h7tju%v|Y_V+1&c_=4Ro` zn;#Uu9F2-kM3wE8>)JGc}A zaKQ6C2%G?#u7N0sv~@7xnUwc`K?D$J1ukUon}q@mXkOg?odnE9Z@>Ym03;kzNt;Tf zDAE0%FB%TF~OT&fB{ZJ>pffU`}ys#Jj$&=T4xwVeu=N&o~#)1WO8f!@@?YFeG& z)P0riczS9Y3Z;w5xW6jIJGgWLAm|l=7Yo@1+SWof*sJfI+n%;QEJA@qv2@YbGg4ei z0T4JMU^%w)E^{qI+pW?TZNs537@9G%Z!-8Tt7&%a=p2au|HZ+9000000FeJ{8Q1{x Wy?X1t4⪼0000?2P?baqPS2?vs z`VV_k6(^~RH@lTe%A3uSo7hPusj@fgIC09mS!+dF)WVV_izY}BBnT4ZV1NOK7|fvO z(LMdVeV_ThbMCp1p6Pjjc#!&lZ_a(3KKGpO_xpZ71wKx}@|Z;cEgL`cJxp6%D{6WS z@Ev&RHSkrjdJv{he1YGZnhCbugKnn*<;oO*Yw_m`mw(Jh&tssf297qS1BRi3ZPlUM zxPHH@aZiHX?+v8DSMxEr6a+qjoC17*LEuwx@Wbdd*P?3zf4j()kKXT!+>`it5P-lp zCIkUe&j)}{l4Fly7+Ibak_^e9&L0*;0$n%ncXjS++39AB@VB7=GPVPs zVweKR$mh#H)g;jF>(_Pcde9Mt5Cp|cgG>tGhaIYf&w_z921LO$D<|{Csi%Vg*9G{W zEZ1_yTFSOtAO%Q~0KaGG@x7@kxMmg_jT%^1=f0NfZp8f~fF4S|KhV`l0{DCG_~V#o zDa(_`W@jFKn(m>#JWs<5w9>F2ZczY+_nsrJ6(W(iE|({MDoJpE2%snYo&%m}y?G#{G{4|o_9uoj1UM~%JK6aTmr06>< zz$oT(nEw$1KYQYdZ-$R8>imDvSegG9cykpO7f;&_@!GXgi|nWXfwSeKKW!wqcLZR0 z0lWmCLVCUgfdEfh04abwxMMz7bp4S>&yF8C4V42k@@;$N@`eAS*Qvi?bvs=DJzs$6 zSQao%hXZ)x9%@1()CGO73czxl99jImUu2-NCUm+jd|}Fac3ZS4mK~fFG z+DGWY+pI`g^b4n6YK>Y+!z2D$Pi zm-G;PO5N?Z58%9SVLpL5t1z_~Adv#!Z{Rf)m=7*~#tJ{Bcs?+E9w708zz0>K?}hT9 zsG#w!`TUwlpbwDAL&b1i=dPFWZiRAJSJ%pzmGrY@SIcha#Z5dfF^*-mSQM1kfjh-!oA-4sZ~5mJI3nNx)f3l#YXG z{$m_}rF!TzocNhpG z0{{BOmlCHiV*-Exo~93AiPHTM=wJ{ zr1xAgOR4)t>yt$Q^^UK&9r%ETt0-dJ5<%RRK_GlT1iyUn)a>}N$0G387carBE9YV5 z+WGkB1SX4l%&jg3t;e z7)LVvw|Maaf?u6^;u}ypaD-1G@F`oh>*?hO0M){KRoV*ObKup~JZTB?*GPh@VUC@3 z9cLPRX92;kaRMk|M@uCMZNT*vp6zxAtbRYrLMaE1?R;WLpxlvFNGgqq@H%`Z@m51= z_H2XUG@-WYrmcT!W-)Bs2 z61P3r0=S-CyL83x)}Fz;c~eVBx={rqB(3LJxCe7fDO6mq(`kxCHNXShanSB$d~^aN z!IuP(4X-2_0Xq?3d+;&p*ItL~KY1wyvYG&$2#^Gr6M)5%&xEB!zwyEotExa=RYC=l zA?I~!SDe*L&maNjlLW{nzO_9GV!&&)8%ToHI|$dEkB?>n3=eNiZvRf%hGSG{B|!*& zuSVb>{lYil=okM($W^BJ>-B4Izz08hF}18l@*Q=XfgLRXk-pC)!9pMvMM)8cX*7p% z0&pcDD^etDA+ic)iZWvZ%{+OLNscioS#9o#+v zIQV6}(9_Q)-jMz>#>yQMX=6@dC-YA0qU48`I|4wQ5ZE&1E zPl{|V#|iLpCBf}kKvMRVfz|xMxgkL~==d^jkf$-9H_MZ=<%6eS=80bxPs#I_7vTDv z=hDlB>-e%m!+YuZOcTWMaeb!equ&`p-2JLNgnOHvrPG$&|Uex ztY-C+zv;Q=j-^uFCLf#aCbZhEltp|TV*dmn@YOH}S4k4U_e3X30{CGE2m)~Mt22+! zj?X>;m4grQhxMg*p|SWLG*%Y21z-F=E;x0*o{)DH-+6i(VIlwluNvX+^qob|^9JsN z#Dm%!znKjh|3mV9;BFTdI(76;(jbR=_~;^=uKj zsEb4b1ik=O)s5&n`W|*a!*2vZ5IR{9zsyg4O}Fbg=&yVaeC%Y*is>WB!_)O+$tx8~ z(6c&d5B7b8JRN%{0D(_{OL>$EFib;aVI}YojN_mG4hcZuR|$Md@ZA`EOl;BAGD`S8 z>GMp>#C{)sUV^V`S!{U%ynvaVG z8r|be1X&rH%0P)T*&H+)Yxf-JVX-$0kl=G*Lx8Bjl*+(rq5)$9kYxZI$9x|1tT{FX zM?d$AP^`{k7MvDkN_;<^F{)EQNf(}e5Mq3cp<%C zBtQf{jXq1i-%az91PJ^z0Vq5n-;xAnjYyFE{?5x=t~lGrg#tjlQ?Z6)-z@P>2@MOV$1?T*8Y>6)s@P{6GD*T2z7`YNQ9f60kj-5@Th8|A9O9BLn_@Gn(NdRd9OdIHUB7mB(ffQK> z2tgqoLXv=!Vk-goRCD?aYcF<8X8onA_&}*^F6gQ^G=oIRE2Rop*8L@cwmbN`0F`gt z+j%u5EGod$nEwst?4i#*1=WM6BWYcD`y4broQpqIn&M;6#saD);D5wQkKQ{>0E^{A zMZiRaXpHtk&zlN7D(Y*@& z9lvM$LF&F-nt(>T0rxAE-8(-?fJBE-_p9MNB}o7dK6(D^(a(JYrcOK=t#soOg1^2D zPFEaQ&y^!e5%~O>F2GmAwLMi3K!A?;Xfentf=`6o7I+z&ST`9ui$V3$cz~bueIfx} z`hGm$Pd9<;*}$yjD@NnOGk7}>0|KEE+wCXpCHEYf@^T*(~~egQGlh@b_)FDapL-UiW!#qDVjiiyq1R$UU_%oRQkg|O6 z)ZsD$PvBE@8!NE%&N;Bdu6NP%CHP{Q7<>v%(>U-m+w@4`~4mqD?%xk zfv+y;V>3UUN#4U!B*0!)SnPLhCyR^gjdvq%D9 zZsP|K;2{I_yls*xm=LEHx-gNz>i591d-s$8;_D0nVP*{S9>gMw0LJj|e~$TU<;i1E zJ@P1&#%DyavEys=Z-8Spko@THm~24yNxg;VyBv6jx*oe!%DNHapfd3*)B|Ke0(duF zu%{lMfrmeJ5FR--%@dd9vAOmE6axz}(Ba}$D^UR>UYDLcDWmY4Bxu1Aq@B1suox&oF9s|oNUU&m&X*Lwf$@L9Zi5p$j%`F>|#fRu{Cy(WNpyT3gS zp8Y)9z*)LE`q{5RWs3M9z+ZaroTy&{d>Kj4mz^K`egb?L0H4A|@Lea|J(5R{=N_CW ziLT!v9ywNut|bYcdi<~$KaXR-3Fm&Y#50N{31EN(v~Mpaq?MVT#o;@Z*7;{}oVT_8 z)wfit@Nwzpb+{L?i$HCs1pJp<-A^DD0`IgdK-6+Gt@1%F6?*fVV&hdj& zu)JcyO2hi781EPwQ})MDKj0gjO+M?iY8-qTbJ=PHzG~!S&)=d1Vdp2om*IIL`3^%1 zU|W?TsTOBGdpNpowqxJLuRwKF$m$>on$2eFzGvB~`lft1tegJE)`$V0nw&ubT!y^6S$H0D{oJPihBzBs`j z68Q3ZFp}U?_a`MkC83lS7QhL+Ox+5;?EYa^kpy4H7!p8|AQ`1nDRpmI4lH~acl6Am z3jFflOrME>Z*`sMdgky196cP*@iJAO(VE)Cvmh+8h zt!%>5@+LeqTZU30K9d@9JeSQvHfyF-V0wBQilt(7-)MAUWo0>aUe^_#wAPT)A3#QD z(04q@82EkMa@I7!>N`9GXA_v$i+=AgltgTpqP_5@Gu-6<7K>hn#Vf-Z1GT>QF4xVNd5H}qHEeAeiEDDN#KXw zt>TEAi6owdjX=POdlq%P9=_BGd}IazO=-Ix)a!AlOixt+p^xrqt&Ew6+N~N)9GHMS zDn%xn$8Tz&XAAgVgSE9)w1U`&UF2r7BUGT2*FXu+M$zfnoItB<4J3epq{wr%a*#|; zs2nmJZS3<|`@@Y4G+$A{2AKtBA@PQ%3qmm~XjgZG1S+x;o6p%(Dys2>TA2Kg1GmqS zRm~Fb5P^^=jG~B+7og!tNx+4maRQLn69GbUNbn`{Nqd))za9A0{nTX!cBUjj#$ad# zLgvprHj^R%2NXXm!Kcy3E+hg_1fC05ug+svqxv9WX(R%?yU>QERf`j#P$(ks{S*QE zwiBg~^%U={Eyea&_G_Bgyo|uVV=F~efD9-&-wV{C86@nFNYHAxw~*_jgl3j!_A~#C zZ8Zx7JO@8oCA+s@d(`>8h%B5$i35^dKmz%s zOLotk`FzF>{;RCtcn)vp9mwwsu<}?L%3TK<&Gmb(01s07Ai9LvYoI#oV5%Ni+EiS0 zEUA;Y7e(u(ZX@uw>2L}DVCV_ZlcNNl*73a1RxrMJ<`g{ng;S|D>YH^~U#~&6Iiw&f_?2-B*AaMZN$vs6Zp-! zJ3<0&pYxB&3j&`q8=wZb2}z=khYQd)9~DG!6NTjO$O-HnNf32Ef~*HIA&dd=vj&2$ z#J}b1pt^AI&!oZUh2Lzz`bG^-o;bbj;ViquM?E9<*=;tU-p)ncPb47FCq_%#{=Qtw zL!&F!5GugHacEE8b|iQ%YrQd_R~s+v2LKDoe7sX6(7f=_dx!^BL&%lv{+*&=T>x8K zhK}}73_g;M z#!{Z2F*1B4@TCpti7rqT4S{12;6I80nK3<8;ny^3v4h}R1_HO4Du9mPP5wTc7vJFo zz-S{LUF_(bslts~9~?^@E}s+ovhlEv<3;H@F1nBh3hpEDeX({B#NSZj4PiZDdU~RY zm$Oc{{wj_e*eUx0FpJ$_;<*~F&g~H(Uwvq=bI&rSo?+12LI6&Juz^)PU&atwLIONE z+J;i59WByE2@SCO349tgZ1*GqRHj7W^Ue=FUc>iU{D>BIEI9yuD+t7UDlnywxwITh z{n3Mh44eSCDO1nD%IcaRm6^fsvgr2&P{0DnA-LUMA9_7IB7lt1auGV+KEI|hz|QV; zZRqqIa9r$qKL(Hp5Um}NARQAG4UGKgEL|fBPzBtLeIbb7%hI`SlLV?!I*PLG?3x&} zNPx401fY&jdQ(_W4nAcuR0m0d8?7=nff17+Q4%77X=pL{6i5K-{%puFW#BuK08u@{ z4wED}GL?r?DYm&RDvD+G(XT~^=X2TUogk0^d#qaGB&gMG_^@X2?k5%4Y*&<2X>to6&lu3=)MaLJ#MepazOG(2xje0wnL=zh=R=f4B_a{KZoAjP^72 zz!)_9Dkk1bzmf!rKMkH%f=0WA`}Dx-v|$Nr+h{q^3vGb>#kPD1G_fZK=lQ7}(1L1e zZ>kf&dg_bE;i*SEaQaiH=yvwfd)D86>jx`WUVm%prD(rJb7y=KjxjZ5g5`8j;r31f z)hsXa=%uoSTrxx)ewC50M1Rt&b@OV@sF;5ZKMZFK3{X9?p9>I5A zhmSfYktq|hi-^FOxF+z$^0-jQdcZE?o?zfRjjnYhnu;o+@uX;U1DL30F>|T?j8(F* zj@`W8c44FtGx*A46ISbeo|msRQ7zC0I(;bSGkjdGwQ#>aepbbI4%oPN0={p%sFVS3 zh@p%O8-{@Y)xYxu%p4lU>(4B%+#lCaobEm*&=ao<329o41<$*~z07c>j7GluR}?mq3rM7tkhb zalc#>qiO0K_(r2EN&=#OIue42kPJOzg5z8K`iq~PfhQlGfl9&P1c<`zMVAxfQ`zEY zr_cU6^6>Zn;QYKK!G2?EBEM%9(0F(66zTU1n5*=Soqn<&)^Kcq2n3Gg<>3*bAVdNa zZNNhCX>1|*#R2d+@X-Tfn^PFO9#oQGa$KxEcfG;KY*~TDTLPrR2jcH?@WYVcFR#)w z!7xdLWDp6YIuZB=lIzq_lLJr5!5PbLyT97%GSt?V;TWpt<4A(X-&~qUC3rEP&+klv zf&Q%&C0-M7;hoy9bwh9wni` zP&P%enO+0Kw_&k!7_6{!tacO3LIs$ua!@@ri@(c2UK{X1B_2s#z_U?dgi@(2;kgJ1 zDmN^AfQsr`D6=LfSyZetUh53%n-(;h7IHnn(SdqhbWf#{hvk-q`^ZD5jlVCH!M45F z^0aMaHq^$ao|xhJrBByE%{&&pwp?+38TB<3Rr?L7vNvF&azT3f?ALzA{OwM+Qv2~M z3n>Cv?#=+2x*c85Oyb#Bc2j`;1?k>*y?*nnyG?9{3Y5=n|Gt#RLQFJZrgsAtHm7%7 ztJCe_I@w(}HwZo@|9wY*FXO?Z6R8SRMzU~ivA$(JB0{I#%RfeU*y0;@6W{^9c$=(B*D{>sjb*d|l71OW)b<(@;P+|F=XajZOf_|HqCXP}=B{r~0_|39 ze}(jY=$HolGcyBU%@P{}dI-|Hz(%~(a1S)v*f7mLz*q(Si+evdU1E>ad#4IZP|SK@ zb;h6`uG0x6MAy)_4Fj6(E|Nh(4^MO}ep^+AB&v)?2UHzD0G`x0zApk_DuFptg63ui zN+Wqt@E|7iz_KlTCQ`-UTI~*)+V&<{DVXrZ&&|M-p9{PG@ig$3o2asd%5BYoYP|%i zE3DizJ@8zyKi~C1$K!aoM?XAwZ=l{&<52vipI5)Jbjzx}{VVKYx031(r6Jq28L>@~+C3(&bzfrWNl;07u|xtNbgVD+6n5x{eV7j|%OGc%L1 z3WOCQ@F{wh7lBW)a;uqIhd>wOarjxxq2KGiEH1i#B7ol|hy?t1r~*_sZ#eioKK~hm zHuCGeJ~(q%y>H9sTNGf2n5qK2h337q8b7;j0${vEBtRQ@5ZSv0Q_qW4AQ?Uq0Bs2+ zd;3M7nmPyPmY*6<0;WQ*Zx1Db=SUlfqgHEh@G10;!$(N~J!5WJWAZ==roudNWPDG+ zd%c&z?-B5g9g8;D{StgNRDku(37A_v&EK6kd9s{|LX3mg2qUq)*@aV}Nxr@mnRtxNBEFW1)n7wF#J zMF0l-teh7+X>2%UXnmZ zsnHUCk|cmQ8y*pf5N#&0sS^)Qz>z~^9Qdz&=^>aLFTrFrH*ms`0M?HI+W$A$&HqgR zFC$10gh&8Rr~*Ss;K!o;+T1BvtCx7^6Zj7wTZCVF;vJZ*wBapO0aAj~58i_D{91|t z(^D!*)5fcBI`fStY*+~7Ub7PdPb45^=GE>BTTENQ9s?Jh$KiR*v)P25dQy@T>e6a+ zwctTEu-?RxEI_KHD(WX=rn&;l8w>D8yOR25qt$|Pu?UT36Kib%nT5HR&4(>Oz*C;Y zoH;tV%K?8J<|}(E2vY^foOs^0-bui}&hsJo(x+dAM-cdnNCJwt7N#QbA3nM~^fPB3 zHO`*7;Jo*uS%vn>4VYUI1$5PeU}W;pL@M*K+XP+DgPF_o_g<*^Ug$%W zd?8x<)QJgr^0Rp;m#YZ;35js}KyFxc`w|ufvxfOW|0gx(x3k@$;U#EE)|9e>Fl?V;F_odIAeyMkl=GesXN?S0^|(fSy}?ac z{RH3%#r2efpc+%q@IM2M;9=+lN8tF#YV>}+&A?a0mQ~FF&vPJ~&7hqK*~pnjY$>u} zMwSErb6=c+FJX?2PQcXUp{)|nH})3ZF5q|$ppWTe@qH^XM=&`6(b)>^1rP3_ZK=#n zdUOKxLohko;Nbtu?>+^$HVyd2C*Fs@b!HBpJoO>GdG!FFclyXWoV$1k&U|VfrpGsU zF0GD2Ijh5X<-={aYnoWFz+XTDye6M1`>^nAHmOS(j=z-z1oBRyDv@MtU@cz6@o~&U z5edSAY)1l807(D>-%-zCjSC$3h#+hY#)`2lty?)%SSKPu*LFGZlthGFPWZ`b1bw2K zhp(Ww6Y%3zp%5BMbk@wJ2|&QNzl-@YZsc_VybLa5T2%P}Wt}1Lk_4RnwEvI%*obq{6%r)Y7cE1B!wgl^&9e!UO$#dW-B?+>H z%9c&m8v=j^jx*)&BLOb%a3s=SD;iaX%H!Ked>jKiHM7y4f_FbO;R1qx0Xv@JiIbP% zk>d;e`mL)A@a^*_(E`>Y8#sMrjgOZ;sB#i4tcbmzc}S?b)voVW^W#rGs(vlBfvb(i ze&8BV02!nNW(XE3f|5)&a6gdf2sd%eqcEJsW&st~3XlL;Gwj?vO1xm0?U$j^n}l1P zY3O;Qu+esT_VG7b#)M*}0^<)%LHWRO=&}N|a1C8;!Fb+B`js)MP!@adTx zoH<>Bum8dcsFoN^O_9fEL1#VD#bN630jSpNpm)CqCHLRqBkFdScedzmp&)>r#}jbB z+;)h7LJ3F#D2WV?n?*Gc`Mozz!~gfA&%#=x0)OY{-+*8Fg$r0XU<%NCr{78Mso`KZU$zL%wb(jC=@oKhzY1D3KI&fs0yk*>JHTtAGx?K zx>jvXo0&4kT6OQWR>Qxl;}-LoI7=w=1#@_6!zfOGGZVP@Qduffw#&cWj+=lPuf^gj?XPpa}1yb9-ja)#eM^Tl&pyA*-&93-bs z#rMIpw@jIR{4@HquU~TJTV1#U`v`T|3qQ17jfF&DB7;3HjMjMG^I#)q!jpJwG99}g z(^iW7y%SXMC`eE2sGeoPp~*?eWwX5dvp6mx}+5~Wdy6hWu}UO1+!@1n5$ zITC<^NYLpk=-F+ae|cdRuH6v(sW)>lTI#~#iJNe9eUv{tI7af0XDPNYn=tdh61aZC z zks19I)Hb>>QO)uDqOpqBu)(w6I1gjyYaDnP+JJ%u*x?HLRS+;v0&W3{RD~!F=8|Y`fz^f{XgX@&Iw;I_JXqtu_K>zf0=vywVZ#2MjZ7AllFf}oT{;fbJJA!`K zht;)J==K8`85srD9LL3x4BZdmfzcl1GFfOhR(YO$;I9DM=g=F`=Ywld(j6>>j$Y^T zv_S`IDw*VQqymA$kd!JvqwA}2x*EK<_yE+<*GqXH-kLwaua6&WlCXhhT2SxiVQy&x zRP44x)dnnY6!BXcJo?}|EUp;vPZ?)lf8TkLwoi}h4R1$q_6(`xhjyTgajzL}Zo_qb+SFN% z`BkRpAaHs>qidtbW9twBXv}0(XrpW_-x9^uj7$VRC7qvTD(HO;PJ)uQh#mh5w(UC4 z1C=^jhA6u4v``(y5mjAS1VaU&2qXzm-WU_|N}~k+{JV$XwRaCgy_1W;A1(Eu*-?=Y z6MP;g0E@vS0z5Ff0h5&uy!?|HxK+=?W3$)ctJw8ld*U)oj-Lzm6SWqfGD5}%*N;R?~DRa5D7gbtRXv_GGL;ehNTjx>jsxBJ6I2b;A}37 zofq^WP_dhFUAJH7hLz0~z%UF{1cQICZ}(Bg8sOrj0KK|0QUOiVcy{^VWC4+Z`3(1?f`#XMe`O4g zOs>H%JTeD{mVrwP6L9H+G5E`O4#Ls#KFWC=Zmt(GN5R71-(0W48*_)@+Da8h3jsVZ zu?dfzya`9AHnEwpMVX6g9*D#?#V_&@r!naFeApzh zlbxSX08-oxF8ARrdw#v?{43x0Q9+p?$&lQ)t8)_Iehv9cC1I$$2W~ew@4D`W>$qpL zIg_sycxVF#0;6W}u!6CU<3O!e1JCmyU&u%4_WNMMwe2WTS- zA2TTZ{eBOvg~l!@c&}>N^no}*Md3>Y3pUzWxQZm8@x7ZBI6ps*!1j4I+Zj{@(e{|Ba6ZsBz#D6hF%_oolVdOVarA&i1a%IJqU@Ac;?z-Y&U!k zz9azi#0&yo4Q;p4_U0RH|6kF2O=EXX0k$Q<{s>n$2}6 zu=t&Ub|B<81OS1eo;W^5AimEZO^=JtonJ1&{7Ok&FI6}J{=wJZ0JE^X>seK1V8hr5 zl7Zjog`KA(9h~idKzsDP=(gALIQUjukjCmH)+X==ntWl!xq>O?T08Gexjp#e$mt0? z*#C-;o2L0kX4ae~JK$l?L@zxTz1?!4I8ubtNQq~8L`Z(6QW0~UPV}z1*@T>b0}S^v zPl`uBt@CkeLToZ$nBd8;i#VEM9T^sw(e+wA50<0D{LM04T^93BO%XVC7DB`|Po(LRQe2P2b50DNpX zBifLg5XCp&n})x>GKE%C*bE6%E6H#6;Z-#F7ImMnE+k< zh^~b_fV2V{{m_oW=x(?X_$k4h-~GXx{ojee$1suqnzlp29SA2>E93U) zG>>-h0*=p<3Q*Up8iHerE)|7BFWYSKoSgQdTrQ^;xUqPHk3;O`U& z{?)gxIKPLNZ%b^RDY|pc6qZ2soUH~#( z{G8Pvo_B-*k_4W=e-$A6P!z6e=QS+90?L zm3c=jKnCrtgPYD9`&SPN%Y_%9+d6}nXN|n@b=5#yu;UJt{K^+%*{wo_46LG_Eq1p&*F8J9(YLE z0A-I-&lVt0HeeWB0XpptGa_f&-MSy^=7ajpP?h7!VS+3X0IRT9VY+< zDZ%ZM011GlffpqS6xBfG)X)aXV(o5^gD=x8W;ytjT|A-V*u3*)_XmLrjxrXlZ#S0( z_(*~_dTchI!F4(j3Gy1M0@ETA5CJ6kLxihjL%O(hbwq$a zw|JKbAW0Acy04(3BFQ%}-&7R)3mFZ@RZT+xbY682PoNnZWO5lkx=z3k!LTK5EUs+_ zP|Ouza{K^f^bAz0ekd1;B3KhJ;Uhr^e&9w{BYvy! z=^T6o=eoV{cf$DBHmtz1+$-na=>PW8M(|e#E~~RRRVAHC4oMzaNWfd@nwOXEA_1fw zDEm}`AUrGPBA$Ol2kYnMJEmc`=X1PRGFv?x8m$hP83VGIQh0{M#SfFU;NW|A_8;D0Jv{L(>nNN+!iJ zD$<2(;`*)R?g0SpmcLvR)dqkaTu66lY?&{;G8KKD{Bp~`VO+(hkPyv6Ju3AW(<^O$Kv2i1+e_l zX#IYBm5-7DrHqN)-i}ltfGJRQG1o!tut!7iNvhF)$XJyGW@tCyqs9i5ju@lP_fx=A zcy2!iKjHNeiF`4Sz@J-m{`J54EBkk;9&-Owf}K2{_Aak2-2eCAPS^LY6F`!Hg;rpq z(rPSDs$J5v*g&GCyS4|bpuwyHjakqN;3y_IxF~hIhv4$UhCZnx(-fv677V&*b{)%u zW(NUaSp>C=c5n#E*hM1r@wp3Ge+@QK;$>>82O3(9p{R(Xi}yZc)C@MViyn&}4SJ*i zf(Sm2UX%>K?722xGw$gsbujwAhu@=Z;#2WHP&gS~HxPLHVWEP4$RwcvbVe87&E0VS zmp}P_?{_T=u99lWBtPFNYv^>FEs^hkh-3FY5P$-$lLJb}q65jKGw+zx1RiWSHoS@~ zK8qx(@&(C5)hsH628Lnqq)zJDLSh@6!sGL~Jd}zhD3yft>!^uLFGu@gV1phsqWelw zMLWr$n)K09GFW6`3A!Pygn$i{SoT#l)-2D%ibFrV7Qa&!0$l9LqqRsK__f1Rbci6Y z2sc{KA_TEwm#*1YE?skeqgMCljm$2RKaisZfDzpK+Y2cFt6OooX9SQWpwJSwNu*GA z$RM6dBzQ4vSWn>fG^i#gfQ|qV@D{cP$v?xzt-b}OX~NWj2e?FM5Xe3Py1KRsWwXZ# zAW7hb@+?U}1R(Gu5|}yc)J{YKFHnJ@Oj8OXIM~e|PktU$1PMNk%uj&N3Fi%f@1;6k z5%^Bm#)~deCY$`86p)4m(JKPovcr1<(2mVmatW;M1u1ZP4^QXb3(L zLD%w;0uTwPf<&SKJD3uoODh1Ed@DMC5MBq;^Hbd)6To#nXf(PX{P-RBe*F!|}N11Q5ZH0Eh${ds6avXb2qBqGU=sUDsc9UB%Uydp3(+94A+PV#7hDT!8}zCOAO~BNZ4a7-${9v#pMUivYH56N}r1g62ZI>+@Wz z_n??lK~oLr_ckG;liiGfirp@==VgJ}t;m!E$HH{Qu`oTi&GC)W!aZ~E6WvMV2+-?f zHoKkB_XC()^8fJF_xjJ{rA3^h+)eWHDEVeqWDR-$>bt^9hlO@O;J2^<4U{-jQ$bhK z@4V0>hlMXXM|Q;Xs?tdR9>LOeJ@st)<}x3r9+=`|v(tf6KA&E=a4NibWy?34t#wq7 zDm0txSg{h?LN$7)y6YdQ7Ah)==XSO{e|N!t{!jm+`vP`xeLw51BxWz(if#8}rT}CG zf|eS3A7kvKo$ChYaTwJ!=M3F5)dbb3KrUyX{CeOx4$p3@%R5_!na@JT zz>dauG`5LvnQ;Jn6~GvWJgkH2Z$|SC)`CnX2YtK8$3PJk)wNuBjsXQrD4Ly_!38ED z&?lqpm3|JK{3B5sor~D{4xdj%aIh{2{)-6y@8F|(cX0V#qVI{3z^B|T?u!D*ASEzy z2Z%!)%Fdij%@s=UsP8m>Rz9#_X{Eoq_SvAuD$M!)@0ArehP>o&- ztXdZRRe@!QZKG0%7cJouJ@BfnvSDe2Za^5YGA3*T(%HF}JxbFm@Xjp;( zl+54XZ&elMou2g!UVaC2R?U^RooBUceDt!7)N`}Mz*I%I^RaEE_tuIxR4EBEkrI?h z5t{3eFXf~6%$f(?W#D8_M$hbCGqs+f2=LX;>pT;2<5k! zVSa!0`&bZw!U|PjK;rirM1tpVeBNN|vxDmlRq)JX z{FzDw2rHT-K{AGbkKJ#-c-jX5o`DD9+Yw! zVCd_CHp-tV_FD8?Umru6ucM6jd0Oo?C|c*z;QJi>=l}RGx-ZZf+TDPED^A!ksa^#B z5@rkC#@(-i-Ya1D60~`F0D0{r9-g=7d^=Fsh6>JE167o{n`kMwkPQ~(4GW89!5TV% zhwExsxIC&iLzC_GT*w(N|Cr9wdr}bh0A<_8*DeH*F>}!Bx{%E>#4Z5GK}BI2WK;{k z)dJUD1KU@j@2Uup3SG1W8xKM`+WEJTX}`)rmw92q`u9J$(En%ajo=dU7Z`p^*&#Ey zZ;i#d)&+R?h9JRy!T;D1Kmt!ehm&eRUA)J1Z8tcNKcRL!qvIk96CF*Ut4yqK+wu1T zyw9PG_WEKB!g=wA#M%^uHG!1RsnF?pd^B*f;|g0bbOYB%68Y=V&n-5|$BE9LLf*NI zpj**9?EI?;{y$z^@z2R;1TcMnSPsS_3eLjH?brKbM*v9zGh{m3XKDto(!A>dL+iUFh43Bkw6G}OoDPD2A@Xh;gT>4DoYUlh&r&*6bvQsDIK%{0$!4Ug&&h72z&+= z>xTk-ijV*V{-p)yw=Q4z{!Q}iZIX6(c-EUZrx)iNS3g>aRTbb<@`A8<=+mnRkI^kS{en*j%3k|1MdqIX1seE%{S z{#v{M5+DTs_by#`{vT8nC%L|X`_XsEGTK%#E5N^S?e=6p86R5$P;5s6UlE=>EEOLS z!z3D@3cMY-u#wZ@ED8Yx!VOX$+-@V#u1HfA-QGuHWOQK%M1UZXn!-R+73lW^2poor z;emzMg^Y{y9ZZdU2y~{4Z@7pQ+Jel5wRU@P)&21g-*%oy@M@%5N+Mw(jR6awnh@xJ z@%Bdt|6@;p?MOf%?-cSi2MlZEcyJ!OYy%&iqsLKDcGUm7D!<|M_|6AL1?cFWL?|g5wTP zQmMWZXKfR34J590XX^X0C%_;H_DKMq2;O-dI0>lZ*Z>L0`zeS7hAzODBv7d9!zvL8 zG?pZQ&w;0qB+!^>%ZLQww+MWUi?6#E!X?Cxlku}e)YzV`=C zz(T}5ESwi?Js>_ip3lK|3?Bmm!AB`r~?+E;LR@zOQ#H|W08_4j?=8*6t5e2Pyb0VpI1Zj%5M zoCKyRlt6}$zbhAG5=?}nB!MJA6ix*A0{yA?J%WlrpQrKSqCbE7K{hWZ)i!)^T;cE0 z63P1kevks(E$}I{ySMb+jfN#iVCc8K#C)d<&md9$NY~->$#ohnF%k({J@oc0KvPOF zNPRg?@u-uST5 zu{X`K(WI9aYJC}0aBLN-MH@Oj9~uoLi|a?SkAwp!(cwDElat<0%Jc6w_!OUL0#HaL z*fR;FC&X6pvhBdvF*yO80CutDP%EC2#v>He~R^4yARx@O=;0 z%kEY&l6XvAXOQPQ?~tAFXm;?K7Y#0PQXm(98cPd0(qE~`UMGVSK)#$1Pa|MkwbIm={!4*yw^QQJh`Q@?JnK}&` zQQ$0S{&>as8NbrkHW3=@sN!NuGZ7lss9o~k(LLIi9+TYD)9tH_m7+YY%Py_{jrL}r zgsPJsfAV=L@=7g}J2JLJh0@ z5Abpu)dDWveeC>(_N$#x`&@)GtPm-~`&@NrUz*oYv1K`E{R?SrOHcT`Kat=5VtDqM zo7EjQ0f{ri$9DJ6NcBpSzj4TSWuecC zCYPnFxM}788gy_tP=JD~>rY**t%ZHq z%fz5%U@@tugd?gnZYv73fubL)$lX+Exa6u}pQWVrNRJqe{w!p#s!5Hg4~a+Su~8`G zZ1C&T1sbYN`CI5~$IRY1qG4}Ru4APDJ$e<>*6n6IWT6Lf0XsqH8U%Nh+jF24J5;@& zcv&N8E;*e31R3w}uQ@zq>OUsC$!o0^6E4xd{_h?8VOCG@$@}uuyoX4wTE|HBsetr!LV*Y5P z_+hQ*REFX24E%%m#4qp<-Lj_47ohXqNQdYI#jIa}e%MNfr<|jB2^3c5=7F5l3|s~J zWzz$#6s&@5#%12{hrMsKN<~wEEm0hE0d#;C$9|;U`{!u=N7ZKX6S<>_Cc0gc7`Y$| zv+rf_H~G_(zmJ=)|N6a%l%$zJ{Q`j5{(7{?te(b-b$g&SmyG}j6w%2B%11d}4dW(% zWnfDmZ^o)8y0Rnczci8V@z5D!iPh)fSqU#(U)^OcE$RvUGh}3nd-57j@e;%sCu;p! z?va~Wu5v>V%R&pDsuYL|Gn6jCRrIp8vtVq>GWrfgiHHQ1YN2SVFureEJ(1q$ni1_L zK>3$^!)(7dmU2pIpmpE|qrdSR*<--DAbU?+(NzZ->=-1#Ft*?$E7Vaw@|GT4&UgU* zKD4Kh;VCMm$N$`4kVCWN{ctL_BIs((WgJR5#4&EN#Ib3b`AYVS>w>pPS68@R{7OEy zvI{N*15*rp1INIMNf^xU2Q4vr7!^n>Xrc0;S}49k;F(Sl1@Gj|1ckCOr>^I8TSu(#iz^2@?X;rkD4t zNvEX=WG6(-+kJ4xJRYLr(eI57hMu|=-p?w`?3=5FKcs%Y!O#q4> zL-;|U45~sq47w6bj34FML~3o?f;3iJPW2}4i8wdRdUJ-%4v0dCRrDlR;9(?x3=oOk ztP%lMZWCrx7Y)pcAF{u^lSaQlXE)yrrnf7^zwTEccSVFM(*ag4nOLC3hCumDpzS2{ z!q!YCk2+@=KfC|6cDU{4nPH_@xn*^D$Ls2@uWNuM`^Z zRWqsAh6+nAWUkE5G`5n7E-83zbXt@8x~#X!VA`g+tnY->lePZtIp{YNodFSg4gbKP zdQrO0(6b0KfMF_$AV@=_mqPash7zO5Ly{q4*;`~U37CH5|9SO_=U^qx=I^L-sKm2a z-JvRUTP1)1QZ(`-ENq<{gYezUF+o&v|LQd?s0&MZ{-kEG{@{ws_f*y*RPS;l?*&FA zMh_XUhIV}bCqQemL+1gDe!5q+C*prv(U^eqmgA;V)ENh$o+@W`E?ZZ)qvWu3G8Xu_ zfIM1{hBw&Cmu>WHgYwodKP5wlZb7r!f3&lsnTuFajZsm}HaTj$Z-^7`6ZhoW+xId) z*2|yRpYgEvb=>O6*I8ePZUoV9g{92a^83kxh&={mbSz1F={S=?R~Fx3CgF!UNLA*l zk#<3aDjWq`k@6}LZ}_{72O+ZP9dnhS0iC@K*uIg36x0l$R2)e30l*(fE2%eaWZyUf zIE-XJJno}{{??eA#OeH(Lk@J(tED?r(kVEG1~jNWWafZ^=mT2f%1|Kl6sR(!`AZrN}%prc3I3(4U)w z*2lfjTmMPeS|R4@P3vTRT_F%_K;uYJfo4%nNbbs4H}QG`ibc2+fM^s8Nz z^yZWP@v&{0rga2n-LbFv)CaG(olGp(9wEKemc4|Q!q{eh?Oaj>4x`opdMeEh#e{D^ z1W}XHzS0+bAhRlyJIS*q-|cETcl7YPNp;b`Q=}*l=FcC1B4JMjr$dwEQqkW~biEDq z*3+H}s{h9)n0lV;Ga5}WpelYR#VSlDBk4lvlr`e4H8Z}`1P{gMRW~SoTa1h{O<$v0 z(leWY9jZpq^Pz>6s6)Mj<8mIDdMnTVn-z0))gR*IDZe3N#55#ji+<%~x_Bri?Gf45 zI6T3Fc72JNX7tV!&FG_?*+uXB<^XWQ^&YEhbIj5OFg66nfJPW^><6UySLiR)-ZQ$B zHtBAH+}`r{X^cutyU#sI!y4YUlyN+ajL@4Gz@7d_podP55AJ)EOCzGe@sQmKZL%tu z!ce+6Z1?w%3{zw$Bs_|+0473l7byARP?41d(@(!WlD(j zH3xo9OHq>j$cf~?c#Ho&vS`UNjuK-{8D_)1lepfEaav3%5$13($FIbf)mNcNk#6TI z!pF$c8R}bml;F$V&5_pB)HQ5DE#qj1?%u?_q&O5LD%U_v4C+=8#L{$+{0j~U-`sJr zS13rd-?rHI{^Gh{YS4dy{#k`6W*+cA@oNa z9JJG%wGx*$o=U+eA-r7t4Zo=0cM~ipBN3S_CQbr_M)^+{RI^tT7aY8BOvf-h~*K0nJ$#p<^w!nFf zsp-f>CO`lDs%may4PTy?t>^NApaoJKKR5t88xJ4l!J2h7N(`-L?eS|@kEBjnxMI-% z0aQWouW)jusH7T!Tnp?mzbcv5)EgAR(H;bB5=W|$k48*zI+&z;jvTL2S-#m-^eylgMfEeMMydMH*6Ayr*wt=$Dc_zHn=ua#?B52m>ye3(pK|(v6Wd{N?`Hp>HIw?gpaAf%@25 z<-;%g#-GH6rGv1_8~3Ij3kvih52(w%hfHpV_1G@TE3^Qq>5u#Vsr^o#>QQgyJwp8eL|D(VGJ7tE4AMEB2CBF z7gqeAj^S;)Cs>P$uU<`kLQ0RDn}D`(_Q~wo&m|Byzz{*7Shx54+Ae3jOH_JKtX2Ly zn>|5yW=G?K?6V(gy;6}V!YI8)j12%`p{pXzA`d-ORQWMF|BTK$rwT^b4Oc7#7!7ZP zN<~ckj(6AzVBpNz1c}woGY07;mK`0L=PA#l7Q|EkaDPX3l3HIc>iuXgf5e6Le6(^< zV&_{^`oW#=c$a6jXeI_=N9#SznxY<&K%z`e#c>h7+`>hl+{lR0pjPZ=I;g!XBSMH( zDrsjyG3-H44T*NAqVIa%gPPQzLJg#=VRQJ5-n1cMZ0WPqJ8$_76*t`@n;94schNJP zU$I24W(h+>i{eZh44#jk-SjX=;CjR};xCkqDK?q)8Z*k}c`1H850qYLh$Q4>3RKDj z>AMacy=h;#Wgxz@3ORi^wB!wkWYckGQ;Vq%+wL^zgk5}67Y5{6U5paaef}JrF-UP> zalt_E7jzQ^8s#X`mlf$7BhwT)#fu}}eMejyeuf)-!=@#bPScY2O0+6tWQ38_Ui^Cx z0Xa3-#$^o6$;l@Q?8x1y@bDOU;H;rHNOvq(?DLh5%QqwY=f{x~Mk$bhY8CXd6}D)O zWp?=*GSGJuy1GAUL5N14rnA7@pIS5Ja-{9TzQp9YHelXCZUleJ|2rlo4`?Cvylgy!~ieQxYgfL^5m~?&Ni&tW@2AeoQO%VFqW>1He_lmy<|jyM+1cx zUOP7Uj}uTPcSiAlAEZD*4&Z#4Ak)R8k_bm~CG=@9vFvwYWn1fl2S$rNb%IHTgh7*( zJ)-Psy#j{>5grs0ZLHk_!RY&uM$-mU(h}v#4W+GKOsy`YylbxiRQhCKBa~n4nort* z<$Lot^3`~LW|+2D(VNK*KcN$g7{u9a#4`W11ma4Ze%tyv$rwO_u>-|(=JS-~&qwI9SwEttl6lP>CPC_8RsS-|`8wObcA^k(mHSa$ zsGNe>Sz`=~|GmH?vDPqnu9Zpytfkl-^C;f@kIz^8qJnus?qu$l=xyF5SJU@ZM3;V<9is zO0wkE7h3b4E4K=r6?Z=Mq3&+w+^ESFz&+t5;X)Evy?X};F}&}3{DZqEndI-ZK2XBn zjqtXHU7ou#TVU1Vdqi!jOF1zFB|YmZ1n{Vyq2W{#M(kRn_rX;ZSvcAFxbMeI%RBR6 zY2EGMSo5|~gjS9eG%$;BcScLdSRi#0KHZyc{<_2eSi8M4f+M{>{l}f&IDqLJ^vaZp zG!}2>Xx1!)W@Pr^QM%H)bNLlM zD2C;JF4WgUjV(UwysN+GAVN9D)9RbeWH zW#?YI zt60B!<-Ff4;0fDyCZ*8RRrqbOEN%8Ajtr`@H z@;^JnsMC0w%o`KMe`2&dEYf5&_&gx=e`%dm{~uQrc(l2KqV%|TY#gS6JzY0z<{W$G zy_efPDA#SfUbf2*zt0Q_quG`}x7CNaw=Scd)~_V)u#GI7(Fzb>vA%1*?5zXWt~{%j zK8VQu*mra#p-v~skYgS0^n$LeaZu}<&08@u;-76@X`Dwp=q<$SxEG(m5)w>7SD*08 zDZX&_Hym*&^J99sm`I<>Y)#u|De|t)mGxiwn|5(^~xU zfif+Zn!QDH>1=<#FmvPxTeZ;#FBliY?BYMdW(eg_u$U+gmLPh;=lh7vA#x*X`zg!0 zc4o=>pny<*wBPxQ;p8 zyN?o^d@@nwL}8S$r#?G;Whc?SC3s`L(<+Wr_u6EKYp^O>jaW<8 zHoVOW*q?{G1mVYCG|y?|c`Dw}F654pBL_xaVVMZ-_CgPdvAb^xn;P* zj!U!`5hS<|xZ?eJ;XL%2N_0PYI}ql=fdt|9o0X5G^g8|%7VLBAn&>-Aer(N*RM z28BzZZez42d=7yA79&u8!Q|=2ap3GYt144h*`0WI8 zko20p0gyVF_eWiU8pmgX2co+o$3IOS|7VizZZ5 zG?n(1lVi&@sQT7fQb8!2jS)B&-G)i#_c|A)JA7SXAjFw=ct|pMNZLj#CDeHB-;1AL6eq{^%?s` zh%OJ-O~};sg0s*j##|D94{md{=F7bT3SWT%!Z!r#4Jo(sSx5x1V_h8cPSfS}*~Wcy z>Ep&cu))Yxisi(G)Y8U6n7S(t1V$cLd?GJEUZ+Z>@LOQ`CMBb+g!s5ZosrDlMH~k} z8DIpwb70P}dN4IMcq^U$Z#$~Pbt!~HXM2_nw$v$9MWt$eU@_l{5 zf0| z0N{MDO9xvQzq80%-16nv(5B@%28?=g8+ycB>!6YItYU3XUczER3tQ<9?B82eW zW>0e-(pdCM@4T6-9oCcZFkC^0D)v+ir7dTnDlKc#6c_!FVNaoM3esIRZ=V&VI(e1w60cOVJF=kD& zE3Xee_)^=eVT9TPVD_8mR7cCs?wXTm{dro%F)CGt-ovHlh~;|1UBZ`hi~qT_PguP| zgz4{aRxxl z`Dp^hyYQi`5Q~{GOnp~Y%yGvLlqY5lE`zLq`~{FGN+`X3SFG30kM0f~QW*xsk*&W% zMK+2@Ov@kjtdBA;Q7(I(4;tNBBoaP!6unP>uHeAgpC= zZCd4q-)>PtKfVM>GP1^y(iR#K*-XJs6~*>m3@DWfmT zHL&@}A})MR=$F+wMT_rmyMSDnq$<^tPwHgE)c|!Z^+oY!pbN0P^8#yg=mMY%-1f?3 z=JovhgKl}A%uw?#Jvn9#Jmi7C*YI z!*8x<=gc!HR}%igZPcp=L!1=wpa_MCbd)Bcc3nkts3^wtuA4<3YfRPYCdUYw$bVLrzFxwrPibOK@?@5sJ4*v)SHklGWh0< zNp^-dFH?}-I8o$=Jng~f{rPWvDH0qOcAp|lezm@oBD=g+KfLP8x(KnWUbVGTAyEvc z{Q8bp^sO@5l3S{H4QE{u*rhT%j55|Al6-d_Yi-siUdljt(aSdPVJd z!tB7Q+66}rcOTF0zuE|Z9h&7)coW?9IpU<0y~{eqb`IHF1onv8+@5$2z(_~yDW4!c zE5xwOOn}iYBE*ggW#4)oiWbX(b7rd&mhb!T=D)a{(Mk~w9Z9A3fsarTXaB^YtO6w& zN$^Gl%LaT^^veb*`pbQBwli}+{h&;)@=$3d4>)()*3|%Q9oKy^%_JrnzS6NiXi89< z7rpu5xp&H&`C6Ydl50rJ}lbNdb=Yc ztY$RiR9U*2+QzMW#9OvnPFNt8@G^Ph@AuyNk_n+}+3h5Qlme=O&}AmXA*U zt1&;_73tu|+u)3TH~;sK7zasNS_`?9T!IE{!tC0dy8iZ50JLHYwuB7nuZRp4U2H!~ zi`x~A5!=!Jc{rb?lioNb?Q>u;?O`KwjgVP3!d*{jl%r@do4oP*@3p&?q!_Wqs_6eT z2;jYPxqqx5P5uNB6j;l>39b*n_!(O5bOvt!F!)CS|F`r9R61Elg**73Vbca#D+40P zp3Y5q=0==>Q)HA3h7>TLc0~mL;W9}y+8Sx1t$cZ89G@L~We()-zbHYgKUQA7b7)!$Jk00(Iz8W8~CoHs0NrYB-Nw~mH>PcH*LGzW-K4a8mPs>eo>S)o= z#|maRZ=Fmw*!B0&=yw|WQc#)HD3bAJasz*iUh5ZS$y0X1msT5}?)AtNubTj{i?EdG zRZwgJXWnST*!l$dNIAaU;^Ug;s)isGltA$u8cK`{SkyzK*3x?~zp+7GfXj(}@xb1C z>kD|#0YshQn&pOosUqO*GvDz@fwBcOA>9T;FFLl2rNuO!lbACJD$yT_xrE*Cy&S_Q z-ZfNht@^{=Gd6_3i7>Yt+ifAuK;KgZ(>4|hk;(TezS_!-!@?^3v|%MqHah#yKK=rk zw-cw{_#V6tXGKk{q}BO%kJc0U_}30RchN+J&o~YZ=^=mUdF@<16Ds%C6V!MdGUAF) znwHj`?qKAw;oPAXcI&ylQ5?vk6>;wAiU>S^eR~s>nDfGnK7ioE`7_%_Msg5-l4pYWu{pB0LQtD`!^ZgSl4tK|YOV7myXz+t5;OonQez+SgV1ybPPu&>r=FSC)@cn}=_ZmvDBG<-6sqv< zh0&)+AY%@a^>LIt1CQoN`nf-uN7zEBEt&_k&~lJmM*>=A>5fi6j^ovsX2;t82i&rQ z`VLazGz^rUl{3OpQ-L+Bt)(Fqu|`}YU*Wdi;rO3Fdp`mdC`|_q2DHC%Bp?%ZcBt&F z6Xzl4dlwU74};>~k^M>7H}D`ZBKcui;o8^R`-}rO=1pfA#0ArPk$P`#>1v}lvWEc# zCGRv+qnhg)>|!E7TUMK*=jdzOBA0&`A$NPsp}6dK-*})|oxT^-T{c*X!MARNP4_wy zak!}=?myXktzeaa11FVIxk~~7yw_vEgL?u&7| z{-X-cA||_e0e*XnJo3bt-q-kvgV%+?YT}7kZ5FWKeuJqZpSL}qGl&ol?tGiG?(|J& zGdZ%f`?UvR2|HLYvH3BhBoWDBxN2k>vmmH~_l0c1!}iI~sY~pO+rCYhUyven20Ab6}S6g)ErS(?eVYRmM0RL?X!TMwD%K&Z|6?U7Degq zJ);x{h`N~vQZVX?7%YDgP=((v+GY2M@FKwr}-9UZZDvlE{gjnY79N@pm5wc6!h8Cf5pG zI>7V0=;06=3~KjN0UqN7Ipbf}e8z7VF-x`xcg}q9!Q@7oCwKkc(2tfDN36r2XNRIj zB;UM}mtR~@g(F#=rKxcz)8p7~K&Z)myTWEsaxmUYI3`iNX*<_o1w2GT=E!iyxM1cD zF&2GQwG8?>lqIrotWA@(U@MO)w_4UthAK5xbJROJpjeTWa_wuD~qgcvQ zM*^-npp#eFvQC@%;oWv`(IKS2FMX$DbuF0IJ;Cvvqc6U^aN=TPv1fM{N2I6_5c`&V z`CAyq?wep-Oa0d9q#;cX9Ve|$ArErGMDY^Y(`VT})&-19Y{lW(H#yzm8a*>FZ z$abfZC>G`Y{jWlBB_WH|{##<~9~<+5s-_sUNtri-Xne{2!u-!1D+^`npN||O==W3u z@)9Z*SES5HT5Ou$N=oLf`Q&ZQd1qk6;tjkzR_|-vW2h;9g!=dUWRN6>{GT5jzb(m; zeI{8iG3Df*tBO!@!&mb7L1;++w9StP-2#;h&I*`XdKy{+1RfP8=QW&-7Tar2WAJw5 zUhS{)hTO!1r@{eVR|aGgcOAVGdSMQDV_o1{$LIlfN#*M4_!(zXga2Cnh<|+$)TB@7 z9ql5K$2U~myE{3VUAy~S-v`BnV_7r)uyH>UYbqQBFjw=3pCSu-P;qOEjaw975bEgD zt;gG^k6Eus?|PUw9JI8P5BkVu#NTBU(5;LHKC)YkU>L;>@v{n#ioMZRc_gePG*QM! zBfTRVU$YO&)hDtIl5Z_lwi~zC*;{x?=a}}JjNFX@Z((1$Je!;B>6-fFcO%XcSU~kZ z#NBl&Jr;RWT{D@RRz9W5pVIjt-|4C@PNC!HCMJbkz>!XWcD+~Jnev`-2B0>C8JWNA zE?Il%nisZLhSeL*uSb`CMz}s|zj5DbZ%wYS1t@0)Uf-^Ji>#fJge&S5xF|h3%7wBz zoJDdI{UcJyhn|PUL`3$%WmC-37vXZ8O8-jbIMi2Hsea;&msK&`xh~OtM3jo__RJ2k z(UhYrQ@@CX7+LIjErE}$JbGGjXo_AFChYG_N$tF8jK=`nq)@lFwg`HhOqV@yuh-8} zNh_N^!b&hkD4|01*5~7@o%4;C}i!79D^3LR8YQ!S625B z=YPL9Obs~slE|T^?9dC97|7*@tlUKU2sOsW-2tyI=H8jn(IYYfkVk^w-L~eEOZKpm z!S39IY5jW9nqP&ET>BteXiaB;L&f@$t-w*RKx$m1E>dkmrkmm(!&u4gb@y;Nj5{kz zahsC_SDDRf$cPieGz=5u)i)!5I#`-pg+9bD(DoPtbD}r4;9XA-i>!wM#U7|$tFhG> z-}E1gEo$gu^xOtmAXM*ly;(z^=*mH>l6=-!nD$fKI6Dy|lTWuVwRg=w}J*K)0+t zC3(hiIKFv&)W=G~$#$qwJQ?D^cJ^0(u+LM%q=lBpcJiZ@VNcoUs${N%bhcj-|8>Ra zd{SYqvzimH>-M}o%=7LPSo9>*`U%G_!W}29M-ZKGu!q`p2jgKT9H_}7mnT*=P;GwO z5Hua**ys4N(AZRDT?)Bs<%M}Qoqx_q0Lk+WRZRVNNek6u$6iKNjLz}(`Ug9ndxZR~ zks5<+KS9bAITD21^o|;$b&!c)*RwYZyQ}fop-Ccz4tric)A3YL&vNHg)Owjhe^Q)# z1yaiW zH^MrdR6=4rvv?{?`Q4^Mu$K$nk%li|GYya;(svc^j9@j>3mNWElHh{rU4Hn6-!u=@9y*4t%T~8DJ)w7rQUlhq_J|)@Y`TmT^UGq;n zI9`LqFn6!&<@h|STiN%w)o=yZIrA3=0S5qWI-O`4X7H2Z$v%a{ZJ!6M|MKNR_B;trHA_e?N|OThYYhXtBwjOeNhkst!jI>+%FYRR50ASdV)&mV z^J5%^obH%Q7+QWLzK$*YCiA9#o{c^>3dY3PE#Pd|2Eh6K2kh-m>t=`zDg4H%gT zmSd>{6z7V|4}3AMCb%2>=pp8ChbqIf=3gSlZ<_YO{WfJ-Ykqia^pg5cIlvIpe%3zM zOwE6>TP84<$ENYwL4#j)O4jsbmc0GZ5}u-7q=hs|=Od+KvG`2Z7h-BNw_9y2%wwX= zUdL<&HMzOz+ugrC-~W6ogz=Cpi`0I zCb9b_ELzD%{`8wqrSGuIvxvI&N?cjo#HGDykv7dsH>%|KCVxE@o^`Zqu}+?zv=`Yn z0t*57ASznB&PWB*uizVoTB2xpv$^i0Q2qDrt!`78wP*4@O*#*3t*wvf`0k^UM1CTG zN^N~9(07{|+5ZtjJG&<)e;ON=Pag&pBVSqk*fFMxu@V^(%gmbsJZ{g0l*5X)yE0?) z$!S7_-LzkB2#_-MXmocLK5z8l=fKx3RCd2j3sfK8}ul0_w@ zicKPw$Q21S2xTD*xJ+0`*4Bz!Vi4XnOPKx^_UT$M_auW7$a%$6KEOKNJpDBgyB`h2 zM+3HK3QM!}Hx$NjzQsi32lG3+Re%-+0FfOM-NteaBV;OH_Rgo4Wn+1uJs$M)>pINF$OkQR%n45TKX>K9S*v zwI~8~hKQaZhm*cLE~Cj}!W=jYcY_{Fw?}f)=GVqiZyj}){yutQxam$Gx1sdugldTr zv>?QrFv`>5ryeh}?$S3-2o`~2H_QkJ$!Jn^kVib?!)gC( z@T-P{fwdXE1W*mnim?x3_RehO&Aq}WskrO_u>~xhfybu&mc~DBU-)t~)1A{APrjF<`fXt0aT ztTP{7lXA62#z?Z;FeQ~~!Rj+hU+sjkiAFzm9SxZdYs@({dBRxFdOFe`#x4V$!9auC*iSSB?co!Eb8nkxd_G zGfZ8;a__+(QMS^uZ)*T%f1+=7_&hv#EyOINlJI8_mA%Rg78#z!I)ryw-Tqnbyz6ZF z5Ha8W`5bJ~ei+Yrwrcg2@!jELxh8b9;1?SC$$Qy#)0m-;zjRHHYg3oB*Lo6!9`zCI zbK~)`?0LH0ti2H_+nXz{b=M0@5a!OG1Hi{`3?Bd28|iHg;{5g9K;o7ti)8aX!@{GW zNdQ5FjpbeTfcZ6ts$woF$e3IdgddW(#{v^lk}euBR-*%k;&x6~PviMKE~A~I4234h z#TbdxEr1%i8z!)Xh8oM?Hxp{|H5y+5yX8-EbcIfqp0TCVIRbQ=n4n2O8b0(@RQGcx ziLTWEs)P}8FG103wArK#BUA|k>Bd03-%$1)wG#cJ1K&Rpkb|?VN14DT$)H)^r_;v> zG#=$7Zw$)SRJ_U@z@F*azsn7m}yJ2@w z425^q9%g|e#d$uWpcYz^uC;DJbY%b6k`Tzi>Dv9f9|k;QXmb6N2HZ^oWJ2n7H zG*h0R)?M45g;`aDC-k&LL|Y%&8Gzg?d@a~aQzJ7N>O#{3;3 zS+^m^{st9dj93{_@xNzZYFjpJZZ?|!p7rx8?y3IlVmFR%HX_?}A%6zbU5*Q~upTP8 za0Ngg>$6L|VByZI$Y}kM8l$jQ z{6V!gjya=m4b?eabg34jM^iGF?7~qr73>Vj2@IxFdcX#@npPE&zjiyGYIfr3}Ibs-@usNxz{A z8JG!hm;nDe(xaOy7N9u5z^1rc$pS0)XA_foB951(5tDa}5dtI*iiYAYLijZRN-VCrW0I_pnle6%}8JVO0*ZRpkiTMcTo z1QA`*34G6a=1=sm{xxT!xc&o*HwnMeb2*YWzfT2cd;p1ILkW7WzM_skEHqhm2fX+c zT_c*?aRDf;DmvmDez(foH?=7EWA36Zf+WIK;fAy!H6=BY!xc=ndCb^v1mt~t+WCuA z$!PQbQ6^!IV6hsHA)Ds_bzA<7Kgd=ae0?>l1{mXD9y)N^*AAf9SwiS~`Ou9}T!S~` zaY$5QEH9d|6xh#*Xn9?613yoKEQkCfM^>)-C>@=C)3bI(+uMvE`2qgb+sy7L?i+<) z(1p&C1+o6LCm{dlFfCR#eM^JO3(-BhV;~~JyZ`MFpoFV;u*UyfYW7#x$6EV;cQn;> KRqIr&qy7);!&1Zm literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/ItemWaterBottleBag.png b/www/img/stationpedia/ItemWaterBottleBag.png new file mode 100644 index 0000000000000000000000000000000000000000..3fb23885a273c51465ce784c100c50fd59bea75c GIT binary patch literal 13797 zcmVysPlbsv1tH*})`OoJF=33Ha>EN50(Wi2V|i{z3jPRX*ptfb;g5+x}o-%_dMgSL`? zAeHDyp1z}!f^^`7D3bHQ`#^ZT9ODZmS2*I&5~wM#VsA3%~M2*WVb3QLcv?>J7pPE}P< zWfeT%V{Vl#aC`?w&WNoybrW3I1zDDvli9WnmSwSd&-1`EO?IZP>+zlWJ!GTN2)a+Z zZ2wQQDbM=>WHIpA zPJk;wpD`w>m;fspFNP5bD55nB$zb;x38-?B z*5QrqC)+KMphfjwS9FjSt_~so(fP8^$MhT3^Sn9q21#StJGaS61O+)g&trFxRjXA_ z1X2aGxJ0}#bbSE`a0*-d+%J9ZtJtouG*{m0Jn3wZE6 z=UM`~Pr9J1`a*kjgRNgn&oy6a-XzEFy>7SLLf;@|z;Ww&e%~}BRS+eDtk>(oa5#K! z?|E(nAn?hgg0#>+LpK1We;vE)Q+{4=G#cbYh7Baby{$)Ee}TdN0oGx5VHk$b>ytA^ zBoN<2HW&eJiO2{aq$Ge8?XPJzZVaU1-DyeeYL)F?Y9S_)`FAyT`H)ed-Lk* z>aSnBcI~%%PkZ0%?exA+jzoAT6JUIgwWP!LlkI3iJEISk+5d$};m|Mm2G;7j&Rp~@ z%K~TYz+e}NFyN}-_|92I|Bzic0j%XKP`liW$ALFqXn$j+`OB|==}XtC-)*-+GAa;` zr%Pzyx{@r*FV`>E|2a7l;iHi=`lIePmWb^xm4_FqL};4EoNVRV3L`?V-visW&+X3V zK!9duEE@}H07d7Q(HQ|6tE&(^8-QG@La;yJ=S32a;2+wIBzW2M&9@rO##=bt=ytjr zt#<2gu>UCX7s9Gb)wmUXEMtraXHABSF9D~sB?SF?dV;_gEs;QW_Zj$dlt~Z-N1b&O ziEy)8soux_+npyJ=FZ6J;MjehA4!=nfEQM?YRriM?T76%yX!&;pc^LCE?J;2aI51b zSXj&TSG7v*H3*YBEtger{b-F|N9fAD`i@83b0tPsO+GKimURQ08>Ld|x0^3DfAZ+z zLOM@_gD_BBRNrk%)?w-l@ z7p?%#fwR~KNluTxfFwec0gRH#CJ1~@(c(Tt^URQNfB^+6592|0o(zfLCZ)nc5`6xX zufP6z?7z9w?Y4T|?uPC;8{6C6)-H7`h$K-l_nqd|TXUwg09>27qkyMhQW1R2hX z1TVY-U`-a?mur`oznK4>K#xnnEF%(-JAFrp=OB<13HC%=E!}f{KxKIK(2QIjn$&1+j9+&Q`t2h3xUbadgs~{_C zvY^08Ak0S%$XKq%hKj{nSJA=KOwe5*K9& zkH_P?+uPf>^3jx~Bckk|E{1O4VhCiAH5uHI3s+3e2!7N~v5?e@N9=O7TKy;F*vAsl zX?3S-UxP0RkRp zIjMon!B4A#sPP(RN{D|%0yd9Ch{0!3tjBkGuD} z-R?&BX_ts_=47C(CkwoY1jW;lKtAgS9%Tf+q7^e4Ige>Y2IyL~cIm6=^~zEW%4Rvc zs1P}xUBJII`0OKPId(rxG?+?>@8>jG!8g)7i3Hfv9x_Q$U=sK+natGib<;3^vC(M! zj%k`}*nVy>9uSL$=$ttr#CIxqX1+vC!U=?7$bZY(WHJGx!pW-|oaj;^323QQ0u{f> zw(Ys&dtn5qT6Gq{LP2FgnAbhu1JCt-@e^z7Z`JC{AnQdiOXi{TDG-GTg0CjvOOg}^ zvQQ|n02ZVI)@PYH1-clKMa)q=Cxro+Ua%4c!yisyL~-}Se|-f2c}oJ9aCQIae%_Z=Ss{G+!@io}#|sk#IuqXfNY zy}59?uo7TaYbUyK?6AaHpJ%PeRx$!#jMJ?&;Tc23qHGEL02PC0lZ$idGsswgjfim6 zI_UdRX&4VcGApbbj)w8Q?0nCorikFYyj))<{|b&j>OSe-M*pwqCn^z|sX^dI@~*|vjbFx)p#NG1b#l_(}bX)2{36+fSs(o%?fJeWRi7W{w0Y8V59C<**5^LCRxJ>pXRvNr$ z59)sWGzzXPnekXw5FEV>FdA`3(+wl@Iqs;R8S9FE3CVKl+SO}6kN$7Bx3=Hy?sUJ2 zKYbJ12iV3N=-o~fKON)XxDI$OC#GJ(F_uewDH~TR6&MbOaP{g{K$U^bk2aqZ0qAk% zYTP%<`a*lh4!qI0+WeWhH-x9qwnCx=a)BQ}q{x~N9uk7UXM}N6KapyfCU-#sca+(! zh5Y+nDMoG6Pa2JPM~C6t7!d|G3<@1MDC|KI z@EcrS66A>jLBYr6ygVHuFjh|d&Q}^&8aEq_#^t^j(ua+>Xz8dtCU+=+G)FpJQeNRuN10qup^IRajQ@A|3q4+Imk zM&NJB@A7`wgtA@(HPD%p8U%8(FQo)|TSpR*uXT1he}&`k#lQITex1tWO*YM0;cS7z@+5;GW8`=v=C%PLdU!PFv0hr;piPK$?z``lE}h$M0@ z=mPv{HiGVyIh(nO-dB5U&I%e(3mY@v)$4Y@jo~BdEfQ(9K+Rl{#^iT~6 zprwEcj@gq|09n&MWi4N^W^S0^2TrT;LGrtlPT`DVgc)Fk+^bWF;GsOLcup`$WG9G% z&oW;SASKD903JfEPUkQq0mxjAZMh3Jk|3x8R1X@=)3)4bFajWeqs;e6^W$;%CwC9c zojU=@(h3k9Qv%Wwg#@@P`Xv9y8cKT@NoF2%p#n!)zSalAai5mjN1z9(tTXiK-$UTr z{{17trxMVBRj?fXU2XL?BLOjPSnR?eB7up&6ZmM4dQZFGp-vd49y=!iNdBkUxe`FP z>X=U10L_M;`EWvr9cDohSWV3<6Zl0<+Munah$X=*IVtiDHkWh@6oh5#jB zj#8Fqyvp;M5e+v+!IYxJmQpIk#<<@_Vrfx^7koT(!dK88QXyb1e>)OT;pYXR0}gah z8FDc};8#np!Kz9ADRBHq0lFQq_mKe6cv#$IexvfQLA`#Brarjw559OuQ>zPM;5hue z){p-N-v8_O5B+|w1Ym%h(=*^GQwwpn-Kbuwuj#q{s;Xwj6m&TjYHs;Vk299)x16pI zhlv^FS~mhaKAXrFMs2iG5F%Ytdfx3rcdV8_4SHzC;2&pJ^(w$Fz{=_xJZ`t{(cEZv zuuweZBL6ZXz%)B|0*q~YvGqxJZDs9~Ye%hfT^F;Te;j2#0m49u2y~>}=fF?b`J+rr zNEzRiw>0=W?(IVaAn;eqpMlr(&#-ZO^Z{#|#aCFrz5iimJ%Mj6U4@lPJOoI9jjf0G zF{Sl|;yH3=6XtwNK)DKXE@O|gz~d#LTC3lfYdr>@BsdRDAb^gDKvI6lQ2v7%B%pGT z2LCt`2%Db$pJ5I@2fsb~kSPHf_0z^OAFZ~u0xOpp0XEQESFhgyZ+|fijj@Au_8Lx3v&@|X9=M5@44f=3zptM60E{&8_c zVL;`D_Bl~ozjEa!wQBLOf>3tnCEmpkJ(2`eqbZY#4Dt~rA*UEqjj)zxzklbTJ#~J| zxeq_IZ^4~|8mt+w!&>R}__x){YtSBkcxcZ`{TBfCfPlXx<~TuSnU;;`-T=1R_m5nC zt^^=ocpv}3wfdDN(?0LOJC+0jd}<-e(3l{TY|Wo(SQ6ZPfYN+82K;d_fL@9Kb!`=T z(22)Hf*x=H1p(TF4-SD(*}sBL_UJ*2z`uX(6U=0 zt(PJK9JfwBB2xndkz{(BN&u_dIYQ*tc(`AcQb;erAKTl4p34dFYUN9?jP=)7b`bbh zyru_RtZnV{GC|-UnfVUJu^! z-ez zt+LjbRH3P_K*xE^yua5uyteTwYdhV$U+-*po-7i(!LvSVKk@3PVDm02OX$s9e{KXA z^t!AKykMbyBL&uw0C5RWc}a*Z4EcF!fCUNIeL-^HQDq`+!GwcrHH^w zML6}`cWo-&0IwB36N67i;J<7CfVJfMCH{S#G0)U1WdZ)3*7no8U)OWrf1K42crwcV z&3hjnyZ&4Vu=48b$v|D~1Eh&d;IF6WGz@}f7@2hhG|O~N%FKrmKmvSG23Q}-BMSuy zBLxs7m}XPRpyC-s0#j8%!+BAYYw{XX0nkdBBeutF=AHf33=t^%->^OpI+*y|qs*RW zyuVeTAq684evVRUca{}n)E15b3QGn((t7iSGY*r!JRRDQX090`>iaNMd^&=I~ z6app!I`9}EfzafMjLLxT!7L4EoBNM)j3fvP?24ESc~ix_#Lv(am7T##3eJ@Z z93UzmpMie?9Z^Z4&;=BML*_0k%wTv>xh_gWj9t@|4^HyVs)-W4mFFhun6gBEPH@6UzT zxs-tMV30gei4dC4Ue+s>Rij#+e(r&T*_<$jDFATry+{>Q{CyVqK{|N!AAw)UtqBwG z$q4u`RVKX9Ln27HUyey}R2iu$uQ4aU| zp5t>;Tw@@IIgkUqmoiYyOF1ItjgdjGvHp%55uo@a{(Tu00PSAn%&cW==9z|~XU6?K zd+zK%a{{PEjmv5(;5@}-2%_VQ3n;-(RQsgB z1s_SE;hpSOoR^6lzQypXZ>a4I`;Kwh4}s^y!-v{fB)`}e)OK0v+dc@o8%JA-rhR& zhFNyD1Tf4T_zT$@2I@^`Z-6pZJHsLI7LW35MWSotYId(pdoprLUb09g|a(!JPk2N;|!+>EnO}sgQLtxI9bWS z+cSzHsmYf)t_KDJNNbFe0j6n!gy*O#UnHq`x#NiC_w23F53H5uLeaBQCE)-5;}4%7 z0n}0@3aq=>#w6L+k6eS92}FdHJX5?GV5vE(-)<`NHB1ItKCX(9oEPpzz|84}1^R6;~%r)o08zK|ny#4OiZ^23IY)b%{W1rv^DuKTaQGK6fr1lK> zbfQio8K%}piB%F3c)o{Yo{4I7z88T=N|2WS_=1!PxLwaX_H8m|x5#<|-zZ}7Da`{u z%l-}OkL>ckl9898&Mn#dMxbXCSC@25A^8fXu@~04=$uq zoLv}#X(Rv}nh7d`uM+s^_+tFVAW@n$zwmMWJtrKDoV$)QW(okM*<^u9c4+U}(E8y0 z!|$Ba&V&GJxdQIqAUZKP$q_f@W3pdPNpju<_`=d9K*H>I(1!&_QN)u)Xsl|Kx2;9a%zEkg8c1ZITFh#*$o8lVgczV{C4fkvi4x$aKzH5T=>d4|;cQY>1Xk5z z@I`AH25+Oxl{9JUn}rGpfVJpN1pa30?yZx?zW;O^PGe_Q0@9McpsmFv;3W4=j#r#C z2^1uZ8f7IBfhxA=rnByF1`6;sEg^srOLcfmJdmhA^aRj#(DZ67O|m2}wqNr8K7I=8npOh?iwc6EjQ&GrWRR~FqAV36ekZx`MhFy7=upHCp9G4Ny>X1##~H_b@yv6Vs& zz8oJC#EL>jrAR7BNYa40AcUM+ld^B2-`9%T{2$;a-Oi&nIF57D*fTp70VGLcS(~xY zoBx1<^kw}2h8Sv7$V8bUDbw?UNDz|Z5ULn-n9P=AVS)rfu6hs=@;9ZyKXgAHB29^) zAi;6=xZQdiv)@~Y04du>0-V-PMF6Uar?g+4cOlhMSv{t_h@clz85xF*sMAO=E&Jnd zi)ubu9{eE1oIt1sX1MD|WgsE}nRJAxBlzFidU*eBXU~EC;r`qKvn-3XoihNR>~soH zsh?*1o0zd*a6o4Ry^KMw=-?;@2N316;EzFyRDmRvLQ1Qt4W(4koZxz2)O7?rl4q*z zG%H6nn~bfRM4mE11S%^k%04hRz(rC?2mEXU&j=OX4=22p0z4bv>$&_M7s;WeYK(^} zrD`%STR0v^HN5q~?e`JLoTml#6PE~n|N)rjs(!q@qN)w3{1sGJB z)%QSTD@ro`5)`!Tdt^5v2M1nJ6p(Na0~G&hxGyFZfmw*&M)Rn4F1>?v-WT7;*J`Oq zdTCM?eB7(CJr3@%JDqm#N$-8VY@G-Jd&h>Yd(WEyBKuEfH&n}dQ>)c@VEvS&DhXIx zaeie9X8o3vYymvoMXnZtBjudT!|Yd)AR?n>SwhmgnYWU;(RZXzIiy->op$?MormqW z;|YB+1s!&`;VkV$1kg@LfHyVET1$eI1Tr5~GS72R1$dBLcMP&>u&i{$>4%3AU~D~t zM$05ACEd{-)9#8bC+lA7%)s~JmdKP|sUhHjpWUm?!Qa^}goGeV^O~9ecxGao7 zq+`_79YL6Va}W?QL?3^{eL?hQIi(yPMCW12(4q|?sz8v^fB0h#B!SrrJP49}4uelupSgk%aPS+K)gX;5*$hmx-%E3f zq{@R&hS`4$oBL9#d@W+jS*--L3oTmbaC=^QwB#? zVYR^nwsnvNdTf?6qHC~B2bQuTgW2ze=pEQn=E~U8+d@AoL#)=z;3AfCA!L$IHJYge zo+s)$_!IqhBRMlB(bj6uYD2)BED+$d?x&7~6bMqE`yJCEh%nvKJRpmD~h zG$B<1uw+DKA+#+`NYkL(%i+C$%8jdC5Q7!UQ;>t&2{&1`7Ek>yCL~yn}rt z06^W;xGOsT=Em!Wl-Owm3kl$P6_{n>h*07kQPYE5y_X9TQxBm6>d9*OhUi#jYoU!) z0?teR$>t(}dI=Hnc`XV-U-S;r{eN7=Gjzp>0mHJ&Z;t{`dfc7xAm15yP(#dXh6a~V z3_f#tiOoM6j^S^2`8$}tBUp}{y-Y$5u(}Q$NH>hY!)roDkW{9UD)_wXMeF5ULpNFgZ*0crjhuzTw@CyzN1KZPa>+c+9bY!<^`i+u zS}asxS^)MO=GV$Pa{^yDk)R!whi&ID83H7aJmpLRKFRPbp*_#d5l9CI=k%z?Qw^V0 z2Hbi-i7nDV+kM`rvjhip8-GgJdji#zyPyK*0iJ`&v+4$fXpna z40u6;S`mrhxG@2OoMKSs3ngIv{O=I~1hAo>5J|;%I{03lwH#QzsIawUT8;=~1YcHo zi6kO;uGb?4IBD=kg8`hk9ZP^vrjJb5eRq-b>!8bT1X!5e0E6RDw-Ye-CANiwYe7)Evv&eM)p09DUU$kRmiNc&mz_2U-BO2FiqvPhfSa?@aN;4!ZjJ=hs1 zHMNTb(Ufe82l>l#3Xosm9z@xVB%>_Wih5i&1PRjSMdd`B@>~Dot<90Mx2r1r+c@8k zNgyd%JJ@~<=WVkIfVEjOYuUNQ39zJBEjAbr`gmjwWDII>Fy>dJf<`G1<9!CL;??6HBo?w2-OIrJOKpwqCG?p zfBI8Zoxg{`r|cKtOHpQ1_LGzRYvfUEJU`44h_CN|{P>aG+4^otH**1SW`-=BKe}gP zGYO!Us)r{hb1T3a2K$S;Wr3O}(u4yfQ+bi_qlr|gEUZq4yc~oG9V0@ZWsf-`x;*0tb6Y8i4=w<~w0k%~rAn*i2P~Zfkc}7rrG%6y!Q$u(0&8#g* zAQvbmJT8OitphLoK&>}!*VKg+6P#$jHyVLs+i>2d9J|7I7CccGy*2dp%H;-B8;$tq z{bxPQdIy7wWdK{bXdvhzcMNJ!NCHMg2vUk8N9CvIQ0;eN+2F)_14%|CNE0D#5-LcZ z1R~?*NJ$8MHm?fcsgLK&5?_aXdXFmc@o_fT+PpX1+Jt>cT_}9ckb~a6a~m$gW)eUy zk$mYVJ^LnQKY>p^=yutpTC%{~=O4)wAZ2tpi7{P*hBYa7&-7gm53 z*53Y;KY)v{BMBfGQSA!c#ZHuYpb-4^+UjbY{i3zE6IqirBY6P@lV$tiD#%JhA_J^R zD*$CaBY_K z`EHBmpYDwp3tu5zEZ(QIBMH!a=`vI?gHw_|mr0Rg*MFu7%U5b(*J{ac&${5$E8vWh z^?LsNbjcy$r7ZA(HL|zoF~18VxVEH2!_>ht4WLl>LltZ{fYnP?Xj}ql<78(qIa4#T z_Z27tX;n{2JXU|K02=!ynez(a4dX252gs48AUV)IB;#l_YC*+f1klUY!l3jY+<}WS z<+ugz5q0$_)48m#Mb1DEFY)ZBRv)>n-a4ZJn^UDEyO{ae>tr#8<1 ziRdxAXT7}2=l2GS#qUW6?Dh*lfR*df2l$H}7%4y!tbR9cgJ%sGG+$*TARk96prt`c z5y0IaW$G_ki1JS0uT(jx^^$?Wk7EMZUI_2?ldPlcCjyWYS(+6SnpJ*ZXE1_JD1&ow ze4Uo1Eci3*9(qd*v>f4&Gkg(Tq#a3s&iyu%#jp@&<|l>X%maI&2i8*ckF|ogUR$bu zq3^nH(0mPRGLfJfaDdHgt6*VJ9U~hcC#unsi>0DcL2$gx@8yyXrd|Ra<@w#65j2Z3 ze6n7Hs^-A(z=p{|q7?lDBoQi1KT1wF44@$guo`i6RX5@BegKb$$)2rAPO_yep*1C~ zP$9Tc36t@U%BA!0!|&-3!~_5(r*OxZv)hA%4{fmUuZF?R?$E)-AZx`WGt=V< zm%@+wyMwo|eOWj3-^BK2|JmRs3zVG%m`HGxg;C~f7~r)0=k2|18?*XK@@|h4)>3)O z4n`y9!dgA9I&1ZWcq^z1E0HSPL6vCeI&=|C=5s0_fseL79t^(W42SW2pw3nd+0TBP zegER*pA&b6Ij#eq%QMjPJkSu7Jq(aDb|8pq^LT&E#?HP2vMj@JZx6Hf0Cc?whF%;f zs`3tk|F!LpcYcV=>!lLY`--<~!)UV&g)s+2ilow)a*sefC7C}{l4Ov=32cu&C?miX zRfeWngi29?J*-vR_%z_fS*^yEKr>40;f85I5Cp6>O5AB|;+ViELjnL2010vcj^nn_zgFD0 zf1)kbC`EpTh#)yb2%m02IO0Um{18GcxRVHUh$;|~V1g1(1Yp38`MWBL#K5QePVFm8 zMW|^qi~~*p_h27f{08zO5?CtmbNgeL5n+N7y){IYh)Ru(`v~~kw#~+$tXCNDOPa!n zaNVlF%Vh(`m;hsZYnlKDdwcKL_wW37-*rdmKt9HMy%`P%V+K6Az4;J!?tXA#;FBry zEE?^P;7PZS3ZR3gayj)PB_9nXFi}FO3^28bPBgJrgMI` z;}3B7PoMM#zmDyCmE!;L766h)Uv7eNxycW*nyHs);26oMJM3cyN2SQ)cU#!q@sNm! zvx!8~0u?$DSv)KSLl{BbNa}j~DXv4A?%E^RDx2UTd7Og)dbrkX=wOe>U`Hk76H6v4 z4By)*1~57Zq33?3pR^F5KUzjIf|))iU#@qBHQz z)iN8a>I6n3XPzV9CLat3YuMgI|0?>rw#Q40v(sTjknt?->gv=3!V12{8D-|~U}o1b ztI3zKMAUQ*-rd<_zX>Ar#{7MP2qPp9Bf;JXLS2R)626X=ib(KC4W{1R9*pu+_s}=w zqA^(r0YB*uw_acZkP!*GT@02y>zp9=X1m44%juGJyy+HiAHVZ| z!SgWXB%6o?Pr7}Ky^e{;1LH-QcgH-S^D01yq#+rk^_mn=K)a)T=MP3>=l?;!S*;X* z6PMjIdz=Wvokw8p?m+G83L87k*OJ2|1gDY$2-o?T?HzpF&c4jv+cZ_6mvynWHw*)Q zp~2U8h9PU)2e}9O*`ef)St}QHbY8y)A3wV1^gA1R8Ox#T&i>$Bfzadt1|Mz0@X^J~ zKbdmUjZ_W*ET~zv%)Dh3Pow}->?8Ew>pr!A56ST+_TMs1gGvP0TaTGrNP?iV16uPM z`X>&bu(S+X1ek{;Ais_MhU38NHU93-(1B(}XHIt6l;iDNV;8n^!VtO+^6U_~H_({^ zXn94-TaHiwiA_GuW){>)Iz5zL`uLu`hkYNFK>-8|49t?jU;qa$Pc2n5c(zCN zw%6-t)+>s_#-7jJr`GdZs0v^6T>porS>m+^;F2>OfHcPYwl^Ud?y|{Ah!NIH@f(XW zzekHebMf~Pp4r~pW9>m$fX*H#?4Ij`83DLb;%&nyK~v}bvLeG?7(zi-K*D!U0v}ry zp5FQK*WA6`cW6y8kzg{J9PMFtEENKH`oWLE9qc|A0w||FfXV?2RDhHG5w~`7Wvex$YO(m`Knh z371s3YGkvR2tfWWl3Q4C;IJ}4@;~fsZiso$n_U8=LN@0{B>#^$&m~^-*r^F1NbscF z=UHa=*_>rrQ{--OQ!zt?1wjCNP~Mjn`Nx4D{Kwr#+n-vlnO`(b^Q-vtI$QLt%N?zT zq#W0pV63dNv8EW{_?!&2h!f+X9iLAm=pc7DRS8zgoCFmt2~MN{Rk;9L_`4KEO`a5B z)O+?l{LYp*L)VSjAC!y9$Qhjl1ShsLApqI_J_XW3C9p2)?FXSByw`o&eGi_(hFLOi zq6&Sr-|envALf9w)dv0QYD|Q*$yka4FI(sbUI-ub9jGD^DwCN24cxuKH_{WXJ6i!X zDNz@9GywZy`=a7C)y|9nWJCfxN+_lP7iTS0q2KLxyBk3m+_Ww?ZsOccBm)?`y?7B3 z!Fc&qtOG0YoUEzL1DBH^m?Vc15e9oB*h0TrHrbqNR9LHFrn}B~Yk&Lk`{{>-VKDQd z?s$+PfMX{L^gQfL2|#A!2VF4uX(K8AUHfU5YO)~0=h15fKAADVfOof$1XmdmWQ}K} zXjO-2FoB=8Gzo<5+x9zZx%%VGr0>msp^}t{QTOrliqrWKfQ(4s9H8|24%S4S&3RFV zRTUW|)qt^gHg^ReC4J03kJng6gr}YE|5SDT^EIpXCXUJ1b`JV7?DV1fmu?{zzW zc>Fla@{(DBQYp!#-F_cDL`_o_Fiis#MPXyl=ROINnmUeB|MNSh%Rjm*EHbZsr%!UB(7(C!$7i*XB5Du_vU1AO){}wWOn-URV z@T7BZ=Rxbg1it%hg2bEGC5hLV!AG00^TCfV7VRl^E((yh-m|0*BZ5$0Zd~|>A_0g9 z|DoU<{5KrljC^hQ;QqQ;Lqw>5_7_;+xXx9d$2or9l?JKTdD!;m6{IyN9}mMTxX?Vqq?%nBtqX?EQ_6G3wj^D z7~qpVR|2GMII!Wv+wVbr`3lrg8J?3pj{Fvq;7ugK&0sM4EgZir7HDJV-rzCMelka| zEOf!BzYVTx;7y=0Ep(>C+M-m7l65K)p{66;onf<8!73&kLj0ht8$(sInp+j$D zdHMedFw1-#Rn2Moo85w@BHFb+?7Um)&HrrZM;0+;`QuleEF z8UN66oZrX(e|oj3-j-##6$Alb3&*vNpS^C-YCZ1=XY9ozK+Ze_+D0-E5!9j%nyNjo zr@Y&@`@f06ULs)0$&PC?2mI)VupJTmMKS4lKVV)XBJ2-s7>!3T+8@R9sv=*={ipz} zMPQ#%c8f8Y>$;h7{&zA4erM}>hH$FA@CuMOMu0IVfN7W@6^j>gudeH?C2%!OW34b6 z6A6Tg5+LkF1)uDvMggW75y5lznadEexgh5-i57>EgA2MwlkP%y#R?$F7&Hmb&>`@7 zrqfu=1J!(VP10EV?q7cIg$1ANr%nO#mX=!T>t*X)?hy)*w~}50P0^|KH-^KmY&$007AU bwG3$>1LPIOE|)3n&Jp4H&##YO(CYk&A{Xg0P$(+#jK6IfOS$J*t;)i!Hj z?w9}_YuptWW%(XYOg}M$qrwNW%deRao6+y8s`fo*jP*U1;dLBNKEcIff$~h53!t{X zHtx?K3XiP-rYp1ITn>moCMa1+FnH`qA}}TmC_gz1W~+&#HSUrOgvUkzilT6fHcHbl zjYXe+axVDcm@SwH7b1`yK)@&z_^55HKb9gm@d7BGnc?%)nQ552{4CFO0%bPYw$-vg zHS+u#qdd25J~Q9r*EH_zF8zvsZur#wkCWiS%QCR(x%fU$2^~SfwJz?3Y4}?kis(q{ zsRlIGH^*JFR5-B$D4s1tv0TQEKMjSmXU4V<&+|C>1QH$i;Sa754T?<5b#FN9LF0aH zZ2L`%6DI&7etvN=I@gQEvF?W)fI43|jz_%v?!N1F!+;``9~%*z2mwr;DMKL~x;pON z#6b=q5OaVGi-bTCAiKchB!WjT0O^f0Pt8MVdIk%oL#bSXw%LY8a}V?>o&QexZlL|T zAqhEM2m3hoggGu??KDBbKZ2eM_QCMIuHys?MDr_*$3Wl=8lPP+1J+)skZc~^YX+>w z<|8k08a#3V5b1=91jdx1%+Jri2!Q}r76HE5Xx0C{)o6U!;{XXEBpsl= z+m1wl&pojscq9TSS7u@HrI-1!z4H*XtOk0%Yn7m6_~g3Y(C>0=k3ZYW;@H7%)TQ@e zR$CnlfCj+A{Dt`|`cw0NX?kkvN2aF=vv{qL)ikgJd;iGv#rg8boX@D$+qbT6-oE`h zV7yy?7zd$v+%O6v2e9{|*YRV|j?VRB5l~EzqU1-$u?s*Z{{(=Oj$;9juVA-df~+JE zM8o3Z;3Ci%d!q8pv#;W~bnRZu{dWe_{6gxhr$$&vDWh&Y!>3Z_!q>$!8CV3>_ev>An|#`g05D1h3uv&Kv)& zac}cM@_yj}4w6nH(9lU}^j6q_@&!0CA~-eyh|C`o%2UPSPt0AI|H*QB`jd0}kWLW9 z3rM7c_1$YEf@S%~qyyNt9SEQgjAH4;h~QWRAltq&%cbI#^6BD2`E+SI%zH390kIY^Fhi1Qc9j^( z_{{jJ6+gXH`N)fZhv~+T)|PJlW^MWQH>{3jGk%|gd&6g<0}#jwC;}!=8GXNtL@;w9 z1DkhNkAs3EW8?xDL*_5cU%Yr_{^G(FIyOqvmyr0LMUenJx92yh=`jPsYkqjndf!*R z^ehdy@%693+I#PQRsK;pfELaa4df2}kSi9U{L}@geK0;J7^wgrVdgJX&d*=Lv7l#F zB7a|tuUR&q%}&59Q7?8xo{8RuPOu z0K;Uys$fPs4L&<&19Vl7f|rhSGxMLAt<1bU`()+k@X}oQ%=9eInL^lMmXz@{+SIa4 zB3&YnezG9WvP?Qr<0Lnj5JlUQ9*Ah|xn+HJ{-2+lo&R*R?fsMX2djS^yvu{OWr1ad zAG064Ms%oSBv_5cC@48Hh8DmvW&Xmsi}P1-EErS8pPhTMG8YvooSWETO|)Cj4?0R% zyl8l*H|k@ZoV0c~#pbMLUy^=w@vr{WKfL>$Hz(JAaN`@|qN=F}K8vyL@48`tha#xm zd2~)NlmJGZ`Q_Q!AJ?Y}FA(|XaqyyK;}$Q7C$yZNe(fP%CY_pB5bwqtIoasocI?ox zyAQPYEMVj!tv~?!R5951#RakC=g!T}X>WY_OCUrrSuj#o!GQ7wcw{2T40>af`3Zs! zj{pU(Ri2ysRAsKRAg`7Mu>N5coP6%Ur^}t~^vQHv`r?F} zN5n_ucO3pa#|~^<)pRf>1JZMaQgB1!dv(jAn_ou}{3eMYH>nR)U$aqvBqB&J03>8) zb`~mp%taY|RJcy`&V_TAFTbKyDnC1Ww)_!1pDv&U7NxaKBw`n>y&ZO;MYGq-sx4jW z^D~mz?PAAc@!v9b{CwBM;s+gWpdD*D9aP=mgF{t;WxCH`N^mTqM+<+dZ>;^^o$tN* zo2%EaeJi%tL+T@Mzm5CYyt4|&iGd+`OI`J)qO_3Ko-x*@Ao?q-|9%&?kTa~ zWsB!Io(YJLt|bJ(V&r#Wx7&QS9Fr4ooSK62xmnOPH6*@2Wb$Lz`v`$V@bX{(Jp1nN z{|^u%V29KvX<$aNgd%`r6Tv_NsBUa@PtAg zBA($VJwFrA5=DAn4);HSqZNwzL~J zKaugGJZ{IvV!Bu`#);qAY4G9fTAcXO%nXuVfm73kka$6|#)ihBs+9)Uwx`P@ZHagrzfoT|JI4>z9eMaz98FdKHbVhG_)&!RZX4R>E@+t1M(K3)uA~FV8E-zU!=AYV4U7>I zWoh;)wD=N~&SJh#1U8Qm9SuT8>M(BgezN7`rqFEe)B{)NElfqh!o>g=`xNf-?1B8)el#q?^O;de!^5LGiBJicW+<; zWCy*`CaOb zXgyd*@*CJeMJ(Xcpcjj&-Y*l+6vhi$&TC+3!S!6gUj!BZ8hZ{O1gp<8$rUsuxZlu% z7A_=+r_t=wEYH96@mIonZ~^3eC)M|~tzbuwQ~;xdjyrJOu7z4wP{>3I%XO%Vgn9xh*5v=PV?uIDy@cgW{SxUxw)f`!PFi59xZMVmeBC zN>z~H;2AVGZM@HO`SH!R2itAw3E6t={`oVPRrR@r=hpA82K!TUsp@z6xy$hFuYGmk z`VTAs;Q~sw*GdmU8;6=zmnL;1y2dacWf2fsTidXH^A?n5nozzJI04Oiw%6m?KDo)e zUCL(-&!;AW{g%SHANfSQAYZ@;zte@_`czhhLRJHvb%~cjBH%*kgDv+Rxb1uqo>BiU zo?WI(OB8b%MFp z4(vHeJi(AePQ(ioR1It|STD$?x#f6072fJxgKZk{oxa~OdwxE2fOL^Mb^)+#A~X*{ zzh)K0lL(wn@9#DI$o&LxSjIDn3nHt&7rcu^K*ue+x7!6|;>)>!7{ymO@lD6(LpVSW z@gXAOJJ)+Eeullk=eY~>%Q*P4o|2K($}Ifazxovz6hjHXC{7Q0>oTU|63&;DJsUKp zflHm_Q>K#527{y1hT3~K;6}R%i=X-==yUV22ichUNz!F#iSs=qeH(4Qv5WUoRO8P@ zRfVFaK?z57cLy4KfkRE9y{L-DiOnl2w|SA~WdF4t8@9cz;6jF8MjHx*QuE%1n*TO9 z{yINjEWXU=w|Bk~?M0u$NVF`wx^_4E++0crsBUh?V$teYsqP<31jr!rY_}@{-nD(! z)$XoA?ao~&CIpbQd%~>IEyx42w; z(7f{rb^MM7jv2K2(nN5LL@=%A_%R7!!wjC0L}lVxsP5f@>&>r0J^S_8Zx<(D;N&MU zGx4$Ln8+9NWZr;BiJ=^TM4m;pOXl#!`EVK%9)p7VX{j;9j`kz z*xb7wTerEkwk(b5{%u-s4^aEQQ=c$!t=1mP@$h-J3$47Lch@1c5G<5 z4(N#&=s6v9jE#~JbgFn#b@#itmut{{Gr&t{Q2?cvVY&GZEEG@(Oh;E)#Wh7RlxZmG z706}v`=9@XUv!)GI=@F{=@|R(zw@6{=l;kXz&KSxQj~%2#qM9i=?Xtdh=4l*1dhP= zahSDRw*vtj5jhq-$I*R0%OYqvL6?&o(3@LMZ`T`0yphMD=|_6syzvqr1WrDJgs>k9 zr4pa@!x$Ngu@OGbY&Q7J_OZ?*U^#Xck}tadFpvP=`2DZK;wOI$N>9!m>4hYMaxNDm zU!aj7eG0prpk+hi^8xW~jFDW5Zx*D}ywZ9XW^;ik=JLUeoxj>_G`eNT9P+@EB7hNK zAvzM>FIm5h@xn3(`yq+I$g>^+Z0}ldCO=p-5%C2ixDb+TDgpWCZXg;3j^=o)=G*Y? z+Hb?AxeXVmKFY7rY-pEb>yUgBz?~y+Fu~aB%JQJ~A6@|M9W08T?jEgMz$KQ|T-*WU z(56WQ8q>H4$dg%k9ej$1cI^&Av&5VoBvM$8Hd?INBPq3u+2we703OEq0V*}+Y67>0L%K6ZK#?C#-mZc>YX z2o{{kCIN6KKnHNcYXYv{`^@DZ+~jj40z`Gk)Fv$OU_GGipG50z`hY z){fghs%G`eFsBEd&Xh8r8_pUZ1R}qnMg~~jSX-6uPS;VjYBkmRB*qy5yTm_wvz(IFE%FhaOC<{pq~K90Z0I(5K6(?x6^9 z(NK9Oh5BHR3?qS@190$FO*70+NUST&7^Z#LH>IC2Yhb1 z7AKxYNjndCCNKAgssAW2oC7cya#=n7ZCT#U9USCeb3olrgc9L?SZ(S!E&?WNqX&x8 z{bA$%JFxc0--g0VAB(QdU3eZ;O$BvA1#LnD8y_aDTkZ2u&&NzhySGDXv~YC_4_Np+InTKVo4$V$r>4oe(oYg)7lc9Un_VD|d6`4FrvAw#wdMmbp&e0>a zy0H#+$_P&4WJN#-mI<>yv|Z8sd_JHXDJpJ!|2jYZ`M)37s=cRh;)7!woJ@b>qi4AB zef0j;U0^3%spZ@RCyNoFf0~mo*6iTE2wLxZ=>a?2_iHeHwmgd-LIlx1_W}Y4N%CbkpkvSP6#x-W!$Co+O0eD$5fP%G zQMO-(C-Tqt-4nS0i6QBiM7}(OXCGSgQR0z101_{s-of$7e(Qt?4zm9wJg?i4H{QMm zi!Z%+;QC#syBC>IvUYkmQ>1-!@_V~j+*i<^-}gOqk8lAuygw8|dwZ+4iQ~xin~*lO zxv{}rZx{?E01s2#@#EK&jB?;TO87>vgN4gN-o@4mvObu-j2rpB7v{T1DxhO}bn<<^ z%Ts}<=Wp%=*NyBXl=Kp8b$0MKw`U(w=PLoZf_Qog%dluquJ7>f56GwCK)Vy%qle$3 z^%1CW4C;E%4_=@uDzGqPvBK&Dqj%ES|Zet-(kire8-3+J01)j0W2F-fMtWiVQEs`PerDV>t1l<fBOeFU|0+- z0LR(|H|z8*WwCl&tku4V{T#N*3eOWfLyr8wq)ow zIt@jP<2lj&;D;`t>Cm`)yS2Kyx|gQrXUpa2Skdw@EQWRff;yo`$4;k5+L?<(U5d;xgEty@Nm<%V~)sU z0f#CHR-K%>H#2w6NmVbq8?kTy@tZI#Mj`+is;Z`0eh-4Cog^Vp>0ICCVu*jW8*_oQ zBB)yd8G5!$zP(S>3!%_j5`nXip6!V6E-bvJgo37sQ57XdJ{N#gaicPKZ{h4*x&n8) z0{HEJ^RHo83@rc$6=@VogWkSscU?OmHWWdSzj%h(*)Iapiogn;i8?xoq$7y#r+bo7 zA&94$NVXEsQt>q^?pG$C*D0YFyVV3|r&+67ZmNP+Do^nFtvBC*QDA5RC`goC1U=pD zn&(4g8Fqa7g7-{d z-7RZ4^57UE!0p&+mg5(&_aV!kkT2R;R1$&hxl!}GSUkq|lfnKFM2I_u#fw-_m3Vg( z`9z=~pRQ@)dwJJ~ogdt*@aNatHjfPc{6wqE;-UMqnNe4KI1DWSuWf?6Yf2ZKG`Cxj z&DS6-o(v%ZfkDV8xDo+GF4?%#bs z5icORoMBwJ_+Ao#s;E7L%0i$a{~kZ~`WIZPxO%31x0uVPs?W?*8lP|d*^QCZduRc; zSW8_qq>f7!0d1yfTk%T@iXeW4L_j$Xn5Qg*C(`dOW_(Npogfz-+X^x=t4qHVL4m!q z&|OGS&Aos)>SzrwV}b+V@3ar5bcrN;&rmd>lI&1T89(k!Bp~{&`~0{gx?%JfXUiS^ zpykA?Px$dND z7$}v`z$kHIBEY5MW)IGJ8;cxhCWwWk2>A6r0uZyvZ*l-4OTL3L-Jvzoy%w%-@7aBy zCj>ym2YVm^csy?6>w`Je5E)#A+Iu&knX*pHKX`YfbsvcUY_l#sF_i;g{nhJ-5ieXo zle*R=n`MXJCm@qg4j_&lsaplCaP3jh6;l6qDjA9V6NupjfVnJZvX;oa!(e-mW5O8m zSuSR-Z0D52R7Ad(x49bq#xQ?bCiz4?*4a$az(NMBPWY?p(K|zUeD7MQBi^lk@C4D> zOx2(*iNp&(&kCR6hGI$zO<91x6+SZL&1jeSrX0am>rtlOm8U zm&s9(5QV@yZ(V~IKK>%_ei_vLjr3&8oy_HwuEBrlB%75|%{_a?uqFZmP!d~SPYsygMS3L~kvz-RsmLptAl$`qcyf<;gtP~L@>8>rT3lm7!sc+-Fwj91?rpYV5bzos4?;gU@RRe z;Cp>9%TXW~(!=#iM(Gg&IRWcKjvZP%f#yy~Xh1%_L*dVH@ws$NU2i3FUSv79c)y$L z@?K@~g&>maBqvx}{eRyj(W4WkD_5~N4cFiJBN!FNE&w~jyKlMQZ-a;cLW>rV$=?rd zC_+@u9H;@Zy!v^SRh*r>d8p&7C{}IPDg|q(0ES7|m3j z+YnlzowQM(MU-+8;H)C|4iZGO%YqITB4~#lMHz2(EKa;kfW|yr6YpLDzAijhMA!RT zB(9*-a90P8E?DE!~Yl{$2%LUBda&e#^T3)g_>Q6M)ld05eKpc}}YPluVnZWoB#t zfoa;Wd6<&&@6=(jbKeHH!@xlM)=>z=mn9KkSwTUYO%tlsI=J{aL5PCS+Vv9x_1e)P zb+^;25e^XxJsF=6m7aCDNGsU!6(qi>1)tOI0Nia_P}(!;bZPa2)nI)modC26Bl^Zs zV5AXXH)^02%LCo(I`(hjbP+WDAE&ub4+UZ!-~_QQ$H;L7nK-jPoh{pW^7?)jFCd8L z$Jq5md=)#tx@*BEc7KVk&(1AZer7J*cso^{8t5Ef`t>iss4!9ic$Nt+4yGI3BDuXq ziox$XhUYlHr2_jgM>GENQQw(U=*HmKIzk-CQDWo*;6;*L zK+VJ}==uqk5~oL+Ka(BxaADla$v+s94e<}wrob5*58`T;Y$cEYNc;O6$@75Zi=JnS0hwIS` zStng>r=P_4bw=kX$07iV0vnw`BPZx_0OgRo`TEz~j=jLL+N){atK--7D-97ZLy$|b z6A^V-#+UW3W0mzlSa(|{tnCCtK#l~$y4mgY?GHD)4@@b5?dlqg62~F{0*Qc}z|HBg z>#l$B7klBBypHo4=x_2l{p9S*pbqfZ2!PvuQ3gZ*ziPrC7;7=Z*$@aG}kPOhae)(O&WYWk?T4hkx#ZS$NaJ*5C{ ze*Zf#N*t>I2u`bs0bKwsUjTcz30_PL{UG@>z_-9Qe^t|rFNg~k6-RS!S6pMI|9bI$%*z+;t`|qNslUqnWcJaneJY=SE&8)Pp-nLLEHdNa-Y_=UJCMsNA zy15No69S&r}_R`ST}*&-~S$r5|2axgxv=l zkUu>Ox~`|YG05m;aGh6C02Bo=5qOfN2l>6f0IZG&I)3pp#VL5URN&)JHXCqbs~!^p z5xSlrb9OS=H<3?cwHa7(KjLR{QAX9Pw{QL_690w9ot0(&9Yf&e_un2384@0u00_Ig z+u-HXIe_9S;_!7%vA$SPm0zI~E8Mv(Cohrj6t$!YB3_`9)#0x^`2r*;4bCCyYeag+fj_xdi!#1~!l;De;QQ&I7<_bkv`GV#%tkxh1tqJZv#H>Ax=|s{y-Zxdma2idRfF1lH;#pqM=AiYEU>q0 zpiP$ty4~Khf7S8W8Dm0ybi6n-Z&t!14t3Tp{b0D z`&o0({(4#wym+RxuKe0*QbrGq{6X?7HIG2i~XPpW`^oZAbkFia+^fH>;mAbjhYW5Ib(5 z1=FvKXNpiZ@F)`(R4(g9#|#f$eEy$Q>->D(vQeNO=u(v`+2CEZJIhP8yUVXNH#Yvz zG|k(1iEo^RTd~_Vc%9(c{Tx8f{Fv=K*0I~ZjIjxT7oyof7x1uX-40-x!#u$URplM^ zE!(#Lqn6eG=~3Rbh~2+@6_t>&iw|oP&7Apx`Y&aE3|au|6<194Km){a}RxY zKL;3B<|i>$0eCikyu#uFP!1M=E48@e*#FG5EVA5x5p#h)IF$Ta(DgE=vg8(#LoBa< z=Z#;#e&_ZdBs2an^mBl5WquN46#&7rOmMAk&RW^HMIQ#oxBe?mpTzOwNfE5yMxH+U z61V^TAjqfg7a-ybSw_RDTGm}6zO}w4GQN}c8~ZuHxH3P9u?v9UG-{xpE@K=RaBv^@ zf#<*H+U;MoGyd1HmoDX}r}^dWjSXn+*>Jg31QT8Q8j}2Cxdd&eoB2fix3(>)-dc&S zRrviL<@eIf8}D3Qed{}4uHUb|WfY2*Hj#_H+Vx!7A@+sr0D2C;urt2QPvS%ffY;$c z4gZ(HW(f!I4~_&6cm|Utzl!5(8;PHuosF%zE_Jtf8j=4lU4OXE&nwR^^4Z#|E>++A z!PV-mn>1b*6-tty21y5yF;4OcCq@7S7c)_voEqp}%eKg(U)8nT7pVJ_AQ8~$=P*Qm z_0|otfp4z9`G3B`iBG`ZYY!{}*#TtKZr_6KyDP_9)5CD01mK|n990FQP)ZX4^4V)R z&fxf$N4%Tz{4SFJ&Ff$J(r@GO`|bPnoqh{P?Epl+xxGE&3Z}=25&*$zHlT?eqZP}+ zh0bAjWMXHH-Rc)-&tLpF9$uk)8L z-0=N&y9rv3x>!&3J+{3Ada1~d$px%>1BtJVz4HZ5oB#-(WrB-?>BbD+kCgN+WD_3c))v6!qp#k~BgUGKfjW6?)IFSM%IE@+rcL8OP+eri@fCU_v zsyA;g;d~Y6tBsA-W%@ns1MRjwun3y>*28%NS{oaWsDejBX51S%49a9N)p}2oG`heq zYq?W&$h(~m^r^UoCmp~}M2?7nQl%7L>E7>pE`aaF)-&b?zd0^AmILdCVD{cz$1Kp+tiG~EEpvarKd@H~&t;+()31E+0r@@XC= z?6!TV2-a`jfY$ojxXYCakA(mT!U+^DAe%Z~%(4>@ga}57gUIK^Z`HhGb|Z*K#>eB7lO7>|_z z2*L?iRt2|%wyX!8FPuPh{-_;5#`?S8h1R_=<2&Q7$Z&Y<1VA7W5H#J0I^Xj=J`4Mg z9AHFf)~bB8s&~fy`6I<+DFA|S0!0gKpBz9yh+tIU#NXc>_a`3<9$NtrNCZSX!x#Y1 z1*R}?@GqSM*s&_OQk+|jZLqd#VC^)<{i(->$65dc;RGzJg4?m9&L74BIPu~5VaH=H z00N1Cpy>u!q5U7-0lF}^x1o9eF9z`fKNJEW2q%CnUG%OSjCS2;m!EN@Ixg40cWQbh# zRt1tp6X(|b&2ew@MBs-~07($>H2CrVPyAmTkP8@RXU4sa1M&YA2L}QG0000${;y?V Y1CSgj89oHRSijZ0%ML4t(3WfH`ezzX{ zSIB-*SQ~z^U-h5|#X9V;JQKFu@@m$zJNwbSGs7-+vslF{Hd$b!hyn^gGLxCegwMG* zZ|2R!2Z5^UkC{EJTlZ$-=KVOo-}(Itute0VHMn#4E(BK|=qo1gbv^mrFbr_69N27Z z!rA#5+~2zo)k+oGFD_vJvqLtg-)Xa6EvT%w%Qkd}xQ?c<=VGx8zUM$R3cxH@z`yLX z_kQ3*(JlgLX0l)Ryag7nPciHdp;#`$c;thJ-!~gO;9}n!4%qL_^#*kNJ%|Da&(j8b z)n@NK&j;snuuK|$twLLLB7uMR&Rqy`OyEP@8=5*Xw?FL9Tt@&Oj>BXuLaasL%R%73 zNti}T8pm-M`1N|7jaAje@fMEztl{o_-lg-lbN#K1g$N+Pr!ZpheXM>__3YVS93%pN znJ{$YjY+U*2x3s!wvA+Vz_e`eT!*z^w@|K|AcId~tXLCsmI41)B?x>90^f}7qH?1S zrfDWkQIv1`m~R|&6+n2tT(54o%X-T;AoN3U2QGV7brn#|g6^`Q%Rh@sUnNTUA zB3$`UsTwdCq;}^F2X7mnuRLaERrY*22x!(DlgTAQ{7njL#eisB2D?~B@cU42Y@s#w zq5q1LV$lEg6Jja>=6SvV-XHpz=f7#-&x@_?Ek*+BI~RRM4vKH1LQD`~n&MaEq8Z>_I^emy zDT)GyfjJFB)}ko-O3#)d!1lY_P^;BIx42IZ2FTa}_k6X$=LpXiUuT{H{=v@9{oiQZ ztp8T?W_=HzYj}y;#?8i{a-;V7S?l}|Hk*HT@ae&i@V6uSz#DqF3_nKXN8l+Q^I7(r z=K*)V) zD1_W%ol8!DF!Z3)X~W&S4`97UBI`l>MH|`|ye%6E0jT;Z%H?uqf~u->7qC}tWbiTU z+}inY2Kbq{|KL7#d)Sjge0Z?`_|g6EJ~%=WJi_Or{^juJs1*O{n@Ikza@5!BtnKgb zFZEqY0IYs$OUD=p{M|*spBDEYJRl+r4}SUa7Y)rszil)dP_NgS=Q@|(Qk$v~z~;M~yE}U^0b-cY`&m;B6;v%% z5q!#guM|>T4c&kr{_X$#&b?v(jx+4L&T#PG{&N49hxpU~cX)XCQ|!NJo%cRYPj7+i z@$;%iJRXtv0<7xX%DT9`YO3hD5vU68t?H?*73eJCSBpv%f}s__iTztGD4^rel&0u$ zPw&_nF$jmNs{l+qyMN_Vok8FSm`jnkxP0+`x~7A!>)`u7G#U*yK74ez7y;_`+*Nv0SC0+*rJ12$mk91|BKHL zKL>0lwc6lQeEt!(NBf^19L1j=eYGh5YDKM9gS+^*2niAbNSd(RW+nR{Y;A8%5a7BH zL{Jn348usbj|qbcz72>c71B?5uV6 zIDYqpujPPUw7>eye~V&K5@;m>} z7sI_>G@p3PNOADX1E#j8&rgX2j}3dxLjs)R_^+{ji8k{R`)Am$uz7L+YZ*j>onQx! zpB~Sgqg8KKLD5s7?D91VFv>iY?>)HpUs)Qr4fl%sZxlu83|hL7K8Dd4RMkMD0Pk_C z8gEZyQ_G)_pC?2w4aXt+C9mXQ#P=}c8RkIX- zd5``({JwAtcuN0${PD*J*ge|+#m~uFeiZ+9^tJ%{CSsl)XuG#}GcOEtx+Ett&OB8x z;k9Yg2z=JGEFy5)>rcpz%1*j`*BnUB$@QNEj1D5W!ltlHaN~s^EHD zr9^!Hg9l=Gi~hU&{sZbiL;}#`BhMQi?LRztgk#a~V>^9I*nDjW(JX9C)k1Gr^m@V?N9&WPnTLm z8SBZozEM+l_IAJ>xeSMJ6ea|qAQBjbEXcy66s&r+fO8A^9n_@i33R!tDH7m`Bn2Et zLGqiJPpYHhZ}hB03VL^{B9>|4-jf8Q`RrU8fIs5v1fvK_CE*wVzx|uPxmOq$$nt*M z89M(6+n{^td~y8b=&!In$M=7Qg!|kZ_Kq~XAodX8g54o<1NWtV`<)FqYawSeeqI$N zRW)PVqW|cqBgiZ5!ZBgEO12OijRxqto+yEKe003j25y>fcmQ|b-QL-rD)WK}p%Nx` zkhh4r7fC8U4TBUzfLBPrpGK5vp(sj1I09VFB}dp0k&H;d$c6;+1Ak(kU9?xJRY1MD zb9?tU=pB)u-|ss(JUaaR;78a$`uV2^NAwKeqLA%C!%HmnaY;4h$1SRQK>!+yYGcWk zz{!J71j#%jc%o{jg(2*MfG41HVCTUnaOJh=JZ!&0R*7bXY%#)GeBWndto*6pAQ9g2 zJZ3+8_r7zVY~#_LouAY5(ZS*2BkG-D_u%ebO#b2FllU`Y*C~9>AxNOT!5UlG-i=1F zT#x2g-!#zk;E7(y@zg4vQswkrgtj51J^7wUfPVt~>s05u5JZrR#vjhL{=N6_-V;3$ z0(!&VE9yT#{G7VS&Q<6(o6XZ!s|C$Q^R#SPJ$(PNY}-czhY{^FY(d}$14-rGH@Zk1 zL;~%!b+Ob(m_{))2d|v!gYVpDo<;AO>eHj&f7N&Iy&CvmetAK_J7*^+ZR))d zbjrordEkZTwQ}XW^YXl3tyUMdnNY%^{o)+7Zl|{t0lXk(JW9YWGIKgn;%bu~jp1qenGL5T!HK@GG^ zBEcfDzyB~pf;S1Ru(BKhtZ_nsz1j_1B}HJDLGNZ&NB*s)$<|`YVDE6KgbI_%D3(?q z6RnCWB#=gY{S0VSCBlLQL&O%+Z$d$m->2{-Ea(s^>Da`1#0RXNNeL>p)`$@ zO7>Jxa`KPokF85BjX%dAEUt*oVz` z8tnIWr#lxvUCR+59QjKTAYZ?_t|yGnBpNRy6M29OZVu=2;fBMf7 zES3pP)%2x4z%A&%-MFQ1N^r*~oKXMdNb=f;L*hooMDyux!I(>~xxx$8ESlh4IZ$7(Gi#wJm&Dl+FNdeL9QtW& zzqg%$o+M`!aNoNMk^_5J9*#|LuUtj~nomF`q>24aTt-{bGQJo}9!=jW_($K%`--Ze zqzQkY76eczCx}US#0Wr5CZj)c>twoMmHX-Lm20w2>MvOp!ch!m9_z78@uvM9V zBBvti8+Fzr_(vySoE*_uSC>CI+FiA`8|P8;rR%@p)(T1B_1E1lYlNR zgO|4v0)gaE*oZt=CQd#C2?TJ-yFxDUh1AEHmrLM^Zv_zq_#*PQHA${8Q4gkuaY1BA z3eyRr}99Wq+@|a0^G~bs6_!N1ClfNbM z3nEZYzxnY!3H)Fb;k)d;@>MTl775D5GAt9Cp%_bjP+2Qcw-=&vkgEqC2R;n=Mf4RP ze9vc0W(o1)#CUOHP(eJ|sPiV|<&zy?MWpY-h}I>LHC8E>^u4GyUm_2h0xF7uAoFLv zfQb($WjU#C34Hbj=X03=PNryz{Et&2N0?7<#4LV-1gszNcf$IJuenx5()GJ-WxiXPLMp=AS+>t5_>Tcfhtd~M6w9E%GI18=E)-F&h!3s zE~-}GP53^YQ^>naR%V+aKdTp8vzTYwb~3MC%T|B$ovq!E|MF+M=dH6NvuG}br)HNb zOMT#VdsE*F0w5Kbf6*m{3W#7fk(cN^;N$$tSwvKoCn$)4kH!Jt51$zcM%e{bE&ZN| zK#mtm<*8~MP$A(7VI?IH^A-GX*A2rg5d;ZD^~-0bVAU^GzDxqS z`sHYM+EC_du-9mA#+M8i#*#wY*=a8Ifv%b>_F8!lEG{*Q;-jsNSmkp+M?y(e2cw8p zXaZWy2VK*-B8+m$rS(Q5HkbNB!N|z5X;Pw6u-q%YmxcbwlNu8Q*Hz7|9EP}`T(zW7 zL|Xc@@`XTNj4jIXSAb5}rSBpoVj`6&2>#~Fq(ef6F*m4Z3KA26q7V}rBJTO#C zHLgeoIuSuCG$H|cupkHh9!eEQ@6=pjhGBL;|0>J)!k8zL|1 zCKAcb{+_#+uofyX*+OQ8*f%5j1Ss~d8-tBiUMLij-@Pl3<%5w@?59mpra0V77tC@B zcwgW@9aFr;comY!elA=go#ihWuB$8X8}GVKzwnb8hOPQ zQY$>wyNVD%J&{n$P%{!r01LIDW@_0AQFWCio=Cue3;cu}bSD8k^#Q6G>4c)>FOiah z?192SyCD*Y?}MB@rV8e!;L|=HCr*TWDY24PDizjOt5q;#~`S+=(MoGd2 z83=qLfebt;02^!5_Yxi)jPYBPO#uMp2)}+uvhKb&m;e;)4O=s zzUVx}{(JTH%BuLS*XhB)&q`2Zy_tEoO4$lz6{&ELJ$88$lbOyjV*ni|PNXD>1cW7y z9%c6>LXt|*A5}gD0p$9rC0JD9Vb&t(JPA3lr(X@znwmUDgeYf6;}r1FCn@)mXQE4l zlJCUT8<3rN>F?uk41ve@CI#U{VNXbCn<)XUDej^a6u1f_mbYrHskhs$8s53HoCUl@ z3wW7(d(AU~Kd}%I#c>_zce20rpB%8hwzov^s`DVb>%hgd!fmbAPA7R6uqENmG)^q zP2uH05z7$?SW-itR05v>2?b+lFSM1RH%$DU0a8fM<6Ze!<>6G|^^g@^+Vi-$G9()l3eA>_R@wZXDpQbMjNWI>K@G86hb)mJ}?d5h!DPx$Xsfq-X zwptp>3}WcJfd8`j_5nR(s`%fQOYNOWP+tNoFjMnCJx*JU{W zyOM%WO`Y%+T40`zjx^|Yl=kjCz!6RGki-eqhc9oIK*@IEGiUEyF-^;5_S zz=^;WtaEzIdb8Pt?gjs*x?Ts%Dzk*yww>8OA%v18gc{`#1U)0;`3SD&gBTXn>EFd5 zPOE-)KHXR}y>i@KudOS~e4xQ-5}bKaNPTE;=T=;G=&h7Q(=;C**cT^89xj>34m8k9O-Adeo3~y`l+rjT6MKHCfZq zPuI8aO_TtWci`tVr7fIG2ed+3Cu4OC-qq}!32&a|2@w)(a!wk-m=i`tW{wLA%c-v8 zlS1EkAowZPFfcE=p|dgeRQ)U1hKu5ZoA>Kw-rK7wdR??0`qJr~vj*@9dw&T32h_IjvW8iM_1He9g^uK-CMw+@ z`CzW3dxVA9F5-&L*ozeNK!4q!!plW-e}8|y{i5AjbdA@xfX&UuTffjU(TQ!P)8qZ& z8Iqx7LWlxWiOEsL=Qd(t*V40cBH(u?hpd5Bfx|z;Z?|?>BTrawzL(55V&xH`sHwt| z5+qg<2UYkq5(u!O35%H>*2-cwKDVqGap=R+c}s+Yfc(dPZ>F>9p%o%0j+uGZKFYi%9uvYiqkE;{$hWlB&O z7c%SR0haS2#zY2cq#80=bRDHU=9ifRe|=*;^DGEOXOI-hd+^-{{bh2d!IBmLBbMB~ zvoFt~y3qtv!>ZFm2#pXN*THAJgP}rXp?8@Evy4#E8YRlfRz87+`P(anoTqBJ_0Yq^ zv`C@jgh}#M=M3>XWzQ9xGlNtjf4}JTkPTm8@2Vy=V~b#YvC77l$`9)Cf&fE{*WvkL z-c8{Sx>B}PaPVwsDjdWsB*7>EOS2#vMq)~wmxvL zu=1+tt>pXG7sp9&tmsgG?;d-u-@140d8|@3850>~OQCV#2buZK(1B8^#LrMJ&s|$4 zL%CFj)7I%lyWRGdNw4O6m&?oti!*y~+Hban77#ddzfXXGn7z4*&j0(mb8FKGwC*_zG6b9Xfkh7 zR0VWH2k**b3gPJr1ehol`!4d4Y*=`rGRh$nWiO-43W0vFqA8M6BoS9g6cfi2gou~X z@2B_aKMA4gS(){{2tQC$6teU|(&;(}Nj@!|W0(`z-WM&<@r=|AYJ)y1A^+Cv zwU98F4{5%uWUDqNYBTL__2GCArtITllhThrWaTp^(4w+O&IrUIBL)iLz1_Pdg zdOr%mP!_O(LY(Xw^2+QA-x;~$qgerxnp%>{9=Ac;)bX4ylvg?V%d06Fd;LE2kSyKL zPuX*Q^90*ADp;xx2??fzsu}rLPxe3Cf70vq7J)Gdt-7QIcoO&&){2#oz(iGm(3|?5 zOoH?hIwmkm5>82uWCfT;3Ia1qNg#WIiUbf9Qofz8GnWK~*(8`s#@ze77zdKVIUe0N zNbKaS(}PNt%X$Unothv3Mf>ao0;33xMgv;sE%vTjt>QP8*(8t@yuMz4lDC)ZLR)G! z4@Q8ycXpQkkVp_l2y`&rb|}fgl%!{36#rIG83{yC^{ZQxgmEGtY{f`Okdbt3#%m-X zA0+=G3@u9uPJ%S3>M02PDmJQm0)Cm0tG~Wc7sDq=0NC2uT57GO31Di#G{!_Q$=5y4 zgXk(kYv!foUeRv`m_<~BpvU|#l&eq4UO){}NXQZtRhhbP6!J7Sut> z#G&bR!F&gpRQ0g9O7ED^hm>$?&hZR0mE~y_eO*N3Irf5TVp@gVJ3fDXMTI)1=qPev z2MgRcxlO2siA916wuUb?lQlyzf&Nm&knBi06?4&gc>&FLwxIR=^x-Fe{g+))AdAN9 zD8NMMI`{P;2&VpSN>veLZ5uD4FyIqQxDEmQJq&mPLP>7((LUh);GqYl_sz*OeTSbJ zo-Te*AxIf#lJU*kM`5vbL#qbS>Nk2NNJ) zM}*|~GGU`BlgHE7sIS@S9an2J_o`JY*s9adp=S@Vs2$i0evf2;1sS5HQuVyj2fY@a=M&C=!P5vzw-hk$hhSF>u&V_ouf0z>0h;Kkt#Jru1;0U#L~-G$IS*1K z&=ovtP{=YvkADxxGCOz|jidBIibll-viw%p0Tt({CaM9wxa_jLRm){mjtFcloN~p2 zNKNyn#4J+^IEs?9K6-lm_=qP7zFrHEB|53rVjW=E<_XHlREP&uGLoM)N>$0uH}KCN zO{xQdAJs51!`Wvm-%=U)*M8Fa zajURbZE!A~nVX3MRTuEYHh!$aJoCG=& zhb$nx5pwWzQE8eC^l9OAeQfmwE31w;Zl&B;L#@@Z2fkH{dV!l!{1EUMDW84dI8WIA%TdL7Eh)=HZxVt+#tfU##W}L zzRSX&k*8>sEeJsh6^kK6ANTOy?IC_$Z9>IL2@{O?y@GK7)kc+hy--*&20<{*6rUY! zZf*1LuDs<4V4CJqA7DJ4_L2^l_*)TKJZvXyHL&>sznBU*z6wA$^r;#|>jYORjZK{c z;{`sBb#TU4V2{$O@W284ZmJGvKTQebwD`FH#bi=WAI5%qclsp_Ej}Ltp(=XvJ}hMC zsnT;eO7~VYWvWGx<*k=^(RGG+uF~Y*^_%saD)K(D$tfWSP_(8i<*ayP3kcD(3HXGa zB4QF4LayRIQgR2B66AXvczq>JxG}~`_WgtiaH%l`AQDi&dY8}jJ3KMYIaYr|O~!-M z6nq++kP@CqaI=VWpR1F=CjexhLqYNw2vP=N52`jP{U8YefmbVL3(j0Efn}G$b^4k2 zG6|-Iv68NX^8e^{@q1$eB=?L-5akbQWC17XGgc;9>U-$(rjGKMOQMIM#cL1|C}Z*B{0G0_1T!# z*W>CB&<1oXt*9Wj1(xt4Pq-3SRuum>TIEa+d?bQq;5@Ve*MTx>C-ugK&b-_}U%jmK zp+XxzjleG1pnDFuvBlZX`98%4jw4iwDwknsrIloE;yTeJAyh4WXG46x*sDiq4?&dP zL&tLjqbMPTiq9cE$3U8^Hr@k|e2D}tm{46Qqq?PM@I$VozCVUav4RPa$~4}_P;f2E zC6d$|_P+f7_a3<7dxps}1n|As3l|K7%iLpZcj6lY%L$P{a)A&nKt&56@O4QA6dVU} zB{O2=JQ9>F{mGelSKnwZg{KydQuZ$P#f;=AS-+bWM1(NzlL)hOqTC`vN`>c%VstJY zMg-k2LseaeZg{~+(1!EO_tkOsTm*WOz={c#5BS(SOTiajF8XjJ9TLZ~A{e>zgOat2 ze0FP=Ix#k5m7|ykynGG(oy@Ps3ezp5pi>h>u(qVN&p7C6j^x?r+;53= z^Rvea34RQgI!8??1o+mfb#1C?tqd7?_D_H3w|_^<&vFI*Is_nn4Fjyq?!bexEy*8( zWfSL1Wz=R&aPI^wBmzV7ICY#}fYc|<$m68{h8mwA#7bpa>3$yipj}GW26r8-TUO#l zt*2+uUqhMvvI8;xpy26s8wv3A9F&a;41exId98})#Y$eENg-SpqyTy4 zK?3{)yJzs4vH#2c*H(a|*WFajF;IoH$|>^sRr4BA$jk0U^n>8>iJlW-XmAAE=0=&|}S}|sxKOE&=DCv28Kb*KDQQ!0Zl&~=M5YbFc|CRpa2^}OtldTyOa;m=_d zO;ii1hh9jZsX|Kj3aSB5Vx?KbGkT!ksIb!A{>~k+R{51nrBYH^Fhl~yhcxW@*SB?k zo+z%yk;2yr`~Vofc>pnArbGxsBD7g;3IW4&g#0W>8L}Hywl-2&P%?!7>0f;O?~YGf zpTTG`!ekhU@v}ew8S7tH0p40DN_x>~ij9awP#+?Qs-h&eL1a)BP5>VPA#V;tpIHHs zfIuYzh-lW=!CuQD9Pdfr@P)$p2QJ__0`zyC?`zE;@^}Km;Zc} zilr&)khO@12M>RA@Y%tSUN`5bXQyy>cE-k7m1^4LD@fn7Es zL}e(Kj0u1VTq1*^WF)lyF(B%Sir~8m2`J8Abf#XSTrT7HZswhC z%$9$4o}2}Rcx6MjjL=Qa!lJ;*`MRMv^7+fKQ=0-sMsY zSQ@L8N6UOe;5!2j#s%iPJmd)}7j-D({dC=6;0iKKBV{UyS%SzF~t#-8J%43i&42T4NhfRiyD!@vMjU| zdXMM9^>B22@XJsB_im?qv?yNIT9)8H{l9;jd0v_TZzBe;`cOhrl(BWbXdwYi*1Fv; zQ|Ad+bCyFDOe7G2y2L>6^OcPe#6;0$kB-$#5CMIWud`}H za?&_W?xNxJ1~eQ#$A{^URY47P7=vawl6!MCvLsKVt? z5$sR`JB-)ml{gv7IPU@3=Sb(J9$x0aFV&Y#@zKf2$^S%GeO-(``hP!~c&EjlzHr1A zaD+bc==AJ#Z|B`+dRg?daL@&{RGs*aNI>Ba2~_TJM1p2B{oZw5sIOO{ebL3%WA6k3 zYHR$Qr){3dvh73P381-QLIr>7#T==|*GWi#O7I8&&F?3B$lz1N-kJtUtps)+c3BCC z6k&cwL7E#(!HVR+m<3;*K`uF-ojm(7c8{A|&86_FjyM({{l|}{{;rYqE)`Oxsbem) zet=0Ss4yDic#IX=_u+QkfG0N}K;_GQkhf^Y|>P!D4?+>G;n@C42?@X z#PaV$PWdDPSh@kB%E9$}7mO-q(Fb1}!X>062z{cFn&ubt$b>{X8(P)BzjNnKuwGkV z3a*o9C#*mI?0D+$Z)^b!e5o>eP6!n{%V_sy7pxnTs$iHFHUzH3tFS-tkq~^Hx+rB# z#)Dg2_S-!_1>ffHXiUKOhrCx-bm-xJy)IV}-85h@7(l61V$bDO{@tul6m@2XBD$lf zR_gIt%}G8zh5;{(SrKU2T#$15z7MK8TM1BYGyU5NjW%8?_Lz`e5r zy~oGkAt;OpMGLFa#LA~;UAtYqYGlS;k4vCX0;+lnp#mZ*G1R|vF?oS&08nrjK3}t075T3&=Ht0G@;e?pt4>?aC@vZYc*)K`*8kZ zfYsi|Iiw;EoSpYzvr&Oca|ce3K4+^CfBc{TfhX+4hER#Eh;~~mL)BF0o=?o~dt42y zqRA}q64l4V%dJ%{==vrEQI-U9CXl**x?Q|@g;%dttuA~R z8@+y~VL-FNpSyh*+v4ONbURS0*4UVUx2ttcimG07`2me*RZnWtumyu``q3 z+XHu@{YhzNDFCXMuv}2XU@4HAo6WhuYr0`BwV+|7{^kt(f7I)AehUfk&u7i2$`?J6 zK*hX77Ed1acJnqHhl2|UhaK>GJ=Q3CPmjSwpEqk97^}9v@Hwkxi#4jrX1&Z*K*Uxf z3tss~E%O|B9AqLw85MvCu(iF#-W?yFvcC0Ymyy7|!oAkg95&akw>2-y&Jk9Vw;MT5 z&(3)M3*l0D?SHmE_jfJuNiv%YFKB2PxjO5;?ELq~hoAomj(?|8t8H7h{axEqrUEAy$#-%OdYl=#mt`OjS9Ho z^#xb0Or-D8Sxf*+Ul=MDx-tI)&GYc^Xaki>YQC1q8R~j2sEUd?H2~n?tA9&DrJWz1C7RrAU(<*9~ zvZk(BFc_gV2KxldXa2gLEhq&IXMebff3 zJCjK8?he2uuUfe5K;%&CK>){`AjJxpaRph`>UHVLNH9+}s=+Ff;F6!AcNIdtlFHWB z&2rM8e%WWB%R%4|u$66-jhhub^~+vnjsRao6h(8-SFhKPey{#}@soGWZL$<;wT|Im z{ty3h=In$oG6|^CGXPCdf;<_f#IyEA`x*8`hCe(%Kih4cpYE<%#eakfaR=KjzTeFg z!7k30bRq(~-s(DkfxQ`5c<6Ll^Y9MT7O~1Y`q(2osebKj#$Sx;R1- z99@;FA0aX5nMm;WYwNY&MJfFNpKoGcbi4>HVEH5o8>ph;xUofeJ?aCrj1FrQy=Nz2 z$4Y0TQmB>*ibU>3LZ|@G+2rq{`iTs3*f-E(F6S#zWo=T0kpPdxSWgUP<|3KLpYMM> zcY4k-QW8LXjxY)t87T5f;QNzo48rsPx=!p5;p$4dwPyOmJ_G2W`{?t}P`UpNO5A;X zUbk)gck8w0J?ot&DFd?$uaG<6DEn+`X2!=m9-XZTI^N9KXo4{sLUnyRncsbW29Ar8 z>$JhSILGhtTZ^khxLSj?dR8IKT)~?;2{wy-LZw&*-*b>|V+ck8R8jg@O&cP7M8pkB?isr!fJx-f4cQ>gH~<+1$HsE%_|Lh&N8VBG?*FIP2>V(vOe? zK7yfMc0hG`>wbB{&xVy~tW{x*i&!_ZK0hlA1RO>_Dp*mnEhjU__or8IFbcuYrswnI z^yG2!Fj_9h?HBF2ziYF8kVzn{K!i|&uPBbFojq^;7~3E2+}hb~wOSwIJ4OU-e+$P= zF`249A5{H;lqhG!D~kGxT+wzN3(A9NbscLI{q^z!>=hOKS6v8R^;o0mJw67r%8Q{K zlfjOAs(J>z6#j@4&d}n0(SGW8?y_+ZgxDff$Hi^#5B}*Nymm7G)&Kaf=KikD`%xwV z*?=H|0RK%DV3BB@pA#YeFdpw#pB{X#R;&L2+Yj;859`%R70+P`B8W5T@y&uIDu#$) zVDVDrix^*a!F$Op3%qWRH5Nz;8%beQEC`SQx*&n3C*KkgoR^)cd&wjSMiH}t8S(h5 z%&&Ic1VI9b-5?x?V69ke>|VLAw`+XYAn=%^g`t73;;JDaTn|K{TDaA4=!@z(x@ZrN z@J#>b@slIdSTVj+GE3jD*Xw@|+ije3+ft&8UYlCh#JwCL9G4$P)rCqZ2nHt+Niv-b zZq&dwBCr|&uU-xL{HqRx*t*B(>0)*b6x{^1SWDl%a@ZNdf{9v#WEn>|j#X>SO@bE{ zp0hyb#e5)fsOZMyF&b&VnqPcsAw3{r^;QW$;SG@lBW?$-hlfEO zG&BRcLoPiQdYZ24d~y^fe*e}&tXGJ~=%c|XNPafagZuqHl&lgA1_MCAT_P^Vey7*p z|NOK4{|&9ev~64e{990*7ofU{GHl&8}&LmJ>1^8y-TVAmJa32{YP1#^3TBc zO3wqi-$xDy3Syu}F$!b;=(rA`QgHxLadl09y4l!V9G_9TfAeM&`h))5`P%DXkk~_du2|MuVg+dp&%?*FyS`qpZy%0K(_pMm2zbLVTXok2XbIC!_$ zg=(b=zee#y^oNIs|3UuY@ZsU^{rB(h9y~lC0_>`Wt?lkHwP1>2+p67sr`eph_&ndI z*nhbHBW(W~+mD$-ED+W#Jb|HF6> z7I${;z~ke`$pNl=rXcVa3GGd@(Hr)X{_M*$#yGMDYC;vvipjl>$s9nx8zerc8Y=lL zM1Fx!h`v(rCL_WP$v2~TW77cLF2mqeANp4w*rf{kGFe_9>{wnqFFRltInhZy>D_om0HUXGzNWc}IM8Eg69uZypo0CErsOpUX) zecomyP&E}$8NbeBeCtD20IG6oLheP?i)WI4s(J$db>eF!06X|7W$4N23G2xs#O2DR zGC!3#8H#8TeVL*?XoIe-G7=46apr^ab>HBcAcC_Nf^!u@4PQlm1eRtk_C4O$yF>-3 zR#|WAxK;?PXV0sg0D=ggeDcXsp8t&#U|JBHg>*5?cmz(IVvv;NmTL?JK*z;SQT%l!VPo}Z6z zEdk^p@I_xKR-jYsuxC<;U$@9BK&4axYsG?YzsnThO+7y!-+ls&vX8x9k2R&Bz}d4i zXfzwpI%`37t;#20=Qs|istT^>f{8bD1D;IZcK{05hd$Vv&Bpn#0suAQV}tezXn^yqZ*B!Zu_rIy<=i}Q?fEf{uBk)EZJpJM+d#1ipu0ZRe#h#mu z<~M!B*NVIX$niEjKOeuc1eg}RKKf;!kI&D~q0wl-$G`aan?BZ3kyii#_}lXQeEeDw zARj~m`G)6To+p;l>-H8}!?|2O;m)O#dA2PR9C!LU|9@+BOaK4?!yrsZ@vn1#?nMO1 d0<>PAuLBQBOh@dhfxiF%002ovPDHLkV1kEWd>H@$ literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/SeedBag_SugarCane.png b/www/img/stationpedia/SeedBag_SugarCane.png new file mode 100644 index 0000000000000000000000000000000000000000..fce564b8239ced5aca6017b81f43eeffdca7a497 GIT binary patch literal 16159 zcmV+)Kj6TLP)6zi}f@>*vj@DqH#2YEd-ME$=l3hY0@0{9;NJcF5RC#b%Qo*#GktDZ7I-5M*4NhI z_~aNK?mUEgtqz@+r?C6+V>YLM)?vL~(pm3TUFZ&R9YbT+%ga>=0}qmM1omrz{kEf9I)rD)ivn$dyqsPo~Hxu zlFRM~K?vT(V39QZR)ulhi3I-rd-oy6F@X=Fw+wx1ZhzRHyN(1tp2X=`hFpulSA)QR zld!FfG@j=%@SDvh8|%7_;|(15S;O7=ybJG(&h$*s04{XPU!1q}DZ42$H2`cy$R@s@Fvk3UVDM8><5csyRi`tDQ z*tVTEP1C;aW4>`*ssPgS)q3^2UDi9U1#uXIKk(VLZt9?0DB+{U4`G(Zz&6pW>4#jA z!I)enR@^pp(?ny(zi|Mi8TO`mkP1OTV``)vnqfh3;X&Z@ zrfC{j7UndLSxb`SOFdhT0Gn@ZLZi_D)8Rfj7$9Q@-1GGkpCdhAzMZ=U_y=2C4}W*< zR`d5;x0*Y6-N27%+`P3msNHCMa@;<74C}3*?|r!UBYd_`F9gE?m*K}q!UO^>U_Q&9 z1p#n}{^o`@jzJ4U*3+qdEDFGpR-(MvP&R!0h6#Ue+c1ek@Dbz~bhvkC6Tj7ggJ++D zy|e_qo(XrpwF&i=Ds)jndglX(MqFtU6Lej_bOCqCMFt4qemJYg+ zsR&->-q%VQu9j)R@BGcbeec1rf6p8CeQ!AUZ+^Y|>&N)$|9kxS@lUb;tbNjZKRdkx ze!$PGTVgyW?*&*gxs`QsdEM60a}&@t+*>y@TPx97;x8AKBnHbUfhYW1FKJ-n&{n3H zqNjW8j2MK&XcU2sXAegq)fq%#gt?T76XlEFXBsA$rU_vf!rIyz8$W*X_<97Of34ds zXuoK)8_trm(D&&`p!Lo5T=f(1X_5uLk_0LlC?@eF9fwf}qlg3AT-%_7ILPRm*#DhR z9)AMZ4jYZZhj{%XY)^JS+}jtg?ti%`{$@p^(SZB-yABCb0w|iW*k%>?A8c%HOcCI! zkVMcl4J^ybwikp!1z^2v^Jfq4KcKeh2ma>n?jGCk(RUs``Q?YZ68tCF_WQ3+KR#|B zKNa^rpiBnM=y?u1Wzq@B|rk4;P|hweU3Ks3j62SM%V(;|5gT(U@O{! zgJ%bG=NR={b%DzH2#^q^=e6bfbARaX>!5RmLU+=!3j!bavGKcN=F`D| zaSY048M@%}dtV>UxzM$|#jdTbvE0m40^{D@d#}A&^H%e3*p|JMJAlp)KuSPkgl+1* zI1U;387T@AN`euSB==$TgGph%5(geD8^S0AyUZC8i~_*3A$S4Y-M-7FAQ7yGOLj%P z`GEdC{=Rezct-!;fB*eG?4IoY>X&3KKN8ROzbJsdj=0PYjP1MIxf_-}Tawe5UfA5s4<5`ZqB1i^5B_oKZhIF|h`wxcfyo3AY9kzk4d!FVAtqhu}7 zK*~Q=K7~|*%R*HFsRX)~>#~o{Or$vw$LKl z#7xJ{n+ZRyIJZ>XK~JlmKv%1pA_bmEQo?Z( zrO)JiQXL(i(Y2On=-ru$IJSd(PZNyhvvU~$;h3)zjT5L;q+-Z{LLDHgd+`=habC zbz9gL{iCCfp{TUijw!>{@`bpzwg#qYrb=KO>>n(&fuH3Y9>M*$Hn%os%Df~(ti`Dv z6fNS?4@oON3yTy(f>+AkpGA~ep=nx5I09TRBuCm1k&H;d$c6+8qi|}TyX-DetAT!N z>+bgN(mf(Uzu)(8xc~T*y&qx!|f13zM+mn*uhUT#p;O9IeXRvSyU z0!|ThB1rBU!IM=xD=cXj1Uvy<0J{i2fvc`X=VAMm@=7!>REv?;5{4lgW983$2Z?Yy z2$=osJoxrQvW+MAwth+1`+JWcKcU_mcK7bz$K*eL{Hb`2*mVS7aYzyvZ?MJ&wzrb8 zkn8c~)i(?DB6zZway+w2XH+@8m!NG(X;0rL65vmQf0gQ76_N;Q(S*ZGt$*k3`wwJK zgn-_#cTW8$k3XUAsW*!KR;zW?ZnvSe);g*>P7m+Ds=Ds}z+*)F7+VyD(Lhmo|BXIG z1d+fvYM(Cj5~fiO?ZLTMfAsB#%(Lh|lYL1k#6q{EuWD#%nW?4f5NBYLa?t$*lT0$K zOPd~Ndo#~0*te|m6nr}0M6n@#Hj(7sTottWA3PBRmujNr=hm0))UJqxreUVfqHzSV z!O0R~ftaW&Hyv|@u5aGFiKs@u6N+`CD8`mRIO@}7*gx<456%bS=bxVv@ZRy^VTbx) z3}@Bl#z_>!Cyi?D8A|uaa<;T$j!z@Jq^bRbiOjBv5X^w*(WAH1ac#9l-3}4}UMCFOu@`zlQGo4P&t>J$ z^V`ervuAVESc0#5{k)I_W43~9;?|+hmVb�br_nWe<9H5faP`3oSr0k_bv9kP2#{ zT@ned6T7<~<)tKGL{Qeoy<%k= zDV6G}pcUjF&z~3xR~u8DNlGxOl%j<3m<|zV&qdfGzv=a|1C2%l`hz~}x87PqLhQo& z?KSqibJo2SKhr1>ARdPc5ujMVrfH^(&LtW@NF@UMK<4oraB5K!@o_=Q34B)Zi2!(x zVyJd9OIhYAg(iUF@5D3ZK6j?lLMh4-fE1IYo~nIbP;O*?RC||U9D$==?xo(B zo*pZ5t}Fgtv;j#NHQ_nCNeU#$J*TyW8qBk-WExNzRQchI`;;dYeEPQW_2xoS!~An)T2ZERUN1;cl&GSA z7b{E?)h)?2MFJzgAjv+==I|8JXbpAmsZ1)*}B}wI=xw^t4ZIUN%L>s8L6s1tXXT%#T*Gir&8ngW1 zXM>3%C)5$|khoDX(R}*0Xu>7eF7raQmu>Jy9yC{*%vva_)hZkw9`b!Ai{WW3hJF^C z-`Y$;Pm?o_xbKak^uWO=z_AVf$Y&&=`2=K28sTs9V~nzq^Tk;4XnI$}AHA>cE31Z* zCjEU@5J0h-ASU4nBLFp(m|BUiBW*;r7B%MCgqj-_{GtU}0)Ys>)g*G`D`aufR#pDV zoXTk4Y_cA~-#`59aG%DezL=sLeh@75f@9d!k^Jwd_X&K8AVlyjlaWA_xHvo~0e!d% zUeQJf1d>B(BkEk0IK_}8kiez)N`=IiG9PDNu7E4wl|+!>%P88`G`ZqbJ(wDbg2<5+ zW)sH5Zzd90mc@!fl0XICDf92A>Yo?=VSgb!4gHdexh$jtNZ@6!nlMv>B~*k^AsKFG z8VXBi6qc-h8MHRNLrJ9s78M`|Qc?hEB7s+IKvPf2fmMm4j+vAvm;15=pQ5O6>bpdK zNd)TYSt!1fz>mfW-phYivFc^aBSCe!3X6ncY1Tq7)K)6g?Zl`YpLWJ+ep|0E-Fg82-_%;Kj=!1^)2C#{bN>yN^zbNIf``W!l_ z0Jd$jD&M@l2{z>t*IVDb!x}HT!D0mHp0*cyp?%VZhY#*=zy07r_JL7Wv6IpyH-Ad< ziuhi2Ep8AAEGt_}CNPY6Z<$;=LGfgZtb{3w@M0taRi0XjWD#nW>jgn9l10wF%=@#s zs9I4l<@!a7 zdLiicX5NWhDoP;dYxpu%>^u_Cvv@LXO)BZsf*^2%Fi!y6$iQDD5d3ZI_IthF zLhl(?*;(j?hYyPb4t3g2s;(`Da0whHOBH{Fs&e~Lzr1s|{B}~HKCt!=~#&Mnqk_58))iYDD>Q^dXC4pM~ zYIM#zP~~c{v({P{9~oa8OA2FatF_Pzrf!$rmFf;STxv8eL|YrP%IAKLgi@*w#tEy? z6g0sH(=fRrj0?%7^~Pg1m-LNi0`g!<4tgFd6-W2ne!p;(XMAbG6JrbTRWR6jM5QykKoDp@yKEzo z{QUF6cS&oZ0#hwyUdVlOl23qQ@B0F5tnyN+ls*qe0m}y?rQFY$p-dwD3m@!i26+4P zHbj1OZ7eB_PN%cb3;kDp*xcHBiop=KNT3eioSC7wvYfQ!PE9P~{Rcq3bF?Z z3+;wTAm5J)_LwP{pMg*N1e`bt?xhJOt<`F*uh;8f3*{y7CFreNOvSfPK0ldK)GG-< z{xZ*F<`CfN;laUwi|rl~;qPzVTmP@|_L58(ao)1>GJD;ixlB@Xfb;h=PfgNFrs_}-)-oG9!H3GFf^pf%;UXeA9sal-OeZ?w!#r`^DBK3mKJUZDlN zD%`!|8o{4hh=}6(9)xB)ci*)09`^ph2T*g@)9ZRAPl$TGIrE@WrNSf+7=bJ8LIS5& zsVdQQZz8U3%VcCo0IdNP#1skwN&%;~5cugmN032!d^|(hLqRh2Jo2o;1%KvUWWZC9 z6_5fDVdeUg1Zqg@oAHfzcR&1KtNXIM7y+6$nv2Xw8fRbJTy6Z3`iKai3rPyiLx`+H zu<8M5{yl#9V4L+l?>K#@ca}+3t=3E>th&N|FSdCSBms(+VwTLA(muL}x^n8$4(4ze* zakqJM?e5L`&A(U#PGgbDh1hJ~T>aK{CMM2PMuOPh2N>R(JFnO4fMam48=Uu`f+Xt7W{r_)(%my9x&ZQHs`Flnn}IN%FU zYupRKxrvp$RD&j~X5n3vyhV7ybJm{?`>gLjyUY4c+lB5qT7t0#ym}lF28$Q2aTvgy`R>HuC7N)_ zjH8&HMG{rlbmU&b6vEOqye2}}ITc{}SgAtj_n}&;f>w&%cri4=sNJY7^n&fAl1F;J zbJctfJ_3pr%>Y4g>Pyx1d1JYn>w{HJ$j%Ec`QGQ{bZ+mY4rZkd(I6v%7ag$PHMeH& zU-VHEy+0?>rD?AY$7&kGyeD6k;o@^G1D~2c;}uDW+`TBAvb$N)$HJ+K+zp0<@4o-% z?-QdYSH391aF!fcBqmvPFz~C@D)jsPx$~PVbp*c)ojxZ33LQLqbqqD9!mjlRXEhN( zl7PK;+v9`V&(eF{b`MHs55hiIk+9zaZ=A2dIMh*fnmJD;;8G$`MPXvoq?ZbKB^d#t zagr%Tnt&@3RIuhmE2RXGU`xUkiFch)-!I1c+In+%e@K8{Tz5TV;S*%B{RZzs&mZuC zkjS$kT_3}`l`Wf+Kt#ROgWf3uSUq9a)VDw51oFlQ;2K+S)(fD2!3jV_u(T@5b_A~N z=GIE9OUn~NPYMWvnUnEiM5D_=j7$3L_XLQus-KZ zpFl90pEK#r^E@Fzf=$oKBARf*=$NNTNn<%RO}x_Rod6_1=J2|B z8n#`#?pzi@z&?KaO%-5X=%uWWh1^mFUIbj#Py?8SP%s-o3#r)|AtX7d?_TsFi1}Qw zc;AZ>y!V)mZT&u427qfln0p?xY_cXRoh-#JXAFr;ajv3s_M*gPpucvm^eJ^|?e6Zb zc3yVQuDix-TfqAI+O_ANo%hvaL$NBZA_E1f0EH^Y+(shk1%vcnIp%xSo$B0mgXD46 z<8p4quU+##Du9KA*h=S8g{h(GnSzlLq*fw=Dts0RBv{Fm#mo< zue||=5d=M0EExN#`ge*?T-OEf+`GmaDs#Ws%HX8P`qpwWTdk>gJV5}~k84N>P5{^3 z0yAD`BuI%Mj_!|qrUa!)DYsS;V72n)n8-klR6`|;X(Gu5zw83|t2b9?5{k~CC{pm~ zJCFK{}B*U$IP?^JvBlpm#%3}6+rQZ znI&uzgC0lur}=#2oP4D@c0O@uqc}}|OyEq8vbm0qhRKz}F!l9bnhUnh$>4~-6YQnEJ~5$I{yw{|i~j1I)zh(E_H)lj0X)xR z>PbNgTB%gnxLU1Vx~@uwYNZNC?W5C9rxPraCnF3l7D}wcnY}aXnd`Vr1uhE-u3plW zanbv;XYo~BPzoX(>#6XlBq+*eF>I{^lM&UR~J_(@!EF|l}rfYc*mPreO1Z7%h;8Vz6I+7%T8l(Vu z_((C<&?+9M*EQoWSZ~56>m%Un>QG}!;Ez(jW@HG^Qf2jXi^~{0PXUTHAY*-P{q!IH z<9`T?grO~H0f}J~V{Ef*Lk<0&yh+nFFtOCg+sONDOGi)S^Zg(IEynx6l_?%;phBik zeGB>>5+V$R;Uocg13t;EOtZmIO0?hCAU5-a=z9qAl5&H*l;#-NFxMrcATi?H4xTus zxwbqvzdsDK14kn~Pq&wWXCtx2eAjFXa_cy*BCUzqG$~^{&1^s8icv3b=k{;4T6{p$ zOWA!;v!`2>EvPzG_Fcg+I38RK79)VSs0A!rZ(;YAy!J;6DGuhIe?WxQNaJKO4Qe=p zlipBg&0gYwRadh22zcJ>pq16LVp8z)as*H!z@zKRe6-_S=th1_B(O>u09Kg@8bTOk z_c}o@Ll=YU-5vMY*fpx)T9tHechrMtga3n#d!v1*Aqj%hObt>J%n02m92Vfy-H&%a z?e%&K;bGJlw17YXpCuV(Op?GxRUj3(P7wGPQ3P6~f#qDT^Rn_gCl;KZ>IlA4wIvRG zdcGl^1A*_I;Kdp~E^!jD^A(7I;)If$0Z+u!=MX?%>qcH-Kv5tHYi#GPW0ZJr%&U_1 z0e`+#y@OSc{%$p(7d~b8hy=ZpTd=ma2JI8BAoY43YW3L|F%l>W-dt^dYL%^p@H7^h z&4Ur({=Kca6RefP`Oky`grorIWj;t05h4O7nU@hSqHz@Hk2yB3UC#f4-_I$Gf~p} zUJN0MNa$;@ycB@^ydcn!1Qxg}{8~exECFEWGk(AS3X>~xShvw4kPE>}U_Gf}eHEXd zVk0nCvM<(zr|amkeSE)<_*4liT;Ik6$TNiK`PNc)ezO$k6H+qK=d*kEO2NMpe(i#W zWKPokv9Q6u(S?V#9&|su1J8c`E&e{HF2-rq6=W{u5u2siXeG9SSj?12H)3eNI)&El z4QRhO`sjnd`im}%7sK;)6ksY$(`0=V<>hcDfs}#{=tEszy+ne6mmmT7vwl~Deh+>B zf&=HB^ZxjGc1?|{y;|iU%EZbb0?-^8Y>ftj8t_K$C&3?x0$o-VG(hZJJWqJR4^2df zQMq(IZv%QsxyB*Q$*PqfcyL1w%{d4mtS6AR@2|ok0RMa?d7tA|#?hTQ@Ra?;X|WuGOg3u+4t1oB1=e zZm)y0v>2pDupndXW&7o<`>yMvT!s*Zm%s0bGy5@@=|Gf(Btas;ClXL}PG%>XKy7Z~ zV9dcM5RZ;{UlX~d-YZzFCkoEAg%XU!{uMzY+^&wK^2K+A7dk|~j>^GrBuN6Ard>&b zuR7W^LSScYs z3(qm}_$}UmS20Bu3!#c@H?WHPSkd7bz!_G&k04IaeL^()@t6b40L6C$ypICGtfaY$ z)m_L>aKU@pr;hf}@8HEs_B;ys=H8hF^_xQ8Wi?}UBNcM%>G9>Hkh!U&{L@i-J^GJ% zvxUdw`RgQUlLTDcr&@C$(KF-FfZLH)!cmg?>62#%PxtwO;j6U(NdN+$+N}LGv<8+i zvni=kqY6^Hl7&j8l%@Nr*AIrRf<6I?GC@x}tl(;xC7kzm>7KHfpH zbWV{3XqjEbc6)fg*2tfyuUL*%p7G5itp4(BpyNq4)=O`e+vd$?YMt(qizN2u&iz}z z|A(w!tyCA<Hw->_gjR`hOqUrMedLf_*Apy*4mds%<; zR(>4`yi|c$B)PK8Eud7WLe(PGaY_RG3|T}>WnKYneVbo*Um_SQisc~zbo};Mzvf5J z%EQY%_$u%ev%oinqFNTOq@&LcpZwX+|CB#m)B+sCS?C4Zu!*(@2cI5pJ=oa>W`UCF z)Q@d&6k5fBoqBjYri{A~VDF%Pm2AA$INCM>7FY@BS`3|6F$@NrP)$7EK324ktx?B0 z9``*{>=Bg{Mjl3GBvmxwq#!bQc&(>4iCf{EvkT>HIJT84?PH~Htlp=f5#hUW3r{r zF`jXK##vBtz=%;<60{c$+vUn|c23eZU4YG7&78u@UaIY^kOWwEGJ;+w-q-@-Nz8yx z*-42Qu7k6DtdJlhnFSmXf6TLNql^;xw(!$Fla!1EeI!BS1}6aZ7FJZ}6jkDslY^*L zYw)#+1U;1Lx{z=pfF-sL13oU5r@z4!DocI6f`I$HZEfKBxLq?6Pzzr1>yG%m<{h*K z)pqSX_*!AFsS@#OGxMsFU{+Y=ET<^{PhJWdHcMCR4;JczQJ100^ z<~>D#1bg(ivbk-M`Wjk?gXEc~sIfwT)s;;0!K>%y6@ixua7jGD>fe_a3tPZq(=o;Y z=~fa%0ZJXdUCL;k&|p#rE2)7Ep75>^8}~I0Oq?I(mNT`?G)+vpB_vxf1yEfIpyAqZ z@L2!{N4VF-hH6=Z>W0Sle0msxgZT~y{1_AtZV@1W&6b&L=^oyNzV1E%EQ|o(l^!v+t)dakaVHVC|}Kmt5!#dq+R{=}%I>ZQg7x zgr^aYqlI1oV~!-zch4Y!u3PyVaRva9K`+cVmN?+vMW)+ZZ#lU++nW|6!965F2c&Up#&@mLxO2cP2kXU~rgj}FuOkM|ER->?wILbES3w`&9=!=!jOt9na!P$v1c zyTm~cLw-#pIQT3h1(AR&MV?^Gm3+qiAOoMmi!#FZh4}f!O2_N^3UA$)9DItpsC<%s zNdSrt)}M<+Xl~3Pfs$b#0j#fNfY+)v^hE7CmUDIfu=rFGi0mKz;UD~Amd#+Xf_@zW zP}<@silI9|pLP{V$Kqvh5YUGBAj1bO&gL+WpJbqir3xgI?9fXZujnM<_w0#~%wd2M zN-`?0`yoUl+|$xwW7UHGMGUPQI=D!H9zL_n90YB`N#nZw+7yy={33$nRRn)~X9*6D zBGw#{k*y7WhE~ml=SIN1d%dMW3->uV3Sh0FLHng3MLmJWEe!@<0=>`hd@U0uc1D1b zVge5NrCws+LVd~qo8Y)SPnyB^)J?8Xm8uK2jS5-PK}$3&9()(4*cJZ$5$1>F|LL=* zPZj|$2!bzI0VMcJWqao>a92*!Yh4f^*2U%}RrX@gN|}t)hsJRTnjk_Q0VSdpqh7V( z*|7)Jr7YP4KW5w`@FfBILp%?H(`;HfBB()tQ+w~{7kvCy-c|_wjoUgLy@(n3tp;C% z`mn?+vWn{-cOp!1g23tE2ol7}n%S22lUU$t|^WXR03Xx1fQaP7DHo|kBI=# zB$DR=H-#NUah#6RTn?I4)C&0Xg9;;x^74)Z_z8B;;WcCT*SoK+0Q=XSsLDShg1Tek zBY}9b<0M46v+z1&5-EWiwPhPl&W1UFDWnRJ0tBNNd~A+T07(GPi*sbyxXssa3YMvY z&*$m6o)k+Zf$b{ip!Mz9gd^}ReLflWv@(Nh`G*&o3dfDT1Mb*YeohZ| zG6JBG=jO)aic$rG>_Lg&H_d$2)RwdN$r379bye4ezUSfCMW9V)Q`Bt32G>DAmG`U5 znIcj2agE|V8LqA29*}~s0x!cdvUfw=lR#I)G;Ne_4w8jqNq@h;HFM9(a%JjX(IP(D z`{+k|AMgF>b@4emK7!-pV>ULzarioG%(Q?gi5Oewg_rc9d%OhI3a^@KH9`V#a_B~% zkwLWp@z%_>>J*)AijPE4~ zK2QFtAi<>g&5(IMk->sedQG-A!RJJR*9}bppT?M-CwqH)|5jp9tJM}-FTh+#@F@&0 zxL9Zbhco`kq8~!wcamcW1`lB{;K@9Gfu6gOPmXRY1i*JJO8^&kF_CqsF9%ni&skmr z{|afWB7yqC4%9J$uLf2Bs-gf+>eW0-MGaN<)luIyGoy@UIa3awBnfDmRv=|{>byGN zH{SjAE>-^i!*4%i_j{)&3*j(D09Y_&V*PQ%{3w|S!00x z(?as0m6QchjXZ?K+K!cqjqqow0$W}JX#)MhJwX_bf^PBek1(&)hy)JWmu1lXgb@oz z2YbK%;D76$b@#7}m$TyJu7CP}{WN#IFacgS8Z{dpKkK1X^J}-t6V1U#GWY|mz6zZ6 zxTMOyQHvEqkkpgsD`O$AB<0lfas|B6*~~N8W!!7r$M^W&RTuqsoXkCQt>Pky%nW=C zt>Ez#$s|h0CjJO`IR;fQ%2rMx7LA|$=}&&#K5GATk#|mB#j*oV>-fHFiY+kI^9o7y`GVmz~{O0Ng8+T5R()*1X2l=cA zaQ}|U2tfA^Phw^P6hwfd!;`f7Ww_6=`fz)2M@T!HAu3DTVS+)2A=l_^r*@1x0dnwvPk0XReTm=JLQ1b zI&>rc%nWqk>V5&eo<;tLYU)C(*~}++)PS=g`ZYf5472-gWt;U{#Lr{vHa1Mi?Mwn) zw}I#FA$TrCBYtn#w;{Md?=)P{;ya+*e10IlyO=G#sG-^t!T zCZjgs>vV_NdYzt^&9BzdaeW1=I^xeGYuu;{mqvsbuDHSDM{eIf32z+#{v=Rv}A;1%~ zT*@~DL9hr~(7M%v_uhMN?sMZZ-<}y+0sRQUcsKW{SZzf~u`V7#2)m2~F_OVbaDj0( zYga_G?&iillu#l8RX@exTzTHYsvmf)@+oLsLEW!b2ozq?1Cc-?fsD>6R}LZpDS#Tf zmYp$9kbIihFHM_TK(-)(@_tz2@0PQ9-e4n3r>23#Adcr3(?9(u|CIHM5`ZlJQUdtn z#TK+O2K@0!=j@*#=zmXr9*Tr?Iy!zR%6kQk*}DVP72$i!d-$)H&iDIk={Oj)pk8)z z`xQ@DGkQ>KWY^7=O`cRt47C^~db70(@o)frRE!W40K%5f&I9JLdQye6t_Sz;HR1Df z4|+YWD$vD*8Ck{JPK*|Vd)7D!>UBI{(v>ISbByd;W|?Zd#L1QDw6_8FxCYuJuM$Lp z+;vFFiaW;CVZFtQ%Zmz)}ch64m)*Gvv#fM%Hvu1Ud*>!(~ z6T@11#Co?Ts;+jDzT;F+ARJXeA92~&!>cXBwVhlKtNcSduRLhpKnu_{20XRKiVcA? zEwhpUckWDF6UE0`HIATrOcoJaCMPXUgOj-=&+ z9!Cp-)LL&{`rI%rd!Yp_%S^}Ku>Z%sv$Nkv0{n}s-W!}-thYm+G_TiWBnUmO40eSR zQ7>OWRNZA``c!Sixg|*f;nhi}An;|Zt~hXd?z3?aTj~8XBncoN-g)P3I5;@s&;0>E z50ZddjTbs>ZEdhQ2S=PNTN_n4_^b~qX3ZN2xUE6GnzvO(0*jNNKWxBYxSD%T;LA2I zj*gFc{!8&fcgBvb*hLRjyl|t5vYT*1Z{FbF-(0Sz_66fE z^oD%Cj+NJ_yYSA#O*nZu0J|(en)IRl`2bqCDxjNH=ycAYQL~}n*U`sa2&xW*h6Mq7 zH_II~!8Ah{_(BnlOf8rKkjLk0j8xY`a`N+CsnCh!bVh<+FGqq|p^IwC z9XN|IlHgP9KSkO36YRg$JZ;|54D)-fwT*Z2db`!y*qODi?{j%}oUD@lkV{?gk|)~r z_#D%Flz~~{s^C#?)ND5Qf6)AaxC*ZLf;>gq?F0DN|NXz7J3HlzN&>3%96&Ra zph$)p@w{`|d5%4i;fE(D$J_0bqwN)E`5&P|+{3nw_qU5gupM{iV%`N$q@835rHUsK zP%jCgmwAGsD)+vKTG(b|lZY^h!5Xh#b#@k<48k(1!a~;S(C+ke^N0lP&-uOkcWMlH z3L=3TX4JgazQyQtI_X%u%0x=mLTl#)LnQ&(fF#0H<%{cr0$dgQNP_)QrT!iggRY4L zf4{NX_#@l4zlYbiuwM=$UJYae*9i%}9Jf|Qg`ic(7Vcx8vdhRiVGYJMT)<;6#|_pJ za6yYr(BtbTuGP${J{V7vK*nmFlO{4d*IJkISzDP_VI;s4IW{4_YLVRKFL&R+bh zP(cC^=ZKS-k%6M91YtPM#wgAXV473`F^onR%8qt8?00Fj*M0KI$8Z4u4khj(<;!*5 zKWa8w4>oSMwnt&Y?ZU`^P*6}nTYNzr$E@{^Z1i5-8(*{ZO{gy2V9(v9E!KPXF@LYt zLGaIz5GcXGn}6N}eUcF>37SwS;&i`R*R^j|AsmOWT5&)#G|=(v!8n3=B6EZLhs$7= zvb+Uj3rw7=iJ}^fN|g;};IQ5>9l zp7#@MbnAaPIB0JlApvl_gG6{&H|_0KtF?30TJkJH;5bEss(x0G z3Pgo!@qCMYu>_yJk7K*qf#96qb5Y%On3ph;YMqwNOTd9{@*YxzH+yQOG=SC<4 z5gyE>170)!IAt!1}g-}+x$G#=T z?+k|c4U+`ol2EM)%djXaoQ3vfBO>uQWJNcbOkgw|wL7Ps^pG*kRy-MY;d|#PqzvOa zc&SRDh9tt*5F={C{_q$6!2bn~|EJv#ckecDHt(*kt^Q-Y-r3sP+NSPtS_#6-fq8}j_cL> zmGh13E}W8}UVHt@|8nEg&dbiH1Ap+JaJ+qRaKH%gaOdH-vA;)6kmAxHIi@f#k#Pw= zg$;a6Hew_2!Elq`uW%CR;|)kIGVrM))vCPAM(g!D{OZ}SUhICno87!NVgS!xJcGl- z!%OEZu$&;l07+2cO7Jx*z*Vt-@a$k8`yZnuIyk0#_qGnU?gcS?ckNb_l%dhW-nPtD z^z1S=TQ~Jf&6||Kz9eHr0uT}$44RAt&cvFUN1#h0NCI3|{ms>kK>qmh;?qmnClFR& zC;`}q4Uq(6ZU=sVhl$YV3=6tLEWDLUVD!w)k>ufBmznD)7+s={e$-n;(|Ne*m!2drNS>IX8RQVTw z_6zVl@6!3kYiAG-Ef3!9b)jCX!*5Z1D*MNeAO9!y!Q+n}Z$Etd;r8A~dqjY3-ExiX z9i|pcFcJl9xU!{-GiqGPtyZjbxlFwUnh(=%|>t7OZ(%`j~V008mLKC zuxobeeWY^zZj}0H#ffHwbFGolb|w#@X3fxzT7W(KW_a6Qf?Qmn-;gmA7jB zW^02UqME)s`0QZ+qrH!QVwdfUdbJMSeivHJ7Myj@SUyQ{$tLDqQyd%|z~0Au*Z%xB zCV(1JZb%uZJ;UGH+8VS^+R$2SeZ|Or_2Dk%)Nd>r(_|#X%j>R#1OR{JPu-UV8GkE@Lwms zQUb7pk28iI9v!ltEJA)pay|2``U61&KhUzniS%H?V06pPji}sdt^f}qmOnx7GZ#cUe{RKX^r~tIDKlW4ae^bvd#y6h;b0V1} z5R3zO_SrLbO?|CegZ62gUANX+U-uDTD~bxB#uwrF#rTaSz^v%?(J%Xad~$LEYin!p z{;%Hux{tL`6cs=M{zZ9yF@CEEPz)l0`h_Q-pQM)3>-Mg-hIg@e!o3SGckMbhc>e5l x{{PnMm;e9(hC!H+;$P?f+=~d11!%oKUk3)`>u-_U~whBFIrNGw5+vjmnVP49}dEbdCHTAT4&qAaJJI8G(0%B3RzNUE&; zmGZBYb5kXD==;C$WO_TN1JeY){bSifySa=h}n@`I$WEn>vhZ z=mRzUZR5{@`pv7;8DZ2k$hpG z@6Wsac_f5gqX;fySKKv{$QQU!qLa6I)&)d(_?ntFu7N14?Acz4AejJA^#X2~s(KUx zct+rpjr*F%>R&)tm?vjIEYN?7Le65I-`?JS6RZDnB{0H=4%qD{?K{c5HTl{&)PJ zF@EsR>nYD=Nya30*fX((zd0uMZ1_A9n#DDK8m;^=?)I=O%AdlP!QZC%2?X=^;!8vk zWEJIKBRQ{PB)o}_ip&9=(4f=+4v-3%ptB{%QB@VtaUegHW6xFWvy&REeGE{mjZOqo zznLH8s{JfiKiT=bTdj0Wwyt73Oh2;dY7HMc5r0rt^B13CbaPw?g= zC!k26^QLFnEO&xYiJ-dx+GKvbBA+4(*j~VP5?eUC7s3a*S0IsLyMP3}fW%NF+=&br zP-jFmt=$t9_1=D{Y514R=3r@gX(S@(EPyVVPYZd%E|3SF-;~|2qU9Hm=pV;MzfC`> zMYID}=g;Fg%%feC2)^e3Fd_$_KI|^0#m{_HPS8;R?K0nU0`Gnh2#(;piFZ(x-Cl+} zj-#GCw)Ke0MrxcnJ13$Jvl-yn}en0rGZ2c2%yi*C*s5R zT|hQMc1=6@BDNVtRel(WKH+ZUuLR-kfcra--8?w~w%^3-$FU(}*fQ7-WBUZQRcznF zR*yRX_1?87hOo1k7Uy74C-4Q}XTFWqZK4PS(YM}i_aq2aQo-Cdsh>BRMqWCmy;iA#Jc*V+7F0f+wP6_kJvo4XJOv9>uc-(1Kj9f0vMM;%V?n2b-q3b0v137Gi03CF(TB%+{ z@-Ja4j_1ZB4gk&m=2==^>PrL?tNJineXo^R|7V+!5;*_?V}OMYR!MhGDMzG~r-M{BnoOht<$u!zJzgEZ8;r9~)agoA5 z&y~?-{`AJp8^4H`@Ac~dM(loN`8HHGDkB#Fsq-yt3*m<(f~o9OWZ=^hfJgQ)0?6*m z`eeHq-g!N#4r}VNpYYk!by`jD8iSE=srsn;Pw;YuJ?J3-J7(zDu6_WwZ{6-VUa}n+ z1YZ_~DEWl)dKqLve(G@$COK}A9#NJV&G1PiI+MwQj0c$8m+SvysUFWl0-(yK$n}VC zM|c|?$vqcZPY(fj`|&U}J(Xm5U-&$df4{>w5MHv)X0Yy=ERecx@qrrO5vApq!d*}cw{=kF|(9Qk{5|Y{DK%@6K z{^uYi@ak{1w+|8lS*tdo;ekdsZ11wfC}ASRcF^viLqLn{KHl9Q**PJHWRH)J2M0WC zB!!MZ9aGurMVDleDm=D6!!Ww8e`@Uk=tqwDL%jY|-p{J^h?#Prb(k@&>lg zbs|0tii7;YJg8Z<=h!gf73@`nSIK0dk;Ck;1CMa(hqClOGCXYQMuNQxOG}`(Oi)*N zfvfjdAO|W6U|uv>N{At=8+5CPQE z=`@TfW6ahEmUKIK8ID^g0V`t)YwX)n_YC(|X`?$i*hC!(xaUSV_KK0jBN$2I{8Hv`pL87*0FI|GTpaxBm$a3iq;6r1s{#VTBg z+IboUCkR5v43B4?Eyng2`(7l&QB;b%JsIm4_)91bSVE_rLjm*D+E!Q-?t=o9`+Dii7;YJZM?9=UfBj zwSZ1O@SaO&}bM?E@M>W^Zl=?74*F` z+<~^~@d^L8Q)UA+ffGXHpCz|z2Bdtg_wt(c$JKKEam{~_mb&lJ*6l?5?^^(I zhyr&3MtWLH{62|*+BW_XYSju9jve=ZZzqBzgtyJ``)K72x8mIl&-Tdh<65@kH|j_# z!6W}BlKokefA^HdzmpebPJ9eSX;SFp4ULIm7%biS9u$tufu?D`2i0E!+dRq*u0TP?rQaEs1bK3gxlD-xI-|kGdv(ANPz-l15_FI3$hF zHV(~ruhpPwq@w%ppDc2KUXc2qt~=5yR&6#vlDXEfQb_=_hi7|^-JRhpk>5+$va$?0 znOm+3Q9?Z|rFeVQ;iNnb6n5KtxmvGoN1iy{=dhh*kuKSGq8Ap?F{rft&^HYIi5-ys zXamHJhy3R566>-{OI;;>CL7K01_X}rN7$yZ>drZ?0Py;CXAjmb#9godSAqG&-XW0y zko-s3wN14K3W3DHoL~0NqRoL$hYxeL@8NCaPkAJA_=oCPX1*)hm<0we<1V-dXAX8zxyb;NXi5SvFY^+q2yFML#;xuo`!!glo@B6LE*+l1NY;!T`o3*~iOQI+ynV*jAQN-HmqYcAXUOVii{XcD#uz(Iq0?bJK z9COV!=Xn_0oO`_uKKUMq{4kJwY|7lJS##iZ%^b+XwLZor6+id?JFv5P=8`7u_ruL`?YFZuDbg*)NWn^oP*MXa$n;mQfv~)Df>~xHA0nbw1Py|)HLSM zCJ)L)8wiWp0Cj?INEAd!t16Jsbjx?q&G`O(Em|?DR`l1#boBoHvEb`xUY5Za3x2zH zQ-qt>>B}OV`-BQ-POFengO$8}&4l;XFeb7hoID}J-}}20;ML5ZebRVyaPvP z4#A5j&RV69R~OR>&u?R!@29?5*|oQJkifAMeE==+e#h8o8c;5mA)n7Dj)A9*0uk?Y z{{5=XZT;FU2TmjLM1CCahwS|vl7H@W8gdi-p2+|DceyjX{*sI>V3v{pAvFsQBKb4V zA7amEo}a}?NhjLJ{6XFq?=JN5F0<-(;M7q8UXKam!=euFUDx6C zQ5jAgR-m@E3BU7o8;a{T+*xkA61)mXS!}!3E5Gytk)*@gJJZJ zfyDHGKj0J+PmM4?yIXQE7x=T^{8JOYwz?hpElhqKzxWR{_#3YT1b_Rs3BQALTwmto z|D7LG;M@;!PkH-lgY`G>n{Z;5SN0!#Q-_^yoW-| zhC*l`9{GggDt}Hwm_IDStXsSvF4^!A66ciwRsR=$L_+}x{<|0cfby9;1ljYCej-Z# zfBIt`$p=RMsiXXxMEu)V4SyUFJ|O9fm1+&raFqyUl?!cpk@Q1x9`tA1()i@yP#4Yz^R*d*!ALS8fI5|BHVZ*glc}!EGKbVe-ih zKDZTil$tSk#ZTqX&QoThcd}U?0edC@4D&5f5N|;fexltBA_xO-m|!$RH%%l%;u``P zGyJ(Jm^-4vM|hh);4X(dF3cR_{gNrbl^ZsE^M)&mR{%2e3N#jY)~0a&t9OxHD$;{U z{=5obIhj+Pn4o%5$XKfR{{v8|2 zkFnJqkOf|{T1Ml`-nPMRgW((i1uVdiuFs5nFPG-1B?ukKO`RQt>>EuEV9o z72RV07vTw@^q>qgvomdfyYc|@`T!^1Bfo^AfB%Msi4+Ceze2|*6V<=SRiT467+4|tEfcK z#xy7{_D@f82iPOnO$$Ux>3JwbJmIYC03P`S52xKbQ^pXQDUw$mRWb4Lr2 z`$5Pb1ka2Ev_ndC{7e&C0?RaS#f8@}w?C;sX@lSY_LVJouVz7ZLWM)qGQ2pepuM92 znmoJTzlFK@T@`ZK9L!BM;4?4QFyjq;Zot*mEb!U}sBC2-mhD9(J#!ofYN)tuwgI(T zjXh^MYZxF1Jj@-*VehEG^H&rsh$ev0mH}B6a9-8luivMVotZ82j~UQCn*7gu8|?oJ z@XX;GH%xfXwf-MR>we>m!kPyn|NZar>(^eavi@F0g%xU#(~-I4R6u$d^o#_s>p1Ma zIS@}^Nim)ohugPr_dPzj09x$-BDO_r3wyGA7u9OL=NKZNnujp?Z)2W+xDMHk+k0PV4}toh;Iy&F%Mr%irM}4OjnbC%KIi@ze-+%29zE&GbmuK?P)4 zR>$9MXRvt-M+^L70EQAdfNc(BVWiHYD2Tfp0FyF$K=I7$0H?Y85LHPIZc_X(GFc5) zHf&gXtiapV#GJN)w0r^SFJPUsJy$NVEWh9z%9V^0#X1T1y952;l|7{4Q%ziT`8-a3HYvO!FVgSv@#n2001P}(z<$j^6>fU}}gpdaFfc{~}LR5qhFZ<=W<1C{6^{(Cr0G1woyy;E$LYyaaj1dz6V5-{o5^j^b?1iYyMcF z?T~7v(qodqC391`#7mHdutbzMY+##C@{%26C@Mb#&qNCyyaNrh0cw+1fg&k>W*UY8 znx^d{#*SHH&-L`Ne-Uk%oRWml4i2tU5CS$+%@ioI0+wj;gEFmPa4N*QgS&6?3O1Vj z5$>*0eO&!s?J=)pRZ#ohOKGzNH6y752m?F7T^KRwkOe9F%rK2ne`e$elOKkb)}Upz zq5|jx9{FtlJA1o-sgtVv#9a`?=}|4_uSy*04V{s%jcZ^UCRjUGR}mDB9qag;I;JN2 zHaTMwNJC`Xl9&?71wJ*RbNjvoxmG(c5sdRVlgH%t0_fnrwR*_Lo5|Kw-K-`WFNrWj z)wM!_-2o!Bw?_|lD)>I-;J6Ht&8u?s6D`V6iC2ZbV}mRXRz`0c~`kGMPKfV9<=GNvw`_W5!BGE`gogTo) z@c%<}tmqiXj&s?Zf3I)r(E%)ecNgI7!P(#@Aw$(_QU@3=cT2<7Uw4?c3AM*{$nDGc z&**v?*7oqLy+N7Y54=3qG!1lJ-#wsx1T59J>Y*`vyBBG1rymYZ%f>w1d@>(HduKKu z1G9e@meq!M;;=&%kN}8y5&$)V-e`1P29b|#*?*8qwvEb0CDC}vFo&w)>#87bVL#zL zuw#<4A)1k5Owytq`aZc)E4ZhT7@yPvn4d>qSk$pS@E zn5C<-21YYf-9mJ|2Gc|W(Erc+7T0qbVVOhkw% zC3AEseBc9M%f|hP!cZ|1z~0M1>GkQ@w>_bRwkE4GiZ3ibs%Qh$G>V|1cbvOkuR|u2 zf%;}0R7D2Ew4T~N;}|*uY!c8YMG!-!QrWZ3he>xFw=z3eu3uTrAk(S0Lkj66g0+v= zm;f@98PL&5x(NX1{kZ(FJn)|CkL!uXa{;6VCa;JNQb!R?h_E*T7&Y3G-VQyo*UNOX zC4xawkmmQsPWz1aT)?KWJ61;#;JhVG*ZljI*y?+47S21E0Ai__0JPg}_LgHa7Z8)q z7LH7G6Q{@Uw3G$||2)W!-2G6(neK$FJ$9~wm))@qi1Ff3LUTJ7~uDT4F&;`|L(i*CVEGLR_w@A ziQeDBR>U^%N5M1V1d&XSlb#Bi5K^EhiYQonH|ZT9qy*fu1L?7J=qXo7LE4m=@l$j{pWN#AAdsW!b=@G-K* z0prjYfe=(sI}sEPW|;^G3(z;V+BSl9hIT6jQm5&{%O87dB> zF!`ebs}S6$C=5UE`s!NWV|~&grWOLbp1;8dSj6{2tMsQvq zcRWbP=C-oP@<~g2dWC9Ec(*z88f{yJ^J}brt=4l==(-3 za$jAq!Edee>mNUZYm-!X{Uv_?qu8rz+8=x3Xd3Kqy$b1E32xruFO_Ol6pbGNRb$H- zj0Z$!GL!fn-vOMaHRyMXSPgGt|CTJv3-KSl3LBL@4+FNA4o+k?&5rM#I&8zKIlhk* zbK|Uk`x-y5hAG0=uX56;S5ctvegwVB91eO^bXnH*D zlYeTCTZQc^=#A6-tX}(}eem{G?h{cw(?dZH-rc<61nr?_H zlH$K&Gz`{ikI?RoEL^`Y!l@NL(a*ld`!`PW@eO?ajWdDGi&8*7fk>z3AuC5C1*;y^ zF%{Bd>7n*LD7XXAq3r1VNh{d|1}e~M+2=J)TTn3nEUVU*5LRjUPgKNq{P+-JmC8>w z@G2Gmgchof^9Gg_6`Z{jtspC=N4fQwP3NuRXwHE%^TF?m`<*MdczC~P)!?uJ5Viha#c+2z%buCjja&>WBVbzw;e~HNpqi*ZuKRFCAk2_bR-3d9m)Vy|BmjLYQ26@VTHDrX4fkZY$k#-FF?3fL|ex8$`9~$hebd*_ep+V+?+|aK&t#y^wG?L z8Rh_CY*aS>+wI%8|2*mb8x3=)^NZ96iNK+B42eL7Hklkk==aND+5g>?<$uYdAUzJ- z+uI;WF``ibVG+b-;IyKlZERJ+*|Gf0SDQ;PleOXIttx-ejJ|I)Yw%J*fR|qoS=-zq zGQD3dXqcKm_U4KSSMD5u_de9w{qhF3KdZv~OL>_4e{(Q*Fqg~{|J*oLib6Dml4i`T`Fqg0^CO&BwVzJO5Co>lU$HFXbB^PjCzT4w$@XTg zy`u1-NF-s{^h|P}p~WrTUxh-!Jufu}D=Vx1*ur66z2{!yj-K(Ho!$O4rZF9kbDF3~c|M1>kMe+09qKux;xCcJs*Cf-**~GT0En9qFJkzn4eaRcMQg`6hXVL%x{=8V zOndjJgd&)mn}ydPZ~+2|fUsnr0=N@8u!#XrrnP&0)M~XFBc4#kTo2iMThQ+mgV}7B zdTHjcAN?qr(yt3CxELO$tp@9F-?|Nzjp4{ANPUeOG72mUqrfyTkh+5?Fov3RRX@bqiBq%DA4ZVpgi@)* z`n9z+)>E|;1h*0x`5lm-&a=j@_veE-F($S)A1`ihZoWz9GC4VkLKneq+N>vtDUk^v zOg>q?HmUjZjEa0h{{o0bK|);I-rhcs{dp1rMFF9m2+o8=*FWB zbSMi->zw@c_4STp$pNUT5?|}o^c3rJ)45%wBNnkQV!JdmoxOzjMIxU-`p56qk!5BcCAkJu+bww7~^*f_W5x9|iql>D~$?T4&e=obH)k->S2F%F;@;0=11= z*Xcdt$pNwxSo`2$S5-$UXT@&0mn9&`a95h&?c<~O5jO;=tThL|$2{nr6M> zXRVjX8`vsnN)8-){t#p`8F#$eHL}8)PFP)AWzW3lJu`h@mi03SW>{;ujdw;h`i@1ery zS*&c7FJUVRg7Am>wtf!<&~YvzoDj}=@4g-OihRNV0zezULjXY>U$Lf6~_;5gQe*cs&0s@JkjtAB-xMkLAHP%WGOFifI?4RO;NGD{U%R=tC9Hdo3z+N1)tN1i3~0W!IR7(Nn%H@AZGQ#mAM4fKYN?{m9dE3ZMT)$+;j z3pii?0IzQ9C-+T8elD$-jOwFm5!)TS{f|4X)L&v>6G8UJ*v+7dLEv**EsI~bLEQSE zWah^)gaC$$0&pA$MPQ%D%LTeu(;65^rhg8m0a_;8@qM!7{6-#DmRA6;d=d0byf+86 z1A)DhgOtlW*Rj83Zkf06`cG=r+8xgwhDF!`+Tlr&PmqRsd&nrjgSd#K|C{VoexLU+ zECLUQW)DT~$&Sk#yb<&*{tk(tP$)pPT7_&j+g1#UtUx~RR(w7nzWe~^dr-dLFdNr# z{!1u~OV}5)>CuoLM%)4Fn{~)cW>~+pytkPjhcxsIZWIgxasfPvmyB)w=hSgt!Bibo z{T@8>S65eAo0ypJi6>|inlAvh9E^ZmF2}CDK8##8c*ZKd1^1EoRcyb9kG|DtHom!c z#|>>AfXHWiT;Kc5k7EP^h(>|kLkvPHdT&_vFB?|<^`q0zEvVyTppFT!URr0rsTi}? zj^!U13I?{fwxjcn@t`FUP@~GX42uba96?pp$oT3;6*ejxbh%imR4#4rZ2vZ1-@=oq znTE;on_x9?4h6-vqx&b78pFjK!yT91v_YK+*3@{ynIFgS0w4?-1=ucP#$G5KD*#NU z*+WkR1g}!4w=8Sd1e5zFA+wKH5jcSuv@MOAgMSKJc{2 zCyYh_1UCxARI=Bc7VAg=^VLVyH%}gafjtNdpdDC+yHy^BZQ1@cieMSLKLjqaOO*5O z^)rK~Nj_nO0^m_#r^G>LAQ7C$eqrYM8TO#`amlxT0y#h@;_HvyN_T)rzlZJ5aolgA z11vtV(@X$zsPcOGsgh3^od5_J1y1adAas8v^mDOZt^C4=AKmz$XFqiY3NI9(jCrjH z4rb;gHg56hbjE+7(a<4fyOCfsOTT10_IIEKH*n$_Jr+@rrfIV1NULd}oEIf7QkMB6 z24y@u)h2)irodk~CP00fGH!Cm0(wYBvNt81k=Cor2#s=6ayN?&V`7O3~RWjI}>2Rkr zZIk6Z^#r|&m2T+IJnsH@0d-zBhc0-iOxHKBg$@btHVV z&aO8%zyC-NV^0M@uuODI31pwX2)dB3plIx7%*H*z zwD`4Yn%xB&f+&f*=L=!0UWHnNXi&5m(l8-FBo=%!~J9-_PgwJkKuy2rj|V3M5_v5C8}v;6T@PR%bF9kY$;*Yqc7Pq6n!} z3Wz~ikz~nT5P*7;s1_!EXgA!2MLFwS|u-?(uDT@+q$`Wn&1?|$dI z&pZ9u)U1DJ4C!nC=o)L@`pvDse&^;pe~rynugeME4ryVuYUl(!&&nUU6P)caP6=A} z^l8LU5-Dj#yI#3=?OW{QM<0Axc=gp++mksKU@JHN@&@b6)BX%VFvGp_%3rhxgz!rS zGfXf;U07Xhg{|+p{T~SNvi-iKZtzpK3_OD+@0s(0a?H8fgzYN_k3z-7nFFb?o6#T3rtEp zsnJJqmf)s;7lD*z$-%$DNcsUvKz?Cq;l#D;*WAzf#eCX3od`U<{BrwyChIp;etzE9 z4=P?Zo%Hqh4yt1@Aa#UpPO#`n{|rIN3TV6oe$0^{1nHXoT9ZnCqXW-( ziJjKtxyzk9cUVn`-;Qe^toi!7W;xoA|J{#Aa&8w12*P|k7I{jswsyzYC%Q%0t=qR) z9Sow4yBofKv+2)(!3ahvcK5qRrIvm-y5B`WsO_Z1$u!6uDvQLkwlN{8j>s-c5o z8=2Nh^}wB1J}86Q&{(^)wPg+37X0wHAKJ70DY@CK`uYxm4ze@Zf!^Ub)T^()+S3Wj zm2$b4b2t#VsMKw?HAQWza8Nn$fA2_{f&Bs(2x?%bX2zQzG-wcedwafqtyXi}_ddG^ zreXT#(fz8As;p2*g5=IWd~_J8;j$oijwMrWJDE(nZBZ0~Z}D!MVmdtyyx?)tgypnU z8fZ}z!rpM}_DATDhj8kdQ?RN=v=9{c>QAFWxaPn2-h1%Y+iyW}tJqhHb>O5|C+m2%-_c8o%;|O%a2)5JPt#>L zsG4=YZs?FrXCa@@hf09sppq;xZ5CT%xV?K(sV6lJ$uF8}w^cImtH`~0)>kQDQlYj_j0$DY(?YCv*=5c*7MMf9X1 z>e~v$z}lTPANdqB=^2%N?OOukY99r407`ygxzOInBm+I97dj%{h_{}S?yY&S2~Vd=_7oEdaL9rwY3egc zkSM_gMOBJN^`lLj(4rI7wMNZ#fXs}Qq3r07jbX^|2YovL)si?)@RR@g6XpP3@*fkZ z5CHF{q!!Zy}!o#O{3{gYuu1GHo)tJMeMWO ztZ5pJ*lpZ@8YA?MGoe<8*CM9zeT;CH6ESjY_IQ&BgzZU=3DbO05<#32nOqQE z+--rCMnzHXuK7aSPF~HWDZSf#!V#YhyFt?^`TN1OO((ohlU2xjyFoe>oG5}3s%}?K=QWi9XF9w zi_l}O*f?rz+EG`OrrN~ec+qjupd;zJKCFSBNOX{IMz48sb+zmG^*_J99hKqZWPoDK zw@~u`Et38Z4tW@*v^t{E+d-&i5$bh-KQ>UO9zo>0SXx?wq?`<$6X^h+I4eMcho;&D zS(baw&t|jUrFUx&Ye#dZ=h%SA*_!B4akFK)I45wxOMK*`Os+kj>ZmNpBQw~fz~fK0 z)tbJcrMFnSR;zVJe7k>^5OT8pL2oBl!%eb41kty=t}3B-;bPp|%>Xz5{$@Y(&(fka z6(}E+L1`%CwCPh1N8X4no+06kOZuXc|yz z2ep)T?74{PzqFjr07*#Dq!I-%1BQRUYPHH9GB-D84d8doHK;`#YyY96m1u!HEi>&e z?IQV)ko-jd%cCaf;POS8c@#CD8_BB@@un+^0_AdfBu77us6MJ%k^d+5C>iMO2VtOv<0J1FmjZv?GD2QV> z#*>0!$R}q1;fUmKZEtNv&Wn@)-gJwJh28w^H{Z7O+OUMiOtcH2wt?BihE-ZP<}I3` z`$|i1f!5T3=>Er<#EdO1q3;MdqGo7r@s4pK2c$(nnv&Ro>mA>)(EUu)bO}`JR&5$4RLYowCF_CBX473ywN2Ok zI}@tkxKAr01QT|SCZ?SkQTx5{_GtFhTAJ@W2bP05FgcHf@n{mzbuNzmz0+w6!#6?j zzCvflg)t%(|BcWl8*5VYOB5yEfg8nM7{g!MB|mIV4C#EF;3N1I z#(cg)3}W)aU{1zTw=vnI8%6%W#E)3}M}@c!@cTgyK_}>YE)QePNJC*D@}E%R9SB^! z1icR^H^2UWZ`1I!Mv|TS!(`NQErA#@B_PqKkeZ`5KbDg3!fWJKXKEcKDDeYn{h;KxBFdN{ zm?YL?@5_*)qLaRL`xde$({z)H9`fBhDeKHswDJVptiP=;DPWE8|A zf5LYgC-N^8R@mE)!(~H&1V7Gu$b^tQ*5$re1g}E_XpHH8U_2q@FP+VYem{Nkbm(_3 z=6UsgpMLopmuW@w(X;3T&~MR>HMfilL+LzBo_x(1%odmhBIgKVJQpabhDuZVO!K%2 zO|{uML$)*scq^2V)Z;h@@ScoB9U_Pzas6t1zmi~rt?^x?z8mpDO*aDzc{`;!Z%MQg zam*1(zJBc2ct`Vd&n^RxM~Az-LM!c)l-a^d<=(y_8CM5cD75~ zPDbbjVYuf-BEj=~deFs#IE{nHO?*#h;6}f1FZ}Bt{1DVyEp(2c#|tu*H-M&;MJ5E@ z#K5pU&LSWs$a1x}UB2aqb%l(X+J*k-;P;+Gk_% zwZxN|(D?$yiAPB4#u{NyK-<(?$HsI5rgqSd*ZCx}ig@UW1wG8Q(`)kXe20o7dpO zk3R&`BtA0}2q%wfsP80tL&IKcL=zvW@f0D%2Q|N&#)s`4T%RBb-?>rm54mf>D=+oK zIxIf7Xmt$L_hwsm=}Ili$p>+OxcD>8(AowR!n25Xu7iGv_hA6yhu%BRdTs>wurc@S z+)(S|IRHz&7J)ba&&`1jj7?@-JPjHj$B8`7qH8*<7jg^k*zgW8gr45~^-cKxKl?s# z2@d!~_sFIZP35Bf9`84APXu#&|oYa3Tk?EJM9kuX!&KmtfBHJD1+lqoZgDjSqr1{f=$4jL@?Ztxk_1 zo*?7FzaN2!05rPwd3aDR!{X8sC>pL8+MJkZe--No`{jE(_eceX2cVU>#*VotK%H=C=Uz+OlCP|X=Se?bPJ;)iFrdh=I!X$_v z;Ec$~9^?J*ZMR zxTXgYrSVapjX($`NZbkr8iB{7Rc!#SN~MwGyLu?|Lv#K(-VKqlM2%6 zBh^oyd?>7(hvMc23)ILAPpyiU*tbVy!QRSVs*H{qXT5pYX6T$Z$f#2WGV|<;}GuNEipoQi3i=#A&EZ_+Vk^g z^RTzKmm~(^`jz;O&w{@j)cj#JKDb|^<=6NGwEHa8b5Siif8*eG_nI0y6A>^tld)3eM8j*gCoe$dkZG7NF8kzAqJZ7`Ld8ER8uBv*?7W`K4l zt|oGmxZx8`yn{lw!Bl#-W9;BzwODyrV-6!lY$~Wmyj#fVGBonzz%pzQDj3((prR{8L1{BuSy)g=)PSchBE*Q{rby zIhofmddM+>(=)Ty7Zo*1mfeZ!vFaGA=nf`^dr(}B_o6H5e3v=H$jqo6qsw!NL16CW z9H@2GeuIZ(Lj}_?VK!-TqPO_a?S)Jx6Z=j`KC5LUduL|{?(f`(GfQVW=FR68K%SDR zBaBx9`as_i-;4ZF5o24n4C&d2Uv0X)O+KA#~*bxRkgi628K@a z6i-R29~44UZ4R=o=s3>O(o$awm>eKD{KWw;@UbuVC*lFhUzJ%c3v%c@ftc}fl3?nz z+T_e6NQne$j1Fhco$op~Ic4jRhD0W;i?oOq>pT@TttGUeX;_Xbfk*E==$CY2M$C&# ze82N;Gn+9rpd(-mfRvm9O|$GM3pmGY+tftD*FX7mv$R#R288ha1&J49U5Mw~5h;pt z-|Lj7>Rvde1wt{BXs4J&#M3hpqucI$kHEX}PhW#lvB=tDlmiTN0ZEc!?%DZ~+Nd9l zjC6{pJk^V0*8nc&3kBAYqceaM>p;$mNa|jjSXRR3&YYNWnuSzSrZ*~bG0CG64aAg@x)5M_k>ZImduW5Yf{zFN?Q-cYnc|PC} z#B(;!@!<~I8-@O(niAgs8ACZhT~(m8U4kbTV(dn8I&l7l|KTjDlz*fN0u%f2L z%Q%u`Wg41El!h|UWk^5s0>m=n&A}cU?}7dE& z>N}!83O4Edq#rmaMtD(lfOaP$g9vgm6>s;J>r$J1f`47)IR7CY4U@5Cvsp-{l2E!| zVq-JYGb6SeA8JTqlF6m>VR@&W7LS>gbbfb+(5R_w3iiI*gSp&X$9}2-b#L59W%yw- zK=H9y%#+TYl#PyP*{C(?{5>8>Hfdf*=!Q!dF9F9{k~}DeaexBP^Kk2fwVo41QFPn+ zGx-&)-fA8<K?Y5jsauoAHb*3U12T1eSnh-seUMf1Beu@J7AFOQHK~MDz9c z5B5Q8YHph6&33w{Z30hM+9$2>?}3Odz!dz)-QC^SSr6@;o6o`dmGi92GAw<*f6s)D z*)etE6wn$3IrKb1)3kUmFx=c*l+&3wD~oZBRW6r7Q)1rl=|#a)({x`rtRKF9R6lZ4 z|H8roT>taytbP6Zb$I3aD=ZL(fgnjztOZ<`h`V+BHe7r8<&JTBIqI!{`{v)qmH>xK@xrl;vdRkJjHCOyOI3xx|-|KtoT zE-d;sjUvBNskrTM0YC@fI4;(Uh^+uT&r?Lu0?(d!MhKe6@U&5T^@QpDT9}q(YJf9X{({!~UshJJe%?0F3Ez4| zZZYTUUw-+ruaEX}+ZSG3g)3jb)bpx*f(KbJmD1+jV%Ph2L2L=|U~2^C?LhUg>PEv8 zjtep8>Bg!uM6#12W&kH$gfB1tRwg;me zVA5722I<+?RsBgOpX#<>vsD#zQ};=m>`A)w3-e6E78Wh-UVMJBTY_|P^_y2gsVj_l ziq%!Dg+LNFMr)tP?f?!b`LsNCBv7+COx0G}ehJGm(a86RPL@sG1l3S2%~mZUQnM*m z&pk5-sZ8a|P!i1AsDlfDfFx_1?R1 zW>)*3>)S>5$J;2jF;D%bmJUY~I_vSKR$_|2=HqcSk!Mz`v*9XxE_VmE!sZ zjs7u_Pnn^*O>?b7cA;D;gWU$DsdQ>K60opjYxdG2XpPGEZF?Aqlk z{z*b_`((3O&{T~PPYVShT3_VfFO{~i+S<6g{u$P9ZWK3)=y=5=<;XwL2se^IBVtfs z1_+;!upZS5wSyYe0x5F<%wq9s_8DT3JeKd625PpZo~Dzqb{C|QDOToA&B6S0^K8t~ z?QRZz{#-kP<&+FpuCz(cJ)e(tSxUOkhH~46cxRRYJU}-fN7YAFn$~x>ced{yd{te? z_SVjJ=~qi<^MJ%FPR5CY`P@9@p38wiw81j~5ui?k*O$UY&jT=BW}nHSv1dURWX>jw zxu{ZCpjxX!P-6*CTpjPwbKHR>h^yK7J&z9j&7J!@u4b!-Kby>>-ZD(fuzKktm|Xk7 zix)3~-q3yXo%J-`Q=B?=3dz z%>w29y$Uuzr{(_6{m*xIcYpKX!Gq5i7Z=Nihlfg~Qc-43%rJZNBCrTojuckYJE5Jy zk#%-A{Ba!T_LWAHwRd(NK<-&|fMg~+umdm{@t08YY3Tz6yMEo1#=k}fcK3E!=*fW; zn?Ku*NZRIF1`>a%J)uWdS}rVGYYNu-cGUa#=Mw%D9VDNU9uu2I)NU-B*e>b~_0yf5 zozJgdzg~Lhop+c69vvOU+R!vjw-!YaWreV|Gw$Hl?b|_rjExVl{8gWGsb$Y1@w+`7 zpsQx94Hl6rYSW5LRc}Z5LT&*Z30pd|#OgC=&iFQ+nVIf-nM)Tfr#O{81%;Kuzy=Tn zKjG4pIk*4s?;#RRp>-FEQ7nf1Hw~8C+gy)8&!vc+XN;a)2`84vKz8AM{ zuMO=0agj&jKf&VDY?jVZv#AE6pPu$f3T7BNDO&~8_|k$!^x|`itj?Z}&S0zGXlH;c zFJ19{>!$f(a8ke1mIR3v7gJWH9cvG(2i1M$Q2E`1-#>VOL%+eS^qCyNz?p z=URugL#WkiEbCB6oWva5q;ItAO0@#1nG`gX2B^kh_Pzfs(H^Bksf1w9&xhf}BL;BmnrJ*fEA@* z;th{^WPilQ#3mLh=AoOc+ImZI?-TQLyeJr~; z{C=fU`2uT7K0K-DrumfoH~!Zf9diXv5C=Yp7eujXN64MueT2lm3aX;}=BT!2(hH?i zsF!IgC3CU}`Sa(Q-Y=c8B>?La=@T$LGY!&|t=XK|HEp+bI2gHp-9#1i^(Edf34rcP zGy+YnNwXQ0z9@bA;EM+z&?oIa*xj4W&TcD;a#Svt^|`q@rs1iSC*gTA1fNWUsT^7N zB7Qqe3aWwc#~{&Lcs_^e>bNuQdm)&{;1^|Uk+6QC>pIkxI`F&|b%o^uD~pSZq3goP z9{`)BQmN=^L;i(4?QfRumjFwV>iGM=c^?)Q7XTdq&;dqy{=^YRK7}BsGsEovC0HSs z?q@P}0@ncwmWHdUI=06n!6i(CpB1-?G`ip1+S)2!UcJm5ptN0LbI<{-x%aL99}?Er z!^x)*)OrnuZ~|(z@i7;o7m<)Q{DwuBo3_kE%4X>An6hlDxgJuw;4V3&he*Q+}Jb@UPVm(n9lT8T>m5Hp{)SzoH+eEqhH#GluF8lzqWd?`X23uAt zFP1j9KE(P~Y3IRaerfR`YIMDNSk*_2YLd)VJ9-QOwZ&n#_y_{m*3yR-ncM@N&m#}kQ< zKKzK)fAh1y0aa7sCDpR+i$*ITrMo5 zlyAX>OBd1GcP4qu#}1S+Uw<7V+$mZE3IA=IaMg&H!-a<00Qz&lp+m$#O-`pi!+PoF zuYUzMzVqGa6}&46Cg$VD!J~uEE0xNZSU$nAPgF(Sw;g~M&@^pghJF%o>f|Y?JgoS} zc6WE-{rBHz?K`*c_`a!ib*S?!l}m7Ktu|wcfQtA#tiMML9rcHLVCecyl*L3e1Qi9335j%<&-GS&P=L zDM)WUBg7h%W!W90FHhR-q+qoqUTRy2vp;fO3}AFQ!@jFii@XS@Po9R-b_r<4Jv=&e z_pa8fkjI}>@9gfty?giI&TsF)#=Q+Fe_3Wh&}cM~#*D zb>1}J4ODJ=A*jQHVB@n5So^>x{LWfe&Hn$z!GQn(0001x|7#i8089SuLd71LnE(I) M07*qoM6N<$f(YRV@c;k- literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/StructureCompositeWindowShutterConnector.png b/www/img/stationpedia/StructureCompositeWindowShutterConnector.png new file mode 100644 index 0000000000000000000000000000000000000000..7af539b71c0a112609e35c63a606d58a85dae52c GIT binary patch literal 7220 zcmV-49LwX0P)zAW=E05jAXB>l1-f2l-4OLPE_lSTw8myce{5RU*vLsL;k{^ z`&>9xIj&RZoSUR9>ztI5R4I;S$5!-lENe)L(n#Zx#xo){GbDQebmMe401{}D0KxB( z^{|?a2KwXe_v3jq;LtT)bYLPA00U4;A%x>Nvd`!9U|E)YuGMN_7zX5WIiN0;&9uzc zn%H-~muRNh{ku(U|LkDBy=OyXrvV2K9R%}$+4h-$Z zTfnl6*13l*2Nqu>aQBe`wOs^-V>VdWgvzFWuLA$J_;msw+|0}Ikr!+r-U8Gcq_qce z+s|@;@YlBPMr!fzIR0Hl=+h8$7*KRv-6e;kV}5>tcgMr=;<3fk!qjk_pU*dWcQ0u7 zzyF=@SCY=hVekbgqx^LL{Adz9$51$x^6s?qUXOl1fBrl#N%&ScwyABr`HydYGaN7E z7UDbel0N$nXXWG753l~>%H=D+;E!G}<8X99JzlLgPXdHw`-&&Q$sX@TfR-a;Q86Nj zB50+cKYjM>Yx3juPp+MM}%GxO>)Q1$gPA? zbBE{sz`p#l|I%>)mX?-U=PevwfJ5_#+72_?HDeeCSO+XHumL9aZSE``mKXr)#=jeu znLHobk}Y5dedu8W$JbL*Pfh?Cd=Yrj%S2#Z13v=vqlGaVRqnR@`j6fKQ$wK#3gYjF zKY1gz;h_kno;!CgwW2J`%5({lwDo%1siF`>0!#{_Ge*VH*sppBsy`8-CWZl6UVE?x z`FuXK>2zf7sc!GizV<_2HL(mnjlhIA&Yy3+m_HcL;BUYB_pxzarA#+&q?MwX&kBUo zN09`$MgJ`*l;z98e-J``#;c{UbYkg+v#+0ReJ&g?%txnFE(bsOLHm3Da9o25$BxCu zYJG;39AbU5I$lriQ$&N0hS;Y|y(n~sxhV3&Ck`_M%4YFB{UyJ@kjQ$=xN9x-l$Y*goq@gNP;v_mhBEA39^Dl zN?;Z|)v~BzJ%F4=!9Wq{|X@Bbd_c>@vfoDo@#@Mv)(;X9_`&q@X ze2b@jfuS)Y!M9x-Ol*#9zftj08pEY0fRbX>%_@K!-C@j{--~p5XnwDJptQT4$csCO zdi@$O7=*^79@UFF6g}M?nmQj_tw+nUfbd@uaGFL0DDg}x>6(6eq}~_=87sb5;HL>; zkss`M63`J=eh5Q162JE?0evRQ_%I_>KPt>hTI&5yOw*FF!JA<4pRpwC2bhaUG8CsE z69IACx?)8%r!Vv)snIhP`DVW&hoT@_A#;9()gIaQZC%7`SCX>l`DGN zyZy9Ywe4o&YMk|=SN?Pb#)hvz1**C~MpV`wtU`6Cnm7rI>`z47+9Gdnjm6Xn1YX>e zvCe7~m7nT^i~&y5_(>(fzy905-`n6xkc2D@P#TMs&uG>63i5=izlB#$zmoVpH36LV z<0;S(G)WUID?#^JMhnw4K4XHYwM+w#BOUR(IKF*)BpQ0!j(TVC_#uw#dj>&w_6X-P zCBroqPXVgOcVK*_mf%iLd7c1gX@+ohw$0GEG%88X3(w0(-S%C%j)HII(z zjBxv|#B7 zMSW4PZPs%3p52}xG%31=s_9uRQr2sVeI4d1qDY50t8ef_49#c_9o`T&fk3AQcPv$s zQOlTOno_bl^Y^2HW1RN(!ZANKHAn#{IsNNPB{1z#i(J{P{@x6GUi~;ngd-+u5k?N2468S?r~8GvkDsI zBhm(2k5b~RPy2$;F-5)Oj5aPd?vl165k_yQxI({Ip zZ361BtrM)9xtvuU*9jg`tBh=BgQmwR*Gs*wO3|vu(?qXP^@Z!lrM9&}tJP|qy2$~? z@Ek2rN&)G~nmG=QA5`BZJe~qV=e>?pC|2%Oc$ZwD&l6wMmu3?HfURzXFF+f>5u&|1CQ1OptGwe;KJj|iK=If_43Nnv(;jA(K(tINS` zZ_RDfBMT6h0;K!jFJHcVnoEF22uXC%a|zfdKsd;RAVX0wM4s7oK9_(~qNgmmz%giQ z4LrxB(F(4B$~b!bdq=d~@2Axg*MW-!>!s?d9KJK2CPY zgQV$M^Up~qozY^Hbt!{CLKvpy_XjL656p#B(w@Mp9BJ_zP_K_0#bkMK4-{T1oZNo8 zJ<qSImNsc$WYZWsnQ%n5AdO3wU9Q9W9NJYb%31J_n|49=&W=lbuI^(^j1rhIoI_8&iS z!b|fnhJG}ujV3o}Bg+CvH6a@e9KSG%23tYb_g(UDP?Z&oA|#|2WB}E`M*Q6^=#vJ9 z4EmQbS%yM1c+qEJfr$sxS;+!n#q(aaA?*}QAYeNI14Jm9akkLaAZugvp(wVDl7utO z)&_HYz^(D;kebCW2q@|!uxLmhMH67)JrW9m1rjkagh3yWX>ryC1c(e}-Kj&ZR)c&# z-*p}`P%L7tAgdwN^<>FNpx8kmYF<*W=2Nhych}fn@}Q2@f=0>=PpL?z+)vkrOzF^o z;2he%k2uLrTaJf2y&dRQZ>C&`>cbw{H*BTK~(@UW8`Hb1&dQFZR33znj42+I&pAR4x_4bmL2$ zu~gNVFf9Ei*l5@5z#Ip58jZxIIHSgT7Fex8rBZ>#lLci8i4T3?LHMDRlv7&7RT2bcyl&v;L{LO6Cb z0eUViiNE}jeB%BX=_wXyZ4E+*E2c-b!|}uQhdcpnFmYQ~sjBfQ-cNN;8s#g;QDsL1 zB8((77~%<~4XW|2>!jQlnQ?R7-W6%@*}#JRLdJ9`4?gXF*RBW{0bE)OA#(1x-%rP9*qQ5e>3{X`17|j{-dL6Gw!s!ME+85|}=iqm?8O z!6&@Yl;B78**L(Twebgf^GUU|^`ur3&uJ%Nl2xOO_^@8z8S7 z!F0zVElqSBM^;^5fry?bpZz2tK>~oX7bj~!&>ZH0$yaoUt!hp7b1Cz1Z8zJ-mSrzk z*x;9Ufbi^h6wy^RUsp8U(UUa{l=&STMf~8lhJnWUfv0@AzX1*QvDN*WRqzg2pz{Wd z0ktf}UNynA_>iC1+~ZXr%$u8=gM$YTwv#DEqjmmEzVIj@Y-LZjIprZP>&QuoLt)jR#0`;t64EecWM>w4P0@1HywSKuK-1CgQ2`II=H4g` zup_|`aO&-`W5>S2Blq_GorJU!Ef4spIPu<1+vSPrqPUj zr>-Add(Y3TFxXO`T_!n)Mr6+mG|^%GY2jQ7hb>?~xVofv1mY*hx_^$YXufohI69P; z4hiu(Y+(GAru+Mf+@gFf3X-f-<6$_>*W&wyg%mt|>N{lG{ta$F z7&HM&;?Lx|S$L_Cc`=I6tQ90tsMDUI4;<)eRcBNJW(6BxZphxkamiDGd(m1iI6}uc z0~m%O(}&mukcs+AF|o$tniT4@|1KriTAHS&*emWAtzxa+3pPS3BdKF8>xpbAdplNp z8TaD>zjgDoVx?T^tHg0uiZgKX{FpuqXub7$;>einz19dH1ce|mYt?`Lrx&17Dh0MC z&&8uS@aWN_)4p>uR2F#lQ7W7|B_FJm2oK7yBE5>@;po?AJopm;rF7aRs5sT{L~IOs z(&pn$u)b%t#tw@+!%JDu6pGb{tkjPEf?n>*_okY|wVwuWC=f8g;NzCGDY4WcZV&6K z@xqIt%sJUKUV*M9*Cg{;;#j?aZKJU;K(M(DGlw1tm@1T+zBL+;&Dsd}4fpcKr_GMb#@|T;l!d^+)SKT+;fk>qd%3#gV4@sq0k|(}KPg{P2a4fqrhAKF4v}iADL( zLg5<1S1b4NyyVR^O_@)nG=+u9K>40>f95)(EA@LD48uU1K^+`p)lUj^$UAIqZMFv~ z8GuJhz0WZd*xK4EwgxG=gr{xnbBrE50onsMc`i1xvUr~-=U$| z3}(^8IS>~;ac4c)Ru^{YIEI3-1gfSp^?sguAJsn{TWaEdxfhPedjhr+&&OdP z20&?`%J!yMgVNsN18i_wb==7&%DA9Qr(|sck>LN~kAIl!FR?wiB-~QR#?UyMDpikTANrTQ-%%+a7TmqmG-FVije^6vrFV?=d;G0cC$f4i7 z_a2=4@tg9cuEib0JTGxSUDJ}!OIZ&o>-mJpUcPNQvjHJr`WRPzp|i+yg6WDRrk$UL zl;sSRMAG65LYsU0Cq5=FY|Cv!bVvY+jc}+N1K>V));-=AU>|`}I`kfnJNzDFK(WNJ zvAOkU{(Qgnwj%-Jw&Q7Ay&qvC>n(}#d^&u>NWAV8J%mAczm&&E$ zspV6p+qZ6iwz|4{_x0CbuUxru1&)4W3FGjLw||+o2lo*kaP1ZpUgUjA^tV61Ew!6d`N$3t6)%D<`WDj#<0!6v{FmnpFfQ18 z_LIg=q-Z!H!97FIaqV?np|nnsk4n6n3kE zUj5FQ`n8X*HBK&{^qRG%T%Ug-54ESYmWE5;@!r%;sM9)Fa~5np-SW@U9PpzQJof>$ z@&z2nUrYIBw?DfDm)`%a9FK$nF8}fJh{CnMaA)OC5rKKJbhlC}->qC+{#K#n*f#LM z!_gOybj;6xjR$_MHg>zhpsSiMAcFtD|JS>%F{UXQp91axROkI{mHqf2sJzJof04J+ z%F4>cIqPs~+D54m3=nF5Gzo4g!50{o0iN*YP5Z)wK+t2?cdk#Bwo7*##Hrc!?X``^ z8z1qu#$SK5`E>IE??v#ZeTAOrruicH@BYtsJLY1h#T}uiFhXm-n5QAGVwN0!{MYO7 z=7kGD>f2+zoUY^>^Gsz1N!}pP+Hf1kB_L{q*bSlKu>N5Evxi?i{DeP#y7tA|`a*u; zUbE5MscqGq{1Hy!)f(h-xvu9eB_>>C0Mu&Zr+>olBhGX@p2#|< ztG!Ozk795J&^jw+Mqfb79rNt#!TVDg7 z0MoX4C?o}600))adVx{`%i_bw;FrMsv@hBX6%I~=pO?xdQQa5I<#OrFD`#W^h~NwG z1dzQ*fM*T2ZY2j_01tVF@FJPU<-$Z|oXYJz(scGn)v?Ll>Q1#N0?$AFfmi#zrKP0@ zJn*o*ygUsvrv?%HcmKz`sq-+G3CKd`Mto>;&5@))_L@LQvvYwL*KCzSKxdgQ#%J52 zFIOa$mny~bHQryXtUfFjP8@&2b#}M9U9}G{9F{t79$b*RPxh$n?L8Y74z+20VQvA| zAFsE@NJm_|EuapSJ&1;A@X;JPFj-+cHrMecSe6CVCsnAEIuuS9;L(?lq~6=E4c5HX z>R}h)`i<-G?yukNYkxfP8x4kHsaPuURy1?DJA7QO++QsfUOG{}cJnrzJh23|r#sWO zaca1J?YivW`QKHa>#wYBw_x10RkO;RV1f&>r^Y}=lwb7vLr{pLN{fAHrIV(-Z=8ERk5L8O$dn9(>*{ZL|4%|DxdH)6P9|Q}<;T2#xW2yrq3BDuOScwYSa`U$x>i5)oio5S z90(zh&*xNR!!eeK;k95M{p+1UY0=rw;QI7FTuo?^zqKw9R9qDlR@L^beunL~%LA6$GmEZR6HWbW)?8SX+ zTQ#_|atH3*xdSUJE3mP?A@#jM8ZZv{5)h?fEz^2&{r?s`|5vwwbLB2^?k@7@i{)~; z^y>FsZLU9BUwicE5%6c&;o8j;U@Vv0FL>wI@5ugF|NU286Kb5mt*4L)2E#@06X5in z&+imh?yN`+=dEN|Mu`U=mY0|1L>~Of-f%{6{l<0KU;Ff0tN$hcW!3Ca1II>#CxHm~ zf4=|z`><2r0iFQx@+&WQow#^xv1bx&Ki!tSWd(Fh`g2Y_SQjE(7w$6%wrks6-{*3< zzV{Fm{^`w6<@1djH@a%}|1S;>1ONa40D$~o%fJTCCPNF`a%J`a0000rS=krR7ZQIJStlqchdBN=azUp*3!S7PJ6wI#cDog&_ zt+sMpM_IA(-0t3Pu!jM$qLy+Tr)SeVuO;rrgSp`~RJmMMnM_8RGHf6B;{IU2I3Qb#Qo~yq4GJSJut;eV3}GzHfKj?fcg8 z?CricfXpU}KgU>eB_30}`h@M5J=3Bv57%Lw0MnEV`%h1?zNi8NY`fqnjvbuHXq<9W|K zFL!k_QyEm}zu>wBV8Q(m;Y5r{6;|nFW<1j~{K5A>Q1xmZ0HL|nO!dr_$j58?o-9AL*VPJJ@GnA!vTw(DG>-_HoTyftcetnYlP?bU|b zyQ0CowX9vScYi>quZ<4+_=6uwD~pTK2CMf!_@M7Q zGd{?9{g=D9oznkA1R%VNB#1dqf57dC-LDb0v_BCJ{h#q;Zf356%2EVyc7FD?^WXpA z`@L^B+s{EOv;F#mjF)xeec!v~(rw4`w^B^--=+t>RxizNv+tY6zngU385!zd|H;3e z`N0o<(0?dmg`?ZPgae1UE(tQQ+h{fVz6UFQP+qI}0m^mk{`2ht|3(d7vpf96>)!Tr zw%78mc#k_=e_-Dph^IC9qANOL%=i4E3LQoi;6rk`T)#qu7k1wjE4@SMe$x(&Cfhr^ zulIE;T$rDmzm+><(%OeA407^+Y0~ZtR8aJ78mdwUhX=29oZW+qwT|Ck(Y1jBY}EVr zRv&ZKfGH$APUWLzb+dQA#+xXzUcFet~z$LhC2MyUR_bgxb~>~x+1P_xxk ze*FTVTCLVA(6e$mn4`&Le@q4_%xeu?=Jf+yt_B(4YmZB%k_H4PooqJV*Yn%wp$FGV zfP>?M(8>^rMF%))P@-XrFSI&Q;b(E6-M%8w1N#G<{Mz>*M-4bU$e4p1`x>JTaAvvO z|J`Vm`p;Jf0V((Edjo(D0I2o`@%8HZ_wK7*u=FNU{g1Cz`vIPs%m;Jf`BO~gx%qszP$=~F&#E2(?6rkvtBz`% z#P5yG4eb4c3V{pO1Ta)M5+EnzsU!ee7&1rar)%R<2#1A7sA1250yj+IC=7tm*~m_ za5*Lc2FUn6_mBvv`1Fv7;QU1gP-;O&T*emn!wgqyUxi8F()T4$0TN&+B@KubQurGs zHpsby(itG_(qXBer(?rgjA!V6`Q(XkTOIIksb4?G1RXT|+9f`TefcDfw|8f|w*hAoMS2fR{Y z8%AaI9wMmVy{n{YHP$#4fr4 zI)kT%CrGSTs}0Wpif!Auu58$649Pa71s;dWq*^n@z!p6B) zWuoNR0aQEE#*4=!=tzPcOIcHr^^@d21Qr3E(*ads%k>A`1Na#Ni;)$0R#e!EH|SFs zaitDvW6d}pqM(_4|yfF@6spjkHdu0T{*_Lw)lJUO>sRtEf2>n zY7gDNeF{();D7b&C#QS+yI*c>u0P`zz>M(s31{7ER|pEg*QBk34#2i$#07YrFk=X$ z0FPk$3?Krh6A1c<27*6hBuCx=1K%|PD9bLPcn0?Yc(mj@TnqSFg)MwVz=!Sz!PIRW z3E;4a!k=-mttn`ews1GVe@46dEE1!wF(S1cPtWFa?-H9^O#txIm%jq6}E5yQ)4ibhAoFSP?bo6ENuV`(7_yi z(8+-$%=6rl0lc<_v=ku?{xpG=ksdV;67{$=quM*)UWmzFt+hexy`US7J2ImA~aQ@N3k%}~%YUAa` z@h=|z{QnIe(g}imF2R72NdknniwbK?Fjsl}9D$T}4iM*M-KSoSAVKQV@?EKVR6jb& z3$YJ-84gc4f0K!@9I$SfK<7N46}wS_fpI1}Aq9kIz{@WPE;@&hegpuW%2<-KS-EeF zws3z#C<(tOWL<*?@E61`x|c8W4#5p5LHsKaaQNNscDqp~0=h>_cE%S59kf-*3Eq2Z%? z5R?)hIY}@a9>aX5F535`1Q~$=h)sg9s7MQJ_X~^xe!m*1bm&dWo%k+tJzv6k_B?@f$Gd$apyM3eUWH}(~{Jp}nPniVz>>lT_YX$su z+1S}C{!QtuG&}(u$GMI%JnUn2(W=mdaH(*Od=&@hri(FVRX zkjHZ8ey=-(!EP}YIIAf@cL7iUk|fWnM{7pHA=&15UV{W*Ks0grA2;X*i8W817yLa~ z>DpgZJUV)neyv;;=WP1Tx$)lp_lBMwB>_;O%4>Pbbq9Fg5Y0h*N5{fJ)s1eetJ^;U z<_qT`irWnSUEz3N0vq!01)X&n5P*~t;59AGN`=ABgp8Mgy+~)3ydP3Pm{1c8-k5M| zgdl;tn{t2J0B%F{@x4s&PB=0gw(daUBPzHhcj<(M{a3>IGqSe8HTaYio4R`2^1CB* zhwn?WQ{jz8u?f9N_>V!A9!brPrMpY^ml}e?8Z(9XP+LNkR z8wzSv-9SG3?6Yg>J$d{X&ilra&&N&@q+RDX#Hf{I^|F;4JnMrSzhB}gY& z-;qGqWN3PUjRW4fNH8^rn}UFA3fQMl^SlFG^2=uuGT+@I)6D6=ZUN#otRMV5HqjFDKoVt0}LDB3auJ1+0H8Jn2V zjW*vM>=$w+1vHys(b%?qZKF>ff1!T@RPZAzE5~3%Uh+4BIK|&ZR{I>kwXQ=u8kkAW zyIfzO9mODxG1zFuTHw6y07=9Ch6Px5_`GXtO7>i}-d9VtahrIPYJ{~|1!M0BvR-szp~b~+s$ zghc|O0f{p}XYz0)2&!aE&gzy3V3&mBW3sl#HJ2QZ^AUm#IUz82CBO(~g+R`Uz7BAK zx+!|tp$+)4PrxSI?KZkin_%YKs=dNSjtmg(e%4~=BfC&Fbi?>U?kxvujOe(-)#rDmUM^i z&hnvq1Pax1S00Q#WcD!wqrr5H;G9U90n{Xc$9T?Q&r|<`Uqc<=NHR!~=Vtj`r7w#d zV@#NqfMoieqhDLWeVyKU_~EcS&%+#dDA|f{$drrzt>%9pVmk>JkfmR@=e* zceu7}-22WYHbQIvSjL}TNAdmlzo(u&328tc=U5R-5m3!?Q0!k;xSL(zp%et;TIQ*Od zjUszU0tQI~Tj%2xgRVJwjKM$T2qAGm&B;)E46M>|+65)@Q!z_SDg z3D)44pkIyw?gIVXlKV6TGzYrOF2O@(g92Wu3kpcmx0(tQz-D2jdA4Yrg&--BWV%D_ zaULlF0RHCsvn%yRp#VGxoTondSVXujS?W7vm%j5nf9g`{B!sr zc90y40h5Ob7l7N2w7aAohd%6);=(S`B?W|CVqW}@&?a;{(MS|jlBN&Pt@Cc&2TMBw z{v!Qt@-Cg^3AsNfU+Et8MAZso6?6hOb_pu#_4v1&4b|`(%8Cvz@aPB$Fse)tqjv?DB1RjAp@9||<=_;-EIzTwTW}A6^=)B++px`k;jr6U145@5^J$GRDdA zijUP?zfS-cdFF(HQ4IJ5!EEwO0IqX@091y z2~vvSn$?@+o}zAz{$>RDBN=6a-{Pzjq{!bId?aC0e8?M=)?~sonOu19I^vMa<-X5Y zs_B{Oca{J#_Y(dXBI|h4qfdV!?y@lL%g@`6tumR6EdlWuq%0qgibaqR{CNogGG132 zk|4(J94ti z#JHfgZczDACWS@aj*3_jpw+1Es+ONnI_lmVfGU?utb&&uL zK}qv>S%Q7SAl?hsy1|`If;}h)oN+$E-|#0-z{aR!(*^)e(!ZvFk3^W_eTu#%30x?h zpjcb9b65OXr7e9=!mtlHqCc}-f6ll5;V6Os>3{t%!yleER4>+SHm_|Iy6*T$lrctN zP&KGrBm)xQgaJVnE>jQSAFB(lmhRQI`K=ShVbIQLzeq5qX@^O&kFEbH^H$>(C$%phoB>g(B>P#|BFPJqFvZP(xA$9 z5|xZ(fK1Y-<52=HQn-#%%)25(21O^pKYsB<{qT=|q}u0=OZDPzT;=omCEKze`M!_# zhK$ZcqLCKCav8je@lb#>F2JudIEzw2y1k<6v+YP5^C^RPNA?l;mkjQT1UgP|5!je~ zk1?QFn-q=*6yWy^l0!Hi6i|{oVRMNI*JTon^R9pb1bACG{xqT@ngZ^0y8*IoCepF^ z7ZIPb2AF4JZIN#clQXpM)4w~61(GH$cPvnE8~$40{?K;hI`~98JxX80zlduO*B=G^ zXmliXh~+p=MuV?Hp4($!7dZpa6IQ%0qiIwYg1=6kRobabfKO#KW$5;qkU*wnoHB6G zpHpGSIpTnxrV7RHn%q~Gks+XpiR1IGaaO%z)uYli1wb~rzd+j+@kv({64Di)rU+=U zm(-yg8-CaZ73>+5m1b<9J2`6buOl(rwr|7kpt#2DbKs$q68u^2VQpW9)sbfqbgOk3 z2ykkKYmlO7>jcvrt)-?bm*3a}fN0Chw7J3iAY~OMX_k8cY+QiXfE^k3_5IM-6o46t zfR3_9tMDsAKXeB;rcatKHu>H(zxBHjpOirXCzk~_nM}SFFfq%rM$sRYhoaK{Jw9@l z168h!M2K)kwaxI+MFs&?uL01U9tNo!fH1|tAz0v|6$Tmr?oi(~5=rlE@;AB!paS@( z1QdQa0=&cDM@Ayy3=&IIfSHUoZA8T4EWb+}tNhmBD%wrcuFW^&x2Av!=Lq9|U)_Sl zY-gkn@c&3-3;4X*s41^nQnu|5SmX@1TfLPWf!J!d+o+;>2GEgU>6Qzy?0`d+@OUTS za_FKfpenz`ssdOCv@y;#9o)KbJOYcVL8Uvw@g)MYDv38m&%k99TyGQDJd@$2fDZtX zjAP&9)~#c&`ECbUJ6fn)?K*H@1te`y$H~>|1f6?elu%o*~ zR(!1UOgOq~oA<9UKKpz-?$8vIq7MhWAEPC{?eR`siE;kk=UZ>3^0mZn)A;o4wB8SL3{Korc zjk9Wic1KEtN(uFXEbI)`yKw?M`sE|_;U9i@m0ECnv)L4?upI`jOrYi%;1jL^=xGUP zj6nlXs60&p^R$VzZGK}NJ+EbO>j~#Y+Q<2T0#uj)JrUq>Z^P&ckRpM=Kug}^dYyhj zH_y6WS7BlRG$aCe8$f&P09c>l*?K*64~I1g5|M z-Q^zIf0F@2uzcb82?iDOx^R4g`Z>AFH$YJQJ;5Y7C%6dgyl%6RZluXQoQ<_rdzz2f zVtb$F{T1rr%|44~R(>a_i+9Yk18nhrhutN?WT=b&E)!vic0sF11GDa0hx2zvB;2095Blq7&eH0_Aa5N|levaBoW=XpoM;&(T+~alyM*4x4=6A_^kLCr``nZmY5*f(SW+1L`BpnV?-HCrBk!U zcU1y;5>!w(0CtgyQ8W@HF<@hlW0Jwr6af7hL*FLQdjw6l@v;PUSB6g@Vg_ia>Qg2O z62}qX_hbN|DcWq2=PSI|A#jQy*7=<pz^1urf-CS<2Xb2M@;}Q3<9A%p$@NHR(8hh;6O9%5?;L_I&J*K z1&0K3MuG~yPBLha`wS*LO$x_DzefSW@$=H=ZGN9JIC0vI^W3S?QXjD0Bbk(Nyruw% z-R*W03@+?Ui=Luyr}PW-VUeB?{1bIigfYa8GAASP>%vsSarDf zE|W%aMl$aZ%&_Zp#dbI7B3a&L^A26T_`b(^kG}P2Nc?sA7PRu5QTY|>K-U%@Cz+Tp zIp5{}$v`M4uM_V8>~rt+#fUX@j7;j6ICveI;eZ?w^f7)reB?NTf&B~vmo#|R=B&65 zfItC731(WxB6X?+Tk$snKE-d?-zV6(v&D5^K(7a6qSQS1wm8xpia=rPa$exxHUZAj zH^ujzQWriT8SCQbHoJ~a8ePEX04TE+e(xKd>y6?%?hW9$kmyYhKKk_0DC$){Nb!N- z)gyx|CmAqZap)LD&Hy&gU~2stRy$gKntMeCY>~k};l0`>B+a{aIM7<>2>c<>`#hKB zIHK(Y{ZK|C)H%Z@S{@SSz(^XMVBq;v84120XSV6rj1ed3@A3CM_peoOmsEd1feOhs zWW+{Bz7-PIcfa>twR^a$CNil@)hy9+#d>BuW62qh!SdzCCLfxScIoqXkwKg@K)`y3 zztO5EkR+W>2SIr%yopMi7tZu)JMgO$=~Sp6R(&S`bC-z$P^>_=8@wI5$J|3Tg96Yc za=Plt@fqrth2w*S6yKFmwJ0PkWaK`VpuzuH*@=n`oCWPQh4ar0`fH2-o4kLT{d%Xf%ex8S`uYwXyFs<#prX)sMe; zeBEPsd`b@q+?Oh>EL5qkQ2kHNP6E{mso=vOd`N`d z;Rz76qqmj-6wMK5#&4fMI2=WO=LPhdP5>hrbj8h3e}hRd&)F1R)fovO_Fylpt`H<$ zoh|`7=H6njgM@yj37pN!u5k}~%e(_gmgR4NcSnFnssTil9y(c+cC?PBfP4JjHSX34 z))L=!BHX8sw<58C5l0Z=^_KqaRlPSWMlE&bHI*b-Q*J@9SA+FVz_9=k*&o)WbanwA zo|J?m@$ePuJHnA$3>13*SUb{=5TJzE+9fcsHBVb-1pb_RDI-xfWiP?N29+-Nwg?u$ zoTRQ!1ayuW>NW{>ivUm2PrU6J{6WVeMWqR3x!dX12r%AU@2ak*rJy5px*Z({yk$Xt z-QhdNc-M3KrQOHWN$;0Ju#c?$VA< z>>4Zf4hJZp$g^pqQf-1(691QFz|TYKhgGbC@=9}Ui#C?H=NWW^M4Oe-qTcYlP0d$j~^{|IT zIAvEd?=q?3Rw*F*Hiy6b^2v2okpz<*>kQC1LDC>67$5`_U?Rb07_hQo3&Dv?(9$xF zWW3<|0&Ug|UHw~EIp}APU?jNba)wV06()kN=0oF7oJV2+_!sD0Dg-D=zx91pz85wC z+!oL3`{KOkfbUr3x(2yL{VeZ&{x%q0C9zQtc&(7+AQ9nt73uaX@Y9Nfd?hzTjNOQ| z?ioH199`^0I(HaI$f@k((H#O}GnfFZ%{Gr4G%rWFhjxk%GcLPG1XLsF<5Yl}pjQ}q z0#PDZ_heNU!MOp1?nb!(h%J0VY>h{{k(ls&iuM35l6sD3w!7VKoLvS$ri9}&ybJy< ztB~7qy2C^$^F6T9k@HB5dHQL~T}XsUzpc8SCMiqYis`(SLzZ(9;g&ZNo^RCwMwAl< zSGPM|6>$m0mW+*n+xx33Y_VMlUfEKh2El7+e+Brw41icP+PTf)GD(gI+#TAj(k|@8=x0UVuq6ZMbb@I)S!6`x^CZhyWLinWnJee0+2JnSPg>E2_B6=$N6CFPZ_N-sALuLw+1l7 zy_&(xiv;$BdjJ5{G{ay6+?NDwnmVwR=DmjmPbbYj+kKq=CU^&Y*rW~EMiC)lkbFo2 zbi66rKy^2$r@Ld0@4=hzsSCgxoX@DU!tY~#Ke#NY)+GsWbW&2sCn0M(S0#XY3wc?5 zsXCp`8xtTIPnw@O&S?e{k1G<)1qP^TWWDYH84ia4W*B_U?>YiS>df=I#PfRi1O{(D z;Q19MhHZ=!0O|GHCR2Z`$ zZc}%rN5bZ~6ed9Y3cZ^ofXl}zC+?_rC#s^Yi_Io;!Ac}mr+%ig+nqKdc9-jW)N$y0ila?i z01#E`NJ1ky;=;X1pazpBMQ~1pqsM3q{!exyos@L39j?tW(NML3T2o1u2~=ewEHU<$ z*aJpr!&@@$byO#BP>^TEK=^@fN{Tnye&|LjbY@ zyrzH?f(j|~PV9ALyyATcQdoimz61CiK|7|u4cdS&F29jzO9ow}7zdnL;Aqf~$=d=Y zCK)#BnF7cCAj(1kwskEV2+FYpCvJeb!5}XhfLulad7fEUVOzaJ9h^n7Bnb+>XSr81 z5^Im=u!l-QLRAEKaB!A7*heDl5WE@MJEN@(=M;g1?k4X~(^qsXiy)#5@6t9Bv1L>? zY)rGwYrqq{Z=5-KUU*dT!HiM071HUg5OrHbN7U0tiIOK&2J5ko4Ma{tg0w8LBhFv7E zPKZ1FE(-9lhidLJN@fSZI)DWQobgPP_h>(mr1z)?aofCmIABHB8D z7S9${SWVFPr6pGwye@-^;N{z@jpW#t79W+7Bmhw+6?h#KkP=ST^Z*|$;rKJLsjGC6 zG28C}*A4tbcZ2;`w5dB(P3!@II>Co+BwvMbNDAlIjE+#1yEHw9iQNhkvs*biP}9@X zA+xuey*NA3j*1!`xFf08X?0X84wLebuJvvcz?9Ny=_bbzkSymS!I~q`I#@OXgx_}w zJ}N^~zzhQ#S`ZSv|l$UAon&vze!@XdhJFB zGiel_M5uA?^P0y{QCoccA_LZBV00VBjLOp42{0UvDs5?ULlsWbo-e>_{)NqL?k!Un zV7F@UVxDfQrx4#x7@V1Jt5{FY~VnOcFp}__~u5Fi2{E0*;te z2zpe%RfYLk;XP?`e2L&G1|IYf6W~wyy=?637L5*;VIsJEmln_P^N4Q%TDmi7D#E=> zwAtX^nb8qk{>J&qQ3Czb|K?w+jY5dOeN_UCisB8y*P?lBlL15`phA2@XNNPY1b`w* zbh}0e(HxsM^kFM&*a^W^s>nMR`5pGfFsR22^gL~E3FxRk0HnLr1n)-WFYz8la4>eM zqdNi;1Kq;ofIh%OC#&+Vt`T=6!YSX9yn6=Z+2VA-Zw_NPz$Vq;c-s3_SSI7trTrWMz~XFi4X#k_Z)7qP>JsshHzT z1l_)82i(LxzQ8g=5Dsa}W+K4PyVQNfwL3;v(A>YvM92`lmI35A?=2fiXw$bl)YHi{ zr5%&^Rtf&((ecrBLat@)x{9$;djLTNXwSWtcfWF4>*IYDVO-j6A7-hyy2II_-Q#=EME1lcDT)17W7#=RKN z=t`UuUmSw!5U?hJ!d-}XMeL*UecDLV&IaF<7ml}?Fi19ZBa82V97%uca!q#xj5D6e z%YK{p0sN{E7K&v--j7ZKYCz#crgFW!5Nl4r^^i_CGJufZ|K(f5@lz6?H;@AgHz(&P4(_#czO@6i86< z+lO7O?9Zh~WjjEp{;2ZQO$NO!rmyCO7jc(x4SAd;2zI8W<$=j#c>2{4b zjUd)Y+HaKr&1O^WY!%<&N1r281G{OioyudkWuVik2pqJ7W)R3Y71Ii(ZeSb#==()_lKV7^cn zeA^s2e?+}B2LL?b+@V*KhOI57I|LeV7-$GM7&HK|=Xw5^dwV>ueFgY+f>Ad*63%QG z_rcec3cJf5&(3hJ@NNXTO53RZGy2>T(2?M}gH$+Xc?M_4_|_5SdYvHVd;Umfqmi&_ zM59sVIF8yql%g<_$c}^}K(y5B!y9OA~d3KV)0~j;p_ZR%0CQv$2@Ea5`FZa#TH-M7hj0d6WbHed;uIWTb zau5D*i!T|Y>Qj6VI#HWI!taLB)y{Z6CB=Z>=kz;FkZy2Kjk=C_jPuz>9VX<*WLBl( zuBsd!sHMfF*8ytv*G}iE1W@l-0Q@C##4JDJcbWkK*r*y*;|u{UbJpz{x+^?)EHBbD zaKykbbFU)7L*lr`z0*vNR|J2Nz$hj{2x3^3^ISh+T+Zmr0?(-)D7`)y_zchs^d-$b ztm(=HB6p4c=@NKt8+TW^kHkCY`6LsgHJhJZrN7sbqvNBCk1H}D=D5yC07pB~k@P7& z3V;a)N~fyk9dv+=j&Wez-Qpb@RP3!7Rja$tHoxb1 zm&ZNL{dtZEb#?KeT6Kc#@_kvZC#ioTpjUZ*j6UHVCB6fRgv8Z}aL)6(b7k{)^J@3i z?zMt_e0+TI(H^dQ;|_rKe*-}mm|~#t@Kpk)2r2@Gs@Y>u7wID^L3fN2TVQ~@mVhG2eH6gp!?teIht$>8skjb7X=Qj0Ya9I5g11?;(dKtYz>m|95^c{K zoeFjUJOH0#JWly0%;y6Bs=i=xaq-F^_a#7UxNgj~$8G|ow7l-eGT(P&Zr>#xJ96=1 zSt>h`Rmnv1NS=d@Xt&utXJB#hxp4ZHw5e$Z6>>&kp;vo)3~PGnL7U$F`ev1J83aIprq8+{t9bY($QCFUs5- z0NjdMx6=W_B)GO9fX5v0cKRY?g2&?V>s(nj&e;;cxB=iI18o!hDFUynC&7T~1n>!3 z*5Fv!(iG#PI50xP{8SC zzyWB3zBU+itRoq00;(9;GVLrf$OWF$XD5yOUJy9Fm*Q{TSzsg0`_nvAB&b;~ZMxW!{C+V1kTuy+QD^D~l^1=%4|7 zjH|#m1&MIps1MbNd5!at(2Ig|D30Z*Mzb+AjY?igt^Lm0)Wi24e(Upp`1~)WKEVBV zB}`=oKFa`X5x_Nq0jo*jblsj&Au9wg#>5z7&`t^VUExsO6;SDWDx{oQ0^72b<+VHQ zI`4{dFJ@Hj6oE<5Ciq!*ofz%Gwk^PK$vcufqX<4q?vUSk@u#E0j?(2DN_-!NPShsX zvzhVCg3J#jUJvlTcoNT-puD%H7MB-Qv)NRx>jnefL<9Hwr71Ti)45<)F?Vt_gU_{AD7+ivO#2}j#pcs%MfzeeN1e|+2Dy%TgyA|#=nM63Z#004kv@(Cs2>5e6 zcW9i0=ymu7j*oLr5q#Z|rUiKI4-yxNwat5`XwT(1B=A#wYn^X`6!=@eJ1hMD2M_K) zcu$30q9-5y^N#}XAsYO6JU(jdFO`_%j0R$>(|T>~)6YIt-~ZtIR~^;8tI1&G`MqPb z@+N@;h~o@60y}Tm(Mhwz?|H5%f(CiXwL458w111g4|&%z?^}WNcvVkzy4D5Pw3>ZN zSvRX5efmgAr?EtTq1);ra8-gc$ABT=6ZE%DFu-6*;m|fKdx~r8Y@1nv>oQ5O_e%bw z%I@-dJTAfe_GH{6u<#*5F!xvpsP1O7)2#Arn?R!c*0}bZdPlr}#*MjYqn)RvLIFJZ zJN5qi?@zSP+w=4%wbfNYlKa_g zHpaX9WMy?FoZovdoY%sfYM)p8^i1&aI~t1;_^U zd@Tt;0rDw0@LxVCuH~%$4@Vbni z0Ij}XanJKq+xO(l<8ri5-Q#+@)5b3fVaetG1^3lt<&bJt6cDPj{Y{}#fSW!v81^OKsdjk+xE)+hu>yg zkXV-M_E+r6GStPv`9(FquqYNfeU;j7w|l<HZ6O3z$ZqK+72>@R88GHyTwqg9n(3K87 z-7z3Y3M7gW;49o);d+B-^c@&x1%tDv`1^ryHqg-Yplat~fLGbFoiRtP+yjHCV6L6{ zeUBP!)4Jk&bJP+JcSeix4W&>hJU=)({`ObEHe`nEl$?C!c(xe)vZ} z9D4494?f6#_79(Bq!Tz+)Ivm%2s$zV4FI7ZqGhAHljLfE3P4w=Ur=FnVy(n;)3k#` zK#5LfGC{tr*~;o(aXXoDJBX~PQ&R*+r_SG@bN$_=Www4VM%uk;^{SS!A z`uh5FN$f(sUN7`1wuak@>2`E&>E77q><54F!OEjwJo-B%fqbK^9AON!WNp5&b}yL~jLIa~Ag$eg{f)UO}A zaXf}gM8XihQ&lRJ6B&)Ov$MkP?k)iS>y6Egjg{q<4FP^nfFIfXY<^bd@8(r3X1&D= zqADafB!$kj0duIt!t;V!Sz1xgzI>LD>IXk*BEmdvs8_s}hYoPSZ&W!l)Ti!5W;}x# zwDBPn9zJ}iDFkFaHt1q@DytS3!xoM?6;G+;xWU;2Em2pz>x79AcjDnwqqcB1Mx;Lk z1DxG?jk5=3Fv0pcxqMhY=g-2+;>-1&{o_v#wzvObdVc;ztx_pfPLE3y6B9waUE2-j zj^F9cZp>A_AJUX%S;C`D@jcr6uGK@9Ef%*`ent{NZ{9>;@H(<~e=SIY)wR`c{q^7c zwdUpLs-LIVI1nLJem0ZIsnkRYo#6pZJy^UuhZO5^wse!;JyH=;IpFHBsximo@jhSt zhX2Nj4}LQo@v-W zh0kNlb|(f@oXgHFE`|W7;?QNFuwx$68+&{0M)yviM>fX-I z&KI(@FZ1J4sf6SYz+PEiy%j$$t9<>f1>isWOcLOt{%&>`I%Fr(QNrE9f@>%HHAs>9 zyLokRaG>ULlWI=d+nVsPw7T5J=0=}7I2!`K#(?dKiA=DTN@Z00yq_}z9yBBpiv*9w zfH+Q=PdfWM-2o0)S8=#EJOIY=XV0HKZ#J5*4i1kV9UL8R%lM1m`_9Am=bwIlvb?(N zH_8p=d7jFoGpc-A7T=wq|9Mp}n4PGjYVDeGaYIqzYM-(Zv{W)(ceG1QYV>As_E%zb+muf2k?6j-s{t|6Si7fT8>{$Ko`KkI$Rs$TW2E*p2pudRzDNG>MT%i_!4+S=M$ztR;cnaPCR;OpdV$ji-_ z>oUDqFRX*R3X%XHuiRTv;BEo_YxU(SLDFl^H!uMRv@-(K%h=W+J>v zQmJg;xBE_dR=~_$}o!&IkBE z`#*m6nr;kyV@jkM8EU*0YxSwSvGDwtzy4DF@Q;3|yz_yCVsI~Rq*IcZOG``2k3{?0 zl?FJf*VR>=?F@M6UD^)cBs;si0CatOYx{-FFAnz)e|>ON`uk+UeRXhLJ`)aC<)d=I z+ZdbG%?l0({S0up6{!brup*uCEf@%q)JnO0`?=$_yx`7eS8$LJHqKvf`$HRUG&YAK)`qfu+^K&nDws&60teVZXsx>?% z32>`^d|fgOd`QeY_rgr3STSp;!8QRR_`j4XQb*A(CjtE;PDw~ODX0Q{f*Z$GBQ)v^@FMliu(>0UrY3{a-!)&liBBD~uvB zv=j_2-AH#N1LMi@(UQnAC_-BA(dp62@$oUn-^)tDt9eHP{KxnW72o&2rm+6gmjC!4 z{$ntI@{3RU)&tso3yE26OX064)=1~eyGOg9%lyZcdL_s{H|7pKu(46t!L+-(`#1P5 zd{y{QsdTEaQ`|Xu_??Fyc-HegmC0m+IW>_A&b3?ZVD_suHDTN8?CearQ7fQl^bpLw zP_zeTQ`$TLX@!$**})9oJ^6E)(!orf;7pg_ZDakiD?07IIch~!Hk(z&t)l97yQ)+! z_4;q6T2U*`N-*QS<>Rt?`s}HC`t+%K_UxHD*gXjNz3$c3ZAh%vsHubF1C@*?RWgxO zwOVbI^HmvtD&yZG2`m zE%N98{?CK?-~F%uZfIiNh6K5eB2IDEo;`gQ zaJY<*ZP!);d|`EUHP9FEzup)A6Ok_-e-X@||KsPq`OoBURL*|a(&KNP1VI<5*RDNh z5*Zu|k^nyhd?bK+@ZN(j7Ysg$ZzDnsud zv;)bev#NYr?tO!zt`fBHfBe-y2EQLaetaos|Nq6ofdBvi005BxYZ=%8Xc?)m`SobW P00000NkvXXu0mjfqctQx literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/StructureComputerUpright.png b/www/img/stationpedia/StructureComputerUpright.png new file mode 100644 index 0000000000000000000000000000000000000000..0abc70c2ee4e06b1dd92f724ba108287e06e4bac GIT binary patch literal 10081 zcmV-nC!W}eP)`{5(~TZ9Fq#o42rxj9BZ6dTL9|7KrUA>*Mzs}Nsokv0epv6r<|VaN`;c<> zVPE!T%YNOLt&;Y~Ra<%4s${*jKb5i*ODU(ARh&qHNCBdV2qG}xkRYIeK!7tGOk*0| z)7^XT?cduyGd(>&ASLIUx^w&f^zC!c_nmV%XaPYGK$c}N06|-Dy!VI@f(!W>5JeF* zO`~%oBO@RT5BvKK0Hs!?k4o(jBuRqIGZ}xG7vP|L;O}qP-S~53w3j3Vdk^=#WmQ#a zKk@v8YXt3fKizTPm+AWCl(TN+==$#NS=^EKn66JuOyX`*L}|Kh@3YdgxSNF(NY1Cu z<8~S#&0Ie>DzW}Z+2d?BOS)oaRNBP-XVt^X?aXL)Pt(=M_}gUeF8(H{$NFLMZUOQy z%+mKN5AD03J9iE?H#ed5pahq{df7XE{oXq5C#ksr)p8XSMS*-iPkXnyjnj zVC})*W}w^M$MiF*6{gd#j1^|tTpI=fB;zyPuKR`>Tw=L!OEd0PCN7#d|or`Ql&%AmH>XXV}P3Ab>0uz`x2*PYz=NeNA+Tz~pCZg3f>2k0HNK%$LUJ7McDLfH&KsrRA9ya)71&~g&_GYu}SQ^POC3{v*u(jracU zz5l+vy!@ZR5rLr@ZLLE?EPs_s1+M?{x;OSpfM4_Z&=FSq`x~Bz{{$@k^|eBg*1v2v z2RYm(a^o;LIoXoXu)`2yzbEosBKJoK4@F!$^u2oA{z#GZFEE4Cs@720{Q*M9upf+u zN}oqZM;-I*17$}T$Y2T7EOso3j6vtW_fNm~{j8i_!q307?T-^QD}ZC|2(JHC3jy>1 zlAdP`lbtMA%24^R3@ab5z{JD^seK^e#4tTI*~_>33b!_T?g|h-Gc^V2a7hUTh$OM= zD8>3w2t^=DvHN8)6cMTR_Nq1YTtDyceNNYPaMSi6u)DiU8^Qaq0#j2H^m%IP4DF|< zrn@?Ka$=mF;BA5?zhsL{2su;=3H{XMbc^`5vG;HfW=_v^fAJVX<7#*_6z>%`yESL$ zvzVHo+L8+_$eQN&NLHPj6H8!PBp31@5vu7cf^L_BzZ@uQxoh^C)?Z3X! zS^%nw4dYOv%ke;Kb^&pyfOvGClvI%yfomj_*v`%lt&`cT1amK5^5!$SQ_Mc&m~~L* z88!oi_>DxE8d{bb?2MER38ccVtD*hnaygu$X@6(^4(-KZJFDK`x=(u(*U9~ZeQ*E6 zhYvwJ*1WNa1)^#G_`;XxU~%CZZ4Mq!Oig*k)@Qvw8ZQ&)dD;Fqzkc>?rGSHL=NUar4GaW~|k;w(E+f zc+abUzY1xAjkvmAZ~wuNKnVw~07$lb@4Y4Z91sA`B0lK|jP~cpET@7W?gl)^Cx6Lo zK1~D=nH%wiRIMqoN3X4}G2?ojB|tUokFR`S6RBzJdRk7y&6@#|!zCgVaCL|wI0nLy zz`6ztUKB+t0znXP#?d0@b4`t-EgRr4hm7jMY%e2uEl-ogSo1I)*EPW(a10bOHuVGb$Fp1W={$AaGW9 z79*$Oh%xX_#lO8rdo)M$*(_*|;}t;xQ4r|`35L=VTVJs_6vdD9daVw(S3ZQ5l@(a| zaK$TEz5oo+8or}aT!$WUL>LjI(PUr1C6>VYN3=v{Y*_38B4XDqi+!In*k~{~gJp;K z1m6)-lJBG7{+I*+0efhc4`npQTPP*sT5fdaz$i9wd%f9$DEU!k7!A;LjW$x_B-LKa z=CUmh4w4^^U>@-xrUFh5>DPof4|RYbM^^90wSo~>u$#RTV^3UR_XJ=%wT7ysI}}LW6STat?2%8v^E_iC$pFlSgKH#H@GTB@KYK#t#-SVX>3!qMY0RDY zKHgzAJRt?rdmJj|3X~s}<1gHyK!ar>g0SYS&mZ}MAkfw;A_Y@z^md>`PSjOeYXq!L zHN}3#c{qbZ)02Nzt5W9pv3g)SY6052mr^Ss4s+_XaM#}FT`*}cBcaa?=y zgZ{@$Ih;&JarNm7KSA6*(E((2Bfrn5~g$xYcR+5JL+Qv z5EIah01)2IBRY;jX1aevLzEzr>6O zngK+?Hd~UU*u7K)Ur_Wj>dTMH4=Ux#wmYuiUoVIkKwO=+`kT_eXy}Ff*!129LX+NYf!hf(KGo2wyznQW&op0Lr^puQUQ?W3c%EH zs;`uR7X(0pNF~@z071;n&B5yGYHv3kpmX~Y^$F}79Ub+abqlrK%Nv^aEDnj0bw&WH zhA+bD-CBOnMB;5+bEfF1VK>RC{Q@SO2*JYNAlZR5v#x`l!lgm7vjpJMRw@?ZYcIVB zb*E%xN3tMrSRk%hVvjXG#_@4AK0J17b*JY?YJME?m?4znK}y+vBs~h0QPF5G01(pN zBjS+9N81e04@ha586$*fBVQz?p?+kGK-FOM1C{qT4lZblLG-Hn-q;?9#NB0g) z0EApZbSscGDg@Pz^v@GcI^_=%tN{4V)zmMf`x*HIcIp?2co&fjz;iq^)?*G3z;_Db z3@191l5lZ{Ul ziK9LV`R%@I^dZ}HfJg>NLcT+KXHNN?iJ&j(o}kYufA8Vmr>mc=`V%Rs{R<718E)@v zGvic$&HG~DX(gXv{JHVc`2M&zuE%8x(+=p&Ga0BpuENgF4ztV(0M}C#s;RN@-C#yu zu~KUas3R&24N0ssxYkD@yhp9o!D#rG%1LP$5z~+s(sXQCMj|K2)%f6;5^u)bH(c|r zCIndh6$LTLjpOm>$NATuf34$p5$`itd{6@8_$SPIBm)p91Yi1fK;I&sU;t4cvDfO{ zUKA6;5dr9?p6CN1Y=}rya4!$u4ZY)OB;GLMZ8C9|<~hEj^OU1H?d9Qg)AdxV4|D@; z)T5J$f!^^nlAk2{lXBz=A&jU1I#ia6&~Cx4Rg#Ene*+&UvKvDs8E*(&4nJ2a6;M=? zL~z|}sI>UiwK~*w`vL+lw6&*QjqfPJI;rvPh>sCNm^c#2K`|nPKx^PJF2e@iN)tF) zZ`htqN<89&_g5q9$=L1%X7{gNyLzpsPZI~btuL_pnDSfLq+=224YOsL@S54a#i3~l z01hQ^2J?|x+r1_m@h5@LTdJqgAHub7%n$5)Q2~$?gT#&x5P=a(5hs}{?negbqmIy5 z;!lYDCxNCJKnlznF{wM`W*tX4Gi8M$p0nD#kN1`j%Q*FEjD-l-!!-WU{hZPA03&Qo zGlaiS&NF);K4HzbtoARM*o6cL-`k*mkfNKCWYJXnWgea+y7+pl$nJ>zX6S|dF91@5 zI#|`z<_mq091#J@3O$qG3Qsxl!Mpd0mUI|~L0cDSxDWN?`oNq(L_k|V$+w<<^81ZQ z1|X!XY9M+!Gs$_60SR}7l#tgOxRzPbVihidD7b}u3d=`3w(B6VLy{z0rh>CakFlUx zjqfGZC#>;2$G0t2?O<4;cSxiYh5|k+AC?~{I@AkCfSOVRwZUfQrUF2y>l8!0p}^CG zIQ{lH;`>5;Yt*;5w(li5TN;wQ=YxZT$a+KoJ&^zT!Bdpx+mWy928bfNo%|hE4?8|z z;r)1QCIEg=7sF+sZ)eS4o$t>xI`Ya5D!%_?Lw^? zb>Pe_Q^PE-6Yn@Zu3u_Rji%UUvK>&3Z)u{@89^xJXH>PW#=qb&B8rH%D=%Gv>@zw4 zyPExBH^2VdfTg7+&!OJS35gG9H04-Hc0kA< zk|Z(XAc2Hb1*gRPnHhVH^qK+kh)f%SFeKnwF9t0Peb5(LrKWc<1~@vbMAlng-zU#ZW}yis6sS=oRfeOEl5TeC0YW|(zpYs?U-lj7l(G4%Ho_qgpV!5zj`y<&xJb ziW@3ubpp5xVwkj*?v2TkgVbo5rmX_LN%F`Im>Cma@Iua z%Ao>E&2BrT9Xhvle~b3Zx0ji{s_Ng52q1*x%rm*Y;6z52+nT9rem!3Oa2bw{j+pi4 z0x)!tB%64{;FEgh&~Xn%gKJ*{xn`3*_979Ukd9a=384#H?axPCvg{K%Ep&dcW-tBS zyVzAWVQvPJEMJg&TU(&~@BamByCA36e;Lf6_*@htVKnupLUsC+(eg{)&#@U3i!F-(CDi zF!#zU^qB}?D?t8Qr2KQN#AY; z7)|@xBTfYULQ4T?n&vzuOQ9xCIXnk<5eF|Am{<)fUKGXdEi~GjU>JtiBZTl))Q#C4 zflu*p?Hh}8uUI(5x5hk6SqhkRu2pwkuoBGqlftmp?d}$IYr4pzU699p_tJV(K z0~+j58p+xZ&S#}GyB?>D@VXJ05%FQKzOu-yzxoY!9K^1K?-Kg{x1S^S+jqD$dk(J9 zlCL@q;BDm+Y<`3@%uW$5qnE=+a*!nZgL`&!UlBAFfKPsR==J@zPu4ry_p2NK52UP} zMsF5x(q5{|F#qB;xH@+Yo+d1umSJ&5hO#1K;%EJZgIkfk=Poatm|dxUAIS53U(We> z?GAkT(nV(O#*HQT`Ct9i8~@FXcVKdXt(DTgLkK00xPl{FgVNSX-mduUvhVwoTZA`Lpxhp4I);6S1ZIs0{Zu@4+vA`3tyo z@e*wW^5`hcOik10nW-rn`9Xa7{46sro&FtWtcTLHm=akLSpB_6Qvn$GBZ$;u4BpU^ zo~h8%2~H_!)bUd`@ddo-SJ@g?si<)FA5Xzfev3|xnxn9j-to4iPZ8U(%?;;0izOf~ zf{d6MwWh-A>ME@Mz1@l%MOc1snXWA?F2FZm`6kSqu?27mlRY*0??9Gi+P3kWAjyCn z8&H#EDTOD9AWZMsG9nhX&$uY&!c7HWHgxYp_Yy#(9-#0fE~6c513jPI?Faw-2i}-u z0`g5te5YqTMdTCoT>uVdPwE2tu@1Fr4a6ZkQ@wm{eqi4s0?@(Fj&pN!AW2f9GYlu4 z8%`0RW9Lw4IaH!l>H<>sjEIF-UcN#$(6T(w z+eDu^eTMcE&rQMP_!Ol16lAkmI!DMsq4SNz7h(;TMx@042$HBC~cP9QoSbjuFO06~Z-MDkPS@pyAW7wQBgXSj(+iuno`e2IL@(YMynaWvq_QdG!} zWdm;{D=o1F%t~+qwvm=Z%g!`>innd1soS;-h3!Mh?3JAFi9!mH#b#gPQywG9dB_TU zze(;Gj2^iJmo`Jsq3fx2bs#2o1x&orun8jMqZFbFMnRI@`|wZN*v`;a04Rmiml+#F zzaAjOVgZ;9n_)o`YypIE0>q;vStTaJ#hc5cZdw7qx#1pBKT;fe6 zY3hGM5Jiy+pwkwI*b*Rcy&YMx;mdIR_&*7p)-OOWJ{wJ{kwmGl02 zVEinZNQx zZOV*hpjxZ8TIT!ttyI5_=eZ8-BU{XVe>oYJmX=`Y{Ux~d{w;5gh#)PcVddru{QkfG z{U>W+3zQG`8P6#(`(;^fyWV#JoG5U1RaDyrilWe_)>IgMW)w2dWM~UQbF#5ZK4}s} zQ~b&YEAU4@`J*Q$g6d%v4r_;y8DZ@|I5@a}Z+*R<o4a-O&6?PE)2Cnt>Mja-?7KUo})~9>4zxClQxOM9m7>*!j&&|T@ z>?|yPYmwPs+$h5J>(^oR<5fCV8!8xvf5+X*F74&}qp)&&4HmAxY%lP(O|doJ>@7*t zDlLkT%jH1Cr2ras-LBW`ke|($C#NT^BkD~b_?zU ziA*mQ^)dA?f4B_m#VtzwN4Gw*FYMfCb8{04o7jXDg2jbv-aCYNmwXopp~%^*s~^GY z?OX8mE0>$D_Y+#f7m;?XgMO^S@Mt!&kC2&8rxTq`gwqa#ECI7kXWi)NPzaSurRh8& zf92K+{NF$QMay@I2;O~fi9Qn%kmoS@B>LMC9Jk&SX7s+nEECSO1iB*vLcTC0fjAT` zO@qK71yC5Y@k9V|crPFTf>zN_2x>-BV)8=?y4AU+X{*G*3eg+(vykFXlzf8r0#H@Z z6H3J3yaMc(vPd&*Pgr3{v*x*YED&`s~aF>b{#1{^FN^0i{yOOZmQ| zMfN;gL-ivCD*F{s9#@&Of*?ebc64;)%}qTwZVSMPXuJb-P4_)#*>gd%BhTb@t4+Ey z**c9t_3A#Qpk_aF_?H&a6*U$@`!^2aUox(oDAfA8}Y60O|n-Yz&gVCsa)Ij*!b3Uy}MLs<6YeT zEpF#@*cBuoshuwIq`A@0kWaXDeU8aSm@py$R|F!nU}ilinqrEeSj&-gE+OzgC8W13N?E{`UHv^>^@N0XHImO)2G}VN;^f6h9tPd$4I1RVXMAc8E*RIo0B zW4=iZS$cno217HXI^{J|yE=rccJ)}LO-#$!;7p=3%8$yBd$xHklO>rUJ&3uv%WxUD zue|gXZ|>SR*~nHKN8ah0U!*@n%{P1xDlX=zVtU^jIjiEPT+d$K@BGUC&e$1yedW#y?XR4jhx}Q)I=UhVgPiO3V#>~b@~}+PyPM+O@#DkC-g|`j zcH|QbTma3`FA-dO{~D}+v<}7HBD3a_-%0>MbV9sg_+`y-0#wHW&>JQk9#wpT$_F^= z?3BLl2%uK0(Vht4)o;BDS1w+mV^;tK`TQ&aiHNB|^_)4GQc z7@fQjbRGc7v7g}f+hpv<3lTw9HzC)i)~YHl8|3?eIZ2Ydwcq=fzXu>dEAI$KsS@c^hsrart+>-N}wOtKpxHD)R`MFA@E<<=J&P5;_kW5f~Sfs=g0ZvZnm5w6|k3hbA*>DZ0x(spT}ccoE}8vzx7Lw9ewb9%EQIS0y- zpB02ujCjL*hBE>RZb0}xp*q`OMjPa>R4Sc!C(~XJag{LwFmTa!xo&b=Vjvv)!wKxSy24~ITE4OT+4ytgTYC@pD*3Z{x>3XTR1^(lSq$_F?q%AekpFhKci|Ur{i197 zdKUmekC_1DO~W+66+yR{o|=a3hr5s&A5Z$~hIXtK#36A*Q?(7VVZQCm7tjcbM0Y1R zHFgTt!7E1(aQhx^r|%Z-J_uw64?f8n{+>yD0-Ry!_sO~-2!OMY_s*U5J3Wz4&>sO1 zxFX=XKEW0N^d^EhXbo*cZ|LOlEg>ZoaCC2A;tNVuDL|&b-x?bmgPqz=aOy#;y@Y(b z4@SNQZh0Z=L<}wn`G5B3f7Y{&{SyEI7J-3(i0e8Pyot-fvpCKDsGFC!cedg1;T~<( zy>XbHn{$``a{bQQZQS3+Dfd^7018+DpdaJt9uoWN1{Vhh2OaMv5l&zjf-`nAf#PKV z0#X9{MLt1)1%P2%c8YREpaXTb2LbF0y3l#{eZ2Z(EP_Y)qBIkzH5H6!jh5fbq@L zhya-^*(h9ujL^HdoCcRm4@ywHhoiRvB;S7wDe1iA+~VSeS=<=nH%j}Z9o%nwGYz}T zj!nSuL6vM7$hArSQ=2UWub=Ywxfy_NL4Losy3+Tw4<{-Bf{+M$LAg?fN~PisNm%@| z!1BiSgZqW;?JdIUTRYoZg~{p3`uN1uj=Q0Lq@T!@lS086Kn{q2pfG@%AI8ZDfWQ?2 z*V{1x@(KPNw;z&+>wkHjkX{&;M+=yEn3|qp-cxEM+5vbzePUNmf@b9Z#emX&5GN-9 z0xSXp{}9)QRA8fo+nen+$RndppP_v)0~{P2&|VZp&@`>(8G<0RT+aa4PNjB=X$%zN{}RGf}wMyjt?F@bKmN<@dec@BLl?{vO*#GMQvS2uOAckA318;-&Okj-XUaHNu{4WDP^yPiGt#34sC zj}rb~09ybNpUdXp@S(#FiB#1aAsh~`xke7Ld(ZBNy&VsvhrNJD8Q~7J`i?Lo-w&$l zjYQyf0MC0}wsVwAWfl(`e=h((B)f8XpAX>A2#D-jrCxI$tJP{C2W8MKt?e}A089kf z^94ZwS(e#39jB9Nh{zGx*}oGiD;4(q{QNu{*Avd)3*Z5QlTTG%E|+0tr3UeM3=)Z$ z^GqxjVkG#X{17#bR4&&|!v!QA{D`yR!Eg7A=X{751e zjlu5SyIHR$aEmAM36+Z10X6~=PvAlzvWa*C34tHGL9K?qP2zh{__=d{OizZ5V`F1% zoSvSBLZQGan!@%PgK=y*Ml2xtut!VP||1Q1WeA(l=<9LeJq8c!slfqgpDl|%;! zL$O$7{4I?hK?l zQgAbH6N;tceap$uO$+E7=!5>9{p;SZH54cm?P}xINk{wA_^_!7TAP1<`ZL%H}2XKQ40R@ol&tt2I-Lo7? z_iUy|4Ak3mJM#dhiY0}~G_azu3d6cWop%k$0b)_?+l?Bl)_T3(ta8!g0E%uuuUgp4 zqj3;d>vTF)tyPDZW%p#K<`zp+AbA}i))9kRwZ?3nJAf>;SqYY;i0dW6nD`@x=$Md1 zhl*Jmipqj=If#KROaE|r5+62E_X9+JKao$ckaz*JYFV}ja3q3x1y@$8tojKw3Sc?& z&@+mvBLNzOLNfI9q+t5`Eq1S~tE)M^Hgw?NfmaS5JoxItCk`G(&W_^cVqtM!X zfrjr>5CTHLaR5<3adpN)*K`z~0#ZwJF)`!Z0SLF}7TDMnz!zWs z;!D5#!tobg&StZ8p3bCuhR62rKbq<3hVe@i%bLvp9QHgJHQM?QAsa~S{T z>8C&TjOTkM`=8GA^bDa0x@xP{JLTo_5|Yo%`olN?9g_pN5s@QIBzG%9(e4( zJACNzA-d-Q5(`26jwGcsx!mEy2M-LCN~J`(R9?nsmo-zvIcQxL=%x;-RBC$;U|39K z0{#LPo{JVlqD>K$wl4zdVH0;RK;-xD>}SVeDeSqYP~YTmANxQea618;Hy+2TV~0Zr z#>QSe`1sh1zxu1c^cbG++;Bmr!H-Z4@ZvB3$}bOHx^!u1;?l&c7cO3y+H5~WHt+e= z=SeVhPRDH0V30jSLNP7da#CF>HeSDWeOtNv$UA_We1fT)PQ_4c#{p8E9Z;=T(e6Vm z`4o~AKK`X&d+9&D@abbOXL~clShbz*?^Bf$5e@>rl-dNPdwP0~?%%(EI4B0?tJkhl zsj_n2wgcck=sG{P0+#csNCcfg-d;QSNDIL3`MW&V$QC(>Xr1~#7XTeM`>S679IB>p z0pv$VM}O<{FMjUdVdW3=`()d0G#U-3VmA-~$FMBQPj;oc*a@}<5`c*UuuuR77l74V zBN0t~pU9?jt!YQ(0Q3xV0PxHY5xLn8wkU$Y!zS@=5lsh`*C-nJ2o zhBsXI%&i$HE){F^I*yB~rB37VwX0XJ{wa;6xzdW~1#Hr)t96km2-FrhNC>GE)M*{1@pw zCgv>={^i&I@~`RG zSw9j;WYc_#Vv|YpJA|Vv(0vjH8->;aNdzde4c*`)*8<$+6HHwNLpPid86m3EH<>~3 z7C@vl^V1RU_yi8S0+xBBj8=@;bL`VE{OYGZ_56Q8@{c+R68x6#Jv9RYI)vn$Yntki zLIe?(iY2%;GY`dL8DyzdbLs9h?B2bbpLQVzyVKoI;_>p*;t~^qBuma-c;6?o`LTrG zCPC0SjqVl|3Wp$-NNv~>9%%t2lS$Y)uoFf`Mj#rAvTM2i-JWLxU{|&rmTjv>f{kXi z%OM$bIwk?oNcI^JcO822(EmQNcjQEFNA4FRp~wI}x+j(D`t8F{9{HUo4nCIiBxnl) zV9zy05R?Qa018@1Wu?Z5r(kPp3SjT(UWmq`j6fHf= za>)T`PVN9iK6e1R-x9okfdG+kgo%K_UF4B(0eu6zvB#&7c!3c~Rb5}HgHmnZ(}J>X z)zp_c*rugckLc^`JD%Uw|4%dh{r?D0<8&<%iIXSPi5s+HnZ73mT%`L2;LjLuElv1a z!U9%*vDB)*6t1Zct3HuT+0*-`b9I=T6CX^ReD5dc|I7IM6Q^32z55qT+i7@9Ff4-= z0=XfZ&oChz3WI{{DX)~F(P+T@!o2hTBj*5Q@jaO=BcBiq2J8(r6HQeUj)vC+iG+ek z=Rwt_H#3UlzjE}*$NzmSmG~r{hWPhF!B7BuuZ;F9VzBQCffg+W9(zdg3&8SLoWCUm zgOVeFbSeou`uiR7+fLUy?Ck08d1`F`NV-s1>?$lSE#ox|-TS;@zd>z*TtbvZ(ACy6 zJ0^*EDU=G^AL*0J;E5-HzrU~lWxSPkOP@a@k%x8Q97&il0XOs3~3 z3Sk&qpjmI!iw&j0O4vk;Bl4XBSk>4y$`g&WUhV)~0ECgj5z5cQ7XVpx3X_xT&w+%= zH&qoRmItx^SzGG@M9LIPi-JOAKZx-ek=2_5j zz-$q4xJ91>%V00=me5K+})D_UV%iu8$^Ep&Rvk} z&fe2~ZC5~U^6z4f<3mG3WfZ`>SFc`OpbKFs%x+M7qxMQ5vN`b-A7;Jx1iN=5`JG6< zNeMuc!>XiyMC@6H?z8|xFerg2$zZBAGy@qovjXL%vNIRKoCI`RPsMdx= z!GeLl0q9D0fsAud#5!Z}>Cb!`_V3#Z@n{$X?3a?jT0aX<18*1DacxmG!!%j%c7iO{ z{XDzhdfaGQywg^w=U}kw7$SJ*7x75}C*l!`MM1(oFNb4nOr?85Avs*b*Usj$J75Oe z8*c$LQVSplAVHY87D=)zgp1*UI{+g;xwi66U0ZXF9H1Ry@fg%rY)gxE#60&5#rSM8 zl^mqwa;faOH}=>V^z7(?U0C`43NRj4HEa<SM2*KX>lRg`b=| z)$U!l18~IS@dxh!%=SCI5O-N zH9wdi;_YQ|X%RA+3?qMRYz(@4x;@_)1-k}X6}j0itPM|@19J*A3IYV5qB3!ngoP zwE@9ayjuX;D%zK-xdlKK{~t5i%>OvhKhVqPj$p!u28SH-36ktJJuU#a2LhlrX8GUe zLdJVS)Bd+Je<&Pr$oIq0RV3AZKDVQfoZu*WMc2worCzPB+~NW-41>8TvwW8T5{blv z5rC)X#0m{ z@BchFJoGEESVxc*NVA+qM@Ql5XP<`0o_G=@Od>^4L`QLjZT_w%9q`ttX4#tMQLnC| z2n{&@lk<>F^?-ouGc7xG+=q;77F-o=kt2|xQ5Z}dn}+E*4DyW#3 z)kY1+Iz_r~=g#Lk;_(3_x?V0V&mie46%z#`znLFZQ(>vNbpHk5@A;Nb;Z{?@1}2p( ziq44`6I%g|L})CAJ-=@Ed|lI_Tyc8)@!sC-f9mVYJ;N^u%?cddI|{%2-~2M9GC9xp zL|=tsU3%B#6M)aK(1~;y|LJ@1m;d?yg~Gx--ZvnZYkfoVIf}KZqxjKU3so)&zE-vO zE{9sZzp}#fq59S_h={q5$r=1Tch$U)?>h`_-OIPp5nS$M%iFC!YNTeDb+Z z@(+5x?-zhwsV)(0Ab{y>Q}FHo`d{Gm>F=@gLSX^kIsXo1vsp(3_fi0?6=Fe<04U1K zWvDeg07U-jAAA=sjlb`?Pqu&I-3u@`H^aD7%h7RUAygl#WxOXRz3Up2i8 zN+j&cuhnb|(=@LJ!_C}f`}$rveDve5;Nc#yI~TE3ntK1I*3BC?d-(H_c!Z53X!#VQ zdk67h*PMavXyy~Is}Igf6Td`42M0>8=GWY z^zskh)nGnX6>JL_ssced46&$p{$L=81tdBx1e(Q$xIKAw`t_;F@vmQe@8YRe3%tkh z_k6=u0#xCGU;zY>}k^n=8jvW2!$o~Cb#M5DDnHG)F<;6nm&Ye504Tpk^_|O01 z7ofYl2STi?uW#v_!NiJoA4pI_^WSx3x4?8_t$-PWMl;PjP8SIM~t150B+CC!aNFqL_kQyIv^T}I`3>% z0IYgxJxHvI1!L&CLq3gih*!P|tJppbEG}6RSh0}4iKolb z-IDEx)APLr&}iHBP#f^{_HE$O#ATS6n1qQBCfnXmr_(ID)7|WR35hQ@gX6;ab8L*r5{%$4 z-Id<*_j%4}R54%ma@oF-OoHrcDI@|JIj<=yXu1hyY*+4K0gS@ zK7HIyf^P@bCd*yZV|8zroxVN|r%#_|V>@KBS&STHayk2bB#mIitLd$LmC8kImlY`EH^N9Pwbo>J*7FY0t*R<3EDG9BEM_|r zjdzx9x7_Y+oPr^kyCM3v+XD zefpYe}-Q-hSa998M#c}5ziGc9<6CZ0kzq?&=^8HX01;kp-sc<()6cmwo z1ZwyU1%Z=)Y2p&LwF#JWO%Y^}xx`_4nhR8jSq$cQ1IJA@cW*?8O#k zTRf3pSfHY?$$IL^r&uJT(RIILi$G-La{+{1J)Hyql1*+q5jfo7Jst#3{=^3pAPV9z zuH%pJ^1r}1byot&pbd^4IBYKvXQ-^yV0OL$akRWzt-(G_i&W5E!_Z(otkrX!!#Kua z&>OI`Sur$>Gpb9{ZW#J?#0HE?t5PZ(o3k>4~lNdnAASyiKg#efe`4 z7&|n^j)hf~iRtE5TTs}=;q(9K^YGGt`%-iL?YpjsKZE5)flPNAVn}?gT7z=6?0d2d zCF~NhSibE%eZ762^E2<9fy*CUhQImd-@wS;5&VWBBoYa#q~W^~0Fj^R%{k{pex+(x zJi)EJOeO=3Y6+6bq$7g)rSg`(GdMU1LxV#ww0CT~OWYEO{E15wTPB}deqq78{;?;< z@EKd2g}DM$77HFX8GCHZA)mnewPDznZ?sWx3=4^Z0Yy=|W4ER9oiZq@0xOj=RPb7& zGqvF!-#Pb=hx{h4%*@P8t*oq^q?2t4ARdo9%=axS{F%Fuhwbm%L)|f^@(>pTI-K^@%*zb!j zQk`cox|`%rUbx7{@$qps=JR>@+%J6r^EGPE?<3v)Z7LoUG;h9LdnX9Ee-rl)B9mv5q+QZ?EEN z^@iu%Fif@)H+at{0gxg&`CoeZOMl$gn;!N%Nuq<=NCNH`oPLj?=~~-oM$pa~sm=Vh zCBFv?;ecHT?3s(>tb#cCV`F3R3!izxA%8vVC%AJ~C@eY0(MGF4yL-AB`Rsih{mmkg z@aF7|*ZvM(`{DOt;xco%E2DcyPoOKEYPVl5#B~Kg6hT-1NC3RN zi2OHRf6YTaG|(I77J_1A9)M~l5suL433w6?Ijp{d~Dsd@P1El zlTUdoF4^Q47K={qNB|sSpydDrPG(}aKlj2P?;RN$+^DB-hRu4u z=5urr*Z1B}-(zuc{NkGDsVxyQy*U<%bkalY?1GQ{ks;{bVeftB#!a*}6|P>MbnbuQ zAAbQJ+xHk`o0V_)*C&dgVoo3+fVQeZt=WPqSo!605sCMHFQ3mtDiL$?tmxkPZqCoK zF^A8UG0&&J_Z>L>-P16Abs8d4CqI+Tfuc1W zJNM)Q@8xnitf-_z{w#+3Ic#lk=!rw@xy?Z2YpP9tX?Y3C%S9-cym`*=-U*qWB*bEo zE$#K~x6U}^=LhpwFiw<8C06-ybaBFpzQP0`2jw*mK#<(zAAahn^T1MZ$s>eXwJ882 z=9!2psxOyi$=wW>Cnq)}KORp)sw)L!2M@354b zfL2;qnA?zi0wN@D`DO z5>HQ{5T@`LDov**kPu{9W)8qyKyJAJkuL}WNZD)_lQQUdfm*RANMj#bS;0Oc;$qOo zGr4|tJ>*k-Bn+K6eEHa?j{P(2UxPu}d!KruDBx(?=c2o*2VBR^>!xqx0pGb`dCzao zPs8-JX?XAa`L;==3QhN9Af3rTHwIO7VQ$VAz&y4rSBpybW?=8*qwJVhzH+DLkbmId zA$b0|=V5f;sPm2)*m%9+=6ZvY2%2R=qoG44odl6GV;N8`mmwMv;GMH)U}0efEWEaV z|97D1a$`FVmHQ!g2xRpl$hn$RT;{HFN=~ z-2yAv2HfNmVzC$#K{A!(m!91-l>gmhzi`a+oPng0)=32Sv-$}rJ~;O2V^|el7a&(l zvFLWLT^=8Y;$i_5rR885Y=7Au{SNs{3xzf0f9co%2RQh|;d`=Pasf@(obw{O?i;Va z;Sm6VL@>I46fRx5aJ4yV6&8j1@= zP^z{l)7@zdTa3!8{h`8q5ymf`hr$9@{((a$mzL*#W9H`coKnMg@Gle%K~-tlz7&!` zt+gCLY;t4jCKC&VEXYt=D#7*Z*S!uv7mH=v>irIo-!q6+cC|(RXOa93fHG)_0G00+ z!B#=;A#UNhA+&jlsjE|P;o?Py{F~ROVdmxyR%vc<@+lOp;gIhJul#UZkNj|$x-tc) zPM%`NL^`3kRAezba})adcd~0Uw{F1efA@WMOyp;Jb0<&$b95e#*`jRV`q_Cf3=ug3 z#Y%C*Z!y%fQA zKq82t?cbc9X5>?pN+suh8rwoFl5of;xXGvSlmFlt9Hh#>N4D=q0b9`2REvCPU99rc zF!{kGJ0}4U`DcIpCOaqcaX3*}uzNmLe==h`msPV+#0n$7p*BF2G0)oCJXcmKEc}Hn zm5a6#NCdnEZ~?fGC-RSd`uLYe_vO=`8PM{9Y~3dUBAx`mNhbkN5U8@Z1#Y|6)*j!P z&olDRtcwh_;9UKGMwIs!#G0k^H@_rw5 zrEQ{Ld*d~jyga$)x~i&7m`niZUZrXcE>Di*Sb~v}v6Jyw_}8azPA>_VxAL7bgz-m} z&eDS9N5lxIy3JioiebJ?P+V(JHFaI`+4AY8`+?aTo(&vF;=lU&fBc1y^9%m!6?xU0 zO%XH+HO#d(M2O~ zM;u$lx4!wUw&cfRF%|?OpFrdniv>o0cRF(dFD=n^B0t%g1m#YPAL{!gAT9t|TDx}M z>(_(S*VpGwT+;y%|JT8T2VXq+)Y0LsZqy;)B?MOWoP7WDCtPD0Lb<^`EG25e75{lN5pesp;*d2b@70965q+$u|zxMN*h5M2s&}euCL$;mhu!}C$ zm4XI7KRG@Qu}I=dI+Hnhb9Ur<+a0*ZWaKBM1SDJj4A={m8Poj12zQ-$$NZ%?njo23*vP;WFC|4@ZF+o9# zCh{}QO6KVA>xY@XSupBVxOwBIbDc;pEtl9xAo3AJ{)u9taEkSGO=aH>27?{}&~?*l z6_nU49wMHP+aaGI_2v55!R*{Dzqb3_`3vmeV}}oeg4P!fg}vlhZ7OvGvS`DEatYNd z2BBPDVdu$Y9CDfN^S|lhNAuVx98@a zGKs|_Ac+#_hR$q;k+KDwCi|}|b+~oo7R=AhGxABDifSvE$j|TYhmJ^x_r-wkcoU1? z6g~mz{saWpPHz|nYflu)s_KwWq?gKNhy48D2<#gk@>Ktt`2`E^l<&ZuJ9pSQ<&rRe zd!B}+o?PzBlkbn8YBb3+MLR!^1Nb_q<=c?bQ0|(1ww`W#@k1D|WV$mi-k7;DTwE%` z#HIJ3P?&+|mCwLobOHwaShm?y*Mp)rdt|wUm0q^1-i2^D49NtNzq8-IAb8(5+fC{s zN#Of$Cj_g_`@Z?Z=H||2;x)|xyPpf_1eOMcC7bkB6!83f8IFDS7z!W{@n{$f_x!@z z`O3wz)AtKY1(ug&GI=GR&!3o{p8i`)ZY@GGC8wvewTbKJnuxEgRJLvVZb(QvjW1?; zGAG!it2HP#H%sH6eeKWS{NeNPo4@&+Tb`82zkdDtn(N6_8nW3eq&n?neAGZ9n7=;9 zh^N>LGqZDWdEzoV9vK~h$%#pae2iC-{8PNexIqrI9z@Y)`FGLt{c!YJ!2Uzw1{cDG z^B3T2U;7%IKYt#I#p1e?RjRcO$)~t)C?ZK(?*jpxI1NQUm7Zbp7I8b#OF*n`x^37s7=h(@C9o*P8| z?0f<3amM=v(J2BV>Yt~S8ZOuG>i@tsLXb|+y+HV07@7LjjaSbfAJG|WjjEWzaalW=+JGW6}}yAlaSzI(pXI`X|E zpCER0bT~FB3QT>=czp`V|8tBhx~^C7{9{tEnHtk>2N%v?U;?PGu6iaU0dVqDT`8=3 z$$LMr4NDK)I|1+>YGG9q`4uE@Wn~2{v|L#ZfgB2X1i+y-Et$yw>BS51)|oe*dmZrv z3P8nucCna7aVU*ii+qfDNBl}px`)Vrb*rRs0nmEM8HoH^!;X6mw*xQ*y48o6LK05n zNTPUwM4+$g&P@`*a;46Wi^XN=PIoZ@WOrm4`7EJZ6+pnJhI{A$oP4UhO0`A4dwtvm z+^eO$D5||*62Q$H(=dH~nw@8JeURJHk8Q>De2WCY$ww>>?i&1q?U3&l0PFen#(g87 z;Bf#ZfIzU-ZBcz-2s$>tALFAk{_Vpa9;3dmnhO5cVSav*k*}_5nA9315>e>Q_5xWQ zMMtz_4Pj27w$`zMfcMZ7miL?~#1*(cCNdtYn!;?KD!)`IL20qX))kUMHu?CxMpYb( z1L(L_Tp%T$BaAJMA{q`scXv1Y=-k{K&e4F8;XyD|1CpJckWAqFD6rSwcnua87on%O z2NIo$e|>A_)}NYg&))**`#g%J;yt(hjU9mXoMtwuC$U5PCkUr8K|c}Y@H2QN&0ZEI z+B5dUsxx5~`xGJ5n_;700PU)L4gA;Fv4LPX44S&?^v-q;V;FV?m&zq5m&>54s=aY+ zcm8ih!V%n)=n()%2wOx5TSZ5_1D<*288~z14BWbP3$mFk9C+dY+_-)NzWvQ_L#b4P z!I8l$tE;QOH+ysT)$NkcQLEM1dK-=VM}B(;XeR&yCB?F)F+(RsG58{0Ns|CH%}y{E zL2q{&3WWkYCJ|_w#uB?J>3(eR91$PEb&HY&tC%3Zc34LMME>>b*IDIjy4Jdfq9?)$ z%BljX&XjX+JrV2~+5-bS2N?MS0|SuD=HO2G4!rsLo9vn4$A(YN+?;uNsjzhF!w^H{ zQ}4gu*qQ^h1OTd`E~5ZQ1emKg3%kFcCz< zQHT7UyLNt~TCaWu$)DOZ^TyitMM1s(L6N^T2cT1-$rg?xHDOa!dJpArOe zIUN(LVhgB(gq2yZ*I{9P0p@1skjnt1QYlt}AcR53&9lJQBpGvIwQ?Z%$#)rOI1+|f zoXC{{;_(<06ZLtDx6i)Kdi22Hz{!>B%2(!Z%}%kF*>ohsUfJ5<^9und z$F!G1sQ}ul_CUzrnggtXUAD~%c@1M36a1o#Owu(?)oh}hp!w(K=h$&BmqWtCp4m_< z%v_oVgKKE}IYxdsij^(K0QkszXS)9F*C;SR@8ry*VT_ zio~ZO*Eaycpyc_y5U}S>CKD*)1n9aBXMS`B&YU>|Z=HDy8ubR`hw~?EE434a`GQTp zy%3f^YZC&5rrK#Ag~ftL@Q;QAtRnyy&SJccaTJA+rs^O8a1qSU&$B+sML+_G$KxIW zwEAwF>8%#|k!ZwY&29nEbuJ9I0JsPoTW=o@0vwaL9iMxN8USfi`~<<3$XQ2q66_RB?p?HHQHyLNi~JoV*N zcM2;rxaOmN0dUf}p#4Jdw-kczPl)UBjzkIu`Z6ev5F`Kk^;tOmgTHmifBKoHzcD*I z`xS?L0_BXydf9TJQL8^R^4Wevp%Ak*N|uRi1Vm{|0x-;`WmA8&H@pl&@W&v^{f21` zOIX?>Ccj#(f+z){T&Y4`(Lilfupdis^ZGUD?M{Oj4CD8~2`SL}Jdqzu#2kC~LtRy& zQEk{nV?(7N(O9l3qz)|j_rco?UY2lbNoYl*ra@O{inWT~bQdVNPaWf(cg`~M&%N^w z)a!K^9v(h<`}Xax%+JkFZIocY07U$_(2R#oK3h*FlVN>T(=fh@nH6J4S+zApI$UDH_) z<|MPK_oqD2as(!X=GGh$1iX)@u<8k!p0wi-XWo1R<4t($M{hFnM@L6bRw|VfSp8FA zw9-Xk;LrJ18v(58`41VQrfS}NZBYOo%UgT*EIPxoD9JCHy2?bLsVWQFG?Bk!#|}0& z>NPv@sV+8l#9IA+BM|XQU17rYRJec1O@a-}ux|^tOE}x`2|$)Y4*7+}BK+jSPaN_I zRQW_c#*~Wtapq_S2~ZSTqHQODM}>TX$Sa>*;2sJ9EYmoP@pd#C+l!Uo$3;M`fxt!3 zXw;o|Nd)1L#45iXsOJ-bM1HwgX040J=haUnyZb)52fxQfBA87V5PeQS-;bvtowkKY zihTi8&QRRyhHV*NW94g>a5kU}!VkocVg zIYulG34eg!qCl#lTrWdo1#RE-rj`**e^$%p*|BMlmSM4D6`vzp4`7vAcpSxwr?pV@ z^z^{|(mYh_RrvAQx8RL8PQ&=cpF*`-h5r8jljYL#S8m<7H3h+@)9ALdSgxOEO_&?u z5$pMF1>gV^q$mp8FeRVBE7lKAa(kC(0aLP!?cgNFFrE&}O?y;Sg?(e;_B{0Fa3}cn9i_HZVO0ZWQy z9p$1T5fH%(b1e}>vG?!azu$SE3xLQkSIX!h)~1`{0&t&m5d_fPh*v z&z?K$kWa|(%AZ8yPoMy%oDGR~^|Sqmf?ertg5yyoA2t#I2e;yNMX&_{G_j0v3Iza> zP~=no2e=68wJLP?bUQ9U0w`5VtTGwQ%{S$)c(Q1I%toQ*038t-a=k6`FT8sJ-g^5j zPX5x-BS(L4>dMsr;gAn&Iw9_VMB$9nwGGM00duv7<^5)tYs{n zAxV_dX21a5)Uh91P%JLOwOhBLxO@j5+kX&Sk%B$H3W|mzMB*tV!Ig9zO=|gp_7TAK znpTT514W?LYtWVIgiug|-fS<-FPEW;PIva~JMh+z&cNG0{xQU3@hgM*!9RHS!n^+` zx*!P`48yS7qF~!T{oGaF4v#wdTNVJpG)>kLNB|xYY$AZQ6A>fUS&Wk)iZ6;Hr1|_5 zf+WN2>@4*6^|Juq^yuI=n@tf|n^a&R5JaLx{G4Hb-q0b|5ra%`hMiaI3cO9kpP_gQ z;+^p;{r&x~PE1U^>Yj%jgt>@|bbiephDivSOa@Y^l=Hgd08J5Cn}3k~=K|>N?sCX4EEM3!Z@ul1 zkC-1E9{fW;`J8M_O zOCkXf!{t&L@_X{^nq)S~Z#uzN1wbwk3`U^8zn7g8`QsPI;f>c`cgR2b%+vq!-S;kh zt=%jZU-LQw5ShzZu(Y`Jks<%C1wbGH*dho)tIJxO3j%vSlI{v|3Ew*nf*cnm`H*Qf zg1WANs@8FS1+Gj@gJtTV)T@wA#zBg90Cr-~Q3yJ|9<+SZ`9i?;3D`F%a(y|dR?1Ak zXMTJJPQP{<-Z^s?;&JTxgM)u~b!zHs4Yk3ln8Uyy^?TBhVH!Ai_orGS7?!}+Q(Rht zM&qMHK0*92FSkSxb`iXpBiNN>V8Vnz^Lh4;^|v@KixP~;vYa*ygS7;#dAL0{@4Vfp z*U`eW&bhSNBAcx$m&@5}Ruy>T%{N%Q`J*?XE8ayt{{-6pU#O~z9m>0Y%jGew1^6t- zXbPfSEP(P6BcC9C*a=7g)oK;9RfUaQ z1OXHZBW69|nmGA{AD;f6Lq1}D@8I6wo|&0BMdTA$#iNz;Aj=oYLGT+apgA^!D*vNO zKH)hhT|vSPmQ(0L#qO@lST;%%*inXTni5d(+(n@M4$(B<`VR+VzG$iHy$>J9}4$W00a^NwS{mvyy0_( z*=z&;mO&a3*|G{)V&8&*wTw>iBEKy(d+zkrt0;hFNTxeI7B2=vZ0zsrx7UN@f9?PI z8eBMkft?3~LBO8>GPnJ(6lP?)nz~1?hGn-Hr!6!cqFgK^`O5ug=sx3~3xGfZ*h~bB ze1cy9Xsh-E)EcMDy})|>;X{X+01}A=BmeB#v+(C%|2lh)$VV6W-xe1a z|7gR7`??effXL^2DlM0OX2>VpHvw=olmZcG)YC86>xLkzBN4)3zao+_%P!whTmf#nFzXZLwjjiA$9cY?%6ayKOSjBTJ zFBjnE&6{xN&K(xfXy-{yT|H5lpFQQ7zB%$9zb;IBC=?4&Yt$Y@x*jN`2lXKmLAhLp zWHPzoa|R|{T!#PUo4P%!yz$zR`3Sk@yo}yN3-vH<=7pxG2~)U>JrY z2sgC4#)$t}B;TEm2LdjFjj$g1wOWm;9*}%~>D5>)cBQYcf1~OCFq7?@igm<+VvYB? zzJ<=hLY8DFR9%I_^3P`Fa|9mNhsg=rwgeZ{RdvHAC5Po-dgkaee}IQW{8~8T%z5R) zyBGdpRE|2;&sxSNKvA)=SS-TimC1*do(Bf;VSSj~K$0XD>n={hs+2{0Y!irEx~lI^ zrBX-od-8xI#N%bdGcz;LXfz&HdL9_0hxu`82Yx4D zRquwr;S{y$>FGZK+X0S~2%5MuKRL6n3=dTR1QG$k5rMwF z_ro3Gt0;m~NIr>RXl`zfs{d6yX4bzI+xLU)|K|mPhrNK-N(2lM1k2dg3QfVJA-8*A z_iv>-Q%@>7+*Z}vpO~ihKHU%m0Zh|ujr1Ms|f&tds zTM##XMYHS*PbQL(>`bDD>@5jG5c@vazs6jE1i*ScI*e+lAmVpKK?FrtoVjY%8WiRW z4?7DF6vD$^fCpHShR*>+QQYvHi1%zruzNl_02l^^Js(v+9TWKk`i^0?zV-7+KFim` zUVtB_PXwI6_0G$c^4d+I2q;Jdgm5?v!C;U%f!K5y8u@pAUdbm&4|@UaKq4>$CX;8- z2zu@rP05N<5DZ;omQEmhXZEkR1R}WfZDG|Gbhi0X{Qti=I1m5;0002;e=P$W5vFQph3-DY00000NkvXXu0mjf<>)?p literal 15329 zcmV<7J08S|P)q##n1B{Py`%VO3x>60!Od#hHyc%9_-50|%M zR<^FT>aH$(=gt0+x?0!eA|~0r%Vw)KcTTcZ8zpObP1#=4>lHf^?5n#uP zWS&3z@=-`8lkme+KZIN^$Ihv$3V_#h`5fH3b<4c5{-{^rg!HH<@KM3gzz`b+S+U69 z2#ov&BH;)`o{qrGtr^H?@{f8c4*XgGn}CSt6UE0Tl^`9Dw~sQmJZc4aCmY?;!F?1cX@B6zmxO zWpi0pJBg3A0K5WPX@49-U7;;ML&OsKL>P^_vHqUzIskP)cL2@Mw&Vb^B3mLLa3OdD zA;@Rbpq5KJvPU0V0ffV0R)LNHwya4km0CA9u2d!h*2lp*2WYWlI{g_sJH&3KHXe!h z#*dZON)YSmyS}iLdkZAf`neDSodGBnOPf1@V9u2UL*JqA(Qme<7_P^tp{NYV=e<}M zTlM?fr;nuoIQfxqgb~@6%ogAdunio0?KfZhx8n!KN6bTE3jaGfarN3M9H%+)R2-W+ zK*NEEcz1*lW3(=+nOifE&*blGuf(0-{znTt`Gk7iY!SmS7`b)bJSJ<7bVcwOpis!; zW}BVrF+6M}66hJjBZA`dvGQZ3GAaJ4;jyu?|L*t~j-N#Gqx@vNrzbXk;K1>CPxmN_ zAX`(*({!GMP^;F!BY0S8RShIrVsju+H*=ENJaOK-uCsY^5qmryoKG{8XpM@jm`-qy z_*e;mh)?cGf?x4F&J&RYMrvaN+X+CHWOhI0H9<#DZXtj#68W#b^6J-ycMrF8Q53=` zir`48Qmo~d^OHz^h0YWC+ySVwTM2-^Prpe3wOWl4Psj9|BEk;8>}PAaR}p+{1P}}b zp?|O+B%#TN-TtYoh}6v-psq`dbUM$-$Jf>CRVbELp>J2;h|k~k`DdT`^dEle=}*19 zyMIt(Au8BPLg9F293_Y+60v6v9egF1%LVee{In!V%Qf93k;tVk?}_!W?{3)vG!!t- zO~5~LD?>EE-_a03Zu=sT9yM`00V023Xn_5ujiL>t{G<)#=k5a|am5$t z#NUaLy~*}Z=+5tb^*6tI;_B6_$FE(zcJlI-%O^McAkCNNPHP}RkW+AR5J<>;ow}j3 zbCIa&B)4wf+ScMe@&d4v&o_?~P8(=HPaC#P^db4*M&eIknP=+G8|*^c2nP-v7{z*h zpnqWG%~NlZ2&UWJ%LU9GfPPbv5O^%mZ?;ZbBrp-69&X**x(Ghf5kQ$wwr>YT0BsHx z&vD9B0&SS#F@Lv<0NxX^NchW#pE~dd`=8wZUs>c6bmtsaF&cQsGI(5DYB(S0^miVK zMPuYBkX_D3F#@WkQc1(A@-CSSw9`qZvw50?qLq#nvh>^#6f;*ao~B>B;G4{ z=PQ!Z_8z+%&}LDojSdb5@%aIC4y_6^H*eS^Z7_RfZg^zhKFqiZ4xJ&AKM*(yF$IuFg~9TLZJ{|)R2rEe>LU( zzdZV%9{nzoA7%S5v`i~@+F0HzxPICk_mzVw}Ba`)Hlmfx=Xt(v?IIxZ^SL|} zR}1VI$;Zr&!Ja+MwRFd#$?jP95&E53%8)ZGOR{7+83}>bL1gpa5`LQmLB}-K^}6*w z5j*hNpiKKvPfB5TeIe0tyCHDRD^Q5Y>^*{b|X2i z7dH62diCn5H~#94*U`e?A~BHz@J^=pT9%JuJkgWLqGCy^NK=}#Oqbnq@_au=9$Q5*?%G(DZIheljI zTR(R=0=WV?qX$fvAO~PBA$dUYD^M&K@jdju$5a4zn-6z|!LRrszmf+PJ8YxOXO^#F z-c#q34dbXAEH_7joxy)KkQg{=NMgKLDB-<2E5V~fG#a&vHcId`1*PF{!9F>+XEq{+ z!yO4;uLRjf_s1e(*flT!p>U-A>ukS!x_f%Z4~!j8r;cZP%My3 zh%&}pweE<-y4F07G`?Ld71{XM37~(lA9{LwtYfzTHp+Yx*bTaAgESg~eyqQ*|2sXg zp05`$f6J9R)G9U5k$itZ!Fy_u%jIBXc%-EO4E$}F&9Y?yu#H6#$UX%+d|p^9tI&a+ zw{JKJzK)>deyQU-pV#v%5WJWAKR@Iy!yN5*Z*a#rd8DL#cqaAJm_`E)5b?u65k~*Kt>-T@7w>$Pfgo2?X zL_R^SXy8Rsi2N!FfgFH?M4-sdP$mI5HpwLbksP8?Bu3pP9!_9)G{TBOXu5;D1L;Y< zg#ZZgcux$4a9k~_L5#0kWwpFyUe+1;)C5#a+<1-zKqJkUI{+5|VQhE|Iy*Zby#Oem zx8z&#==zvft0);{j7otEQ&;@>fN3*D#{eG)7 z!-|7{g>Ld?5*6EkY6X0<56ZQg4%7`wN*uH?*>t#Zq^Mpqx03tsW z3f)0iubV%f{7FQwI88n69ksvuZ1j!+@5_^(6x~`qD)a|@u zWMt%bPyj!>apT6%=va{yc3xFg7Ow;%n-gDiIp9MV08J|1hn;Wh#wvELD0#7D0KMwC zUzTY*$~bY=bPGv@fIrBtl~z~RyZNnM(qPov#=A<`9Mn^IHFg(s5(@Z$5IhTXe& zvtz-%;hQAJHlbeK-n)YIt^f)u&We7AL&2A^l30*m zDLC#Q85@HaKlh?VzMTl|VQ<7X;l;)Ygu@QHy64 zqw%)aTRFgXfCBiI;Pw7Kbv+?x6Tq=oUPS@ygK($vz^r>K5bweEiF}#L?{9n0GtWMI zf<_dQm)j{ z`fZ(!7L4bI@zv8R+4c{EClt{imOQfss#8Wasxq*L*gO05IAfinIpz^M+wv z6Fh?Z=}q77Q~Yhor@hk~5tP9FMJG6da(Q}nwXjkwuKtQG$KwG_(=eGtjL{lMlDS@= z&&T+9-~yn`-!-rsf?ZKYzSo13@fcPanA2Ll#sokPAQ&3sfJ#CE5cvTG1yDc%;B})~ zgXO{+ZWC>$07{2=Ob7j6L}HPDBuIi+^onM%VeQ|)AD;X4v+(3oPqTSYc|{2~qgmF+ zJgv#E;r>!8^I9ub&{8$H^xh>1M|waI@#}_Jb-fNUuCeiXRtBztgiOLP+}~GhhBYL(sf8BLluhwDWmmk3Y{eS%jNH3<&QtR3pbLn)WUGn%Q4iHP6*+&d8+w?1{(W!1(yf-97QcM!mk6UP@0} zHwfks2}Qu~^FLStknKl%oCHXX2@p|Kb=*OR1K75_A%MLofM-zvH@N`P%lQ!`|36}V zCm0HZ?C&2xFb<#l%;(^x7hh_8&}I4eA%K~i)9^Qc{r|z~(?4Oy>GUGJd+7@F_4QgJ z*hvA<`VF*r5&%_xIS(aVKcRrf75pu^7Nm2A5h#S@_!CbYNvG3*B3Q;#%eKo<*Xj>W z0PQkg$K2w%RL3sXbR8F|w{n1x*X#XyPfyRkLE^uKR`y$T5(UtW4)7f$|9GH7!38%d z8pFJQ>cCTQ;E4mx5AKivi2Tz({SjQ9_?6>23Hb8+S72cwWo~+`+sfJd6#zRz0m!n< zip0N$wTk3darEIi56+P6oy6i6fH}c>YfRHYR1hg8*NEjg(yk5AIc|xQh1&*)h2RVg$4Q+wpk(1isO{zfwjE^h2=2 ztIpn@Rrve-K|dSE(DJGF?;A!{+jQ-5YTUEocB8;*s^eHKs&Mtgt8nf5HCCOGuHL6VolXt-*$K0aE4H+QpH$MQ4A`0Wd-BW`F^j*YsDb@o^64XH)iIi zCnx^(l@G3*wD^D>#%7scM}lkW8h8Zr(;gITty)Ee`x@)jk0J5ji9{k_r{iK_70Fle z9d&lS!|#(;R#ut|_IVlcul~cYKzDZ!_;5)A{u!KFkFz5-+kag*zr%6m$`yFy`)@!d zn^|`+kv^DA!rrlc5W&vRWwUVltsg^bVZjoCBJErxm<{7~9IsXCxUU`%8xA0%;O&lJ ze>xV8ggOHLOKj(*`7ynvZ+eb3sq`xn6f^TwO-v!DNM%lnA@2v$#T zpLLD|kXc-U#Z-!kfDjCHplCaGOaK^=xNj1=A@6)0Dpid|sVs>svuLkL1XS+z?;YL) zhn_xkq_?;C6dq1X_sq5nR_42a+1>KDX%00|>&$Y8F*3dt2!?(afBT7e0*xI?&{}M% zkhh*C@<031XCXPVzvX-=25?*MX)RZ;U59JeCgIwLlP#}v@~P`NZcbi@JPLs0%KMku zD0@9HhJUeWY^S!`0_}^8oR?ILg}M%Tj4ONO*rR~Z9gSGOKltDSHhS)N65((db0`34 z+bus@)i)+VG~i&oum68R@?R{i7C^%c<^u3~y&$@Y%*Wb zbwfjd7G`eE!0FSc+1Ltwef<#WM)G@1@>SgQo6|^s&Lm%v6bRGxZjyDNX_}7jSpY=-z)%tuzy4Y}oo1s$2(8hJ#X28Fz)CIZjCew^ShO5~ z$R8OQd0^zf`TaLx^7 zfzBX1kxtD+EM{6~6>W`!$Uk=c*p6>nRjabDC*rAE!9jilL~K4|>-q-yk!UxIDEmEu zF0Dbm9Xq}bH^`BB5jgqRKD-8^AksWe;AwJzliLd?POmF7?w$D8;eJvJKmoBSPTWyivsC2@9FReOiZ_? zZ&=@Z^&h+nul?3*=KPTWP1hI^CN$>+@vwPqJ>2aiy7r^Lx8HGm_T95^{ln|vKRJ+Sd!1fx2e)#+&kyBF86u$wgh#?~`Tfh*1lnP2bPUGE z#$expL+~I#6(I;ctKX zx7Iln=8qLc`5(cwf2yqsU@PRea)1`(`>|d^;$J87=|s6+W*4{!i2PSyc@-W6QmGXD z^zVMkI=>YHfgtn`B%wQMl1i|X&(V&2Dh?ul-xKQvEH)y*v2Ts0q5ZO7ujw`XE#RnQ zbO?M?&AE049q%CWBj`pHv7G#i?_H!zH?aGEjO70b{l;3eKj+zO)B5`Q*vtJL#2sdS z)snrk0xFtnwYUn2z669jn@ZL_+ap$T*!4Y_<(T#EyicWUdC!OsK|Iln!P#r3-A_!I0!}8A@X9~>3hdjz zpB>At`B!V}zdbQ=m5t-$2XOzK*9*(d$cf|Jln%vlJ<;!s?5iV@m;$<%hbcB4FrcD6f?*5olVi?F7gHYIR`b6KF&SIEEYZ`fLCA zwb7lUbZbbXbruImpi~Wgv&d+sP;58Tma<^3$mWn4P}Gj){C+BgRAD zmghG&zhIG1piyweX1WnQeDwOgkmxnLo{t0~|IFW?agdKABcHn84RQby!8!qKmiOcU z?Z6$Nfk<*N@y(Y$|I$Cf&VMB2PyA{EPXFw5%j-mbBou*QJZ6zkd0)upwoHCHm14)Q zeeE^CHEwHuME->fmo4%+CMRz=j=Q@;4l#&|xxddGe8xJ@$){4nii3OtS-)EZM7|&h zP633&VV1#O59T^5kum}rcCS?$*)M617s>bs_2#jtD3p35<4^AYHmfHNpbIo}YrC1g z8LBQrLdSs*e)$2bD-&1NKY(+M^~PCs_ckq`I^RuxI2MCYBmx72114#AX7Phnn7Gn> z?^piwufUT}JPCb`&Udd*Fl=+hXYX6;mySoTQjOZ36sfnCsHk3+?o`Ip|i1c#qJ z3=4TPe$Ksp4o?5*G|b$Xp~I>Dqx=70Zhr2}YSARTx>m(Ks#>H|=M!ioekD8k$vsJv z^cE1gH8~v$-@5MBV@Uk}^xAKIm36(H{D*-J$%ppj&wM!PxR1z>U?uvSE|LN=AQ z?m2kyARK=BFeDO*EzNChZOuWx9YlU&SAs=IwW79sKDV569ACP4$s#{FoSecsk;~;+ z=Lb83?4H&7DieV0l^xHL7zmP`{8k`A=(^rK(NMVP$|}Tga&PiWM_zpXza1Yx@X#%v zaDDRHhUAAMu`Q9G92-OOo0iYXx8t|J{@ZZq;2~_#?F-yZK7q)mB8QSOo=5~V+R4x7 z@}M*ln8?3;@v?(_;F*uz&jmoP(+cDOBm&V*KIH-x!7vO~k|Z(0*)>UE=lDGh`zP{$ z_vmjN{eyi^jK%FAk_1P}fU(07pf$Al<`3S0bH8{SZqMFsc^{F#cVr)gqFvUx>sKZq zJ%876pPT&D!d*r_)oNh{o_YEi_~IA7$jE2wlQv$T{gC!7(BX$zENY3MuGby+2LmQ? zB7d*YB%i7?pfI5j`Iq0j410MbF<50 zJ?IW`wEcLK{DnJnpp|Pdf6MItgNF{oXJ7m*?0;gvb&tM@pzYTspNtkCh9lk2La9=Q z8GP@xUtTtacIOr=?b%Pmz~Df0{-^`3Qi8&AnzR6sPy~MP#t#_L<4=yC$}VQVna-x~ z(7mNqyl<@l#ZnQ9E5+s>^Eu$VbU}w|y~@O(G4Q1cfplzlS5`76c^869j#W!x;02TLlY;?>%U&t(FAT__x=qNMulVf8{ zAWDPJ+qZAS?Cn`tU0F5nQxwzo#}7cbQ`vInyCJw0-QfTFCdRcm;x9Y>c<*@R4NY>S1vKv8b5gWRAzbMo6|R^@2Dje)HM}+9X=?kP1~1z5>!h~ z2jD#Fb=~|nmMqAS%jDqJty>@k0s)o=FNmO#&l zTexpzc!bsTjcK?xHRHH;{aSN_IXL+ooP0Z|^AA1!j3tnr#G5~O6DFr7*>579Ky##$ zm3bH%G|4BN{>cy7NaV+R6DLprcj#CNn4&D#%4}4;3ixF|WDD61zn#nHSm#p_*z$;c z62T@oHas?V0?9wV5%~lnUTgf_uL!mS5`pG16KQgCl5H|6or85)+>8beJNY!e^wLo{ zM4gZ1?=;A=fBy5ITjbm4MK$@Md7ip|c6JWVymNsa6ZtrtNG~o-(=l~_I38x#jFJIr zO=aYlt7Q;n-20lg?%Rdc0;|>4RmXWN0?7VNqFVOcu`j*y>gyw8`$iLeeOp>AC!Ui| z0^o77Z6R=1GB&?;-`GB8uWs;7wv&Go@5^S=>^G4=w0r1*l0Wg`#5(f3d%7LR^nF4* z@~c&qb$>pcXAxj{%}vRba!d$h?{2groujE0&Kk9V0El9p!^h337 zx_3Yd;QDmO9ICZyTk@?4XoHdQg9pF;;tMaF7}-10_9jlWhD2)y67Ojqn>z-UC>lT5 zq8~J9Q^)Wx7z)Dl&1uIqPJU`(9uy@E2a))1eEl_cPL|{ypUa!yf0L2#Mj#MiMd)rg z6Oo_IrWyI&vG@r*m7()Qez+?P>PnMb%6*D%E`U~Z=ULwl?F4WP$$x$P;Gxlt$aljc z-zEer3SfOMkq~r!$M@R;iGVhk)<7blvXf7+lfPBWU|bNA7#SR;H8V;ngE?-`-i9mh zUujFeESrRJ^3R?-iw;V`r9P-lo8N1_oZ*8wIcCQwA7saQOIYIc75FLAC-^6SmH zkZAJtrlk|{dV>(^{8Fg|OPMA1-L1lt+>>;i2zU3r_}bTA`#(?w?1JJFfZMVKqx}YI zng%tawE%MYLW3_I`nvm^1bSMNaW4X~3zkHn%g&s13qWWifQhSDv97`F%~?i1Mml`b-g&N@eVDli+lE4(8@(tsEu+L;?}WE$0~dR3E%QL6?a9li76oWUiEfYOM;j zS`EBjuR{QAIYx6qA~p~G5%K1?OI8$Z6;g|HFHih(f{~9R*!&F}k<~yhZ+3yX5ndcu z8ygaYM7(?BcN^PU&xW85Qt#n8PCk`dT>l16z8mrQ0De<~n=?0?d$HVfgiG&U0?{j5 zg>t2&_BA4_Q+%td<)8gHnbkEL&9b?^pFPOP8Lqi71KQZ~M ziMQO>+c|(6jQD#bpCIi??xFD*)(Ir-c(qi3SUd)|XRhOmvrt~i!E?_(XFZ^Fx(IVk z(4Lu${EVG^^Z9TH$sZapPYBNE^;WaA*|cC6hZ{zV=UwlYH@a*S+QQ-jtFvd%!{p?R zbuAO`iNpB#I0z{8YNcvj4s?aA-_-5-Y!1}23W?r?xhFTxhQK(ON+y#hW@cti8*=l* zk}g@9&gLVwCy$6PtQNMF`EE#wU2I~X2GUjpFa)#nmGCJN(cQ=&)`mt7W*ma2GDVcaa^3Lt*HN_cY(o@LZZqdN~bqb92@u zTr4O)1^RaNL83nae!m|iL2}N(vppU?n_M@x`G9AG4+cAfNNkg#EZR8{Mr$Pk;_*1M zYN64UG}_50!H*^PTIBcj_ALz#4E`~8{zOo)%k3$)FaCsF+r4(TU;#)WMy>)d|n@{=2sz;&oJAGL?WjB;4O8% z4vUM6Z1*LP1d6P%3I>7@h{PZg>;eU!C-QZ?-|#fcO@N1&#~h6o1l!AFJz$pOdHRO2 zO+oP&2c>h$mGyKPQ=I{KkNT8wXCega4gP|MvjA)Md9>X?i(GYPe&A)6u%S5nK z5Tns3DQgYw=0mI>t2OP^QYHhHN+pUF3;28_5Ga*R#gQ9uBoYbM0R(an0yzpH7z{!v z7=l<=7b;t966o1tgL<~;2%B{HJv&O{LR~Z0LxQLLzBx0CPGFKiZt3xu4pGFeTtET% zd=d-{4nPP+asJ$SxOwX)^!N2o;a;4)Hg%0U-y)wN;PdukbG8XUXk-L+e7=xpj=Yl) zi6r_U6{$}HVHwZARjF1_Q3VyH50Cef0BZFbBOD{cdI8xMkXt;$`UQ=wL-6;9QXa61{Qg?K9(%$e*8^rx=;)iS;n@w@L~Z z05&9Z1{OJGvvwNX0ocdb2v+8i5T;Q8r(~}jiG(7bA}25!TgpXHS*rj>2m4I|&}teZ zo&?ZxaqR@)ak25R9iYv7DBcK|+i>~)%P>E`XkFVkwvWYNXJ>$sPeu20^7{w+mwF;S zf4m*??E+w#zgB)=ew`ZZMR-vSpARG;|ji8cb$;{J6(d(_8Hri~yXMH5wpRpe^hVA8XzJmnP zvfQ6-9O$msc?Ah1EE05gPd9i_;HlX;%w_}jjShoat3Xdr6ncBRP4ds5heDwMJ-z4z z9{A^X=I;DCT7GRiq!16hvbpSz+x~_QU{@eT0xcZR=kV|^v6cgYz*wzXi;*p%GeCAZ z3)45ItrxBoR@m6x-OWad3%DwXfe&(41j$zQw|VoDe(`Fx(m%!9-_2e1o(peTxU z9&r(C3Po@P$&ax}XxzJ;qr?D+qYY-WS@xSmu%Q4p!Un|AoH{!@*=Xjl(G-EFO{8q` z`^E;-AOY+d-UCOTKVk{s3&)PKYj6C&Kg1|3!u}^mPtDEFeLa)T{GW{&y(bX))MO7D z8#(|Td%a%f1cb&t)b3NVEXQyhr3m045fBlv?wBP4zzFRObvk#{*a8`C1VE%y`Tc&V z*Xv9G8paiyFNr|de%IS!Y%&duM8|OfJN0jW`ZoLB-{1Gw6}9|(NdEMuAJSUH7Zzpx z!y=!sp#u>4b_cLI!E{xt{?zaD?+JDW50ooqC|AoYF4Bu>?1WWDhK6}rL-E|1U%*UE zU`Apj2)6DN+RVzn>w5F2;z#0xevlOz43EK{FBMC;Z>9sVHP8nf@@jD``a5MtJV1VsOI-Q18ItA}vx&$@M=;ZL=DRph__fmJ}XV^p< zj-;{KwcuJXOAtKfJ_siH>0BCWmD)oge^Upb&L>j&dHX%0AQo{T=|36h2#iu3&;leu zVgle;T*^Wsk${DT1vW}<(l^U&qe;Hfp&&6bn-`xm3Ba;{cDqx|E#Yb5Mu>Da4R=#_ zK~+_Vgd^;nB>C7F4u>ET2{G3>`_5T7d-g1xJ9`ewYe@cR@>FTHbRwNfPg|Qu1Br4I z0))n7DD%@x>DGdMR1Ux`w}k^>cc8WnqllY-o{mujQ4~SU(9LJL2*S~BNG+r+5p)Iu z;8%R>2{GDdHYeZT;djoVApmPJ*rntE4gs`!r)Ryu$a3?mc}6gYU-2^maPo7x0=#?S zyhT1?Fge&HpA&C=XKMnm$bSUb&;jU}Vt_i%?EseLdW2;>d<$y|MR258EXMfDNd%c} zo{`T*P+BdcsC?~3;M^ThdCy+Vo7e4OKXpee1aJ1j4;~~ zJtEsI%2qA_+Vpk~P}Qnz!)^9Un~(~22A{?lh^Zx&y|;*VS}5eOvs75lq#zuLLMpWg z{>~5-*Hq}l&UTQaHG`7K4}=1i0Ntoos?35lLu<}OFk^t{yyXTSQ&0{@1ZT-U87gW8 z26qiYG#rKAo?cLK4Rx${-@U-dzxeLEu(q}aqobpz?%uuodnoLgjd*rn5OE?xqaHQ+ zrT{__=Y(wnppEzWd=~L`2Vi#VaoRCnyNW+gp>ReeNg7qlDv+U;akNOo-#zg-ETz+I zbO?Z;o0i|%)d|6_U|aGD^;(??fC%S~MDt%qf<5Bwms`XG-;a1t-24XC*)wlroq==j zoMGhe-@pGgwq>>k|jnY z?-+^!-i3At;2pqu~PLdI3a&5s1ZN7Woq&PQclB&ROI?|CtxxxH~`p zPpR`Q@?8v*04&F$dAZi`IM}{3l8AT|K}jt^saAq|wazw8*L7z9yffVnP}Qo|=F@pA zCYsK$jKAM9>iUGw>pg-Wi6LWX(GK9N&AQJCknafMU zf=1z2AitJ}@+#WC?%Y~NI{PPB-7V;ib2brFQ2=D?9u$Xx&vZyWkZ>YYJv}{;%A}yU zR)k+%_yxTE_S-OV<(E(_7GYpu;8Z@h{7>)PzB3KphST7SnCNVOjyci3JZ72SQUDfo z(*;UvCF@iu6l(n-b(d!y=}k9ihyyW=HHBS$M3SUfu~dX=rOL!rSSi3##@vv;-UKWz zE@1ZuARG=`-;r$JELX}uZYK@)K%#Lpdd&4|Vw%=X=HgF-RstS>CWZm_RNVf~a zCW2EKC!>L2V05*xYKed{d2unt?k5q{YIWGXXSekoE&w8*+{36FTUrnh%M>3S{*I^zJh9wz4ksZpTVKiLLDMRj?=|rI zypUhcKwU>e*Xqs*d2FMnk;fj}`NlC50shl8&6<~rghV4<;PXn*+t&-J(ykoEjJyIC<^bwUhQ&T4J`5&d=G4)=9+EUgcNv zkDA|2A#V2p%3+5H1ZUUVNw*7we)D@8n8un41OhK3`61dY5`ZL0kXlGJCx~v*74C9Q zV!I*`nr_tH-EEPdUQEL;&Yic&M=TDH4u988J~YT?;VfARhYm;bcY>-hZJ34nx3_hgnb9~tuRSpWpJqJmmQ5riX-u5U-WTL2`K z#_wsg=8Ha`Z#2*m7_C;SP%f9jC;MPAwFuXzuEWa83d`T#-d>RK4|FigXy&~I!!}aM z7$JhhD$zd(#fEs#{^Bg0{`qNm_v{4-1~K!8hrfGcdiqbx)v`mR8vaq<^QaTp2b-uG zB4~yHb(~K&lfk)vbjT-&_wz7qBy$230Y|$y;3D9q8Jhk4GIr>B?9fq+gwa~H#<~by zf!%xe?p^Esy9al#U%^JU+;EgcBEiNwiuUa@Z?ih{&KZaXqgLiut5pz0C&7lzW>^Hc zTt{mNBA-oz`Vk}lz6C%a0i;qXP!t9Hir+!HJr3wMw@QAUeiIs^SjPGu2?0fL1Vs?D zM*Cea#7QzPJe7v4GEW@(DjX{S%9P#Nxi;eczp%n`7i#9d8pVy;qb(Mm{TO zjE$ns|EQ9`BLd*a=kt~bxV^WE04@k?lXdevO8U^Y7_^3&8Lgj$9X{hM4Ob zo2#Lj^QO6Cbm3ewA6fEuQ~-p0F^@zl;PrK|&d@O%Ww99nc6XpnWE+edNj7Uag~mE? z8qeQGvLkqIWTmhI^?DtAvJdXwxeIDVg>t0~Yn3(V=^n&uU>2H;U-2?AQSI8b3o@A$ zsB1;|i$DM0;m1GxAbQ1*Id#-{{S0{NdBMwZ+`}tFI{HGUauE0^Z$_Bz9K1% zOk1coodk>K$wbN>tKks&Y#zy1A0c%+gPj#X16Ax$E&{s%Xv4jd*CLx7fWSpzkA_CZ zuHxnMSfdyTOa#=41TKPF&9rVV0ulfxe{Oyb-v8iz_~GCDkR2a><}ehC#n*4%y!nUR z@*U)Jc$!7-#05a&q5D5BbP6rm4~n8#IZtHUiKeoPp+P+RO>uy~iRtfQ zoktNIDHe(`{tXgASzWWfNg^NtghC-k{)Gz{;4l8-FW5CAA6?*oURqjuogQsFal?Js zoFm0hZaMd{A)oNT1i+Ec=Rx!;Aj*F19spT1$+cU*)%Ez>?gm^41nk&p6wpFXyyq}F zL5$phpb1{6)@tzK_3Kbv$$~EEFm-bZF1&XEe)N+cp$IdO7)+j;pTB!Dn_2pg7*o@B zi)Wo~hsRlhj`L{zWtX#1{)lJ38xLFngw;YGd_Dzy=mz#k;NU_a5c&3Ku;M~w=dM=N z%2Xs8iOI4&S}K;ni|_303|Q})yL$&_XJ=t$WrbBoN7t!ZwQ?ezntux~FIyen7DY%Y#K`C(!&ld zt?NM)f+#gx8U=7;@$SNZQ7W!ZTPJyUH@aUCn{h+mrHrTf@KV=Q$m85Uj^q;_ng9sZ ziV7-i8Pwd%a$75+sSdrtw`-pI`ZWa%3;4*rAnbg^8dcqN!WAZvDOpo@EK+gOwy< z6!|u+Xf%qE(g~GH1@6q=dDQ$oa7d5p!$=Om9)L)vGZKh&?haePNvs#JzSuuB#7=Za zLa?x~01K&wQ+<7X(`r$*Zr;XwA)C!Us;zmbcw_<~FcA!*2)ddgppK^^c)i}uUa>qs zJNqZl5Wv9DZctZq>_RG)I>p}M@osBQ$rtP7*9*=rE z9vU7S0TALnaR~SVj&oZS0AY_HdqEd!#OkadctI4&{>?}s0m!n<1Xk6mAbLa)1rgM` zYQ3veEI~Sze$?CWQ1Qqkz>d;d31mqI*(+P;bdRy&GlF4uG?JgkA@32z6$3llXmqz> zXw25BJRT3!HPd47jKc*!iR2R=D*+HnWv2+XDgY$DaRPs1cT-^uFw%WK9~;RDBtc^2 zlLKfZ4*dJ1l23T-1VFHhfC#pifr6mi;$=ukp@`?O437>TN(|j#00w%bOl}iWM{q`kF@{@>qOw>9|TEY zWVdnvI`6)p1n@YK|Nj>U2Lb>9002P#uVr8ZwZO1|A4Cqo00000NkvXXu0mjfaww8+ diff --git a/www/img/stationpedia/StructureElevatorShaftIndustrial.png b/www/img/stationpedia/StructureElevatorShaftIndustrial.png index 87ca40e4439d265495f00a9cbbff387022765ff6..478336e80a952e7ecf40cbeacf3663b105212f6e 100644 GIT binary patch literal 3811 zcmV<94jl1`P)EC`b9i|x-(++GBgb^TB0)~U(>^JDb zHCCDauMk2t)BD&ZdnEu#y-`=RAd4Sg;R-lhXCZEJXZGQ^rng*(y%K;|^D?(zvOWXM zO9Up~S9#VE0%*_PV>KVscxX6ES@uc*{-F=*wYsi(Q?$=vB`X*%1(JxDbn-(AE*4co z6eCDu$8?x7?3Dl{j594e=)k7P7N^&C$}B%m6u|fW=equ#ot+tt&oX-@fVy7?7-C)X z)0I8b3}Dyg-3WUl0C6ivPu&b4gwxD3jxqK;iXv@4!!R@uoz?7*03P_G-6&^(aRlVy zKO4O*-|}?QCM0R{>SB2Df?%TMCySWrQ0=DxridG=W)P1bnB*6Z?%~_W-Uy)npkBmW z-u}}YM@%vUIUxTkn${xp1GTOMxTYQ01b*EwWG`-i^Tq+G=^bv5(q{ltA+si7v04d8 zK+@nGegWaM1T5K4N`w>vPk0<9(U~kW80Rb*3)9gd6_c2bSeDWYKvE z!>LH&ujESt`fa#=GJ` zQ(a$UCpHqJn<%{iynCL~j$pcQ*g^oX0zb*S7GvxzNfV_)&OR{HA-a)L3qaOm&s!3} znoGt(Car%h1mLe6%d;gQNs{NmWk3lgxqWoS-;|4s3)3OHLa7A+A-pPpH9Nv?rhb1W zj<~9_rpn=$fl>>AR6RhcQbq<8%*Tri^5?3zbpFox!DD`PJwpCNv`eM+;`w^?l9~?L z6-q4tzuo}kQ0+#-6i#28lXj~qwE!dqZdFs1k5d(cFbv-Skr>bc%5OB$TR-TV3D6o! zEr9w1kpUD-@uFmww&}V8cu^0IXmoyGcS`dHC}7uPgz3NcjXHJZ?N_ z%)jHIlDRlqgfV_P{dOHU)1SD>wRT|`{&y5bzpA=xyO_!+070WM7XT(|82}{UQwZTV zruSeAr4+y-j51}LYPGtukH^>FSkLp?Mf_~FTRVB8G7~?NZ@53fal>s1xMFsFD(eAJ6ydeX$ec#tA0VF1% z_pZ0I7^zY!0g$RUdRD8|+%`O&A1XxfvvlcF zOH`YpR062oudCgD$vgvmBUkmYsuwYTDjG^xbl!ARJ2Q}JQpSD(OgxmgU!s!%vWK58^*UJrI7{6rxDfxf z>w^hbA0>fxH`mUm?l066MU-?4a zhf77CB@2SOrd)?%cos#`3tj(*bZ8=Mxv^dV%P^*t0S+KWPfhwuKTwm)uf=)+_`aX{ z#u%%Z-xs(4>&!1Q87$uP7AOv zdI5OY10Y`bVckKcnXkWyn(vQn(yL=Q=O9V1wVUCJEUxQ&k|cnq+(g)NW3>Q|j*b9? zP}^RVi@%A(Upavkz#1-tAb763KBac2e~D|_ft#ou)rtt<6VaZ`zVuW4yCQqYAu^*_ zodIgK+SMP|93*sSf_Wmu^W=){LaNVkIDOyuwKKrk+1aQJ*o@Tz5W!c^0P`JvA>JGA zQj$x+_&|6xKKwN)@IW-C8_{7r+-<-#uvP$#2aVBF)N$P%HH-Sd80&}|tW?O$aOjIz zD}X7zUQcUBp68w3Bpx2;s?9%$7U=pO1i|(LR1j+g&}fV^fH+8<9W}+_7tR1;j(6e_ ztJshVnZ3Uhf3{z31_){RUx2GE3lHGzol?4s zh!w&<0Zcgg%?Wt(e{TS}N0e<*1p!>ag?)(PNb&v);ST$|3eiTeRsaQgCfaGiIbQgO z{y(c4k$5cFUeGfggIriE0GR;_(3JmV`G5}0bU+Nj<>lqt30TZtj52^`2?&Bal@aD}MaB^}2F8gXXNgNp@2gI!&Q~^d9@N~@yI!oW_WS$R^q^s(Fe>koC z&`W3(=pfu zRtn(c(aBcl7pZ;i7*WHuGQcqATlIa@SSJ8N2!IfR^Yio3H+PVleFc0h(svbOJpRFP zGyOEqHBB24q?G|kg@E3>9su#KBd3RT0$7F|s0jeM;ITOT->&NC5z94?M?5WmX-sz* zo#I$2faBxiBIb{auFqoD8PI`V1`ru6=mpyf&Bn1(0Mqm@LFAr_Df9?_JWKzY;0kWz zL%lg<2DlSI0es&V$2k9{A1+kP530ESDd&9ti<2F|;&5f(1Rm0`t?PdjM>~vGajX+S z?S5_4G|^!chzo(f^`T=RUV>p=f~f2;A?G}Z~g0y-Y?w2iysuS{4a0EE!!xp<3s z!d2}5Si4ty2qC<-KS`7M$Mxx7lnB-t&_PFc4|f@$AP6GB+5FJCli!x}=qW~&U>DDR zBaqDA*#{;>F!@NYp95F$&#($}uem6;FbqM&BC`Qh#5w^Kq!IQ*7=m#0fesKDI>XUB zAp}rL*V#v6OiN|K8>X;z?}drMrMKJ z<{^EAP)l{rDd%s`L6RhbVO!8!q$Lf&K@qyWmy zod5*l26qN@pj840At2}lrnjKYod5*5g4_5IYuU;Sa3_EbvRKnq;hZ1on1wWK>#iBa z(GH@rJzUccSi*O@hW+<_)4mtNx(rYRgpiI|$0MHhnqBc%W~>qbAq4oouWSAX(LPo+ zVlnFs=%Ay!=v@ZbG)^H)ys8sIIC>^&_IF&tKf@}_y~uPPNf?G8Vv(UhZ3g=Uuv;QZ zX-maGjL&>?&Q0&35Uyzl3?uV*OV?OtfU*nVwr7AoLP$vfgpk?$`P*}lB#G%g6k^{5 zkgglBnDRtA|AEF!IeiU_0^o7EZ@*;U1fYaC%+~~vP{l?FX7+v&T$tWMVQ#emLS+jpCYiz#y+h`(D?$AM{Q8zY*-p0KywOR4U1U^YINv2%Tb#>%hrvN<|3> zbX|S*{uQ7=%~u<-O8{V$mbL7nC;~zN*Y>&Y)kMc)))~-2M|B;}xZwzG7V8ACEg;O+ zZd}1_e2BH@YrSZh-qJ?6H3C>Bq+v(L&LbY^zU!KHe`8oBfU5XQ9W@&#oxh9Xk&=97 zZPC8f@sY+@lD+M5KaA!aVS|xxG0)k#(dJ7xlRtf-D za2p?DEnArZ?gX$Un8N^0v938J037n=AFqz%Ar0HQi$rl`EI!-7HSNHrKnSS}|4w(E z{`^ zZQ~R(him$A1^*1IF#miD*&_@?5V6Q$a5j&90@yAQrL?7DAjW6DIp?PLuu)vo4(u42 zzgxP-G6U?J0B&0b=p%%b1V9Lxy`R552T78c-or+*P5?YDW)Ge0x9hsII?fpT_rYL5 zRpw)y&3#Mu>-I~m6TmjX82>0*sA5Coxn6#G{fp@>Y@B@(Kxf?mQNw>#ofIC7vq%4Z z-}L^r!afP0xu*Y@D2kK?5Yo`}zP5@r0`Lw!Kq&<@Q7X{@B;&`ud-qO7dIum~>UU;u z1K;ld+&N9|Mm@Q1TZ7jGZVL4*7%kEj4_ZTiTcEo2nD^sbY!-IeF7+e zJY?Wzf5VlTD83b~W7n{~ ZU;|)v!D{whSzG`B002ovPDHLkV1g&e28#dy literal 5260 zcmV;76m#o|P)CuCmNCzFqvn<vz$mIl58j(>FsA(+AIr~ z1$bdbF^BuCJp1P zOg5Y^0$hoKrNt#AAF5?3M27&jn6O0Xn9t$i;f7U1lklyT*SN!E!?_{=6{0}7TtW0Q zQ$Qw`Ox|Kh_~=_!uiPRG%ZEbUoPAh3EUDf8`n#I*o~WR$&IE(l^L{VR6#>$7=~3J> zv8lv@UZ4o8Q6~dS(;&!LsYEIiUUtj%W_`%Cb^;U+_Hc*EhI2!J5icLa;_b_KftL?I z|H7=)t0l+5LDo)yfBogJu*7E&E(p*8B*5nl zoErj|Xlh8q>rKOCDEI|oG+KTAM5_TpY{(if%dg zHw5S^fTF61p7847<-^zMHU$8wU?~6~hO9?YxI^QJb3uS!`9~!H1urN$<9zu{z7yJpl$U;GATYxerYu{>&^=Vf@V?L6TyG| z$2Yjcb-oC|vMkK26`;IRjCwdoBl$Czz;tRhajRRW2-4P10gF(os=fnqeXF-$ZpzO4 z>xr;jsQ|U9;0~D$6Hfpgi%W~6xX&jNiTOdDBxw->5`$`A$6ni}r#IO1Fo zU}!PbUTCzgGcRmaTmG*AFWw`>Xe)h~Izn`wIe$6X8(UurFS|Fx%9Y>e`>@ z`S?xx=E9(Uy65tB)Q)O}N~I#B?2!)9xWnX#i6(%K#p{b8b|vO|e6Iosg7B9t&0cZq zTdUWqs064KEWyZc=CQ`=Buq2`^xR!66^*Y86a|0;_=_MD44u?RL;3HAL4drB;5lzEGJP%mxzn(dF8c8BP*fBJX*sDV z;SJQeBS2@z_wL;THn0fH*lKuvyhq&>$@$)av!UO112H>*aD8 zbMTI1@(9p}@_yONi8GJ@8Kb19dacLmMMAGY6@ZuDusk=VLIISjC8XsN@q}Uj{HH(T z4%PW2fJbCH3eX1GX9wWn=U?Pyj|$*d0+6^j;01>CkATEf&*h&0im+t=ykqhdpb0>7 zCJBU?01EpBzy?@U|4WbnOJ<$0zk&W2(Vczg)z13v&aTA8Ii%&-V0#8dR*b#-4UKKDRO6ahk^5R~wwXMg@OuM^(-- zJp1k$kef2j(47wgWHK2rpP5JUk>4q{DI72VJ;X#2Ku128_j_B1jsC83`s>nR{@e&Q=jQm^j^LWz1}6k zAi&E9#Zs|dX(Dc#z!|aOm>2@w$lL(AjT{I^!$^KCXykrY@nbtLJWtrZ)25 zca#T_0BnQ>wOS2N&|F|*2$0ES33+ zr1eYX68ObezrYr^VVD>K=omo(GM_y7Bx5$}S)fPthou00Y20T&Eldmn^w+P$qXOv8 zZ3WOe9bG&0?g7}@-P!1t8}AxO>#we_Vu+S|_?`gzh2Ok=8%k+AkIGdM&7Wn7+1c4I zx^)$_Z2c4<`s#KxnxG=RlFZC6x6o365D@@q;)~xf_?`e=eE89A!`2T=NPbFP(Q|ml zX$(bBCwFwXQ4kB8-KIMHp`db5IrCVdU}6Zc`d!wrF(HcN$1-eY7y-JV$UY);#Nvy; zF$Dz3O*94g)h~Z_)}cZIiF*TXaI^FJJwm_yg%SK;;y(Xr!uJZ0OeJ9+4V!hXp}9Vh zs;XcvHFwKC!1C8$JV`jb0m69kk|>I@*Zm(I9pMR_OZc7uGcz-ueJP4!p;_u}Q(LNY z-tPmvd>|IY*SOd`*B@ zJOiX>DCcu!%H+vbE>AA(hpf-7_|lepu*7o^R=v^t|AcoUiYt)M`gFQIlpM(vS60;n|Yup7Yg7RscR|2QUUj}-&Fwk`t{47 z*K@m`0(9b-X`l}jdGb`6rqz!VpzgSQxo8c~=kuV^Xkd-uF!-7PiRl!WiC;nT5d`xE z-V%6WhSaRvrSyE?b7C4215lJr)Tx$LW?A;_m!Ch}M_IpKwFt7cwRJ%NulUi&_YM1E z<%Opc-T&l%Mz<8zryfMxxJf0IYVAOhq$7uk=$9D)lCKxz(@hAEyF{!+{wR=Xoz0rKe&OkzTC6~L$1na z8#@p19|1bJckiBI%jGhfW7GK8FMnas5VfVcBEjzK-7cYAV|#b|j3YG~d`p1kd&}M& zHRFH5X^2Y&*xVI&H|ym(((+u4Gi>&m|K(qYZwc_^=@Y|xNdd{LNwcnBw*KM~FCXl@ z-r4;4hacyQZ;D9kUl3qKu<&>1?j1m>?Tf0{(Ow`-8FV_GUStDp=~i?_=(+UHw2%m$ zhStgRG#Y9nzqNf3NL*Y9DbaD3wcMV&5TSD?{G#a|e zbn8_AgC|^1wE+nL*j==Jha+Kw1d{?^65#ILyJk5#oka3gHT6d7YHBb6j4`gJ%02w) zrvO}H&^F&}zxuDg`ueQGH4=PDfN#IGUQqE6Ee8v{03ZRzv5gJ=Z(ov-oZ?rw3k4Vj zY=i~(AKW+VnM4N3pQh;#dQ-qjpnCGYI$+Gs>us>TvkkaQ9MbyFo|X+Oca*^I@Erkk z+`V(x^A2f}zUnx@o&4*sKbKCWfu?9k>&KEQu(p~#i!hA^z9hi6&nyWIMuJGbGl`k2 z@hkC>*57)ym4inA0CyQp0qTu23euS1I|AIfbH`RM7K+e(WV>zF&SLKGR%+1ZM2ZL?p3A16O z{floz@Y~-!!V^3X@ErmA5uX|&=K;327UH9Pdek+uE7_ObvMi%Xz~0{8nZ{>S_=*5@ zfHv%tKRz+rT z`03shK~f8c)gy*zSw1XlOA*I%KBd{~wWHel`r5kt4O8~&%IXT%_@Tmg1fVaqFO0bq zY&WP1ihFGLjYRLhX;-45FrX;XDD&`j3LNL?tTYvUvFFP_UbY&W?iUyLL?9I;ya7an z?+9=V1m)TF@Tg{%%ZG=C!quuDweQ~0)G(zGoXa;tgWmaq4-b%?}t6d|ptgRFX~v zaKhHBtsFGDRQfuSAKQtbPJl^-uLvOU0!Ypzk$gzfdZ8T0UG=*5_RjVO{9w-CM)G55 z=8U5>UigXtr-^7J?AV`9rE~BD2XBv%=ItuLqhCM5eMC?29{~vXqFb6-Rf!?vHO=`n z&9c)@B5%_qB(ec3I` zqKxFbx3`D;$Roj51c=2GfDN)pKJW#Px@@lV8Hh%rNX{1o7&G`7k2GFunkge4j)vz3 zy?#E*o!Bl(QZ6x-Fcm;;sjk=N;GDUaIjr#-6}}=s5T;=+%-Ju2pxnBX@Pq8>zd*Y` zrP+IHN^O08W8M8G`?j;Px`Hucqr+DO&_R(DP*wFz)>4{^0?qT~A1_;tP51udo(QCZ zbhZH+GkiyYvqYoWsBY#q?a#mE>{C808#XzeGzc*1c;5+75UvQ%O9v&_KKjLXQP?Yh zTD6Az7$d=F1YnJShGNVX8EpcR)YKDZJeIl*)NA$CU`UYR*VF2L#cHXFF;?S&&j@gO z;5hDB81!q(*Q1Db3dpWxjkzZs_zBR1^tChyvOy%D7SZyw*4C@7 z95lI9>N=7i+liP?fb#%f5#TJby|cXmKfQ$H#}Ewet&bJ&EdkQ0bPj&t;O!BTUsnMh z{rVB^Ba8*UB7oe~Ul^JX)f(o&!jC@Iy1fMz;MF$Zq8!qCQnB3Lt1M%T)cD{l0-PZ> z;Fn8ZO9M^QkQ`&vDX_Mh#l8Qr;k_il*7jBo8vO$tho%7a2JYRD7w-iD_{;W7-rjD@ zzZb}gcA)^L1x1wsMFqXOQ}BzNbi#7A0)!3;VD47t(sS!Uw!Ka`5=L4?d?SM2{^k+x zP>l_~BETpJhX-FIAGIq$b|w3=Tb4x`X`Q{jJ={kfD||(OrKOvI2~cQGnwgXrTzcd> zpMhv3inQDX0Ztj=zSlYwO|%y*Nm4E`l`s`RZKmn%N*VSjTzVpz`~zZ27uI5 zB!7)C{WC_r)i*ypAw^pCy*GR7FE(DdU!YHrR#sOqM{K;nPJlCp5|727gGB(KH5z2u zy@H5)B9ICa?lX)PlTQGmV_SXY6HuvEs_QS-*Y$F-STx#H)md@Mhh@Vir;`Q&&KoA5 z09_D$KUgC?Sm(1XJEK!^ZL)|L5g<%RR{fO#vSN`(xbU89RJKfW?JHu>N8l94Q*2XZwO~ z-?|MFiG<@wT>$pR7D!@;G&JG$a6--~919iECAh3R5<7g^0-a=D^4p3ztehb3ztV(W*)v3_k>vR8i`v9F=_ zhr|Bm)z}dpIYMKHP5OubSdOrFS4;AVe051t1;MO>*v{S?tG0#3nIA&E=($QEE7kVpdL<0d|N1&QGUb0nK)fITYYQl=8K}|OyOce02`8v7*or(pv zs`0EDAtX@%CX3-pjeJ{!F<$@FS_4cqf&|JPD=*d1hgdT~cj{mof+40UMgp3^_kEvx ze3B$QxdPAxG>0PQ3X>2*B?P81sMIQ8FazAN`_$_AnNt7)e$&dYBSk&)8`qDx6`Z&q zL?`YchCHa5iwzywH9jt_02IY77Jnll9LIr8XA`>J?o%Ox`ovd!z#!nSSY_}Zb+k;q z1pJJpLtLpZ1iu7$8k`Vnt|CQ6nT>Y44Nk>*e1}^Qp9um;;G0iCuOtCx6+i|lz~XP` zC;$PzNC9SoNMKbTBg5y!kF*6ebbyOkk2n!Kjj)&z{w6g?Rp(=XM(^l_s>%*a#BUFW zqWpWI7-=30eHee8x(9FO+Cr6x;`!gqQ-C;$%Osc~gsPPp(OK(&YrD|B-+dxA{*hDw z0{%(`yWSBXtBSZ!pgr#JeIfnPJdDSKQ@?#!1(4x54zw?{AOB(DM^FI>e9ESg--}b= znezBaAf#)DS|Jcs^)Ctfi z{BBnq^jA0Yc^QvW0caU3{XLilbDvWVA4i5e@ zUS3yK^PYs9O1eh<07HJ^>uhfczvC!1qPY zs5y1}|KMowCXWB!a4@_VHmGt=f0`yI=%a z$}QJ(-weXwf5ha9aFzlr3Qhue^h&@UZ#m1+Xf)s_zW5W+>2&z@3s+x&&nXk=9=q8) z8U!5Vq7o7T7+!~|n$qt`-b0TzQr0-=8yd=mtucHz;Yq(QSUJzbIE0ZO^7k}Vh5j^w zz8^rRB8=cL2mo)({C8~?zGkQb{H6ggs$Kwp>hqj>Q)sQUU_2Rf0!+LKRO|{M@N&79 zp&4Ja4C~b>jv$WXZ-XRwN@PV*POVu|kVBf+vMd;lMvn}WCuRYSW(zjAUM$_4OeWB` z8oC)dsDU$ z{Ej1}ok$=oHTDnQ{)Tuy>szX#1m^TY-X)3}QHx;t=5LEd=Kx^fcW-wDN8G9D`d z$n%#0U&c8VfV7+1fEM`anxS5)o9t&An!eezbZA-vtcC{HiyzfZgD1sc>fhcQ2drhO zcMiPh&Y>55WH9!x`BB8bF}OX5PM6@zkR&)L+#?d$NHS6YA_2d*)|`7rr|!J&PyOrO z#QPPz{LX{amq@VA)?t5t|A8@jYy`+UKV88ad7xXOlZruJIveV&3J?ZNAkGqa7DD(X zgkuxOpJ`ZD<5E@URmKqvErvQSQ#S-~QN+N}ST>cB0;=P!re<9IfUSVhy7Jr*@72eB zaJRR?3&p#gdIdUa3=LC-3Epd9*B;ao9>xwHIRWN*K1)Gh1uzx`o9%uP+?P?2 zuVdG9;3?YZ&FiT@U#^PIWK57uf}|(qH3{?relW2G=tKgFW(quw&58jH@H6n6I7S5y z(;8LPg`YLL@V1`=yetVQ$P$nQ)Fe-o1nfZ;TNK>$xBf!;rYaO5!L|pfr>bDGTqaq1L7m@ssT?@0?oGhvr47Hi7=f` zIRSzo;C7(v`ocyaOGxnWQ51a-FS)NI${9s3$faQzyrxv!Cr$v~`3SzH3GhZ^5B*pH zQ$t@y1jnuirmjKFsgwwy#8U_lx?GAV`Eg?EWG?r=iusF}ExNsqUHN>?fi+YBg1(81 zJ!6TEr6wgOP;hNsMcDC&MQdZRH3AL`sqwufNCF~)3NaS%f?WYi)xgtN_!wT;gq5lT z&kT1F{18D;_}n!U=fJ-zdcKL*4CkS9)+__brQ^2=Tv11G8)~@!FiXR%;CmVbUV!eC zfbaX@*bYDAywoi1XB1WWu_Q^pg^hEh;>Hy$ip(VEwg^=zrH*SEy1_~J#0XH7eJYBN z9q(XaA}nx#zeCi`s$=tUmH^<7!8^!h3(vcS*!&76N#Rv_pTO^6u42{^5fc}p(Ne^k z(xQ#DyL2W-6^THyFGWGcj;42r02HgC=$0KLm*>E&fiWF|;g6tUiuXu8oYXrsA{Wk2 zDLb@+k6K8;&!G}f93(

dn<`-pP0Zlj(#j0ZI1UP`Opoxvyj1K;=9tK0ZN!*}$5U z5}cO=4^4ns&nGZsacQh!H+fSZyN{iV07zg0|Fz;868sLzat*s)5&%-wunMPO2$Te$ zlt(KRjPTP7*R;O`3EGTZ=&KI&*-20u_)G#%B(T(!1o$l_5n#;_1fXm}kbO%e&6tk`aV#vs7w-{RvjpIK(-^7Vb+pZYiQ~u15J1j*9ulxe?fFsxsQW2tI|Mu>#Vi5r z6%<QHq}`ck1wg zV{15akLn06k%Gee^xl_o_<7j@1U}^&X5AFqlp}e1+K{}nbtS!zqn5V1?07>;D$5m0 zNsGqsCAmFN5MS?_?QGw!UIQl>ffI@@svYlrrKc2rwJiY^T`)dnoV=1UP3@kpRC| zuQ^|t`oVR~Ur@%qU%>m6UqTgV5dkFlZOgzeQ8LMwBY{iFJ-q-vg^D2P>8a>Bb-o0j zMkT#YG2;YqjGO?LkIEFfB@)OW5?D;nh(rn`!PnD8hyVszP@1clFKYoO03{KCqLNzS zGz>ZT6f|l~Yz}2{W_bLK^6%~L>f4h={Ptmk;f)N2`yPu&HOYjZs9?3_e(4n&mkQcS= z-}KGM2Uv+*IA#tUYYx9pDj=hkc-cHOH%mK`r9>bC1Slg$dL4q;5Rss*M({(mp3Oxh zu$>0h)XoUtp_PV63cmLlA|Qy@kpM0d;SZK20EOc?;DtE9A7=NKYTrt&fhW|VKbY?) z^EZ%H_|^4J`>Rgfxf;=710T=^pm$7H0GlbXT9)wj2#e()B5@Lch1Iq+nkVAEsmgB0 zktO7%kl7zgInCmnB>WjJL+{bGs-#Lndn-sTec!1HfWH8{FbMIi)egVzTASdEE$I4t zaLL=}_o#1mCWs2sR&c+hLJ_Tn3?u$ZAb%3GjaYvd%lD__bWxO%hW!lm?J6`om!Ws_ z9ZmvDgA_0+_h`Ld|BqbP{SN+oi>{Fjr`LZ5;ksSNM$81{{0g9>blFZ752`MgaW=*4 zSFde;>Egw87*9Nyq)E!qKt;2$SDHAsP>-Ed!wp1>N~a+*TG~-GQnwjtOIsC{+Tzs88OJfS+wF`5 z=e7XDOqr{mn=>K=!LOtIFMNdxeJc61^RGGE{W7E#ECPQ~Y)=W?Hj5^RgdWU4)pgrJTS4|B(+{XoV3R?dYIA}b}=XH%5d{XJaRCnM?(B4eI0;rm7{{4FwM?lUo8coy-M6D$^VF&PM=RloWtlfVyPH@E353zx|h9 zd1@yepyY^{TZUC(i_Dxgax7GWajzn#R1iwTsG5^)kNN_l>Y$#eoU zLV1peqvaCd`7{^CerTL)XkDL7SI(YCT>$9+5#3BKC#dMN^Nbj8}vcz~4}J;bmn|`o7s*gXcD{L9@|Px*!}1zT>6W?ugcC==7X;n)j%!FC|3eMgw4r5^tCEi0@<&}sS<2V z4-4NTAWU?=+%E;G052t3D$6^bl%Vc@3NNceXv37>d;b`H->&fAG%{VB#WYQx2)Y-A z(Qjq&C`;jUHUa9jYT45h+-0JkH$R6{{5O~@1Vj}0aG`yH&wF%q47c9DgW8UTbu0*U zl-9}`Ts5cQ;ThKS0N*0N)HuLg`qi@h^HCEdA<#*#O^%wv3!5PD&aSU^3--^OO7ML(>voo=S$l3<2JE zRbz-_jV}8AvbSAAOXwXPmhRmP4A}L3*f4^Hlj#Yl5$5^(xxX!VXxkLO zfA;>jVaL4(JI+N+VR0WAYdpbyAKFN;%ZZzP7Zqxm-HZIP?W92@Acy>-k$*p!j^OiZ zAKr-@H}LYU{qeohT-F(Y?5%eAxO+5!d%fY=1Zd#q>?Air6l+)_p50N6(w^>qw9CiK z2tMWE-McUtPf8!{A_-0-0EICFlrhK8IhfRCYWdw+@0Z;_``$d@i$NsV!>w-?K)7jc zWWT@ZT!YQ9j|g`&5=7YLv>uJK;8VDv0DfK&5qb!I8rx|;P~7W@W;~SuHGJwMu%rLhPL83BSW_h-`*1)dx z!5iL#4iZ6aqXJZN66|RW_~U5^htmW${X=NtS>i$!u^7@&uaOZ=!AQG{04Uayz`s{6do$BUsPP6oQ=It#YWaHtU+t7b>jK1;ym!8MbDmZ z1L}zm&xle2KRrE>MCKgjsGA17h(xFvI=p)HZTPvvZ^859-R!*`a}D0EUxOW^1@9vv zis46#TWZ!WCMhw#d+0t?_rKTARp(R%sA~_p1dmrO#;$LuF6_o-F!w**=VRv?;YUP( z!-K=pJNHxvc2PC1&1epJzJ7*}QxrQ}UGV;i?w_>}iUpw0i;cPid;LCaO>#>pssWMU z1y2zFT9`?BMgp?6SS`|S^tpn2kSai<+>*{tO8>0CYq)`;3aCT``X)`5BqinGo>7RA=kakh9C9MmaD$`( zG7dq9TUrwiRH5A~ejg&7ldO|QN!BQdAi+PTCK>pB54QjDcJ~bg|2MMrf&{$ieA)M7 zxH$;VM}Uf&7E={RJa^)TLR?Hql-Cr6U46EyL7gS=&M1U1^x#5!114y4I@9r;1WdyO z(=@?A84cn9M!pB8gJr|}BeMz$cE?Mq2Sy?mU?{V^ISF*!Ao)BMO+AAEL>B&D$_Bb$ zlzsY!QrC5UEmJ&a_>A6Bk!*}#QwmZTA`_ZRgPLVv+B^xuPSk@=a18s}D%f!do`t|8 z$qtPg+_Emf5n7#!b!hnmNa7e`1v7~``1Ci7Ej+fy^G}EIKm4PQ?|+RcN`Q%HQov-V zXGJ%`#`P$>UJQS7FfCDbApzF$OifJ`beS{|Se>ygWb~Jj(JjT$pn(KfQDe9pFsQ9y zAuN-xA;)^X&Pgzx;^wdj#TX!KSCtS}Rk3YOfD~*Ru|YWaXAwXx5I}and`C%1L9$=$ zev*HAEuX1!F_}^kQiZT^QyP*(qzYabKr?os8M*wmJ#(dWzC)FW(18O@DB@Z?Dm@QV z$$Y2hzy5ANcq4ZEpBhR6=gqL-^1pL;2;L0N3klG`?`%91Ia0Dj5`J-#`~ni-7ipfM zX24}5<|H_d6gZ5H40sO#CqSeM5D`XW4}xHtZ!qxTgV@eUa25fK0`RiKX9-XwM-gDD z2Hf{Kpa>$%-vMcJ#h4+42Dyh52}sc>hyt78K|)1AcSvlk){BK=Jw`U*#mYq(^Y; zcmU0ndg=YaaKOQ*aGW~0?%>3n-wc}ge-F0e+|M5-X1zZnL8=aXZX6kkYniU&DKY%E}ZYN1yX@cg| zkf{lLbU1{Ib_gAHir$Z3gxDXb9*7n`*FeGIXsVE8-rbqR({G%CiiaLAx)l`*6@jT5 z?{@x`s)LG(1*yMN=j-UBbYG|fChomxdKSuxhMrAwPwC@cB79HgieW<)_gFP7o|fuk z*N0$@j^OfO7oNc{Lfpfr)+!%qUo^_R@a$!nwiNnPBoN-?lV9zH&LH0?~Q#;@VNIRYp@LbVzD-gb)mWUB?=vqN; zQS^goE&;T8-Cv9-o=1^|(O?DeXQS&y(5^DL7!67)AftD52+_oYjf)#Rckk^& z&_{AOC*S=iZWaH>?y;8IUny8>b90|z_h;VE1Th3j*r`3l(vFKFAHO#^DM3h07y2lgX+x+_Nes;jCm|ImAY%g<0FBJRPbPU*ZgA*h;L4c;VY!ypaub^wbQrZBB z1s!Z1>ac-s!CzuS==*zcH?{%%Iy4aA{@y)kwA$d}-@(xVtgWsI5?~RBBbU!nt2z)o z`=Xe5(1U++?+)0e4%f^8;zTetKvZ?|-$nAq1G|HOh||uE1>pP%b$lxMe2x@+RZoGK zoitSv2)vvqp(nn>QFMNoj=U1c4nO<+(yADvlo)kS1$P>N>x;VmbY+yi+wC;|ir4er za#H)?-+^&%sP;VX1OZCNv2fmJ@cc|Elu9{0lft`L!@r4Qe7!hl!s(CdjW0XcJ#|xq zhAL!@696S%)6o+v4)hPZP^s0Sf;KRojQLnc(5F}oKTXX@8EWFUrUf64VrXe-2bx%i zvD^;Wj0JE@;1-|==})CyQF2LF(t9M~nI)v)Gs8l@D7oZQ63`KzhiM{X{H+#7>U?ew zQC5-scU~V}OB{79qGK9hr1G@cu%M0IOX>R2-u@(f(+y)kh!dcU5r7D7Xi+jXCyR?V z@F#tLF#)QY@ckgkGsgXer(|46tn05}Q8&*+0LtT7gTquZYb#Aogx;XfuL*og-W3HB zWCTb_ppE))YieX9I4=RR>p28qsR|GYir@<}=w$*R2pRa%4ETIxGbBh#gpl<~sgXH^ zp$Q`JIr6aY4ujvPW~O>ls;bUGUX-)(C%p+0X8{2kxZW!6+feh=&PszfG38}k@9$&z zoAU_JMBog3fe3J%2ohXo9()g)5QYH<-$oTMO%o1#huQZbYNKfw842RSk?8(3hyWCl z1Wi54z(0!s33iCaB-l9tiruduuo8S`;JP|>eIXT+Og&eDc_fe>FA2aG6eLj9826E@ zZ7dleqd)-1VDLeI`mL@Py!W6A@R2)#q6nN&fQF$9=ASnq%O>W3f@i2JsWnoXNC4_t z6Zc``4^=@hakP*Ss}&8_H3e?5Hh8$X(b$7Vvx=Z-&^zdXQ8Dm+ofn?erh)_s)dWI+ z!V6;|S)jfGfa($9V&D7Z2sWxZJi{U^YK-562%y2`K9Qs#22c~yZv>D?FslIaY@7f{ zHhPCTUnTId<8V@Bo+W_CPURj?%AioEC*qplkJF?D)x5ps4=PZsi2Bhhcthdeb2a6O zyA$h)v=F$f&mj$V7tPVK?{JnIIBC-G!Gl zF|j^VVCsIdfO!#x0UsHH7Y6~C|D{4t4;lKWzejtTvwwzt9!a|(!jy^o{J(zDfx81S zw__~_VP}S?rLR4-hJha}ci24cFcrS%X!^y{oardnjSvq@Q^8Ld*yxi3JgkHHiWWdU zJml})N{|Gu$FtMvpkD*@`+abb5dQH1Nl_PvK@xP41TI>ElPW^=?2BTd<3sqy-CJN> zvEXGpfH)CEi13f4WMFtt#oPQk#3JLKVnDzPlC35IK1V>22%u8OM*@`4n**pSP8v+a zeCX|XA%vSA#WS@{&Z$VaUX+pmXIBE+v-V)UJJEA2=2`$T??LmtVQG2ixk;LMs7)OX;$$>|*&MgDSCoY&dQ&M_|v zDn%+#45psXB9@IOZUKveNI*SYv;(dLUTOzO0*c}BF#Cp-z^OR-97qDI+Q=s*5)1~M z1b+iut^~6YV^^xGAP5nG%YK-@r!pI&sSC_>#0WDQS_CS>?}CRQ0x5!$H)1iOvJE`4 zcq#<&P#%jaAcIuEQD;a{P+B5^!HiQ$5TW#Q;Adi%1O{W^M-d-0@LB5Jg@_S!Rf3Nr zgfk>6YN(WWX%F*kq8QZi$@0KNX@a1QE%&nJ)kHu7(1GXB$HJqm&jKR=t_yBB}PNzKA*VnnVcDr3Z2BaL- zIxxe5I%Y43vZ`1XcI)OQ{~Zl_@Q?2G;XnMG4ll7`wo3!8B~Gtm^!q4Oxe7!`(wG)d zB2WWSM25d3CKO;{nM$DJfkHeWVN4m%>G;{0eJAaFxn7`wd-Hy8`y{;Qi<^Cc^Lzpz zKrW{9fV$wv@Q;xMe;t2z7QN$!;)IU2m}!%kaT0X&3HIy&2~f|!cU^EC2iom6C&AhU zK>!&I1e9#Un`sSJZ}R-cK_6~L19*`QI1%PW6bdV#QP&v+L4czUzVCA+m|>yiOH#}^ zN0{0GsRgPGw}u%&A140pk9QvU+poRbD_yH60V-en(dkJYSjhhm&-?CqH{)WL1;~eB zPECje6kAAupM%{J0g5DWM?>iD=g)1+=ABRJEzrlCaUH%9Y`_nq8hkV?dv=^ke3XJn z;1@^!%=dWmp!a4|g3n(L%Jx7}?0iXx^qv%pClzxEFiV1E0_*hai=OrTvybM*Cp+pi z5;)ZwCxJT}WY3EvAn9KeM1nuuA1_6MIPiE%B5zxoQlIqK-oizOC_*Sy4hL_&t&jx9|3-+@slu` zcHtV@$u++VoeeR6oO-#cI8gN92!SJekR&)QqR7W{$Dm3dr*8|uM+G~Ozv9_RW*VaB z1>Hv}5_91l;Pmx$U4O}?m;&1<>2Ej&ygvJkB)?{qMaK)pku6Ou7$Ey}Hpf>neoE^@ z9nbzv*vRLcpc2>uBzNrct}jLteZPk);9<8?>YAPrfW}EUfm>!fdw-F;`Us}M#CK8| zhzLV@VRx$a~VYv6v3C#J?erpaiHDGJKHvGK9b##^!sTS&&GGh zjOTxh22>;gg+8MIqQhoO81nz))c18IKMxV12=^@baZ+Xzk%i%(1iv48JKKHl51()3 zum)$;N-zBW0Kq>u0Z0WVI6B&yc${2RocVU@>e+n{Yct^>t9V#E5blLpD!##x9JCh7 zXCev}r^Rv61IZGM)D{})Twg#E1mPb1k=B6-J!cRM#PfOs8kGik6A$+8?Loa+&(wfO zK0-pgSK}Hby zlVk?6WPS~$QlMs$=-~eW><%Zt^Zf(wyUSqFi{=ykOae6UNmH9+BIl3S=H2Xj0W_^5 zFXt3mgH;43tbIgXPkBfQ`1y%2D~5Pq%_VlwvJN03RCz1 ze^G?KkYG*Mz^>T1mjsm}5LQtj0V7pGB193YO&s&&`$ct<5u>$)qY->Ju;J54<0R0u znH|I-t`W^-0;($JQ6&L5n91UnPl2azWhChz2fsJj{?7jBzv_8#NJ^S#%&l`#+M4+O z2gg4Av-?vB%PzB+0GlbX(0ceGmdxw;>Geef@X}p0Ed!|Dk^ljsPh$ptN`N>8e;xq{ z?$wk86usDlFbs2&**5QNA_1uZ@z1vG>^YHusbY_$2D(vJCn5mFr?JjSpbQSUh1scM zDakCL;+lY@WXde)$*EnRU8mhI3GnUx(Qov;@P8-DQO)wyFx7>rtD@F_(DmS88lND* zNej>{sNu|>mdat+hh@Uj_?$0f2Z6HZ$z!_Mc|FgAjfxH)>U~{HcZQxH;7>-Elt$r0 ztVNXKV<6ECEP#aai>Qnn2r}V!GpU0Ycsy&q1qS+d-Km4cbZ~LaUcU#;Mzcf$%856D z$!NmwNlR#MY-aC$>tGLjyw`IN;idk*AaSEnI-jnH6FN)~qztPdbqVkpK15NuUY;n+ z?fp^kJ7|-krRhuI;e}$pcaMU(&rd1?PQ~n%IQj~1S#f4!Va? zL?AT?P(s5j2!Nuf3kwzaj69u%o;s@_YU8R05O~fPBw2tnwT2tc%S=nXS)O$%nO^Kt94p z-Cx6d!w`Q%dHx=PqAEJH9AWl8uIFQ?*9`_9%^lzu8Uvr?US|;bKB(xg1}1ftF9A!J z)K$?T1fC!H@Snp?cwcwm{m6k^u>;hn)cuqc&9x>>#uM1NvjdIQ1~gZjISDj_SI7^1 z@B;C^j(at9u~)v|Rfmt?#dOCmc$y&6i<3Qg(c1&N+AN*dn$g@7x}oLu`J-O+Kfn22 z_XaExcC}pJ-BJJ4_e%;u9l;Dd0J8Snsb;x_RQ^gm_F9ITv!a6SY^Lo`V-S}`hhaxl zba9VHRUpc{9#_ z{{$M@YxTs3A_3^Yb?jiW70OYFQXl3WO9YsN`6g?I#=)Ord(%kZhq#6uO`JPU!6y=^ zYHA6IAc2B9OW>2N(pU^4fgMfx@19}`08&e!vl9`h2@XCz08P{QJxKzdNGJnAAn=I{ zltq$|k0(lgb|S!gaTVTEo6t>_Z-_@-Q^UCgcwcS7t-c4pxgUQ0H}|7o{@6>7YE!p# zhB2-`Jtc$Gu6Bk2&$FT=NaTAD5!dNIH)P;w!ZsW&Mg`D00c6Bjhn*3ZvMtVZ<#!Mu5fF$(ym*dRln02Lr(;>o8RDJyY1+O>QMap4-U)zR5Pk8WYi-L;wo1 z0=m~f>O*IvQ?8FHM&B3aL-s%^Rbo*P3EqPytdI8LeQg5QG>@kQ{(Xkvvo(PJzbJjT z0hoD#xEC+kqC21@0!3E)qPSt@r^byRw6RpI61Xtb1vlC79 zwD}LQF(Zg!#Z+O8`>2`>`Z%^tyo<80q<~J)LXz}1OLCB-bO{m@gT<%_F{(>|3X$*6 zK;m?8?E$LLE4a%wZwKD7T5uD0>5V;}^;#X6>45FnU}!Gv?e1|xNOH)E8CnYVRO}%p zdx&xI^gL>+^~|o9tfF6S!nbk!emH@)*M~jy{74rWqy1Vx{wj3uA6%_lhy4APwj3P& zMhl|dyI82Z3p{240pc)#C`2Y}%c+1DWQ4h4={l*vRo4r^u|(kseA&%|Kqx~;s39jo zAD3*TOZJfjT{nQXlY{2^5jY0RM!qI?zlBAe;7Fj-^!OOk$JuWhnSx3&qXu;?MalAE z6Yjxp;ZGs~ClX37C6R!#f%_*lplr69C(h5LP2d<&Es(4+vM^3<4S#WKkR*_!tJ$zq zwUMC0G6?)aY;_L~w{YCX(=LUFV>wH`U*cDUB+x6%O#r#&y=Cdfjka0g1jvf5=f$Vr z1u@`6_~-j&5_HG;w{6EbL4t}_1~YYxj0ChFTBAsaAQ2?+V?mfA5lHp^9VEdIV8BVR z;~T&Xhm(Lp#mOw&;&wo4U{x)!EDLN)0LEr)lcn=VXkCzN7+>f>GSvO%-4n0+0$&RO{9AuUM9t8xT(Z1ML21N+dAyLr=mSe2O1O+uIqG zNg$)^`e*?$I0%9yf$V-cW<-bt2_z{b2{g0=T~RXgcOsPriKQ|zH^b4F=Sn-( zO7|b(D=)=EPJ|!C4%|#cLV)rghF2(?kBsyi+PK#V<~ax3@;_%S>7*0nFr{_^@~ui3Muh@f2j>1XJ3t+<_%ut z`#bQ{ZQ+rU0ESui_k$qs%D49eUQ~+piVht|hqd(eb|vjH#pmGjqT`q(3_;B2Fi;hw z63}aUoc|U@S2HCj+Cg5x{5KIHfC%1a4YEtM_$uhgV6w{{*%zn5loh#$0ynM1T29sNkCr^ z;F1J%z_>sH!0(xolORb17?K3xjN*o|XwkLAo2j*h@}-M5hd|Db!n`@ekB{p4Ey3sa z3fDvc(=a*sL#*|9I9>`bWzmCLy#^bXHqMlwg+$QxuT`tnzk@&R_T+#Uj&i--;?Fy# zD2P|!poc}-b;b32$37;?YHA5DHpM=gdIX(H{!ObQJfd!jd%7YB<}h)s>SYTcOE3x+ zktpH?JAL1eqmnhKN|gN$5M*h|UdogYb#b1XN(*kPEofHlQXM9<9zX0svnlMP*X!Nr zANT*y?m_o=-HE&F*bcZumy?Oql*TBDxN1`R9@=rb9m5pooOptW{eC~Q&t-xwdf-oe zn0ixKZLU5L0pd9RT|7h+^QT-rm&|8UMXYI}i#7B_>Rc(|pR){TTVh);uNd&&p*Y|H zn)3x)L!iha5~%6oeZs*+U!P)o)5ubP4^Z9>QU=KFfGa|h{}!WoKg9PbNeRdrNF68? zMeI}Bi(?4FSgH43fHCF-UP=y8AtwC0)yU=f6XP9N>Fx6OhDJ@C+p%vW@Za9s-+OI; zfB)-o68}Cb$RI$qAS(&{097gBNhBaemOjskpb9d`AS-xK@J}UxBte97TwkeY_egRS zl+Z;<(nK3i8T`A3VUQ;MRY?Ln^f~yF08r>QPJ&nzo=8C1u!YnS0Vok;4!$G-L&PNb zG?D~M@M+W#>9_#6Qm_NMhtp)>)B4zR97G}kWr7_T6BsE$rTxhLhH>s0M1(D`3tPTO zB0)Up!G^mB^-QcQ{4)ta5u@gj5=asdz(j&YIU7iT@8j^VVm?nKut&$)Gfn~|0Ckg8fpA7Lo3;)w zt=h1b65(SvfW1jxbfg`EUmyXkspcdgLP*TG0??TXBv94d1&IXoP7Dc8A_C4J>VVHE zRi%8!A_2sUrK{t<7yiGyPUj5*e_+(!`mi_LM!=3T0Ok;Yx*F@o>lwv@2=tqGek{Hr z@X0Pl;}JYeDCd3gg{v<>tA&22%{&Ot_4$@lZ@g)k_EmEI^=S`2KiJ_9UTl^*@PGCxMQK9}mVH+*Cn% z_ftG7&z}u;-WLy#4xwUKpi-@rCqU0VO%X`WFo^LtkO0?_F|Cni!%(xJGws7ftH27& z+lCsQx>IHqW!}S9wXwSiR2}DhrDbF!@X%7|et#PCahSeK-%wVV0BnkFZ(@6+sB;;Y z8Do!!xJ9xS8s%>a`c1nhrI5)|%aXRCsPPHl-|bG`c(?1lfqQxj;&4Fs1JwW`0o0l> z8Wp;htO_AcN9e-l0g3g z-hNh+Kna9|ND>%@9U1A=1gHdc!_i^A!gvx9f`Vrd393i}Nf-f?D!^C87@(vQ@J4D^ z(zY_-m7EBabWJ@-NrViN9DK4YNr0Um0>6*I-%o)Tq({jX`&*U(bWiT@QF{JE5rC7R zpDIC00v$W-Gz9=fXeyC_ih>0AQygEGB#6h8Y;H~hRTSEo!z%(cOdC#;;DV)~{0n&` z1vo$wSelY4K#ZO(!KVz700h2NfCM|5gD-)XWJs+bR)np~K3A38BSuj)+#mXHbKv(8 zcn^VBA@lbKB>;7~VHg=XAEoEdhVq~vUU}{cG*_Eo;a@R){5vhkGBBR2*XzHA`PZ5j zR0o4W_WW+Vq8IrPLkgRtB!ZL7TBj$NML(q=ZS z%|FNPU~=Q$z`KD?^xIJkyDTNF%C#boILv!&r?Clep#yt+d!_k(--jRwK-YB`55_RT zj<+9^=RdRp$msX_U|}(9cCBEtF8FrAaIw4u?I=Kb}sfAEM`9Ln5?H z(*(SR0d)yRGZBZi4ZSqKlAtGIXRx$83`TNJWDu(HjLl#T^Vyot6{BVISk z-cRCug1*%RaB62Nfc_Xge>Sv-`S{LzG$}JR^H|Gwy?n4ec27*VnON2HFO7zLTyKg!ywK!f*t)@#pKe`X2f6 z*4+_YzgrEq@b}eARecK*c6B3NU>6rl-2}Q5e~06P4skg4w_6qCHjX#Ge}DK^aS!Z) zHT3i#6`**W;6F40DDK?3gMI)d5-b_pyZ7$>a(ytkv9Yo78eadE9oEz_VKeH%=g0ft z1PE{{1Qsd`0bdLP-z@--(LI<%-@n!O{|~f)e@fji*TQ_`?kJG&Z83;n#PRc(pF<*i z()IkP>jih(mcG-rj5`RreK-k-0FMoX*~q|0&wrfYQ#>>QJoMNfZvPNoxcUOLTCEe$ zBa~B?N}BKC!Qz?k5mH^%(Yu4U2DkU_=r!waZ)`kw9UooYfezdY>-@c~RJMO|^iJt} zyV@+BRi75Ai1^y9-DRLs6lPR?-~@Aj?_P(MEu6_d{>Ht*HOcp%*ACHcQYk z@Js*$KZ2HpduL+q0A<=sB5r#<1jW$>BbiiuI+ywY1*H9{1_##f8 zgiz0qhbDlGTeok)3viMItl(!dfT6h}YwhW%gO-Tm-Jz21Bc^SbUIUhQ)Rf$u&6@F^Y{0Vp^L z6ePiFYwmNyGC1QYhy;`jTZ}1;lYo+9IPAZLxjh*4w&Ixm{FcMWv$=17psn$DXxt7D z;P8M0OFqB-?!U)j016^P zoO{GJkzfy+-%PJL3EB>jD*PDcD@cNV1NQ!J1pWqIzjfNaew4u{;39 zc46T9;Cn9j{ihL+o&agw`S1=OJMGSiXC(z7=Z#XYMmqp14&750PVHkJq`5HmA_F=s zFY1qy0ub=U@oC0mBLD@Fz%ngpt~9fIhGFnAQvi(#;E4p3)Ijm0-^-IyfJL!AigquxbzQJ5i(h}H6(A{$wC}W{+XElAhXH&r{L!(VdGXi@AcO3HqFHaA zeE1j?U@tOI1@huQDFyhf059W-5rBe7z@B4Juh+{DKFbP_#`Xw-A0hCg&j#=^o+tq* z?tO9(2EzetT-?ZSJ_ZHoFu!#DIKcOD-*>skfA)Zv@x%$>c^*$gH@Fg5RSWM1qVvH6 zP+=(r@MAwC3;!LKPv+ru-87($qC?W$QdMz363<$?1&1yz$oRL-DucTS<{%K8a5M(J zX#ks5R1wR7dwmZMJr(n_4FSUdJpVjAEdt1pO3-?y1laJCf})sb3UNjQ|wG;Sh$CA;1;LNwA~>oE6&xpM(EFN`MbQj2CS^eItfzD^~XY zcM)VcQc9SA{dS*^o>Z7WBcVL)4M++$8V#P!T1o`61d{2A2aUBx{yxd{1@TVrevjLU z>$?0}*L4^V#--_Zc6Ux)zHvqic(d1!m;nEOad032000003Kx2jnD6e;#_)jPeK=~1_2t=qftV2!l{I6*dXR`S9|62S2v|BDeIfV~C+ z!$E$?5^nj)KI zk+Q7La9~g< z6r$jq!)P=T^BH3zLeO=oTuSW86#3q=Ebu%Jz`<+R0-fnFum6z;HCkvq9@;x5Qy|NaD7*dA@Q#3Cf*bIan$Q|*!aPXXPt%!>a#w;MWLd~ z$el1RtpFB*5CQ%@4^Hs0cK{;&Rjl?^jOueF_s|J6O?#&2_*e^o$ggV?#N)NA#KsAb zW%q_XP}H+Y4Z}YOx`OJe;&(@*k%&^M1gqC>JkuO~ECmp+dM%TFy^%G}^?bUaN7uEb zI$ZyOjf+lEgpZv7o=3Z%gvG7I{j(Io$4UUtJMkgN0m29oia^t}3q8xnMgUa#Wc?Od zzB&$18TWjcM;zF%xyf;1?2+q=kgvyow4cs&Ue0xQ>6D4>!*{Z2~X60A8K2 zeT|*z_FusGWnI^AhYzg7sDD4CYb~RZ0PYkDg*!Ml7(4j@5&48k5B4rr1ZSJB3&v^@ z$)89d_mU3a;61~(pk&7PzAx`-^e|K-4@RXHtqC09pE{27>$YuwmToM|0?s*jt`|m) z!ZgiwjN3SmL_%>HMSwj7zVCS+_^yw?;{yo;_d|u^Zz~Egm5FeDv@AMX7(wgF=kt)y z<)PQ_0qt{M$UIvL)1wlM^-4jE1uzrut%(-EDd#8>ri|~AKXFf^O}RC2uS#9KH=GfQ zp>oTpRH>p-F#t&Lc*DtxjafKTSSX-vjCXRm+;8CeZ;uW~kjv(P#!NN?qyA{_?`?Pc zu=%}v=a$bG&H<=4L-GY&8>U#9tgA*&ROIeQyMPui zH<(c}ROw1ap-R7mZt+7nk|W@W;Hjo+PaW5RjG7S+;5zPH-4xrT? zTe1#gF_5KO=^P-B0th!)##ZppQ4v2yH*o<_3owVKbb%BCh|b_T>nMbu!^_KBR%;@$ z-)AZV3UmfRI0ZQfi7dRQaDw(9ilBGU0nhW!EU%f1qi}ItLGqWcEW`5hGVtaWbQ<@^ zFV*DSNdZs~kAuq<*D!8TU`w%rSLE@ZSBjM)-R$DTm+__k>P<{~4|YG?g;Kc$#mh^H z{WLb)%2_6M7}SQL8xQg7Covl0SxN@l`)$~KxOrx|RnKgvb3#b|EKudUftA~n0!V^L z{}PQ?a@yM7NEW}P$^Nd}V`m}qNdz?{zkI1Io{^ zi(0J)*YWSHMDSb-pi-?wl|KvA^H1nyw0v{)!>vn_Ykw z3V;xapt%d3c57h~kbQH`*A2svB2WS+NFk!L6ahQ+4(9|SfA!j`_~5}{Afi+%fivg= zf4V=O7;CxY1QRXbHC+FztCjqlpDgCqtA-A%MIA~S6VXHmc$!@TkLf}H%(Ee*8&Jlw zpdb-EILt!U7>8z*p!>81gI*U@RflYLb`2>RW$JSjLJfQTZDin^D9VpSE0`yO_Mgw^ zA)m`buiq1*S`^Qn01VZDrKL~6`pqB01m_@|)4?_mK+9%9$)i=H09@-3n4SgCvJwJN zFhRN>B*}wYwXF8ln@jpnF6UJ+m=9NQtYYFySzW{+TLs5=p{V-c4+pq`3Ki9X%X$W? zh6F^;G0USq!ff;+LT7?0g%|UX_P8%JF2{LFTODEF9I1aw=z~?=li*90hP-&sG!A#u!bgRxx$fo_Mk7{yUFJ|z#0y3VBD^u z)mP9CDp~Ew`eogPW!r^jer)9&t$h+}Du-J}2k!D};`wUH5aSl=hN>_`p-@Qs$!ofy z)0yXL1uT=SS!xIEr|pIF{agt^*#7k!iD!ELc=E;jWIlc#9QYL+*NOb4Jjwy2LaJEt zVpPY9S=L<01-(2Z|4Lqia0^w~>Ty^t8)95}c?EjCUL*nHT zr^K;I{7|dCB9d~X4xPDUcBmj80c+Q_20Yp6?(P_&bU#%?(2e3z`xYzTmv$pto zj9mWm;>}JOsOF=(?=}QrNo(d?D}R= zp?fm$JB#LT=V|X$`G2MYAlr|VPhc^-CIJxn=c{7v|uZ2_W9{3GJtCs9mm&E8jx$OL_6m8k(XF z=y^F`E0(|>^go4{zYMX;FQVPYiJyj${5V1Z5O$9d!7O}Mmja-1>l5;f?;coUyyqk7 zm&)VGeJKVa|I;OGRfqis-Zq{U4;L>0)qwg^O+>X+6_0wo9+XSiJ9Dyo_Pic2O^0H! z45LGtNTwM;)HaLD;4ZN>Sb{g~$M-&GIODBfDl5S7iwdd&F8&p;a>=#vsUY4bC(lX& zXc^oS!_uU?tfCn&@ekqa6{)8~qYAuu3HaeYREK-=2b^giWC@4J1uju_Tez_fuNURH z-|L%++3b?EfEu%5$+6)*2j2Vrtxoj5V5Cc@xo5pt0tm?`w4UsP5wm;}LL79jWshX! z7b)CsE79|7ISrQbx*(s3FC1gr1R_5~Sxe6QLhl}IW$RHiFI|PE*@R_^PzV#?4k-(y z2wY1Bih#yXA36Roe&asqj2>-vd2FwA`TT&pr{d#61yHF}VB_YERBJ*9AYd>3n%nDs zY1%vzz)8r(>|f6ueNSR2S}j<`cpEl^00?`9yRl^+d%`_aHowI+@WcYu5MA0+O{tY@DvO6f1GUVZsC zU10SmrpzLLvggOEUytRwtjl>_OD6LReRP7uI=t_`ECdk7DsLj|TL}>m$OVi^*YS=g z2FZs_y8spFfAM<7AoBk$#v|^ftLQqlv?~B_?F|>=VGl<-z;V)jpy!Oj%b&!) zt^ie=s)5&S<4AjQ(f4%>g8~UQaEgnGEFh^F#RW}aAasCX`|>?GKVG5;BuO-1!%3B* zhWltps0}xr7Q6%+G%Ob$=}Tf>b7>WtunJePB~Z|Bz7n(sas!wUK@P_DPUr*{|A&`1 z#F+0lbGKHjKW%Sy{s*~0ArRucsN(N07j@X>Hr(r`cY+HRz`|Gy;(X4gD1v+fkspo} z6}t^<7!3-o29L023ESuf6eNJ{Kn#Q%R`I=TS4+g;m9cXsYb zfo)W@=UV`0fu&j%c82Du_Ap|$pJS5zEV%41b&#i9kwKpHCzt6yj1 zHAMb2kllxt{{dEg>(ZEfLP%~n8cwnWg#JL}-+KCO_+b1>xLl60R05z@McAm&d55X< zdT|0^^4BscC2Itnm_#$MnCT z({)9U)-npP3_WFF2L_|Kv85{U`&TfAQH|^sPH{72OQR(+>g$? zUEhF)ULSvelWYmg`%Sn8CbDgUsTSb1vISN7DeEga_|&^?7s@HbYpCPax>`gB8l=nb z3*!JG>Q`S8W9!51)N2iPG_hJtkouHv5GOyemr)Q=@D!-$3}}sHrGI*O4;uDZ0NP=) zWic2#0*L^vYW!_^ZKK?WEM6WilACKK0|mfSt$E=DFp1rfC&rchd{v_bl|2iL#YuM~ z@@e$(K8M7I2s?Z|pA+L=w+U-@D|&BO^Al1p=o>qxNhLkE0J!U&Du2qURzFAB8M<@N z)id*3Y@B>TocwdZ2F4Hcv4_nYajc;O7%5Bo!W^J#V=uHZ`9>wxI#+aXbW7}!Z+~|S zzVstGsDJVkaQ#RBGJNZse+E#jLd9^w#sCZ_W1(#`OvH4OZ6A|{wy#q=5L3b$pc@7* z-Qs%|ytjQ9G|j+s_+kv9WCJ0n(kKE;<0Ygf|)?%UGrvO*jELOIZCO zLI*%7H>$Z;;_pl+-S_N`Z1|HW_T2N&T>z!i{X!jLj_pP-8lCZfv>apK**CcN{1{}f*T;SE^+Ykv#c_a8uOzbzK*t{I>LEJsa^6@pJw!l#YxF4qsyFvITfADhASo!Qy=>`M>;I@}4VJ80O*B|di_xyzU z=PCfIe&cjo+&=D%dwVTtHd|0#ufoR78*ncW!L~0e@|78%&M`^GF_mvQHs~k<%dv2j zz1}|LQUu3=;XHRrg&PGSgsDrWw1R0U>w2n$nbdMp;1tCPbM<~o%YtzWqyV7mO((O7 zB4|C?7uWTrng{}k-~&$*)(b4OXCF=WC`N!CyCxAF2M-B#CrNeZw)f`_=jH%Z{UiW= z@hxtjG=W?ogWkP?*Y%f{#Iv1&Yz2SpRZ$2d_z~!e`?4x4o_n5X198~+OjD-Uf^A{- zqvewe5cHtuhazAa?yFGS2t+fAiQ|~+KMA{ou>iT#Pqp^_LAu{MHvv$(7qNd=^03Af zDF97DyT)gA&x9`ZWOcl2C4)V7&;@P{F;N`K)gr90HQ3qR5%0J01UbD5SKSUUrwb;o zUo9blNH__BU<4V!-viJ0@Z51Bc;I9VaBL1b_I~DP1o4XaI{HRk_WgLf;nEGPLmV?G z3_BnY_XZDLMv-f0*#Ci+frsIZrlreb2G7D%%s)2)RDzvTo1-uOzl~{Hk3U{gY-sxy zv}3aB`V6W#w!YsI_w`TIpNCXtCaG3Zxjzk#PkEtExm?S5J zh3$iiJG!?<=mt92ya$?51`9{#X^AzogLNn?-^P)I6>kx7;=MqG(K}zh`{}jn!g>GB zpEgs?KNkTI`PE?O)Ga`Akg)%KOfm`J1{=bAnSvmG5|bjJ*xA_u+mY`>A&lHMtYu7C zQ^xijihy7{*bY=hkgsFgu(A573a!8eLXZdq{6gX!t|v*f0}({zA0vWren|dw4oawk>o3jg86oY<#aAss50BY(c{ZPx*h? z?C^zie|OhRHUG>7Ks8d0?V8pB+zkAc_`QuuBQ!BztA+vfyemj<*yEjh2R$(G9YyO& z3r3?6jLZ>~OJ%sZwi>kqxuG21f~yz+Uvzh1&5?bYW6#eO$4)@VpoHT|vN8(j)CL^6 zAA?-t{IuE)2v@MWxjjK2?Y`CQ{=dY0XLi0OrLudNF5hP^fYRx9T*03C zcaMA7vaq`I8mwtDX>k!mzh5kgu{Q_^Qdr~&Bm`^3!5)pPRRHN?afY@JGoWseyW6@sQ|PLKzU-vlr7+A zFs;{)dud|zG;9rS6^7BXwoyHHGZMkj9E$2EHy{!4d>IDqRzd`ilrr4Kam`181Qqv+ zDn({GHj=MJBCu>5bWIZ?ASf`s9eIIsfpmNU(fhrm?T0|};l5rsc%l6&-o6_?Kd~9u zscA~!Oa)M2M+J}qD@gv&%rmiJp$q8p%i9=a{j<>T_oHha1yHQj!5W(A1}50H6atCh z5n#*U9dW;{T5uIba4Dc56hRhyI*CB+g+hpkJ_hbYiN^YU^eiBsF0&Y~8s>iVj-_;f zO1S`g``x*dezpQoQ&)T(8yG)^K9YRuj1z3A*njOISlB0s^bO?QGBntNu>fpm{7D6d z*}=JtF)&S2MEQ~l)mjyWz=Rk^0}VJI*V%n_S&o6QR-Fz;7go7U>ar1IWMt!+lE=-R zkm1opPyfxz7v#4EpI9}F%dNq<-MEfBJ8KjBfoh~m`k4uUdjBb^pN#bOJoBy?(o>t< zMKTzC0b1}j)KLV5sq;Ng5=K3ns*#U4GR$54zoS=Q=Y1gygfumam;8 z0IGgNoxVGXfCNB72qCIJ0EvLeCnpHeecBabs9ZuJ7&#GyPz=*RLZDfjP=&AIc-`y3 zO^^xS2*wAQN@9(h8UN<}Oby&vfo`fxiMbCN@BcQE|E)ziAOReA_TzBo0&-RsJMa!GynuGI%?;3N1@d?ytxy3PoV#Bnu>fE>cXkWSFGfT*A%*fH%ZPJXmj*TJ%^ zsUtW?_gIvC!l?xiR$mA&-Eu0pzkkxCc=d;n)h~blINb8KV8^x54GQQ6g`i@S0&AsM7f`I(p<}Q?SC9rHM zs%c}!Pnvf7X?tPv38xmoWc3><*17<%Vru>doFmqJQ$)irz+0>yJ=d8e>^Q+{y8IFr z>uDqcjs#K*Fai;f7>*-fI)t0JXZW}Obe}GF+MV_rNc#Kn_mgcTelOlT<9ibwix2s! z@^dBv&|*n)Q>?}0-on+_;?Fd1B4J2GL06!ZWl#y!r6~%aaR&*F^`mO#zZLI z02q?JfsZ#}3;wry4H~Q*?Qa~(K+@`&C##RK;P+IlX(Yk6JwYxXnZoW}H#m1J7gYK5 z=Q(4UUEO*cUIuvh?!NgZ-#5RpT&$juq~rk&OYYU|Bl!bU7$_0S3Mw0{Ddbfh6NRW%ie{C+k?CM%3McevArTv14|bp@=oN3 zE-=gTzu3D6g_jEO?i2G4-oE*nr2_1kqf{v?lnc=8nXuPi-1g%*l>k<-B6YU#a;$#1 zJ@4eDga}w-Bpi1RMUg$gJRALU>48zA|QRZHvCN-9H0TxtfxQ(aE zAD~u+qJt6d0#lTzay8xr&8WcV^HLZ$ipleQ+P9uQoshWqd{`FZCN}BxevNqi&j5+Lo z7N~C%Y!rkDqbr1>lpbaRo-kb?WW%~M1 z2*$tw*KCVtZlNZ|8;S`xKw2;7Ne6&obFOd3>c8^{1pueO_Rv1f@~Jqr02ZjeTOb|a zSd@;b`Ve9D(|D4Q2uegg{ui_c7Hb`oV8ix!Tv~-Qz(cJ5e}iMAS~OBE44w8Ht+Va@ zAyNzAW&D7Q!=XE;6-|DwqQc+N;}0A=L6V2O=txdM*Pv?XNHSJ5R;`a!oeM~Fkwh)v zPYJ3$90jpKzlSN}a1{?70>DQl=r~%Q5{ZFEE11WE;O)lD@6#q6$#nyT1@N$CJm`!X zf8OSsbZeZH@hN$23@rFg@9e7|rl;s!aRt+}a+(du9JFJKSD#YVN+1T7;!D{XeQa=^ zhnrpg29AwI_h}5yhkQb62e8z17UllLQcdYx(ZERzG2G0pv>+ zoNX-nJ8KwkSc-NVG8(v<@n*O@1 zx(Etb{Um^jt|W-p6h)95@ALW`TuoYkqWUBEfmGzDX;lsE{W#pE^QQq-KH>Qg09yVL z@?9%Mrt~jEK>kUXtp1ZQO#~zoWkO%m$eI+#S%LPnrQ1{WzeyKGT~D`(BZs&5hG&1k zDVQk$1K(PQR;mp>Kk9d@27|v{!2isFDIQRJW0UHK-gU5m@&&a*qPz1p}c=#WadyBn-YZmP>p&&omS{U;auNfp2hB>o; zuhIG%2i_3(aDsa}M<3nYGexd00w=bBwDuSi02l^+ybXn7ArgUwJy-XWBB&Xfh$SOg zEz?{f?Dg@Mz}N&y6MZ^yKV{uKU#QGs`-J;X&BpzX`4uZOJ^5;Q8mDL|Y!-CaV`VX75`17#*Ntl*9L;(=_kHTk`>&{%GPsop|{~~ds09?;a zwIK^Wh;#lLjq&Oy3>j9rYeg;)R{ta>t3TfJ^_UBU)t#v9Imn)@{&_UUPH=(N(EcV? z|K0dA)1F<;W-PxP+v7!6KVh~2R0CW;-GP`R=VLF_URo+G6^dmTaTiQ3KeXc*kY`=6 z@Vbnh&T|;p*as^HqczymJ<+QDm;(`^t}jKPDsDuU;*A|j3GzsDm>aYIU^B&+_geT8 zE0fyW5wT2?>`$~6PhPme0d0Rg_1!0<|2A@9D^0#kXMEl0yNffqAm%bg&!0cySbAw` z>V7>iqU(yG2=c3jB+|eZUo&i@gXu*7KUB zYp|h7;8+p0YU&no{oSn#&>!)q+E7pIJUkuO#{oqWV`7ihPC(a zKM)to%ggZkUwS>UzoBbl+;)!&OjDB9pEz)=>RCW+9B0|<=h+Xd|BrCkT6F)dfrasG zs$YEHaW6d26CwabO}XK?MEG#@bKK%W0Hsn127>`~y94n~Me8(SSH^7RGlEEa+O^Me#kq07B$^v{}!dJ7R(%OZ+?vV7*i<2>}os z&S8K)S+RIe-~aZYH$_$GSg@Z9u%N}PJtKTdM;@C zSTqVg(-p}I3z#9-pnJua6|BX2KJ$(;?oJ$^P3iq1yrgy>zWpKp8p|X%JSkgcaX^3% z(E8ilJq2}VgA@JTz!~m>4uuuGN@KgZ4egIUfZ8WtfqK0T^;R8PPg+oasUFSkWy|m$ zhKq6_2ocPHmO0v|S;D3AgVtAB|Ba-`iyghZ6qzG**@(>_wnHLt8gye?>1>=S48E~vo?TK;iJ1bRZf-isXWsl(^%&d7cPkEmnQp9h6Sf(HLa7Q> zwEp@hufpJ<2VLHS%B4!QNMVv}rfIM}%z?pB2u=rHak|jOvs6ks@M7mPSRjIo?B~h} z=Q|>W8CE~h^9lXm{C4vnh~OJI zZrE*D)h?!j!k$k+^5JXxs%jRKmhbu}^vDSTP=kA(Fta>tU-C_ps1J&WU!NQwWfk~w zT=J4gsBHn1Ujidv5Kce>0MCKyrK|uATnd0d zN6n)O{7ev#D)vwW8C`+f;eM;$K9qA=C^!Rb2?ub9o4UC?s74M-C;%= zg^Zd3!!SV8H4)kB6*y#B*mo3o-*k{r1}$5K?7=?pA%{vfhs;3~UdBTr$KfbC7Nrt} z3f6cshL2Ce^ArA+x&a@QRzOuXimYQf|J6{{`xroh5AolO&>akj;^Cuh)U@-gd5>_S zp_`Z&6U)93NaaWc%?4%l4z`kqD1!Cyq1$T%E7#<8w=G6iT@vH+$})7?9pED_LNl}@ zo7(xR2otaWIC!=_Y>M%9r7y-cr+uo#JW%EN^kO;wc<=Nnf4(qRM{i-vT@3`Fvvfb; zy3oMkO^i1Z&wBwurTP&ORBKfj4M$Q0HW$w{^{5cy*v>DD@d?PW5eQ(-k-}Jm{?v61 zwVt@P(G@n;rRbRvn`;ev-{0EWYQ)zwWA?c;b)2xyeh2g6rc2;CL!EbG3!SpAr~d&> zI>wvm0&D03Uyi>c5qK{4`btfRfP!DH3jyTvIT5452uyB*?bs)ZAdW{t1wV2m0S)Mh zv7*TPU8Nw#uCbh0$B*A~&)nPj4IJN%KQssZndk7Galh~Gcfq#p^hrENq%!m?D3|Jl zWUTpj_;GZPe^*hpo6AKFmWxtNm7v5dqXNU~YtY0oj^!)MV4@qC=mr!9{=TM5A?R7$ z0}F~VCSodL=XD)dd~tGayvDJ`fhEu5SfFFm_8jVB0Q>FzH#Rpne<}R!~@GHCam zZU-JeehkkWQW-jlS;quoB}Z`Q7r-`C;F6)Rzdo>JQcIXDBOr)59293Hs@&A_(IQ1r zp@2>h!uK3>4Ns6bX{WyL<9sFgtFc>pH~HShy?oz|!u2c+SCB7%&llvk+wC{=`TSD{ z8CCE@j*BDko?r6Q3jkz66=JIxKA`WOClDW?0RAeD%b^Hf%8xfA5nOW)px_L}Jqh8! z89_b;wE#`gga}9!B!tij;v|HXEW#g$d^ff*#&jf|2>~#L z!GI6`zulePUm^0tIo_cMo_%~cfkROojt-&Q?E>fgS@V2$0w5Y3tge!g1qI2%|5Amb zX1-^7aFu!X=N-?3K6izRN|<;Wos0)LYO@(1Za@bf-fl;UNfyAh^J7HbRTR%BF4jq4<7#e_CfoP zaIz2Wbk2MMEZYLxwjpQWdWXxv zy|n#SIPG^?zx}V@g~B^@g8~o_$pON>JXDWpC9}Q{+tiCfKH*dXFff_5m#!q9xqhlG z|M692^v~FEZ1byS1D3NOf>6k6P|uHz$}neOZy7%#S#P4O;3rjxX z)B+&%d)-I`>g*PI6pH#3|G$gzEw50mxd;2#iVQMT{mnz{yGXL>NK#1vKFA*+@<|98 z*G2(&;u#4+SCR(^9NNa9KGXVWXn*tI(D}-CkN?hgpZ^XfV83Rl(B^XHVezscJ`?~U z;R5)G$oB)GnWp)|l21_2YNOo`AA`;^U=%Ayet{~5fVg$M|C%%g;U-bSEFL=+N#F+_zu=RKgUj5XoP`y+=@-8I) zxci{5eh)8yiD%1qFmB`ZZH_&=XSUX94hew=C+-yLV*Gxy@o*(CpY06c&RW@Re5-9e zd^yJ&D|v=iZ#GuTg_-9zm=po`roT`0e0Z^Y{v^&+0EEZr1cbNvR`h_})VGYOi;KWqj4H^s3XoQP)N6=U+r#~|fbSPW^tKD>x!VE`ocICzH`I9(v z0T8B%AjAaGpaeZTE{qsLa^F19B*Yyc(eDGqo$BL6K0!IJjY$OEL09(7cz{f(WmzIT zFX-(7`5nsz#j`{hC{GJVAyW+Q@Td|EYz?7k>`YDsy=NJQBR~$H(>3ieqJHnn{iY$| z0K($+APitW16|QY@FD+Lkxw``0T8wxZ$amvGxeRW>xqhwSJ_3w2#&#}7N_FlR{0^$ zRR9EXf=LmC#K#3N#r`i0aR(?&afy#B`Gj*90AZR4q5~-M2+xZHm`?KD$C-SBdQm?_ zBFL}|REm|vb5Hd|^~W8+axBoZx;&kCy5HqUXf7XKkB*&Zd9J925zg0wXRVzrXm`68 zm7-^Y3vqxDTaUMnb%JN<0MoGf_~TDL;ldms1UUhrda0Ut9(RCeiFUUmi2sW~KHl_ho~UPNR>MrKxKRd=zAUF>F)-7QhlNJ9>WoEZ%)c_8en$GZl04cG=W@cP%< z29_NAj{(E5CHcp!jrAHB5(aEzu|EuG2i^r{*7oi+4S6*7N)U(KU2#Tgk;7(@MOIg_ zs&~M3y z;p5)ba`6iSoG}P|t9}LSx}84rkp#hU2ZCPnac^(oV2^tPpT&@!UkBZAz_5+!gN8i*MOCg z1k3>4GQrRdFqs9GVL|AJ*!q~d1`L0PausZ=0;S3tSgRKywn`9o4jU`7e-%6YVms<;om-s3*e|Gx=PtyZB_ zDnYeUh0$nqe~S_LF3LG}y6IGam2B~tm7M7WFic5;9061qP7UnUO$bNbPX!6I$Gw3E z6{cx|>$>2UU8vP+>GLRxU~O%!Ft^oeiDxu+dtLB64{Y0pPNxIj*w0mm3D5-rRB%1L zw9jpb_e|3gB=EcmqE#AT8}`gSdq=y_`Q)c~;XSsxeP#(@T3C4OL>?m$=*1L`S_O3M zKFf9?3VqA~Y850!%>}Du$rrIn+r2iJIIn`;JPH5~4)&p5uL~l)yF0)+ft+iX0lxr| zp98j(0ZIxml>npwv<4EuGK&Nd^oeuT$Lr1qZ-Up}dn|P{9?MtnBM5l6RtJCVA*fhf z9-VnDKcH^6(t83EV32`mSl}P;7v3T7S3v}r8j3*EA^|<$di7^tdTb>4%n-oDPNKBR zvZJhACqB%u+(tnGSn}OyJV&;b0!)iIH%^d1Si*;IJ(6>MrU+0j*TJ$L4d9bO;736Q zc3uHy#*zx4!d~5ky3U}p^~NJR-=~@YB=@#kl{ZWdQ4|TkRU_~KmBCEkVOUrjPvvu% zTIA_Lpz^7|FbicKL1Bipib#u3Uv3!%FpB50>l;vi=EX;*1fNO*5b!2St&({vPJVop z;d_1H2xb6-6Th*NGySC{6d)yXE`$=`_$Wy5sUyH7`1w$s|0u(O)zz46e_ z_vs=)xi+^bk3#{3_glChOUiu|jnq$9A@p9>%k}4RM>`S3KZ-Q?k!e`B)C7D}f~}(> z@Cj0!q5u((Ac`Zf>l;vi=EaAm1doLPmo8rsx%2ThG@DKF%y!&UyZn(W0CvAWXd`wW z1jEkcuPl{=L3g_ZU>K*02DrA>J0}Ab@?M# z0PKEd+JXQ&jv^#*S21ryV-Nh{2y!I2Y?a(salGk|2RD;ve~I}4=7-`gPM)5k04WKQ zcvvLRA6+#8>h*fs`Lp6vr2rTt{dz)zX)!$NOnZD|*lQ9IUIn}Hhq%Ze;v)aC_$BH5 zyaLR!fXNUfxcci4^n8zu07Bw*3;gj2)*5wiPFfiJiYSwJOjzV;hSQySSF)AhS^A(9BH^Oy!EjjM38*i^#;_RdH%CS zfcols>hZHeb=ap(0n#X=04p1iaTAg~cRtwzuiH(37#z37*u1k1e)B{1xPtjN2H?Kx zgZc8jj?WW)k^mI;>c#^jf$^~Gb{g=LG0*4c{TBEFjLVqMVP3<$>N@r{+qU1w>#fAM zDYlYlfa8|uL4cPZ&)pOOP2jr?>{7fQ2!LNp)_ldTR>A9a!LHTBba$nJ>L#s$4?7Uy zd`9omQee^E$R2K>M!k~kZMNFQlfUqc1UPm+eEYued8h;+&nMXz8!jhA2uCoh`^jsA zaA5_Y3aw*a$NZXU*-zv6bp-v2TeiV1JF!c>OUL z=FjoE53*xvB(fZ14l(8C2~1yH5($0{^F_KL6>!RyAb^W1ph%D>00okO@TK~p4-#*lqW~CB zVg84BeFev_BY5@NN?lYJM=+6ZcFD%ZiN&bJTKc|j=-59TOx%;nOnP)}8~@w(Hl7h? zPjkxMp=vYk4`SUgN4(@T@%HC<{imqZe}dOrP!fCIGQs~lNZjAU>u=B*_jRcP=ISO~ zC~MH^BMInCon2s+HT=cN6X6=7{ztgRt4N9872r=a01CfqdRYU#SU|f@cJLx9!CRjm z0+8qDLpLOY<#-ZY-9(ZE!6H8YO-$;Tf0J&i6&IY6iNI&wMWEXfoD}r5c=&zBnF4=m zu##IY-0M&UsWe~0{P!?#f|T&rlPTLluLWjxt*}mD)WA2oc-52V>bK+%7Vgz@3u=Ht zRzSKyic+uyrm<7&Z6n#F9V}0R2Tp)#o==^xNH8rF_^QjNkbt~a_@;V5;Ma%%iM1#a zl+4UDosuIvC`SN2(&z3U2{2WDBd;qTnDz|_Jle-i9A6E*_TR+oZ-}2JNHDZFL9aA{ zBlvnH`7KD4J|O{izaqjbWD7QQ{}$e+nvT{`+~DN)`TddLff8Vv=aVcF_$)~XM|0Ph z0G~SVzeEtI;MeGZ0-l1#fM?*VAmH<$=fh%he}3ejdLBWB&;w@I3SzB(SH8+l9Tt_Fl|GSvKgDI+5 zt=6D|@0Oi1m}vHnV}s+OpBox>3VOa}AlYouC1m|NeoN;%Xn14b4asSY3K6qdSOX=G zOV|bm^dcrk5t^QCMuUjXgBj^1)Drv_btLT<$CxAgcql%^!vHp(+<-4%wBdL#hU1|R ztB!_v>4Hdxjo(K*Fd)Rw=(r#J9QUwaDtJ~V?=d}YUJSYRZ*b0U#@s*R9QS~=Q;Ee9 zwM;WEre#_9tqORZgN1O@9|ZX1`FZKjdp>obWm|>k^8yv%Dt7$ugY?==@)7(Rri-Av zWt9$sZ>A|2oqQr2St{e|I-i>>3@)zZ_NC=Yf`nm)l_Y+{E(0sqfH^XCr&`#1bLT@b zera>U2Fdr$x=g0iv;&tGWJd9A3$PLxEqb)llALmlF6=5#!V+Ed+`>pXE+PT~9#k z$@iyuXwBB4YHP4}%w^{%;O7ZJT}nwEubU;26prRYfctlAzrx$y^gMVDeO`iGz_6jm2EI6GBHIMMRGH!))$=r_5P*V6 z&>eH=jdS4ZQ_90LlP3~XjiTuXW>FPV0*KAyNJ_=*lmr&b&O#(m1W+V!E$z#Ac?-$6 zO9W)PHkSbT{Rt9O&VhHd```&+;^JUbA;QB%nh9h4ZoltAY?RRD7zF5D)9%aV27QdKM;Mo|g+fqudY#62amWD+^>8$)ow*9`Dc zegmw7j%(2lDT$ms3h_0L-$nn%O4vq2`n_d?p&{{yhj*mw29Wc*NFg1-f1N8)oRQjP1)=db1D}Oa3)7o_eljBH}mi}(3wli^qvY*a_$`t5@$ zB*@zWkHm9^il!nOwR8JQED0j{TNub^VOxSPs*j^Be-|X6tRxHA=L&m^H0x!|o0b)A zEmiSQ+N-^GajFU|O#qVqK_~N+AY4jB{@R5L8#ngvw(`$z^o}!T=E0v9`R<=2L4MA( z`^o3CVguc6A5}mofdYS$G!yrV2#k9Owx8RZnO=+MlO#|;+vt3q+cNFM1t&;g@d1(q zmWxvm)|Og~YJFaUijj#U(5gO9DfAOrtBQowP9_=0TXS-ETLtT(4RF~ zK+BRHMWeC-1*($z0y%_aqsO!9#8B@j6J%PZ82iVG3hZ=X-)j_0kgFJ@>lk}H$^hpO zU{`oDF>J$5zr{IEzn$)N5}?jbW(h=uN~X5VAN;q2q5oeLUx-ctAUm^n@Gf}$&WvAA z3j%^U38nPKQ%?!-s=IdKrTUZ4Ksffm>vo`jcmRi=?1N<*0({qXz_HD=t3?usIq=0+ zG%YP+9{d#8)VFbtJ_me7AT7J6>niS{KMrAI#fIUSL(k8CH*`sYj0m(B+6RL;j?mHZ zyevVLhdAF5`<+y-IF9A_jBM?+Wt9RT5gfk*dK5rpxezn!3!F!zIO1<*^W#&1%k8~# z9wL7P+?NDjjsVp8sTanJr!F=~-T$4&Q`f*MR|Nq?`k2GMAb@32nou%X+Wo3CCna1F zfKnB=0J4^mfCw-T{JaLToUAJnJY5+>7YU$9z)omp_JByh@hrg1f&vrRiU4XaQ4|S9 zcw(glqc8`ev4UBa*GPmIn*f0qiQzEEy1~QfC?mmXO;`-8vQ{90z7Y7-{kpXvCdLJvg(yI!-zy#Ry$;!OI9rdU2<38`+Woog}`fU-lQ1mGwYxq|2C zyFO14Epe@!CAif(bO#=i0pPdH5&U@HDI6~kytvjR$O3G`1y0I|XCx!!fd@g1axUzY zNXOxWb_8pyCD?q@fxTfHTBBn5BB+B29$1*-ek}HT&8|4qRIf#$z7!n65Z5ZN!w_yS zVF3mC*Op{J{CWKEKdIDKRvo`oa<9@bjDlQ}M=Icj2~d%XeFs_xuH6bVulm^XKZJ)8iaLg6vdNGv713`K$~ z(O8Vz9W@U@jk7WT9jO8dc|vS$!-fb!V6i`U|LD=LM5q?bv|k3@xkk^31e9fMkPyjz zpGIC;P66y>^x8XOJe>eq#>O)Qz5G}54{p8l-qeX*B0bpAqv&po%}O`)9@} z;Hw}K)Yv$^S0u31bT0lC_Yx*I2@!ax;T#LQ(Vt2L1pZaDir2*4z`I$lc;5=Z#*{?h zx@eS}m|_mVXlYP7AN*(u0+2uJQFE1hZKN-?RJUvx zj3d}S^x(O24JtVTScbgTxs-JJqoSt3Dt;y)L;|w z6oNna1AOO$Dcn5~lW=*R{S~>I~&y)WNfaZZ;AWJT46(_yE=tr=3JWr9x3X*Tpw2AL<4N1UK!t0<1 zuZXK)@VmKbZzY+$goM$}JaHC^sJjor!P|vra|vLYWpHbYfsqw0Bh1=b?XP$qI0XE( zSl_q^hr@Q^SqBL)NdoHjJjjd4`ZOZs*HGO*{R|T?&mqBP6u{<61iMHAB7&8y>GP9& zQAEh^gU9MeUlKu*;T0qR$^7dx54a==1o)r4ee$gHUa~9~49i&P11j_!!=HNU{D1J3 zuRQR8rCP_yIonIGy9;Vsi-QibE>XZk$Pri%T9 ziYWQ-5(#wcB|!oXM-ss>BV*{L;A^Mg5zhhtR03daz^&Af2o?fiE|d&U&Cm=fH83wW z8uks2>+BsK6Pj}4rUTa6CIl#dI+Cp4>ESs|k$5!di~?|N3tY!a!H%(t39p^$kk8FhsuJutw~iZW0jiCicpok|1Wliy-cc4`oD13N#4 zn(5A}3 z4$eaXb{xu|R04wU@4r10s z_m*jZTeeZXkO*1`m+AmJ9r=5BqN;{?hX}1mplg{*@M24^$NuO?IKD5s89_$$K|{b* zrp=mrrZJf@s)pbE8Ir=AiSb;0H%%MA7tNb8Z^dt7-bjI;h`~`4+|_k)?XIoEpw%q= z-s}vZ*&e{f_4?HJ*))@%HZPI)6Vg8Me)_xW{3&ak7DNJ9_XPOA`Lra#KJvOd#ir?d z5zlIif{FLVIoz-uyRz{sQ8@bNS;uON)*r2P1U@W0{bX3!{kpN(;nPh+dZ-)p-^B}S za2g4S0JBIyDxjqQVMT!)r+|NgNK-;70F5+zH%9{XK7miyJcl}wV3I2c{;vdHC%Zo# zfZ~4bI`G{43tIq5zmP!OQp^|62sJF`C~Q1_#nMaH%9akU#lRbl!1G36+G}`F6C&S- zU>t#7a=~s$CGRd>DP0zo=AUQ6_f?U_$?hP8%xUv z9WUq?gXSwGQC-jEdIg`?rR?XwIX7&q8`f^6W`lts8_38HMvOT zNHoUD$?-9;SSEyhw0`3z<`E`DQR4NpQY&V?6k((7&D`$H6PYFSG)yp-OVh9@uTuJ< z5ACk>_IlNw`kg^ns)JiQ2X1xk#P0`(J=nk3om=xsJ6H&)lqs`qBmG^=uIXFzG9PZ; zg-hoxaee8WDRPlu#qD3~jo~ULP(J9GtpErV5(w7Qf5)Y1FVS z6i{jR=X{?!zaaPOcP2-DcF)K&X>suZcK(XX;CL9pN|{03kSO*8xek?0*W{>FKs^@` zd2rr^qgn}G$Ar~V2sAF5rc;Ap*o9!!TbuwS|BhRk*vVo+(-Q)`Bnu*+69FjNtv32n zO(YS(;}UFA03yN0st&dz2|`350`!L&A!-$SVFJ*-B7ka6B0yojR_t=s{i)X*MU^m_ znSOsVV?6vc0#FbMC^dfs8!m^cDb0Ei>S_N#BIEL0$ulHC$$(V^^Cpf*t`XAx!s*G+ z&$Iz!Dgj8&lNZ5YOA!F&>oSMv-_95T(CK!;MMc?IU4xFt@O}ucg#|!Pbijr|Zvfr> zEx3MV6JB`w3S4<=1Gew%!w=qg8{YkBUo7(xTETD}AvsOhe4?@Nek|3nQL&Tr`y&zo zPvl+C&P(^YQSA7FJz#{fDpW$K$$p88)>mIeP(~hXfG3D>%x%~?ieRTL3E@pzf!Tn% zGrG3vdROsoi!IlWuz`Kt#4UCcq`hpra}>a|A&NqoF~W(mzC`{q7VbZtwrkuf=?9OVqlkT@gBt>KxJ^` znk$Y5EpJjm(E9@!nx^R1Y7aD9N6d>I^Sx0Y}-tXP*q}NIb6j)~o1$cg){1_)KZ5h(S zU`hw3zhMMCDDEklPtB1JB7w+Ku?{ZY@AnxT^yT{(-I4m~2Igz+!{*j9=L-UV?(Zky zrS8wiLUy z0A?nj;vXxq;@nUYLxmqEWKf-N#|JioaPAKYoC&wIz+!o0?% zXP~|FA$Z4G*Q@AYopus6xSS}#X_4>X(?S8Sf@;I`;xi(J3XTR#q=>=@bVHZ-xy~2g zjVD0UrO&IdZCfOPPh%dTby$D8bJ(fiW&bSTxUPHhjQN{Vse~Ic#0Jljc))Kn4XzZv zka(a2PSQA87-ml?Y0!ER7o)d@)eAN(Y)Nx(YkVK#)pw)X~JzXo@ z$M{Frah$X`f}LK|?^-Oof5M^+!w?zrFntyTfzv(i{t4%NKi{bviN*UQ;~Q5VBbiwN@(Dux4_8_EtiL`h+VbW<~#a;FiGPRMzxiMhsMF%#e@ zkQMNt7ZpMPkyKNGPw)7?FCQiZjI<~NeUg}ywa4E~R%l2%?DLp^Fbm*$LEzhn1LVr5 zpBe547;nCP8~*U-8?bkPDEfnBx2OsOsRlu}4L&ACWAhoXtM#etbiz8k`RCiPyWd`V z52qC}-{p`ajePlu1KN%M< ztYtUDW`P7j((Q|qfZ{X~L~&6zse4b8(i1_zvLX@Y#WX)YOEl^YBEYi`WHFeufJYRz zU63`DY$CvQcfaN!$C&VD>kCS;w)(Ns` zK@_COMcNsNWX!ODrDgB|MGyqw`#zw*!Nv6&Ts&XRe(a(plw1KmT?d0MIz%`9Id2DE zLIf4BdEBhX^N3l zVG{|ULMVZcb}$~KBnSqXw_C29tL%UX;9>XLR(1{|fC^HANy(oTDG{(6X@3+1JkyxC zS0qq1n+84)`TTFpvVoieJnS$Y&1bMX$38fv%&Vz@!Ul4op5;lW3Ks+<#d3Fv4A{mneqi<2>NgzPNTLK?p6JVN}neLJ1(sdNbwOPz& zD+gWUUx0I>n0#HGbAllGd&QAC-H-STI)|Mtbw3J5OVzt|h|LhrfG^ zH9h_b=HJBJm^DE$R&{?K1Qm(|^@VO=?EX@s5Zzsf+$ZEd%dQx&KeGY1 zKip5RcXsv*YrpyPJ=kq_;n%*jIr9*c3ZRrpSOCc9rhzsP`ZL!E!jqjDMfAS5SYyqJ z>({O?-k`ZyKfew?_~8!<&rVoC5O~E0OkZYi|1Wyv+X(2!GB1%tPLe>y=J|{OBF2gQ zCnVrGIn0xQ;;(<>1wnxKkPwO#Vy$~U__JHPLJ8LE5!7n#3Gio;fPf|NrvW^T1j-@^ z{Doox?_XP6g9jD*sRURu@WB6Y(YaLAMS@81;^!|WFZCn|#!?A%#}y=qD2Evt6bU|u z8hKmMDr)fuuOpIO0Cp;pRpS<z ziS9n3L9u4`^e`@&s@Q5qY4~=j`NtQ&Ia(4?G7CF1Gu#A z!evZesmoJ`JgZQyE48tdaHUvCgJJ=~31!o?0^oi;2mHABEqX7SP=sE;)1;rKeQ%+d zm_L;OdDa87mRg_3!4?j$VS!$q{Ea%uw#@nOa}K&b-F7xMYnCT+lVImwrT~`{0^}oa2g0t+mx^74Byez%=IrH81e}n^>fR3ecJs7Tv?{wM!;=VyB$JQjPQkq#Kg$vuuD`9#JUqA22^YuPu{8k2ILk9_y% zrwoH&`_9hx@0ZKv9ZV2uC*zDPs5!>%_iq>Ojafj_i;@775;va!>af@`|2vD>e}rH7 zVt&ooA3<#5v2blK^uW|yyhKnm*$!APEP(7BK|REiimkeh*>b#k(S`ukWP5iXtJHzt zdj7h2{udt?54@Y;$qi`@cE!O?#)n=PIHnh(+Bvn1pqh=u;+Xf~gOBgQvzIQwro|tz#;+jaXXs8Yr{u?hoUqn1%C%Fbh z`QAcF?=1s@4Oy*Q?UMwUtM4RbnvmjbntqA`AR@W5#5?Gle+@6!)U!O}Ov}X1wlJ~l zqgafblO1TOG_yo%#kZ9$BvG;qsMhM@x^vtU1V|bc{^dKnuv#mFN9&=|7-$t-H?aH7 z>?}qJN~MyxCK52SgbG)byiUIlJ4k}#fhR~1hM`EqFjA0|C5Y=Bg6jE<<`%*EbR|&= z6KnDf^!}~g-QE8t3ZhnOJ=5%GBGvb)`*-(ug@rCmfOL{!orwS#$9TJnoA`R30AV0? z%W)k6xcCNwPf0U~030_@;430%ns$N!6k*Juu~HKR*xuQLpWhh@@G08e5x8X=LaQQ3 zKuHi0@G5M(1XdZ6-_mf>1d86eC5bGSf3J;8gq-2Sz&CIaKK=jUL z$#VWGLb-|w0q#JQ6ah7{IAz-cE#}}*C*tOG{GN`+$P5kFzNkbZFhX2czCG7~B&{>Qy4v(Z(@DFG#*)i7_;#jp|4OLvwKT5qP6xT-cIi z0V|=c0Y}F}7!Y}R2#qomBkmT-%0-Hf#JzAlk4g;@&vz_7Ean6u0`z=3C!Lql^E@Kj z`@0|SzKWJ|+p;V$O>^NynhG1a{g<~-fWMdmF!T^s!HpUsLq0#bUV=!o(yX~QIw@Sm zd{IiE+=Y>J4#7-^3W7k4M4GgFgaWXFlrfDJy9%!zd@scAvrP*&FI1sgksaO}`1l-) zI2_1t;yf_Q5RK)190gL*jHC=D3l$?%10IfXe=M~?8V`Fz*uL9?&R{H_HEM3LUd4tN z`<)k&pjq)RAEYuEZ#C~WzlY<|*c+$nvq;i@T8Ax>Q{kPvI~~C{>!)%gA6gC^u3LYn zZ18X4=tRVq5pQu3>LF$c??;*j& z`&JnhMSh2fka|9OE)oF+L0AGaC5a+`3{mJy!k}OC1fb49KHI%_EXI1pnMwfKzv_N< z24NLS5hmtOA;9~$etPRWNPxEngF#A)Mf13OEWjTPM@tfbz_*qIKSzM82>$P4Eo)a0Ez@G@wmJSV7j(6e55MB0&cl5c+{20Hw|) za6|%;z9fcF0a_$b1_%2GzqkG2_CLxi!ZLYycsR5BXA?lPWkz8_;b`HEBj3a`e;W_>J7myh zG~kO*x?tmStz!>?42l~tN}|}55x!{KhA0wsiK&~C08}N>ED0gBydvmn4FzeKiB@kS zkxZOt!n3O;xFsq&cEg~LMM0k(55XTE!+AG^p0xrYt}!0=fs@VQH$yzKN@i$aRaW3$ zSccWr75K`fbMWNa3LLeL0cXP?(6K@#X!Sz)aK8_SeGfRQ#^F&Psw@)cQov75o+Xvq zLw?d8Dfjm7{!bsi`_u0kIviobA{kQS>PDLTdv}0yzAOQZ%=dNKWeX=`*YS=28j)DV zgt93+pzK)CY7b5jAV{P+vw#o`gG!6;W0+~jq>7*=ijYXE7!yKBNtJYWC>P;-flTrgC>emvl+Z}r2^NkJO%4W0E#A(AVAW_NPJzF zr92#luze`ifJOrqrGr+~s7OmWEkcRa`}_O*-+TMd-+pa0_P4wsf<<#Q8p3$&iM-c5 z5cl(9IstS9KMrLI{NlxvN9PcDA^=^Z_lyPbqfsEnDDV+zc7g=1>k0x8_F*JRKm?Gs zl37BY5Q+pufYf7i1Q3xUKM~=Hb0z2wf|LY2l=99>t{{ORU+++M5Gsixz{R=+HHX1U ztp;DZen~vLb$bVfepX;2fij>D5`ps0y&i1e?FkZ4c&H9lXF3_0#{*QB7QDap{&%;w zw!Vvxj)bx<5uD5VbdNjG>vm3^KidLGO3tPLDE-zqF+q?ZlqDH?s^9_2J3m2!tcYBI zKuJW%t3V$3yecRa5R$4f0e&h56Y3Z85H{CcsJf&!h&Apjj)K(VEmQ z0TpKdVE_GozyG?Jgaq&cj{AcaRoN&bS`1bzF4W5waNPF@yOSXabblZS7>6TaRg|9Y zLcn#A5!R*bR;c#{_}cTIgX`C>w+Dm4G3K_Z$K0_Dpfr(;l=JQ@)iT;`35jPQ ze*;1Id7(`wfSqeeSSHB4|3}Qf4b^qP%3#akDZQ@z)$0`|o7f(Ws#ADYue(q~nWdmn zx1>$Tpf zrE~n!+SG$yxlot$$5{#eAzB=g*z0#Od+8bT5rjoas;{_Uqy14hIR574GF-lNnQmYI z;g5d!pP@beH-NH9^10ZOCm z7G*OZz8?wj)kqPAQjUoPQ4|TF(~&2?<(_fQ3nWnClq@Wl2fy~^P1r>OPzOSb_xS&o$uR`K=ekoWo8ZLS_~h?Cy)n@t6DbM@ft@mIw9Gz+b#?+^z0?DC4Uz(w9%)bw&`wcKqNo@K4rHkj_ z(wYl9AJ<@K?;xA)jbMOv9iX4m{Hl#z8~DJ+vSVu4!G`Gq_hs>Y3k!;WTuG@RZHl~H zM3gN}YCv<9B9IdJXi3T%1W;xMz~&P*s9Qc4Dxmgs=bVRbnpuA8&0#r{4j) zQY{>IaEwxKNClvA&>CUwvYOdWLw?`3z^(__18ZR0HoWlM6_oxeyzxP1i|G0A=I|W6 z`N`f*=_dv6VkwT)Kqbq7u}{|~l*|&K528XyAT_3?(ylz8lt6Vlb-3z& z6?t_a#VGuqs{p-QNeH`EuR+-^LC5pqT+M;^_Bzn&d2l$?q3>~=CtnN=tPw|?P}xM{ zUWMvKp-3(EAr2*u%y!|c&piqEj)!o5r7ZI8k2)#%l<~NG6TJ2-5PDn47;ue9s7#u) zN34Zo7$U<7Q5yE{A^0D`qA{BQ+(&xh;p{R9DPJ_{@C?(kS82HeAASy@@bC|~*!IC_2rL4tII=NypTkeXo)^qi%6{TB3^AHXs(UjcOV#geSZJWyllh2`q{uj+Q~d(5=2We+8gQ82)o4dg*{p(n-SURQp;YNulZ zrI>7{u~N(Cn>tvftiw!H9A@M^UNZ}xZ<*O#@!TkGS?7B8TYetx83`A~5%{4m?gIq0 z)#I>xDEGXFqX$J#Ccn=IHgg)h)F8S4$H1fSLmcf1`^5Lns0(f&J=_cNKDS3L>=yTn z>f-fLMGihX8$=7u%99``mkR~6uA1fgALG?EW|7<{QtHd1MWa@6dLo?>5@0F`>ax2O z35Wm`iUek2If?{CfINsyPeuhW%jV_@FpC5!kO>JmWG1|OZvfl({Ph0Pnhou7_TC3~ zksyYs<4w$0F<(al;3CKhBo_J`m^cyvEZzfOuc873h3{Gugl!-0pBenc31HW;`d3uT zE%ya1xNh1nTW;gkWU=%oL4rg9ND;&VS)vdL_(5kkolgX)*Q|m9RIBBb0F)&0iU5=Z zXbS!`5=@vNOCFG2EJ6ftLct&`-u5FCu0A1bbo=$6HvjbY_U=E4N{!dC`;!H71el@# zQLbJDKINb|? z5Ixs4`EEK7lPnaIyo>$O~6(;~h9?$qqQ^>G156XbD~bYv zg#y0Q?vT%KEmdD6rS5mLdYM%ehM))mf`31rKN-f-Zwy-n5-2}iI0ElA7$A|{x*&mN zI9TjaN&*$nU8;-pd;{M7xG7QuNhjsFEpqK#C4GlTP_s?2Z964F5CmYFrXWFnzoucz zBBON>xN20uD;3E9J{e>^DwYABc`e}fxsyNO-Z&}%3%XO^^ZKm^3O`0sysaY%7?D6TwZdzhaRGi1 z%Fdd!oB*xZOn@aaAoRuWN~;#&`<~w$3dY$*sAsrHVl$=(gU9DvfV5%e_I51QC*kjx-zg?|D$KJ7AXUVAm7#^#@6@5J25T zTe0Elx+BK74%|O6kKXyaY`FbYRKD<4ob^@w?S)38k$vB0DfsGMdA%5o0DsT+8vxo; zjs$j6vBP_ZH#?oqO(fhOp|$O%=PL3oB}_gddu@7ga1Eh4qd=S=XrIh`;If|&_xW+tZPUQ<8sv^@CXZIpR^0JryZUBS%4xYhIu zW8`l9So}OZ_}_4NYWpMjV!P9(b#FB4jjN~(;v0$--L71_R;w*^qF$^j8W62v7NT&N49m znLcj+b+PPVpGY7c*6VdZ!03_)a0BnJ;`KEm1bX|mJov1X5DZ}3bsZQDBiaE;`}^K- zaMK$NUQgB%ae@F76^-zCz2go%_e;-1_qYwWK0FW#5Y#`H9I!2c$3_8W35AJ{_vO1d z4v!ul_!PziS%vJNd0UV`pVsY431D`o@L)hi{#|BOe}*HG;Fp%%#V45mfV&&%14V#b z&^KPo0eDpd?KvD@z?;`kH_}i9UuKk|~vc^i4*e-!kmB`06YL0Z85p5HF znfryc@SA5U6)C`^_bcFO|9)!+!QXpe(9DYmM*y+=PO1bd*c3%rz%zdg{(!vvDO~f5 zV4!as_6;P1knVI=IJ$`ndlP{WevEQ13aR&Z&$9dYf!5-T;qScp$iSy~umqsU*#X5Q z*b)7q5-dOhiaR1h?{&=Az=o?xh^tW9xQ5^p;clW*Y^7@>0rcViBP-rngLy6B_PJtR zy896I_8%$u6c3&N6cZ#^vis-7R+2=BlWU_S2bE2EeKr+%EaC6{1bFY^`~9?dI0T>| z5*%)WckW8zvB@nl&Lo1C_;eh}kv!cn=YERCOw42AZ={}L+L+$Mt>B5xWS8VfR*69* z&fcbpRXjWbQ1p@2JUF2Q_o)IiLt4v2J<)v!fgVs& zgM13&;g?I$O%B9NWk26VD$?RY+a^d_g6OLO@IHPo`Erj9v?xs*ZoWaui~)~fPzTC zy*5OnL$EHq01(qd+7UmwLw)u-wm88^Tr)Ax0sm+lhP!WzXXR>L__7}XScZk4$SlIc z=cBO?B@f@%u0Zd&2P2$M`B?`3u@gW94}kX%z(4p2 zFzj5Wy7xXpfdAnS()(erg9%_-wz#(p_snbW-`)SrO8uSyD;4P7YlvMtyD2mSV#|S{00000NkvXXu0mjffM4>c literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/StructureInsulatedInLineTankLiquid1x2.png b/www/img/stationpedia/StructureInsulatedInLineTankLiquid1x2.png new file mode 100644 index 0000000000000000000000000000000000000000..50d9d3e920c61ece2c0e2735e9b6025fe42fb6b9 GIT binary patch literal 11929 zcmV;KE@sh*P))dluncWSdsB;Lk8rRR_kBv5aG_wuT*9OyEN~r}M6+ z7sZ?lV4E%Q9ZT%d4Dfvqw=i7JzzJ-c6l((y!13bqtzH|fgNM)ivom1N`voo=M7oY- z8b*bWB}D;=iO`HHGF{-rLlAHw&~tuKN=T{?;34^e@A6?Fi7S*O8Mg#D#(m)&;2d~~ z02EC}Z7ATN5MC50&-(=~3o2f|O4;m9SxDrwi^~hGh$348I6l~Z-dDo$$_pSOUJI?9 zTexkF-$3M3*8Uk0!7E(?hwhb~~ zkEF1PB>*4LRtQ*V|NN-bwMzIa0R}G(^qkI7fN3S{s^C87av(p~U%wy_@r6f|2|%f1}0^TCX9J9{PdsxDQC@aAc&P#@(JVsXA(iQSG06LKZ(w8AKQ&+iDp#OJN7ZY=D9Wn`S*Jm$0yEwK}8^4_%B=# zYFBE!_2g`g9u~lfv2F2|Vezw(6DFzP1%e!nVF{=#r;qzPdS&@vVOx$SIs+SgqaH7i z@q9mEAWNRBG3Ti~u>MF3tOxjrV$t($lICm13&nK@P!}#LS~LBEF0`>nhwe5F$~RV13PZac8;vyYb#6l zK{b8{hi_(FAdM*dS(5p~<)E;1^TO`*r4hi=$_gy6tWI3xp&fX0)LKLVqZqbP#2^t+ z)(=BA8?*m{X50g#ejf_;FX3o?q6o$vae*RGF67j6gs$sw`_J9weapi7t>jPC{Rrd$ zFvLH@`V4MrEc0)^h4H4wFf+liBhRoUoqhy=16u&Y3Dkw=(pEq7fr zHx_}qPy?sa1m~#91#kkv=pS|h4NMPyP*?j@5`H=(f*GL~mq1=p;rQUux!v&#D*z(D zj+S3CjHzp9sQYi0O2*sR-YZv@GY<}Wt+?;V`Q%32#QI4DR>}ZdbJ9xg( z)B-J4@5!9|6ZR7Esha<$k=O5+7xNni3dabYL{-Ik^o*^0&9G~ z1r`!*$sQDZ6SM-Jm0JW>$1odc2PjBi!rvvfDwA*6wPPn>GW%uEb$)T;g$(WYEU{ll zC-AW(SiOTY-S-P60LpwKpFrdj%)T{wlkW{pFskkMG47!NAWi--N_iP%C8_z0`hGU$ zd@nq|-{y@I6nV==)27{}HwuocuyQ`x__(+xB?&6R2g1npwlN ztXTY9>U(y|8bj>G3$>{c{(j--DRh4*;A8|%kC%RN5x{XbU$jI8-c zy5l%;*0y`rv}1^Ts`(o#aU=kMc6^E7v7w|Bt7I4ho;0LIpQB%MT{ zX&QF|%6zk*a)2y;4&zrLB%iXKK*UGn6Y&xGbf%XgU!&G_U}ZrZmT>}kbg9s=6xhct zE&_sYhovbLfd|4pA`v*D02~NQ3{Ia_|qn(g6Zu3`K`2+1dq0Mc2X29Zz5kRM`oAz8QAXD7%<4hrZ>5X5{%;M#7FQj}td=Tu>ARO887tiqJ8S*EPNHue)ad z$C(sB5Qw-^E`p{T_!~N350V5LX1~PHcQG+#Mdl9Aunlk@jX}*}Xt)l`N5O~vBaLT8 z6!H-HVloLymbma3p2Knmo~>bvr2@wkM7EFgQ>6CS%DLe6S^>UYarVAv_MU=lH&H-6 z(ES0p{SL@h6Dm0$GoqIn7yK>+y#^SCGWb3N*S5~Y$E7-ejP|v1a|OzkY?gM~Ce9gS z$0@91yoGVE*=%m4A5e)f3VG0TNv+T4w6X6Jm5T^EuBG^)n+$f_9_+P624~jb(ROI@ zNu|&x=9D+I9{nNe{zz4IzGMRYO1)b9pV6dk_2X}d-akF2C>O=ubb2N<4*}Zk_Nh6! zR0qhRYFDo()}O=d7p*qFjqeM{0scLD!Ovs2h63PoN_f9j%6`mtMayv_31s(_gdo76-Nnen)6sXA!`qI)LZe@bHfw z4$bNl_gKjr{^I^&>&@ZJB~bRygY+4rTw=A#cgtI@@f5|AhNE~ za#UCY_{;SxwI?|Ib&Mx0@aDW#bc34!+uPf48eEfpQuvR=Yzd@dm=WW|aODkiY!*m(I7u|ybVqYI)wV^V`Fh~z?W6F1=FIMqoA z$51J%u$QBf5K^g5e%&AtXIZXTuS%(hcs@&+u8)r8Nv-^y+v|T79(n%@UG0gk%qQk< zzY9g92=%LVXgqDqP0OVU;0#y~Vx{n#J1U z20FmH=XjfQeS<1~uU>!A9pD_GFD!!9YjF|yR(Gzw!=w%iVHS`OEX#rAqK_gF#OGau zx8^{QX*=1oBu_ZNun36!yNeDiRu-cv?s7=z=4tMR1OR_B|GpPr0AWqEj!h_Ix9s6X z=M8vth?Bi8l&_SaWY8K9ZI>(-|IvkOjDMXUR$UpNYl^fDHOfdy*|z}w2e;m_J#Q5$Tj1bZz9@?pgzT|`xaS{+)jQq_3?$&be=@*|Px zIX!Ndb9rcWOsJL(-fF6vecxR6d|j@@{naaZuu{)Z2zQY{+A%oI-MsPws4XwUo!e^| zci^|b^55an<44f$bfHo%UFh$QD-n4lpFrftt<%q}F|=&)KkSH>$R7p?px^K7mSrUZ zm{y&wR-|AUI&nE7@i{yV6pxZUqvAePJ|NTC+UGc&DExcG4>o7JZx-P?M3C9)YqJ?W% zZyA5C>K>>H{U)W#h;)*}>F6ec>^LHxX``hdFg7v*m;x&$u)LDT`_ktU0Go@AQ=(8PfTn5UGGzr@dFGI1ww}vrziHb}4TS)M z-Vr}DS6tw&-8ll=vY}ipLoT1gj9{Q(s7gp2wh>9xQjMp&9@Tb9ma=2Wj^n*}j+R66 z{e*lqr-H)hdl>k>uzE#N!1dg?F9i|=fe;0q8TF&qhphpnI?b<)!OTUcMm~m@VkGy3lEL zpnRo#G4G#C-akz~&C7n4A=|Y<&*?n-BalGS*?$5=KIs9qw^&=e0k@M!PB42m^XurF zu=l;anb%*q04V!27i4?$Y_H?xZBVDvF`^|8A{njcH zph16NW3AT49!!L!>-s#1$S0)5O`tRTgMKW6apX@B#SL_T>)7&-v|MZQ%h+%xT)YD) zI(SlY(b{~!_;V20KSiD9VIM48*d@7ugT>zi4f56R1LKATW^*69Xn%W66ROoJUuU5` z%0zTn4(Kus&B&5ZM|u-(B>f!EV+AY)ipJ-NqYTSwj)SV@lTUQ{pO;;bd>SkJy(2zrwEbI z^M1e2g>Cyb7q`{7Ko7FtXjwuSo-IzYoba8cC=o)J2!_5m)RC^hk;)2>GuJo~**kG8 zXReFBKnKvr*4&8@7jqBE*odZ#f~ajq-v+ave4u4xA0IV7ZSZmZwK{LtZ>+*s;XU3z zXjwe=pIImZ9V*4j%&%g*C<-J@Rn)N=9!OaSkW$Y@D-E4D9e3ZjbLx9{dM|(gh&6N^`FJmW9tojida$xshSjU( z_!+qYISmoU@Vy-*N>#G&ZM(Qe(ZIos<}P4|E-=Wx3kx$mEfOL=ji~hSR?f~fpSHHJ z*`EEX{Omm(Hs-o$=``$2L!nTK1>nhZJHVTm{STs{mJ$$&09_Xj4pVimxSZXO7Ek0y zFrPI!@e$BsQ2?ck2#CTwCvx7i zGlcuHpB9Aq=%cN-8;8w*H~WQInbF?%-drL$e+R%5Bk~FJIsjh%7t>=qEFn=wmdgcj zus}Ck-SGQcP^(qo_U+f9*=)hqGk~3so1miAYsD&5mtKRlCCrT7?}FKFi%UA}@_2;9 zyET9tbs+>FokiD?U{_?7Ppu~NO!vb%8bqG1%N``QP4@CSdg2fzQ}?!=cOJ5O7BR1(I4GCGP;);|e5yE|~1 zVCQ+5EX$C~8JP7cW1)+p51%Cf{;nj;e=B`vkm{2NjC=uVSCabOw|(eiUFi4w+yQ## zfY)(?Z(HE|ZY%<$T!nn80E(6atJjUsI6AiB2>0DU|6cUo%YO}oofjotJH=afX%G2Rb2ZwrY&l=I=qcU(Cjuv+YCQiuk!3CP#K7j zh(JdXlzFuFcVi*!JniyWTRP_BdbAZEZRYc1LgMTFaVUS3M=V^{S z*9)C2YTri}TE1F>&);2L)br(^z^UJg_AKDj;}0Bkk98~btMm0kcURgjMt0oYQ0Lp22;fU- zvu_XQl0PJXYDJJ)M!PGQ4A6BQKHO}?BFJ7ZY9%CuVat>}Fjc%C34n03#^4SLfZ`(* zz;FNFAAxl&TtP3C@CA|_SwazLstnhc#NHdrS1cheG=Ccm3n` z&tvmT#VyQNs0_zy}re(jTj6VDBdL0_iO!)9g zgO7DR5n*(JUU>150L+fKxJRbL$&XO2uR`DKfMq5Z8{wcSM7DDfmW_iBT>nfchSx;< zaU;9W_p*-o@YC+tZ#?KazY7-o#yl5SOZB^l2XkNixj8_kBCN=k4QHzs~0 z!W6pxT8X!fqijhSwtNd6V(n`3{*eP9`M-h9Kfw)8=efVNt2%U^?u+av0l3eh1gNTx z_8-+EZ?3(b1QjIzx3K$DG#)1avU-ZVo(DarVrYCmk1e?mg{EnokbNYKf{3$Vyd~=@ ziX+gn-;y_YXazx1K2_2B{XW<>R{eg5hp_y7X1_IT*+U*niSn~wyv_R$KW@SYA9Ha% zz<3*D)0%Q$`p|i#FMInBz;ExIio0_u0VIF~^9cYw;B^SepZMV^@`vF#N!DqK2FqBh zDc*n7fbHh^_o)~feEyBKO!?sF^-Ufm1k1O@Z|Czo014L$Ww4Kh0B$TW_=z9A3tKx4 z5m?uC!x(?Vw#}RGySc~(VAySPzIQM-`FBpa2dkGYG4{dEsmVVV0TB6`rk{E{#^0N^ zhzQ7xQ`w&e2|S~@55xq_eE%T zP1t(o!PckUId2KylFr2QN<(7n22N(IN`<)37$$?8rF11PEPU^&c@LX+Eq!^eSE=Y0 zSnYjiZ+`&ifipQklzE<))LAw~QeKesk+6Hi&t<%5KeS!y>v=sx;)(T0{wNUn1ZyB_ zE|rbtMYM0#hPBtqD1y#xLLl-3Uxe>K*A>&Hyb9%l3Wln|LEAj}ot_XzIyHXiCc4p8 z9d;Y$eH6gEG*_2*=eqMw+u;H@FPupLhJnP)nfSot3NNd;I?1T=&-j9R+Xz=Y>-XU{v=>dcZ0H zNO_1GwLJb`j>nB=^Iar=>$I2FZnq&Vp7X$|1VE%{xsVv!p8o){|0&8RyQb{tzn9Bq z)iB5r(wUUv;6yn|mxuHo5&?ybrH!(`77CzPD8rrAMc$`&|7k0Guxriq$(a2QNC0pK zkO0mbrxQS$5KWtR`|^IM_HxV)J>; zkIta%&tx<{mO;!#YtmUivi3^p*2}CjSd!tp`@8)7A#2GFgKQ15T!6#o;b!C0<|F>{ z^WHe_Z?#*{K0N>IC(JDXRX4z~%;bYXow(l5>SIY&)z!IvPf;=B6PFpb`(ZL8K}-|b z2@r2XrGrVQa~RL}(!zV(Y&P#>y9uYnMOc4?)0F@{Wn)tuK+g;E9LJ7`xjSjSk=I2O z@|k&&{Rw6zc;@Vf3nAaZ?0>09SL+iSjSpOHh52`1WDa{x};)x04*m0QzV|5dQQiR?C~-nhqcz1 z@HZvwV}=reo@5Imqcf!>t0OWp+02HrK741H{6GC};k*~%??{Q!G0B_xay!pD|D*Nk z{{I0t`AUDvjrRxr%=m>6K%r6xEp7VLKzr?+9*&cxp#o7d4bi1-LZ zei~HcPm}G#)}GE(SrX!+XCye5Rw#_Ga&(3VV@u%UMx*h-cl|D$678dlC7&==08zcS zEmKTL>OAM)MF*hF-_TJITmWNgF38neI=WgyB%tkJSBk1q#O)+IRkQtDawJ~8RiFkyC9L`=@u zJ`0AFp@7qP*7!=J)!3Y^z@EInt(~p(Jzgl}i#(j6?X$3iOoEZuMHKR!{0Qli5WldT zyz)rGr&;ubOdhWN(@M%HVCHXP^X0SL+htgP1m(OB#H^3|BmmHL@WK+}Q>#~|o{=U# zP53C{qvzwqFm7Ku`^VLKFPQuDk5K?$#@hcRn(#bt_IH9X`!5maE&xBN^{>Yti7w!W zA}~!G3?m^po&9N~ML?G{d{Ogc|B1DeTwu~OJUeaw!)Ucz{};)BH$CS#&cyq&EQ`0~ ze8A$pWD4^1V4vj4xYNWp%M$EWne4eH`lHh4}c<9vXun*uxsi!$&a`#2S#W z&ITeqWknO!8HwRM(liq_n-iO^=Mf^?rj~gV36Gu)Tm87~k7~Xb-AhVvnEn41EZCYS z#ca=x+xF4rk`Loea0r1nd!$gV)p>hs{Z?k)vXZQb93Z}6Ma2-}U~1U1ko*+VSsjr# zsrH|ECeK&r)BC*T{hJt>1cbxwSune1T`L^M4!b zJVvpR#`w1+aPAi)uYc-SaT>85p_-rs>1tf&st{!w1>7IngX&*cXgNWAH)-iTt6AX7Sh)>*drMY-Ksi zK0hx-xF-#r6|VPa5%$^854L)(r%yh9@-JA9aRGP(Z>~$SEP&?W^C6$0T;SR3+n?+~ zab?KbT>N6?q)l@2Ll8;BR)50!Q`SDJEKDsGAv_Ywh!V$UEESmfzl+VO{kwD2f^O#p z6hNs|fz_2Y(Diwb6dPJc9UuWTcDJCuy2gV*<20HblecLBL?9B=8OuqPQW?yxeSF4= z_2FOwp<_iLPdXjIJT^Z@0sIC={80t1F!6SV%Sh+w`H|1Raohvjw&3dGGAMI%h5o>Sd`^P`mI8VsNs>766x5HhnTtURnIs`# zXiC=7WhrqFu^tiu@Zo4B1mPb!OO*Yxl&KD4F13H})4l(&v$ON%%mS=*zVD9>Nlx~+ z+iiH(JiJhX&r||7pL~c8P|D1C-pnVuNJNPor0@3OFm#6c>$jls=)-uC6_$goRu7!O zhP7+ULpRRALl!iJ#iS4f$6lggX^fUb22oC#<+FlnemZL{--)`9JDtu~R7sudJW0v( zmaN}Aw&r`83&2DHP$n^^4b4qH(38CM{x!#Oz-b?Vx&1yEH$M+Xtc4`gE$LL#u+`;fo7%mqLgB?8Aa<8fL9r$w54h63@zsvgyRFIDAP${svF5dtF@ z%GU13Nd7z2(KKzY_pw~j?tQX-=5IR>oVx%#FXI5bRVzze01gTOCI}!xqiyo2w+&do zRtK%f#tTfEQUZp+hH3zfNd#<6Z5Se+@c5%gAH9PD*rb7N+w)zJtikTi*7;ug86Zu1 zNcN`dqDIdO&r2*3$$G$Y>`ifzDmZ=-@Ibh|em!1u&}>5EX*2bsg>W-wmS=;G?GM~C zVEKy3G+nP`evh&PfCosApt%?}>J*S`LZ(T6cX`Ug); z*neij=hus4e>dX{QmPGRcZX>>?Dapz=7Czf*@^FG+NL1sI*siYihROU0nA(Dh8$oo z{ftCFGI+GP!vzqbezlgkfQKuXdg9!JmILo^_F(NZGP*(e+%CWi(Eeu-$VUe)X!a~s zFH~WogG_(}FGk&;`Tc$02U!-L7zDvg;dxT3?|qM{?8k8X)#yxDF2(0Rdb|U@{xKMa zuzmBmk3ZxmFM#%*R%p-i;jr6+ZhyeXrF;%#NzPRI2!?&cVWp9o3Q!F+lEuIFAHqjO@a12~Q|G&4=}nf346HvBre z$o*(SS1hP47_hVbNSwB?f&wt0wsalzQVp7|7MR_x5Q1xgr-_mg!E&px{S@HXJcff$ zkKyW~5YK8=I90w_6}C%3T2lP5BjBg>#ovcYQp%<+KU>w0(9t&cE%?#Tt-y`f%1i4@ z)rRSV6W}KN<{^&FV4Gh)j0FzeB9{6hkGLXcRuB1e;)?c zc)5>&Wgce6o@<}^z0MQTtP3lZN?7CNxqbjE0$KE17{UegDt7=1!jmI47D2sU=K>(4 zMWCi!fXVsn4~&rT^~HqzwI$JC9V3WOn_k@CX_{c!V!ZQI5M8NcGWY{@rJuoef7b6e zAR+w8_8vg{A-qVKSpeh$l%b~)009N?C5*Qt0T8I|=2o}>8jS{@E7xjZl*{q{*3&i$ zp#=`wCJA8{0i>aa&sRcGtkz4g+Z5#PHBVZxm72PKRfkTJ;zat}D1iSw&-X_H;N%lt zRsj%n9V@1it!cJDMG!15x<95d_&2I*yiqP0P%aBXG`$Q)o`Ko-pwYHr-xVdcVu;WR zHF&h!VKs z2Net~Nivh6QYyfY|M@lk7)9`hon!YGn8G$O(5)Dj7zUm+KA4n<$!_m~^Yqd4=6E8c z(`=Hl4r*Fhca{0}dT6Pt%D$v&jIxSnaHV7*nc_UXAliIR5ZXWiGpx?K7-@-bgqady?SNM2mzYQn}{C#@=&}K*!Dcq{5uzGD3c0bvDytljewy%`m zo#*@dt|flEy$|i}58y?IblQ!oS^!3+;1mKttfL5i2Sup7#2Wuexn--!5ThM z2%ugPf*=8;aaGsh$Ns|Wy#M>(`Y!BsoP>OYZS}LK^&8YY#vp;dYg*oXAE@VF8uAIs zX*YVFsJEUw-##D22 zFM38q0zkZ_s`7mnl1(C@$fE=3Sd&Qv+y#atS}9gC2}mPt zAckQ;O^-ADzbqEu*W5tWhz=TjDd?jH4&Y_MnFPS?SIu591Tza_1r+^1f?oZi zk=LPKt3spMg35vnwIYMXk~lYzurw@`GjFWtQdud9by3OaqoucyvvwF(H%s7W>q020 zGu`I1=DQfbjQuC|rR(s~qmQ83Z1RU53f6OlNHksa(_?~d3BftoI${51fpWI(c$w;A zb}Eo3ZwcZarP!A+zDNV}xDOP{Ok5==^?OV4`ye?B1Cp;p5)R^!xlFz^IY}-RN^H^V*CPGF{u?Zn5VvUH0 zSVDT5s{AF#bpcx#crNtqL?wk>jID7>X)bUhEp?1aJyN5|Q*EXCu^ zt)1Op{rHou-$d7V5=|P#1)lx=exHwRe3x|QN7+wp;0M@RFD>~5<;*8I_~B*)Z>}!J zT7L3+_r%Pvhwb0TxD`z{dp>Ww?L90DCEl-~3t0A0O-94fH5J7nvRv0jYTCi*&~fM{ z-@*2)?W4|<_EGn%*tcud8lVG=eBDu*Z(DZUzRctk&Mp7~iJ*rf(Ca6kd7=H1J5XN= z=QSMLIF|im(}8~pivD%ehJUISmi}6_wSgL7iUj+3{LPXLy6uBG5DHq%wRo#ns~J(~ zn$F7!;xYZ(KkR<3Y#1M6_v_d;j*q*?M#(TW6<-9i*T@-Q9a~(OOgbr^bmm7jpY&u~ z&Pz`|;d}%@aPcB66oFR32m_wK^i}{L8P?*O{65A%@Eq%FOx53FT7E;E zE68mR1UcK?B5#{v#@C$I| z!4GPAlhzXXNVdgEH~W~`d42BJH%$}tVkI+2HlJ=^_L@J8^A!NW>57&F5Q!iS;*gE3 z(`gWq?|60}m@JjB|2oF4@Y%OhYc3qGTFoEE`3rzRBIxa4L9VB>TVRkX1>_F&oI;d# zkTsP%1Y;5(+itJRnD)om{bOv=InYHkY%O#ST?YqCiHBPZjP9s+p>zE+f6yya^M@f{ z*vV85tOhdJ5o2njJ|Q?WE9VZwFvdQ670D-DoB#+U0w*LsDhEV-M80&fKR+)_^CZD` zNc^ivKH*|YKpIYH%p`zF1TPU@W%3D^lY%6I-VQo~bpc<%0MtBKK0DR+zT@(cwH(;K z43-O!&l{jA4BCeWuQd6D%ky9=2UbIrg9z#Vb40mZJu%lf*n8fubt$;`5|9Ro;03Gu zgifcG8UI-!pK!SXAW%6V7^`EKFs7Xtd!Bt^uS5<&B6#?n55W4?H!t-%{{Q0OKmY&$ f007AUwG3?M9b|2`?c00000NkvXXu0mjfSnx3s literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/StructureLiquidValve.png b/www/img/stationpedia/StructureLiquidValve.png index 21f89c3464af12ad687f9f4b7baeb9c8269caefe..ab397d5e8899a51c3a2cf7b863a90ca9a80f485a 100644 GIT binary patch literal 11675 zcmV;MEo9P(P)}-y zJj9R5OP=zU)k^>eLHrOPKn!R7lZ;|-WCW{dS6W%ZuE!b;*(1(Sq{!_VPWN=Px-aXm zbI!e0T|fQLpW$fa)3|+q>i(Ydo$t%R=iG|LA}lN}z~bVf>@$OjS(==tD>WB#=7xd3pJ_moF{9jAdCk;)1Znr&w;|=Y#M4;Cnw<-&nta?J~`8HCkis zA0RH?dFT7_fcJR)^VBmyGWcXxo)4U_=|-x*ytw#FFTe8gzl-|Z;#96;lL~zE!Z*Kk zd;K=7udlyO{rTsX#=77B!+lw&K=2st=?4G?|Kifck>@*s)@c_Cg*nXne>!Bz>eVY( zU&A646I17L1(u4~M04yNdq>v!4+fL|cmAK|DnvVfF;#<&2u za`jAo^i%_23F-LR^Us1v1cgCv;2O8(M$MJwi_5=_3(^2^GYfPMn|I2vv%RbOxnQh2 zzW@EV;hEyhW7qzt9smmq3$VDb2nY7Tm@Aq5UtV5b!R%idWd#D@#^#+nvMt1T44`Qm ztgo-1nV+6&0Fb$^JKjP)1i+=`HLO-s-+ClB27d#Cf8#iJUElay0Gy~r*?&~S?0+=` zfC{=6exTZq=Q+ahDf_Wmj>e`7(_@|W!TTSasjr?o0Prae*REfKdb2M3=44^K^`0nP zxxDo2Tu)?w5(Ej`t5mkcVe=0Q#rO;sO30{I*{z(Zzn(e(kX>B5*lBZ}kF|DkYVy*` z>dG&7eds~|TU$GCZk9KHIL`i#<0RH^LG7S+roMXW0I>A@QmSu@);P<}pZPmK^Utxq zJZ$3D*7oMsCp&LqQylfKTc2#5k(Xk7ssKRrzqGV;EVRbRdXd=vnP=y}4mp-aP%bmy^=1A3k3RU$ z?%w9!xDpf1UoWqZ^|sTpCk_B)%a<=>S&@aDw0Wl-mOBI2%|AB}j&LCGf-yYM3E;}g z<>l8vV+I8Nz$N94+Z%Vv>o=$^#CSohJgUfgYv=6g|A_;DVRBer?k~RtjLlDLs?*v} zeS7I=Uy}7$!B5!b%gbvBfYo8aCo8Mqm#JMW7RNfLI8}tV-hJ!Td^oN>Q2?+CBRDfZ z12BoDsQ@rHQI|Dk|1pfRe{GbBl>J!UxV&;j_M5fFSO>KZT2D;&lbt;P!W%3+e+3HX zWd{>Eg=rrR7&gnY+ESUAet}`@7hzL}ONd2)q}_KcJ5vCV=FcuH$;^+8 z7~m*I0NA>3p}pmjX3>7EZ?1(iSKLX%#qK!dFv+Bj`+UQvNHuhr1_NjNf10n zdj^C5J0s4my!-CEf4INDUr7$K+z`e}FhJ!&lYkGMew(H84=)!4XH=&cFb; zE@r-A!F%Nf6bc-c7cRsTGJ5L-PNzLPJNpd;z*kcfGMXRR?TzxI&F$U)o!!re-t!}? zHx4@O&AYpg!^30QnJ_>~^V_a$yRJ|`IEMMY18=^&jsV#2j1_Zs-xptp>r3zd`2BO# zo_}_}GoEZmwq7pZz^Ys<7RS0%H2*YId$N@3l z9U}=?T3nFz)m}KL`xb&= z#)KIjq~_P|%Yeen%*+=Gg~AuKfTh0Ya_Kt=(Gc}|{Ual%wB9$;-_3S{J0Tisn1M6V5dx6Vx8mPUP%bE0Cq2 zRZ`;?SNe_&uySGM!YEsnv2*}H_e`4Kj@$J^ANC%pz@L;^b63FLTR$}roGJkNX+BAS z3_gOP*^HQAQpvyxSuw9k090x=Tz_E}W=o0*>W(@C0WcB+ApPH&o}TUifU&e>KuFOP z{Kg@kcW?@RJVg+k8UQBo(l9jx1wG7Yp=!=~=(nh^J_oLnfR@f-^L`!pxtWzY;41>P zw<`SdZnatFQzZ~X9IQDlU=tif+XN%mf*O>dCR{KN)On64Gk9g{(uEb$YYs}=V~?c! z_5J#KWiMutDufpf?J(T8;upbg=cT5TZqqxd)-(c*0Rd5cC?7%Sc3JCT2sBgqBRcoN zKKKr<(WhkJIKPZL;N1`QPBc!Z0sv!5WxIojtxp=`Ek=i3TUq`OzxgXKuVHUB6pR~G zZr#2^b$Q(T+(e(vB5-EWm&LpsT8X|nPRu%{X=axmTGQ4?%hSu9fn_h2u-$44-hEU& z4HtHqIa$E}MGy#s-~^fAWB_1HBTp@&H|t<%q5}Z3ou)a~R&!JE>b2En8T@GM3oov$ z-MU?-puGmVK>*n3)Ig~PA7j}Zv~MK@0NKp!?COI`MeaY92)gTHj^&LG7!Vu>mEFqi z|wEyVaP0Go6|M|L11112j$?TKyZ8jM8VHwzZure12N8SB(Q6@Ha2B& zzObq?@57H|(kno4YZW|a4Z=VmPws_JrhJ=LC~y$o9Do+ z5^A75_%Rwwc7GWa^|!u%SD7l5B*!KT zHb%RNlbSv=KLTCb!O_1oK-{ehad+WDX})-V=I4wY66)eSv<};HnK%@()bDK~T3X;P z%!77+|Ca5UTJnN-5k$hvB{bfb8gIL5OyTY1jE5d@0*1cAm+4BwwDZgONCfJ^-m&)A zj}?3>QSkc(*tEvk^;_TxDXLo!iP_PeegIn!ge)CnW(WjyK#*9C_rR{D>4rSij_a`;AcPTa?y;EQXaI#?4b`SMN) zjR#JevOMaA*v{^QrTqqcZR4iwzXfMwlbU)jF@S)4XPiI~n8%ZY@c}?VFJ4KH9Y6SF z-#RIWk@=nrOgE4uBM|{?kC(k{XYV(^c6akSHg6^hZ9=@#I?4MEGPkWH&-EF~P4{UP^Xa1Ux==qU*WU*o-Ye$6yZmHm47JwUx{ z`%+g`Caa8&_Ltwg495ZwKdCbVV5p(F&e!>w0y0V+{`%%$!-bg(a;#J;b-wTIBJJ0z zfUFC1Tifu(yPIDx>hN`X&iAGlS|1z~t46;5H{nSip!Yt&=8ycgyi=LH=^Q5CiCDpi z`Jqn9YX$0VKBWE9&rH0F3F@tR=EEb0NhTm^pc-_=2-^8&Xd=YnVDFRw(4l;^c98z& z^kINQ8&8-Xw)09S_({|7<-Xs0MZ`D}801R~RR`f1OUnV-SFTu4uh(IHeI4jWHa|C? znp4X61gP=W^a34FV9dN2j{OQ#XKc_Pg0md9lXZDy|MoF~SuX;WY_;%d%^yRyy#VSa0;)5h$Fw+f5>yt69bp_^2%nN|^xl|I_g z3|?ji-|$_L1Oi0UR3{ zFP+6^A(fezaQSO+RO`h6eQa?iK9@j1g+O2$-AqCBKmSP#0L=ceuEk8rBCA+SP*9&h zf%OK;WDRxc6C8gV3)P!g?qMPEn7~30K{3U7IF@99$c&uwY11=143P5i+~^<}41ivm z4~c-1ytW5009}^v0$<)u?3tq2-}Rf;s^3&u8MIKB4-(%IV4~SbUsptZypPUeMj|js zxktt@lFXsL+dhYtg%Y$5)jh?b3x)H~0?)P67rws-ODGXM+;@-9!CR9T;&a$wph3I0 zY%v4Zwf$Al3kKj9j> zH!v{cU2qT|CaBtiR;o|6@Inw=z@*hTLDcq+2!MW?pX+e9(rCO~Uj{&Pv*$gca`nls; zP9y%#U%NCr_k~Nd$uG+*FU-GCzPI~J-+cgYVgKLIpwxbhSTmf|vrgt$5pw|<#BJ>K zy+UsQ4AOi`7)?{bk8A(~kU2;IW+bsOZNG-Jz1nL&o335 z8r@0O#*t!?pUihakhJ%#Qv^Wh(_0@`;6p4~5QOC_mj8_9?%4bD60nKdm;e~2`MC_m z(IW-~zsm>!y74NOwQ=5J7Dy85D##d94b-?$myIysEUlASEAP~#1Prp;!y4oh{da!$ zC3x@f!Z_DFvi;F_Zvwn>9SV~%fbZOs^tox|M)$8P?6`vf@DJ+)=cfVCOY^mm<|9jK z9Fvj@Ix>JO)NUG41oF6t*~BMNYuea{9^ya%pUTV+HS@v#1E|;QuyyMJyxbB{D;D9+D(*9NG)5W8 zavF#PXWza39?Z?n$@X^Dfz1PazPG!d%zo~MlsJls8VKe?ZNL=0i}uNqnh#N%P~axL zoa{?I$FhN?9FCQf2eD^V_W5@3DptS4tjg#Q(U}5)u8`4)3 z{{Fr!gw7x4l^@=lyr2M|8_X_8GTJkhOaQkZOv1gE%HW-v^6l)j@oDOLscal>Tb11r z7+{d*cdT!pg8ywSYhWOnMV&xEbvbOm9z3X({rgo30=IJgcjz-cPa_cIFjiBs=JyXi zi$`Z|HKpMoFRf1J5GmXnWc@~*L8_gf*8Cd`^(nFx*tMt2Bf z=sh)mbjyQ@!FNPb&lR=TcBrQDns%Z1Z^LiYe>IvI*t4oWP_;{v#|3El2kNPl`?AR3 zhvwTeiR`EQ=10El=1=NyC2s&@@qXFhKTXy;bcW8+rRFCbOc^Wi!Yvfp01VGhPRlZvbn~BV)vS_;{@E zrATOs1ls>a_Ym7=eFE9!D@#FOg?u7nxC%s zoqtpStYP-ALNHuoF!%(5e~H;254OWs5D<8Ojz5D#4a>vwpe%nO^ZAl?76Y#%DhFIf2=-c|=u@c;g=z1$hTdP%^|%?Anq zksXBva&WW=73Ni`?ERvrH2v4>>#Bw<5G0ufvKkK1*e?{V;H z0aQW5#CF;Y43f$=#FFVD2qqB(^Djd4{#|5%Ar=Ik3$9>UgNXhQhe*dWSC9cNz}8+h zHEd4#u(_96n;TQdpJFrodZ%p$jr-z|L#sdcg{c%jI+~9r!`>>pKb3ycBg&T%|J;d1_*;s_Dfj4U7Rl7fYASx{mC-2(bQb` z@K6cxmF6n?N6j%jrJ=sgA?Ppw;V7bUB^egjSbS*Z3ea#96kpp-AHdU$z^97G^P-l~ z_}uZfJGQk)pURmFrsjg<#d*mmNz(y@BYH3LRMmtcFpQ?(?+!Ut`#BSQ-$!C*;JOaz z;$U~^#Wd4eGYhk;vcoW}MD0V&vN)DJqS}Xop{`XYAcPKSc&r1Ir1`d^8b-)6rgbub z_zYMfr+g6vfz)~m5}D&Ty%&Vwwt>q+#(T}v!h&I-;FCqQ&Zp)FUMj%=eJq*%JsxES z={6#^jtDR4KGqEKcy;26j=6TK7Ig_g*=7^z`ZHzi9=Vz8_8SEz3VsBDVT?w>w?Hw3 zj~?yG0D-D$&xip6OitbRT7xfcnB?%){u9jP^+)nWK@U2$@PuT62n2O7y5>hx6V?7< z3;>g3o8cN}#*WVQ2jpY7WZ>Hg&CY45Z_}9l1JLsizxu~ zH98uPWEx8|0Mqk>7cwAsYRVan-5I40IXbSWJ7RJ&yhn6Y~7t*5&a;l2|g zc#1(tQHa)nG%L`+cGab+76~Ab2`4Qfz)R`wR55ctAN*cFL$}(PU}|TA?*_f!AAup% z@H_=ST$>C&B?tx15B=kKae`P=1@I4ijDqN-p0BI>Gt=z8k37-?hAhH#4Mfw%>*&Vd z2kGnu>9ojkUJs;c;T}O6okuaIb)eL_wH3;U?L=-srU*en4{UhxYz`SltA_y%WyALz zV7zebdk(b>}^9cI@^%1({@HK;5Yglh!DP#M8V7(oE zbe(uFJ~@ro@rDJ>T?SrU?)62RE98 zVNJL7IXMm_5LhG^AwZ;*oYY&wET`cAqgSr0u@C?h{0IOR(!Zst`}GQb3IN(b#{L;l z03gX;LwVeon&N*pXn_t{itM(o;Io3FS-(+@9TsVDs6_>fpNtcSSV0d`?J5G2C-kre z-S-GYqf@hp*=Wc_5D;||qp=~(cuXTuP`SBYkpSprq|+39*Kx~+X_TXJ%6y{#*||md z%JXy4@UvKc@68Rd>WI{S12bG7s)6f?wR1R54j$KfJwL{quNlBx2Griu(7rVeqNO5Ug7l z=39gOpbzm=fG|r9M1jAxxpQj4IZG>qz=-Nyk$%5`bT$Q!ovK+Y{BDFbQyNIYCrbu@ zl=~VS>rnVv+z?HVD=6K^*4UuXRlNLGBQACU6_CS!``by;1BwqLyh;6GQHU- zK>3}mg!Y9GrG44~aGuA)v6xV|9i(2hSkn|c1nrFGhpaKO<%WFD?mx^j3E0l0#Qap; zCb{t2>fH`L*Tuf;tCX`t84;0RyxxKR{*U5>oJQ@p@~G`$pV%Sr)cyAlEfAr+XhsY= zhZ%Y4N6-Cf(D_eWeCC^l^92Wo@|Amb2Y1zjx(t`7?ZeW-TxWg#QJV2}X#1l(%fz#t z%)=r8CH9HvpK2kFrf*N8F~n*l2xdna6hqjKdVkePOGd-XNJz#g=&tMb{Z7GW2>?Kt zNMr~Cc`YpYN;SjuLIU6)WBK{5oxRsVG6q0#D$QW}NH2FqOlesg0w67M;iuUwQ)RBD z#SB#UG|219KXwQNJF%u)M`r*60Wm<`L6>Gx@~f*wE=7E4!;b~Gpc zEnYSR8n)9WQoBw0s=R4zdK38CeD zzG@1t#sL1IEkTgA!1Kq0R3<*Ao?r;tEBx-e{&f%fCE&3NIMd^YvQVphN8Rsf1O!Q9(j3PD8`4SE4;V}jWdSLR z8L>q8qOQL4f-Ke~+_5J4o#=Zv12A*Y9a~toQY;Y0h)vI^^6(Q72d!wz{`55eQ>=dj zOW`D(6agWs!3&upv>^Cw0z=c{+%gPfj3mk9`&%Q=w2*2PJH(uHC*y#XH!0N~rTH?X?Ftm3L~<6bN;$0_(3 zyMg6*vHaRdjtT|`VyGqNN79j$kf%vH2;}j*(+r?#2C{MtlG>wMa;dYuwS6bETdJpn zT^oG5(w7?ugl{1TI>XzKlw)hP1FAN#e2a6sNHBQ6Y(_*G({Gt}GSU$NB0482BWGeg z-bD;BF!)2v_Z?Xm?-&Xo=d=bQ`x(sHAND+X>FsPB>mu&hBL4?B+nS;)Ae{%>Jb zRsay-cn+AlIohq;ea3Ugc5zQYpgg76!uNey9=iqM+mVA!(*(y+!2`n@?_DeosPA_H zXm9(Io$8?VdR8>GOhkepj6~c2y`Wk9V+i~&LUHjq9QhPP{ZpY&)v^5p%kUwuBUn7} z0x&^@jy7`f{*0ks2mU~0cV>szV5pNr!7v6(Xu8(r0T!^%c@Y@;N=M=@K@i~4>HUIS zhRSl8^D=;E6R6~<=d{fOk7N4ap2)gP{?vWQZyiJWXAyw#ij2pJX1Y}f^b!agV0OlW z`6B#ySMa?-{?Lbe43ASmyD5ukV3K3Zc_B5805Hs?b3+G4K4T(GF22b-6;E>bA##TTJrKK z6rZGJ!4dSCryXtkj&wwAFCCD+=MA$U4d!~EcqSP@wg3Fc`ku=E01HV)$DBCOl>Jz?u=zH4*1)$Q0L;vgH~95>!m(Hvxq@yr zM6jhhRNcUBHn3i0I+t3R4MY$%G909ZjAQC%7yYS$G1#Q7;GMPsDLVo^>AwbHk5bSP&Bq&a2g` ze}lch;zKxI2hYa;0Vp9&9wq~x(`h=YU8Z7kbG0Q}oo{)b2gh;1G|i!o4)^KF6e&>j zVFaf20m&#VaRN-yizSF5qPiOZiT7c4voO0U=<&OwXafQuF9Fc89#sGFt_^vwGVq={ z2%NxY`-5PV;0rsxNBrg6SXK<(Sd9h<3=|jwLB~-U9z>D@T+=()Fnad;(Y>`H^Lx>B zZU9jn0~k@zdj-EPdH~%KU?fC82$Xl{&-c&?w}I3#Et{n&>AxFPGk2&2pbZ1TAWLL_ z>OR7K1IxGYgca<5opb&S)?Y9TV+!j$%`pv==A~$roa1_KPk?Be)-4IFH%s)jWWaMH zf+9Cyzu@?6(aRzhNM?Oxl>H;vMrqmv|8NulkVy~}A<#?Ns|?%#uL(vjp2JuWXCJ^D z;qu=XLY%|;qHWs*f?ve;3$E$D06F#o93mnnlq>{ZI`tTjgBt`r(lSWvFl023XBZ#} zAYzlmT}P6Qpq;rxFSZx}2rbZ3=d-p8`?e1OvZ4^UQQpKDgl8cGFrBCF&NLU^-l!_y zA38Dt$Q;0IXC}@EuqMro;#8hw7@$}h7{9c;L=8P=rkQ}8GC&42{Kn8JeojkMZ_>%W zk0FLiSbpfb?jMAoFE*Xv8aItKe9S7JFjt^0*RSTeLOIDsKW#TnbKv8oV=@etWD5y~ zM0Wc<-pPhZNG}VHDH(?-sS_#&zMsCoa9r4XP{S}8z$ap<3`7Hyr4V(?l}E~NX1g`; zD7|YWD+j?~1_&fT6iq20jP=xeVR?fdhPD#!wT6tbg0iuS?VrN3gl)ONaUCfgvhBpq zA)qC#m(C^`AUnUG^#b%j%SuczU~iexnL!GEWC#M10LE0HlX8#@zAx&jEoRT#F0Ua3RbRyNJeIFwpMdc5$RH(@5uyk~XX*(g z51OWR0^obT1c9HCFeF_$uOkJln;A~b+L``<3zRQ5EOAns39H&qnmPx0hlj3nNO72MWwmkCk9#ohUUvGiR!Lw)!}_?zArrS z$9~SY5CoGrejPKBnBlr+8ZVos3?8us%dZrk>V03ag}kQt#I?5_hfE8yw|nA}P^;FM(`?eBJ|aTGHj z-IepD?8%xeXSBeRt(#$?`&q&hgy`!|%lR7CmrQ07KrXvlFr7DJNyut;5&%KaLtk+y zNa}9J!(7Mp?SxzLZnlE~n&LOzw)=LpJ%hTet*HWBzw!di&XlNo0cZZ}n_IP?uRM}e z4_0vk=AWPatNN7j?|1Ir1qU~Gh3M3Pfwx7g)3@{z)E`yl+MQ4CjsbwkT$JEi%rLI! z;sG`o1O(L5#~J)%7(N0v@vfU1)Be;&3Bz&;$1XF*Ulgt*^_Cmv3iznIX!!{RidM6g z+KA~fAj|}C`kCX!{xS6w72Ke|nNm@9_Nz6xa(P(-gsieJgZ4sUX8y}j@Do-plrXTh znhdgmlGnucWU&ZNtCi}L70#95*3A!OTR#bJ5(w0T%+mh&S#wQREp1(?T8kyrdU>fS(juXov%kX>z6c+(tglz=|23#@dMshv@;llY66vLo} z_6&x8I&<%hdbKLSQ^2{_biNaGGBcmGO z9r6he2VQ_jDVE6dyzFb54>`}hkq_C^$r+vbo4a*rXoci;?-^R_`Y>QEm6%knWO9MSq;UAG!wrkU@w?fvbO2S64CNnMPL zG6)@Z8b?0~CMg+ZfhhfT)`k^q)A$+&dc_a?7qNYr3IPDw;s%xu{R>aXx?nNbxsU5| zBJEpO+z49rH7#FQqrStZ%c%)N-0C*=J8gS^=X3xNfj}J8WE&secOHS^DYqyZ7$k|185Wn2>^Ook|k1rz$7sy zjI+MpsaY@Pqu_UHeQF>8{I-fR0YEYVvSd$|qWyN#!6$oS0Fbq$WVntC%?5%31uW14 zDI5Kz;Im~?+CmACHB$WS%#>t-%0r}h?_g;5Q|3o35HQ@s1Gx{h<9Rapjs33mPb>g> z83BQQgz#poDXGrTCzT^~B^x|^5jm5j#BtC$W*RI^V{x7EfREY32Jz=98-c-O>KzWF z2qM^JGzXg&f`Dpi$*6kWw4b!k6aYHbjvwcGP1!__08KZ*C&>uqgM$BAuwF7Sjz!rY z$wATv1)uD*34lHpcrNBlT0SB$kP#z1X?EP;_X>Jsy)-{-PZa=q8G#`JM6=lhgDXH7 zx~fh6Y(YW6m)d`f>`&2uX#F%lYfn7@vgQf}284yIMN`NiWU~-QRD-103;S669%ihW z$=LRYhX*~zyu?{_A5X}-@{?^Khzhunnyx|2Zt@+0lDQya0&h6&C+%|wfUE^UAWOs& z0)G)Z$U1oZ(y_g@4UKw3b$A}5WR1LboZypv?g7xtT+dC_QaTJnmeaOW@X164K`=WK z2*wRQ+1~*x9xc9DgU+#16sl9Kk?qhW_VrF6h0LU~oRG$1hG5=dI!hicWd7A+M5W{P# zC>jKTw(3K@IH&#D!@hb3>YS1~1`y)NBMDAG)JWB5Tra;k|GdXv=xj!BRP*lOE}x9| zRzG`XmxErgwg>E&+eeOg@4dFkeA1`HpUnLj@8cDcOd9ca*SRrOZ&=6XUR zP&02K8vqQ7Ieu^oxj4`D4ZRSjuqJ#Ho+KL;HFtW_*0?LT78s!b@|Y|x2tLVlvazuN zg(*gl;b||#Cdy>0y`JTDbol+HHfZ42&Enm^Nw_&n_^&8Ij@Zo1Z0|cu`f|J{;V{&7 zX{5P*U~a(E>g7W2f|>lyq3%eLI6=drpY`>#p~KoFH{~3WYdi z(>w&M_nl%*_rC7qttoes#n8^K8e@$}g-giD0shT<#^x32(qFg*G3ILh*)20m*QqA6 zyzbN4*~Q3a8c{EIcRH=$cdlV$oecWJ&@`V%<6hT@!J)y(d!K-3NjwVa_mwJ52=)4w zwi%bk19%BF#@ZdsP)XUqKrK4yUHc94a(#u}qU&YYCz&tU_MgX*-#G~ww>_sW7ay_b z|Jj~6qBU=B~$`x;3TE)`ah$sJZQUaN3?6sYhn<5x+?bgcMwA5Z?( zO~WcSt51`mgnAfbS>pJg_K|nsWq7cAY!b$(oF+%WXCOj4I)yG@ML0fs(UZbx*HVya7J^d{IX-^2U2_O|AE!S${;%cP1D<-?bM`!Ugq~q1bF0@q52C840nRz$k*^A?+FmjNZvn$Dr}Sl<~1# zn;h()Bk}w1bgvJ>va0TDi@8TXJ9T=E{I3-{dh z`8;K=E7~7b@>e7y?VE-EtK{om2Tf=uyig}M%qybOt70Z%g~ij@!L&TU4Whtu8&>#= zv^o~({T)KZ1n^r79B%M1?NM2ib}9;Kk&f_3@xGcj{QxN4fcBVo*}1J_EM`0!lg8#y z;^Oa^KXUFm$?FJUTpA>PI&Qj8H>}mPh=u-!vQN`WwH2gOnTKw4&2RmVr4gN+wrnv` zMH!~-8c$b7y_n2ZjOW=jS?KS2)J{2Xq(w@6@x~BfznvCm#>|xcq&9hRWOhV31H&IbVzac-v})KddI|_ zr9J!(wO=Q@A0FAce+q%keD)Y6!FmH|Zqf7psXv5KV`?xBR55;t78dZ}W#5W1_itg)9z(x*%5~ZXgWLb_B zYeooY-1{Q)z@(%Hmla0p)*16)Ky|U!(D~eSPmaMYAu>AajY~r7v%dCU)pX8=_sz^a z1i0uGd7TI>2e?B>$q;^BzJV5jcEwZmMB{P3+9`MRs9+nqXv zt4|}jQlghXven*-yKRF9*ob^IQ_)Wj=9vbpp`!%!&AgJu6zd=w&0TNqCV#-Xx}QCQ z-e;9y(Z6eDy`(qWgI>D^c*Gn-x;3NdpWP15a#rpkd8_Ll%rev3HeEYneK~q{1(%Pg z<~%FO%$#KpT8^A0s=2h#kvl%>$jiwIOJ1~*DYvhE!*Ktz?kU)+pg^qGf(MQ^)d-c> zy17&&|Cf?h6TNbx?+G8^Q~dmuBxRNnYPKoS{vsh&n;c68 z;LM;PB8L|($2I>Leo(QO_(x>$MwJ`LTRCmP)ugs8d9ciR8$%Plo_k5 zt)CZvQvSU9BI0)t{k_di7V$7;%YHiIl=BMu5q2;}2!__9Ej8ks2Fi_%e$5%*E7%n; z^mF3?B01YM2gvCJpqhA@Kg zkuROT(nx+LYYy%)Wq7rDA6+Wf(S6L*i-b-86&f?apfF#j-8*)Ho00HG!?`(`&>oTI z0pirhG_qEXS6Cf78*_+};I?=YRa=kDP5QdrP*uMA@p#c7HOwS0=Uv z$|^s%ru9;c>Ssojc^KMHxPSQ=7n^YieyA@@*5P(JY21j5t7kR?n&8*$6V?HJ(5 z&3yZFP9kO8J}ukw1R+DHNKy1k?%Fc++3vkC1jvgTbXB&}b_<~2J=Z6$;F@nd>X+AZClUD)0~YaKr(g-j!?wl+VkB70BF{2uZAxl6BJ7cIJP_* zNu54G8W58`DIh4x_&M? zd(sibOF)V(2xZQ87};rk?X|$j0N5j-GwmDm9Rgk`AVhpg!8(E?0tC?hgwk?dy8OB9 zko&tUmm5W%=;^+V8LzbcZN^JP{?U#Obmxv^uTK8wPW_KJLSGyumOr!+)boq9)?EtW z@uadows|AoA;8^~H<3$0fn-_l#1rLM+WmteYck8rrkEcB-)BuV7wAiG$HFuv^*>Drf-R1tU`J3L!GVG>1`tB**NF zl0WQ)9yaZi!`_}E0JX`h-mm*b&lIy2fh%JeIPSbY64+aK(_`cP0k<~EJQO5oRL0pa zd;Wq*yH{HhhIx9Fh4#9ZA(VX;OQERS%YYsi;R9N)O45J*mJq^LZjRP~k;B@n%kh)M z+`O&ll$1e_#ls630fiZpnCHb+C5zNRFATZ~!)(s-?S1}}+q;l7(+)7I{|^i_Z8y^q z18O5e7BFwBI==HOe4zviKO3KTrHGMmDlX6F8t`@$h9N*cVCbY6`%<)2f?@;IgQ&G>})NdV4y$A>4SxZuD@!mp|JQ&eIm&elM& zyTGOAF`!R&)K)n7+gedZ3t>_>9zDGj%-^1vp;poRgD!(Zb5!_IQ-f;{4K)B$#ECRN z|1A|j$F&LOl6PUREt3OYEwvRs_6GKR=XsFp5Zp{wegk`_%JqYWhZ8O=;?4me%BSD_ zf`7XXVSbmyuD}4YRJTtucMB$LkX~P3Q(~9D*Ry5_vc?QO9o-=TObP!q*i>!5CrXAS zV=rG{NA}^<;Lv3$hUAqZ@Nxu5Q42SbsqV>j&NF&Tz?ocST#0pQpfG3T`BxLluqLp# zH0(-?HpbpM{o)Y8(NM^TEC^xur72&We-wqr{i4X-d*V%l)G0u#LH7v@+rLWq7Ay4>gwwLID;YaO!)Wg1&VLh9>g4;vjZqVdcan#b`>7tCf=Cn=K=OXZ7}Y0twZ*{ zx}P2t$eJ#HhM)VPi)s0=>t3Ips#U$W3TkR6pa|TEy_UEaU1bj5eO8QKm3_9YFsbL~uT;0;4$&saDUG-e` zDFLqe4|iDm*V;JuW95qre}o4&2(5;kN%Zv+Php1v?F?YFF82oU5fdV|k z;JNizhsd%|R3t&UT=~3tB!9nYOnF;A1iM;|`*w}h6Q16VF57Yq4Dt-_&)^0t2 zYoogMhfKP#`b;RmB#esymXWyAQ)*bo*E0dhXR*_KfvEryh1@)= zpM)0`{YSdpH^egpeltH^Y@kEVhx$E-dm|B7DSN$RU_`!ePlvwJ;GiN)dgR$p?z0AcmqOh6`X#BSm^duP6m6TjB=$%y9KJf?gAK1o zqt_M6FHeHGgA7IYcZS@UjGR65j&R{P1}vpaycZ=xnbM#|uOsv&l?fw_2t3w$E4USh zkgIe*)<62>W3vT0Ce}5#(pbwT!AXl$Uy*qw(e>W3cl#JWa<5{66lmJRJiwm`JnMTj zvD3qz7b785rS6;ec?n~+aJDfj`dG9fdgx8M`z4~GJO(byPf3$Y5V|7Xl+7JUr)y>Z zzUlTg>MqA6Ld`3ajqjX9H24T?vW+k=pNJ9a_|gDLuiRm~!0G)aT2$+P4g#h;8uXE+ z2KRJ@(qncm&%PmgP`4-IK@Hw3INxaG*$4Mqfrcu?A0ZGd4^3$v-Qqya+k6Dm!oA}9 zs&V^Y|MQbrB;WRj9*~#24C8Ix?XH7KIFDmy-6P~MfvOD(BixDroua_Yy( z8C8ID=sz!BxAn1-rF_{-nWe!r1qutwSBr_6V2|IYJ!y1~&1RcbMVxL6c{5uK5A>I0 zCzPbj%xz24%Zk4J=SDT*u{zl>g;v=%?0nfDz+xWAHuWszOQmDO%CnMU)nEQ{N+{%^i7=v49bMdit`h{R;Q<|f2mNlhZn)k$XFZ?L_9wS zBp`Utn`{$i7zyX-ePP59fjia>_1XTZSn%_R^K6NN;)>4taqo9lW*vn3C46~TqxT*r z?BOXywXQm{E>*4;wBHVZE_`9w^b303)fOTYf0lU;#Q3PQ(o*hVhE%jqB!1rr2Et}m zU|s9)sv;>9?TFuhf`Z$q0Q3*y0(%l`$s2dg8){)N|NU4jV2HFG zouQXUq957$~t(kHwF>>rq^w97#nA}%v9nx+#9BW&NyOibfRkdAqTjdl35h-cr% zdnjA8XrJTWNOABmkGgFUh#;M!PXGI1$!j?3NE3G~kx2Hhv$Ie8@yc@TFxU%0WUu+w zchr4h;hyJhV+c1ZiaY))Jgx7VQp;^Ia9bhad-Tx@RgJC@-?N)amOL=pni zy?_JIj(h2`PC^w%=h+koWDpY#%Lzl?q;wLnxPPPo>>m+9W)|boUS^=t{|dyb4tpqp z*UQRvv(cZ21f9j03s%JvIr+efK{5}-;U}wxXD?CV&VZld9u!*;jcmd${A>qsoMw-6 z!bHmM>wOJJT9bS1Adgi%>N^#;5gV0phbY}NL;s&-Ia^o%raL)V{hi+^hNC>P3N~AK zqvgk}Snav(Mi~QZ;f~6dJ_YUrDe|&yLVrKA)VXS zy5T!{n~@czx}X2*@;=5y(UlestnZpHy;Nv_eX#xO@e^(@y$yx@#DJ-lARZ>gJ#X#h z9@**O@xv`LiWIgG;>S6l-a9@-1~(RZiVf5bvq<*X@AzI?kr`K$kG&jE+pI8a0r=2%mU#e1BBvr!202fIHbsVF;a_N4S!8nt0*3p z4+ew*A(UWTE=^NH0W9|pN%dVvEK-JaliT?Fn?FD;7a*=MUlJz4J1_HUn50SBzbbYT zTwR6^XEPiANK80iKb}etMt*th%aa^cM2JD&EBG=k1x%QO=E&`fgI>m4TUk}1KQj{< z^yKIt+^-7kF^G%l{Wp}j1FJSwQ((syB!Ie*mU1>)&L=6VhLa{0E$&mp`RJz%Vqz*)>Pbv@gM@Bsob2U8L=lGP;3zt^9m=_N7!#j zlocw|S+Kj`mBJzzHNZ5Bw~rO=Txy?#-&6RqnweNAj8GW3CAU=32h*>& zjJUCRsn+M^>VROPH!JT?2^w?n3&ggic zr(SZ1U?68pFL!k*}%;RiwpzwBmSZ`CIArI>tlOx-qbMSXheWMv%KeB5W9R7|QoU!4?<| z{tut7#bqLEnk60VbK)XcP7N{N%UNc9`DK&(E2EUAh%yt6_xvfMoxNKNCpzyGm_dAy9Pw|RHxlDupwAeP! z6Lw0I*Kp@{j420ai~v>EjH;w?B!{GR5c7MpWo@sPdk1OT1&2q#f4)(~`S%%?d-B3b z5j>^Uf1liGDVokdoBH{PrY;ziTT9HA^5b10xu)^MUNGTVgYdz=KCm~RfrLX}+U%7r zjJOSae<)e_+|2&TLp?mZHrToV;itHK`YHexM+yB(HPCqt177axog-TvsR5n*+ynr9 zl3Ttx>**elwqHY>7Y-tP(hpi1?_V}8iYmC@(%^oWmaH>ku$qdu$by3W3AkhJS!Kxd_Y6X}=zJ%HSI?l$h*?wQ=0ucbP|hMIKb9pugMk^@zgZ4mqTh92zAN;tpxL>Za# zxxIy;B7$J5%4+30P$IxO(1}62jiAhU&92OfsBP%Gw548Ift%ev8$1FI707Lk0#ULC z?GN@fGd$FPQ8E#t_c#(m)Tfvx9Cfz^E0d7~g9gBBQ+gEp9;@%}N&?@%u)X+pnepQ= z^%-b$;{8qikVR|aqgaK61>dj;r`FxR_hc_EJA>YGgT`(?_TcqzC>ZdQ<+-LNLPR3n8ape) z*kx8ARPhn(M<->`S>Xqr^NUbJRAJYV*O5i*n&^xrtHX1NJHo{DdXK6iD>v`vC&Wwt zP#4yxCE(Qjjecd0=J6u+Rshg+xqj|aDMQ*N+G*x!T_KIU^+6wxIqN}1X3oLKw<}jd-S)IG9`n8CBSdXR ztHR8a#oj`8S={z@rsUB#EMyN%^}qE@URYiuQf6<5=zJ26hVM$jGBJ4EyLlKiDh^*j zDqiY2jTLWpY4WVd4s&*ooXU?Z|8(}&CXJ?UwUj%)rC{<|qY4A*27mY&Kv!JC8gzE_O8zWEs?s0^)dNRnCAAG_b(Q`{QIbk^H~ zy$>(B*D1Vi&iCaRcRy}QS9N&DEo?X_U%YjL0*Nn>894%ir(lfd0s)BqAqEKt+S#30 zU!g}m9*p~VrGu8mC4~3!pzVR*%MNJ{ifwwgG*H}sKAJlDe;$A7ru z`Utxn#5~nT7Jvi?b!xW9lMDUzp^IcKUd|6}t4(^Jd;FTXIt(jNr?%H4WtBuroWO4TaJl7XJRR}##{=D`r@vpB zvXTtGY_`q#F11y8LN^UtE5a^6LA_^%L(VK_#%)4Z`pE5}RD*9{XpeqMdrOxVN~3}! z&O|biCPyW5C8IfkXdm1^cu#c-p5s=@!8o9w;y6$Hachb=UG4g(a|^X1e98b;c9P)g z;lxV<)F7YbdtS9lUM)^|(M%G6go8VXYKj1i09X;OI10fOBSyKDrI3`IphQw<7&f4e zX`s`c5Hnc;xVo$K@ualG8k5lA?BNHq0=%_KeiUkRn1J#j8Xao%pBZwKw}$nsmlVo< zcO6;&_}vzdw+9jcnv_5!W>j;`3mx62(nkY(rF__ZCE6!tvl@e3CfdcK_g>J#lz>Dk z81qZAyvf&!D1k^$E;hmrmYMZXTM8~RQ%^Sw>|=kjTFb16Pru=SmeDGJd?EUjP)9x( zw&yG}O~JJ*+b|i$i0NAw2+&N%i47%zkO(e7DTOODG_fr&ok$~#gKr|tG1Gudxn#@V9F^_X1R#THMB zn8u7Lq2hrv_gi(xUEh@0{%uyguT1G>%w+Q69az!X;Ggdy#Hfqvloc+zY?*wXRQ#-J zYa{=#9eIyJ?X!ac(%5QcME2aG2p)Ys@0lrgAJl5zdiX94=_%?H2^289U(T3 zZAe|>z}3YrKdFydr+*#MkA*)WS2~na;3Cr0L`orD8?$k><3B=sNVMXTZ}CrTQP(`J!vp{q!#qXOg) zkHAEjGAIWsuoXAQ&muD_mP-r75pP^u>YkrN)y?{8X=^!jWFv7X(wRz+!~O(t1PX{C zs5+#!h_xa~sCwhzT>Auo4*ZFw0FCcx?|(%6WSDIt1(5quYR=Xt4}< zS2A%qSzn&5;Qy!i%=WKIq$p_hVc*e8n&_jzs#FB$2WmF8op>!QT%*sAM(VB&#b zMcCb>uv+_rZ)rTwuho_!KA5ZI|Ca9>F6y8O@Czp2En;OvazjtGYFQ=drX2?Yb-+*l zP~6yeRVWXVpq@@{#veZ8uB-TTFCi~#QoyEG^RSPoFLL*n%$*Cb>U;)hEFLq65%Bcf zd9WP$NjAfsMm&_lGUE6VIZ*TiSb87{v>Fj4&-6R^qU3_(6k__SHYWWJ+K~H?{OPlP z!V%~pM^kd}@p#S2Q}VSa}#Vu4G}qAK?kPa z{q}18#9E4SM`dT+iZ&&ECk10!H;yqim#o`U?+!b$`vok>Q~pR%h zpH!Vi8MmSGZ!kaU{;^%5#_AwAbp?O8H(<&s3ugplO6NBhE$l(>f)qizFRCuI+mL_W z-pw!1|9*2g6Vd6^FS>rXAf@xL_EK}M_7;)vDjR)sBR**Va)~&nj~Jy%IP!WG{goep zLHvVYm6cXjA72O8nA{V35tZifi(s7PK%SnxPtnQ?#oGngJE*F2qcIcr58KD|&%=hb zsZ_)zWY6tm@%jU;jA$r00lxgyMK_p9h-&06jerk5aE9PkXkyri7)y;)@@1=)IeBL} z%hK0{n2B!+J^e>TV7fydB)_1YBLETN6KZF-dO|*Ol~^lKa{e0`jrWsjM|dc`Ky0*0 zCu!XLj5j!-iYur)X9SMiRo{$Eq?}pSkx zS47*o_?KNa>`k{_H^ajotyWtVzEKs`jim&}|LVp-cMDWT+DRU46mLT9%%#6_iAYEg zy->Qdq5keZ0o*8I$a~lRgZ^bqvRwdHYwGmqXuoC2DHAYxKr$@Y_#n!=Jgr@2?|M!5 z(2|i)zOCCKtH7!)1GXe*{n=>KD6Ps?_Y!L(WwfLM&aCKHmatVq2;^N=>K&v^J-oCz zsJA;T=og`-8l6aHw@*DQPSHD94OoV_5nRjaZ1FC#Fx(|8ZQ%#O$NgFDNi((+KDprd zH(%7dy8e?k{yMj$)P0gdE&3Y4nUX)U7CcbS{*p&wBQS-Hi@jrE=Zn6;-d4<-b)h*X z{r&=G=tSkq)b@np&ejL&`)1NJTAU=@V~mmE{uAp>mR>p^{@}#PoZYP+wK>J;%>Kw; zvsv!;7XBOE*=C*PXgE3HWX~rgr$^a&8cx}rv9)eWNs#9plK$oKM@TzE+^5pZk|(hW zP9jXD)0@>bHB>`fL+P*0gM*F_#U*wAD^8KABq86~ZF-F7dB~jV!!#OCe)^$ErLU1? zv*77mYZVffG2V5!B1HhdLJC)Z^Sp?TcLZ01wsRJeG#&n&Xs;2r`fZ2l==5N)d43fGp- z1C4xkNIkOH+bVP7D5yTL@au_g5d79Sy%H`N#YAU~pK%oj2e`OcpoL|v;(px66j#2b z(V1#{W4J`1zqAqhd<29$Y?GH``}Q-$g8d%R>(s}(8Rl~h`huq3wY?xpX0DD!4G3;v z_=MGZG*C%@(po`KffdnE^DSkh%@EG*q8}N<{q)y(@KJgqcMqv%^`gfXd0429=07sr zohm#EwfMAbS(jX^M{7XkxUkt$_mQTQwEzs%N71|@`R{2Z3q%guH+iq9-8-Mcr*ulK z%4#&di*{3boLZ$peM{aP|Ak+v`eXD8-bd)MM_mYO&YyssD>tT`LCywA^qS1J9{lkLPcJ^nJEXwkf6L^B8q?o{@dK0UYC?<}q<=b$)@x!83zbe3>T|lbe zLG^{F$KqCbm{yp{^&J2)z495eM&79cRLi)_>x_#fIxyu3{hfNy0db@$A8TTA3%e3{ z@`M~jiJ^FUHtZ4AbtYv@3Eao<8vfX)cJu4GPkl{chY5WQzQE%i4MYmEMbDnKSxR)k zrXT2$|FM&zjEZhC`E2tW^4UJ|K0cCfKjVkklRlm~N3O&YrQiIo1SN3k*8I!lqk~d zG@Lwg(*2$p-7ui(%I6?(;>P|zu?GJ2vdZB@jmzT8!i6SpctzVW@A)$udgy29TlWL} zVYvC7tozCBm_vTpt8^GGo+A>{Av!?=1bFK}K#lneH$Q{cs5}Vv9)Jxe{mcD|JRSqKVjn>yr?;lhb2(I~jI#0b)EBenx zLA(9sqVNj-lsRuZArs%0NZzGL$|#CyYYVUr+94s-z@op;d$S&W4V2?$YvT4BcYDqX zJ<$^{67arI=kY1*=de!7EbRp83`vND!8cKn@<+PjxXQW82Lz7&x;KMEF0mFW0>Zoyg)Ld$Mt!N*IlK7MiZ^rVHuXp{YpWHcv+6m$X^%#S3^H1+H44sc)xYQ7r%4iK;!e1W)o$ z6|G0>ob3*ME#-Cp1=F(sy{p;5RH9)$-)@7YXKvWZdD3AKVaSVErK8Hlif;uvHV4ME zhK0VBCmI*PX1?{dJJw=}nJ@2@4pL0MSmL@15L+A2!M~jwwk=9lIf@KqWo1%FHymz-W`z>b z=ir(B!!F3b57YZqz#n&heb}y)VY{N9`Cg^z*!@haN8zBbj(y4~fON*a zAgmg$-R1A~%oQo_iQ%KyJ7p)}(FfCHmMoMhm%At?o~aygnb?S2A!wGls74s1_hdM8 znia>Ccb~}{-Zb@f?1FHDgWl&Anb=8smz*VjuIXK-zl#%b2;7p_^w(eV8Ij4m zeRFoivo3v+uI=A2fqJ?$E%r0)^ZSCXlVU2Yo_b>I(^0lLF7!! zT;#9AT{_kE4<>6zkl3zECn?}Td&oGNB(Ik zWe(U+T5fYmdvchay%0bG_~*NHx@xu0RsKpz%VOhZXSb3b{Pj;-W4}uVB(j2FKIijq zqy!uBgqj_Z+qZAFHy7|#FH_)v#U*}l|5H9p#%!)dH~MMfRkYp#Q6_J!%GR_A zKZ2b3TWt_P1R7bZI41&2CQ3f+0R5SK(}<`& zr3XfzI+D2cy(Jkbq``ZR z*GzFZm$i#a?jW|jV12cPlX-GrW_%x^*}CWpAnRCJ>^0e3$+#VsPE*75?_oClI=T8% zued^J1tA&kdp6xums25+3v@KjSzec2Ny~rWbU?`T<2#%{=m$bDw>iRMeB|zbc;CB# z#({0^#W#Ek)iDhWPYKfk*&A}xpGlwGKrZrk0?DTziGoE`kK8s~)s-$aLr1`vI5dt6 zsrXl`%%49}WmtPny9^_3W_PQ!$|F#XjQwrolPhzS&&p zc$j1RyT3;{TYNKp{==j2yho|&C+8wRu6&n+iJpZ2Q(*q94*Xe?bxszEfLRa{nX($u zTulW8_=fML4fT_td;^%c=Q&}OQEQgqrEs>4gE2kCbpUt%)-?#IrOH6^5!{_AYxDn$ z7#z8gFYONY8oZ6QyCvy3ya)SjqW(||yVgT(z0nwRl5%nb0y3v3!!()rz_rmE2?f@# zUrsE&{Z4ajSm$y>TGqZQJw=$3ihg*-#!5sNjvAVi-(-Scq(wjm%Nr%mcNKtw`a$}c zWL65;zMW9|!yzuXR}z!?oOV3VCFz%U?FpoIKtek|dytw|#OB5e8ET6Cw_&SnqH{Hu z-|d5MyHKX9i!u*JFBl74f49B6Iu!(ZLlmv&t_w7tnjH5PpNc5kUy9(oM33ubvi<>? z3;kE%Ck{C(D&|s<(Xr#;d70CnuS^cleQOm)Piz1k1Ki=I)dJtpZvCk^(EIeWk->Gd zdF8I0VX($r}6r0BUA+9smFU diff --git a/www/img/stationpedia/StructurePipeLiquidOneWayValveLever.png b/www/img/stationpedia/StructurePipeLiquidOneWayValveLever.png new file mode 100644 index 0000000000000000000000000000000000000000..bcef2fe511b6eeab9ed72113b464b77f679e7a06 GIT binary patch literal 12007 zcmVFJ(sp6=rL zss7%oI{*F8pW$fahbUH^(^Yk<-uHQ*CkJ10lu9L7T3&+X$-#<63G{E97pyc2||QKc+yDlr6qt!{^HUy_+2}CxBKZXSe7NnBKggBbK?C%70Bgs zk_3a2FW|TiG@H%yzJ7!+9RWhm7nLuPZ{=0O8xIDM6|>^ zKecbD00JWUp%Nr9H#Y~%NIKInpBN?h(h(r*`AH%qu5`=aj`lK2> z2_*PZ5n!O_KL|X(q$3$;c3rCRzDOB?w6nA|%3jli*83fT5lrSb%`==1>K~ z=P*K*N@WGR7qMw*Blobs7fchG=i$0sE*Dk4KvD@pBvrt19rc}aLhjtY{FqR>RDzY~ zR$ygCioq!7rBT;q1#aJaU5W%W04L7D(=W`Ry&`%V@1cK6kD zj!$*QTYvR7JX5MXcJF`c39z)Z1j|dyaA+S+xsu5LtE;PPSp930tUvRDp@XD%;(3vwjQpj>9Y>&yPu zkKh0P{=xRav=$T2->hy0PEwDFHlvb?+nhL0EoF_kies- zimdz)LII8gL4ck6HtuOmwJspQ#)Q*9!1foFN_<{3XHNXB+aKPB<}vSgRybDzgq|-d zKS_eeh-WbQzcu09+Pm+*`v>)Uy_S4Qa$^)Lp#Zf9wez^+NIZT5WIW%un_!^FgTs!s zoq-8(U95b=g7>OzC>ANKE?tTzWc=3QPBfmMpZ^XL;2Wt48P5;#@mBTG_U``wo!!re z^!)5C8b>ifwg(lzPBSkuJ9sCG_E?;Y0;D{@=gP6`GDU0u_?CoN^yK_caI0pg@@_a2(`Ic2Wkw+4Oe(b4)uP&)?l+5|m z9Q!Cmh;JTX@CCwNVE^)de5QO+bX(YNUSGQg?FSF1I#Y|q$zQlU56rhxzgG%#GVzsw zbc?092$q&tz@}^9v}(}#?Di>UBF1ASz#z}>bX3Air3G+~X#-ho@6{s$G@6anZ)V;M zhb!2w3|gNggYU`Y-Q29+c|*Qnqt7_X0*(u_C`f$cOh|C{1Q_G_hB=4Cu)sM&ZzkH* z+q;Qgj`gy9e)~ftLB)g$O^b5#zN*GbrSg?xvG^5@rxTRRrO&`vo3&c4kBpr1df!O@ zZua^`|3SxxdPmK-$z1$X-UqGQP0g-3d8k+#lywFVY#+Lh94KEX0_kbceAE_S#5?7| zyf_c0`4Tkme)t6=01Wqhfx_HHnfy+>bL!u1U=m(hOiQjYw-653C*5c7v%NdfgO~oT zl_gBhfX%wPVqq0wnhi`h&oZQ7UI^^qlt^%<1Q_P|!UAOSkqn(q zs00ON1E+)%R-Yh1t!cxJ=jUO*tdyYTsBa(vCQ<;D|2uPYa}fauNn3`+)cHTI9iC+< zQ#ef$oEZTM3)fMyDp1seie{>(lm^}!KC7R(t1O_aQ`o-W0(zmcwg7aEq4zeJU)^tX zs&uvtY)qUrrwe3;0_&Mzmi~w>E1B zv5M3oIB@to%OygI%~OQXkmNQgLOwCKdz?V#$iUZ<1U)3d?#W1SCIm2MRkb^Zb!Zig z=@z4HzO=UbUw-|UU)jK?^}sN0iuU2hcSK*E_B^)_0OpZ6^Rq%3SU9O2oSXn*@-x+M27Tv{O|zTO zyNwUGwq9T z`PvINZph^tDu76Q)Ott)L+y>vVvmoK2NX#cZN5ZL9J;mqBRpgES3WkAS1IBM=kzPa~^LsQ3U^YJ_38ji)! ziC|gb6qyF$_SWld@wpO_zkuI=I5zchf|Z83It=~8*Ibg}X?23q&>@*;GPdU6>% zVzRaFZ6jN{;4UqKcEA3i?U`EgfID~~=HX(kgj}Rjf7lr%b`T6LbsTUxk4ex&66{V# zg5wiFBww^J`9olu)-=0*4?I>9gPn&$*)h02hn)vZwg|)wh=7&K6RYtY_-JXmAwOzT z>k9MaFTWYg*j`#%*#C!LfB75XlKf0Q>bpl>Xo|$|?aPMv0NeeQdJRN->-r5~_Tx@90^d8$K=_^uL^r^QOa$d~O0gz; z2fzN!yW2N#cstR=CPG)br+MDf#55$BjsVj0S5yV&0v{HZBr4BwWLUVTq}%P~z&&h& zp{G5|*XW>~Uo%ZpRlgqm&e6$xK2S=7N>&ve?k|7u1HR)P{-nOifdGYE^y^}!h>FsJ zzrFppaH(=hzAKl@(eDTQDErL@aJ<^W&Mv%scl%o<9lj;5^Mkpi?)!(O22dt!;UV;l zDyXCMG=tvaZbYsNLBEadF0$k(KA!rajr_Q93KL|%QeqnCh&TCQfQ#Zpb`2OG( zq2h#OkT)?@&x3a)Z3hBhzivUR)q>5 zO(xjEcn|B7DB;~&hC5OTCL=)7^F7v20y9v6ERX;`>48~Vj$Zkhd4v#={EdO%6)KY@ zTZm-xlh1l0@j|HrB7E(7LH3o3B5}Q5m;L_1zU;F^Slro*##sIER&jZvP$jV1A8qq0 z$-Z+KtS*)|F!{;1>&wqBuJ1m(xVFE;p2O#VkL|yyd&X5htWQGNLFd!qha69Utmg}f z4&_%=sj$Rh3gFnlwR9Dm#nd6M;_}zvxEQ1WL$F+lzbi-}njnE`^aoAI|Kg`H0kHbh zA(`n*r%6{+-(qG;A88g*~=ytlYKg!Ji(QG9h zPJQxYOp4O1BEcv74bU_zdVhOQ-JQ;s?@UU7EbQ6`BYz)!ol%}IxTt9=`5{IqfPjMn zU@rE__G>8H>x1T#xmwhl!RMV;L-y_?8;MbrV;=Mp;!LtPj+KObAs>+-iT5%DFwcMh z0)hkrVbUKL`mZz2^K)qllf)R2{5}W*=*FwqHl{hKS!~Ll`=}VRZEy|(Up9h-kCEc) zUQ=4YC^R27A)k1D=cm64@A;Qb7~+$`_nbR^teR6P0MX5{bJ7GDjxgZdy;B(!*+^1+>n6V7n#!S(%%)ejqmf6p&kMfk;m7i-QoyQ!P)q)Z z_U{p@0QaH|IqtzwX6bBZeh|M z3&Qi$MAUhvU^46dnfN@uxL)k`aA@05u(LXH@n1Hh&en-y&9R@{8z1kw8~WbZXau+hJuk(sRS)6Ek!E z(Wuw!vWfKlD6iu1USW9k8_#X3fm;CgU>QyWMC;=dSTp1^Y|%4KRpV&bM=rD+Hh}_+ z^85%xpGES27uyCH$Y$0OBoKWy7{AURG^_soh9rSoyYX8PP)8Fa$l=9jYboy^oO}{1 zLF)HRMduO~C`q91v;BE{Xb?p8i{yv+@0Az&<`_o2uU15&TnOefKUEf^pv|?=%Y0nh z1ozX`k#iliRo8XFqGUh$p2BFW%ffZX5nzz#PmVm8n0$vN{ai_Vb5Hc*eN($s`j5eH z;`!BZBDd#Nf2ex*K-`dlmVY3hNue&AOnw00t|Y2ooHsx5VYfeT!S%cWgv9%0lRpST z{!KGp6D1$v94w9fu1Gv7iq@9*^B@Ga>1zW^qZrl+ct9x-5! zstJmQNekt#`+6zw0y6$S{B|VK!(bbj;5j+uxfSqD#b81)fcZ9%&LS#CyoZmU_5HLm zBomAaRTAtP{NSy3fHha-^Xio=vcG@-J~SG!jr>^5{rtzMMoXBmWndl!6Lm7mKaPoI zqZ+Aw`C&05Sn*l3xdxaOWVP;K3v|LGNMcJ8K_1UbU%%Uq9d^NNF?QJeyX5a|On!Qh zj_-H{m@QA0@dRE4?*A?(J}$u{JC*!WaTWsz*YNS0#v0$@wET}kqDbV%$XSm7XDYy= zcbj75B(K+>@Bjnfb!xDEPmQznG zj|Jr0kmoi7N~@_!W3JnEW5P9$3@AK%9Xg+F4xN8o0&HOQuLF0+Uy3ya3H~isfBdo+ z+(HoH#3Yyu+?q$}oktB-1PB!%giwKIvxzEmfXQ4MSp7*Nh~)D_btmK5?Gq(FsQ?); zO6fuB%@|FfS`!+W_`7XOJr^tZe>e$_LjXbh??T`$b4Q;;(V|eS6k)gKL%XHkGnDUx zM_pLBya?B?ufhx11m3^flKt(w^|Ts<=qt#Kg!atP>;gCwAKab4fdz#DY42k@fPJ9` zl%^v-`&B4hUIixz^yS(32!0t8ojg`I7(POq%DF(wcqcEtAH*xhgX7%5vZ;n@s>2Z` ze9Q)Ek3aAhVY{IYW|_Fu^T90Ooflt(&i%XioSv_PKY0Mveavs8-2ajsA1TQ%3Z3kW zw)&7r{y+ZJSEAQ1TxD>3`+*`rh~ub0?ic}ywXcX^nDK9@5(R7_%vn+4Dwx^@ zl=uq?`F|A4KW|nN)?rU~o&@}Myk}kz0N_sZuz5IYO;0yc&-Rf&aGq%?wd(ADlzOj& zJJo>=@Z4|9(NVmvWvd{yJ85=-L604bGl3vkXg?tlCPX&*{82gedqjeqfnI(*JK$}x zC)$24itR&eN0Y8^G9PTmANso_!Lw;Q&_Oe%Ipgyvz2A~hM0e`ju=EB_p3xinaFi9Fu|I~{2Oc3Cc(rjrA0pj@IZK4g038h&SM2$(H zXU@@&^oFnUo^uUMLn#1vq^E?w-v?t34j$U@#-IJaaAmQmE;mb|cHfS@$S6z~{oHVd zPXscW@Z5K0Unm%0>ZoiuU7JhDKYBdxl;wN1AhQ83;oUO$rVXUn#t5r>iUhl#t>P%K z+}TdBU!3^ELkBMDP0&0S94@Wti0YW)qeOgB#C%W1faoNO<8I54XY;98*8mL*+vyQ7 zgjMzumgyl03P^&*7ol_iE-JtnaPEe~HEbIY%Kyv-lmD!?V!IcTI_o3lP_A7s|% zru6YMhGA%6n&~r%1d?JC{KL74_Hg%>aZL-z#kyJ-`nxL=i#bxgLxvNYc=mmUs?lsW zftt!rHBAHVDc1SA56quHJ++{TWj*!E4AfaS>FlI&+3wBxHmaWCC;WXh+%9HF@IQ}n|=1Rf_ zg!)#)>W`4qCO@Z`njyhh0{F^vmHeaU7@jgeUq>&D6hQ1822ELp1vWMxy162>-9$i} z`{@tRba3cwY4YF?j9|v&b7Q9W(h^MYD*40~9?y^=Ge5h3E|>n@antMb+4vsCzZY}+ zV1feZ z6(LNkkoGaKEQ&1;2KS*D$Y4tZBe+}JBN0(j0kIu5Ff7%Z*4S^ICg=<~(RvYBc@KZM zw+~$Bw4yQRTzY-Dm*Y5t7X{?A(KqbCJLsT!TG0IXTw$-%*~O6uODMn)B&)w4MU$t; z$k>*rK~eXyCs+}-)QSkMo$6Uj5>N$cCf%Pl!hoLzR-dt8b>4zJG3E32=PlW?5Qzzs zKkz&Q6ip=G0;LdspT>YHI<9)LXQ%)ii&OW#?&y;nrU>}@@Cjz}_!9-AsPm|29+N5% zlAr}f-~7;O!rniM31Ctj6I>GnR!Vg4c!?B2$|v7lLDA z&%;CEdrytKHiL>aU~fJBI1}tU6OgCG1BpVm3M=%v26o`1qGt&r2rwsYAwbLN$JtWm z`x%kcVub>lhpwA0h`f;@bvpilVm1^a$oZo-dZhzqv8cs7NMqO}753~a;q93ZrK z;&V=m?cE2kx_oKq??MG-DEq4)oFix88v9TvNS__PW>9Mb`z>r$9RDBecf%iDC*F$| z=8yp1xTLwOKufEGe$nPiz{B;vbLK$|i6Br6#x16yl_*-YkO)E}7$mAZREVG#r}b$d zy+{NfNo!bVONi~gdepC8SsXccQ1Vj*&_*iuPk|zUuqqNwxKxPgSE2|sK?|2a5o$2}^W+i8JOD1vLZA{Eo9 zTF20`(0`+~W}uiP7bHqcCu~?UW%8FQ*w+&8Lix8N1xP|zh)BNcxK+b6s^NQ4`9l8Z z7nb4c&n<+nFJt?iH@Dcj!%};VtZ=>06Gyo=CVDmRz)M$`@ZlNw-~Z3M!ct-qXnMlq zh+3J;ZkIOA93(t=67+_iPNI}~E>i~R9J0CiDXe!D#K1OKU}5G9)57I-gjOB1Dr^;=uG@xobmocNmi6|^m(I%9&e)R z=Ftwzuz#lpFaP9A;dJZXXSJVj@tz%|lZDqbHTdZ8;r^qM$@LvJ>USiub}_1M>_zfl zy1EP>ezKdHiF1Nr&J~R5l6uB4iE0X}AZ$s!!s|F2-m9np67YarUn;`}vvuORuN#}sT@mlnIDzORotKMy@I zM40#wxA%?}_$M79F~Yu)kZ>kExo4$R;H02qs-K%>(X9tKkD}!dYG5A>FstAs_*PXat~omh<$n-6)%sCVl$y-J1D(s zv8E|?;Ju9J2dXhKa$|nZ?mrH_%wwh`%86&6bMSl8lfl93y7(#AS0!f$)-jEk6O3UI zjoNor4v2w!dFuT2BMX?WvZxuc?l{EA%Q$-OPl8T=(xR2`7B3bZe3h@=vmuZl2dNlnIkRaK z(nIMixK0~D{Exo!@FoY)<0DWA6lvPA;Fuvw2ov za#Jc!F7wz&Nfb2QN^H0Gxj@iJ@t6Z5f6!MUmw3 z{@sb^TZR0eWB19h-^U5IZ{&J^0`B2=aJ)`T1Cz~Qsa%Am3j~(2z5S#6a1aoHQsaNl zTDd>RB>jtMhg`-(bJJ=|W}?oOQUu!)jYNcy{Ww1KMsLq^CltZV`ds#V!NIxs>v1r0 zaq?Z)g_eg3fP|oe6s84+mMKu)1p~9@dkj4u?gWVkcb>%NNkqF;I5=5_eAF04Ln}?#?!uCB%#X#SuBr&Y!0{X~b#t;)_lCUBojAk;34!*MQVZYrWqa)4 z!QD}VP16L&QON_tn(kgCPN?tq5$Is|)4j&1^?KGcwM<5MXo@}mcX+4yhrs=pp|t!g zzWEGT>oca$ws8DI%kUwuBUwD~IGDhKKpVMue?ri&xj&NG(d^(D1buQW8KzJPP1pJ& zKsbrM7m{J9btKNhImb_@_v5*Yl;twt%MhN-pp&DYi)|iw6w3$qMAaqoPn}1^Edt6v z2?>NpBs4BG(`^9P%fM`a`HBULCHR|tMh`~CLmwY8{G3YKZP{2GiyU)Ki>YaX0OKHo z8w4;U!ocrk(Ho--{DhW~SQ7@j&pJkt;*610C`k&3;aNs2w;%xG?Zr!rol*0~6M&Du zv`D^Xsw`-_QT09NCeh7}7NdV>Dg|&&K~FSRy=moDFzRG<4LsDw;{n^)Bm1 zzvXEj9LE9EG{*)y*k_l=A~p+ z1jqH;m>zY}*zj_yrt4@0#xOkR#8-5i(*%*#h^{ zrAKI-T+RoSB~SY>WIT^%6d*|;p(cs5PGlRrmpQ{AwHQGNjccjzlb#E8+Xs%S$QW*v zH!%mnw@?9yPE%(mnhS4lHB{`699aMY4q&wt6Xye11#_!3n-?|=P%4kiUpic@i4il? zN+5zV!Ui<_jbKpxoR*f}WRQIyQw+7B{m6CQ-w%Gi(sB4p)HF8mGV654T!Wrmzn-Ux z<-#_GdAn(vBQGZdlToOoT1YY^s@orMPcqIz27#Z@GLFzvXH*V+KYf1YxNz{GiD@!` z&cs&9SsRO`7(P~Ok5t^uUU%fD^u9M)JK&=gfJ=fXnNmcU>Z5*#dZ79)mH_y^QTS zY~R3VL4=<}1u3JA2#GLsqOKt9LDRG-0lw!;68ISlL(!G-l(pkN4eB zkV23pE7v?6WacM5TUd@DRu)NB5O*JH8%PMQr!UDoT!U5rOs)m(b{iaR{`>g)8uw5Q zJ2s|(#uq|3_<52q0qdz;V1^{c<*rDCidn4Vo*xYMqiF~rH*6va%#lieIqRCn?Q8Ozt?sXgyO0^G?xd&q&19xMrdP zxRZYGEFk61b$Qh=v^SU|&$5R78a0h|=Gwo4wjth$fUZ%4MhgWQL_!4#LXglC0*K_I z-3(54ruv5=MF^56L--`BAMryZ0II2V2gjlTci5i=Q`T_22K4A9RDgd6$`&PD){ge1 zdHNTP2aWAvXK^z&qE8g!VI(+e^(nv;0zrx@lHd(I{Qn5v2?BfvE#w6eJZe&5Ar}nO zxR45nr-P=)vQKgZ$>k1AxTa}+gb*1OYlcB4eelnp&dtsJuzAQKAc5@BBtbJNn8mWZ zlW&$DkwSSlNq|CW>Hq6A_x=cp@C{Ue-xKeU2vQBQJ(-C=Zrk>R1P~A;5HJEesBZ#v zYT)VynAA!I;EZh`9q(S?aUy3vhAZbw+mpRO&gg-Vs5hE${o1M| zh(N6_llFYEviP+y`3Y2uWlU_dDU)oV<#ljeD3!qJc2my+#S3Nl@b>$1te-|S1qsxJ z%(F<=cPO(-4m9fN7|EJ5FqeB%|{oQCuW| z5sVcX2vDVlO^d$cqI!Q6UxfplMnp z_dX_DkwB9q5HMl|5D9!E`|$@48?akzBwu~N=;HUW|BV4>ln}|5dj|>6K8Fx0aH<3l z5G3&NdnS#QfM~(x&ET?LVnHuxkmw&Xc#o&Q-BW62XyFAgSvWQf*;oCXUlrBOT=x6; zYZ+Wv^?mVz*MsKGy|Cf^`HTg;E!bQ zI%}Pdy@rY)NU-7SuohT^B!ywB1b10il0d#Qj7a|Jj4G6ttyBU_IQ3B<2}|-ZDIC`Q z)4o%UfNAEVv0dLieF9`jko3h6qJl7BXYuJL0aB9D7KEg~PI|D0WAT0i6TRkh|3w^M z6HO2R)#4_$NdB3}WM8xh?A^z8IhKyC%Wm>+YeUNyH^j3;=c=g*W5VjT>(SV*@0|?+ zLK3jUrX1tNht3mZc*+qb=ygE^Y;!oiitQSzz*S1=_m4v`Y!PW(7L&v5H91BIrl0iH>o)fEv=Z_%FV^Wmd=y#+isy2C+^m&;F zZE6}nW{&&gT(EGE8rmHPsNTi->Egj~1-m*xxQ!BEftDk{d%o=59+Cl!lLVTH!CBI0%-F0C8q6Iq-@rBoKqe&1{&57tfQ)Z`b?QKd}TD1VIGxCm7!8cBIr9dO-z3SGGZe8;M{FD{&kQj+rJ4 z(Ma4UBH&~7kWu=1#t>vMiMoeFL&PK$ z1ZcVezOanIK1A}r2pD7o(;%$=&<>Iqm3)COCINY+CD-u2na=Z(s0t`4@!E7 zL7tz*Q$>J55M&4m(dl%+po$QNu6k2HUs8zVOYc8H^{3=Nz%b9x;;AP<7A{j{Kw8M2 zb(l;-whHl$8VD=)f@kb~4=dKpRBUg;kMjZVyu`P}c|0cj+UL6H*+P|I_!p{!?D^xjj@_MIXt&zxf#xww*2HV4Nxs0Bo&ba3 zdTy$h)?pa3oi$R)7hp9c!Tdxdm^S$We@}o3ArvB1i7X+q_AwL#tm6Ogl#WpVfI%3F z3J!Yz3uf^UItb!WNa@x$XZv9Y-0=@OftpKKK9isLYXDA!+Yd>a*YN-V002ovPDHLk FV1nLpM`8c~ literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/StructurePipeOneWayValveLever.png b/www/img/stationpedia/StructurePipeOneWayValveLever.png new file mode 100644 index 0000000000000000000000000000000000000000..15afceab6152ce0b4d15845fc9a6308818601488 GIT binary patch literal 12194 zcmV;TFI~`yP)@Q(YHL%eJY^s95@%ob zPuPE8GY?y}*_WhhD|tvwWj7CUzGhN2E+_W5q_sm!76}>>O$ro52oT67n%(Heo^x+E z`h!3dO;VyP=b$d`N8itLe&_c~!B^aJxg5;S&BEN=9P5j+7@pAMRiRLTYgexUNB}o) z-G=g|ImqX;aPt>8p8`sI_(RbwgrPvrYdUayU{Za-9uIR z8pAL^Q53Lk8$?lLb+K3+%zGX|@RbI@Yv1}76wl^ad+sF;g4W{}tMl1BboaYp>=|S2 zMZqUCO_S9g2t4zE@VtTGD+>S$era|N?5;i-+xTJwG)-e|3VwU1J@$Sc3#3vh27+P1 zCo?S*+U@pfKYw6fIRJQ?Pnl1_*U~)Tt?d?Tv&=Uz^ScJ9k_ra!%x*qu2E0XMc4%LZ z0mvx$9uovDlgYpwf=-c@=Y|QsasY^Ge$awip44b9ty2_*^{Mulz>@>2gKY3TfZ!_y zfT5bd?P`9GXMU?4?i;(~fx!b!F!O^<;DNw14+y6Xg0Bn!Mryt*0c51j9t(JV&qIYm zVIHfOu?Q$5_p!e3PNT>>-nvvOHOPFjAQN~NWC7DM`8lU#sZ%@o8Ch;R2lFq@!~8tO z4 z4?g%Of1vkl{qw>zKrr}ZT3U^rFGzBzU!I%$)wllLTmQ}LtC~vX8aAoGZ%qHjH}9_8 zg_V_+A5*_{VLs9Qnva{T4uRkq+KUeW4F1LWi(}6>9bwSUX0tPx_5b;hB@5TCUV8@% zV}bUrk?4LEEFXOE{;B!rg$BUP+{}S7eJ`G(yOup@BLKcbv_HmCRb&As0XsK$aD-ZxTYHMq(Z5YWIKoA62Sy?$X zKfTZZAhRqh*+R($z~%B1RtuqTLy{YVzly=Xah$uZto|ziPSm{YKdNE&zwH8m2VHPK zP;LA3OvAJ(`>|Q|#xmJVqO)$@ymhL+df@<|PN{Hx@j7(&I;^iuW|OV&8QH5>=6|G0 zf$R^0AYfaK#=5b;_m|n6e}?Ev$hg+1H%`@GFB|~KF3w*Zv{gw>w03f8@^WRN@@oe^ z459z^_06Bwsw40WV!O{FTMH)SYJ78;`;hV zZT*YQpJLNE>Rs2rSU)8%`SwBqfargIe*VboH8uV6(Ci;>H7q|Z&J;s~<4VB&_4}vf zrLaAB08kIPknUPU-}-T#4v(Vk@=R*>YE?m`m6d@Z7Zq7 zc=K1PEBF@UDSC1|d+q>0RxV$G^5qIEWVO$$ywuiW*Of{|Fbxx&o|C`>g8)`4SIX~z zAj;s_u}i9}cURY{D>tZZ7|DXzc+z0?`sV4=|8ofdFZiRr>7Cl3zy8n<^o&cziGm-n zD_6=(2!Msdf=^cE!LL#~m&+wOCpVRY_da~@={hliJy!s@UMY_ZzGvTgRbln|Lz}g0 ztqRn)8u0pSi^n;dvVUouiIn|V-MCV@%KCflokRz9ce~F`_LH4D06a}x{Msed?>rbT zMb2L04km(CGb*SPI_rxmo}r3hL4HaE=q*Dz1E5WrpiIp}%Mil{^bXBvp<*N=g~~e#>{3q1|qu$Xid!P89&8`6m^8GJWekFs6&3s@k|q&SCKX zaLl=l4?q0yFPqI~BRD9g#Q0SK254+IPVB8GWzQS{p60)XnP0--w|5MXCE>{XX_GQ+ zHZ8b5-GDof045Ej*xXx#?^9A(0!+sow2Q^!4-f#~4o!$?zGrt=t50eh^}mVgw+-R> zVn5t}vg-%EwVOk5hSwXt@Id43)1N{SUu;&_I7q_U~c_% z(7*Xe9r@x#Se(E4$;~s=E}bt8#)ECoR;tw-SXFbmT>SZ#73yCqg|mKVJA5C#7v67X z<|@p+GzS}BY`};A{NaiDWt2U00C<^C!4EP3fxxRz!o;aEtIJx%;rn{9``xXFTdd*L zWcBm)L0d~_sanNy<7(v!2JmtG!D{-z&^H$Rdh3gDz+1gC{PoXjaP<-&&z_qbe4Cw{ zg>PJHvi48@v3-(Z7}zrf0BJs%7ktks=(!9J6anJ6Ml3)^AZWE)p>IlB@tX5kE)H8C z1cTjU8GK`s2ZonH8xs;W=h zeFM9G2|@7vlVyUZ4uHcnU*GjJU&idRA{liYn??Y9vU(>pR zfUL+PCl)31wm%j`uCt!DAK4!ab0I&fS8$ovWDnTw=6z zma59s<>`und#GSX-V^S3nw^!#R%7IQ)6jW?tGUoO8CnTCSXF<#MJ|FYHn6paHeN@qBia=17<%PE1ngpUh)jg zYtvbggP;!|VO>Wc5I`tB_aVT&%}0#RE7ukmSzkZ~pui6bN{B4;fMS0OtIvWL^a8)} z_~~o?xON;692o$)Nep(8c5tAj+mP2p$Z6O&>QGdD9hFn@*faW`QUdW)rF#5XTc}aR1pKuovo& z5$1~G?_vA?21?Xg>P-Oy|B^R9J&_*N-Tf}KDe#+hR?u!^dBg($kTC~7{MfO2YIgk+ zg5dkfm>@9#4hue+-t_|_rw-ZBWdO|nO1UIf3|dKej^anM+9tG@Qr;NGg%yY7BN8M;Rb6H{U2uH=GJe&e(%mAHkaK(G_Vew*9dC; zB>sC=mIMT21Hj9Ck8MTQ&#V&ModkbZqG!PDHw788BZAVwfT4zqm6H7HuavbVwqK72 z*2LOEde7&%q>xcgq`+_~Z7*aoUO%qgEgpN*gL@;_jCEV-02HPD2`f>|( zp5G}?2e`IXN7`?l^U;z1sJ3lKMUTw5$Byq%OWHwC`?Z*RcP1N>d(dY4LHt zFVy7;p$-XkapW>_ZrPE)dM}$CWOzm8Ew$-?3w^iz%E?4x{3v+FI-!?2zg?` zRV-C3?-t~TpJBb`mPEFA89~sGXM#fkFii6)__iC5I3Va<8vziD6a};Y?aBq^?QtGN zvf>5b3%t?e!T0(T=>L{(LtYbE?MVU;K0u*RV0E+EWOaS3&gv)-O6!~cdta5uayS9O z=Nq_GETn4^y02$hoL}!>q2>|>Ke*Mx-26oX!qPSQ<2|hZE0+H;)+MB{ zzpoRW{o@fCV3_77VF1$Uja_Tx_soP)dHcfT9|p%1e1Pf7z_>=i_dp;>4uV!VFvkM` z8G(Qbfk2U!19OS~OJ9rzfS3K_nl^E`v$h}Hg$M}zZ%^z&_KQ;dUX~rbTm1Zy0Pr&3 zcEaPfnG6Vx2&L-5`Dx+b{#nDhve-3XG0TTanegpYR8$pNq<|Uy0cMhISU};}cJCz` zJm>n304h1UCxV4{)DZ)kiY&0}zGs>PpzA)s*tZ~i_B`(04`2Av7R=vU0abEyc~M0G z_#o+G28)X3`vbxbmm}Ln!yyaY0XEKauzbDvDQrAe;e)jttlWPe^3&zP+{MBQ-#Fv1 zdz09@Jv`egc*p8q{JF$HUdCun4M9;xN#McsYR|fROs`=->d=ef?6;kR>~a(nQyc(f zb7u)`Z3Y6*is>d4CsC%5KpSoA^TCH+vU4_C@oaSf0I|V$15YgDG0nI@V8JKb8(ioe zm=qVH^FC-s+OCAWndcYDMS`v>e4MgB9iUnYJ~6)g+fJyOfEK5n2eb91QaEDj_ zzQ9?)0A=X>Xz;Z@G60lg&uBkxLpspkI6nhlzZ9P1oFD+i0077s2zm!1{CT5o4mufC ziQTjD*i3YX0RW1q!NoHNH47q_wD5j%AStv7%04Uzp6<2{`HToM(uS&t(9vxunkM8L zBIu8JCL_u+U^+hn(_-0gn3V$+?jfaVd4Xxec982aL@+R9{ACd{2bRc|A0L*VZ5!9u>lXup=H6Q{nGM#Ge^O zMONW$l7xQBKOv2Ny|tQNzyB~jkO1XS`~@M5fY_$Q8LgGf-Cpp=v0(56ZPIhf=v6FL zcdQy*SI%&%o-N70h7}cfuWpTZD07q#f;TYu-^B8ZrVZJ2Sfe}uWz*bKwlm)T&1RF8 z5AVq^OM-H&;(TgpNpEALM|HoLC@>!Pk1OloF05`DQ#j-|YW&Hl;1^ExYdqKHE z{hvQD!F2WH{U$%?R2n64l6j<=dsBT2St&VU|7S>^N#J-gM6#Sq?L0|@gzl<`p zyvy5f<;D+w4e#2)EWe9e|7LNlC8>1;035^GyYWdTQSgHR=tdBvL>Mz-#n%_qcYtTV zXA554(VZobg>J3Gf?GuZtYPqf;7!E#;Jk0UL9Mko1ul2EqnmjD&OR?$bo3j!Fb8HQ z!~G}#TDyKb1NWhAS3nf~HN%2meW)D(Krs841AESl5qt_fD_wv(zW1sIV_CZcEF0#} z`(sA$kVTP%y;D5|05U$H6&1Fi#T+<)PWVry9Q>}1kJIsSX+Z?TF+f08Hum`()p9&h z`uhAO_3P0+(sH=}$~lg>SIz)*wEa=(&fxh&WMnkl)><*$vVgws_e@`Im5r- zL|$51eGeJ}r;Lji%dCF%=n=G9t-*YKq7I+5@m>#Ac=KgaRDONi;pZ*yhywsDVjy2Z z1`WB-_QAD`7+S~U?&5@Iz>j$ZY2EPKLCXact+OxhHFWJW!w8&^ij5~GfKU1Dt`a{P zO)BONoiob0?|gSrc?S_WJ;nR^U@0vE=gO5>dM0Cpg z#?0{natlSto~W_*`u!TrBM9`pF0|S$$mjBdc^{x?y?M>wV%wAx`G^AVm0|WbODLtwO;EpY9Je3O*SDz_W3I5Vf?z*AWoN zLIFR-DDY$yd}<4Fn8PXfqpWGk7*ronivcRXy~FEIc18z2&Q{ztZ@PSWcSA-1D2A#+ zH8jzQ-$#`?gLZDxgmaU#@Zl$$Bj-z+n(U$!zxkp_nm>N<-R$R7>aZdToJmCKXdoc- zfZ&-2h~RkF;Mw%Ld)q(xDG$8I0G<&GwA*dg{-fUnM*n2N>~C5M2Gc#J2?029%?ISRsMP_>yMuI?6_k-JaZ!ukp18_B{be0G2hd8GRpQ~(1Rc_kbai+$IaWVo}z?)4bU{$Xni z=?)YoJ1{-Dg8&%K=mdgqy*e9`11ZTRHC4Qx&%#@S;Dev}JosU|Jf}c=Yniq4rN!i4 zd5$cY{RDtvMj)u9IRO5m5&kxbd8Pz%&2-(h=hi_0-1&mD5!&ausaymAK4X)t&7G+w zddJ-PEHVKMKp^GQ@eB06AK3gE@mEl1FST?VP~M@fJ4~~>oK3+%HZ?4V!RpGa48Odn zLan)tXzl=PywCT@@dM{d-b2)51tyhBHa{&N^1aXNU0VaI&)H!av;US0fa`c&Ex=fI z1otYw{f#pK9rQ&F>7?dr`fnAG;wN$3ov(ZA-0zxXLr$`w-cq62MONkR+0Ws5#=akP z!}8lDwFY^aCt#y(ftpp>`D6lu&BnbaQ{e|&c*fjp7DSZ9Tc0#Q(z{N)NBsCyif7~{ z04L<~VDN)hndJxP#Vu&rb=Gb>C74k+@ZuYTd8a}D8RK*R1%Oa{Up3YcSBrq;ONDkoDB1px;At~W5px_tJ zC`+x~gBSLK9|b{m(}ZbFfy>G*cjOja&xhwcj{q>8uuq8EJ&jMoR|J$22K@FO&;D`j z?xp}Mn**o(M+5*xU=>T%Es0E)`CDw;Mqi5vY(Gc@0!f>UkAQC4Ub7M$&v`u9;|xN< zSLK5sh+4fn3#IhtppW-@?m%Gn52Wcxv-{!xu%`rrue2ry z>jOX)lQDpRn!wsp_`6id#WTQ+$i7!f1$luzP?1ptI1lYxh$z(r4b!68=0Ff9CZV~j zz@2p+rZW}>H|$JfV-2=~4#f8^&ikyAn+oSxT1t|0XsKk=ArioDg#P8e9r|wf#gW1H zGA(4ia7K8&w%bqx0a?{R;qvH*r-fYA-GuGxawg3ZciGZ?$!SwsXt31-_4 zs|f?D(1pCxhOVuGw7C_Zva0KU1i*j+ig^(lEgNeAWZbpcwxN&{1|TR*nXs~@VF8$J z=h)cnS^fwG=U*&@(Yw6v2ifc)b)NUX<=n<(o!17Pyu(T0&`07$zakUG2Z zh?2Qa7J_5Nv*G{*+Z~62ph;lJp(NNoqYwaw*?Ln8)CMv@8bQ!?&*NYSvOv9M4Qfvk zifw*xO?9vcSVYj$BG162G7tcO(?1&9h>RLFk%GVJe22BW;3q;Bd;ruQ2#f&? z%NYb;MduR$%I7Wgzy1ymEw$R#`bJY&o+~(?ZZ^dRj(wq{N?>h{VgSz!H_zHu9{*dc zE!n+z0N^te!-i}59CwU}qSDb(gU$(9J7BuUW=k?OP}tf#3QSMogSIs=dRj>1hMNi~ zPw??Q9$1lRO19z72GYM~LBHRJ(iwvlcRI8C+uXTnHOwA;MD;7P{#fZ;F8=ty{o1WA z$my^Ic#Jdfhhv8nmp~H?z8y$CYB!n=bg)r(^CIV7rvqiEcFIu6au9TOM5yno1IcA~ z&v)Vac?&Z9N()&H6Y;zXSNB-3_0lvnblv_8+nbG+^AXk$(BEsB3Ax(BWFgSLy80vV5G(51Mt*`y=h{19|AU z8+`P&KbD&OD@Y)sr&z@8{$T|0Drxxn9%jewxDcW^GrGTLl5%fP*Gv7{_vz4{N! z=8dhEG8zD{Rn*u^AOleFE5R`j1nl5E&!$GpWFXkwdTRb0YU|s6YEWC147jtIMi6w_ zSX$vuET88zQ*ZeorFJ^Nxy2mH+7{QwjK(ukOi7?l_!N~^cvcG-T#;zL@85;kKoL2h zOgk*C90c=&z*8-nyiM7^QV+9IxzJ?*prB_Xgo>H($EO$XpVzPGZA{a^NILXgTHiKf zH<+JMUJgRUbl)|JnPZ_ZL{}5@sQbF%AYLVMpG~RDQL2WgnlF01-mNOV=wTCk!NeFY}1P^pSC5QUzRM^2F@k%zU zpmlFEkmSU>crm=!w1WE~PjATw=Bs$u(zF4}1o=?Fd3=8xd|;8ps1QzIii2nMC)rQi zMqxkBUlIi^?mL!i!2w0&AW&T9l+q&7E;?7`1FhYJ0X<<8qxeG84UrXSGuOhcdwhH* z*JS~jJ#1 zw(^kvry-*v5U8XrP*I~xc|Xb2LsH5LoM%~0xK%3-{F}jJ$c36Dz(zX>GD8f~8`GhAh0 zaV|^=a)iRgC<8>g0R|Y$B;ybSc675h69AEIMI|B7M}2PZMuo*^01>rKbVNV!Sew0w zrX6B;&VZbauLW&%|oMDaOtVnzmDZmgtd+^=1 zk|FuaU?i7uc+w_-1^tAq`a8d>Aj`y08Vdl;j(;gt<`I%5k%7TOu3;Yk;-cgON_3^h zcK3Zz03k>R8HxfQwIC1#WHlz8hwbf>0cQRxR;yS;w--j%c_ zIT(BaYkolyDe5GGKgv8Hcs1S6cF!hDs(H_g1;OswFdzu7qT67k3;7eP@9xsbITzoJX! zI_@0F#I7oKrw88#~x_+FdLla0z)K#9R`L3EFnmd$ru2Ugw#FH1H(w^2;7Bq zT!_PG9#yuc4L z8uzZhXIP(_J^NE@pE>4=zGq*dMyn0iuv*Gx#R}F7JNu&{iSH|gMeW4*dO}nH7a@+86YG4ZF|T0 zG4?B1S8P>X!1g;>7J?Zy3S`H&C^(!E^Ms>qKadWu-SgkX%sJw{os*ZjJDbqg+tzvm z%eZT#VOj46h-+0UjotLSZvT%5G${!Fe(qLcYD_>xk)Ar@TrW^Z1VYqD!$58K zY&^#C&+5l)lJb2)cI~`zG=I2udy`crG5`T!?6)8T&}0kvTc|CE5stUC2=!P*1cKdn zYkaIg@Ii_)9n|^01shK$LGO2H(G5jaR{bpV3F|GfF~zANb?1Rm6?u zs#${s&ya3?&Kn*GXk+g%YDX_S$|(3`mNB3ol7NaV$qU{9fq?=;An^Gm@-Y12n&H8Q z@w4A{nFNGG<`1J(0>vnzI0i60KMwQfE2S_9OcyMwFrFW7uCnh>7As04IDRMt&|eS) z(Ty3cN%2h3*pUy6ArRih@<(_=1-suvYCA{olx2Ae>om<#WQ74HNUL;~)w6~IL=c37 zk{}LeiIElzcxp^gq+<4Sj?Wfx<{*#-A%+D5-)>dy+lFC0O0xezff)$!F{NoMl96(} z44}qCFaS~@`vBf`MfgwfVrQ_vsOvg`;QQFVWGU7qTzd)j5fKxdL7ZMV^+eU*+i{$s z0SM}_{~~UxFp4@|iSzF|mTWlv$Q_2UMFK!jhKhY(%kf6&1D_#H+TXpig4eTCVfnON ziM@3X;2RaVQ^@2XiG|!no6zMwIXH?19XfEbZDWX`;g(-mmi4FZ=Zkx$b6r*BC1c-Q zP$!fM^x67_w8}_=$;K#cR}|&Y`q{r0b;) z-tl8p{cl`?>c{usZk97-oQN6?}skiMJ&915s%}5a4|w zkx9b_gCHPBQi+v;le4N@|Cs&|1XR6_vLx~+kUR*2FbIGL zTpJ<*#2?KYNP&2e8BWalk$!+}7%=+&`NNFBfUf{~1X!FfIM>{g$fQvp7zpr^rD@E_ zo`q<{evbko$8JcJd4Nh&!%uVs2Onp%bG$leEJzaE#O6(-XZ#;KWorn6NgQ9qOeAJl z6cqU_g~SnMgZ|P|+TXwD9C#stg1{1`YsYIu<_nJReUhAEi4bH3dizM(=pP))t8IL{ z&t#TG5EVoIvYe4Y2fa51x3^5dbhwM%u3*N;Cu&mM$6NO}Re5qSjt$e%6Exi|KXVH@ z%&uUeW(CWVk+K)m35D7&Ae7Js-Tm&Mot{WzmZ79X=8Q6uoM93$U=y;`5ZM?3h*7>W ztN_hNz7eM>!{zP9Q5-5AHX$enuluq>x4%fh>ciHwC{z`CL;@`7RMzmBp&V^?Tg zmDRyQ0s{q+7GwKt_ruU$=%lr8$m4U!B z)m@Ja$7=GjmiE`z9;tBWzPZ|H@q29v-9-Ky8vst9(21o3(CoN_Umyr_Vaj=y!9Rx4 zrE7TCnji{)ZP^xJxr}31L{WX&u*?d!7gSlPpyV#lg7gFjMRzak;2;|+0pKLD`;WN9 zTs&t%tK<7GpB16A$NSky{~X=Df(L|Ro@YP1&qOxS+0t=6*=+mtSjfr8-R?B)bGQ5* zbqu6^EChs#s>ln*zPY4MARv17f|^zbi%iP|MdpDwO>;0FWQr(IMi~JitMGv5Ga>_n z-H#-caA2R+<Z=dl5N@t=6J^RRSL|- zzSwu`h=Xm9HT(SAK$}zi4pEl!&Xh%&vOjPq9$X`!`v?FqOpEFYMx3PL0)pTTtiOrc zN6axP%QDMHN%V6{5CkqwK@gP`c50Z2!<3Ywl@@;&p5Wh?>#0KvDfmig<6khYnZVAoK#0`)+|i{fy1&JK?kY zJn*s?IMHT7lx0>|5x`XnoM9P%ieK|!K^ehz0mpuX{aHcLE~6AIxVu9-;9&=~y>ItX zPF(KBquOeoT7RxIH~xzz?o?KGh3{ypcxkg`e_uZ7tKs)hZJ!eJ{X}X0N=l`P;n)K zfr1#PyU#^@00e*=4QmdHuu&CzJ5>Y#G*DVK!@gAe!g(3lfYw%WS#haU5C(hQzHhE# z^}%r-apDr-nIOpw1cJj6i&+64tq{d*{9drRk&jkAnYH0T49y@IY1wg1{Jo#=Q2htfs!%Gkpf=*)f2zpT$## zb7o*n?BhFA!MlX-YxH18RpgHi)A~3irjP*C@LDvpCxR^5Sco-I-$eyXlke%dkz_(u zEtC@zR9S?yB0@_?U-cFIhK!4mZSCS}^lSbMzeDSZ4Jv}H*|A}5i*NKy01!3DalkN) zL4R*=FT@g_Tzu8cbTXg_Mxr%d@Vf|*yvF@z_IM#6q$MAK1cZ$THmp4GlkrplFwBB1 z5ds8empmb#_Vu2b$&!$0zG2y{ct&8*0~jI(@QfJXUc(8ke{KK}wV-5JrUiRD2nt08 zM{t;IjFy5gw^=2V>?B^}Wj}$SrJG>%L`L;Q z0xg|1Uu2pe&3wnhhR&S3rkt0BmWUxsxT=}5jf0@j5G6(`A(Hf5dx~9$B zTD;~*?aK*(5$5zPAe;x~!vg~uF~ak1vLqy$PYmF(0PA=CZ^JY{YA+N3h8cmu1H|6m z9>^*Oge>t|k)AJ5SUo4ve2)Rhhy^?b7^V49d*J~PHOt^&Kv=Na*fT&xoum>p9N`U0 z$e!EB+V0sPD&e^UNjl7i#KR+e8Fa863uMt{0DHVG+q(d%EN`a-lmhI>X@1ncasY^$ z<2bB%EMef!V+U3{&$o2svtck&@Z&T;YF~K(3^S`|g=!`pvdqd;I}f=ut!rVx z2?SKPb};iFC6kbU1;Cg_4B@dv6cADQ7->VK;{R7t$0z^*AP7b8e_O#>v4*CWy1;*f k;N4ew+nERG@j<`40p(wcT#7_DyzhjMDv=|rE<>Yi%9B~da+$?Kf=|$B=7rk&hsdMP*s&G zFbo3(s33*`Bnabn^GOq|Jqt|Dl+Qv4Ss*YRJeqsvGprivvu4r(-(YzyYZHE&yL>`^ za%pVG%mu&$*2c31@1AEr96mk#I{Uq{Q=t&~o3w)f9s8sKz;<%+0&K*f`9)KGBP4h55|I_Ob$qVoNCu~(=ZD0N6{Qy2kCbz$$^3(kR^#| z{0dCP?^^sFgN_PaNHUht^}F)sJ?_Eb;UQdguIzX$W#ti$@8Q}9xXwX*;V6P~EM?v! zq@ALn`Q*tHc@v7F=t)4>whes9sdJ^eM{xi-zcOYa+Or8IILIH?;BA#j)2;usNnvP|>P|9drOPNH{6O)s&`{dwBaze^tXddJv95Xp> zAAE7J`BSJ{xtm*qCdnrx^=y2Vy#mbs#0QfbPkb#$B4!?B$u{*|gg>7kP-nU4`lEuR zF7m_&l!BJZe~N;}L=y6!+=2U_tv!pp&`$jjq~u!J?m8;$eq(>8#}%Ka>?ns#dg7hL zvWi0aiClK(j-DQkJCI#uV`#LdMixBF z+}SNRUW5xzn8UE-{=)T+S41|zJ?`bcIgT^Fhl-g70{6Hq2Tu>cw(Y`sa~r%`w7#}T z`h!4Dc%ow@_`VNTC71Ad^6xQvt~>QT!vt|XR~88jIBR!&hwfE=T$WJTF60v*aHuyT zTRcBI#{|_OtH@sSmge;jvU;-ks)6WxDjmhj^O}?)oF$wW$;$XfJVQ#zz zkxVL(SmT7{Dfvg|qazDtKb0T|);jAVft(;ejpREF^2r3eH@?uo55OOyitQl*16P(T zC^LP?lWA%h@?cDC5y`u3@K8JOT{%7t1Y=Box<*WX#jMDZLxG{nPDN&Zx6_qMK>UzZ zOjrR(3u!O1I89w(0V1A&p;CmX2EOOd4jXa{wP2EEJ+^>sK6rR>MjViCzb9)I1*|{l zXFN5kt=;HSg`dwTx+tIfplkZnOQYE>!=CBYEVDKd$A{5-(}>pFGmKo)^i%`vMgxAk z-;mFpcV}tVQa{Gn{FFp`m>Tt=z&33Y{J@9yWgFac7mkjOBquI+WngFT+Z%WtjsZUp z8e3!m5n5PIeBnRuTz01S2$v_d*XxZRG9K3(^m1fM!fMgQ@q)x!)oR+V?v2~EYW_Ux zUM(7*QLYJ@Eg;FrY&-jovee_=WVROI`*`_YME3sU=p20{jshSFl8FE)(lN?>iUXnf zxG8HH1cUVySzBv#7DVKfAUL}?lcc63VMO=)5y@2~vF}CSYB5pSw(K4Us2NLafEQmx zHfWd{5oK8>N-YPS1z@5Co3V_WhMJSyRk6%i1J$6hAN9NZ5G4-De?mTeUk4Nbi9N~e zUjds7fC4T%mvDT14E1^)4xb#3KVXp5s$+sF;CohdIrCzP4lBlXGgkgvZ7-^t`{s&kZ zj~eOt-#tH)^~;yX={sX2R=No9I`PW<_#&Yb8LzWmYW$(r!z5a zdC8ypJ>H(cZ7pyz3B73Xg@Dz>au?P@@>^IxU#9bqty5XQcy0+H-$xOZrlQh{7%<_uYda$Tz>41J!*HlM=dLb6f_S0+81qTK8b?q<@Ya< z4FlS-za|o!#Yi0?xlyVRsYOCnEzZ=Pgwz6|aUdACnS7_ zB^M?lMq^2xDXq$!@xM?sA2+83{;A_Q;04~?vDzY!5~H+vg5@7KwrdK66@y@5p9e^M z`)|K}y{L~`V!qZYo0u73;jP@s0}5DZ0pXaaXYzl@XO3cOM0Ul9Nyok-H1U0=(xnNevX=MuvaQf5f^vSd`)7=6_ z83INdn&&pgXTW_9{F<*kUK2tr7qJRESu`2b7?`HHnUmdRD7QSm01ARtv3$yo#AbJW z8_3H3hDrEbp)Hakm8GUj5#Vypt(mHkTr7H%cjZB4w-OI4W8B4<4A(oMa>uf_?D)b} z^I??jL5TOFRi^Y$?~59rh>Ll+P5DUnlK-mx zu??nX&Yg2%0I;zIQ_DdQvW~tw0vIM8=0_MCvAm5h^uVI$s|&v09}EVUP^mCz?A!90 zU%QfE)0{%`2+I&c4*uLZ)f?OW&8_r{MSsvw+fNUl!r|eeY)=hUxe z$K_YLzlpmQPykR_hkQbrynKy8a9VnWQCuFdah$z9TYCtusa3GS+*4eWud9%Lg2zculf1)E8wx$m<4ALLjeH~V9(x@&rv^OJcR16 zOkg6&4`7R;;d76c+c}@>xuSQ~a~Gw!w&{gQnjFWO`mO(|57k{=dd~y4j+0KOvykD9 z2S64c_dwAqnE6#n{sY#BX_`y*+i&c{{@?E}>{reJ05GILEYp$5C;aYje+N&$d@6(B z0qddPFO@{CWjbl05M?HP0~#Y{_ujvI124XQ0X*zR!Vak<1_L*Ja)N*oNR5 z8!RpfMmKzmw~k`Yg-eZcuUs(qOfYmKeMeTRYkH&#!}MkH`Pnk_Zq)(^mz_&lOFw$R zMnOSg8#dUsz49CyC~Tvfs_oUFx7SObkB^UU?Sk$DWcIHCwPgPR+(Xg+B}3E8g}^E2 z+{L=ucR4r%4(3jN0*-~L28dW$bVUco82G*qVHidsmkpuK3eabOaHUb!t_9G>hLU-S z2F^4F0T0GzJ}k_?z~sv+0ImeXG6RVGZ2f@E;>x+2^{KVYcx~Go6hb_ZzX5ceE;x<@ z&1Q3{{vP+D#)1^zN&xUH7fj2#(F=M&9vCbq%k_d@XhaDOmr~g z+KB5U`^88AA97F)Rr*+}3ZvV;s=J0_%0>i$+fB)@|Rzy+>-b zGoY#EvU(H(>r+FB5IE;xTDudS>_;|mpMx)a(8DO}83s=n``KC;6`qxCUfqG z@_gF1Hynl=$oeAgA@SRSy6V7Jr>D2Q_j?bkVu7yfYt2zw0nE$@&N-OY?nEDh8Q{7u zSe6B<7R4B240ymn9jemLQqN)~H}JV-|7g+vi#Zt1K6mEs{h<$HB*67td56|sWDUu^ zUR+!(wLOg{DFX)VyJh;3M^OMgV7qV!?wI^BPHfw5$<~5|(Qf+y57-WlzB-B;3m8^! zdShW2f)L_1?&Nl$-o`C2kMasIgkL4i?!W`Pv1q{9;x$A;a5SrfWm#ak*3@sR`Va)0 zfN7e*IbVC8wb(d+d$zDoFbpT&F~+udHTMhFp0(C^4N7vsN8EwLn8E-~06vmGVONDc`p-sNFsut+FK7OGTCKzr}0aiMG7~b@fpBHYJ z5lslO$_8Iy`K@d%;4>GUF=)*P8<>N6N)Ur{KJ%OFx-Ba5VKjdpZSBp{0?Op;{-6)F zz1o&<>K6tgeU1WD_o}&P(==!Hb+6o|medwS$h5h!NZF84NaLr>VQMBYg+VY1#xL=3 zA`qae>gozmTuWJPn&q)!&xZy3pAiI1#k(8^xp(sZv9Gmb<-I;5>S{ROQ`UBzWh}%W z`mj-q7E9Y_jVUqXdebwS`+TjXRLasaCC16B3kE^3nM>Mw=HG3|?B4*i700#culuPh z6=0s6>zcm#)8AwAJ?@q2zsPD!2Y{}cR6V0Vr_ZG?8N0?rzq(zQ*{Z0fqa3~fab?g{#Xz9j#f zZ~so#n}8-pqSS!Ummc2I4RfjfQU&w}(l>$XURBoZ^YfY6Ul!Vm<4%%B5Cy~owv5_d z4SIu~Y!mrO0N7P~YJXA-3K-7ktF#uD+=v=WIQa}40eIX48zwiQn>x4y7YxnFy(dp% z3cKz5{On+&;)Z4jK|*LuoHA1KX*?ur_D{MWxQnpfH}+xw@AsFQSKa2ONda_Szu~L;8b!{y>=c)lf3!JQT z7*c@;tPZ#!P|S&N!~ILH zuNLOhOmG7M*GNR~%E#q6n0w~?E^kDkj<`xwF1ERedu&LQ@>f31=g-L@je)a zH+Ve{SOiUsN_uhJow4O5JO~1md_%T%?LlJk zKx4522w#A{qoZTqHAM(F+`sI6a}osa-qi5!0v9~5i#;Dt_7QTuR{E^XUrk%@vX(>p zeH)rzG;d<52O!)lcl@wGs5Ma7jc!gibO`+57Ov&~!1de{EKBuWPXQJL4@IJQA4&f= z|K=N6pPrn8bLrgn9sOd^d@`x5%aTvfbhX@qV%$8z@{bEcN~`3bEBLHo02mB{Q3yAy zKPzBVcvgxRw#efbU2s@xK0ZVaumF|-%iiP-4j@C58qQyT9R+BW>HPBLv8;m<(fNSs zaJrq1&84m}_8I-1zCOL}`*=VBR>fMnuXY<7)J^j?mR%i`CgCmbVU)KcyWW8MqkXgj zK6e;n^G#L@N*^pp8Yg%$x>#t$Iv5&!Ux%QkYC`d@D5|32IlboKO-uB(xIS3(SN#I_&vWTH5HAezT{;OkX zG#WYbEz4SKpV~^Jl;yjU1sJgn{30-#e3g^gQAAuAMzYayI_W3ZbK$@~KxsrJ)Y#1N z3HdZf_ft2T=VJ#N==)Z6OgII?G*F-|3r!s@ACVF)C6fkTp&wO+DyD{#GEyM)T|8{G zX;U+z;8E7+VQCZzn~?MM^__DrYa%!SwXKQ;B6GiA{^ke*k3%pFWSIu36!APsUEQmK zwP!(XuZGvp;QZnonva`cnixqVwRj%){KNU!o`>`It}&&YCuhRt)uO(-p@Z-HYhUnP zfyccxv!{_wB|)>%l(mS1{hM$84%+Q=c>Crwm!;F@AtdwB9VX}vdNOc`{CU#<5C85T zmOhiV?MtJBuIp2`frKDcRb_@#p^S3|PL3o(LiQ{)n+Fqfw?DRX0h0|NYuC!jI1x|T z|MbaIaIZIepIZ-rTgL*=7O?|d@c?v91=n@bZ7yXwg{Wq&rX znvbHONytvJU)K1J3W3%n@)K-2nMwyhIJQi>#Y;ZmRdFrGUXz)Tg;VTBS#!stTz6i0 zHWzrd!3_DV>pIv~8w|r(dM)qDL&+G=PpDODzz0aM8)YsLO4&~VKx=jf9M`GBu2qG~ zjsXq!xEQVT7gZ*{Q^ch&`EdS?XksK*WCGrR!d_#2wCV)g26;A*BbLWxQ%KJ9>}8Q; zvhVr1_ofvoMG^$<5A8IYDF~X)CeSaNmGj`HESA z%9F|_jyb~8M2zK-8jYWjco&H;J#iInr&g_%4*)eyY8eQF zP{l*D@dd#!zkLx36rCto_>fC)WsHscEU>uZcbbFH`_z*q8(>FAM=1Ng^wOEg?9WAu z05wbrl@L+3(mn}#JXPY`NPv8{t2R{k$hRv|8YTNwXRjxr&HwIv`uGv6pQv=Z-Jke1 z|0C7)di}lUc`hGtmjau{8LA=g!{x55LnQ=Li|-s0lwq<4xG!DR(`T|pLbubE=iI6V zWMRxBWd*$b>svVd%^@`RBZ)ou^?|I<-=0tH?_Ea+4>7S_K9)sm*T`iy1#Q;1DbC3< zX8N|eL=ex%NgKVpec3r_qJ*Da{QR%@?x(t4KRtbYDs6;k_PY#%FjB8@6sF`;n@SdE zKc9id5=mbYBLDc$SpMTO<9zhdO$7mEKB4xjnyiU@D(COcrC%qAeA~~BHBhlEb8G~z z*OxT~fXwoGb8Ehh_$zuhN%#p$c#G<{Z#yj_9s?llgi;R}04py-q*D-NGd~H2VMcP^ z{`_{k3P4h?XZ&*}Mwzyf|0IOSx78^7tF>zSo`_Fsr++2e=9G20&w)aM0-%kT+{El6 z;uCU@c8^v+Y(e_PP<#w{aDf5&FV3gl8NT|X)9askUbl^HA|KGhw{q`U@{`O@o)ZxH zbdRM2faO(0F)*nadQalb=8l=`(7)<~&FoZ8nZ_o4F#{gt6Q4-Ai({#-RcoL#9SqZeBfAoHD#~|RIZyhBaDv(03WDIh z>$-o!@@J|K4i4PYzn)&9jf`{*5)aQ#9!|1O9!{RkV(+FJ=-rM5oVXgU768S}PlAG= zsT#D~ZFqJ1Dtd+u;Pmu#sea_c{?LcoUTxwVkwi!W0530k7hi%Ido)R-EcHktg)dOX zU0EmqXdHp$o1{D|;~Rz~9HsmO+rKAC$Bb?fv9yORuDcKk*+tJM5cx0vamMphlBw1;3o04^CHtn#r;?0sK5C{? zZq>GO@vZL1F3I*QRGJ?X4=2L0-kOxJ3Q~Z?29jVPwBP5+C#fovPP0gZY?wpA7}K$*;aRD-^o^X+=A2CAk?-?r^9Cp}tS z@3I`np^Sdh?e^Ya{Xe*@IHBC4>yeHPQoy)Lp5%z zlk$5L;LwjSVx?wl|dLPIxLX!Wd z?-%w%ca=`DH1zzVfu18pfnNvG7bhlLa105Pgf{*OYaoQU^YWWIyrsn+EMDh<8MweG4Jd zw!8zL$+;2WzANB#9rD{H(p(Qc#GcM z#7l7}1~HA@_P%cf=kLyC{oVilP6ouq#l_NN?_vO)pm&o`la#j_^~TBZ569BGNy>$C z+uOT6)M_>8e(1{f`Ng>`{F=kX`Nhg}$^Z}}vFdo#9rgp(UoO=d3H&ih`kcZN@Y#Bz3aarV;OG0&Wy;~qRdkUlNF+cH4-0*nfJIR1iB zAZr+nJ-lKX@x=akI|!DXW!d0K?0y(kiFJr66VU#cV8C=XCV0MKr?WsQjeLI?gz zD1Mi6jt4ox_U|dPYt@>E?YF&t51t-Al@f*lu$9AoF8J>I?_~Y`|NH*N*Vb}RGILf6 z1`2{_Se~E1KR>}DJseBRGA#-KXfzr(ez==}Sy?W4W%g73E~?45zyIg&BgMN#i~}H1 z0cGX6{>zUiKLUC>T)e-4Ctp07+NoBnNtv66L|#QOTfKKyo_wU}z_Ql0T^m3T*^Z$#30|5X4001EW*D|mH%sTdE;m!Ao00000 LNkvXXu0mjf)g-84 literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/StructureRobotArmDoor.png b/www/img/stationpedia/StructureRobotArmDoor.png new file mode 100644 index 0000000000000000000000000000000000000000..29b2fdd2433923e0523efbfd38e7e4f383c70d41 GIT binary patch literal 13662 zcmV-kHKEFhP)5Nkl8z2t`@@4~Z9vyquk>M!*KIpS$d-wb7S*>=OGd(-gZMM11VNH=mURKpD ze&^g>qTlkALnpz z4yH5t%r4t<%;Y`C_m(r+if!9+ejx;OpLfB1?t<&Nz&Xz!E`sk{#`M_-+2UWNQE_JP zP1BSG6`@%AErEb6Ek0Qog}E_Q_|$4QYSIY^G5*Lpoep%Kb*?*~pE%0_z`Ca5f0S0Q z*K@J+H=XZ;A!8E&Q1PqZWyPOo1cV6~5C|k)BonEBubBkEQq3m_JxUMUmj7NNV{yt{52?OlE_S$E^TCX?0 zdeJ};Q$l3{t7g$A|FJ5-SH0&R$wL$4y>R5ElJSW%Q&(W$du4C(?7^c4GD>#%1lU>t zK-&LN?EK$YrTELNa-(v9;Q-^^u&2O)PVrv%dG|iX-|{@~o0UrCDaQW? zpWPRc=zY|Q+QbM5`>*UntJQ*?TRYG?Z2?E!^L-z}F#M>uCrz(zSC~0iI8c)@+|U00KA`N$ z=L7pOoe;C>ywxNC2miO(`_6yyMKIjcr8P_b|C^r!V z2Z8J=EJmlTKwyjk>3Zb_W%ncup`y0(w+Rq_Zu{o;8)whX4ryQ5Nx$d!eFDNCywJ>D zp*3D=NGBk?`pT>D;K2j=9D#oAYwJXv%Pb706yJN^gAgfga*rT@Y86ncCm=9Q6P%K> zbj~aYHZ=sn0fqyo;`{=}rr-0M&X&`}J^r8JX!w_W#E-5$dsl1(g5huo^?F@8St=34 z3<&fqUsGr1@?trq$>pJ88F#CF4?b_HjkF>ITK*VL`y4)OeJGz*5fEA1JNV(;y@27& z4$S<0oEJecBZ@4V(Olgi1ixOXRbQ9;t!@7^?)z=@KjH)bT}q4ME(SDx^29G-g?1Zq#TUJwglMXZUg-rfGxZP`>W)n0-y48b4x(CK!h&$Vd1 z{pji9i%dk54WHB79X*5{aPi88R%}6QY=JczgIlak#7p>#jV9?l{XOK!XWGG)>(+9AH8( znzRwwbD?^(3I)vt!?eICT3{CKYfswt&28HM0me7Z5DZ}) zz88#w|B3z=pn!0O9$x!KuEFZ{IyfjFM~{zI27zwr7Y&(cG^tAoIS9^>?su`{$r#M& zWI|D?eHprwYZqsD6eHj|9-PJ|oPKx;PUDtZ(FG=m$Y0{vrAYVI;m2g#6HRyMKVMo4oHn1mGbQrcE-|ri??HJ!?im ztXsFGCfC3-i=hCfGkMKS20(eWx01YrRSRjyoVQnMB$iQBTw zmodCN1pDt*YPEmub-Qm>s5_Q+?@-8)V#hoiMDNnGjzbQ6$p%?0j#jR z$Rd%cRlzXF4r({I4=~>4CFeQDheO~0L+<-uH@JU{_fOINO((xj+k0gXjvgN^1Oa>H z&MUw)wvwZL1|t4={jn*4n@@I5$z%Q(Vj`C0rN&~=!VjHv@y;v(8DmsF-h0N z3gmQdP17cG7=|I)klr(7ExFHR4mme{j+Z*_;ic`DU^p1Ua5y{%0DT!f%&~{KFGBi+ zgDaV)Dq{k1?@+;Fkdt*s>Tm>x$H)xiRRl~GWulfy#f}+Ee;a2$U2!9nwDdrJUw!Co zAu}W_f9s=YXkt1M1>0} z2M-=RfX=f{ZYU#ktZIn5AHlBpM}08N1JrMo1Y`kCxrd7;K%5wLJUJEH!ogH{F2-;= z6p|SLWu?s2M+AaG;6q2B7LO3Ts)a!ae$SI0jz-{nC>@0{nAn9A8|P&}yFeAj<3i>} zK+0dK?1(~+(QXuN`vCn5m0IoB@c! zbCTausRV1-!#D`(YiFI0QcF9YVmD!gR>)-GQ`?Su0Q^{jfSedA-D9qh7Z`y+#-Rs} zqqa-YDN@zVOy#514?smHxhY(Ln#2$U2R6V#rChn|^}IuT)U*xz&oKVUa5Ox;Hg=%x z%`iY}d#~)l(c>dXnZNL*FMesAsdspv|6dqi{RwEp4yr*7b6HL5a*EIxrVGznvXLOO zAu9WOXIx6cUgdmoU91hV4V*-#bTVtJnjbVn5SDJ`?uC)b3neB>fRH%o_ROlYI+=gZ z^cld!7i26)5L6erVK*2JKN$4fKMq3i`+nccNd*BbysHn4iTe z9<~Z0?CK#c4abpzurpBZHzFWRj#}UMed!VaNjE!N6+j(_7i3klXp{dKUVjz+5E-k9 zK)8pVGQ;NVP{!1UafJbye$tMZm^P0D?`h-OP^BBNS5aKM5TUwjkVF%>3TJ0{zH*DMfbBs^BXWegN z{3Z|iUt#RS+>$0X+xhG~1Ei*}y*(W{87;<|QSr0zF|^f+&yr%0Ik*EqobmyWRfT$? z0)-z2GS)4H1O|CTR4r9xl8Sxkz%en}xDO`-6HYuV+EyL}v7W!Tto(gy1Ol>v2bk?M zsk5eSf?*;%R5FYc4`;r#^JmqfnX^aBbED;fW^dU)h2f_vcI8)sFlhOs@S)>WzTx}c zV|@M%tjCie3Z@?rETYUc%-kovX4xp_B@1*HJ7yiTbnAn2$%<4VFSJ4)xA7bdSBnhX z(RqRBaP`bc09Gr`rv{RVG#<;u43QsHkxyodGtWdUun5z+Lmo~dfgy~#;CKoE1O%tF zmV~ZtBJC7Bx@nkqK)3H80DfNP-S_^tKk$eV?jd_MF*aA7mk)_Kv7Zfn?E^f%^r7O# z?`8{YB*h>AbdYj*6f4<4kW`bg%fS%BE~vvEV?2!%XSH=zM8SPvGcrgZNG;1a5)8yx zy+kT7I$P>nicZF&)_R-f zoD%~)ZfnjfL?_wqmyzfuUhlx|VYu+!wv|tUpRk=9#M0&U3Sb~3AZ&BRcx~O2AZR1i zizEjU2&T2x-czZN@f0b$T$8e*++HscGe$s|mAoZ(;FK!|tYA>_GXUUAKhlFBSa)9} z(z0SM&V6eOa=LFI;KB^GGp6Mah3JrvVkH3roo8e*!0vO9l-y7i*TArivglzqm^uSP z7dT$PEo1>=13%Ct2u}wgl<`@wkk`fzdMurAeH?e?vy-ufez^`N3!k;68wm)8h7Gls8ke4T*0A{GgE)$xtn;027{?K_U@-ipcKWN=;<2n7B(4}$D90iY54lY*0FukW)4 zv?3pFz)_i#c%0l6eNncO`YtlY2h&rB}CipdnNfQatIa{e@iw zL9GEEv%x)U<2VHZ6B!1n8!lr>@#)gDwyby8`BrxvXRXCJmkByVzdP?evM~6uD*k1x zY#^P7%iyDmpUOuCwci^N-763*vJ-F;S7Y|0GZ_^FoVOjEi=0HSgg1Y0;KB^6=o&cv3OHK|1gvPGY_g4V7Dr*U?l-#6{k1+w_<|$= zT3o=7q6h|=+>J@!b(ybZSMw7qlI}MR1|u9pQGSQRsi-MC@OTO=`i3+&RdtG1B7s!= zkk(2xJJoKUQEBQDBN^X@GK3MX8+lOI0j6NQ5IBsj^_WB2c=4;wP(Z!38uDqBSbz1*8S?AY*)#`T$sz!? z;^Mtfu`6pfX|_okW-OiBq>DeY79!~s*};0=%6;dJ5?QR*FFqH_xroJDETEUH(pm?J zb-5v8fJ0$92fc_x8N15EWh)qMM7kSaJP#{OyL=U^B%Qmd1;}(rkzn9?O?`g#wh;)d zXuwe~1UIQz*$_}MrsFH-dX=Znp9MhHb`sX0*g|)o^W6KBCnG3h@x4w*fdCt@a-%Xm zSJM4t2!IEy$cF3ePd8OTS2n(O>NAE#&$574*nFzA4DlM@SX zS=qp9Ci=XL0sKIKACkvV+p?gfO@Xj1e*}V*zwPIz>5ib+Q34?&p254}sXZVNEW^r9 z(OEZ-dJs(!w2Em$CBrOQ;G%|lngQhkc8RW@%k5-INLxOigB|r!Nk9*iP1BobQ`8g3|J^8$#96&=~@3bvdc9 z7@fmW-&!=}kzpB+wAfnfym|>WaUIJ@#$h<(cjt|9u{2;nIy+*D zgI6{^Q_yv-X`l?8^cdVOip8VSynn>xV454BQ_55df>~>G1Onzf%L2=+Hq-e}T$CyV zLx)p>h#incN`_o>9TSmw6yjb)VND5eU3a6T7>4mahJm56k{>0TMVbQAMC#I23yx!{ zG_5{|*Xi`e>U*H?ct(TcD4gJ*VKVV8MknnKVA#RK;czmZ!JMMvd?oZ=LjN>h5DT!F zfN&f`fPmKUxE%K_68+^U3n=kW$rOzMAwe-iJR;6B*lSf2=MoY`Jc^;|As7Z~U!QF_ zU}ern?8kK*pP8WH+}U?Rh>&xB2AOB8n2v>nO-+6~I{)0kP54o!^RwjaR#4+n6+?Zaybg31a-HH+pU`r7;4 z7yv1yJ_t;Btr)ERJws3=wLr=`8z-QE1Tmi8w+8`~ZEN9p0s?i1ALjL? zVj1YkIil6pPMKg+t6En}Yt;QbVW|t(zFCFZ&06kRFbbOCC|r!H1*W@wcfBvB34T~A zl};?n`dkl&u**1{;=5b(=qkQ=S~f;a%g{3E=?QiKD`2PNsfbcf`y7VJ`i`NYqt2Rn zz;IA)VxYoWiKdHG>*+euKts@(nD77-ZsFctyx-9U*!Vus9q5gHNVSx-ogC`8I91DEUhgzjJITINc z|4>b|CIAe5O*$-GJj7X~S=wq~@Q~gK0A(z4oOH#pr(~v4GO*}*n0q5N=A;)wdAkhT zQE%?NL9o75UAYx9aeVRcU2}zm0USCNr@6^?bjNZobDTfpgTYtky&w?yE7EalRLI+K z9*}AAZsv%|UOl83XwJ{6WJgT=`?eF#bQL1IMyhsWyj6WQ#t^ zNC-*(B$o(9qWlmautZbon&V961g4CrALrL_4wlRlYAW(%4i+mdCe5a2R{AZQvm?}8 z4mKEZAI<`rJBBJsYolz!>nNtJJ_k1`RyWaoA0>(DYEc{K7N~3K9%z00+#1?)86C$` zwncglJYPs_VvJ|-Zdo?I!#(33Dw)=<5pwSyft|+7@bPoyOW1$vCbu8Mcwm50ggHCSemCYN30lj&8mE* zX{yBtG;B^&k`V}wu}^UiXF6?G%E+oCQgDhf64y zRD^Ui))yo^)BP#QI2ebx>JAH0iVS$r3n7RDdt8wp{pzMYy(Q{_f&T9A>y z&iCi~i2!hnm8+!5#Z5cOJ0IWq+VpzXPWmCdT%F!m3>>cjj~xyk-+%=Q%U=^Ki8;*JD9zV(+qQG}mT5hL z4NdQPZa#^Qv(EQJ&iVb>hXex21lqJKBoN4xGx;KMc(E2H43~mnk=0F2g5WrzeFXvw zdLshrau9e~hALd|d3eAd@o;l#k__NI?@m}C2!eIz_>lfu1tkIJfPm2{sA5xek|rhE zB~P{axWD?kEJ^CTu1T#CdC=A?GxX0S01SOOU)B>AAP}6)=>9HJ|M6Cy?5i8n?;>jt z&&%-XSmg;NclH$l;AqpebnIYY$U*+Ij!IIAtu=wAThA%RW2L>>T=e8UR$f}06Tid2FfEKUs%M{`&SNYVnEDBL2U@e&g-jONRNK)p@ZrzvErwETIDf-x1YG_q+s z$Zt^RO;bH&C>al*bCe>1?8RUY_t>xvIK?6bDE?ftNG*Q`RtBVBit$( znA=>Q)pR0HDVnZ5x>>ooa=qelK6jHP>No2$2CyCj#8FK8L;h*HujtB&1}QOZ9)hC_ zIo3fSIM`LK!E}wC3=`k7wYh6_MzQQl(r169=Gw$uSIM1WD40n0S#aF4uJ$kYZD`OQ zgwVk2Rvf^NeZJ-EMR*}*nEAC+2Hn*3*#{SC|RNe8zQo!eQE&@PT608qgd z3kb;o6g0p}VMD=_;S_MxY4v1zmkY3QFSYU(#Cib7o)2xo z;0_b;LlqO=_W}t5mVtBu&KH-?L!D0X+}W5KpMGUiQs^)V^;6$*4ZlbBvY3ivgxGuC z0QRcts~Q5E2!bS!WMGKTmW$MR;EE(?8hXo58pBCJ#-VLsb27yOhLr=KYi(KYu2ryT zdilY_52g}Ouh-Y2#mRAEd7wk|yXiBmodQ7C3Q0_WU^3-al71f%At^SR9=_!V2ml)@ zMH5|tpj0v>3v4O{S!0FO#+kY*{v_-Ca_cU#aJ<4^&NEnenKhLJJnJl5V5xCVJp)bp z>*@~dfuA2h4I0n6o-qf};DiEB5d>580~WmxyOk{o0&f)NqyQ=ar-;`MU*2wdebVeaqqKKIu7CJOVLn=nA9v#|tFIGp>Arpn^;g2rh$ zCUk~e(qIY#DmobfU>6I1{LGj1PclFt2onWZ1Oj5T6x0-l!y$<4Y2Yih9p~ak#N0pC z3ff?uc}+H*_rZ4_OaYLZVHj&|R7*N4E;`V{A`EfHBF&lr%@8xxrp+88DTYY=rIH41 z1cAWccFB|gYCRufLQo2D^LsauX+{Bjdm!M`$P7EEx{T%+tM5I$ws3tjU8gYZdRctD zCMTe;1$CS!gw>FfV~|;vnYrhgoMdGtwfDFM0ZFB80C%=$U-!(SxgOtSM!S7C4}f~T zE<0u&i#3TTk^o|XgW30HVKr?_i$O*23`2PEOaXh_Hjxoznj{EnMTKAj!P_5pVZWpR z+bF6Tyy5w|MT`a4*f|MU)dKt`NWOFV`rof=JW>*PtF&4ZVy&KrJX~uHr=+B?)oRI@ zlK=uhN|&o|dU`EPnw*1+&uaSm2}l*=hw2Wz-|;072mo@!2?(mFD=7%b?t38?e@ZKj zxVLnTIF3QnG|2#qz;Ia&zwGy`+F&qv3Tv*_dfv+2=gLGNpv0_WB_$b6lmKFZ11f$s zGb>TCzlb@hZVTQK2+jt9Ec}jRO+e5^g6b9nN&jRqc1?RUoy3|mSK9rn*t*558dq0* z9>wbne_AS)j$s9M&F!~ZmGK+{5KTIcBei!O3zOkS96%4{Aczex3iMDNW?WeCVcN9m z4wAE5Nfa1&ETn%P!28d9sG|mwJg`WE9v1yr^kEy>ppFcoX$d`#Fm9;>He^OQggAc~ zPid0t7C5-Sa6$JoU3pfdaa9B|gEsCZOm#bbjRh#vH(FlGCN{={WOFc^k4ynYtW9&1 z?4d=F_I;?nbQ@~b9K1QQbr;sQq?uZ6AoiFX)pcDN9m`pNPGyH-7~X|Z{-KQ-A=%`Z z2MZ6zmvnu;YZVBn=;Wy+e7;_m?>jgt`JJkXlAzK~@rW;cOe)g;j@<|{_k4Td6&0`mf z9_I>h>TMN0j4EE zkOF~t?PVnG4`MEX5F%OlNVWc$Eu61msqW7*02QB{z*n~xe>)VHJIktu^nZxH_IK4p zM&9|>w`9x#z_x7E?={hFOaMSf@3nNh%qKJ(149Zl^`!gf+3fQy8;tWBX`_Az@}~;0 zjfEHs^^J=};6^cYJ!A<(gNnhRVluE2AP@*%#@HSh&>pMAQM95Vcq6sn78cw}GD7hz z4q%XMu!_nkkdj_4Pbu`o4`Ck_DHe*YsC5WnZnzq_<*FHw4FjPn5>KCVoYg3pz!;nC zEwQz`Us|N{!9m5`l%D6oojZ46LwiVnw~Zk8u##yO?~n>^k!cRY|f+v74mAUjh85 zIPdw2%s0a{Hp<^_br+8R`gn4GZn?o=02|t)QmI5N@Z;%&W?(=q4krMhD3ZbtV+8_E z4SPvuAQo^(i{3HmDG&xlGq)ZAp~hnA1cbC}JAoSHW6O82@STi?%`1K-w6Lu~FpT3sO(iC!Nncx?GS@YRb29{pr7Mtd1cEOF z93%BsLLq@*m{S1NOLRR0s1v;{POaE!_ng-*n4F!e_-m+@%$K$a~uC}=zolU_mny0`)%PL z(2L!I54+kF3@H%ILJUqJ0fMGFIZK)DH2@(s0s?`83hyBR$U8k%xYz3D+VlB5fHty9 z)l_FA79ewz6j5|o!Ul;GqwQBr34mA22CO3OhG878+Mu&GQ?FTg_lq`l6 z?4bMM7}`UHhK8-SP0uZDN~w~iXDaXJ151=d;!A6($#`#cc|I{?ix6r{v z29a?^rzU^rFWy;>AJ=uE`KSrIcXlV5GqJ*K0%Q3sjRGl^Xja5BzJ)8ih1W0P_0OMx z^W_ufd>KDGxE*w%5_7O44riKLV;k=+)Z4ubO4HTvAT>A3NQJ|W)LrT>>Ym97GB<=s7j*rsr9~D?#-!Tqk~Af4?95{bQ0$e)s&0Z82wC`(K?ptkmZXO6D`uX6 zYe*AFz7so%7*yxXkHv3p3V>N#svrb{qsK?E_sZUtES6Xk{msO`g8s`%oFMHeHl^=r z0kpU&3qMH`c7Cd@StGgdm(gg-8Brt;r&M0eoai_(aP3*DTtE|XA_a&ulqCqph$ifI+MI)JVx{v&s_O}4 z)Xa?Kdq~9b;@pgti$rcL1VW7SRSf~}d^o_Uf$gYVwPFJ-%LWk%(DG~a0v?QDL-Uio zrKYd?A<4no}h>0>n50S^@%jW@G~bK+6y1^{m+?d%DL+JdLCH=~Zn> zUuQ6ZfaGBBmA#D?^L-z@e!fUdrQyJ_tpf)S`u0&(c0Spy>JWEW#X|@8@Rs~8`j4RB zq4xv?4?E}yI1>=CKoyXRpBiu6%Z^t&$vuy zPuUjRXdPq@XrH!o&-8UCAvstV1XOtG1AozwLpg59!E|c!fh>OV4m<_m}47vKQhO; zXZj`+5eS-(ny`Ck7qxK)p)pJJR7JP%Lf`L07^;rcG;QvjX=0;MUq)|Gfl8$Uob!K= zx6O&lNAR|Y#oJ6{zk?6H5a`-3n7T>Ka6luv)-8BG;_yB?3pl)9ieM-1P1e~-wo9^F z!PvklJCS-uk;O{yDU#k(hN$0&lRPnJ-?I-2+C^nZPXaHURcT5b!(NG)g>#&#;orwrXg0K{=#2K38rl;mI$2zZE^ZkP~+Q`BLh z0Xu!sJ)!$eWPy9>y*{395z&tax)2a@4sFC~j{TTf1gyV<{$uHYqu7?drwzeHnW)cX zp1CZuQ|h<(N(W`X#kKB2%3+YuzP1W_Z+)2SA4Q;@#ozq z2X4m5k<|TBVLW*kv-1gJ_#;|N=ZP_(G^9X4=Wij#K95uVB;Nl6YpePhNSL7oRX8$t zpd5Hm8KH+g*u#d&7T*K|I5kbASm74FKh7wKh~niL9cxQ-M^nX_YwFjw=743Y&b3g& zH3-1eP4KyY#7ErEoqx=h&fo2wO|FMgaPIw;0Dz3-;P}ZgYE4D@$IRYF5Rm_-i2Qv+ zH|}CWClb*!E7Cm#LYIZGBUFxeVt?*ryI319=|uvEA76fhjgqnSeSpQoeZPy~9%P@h zcsT%ecBW0)Iz2h}{>lK5f`I(w=?Ro8W%giyh(Rg%mR)P13x%->)`?LoK@09f?NHG;MsgQB<8ELfi3 z3|YbHbps%41OzfxWwSb#Gl6Y6D+BXv%c))U788kpKScj8pg=(W6X>6k2}2;b!w`#a zN)V7WPzt;m060uJnTy^}N)(P4FD~$1yx@I10pP5;efLAkSJwELFFhnmo{X*5@!a>< z27t+?T^Fk55;B3(RRMW0Tv+_%zu^l?_*-$ z$M~B@(fApRzl7cPOBi2;>MdD~ZwCQ{VTe;OxHA&)GFSV0-O3lh!i-v(BY8oblL&g{ zN7MVRuYjc`C*u)^s^&r4smtfs@zYcUq7%kpZoLrl_p|1;o=n!|{5)8$9ROr*ZvceD z6a*h*BYpik$^-d-#p_oQGrxiib{DS?h{-~%`;!8berGJ;1MW=NVP8LAjD|Uth%69h zZO555MyFVvH{_vHasF`K16kXuVV*pFGWY!p0RUMF0_?CCwd7^(5jl4K*D=0{@ooZy zFQLl{{ol-l9c-$HC=stFAg~gN-ZiJyP9=gsz!TcfvcQY5C&wQ#0LUZ=#wHln6a=Jc z7s|j#Z%yR3Q~9q0CM`u(G>vN2%eT7uC#$* z6g(PW{?@HnFbtNyf1v;%bNen-3#F+XXb1-CiZ~I%LVkQa&L-N*y<;;)xQwMBjH4Kf zG@X|;R%$<8hv7~)4!+2XQ!V9I4J^$<-B;d44gd4VgF5q6sB1K5piuyl3iv(vNRrSzqHS=o|xeb1jWx=t&#LJH$4{tV3B=f03eef7@J^N%RxYe?|H7g?hRac{PZzYD^;l8s6u6{ zBI%o42(j^AsQ9ky0_S|;7|WV=Gl77-TC1jyzJ@?(@`zKR-U3xL0>UqzjO{O=HwXxo zA%Yl>TVDYec; zXD+z-yj(&M5D+9QAP^$?KN-&DbPU2IG7`OU@)9EzJT3lQi>H@ZT#eQjkpddi83Gvh zu1k8RqC>y~c@9t=`=%%uZz4Fqh~WIv3A6smiBx~QF^`J;t#Pn!H7$MoV8D3gvBi2 zW1{KQW*bIF0F1|D&@@d(f8Z}JKG`^Tw^h&zRI&pC0qwP1Dj!Bs^lRwP(4}NBZJO3( ztz&%mCwTh@8fae+H1k=HIXBPrTD_Z$>*KU#-0e|hgKn3k8+Pfj+dlmdn2VEDb4lmQ zTC3HPvbM-R762fNL?nSg1tB8@HaXTP;h4zd7fx7*7b2(57SrTlnVb<2Y4OSi#xD)QdK{-t6NRZ{eNo&?N7?Vo8L z%~T0am}-B^+M+n6Xq>;gRh`_XYXw0dBOB*?4p%N=coqGZ(EnA{aOfJWoAt-`&H67w z-)*jQ-t-(){QK|Tzi_<%V$1R3&Fv#A^dEv@8sJnMaO^5nZqy)@+Q6^_3J}LJgd&vV z4QAvg$TR8`5JLVp(~hG#dRHPZanX=~+0zh?lDwVvlnCv(b+uJ+_Aj{roi+}Xw zXszOtea`~`A{ByR0FLFX{W%psHCZhDnYwwUTg-O8so~sX1cAn6GeVO8a9{_VK4A%oeO3i7Ju95+qlAY^(sri*e^Rf6xCr6hm zKAC={+50Xr34*>4j^$jKp)vkMET#|QnYqRcL4g;j-7#vmQ4kkzfZ7sk?vI8f^8iuu z4Mu%jke3f1J-l@Bzs~?mOv(XYjR|bazLq^W&ir{VOZ!=4*Ru2P5=-^hG|kDgLP2#P zQ8O96i=s$^fTHWV(#hnr8Af1*vHX_iP3IsRkJa-Sd(t#@>7k^KynXxryH{5H?*m{3 zn+3r<08pWad^jmS=Um3q(^CWh2VFP8(AD=T08;z^TPZ^n06-{;t@^-s|FivM5%dCT w6obv^ZZH_TyaG4}urpF(%tb_@xBAs@1IrpWB!_IVC;$Ke07*qoM6N<$f_e+Mm;e9( literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/StructureRoboticArmDock.png b/www/img/stationpedia/StructureRoboticArmDock.png new file mode 100644 index 0000000000000000000000000000000000000000..effb58af52b82b198da8f886d2a98dce917817bb GIT binary patch literal 12061 zcmV+&FXGUNP)PDOl*sBlD4+fQIjf@X*`{z)2Nfw z>DNsEOVWSjOe2rSGmVq9PSep$Y$dH-iE?75jyaO)D5Ob4ga{mYBn0Td1CF=2yT!fO zz1{2czWZ^z3*bKRNh$i>JokR=yYIg5^ZcIQ6M=^mT!aHY!h20Bnj%I z4w5K=-qh_g3+^F!Agdb4F$Ge1=Zac_biaM~nYX5Z5VEs=-qGE5IQSGAI^*vni0|J0 zhcnE^ADi6q?>uw_aDz`Xg_?qy@IGu%5=?$@XG!pI5r7lD%y;qkRRJ~wErmNtf`^6x zH1kDlY1X?iEfZux29X!{`*?c?dVRq$ge35wuU44JI9I7uV0d^K&iu$3kY#z>pL-|> z;IH{K=>GP703;F#W)xHbc2WuUodDsQ?<#=5|Mwj<>s>1ri)@azJ3#_rUvEZherW3b z%wG>T`~CfZ65wy@&8aQzy>A3ynGbfR`(>Y(aBP~a7Sfh)?yw42R{Q78UI}RJy02*F zQ_$d-s{};R7H$cBMV}214}&brj0A*`p7!3C640*Zv!L@13El?-4ZNHAiXuWhF0no( zKtKt$P!9H-0G(>S8+_Wn4;wVgUDI`wnPFH^tLacI7TFrwZiNJUTLQYM`EKTWBxvm7 zd7A5HVop-{bv+VVL&wQ3zaXML=Jao(EupQ^>-BO>H~T4SL}!^#LEE_8QUFg0@JGu* zH`p@*Y+Ca-8M79dE-4akfHCUZsz(0|%RGk7h#Zqv+y`1sLywECl{CN>d?<8dDKKud zXduZF{Z69YJ?agR&?ek*6oQWjQKDr?EGM-+UYUZ{yrNwq-n1&V8X= zD|;{Z#YC*>0K{n3bpiKx>pUUGy7Mio%fLw-JaOs?n3KYzX{WCO>esXT}c2x zWWmmS*OKvIdFGvZnK)=GyDWs?500bBXxsD1vfO?g-mkB>{nkmgP1xtaCP7ES){S~_ z0@we}fBBtF*YAD_z~Ivyw3?1o_eccJp#WRZXO4)16<+8V)_QPWr^Kd-_3i0 zW_{Hm2hP#48}#Z*^G6eTcgsxE z1dh=e>s`a=5L!KOOe}W$dZP|$WdOf#?XE*Q-48!sskW3z5~ZHD zCpCh1C!0Rsa{|1N-chMlX5GGJ_C`pN7u!C6p8)RyRBP2Ozk9!MzwL8wzc2SNqq0)o z?<4Fw_FMt1o@**{G{S@X)_TU0_G9;Z4V<@(4Qf7N7L7+?ad~n5=bNEA9ogV{q>F1b zJG|fA_%%G6rYMT3X_|fiNcTC*qu&yJiMDI@z63;iT;JUD6ZVdG!x=Zh-V@+`tVa(7 zqFKF@;P(6OJ)vpt_X+kEk=_5q?kfPT!I9QwIIc&|S+s^*ob#LMR4xhCFDZB?elk43ELSdN*iL_ta$w;veYy$`esD0H)2#FtQV;em&%1(-3{cP?~DYv;|)Zm{bD{iy!m#a?ecvf0N?9+8bK$`Owci>B9wFKr`qWRSktu4hB#S)#Pd4`g;E$q?iWyUPl6H z2b11-W~H@WOlM$1sKZmG8E-DzpRD|1oU}G+bRbYDqR+oRy^gf|M*wciZ_c7!*v_YO zoSivZs3e#|@K7Re(`zA~VXe^!N<2s*0!Qqon6TH&Ia7#ayi4BY|Ot2-s}@t{E|V`WCnC)9wvMdwqchpCS&?z&*t-(o)FHmdFNUvRU^SF{wB#KHqY?yb%4iw<5apI z5^=j6RIshqw4FImrQ-F?umUtqsH~`)zMDCcW!X=${Ghy}e&V}Oi(MzcKz0C5pE(Uz z-?$2kg~c7)mlA*yLFrP%lIgV9uVCQa;A<5X44rt->frzyb&#VrX-J*E6Ae5jBp5Uj ze!oFBJWt=jD_&R3R#r6%0@v>KX%}$0)CIgae6U=Prfg7_o zO?J&@w?4PbknbAp*Y6quXz;1|aqQSQ5YvSG+jCpnG{S?5ft0&;2g)EHOeq%p5GqT{ zP+2ZPqCdUm`_9~%VXeFkpYejUPBE5O>vv0avZejf(axvY5&?!|A`C0kB%sxAMzs&< zwr=o;&NeN3g&s02^KrOTJMP67mR2%sX{2ZY{;ARUlc>n8#Ye$}z$BO@?cZ#@%B zc1kU#`|Sxo`J7~>+0Pt~_j46s(peHSeJP0;o1ce#BEgJp(J(rm9SLx6D}JKHx%HsZ zc1_O&@CTpbL{esU%L%@AAmL^H{QV;E(s~x|1PLf85$-z4k;I#%+T13r1e@Vs7lI|K zyhz~c_;^p}qQQU0=_id~fEVj^*181PZ}dcfV;IYn#Dj?SlS+B&K+CBz)>_K7sK|jN zwTh%Di{KZq6xJl|egV$JVla_R!ppw;%GQHjvt4k$dTUPvpIcx%n0`{ly>HeGID`BX z*Koe3VhJ^YkNAS`)UWkQ%4Xnj}$1|n8qe@fpd7b1_l#8Cqd4@qmiR@I<9n}<__ zgOGFr%!l|-iP{&FaJ@YyZOVpB>R9sDYOqC!c~#!lufeC7Mj7mj+axd>M#uGgMS^ai*IJ5e(fTci1e(fzWN**p z2A_iOpxKQptBv4r(!v2Z&t(DOBY z_aOwLaumw=ZaS5=3FC9T-Uxn=;Mi#5B?OyTJpN4IVS^_m?ybA_ztq%Q1N!X_@!OP7 zZtzXZJ~VB6MfzX@NKNf}eKsaSMzNJc!|bDGHqkvzGY2~Ww+wW2qC*t79a${w#OEJM zY{(CP=2OY(Bs*cG6MZcB{b=f2bcy4@#_m z78UG@rm;S4GlPTPx+yFTso|qNou{bP-_K&WZ(6GEusM8v=gog89W z21o~5t7Jg|(N~u^K8khS0>i0+6-x$bRRua4iScmFDSMOzBWRjwLa}au<$k?kFAyD- zu$pq<`|g+M9lB8;aZQK&8i9qCRe*R3{xskb9?A!0_RXQF{T*TukexEcP`ABxBx#er z=(OK(9v6jZ;CsY5e_t{Q2{aB>!S8V5UyP+UDa&Ov*eVvPmA22l>$;gw9q8sPQ-0Gv z9nbeBi7ZBRjd@4s`kHM#yp3Sp% zVG%O};8)W_!_W6W;?zC?ywow4i%5W!_a5yljzsDX0bnI4VUiSdu+$`N&tjoMa1n0Z zd^ARnk%4G5m|ca?xRkdorl$4Lo<)#&bR3ZDw5TyGL13WSaQ!6EaY!*FU z4tzc9c4+xv77TcPJ{Tf`=aaFH%9!D#E3&rk6OHi@;er7MEoYyDA7ZWC2oj9rV!?9g zd#*Q3s3-0F6bkk^D`Ev!@2^6vKL!%sWn^_2QdYnBjv3{G>eOucntB#*w6;NbHU;l{ zE;S=~Ub>U9>3V^>EKu`(MUcbKyU)4x<#E(8=CPwPpSv7<{&Zim?>YSV_~QJ6H^~Tq zn4Ek9CO>o%l$XB>uPqZe*KcQ%tXG4(G=jDEQrr&m^s>e*DT*xcGT$u$AP_M3R`aDi zvxQ6nvfQAzM)3tF!)L*=Y;Off;Ow51YMM< z-GUIVSa!&%Tg(t0JUoqdf!b99V}rz;b>_c_M*FO0WANFUfuWW&3-j|ZdFmAF)8JFf z{%sV_9d606OoD{R8L#)+{R%vOSb>{MTF)1yPWIo&4!#X9_-NUI&5kZRgz zn-ouV^_^=!xCR3Q1GtZ^W#n*BK~y9FwX#`)M~xGkmZ-gg(32AZK3iQDqFG=Huv>5m8U}Cseb=y#0DQm&0X$uR*zX#IjQJ-=KNNCGU)t;Du|BG` zRY;~=RYQ2u4kpiWm!wA?)VL5wHkVfmK<#G{jh_69(LIz26vM?RIzwVqZVWt83 z;?pB%KhKkPtxb)luxPL0ckCym7E}NkJw5`Hkb(^JzKLba^o5vj+IOMzb=*A~R$;3{ zM19Xqt21>3t-~6V7g<{Y@wqBUV{+@taO#QU@XY6agY~DbzJ~TXj11e7pPy^h{p6t} zs1H=uQqbU2V}U(>3Y6Q|V7EXW8LrpfxspjZ)jSIYV}3`z#R(joN}hrODL_`X6Qhit zQ^BtLNk~H$e=PV93A!x-qmFr?!9V?kJvDjy9J3d{@;qp3CX!%?*`>=@VEX25j|3EM z;38eJV)oBFBp74_NF7SCHRT6oxbcHG;E4~PVP$|qd{BU$fJ$_f zU2DtlQxZ_it=(kfq3Wad134Hlj^ldX`!t+u`@C2zLMD@81PGN3y+n)$y?m=|8eV?^ z2|ya{C0@`w_)KaTP>+aUL~J&k?w8@I6KCM;sdI4t6u|c`U4n(bdKolPhM}>?;WIz+ zDfr&kz5)y1eHm*VWI*cYb6r)7Lt=0T?Q7cZ`2y-#BHH_et4)(m@nU%byglQVDPdTIlhr3UWVkVTLL zH2i^^RQSzE#2#4AIr&IPU4&R*C`Ur~@h`_?nQQc{1V)eAYC5gv?Q_|$HAPDo4Xd?B zCjy$j^T>kie9+i*JtyIQ?QA1l`QB^HC_ehrpMk;A3ApmgOYpsyzi!Wc_H!`!_$hCF zWvP|r=RfgD7W{lJ2l?B#K|gXFb`wOiWstURpQ2i;2IC^|Ov2-`0*V}Ctt3b`$@oy< zdI2A@4UkS}*3AuTw$DVTe2Ex%aSQ6x2|_oEqD=z`s(@_iaQ5uS*qlp%vp@bR%=`&h z$W1ewAF{K3=<(C6O_ZmhvK*9o8vIM&dKE^F9|vvx1W14Rr5(Rm7&Q1YO6=gkAR8|% zE-(_v^7@+00>8(&H8W**IE4j&SX=a-`2)}M?U`t{SNwGlwsP3BA8pk%H|wbiP|V-F zy5T!63G%n?%%{OW|H-FuBEK8{48YC&6xP{9JYk)zD0E0!t-&6{Y@I0whw0^Kq=HoSn_l zJ_*!i6`&s#N?it?Xpj^*AdQYb3c!R8PQ^O~JseUPJ@{PGTlIOMT7*xLoZkoWe24_3 z(*b?=Nge2{WCDn>whJ^nz<4T{)qo#^ZGr~>XFvTJ*8j#!Ux%M>mS8t9l8oBtN2kv9 z`D*OlTf6eTjWCGcHlZcoS#<%52Qx5OX_Z97upnD2wq8ogdv-nw0r(CqY3SSjNWN~t zNYr-3_=H_5ZcX2WnYX5)eC`aSN^`q%IZA?x2 zFlR?<3&H1h#(H(|-iqcibZ$kveQQ|@)JUttIn72;l6AAaVhP*wN+;OmfO;r}B#awaYNc#uXw4o*zTWPSsT?N0Y1- zBP|CGg@Q>D_4SXop6iZ59h2H_m|D}j&--4vgSO_(yUZyS;u)#}cb)Mv2A*~1DjFqQlAEUB<+7;V=JtWdWBFW3qpqm-E-L7`R;)EO@&HUcJnW!1b9Rm-R8 z7K>PdOO+zLex(Q>`rxz!rs-ir3GVDsbfi^(zmHO&(JH zNl3&~?AeuNJJXsHA2?ssq4>v_r&wDL)o3rEs@=$;ntdhc|JCaa_>R+`rGNiYmhQi{ zvitzMw^=l+Mt!bI-uZ=zY<;d$CncTG2w3xFtx+Y0{wt>@pp1LwRXfP@s~XId^6<0c zgK#39fPzZU*A7YX9vp^8a(rwezfI0|IW>B+uzoLSlwSaEELGvQ8ocY?D}WPI|6uAW z=Hlrmo&I;>{^cuhd#)vmsbGRaxgOdrBI4y*q;Lb@E3P{mOAdpts&=5|=5k=&2P8X# z(gTA~T3l#C{~#T{aQ(Y~b@Aj=KLr^4zJpcZ(Q&t*d=^ zjR2;j#wQLbKl07n8?T{c7{=fqA0G7PB+U+P_F!VecXBHP&SdOoZxk!=aYYG`;95z8 zugnx%7j(`sRkj^cUbkZ~0;z-l6EZYIZ$tv4lq^FrJ^7E8(3;_Ilk^4|C;RrgAOMiKZEv>EG0m#GXEDi-PrcV z9pDds7`@8AAKY#oc%#FPV>-xql3)zj@JnE(?ja=aHKHy6>U*wF6i3O;)Lad@qehy1-ckd(}AQ_8-Ph!q0s69)&pKBdC-yap%xc+j^< z1dDfkipMbMeYaWj!w~A-SAkd1p4;{p5j6NOeeF-+)1Q47NGh}Lxx}~0{#~!O?Q#7F zSKaPyv~SH9^|tHhYbGPWPGY;V??*2sASZ)~B;YUf`jHufhjG!C>FJv{n9<-rj^&_S zD6Ctro105I(Sy&V4hmKw!2pTK_o(k36%{NditS0~;Le}?F4lsxtbhIbHMoJ6?(1v& zPN`gpmV=7ku`fPyQ(kU+@jfT6YM}QLKugL)9=quWFEv%J%*bR8Jx^I7dyEct(OM zG3@WjK>~z>?|z=P?DG+OT)y#LP;Xp@>m~bL4E}L!jxQ`3KWyhTtafk%NkHw1I0t3Y zUNPF?J$WZw?~8a-|Jm8&Wl{Zf^G?%JVAIQQhoU|?Vbrr(-|m;TR7Fp){Y`H53( z;de+KrmnpPm-0o>Fi1;-8Q?1#3_W@h9)0u#5X`(6|NEEWmlLKJH0J2K9f6WYAg#z) zt1T$jY{t_zlSq1Ni>m|@7`rOAli3uU9!RY#5wc)GB91~Ax5bWri+MkgjF2~0dT0iVVnB|&lFCQP0>$Bg3A zx8K-sBO3h451#=zIt1{?zwOP_z?W8A7fr<^$ix-aXKjRoj1u*plg)%pj+&; z?E4|46G~4nm^z`(`yyuluVXt#gHD6*lHfa+zRohA0^7w(RU4rF3T8j{**pzC#pH)S zf*vnm*_c3APP4fas3Kdy?WqC_@|~-NBHhTXJF_z-jrE^6l4R}lid_mY__TR?x(0D~ zlk-Cx1jQHp5b~%5cL^$n+^|)I2sSZA-M*(GDI1Pm5=>w{$~f8njoSrg6RCuIHijIo z-L2qL2q%U!J-v`TGD(|PoFOH_D3T!Jk|2BR^YG#yJ-_(kAAjLn`0Ot+=$}jUDT7Y% zN2jj80h1@sz%#%6YmOUl+ASpk^P<}E3`GqkQzP?O0=_l3RDKJmZci<$cd)%v2U4MH zP990Gd+)}56<%9rnfo-_3ut58aUPa{AJ5hbU&F3bG}NFXt%hEpW7#G+B>}aock_WI zf7VzGj7g}Z?KA|h7&*{MuqJ{a1%?ZY%e2Y;+1I}Qhm+$cW{y3Y{rS5ySC3x$zvW~3 z+0$5q%YUU;i+|0T=3n2QnOOoD_@A64kE*2-CChW;KlL#T{^!_U*RNd#`EM@4)5EQ- z_t$5N0ztjS@BP2~Hi1gVKN5ul0GDq~y)<`U{o)53YVM<$xcBkl5MHH5ME0H%G2vcK zhq|-hm3xbDm2P2i5qgf(8Hoj7=@Vh9Y^y@WGy@KwJjj7&@pRMHBq|p52-?WmBk~J+ zlmC&|?`!|2>!M1^f#GOOhBqGUd~NR*La|haOgbpLiN02it<+85yaJ^M6j=~hH%Jq`ob#ZlIu7i#i|)VDgZ(>3dTv z7K|j?Zha8#xgR^Cu(C)e7FTsl8k&L(L;3mhR@_%`86{a`v z>*A{Q3Xe+Kz1M*SfCpwRPa)X1TwveHB+>+MI$y*ViGzFtEvoywZ@tSQY;CD ziNE(tX<>WnzRw z+%^FDz7d$0sFT$FQves!xjgWqtps7XBq%MFL6M`(ToSZ{5>=r1py&?Yq<1NlSx1lwEfmMP|^t!qi82>02ut=$L2W< z{yT=j7JOhU4!g1%ED@KTz+bvgMzP5i%wPh^kZil3ShO=_@NgOymP%VW(zYOkCs;Y~ zjkPL)zCKpx7zwI%4Km5@HeW;);375&IssMSKTW?iJ(BJp7@^~mssbuNzAr9QHP|%x zGnxq}6rQy+tJb;WR&8KNHDIng3$r9r~(%ZvvnUz0`JasJ5Uu}f@^v!Xv7Kyuo3hJ z1!g~-KO$2Syo~lA&|aliU&P?cJzSoWK*N%YiU)gz^#pKg>(umJm>7*fb|AUo^KODq zv0?UGtu75J$F*cta=Jt(K*JNkAN!tW6RC+mf4gAtuz>!WTXmcrRA>;Jc4qStKF0$O zR){Yn{YmgsRIP=b-#!>O7YZFP2h&`iRbj-HIAHx=H$RWtR*lZzH=E`t`wqWe zk~4>y{Qg!E<#)NXd>;F>o{!ltvj187S1OiXK@NSYv|Ktq{@6J5AMW?|7(O~|@0H0s ziUjcHqtR$j0m1hH-h@4a&}jiH2fndZCy+_@{-F((pa;~n8c5>$;H?XOv;98FWD-)z z6y)#bS%30_EC=MFRXgT=IOWR2rqmUcjo8KAdKCy|h%yp~q;XkGJ{6o#Ik4 zztwvhhOsR_^$MYzMT`VvjuJFl^W7-GW|`kBHc|juK6(WWekx@Xfc9zd9UP}hzzY^& z@M*wvTRA6Ye?D_K;}L)t_@3UMo15Dae|3w_1aJaAHGLN*MkAOtviFD+A{)O$vk;|o zAeDwCM6IZGlfIvM%vd{3xWX-8x>{St?<8Ys z&`J(*@w!@70}aWCUzBB#MLI3<*c0S+-;*RsQQ})vyGZx`*eP(mES}Egp`=#2UcZPn z)x~B?!1LW@2vvY^2_UP^o^+3P=C0WQE>>JcNkP_5ob4FU;Is=!pa_l&G?;gSrZ^4&4x_&6?Dql-Iibq2Z%&_8&aS`i7H{ zBF9mq;xh}og?%6ax0RQAApy;N*R}(y02D;ipj<4rvLCavOY5noQxXh5G8~>hiuNq+ zWHSBmUVzZ^8&1uf$t}RZfCkl-3S`nHD3)kTpo}?^zdH}AT7_h?52dwLCkg(razfK; z2KQ@r{%oDp?LBb4jsbNQnTuF$-}8NHRs??5XuufVgMQa=_QJaDEs}j6S*=&`Y=*x~ z9pnZ6Ani=g=7S$Hox9-sX0uht`A7$aYHrfsBM94hd2vx?2D1x}ix&dVDG2}_kW3}F zebA^JWh5YksxStgbHuCJo&a3L6S)g$V{Mj>h9?FF2H@V@Jupo#pm~eH6(z3xTye3; zCPZP|SKC+Y`tjAW%G&Lcz#n`H%aH)CL*29-f{2_r#&bNBAC#GO3;G?8Y@MMkFD?IF zX}RQ0$Oq)MFZjsCP^nb5<)>b;C;W9ukUEqKjA=_6#Gj>`@1d$7%Q7>+(|DBV_V5BQ zi*{inLOT29XzMQryGSEtyQRwo-i$5`cm_e(L%Z>l;QeXqHdL zIl(4_*c2H#fY`xzokiiR$@p@I54WD@{L{(-31n0cW6c2k&0^3fK|mBmZ%yGo22zmy zpQwrwCpJO%CP>3Ri-Gm~=%YuI5kB&pxEH9$MRgK=uZ4-S7s8*|c6_&jt0CSSj zDO+3XsA-z!1%C$+sPPL}!xylP%27!7r@_tICLdIzn5?wU)zEPdb7G^-M~)5ChRYnu z9NW$z6Nv;YytA-VckYNiB|tY=U0wD18xba4Gx@4NEJx?_ycFz3rw&s@{(~wlogKvq(MNf*(Ih_DM4Ym07+DY0+xqG zGz1@$#oxsCg5J|LpexdV;BM?{yRY zFg#bh&jL-eHaGdiBxJK0$PRcC9>q*QzR_Ny7!2&uqeJ`coh{*Ar2x>hKqneVva+Su zkpQn$YudlX+W!T2&aKx-gwd%RQ&4XNB%2oSZ=rpH4s?9RM@*0~_^xTIIt(8j^ggj% zT7IWgYLyaMkb62~rBc~bm%h6QfUp`ykOWqz8oN${zlRf1b96;SfNw_e~!jL;`r({{VykO+Nvk(cAqh)%OX|5q=Vgk`#Dm1Tz?{ z(7Upo)xU>!6zw^8o)fsS!J~u!dEwqd4u{lWWGD;y`NAra;0tJ3ocdR?U_`Z50?9*z zFf=p-iGyj#WauMQkz(Nuvu=Jr8B2D58D9~m#Hm)Rd+JMmPrtTLy&h)3$2H;UW z9MAwihgtVO`qTX^sMx|#dgwyoegV*!5}1ylEG#b4=JRL;wC8E?DV)H+Qe0Ym#U+g_ z%0LX#Rjb+Mh-H82L21u@_^wp|7kZ<~2te%smV*cNKN0VPp==hWbF=Jwr~ucoDJK#Ms8lLnp1pnRziO+si*zsg zoCYfYv0EH%?KZdy*UfzmGZv1?_FI2TxhEr zN^ubsMPUvO02P7gp6sInw8qIk1r)n{&?5f>t*ZT?pccMHCsL_YyHDzl1wd8BFYi$) z3Uz4JbWs$+vMg_$znurQrtYin-V+3%pd_H^OZ2UKMuYD44@h30tm&)G6P!gDy3E6?HH`k1`6d~#hzKfj-J_S_(hybhc zb-m7lAB)AoCuj@%9~R{H|{3*LxWlP zK3wa#jwyg7LsW`FU9Yn_Vv)AN|Nq6ofdBvi005BxYZ=%8(X_`F*>E;E00000NkvXX Hu0mjfRWuN0 literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/StructureRoboticArmRailCorner.png b/www/img/stationpedia/StructureRoboticArmRailCorner.png new file mode 100644 index 0000000000000000000000000000000000000000..cfe7555e6c2b834e6926ee1d6905b3a38c3c3a20 GIT binary patch literal 9141 zcmV;mBTC$fP)K{hW034(00)&@wB ze;`P(KLjvf1qhN&7RU|;Yaqb{@Fo~#;hnKzV<*x&qj*N1vDDPGBumpRcC*PQS!8up z-Kv~(i&d;DKC8)Y$~M2&(Ph2vJ@=gNejhBc#1cy^vBVNfEV0BAODwU(5=$(x#1cy^ z@w1N9q7yg{6bc1cdv1;YZZsO8>$(>mebK2sb@-VfKrWYqd@c{A@)>@usR|#{=`?gZ zT`)QZ7+nKudX3+&?pD1I?L}w4Sp3uzz;Ap$pXb+^Yz{1&4G_RbI-iDWwHjPkcdAf* zQeE^m76xh22^q->ADVjM~9ugo#=Y@qAN2So_Yer8-G%u6Hf%t zG>u>TW4^e`$6BrGjn(R+OEeRnS^|_#m!MQC1%-cFP%4#!kw|diqvv3IXPe*K+1Xii zdWrE=5rCwb{GA$4pwTdlMW;0qL;|B-hZjHdB5ZGO!`U-u(NYX(9yEEhnyp2rI1vjc zfGVkc)N+~^8Slgk=)vUAkm`jG=VbFUZ4*RE=ncd^Flm7oitUfS~dDp48im&S*ZM<`Zei$_W10Y#Go%GBkRG zSTq(!fI^`FYtOB5$^2OasRa?h$Li@-*xTQOA`+q4BSU?^1|7Y@e^;MW7n0|R5`a8j z(=^`rC4dv*W0%hJ=9ix-^HE3%&}cNct(*joodCYa=khr?f8jiu`{46gHY-BP`_UU5 z$MNp>PM?egWv&_eLO$*-NAr_KkR@+THLYS^o;na{G&>?>RxI?YWR(E(9nP z3OtI1A~43lvaH~lvZ6#+afR5|PNKC$*;ABG+u&nQU)Bqy0>#yQvG`dLi4gkaWi_k5 z%p7Pl7aGo?aX00r-bBK@fl72=aLo@@^l2ukoJ59gf$iG-LqQTiOo?dLxUMMjy@5E7 ziuJ)11(<2_-(6Z$=+}q23}i(H6Q9$__uH%GrAuod;H{lUvyosX0)!hMBuzy+IRuR_ zmWu0meRE(;m;{F%&|FW{|zZFGz+EbJfZZTTdPO^Bjo)!y11gaD!j#rD9>DbQ+^PzVYLrX4EwtuA*IB#c@+_>6Ln;PGs1`sPy8g z1(D#&l`C-j_U$8+U}^%$vJ9H0Ew=F@Jd6MT72f#M#f>?yav6zmSxakt-e#-GNg$=9 zH{0#@ALH*2Fd8Sj@#!!N38o@IX|=?Ipr+NR4~8uq8|4U2_@qXECxC-qtgVQk>-=&( zcPh7$Kb7Ce7mA;Ul$Zv0gw@2>6I0P^=1y0Ue6dKXayehjZ;Vpmo9;TKDV>8 zlW4w)>4cl_dpvFIgwSt1MsRmj^QkbSp3MMdMR|?_e|{d#@3(Q>Y#ubp9$v=-aN>5s zLVFZ@r?FV{RM}xpA|)70fLtyIAOFP1`S03Z?WFccSTB`I8yH{HPHEHo`!O_s1TG^X zDK=0AHk-|6C7;jJ_&VC8q3im0j&pHR03tzH2?#`jq;`-R^?;gx{@i&~t!PnYMFvGt z`Zr=0U|0r3KEZoxRt;SX(S?w)hJoMUL6c?q6IjS!rpB+9R(a#Qc6acUkHf4MFn|f9 zvZI%VZ9GH*yxAkceY0bJfa8Z)Gut##zR}j0?afJ}k~;-vyUnkaY!)}%->;%7&}=sW zNrhIZ^9BnkAs_)Cg=jr`wVav+LlvO3TE>%qh5t^Yg>^BhMxy~oh2Zp??g&o&aT z5=#A-&R;nHo4B!ycuyv;3vYC4q{crMCp;hW#rVf^^imb_7gQzx_e%x#8>mPf{ZRiA zHt#3+=q;wRw~*vF{U-6xT^kJ73VvImxtQ&aQ~)0)ixL!T$;V5VE`cBlu(Pu>HvItt zQ1dBjdmei|c4|vym6#3Lq##VhhM*GI0g?^0_nTHu5?2 zPzfR)pZLT-Wne6pzhI7hmqF>s_;>zlqnCTD?{&6-yNd6er1ya;kqCZ``~Q^f5@^ z_k16khMs@eZ=x!xk)|dfz&bX59UK2Iu<_LNj~&Yi|Cu5H{~~&22G^Ul{n~XTz-##X zJJZe>Wa#hpkYtfcv+U8MP>L)XU?7Zb!_~`qO0|@ zhSk%n{?D}}-wmf_I zdhS$iBVWk>RcbseF;~cvjPk8;LW<&i4^7K_ENWOA9`z{X!* zbdi#PP7noS466H8s8*|-1QaBZ$9cjM<%xfk&#=aauvKj|?oT^s%mARiUyoc%g~Hjf z6KEOEp|4@nzlP)G0Z*9`6FokDW59#QdwM#PhD;{Ie|I_^U>5T%4cFD%I;d%t7d@R$ z5BJQ85XXBwOwN~1yg!N<3`Q5lG>kg_*S|60h{w%4B}5aHc6PSMPM}JB*nkVbPrYfH zfSwOeJE)PxLNU0eyoVMD$v{CC=c|FQ4kv-Q+>dMiaX^~Lc-sK<{LSV;lly&bzXr`_ zlat_SBm(V+pJ+9m_*HS380|3VIawps?zRU7~O4P{C>EK(BroZz7`%Va|IMp{aPtf-*n3tn+WCpMqJgWh>rJ-rI_-JSRDL>^0)Wlda^q;v2{j$XOd z(u1+tl#v9UkNV@RpvF_A)j5$XEE>WP>2ZdC=95A1di&Knm=7LkEvtc+)8^XvFsPXU zqzNzE;~z_zOlF!jD;S#?m;1LS6M@ibwRjMk%_d~CS)er)C3!*Uo0V*CevK!P0!M5o z<~dI6-7(-qz=G>-9kjN_iBSGXd9KZ$H>AXka6%Qq(_+PrhY%~06Dn@&z#{|sr|+SK zLLvHr5+xLQKKU#~T1CGXY=u?;iHTSPZ> zP|^yBl8D)|VG=VH#Mu4}!-y^@O|n0uzf~cH?ThwHN|a3;PJ(?oQR$>;;NSLc9ddY5 z@)WtjlT8Gn#?K0BgawoBZcq{8&)FbpP6&)KvwPUx58pG|&9UDoQa@KxrZ^;B*QZ&# zBFl0G)#CEVqWKMu7tfhIc?%PxXrgSU(;}41Wq#iu=LJEU^7Q#6aGx$BAOS2qIQI!V6)V{Lt{kz}^C)K`GFZ@o<CKr&C z(H_D%I6Yf)W3JYFN132tR;o`jH|2tuVzD=(ABph-g*<<6e-G~7yBl18F5P{QfH0NH{T}!-+`inrp?`2`|}GTFlTaobX|w)ZWXq- zw}X47VhLUrDnaxAq@$u?7<0`}YV0+Vyl)f=h4F9r7UxcwDTOK^I7l6NsAq#~aleL1 z9C4zTmK*ih?t8cRc)R0WcMfWhmioWDfTwg9;H>O5Nqy$r7{^Ac_dJ~%JGr`aG_Vjt ze-_b>dVag|r+j>;D@KmnOPUE+3-_o{7@m@x1ykNic-ENHCyeF{l1JL!*`BzG5bo96 z^{$rYf1qWw(ce+t<46#B#-`|Wa_r%Wy4#uV-EGTTU#nJ85i}kr1;6<|u9kHqfHm-5 zadRGSut&4?H=T$5=hdKJ7=GXSBk$a!X09<}ffg25P zEq@F{@8~=<-P@Cv&3j`;oojxCJC!?73pM}KX$D`;4{tu9up(C0a;lwVjqnb?|73^) zsOp4`MK!PvoSZ$ zwnl!pmREQrfnj%p-@h~Dx%Ab%kz~H@E(ooMmbm)RFP5YNGd-R)%_fqfiK>9bQq#fn zp&(+|z6SXPrFr`A8-@Y$iX8dOVxtSRg(s>}^E5v#dF%hRY!`khr^Ce+@4GEr?@^-( zzS9@+dJUt=1bAdA@YrDR(C9a~+bf{n>S91(dp_A2MDr0t`^EGJJfFSy9k{FaoA^oF zfWNNja7D4adJHIGgluw>W_k5b_xCdFaal<^qXQQeIu#Z?Fa>yMQS>L#an}@@>JdxJ zY1Ys+(*lsime@yqv$Ytq*-J9kD(UTtxYzAR@e@lmZn93f0wl zz&=WDwg|E;$4(8&Ub55w=;0%1HCte`>cPE2sRaK-uJXpu3u`M555m?VgBz?EQG&QC zwCXL$6$<=1Uo66%tvmeW`v^BbDeia79Z2}u6Wba4Tq-A{fYD`8O^16W3Bk{c5`&BO z4!7|;Xje5`ge^NdLA^~*gi&w81(|{P%=zAvUZP@uhX#^J%|_3N^4<-&(djFV+LQdN zXWH;m?lH)ePCq43ZSQ;2VbF2##7WWl>;dAjAQg_#Tx)3u%8p04nj-T3y&sbpzPm=l zTl+^p04rY#o_!9R|94Jz;EWVoZ%Vi}YaiOl7!Y=N!ybGtX~_sc+3rm9;`1scYQZ@Z zz0?wU#6kD8T6JoB*t)v~jZpImFQL@)=$(2|n4H^MPKB-3QOyBhRdRUH{>~!fMp?u| zygmzF<6p)T|MC$|{c&S17BCJM6^F+I(_{KwOOBAiw+F535ujWy56n@o)zRl0JWyBy zT>VHJemOx=AE*-CI;$pM zh)6(qMzJ^<;;KL-AZ$O`4(`$K`o7ovFkZ@-ftM}(8OoznEt586?2j9-){t!9yi6FfYp*te%4p!on@Oy{lC3GsYtR zr{Nb}^isv&rYJ||E4tnWinzCr7vw2CUYy(l51Y+Hs66f_vo7ZJ`_Zt6l&3uLG|TZD zTfJC=8BstId_nR~$d+j#3FLqXaZvOBhx%9Yb9JkOF16bJyY4mV#bWdj zVDrE6&3lb&RGMPK6W}Yr59-6~C!ItgSb}%gRfk8#V0@%ge^Ov4w$dP|`M-Bxhp(K8 zba)q={|A2a>Bd$&nFUl2<&n)NNZZNg1H(2xEUWU5HA(a=z=`>4?~;WsQ=!MMi}x@D z|E45F=kH0@d5ljL3iuuaMeLs>7Hd;d38&c&Ov>o_At_*Z4uAgcEa~AKx{`!kJ{aa1*-mM1vU;pl&wSkwHLy!FCUo)M4X7t-}qZMOL zG;<;e;bDit!!E{z11=R3dWr%vPY`3{xC>M_Ot4r~0cL?LklOGg{2|6i*G{RRAI2&) z;`GlO)ciLd>;LNgL*X^NB#EbbZrs5Wi*Xg3UkUO~dHbj4GCVj6sSj?Y&Aim15NYO-utKQOB~LY#ns}$JT-IExh#$IR1J` zg-_y+G};w!bik25#N#2s2N>V({ib?e>jm5m$u>3DR{(m5|k9kucIlo24bw;nB!p+KpoUE+2ICQ?ZpENgbJ!xLMRkOZX zH;i3WgFnhD%75N&n=jyAehXtAUt1qA=^jL%2>#Plvb5r0F0;>R(EL=vf#=fz-~7fPH)8C0_lXTji+6vS-ZLb55dSpYWw8^8C?V>(?GkOI%6jc!v^4eL7Y zhnoLeWmWkKME&^KaV3w@!g{p^pM@0=35%*|1Z1G=Ztnn3>-lj=M@d+dgbI@2w=u32 z6mbJdv5^+JhYer{(mb}Idk;xK@kzY>?6hm?*3m7Xa?t(1-+f&BueYAGUiWRwWFrYq zd-~^9!~FO7dmV{=wWkWlLWatLv3c*n07X&9zDLdWNkF*=N)YVDI~+-5KMZjdH8?Me z(8QB=h~_K`<3BjWWURi4??XzuX*h7hcA#QlK1hUByr0%n3RFc643kszkJ=#rBW(VE zw9U?U44WO`y=QSVr=(O&OH;wzprk~&QqDtB?eo-y{&T`Wx{lyC|9}4PhmEhlyW4z) z=jm@)Qoyin5OG~a6j4bT-;aW3+8g(g2tf@RHrB>EQ&651VI}avTo)d70p4xe zM`}JndZPjGim z`8MqC``_Bq|IOWo^*y>yhcvj1ud4V*bNjQB$CDKb0`6QGw8EsGKhy$l?t9Cf&kXlk zzuDsO=12C2@n$cc>)pE_enG>w_bk0~^t6ZLhr9agZ#=I30XF`X@O`s)IEV;z>UGPS zdQMUy(`DP(gx|&ScNGi1jJL_|Hi!sG^7{ei_gDmMRB|6UupMlL7!q^uBg1Zuv8 z^_D3Q{H^pza8%EaBjBG;g7qOJ5Mwe&*JDWFBhvV?t@BXSV2A6or5?d1HUE_#SFhD= zV}Mw6!ifZAZ*c`k3f*!@5h$)m8mC^5`C1bMyYR2f(iYMB-y{q5< zAr|%>j8X5+q5xx1(Jgk(ah?Byzc1-F`%NUlmoV0Rqwir8n}3~}k5M_JMvpkvfK-4+ zb4Yoq>1NM{Y1}d9*L;E$zws7|I71`$?LZa#T_XQwy<|p_A+AWOq(aVYf{X;H(+%77 z-}{jyC{ADVwgajidJPRqZF*T1^e0(j#m_22oRY5w=^x;HdeQq%21Q^b>f+GHHRfLVS2rq?Sc%*kXZ|*i;ePgTf zDqdDbO|)PI7z#T51R?^-yw#I^?)`Y(X5MHH>F*AVAO^4ln?Ss8*H+I@zcO7A0lvlvS7nqA*pIh zcT+~p^*z?cMldL;DgGO$;VMk(K<|ix6p)%Q4WKWSRfu-#)Lr!>t= zz8#!LJ1~wQp*gb|WgRtV{5(YbuVehT%7O7b#s?T%^gzK=?SD)2n0TD<7WmUmQUI~f z&l3YRlt9W;RK1gr9OOzcET2l#gi6bTdl<*9RnoLC`XpG-c$+bf=%rIMKa58d*!=LB^3KkS(`N#|MrX?dm1V>c>l3W5c{_P%_&vqHCX$olavDP?H03rer zjtG!dJSFf!&A-{eyzJx6B@Qv^2U{JKbjg7{27m*S(C3hdUTD(>yhqT^6v4o8g&jiP zYVmj6l*oP4hm`WXlt3PuN_hl9tL1TO1w9cBShu~Vx;V;6Kq7(XzusKF0vx(2Tq6aA z6@}kNm**$#AvXTjz76jlFlb=m+nDE$;lle(8?PPi!Fha97SO8&mj~|#{^LKLUa@)? zqColBn1dL}pVa0MO@0L#m&a~53>&&w6z1<4_b&;a=Luts2B}LpsVw zHyZ$t(aX+ZtY?#df1C>7WAD&})gB49+N>AO&^aG=93B^R1|QFRXX0X3oJ)bj3ZPro zfag>5zrTNSk{^e3)DIsUUcA#V;9OdOmrBZ1-_6o|f@zuo3AmjIUh{ng@IlQd66{(G z-q@M0z(j&-$0NzZEQ1S3f{W_xL@;}akv)a6Z7jC=1Zf_VJnlO1+9Qt$FPs`r1m3h0 zQh>Xy4%})SZBGwTEhz4(7L-*1L*&8N6^^C=W++K&{;kGhn@^aT07mHdJtRVnndrYF z6fx=#DsaE$ZSo;D>BT&ND&e(ld45Vr$%)pBD?pldV0->djnUCaAEB(?JmSeRV%J-E zW6N+LCpmB)$#6C+!&=B5M1j`v)>8QGC_B2`$bI67VBqy5Z2rxsp!xmG<_Lqi&@dg? z>DYYqfffuc-2AiYSOO^#gp^k_=CYtrK8mUYmgDlq5>$DGH{Nw!t^fk`*LZ*)zH7Qi zZvHsXR`yIJ1FC|*uc9(21!5`%hnVk*n1VbqVzpcy<&8_=#@8yA2!OJz#KPxzImvCj*}hJ`rRg#m6uKd`oKCC!gOWoHzjp zM1nfX=||B1RY?l@sTgTKfe1iFR`7lUzsaEAlI+vTe}K*ZQOkk{U9Yfwg}wa02-7iLh(hf!}MA z5Fx-;o5A8W^RmJMA?w;=9Z0}Iy{7^&gYUT0DD?6G{{88c1Icw*|R+}9xk~}HoMu~ z#V*!w&bjr|RmJ`*vdJE4`4NY=t8Ue;d(Zcs@4y+(aE3FS;S6Uu!x_$ShBKVu{e;Y{ zH*g$Ck_3#gq4T9u37FKMFPrLROMt z{=z&ob{c$?6e*lnizQHSp3rV<(CKJUE@#7eC0~M4z8qfbdJ~$>CjZ@PwYXqR-Gp|x z4V`X>-*@qEYisL}V18a8&UypmK%^5E{IPPr4D-*R0Ja-k1k#)mJ}b{BX+*FjMf$Y!%BFi$W`3rl=#cABtoaRC+<7GQI86ZD=ZfX#O|`M9;YHR}`| z3s0Q@E?&IIM@l+}EFt+zu(|Q%RKDNtv`5Y_d|)9QNdyS-8-XhBX-B0};lV|K(QGxrG|gFWYhuhy0Mx%J)VvA`+IYEGhGrZ4v5l5& z0T{h5&J_SMzC{a+zh_%EAIY*MQ36rOr1~yn-unPO0Q?Sf8Aut)BMq->LB;8X(Iu7={6M20)S&SXlZXWb;|LclX|`w;02TIzXXVh>`z(g=y+2h92Z{C3x;b z&&_%}F`SqH7B8XYUtW6OlOI5qvpnW6%s*8kI1vF5`Nea^S)c8x#nU7LaoP(mUtLD4 z%KUFZDJ+d*W%){{`0|pF5wV9FDX*3TrM~1 zcdys`f7xvIU2Fwgcv;71Yq)m}yk^#$R>G-w}lITFVfK(gl( zf}T2&1Nb|z9sjq5IdKiJEi;&(!`^)j$7`ypt`u{{&*L*IYF35i<>f5R`zvKIBn)0+ z#bR;rhONjxfi1GU*PfKT@;Mw#MNvq-`xx8$f&N(5Wm4^%c)rc7oZaf~8@>7SO4Ts! zD(O&SlDF6d#>QP>E?ywCAHy`DR4PF}n+L6^!IjHbpkA-@XSALM_4n#iBRq*?2_V_? z0|b>G^!}qbfSOmSl5eU-^?4-zZ$VJm5dwLY2#FW{YpS9ENNRsR`995O6&?slkriT8 z#dt=UQ$DPy{QhV8b2$Y{=lCn@7}Y{veHBNF>bUb52L=z?U$jMn>&=^i;C)mo6~J>t zy-|nCvlV`igfML}99aN^dOnRrG7(PK^n0uW^zlIoB>n}An`(gzU^V#=krpL4L10KY zRn#~E@bwH&1bR>BK^Z|2gma42Uz-HrW3^aNDQ@ELbxqT5VT=?4uYN+t%U6&yz?zUH z8M?hLcY;A60TA)mU%ZZE6Jrx&>!{Sla3lc?>-j;y4~Ul}&mM<309DzNqNu-$@u_T9 zB>`MRuFgdt!o>0j6Di1?+>q2ECy0?g0s*NZxlxBW&^ckDICcSYY5|b==n|_~sb9rd zN85fC&-mZ*-s>2>Vc+a_yPo|A`9tE#0jLF-hB?)}^W~eE@XNqEqYorh>mcb}k8~&Fz27IDrP?n`oX~dD zp4g7LPrKRXdqbCk%0gw(3lC7R?_m5M#&`6t&h4sDD0s(H#IRrj5d`gkJLp0Gd$J-! zyW8fifQq18E`uU^LT&Cfq4u~2TThNBf>hb0$}i*#hwi(s%Sop(xTX+A5j#X&0O!t? zK8@u64wC;Ryqw4Bu!h&FYdpaON^p6;4EcPX2d(8nNOeFVA%N8UN8X@4U~A$;QKiY(*ZC>CRma31HcA!)yX<1agwQ$ligDdy(pU|-+o#X=DfPrs>PXk9m=P$n`sFb=%$ z;e0lm1yS(wkX5q0APn6AZC^`$ssIx^Kw$fVBMj{M0fOs5sfWKw2njLp^R?UUS2143t7_5_1Eh6;0OU${@7{&_ zc0KLECeLQH=V#nZX!kUd%~Q2oR=;`DHO)mFVEO9htN(7{*@b_M1-ukpyRp-NwFhf( zY4H+|@dZ9R2N;AX=^Gn$Y>#rRzti!t@=5U3gM))Nq&bNfNHRzO+(jpJfB=;DN~OXD zaug>RD}aj^FT(lr=g}&>KkCVD#tp;q|DwM+>Btj}Xj7lRa^=duDwRur7w_e$BDf|n zY7c9$*W80^E7!Q)d)zXgWG`4oKoa}m4ybS;67G}*aQOQ|Y=6Oub8|9uy9dy!@4$Rz zKCV{`%+H4n%lNiy3)^@BL1Y{ky6rB{M|Lh7E2KdJa9k(WW@Sm{g+_DqZnxW=o&Xk? z7CHIx1Wug7l~Sqn#nsi-uV4lIa(LHwz&mf>0sTOSD_5_C?lP#t#}Rnk`EeNke*cav zi_mH9@!vT$7kdgxDj`98mTBLP-p}CsLAxZP#|a>lp*Q+}Oz0AkxFE5YS!OtF4)yq|*-iW(^ z56tBkdz$eF__KPP@30I5+qL-^1?C&BU%w7_@7{&_c739?Mhal*($e7xYxIJWBGIto zlfRmrZ|$}C$jSdX1QEaXl(W2Nc`Ca7~P^*08QA4M7w3>3ip zg$mkF9yT{ykVQUwy&mYg&fS2lX4DFT%PqXBb+oElP**`f$G{DPzhRROt*GI9$%EK# z^x8hOHlEq^KUH9gqX`G1v*H9S|Jb8R-Nu0Tc=actDm<40eV^&-K7D!Tn=(-4up)qppWEvgv=>3m=bPe$F=nuFoDI$CmSC2 zJmz3^PMTXS7K%49Zs4sOz?2)VW9MAQ0Rh)CEn{DnWiU;Xx8F=A!`BGfKr&xUh=0$r zET~i}oFfhSOoBTAS$k) z_uHY}VZDp-if2PCZB{tsNA6&Us?}=H>bBs;7hjCI^5F_ioUiY}tHtt#)gl=9v-Df~ zf$^SxV7{&F%YTA5sz_i}0HNx*GGz{&A(gLN@oP!)2z}|Lm*Dj`UJrQ;kO_Kz09BQE zWd~41CFTHvEC4AogmrimWPvDx|A6swpwuuSrVVI)JO~$;E<&+b94>$vJHR9YXf~Vh z@Zm$adi849dtpqEp7e{h5niu1b{nrbAb$&ge|OT=q)dFhqzJ@8JwE{Tdg}902bcgW zoxRQqlD|6a0qlP~NCX=j8_;gIVQFb8Wul%A@XE*B3?_f7Se-vVzbebwU&7!25aZz_ zFUewDfc2|&xbwq1;kDS(0lFOUc%R2+%m z-o1OUxVQ-A;)y2l=m?w)9YAYqUUaahDsUR)!-ew~f}hK2-ix~TAc#u~mDmlxrE@4* z&k>>yAPaKb_C>fkXQ+Mf@DhHad7T*T zRukHLZP;#fpj0Yg6k&O(lG@@~vZW=?muxWkTpk2LIP$&~MTy@K6PL|)GuHDZNdeRB zU+bbWOhqf$>u(lI#lJ(uA2-2NK@?9OKY@+M*cQ&Uxd<3qn5wEU3s99ek$7xr{2I>- zFTM1_seD@!CA4oD1;cciTudfl?jXJ3>+=c;OdMhx7me`4mZLdN0*lPZiXw&Y?C&aw}O~8H0bEmMeBEpr&Cs>-AGum+vI zPM8#a;7q#YMq3P01$M?0jizfnlsS)l8nbiRLt?PS;cFA|ilFd)1!SbP{Q6G4)@(N6 zsA%rQ-xW#a6JVVZJPL+o@Mv!I&>6gENeJo0kPeEXLODOU4GmKJG@u{o;i%8)z`7{F zoZlvL!_PV`%YT05`R$$EoniHJ7`~t{oWB6{-u<84k4=lFIo=i}Ng7a+!@u0|ZJ5S( zTS5_dBn9JfLBvyJF@`yqjir22A_x$OLF@T#VqfJghgyYNP^U_K6hvkSam>Tk=xH&R z%T4mlD#kj-YX8=FArLy94i7@R-G+QV5A;o0PM;8ZXD(mxh(9GzOPEwgTnLzOt*e3B zRk;u<&s3&L{St;KZhdL`!obJ(&74iGliO&_he5Qv3xuo^4yOd7q`o zDp`=26cHbNA11Gc36RP3&%^L+48O%()~}=ti;XOCU|aNdr0E*SSs9o}E7;KtrP>dJ zOzc|M_4o%xWy}hFhs+2Wq%Y3b@lxibIF}Q*PKp-(ZEiQAfR$3DC>*YA5(p9h)WEg- zA~yoMR7JN~9h?;C6C4+8TqHx#!HrS0 z(KfSL29-*M-w(!F!*FaI1UJcaB?3w z<=!6wm2kJW-<$Y_tUTH<#8!87Pm#pXHr7=|?N1C6LguJvBFrqQ=`n!=oCHwVz2;7{ zuJ`nb-|4VU_*>I7FbpF$j}9ZdmRFWrX;#aM{hYjc z=S}X8QHVJuH+DZr{(uP<5kX?_leU91q{2>f$IuMTO7l+37_Apk7UfCTdT{s_iNHD9 zY3Q{RY}3;K6B*b>-y>|to>{B9U%L;DRwEA6y;r6j0%7%LKxk{GKpy}3VMf)bb)%k0hP*y z)CUp-A>QYbBFv;*Fyo!y_Scbx(GF&2%>Jh{F0hO}pi25+$qhw%{?6_WtUXu@uRosc zJ<7m=o@V5^n>67@jWJHtvbd#!pX+n~vsjqn)WaqM}-$|116VHS2 zeQmmX6y>>bZAFP*yc@6dV^qIuPhA9K#XJKrfr0Ie&yS{QP~Wb@=H_O2Z@xSapAf1c z`G2;rV8hU-x<9eC(@OKaUMiJFKM}Mzcg#u|bOFIZ=_E<>59neqwIUiDdIC?N_JM)_ z7&y2leVdPbJBbC{$qvdSBo0N&toVJ~@99MB`0P??;0J|%-)C05=Xa}r&d0ZU-g-f~ z-B1m9x%7Y%h2c5L0vJ*)Wv$sxUofh3SUlq9*5=qlMDU>5ZT8eG{{uCr4u3B*CfTt$ zdjh6^ei4u#;N^;j0x%Cf*E+CwYaRU{&DxiX%E);!W|bg*4bx zSYx^{3UH^2cDWz4~Z z*i{oekIvHt7eWVxpm_oyA#gDS?~HSS5vcFfQ@`UFm^kNX-y6D*U9Ux|Jq6UP0+NDF zg&ohWc6N85vD<(~vw@zkaN<9bqi|r^GKapmT$FjFfo}D}-(MLpFMh75r&({a2SVqu z$u3}oJ=iupowbcNilU9KfXPy_u^xR0Bn&I?pdg{NPXBpb*Fl<-Vy~HYGC|&TvxP}* zG{C|&WfqZsT8|5MV%or5T*yzL*6CqD*!BXk+YsLmi<}p?f2il%Klv`KX?+r3uypu) zvIf^>)62&pCya?rN_`M98~*GKny$!cS9IWtOl4-mBSV14CPjY{4Npy>DxR>^Tro`A zcpR;=b{Zb}6aZOI04D@(UkgWazR>l??Xih_Y~dawpAn}HarGmEtLU4 zYgvK2I4;u#3E_&ok3uj}1kxcP1f$x+BxThULYNHgy*6yVx9Jn#2N}{dM8HG_f3;x1 z;{$K8$3}cn5@ZS9VJUILN&^4xU zD*tSA4iCbk0~_wx<(LyBU7^$LK%rFP*Tr%f?$_?~$`24FKP?{a8(Wa_wf8J%YiN)-CZ5^cC*ZSgjKAKO*KVol14psxfwNs`Uzh@i31OX*!pfn}?v-yh8 zqY#$B6I=r=hR$~{;h_9Sn;1YLe-x%rqTjN;fn0=cw~4=Uo)kc7=reo z_B;VpDwRWPG#gE5HCjBd97DYPOc#DNk<6cO$$DCs{$A|N~~n_LV@S0E7(Hs9L}@6qq( zu19_pH*!YUOHT|DA@m!Hhk*PfNC-_d$t!a`c!aKSWzL3wR@tB0mbQ8(NKU$U*cd~c zzyab-j)9=WJ4*tBXOjVJ$BA`1!O>wEze=$`2k_=Wj^D4D-kN&kbML+N=Wy=oFNW72 zN2~v6)`pi*01LjL?2NavZF}PiEz`}0@5o8Anwzmp#nJ~JqXM1)B&>N_nfYf>Q4Bro zrE+jgCdJ+>yWV6DgiuQ5+ss-R2`z{Yl{kB;FRhq^|_RIJwV_ z1d;!rA8PQKi!p|`k^Dal$fp~%Zn_pwKahr!PY^fLtp~cLzgtnHpQ29sh{qKSQJK3}`S@ zfQ*_7M8G2Iv;BK3Nc@96oyV_SP~k%MBz7?#wYKr#PRstE|Nen_6E9aIQvvz645u$K z`t7*!z1mJ(f+P~c<9!<*_b|p3xL8WrQ)I6{u4CLh=>#=(157*a0JDI70&5caw>PwZ zdGA2@7G9FYQ$BCr$BM;x8Og5(&rBN6vU6@7mtp0@9=49^9TOKjOjJf8*l=DXhgZT!B1o7YW~ha?E#U=h&hebQ85`v*_w%Blc&=H?(b^r|L1Yz zch{QQx9J+kYlWQfS?KrQ6@Ofv$_FRJ^&&vHqp^75-=NPw2GP{YQxS3_VhaJKeWO-~t?*WQ{;sv~YY0__L=FwX~t=-#fTh0%O zc)WZS39oK-^=SKgu%VgX4lb5dnG0a8wZAg2NH1g1^@)g~x~H!{*waClm66X8*?|ZQ z+wMDoe;qWqG`1gwxUp}-Vorj#=~ccwMiQEDiNQH^2X0}!s@q%uH_I~oWgN?i*S?J+ z_-!Qrou+R50$zVX5!r8KMRw^Vl1o7H|JUt})*ozk^&iqc(e5XCEf7bwp_{Ma_-O~& zXVGf^n#$lKQ{3MA$~mQq0o(gt$&w3vb7SzsQ4vHz0@%=xPCh}r-2(U+ifSq6^^#=A zwVilN5Hc+2VTXi(mi>zEu$S=qAE8t}snC)l{9FA03dWwPo1lRFx+K8sEW`JD^6y6qu7Zy$ z_(y98t5T1rRwxK~a^Y|*OxyDh34s2+vFm+qDL1&+24u6rLSmB;ji~eoZ#v(|DV^9SI@LT0g-3{iN0V z29p1c;9l3DK2KHdU6&Fafyg&8-xBQuf6KlIj@t8+2=y0;U}b;^0^+0BBSa7&MtsH6 zc*sh4!jcWZw-Gm&0;ugluj${A2Dza-7quxXEZ~b6LyY-}N zuP5iEep??1$VqfpC0)HF?r+rXyP_D;-DQUtj`klU)$fzFfk+@Nf8w& z7;TVH08P4K8NqWu76rMkh)yN?eDYY#abta6k9^@rb?ra?k4NoSn!52epR*kPtRx87 zX4q5`Ewud}R-z*I3y#P)9ZyDiS)N{|Cc}>@>OJ%KaQwCU zz5z)7cW9y{3xFaBE1t+FApq)|RByQ60;Lg)zuq!nV~XSx#9faVK#Gr`fmQzo##fR2*9I*}n6RAh_pK=rpTuh@0u1L?NoHSE7~ISVa_v3Zf_C{j>zfW`h|P9=*UHY{SE%x&cq#s4o$t3AY_ax3jJRz0{p(t;0q{%FW_fZ@9ebRdF^rY zYt=pdKQRZZ8;LaxgTKSjKOJnW)bg1#dk2uPtlP+N5l0R8k`Wvv+S@BtykUF!GyL@R zEU&}U7(m7IZKCm2HGs8_3FZmzSDfUbpdFA1(hwh@V6D0gN#qmpvZ>)x;$?0;AVTc zQP+>?L8+J10fHEUQRE95!`qb~^k_xt3yvIs`3X%r0HNgqWEBNOB%gd^Q+J^4e~v~2 zlV9!FaDUJC`Yw~9Wo3AfJ?oZ^YYIGC zQ~ABRfeH5<0=7-~ zFX;eTIsx@l@Q7*ZI&7k?zA>fBs^I}^x&sB#fhEO+g}emI`MxVKfxhE?OXj!Z>Y!fl z?T(&hyw5*D^51w0$nWoLiqLHrT80B#`xYMqbW!{rJp83>VgnflLdHv)?b>0Y0+baI zOveSy^43zMIZnLmy4(Q-=zrspX2Z7OPL2F1=qNjAEVZr^o~tY$wgQ&Pzya=ej%A>T zirC)g3gCEx!h9Q(@YC+mTi~=Ybpeb5ox6?sSW=EI02fC|lKLXZxcokm{}|(~_Q@x= zg(4#%+}X7biD8%ki2RM74UhD`V4nt@ssIS&0#OmjOb+Lc;sAf4necYYg17f<*fU+| z*W2kJ5JMmYNyzXqDu5?`OX^sszrS%fbpa4a1WmNlXR!S%q8RC?EJi+o1VBla@qP>6 z$zi`G+o#HZgyjFYW5T1Jm)Kb*HxL4e(Q-176B(3H0N>x~!s|_E=KC9l%&a$XIV)f= zxSSiT#pRL$b-i!vj^*|D8ruEs?dkXW_Zw#708#9rEk5o!Xy2ZNo|A;wJUM`7d3~OQ z@Ltb?J6L6R_D;UnzaKDj0R#wyux(gjzgI;eCV*PkhCkggpk;d3XE;8d8UY08VxxTT zz(pZAuy0u?00ms^`u}^YhyB%<_4dwihBKVu3}-mQ8P0HqGo0ZJXE+Z2e{pai00000 d0ObE#1~wcXHC${PTA=^{002ovPDHLkV1kz7=Wzf4 literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/StructureRoboticArmRailInnerCorner.png b/www/img/stationpedia/StructureRoboticArmRailInnerCorner.png new file mode 100644 index 0000000000000000000000000000000000000000..abf77783b5acc11d21570bd3e37f73a28a3a542d GIT binary patch literal 8837 zcmV;0B6{74P)lFe#%*H%sSl)87Wz0=c~iAH;|ooF+WAVY?tnFTfp5+n{1AbH7KA_V~g z`z6@G2!aLtINF5+12$q9@Jk+oU}Mc_wH{=>@*)chT3?hMWu`~nb948$x>TjAVi%jN zpUgSDRFN#Qs>rJDuHN-GbNVNX|NZ;UcLX?LICt?JoLxTaJ~!J<*l+JcsZ;`8*TJ$Z z07-??g4!P-0cctY6s6$3cMWK_+g@KET2TXKPVv73n3f5;q4(Yi<vVZ-+O)N z*b^fFB43^FXEq67abfYew>1->%nu@twM%P5MQ|bnK;(x(E)c|DV=(jM7$$<57r?2d z)0p{X5Jef^3LwiesH)m)rw$2&9rvlTfik}@0@)AIZ#|F*zV_PJyz_-(rUejWKJS{K zs0&~k?cPD7hyM9Sa1Vp`5q)1>TODwMnH4~|<}*p@i6C6(l4{=1Bj_H2=#$P8tt?&+ zW>Nt0n(t;l3V7r?~c)*^$kqEfOU4aDOkMIO*BYwLadfy0rzmhcB^769V_JkC}nKNgoxl~X!G07c+ z@+i;A?^y@dH}KIF0g*hcjjVC*%r?oFA)-Oeew$IpZS z0`kM4><$y`l>iq1PO|=0jLSWnlSJF>@?WGrmfOcJ*X#9FdZ#s*!+JL3W`zivd0+yC z3p8j&@-7sw7SxKjuS%r?OO>U8ea7G8H(HPjk@t?(IqvJ8EdgA;auwzm`_>NvA2A}L z_Fqv%{%ur7QPngk7K^~+qgKpqAv&8F-G6v)?|W={XR`Z0RspPES%=b6Zachz zaSKFV?EQiyGTThNpnzcRb@N3rNPZkdK1Ced4v0z^Yo|;`zYB+Wp*e7D0wD5xbuv4s z9^V4LPUiuUPrMH!fBn)$ID6g`XzkPb(D^7cc^dJQwf5AmZmJNEV^Jc0HpqvenZI_Io3_5l|PpEs3URY4zRqu469fFX8&mRsG1+a8d~}{vAx;*#fcWd$ZV8# zVzf>&$0thmYk4d)3vyqe>Vn$)T~i8fYeKZd3{WF>qH~Icp$CfB{A6*3`owBJclbm} ze53-XoUTU5&jHH(n`8A1NC;n8@T@3Pbttm_p(Oxjw*(xm0IJnVhTnj3$xnlTA*S1@ zR#2f_(h|uJyFn6C$)8c;100zE)}OyNi2#WFTVwZ5%YHg-iU5fG>QV_-*H#n1^DYM_ zv6&?G-bb6EHzU*7Ll=N5sc`Y~MJSgS0W7SKJZirK6_CXU68Yc9zrTg?dH1s&tNFIj ze{uLgjqFd$(59K^0wI{taa(O+(IsC2Z-3n18Ta3f{W{2V3>N0`-L-oj-G5Mt2gK2d zeUoF~<0U+sx(ow~M!RttAGh51?u-ebbgBg9O1b}oWe)9c@`xnX6j}KOviJFs3poQ) zih#w16+-oN6{;ECiNq9$AOhkujYBc!N>jpOvDAAmiP^>;ssJjdDzLg9vsAS(bWF$} z)-Z0N1N`F1g%ZdQYBCeYBfpxzJPjgE1oWFQy=A7g)k6W1zrMbnceqDBz|E08hmcQj ztv^Kol*MV}KRFx$JG*w@a`v8K(DFXi81 zxa2cuc+HRBYuD}*=Mpc4>NJfP``@ce6{w!7f+B`|hebueEpNZ|b{!nafr7d;`T}TE zz5tjY5A7N`kMCGnpyK(83mWMAy7z;a?siEyTmg)zy-84{!VPTx?WB9?XMS>~68YDz ztVhXrdnfmAG#XGUmC_fqN4yUO_m#&dJ$7bHT>$G>uJy==>;m}LXy3m+=^lpJKEcg= zjM>7`lTVnc0IpuS3Z`77gCSwRg3UKEmc|<3B+ol8`J)8j+W#b^kd@D9-4A1G z0;u4HmX=BbHGk91=((0?T&vVzPbb(FvHlF+O9j=#rI{lyVCw0hbnzfeg0?ukL1#+95HOe}yf`8jY3Jo0aj?3qA*_<5M^ z6Nvn3wVF!)D4hBH87LNu$sfho9#0S^k~`Vr1mqLmgej3fwC?-lQw#&u{fTe_&0``5 zIDc^sFFtDdqiTMLxEmP%e6Z#V(V1f8^H|MS(DD_T_4>z!pf0Fz>bYfDEG6hxtj{y7D4XpQEA6>$P4$g!Db%O-MbcKymVwEt?};Y9v;bw7qM`2?!_ z!*KE9I+T(8vF9Hx;X&9l%kN0!a)9F^KMs%lbiyuPyf`-bqlhOb8Hy7|e1OaXAmS$= zpV*+fKZ5)i8O~sjVKtxNkzdZdK?dHuxt!nxB9j0rOBGmOyX4m0045A4f;qjuYZ$k{ zac+jca~`e1Aezx^5~J3y&^wXuF3Z8RW9#GCmFKEZC@es^T!yY4Co;O8V|(fngN5QH z+bVeHJm`RRU_h}H?Vt$J`AxeJdFKP-?F>jR@|L?O=fl_naLK>2jsz%q*73*(xH+3WDbO@^ zD&!wF>W%twZ=r{=93Yka@o)ojlJ7o;9Gi_GzgjIFD*2Xa;NQi>Z-G!v({xKk(7%1) zS$?b4a9hLhzQIL+a;bc1dmR@e1wiDVT{+u(?_`_*2DjMnW4i=tGuR_$aJ-VENWLY< zL{RWw%S8=VFRp@VnUU`tq9v;ktMMHxw%&jzdi&koed@MqQ;mFWG(2MUeXpPHzq`+P zwrFn@Kyd7%b^25c6#!jmaiIv!RSD*hPG@7lctrf-5t0GkZ+Pvnr&2}@-7S}Lt>Fwratq`?2O%tbj03x3v z4n_7de;~sVd!P0RHt~C-UhBPwpS|x<$^R^oPe>F1k*{gV0vH1>`QX=my&YwsQ13sh z1vOIR)j8Fx`v_4K-I}k=DX9yU7t}-nm|fEit7}2Csk^`F``$U2z@Qc;xjWqp4fL%s zFP23URur$!eW1&*WqEE^t2LlfDNlFt92gY9(lV4JQlkT=(Z(Ju}99?j!SbVx_-Oaj=Wp8ci~mc`rS`z&}cN^F!9RgV)rv| z!gZ}*7Ord7p{{?}hzQ{PygW%Ix&fX5h9gdXg5sIzWq%ro{AxnopA;_^OpyJO^pa2V z3vn3pT`k_jm4xWs9IY-lnK+I$qJM zIo>>-*!&7pqT+C(Jzlu_LgZbIjaTtRFV6SRKqQB2a#`dci=o=@d_a`VigZ9xjVd034ObqnEY`;2A;W)$A$7X(pV-JjSVP}Xm`}bq z-a_230&+rz$U|2DiYmaDN}ogGwO}Sc#)K1l7yPky_Kbb1n@}w%Sk@A1;t9+A0FowW z9&-cZjVuEK^5am1;c~n7TnS#iScTQHc8pgPg@uArj(ZbRgqX4azXH$tFONGQjeLSK zWOX8+VwTANSwt2AT)_BGkV3v4a@92OkR2-{EYlM}Icb*3Pi^NL*0OBZ0e+Ssu@OZ0 zq^*IM`K$4o8mB`@$^1C^LH5T>KxsjRYo{0Cr3>ZQ3S$zVRP!TyVI%5w`a0XX0gJK- zB`IGKFuKwEp!Xalc=&lUVjKqu$iF$xghYIpd^%_v`AH!1|Jk*(Fja`tnP#(PxGs>2 z3}m$Gjp?2-Cq`Y(0t_KPi{%p(Hk|xRl|{H#Ev9^B`A%q0R|KgTgZz?o$a~0vQCs>t zOo4oQRz?s&7G!GJs)EYKSTj+Jk3xrK(SU#`+p3)ZyvbPMa0-UKKzY2~^`GW|;4Q{)ESO!Mm6Y;B>w)x?s@X?d@&% zwNNNznlDY0L_S&n?8T_ z?Ck73%sYX!YesK{EUtzks`%&p1off$K0&SQU+Acs?)G8B4SjW~G$QjU>shw!|2aZq zukj-!|GSgSF;D`Gt^xD147$U-A25SE{{8Q{d@v|<^Y0{?eI} z8((^^JY;(;`-z137=K6OX1_D!vhYkS&z^jAZNKg#7E2|V6i=T#{U6BB7IBo0Sf<+j zi>QBA2T2yA9V~nFO?4!#zX_wCokhGL1KSF=d;UR_gb8*s{2<4Cv#v^|Q>_6rPDkh64 z9N%`raLEVQ$UA=X@uu5KN=yJghE8mt15l_~3Jjwe{fI=@x}FOV8r^8Ss%F{dl*qR; z^i3%N2KV-2<9CkpF){l#7RBitreFgWc!?qYf1RE{qUKZ2ECU)ik|+O^ZXz zvf<3U4BPuQoS!#Am6WmOh(i*iH?B&f$8aaU-$Lu@&i4Pr8y_$G6H5B#)@JWsB$Fpz z$VS{5crecp6*sW1l`+Ff0F&eB>_3U@XZx1h7G>sz;>B@ed;95kcXpn=+xuZuNlHj4 z;wgZ%Z&^vh9?%~W0Z*_`t`-y5A_qW^INBSD?{9?7o+Ppp(AnO3O5}f>cLF#2Ll|a4 z56~ShGhy%|7}~rY5`jlNxMg4%vR!G8>_@emp<&1?$TkNZ$<~qV>d7K|0GPS&N3uU7 zOw){HKS7cO87y=GQ53OU*sdf*LHvR3u-8p)UPBjn*|hl=6p>xR{+BT078!P9BptM$ z;(`WxyNNZ$@N1e1rqEABC6F)Y}%6=S3*0 z3=|nl6B2!OE=0DFV4==bIU5QC>#!P2K^EUnxBs~NSG)h6gSaJ!OKf*|q9}^ed)|Jw zJ@8%P+?#;NcSS(|99zeqHvRaHVE4V z-Js#*R zd{iel`zKi?Df6H0a?|VUwuCJ=2?stS(oY3Vv zBj%dW5ooI<;znEd-rGCC3TGmHxHBLI>;Ap_{|hWH`V(o`h^BY36|#pUOsmOVxY{QPy}*z_c*}pr+a#scTLLv zVUSGIdkE|w#HnO|9?(Ha82uJ2W2V)+SYu(jF2L~unG>yBEtA7D-GUcCUxdxJ z0d;)ublp!IOn~3O_Wvjh{tdP_3broy1}YjDQk2~f_Bnj~u<1U3XR85!qqGCBpb%d1 zU14=WO(}XlMrE~-@|*{Ftz}7skHFuP(HZR1?LR(#{P=&Hg84Yh5(@qcu=#j%WPhpd zFGwwk0ILDm&at^bfOk+68z=&Dgn!@r)zqPcS~3I~4ADDi!;XsU`{)J~ulTO;tLs&` zaiMbD=gETywNGnrVQb|XyjR-;96z$3)Ij1(Qr`hId3xDDAs(U#zKss`ckubE!H)&U zzYo+XiJ&C%hzJUP`+Z*kr8)20*dlO_``8}t-@ktwypos;wOVbgey#w*n1SpE*0HvFkrjx?V_a0P>}Fjx9PsW{iqI)Khwd&rCvMVcY~f7f;A6Y2;Jy2 zccN!Ex`w^`)7`gaMRv2_8#<8;7q44P-G{=Hn#k@#KY`Lue-7cc@WMu1N@Wy2cA zoALfis{tm`Pa>dDB@+*CL&LCKMarSRA2v+*^*^}}?>?@;Z@#piya8JOc+0>86u_O{ z`Q{3l26s9J)b?s)_m7w%i9p7CE6K-q`ncdp0G9XLTUhsRqSIWCkD<&b@(HTs)%-vN z#RNfr?@0}Q?Y;Z16MX#(mB9|jCjyJe4+|hGbVJW105SeU!}6kTdckdeq&Gkg5DtRu zwHv16I>09bV@xbp&4&9-wof8ZCGTjvhMl+$iGbYT?X5=gMh?3aB)~MxCzFs*$U;7W zCH+Wu76_qj*~|dy90zvg1(4?Epr{pq?l_3n{yyws!IrW1%&{&o(E(AgF{34X zj_T~}!W^8{yr|=t-~O{_AY&H_Ok6klQeum9XJ53Pn=I0v2gOmW_ARUxz>VNxLo{UAYa9tiN4RG#syBHmT; zxs_g5B>(pxZaw@x(n4<>-5s4LEu6kp)f;u#{;Taw+ml9hpt7I`NrZv`!^@ajy)og< zB!dmV@GhSBEo|2?-i(a1@K*H(SZVN6R$kFH8reA!^DIQOJt;}nn2&hip zPWx^e9oGdERdq986MZN1w~!=)cYP6ApirceeIq8hNhuqmun7RNG4{3V=NWhMv z!;klL_+9_os+xORa)AwuEAbBu*Wehos`Y-;3M%L*0^MOK4?A(f`wbo5K_MKa0O$-T zfIE{+ke7VI)Js5CkOPE+kBCs;hdBIOY4ef@2-Us05? z2b-oj5&48;7Xa00CA15k&Px(Dfx%r4eF1Q>uO`K4g0Y~1RxE&H8DJs#n!tS*;3zyB zFSD(|Mq{eDgR?mzH+QvOW*CY9H7k<)db-u4k^UY1!KMjae zJJ|%#?TM$jMSqkLcc~OStL>Em4BK%u00eS@ zDwakwqZnk*lF0=qqi(X8CoWkHFbxH4RdZcHUeLfeKqoK_;IaxG%kVG`(Lbhu40<)OoQJC zWm@}iF;fCKOt2II5IVN#mVq>o3rs@*M%UQ;QLPin{uO3rnxob-rg|?kB>)lYrN%N2 z>i7Q$;}Hn*g~)fu>UE>wf&v!D-%NBH{72W>!Y>8M7l0iV0+I&%7>%xX@g>E}+&tL$ zjQ?q^*?507bVi2_pU(D3a&3&VADfN5 z2RjV%2{R`E69YnA2u`Lc{&HTnbj&i1`{Qgu?tkr?{-hYpKYgs^h=K@AV89)36SmVY z!uM)O!WUvI#xpu$zkmKo^R~&&jrEcYt!_3GS25n-JDlu?Srb4K#B7$?4juxlwZnv% zX6itllMD38CK1F1@Th4(6Xz%@N~TTy`Cjw(U+lHq?3cxC_SP_MR{)2FnG=A4iC0!~ z52s7s!_bCx(&jbLJ9_5HAGc5dmX%2Wl>JEl?clv-_60RAe!c{N_tVK=0(Mjh?qT*{ zNc?K`?N=*!8ew`9beoO6K+786!qN6yl>IP4?LSQN2{R`EjshrzNH?>U09zDfhvRsK z`J~!B(!uCJS@;RQr4TIn>#6poQmehAxb1d4}j%oKwa<7`2Y3s=a45;TD)U=n5w1Nb2~d1GE1Q zlK(jGUEJN#q0v38oAxks4nPP5P(%)_%q7!)3;*0kA>5Q1yNRNB9^cO=^>jsWV1U7s zXCe`Zz60TWZrrPnCjhMdcQE_!;A3tIH`~_qE;R)+DS%dpbk*M>WjGI&hO~Dkxamwa z_bnvsEnBpI0iUmng7|ltz^+4I40Viq7=MiMXBb~bA>6#sy{nB(GR@a>NpM{vV4>Hq-@G|ydhgR0X1 zO^iu4$b8!w{1(Fj#s_{xpdras=GyH8oH2C*ask5kpVZ-%bLG^2KSlw-1mxd&b~M>f z5RYu7oX}AKyJr90_Q?*yvb{F=mIovN-4-c6#Vr59B>Sc8|M5>-wZDrf!-)z-)gROTo+d^H~^X3n4TNVuGPB+)4K+iC&L|&W$F`bKK{w4`XAlH_~CZ*PmS&{*6rl;VbVX=IXvqe zUG@`Bi~tCD*|2MSP7pxMKz14wo_Og8+=dT0@DK3$TUZ*_&=pV!@U^>78*8tgD{tI= zQop^eTmSc7UEjn$o54U;Vo<>7pb$t5(RUkUQG^9WL3hB?V|i;6`R{#lwB!>`lmH0f zazKdJ{j7qJG5ZyJtc%}35qt{;@GX2^L-IFJ2m_tM*&jT|Tg$d*f_(SBj%C#e5r`ll zoI)0-;|615BkcoaJ0ZyYvZ}ak@J=8HAo8g_PV!Hz00<<4?XKql6qen8&I0DxBYN18 z*v8VoIEVHl2yUxNDhf|@gPys~dwuDdGTrDB!M5Le4nTO=vf%w=B%g5NNyd3xU;lvAoa9AQB!nr;8 z9EQnFB-qP#&;C6JXq%=>dN`75{{Jry4g>%I004meU(3J-QUV}{Jmm^s00000NkvXX Hu0mjf#K0zZ literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/StructureRoboticArmRailOuterCorner.png b/www/img/stationpedia/StructureRoboticArmRailOuterCorner.png new file mode 100644 index 0000000000000000000000000000000000000000..b293f33a130c399f2577e1a447c493c0ab261df9 GIT binary patch literal 8017 zcmV-XAFkkuP)L$fzHE&ndt;#vK zs>rJ1&m!3*_2VNhZ{4c<`}@v!3h)dmaGj^x!V~EZdS-yP>>bYrec2mW1=OmwZp})p z``&KZz)Kts9v*bx9W)P?z1_Lusd0cxrK0N17dE@^YPFh*;Df^hs67{opedRI$HgM3 zRlpr`#3mkv8Kx?;n_Xf!J9sHTP37W5gkED>OXdJ;gaRB9&+5=zX zYQC(v7`~H^0IOVu^12009tv?Am-}thB1eK7PB<4Q(V_?6Kkm)Zl8&nHcS2$8iS*f< za~8;BCxA=ezSMmt0gxpV@dT@c7w+^doCq?C#!(UyG~d2s3CrEc^;Z6Fa4F4s8x;8F!HKgZ`X z?_(nXMSkt+B!3X*C4$u#09xd$7cPNyrUnA@pW`^diY=Ff|`Kcn4fBs`C36YBP&q57vi)b|_k)O!ML?KE1S>0mXE}d3lH|vjRs^djfK1NkTDm+#=m2ry zdJzoGRP{6>Sh*|h%lSd3JVVz3sFpsKAgoCUc}1{N0vMR{3z_l^D)M6yFpU8#FeQQ* zc|@=>0vMX}m*fDx?=SmGh9V}P5IexMBG8w87?ty1P3QcXfOCMKc#cJbcVlQqcw%%C z*L8cRr+x*vKy9Y8e~2*^U+z7uewEqpv8so-5w3vi(43vH&I!Y0&=eiQcVf2nf zgZT+sQJco6GD1u~glVcvcG3a5?Fhp}FrRqK1D(UA^RGhfxvFaR31AE~-}ydPzmMf* zB>JD=K}if{tk)+Q@AOTWej`LCN;3QF`z{))+SbF%t|512%>CskO_zJ=TA?#|TgRZN zgTPwj)WyF4NZh0k9K_dWE7snFru{WG_jsl9b$QMBxV!x^3>Gi~NF?M8!t0<2S}20! zYJ?@ExkR ztIEJ&t75@c)%yC21LsGr6X)OMx-%`j1FjcgvxEX(1p&nHJvU$fob&eyV}Ky+w%x7E zmGHvPdXWR;@GTiWZ}~@kV~gl$LJf%x|FpCO^O5JAW*MB$h6Kg(E2l6a$gI|6pG=t#u3D68B)sJDTf~M0|`* z6jn@r61yTK=eykPk-q>eK>z}k*h^eN&e1qBm4sy>@A@+R+-!DRo9HiFIyzD^s=f4R zv!G>W3q6SqI7n@SqXPlFTnxvQOB$HwI(&+T^QmpaFKpJ0&^S8xcs0ce10yr*5vDbL z$a(s~Qrne~^{c1Q0YIr}TFAZ>;-`eTWpSvLsSJ){;q|8|HXto63fj_EUM7O!)+7D? zXPI;QVdN)4(Z33KIt4HRlH|)NL@?c&5?!IX4pPcRAn06YjyhGEnfhId=fVF#l&IK34Dxx zt+2p5Ss)fK01q!$N~qOpQw^5|_$7MrEru_^PVfg}>7YaFCU<&v% zj$c)1%ih2$LN0p)3&iprAg=@imX7stmLIGbogRc~Js9yl0XauGO5f>w_sjvFaxC8g zRvfFA`&%dSAWwf+_8jEk*a0Eaj`B*SrH0bv%6Z*J@rC={aRxQIUWh!<){CYGXV(VCd)JqhdFgtBQ4 z9Vr8lD1w%o2;v|?@E{Zt6n8un0K<~dfp*%*eTLP>(o#U<;GwFmqLFJHRmB8rQ zqh;?P#Owmd%uuPERrSV(rRsIdghsOsLb$-Wp=v`j!Sx+zHjbcL;UlNdreu!mX@xo7 z0LS&)9rb7zH1Ov*^&n8r_qA}@DUmvT0cN|5nFX-l?h3BHW)e=ytl)C->Oje$^QPQrtZs7i1aDx6TmNQ?u%sg`F zcoNR(5^gl{Y&tq93f{rT36fxNaNIe`wR(_w;ia1s3*goBuR`^?Dl7s-2Is~?*2+R6 z5v%GzegNYBk@)*OV>%haolHzlB!ESdAEU@k=m=+_YYJRX8uNFVd4cO7{?!{>$2rGz z@xxE{;5d%}DCd*yFPi*Sf$YyZFMBUf3Q~F-ob$d8b(0E2V>d?Vk-d0ByVYnqFai-cc(C>Q$W=je6(Usk_4e2@2rKyf(6IC=uw|($-f3m@Mbd zM1GQRs;?m77wH3IY~TPAL86YwlWY8eZ3~#I3p^$e9@vhQUY;@Kwch=H(GY##_5R4u z=6uMs{YloP317qVdmZ7ti1iiDjgf?pJ$%QFp4?L-pK}gcp?67`fTn9KwptqaxwJn#(kk=L*W(=^{T1M?rbp8LDlwTu^9 zmdpSldUN&hpVhNA=EgM!_6a(`nMedd-fLvT*T-%8IG>h0dhYoLAaj)@ECaW}(SJp* ziG*W2UTQ~LVf2VXFUymI^g*BDSnp!Fh@`6=zP`S$EE?P04%WIwp4Dx)9v#i$HWv%J zU_XZlHn@>~F^9-MP3SV?apNqnh|;xf`%f&(`a^0b36EiISlwrqP+j><8JxBab|=(5 z)lAnwdaH9w1`=*!ggS{Wjf=9!8M^DbsTWdeBM117jXBs-`5c7+0Sm)}gfK`91R_30 z$CqH0IM~N%<3$cfSW8c;qSp84m2_uARs=IaTU{s6D;t$*#@%*2=ZboA!<_000d~Q~ z93KFSgg`aVBpF_ zaSXR3bEE)QX0xi+BOmu7a4s8d_Q-LeDO|iCTs!(KQ;Sb|o}AF9oUpF`vlkOk^rEFB zvFbordy%1-Yo;p6v@ysr*4BDCwE5_0zNeiM>`6`mQ;xd;6Gnx5;&y9i&FMx%GG&xE ztZvqhqRvmx@(N1$%AhtD>H7M^z&vXelij% zx4U-N2VV+o75Neii|VlmGOP~qREFuDa_|G-&~jTKL?`wA?dJ{HTE~Y>o{rgRx$-vE z@;INBe5-20hkG^*V|jH`z>0wg9NPyS(J}^ibS6^MaM2xfqFnCf+xM@L{84!71+eEW zcD>IJ?1}nigmC+}U#`|49y_qE<#Pav{0~Qn;HegXZKp40YnXjcn2tgRU_-yVBe;9} zc}hNm9RP{1A7G*9eRql!@L+@he0wrQ#*jg{MMK!PO`TnV=g;OEkGBM?0wsXR0k%yE z72VA}hfGAIR*=Aa1~S1S3&NV{rD(J@2F*l1;F0LGD05`#6+*~k;r#SSII8Ug`R=c| z*MXK8o`3XK&I!Q_H)4CTZs|C7e;+K%Qt#sWae;l@6aV&Fcu8``Ib$LRp@m}GZ*^e* zNaUHae)GV--fekfM5?DZu-EqCR#Tix3b=qGzzx~mi?nR(u@OVo{$E-1XP(nC&7lU@ zikxN;zE?Bgw`%6VZ~Mm%kzbG7hCV`Jh@?C?2I#Hk@yP!Acl1uKLw0zvw>h*WC4vYf zgrpbV zTb*PZfrB}ptFiI;I3i8-+J~JE*limOKm2Oq*(6T@7 zw940d8*Mo5*e&bH2+oPRg=(~PAGSH!r;8%cppHV=6@zcsyCnG6BGpuyk$Y_Z<`hm8Qqwo`WS4!TpTYkr0w%FfosoN+ng# z6GVQq*@Vtuh2)F5t}`t9|Mr`Xa)3Dc3FZiOQS@V}=UuO}}3H!RZyqHrXZc zFqZsUvEQnt-}8eT5BpQ?cb{YE0?;Kt#>ac@YY*D)bv1_^z3!mTyDewp`_ac)`DucL z5Q>2W5FX`o6oMi?ftWz5lVTvS0s~&+sc28t1IXVoyU7C@5xzx}44 zkhiK#2_Q@U-jPG(U+wOJO|ZuVZXG)C!PmzVbD(eXsdMcem?L(0NJtfkFdOc91{M>= zknWch1EHuF0Sn#8kFa#dGW)xw-bP&yWP@+L~BKdNPAC63(E)!%M4Rint_Qcu>?ZRfKcg zbr=$y?mvp~Bq-|NDIN4#xi7U;kOx{q4cM0j(f)(z-9Sg6J%>!W88Q9MUI%V8aSlD4 zrx@M$cTfN#IWOk@kH2aE;a=PQt33DB>h#3*#UpnL0jw}6KW?*Lnz(x+q238Ea#u_y ztkCXub|N(&$h5<)D7 zT@hI=R=X#O3&p72iCjdb6>rF7W5{RPWP7R=4YdEk0=Q?(J^>K%Thf zy?p-2nTmXZ4!x9>A7qEx4C7~jBA0*!r=oijNzW2U>{S!kAHnU_5Sty?R*Ld3f=x+t()dAH@Q5Qo`KDDp)5Oo z99h}rg7g5XWvt&%XYSOC1ieTbDAQ z0QxTUaY2wJKHW~~s1Vg-+^vlH*GvqQiK`(2B=N6bHQ~)_*cpkZ>Y8xmdsr*-t83vm zB3_Xnp{O%xok%FJg*D;wb6kml$QQ#>+=S3i<+4`|1IQmFdv)y-lAi^UFQaw-OT7)B zG7~qq~8mQrSHU`#0P$`WqPiO+ku^=83-V+hP6wm(96c&66*HY4bhZ z{Rk0|{g;boH|pJ}rpQl{|7L~7y{Ic`uJ_xOLL=U?-DzfSLT z4Nss!ZPbEVUT+;EfFM>-FgW^yz6pZ9u3AzAg-ji!#~XzJHY*lb#ZUk-i2OghV}s|1 z#Q)RHBK)%#i?@a6{gLqGzsD|ju!fSZK@bFrd@7#rDZ3{KFMuM`Kt#EO>Y^Fm*M7%? z5AL_;N>ju1W#=Q2OGbZKvKWaP9&nPf9)(pI} z07|9-Qc5KP!a>JT0(j7tN&tih9oel9PCP~a`?tfK?~OR?G*D+xihv^AkzpzbqDZGj z&BQHHJN{0uQ2^?2h{FOaeAGOVf9^{ELu&hhW}xUx_{`xn1mF+JA;E9~XbFzls2rCO zK-DziY|To2rpPDqKW(_;&8qQt=hw|Y#@AP0;EZhl5FH?NMg#^(p92_LNOqNn3s(~t zO%8CYDOBVq?|z<0-OkQB!1tf$>H8@3YKnX(lR)GBNKHa*ubF62(*y`l9@p)Nc6#>ETaGk;d*6^;PRTON(>_Z#(_M> z$DhAZfuBTQbpYj3~6fAW&0$R7*gOJ)Bt`Jn(nr2uk(xF+0u zC{z(}y3n&P?jHN_*ZVyY#1|Duezu(lD1;AO6oPR5tK60E;;Sosja}yG3=>Z>iu_>m zy|5(VW5|E0Y$@_vC(hTqHv9#?x{Bn}r+S|AlM@i>B!XB7L^_q-rkW4#>tRjNzX<4q zUM58llT9fgj`(bQN?b=FTo-}Ah0^%vT-Pu?uy-uRUV*WcEDmJ-1SJ1QSp8=#Kb>~2 zK@Jc{JfSK4ZsactLlf>JH-NV1!C6e2kdTae~Hd;W#UN+Q5|I3NsP<) zhC1)Hmg`(Qa@l{!=X+&iXsk>OasVfC0E4CHyLpI_-$3#g!FmGvxDLs5Kp^ttv~bF( zlMsaPuSa6ILPFrcE>1Lh3gS&2qgFGol}+=#dv^Q!kxThFB&vmxS~h1B0oTYC7#!oX zD|;76$m&0pEX~t9DGj<{PT^0*TLTx*hlt zL0;I7T_yy_b~jq;GH~iBz@G`5Z+X(Nbd@HqV10o)+n%iB^KGi_6M4%r*q0WPX}j`E zS92#?a25yHebj-SGsSNEPF{zJj%I&>;K7WMyQ-cEL>y9V!nSrZvw^Vh2HG%2TciLRMpB$VHa{#7E zH8;`9aBhc^KB5-&rRMdonsBGNTExfDXBmwAW5FEyjSJf)O$p(3Yx+o8W#n~$PtoS7 ze6&J#KM4A~CL%|maw8#zSDqj-40C`%AmV?q;>5?8n*frC#cu zjh+z5eVNwl&oqXXEPKzsoN8T5&o4F-z|BJ&n%;cx;Qto~2Lb>9002P#uVr8Z;09;X T^=SEn00000NkvXXu0mjfSF)XQ literal 0 HcmV?d00001 diff --git a/www/img/stationpedia/StructureRoboticArmRailStraight.png b/www/img/stationpedia/StructureRoboticArmRailStraight.png new file mode 100644 index 0000000000000000000000000000000000000000..5647e7cc1a255e9ee61dcaee6ab6cfc4f989d928 GIT binary patch literal 7765 zcmV-b9;)GqP)f3jRg6Glbjkor*(17A;!4{4A|#O(Kl(@KOhDIqd@(pebc^b zU!+Bowl7WwQlPn_xJ%M&(>5p&S90wtxn^Tq&Ouw<>3ny)Tv4~unmq1uNs%0Kb{_lv z{$_@p89ojlmb=n^RzLmbf%AL%e7>I#oZ$>-IKvsvaE9j+{IVBt+Hv*rRXFM#fxro@ znYOv?CB;Hw*$X(0Si86eYin+kWf>};RoHXt)s70)!|Jk^I5Exy5Cgef4z66j(!KWu zK=4H%N+Rp4RaXR+{R-6U^<^)8D1>D%;52}Ur?Uk|fY|ePEx=Kf?n2X)xnF9s zh9`SZU~g}aJ)^j&*Xj$K`%D0^JmN>;^5x5{H!d2iuN~G{zxQ|#48xe)JkPZN24;N1 zYu$S;{E=nPG^dPB*LC1*%e@z5sB0SJWVe?w^A$+}jjr*TW@{jdBFJkp}8LH1y1*RZT%9w1hYB8Gbw;)vEqke);M^k1n@i&AH*yocqRm}Wa23^ z>}8*UFMGl||oXGp(Kfj(zre5bcUe*o$p)9~du#AVc zZa)=QM9_2%{GP|&_Ih^WR%9eI(#L=WPWO6k{Sv$c@tojP3SeZ#Cl)^a^~|}<>)CTz z*64wfQK;Kdo9aW$us&)u8n-f;OaY%2j{9ul#=)r)z>=;0MI`1IU`ps?qNMHCuW3ir`(m-^cbdYzK>2zAu6YA3gxXFoyo_LE8BbP!VeP`N z%d-48p-VhJdc4Sq%Du}Q^7;G?N^Qh%=&P36){MI#a3qEu?02w#s5_Qw2|S>1Kos1$ zq!o#gs2e&+lH`h$&cKO8U*w*NK!`Yj8D8Jw6LSiTtoSJ3aRp#U7`Qn#BewU9|G1*4^cl2$k}b>krlsqPa2c)CkL`DLpGHIB_*?a zwWCoNk_gSIMGk*CX;;AL&B*=oi(7BF9081ghr~H^1zdZ0f54cuF z{BdES0yqg7e*rUI9+B~jM%1D$C!Fz?w|!YwSj#Hmiq`_yYO|&u9vm8R=C9RitiSfc zwSjK35CNQJ{N(V7PhxXn4gYOQDdh62u>_Di*DJo_qhjCtxeDMc<0nTi=O;g_{Ms7i z&#%Rs$P9SMpY^|SY(UU+JG1fc;@P)tf1-NkW0vzlgxDU=Uz7PF5 zKOH)4wUm^m6L@i_IPm#Q0$97~=24gY#o|#c0 z1@O{eeF@gq*199iT?D5%;|WB5K8rao$a5W6?Wl7dPnat6S66}KIXI{ufV|>vP!?q{ z3}bxeFFE7mW_t71K_-tu$IIo^7eq7pC`I;V&FM_N_@n@dG0*xx3;zhz8@=qVVNIA3u8;k??VDu``qx%pJ0R+Ga0n{%<0T{f-IrkpI=}0GD1M&-5$v=m&;IoQjYb# zWsMeam%f*N=_OYHX1oP@4)Bd^Hv4a|U58Va@dQSE_GIOJr>#Q$umYuhR{%u*BESTY z%jH1iM5yi8286MU$S+ZjWsG{qL~}Y*FjiN#uJpJ0unDlDwP6BlDywX zGd?lRxekR9-H&aAZl$eF)^E1mb4k?etpEELMcRm}HY>5_6HRwN8)X%?2E1qV)V)b& zKtWYiT%8K7R*OAAH(>3gg2-nrr7U|XA>3_;3*yy`1+Qj%BIf0I2CD_GNd!>{b6WRx z|DxG!cKb%70l=Xc&ShCU2{@_5*A8n?uZ0WoI~R3$jdva5&l?=;OGj3$aq}y#pazjo z=n9}#uR%VS2VK)+O<=ngQ&5!t1MQ08DT?7-gNcAFSCmEI1^yV17m1hA?ggnoqLv9S zo{Brg9{GX{ucRz^MWJQ~OL%*u!Gqe2$B!QY!w_-+5L<#50=7wbaVqsWOq4yZARcr95 z_$c)DTj?77a!Q9QlFiN*yz}`RoDN^gk{je>%`bcB`S0JZKn}0#X88TQA|Mvjj>Z~P z>ySx`kj-XUn>S>v`cx8KXGLDdHb~qYUQ`?vi{??yKX;>UP?6-im6~11J|CvuoK~_OHn`cooV2{EE%Uw}kL|`3dLMb@zajnDuFS=c<{5 z-wO*ptx<5Md>25i)_{wv7nin$Ac|X`u&S5EB)fkFtNs-v{%{XM9cO5JC<)m8Y-l?qn= ze5;=D+SMHEc|P9Z$jI=-0+4uVmNinisfh$A!H1j^2rXQ@?HIkNW>z298UhuNu=+or z)ivyJ{uoY}On&P<)^D|4Yn8#X{4`em`8^PEem<}U3&NQ{c6Vmjva#a#A5=SkgqO?# z8pdb=Xl5sLe@RY4-LPSpZ}de#N={810rP{ifHCKQgK7;Px5ESx@vLQBq44vKt?hTV zYQO!Us{NlyKgg_v?>DPWc(*(}jzR)ZRTXl%+_a0`nd{ak0Ik=uEVM;_;d2rB)oMNT z?AsT0`1;CRv%ZV_mBuY>Z#<|Ox2GNBy^01K``XCg2yme+rXUrwA)1f+aK=T#OneG@>GKm`R|P(pAZs&Zs^cx#Zxrji=>C5DE?gL z#gG8(L?i=)_D&*`<%<>hXcaE+DxN|BZKk(zLO3wi{Dk{8NiMPg(08~|lwM!!K z5nCArIV_>S#P-epUj@h~$F=8odbVR@4DmCML*!S=dr;pmb)V%{SK-@YWg*0)owqA( z<0s#HRQa9Fef9RB-}nyD{RUm2iThOqH?~yMhT4(q0K2LIyY2Yv4ADn6Ui)l!mVMb$ zG7E~Lur_qYVC-7M)PT=9dKY#UF7R=!Sz|dI`bnZsA)#Bt2_KU5@q4V_Y`G$mJb`sMmqhnI`ME2@N5g}$A_oxCCgz`pzw_9g zS8%ibSJNGMEu+Kr6`PF*LcENJ=zI`9uac(Se`l-muOC#^4ZMAv^iEuNc?9Yt5gUF+ zM-<$y>i|0P;a0tZywv&GGCzut0Q{p03LqwahV5uwuz?zY0Y%(Z(Gamop&ynFcMhde znJFSPef&WX@%6(h)N3R@m-tsP=c#>lL3U5LS83dOw_N`%B>yk`XMUwqqoou1`Vh_e z4p40A-Dg#Ow#<*BF9IsMJ?ofS@aCFiuvWy~k`OvrAwKzpzKBR?KuIO%wm~BQ(au)r z*)fp6jpX0_k00*c>R`bJUr1gZFd=X*`BeSB0|ena06WLD1b50R{Px3 zf4l+jwSs~PSU!^fm2*a9O))b+B1XeI9|QmH@2mgek9Hbw)->&Xk>jwcQ5L4rt#ay< zV;msKyNAEmvEX`|M+X4dRV~=qUyNG`a~_YI^oI&(!!=HWYq)|>byoyIA^4~qR?rc= zct|RsWaXh_R;yLm3Xwm+?zx4WLZekK+J^mIcWD!pJ8K z6#%J^pqjD9>xf)9^CrRPC7U%8f`;d|Yx1o5P&;b3S2Tq6HyG?|f4EE>`|`Et`Y1SJt{^0dMyN zC!mm{fCv4(HCY<`GBMpE zudNuY6^{&ff(N&2^snjF9KctxeLb%&^uW;aZxiwN1C~$3`yfG+wNp>kPJ{n~M{}ag%S-#{I33C9?;i!+2Pe^*_6D5CR|CmZXg0TXSg*nbPgnT-_I7ZFlL2~nv zL*oD0wZ$C};eJ)!!S+wyuc|+&X_^{+Kdl4Q(5&7&)M2;1_^cm>K6>;H+{BH-_i|m$*gnr*%2W&q0Nn*5X{B^U0Yg`ZPC|>4Uk)In*I9~1@)c@0+-P*q^ zKGi;;`=lTUS2UGX3K#0RT>lmkFS|3o_B`{m_WeiQ=*K#TMpKsDnHNWWJE*unPVvNsnOJQ8c* z`tR?nw=n15c>h4X9sNy|eE%6?m;?BzYF^d1mRt2f40QlssS1QGaS|voeZ^Y#DR|H{ zZU27F`p<8FT)9a{Fz7eaIslQsRX3ohEqj+?45UgkZ6w}PX(WHSF?89Et*R#Xu_8#{ zU=Pf}YCjM%tWWFBkt?zi?t%6u2wY>XatR)SXDW}~a#+xY(fxY+_t5em)vb3rrnawe zBIu60S3co3x3Wh&K+<2ox8@GEUDbk({gYw&qff&_6KyMl8_8mm1qn>Y0U0+*y^!GW z(B0@)aoQ?n!092pwE^fjAr&6rmG-{|o69 zTtBaL?*+~ov*qvvrfI@GwEXYw*8lnDf%=D*W4HN40%h)W$20L#;$1CUPNM4oJcs4r zxWDszKA_M~+ZJrrO!(mGN%6RT4E6Ut%@sk)lfHnPrDobDBibk3!YT>gYh;mJ;t)Ui zX<{!(r&J4yJptYMm z(T)vSQ2-k&`p6DDKnC~UMkQeIF*mB}4y?-}te^utZj;>~p$Hr{mU#*^AWZTjastQ! zT#?;-tm1BO*{=G1C!l@=kRjOc+8@YA4g4^>dyM-nJgBO_^UhY~hj{&v9%zB;4Z?pO zb$|x`m&F_EyMwlL)_=d;KE|!g2g0O3^hIzzO}1`zMc~^%5kH{_eC%o~SyvJ?wBCTc z(F6m+5i&2_{j6~t+js9*o8JpQm(gO9%+10=pywn4BA*<<@_HpgKB3SuUB@?LXvA z{mVG+Kf-n+&N%lg>Md+<{HUz{2#II*QbqC=k9ZxqlTd$D=tREciNMD&XDF(c+uHVA z2v|0RX+QKua6JvI@_i9d9K?x%D2RN&M-gnOroDl;w{VWvaSqnT46#k*zx`q5CSDhU zFMJ1JdCs}y6Qbl3d61g)*m;t+yCp~;ctHQv~!0Sz;0ob=#D#%$lLg> z?T(4O`VK&#aeeYF$AJ~W29d47VXdVD{KdWwpQ<*lW!ZGiAHqBa@#El%Jo{KyxblZ# zA1m}vvH#QJQ|-Uq*{!{Z*Z&)@A0}}Px>vku)EN;-_mU@denJNz6k8VDDL-45AH`e* zK=4IyJw4kvRHZ&96vGdwA^F`0L^hF5{Ak~R*(7|r zFn0kEHcjHN{W-?JSk=Bj^Am0=oA_koR1nruVLks^zx!^HKFdEJOf4 zNC;T&a1|@-YLcHw2;&@J5{zJ$!J~GMfUjKuxFpM=-)flCazLiKZFR3Dj%O0S zmX@KS>6q^}B)#AI)z5R#Hy+_`RfoOK^Jn={@XMIAZrD&pCa4dBD)O9=fOBGxHRKe8 z0Ew2=@QRc`^@sASV{y; zf?dq#G-pCa7Jy>gZ!2i~yw?~U4)OvIy6NV-2oBqnl)(Rx@9h@Aj}CNrYMfdAAe>kM z5T0lN4a2S4tmqQnXIY5^~faH0i3Xqpb}p&NYE zKsOK)aD+r>1g`gk0RkZMSv#}*u{iMp2!e!A*KHJqODq#YKmg?<3;yy@hs~!J)Xyw` zBAhA#5H#feKu5CiqI6_JRsu)~HteVd=Di6I)w8NU!x_$ShBKTB{Qu(MKmY&$007AU bwG3oU`9}(0Wh8GE?V|0m98H|Pj zrfGufx@WSkmrnpgR>WWkfsyyq=`?RDQ@sm`fNwSdEZgGmH0lk0tS|*k!|dBA$l3F6==5*hY|049c&l@*Zj7lbG&q4U?jawBwJI^3ViT+9=b z3xV*J8((R=!t(3a`0@T1d%QpRd~d3I^3n<5%JK^Dm(jA9U%d*fwZh%KUEYiM^Rc|L zj1`z^pYJ|n>=2Ecn^GCP_<5W|5Ap}6m_tl@el;S;+UnmrS zF?QC|I}&# z5l=0%n1x@^0v{QE{EaID;j9-BMLM14Ri9bZ@C@?}bDEkWDZFR$JZ}`$azYNh>p0HL z=PS;63RUM-%;On+5Hp`)+4_w@B6#cVx5g^xb0vV4S63i+C3n`-cpcBbb^rJDs=kFiwGC{Wt>dj( zO_1UMzK$aJWUv#Qi2!`^eTbrR7So6gZ9)5XI-UM4PCR(T_rVPr)j37r{3M$HB}65G9}BJAfAfv!2m#5b@Z)gM|JHlh|ux3~>|RCBcwz(EI_6 zxX1s`5Z|ERn6v{38r`&gK zH`chAySyhGwk%Ib)`mZKO55Rhitfx|BL*2h3E6z%dalqVk-MK zn`f_%Hk)C&?(he2yf?9Xlh0v+Rm>CfF=R52aV?)}OnCrJ=Ly{sL>U*<0Mj%(UyuUd zu${r5!!<9zw#<7j0{e^vK;&P&hLw-p(qdfKor4NcQ-K-i{lU=;(} z_g5p&wx29xw(k|IQXN=54r$Fzz_kbD1b$?QM<{Q@*60C88+@b4Qn126)- z;q(JvQxLfS@2$PpKAma=v@>4{WPYO6x6XCLBgnUZm&!x(VgW0;Em6Ku32v}C<(qi@ zpJDqtn)WMr?MmpQ_^w{nIoW(XB%BDOmb#Q`SDYXS{QHpb2y2rlDB(qTs=o*BBH1^|)_Jbmp6<#HeWY-cWKQYCf*acXa0qfcgr~ zfm#Z`pBm@;0g#|X6lj2aj^a`AsejzSUmTE&1u+!?1Z|&J*?``1vC^5=Wo7A0={K)_{k0J^U8<~sxto?FgMV>v_N#|8E21%OJ`6T#j=0kYW)IvL|F?wFZ$rX7Jn z-1_RR_OT-liIl+Y+~pj+_x^jK+Y=W+H1jR1V>x8IilTJo5|Qt_096?h|1UWCmoj&w zbIj-Syr+2J?UFX>C7c>m`F`~mj>}Lel=*QkmqxL(Zr2Zhh^MA9weK_8%h}G!Fb3_x zwe6_pAau zSUp5)sS7MJAEvVD2w+g=`z}x}dzC;=;NK76Mmn3mw|aB+KR|^1QmF*n+uI}#SY2J6 z)Rbom5?<4v5qBjfs z1=u^-gX`C?Lnf1fmjxsMYFq$I*{&2L5j0L3JzW3=kk{+__PF0J9u-69rxJiRufd&v zbSHF;@;>x|#K2Gd)5WF5KT(+SwdjqF#~ZxAee*W3g-&ioGdV8A1kCvT@O+(C=4UUX z3w(wya9rfaQRs#a3H+EW$-FsD2NX#GS5Qih8*qW<5DVy#(3}baFzH1XuWa$`gKUB(;z40wz3@40l^iZTCRdDd)Fm3{0Y-BL#Nn! zrm7h)+GdAl$;(L%OnE3V_&&f zay7?x>|O%M<+AYT=NnL|=#WZjr{D2&1R|d>i2O{dfA;4t=f?VOFX6-z!0L@vuG%1| z%6+nf4nW}7TgRD8Dc*FwLd5$5$SX{#~Azu(wB(&b>4uD3wZ3E|+;B^};an zCk-iX<_jQ$!WO`>P2NN-d___CGp1>Rd1vIIcXxK-uy_d9Z=j22dXucpYhhMw zZw{`2JKA)?vaM#U_1NLH8BHT}dn5;l+CC9)89E4(+`gvkdOHS&A(>3xO{G%zsNoFK zeIFD%Hc6GktyAi6o#z!qeD!&?vzL9yXN+NSDT9VGb-i({>&D36W`TIER4ZNghYBD{ zK7j;4f(}KtYnc`p4TCp0252-I zyc((T%^y;cd>p;A!9)&?MS`Nfrq|l{c&_6PCX-3HefzfeywIBvpKwn8d}j{51kwwo z<0EWEC>|A{+R#VdBRS-V_&q25y^sLN!dG5j?IPa?ReF%<9_Qc4rnBGS#KZK6?}uLG zk|=nO?m$g`?mbh*>q&f`3W%=zwoUux3qaE}a7~vVlK=>Qjt|Q7Uez8XJuZCm%cY_c zhx{n2xXytBpat^}mW%Ccsw6_aTIa{Zdc+@M``2)e;EN(Ej!MPbNHGB;y8}has7R$e zfutAGW6#|%40yWrjEMIy?XF~VkAlxwjyZ4)$9CJtBmmcSL-(cV2Q@Vkx-l}_II+rm z2YXP&39~r{>YN&~Xg(onu;q!7?{#N*_&yOh5RvzVguwgkC2w9<(;9hw9@L&!8IyTa zB?SaQz-(6db+>Cekt>n;vj`vM5*3#U-%6VBPf})M$t~34%vNr8HsCLf2K-6nen(K+-C2TqH^m!0z?!VnQO!>2~z_?=oF9NSxuh6PeE%)`9x)`#s#5b3~ixn^|Tk7;n- z@UxV1bzJBToi``~B-P}^A|gb5092VIfT5sAg!tbj5k`eE3Fx+4*smF8oOkxE=D_=5 z0kn#Tshuhmhbg$Vk1Zj537&`-25e7P)doTF;70@@wU|LMXt6e`AMvxoG{_IYo#bF) z0ialnh5?yurgP1XHC`U=&j?MiXM#9G2O<&hzG1=M9y&u(<3eDH%(J{7i1g{qMg&XN+s{^`mP^O3Czk5-3W`DpO_Q;ucq1fJ9k*J_ z>`W9=FeNbM&+$Avh-%7r-c>>U5hEjnJ7Qt;kz% zq?@t)Ip_c%>{Yw&4;26s8f%gxRUna^7{PA)J$H^lF*B(cc-<<8&R0_!tS)M?#xRUd zBL91I%_zDAVAKrIu507YS;rAS3te%$b0>smF!X5y!xbuuVFwZ+EJy?E!KIq;>q3ku zrr90h4$jF*c=M7IGCvoE5lM><50iBi7CBevTri+bq6IdKHC~5)fJP7R5GFeNUJ!bG zB~DdO*|Di&yU?8So}430UjVcJ(&_Pn#m;FU^}1MjUTGi4%`>#pb(Zd9QzU}86+MM& zR1^g)%bNVaQ$(Te{QaY2>*KJg4~K4<1MhbUz_5*WJ`!9vCS!A;hA;S;-5OJH!y<@O zn;4UDl3L}c0M}m4wJaUZ7PQP(&4{8HTkl37r;S<(N|gHmTYvMk@@J1q#{04}m{8XV z7pxc&6QtQLi9~Q-Sr6cRIKcLg(s%w0;79r3#RX9T({;dXI-n#(Py{i2E_n`6 zF&)^eTk!D68u*c(0w^ApL7n#3<4n&JM-Ykb2|M@`kqifkNeGeeG)MbPp-}jr*yW9z@9^_VUFU77sfV6pEq-*6 zK?4iQQrdg}xCD=mhNp2~2dF$Rc^{DDZIsjWC_)hoe((h_f-}S>3Sg~pSO7V){{>SH zojU>xowv#s3Z?Q$ADVFlI1?H}ob9w{j7N_i-AD2t&~dd9u6QiT@R<<4OO;RLPfP%M zJvxEmFdCjMg^>_O4*oe!Bej?VZC)GjMpz9*uj588^gl&evDQ^jbO1xDIHY?>Px)%fBWI@<10gY%6rWe_W0={i#Pl;kW==!xMm}YD2`} zZ%RM}w84pK&+>d=|6u>VuIoPxUPD(H`TffC3Y5#|LjYUB6TOvV)N3^qf#$V-aAHP8 z;jlQRWy}uy`}=DL2M22?_D1mfFgJ0Voz2?&d@uHQ`wHMr+Otw-8!<=ZVZFI5xv*~w z@M$8`763u7>%3{YCxBEc1&p!K5FrPcaP>Fp4Jfy4GQF6d?BHVp$=}54e-|Q!60+p``9R=g20V>J{(T2ipNa2txSn-E~n5_v1NzNnimS2*&% zlasw(d*y0d1U*AP0@hxECnBrMF*^b-9hdO$0PvZTpog zL}%lKuT+ilLA74}Z`<435BT#!_`Va#d{^kUN3#BEr3&L8kdy3iR~tx zTvc4&c1?%NDUU*+7DSd>)| z4hyh!IoEZah%cAQy!p62e7I?m|0R^~J5pW@({}xP71igg7BnF0V0Mpn=Lh#YRcgx2GI5;>6UH|PxfUnJa$A43t&03MD zFDuo`2i0ozgHpNj@L+$BXZ@Asm9A%f@?}}($NqU#7@Yhs_D(&wz5>uqtR9R{HKs)5 zKxT3GkRr;BMA)ippb&6D82Wpn0$-vS_RNkDD8Y?7{!_!u&Ml@uoA1Pf(8^l9p~Di+ z^~%nt@VH7rgHeOM>K(#27fg7Enz9dovG$k3El{&d-3w?&`sjos`=LZ$H(KwxP5$2I z&d$#J`JMb9&MTLIJjL3^G0ETb z0qis!xHd0x5yS)E@vR(_N#!?3eJdrp*iZ}@(Yq%OHZddw9|f#xt>FnkQ#D9m3THZz z?+d_3oBX6Tkxd(h!v6kR;b5QJe5GM*A^F2!BH;vL$EX=R{-T&9`GhlzfI+xA=ki8E zaGDP6*fO?Gtx>i6edV|U*H%~g`Lm~a*b9(`ndzGCzu;0?4p<1IqYoVH4ZE(@c&;0JaOSOBOt{EiQzjthEK; zV<(?)ABzhr?|=K%dH7mNfp?6;z;C#2*y2UM3Q>4~w#$SL5gE4*?4;%$TUFlwtT9jB zGv{FE&s}T<$b2@|Vq0eC*iO&elgj)k21I}h8NAD+F;~*6fNr!lyq&RL1p0{T-o@{e zq~1gkyovGh%tRr`p2&7A1=QC34nNPsFJG2HOkah!R0n<+D<3Gnr0|9swx{Tv>%gkp zfHags_enl0ve}tit=K-!f(a?39(q1~WPH3;X?*YR_R1gO>F2Pt?A@?&3`yaOlM{0H zLi=osE4W>^CT;scoLvM^r8VQf_PS#6Mj$c#gQ>Oe{c=u$TZ<;VJ?{=3=U0I?bPr0H zwScw)$c_sw9KJTB_*KG?1N)sw36QTt*I^PbJeUs$uXClO4Oe8NBh zZ0Qc<=0wo#_ycPaZ06Y1=FLGuSh(a>7m-hGnYm+)m9wjD5nNR|G#?@5O99&Vy>1i9 zzyE`c!rHzaak_<8=Gz??85xm+m`3JDG1LLZA%EQWoB`LxscwS@5`hC@2MCf6o&jtl z@%KppJqH=r0U`^WR^~@BPynJh&bE7&s!0O!rs#Co^RZ@l?PfduBNa?SN(44Y5<<7L z)*v5;UCh7!EA`ClIG-d{hg zuHo?(L-GwfEL0}Ao_5D|fEH#+K4G8$_6-MaFT{0$_VZ6>wui_{%YDoU>?8qlbqdXKZ&pQ^ZNg|2h>pdSMTgMnEw=8xZdT*GJnCX7B zfiCcTyIlY4PmXGTjO1@c?@!tRIQa*&C7&?F0W54$2N;~O0S7oJneYc0#kz|^xQFLA zdp-Syl!R?qfa_3$3|Npc%Axy$Fxoi6!FLqRW8XK3}fzYpP%w2Q_Q!!EWh4 zJ*gV+n+`k?QG{k|+4PRqO>v;T!lV11{X8Z2!=68_15}=)&40cJq#^))Bqk?*vY;aUJP2vD(INJ#?D#AA7w0}z_{ePFDk z3_L&BEkmJL0KK74lDCOLit}(D*XK;e34D~Wec0>95qLslmiaODsS!jl3O+69YuMgJ z^4o4hZj_+YxImOUV|MYR; z57v+L55RMs5GLUO`#9}&jQ6tf;*d{}#(j}Q@WUemzPZFsH30=^*ID~m1S-W&#am7H z?{pXbjbp>_s*?C?%ywT1zR%`5nNQWoBANgAsQgzCc1r(s>$$-#-?0TyB<~sCBkP_6 zI0NVD-(Da+BJpbLIuXBbI7q$)FCwJVyqw3yJ5!2-APn36kT=Qs)s!UurY4E^@bb+e zuWkPQmzDbu_e%c<$^S|41`%)C9l{+Hfr1ub4#)xD0ifBr_N?x}qlyCuhC9{uPZQE< z2bfkI^udR^?NGaq$M;YO-$e)L5&{yx_VJgMcR&8J`hfLVVUT=+h!!x2{GbC+_7jNw zhsPF*a~8{<9>hru^4xC1bIXNm^WotrFU8h|IZbZ|MWORdv)P22#6VY4{9LmtFmE^T zNC=G5sV+%K_;-$V+x;=NwcV<@xx6r^(d%!&lBz!{*8ddA|05*-$KE^Pxi;MdsEQ1Z z+r+sDd=9-)~wexbqJFlaHrwI!{XpPoh68TCE{~I@(H3Sc9Bmg8qP~iK4IblAowEKK`V7! z=S&ya&jEt)9UzJ#R{z6-`O=b4m}mq9K_Vz%%QFF17{FE5y}_b@l{dElX}iqN=@=S^ z7`TCO735goO*D~Q+v53dxh|NAZV?0>Kx|q#4?M69P_QpyjFr#~HZbd{z3iBp00_93 zu!mK|8*@+yBHUOIXRsbmK0?=h zCw=;FjN$m*zZOi;FE$0pB!2j( z2R=Nw$ofHeAp{V_9>xN1%;7>WATl6Mzq22&+=3!f!8n-hV;<=t!LP z1SW-f0YJfqkq?G_*0Z_51uk%b3tV6*{(o_BAOHXW0089wS_U>XAvx4YS36A&O!AR%%nVFXGenLE3q+THPPX0mG~UXRvs))iMODVLw@2fuin zex)Y;A4z-G6Uy4=R-kRCX$-ebt^OpY{Px+k(j_(^M_=+-#Z0 z?xAVo9n&;HRaI~t2N+}A=kxi_x)%`yUupon@y%~S{%n@_XI~K@sC`l6KAX-$^RNl# zfjQ7#lzcMFvbgs_;F}MG7YzhoS^!Y;3p2CeG>y*O#^)QL>pJgK^6Pu`f%o%SAdyIL z5cEnunPpp0uh&oe`W^ey0l?RMs(ebmo)ihM?bdjoSH6jr-!ws!H84R`cJ)a$5G|T> zLi_p*Kt{>;nILGXR0?JhbgH7hFih~J13*;sgBH~CVU6CU_f%EoWAZ)|_;Nr#$ObP0 z2)zukFY(!$NN9}$&Y@rw7hf+`(;|++-nZC zzl*rIefz`iMC<1FyGSsnbuV)6-b>e{{?%^H(lk zc^4aJf%?8V)cH!-Zr}d#sm14|2Eg>}^pQE^AfBR|w$te&0Nx_nAK+7EWC1P#d&2_Y z@|9DK(Mt`0Ii%yMvr}LOlENSn`;OhT{cfpvq4MsrQ1_I#L>dFf5o91u~AW0G| zEiIi|oL*`GklD69+>5dYfLDt*(andR^(byk{xT;2)=AE~wEQaojMV(q3s<3W(BNZrJU!g|Ei--j z(%cU;IZ*vU5Cm+yQdu_-5B@rx>3)NG5;CY&wkoF@ua^!0WEbWxbo!dC4fXE$#Q3YF z`O?sQ^IqKQ}k`)bHzB^0l7T-`iHPy`P`Xhb9M= zfVK6tQ;Jg9UN`_~$DGJ)^dip?o|`Is2NEodphRT7?QnnR7WGYYxFlAdRJdQ?Jbn6qApzhgzuz;XvDz80Kkg=a z+N0v3k{_^3mx?zL0Q1KspR6pBU#5O0lNstenTZU1@X-g)Hi$#m3k86yrDEUY`}WrB zD);M;9o}E9m0)YT0@vSIILW7}`fm=hkg6ZutxKiLe0)&f8|p*N{pJf({bZ*O0ACXq zUYmjZxipv_Mb2Cl0VaagQW|Ju1|PG8s8Ch1Av?hUT8mIj0q7GJs1tKgGgNJo>9nKXwNnQGnV{J0jnm?-KlNs9|fH|25 zP16T`PNR)Ui(!Q$TvFhFIuGP1jl%APv_j%a=ptMmk?(8m?n ztlDsOvI6&a0LD$E*vyU2^9eaD0hViZ`uTkRdkBDUhZaOM-?s z?>x75JN??mi$(urr@{bH+P7Py+uPk=1#A2L&iKxb*7wE>urPP$lRIaqUzjR%=7W9T zmdfQ@=*pQ)W~lQdHSztQd~kc@aU6v`cL4O#d}06sf$v9QY@*10Q4a&aI5dL8x3?c} z^N#Pywx+f^eLcy~x{U4C<l<3#@PW~NY z0WtzXtzHW~QfGmYxohck z`kLgj(DOt>3XM&3&ularpDGElucL&YyKObHzTWBQlwHV;EkOhCd~Fus9$xL*MG=pC z4*}BSc%H{yK;>sIgL(EXSp4`dACosnD387DxiCPS=4Y}ZAP0s$(r@Nc7Ua@4tV^?@ z`RSD6cjpJ)YxB|ON@oyBh^90mt7VaRr3yK<3N|L40MN_QI{skND;rC&@U4FZ`B$!h zsTE=2Yu91%=Xdy;>gFP>ZjUxL&lLd2X}+;b4jG^{ znVTGBn=-Zz02EaTKWzsPaae`RnL1B=)yj?J4#jDOxA%X3FtWG=?U@2#FwGYUCnm5g zXQTk|P0>=IX9W|CTcTnS00S`q(*H^-mFfV1v9M&ArY<^%yBq*HwLbFm7Yi!fK>sX2 zaB=_~*+EoTv7kXA*F??F^n9(p7a7-t7HUc1nQXkHrwgFlCOGYCxuBU;iC{N{784aS z*8$V=wAuCM+cxYW<*Kp`8lLTqb9doE<1$vhpiw=^0a==Ob+SbIs(}-^Pk7v@HkK;e zmCiVsO@^M=K3|3Di~-k+71)w=NKSa~J*-0d-0|UK&N>t@R+h1i-~KK?Gk?Ec0mm_s z6&Y;oI*>a9@U4Xme7HDTfISlipyU_NYft_D!Z&~GKj&vkH=(Q3x3K+LWo?l_P#$)_ z+*pS2eLOMb_)x)P+SYV_4ZJ*9tIOcgs5+q>JHeoEejix(@;B7_}Fk2}}|D_$En zAt{p_*dyD2BmgL$liiwiX7NlUkG69AS$0D(M- z@Mm7*)!)mmq?b4on2?5CK0m)(sqpwbHw!vE9BNAwuHLL{ zmU(iJ1^8s;;UZx5i@CFm{7wIbT$(+>wlbM!0t9XN8Tu^*0s&+n+ab12w5mJ2VoO&R z7Wh~~2B5@u8cK+wh%Don%Kg*e0jcU|wWW~+e-H~YfbawYfE(CG0fMInKxQ11ou?gK zs2L7qbp{zK1ak}WT31Jvgc7@tlVF{Gaa#KInOW<1*HQo0KXYN@GYs@Zfj?WAu0dYi zgzCQ7FO!zQFkRBjGny)0A5+-%63ULQfq{K*)g4`JizO|skhl}+S?Ju7w`F+eda6lhtym5k#v1a#q zsW{F4w2-aN1)rM z+hK%j<0b;{WO6Vx0FFyOnbGVfL`fX8p~nDN{iR}ol}rT0g>03#wOS6;R&Tlu0wMHm zGq5HZdUOGS04qC#-<54{?H2ZS;QA+ve7rT4A3DG%wY_E-Y%1~*F#v&rJaQ=9_}bHh zU?>2P<`)Ny0fB%Rz%b(vrX~3WdG({84?ZIhZ1qW4ujF$o9_wG7!~m7Y8@x~Sf1I(+ z?cclp@csgJ7rjO_unvOP2x{$N;`cP>GXPb6<3I{AfbinJH?Tbo2nGg#U->@UGB3{D zN#0IUcUPik!0NXo1=4+z(!hkFhO<&Z`R!{({U+b9B@%0)w~^knSs^K8bt&Ot;|gSU2KKS^9uy+gnKc^%}VNXnK7E zu0LG;PDa+ggOB#rKNvUI>r(x}y0$`Vua~sD=zeY*%C>|(mP>`Ns zj4q1vfPH+fsfrgP8_z%ib9)DzuH5P}fT(t204%CQl-DuG^A>-WJ0roj7IgS=eWIm5co9jQ@!sg`Egb`n1)KTK%s=Cr6r(0vchyB zv@V~^E^UJG`tg_cHPv@0oKDULSz%iWAd+S@DzaC*Ev{ z6`*D~kkuLYz9fj`1LSf!?yJ=*_gmXr+(&^>Sl{g4_jM)iSo6j6Dwi(w&}@mxKRT}p zU?hM5K|t_5opfW+1o;f$n`!oD00N0%2?uU`ZEz680-%@X55oYY(;NH!50V;_O7EN> z|C8XHDl<<1!x$ys2Z1EJ2wLgL8Xo{;1OjRV0##9utR?y{d_FJ$`k4=mo5e!s8_U}} z<_`MLuL}_TWVPv%e+U8?nx}3ABjWNyp8=@K8wV1wwy1o4OfW%^0fZNcxq)pE5cCCr zU-?c%q8w{DAXFlhY6RCOrGN3?D(8?J0@x?KHBxp z#Y|E9ZC3(~s=dX)#xoj-0bN5D*!S);DFD#)E?^$okUl$wd$+>}-r0t^hfAQz9;Ga3 z2!H@c67ly<#$#o^SkMGp6u`x6Hw$Ugz~Nd&dwr+A4;QfLbOOY}Lh=8DgJ1lGxyK$> zpD?IC5gYjDY8=q7d*lO*3GnC6NO1KcgZmH7*aOLN$?t3$EU3ib4B*?9Sxi_1X%`#3 z(g8#X+q;W_il8W>B#31C-nZsK zll#MHKrcL1^$%ha#+8z-8}ik>pmSOJo#h?orJy%<7_^^pE39d z1_VGa&F^KyRR0kp0F1MDu-zQywc9n1?)HTHt(;&16M6?EntZ*D3;@O0Z`8l2LozVl zn3{&KTs*;D2QVf_eTq(fXTBW;I8*^g!+S?!Q+Z_PpQG@eHzel!@Xr7Id zq6CUUAEQHIL+~_r9mu8_C`cQc%AjF5khd(zR2UdL9ttyB3M}^rVA;I-%}hrUJdF!~ z&lwlb_k?tVmNen(XC)}+7(c7l45K@V@9R8^;wG9W0Tv&V9)`aME#Y>nyU=Jfz}(z| z@@p83?=UD$8PJZbPYf5|zQ&mp{d56fbteOByC$seK7{1tG=Dy)Z^4^0Td?{lYp(5x z>L+uDB&7QrHSgZNjfdM${vZ}iexOf!P8Ge3t?bQ}gYOknf~sc<%5S2h1|MwM179Si zc0urUO#U~p{j};pIvLg|A3*7(NW9|?wtux+&A3qefMzdB;RNl@kJ(6@`C_qMi8WGvG3=v z&uj03sD9t(ecv$Lo1jR|)do*)83C|@$^V|e5c{3)ecMawYE497v4IWszKZ8>9Ez4k zsrh;)tnKOX@Hh&9T0j$1um*Lfg!J2er&sdJkM-xq0>>DK$J}Ih!iXuz?i*d(coe@} zRxqfw{t|J7Qi3*jPWpF+4E(-nkBN@@O zYv%;wuAKw;J-kfKbf9{GttoC+OfkreD`5K6WFKV=P3g))F(sbgL0(!~{s1bHpo|L_ zirnw)>_Dwn>jrpi3qHYOOg`4&&DU@*7_lXyj1~SuVxrqOzpxJ~2bl+^Z4SJ>CU+^n z-c(`l;5Y`z40rxOaNm7$CEnL)Kp{Rl5IH3xRGor{ztnkT5l{YO1&mrc> zn-QJzpK)`$0J)2zv%VlH%%D~ zij?$WOn%CeprTb%zl21ke@NG~aL@lX`_Xr4Np@bh}lz1{qKJ_J{z<^QmUj(D% zV>30yEDxG|!2pd;KQnH@x$znJ=#$O9>t%gNj-&j|(Cbj@-XNk(^D{gArHSx{oRI;;M$%De7%Xjjrwegv1z&(_zcW_?cczUzYy;i z&y*qCUh3?ZPDUglFDe+vgfaL-hXIb zgSz_witgV&+sH;t#Q>-i4Bq|1 zemS=Rdrx{VD@@_NUeCjachhn1No(NyqmTj1wNdrSky!%N7ka83XNS+mXb003kVm*YhA}C*m_;wS=eS&z@6n*32#fqZS20dDDW~oC{kHjnjh>OlV3XSW14al z1Z&lfo^duH+t|x@K!E4^6$m^tOu+yF`weQDREA^#*|!S-jSa^D5^4hP%i-s8E)y?` zibzf=la}VG!&C)aM}i5=c13cb0T#*xK(+4jg{n3Vl|2;Ysl9XdmOLk-?v z=lz{+G3Vg^3v*po$xLXW?3H4Wp4@oI^9Xo>`;Yl7Jfu&z~u znViGhW;K|*-c>{dKn3PFF8721O=?0`twYn%K;GQ8V-KZy@h{|*4g=(~3@SATy@UW^ zcxVT58L0z;e9Gb=c>lhN2hH%gnVh(UDzgp~__nyNg=nxi)qR#tT2MHvKF5rmo-KZ^ zLCvsY*HGezF=AMc1ds(p@-=4iueJpjz1ubWDU0mxP#2l~zd6uuBQD4bP*CB*mg(eM5em?P>#gh}eX z#SG@N_lEr@RlQ&UEIzCw(@b&zBs~zwjs18;c@i)moXekO9T4m` zTn>UNfgyu_51*$+!UzDpY`v-nyon5uL=ZH+?+GvjSzxPXcf2nN`MNl_uDRGGYz*`y z6O{Xc$p9tZX^X~_k`M_Y?*oCVe{q9~#Ox$r!{8GDic>bm-*^|NZr1Ad`bJe+oXxqv z*sQV&&V6p6N}#v;F@SHTS7&uQi@!DAmz`ET032{t%YiEePsz&>sthHTHDM>BN z9&JSRwVCc*;auiq*^7dyJ@|79ej}=|t?*Ejh2KX~tkp?!yNq1OHsR`&4JlDC^JyIm zaY}>B2RzwEVG=5a;e3ky%}UMv8Tv=K-%4ssDc7)AXm8hzUP#2IZVN`1i_`J?YPB7h z%_*0Hb7`G%5Ttbply*3w)y9!84sGTk>-c)z3&=wR0fGVX2Qz2IC1%ftlkeNT&2A9y zZ&3wx?O&ZWnJE}){%ss;55%@HG` zZO%+92k6V#mdURh@K@+}`<+R?TQ*}4oyowZU%#xEg2@k>E|CmakV`9=d>cx6gIE8v zuu2_KivirM3G{xn0x&mebe>b+Xew}ZCVZ#W$6Xf6jN7pFg(%CySq1fxLH-OI`B|y@ zefp)uZ>qn?`+l1B);-9Z|AY5Ge%L$t#he*RzV90cN7s@pqs^q#9NhC43hGVt%m27& z-P*3H{Q>YsNsGM*G5{sN6t`wF-L0sd>d0dmYwNpusISQ;+}}(h2!wPbRT0GElwhi@ zT9=clpX8KlBM8LvT#_V6!p0yub~0c%F=S}S*Rb73KnN!IWGxwbUd%N)04V9{NIhZY zcg$?XpW*r?1BInqBp8v~V#GjTdBN0_KM4fUIEfCNiMy zDOjbH3=G0?Q3@*vidH!2j@%w9=!P}M{m)i~XKn&?&4KckgWiRVu43hzQAva~Q)KJj zAwL9^rbL+)&V>skGZ7vq<=*E&Vgb}=s8nsJx(!%zx5WGB3f;3JW7;Tbw?ET3vx$s& zaYi5(CQVT38VLlXBI4o%B5I?+YY;w9cB0$gdXoM{-OL@v#Y;BKSk0#6TGH>n!s7d@OpV$ zg%jC`D*tJ0<#96PGZRhjFP|5eo*3&UbS5XkR!xk3pGApS+7$g`p6p>PQb`Na;}&e~+Mtc8P{?+R zthNtfISiH93NSq0T+Zx#X7ST(C%!41qfh9v1RM1XEWBbu0&B^U7{*p4-ECXp<9hF^ zky2iNR3TS(SiDTdG5~?2tDS?}>TYuAcSdSK44sfo)E?L0YpT3$R)I(G?n8j-j9?0$ zT(sG<{h4>Y+67sodGt9Yo*J1FNIsdAh#V*?0dA+DR~FaV3bbmm_dAvWqUJ;@h6N5_ z9=az8^)s+w@_T`z-DAyD0%p6O4Ec{%P$IHTo}d{Y6uB@c2nY>x^w-A3lUrGsb5_u#WVA;H;{B)@2<5hu-)MR_f(eXGuMtJKMIWCIC1i0Y}N!A zHme>euoWgn#^-WP1VEQ5QywWS%!VmJiBLF;GC*YL4jEtBJO+Uc!)i?jK;*O|Ukr{h zX!ZU6!lKG5r~!H5>|=Wex80`@DcmQLK}Tv26#(WWj)Ek}29aYqQY669V@p!(_cnGF z?jP63c|1%{!(H#Ys&WXkc^m4742n|@N>EgTqW23Ub8n0728ofG2%K zR{rjsUT-0C5UN ziH}+k2vR~qhB*H2k_S$#{AF~@=%Lw)r+9gFH!{--jckzJ)m*xp5F4vfQ6#XvgfnD- zzR4#GR*ic+2%^Sh##``wzI?dua{`2ahY?jjnIbDk=6V5vk{|SL+c}bSH=qiOs}3w& zWCVipAm@-bw)-Q*w!v~F@V>_Mi9ASzVz-F^H zWF{DIvDSw{2>_UUn9fP%LBA>Mdi;X4&Jpq+GQq96DP_L87Y>};9z2i)h7btiq@W#h z`QRs|!M@E@##>Yph=!5(hpXzu=viPUW1V=9y#wJ3IkxQ2DRMlRWW!K^F@`$i2p`cj z!|aUzOT%ElP?>WX``^>YS*gD7B3dCC3aDxF);U0gVuFm&%VJrAYjk9NbixOfG??a- z1_w8G+D=D8I7_tRgU;IF^E%Qo$nekG4xdLKbD%icY*QdoZBMe&Tyx4(I(i9+>totd{c&`;gz@l5yZ%qE4+2SJ2(eq*)35{NAB9=(mrR zj6nc##M(VrVi30QK7%}QL^`;)Jy6)sS2~U`Y$Bc^^BHArp{NhMzZ^||5D?U-is)f0 z)Ql!FKuY@i`kwnk9GB3S98H_Y{=3-b{XKdHIx$#ck1z%s;JtPqy^Q8=0Qumu5%4}J zP6~)4aySCJzX@%lZm(Cc4f>AUtLlA8@a;Gq@vKa(vY&j<8~+&(kShWtN#STmfi)-~ zhPHl;{4^{P07VB79tD$Z@CNY`*N@q*OqnOT&%I6VEMx!zz`)@_2B5{ZS6I|nB2~-4 z#!EWbh#H-?=kc-N5IyO%syf0|ELJjO#y$KvGF4 z;fYo_z)oWDAO|Jb4o(hU& z(U7wNf?&RBHalyQS`sYF0##K9+A}C2Y!K>?k&jrqeHJW1fQT?B2ZiN5AL|19>a;QR z{kuiloqwamHWtg)>QMN-`@dVMd_LL)Y2!!{r{V9H-WSZu85CrGwo{FMOpig!+ zNape&Ns_qaF~OvDzVY>ue6qxlOc6|SVg!IV=KP`L4`40=SCV21BJk{P*|~?Y-Wlfl z9mVA!z>5?n?TBV7@iHJI#)3hYL)818C%S)*2RnoQf?*g0g70GgB1*wUyX9V_1xY_3 zZdfyIIeZ>Xj$k@cjjrs*URa4FF?ci1KyDAF>Bk!FAtLPoL-9d_EJ)v@omso9<#+@2&*t-t_zFLC&xm0F|Lj?ffZ$bz4<=|;78bBUY$2r7q#cMyc zZTm00#}^JP_o}8UH_bz9UK>+O(B|*YC$(hH{e$v>018RgNsU)kBK}V7I0+e4Hhj6o zc$cP(fzD^qF%m}s`Z22hS1&^OUf&kAqTms}?lR*$r5UIt=!04>(`5)2`f`Ht0+p=F#ROQ>)pTl5(3mGJfGC~xg z$V^6$ zs%rik&M!!kaziC?MA@L9By^?2Z5=HKrm=7WjzpFI-2oybOi3umGDI9pWVJfpy(??B zjRgmRwfKG8?VEHkS`%<@+X5_y2RLj>R(yV<7JI$B4}l}pmxDp9UjRmAhS&ZdH7Z`L z;F4|gZuJt) z48Fs1@PZnb4cm6hiXy#dTF6)k2J|IORp!k@N*p(P|}rYE(U_f6XyD}ggu5jieRv*o}0xh3SYX$$GJ@be4C#OM<_G}aGi~z<`d2hnBMCX9Fy%}rAg&0BBuOHP@KY-zI80Rkk#QsqWrkKD9U=W`~K>V2KU#jgEe5k6* zSs*AQgV@@R!u^GFHq;v3_+`@!8V6#W9`EjHcscfgkk5+hCu3vjp}sAjG?LYNw<2;G z<)qu4rhVqM|4Rdu4{8K}lBO#22#A{;5G?@+-;{*V2vt!#VCV;e-kXA*)vnj^G z5R?;c(vdxu7eBLa`2(}LHPod~41k~!7{*gdtnU4iS=npvAsBv$zJ&ggrYYyK|8;EN z0GSbUjAP^VC^HdK*Ab?K7f{hbz8gz6o<9eJT0@z2@Zwj2JoD;Q1j^Tx0Ov9BoH zmz9K5MiwCZ3v5}lWf!sH&tqbKfa4iS)d>*uBnM|$mDF3^J7zSu`ox{`D4f(k!-2)7#zvoq(oT}B?n zMh*bCWrJlJ2m*c7Tfb;V8L4`WX#an4Z(AkXwy{|x6*nCjN+b_xTsjn4$Yk@NDL^3X zR>hu$JZzL%Yp;v|fC{pyZaNoNKX+ftq$GN`lu5Ijg`Cvc>)x8RjPCYHE|GXv(UI_? z1Omwwi1jOi^wBq>GhZ)z>89i2S{7N`?zh(Kw7dKHH)PV$eQB=aBWDWj$HM1x4tsn% z@IJ^IAOJc;4FTYFZz_sXV!&R*{v~SJ99F*!q~G7C1-jILw6qENj3NM_Nnl{*BLMvE zN+9k+dvXxe4fdDlz8EwwEl79zo7=|d8NfGU0&~C4`*`utvmQG3GMlf@KO|t-Ejy(p zwO7ric?ntI)nq#PH~vDMHI9?Qa=^cLf6a!%LPAdOEdyP zQtkqffUxn%fu%>?VmuW9^s*pJ1OeguFAFFXSsH4+X*<06Mqn@k7$OGnjTqoz#SOjx z!T=y@J{Y2)Aer!G<7G6vz$sP)7EJ`3=1v-_-<=11+N0zfb8$OhWM z!2u|m0E8k7ugWhLDD0Ly)Ow!*$cP1e2I!~xQG4kD5H;HrU_e-KZyuPyP$#Jc4QE7$ z3bN&m(K{^%nA%;-=(*!`WeLLjgsewCe8N}20LQgKVIBiGgWadT50FTUenLViz;T@B zN9{`ofT+2y%bU*x1{@_nPV=Mor3XMSvs-q^bLmhN-k#YvK?e&P zKx3%)YM5{W0r}bD*|5sASC;$K;2u1IITftee rhNhOfz<-0_-B)?rnFr|cLBG2JiSjDZ2{ebo00000NkvXXu0mjfoHOUU literal 8273 zcmaKScQhQ{6YnmTMXcUeh~7)|zN>d4TJ#nr+KL)I1VM-vJ!*oeD_SDDXd#H+Vpq%R ztJlT*{{DXFy>srAbLWqlGoN#2&YiglMh2Q>Bupd#0Dw$eOU?K{8TCH`6aL5hlpIC? z05%3~HMmJIa4*2d6Z$N0WxLI$|AkrOjF7R=d3x!zV+PaMufjij47;FqUpCjdNoSUB zk8XGrThu;70;@}m0)bX)I|J~ThG4iZ1^~pRcSmIqaSRL;4)19UxeR#J2XXADNUG|x zt0z#Y8@#XdmR#6#G)3(c`1zR58A{*8cTIYRPi}Uc1>G#4gk$6>I5gfdh&ldzOZop$ zl#;Xx`~gJ$7Tly$;_3}`iuJHpPGp`-O4~?VCQd`Ss2F?PDZ}Wv2&{n@WF(yZNZvSh zGr3#WMe;OxL1DYnPO!ZRFLlE(#(}}8ey)GdA@K2GX>Ip$p5NqZCo-511lypNlJ?NT znal;%*`%FJGQ~`0LUlc$bmp(NI)1#5Z0kRo1b0sWkDmbo^r)1S3K!;-PNp6Re{^yT z$56&gV)Sd-uOEtQmq>|XM|C)?+a$NUD0lby`(VBwZXxS9N3t^QvO=!6^$!P zf2x1CmaYo?Pxou+#vqe@TZbL%DsrZn-__A;$v+$ZJgG0mz3(R<%^YvcP8M0epWN0# zBN4Ndb&d(p?zPp3l-@s@`AQk&odncwX7A&ZMKN%rd!fIM-9w;JzhPn4&mfJIL@gJ{ z*~N}L)Ss$PD&Eub^)f@unJctzw8}_EXs&SzfFU(TU{PP~!|01oWj#dy6s>6pWnS2OoZt|-`R30pr znz;RD@abxGTHKe^9g+;V%pB-hZL!FoF|AZ2rK;`AJff+yHbK`)8_M1A2u59*3#$gc ze0X~LO)puV{LKbK%BXf+mk*+r%{73kE&{Ij$HG7lpmuku7IDuk(V8*}OkoPkIs-CtM{(_Gy<0+W`88dd~yZ zAB?=%i)?hJ(>##rQyG5b=!En|FxLMG5o z*FeoL<4Jz=#mw@z)_Vl36u$q#!uft(Q{h-~O_35h1e`SA!fJ6Vo?nP>kD|(xwza=K z3vW7RMSKr{VirY)fD*zW*bG({@SD3u>=9mj=h6Kh$NSA85KK`yTYwGUym5!DvY3=$y~ z$fnadi%c4M9u)QBq-(&Pc(7wqCO+BKvBUqA>&E4n^ShzS$?i$#8ZB<$`1j_GxGq>L4FU!O6o(`7 z5A1%stI(9Y*XcRWXH-Z=P>U2fYm_94H&c5G*?Z4?#1DNe8#VA5@RE^zmLuDxV;>-q zZ^5R?7p+PU(;U}yo5wCSrr^zcH5K`KU#EThGoAmE!dP2IT>Oh||Iv~-Xg|A{@lH`3 z5$)r{g#0CeJj8sYTgmy^z!7^%dF$Nw`{=2g^y^p^RYIaeamkObrCe~MrezT7w%{p# zuGg6-IdT0n&A2ZOtQJBRv<20vpY%xCrva9wL`$)Z zJ)?}xZ=P;XW?l!t6}tO7A}+>KNP?L27)ZDaxNxpxl|LBvj~~Td$$U=O%sM!?f3Sa1 zy;f*xB4ir=79;1;kvLaxD<{BzDBV6TLc165GIclKacViDco8zp!W9%;r;feH;uhN5 z*LK5C^7KdMh4rcqn~TiRk$3%LCB9iQHOUG~7)toa>8}-$y)Lf$gfONJz^nmilA6Bc zc#C_spD-=bi@V-dxoEDg%waTE>VZtRv1zQ8H5C?~OyMQ3`jFGozLgzQfW)1BiZzI# z`*>0NY)<_-$_lm7>qMt4^x-R}ZuGN(wz(iD{rycccKH(Xji$rnMYQVQpDXo2MGcNB zT|VD2%7T>8L_oA+Q3GQ9qSB#|+HDf3c1E4vOIp$NXLgF(s-aIn-Em5nZvl70W z&RRB7C)?MAr}sVW+=L>%j3-ddDz)%*X<=r3&cPurwh(o>%U%rlnWq+o7aS*qR!YIH z)kcbac(zZSx^i~VdfyHSVqLoVT$7AXiq^I3*2sTV7XEQ32&!1Hx^}u9iGO`%H~86T zBJ6mH5&zfzz(miWG37($>OS(Uk(XU>0npJd-$lbbCCZec>3I2~&gAG?1d{dJ@Bu|s zfh#GUb!a1`DthhdhGNRv5;D_>dQ6S6J$^^0azX0QC!ACO-agpm)&$JigO z_EZ-kef}%4AgbM>R9fmC0@6Ea1$&K;_ngSJm=Klh@%H2I++G6Qp+NV04fLJoFiGcO;l4O9g0`a)PC z3xDLoA0{aGxe$Q8D{9*Gd>fWncuy!jGS{P~qPG*n`u4`M&95)_D375RXfgk2_BYc! zFJ7poToR)jlZFA&t;x5^ceO}TnefN3bJl(Zv)lj9=kYTh6pw8$2Z}ms0V?bh;_-Bp z=K#>XG57rxp>Jv!LR?$?_K@QD;YI7guF+_I$-~f<)HzJD;S;js+q~iaO6&_nkiOaB zU&+0+o?FC?345}LQ)x%9b{weuAda|YN-%8nMW3Bh!`;8^##B7i2o5%q<8nwh(j1e+_elDLvf7dd!3h-~fv5%qV1kSQvH@0@yrLRr}o zf3;K&rOS)ru~5@;KmWX!AyXcIG5+r5&{mD&7D0A74#TRPcCuDg@N71Evq}mPHXCwj z>8HwPP$?t98Hvo|8HyLZk|;29>f%$T+S3JORB&B!;<=Hzs<+iq9if&hU--$0MnjiF zqC#DsJHF%t%fe_pOqpK*pQPdwfDU)`f~9`Tb%1nf7f2o|XFFO1TJ^l(vOb~|G9IDZ zu(Q#+P|TMr?N%Fj@5OR)cX#Ux$0a3}fY51OhI;5r?v&j>M9edpIn_&BfTHrn3(`8# z@|RgT;_l2XdKI_U+JNO}Cl{;4k^2czM!&R6Y#*KwB$ZZvu`hBuJj|u(;U7B_vZJsB zqIaI*C%T3aJ&SMsSrD85NSf_8%tuN8!+v(PR7xL!p ziaxD)?s&2wN||q^&=hECuml9lwjxeAb{!w~!9N&sfZ6Td@%%kmC+_x(u4Id5JNDE2 zwe-NG%fCY_Vm~Iq-kvCUkLg2JQ`|N1;O&mG@$p484`HvRdR=3ie`2oqF;v6S1res_ z-eu(_v)^26&@#sv?QXGm`7y}npTn!Z`HbME>vPFkTJ>!=;)h>#EG*PS(~6Gu_}02( zYoOAsdxiwzpj3UQvw|b9shyH#Z=@H7-@vbv%{f*SU8)kpNz9q4Brlid@w_s)s+_ax zT5GH=E9(SI&k^IKKz+D$sc?4eTRcdz4NG_9wY5f!j(*kfG8w(o zkpwuNVSt$M1u)1gd}&U?H3!#O#k2adm8j*pN{2>TdE5flqT%~yW6Np_h0Pqn(Zf^! zpkuEkLQ~UFO1m1VCR8Q%_}-#U=0jNBkBnCxsC;Iv5F>)`e-3Y4W<4TfJ~mVU5~l#! z<$XNJnjR~dOXh8!d)}4KUvtsdL-#e&o<*Ly_O;j zfG<0a?vlNjaSs8f`}%S@Of&~f^@lkGMx`uY-FwOyT1l`~bs(hc(_VV#Ue<%5V_kx& zo?G($Nye;%e$m1PL9|{!-nbbMcT#^ltG4Q!PrIls_Y+f>4+x2YD@>G&0(_Gq zzkYSNrxpG=l=5ZMDrld}T4ZV}&RwbxcX_lehd;GZvRe!L(GiY{dr@S$yA7x>0qA5n za9M><<}$fkIeroC`R9KqG)WC~IL>6Gc&%3>5}i%zb-a&gaebM7DKa*PLSJJ|}X za*^>C%o^OU236m`5TQKnoBmdCK?Oes`xzh8u_~u`Hi*`$2y-z{72VBz3ak7EnL3`{ zgF0x%lULn&Z`}9pNfjt7THgrLIhQQAdjMO2G%-4O-$JfR@2rAvE_`b|XX73q-TNdG z|LgaqH|r2!FpKMI0iLvXX$ZAvC2Gnv_g$|$?FUa7=)wu;I_?q>Y%K;e#PqVtUCImX zy^5UxpGVmJ z7((-0$c7!JkX?)bX5?b>MyT+Q9?dfAJs*~j-CqeEjxM9!Wjqg}xZajdxJ zzyIb`4T&sr99URSV>txcMC-=(&wg3XY^9ru*xMoWGCWo`9GfCbUwsvJSdwzftC=mf zSIkVkG=`JB86t=BnLKE@;Y%}Q11>*c2&dg8*RI%HX6E9CN=lYu1zgy>m{Y!jpiCC& z36yG9G<9@PjI$agEx@!(Q>kYr;Xa~U$V6eXSN2ui{jm+HQakEZoYlyF=;yMx_d_5f z)Dg9bk4*e|lGhUgXyOpks)a^F#~N{4eO7Tm=5> z(E;PUu9nKlIQyc8ePG^=2g{RVMTRectDfLCoZf)_;T;PksruF__?`n|cc+k_CtD4n zbq#O5I8g*4zwuK`l%JGDOauz~DwM7CZOeg>mRYpo8CWU>(-)in zW4F9Pp0j&Fh%l$kr}qmx6;et?+c>xSh`;&_@q%Eygc2cetE8`RLPP#v>aAuVdH+!y z1+4P;5mhATxuoE`{+XV2-0|}`b_N3g20!|$;{MCYt8qw}$3k3~Tv)xN43Ks8+pyJP z+)#|}SNFQ;&w5wGZfEl)GmItc{$Fxz#nkc4s1jD5{OGC(HV~WKrkR!sPKqhN88!`w z@}!G|IMJ~TP7#qNIrv$v4MxEfqHT-6-t!r|?gMO2g zbp?A+ciLq29|ls9j|&$b^8Y(_@#(psfqhS8hXEPdXz<~tMEAaWKZ~A0?;f?m`2D-h z$Ye*F>J@*`f`1D9?EVBU)`b%jfL6nI{l5np&zFI48=VR?%nF^7P(vxH{gMdV?WxDt zvxyY1MZ94u@r)?VIdbrmXPAg-Fu{uns?Wp;|iNwx_gx@nMbYR z#YL|&)?o$DM#%nL?GB+Qv(C?$0`B;QMlu;???k0q4N_qSR>Gpem97+F+a-{j#La!- z!N2w2vMy4B7N`)2YKe>0e!$FLSRvFogNXUk)i|-cx7bV0ZStd-?@#8m6)%m#EIsCx zUY3+ zo#Hxmrw{#3_9AAS`#@`nd-q{(f#C&Ee^x_+Si$qa3jr^5JW++X#Jv%d*rmaFwATK8Sk-UNZ8rMv@tUl;SXyFN)de*``_&{aVbd1#L)w~sii zO(R%0ALI^USxf)~RKREFl?NzlqIHMf=s8Mulow(>^x(R>+zFSGh39cUO2c4 z;{{UCvEo}JmVmDzOzcJJ8!ObiE;8Fc0z2R%ai8xR+#`<(G#=AGnxHHGKyqu#PgSyh z+G4;yMEq7mzcMt5Yu=3Ti$U06U~h7M$xB|&sSYohNyd+g=VglyLigc@Mk%{GFXDG| z5c>hN>CnB;0k*Ehp)$S8xDV2`f$}n`0I;n*8>Pj!FUhL)S-bQZ0i|YYcZuEy;z^V9(!Fo?8XM-dnQpR+fmb zkH76^a`!_rvu}w3@7sb+@Yn>E2*06Q@T14rzwcoHDGHfO)hJ0T+_F8PybR^hvdO~4{dwzF!~BQDF6Xp?ah$gq}TK!6+jC z2VHSr+HnVe@d6^UBpbh}+I;Q1yxH>?=!?T#3ILh6fS-(AtJjg|nBEZflv4Yh%6avT z_KTda0iRB%@AgnfHr&^@wkWB5AmVV+&^Ib-umh`4<5Z&8Zc7Md!8zsjNB{3hMN>lxj}&I0)sU9sa8S zOtY%a@qzJ!LW-PTm5no60QUS5{xiPt z)4&>^l>r`RRi82U$(T(5cPzlItfzE~B_vVEO9piG5=2df_ldXsy!aMua%QVf%h3D_ zNxlK%T&YtvruFA%p!Z03go%S^IWNgw4qq%C=O!UujTl>D$ z5g#i>P_;CT6@BG><)_K5$@x3HVwlm4pc5^j&ed#L+aqPj8*c0N>e)5HAbZGRsLZ|e z@;$k4dpzAU--20j=6%Y+Z?V55ymF_xN&dhok)MjP%4goVJcUSpAz9+-3HgwtcP%O5 zFkKSu%1Y{1zJeB&TN}hJo3Ir*8Py?p%~_@q-v~2ws3SIY`K{#!SH7RTy+8Qp=lZcK zWTFRe`)Wj9|6N6pE%{%df{}bw6!mFu>Uo!);1n_+LX0ZlRk%cTF2ifL(C;8zsM~P-*b}HYRrJWklO%k&mDNW<;HK|9fK| zrsB`_ctfa`60tpB^Eg%bg(jU~y?i)Io{H!YW{}GGp-RDp2;9!v=?{w-&-^LwAN{#} z9mi#R2OPsrXz?RA5UxZ-^Sp#LILaxBe$5R$f`dzl=;OzeD?eUi7FOzdHPmhEmGLWc zjd{tcL1lS(9^*8ecGSYDJVxmN5oh#2J0lNo-{*Ddk}59XfyPC**iz5# z4-f3sKgg)uEe)0Jkk!w8FMNu6GVzdck&aXzrp&^5?bb4bL8ssf)wFB*Eb-peOs|$% zY*WjKpifAHZv?b11;-kpnPM|uluTm}*2M-Mh(3<{5d+D3784SnZ@oF`;&w0X8W4Pv z4pF{H)El~Com)M~BRhFo#gI$6-$Cv@cfYw)(Xw@WyK$hU-}0w>m)zS5dHqG4LVA!L zfJY2_(8@&sg1IH3`zfN3A$j=YB5OII^3G_#AJ38HdJ+k2${z+laL!V{P8*xplxNDs zCeTe~qHfo_GHBU{u7!?QK1%L>B*!k?&u|op)&M$B)_aDP&49t8#{3ZNNzy&QUjjD! z)FJfV{CH^tBC(*@n3>pb)HM_v&d8$J!szN{P>b zQj=k{(vej_<=h!K2{bjctvKk~JIkyhL?MLFQag-xO6r7<-_d%^O z8&dyEyHZZ6dU`|7;%GSh6vt}-131iEu<57(XY0R4{(^llh#B(PJGfne5AhUy1At9H z5?WviQh2vtl!pFTd933^FE(|b^-Wmx%Sj@#Xf?JFnbu`y9?yFoa8-nW{l!AV;mPee zj@K4U1TNWp`0L|-R`rvYgs}mqXo#BM%VjF^R1L4+M`Plg3dht3m>*=;eLbNOG$Mt7 zQZPwxL(jnHQY|yao4pp&-_Hl!40u8S zD&Y(p=OK-F2H(g4D?~%8F`7rY6flaOLV?*!6m={OK~T{zNe?kJWGt}&F8k~cfl$$q z>|P;jzpDY@FFK(&Uz?)9?-3Y&P5Q2kv*_^YqbOcmIyh8){QX+Re-8Gzz<4nk?!=li zCuMIz6QDv0XTt$W5)}Z8N^<+iA?0_%r=LQRoFoJL>r7L{Egg{DrW8N372WBd1x(NF z*J?QMn^^#+ra!}`|BKiH5YtUfFearH?^Z@+*zBc!zMjnQ>6I@Ur;@{vF>Y3f;EfR8 z6J`x_?&Duk7Ct6UaJu { if (this.activeICSelect.value != null) { - this.activeICSelect.value.value = this.activeIC.value.toString(); + this.activeICSelect.value.value = this.activeIC.value?.toString() ?? ""; this.activeICSelect.value.handleValueChange(); } }, 100); diff --git a/www/src/ts/virtualMachine/device/addDevice.ts b/www/src/ts/virtualMachine/device/addDevice.ts index a916dfe..af8a97b 100644 --- a/www/src/ts/virtualMachine/device/addDevice.ts +++ b/www/src/ts/virtualMachine/device/addDevice.ts @@ -54,7 +54,7 @@ export class VMAddDeviceButton extends VMObjectMixin(BaseElement) { let last: Map = null return computed(() => { const next = new Map( - Array.from(Object.values(this.templateDB.value ?? {})).flatMap((template) => { + Array.from(this.templateDB.value?.values() ?? []).flatMap((template) => { if ("structure" in template && "logic" in template) { return [[template.prefab.prefab_name, template]] as [ string, @@ -244,7 +244,7 @@ export class VMAddDeviceButton extends VMObjectMixin(BaseElement) { (result) => html` diff --git a/www/src/ts/virtualMachine/device/pins.ts b/www/src/ts/virtualMachine/device/pins.ts index 8a8bcd1..f3b34ee 100644 --- a/www/src/ts/virtualMachine/device/pins.ts +++ b/www/src/ts/virtualMachine/device/pins.ts @@ -81,7 +81,7 @@ export class VMDevicePins extends VMObjectMixin(BaseElement) { } ); }); - return pinsHtml; + return html`${watch(pinsHtml)}`; } _handleChangePin(e: CustomEvent) { diff --git a/www/src/ts/virtualMachine/device/slotAddDialog.ts b/www/src/ts/virtualMachine/device/slotAddDialog.ts index 10eebcd..9548132 100644 --- a/www/src/ts/virtualMachine/device/slotAddDialog.ts +++ b/www/src/ts/virtualMachine/device/slotAddDialog.ts @@ -11,6 +11,7 @@ import { ItemInfo, ObjectInfo, ObjectTemplate, + TemplateDatabase, } from "ic10emu_wasm"; import { computed, ReadonlySignal, signal, Signal, watch } from "@lit-labs/preact-signals"; import { repeat } from "lit/directives/repeat.js"; @@ -47,7 +48,7 @@ export class VMSlotAddDialog extends VMObjectMixin(BaseElement) { this._filter.value = val; } - templateDB = computed(() => { + templateDB = computed((): TemplateDatabase => { return this.vm.value?.state.templateDB.value ?? null; }); @@ -55,7 +56,7 @@ export class VMSlotAddDialog extends VMObjectMixin(BaseElement) { let last: { [k: string]: SlotableItemTemplate } = null; return computed(() => { const next = Object.fromEntries( - Array.from(Object.values(this.templateDB.value ?? {})).flatMap((template) => { + Array.from(this.templateDB.value?.values() ?? []).flatMap((template) => { if ("item" in template) { return [[template.prefab.prefab_name, template]] as [ string, @@ -82,7 +83,7 @@ export class VMSlotAddDialog extends VMObjectMixin(BaseElement) { if (isSome(obj)) { const template = obj.template; const slot = "slots" in template ? template.slots[this.slotIndex.value] : null; - const typ = slot.typ; + const typ = slot?.typ; if (typeof typ === "string" && typ !== "None") { filtered = Array.from(Object.values(this.items.value)).filter( @@ -238,10 +239,6 @@ export class VMSlotAddDialog extends VMObjectMixin(BaseElement) { const div = e.currentTarget as HTMLDivElement; const key = parseInt(div.getAttribute("key")); const entry = this.templateDB.value.get(key) as SlotableItemTemplate; - const obj = window.VM.vm.state.getObject(this.objectID); - const dbTemplate = obj.peek().template; - console.log("using entry", dbTemplate); - const template: FrozenObject = { obj_info: { prefab: entry.prefab.prefab_name, @@ -301,8 +298,8 @@ export class VMSlotAddDialog extends VMObjectMixin(BaseElement) { } _handleDialogHide() { - this.objectID = undefined; - this.slotIndex = undefined; + this.objectIDSignal.value = null; + this.slotIndex.value = null; } private slotIndex: Signal = signal(0); diff --git a/www/src/ts/virtualMachine/device/template.ts b/www/src/ts/virtualMachine/device/template.ts index 67840bc..00dda83 100644 --- a/www/src/ts/virtualMachine/device/template.ts +++ b/www/src/ts/virtualMachine/device/template.ts @@ -20,7 +20,7 @@ import { customElement, property, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; import { connectionFromConnectionInfo } from "./dbutils"; -import { crc32, displayNumber, parseNumber, structuralEqual } from "utils"; +import { crc32, displayNumber, isSome, parseNumber, structuralEqual } from "utils"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; import { VMDeviceCard } from "./card"; @@ -76,16 +76,16 @@ export class VmObjectTemplate extends VMObjectMixin(BaseElement) { `, ]; - fields: Signal>; - slots: Signal; - pins: Signal<(ObjectID | undefined)[]>; - template: Signal; - objectId: Signal; - objectName: Signal; - connections: Signal; + fields: Signal> = signal(null); + slots: Signal = signal([]); + pins: Signal<(ObjectID | null)[]> = signal(null); + template: Signal = signal(null); + objectId: Signal = signal(null); + objectName: Signal = signal(null); + connections: Signal = signal([]); private prefabNameSignal = signal(null); - private prefabHashSignal = computed(() => crc32(this.prefabNameSignal.value)); + private prefabHashSignal = computed(() => crc32(this.prefabNameSignal.value ?? "")); get prefabName(): string { return this.prefabNameSignal.peek(); @@ -114,6 +114,10 @@ export class VmObjectTemplate extends VMObjectMixin(BaseElement) { constructor() { super(); this.dbTemplate.subscribe(() => this.setupState()) + this.prefabNameSignal.subscribe(() => this.setupState()); + this.networkOptions.subscribe((_) => { + this.forceSelectUpdate(this.networksSelectRef); + }) } setupState() { @@ -122,8 +126,8 @@ export class VmObjectTemplate extends VMObjectMixin(BaseElement) { this.fields.value = Object.fromEntries( ( Array.from( - "logic" in dbTemplate - ? Object.entries(dbTemplate.logic.logic_types) + isSome(dbTemplate) && "logic" in dbTemplate + ? dbTemplate.logic.logic_types.entries() : [], ) as [LogicType, MemoryAccess][] ).map(([lt, access]) => { @@ -134,7 +138,7 @@ export class VmObjectTemplate extends VMObjectMixin(BaseElement) { ) as Record; this.slots.value = ( - ("slots" in dbTemplate ? dbTemplate.slots ?? [] : []) as SlotInfo[] + (isSome(dbTemplate) && "slots" in dbTemplate ? dbTemplate.slots ?? [] : []) as SlotInfo[] ).map( (slot, _index) => ({ @@ -144,7 +148,7 @@ export class VmObjectTemplate extends VMObjectMixin(BaseElement) { ); const connections = ( - "device" in dbTemplate + isSome(dbTemplate) && "device" in dbTemplate ? dbTemplate.device.connection_list : ([] as ConnectionInfo[]) ).map( @@ -163,27 +167,30 @@ export class VmObjectTemplate extends VMObjectMixin(BaseElement) { this.connections.value = connections.map((conn) => conn[1]); const numPins = - "device" in dbTemplate ? dbTemplate.device.device_pins_length : 0; + isSome(dbTemplate) && "device" in dbTemplate ? dbTemplate.device.device_pins_length : 0; this.pins.value = new Array(numPins).fill(undefined); } - renderFields(): HTMLTemplateResult { - const fields = Object.entries(this.fields); - return html` - ${fields.map(([name, field], _index, _fields) => { + fieldsHtml = computed(() => { + const fields = Object.entries(this.fields.value); + fields.map(([name, field], _index, _fields) => { return html` ${name} - ${field.field_type} `; - })} + }); + }); + + renderFields(): HTMLTemplateResult { + return html` + ${watch(this.fieldsHtml)} `; } @@ -191,7 +198,7 @@ export class VmObjectTemplate extends VMObjectMixin(BaseElement) { const input = e.target as SlInput; const field = input.getAttribute("key")! as LogicType; const val = parseNumber(input.value); - this.fields.value = { ...this.fields.value, [field]: val}; + this.fields.value = { ...this.fields.value, [field]: val }; if (field === "ReferenceId" && val !== 0) { this.objectIDSignal.value = val; } @@ -224,38 +231,34 @@ export class VmObjectTemplate extends VMObjectMixin(BaseElement) { return vm?.state.networkIds.value.map(net => html`Network ${net}`); }); - renderNetworks() { - const vm = window.VM.vm; - this.networkOptions.subscribe((_) => { - this.forceSelectUpdate(this.networksSelectRef); - }) - const connections = computed(() => { - this.connections.value.map((connection, index, _conns) => { - const conn = - typeof connection === "object" && "CableNetwork" in connection - ? connection.CableNetwork - : null; - return html` - - Connection:${index} - ${watch(this.networkOptions)} - ${conn?.typ} - - `; - }); + connectionsHtml = computed(() => { + this.connections.value?.map((connection, index, _conns) => { + const conn = + typeof connection === "object" && "CableNetwork" in connection + ? connection.CableNetwork + : null; + return html` + + Connection:${index} + ${watch(this.networkOptions)} + ${conn?.typ} + + `; }); + }); + renderNetworks() { return html`

`; } @@ -271,7 +274,7 @@ export class VmObjectTemplate extends VMObjectMixin(BaseElement) { private _pinsSelectRefMap: Map> = new Map(); - getPinRef(index: number) : Ref { + getPinRef(index: number): Ref { if (!this._pinsSelectRefMap.has(index)) { this._pinsSelectRefMap.set(index, createRef()); } @@ -359,8 +362,8 @@ export class VmObjectTemplate extends VMObjectMixin(BaseElement) { render() { const device = this.dbTemplate; - const prefabName = computed(() => device.value.prefab.prefab_name); - const name = computed(() => device.value.prefab.name); + const prefabName = computed(() => device.value?.prefab.prefab_name ?? ""); + const name = computed(() => device.value?.prefab.name ?? ""); return html`
diff --git a/www/src/ts/virtualMachine/state.ts b/www/src/ts/virtualMachine/state.ts index e60fe2f..80b13ac 100644 --- a/www/src/ts/virtualMachine/state.ts +++ b/www/src/ts/virtualMachine/state.ts @@ -526,7 +526,12 @@ export class VMState { if (!this.signalCacheHas(key)) { const s = computed((): number => { const obj = this.getObject(id).value; - return [...obj?.obj_info.device_pins?.keys() ?? []].length; + const template = obj?.template; + let numPins = [...obj?.obj_info.device_pins?.keys() ?? []].length; + if (isSome(template) && "device" in template) { + numPins = template.device.device_pins_length ?? 0; + } + return numPins; }); this.signalCacheSet(key, s); return s; From c81080659ef7c2494d82d64c0a727321d53ede8d Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Mon, 26 Aug 2024 20:11:42 -0700 Subject: [PATCH 45/50] refactor(frontend): fix loading code to editor Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- cspell.json | 5 +- ic10emu/src/interpreter/instructions.rs | 12 + ic10emu/src/vm/instructions/codegen/enums.rs | 12 + ic10emu/src/vm/instructions/codegen/traits.rs | 59 ++- www/package.json | 4 +- www/pnpm-lock.yaml | 21 +- www/src/ts/app/save.ts | 6 +- www/src/ts/editor/index.ts | 4 +- www/src/ts/presets/default.ts | 99 +++++ www/src/ts/presets/demo.ts | 3 +- www/src/ts/presets/index.ts | 3 +- www/src/ts/session.ts | 400 ++---------------- www/src/ts/sessionDB.ts | 345 +++++++++++++++ www/src/ts/virtualMachine/index.ts | 17 +- www/src/ts/virtualMachine/state.ts | 11 +- xtask/src/generate/instructions.rs | 1 + 16 files changed, 599 insertions(+), 403 deletions(-) create mode 100644 www/src/ts/presets/default.ts create mode 100644 www/src/ts/sessionDB.ts diff --git a/cspell.json b/cspell.json index db8a446..87dd65a 100644 --- a/cspell.json +++ b/cspell.json @@ -60,6 +60,7 @@ "brne", "brnez", "Circuitboard", + "Clrd", "codegen", "conv", "cstyle", @@ -110,6 +111,7 @@ "reagentmodes", "repr", "retval", + "Rmap", "rocketstation", "rparen", "sapz", @@ -143,6 +145,7 @@ "trunc", "Tsify", "uneval", - "whos" + "whos", + "xtask" ] } diff --git a/ic10emu/src/interpreter/instructions.rs b/ic10emu/src/interpreter/instructions.rs index f36df66..df5cd38 100644 --- a/ic10emu/src/interpreter/instructions.rs +++ b/ic10emu/src/interpreter/instructions.rs @@ -2700,3 +2700,15 @@ impl LabelInstruction for T { 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> { + todo!() + } +} diff --git a/ic10emu/src/vm/instructions/codegen/enums.rs b/ic10emu/src/vm/instructions/codegen/enums.rs index b35806d..80d659a 100644 --- a/ic10emu/src/vm/instructions/codegen/enums.rs +++ b/ic10emu/src/vm/instructions/codegen/enums.rs @@ -36,6 +36,7 @@ use wasm_bindgen::prelude::*; #[strum(use_phf, serialize_all = "lowercase")] #[serde(rename_all = "lowercase")] pub enum InstructionOp { + #[strum(props(example = "", desc = "No Operation", operands = "0"))] Nop, #[strum( props( @@ -837,6 +838,14 @@ pub enum InstructionOp { ) )] 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)", @@ -1459,6 +1468,9 @@ impl InstructionOp { 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]) diff --git a/ic10emu/src/vm/instructions/codegen/traits.rs b/ic10emu/src/vm/instructions/codegen/traits.rs index 53167b0..eff587a 100644 --- a/ic10emu/src/vm/instructions/codegen/traits.rs +++ b/ic10emu/src/vm/instructions/codegen/traits.rs @@ -3291,6 +3291,41 @@ pub trait RandInstruction: IntegratedCircuit { 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( @@ -4587,7 +4622,7 @@ pub trait YieldInstruction: IntegratedCircuit { ///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 + 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 {} +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 @@ -4615,15 +4650,15 @@ where + MinInstruction + ModInstruction + MoveInstruction + MulInstruction + NorInstruction + NotInstruction + OrInstruction + PeekInstruction + PokeInstruction + PopInstruction + PushInstruction + PutInstruction - + PutdInstruction + RandInstruction + 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, + + 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/www/package.json b/www/package.json index f3416a1..acca53f 100644 --- a/www/package.json +++ b/www/package.json @@ -52,8 +52,8 @@ "@lit/context": "^1.1.2", "@popperjs/core": "^2.11.8", "@shoelace-style/shoelace": "^2.16.0", - "ace-builds": "^1.35.4", - "ace-linters": "^1.2.3", + "ace-builds": "^1.36.0", + "ace-linters": "^1.3.0", "bootstrap": "^5.3.3", "bson": "^6.8.0", "buffer": "^6.0.3", diff --git a/www/pnpm-lock.yaml b/www/pnpm-lock.yaml index bc60e5d..843e8be 100644 --- a/www/pnpm-lock.yaml +++ b/www/pnpm-lock.yaml @@ -24,11 +24,11 @@ importers: specifier: ^2.16.0 version: 2.16.0(@types/react@18.2.79) ace-builds: - specifier: ^1.35.4 - version: 1.35.4 + specifier: ^1.36.0 + version: 1.36.0 ace-linters: - specifier: ^1.2.3 - version: 1.2.3 + specifier: ^1.3.0 + version: 1.3.0 bootstrap: specifier: ^5.3.3 version: 5.3.3(@popperjs/core@2.11.8) @@ -645,11 +645,11 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} - ace-builds@1.35.4: - resolution: {integrity: sha512-r0KQclhZ/uk5a4zOqRYQkJuQuu4vFMiA6VTj54Tk4nI1TUR3iEMMppZkWbNoWEgWwv4ciDloObb9Rf4V55Qgjw==} + ace-builds@1.36.0: + resolution: {integrity: sha512-7to4F86V5N13EY4M9LWaGo2Wmr9iWe5CrYpc28F+/OyYCf7yd+xBV5x9v/GB73EBGGoYd89m6JjeIUjkL6Yw+w==} - ace-linters@1.2.3: - resolution: {integrity: sha512-kfr3WG3zeAQWYLX9NwD+2AYVShvkyfVGJQLuh/wX2qIh2f71bYaFL9h7wHWtl8hofkKgDsWqfsX2LjXjoCqv5g==} + ace-linters@1.3.0: + resolution: {integrity: sha512-dX34G8iVapk+nl2cnhY5ZTKfXLo0MbtvwILsr9PVHEW8/NubudJkEE5twkQ69vGOJp2dW2i5jrU417X8CpXSIA==} acorn-import-attributes@1.9.5: resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} @@ -3320,9 +3320,9 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - ace-builds@1.35.4: {} + ace-builds@1.36.0: {} - ace-linters@1.2.3: + ace-linters@1.3.0: dependencies: '@xml-tools/ast': 5.0.5 '@xml-tools/constraints': 1.1.1 @@ -3337,6 +3337,7 @@ snapshots: vscode-languageserver-protocol: 3.17.5 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 diff --git a/www/src/ts/app/save.ts b/www/src/ts/app/save.ts index a4fe9ca..14cc33d 100644 --- a/www/src/ts/app/save.ts +++ b/www/src/ts/app/save.ts @@ -1,7 +1,7 @@ -import { HTMLTemplateResult, html, css, CSSResultGroup } from "lit"; -import { customElement, property, query, state } from "lit/decorators.js"; +import { html, css} from "lit"; +import { customElement, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; -import { SessionDB } from "session"; +import { SessionDB } from "sessionDB"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.js"; import { repeat } from "lit/directives/repeat.js"; diff --git a/www/src/ts/editor/index.ts b/www/src/ts/editor/index.ts index 41fdafa..340d76f 100644 --- a/www/src/ts/editor/index.ts +++ b/www/src/ts/editor/index.ts @@ -243,9 +243,9 @@ export class IC10Editor extends BaseElement { app.session.onLoad((_e) => { const session = app.session; const updated_ids: number[] = []; - for (const [id, code] of session.programs.value) { + for (const [id, code] of session.programs) { updated_ids.push(id); - that.createOrSetSession(id, code); + that.createOrSetSession(id, code.peek()); } that.activateSession(that.activeSession); for (const [id, _] of that.sessions) { diff --git a/www/src/ts/presets/default.ts b/www/src/ts/presets/default.ts new file mode 100644 index 0000000..33af011 --- /dev/null +++ b/www/src/ts/presets/default.ts @@ -0,0 +1,99 @@ + +import { SessionDB } from "../sessionDB"; + +export const defaultVMState: SessionDB.CurrentDBVmState = { + vm: { + objects: [ + { + obj_info: { + id: 1, + prefab: "StructureCircuitHousing", + socketed_ic: 2, + slots: new Map([ + [0, { id: 2, quantity: 1 }], + ]), + connections: new Map([ + [0, 1], + ]), + // unused, provided to make compiler happy + name: undefined, + prefab_hash: undefined, + compile_errors: undefined, + parent_slot: undefined, + root_parent_human: undefined, + damage: undefined, + device_pins: undefined, + reagents: undefined, + logic_values: undefined, + slot_logic_values: undefined, + entity: undefined, + visible_devices: undefined, + memory: undefined, + source_code: undefined, + circuit: undefined, + }, + template: undefined, + database_template: true, + }, + { + obj_info: { + id: 2, + prefab: "ItemIntegratedCircuit10", + source_code: "", + memory: new Array(512).fill(0), + circuit: { + instruction_pointer: 0, + yield_instruction_count: 0, + state: "Start", + aliases: new Map(), + defines: new Map(), + labels: new Map(), + registers: new Array(18).fill(0), + }, + + // unused, provided to make compiler happy + name: undefined, + prefab_hash: undefined, + compile_errors: undefined, + slots: undefined, + parent_slot: undefined, + root_parent_human: undefined, + damage: undefined, + device_pins: undefined, + connections: undefined, + reagents: undefined, + logic_values: undefined, + slot_logic_values: undefined, + entity: undefined, + socketed_ic: undefined, + visible_devices: undefined, + }, + template: undefined, + database_template: true, + }, + ], + networks: [ + { + id: 1, + devices: [1], + power_only: [], + channels: Array(8).fill(NaN) as [ + number, + number, + number, + number, + number, + number, + number, + number, + ], + }, + ], + program_holders: [2], + circuit_holders: [1], + default_network_key: 1, + wireless_receivers: [], + wireless_transmitters: [], + }, + activeIC: 1, +}; diff --git a/www/src/ts/presets/demo.ts b/www/src/ts/presets/demo.ts index 6b31100..b562eea 100644 --- a/www/src/ts/presets/demo.ts +++ b/www/src/ts/presets/demo.ts @@ -1,5 +1,4 @@ -import { ObjectInfo } from "ic10emu_wasm"; -import { SessionDB } from "../session"; +import { SessionDB } from "../sessionDB"; export const demoCode = `# Highlighting Demo diff --git a/www/src/ts/presets/index.ts b/www/src/ts/presets/index.ts index 21054d2..d28acc9 100644 --- a/www/src/ts/presets/index.ts +++ b/www/src/ts/presets/index.ts @@ -1,3 +1,4 @@ +import { defaultVMState } from "./default"; import { demoVMState } from "./demo"; -export { demoVMState }; +export { defaultVMState, demoVMState }; diff --git a/www/src/ts/session.ts b/www/src/ts/session.ts index b224e0e..a34fc35 100644 --- a/www/src/ts/session.ts +++ b/www/src/ts/session.ts @@ -1,31 +1,20 @@ import type { ICError, - FrozenVM, - RegisterSpec, - DeviceSpec, - LogicType, - LogicSlotType, - LogicField, - Class as SlotType, - FrozenCableNetwork, - FrozenObject, - ObjectInfo, - ICState, ObjectID, } from "ic10emu_wasm"; import { App } from "./app"; -import { openDB, DBSchema, IDBPTransaction, IDBPDatabase } from "idb"; +import { openDB, IDBPTransaction } from "idb"; import { TypedEventTarget, - crc32, - dispatchTypedEvent, fromJson, + structuralEqual, toJson, } from "./utils"; import * as presets from "./presets"; -import { batch, computed, effect, signal, Signal } from "@lit-labs/preact-signals"; +import { computed, signal, Signal } from "@lit-labs/preact-signals"; +import { SessionDB } from "sessionDB"; const { demoVMState } = presets; export interface SessionEventMap { @@ -38,7 +27,7 @@ export interface SessionEventMap { } export class Session extends TypedEventTarget() { - private _programs: Signal>; + private _programs: Map>; private _errors: Signal>; private _activeIC: Signal; private _activeLines: Signal>; @@ -49,7 +38,7 @@ export class Session extends TypedEventTarget() { constructor(app: App) { super(); this.app = app; - this._programs = signal(new Map()); + this._programs = new Map(); this._errors = signal(new Map()); this._save_timeout = undefined; this._activeIC = signal(null); @@ -60,16 +49,23 @@ export class Session extends TypedEventTarget() { window.addEventListener("hashchange", (_event) => { that.loadFromFragment(); }); - - this._programs.subscribe((_) => {this._fireOnLoad()}); } - get programs(): Signal> { + get programs(): Map> { return this._programs; } - set programs(programs: Iterable<[number, string]>) { - this._programs.value = new Map(programs); + set programs(programs: Iterable<[ObjectID, string]>) { + const seenIds: ObjectID[] = [] + for (const [id, code] of programs) { + this.setProgram(id, code); + seenIds.push(id); + } + for (const id of this._programs.keys()) { + if (!seenIds.includes(id)) { + this.setProgram(id, null); + } + } } get activeIC(): Signal { @@ -82,16 +78,14 @@ export class Session extends TypedEventTarget() { } changeID(oldID: ObjectID, newID: ObjectID) { - if (this.programs.peek().has(oldID)) { - const newVal = new Map(this.programs.value); - newVal.set(newID, newVal.get(oldID)); - newVal.delete(oldID); - this.programs.value = newVal; + if (this._programs.has(oldID)) { + this._programs.set(newID, this._programs.get(oldID)); + this._programs.delete(oldID); } this.dispatchCustomEvent("session-id-change", { old: oldID, new: newID }); } - onIDChange(callback: (e: CustomEvent<{ old: ObjectID; new: ObjectID}>) => any) { + onIDChange(callback: (e: CustomEvent<{ old: ObjectID; new: ObjectID }>) => any) { this.addEventListener("session-id-change", callback); } @@ -110,21 +104,36 @@ export class Session extends TypedEventTarget() { setActiveLine(id: ObjectID, line: number) { const last = this._activeLines.peek().get(id); if (last !== line) { - this._activeLines.value = new Map([ ... this._activeLines.value.entries(), [id, line]]); + this._activeLines.value = new Map([... this._activeLines.value.entries(), [id, line]]); this._fireOnActiveLine(id); } } setProgramCode(id: ObjectID, code: string) { - this._programs.value = new Map([ ...this._programs.value.entries(), [id, code]]); + this.setProgram(id, code); if (this.app.vm) { this.app.vm.updateCode(); } this.save(); } + getProgram(id: ObjectID): Signal { + if (!this._programs.has(id)) { + this._programs.set(id, signal(null)); + } + return this._programs.get(id); + } + + private setProgram(id: ObjectID, code: string) { + if (!this._programs.has(id)) { + this._programs.set(id, signal(code)); + } else { + this._programs.get(id).value = code; + } + } + setProgramErrors(id: ObjectID, errors: ICError[]) { - this._errors.value = new Map([ ...this._errors.value.entries(), [id, errors]]); + this._errors.value = new Map([...this._errors.value.entries(), [id, errors]]); this._fireOnErrors([id]); } @@ -223,6 +232,8 @@ export class Session extends TypedEventTarget() { console.log("Bad session data:", data); } } + } else { + this.load(presets.defaultVMState); } } @@ -312,333 +323,6 @@ export class Session extends TypedEventTarget() { } } -export namespace SessionDB { - export namespace V1 { - export interface VMState { - activeIC: number; - vm: FrozenVM; - } - - export interface FrozenVM { - ics: FrozenIC[]; - devices: DeviceTemplate[]; - networks: FrozenNetwork[]; - default_network: number; - } - - export interface FrozenNetwork { - id: number; - devices: number[]; - power_only: number[]; - channels: number[]; - } - 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 Alias = RegisterSpec | DeviceSpec; - - export type Aliases = Map; - - export type Defines = Map; - - export type Pins = (number | undefined)[]; - export interface SlotOccupantTemplate { - id?: number; - fields: { [key in LogicSlotType]?: LogicField }; - } - export interface ConnectionCableNetwork { - CableNetwork: { - net: number | undefined; - typ: string; - }; - } - export type Connection = ConnectionCableNetwork | "Other"; - - 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 namespace V2 { - export interface VMState { - activeIC: number; - vm: FrozenVM; - } - - function objectFromIC(ic: SessionDB.V1.FrozenIC): FrozenObject { - return { - obj_info: { - name: undefined, - id: ic.id, - prefab: "ItemIntegratedCircuit10", - prefab_hash: crc32("ItemIntegratedCircuit10"), - memory: ic.stack, - source_code: ic.code, - compile_errors: undefined, - circuit: { - instruction_pointer: ic.ip, - yield_instruction_count: ic.ic, - state: ic.state as ICState, - aliases: ic.aliases, - defines: ic.defines, - labels: new Map(), - registers: ic.registers, - }, - - // unused - slots: undefined, - parent_slot: undefined, - root_parent_human: undefined, - damage: undefined, - device_pins: undefined, - connections: undefined, - reagents: undefined, - logic_values: undefined, - slot_logic_values: undefined, - entity: undefined, - socketed_ic: undefined, - visible_devices: undefined, - }, - database_template: true, - template: undefined, - }; - } - function objectsFromV1Template( - template: SessionDB.V1.DeviceTemplate, - idFn: () => number, - socketedIcFn: (id: number) => number | undefined, - ): FrozenObject[] { - const slotOccupantsPairs = new Map( - template.slots.flatMap((slot, index) => { - if (typeof slot.occupant !== "undefined") { - return [ - [ - index, - [ - { - obj_info: { - name: undefined, - id: slot.occupant.id ?? idFn(), - prefab: undefined, - prefab_hash: slot.occupant.fields.PrefabHash?.value, - damage: slot.occupant.fields.Damage?.value, - - socketed_ic: undefined, - // unused - memory: undefined, - source_code: undefined, - compile_errors: undefined, - circuit: undefined, - slots: undefined, - device_pins: undefined, - connections: undefined, - reagents: undefined, - logic_values: undefined, - slot_logic_values: undefined, - entity: undefined, - visible_devices: undefined, - }, - database_template: true, - template: undefined, - }, - slot.occupant.fields.Quantity ?? 1, - ], - ], - ] as [number, [FrozenObject, number]][]; - } else { - return [] as [number, [FrozenObject, number]][]; - } - }), - ); - const frozen: FrozenObject = { - obj_info: { - name: template.name, - id: template.id, - prefab: template.prefab_name, - prefab_hash: undefined, - slots: new Map( - Array.from(slotOccupantsPairs.entries()).map( - ([index, [obj, quantity]]) => [ - index, - { - quantity, - id: obj.obj_info.id, - }, - ], - ), - ), - socketed_ic: socketedIcFn(template.id), - - logic_values: new Map( - Object.entries(template.fields).map(([key, val]) => { - return [key as LogicType, val.value]; - }), - ), - - // unused - memory: undefined, - source_code: undefined, - compile_errors: undefined, - circuit: undefined, - parent_slot: undefined, - root_parent_human: undefined, - damage: undefined, - device_pins: undefined, - connections: undefined, - reagents: undefined, - slot_logic_values: undefined, - entity: undefined, - visible_devices: undefined, - }, - database_template: true, - template: undefined, - }; - return [ - ...Array.from(slotOccupantsPairs.entries()).map( - ([_index, [obj, _quantity]]) => obj, - ), - frozen, - ]; - } - - export function fromV1State(v1State: SessionDB.V1.VMState): VMState { - const highestObjetId = Math.max( - ...v1State.vm.devices - .map((device) => device.id ?? -1) - .concat(v1State.vm.ics.map((ic) => ic.id ?? -1)), - ); - let nextId = highestObjetId + 1; - const deviceIcs = new Map( - v1State.vm.ics.map((ic) => [ic.device, objectFromIC(ic)]), - ); - const objects = v1State.vm.devices.flatMap((device) => { - return objectsFromV1Template( - device, - () => nextId++, - (id) => deviceIcs.get(id)?.obj_info.id ?? undefined, - ); - }); - const vm: FrozenVM = { - objects, - circuit_holders: objects.flatMap((obj) => - "socketed_ic" in obj.obj_info && - typeof obj.obj_info.socketed_ic !== "undefined" - ? [obj.obj_info.id] - : [], - ), - program_holders: objects.flatMap((obj) => - "source_code" in obj.obj_info && - typeof obj.obj_info.source_code !== "undefined" - ? [obj.obj_info.id] - : [], - ), - default_network_key: v1State.vm.default_network, - networks: v1State.vm.networks as FrozenCableNetwork[], - wireless_receivers: [], - wireless_transmitters: [], - }; - const v2State: VMState = { - activeIC: v1State.activeIC, - vm, - }; - return v2State; - } - } - - export enum DBVersion { - V1 = 1, - V2 = 2, - } - - export const LOCAL_DB_VERSION = DBVersion.V2 as const; - export type CurrentDBSchema = AppDBSchemaV2; - export type CurrentDBVmState = V2.VMState; - export const LOCAL_DB_SESSION_STORE = "sessionsV2" as const; - - export interface AppDBSchemaV1 extends DBSchema { - sessions: { - key: string; - value: { - name: string; - date: Date; - session: V1.VMState; - }; - indexes: { - "by-date": Date; - "by-name": string; - }; - }; - } - - export interface AppDBSchemaV2 extends DBSchema { - sessions: { - key: string; - value: { - name: string; - date: Date; - session: V1.VMState; - }; - indexes: { - "by-date": Date; - "by-name": string; - }; - }; - sessionsV2: { - key: string; - value: { - name: string; - date: Date; - version: DBVersion.V2; - session: V2.VMState; - }; - indexes: { - "by-date": Date; - "by-name": string; - }; - }; - } -} export interface OldPrograms { programs: [number, string][]; diff --git a/www/src/ts/sessionDB.ts b/www/src/ts/sessionDB.ts new file mode 100644 index 0000000..23fd3bf --- /dev/null +++ b/www/src/ts/sessionDB.ts @@ -0,0 +1,345 @@ +import type { + ICError, + FrozenVM, + RegisterSpec, + DeviceSpec, + LogicType, + LogicSlotType, + LogicField, + Class as SlotType, + FrozenCableNetwork, + FrozenObject, + ObjectInfo, + ICState, + ObjectID, +} from "ic10emu_wasm"; +import { DBSchema } from "idb"; +import { crc32 } from "utils"; + +export namespace SessionDB { + export namespace V1 { + export interface VMState { + activeIC: number; + vm: FrozenVM; + } + + export interface FrozenVM { + ics: FrozenIC[]; + devices: DeviceTemplate[]; + networks: FrozenNetwork[]; + default_network: number; + } + + export interface FrozenNetwork { + id: number; + devices: number[]; + power_only: number[]; + channels: number[]; + } + 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 Alias = RegisterSpec | DeviceSpec; + + export type Aliases = Map; + + export type Defines = Map; + + export type Pins = (number | undefined)[]; + export interface SlotOccupantTemplate { + id?: number; + fields: { [key in LogicSlotType]?: LogicField }; + } + export interface ConnectionCableNetwork { + CableNetwork: { + net: number | undefined; + typ: string; + }; + } + export type Connection = ConnectionCableNetwork | "Other"; + + 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 namespace V2 { + export interface VMState { + activeIC: number; + vm: FrozenVM; + } + + function objectFromIC(ic: SessionDB.V1.FrozenIC): FrozenObject { + return { + obj_info: { + name: undefined, + id: ic.id, + prefab: "ItemIntegratedCircuit10", + prefab_hash: crc32("ItemIntegratedCircuit10"), + memory: ic.stack, + source_code: ic.code, + compile_errors: undefined, + circuit: { + instruction_pointer: ic.ip, + yield_instruction_count: ic.ic, + state: ic.state as ICState, + aliases: ic.aliases, + defines: ic.defines, + labels: new Map(), + registers: ic.registers, + }, + + // unused + slots: undefined, + parent_slot: undefined, + root_parent_human: undefined, + damage: undefined, + device_pins: undefined, + connections: undefined, + reagents: undefined, + logic_values: undefined, + slot_logic_values: undefined, + entity: undefined, + socketed_ic: undefined, + visible_devices: undefined, + }, + database_template: true, + template: undefined, + }; + } + function objectsFromV1Template( + template: SessionDB.V1.DeviceTemplate, + idFn: () => number, + socketedIcFn: (id: number) => number | undefined, + ): FrozenObject[] { + const slotOccupantsPairs = new Map( + template.slots.flatMap((slot, index) => { + if (typeof slot.occupant !== "undefined") { + return [ + [ + index, + [ + { + obj_info: { + name: undefined, + id: slot.occupant.id ?? idFn(), + prefab: undefined, + prefab_hash: slot.occupant.fields.PrefabHash?.value, + damage: slot.occupant.fields.Damage?.value, + + socketed_ic: undefined, + // unused + memory: undefined, + source_code: undefined, + compile_errors: undefined, + circuit: undefined, + slots: undefined, + device_pins: undefined, + connections: undefined, + reagents: undefined, + logic_values: undefined, + slot_logic_values: undefined, + entity: undefined, + visible_devices: undefined, + }, + database_template: true, + template: undefined, + }, + slot.occupant.fields.Quantity ?? 1, + ], + ], + ] as [number, [FrozenObject, number]][]; + } else { + return [] as [number, [FrozenObject, number]][]; + } + }), + ); + const frozen: FrozenObject = { + obj_info: { + name: template.name, + id: template.id, + prefab: template.prefab_name, + prefab_hash: undefined, + slots: new Map( + Array.from(slotOccupantsPairs.entries()).map( + ([index, [obj, quantity]]) => [ + index, + { + quantity, + id: obj.obj_info.id, + }, + ], + ), + ), + socketed_ic: socketedIcFn(template.id), + + logic_values: new Map( + Object.entries(template.fields).map(([key, val]) => { + return [key as LogicType, val.value]; + }), + ), + + // unused + memory: undefined, + source_code: undefined, + compile_errors: undefined, + circuit: undefined, + parent_slot: undefined, + root_parent_human: undefined, + damage: undefined, + device_pins: undefined, + connections: undefined, + reagents: undefined, + slot_logic_values: undefined, + entity: undefined, + visible_devices: undefined, + }, + database_template: true, + template: undefined, + }; + return [ + ...Array.from(slotOccupantsPairs.entries()).map( + ([_index, [obj, _quantity]]) => obj, + ), + frozen, + ]; + } + + export function fromV1State(v1State: SessionDB.V1.VMState): VMState { + const highestObjetId = Math.max( + ...v1State.vm.devices + .map((device) => device.id ?? -1) + .concat(v1State.vm.ics.map((ic) => ic.id ?? -1)), + ); + let nextId = highestObjetId + 1; + const deviceIcs = new Map( + v1State.vm.ics.map((ic) => [ic.device, objectFromIC(ic)]), + ); + const objects = v1State.vm.devices.flatMap((device) => { + return objectsFromV1Template( + device, + () => nextId++, + (id) => deviceIcs.get(id)?.obj_info.id ?? undefined, + ); + }); + const vm: FrozenVM = { + objects, + circuit_holders: objects.flatMap((obj) => + "socketed_ic" in obj.obj_info && + typeof obj.obj_info.socketed_ic !== "undefined" + ? [obj.obj_info.id] + : [], + ), + program_holders: objects.flatMap((obj) => + "source_code" in obj.obj_info && + typeof obj.obj_info.source_code !== "undefined" + ? [obj.obj_info.id] + : [], + ), + default_network_key: v1State.vm.default_network, + networks: v1State.vm.networks as FrozenCableNetwork[], + wireless_receivers: [], + wireless_transmitters: [], + }; + const v2State: VMState = { + activeIC: v1State.activeIC, + vm, + }; + return v2State; + } + } + + export enum DBVersion { + V1 = 1, + V2 = 2, + } + + export const LOCAL_DB_VERSION = DBVersion.V2 as const; + export type CurrentDBSchema = AppDBSchemaV2; + export type CurrentDBVmState = V2.VMState; + export const LOCAL_DB_SESSION_STORE = "sessionsV2" as const; + + export interface AppDBSchemaV1 extends DBSchema { + sessions: { + key: string; + value: { + name: string; + date: Date; + session: V1.VMState; + }; + indexes: { + "by-date": Date; + "by-name": string; + }; + }; + } + + export interface AppDBSchemaV2 extends DBSchema { + sessions: { + key: string; + value: { + name: string; + date: Date; + session: V1.VMState; + }; + indexes: { + "by-date": Date; + "by-name": string; + }; + }; + sessionsV2: { + key: string; + value: { + name: string; + date: Date; + version: DBVersion.V2; + session: V2.VMState; + }; + indexes: { + "by-date": Date; + "by-name": string; + }; + }; + } +} diff --git a/www/src/ts/virtualMachine/index.ts b/www/src/ts/virtualMachine/index.ts index 8094e02..f14c7ec 100644 --- a/www/src/ts/virtualMachine/index.ts +++ b/www/src/ts/virtualMachine/index.ts @@ -23,15 +23,10 @@ export interface ToastMessage { id: string; } import { - signal, computed, - effect, - batch, } from '@lit-labs/preact-signals'; -import type { Signal } from '@lit-labs/preact-signals'; import { getJsonContext } from "./jsonErrorUtils"; import { VMState } from "./state"; -import { Obj } from "@popperjs/core"; export interface VirtualMachineEventMap { "vm-template-db-loaded": CustomEvent; @@ -94,19 +89,19 @@ class VirtualMachine extends TypedEventTarget() { } async updateCode() { - const progs = this.app.session.programs.peek(); + const progs = this.app.session.programs; for (const id of progs.keys()) { const attempt = Date.now().toString(16); - const circuitHolder = this.state.getObject(id); - const prog = progs.get(id); + const vmProg = this.state.getObjectProgramSource(id).peek(); + const prog = progs.get(id).peek(); if ( - circuitHolder && + vmProg && prog && - circuitHolder.peek().obj_info.source_code !== prog + vmProg !== prog ) { try { console.time(`CompileProgram_${id}_${attempt}`); - await this.ic10vm.setCodeInvalid(id, progs.get(id)!); + await this.ic10vm.setCodeInvalid(id, prog); const errors = await this.ic10vm.getCompileErrors(id); this.app.session.setProgramErrors(id, errors); this.dispatchCustomEvent("vm-object-modified", id); diff --git a/www/src/ts/virtualMachine/state.ts b/www/src/ts/virtualMachine/state.ts index 80b13ac..aba2540 100644 --- a/www/src/ts/virtualMachine/state.ts +++ b/www/src/ts/virtualMachine/state.ts @@ -593,7 +593,16 @@ export class VMState { const key = `obj:${id},source`; if (!this.signalCacheHas(key)) { const s = computed(() => { - return this.getObject(id).value?.obj_info.source_code ?? null; + if (this.circuitHolderIds.value?.includes(id)) { + const circuit = this.getObject(id).value; + const ic = this.getObject(circuit?.obj_info.socketed_ic).value; + return ic?.obj_info.source_code ?? null; + } else if (this.programHolderIds.value?.includes(id)) { + return this.getObject(id).value?.obj_info.source_code ?? null; + } else { + console.error(`(objectId: ${id}) does not refer to a object with a known program interface`) + return null; + } }) this.signalCacheSet(key, s); return s; diff --git a/xtask/src/generate/instructions.rs b/xtask/src/generate/instructions.rs index e596b51..21695f4 100644 --- a/xtask/src/generate/instructions.rs +++ b/xtask/src/generate/instructions.rs @@ -89,6 +89,7 @@ fn write_instructions_enum( #[strum(use_phf, serialize_all = "lowercase")] #[serde(rename_all = "lowercase")] pub enum InstructionOp { + #[strum(props( example = "", desc = "No Operation", operands = "0" ))] Nop, #(#inst_variants)* From 08c42a261804dbcdc6a638b1be0393d13a472a5c Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Mon, 16 Sep 2024 18:00:10 -0700 Subject: [PATCH 46/50] refactor(vm): add proper reagent interface, trace VM, fix slot serialization Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- ic10emu/Cargo.toml | 6 + ic10emu/src/errors.rs | 42 +- ic10emu/src/interpreter.rs | 20 +- ic10emu/src/interpreter/instructions.rs | 54 +- ic10emu/src/network.rs | 16 +- ic10emu/src/vm.rs | 120 +- ic10emu/src/vm/instructions/operands.rs | 22 +- ic10emu/src/vm/object.rs | 12 +- ic10emu/src/vm/object/generic/macros.rs | 71 +- ic10emu/src/vm/object/generic/structs.rs | 80 +- ic10emu/src/vm/object/generic/traits.rs | 247 +- ic10emu/src/vm/object/humans.rs | 65 +- ic10emu/src/vm/object/macros.rs | 23 + .../stationpedia/structs/circuit_holder.rs | 51 +- .../structs/integrated_circuit.rs | 62 +- ic10emu/src/vm/object/templates.rs | 172 +- ic10emu/src/vm/object/traits.rs | 48 +- ic10emu_wasm/Cargo.toml | 1 + ic10emu_wasm/src/lib.rs | 1 + stationeers_data/Cargo.toml | 4 +- stationeers_data/src/database/prefab_map.rs | 12665 +++++++++------- stationeers_data/src/database/reagent_map.rs | 581 + stationeers_data/src/enums/basic.rs | 6 + stationeers_data/src/enums/prefabs.rs | 44 + stationeers_data/src/enums/script.rs | 11 + stationeers_data/src/lib.rs | 22 +- stationeers_data/src/templates.rs | 134 +- 27 files changed, 8728 insertions(+), 5852 deletions(-) create mode 100644 stationeers_data/src/database/reagent_map.rs diff --git a/ic10emu/Cargo.toml b/ic10emu/Cargo.toml index b001d41..2dcc9b0 100644 --- a/ic10emu/Cargo.toml +++ b/ic10emu/Cargo.toml @@ -26,11 +26,13 @@ strum_macros = "0.26.2" 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"] } @@ -54,3 +56,7 @@ 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/src/errors.rs b/ic10emu/src/errors.rs index 7828fcf..a4e0af7 100644 --- a/ic10emu/src/errors.rs +++ b/ic10emu/src/errors.rs @@ -35,7 +35,7 @@ pub enum VMError { 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")] + #[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), @@ -64,7 +64,7 @@ pub enum VMError { #[error("object {0} is not logicable")] NotLogicable(ObjectID), #[error("network object {0} is not a network")] - NonNetworkNetwork(ObjectID) + NonNetworkNetwork(ObjectID), } #[derive(Error, Debug, Serialize, Deserialize)] @@ -81,8 +81,7 @@ pub enum TemplateError { #[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) - + MemorySize(usize, usize), } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -90,6 +89,7 @@ pub enum TemplateError { pub struct LineError { pub error: ICError, pub line: u32, + pub msg: String, } impl Display for LineError { @@ -154,6 +154,7 @@ impl ParseError { } #[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}")] @@ -162,8 +163,12 @@ pub enum ICError { LogicError(#[from] LogicError), #[error("{0}")] MemoryError(#[from] MemoryError), - #[error("duplicate label {0}")] - DuplicateLabel(String), + #[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}'")] @@ -176,8 +181,8 @@ pub enum ICError { 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("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}'")] @@ -240,11 +245,16 @@ pub enum ICError { 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), - #[error("IC with id {0} is not sloted into a circuit holder")] + #[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 sloted into a circuit holder with no logic interface?")] + #[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), @@ -254,8 +264,12 @@ pub enum ICError { NotLogicable(ObjectID), #[error("{0} is not a valid number of sleep seconds")] SleepDurationError(f64), - #[error("{0} can not be added to {1} ")] - SleepAddtionError(time::Duration, #[cfg_attr(feature = "tsify", tsify(type = "Date"))] time::OffsetDateTime), + #[error("{duration} can not be added to {time} ")] + SleepAdditionError { + duration: time::Duration, + #[cfg_attr(feature = "tsify", tsify(type = "Date"))] + time: time::OffsetDateTime, + }, } impl ICError { diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index fe87755..70ec601 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -29,7 +29,9 @@ pub enum ICState { Running, Yield, Sleep( - #[cfg_attr(feature = "tsify", tsify(type = "Date"))] time::OffsetDateTime, + #[cfg_attr(feature = "tsify", tsify(type = "string"))] + #[serde(with = "time::serde::rfc3339")] + time::OffsetDateTime, f64, ), Error(LineError), @@ -119,7 +121,13 @@ impl Program { 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); @@ -157,7 +165,13 @@ impl Program { 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); diff --git a/ic10emu/src/interpreter/instructions.rs b/ic10emu/src/interpreter/instructions.rs index df5cd38..6322378 100644 --- a/ic10emu/src/interpreter/instructions.rs +++ b/ic10emu/src/interpreter/instructions.rs @@ -2485,6 +2485,7 @@ impl LrInstruction for T { 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)?; @@ -2526,7 +2527,7 @@ impl LrInstruction for T { } LogicReagentMode::Required => { let reagent_interface = logicable - .as_reagent_interface() + .as_reagent_requirer() .ok_or(ICError::NotReagentReadable(*logicable.get_id()))?; reagent_interface .get_current_required() @@ -2537,13 +2538,26 @@ impl LrInstruction for T { } LogicReagentMode::Recipe => { let reagent_interface = logicable - .as_reagent_interface() + .as_reagent_requirer() .ok_or(ICError::NotReagentReadable(*logicable.get_id()))?; reagent_interface .get_current_recipe() - .iter() - .find(|(hash, _)| *hash as f64 == int) - .map(|(_, quantity)| *quantity) + .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) } }; @@ -2709,6 +2723,34 @@ impl RmapInstruction for T { d: &crate::vm::instructions::operands::InstOperand, reagent_hash: &crate::vm::instructions::operands::InstOperand, ) -> Result<(), crate::errors::ICError> { - todo!() + 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/network.rs b/ic10emu/src/network.rs index a7e98a0..6299452 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -27,6 +27,7 @@ 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 { @@ -146,7 +147,7 @@ impl Connection { }, Self::RoboticArmRail { role } => ConnectionInfo { typ: ConnectionType::RoboticArmRail, - role: *role + role: *role, }, } } @@ -181,6 +182,9 @@ pub struct CableNetwork { } 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 } @@ -190,15 +194,18 @@ impl Storage for CableNetwork { fn get_slot_mut(&mut self, _index: usize) -> Option<&mut crate::vm::object::Slot> { None } - fn get_slots(&self) -> Vec<&crate::vm::object::Slot> { + fn get_slots(&self) -> Vec<(usize, &crate::vm::object::Slot)> { vec![] } - fn get_slots_mut(&mut self) -> Vec<&mut crate::vm::object::Slot> { + fn get_slots_mut(&mut self) -> Vec<(usize, &mut crate::vm::object::Slot)> { vec![] } } 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 } @@ -282,6 +289,9 @@ impl Logicable for CableNetwork { } impl Network for CableNetwork { + fn debug_network(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "UNIMPLEMENTED") //TODO: Implement + } fn contains(&self, id: &ObjectID) -> bool { self.devices.contains(id) || self.power_only.contains(id) } diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index 073a05f..1096909 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -16,7 +16,7 @@ use stationeers_data::{ script::{LogicBatchMethod, LogicSlotType, LogicType}, ConnectionRole, }, - templates::ObjectTemplate, + templates::{ObjectTemplate, Reagent}, }; use std::{ cell::RefCell, @@ -47,6 +47,7 @@ pub struct VM { /// list of object id's touched on the last operation operation_modified: RefCell>, template_database: RefCell>>, + reagent_database: RefCell>>, } #[derive(Debug, Default)] @@ -93,6 +94,7 @@ impl VM { random: Rc::new(RefCell::new(crate::rand_mscorlib::Random::new())), operation_modified: RefCell::new(Vec::new()), 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())); @@ -109,7 +111,7 @@ impl VM { self.random.borrow_mut().next_f64() } - /// Take ownership of an iterable the produces (prefab hash, ObjectTemplate) pairs and build a prefab + /// Take ownership of an iterable that produces (prefab hash, ObjectTemplate) pairs and build a prefab /// database pub fn import_template_database( self: &Rc, @@ -120,6 +122,53 @@ impl VM { .replace(db.into_iter().collect()); } + pub fn import_reagent_database(self: &Rc, db: impl IntoIterator) { + 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 { + None + } + }) + }) + } + + 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 { + None + } + }) + }) + } + + 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 { @@ -140,7 +189,7 @@ impl VM { .unwrap_or_default() } - /// Add an number of object to the VM state using Frozen Object strusts. + /// Add an number of object to the VM state using Frozen Object structs. /// See also `add_objects_frozen` /// Returns the built objects' IDs pub fn add_objects_frozen( @@ -293,17 +342,20 @@ impl VM { 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(|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; + 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; + } + _ => (), + } + }); } } @@ -727,6 +779,7 @@ impl VM { self.operation_modified.borrow_mut().push(id); } + #[tracing::instrument] pub fn reset_programmable(self: &Rc, id: ObjectID) -> Result { let obj = self .objects @@ -734,12 +787,33 @@ impl VM { .get(&id) .cloned() .ok_or(VMError::UnknownId(id))?; - let mut obj_ref = obj.borrow_mut(); - let programmable = obj_ref - .as_mut_programmable() - .ok_or(VMError::NotProgrammable(id))?; - programmable.reset(); - Ok(true) + { + 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_object(self: &Rc, id: ObjectID) -> Option { @@ -918,7 +992,11 @@ impl VM { let connections = device.connection_list_mut(); if connection >= connections.len() { let conn_len = connections.len(); - return Err(ICError::ConnectionIndexOutOfRange(connection, conn_len).into()); + return Err(ICError::ConnectionIndexOutOfRange { + index: connection, + range: conn_len, + } + .into()); } // scope this borrow @@ -1570,7 +1648,7 @@ impl LogicBatchMethodWrapper { pub fn apply(&self, samples: &[f64]) -> f64 { match self.0 { LogicBatchMethod::Sum => samples.iter().sum(), - // Both c-charp and rust return NaN for 0.0/0.0 so we're good here + // 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 } diff --git a/ic10emu/src/vm/instructions/operands.rs b/ic10emu/src/vm/instructions/operands.rs index 8e2ca5d..642d0e6 100644 --- a/ic10emu/src/vm/instructions/operands.rs +++ b/ic10emu/src/vm/instructions/operands.rs @@ -26,6 +26,7 @@ pub struct RegisterSpec { 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 { @@ -50,6 +51,7 @@ pub enum Number { 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 { @@ -133,32 +135,36 @@ impl InstOperand { .get_str("value") .ok_or_else(|| ICError::NoGeneratedValue(lt.to_string()))? .parse::() - .map_err(|_| { - ICError::BadGeneratedValueParse(lt.to_string(), "u16".to_owned()) + .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(slt.to_string(), "u8".to_owned()) + .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(bm.to_string(), "u8".to_owned()) + .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(rm.to_string(), "u8".to_owned()) + .map_err(|_| ICError::BadGeneratedValueParse { + enum_name: rm.to_string(), + parse_type: "u8".to_owned(), })? as f64) } else { Err(ICError::TypeValueNotKnown) diff --git a/ic10emu/src/vm/object.rs b/ic10emu/src/vm/object.rs index 87ef27a..46a0341 100644 --- a/ic10emu/src/vm/object.rs +++ b/ic10emu/src/vm/object.rs @@ -122,27 +122,30 @@ pub struct SlotOccupantInfo { 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 typ: Class, + 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, typ: Class) -> Self { + pub fn new(parent: ObjectID, index: usize, name: String, class: Class) -> Self { Slot { parent, index, name, - typ, - readable_logic: vec![ + class, + readable_logic: + vec![ LogicSlotType::Class, LogicSlotType::Damage, LogicSlotType::MaxQuantity, @@ -155,6 +158,7 @@ impl Slot { ], writeable_logic: vec![], occupant: None, + proxy: false, } } } diff --git a/ic10emu/src/vm/object/generic/macros.rs b/ic10emu/src/vm/object/generic/macros.rs index dfdb66a..7424be7 100644 --- a/ic10emu/src/vm/object/generic/macros.rs +++ b/ic10emu/src/vm/object/generic/macros.rs @@ -12,7 +12,7 @@ macro_rules! GWThermal { fn thermal_info(&self) -> &ThermalInfo { self.thermal_info .as_ref() - .expect("GWTherml::thermal_info called on non thermal") + .expect("GWThermal::thermal_info called on non thermal") } } }; @@ -64,10 +64,10 @@ macro_rules! GWStorage { } ) => { impl GWStorage for $struct { - fn slots(&self) -> &Vec { + fn slots(&self) -> &BTreeMap { &self.slots } - fn slots_mut(&mut self) -> &mut Vec { + fn slots_mut(&mut self) -> &mut BTreeMap { &mut self.slots } } @@ -156,10 +156,10 @@ macro_rules! GWDevice { fn pins_mut(&mut self) -> Option<&mut [Option]> { self.pins.as_mut().map(|pins| pins.as_mut_slice()) } - fn reagents(&self) -> Option<&BTreeMap> { + fn reagents(&self) -> Option<&BTreeMap> { self.reagents.as_ref() } - fn reagents_mut(&mut self) -> &mut Option> { + fn reagents_mut(&mut self) -> &mut Option> { &mut self.reagents } } @@ -228,11 +228,9 @@ macro_rules! GWCircuitHolderItem { } } }; - } pub(crate) use GWCircuitHolderItem; - macro_rules! GWCircuitHolderSuit { ( $( #[$attr:meta] )* @@ -250,11 +248,9 @@ macro_rules! GWCircuitHolderSuit { } } }; - } pub(crate) use GWCircuitHolderSuit; - macro_rules! GWCircuitHolderDevice { ( $( #[$attr:meta] )* @@ -272,6 +268,61 @@ macro_rules! GWCircuitHolderDevice { } } }; - } 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 index b6e3571..5bf6cec 100644 --- a/ic10emu/src/vm/object/generic/structs.rs +++ b/ic10emu/src/vm/object/generic/structs.rs @@ -54,7 +54,7 @@ pub struct GenericStorage { pub thermal_info: Option, pub internal_atmo_info: Option, pub small_grid: bool, - pub slots: Vec, + pub slots: BTreeMap, } #[derive( @@ -79,7 +79,7 @@ pub struct GenericLogicable { pub thermal_info: Option, pub internal_atmo_info: Option, pub small_grid: bool, - pub slots: Vec, + pub slots: BTreeMap, pub fields: BTreeMap, pub modes: Option>, } @@ -107,13 +107,13 @@ pub struct GenericLogicableDevice { pub thermal_info: Option, pub internal_atmo_info: Option, pub small_grid: bool, - pub slots: Vec, + pub slots: BTreeMap, pub fields: BTreeMap, pub modes: Option>, pub device_info: DeviceInfo, pub connections: Vec, pub pins: Option>>, - pub reagents: Option>, + pub reagents: Option>, } #[derive( @@ -140,13 +140,13 @@ pub struct GenericCircuitHolder { pub thermal_info: Option, pub internal_atmo_info: Option, pub small_grid: bool, - pub slots: Vec, + pub slots: BTreeMap, pub fields: BTreeMap, pub modes: Option>, pub device_info: DeviceInfo, pub connections: Vec, pub pins: Option>>, - pub reagents: Option>, + pub reagents: Option>, pub error: i32, } @@ -154,12 +154,12 @@ pub struct GenericCircuitHolder { ObjectInterface!, GWThermal!, GWInternalAtmo!, GWStructure!, GWStorage!, GWLogicable!, - GWDevice! + GWDevice!, GWReagentConsumer!, )] #[custom(implements(Object { Thermal[GWThermal::is_thermal], InternalAtmosphere[GWInternalAtmo::is_internal_atmo], - Structure, Storage, Logicable, Device + Structure, Storage, Logicable, Device, ReagentConsumer }))] pub struct GenericLogicableDeviceConsumer { #[custom(object_id)] @@ -173,13 +173,13 @@ pub struct GenericLogicableDeviceConsumer { pub thermal_info: Option, pub internal_atmo_info: Option, pub small_grid: bool, - pub slots: Vec, + pub slots: BTreeMap, pub fields: BTreeMap, pub modes: Option>, pub device_info: DeviceInfo, pub connections: Vec, pub pins: Option>>, - pub reagents: Option>, + pub reagents: Option>, pub consumer_info: ConsumerInfo, } @@ -207,13 +207,13 @@ pub struct GenericLogicableDeviceMemoryReadable { pub thermal_info: Option, pub internal_atmo_info: Option, pub small_grid: bool, - pub slots: Vec, + pub slots: BTreeMap, pub fields: BTreeMap, pub modes: Option>, pub device_info: DeviceInfo, pub connections: Vec, pub pins: Option>>, - pub reagents: Option>, + pub reagents: Option>, pub memory: Vec, } @@ -221,12 +221,15 @@ pub struct GenericLogicableDeviceMemoryReadable { ObjectInterface!, GWThermal!, GWInternalAtmo!, GWStructure!, GWStorage!, GWLogicable!, - GWDevice!, GWMemoryReadable!, GWMemoryWritable! + GWDevice!, GWMemoryReadable!, GWMemoryWritable!, + GWReagentConsumer!, GWReagentRequirer!, GWFabricator!, )] #[custom(implements(Object { Thermal[GWThermal::is_thermal], InternalAtmosphere[GWInternalAtmo::is_internal_atmo], - Structure, Storage, Logicable, Device, MemoryReadable + Structure, Storage, Logicable, Device, MemoryReadable, + ReagentConsumer, ReagentRequirer, + Fabricator[GWFabricator::is_fabricator] }))] pub struct GenericLogicableDeviceConsumerMemoryReadable { #[custom(object_id)] @@ -240,15 +243,17 @@ pub struct GenericLogicableDeviceConsumerMemoryReadable { pub thermal_info: Option, pub internal_atmo_info: Option, pub small_grid: bool, - pub slots: Vec, + pub slots: BTreeMap, pub fields: BTreeMap, pub modes: Option>, pub device_info: DeviceInfo, pub connections: Vec, pub pins: Option>>, - pub reagents: 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, } @@ -275,13 +280,13 @@ pub struct GenericLogicableDeviceMemoryReadWriteable { pub thermal_info: Option, pub internal_atmo_info: Option, pub small_grid: bool, - pub slots: Vec, + pub slots: BTreeMap, pub fields: BTreeMap, pub modes: Option>, pub device_info: DeviceInfo, pub connections: Vec, pub pins: Option>>, - pub reagents: Option>, + pub reagents: Option>, pub memory: Vec, } @@ -289,12 +294,15 @@ pub struct GenericLogicableDeviceMemoryReadWriteable { ObjectInterface!, GWThermal!, GWInternalAtmo!, GWStructure!, GWStorage!, GWLogicable!, - GWDevice!, GWMemoryReadable!, GWMemoryWritable! + GWDevice!, GWMemoryReadable!, GWMemoryWritable!, + GWReagentConsumer!, GWReagentRequirer!, GWFabricator!, )] #[custom(implements(Object { Thermal[GWThermal::is_thermal], InternalAtmosphere[GWInternalAtmo::is_internal_atmo], - Structure, Storage, Logicable, Device, MemoryReadable, MemoryWritable + Structure, Storage, Logicable, Device, MemoryReadable, MemoryWritable, + ReagentConsumer, ReagentRequirer, + Fabricator[GWFabricator::is_fabricator] }))] pub struct GenericLogicableDeviceConsumerMemoryReadWriteable { #[custom(object_id)] @@ -308,15 +316,17 @@ pub struct GenericLogicableDeviceConsumerMemoryReadWriteable { pub thermal_info: Option, pub internal_atmo_info: Option, pub small_grid: bool, - pub slots: Vec, + pub slots: BTreeMap, pub fields: BTreeMap, pub modes: Option>, pub device_info: DeviceInfo, pub connections: Vec, pub pins: Option>>, - pub reagents: 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, } @@ -362,14 +372,18 @@ pub struct GenericItemStorage { pub item_info: ItemInfo, pub parent_slot: Option, pub damage: Option, - pub slots: Vec, + pub slots: BTreeMap, } -#[derive(ObjectInterface!, GWThermal!, GWInternalAtmo!, GWItem!, GWStorage! )] +#[derive( + ObjectInterface!, GWThermal!, + GWInternalAtmo!, GWItem!, GWStorage!, + GWReagentConsumer! + )] #[custom(implements(Object { Thermal[GWThermal::is_thermal], InternalAtmosphere[GWInternalAtmo::is_internal_atmo], - Item, Storage + Item, Storage, ReagentConsumer }))] pub struct GenericItemConsumer { #[custom(object_id)] @@ -385,7 +399,7 @@ pub struct GenericItemConsumer { pub item_info: ItemInfo, pub parent_slot: Option, pub damage: Option, - pub slots: Vec, + pub slots: BTreeMap, pub consumer_info: ConsumerInfo, } @@ -413,7 +427,7 @@ pub struct GenericItemLogicable { pub item_info: ItemInfo, pub parent_slot: Option, pub damage: Option, - pub slots: Vec, + pub slots: BTreeMap, pub fields: BTreeMap, pub modes: Option>, } @@ -443,7 +457,7 @@ pub struct GenericItemLogicableMemoryReadable { pub item_info: ItemInfo, pub parent_slot: Option, pub damage: Option, - pub slots: Vec, + pub slots: BTreeMap, pub fields: BTreeMap, pub modes: Option>, pub memory: Vec, @@ -474,7 +488,7 @@ pub struct GenericItemLogicableMemoryReadWriteable { pub item_info: ItemInfo, pub parent_slot: Option, pub damage: Option, - pub slots: Vec, + pub slots: BTreeMap, pub fields: BTreeMap, pub modes: Option>, pub memory: Vec, @@ -506,7 +520,7 @@ pub struct GenericItemCircuitHolder { pub item_info: ItemInfo, pub parent_slot: Option, pub damage: Option, - pub slots: Vec, + pub slots: BTreeMap, pub fields: BTreeMap, pub modes: Option>, pub error: i32, @@ -537,7 +551,7 @@ pub struct GenericItemSuitLogic { pub item_info: ItemInfo, pub parent_slot: Option, pub damage: Option, - pub slots: Vec, + pub slots: BTreeMap, pub suit_info: SuitInfo, pub fields: BTreeMap, pub modes: Option>, @@ -570,7 +584,7 @@ pub struct GenericItemSuitCircuitHolder { pub item_info: ItemInfo, pub parent_slot: Option, pub damage: Option, - pub slots: Vec, + pub slots: BTreeMap, pub suit_info: SuitInfo, pub fields: BTreeMap, pub modes: Option>, @@ -602,6 +616,6 @@ pub struct GenericItemSuit { pub item_info: ItemInfo, pub parent_slot: Option, pub damage: Option, - pub slots: Vec, + 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 index 7f170a6..0bd8aff 100644 --- a/ic10emu/src/vm/object/generic/traits.rs +++ b/ic10emu/src/vm/object/generic/traits.rs @@ -7,14 +7,18 @@ use crate::{ }, }; +use itertools::Itertools; use stationeers_data::{ enums::{ basic::{Class, GasType, SortingClass}, script::{LogicSlotType, LogicType}, }, - templates::{DeviceInfo, InternalAtmoInfo, ItemInfo, SuitInfo, ThermalInfo}, + templates::{ + ConsumerInfo, DeviceInfo, FabricatorInfo, InternalAtmoInfo, ItemInfo, RecipeOrder, + SuitInfo, ThermalInfo, + }, }; -use std::{collections::BTreeMap, usize}; +use std::collections::BTreeMap; use strum::IntoEnumIterator; pub trait GWThermal { @@ -29,6 +33,9 @@ impl Thermal for T { 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 { @@ -40,6 +47,9 @@ 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 { @@ -50,11 +60,14 @@ 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) -> &Vec; - fn slots_mut(&mut self) -> &mut Vec; + fn slots(&self) -> &BTreeMap; + fn slots_mut(&mut self) -> &mut BTreeMap; } impl Storage for T { @@ -62,16 +75,25 @@ impl Storage for T { self.slots().len() } fn get_slot(&self, index: usize) -> Option<&Slot> { - self.slots().get(index) + self.slots().get(&(index as u32)) } fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot> { - self.slots_mut().get_mut(index) + self.slots_mut().get_mut(&(index as u32)) } - fn get_slots(&self) -> Vec<&Slot> { - self.slots().iter().collect() + 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<&mut Slot> { - self.slots_mut().iter_mut().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()) } } @@ -82,6 +104,14 @@ pub trait GWLogicable: Storage { } 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 } @@ -213,7 +243,7 @@ impl Logicable for T { } Class => { if slot.occupant.is_some() { - Ok(slot.typ as i32 as f64) + Ok(slot.class as i32 as f64) } else { Ok(0.0) } @@ -349,6 +379,14 @@ pub trait GWMemoryReadable { } 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() } @@ -371,6 +409,14 @@ pub trait GWMemoryWritable: MemoryReadable { } 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())) @@ -392,11 +438,20 @@ pub trait GWDevice: GWLogicable + Logicable { 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>; + 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 @@ -499,7 +554,7 @@ impl Device for T { fn has_atmosphere(&self) -> bool { self.device_info().has_atmosphere } - fn get_reagents(&self) -> Vec<(i32, f64)> { + fn get_reagents(&self) -> Vec<(u8, f64)> { self.reagents() .map(|reagents| { reagents @@ -509,11 +564,11 @@ impl Device for T { }) .unwrap_or_default() } - fn set_reagents(&mut self, reagents: &[(i32, f64)]) { + 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: &[(i32, f64)]) { + 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))); @@ -532,6 +587,15 @@ pub trait GWItem { } 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 } @@ -572,6 +636,9 @@ pub trait GWSuit: Storage { } 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 } @@ -654,7 +721,7 @@ pub trait GWCircuitHolderWrapper: connection: Option, ) -> Option; fn get_ic_gw(&self) -> Option; - fn hault_and_catch_fire_gw(&mut self); + fn halt_and_catch_fire_gw(&mut self); } impl CircuitHolder for T @@ -662,6 +729,9 @@ 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() } @@ -702,7 +772,7 @@ where self.get_ic_gw() } fn halt_and_catch_fire(&mut self) { - self.hault_and_catch_fire_gw() + self.halt_and_catch_fire_gw() } } @@ -822,15 +892,15 @@ where fn get_ic_gw(&self) -> Option { self.get_slots() .into_iter() - .find(|slot| slot.typ == Class::ProgrammableChip) - .and_then(|slot| { + .find(|(_, slot)| slot.class == Class::ProgrammableChip) + .and_then(|(_, slot)| { slot.occupant .as_ref() .and_then(|info| self.get_vm().get_object(info.id)) }) } - fn hault_and_catch_fire_gw(&mut self) { + fn halt_and_catch_fire_gw(&mut self) { // TODO: do something here?? } } @@ -937,7 +1007,7 @@ where let contained_ids: Vec = self .get_slots() .into_iter() - .filter_map(|slot| slot.occupant.as_ref().map(|info| info.id)) + .filter_map(|(_, slot)| slot.occupant.as_ref().map(|info| info.id)) .collect(); if contained_ids.contains(&device) { self.get_vm() @@ -959,7 +1029,7 @@ where let contained_ids: Vec = self .get_slots() .into_iter() - .filter_map(|slot| slot.occupant.as_ref().map(|info| info.id)) + .filter_map(|(_, slot)| slot.occupant.as_ref().map(|info| info.id)) .collect(); if contained_ids.contains(&device) { self.get_vm() @@ -973,15 +1043,15 @@ where fn get_ic_gw(&self) -> Option { self.get_slots() .into_iter() - .find(|slot| slot.typ == Class::ProgrammableChip) - .and_then(|slot| { + .find(|(_, slot)| slot.class == Class::ProgrammableChip) + .and_then(|(_, slot)| { slot.occupant .as_ref() .and_then(|info| self.get_vm().get_object(info.id)) }) } - fn hault_and_catch_fire_gw(&mut self) { + fn halt_and_catch_fire_gw(&mut self) { // TODO: do something here?? } } @@ -1112,7 +1182,7 @@ where let contained_ids: Vec = self .get_slots() .into_iter() - .filter_map(|slot| slot.occupant.as_ref().map(|info| info.id)) + .filter_map(|(_, slot)| slot.occupant.as_ref().map(|info| info.id)) .collect(); if contained_ids.contains(&device) { self.get_vm() @@ -1134,7 +1204,7 @@ where let contained_ids: Vec = self .get_slots() .into_iter() - .filter_map(|slot| slot.occupant.as_ref().map(|info| info.id)) + .filter_map(|(_, slot)| slot.occupant.as_ref().map(|info| info.id)) .collect(); if contained_ids.contains(&device) { self.get_vm() @@ -1148,15 +1218,130 @@ where fn get_ic_gw(&self) -> Option { self.get_slots() .into_iter() - .find(|slot| slot.typ == Class::ProgrammableChip) - .and_then(|slot| { + .find(|(_, slot)| slot.class == Class::ProgrammableChip) + .and_then(|(_, slot)| { slot.occupant .as_ref() .and_then(|info| self.get_vm().get_object(info.id)) }) } - fn hault_and_catch_fire_gw(&mut self) { + 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 index d66a0b4..e75e05a 100644 --- a/ic10emu/src/vm/object/humans.rs +++ b/ic10emu/src/vm/object/humans.rs @@ -1,9 +1,7 @@ use std::collections::BTreeMap; use macro_rules_attribute::derive; -use stationeers_data::{ - enums::{basic::Class, Species}, -}; +use stationeers_data::enums::{basic::Class, Species}; #[cfg(feature = "tsify")] use tsify::Tsify; #[cfg(feature = "tsify")] @@ -193,32 +191,43 @@ impl Thermal for HumanPlayer { 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 get_slots(&self) -> Vec<&Slot> { + 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![ - &self.left_hand_slot, - &self.right_hand_slot, - &self.helmet_slot, - &self.suit_slot, - &self.backpack_slot, - &self.uniform_slot, - &self.toolbelt_slot, - &self.glasses_slot, + (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<&mut Slot> { + fn get_slots_mut(&mut self) -> Vec<(usize, &mut Slot)> { vec![ - &mut self.left_hand_slot, - &mut self.right_hand_slot, - &mut self.helmet_slot, - &mut self.suit_slot, - &mut self.backpack_slot, - &mut self.uniform_slot, - &mut self.toolbelt_slot, - &mut self.glasses_slot, + (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), ] } @@ -255,6 +264,20 @@ impl Storage for HumanPlayer { } 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 } diff --git a/ic10emu/src/vm/object/macros.rs b/ic10emu/src/vm/object/macros.rs index 830409f..83ed733 100644 --- a/ic10emu/src/vm/object/macros.rs +++ b/ic10emu/src/vm/object/macros.rs @@ -55,6 +55,15 @@ macro_rules! object_trait { } } + 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), @@ -524,6 +533,20 @@ macro_rules! tag_object_traits { $(#[$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!{ diff --git a/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs b/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs index 0072712..5ecb540 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs @@ -14,7 +14,7 @@ use stationeers_data::enums::{ script::{LogicSlotType, LogicType}, ConnectionRole, }; -use std::rc::Rc; +use std::{collections::BTreeMap, rc::Rc}; use strum::EnumProperty; #[derive(ObjectInterface!)] @@ -58,7 +58,7 @@ impl StructureCircuitHousing { parent: id, index: 0, name: "Programmable Chip".to_string(), - typ: Class::ProgrammableChip, + class: Class::ProgrammableChip, readable_logic: vec![ LogicSlotType::Class, LogicSlotType::Damage, @@ -73,6 +73,7 @@ impl StructureCircuitHousing { ], writeable_logic: vec![], occupant: None, + proxy: false, }, pins: [None, None, None, None, None, None], connections: [ @@ -95,9 +96,15 @@ 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 } @@ -115,15 +122,31 @@ impl Storage for StructureCircuitHousing { Some(&mut self.slot) } } - fn get_slots(&self) -> Vec<&Slot> { - vec![&self.slot] + fn get_slots(&self) -> Vec<(usize, &Slot)> { + vec![(0, &self.slot)] } - fn get_slots_mut(&mut self) -> Vec<&mut Slot> { - vec![&mut 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 } @@ -253,6 +276,13 @@ impl Logicable for StructureCircuitHousing { } 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 } @@ -277,13 +307,13 @@ impl Device for StructureCircuitHousing { fn has_on_off_state(&self) -> bool { true } - fn get_reagents(&self) -> Vec<(i32, f64)> { + fn get_reagents(&self) -> Vec<(u8, f64)> { vec![] } - fn set_reagents(&mut self, _reagents: &[(i32, f64)]) { + fn set_reagents(&mut self, _reagents: &[(u8, f64)]) { // nope } - fn add_reagents(&mut self, _reagents: &[(i32, f64)]) { + fn add_reagents(&mut self, _reagents: &[(u8, f64)]) { // nope } fn connection_list(&self) -> &[crate::network::Connection] { @@ -313,6 +343,9 @@ impl Device for StructureCircuitHousing { } 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 } diff --git a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs index c4f0947..da2eb47 100644 --- a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs +++ b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs @@ -1,5 +1,5 @@ use crate::{ - errors::ICError, + errors::{ICError, LineError}, interpreter::{instructions::IC10Marker, ICState, Program}, vm::{ instructions::{operands::Operand, Instruction}, @@ -22,7 +22,7 @@ use std::{collections::BTreeMap, rc::Rc}; static RETURN_ADDRESS_INDEX: usize = 17; static STACK_POINTER_INDEX: usize = 16; -#[derive(ObjectInterface!)] +#[derive(ObjectInterface!, Debug)] #[custom(implements(Object { Item, Storage, Logicable, MemoryReadable, MemoryWritable, @@ -57,6 +57,9 @@ pub struct ItemIntegratedCircuit10 { } 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 } @@ -93,6 +96,9 @@ impl Item for ItemIntegratedCircuit10 { } 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 } @@ -102,15 +108,18 @@ impl Storage for ItemIntegratedCircuit10 { fn get_slot_mut(&mut self, _index: usize) -> Option<&mut Slot> { None } - fn get_slots(&self) -> Vec<&Slot> { + fn get_slots(&self) -> Vec<(usize, &Slot)> { vec![] } - fn get_slots_mut(&mut self) -> Vec<&mut Slot> { + 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 } @@ -170,7 +179,7 @@ impl Logicable for ItemIntegratedCircuit10 { _ => Err(LogicError::CantWrite(lt)), }) } - fn can_slot_logic_read(&self, _slt: LogicSlotType, _indexx: f64) -> bool { + fn can_slot_logic_read(&self, _slt: LogicSlotType, _index: f64) -> bool { false } fn get_slot_logic(&self, _slt: LogicSlotType, index: f64) -> Result { @@ -185,6 +194,9 @@ impl Logicable for ItemIntegratedCircuit10 { } 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() } @@ -203,6 +215,9 @@ impl MemoryReadable for ItemIntegratedCircuit10 { } 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())) @@ -219,6 +234,9 @@ impl MemoryWritable for ItemIntegratedCircuit10 { } 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(); @@ -240,6 +258,9 @@ impl SourceCode for ItemIntegratedCircuit10 { } 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)) @@ -388,31 +409,42 @@ impl IntegratedCircuit for ItemIntegratedCircuit10 { 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) { - if sleep_till - <= time::OffsetDateTime::now_local() - .unwrap_or_else(|_| time::OffsetDateTime::now_utc()) - { + 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::SleepAddtionError(duration, *then)); + 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(()); } @@ -423,7 +455,13 @@ impl Programmable for ItemIntegratedCircuit10 { let instruction = line.instruction; let result = instruction.execute(self, operands); - let was_error = if let Err(_err) = result { + 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() @@ -437,7 +475,7 @@ impl Programmable for ItemIntegratedCircuit10 { if !was_error || advance_ip_on_err { self.ip = self.next_ip; - if self.ip >= self.program.len() { + if self.ip >= self.program.len() && !matches!(&self.state, ICState::Error(_)) { self.state = ICState::Ended; } } diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs index 5cb1307..602a210 100644 --- a/ic10emu/src/vm/object/templates.rs +++ b/ic10emu/src/vm/object/templates.rs @@ -27,6 +27,7 @@ use crate::{ use serde_derive::{Deserialize, Serialize}; use stationeers_data::{ enums::{ + basic::Class, prefabs::StationpediaPrefab, script::{LogicSlotType, LogicType}, }, @@ -64,6 +65,7 @@ impl std::fmt::Display for Prefab { } } +#[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 { @@ -77,8 +79,7 @@ pub struct ObjectInfo { pub damage: Option, pub device_pins: Option>, pub connections: Option>, - pub reagents: Option>, - pub memory: Option>, + pub reagents: Option>, pub memory: Option>, pub logic_values: Option>, pub slot_logic_values: Option>>, pub entity: Option, @@ -201,7 +202,6 @@ impl ObjectInfo { self.slots.replace( slots .into_iter() - .enumerate() .filter_map(|(index, slot)| { slot.occupant .as_ref() @@ -245,7 +245,7 @@ impl ObjectInfo { .collect() }); } - let reagents: BTreeMap = device.get_reagents().iter().copied().collect(); + let reagents: BTreeMap = device.get_reagents().iter().copied().collect(); if reagents.is_empty() { self.reagents = None; } else { @@ -393,6 +393,7 @@ pub struct FrozenObjectFull { 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 { @@ -480,53 +481,66 @@ impl FrozenObject { .unwrap_or_default() } - fn build_slots( + fn build_slots<'a>( &self, id: ObjectID, - slots_info: &[SlotInfo], + slots_info: impl IntoIterator, logic_info: Option<&LogicInfo>, - ) -> Vec { + ) -> BTreeMap { slots_info - .iter() - .enumerate() - .map(|(index, info)| Slot { - parent: id, - index, - name: info.name.clone(), - typ: info.typ, - readable_logic: logic_info - .and_then(|info| { - info.logic_slot_types.get(&(index as u32)).map(|s_info| { - s_info - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Read | MemoryAccess::ReadWrite => Some(key), - _ => None, + .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::>() }) - .copied() - .collect::>() - }) - }) - .unwrap_or_default(), - writeable_logic: logic_info - .and_then(|info| { - info.logic_slot_types.get(&(index as u32)).map(|s_info| { - s_info - .iter() - .filter_map(|(key, access)| match access { - MemoryAccess::Write | MemoryAccess::ReadWrite => Some(key), - _ => None, + }) + .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::>() }) - .copied() - .collect::>() - }) - }) - .unwrap_or_default(), - occupant: self - .obj_info - .slots - .as_ref() - .and_then(|slots| slots.get(&(index as u32)).cloned()), + }) + .unwrap_or_default(), + occupant: self + .obj_info + .slots + .as_ref() + .and_then(|slots| slots.get(index).cloned()), + }, + ) }) .collect() } @@ -748,6 +762,7 @@ impl FrozenObject { 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), }, )) @@ -771,6 +786,7 @@ impl FrozenObject { 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 { @@ -998,7 +1014,8 @@ fn try_template_from_interfaces( plant: None, suit: None, chargeable: None, - reagent_interface: None, + reagent_requirer: None, + reagent_consumer: None, fabricator: None, internal_atmosphere, thermal, @@ -1033,7 +1050,8 @@ fn try_template_from_interfaces( plant: None, suit: None, chargeable: None, - reagent_interface: None, + reagent_requirer: None, + reagent_consumer: None, fabricator: None, internal_atmosphere, thermal, @@ -1065,7 +1083,8 @@ fn try_template_from_interfaces( plant: None, suit: None, chargeable: None, - reagent_interface: None, + reagent_requirer: None, + reagent_consumer: None, fabricator: None, internal_atmosphere, thermal, @@ -1098,7 +1117,8 @@ fn try_template_from_interfaces( plant: None, suit: None, chargeable: None, - reagent_interface: None, + reagent_requirer: None, + reagent_consumer: None, fabricator: None, internal_atmosphere, thermal, @@ -1134,7 +1154,8 @@ fn try_template_from_interfaces( plant: None, suit: None, chargeable: None, - reagent_interface: None, + reagent_requirer: None, + reagent_consumer: None, fabricator: None, internal_atmosphere, thermal, @@ -1173,7 +1194,8 @@ fn try_template_from_interfaces( plant: None, suit: None, chargeable: None, - reagent_interface: None, + reagent_requirer: None, + reagent_consumer: None, fabricator: None, internal_atmosphere, thermal, @@ -1204,7 +1226,8 @@ fn try_template_from_interfaces( plant: None, suit: None, chargeable: None, - reagent_interface: None, + reagent_requirer: None, + reagent_consumer: None, fabricator: None, internal_atmosphere, thermal, @@ -1236,7 +1259,8 @@ fn try_template_from_interfaces( plant: None, suit: None, chargeable: None, - reagent_interface: None, + reagent_requirer: None, + reagent_consumer: None, fabricator: None, internal_atmosphere, thermal, @@ -1269,7 +1293,8 @@ fn try_template_from_interfaces( plant: None, suit: None, chargeable: None, - reagent_interface: None, + reagent_requirer: None, + reagent_consumer: None, fabricator: None, internal_atmosphere, thermal, @@ -1303,7 +1328,8 @@ fn try_template_from_interfaces( plant: None, suit: None, chargeable: None, - reagent_interface: None, + reagent_requirer: None, + reagent_consumer: None, fabricator: None, internal_atmosphere: None, thermal: Some(_), @@ -1312,13 +1338,16 @@ fn try_template_from_interfaces( prefab: PrefabInfo { prefab_name: "Character".to_string(), prefab_hash: 294335127, - desc: "Charater".to_string(), - name: "Charater".to_string(), + desc: "Character".to_string(), + name: "Character".to_string(), }, species: human.get_species(), slots: storage.into(), })), - _ => Err(TemplateError::NonConformingObject(obj.get_id())), + _ => { + tracing::error!("Object interface has a non conforming pattern: {:?}", obj); + Err(TemplateError::NonConformingObject(obj.get_id())) + } } } @@ -1341,6 +1370,7 @@ impl From<&VMObject> for PrefabInfo { } } } + impl From> for LogicInfo { fn from(logic: LogicableRef) -> Self { // Logicable: Storage -> !None @@ -1352,10 +1382,9 @@ impl From> for LogicInfo { logic_slot_types: storage .get_slots() .iter() - .enumerate() .map(|(index, slot)| { ( - index as u32, + *index as u32, LogicSlotType::iter() .filter_map(|slt| { let readable = slot.readable_logic.contains(&slt); @@ -1418,7 +1447,7 @@ impl From> for ItemInfo { impl From> for DeviceInfo { fn from(device: DeviceRef) -> Self { - let _reagents: BTreeMap = device.get_reagents().iter().copied().collect(); + let _reagents: BTreeMap = device.get_reagents().iter().copied().collect(); DeviceInfo { connection_list: device .connection_list() @@ -1478,14 +1507,27 @@ impl From> for ThermalInfo { } } -impl From> for Vec { +impl From> for BTreeMap { fn from(storage: StorageRef<'_>) -> Self { storage .get_slots() .iter() - .map(|slot| SlotInfo { - name: slot.name.clone(), - typ: slot.typ, + .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 index ed7e003..9e41ee5 100644 --- a/ic10emu/src/vm/object/traits.rs +++ b/ic10emu/src/vm/object/traits.rs @@ -13,10 +13,13 @@ use crate::{ }, }, }; -use stationeers_data::enums::{ - basic::{Class, GasType, SortingClass}, - script::{LogicSlotType, LogicType}, - Species, +use stationeers_data::{ + enums::{ + basic::{Class, GasType, SortingClass}, + script::{LogicSlotType, LogicType}, + Species, + }, + templates::RecipeOrder, }; use std::{collections::BTreeMap, fmt::Debug}; #[cfg(feature = "tsify")] @@ -75,9 +78,9 @@ tag_object_traits! { /// 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<&Slot>; + 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<&mut Slot>; + fn get_slots_mut(&mut self) -> Vec<(usize, &mut Slot)>; } pub trait MemoryReadable { @@ -394,21 +397,29 @@ tag_object_traits! { /// Does the device store reagents fn has_reagents(&self) -> bool; /// Return vector of (reagent_hash, quantity) pairs - fn get_reagents(&self) -> Vec<(i32, f64)>; + fn get_reagents(&self) -> Vec<(u8, f64)>; /// Overwrite present reagents - fn set_reagents(&mut self, reagents: &[(i32, f64)]); + fn set_reagents(&mut self, reagents: &[(u8, f64)]); /// Adds the reagents to contents - fn add_reagents(&mut self, reagents: &[(i32, f64)]); + fn add_reagents(&mut self, reagents: &[(u8, f64)]); } - pub trait ReagentInterface: Device { - /// Reagents required by current recipe - fn get_current_recipe(&self) -> Vec<(i32, 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<(i32, f64)>; + 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: ReagentInterface {} + pub trait Fabricator: ReagentRequirer { + } pub trait WirelessTransmit: Logicable {} @@ -493,14 +504,18 @@ impl Debug for dyn Object { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!( f, - "Object: (ID = {:?}, Type = {})", + "Object{{id: {:?}, type: {}, interfaces: {:?}}}", self.get_id(), - self.type_name() + 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 @@ -546,4 +561,3 @@ impl SourceCode for T { .unwrap_or_default() } } - diff --git a/ic10emu_wasm/Cargo.toml b/ic10emu_wasm/Cargo.toml index e21606b..7b6934d 100644 --- a/ic10emu_wasm/Cargo.toml +++ b/ic10emu_wasm/Cargo.toml @@ -26,6 +26,7 @@ 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" [features] default = ["console_error_panic_hook"] diff --git a/ic10emu_wasm/src/lib.rs b/ic10emu_wasm/src/lib.rs index 86cd082..60bd7f5 100644 --- a/ic10emu_wasm/src/lib.rs +++ b/ic10emu_wasm/src/lib.rs @@ -478,6 +478,7 @@ 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!"); vm diff --git a/stationeers_data/Cargo.toml b/stationeers_data/Cargo.toml index 4e72fcd..b963261 100644 --- a/stationeers_data/Cargo.toml +++ b/stationeers_data/Cargo.toml @@ -6,11 +6,13 @@ 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 +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" diff --git a/stationeers_data/src/database/prefab_map.rs b/stationeers_data/src/database/prefab_map.rs index 67a6065..ced64a7 100644 --- a/stationeers_data/src/database/prefab_map.rs +++ b/stationeers_data/src/database/prefab_map.rs @@ -318,7 +318,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "Output".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Output".into(), class : Class::None, + index : 0u32 }) + ] .into_iter() .collect(), consumer_info: ConsumerInfo { @@ -400,7 +403,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "Output".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Output".into(), class : Class::None, + index : 0u32 }) + ] .into_iter() .collect(), consumer_info: ConsumerInfo { @@ -440,7 +446,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "Export".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Export".into(), class : Class::None, + index : 0u32 }) + ] .into_iter() .collect(), consumer_info: ConsumerInfo { @@ -479,7 +488,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "Output".into(), typ : Class::Bottle }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Output".into(), class : Class::Bottle, + index : 0u32 }) + ] .into_iter() .collect(), consumer_info: ConsumerInfo { @@ -516,7 +528,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "Input".into(), typ : Class::Tool }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Input".into(), class : Class::Tool, + index : 0u32 }) + ] .into_iter() .collect(), } @@ -544,8 +559,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Source Plant".into(), typ : Class::Plant }, SlotInfo { - name : "Target Plant".into(), typ : Class::Plant } + (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(), @@ -573,7 +589,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "Plant".into(), typ : Class::Plant }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Plant".into(), class : Class::Plant, + index : 0u32 }) + ] .into_iter() .collect(), } @@ -601,8 +620,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Input".into(), typ : Class::None }, SlotInfo { name : - "Output".into(), typ : Class::None } + (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(), @@ -642,16 +662,21 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : - "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), - typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : - Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, - SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : - "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), - typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : - Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, - SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : - "Plant".into(), typ : Class::Plant } + (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(), @@ -678,7 +703,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "".into(), typ : Class::Tool }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : + Class::Tool, index : 0u32 }) + ] .into_iter() .collect(), } @@ -739,10 +767,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), - ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" - .into(), "Medium".into()), ("5".into(), "High".into()), ("6" - .into(), "Full".into()) + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) ] .into_iter() .collect(), @@ -786,10 +813,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), - ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" - .into(), "Medium".into()), ("5".into(), "High".into()), ("6" - .into(), "Full".into()) + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) ] .into_iter() .collect(), @@ -823,11 +849,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None } + (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(), @@ -1425,7 +1453,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] + vec![(0, "Operate".into()), (1, "Logic".into())] .into_iter() .collect(), ), @@ -1471,14 +1499,18 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None } + (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(), @@ -1538,9 +1570,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Whole Note".into()), ("1".into(), "Half Note" - .into()), ("2".into(), "Quarter Note".into()), ("3".into(), - "Eighth Note".into()), ("4".into(), "Sixteenth Note".into()) + (0, "Whole Note".into()), (1, "Half Note".into()), (2, + "Quarter Note".into()), (3, "Eighth Note".into()), (4, + "Sixteenth Note".into()) ] .into_iter() .collect(), @@ -1599,68 +1631,49 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "C-2".into()), ("1".into(), "C#-2".into()), ("2" - .into(), "D-2".into()), ("3".into(), "D#-2".into()), ("4".into(), - "E-2".into()), ("5".into(), "F-2".into()), ("6".into(), "F#-2" - .into()), ("7".into(), "G-2".into()), ("8".into(), "G#-2" - .into()), ("9".into(), "A-2".into()), ("10".into(), "A#-2" - .into()), ("11".into(), "B-2".into()), ("12".into(), "C-1" - .into()), ("13".into(), "C#-1".into()), ("14".into(), "D-1" - .into()), ("15".into(), "D#-1".into()), ("16".into(), "E-1" - .into()), ("17".into(), "F-1".into()), ("18".into(), "F#-1" - .into()), ("19".into(), "G-1".into()), ("20".into(), "G#-1" - .into()), ("21".into(), "A-1".into()), ("22".into(), "A#-1" - .into()), ("23".into(), "B-1".into()), ("24".into(), "C0" - .into()), ("25".into(), "C#0".into()), ("26".into(), "D0" - .into()), ("27".into(), "D#0".into()), ("28".into(), "E0" - .into()), ("29".into(), "F0".into()), ("30".into(), "F#0" - .into()), ("31".into(), "G0".into()), ("32".into(), "G#0" - .into()), ("33".into(), "A0".into()), ("34".into(), "A#0" - .into()), ("35".into(), "B0".into()), ("36".into(), "C1".into()), - ("37".into(), "C#1".into()), ("38".into(), "D1".into()), ("39" - .into(), "D#1".into()), ("40".into(), "E1".into()), ("41".into(), - "F1".into()), ("42".into(), "F#1".into()), ("43".into(), "G1" - .into()), ("44".into(), "G#1".into()), ("45".into(), "A1" - .into()), ("46".into(), "A#1".into()), ("47".into(), "B1" - .into()), ("48".into(), "C2".into()), ("49".into(), "C#2" - .into()), ("50".into(), "D2".into()), ("51".into(), "D#2" - .into()), ("52".into(), "E2".into()), ("53".into(), "F2".into()), - ("54".into(), "F#2".into()), ("55".into(), "G2".into()), ("56" - .into(), "G#2".into()), ("57".into(), "A2".into()), ("58".into(), - "A#2".into()), ("59".into(), "B2".into()), ("60".into(), "C3" - .into()), ("61".into(), "C#3".into()), ("62".into(), "D3" - .into()), ("63".into(), "D#3".into()), ("64".into(), "E3" - .into()), ("65".into(), "F3".into()), ("66".into(), "F#3" - .into()), ("67".into(), "G3".into()), ("68".into(), "G#3" - .into()), ("69".into(), "A3".into()), ("70".into(), "A#3" - .into()), ("71".into(), "B3".into()), ("72".into(), "C4".into()), - ("73".into(), "C#4".into()), ("74".into(), "D4".into()), ("75" - .into(), "D#4".into()), ("76".into(), "E4".into()), ("77".into(), - "F4".into()), ("78".into(), "F#4".into()), ("79".into(), "G4" - .into()), ("80".into(), "G#4".into()), ("81".into(), "A4" - .into()), ("82".into(), "A#4".into()), ("83".into(), "B4" - .into()), ("84".into(), "C5".into()), ("85".into(), "C#5" - .into()), ("86".into(), "D5".into()), ("87".into(), "D#5" - .into()), ("88".into(), "E5".into()), ("89".into(), "F5".into()), - ("90".into(), "F#5".into()), ("91".into(), "G5 ".into()), ("92" - .into(), "G#5".into()), ("93".into(), "A5".into()), ("94".into(), - "A#5".into()), ("95".into(), "B5".into()), ("96".into(), "C6" - .into()), ("97".into(), "C#6".into()), ("98".into(), "D6" - .into()), ("99".into(), "D#6".into()), ("100".into(), "E6" - .into()), ("101".into(), "F6".into()), ("102".into(), "F#6" - .into()), ("103".into(), "G6".into()), ("104".into(), "G#6" - .into()), ("105".into(), "A6".into()), ("106".into(), "A#6" - .into()), ("107".into(), "B6".into()), ("108".into(), "C7" - .into()), ("109".into(), "C#7".into()), ("110".into(), "D7" - .into()), ("111".into(), "D#7".into()), ("112".into(), "E7" - .into()), ("113".into(), "F7".into()), ("114".into(), "F#7" - .into()), ("115".into(), "G7".into()), ("116".into(), "G#7" - .into()), ("117".into(), "A7".into()), ("118".into(), "A#7" - .into()), ("119".into(), "B7".into()), ("120".into(), "C8" - .into()), ("121".into(), "C#8".into()), ("122".into(), "D8" - .into()), ("123".into(), "D#8".into()), ("124".into(), "E8" - .into()), ("125".into(), "F8".into()), ("126".into(), "F#8" - .into()), ("127".into(), "G8".into()) + (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(), @@ -1716,8 +1729,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { - name : "Liquid Canister".into(), typ : Class::LiquidCanister } + (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(), @@ -1746,14 +1760,18 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None } + (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(), @@ -1782,7 +1800,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -1806,7 +1824,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -1836,7 +1857,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0.025f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -1866,7 +1890,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0.025f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -1896,7 +1923,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0.025f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -1926,7 +1956,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0.025f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -1956,7 +1989,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0.025f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -1985,7 +2021,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0.025f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -2015,7 +2054,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0.025f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -2044,7 +2086,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0.025f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -2073,7 +2118,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0.025f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -2103,7 +2151,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0.025f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -2134,7 +2185,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Gas Canister".into(), typ : Class::LiquidCanister } + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::LiquidCanister, index : 0u32 }) ] .into_iter() .collect(), @@ -2164,7 +2216,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -2193,7 +2248,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -2224,8 +2282,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister }, - SlotInfo { name : "Battery".into(), typ : Class::Battery } + (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(), @@ -2256,15 +2315,18 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : - "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), - typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : - Class::Plant }, SlotInfo { name : "Liquid Canister".into(), typ : - Class::LiquidCanister }, SlotInfo { name : "Liquid Canister".into(), typ - : Class::Plant }, SlotInfo { name : "Liquid Canister".into(), typ : - Class::Plant }, SlotInfo { name : "Liquid Canister".into(), typ : - Class::Plant }, SlotInfo { name : "Liquid Canister".into(), typ : - Class::Plant } + (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(), @@ -2294,7 +2356,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -2319,7 +2381,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -2350,7 +2415,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister } + (0u32, SlotInfo::Direct { name : "Liquid Canister".into(), class : + Class::LiquidCanister, index : 0u32 }) ] .into_iter() .collect(), @@ -2382,7 +2448,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister } + (0u32, SlotInfo::Direct { name : "Liquid Canister".into(), class : + Class::LiquidCanister, index : 0u32 }) ] .into_iter() .collect(), @@ -2414,7 +2481,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister } + (0u32, SlotInfo::Direct { name : "Liquid Canister".into(), class : + Class::LiquidCanister, index : 0u32 }) ] .into_iter() .collect(), @@ -2446,9 +2514,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { - name : "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo { name : - "Gas Filter".into(), typ : Class::GasFilter } + (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(), @@ -2549,7 +2619,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0.1f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Brain".into(), typ : Class::Organ }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Brain".into(), class : Class::Organ, + index : 0u32 }) + ] .into_iter() .collect(), } @@ -2579,7 +2652,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0.1f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Brain".into(), typ : Class::Organ }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Brain".into(), class : Class::Organ, + index : 0u32 }) + ] .into_iter() .collect(), } @@ -2609,7 +2685,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0.1f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Brain".into(), typ : Class::Organ }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Brain".into(), class : Class::Organ, + index : 0u32 }) + ] .into_iter() .collect(), } @@ -2638,7 +2717,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0.1f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Brain".into(), typ : Class::Organ }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Brain".into(), class : Class::Organ, + index : 0u32 }) + ] .into_iter() .collect(), } @@ -2668,7 +2750,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0.1f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Brain".into(), typ : Class::Organ }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Brain".into(), class : Class::Organ, + index : 0u32 }) + ] .into_iter() .collect(), } @@ -2718,7 +2803,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "".into(), typ : Class::Magazine }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::Magazine, + index : 0u32 }) + ] .into_iter() .collect(), } @@ -2805,8 +2893,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Magazine".into(), typ : Class::Flare }, SlotInfo { - name : "".into(), typ : Class::Blocked } + (0u32, SlotInfo::Direct { name : "Magazine".into(), class : Class::Flare, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "" + .into(), class : Class::Blocked, index : 1u32 }) ] .into_iter() .collect(), @@ -2830,7 +2919,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] + logic_slot_types: vec![(0, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -2903,17 +2992,15 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Idle".into()), ("1".into(), "Active".into())] - .into_iter() - .collect(), + vec![(0, "Idle".into()), (1, "Active".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: true, }, slots: vec![ - SlotInfo { name : "Programmable Chip".into(), typ : - Class::ProgrammableChip } + (0u32, SlotInfo::Direct { name : "Programmable Chip".into(), class : + Class::ProgrammableChip, index : 0u32 }) ] .into_iter() .collect(), @@ -2960,7 +3047,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "Magazine".into(), typ : Class::Magazine }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Magazine".into(), class : + Class::Magazine, index : 0u32 }) + ] .into_iter() .collect(), } @@ -3105,7 +3195,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -3113,20 +3203,20 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), + 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".into(), + MemoryAccess::Read)] .into_iter().collect()), (3, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -3148,19 +3238,19 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] - .into_iter() - .collect(), + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: true, circuit_holder: true, }, slots: vec![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { - name : "Cartridge".into(), typ : Class::Cartridge }, SlotInfo { name : - "Cartridge1".into(), typ : Class::Cartridge }, SlotInfo { name : - "Programmable Chip".into(), typ : Class::ProgrammableChip } + (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(), @@ -3235,7 +3325,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -3259,7 +3349,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -3287,7 +3380,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -3311,7 +3404,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -3488,10 +3584,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), - ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" - .into(), "Medium".into()), ("5".into(), "High".into()), ("6" - .into(), "Full".into()) + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) ] .into_iter() .collect(), @@ -3535,10 +3630,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), - ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" - .into(), "Medium".into()), ("5".into(), "High".into()), ("6" - .into(), "Full".into()) + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) ] .into_iter() .collect(), @@ -3582,10 +3676,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), - ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" - .into(), "Medium".into()), ("5".into(), "High".into()), ("6" - .into(), "Full".into()) + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) ] .into_iter() .collect(), @@ -3667,7 +3760,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -3691,7 +3784,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -4003,11 +4099,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None } + (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(), @@ -4035,11 +4133,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None } + (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(), @@ -4866,7 +4966,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -4890,7 +4990,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -4987,11 +5090,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::Egg }, SlotInfo { name : "" - .into(), typ : Class::Egg }, SlotInfo { name : "".into(), typ : - Class::Egg }, SlotInfo { name : "".into(), typ : Class::Egg }, SlotInfo { - name : "".into(), typ : Class::Egg }, SlotInfo { name : "".into(), typ : - Class::Egg } + (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(), @@ -5066,7 +5171,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -5090,7 +5195,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -5118,7 +5226,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -5142,7 +5250,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -5193,7 +5304,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -5217,7 +5328,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -5247,12 +5361,15 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: Some(InternalAtmoInfo { volume: 10f32 }), slots: vec![ - SlotInfo { name : "Air Tank".into(), typ : Class::GasCanister }, SlotInfo - { name : "Waste Tank".into(), typ : Class::GasCanister }, SlotInfo { name - : "Life Support".into(), typ : Class::Battery }, SlotInfo { name : - "Filter".into(), typ : Class::GasFilter }, SlotInfo { name : "Filter" - .into(), typ : Class::GasFilter }, SlotInfo { name : "Filter".into(), typ - : Class::GasFilter } + (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(), @@ -5393,11 +5510,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None } + (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(), @@ -5425,12 +5544,16 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : - "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ - : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, - SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : - "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ - : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool } + (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(), @@ -5532,12 +5655,15 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: Some(InternalAtmoInfo { volume: 10f32 }), slots: vec![ - SlotInfo { name : "Air Tank".into(), typ : Class::GasCanister }, SlotInfo - { name : "Waste Tank".into(), typ : Class::GasCanister }, SlotInfo { name - : "Life Support".into(), typ : Class::Battery }, SlotInfo { name : - "Filter".into(), typ : Class::GasFilter }, SlotInfo { name : "Filter" - .into(), typ : Class::GasFilter }, SlotInfo { name : "Filter".into(), typ - : Class::GasFilter } + (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(), @@ -5711,7 +5837,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -5731,10 +5857,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![ - ("0".into(), "Low Power".into()), ("1".into(), "High Power" - .into()) - ] + vec![(0, "Low Power".into()), (1, "High Power".into())] .into_iter() .collect(), ), @@ -5742,7 +5865,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -7064,83 +7190,83 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + MemoryAccess::Read)] .into_iter().collect()), (11, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -7160,15 +7286,21 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None } + (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(), @@ -7198,7 +7330,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -7207,97 +7339,97 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + MemoryAccess::Read)] .into_iter().collect()), (14, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -7321,17 +7453,25 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Propellant".into(), typ : Class::GasCanister }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None }, SlotInfo { name : "".into(), typ : Class::None } + (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(), @@ -7359,27 +7499,40 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore } + (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(), @@ -7412,7 +7565,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: Some(InternalAtmoInfo { volume: 10f32 }), logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -7421,30 +7574,30 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), + MemoryAccess::Read)] .into_iter().collect()), (4, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -7452,23 +7605,23 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::FilterType, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("5".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -7530,14 +7683,18 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: true, }, slots: vec![ - SlotInfo { name : "Air Tank".into(), typ : Class::GasCanister }, SlotInfo - { name : "Waste Tank".into(), typ : Class::GasCanister }, SlotInfo { name - : "Life Support".into(), typ : Class::Battery }, SlotInfo { name : - "Programmable Chip".into(), typ : Class::ProgrammableChip }, SlotInfo { - name : "Filter".into(), typ : Class::GasFilter }, SlotInfo { name : - "Filter".into(), typ : Class::GasFilter }, SlotInfo { name : "Filter" - .into(), typ : Class::GasFilter }, SlotInfo { name : "Filter".into(), typ - : Class::GasFilter } + (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(), @@ -7710,14 +7867,19 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : - "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Plant".into(), typ - : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, - SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : - "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), - typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : - Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, - SlotInfo { name : "Plant".into(), typ : Class::Plant } + (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(), @@ -7839,7 +8001,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }) + ] .into_iter() .collect(), } @@ -8051,7 +8216,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -8060,62 +8225,62 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + MemoryAccess::Read)] .into_iter().collect()), (9, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -8139,14 +8304,18 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Propellant".into(), typ : Class::GasCanister }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None } + (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(), @@ -9924,6 +10093,121 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< } .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 { @@ -12316,7 +12600,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -12340,7 +12624,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -12369,13 +12656,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (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".into(), + MemoryAccess::Read)] .into_iter().collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -12384,9 +12671,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("2".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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, @@ -12411,10 +12698,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: true, }, slots: vec![ - SlotInfo { name : "Programmable Chip".into(), typ : - Class::ProgrammableChip }, SlotInfo { name : "Battery".into(), typ : - Class::Battery }, SlotInfo { name : "Motherboard".into(), typ : - Class::Motherboard } + (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(), @@ -12711,7 +12999,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -12735,7 +13023,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -12763,7 +13054,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -12787,7 +13078,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -12840,7 +13134,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -12864,7 +13158,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -12917,7 +13214,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -12939,7 +13236,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Default".into()), ("1".into(), "Flatten".into())] + vec![(0, "Default".into()), (1, "Flatten".into())] .into_iter() .collect(), ), @@ -12947,7 +13244,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -13046,9 +13346,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None } + (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(), @@ -13075,7 +13377,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -13126,24 +13431,35 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore } + (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(), @@ -13172,14 +13488,19 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : - "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore } + (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(), @@ -13209,104 +13530,104 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + MemoryAccess::Read)] .into_iter().collect()), (14, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -13326,18 +13647,25 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : - "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore } + (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(), @@ -13390,7 +13718,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -13412,7 +13740,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Default".into()), ("1".into(), "Flatten".into())] + vec![(0, "Default".into()), (1, "Flatten".into())] .into_iter() .collect(), ), @@ -13420,7 +13748,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -13449,7 +13780,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -13471,7 +13802,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Default".into()), ("1".into(), "Flatten".into())] + vec![(0, "Default".into()), (1, "Flatten".into())] .into_iter() .collect(), ), @@ -13479,7 +13810,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -13506,7 +13840,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::GasCanister, index : 0u32 }) ] .into_iter() .collect(), @@ -13534,11 +13869,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None } + (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(), @@ -13568,83 +13905,83 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + MemoryAccess::Read)] .into_iter().collect()), (11, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -13664,15 +14001,21 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : - "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ - : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, - SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : - "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ - : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, - SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : - "Tool".into(), typ : Class::Tool }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None } + (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(), @@ -13749,7 +14092,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -13773,7 +14116,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -14421,7 +14767,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -14442,15 +14788,16 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] - .into_iter() - .collect(), + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -14594,11 +14941,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None } + (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(), @@ -15249,7 +15598,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -15271,15 +15620,16 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] - .into_iter() - .collect(), + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -15306,11 +15656,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None } + (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(), @@ -15339,8 +15691,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister - } + (0u32, SlotInfo::Direct { name : "Liquid Canister".into(), class : + Class::LiquidCanister, index : 0u32 }) ] .into_iter() .collect(), @@ -15675,7 +16027,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -15683,9 +16035,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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, @@ -15706,9 +16058,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { - name : "Sensor Processing Unit".into(), typ : Class::SensorProcessingUnit - } + (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(), @@ -16223,7 +16576,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -16232,62 +16585,62 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + MemoryAccess::Read)] .into_iter().collect()), (9, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -16311,14 +16664,18 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Propellant".into(), typ : Class::GasCanister }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None } + (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(), @@ -16634,7 +16991,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "Spray Can".into(), typ : Class::Bottle }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Spray Can".into(), class : + Class::Bottle, index : 0u32 }) + ] .into_iter() .collect(), } @@ -16851,7 +17211,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -16859,9 +17219,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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, @@ -16882,8 +17242,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { - name : "Cartridge".into(), typ : Class::Cartridge } + (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(), @@ -16912,7 +17273,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -16920,9 +17281,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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, @@ -16940,17 +17301,16 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] - .into_iter() - .collect(), + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { - name : "Dirt Canister".into(), typ : Class::Ore } + (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(), @@ -17027,12 +17387,16 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : - "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ - : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, - SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : - "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ - : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool } + (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(), @@ -17251,11 +17615,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None } + (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(), @@ -17283,11 +17649,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None } + (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(), @@ -17385,7 +17753,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -17409,7 +17777,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -17440,7 +17811,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::GasCanister, index : 0u32 }) ] .into_iter() .collect(), @@ -17526,10 +17898,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), - ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" - .into(), "Medium".into()), ("5".into(), "High".into()), ("6" - .into(), "Full".into()) + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) ] .into_iter() .collect(), @@ -18108,13 +18479,18 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::Crate }, SlotInfo { name : "" - .into(), typ : Class::Crate }, SlotInfo { name : "".into(), typ : - Class::Crate }, SlotInfo { name : "".into(), typ : Class::Crate }, - SlotInfo { name : "".into(), typ : Class::Crate }, SlotInfo { name : "" - .into(), typ : Class::Crate }, SlotInfo { name : "".into(), typ : - Class::Portables }, SlotInfo { name : "".into(), typ : Class::Portables - }, SlotInfo { name : "".into(), typ : Class::Crate } + (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(), @@ -18179,9 +18555,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< logic_types: vec![].into_iter().collect(), modes: Some( vec![ - ("0".into(), "None".into()), ("1".into(), "NoContact".into()), - ("2".into(), "Moving".into()), ("3".into(), "Holding".into()), - ("4".into(), "Landed".into()) + (0, "None".into()), (1, "NoContact".into()), (2, "Moving" + .into()), (3, "Holding".into()), (4, "Landed".into()) ] .into_iter() .collect(), @@ -18259,9 +18634,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "None".into()), ("1".into(), "NoContact".into()), - ("2".into(), "Moving".into()), ("3".into(), "Holding".into()), - ("4".into(), "Landed".into()) + (0, "None".into()), (1, "NoContact".into()), (2, "Moving" + .into()), (3, "Holding".into()), (4, "Landed".into()) ] .into_iter() .collect(), @@ -18759,7 +19133,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -18785,9 +19159,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Whole Note".into()), ("1".into(), "Half Note" - .into()), ("2".into(), "Quarter Note".into()), ("3".into(), - "Eighth Note".into()), ("4".into(), "Sixteenth Note".into()) + (0, "Whole Note".into()), (1, "Half Note".into()), (2, + "Quarter Note".into()), (3, "Eighth Note".into()), (4, + "Sixteenth Note".into()) ] .into_iter() .collect(), @@ -18797,7 +19171,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Sound Cartridge".into(), typ : Class::SoundCartridge } + (0u32, SlotInfo::Direct { name : "Sound Cartridge".into(), class : + Class::SoundCartridge, index : 0u32 }) ] .into_iter() .collect(), @@ -19059,8 +19434,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Brain".into(), typ : Class::Organ }, SlotInfo { name : - "Lungs".into(), typ : Class::Organ } + (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(), @@ -19091,8 +19467,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Brain".into(), typ : Class::Organ }, SlotInfo { name : - "Lungs".into(), typ : Class::Organ } + (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(), @@ -19194,10 +19571,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::Battery }, SlotInfo { name : "Liquid Canister".into(), typ : - Class::LiquidCanister } + (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(), @@ -19226,7 +19604,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -19249,7 +19627,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -19473,7 +19854,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -19481,62 +19862,62 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + MemoryAccess::Read)] .into_iter().collect()), (9, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -19573,10 +19954,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "None".into()), ("1".into(), "Follow".into()), ("2" - .into(), "MoveToTarget".into()), ("3".into(), "Roam".into()), - ("4".into(), "Unload".into()), ("5".into(), "PathToTarget" - .into()), ("6".into(), "StorageFull".into()) + (0, "None".into()), (1, "Follow".into()), (2, "MoveToTarget" + .into()), (3, "Roam".into()), (4, "Unload".into()), (5, + "PathToTarget".into()), (6, "StorageFull".into()) ] .into_iter() .collect(), @@ -19586,14 +19966,19 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: true, }, slots: vec![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { - name : "Programmable Chip".into(), typ : Class::ProgrammableChip }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, - SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : - "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : - Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore } + (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(), @@ -19626,20 +20011,20 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (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".into(), + 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".into(), + MemoryAccess::Read)] .into_iter().collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -19647,101 +20032,101 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::FilterType, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("3".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), + 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".into(), + 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".into(), + MemoryAccess::Read)] .into_iter().collect()), (15, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -19784,22 +20169,28 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Entity".into(), typ : Class::Entity }, SlotInfo { name - : "Entity".into(), typ : Class::Entity }, SlotInfo { name : "Gas Filter" - .into(), typ : Class::GasFilter }, SlotInfo { name : "Gas Filter".into(), - typ : Class::GasFilter }, SlotInfo { name : "Gas Filter".into(), typ : - Class::GasFilter }, SlotInfo { name : "Gas Canister".into(), typ : - Class::GasCanister }, SlotInfo { name : "Gas Canister".into(), typ : - Class::GasCanister }, SlotInfo { name : "Gas Canister".into(), typ : - Class::GasCanister }, SlotInfo { name : "Gas Canister".into(), typ : - Class::GasCanister }, SlotInfo { name : "Battery".into(), typ : - Class::Battery }, SlotInfo { name : "Battery".into(), typ : - Class::Battery }, SlotInfo { name : "Battery".into(), typ : - Class::Battery }, SlotInfo { name : "Container Slot".into(), typ : - Class::None }, SlotInfo { name : "Container Slot".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : - Class::None } + (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(), @@ -19832,20 +20223,20 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (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".into(), + 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".into(), + MemoryAccess::Read)] .into_iter().collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -19854,57 +20245,57 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("3".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), + 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".into(), + 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".into(), + 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".into(), + 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".into(), + MemoryAccess::Read)] .into_iter().collect()), (10, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -19947,17 +20338,22 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Entity".into(), typ : Class::Entity }, SlotInfo { name - : "Entity".into(), typ : Class::Entity }, SlotInfo { name : "Battery" - .into(), typ : Class::Battery }, SlotInfo { name : "Battery".into(), typ - : Class::Battery }, SlotInfo { name : "Battery".into(), typ : - Class::Battery }, SlotInfo { name : "".into(), - typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None }, SlotInfo { name : - "".into(), typ : Class::None } + (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(), @@ -20309,9 +20705,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Captain\'s Seat".into(), typ : Class::Entity }, - SlotInfo { name : "Passenger Seat Left".into(), typ : Class::Entity }, - SlotInfo { name : "Passenger Seat Right".into(), typ : Class::Entity } + (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(), @@ -20436,7 +20834,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -20464,7 +20862,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Outward".into()), ("1".into(), "Inward".into())] + vec![(0, "Outward".into()), (1, "Inward".into())] .into_iter() .collect(), ), @@ -20472,7 +20870,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "".into(), typ : Class::DataDisk }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::DataDisk, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -20511,8 +20912,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) ] .into_iter() .collect(), @@ -20534,17 +20935,16 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] - .into_iter() - .collect(), + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None } + (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(), @@ -20592,8 +20992,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) ] .into_iter() .collect(), @@ -20638,17 +21038,16 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] - .into_iter() - .collect(), + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None } + (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(), @@ -20695,8 +21094,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) ] .into_iter() .collect(), @@ -20722,8 +21121,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None } + (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(), @@ -20764,76 +21164,83 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< fabricator_info: Some(FabricatorInfo { tier: MachineTier::Undefined, recipes: vec![ - ("ItemCannedCondensedMilk".into(), Recipe { 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() }), ("ItemCannedEdamame" - .into(), Recipe { 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() }), ("ItemCannedMushroom".into(), Recipe { - 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() }), - ("ItemCannedPowderedEggs".into(), Recipe { 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() }), - ("ItemCannedRicePudding".into(), Recipe { 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() }), - ("ItemCornSoup".into(), Recipe { 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() }), ("ItemFrenchFries".into(), Recipe { - 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() }), - ("ItemPumpkinSoup".into(), Recipe { 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() }), ("ItemTomatoSoup" - .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : + 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() }) + .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(), @@ -21217,7 +21624,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] + logic_slot_types: vec![(0, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -21292,17 +21699,15 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Idle".into()), ("1".into(), "Active".into())] - .into_iter() - .collect(), + vec![(0, "Idle".into()), (1, "Active".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: true, }, slots: vec![ - SlotInfo { name : "Programmable Chip".into(), typ : - Class::ProgrammableChip } + (0u32, SlotInfo::Direct { name : "Programmable Chip".into(), class : + Class::ProgrammableChip, index : 0u32 }) ] .into_iter() .collect(), @@ -21359,7 +21764,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] + vec![(0, "Operate".into()), (1, "Logic".into())] .into_iter() .collect(), ), @@ -21416,7 +21821,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] + vec![(0, "Operate".into()), (1, "Logic".into())] .into_iter() .collect(), ), @@ -21460,7 +21865,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -21483,7 +21888,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -21516,7 +21924,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -21524,9 +21932,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -21557,8 +21965,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::Ore }, SlotInfo { name : - "Export".into(), typ : Class::Ingot } + (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(), @@ -21601,7 +22010,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -21611,9 +22020,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -21640,9 +22049,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Idle".into()), ("1".into(), "Discharged".into()), - ("2".into(), "Discharging".into()), ("3".into(), "Charging" - .into()), ("4".into(), "Charged".into()) + (0, "Idle".into()), (1, "Discharged".into()), (2, "Discharging" + .into()), (3, "Charging".into()), (4, "Charged".into()) ] .into_iter() .collect(), @@ -21652,8 +22060,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { - name : "Data Disk".into(), typ : Class::DataDisk } + (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(), @@ -21693,7 +22102,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -21703,9 +22112,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -21732,9 +22141,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Idle".into()), ("1".into(), "Discharged".into()), - ("2".into(), "Discharging".into()), ("3".into(), "Charging" - .into()), ("4".into(), "Charged".into()) + (0, "Idle".into()), (1, "Discharged".into()), (2, "Discharging" + .into()), (3, "Charging".into()), (4, "Charged".into()) ] .into_iter() .collect(), @@ -21744,8 +22152,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { - name : "Data Disk".into(), typ : Class::DataDisk } + (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(), @@ -21785,8 +22194,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) ] .into_iter() .collect(), @@ -21809,8 +22218,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None } + (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(), @@ -21853,8 +22263,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) ] .into_iter() .collect(), @@ -21880,8 +22290,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { name - : "Export".into(), typ : Class::None } + (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(), @@ -21924,352 +22335,383 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< fabricator_info: Some(FabricatorInfo { tier: MachineTier::Undefined, recipes: vec![ - ("CardboardBox".into(), Recipe { 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() }), - ("ItemAstroloySheets".into(), Recipe { 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() }), - ("ItemCableCoil".into(), Recipe { 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() }), - ("ItemCoffeeMug".into(), Recipe { 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() }), - ("ItemEggCarton".into(), Recipe { 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() }), - ("ItemEmptyCan".into(), Recipe { 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() }), - ("ItemEvaSuit".into(), Recipe { 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() }), ("ItemGlassSheets".into(), Recipe { tier : + 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() }), ("ItemIronFrames".into(), Recipe { tier : - MachineTier::TierOne, time : 4f64, energy : 200f64, temperature : + .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![("Iron".into(), 4f64)] - .into_iter().collect() }), ("ItemIronSheets".into(), Recipe { tier : + 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() }), ("ItemKitAccessBridge".into(), Recipe { - 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() }), ("ItemKitArcFurnace".into(), Recipe { 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() }), ("ItemKitAutolathe" - .into(), Recipe { 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() }), ("ItemKitBeds".into(), Recipe { - 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() }), - ("ItemKitBlastDoor".into(), Recipe { 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() }), ("ItemKitCentrifuge".into(), Recipe { 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() }), ("ItemKitChairs".into(), - Recipe { 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() }), - ("ItemKitChute".into(), Recipe { 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() }), - ("ItemKitCompositeCladding".into(), Recipe { 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() }), ("ItemKitCompositeFloorGrating".into(), - Recipe { 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() }), ("ItemKitCrate".into(), Recipe { - 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() }), ("ItemKitCrateMkII".into(), Recipe - { 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() }), - ("ItemKitCrateMount".into(), Recipe { 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() }), - ("ItemKitDeepMiner".into(), Recipe { 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() }), ("ItemKitDoor".into(), Recipe { 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() }), - ("ItemKitElectronicsPrinter".into(), Recipe { 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() }), - ("ItemKitFlagODA".into(), Recipe { 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() }), - ("ItemKitFurnace".into(), Recipe { 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() }), ("ItemKitFurniture".into(), Recipe { 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() }), - ("ItemKitHydraulicPipeBender".into(), Recipe { 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() }), - ("ItemKitInteriorDoors".into(), Recipe { 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() }), ("ItemKitLadder".into(), Recipe { 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() }), ("ItemKitLocker".into(), Recipe { 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() }), ("ItemKitPipe".into(), Recipe { 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() }), ("ItemKitRailing".into(), Recipe { tier : + .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() }), ("ItemKitRecycler".into(), Recipe { tier : - MachineTier::TierOne, time : 60f64, energy : 12000f64, temperature : + .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 : 2i64, reagents : vec![("Copper".into(), 10f64), ("Iron" - .into(), 20f64)] .into_iter().collect() }), - ("ItemKitReinforcedWindows".into(), Recipe { 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() }), ("ItemKitRespawnPointWallMounted".into(), - Recipe { 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() }), - ("ItemKitRobotArmDoor".into(), Recipe { 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() }), - ("ItemKitRocketManufactory".into(), Recipe { 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() }), - ("ItemKitSDBHopper".into(), Recipe { 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() }), - ("ItemKitSecurityPrinter".into(), Recipe { 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() }), - ("ItemKitSign".into(), Recipe { 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() }), - ("ItemKitSorter".into(), Recipe { 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() }), ("ItemKitStacker" - .into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : + 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![("Copper".into(), 2f64), ("Iron".into(), 10f64)] .into_iter() - .collect() }), ("ItemKitStairs".into(), Recipe { tier : + 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() }), ("ItemKitStairwell".into(), Recipe { tier - : MachineTier::TierOne, time : 20f64, energy : 6000f64, temperature : + .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() }), ("ItemKitStandardChute".into(), Recipe { + .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, @@ -22277,132 +22719,155 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< : 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() }), ("ItemKitTables".into(), Recipe { tier : - MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + .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() }), ("ItemKitToolManufactory" - .into(), Recipe { 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() }), ("ItemKitWall".into(), Recipe { tier : - MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + .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![("Steel".into(), 1f64)] - .into_iter().collect() }), ("ItemKitWallArch".into(), Recipe { tier : - MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + 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![("Steel".into(), 1f64)] - .into_iter().collect() }), ("ItemKitWallFlat".into(), Recipe { tier : - MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + 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 : 1i64, reagents : vec![("Steel".into(), 1f64)] - .into_iter().collect() }), ("ItemKitWallGeometry".into(), Recipe { - 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() }), ("ItemKitWallIron".into(), Recipe { - 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() }), ("ItemKitWallPadded".into(), Recipe - { 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() }), ("ItemKitWindowShutter".into(), - Recipe { 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() }), - ("ItemPlasticSheets".into(), Recipe { 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() - }), ("ItemSpaceHelmet".into(), Recipe { 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() }), ("ItemSteelFrames".into(), Recipe { tier : - MachineTier::TierOne, time : 7f64, energy : 800f64, temperature : + 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 : 1i64, reagents : vec![("Steel".into(), 2f64)] - .into_iter().collect() }), ("ItemSteelSheets".into(), Recipe { tier : - MachineTier::TierOne, time : 3f64, energy : 500f64, temperature : + 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 : 1i64, reagents : vec![("Steel".into(), 0.5f64)] - .into_iter().collect() }), ("ItemStelliteGlassSheets".into(), Recipe - { 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() }), - ("ItemWallLight".into(), Recipe { tier : MachineTier::TierOne, time : - 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + 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), ("Iron".into(), 1f64), - ("Silicon".into(), 1f64)] .into_iter().collect() }), ("KitSDBSilo" - .into(), Recipe { 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() }), - ("KitStructureCombustionCentrifuge".into(), Recipe { 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() }) + reagents : vec![("Copper".into(), 2f64), ("Solder".into(), 2f64), + ("Steel".into(), 10f64)] .into_iter().collect() } ] .into_iter() .collect(), @@ -22783,8 +23248,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) ] .into_iter() .collect(), @@ -22810,8 +23275,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None } + (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(), @@ -22852,131 +23318,56 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< fabricator_info: Some(FabricatorInfo { tier: MachineTier::TierOne, recipes: vec![ - ("ItemBreadLoaf".into(), Recipe { 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() }), ("ItemCerealBar".into(), Recipe { tier : + 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() }), ("ItemChocolateBar".into(), Recipe { 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() }), ("ItemChocolateCake" - .into(), Recipe { 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() }), ("ItemChocolateCerealBar".into(), Recipe { tier : - MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : - RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + .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() }), - ("ItemCookedCondensedMilk".into(), Recipe { 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() }), ("ItemCookedCorn".into(), Recipe { 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() }), ("ItemCookedMushroom".into(), Recipe { - 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() }), ("ItemCookedPowderedEggs".into(), Recipe { - 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() }), ("ItemCookedPumpkin".into(), Recipe { tier + .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![("Pumpkin".into(), 1f64)] - .into_iter().collect() }), ("ItemCookedRice".into(), Recipe { tier : - MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : + 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 : 1i64, reagents : vec![("Rice".into(), 1f64)] - .into_iter().collect() }), ("ItemCookedSoybean".into(), Recipe { 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() }), ("ItemCookedTomato".into(), Recipe { 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() }), ("ItemFries".into(), Recipe { tier : + 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() }), ("ItemMuffin".into(), - Recipe { 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() }), ("ItemPlainCake".into(), Recipe { 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() }), ("ItemPotatoBaked".into(), Recipe { 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() }), ("ItemPumpkinPie".into(), Recipe { tier : + .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 : @@ -22984,7 +23375,97 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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() }) + .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(), @@ -23543,10 +24024,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), - ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" - .into(), "Medium".into()), ("5".into(), "High".into()), ("6" - .into(), "Full".into()) + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) ] .into_iter() .collect(), @@ -23593,7 +24073,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -23603,9 +24083,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -23613,9 +24093,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("2".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -23623,9 +24103,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("3".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -23633,9 +24113,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("4".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -23663,11 +24143,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { - name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : - "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Battery" - .into(), typ : Class::Battery }, SlotInfo { name : "Battery".into(), typ - : Class::Battery } + (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(), @@ -23706,7 +24188,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -23716,9 +24198,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -23746,8 +24228,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { - name : "Battery".into(), typ : Class::Battery } + (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(), @@ -23801,10 +24284,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), - ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" - .into(), "Medium".into()), ("5".into(), "High".into()), ("6" - .into(), "Full".into()) + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) ] .into_iter() .collect(), @@ -23865,10 +24347,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), - ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" - .into(), "Medium".into()), ("5".into(), "High".into()), ("6" - .into(), "Full".into()) + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) ] .into_iter() .collect(), @@ -23930,10 +24411,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Empty".into()), ("1".into(), "Critical".into()), - ("2".into(), "VeryLow".into()), ("3".into(), "Low".into()), ("4" - .into(), "Medium".into()), ("5".into(), "High".into()), ("6" - .into(), "Full".into()) + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) ] .into_iter() .collect(), @@ -24032,7 +24512,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -24041,9 +24521,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -24069,8 +24549,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, - SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } + (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(), @@ -24109,7 +24590,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -24118,9 +24599,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -24146,8 +24627,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, - SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } + (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(), @@ -24186,7 +24668,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -24195,9 +24677,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -24223,8 +24705,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, - SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } + (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(), @@ -24263,7 +24746,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -24272,9 +24755,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -24300,8 +24783,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, - SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } + (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(), @@ -24340,7 +24824,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -24349,9 +24833,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -24377,8 +24861,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, - SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } + (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(), @@ -24431,7 +24916,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] + vec![(0, "Operate".into()), (1, "Logic".into())] .into_iter() .collect(), ), @@ -24475,7 +24960,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -24502,7 +24987,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Bed".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Bed".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -25263,9 +25751,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] - .into_iter() - .collect(), + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, @@ -25454,82 +25940,65 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()), ("2".into(), vec![] .into_iter().collect()), - ("3".into(), vec![] .into_iter().collect()), ("4".into(), vec![] - .into_iter().collect()), ("5".into(), vec![] .into_iter().collect()), - ("6".into(), vec![] .into_iter().collect()), ("7".into(), vec![] - .into_iter().collect()), ("8".into(), vec![] .into_iter().collect()), - ("9".into(), vec![] .into_iter().collect()), ("10".into(), vec![] - .into_iter().collect()), ("11".into(), vec![] .into_iter() - .collect()), ("12".into(), vec![] .into_iter().collect()), ("13" - .into(), vec![] .into_iter().collect()), ("14".into(), vec![] - .into_iter().collect()), ("15".into(), vec![] .into_iter() - .collect()), ("16".into(), vec![] .into_iter().collect()), ("17" - .into(), vec![] .into_iter().collect()), ("18".into(), vec![] - .into_iter().collect()), ("19".into(), vec![] .into_iter() - .collect()), ("20".into(), vec![] .into_iter().collect()), ("21" - .into(), vec![] .into_iter().collect()), ("22".into(), vec![] - .into_iter().collect()), ("23".into(), vec![] .into_iter() - .collect()), ("24".into(), vec![] .into_iter().collect()), ("25" - .into(), vec![] .into_iter().collect()), ("26".into(), vec![] - .into_iter().collect()), ("27".into(), vec![] .into_iter() - .collect()), ("28".into(), vec![] .into_iter().collect()), ("29" - .into(), vec![] .into_iter().collect()), ("30".into(), vec![] - .into_iter().collect()), ("31".into(), vec![] .into_iter() - .collect()), ("32".into(), vec![] .into_iter().collect()), ("33" - .into(), vec![] .into_iter().collect()), ("34".into(), vec![] - .into_iter().collect()), ("35".into(), vec![] .into_iter() - .collect()), ("36".into(), vec![] .into_iter().collect()), ("37" - .into(), vec![] .into_iter().collect()), ("38".into(), vec![] - .into_iter().collect()), ("39".into(), vec![] .into_iter() - .collect()), ("40".into(), vec![] .into_iter().collect()), ("41" - .into(), vec![] .into_iter().collect()), ("42".into(), vec![] - .into_iter().collect()), ("43".into(), vec![] .into_iter() - .collect()), ("44".into(), vec![] .into_iter().collect()), ("45" - .into(), vec![] .into_iter().collect()), ("46".into(), vec![] - .into_iter().collect()), ("47".into(), vec![] .into_iter() - .collect()), ("48".into(), vec![] .into_iter().collect()), ("49" - .into(), vec![] .into_iter().collect()), ("50".into(), vec![] - .into_iter().collect()), ("51".into(), vec![] .into_iter() - .collect()), ("52".into(), vec![] .into_iter().collect()), ("53" - .into(), vec![] .into_iter().collect()), ("54".into(), vec![] - .into_iter().collect()), ("55".into(), vec![] .into_iter() - .collect()), ("56".into(), vec![] .into_iter().collect()), ("57" - .into(), vec![] .into_iter().collect()), ("58".into(), vec![] - .into_iter().collect()), ("59".into(), vec![] .into_iter() - .collect()), ("60".into(), vec![] .into_iter().collect()), ("61" - .into(), vec![] .into_iter().collect()), ("62".into(), vec![] - .into_iter().collect()), ("63".into(), vec![] .into_iter() - .collect()), ("64".into(), vec![] .into_iter().collect()), ("65" - .into(), vec![] .into_iter().collect()), ("66".into(), vec![] - .into_iter().collect()), ("67".into(), vec![] .into_iter() - .collect()), ("68".into(), vec![] .into_iter().collect()), ("69" - .into(), vec![] .into_iter().collect()), ("70".into(), vec![] - .into_iter().collect()), ("71".into(), vec![] .into_iter() - .collect()), ("72".into(), vec![] .into_iter().collect()), ("73" - .into(), vec![] .into_iter().collect()), ("74".into(), vec![] - .into_iter().collect()), ("75".into(), vec![] .into_iter() - .collect()), ("76".into(), vec![] .into_iter().collect()), ("77" - .into(), vec![] .into_iter().collect()), ("78".into(), vec![] - .into_iter().collect()), ("79".into(), vec![] .into_iter() - .collect()), ("80".into(), vec![] .into_iter().collect()), ("81" - .into(), vec![] .into_iter().collect()), ("82".into(), vec![] - .into_iter().collect()), ("83".into(), vec![] .into_iter() - .collect()), ("84".into(), vec![] .into_iter().collect()), ("85" - .into(), vec![] .into_iter().collect()), ("86".into(), vec![] - .into_iter().collect()), ("87".into(), vec![] .into_iter() - .collect()), ("88".into(), vec![] .into_iter().collect()), ("89" - .into(), vec![] .into_iter().collect()), ("90".into(), vec![] - .into_iter().collect()), ("91".into(), vec![] .into_iter() - .collect()), ("92".into(), vec![] .into_iter().collect()), ("93" - .into(), vec![] .into_iter().collect()), ("94".into(), vec![] - .into_iter().collect()), ("95".into(), vec![] .into_iter() - .collect()), ("96".into(), vec![] .into_iter().collect()), ("97" - .into(), vec![] .into_iter().collect()), ("98".into(), vec![] - .into_iter().collect()), ("99".into(), vec![] .into_iter() - .collect()), ("100".into(), vec![] .into_iter().collect()), ("101" - .into(), vec![] .into_iter().collect()) + (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(), @@ -25553,88 +26022,142 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), - typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None } + (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(), @@ -25674,7 +26197,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -25682,409 +26205,409 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -26114,48 +26637,75 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), - typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None } + (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(), @@ -26196,8 +26746,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) ] .into_iter() .collect(), @@ -26220,8 +26770,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None } + (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(), @@ -26264,7 +26815,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26287,7 +26838,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -26319,7 +26873,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26342,7 +26896,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -26374,7 +26931,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26397,7 +26954,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -26429,7 +26989,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26452,7 +27012,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -26484,7 +27047,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26507,7 +27070,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -26539,7 +27105,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26562,7 +27128,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -26594,7 +27163,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26617,7 +27186,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -26649,7 +27221,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26672,7 +27244,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -26704,7 +27279,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26727,7 +27302,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -26760,7 +27338,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26788,7 +27366,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Input".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Input".into(), class : Class::None, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -26825,7 +27406,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -26846,7 +27430,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26872,15 +27456,16 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] - .into_iter() - .collect(), + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -26922,7 +27507,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -26948,15 +27533,16 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] - .into_iter() - .collect(), + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -26998,7 +27584,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -27026,7 +27612,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -27067,7 +27656,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -27095,7 +27684,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -27135,7 +27727,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -27163,7 +27755,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Input".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Input".into(), class : Class::None, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -27199,7 +27794,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -27220,7 +27818,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -27245,7 +27843,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Import".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -27282,7 +27883,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -27303,7 +27907,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -27329,7 +27933,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Export".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Export".into(), class : Class::None, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -27366,7 +27973,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -27385,7 +27995,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -27405,7 +28018,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -27428,7 +28041,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -27465,7 +28081,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -27488,7 +28104,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -27525,7 +28144,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -27549,10 +28168,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![ - ("0".into(), "Left".into()), ("1".into(), "Center".into()), ("2" - .into(), "Right".into()) - ] + vec![(0, "Left".into()), (1, "Center".into()), (2, "Right".into())] .into_iter() .collect(), ), @@ -27560,7 +28176,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -27597,7 +28216,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -27616,7 +28238,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -27636,7 +28261,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -27666,8 +28291,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: true, }, slots: vec![ - SlotInfo { name : "Programmable Chip".into(), typ : - Class::ProgrammableChip } + (0u32, SlotInfo::Direct { name : "Programmable Chip".into(), class : + Class::ProgrammableChip, index : 0u32 }) ] .into_iter() .collect(), @@ -27710,8 +28335,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()), ("2".into(), vec![] .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()), (2, vec![] .into_iter().collect()) ] .into_iter() .collect(), @@ -27793,9 +28418,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: true, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None }, SlotInfo { name : - "Programmable Chip".into(), typ : Class::ProgrammableChip } + (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(), @@ -28123,7 +28750,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] + vec![(0, "Operate".into()), (1, "Logic".into())] .into_iter() .collect(), ), @@ -28433,8 +29060,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()), ("2".into(), vec![] .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()), (2, vec![] .into_iter().collect()) ] .into_iter() .collect(), @@ -28455,9 +29082,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk }, SlotInfo { - name : "Data Disk".into(), typ : Class::DataDisk }, SlotInfo { name : - "Motherboard".into(), typ : Class::Motherboard } + (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(), @@ -28497,8 +29126,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()), ("2".into(), vec![] .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()), (2, vec![] .into_iter().collect()) ] .into_iter() .collect(), @@ -28519,9 +29148,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk }, SlotInfo { - name : "Data Disk".into(), typ : Class::DataDisk }, SlotInfo { name : - "Motherboard".into(), typ : Class::Motherboard } + (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(), @@ -28693,8 +29324,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) ] .into_iter() .collect(), @@ -28715,8 +29346,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Circuit Board".into(), typ : Class::Circuitboard }, - SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk } + (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(), @@ -28755,8 +29387,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) ] .into_iter() .collect(), @@ -28777,8 +29409,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Circuit Board".into(), typ : Class::Circuitboard }, - SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk } + (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(), @@ -28830,8 +29463,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Default".into()), ("1".into(), "Percent".into()), - ("2".into(), "Power".into()) + (0, "Default".into()), (1, "Percent".into()), (2, "Power".into()) ] .into_iter() .collect(), @@ -28888,8 +29520,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Default".into()), ("1".into(), "Percent".into()), - ("2".into(), "Power".into()) + (0, "Default".into()), (1, "Percent".into()), (2, "Power".into()) ] .into_iter() .collect(), @@ -28946,8 +29577,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Default".into()), ("1".into(), "Percent".into()), - ("2".into(), "Power".into()) + (0, "Default".into()), (1, "Percent".into()), (2, "Power".into()) ] .into_iter() .collect(), @@ -28992,8 +29622,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) ] .into_iter() .collect(), @@ -29014,8 +29644,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Circuit Board".into(), typ : Class::Circuitboard }, - SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk } + (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(), @@ -29057,7 +29688,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -29107,15 +29738,16 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] - .into_iter() - .collect(), + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Entity".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Entity".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -29153,7 +29785,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -29161,41 +29793,41 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -29219,11 +29851,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None } + (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(), @@ -29254,7 +29888,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "Container Slot".into(), typ : Class::Crate }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Container Slot".into(), class : + Class::Crate, index : 0u32 }) + ] .into_iter() .collect(), } @@ -29278,7 +29915,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -29311,7 +29948,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Bed".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Bed".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -29353,7 +29993,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] + logic_slot_types: vec![(0, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -29377,7 +30017,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Player".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -29419,7 +30062,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] + logic_slot_types: vec![(0, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -29443,7 +30086,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Player".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -29497,8 +30143,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Default".into()), ("1".into(), "Horizontal" - .into()), ("2".into(), "Vertical".into()) + (0, "Default".into()), (1, "Horizontal".into()), (2, "Vertical" + .into()) ] .into_iter() .collect(), @@ -29542,7 +30188,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] + logic_slot_types: vec![(0, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -29564,7 +30210,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Export".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Export".into(), class : Class::None, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -29864,7 +30513,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] + logic_slot_types: vec![(0, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -29937,17 +30586,15 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Idle".into()), ("1".into(), "Active".into())] - .into_iter() - .collect(), + vec![(0, "Idle".into()), (1, "Active".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: true, }, slots: vec![ - SlotInfo { name : "Programmable Chip".into(), typ : - Class::ProgrammableChip } + (0u32, SlotInfo::Direct { name : "Programmable Chip".into(), class : + Class::ProgrammableChip, index : 0u32 }) ] .into_iter() .collect(), @@ -29990,8 +30637,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) ] .into_iter() .collect(), @@ -30017,8 +30664,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { name - : "Export".into(), typ : Class::None } + (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(), @@ -30061,414 +30709,86 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< fabricator_info: Some(FabricatorInfo { tier: MachineTier::Undefined, recipes: vec![ - ("ApplianceChemistryStation".into(), Recipe { 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() }), - ("ApplianceDeskLampLeft".into(), Recipe { 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() }), ("ApplianceDeskLampRight" - .into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : + 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![("Iron" - .into(), 2f64), ("Silicon".into(), 1f64)] .into_iter().collect() }), - ("ApplianceMicrowave".into(), Recipe { 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() }), - ("AppliancePackagingMachine".into(), Recipe { 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() }), - ("AppliancePaintMixer".into(), Recipe { 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() }), - ("AppliancePlantGeneticAnalyzer".into(), Recipe { 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() }), - ("AppliancePlantGeneticSplicer".into(), Recipe { 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() }), - ("AppliancePlantGeneticStabilizer".into(), Recipe { 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() }), - ("ApplianceReagentProcessor".into(), Recipe { 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() }), - ("ApplianceTabletDock".into(), Recipe { 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() }), ("AutolathePrinterMod".into(), Recipe { 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() }), ("Battery_Wireless_cell".into(), - Recipe { 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() }), ("Battery_Wireless_cell_Big" - .into(), Recipe { 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() }), ("CartridgeAtmosAnalyser" - .into(), Recipe { 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() }), ("CartridgeConfiguration".into(), - Recipe { 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() }), ("CartridgeElectronicReader".into(), Recipe { 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() }), - ("CartridgeGPS".into(), Recipe { 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() }), - ("CartridgeMedicalAnalyser".into(), Recipe { 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() }), - ("CartridgeNetworkAnalyser".into(), Recipe { 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() }), - ("CartridgeOreScanner".into(), Recipe { 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() }), - ("CartridgeOreScannerColor".into(), Recipe { 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() }), ("CartridgePlantAnalyser".into(), - Recipe { 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() }), ("CartridgeTracker".into(), Recipe { 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() }), - ("CircuitboardAdvAirlockControl".into(), Recipe { 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() }), - ("CircuitboardAirControl".into(), Recipe { 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() }), - ("CircuitboardAirlockControl".into(), Recipe { 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() }), - ("CircuitboardDoorControl".into(), Recipe { 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() }), ("CircuitboardGasDisplay" - .into(), Recipe { 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() }), ("CircuitboardGraphDisplay".into(), - Recipe { 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() }), - ("CircuitboardHashDisplay".into(), Recipe { 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() }), ("CircuitboardModeControl" - .into(), Recipe { 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() }), ("CircuitboardPowerControl".into(), Recipe { 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() }), ("CircuitboardShipDisplay" - .into(), Recipe { 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() }), ("CircuitboardSolarControl".into(), Recipe { 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() }), ("DynamicLight".into(), - Recipe { 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() }), - ("ElectronicPrinterMod".into(), Recipe { 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() }), ("ItemAdvancedTablet".into(), Recipe { 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() }), ("ItemAreaPowerControl".into(), Recipe { 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() }), - ("ItemBatteryCell".into(), Recipe { tier : MachineTier::TierOne, time - : 10f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, + 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), ("Gold".into(), 2f64), - ("Iron".into(), 2f64)] .into_iter().collect() }), - ("ItemBatteryCellLarge".into(), Recipe { 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() }), - ("ItemBatteryCellNuclear".into(), Recipe { 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() }), ("ItemBatteryCharger".into(), Recipe { 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() }), - ("ItemBatteryChargerSmall".into(), Recipe { 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() }), - ("ItemCableAnalyser".into(), Recipe { 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() }), ("ItemCableCoil" - .into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : - 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + 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 : 1i64, reagents : - vec![("Copper".into(), 0.5f64)] .into_iter().collect() }), - ("ItemCableCoilHeavy".into(), Recipe { 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() }), ("ItemCableFuse".into(), Recipe { 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() }), ("ItemCreditCard".into(), - Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 200f64, + .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 : 2i64, reagents : vec![("Copper".into(), - 2f64), ("Silicon".into(), 5f64)] .into_iter().collect() }), - ("ItemDataDisk".into(), Recipe { 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() }), ("ItemElectronicParts".into(), Recipe { - tier : MachineTier::TierOne, time : 5f64, energy : 10f64, temperature - : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + .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(), 3f64), ("Gold" - .into(), 2f64), ("Iron".into(), 3f64)] .into_iter().collect() }), - ("ItemFlashingLight".into(), Recipe { 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 : + 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 : 2i64, - reagents : vec![("Copper".into(), 3f64), ("Iron".into(), 2f64)] - .into_iter().collect() }), ("ItemHEMDroidRepairKit".into(), Recipe { + 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, @@ -30476,25 +30796,831 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< : 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() }), ("ItemIntegratedCircuit10".into(), Recipe - { tier : MachineTier::TierOne, time : 40f64, energy : 4000f64, + .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 : 4i64, reagents : vec![("Electrum".into(), - 5f64), ("Gold".into(), 10f64), ("Solder".into(), 2f64), ("Steel" - .into(), 4f64)] .into_iter().collect() }), ("ItemKitAIMeE".into(), - Recipe { tier : MachineTier::TierTwo, time : 25f64, energy : 2200f64, + .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 : 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() }), - ("ItemKitAdvancedComposter".into(), Recipe { tier : + .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 : @@ -30502,615 +31628,247 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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() }), ("ItemKitAdvancedFurnace".into(), - Recipe { 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() }), - ("ItemKitAdvancedPackagingMachine".into(), Recipe { 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() }), ("ItemKitAutoMinerSmall" - .into(), Recipe { 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() }), ("ItemKitAutomatedOven".into(), Recipe { - tier : MachineTier::TierTwo, time : 50f64, energy : 15000f64, + 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 : 5i64, reagents : vec![("Constantan" - .into(), 5f64), ("Copper".into(), 15f64), ("Gold".into(), 10f64), - ("Solder".into(), 10f64), ("Steel".into(), 25f64)] .into_iter() - .collect() }), ("ItemKitBattery".into(), Recipe { tier : - MachineTier::TierOne, time : 120f64, energy : 12000f64, temperature : + .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(), 20f64), ("Gold" - .into(), 20f64), ("Steel".into(), 20f64)] .into_iter().collect() }), - ("ItemKitBatteryLarge".into(), Recipe { tier : MachineTier::TierTwo, - time : 240f64, energy : 96000f64, temperature : RecipeRange { start : + 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 : 6i64, - reagents : vec![("Copper".into(), 35f64), ("Electrum".into(), 10f64), - ("Gold".into(), 35f64), ("Silicon".into(), 5f64), ("Steel".into(), - 35f64), ("Stellite".into(), 2f64)] .into_iter().collect() }), - ("ItemKitBeacon".into(), Recipe { 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() }), ("ItemKitComputer".into(), Recipe { 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() }), - ("ItemKitConsole".into(), Recipe { 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() }), - ("ItemKitDynamicGenerator".into(), Recipe { 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() }), ("ItemKitElevator".into(), Recipe { 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() }), ("ItemKitFridgeBig".into(), Recipe { 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() }), ("ItemKitFridgeSmall".into(), Recipe { - 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() }), ("ItemKitGasGenerator".into(), Recipe { 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() }), ("ItemKitGroundTelescope" - .into(), Recipe { 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() }), ("ItemKitGrowLight" - .into(), Recipe { 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() }), ("ItemKitHarvie".into(), - Recipe { 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() }), ("ItemKitHorizontalAutoMiner".into(), Recipe { 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() }), - ("ItemKitHydroponicStation".into(), Recipe { 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() }), ("ItemKitLandingPadAtmos".into(), Recipe { - 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() }), - ("ItemKitLandingPadBasic".into(), Recipe { 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() }), - ("ItemKitLandingPadWaypoint".into(), Recipe { 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() }), - ("ItemKitLargeSatelliteDish".into(), Recipe { 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() }), ("ItemKitLinearRail".into(), Recipe { 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() }), ("ItemKitLogicCircuit".into(), Recipe { - 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() }), ("ItemKitLogicInputOutput".into(), Recipe { 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() }), ("ItemKitLogicMemory" - .into(), Recipe { 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() }), ("ItemKitLogicProcessor".into(), Recipe { 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() }), ("ItemKitLogicSwitch" - .into(), Recipe { 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() }), ("ItemKitLogicTransmitter".into(), Recipe { 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() }), ("ItemKitMusicMachines".into(), - Recipe { 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() }), - ("ItemKitPowerTransmitter".into(), Recipe { 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() }), - ("ItemKitPowerTransmitterOmni".into(), Recipe { 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() }), - ("ItemKitPressurePlate".into(), Recipe { tier : MachineTier::TierOne, - time : 10f64, energy : 1000f64, temperature : RecipeRange { start : + 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 : 2i64, - reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 2f64)] - .into_iter().collect() }), ("ItemKitResearchMachine".into(), Recipe { - tier : MachineTier::TierOne, time : 5f64, energy : 10f64, temperature - : RecipeRange { start : 1f64, stop : 80000f64, is_valid : 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 : 3i64, reagents : vec![("Copper".into(), 3f64), ("Gold" - .into(), 2f64), ("Iron".into(), 9f64)] .into_iter().collect() }), - ("ItemKitRoboticArm".into(), Recipe { tier : MachineTier::TierOne, - time : 150f64, energy : 10000f64, temperature : RecipeRange { start : + 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![("Astroloy".into(), 15f64), ("Hastelloy".into(), - 5f64), ("Inconel".into(), 10f64)] .into_iter().collect() }), - ("ItemKitSatelliteDish".into(), Recipe { 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() }), ("ItemKitSensor" - .into(), Recipe { 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() }), ("ItemKitSmallSatelliteDish" - .into(), Recipe { 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() }), ("ItemKitSolarPanel".into(), Recipe { 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() }), - ("ItemKitSolarPanelBasic".into(), Recipe { 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() }), - ("ItemKitSolarPanelBasicReinforced".into(), Recipe { 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() }), ("ItemKitSolarPanelReinforced" - .into(), Recipe { 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() }), ("ItemKitSolidGenerator".into(), Recipe { 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() }), ("ItemKitSpeaker".into(), - Recipe { 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() }), ("ItemKitStirlingEngine".into(), Recipe { 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() }), - ("ItemKitTransformer".into(), Recipe { 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() }), ("ItemKitTransformerSmall".into(), Recipe - { 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() }), ("ItemKitTurbineGenerator".into(), Recipe { 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() }), ("ItemKitUprightWindTurbine".into(), - Recipe { 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() }), ("ItemKitVendingMachine".into(), - Recipe { tier : MachineTier::TierOne, time : 60f64, energy : - 15000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + 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![("Electrum".into(), 50f64), ("Gold".into(), 50f64), ("Solder" - .into(), 10f64), ("Steel".into(), 20f64)] .into_iter().collect() }), - ("ItemKitVendingMachineRefrigerated".into(), Recipe { 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() }), ("ItemKitWeatherStation".into(), - Recipe { 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() }), - ("ItemKitWindTurbine".into(), Recipe { tier : MachineTier::TierTwo, - time : 60f64, energy : 12000f64, temperature : RecipeRange { start : + 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(), 10f64), ("Electrum".into(), 5f64), - ("Steel".into(), 20f64)] .into_iter().collect() }), ("ItemLabeller" - .into(), Recipe { tier : MachineTier::TierOne, time : 15f64, energy : - 800f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + 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(), - 3f64)] .into_iter().collect() }), ("ItemLaptop".into(), Recipe { 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() }), - ("ItemPowerConnector".into(), Recipe { 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() }), - ("ItemResearchCapsule".into(), Recipe { 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() }), - ("ItemResearchCapsuleGreen".into(), Recipe { 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() }), ("ItemResearchCapsuleRed".into(), - Recipe { tier : MachineTier::TierOne, time : 8f64, energy : 50f64, + 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(), - 3f64), ("Gold".into(), 2f64), ("Iron".into(), 2f64)] .into_iter() - .collect() }), ("ItemResearchCapsuleYellow".into(), Recipe { tier : - MachineTier::TierOne, time : 5f64, energy : 1000f64, temperature : + 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 : 4i64, reagents : vec![("Astroloy".into(), 3f64), - ("Copper".into(), 3f64), ("Gold".into(), 2f64), ("Iron".into(), - 9f64)] .into_iter().collect() }), ("ItemSoundCartridgeBass".into(), - Recipe { 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() }), ("ItemSoundCartridgeDrums".into(), Recipe { 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() }), - ("ItemSoundCartridgeLeads".into(), Recipe { 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() }), - ("ItemSoundCartridgeSynth".into(), Recipe { 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() }), - ("ItemTablet".into(), Recipe { tier : MachineTier::TierOne, time : - 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop - : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 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 : 3i64, - reagents : vec![("Copper".into(), 3f64), ("Gold".into(), 2f64), - ("Solder".into(), 5f64)] .into_iter().collect() }), ("ItemWallLight" - .into(), Recipe { 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() }), ("MotherboardComms".into(), Recipe { tier : - MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + 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 : 4i64, reagents : vec![("Copper".into(), 5f64), - ("Electrum".into(), 2f64), ("Gold".into(), 5f64), ("Silver".into(), - 5f64)] .into_iter().collect() }), ("MotherboardLogic".into(), Recipe - { 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() }), - ("MotherboardProgrammableChip".into(), Recipe { 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() }), ("MotherboardRockets" - .into(), Recipe { 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() }), ("MotherboardSorter".into(), Recipe { 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() }), ("PipeBenderMod".into(), - Recipe { 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() }), ("PortableComposter".into(), Recipe { 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() }), - ("PortableSolarPanel".into(), Recipe { tier : MachineTier::TierOne, - time : 5f64, energy : 200f64, temperature : RecipeRange { start : + 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(), 3f64), - ("Iron".into(), 5f64)] .into_iter().collect() }), ("ToolPrinterMod" - .into(), Recipe { 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() }) + 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(), @@ -31952,8 +32710,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()), ("2".into(), vec![] .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()), (2, vec![] .into_iter().collect()) ] .into_iter() .collect(), @@ -32026,18 +32784,18 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Idle".into()), ("1".into(), "Active".into())] - .into_iter() - .collect(), + vec![(0, "Idle".into()), (1, "Active".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: true, }, slots: vec![ - SlotInfo { name : "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo - { name : "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo { name : - "Programmable Chip".into(), typ : Class::ProgrammableChip } + (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(), @@ -32145,7 +32903,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -32168,7 +32926,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -32301,7 +33062,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -32309,113 +33070,113 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -32462,17 +33223,24 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None } + (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(), @@ -32515,7 +33283,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -32523,9 +33291,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -32570,8 +33338,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None } + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }) ] .into_iter() .collect(), @@ -32613,8 +33382,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) ] .into_iter() .collect(), @@ -32653,17 +33422,16 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] - .into_iter() - .collect(), + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None } + (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(), @@ -32969,7 +33737,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -33006,7 +33774,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::GasCanister, index : 0u32 }) ] .into_iter() .collect(), @@ -33156,10 +33925,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![ - ("0".into(), "Left".into()), ("1".into(), "Center".into()), ("2" - .into(), "Right".into()) - ] + vec![(0, "Left".into()), (1, "Center".into()), (2, "Right".into())] .into_iter() .collect(), ), @@ -33216,7 +33982,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] + vec![(0, "Operate".into()), (1, "Logic".into())] .into_iter() .collect(), ), @@ -33451,7 +34217,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -33459,17 +34225,17 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -33496,8 +34262,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Idle".into()), ("1".into(), "Happy".into()), ("2" - .into(), "UnHappy".into()), ("3".into(), "Dead".into()) + (0, "Idle".into()), (1, "Happy".into()), (2, "UnHappy".into()), + (3, "Dead".into()) ] .into_iter() .collect(), @@ -33507,9 +34273,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::Plant }, SlotInfo { name - : "Export".into(), typ : Class::None }, SlotInfo { name : "Hand".into(), - typ : Class::None } + (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(), @@ -33709,8 +34476,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) ] .into_iter() .collect(), @@ -33729,17 +34496,16 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] - .into_iter() - .collect(), + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None } + (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(), @@ -33782,8 +34548,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) ] .into_iter() .collect(), @@ -33809,8 +34575,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { name - : "Export".into(), typ : Class::None } + (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(), @@ -33853,319 +34620,680 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< fabricator_info: Some(FabricatorInfo { tier: MachineTier::Undefined, recipes: vec![ - ("ApplianceSeedTray".into(), Recipe { tier : MachineTier::TierOne, - time : 10f64, energy : 500f64, temperature : RecipeRange { start : + 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 : 3i64, - reagents : vec![("Copper".into(), 5f64), ("Iron".into(), 10f64), - ("Silicon".into(), 15f64)] .into_iter().collect() }), - ("ItemActiveVent".into(), Recipe { tier : MachineTier::TierOne, time - : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + 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 : 3i64, - reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 1f64), - ("Iron".into(), 5f64)] .into_iter().collect() }), - ("ItemAdhesiveInsulation".into(), Recipe { 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() }), - ("ItemDynamicAirCon".into(), Recipe { 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() }), ("ItemDynamicScrubber".into(), Recipe { 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() }), ("ItemGasCanisterEmpty".into(), Recipe { - 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() }), ("ItemGasCanisterSmart".into(), - Recipe { 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() }), ("ItemGasFilterCarbonDioxide".into(), - Recipe { 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() }), ("ItemGasFilterCarbonDioxideL" - .into(), Recipe { 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() }), - ("ItemGasFilterCarbonDioxideM".into(), Recipe { 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() }), ("ItemGasFilterNitrogen".into(), Recipe { 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() }), ("ItemGasFilterNitrogenL".into(), Recipe { - 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() }), ("ItemGasFilterNitrogenM".into(), Recipe { - 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() }), ("ItemGasFilterNitrousOxide".into(), - Recipe { 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() }), ("ItemGasFilterNitrousOxideL" - .into(), Recipe { 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() }), - ("ItemGasFilterNitrousOxideM".into(), Recipe { 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() }), ("ItemGasFilterOxygen".into(), Recipe { 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() }), ("ItemGasFilterOxygenL".into(), Recipe { - 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() }), ("ItemGasFilterOxygenM".into(), Recipe { - 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() }), ("ItemGasFilterPollutants".into(), Recipe - { 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() }), ("ItemGasFilterPollutantsL".into(), - Recipe { 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() }), ("ItemGasFilterPollutantsM".into(), Recipe - { 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() }), ("ItemGasFilterVolatiles".into(), Recipe { - 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() }), ("ItemGasFilterVolatilesL".into(), - Recipe { 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() }), ("ItemGasFilterVolatilesM".into(), Recipe - { 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() }), ("ItemGasFilterWater".into(), Recipe { - 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() }), ("ItemGasFilterWaterL".into(), - Recipe { 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() }), ("ItemGasFilterWaterM".into(), Recipe { - 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() }), ("ItemHydroponicTray".into(), Recipe { - 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() }), ("ItemKitAirlock".into(), Recipe { - 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() }), ("ItemKitAirlockGate".into(), Recipe { 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() }), - ("ItemKitAtmospherics".into(), Recipe { 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() }), ("ItemKitChute" - .into(), Recipe { 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() }), ("ItemKitCryoTube".into(), - Recipe { 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() }), - ("ItemKitDrinkingFountain".into(), Recipe { 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() }), - ("ItemKitDynamicCanister".into(), Recipe { tier : + 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() }), ("ItemKitDynamicGasTankAdvanced".into(), - Recipe { 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() }), - ("ItemKitDynamicHydroponics".into(), Recipe { 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() }), ("ItemKitDynamicLiquidCanister".into(), Recipe { 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() }), ("ItemKitDynamicMKIILiquidCanister" - .into(), Recipe { tier : MachineTier::TierTwo, time : 40f64, energy : + .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() }), - ("ItemKitEvaporationChamber".into(), Recipe { tier : + .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 : @@ -34173,467 +35301,102 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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() }), ("ItemKitHeatExchanger".into(), Recipe { 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() }), ("ItemKitIceCrusher" - .into(), Recipe { 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() }), ("ItemKitInsulatedLiquidPipe" - .into(), Recipe { 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() }), ("ItemKitInsulatedPipe".into(), Recipe { 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() }), - ("ItemKitInsulatedPipeUtility".into(), Recipe { 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() }), - ("ItemKitInsulatedPipeUtilityLiquid".into(), Recipe { 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() }), - ("ItemKitLargeDirectHeatExchanger".into(), Recipe { 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() }), - ("ItemKitLargeExtendableRadiator".into(), Recipe { 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() }), ("ItemKitLiquidRegulator".into(), Recipe { 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() }), - ("ItemKitLiquidTank".into(), Recipe { 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() }), ("ItemKitLiquidTankInsulated".into(), - Recipe { 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() }), ("ItemKitLiquidTurboVolumePump".into(), - Recipe { 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() }), - ("ItemKitPassiveLargeRadiatorGas".into(), Recipe { 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() }), - ("ItemKitPassiveLargeRadiatorLiquid".into(), Recipe { 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() }), - ("ItemKitPassthroughHeatExchanger".into(), Recipe { 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() }), ("ItemKitPipe".into(), - Recipe { 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() }), ("ItemKitPipeLiquid".into(), - Recipe { 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() }), ("ItemKitPipeOrgan".into(), - Recipe { 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() }), ("ItemKitPipeRadiator".into(), - Recipe { 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() }), - ("ItemKitPipeRadiatorLiquid".into(), Recipe { tier : + .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() }), ("ItemKitPipeUtility" - .into(), Recipe { 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() }), - ("ItemKitPipeUtilityLiquid".into(), Recipe { 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() }), ("ItemKitPlanter".into(), Recipe { tier : + .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 : 1i64, reagents : vec![("Iron".into(), 10f64)] - .into_iter().collect() }), ("ItemKitPortablesConnector".into(), - Recipe { 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() }), ("ItemKitPoweredVent".into(), - Recipe { 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() }), ("ItemKitRegulator".into(), Recipe { 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() }), - ("ItemKitShower".into(), Recipe { 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() }), - ("ItemKitSleeper".into(), Recipe { 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() }), - ("ItemKitSmallDirectHeatExchanger".into(), Recipe { 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() }), ("ItemKitStandardChute" - .into(), Recipe { 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() }), ("ItemKitSuitStorage" - .into(), Recipe { 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() }), ("ItemKitTank".into(), - Recipe { 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() }), - ("ItemKitTankInsulated".into(), Recipe { 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() }), - ("ItemKitTurboVolumePump".into(), Recipe { 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() }), ("ItemKitWaterBottleFiller".into(), - Recipe { 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() }), ("ItemKitWaterPurifier".into(), Recipe { 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() }), - ("ItemLiquidCanisterEmpty".into(), Recipe { 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() }), ("ItemLiquidCanisterSmart".into(), Recipe - { 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() }), ("ItemLiquidDrain".into(), Recipe { 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() }), ("ItemLiquidPipeAnalyzer" - .into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : + .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![("Electrum".into(), 2f64), ("Gold".into(), 2f64), ("Iron" - .into(), 2f64)] .into_iter().collect() }), ("ItemLiquidPipeHeater" - .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : + 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() }), ("ItemLiquidPipeValve".into(), - Recipe { 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() }), - ("ItemLiquidPipeVolumePump".into(), Recipe { tier : + 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(), 2f64), ("Iron".into(), 5f64)] .into_iter().collect() }), - ("ItemPassiveVent".into(), Recipe { tier : MachineTier::TierOne, time + .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(), 3f64)] .into_iter().collect() }), - ("ItemPassiveVentInsulated".into(), Recipe { 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() }), - ("ItemPipeAnalyizer".into(), Recipe { 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() }), ("ItemPipeCowl" - .into(), Recipe { 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() }), ("ItemPipeDigitalValve" - .into(), Recipe { tier : MachineTier::TierOne, time : 15f64, energy : + 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(), 2f64), ("Invar".into(), 3f64), ("Steel" - .into(), 5f64)] .into_iter().collect() }), ("ItemPipeGasMixer" - .into(), Recipe { 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() }), ("ItemPipeHeater".into(), Recipe { - 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() }), ("ItemPipeIgniter".into(), Recipe { 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() }), ("ItemPipeLabel" - .into(), Recipe { 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() }), ("ItemPipeMeter".into(), - Recipe { 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() }), - ("ItemPipeValve".into(), Recipe { 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() }), ("ItemPipeVolumePump".into(), Recipe { - 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() }), ("ItemWallCooler".into(), Recipe { 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() }), - ("ItemWallHeater".into(), Recipe { 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() }), ("ItemWaterBottle" - .into(), Recipe { 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() }), - ("ItemWaterPipeDigitalValve".into(), Recipe { 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() }), - ("ItemWaterPipeMeter".into(), Recipe { 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() }), ("ItemWaterWallCooler".into(), Recipe { + 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, @@ -34641,7 +35404,93 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< : 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() }) + .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(), @@ -35025,7 +35874,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -35037,9 +35886,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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, @@ -35049,9 +35898,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("2".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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, @@ -35061,9 +35910,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("3".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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, @@ -35073,9 +35922,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("4".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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, @@ -35085,9 +35934,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("5".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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, @@ -35097,9 +35946,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("6".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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, @@ -35109,9 +35958,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("7".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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, @@ -35161,13 +36010,16 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : - "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), - typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : - Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, - SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : - "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), - typ : Class::Plant } + (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(), @@ -35210,8 +36062,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : - "Fertiliser".into(), typ : Class::Plant } + (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(), @@ -35236,7 +36089,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -35249,9 +36102,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Seeding, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -35293,8 +36146,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : - "Fertiliser".into(), typ : Class::Plant } + (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(), @@ -35338,7 +36192,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] + logic_slot_types: vec![(0, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -35360,7 +36214,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Import".into(), typ : Class::Ore }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::Ore, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -35877,7 +36734,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }) + ] .into_iter() .collect(), } @@ -35898,7 +36758,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Portable Slot".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Portable Slot".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -35931,7 +36794,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] + vec![(0, "Operate".into()), (1, "Logic".into())] .into_iter() .collect(), ), @@ -35982,7 +36845,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] + vec![(0, "Operate".into()), (1, "Logic".into())] .into_iter() .collect(), ), @@ -36033,7 +36896,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] + vec![(0, "Operate".into()), (1, "Logic".into())] .into_iter() .collect(), ), @@ -36084,7 +36947,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] + vec![(0, "Operate".into()), (1, "Logic".into())] .into_iter() .collect(), ), @@ -36136,33 +36999,26 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "None".into()), ("1".into(), "Alarm2".into()), ("2" - .into(), "Alarm3".into()), ("3".into(), "Alarm4".into()), ("4" - .into(), "Alarm5".into()), ("5".into(), "Alarm6".into()), ("6" - .into(), "Alarm7".into()), ("7".into(), "Music1".into()), ("8" - .into(), "Music2".into()), ("9".into(), "Music3".into()), ("10" - .into(), "Alarm8".into()), ("11".into(), "Alarm9".into()), ("12" - .into(), "Alarm10".into()), ("13".into(), "Alarm11".into()), - ("14".into(), "Alarm12".into()), ("15".into(), "Danger".into()), - ("16".into(), "Warning".into()), ("17".into(), "Alert".into()), - ("18".into(), "StormIncoming".into()), ("19".into(), - "IntruderAlert".into()), ("20".into(), "Depressurising".into()), - ("21".into(), "Pressurising".into()), ("22".into(), - "AirlockCycling".into()), ("23".into(), "PowerLow".into()), ("24" - .into(), "SystemFailure".into()), ("25".into(), "Welcome" - .into()), ("26".into(), "MalfunctionDetected".into()), ("27" - .into(), "HaltWhoGoesThere".into()), ("28".into(), "FireFireFire" - .into()), ("29".into(), "One".into()), ("30".into(), "Two" - .into()), ("31".into(), "Three".into()), ("32".into(), "Four" - .into()), ("33".into(), "Five".into()), ("34".into(), "Floor" - .into()), ("35".into(), "RocketLaunching".into()), ("36".into(), - "LiftOff".into()), ("37".into(), "TraderIncoming".into()), ("38" - .into(), "TraderLanded".into()), ("39".into(), "PressureHigh" - .into()), ("40".into(), "PressureLow".into()), ("41".into(), - "TemperatureHigh".into()), ("42".into(), "TemperatureLow" - .into()), ("43".into(), "PollutantsDetected".into()), ("44" - .into(), "HighCarbonDioxide".into()), ("45".into(), "Alarm1" - .into()) + (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(), @@ -36457,7 +37313,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] + vec![(0, "Operate".into()), (1, "Logic".into())] .into_iter() .collect(), ), @@ -36552,6 +37408,390 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< } .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 { @@ -37452,7 +38692,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -37489,7 +38729,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister } + (0u32, SlotInfo::Direct { name : "Liquid Canister".into(), class : + Class::LiquidCanister, index : 0u32 }) ] .into_iter() .collect(), @@ -37543,9 +38784,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Right".into()), ("1".into(), "Left".into())] - .into_iter() - .collect(), + vec![(0, "Right".into()), (1, "Left".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, @@ -37701,10 +38940,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![ - ("0".into(), "Left".into()), ("1".into(), "Center".into()), ("2" - .into(), "Right".into()) - ] + vec![(0, "Left".into()), (1, "Center".into()), (2, "Right".into())] .into_iter() .collect(), ), @@ -37853,7 +39089,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -37861,25 +39097,25 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -37903,9 +39139,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None } + (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(), @@ -38156,8 +39394,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Equals".into()), ("1".into(), "Greater".into()), - ("2".into(), "Less".into()), ("3".into(), "NotEquals".into()) + (0, "Equals".into()), (1, "Greater".into()), (2, "Less".into()), + (3, "NotEquals".into()) ] .into_iter() .collect(), @@ -38266,9 +39504,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "AND".into()), ("1".into(), "OR".into()), ("2" - .into(), "XOR".into()), ("3".into(), "NAND".into()), ("4".into(), - "NOR".into()), ("5".into(), "XNOR".into()) + (0, "AND".into()), (1, "OR".into()), (2, "XOR".into()), (3, + "NAND".into()), (4, "NOR".into()), (5, "XNOR".into()) ] .into_iter() .collect(), @@ -38377,10 +39614,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Add".into()), ("1".into(), "Subtract".into()), ("2" - .into(), "Multiply".into()), ("3".into(), "Divide".into()), ("4" - .into(), "Mod".into()), ("5".into(), "Atan2".into()), ("6" - .into(), "Pow".into()), ("7".into(), "Log".into()) + (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(), @@ -38441,14 +39677,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Ceil".into()), ("1".into(), "Floor".into()), ("2" - .into(), "Abs".into()), ("3".into(), "Log".into()), ("4".into(), - "Exp".into()), ("5".into(), "Round".into()), ("6".into(), "Rand" - .into()), ("7".into(), "Sqrt".into()), ("8".into(), "Sin" - .into()), ("9".into(), "Cos".into()), ("10".into(), "Tan" - .into()), ("11".into(), "Asin".into()), ("12".into(), "Acos" - .into()), ("13".into(), "Atan".into()), ("14".into(), "Not" - .into()) + (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(), @@ -38554,9 +39787,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Greater".into()), ("1".into(), "Less".into())] - .into_iter() - .collect(), + vec![(0, "Greater".into()), (1, "Less".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, @@ -38858,8 +40089,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Equals".into()), ("1".into(), "Greater".into()), - ("2".into(), "Less".into()), ("3".into(), "NotEquals".into()) + (0, "Equals".into()), (1, "Greater".into()), (2, "Less".into()), + (3, "NotEquals".into()) ] .into_iter() .collect(), @@ -38959,7 +40190,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -38967,25 +40198,25 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -39009,10 +40240,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![ - ("0".into(), "All".into()), ("1".into(), "Any".into()), ("2" - .into(), "None".into()) - ] + vec![(0, "All".into()), (1, "Any".into()), (2, "None".into())] .into_iter() .collect(), ), @@ -39021,10 +40249,12 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None }, SlotInfo { name : "Export 2" - .into(), typ : Class::None }, SlotInfo { name : "Data Disk".into(), typ : - Class::DataDisk } + (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(), @@ -39436,7 +40666,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< logic_slot_types: vec![].into_iter().collect(), logic_types: vec![].into_iter().collect(), modes: Some( - vec![("0".into(), "Passive".into()), ("1".into(), "Active".into())] + vec![(0, "Passive".into()), (1, "Active".into())] .into_iter() .collect(), ), @@ -39601,7 +40831,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] + vec![(0, "Operate".into()), (1, "Logic".into())] .into_iter() .collect(), ), @@ -39758,7 +40988,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Operate".into()), ("1".into(), "Logic".into())] + vec![(0, "Operate".into()), (1, "Logic".into())] .into_iter() .collect(), ), @@ -40109,7 +41339,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -40208,17 +41438,15 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Idle".into()), ("1".into(), "Active".into())] - .into_iter() - .collect(), + vec![(0, "Idle".into()), (1, "Active".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: true, }, slots: vec![ - SlotInfo { name : "Programmable Chip".into(), typ : - Class::ProgrammableChip } + (0u32, SlotInfo::Direct { name : "Programmable Chip".into(), class : + Class::ProgrammableChip, index : 0u32 }) ] .into_iter() .collect(), @@ -40310,7 +41538,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -40318,9 +41546,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -40344,8 +41572,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None } + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }) ] .into_iter() .collect(), @@ -40378,7 +41607,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -40386,73 +41615,73 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -40476,14 +41705,18 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None } + (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(), @@ -41953,8 +43186,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : - "Plant".into(), typ : Class::Plant } + (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(), @@ -41988,7 +43222,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, - slots: vec![SlotInfo { name : "".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }) + ] .into_iter() .collect(), } @@ -42008,7 +43245,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -42034,7 +43271,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Portables".into(), typ : Class::Portables }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Portables".into(), class : + Class::Portables, index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -42073,7 +43313,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -42097,7 +43337,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Portable Slot".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Portable Slot".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -42152,7 +43395,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Unlinked".into()), ("1".into(), "Linked".into())] + vec![(0, "Unlinked".into()), (1, "Linked".into())] .into_iter() .collect(), ), @@ -42264,7 +43507,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Unlinked".into()), ("1".into(), "Linked".into())] + vec![(0, "Unlinked".into()), (1, "Linked".into())] .into_iter() .collect(), ), @@ -42412,10 +43655,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![ - ("0".into(), "Left".into()), ("1".into(), "Center".into()), ("2" - .into(), "Right".into()) - ] + vec![(0, "Left".into()), (1, "Center".into()), (2, "Right".into())] .into_iter() .collect(), ), @@ -42473,7 +43713,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Outward".into()), ("1".into(), "Inward".into())] + vec![(0, "Outward".into()), (1, "Inward".into())] .into_iter() .collect(), ), @@ -42532,7 +43772,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Outward".into()), ("1".into(), "Inward".into())] + vec![(0, "Outward".into()), (1, "Inward".into())] .into_iter() .collect(), ), @@ -43178,7 +44418,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -43186,9 +44426,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -43217,8 +44457,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None } + (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(), @@ -43264,82 +44505,65 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()), ("2".into(), vec![] .into_iter().collect()), - ("3".into(), vec![] .into_iter().collect()), ("4".into(), vec![] - .into_iter().collect()), ("5".into(), vec![] .into_iter().collect()), - ("6".into(), vec![] .into_iter().collect()), ("7".into(), vec![] - .into_iter().collect()), ("8".into(), vec![] .into_iter().collect()), - ("9".into(), vec![] .into_iter().collect()), ("10".into(), vec![] - .into_iter().collect()), ("11".into(), vec![] .into_iter() - .collect()), ("12".into(), vec![] .into_iter().collect()), ("13" - .into(), vec![] .into_iter().collect()), ("14".into(), vec![] - .into_iter().collect()), ("15".into(), vec![] .into_iter() - .collect()), ("16".into(), vec![] .into_iter().collect()), ("17" - .into(), vec![] .into_iter().collect()), ("18".into(), vec![] - .into_iter().collect()), ("19".into(), vec![] .into_iter() - .collect()), ("20".into(), vec![] .into_iter().collect()), ("21" - .into(), vec![] .into_iter().collect()), ("22".into(), vec![] - .into_iter().collect()), ("23".into(), vec![] .into_iter() - .collect()), ("24".into(), vec![] .into_iter().collect()), ("25" - .into(), vec![] .into_iter().collect()), ("26".into(), vec![] - .into_iter().collect()), ("27".into(), vec![] .into_iter() - .collect()), ("28".into(), vec![] .into_iter().collect()), ("29" - .into(), vec![] .into_iter().collect()), ("30".into(), vec![] - .into_iter().collect()), ("31".into(), vec![] .into_iter() - .collect()), ("32".into(), vec![] .into_iter().collect()), ("33" - .into(), vec![] .into_iter().collect()), ("34".into(), vec![] - .into_iter().collect()), ("35".into(), vec![] .into_iter() - .collect()), ("36".into(), vec![] .into_iter().collect()), ("37" - .into(), vec![] .into_iter().collect()), ("38".into(), vec![] - .into_iter().collect()), ("39".into(), vec![] .into_iter() - .collect()), ("40".into(), vec![] .into_iter().collect()), ("41" - .into(), vec![] .into_iter().collect()), ("42".into(), vec![] - .into_iter().collect()), ("43".into(), vec![] .into_iter() - .collect()), ("44".into(), vec![] .into_iter().collect()), ("45" - .into(), vec![] .into_iter().collect()), ("46".into(), vec![] - .into_iter().collect()), ("47".into(), vec![] .into_iter() - .collect()), ("48".into(), vec![] .into_iter().collect()), ("49" - .into(), vec![] .into_iter().collect()), ("50".into(), vec![] - .into_iter().collect()), ("51".into(), vec![] .into_iter() - .collect()), ("52".into(), vec![] .into_iter().collect()), ("53" - .into(), vec![] .into_iter().collect()), ("54".into(), vec![] - .into_iter().collect()), ("55".into(), vec![] .into_iter() - .collect()), ("56".into(), vec![] .into_iter().collect()), ("57" - .into(), vec![] .into_iter().collect()), ("58".into(), vec![] - .into_iter().collect()), ("59".into(), vec![] .into_iter() - .collect()), ("60".into(), vec![] .into_iter().collect()), ("61" - .into(), vec![] .into_iter().collect()), ("62".into(), vec![] - .into_iter().collect()), ("63".into(), vec![] .into_iter() - .collect()), ("64".into(), vec![] .into_iter().collect()), ("65" - .into(), vec![] .into_iter().collect()), ("66".into(), vec![] - .into_iter().collect()), ("67".into(), vec![] .into_iter() - .collect()), ("68".into(), vec![] .into_iter().collect()), ("69" - .into(), vec![] .into_iter().collect()), ("70".into(), vec![] - .into_iter().collect()), ("71".into(), vec![] .into_iter() - .collect()), ("72".into(), vec![] .into_iter().collect()), ("73" - .into(), vec![] .into_iter().collect()), ("74".into(), vec![] - .into_iter().collect()), ("75".into(), vec![] .into_iter() - .collect()), ("76".into(), vec![] .into_iter().collect()), ("77" - .into(), vec![] .into_iter().collect()), ("78".into(), vec![] - .into_iter().collect()), ("79".into(), vec![] .into_iter() - .collect()), ("80".into(), vec![] .into_iter().collect()), ("81" - .into(), vec![] .into_iter().collect()), ("82".into(), vec![] - .into_iter().collect()), ("83".into(), vec![] .into_iter() - .collect()), ("84".into(), vec![] .into_iter().collect()), ("85" - .into(), vec![] .into_iter().collect()), ("86".into(), vec![] - .into_iter().collect()), ("87".into(), vec![] .into_iter() - .collect()), ("88".into(), vec![] .into_iter().collect()), ("89" - .into(), vec![] .into_iter().collect()), ("90".into(), vec![] - .into_iter().collect()), ("91".into(), vec![] .into_iter() - .collect()), ("92".into(), vec![] .into_iter().collect()), ("93" - .into(), vec![] .into_iter().collect()), ("94".into(), vec![] - .into_iter().collect()), ("95".into(), vec![] .into_iter() - .collect()), ("96".into(), vec![] .into_iter().collect()), ("97" - .into(), vec![] .into_iter().collect()), ("98".into(), vec![] - .into_iter().collect()), ("99".into(), vec![] .into_iter() - .collect()), ("100".into(), vec![] .into_iter().collect()), ("101" - .into(), vec![] .into_iter().collect()) + (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(), @@ -43385,88 +44609,142 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), - typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None } + (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(), @@ -43638,7 +44916,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -43667,7 +44945,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Arm Slot".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Arm Slot".into(), class : Class::None, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -43851,9 +45132,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Invalid".into()), ("1".into(), "None".into()), ("2" - .into(), "Mine".into()), ("3".into(), "Survey".into()), ("4" - .into(), "Discover".into()), ("5".into(), "Chart".into()) + (0, "Invalid".into()), (1, "None".into()), (2, "Mine".into()), + (3, "Survey".into()), (4, "Discover".into()), (5, "Chart".into()) ] .into_iter() .collect(), @@ -44017,7 +45297,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -44047,8 +45327,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: true, }, slots: vec![ - SlotInfo { name : "Programmable Chip".into(), typ : - Class::ProgrammableChip } + (0u32, SlotInfo::Direct { name : "Programmable Chip".into(), class : + Class::ProgrammableChip, index : 0u32 }) ] .into_iter() .collect(), @@ -44161,8 +45441,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) ] .into_iter() .collect(), @@ -44188,8 +45468,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { name - : "Export".into(), typ : Class::None } + (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(), @@ -44232,165 +45513,134 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< fabricator_info: Some(FabricatorInfo { tier: MachineTier::Undefined, recipes: vec![ - ("ItemKitAccessBridge".into(), Recipe { 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() }), - ("ItemKitChuteUmbilical".into(), Recipe { 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() }), - ("ItemKitElectricUmbilical".into(), Recipe { tier : + 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() }), ("ItemKitFuselage".into(), - Recipe { tier : MachineTier::TierOne, time : 120f64, energy : - 60000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + .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 : 1i64, reagents : - vec![("Steel".into(), 20f64)] .into_iter().collect() }), - ("ItemKitGasUmbilical".into(), Recipe { 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() }), ("ItemKitGovernedGasRocketEngine".into(), - Recipe { 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() }), ("ItemKitLaunchMount".into(), - Recipe { 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() }), - ("ItemKitLaunchTower".into(), Recipe { 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() }), - ("ItemKitLiquidUmbilical".into(), Recipe { 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() }), - ("ItemKitPressureFedGasEngine".into(), Recipe { 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() }), ("ItemKitPressureFedLiquidEngine" - .into(), Recipe { 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() }), - ("ItemKitPumpedLiquidEngine".into(), Recipe { 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() }), ("ItemKitRocketAvionics".into(), Recipe { 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() }), - ("ItemKitRocketBattery".into(), Recipe { tier : MachineTier::TierOne, + .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() }), - ("ItemKitRocketCargoStorage".into(), Recipe { 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() }), ("ItemKitRocketCelestialTracker".into(), Recipe { 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() }), - ("ItemKitRocketCircuitHousing".into(), Recipe { 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() }), - ("ItemKitRocketDatalink".into(), Recipe { 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() }), - ("ItemKitRocketGasFuelTank".into(), Recipe { tier : + ("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(), 10f64)] .into_iter().collect() }), - ("ItemKitRocketLiquidFuelTank".into(), Recipe { tier : - MachineTier::TierOne, time : 10f64, energy : 5000f64, temperature : + .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![("Copper".into(), 5f64), ("Steel" - .into(), 20f64)] .into_iter().collect() }), ("ItemKitRocketMiner" - .into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : + 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 : @@ -44398,92 +45648,146 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter().collect() }, count_types : 4i64, reagents : vec![("Constantan".into(), 10f64), ("Electrum".into(), 5f64), ("Invar".into(), 5f64), ("Steel".into(), 10f64)] .into_iter() - .collect() }), ("ItemKitRocketScanner".into(), Recipe { 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() }), - ("ItemKitRocketTransformerSmall".into(), Recipe { 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() }), - ("ItemKitStairwell".into(), Recipe { 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 : + .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 : 1i64, - reagents : vec![("Iron".into(), 15f64)] .into_iter().collect() }), - ("ItemRocketMiningDrillHead".into(), Recipe { 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() }), ("ItemRocketMiningDrillHeadDurable" - .into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : - 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + 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 : 2i64, reagents : vec![("Iron" - .into(), 10f64), ("Steel".into(), 10f64)] .into_iter().collect() }), - ("ItemRocketMiningDrillHeadHighSpeedIce".into(), Recipe { 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() }), - ("ItemRocketMiningDrillHeadHighSpeedMineral".into(), Recipe { 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() }), - ("ItemRocketMiningDrillHeadIce".into(), Recipe { 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() }), - ("ItemRocketMiningDrillHeadLongTerm".into(), Recipe { 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() }), - ("ItemRocketMiningDrillHeadMineral".into(), Recipe { 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() }), ("ItemRocketScanningHead" - .into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : + .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() }) + .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(), @@ -44865,8 +46169,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) ] .into_iter() .collect(), @@ -44890,8 +46194,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Export".into(), typ : Class::None }, SlotInfo { name : - "Drill Head Slot".into(), typ : Class::DrillHead } + (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(), @@ -44929,7 +46234,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] + logic_slot_types: vec![(0, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -44948,7 +46253,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Scanner Head Slot".into(), typ : Class::ScanningHead } + (0u32, SlotInfo::Direct { name : "Scanner Head Slot".into(), class : + Class::ScanningHead, index : 0u32 }) ] .into_iter() .collect(), @@ -45070,7 +46376,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] + logic_slot_types: vec![(0, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -45086,7 +46392,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Import".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -45123,7 +46432,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] + logic_slot_types: vec![(0, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -45140,7 +46449,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Import".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -45180,8 +46492,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) ] .into_iter() .collect(), @@ -45201,17 +46513,16 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Mode0".into()), ("1".into(), "Mode1".into())] - .into_iter() - .collect(), + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None } + (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(), @@ -45319,8 +46630,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) ] .into_iter() .collect(), @@ -45346,8 +46657,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { name - : "Export".into(), typ : Class::None } + (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(), @@ -45390,170 +46702,171 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< fabricator_info: Some(FabricatorInfo { tier: MachineTier::Undefined, recipes: vec![ - ("AccessCardBlack".into(), Recipe { 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 : + 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(), 1f64), ("Gold".into(), 1f64), - ("Iron".into(), 1f64)] .into_iter().collect() }), ("AccessCardBlue" - .into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : + 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() }), ("AccessCardBrown".into(), Recipe { - 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() }), ("AccessCardGray".into(), Recipe { tier : + 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() }), - ("AccessCardGreen".into(), Recipe { 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() }), ("AccessCardKhaki" - .into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : + .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() }), ("AccessCardOrange".into(), Recipe - { 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() }), ("AccessCardPink".into(), Recipe { tier : + 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() }), - ("AccessCardPurple".into(), Recipe { tier : MachineTier::TierOne, + .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() }), ("AccessCardRed" - .into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : + ("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() }), ("AccessCardWhite".into(), Recipe { - 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() }), ("AccessCardYellow".into(), Recipe { tier : + 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() }), - ("CartridgeAccessController".into(), Recipe { tier : - MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : + .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(), 5f64), ("Gold" - .into(), 5f64), ("Iron".into(), 1f64)] .into_iter().collect() }), - ("FireArmSMG".into(), Recipe { tier : MachineTier::TierOne, time : - 120f64, energy : 3000f64, temperature : RecipeRange { start : 1f64, + 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 : 2i64, - reagents : vec![("Nickel".into(), 10f64), ("Steel".into(), 30f64)] - .into_iter().collect() }), ("Handgun".into(), Recipe { tier : + 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 : 2i64, reagents : vec![("Nickel".into(), 10f64), - ("Steel".into(), 30f64)] .into_iter().collect() }), - ("HandgunMagazine".into(), Recipe { 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() }), ("ItemAmmoBox" - .into(), Recipe { tier : MachineTier::TierOne, time : 120f64, energy - : 3000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + 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![("Copper".into(), 30f64), ("Lead".into(), 50f64), ("Steel" - .into(), 30f64)] .into_iter().collect() }), ("ItemExplosive".into(), - Recipe { 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() }), ("ItemGrenade".into(), Recipe { 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() }), ("ItemMiningCharge".into(), Recipe { tier - : MachineTier::TierOne, time : 5f64, energy : 200f64, temperature : + 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() }), - ("SMGMagazine".into(), Recipe { 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() }), - ("WeaponPistolEnergy".into(), Recipe { tier : MachineTier::TierTwo, + .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 : @@ -45561,16 +46874,33 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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() }), ("WeaponRifleEnergy".into(), Recipe { 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() }) + .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(), @@ -45950,10 +47280,12 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None } + (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(), @@ -45974,7 +47306,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -45982,113 +47314,113 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -46111,17 +47443,24 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None } + (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(), @@ -46154,7 +47493,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -46162,9 +47501,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -46188,8 +47527,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None } + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }) ] .into_iter() .collect(), @@ -46222,7 +47562,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -46230,73 +47570,73 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -46320,14 +47660,18 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None } + (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(), @@ -46547,7 +47891,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -46570,7 +47914,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Bed".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Bed".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -46605,7 +47952,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -46637,7 +47984,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Bed".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Bed".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -46679,7 +48029,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] + logic_slot_types: vec![(0, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -46699,8 +48049,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Safe".into()), ("1".into(), "Unsafe".into()), ("2" - .into(), "Unpowered".into()) + (0, "Safe".into()), (1, "Unsafe".into()), (2, "Unpowered".into()) ] .into_iter() .collect(), @@ -46709,7 +48058,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Player".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -46751,7 +48103,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] + logic_slot_types: vec![(0, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -46771,8 +48123,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Safe".into()), ("1".into(), "Unsafe".into()), ("2" - .into(), "Unpowered".into()) + (0, "Safe".into()), (1, "Unsafe".into()), (2, "Unpowered".into()) ] .into_iter() .collect(), @@ -46781,7 +48132,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Player".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -46823,7 +48177,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] + logic_slot_types: vec![(0, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -46843,8 +48197,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "Safe".into()), ("1".into(), "Unsafe".into()), ("2" - .into(), "Unpowered".into()) + (0, "Safe".into()), (1, "Unsafe".into()), (2, "Unpowered".into()) ] .into_iter() .collect(), @@ -46853,7 +48206,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Player".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -46892,7 +48248,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] + logic_slot_types: vec![(0, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -46911,7 +48267,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Player".into(), class : Class::Entity, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -47676,7 +49035,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47699,10 +49058,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![ - ("0".into(), "Not Generating".into()), ("1".into(), "Generating" - .into()) - ] + vec![(0, "Not Generating".into()), (1, "Generating".into())] .into_iter() .collect(), ), @@ -47710,7 +49066,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Input".into(), typ : Class::Ore }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Input".into(), class : Class::Ore, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -47759,7 +49118,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47767,25 +49126,25 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -47810,10 +49169,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![ - ("0".into(), "Split".into()), ("1".into(), "Filter".into()), ("2" - .into(), "Logic".into()) - ] + vec![(0, "Split".into()), (1, "Filter".into()), (2, "Logic".into())] .into_iter() .collect(), ), @@ -47822,10 +49178,12 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None }, SlotInfo { name : "Export 2" - .into(), typ : Class::None }, SlotInfo { name : "Data Disk".into(), typ : - Class::DataDisk } + (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(), @@ -47868,7 +49226,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47876,17 +49234,17 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -47913,7 +49271,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Automatic".into()), ("1".into(), "Logic".into())] + vec![(0, "Automatic".into()), (1, "Logic".into())] .into_iter() .collect(), ), @@ -47922,9 +49280,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None }, SlotInfo { name : "Processing" - .into(), typ : Class::None } + (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(), @@ -47965,7 +49324,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -47973,17 +49332,17 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -48010,7 +49369,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Automatic".into()), ("1".into(), "Logic".into())] + vec![(0, "Automatic".into()), (1, "Logic".into())] .into_iter() .collect(), ), @@ -48019,9 +49378,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None }, SlotInfo { name : "Export".into(), - typ : Class::None } + (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(), @@ -48229,7 +49589,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< }), internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] + logic_slot_types: vec![(0, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -48273,7 +49633,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::GasCanister, index : 0u32 }) ] .into_iter() .collect(), @@ -48314,7 +49675,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -48322,233 +49683,233 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -48572,28 +49933,42 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : - Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo - { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ - : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None } + (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(), @@ -48627,7 +50002,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -48641,7 +50016,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::ReadWrite), (LogicSlotType::Lock, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, - MemoryAccess::Read)] .into_iter().collect()), ("1".into(), + MemoryAccess::Read)] .into_iter().collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -48656,9 +50031,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("2".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -48689,9 +50064,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Helmet".into(), typ : Class::Helmet }, SlotInfo { name - : "Suit".into(), typ : Class::Suit }, SlotInfo { name : "Back".into(), - typ : Class::Back } + (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(), @@ -48886,7 +50262,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0.0005f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }) + ] .into_iter() .collect(), } @@ -48908,7 +50287,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< radiation_factor: 0.0005f32, }), internal_atmo_info: None, - slots: vec![SlotInfo { name : "Portable Slot".into(), typ : Class::None }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Portable Slot".into(), class : + Class::None, index : 0u32 }) + ] .into_iter() .collect(), } @@ -49229,8 +50611,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()) + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) ] .into_iter() .collect(), @@ -49256,8 +50638,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { name - : "Export".into(), typ : Class::None } + (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(), @@ -49300,355 +50683,128 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< fabricator_info: Some(FabricatorInfo { tier: MachineTier::Undefined, recipes: vec![ - ("FlareGun".into(), Recipe { tier : MachineTier::TierOne, time : - 10f64, energy : 2000f64, temperature : RecipeRange { start : 1f64, + 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 : 2i64, - reagents : vec![("Iron".into(), 10f64), ("Silicon".into(), 10f64)] - .into_iter().collect() }), ("ItemAngleGrinder".into(), Recipe { 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() }), ("ItemArcWelder".into(), - Recipe { 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() }), ("ItemBasketBall".into(), - Recipe { 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() }), ("ItemBeacon".into(), Recipe { 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() }), - ("ItemChemLightBlue".into(), Recipe { tier : MachineTier::TierOne, - time : 1f64, energy : 500f64, temperature : RecipeRange { start : + 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![("Silicon".into(), 1f64)] .into_iter().collect() }), - ("ItemChemLightGreen".into(), Recipe { tier : MachineTier::TierOne, - time : 1f64, energy : 500f64, temperature : RecipeRange { start : + 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![("Silicon".into(), 1f64)] .into_iter().collect() }), - ("ItemChemLightRed".into(), Recipe { 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() }), - ("ItemChemLightWhite".into(), Recipe { 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() }), - ("ItemChemLightYellow".into(), Recipe { 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() }), - ("ItemClothingBagOveralls_Aus".into(), Recipe { 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() }), ("ItemClothingBagOveralls_Brazil".into(), - Recipe { 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() }), ("ItemClothingBagOveralls_Canada" - .into(), Recipe { 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() }), - ("ItemClothingBagOveralls_China".into(), Recipe { 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() }), ("ItemClothingBagOveralls_EU".into(), - Recipe { 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() }), ("ItemClothingBagOveralls_France" - .into(), Recipe { 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() }), - ("ItemClothingBagOveralls_Germany".into(), Recipe { 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() }), ("ItemClothingBagOveralls_Japan".into(), - Recipe { 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() }), ("ItemClothingBagOveralls_Korea" - .into(), Recipe { 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() }), - ("ItemClothingBagOveralls_NZ".into(), Recipe { 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() }), ("ItemClothingBagOveralls_Russia".into(), - Recipe { 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() }), - ("ItemClothingBagOveralls_SouthAfrica".into(), Recipe { 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() }), ("ItemClothingBagOveralls_UK".into(), - Recipe { 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() }), ("ItemClothingBagOveralls_US" - .into(), Recipe { 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() }), - ("ItemClothingBagOveralls_Ukraine".into(), Recipe { 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() }), ("ItemCrowbar".into(), Recipe { 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() }), ("ItemDirtCanister".into(), Recipe { 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() }), ("ItemDisposableBatteryCharger".into(), - Recipe { 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() }), ("ItemDrill".into(), Recipe { 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() }), ("ItemDuctTape".into(), - Recipe { 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() }), ("ItemEvaSuit".into(), Recipe { - 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() }), - ("ItemExplosive".into(), Recipe { tier : MachineTier::TierTwo, time : - 90f64, energy : 9000f64, temperature : RecipeRange { start : 1f64, + 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 : 3i64, - reagents : vec![("Electrum".into(), 1f64), ("Silicon".into(), 7f64), - ("Solder".into(), 2f64)] .into_iter().collect() }), ("ItemFlagSmall" - .into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : + 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() }), ("ItemFlashlight".into(), - Recipe { 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() }), - ("ItemGlasses".into(), Recipe { 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() }), ("ItemHardBackpack".into(), Recipe { 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() }), ("ItemHardJetpack".into(), Recipe { 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() }), ("ItemHardMiningBackPack" - .into(), Recipe { 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() }), ("ItemHardSuit".into(), Recipe { 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() }), ("ItemHardsuitHelmet".into(), Recipe { 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() }), ("ItemIgniter".into(), Recipe { 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() }), ("ItemJetpackBasic".into(), Recipe { 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() }), - ("ItemKitBasket".into(), Recipe { 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() }), ("ItemLabeller".into(), Recipe { tier : + .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 : 2i64, reagents : vec![("Gold".into(), 1f64), ("Iron" - .into(), 2f64)] .into_iter().collect() }), ("ItemMKIIAngleGrinder" - .into(), Recipe { tier : MachineTier::TierTwo, time : 10f64, energy : + 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 : 3i64, reagents : - vec![("Copper".into(), 1f64), ("Electrum".into(), 4f64), ("Iron" - .into(), 3f64)] .into_iter().collect() }), ("ItemMKIIArcWelder" - .into(), Recipe { 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() }), - ("ItemMKIICrowbar".into(), Recipe { tier : MachineTier::TierTwo, time - : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + .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(), 5f64), ("Iron".into(), 5f64)] - .into_iter().collect() }), ("ItemMKIIDrill".into(), Recipe { tier : + 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 : @@ -49656,313 +50812,165 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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() }), ("ItemMKIIDuctTape".into(), Recipe { 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() }), - ("ItemMKIIMiningDrill".into(), Recipe { 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() }), - ("ItemMKIIScrewdriver".into(), Recipe { tier : MachineTier::TierTwo, + .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() }), ("ItemMKIIWireCutters".into(), Recipe { - 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() }), - ("ItemMKIIWrench".into(), Recipe { 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() }), ("ItemMarineBodyArmor".into(), Recipe { - 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() }), ("ItemMarineHelmet".into(), Recipe { 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() }), - ("ItemMiningBackPack".into(), Recipe { 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() }), - ("ItemMiningBelt".into(), Recipe { 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() }), - ("ItemMiningBeltMKII".into(), Recipe { 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() }), ("ItemMiningCharge".into(), Recipe { 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() }), - ("ItemMiningDrill".into(), Recipe { 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() }), ("ItemMiningDrillHeavy".into(), Recipe { + .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(), - 5f64), ("Invar".into(), 10f64), ("Solder".into(), 10f64), ("Steel" - .into(), 10f64)] .into_iter().collect() }), - ("ItemMiningDrillPneumatic".into(), Recipe { 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() }), ("ItemMkIIToolbelt".into(), Recipe { 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() }), ("ItemNVG".into(), - Recipe { tier : MachineTier::TierOne, time : 45f64, energy : 2750f64, + 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![("Hastelloy" - .into(), 10f64), ("Silicon".into(), 5f64), ("Steel".into(), 5f64)] - .into_iter().collect() }), ("ItemPickaxe".into(), Recipe { 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() }), ("ItemPlantSampler" - .into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : + .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 : 2i64, reagents : - vec![("Copper".into(), 5f64), ("Iron".into(), 5f64)] .into_iter() - .collect() }), ("ItemRemoteDetonator".into(), Recipe { tier : - MachineTier::TierTwo, time : 30f64, energy : 1500f64, temperature : + .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 : 3i64, reagents : vec![("Copper".into(), 5f64), - ("Solder".into(), 5f64), ("Steel".into(), 5f64)] .into_iter() - .collect() }), ("ItemReusableFireExtinguisher".into(), Recipe { tier - : MachineTier::TierOne, time : 20f64, energy : 1000f64, temperature : + 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 : 1i64, reagents : vec![("Steel".into(), 5f64)] - .into_iter().collect() }), ("ItemRoadFlare".into(), Recipe { tier : - MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : + 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 : 1i64, reagents : vec![("Iron".into(), 1f64)] - .into_iter().collect() }), ("ItemScrewdriver".into(), Recipe { tier : + 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() }), ("ItemSensorLenses".into(), Recipe { tier - : MachineTier::TierTwo, time : 45f64, energy : 3500f64, temperature : + .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 : 3i64, reagents : vec![("Inconel".into(), 5f64), - ("Silicon".into(), 5f64), ("Steel".into(), 5f64)] .into_iter() - .collect() }), ("ItemSensorProcessingUnitCelestialScanner".into(), - Recipe { 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() }), - ("ItemSensorProcessingUnitMesonScanner".into(), Recipe { tier : - MachineTier::TierTwo, time : 15f64, energy : 100f64, temperature : + 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 : 4i64, reagents : vec![("Copper".into(), 5f64), ("Gold" - .into(), 5f64), ("Iron".into(), 5f64), ("Silicon".into(), 5f64)] - .into_iter().collect() }), ("ItemSensorProcessingUnitOreScanner" - .into(), Recipe { 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() }), - ("ItemSpaceHelmet".into(), Recipe { 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() }), ("ItemSpacepack".into(), Recipe { tier : - MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + 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(), 2f64), ("Iron" - .into(), 5f64)] .into_iter().collect() }), ("ItemSprayCanBlack" - .into(), Recipe { 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() }), ("ItemSprayCanBlue" - .into(), Recipe { 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() }), ("ItemSprayCanBrown" - .into(), Recipe { 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() }), ("ItemSprayCanGreen" - .into(), Recipe { 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() }), ("ItemSprayCanGrey" - .into(), Recipe { 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() }), ("ItemSprayCanKhaki" - .into(), Recipe { 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() }), ("ItemSprayCanOrange" - .into(), Recipe { 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() }), ("ItemSprayCanPink" - .into(), Recipe { 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() }), ("ItemSprayCanPurple" - .into(), Recipe { 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() }), ("ItemSprayCanRed".into(), - Recipe { 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() }), ("ItemSprayCanWhite".into(), Recipe - { 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() }), ("ItemSprayCanYellow".into(), - Recipe { 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() }), ("ItemSprayGun".into(), Recipe { - 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() }), ("ItemTerrainManipulator".into(), Recipe { + 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, @@ -49970,72 +50978,173 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< : 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() }), ("ItemToolBelt".into(), Recipe { 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() }), ("ItemWearLamp".into(), Recipe { 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() }), ("ItemWeldingTorch" - .into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : + .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 : 2i64, reagents : - vec![("Copper".into(), 1f64), ("Iron".into(), 3f64)] .into_iter() - .collect() }), ("ItemWireCutters".into(), Recipe { tier : + .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 : 1i64, reagents : vec![("Iron".into(), 3f64)] - .into_iter().collect() }), ("ItemWrench".into(), Recipe { 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() }), ("ToyLuna".into(), Recipe { 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() }), ("UniformCommander" - .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : - 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + .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 : 1i64, reagents : - vec![("Silicon".into(), 25f64)] .into_iter().collect() }), - ("UniformMarine".into(), Recipe { 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() }), - ("UniformOrangeJumpSuit".into(), Recipe { tier : + .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 : 1i64, reagents : vec![("Silicon".into(), 10f64)] - .into_iter().collect() }), ("WeaponPistolEnergy".into(), Recipe { + 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, @@ -50043,16 +51152,373 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< : 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() }), ("WeaponRifleEnergy" - .into(), Recipe { 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() }) + .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(), @@ -50432,14 +51898,17 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "Torpedo".into(), typ : Class::Torpedo }, SlotInfo { - name : "Torpedo".into(), typ : Class::Torpedo }, SlotInfo { name : - "Torpedo".into(), typ : Class::Torpedo }, SlotInfo { name : "Torpedo" - .into(), typ : Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ - : Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ : - Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ : - Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ : - Class::Torpedo } + (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(), @@ -50843,9 +52312,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Right".into()), ("1".into(), "Left".into())] - .into_iter() - .collect(), + vec![(0, "Right".into()), (1, "Left".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, @@ -50890,7 +52357,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -50898,9 +52365,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() - .collect()), ("1".into(), vec![(LogicSlotType::Occupied, - MemoryAccess::Read), (LogicSlotType::OccupantHash, - MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), + .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), @@ -50925,7 +52392,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Automatic".into()), ("1".into(), "Logic".into())] + vec![(0, "Automatic".into()), (1, "Logic".into())] .into_iter() .collect(), ), @@ -50934,8 +52401,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None } + (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(), @@ -51074,82 +52542,65 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![] .into_iter().collect()), ("1".into(), vec![] - .into_iter().collect()), ("2".into(), vec![] .into_iter().collect()), - ("3".into(), vec![] .into_iter().collect()), ("4".into(), vec![] - .into_iter().collect()), ("5".into(), vec![] .into_iter().collect()), - ("6".into(), vec![] .into_iter().collect()), ("7".into(), vec![] - .into_iter().collect()), ("8".into(), vec![] .into_iter().collect()), - ("9".into(), vec![] .into_iter().collect()), ("10".into(), vec![] - .into_iter().collect()), ("11".into(), vec![] .into_iter() - .collect()), ("12".into(), vec![] .into_iter().collect()), ("13" - .into(), vec![] .into_iter().collect()), ("14".into(), vec![] - .into_iter().collect()), ("15".into(), vec![] .into_iter() - .collect()), ("16".into(), vec![] .into_iter().collect()), ("17" - .into(), vec![] .into_iter().collect()), ("18".into(), vec![] - .into_iter().collect()), ("19".into(), vec![] .into_iter() - .collect()), ("20".into(), vec![] .into_iter().collect()), ("21" - .into(), vec![] .into_iter().collect()), ("22".into(), vec![] - .into_iter().collect()), ("23".into(), vec![] .into_iter() - .collect()), ("24".into(), vec![] .into_iter().collect()), ("25" - .into(), vec![] .into_iter().collect()), ("26".into(), vec![] - .into_iter().collect()), ("27".into(), vec![] .into_iter() - .collect()), ("28".into(), vec![] .into_iter().collect()), ("29" - .into(), vec![] .into_iter().collect()), ("30".into(), vec![] - .into_iter().collect()), ("31".into(), vec![] .into_iter() - .collect()), ("32".into(), vec![] .into_iter().collect()), ("33" - .into(), vec![] .into_iter().collect()), ("34".into(), vec![] - .into_iter().collect()), ("35".into(), vec![] .into_iter() - .collect()), ("36".into(), vec![] .into_iter().collect()), ("37" - .into(), vec![] .into_iter().collect()), ("38".into(), vec![] - .into_iter().collect()), ("39".into(), vec![] .into_iter() - .collect()), ("40".into(), vec![] .into_iter().collect()), ("41" - .into(), vec![] .into_iter().collect()), ("42".into(), vec![] - .into_iter().collect()), ("43".into(), vec![] .into_iter() - .collect()), ("44".into(), vec![] .into_iter().collect()), ("45" - .into(), vec![] .into_iter().collect()), ("46".into(), vec![] - .into_iter().collect()), ("47".into(), vec![] .into_iter() - .collect()), ("48".into(), vec![] .into_iter().collect()), ("49" - .into(), vec![] .into_iter().collect()), ("50".into(), vec![] - .into_iter().collect()), ("51".into(), vec![] .into_iter() - .collect()), ("52".into(), vec![] .into_iter().collect()), ("53" - .into(), vec![] .into_iter().collect()), ("54".into(), vec![] - .into_iter().collect()), ("55".into(), vec![] .into_iter() - .collect()), ("56".into(), vec![] .into_iter().collect()), ("57" - .into(), vec![] .into_iter().collect()), ("58".into(), vec![] - .into_iter().collect()), ("59".into(), vec![] .into_iter() - .collect()), ("60".into(), vec![] .into_iter().collect()), ("61" - .into(), vec![] .into_iter().collect()), ("62".into(), vec![] - .into_iter().collect()), ("63".into(), vec![] .into_iter() - .collect()), ("64".into(), vec![] .into_iter().collect()), ("65" - .into(), vec![] .into_iter().collect()), ("66".into(), vec![] - .into_iter().collect()), ("67".into(), vec![] .into_iter() - .collect()), ("68".into(), vec![] .into_iter().collect()), ("69" - .into(), vec![] .into_iter().collect()), ("70".into(), vec![] - .into_iter().collect()), ("71".into(), vec![] .into_iter() - .collect()), ("72".into(), vec![] .into_iter().collect()), ("73" - .into(), vec![] .into_iter().collect()), ("74".into(), vec![] - .into_iter().collect()), ("75".into(), vec![] .into_iter() - .collect()), ("76".into(), vec![] .into_iter().collect()), ("77" - .into(), vec![] .into_iter().collect()), ("78".into(), vec![] - .into_iter().collect()), ("79".into(), vec![] .into_iter() - .collect()), ("80".into(), vec![] .into_iter().collect()), ("81" - .into(), vec![] .into_iter().collect()), ("82".into(), vec![] - .into_iter().collect()), ("83".into(), vec![] .into_iter() - .collect()), ("84".into(), vec![] .into_iter().collect()), ("85" - .into(), vec![] .into_iter().collect()), ("86".into(), vec![] - .into_iter().collect()), ("87".into(), vec![] .into_iter() - .collect()), ("88".into(), vec![] .into_iter().collect()), ("89" - .into(), vec![] .into_iter().collect()), ("90".into(), vec![] - .into_iter().collect()), ("91".into(), vec![] .into_iter() - .collect()), ("92".into(), vec![] .into_iter().collect()), ("93" - .into(), vec![] .into_iter().collect()), ("94".into(), vec![] - .into_iter().collect()), ("95".into(), vec![] .into_iter() - .collect()), ("96".into(), vec![] .into_iter().collect()), ("97" - .into(), vec![] .into_iter().collect()), ("98".into(), vec![] - .into_iter().collect()), ("99".into(), vec![] .into_iter() - .collect()), ("100".into(), vec![] .into_iter().collect()), ("101" - .into(), vec![] .into_iter().collect()) + (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(), @@ -51174,88 +52625,142 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : - "Export".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), - typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" - .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : - Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, - SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name - : "Storage".into(), typ : Class::None } + (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(), @@ -51458,7 +52963,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -51487,7 +52992,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "".into(), typ : Class::DataDisk }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::DataDisk, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -51661,7 +53169,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -51688,7 +53196,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "".into(), typ : Class::DataDisk }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::DataDisk, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -51864,7 +53375,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -51892,7 +53403,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -52274,7 +53788,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -52286,7 +53800,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, - MemoryAccess::Read)] .into_iter().collect()), ("1".into(), + MemoryAccess::Read)] .into_iter().collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -52317,8 +53831,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, - SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } + (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(), @@ -52356,7 +53871,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -52368,7 +53883,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, - MemoryAccess::Read)] .into_iter().collect()), ("1".into(), + MemoryAccess::Read)] .into_iter().collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -52399,8 +53914,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, - SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } + (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(), @@ -52438,7 +53954,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -52450,7 +53966,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, - MemoryAccess::Read)] .into_iter().collect()), ("1".into(), + MemoryAccess::Read)] .into_iter().collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -52483,8 +53999,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, - SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } + (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(), @@ -52523,7 +54040,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), @@ -52535,7 +54052,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, - MemoryAccess::Read)] .into_iter().collect()), ("1".into(), + MemoryAccess::Read)] .into_iter().collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), @@ -52568,8 +54085,9 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< circuit_holder: false, }, slots: vec![ - SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, - SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } + (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(), @@ -52704,7 +54222,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, logic: LogicInfo { - logic_slot_types: vec![("0".into(), vec![] .into_iter().collect())] + logic_slot_types: vec![(0, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ @@ -52723,7 +54241,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Import".into(), typ : Class::Ore }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::Ore, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -52770,7 +54291,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, @@ -52799,7 +54320,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "".into(), typ : Class::DataDisk }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::DataDisk, + index : 0u32 }) + ] .into_iter() .collect(), device: DeviceInfo { @@ -52852,8 +54376,8 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .collect(), modes: Some( vec![ - ("0".into(), "NoStorm".into()), ("1".into(), "StormIncoming" - .into()), ("2".into(), "InStorm".into()) + (0, "NoStorm".into()), (1, "StormIncoming".into()), (2, "InStorm" + .into()) ] .into_iter() .collect(), @@ -53001,11 +54525,13 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "Access Card".into(), typ - : Class::AccessCard }, SlotInfo { name : "Access Card".into(), typ : - Class::AccessCard }, SlotInfo { name : "Credit Card".into(), typ : - Class::CreditCard } + (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(), @@ -53033,10 +54559,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "Access Card".into(), typ - : Class::AccessCard }, SlotInfo { name : "Credit Card".into(), typ : - Class::CreditCard } + (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(), @@ -53064,10 +54591,11 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< thermal_info: None, internal_atmo_info: None, slots: vec![ - SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" - .into(), typ : Class::None }, SlotInfo { name : "Access Card".into(), typ - : Class::AccessCard }, SlotInfo { name : "Credit Card".into(), typ : - Class::CreditCard } + (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(), @@ -53096,7 +54624,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -53119,7 +54647,10 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -53147,7 +54678,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -53169,15 +54700,16 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Stun".into()), ("1".into(), "Kill".into())] - .into_iter() - .collect(), + vec![(0, "Stun".into()), (1, "Kill".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } @@ -53205,7 +54737,7 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ - ("0".into(), vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, @@ -53227,15 +54759,16 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< .into_iter() .collect(), modes: Some( - vec![("0".into(), "Stun".into()), ("1".into(), "Kill".into())] - .into_iter() - .collect(), + vec![(0, "Stun".into()), (1, "Kill".into())].into_iter().collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, - slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] .into_iter() .collect(), } 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 index 6c811ce..81c9775 100644 --- a/stationeers_data/src/enums/basic.rs +++ b/stationeers_data/src/enums/basic.rs @@ -2001,6 +2001,12 @@ impl std::str::FromStr for BasicEnum { "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)), diff --git a/stationeers_data/src/enums/prefabs.rs b/stationeers_data/src/enums/prefabs.rs index f13adc1..4889a3c 100644 --- a/stationeers_data/src/enums/prefabs.rs +++ b/stationeers_data/src/enums/prefabs.rs @@ -1255,6 +1255,9 @@ pub enum StationpediaPrefab { ) )] ItemWallCooler = -1567752627i32, + #[strum(serialize = "StructureLarreDockCargo")] + #[strum(props(name = "LARrE Dock (Cargo)", desc = "", value = "-1555459562"))] + StructureLarreDockCargo = -1555459562i32, #[strum(serialize = "StructureSolarPanel45")] #[strum( props( @@ -2153,6 +2156,9 @@ pub enum StationpediaPrefab { 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, @@ -2341,6 +2347,9 @@ pub enum StationpediaPrefab { #[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( @@ -3086,6 +3095,15 @@ pub enum StationpediaPrefab { #[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, @@ -4023,6 +4041,9 @@ pub enum StationpediaPrefab { #[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, @@ -4604,6 +4625,9 @@ pub enum StationpediaPrefab { ) )] StructurePictureFrameThickMountLandscapeSmall = 347154462i32, + #[strum(serialize = "ItemKitLarreDockCollector")] + #[strum(props(name = "Kit (LArRE Dock Collector)", desc = "", value = "347658127"))] + ItemKitLarreDockCollector = 347658127i32, #[strum(serialize = "RoverCargo")] #[strum( props( @@ -4652,6 +4676,9 @@ pub enum StationpediaPrefab { #[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( @@ -5086,6 +5113,11 @@ pub enum StationpediaPrefab { ) )] 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, @@ -5724,6 +5756,9 @@ pub enum StationpediaPrefab { ) )] 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, @@ -7396,6 +7431,15 @@ pub enum StationpediaPrefab { #[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, diff --git a/stationeers_data/src/enums/script.rs b/stationeers_data/src/enums/script.rs index 1f6566d..4bbb1f4 100644 --- a/stationeers_data/src/enums/script.rs +++ b/stationeers_data/src/enums/script.rs @@ -2103,6 +2103,17 @@ pub enum LogicType { ) )] 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; diff --git a/stationeers_data/src/lib.rs b/stationeers_data/src/lib.rs index 6e2a3dd..9e17e3d 100644 --- a/stationeers_data/src/lib.rs +++ b/stationeers_data/src/lib.rs @@ -173,8 +173,22 @@ pub fn build_prefab_database() -> Option 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 index 4f7f19d..529c835 100644 --- a/stationeers_data/src/templates.rs +++ b/stationeers_data/src/templates.rs @@ -179,7 +179,7 @@ impl From for ObjectTemplate { pub struct HumanTemplate { pub prefab: PrefabInfo, pub species: Species, - pub slots: Vec, + pub slots: BTreeMap, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] @@ -193,21 +193,31 @@ pub struct PrefabInfo { #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] #[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] -pub struct SlotInfo { - pub name: String, - pub typ: Class, +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>"))] + #[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(type = "Map | undefined"))] + #[serde_as(as = "Option>")] + #[cfg_attr(feature = "tsify", tsify(optional, type = "Map"))] pub modes: Option>, pub transmission_receiver: bool, pub wireless_logic: bool, @@ -218,9 +228,11 @@ pub struct LogicInfo { #[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, @@ -238,6 +250,7 @@ pub struct ConnectionInfo { #[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, @@ -256,6 +269,24 @@ pub struct ConsumerInfo { 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 { @@ -276,6 +307,8 @@ pub struct RecipeGasMix { #[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, @@ -286,11 +319,27 @@ pub struct Recipe { 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: BTreeMap, + pub recipes: Vec, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] @@ -334,6 +383,7 @@ pub struct Instruction { #[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, @@ -364,7 +414,9 @@ pub struct SuitInfo { 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, } @@ -373,9 +425,11 @@ pub struct StructureTemplate { 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, - pub slots: Vec, + pub slots: BTreeMap, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] @@ -383,10 +437,12 @@ pub struct StructureSlotsTemplate { 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, - pub slots: Vec, + pub slots: BTreeMap, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] @@ -394,10 +450,12 @@ pub struct StructureLogicTemplate { 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, - pub slots: Vec, + pub slots: BTreeMap, pub device: DeviceInfo, } @@ -406,12 +464,15 @@ pub struct StructureLogicDeviceTemplate { 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, - pub slots: Vec, + pub slots: BTreeMap, pub device: DeviceInfo, pub consumer_info: ConsumerInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] pub fabricator_info: Option, } @@ -420,10 +481,12 @@ pub struct StructureLogicDeviceConsumerTemplate { 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, - pub slots: Vec, + pub slots: BTreeMap, pub device: DeviceInfo, pub memory: MemoryInfo, } @@ -433,10 +496,12 @@ pub struct StructureLogicDeviceMemoryTemplate { 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, - pub slots: Vec, + pub slots: BTreeMap, pub device: DeviceInfo, } @@ -445,12 +510,15 @@ pub struct StructureCircuitHolderTemplate { 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, - pub slots: Vec, + pub slots: BTreeMap, pub device: DeviceInfo, pub consumer_info: ConsumerInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] pub fabricator_info: Option, pub memory: MemoryInfo, } @@ -460,7 +528,9 @@ pub struct StructureLogicDeviceConsumerMemoryTemplate { 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, } @@ -469,9 +539,11 @@ pub struct ItemTemplate { 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, - pub slots: Vec, + pub slots: BTreeMap, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] @@ -479,9 +551,11 @@ pub struct ItemSlotsTemplate { 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, - pub slots: Vec, + pub slots: BTreeMap, pub consumer_info: ConsumerInfo, } @@ -490,10 +564,12 @@ pub struct ItemConsumerTemplate { 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, - pub slots: Vec, + pub slots: BTreeMap, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] @@ -501,10 +577,12 @@ pub struct ItemLogicTemplate { 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, - pub slots: Vec, + pub slots: BTreeMap, pub memory: MemoryInfo, } @@ -513,10 +591,12 @@ pub struct ItemLogicMemoryTemplate { 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, - pub slots: Vec, + pub slots: BTreeMap, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] @@ -524,9 +604,11 @@ pub struct ItemCircuitHolderTemplate { 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, - pub slots: Vec, + pub slots: BTreeMap, pub suit_info: SuitInfo, } @@ -535,10 +617,12 @@ pub struct ItemSuitTemplate { 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, - pub slots: Vec, + pub slots: BTreeMap, pub suit_info: SuitInfo, } @@ -547,10 +631,12 @@ pub struct ItemSuitLogicTemplate { 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, - pub slots: Vec, + pub slots: BTreeMap, pub suit_info: SuitInfo, pub memory: MemoryInfo, } From 6e80f21046e5840ab77c920a3d0fddcd7239a4e2 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Mon, 16 Sep 2024 18:01:45 -0700 Subject: [PATCH 47/50] refactor(vm): fix Reagent code gen Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- Cargo.lock | 70 +++++++----- rust-analyzer.json | 3 +- xtask/src/generate.rs | 18 ++-- xtask/src/generate/database.rs | 188 +++++++++++++++++++++++---------- xtask/src/generate/enums.rs | 6 +- xtask/src/stationpedia.rs | 6 +- 6 files changed, 199 insertions(+), 92 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a12273f..f4a64db 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -119,7 +119,7 @@ checksum = "a507401cad91ec6a857ed5513a2073c82a9b9048762b885bb98655b306964681" dependencies = [ "proc-macro2", "quote", - "syn 2.0.64", + "syn 2.0.77", ] [[package]] @@ -130,7 +130,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.64", + "syn 2.0.77", ] [[package]] @@ -260,7 +260,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.64", + "syn 2.0.77", ] [[package]] @@ -354,7 +354,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn 2.0.64", + "syn 2.0.77", ] [[package]] @@ -365,7 +365,7 @@ checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ "darling_core", "quote", - "syn 2.0.64", + "syn 2.0.77", ] [[package]] @@ -484,7 +484,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.64", + "syn 2.0.77", ] [[package]] @@ -636,6 +636,7 @@ dependencies = [ "strum_macros", "thiserror", "time", + "tracing", "tsify", "wasm-bindgen", ] @@ -658,6 +659,7 @@ dependencies = [ "serde_with", "stationeers_data", "thiserror", + "tracing-wasm", "tsify", "wasm-bindgen", "wasm-bindgen-futures", @@ -1078,7 +1080,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.64", + "syn 2.0.77", ] [[package]] @@ -1116,7 +1118,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.64", + "syn 2.0.77", ] [[package]] @@ -1150,7 +1152,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ "proc-macro2", - "syn 2.0.64", + "syn 2.0.77", ] [[package]] @@ -1161,18 +1163,18 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.82" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -1308,7 +1310,7 @@ checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.64", + "syn 2.0.77", ] [[package]] @@ -1319,7 +1321,7 @@ checksum = "e578a843d40b4189a4d66bba51d7684f57da5bd7c304c64e14bd63efbef49509" dependencies = [ "proc-macro2", "quote", - "syn 2.0.64", + "syn 2.0.77", ] [[package]] @@ -1360,7 +1362,7 @@ checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.64", + "syn 2.0.77", ] [[package]] @@ -1390,7 +1392,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.64", + "syn 2.0.77", ] [[package]] @@ -1446,6 +1448,7 @@ dependencies = [ name = "stationeers_data" version = "0.2.3" dependencies = [ + "const-crc32", "num-integer", "phf 0.11.2", "serde", @@ -1488,7 +1491,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.64", + "syn 2.0.77", ] [[package]] @@ -1504,9 +1507,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.64" +version = "2.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ad3dee41f36859875573074334c200d1add8e4a87bb37113ebd31d926b7b11f" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" dependencies = [ "proc-macro2", "quote", @@ -1536,7 +1539,7 @@ checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.64", + "syn 2.0.77", ] [[package]] @@ -1625,7 +1628,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.64", + "syn 2.0.77", ] [[package]] @@ -1694,7 +1697,7 @@ checksum = "84fd902d4e0b9a4b27f2f440108dc034e1758628a9b702f8ec61ad66355422fa" dependencies = [ "proc-macro2", "quote", - "syn 2.0.64", + "syn 2.0.77", ] [[package]] @@ -1722,7 +1725,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.64", + "syn 2.0.77", ] [[package]] @@ -1756,6 +1759,17 @@ dependencies = [ "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]] name = "tree-sitter" version = "0.20.10" @@ -1820,7 +1834,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.64", + "syn 2.0.77", ] [[package]] @@ -1911,7 +1925,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.64", + "syn 2.0.77", "wasm-bindgen-shared", ] @@ -1946,7 +1960,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.64", + "syn 2.0.77", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2150,7 +2164,7 @@ dependencies = [ "serde_path_to_error", "serde_with", "stationeers_data", - "syn 2.0.64", + "syn 2.0.77", "textwrap", "thiserror", "tracing", diff --git a/rust-analyzer.json b/rust-analyzer.json index 50418a4..7fb0194 100644 --- a/rust-analyzer.json +++ b/rust-analyzer.json @@ -1,5 +1,6 @@ { "rust-analyzer.cargo.features": [ - "tsify" + "tsify", + "prefab_database" ] } diff --git a/xtask/src/generate.rs b/xtask/src/generate.rs index 4016318..4aa7049 100644 --- a/xtask/src/generate.rs +++ b/xtask/src/generate.rs @@ -1,4 +1,4 @@ -use color_eyre::eyre; +use color_eyre::eyre::{self, Context}; use quote::ToTokens; use std::collections::BTreeMap; @@ -98,16 +98,22 @@ fn format_rust(content: impl ToTokens) -> color_eyre::Result { Ok(prettyplease::unparse(&content)) } -fn prepend_generated_comment_and_format(file_path: &std::path::Path, module: &str) -> color_eyre::Result<()> { +fn prepend_generated_comment_and_format( + file_path: &std::path::Path, + module: &str, +) -> color_eyre::Result<()> { use std::io::Write; let tmp_path = file_path.with_extension("rs.tmp"); { let mut tmp = std::fs::File::create(&tmp_path)?; - let src = syn::parse_file(&std::fs::read_to_string(file_path)?)?; + let src = syn::parse_file(&std::fs::read_to_string(file_path)?) + .with_context(|| format!("Error parsing file {}", file_path.display()))?; - let formated = format_rust(src)?; + let formatted = format_rust(src)?; - write!(&mut tmp, "\ + write!( + &mut tmp, + "\ // =================================================\n\ // !! <-----> DO NOT MODIFY <-----> !!\n\ //\n\ @@ -122,7 +128,7 @@ fn prepend_generated_comment_and_format(file_path: &std::path::Path, module: &st //\n\ // =================================================\n\ \n\ - {formated}\ + {formatted}\ " )?; } diff --git a/xtask/src/generate/database.rs b/xtask/src/generate/database.rs index 205fa7d..6d923af 100644 --- a/xtask/src/generate/database.rs +++ b/xtask/src/generate/database.rs @@ -19,11 +19,11 @@ use stationeers_data::templates::{ InstructionPartType, InternalAtmoInfo, ItemCircuitHolderTemplate, ItemConsumerTemplate, ItemInfo, ItemLogicMemoryTemplate, ItemLogicTemplate, ItemSlotsTemplate, ItemSuitCircuitHolderTemplate, ItemSuitLogicTemplate, ItemSuitTemplate, ItemTemplate, - LogicInfo, MemoryInfo, ObjectTemplate, PrefabInfo, Recipe, RecipeGasMix, RecipeRange, SlotInfo, - StructureCircuitHolderTemplate, StructureInfo, StructureLogicDeviceConsumerMemoryTemplate, - StructureLogicDeviceConsumerTemplate, StructureLogicDeviceMemoryTemplate, - StructureLogicDeviceTemplate, StructureLogicTemplate, StructureSlotsTemplate, - StructureTemplate, SuitInfo, ThermalInfo, + LogicInfo, MemoryInfo, ObjectTemplate, PrefabInfo, Reagent, Recipe, RecipeGasMix, RecipeRange, + SlotInfo, StructureCircuitHolderTemplate, StructureInfo, + StructureLogicDeviceConsumerMemoryTemplate, StructureLogicDeviceConsumerTemplate, + StructureLogicDeviceMemoryTemplate, StructureLogicDeviceTemplate, StructureLogicTemplate, + StructureSlotsTemplate, StructureTemplate, SuitInfo, ThermalInfo, }; #[allow(clippy::too_many_lines)] @@ -174,9 +174,21 @@ pub fn generate_database( } }) .collect(); + + let reagents = stationpedia + .reagents + .iter() + .map(|(name, reagent)| { + ( + name.clone(), + Into::::into(reagent).with_name(name.clone()), + ) + }) + .collect(); + let db: ObjectDatabase = ObjectDatabase { prefabs, - reagents: stationpedia.reagents.clone(), + reagents, enums: enums.clone(), prefabs_by_hash, structures, @@ -191,7 +203,7 @@ pub fn generate_database( .join("www") .join("src") .join("ts") - .join("virtualMachine"); + .join("database"); if !data_path.exists() { std::fs::create_dir(&data_path)?; } @@ -225,7 +237,15 @@ pub fn generate_database( let mut prefab_map_file = std::io::BufWriter::new(std::fs::File::create(&prefab_map_path)?); write_prefab_map(&mut prefab_map_file, &db.prefabs)?; - Ok(vec![prefab_map_path]) + let reagent_map_path = workspace + .join("stationeers_data") + .join("src") + .join("database") + .join("reagent_map.rs"); + let mut reagent_map_file = std::io::BufWriter::new(std::fs::File::create(&reagent_map_path)?); + write_reagent_map(&mut reagent_map_file, &db.reagents)?; + + Ok(vec![prefab_map_path, reagent_map_path]) } fn write_prefab_map( @@ -243,12 +263,17 @@ fn write_prefab_map( } )?; let enum_tag_regex = regex::Regex::new(r#"templateType:\s"\w+"\.into\(\),"#).unwrap(); + let numeric_string_literal_regex = regex::Regex::new(r#""(\d+)"\.into\(\)"#).unwrap(); let entries = prefabs .values() .map(|prefab| { let hash = prefab.prefab().prefab_hash; let uneval_src = &uneval::to_string(prefab)?; - let obj = syn::parse_str::(&enum_tag_regex.replace_all(&uneval_src, ""))?; + let fixed = enum_tag_regex.replace_all(&uneval_src, ""); + let fixed = numeric_string_literal_regex.replace_all(&fixed, |captures: ®ex::Captures| { + captures[1].to_string() + }); + let obj = syn::parse_str::(&fixed)?; let entry = quote! { map.insert(#hash, #obj.into()); }; @@ -270,9 +295,47 @@ fn write_prefab_map( Ok(()) } +fn write_reagent_map( + writer: &mut BufWriter, + reagents: &BTreeMap, +) -> color_eyre::Result<()> { + write!( + writer, + "{}", + quote! { + use crate::templates::Reagent; + } + )?; + let entries = reagents + .values() + .map(|reagent| { + let id = reagent.id; + let uneval_src = &uneval::to_string(reagent)?; + let obj = syn::parse_str::(&uneval_src)?; + let entry = quote! { + map.insert(#id, #obj); + }; + Ok(entry) + }) + .collect::, color_eyre::Report>>()?; + write!( + writer, + "{}", + quote! { + pub fn build_reagent_database() -> std::collections::BTreeMap { + #[allow(clippy::unreadable_literal)] + let mut map: std::collections::BTreeMap = std::collections::BTreeMap::new(); + #(#entries)* + map + } + }, + )?; + Ok(()) +} + #[allow(clippy::too_many_lines)] fn generate_templates(pedia: &Stationpedia) -> Vec { - println!("Generating templates ..."); + eprintln!("Generating templates ..."); let mut templates: Vec = Vec::new(); for page in &pedia.pages { let prefab = PrefabInfo { @@ -567,7 +630,6 @@ fn generate_templates(pedia: &Stationpedia) -> Vec { thermal_info: thermal.as_ref().map(Into::into), internal_atmo_info: internal_atmosphere.as_ref().map(Into::into), })); - // println!("Structure") } Page { item: None, @@ -591,7 +653,6 @@ fn generate_templates(pedia: &Stationpedia) -> Vec { internal_atmo_info: internal_atmosphere.as_ref().map(Into::into), slots: slot_inserts_to_info(slot_inserts), })); - // println!("Structure") } Page { item: None, @@ -624,7 +685,6 @@ fn generate_templates(pedia: &Stationpedia) -> Vec { logic, slots: slot_inserts_to_info(slot_inserts), })); - // println!("Structure") } Page { item: None, @@ -660,7 +720,6 @@ fn generate_templates(pedia: &Stationpedia) -> Vec { device: device.into(), }, )); - // println!("Structure") } Page { item: None, @@ -704,7 +763,6 @@ fn generate_templates(pedia: &Stationpedia) -> Vec { device: device.into(), }, )); - // println!("Structure") } Page { item: None, @@ -742,7 +800,6 @@ fn generate_templates(pedia: &Stationpedia) -> Vec { fabricator_info: device.fabricator.as_ref().map(Into::into), }, )); - // println!("Structure") } Page { item: None, @@ -778,7 +835,6 @@ fn generate_templates(pedia: &Stationpedia) -> Vec { memory: memory.into(), }, )); - // println!("Structure") } Page { item: None, @@ -816,7 +872,6 @@ fn generate_templates(pedia: &Stationpedia) -> Vec { memory: memory.into(), }, )); - // println!("Structure") } _ => panic!( "\ @@ -851,16 +906,32 @@ fn generate_templates(pedia: &Stationpedia) -> Vec { templates } -fn slot_inserts_to_info(slots: &[stationpedia::SlotInsert]) -> Vec { +fn slot_inserts_to_info(slots: &[stationpedia::SlotInsert]) -> BTreeMap { let mut tmp: Vec<_> = slots.into(); tmp.sort_by(|a, b| a.slot_index.cmp(&b.slot_index)); tmp.iter() - .map(|slot| SlotInfo { - name: slot.slot_name.clone(), - typ: slot - .slot_type - .parse() - .unwrap_or_else(|err| panic!("failed to parse slot class: {err}")), + .map(|slot| { + let typ = &slot.slot_type; + if typ == "Proxy" { + ( + slot.slot_index, + SlotInfo::Proxy { + name: slot.slot_name.clone(), + index: slot.slot_index, + }, + ) + } else { + ( + slot.slot_index, + SlotInfo::Direct { + name: slot.slot_name.clone(), + class: typ.parse().unwrap_or_else(|err| { + panic!("failed to parse slot class '{typ}': {err}") + }), + index: slot.slot_index, + }, + ) + } }) .collect() } @@ -877,7 +948,7 @@ fn mode_inserts_to_info(modes: &[stationpedia::ModeInsert]) -> BTreeMap, - pub reagents: BTreeMap, + pub reagents: BTreeMap, pub enums: enums::Enums, pub prefabs_by_hash: BTreeMap, pub structures: Vec, @@ -929,10 +1000,10 @@ impl From<&stationpedia::LogicInfo> for LogicInfo { .map(|(key, val)| { ( key.parse().unwrap_or_else(|err| { - panic!("failed to parse logic slot type: {err}") + panic!("failed to parse logic slot type '{key}': {err}") }), val.parse().unwrap_or_else(|err| { - panic!("failed to parse memory access: {err}") + panic!("failed to parse memory access '{val}': {err}") }), ) }) @@ -946,10 +1017,12 @@ impl From<&stationpedia::LogicInfo> for LogicInfo { .iter() .map(|(key, val)| { ( - key.parse() - .unwrap_or_else(|err| panic!("failed to parse logic type: {err}")), - val.parse() - .unwrap_or_else(|err| panic!("failed to parse memory access: {err}")), + key.parse().unwrap_or_else(|err| { + panic!("failed to parse logic type '{key}' : {err}") + }), + val.parse().unwrap_or_else(|err| { + panic!("failed to parse memory access '{val}': {err}") + }), ) }) .collect(), @@ -976,20 +1049,14 @@ impl From<&stationpedia::Item> for ItemInfo { .reagents .as_ref() .map(|map| map.iter().map(|(key, val)| (key.clone(), *val)).collect()), - slot_class: item - .slot_class - .parse() - .unwrap_or_else(|err| { - let slot_class = &item.slot_class; - panic!("failed to parse slot class `{slot_class}`: {err}"); - }), - sorting_class: item - .sorting_class - .parse() - .unwrap_or_else(|err| { - let sorting_class = &item.sorting_class; - panic!("failed to parse sorting class `{sorting_class}`: {err}"); - }), + slot_class: item.slot_class.parse().unwrap_or_else(|err| { + let slot_class = &item.slot_class; + panic!("failed to parse slot class `{slot_class}`: {err}"); + }), + sorting_class: item.sorting_class.parse().unwrap_or_else(|err| { + let sorting_class = &item.sorting_class; + panic!("failed to parse sorting class `{sorting_class}`: {err}"); + }), } } } @@ -1001,12 +1068,12 @@ impl From<&stationpedia::Device> for DeviceInfo { .connection_list .iter() .map(|(typ, role)| ConnectionInfo { - typ: typ - .parse() - .unwrap_or_else(|err| panic!("failed to parse connection type `{typ}`: {err}")), - role: role - .parse() - .unwrap_or_else(|err| panic!("failed to parse connection role `{role}`: {err}")), + typ: typ.parse().unwrap_or_else(|err| { + panic!("failed to parse connection type `{typ}`: {err}") + }), + role: role.parse().unwrap_or_else(|err| { + panic!("failed to parse connection role `{role}`: {err}") + }), }) .collect(), device_pins_length: value.devices_length, @@ -1123,6 +1190,19 @@ impl From<&stationpedia::ResourceConsumer> for ConsumerInfo { } } +impl From<&stationpedia::Reagent> for Reagent { + fn from(value: &stationpedia::Reagent) -> Self { + Reagent { + id: value.id, + name: String::new(), + hash: value.hash, + unit: value.unit.clone(), + is_organic: value.is_organic, + sources: value.sources.clone().unwrap_or_default(), + } + } +} + impl From<&stationpedia::Fabricator> for FabricatorInfo { fn from(value: &stationpedia::Fabricator) -> Self { FabricatorInfo { @@ -1133,7 +1213,7 @@ impl From<&stationpedia::Fabricator> for FabricatorInfo { recipes: value .recipes .iter() - .map(|(key, val)| (key.clone(), val.into())) + .map(|(prefab, val)| Into::::into(val).with_target(prefab)) .collect(), } } @@ -1142,6 +1222,8 @@ impl From<&stationpedia::Fabricator> for FabricatorInfo { impl From<&stationpedia::Recipe> for Recipe { fn from(value: &stationpedia::Recipe) -> Self { Recipe { + target_prefab: String::new(), + target_prefab_hash: 0, tier: value .tier_name .parse() diff --git a/xtask/src/generate/enums.rs b/xtask/src/generate/enums.rs index ba49b5a..3100457 100644 --- a/xtask/src/generate/enums.rs +++ b/xtask/src/generate/enums.rs @@ -15,7 +15,7 @@ pub fn generate( enums: &crate::enums::Enums, workspace: &std::path::Path, ) -> color_eyre::Result> { - println!("Writing Enum Listings ..."); + eprintln!("Writing Enum Listings ..."); let enums_path = workspace.join("stationeers_data").join("src").join("enums"); if !enums_path.exists() { std::fs::create_dir(&enums_path)?; @@ -51,7 +51,7 @@ pub fn generate( } write_enum_listing(&mut writer, enm)?; } - write_enum_aggragate_mod(&mut writer, &enums.basic_enums)?; + write_enum_aggregate_mod(&mut writer, &enums.basic_enums)?; let mut writer = std::io::BufWriter::new(std::fs::File::create(enums_path.join("prefabs.rs"))?); write_repr_enum_use_header(&mut writer)?; @@ -80,7 +80,7 @@ pub fn generate( } #[allow(clippy::type_complexity)] -fn write_enum_aggragate_mod( +fn write_enum_aggregate_mod( writer: &mut BufWriter, enums: &BTreeMap, ) -> color_eyre::Result<()> { diff --git a/xtask/src/stationpedia.rs b/xtask/src/stationpedia.rs index e20cc2c..5eb2012 100644 --- a/xtask/src/stationpedia.rs +++ b/xtask/src/stationpedia.rs @@ -30,10 +30,14 @@ impl Stationpedia { #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] #[serde(deny_unknown_fields)] pub struct Reagent { + #[serde(rename = "Id")] + pub id: u8, #[serde(rename = "Hash")] - pub hash: i64, + pub hash: i32, #[serde(rename = "Unit")] pub unit: String, + #[serde(rename = "IsOrganic")] + pub is_organic: bool, #[serde(rename = "Sources")] pub sources: Option>, } From f05f81cce56064628d0ae6d1c56d30c3e0891566 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Mon, 16 Sep 2024 18:03:52 -0700 Subject: [PATCH 48/50] refactor(frontend): use signals in Session, fix various things Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- .vscode/settings.json | 5 +- cspell.json | 73 +- www/cspell.json | 2 + www/src/scss/ace_markers.scss | 27 + www/src/scss/dark.scss | 12 +- www/src/scss/styles.scss | 2 + www/src/ts/database/index.ts | 171 + .../prefabDatabase.ts | 33129 +++++++++------- www/src/ts/editor/ace.ts | 258 +- www/src/ts/editor/index.ts | 341 +- www/src/ts/presets/default.ts | 97 +- www/src/ts/presets/demo.ts | 45 +- www/src/ts/presets/index.ts | 4 +- www/src/ts/session.ts | 109 +- www/src/ts/utils.ts | 21 +- www/src/ts/virtualMachine/controls.ts | 58 +- www/src/ts/virtualMachine/device/addDevice.ts | 6 +- www/src/ts/virtualMachine/device/template.ts | 45 +- www/src/ts/virtualMachine/index.ts | 93 +- www/src/ts/virtualMachine/registers.ts | 2 +- www/src/ts/virtualMachine/stack.ts | 2 +- www/src/ts/virtualMachine/state.ts | 209 +- www/src/ts/virtualMachine/vmWorker.ts | 4 +- 23 files changed, 20208 insertions(+), 14507 deletions(-) create mode 100644 www/src/scss/ace_markers.scss create mode 100644 www/src/ts/database/index.ts rename www/src/ts/{virtualMachine => database}/prefabDatabase.ts (89%) 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/cspell.json b/cspell.json index 87dd65a..e8f8295 100644 --- a/cspell.json +++ b/cspell.json @@ -3,10 +3,17 @@ "flagWords": [], "version": "0.2", "words": [ + "Agrizero", + "aliasable", + "Analyizer", + "Analyser", "arn't", "Astroloy", + "Asura", "Atmo", + "autoignition", "Autolathe", + "Autominer", "Autotagged", "bapal", "bapz", @@ -40,6 +47,7 @@ "bneal", "bnez", "bnezal", + "bools", "brap", "brapz", "brdns", @@ -59,29 +67,57 @@ "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", @@ -92,24 +128,40 @@ "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", @@ -125,6 +177,7 @@ "settingsmenu", "sgez", "sgtz", + "Sinotai", "slez", "slotlogic", "slotlogicable", @@ -134,18 +187,36 @@ "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", - "xtask" + "Wirecutters", + "Xigo", + "xtask", + "Zoomer", + "Zrilian" ] } diff --git a/www/cspell.json b/www/cspell.json index 522f907..2992b2e 100644 --- a/www/cspell.json +++ b/www/cspell.json @@ -53,6 +53,7 @@ "brne", "brnez", "Circuitboard", + "clazz", "codegen", "Comlink", "datapoints", @@ -106,6 +107,7 @@ "sattellite", "sdns", "sdse", + "searchbtn", "seqz", "serde", "sgez", 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 78f35dc..d98ca95 100644 --- a/www/src/scss/styles.scss +++ b/www/src/scss/styles.scss @@ -72,6 +72,8 @@ $accordion-button-padding-y: 0.5rem; // 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/database/index.ts b/www/src/ts/database/index.ts new file mode 100644 index 0000000..dcb700e --- /dev/null +++ b/www/src/ts/database/index.ts @@ -0,0 +1,171 @@ +import { FrozenObject, ICInfo, LogicType, ObjectID, ObjectTemplate } from "ic10emu_wasm"; + +import prefabDatabase from "./prefabDatabase"; +import { isSome } from "utils"; + +export type PrefabName = keyof typeof prefabDatabase.prefabs; +export type Prefab = typeof prefabDatabase.prefabs[K] +export type ReagentName = keyof typeof prefabDatabase.reagents; +export type ReagentHash = (typeof prefabDatabase.reagents)[ReagentName]["Hash"] +export type NetworkChannels = [number, number, number, number, number, number, number, number] + +export const validCircuitPrefabsNames = ["ItemIntegratedCircuit10"] as const; + +type ReadonlyTupleToUnion = T[number]; + +export type CircuitPrefabName = ReadonlyTupleToUnion; + +export type LogicTypeOf = Prefab extends { logic: { logic_types: {} } } ? keyof Prefab["logic"]["logic_types"] : never; + +export interface ObjectFromTemplateOptions { + id: ObjectID, + name?: string, + logic_values?: Prefab extends { logic: {} } ? Record, number> : never, + parent?: Prefab extends { item: {} } ? { + obj: ObjectID, + slot: number, + } : never, + slots?: Prefab extends { slots: readonly unknown[] } ? Record : never, + connections?: Prefab extends { device: {} } ? Record : never, + device_pins?: Prefab extends { device: {} } ? Record : never, + reagents?: Prefab extends { device: {} } ? Record : never, + memory?: Prefab extends { memory: {} } ? number[] | Record : never, + damage?: Prefab extends { item: {} } | { human: {} } ? number : never, + circuit?: ( + K extends CircuitPrefabName + ? { + [TKey in keyof ICInfo]?: ( + ICInfo[TKey] extends Map + ? Record + : (ICInfo[TKey]) + ) + } + : never + ), + source_code?: K extends CircuitPrefabName ? string : never, +} + +export function objectFromTemplate( + prefabName: K, + options?: ObjectFromTemplateOptions, +): FrozenObject { + if (!(prefabName in prefabDatabase.prefabs)) { + return null; + } + const template: ObjectTemplate = prefabDatabase.prefabs[prefabName] as ObjectTemplate; + const frozen: FrozenObject = { + obj_info: { + name: options?.name ?? template.prefab.name, + id: options.id, + prefab: template.prefab.prefab_name, + prefab_hash: template.prefab.prefab_hash, + }, + database_template: true + }; + + if ("item" in template && isSome(options?.parent)) { + frozen.obj_info.parent_slot = [options.parent.obj, options.parent.slot]; + + // root_parent_human: undefined, + } + + if ("logic" in template && isSome(options?.logic_values)) { + frozen.obj_info.logic_values = new Map(Object.entries(options?.logic_values ?? {}) as [LogicType, number][]); + + // slot_logic_values: undefined, + } + + if ("slots" in template && isSome(options?.slots)) { + frozen.obj_info.slots = new Map(); + for (const [indexStr, slotEntry] of Object.entries(options.slots)) { + const index = parseInt(indexStr); + frozen.obj_info.slots.set(index, { + id: slotEntry.occupant, + quantity: slotEntry.quantity + }); + } + } + + if ("device" in template) { + if (isSome(options?.connections)) { + frozen.obj_info.connections = new Map(Object.entries(options.connections).map(([indexStr, net]) => { + return [parseInt(indexStr), net]; + })); + } + if (isSome(options?.device_pins)) { + frozen.obj_info.device_pins = new Map(Object.entries(options.device_pins).map(([indexStr, obj]) => { + return [parseInt(indexStr), obj]; + })); + } + if (isSome(options?.reagents)) { + frozen.obj_info.reagents = new Map(Object.entries(options.reagents).map(([reagent, value]: [ReagentName, number]) => { + return [prefabDatabase.reagents[reagent].Hash, value] + })) + } + + // visible_devices: undefined, + } + + if ("memory" in template) { + const memorySize = template.memory.memory_size; + frozen.obj_info.memory = Array(memorySize).fill(0); + if (isSome(options.memory)) { + if (Array.isArray(options.memory)) { + for (let i = 0; i < options.memory.length && i < memorySize; i++) { + frozen.obj_info.memory[i] = options.memory[i]; + } + } else { + for (const [indexStr, value] of Object.entries(options.memory)) { + const index = parseInt(indexStr); + frozen.obj_info.memory[index] = options.memory[index]; + } + } + } + } + + if ("item" in template && isSome(options.damage)) { + frozen.obj_info.damage = options.damage; + } + if ("human" in template && isSome(options.damage)) { + frozen.obj_info.damage = options.damage; + + // entity: undefined, + } + + if (isSome(options?.circuit) || validCircuitPrefabsNames.includes(prefabName as any)) { + frozen.obj_info.circuit = { + instruction_pointer: isSome(options?.circuit?.instruction_pointer) ? options.circuit.instruction_pointer : 0, + yield_instruction_count: isSome(options?.circuit?.yield_instruction_count) ? options.circuit.yield_instruction_count : 0, + state: isSome(options?.circuit?.state) ? options.circuit.state : "Start", + aliases: isSome(options?.circuit?.aliases) ? new Map(Object.entries(options.circuit.aliases)) : new Map(), + defines: isSome(options?.circuit?.defines) ? new Map(Object.entries(options.circuit.defines)) : new Map(), + labels: isSome(options?.circuit?.labels) ? new Map(Object.entries(options.circuit.labels)) : new Map(), + registers: isSome(options?.circuit?.registers) ? options.circuit.registers : new Array(18).fill(0), + } + } + + if (validCircuitPrefabsNames.includes(prefabName as any) && isSome(options?.source_code)) { + frozen.obj_info.source_code = options.source_code; + } + + return frozen; +} + +export function genNetwork(id: ObjectID, options: { + devices?: ObjectID[], + power_only?: ObjectID[], + channels?: NetworkChannels, +}) { + const net = { + id: 1, + devices: options.devices ?? [], + power_only: options.power_only ?? [], + channels: options.channels ?? Array(8).fill(NaN) as NetworkChannels, + }; + return net; +} + +export { prefabDatabase }; diff --git a/www/src/ts/virtualMachine/prefabDatabase.ts b/www/src/ts/database/prefabDatabase.ts similarity index 89% rename from www/src/ts/virtualMachine/prefabDatabase.ts rename to www/src/ts/database/prefabDatabase.ts index a6ef4f4..745c9ce 100644 --- a/www/src/ts/virtualMachine/prefabDatabase.ts +++ b/www/src/ts/database/prefabDatabase.ts @@ -207,12 +207,15 @@ export default { "slot_class": "Appliance", "sorting_class": "Appliances" }, - "slots": [ - { - "name": "Output", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Output", + "class": "None", + "index": 0 + } } - ], + }, "consumer_info": { "consumed_resources": [ "ItemCharcoal", @@ -272,12 +275,15 @@ export default { "slot_class": "Appliance", "sorting_class": "Appliances" }, - "slots": [ - { - "name": "Output", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Output", + "class": "None", + "index": 0 + } } - ], + }, "consumer_info": { "consumed_resources": [ "ItemCorn", @@ -315,12 +321,15 @@ export default { "slot_class": "Appliance", "sorting_class": "Appliances" }, - "slots": [ - { - "name": "Export", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Export", + "class": "None", + "index": 0 + } } - ], + }, "consumer_info": { "consumed_resources": [ "ItemCookedCondensedMilk", @@ -354,12 +363,15 @@ export default { "slot_class": "Appliance", "sorting_class": "Appliances" }, - "slots": [ - { - "name": "Output", - "typ": "Bottle" + "slots": { + "0": { + "Direct": { + "name": "Output", + "class": "Bottle", + "index": 0 + } } - ], + }, "consumer_info": { "consumed_resources": [ "ItemSoyOil", @@ -387,12 +399,15 @@ export default { "slot_class": "Appliance", "sorting_class": "Appliances" }, - "slots": [ - { - "name": "Input", - "typ": "Tool" + "slots": { + "0": { + "Direct": { + "name": "Input", + "class": "Tool", + "index": 0 + } } - ] + } }, "AppliancePlantGeneticSplicer": { "templateType": "ItemSlots", @@ -409,16 +424,22 @@ export default { "slot_class": "Appliance", "sorting_class": "Appliances" }, - "slots": [ - { - "name": "Source Plant", - "typ": "Plant" + "slots": { + "0": { + "Direct": { + "name": "Source Plant", + "class": "Plant", + "index": 0 + } }, - { - "name": "Target Plant", - "typ": "Plant" + "1": { + "Direct": { + "name": "Target Plant", + "class": "Plant", + "index": 1 + } } - ] + } }, "AppliancePlantGeneticStabilizer": { "templateType": "ItemSlots", @@ -435,12 +456,15 @@ export default { "slot_class": "Appliance", "sorting_class": "Appliances" }, - "slots": [ - { - "name": "Plant", - "typ": "Plant" + "slots": { + "0": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 0 + } } - ] + } }, "ApplianceReagentProcessor": { "templateType": "ItemConsumer", @@ -457,16 +481,22 @@ export default { "slot_class": "Appliance", "sorting_class": "Appliances" }, - "slots": [ - { - "name": "Input", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Input", + "class": "None", + "index": 0 + } }, - { - "name": "Output", - "typ": "None" + "1": { + "Direct": { + "name": "Output", + "class": "None", + "index": 1 + } } - ], + }, "consumer_info": { "consumed_resources": [ "ItemWheat", @@ -497,56 +527,92 @@ export default { "slot_class": "Appliance", "sorting_class": "Appliances" }, - "slots": [ - { - "name": "Plant", - "typ": "Plant" + "slots": { + "0": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 0 + } }, - { - "name": "Plant", - "typ": "Plant" + "1": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 1 + } }, - { - "name": "Plant", - "typ": "Plant" + "2": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 2 + } }, - { - "name": "Plant", - "typ": "Plant" + "3": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 3 + } }, - { - "name": "Plant", - "typ": "Plant" + "4": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 4 + } }, - { - "name": "Plant", - "typ": "Plant" + "5": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 5 + } }, - { - "name": "Plant", - "typ": "Plant" + "6": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 6 + } }, - { - "name": "Plant", - "typ": "Plant" + "7": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 7 + } }, - { - "name": "Plant", - "typ": "Plant" + "8": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 8 + } }, - { - "name": "Plant", - "typ": "Plant" + "9": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 9 + } }, - { - "name": "Plant", - "typ": "Plant" + "10": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 10 + } }, - { - "name": "Plant", - "typ": "Plant" + "11": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 11 + } } - ] + } }, "ApplianceTabletDock": { "templateType": "ItemSlots", @@ -563,12 +629,15 @@ export default { "slot_class": "Appliance", "sorting_class": "Appliances" }, - "slots": [ - { - "name": "", - "typ": "Tool" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "Tool", + "index": 0 + } } - ] + } }, "AutolathePrinterMod": { "templateType": "Item", @@ -620,7 +689,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [] + "slots": {} }, "Battery_Wireless_cell_Big": { "templateType": "ItemLogic", @@ -656,7 +725,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [] + "slots": {} }, "CardboardBox": { "templateType": "ItemSlots", @@ -673,32 +742,50 @@ export default { "slot_class": "None", "sorting_class": "Storage" }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } } - ] + } }, "CartridgeAccessController": { "templateType": "Item", @@ -1116,7 +1203,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -1144,48 +1231,78 @@ export default { "slot_class": "Crate", "sorting_class": "Storage" }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } }, - { - "name": "", - "typ": "None" + "6": { + "Direct": { + "name": "", + "class": "None", + "index": 6 + } }, - { - "name": "", - "typ": "None" + "7": { + "Direct": { + "name": "", + "class": "None", + "index": 7 + } }, - { - "name": "", - "typ": "None" + "8": { + "Direct": { + "name": "", + "class": "None", + "index": 8 + } }, - { - "name": "", - "typ": "None" + "9": { + "Direct": { + "name": "", + "class": "None", + "index": 9 + } } - ] + } }, "DecayedFood": { "templateType": "Item", @@ -1240,7 +1357,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -1421,7 +1538,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -1462,16 +1579,22 @@ export default { "convection_factor": 0.0, "radiation_factor": 0.0 }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } }, - { - "name": "Liquid Canister", - "typ": "LiquidCanister" + "1": { + "Direct": { + "name": "Liquid Canister", + "class": "LiquidCanister", + "index": 1 + } } - ] + } }, "DynamicCrate": { "templateType": "ItemSlots", @@ -1488,48 +1611,78 @@ export default { "slot_class": "Crate", "sorting_class": "Storage" }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } }, - { - "name": "", - "typ": "None" + "6": { + "Direct": { + "name": "", + "class": "None", + "index": 6 + } }, - { - "name": "", - "typ": "None" + "7": { + "Direct": { + "name": "", + "class": "None", + "index": 7 + } }, - { - "name": "", - "typ": "None" + "8": { + "Direct": { + "name": "", + "class": "None", + "index": 8 + } }, - { - "name": "", - "typ": "None" + "9": { + "Direct": { + "name": "", + "class": "None", + "index": 9 + } } - ] + } }, "DynamicGPR": { "templateType": "ItemLogic", @@ -1570,12 +1723,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "DynamicGasCanisterAir": { "templateType": "ItemSlots", @@ -1596,12 +1752,15 @@ export default { "convection_factor": 0.025, "radiation_factor": 0.025 }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Gas Canister", + "class": "None", + "index": 0 + } } - ] + } }, "DynamicGasCanisterCarbonDioxide": { "templateType": "ItemSlots", @@ -1622,12 +1781,15 @@ export default { "convection_factor": 0.025, "radiation_factor": 0.025 }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Gas Canister", + "class": "None", + "index": 0 + } } - ] + } }, "DynamicGasCanisterEmpty": { "templateType": "ItemSlots", @@ -1648,12 +1810,15 @@ export default { "convection_factor": 0.025, "radiation_factor": 0.025 }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Gas Canister", + "class": "None", + "index": 0 + } } - ] + } }, "DynamicGasCanisterFuel": { "templateType": "ItemSlots", @@ -1674,12 +1839,15 @@ export default { "convection_factor": 0.025, "radiation_factor": 0.025 }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Gas Canister", + "class": "None", + "index": 0 + } } - ] + } }, "DynamicGasCanisterNitrogen": { "templateType": "ItemSlots", @@ -1700,12 +1868,15 @@ export default { "convection_factor": 0.025, "radiation_factor": 0.025 }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Gas Canister", + "class": "None", + "index": 0 + } } - ] + } }, "DynamicGasCanisterNitrousOxide": { "templateType": "ItemSlots", @@ -1726,12 +1897,15 @@ export default { "convection_factor": 0.025, "radiation_factor": 0.025 }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Gas Canister", + "class": "None", + "index": 0 + } } - ] + } }, "DynamicGasCanisterOxygen": { "templateType": "ItemSlots", @@ -1752,12 +1926,15 @@ export default { "convection_factor": 0.025, "radiation_factor": 0.025 }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Gas Canister", + "class": "None", + "index": 0 + } } - ] + } }, "DynamicGasCanisterPollutants": { "templateType": "ItemSlots", @@ -1778,12 +1955,15 @@ export default { "convection_factor": 0.025, "radiation_factor": 0.025 }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Gas Canister", + "class": "None", + "index": 0 + } } - ] + } }, "DynamicGasCanisterRocketFuel": { "templateType": "ItemSlots", @@ -1804,12 +1984,15 @@ export default { "convection_factor": 0.025, "radiation_factor": 0.025 }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Gas Canister", + "class": "None", + "index": 0 + } } - ] + } }, "DynamicGasCanisterVolatiles": { "templateType": "ItemSlots", @@ -1830,12 +2013,15 @@ export default { "convection_factor": 0.025, "radiation_factor": 0.025 }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Gas Canister", + "class": "None", + "index": 0 + } } - ] + } }, "DynamicGasCanisterWater": { "templateType": "ItemSlots", @@ -1856,12 +2042,15 @@ export default { "convection_factor": 0.025, "radiation_factor": 0.025 }, - "slots": [ - { - "name": "Gas Canister", - "typ": "LiquidCanister" + "slots": { + "0": { + "Direct": { + "name": "Gas Canister", + "class": "LiquidCanister", + "index": 0 + } } - ] + } }, "DynamicGasTankAdvanced": { "templateType": "ItemSlots", @@ -1882,12 +2071,15 @@ export default { "convection_factor": 0.0, "radiation_factor": 0.0 }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Gas Canister", + "class": "None", + "index": 0 + } } - ] + } }, "DynamicGasTankAdvancedOxygen": { "templateType": "ItemSlots", @@ -1908,12 +2100,15 @@ export default { "convection_factor": 0.0, "radiation_factor": 0.0 }, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Gas Canister", + "class": "None", + "index": 0 + } } - ] + } }, "DynamicGenerator": { "templateType": "ItemSlots", @@ -1934,16 +2129,22 @@ export default { "convection_factor": 0.0, "radiation_factor": 0.0 }, - "slots": [ - { - "name": "Gas Canister", - "typ": "GasCanister" + "slots": { + "0": { + "Direct": { + "name": "Gas Canister", + "class": "GasCanister", + "index": 0 + } }, - { - "name": "Battery", - "typ": "Battery" + "1": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 1 + } } - ] + } }, "DynamicHydroponics": { "templateType": "ItemSlots", @@ -1964,44 +2165,71 @@ export default { "convection_factor": 0.05, "radiation_factor": 0.05 }, - "slots": [ - { - "name": "Plant", - "typ": "Plant" + "slots": { + "0": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 0 + } }, - { - "name": "Plant", - "typ": "Plant" + "1": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 1 + } }, - { - "name": "Plant", - "typ": "Plant" + "2": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 2 + } }, - { - "name": "Plant", - "typ": "Plant" + "3": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 3 + } }, - { - "name": "Liquid Canister", - "typ": "LiquidCanister" + "4": { + "Direct": { + "name": "Liquid Canister", + "class": "LiquidCanister", + "index": 4 + } }, - { - "name": "Liquid Canister", - "typ": "Plant" + "5": { + "Direct": { + "name": "Liquid Canister", + "class": "Plant", + "index": 5 + } }, - { - "name": "Liquid Canister", - "typ": "Plant" + "6": { + "Direct": { + "name": "Liquid Canister", + "class": "Plant", + "index": 6 + } }, - { - "name": "Liquid Canister", - "typ": "Plant" + "7": { + "Direct": { + "name": "Liquid Canister", + "class": "Plant", + "index": 7 + } }, - { - "name": "Liquid Canister", - "typ": "Plant" + "8": { + "Direct": { + "name": "Liquid Canister", + "class": "Plant", + "index": 8 + } } - ] + } }, "DynamicLight": { "templateType": "ItemLogic", @@ -2043,12 +2271,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "DynamicLiquidCanisterEmpty": { "templateType": "ItemSlots", @@ -2069,12 +2300,15 @@ export default { "convection_factor": 0.025, "radiation_factor": 0.025 }, - "slots": [ - { - "name": "Liquid Canister", - "typ": "LiquidCanister" + "slots": { + "0": { + "Direct": { + "name": "Liquid Canister", + "class": "LiquidCanister", + "index": 0 + } } - ] + } }, "DynamicMKIILiquidCanisterEmpty": { "templateType": "ItemSlots", @@ -2095,12 +2329,15 @@ export default { "convection_factor": 0.0, "radiation_factor": 0.0 }, - "slots": [ - { - "name": "Liquid Canister", - "typ": "LiquidCanister" + "slots": { + "0": { + "Direct": { + "name": "Liquid Canister", + "class": "LiquidCanister", + "index": 0 + } } - ] + } }, "DynamicMKIILiquidCanisterWater": { "templateType": "ItemSlots", @@ -2121,12 +2358,15 @@ export default { "convection_factor": 0.0, "radiation_factor": 0.0 }, - "slots": [ - { - "name": "Liquid Canister", - "typ": "LiquidCanister" + "slots": { + "0": { + "Direct": { + "name": "Liquid Canister", + "class": "LiquidCanister", + "index": 0 + } } - ] + } }, "DynamicScrubber": { "templateType": "ItemSlots", @@ -2147,20 +2387,29 @@ export default { "convection_factor": 0.0, "radiation_factor": 0.0 }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } }, - { - "name": "Gas Filter", - "typ": "GasFilter" + "1": { + "Direct": { + "name": "Gas Filter", + "class": "GasFilter", + "index": 1 + } }, - { - "name": "Gas Filter", - "typ": "GasFilter" + "2": { + "Direct": { + "name": "Gas Filter", + "class": "GasFilter", + "index": 2 + } } - ] + } }, "DynamicSkeleton": { "templateType": "Item", @@ -2229,12 +2478,15 @@ export default { "convection_factor": 0.1, "radiation_factor": 0.1 }, - "slots": [ - { - "name": "Brain", - "typ": "Organ" + "slots": { + "0": { + "Direct": { + "name": "Brain", + "class": "Organ", + "index": 0 + } } - ] + } }, "EntityChickenBrown": { "templateType": "ItemSlots", @@ -2255,12 +2507,15 @@ export default { "convection_factor": 0.1, "radiation_factor": 0.1 }, - "slots": [ - { - "name": "Brain", - "typ": "Organ" + "slots": { + "0": { + "Direct": { + "name": "Brain", + "class": "Organ", + "index": 0 + } } - ] + } }, "EntityChickenWhite": { "templateType": "ItemSlots", @@ -2281,12 +2536,15 @@ export default { "convection_factor": 0.1, "radiation_factor": 0.1 }, - "slots": [ - { - "name": "Brain", - "typ": "Organ" + "slots": { + "0": { + "Direct": { + "name": "Brain", + "class": "Organ", + "index": 0 + } } - ] + } }, "EntityRoosterBlack": { "templateType": "ItemSlots", @@ -2307,12 +2565,15 @@ export default { "convection_factor": 0.1, "radiation_factor": 0.1 }, - "slots": [ - { - "name": "Brain", - "typ": "Organ" + "slots": { + "0": { + "Direct": { + "name": "Brain", + "class": "Organ", + "index": 0 + } } - ] + } }, "EntityRoosterBrown": { "templateType": "ItemSlots", @@ -2333,12 +2594,15 @@ export default { "convection_factor": 0.1, "radiation_factor": 0.1 }, - "slots": [ - { - "name": "Brain", - "typ": "Organ" + "slots": { + "0": { + "Direct": { + "name": "Brain", + "class": "Organ", + "index": 0 + } } - ] + } }, "Fertilizer": { "templateType": "Item", @@ -2371,12 +2635,15 @@ export default { "slot_class": "None", "sorting_class": "Tools" }, - "slots": [ - { - "name": "", - "typ": "Magazine" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "Magazine", + "index": 0 + } } - ] + } }, "Flag_ODA_10m": { "templateType": "Structure", @@ -2441,16 +2708,22 @@ export default { "slot_class": "Tool", "sorting_class": "Tools" }, - "slots": [ - { - "name": "Magazine", - "typ": "Flare" + "slots": { + "0": { + "Direct": { + "name": "Magazine", + "class": "Flare", + "index": 0 + } }, - { - "name": "", - "typ": "Blocked" + "1": { + "Direct": { + "name": "", + "class": "Blocked", + "index": 1 + } } - ] + } }, "H2Combustor": { "templateType": "StructureCircuitHolder", @@ -2552,12 +2825,15 @@ export default { "wireless_logic": false, "circuit_holder": true }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" + "slots": { + "0": { + "Direct": { + "name": "Programmable Chip", + "class": "ProgrammableChip", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -2603,12 +2879,15 @@ export default { "slot_class": "None", "sorting_class": "Tools" }, - "slots": [ - { - "name": "Magazine", - "typ": "Magazine" + "slots": { + "0": { + "Direct": { + "name": "Magazine", + "class": "Magazine", + "index": 0 + } } - ] + } }, "HandgunMagazine": { "templateType": "Item", @@ -2763,24 +3042,36 @@ export default { "wireless_logic": true, "circuit_holder": true }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } }, - { - "name": "Cartridge", - "typ": "Cartridge" + "1": { + "Direct": { + "name": "Cartridge", + "class": "Cartridge", + "index": 1 + } }, - { - "name": "Cartridge1", - "typ": "Cartridge" + "2": { + "Direct": { + "name": "Cartridge1", + "class": "Cartridge", + "index": 2 + } }, - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" + "3": { + "Direct": { + "name": "Programmable Chip", + "class": "ProgrammableChip", + "index": 3 + } } - ] + } }, "ItemAlienMushroom": { "templateType": "Item", @@ -2852,12 +3143,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemArcWelder": { "templateType": "ItemLogic", @@ -2897,12 +3191,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemAreaPowerControl": { "templateType": "Item", @@ -3037,7 +3334,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [] + "slots": {} }, "ItemBatteryCellLarge": { "templateType": "ItemLogic", @@ -3073,7 +3370,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [] + "slots": {} }, "ItemBatteryCellNuclear": { "templateType": "ItemLogic", @@ -3109,7 +3406,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [] + "slots": {} }, "ItemBatteryCharger": { "templateType": "Item", @@ -3182,12 +3479,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemBiomass": { "templateType": "Item", @@ -3399,32 +3699,50 @@ export default { "slot_class": "None", "sorting_class": "Storage" }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } } - ] + } }, "ItemCerealBarBox": { "templateType": "ItemSlots", @@ -3441,32 +3759,50 @@ export default { "slot_class": "None", "sorting_class": "Storage" }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } } - ] + } }, "ItemCharcoal": { "templateType": "Item", @@ -4101,12 +4437,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemDuctTape": { "templateType": "Item", @@ -4171,32 +4510,50 @@ export default { "slot_class": "None", "sorting_class": "Storage" }, - "slots": [ - { - "name": "", - "typ": "Egg" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "Egg", + "index": 0 + } }, - { - "name": "", - "typ": "Egg" + "1": { + "Direct": { + "name": "", + "class": "Egg", + "index": 1 + } }, - { - "name": "", - "typ": "Egg" + "2": { + "Direct": { + "name": "", + "class": "Egg", + "index": 2 + } }, - { - "name": "", - "typ": "Egg" + "3": { + "Direct": { + "name": "", + "class": "Egg", + "index": 3 + } }, - { - "name": "", - "typ": "Egg" + "4": { + "Direct": { + "name": "", + "class": "Egg", + "index": 4 + } }, - { - "name": "", - "typ": "Egg" + "5": { + "Direct": { + "name": "", + "class": "Egg", + "index": 5 + } } - ] + } }, "ItemElectronicParts": { "templateType": "Item", @@ -4271,12 +4628,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemEmergencyArcWelder": { "templateType": "ItemLogic", @@ -4316,12 +4676,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemEmergencyCrowbar": { "templateType": "Item", @@ -4377,12 +4740,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemEmergencyEvaSuit": { "templateType": "ItemSuit", @@ -4406,32 +4772,50 @@ export default { "internal_atmo_info": { "volume": 10.0 }, - "slots": [ - { - "name": "Air Tank", - "typ": "GasCanister" + "slots": { + "0": { + "Direct": { + "name": "Air Tank", + "class": "GasCanister", + "index": 0 + } }, - { - "name": "Waste Tank", - "typ": "GasCanister" + "1": { + "Direct": { + "name": "Waste Tank", + "class": "GasCanister", + "index": 1 + } }, - { - "name": "Life Support", - "typ": "Battery" + "2": { + "Direct": { + "name": "Life Support", + "class": "Battery", + "index": 2 + } }, - { - "name": "Filter", - "typ": "GasFilter" + "3": { + "Direct": { + "name": "Filter", + "class": "GasFilter", + "index": 3 + } }, - { - "name": "Filter", - "typ": "GasFilter" + "4": { + "Direct": { + "name": "Filter", + "class": "GasFilter", + "index": 4 + } }, - { - "name": "Filter", - "typ": "GasFilter" + "5": { + "Direct": { + "name": "Filter", + "class": "GasFilter", + "index": 5 + } } - ], + }, "suit_info": { "hygiene_reduction_multiplier": 1.0, "waste_max_pressure": 4053.0 @@ -4528,7 +4912,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [] + "slots": {} }, "ItemEmergencySuppliesBox": { "templateType": "ItemSlots", @@ -4545,32 +4929,50 @@ export default { "slot_class": "None", "sorting_class": "Default" }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } } - ] + } }, "ItemEmergencyToolBelt": { "templateType": "ItemSlots", @@ -4587,40 +4989,64 @@ export default { "slot_class": "Belt", "sorting_class": "Clothing" }, - "slots": [ - { - "name": "Tool", - "typ": "Tool" + "slots": { + "0": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 0 + } }, - { - "name": "Tool", - "typ": "Tool" + "1": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 1 + } }, - { - "name": "Tool", - "typ": "Tool" + "2": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 2 + } }, - { - "name": "Tool", - "typ": "Tool" + "3": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 3 + } }, - { - "name": "Tool", - "typ": "Tool" + "4": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 4 + } }, - { - "name": "Tool", - "typ": "Tool" + "5": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 5 + } }, - { - "name": "Tool", - "typ": "Tool" + "6": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 6 + } }, - { - "name": "Tool", - "typ": "Tool" + "7": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 7 + } } - ] + } }, "ItemEmergencyWireCutters": { "templateType": "Item", @@ -4695,32 +5121,50 @@ export default { "internal_atmo_info": { "volume": 10.0 }, - "slots": [ - { - "name": "Air Tank", - "typ": "GasCanister" + "slots": { + "0": { + "Direct": { + "name": "Air Tank", + "class": "GasCanister", + "index": 0 + } }, - { - "name": "Waste Tank", - "typ": "GasCanister" + "1": { + "Direct": { + "name": "Waste Tank", + "class": "GasCanister", + "index": 1 + } }, - { - "name": "Life Support", - "typ": "Battery" + "2": { + "Direct": { + "name": "Life Support", + "class": "Battery", + "index": 2 + } }, - { - "name": "Filter", - "typ": "GasFilter" + "3": { + "Direct": { + "name": "Filter", + "class": "GasFilter", + "index": 3 + } }, - { - "name": "Filter", - "typ": "GasFilter" + "4": { + "Direct": { + "name": "Filter", + "class": "GasFilter", + "index": 4 + } }, - { - "name": "Filter", - "typ": "GasFilter" + "5": { + "Direct": { + "name": "Filter", + "class": "GasFilter", + "index": 5 + } } - ], + }, "suit_info": { "hygiene_reduction_multiplier": 1.0, "waste_max_pressure": 4053.0 @@ -4871,12 +5315,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemFlour": { "templateType": "Item", @@ -5982,56 +6429,92 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } }, - { - "name": "", - "typ": "None" + "6": { + "Direct": { + "name": "", + "class": "None", + "index": 6 + } }, - { - "name": "", - "typ": "None" + "7": { + "Direct": { + "name": "", + "class": "None", + "index": 7 + } }, - { - "name": "", - "typ": "None" + "8": { + "Direct": { + "name": "", + "class": "None", + "index": 8 + } }, - { - "name": "", - "typ": "None" + "9": { + "Direct": { + "name": "", + "class": "None", + "index": 9 + } }, - { - "name": "", - "typ": "None" + "10": { + "Direct": { + "name": "", + "class": "None", + "index": 10 + } }, - { - "name": "", - "typ": "None" + "11": { + "Direct": { + "name": "", + "class": "None", + "index": 11 + } } - ] + } }, "ItemHardJetpack": { "templateType": "ItemLogic", @@ -6197,68 +6680,113 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Propellant", - "typ": "GasCanister" + "slots": { + "0": { + "Direct": { + "name": "Propellant", + "class": "GasCanister", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } }, - { - "name": "", - "typ": "None" + "6": { + "Direct": { + "name": "", + "class": "None", + "index": 6 + } }, - { - "name": "", - "typ": "None" + "7": { + "Direct": { + "name": "", + "class": "None", + "index": 7 + } }, - { - "name": "", - "typ": "None" + "8": { + "Direct": { + "name": "", + "class": "None", + "index": 8 + } }, - { - "name": "", - "typ": "None" + "9": { + "Direct": { + "name": "", + "class": "None", + "index": 9 + } }, - { - "name": "", - "typ": "None" + "10": { + "Direct": { + "name": "", + "class": "None", + "index": 10 + } }, - { - "name": "", - "typ": "None" + "11": { + "Direct": { + "name": "", + "class": "None", + "index": 11 + } }, - { - "name": "", - "typ": "None" + "12": { + "Direct": { + "name": "", + "class": "None", + "index": 12 + } }, - { - "name": "", - "typ": "None" + "13": { + "Direct": { + "name": "", + "class": "None", + "index": 13 + } }, - { - "name": "", - "typ": "None" + "14": { + "Direct": { + "name": "", + "class": "None", + "index": 14 + } } - ] + } }, "ItemHardMiningBackPack": { "templateType": "ItemSlots", @@ -6275,120 +6803,204 @@ export default { "slot_class": "Back", "sorting_class": "Clothing" }, - "slots": [ - { - "name": "Ore", - "typ": "Ore" + "slots": { + "0": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 0 + } }, - { - "name": "Ore", - "typ": "Ore" + "1": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 1 + } }, - { - "name": "Ore", - "typ": "Ore" + "2": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 2 + } }, - { - "name": "Ore", - "typ": "Ore" + "3": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 3 + } }, - { - "name": "Ore", - "typ": "Ore" + "4": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 4 + } }, - { - "name": "Ore", - "typ": "Ore" + "5": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 5 + } }, - { - "name": "Ore", - "typ": "Ore" + "6": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 6 + } }, - { - "name": "Ore", - "typ": "Ore" + "7": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 7 + } }, - { - "name": "Ore", - "typ": "Ore" + "8": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 8 + } }, - { - "name": "Ore", - "typ": "Ore" + "9": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 9 + } }, - { - "name": "Ore", - "typ": "Ore" + "10": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 10 + } }, - { - "name": "Ore", - "typ": "Ore" + "11": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 11 + } }, - { - "name": "Ore", - "typ": "Ore" + "12": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 12 + } }, - { - "name": "Ore", - "typ": "Ore" + "13": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 13 + } }, - { - "name": "Ore", - "typ": "Ore" + "14": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 14 + } }, - { - "name": "Ore", - "typ": "Ore" + "15": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 15 + } }, - { - "name": "Ore", - "typ": "Ore" + "16": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 16 + } }, - { - "name": "Ore", - "typ": "Ore" + "17": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 17 + } }, - { - "name": "Ore", - "typ": "Ore" + "18": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 18 + } }, - { - "name": "Ore", - "typ": "Ore" + "19": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 19 + } }, - { - "name": "Ore", - "typ": "Ore" + "20": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 20 + } }, - { - "name": "Ore", - "typ": "Ore" + "21": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 21 + } }, - { - "name": "Ore", - "typ": "Ore" + "22": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 22 + } }, - { - "name": "Ore", - "typ": "Ore" + "23": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 23 + } }, - { - "name": "Ore", - "typ": "Ore" + "24": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 24 + } }, - { - "name": "Ore", - "typ": "Ore" + "25": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 25 + } }, - { - "name": "Ore", - "typ": "Ore" + "26": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 26 + } }, - { - "name": "Ore", - "typ": "Ore" + "27": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 27 + } } - ] + } }, "ItemHardSuit": { "templateType": "ItemSuitCircuitHolder", @@ -6554,40 +7166,64 @@ export default { "wireless_logic": true, "circuit_holder": true }, - "slots": [ - { - "name": "Air Tank", - "typ": "GasCanister" + "slots": { + "0": { + "Direct": { + "name": "Air Tank", + "class": "GasCanister", + "index": 0 + } }, - { - "name": "Waste Tank", - "typ": "GasCanister" + "1": { + "Direct": { + "name": "Waste Tank", + "class": "GasCanister", + "index": 1 + } }, - { - "name": "Life Support", - "typ": "Battery" + "2": { + "Direct": { + "name": "Life Support", + "class": "Battery", + "index": 2 + } }, - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" + "3": { + "Direct": { + "name": "Programmable Chip", + "class": "ProgrammableChip", + "index": 3 + } }, - { - "name": "Filter", - "typ": "GasFilter" + "4": { + "Direct": { + "name": "Filter", + "class": "GasFilter", + "index": 4 + } }, - { - "name": "Filter", - "typ": "GasFilter" + "5": { + "Direct": { + "name": "Filter", + "class": "GasFilter", + "index": 5 + } }, - { - "name": "Filter", - "typ": "GasFilter" + "6": { + "Direct": { + "name": "Filter", + "class": "GasFilter", + "index": 6 + } }, - { - "name": "Filter", - "typ": "GasFilter" + "7": { + "Direct": { + "name": "Filter", + "class": "GasFilter", + "index": 7 + } } - ], + }, "suit_info": { "hygiene_reduction_multiplier": 1.5, "waste_max_pressure": 4053.0 @@ -6656,7 +7292,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [] + "slots": {} }, "ItemHastelloyIngot": { "templateType": "Item", @@ -6731,48 +7367,78 @@ export default { "slot_class": "Belt", "sorting_class": "Clothing" }, - "slots": [ - { - "name": "Tool", - "typ": "Tool" + "slots": { + "0": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 0 + } }, - { - "name": "Tool", - "typ": "Tool" + "1": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 1 + } }, - { - "name": "Plant", - "typ": "Plant" + "2": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 2 + } }, - { - "name": "Plant", - "typ": "Plant" + "3": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 3 + } }, - { - "name": "Plant", - "typ": "Plant" + "4": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 4 + } }, - { - "name": "Plant", - "typ": "Plant" + "5": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 5 + } }, - { - "name": "Plant", - "typ": "Plant" + "6": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 6 + } }, - { - "name": "Plant", - "typ": "Plant" + "7": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 7 + } }, - { - "name": "Plant", - "typ": "Plant" + "8": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 8 + } }, - { - "name": "Plant", - "typ": "Plant" + "9": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 9 + } } - ] + } }, "ItemHydroponicTray": { "templateType": "Item", @@ -6856,12 +7522,15 @@ export default { "slot_class": "None", "sorting_class": "Default" }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } } - ] + } }, "ItemInsulation": { "templateType": "Item", @@ -6904,7 +7573,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "memory": { "memory_access": "ReadWrite", "memory_size": 512 @@ -7118,48 +7787,78 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Propellant", - "typ": "GasCanister" + "slots": { + "0": { + "Direct": { + "name": "Propellant", + "class": "GasCanister", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } }, - { - "name": "", - "typ": "None" + "6": { + "Direct": { + "name": "", + "class": "None", + "index": 6 + } }, - { - "name": "", - "typ": "None" + "7": { + "Direct": { + "name": "", + "class": "None", + "index": 7 + } }, - { - "name": "", - "typ": "None" + "8": { + "Direct": { + "name": "", + "class": "None", + "index": 8 + } }, - { - "name": "", - "typ": "None" + "9": { + "Direct": { + "name": "", + "class": "None", + "index": 9 + } } - ] + } }, "ItemKitAIMeE": { "templateType": "Item", @@ -8393,6 +9092,86 @@ export default { "sorting_class": "Kits" } }, + "ItemKitLarreDockAtmos": { + "templateType": "Item", + "prefab": { + "prefab_name": "ItemKitLarreDockAtmos", + "prefab_hash": 385528206, + "desc": "", + "name": "Kit (LArRE Dock Atmos)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLarreDockBypass": { + "templateType": "Item", + "prefab": { + "prefab_name": "ItemKitLarreDockBypass", + "prefab_hash": -940470326, + "desc": "", + "name": "Kit (LArRE Dock Bypass)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLarreDockCargo": { + "templateType": "Item", + "prefab": { + "prefab_name": "ItemKitLarreDockCargo", + "prefab_hash": -1067485367, + "desc": "", + "name": "Kit (LArRE Dock Cargo)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLarreDockCollector": { + "templateType": "Item", + "prefab": { + "prefab_name": "ItemKitLarreDockCollector", + "prefab_hash": 347658127, + "desc": "", + "name": "Kit (LArRE Dock Collector)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, + "ItemKitLarreDockHydroponics": { + "templateType": "Item", + "prefab": { + "prefab_name": "ItemKitLarreDockHydroponics", + "prefab_hash": 656181408, + "desc": "", + "name": "Kit (LArRE Dock Hydroponics)" + }, + "item": { + "consumable": false, + "ingredient": false, + "max_quantity": 1, + "slot_class": "None", + "sorting_class": "Kits" + } + }, "ItemKitLaunchMount": { "templateType": "Item", "prefab": { @@ -10080,12 +10859,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemLaptop": { "templateType": "ItemCircuitHolder", @@ -10149,20 +10931,29 @@ export default { "wireless_logic": true, "circuit_holder": true }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" + "slots": { + "0": { + "Direct": { + "name": "Programmable Chip", + "class": "ProgrammableChip", + "index": 0 + } }, - { - "name": "Battery", - "typ": "Battery" + "1": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 1 + } }, - { - "name": "Motherboard", - "typ": "Motherboard" + "2": { + "Direct": { + "name": "Motherboard", + "class": "Motherboard", + "index": 2 + } } - ] + } }, "ItemLeadIngot": { "templateType": "Item", @@ -10398,12 +11189,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemMKIIArcWelder": { "templateType": "ItemLogic", @@ -10443,12 +11237,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemMKIICrowbar": { "templateType": "Item", @@ -10504,12 +11301,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemMKIIDuctTape": { "templateType": "Item", @@ -10572,12 +11372,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemMKIIScrewdriver": { "templateType": "Item", @@ -10642,24 +11445,36 @@ export default { "slot_class": "Suit", "sorting_class": "Clothing" }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } } - ] + } }, "ItemMarineHelmet": { "templateType": "ItemSlots", @@ -10676,12 +11491,15 @@ export default { "slot_class": "Helmet", "sorting_class": "Clothing" }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemMilk": { "templateType": "Item", @@ -10717,104 +11535,176 @@ export default { "slot_class": "Back", "sorting_class": "Clothing" }, - "slots": [ - { - "name": "Ore", - "typ": "Ore" + "slots": { + "0": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 0 + } }, - { - "name": "Ore", - "typ": "Ore" + "1": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 1 + } }, - { - "name": "Ore", - "typ": "Ore" + "2": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 2 + } }, - { - "name": "Ore", - "typ": "Ore" + "3": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 3 + } }, - { - "name": "Ore", - "typ": "Ore" + "4": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 4 + } }, - { - "name": "Ore", - "typ": "Ore" + "5": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 5 + } }, - { - "name": "Ore", - "typ": "Ore" + "6": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 6 + } }, - { - "name": "Ore", - "typ": "Ore" + "7": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 7 + } }, - { - "name": "Ore", - "typ": "Ore" + "8": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 8 + } }, - { - "name": "Ore", - "typ": "Ore" + "9": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 9 + } }, - { - "name": "Ore", - "typ": "Ore" + "10": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 10 + } }, - { - "name": "Ore", - "typ": "Ore" + "11": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 11 + } }, - { - "name": "Ore", - "typ": "Ore" + "12": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 12 + } }, - { - "name": "Ore", - "typ": "Ore" + "13": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 13 + } }, - { - "name": "Ore", - "typ": "Ore" + "14": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 14 + } }, - { - "name": "Ore", - "typ": "Ore" + "15": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 15 + } }, - { - "name": "Ore", - "typ": "Ore" + "16": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 16 + } }, - { - "name": "Ore", - "typ": "Ore" + "17": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 17 + } }, - { - "name": "Ore", - "typ": "Ore" + "18": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 18 + } }, - { - "name": "Ore", - "typ": "Ore" + "19": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 19 + } }, - { - "name": "Ore", - "typ": "Ore" + "20": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 20 + } }, - { - "name": "Ore", - "typ": "Ore" + "21": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 21 + } }, - { - "name": "Ore", - "typ": "Ore" + "22": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 22 + } }, - { - "name": "Ore", - "typ": "Ore" + "23": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 23 + } } - ] + } }, "ItemMiningBelt": { "templateType": "ItemSlots", @@ -10831,48 +11721,78 @@ export default { "slot_class": "Belt", "sorting_class": "Clothing" }, - "slots": [ - { - "name": "Tool", - "typ": "Tool" + "slots": { + "0": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 0 + } }, - { - "name": "Tool", - "typ": "Tool" + "1": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 1 + } }, - { - "name": "Ore", - "typ": "Ore" + "2": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 2 + } }, - { - "name": "Ore", - "typ": "Ore" + "3": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 3 + } }, - { - "name": "Ore", - "typ": "Ore" + "4": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 4 + } }, - { - "name": "Ore", - "typ": "Ore" + "5": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 5 + } }, - { - "name": "Ore", - "typ": "Ore" + "6": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 6 + } }, - { - "name": "Ore", - "typ": "Ore" + "7": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 7 + } }, - { - "name": "Ore", - "typ": "Ore" + "8": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 8 + } }, - { - "name": "Ore", - "typ": "Ore" + "9": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 9 + } } - ] + } }, "ItemMiningBeltMKII": { "templateType": "ItemLogic", @@ -11034,68 +11954,113 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Tool", - "typ": "Tool" + "slots": { + "0": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 0 + } }, - { - "name": "Tool", - "typ": "Tool" + "1": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 1 + } }, - { - "name": "Ore", - "typ": "Ore" + "2": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 2 + } }, - { - "name": "Ore", - "typ": "Ore" + "3": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 3 + } }, - { - "name": "Ore", - "typ": "Ore" + "4": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 4 + } }, - { - "name": "Ore", - "typ": "Ore" + "5": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 5 + } }, - { - "name": "Ore", - "typ": "Ore" + "6": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 6 + } }, - { - "name": "Ore", - "typ": "Ore" + "7": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 7 + } }, - { - "name": "Ore", - "typ": "Ore" + "8": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 8 + } }, - { - "name": "Ore", - "typ": "Ore" + "9": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 9 + } }, - { - "name": "Ore", - "typ": "Ore" + "10": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 10 + } }, - { - "name": "Ore", - "typ": "Ore" + "11": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 11 + } }, - { - "name": "Ore", - "typ": "Ore" + "12": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 12 + } }, - { - "name": "Ore", - "typ": "Ore" + "13": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 13 + } }, - { - "name": "Ore", - "typ": "Ore" + "14": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 14 + } } - ] + } }, "ItemMiningCharge": { "templateType": "Item", @@ -11158,12 +12123,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemMiningDrillHeavy": { "templateType": "ItemLogic", @@ -11210,12 +12178,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemMiningDrillPneumatic": { "templateType": "ItemSlots", @@ -11232,12 +12203,15 @@ export default { "slot_class": "Tool", "sorting_class": "Tools" }, - "slots": [ - { - "name": "Gas Canister", - "typ": "GasCanister" + "slots": { + "0": { + "Direct": { + "name": "Gas Canister", + "class": "GasCanister", + "index": 0 + } } - ] + } }, "ItemMiningPackage": { "templateType": "ItemSlots", @@ -11254,32 +12228,50 @@ export default { "slot_class": "None", "sorting_class": "Storage" }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } } - ] + } }, "ItemMkIIToolbelt": { "templateType": "ItemLogic", @@ -11414,56 +12406,92 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Tool", - "typ": "Tool" + "slots": { + "0": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 0 + } }, - { - "name": "Tool", - "typ": "Tool" + "1": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 1 + } }, - { - "name": "Tool", - "typ": "Tool" + "2": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 2 + } }, - { - "name": "Tool", - "typ": "Tool" + "3": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 3 + } }, - { - "name": "Tool", - "typ": "Tool" + "4": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 4 + } }, - { - "name": "Tool", - "typ": "Tool" + "5": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 5 + } }, - { - "name": "Tool", - "typ": "Tool" + "6": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 6 + } }, - { - "name": "Tool", - "typ": "Tool" + "7": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 7 + } }, - { - "name": "Tool", - "typ": "Tool" + "8": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 8 + } }, - { - "name": "Tool", - "typ": "Tool" + "9": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 9 + } }, - { - "name": "", - "typ": "None" + "10": { + "Direct": { + "name": "", + "class": "None", + "index": 10 + } }, - { - "name": "", - "typ": "None" + "11": { + "Direct": { + "name": "", + "class": "None", + "index": 11 + } } - ] + } }, "ItemMuffin": { "templateType": "Item", @@ -11539,12 +12567,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemNickelIngot": { "templateType": "Item", @@ -12012,12 +13043,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemPlantSwitchGrass": { "templateType": "Item", @@ -12114,32 +13148,50 @@ export default { "slot_class": "None", "sorting_class": "Storage" }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } } - ] + } }, "ItemPotato": { "templateType": "Item", @@ -12612,12 +13664,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemResidentialPackage": { "templateType": "ItemSlots", @@ -12634,32 +13689,50 @@ export default { "slot_class": "None", "sorting_class": "Storage" }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } } - ] + } }, "ItemReusableFireExtinguisher": { "templateType": "ItemSlots", @@ -12676,12 +13749,15 @@ export default { "slot_class": "Tool", "sorting_class": "Tools" }, - "slots": [ - { - "name": "Liquid Canister", - "typ": "LiquidCanister" + "slots": { + "0": { + "Direct": { + "name": "Liquid Canister", + "class": "LiquidCanister", + "index": 0 + } } - ] + } }, "ItemRice": { "templateType": "Item", @@ -12941,16 +14017,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } }, - { - "name": "Sensor Processing Unit", - "typ": "SensorProcessingUnit" + "1": { + "Direct": { + "name": "Sensor Processing Unit", + "class": "SensorProcessingUnit", + "index": 1 + } } - ] + } }, "ItemSensorProcessingUnitCelestialScanner": { "templateType": "Item", @@ -13291,7 +14373,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [] + "slots": {} }, "ItemSpaceIce": { "templateType": "Item", @@ -13444,48 +14526,78 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Propellant", - "typ": "GasCanister" + "slots": { + "0": { + "Direct": { + "name": "Propellant", + "class": "GasCanister", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } }, - { - "name": "", - "typ": "None" + "6": { + "Direct": { + "name": "", + "class": "None", + "index": 6 + } }, - { - "name": "", - "typ": "None" + "7": { + "Direct": { + "name": "", + "class": "None", + "index": 7 + } }, - { - "name": "", - "typ": "None" + "8": { + "Direct": { + "name": "", + "class": "None", + "index": 8 + } }, - { - "name": "", - "typ": "None" + "9": { + "Direct": { + "name": "", + "class": "None", + "index": 9 + } } - ] + } }, "ItemSprayCanBlack": { "templateType": "Item", @@ -13694,12 +14806,15 @@ export default { "slot_class": "Tool", "sorting_class": "Tools" }, - "slots": [ - { - "name": "Spray Can", - "typ": "Bottle" + "slots": { + "0": { + "Direct": { + "name": "Spray Can", + "class": "Bottle", + "index": 0 + } } - ] + } }, "ItemSteelFrames": { "templateType": "Item", @@ -13889,16 +15004,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } }, - { - "name": "Cartridge", - "typ": "Cartridge" + "1": { + "Direct": { + "name": "Cartridge", + "class": "Cartridge", + "index": 1 + } } - ] + } }, "ItemTerrainManipulator": { "templateType": "ItemLogic", @@ -13954,16 +15075,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } }, - { - "name": "Dirt Canister", - "typ": "Ore" + "1": { + "Direct": { + "name": "Dirt Canister", + "class": "Ore", + "index": 1 + } } - ] + } }, "ItemTomato": { "templateType": "Item", @@ -14015,40 +15142,64 @@ export default { "slot_class": "Belt", "sorting_class": "Clothing" }, - "slots": [ - { - "name": "Tool", - "typ": "Tool" + "slots": { + "0": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 0 + } }, - { - "name": "Tool", - "typ": "Tool" + "1": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 1 + } }, - { - "name": "Tool", - "typ": "Tool" + "2": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 2 + } }, - { - "name": "Tool", - "typ": "Tool" + "3": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 3 + } }, - { - "name": "Tool", - "typ": "Tool" + "4": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 4 + } }, - { - "name": "Tool", - "typ": "Tool" + "5": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 5 + } }, - { - "name": "Tool", - "typ": "Tool" + "6": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 6 + } }, - { - "name": "Tool", - "typ": "Tool" + "7": { + "Direct": { + "name": "Tool", + "class": "Tool", + "index": 7 + } } - ] + } }, "ItemTropicalPlant": { "templateType": "Item", @@ -14199,32 +15350,50 @@ export default { "slot_class": "None", "sorting_class": "Storage" }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } } - ] + } }, "ItemWaterBottlePackage": { "templateType": "ItemSlots", @@ -14241,32 +15410,50 @@ export default { "slot_class": "None", "sorting_class": "Storage" }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } } - ] + } }, "ItemWaterPipeDigitalValve": { "templateType": "Item", @@ -14354,12 +15541,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "ItemWeldingTorch": { "templateType": "ItemSlots", @@ -14380,12 +15570,15 @@ export default { "convection_factor": 0.5, "radiation_factor": 0.5 }, - "slots": [ - { - "name": "Gas Canister", - "typ": "GasCanister" + "slots": { + "0": { + "Direct": { + "name": "Gas Canister", + "class": "GasCanister", + "index": 0 + } } - ] + } }, "ItemWheat": { "templateType": "Item", @@ -14456,7 +15649,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [] + "slots": {} }, "ItemWreckageAirConditioner1": { "templateType": "Item", @@ -14857,44 +16050,71 @@ export default { "slot_class": "None", "sorting_class": "Default" }, - "slots": [ - { - "name": "", - "typ": "Crate" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "Crate", + "index": 0 + } }, - { - "name": "", - "typ": "Crate" + "1": { + "Direct": { + "name": "", + "class": "Crate", + "index": 1 + } }, - { - "name": "", - "typ": "Crate" + "2": { + "Direct": { + "name": "", + "class": "Crate", + "index": 2 + } }, - { - "name": "", - "typ": "Crate" + "3": { + "Direct": { + "name": "", + "class": "Crate", + "index": 3 + } }, - { - "name": "", - "typ": "Crate" + "4": { + "Direct": { + "name": "", + "class": "Crate", + "index": 4 + } }, - { - "name": "", - "typ": "Crate" + "5": { + "Direct": { + "name": "", + "class": "Crate", + "index": 5 + } }, - { - "name": "", - "typ": "Portables" + "6": { + "Direct": { + "name": "", + "class": "Portables", + "index": 6 + } }, - { - "name": "", - "typ": "Portables" + "7": { + "Direct": { + "name": "", + "class": "Portables", + "index": 7 + } }, - { - "name": "", - "typ": "Crate" + "8": { + "Direct": { + "name": "", + "class": "Crate", + "index": 8 + } } - ] + } }, "Landingpad_2x2CenterPiece01": { "templateType": "StructureLogic", @@ -14914,7 +16134,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [] + "slots": {} }, "Landingpad_BlankPiece": { "templateType": "Structure", @@ -14953,7 +16173,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [] + "slots": {} }, "Landingpad_CrossPiece": { "templateType": "Structure", @@ -15025,7 +16245,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -15121,7 +16341,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -15205,7 +16425,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -15301,7 +16521,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -15385,7 +16605,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -15492,7 +16712,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -15571,12 +16791,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Sound Cartridge", - "typ": "SoundCartridge" + "slots": { + "0": { + "Direct": { + "name": "Sound Cartridge", + "class": "SoundCartridge", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -15765,16 +16988,22 @@ export default { "convection_factor": 0.1, "radiation_factor": 0.1 }, - "slots": [ - { - "name": "Brain", - "typ": "Organ" + "slots": { + "0": { + "Direct": { + "name": "Brain", + "class": "Organ", + "index": 0 + } }, - { - "name": "Lungs", - "typ": "Organ" + "1": { + "Direct": { + "name": "Lungs", + "class": "Organ", + "index": 1 + } } - ] + } }, "NpcChicken": { "templateType": "ItemSlots", @@ -15795,16 +17024,22 @@ export default { "convection_factor": 0.1, "radiation_factor": 0.1 }, - "slots": [ - { - "name": "Brain", - "typ": "Organ" + "slots": { + "0": { + "Direct": { + "name": "Brain", + "class": "Organ", + "index": 0 + } }, - { - "name": "Lungs", - "typ": "Organ" + "1": { + "Direct": { + "name": "Lungs", + "class": "Organ", + "index": 1 + } } - ] + } }, "PassiveSpeaker": { "templateType": "StructureLogicDevice", @@ -15830,7 +17065,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -15879,24 +17114,36 @@ export default { "slot_class": "None", "sorting_class": "Default" }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "Battery" + "2": { + "Direct": { + "name": "", + "class": "Battery", + "index": 2 + } }, - { - "name": "Liquid Canister", - "typ": "LiquidCanister" + "3": { + "Direct": { + "name": "Liquid Canister", + "class": "LiquidCanister", + "index": 3 + } } - ] + } }, "PortableSolarPanel": { "templateType": "ItemLogic", @@ -15935,12 +17182,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "RailingElegant01": { "templateType": "Structure", @@ -16248,48 +17498,78 @@ export default { "wireless_logic": true, "circuit_holder": true }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } }, - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" + "1": { + "Direct": { + "name": "Programmable Chip", + "class": "ProgrammableChip", + "index": 1 + } }, - { - "name": "Ore", - "typ": "Ore" + "2": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 2 + } }, - { - "name": "Ore", - "typ": "Ore" + "3": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 3 + } }, - { - "name": "Ore", - "typ": "Ore" + "4": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 4 + } }, - { - "name": "Ore", - "typ": "Ore" + "5": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 5 + } }, - { - "name": "Ore", - "typ": "Ore" + "6": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 6 + } }, - { - "name": "Ore", - "typ": "Ore" + "7": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 7 + } }, - { - "name": "Ore", - "typ": "Ore" + "8": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 8 + } }, - { - "name": "Ore", - "typ": "Ore" + "9": { + "Direct": { + "name": "Ore", + "class": "Ore", + "index": 9 + } } - ] + } }, "RoverCargo": { "templateType": "ItemLogic", @@ -16504,72 +17784,120 @@ export default { "wireless_logic": true, "circuit_holder": false }, - "slots": [ - { - "name": "Entity", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Entity", + "class": "Entity", + "index": 0 + } }, - { - "name": "Entity", - "typ": "Entity" + "1": { + "Direct": { + "name": "Entity", + "class": "Entity", + "index": 1 + } }, - { - "name": "Gas Filter", - "typ": "GasFilter" + "2": { + "Direct": { + "name": "Gas Filter", + "class": "GasFilter", + "index": 2 + } }, - { - "name": "Gas Filter", - "typ": "GasFilter" + "3": { + "Direct": { + "name": "Gas Filter", + "class": "GasFilter", + "index": 3 + } }, - { - "name": "Gas Filter", - "typ": "GasFilter" + "4": { + "Direct": { + "name": "Gas Filter", + "class": "GasFilter", + "index": 4 + } }, - { - "name": "Gas Canister", - "typ": "GasCanister" + "5": { + "Direct": { + "name": "Gas Canister", + "class": "GasCanister", + "index": 5 + } }, - { - "name": "Gas Canister", - "typ": "GasCanister" + "6": { + "Direct": { + "name": "Gas Canister", + "class": "GasCanister", + "index": 6 + } }, - { - "name": "Gas Canister", - "typ": "GasCanister" + "7": { + "Direct": { + "name": "Gas Canister", + "class": "GasCanister", + "index": 7 + } }, - { - "name": "Gas Canister", - "typ": "GasCanister" + "8": { + "Direct": { + "name": "Gas Canister", + "class": "GasCanister", + "index": 8 + } }, - { - "name": "Battery", - "typ": "Battery" + "9": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 9 + } }, - { - "name": "Battery", - "typ": "Battery" + "10": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 10 + } }, - { - "name": "Battery", - "typ": "Battery" + "11": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 11 + } }, - { - "name": "Container Slot", - "typ": "None" + "12": { + "Direct": { + "name": "Container Slot", + "class": "None", + "index": 12 + } }, - { - "name": "Container Slot", - "typ": "None" + "13": { + "Direct": { + "name": "Container Slot", + "class": "None", + "index": 13 + } }, - { - "name": "", - "typ": "None" + "14": { + "Direct": { + "name": "", + "class": "None", + "index": 14 + } }, - { - "name": "", - "typ": "None" + "15": { + "Direct": { + "name": "", + "class": "None", + "index": 15 + } } - ] + } }, "Rover_MkI": { "templateType": "ItemLogic", @@ -16728,52 +18056,85 @@ export default { "wireless_logic": true, "circuit_holder": false }, - "slots": [ - { - "name": "Entity", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Entity", + "class": "Entity", + "index": 0 + } }, - { - "name": "Entity", - "typ": "Entity" + "1": { + "Direct": { + "name": "Entity", + "class": "Entity", + "index": 1 + } }, - { - "name": "Battery", - "typ": "Battery" + "2": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 2 + } }, - { - "name": "Battery", - "typ": "Battery" + "3": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 3 + } }, - { - "name": "Battery", - "typ": "Battery" + "4": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } }, - { - "name": "", - "typ": "None" + "6": { + "Direct": { + "name": "", + "class": "None", + "index": 6 + } }, - { - "name": "", - "typ": "None" + "7": { + "Direct": { + "name": "", + "class": "None", + "index": 7 + } }, - { - "name": "", - "typ": "None" + "8": { + "Direct": { + "name": "", + "class": "None", + "index": 8 + } }, - { - "name": "", - "typ": "None" + "9": { + "Direct": { + "name": "", + "class": "None", + "index": 9 + } }, - { - "name": "", - "typ": "None" + "10": { + "Direct": { + "name": "", + "class": "None", + "index": 10 + } } - ] + } }, "Rover_MkI_build_states": { "templateType": "Structure", @@ -17010,20 +18371,29 @@ export default { "slot_class": "None", "sorting_class": "Default" }, - "slots": [ - { - "name": "Captain's Seat", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Captain's Seat", + "class": "Entity", + "index": 0 + } }, - { - "name": "Passenger Seat Left", - "typ": "Entity" + "1": { + "Direct": { + "name": "Passenger Seat Left", + "class": "Entity", + "index": 1 + } }, - { - "name": "Passenger Seat Right", - "typ": "Entity" + "2": { + "Direct": { + "name": "Passenger Seat Right", + "class": "Entity", + "index": 2 + } } - ] + } }, "StopWatch": { "templateType": "StructureLogicDevice", @@ -17053,7 +18423,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -17103,7 +18473,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -17175,12 +18545,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "", - "typ": "DataDisk" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "DataDisk", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -17246,16 +18619,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -17365,16 +18744,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -17454,16 +18839,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -17511,34 +18902,10 @@ export default { }, "fabricator_info": { "tier": "Undefined", - "recipes": { - "ItemCannedCondensedMilk": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Milk": 200.0, - "Steel": 1.0 - } - }, - "ItemCannedEdamame": { + "recipes": [ + { + "target_prefab": "ItemTomatoSoup", + "target_prefab_hash": 688734890, "tier": "TierOne", "time": 5.0, "energy": 0.0, @@ -17561,146 +18928,13 @@ export default { "count_types": 3, "reagents": { "Oil": 1.0, - "Soy": 15.0, - "Steel": 1.0 + "Steel": 1.0, + "Tomato": 5.0 } }, - "ItemCannedMushroom": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Mushroom": 5.0, - "Oil": 1.0, - "Steel": 1.0 - } - }, - "ItemCannedPowderedEggs": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Egg": 5.0, - "Oil": 1.0, - "Steel": 1.0 - } - }, - "ItemCannedRicePudding": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Oil": 1.0, - "Rice": 5.0, - "Steel": 1.0 - } - }, - "ItemCornSoup": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Corn": 5.0, - "Oil": 1.0, - "Steel": 1.0 - } - }, - "ItemFrenchFries": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Oil": 1.0, - "Potato": 1.0, - "Steel": 1.0 - } - }, - "ItemPumpkinSoup": { + { + "target_prefab": "ItemPumpkinSoup", + "target_prefab_hash": 1277979876, "tier": "TierOne", "time": 5.0, "energy": 0.0, @@ -17727,7 +18961,96 @@ export default { "Steel": 1.0 } }, - "ItemTomatoSoup": { + { + "target_prefab": "ItemCornSoup", + "target_prefab_hash": 545034114, + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Corn": 5.0, + "Oil": 1.0, + "Steel": 1.0 + } + }, + { + "target_prefab": "ItemCannedMushroom", + "target_prefab_hash": -1344601965, + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Mushroom": 5.0, + "Oil": 1.0, + "Steel": 1.0 + } + }, + { + "target_prefab": "ItemCannedPowderedEggs", + "target_prefab_hash": 1161510063, + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Egg": 5.0, + "Oil": 1.0, + "Steel": 1.0 + } + }, + { + "target_prefab": "ItemFrenchFries", + "target_prefab_hash": -57608687, "tier": "TierOne", "time": 5.0, "energy": 0.0, @@ -17750,11 +19073,97 @@ export default { "count_types": 3, "reagents": { "Oil": 1.0, - "Steel": 1.0, - "Tomato": 5.0 + "Potato": 1.0, + "Steel": 1.0 + } + }, + { + "target_prefab": "ItemCannedRicePudding", + "target_prefab_hash": -1185552595, + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Oil": 1.0, + "Rice": 5.0, + "Steel": 1.0 + } + }, + { + "target_prefab": "ItemCannedCondensedMilk", + "target_prefab_hash": -2104175091, + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Milk": 200.0, + "Steel": 1.0 + } + }, + { + "target_prefab": "ItemCannedEdamame", + "target_prefab_hash": -999714082, + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Oil": 1.0, + "Soy": 15.0, + "Steel": 1.0 } } - } + ] }, "memory": { "instructions": { @@ -18204,12 +19613,15 @@ export default { "wireless_logic": false, "circuit_holder": true }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" + "slots": { + "0": { + "Direct": { + "name": "Programmable Chip", + "class": "ProgrammableChip", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -18278,7 +19690,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -18334,7 +19746,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -18390,12 +19802,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Seat", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -18465,16 +19880,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "Ore" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "Ore", + "index": 0 + } }, - { - "name": "Export", - "typ": "Ingot" + "1": { + "Direct": { + "name": "Export", + "class": "Ingot", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -18570,16 +19991,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } }, - { - "name": "Data Disk", - "typ": "DataDisk" + "1": { + "Direct": { + "name": "Data Disk", + "class": "DataDisk", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -18667,16 +20094,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } }, - { - "name": "Data Disk", - "typ": "DataDisk" + "1": { + "Direct": { + "name": "Data Disk", + "class": "DataDisk", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -18732,16 +20165,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -18809,16 +20248,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "Ingot" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "Ingot", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -18873,209 +20318,10 @@ export default { }, "fabricator_info": { "tier": "Undefined", - "recipes": { - "CardboardBox": { - "tier": "TierOne", - "time": 2.0, - "energy": 120.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 2.0 - } - }, - "ItemAstroloySheets": { - "tier": "TierOne", - "time": 3.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Astroloy": 3.0 - } - }, - "ItemCableCoil": { - "tier": "TierOne", - "time": 5.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Copper": 0.5 - } - }, - "ItemCoffeeMug": { - "tier": "TierOne", - "time": 1.0, - "energy": 70.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemEggCarton": { - "tier": "TierOne", - "time": 10.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 2.0 - } - }, - "ItemEmptyCan": { - "tier": "TierOne", - "time": 1.0, - "energy": 70.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 1.0 - } - }, - "ItemEvaSuit": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Iron": 5.0 - } - }, - "ItemGlassSheets": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 2.0 - } - }, - "ItemIronFrames": { + "recipes": [ + { + "target_prefab": "ItemIronFrames", + "target_prefab_hash": 1225836666, "tier": "TierOne", "time": 4.0, "energy": 200.0, @@ -19100,7 +20346,9 @@ export default { "Iron": 4.0 } }, - "ItemIronSheets": { + { + "target_prefab": "ItemIronSheets", + "target_prefab_hash": -487378546, "tier": "TierOne", "time": 1.0, "energy": 200.0, @@ -19125,10 +20373,12 @@ export default { "Iron": 1.0 } }, - "ItemKitAccessBridge": { + { + "target_prefab": "ItemPlasticSheets", + "target_prefab_hash": 662053345, "tier": "TierOne", - "time": 30.0, - "energy": 15000.0, + "time": 1.0, + "energy": 200.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -19145,14 +20395,422 @@ export default { "is_any_to_remove": false, "reagents": {} }, - "count_types": 3, + "count_types": 1, "reagents": { - "Copper": 2.0, - "Solder": 2.0, - "Steel": 10.0 + "Silicon": 0.5 } }, - "ItemKitArcFurnace": { + { + "target_prefab": "ItemGlassSheets", + "target_prefab_hash": 1588896491, + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 2.0 + } + }, + { + "target_prefab": "ItemStelliteGlassSheets", + "target_prefab_hash": -2038663432, + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 2.0, + "Stellite": 1.0 + } + }, + { + "target_prefab": "ItemSteelSheets", + "target_prefab_hash": 38555961, + "tier": "TierOne", + "time": 3.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 0.5 + } + }, + { + "target_prefab": "ItemAstroloySheets", + "target_prefab_hash": -1662476145, + "tier": "TierOne", + "time": 3.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Astroloy": 3.0 + } + }, + { + "target_prefab": "ItemSteelFrames", + "target_prefab_hash": -1448105779, + "tier": "TierOne", + "time": 7.0, + "energy": 800.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 2.0 + } + }, + { + "target_prefab": "ItemKitWallIron", + "target_prefab_hash": -524546923, + "tier": "TierOne", + "time": 1.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + { + "target_prefab": "ItemKitRailing", + "target_prefab_hash": 750176282, + "tier": "TierOne", + "time": 1.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + { + "target_prefab": "ItemKitCompositeCladding", + "target_prefab_hash": -1470820996, + "tier": "TierOne", + "time": 1.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + { + "target_prefab": "ItemKitWall", + "target_prefab_hash": -1826855889, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 1.0 + } + }, + { + "target_prefab": "ItemKitReinforcedWindows", + "target_prefab_hash": 1459985302, + "tier": "TierOne", + "time": 7.0, + "energy": 700.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Astroloy": 2.0 + } + }, + { + "target_prefab": "ItemKitWindowShutter", + "target_prefab_hash": 1779979754, + "tier": "TierOne", + "time": 7.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Solder": 1.0, + "Steel": 2.0 + } + }, + { + "target_prefab": "ItemKitLadder", + "target_prefab_hash": 489494578, + "tier": "TierOne", + "time": 3.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 2.0 + } + }, + { + "target_prefab": "ItemKitPipe", + "target_prefab_hash": -1619793705, + "tier": "TierOne", + "time": 5.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 0.5 + } + }, + { + "target_prefab": "ItemCableCoil", + "target_prefab_hash": -466050668, + "tier": "TierOne", + "time": 5.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Copper": 0.5 + } + }, + { + "target_prefab": "ItemKitFurnace", + "target_prefab_hash": -806743925, + "tier": "TierOne", + "time": 120.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Iron": 30.0 + } + }, + { + "target_prefab": "ItemKitArcFurnace", + "target_prefab_hash": -98995857, "tier": "TierOne", "time": 60.0, "energy": 6000.0, @@ -19178,7 +20836,323 @@ export default { "Iron": 20.0 } }, - "ItemKitAutolathe": { + { + "target_prefab": "ItemKitElectronicsPrinter", + "target_prefab_hash": -1181922382, + "tier": "TierOne", + "time": 120.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 2.0, + "Iron": 20.0 + } + }, + { + "target_prefab": "ItemKitRocketManufactory", + "target_prefab_hash": -636127860, + "tier": "TierOne", + "time": 120.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 2.0, + "Iron": 20.0 + } + }, + { + "target_prefab": "ItemKitSecurityPrinter", + "target_prefab_hash": 578078533, + "tier": "TierOne", + "time": 180.0, + "energy": 36000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 20.0, + "Gold": 20.0, + "Steel": 20.0 + } + }, + { + "target_prefab": "ItemKitBlastDoor", + "target_prefab_hash": -1755116240, + "tier": "TierTwo", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 3.0, + "Steel": 15.0 + } + }, + { + "target_prefab": "ItemKitRobotArmDoor", + "target_prefab_hash": -753675589, + "tier": "TierTwo", + "time": 10.0, + "energy": 400.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 3.0, + "Steel": 12.0 + } + }, + { + "target_prefab": "ItemKitFurniture", + "target_prefab_hash": 1162905029, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 20.0 + } + }, + { + "target_prefab": "ItemKitTables", + "target_prefab_hash": -1361598922, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 20.0 + } + }, + { + "target_prefab": "ItemKitChairs", + "target_prefab_hash": -1394008073, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 20.0 + } + }, + { + "target_prefab": "ItemKitBeds", + "target_prefab_hash": -1241256797, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 20.0 + } + }, + { + "target_prefab": "ItemKitSorter", + "target_prefab_hash": 969522478, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 1.0, + "Iron": 10.0 + } + }, + { + "target_prefab": "ItemKitHydraulicPipeBender", + "target_prefab_hash": -2098556089, + "tier": "TierOne", + "time": 180.0, + "energy": 18000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 2.0, + "Iron": 20.0 + } + }, + { + "target_prefab": "ItemKitAutolathe", + "target_prefab_hash": -1753893214, "tier": "TierOne", "time": 180.0, "energy": 36000.0, @@ -19205,7 +21179,9 @@ export default { "Iron": 20.0 } }, - "ItemKitBeds": { + { + "target_prefab": "ItemKitDoor", + "target_prefab_hash": 168615924, "tier": "TierOne", "time": 10.0, "energy": 500.0, @@ -19227,12 +21203,14 @@ export default { }, "count_types": 2, "reagents": { - "Copper": 5.0, - "Iron": 20.0 + "Copper": 3.0, + "Iron": 7.0 } }, - "ItemKitBlastDoor": { - "tier": "TierTwo", + { + "target_prefab": "ItemKitInteriorDoors", + "target_prefab_hash": 1935945891, + "tier": "TierOne", "time": 10.0, "energy": 500.0, "temperature": { @@ -19254,10 +21232,534 @@ export default { "count_types": 2, "reagents": { "Copper": 3.0, + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemWallLight", + "target_prefab_hash": 1108423476, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Iron": 1.0, + "Silicon": 1.0 + } + }, + { + "target_prefab": "ItemKitWallArch", + "target_prefab_hash": 1625214531, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 1.0 + } + }, + { + "target_prefab": "ItemKitWallFlat", + "target_prefab_hash": -846838195, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 1.0 + } + }, + { + "target_prefab": "ItemKitWallGeometry", + "target_prefab_hash": -784733231, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 1.0 + } + }, + { + "target_prefab": "ItemKitWallPadded", + "target_prefab_hash": -821868990, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 1.0 + } + }, + { + "target_prefab": "ItemKitLocker", + "target_prefab_hash": 882301399, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemKitSign", + "target_prefab_hash": 529996327, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemKitStairs", + "target_prefab_hash": 170878959, + "tier": "TierOne", + "time": 20.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 15.0 + } + }, + { + "target_prefab": "ItemKitStairwell", + "target_prefab_hash": -1868555784, + "tier": "TierOne", + "time": 20.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 15.0 + } + }, + { + "target_prefab": "ItemKitStacker", + "target_prefab_hash": 1013244511, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 10.0 + } + }, + { + "target_prefab": "ItemEmptyCan", + "target_prefab_hash": 1013818348, + "tier": "TierOne", + "time": 1.0, + "energy": 70.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 1.0 + } + }, + { + "target_prefab": "CardboardBox", + "target_prefab_hash": -1976947556, + "tier": "TierOne", + "time": 2.0, + "energy": 120.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 2.0 + } + }, + { + "target_prefab": "ItemKitChute", + "target_prefab_hash": 1025254665, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemKitStandardChute", + "target_prefab_hash": 2133035682, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 2.0, + "Electrum": 2.0, + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemKitSDBHopper", + "target_prefab_hash": 323957548, + "tier": "TierOne", + "time": 10.0, + "energy": 700.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 15.0 + } + }, + { + "target_prefab": "KitSDBSilo", + "target_prefab_hash": 1932952652, + "tier": "TierOne", + "time": 120.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 20.0, "Steel": 15.0 } }, - "ItemKitCentrifuge": { + { + "target_prefab": "ItemKitCompositeFloorGrating", + "target_prefab_hash": 1182412869, + "tier": "TierOne", + "time": 3.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + { + "target_prefab": "ItemKitToolManufactory", + "target_prefab_hash": 529137748, + "tier": "TierOne", + "time": 120.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Iron": 20.0 + } + }, + { + "target_prefab": "ItemKitRecycler", + "target_prefab_hash": 849148192, + "tier": "TierOne", + "time": 60.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Iron": 20.0 + } + }, + { + "target_prefab": "ItemKitCentrifuge", + "target_prefab_hash": 578182956, "tier": "TierOne", "time": 60.0, "energy": 18000.0, @@ -19283,136 +21785,12 @@ export default { "Iron": 20.0 } }, - "ItemKitChairs": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Iron": 20.0 - } - }, - "ItemKitChute": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ItemKitCompositeCladding": { - "tier": "TierOne", - "time": 1.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemKitCompositeFloorGrating": { - "tier": "TierOne", - "time": 3.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemKitCrate": { - "tier": "TierOne", - "time": 10.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 10.0 - } - }, - "ItemKitCrateMkII": { + { + "target_prefab": "KitStructureCombustionCentrifuge", + "target_prefab_hash": 231903234, "tier": "TierTwo", - "time": 10.0, - "energy": 200.0, + "time": 120.0, + "energy": 24000.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -19429,38 +21807,16 @@ export default { "is_any_to_remove": false, "reagents": {} }, - "count_types": 2, + "count_types": 3, "reagents": { - "Gold": 5.0, - "Iron": 10.0 + "Constantan": 5.0, + "Invar": 10.0, + "Steel": 20.0 } }, - "ItemKitCrateMount": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 10.0 - } - }, - "ItemKitDeepMiner": { + { + "target_prefab": "ItemKitDeepMiner", + "target_prefab_hash": -1935075707, "tier": "TierTwo", "time": 180.0, "energy": 72000.0, @@ -19488,7 +21844,9 @@ export default { "Steel": 50.0 } }, - "ItemKitDoor": { + { + "target_prefab": "ItemKitCrateMount", + "target_prefab_hash": -551612946, "tier": "TierOne", "time": 10.0, "energy": 500.0, @@ -19508,172 +21866,16 @@ export default { "is_any_to_remove": false, "reagents": {} }, - "count_types": 2, - "reagents": { - "Copper": 3.0, - "Iron": 7.0 - } - }, - "ItemKitElectronicsPrinter": { - "tier": "TierOne", - "time": 120.0, - "energy": 12000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Gold": 2.0, - "Iron": 20.0 - } - }, - "ItemKitFlagODA": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, "count_types": 1, "reagents": { - "Iron": 8.0 + "Iron": 10.0 } }, - "ItemKitFurnace": { - "tier": "TierOne", - "time": 120.0, - "energy": 12000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 10.0, - "Iron": 30.0 - } - }, - "ItemKitFurniture": { + { + "target_prefab": "ItemKitCrate", + "target_prefab_hash": 429365598, "tier": "TierOne", "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Iron": 20.0 - } - }, - "ItemKitHydraulicPipeBender": { - "tier": "TierOne", - "time": 180.0, - "energy": 18000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Gold": 2.0, - "Iron": 20.0 - } - }, - "ItemKitInteriorDoors": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 3.0, - "Iron": 5.0 - } - }, - "ItemKitLadder": { - "tier": "TierOne", - "time": 3.0, "energy": 200.0, "temperature": { "start": 1.0, @@ -19693,577 +21895,14 @@ export default { }, "count_types": 1, "reagents": { - "Iron": 2.0 + "Iron": 10.0 } }, - "ItemKitLocker": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemKitPipe": { - "tier": "TierOne", - "time": 5.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 0.5 - } - }, - "ItemKitRailing": { - "tier": "TierOne", - "time": 1.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemKitRecycler": { - "tier": "TierOne", - "time": 60.0, - "energy": 12000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 10.0, - "Iron": 20.0 - } - }, - "ItemKitReinforcedWindows": { - "tier": "TierOne", - "time": 7.0, - "energy": 700.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Astroloy": 2.0 - } - }, - "ItemKitRespawnPointWallMounted": { - "tier": "TierOne", - "time": 20.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 1.0, - "Iron": 3.0 - } - }, - "ItemKitRobotArmDoor": { + { + "target_prefab": "ItemKitCrateMkII", + "target_prefab_hash": -1585956426, "tier": "TierTwo", "time": 10.0, - "energy": 400.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 3.0, - "Steel": 12.0 - } - }, - "ItemKitRocketManufactory": { - "tier": "TierOne", - "time": 120.0, - "energy": 12000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Gold": 2.0, - "Iron": 20.0 - } - }, - "ItemKitSDBHopper": { - "tier": "TierOne", - "time": 10.0, - "energy": 700.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 15.0 - } - }, - "ItemKitSecurityPrinter": { - "tier": "TierOne", - "time": 180.0, - "energy": 36000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 20.0, - "Gold": 20.0, - "Steel": 20.0 - } - }, - "ItemKitSign": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ItemKitSorter": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 1.0, - "Iron": 10.0 - } - }, - "ItemKitStacker": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 10.0 - } - }, - "ItemKitStairs": { - "tier": "TierOne", - "time": 20.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 15.0 - } - }, - "ItemKitStairwell": { - "tier": "TierOne", - "time": 20.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 15.0 - } - }, - "ItemKitStandardChute": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Constantan": 2.0, - "Electrum": 2.0, - "Iron": 3.0 - } - }, - "ItemKitTables": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Iron": 20.0 - } - }, - "ItemKitToolManufactory": { - "tier": "TierOne", - "time": 120.0, - "energy": 24000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 10.0, - "Iron": 20.0 - } - }, - "ItemKitWall": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 1.0 - } - }, - "ItemKitWallArch": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 1.0 - } - }, - "ItemKitWallFlat": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 1.0 - } - }, - "ItemKitWallGeometry": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 1.0 - } - }, - "ItemKitWallIron": { - "tier": "TierOne", - "time": 1.0, "energy": 200.0, "temperature": { "start": 1.0, @@ -20281,88 +21920,15 @@ export default { "is_any_to_remove": false, "reagents": {} }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemKitWallPadded": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 1.0 - } - }, - "ItemKitWindowShutter": { - "tier": "TierOne", - "time": 7.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, "count_types": 2, "reagents": { - "Solder": 1.0, - "Steel": 2.0 + "Gold": 5.0, + "Iron": 10.0 } }, - "ItemPlasticSheets": { - "tier": "TierOne", - "time": 1.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 0.5 - } - }, - "ItemSpaceHelmet": { + { + "target_prefab": "ItemSpaceHelmet", + "target_prefab_hash": 714830451, "tier": "TierOne", "time": 15.0, "energy": 500.0, @@ -20388,59 +21954,11 @@ export default { "Gold": 2.0 } }, - "ItemSteelFrames": { + { + "target_prefab": "ItemEvaSuit", + "target_prefab_hash": 1677018918, "tier": "TierOne", - "time": 7.0, - "energy": 800.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 2.0 - } - }, - "ItemSteelSheets": { - "tier": "TierOne", - "time": 3.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 0.5 - } - }, - "ItemStelliteGlassSheets": { - "tier": "TierOne", - "time": 1.0, + "time": 15.0, "energy": 500.0, "temperature": { "start": 1.0, @@ -20460,13 +21978,96 @@ export default { }, "count_types": 2, "reagents": { - "Silicon": 2.0, - "Stellite": 1.0 + "Copper": 5.0, + "Iron": 5.0 } }, - "ItemWallLight": { + { + "target_prefab": "ItemEggCarton", + "target_prefab_hash": -524289310, "tier": "TierOne", "time": 10.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 2.0 + } + }, + { + "target_prefab": "ItemCoffeeMug", + "target_prefab_hash": 1800622698, + "tier": "TierOne", + "time": 1.0, + "energy": 70.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + { + "target_prefab": "ItemKitFlagODA", + "target_prefab_hash": 1701764190, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 8.0 + } + }, + { + "target_prefab": "ItemKitRespawnPointWallMounted", + "target_prefab_hash": 1574688481, + "tier": "TierOne", + "time": 20.0, "energy": 500.0, "temperature": { "start": 1.0, @@ -20484,68 +22085,42 @@ export default { "is_any_to_remove": false, "reagents": {} }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemKitAccessBridge", + "target_prefab_hash": 513258369, + "tier": "TierOne", + "time": 30.0, + "energy": 15000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, "count_types": 3, "reagents": { "Copper": 2.0, - "Iron": 1.0, - "Silicon": 1.0 - } - }, - "KitSDBSilo": { - "tier": "TierOne", - "time": 120.0, - "energy": 24000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Gold": 20.0, - "Steel": 15.0 - } - }, - "KitStructureCombustionCentrifuge": { - "tier": "TierTwo", - "time": 120.0, - "energy": 24000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Constantan": 5.0, - "Invar": 10.0, - "Steel": 20.0 + "Solder": 2.0, + "Steel": 10.0 } } - } + ] }, "memory": { "instructions": { @@ -20934,16 +22509,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -20995,8 +22576,121 @@ export default { }, "fabricator_info": { "tier": "TierOne", - "recipes": { - "ItemBreadLoaf": { + "recipes": [ + { + "target_prefab": "ItemMuffin", + "target_prefab_hash": -1864982322, + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Egg": 1.0, + "Flour": 50.0, + "Milk": 10.0 + } + }, + { + "target_prefab": "ItemCerealBar", + "target_prefab_hash": 791746840, + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Flour": 50.0 + } + }, + { + "target_prefab": "ItemChocolateCerealBar", + "target_prefab_hash": 860793245, + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Cocoa": 1.0, + "Flour": 50.0 + } + }, + { + "target_prefab": "ItemPotatoBaked", + "target_prefab_hash": -2111886401, + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Potato": 1.0 + } + }, + { + "target_prefab": "ItemBreadLoaf", + "target_prefab_hash": 893514943, "tier": "TierOne", "time": 10.0, "energy": 0.0, @@ -21022,7 +22716,67 @@ export default { "Oil": 5.0 } }, - "ItemCerealBar": { + { + "target_prefab": "ItemFries", + "target_prefab_hash": 1371786091, + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Oil": 5.0, + "Potato": 1.0 + } + }, + { + "target_prefab": "ItemPumpkinPie", + "target_prefab_hash": 62768076, + "tier": "TierOne", + "time": 10.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Egg": 1.0, + "Flour": 100.0, + "Milk": 10.0, + "Pumpkin": 10.0 + } + }, + { + "target_prefab": "ItemCookedTomato", + "target_prefab_hash": -709086714, "tier": "TierOne", "time": 5.0, "energy": 0.0, @@ -21044,10 +22798,201 @@ export default { }, "count_types": 1, "reagents": { - "Flour": 50.0 + "Tomato": 1.0 } }, - "ItemChocolateBar": { + { + "target_prefab": "ItemCookedMushroom", + "target_prefab_hash": -1076892658, + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Mushroom": 1.0 + } + }, + { + "target_prefab": "ItemCookedCorn", + "target_prefab_hash": 1344773148, + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Corn": 1.0 + } + }, + { + "target_prefab": "ItemCookedRice", + "target_prefab_hash": 2013539020, + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Rice": 1.0 + } + }, + { + "target_prefab": "ItemCookedPumpkin", + "target_prefab_hash": 1849281546, + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Pumpkin": 1.0 + } + }, + { + "target_prefab": "ItemCookedPowderedEggs", + "target_prefab_hash": -1712264413, + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Egg": 4.0 + } + }, + { + "target_prefab": "ItemCookedCondensedMilk", + "target_prefab_hash": 1715917521, + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Milk": 100.0 + } + }, + { + "target_prefab": "ItemCookedSoybean", + "target_prefab_hash": 1353449022, + "tier": "TierOne", + "time": 5.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Soy": 1.0 + } + }, + { + "target_prefab": "ItemChocolateBar", + "target_prefab_hash": 234601764, "tier": "TierOne", "time": 5.0, "energy": 0.0, @@ -21073,7 +23018,39 @@ export default { "Sugar": 10.0 } }, - "ItemChocolateCake": { + { + "target_prefab": "ItemPlainCake", + "target_prefab_hash": -1108244510, + "tier": "TierOne", + "time": 30.0, + "energy": 0.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Egg": 1.0, + "Flour": 50.0, + "Milk": 5.0, + "Sugar": 50.0 + } + }, + { + "target_prefab": "ItemChocolateCake", + "target_prefab_hash": -261575861, "tier": "TierOne", "time": 30.0, "energy": 0.0, @@ -21101,368 +23078,8 @@ export default { "Milk": 5.0, "Sugar": 50.0 } - }, - "ItemChocolateCerealBar": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Cocoa": 1.0, - "Flour": 50.0 - } - }, - "ItemCookedCondensedMilk": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Milk": 100.0 - } - }, - "ItemCookedCorn": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Corn": 1.0 - } - }, - "ItemCookedMushroom": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Mushroom": 1.0 - } - }, - "ItemCookedPowderedEggs": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Egg": 4.0 - } - }, - "ItemCookedPumpkin": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Pumpkin": 1.0 - } - }, - "ItemCookedRice": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Rice": 1.0 - } - }, - "ItemCookedSoybean": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Soy": 1.0 - } - }, - "ItemCookedTomato": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Tomato": 1.0 - } - }, - "ItemFries": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Oil": 5.0, - "Potato": 1.0 - } - }, - "ItemMuffin": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Egg": 1.0, - "Flour": 50.0, - "Milk": 10.0 - } - }, - "ItemPlainCake": { - "tier": "TierOne", - "time": 30.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Egg": 1.0, - "Flour": 50.0, - "Milk": 5.0, - "Sugar": 50.0 - } - }, - "ItemPotatoBaked": { - "tier": "TierOne", - "time": 5.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Potato": 1.0 - } - }, - "ItemPumpkinPie": { - "tier": "TierOne", - "time": 10.0, - "energy": 0.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Egg": 1.0, - "Flour": 100.0, - "Milk": 10.0, - "Pumpkin": 10.0 - } } - } + ] }, "memory": { "instructions": { @@ -21843,7 +23460,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -21899,7 +23516,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -21952,7 +23569,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -22015,7 +23632,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -22134,28 +23751,43 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } }, - { - "name": "Battery", - "typ": "Battery" + "1": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 1 + } }, - { - "name": "Battery", - "typ": "Battery" + "2": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 2 + } }, - { - "name": "Battery", - "typ": "Battery" + "3": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 3 + } }, - { - "name": "Battery", - "typ": "Battery" + "4": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 4 + } } - ], + }, "device": { "connection_list": [ { @@ -22231,16 +23863,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } }, - { - "name": "Battery", - "typ": "Battery" + "1": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -22299,7 +23937,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -22364,7 +24002,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -22429,7 +24067,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -22483,7 +24121,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -22556,16 +24194,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Appliance 1", - "typ": "Appliance" + "slots": { + "0": { + "Direct": { + "name": "Appliance 1", + "class": "Appliance", + "index": 0 + } }, - { - "name": "Appliance 2", - "typ": "Appliance" + "1": { + "Direct": { + "name": "Appliance 2", + "class": "Appliance", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -22638,16 +24282,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Appliance 1", - "typ": "Appliance" + "slots": { + "0": { + "Direct": { + "name": "Appliance 1", + "class": "Appliance", + "index": 0 + } }, - { - "name": "Appliance 2", - "typ": "Appliance" + "1": { + "Direct": { + "name": "Appliance 2", + "class": "Appliance", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -22720,16 +24370,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Appliance 1", - "typ": "Appliance" + "slots": { + "0": { + "Direct": { + "name": "Appliance 1", + "class": "Appliance", + "index": 0 + } }, - { - "name": "Appliance 2", - "typ": "Appliance" + "1": { + "Direct": { + "name": "Appliance 2", + "class": "Appliance", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -22802,16 +24458,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Appliance 1", - "typ": "Appliance" + "slots": { + "0": { + "Direct": { + "name": "Appliance 1", + "class": "Appliance", + "index": 0 + } }, - { - "name": "Appliance 2", - "typ": "Appliance" + "1": { + "Direct": { + "name": "Appliance 2", + "class": "Appliance", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -22884,16 +24546,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Appliance 1", - "typ": "Appliance" + "slots": { + "0": { + "Direct": { + "name": "Appliance 1", + "class": "Appliance", + "index": 0 + } }, - { - "name": "Appliance 2", - "typ": "Appliance" + "1": { + "Direct": { + "name": "Appliance 2", + "class": "Appliance", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -22949,7 +24617,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -23010,12 +24678,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Bed", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Bed", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -23070,7 +24741,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -23254,7 +24925,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -23289,7 +24960,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -23324,7 +24995,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -23359,7 +25030,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -23640,7 +25311,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -23710,7 +25381,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -23784,7 +25455,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -23942,416 +25613,722 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "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" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } + }, + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } + }, + "2": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 2 + } + }, + "3": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 3 + } + }, + "4": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 4 + } + }, + "5": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 5 + } + }, + "6": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 6 + } + }, + "7": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 7 + } + }, + "8": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 8 + } + }, + "9": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 9 + } + }, + "10": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 10 + } + }, + "11": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 11 + } + }, + "12": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 12 + } + }, + "13": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 13 + } + }, + "14": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 14 + } + }, + "15": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 15 + } + }, + "16": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 16 + } + }, + "17": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 17 + } + }, + "18": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 18 + } + }, + "19": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 19 + } + }, + "20": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 20 + } + }, + "21": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 21 + } + }, + "22": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 22 + } + }, + "23": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 23 + } + }, + "24": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 24 + } + }, + "25": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 25 + } + }, + "26": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 26 + } + }, + "27": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 27 + } + }, + "28": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 28 + } + }, + "29": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 29 + } + }, + "30": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 30 + } + }, + "31": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 31 + } + }, + "32": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 32 + } + }, + "33": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 33 + } + }, + "34": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 34 + } + }, + "35": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 35 + } + }, + "36": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 36 + } + }, + "37": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 37 + } + }, + "38": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 38 + } + }, + "39": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 39 + } + }, + "40": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 40 + } + }, + "41": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 41 + } + }, + "42": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 42 + } + }, + "43": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 43 + } + }, + "44": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 44 + } + }, + "45": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 45 + } + }, + "46": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 46 + } + }, + "47": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 47 + } + }, + "48": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 48 + } + }, + "49": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 49 + } + }, + "50": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 50 + } + }, + "51": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 51 + } + }, + "52": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 52 + } + }, + "53": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 53 + } + }, + "54": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 54 + } + }, + "55": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 55 + } + }, + "56": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 56 + } + }, + "57": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 57 + } + }, + "58": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 58 + } + }, + "59": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 59 + } + }, + "60": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 60 + } + }, + "61": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 61 + } + }, + "62": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 62 + } + }, + "63": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 63 + } + }, + "64": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 64 + } + }, + "65": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 65 + } + }, + "66": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 66 + } + }, + "67": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 67 + } + }, + "68": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 68 + } + }, + "69": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 69 + } + }, + "70": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 70 + } + }, + "71": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 71 + } + }, + "72": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 72 + } + }, + "73": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 73 + } + }, + "74": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 74 + } + }, + "75": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 75 + } + }, + "76": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 76 + } + }, + "77": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 77 + } + }, + "78": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 78 + } + }, + "79": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 79 + } + }, + "80": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 80 + } + }, + "81": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 81 + } + }, + "82": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 82 + } + }, + "83": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 83 + } + }, + "84": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 84 + } + }, + "85": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 85 + } + }, + "86": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 86 + } + }, + "87": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 87 + } + }, + "88": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 88 + } + }, + "89": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 89 + } + }, + "90": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 90 + } + }, + "91": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 91 + } + }, + "92": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 92 + } + }, + "93": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 93 + } + }, + "94": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 94 + } + }, + "95": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 95 + } + }, + "96": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 96 + } + }, + "97": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 97 + } + }, + "98": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 98 + } + }, + "99": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 99 + } + }, + "100": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 100 + } + }, + "101": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 101 + } } - ], + }, "device": { "connection_list": [ { @@ -24983,216 +26960,372 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } }, - { - "name": "Storage", - "typ": "None" + "2": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 2 + } }, - { - "name": "Storage", - "typ": "None" + "3": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 3 + } }, - { - "name": "Storage", - "typ": "None" + "4": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 4 + } }, - { - "name": "Storage", - "typ": "None" + "5": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 5 + } }, - { - "name": "Storage", - "typ": "None" + "6": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 6 + } }, - { - "name": "Storage", - "typ": "None" + "7": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 7 + } }, - { - "name": "Storage", - "typ": "None" + "8": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 8 + } }, - { - "name": "Storage", - "typ": "None" + "9": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 9 + } }, - { - "name": "Storage", - "typ": "None" + "10": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 10 + } }, - { - "name": "Storage", - "typ": "None" + "11": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 11 + } }, - { - "name": "Storage", - "typ": "None" + "12": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 12 + } }, - { - "name": "Storage", - "typ": "None" + "13": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 13 + } }, - { - "name": "Storage", - "typ": "None" + "14": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 14 + } }, - { - "name": "Storage", - "typ": "None" + "15": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 15 + } }, - { - "name": "Storage", - "typ": "None" + "16": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 16 + } }, - { - "name": "Storage", - "typ": "None" + "17": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 17 + } }, - { - "name": "Storage", - "typ": "None" + "18": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 18 + } }, - { - "name": "Storage", - "typ": "None" + "19": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 19 + } }, - { - "name": "Storage", - "typ": "None" + "20": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 20 + } }, - { - "name": "Storage", - "typ": "None" + "21": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 21 + } }, - { - "name": "Storage", - "typ": "None" + "22": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 22 + } }, - { - "name": "Storage", - "typ": "None" + "23": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 23 + } }, - { - "name": "Storage", - "typ": "None" + "24": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 24 + } }, - { - "name": "Storage", - "typ": "None" + "25": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 25 + } }, - { - "name": "Storage", - "typ": "None" + "26": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 26 + } }, - { - "name": "Storage", - "typ": "None" + "27": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 27 + } }, - { - "name": "Storage", - "typ": "None" + "28": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 28 + } }, - { - "name": "Storage", - "typ": "None" + "29": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 29 + } }, - { - "name": "Storage", - "typ": "None" + "30": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 30 + } }, - { - "name": "Storage", - "typ": "None" + "31": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 31 + } }, - { - "name": "Storage", - "typ": "None" + "32": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 32 + } }, - { - "name": "Storage", - "typ": "None" + "33": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 33 + } }, - { - "name": "Storage", - "typ": "None" + "34": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 34 + } }, - { - "name": "Storage", - "typ": "None" + "35": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 35 + } }, - { - "name": "Storage", - "typ": "None" + "36": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 36 + } }, - { - "name": "Storage", - "typ": "None" + "37": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 37 + } }, - { - "name": "Storage", - "typ": "None" + "38": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 38 + } }, - { - "name": "Storage", - "typ": "None" + "39": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 39 + } }, - { - "name": "Storage", - "typ": "None" + "40": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 40 + } }, - { - "name": "Storage", - "typ": "None" + "41": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 41 + } }, - { - "name": "Storage", - "typ": "None" + "42": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 42 + } }, - { - "name": "Storage", - "typ": "None" + "43": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 43 + } }, - { - "name": "Storage", - "typ": "None" + "44": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 44 + } }, - { - "name": "Storage", - "typ": "None" + "45": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 45 + } }, - { - "name": "Storage", - "typ": "None" + "46": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 46 + } }, - { - "name": "Storage", - "typ": "None" + "47": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 47 + } }, - { - "name": "Storage", - "typ": "None" + "48": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 48 + } }, - { - "name": "Storage", - "typ": "None" + "49": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 49 + } }, - { - "name": "Storage", - "typ": "None" + "50": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 50 + } }, - { - "name": "Storage", - "typ": "None" + "51": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 51 + } } - ], + }, "device": { "connection_list": [ { @@ -25252,16 +27385,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -25325,12 +27464,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Seat", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -25377,12 +27519,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Seat", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -25429,12 +27574,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Seat", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -25481,12 +27629,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Seat", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -25533,12 +27684,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Seat", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -25585,12 +27739,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Seat", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -25637,12 +27794,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Seat", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -25689,12 +27849,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Seat", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -25741,12 +27904,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Seat", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -25799,12 +27965,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Input", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Input", + "class": "None", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -25837,12 +28006,15 @@ export default { "structure": { "small_grid": true }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Transport Slot", + "class": "None", + "index": 0 + } } - ] + } }, "StructureChuteDigitalFlipFlopSplitterLeft": { "templateType": "StructureLogicDevice", @@ -25889,12 +28061,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Transport Slot", + "class": "None", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -25969,12 +28144,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Transport Slot", + "class": "None", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -26045,12 +28223,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Transport Slot", + "class": "None", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -26117,12 +28298,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Transport Slot", + "class": "None", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -26188,12 +28372,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Input", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Input", + "class": "None", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -26226,12 +28413,15 @@ export default { "structure": { "small_grid": true }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Transport Slot", + "class": "None", + "index": 0 + } } - ] + } }, "StructureChuteInlet": { "templateType": "StructureLogicDevice", @@ -26270,12 +28460,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -26308,12 +28501,15 @@ export default { "structure": { "small_grid": true }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Transport Slot", + "class": "None", + "index": 0 + } } - ] + } }, "StructureChuteOutlet": { "templateType": "StructureLogicDevice", @@ -26353,12 +28549,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Export", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Export", + "class": "None", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -26391,12 +28590,15 @@ export default { "structure": { "small_grid": true }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Transport Slot", + "class": "None", + "index": 0 + } } - ] + } }, "StructureChuteStraight": { "templateType": "StructureSlots", @@ -26409,12 +28611,15 @@ export default { "structure": { "small_grid": true }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Transport Slot", + "class": "None", + "index": 0 + } } - ] + } }, "StructureChuteUmbilicalFemale": { "templateType": "StructureLogicDevice", @@ -26450,12 +28655,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Transport Slot", + "class": "None", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -26507,12 +28715,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Transport Slot", + "class": "None", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -26576,12 +28787,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Transport Slot", + "class": "None", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -26614,12 +28828,15 @@ export default { "structure": { "small_grid": true }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Transport Slot", + "class": "None", + "index": 0 + } } - ] + } }, "StructureChuteWindow": { "templateType": "StructureSlots", @@ -26632,12 +28849,15 @@ export default { "structure": { "small_grid": true }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Transport Slot", + "class": "None", + "index": 0 + } } - ] + } }, "StructureCircuitHousing": { "templateType": "StructureCircuitHolder", @@ -26680,12 +28900,15 @@ export default { "wireless_logic": false, "circuit_holder": true }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" + "slots": { + "0": { + "Direct": { + "name": "Programmable Chip", + "class": "ProgrammableChip", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -26809,20 +29032,29 @@ export default { "wireless_logic": false, "circuit_holder": true }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } }, - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" + "2": { + "Direct": { + "name": "Programmable Chip", + "class": "ProgrammableChip", + "index": 2 + } } - ], + }, "device": { "connection_list": [ { @@ -27111,7 +29343,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -27329,7 +29561,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -27383,20 +29615,29 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Data Disk", - "typ": "DataDisk" + "slots": { + "0": { + "Direct": { + "name": "Data Disk", + "class": "DataDisk", + "index": 0 + } }, - { - "name": "Data Disk", - "typ": "DataDisk" + "1": { + "Direct": { + "name": "Data Disk", + "class": "DataDisk", + "index": 1 + } }, - { - "name": "Motherboard", - "typ": "Motherboard" + "2": { + "Direct": { + "name": "Motherboard", + "class": "Motherboard", + "index": 2 + } } - ], + }, "device": { "connection_list": [ { @@ -27450,20 +29691,29 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Data Disk", - "typ": "DataDisk" + "slots": { + "0": { + "Direct": { + "name": "Data Disk", + "class": "DataDisk", + "index": 0 + } }, - { - "name": "Data Disk", - "typ": "DataDisk" + "1": { + "Direct": { + "name": "Data Disk", + "class": "DataDisk", + "index": 1 + } }, - { - "name": "Motherboard", - "typ": "Motherboard" + "2": { + "Direct": { + "name": "Motherboard", + "class": "Motherboard", + "index": 2 + } } - ], + }, "device": { "connection_list": [ { @@ -27541,7 +29791,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -27601,7 +29851,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -27654,16 +29904,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Circuit Board", - "typ": "Circuitboard" + "slots": { + "0": { + "Direct": { + "name": "Circuit Board", + "class": "Circuitboard", + "index": 0 + } }, - { - "name": "Data Disk", - "typ": "DataDisk" + "1": { + "Direct": { + "name": "Data Disk", + "class": "DataDisk", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -27712,16 +29968,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Circuit Board", - "typ": "Circuitboard" + "slots": { + "0": { + "Direct": { + "name": "Circuit Board", + "class": "Circuitboard", + "index": 0 + } }, - { - "name": "Data Disk", - "typ": "DataDisk" + "1": { + "Direct": { + "name": "Data Disk", + "class": "DataDisk", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -27777,7 +30039,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -27829,7 +30091,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -27881,7 +30143,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -27930,16 +30192,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Circuit Board", - "typ": "Circuitboard" + "slots": { + "0": { + "Direct": { + "name": "Circuit Board", + "class": "Circuitboard", + "index": 0 + } }, - { - "name": "Data Disk", - "typ": "DataDisk" + "1": { + "Direct": { + "name": "Data Disk", + "class": "DataDisk", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -28035,12 +30303,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Entity", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Entity", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -28153,32 +30424,50 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -28202,12 +30491,15 @@ export default { "structure": { "small_grid": true }, - "slots": [ - { - "name": "Container Slot", - "typ": "Crate" + "slots": { + "0": { + "Direct": { + "name": "Container Slot", + "class": "Crate", + "index": 0 + } } - ] + } }, "StructureCryoTube": { "templateType": "StructureLogicDevice", @@ -28260,12 +30552,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Bed", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Bed", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -28332,12 +30627,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Player", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Player", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -28404,12 +30702,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Player", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Player", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -28469,7 +30770,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -28521,12 +30822,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Export", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Export", + "class": "None", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -28582,7 +30886,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -28635,7 +30939,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -28680,7 +30984,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -28727,7 +31031,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -28775,7 +31079,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -28897,12 +31201,15 @@ export default { "wireless_logic": false, "circuit_holder": true }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" + "slots": { + "0": { + "Direct": { + "name": "Programmable Chip", + "class": "ProgrammableChip", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -28971,16 +31278,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "Ingot" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "Ingot", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -29035,37 +31348,12 @@ export default { }, "fabricator_info": { "tier": "Undefined", - "recipes": { - "ApplianceChemistryStation": { + "recipes": [ + { + "target_prefab": "DynamicLight", + "target_prefab_hash": -21970188, "tier": "TierOne", - "time": 45.0, - "energy": 1500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 1.0, - "Steel": 5.0 - } - }, - "ApplianceDeskLampLeft": { - "tier": "TierOne", - "time": 10.0, + "time": 20.0, "energy": 500.0, "temperature": { "start": 1.0, @@ -29084,65 +31372,14 @@ export default { "reagents": {} }, "count_types": 2, - "reagents": { - "Iron": 2.0, - "Silicon": 1.0 - } - }, - "ApplianceDeskLampRight": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Iron": 2.0, - "Silicon": 1.0 - } - }, - "ApplianceMicrowave": { - "tier": "TierOne", - "time": 45.0, - "energy": 1500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, "reagents": { "Copper": 2.0, - "Gold": 1.0, "Iron": 5.0 } }, - "AppliancePackagingMachine": { + { + "target_prefab": "ItemKitGrowLight", + "target_prefab_hash": 341030083, "tier": "TierOne", "time": 30.0, "energy": 500.0, @@ -29164,15 +31401,17 @@ export default { }, "count_types": 3, "reagents": { - "Copper": 2.0, - "Gold": 1.0, - "Iron": 10.0 + "Copper": 5.0, + "Electrum": 10.0, + "Steel": 5.0 } }, - "AppliancePaintMixer": { + { + "target_prefab": "ItemBatteryCell", + "target_prefab_hash": 700133157, "tier": "TierOne", - "time": 45.0, - "energy": 1500.0, + "time": 10.0, + "energy": 1000.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -29192,14 +31431,16 @@ export default { "count_types": 3, "reagents": { "Copper": 5.0, - "Gold": 1.0, - "Steel": 5.0 + "Gold": 2.0, + "Iron": 2.0 } }, - "AppliancePlantGeneticAnalyzer": { + { + "target_prefab": "ItemBatteryCellLarge", + "target_prefab_hash": -459827268, "tier": "TierOne", - "time": 45.0, - "energy": 4500.0, + "time": 20.0, + "energy": 20000.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -29218,147 +31459,14 @@ export default { }, "count_types": 3, "reagents": { - "Copper": 5.0, - "Gold": 1.0, + "Copper": 10.0, + "Gold": 5.0, "Steel": 5.0 } }, - "AppliancePlantGeneticSplicer": { - "tier": "TierOne", - "time": 50.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Inconel": 10.0, - "Stellite": 20.0 - } - }, - "AppliancePlantGeneticStabilizer": { - "tier": "TierOne", - "time": 50.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Inconel": 10.0, - "Stellite": 20.0 - } - }, - "ApplianceReagentProcessor": { - "tier": "TierOne", - "time": 45.0, - "energy": 1500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 1.0, - "Iron": 5.0 - } - }, - "ApplianceTabletDock": { - "tier": "TierOne", - "time": 30.0, - "energy": 750.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 2.0, - "Gold": 1.0, - "Iron": 5.0, - "Silicon": 1.0 - } - }, - "AutolathePrinterMod": { - "tier": "TierTwo", - "time": 180.0, - "energy": 72000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Constantan": 8.0, - "Electrum": 8.0, - "Solder": 8.0, - "Steel": 35.0 - } - }, - "Battery_Wireless_cell": { + { + "target_prefab": "Battery_Wireless_cell", + "target_prefab_hash": -462415758, "tier": "TierOne", "time": 10.0, "energy": 10000.0, @@ -29385,7 +31493,9 @@ export default { "Iron": 2.0 } }, - "Battery_Wireless_cell_Big": { + { + "target_prefab": "Battery_Wireless_cell_Big", + "target_prefab_hash": -41519077, "tier": "TierOne", "time": 20.0, "energy": 20000.0, @@ -29412,7 +31522,183 @@ export default { "Steel": 5.0 } }, - "CartridgeAtmosAnalyser": { + { + "target_prefab": "ItemKitPowerTransmitter", + "target_prefab_hash": 291368213, + "tier": "TierOne", + "time": 20.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 7.0, + "Gold": 5.0, + "Steel": 3.0 + } + }, + { + "target_prefab": "ItemKitPowerTransmitterOmni", + "target_prefab_hash": -831211676, + "tier": "TierOne", + "time": 20.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 8.0, + "Gold": 4.0, + "Steel": 4.0 + } + }, + { + "target_prefab": "ItemBatteryCellNuclear", + "target_prefab_hash": 544617306, + "tier": "TierTwo", + "time": 180.0, + "energy": 360000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Astroloy": 10.0, + "Inconel": 5.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemHEMDroidRepairKit", + "target_prefab_hash": 470636008, + "tier": "TierTwo", + "time": 40.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 10.0, + "Inconel": 5.0, + "Solder": 5.0 + } + }, + { + "target_prefab": "ItemBatteryCharger", + "target_prefab_hash": -1866880307, + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 10.0 + } + }, + { + "target_prefab": "ItemBatteryChargerSmall", + "target_prefab_hash": 1008295833, + "tier": "TierOne", + "time": 1.0, + "energy": 250.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 2.0, + "Iron": 5.0 + } + }, + { + "target_prefab": "CartridgeAtmosAnalyser", + "target_prefab_hash": -1550278665, "tier": "TierOne", "time": 5.0, "energy": 100.0, @@ -29439,7 +31725,9 @@ export default { "Iron": 1.0 } }, - "CartridgeConfiguration": { + { + "target_prefab": "CartridgePlantAnalyser", + "target_prefab_hash": 1101328282, "tier": "TierOne", "time": 5.0, "energy": 100.0, @@ -29466,7 +31754,9 @@ export default { "Iron": 1.0 } }, - "CartridgeElectronicReader": { + { + "target_prefab": "CartridgeElectronicReader", + "target_prefab_hash": -1462180176, "tier": "TierOne", "time": 5.0, "energy": 100.0, @@ -29493,7 +31783,9 @@ export default { "Iron": 1.0 } }, - "CartridgeGPS": { + { + "target_prefab": "CartridgeMedicalAnalyser", + "target_prefab_hash": -1116110181, "tier": "TierOne", "time": 5.0, "energy": 100.0, @@ -29520,7 +31812,9 @@ export default { "Iron": 1.0 } }, - "CartridgeMedicalAnalyser": { + { + "target_prefab": "CartridgeNetworkAnalyser", + "target_prefab_hash": 1606989119, "tier": "TierOne", "time": 5.0, "energy": 100.0, @@ -29547,7 +31841,9 @@ export default { "Iron": 1.0 } }, - "CartridgeNetworkAnalyser": { + { + "target_prefab": "CartridgeOreScanner", + "target_prefab_hash": -1768732546, "tier": "TierOne", "time": 5.0, "energy": 100.0, @@ -29574,7 +31870,9 @@ export default { "Iron": 1.0 } }, - "CartridgeOreScanner": { + { + "target_prefab": "ItemSoundCartridgeBass", + "target_prefab_hash": -1883441704, "tier": "TierOne", "time": 5.0, "energy": 100.0, @@ -29596,12 +31894,101 @@ export default { }, "count_types": 3, "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 1.0 + "Copper": 2.0, + "Gold": 2.0, + "Silicon": 2.0 } }, - "CartridgeOreScannerColor": { + { + "target_prefab": "ItemSoundCartridgeDrums", + "target_prefab_hash": -1901500508, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 2.0, + "Silicon": 2.0 + } + }, + { + "target_prefab": "ItemSoundCartridgeLeads", + "target_prefab_hash": -1174735962, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 2.0, + "Silicon": 2.0 + } + }, + { + "target_prefab": "ItemSoundCartridgeSynth", + "target_prefab_hash": -1971419310, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 2.0, + "Silicon": 2.0 + } + }, + { + "target_prefab": "CartridgeOreScannerColor", + "target_prefab_hash": 1738236580, "tier": "TierOne", "time": 5.0, "energy": 100.0, @@ -29629,860 +32016,9 @@ export default { "Silicon": 5.0 } }, - "CartridgePlantAnalyser": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 1.0 - } - }, - "CartridgeTracker": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 1.0 - } - }, - "CircuitboardAdvAirlockControl": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 1.0 - } - }, - "CircuitboardAirControl": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "CircuitboardAirlockControl": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 1.0 - } - }, - "CircuitboardDoorControl": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "CircuitboardGasDisplay": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 1.0 - } - }, - "CircuitboardGraphDisplay": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "CircuitboardHashDisplay": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "CircuitboardModeControl": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "CircuitboardPowerControl": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "CircuitboardShipDisplay": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "CircuitboardSolarControl": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "DynamicLight": { - "tier": "TierOne", - "time": 20.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 5.0 - } - }, - "ElectronicPrinterMod": { - "tier": "TierOne", - "time": 180.0, - "energy": 72000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Constantan": 8.0, - "Electrum": 8.0, - "Solder": 8.0, - "Steel": 35.0 - } - }, - "ItemAdvancedTablet": { - "tier": "TierTwo", - "time": 60.0, - "energy": 12000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 6, - "reagents": { - "Copper": 5.5, - "Electrum": 1.0, - "Gold": 12.0, - "Iron": 3.0, - "Solder": 5.0, - "Steel": 2.0 - } - }, - "ItemAreaPowerControl": { - "tier": "TierOne", - "time": 5.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Iron": 5.0, - "Solder": 3.0 - } - }, - "ItemBatteryCell": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 2.0, - "Iron": 2.0 - } - }, - "ItemBatteryCellLarge": { - "tier": "TierOne", - "time": 20.0, - "energy": 20000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Gold": 5.0, - "Steel": 5.0 - } - }, - "ItemBatteryCellNuclear": { - "tier": "TierTwo", - "time": 180.0, - "energy": 360000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Astroloy": 10.0, - "Inconel": 5.0, - "Steel": 5.0 - } - }, - "ItemBatteryCharger": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 10.0 - } - }, - "ItemBatteryChargerSmall": { - "tier": "TierOne", - "time": 1.0, - "energy": 250.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 2.0, - "Iron": 5.0 - } - }, - "ItemCableAnalyser": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Iron": 1.0, - "Silicon": 2.0 - } - }, - "ItemCableCoil": { - "tier": "TierOne", - "time": 1.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Copper": 0.5 - } - }, - "ItemCableCoilHeavy": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 0.5, - "Gold": 0.5 - } - }, - "ItemCableFuse": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Iron": 5.0 - } - }, - "ItemCreditCard": { - "tier": "TierOne", - "time": 5.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Silicon": 5.0 - } - }, - "ItemDataDisk": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "ItemElectronicParts": { - "tier": "TierOne", - "time": 5.0, - "energy": 10.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 2.0, - "Iron": 3.0 - } - }, - "ItemFlashingLight": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 3.0, - "Iron": 2.0 - } - }, - "ItemHEMDroidRepairKit": { - "tier": "TierTwo", - "time": 40.0, - "energy": 1500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Electrum": 10.0, - "Inconel": 5.0, - "Solder": 5.0 - } - }, - "ItemIntegratedCircuit10": { - "tier": "TierOne", - "time": 40.0, - "energy": 4000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Electrum": 5.0, - "Gold": 10.0, - "Solder": 2.0, - "Steel": 4.0 - } - }, - "ItemKitAIMeE": { + { + "target_prefab": "ItemKitAIMeE", + "target_prefab_hash": 496830914, "tier": "TierTwo", "time": 25.0, "energy": 2200.0, @@ -30513,10 +32049,41 @@ export default { "Steel": 22.0 } }, - "ItemKitAdvancedComposter": { - "tier": "TierTwo", - "time": 55.0, - "energy": 20000.0, + { + "target_prefab": "ItemKitFridgeSmall", + "target_prefab_hash": 1661226524, + "tier": "TierOne", + "time": 10.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 2.0, + "Iron": 10.0 + } + }, + { + "target_prefab": "ItemKitFridgeBig", + "target_prefab_hash": -1168199498, + "tier": "TierOne", + "time": 10.0, + "energy": 100.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -30535,74 +32102,18 @@ export default { }, "count_types": 4, "reagents": { - "Copper": 15.0, - "Electrum": 20.0, - "Solder": 5.0, - "Steel": 30.0 - } - }, - "ItemKitAdvancedFurnace": { - "tier": "TierTwo", - "time": 180.0, - "energy": 36000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 6, - "reagents": { - "Copper": 25.0, - "Electrum": 15.0, - "Gold": 5.0, - "Silicon": 6.0, - "Solder": 8.0, - "Steel": 30.0 - } - }, - "ItemKitAdvancedPackagingMachine": { - "tier": "TierTwo", - "time": 60.0, - "energy": 18000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Constantan": 10.0, "Copper": 10.0, - "Electrum": 15.0, - "Steel": 20.0 + "Gold": 5.0, + "Iron": 20.0, + "Steel": 15.0 } }, - "ItemKitAutoMinerSmall": { - "tier": "TierTwo", - "time": 90.0, - "energy": 9000.0, + { + "target_prefab": "CartridgeConfiguration", + "target_prefab_hash": -932136011, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -30619,19 +32130,19 @@ export default { "is_any_to_remove": false, "reagents": {} }, - "count_types": 5, + "count_types": 3, "reagents": { - "Copper": 15.0, - "Electrum": 50.0, - "Invar": 25.0, - "Iron": 15.0, - "Steel": 100.0 + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 } }, - "ItemKitAutomatedOven": { - "tier": "TierTwo", - "time": 50.0, - "energy": 15000.0, + { + "target_prefab": "CartridgeTracker", + "target_prefab_hash": 81488783, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -30648,16 +32159,553 @@ export default { "is_any_to_remove": false, "reagents": {} }, - "count_types": 5, + "count_types": 3, "reagents": { - "Constantan": 5.0, - "Copper": 15.0, - "Gold": 10.0, - "Solder": 10.0, - "Steel": 25.0 + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 } }, - "ItemKitBattery": { + { + "target_prefab": "CartridgeGPS", + "target_prefab_hash": -1957063345, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + { + "target_prefab": "CircuitboardAirControl", + "target_prefab_hash": 1618019559, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + { + "target_prefab": "CircuitboardAdvAirlockControl", + "target_prefab_hash": 1633663176, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + { + "target_prefab": "CircuitboardAirlockControl", + "target_prefab_hash": 912176135, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + { + "target_prefab": "CircuitboardDoorControl", + "target_prefab_hash": 855694771, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + { + "target_prefab": "CircuitboardGasDisplay", + "target_prefab_hash": -82343730, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 1.0 + } + }, + { + "target_prefab": "CircuitboardModeControl", + "target_prefab_hash": -1134148135, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + { + "target_prefab": "CircuitboardPowerControl", + "target_prefab_hash": -1923778429, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + { + "target_prefab": "CircuitboardShipDisplay", + "target_prefab_hash": -2044446819, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + { + "target_prefab": "CircuitboardSolarControl", + "target_prefab_hash": 2020180320, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + { + "target_prefab": "CircuitboardGraphDisplay", + "target_prefab_hash": 1344368806, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + { + "target_prefab": "CircuitboardHashDisplay", + "target_prefab_hash": 1633074601, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + { + "target_prefab": "ItemAreaPowerControl", + "target_prefab_hash": 1757673317, + "tier": "TierOne", + "time": 5.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Iron": 5.0, + "Solder": 3.0 + } + }, + { + "target_prefab": "ItemCableAnalyser", + "target_prefab_hash": -1792787349, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Iron": 1.0, + "Silicon": 2.0 + } + }, + { + "target_prefab": "ItemCableCoil", + "target_prefab_hash": -466050668, + "tier": "TierOne", + "time": 1.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Copper": 0.5 + } + }, + { + "target_prefab": "ItemCableCoilHeavy", + "target_prefab_hash": 2060134443, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 0.5, + "Gold": 0.5 + } + }, + { + "target_prefab": "ItemCableFuse", + "target_prefab_hash": 195442047, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemDataDisk", + "target_prefab_hash": 1005843700, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + { + "target_prefab": "ItemFlashingLight", + "target_prefab_hash": -2107840748, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 3.0, + "Iron": 2.0 + } + }, + { + "target_prefab": "ItemKitBattery", + "target_prefab_hash": 1406656973, "tier": "TierOne", "time": 120.0, "energy": 12000.0, @@ -30684,7 +32732,9 @@ export default { "Steel": 20.0 } }, - "ItemKitBatteryLarge": { + { + "target_prefab": "ItemKitBatteryLarge", + "target_prefab_hash": -21225041, "tier": "TierTwo", "time": 240.0, "energy": 96000.0, @@ -30714,35 +32764,9 @@ export default { "Stellite": 2.0 } }, - "ItemKitBeacon": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 2.0, - "Gold": 4.0, - "Solder": 2.0, - "Steel": 5.0 - } - }, - "ItemKitComputer": { + { + "target_prefab": "ItemKitComputer", + "target_prefab_hash": 1990225489, "tier": "TierOne", "time": 60.0, "energy": 6000.0, @@ -30769,7 +32793,9 @@ export default { "Iron": 5.0 } }, - "ItemKitConsole": { + { + "target_prefab": "ItemKitConsole", + "target_prefab_hash": -1241851179, "tier": "TierOne", "time": 5.0, "energy": 100.0, @@ -30796,441 +32822,9 @@ export default { "Iron": 2.0 } }, - "ItemKitDynamicGenerator": { - "tier": "TierOne", - "time": 120.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Gold": 15.0, - "Nickel": 15.0, - "Solder": 5.0, - "Steel": 20.0 - } - }, - "ItemKitElevator": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 2.0, - "Gold": 4.0, - "Solder": 2.0, - "Steel": 2.0 - } - }, - "ItemKitFridgeBig": { - "tier": "TierOne", - "time": 10.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 10.0, - "Gold": 5.0, - "Iron": 20.0, - "Steel": 15.0 - } - }, - "ItemKitFridgeSmall": { - "tier": "TierOne", - "time": 10.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 2.0, - "Iron": 10.0 - } - }, - "ItemKitGasGenerator": { - "tier": "TierOne", - "time": 120.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 10.0, - "Iron": 50.0 - } - }, - "ItemKitGroundTelescope": { - "tier": "TierOne", - "time": 150.0, - "energy": 24000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Electrum": 15.0, - "Solder": 10.0, - "Steel": 25.0 - } - }, - "ItemKitGrowLight": { - "tier": "TierOne", - "time": 30.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Electrum": 10.0, - "Steel": 5.0 - } - }, - "ItemKitHarvie": { - "tier": "TierOne", - "time": 60.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 5, - "reagents": { - "Copper": 15.0, - "Electrum": 10.0, - "Silicon": 5.0, - "Solder": 5.0, - "Steel": 10.0 - } - }, - "ItemKitHorizontalAutoMiner": { - "tier": "TierTwo", - "time": 60.0, - "energy": 60000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 5, - "reagents": { - "Copper": 7.0, - "Electrum": 25.0, - "Invar": 15.0, - "Iron": 8.0, - "Steel": 60.0 - } - }, - "ItemKitHydroponicStation": { - "tier": "TierOne", - "time": 120.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 20.0, - "Gold": 5.0, - "Nickel": 5.0, - "Steel": 10.0 - } - }, - "ItemKitLandingPadAtmos": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 1.0, - "Steel": 5.0 - } - }, - "ItemKitLandingPadBasic": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 1.0, - "Steel": 5.0 - } - }, - "ItemKitLandingPadWaypoint": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 1.0, - "Steel": 5.0 - } - }, - "ItemKitLargeSatelliteDish": { - "tier": "TierOne", - "time": 240.0, - "energy": 72000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Astroloy": 100.0, - "Inconel": 50.0, - "Waspaloy": 20.0 - } - }, - "ItemKitLinearRail": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 3.0 - } - }, - "ItemKitLogicCircuit": { - "tier": "TierOne", - "time": 40.0, - "energy": 2000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Solder": 2.0, - "Steel": 4.0 - } - }, - "ItemKitLogicInputOutput": { + { + "target_prefab": "ItemKitLogicInputOutput", + "target_prefab_hash": 1997293610, "tier": "TierOne", "time": 10.0, "energy": 1000.0, @@ -31256,7 +32850,9 @@ export default { "Gold": 1.0 } }, - "ItemKitLogicMemory": { + { + "target_prefab": "ItemKitLogicMemory", + "target_prefab_hash": -2098214189, "tier": "TierOne", "time": 10.0, "energy": 1000.0, @@ -31282,7 +32878,38 @@ export default { "Gold": 1.0 } }, - "ItemKitLogicProcessor": { + { + "target_prefab": "ItemKitSpeaker", + "target_prefab_hash": -126038526, + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemKitLogicProcessor", + "target_prefab_hash": 220644373, "tier": "TierOne", "time": 10.0, "energy": 1000.0, @@ -31308,7 +32935,9 @@ export default { "Gold": 2.0 } }, - "ItemKitLogicSwitch": { + { + "target_prefab": "ItemKitMusicMachines", + "target_prefab_hash": -2038889137, "tier": "TierOne", "time": 10.0, "energy": 1000.0, @@ -31330,11 +32959,13 @@ export default { }, "count_types": 2, "reagents": { - "Copper": 1.0, - "Gold": 1.0 + "Copper": 2.0, + "Gold": 2.0 } }, - "ItemKitLogicTransmitter": { + { + "target_prefab": "ItemKitLogicTransmitter", + "target_prefab_hash": 1005397063, "tier": "TierOne", "time": 10.0, "energy": 1000.0, @@ -31362,7 +32993,9 @@ export default { "Silicon": 5.0 } }, - "ItemKitMusicMachines": { + { + "target_prefab": "ItemKitLogicSwitch", + "target_prefab_hash": 124499454, "tier": "TierOne", "time": 10.0, "energy": 1000.0, @@ -31384,14 +33017,16 @@ export default { }, "count_types": 2, "reagents": { - "Copper": 2.0, - "Gold": 2.0 + "Copper": 1.0, + "Gold": 1.0 } }, - "ItemKitPowerTransmitter": { + { + "target_prefab": "ItemIntegratedCircuit10", + "target_prefab_hash": -744098481, "tier": "TierOne", - "time": 20.0, - "energy": 500.0, + "time": 40.0, + "energy": 4000.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -31408,41 +33043,75 @@ export default { "is_any_to_remove": false, "reagents": {} }, - "count_types": 3, + "count_types": 4, "reagents": { - "Copper": 7.0, - "Gold": 5.0, - "Steel": 3.0 - } - }, - "ItemKitPowerTransmitterOmni": { - "tier": "TierOne", - "time": 20.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 8.0, - "Gold": 4.0, + "Electrum": 5.0, + "Gold": 10.0, + "Solder": 2.0, "Steel": 4.0 } }, - "ItemKitPressurePlate": { + { + "target_prefab": "ItemKitLogicCircuit", + "target_prefab_hash": 1512322581, + "tier": "TierOne", + "time": 40.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Solder": 2.0, + "Steel": 4.0 + } + }, + { + "target_prefab": "ItemPowerConnector", + "target_prefab_hash": 839924019, + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 3.0, + "Iron": 10.0 + } + }, + { + "target_prefab": "ItemKitPressurePlate", + "target_prefab_hash": 123504691, "tier": "TierOne", "time": 10.0, "energy": 1000.0, @@ -31468,64 +33137,12 @@ export default { "Gold": 2.0 } }, - "ItemKitResearchMachine": { - "tier": "TierOne", - "time": 5.0, - "energy": 10.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 2.0, - "Iron": 9.0 - } - }, - "ItemKitRoboticArm": { - "tier": "TierOne", - "time": 150.0, - "energy": 10000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Astroloy": 15.0, - "Hastelloy": 5.0, - "Inconel": 10.0 - } - }, - "ItemKitSatelliteDish": { + { + "target_prefab": "ItemKitSolidGenerator", + "target_prefab_hash": 1293995736, "tier": "TierOne", "time": 120.0, - "energy": 24000.0, + "energy": 1000.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -31542,14 +33159,43 @@ export default { "is_any_to_remove": false, "reagents": {} }, - "count_types": 3, + "count_types": 2, "reagents": { - "Electrum": 15.0, - "Solder": 10.0, - "Steel": 20.0 + "Copper": 10.0, + "Iron": 50.0 } }, - "ItemKitSensor": { + { + "target_prefab": "ItemKitGasGenerator", + "target_prefab_hash": 377745425, + "tier": "TierOne", + "time": 120.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Iron": 50.0 + } + }, + { + "target_prefab": "ItemKitSensor", + "target_prefab_hash": -1776897113, "tier": "TierOne", "time": 10.0, "energy": 500.0, @@ -31576,252 +33222,12 @@ export default { "Iron": 3.0 } }, - "ItemKitSmallSatelliteDish": { - "tier": "TierOne", - "time": 60.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 10.0, - "Gold": 5.0 - } - }, - "ItemKitSolarPanel": { - "tier": "TierOne", - "time": 60.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 20.0, - "Gold": 5.0, - "Steel": 15.0 - } - }, - "ItemKitSolarPanelBasic": { - "tier": "TierOne", - "time": 30.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Gold": 2.0, - "Iron": 10.0 - } - }, - "ItemKitSolarPanelBasicReinforced": { - "tier": "TierTwo", - "time": 120.0, - "energy": 24000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 10.0, - "Electrum": 2.0, - "Invar": 10.0, - "Steel": 10.0 - } - }, - "ItemKitSolarPanelReinforced": { - "tier": "TierTwo", - "time": 120.0, - "energy": 24000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Astroloy": 15.0, - "Copper": 20.0, - "Electrum": 5.0, - "Steel": 10.0 - } - }, - "ItemKitSolidGenerator": { - "tier": "TierOne", - "time": 120.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 10.0, - "Iron": 50.0 - } - }, - "ItemKitSpeaker": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Steel": 5.0 - } - }, - "ItemKitStirlingEngine": { - "tier": "TierOne", - "time": 60.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 20.0, - "Gold": 5.0, - "Steel": 30.0 - } - }, - "ItemKitTransformer": { - "tier": "TierOne", - "time": 60.0, - "energy": 12000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 5.0, - "Steel": 10.0 - } - }, - "ItemKitTransformerSmall": { + { + "target_prefab": "ItemElectronicParts", + "target_prefab_hash": 731250882, "tier": "TierOne", "time": 5.0, - "energy": 500.0, + "energy": 10.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -31841,42 +33247,16 @@ export default { "count_types": 3, "reagents": { "Copper": 3.0, - "Gold": 1.0, - "Iron": 10.0 + "Gold": 2.0, + "Iron": 3.0 } }, - "ItemKitTurbineGenerator": { + { + "target_prefab": "ItemKitResearchMachine", + "target_prefab_hash": 724776762, "tier": "TierOne", - "time": 60.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 2.0, - "Gold": 4.0, - "Iron": 5.0, - "Solder": 4.0 - } - }, - "ItemKitUprightWindTurbine": { - "tier": "TierOne", - "time": 60.0, - "energy": 12000.0, + "time": 5.0, + "energy": 10.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -31895,68 +33275,14 @@ export default { }, "count_types": 3, "reagents": { - "Copper": 10.0, - "Gold": 5.0, - "Iron": 10.0 + "Copper": 3.0, + "Gold": 2.0, + "Iron": 9.0 } }, - "ItemKitVendingMachine": { - "tier": "TierOne", - "time": 60.0, - "energy": 15000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Electrum": 50.0, - "Gold": 50.0, - "Solder": 10.0, - "Steel": 20.0 - } - }, - "ItemKitVendingMachineRefrigerated": { - "tier": "TierTwo", - "time": 60.0, - "energy": 25000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Electrum": 80.0, - "Gold": 60.0, - "Solder": 30.0, - "Steel": 40.0 - } - }, - "ItemKitWeatherStation": { + { + "target_prefab": "ItemKitWeatherStation", + "target_prefab_hash": 337505889, "tier": "TierOne", "time": 60.0, "energy": 12000.0, @@ -31984,10 +33310,130 @@ export default { "Steel": 3.0 } }, - "ItemKitWindTurbine": { - "tier": "TierTwo", - "time": 60.0, - "energy": 12000.0, + { + "target_prefab": "ItemResearchCapsuleRed", + "target_prefab_hash": 954947943, + "tier": "TierOne", + "time": 8.0, + "energy": 50.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Iron": 2.0 + } + }, + { + "target_prefab": "ItemResearchCapsule", + "target_prefab_hash": 819096942, + "tier": "TierOne", + "time": 3.0, + "energy": 400.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Iron": 9.0 + } + }, + { + "target_prefab": "ItemResearchCapsuleGreen", + "target_prefab_hash": -1352732550, + "tier": "TierOne", + "time": 5.0, + "energy": 10.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Astroloy": 2.0, + "Copper": 3.0, + "Gold": 2.0, + "Iron": 9.0 + } + }, + { + "target_prefab": "ItemResearchCapsuleYellow", + "target_prefab_hash": 750952701, + "tier": "TierOne", + "time": 5.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Astroloy": 3.0, + "Copper": 3.0, + "Gold": 2.0, + "Iron": 9.0 + } + }, + { + "target_prefab": "ItemKitSolarPanelBasic", + "target_prefab_hash": 844961456, + "tier": "TierOne", + "time": 30.0, + "energy": 1000.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -32007,14 +33453,16 @@ export default { "count_types": 3, "reagents": { "Copper": 10.0, - "Electrum": 5.0, - "Steel": 20.0 + "Gold": 2.0, + "Iron": 10.0 } }, - "ItemLabeller": { + { + "target_prefab": "ItemKitSolarPanel", + "target_prefab_hash": -1924492105, "tier": "TierOne", - "time": 15.0, - "energy": 800.0, + "time": 60.0, + "energy": 6000.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -32033,12 +33481,250 @@ export default { }, "count_types": 3, "reagents": { - "Copper": 2.0, - "Gold": 1.0, - "Iron": 3.0 + "Copper": 20.0, + "Gold": 5.0, + "Steel": 15.0 } }, - "ItemLaptop": { + { + "target_prefab": "ItemKitStirlingEngine", + "target_prefab_hash": -1821571150, + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 20.0, + "Gold": 5.0, + "Steel": 30.0 + } + }, + { + "target_prefab": "ItemKitSolarPanelBasicReinforced", + "target_prefab_hash": -528695432, + "tier": "TierTwo", + "time": 120.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 10.0, + "Electrum": 2.0, + "Invar": 10.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemKitSolarPanelReinforced", + "target_prefab_hash": -364868685, + "tier": "TierTwo", + "time": 120.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Astroloy": 15.0, + "Copper": 20.0, + "Electrum": 5.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "PortableSolarPanel", + "target_prefab_hash": 2043318949, + "tier": "TierOne", + "time": 5.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 3.0, + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemKitTransformer", + "target_prefab_hash": -453039435, + "tier": "TierOne", + "time": 60.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 5.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemKitTransformerSmall", + "target_prefab_hash": 665194284, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 1.0, + "Iron": 10.0 + } + }, + { + "target_prefab": "ItemTablet", + "target_prefab_hash": -229808600, + "tier": "TierOne", + "time": 5.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Solder": 5.0 + } + }, + { + "target_prefab": "ItemAdvancedTablet", + "target_prefab_hash": 1722785341, + "tier": "TierTwo", + "time": 60.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 6, + "reagents": { + "Copper": 5.5, + "Electrum": 1.0, + "Gold": 12.0, + "Iron": 3.0, + "Solder": 5.0, + "Steel": 2.0 + } + }, + { + "target_prefab": "ItemLaptop", + "target_prefab_hash": 141535121, "tier": "TierTwo", "time": 60.0, "energy": 18000.0, @@ -32067,279 +33753,9 @@ export default { "Steel": 2.0 } }, - "ItemPowerConnector": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 3.0, - "Iron": 10.0 - } - }, - "ItemResearchCapsule": { - "tier": "TierOne", - "time": 3.0, - "energy": 400.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 2.0, - "Iron": 9.0 - } - }, - "ItemResearchCapsuleGreen": { - "tier": "TierOne", - "time": 5.0, - "energy": 10.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Astroloy": 2.0, - "Copper": 3.0, - "Gold": 2.0, - "Iron": 9.0 - } - }, - "ItemResearchCapsuleRed": { - "tier": "TierOne", - "time": 8.0, - "energy": 50.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 2.0, - "Iron": 2.0 - } - }, - "ItemResearchCapsuleYellow": { - "tier": "TierOne", - "time": 5.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Astroloy": 3.0, - "Copper": 3.0, - "Gold": 2.0, - "Iron": 9.0 - } - }, - "ItemSoundCartridgeBass": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 2.0, - "Silicon": 2.0 - } - }, - "ItemSoundCartridgeDrums": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 2.0, - "Silicon": 2.0 - } - }, - "ItemSoundCartridgeLeads": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 2.0, - "Silicon": 2.0 - } - }, - "ItemSoundCartridgeSynth": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 2.0, - "Silicon": 2.0 - } - }, - "ItemTablet": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 2.0, - "Solder": 5.0 - } - }, - "ItemWallLight": { + { + "target_prefab": "ItemWallLight", + "target_prefab_hash": 1108423476, "tier": "TierOne", "time": 5.0, "energy": 10.0, @@ -32365,7 +33781,121 @@ export default { "Iron": 1.0 } }, - "MotherboardComms": { + { + "target_prefab": "MotherboardLogic", + "target_prefab_hash": 502555944, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + { + "target_prefab": "MotherboardRockets", + "target_prefab_hash": -806986392, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 5.0, + "Solder": 5.0 + } + }, + { + "target_prefab": "MotherboardProgrammableChip", + "target_prefab_hash": -161107071, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Gold": 5.0 + } + }, + { + "target_prefab": "MotherboardSorter", + "target_prefab_hash": -1908268220, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 5.0, + "Silver": 5.0 + } + }, + { + "target_prefab": "MotherboardComms", + "target_prefab_hash": -337075633, "tier": "TierOne", "time": 5.0, "energy": 500.0, @@ -32393,7 +33923,9 @@ export default { "Silver": 5.0 } }, - "MotherboardLogic": { + { + "target_prefab": "ItemKitBeacon", + "target_prefab_hash": 249073136, "tier": "TierOne", "time": 5.0, "energy": 500.0, @@ -32413,119 +33945,459 @@ export default { "is_any_to_remove": false, "reagents": {} }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "MotherboardProgrammableChip": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Gold": 5.0 - } - }, - "MotherboardRockets": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 5.0, - "Solder": 5.0 - } - }, - "MotherboardSorter": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Gold": 5.0, - "Silver": 5.0 - } - }, - "PipeBenderMod": { - "tier": "TierTwo", - "time": 180.0, - "energy": 72000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, "count_types": 4, "reagents": { - "Constantan": 8.0, - "Electrum": 8.0, - "Solder": 8.0, - "Steel": 35.0 + "Copper": 2.0, + "Gold": 4.0, + "Solder": 2.0, + "Steel": 5.0 } }, - "PortableComposter": { + { + "target_prefab": "ItemKitElevator", + "target_prefab_hash": -945806652, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 2.0, + "Gold": 4.0, + "Solder": 2.0, + "Steel": 2.0 + } + }, + { + "target_prefab": "ItemKitHydroponicStation", + "target_prefab_hash": 2057179799, + "tier": "TierOne", + "time": 120.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 20.0, + "Gold": 5.0, + "Nickel": 5.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemKitSmallSatelliteDish", + "target_prefab_hash": 1960952220, + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Gold": 5.0 + } + }, + { + "target_prefab": "ItemKitSatelliteDish", + "target_prefab_hash": 178422810, + "tier": "TierOne", + "time": 120.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 15.0, + "Solder": 10.0, + "Steel": 20.0 + } + }, + { + "target_prefab": "ItemKitLargeSatelliteDish", + "target_prefab_hash": -2039971217, + "tier": "TierOne", + "time": 240.0, + "energy": 72000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Astroloy": 100.0, + "Inconel": 50.0, + "Waspaloy": 20.0 + } + }, + { + "target_prefab": "ItemKitLandingPadBasic", + "target_prefab_hash": 293581318, + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemKitLandingPadAtmos", + "target_prefab_hash": 1817007843, + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemKitLandingPadWaypoint", + "target_prefab_hash": -1267511065, + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemKitHarvie", + "target_prefab_hash": -1022693454, + "tier": "TierOne", + "time": 60.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 5, + "reagents": { + "Copper": 15.0, + "Electrum": 10.0, + "Silicon": 5.0, + "Solder": 5.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemKitDynamicGenerator", + "target_prefab_hash": -732720413, + "tier": "TierOne", + "time": 120.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Gold": 15.0, + "Nickel": 15.0, + "Solder": 5.0, + "Steel": 20.0 + } + }, + { + "target_prefab": "ItemKitVendingMachine", + "target_prefab_hash": -2038384332, + "tier": "TierOne", + "time": 60.0, + "energy": 15000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Electrum": 50.0, + "Gold": 50.0, + "Solder": 10.0, + "Steel": 20.0 + } + }, + { + "target_prefab": "ItemKitVendingMachineRefrigerated", + "target_prefab_hash": -1867508561, + "tier": "TierTwo", + "time": 60.0, + "energy": 25000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Electrum": 80.0, + "Gold": 60.0, + "Solder": 30.0, + "Steel": 40.0 + } + }, + { + "target_prefab": "ItemKitAutomatedOven", + "target_prefab_hash": -1931958659, + "tier": "TierTwo", + "time": 50.0, + "energy": 15000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 5, + "reagents": { + "Constantan": 5.0, + "Copper": 15.0, + "Gold": 10.0, + "Solder": 10.0, + "Steel": 25.0 + } + }, + { + "target_prefab": "ItemKitAdvancedPackagingMachine", + "target_prefab_hash": -598545233, + "tier": "TierTwo", + "time": 60.0, + "energy": 18000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 10.0, + "Copper": 10.0, + "Electrum": 15.0, + "Steel": 20.0 + } + }, + { + "target_prefab": "ItemKitAdvancedComposter", + "target_prefab_hash": -1431998347, + "tier": "TierTwo", + "time": 55.0, + "energy": 20000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 15.0, + "Electrum": 20.0, + "Solder": 5.0, + "Steel": 30.0 + } + }, + { + "target_prefab": "PortableComposter", + "target_prefab_hash": -1958705204, "tier": "TierOne", "time": 55.0, "energy": 20000.0, @@ -32551,10 +34423,42 @@ export default { "Steel": 10.0 } }, - "PortableSolarPanel": { + { + "target_prefab": "ItemKitTurbineGenerator", + "target_prefab_hash": -1590715731, "tier": "TierOne", - "time": 5.0, - "energy": 200.0, + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 2.0, + "Gold": 4.0, + "Iron": 5.0, + "Solder": 4.0 + } + }, + { + "target_prefab": "ItemKitUprightWindTurbine", + "target_prefab_hash": -1798044015, + "tier": "TierOne", + "time": 60.0, + "energy": 12000.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -32573,12 +34477,102 @@ export default { }, "count_types": 3, "reagents": { - "Copper": 5.0, - "Gold": 3.0, - "Iron": 5.0 + "Copper": 10.0, + "Gold": 5.0, + "Iron": 10.0 } }, - "ToolPrinterMod": { + { + "target_prefab": "ItemKitWindTurbine", + "target_prefab_hash": -868916503, + "tier": "TierTwo", + "time": 60.0, + "energy": 12000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Electrum": 5.0, + "Steel": 20.0 + } + }, + { + "target_prefab": "ItemLabeller", + "target_prefab_hash": -743968726, + "tier": "TierOne", + "time": 15.0, + "energy": 800.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 3.0 + } + }, + { + "target_prefab": "ElectronicPrinterMod", + "target_prefab_hash": -311170652, + "tier": "TierOne", + "time": 180.0, + "energy": 72000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 8.0, + "Electrum": 8.0, + "Solder": 8.0, + "Steel": 35.0 + } + }, + { + "target_prefab": "AutolathePrinterMod", + "target_prefab_hash": 221058307, "tier": "TierTwo", "time": 180.0, "energy": 72000.0, @@ -32605,8 +34599,591 @@ export default { "Solder": 8.0, "Steel": 35.0 } + }, + { + "target_prefab": "ToolPrinterMod", + "target_prefab_hash": 1700018136, + "tier": "TierTwo", + "time": 180.0, + "energy": 72000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 8.0, + "Electrum": 8.0, + "Solder": 8.0, + "Steel": 35.0 + } + }, + { + "target_prefab": "PipeBenderMod", + "target_prefab_hash": 443947415, + "tier": "TierTwo", + "time": 180.0, + "energy": 72000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 8.0, + "Electrum": 8.0, + "Solder": 8.0, + "Steel": 35.0 + } + }, + { + "target_prefab": "ItemKitAdvancedFurnace", + "target_prefab_hash": -616758353, + "tier": "TierTwo", + "time": 180.0, + "energy": 36000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 6, + "reagents": { + "Copper": 25.0, + "Electrum": 15.0, + "Gold": 5.0, + "Silicon": 6.0, + "Solder": 8.0, + "Steel": 30.0 + } + }, + { + "target_prefab": "ApplianceMicrowave", + "target_prefab_hash": -1136173965, + "tier": "TierOne", + "time": 45.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 5.0 + } + }, + { + "target_prefab": "ApplianceTabletDock", + "target_prefab_hash": 1853941363, + "tier": "TierOne", + "time": 30.0, + "energy": 750.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 5.0, + "Silicon": 1.0 + } + }, + { + "target_prefab": "AppliancePackagingMachine", + "target_prefab_hash": -749191906, + "tier": "TierOne", + "time": 30.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 10.0 + } + }, + { + "target_prefab": "ApplianceDeskLampRight", + "target_prefab_hash": 1174360780, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 2.0, + "Silicon": 1.0 + } + }, + { + "target_prefab": "ApplianceDeskLampLeft", + "target_prefab_hash": -1683849799, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 2.0, + "Silicon": 1.0 + } + }, + { + "target_prefab": "ApplianceReagentProcessor", + "target_prefab_hash": 1260918085, + "tier": "TierOne", + "time": 45.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 5.0 + } + }, + { + "target_prefab": "ApplianceChemistryStation", + "target_prefab_hash": 1365789392, + "tier": "TierOne", + "time": 45.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 1.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "AppliancePaintMixer", + "target_prefab_hash": -1339716113, + "tier": "TierOne", + "time": 45.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 1.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemKitAutoMinerSmall", + "target_prefab_hash": 1668815415, + "tier": "TierTwo", + "time": 90.0, + "energy": 9000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 5, + "reagents": { + "Copper": 15.0, + "Electrum": 50.0, + "Invar": 25.0, + "Iron": 15.0, + "Steel": 100.0 + } + }, + { + "target_prefab": "ItemKitHorizontalAutoMiner", + "target_prefab_hash": 844391171, + "tier": "TierTwo", + "time": 60.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 5, + "reagents": { + "Copper": 7.0, + "Electrum": 25.0, + "Invar": 15.0, + "Iron": 8.0, + "Steel": 60.0 + } + }, + { + "target_prefab": "ItemCreditCard", + "target_prefab_hash": -1756772618, + "tier": "TierOne", + "time": 5.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Silicon": 5.0 + } + }, + { + "target_prefab": "AppliancePlantGeneticAnalyzer", + "target_prefab_hash": -1303038067, + "tier": "TierOne", + "time": 45.0, + "energy": 4500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 1.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "AppliancePlantGeneticSplicer", + "target_prefab_hash": -1094868323, + "tier": "TierOne", + "time": 50.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Inconel": 10.0, + "Stellite": 20.0 + } + }, + { + "target_prefab": "AppliancePlantGeneticStabilizer", + "target_prefab_hash": 871432335, + "tier": "TierOne", + "time": 50.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Inconel": 10.0, + "Stellite": 20.0 + } + }, + { + "target_prefab": "ItemKitGroundTelescope", + "target_prefab_hash": -2140672772, + "tier": "TierOne", + "time": 150.0, + "energy": 24000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 15.0, + "Solder": 10.0, + "Steel": 25.0 + } + }, + { + "target_prefab": "ItemKitLinearRail", + "target_prefab_hash": -441759975, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 3.0 + } + }, + { + "target_prefab": "ItemKitRoboticArm", + "target_prefab_hash": -1228287398, + "tier": "TierOne", + "time": 150.0, + "energy": 10000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Astroloy": 15.0, + "Hastelloy": 5.0, + "Inconel": 10.0 + } } - } + ] }, "memory": { "instructions": { @@ -32988,7 +35565,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -33049,7 +35626,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -33098,7 +35675,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -33152,7 +35729,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -33204,7 +35781,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -33294,7 +35871,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -33354,7 +35931,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -33506,20 +36083,29 @@ export default { "wireless_logic": false, "circuit_holder": true }, - "slots": [ - { - "name": "Gas Filter", - "typ": "GasFilter" + "slots": { + "0": { + "Direct": { + "name": "Gas Filter", + "class": "GasFilter", + "index": 0 + } }, - { - "name": "Gas Filter", - "typ": "GasFilter" + "1": { + "Direct": { + "name": "Gas Filter", + "class": "GasFilter", + "index": 1 + } }, - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" + "2": { + "Direct": { + "name": "Programmable Chip", + "class": "ProgrammableChip", + "index": 2 + } } - ], + }, "device": { "connection_list": [ { @@ -33592,7 +36178,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -33644,12 +36230,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Seat", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -33959,68 +36548,113 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } }, - { - "name": "", - "typ": "None" + "6": { + "Direct": { + "name": "", + "class": "None", + "index": 6 + } }, - { - "name": "", - "typ": "None" + "7": { + "Direct": { + "name": "", + "class": "None", + "index": 7 + } }, - { - "name": "", - "typ": "None" + "8": { + "Direct": { + "name": "", + "class": "None", + "index": 8 + } }, - { - "name": "", - "typ": "None" + "9": { + "Direct": { + "name": "", + "class": "None", + "index": 9 + } }, - { - "name": "", - "typ": "None" + "10": { + "Direct": { + "name": "", + "class": "None", + "index": 10 + } }, - { - "name": "", - "typ": "None" + "11": { + "Direct": { + "name": "", + "class": "None", + "index": 11 + } }, - { - "name": "", - "typ": "None" + "12": { + "Direct": { + "name": "", + "class": "None", + "index": 12 + } }, - { - "name": "", - "typ": "None" + "13": { + "Direct": { + "name": "", + "class": "None", + "index": 13 + } }, - { - "name": "", - "typ": "None" + "14": { + "Direct": { + "name": "", + "class": "None", + "index": 14 + } } - ], + }, "device": { "connection_list": [ { @@ -34116,16 +36750,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -34209,16 +36849,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -34359,7 +37005,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -34419,7 +37065,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -34491,7 +37137,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -34557,12 +37203,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Gas Canister", - "typ": "GasCanister" + "slots": { + "0": { + "Direct": { + "name": "Gas Canister", + "class": "GasCanister", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -34609,7 +37258,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -34652,7 +37301,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -34707,7 +37356,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -34763,7 +37412,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -34834,7 +37483,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -34899,7 +37548,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -34947,7 +37596,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -35043,20 +37692,29 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "Plant" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "Plant", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } }, - { - "name": "Hand", - "typ": "None" + "2": { + "Direct": { + "name": "Hand", + "class": "None", + "index": 2 + } } - ], + }, "device": { "connection_list": [ { @@ -35107,7 +37765,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -35162,7 +37820,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -35217,7 +37875,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -35286,16 +37944,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -35363,16 +38027,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "Ingot" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "Ingot", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -35427,11 +38097,13 @@ export default { }, "fabricator_info": { "tier": "Undefined", - "recipes": { - "ApplianceSeedTray": { + "recipes": [ + { + "target_prefab": "ItemKitDynamicCanister", + "target_prefab_hash": -1061945368, "tier": "TierOne", - "time": 10.0, - "energy": 500.0, + "time": 20.0, + "energy": 1000.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -35448,14 +38120,101 @@ export default { "is_any_to_remove": false, "reagents": {} }, - "count_types": 3, + "count_types": 1, "reagents": { - "Copper": 5.0, - "Iron": 10.0, - "Silicon": 15.0 + "Iron": 20.0 } }, - "ItemActiveVent": { + { + "target_prefab": "ItemKitDynamicGasTankAdvanced", + "target_prefab_hash": 1533501495, + "tier": "TierTwo", + "time": 40.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Iron": 20.0, + "Silicon": 5.0, + "Steel": 15.0 + } + }, + { + "target_prefab": "ItemKitDynamicLiquidCanister", + "target_prefab_hash": 375541286, + "tier": "TierOne", + "time": 20.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 20.0 + } + }, + { + "target_prefab": "ItemKitDynamicMKIILiquidCanister", + "target_prefab_hash": -638019974, + "tier": "TierTwo", + "time": 40.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Iron": 20.0, + "Silicon": 5.0, + "Steel": 15.0 + } + }, + { + "target_prefab": "ItemActiveVent", + "target_prefab_hash": -842048328, "tier": "TierOne", "time": 5.0, "energy": 500.0, @@ -35482,89 +38241,9 @@ export default { "Iron": 5.0 } }, - "ItemAdhesiveInsulation": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Silicon": 1.0, - "Steel": 0.5 - } - }, - "ItemDynamicAirCon": { - "tier": "TierOne", - "time": 60.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Gold": 5.0, - "Silver": 5.0, - "Solder": 5.0, - "Steel": 20.0 - } - }, - "ItemDynamicScrubber": { - "tier": "TierOne", - "time": 30.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Gold": 5.0, - "Invar": 5.0, - "Solder": 5.0, - "Steel": 20.0 - } - }, - "ItemGasCanisterEmpty": { + { + "target_prefab": "ItemGasCanisterEmpty", + "target_prefab_hash": 42280099, "tier": "TierOne", "time": 5.0, "energy": 500.0, @@ -35589,7 +38268,95 @@ export default { "Iron": 5.0 } }, - "ItemGasCanisterSmart": { + { + "target_prefab": "ItemKitWaterBottleFiller", + "target_prefab_hash": 159886536, + "tier": "TierOne", + "time": 7.0, + "energy": 620.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Iron": 5.0, + "Silicon": 8.0 + } + }, + { + "target_prefab": "ItemKitDrinkingFountain", + "target_prefab_hash": -1743663875, + "tier": "TierOne", + "time": 20.0, + "energy": 620.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Iron": 5.0, + "Silicon": 8.0 + } + }, + { + "target_prefab": "ItemWaterBottle", + "target_prefab_hash": 107741229, + "tier": "TierOne", + "time": 4.0, + "energy": 120.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 2.0, + "Silicon": 4.0 + } + }, + { + "target_prefab": "ItemGasCanisterSmart", + "target_prefab_hash": -668314371, "tier": "TierTwo", "time": 10.0, "energy": 1000.0, @@ -35616,7 +38383,38 @@ export default { "Steel": 15.0 } }, - "ItemGasFilterCarbonDioxide": { + { + "target_prefab": "ItemLiquidCanisterSmart", + "target_prefab_hash": 777684475, + "tier": "TierTwo", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Silicon": 2.0, + "Steel": 15.0 + } + }, + { + "target_prefab": "ItemLiquidCanisterEmpty", + "target_prefab_hash": -185207387, "tier": "TierOne", "time": 5.0, "energy": 500.0, @@ -35641,10 +38439,12 @@ export default { "Iron": 5.0 } }, - "ItemGasFilterCarbonDioxideL": { - "tier": "TierTwo", - "time": 45.0, - "energy": 4000.0, + { + "target_prefab": "ItemKitSuitStorage", + "target_prefab_hash": 1088892825, + "tier": "TierOne", + "time": 30.0, + "energy": 500.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -35663,12 +38463,203 @@ export default { }, "count_types": 3, "reagents": { - "Invar": 1.0, - "Steel": 5.0, - "Stellite": 1.0 + "Copper": 5.0, + "Iron": 15.0, + "Silver": 5.0 } }, - "ItemGasFilterCarbonDioxideM": { + { + "target_prefab": "ItemGasFilterCarbonDioxide", + "target_prefab_hash": 1635000764, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemGasFilterPollutants", + "target_prefab_hash": 1915566057, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemGasFilterNitrogen", + "target_prefab_hash": 632853248, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemGasFilterOxygen", + "target_prefab_hash": -721824748, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemGasFilterVolatiles", + "target_prefab_hash": 15011598, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemGasFilterNitrousOxide", + "target_prefab_hash": -1247674305, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemGasFilterWater", + "target_prefab_hash": -1993197973, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemGasFilterCarbonDioxideM", + "target_prefab_hash": 416897318, "tier": "TierOne", "time": 20.0, "energy": 2500.0, @@ -35695,59 +38686,9 @@ export default { "Silver": 5.0 } }, - "ItemGasFilterNitrogen": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemGasFilterNitrogenL": { - "tier": "TierTwo", - "time": 45.0, - "energy": 4000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Invar": 1.0, - "Steel": 5.0, - "Stellite": 1.0 - } - }, - "ItemGasFilterNitrogenM": { + { + "target_prefab": "ItemGasFilterPollutantsM", + "target_prefab_hash": 63677771, "tier": "TierOne", "time": 20.0, "energy": 2500.0, @@ -35774,59 +38715,9 @@ export default { "Silver": 5.0 } }, - "ItemGasFilterNitrousOxide": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemGasFilterNitrousOxideL": { - "tier": "TierTwo", - "time": 45.0, - "energy": 4000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Invar": 1.0, - "Steel": 5.0, - "Stellite": 1.0 - } - }, - "ItemGasFilterNitrousOxideM": { + { + "target_prefab": "ItemGasFilterNitrogenM", + "target_prefab_hash": -632657357, "tier": "TierOne", "time": 20.0, "energy": 2500.0, @@ -35853,59 +38744,9 @@ export default { "Silver": 5.0 } }, - "ItemGasFilterOxygen": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemGasFilterOxygenL": { - "tier": "TierTwo", - "time": 45.0, - "energy": 4000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Invar": 1.0, - "Steel": 5.0, - "Stellite": 1.0 - } - }, - "ItemGasFilterOxygenM": { + { + "target_prefab": "ItemGasFilterOxygenM", + "target_prefab_hash": -1067319543, "tier": "TierOne", "time": 20.0, "energy": 2500.0, @@ -35932,59 +38773,9 @@ export default { "Silver": 5.0 } }, - "ItemGasFilterPollutants": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemGasFilterPollutantsL": { - "tier": "TierTwo", - "time": 45.0, - "energy": 4000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Invar": 1.0, - "Steel": 5.0, - "Stellite": 1.0 - } - }, - "ItemGasFilterPollutantsM": { + { + "target_prefab": "ItemGasFilterVolatilesM", + "target_prefab_hash": 1037507240, "tier": "TierOne", "time": 20.0, "energy": 2500.0, @@ -36011,59 +38802,9 @@ export default { "Silver": 5.0 } }, - "ItemGasFilterVolatiles": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemGasFilterVolatilesL": { - "tier": "TierTwo", - "time": 45.0, - "energy": 4000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Invar": 1.0, - "Steel": 5.0, - "Stellite": 1.0 - } - }, - "ItemGasFilterVolatilesM": { + { + "target_prefab": "ItemGasFilterNitrousOxideM", + "target_prefab_hash": 1824284061, "tier": "TierOne", "time": 20.0, "energy": 2500.0, @@ -36090,59 +38831,9 @@ export default { "Silver": 5.0 } }, - "ItemGasFilterWater": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemGasFilterWaterL": { - "tier": "TierTwo", - "time": 45.0, - "energy": 4000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Invar": 1.0, - "Steel": 5.0, - "Stellite": 1.0 - } - }, - "ItemGasFilterWaterM": { + { + "target_prefab": "ItemGasFilterWaterM", + "target_prefab_hash": 8804422, "tier": "TierOne", "time": 20.0, "energy": 2500.0, @@ -36169,7 +38860,350 @@ export default { "Silver": 5.0 } }, - "ItemHydroponicTray": { + { + "target_prefab": "ItemGasFilterCarbonDioxideL", + "target_prefab_hash": 1876847024, + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + { + "target_prefab": "ItemGasFilterPollutantsL", + "target_prefab_hash": 1959564765, + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + { + "target_prefab": "ItemGasFilterNitrogenL", + "target_prefab_hash": -1387439451, + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + { + "target_prefab": "ItemGasFilterOxygenL", + "target_prefab_hash": -1217998945, + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + { + "target_prefab": "ItemGasFilterVolatilesL", + "target_prefab_hash": 1255156286, + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + { + "target_prefab": "ItemGasFilterNitrousOxideL", + "target_prefab_hash": 465267979, + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + { + "target_prefab": "ItemGasFilterWaterL", + "target_prefab_hash": 2004969680, + "tier": "TierTwo", + "time": 45.0, + "energy": 4000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Invar": 1.0, + "Steel": 5.0, + "Stellite": 1.0 + } + }, + { + "target_prefab": "ItemKitPipeUtility", + "target_prefab_hash": 1934508338, + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemKitPipeUtilityLiquid", + "target_prefab_hash": 595478589, + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemAdhesiveInsulation", + "target_prefab_hash": 1871048978, + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 1.0, + "Steel": 0.5 + } + }, + { + "target_prefab": "ItemKitInsulatedPipeUtility", + "target_prefab_hash": -27284803, + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 1.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemKitInsulatedPipeUtilityLiquid", + "target_prefab_hash": -1831558953, + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 1.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemHydroponicTray", + "target_prefab_hash": -1193543727, "tier": "TierOne", "time": 5.0, "energy": 500.0, @@ -36194,7 +39228,36 @@ export default { "Iron": 10.0 } }, - "ItemKitAirlock": { + { + "target_prefab": "ItemKitPlanter", + "target_prefab_hash": 119096484, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 10.0 + } + }, + { + "target_prefab": "ItemKitAirlock", + "target_prefab_hash": 964043875, "tier": "TierOne", "time": 50.0, "energy": 5000.0, @@ -36221,7 +39284,9 @@ export default { "Steel": 15.0 } }, - "ItemKitAirlockGate": { + { + "target_prefab": "ItemKitAirlockGate", + "target_prefab_hash": 682546947, "tier": "TierOne", "time": 60.0, "energy": 6000.0, @@ -36248,7 +39313,9 @@ export default { "Steel": 25.0 } }, - "ItemKitAtmospherics": { + { + "target_prefab": "ItemKitAtmospherics", + "target_prefab_hash": 1222286371, "tier": "TierOne", "time": 30.0, "energy": 6000.0, @@ -36275,7 +39342,38 @@ export default { "Iron": 10.0 } }, - "ItemKitChute": { + { + "target_prefab": "ItemKitWaterPurifier", + "target_prefab_hash": 611181283, + "tier": "TierOne", + "time": 30.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 20.0, + "Gold": 5.0, + "Iron": 10.0 + } + }, + { + "target_prefab": "ItemKitChute", + "target_prefab_hash": 1025254665, "tier": "TierOne", "time": 2.0, "energy": 500.0, @@ -36300,7 +39398,1374 @@ export default { "Iron": 3.0 } }, - "ItemKitCryoTube": { + { + "target_prefab": "ItemKitStandardChute", + "target_prefab_hash": 2133035682, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 2.0, + "Electrum": 2.0, + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemKitPipe", + "target_prefab_hash": -1619793705, + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 0.5 + } + }, + { + "target_prefab": "ItemKitInsulatedPipe", + "target_prefab_hash": 452636699, + "tier": "TierOne", + "time": 4.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 1.0, + "Steel": 1.0 + } + }, + { + "target_prefab": "ItemKitInsulatedLiquidPipe", + "target_prefab_hash": 2067655311, + "tier": "TierOne", + "time": 4.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 1.0, + "Steel": 1.0 + } + }, + { + "target_prefab": "ItemKitPipeLiquid", + "target_prefab_hash": -1166461357, + "tier": "TierOne", + "time": 2.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 0.5 + } + }, + { + "target_prefab": "ItemKitRegulator", + "target_prefab_hash": 1181371795, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemKitLiquidRegulator", + "target_prefab_hash": 1951126161, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemKitTank", + "target_prefab_hash": 771439840, + "tier": "TierOne", + "time": 20.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 20.0 + } + }, + { + "target_prefab": "ItemKitLiquidTank", + "target_prefab_hash": -799849305, + "tier": "TierOne", + "time": 20.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 20.0 + } + }, + { + "target_prefab": "ItemKitTankInsulated", + "target_prefab_hash": 1021053608, + "tier": "TierOne", + "time": 30.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Silicon": 30.0, + "Steel": 20.0 + } + }, + { + "target_prefab": "ItemKitLiquidTankInsulated", + "target_prefab_hash": 617773453, + "tier": "TierOne", + "time": 30.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Silicon": 30.0, + "Steel": 20.0 + } + }, + { + "target_prefab": "ItemPassiveVent", + "target_prefab_hash": 238631271, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemPassiveVentInsulated", + "target_prefab_hash": -1397583760, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Silicon": 5.0, + "Steel": 1.0 + } + }, + { + "target_prefab": "ItemPipeCowl", + "target_prefab_hash": -38898376, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemPipeAnalyizer", + "target_prefab_hash": -767597887, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 2.0, + "Gold": 2.0, + "Iron": 2.0 + } + }, + { + "target_prefab": "ItemPipeIgniter", + "target_prefab_hash": 1366030599, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 2.0, + "Iron": 2.0 + } + }, + { + "target_prefab": "ItemLiquidPipeAnalyzer", + "target_prefab_hash": 226055671, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 2.0, + "Gold": 2.0, + "Iron": 2.0 + } + }, + { + "target_prefab": "ItemPipeDigitalValve", + "target_prefab_hash": -1532448832, + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Invar": 3.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemWaterPipeDigitalValve", + "target_prefab_hash": 309693520, + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Invar": 3.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemPipeGasMixer", + "target_prefab_hash": -1134459463, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 2.0, + "Iron": 2.0 + } + }, + { + "target_prefab": "ItemPipeLabel", + "target_prefab_hash": 391769637, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + { + "target_prefab": "ItemPipeMeter", + "target_prefab_hash": 1207939683, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemWaterPipeMeter", + "target_prefab_hash": -90898877, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemLiquidDrain", + "target_prefab_hash": 2036225202, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemKitPipeRadiator", + "target_prefab_hash": 920411066, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 3.0, + "Steel": 2.0 + } + }, + { + "target_prefab": "ItemKitLargeExtendableRadiator", + "target_prefab_hash": 847430620, + "tier": "TierTwo", + "time": 30.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Invar": 10.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemKitPassiveLargeRadiatorLiquid", + "target_prefab_hash": 1453961898, + "tier": "TierTwo", + "time": 30.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Invar": 5.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemKitPassiveLargeRadiatorGas", + "target_prefab_hash": -1752768283, + "tier": "TierTwo", + "time": 30.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Invar": 5.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemKitPoweredVent", + "target_prefab_hash": 2015439334, + "tier": "TierTwo", + "time": 20.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 5.0, + "Invar": 2.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemKitHeatExchanger", + "target_prefab_hash": -1710540039, + "tier": "TierTwo", + "time": 30.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 10.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemKitLargeDirectHeatExchanger", + "target_prefab_hash": 450164077, + "tier": "TierTwo", + "time": 30.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 10.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemKitPassthroughHeatExchanger", + "target_prefab_hash": 636112787, + "tier": "TierTwo", + "time": 30.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 10.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemKitSmallDirectHeatExchanger", + "target_prefab_hash": -1332682164, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 3.0 + } + }, + { + "target_prefab": "ItemKitEvaporationChamber", + "target_prefab_hash": 1587787610, + "tier": "TierOne", + "time": 30.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Silicon": 5.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemKitPipeRadiatorLiquid", + "target_prefab_hash": -1697302609, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 3.0, + "Steel": 2.0 + } + }, + { + "target_prefab": "ItemPipeValve", + "target_prefab_hash": 799323450, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemLiquidPipeValve", + "target_prefab_hash": -2126113312, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemPipeVolumePump", + "target_prefab_hash": -1766301997, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemKitTurboVolumePump", + "target_prefab_hash": -1248429712, + "tier": "TierTwo", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 4.0, + "Electrum": 5.0, + "Gold": 4.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemKitLiquidTurboVolumePump", + "target_prefab_hash": -1805020897, + "tier": "TierTwo", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 4.0, + "Electrum": 5.0, + "Gold": 4.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemLiquidPipeVolumePump", + "target_prefab_hash": -2106280569, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemLiquidPipeHeater", + "target_prefab_hash": -248475032, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 3.0, + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemPipeHeater", + "target_prefab_hash": -1751627006, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 3.0, + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemKitPortablesConnector", + "target_prefab_hash": 1041148999, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemWallCooler", + "target_prefab_hash": -1567752627, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 1.0, + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemWaterWallCooler", + "target_prefab_hash": -1721846327, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 1.0, + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemWallHeater", + "target_prefab_hash": 1880134612, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 1.0, + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemKitSleeper", + "target_prefab_hash": 326752036, + "tier": "TierOne", + "time": 60.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 10.0, + "Gold": 10.0, + "Steel": 25.0 + } + }, + { + "target_prefab": "ItemKitCryoTube", + "target_prefab_hash": -545234195, "tier": "TierTwo", "time": 120.0, "energy": 24000.0, @@ -36328,62 +40793,12 @@ export default { "Steel": 35.0 } }, - "ItemKitDrinkingFountain": { + { + "target_prefab": "ItemDynamicAirCon", + "target_prefab_hash": 1072914031, "tier": "TierOne", - "time": 20.0, - "energy": 620.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Iron": 5.0, - "Silicon": 8.0 - } - }, - "ItemKitDynamicCanister": { - "tier": "TierOne", - "time": 20.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 20.0 - } - }, - "ItemKitDynamicGasTankAdvanced": { - "tier": "TierTwo", - "time": 40.0, - "energy": 2000.0, + "time": 60.0, + "energy": 5000.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -36402,13 +40817,45 @@ export default { }, "count_types": 4, "reagents": { - "Copper": 5.0, - "Iron": 20.0, - "Silicon": 5.0, - "Steel": 15.0 + "Gold": 5.0, + "Silver": 5.0, + "Solder": 5.0, + "Steel": 20.0 } }, - "ItemKitDynamicHydroponics": { + { + "target_prefab": "ItemDynamicScrubber", + "target_prefab_hash": -971920158, + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Gold": 5.0, + "Invar": 5.0, + "Solder": 5.0, + "Steel": 20.0 + } + }, + { + "target_prefab": "ItemKitDynamicHydroponics", + "target_prefab_hash": -1861154222, "tier": "TierOne", "time": 30.0, "energy": 1000.0, @@ -36435,10 +40882,12 @@ export default { "Steel": 20.0 } }, - "ItemKitDynamicLiquidCanister": { + { + "target_prefab": "ItemKitPipeOrgan", + "target_prefab_hash": -827125300, "tier": "TierOne", - "time": 20.0, - "energy": 1000.0, + "time": 5.0, + "energy": 100.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -36457,91 +40906,12 @@ export default { }, "count_types": 1, "reagents": { - "Iron": 20.0 + "Iron": 3.0 } }, - "ItemKitDynamicMKIILiquidCanister": { - "tier": "TierTwo", - "time": 40.0, - "energy": 2000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 5.0, - "Iron": 20.0, - "Silicon": 5.0, - "Steel": 15.0 - } - }, - "ItemKitEvaporationChamber": { - "tier": "TierOne", - "time": 30.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Silicon": 5.0, - "Steel": 10.0 - } - }, - "ItemKitHeatExchanger": { - "tier": "TierTwo", - "time": 30.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Invar": 10.0, - "Steel": 10.0 - } - }, - "ItemKitIceCrusher": { + { + "target_prefab": "ItemKitIceCrusher", + "target_prefab_hash": 288111533, "tier": "TierOne", "time": 30.0, "energy": 3000.0, @@ -36568,633 +40938,9 @@ export default { "Iron": 3.0 } }, - "ItemKitInsulatedLiquidPipe": { - "tier": "TierOne", - "time": 4.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Silicon": 1.0, - "Steel": 1.0 - } - }, - "ItemKitInsulatedPipe": { - "tier": "TierOne", - "time": 4.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Silicon": 1.0, - "Steel": 1.0 - } - }, - "ItemKitInsulatedPipeUtility": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Silicon": 1.0, - "Steel": 5.0 - } - }, - "ItemKitInsulatedPipeUtilityLiquid": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Silicon": 1.0, - "Steel": 5.0 - } - }, - "ItemKitLargeDirectHeatExchanger": { - "tier": "TierTwo", - "time": 30.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Invar": 10.0, - "Steel": 10.0 - } - }, - "ItemKitLargeExtendableRadiator": { - "tier": "TierTwo", - "time": 30.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Invar": 10.0, - "Steel": 10.0 - } - }, - "ItemKitLiquidRegulator": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 1.0, - "Iron": 5.0 - } - }, - "ItemKitLiquidTank": { - "tier": "TierOne", - "time": 20.0, - "energy": 2000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Steel": 20.0 - } - }, - "ItemKitLiquidTankInsulated": { - "tier": "TierOne", - "time": 30.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Silicon": 30.0, - "Steel": 20.0 - } - }, - "ItemKitLiquidTurboVolumePump": { - "tier": "TierTwo", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 4.0, - "Electrum": 5.0, - "Gold": 4.0, - "Steel": 5.0 - } - }, - "ItemKitPassiveLargeRadiatorGas": { - "tier": "TierTwo", - "time": 30.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Invar": 5.0, - "Steel": 5.0 - } - }, - "ItemKitPassiveLargeRadiatorLiquid": { - "tier": "TierTwo", - "time": 30.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Invar": 5.0, - "Steel": 5.0 - } - }, - "ItemKitPassthroughHeatExchanger": { - "tier": "TierTwo", - "time": 30.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Invar": 10.0, - "Steel": 10.0 - } - }, - "ItemKitPipe": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 0.5 - } - }, - "ItemKitPipeLiquid": { - "tier": "TierOne", - "time": 2.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 0.5 - } - }, - "ItemKitPipeOrgan": { - "tier": "TierOne", - "time": 5.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ItemKitPipeRadiator": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Gold": 3.0, - "Steel": 2.0 - } - }, - "ItemKitPipeRadiatorLiquid": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Gold": 3.0, - "Steel": 2.0 - } - }, - "ItemKitPipeUtility": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemKitPipeUtilityLiquid": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemKitPlanter": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 10.0 - } - }, - "ItemKitPortablesConnector": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemKitPoweredVent": { - "tier": "TierTwo", - "time": 20.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Electrum": 5.0, - "Invar": 2.0, - "Steel": 5.0 - } - }, - "ItemKitRegulator": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 1.0, - "Iron": 5.0 - } - }, - "ItemKitShower": { + { + "target_prefab": "ItemKitShower", + "target_prefab_hash": 735858725, "tier": "TierOne", "time": 30.0, "energy": 3000.0, @@ -37221,34 +40967,9 @@ export default { "Silicon": 5.0 } }, - "ItemKitSleeper": { - "tier": "TierOne", - "time": 60.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 10.0, - "Gold": 10.0, - "Steel": 25.0 - } - }, - "ItemKitSmallDirectHeatExchanger": { + { + "target_prefab": "ApplianceSeedTray", + "target_prefab_hash": 142831994, "tier": "TierOne", "time": 10.0, "energy": 500.0, @@ -37268,861 +40989,14 @@ export default { "is_any_to_remove": false, "reagents": {} }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Steel": 3.0 - } - }, - "ItemKitStandardChute": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Constantan": 2.0, - "Electrum": 2.0, - "Iron": 3.0 - } - }, - "ItemKitSuitStorage": { - "tier": "TierOne", - "time": 30.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, "count_types": 3, "reagents": { "Copper": 5.0, - "Iron": 15.0, - "Silver": 5.0 - } - }, - "ItemKitTank": { - "tier": "TierOne", - "time": 20.0, - "energy": 2000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Steel": 20.0 - } - }, - "ItemKitTankInsulated": { - "tier": "TierOne", - "time": 30.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Silicon": 30.0, - "Steel": 20.0 - } - }, - "ItemKitTurboVolumePump": { - "tier": "TierTwo", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 4.0, - "Electrum": 5.0, - "Gold": 4.0, - "Steel": 5.0 - } - }, - "ItemKitWaterBottleFiller": { - "tier": "TierOne", - "time": 7.0, - "energy": 620.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Iron": 5.0, - "Silicon": 8.0 - } - }, - "ItemKitWaterPurifier": { - "tier": "TierOne", - "time": 30.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 20.0, - "Gold": 5.0, - "Iron": 10.0 - } - }, - "ItemLiquidCanisterEmpty": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemLiquidCanisterSmart": { - "tier": "TierTwo", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Silicon": 2.0, - "Steel": 15.0 - } - }, - "ItemLiquidDrain": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 5.0 - } - }, - "ItemLiquidPipeAnalyzer": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Electrum": 2.0, - "Gold": 2.0, - "Iron": 2.0 - } - }, - "ItemLiquidPipeHeater": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 3.0, - "Iron": 5.0 - } - }, - "ItemLiquidPipeValve": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 3.0 - } - }, - "ItemLiquidPipeVolumePump": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 2.0, - "Iron": 5.0 - } - }, - "ItemPassiveVent": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ItemPassiveVentInsulated": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Silicon": 5.0, - "Steel": 1.0 - } - }, - "ItemPipeAnalyizer": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Electrum": 2.0, - "Gold": 2.0, - "Iron": 2.0 - } - }, - "ItemPipeCowl": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ItemPipeDigitalValve": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Invar": 3.0, - "Steel": 5.0 - } - }, - "ItemPipeGasMixer": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 2.0, - "Iron": 2.0 - } - }, - "ItemPipeHeater": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 3.0, - "Iron": 5.0 - } - }, - "ItemPipeIgniter": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 2.0, - "Iron": 2.0 - } - }, - "ItemPipeLabel": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemPipeMeter": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 3.0 - } - }, - "ItemPipeValve": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 3.0 - } - }, - "ItemPipeVolumePump": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 2.0, - "Iron": 5.0 - } - }, - "ItemWallCooler": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 1.0, - "Iron": 3.0 - } - }, - "ItemWallHeater": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 1.0, - "Iron": 3.0 - } - }, - "ItemWaterBottle": { - "tier": "TierOne", - "time": 4.0, - "energy": 120.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Iron": 2.0, - "Silicon": 4.0 - } - }, - "ItemWaterPipeDigitalValve": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Invar": 3.0, - "Steel": 5.0 - } - }, - "ItemWaterPipeMeter": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 3.0 - } - }, - "ItemWaterWallCooler": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 1.0, - "Iron": 3.0 + "Iron": 10.0, + "Silicon": 15.0 } } - } + ] }, "memory": { "instructions": { @@ -38648,40 +41522,64 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Plant", - "typ": "Plant" + "slots": { + "0": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 0 + } }, - { - "name": "Plant", - "typ": "Plant" + "1": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 1 + } }, - { - "name": "Plant", - "typ": "Plant" + "2": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 2 + } }, - { - "name": "Plant", - "typ": "Plant" + "3": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 3 + } }, - { - "name": "Plant", - "typ": "Plant" + "4": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 4 + } }, - { - "name": "Plant", - "typ": "Plant" + "5": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 5 + } }, - { - "name": "Plant", - "typ": "Plant" + "6": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 6 + } }, - { - "name": "Plant", - "typ": "Plant" + "7": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 7 + } } - ], + }, "device": { "connection_list": [ { @@ -38722,16 +41620,22 @@ export default { "convection_factor": 0.010000001, "radiation_factor": 0.0005 }, - "slots": [ - { - "name": "Plant", - "typ": "Plant" + "slots": { + "0": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 0 + } }, - { - "name": "Fertiliser", - "typ": "Plant" + "1": { + "Direct": { + "name": "Fertiliser", + "class": "Plant", + "index": 1 + } } - ] + } }, "StructureHydroponicsTrayData": { "templateType": "StructureLogicDevice", @@ -38808,16 +41712,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Plant", - "typ": "Plant" + "slots": { + "0": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 0 + } }, - { - "name": "Fertiliser", - "typ": "Plant" + "1": { + "Direct": { + "name": "Fertiliser", + "class": "Plant", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -38882,12 +41792,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "Ore" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "Ore", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -38944,7 +41857,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -39345,12 +42258,15 @@ export default { "convection_factor": 0.0, "radiation_factor": 0.0 }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } } - ] + } }, "StructureInsulatedTankConnectorLiquid": { "templateType": "StructureSlots", @@ -39367,12 +42283,15 @@ export default { "convection_factor": 0.0, "radiation_factor": 0.0 }, - "slots": [ - { - "name": "Portable Slot", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Portable Slot", + "class": "None", + "index": 0 + } } - ] + } }, "StructureInteriorDoorGlass": { "templateType": "StructureLogicDevice", @@ -39408,7 +42327,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -39455,7 +42374,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -39502,7 +42421,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -39549,7 +42468,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -39638,7 +42557,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -39705,7 +42624,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -39752,7 +42671,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -39799,7 +42718,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -39853,7 +42772,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -39913,7 +42832,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -39976,7 +42895,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -39998,6 +42917,539 @@ export default { "has_reagents": false } }, + "StructureLarreDockAtmos": { + "templateType": "StructureLogicDevice", + "prefab": { + "prefab_name": "StructureLarreDockAtmos", + "prefab_hash": 1978422481, + "desc": "0.Outward\n1.Inward", + "name": "LARrE Dock (Atmos)" + }, + "structure": { + "small_grid": true + }, + "thermal_info": { + "convection_factor": 0.1, + "radiation_factor": 0.1 + }, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Error": "Read", + "Pressure": "Read", + "Temperature": "Read", + "PressureExternal": "ReadWrite", + "PressureInternal": "ReadWrite", + "Activate": "ReadWrite", + "Setting": "ReadWrite", + "RatioOxygen": "Read", + "RatioCarbonDioxide": "Read", + "RatioNitrogen": "Read", + "RatioPollutant": "Read", + "RatioVolatiles": "Read", + "RatioWater": "Read", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "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", + "Index": "Read", + "RatioHydrogen": "Read", + "RatioLiquidHydrogen": "Read", + "RatioPollutedWater": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Outward", + "1": "Inward" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": { + "0": { + "Direct": { + "name": "Filter", + "class": "GasFilter", + "index": 0 + } + } + }, + "device": { + "connection_list": [ + { + "typ": "RoboticArmRail", + "role": "None" + }, + { + "typ": "RoboticArmRail", + "role": "None" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureLarreDockBypass": { + "templateType": "StructureLogicDevice", + "prefab": { + "prefab_name": "StructureLarreDockBypass", + "prefab_hash": 1011275082, + "desc": "", + "name": "LARrE Dock (Bypass)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": {}, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "NameHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": {}, + "device": { + "connection_list": [ + { + "typ": "RoboticArmRail", + "role": "None" + }, + { + "typ": "RoboticArmRail", + "role": "None" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureLarreDockCargo": { + "templateType": "StructureLogicDevice", + "prefab": { + "prefab_name": "StructureLarreDockCargo", + "prefab_hash": -1555459562, + "desc": "", + "name": "LARrE Dock (Cargo)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {} + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "Index": "Read", + "NameHash": "Read", + "TargetSlotIndex": "ReadWrite", + "TargetPrefabHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": { + "0": { + "Direct": { + "name": "Arm Slot", + "class": "None", + "index": 0 + } + }, + "255": { + "Proxy": { + "name": "Target Slot", + "index": 255 + } + } + }, + "device": { + "connection_list": [ + { + "typ": "RoboticArmRail", + "role": "None" + }, + { + "typ": "RoboticArmRail", + "role": "None" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureLarreDockCollector": { + "templateType": "StructureLogicDevice", + "prefab": { + "prefab_name": "StructureLarreDockCollector", + "prefab_hash": -522428667, + "desc": "0.Outward\n1.Inward", + "name": "LARrE Dock (Collector)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {}, + "2": {}, + "3": {}, + "4": {}, + "5": {}, + "6": {}, + "7": {}, + "8": {}, + "9": {}, + "10": {}, + "11": {}, + "12": {}, + "13": {}, + "14": {}, + "15": {}, + "16": {}, + "17": {}, + "18": {}, + "19": {} + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Mode": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "Index": "Read", + "NameHash": "Read" + }, + "modes": { + "0": "Outward", + "1": "Inward" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } + }, + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } + }, + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } + }, + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } + }, + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } + }, + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } + }, + "6": { + "Direct": { + "name": "", + "class": "None", + "index": 6 + } + }, + "7": { + "Direct": { + "name": "", + "class": "None", + "index": 7 + } + }, + "8": { + "Direct": { + "name": "", + "class": "None", + "index": 8 + } + }, + "9": { + "Direct": { + "name": "", + "class": "None", + "index": 9 + } + }, + "10": { + "Direct": { + "name": "", + "class": "None", + "index": 10 + } + }, + "11": { + "Direct": { + "name": "", + "class": "None", + "index": 11 + } + }, + "12": { + "Direct": { + "name": "", + "class": "None", + "index": 12 + } + }, + "13": { + "Direct": { + "name": "", + "class": "None", + "index": 13 + } + }, + "14": { + "Direct": { + "name": "", + "class": "None", + "index": 14 + } + }, + "15": { + "Direct": { + "name": "", + "class": "None", + "index": 15 + } + }, + "16": { + "Direct": { + "name": "", + "class": "None", + "index": 16 + } + }, + "17": { + "Direct": { + "name": "", + "class": "None", + "index": 17 + } + }, + "18": { + "Direct": { + "name": "", + "class": "None", + "index": 18 + } + }, + "19": { + "Direct": { + "name": "", + "class": "None", + "index": 19 + } + } + }, + "device": { + "connection_list": [ + { + "typ": "RoboticArmRail", + "role": "None" + }, + { + "typ": "RoboticArmRail", + "role": "None" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, + "StructureLarreDockHydroponics": { + "templateType": "StructureLogicDevice", + "prefab": { + "prefab_name": "StructureLarreDockHydroponics", + "prefab_hash": 85133079, + "desc": "", + "name": "LARrE Dock (Hydroponics)" + }, + "structure": { + "small_grid": true + }, + "logic": { + "logic_slot_types": { + "0": {}, + "1": {} + }, + "logic_types": { + "Power": "Read", + "Open": "ReadWrite", + "Error": "Read", + "Activate": "ReadWrite", + "Setting": "ReadWrite", + "On": "ReadWrite", + "RequiredPower": "Read", + "Idle": "Read", + "PrefabHash": "Read", + "ReferenceId": "Read", + "Index": "Read", + "NameHash": "Read", + "TargetSlotIndex": "Read", + "TargetPrefabHash": "Read" + }, + "transmission_receiver": false, + "wireless_logic": false, + "circuit_holder": false + }, + "slots": { + "0": { + "Direct": { + "name": "Arm Slot", + "class": "None", + "index": 0 + } + }, + "1": { + "Direct": { + "name": "Arm Slot", + "class": "None", + "index": 1 + } + }, + "255": { + "Proxy": { + "name": "Target Slot", + "index": 255 + } + } + }, + "device": { + "connection_list": [ + { + "typ": "RoboticArmRail", + "role": "None" + }, + { + "typ": "RoboticArmRail", + "role": "None" + }, + { + "typ": "PowerAndData", + "role": "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 + } + }, "StructureLaunchMount": { "templateType": "Structure", "prefab": { @@ -40036,7 +43488,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -40080,7 +43532,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -40124,7 +43576,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -40168,7 +43620,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -40212,7 +43664,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -40256,7 +43708,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -40304,7 +43756,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -40380,7 +43832,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -40425,7 +43877,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -40473,7 +43925,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -40516,7 +43968,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -40594,7 +44046,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -40668,7 +44120,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -40742,7 +44194,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -40816,7 +44268,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -40886,12 +44338,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Liquid Canister", - "typ": "LiquidCanister" + "slots": { + "0": { + "Direct": { + "name": "Liquid Canister", + "class": "LiquidCanister", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -40948,7 +44403,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -41003,7 +44458,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -41046,7 +44501,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -41101,7 +44556,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -41149,7 +44604,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -41201,7 +44656,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -41296,24 +44751,36 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -41353,7 +44820,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -41406,7 +44873,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -41459,7 +44926,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -41510,7 +44977,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -41566,7 +45033,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -41621,7 +45088,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -41675,7 +45142,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -41728,7 +45195,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -41788,7 +45255,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -41863,7 +45330,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -41912,7 +45379,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -41966,7 +45433,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -42014,7 +45481,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -42067,7 +45534,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -42120,7 +45587,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -42170,7 +45637,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -42214,7 +45681,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -42270,7 +45737,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -42327,7 +45794,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -42434,24 +45901,36 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } }, - { - "name": "Export 2", - "typ": "None" + "2": { + "Direct": { + "name": "Export 2", + "class": "None", + "index": 2 + } }, - { - "name": "Data Disk", - "typ": "DataDisk" + "3": { + "Direct": { + "name": "Data Disk", + "class": "DataDisk", + "index": 3 + } } - ], + }, "device": { "connection_list": [ { @@ -42764,7 +46243,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -42811,7 +46290,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -42855,7 +46334,7 @@ export default { "wireless_logic": true, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -42912,7 +46391,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -42966,7 +46445,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -43026,7 +46505,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -43068,7 +46547,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -43119,7 +46598,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -43175,7 +46654,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -43226,7 +46705,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -43277,7 +46756,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -43351,7 +46830,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -43425,7 +46904,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -43472,7 +46951,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -43617,12 +47096,15 @@ export default { "wireless_logic": false, "circuit_holder": true }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" + "slots": { + "0": { + "Direct": { + "name": "Programmable Chip", + "class": "ProgrammableChip", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -43681,7 +47163,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -43746,16 +47228,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -43903,48 +47391,78 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } }, - { - "name": "", - "typ": "None" + "6": { + "Direct": { + "name": "", + "class": "None", + "index": 6 + } }, - { - "name": "", - "typ": "None" + "7": { + "Direct": { + "name": "", + "class": "None", + "index": 7 + } }, - { - "name": "", - "typ": "None" + "8": { + "Direct": { + "name": "", + "class": "None", + "index": 8 + } }, - { - "name": "", - "typ": "None" + "9": { + "Direct": { + "name": "", + "class": "None", + "index": 9 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -43986,7 +47504,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -44037,7 +47555,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -44081,7 +47599,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -44151,7 +47669,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -44206,7 +47724,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -44261,7 +47779,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -44533,7 +48051,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -44690,7 +48208,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -44738,7 +48256,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -44794,7 +48312,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -44929,7 +48447,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -45005,7 +48523,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -45044,7 +48562,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -45108,7 +48626,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -45147,7 +48665,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -45186,7 +48704,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -45246,16 +48764,22 @@ export default { "convection_factor": 0.010000001, "radiation_factor": 0.0005 }, - "slots": [ - { - "name": "Plant", - "typ": "Plant" + "slots": { + "0": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 0 + } }, - { - "name": "Plant", - "typ": "Plant" + "1": { + "Direct": { + "name": "Plant", + "class": "Plant", + "index": 1 + } } - ] + } }, "StructurePlatformLadderOpen": { "templateType": "Structure", @@ -45280,12 +48804,15 @@ export default { "structure": { "small_grid": true }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } } - ] + } }, "StructurePortablesConnector": { "templateType": "StructureLogicDevice", @@ -45325,12 +48852,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Portables", - "typ": "Portables" + "slots": { + "0": { + "Direct": { + "name": "Portables", + "class": "Portables", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -45387,12 +48917,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Portable Slot", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Portable Slot", + "class": "None", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -45449,7 +48982,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -45497,7 +49030,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -45558,7 +49091,7 @@ export default { "wireless_logic": true, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -45602,7 +49135,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -45642,7 +49175,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -45694,7 +49227,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -45749,7 +49282,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -45808,7 +49341,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -45864,7 +49397,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -45939,7 +49472,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -46017,7 +49550,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -46066,7 +49599,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -46111,7 +49644,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -46156,7 +49689,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -46208,7 +49741,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -46259,7 +49792,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -46329,7 +49862,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -46385,7 +49918,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -46477,16 +50010,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -46679,416 +50218,722 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "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" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } + }, + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } + }, + "2": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 2 + } + }, + "3": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 3 + } + }, + "4": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 4 + } + }, + "5": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 5 + } + }, + "6": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 6 + } + }, + "7": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 7 + } + }, + "8": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 8 + } + }, + "9": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 9 + } + }, + "10": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 10 + } + }, + "11": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 11 + } + }, + "12": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 12 + } + }, + "13": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 13 + } + }, + "14": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 14 + } + }, + "15": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 15 + } + }, + "16": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 16 + } + }, + "17": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 17 + } + }, + "18": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 18 + } + }, + "19": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 19 + } + }, + "20": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 20 + } + }, + "21": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 21 + } + }, + "22": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 22 + } + }, + "23": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 23 + } + }, + "24": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 24 + } + }, + "25": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 25 + } + }, + "26": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 26 + } + }, + "27": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 27 + } + }, + "28": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 28 + } + }, + "29": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 29 + } + }, + "30": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 30 + } + }, + "31": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 31 + } + }, + "32": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 32 + } + }, + "33": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 33 + } + }, + "34": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 34 + } + }, + "35": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 35 + } + }, + "36": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 36 + } + }, + "37": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 37 + } + }, + "38": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 38 + } + }, + "39": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 39 + } + }, + "40": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 40 + } + }, + "41": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 41 + } + }, + "42": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 42 + } + }, + "43": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 43 + } + }, + "44": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 44 + } + }, + "45": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 45 + } + }, + "46": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 46 + } + }, + "47": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 47 + } + }, + "48": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 48 + } + }, + "49": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 49 + } + }, + "50": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 50 + } + }, + "51": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 51 + } + }, + "52": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 52 + } + }, + "53": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 53 + } + }, + "54": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 54 + } + }, + "55": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 55 + } + }, + "56": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 56 + } + }, + "57": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 57 + } + }, + "58": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 58 + } + }, + "59": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 59 + } + }, + "60": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 60 + } + }, + "61": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 61 + } + }, + "62": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 62 + } + }, + "63": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 63 + } + }, + "64": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 64 + } + }, + "65": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 65 + } + }, + "66": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 66 + } + }, + "67": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 67 + } + }, + "68": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 68 + } + }, + "69": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 69 + } + }, + "70": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 70 + } + }, + "71": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 71 + } + }, + "72": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 72 + } + }, + "73": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 73 + } + }, + "74": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 74 + } + }, + "75": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 75 + } + }, + "76": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 76 + } + }, + "77": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 77 + } + }, + "78": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 78 + } + }, + "79": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 79 + } + }, + "80": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 80 + } + }, + "81": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 81 + } + }, + "82": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 82 + } + }, + "83": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 83 + } + }, + "84": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 84 + } + }, + "85": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 85 + } + }, + "86": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 86 + } + }, + "87": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 87 + } + }, + "88": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 88 + } + }, + "89": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 89 + } + }, + "90": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 90 + } + }, + "91": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 91 + } + }, + "92": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 92 + } + }, + "93": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 93 + } + }, + "94": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 94 + } + }, + "95": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 95 + } + }, + "96": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 96 + } + }, + "97": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 97 + } + }, + "98": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 98 + } + }, + "99": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 99 + } + }, + "100": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 100 + } + }, + "101": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 101 + } } - ], + }, "device": { "connection_list": [ { @@ -47203,7 +51048,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -47267,12 +51112,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Arm Slot", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Arm Slot", + "class": "None", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -47455,7 +51303,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -47503,7 +51351,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -47622,12 +51470,15 @@ export default { "wireless_logic": false, "circuit_holder": true }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" + "slots": { + "0": { + "Direct": { + "name": "Programmable Chip", + "class": "ProgrammableChip", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -47701,7 +51552,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -47761,16 +51612,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "Ingot" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "Ingot", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -47825,8 +51682,459 @@ export default { }, "fabricator_info": { "tier": "Undefined", - "recipes": { - "ItemKitAccessBridge": { + "recipes": [ + { + "target_prefab": "ItemKitFuselage", + "target_prefab_hash": -366262681, + "tier": "TierOne", + "time": 120.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 20.0 + } + }, + { + "target_prefab": "ItemKitLaunchTower", + "target_prefab_hash": -174523552, + "tier": "TierOne", + "time": 30.0, + "energy": 30000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemKitLaunchMount", + "target_prefab_hash": -1854167549, + "tier": "TierOne", + "time": 240.0, + "energy": 120000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 60.0 + } + }, + { + "target_prefab": "ItemKitChuteUmbilical", + "target_prefab_hash": -876560854, + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 3.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemKitElectricUmbilical", + "target_prefab_hash": 1603046970, + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 5.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemKitLiquidUmbilical", + "target_prefab_hash": 1571996765, + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemKitGasUmbilical", + "target_prefab_hash": -1867280568, + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemKitRocketBattery", + "target_prefab_hash": -314072139, + "tier": "TierOne", + "time": 10.0, + "energy": 10000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 5.0, + "Solder": 5.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemKitRocketGasFuelTank", + "target_prefab_hash": -1629347579, + "tier": "TierOne", + "time": 10.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemKitRocketLiquidFuelTank", + "target_prefab_hash": 2032027950, + "tier": "TierOne", + "time": 10.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Steel": 20.0 + } + }, + { + "target_prefab": "ItemKitRocketAvionics", + "target_prefab_hash": 1396305045, + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 2.0, + "Solder": 3.0 + } + }, + { + "target_prefab": "ItemKitRocketDatalink", + "target_prefab_hash": -1256996603, + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 2.0, + "Solder": 3.0 + } + }, + { + "target_prefab": "ItemKitRocketCelestialTracker", + "target_prefab_hash": -303008602, + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 5.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemKitRocketCircuitHousing", + "target_prefab_hash": 721251202, + "tier": "TierOne", + "time": 5.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 2.0, + "Solder": 3.0 + } + }, + { + "target_prefab": "ItemKitRocketCargoStorage", + "target_prefab_hash": 479850239, + "tier": "TierOne", + "time": 30.0, + "energy": 30000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Constantan": 10.0, + "Invar": 5.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemKitRocketMiner", + "target_prefab_hash": -867969909, + "tier": "TierOne", + "time": 60.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Constantan": 10.0, + "Electrum": 5.0, + "Invar": 5.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemKitAccessBridge", + "target_prefab_hash": 513258369, "tier": "TierOne", "time": 30.0, "energy": 9000.0, @@ -47853,10 +52161,67 @@ export default { "Steel": 10.0 } }, - "ItemKitChuteUmbilical": { + { + "target_prefab": "ItemKitStairwell", + "target_prefab_hash": -1868555784, "tier": "TierOne", - "time": 5.0, - "energy": 2500.0, + "time": 20.0, + "energy": 6000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 15.0 + } + }, + { + "target_prefab": "ItemKitRocketScanner", + "target_prefab_hash": 1753647154, + "tier": "TierOne", + "time": 60.0, + "energy": 60000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 10.0, + "Gold": 10.0 + } + }, + { + "target_prefab": "ItemRocketScanningHead", + "target_prefab_hash": -1198702771, + "tier": "TierOne", + "time": 60.0, + "energy": 60000.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -47876,39 +52241,15 @@ export default { "count_types": 2, "reagents": { "Copper": 3.0, - "Steel": 10.0 + "Gold": 2.0 } }, - "ItemKitElectricUmbilical": { + { + "target_prefab": "ItemRocketMiningDrillHead", + "target_prefab_hash": 2109945337, "tier": "TierOne", - "time": 5.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Gold": 5.0, - "Steel": 5.0 - } - }, - "ItemKitFuselage": { - "tier": "TierOne", - "time": 120.0, - "energy": 60000.0, + "time": 30.0, + "energy": 5000.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -47927,13 +52268,15 @@ export default { }, "count_types": 1, "reagents": { - "Steel": 20.0 + "Iron": 20.0 } }, - "ItemKitGasUmbilical": { + { + "target_prefab": "ItemRocketMiningDrillHeadMineral", + "target_prefab_hash": 1083675581, "tier": "TierOne", - "time": 5.0, - "energy": 2500.0, + "time": 30.0, + "energy": 5000.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -47952,11 +52295,153 @@ export default { }, "count_types": 2, "reagents": { - "Copper": 5.0, - "Steel": 5.0 + "Iron": 10.0, + "Steel": 10.0 } }, - "ItemKitGovernedGasRocketEngine": { + { + "target_prefab": "ItemRocketMiningDrillHeadIce", + "target_prefab_hash": -380904592, + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 10.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemRocketMiningDrillHeadDurable", + "target_prefab_hash": 1530764483, + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 10.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemRocketMiningDrillHeadLongTerm", + "target_prefab_hash": -684020753, + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 5.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemRocketMiningDrillHeadHighSpeedIce", + "target_prefab_hash": 653461728, + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 5.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemRocketMiningDrillHeadHighSpeedMineral", + "target_prefab_hash": 1440678625, + "tier": "TierOne", + "time": 30.0, + "energy": 5000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 5.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemKitGovernedGasRocketEngine", + "target_prefab_hash": 206848766, "tier": "TierOne", "time": 60.0, "energy": 60000.0, @@ -47983,83 +52468,9 @@ export default { "Iron": 15.0 } }, - "ItemKitLaunchMount": { - "tier": "TierOne", - "time": 240.0, - "energy": 120000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 60.0 - } - }, - "ItemKitLaunchTower": { - "tier": "TierOne", - "time": 30.0, - "energy": 30000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 10.0 - } - }, - "ItemKitLiquidUmbilical": { - "tier": "TierOne", - "time": 5.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Steel": 5.0 - } - }, - "ItemKitPressureFedGasEngine": { + { + "target_prefab": "ItemKitPressureFedGasEngine", + "target_prefab_hash": -121514007, "tier": "TierOne", "time": 60.0, "energy": 60000.0, @@ -48087,7 +52498,9 @@ export default { "Steel": 20.0 } }, - "ItemKitPressureFedLiquidEngine": { + { + "target_prefab": "ItemKitPressureFedLiquidEngine", + "target_prefab_hash": -99091572, "tier": "TierOne", "time": 60.0, "energy": 60000.0, @@ -48114,7 +52527,9 @@ export default { "Waspaloy": 15.0 } }, - "ItemKitPumpedLiquidEngine": { + { + "target_prefab": "ItemKitPumpedLiquidEngine", + "target_prefab_hash": 1921918951, "tier": "TierOne", "time": 60.0, "energy": 60000.0, @@ -48141,271 +52556,9 @@ export default { "Steel": 15.0 } }, - "ItemKitRocketAvionics": { - "tier": "TierOne", - "time": 5.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 2.0, - "Solder": 3.0 - } - }, - "ItemKitRocketBattery": { - "tier": "TierOne", - "time": 10.0, - "energy": 10000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Electrum": 5.0, - "Solder": 5.0, - "Steel": 10.0 - } - }, - "ItemKitRocketCargoStorage": { - "tier": "TierOne", - "time": 30.0, - "energy": 30000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Constantan": 10.0, - "Invar": 5.0, - "Steel": 10.0 - } - }, - "ItemKitRocketCelestialTracker": { - "tier": "TierOne", - "time": 5.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 5.0, - "Steel": 5.0 - } - }, - "ItemKitRocketCircuitHousing": { - "tier": "TierOne", - "time": 5.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 2.0, - "Solder": 3.0 - } - }, - "ItemKitRocketDatalink": { - "tier": "TierOne", - "time": 5.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 2.0, - "Solder": 3.0 - } - }, - "ItemKitRocketGasFuelTank": { - "tier": "TierOne", - "time": 10.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Steel": 10.0 - } - }, - "ItemKitRocketLiquidFuelTank": { - "tier": "TierOne", - "time": 10.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Steel": 20.0 - } - }, - "ItemKitRocketMiner": { - "tier": "TierOne", - "time": 60.0, - "energy": 60000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Constantan": 10.0, - "Electrum": 5.0, - "Invar": 5.0, - "Steel": 10.0 - } - }, - "ItemKitRocketScanner": { - "tier": "TierOne", - "time": 60.0, - "energy": 60000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 10.0, - "Gold": 10.0 - } - }, - "ItemKitRocketTransformerSmall": { + { + "target_prefab": "ItemKitRocketTransformerSmall", + "target_prefab_hash": -932335800, "tier": "TierOne", "time": 60.0, "energy": 12000.0, @@ -48430,240 +52583,8 @@ export default { "Electrum": 5.0, "Steel": 10.0 } - }, - "ItemKitStairwell": { - "tier": "TierOne", - "time": 20.0, - "energy": 6000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 15.0 - } - }, - "ItemRocketMiningDrillHead": { - "tier": "TierOne", - "time": 30.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 20.0 - } - }, - "ItemRocketMiningDrillHeadDurable": { - "tier": "TierOne", - "time": 30.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Iron": 10.0, - "Steel": 10.0 - } - }, - "ItemRocketMiningDrillHeadHighSpeedIce": { - "tier": "TierOne", - "time": 30.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Invar": 5.0, - "Steel": 10.0 - } - }, - "ItemRocketMiningDrillHeadHighSpeedMineral": { - "tier": "TierOne", - "time": 30.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Invar": 5.0, - "Steel": 10.0 - } - }, - "ItemRocketMiningDrillHeadIce": { - "tier": "TierOne", - "time": 30.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Iron": 10.0, - "Steel": 10.0 - } - }, - "ItemRocketMiningDrillHeadLongTerm": { - "tier": "TierOne", - "time": 30.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Invar": 5.0, - "Steel": 10.0 - } - }, - "ItemRocketMiningDrillHeadMineral": { - "tier": "TierOne", - "time": 30.0, - "energy": 5000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Iron": 10.0, - "Steel": 10.0 - } - }, - "ItemRocketScanningHead": { - "tier": "TierOne", - "time": 60.0, - "energy": 60000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 3.0, - "Gold": 2.0 - } } - } + ] }, "memory": { "instructions": { @@ -49049,16 +52970,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Export", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Export", + "class": "None", + "index": 0 + } }, - { - "name": "Drill Head Slot", - "typ": "DrillHead" + "1": { + "Direct": { + "name": "Drill Head Slot", + "class": "DrillHead", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -49109,12 +53036,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Scanner Head Slot", - "typ": "ScanningHead" + "slots": { + "0": { + "Direct": { + "name": "Scanner Head Slot", + "class": "ScanningHead", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -49174,7 +53104,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -49239,12 +53169,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -49294,12 +53227,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -49366,16 +53302,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -49446,7 +53388,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -49506,16 +53448,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "Ingot" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "Ingot", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -49570,332 +53518,10 @@ export default { }, "fabricator_info": { "tier": "Undefined", - "recipes": { - "AccessCardBlack": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardBlue": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardBrown": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardGray": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardGreen": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardKhaki": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardOrange": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardPink": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardPurple": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardRed": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardWhite": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "AccessCardYellow": { - "tier": "TierOne", - "time": 2.0, - "energy": 200.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 1.0, - "Gold": 1.0, - "Iron": 1.0 - } - }, - "CartridgeAccessController": { + "recipes": [ + { + "target_prefab": "CartridgeAccessController", + "target_prefab_hash": -1634532552, "tier": "TierOne", "time": 5.0, "energy": 100.0, @@ -49922,7 +53548,357 @@ export default { "Iron": 1.0 } }, - "FireArmSMG": { + { + "target_prefab": "AccessCardBlack", + "target_prefab_hash": -1330388999, + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + { + "target_prefab": "AccessCardBlue", + "target_prefab_hash": -1411327657, + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + { + "target_prefab": "AccessCardBrown", + "target_prefab_hash": 1412428165, + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + { + "target_prefab": "AccessCardGray", + "target_prefab_hash": -1339479035, + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + { + "target_prefab": "AccessCardGreen", + "target_prefab_hash": -374567952, + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + { + "target_prefab": "AccessCardKhaki", + "target_prefab_hash": 337035771, + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + { + "target_prefab": "AccessCardOrange", + "target_prefab_hash": -332896929, + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + { + "target_prefab": "AccessCardPink", + "target_prefab_hash": 431317557, + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + { + "target_prefab": "AccessCardPurple", + "target_prefab_hash": 459843265, + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + { + "target_prefab": "AccessCardRed", + "target_prefab_hash": -1713748313, + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + { + "target_prefab": "AccessCardWhite", + "target_prefab_hash": 2079959157, + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + { + "target_prefab": "AccessCardYellow", + "target_prefab_hash": 568932536, + "tier": "TierOne", + "time": 2.0, + "energy": 200.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 1.0, + "Gold": 1.0, + "Iron": 1.0 + } + }, + { + "target_prefab": "Handgun", + "target_prefab_hash": 247238062, "tier": "TierOne", "time": 120.0, "energy": 3000.0, @@ -49948,33 +53924,9 @@ export default { "Steel": 30.0 } }, - "Handgun": { - "tier": "TierOne", - "time": 120.0, - "energy": 3000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Nickel": 10.0, - "Steel": 30.0 - } - }, - "HandgunMagazine": { + { + "target_prefab": "HandgunMagazine", + "target_prefab_hash": 1254383185, "tier": "TierOne", "time": 60.0, "energy": 500.0, @@ -50001,7 +53953,9 @@ export default { "Steel": 3.0 } }, - "ItemAmmoBox": { + { + "target_prefab": "ItemAmmoBox", + "target_prefab_hash": -9559091, "tier": "TierOne", "time": 120.0, "energy": 3000.0, @@ -50028,34 +53982,9 @@ export default { "Steel": 30.0 } }, - "ItemExplosive": { - "tier": "TierTwo", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Electrum": 1.0, - "Silicon": 3.0, - "Solder": 1.0 - } - }, - "ItemGrenade": { + { + "target_prefab": "ItemGrenade", + "target_prefab_hash": 1544275894, "tier": "TierOne", "time": 90.0, "energy": 2900.0, @@ -50083,7 +54012,38 @@ export default { "Steel": 25.0 } }, - "ItemMiningCharge": { + { + "target_prefab": "ItemExplosive", + "target_prefab_hash": 235361649, + "tier": "TierTwo", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 1.0, + "Silicon": 3.0, + "Solder": 1.0 + } + }, + { + "target_prefab": "ItemMiningCharge", + "target_prefab_hash": 15829510, "tier": "TierOne", "time": 5.0, "energy": 200.0, @@ -50110,34 +54070,9 @@ export default { "Silicon": 3.0 } }, - "SMGMagazine": { - "tier": "TierOne", - "time": 60.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Lead": 1.0, - "Steel": 3.0 - } - }, - "WeaponPistolEnergy": { + { + "target_prefab": "WeaponPistolEnergy", + "target_prefab_hash": -385323479, "tier": "TierTwo", "time": 120.0, "energy": 3000.0, @@ -50165,7 +54100,9 @@ export default { "Steel": 10.0 } }, - "WeaponRifleEnergy": { + { + "target_prefab": "WeaponRifleEnergy", + "target_prefab_hash": 1154745374, "tier": "TierTwo", "time": 240.0, "energy": 10000.0, @@ -50194,8 +54131,65 @@ export default { "Solder": 10.0, "Steel": 20.0 } + }, + { + "target_prefab": "FireArmSMG", + "target_prefab_hash": -86315541, + "tier": "TierOne", + "time": 120.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Nickel": 10.0, + "Steel": 30.0 + } + }, + { + "target_prefab": "SMGMagazine", + "target_prefab_hash": -256607540, + "tier": "TierOne", + "time": 60.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Lead": 1.0, + "Steel": 3.0 + } } - } + ] }, "memory": { "instructions": { @@ -50557,28 +54551,43 @@ export default { "structure": { "small_grid": true }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } } - ] + } }, "StructureShelfMedium": { "templateType": "StructureLogicDevice", @@ -50769,68 +54778,113 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } }, - { - "name": "", - "typ": "None" + "6": { + "Direct": { + "name": "", + "class": "None", + "index": 6 + } }, - { - "name": "", - "typ": "None" + "7": { + "Direct": { + "name": "", + "class": "None", + "index": 7 + } }, - { - "name": "", - "typ": "None" + "8": { + "Direct": { + "name": "", + "class": "None", + "index": 8 + } }, - { - "name": "", - "typ": "None" + "9": { + "Direct": { + "name": "", + "class": "None", + "index": 9 + } }, - { - "name": "", - "typ": "None" + "10": { + "Direct": { + "name": "", + "class": "None", + "index": 10 + } }, - { - "name": "", - "typ": "None" + "11": { + "Direct": { + "name": "", + "class": "None", + "index": 11 + } }, - { - "name": "", - "typ": "None" + "12": { + "Direct": { + "name": "", + "class": "None", + "index": 12 + } }, - { - "name": "", - "typ": "None" + "13": { + "Direct": { + "name": "", + "class": "None", + "index": 13 + } }, - { - "name": "", - "typ": "None" + "14": { + "Direct": { + "name": "", + "class": "None", + "index": 14 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -50890,16 +54944,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -51047,48 +55107,78 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } }, - { - "name": "", - "typ": "None" + "6": { + "Direct": { + "name": "", + "class": "None", + "index": 6 + } }, - { - "name": "", - "typ": "None" + "7": { + "Direct": { + "name": "", + "class": "None", + "index": 7 + } }, - { - "name": "", - "typ": "None" + "8": { + "Direct": { + "name": "", + "class": "None", + "index": 8 + } }, - { - "name": "", - "typ": "None" + "9": { + "Direct": { + "name": "", + "class": "None", + "index": 9 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -51128,7 +55218,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -51177,7 +55267,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -51229,7 +55319,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -51264,7 +55354,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -51311,12 +55401,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Bed", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Bed", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -51378,12 +55471,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Bed", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Bed", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -51454,12 +55550,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Player", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Player", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -51530,12 +55629,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Player", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Player", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -51606,12 +55708,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Player", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Player", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -51668,12 +55773,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Player", - "typ": "Entity" + "slots": { + "0": { + "Direct": { + "name": "Player", + "class": "Entity", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -51720,7 +55828,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -51767,7 +55875,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -51814,7 +55922,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -51877,7 +55985,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -52010,7 +56118,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -52055,7 +56163,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -52100,7 +56208,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -52145,7 +56253,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -52194,7 +56302,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -52243,7 +56351,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -52288,7 +56396,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -52333,7 +56441,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -52394,12 +56502,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Input", - "typ": "Ore" + "slots": { + "0": { + "Direct": { + "name": "Input", + "class": "Ore", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -52515,24 +56626,36 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } }, - { - "name": "Export 2", - "typ": "None" + "2": { + "Direct": { + "name": "Export 2", + "class": "None", + "index": 2 + } }, - { - "name": "Data Disk", - "typ": "DataDisk" + "3": { + "Direct": { + "name": "Data Disk", + "class": "DataDisk", + "index": 3 + } } - ], + }, "device": { "connection_list": [ { @@ -52634,20 +56757,29 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } }, - { - "name": "Processing", - "typ": "None" + "2": { + "Direct": { + "name": "Processing", + "class": "None", + "index": 2 + } } - ], + }, "device": { "connection_list": [ { @@ -52745,20 +56877,29 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } }, - { - "name": "Export", - "typ": "None" + "2": { + "Direct": { + "name": "Export", + "class": "None", + "index": 2 + } } - ], + }, "device": { "connection_list": [ { @@ -52977,12 +57118,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Gas Canister", - "typ": "GasCanister" + "slots": { + "0": { + "Direct": { + "name": "Gas Canister", + "class": "GasCanister", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -53367,128 +57511,218 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "", - "typ": "None" + "2": { + "Direct": { + "name": "", + "class": "None", + "index": 2 + } }, - { - "name": "", - "typ": "None" + "3": { + "Direct": { + "name": "", + "class": "None", + "index": 3 + } }, - { - "name": "", - "typ": "None" + "4": { + "Direct": { + "name": "", + "class": "None", + "index": 4 + } }, - { - "name": "", - "typ": "None" + "5": { + "Direct": { + "name": "", + "class": "None", + "index": 5 + } }, - { - "name": "", - "typ": "None" + "6": { + "Direct": { + "name": "", + "class": "None", + "index": 6 + } }, - { - "name": "", - "typ": "None" + "7": { + "Direct": { + "name": "", + "class": "None", + "index": 7 + } }, - { - "name": "", - "typ": "None" + "8": { + "Direct": { + "name": "", + "class": "None", + "index": 8 + } }, - { - "name": "", - "typ": "None" + "9": { + "Direct": { + "name": "", + "class": "None", + "index": 9 + } }, - { - "name": "", - "typ": "None" + "10": { + "Direct": { + "name": "", + "class": "None", + "index": 10 + } }, - { - "name": "", - "typ": "None" + "11": { + "Direct": { + "name": "", + "class": "None", + "index": 11 + } }, - { - "name": "", - "typ": "None" + "12": { + "Direct": { + "name": "", + "class": "None", + "index": 12 + } }, - { - "name": "", - "typ": "None" + "13": { + "Direct": { + "name": "", + "class": "None", + "index": 13 + } }, - { - "name": "", - "typ": "None" + "14": { + "Direct": { + "name": "", + "class": "None", + "index": 14 + } }, - { - "name": "", - "typ": "None" + "15": { + "Direct": { + "name": "", + "class": "None", + "index": 15 + } }, - { - "name": "", - "typ": "None" + "16": { + "Direct": { + "name": "", + "class": "None", + "index": 16 + } }, - { - "name": "", - "typ": "None" + "17": { + "Direct": { + "name": "", + "class": "None", + "index": 17 + } }, - { - "name": "", - "typ": "None" + "18": { + "Direct": { + "name": "", + "class": "None", + "index": 18 + } }, - { - "name": "", - "typ": "None" + "19": { + "Direct": { + "name": "", + "class": "None", + "index": 19 + } }, - { - "name": "", - "typ": "None" + "20": { + "Direct": { + "name": "", + "class": "None", + "index": 20 + } }, - { - "name": "", - "typ": "None" + "21": { + "Direct": { + "name": "", + "class": "None", + "index": 21 + } }, - { - "name": "", - "typ": "None" + "22": { + "Direct": { + "name": "", + "class": "None", + "index": 22 + } }, - { - "name": "", - "typ": "None" + "23": { + "Direct": { + "name": "", + "class": "None", + "index": 23 + } }, - { - "name": "", - "typ": "None" + "24": { + "Direct": { + "name": "", + "class": "None", + "index": 24 + } }, - { - "name": "", - "typ": "None" + "25": { + "Direct": { + "name": "", + "class": "None", + "index": 25 + } }, - { - "name": "", - "typ": "None" + "26": { + "Direct": { + "name": "", + "class": "None", + "index": 26 + } }, - { - "name": "", - "typ": "None" + "27": { + "Direct": { + "name": "", + "class": "None", + "index": 27 + } }, - { - "name": "", - "typ": "None" + "28": { + "Direct": { + "name": "", + "class": "None", + "index": 28 + } }, - { - "name": "", - "typ": "None" + "29": { + "Direct": { + "name": "", + "class": "None", + "index": 29 + } } - ], + }, "device": { "connection_list": [], "has_activate_state": false, @@ -53578,20 +57812,29 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Helmet", - "typ": "Helmet" + "slots": { + "0": { + "Direct": { + "name": "Helmet", + "class": "Helmet", + "index": 0 + } }, - { - "name": "Suit", - "typ": "Suit" + "1": { + "Direct": { + "name": "Suit", + "class": "Suit", + "index": 1 + } }, - { - "name": "Back", - "typ": "Back" + "2": { + "Direct": { + "name": "Back", + "class": "Back", + "index": 2 + } } - ], + }, "device": { "connection_list": [ { @@ -53678,7 +57921,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -53753,7 +57996,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -53790,12 +58033,15 @@ export default { "convection_factor": 0.010000001, "radiation_factor": 0.0005 }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } } - ] + } }, "StructureTankConnectorLiquid": { "templateType": "StructureSlots", @@ -53812,12 +58058,15 @@ export default { "convection_factor": 0.010000001, "radiation_factor": 0.0005 }, - "slots": [ - { - "name": "Portable Slot", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Portable Slot", + "class": "None", + "index": 0 + } } - ] + } }, "StructureTankSmall": { "templateType": "StructureLogicDevice", @@ -53872,7 +58121,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -53947,7 +58196,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -54022,7 +58271,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -54097,7 +58346,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -54157,16 +58406,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "Ingot" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "Ingot", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -54221,265 +58476,10 @@ export default { }, "fabricator_info": { "tier": "Undefined", - "recipes": { - "FlareGun": { - "tier": "TierOne", - "time": 10.0, - "energy": 2000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Iron": 10.0, - "Silicon": 10.0 - } - }, - "ItemAngleGrinder": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 1.0, - "Iron": 3.0 - } - }, - "ItemArcWelder": { - "tier": "TierOne", - "time": 30.0, - "energy": 2500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Electrum": 10.0, - "Invar": 5.0, - "Solder": 10.0, - "Steel": 10.0 - } - }, - "ItemBasketBall": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 1.0 - } - }, - "ItemBeacon": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 2.0, - "Gold": 1.0, - "Iron": 2.0 - } - }, - "ItemChemLightBlue": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 1.0 - } - }, - "ItemChemLightGreen": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 1.0 - } - }, - "ItemChemLightRed": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 1.0 - } - }, - "ItemChemLightWhite": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 1.0 - } - }, - "ItemChemLightYellow": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 1.0 - } - }, - "ItemClothingBagOveralls_Aus": { + "recipes": [ + { + "target_prefab": "ItemSprayCanBlack", + "target_prefab_hash": -688107795, "tier": "TierOne", "time": 5.0, "energy": 500.0, @@ -54500,756 +58500,15 @@ export default { "reagents": {} }, "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_Brazil": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_Canada": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_China": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_EU": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_France": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_Germany": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_Japan": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_Korea": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_NZ": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_Russia": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_SouthAfrica": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_UK": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_US": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemClothingBagOveralls_Ukraine": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "ItemCrowbar": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 5.0 - } - }, - "ItemDirtCanister": { - "tier": "TierOne", - "time": 5.0, - "energy": 400.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ItemDisposableBatteryCharger": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Gold": 2.0, - "Iron": 2.0 - } - }, - "ItemDrill": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Iron": 5.0 - } - }, - "ItemDuctTape": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 2.0 - } - }, - "ItemEvaSuit": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 5.0 - } - }, - "ItemExplosive": { - "tier": "TierTwo", - "time": 90.0, - "energy": 9000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Electrum": 1.0, - "Silicon": 7.0, - "Solder": 2.0 - } - }, - "ItemFlagSmall": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, "reagents": { "Iron": 1.0 } }, - "ItemFlashlight": { + { + "target_prefab": "ItemSprayCanBlue", + "target_prefab_hash": -498464883, "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Gold": 2.0 - } - }, - "ItemGlasses": { - "tier": "TierOne", - "time": 20.0, - "energy": 250.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Iron": 15.0, - "Silicon": 10.0 - } - }, - "ItemHardBackpack": { - "tier": "TierTwo", - "time": 30.0, - "energy": 1500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Astroloy": 5.0, - "Steel": 15.0, - "Stellite": 5.0 - } - }, - "ItemHardJetpack": { - "tier": "TierTwo", - "time": 40.0, - "energy": 1750.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Astroloy": 8.0, - "Steel": 20.0, - "Stellite": 8.0, - "Waspaloy": 8.0 - } - }, - "ItemHardMiningBackPack": { - "tier": "TierOne", - "time": 10.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Invar": 1.0, - "Steel": 6.0 - } - }, - "ItemHardSuit": { - "tier": "TierTwo", - "time": 60.0, - "energy": 3000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Astroloy": 10.0, - "Steel": 20.0, - "Stellite": 2.0 - } - }, - "ItemHardsuitHelmet": { - "tier": "TierTwo", - "time": 50.0, - "energy": 1750.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Astroloy": 2.0, - "Steel": 10.0, - "Stellite": 2.0 - } - }, - "ItemIgniter": { - "tier": "TierOne", - "time": 1.0, + "time": 5.0, "energy": 500.0, "temperature": { "start": 1.0, @@ -55269,13 +58528,15 @@ export default { }, "count_types": 1, "reagents": { - "Copper": 3.0 + "Iron": 1.0 } }, - "ItemJetpackBasic": { + { + "target_prefab": "ItemSprayCanBrown", + "target_prefab_hash": 845176977, "tier": "TierOne", - "time": 30.0, - "energy": 1500.0, + "time": 5.0, + "energy": 500.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -55292,16 +58553,259 @@ export default { "is_any_to_remove": false, "reagents": {} }, - "count_types": 3, + "count_types": 1, "reagents": { - "Gold": 2.0, - "Lead": 5.0, - "Steel": 10.0 + "Iron": 1.0 } }, - "ItemKitBasket": { + { + "target_prefab": "ItemSprayCanGreen", + "target_prefab_hash": -1880941852, "tier": "TierOne", - "time": 1.0, + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + { + "target_prefab": "ItemSprayCanGrey", + "target_prefab_hash": -1645266981, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + { + "target_prefab": "ItemSprayCanKhaki", + "target_prefab_hash": 1918456047, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + { + "target_prefab": "ItemSprayCanOrange", + "target_prefab_hash": -158007629, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + { + "target_prefab": "ItemSprayCanPink", + "target_prefab_hash": 1344257263, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + { + "target_prefab": "ItemSprayCanPurple", + "target_prefab_hash": 30686509, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + { + "target_prefab": "ItemSprayCanRed", + "target_prefab_hash": 1514393921, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + { + "target_prefab": "ItemSprayCanWhite", + "target_prefab_hash": 498481505, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + { + "target_prefab": "ItemSprayCanYellow", + "target_prefab_hash": 995468116, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + { + "target_prefab": "ItemMKIICrowbar", + "target_prefab_hash": 1440775434, + "tier": "TierTwo", + "time": 10.0, "energy": 500.0, "temperature": { "start": 1.0, @@ -55321,12 +58825,42 @@ export default { }, "count_types": 2, "reagents": { - "Copper": 2.0, + "Electrum": 5.0, "Iron": 5.0 } }, - "ItemLabeller": { - "tier": "TierOne", + { + "target_prefab": "ItemMKIIWrench", + "target_prefab_hash": 1862001680, + "tier": "TierTwo", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 3.0, + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemMKIIDuctTape", + "target_prefab_hash": 388774906, + "tier": "TierTwo", "time": 5.0, "energy": 500.0, "temperature": { @@ -55347,11 +58881,13 @@ export default { }, "count_types": 2, "reagents": { - "Gold": 1.0, + "Electrum": 1.0, "Iron": 2.0 } }, - "ItemMKIIAngleGrinder": { + { + "target_prefab": "ItemMKIIDrill", + "target_prefab_hash": 324791548, "tier": "TierTwo", "time": 10.0, "energy": 500.0, @@ -55373,12 +58909,42 @@ export default { }, "count_types": 3, "reagents": { - "Copper": 1.0, - "Electrum": 4.0, - "Iron": 3.0 + "Copper": 5.0, + "Electrum": 5.0, + "Iron": 5.0 } }, - "ItemMKIIArcWelder": { + { + "target_prefab": "ItemMKIIScrewdriver", + "target_prefab_hash": -2015613246, + "tier": "TierTwo", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Electrum": 2.0, + "Iron": 2.0 + } + }, + { + "target_prefab": "ItemMKIIArcWelder", + "target_prefab_hash": -2061979347, "tier": "TierTwo", "time": 30.0, "energy": 2500.0, @@ -55406,33 +58972,9 @@ export default { "Steel": 10.0 } }, - "ItemMKIICrowbar": { - "tier": "TierTwo", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 5.0, - "Iron": 5.0 - } - }, - "ItemMKIIDrill": { + { + "target_prefab": "ItemMKIIAngleGrinder", + "target_prefab_hash": 240174650, "tier": "TierTwo", "time": 10.0, "energy": 500.0, @@ -55454,12 +58996,14 @@ export default { }, "count_types": 3, "reagents": { - "Copper": 5.0, - "Electrum": 5.0, - "Iron": 5.0 + "Copper": 1.0, + "Electrum": 4.0, + "Iron": 3.0 } }, - "ItemMKIIDuctTape": { + { + "target_prefab": "ItemMKIIWireCutters", + "target_prefab_hash": -178893251, "tier": "TierTwo", "time": 5.0, "energy": 500.0, @@ -55481,11 +59025,13 @@ export default { }, "count_types": 2, "reagents": { - "Electrum": 1.0, - "Iron": 2.0 + "Electrum": 5.0, + "Iron": 3.0 } }, - "ItemMKIIMiningDrill": { + { + "target_prefab": "ItemMKIIMiningDrill", + "target_prefab_hash": -1875271296, "tier": "TierTwo", "time": 5.0, "energy": 500.0, @@ -55512,88 +59058,12 @@ export default { "Iron": 3.0 } }, - "ItemMKIIScrewdriver": { + { + "target_prefab": "ItemSprayGun", + "target_prefab_hash": 1289723966, "tier": "TierTwo", "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 2.0, - "Iron": 2.0 - } - }, - "ItemMKIIWireCutters": { - "tier": "TierTwo", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 5.0, - "Iron": 3.0 - } - }, - "ItemMKIIWrench": { - "tier": "TierTwo", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Electrum": 3.0, - "Iron": 3.0 - } - }, - "ItemMarineBodyArmor": { - "tier": "TierOne", - "time": 60.0, - "energy": 3000.0, + "energy": 2000.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -55612,66 +59082,16 @@ export default { }, "count_types": 3, "reagents": { - "Nickel": 10.0, + "Invar": 5.0, "Silicon": 10.0, - "Steel": 20.0 + "Steel": 10.0 } }, - "ItemMarineHelmet": { + { + "target_prefab": "ItemCrowbar", + "target_prefab_hash": 856108234, "tier": "TierOne", - "time": 45.0, - "energy": 1750.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Gold": 4.0, - "Silicon": 4.0, - "Steel": 8.0 - } - }, - "ItemMiningBackPack": { - "tier": "TierOne", - "time": 8.0, - "energy": 800.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 6.0 - } - }, - "ItemMiningBelt": { - "tier": "TierOne", - "time": 5.0, + "time": 10.0, "energy": 500.0, "temperature": { "start": 1.0, @@ -55691,11 +59111,69 @@ export default { }, "count_types": 1, "reagents": { - "Iron": 3.0 + "Iron": 5.0 } }, - "ItemMiningBeltMKII": { - "tier": "TierTwo", + { + "target_prefab": "ItemWearLamp", + "target_prefab_hash": -598730959, + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Gold": 2.0 + } + }, + { + "target_prefab": "ItemFlashlight", + "target_prefab_hash": -838472102, + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Gold": 2.0 + } + }, + { + "target_prefab": "ItemDisposableBatteryCharger", + "target_prefab_hash": -2124435700, + "tier": "TierOne", "time": 10.0, "energy": 1000.0, "temperature": { @@ -55714,13 +59192,437 @@ export default { "is_any_to_remove": false, "reagents": {} }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Gold": 2.0, + "Iron": 2.0 + } + }, + { + "target_prefab": "ItemBeacon", + "target_prefab_hash": -869869491, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 2.0, + "Gold": 1.0, + "Iron": 2.0 + } + }, + { + "target_prefab": "ItemWrench", + "target_prefab_hash": -1886261558, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemDuctTape", + "target_prefab_hash": -1943134693, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 2.0 + } + }, + { + "target_prefab": "ItemDrill", + "target_prefab_hash": 2009673399, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, "count_types": 2, "reagents": { - "Constantan": 5.0, + "Copper": 5.0, + "Iron": 5.0 + } + }, + { + "target_prefab": "ToyLuna", + "target_prefab_hash": 94730034, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 1.0, + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemScrewdriver", + "target_prefab_hash": 687940869, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 2.0 + } + }, + { + "target_prefab": "ItemArcWelder", + "target_prefab_hash": 1385062886, + "tier": "TierOne", + "time": 30.0, + "energy": 2500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Electrum": 10.0, + "Invar": 5.0, + "Solder": 10.0, "Steel": 10.0 } }, - "ItemMiningCharge": { + { + "target_prefab": "ItemWeldingTorch", + "target_prefab_hash": -2066892079, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemAngleGrinder", + "target_prefab_hash": 201215010, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemTerrainManipulator", + "target_prefab_hash": 111280987, + "tier": "TierOne", + "time": 15.0, + "energy": 600.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 3.0, + "Gold": 2.0, + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemDirtCanister", + "target_prefab_hash": 902565329, + "tier": "TierOne", + "time": 5.0, + "energy": 400.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemWireCutters", + "target_prefab_hash": 1535854074, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemLabeller", + "target_prefab_hash": -743968726, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Gold": 1.0, + "Iron": 2.0 + } + }, + { + "target_prefab": "ItemRemoteDetonator", + "target_prefab_hash": 678483886, + "tier": "TierTwo", + "time": 30.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 5.0, + "Solder": 5.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemExplosive", + "target_prefab_hash": 235361649, + "tier": "TierTwo", + "time": 90.0, + "energy": 9000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Electrum": 1.0, + "Silicon": 7.0, + "Solder": 2.0 + } + }, + { + "target_prefab": "ItemMiningCharge", + "target_prefab_hash": 15829510, "tier": "TierOne", "time": 60.0, "energy": 6000.0, @@ -55747,7 +59649,9 @@ export default { "Silicon": 5.0 } }, - "ItemMiningDrill": { + { + "target_prefab": "ItemMiningDrill", + "target_prefab_hash": 1055173191, "tier": "TierOne", "time": 5.0, "energy": 500.0, @@ -55773,7 +59677,38 @@ export default { "Iron": 3.0 } }, - "ItemMiningDrillHeavy": { + { + "target_prefab": "ItemMiningDrillPneumatic", + "target_prefab_hash": 1258187304, + "tier": "TierOne", + "time": 20.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Copper": 4.0, + "Solder": 4.0, + "Steel": 6.0 + } + }, + { + "target_prefab": "ItemMiningDrillHeavy", + "target_prefab_hash": -1663349918, "tier": "TierTwo", "time": 30.0, "energy": 2500.0, @@ -55801,10 +59736,206 @@ export default { "Steel": 10.0 } }, - "ItemMiningDrillPneumatic": { + { + "target_prefab": "ItemPickaxe", + "target_prefab_hash": -913649823, "tier": "TierOne", - "time": 20.0, - "energy": 2000.0, + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 1.0, + "Iron": 2.0 + } + }, + { + "target_prefab": "ItemMiningBelt", + "target_prefab_hash": -676435305, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemMiningBeltMKII", + "target_prefab_hash": 1470787934, + "tier": "TierTwo", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Constantan": 5.0, + "Steel": 10.0 + } + }, + { + "target_prefab": "ItemMiningBackPack", + "target_prefab_hash": -1650383245, + "tier": "TierOne", + "time": 8.0, + "energy": 800.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 6.0 + } + }, + { + "target_prefab": "ItemHardMiningBackPack", + "target_prefab_hash": 900366130, + "tier": "TierOne", + "time": 10.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Invar": 1.0, + "Steel": 6.0 + } + }, + { + "target_prefab": "ItemSpaceHelmet", + "target_prefab_hash": 714830451, + "tier": "TierOne", + "time": 15.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Gold": 2.0 + } + }, + { + "target_prefab": "ItemSpacepack", + "target_prefab_hash": -1260618380, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemJetpackBasic", + "target_prefab_hash": 1969189000, + "tier": "TierOne", + "time": 30.0, + "energy": 1500.0, "temperature": { "start": 1.0, "stop": 80000.0, @@ -55823,12 +59954,69 @@ export default { }, "count_types": 3, "reagents": { - "Copper": 4.0, - "Solder": 4.0, - "Steel": 6.0 + "Gold": 2.0, + "Lead": 5.0, + "Steel": 10.0 } }, - "ItemMkIIToolbelt": { + { + "target_prefab": "ItemEvaSuit", + "target_prefab_hash": 1677018918, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemToolBelt", + "target_prefab_hash": -355127880, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 3.0 + } + }, + { + "target_prefab": "ItemMkIIToolbelt", + "target_prefab_hash": 1467558064, "tier": "TierTwo", "time": 5.0, "energy": 500.0, @@ -55854,933 +60042,9 @@ export default { "Iron": 3.0 } }, - "ItemNVG": { - "tier": "TierOne", - "time": 45.0, - "energy": 2750.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Hastelloy": 10.0, - "Silicon": 5.0, - "Steel": 5.0 - } - }, - "ItemPickaxe": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 1.0, - "Iron": 2.0 - } - }, - "ItemPlantSampler": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 5.0, - "Iron": 5.0 - } - }, - "ItemRemoteDetonator": { - "tier": "TierTwo", - "time": 30.0, - "energy": 1500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 5.0, - "Solder": 5.0, - "Steel": 5.0 - } - }, - "ItemReusableFireExtinguisher": { - "tier": "TierOne", - "time": 20.0, - "energy": 1000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Steel": 5.0 - } - }, - "ItemRoadFlare": { - "tier": "TierOne", - "time": 1.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemScrewdriver": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 2.0 - } - }, - "ItemSensorLenses": { - "tier": "TierTwo", - "time": 45.0, - "energy": 3500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Inconel": 5.0, - "Silicon": 5.0, - "Steel": 5.0 - } - }, - "ItemSensorProcessingUnitCelestialScanner": { - "tier": "TierTwo", - "time": 15.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 5.0, - "Silicon": 5.0 - } - }, - "ItemSensorProcessingUnitMesonScanner": { - "tier": "TierTwo", - "time": 15.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 5.0, - "Silicon": 5.0 - } - }, - "ItemSensorProcessingUnitOreScanner": { - "tier": "TierTwo", - "time": 15.0, - "energy": 100.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 4, - "reagents": { - "Copper": 5.0, - "Gold": 5.0, - "Iron": 5.0, - "Silicon": 5.0 - } - }, - "ItemSpaceHelmet": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Gold": 2.0 - } - }, - "ItemSpacepack": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Iron": 5.0 - } - }, - "ItemSprayCanBlack": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanBlue": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanBrown": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanGreen": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanGrey": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanKhaki": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanOrange": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanPink": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanPurple": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanRed": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanWhite": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayCanYellow": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 1.0 - } - }, - "ItemSprayGun": { - "tier": "TierTwo", - "time": 10.0, - "energy": 2000.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Invar": 5.0, - "Silicon": 10.0, - "Steel": 10.0 - } - }, - "ItemTerrainManipulator": { - "tier": "TierOne", - "time": 15.0, - "energy": 600.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 3, - "reagents": { - "Copper": 3.0, - "Gold": 2.0, - "Iron": 5.0 - } - }, - "ItemToolBelt": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ItemWearLamp": { - "tier": "TierOne", - "time": 15.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 2.0, - "Gold": 2.0 - } - }, - "ItemWeldingTorch": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Copper": 1.0, - "Iron": 3.0 - } - }, - "ItemWireCutters": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ItemWrench": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Iron": 3.0 - } - }, - "ToyLuna": { - "tier": "TierOne", - "time": 10.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 2, - "reagents": { - "Gold": 1.0, - "Iron": 5.0 - } - }, - "UniformCommander": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 25.0 - } - }, - "UniformMarine": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 10.0 - } - }, - "UniformOrangeJumpSuit": { - "tier": "TierOne", - "time": 5.0, - "energy": 500.0, - "temperature": { - "start": 1.0, - "stop": 80000.0, - "is_valid": false - }, - "pressure": { - "start": 0.0, - "stop": 1000000.0, - "is_valid": false - }, - "required_mix": { - "rule": 0, - "is_any": true, - "is_any_to_remove": false, - "reagents": {} - }, - "count_types": 1, - "reagents": { - "Silicon": 10.0 - } - }, - "WeaponPistolEnergy": { + { + "target_prefab": "WeaponPistolEnergy", + "target_prefab_hash": -385323479, "tier": "TierTwo", "time": 120.0, "energy": 3000.0, @@ -56808,7 +60072,9 @@ export default { "Steel": 10.0 } }, - "WeaponRifleEnergy": { + { + "target_prefab": "WeaponRifleEnergy", + "target_prefab_hash": 1154745374, "tier": "TierTwo", "time": 240.0, "energy": 10000.0, @@ -56837,8 +60103,1199 @@ export default { "Solder": 10.0, "Steel": 20.0 } + }, + { + "target_prefab": "UniformCommander", + "target_prefab_hash": -2083426457, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + { + "target_prefab": "UniformOrangeJumpSuit", + "target_prefab_hash": 810053150, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 10.0 + } + }, + { + "target_prefab": "UniformMarine", + "target_prefab_hash": -48342840, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 10.0 + } + }, + { + "target_prefab": "ItemClothingBagOveralls_Aus", + "target_prefab_hash": -869697826, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + { + "target_prefab": "ItemClothingBagOveralls_Brazil", + "target_prefab_hash": 611886665, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + { + "target_prefab": "ItemClothingBagOveralls_Canada", + "target_prefab_hash": 1265354377, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + { + "target_prefab": "ItemClothingBagOveralls_China", + "target_prefab_hash": -271773907, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + { + "target_prefab": "ItemClothingBagOveralls_EU", + "target_prefab_hash": 1969872429, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + { + "target_prefab": "ItemClothingBagOveralls_France", + "target_prefab_hash": 670416861, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + { + "target_prefab": "ItemClothingBagOveralls_Germany", + "target_prefab_hash": 1858014029, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + { + "target_prefab": "ItemClothingBagOveralls_Japan", + "target_prefab_hash": -1694123145, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + { + "target_prefab": "ItemClothingBagOveralls_Korea", + "target_prefab_hash": -1309808369, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + { + "target_prefab": "ItemClothingBagOveralls_NZ", + "target_prefab_hash": 102898295, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + { + "target_prefab": "ItemClothingBagOveralls_Russia", + "target_prefab_hash": 520003812, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + { + "target_prefab": "ItemClothingBagOveralls_SouthAfrica", + "target_prefab_hash": -265868019, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + { + "target_prefab": "ItemClothingBagOveralls_UK", + "target_prefab_hash": -979046113, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + { + "target_prefab": "ItemClothingBagOveralls_Ukraine", + "target_prefab_hash": -198158955, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + { + "target_prefab": "ItemClothingBagOveralls_US", + "target_prefab_hash": -691508919, + "tier": "TierOne", + "time": 5.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 25.0 + } + }, + { + "target_prefab": "ItemRoadFlare", + "target_prefab_hash": 871811564, + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + { + "target_prefab": "FlareGun", + "target_prefab_hash": 118685786, + "tier": "TierOne", + "time": 10.0, + "energy": 2000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 10.0, + "Silicon": 10.0 + } + }, + { + "target_prefab": "ItemChemLightBlue", + "target_prefab_hash": -772542081, + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 1.0 + } + }, + { + "target_prefab": "ItemChemLightGreen", + "target_prefab_hash": -597479390, + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 1.0 + } + }, + { + "target_prefab": "ItemChemLightRed", + "target_prefab_hash": -525810132, + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 1.0 + } + }, + { + "target_prefab": "ItemChemLightWhite", + "target_prefab_hash": 1312166823, + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 1.0 + } + }, + { + "target_prefab": "ItemChemLightYellow", + "target_prefab_hash": 1224819963, + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 1.0 + } + }, + { + "target_prefab": "ItemIgniter", + "target_prefab_hash": 890106742, + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Copper": 3.0 + } + }, + { + "target_prefab": "ItemHardSuit", + "target_prefab_hash": -1758310454, + "tier": "TierTwo", + "time": 60.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Astroloy": 10.0, + "Steel": 20.0, + "Stellite": 2.0 + } + }, + { + "target_prefab": "ItemReusableFireExtinguisher", + "target_prefab_hash": -1773192190, + "tier": "TierOne", + "time": 20.0, + "energy": 1000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemHardsuitHelmet", + "target_prefab_hash": -84573099, + "tier": "TierTwo", + "time": 50.0, + "energy": 1750.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Astroloy": 2.0, + "Steel": 10.0, + "Stellite": 2.0 + } + }, + { + "target_prefab": "ItemMarineBodyArmor", + "target_prefab_hash": 1399098998, + "tier": "TierOne", + "time": 60.0, + "energy": 3000.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Nickel": 10.0, + "Silicon": 10.0, + "Steel": 20.0 + } + }, + { + "target_prefab": "ItemMarineHelmet", + "target_prefab_hash": 1073631646, + "tier": "TierOne", + "time": 45.0, + "energy": 1750.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Gold": 4.0, + "Silicon": 4.0, + "Steel": 8.0 + } + }, + { + "target_prefab": "ItemNVG", + "target_prefab_hash": 982514123, + "tier": "TierOne", + "time": 45.0, + "energy": 2750.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Hastelloy": 10.0, + "Silicon": 5.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemSensorLenses", + "target_prefab_hash": -1176140051, + "tier": "TierTwo", + "time": 45.0, + "energy": 3500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Inconel": 5.0, + "Silicon": 5.0, + "Steel": 5.0 + } + }, + { + "target_prefab": "ItemSensorProcessingUnitOreScanner", + "target_prefab_hash": -1219128491, + "tier": "TierTwo", + "time": 15.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 5.0, + "Silicon": 5.0 + } + }, + { + "target_prefab": "ItemSensorProcessingUnitMesonScanner", + "target_prefab_hash": -1730464583, + "tier": "TierTwo", + "time": 15.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 5.0, + "Silicon": 5.0 + } + }, + { + "target_prefab": "ItemSensorProcessingUnitCelestialScanner", + "target_prefab_hash": -1154200014, + "tier": "TierTwo", + "time": 15.0, + "energy": 100.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Copper": 5.0, + "Gold": 5.0, + "Iron": 5.0, + "Silicon": 5.0 + } + }, + { + "target_prefab": "ItemGlasses", + "target_prefab_hash": -1068925231, + "tier": "TierOne", + "time": 20.0, + "energy": 250.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Iron": 15.0, + "Silicon": 10.0 + } + }, + { + "target_prefab": "ItemHardBackpack", + "target_prefab_hash": 374891127, + "tier": "TierTwo", + "time": 30.0, + "energy": 1500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 3, + "reagents": { + "Astroloy": 5.0, + "Steel": 15.0, + "Stellite": 5.0 + } + }, + { + "target_prefab": "ItemHardJetpack", + "target_prefab_hash": -412551656, + "tier": "TierTwo", + "time": 40.0, + "energy": 1750.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 4, + "reagents": { + "Astroloy": 8.0, + "Steel": 20.0, + "Stellite": 8.0, + "Waspaloy": 8.0 + } + }, + { + "target_prefab": "ItemFlagSmall", + "target_prefab_hash": 2011191088, + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Iron": 1.0 + } + }, + { + "target_prefab": "ItemBasketBall", + "target_prefab_hash": -1262580790, + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 1, + "reagents": { + "Silicon": 1.0 + } + }, + { + "target_prefab": "ItemKitBasket", + "target_prefab_hash": 148305004, + "tier": "TierOne", + "time": 1.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 2.0, + "Iron": 5.0 + } + }, + { + "target_prefab": "ItemPlantSampler", + "target_prefab_hash": 173023800, + "tier": "TierOne", + "time": 10.0, + "energy": 500.0, + "temperature": { + "start": 1.0, + "stop": 80000.0, + "is_valid": false + }, + "pressure": { + "start": 0.0, + "stop": 1000000.0, + "is_valid": false + }, + "required_mix": { + "rule": 0, + "is_any": true, + "is_any_to_remove": false, + "reagents": {} + }, + "count_types": 2, + "reagents": { + "Copper": 5.0, + "Iron": 5.0 + } } - } + ] }, "memory": { "instructions": { @@ -57200,40 +61657,64 @@ export default { "structure": { "small_grid": true }, - "slots": [ - { - "name": "Torpedo", - "typ": "Torpedo" + "slots": { + "0": { + "Direct": { + "name": "Torpedo", + "class": "Torpedo", + "index": 0 + } }, - { - "name": "Torpedo", - "typ": "Torpedo" + "1": { + "Direct": { + "name": "Torpedo", + "class": "Torpedo", + "index": 1 + } }, - { - "name": "Torpedo", - "typ": "Torpedo" + "2": { + "Direct": { + "name": "Torpedo", + "class": "Torpedo", + "index": 2 + } }, - { - "name": "Torpedo", - "typ": "Torpedo" + "3": { + "Direct": { + "name": "Torpedo", + "class": "Torpedo", + "index": 3 + } }, - { - "name": "Torpedo", - "typ": "Torpedo" + "4": { + "Direct": { + "name": "Torpedo", + "class": "Torpedo", + "index": 4 + } }, - { - "name": "Torpedo", - "typ": "Torpedo" + "5": { + "Direct": { + "name": "Torpedo", + "class": "Torpedo", + "index": 5 + } }, - { - "name": "Torpedo", - "typ": "Torpedo" + "6": { + "Direct": { + "name": "Torpedo", + "class": "Torpedo", + "index": 6 + } }, - { - "name": "Torpedo", - "typ": "Torpedo" + "7": { + "Direct": { + "name": "Torpedo", + "class": "Torpedo", + "index": 7 + } } - ] + } }, "StructureTraderWaypoint": { "templateType": "StructureLogicDevice", @@ -57261,7 +61742,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -57309,7 +61790,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -57365,7 +61846,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -57417,7 +61898,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -57469,7 +61950,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -57521,7 +62002,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -57566,7 +62047,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -57623,7 +62104,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -57712,16 +62193,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } }, - { - "name": "Export", - "typ": "None" + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -57770,7 +62257,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -57814,7 +62301,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -57973,416 +62460,722 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "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" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "None", + "index": 0 + } + }, + "1": { + "Direct": { + "name": "Export", + "class": "None", + "index": 1 + } + }, + "2": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 2 + } + }, + "3": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 3 + } + }, + "4": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 4 + } + }, + "5": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 5 + } + }, + "6": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 6 + } + }, + "7": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 7 + } + }, + "8": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 8 + } + }, + "9": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 9 + } + }, + "10": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 10 + } + }, + "11": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 11 + } + }, + "12": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 12 + } + }, + "13": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 13 + } + }, + "14": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 14 + } + }, + "15": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 15 + } + }, + "16": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 16 + } + }, + "17": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 17 + } + }, + "18": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 18 + } + }, + "19": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 19 + } + }, + "20": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 20 + } + }, + "21": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 21 + } + }, + "22": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 22 + } + }, + "23": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 23 + } + }, + "24": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 24 + } + }, + "25": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 25 + } + }, + "26": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 26 + } + }, + "27": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 27 + } + }, + "28": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 28 + } + }, + "29": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 29 + } + }, + "30": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 30 + } + }, + "31": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 31 + } + }, + "32": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 32 + } + }, + "33": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 33 + } + }, + "34": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 34 + } + }, + "35": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 35 + } + }, + "36": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 36 + } + }, + "37": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 37 + } + }, + "38": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 38 + } + }, + "39": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 39 + } + }, + "40": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 40 + } + }, + "41": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 41 + } + }, + "42": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 42 + } + }, + "43": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 43 + } + }, + "44": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 44 + } + }, + "45": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 45 + } + }, + "46": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 46 + } + }, + "47": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 47 + } + }, + "48": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 48 + } + }, + "49": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 49 + } + }, + "50": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 50 + } + }, + "51": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 51 + } + }, + "52": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 52 + } + }, + "53": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 53 + } + }, + "54": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 54 + } + }, + "55": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 55 + } + }, + "56": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 56 + } + }, + "57": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 57 + } + }, + "58": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 58 + } + }, + "59": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 59 + } + }, + "60": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 60 + } + }, + "61": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 61 + } + }, + "62": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 62 + } + }, + "63": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 63 + } + }, + "64": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 64 + } + }, + "65": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 65 + } + }, + "66": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 66 + } + }, + "67": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 67 + } + }, + "68": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 68 + } + }, + "69": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 69 + } + }, + "70": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 70 + } + }, + "71": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 71 + } + }, + "72": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 72 + } + }, + "73": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 73 + } + }, + "74": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 74 + } + }, + "75": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 75 + } + }, + "76": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 76 + } + }, + "77": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 77 + } + }, + "78": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 78 + } + }, + "79": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 79 + } + }, + "80": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 80 + } + }, + "81": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 81 + } + }, + "82": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 82 + } + }, + "83": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 83 + } + }, + "84": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 84 + } + }, + "85": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 85 + } + }, + "86": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 86 + } + }, + "87": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 87 + } + }, + "88": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 88 + } + }, + "89": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 89 + } + }, + "90": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 90 + } + }, + "91": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 91 + } + }, + "92": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 92 + } + }, + "93": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 93 + } + }, + "94": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 94 + } + }, + "95": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 95 + } + }, + "96": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 96 + } + }, + "97": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 97 + } + }, + "98": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 98 + } + }, + "99": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 99 + } + }, + "100": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 100 + } + }, + "101": { + "Direct": { + "name": "Storage", + "class": "None", + "index": 101 + } } - ], + }, "device": { "connection_list": [ { @@ -58442,7 +63235,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -58594,12 +63387,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "", - "typ": "DataDisk" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "DataDisk", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -58768,12 +63564,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "", - "typ": "DataDisk" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "DataDisk", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -58889,7 +63688,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -58947,12 +63746,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -59301,16 +64103,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Bottle Slot", - "typ": "LiquidBottle" + "slots": { + "0": { + "Direct": { + "name": "Bottle Slot", + "class": "LiquidBottle", + "index": 0 + } }, - { - "name": "Bottle Slot", - "typ": "LiquidBottle" + "1": { + "Direct": { + "name": "Bottle Slot", + "class": "LiquidBottle", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -59383,16 +64191,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Bottle Slot", - "typ": "LiquidBottle" + "slots": { + "0": { + "Direct": { + "name": "Bottle Slot", + "class": "LiquidBottle", + "index": 0 + } }, - { - "name": "Bottle Slot", - "typ": "LiquidBottle" + "1": { + "Direct": { + "name": "Bottle Slot", + "class": "LiquidBottle", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -59468,16 +64282,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Bottle Slot", - "typ": "LiquidBottle" + "slots": { + "0": { + "Direct": { + "name": "Bottle Slot", + "class": "LiquidBottle", + "index": 0 + } }, - { - "name": "Bottle Slot", - "typ": "LiquidBottle" + "1": { + "Direct": { + "name": "Bottle Slot", + "class": "LiquidBottle", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -59557,16 +64377,22 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Bottle Slot", - "typ": "LiquidBottle" + "slots": { + "0": { + "Direct": { + "name": "Bottle Slot", + "class": "LiquidBottle", + "index": 0 + } }, - { - "name": "Bottle Slot", - "typ": "LiquidBottle" + "1": { + "Direct": { + "name": "Bottle Slot", + "class": "LiquidBottle", + "index": 1 + } } - ], + }, "device": { "connection_list": [ { @@ -59618,7 +64444,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -59666,7 +64492,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [], "has_activate_state": false, @@ -59710,12 +64536,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Import", - "typ": "Ore" + "slots": { + "0": { + "Direct": { + "name": "Import", + "class": "Ore", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -59797,12 +64626,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "", - "typ": "DataDisk" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "DataDisk", + "index": 0 + } } - ], + }, "device": { "connection_list": [ { @@ -59859,7 +64691,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -59904,7 +64736,7 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [], + "slots": {}, "device": { "connection_list": [ { @@ -59973,28 +64805,43 @@ export default { "slot_class": "Uniform", "sorting_class": "Clothing" }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "Access Card", - "typ": "AccessCard" + "2": { + "Direct": { + "name": "Access Card", + "class": "AccessCard", + "index": 2 + } }, - { - "name": "Access Card", - "typ": "AccessCard" + "3": { + "Direct": { + "name": "Access Card", + "class": "AccessCard", + "index": 3 + } }, - { - "name": "Credit Card", - "typ": "CreditCard" + "4": { + "Direct": { + "name": "Credit Card", + "class": "CreditCard", + "index": 4 + } } - ] + } }, "UniformMarine": { "templateType": "ItemSlots", @@ -60011,24 +64858,36 @@ export default { "slot_class": "Uniform", "sorting_class": "Clothing" }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "Access Card", - "typ": "AccessCard" + "2": { + "Direct": { + "name": "Access Card", + "class": "AccessCard", + "index": 2 + } }, - { - "name": "Credit Card", - "typ": "CreditCard" + "3": { + "Direct": { + "name": "Credit Card", + "class": "CreditCard", + "index": 3 + } } - ] + } }, "UniformOrangeJumpSuit": { "templateType": "ItemSlots", @@ -60045,24 +64904,36 @@ export default { "slot_class": "Uniform", "sorting_class": "Clothing" }, - "slots": [ - { - "name": "", - "typ": "None" + "slots": { + "0": { + "Direct": { + "name": "", + "class": "None", + "index": 0 + } }, - { - "name": "", - "typ": "None" + "1": { + "Direct": { + "name": "", + "class": "None", + "index": 1 + } }, - { - "name": "Access Card", - "typ": "AccessCard" + "2": { + "Direct": { + "name": "Access Card", + "class": "AccessCard", + "index": 2 + } }, - { - "name": "Credit Card", - "typ": "CreditCard" + "3": { + "Direct": { + "name": "Credit Card", + "class": "CreditCard", + "index": 3 + } } - ] + } }, "WeaponEnergy": { "templateType": "ItemLogic", @@ -60101,12 +64972,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "WeaponPistolEnergy": { "templateType": "ItemLogic", @@ -60154,12 +65028,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "WeaponRifleEnergy": { "templateType": "ItemLogic", @@ -60207,12 +65084,15 @@ export default { "wireless_logic": false, "circuit_holder": false }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" + "slots": { + "0": { + "Direct": { + "name": "Battery", + "class": "Battery", + "index": 0 + } } - ] + } }, "WeaponTorpedo": { "templateType": "Item", @@ -60233,330 +65113,468 @@ export default { }, "reagents": { "Alcohol": { - "Hash": 1565803737, - "Unit": "ml" + "id": 20, + "name": "Alcohol", + "hash": 1565803737, + "unit": "ml", + "is_organic": true, + "sources": {} }, "Astroloy": { - "Hash": -1493155787, - "Unit": "g", - "Sources": { + "id": 36, + "name": "Astroloy", + "hash": -1493155787, + "unit": "g", + "is_organic": true, + "sources": { "ItemAstroloyIngot": 1.0 } }, "Biomass": { - "Hash": 925270362, - "Unit": "", - "Sources": { + "id": 40, + "name": "Biomass", + "hash": 925270362, + "unit": "", + "is_organic": true, + "sources": { "ItemBiomass": 1.0 } }, "Carbon": { - "Hash": 1582746610, - "Unit": "g", - "Sources": { + "id": 5, + "name": "Carbon", + "hash": 1582746610, + "unit": "g", + "is_organic": true, + "sources": { "HumanSkull": 1.0, "ItemCharcoal": 1.0 } }, "Cobalt": { - "Hash": 1702246124, - "Unit": "g", - "Sources": { + "id": 37, + "name": "Cobalt", + "hash": 1702246124, + "unit": "g", + "is_organic": true, + "sources": { "ItemCobaltOre": 1.0 } }, "Cocoa": { - "Hash": 678781198, - "Unit": "g", - "Sources": { + "id": 44, + "name": "Cocoa", + "hash": 678781198, + "unit": "g", + "is_organic": true, + "sources": { "ItemCocoaPowder": 1.0, "ItemCocoaTree": 1.0 } }, "ColorBlue": { - "Hash": 557517660, - "Unit": "g", - "Sources": { + "id": 27, + "name": "ColorBlue", + "hash": 557517660, + "unit": "g", + "is_organic": true, + "sources": { "ReagentColorBlue": 10.0 } }, "ColorGreen": { - "Hash": 2129955242, - "Unit": "g", - "Sources": { + "id": 26, + "name": "ColorGreen", + "hash": 2129955242, + "unit": "g", + "is_organic": true, + "sources": { "ReagentColorGreen": 10.0 } }, "ColorOrange": { - "Hash": 1728153015, - "Unit": "g", - "Sources": { + "id": 29, + "name": "ColorOrange", + "hash": 1728153015, + "unit": "g", + "is_organic": true, + "sources": { "ReagentColorOrange": 10.0 } }, "ColorRed": { - "Hash": 667001276, - "Unit": "g", - "Sources": { + "id": 25, + "name": "ColorRed", + "hash": 667001276, + "unit": "g", + "is_organic": true, + "sources": { "ReagentColorRed": 10.0 } }, "ColorYellow": { - "Hash": -1430202288, - "Unit": "g", - "Sources": { + "id": 28, + "name": "ColorYellow", + "hash": -1430202288, + "unit": "g", + "is_organic": true, + "sources": { "ReagentColorYellow": 10.0 } }, "Constantan": { - "Hash": 1731241392, - "Unit": "g", - "Sources": { + "id": 15, + "name": "Constantan", + "hash": 1731241392, + "unit": "g", + "is_organic": true, + "sources": { "ItemConstantanIngot": 1.0 } }, "Copper": { - "Hash": -1172078909, - "Unit": "g", - "Sources": { + "id": 7, + "name": "Copper", + "hash": -1172078909, + "unit": "g", + "is_organic": true, + "sources": { "ItemCopperIngot": 1.0, "ItemCopperOre": 1.0 } }, "Corn": { - "Hash": 1550709753, - "Unit": "", - "Sources": { + "id": 38, + "name": "Corn", + "hash": 1550709753, + "unit": "", + "is_organic": true, + "sources": { "ItemCookedCorn": 1.0, "ItemCorn": 1.0 } }, "Egg": { - "Hash": 1887084450, - "Unit": "", - "Sources": { + "id": 2, + "name": "Egg", + "hash": 1887084450, + "unit": "", + "is_organic": true, + "sources": { "ItemCookedPowderedEggs": 1.0, "ItemEgg": 1.0, "ItemFertilizedEgg": 1.0 } }, "Electrum": { - "Hash": 478264742, - "Unit": "g", - "Sources": { + "id": 13, + "name": "Electrum", + "hash": 478264742, + "unit": "g", + "is_organic": true, + "sources": { "ItemElectrumIngot": 1.0 } }, "Fenoxitone": { - "Hash": -865687737, - "Unit": "g", - "Sources": { + "id": 24, + "name": "Fenoxitone", + "hash": -865687737, + "unit": "g", + "is_organic": true, + "sources": { "ItemFern": 1.0 } }, "Flour": { - "Hash": -811006991, - "Unit": "g", - "Sources": { + "id": 0, + "name": "Flour", + "hash": -811006991, + "unit": "g", + "is_organic": true, + "sources": { "ItemFlour": 50.0 } }, "Gold": { - "Hash": -409226641, - "Unit": "g", - "Sources": { + "id": 4, + "name": "Gold", + "hash": -409226641, + "unit": "g", + "is_organic": true, + "sources": { "ItemGoldIngot": 1.0, "ItemGoldOre": 1.0 } }, "Hastelloy": { - "Hash": 2019732679, - "Unit": "g", - "Sources": { + "id": 35, + "name": "Hastelloy", + "hash": 2019732679, + "unit": "g", + "is_organic": true, + "sources": { "ItemHastelloyIngot": 1.0 } }, "Hydrocarbon": { - "Hash": 2003628602, - "Unit": "g", - "Sources": { + "id": 9, + "name": "Hydrocarbon", + "hash": 2003628602, + "unit": "g", + "is_organic": true, + "sources": { "ItemCoalOre": 1.0, "ItemSolidFuel": 1.0 } }, "Inconel": { - "Hash": -586072179, - "Unit": "g", - "Sources": { + "id": 34, + "name": "Inconel", + "hash": -586072179, + "unit": "g", + "is_organic": true, + "sources": { "ItemInconelIngot": 1.0 } }, "Invar": { - "Hash": -626453759, - "Unit": "g", - "Sources": { + "id": 14, + "name": "Invar", + "hash": -626453759, + "unit": "g", + "is_organic": true, + "sources": { "ItemInvarIngot": 1.0 } }, "Iron": { - "Hash": -666742878, - "Unit": "g", - "Sources": { + "id": 3, + "name": "Iron", + "hash": -666742878, + "unit": "g", + "is_organic": true, + "sources": { "ItemIronIngot": 1.0, "ItemIronOre": 1.0 } }, "Lead": { - "Hash": -2002530571, - "Unit": "g", - "Sources": { + "id": 12, + "name": "Lead", + "hash": -2002530571, + "unit": "g", + "is_organic": true, + "sources": { "ItemLeadIngot": 1.0, "ItemLeadOre": 1.0 } }, "Milk": { - "Hash": 471085864, - "Unit": "ml", - "Sources": { + "id": 1, + "name": "Milk", + "hash": 471085864, + "unit": "ml", + "is_organic": true, + "sources": { "ItemCookedCondensedMilk": 1.0, "ItemMilk": 1.0 } }, "Mushroom": { - "Hash": 516242109, - "Unit": "g", - "Sources": { + "id": 42, + "name": "Mushroom", + "hash": 516242109, + "unit": "g", + "is_organic": true, + "sources": { "ItemCookedMushroom": 1.0, "ItemMushroom": 1.0 } }, "Nickel": { - "Hash": 556601662, - "Unit": "g", - "Sources": { + "id": 11, + "name": "Nickel", + "hash": 556601662, + "unit": "g", + "is_organic": true, + "sources": { "ItemNickelIngot": 1.0, "ItemNickelOre": 1.0 } }, "Oil": { - "Hash": 1958538866, - "Unit": "ml", - "Sources": { + "id": 21, + "name": "Oil", + "hash": 1958538866, + "unit": "ml", + "is_organic": true, + "sources": { "ItemSoyOil": 1.0 } }, "Plastic": { - "Hash": 791382247, - "Unit": "g" + "id": 17, + "name": "Plastic", + "hash": 791382247, + "unit": "g", + "is_organic": true, + "sources": {} }, "Potato": { - "Hash": -1657266385, - "Unit": "", - "Sources": { + "id": 22, + "name": "Potato", + "hash": -1657266385, + "unit": "", + "is_organic": true, + "sources": { "ItemPotato": 1.0, "ItemPotatoBaked": 1.0 } }, "Pumpkin": { - "Hash": -1250164309, - "Unit": "", - "Sources": { + "id": 30, + "name": "Pumpkin", + "hash": -1250164309, + "unit": "", + "is_organic": true, + "sources": { "ItemCookedPumpkin": 1.0, "ItemPumpkin": 1.0 } }, "Rice": { - "Hash": 1951286569, - "Unit": "g", - "Sources": { + "id": 31, + "name": "Rice", + "hash": 1951286569, + "unit": "g", + "is_organic": true, + "sources": { "ItemCookedRice": 1.0, "ItemRice": 1.0 } }, "SalicylicAcid": { - "Hash": -2086114347, - "Unit": "g" + "id": 19, + "name": "SalicylicAcid", + "hash": -2086114347, + "unit": "g", + "is_organic": true, + "sources": {} }, "Silicon": { - "Hash": -1195893171, - "Unit": "g", - "Sources": { + "id": 18, + "name": "Silicon", + "hash": -1195893171, + "unit": "g", + "is_organic": true, + "sources": { "ItemSiliconIngot": 0.1, "ItemSiliconOre": 1.0 } }, "Silver": { - "Hash": 687283565, - "Unit": "g", - "Sources": { + "id": 10, + "name": "Silver", + "hash": 687283565, + "unit": "g", + "is_organic": true, + "sources": { "ItemSilverIngot": 1.0, "ItemSilverOre": 1.0 } }, "Solder": { - "Hash": -1206542381, - "Unit": "g", - "Sources": { + "id": 16, + "name": "Solder", + "hash": -1206542381, + "unit": "g", + "is_organic": true, + "sources": { "ItemSolderIngot": 1.0 } }, "Soy": { - "Hash": 1510471435, - "Unit": "", - "Sources": { + "id": 41, + "name": "Soy", + "hash": 1510471435, + "unit": "", + "is_organic": true, + "sources": { "ItemCookedSoybean": 1.0, "ItemSoybean": 1.0 } }, "Steel": { - "Hash": 1331613335, - "Unit": "g", - "Sources": { + "id": 8, + "name": "Steel", + "hash": 1331613335, + "unit": "g", + "is_organic": true, + "sources": { "ItemEmptyCan": 1.0, "ItemSteelIngot": 1.0 } }, "Stellite": { - "Hash": -500544800, - "Unit": "g", - "Sources": { + "id": 33, + "name": "Stellite", + "hash": -500544800, + "unit": "g", + "is_organic": true, + "sources": { "ItemStelliteIngot": 1.0 } }, "Sugar": { - "Hash": 1778746875, - "Unit": "g", - "Sources": { + "id": 43, + "name": "Sugar", + "hash": 1778746875, + "unit": "g", + "is_organic": true, + "sources": { "ItemSugar": 10.0, "ItemSugarCane": 1.0 } }, "Tomato": { - "Hash": 733496620, - "Unit": "", - "Sources": { + "id": 23, + "name": "Tomato", + "hash": 733496620, + "unit": "", + "is_organic": true, + "sources": { "ItemCookedTomato": 1.0, "ItemTomato": 1.0 } }, "Uranium": { - "Hash": -208860272, - "Unit": "g", - "Sources": { + "id": 6, + "name": "Uranium", + "hash": -208860272, + "unit": "g", + "is_organic": true, + "sources": { "ItemUraniumOre": 1.0 } }, "Waspaloy": { - "Hash": 1787814293, - "Unit": "g", - "Sources": { + "id": 32, + "name": "Waspaloy", + "hash": 1787814293, + "unit": "g", + "is_organic": true, + "sources": { "ItemWaspaloyIngot": 1.0 } }, "Wheat": { - "Hash": -686695134, - "Unit": "", - "Sources": { + "id": 39, + "name": "Wheat", + "hash": -686695134, + "unit": "", + "is_organic": true, + "sources": { "ItemWheat": 1.0 } } @@ -61916,6 +66934,16 @@ export default { "deprecated": false, "description": "The index of the trader landing pad on this devices data network that it will try to call a trader in to land" }, + "TargetPrefabHash": { + "value": 271, + "deprecated": false, + "description": "The prefab" + }, + "TargetSlotIndex": { + "value": 270, + "deprecated": false, + "description": "The slot index that the target device that this device will try to interact with" + }, "TargetX": { "value": 88, "deprecated": false, @@ -63673,6 +68701,16 @@ export default { "deprecated": false, "description": "The index of the trader landing pad on this devices data network that it will try to call a trader in to land" }, + "TargetPrefabHash": { + "value": 271, + "deprecated": false, + "description": "The prefab" + }, + "TargetSlotIndex": { + "value": 270, + "deprecated": false, + "description": "The slot index that the target device that this device will try to interact with" + }, "TargetX": { "value": 88, "deprecated": false, @@ -64845,6 +69883,7 @@ export default { "-1577831321": "StructureRefrigeratedVendingMachine", "-1573623434": "ItemFlowerBlue", "-1567752627": "ItemWallCooler", + "-1555459562": "StructureLarreDockCargo", "-1554349863": "StructureSolarPanel45", "-1552586384": "ItemGasCanisterPollutants", "-1550278665": "CartridgeAtmosAnalyser", @@ -64995,6 +70034,7 @@ export default { "-1076892658": "ItemCookedMushroom", "-1068925231": "ItemGlasses", "-1068629349": "KitchenTableSimpleTall", + "-1067485367": "ItemKitLarreDockCargo", "-1067319543": "ItemGasFilterOxygenM", "-1065725831": "StructureTransformerMedium", "-1061945368": "ItemKitDynamicCanister", @@ -65023,6 +70063,7 @@ export default { "-965741795": "StructureCondensationValve", "-958884053": "StructureChuteUmbilicalMale", "-945806652": "ItemKitElevator", + "-940470326": "ItemKitLarreDockBypass", "-934345724": "StructureSolarPanelReinforced", "-932335800": "ItemKitRocketTransformerSmall", "-932136011": "CartridgeConfiguration", @@ -65144,6 +70185,7 @@ export default { "-524546923": "ItemKitWallIron", "-524289310": "ItemEggCarton", "-523832822": "StructurePipeLiquidOneWayValveLever", + "-522428667": "StructureLarreDockCollector", "-517628750": "StructureWaterDigitalValve", "-507770416": "StructureSmallDirectHeatExchangeLiquidtoLiquid", "-504717121": "ItemWirelessBatteryCellExtraLarge", @@ -65305,6 +70347,7 @@ export default { "73728932": "StructurePipeStraight", "77421200": "ItemKitDockingPort", "81488783": "CartridgeTracker", + "85133079": "StructureLarreDockHydroponics", "94730034": "ToyLuna", "98602599": "ItemWreckageTurbineGenerator2", "101488029": "StructurePowerUmbilicalFemale", @@ -65408,6 +70451,7 @@ export default { "340210934": "StructureStairwellFrontRight", "341030083": "ItemKitGrowLight", "347154462": "StructurePictureFrameThickMountLandscapeSmall", + "347658127": "ItemKitLarreDockCollector", "350726273": "RoverCargo", "363303270": "StructureInsulatedPipeLiquidCrossJunction4", "374891127": "ItemHardBackpack", @@ -65416,6 +70460,7 @@ export default { "378084505": "StructureBlocker", "379750958": "StructurePressureFedLiquidEngine", "384478267": "ItemMiningPackage", + "385528206": "ItemKitLarreDockAtmos", "386754635": "ItemPureIceNitrous", "386820253": "StructureWallSmallPanelsMonoChrome", "388774906": "ItemMKIIDuctTape", @@ -65494,6 +70539,7 @@ export default { "636112787": "ItemKitPassthroughHeatExchanger", "648608238": "StructureChuteDigitalValveLeft", "653461728": "ItemRocketMiningDrillHeadHighSpeedIce", + "656181408": "ItemKitLarreDockHydroponics", "656649558": "ItemWreckageStructureWeatherStation007", "658916791": "ItemRice", "662053345": "ItemPlasticSheets", @@ -65602,6 +70648,7 @@ export default { "1005843700": "ItemDataDisk", "1008295833": "ItemBatteryChargerSmall", "1010807532": "EntityChickenWhite", + "1011275082": "StructureLarreDockBypass", "1013244511": "ItemKitStacker", "1013514688": "StructureTankSmall", "1013818348": "ItemEmptyCan", @@ -65880,6 +70927,7 @@ export default { "1969189000": "ItemJetpackBasic", "1969312177": "ItemKitEngineMedium", "1974053060": "StructureRoboticArmRailCornerStop", + "1978422481": "StructureLarreDockAtmos", "1979212240": "StructureWallGeometryCorner", "1981698201": "StructureInteriorDoorPaddedThin", "1986658780": "StructureWaterBottleFillerPoweredBottom", @@ -66227,6 +71275,11 @@ export default { "StructureLargeExtendableRadiator", "StructureLargeHangerDoor", "StructureLargeSatelliteDish", + "StructureLarreDockAtmos", + "StructureLarreDockBypass", + "StructureLarreDockCargo", + "StructureLarreDockCollector", + "StructureLarreDockHydroponics", "StructureLaunchMount", "StructureLightLong", "StructureLightLongAngled", @@ -66680,6 +71733,11 @@ export default { "StructureLargeExtendableRadiator", "StructureLargeHangerDoor", "StructureLargeSatelliteDish", + "StructureLarreDockAtmos", + "StructureLarreDockBypass", + "StructureLarreDockCargo", + "StructureLarreDockCollector", + "StructureLarreDockHydroponics", "StructureLightLong", "StructureLightLongAngled", "StructureLightLongWide", @@ -67202,6 +72260,11 @@ export default { "ItemKitLargeDirectHeatExchanger", "ItemKitLargeExtendableRadiator", "ItemKitLargeSatelliteDish", + "ItemKitLarreDockAtmos", + "ItemKitLarreDockBypass", + "ItemKitLarreDockCargo", + "ItemKitLarreDockCollector", + "ItemKitLarreDockHydroponics", "ItemKitLaunchMount", "ItemKitLaunchTower", "ItemKitLinearRail", diff --git a/www/src/ts/editor/ace.ts b/www/src/ts/editor/ace.ts index 1eca64d..536273d 100644 --- a/www/src/ts/editor/ace.ts +++ b/www/src/ts/editor/ace.ts @@ -14,7 +14,7 @@ export async function setupLspWorker() { const loaded = (w: Worker) => new Promise((r) => w.addEventListener("message", r, { once: true })); - await Promise.all([loaded(worker)]); + await Promise.all([loaded(worker)]); // Register the editor with the language provider return worker; @@ -23,4 +23,258 @@ export async function setupLspWorker() { export import Ace = ace.Ace; import { Range } from "ace-builds"; -export { ace, TextMode, Range, AceLanguageClient } +(ace as any).define("ace/marker_group", ["require", "exports", "module"], function (require: any, exports: any, module: any) { + "use strict"; + var MarkerGroup = /** @class */ (function () { + function MarkerGroup(session: any, options: any) { + if (options) + this.markerType = options.markerType; + this.markers = []; + this.session = session; + session.addDynamicMarker(this); + } + MarkerGroup.prototype.getMarkerAtPosition = function (pos: any) { + return this.markers.find(function (marker: any) { + return marker.range.contains(pos.row, pos.column); + }); + }; + MarkerGroup.prototype.markersComparator = function (a: any, b: any) { + return a.range.start.row - b.range.start.row; + }; + MarkerGroup.prototype.setMarkers = function (markers: any) { + this.markers = markers.sort(this.markersComparator).slice(0, this.MAX_MARKERS); + this.session._signal("changeBackMarker"); + }; + MarkerGroup.prototype.update = function (html: any, markerLayer: any, session: any, config: any) { + if (!this.markers || !this.markers.length) + return; + var visibleRangeStartRow = config.firstRow, visibleRangeEndRow = config.lastRow; + var foldLine; + var markersOnOneLine = 0; + var lastRow = 0; + for (var i = 0; i < this.markers.length; i++) { + var marker = this.markers[i]; + if (marker.range.end.row < visibleRangeStartRow) + continue; + if (marker.range.start.row > visibleRangeEndRow) + continue; + if (marker.range.start.row === lastRow) { + markersOnOneLine++; + } + else { + lastRow = marker.range.start.row; + markersOnOneLine = 0; + } + if (markersOnOneLine > 200) { + continue; + } + var markerVisibleRange = marker.range.clipRows(visibleRangeStartRow, visibleRangeEndRow); + if (markerVisibleRange.start.row === markerVisibleRange.end.row + && markerVisibleRange.start.column === markerVisibleRange.end.column) { + continue; // visible range is empty + } + var screenRange = markerVisibleRange.toScreenRange(session); + if (screenRange.isEmpty()) { + foldLine = session.getNextFoldLine(markerVisibleRange.end.row, foldLine); + if (foldLine && foldLine.end.row > markerVisibleRange.end.row) { + visibleRangeStartRow = foldLine.end.row; + } + continue; + } + if (this.markerType === "fullLine") { + markerLayer.drawFullLineMarker(html, screenRange, marker.className, config); + } + else if (screenRange.isMultiLine()) { + if (this.markerType === "line") + markerLayer.drawMultiLineMarker(html, screenRange, marker.className, config); + else + markerLayer.drawTextMarker(html, screenRange, marker.className, config); + } + else { + markerLayer.drawSingleLineMarker(html, screenRange, marker.className + " ace_br15", config); + } + } + }; + return MarkerGroup; + }()); + MarkerGroup.prototype.MAX_MARKERS = 10000; + exports.MarkerGroup = MarkerGroup; + +}); + +export declare namespace AceHidden { + export type Editor = Ace.Editor; + export type EditSession = Ace.EditSession; + export var popupManager: PopupManager; + export class MouseEvent { + constructor(domEvent: any, editor: any); + /** @type {number} */ speed: number; + /** @type {number} */ wheelX: number; + /** @type {number} */ wheelY: number; + domEvent: any; + editor: any; + x: any; + clientX: any; + y: any; + clientY: any; + $pos: any; + $inSelection: any; + propagationStopped: boolean; + defaultPrevented: boolean; + stopPropagation(): void; + preventDefault(): void; + stop(): void; + /** + * Get the document position below the mouse cursor + * + * @return {Object} 'row' and 'column' of the document position + */ + getDocumentPosition(): Ace.Point; + /** + * Get the relative position within the gutter. + * + * @return {Number} 'row' within the gutter. + */ + getGutterRow(): number; + /** + * Check if the mouse cursor is inside of the text selection + * + * @return {Boolean} whether the mouse cursor is inside of the selection + */ + inSelection(): boolean; + /** + * Get the clicked mouse button + * + * @return {Number} 0 for left button, 1 for middle button, 2 for right button + */ + getButton(): number; + /** + * @return {Boolean} whether the shift key was pressed when the event was emitted + */ + getShiftKey(): boolean; + getAccelKey(): any; + } + export class Tooltip { + /** + * @param {Element} parentNode + **/ + constructor(parentNode: Element); + isOpen: boolean; + $element: any; + $parentNode: Element; + $init(): any; + /** + * @returns {HTMLElement} + **/ + getElement(): HTMLElement; + /** + * @param {String} text + **/ + setText(text: string): void; + /** + * @param {String} html + **/ + setHtml(html: string): void; + /** + * @param {Number} x + * @param {Number} y + **/ + setPosition(x: number, y: number): void; + /** + * @param {String} className + **/ + setClassName(className: string): void; + /** + * @param {import("../ace-internal").Ace.Theme} theme + */ + setTheme(theme: any): void; + /** + * @param {String} [text] + * @param {Number} [x] + * @param {Number} [y] + **/ + show(text?: string, x?: number, y?: number): void; + hide(e: any): void; + /** + * @returns {Number} + **/ + getHeight(): number; + /** + * @returns {Number} + **/ + getWidth(): number; + destroy(): void; + } + export class HoverTooltip extends Tooltip { + constructor(parentNode?: HTMLElement); + timeout: number; + lastT: number; + idleTime: number; + lastEvent: any; + onMouseOut(e: any): void; + /** + * @param {MouseEvent} e + * @param {Editor} editor + */ + onMouseMove(e: MouseEvent, editor: Editor): void; + waitForHover(): void; + /** + * @param {Editor} editor + */ + addToEditor(editor: Editor): void; + /** + * @param {Editor} editor + */ + removeFromEditor(editor: Editor): void; + /** + * @param {MouseEvent} e + */ + isOutsideOfText(e: MouseEvent): boolean; + /** + * @param {any} value + */ + setDataProvider(value: (e: MouseEvent, editor: Ace.Editor) => void): void; + $gatherData: (e: MouseEvent, editor: Ace.Editor) => void; + /** + * @param {Editor} editor + * @param {Range} range + * @param {any} domNode + * @param {MouseEvent} startingEvent + */ + showForRange(editor: Editor, range: Ace.Range, domNode: any, startingEvent: MouseEvent): void; + range: any; + /** + * @param {Range} range + * @param {EditSession} [session] + */ + addMarker(range: Range, session?: EditSession): void; + $markerSession: any; + marker: any; + $registerCloseEvents(): void; + $removeCloseEvents(): void; + } + export class PopupManager { + /**@type{Tooltip[]} */ + popups: Tooltip[]; + /** + * @param {Tooltip} popup + */ + addPopup(popup: Tooltip): void; + /** + * @param {Tooltip} popup + */ + removePopup(popup: Tooltip): void; + updatePopups(): void; + /** + * @param {Tooltip} popupA + * @param {Tooltip} popupB + * @return {boolean} + */ + doPopupsOverlap(popupA: Tooltip, popupB: Tooltip): boolean; + } +} + +const { HoverTooltip } = ace.require("ace/tooltip"); +const MarkerGroup = ace.require("ace/marker_group").MarkerGroup; + +export { ace, TextMode, Range, AceLanguageClient, HoverTooltip, MarkerGroup } diff --git a/www/src/ts/editor/index.ts b/www/src/ts/editor/index.ts index 340d76f..cb77f2a 100644 --- a/www/src/ts/editor/index.ts +++ b/www/src/ts/editor/index.ts @@ -1,4 +1,13 @@ -import { ace, Ace, Range, AceLanguageClient, setupLspWorker } from "./ace"; +import { + ace, + Ace, + Range, + AceLanguageClient, + setupLspWorker, + HoverTooltip, + AceHidden, + MarkerGroup, +} from "./ace"; import { LanguageProvider } from "ace-linters/types/language-provider"; @@ -23,27 +32,55 @@ import { LanguageClientConfig, ProviderOptions, } from "ace-linters/types/types/language-service"; +import { LineError, ObjectID } from "ic10emu_wasm"; +import { marked } from "marked"; +import { effect, signal, Signal } from "@lit-labs/preact-signals"; +import { App } from "app"; +import { VirtualMachine } from "virtualMachine"; +import { isSome } from "utils"; +import { Session } from "session"; + +interface SessionStateExtension { + state?: { + errorMarkers?: Ace.MarkerGroup; + activeLineMarker?: ReturnType; + saveTimeout?: ReturnType; + } +} + +interface MarkerGroupItemExtension { + tooltipText?: string; +} + +type ExtendedEditSession = Ace.EditSession & SessionStateExtension; +type ExtendedMarkerGroupItem = Ace.MarkerGroupItem & MarkerGroupItemExtension @customElement("ace-ic10") export class IC10Editor extends BaseElement { - mode: string; + static styles = [...defaultCss, editorStyles]; + + mode: string = "ace/mode/ic10"; + settings: { keyboard: string; cursor: string; fontSize: number; relativeLineNumbers: boolean; - }; - sessions: Map; + } = { + keyboard: "ace", + cursor: "ace", + fontSize: 16, + relativeLineNumbers: false, + }; - @state() activeSession: number = 1; + sessions: Map = new Map(); activeLineMarkers: Map = new Map(); languageProvider?: LanguageProvider; - // ui: IC10EditorUI; - static styles = [...defaultCss, editorStyles]; + initialInit: boolean = false; + aceReady: boolean = false; - initialInit: boolean; editorDiv: HTMLElement; editorContainerDiv: HTMLElement; editorStatusbarDiv: HTMLElement; @@ -63,27 +100,25 @@ export class IC10Editor extends BaseElement { @query(".e-settings-dialog") settingDialog: SlDialog; + errorTooltip: AceHidden.HoverTooltip = new HoverTooltip(); + activeLineTooltip: AceHidden.HoverTooltip = new HoverTooltip(); + + app: Signal = signal(null); + vm: Signal = signal(null); + constructor() { super(); console.log("constructing editor"); window.Editor = this; - this.mode = "ace/mode/ic10"; - - this.settings = { - keyboard: "ace", - cursor: "ace", - fontSize: 16, - relativeLineNumbers: false, - }; - - this.sessions = new Map(); - this.activeLineMarkers = new Map(); - - // this.ui = new IC10EditorUI(this); } - protected render() { + private async setupApp() { + this.vm.value = await window.VM.get(); + this.app.value = await window.App.get(); + } + + render() { const result = html`
@@ -121,6 +156,8 @@ export class IC10Editor extends BaseElement { } async firstUpdated() { + await this.setupApp(); + console.log("editor firstUpdated"); if (!ace.require("ace/ext/language_tools")) { await import("ace-builds/src-noconflict/ext-language_tools"); @@ -167,20 +204,19 @@ export class IC10Editor extends BaseElement { this.stylesAdded = []; const stylesToMove: string[] = ["vimMode"]; const stylesToCopy: string[] = ["autocompletion.css"]; - const that = this; this.stylesObserver = new MutationObserver((_mutations, _observer) => { // ace adds nodes, ours should be for (const sheet of document.head.querySelectorAll("style")) { - if (!that.stylesAdded.includes(sheet.id)) { + if (!this.stylesAdded.includes(sheet.id)) { if (stylesToMove.includes(sheet.id)) { - that.shadowRoot?.appendChild(sheet); - that.stylesAdded.push(sheet.id); + this.shadowRoot?.appendChild(sheet); + this.stylesAdded.push(sheet.id); } else if (stylesToCopy.includes(sheet.id)) { let new_sheet = sheet.cloneNode() as HTMLStyleElement; new_sheet.id = `${sheet.id}_clone`; - that.shadowRoot?.appendChild(new_sheet); - that.stylesAdded.push(sheet.id); + this.shadowRoot?.appendChild(new_sheet); + this.stylesAdded.push(sheet.id); } } } @@ -209,22 +245,18 @@ export class IC10Editor extends BaseElement { // characterData: false, // }); - this.sessions.set(this.activeSession, this.editor.getSession()); - this.bindSession(this.activeSession, this.sessions.get(this.activeSession)); - this.activeLineMarkers.set(this.activeSession, null); - const worker = await setupLspWorker(); this.setupLsp(worker); // when the CSS resize Property is added (to a container-div or ace-ic10 ) // the correct sizing is maintained (after user resize) - document.addEventListener("mouseup", function (e) { - that.resizeEditor(); + document.addEventListener("mouseup", (e) => { + this.resizeEditor(); }); - this.observer = new ResizeObserver(function (entries) { + this.observer = new ResizeObserver((entries) => { for (const _entry of entries) { - that.resizeEditor(); + this.resizeEditor(); } }); @@ -237,71 +269,72 @@ export class IC10Editor extends BaseElement { async initializeEditor() { let editor = this.editor; - const that = this; - const app = await window.App.get(); - app.session.onLoad((_e) => { - const session = app.session; - const updated_ids: number[] = []; - for (const [id, code] of session.programs) { - updated_ids.push(id); - that.createOrSetSession(id, code.peek()); + effect(() => { + const vm = this.vm.value; + const vmState = vm?.state + const circuitHolders = vmState?.circuitHolderIds.value ?? []; + const seenIds: ObjectID[] = []; + for (const id of circuitHolders) { + seenIds.push(id); + const prog = vmState?.getObjectProgramSource(id); + this.createOrSetSession(id, prog?.value ?? ""); } - that.activateSession(that.activeSession); - for (const [id, _] of that.sessions) { - if (!updated_ids.includes(id)) { - that.destroySession(id); - } - } - }); - app.session.loadFromFragment(); + const activeSession = this.app.value.session.activeEditorSession.value ?? circuitHolders[0]; - app.session.onActiveLine((e) => { - const session = app.session; - const id: number = e.detail; - const active_line = session.getActiveLine(id); - if (typeof active_line !== "undefined") { - const marker = that.activeLineMarkers.get(id); - if (marker) { - that.sessions.get(id)?.removeMarker(marker); - that.activeLineMarkers.set(id, null); - } - const session = that.sessions.get(id); - if (session) { - that.activeLineMarkers.set( - id, - session.addMarker( - new Range(active_line.value, 0, active_line.value, 1), - "vm_ic_active_line", - "fullLine", - true, - ), - ); - if (that.activeSession == id) { - // editor.resize(true); - // TODO: Scroll to line if vm was stepped - //that.editor.scrollToLine(active_line, true, true, ()=>{}) - } + if (isSome(activeSession)) this.activateSession(activeSession); + for (const [id, _] of this.sessions) { + if (!seenIds.includes(id)) { + this.destroySession(id); } } }); - app.session.onIDChange((e) => { - const oldID = e.detail.old; - const newID = e.detail.new; - if (this.sessions.has(oldID)) { - this.sessions.set(newID, this.sessions.get(oldID)); - this.sessions.delete(oldID); - } - if (this.activeLineMarkers.has(oldID)) { - this.activeLineMarkers.set(newID, this.activeLineMarkers.get(oldID)); - this.activeLineMarkers.delete(oldID); - } - if (this.activeSession === oldID) { - this.activeSession = newID; + // this.app.value.session.loadFromFragment(); + + this.errorTooltip.setDataProvider((e, editor) => { + const docPos = e.getDocumentPosition(); + const editorSession: ExtendedEditSession = editor.session; + const errorMarker: ExtendedMarkerGroupItem = editorSession.state?.errorMarkers?.getMarkerAtPosition(docPos); + if (!errorMarker) return; + const range: Ace.Range = errorMarker.range; + if (!range) return; + if ( + docPos.row < range.start.row || + docPos.row > range.end.row || + docPos.column < range.start.column || + docPos.column > range.end.column) { + return; } + const domNode = document.createElement("div") + const tooltipHtml = marked.parseInline(errorMarker.tooltipText?.trim() ?? "", { async: false }); + domNode.innerHTML = tooltipHtml; + + this.errorTooltip.showForRange(editor, range, domNode, e) }); + this.errorTooltip.addToEditor(editor); + + this.activeLineTooltip.setDataProvider((e, editor) => { + const docPos = e.getDocumentPosition(); + const editorSession: ExtendedEditSession = editor.session; + const activeLineMarker: Ace.MarkerLike = editorSession.getMarkers(true)[editorSession.state?.activeLineMarker]; + if (!activeLineMarker || activeLineMarker.clazz !== "vm_ic_active_line") return; + const range: Ace.Range = activeLineMarker.range; + if (!range) return; + if (docPos.row !== range.start.row) return; + + const domNode = document.createElement("div") + const activeLine = activeLineMarker.range.start.row; + const tooltipHtml = marked.parseInline(`Instruction Pointer: Line ${activeLine}`, { async: false }); + domNode.innerHTML = tooltipHtml; + + this.activeLineTooltip.showForRange(editor, range, domNode, e) + }) + + /// not sure a tooltip is needed + // this.activeLineTooltip.addToEditor(editor); + // change -> possibility to allow saving the value without having to wait for blur editor.on("change", () => this.editorChangeAction()); @@ -335,7 +368,7 @@ export class IC10Editor extends BaseElement { // description: "Show settings menu", bindKey: { win: "Ctrl-,", mac: "Command-," }, exec: (_editor: Ace.Editor) => { - that.settingDialog.show(); + this.settingDialog.show(); }, }, { @@ -345,7 +378,7 @@ export class IC10Editor extends BaseElement { mac: "Command-Alt-h", }, exec: (_editor: Ace.Editor) => { - that.kbShortcuts.show(); + this.kbShortcuts.show(); }, }, ]); @@ -365,25 +398,28 @@ export class IC10Editor extends BaseElement { )! as SlSwitch; keyboardRadio.addEventListener("sl-change", (_e) => { - that.settings.keyboard = keyboardRadio.value; - that.updateEditorSettings(); - that.saveEditorSettings(); + this.settings.keyboard = keyboardRadio.value; + this.updateEditorSettings(); + this.saveEditorSettings(); }); cursorRadio?.addEventListener("sl-change", (_e) => { - that.settings.cursor = cursorRadio.value; - that.updateEditorSettings(); - that.saveEditorSettings(); + this.settings.cursor = cursorRadio.value; + this.updateEditorSettings(); + this.saveEditorSettings(); }); fontSize?.addEventListener("sl-change", (_e) => { - that.settings.fontSize = parseInt(fontSize.value); - that.updateEditorSettings(); - that.saveEditorSettings(); + this.settings.fontSize = parseInt(fontSize.value); + this.updateEditorSettings(); + this.saveEditorSettings(); }); relativeLineNumbers?.addEventListener("sl-change", (_e) => { - that.settings.relativeLineNumbers = relativeLineNumbers.checked; - that.updateEditorSettings(); - that.saveEditorSettings(); + this.settings.relativeLineNumbers = relativeLineNumbers.checked; + this.updateEditorSettings(); + this.saveEditorSettings(); }); + + + this.dispatchEvent(new CustomEvent("editor-ready", { bubbles: true })) } resizeEditor() { @@ -396,13 +432,11 @@ export class IC10Editor extends BaseElement { } } - /** @private */ - _resizeEditor() { + private _resizeEditor() { this.editor.resize(); } - /** @private */ - _vScrollbarHandler() { + private _vScrollbarHandler() { var vScrollbar = this.shadowRoot?.querySelector( ".ace_scrollbar-v", ) as HTMLDivElement; @@ -417,8 +451,7 @@ export class IC10Editor extends BaseElement { } } - /** @private */ - _hScrollbarHandler() { + private _hScrollbarHandler() { var hScrollbar = this.shadowRoot?.querySelector( ".ace_scrollbar-h", ) as HTMLDivElement; @@ -467,24 +500,72 @@ export class IC10Editor extends BaseElement { } } - createOrSetSession(session_id: number, content: string) { - if (!this.sessions.has(session_id)) { - this.newSession(session_id, content); + createOrSetSession(id: ObjectID, content: string) { + if (!this.sessions.has(id)) { + this.newSession(id, content); } else { - this.sessions.get(session_id).setValue(content); + const session = this.sessions.get(id); + if (session.getValue() == content) return; + session.setValue(content); } } - newSession(session_id: number, content?: string) { - if (this.sessions.has(session_id)) { + newSession(id: ObjectID, content?: string) { + if (this.sessions.has(id)) { return false; } - const session = ace.createEditSession(content ?? "", this.mode as any); + const session: ExtendedEditSession = ace.createEditSession(content ?? "", this.mode as any); + if (!session.state) session.state = {}; + if (!session.state.errorMarkers) { + session.state.errorMarkers = new MarkerGroup(session); + } + + effect(() => { + const sessionErrors = this.vm.value?.state.getProgramErrors(id).value ?? []; + + session.state.errorMarkers.setMarkers(sessionErrors.map((err: LineError): ExtendedMarkerGroupItem => { + const icError = err.error; + const lineLength = session.doc.getLine(err.line).length + if (icError.typ === "ParseError") { + return { + range: new Range(icError.line, icError.start, icError.line, icError.end), + className: "ic10_editor_error_parse", + tooltipText: `Parse Error: ${icError.msg}` + }; + } else if (icError.typ === "DuplicateLabel") { + return { + range: new Range(icError.line, "label".length + 2, icError.line, "label".length + 2 + icError.label.length), + className: "ic10_editor_error_duplicate_label", + tooltipText: `Duplicate Label ${icError.label}: first seen on line ${icError.source_line}` + }; + } else { + return { + range: new Range(err.line, 0, err.line, lineLength), + className: "ic10_editor_error_runtime", + tooltipText: `Runtime Error: ${err.msg}` + }; + } + })) + }); + + effect(() => { + const activeLine = this.vm.value?.state.getCircuitInstructionPointer(id).value ?? 0; + if (session.state.activeLineMarker) { + session.removeMarker(session.state.activeLineMarker); + } + session.state.activeLineMarker = session.addMarker( + new Range(activeLine, 0, activeLine, 999), + "vm_ic_active_line", + "fullLine", + true, + ); + }) + session.setOptions({ firstLineNumber: 0, }); - this.sessions.set(session_id, session); - this.bindSession(session_id, session); + this.sessions.set(id, session); + this.bindSession(id, session); } setupLsp(lsp_worker: Worker) { @@ -502,6 +583,9 @@ export class IC10Editor extends BaseElement { // Create a language provider for web worker this.languageProvider = AceLanguageClient.for(serverData, options); this.languageProvider.registerEditor(this.editor); + /* TODO: setup a tooltip and marker group for runtime errors + * https://github.com/ajaxorg/ace/pull/5113/files + */ } activateSession(session_id: number) { @@ -513,7 +597,6 @@ export class IC10Editor extends BaseElement { const mode = ace.require(this.mode); const options = mode?.options ?? {}; this.languageProvider?.setSessionOptions(session, options); - this.activeSession = session_id; return true; } @@ -561,20 +644,20 @@ export class IC10Editor extends BaseElement { } const session = this.sessions.get(session_id); this.sessions.delete(session_id); - if ((this.activeSession = session_id)) { - this.activateSession(this.sessions.entries().next().value); - } session?.destroy(); return true; } - bindSession(session_id: number, session?: Ace.EditSession) { + bindSession(session_id: number, session?: ExtendedEditSession) { if (session) { session.on("change", () => { - var val = session.getValue(); - window.App.get().then((app) => - app.session.setProgramCode(session_id, val), - ); + if (session.state?.saveTimeout) { + clearTimeout(session.state.saveTimeout); + } + session.state.saveTimeout = setTimeout(() => { + var val = session.getValue(); + this.vm.value?.setCode(session_id, val); + }, 500) }); } } diff --git a/www/src/ts/presets/default.ts b/www/src/ts/presets/default.ts index 33af011..767b0b8 100644 --- a/www/src/ts/presets/default.ts +++ b/www/src/ts/presets/default.ts @@ -1,93 +1,30 @@ import { SessionDB } from "../sessionDB"; +import { genNetwork, objectFromTemplate } from "../database"; export const defaultVMState: SessionDB.CurrentDBVmState = { vm: { objects: [ - { - obj_info: { - id: 1, - prefab: "StructureCircuitHousing", - socketed_ic: 2, - slots: new Map([ - [0, { id: 2, quantity: 1 }], - ]), - connections: new Map([ - [0, 1], - ]), - // unused, provided to make compiler happy - name: undefined, - prefab_hash: undefined, - compile_errors: undefined, - parent_slot: undefined, - root_parent_human: undefined, - damage: undefined, - device_pins: undefined, - reagents: undefined, - logic_values: undefined, - slot_logic_values: undefined, - entity: undefined, - visible_devices: undefined, - memory: undefined, - source_code: undefined, - circuit: undefined, + objectFromTemplate("StructureCircuitHousing", { + id: 1, + slots: { + 0: { + quantity: 1, + occupant: 2 + } }, - template: undefined, - database_template: true, - }, - { - obj_info: { - id: 2, - prefab: "ItemIntegratedCircuit10", - source_code: "", - memory: new Array(512).fill(0), - circuit: { - instruction_pointer: 0, - yield_instruction_count: 0, - state: "Start", - aliases: new Map(), - defines: new Map(), - labels: new Map(), - registers: new Array(18).fill(0), - }, - - // unused, provided to make compiler happy - name: undefined, - prefab_hash: undefined, - compile_errors: undefined, - slots: undefined, - parent_slot: undefined, - root_parent_human: undefined, - damage: undefined, - device_pins: undefined, - connections: undefined, - reagents: undefined, - logic_values: undefined, - slot_logic_values: undefined, - entity: undefined, - socketed_ic: undefined, - visible_devices: undefined, - }, - template: undefined, - database_template: true, - }, + connections: { + 0: 1 + } + }), + objectFromTemplate("ItemIntegratedCircuit10", { + id: 2, + }), ], networks: [ - { - id: 1, + genNetwork(1, { devices: [1], - power_only: [], - channels: Array(8).fill(NaN) as [ - number, - number, - number, - number, - number, - number, - number, - number, - ], - }, + }) ], program_holders: [2], circuit_holders: [1], diff --git a/www/src/ts/presets/demo.ts b/www/src/ts/presets/demo.ts index b562eea..550782b 100644 --- a/www/src/ts/presets/demo.ts +++ b/www/src/ts/presets/demo.ts @@ -1,4 +1,5 @@ import { SessionDB } from "../sessionDB"; +import { NetworkChannels } from "../database"; export const demoCode = `# Highlighting Demo @@ -77,22 +78,6 @@ export const demoVMState: SessionDB.CurrentDBVmState = { connections: new Map([ [0, 1], ]), - // unused, provided to make compiler happy - name: undefined, - prefab_hash: undefined, - compile_errors: undefined, - parent_slot: undefined, - root_parent_human: undefined, - damage: undefined, - device_pins: undefined, - reagents: undefined, - logic_values: undefined, - slot_logic_values: undefined, - entity: undefined, - visible_devices: undefined, - memory: undefined, - source_code: undefined, - circuit: undefined, }, template: undefined, database_template: true, @@ -112,23 +97,6 @@ export const demoVMState: SessionDB.CurrentDBVmState = { labels: new Map(), registers: new Array(18).fill(0), }, - - // unused, provided to make compiler happy - name: undefined, - prefab_hash: undefined, - compile_errors: undefined, - slots: undefined, - parent_slot: undefined, - root_parent_human: undefined, - damage: undefined, - device_pins: undefined, - connections: undefined, - reagents: undefined, - logic_values: undefined, - slot_logic_values: undefined, - entity: undefined, - socketed_ic: undefined, - visible_devices: undefined, }, template: undefined, database_template: true, @@ -139,16 +107,7 @@ export const demoVMState: SessionDB.CurrentDBVmState = { id: 1, devices: [1], power_only: [], - channels: Array(8).fill(NaN) as [ - number, - number, - number, - number, - number, - number, - number, - number, - ], + channels: Array(8).fill(NaN) as NetworkChannels, }, ], program_holders: [2], diff --git a/www/src/ts/presets/index.ts b/www/src/ts/presets/index.ts index d28acc9..5b856fd 100644 --- a/www/src/ts/presets/index.ts +++ b/www/src/ts/presets/index.ts @@ -1,4 +1,6 @@ import { defaultVMState } from "./default"; import { demoVMState } from "./demo"; -export { defaultVMState, demoVMState }; +import * as Transform from "../database"; + +export { defaultVMState, demoVMState, Transform }; diff --git a/www/src/ts/session.ts b/www/src/ts/session.ts index a34fc35..08bf097 100644 --- a/www/src/ts/session.ts +++ b/www/src/ts/session.ts @@ -1,5 +1,4 @@ import type { - ICError, ObjectID, } from "ic10emu_wasm"; import { App } from "./app"; @@ -8,13 +7,13 @@ import { openDB, IDBPTransaction } from "idb"; import { TypedEventTarget, fromJson, - structuralEqual, toJson, } from "./utils"; import * as presets from "./presets"; import { computed, signal, Signal } from "@lit-labs/preact-signals"; import { SessionDB } from "sessionDB"; +import { VMState } from "virtualMachine/state"; const { demoVMState } = presets; export interface SessionEventMap { @@ -26,48 +25,24 @@ export interface SessionEventMap { "active-line": CustomEvent; } -export class Session extends TypedEventTarget() { - private _programs: Map>; - private _errors: Signal>; - private _activeIC: Signal; - private _activeLines: Signal>; - private _save_timeout?: ReturnType; - +export class Session extends TypedEventTarget(EventTarget) { + private _activeIC: Signal = signal(null); + private _activeEditorSession: Signal = signal(null); + private _save_timeout?: ReturnType = undefined; private app: App; + vmState: Signal = signal(null); + constructor(app: App) { super(); this.app = app; - this._programs = new Map(); - this._errors = signal(new Map()); - this._save_timeout = undefined; - this._activeIC = signal(null); - this._activeLines = signal(new Map()); this.loadFromFragment(); - const that = this; window.addEventListener("hashchange", (_event) => { - that.loadFromFragment(); + this.loadFromFragment(); }); } - get programs(): Map> { - return this._programs; - } - - set programs(programs: Iterable<[ObjectID, string]>) { - const seenIds: ObjectID[] = [] - for (const [id, code] of programs) { - this.setProgram(id, code); - seenIds.push(id); - } - for (const id of this._programs.keys()) { - if (!seenIds.includes(id)) { - this.setProgram(id, null); - } - } - } - get activeIC(): Signal { return this._activeIC; } @@ -77,74 +52,18 @@ export class Session extends TypedEventTarget() { this.dispatchCustomEvent("session-active-ic", this.activeIC.peek()); } - changeID(oldID: ObjectID, newID: ObjectID) { - if (this._programs.has(oldID)) { - this._programs.set(newID, this._programs.get(oldID)); - this._programs.delete(oldID); - } - this.dispatchCustomEvent("session-id-change", { old: oldID, new: newID }); + get activeEditorSession(): Signal { + return this._activeEditorSession; } - onIDChange(callback: (e: CustomEvent<{ old: ObjectID; new: ObjectID }>) => any) { - this.addEventListener("session-id-change", callback); + set activeEditorSession(val: ObjectID) { + this._activeEditorSession.value = val; } onActiveIc(callback: (e: CustomEvent) => any) { this.addEventListener("session-active-ic", callback); } - get errors() { - return this._errors; - } - - getActiveLine(id: ObjectID) { - return computed(() => this._activeLines.value.get(id)); - } - - setActiveLine(id: ObjectID, line: number) { - const last = this._activeLines.peek().get(id); - if (last !== line) { - this._activeLines.value = new Map([... this._activeLines.value.entries(), [id, line]]); - this._fireOnActiveLine(id); - } - } - - setProgramCode(id: ObjectID, code: string) { - this.setProgram(id, code); - if (this.app.vm) { - this.app.vm.updateCode(); - } - this.save(); - } - - getProgram(id: ObjectID): Signal { - if (!this._programs.has(id)) { - this._programs.set(id, signal(null)); - } - return this._programs.get(id); - } - - private setProgram(id: ObjectID, code: string) { - if (!this._programs.has(id)) { - this._programs.set(id, signal(code)); - } else { - this._programs.get(id).value = code; - } - } - - setProgramErrors(id: ObjectID, errors: ICError[]) { - this._errors.value = new Map([...this._errors.value.entries(), [id, errors]]); - this._fireOnErrors([id]); - } - - _fireOnErrors(ids: ObjectID[]) { - this.dispatchCustomEvent("session-errors", ids); - } - - onErrors(callback: (e: CustomEvent) => any) { - this.addEventListener("session-errors", callback); - } - onLoad(callback: (e: CustomEvent) => any) { this.addEventListener("session-load", callback); } @@ -188,19 +107,15 @@ export class Session extends TypedEventTarget() { if (typeof data === "string") { this.activeIC = 1; await vm.restoreVMState(demoVMState.vm); - this.programs = [[1, data]]; } else if ("programs" in data) { this.activeIC = 1; await vm.restoreVMState(demoVMState.vm); - this.programs = data.programs; } else if ("vm" in data) { - this.programs = []; const state = data.vm; // assign first so it's present when the // vm fires events this._activeIC.value = data.activeIC; await vm.restoreVMState(state); - this.programs = vm.getPrograms(); // assign again to fire event this.activeIC = data.activeIC; } diff --git a/www/src/ts/utils.ts b/www/src/ts/utils.ts index c47a67f..f42fbcf 100644 --- a/www/src/ts/utils.ts +++ b/www/src/ts/utils.ts @@ -75,6 +75,11 @@ function replacer(_key: any, value: any) { dataType: "Number", value: numberToString(value), }; + } else if (typeof value === "bigint") { + return { + dataType: "BigInt", + value: value.toString(), + } } else if (typeof value === "undefined") { return { dataType: "undefined", @@ -90,6 +95,8 @@ function reviver(_key: any, value: any) { return new Map(value.value); } else if (value.dataType === "Number") { return parseFloat(value.value); + } else if (value.dataType === "BigInt") { + return BigInt(value.value); } else if (value.dataType === "undefined") { return undefined; } @@ -348,14 +355,14 @@ export function clamp(val: number, min: number, max: number) { return Math.min(Math.max(val, min), max); } -// export type TypedEventTarget = { -// new(): TypedEventTargetInterface; -// }; - type Constructor = new (...args: any[]) => T -export const TypedEventTarget = ( +export const TypedEventTarget = < + EventMap extends object, + T extends Constructor +>( + superClass: T, ) => { - class TypedEventTargetClass extends EventTarget { + class TypedEventTargetClass extends superClass { dispatchCustomEvent( type: K, data?: EventMap[K] extends CustomEvent ? DetailData : never, @@ -369,7 +376,7 @@ export const TypedEventTarget = ( })) } } - return TypedEventTargetClass as Constructor>; + return TypedEventTargetClass as Constructor> & T; } interface TypedEventTargetInterface extends EventTarget { diff --git a/www/src/ts/virtualMachine/controls.ts b/www/src/ts/virtualMachine/controls.ts index 3174ed7..311f01d 100644 --- a/www/src/ts/virtualMachine/controls.ts +++ b/www/src/ts/virtualMachine/controls.ts @@ -4,9 +4,10 @@ import { BaseElement, defaultCss } from "components"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.js"; import { computed, Signal, SignalWatcher, watch } from "@lit-labs/preact-signals"; -import { FrozenObjectFull } from "ic10emu_wasm"; +import { FrozenObjectFull, LineError } from "ic10emu_wasm"; import { VMObjectMixin } from "./baseDevice"; import { createRef, Ref, ref } from "lit/directives/ref.js"; +import { isSome, structuralEqual } from "utils"; @customElement("vm-ic-controls") export class VMICControls extends VMObjectMixin(SignalWatcher(BaseElement)) { @@ -90,10 +91,17 @@ export class VMICControls extends VMObjectMixin(SignalWatcher(BaseElement)) { return this.vm.value?.state.circuitHolderIds.value ?? []; }); - errors = computed(() => { - const obj = this.vm.value?.state.getObject(this.activeIC.value).value; - return obj?.obj_info.compile_errors ?? []; - }); + errors = (() => { + let last: LineError[] = null + return computed(() => { + const obj = this.vm.value?.state.getProgramErrors(this.activeIC.value).value ?? []; + if (structuralEqual(last, obj)) { + return last; + } + last = obj; + return obj + }) + })(); icIP = computed(() => { const circuit = this.vm.value?.state.getCircuitInfo(this.activeIC.value).value; @@ -144,19 +152,35 @@ export class VMICControls extends VMObjectMixin(SignalWatcher(BaseElement)) { const icErrors = computed(() => { return this.errors.value.map( (err) => - typeof err === "object" - && "ParseError" in err - ? html`
- - Line: ${err.ParseError.line} - - ${"ParseError" in err ? err.ParseError.start : "N/A"}:${err.ParseError.end} - - ${err.ParseError.msg} -
` - : html`${JSON.stringify(err)}`, + html` +
+ + Line: ${err.line} ${err.error.typ === "ParseError" ? html`- ${err.error.start}:${err.error.end}` : nothing} + + ${err.msg} +
+ ` ) ?? nothing; }); + const icState = computed(() => { + const state = this.icState.value; + if (isSome(state) && typeof state === "object") { + if ("Sleep" in state) { + const date = new Date(state.Sleep[0]); + const seconds = state.Sleep[1]; + date.setSeconds(date.getSeconds() + seconds); + return html` +

Sleeping until

+

Seconds

+ `; + } else if ("Error" in state) { + return html`Error on Line ${state.Error.line}`; + } + } + return state; + }) + return html`
@@ -229,7 +253,7 @@ export class VMICControls extends VMObjectMixin(SignalWatcher(BaseElement)) {
Last State - ${watch(this.icState)} + ${watch(icState)}
@@ -245,7 +269,7 @@ export class VMICControls extends VMObjectMixin(SignalWatcher(BaseElement)) { window.VM.get().then((vm) => vm.run()); } _handleStepClick() { - window.VM.get().then((vm) => vm.step()); + window.VM.get().then((vm) => vm.step(true)); } _handleResetClick() { window.VM.get().then((vm) => vm.reset()); diff --git a/www/src/ts/virtualMachine/device/addDevice.ts b/www/src/ts/virtualMachine/device/addDevice.ts index af8a97b..90733fc 100644 --- a/www/src/ts/virtualMachine/device/addDevice.ts +++ b/www/src/ts/virtualMachine/device/addDevice.ts @@ -243,12 +243,12 @@ export class VMAddDeviceButton extends VMObjectMixin(BaseElement) { (result) => result.entry.prefab.prefab_name, (result) => html` - - + `, ); } else { diff --git a/www/src/ts/virtualMachine/device/template.ts b/www/src/ts/virtualMachine/device/template.ts index 00dda83..8409011 100644 --- a/www/src/ts/virtualMachine/device/template.ts +++ b/www/src/ts/virtualMachine/device/template.ts @@ -20,7 +20,7 @@ import { customElement, property, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; import { connectionFromConnectionInfo } from "./dbutils"; -import { crc32, displayNumber, isSome, parseNumber, structuralEqual } from "utils"; +import { crc32, displayNumber, isSome, parseNumber, structuralEqual, TypedEventTarget } from "utils"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; import SlSelect from "@shoelace-style/shoelace/dist/components/select/select.component.js"; import { VMDeviceCard } from "./card"; @@ -42,8 +42,17 @@ export interface ConnectionCableNetwork { }; } -@customElement("vm-device-template") -export class VmObjectTemplate extends VMObjectMixin(BaseElement) { +export interface VmObjectTemplateEventMap { + "add-object-template": CustomEvent +} + +@customElement("vm-object-template") +export class VmObjectTemplate extends VMObjectMixin( + TypedEventTarget< + VmObjectTemplateEventMap, + typeof BaseElement + >(BaseElement) +) { static styles = [ ...defaultCss, css` @@ -142,7 +151,8 @@ export class VmObjectTemplate extends VMObjectMixin(BaseElement) { ).map( (slot, _index) => ({ - typ: slot.typ, + typ: slot.class +, quantity: 0, }) as SlotTemplate, ); @@ -219,7 +229,7 @@ export class VmObjectTemplate extends VMObjectMixin(BaseElement) { } renderSlots(): HTMLTemplateResult { - return html`
`; + return html`
`; } renderReagents(): HTMLTemplateResult { @@ -408,15 +418,13 @@ export class VmObjectTemplate extends VMObjectMixin(BaseElement) { `; } async _handleAddButtonClick() { - this.dispatchEvent( - new CustomEvent("add-device-template", { bubbles: true }), - ); - // Typescript doesn't like fileds defined as `X | undefined` not being present, hence cast + this.dispatchCustomEvent("add-object-template", null, { bubbles: true }); + const objInfo: ObjectInfo = { - id: this.objectIDSignal.value, + id: (this.objectIDSignal.value ?? 0) > 0 ? this.objectIDSignal.value : undefined, name: this.objectName.value, prefab: this.prefabName, - } as ObjectInfo; + }; if (this.slots.value.length > 0) { const slotOccupants: [FrozenObject, number][] = this.slots.value.flatMap( @@ -459,12 +467,14 @@ export class VmObjectTemplate extends VMObjectMixin(BaseElement) { if (this.connections.value.length > 0) { objInfo.connections = new Map( - this.connections.value.flatMap((conn, index) => { - return typeof conn === "object" && - "CableNetwork" in conn && - typeof conn.CableNetwork.net !== "undefined" - ? ([[index, conn.CableNetwork.net]] as [number, number][]) - : ([] as [number, number][]); + this.connections.value.flatMap((conn, index): [number, ObjectID][] => { + return ( + typeof conn === "object" && + "CableNetwork" in conn && + typeof conn.CableNetwork.net !== "undefined" + ? ([[index, conn.CableNetwork.net]]) + : ([]) + ); }), ); } @@ -476,7 +486,6 @@ export class VmObjectTemplate extends VMObjectMixin(BaseElement) { const template: FrozenObject = { obj_info: objInfo, database_template: true, - template: undefined, }; await window.VM.vm.addObjectFrozen(template); diff --git a/www/src/ts/virtualMachine/index.ts b/www/src/ts/virtualMachine/index.ts index f14c7ec..37ab4ad 100644 --- a/www/src/ts/virtualMachine/index.ts +++ b/www/src/ts/virtualMachine/index.ts @@ -44,35 +44,34 @@ Comlink.transferHandlers.set("SpecialJson", comlinkSpecialJsonTransferHandler); const jsonErrorRegex = /((invalid type: .*)|(missing field .*)) at line (?\d+) column (?\d+)/; -class VirtualMachine extends TypedEventTarget() { +class VirtualMachine extends TypedEventTarget(EventTarget) { ic10vm: Comlink.Remote; templateDBPromise: Promise; state: VMState = new VMState(); - private vm_worker: Worker; - + private vmWorker: Worker; private app: App; constructor(app: App) { super(); this.app = app; this.setupVM(); + this.app.session.vmState.value = this.state; } async setupVM() { - this.vm_worker = new Worker(new URL("./vmWorker.ts", import.meta.url)); + this.vmWorker = new Worker(new URL("./vmWorker.ts", import.meta.url)); const loaded = (w: Worker) => new Promise((r) => w.addEventListener("message", r, { once: true })); - await Promise.all([loaded(this.vm_worker)]); + await Promise.all([loaded(this.vmWorker)]); console.info("VM Worker loaded"); - const vm = Comlink.wrap(this.vm_worker); + const vm = Comlink.wrap(this.vmWorker); this.ic10vm = vm; this.state.vm.value = await this.ic10vm.saveVMState(); this.templateDBPromise = this.ic10vm.getTemplateDatabase(); this.templateDBPromise.then((db) => this.setupTemplateDatabase(db)); - this.updateCode(); window.VM.set(this); } @@ -88,38 +87,11 @@ class VirtualMachine extends TypedEventTarget() { return ids; } - async updateCode() { - const progs = this.app.session.programs; - for (const id of progs.keys()) { - const attempt = Date.now().toString(16); - const vmProg = this.state.getObjectProgramSource(id).peek(); - const prog = progs.get(id).peek(); - if ( - vmProg && - prog && - vmProg !== prog - ) { - try { - console.time(`CompileProgram_${id}_${attempt}`); - await this.ic10vm.setCodeInvalid(id, prog); - const errors = await this.ic10vm.getCompileErrors(id); - this.app.session.setProgramErrors(id, errors); - this.dispatchCustomEvent("vm-object-modified", id); - } catch (err) { - this.handleVmError(err); - } finally { - console.timeEnd(`CompileProgram_${id}_${attempt}`); - } - } - } - this.update(false); - } - - async step() { + async step(ignoreError: boolean = false) { const ic = this.activeIC.peek(); if (ic) { try { - await this.ic10vm.stepProgrammable(ic, false); + await this.ic10vm.stepProgrammable(ic, ignoreError); } catch (err) { this.handleVmError(err); } @@ -204,36 +176,51 @@ class VirtualMachine extends TypedEventTarget() { old: oldID, new: newID, }); - this.app.session.changeID(oldID, newID); return true; } - async setRegister(index: number, val: number): Promise { - const ic = this.activeIC.peek(); - if (ic) { + async setCode(id: ObjectID, prog: string): Promise { + const attempt = Date.now().toString(16); + const vmProg = this.state.getObjectProgramSource(id).peek(); + if ( + vmProg && + prog && + vmProg !== prog + ) { try { - await this.ic10vm.setRegister(ic, index, val); + console.time(`CompileProgram_${id}_${attempt}`); + await this.ic10vm.setCodeInvalid(id, prog); } catch (err) { this.handleVmError(err); return false; + } finally { + console.timeEnd(`CompileProgram_${id}_${attempt}`); } await this.update(); - return true; } + return true; } - async setStack(addr: number, val: number): Promise { - const ic = this.activeIC.peek(); - if (ic) { - try { - await this.ic10vm.setMemory(ic, addr, val); - } catch (err) { - this.handleVmError(err); - return false; - } - await this.update(); - return true; + async setRegister(id: ObjectID, index: number, val: number): Promise { + try { + await this.ic10vm.setRegister(id, index, val); + } catch (err) { + this.handleVmError(err); + return false; } + await this.update(); + return true; + } + + async setStack(id: ObjectID, addr: number, val: number): Promise { + try { + await this.ic10vm.setMemory(id, addr, val); + } catch (err) { + this.handleVmError(err); + return false; + } + await this.update(); + return true; } async setObjectName(id: number, name: string): Promise { diff --git a/www/src/ts/virtualMachine/registers.ts b/www/src/ts/virtualMachine/registers.ts index 54acd23..78f2903 100644 --- a/www/src/ts/virtualMachine/registers.ts +++ b/www/src/ts/virtualMachine/registers.ts @@ -124,6 +124,6 @@ export class VMICRegisters extends VMObjectMixin(BaseElement) { const input = e.target as SlInput; const index = parseInt(input.getAttribute("key")!); const val = parseNumber(input.value); - window.VM.vm.setRegister(index, val); + window.VM.vm.setRegister(this.vm.value?.activeIC.value, index, val); } } diff --git a/www/src/ts/virtualMachine/stack.ts b/www/src/ts/virtualMachine/stack.ts index ade1418..0c820ca 100644 --- a/www/src/ts/virtualMachine/stack.ts +++ b/www/src/ts/virtualMachine/stack.ts @@ -103,6 +103,6 @@ export class VMICStack extends VMObjectMixin(BaseElement) { const input = e.target as SlInput; const index = parseInt(input.getAttribute("key")!); const val = parseNumber(input.value); - window.VM.get().then(vm => vm.setStack(index, val)); + window.VM.get().then(vm => vm.setStack(this.vm.value?.activeIC.value, index, val)); } } diff --git a/www/src/ts/virtualMachine/state.ts b/www/src/ts/virtualMachine/state.ts index aba2540..b2692e0 100644 --- a/www/src/ts/virtualMachine/state.ts +++ b/www/src/ts/virtualMachine/state.ts @@ -1,7 +1,6 @@ import { computed, ReadonlySignal, signal, Signal } from "@lit-labs/preact-signals"; -import { Obj } from "@popperjs/core"; -import { Class, Connection, FrozenCableNetwork, FrozenNetworks, FrozenObject, FrozenObjectFull, FrozenVM, ICInfo, LogicField, LogicSlotType, LogicType, ObjectID, Operand, Slot, TemplateDatabase } from "ic10emu_wasm"; -import { fromJson, isSome, structuralEqual } from "utils"; +import { Class, Connection, FrozenCableNetwork, FrozenObject, FrozenVM, ICInfo, ICState, LineError, LogicField, LogicSlotType, LogicType, ObjectID, Operand, Slot, TemplateDatabase } from "ic10emu_wasm"; +import { isSome, structuralEqual } from "utils"; export interface ObjectSlotInfo { @@ -18,12 +17,78 @@ export class VMState { vm: Signal = signal(null); templateDB: Signal = signal(null); - objectIds: ReadonlySignal = computed(() => this.vm.value?.objects.map((obj) => obj.obj_info.id) ?? []); - circuitHolderIds: ReadonlySignal = computed(() => this.vm.value?.circuit_holders ?? []); - programHolderIds: ReadonlySignal = computed(() => this.vm.value?.program_holders ?? []); - networkIds: ReadonlySignal = computed(() => this.vm.value?.networks.map((net) => net.id) ?? []); - wirelessTransmitterIds: ReadonlySignal = computed(() => this.vm.value?.wireless_transmitters ?? []); - wirelessReceivers: ReadonlySignal = computed(() => this.vm.value?.wireless_receivers ?? []); + objectIds: ReadonlySignal = (() => { + let last: ObjectID[] = null; + return computed(() => { + const ids = this.vm.value?.objects.map((obj) => obj.obj_info.id) ?? []; + if (structuralEqual(last, ids)) { + return last; + } + last = ids; + return ids; + }); + })(); + + circuitHolderIds: ReadonlySignal = (() => { + let last: ObjectID[] = null; + return computed(() => { + const ids = this.vm.value?.circuit_holders ?? []; + if (structuralEqual(last, ids)) { + return last; + } + last = ids; + return ids; + }); + })(); + + programHolderIds: ReadonlySignal = (() => { + let last: ObjectID[] = null; + return computed(() => { + const ids = this.vm.value?.program_holders ?? []; + if (structuralEqual(last, ids)) { + return last; + } + last = ids; + return ids; + }); + })(); + + networkIds: ReadonlySignal = (() => { + let last: ObjectID[] = null; + return computed(() => { + const ids = this.vm.value?.networks.map((net) => net.id) ?? []; + if (structuralEqual(last, ids)) { + return last; + } + last = ids; + return ids; + }); + })(); + + wirelessTransmitterIds: ReadonlySignal = (() => { + let last: ObjectID[] = null; + return computed(() => { + const ids = this.vm.value?.wireless_transmitters ?? []; + if (structuralEqual(last, ids)) { + return last; + } + last = ids; + return ids; + }); + })(); + + wirelessReceivers: ReadonlySignal = (() => { + let last: ObjectID[] = null; + return computed(() => { + const ids = this.vm.value?.wireless_receivers ?? []; + if (structuralEqual(last, ids)) { + return last; + } + last = ids; + return ids; + }); + })(); + defaultNetworkId: ReadonlySignal = computed(() => this.vm.value?.default_network_key ?? null); private _signalCache: Map>> = new Map(); @@ -521,6 +586,54 @@ export class VMState { return this.signalCacheGet(key) } + getCircuitDefines(id: ObjectID): ReadonlySignal> { + const key = `obj:${id},circuitDefines`; + if (!this.signalCacheHas(key)) { + let last: Record = null; + const s = computed((): Record => { + const circuit = this.getCircuitInfo(id).value; + const defines = circuit?.defines + const next = Object.fromEntries(defines?.entries() ?? []) + if (structuralEqual(last, next)) { + return last; + } + last = next; + return next; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getCircuitInstructionPointer(id: ObjectID): ReadonlySignal { + const key = `obj:${id},circuitInstructionPointer`; + if (!this.signalCacheHas(key)) { + const s = computed((): number => { + const circuit = this.getCircuitInfo(id).value; + const pointer = circuit?.instruction_pointer + return pointer ?? 0; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + getCircuitYieldInstructionCount(id: ObjectID): ReadonlySignal { + const key = `obj:${id},circuitYieldInstructionCount`; + if (!this.signalCacheHas(key)) { + const s = computed((): number => { + const circuit = this.getCircuitInfo(id).value; + const count = circuit?.yield_instruction_count + return count ?? 0; + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + getDeviceNumPins(id: ObjectID): ReadonlySignal { const key = `obj:${id},numPins`; if (!this.signalCacheHas(key)) { @@ -610,5 +723,83 @@ export class VMState { return this.signalCacheGet(key) } + getProgramErrors(id: ObjectID): ReadonlySignal { + const key = `obj:${id},programErrors` + if (!this.signalCacheHas(key)) { + let last: LineError[] = null; + const s = computed((): LineError[] => { + let ic = null; + if (this.circuitHolderIds.value?.includes(id)) { + const circuit = this.getObject(id).value; + ic = this.getObject(circuit?.obj_info.socketed_ic).value ?? null; + } else if (this.programHolderIds.value?.includes(id)) { + ic = this.getObject(id).value ?? null; + } else { + console.error(`(objectId: ${id}) does not refer to a object with a known program interface`) + return null; + } + const errors = ic?.obj_info.compile_errors?.flatMap((error): LineError[] => { + if (error.typ === "ParseError") { + return [{ + error, + line: error.line, + msg: error.msg, + }]; + } else if (error.typ === "DuplicateLabel") { + return [{ + error, + line: error.line, + msg: `duplicate label ${error.label}: first encountered on line ${error.source_line}` + }]; + } else { + return []; + } + }) ?? []; + const icState: ICState = ic?.obj_info.circuit.state; + if (typeof icState === "object" && "Error" in icState) { + errors.push(icState.Error); + } + if (structuralEqual(last, errors)) { + return last; + } + last = errors; + return errors + }); + this.signalCacheSet(key, s); + return s; + } + return this.signalCacheGet(key); + } + + circuitHolderErrors: ReadonlySignal> = (() => { + let last: Record = null; + return computed((): Record => { + const errors: Record = {} + this.circuitHolderIds.value.forEach(id => { + errors[id] = this.getProgramErrors(id).value + }) + if (structuralEqual(last, errors)) { + return last; + } + last = errors; + return errors; + }) + })(); + + circuitHolderActiveLines: ReadonlySignal> = (() => { + let last: Record = null; + return computed((): Record => { + const activeLines: Record = {} + this.circuitHolderIds.value.forEach(id => { + activeLines[id] = this.getCircuitInstructionPointer(id).value + }) + if (structuralEqual(last, activeLines)) { + return last; + } + last = activeLines; + return activeLines; + }) + })(); + } diff --git a/www/src/ts/virtualMachine/vmWorker.ts b/www/src/ts/virtualMachine/vmWorker.ts index 9f38b0b..fccde20 100644 --- a/www/src/ts/virtualMachine/vmWorker.ts +++ b/www/src/ts/virtualMachine/vmWorker.ts @@ -5,8 +5,8 @@ import type { import * as Comlink from "comlink"; -import prefabDatabase from "./prefabDatabase"; -import { comlinkSpecialJsonTransferHandler, parseNumber } from "utils"; +import prefabDatabase from "../database/prefabDatabase"; +import { comlinkSpecialJsonTransferHandler } from "utils"; Comlink.transferHandlers.set("SpecialJson", comlinkSpecialJsonTransferHandler); From a34fb426b7708c83d592401f63c26bae4da9602a Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Mon, 16 Sep 2024 21:40:51 -0700 Subject: [PATCH 49/50] refactor(vm+frontend): better logging, fix slot serialization Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- Cargo.lock | 3 + ic10emu/src/vm.rs | 49 ++++++++++++ ic10emu_wasm/Cargo.toml | 1 + ic10emu_wasm/src/lib.rs | 24 +++++- ic10emu_wasm/src/utils.rs | 9 --- ic10lsp_wasm/Cargo.toml | 2 + ic10lsp_wasm/src/lib.rs | 6 +- stationeers_data/src/templates.rs | 48 +++++++++++ www/cspell.json | 3 + www/src/ts/app/app.ts | 11 +-- www/src/ts/app/nav.ts | 5 +- www/src/ts/app/save.ts | 3 +- www/src/ts/database/index.ts | 6 +- www/src/ts/editor/ace.ts | 2 +- www/src/ts/editor/index.ts | 8 +- www/src/ts/editor/lspWorker.ts | 16 ++-- www/src/ts/editor/prompt_patch.ts | 2 - www/src/ts/log.ts | 51 ++++++++++++ www/src/ts/session.ts | 10 ++- www/src/ts/utils.ts | 15 ++-- www/src/ts/virtualMachine/device/card.ts | 6 +- .../ts/virtualMachine/device/slotAddDialog.ts | 4 +- www/src/ts/virtualMachine/device/template.ts | 3 +- www/src/ts/virtualMachine/index.ts | 20 ++--- www/src/ts/virtualMachine/state.ts | 16 ++-- www/src/ts/virtualMachine/vmWorker.ts | 80 ++++++++++++++----- 26 files changed, 310 insertions(+), 93 deletions(-) create mode 100644 www/src/ts/log.ts diff --git a/Cargo.lock b/Cargo.lock index f4a64db..d1c9b09 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -659,6 +659,7 @@ dependencies = [ "serde_with", "stationeers_data", "thiserror", + "tracing", "tracing-wasm", "tsify", "wasm-bindgen", @@ -694,6 +695,8 @@ dependencies = [ "js-sys", "tokio", "tower-lsp", + "tracing", + "tracing-wasm", "wasm-bindgen", "wasm-bindgen-futures", "wasm-streams", diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index 1096909..72ba687 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -113,16 +113,22 @@ impl VM { /// 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()); } + /// 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()); @@ -192,6 +198,7 @@ impl VM { /// 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, @@ -249,6 +256,7 @@ impl VM { /// 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); @@ -295,6 +303,7 @@ impl VM { } /// 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( @@ -322,6 +331,7 @@ impl VM { /// /// 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, @@ -385,6 +395,7 @@ impl VM { /// Set program code if it's valid /// 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 @@ -420,6 +431,7 @@ impl VM { /// Set program code and translate invalid lines to Nop, collecting errors /// 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 @@ -455,6 +467,7 @@ impl VM { /// 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 @@ -488,6 +501,7 @@ impl VM { /// 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 @@ -521,6 +535,7 @@ impl VM { /// 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, @@ -561,6 +576,7 @@ impl VM { /// 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, @@ -610,6 +626,7 @@ impl VM { } /// Set logic field on a logicable object + #[tracing::instrument] pub fn set_logic_field( self: &Rc, id: ObjectID, @@ -634,6 +651,7 @@ impl VM { } /// Set slot logic filed on device object + #[tracing::instrument] pub fn set_slot_logic_field( self: &Rc, id: ObjectID, @@ -661,6 +679,7 @@ impl VM { self.operation_modified.borrow().clone() } + #[tracing::instrument] pub fn step_programmable( self: &Rc, id: ObjectID, @@ -705,6 +724,7 @@ impl VM { } /// returns true if executed 128 lines, false if returned early. + #[tracing::instrument] pub fn run_programmable( self: &Rc, id: ObjectID, @@ -816,10 +836,12 @@ impl VM { Err(VMError::NoIC(id)) } + #[tracing::instrument] pub fn get_object(self: &Rc, id: ObjectID) -> Option { self.objects.borrow().get(&id).cloned() } + #[tracing::instrument] pub fn batch_device( self: &Rc, source: ObjectID, @@ -850,6 +872,7 @@ impl VM { .into_iter() } + #[tracing::instrument] pub fn get_device_same_network( self: &Rc, source: ObjectID, @@ -862,6 +885,7 @@ impl VM { } } + #[tracing::instrument] pub fn get_network_channel( self: &Rc, id: ObjectID, @@ -887,6 +911,7 @@ impl VM { } } + #[tracing::instrument] pub fn set_network_channel( self: &Rc, id: ObjectID, @@ -913,6 +938,7 @@ impl VM { } } + #[tracing::instrument] pub fn devices_on_same_network(self: &Rc, ids: &[ObjectID]) -> bool { for net in self.networks.borrow().values() { if net @@ -928,6 +954,7 @@ impl VM { } /// 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() @@ -944,6 +971,7 @@ impl VM { .concat() } + #[tracing::instrument] pub fn set_pin( self: &Rc, id: ObjectID, @@ -976,6 +1004,7 @@ impl VM { } } + #[tracing::instrument] pub fn set_device_connection( self: &Rc, id: ObjectID, @@ -1076,6 +1105,7 @@ impl VM { Ok(true) } + #[tracing::instrument] pub fn remove_device_from_network( self: &Rc, id: ObjectID, @@ -1108,6 +1138,7 @@ impl VM { } } + #[tracing::instrument] pub fn set_batch_device_field( self: &Rc, source: ObjectID, @@ -1129,6 +1160,7 @@ impl VM { .try_collect() } + #[tracing::instrument] pub fn set_batch_device_slot_field( self: &Rc, source: ObjectID, @@ -1151,6 +1183,7 @@ impl VM { .try_collect() } + #[tracing::instrument] pub fn set_batch_name_device_field( self: &Rc, source: ObjectID, @@ -1173,6 +1206,7 @@ impl VM { .try_collect() } + #[tracing::instrument] pub fn get_batch_device_field( self: &Rc, source: ObjectID, @@ -1195,6 +1229,7 @@ impl VM { Ok(LogicBatchMethodWrapper(mode).apply(&samples)) } + #[tracing::instrument] pub fn get_batch_name_device_field( self: &Rc, source: ObjectID, @@ -1218,6 +1253,7 @@ impl VM { Ok(LogicBatchMethodWrapper(mode).apply(&samples)) } + #[tracing::instrument] pub fn get_batch_name_device_slot_field( self: &Rc, source: ObjectID, @@ -1242,6 +1278,7 @@ impl VM { Ok(LogicBatchMethodWrapper(mode).apply(&samples)) } + #[tracing::instrument] pub fn get_batch_device_slot_field( self: &Rc, source: ObjectID, @@ -1265,6 +1302,7 @@ impl VM { Ok(LogicBatchMethodWrapper(mode).apply(&samples)) } + #[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)); @@ -1294,6 +1332,7 @@ impl VM { /// 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, @@ -1348,6 +1387,7 @@ impl VM { } /// returns former occupant id if any + #[tracing::instrument] pub fn remove_slot_occupant( self: &Rc, id: ObjectID, @@ -1368,6 +1408,7 @@ impl VM { 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)); @@ -1375,6 +1416,7 @@ impl VM { Ok(FrozenObject::freeze_object(&obj, self)?) } + #[tracing::instrument(skip(ids))] pub fn freeze_objects( self: &Rc, ids: impl IntoIterator, @@ -1389,6 +1431,7 @@ impl VM { .collect() } + #[tracing::instrument] pub fn freeze_network(self: &Rc, id: ObjectID) -> Result { Ok(self .networks @@ -1401,6 +1444,7 @@ impl VM { .into()) } + #[tracing::instrument(skip(ids))] pub fn freeze_networks( self: &Rc, ids: impl IntoIterator, @@ -1420,7 +1464,9 @@ impl VM { .collect::, VMError>>() } + #[tracing::instrument] pub fn save_vm_state(self: &Rc) -> Result { + tracing::trace!("saving vm state"); Ok(FrozenVM { objects: self .objects @@ -1449,7 +1495,9 @@ impl VM { }) } + #[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())?; @@ -1624,6 +1672,7 @@ impl VMTransaction { } 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 diff --git a/ic10emu_wasm/Cargo.toml b/ic10emu_wasm/Cargo.toml index 7b6934d..a871eac 100644 --- a/ic10emu_wasm/Cargo.toml +++ b/ic10emu_wasm/Cargo.toml @@ -27,6 +27,7 @@ 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"] diff --git a/ic10emu_wasm/src/lib.rs b/ic10emu_wasm/src/lib.rs index 60bd7f5..688580b 100644 --- a/ic10emu_wasm/src/lib.rs +++ b/ic10emu_wasm/src/lib.rs @@ -18,7 +18,7 @@ use serde_derive::{Deserialize, Serialize}; use stationeers_data::{ enums::script::{LogicSlotType, LogicType}, - templates::ObjectTemplate, + templates::{ObjectTemplate, Reagent}, }; use std::{collections::BTreeMap, rc::Rc}; @@ -60,6 +60,18 @@ impl IntoIterator for TemplateDatabase { } } +#[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); @@ -115,7 +127,7 @@ pub fn parse_value<'a, T: serde::Deserialize<'a>>( 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| { - log!("Found ignored key: {path}"); + tracing::warn!("Found ignored key: {path}"); }; serde_ignored::deserialize(path, &mut fun).map_err(|e| { eyre::eyre!( @@ -125,6 +137,7 @@ pub fn parse_value<'a, T: serde::Deserialize<'a>>( }) } +#[allow(non_snake_case)] #[wasm_bindgen] impl VMRef { #[wasm_bindgen(constructor)] @@ -137,6 +150,11 @@ impl VMRef { self.vm.import_template_database(db); } + #[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 = @@ -480,6 +498,6 @@ 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/utils.rs b/ic10emu_wasm/src/utils.rs index 7439406..55e764b 100644 --- a/ic10emu_wasm/src/utils.rs +++ b/ic10emu_wasm/src/utils.rs @@ -11,12 +11,3 @@ pub fn set_panic_hook() { web_sys::console::log_1(&"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()); - } -} diff --git a/ic10lsp_wasm/Cargo.toml b/ic10lsp_wasm/Cargo.toml index a6ebbfc..6cc34c8 100644 --- a/ic10lsp_wasm/Cargo.toml +++ b/ic10lsp_wasm/Cargo.toml @@ -26,6 +26,8 @@ wasm-bindgen-futures = { version = "0.4.42", features = [ 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] diff --git a/ic10lsp_wasm/src/lib.rs b/ic10lsp_wasm/src/lib.rs index b300c60..2034a14 100644 --- a/ic10lsp_wasm/src/lib.rs +++ b/ic10lsp_wasm/src/lib.rs @@ -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) }) @@ -67,7 +69,7 @@ pub async fn serve(config: ServerConfig) -> Result<(), JsValue> { }); 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/stationeers_data/src/templates.rs b/stationeers_data/src/templates.rs index 529c835..c1f94cf 100644 --- a/stationeers_data/src/templates.rs +++ b/stationeers_data/src/templates.rs @@ -174,11 +174,14 @@ impl From for ObjectTemplate { } } +#[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, } @@ -420,6 +423,7 @@ pub struct StructureTemplate { 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 { @@ -429,9 +433,12 @@ pub struct StructureSlotsTemplate { 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 { @@ -442,9 +449,12 @@ pub struct StructureLogicTemplate { #[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 { @@ -455,10 +465,13 @@ pub struct StructureLogicDeviceTemplate { #[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 { @@ -469,6 +482,8 @@ pub struct StructureLogicDeviceConsumerTemplate { #[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, @@ -476,6 +491,7 @@ pub struct StructureLogicDeviceConsumerTemplate { 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 { @@ -486,11 +502,14 @@ pub struct StructureLogicDeviceMemoryTemplate { #[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 { @@ -501,10 +520,13 @@ pub struct StructureCircuitHolderTemplate { #[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 { @@ -515,6 +537,8 @@ pub struct StructureLogicDeviceConsumerMemoryTemplate { #[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, @@ -534,6 +558,7 @@ pub struct ItemTemplate { 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 { @@ -543,9 +568,12 @@ pub struct ItemSlotsTemplate { 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 { @@ -555,10 +583,13 @@ pub struct ItemConsumerTemplate { 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 { @@ -569,9 +600,12 @@ pub struct ItemLogicTemplate { #[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 { @@ -582,10 +616,13 @@ pub struct ItemLogicMemoryTemplate { #[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 { @@ -596,9 +633,12 @@ pub struct ItemCircuitHolderTemplate { #[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 { @@ -608,10 +648,13 @@ pub struct ItemSuitTemplate { 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 { @@ -622,10 +665,13 @@ pub struct ItemSuitLogicTemplate { #[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 { @@ -636,6 +682,8 @@ pub struct ItemSuitCircuitHolderTemplate { #[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/cspell.json b/www/cspell.json index 2992b2e..7a7c288 100644 --- a/www/cspell.json +++ b/www/cspell.json @@ -60,6 +60,7 @@ "dbutils", "Depressurising", "deviceslength", + "dodgerblue", "endpos", "getd", "Hardsuit", @@ -72,6 +73,7 @@ "jetpack", "Keybind", "labelledby", + "lawngreen", "lbns", "leeoniya", "logicable", @@ -136,6 +138,7 @@ "VMIC", "VMUI", "vstack", + "whitesmoke", "whos" ], "flagWords": [], diff --git a/www/src/ts/app/app.ts b/www/src/ts/app/app.ts index 3a7c53d..4a85eee 100644 --- a/www/src/ts/app/app.ts +++ b/www/src/ts/app/app.ts @@ -9,6 +9,7 @@ import { IC10Editor } from "../editor"; import { Session } from "../session"; import { VirtualMachine } from "../virtualMachine"; import { openFile, saveFile } from "../utils"; +import * as log from "log"; import "../virtualMachine/ui"; import "./save"; @@ -103,8 +104,8 @@ export class App extends BaseElement {
${until( - mainBody, - html` + mainBody, + html`

@@ -115,7 +116,7 @@ export class App extends BaseElement {

` - )} + )}
@@ -138,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}`; @@ -155,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..a94cc98 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"; @@ -213,7 +214,7 @@ export class Nav extends BaseElement { `; } - firstUpdated(): void {} + firstUpdated(): void { } _menuClickHandler(e: CustomEvent) { const item = e.detail.item as SlMenuItem; @@ -248,7 +249,7 @@ export class Nav extends BaseElement { this.dispatchEvent(new CustomEvent("app-changelog", { bubbles: true })); break; default: - console.log("Unknown main menu item", item.value); + log.debug("Unknown main menu item", item.value); } } } diff --git a/www/src/ts/app/save.ts b/www/src/ts/app/save.ts index 14cc33d..cb62c3e 100644 --- a/www/src/ts/app/save.ts +++ b/www/src/ts/app/save.ts @@ -2,6 +2,7 @@ import { html, css} from "lit"; import { customElement, query, state } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; import { SessionDB } from "sessionDB"; +import * as log from "log"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.js"; import { repeat } from "lit/directives/repeat.js"; @@ -256,7 +257,7 @@ export class SaveDialog extends BaseElement { async _handleSaveButtonClick(_e: CustomEvent) { const name = this.saveInput.value; const app = await window.App.get(); - console.log(app); + log.debug(app); await app.session.saveLocal(name); this.saveDialog.hide(); } diff --git a/www/src/ts/database/index.ts b/www/src/ts/database/index.ts index dcb700e..801793b 100644 --- a/www/src/ts/database/index.ts +++ b/www/src/ts/database/index.ts @@ -6,7 +6,7 @@ import { isSome } from "utils"; export type PrefabName = keyof typeof prefabDatabase.prefabs; export type Prefab = typeof prefabDatabase.prefabs[K] export type ReagentName = keyof typeof prefabDatabase.reagents; -export type ReagentHash = (typeof prefabDatabase.reagents)[ReagentName]["Hash"] +export type ReagentHash = (typeof prefabDatabase.reagents)[ReagentName]["hash"] export type NetworkChannels = [number, number, number, number, number, number, number, number] export const validCircuitPrefabsNames = ["ItemIntegratedCircuit10"] as const; @@ -25,7 +25,7 @@ export interface ObjectFromTemplateOptions { obj: ObjectID, slot: number, } : never, - slots?: Prefab extends { slots: readonly unknown[] } ? Record extends { slots: {} } ? Record : never, @@ -102,7 +102,7 @@ export function objectFromTemplate( } if (isSome(options?.reagents)) { frozen.obj_info.reagents = new Map(Object.entries(options.reagents).map(([reagent, value]: [ReagentName, number]) => { - return [prefabDatabase.reagents[reagent].Hash, value] + return [prefabDatabase.reagents[reagent].hash, value] })) } diff --git a/www/src/ts/editor/ace.ts b/www/src/ts/editor/ace.ts index 536273d..484487b 100644 --- a/www/src/ts/editor/ace.ts +++ b/www/src/ts/editor/ace.ts @@ -10,7 +10,7 @@ import { Mode as TextMode } from "ace-builds/src-noconflict/mode-text"; export async function setupLspWorker() { // Create a web worker - let worker = new Worker(new URL("./lspWorker.ts", import.meta.url)); + let worker = new Worker(new URL("./lspWorker.ts", import.meta.url), { name: "ic10lsp-Worker" }); const loaded = (w: Worker) => new Promise((r) => w.addEventListener("message", r, { once: true })); diff --git a/www/src/ts/editor/index.ts b/www/src/ts/editor/index.ts index cb77f2a..ea1761e 100644 --- a/www/src/ts/editor/index.ts +++ b/www/src/ts/editor/index.ts @@ -40,6 +40,8 @@ import { VirtualMachine } from "virtualMachine"; import { isSome } from "utils"; import { Session } from "session"; +import * as log from "log"; + interface SessionStateExtension { state?: { errorMarkers?: Ace.MarkerGroup; @@ -108,7 +110,7 @@ export class IC10Editor extends BaseElement { constructor() { super(); - console.log("constructing editor"); + log.trace("constructing editor"); window.Editor = this; } @@ -158,7 +160,7 @@ export class IC10Editor extends BaseElement { async firstUpdated() { await this.setupApp(); - console.log("editor firstUpdated"); + log.trace("editor firstUpdated"); if (!ace.require("ace/ext/language_tools")) { await import("ace-builds/src-noconflict/ext-language_tools"); } @@ -608,7 +610,7 @@ export class IC10Editor extends BaseElement { const temp = Object.assign({}, this.settings, saved); Object.assign(this.settings, temp); } catch (e) { - console.log("error loading editor settings", e); + log.error("error loading editor settings", e); } } } diff --git a/www/src/ts/editor/lspWorker.ts b/www/src/ts/editor/lspWorker.ts index 7204a37..a84a279 100644 --- a/www/src/ts/editor/lspWorker.ts +++ b/www/src/ts/editor/lspWorker.ts @@ -1,5 +1,7 @@ import { ServerConfig, serve } from "ic10lsp_wasm"; +import * as log from "log"; + export const encoder = new TextEncoder(); export const decoder = new TextDecoder(); @@ -120,9 +122,7 @@ export class AsyncStreamQueueUint8Array async next(): Promise> { const done = false; - // console.log(`AsyncStream(${this.tag}) waiting for message`) const value = await this.dequeue(); - // console.log(`AsyncStream(${this.tag}) got message`, decoder.decode(value)) return { done, value }; } @@ -194,7 +194,7 @@ function sendClient(data: any) { async function listen() { let contentLength: number | null = null; let buffer = new Uint8Array(); - console.log("Worker: listening for lsp messages..."); + log.trace("Worker: listening for lsp messages..."); for await (const bytes of serverMsgStream) { buffer = Bytes.append(Uint8Array, buffer, bytes); let waitingForFullContent = false; @@ -236,18 +236,18 @@ async function listen() { try { const message = JSON.parse(delimited); - console.log( + log.debug( "Lsp Message:", `| This Loop: ${messagesThisLoop} |`, message, ); postMessage(message); } catch (e) { - console.log("Error parsing Lsp Message:", e); + log.error("Error parsing Lsp Message:", e); } } } - console.log("Worker: lsp message queue done?"); + log.debug("Worker: lsp message queue done?"); } listen(); @@ -255,9 +255,9 @@ listen(); postMessage("ready"); onmessage = function (e) { - console.log("Client Message:", e.data); + log.debug("Client Message:", e.data); sendClient(e.data); }; -console.log("Starting LSP..."); +log.trace("Starting LSP..."); start(); diff --git a/www/src/ts/editor/prompt_patch.ts b/www/src/ts/editor/prompt_patch.ts index 7cd4262..c4ffe1b 100644 --- a/www/src/ts/editor/prompt_patch.ts +++ b/www/src/ts/editor/prompt_patch.ts @@ -1,7 +1,5 @@ import { prompt as ace_prompt } from "ace-builds/src-noconflict/ext-prompt" -console.log(ace_prompt); - function prompt(editor: { cmdLine: { setTheme: (arg0: string) => void; }; }, message: any, options: any, callback: any) { ace_prompt(editor, message, options, callback); if (editor.cmdLine) { diff --git a/www/src/ts/log.ts b/www/src/ts/log.ts new file mode 100644 index 0000000..c47b3b4 --- /dev/null +++ b/www/src/ts/log.ts @@ -0,0 +1,51 @@ + +export function logHeaderFormatting(msg: string, style: string, origin: string,): string[] { + return [ + `%c${msg}%c ${origin}%c`, + style, + "color: gray; font-style: italic", + "color: inherit" + ]; +} + +declare var WorkerGlobalScope: { + prototype: any; + new(): any; +}; + +export function getOrigin(framesUp: number = 1) { + const origin = new Error().stack.split('\n')[framesUp + 1]; + if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) { + const workerName = self.name ?? "worker" + return `(worker: ${workerName})|${origin}`; + } else { + return origin; + } +} + +export function error(...args: any[]): void { + const header = logHeaderFormatting("ERROR", "color: red; background: #444", getOrigin()); + console.error(...header, ...args) +} + +export function warn(...args: any[]): void { + const header = logHeaderFormatting("WARN", "color: orange; background: #444", getOrigin()); + console.warn(...header, ...args) +} + +export function info(...args: any[]): void { + const header = logHeaderFormatting("INFO", "color: whitesmoke; background: #444", getOrigin()); + console.info(...header, ...args) +} + +export function debug(...args: any[]): void { + const header = logHeaderFormatting("DEBUG", "color: lawngreen; background: #444", getOrigin()); + console.debug(...header, ...args) +} + +export function trace(...args: any[]): void { + const header = logHeaderFormatting("TRACE", "color: dodgerblue; background: #444", getOrigin()); + console.log(...header, ...args) +} + + diff --git a/www/src/ts/session.ts b/www/src/ts/session.ts index 08bf097..b636c97 100644 --- a/www/src/ts/session.ts +++ b/www/src/ts/session.ts @@ -10,6 +10,8 @@ import { toJson, } from "./utils"; +import * as log from "log"; + import * as presets from "./presets"; import { computed, signal, Signal } from "@lit-labs/preact-signals"; import { SessionDB } from "sessionDB"; @@ -97,7 +99,7 @@ export class Session extends TypedEventTarget(object: T | null | undefined): object is T { return typeof object !== "undefined" && object !== null; @@ -230,7 +231,7 @@ export function makeRequest(opts: { export async function saveFile(content: BlobPart) { const blob = new Blob([content], { type: "text/plain" }); if (typeof window.showSaveFilePicker !== "undefined") { - console.log("Saving via FileSystem API"); + log.info("Saving via FileSystem API"); try { const saveHandle = await window.showSaveFilePicker({ types: [ @@ -247,10 +248,10 @@ export async function saveFile(content: BlobPart) { await ws.write(blob); await ws.close(); } catch (e) { - console.log(e); + log.error(e); } } else { - console.log("saving file via hidden link event"); + log.info("saving file via hidden link event"); var a = document.createElement("a"); const date = new Date().valueOf().toString(16); a.download = `code_${date}.ic10`; @@ -261,7 +262,7 @@ export async function saveFile(content: BlobPart) { export async function openFile(editor: Ace.Editor) { if (typeof window.showOpenFilePicker !== "undefined") { - console.log("opening file via FileSystem Api"); + log.info("opening file via FileSystem Api"); try { const [fileHandle] = await window.showOpenFilePicker(); const file = await fileHandle.getFile(); @@ -269,16 +270,16 @@ export async function openFile(editor: Ace.Editor) { const session = editor.getSession(); session.setValue(contents); } catch (e) { - console.log(e); + log.error(e); } } else { - console.log("opening file via hidden input event"); + log.info("opening file via hidden input event"); let input = document.createElement("input"); input.type = "file"; input.accept = ".txt,.ic10,.mips,text/*"; input.onchange = (_) => { const files = Array.from(input.files!); - console.log(files); + log.trace(files); const file = files[0]; var reader = new FileReader(); reader.onload = (e) => { diff --git a/www/src/ts/virtualMachine/device/card.ts b/www/src/ts/virtualMachine/device/card.ts index 0f738c8..7a086bf 100644 --- a/www/src/ts/virtualMachine/device/card.ts +++ b/www/src/ts/virtualMachine/device/card.ts @@ -15,6 +15,8 @@ import { repeat } from "lit/directives/repeat.js"; import { Connection } from "ic10emu_wasm"; import { createRef, ref, Ref } from "lit/directives/ref.js"; +import * as log from "log"; + export type CardTab = "fields" | "slots" | "reagents" | "networks" | "pins"; @customElement("vm-device-card") @@ -119,7 +121,7 @@ export class VMDeviceCard extends VMObjectMixin(BaseElement) { onImageErr(e: Event) { this.image_err = true; - console.log("Image load error", e); + log.error("Image load error", e); } thisIsActiveIc = computed(() => { @@ -327,7 +329,7 @@ export class VMDeviceCard extends VMObjectMixin(BaseElement) { }); const connectionSelectRef = this.getConnectionSelectRef(index); - selectOptions.subscribe(() => {this.forceSelectUpdate(connectionSelectRef)}) + selectOptions.subscribe(() => { this.forceSelectUpdate(connectionSelectRef) }) connNet.subscribe((net) => { if (isSome(connectionSelectRef.value)) { diff --git a/www/src/ts/virtualMachine/device/slotAddDialog.ts b/www/src/ts/virtualMachine/device/slotAddDialog.ts index 9548132..b98403c 100644 --- a/www/src/ts/virtualMachine/device/slotAddDialog.ts +++ b/www/src/ts/virtualMachine/device/slotAddDialog.ts @@ -82,8 +82,8 @@ export class VMSlotAddDialog extends VMObjectMixin(BaseElement) { const obj = this.vm.value?.state.getObject(this.objectIDSignal.value).value; if (isSome(obj)) { const template = obj.template; - const slot = "slots" in template ? template.slots[this.slotIndex.value] : null; - const typ = slot?.typ; + const slot = "slots" in template ? template.slots.get(this.slotIndex.value.toString()) : null; + const typ = typeof slot === "object" && "Direct" in slot ? slot.Direct.class : null; if (typeof typ === "string" && typ !== "None") { filtered = Array.from(Object.values(this.items.value)).filter( diff --git a/www/src/ts/virtualMachine/device/template.ts b/www/src/ts/virtualMachine/device/template.ts index 8409011..076431c 100644 --- a/www/src/ts/virtualMachine/device/template.ts +++ b/www/src/ts/virtualMachine/device/template.ts @@ -151,8 +151,7 @@ export class VmObjectTemplate extends VMObjectMixin( ).map( (slot, _index) => ({ - typ: slot.class -, + typ: typeof slot === "object" && "Direct" in slot ? slot.Direct.class : null, quantity: 0, }) as SlotTemplate, ); diff --git a/www/src/ts/virtualMachine/index.ts b/www/src/ts/virtualMachine/index.ts index 37ab4ad..d3e24d2 100644 --- a/www/src/ts/virtualMachine/index.ts +++ b/www/src/ts/virtualMachine/index.ts @@ -28,6 +28,8 @@ import { import { getJsonContext } from "./jsonErrorUtils"; import { VMState } from "./state"; +import * as log from "log"; + export interface VirtualMachineEventMap { "vm-template-db-loaded": CustomEvent; "vm-objects-update": CustomEvent; @@ -62,11 +64,11 @@ class VirtualMachine extends TypedEventTarget new Promise((r) => w.addEventListener("message", r, { once: true })); await Promise.all([loaded(this.vmWorker)]); - console.info("VM Worker loaded"); + log.info("VM Worker loaded"); const vm = Comlink.wrap(this.vmWorker); this.ic10vm = vm; this.state.vm.value = await this.ic10vm.saveVMState(); @@ -133,11 +135,11 @@ class VirtualMachine extends TypedEventTarget { let id = undefined; try { - console.log("adding device", frozen); + log.trace("adding device", frozen); id = await this.ic10vm.addObjectFrozen(frozen); } catch (err) { this.handleVmError(err); @@ -329,7 +331,7 @@ class VirtualMachine extends TypedEventTarget { let ids = undefined; try { - console.log("adding devices", frozenObjects); + log.trace("adding devices", frozenObjects); ids = await this.ic10vm.addObjectsFrozen(frozenObjects); } catch (err) { this.handleVmError(err); @@ -357,7 +359,7 @@ class VirtualMachine extends TypedEventTarget { try { - console.log("setting slot occupant", frozen); + log.trace("setting slot occupant", frozen); await this.ic10vm.setSlotOccupant(id, index, frozen, quantity); } catch (err) { this.handleVmError(err); @@ -384,7 +386,7 @@ class VirtualMachine extends TypedEventTarget { const obj = this.getObject(id).value; const template = obj?.template; - return isSome(template) && "slots" in template ? template.slots.length : 0 + return isSome(template) && "slots" in template ? template.slots.size : 0 }); this.signalCacheSet(key, s); return s; @@ -248,13 +250,15 @@ export class VMState { const obj = this.getObject(id).value; const info = obj?.obj_info.slots.get(index); const template = obj?.template; - const slotTemplate = isSome(template) && "slots" in template ? template.slots[index] : null; + const slotTemplate = isSome(template) && "slots" in template ? template.slots.get(index.toString()) : null; + const name = typeof slotTemplate === "object" && "Direct" in slotTemplate ? slotTemplate.Direct.name : slotTemplate?.Proxy.name; + const typ = typeof slotTemplate === "object" && "Direct" in slotTemplate ? slotTemplate.Direct.class : null; if (isSome(obj)) { const next = { parent: obj?.obj_info.id, index, - name: slotTemplate?.name, - typ: slotTemplate?.typ, + name, + typ, quantity: info?.quantity, occupant: info?.id } @@ -713,7 +717,7 @@ export class VMState { } else if (this.programHolderIds.value?.includes(id)) { return this.getObject(id).value?.obj_info.source_code ?? null; } else { - console.error(`(objectId: ${id}) does not refer to a object with a known program interface`) + log.error(`(objectId: ${id}) does not refer to a object with a known program interface`) return null; } }) @@ -735,7 +739,7 @@ export class VMState { } else if (this.programHolderIds.value?.includes(id)) { ic = this.getObject(id).value ?? null; } else { - console.error(`(objectId: ${id}) does not refer to a object with a known program interface`) + log.error(`(objectId: ${id}) does not refer to a object with a known program interface`) return null; } const errors = ic?.obj_info.compile_errors?.flatMap((error): LineError[] => { diff --git a/www/src/ts/virtualMachine/vmWorker.ts b/www/src/ts/virtualMachine/vmWorker.ts index fccde20..14e9ba5 100644 --- a/www/src/ts/virtualMachine/vmWorker.ts +++ b/www/src/ts/virtualMachine/vmWorker.ts @@ -1,42 +1,78 @@ import { VMRef, init } from "ic10emu_wasm"; import type { - TemplateDatabase, + Reagent, + ObjectTemplate, } from "ic10emu_wasm"; import * as Comlink from "comlink"; +import * as log from "log"; + import prefabDatabase from "../database/prefabDatabase"; import { comlinkSpecialJsonTransferHandler } from "utils"; Comlink.transferHandlers.set("SpecialJson", comlinkSpecialJsonTransferHandler); -console.info("Processing Json prefab Database ", prefabDatabase); const vm: VMRef = init(); -const start_time = performance.now(); -const template_database = new Map( - Object.entries(prefabDatabase.prefabsByHash).map(([hash, prefabName]) => [ - parseInt(hash), - prefabDatabase.prefabs[prefabName], - ]), -) as TemplateDatabase; -console.info("Loading Prefab Template Database into VM", template_database); -try { - // vm.importTemplateDatabase(template_database); - vm.importTemplateDatabase(template_database); - const now = performance.now(); - const time_elapsed = (now - start_time) / 1000; - console.info(`Prefab Template Database loaded in ${time_elapsed} seconds`); -} catch (e) { - if ("stack" in e) { - console.error("Error importing template database:", e.toString(), e.stack); - } else { - console.error("Error importing template database:", e.toString()); +log.info("Processing Json Database", prefabDatabase); +{ + const start_time = performance.now(); + const template_database = new Map( + Object.entries(prefabDatabase.prefabsByHash).map(([hash, prefabName]) => [ + parseInt(hash), + prefabDatabase.prefabs[prefabName] as ObjectTemplate, + ]), + ); + log.info("Loading Prefab Template Database into VM", template_database); + + try { + vm.importTemplateDatabase(template_database); + const now = performance.now(); + const time_elapsed = (now - start_time) / 1000; + log.info(`Prefab Template Database loaded in ${time_elapsed} seconds`); + } catch (e) { + if ("stack" in e) { + log.error("Error importing template database:", e.toString(), e.stack); + } else { + log.error("Error importing template database:", e.toString()); + } } - console.info(JSON.stringify(template_database)); } + +{ + const start_time = performance.now(); + const reagent_database = new Map( + Object.entries(prefabDatabase.reagents).map(([_name, entry]) => [ + entry.id, + { + id: entry.id satisfies number, + name: entry.name satisfies string, + hash: entry.hash satisfies number, + unit: entry.unit satisfies string, + is_organic: entry.is_organic satisfies boolean, + sources: new Map(Object.entries(entry.sources)) + } satisfies Reagent + ]) + ) + log.info("Loading Reagent Database into VM", reagent_database); + + try { + vm.importReagentDatabase(reagent_database); + const now = performance.now(); + const time_elapsed = (now - start_time) / 1000; + log.info(`Prefab Reagent Database loaded in ${time_elapsed} seconds`); + } catch (e) { + if ("stack" in e) { + log.error("Error importing reagent database:", e.toString(), e.stack); + } else { + log.error("Error importing reagent database:", e.toString()); + } + } +} + postMessage("ready"); Comlink.expose(vm); From 87959efa1ed97b406a4f403de95b4b5ea8f27146 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Tue, 17 Sep 2024 15:12:32 -0700 Subject: [PATCH 50/50] refactor(frontend): bump rebuild to v1.0 Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- www/cspell.json | 7 +- www/package.json | 28 +- www/pnpm-lock.yaml | 1416 +++++++++-------- www/rsbuild.config.ts | 19 +- www/src/ts/app/app.ts | 8 +- www/src/ts/app/nav.ts | 6 +- www/src/ts/app/save.ts | 18 +- www/src/ts/app/share.ts | 6 +- www/src/ts/app/welcome.ts | 6 +- www/src/ts/components/details.ts | 2 +- www/src/ts/editor/ace.ts | 12 +- www/src/ts/editor/index.ts | 8 +- www/src/ts/editor/shortcuts_ui.ts | 8 +- www/src/ts/virtualMachine/baseDevice.ts | 2 +- www/src/ts/virtualMachine/device/addDevice.ts | 4 +- www/src/ts/virtualMachine/device/card.ts | 4 +- .../ts/virtualMachine/device/deviceList.ts | 4 +- www/src/ts/virtualMachine/device/slot.ts | 2 +- .../ts/virtualMachine/device/slotAddDialog.ts | 4 +- www/tsconfig.json | 7 +- 20 files changed, 816 insertions(+), 755 deletions(-) diff --git a/www/cspell.json b/www/cspell.json index 7a7c288..7db59c6 100644 --- a/www/cspell.json +++ b/www/cspell.json @@ -52,6 +52,7 @@ "brnaz", "brne", "brnez", + "bson", "Circuitboard", "clazz", "codegen", @@ -61,6 +62,7 @@ "Depressurising", "deviceslength", "dodgerblue", + "dont", "endpos", "getd", "Hardsuit", @@ -76,6 +78,7 @@ "lawngreen", "lbns", "leeoniya", + "lightdom", "logicable", "LogicSlotType", "logicslottypes", @@ -131,6 +134,7 @@ "stationpedia", "tablist", "tabpanel", + "tailwindcss", "themelist", "tokentype", "trunc", @@ -139,7 +143,8 @@ "VMUI", "vstack", "whitesmoke", - "whos" + "whos", + "wicg" ], "flagWords": [], "language": "en", diff --git a/www/package.json b/www/package.json index acca53f..4250ca7 100644 --- a/www/package.json +++ b/www/package.json @@ -25,25 +25,25 @@ "homepage": "https://github.com/ryex/ic10emu#readme", "devDependencies": { "@oneidentity/zstd-js": "^1.0.3", - "@rsbuild/core": "^0.7.10", - "@rsbuild/plugin-image-compress": "^0.7.10", - "@rsbuild/plugin-sass": "^0.7.10", - "@rsbuild/plugin-type-check": "^0.7.10", - "@rspack/cli": "^0.7.5", - "@rspack/core": "^0.7.5", - "@swc/helpers": "^0.5.12", + "@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.77.8", - "tailwindcss": "^3.4.10", + "sass": "^1.78.0", + "tailwindcss": "^3.4.12", "ts-lit-plugin": "^2.0.2", "ts-loader": "^9.5.1", - "typescript": "^5.5.4", + "typescript": "^5.6.2", "typescript-lit-html-plugin": "^0.9.0" }, "dependencies": { @@ -52,8 +52,8 @@ "@lit/context": "^1.1.2", "@popperjs/core": "^2.11.8", "@shoelace-style/shoelace": "^2.16.0", - "ace-builds": "^1.36.0", - "ace-linters": "^1.3.0", + "ace-builds": "^1.36.2", + "ace-linters": "^1.3.2", "bootstrap": "^5.3.3", "bson": "^6.8.0", "buffer": "^6.0.3", @@ -65,7 +65,7 @@ "jquery": "^3.7.1", "lit": "^3.2.0", "lzma-web": "^3.0.1", - "marked": "^14.0.0", + "marked": "^14.1.2", "stream-browserify": "^3.0.0", "uuid": "^10.0.0", "vm-browserify": "^1.1.2" diff --git a/www/pnpm-lock.yaml b/www/pnpm-lock.yaml index 843e8be..9d0a40c 100644 --- a/www/pnpm-lock.yaml +++ b/www/pnpm-lock.yaml @@ -24,11 +24,11 @@ importers: specifier: ^2.16.0 version: 2.16.0(@types/react@18.2.79) ace-builds: - specifier: ^1.36.0 - version: 1.36.0 + specifier: ^1.36.2 + version: 1.36.2 ace-linters: - specifier: ^1.3.0 - version: 1.3.0 + specifier: ^1.3.2 + version: 1.3.2 bootstrap: specifier: ^5.3.3 version: 5.3.3(@popperjs/core@2.11.8) @@ -63,8 +63,8 @@ importers: specifier: ^3.0.1 version: 3.0.1 marked: - specifier: ^14.0.0 - version: 14.0.0 + specifier: ^14.1.2 + version: 14.1.2 stream-browserify: specifier: ^3.0.0 version: 3.0.0 @@ -79,26 +79,26 @@ importers: specifier: ^1.0.3 version: 1.0.3 '@rsbuild/core': - specifier: ^0.7.10 - version: 0.7.10 + specifier: ^1.0.4 + version: 1.0.4 '@rsbuild/plugin-image-compress': - specifier: ^0.7.10 - version: 0.7.10(@rsbuild/core@0.7.10) + specifier: ^1.0.2 + version: 1.0.2(@rsbuild/core@1.0.4) '@rsbuild/plugin-sass': - specifier: ^0.7.10 - version: 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.12) + specifier: ^1.0.1 + version: 1.0.1(@rsbuild/core@1.0.4) '@rsbuild/plugin-type-check': - specifier: ^0.7.10 - version: 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.12)(typescript@5.5.4) + specifier: ^1.0.1 + version: 1.0.1(@rsbuild/core@1.0.4)(typescript@5.6.2) '@rspack/cli': - specifier: ^0.7.5 - version: 0.7.5(@rspack/core@0.7.5(@swc/helpers@0.5.12))(@types/express@4.17.21)(webpack@5.93.0) + 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: ^0.7.5 - version: 0.7.5(@swc/helpers@0.5.12) + specifier: ^1.0.5 + version: 1.0.5(@swc/helpers@0.5.13) '@swc/helpers': - specifier: ^0.5.12 - version: 0.5.12 + specifier: ^0.5.13 + version: 0.5.13 '@types/ace': specifier: ^0.0.52 version: 0.0.52 @@ -110,31 +110,31 @@ importers: version: 2023.10.5 fork-ts-checker-webpack-plugin: specifier: ^9.0.2 - version: 9.0.2(typescript@5.5.4)(webpack@5.93.0) + 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.93.0) + version: 2.0.1(webpack@5.94.0) mini-css-extract-plugin: - specifier: ^2.9.0 - version: 2.9.0(webpack@5.93.0) + specifier: ^2.9.1 + version: 2.9.1(webpack@5.94.0) postcss-loader: specifier: ^8.1.1 - version: 8.1.1(@rspack/core@0.7.5(@swc/helpers@0.5.12))(postcss@8.4.41)(typescript@5.5.4)(webpack@5.93.0) + 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.77.8 - version: 1.77.8 + specifier: ^1.78.0 + version: 1.78.0 tailwindcss: - specifier: ^3.4.10 - version: 3.4.10 + 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.5.4)(webpack@5.93.0) + version: 9.5.1(typescript@5.6.2)(webpack@5.94.0) typescript: - specifier: ^5.5.4 - version: 5.5.4 + specifier: ^5.6.2 + version: 5.6.2 typescript-lit-html-plugin: specifier: ^0.9.0 version: 0.9.0 @@ -157,8 +157,8 @@ packages: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.25.0': - resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} + '@babel/runtime@7.25.6': + resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} engines: {node: '>=6.9.0'} '@bufbuild/protobuf@1.10.0': @@ -184,14 +184,14 @@ packages: '@emnapi/wasi-threads@1.0.1': resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} - '@floating-ui/core@1.6.7': - resolution: {integrity: sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==} + '@floating-ui/core@1.6.8': + resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} - '@floating-ui/dom@1.6.10': - resolution: {integrity: sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==} + '@floating-ui/dom@1.6.11': + resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==} - '@floating-ui/utils@0.2.7': - resolution: {integrity: sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==} + '@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==} @@ -218,6 +218,24 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@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==} @@ -241,17 +259,17 @@ packages: '@lit/reactive-element@2.0.4': resolution: {integrity: sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==} - '@module-federation/runtime-tools@0.1.6': - resolution: {integrity: sha512-7ILVnzMIa0Dlc0Blck5tVZG1tnk1MmLnuZpLOMpbdW+zl+N6wdMjjHMjEZFCUAJh2E5XJ3BREwfX8Ets0nIkLg==} + '@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==} + '@module-federation/runtime@0.5.1': + resolution: {integrity: sha512-xgiMUWwGLWDrvZc9JibuEbXIbhXg6z2oUkemogSvQ4LKvrl/n0kbqP1Blk669mXzyWbqtSp6PpvNdwaE1aN5xQ==} - '@module-federation/sdk@0.1.6': - resolution: {integrity: sha512-qifXpyYLM7abUeEOIfv0oTkguZgRZuwh89YOAYIZJlkP6QbRG7DJMQvtM8X2yHXm9PTk0IYNnOJH0vNQCo6auQ==} + '@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==} + '@module-federation/webpack-bundler-runtime@0.5.1': + resolution: {integrity: sha512-mMhRFH0k2VjwHt3Jol9JkUsmI/4XlrAoBG3E0o7HoyoPYv1UFOWyqAflfANcUPgbYpvqmyLzDcO+3IT36LXnrA==} '@napi-rs/image-android-arm64@1.9.2': resolution: {integrity: sha512-DQNI06ukKqpF4eogz9zyxfU+GYp11TfDqSNWKmk/IRU2oiB0DEgskuj7ZzaKMPJWFRZjI86V233UrrNRh76h2Q==} @@ -359,85 +377,88 @@ packages: '@preact/signals-core@1.8.0': resolution: {integrity: sha512-OBvUsRZqNmjzCZXWLxkZfhcgT+Fk8DDcT/8vD6a1xhDemodyy87UJRJfASMuSD8FaAIeGgGm85ydXhm7lr4fyA==} - '@rsbuild/core@0.7.10': - resolution: {integrity: sha512-m+JbPpuMFuVsMRcsjMxvVk6yc//OW+h72kV2DAD4neoiM0YhkEAN4TXBz3RSOomXHODhhxqhpCqz9nIw6PtvBA==} - engines: {node: '>=16.0.0'} + '@rsbuild/core@1.0.4': + resolution: {integrity: sha512-ACvCzeyW5gW5olGBzK5Tnc5RfUOQ+BPnMB7Y0Iycz0pRYAghKQcYkpPZlEpdsKQDNeBUKk9loOy+Z7Rca4Ouzw==} + engines: {node: '>=16.7.0'} hasBin: true - '@rsbuild/plugin-image-compress@0.7.10': - resolution: {integrity: sha512-Wu81DXQR3jl+JqrrLAAfz52uA+Z4GnNyQ1wRxVpvyz6mWs3yGF0iXIg1JebJ8eLtkYWQIGMgTttJJYI4g0cYqQ==} + '@rsbuild/plugin-image-compress@1.0.2': + resolution: {integrity: sha512-+WFx3bBzP2TAM+lv98HFOaXdX8i10b0jbmO68EzC2r3ftnzbb5wTJGiybaJ8joeeCZ8e6SsSE9T1qb0cPsTbMA==} peerDependencies: - '@rsbuild/core': ^0.7.10 + '@rsbuild/core': 1.x || ^1.0.1-beta.0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true - '@rsbuild/plugin-sass@0.7.10': - resolution: {integrity: sha512-gtYNH+xgxWyroG1z2wqh/l7v88CiH89HtrIs+BbEgn1CV12dQvMI3YtF4aEwS6Ogr+byomdirFLhdBy0WBCbzQ==} + '@rsbuild/plugin-sass@1.0.1': + resolution: {integrity: sha512-gybEWXc5kUAc3eur7LJRfWiG9tA5sdDUNo++Fy2pSRhVdYRMLUtKq4YOTmLCYHQ8b7vWRbmv8keqX34ynBm8Bg==} peerDependencies: - '@rsbuild/core': ^0.7.10 + '@rsbuild/core': 1.x || ^1.0.1-rc.0 - '@rsbuild/plugin-type-check@0.7.10': - resolution: {integrity: sha512-EGNeHEZEWvABqTGt+CEtw5kQskNrg2nch4wRuAechPgmHmzU/k65EoXTMsB/ImmcdUeU2ax2kdlQOdxs6fNgoA==} + '@rsbuild/plugin-type-check@1.0.1': + resolution: {integrity: sha512-BahXAJNq4kWtL2dINUlrOL9UCN1t8c/qf5RW8JXx2HSSasfKPJGJ1BVfieMcIaFa/t8/QdafcwoxY1WKPTlSMg==} peerDependencies: - '@rsbuild/core': ^0.7.10 + '@rsbuild/core': 1.x || ^1.0.1-beta.0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true - '@rsbuild/shared@0.7.10': - resolution: {integrity: sha512-FwTm11DP7KxQKT2mWLvwe80O5KpikgMSlqnw9CQhBaIHSYEypdJU9ZotbNsXsHdML3xcqg+S9ae3bpovC7KlwQ==} - - '@rspack/binding-darwin-arm64@0.7.5': - resolution: {integrity: sha512-mNBIm36s1BA7v4SL/r4f3IXIsjyH5CZX4eXMRPE52lBc3ClVuUB7d/8zk8dkyjJCMAj8PsZSnAJ3cfXnn7TN4g==} + '@rspack/binding-darwin-arm64@1.0.5': + resolution: {integrity: sha512-pEHj4AOluOa7FaR1DMACPUUZKO3qZI4/66xaTqk0BbclvMT7eheQAWtkmjdE9WJgeZ389TrwZeaMzzPdHhK/6Q==} cpu: [arm64] os: [darwin] - '@rspack/binding-darwin-x64@0.7.5': - resolution: {integrity: sha512-teLK0TB1x0CsvaaiCopsFx4EvJe+/Hljwii6R7C9qOZs5zSOfbT/LQ202eA0sAGodCncARCGaXVrsekbrRYqeA==} + '@rspack/binding-darwin-x64@1.0.5': + resolution: {integrity: sha512-xS5EDD9l3MHL54bnmxsndm61P9l3l7ZNuLSuPl2MbYJzDqPdnXhTdkIjdcDOLH2daFm8gfB634wa5knZhPGLOw==} cpu: [x64] os: [darwin] - '@rspack/binding-linux-arm64-gnu@0.7.5': - resolution: {integrity: sha512-/24UytJXrK+7CsucDb30GCKYIJ8nG6ceqbJyOtsJv9zeArNLHkxrYGSyjHJIpQfwVN17BPP4RNOi+yIZ3ZgDyA==} + '@rspack/binding-linux-arm64-gnu@1.0.5': + resolution: {integrity: sha512-svPOFlem7s6T33tX8a28uD5Ngc7bdML96ioiH7Fhi0J/at+WAthor4GeUNwkwuzBQI/Nc9XCgiYPcE0pzP7c6w==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-arm64-musl@0.7.5': - resolution: {integrity: sha512-6RcxG42mLM01Pa6UYycACu/Nu9qusghAPUJumb8b8x5TRIDEtklYC5Ck6Rmagm+8E0ucMude2E/D4rMdIFcS3A==} + '@rspack/binding-linux-arm64-musl@1.0.5': + resolution: {integrity: sha512-cysqogEUNc0TgzzXcK9bkv12eoCjqhLzOvGXQU1zSEU9Hov7tuzMDl3Z6R3A7NgOCmWu84/wOnTrkSOI28caew==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-x64-gnu@0.7.5': - resolution: {integrity: sha512-R0Lu4CJN2nWMW7WzPBuCIju80cQPpcaqwKJDj/quwQySpJJZ6c5qGwB8mntqjxIzZDrNH6u0OkpiUTbvWZj8ww==} + '@rspack/binding-linux-x64-gnu@1.0.5': + resolution: {integrity: sha512-qIEMsWOzTKpVm0Sg553gKkua49Kd/sElLD1rZcXjjxjAsD97uq8AiNncArMfYdDKgkKbtwtW/Fb3uVuafTLnZg==} cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-musl@0.7.5': - resolution: {integrity: sha512-dDgi/ThikMy1m4llxPeEXDCA2I8F8ezFS/eCPLZGU2/J1b4ALwDjuRsMmo+VXSlFCKgIt98V6h1woeg7nu96yg==} + '@rspack/binding-linux-x64-musl@1.0.5': + resolution: {integrity: sha512-yulltMSQN3aBt3NMURYTmJcpAJBi4eEJ4i9qF0INE8f0885sJpI0j35/31POkCghG1ZOSZkYALFrheKKP9e8pg==} cpu: [x64] os: [linux] - '@rspack/binding-win32-arm64-msvc@0.7.5': - resolution: {integrity: sha512-nEF4cUdLfgEK6FrgJSJhUlr2/7LY1tmqBNQCFsCjtDtUkQbJIEo1b8edT94G9tJcQoFE4cD+Re30yBYbQO2Thg==} + '@rspack/binding-win32-arm64-msvc@1.0.5': + resolution: {integrity: sha512-5oF/qN6TnUj28UAdaOgSIWKq7HG5QgI4p37zvQBBTXZHhrwN2kE6H+TaofWnSqWJynwmGIxJIx8bGo3lDfFbfA==} cpu: [arm64] os: [win32] - '@rspack/binding-win32-ia32-msvc@0.7.5': - resolution: {integrity: sha512-hEcHRwJIzpZsePr+5x6V/7TGhrPXhSZYG4sIhsrem1za9W+qqCYYLZ7KzzbRODU07QaAH2RxjcA1bf8F2QDYAQ==} + '@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@0.7.5': - resolution: {integrity: sha512-PpVpP6J5/2b4T10hzSUwjLvmdpAOj3ozARl1Nrf/lsbYwhiXivoB8Gvoy/xe/Xpgr732Dk9VCeeW8rreWOOUVQ==} + '@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@0.7.5': - resolution: {integrity: sha512-XcdOvaCz1mWWwr5vmEY9zncdInrjINEh60EWkYdqtCA67v7X7rB1fe6n4BeAI1+YLS2Eacj+lytlr+n7I+DYVg==} + '@rspack/binding@1.0.5': + resolution: {integrity: sha512-SnVrzRWeKSosJ0/1e5taAeqJ1ISst6NAE1N8YK4ZdUEVWmE26tC2V/yTvZHSsqatc/0Cf+A18IZJx0q6H/DlRw==} - '@rspack/cli@0.7.5': - resolution: {integrity: sha512-3Lp1RSyTRzBUi232hjRmF6wLHaMJXXMJIlX5dR662HwfCRwgm+q/Nz3829/UbjHXI2aGN4fFBgNI+LJU1TOZVQ==} + '@rspack/cli@1.0.5': + resolution: {integrity: sha512-isueSvkwUyO2dO3MkiUfonblm5fxLP1F7YL7YUjT2cLzY1CG3Pdg3wA1dLNyDlcidmswnfG5+GS1NthwFjEL0Q==} hasBin: true peerDependencies: - '@rspack/core': '>=0.4.0' + '@rspack/core': ^1.0.0-alpha || ^1.x - '@rspack/core@0.7.5': - resolution: {integrity: sha512-zVTe4WCyc3qsLPattosiDYZFeOzaJ32/BYukPP2I1VJtCVFa+PxGVRPVZhSoN6fXw5oy48yHg9W9v1T8CaEFhw==} + '@rspack/core@1.0.5': + resolution: {integrity: sha512-UlydS2VupZ6yBx3jCqCHpeEUQNWCrBkTQhPIezK0eCAk13i745byjqXX4tcfN6jR5Kjh/1CIb8r07k9DgGON1w==} engines: {node: '>=16.0.0'} peerDependencies: '@swc/helpers': '>=0.5.1' @@ -445,13 +466,17 @@ packages: '@swc/helpers': optional: true - '@rspack/dev-server@0.7.5': - resolution: {integrity: sha512-jDXfccjlHMXOxOK++uxWhLUKb0L3NuA6Ujc/J75NhWYq1YxmVhNOtUWCdunuJQ1BNeLlgG/S5X5iBCbZ09S0Jg==} + '@rspack/dev-server@1.0.5': + resolution: {integrity: sha512-S1o1j9adjqNCiSWrIv1vmVHQPXFvcBa9JvPWIGxGjei72ejz0zvO6Fd948UkRlDgCPIoY4Cy+g1GLmBkJT5MKA==} peerDependencies: '@rspack/core': '*' - '@shoelace-style/animations@1.1.0': - resolution: {integrity: sha512-Be+cahtZyI2dPKRm8EZSx3YJQ+jLvEcn3xzRP7tM4tqBnvd/eW/64Xh0iOf0t2w5P8iJKfdBbpVNE9naCaOf2g==} + '@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==} @@ -460,11 +485,8 @@ packages: resolution: {integrity: sha512-OV4XYAAZv0OfOR4RlpxCYOn7pH8ETIL8Pkh5hFvIrL+BN4/vlBLoeESYDU2tB/f9iichu4cfwdPquJITmKdY1w==} engines: {node: '>=14.17.0'} - '@swc/helpers@0.5.12': - resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==} - - '@swc/helpers@0.5.3': - resolution: {integrity: sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==} + '@swc/helpers@0.5.13': + resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} '@trysound/sax@0.2.0': resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} @@ -494,12 +516,6 @@ packages: '@types/emscripten@1.39.13': resolution: {integrity: sha512-cFq+fO/isvhvmuP/+Sl4K4jtU6E23DoivtbO4r50e3odaxAiVdbfSYRDdJ4gCdxx+3aRjhphS5ZMwIH4hFy/Cw==} - '@types/eslint-scope@3.7.7': - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - - '@types/eslint@9.6.0': - resolution: {integrity: sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==} - '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} @@ -524,14 +540,14 @@ packages: '@types/node-forge@1.3.11': resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} - '@types/node@22.3.0': - resolution: {integrity: sha512-nrWpWVaDZuaVc5X84xJ0vNrLvomM205oQyLsRt7OHNZbSHslcWsvgFR7O7hire2ZonjLrWBbedmotmIlJDVd6g==} + '@types/node@22.5.5': + resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==} - '@types/prop-types@15.7.12': - resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + '@types/prop-types@15.7.13': + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} - '@types/qs@6.9.15': - resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} + '@types/qs@6.9.16': + resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==} '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} @@ -542,6 +558,9 @@ packages: '@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==} @@ -566,8 +585,8 @@ packages: '@vscode/l10n@0.0.18': resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} - '@vscode/web-custom-data@0.4.11': - resolution: {integrity: sha512-cJuycq8j3mSBwTvUS5fCjUG/VV0n1ht/iJF6n1nR3BbZ51ICK/51pTtYqFNZQmYuH/PxzMvqzhy1H15Vz6l0UQ==} + '@vscode/web-custom-data@0.4.12': + resolution: {integrity: sha512-bCemuvwCC84wJQbJoaPou86sjz9DUvZgGa6sAWQwzw7oIELD7z+WnUj2Rdsu8/8XPhKLcg3IswQ2+Pm3OMinIg==} '@webassemblyjs/ast@1.12.1': resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} @@ -645,19 +664,19 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} - ace-builds@1.36.0: - resolution: {integrity: sha512-7to4F86V5N13EY4M9LWaGo2Wmr9iWe5CrYpc28F+/OyYCf7yd+xBV5x9v/GB73EBGGoYd89m6JjeIUjkL6Yw+w==} + ace-builds@1.36.2: + resolution: {integrity: sha512-eqqfbGwx/GKjM/EnFu4QtQ+d2NNBu84MGgxoG8R5iyFpcVeQ4p9YlTL+ZzdEJqhdkASqoqOxCSNNGyB6lvMm+A==} - ace-linters@1.3.0: - resolution: {integrity: sha512-dX34G8iVapk+nl2cnhY5ZTKfXLo0MbtvwILsr9PVHEW8/NubudJkEE5twkQ69vGOJp2dW2i5jrU417X8CpXSIA==} + 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.3: - resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} acorn@8.12.1: @@ -698,8 +717,8 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} ansi-styles@3.2.1: @@ -758,8 +777,8 @@ packages: bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - body-parser@1.20.2: - resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + 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: @@ -823,6 +842,10 @@ packages: 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'} @@ -843,8 +866,8 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - caniuse-lite@1.0.30001651: - resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==} + caniuse-lite@1.0.30001660: + resolution: {integrity: sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -857,10 +880,6 @@ packages: chevrotain@7.1.1: resolution: {integrity: sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw==} - chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -947,8 +966,8 @@ packages: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} - core-js@3.36.1: - resolution: {integrity: sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA==} + core-js@3.38.1: + resolution: {integrity: sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -1022,8 +1041,8 @@ packages: supports-color: optional: true - debug@4.3.6: - resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1035,6 +1054,14 @@ packages: 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'} @@ -1043,9 +1070,9 @@ packages: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} - define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} + 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==} @@ -1104,8 +1131,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.7: - resolution: {integrity: sha512-6FTNWIWMxMy/ZY6799nBlPtF1DFDQ6VQJ7yyDP27SJNt5lwtQ5ufqVvHylb3fdQefvRcgA3fKcFMJi9OLwBRNw==} + electron-to-chromium@1.5.24: + resolution: {integrity: sha512-0x0wLCmpdKFCi9ulhvYZebgcPmHTkFVUfU2wzDykadkslKwT4oAmDTHEKLnlrDsMGZe4B+ksn8quZfZjYsBetA==} elliptic@6.5.7: resolution: {integrity: sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==} @@ -1124,6 +1151,10 @@ packages: 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'} @@ -1150,8 +1181,8 @@ packages: es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} escape-html@1.0.3: @@ -1199,8 +1230,8 @@ packages: resolution: {integrity: sha512-aIQN7Q04HGAV/I5BszisuHTZHXNoC23WtLkxdCLuYZMdWviRD0TMIt2bnUBi9MrHaF/hH8b3gwG9iaAUHKnJGA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - express@4.19.2: - resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} + 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: @@ -1227,12 +1258,12 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} - follow-redirects@1.15.6: - resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -1364,15 +1395,6 @@ packages: html-entities@2.5.2: resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} - html-rspack-plugin@5.7.2: - resolution: {integrity: sha512-uVXGYq19bcsX7Q/53VqXQjCKXw0eUMHlFGDLTaqzgj/ckverfhZQvXyA6ecFBaF9XUH16jfCTCyALYi0lJcagg==} - engines: {node: '>=10.13.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - peerDependenciesMeta: - '@rspack/core': - optional: true - htmlhint@1.1.4: resolution: {integrity: sha512-tSKPefhIaaWDk/vKxAOQbN+QwZmDeJCq3bZZGbJMoMQAfTjepudC+MkuT9MOBbuQI3dLLzDWbmU7fLV3JASC7Q==} hasBin: true @@ -1408,6 +1430,10 @@ packages: 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} @@ -1460,13 +1486,13 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-core-module@2.15.0: - resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} + 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: @@ -1481,6 +1507,15 @@ packages: 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'} @@ -1493,9 +1528,9 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - 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==} @@ -1547,8 +1582,8 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - launch-editor@2.8.1: - resolution: {integrity: sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==} + 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==} @@ -1607,8 +1642,8 @@ packages: lzma-web@3.0.1: resolution: {integrity: sha512-sb5cdfd+PLNljK/HUgYzvnz4G7r0GFK8sonyGrqJS0FVyUQjFYcnmU2LqTWFi6r48lH1ZBstnxyLWepKM/t7QA==} - marked@14.0.0: - resolution: {integrity: sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==} + marked@14.1.2: + resolution: {integrity: sha512-f3r0yqpz31VXiDB/wj9GaOB0a2PRLQl6vJmXiFrniNwjkKdvakqJRULhjFKJpxOchlCRiG5fcacoUZY5Xa6PEQ==} engines: {node: '>= 18'} hasBin: true @@ -1629,8 +1664,12 @@ packages: resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} - merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + 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==} @@ -1643,8 +1682,8 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} miller-rabin@4.0.1: @@ -1672,8 +1711,8 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - mini-css-extract-plugin@2.9.0: - resolution: {integrity: sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==} + 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 @@ -1702,9 +1741,6 @@ packages: ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1787,9 +1823,9 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} - open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} + open@10.1.0: + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + engines: {node: '>=18'} opener@1.5.2: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} @@ -1799,6 +1835,10 @@ packages: 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==} @@ -1836,8 +1876,8 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + path-to-regexp@0.1.10: + resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -1847,8 +1887,8 @@ packages: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} engines: {node: '>=0.12'} - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -1912,8 +1952,8 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.41: - resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} engines: {node: ^10 || ^12 || >=14} process-nextick-args@2.0.1: @@ -1933,8 +1973,8 @@ packages: qr-creator@1.0.0: resolution: {integrity: sha512-C0cqfbS1P5hfqN4NhsYsUXePlk9BO+a45bAQ3xLYjBL3bOIFzoVEjs79Fado9u9BPBD3buHi3+vY+C8tHh4qMQ==} - qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} queue-microtask@1.2.3: @@ -1972,6 +2012,9 @@ packages: 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==} @@ -2005,14 +2048,17 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported + 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==} @@ -2028,127 +2074,133 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass-embedded-android-arm64@1.77.8: - resolution: {integrity: sha512-EmWHLbEx0Zo/f/lTFzMeH2Du+/I4RmSRlEnERSUKQWVp3aBSO04QDvdxfFezgQ+2Yt/ub9WMqBpma9P/8MPsLg==} + sass-embedded-android-arm64@1.78.0: + resolution: {integrity: sha512-2sAr11EgwPudAuyk4Ite+fWGYJspiFSiZDU2D8/vjjI7BaB9FG6ksYqww3svoMMnjPUWBCjKPDELpZTxViLJbw==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [android] - hasBin: true - sass-embedded-android-arm@1.77.8: - resolution: {integrity: sha512-GpGL7xZ7V1XpFbnflib/NWbM0euRzineK0iwoo31/ntWKAXGj03iHhGzkSiOwWSFcXgsJJi3eRA5BTmBvK5Q+w==} + sass-embedded-android-arm@1.78.0: + resolution: {integrity: sha512-YM6nrmKsj+ImaSTd96F+jzbWSbhPkRN4kedbLgIJ5FsILNa9NAqhmrCQz9pdcjuAhyfxWImdUACsT23CPGENZQ==} engines: {node: '>=14.0.0'} cpu: [arm] os: [android] - hasBin: true - sass-embedded-android-ia32@1.77.8: - resolution: {integrity: sha512-+GjfJ3lDezPi4dUUyjQBxlNKXNa+XVWsExtGvVNkv1uKyaOxULJhubVo2G6QTJJU0esJdfeXf5Ca5/J0ph7+7w==} + sass-embedded-android-ia32@1.78.0: + resolution: {integrity: sha512-TyJOo4TgnHpOfC/PfqCBqd+jGRanWoRd4Br/0KAfIvaIFjTGIPdk26vUyDVugV1J8QUEY4INGE8EXAuDeRldUQ==} engines: {node: '>=14.0.0'} cpu: [ia32] os: [android] - hasBin: true - sass-embedded-android-x64@1.77.8: - resolution: {integrity: sha512-YZbFDzGe5NhaMCygShqkeCWtzjhkWxGVunc7ULR97wmxYPQLPeVyx7XFQZc84Aj0lKAJBJS4qRZeqphMqZEJsQ==} + 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] - hasBin: true - sass-embedded-darwin-arm64@1.77.8: - resolution: {integrity: sha512-aifgeVRNE+i43toIkDFFJc/aPLMo0PJ5s5hKb52U+oNdiJE36n65n2L8F/8z3zZRvCa6eYtFY2b7f1QXR3B0LA==} + sass-embedded-darwin-arm64@1.78.0: + resolution: {integrity: sha512-3JaxceFSR6N+a22hPYYkj1p45eBaWTt/M8MPTbfzU3TGZrU9bmRX7WlUVtXTo1yYI2iMf22nCv0PQ5ExFF3FMQ==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [darwin] - hasBin: true - sass-embedded-darwin-x64@1.77.8: - resolution: {integrity: sha512-/VWZQtcWIOek60Zj6Sxk6HebXA1Qyyt3sD8o5qwbTgZnKitB1iEBuNunyGoAgMNeUz2PRd6rVki6hvbas9hQ6w==} + sass-embedded-darwin-x64@1.78.0: + resolution: {integrity: sha512-UMTijqE3fJ8vEaaD7GPG7G3GsHuPKOdpS8vuA2v2uwO3BPFp/rEKah66atvGqvGO+0JYApkSv0YTnnexSrkHIQ==} engines: {node: '>=14.0.0'} cpu: [x64] os: [darwin] - hasBin: true - sass-embedded-linux-arm64@1.77.8: - resolution: {integrity: sha512-6iIOIZtBFa2YfMsHqOb3qake3C9d/zlKxjooKKnTSo+6g6z+CLTzMXe1bOfayb7yxeenElmFoK1k54kWD/40+g==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [linux] - hasBin: true - - sass-embedded-linux-arm@1.77.8: - resolution: {integrity: sha512-2edZMB6jf0whx3T0zlgH+p131kOEmWp+I4wnKj7ZMUeokiY4Up05d10hSvb0Q63lOrSjFAWu6P5/pcYUUx8arQ==} - engines: {node: '>=14.0.0'} - cpu: [arm] - os: [linux] - hasBin: true - - sass-embedded-linux-ia32@1.77.8: - resolution: {integrity: sha512-63GsFFHWN5yRLTWiSef32TM/XmjhCBx1DFhoqxmj+Yc6L9Z1h0lDHjjwdG6Sp5XTz5EmsaFKjpDgnQTP9hJX3Q==} - engines: {node: '>=14.0.0'} - cpu: [ia32] - os: [linux] - hasBin: true - - sass-embedded-linux-musl-arm64@1.77.8: - resolution: {integrity: sha512-j8cgQxNWecYK+aH8ESFsyam/Q6G+9gg8eJegiRVpA9x8yk3ykfHC7UdQWwUcF22ZcuY4zegrjJx8k+thsgsOVA==} + 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-musl-arm@1.77.8: - resolution: {integrity: sha512-nFkhSl3uu9btubm+JBW7uRglNVJ8W8dGfzVqh3fyQJKS1oyBC3vT3VOtfbT9YivXk28wXscSHpqXZwY7bUuopA==} + sass-embedded-linux-arm@1.78.0: + resolution: {integrity: sha512-JafT+Co0RK8oO3g9TfVRuG7tkYeh35yDGTgqCFxLrktnkiw5pmIagCfpjxk5GBcSfJMOzhCgclTCDJWAuHGuMQ==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-ia32@1.77.8: - resolution: {integrity: sha512-oWveMe+8TFlP8WBWPna/+Ec5TV0CE+PxEutyi0ltSruBds2zxRq9dPVOqrpPcDN9QUx50vNZC0Afgch0aQEd0g==} + 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-x64@1.77.8: - resolution: {integrity: sha512-2NtRpMXHeFo9kaYxuZ+Ewwo39CE7BTS2JDfXkTjZTZqd8H+8KC53eBh516YQnn2oiqxSiKxm7a6pxbxGZGwXOQ==} + 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-x64@1.77.8: - resolution: {integrity: sha512-ND5qZLWUCpOn7LJfOf0gLSZUWhNIysY+7NZK1Ctq+pM6tpJky3JM5I1jSMplNxv5H3o8p80n0gSm+fcjsEFfjQ==} + 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] - hasBin: true - sass-embedded-win32-arm64@1.77.8: - resolution: {integrity: sha512-7L8zT6xzEvTYj86MvUWnbkWYCNQP+74HvruLILmiPPE+TCgOjgdi750709BtppVJGGZSs40ZuN6mi/YQyGtwXg==} + sass-embedded-win32-arm64@1.78.0: + resolution: {integrity: sha512-qTLIIC5URYRmeuYYllfoL0K1cHSUd+f3sFHAA6fjtdgf288usd6ToCbWpuFb0BtVceEfGQX8lEp+teOG7n7Quw==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [win32] - hasBin: true - sass-embedded-win32-ia32@1.77.8: - resolution: {integrity: sha512-7Buh+4bP0WyYn6XPbthkIa3M2vtcR8QIsFVg3JElVlr+8Ng19jqe0t0SwggDgbMX6AdQZC+Wj4F1BprZSok42A==} + sass-embedded-win32-ia32@1.78.0: + resolution: {integrity: sha512-BrOWh18T6Y9xgCokGXElEnd8j03fO4W83bwJ9wHRRkrQWaeHtHs3XWW0fX1j2brngWUTjU+jcYUijWF1Z60krw==} engines: {node: '>=14.0.0'} cpu: [ia32] os: [win32] - hasBin: true - sass-embedded-win32-x64@1.77.8: - resolution: {integrity: sha512-rZmLIx4/LLQm+4GW39sRJW0MIlDqmyV0fkRzTmhFP5i/wVC7cuj8TUubPHw18rv2rkHFfBZKZJTCkPjCS5Z+SA==} + sass-embedded-win32-x64@1.78.0: + resolution: {integrity: sha512-C14iFDJd7oGhmQehRiEL7GtzMmLwubcDqsBarQ+u9LbHoDlUQfIPd7y8mVtNgtxJCdrAO/jc5qR4C+85yE3xPQ==} engines: {node: '>=14.0.0'} cpu: [x64] os: [win32] - hasBin: true - sass-embedded@1.77.8: - resolution: {integrity: sha512-WGXA6jcaoBo5Uhw0HX/s6z/sl3zyYQ7ZOnLOJzqwpctFcFmU4L07zn51e2VSkXXFpQZFAdMZNqOGz/7h/fvcRA==} + sass-embedded@1.78.0: + resolution: {integrity: sha512-NR2kvhWVFABmBm0AqgFw9OweQycs0Qs+/teJ9Su+BUY7up+f8S5F/Zi+7QtAqJlewsQyUNfzm1vRuM+20lBwRQ==} engines: {node: '>=16.0.0'} + hasBin: true - sass@1.77.8: - resolution: {integrity: sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==} + sass@1.78.0: + resolution: {integrity: sha512-AaIqGSrjo5lA2Yg7RvFZrlXDBCp3nV4XP73GrLGvdRWWwk+8H3l0SDvq/5bA4eF+0RFPLuWUk3E+P1U/YqnpsQ==} engines: {node: '>=14.0.0'} hasBin: true @@ -2167,17 +2219,13 @@ packages: resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} engines: {node: '>=10'} - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - semver@7.6.3: resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true - send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} serialize-javascript@6.0.2: @@ -2187,8 +2235,8 @@ packages: resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} engines: {node: '>= 0.8.0'} - serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} set-function-length@1.2.2: @@ -2238,8 +2286,8 @@ packages: sockjs@0.3.24: resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} source-map-support@0.5.21: @@ -2327,8 +2375,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - tailwindcss@3.4.10: - resolution: {integrity: sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==} + tailwindcss@3.4.12: + resolution: {integrity: sha512-Htf/gHj2+soPb9UayUNci/Ja3d8pTmu9ONTfh4QY8r3MATTZOzmv6UYWF7ZwikEIC8okpfqmGqrmDehua8mF8w==} engines: {node: '>=14.0.0'} hasBin: true @@ -2352,8 +2400,8 @@ packages: uglify-js: optional: true - terser@5.31.6: - resolution: {integrity: sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==} + terser@5.33.0: + resolution: {integrity: sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g==} engines: {node: '>=10'} hasBin: true @@ -2364,6 +2412,12 @@ packages: 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==} @@ -2382,6 +2436,12 @@ packages: 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==} @@ -2398,8 +2458,8 @@ packages: ts-simple-type@2.0.0-next.0: resolution: {integrity: sha512-A+hLX83gS+yH6DtzNAhzZbPfU+D9D8lHlTSd7GeoMRBjOt3GRylDqLTYbdmjA4biWvq2xSfpqfIDj2l0OA/BVg==} - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} @@ -2420,13 +2480,13 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + typescript@5.6.2: + resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} engines: {node: '>=14.17'} hasBin: true - undici-types@6.18.2: - resolution: {integrity: sha512-5ruQbENj95yDYJNS3TvcaxPMshV7aizdv/hWYjGIKoANWKjhWNBsr2YEuYZKodQulB1b8l7ILOuDQep3afowQQ==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} @@ -2476,8 +2536,8 @@ packages: vscode-css-languageservice@4.3.0: resolution: {integrity: sha512-BkQAMz4oVHjr0oOAz5PdeE72txlLQK7NIwzmclfr+b6fj6I8POwB+VoXvrZLTbWt9hWRgfvgiQRkh5JwrjPJ5A==} - vscode-css-languageservice@6.3.0: - resolution: {integrity: sha512-nU92imtkgzpCL0xikrIb8WvedV553F2BENzgz23wFuok/HLN5BeQmroMy26pUwFxV2eV8oNRmYCUv8iO7kSMhw==} + 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==} @@ -2489,11 +2549,11 @@ packages: vscode-html-languageservice@3.1.0: resolution: {integrity: sha512-QAyRHI98bbEIBCqTzZVA0VblGU40na0txggongw5ZgTj9UVsVk5XbLT16O9OTcbqBGSqn0oWmFDNjK/XGIDcqg==} - vscode-html-languageservice@5.3.0: - resolution: {integrity: sha512-C4Z3KsP5Ih+fjHpiBc5jxmvCl+4iEwvXegIrzu2F5pktbWvQaBT3YkVPk8N+QlSSMk8oCG6PKtZ/Sq2YHb5e8g==} + vscode-html-languageservice@5.3.1: + resolution: {integrity: sha512-ysUh4hFeW/WOWz/TO9gm08xigiSsV/FOAZ+DolgJfeLftna54YdmZ4A+lIn46RbdO3/Qv5QHTn1ZGqmrXQhZyA==} - vscode-json-languageservice@5.4.0: - resolution: {integrity: sha512-NCkkCr63OHVkE4lcb0xlUAaix6vE5gHQW4NrswbLEh3ArXj81lrGuFTsGEYEUXlNHdnc53vWPcjeSy/nMTrfXg==} + vscode-json-languageservice@5.4.1: + resolution: {integrity: sha512-5czFGNyVPxz3ZJYl8R3a3SuIj5gjhmGF4Wv05MRPvD4DEnHK6b8km4VbNMJNHBlTCh7A0aHzUbPVzo+0C18mCA==} vscode-jsonrpc@8.0.2: resolution: {integrity: sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ==} @@ -2550,27 +2610,21 @@ packages: engines: {node: '>= 10.13.0'} hasBin: true - webpack-dev-middleware@5.3.4: - resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - - webpack-dev-middleware@6.1.2: - resolution: {integrity: sha512-Wu+EHmX326YPYUpQLKmKbTyZZJIB8/n6R09pTmB03kJmnMsVPTo9COzHZFr01txwaCAuZvfBJE4ZCHRcKs5JaQ==} - engines: {node: '>= 14.15.0'} + 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@4.13.1: - resolution: {integrity: sha512-5tWg00bnWbYgkN+pd5yISQKDejRBYGEw15RaEEslH+zdbNDxxaZvEAO2WulaSaFKb5n3YG8JXsGaDsut1D0xdA==} - engines: {node: '>= 12.13.0'} + webpack-dev-server@5.0.4: + resolution: {integrity: sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==} + engines: {node: '>= 18.12.0'} hasBin: true peerDependencies: - webpack: ^4.37.0 || ^5.0.0 + webpack: ^5.0.0 webpack-cli: '*' peerDependenciesMeta: webpack: @@ -2582,8 +2636,8 @@ packages: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} - webpack@5.93.0: - resolution: {integrity: sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==} + webpack@5.94.0: + resolution: {integrity: sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -2643,18 +2697,6 @@ packages: utf-8-validate: optional: true - 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 - xml@1.0.1: resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} @@ -2662,8 +2704,8 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yaml@2.5.0: - resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} + yaml@2.5.1: + resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} engines: {node: '>= 14'} hasBin: true @@ -2686,7 +2728,7 @@ snapshots: '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 - picocolors: 1.0.1 + picocolors: 1.1.0 '@babel/helper-validator-identifier@7.24.7': {} @@ -2695,9 +2737,9 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.1 + picocolors: 1.1.0 - '@babel/runtime@7.25.0': + '@babel/runtime@7.25.6': dependencies: regenerator-runtime: 0.14.1 @@ -2712,29 +2754,29 @@ snapshots: '@emnapi/core@1.2.0': dependencies: '@emnapi/wasi-threads': 1.0.1 - tslib: 2.6.3 + tslib: 2.7.0 optional: true '@emnapi/runtime@1.2.0': dependencies: - tslib: 2.6.3 + tslib: 2.7.0 optional: true '@emnapi/wasi-threads@1.0.1': dependencies: - tslib: 2.6.3 + tslib: 2.7.0 optional: true - '@floating-ui/core@1.6.7': + '@floating-ui/core@1.6.8': dependencies: - '@floating-ui/utils': 0.2.7 + '@floating-ui/utils': 0.2.8 - '@floating-ui/dom@1.6.10': + '@floating-ui/dom@1.6.11': dependencies: - '@floating-ui/core': 1.6.7 - '@floating-ui/utils': 0.2.7 + '@floating-ui/core': 1.6.8 + '@floating-ui/utils': 0.2.8 - '@floating-ui/utils@0.2.7': {} + '@floating-ui/utils@0.2.8': {} '@isaacs/cliui@8.0.2': dependencies: @@ -2767,6 +2809,22 @@ snapshots: '@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': {} @@ -2790,21 +2848,21 @@ snapshots: dependencies: '@lit-labs/ssr-dom-shim': 1.2.1 - '@module-federation/runtime-tools@0.1.6': + '@module-federation/runtime-tools@0.5.1': dependencies: - '@module-federation/runtime': 0.1.6 - '@module-federation/webpack-bundler-runtime': 0.1.6 + '@module-federation/runtime': 0.5.1 + '@module-federation/webpack-bundler-runtime': 0.5.1 - '@module-federation/runtime@0.1.6': + '@module-federation/runtime@0.5.1': dependencies: - '@module-federation/sdk': 0.1.6 + '@module-federation/sdk': 0.5.1 - '@module-federation/sdk@0.1.6': {} + '@module-federation/sdk@0.5.1': {} - '@module-federation/webpack-bundler-runtime@0.1.6': + '@module-federation/webpack-bundler-runtime@0.5.1': dependencies: - '@module-federation/runtime': 0.1.6 - '@module-federation/sdk': 0.1.6 + '@module-federation/runtime': 0.5.1 + '@module-federation/sdk': 0.5.1 '@napi-rs/image-android-arm64@1.9.2': optional: true @@ -2891,117 +2949,97 @@ snapshots: '@preact/signals-core@1.8.0': {} - '@rsbuild/core@0.7.10': + '@rsbuild/core@1.0.4': dependencies: - '@rsbuild/shared': 0.7.10(@swc/helpers@0.5.3) - '@rspack/core': 0.7.5(@swc/helpers@0.5.3) - '@swc/helpers': 0.5.3 - core-js: 3.36.1 - html-webpack-plugin: html-rspack-plugin@5.7.2(@rspack/core@0.7.5(@swc/helpers@0.5.3)) - postcss: 8.4.41 + '@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.7.10(@rsbuild/core@0.7.10)': + '@rsbuild/plugin-image-compress@1.0.2(@rsbuild/core@1.0.4)': dependencies: '@napi-rs/image': 1.9.2 - '@rsbuild/core': 0.7.10 svgo: 3.3.2 + optionalDependencies: + '@rsbuild/core': 1.0.4 - '@rsbuild/plugin-sass@0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.12)': + '@rsbuild/plugin-sass@1.0.1(@rsbuild/core@1.0.4)': dependencies: - '@rsbuild/core': 0.7.10 - '@rsbuild/shared': 0.7.10(@swc/helpers@0.5.12) + '@rsbuild/core': 1.0.4 + deepmerge: 4.3.1 loader-utils: 2.0.4 - postcss: 8.4.41 - sass-embedded: 1.77.8 - transitivePeerDependencies: - - '@swc/helpers' + postcss: 8.4.47 + reduce-configs: 1.0.0 + sass-embedded: 1.78.0 - '@rsbuild/plugin-type-check@0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.12)(typescript@5.5.4)': + '@rsbuild/plugin-type-check@1.0.1(@rsbuild/core@1.0.4)(typescript@5.6.2)': dependencies: - '@rsbuild/core': 0.7.10 - '@rsbuild/shared': 0.7.10(@swc/helpers@0.5.12) - fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.5.4)(webpack@5.93.0) + deepmerge: 4.3.1 + fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.6.2)(webpack@5.94.0) json5: 2.2.3 - webpack: 5.93.0 + 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 - '@rsbuild/shared@0.7.10(@swc/helpers@0.5.12)': - dependencies: - '@rspack/core': 0.7.5(@swc/helpers@0.5.12) - caniuse-lite: 1.0.30001651 - html-webpack-plugin: html-rspack-plugin@5.7.2(@rspack/core@0.7.5(@swc/helpers@0.5.12)) - postcss: 8.4.41 + '@rspack/binding-darwin-arm64@1.0.5': + optional: true + + '@rspack/binding-darwin-x64@1.0.5': + optional: true + + '@rspack/binding-linux-arm64-gnu@1.0.5': + optional: true + + '@rspack/binding-linux-arm64-musl@1.0.5': + optional: true + + '@rspack/binding-linux-x64-gnu@1.0.5': + optional: true + + '@rspack/binding-linux-x64-musl@1.0.5': + optional: true + + '@rspack/binding-win32-arm64-msvc@1.0.5': + optional: true + + '@rspack/binding-win32-ia32-msvc@1.0.5': + optional: true + + '@rspack/binding-win32-x64-msvc@1.0.5': + optional: true + + '@rspack/binding@1.0.5': optionalDependencies: - fsevents: 2.3.3 - transitivePeerDependencies: - - '@swc/helpers' + '@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 - '@rsbuild/shared@0.7.10(@swc/helpers@0.5.3)': - dependencies: - '@rspack/core': 0.7.5(@swc/helpers@0.5.3) - caniuse-lite: 1.0.30001651 - html-webpack-plugin: html-rspack-plugin@5.7.2(@rspack/core@0.7.5(@swc/helpers@0.5.3)) - postcss: 8.4.41 - optionalDependencies: - fsevents: 2.3.3 - transitivePeerDependencies: - - '@swc/helpers' - - '@rspack/binding-darwin-arm64@0.7.5': - optional: true - - '@rspack/binding-darwin-x64@0.7.5': - optional: true - - '@rspack/binding-linux-arm64-gnu@0.7.5': - optional: true - - '@rspack/binding-linux-arm64-musl@0.7.5': - optional: true - - '@rspack/binding-linux-x64-gnu@0.7.5': - optional: true - - '@rspack/binding-linux-x64-musl@0.7.5': - optional: true - - '@rspack/binding-win32-arm64-msvc@0.7.5': - optional: true - - '@rspack/binding-win32-ia32-msvc@0.7.5': - optional: true - - '@rspack/binding-win32-x64-msvc@0.7.5': - optional: true - - '@rspack/binding@0.7.5': - optionalDependencies: - '@rspack/binding-darwin-arm64': 0.7.5 - '@rspack/binding-darwin-x64': 0.7.5 - '@rspack/binding-linux-arm64-gnu': 0.7.5 - '@rspack/binding-linux-arm64-musl': 0.7.5 - '@rspack/binding-linux-x64-gnu': 0.7.5 - '@rspack/binding-linux-x64-musl': 0.7.5 - '@rspack/binding-win32-arm64-msvc': 0.7.5 - '@rspack/binding-win32-ia32-msvc': 0.7.5 - '@rspack/binding-win32-x64-msvc': 0.7.5 - - '@rspack/cli@0.7.5(@rspack/core@0.7.5(@swc/helpers@0.5.12))(@types/express@4.17.21)(webpack@5.93.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.7.5(@swc/helpers@0.5.12) - '@rspack/dev-server': 0.7.5(@rspack/core@0.7.5(@swc/helpers@0.5.12))(@types/express@4.17.21)(webpack@5.93.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: @@ -3013,37 +3051,27 @@ snapshots: - webpack - webpack-cli - '@rspack/core@0.7.5(@swc/helpers@0.5.12)': + '@rspack/core@1.0.5(@swc/helpers@0.5.13)': dependencies: - '@module-federation/runtime-tools': 0.1.6 - '@rspack/binding': 0.7.5 - caniuse-lite: 1.0.30001651 - tapable: 2.2.1 - webpack-sources: 3.2.3 + '@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.12 + '@swc/helpers': 0.5.13 - '@rspack/core@0.7.5(@swc/helpers@0.5.3)': + '@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.7.5 - caniuse-lite: 1.0.30001651 - tapable: 2.2.1 - webpack-sources: 3.2.3 - optionalDependencies: - '@swc/helpers': 0.5.3 - - '@rspack/dev-server@0.7.5(@rspack/core@0.7.5(@swc/helpers@0.5.12))(@types/express@4.17.21)(webpack@5.93.0)': - dependencies: - '@rspack/core': 0.7.5(@swc/helpers@0.5.12) - 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.19.2 + express: 4.21.0 http-proxy-middleware: 2.0.6(@types/express@4.17.21) mime-types: 2.1.35 - webpack-dev-middleware: 6.1.2(webpack@5.93.0) - webpack-dev-server: 4.13.1(webpack@5.93.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 @@ -3053,16 +3081,18 @@ snapshots: - webpack - webpack-cli - '@shoelace-style/animations@1.1.0': {} + '@rspack/lite-tapable@1.0.0': {} + + '@shoelace-style/animations@1.2.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.10 + '@floating-ui/dom': 1.6.11 '@lit/react': 1.0.5(@types/react@18.2.79) - '@shoelace-style/animations': 1.1.0 + '@shoelace-style/animations': 1.2.0 '@shoelace-style/localize': 3.2.1 composed-offset-position: 0.0.4 lit: 3.2.0 @@ -3070,19 +3100,15 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@swc/helpers@0.5.12': + '@swc/helpers@0.5.13': dependencies: - tslib: 2.6.3 - - '@swc/helpers@0.5.3': - dependencies: - tslib: 2.6.3 + tslib: 2.7.0 '@trysound/sax@0.2.0': {} '@tybys/wasm-util@0.9.0': dependencies: - tslib: 2.6.3 + tslib: 2.7.0 optional: true '@types/ace@0.0.52': {} @@ -3090,11 +3116,11 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.3.0 + '@types/node': 22.5.5 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.3.0 + '@types/node': 22.5.5 '@types/bootstrap@5.2.10': dependencies: @@ -3103,30 +3129,20 @@ snapshots: '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 4.19.5 - '@types/node': 22.3.0 + '@types/node': 22.5.5 '@types/connect@3.4.38': dependencies: - '@types/node': 22.3.0 + '@types/node': 22.5.5 '@types/emscripten@1.39.13': {} - '@types/eslint-scope@3.7.7': - dependencies: - '@types/eslint': 9.6.0 - '@types/estree': 1.0.5 - - '@types/eslint@9.6.0': - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 - '@types/estree@1.0.5': {} '@types/express-serve-static-core@4.19.5': dependencies: - '@types/node': 22.3.0 - '@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 @@ -3134,14 +3150,14 @@ snapshots: dependencies: '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 4.19.5 - '@types/qs': 6.9.15 + '@types/qs': 6.9.16 '@types/serve-static': 1.15.7 '@types/http-errors@2.0.4': {} '@types/http-proxy@1.17.15': dependencies: - '@types/node': 22.3.0 + '@types/node': 22.5.5 '@types/json-schema@7.0.15': {} @@ -3149,29 +3165,31 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.3.0 + '@types/node': 22.5.5 - '@types/node@22.3.0': + '@types/node@22.5.5': dependencies: - undici-types: 6.18.2 + undici-types: 6.19.8 - '@types/prop-types@15.7.12': {} + '@types/prop-types@15.7.13': {} - '@types/qs@6.9.15': {} + '@types/qs@6.9.16': {} '@types/range-parser@1.2.7': {} '@types/react@18.2.79': dependencies: - '@types/prop-types': 15.7.12 + '@types/prop-types': 15.7.13 csstype: 3.1.3 '@types/retry@0.12.0': {} + '@types/retry@0.12.2': {} + '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.3.0 + '@types/node': 22.5.5 '@types/serve-index@1.9.4': dependencies: @@ -3180,12 +3198,12 @@ snapshots: '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.3.0 + '@types/node': 22.5.5 '@types/send': 0.17.4 '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.3.0 + '@types/node': 22.5.5 '@types/trusted-types@2.0.7': {} @@ -3193,11 +3211,11 @@ snapshots: '@types/ws@8.5.12': dependencies: - '@types/node': 22.3.0 + '@types/node': 22.5.5 '@vscode/l10n@0.0.18': {} - '@vscode/web-custom-data@0.4.11': {} + '@vscode/web-custom-data@0.4.12': {} '@webassemblyjs/ast@1.12.1': dependencies: @@ -3320,9 +3338,9 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - ace-builds@1.36.0: {} + ace-builds@1.36.2: {} - ace-linters@1.3.0: + ace-linters@1.3.2: dependencies: '@xml-tools/ast': 5.0.5 '@xml-tools/constraints': 1.1.1 @@ -3331,9 +3349,9 @@ snapshots: htmlhint: 1.1.4 luaparse: 0.3.1 showdown: 2.1.0 - vscode-css-languageservice: 6.3.0 - vscode-html-languageservice: 5.3.0 - vscode-json-languageservice: 5.4.0 + 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.12 vscode-languageserver-types: 3.17.5 @@ -3346,7 +3364,7 @@ snapshots: dependencies: acorn: 8.12.1 - acorn-walk@8.3.3: + acorn-walk@8.3.4: dependencies: acorn: 8.12.1 @@ -3383,7 +3401,7 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.0.1: {} + ansi-regex@6.1.0: {} ansi-styles@3.2.1: dependencies: @@ -3430,7 +3448,7 @@ snapshots: bn.js@5.2.1: {} - body-parser@1.20.2: + body-parser@1.20.3: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -3440,7 +3458,7 @@ snapshots: 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 @@ -3515,8 +3533,8 @@ snapshots: browserslist@4.23.3: dependencies: - caniuse-lite: 1.0.30001651 - electron-to-chromium: 1.5.7 + 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) @@ -3533,6 +3551,10 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + bundle-name@4.1.0: + dependencies: + run-applescript: 7.0.0 + bytes@3.0.0: {} bytes@3.1.2: {} @@ -3549,7 +3571,7 @@ snapshots: camelcase-css@2.0.1: {} - caniuse-lite@1.0.30001651: {} + caniuse-lite@1.0.30001660: {} chalk@2.4.2: dependencies: @@ -3566,18 +3588,6 @@ snapshots: dependencies: regexp-to-ast: 0.5.0 - chokidar@3.5.3: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - 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 - chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -3663,27 +3673,27 @@ snapshots: cookie@0.6.0: {} - core-js@3.36.1: {} + core-js@3.38.1: {} core-util-is@1.0.3: {} - cosmiconfig@8.3.6(typescript@5.5.4): + 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 optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 - cosmiconfig@9.0.0(typescript@5.5.4): + 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 optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 create-ecdh@4.0.4: dependencies: @@ -3738,12 +3748,12 @@ snapshots: css-tree@2.2.1: dependencies: mdn-data: 2.0.28 - source-map-js: 1.2.0 + source-map-js: 1.2.1 css-tree@2.3.1: dependencies: mdn-data: 2.0.30 - source-map-js: 1.2.0 + source-map-js: 1.2.1 css-what@6.1.0: {} @@ -3759,12 +3769,19 @@ snapshots: dependencies: ms: 2.0.0 - debug@4.3.6: + debug@4.3.7: dependencies: - ms: 2.1.2 + ms: 2.1.3 deepmerge@4.3.1: {} + 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 @@ -3775,7 +3792,7 @@ snapshots: es-errors: 1.3.0 gopd: 1.0.1 - define-lazy-prop@2.0.0: {} + define-lazy-prop@3.0.0: {} depd@1.1.2: {} @@ -3792,7 +3809,7 @@ snapshots: didyoumean2@4.1.0: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 leven: 3.1.0 lodash.deburr: 4.1.0 @@ -3834,7 +3851,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.7: {} + electron-to-chromium@1.5.24: {} elliptic@6.5.7: dependencies: @@ -3854,6 +3871,8 @@ snapshots: encodeurl@1.0.2: {} + encodeurl@2.0.0: {} + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 @@ -3875,7 +3894,7 @@ snapshots: es-module-lexer@1.5.4: {} - escalade@3.1.2: {} + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -3919,34 +3938,34 @@ snapshots: exit-hook@3.2.0: {} - express@4.19.2: + express@4.21.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 @@ -3963,7 +3982,7 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.7 + micromatch: 4.0.8 fast-json-stable-stringify@2.1.0: {} @@ -3981,10 +4000,10 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@1.2.0: + 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 @@ -3993,19 +4012,19 @@ snapshots: transitivePeerDependencies: - supports-color - follow-redirects@1.15.6: {} + follow-redirects@1.15.9: {} foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@9.0.2(typescript@5.5.4)(webpack@5.93.0): + fork-ts-checker-webpack-plugin@9.0.2(typescript@5.6.2)(webpack@5.94.0): dependencies: '@babel/code-frame': 7.24.7 chalk: 4.1.2 chokidar: 3.6.0 - cosmiconfig: 8.3.6(typescript@5.5.4) + cosmiconfig: 8.3.6(typescript@5.6.2) deepmerge: 4.3.1 fs-extra: 10.1.0 memfs: 3.5.3 @@ -4014,8 +4033,8 @@ snapshots: schema-utils: 3.3.0 semver: 7.6.3 tapable: 2.2.1 - typescript: 5.5.4 - webpack: 5.93.0 + typescript: 5.6.2 + webpack: 5.94.0 forwarded@0.2.0: {} @@ -4135,14 +4154,6 @@ snapshots: html-entities@2.5.2: {} - html-rspack-plugin@5.7.2(@rspack/core@0.7.5(@swc/helpers@0.5.12)): - optionalDependencies: - '@rspack/core': 0.7.5(@swc/helpers@0.5.12) - - html-rspack-plugin@5.7.2(@rspack/core@0.7.5(@swc/helpers@0.5.3)): - optionalDependencies: - '@rspack/core': 0.7.5(@swc/helpers@0.5.3) - htmlhint@1.1.4: dependencies: async: 3.2.3 @@ -4181,7 +4192,7 @@ snapshots: http-proxy: 1.18.1 is-glob: 4.0.3 is-plain-obj: 3.0.0 - micromatch: 4.0.7 + micromatch: 4.0.8 optionalDependencies: '@types/express': 4.17.21 transitivePeerDependencies: @@ -4190,13 +4201,15 @@ snapshots: 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 human-signals@2.1.0: {} + hyperdyperid@1.2.0: {} + ic10emu_wasm@file:../ic10emu_wasm/pkg: {} ic10lsp_wasm@file:../ic10lsp_wasm/pkg: {} @@ -4237,11 +4250,11 @@ snapshots: dependencies: binary-extensions: 2.3.0 - is-core-module@2.15.0: + is-core-module@2.15.1: dependencies: hasown: 2.0.2 - is-docker@2.2.1: {} + is-docker@3.0.0: {} is-extglob@2.1.1: {} @@ -4251,15 +4264,21 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-network-error@1.1.0: {} + is-number@7.0.0: {} is-plain-obj@3.0.0: {} is-stream@2.0.1: {} - is-wsl@2.2.0: + is-wsl@3.1.0: dependencies: - is-docker: 2.2.1 + is-inside-container: 1.0.0 isarray@1.0.0: {} @@ -4273,7 +4292,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.3.0 + '@types/node': 22.5.5 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -4305,9 +4324,9 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - launch-editor@2.8.1: + launch-editor@2.9.1: dependencies: - picocolors: 1.0.1 + picocolors: 1.1.0 shell-quote: 1.8.1 leven@3.1.0: {} @@ -4320,7 +4339,7 @@ snapshots: lit-analyzer@2.0.3: dependencies: - '@vscode/web-custom-data': 0.4.11 + '@vscode/web-custom-data': 0.4.12 chalk: 2.4.2 didyoumean2: 4.1.0 fast-glob: 3.3.2 @@ -4340,10 +4359,10 @@ snapshots: dependencies: '@types/trusted-types': 2.0.7 - lit-scss-loader@2.0.1(webpack@5.93.0): + lit-scss-loader@2.0.1(webpack@5.94.0): dependencies: clean-css: 4.2.4 - webpack: 5.93.0 + webpack: 5.94.0 lit@3.2.0: dependencies: @@ -4369,7 +4388,7 @@ snapshots: lzma-web@3.0.1: {} - marked@14.0.0: {} + marked@14.1.2: {} md5.js@1.3.5: dependencies: @@ -4387,7 +4406,14 @@ snapshots: dependencies: fs-monkey: 1.0.6 - merge-descriptors@1.0.1: {} + memfs@4.11.2: + dependencies: + '@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: {} @@ -4395,7 +4421,7 @@ snapshots: methods@1.1.2: {} - micromatch@4.0.7: + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 @@ -4417,11 +4443,11 @@ snapshots: mimic-fn@2.1.0: {} - mini-css-extract-plugin@2.9.0(webpack@5.93.0): + mini-css-extract-plugin@2.9.1(webpack@5.94.0): dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.93.0 + webpack: 5.94.0 minimalistic-assert@1.0.1: {} @@ -4441,8 +4467,6 @@ snapshots: ms@2.0.0: {} - ms@2.1.2: {} - ms@2.1.3: {} multicast-dns@7.2.5: @@ -4504,11 +4528,12 @@ snapshots: dependencies: mimic-fn: 2.1.0 - open@8.4.2: + open@10.1.0: dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 + 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: {} @@ -4517,6 +4542,12 @@ snapshots: '@types/retry': 0.12.0 retry: 0.13.1 + 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: @@ -4554,7 +4585,7 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-to-regexp@0.1.7: {} + path-to-regexp@0.1.10: {} path-type@4.0.0: {} @@ -4566,7 +4597,7 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.11 - picocolors@1.0.1: {} + picocolors@1.1.0: {} picomatch@2.3.1: {} @@ -4574,40 +4605,40 @@ snapshots: pirates@4.0.6: {} - postcss-import@15.1.0(postcss@8.4.41): + postcss-import@15.1.0(postcss@8.4.47): dependencies: - postcss: 8.4.41 + postcss: 8.4.47 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.41): + postcss-js@4.0.1(postcss@8.4.47): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.41 + postcss: 8.4.47 - postcss-load-config@4.0.2(postcss@8.4.41): + postcss-load-config@4.0.2(postcss@8.4.47): dependencies: lilconfig: 3.1.2 - yaml: 2.5.0 + yaml: 2.5.1 optionalDependencies: - postcss: 8.4.41 + postcss: 8.4.47 - postcss-loader@8.1.1(@rspack/core@0.7.5(@swc/helpers@0.5.12))(postcss@8.4.41)(typescript@5.5.4)(webpack@5.93.0): + 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: - cosmiconfig: 9.0.0(typescript@5.5.4) + cosmiconfig: 9.0.0(typescript@5.6.2) jiti: 1.21.6 - postcss: 8.4.41 + postcss: 8.4.47 semver: 7.6.3 optionalDependencies: - '@rspack/core': 0.7.5(@swc/helpers@0.5.12) - webpack: 5.93.0 + '@rspack/core': 1.0.5(@swc/helpers@0.5.13) + webpack: 5.94.0 transitivePeerDependencies: - typescript - postcss-nested@6.2.0(postcss@8.4.41): + postcss-nested@6.2.0(postcss@8.4.47): dependencies: - postcss: 8.4.41 + postcss: 8.4.47 postcss-selector-parser: 6.1.2 postcss-selector-parser@6.1.2: @@ -4617,11 +4648,11 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.4.41: + postcss@8.4.47: dependencies: nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 + picocolors: 1.1.0 + source-map-js: 1.2.1 process-nextick-args@2.0.1: {} @@ -4643,7 +4674,7 @@ snapshots: qr-creator@1.0.0: {} - qs@6.11.0: + qs@6.13.0: dependencies: side-channel: 1.0.6 @@ -4695,6 +4726,10 @@ snapshots: dependencies: resolve: 1.22.8 + reduce-configs@1.0.0: + dependencies: + browserslist: 4.23.3 + regenerator-runtime@0.14.1: {} regexp-to-ast@0.5.0: {} @@ -4709,7 +4744,7 @@ snapshots: resolve@1.22.8: dependencies: - is-core-module: 2.15.0 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -4717,22 +4752,24 @@ snapshots: reusify@1.0.4: {} - rimraf@3.0.2: + rimraf@5.0.10: dependencies: - glob: 7.2.3 + glob: 10.4.5 ripemd160@2.0.2: dependencies: hash-base: 3.1.0 inherits: 2.0.4 + run-applescript@7.0.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 rxjs@7.8.1: dependencies: - tslib: 2.6.3 + tslib: 2.7.0 safe-buffer@5.1.2: {} @@ -4740,58 +4777,67 @@ snapshots: safer-buffer@2.1.2: {} - sass-embedded-android-arm64@1.77.8: + sass-embedded-android-arm64@1.78.0: optional: true - sass-embedded-android-arm@1.77.8: + sass-embedded-android-arm@1.78.0: optional: true - sass-embedded-android-ia32@1.77.8: + sass-embedded-android-ia32@1.78.0: optional: true - sass-embedded-android-x64@1.77.8: + sass-embedded-android-riscv64@1.78.0: optional: true - sass-embedded-darwin-arm64@1.77.8: + sass-embedded-android-x64@1.78.0: optional: true - sass-embedded-darwin-x64@1.77.8: + sass-embedded-darwin-arm64@1.78.0: optional: true - sass-embedded-linux-arm64@1.77.8: + sass-embedded-darwin-x64@1.78.0: optional: true - sass-embedded-linux-arm@1.77.8: + sass-embedded-linux-arm64@1.78.0: optional: true - sass-embedded-linux-ia32@1.77.8: + sass-embedded-linux-arm@1.78.0: optional: true - sass-embedded-linux-musl-arm64@1.77.8: + sass-embedded-linux-ia32@1.78.0: optional: true - sass-embedded-linux-musl-arm@1.77.8: + sass-embedded-linux-musl-arm64@1.78.0: optional: true - sass-embedded-linux-musl-ia32@1.77.8: + sass-embedded-linux-musl-arm@1.78.0: optional: true - sass-embedded-linux-musl-x64@1.77.8: + sass-embedded-linux-musl-ia32@1.78.0: optional: true - sass-embedded-linux-x64@1.77.8: + sass-embedded-linux-musl-riscv64@1.78.0: optional: true - sass-embedded-win32-arm64@1.77.8: + sass-embedded-linux-musl-x64@1.78.0: optional: true - sass-embedded-win32-ia32@1.77.8: + sass-embedded-linux-riscv64@1.78.0: optional: true - sass-embedded-win32-x64@1.77.8: + sass-embedded-linux-x64@1.78.0: optional: true - sass-embedded@1.77.8: + 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 @@ -4800,29 +4846,32 @@ snapshots: supports-color: 8.1.1 varint: 6.0.0 optionalDependencies: - sass-embedded-android-arm: 1.77.8 - sass-embedded-android-arm64: 1.77.8 - sass-embedded-android-ia32: 1.77.8 - sass-embedded-android-x64: 1.77.8 - sass-embedded-darwin-arm64: 1.77.8 - sass-embedded-darwin-x64: 1.77.8 - sass-embedded-linux-arm: 1.77.8 - sass-embedded-linux-arm64: 1.77.8 - sass-embedded-linux-ia32: 1.77.8 - sass-embedded-linux-musl-arm: 1.77.8 - sass-embedded-linux-musl-arm64: 1.77.8 - sass-embedded-linux-musl-ia32: 1.77.8 - sass-embedded-linux-musl-x64: 1.77.8 - sass-embedded-linux-x64: 1.77.8 - sass-embedded-win32-arm64: 1.77.8 - sass-embedded-win32-ia32: 1.77.8 - sass-embedded-win32-x64: 1.77.8 + 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.77.8: + sass@1.78.0: dependencies: chokidar: 3.6.0 immutable: 4.3.7 - source-map-js: 1.2.0 + source-map-js: 1.2.1 schema-utils@3.3.0: dependencies: @@ -4844,11 +4893,9 @@ snapshots: '@types/node-forge': 1.3.11 node-forge: 1.3.1 - semver@6.3.1: {} - semver@7.6.3: {} - send@0.18.0: + send@0.19.0: dependencies: debug: 2.6.9 depd: 2.0.0 @@ -4882,12 +4929,12 @@ snapshots: transitivePeerDependencies: - supports-color - serve-static@1.15.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 @@ -4944,7 +4991,7 @@ snapshots: uuid: 8.3.2 websocket-driver: 0.7.4 - source-map-js@1.2.0: {} + source-map-js@1.2.1: {} source-map-support@0.5.21: dependencies: @@ -4957,7 +5004,7 @@ snapshots: spdy-transport@3.0.0: dependencies: - debug: 4.3.6 + debug: 4.3.7 detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -4968,7 +5015,7 @@ snapshots: spdy@4.0.2: dependencies: - debug: 4.3.6 + debug: 4.3.7 handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -5011,7 +5058,7 @@ snapshots: strip-ansi@7.1.0: dependencies: - ansi-regex: 6.0.1 + ansi-regex: 6.1.0 strip-final-newline@2.0.0: {} @@ -5049,9 +5096,9 @@ snapshots: css-tree: 2.3.1 css-what: 6.1.0 csso: 5.0.5 - picocolors: 1.0.1 + picocolors: 1.1.0 - tailwindcss@3.4.10: + tailwindcss@3.4.12: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -5063,15 +5110,15 @@ snapshots: is-glob: 4.0.3 jiti: 1.21.6 lilconfig: 2.1.0 - micromatch: 4.0.7 + micromatch: 4.0.8 normalize-path: 3.0.0 object-hash: 3.0.0 - picocolors: 1.0.1 - postcss: 8.4.41 - postcss-import: 15.1.0(postcss@8.4.41) - postcss-js: 4.0.1(postcss@8.4.41) - postcss-load-config: 4.0.2(postcss@8.4.41) - postcss-nested: 6.2.0(postcss@8.4.41) + 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 @@ -5080,16 +5127,16 @@ snapshots: tapable@2.2.1: {} - terser-webpack-plugin@5.3.10(webpack@5.93.0): + 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.31.6 - webpack: 5.93.0 + terser: 5.33.0 + webpack: 5.94.0 - terser@5.31.6: + terser@5.33.0: dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.12.1 @@ -5104,6 +5151,10 @@ snapshots: dependencies: any-promise: 1.3.0 + thingies@1.21.0(tslib@2.7.0): + dependencies: + tslib: 2.7.0 + thunky@1.1.0: {} to-regex-range@5.0.1: @@ -5116,6 +5167,10 @@ snapshots: tr46@0.0.3: {} + tree-dump@1.0.2(tslib@2.7.0): + dependencies: + tslib: 2.7.0 + ts-interface-checker@0.1.13: {} ts-lit-plugin@2.0.2: @@ -5123,19 +5178,19 @@ snapshots: lit-analyzer: 2.0.3 web-component-analyzer: 2.0.0 - ts-loader@9.5.1(typescript@5.5.4)(webpack@5.93.0): + ts-loader@9.5.1(typescript@5.6.2)(webpack@5.94.0): dependencies: chalk: 4.1.2 enhanced-resolve: 5.17.1 - micromatch: 4.0.7 + micromatch: 4.0.8 semver: 7.6.3 source-map: 0.7.4 - typescript: 5.5.4 - webpack: 5.93.0 + typescript: 5.6.2 + webpack: 5.94.0 ts-simple-type@2.0.0-next.0: {} - tslib@2.6.3: {} + tslib@2.7.0: {} type-is@1.6.18: dependencies: @@ -5160,9 +5215,9 @@ snapshots: typescript@5.2.2: {} - typescript@5.5.4: {} + typescript@5.6.2: {} - undici-types@6.18.2: {} + undici-types@6.19.8: {} universalify@2.0.1: {} @@ -5171,8 +5226,8 @@ snapshots: update-browserslist-db@1.1.0(browserslist@4.23.3): dependencies: browserslist: 4.23.3 - escalade: 3.1.2 - picocolors: 1.0.1 + escalade: 3.2.0 + picocolors: 1.1.0 uri-js@4.4.1: dependencies: @@ -5204,7 +5259,7 @@ snapshots: vscode-nls: 4.1.2 vscode-uri: 2.1.2 - vscode-css-languageservice@6.3.0: + vscode-css-languageservice@6.3.1: dependencies: '@vscode/l10n': 0.0.18 vscode-languageserver-textdocument: 1.0.12 @@ -5230,14 +5285,14 @@ snapshots: vscode-nls: 4.1.2 vscode-uri: 2.1.2 - vscode-html-languageservice@5.3.0: + vscode-html-languageservice@5.3.1: dependencies: '@vscode/l10n': 0.0.18 vscode-languageserver-textdocument: 1.0.12 vscode-languageserver-types: 3.17.5 vscode-uri: 3.0.8 - vscode-json-languageservice@5.4.0: + vscode-json-languageservice@5.4.1: dependencies: '@vscode/l10n': 0.0.18 jsonc-parser: 3.3.1 @@ -5293,7 +5348,7 @@ snapshots: webpack-bundle-analyzer@4.6.1: dependencies: acorn: 8.12.1 - acorn-walk: 8.3.3 + acorn-walk: 8.3.4 chalk: 4.1.2 commander: 7.2.0 gzip-size: 6.0.0 @@ -5305,26 +5360,18 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@5.3.4(webpack@5.93.0): + webpack-dev-middleware@7.4.2(webpack@5.94.0): dependencies: colorette: 2.0.19 - memfs: 3.5.3 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.2.0 - webpack: 5.93.0 - - webpack-dev-middleware@6.1.2(webpack@5.93.0): - dependencies: - colorette: 2.0.19 - memfs: 3.5.3 + memfs: 4.11.2 mime-types: 2.1.35 + on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.2.0 optionalDependencies: - webpack: 5.93.0 + webpack: 5.94.0 - webpack-dev-server@4.13.1(webpack@5.93.0): + webpack-dev-server@5.0.4(webpack@5.94.0): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -5335,29 +5382,29 @@ snapshots: '@types/ws': 8.5.12 ansi-html-community: 0.0.8 bonjour-service: 1.2.1 - chokidar: 3.5.3 + chokidar: 3.6.0 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.2.0 - launch-editor: 2.8.1 - open: 8.4.2 - p-retry: 4.6.2 - rimraf: 3.0.2 + 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-dev-middleware: 5.3.4(webpack@5.93.0) + webpack-dev-middleware: 7.4.2(webpack@5.94.0) ws: 8.18.0 optionalDependencies: - webpack: 5.93.0 + webpack: 5.94.0 transitivePeerDependencies: - bufferutil - debug @@ -5366,9 +5413,8 @@ snapshots: webpack-sources@3.2.3: {} - webpack@5.93.0: + 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 @@ -5389,7 +5435,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.93.0) + terser-webpack-plugin: 5.3.10(webpack@5.94.0) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -5432,20 +5478,18 @@ snapshots: ws@8.18.0: {} - ws@8.8.1: {} - xml@1.0.1: {} y18n@5.0.8: {} - yaml@2.5.0: {} + yaml@2.5.1: {} yargs-parser@21.1.1: {} 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 @@ -5455,7 +5499,7 @@ snapshots: 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 diff --git a/www/rsbuild.config.ts b/www/rsbuild.config.ts index f4e7536..cc466e1 100644 --- a/www/rsbuild.config.ts +++ b/www/rsbuild.config.ts @@ -13,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: [ @@ -58,15 +67,11 @@ export default defineConfig({ jsc: { parser: { syntax: "typescript", - // dynamicImport: true, decorators: true, }, transform: { - legacyDecorator: true, decoratorMetadata: true, - // decoratorVersion: "2022-03", }, - // target: "es2021", }, }, htmlPlugin: { diff --git a/www/src/ts/app/app.ts b/www/src/ts/app/app.ts index 4a85eee..cfe3468 100644 --- a/www/src/ts/app/app.ts +++ b/www/src/ts/app/app.ts @@ -54,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; diff --git a/www/src/ts/app/nav.ts b/www/src/ts/app/nav.ts index a94cc98..7b66021 100644 --- a/www/src/ts/app/nav.ts +++ b/www/src/ts/app/nav.ts @@ -92,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`